sync main #1

Open
timur wants to merge 91 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>
fix: make hero_osis_http UI proxy-compatible with BASE_PATH detection
Some checks failed
Build and Test / build (pull_request) Failing after 1m37s
Build and Test / build (push) Failing after 1m48s
1b347dbe4a
Add dynamic <base> tag injection and BASE_PATH global variable so static
assets and API calls work both when accessed directly and through hero_proxy.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Some checks failed
Build and Test / build (pull_request) Failing after 1m37s
Build and Test / build (push) Failing after 1m48s
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.