sync main #1

Open
timur wants to merge 90 commits from development into main
Owner
No description provided.
Major restructuring of AI domain concepts:

- Rename Role -> Agent: workflows of intelligence with capabilities
- Rename Agent -> Bot: anthropomorphized instances with personality
- Add new `flow` domain with DAG-based Workflow definitions
- Add Agent Client Protocol (ACP) support for external agents
- Bots can now be backed by internal agents or external ACP agents

Schema changes:
- Split ai.oschema into ai.oschema (chat) and agent.oschema (Agent/Bot)
- New flow/workflow.oschema defining workflow DAG structure
- WorkflowStep supports: prompt, tool_call, condition, parallel, loop, subworkflow, transform, output
- AgentCapability now references workflow_id instead of inline functionality

Services:
- AgentService: get_by_name, list_all, get_capabilities
- BotService: query (unified ACP interface), get_by_agent, get_by_username, set_state, discover_acp_capabilities, list_public
- WorkflowService: execute, get_by_name, list_published, validate, get_execution, cancel_execution

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add CI workflow and release targets
All checks were successful
Build and Test / build (push) Successful in 8m50s
Build and Test / build (pull_request) Successful in 9m1s
123fee2700
- Add .forgejo/workflows/build.yaml for CI on all branches
- Add make release, release-minor, release-major targets

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Demonstrates creating a Claude bot backed by Anthropic API via ACP:
- Creating a Bot with AcpEndpoint configuration
- Setting personality traits and capabilities
- Querying the bot (API structure demo)
- Bot state management

Run with: cargo run --example claude_bot_acp --features ai

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
feat(ai): implement BotService.query() with ACP stdio transport
Some checks failed
Build and Test / build (push) Failing after 11s
Build and Test / build (pull_request) Failing after 12s
628dc2c064
- Integrate herolib-clients::acp for stdio-based agent communication
- BotService.query() now spawns ACP-compliant agents (like Claude Code)
  and communicates via JSON-RPC 2.0 over stdin/stdout
- Add discover_acp_capabilities() to probe agent capabilities
- Update claude_bot_acp example to use Stdio transport

Note: Using path dependency for herolib-clients until acp module
is pushed to remote repository.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
fix(ai): align ACP client with official protocol schema
Some checks failed
Build and Test / build (push) Failing after 22s
Build and Test / build (pull_request) Failing after 18s
84b18a3575
- Update to use claude-code-acp adapter (not plain claude CLI)
- Fix protocol version to integer (1) instead of string
- Rename capabilities -> clientCapabilities for initialize
- Rename content -> prompt for session/prompt params
- Update session/new to use cwd instead of root_paths
- Remove token_usage from response (not in ACP spec)
- Add AuthMethod type for agent auth methods

The ACP integration now works end-to-end with claude-code-acp.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
feat(examples): add workflow-based coding agent example
Some checks failed
Build and Test / build (push) Failing after 13s
Build and Test / build (pull_request) Failing after 12s
b0a85ee9f4
Demonstrates creating a custom AI coding agent using Hero Osis workflows
that can compete with Claude Code. Each capability is powered by carefully
engineered workflow steps with AI prompts.

Features:
- code_analysis workflow: detect language → find issues → suggest improvements
- code_generation workflow: parse requirements → generate → self-review
- Agent "HeroCode" with both capabilities
- Bot "CodeMaster" with personality traits

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Add WorkflowExecutor with support for multiple step types:
  - Prompt: AI model calls via Anthropic API
  - Output: Collect and return results
  - Transform: Data transformation (basic implementation)
  - Condition: Branching logic with operators
  - Loop/Parallel/Subworkflow: Stub implementations

- Wire AI domain to Flow domain for internal agent queries:
  - BotServiceHandler.query() now executes workflows for internal agents
  - Model selection based on bot seniority level
  - Variable substitution with {{variable}} syntax

- Server startup wires domains together automatically

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
feat(sdk): use shared SmartId from herolib-sid
Some checks failed
Build and Test / build (push) Waiting to run
Build and Test / build (pull_request) Failing after 19s
7faf123d97
- Remove per-domain SmartId generation in SDK types
- Import SmartId from herolib-sid in all domain types
- Re-export SmartId in sdk lib.rs for convenience
- Add job domain SDK types
- Fix examples to use SmartId::parse() which returns Result

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
feat(ai): add hero_bot binary for ACP-based workflow execution
Some checks failed
Build and Test / build (push) Waiting to run
Build and Test / build (pull_request) Failing after 21s
da4b6aa350
hero_bot is an ACP-compatible agent binary that can be spawned like
Claude Code or other external agents. It executes Hero Osis workflows
via the standard ACP stdio protocol.

Usage:
  hero_bot --agent-id 0005 --server http://localhost:3377
  hero_bot --workflow ./workflows/analyzer.toml

ACP endpoint configuration:
  [acp_endpoint]
  transport = "stdio"
  command = "hero_bot"
  args = ["--agent-id", "0005", "--server", "http://localhost:3377"]

This allows internal agents to use the same ACP interface as external
agents, providing a unified communication layer.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
fix(examples): update error message now that workflow execution works
Some checks failed
Build and Test / build (push) Waiting to run
Build and Test / build (pull_request) Failing after 20s
2e415bff3d
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
chore: regenerate types and add job domain
Some checks failed
Build and Test / build (push) Waiting to run
Build and Test / build (pull_request) Failing after 18s
967e4ddaa2
- Regenerate WASM types for all domains (SmartId import change)
- Add job domain for distributed job execution
- Update domain READMEs
- Update Cargo.lock

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
chore: cleanup and update configs
Some checks failed
Build and Test / build (push) Waiting to run
Build and Test / build (pull_request) Failing after 4m16s
44f2090de4
- Remove unused CI workflow
- Update Cargo.toml (local path for herolib-clients)
- Update README
- Regenerate server READMEs

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
chore: simplify Makefile and fix build issues
Some checks failed
Build and Test / build (push) Waiting to run
Build and Test / build (pull_request) Failing after 3m52s
3eb49a6c45
- Remove instance management targets (run-instance, stop-instance, stop-all, list-instances)
- Remove test-all (test now runs all tests)
- Remove sdk-build, sdk-check, update-deps, release-patch targets
- Move executor module to rpc.rs to prevent linter removal
- Add ambiguous_glob_reexports allow to SDK for naming conflicts

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
chore: cleanup docs, scripts, and specs
Some checks failed
Build and Test / build (push) Waiting to run
Build and Test / build (pull_request) Failing after 4m2s
91f3057abb
- Remove outdated docs (EMBEDDER_ARCHITECTURE.md)
- Remove obsolete shell scripts (replaced by Makefile)
- Remove outdated specs docs
- Simplify README
- Add SDK Cargo.lock
- Suppress ambiguous glob re-export warnings in SDK

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
fix: remove duplicate executor module export
Some checks failed
Build and Test / build (push) Waiting to run
Build and Test / build (pull_request) Failing after 3m52s
cbc3042e9d
Executor is now declared in rpc.rs, remove duplicate from mod.rs

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
feat: change default context from hero_osis to root
Some checks failed
Build and Test / build (push) Waiting to run
Build and Test / build (pull_request) Failing after 2m56s
4697604bdb
- Default context is now "root" instead of "hero_osis"
- Update e2e tests to use root context
- Add tests/test_data/ to .gitignore
- Remove outdated SCHEMA_PROPOSALS.md
- Suppress ambiguous glob re-export warnings in SDK

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
docs: reorganize documentation structure
Some checks failed
Build and Test / build (push) Waiting to run
Build and Test / build (pull_request) Failing after 3m48s
35b131fbe4
- Move creating-schemas docs from specs/ to docs/
- Add research docs folder

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
chore: update dependencies and add new business example
Some checks failed
Build and Test / build (push) Failing after 4m46s
Build and Test / build (pull_request) Failing after 4m39s
507561a4cd
- Update `herolib-*` git dependency hashes
- Upgrade `time` and `time-macros` crate versions
- Add `business_client_server` example entry
- Change `herolib-osis` git dependency source URL
feat(examples): update all examples to use 'root' default context
Some checks failed
Build and Test / build (pull_request) Failing after 1m43s
Build and Test / build (push) Failing after 1m53s
d72ee69171
- Update claude_bot_acp.rs with personality-focused query
- Update workflow_coding_agent.rs context
- Update all domain client_server.rs examples
- Add network domain schema updates (Farm, Contract, VDC types)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
feat: add Configuration rootobject and simplify Context schema
Some checks failed
Build and Test / build (pull_request) Failing after 1m30s
Build and Test / build (push) Failing after 1m53s
7b34d2aad4
Separate per-context configuration from Context identity:
- Context now holds only name (identifier used in URLs/paths)
- New Configuration rootobject holds per-context settings (title, description, icon, color, theme_id, owner)
- Configuration lives in each context's own base domain
- Themes seeded in all context directories (not just root)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
fix: Update server.rs for external indexer service
Some checks failed
Build and Test / build (push) Failing after 1m28s
Build and Test / build (pull_request) Failing after 1m27s
e8851c25f1
- Remove index_path argument from all Osis*::new() calls
- Indexing is now handled by hero_index_server
- Add HERO_INDEXER_URL env var for AppState configuration

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
feat: Add buildenv.sh and use host/port for indexer config
Some checks failed
Build and Test / build (push) Failing after 1m25s
Build and Test / build (pull_request) Failing after 1m53s
5c1cdb60d5
- Add buildenv.sh following build_lib pattern
- Use HERO_INDEXER_HOST + HERO_INDEXER_PORT instead of URL
- Allows more flexible configuration

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
chore: Update generated files for external indexer
Some checks failed
Build and Test / build (push) Failing after 1m22s
Build and Test / build (pull_request) Failing after 1m21s
6e624a76af
- Regenerated server and client code without index_path
- Updated mock data and Cargo.lock

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
feat: Add marketplace types, ledger/KVS domain, and user authentication
Some checks failed
Build and Test / build (pull_request) Failing after 2m6s
Build and Test / build (push) Failing after 2m7s
31a30c20fb
- Add ledger domain with full in-memory KVS implementation (set, get, delete, list_keys, etc.)
- Add marketplace schemas: SshKey, App, AppDeployment, NodeRental, Service, ServiceBooking, etc.
- Implement user_authenticate and user_by_email in identity domain
- Register ledger domain in server binary
- Wire up ledger feature in Cargo.toml, build.rs, Makefile
feat: Add Dockerfile and include ledger in CI features
Some checks failed
Build and Test / build (push) Failing after 2m25s
Build and Test / build (pull_request) Failing after 2m25s
c5108dafc6
- Create multi-stage Dockerfile (rust:latest builder + debian:bookworm-slim runtime)
- Build with all domains except embedder (no ONNX in Docker)
- Add ledger to CI_FEATURES in build.yaml so KVS code is tested
fix: Add libseccomp and libcap-ng to Dockerfile, use trixie runtime
Some checks failed
Build and Test / build (pull_request) Failing after 2m7s
Build and Test / build (push) Failing after 2m8s
5a833c496a
- Builder needs libseccomp-dev and libcap-ng-dev for herolib_virt
- Runtime needs libseccomp2 and libcap-ng0
- Use debian:trixie-slim for runtime (matches rust:latest glibc)
fix: healthcheck uses /api instead of / (root returns 404)
Some checks failed
Build and Test / build (pull_request) Failing after 1m21s
Build and Test / build (push) Failing after 1m50s
25234236cf
chore: update generated files for ledger, business, identity, network domains
Some checks failed
Build and Test / build (pull_request) Failing after 2m7s
Build and Test / build (push) Failing after 2m12s
b5807d295d
Includes generated schemas, SDK clients, RPC handlers, OpenRPC specs,
and test stubs for the new ledger domain and updated types across all
domains.
feat(mock): add comprehensive seed data for root context
Some checks failed
Build and Test / build (pull_request) Failing after 2m8s
Build and Test / build (push) Failing after 2m10s
e50f424573
Add mock data for the default 'root' context covering:
- Communication: conversations (team, DM, engineering), chat messages
- AI: bots (assistant, coder, researcher), agent (workflow executor)
- Identity: users (alice, bob, carol), groups (engineering, product)
- Business: companies (hero, acme), persons (alice, bob)
- Projects: projects (hero platform, ai agents), tasks
- Calendar: team calendar, events (standup, sprint planning)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Apply `--contexts default` to release run
- Apply `--contexts default` to dev mode
- Apply `--contexts default` to seed data loader
- Apply `--contexts default` to dev-minimal run
- Apply `--contexts default` to mock and mock-minimal runs
Merge branch 'development' of forge.ourworld.tf:lhumina_code/hero_osis into development
Some checks failed
Build and Test / build (pull_request) Failing after 1m26s
Build and Test / build (push) Failing after 1m45s
12f3ed2f03
feat: implement AuthServiceHandler with challenge-response login
Some checks failed
Build and Test / build (push) Failing after 2m17s
Build and Test / build (pull_request) Failing after 2m18s
6914b9c383
MVP password-hash auth (SHA-256) with in-memory challenge storage,
session management (create/validate/logout/revoke), and admin seed
user for development.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
fix: update tests and examples for new domain constructor signature
Some checks failed
Build and Test / build (pull_request) Failing after 2m8s
Build and Test / build (push) Failing after 2m10s
9c64848ba4
Remove index_path argument from all domain constructors:
- OsisXxx::new() now takes (db_path, user_id) instead of (db_path, index_path, user_id)
- Update all tests.rs files across domains
- Update all client_server.rs examples
- Remove cleanup code for removed index_path

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
feat: add SliceProduct schema and update NodeGroup for production marketplace
Some checks failed
Build and Test / build (push) Failing after 2m10s
Build and Test / build (pull_request) Failing after 2m11s
588b1d7c5c
- Add SliceProduct rootobject with full field set (pricing, config, availability, visibility)
- Add supporting types: SliceConfiguration, SlicePricing, ProductAvailability, ProductVisibility
- Add SliceProductService with query methods (by_owner, by_node, available, featured)
- Fix NodeGroupType enum: manual/auto/region -> storage/compute/ai_gpu/custom
- Add NodeGroupStatus enum, NodeGroupConfig and ResourceOptimization structs
- Add lifecycle trigger stubs and service handler for SliceProduct in rpc.rs
feat: add compute slice product management
Some checks failed
Build and Test / build (pull_request) Failing after 2m11s
Build and Test / build (push) Failing after 2m13s
c7485385b5
- Introduce new `SliceProduct` and related types
- Add `SliceProductService` for product queries
- Extend `NodeGroup` with config, status, and optimization fields
- Update `NodeGroupType` enum values
- Implement calendar event range filtering
fix: make RELEASE_DIR respect CARGO_TARGET_DIR
Some checks failed
Build and Test / build (push) Failing after 1m46s
Build and Test / build (pull_request) Failing after 1m25s
1e39fcf760
When CARGO_TARGET_DIR is set (e.g. by hero_zero), binaries end up
outside target/release. RELEASE_DIR now falls back correctly.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
refactor: Remove embedder from default features, make it opt-in
Some checks are pending
Build and Test / build (push) Waiting to run
Build and Test / build (pull_request) Waiting to run
195bd7d0eb
Embedder requires ONNX runtime which isn't available on all platforms.
all-domains no longer includes embedder; use all-domains-with-embedder for opt-in.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
fix test code generation
Some checks failed
Build and Test / build (push) Failing after 7s
Build and Test / build (pull_request) Failing after 7s
6a69b81fd1
fix: Replace hardcoded absolute paths with git URLs
Some checks failed
Build and Test / build (pull_request) Failing after 1m45s
Build and Test / build (push) Failing after 3m11s
588cfb4285
herolib-osis and herolib-sid dependencies used /Users/timurgordon/...
absolute paths that break for any other developer or CI build.
Switched to git URLs matching the other herolib dependencies.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
feat: add Ghent theme seeded from hero_os color scheme
Some checks are pending
Build and Test / build (push) Waiting to run
Build and Test / build (pull_request) Waiting to run
1816133262
Adds theme_ghent.toml to all 7 mock contexts, porting the classic
hero_os dark theme (Apple Blue #007AFF accent, charcoal backgrounds)
so it can be tested in the new wasmos.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
fix: use hero_os gradient background for Ghent theme
Some checks failed
Build and Test / build (push) Failing after 1m22s
Build and Test / build (pull_request) Failing after 1m43s
d02c7130eb
Replaces solid #1e1e1e with the original hero_os desktop gradient
(#1a1a2e → #16213e → #0f3460) and adjusts surface to blue-tinted
#16213e so panels blend with the gradient.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
fix: use tmp+mv for binary install to avoid 'Text file busy' error
Some checks are pending
Build and Test / build (push) Waiting to run
81593e2f61
fix: hero_indexer port reference 3388→3386
Some checks are pending
Build and Test / build (push) Waiting to run
Build and Test / build (pull_request) Waiting to run
385f3895af
fix: Makefile compliance - move scripting to scripts/
Some checks failed
Build and Test / build (push) Failing after 1m47s
Build and Test / build (pull_request) Failing after 1m47s
6ae2e2f317
- Move status, install, stop-port, release logic to scripts/
- Each Makefile target is now a thin wrapper (1-2 commands max)
- Per makefile_helper skill: Makefiles are the menu, scripts are the kitchen
standardize: rename hyphenated packages + herolib refs to snake_case
Some checks failed
Build and Test / build (pull_request) Waiting to run
Build and Test / build (push) Failing after 4s
319ceb9e6a
- hero_osis-sdk → hero_osis_sdk
- hero_osis-messaging-example → hero_osis_messaging_example
- hero_osis-video-room → hero_osis_video_room
- herolib-* → herolib_* (all dependency references)
- hero_lib git branch → development_hero_zero_standardize

Per naming_convention: all package names must use snake_case.
ci: restrict test triggers to PRs and push to development/main
Some checks are pending
Build and Test / build (pull_request) Waiting to run
9d1248d4c7
Stop triggering test/build workflows on every push to every branch.
Tests now run only on:
- push to development or main (post-merge validation)
- pull_request targeting development or main (pre-merge check)
- manual workflow_dispatch

Per forge_ci skill: Standard Workflow Triggers convention.
standardize: fix hero_osis_sdk package name and herolib deps
Some checks are pending
Build and Test / build (pull_request) Waiting to run
461c5ea561
- sdk/rust/Cargo.toml: name hero_osis-sdk → hero_osis_sdk
- sdk/rust/Cargo.toml: herolib-sid → herolib_sid, branch → development_hero_zero_standardize
- sdk/rust/Cargo.toml: herolib_otoml branch main → development_hero_zero_standardize
- Root Cargo.toml: remove redundant package = field for hero_osis_sdk
- Dioxus.toml: hero_osis-messaging → hero_osis_messaging, hero_osis-video-room → hero_osis_video_room
standardize: switch git dep branches to development
Some checks failed
Build and Test / build (pull_request) Failing after 1m22s
a145421e3d
Preparation for merge: all git dependency branch refs changed from
development_hero_zero_standardize to development. After hero_lib PR
merges first, all downstream deps resolve on development branch.
Merge pull request 'standardize: naming, ports, and dependency conventions' (#4) from development_hero_zero_standardize into development
Some checks are pending
Build and Test / build (push) Waiting to run
Build and Test / build (pull_request) Waiting to run
8bd16fcd44
Add sid field to all 608 TOML seed files under data/mock/ to prevent
duplicate records from being created on every server restart.

Problem:
Seed files had no sid field, so seed_domain() injected sid="0000"
(global_id=0), causing db.set() to generate a new random SID on every
restart. This created duplicate entities each time hero_osis started.

Solution:
Each seed file now has a stable sid (e.g. sid="s001") assigned
sequentially per (context, domain, type) group. The 's' prefix places
these at global_id ~1.3M, safely above the auto-increment range which
starts at global_id=2. Since db.set() upserts when global_id != 0,
restarting the server now overwrites existing records instead of
creating duplicates.

Convention:
- SIDs use base36 format starting from 's001' (global_id=1,306,369)
- Sequential per entity type within each context/domain
- 1.3M+ user creates per type needed before any collision
- Included scripts/add_seed_sids.py for reproducibility

No code changes - relies entirely on existing db.set() upsert behavior.
feat: add missing business domain client_server example
Some checks failed
Build and Test / build (pull_request) Failing after 1m23s
15ec978f86
Adds examples/rust/business/client_server.rs which was declared in
Cargo.toml but missing, causing cargo test to fail. Follows the same
CRUD pattern as the other domain examples (finance, identity, etc.).
Merge pull request 'feat: idempotent seeding — add stable SIDs to all mock seed files' (#2) from development_idempotent_seeding into development
Some checks are pending
Build and Test / build (push) Waiting to run
Build and Test / build (pull_request) Waiting to run
cedf6ccfad
fix: correct e2e test URLs — context is 'root' not 'hero_osis'
Some checks failed
Build and Test / build (pull_request) Failing after 1m20s
f80be92deb
The server registers all domains under the 'root' context, so the RPC
endpoint is /api/root/business/rpc, not /api/hero_osis/business/rpc.
Same fix for the inspector health check URL.
Merge pull request 'fix: correct e2e test URLs — context is root not hero_osis' (#5) from development_fix_e2e_test into development
Some checks failed
Build and Test / build (push) Failing after 1m20s
Build and Test / build (pull_request) Failing after 1m22s
ce784d73fd
docs: add offline support documentation
Some checks are pending
Build and Test / build (push) Waiting to run
Build and Test / build (pull_request) Waiting to run
3ac113243a
References herolib-osis for implementation details.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
feat: add installed_apps field to Configuration schema
Some checks are pending
Build and Test / build (push) Waiting to run
Build and Test / build (pull_request) Waiting to run
b0709fd7d2
Add optional installed_apps field to Configuration for per-context
app installation tracking. This enables the dock to show only installed
archipelagos per context instead of all available ones.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
chore: regenerate types and docs for installed_apps field
Some checks are pending
Build and Test / build (push) Waiting to run
Build and Test / build (pull_request) Waiting to run
c85928ec7e
Generated code and schema docs for the installed_apps Configuration field
added in b0709fd.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
feat: add media domain with photo and song schemas
Some checks are pending
Build and Test / build (push) Waiting to run
Build and Test / build (pull_request) Waiting to run
5981df2e08
Add OSchema definitions for Photos (Photo, Album) and Songs (Song, Playlist)
with generated SDK clients and server handlers. Includes mock data for seeding.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
fix: use herolib_sid (underscore) to match remote hero_lib package name
Some checks are pending
Build and Test / build (push) Waiting to run
Build and Test / build (pull_request) Waiting to run
06fa26e887
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
fix: restore hero_osis_sdk package name (underscore, not hyphen)
Some checks are pending
Build and Test / build (push) Waiting to run
Build and Test / build (pull_request) Waiting to run
ff96e9c3a9
The linter had changed the package name from hero_osis_sdk to hero_osis-sdk,
breaking downstream git dependency resolution.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
feat: wire offline client as default SDK transport
Some checks failed
Build and Test / build (push) Failing after 1m24s
Build and Test / build (pull_request) Failing after 1m24s
60083bd8c0
Regenerated SDK with offline-aware clients:
- All domain mod.rs files now import offline client (CachingTransport)
- SDK Cargo.toml adds herolib_osis, sled, dirs, IndexedDB web-sys deps
- New osis_client_offline_generated.rs for all 17 domains
- Fix SDK package name (underscore not hyphen)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
refactor: simplify SDK to single client per domain
Some checks failed
Build and Test / build (pull_request) Failing after 2m12s
Build and Test / build (push) Failing after 2m17s
4a4bd64a88
Remove separate native (reqwest), WASM (gloo-net), and non-caching unified
client files. Each domain now has one osis_client_generated.rs that works
on all platforms with built-in offline support via CachingTransport.

Deletes 68 redundant files (~72k lines).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
fix: regenerate SDK with service method transport fix
Some checks failed
Build and Test / build (push) Failing after 1m27s
Build and Test / build (pull_request) Failing after 1m24s
2a4ccfe0fc
Service methods now correctly call self.transport.rpc_call() instead
of self.rpc_call().

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
fix: regenerate SDK with native-only sled/reqwest/dirs deps
Some checks failed
Build and Test / build (push) Failing after 2m15s
Build and Test / build (pull_request) Failing after 2m14s
b86f7278a9
Prevents getrandom compile error when building for WASM.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
fix: add getrandom js feature for WASM targets in SDK
Some checks failed
Build and Test / build (pull_request) Failing after 1m25s
Build and Test / build (push) Failing after 1m47s
db2a815334
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
fix: add getrandom 0.3 wasm_js feature for WASM targets in SDK
Some checks failed
Build and Test / build (push) Failing after 1m24s
Build and Test / build (pull_request) Failing after 1m45s
00c6ba25ef
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
fix: update herolib_osis with WASM-gated native modules
Some checks failed
Build and Test / build (push) Failing after 1m29s
Build and Test / build (pull_request) Failing after 1m46s
3d671c6b5d
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
chore: regenerate SDK with updated herolib deps
Some checks failed
Build and Test / build (push) Failing after 2m17s
Build and Test / build (pull_request) Failing after 2m15s
3f6cf11db0
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
refactor: regenerate SDK with shared herolib_osis_client
Some checks failed
Build and Test / build (push) Failing after 1m42s
Build and Test / build (pull_request) Failing after 1m45s
0894c60024
Replace duplicated RPC boilerplate in all 17 generated clients with
thin wrappers around herolib_osis_client::OsisClient. Remove direct
reqwest/gloo-net/wasm deps from SDK (now transitive). Delete OFFLINE.md.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
refactor: reduce boilerplate with osis_service_handler macro and lifecycle trait
Some checks failed
Build and Test / build (push) Failing after 1m50s
Build and Test / build (pull_request) Failing after 1m46s
39f6c33b71
- Replace 104 handler struct+impl blocks with osis_service_handler! macro calls
- Regenerate osis_server_generated.rs to import OsisLifecycleHooks trait
  instead of generating it inline in every domain
- Remove deprecated core/server re-export modules from lib.rs (~200 lines)
- Update all import paths from crate::core::domain to crate::domain::core
- Update bin/server.rs and bin/hero_bot.rs imports to domain-first paths

Net reduction: ~1,450 lines across 37 files.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
fix: update seed data and regenerate types with serde defaults
Some checks failed
Build and Test / build (push) Failing after 1m44s
Build and Test / build (pull_request) Failing after 1m44s
43b84a6b3b
Generator changes (in herolib_osis) add #[serde(default)] to all Vec
and bool fields, so missing collections default to empty and bools
to false during deserialization.

Seed data fixes:
- Company: fix invalid CompanyType variants (saas, enterprise, consulting)
- Person: fix invalid PersonRole variants (engineer, tech-lead)
- Agent: fix workflow_sid -> workflow_id, add missing required fields
- Bot: retype 3 agent seeds that were actually Bot data
- ChatMessage: fix parent_messages from string array to MessageLink structs
- Project: fix TOML ordering (member_ids before [[swimlanes]] blocks)
- Role: delete 4 role seeds (type doesn't exist in ai domain)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
fix: fix remaining seed data errors
Some checks failed
Build and Test / build (pull_request) Failing after 2m13s
Build and Test / build (push) Failing after 2m15s
05efb85da5
- Agent seeds (geomind/incubaid): retype as Bot (had Bot fields)
- Bot seeds (threefold): fix agent_source "builtin" -> "internal"
- Event seeds: convert attendees from string array to Attendee structs,
  add required title field, remove invalid fields
- Group seeds: add required parent_group field, remove invalid fields

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
feat: Unix socket support, remove dotenvy
Some checks failed
Build and Test / build (push) Failing after 1m25s
Build and Test / build (pull_request) Failing after 1m44s
07025494fb
- Support unix: bind addresses via HERO_OSIS_BIND env var
- Remove dotenvy dependency (env vars set before process starts)
- Fix log message for Unix socket addresses
- Document Unix socket access in README

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
chore: update herolib to 4f26fa3b (Unix socket support)
Some checks failed
Build and Test / build (pull_request) Failing after 1m25s
Build and Test / build (push) Failing after 1m45s
5cb05ea4f8
Pin Cargo.lock to the herolib commit that adds Unix socket
validation support in AxumRpcServer.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
refactor: migrate from herolib_osis to hero_rpc_osis
Some checks failed
Build and Test / build (push) Failing after 3s
Build and Test / build (pull_request) Failing after 3s
51d4f59abb
Updates all imports and dependencies to use the new hero_rpc workspace
crates after the OSIS/RPC extraction from hero_lib (hero_lib#105).

- herolib_osis → hero_rpc_osis (Cargo.toml, build.rs, all generated files)
- herolib_osis_client → hero_rpc_client (SDK Cargo.toml, generated clients)
- Update 86+ generated source files and 17 SDK client files
- Add local development patches for hero_rpc and hero_lib

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Remove local development [patch] sections — use git deps only
Some checks failed
Build and Test / build (push) Failing after 1m26s
Build and Test / build (pull_request) Failing after 1m46s
e54ce8a8ed
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
refactor: replace herolib_clients with herolib_acp, use rustls only
All checks were successful
Build and Test / build (pull_request) Successful in 3m40s
Build and Test / build (push) Successful in 4m10s
a6394a742c
- Swap herolib_clients (389 transitive deps) for herolib_acp (~20 deps)
- Switch reqwest to rustls-only (drop native-tls dual TLS stack)
- Update git deps to pick up hero_rpc and hero_lib changes
- Eliminates herolib_core duplication (single git copy now)

Dep count: 756 → 391

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
feat: add reverse proxy base path support via HERO_OSIS_BASE_PATH
All checks were successful
Build and Test / build (push) Successful in 5m29s
Build and Test / build (pull_request) Successful in 5m31s
cf51ea6ef3
Reads HERO_OSIS_BASE_PATH env var and passes it to RpcServerConfig so
all browser-facing URLs include the proxy prefix. Static index.html
switched to relative URLs for proxy compatibility.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
feat: make Ghent the default theme across all contexts
All checks were successful
Build and Test / build (push) Successful in 6m28s
Build and Test / build (pull_request) Successful in 6m30s
0632f61b67
Switch is_default from Atlantis to Ghent theme in all 7 context
seed data directories.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add favicon.svg for web UI
All checks were successful
Build and Test / build (push) Successful in 3m34s
Build and Test / build (pull_request) Successful in 4m10s
ee18fab112
Purple database/schema icon matching the existing indigo theme.
index.html already referenced it but the file was missing.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Phase 0 of 5-crate restructure:
- Convert to workspace with hero_osis_ui member
- Add static/.well-known/heroservice.json discovery manifest
- Rewrite server.rs for socket-per-context (one Unix socket per context
  at ~/hero/var/sockets/<context>/hero_osis.sock)
- Legacy mode preserved via HERO_OSIS_BIND env var
- Create hero_osis_ui crate (Axum, Askama, Bootstrap 5 dark theme)
- Add docs/RESTRUCTURE_PLAN.md for remaining phases

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Restructure from monolithic layout to standardized 5-crate workspace:
- crates/hero_osis/ — core library (types + domain handlers, generated)
- crates/hero_osis_server/ — server binary (socket-per-context)
- crates/hero_osis_client/ — async client (generated by core's build.rs)
- crates/hero_osis_rhai/ — Rhai bindings placeholder
- crates/hero_osis_ui/ — admin web panel (existing)

Root Cargo.toml is now workspace-only (no [package]).
Generator creates lib.rs, services placeholder, and client code
automatically from OSchema definitions.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
feat: raw JSON-RPC transport, correct binary naming, dual-bind HTTP
Some checks failed
Build and Test / build (push) Failing after 4s
Build and Test / build (pull_request) Failing after 4s
e3c7c284f1
- Replace HTTP-wrapped RPC with raw newline-delimited JSON-RPC 2.0 over Unix sockets
- Rename binaries: hero_osis_openrpc (backend), hero_osis_http (admin panel)
- Socket paths: ~/hero/var/sockets/{context}/hero_osis_openrpc.sock
- hero_osis_http binds both Unix socket and TCP port 8801 (no CLI flags)
- Flatten domain structure: remove core/server subdirs, types at domain root
- Move oschema files to schemas/ at repo root
- Fix feature propagation for all-domains
- Fix flow domain ambiguous imports (executor vs rpc re-exports)
- Update Makefile: correct binary names, add ui/ui-dev targets
- Remove old hero_osis_server and hero_osis_ui crates

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
fix: install both hero_osis_openrpc and hero_osis_http binaries
Some checks failed
Build and Test / build (pull_request) Failing after 2s
Build and Test / build (push) Failing after 6s
da601e9d18
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
fix: remove [patch] section so builds work outside dev workspace
Some checks failed
Build and Test / build (pull_request) Failing after 1m5s
Build and Test / build (push) Failing after 1m7s
a976a793bd
The git deps in crate Cargo.tomls are sufficient. The [patch] override
with ../hero_rpc/ breaks zinit installs where hero_rpc isn't co-located.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
fix: admin UI context loading, Axum route syntax, mock seeding
Some checks failed
Build and Test / build (push) Failing after 1m8s
Build and Test / build (pull_request) Failing after 1m50s
08eea4de34
- Fix Axum 0.7 route params: use :param syntax instead of {param}
- Rewrite dashboard.js to fetch contexts via /rpc/root JSON-RPC
- Fix Makefile mock/seed targets to register all mock contexts
- Remove stale "via hero_proxy" text from template
- Remove redundant #![cfg(test)] from test modules
- Update Cargo.lock for hero_rpc dependencies

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
feat: auto-detect seed directory and contexts on startup
Some checks failed
Build and Test / build (push) Has been cancelled
Build and Test / build (pull_request) Has been cancelled
3a1ff526e5
When no --seed-dir is given, auto-detect ./data/mock if it exists.
Scan seed directory for context subdirectories (dirs containing
domain subdirs) and auto-register them. This means running
hero_osis_openrpc from the workspace root auto-seeds mock data
without needing any flags.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
fix: use compile-time path for seed dir auto-detection
Some checks failed
Build and Test / build (push) Failing after 1m5s
Build and Test / build (pull_request) Failing after 1m28s
19bd3498a4
Fall back to CARGO_MANIFEST_DIR when CWD isn't the workspace root,
so auto-seeding works when hero_services runs the binary from any
directory.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Some checks failed
Build and Test / build (push) Failing after 1m5s
Build and Test / build (pull_request) Failing after 1m28s
This pull request can be merged automatically.
You are not authorized to merge this pull request.
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin development:development
git switch development

Merge

Merge the changes and update on Forgejo.

Warning: The "Autodetect manual merge" setting is not enabled for this repository, you will have to mark this pull request as manually merged afterwards.

git switch main
git merge --no-ff development
git switch development
git rebase main
git switch main
git merge --ff-only development
git switch development
git rebase main
git switch main
git merge --no-ff development
git switch main
git merge --squash development
git switch main
git merge --ff-only development
git switch main
git merge development
git push origin main
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
3 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
lhumina_code/hero_osis!1
No description provided.