omnius 1.0.591 → 1.0.592
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.aiwg/addons/omnius-docs/README.md +15 -1
- package/.aiwg/addons/omnius-docs/manifest.json +28 -68
- package/.aiwg/addons/omnius-docs/skills/agent-failure-recovery/SKILL.md +2 -1
- package/.aiwg/addons/omnius-docs/skills/browser-interaction-validation/SKILL.md +2 -1
- package/.aiwg/addons/omnius-docs/skills/evidence-directed-delivery/SKILL.md +2 -1
- package/.aiwg/addons/omnius-docs/skills/hardware-evidence-audit/SKILL.md +2 -1
- package/.aiwg/addons/omnius-docs/skills/omnius-docs/SKILL.md +17 -7
- package/.aiwg/addons/omnius-docs/skills/omnius-inference-docs/SKILL.md +27 -0
- package/.aiwg/addons/omnius-docs/skills/omnius-integration-docs/SKILL.md +21 -0
- package/.aiwg/addons/omnius-docs/skills/omnius-ops-docs/SKILL.md +2 -0
- package/.aiwg/addons/omnius-docs/skills/omnius-realtime-docs/SKILL.md +2 -0
- package/.aiwg/addons/omnius-docs/skills/omnius-sponsor-docs/SKILL.md +2 -0
- package/.aiwg/addons/omnius-docs/skills/omnius-telegram-docs/SKILL.md +2 -0
- package/.aiwg/addons/omnius-docs/skills/omnius-tools-docs/SKILL.md +23 -0
- package/.aiwg/addons/omnius-docs/skills/omnius-version-compatibility-docs/SKILL.md +23 -0
- package/.aiwg/addons/omnius-docs/skills/runtime-provenance-audit/SKILL.md +2 -1
- package/.aiwg/addons/omnius-docs/skills/secrets-and-config-audit/SKILL.md +2 -1
- package/.aiwg/addons/omnius-docs/skills/test-surface-audit/SKILL.md +2 -1
- package/.aiwg/addons/omnius-docs/skills/workspace-reality-audit/SKILL.md +2 -1
- package/.aiwg/addons/omnius-rest-docs/README.md +3 -0
- package/.aiwg/addons/omnius-rest-docs/manifest.json +27 -20
- package/.aiwg/addons/omnius-rest-docs/skills/omnius-rest-docs/SKILL.md +9 -5
- package/README.md +36 -0
- package/dist/discovery.d.ts +50 -0
- package/dist/index.js +5975 -4021
- package/dist/library.d.ts +7 -0
- package/dist/library.js +950 -0
- package/dist/postinstall-daemon.cjs +18 -0
- package/dist/providerRegistry.d.ts +80 -0
- package/dist/service-version.d.ts +35 -0
- package/docs/.vitepress/config.mts +8 -0
- package/docs/DISCOVERY.json +20224 -0
- package/docs/DISCOVERY.md +648 -0
- package/docs/HANDOFF-crl-encoder-decoder-fix.md +129 -0
- package/docs/agent-memory/INDEX.md +9 -4
- package/docs/agent-memory/index.md +7 -0
- package/docs/concept-relational-language.md +869 -0
- package/docs/context-management-medium-models-proposal.md +449 -0
- package/docs/dedup-false-positive-meta-analysis.md +96 -0
- package/docs/discovery/catalog-overrides.json +724 -0
- package/docs/duplicate-calls-root-cause-analysis.md +91 -0
- package/docs/duplicate-calls-root-cause-deep.md +155 -0
- package/docs/ephemeral-skill-pack-small-context.md +57 -0
- package/docs/explorations/context-window-todo-association.md +156 -0
- package/docs/explorations/todo-association-verify.json +30 -0
- package/docs/explorations/verification-ledger.json +45 -0
- package/docs/explorations/verify-todo-association.sh +30 -0
- package/docs/flowstate.md +806 -0
- package/docs/getting-started/install.md +24 -0
- package/docs/getting-started/model-providers.md +13 -0
- package/docs/guides/agent-integration.md +87 -0
- package/docs/guides/bring-your-own-inference.md +126 -0
- package/docs/guides/tools-and-web-search.md +95 -0
- package/docs/index.md +14 -0
- package/docs/longhaul-35b-workorders.md +496 -0
- package/docs/memory-integration-analysis.md +303 -0
- package/docs/model-capability-awareness-and-multimodal-memory-root-fix.md +799 -0
- package/docs/multimodal-identity-memory-implementation.md +76 -0
- package/docs/omnius-self-edit-eval-2026-06-10.md +169 -0
- package/docs/opencode-agentic-loop-comparison.md +290 -0
- package/docs/operations/security-and-remote-access.md +2 -2
- package/docs/operations/version-compatibility.md +63 -0
- package/docs/proposals/git-progress-tracking-strategy.md +289 -0
- package/docs/proposals/opencode-modules/backendAdapter.ts +443 -0
- package/docs/proposals/opencode-modules/childSession.ts +288 -0
- package/docs/proposals/opencode-modules/compactionAgent.ts +101 -0
- package/docs/proposals/opencode-modules/orchestrator.ts +387 -0
- package/docs/proposals/opencode-modules/runner.ts +258 -0
- package/docs/reference/auth-map.md +87 -196
- package/docs/reference/configuration.md +27 -0
- package/docs/reference/rest-api.md +7 -0
- package/docs/reference/slash-commands.md +125 -2
- package/docs/research/_archived/README.md +18 -0
- package/docs/research/_archived/context_window_attention_model.py +418 -0
- package/docs/research/_archived/context_window_attention_spec.md +55 -0
- package/docs/research/_archived/context_window_attention_weights.json +68 -0
- package/docs/research/k-splanifolds.pdf +0 -0
- package/docs/research/personality-verbosity-control.md +293 -0
- package/docs/rest/INDEX.md +7 -0
- package/docs/rest/QUICKREF.md +18 -0
- package/docs/rest/REST-DOCS-MANIFEST.json +1 -0
- package/docs/rest/auth-and-scopes.md +7 -1
- package/docs/rest/endpoints/discovery.md +44 -0
- package/docs/rest/endpoints/events.md +5 -0
- package/docs/rest/endpoints/tools.md +9 -0
- package/docs/reviews/adversary-system-review.md +42 -0
- package/docs/sana-and-video-generation-integration-plan.md +712 -0
- package/docs/session-diary-llm-training-analysis.md +218 -0
- package/docs/telegram-dmn-curiosity-outreach-scaffold.md +91 -0
- package/docs/telegram-mid-horizon-download-loop-handoff.md +468 -0
- package/docs/telegram-reflection-corpus-integration-plan.md +306 -0
- package/docs/telegram-unified-tooling-architecture.md +332 -0
- package/docs/threat-model.md +868 -0
- package/docs/trajectory-grounding.md +160 -0
- package/docs/voice-flow-architecture.md +489 -0
- package/docs/work-orders/WO-AM-GAPS.md +638 -0
- package/docs/work-orders/daemon-hud-ui-overhaul.md +82 -0
- package/docs/work-orders/hermes-architecture-deltas/01-public-scrutiny-provenance-control/INDEX.md +21 -0
- package/docs/work-orders/hermes-architecture-deltas/01-public-scrutiny-provenance-control/WORKORDER.md +225 -0
- package/docs/work-orders/hermes-architecture-deltas/02-context-engine-plugin-boundary/INDEX.md +20 -0
- package/docs/work-orders/hermes-architecture-deltas/02-context-engine-plugin-boundary/WORKORDER.md +198 -0
- package/docs/work-orders/hermes-architecture-deltas/03-typed-gateway-event-stream/INDEX.md +19 -0
- package/docs/work-orders/hermes-architecture-deltas/03-typed-gateway-event-stream/WORKORDER.md +172 -0
- package/docs/work-orders/hermes-architecture-deltas/04-task-local-gateway-context/INDEX.md +19 -0
- package/docs/work-orders/hermes-architecture-deltas/04-task-local-gateway-context/WORKORDER.md +169 -0
- package/docs/work-orders/hermes-architecture-deltas/05-process-lifecycle-monitoring-notifications/INDEX.md +22 -0
- package/docs/work-orders/hermes-architecture-deltas/05-process-lifecycle-monitoring-notifications/WORKORDER.md +189 -0
- package/docs/work-orders/hermes-architecture-deltas/06-vision-evidence-routing-ladder/INDEX.md +22 -0
- package/docs/work-orders/hermes-architecture-deltas/06-vision-evidence-routing-ladder/WORKORDER.md +199 -0
- package/docs/work-orders/hermes-architecture-deltas/07-durable-multi-agent-kanban/INDEX.md +20 -0
- package/docs/work-orders/hermes-architecture-deltas/07-durable-multi-agent-kanban/WORKORDER.md +174 -0
- package/docs/work-orders/hermes-architecture-deltas/08-completion-critic-reconciliation-ledger/INDEX.md +22 -0
- package/docs/work-orders/hermes-architecture-deltas/08-completion-critic-reconciliation-ledger/WORKORDER.md +226 -0
- package/docs/work-orders/hermes-architecture-deltas/INDEX.md +38 -0
- package/docs/work-orders/omnius-context-engineering-behavior-fixes.md +281 -0
- package/docs/work-orders/telegram-dropbear-context-rca-workorder.md +202 -0
- package/docs/work-orders/world-class-memory-compiler/README.md +162 -0
- package/docs/work-orders/world-class-memory-compiler/TRACKER.md +179 -0
- package/docs/work-orders/world-class-memory-compiler/WO-01-exact-request-budget.md +79 -0
- package/docs/work-orders/world-class-memory-compiler/WO-02-typed-memory-fabric.md +65 -0
- package/docs/work-orders/world-class-memory-compiler/WO-03-dependency-working-set.md +55 -0
- package/docs/work-orders/world-class-memory-compiler/WO-04-inference-memory-compiler.md +67 -0
- package/docs/work-orders/world-class-memory-compiler/WO-05-artifact-fidelity-materialization.md +72 -0
- package/docs/work-orders/world-class-memory-compiler/WO-06-temporal-hybrid-retrieval.md +49 -0
- package/docs/work-orders/world-class-memory-compiler/WO-07-evaluation-harness.md +45 -0
- package/docs/work-orders/world-class-memory-compiler/WO-08-rollout-legacy-removal.md +45 -0
- package/docs/x402-remote-inference-plan.md +323 -0
- package/npm-shrinkwrap.json +108 -117
- package/package.json +7 -6
- package/templates/AGENTS.md +6 -0
- package/templates/OMNIUS.md +20 -0
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
# Daemon HUD UI Overhaul Work Order
|
|
2
|
+
|
|
3
|
+
## Objective
|
|
4
|
+
|
|
5
|
+
Overhaul the daemon web interface using `/home/roko/Desktop/hud-ui-style-kit(6)/hud-ui-style-kit` as the source of truth. Preserve current daemon behavior while replacing the OpenWebUI-like rounded dashboard styling with the cold tactical HUD visual system.
|
|
6
|
+
|
|
7
|
+
## Ground Truth
|
|
8
|
+
|
|
9
|
+
- Style kit files:
|
|
10
|
+
- `README.md`
|
|
11
|
+
- `styles.css`
|
|
12
|
+
- `tokens.json`
|
|
13
|
+
- `index.html`
|
|
14
|
+
- `assets/reference-hud-map.png`
|
|
15
|
+
- Required component contract:
|
|
16
|
+
- `hud-panel`, `hud-panel--cut`, `hud-panel--slant`
|
|
17
|
+
- required child: `hud-panel__chrome`
|
|
18
|
+
- `hud-btn` with `hud-btn__chrome` and `hud-btn__label`
|
|
19
|
+
- `hud-tab` with `hud-tab__chrome` and `hud-tab__label`
|
|
20
|
+
- Visual grammar:
|
|
21
|
+
- cold blue-gray/black base
|
|
22
|
+
- dense grid overlays
|
|
23
|
+
- frosted panels with thin steel borders
|
|
24
|
+
- clipped/slanted panel geometry
|
|
25
|
+
- amber active/warning states
|
|
26
|
+
- pale cyan focus/glow
|
|
27
|
+
- condensed uppercase display headings
|
|
28
|
+
- monospace operational logs
|
|
29
|
+
|
|
30
|
+
## Anchors
|
|
31
|
+
|
|
32
|
+
- Main daemon UI template: `packages/cli/src/api/web-ui.ts`
|
|
33
|
+
- Existing Generate page: `packages/cli/src/api/web-ui.ts` around `#generate-panel`
|
|
34
|
+
- Server-side SPA route allowlist: `packages/cli/src/api/serve.ts` around `guiRoutes`
|
|
35
|
+
- Existing Generate JS: `genSelectKind`, `generateMedia`, `loadGenerateTab`
|
|
36
|
+
- Existing AV REST analysis endpoint: `POST /v1/media/av/analyze`
|
|
37
|
+
- Existing media endpoint tests: `packages/cli/tests/routes-media.test.ts`
|
|
38
|
+
- Existing inline script parse test: `packages/cli/tests/web-ui-script.test.ts`
|
|
39
|
+
|
|
40
|
+
## Work Items
|
|
41
|
+
|
|
42
|
+
- [x] Update file header and UI foundation away from OpenWebUI naming toward HUD.
|
|
43
|
+
- [x] Add HUD design tokens and component classes from the style kit.
|
|
44
|
+
- [x] Apply global shell/sidebar/topbar/page-panel HUD styling while preserving IDs.
|
|
45
|
+
- [x] Replace Generate page markup with a HUD workbench.
|
|
46
|
+
- [x] Add Generate left nested menu with Image, Video, Audio, Music, Audio Analysis, Video Analysis, and Live AV Analysis.
|
|
47
|
+
- [x] Wire Generate media controls to existing `/v1/media/<kind>` behavior.
|
|
48
|
+
- [x] Add AV analysis controls backed by `POST /v1/media/av/analyze`.
|
|
49
|
+
- [x] Render analysis results with source metadata, adapter status, answer, entities, events, relations, and shots.
|
|
50
|
+
- [x] Add tests for HUD classes, Generate analysis panels, and AV endpoint discoverability.
|
|
51
|
+
- [x] Run targeted tests and typecheck.
|
|
52
|
+
|
|
53
|
+
## Evidence Log
|
|
54
|
+
|
|
55
|
+
- The daemon UI is a single self-contained HTML/CSS/JS template in `web-ui.ts`.
|
|
56
|
+
- The current Generate page already supports generation for image/video/audio/music and gallery browsing.
|
|
57
|
+
- `POST /v1/media/av/analyze` already performs multimodal analysis over local media paths/URIs with roles: `video_temporal`, `grounding`, `tracking`, `audio_event`, `audio_lalm`, `asr`, and `cross_modal`.
|
|
58
|
+
- Direct `/v1/tools/{name}/call` is intentionally restricted to bookkeeping tools right now, so the UI should use the AV REST route first rather than trying to call agent tools directly.
|
|
59
|
+
- Added HUD token bridge and component classes directly inside `web-ui.ts` to preserve the no-build static daemon UI.
|
|
60
|
+
- Replaced the Generate tab with a three-column HUD workbench: left operation rail, center synthesis/analysis panels, and right evidence output.
|
|
61
|
+
- Added route support for `/generate`.
|
|
62
|
+
- Added server-side `/generate` HTML route support so the Generate page can be opened directly.
|
|
63
|
+
- Added `genSelectMode`, `analyzeAvMedia`, and `renderAvAnalysis`.
|
|
64
|
+
- Updated the Generate button label handling so nested HUD chrome is not destroyed by `textContent` writes.
|
|
65
|
+
- Added regression coverage in `web-ui-script.test.ts` and `routes-media.test.ts`.
|
|
66
|
+
- Verification passed:
|
|
67
|
+
- `pnpm --filter omnius test -- web-ui-script.test.ts routes-media.test.ts`
|
|
68
|
+
- `pnpm --filter omnius test -- web-ui-script.test.ts web-ui-routes.test.ts routes-media.test.ts`
|
|
69
|
+
- `pnpm --filter omnius typecheck`
|
|
70
|
+
- `pnpm --filter omnius build`
|
|
71
|
+
- Live daemon check on `http://127.0.0.1:11635/generate` returned `200 text/html` and contained the HUD Generate/analysis controls.
|
|
72
|
+
- Live browser-cookie AV validation check reached `/v1/media/av/analyze` and returned expected `400 Missing media path`.
|
|
73
|
+
|
|
74
|
+
## Acceptance Criteria
|
|
75
|
+
|
|
76
|
+
- The page uses the HUD tokens, clipped panel chrome, nested button/tab chrome, and tactical grid styling from the style kit.
|
|
77
|
+
- Existing tabs still switch correctly.
|
|
78
|
+
- Existing Generate media generation still works.
|
|
79
|
+
- Audio Analysis and Video Analysis are visible under the Generate tab's left nested menu.
|
|
80
|
+
- Analysis submissions call `/v1/media/av/analyze`.
|
|
81
|
+
- Inline script still parses under the current Vitest guard.
|
|
82
|
+
- Media route tests still pass.
|
package/docs/work-orders/hermes-architecture-deltas/01-public-scrutiny-provenance-control/INDEX.md
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# Public Scrutiny Provenance Control Index
|
|
2
|
+
|
|
3
|
+
Progress: not started.
|
|
4
|
+
|
|
5
|
+
Files in this folder:
|
|
6
|
+
- [WORKORDER.md](WORKORDER.md) - Full phased implementation workorder.
|
|
7
|
+
|
|
8
|
+
Primary Omnius anchors:
|
|
9
|
+
- `packages/cli/src/tui/telegram-bridge.ts:2778` - public fast runner options.
|
|
10
|
+
- `packages/cli/src/tui/telegram-bridge.ts:2795` - admin evidence runner options.
|
|
11
|
+
- `packages/cli/src/tui/telegram-bridge.ts:13079` - Telegram message entrypoint.
|
|
12
|
+
- `packages/cli/src/tui/telegram-bridge.ts:13436` - public/admin sub-agent run dispatch.
|
|
13
|
+
- `packages/cli/src/tui/command-registry.ts:208` - Telegram command registry entries.
|
|
14
|
+
- `packages/cli/tests/telegram-bot-api-10.test.ts:868` - current public fast option assertions.
|
|
15
|
+
|
|
16
|
+
Primary Hermes anchors:
|
|
17
|
+
- `/home/robit/Documents/repositories/hermes-agent/gateway/session_context.py:51` - task-local session metadata.
|
|
18
|
+
- `/home/robit/Documents/repositories/hermes-agent/docs/kanban/multi-gateway.md:3` - profile-scoped gateway behavior.
|
|
19
|
+
|
|
20
|
+
Completion target:
|
|
21
|
+
- Public Telegram has a clean, reversible, non-scenario-specific path to elevate provenance scrutiny when humans request it or the agent explicitly declares low confidence.
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
# Workorder: Public Scrutiny Provenance Control
|
|
2
|
+
|
|
3
|
+
## Objective
|
|
4
|
+
|
|
5
|
+
Add a public Telegram scrutiny control plane that can elevate completion provenance checks when public accuracy risk rises, without hard-coded scenario phrases or shortcut wording that teaches the model to satisfy the gate without evidence.
|
|
6
|
+
|
|
7
|
+
The feature must support:
|
|
8
|
+
- Human command control: `/scrutiny on`, `/scrutiny strict`, `/scrutiny off`, `/scrutiny status`.
|
|
9
|
+
- Agent discretion: a bounded internal request to elevate scrutiny when the current public run cannot confidently distinguish answerable facts from unsupported claims.
|
|
10
|
+
- Time limits: elevated state expires by TTL unless renewed.
|
|
11
|
+
- Safety: public runs remain bounded; admin DM evidence behavior remains stronger and cannot be weakened by public controls.
|
|
12
|
+
|
|
13
|
+
## Problem Statement
|
|
14
|
+
|
|
15
|
+
Current public Telegram behavior is split by static runner options:
|
|
16
|
+
- `TELEGRAM_PUBLIC_FAST_OPTIONS` disables `completionProvenanceGuard` and `backwardPassReview`.
|
|
17
|
+
- `TELEGRAM_ADMIN_EVIDENCE_OPTIONS` enables both.
|
|
18
|
+
|
|
19
|
+
This fixed split is correct for ordinary public chat latency, but it lacks a runtime path for public contexts where the agent or group needs additional scrutiny. The implementation must not inspect fixed phrases such as names, topics, or controversy labels. The decision must be based on current conversation context, explicit human command, or an explicit agent confidence/scrutiny request.
|
|
20
|
+
|
|
21
|
+
## Existing Code Anchors
|
|
22
|
+
|
|
23
|
+
Omnius:
|
|
24
|
+
- `packages/cli/src/tui/telegram-bridge.ts:2778` defines `TELEGRAM_PUBLIC_FAST_OPTIONS`.
|
|
25
|
+
- `packages/cli/src/tui/telegram-bridge.ts:2795` defines `TELEGRAM_ADMIN_EVIDENCE_OPTIONS`.
|
|
26
|
+
- `packages/cli/src/tui/telegram-bridge.ts:13079` starts Telegram message handling.
|
|
27
|
+
- `packages/cli/src/tui/telegram-bridge.ts:13118` computes Telegram slash command routing.
|
|
28
|
+
- `packages/cli/src/tui/telegram-bridge.ts:13436` dispatches `runSubAgent`.
|
|
29
|
+
- `packages/cli/src/tui/telegram-bridge.ts:13450` derives final public/admin text.
|
|
30
|
+
- `packages/cli/src/tui/telegram-bridge.ts:13917` builds quick-chat system context.
|
|
31
|
+
- `packages/cli/src/tui/command-registry.ts:208` begins `/telegram` command metadata.
|
|
32
|
+
- `packages/cli/src/tui/command-registry.ts:700` defines public Telegram bot commands.
|
|
33
|
+
- `packages/cli/tests/telegram-bot-api-10.test.ts:868` asserts public options are fast and guard-off.
|
|
34
|
+
|
|
35
|
+
Hermes comparison anchors:
|
|
36
|
+
- `/home/robit/Documents/repositories/hermes-agent/gateway/session_context.py:51` stores session context in task-local variables.
|
|
37
|
+
- `/home/robit/Documents/repositories/hermes-agent/docs/kanban/multi-gateway.md:3` documents profile-scoped gateway ownership.
|
|
38
|
+
|
|
39
|
+
## Target Architecture
|
|
40
|
+
|
|
41
|
+
Introduce a runtime `TelegramPublicScrutinyState` keyed by the current Telegram session key.
|
|
42
|
+
|
|
43
|
+
Suggested state:
|
|
44
|
+
|
|
45
|
+
```ts
|
|
46
|
+
type TelegramPublicScrutinyMode = "fast" | "elevated" | "strict";
|
|
47
|
+
|
|
48
|
+
interface TelegramPublicScrutinyState {
|
|
49
|
+
mode: TelegramPublicScrutinyMode;
|
|
50
|
+
reason: string;
|
|
51
|
+
setBy: "human_admin" | "human_user" | "agent";
|
|
52
|
+
updatedAtMs: number;
|
|
53
|
+
expiresAtMs?: number;
|
|
54
|
+
lastRunId?: string;
|
|
55
|
+
}
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
Mode behavior:
|
|
59
|
+
- `fast`: current public behavior. Bounded, no completion provenance guard, no backward-pass review.
|
|
60
|
+
- `elevated`: bounded public behavior with completion provenance guard enabled.
|
|
61
|
+
- `strict`: bounded public behavior with completion provenance guard and backward-pass review enabled, but with tighter max cycles than admin DM.
|
|
62
|
+
|
|
63
|
+
Controls:
|
|
64
|
+
- Human commands change state directly after authorization checks.
|
|
65
|
+
- Agent discretion records an elevation request with reason and TTL; it cannot silently turn scrutiny off.
|
|
66
|
+
- Expiration is checked before each run and when reporting status.
|
|
67
|
+
|
|
68
|
+
Important boundary:
|
|
69
|
+
- Do not implement scenario keyword filters.
|
|
70
|
+
- Do not infer scrutiny from specific people, events, topics, or external domains.
|
|
71
|
+
- If the agent uses discretion, it must output a generic reason derived from uncertainty, missing source support, conflicting context, or public-impact sensitivity in the current run.
|
|
72
|
+
|
|
73
|
+
## Phased Implementation
|
|
74
|
+
|
|
75
|
+
### Phase 0: Baseline and Guardrails
|
|
76
|
+
|
|
77
|
+
Tasks:
|
|
78
|
+
- Add tests that prove current public fast behavior remains fast by default.
|
|
79
|
+
- Add tests that admin DM still forces evidence options and cannot be weakened by scrutiny commands.
|
|
80
|
+
- Add a source test preventing direct use of `TELEGRAM_PUBLIC_FAST_OPTIONS` at the runner call site once the resolver exists.
|
|
81
|
+
|
|
82
|
+
Completion metrics:
|
|
83
|
+
- Existing simple Telegram public test still reaches completion.
|
|
84
|
+
- Admin incomplete verification tests remain unchanged.
|
|
85
|
+
- No new command is exposed before authorization and state handling exist.
|
|
86
|
+
|
|
87
|
+
### Phase 1: State Model and Persistence
|
|
88
|
+
|
|
89
|
+
Tasks:
|
|
90
|
+
- Add `TelegramPublicScrutinyState` types near Telegram state definitions in `telegram-bridge.ts`.
|
|
91
|
+
- Add an in-memory map keyed by `sessionKeyForMessage(msg)`.
|
|
92
|
+
- Persist state under `.omnius/telegram-public-scrutiny.json` or the existing Omnius settings store if a clean per-chat settings helper exists.
|
|
93
|
+
- Add helpers:
|
|
94
|
+
- `getTelegramPublicScrutinyState(msg)`
|
|
95
|
+
- `setTelegramPublicScrutinyState(msg, state)`
|
|
96
|
+
- `clearTelegramPublicScrutinyState(msg)`
|
|
97
|
+
- `pruneExpiredTelegramPublicScrutinyState(nowMs)`
|
|
98
|
+
|
|
99
|
+
File-by-file notes:
|
|
100
|
+
- `packages/cli/src/tui/telegram-bridge.ts`: own the runtime state because session keys, chat types, admin checks, and reply routing already live here.
|
|
101
|
+
- `packages/cli/src/tui/omnius-directory.ts`: use only if settings persistence is already centralized and does not create unrelated churn.
|
|
102
|
+
|
|
103
|
+
Completion metrics:
|
|
104
|
+
- State round-trips across bridge instance reload in a unit test.
|
|
105
|
+
- Expired state is ignored and pruned.
|
|
106
|
+
- Private admin DM is unaffected by public state.
|
|
107
|
+
|
|
108
|
+
### Phase 2: Runner Option Resolver
|
|
109
|
+
|
|
110
|
+
Tasks:
|
|
111
|
+
- Add `resolveTelegramRunnerEvidenceOptions(msg, toolContext)` or equivalent.
|
|
112
|
+
- Replace static selection at the sub-agent runner call with this resolver.
|
|
113
|
+
- Preserve bounded options for public modes.
|
|
114
|
+
- Keep admin DM equivalent to `TELEGRAM_ADMIN_EVIDENCE_OPTIONS`.
|
|
115
|
+
|
|
116
|
+
Expected behavior:
|
|
117
|
+
- Public fast: `completionProvenanceGuard=false`, `backwardPassReview=false`.
|
|
118
|
+
- Public elevated: `completionProvenanceGuard=true`, `backwardPassReview=false`.
|
|
119
|
+
- Public strict: `completionProvenanceGuard=true`, `backwardPassReview=true`, bounded max turns/cycles.
|
|
120
|
+
- Admin DM: unchanged evidence-heavy defaults.
|
|
121
|
+
|
|
122
|
+
Completion metrics:
|
|
123
|
+
- Source test sees resolver usage instead of `isAdminDM ? TELEGRAM_ADMIN_EVIDENCE_OPTIONS : TELEGRAM_PUBLIC_FAST_OPTIONS`.
|
|
124
|
+
- Tests prove each mode maps to expected runner options.
|
|
125
|
+
- Strict public mode does not enable unbounded turn extension.
|
|
126
|
+
|
|
127
|
+
### Phase 3: Human Command Surface
|
|
128
|
+
|
|
129
|
+
Tasks:
|
|
130
|
+
- Add command metadata to `command-registry.ts`:
|
|
131
|
+
- `/scrutiny on [ttl]`
|
|
132
|
+
- `/scrutiny strict [ttl]`
|
|
133
|
+
- `/scrutiny off`
|
|
134
|
+
- `/scrutiny status`
|
|
135
|
+
- `/telegram scrutiny ...` aliases if preferred for admin discoverability.
|
|
136
|
+
- Add command handling before sub-agent spawn in `handleMessageWithSubAgent`.
|
|
137
|
+
- Public group command authorization should be explicit:
|
|
138
|
+
- Admins can set group state.
|
|
139
|
+
- Non-admin public users can request status if that matches existing command policy, but should not be able to weaken an active state unless product policy explicitly allows it.
|
|
140
|
+
|
|
141
|
+
File-by-file notes:
|
|
142
|
+
- `packages/cli/src/tui/command-registry.ts`: add metadata and public bot command exposure if desired.
|
|
143
|
+
- `packages/cli/src/tui/telegram-bridge.ts`: parse and apply commands.
|
|
144
|
+
- `packages/cli/tests/telegram-command-menu.test.ts` or `telegram-bot-api-10.test.ts`: assert command visibility and behavior.
|
|
145
|
+
|
|
146
|
+
Completion metrics:
|
|
147
|
+
- `/scrutiny on` enables elevated mode for that chat/session.
|
|
148
|
+
- `/scrutiny strict` enables strict mode with TTL.
|
|
149
|
+
- `/scrutiny off` clears mode only when authorized.
|
|
150
|
+
- `/scrutiny status` reports mode, reason, setter, and expiry.
|
|
151
|
+
|
|
152
|
+
### Phase 4: Agent Discretion Hook
|
|
153
|
+
|
|
154
|
+
Tasks:
|
|
155
|
+
- Add an internal tool or control event that lets a public Telegram sub-agent request scrutiny elevation for the current session.
|
|
156
|
+
- The tool should accept only generic fields:
|
|
157
|
+
- `mode`: `elevated` or `strict`
|
|
158
|
+
- `reason`: short natural-language reason
|
|
159
|
+
- `ttl_minutes`: bounded integer
|
|
160
|
+
- `confidence`: optional number
|
|
161
|
+
- The tool must not send a Telegram message by itself.
|
|
162
|
+
- The tool must not turn scrutiny off.
|
|
163
|
+
- The prompt should describe when to use it in generic terms: unresolved evidence, conflicting observations, low confidence in factual answer, or public answer needs stronger source discipline.
|
|
164
|
+
|
|
165
|
+
Completion metrics:
|
|
166
|
+
- Agent can request elevation during a public run.
|
|
167
|
+
- The next run in the same public session uses elevated options.
|
|
168
|
+
- The request is logged in TUI/sub-agent view for operator observability.
|
|
169
|
+
- No topic-specific words or phrase lists are used by the resolver.
|
|
170
|
+
|
|
171
|
+
### Phase 5: UX and Observability
|
|
172
|
+
|
|
173
|
+
Tasks:
|
|
174
|
+
- Add TUI sub-agent view lines when scrutiny mode changes.
|
|
175
|
+
- Include current scrutiny mode in context explorer or run metadata for public runs.
|
|
176
|
+
- Ensure final public answer is not polluted with internal status text.
|
|
177
|
+
- Add compact status in `/telegram status` if there is an active elevated public chat state.
|
|
178
|
+
|
|
179
|
+
Completion metrics:
|
|
180
|
+
- Operators can see why scrutiny was elevated.
|
|
181
|
+
- Public users do not see internal implementation details unless a command response intentionally reports status.
|
|
182
|
+
- Expiry and state transitions are auditable.
|
|
183
|
+
|
|
184
|
+
### Phase 6: Regression Tests
|
|
185
|
+
|
|
186
|
+
Required tests:
|
|
187
|
+
- Public default stays fast and simple Q&A reaches `task_complete`.
|
|
188
|
+
- Public elevated uses completion provenance guard.
|
|
189
|
+
- Public strict uses completion provenance guard and backward-pass review but remains bounded.
|
|
190
|
+
- Admin DM ignores public mode and uses admin evidence options.
|
|
191
|
+
- Agent discretion can elevate but cannot lower.
|
|
192
|
+
- Expired TTL reverts to fast.
|
|
193
|
+
- Source test blocks direct static option selection at runner call site.
|
|
194
|
+
|
|
195
|
+
## Required Tests
|
|
196
|
+
|
|
197
|
+
- Public default stays fast and simple Q&A reaches `task_complete`.
|
|
198
|
+
- Public elevated uses completion provenance guard.
|
|
199
|
+
- Public strict uses completion provenance guard and backward-pass review but remains bounded.
|
|
200
|
+
- Admin DM ignores public mode and uses admin evidence options.
|
|
201
|
+
- Agent discretion can elevate but cannot lower scrutiny.
|
|
202
|
+
- Expired TTL reverts to fast.
|
|
203
|
+
- Source test blocks direct static option selection at runner call site.
|
|
204
|
+
- Normal public final replies do not include internal scrutiny/provenance status text.
|
|
205
|
+
|
|
206
|
+
## Rollout Plan
|
|
207
|
+
|
|
208
|
+
1. Ship disabled-by-default public scrutiny state with `/scrutiny status`.
|
|
209
|
+
2. Enable human `/scrutiny on|strict|off` commands.
|
|
210
|
+
3. Add agent discretion after resolver tests are stable.
|
|
211
|
+
4. Add optional persistence after in-memory behavior is verified.
|
|
212
|
+
|
|
213
|
+
## Risks
|
|
214
|
+
|
|
215
|
+
- Overblocking simple public replies. Mitigation: public fast remains default and strict remains bounded.
|
|
216
|
+
- Hidden gate-satisfying shortcuts. Mitigation: resolver consumes state, not scenario words.
|
|
217
|
+
- Public status leaks. Mitigation: only explicit command replies mention state; normal replies remain user-facing.
|
|
218
|
+
|
|
219
|
+
## Definition of Done
|
|
220
|
+
|
|
221
|
+
- Public scrutiny can be voluntarily toggled by authorized humans.
|
|
222
|
+
- The agent can request scrutiny elevation with a generic reason and TTL.
|
|
223
|
+
- Public default remains fast and reliable for simple tasks.
|
|
224
|
+
- No hard-coded scenario keyword path controls provenance behavior.
|
|
225
|
+
- Tests cover all state transitions and option mappings.
|
package/docs/work-orders/hermes-architecture-deltas/02-context-engine-plugin-boundary/INDEX.md
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Context Engine Plugin Boundary Index
|
|
2
|
+
|
|
3
|
+
Progress: not started.
|
|
4
|
+
|
|
5
|
+
Files in this folder:
|
|
6
|
+
- [WORKORDER.md](WORKORDER.md) - Full phased implementation workorder.
|
|
7
|
+
|
|
8
|
+
Primary Omnius anchors:
|
|
9
|
+
- `packages/orchestrator/src/agenticRunner.ts:3200` - mission completion contract injection.
|
|
10
|
+
- `packages/orchestrator/src/agenticRunner.ts:18146` - context window trimming logic.
|
|
11
|
+
- `packages/orchestrator/src/agenticRunner.ts:18579` - Telegram runner system prompt assembly.
|
|
12
|
+
- `packages/memory/src/context-window.ts` - existing memory/context utilities.
|
|
13
|
+
- `packages/retrieval/src/contextAssembler.ts` - existing retrieval context assembly.
|
|
14
|
+
|
|
15
|
+
Primary Hermes anchors:
|
|
16
|
+
- `/home/robit/Documents/repositories/hermes-agent/agent/context_engine.py:32` - abstract `ContextEngine`.
|
|
17
|
+
- `/home/robit/Documents/repositories/hermes-agent/agent/context_compressor.py:522` - default compressor implements the engine.
|
|
18
|
+
|
|
19
|
+
Completion target:
|
|
20
|
+
- Context assembly and compression can evolve independently from `AgenticRunner` without leaking prompt-specific hacks into unrelated surfaces.
|
package/docs/work-orders/hermes-architecture-deltas/02-context-engine-plugin-boundary/WORKORDER.md
ADDED
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
# Workorder: Context Engine Plugin Boundary
|
|
2
|
+
|
|
3
|
+
## Objective
|
|
4
|
+
|
|
5
|
+
Extract context assembly, compaction, memory stitching, and completion framing behind a small orchestrator-owned interface. The current runner should remain behaviorally compatible, but future context strategies should be swappable without editing the main `AgenticRunner` loop.
|
|
6
|
+
|
|
7
|
+
## Problem Statement
|
|
8
|
+
|
|
9
|
+
`AgenticRunner` carries too many responsibilities:
|
|
10
|
+
- prompt assembly,
|
|
11
|
+
- Telegram-specific prompt differences,
|
|
12
|
+
- memory and retrieval context,
|
|
13
|
+
- completion contract framing,
|
|
14
|
+
- context compaction,
|
|
15
|
+
- tool-result triage,
|
|
16
|
+
- post-critique context injection.
|
|
17
|
+
|
|
18
|
+
Hermes separates the context subsystem through an explicit `ContextEngine` interface. Omnius already has good pieces in memory and retrieval packages, but the orchestration boundary is still tangled into the runner.
|
|
19
|
+
|
|
20
|
+
## Existing Code Anchors
|
|
21
|
+
|
|
22
|
+
Omnius:
|
|
23
|
+
- `packages/orchestrator/src/agenticRunner.ts:3200` builds mission completion contract text.
|
|
24
|
+
- `packages/orchestrator/src/agenticRunner.ts:18146` starts context-window trimming.
|
|
25
|
+
- `packages/orchestrator/src/agenticRunner.ts:18579` branches Telegram-specific system prompt text.
|
|
26
|
+
- `packages/orchestrator/src/completionContract.ts:294` formats completion contracts.
|
|
27
|
+
- `packages/memory/src/context-window.ts` contains context-window helpers.
|
|
28
|
+
- `packages/retrieval/src/contextAssembler.ts` assembles retrieval context.
|
|
29
|
+
- `packages/orchestrator/tests/context-fabric.test.ts` is a likely regression home.
|
|
30
|
+
|
|
31
|
+
Hermes:
|
|
32
|
+
- `/home/robit/Documents/repositories/hermes-agent/agent/context_engine.py:32` defines `ContextEngine`.
|
|
33
|
+
- `/home/robit/Documents/repositories/hermes-agent/agent/context_compressor.py:522` implements `ContextCompressor`.
|
|
34
|
+
- `/home/robit/Documents/repositories/hermes-agent/agent/context_compressor.py:754` prunes old tool results.
|
|
35
|
+
- `/home/robit/Documents/repositories/hermes-agent/agent/context_compressor.py:1572` cleans orphaned tool call/result pairs after compression.
|
|
36
|
+
|
|
37
|
+
## Target Architecture
|
|
38
|
+
|
|
39
|
+
Create `packages/orchestrator/src/contextEngine.ts` with a narrow interface:
|
|
40
|
+
|
|
41
|
+
```ts
|
|
42
|
+
export interface ContextEngineInput {
|
|
43
|
+
goal: string;
|
|
44
|
+
surface: "tui" | "telegram-public" | "telegram-admin" | "api" | "background";
|
|
45
|
+
messages: AgentMessage[];
|
|
46
|
+
toolEvents: ToolEvidenceEvent[];
|
|
47
|
+
memoryHints: string[];
|
|
48
|
+
runState: ContextRunState;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export interface ContextEngineOutput {
|
|
52
|
+
systemMessages: AgentMessage[];
|
|
53
|
+
conversationMessages: AgentMessage[];
|
|
54
|
+
compacted: boolean;
|
|
55
|
+
diagnostics: ContextEngineDiagnostics;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
export interface ContextEngine {
|
|
59
|
+
build(input: ContextEngineInput): Promise<ContextEngineOutput>;
|
|
60
|
+
compact(input: ContextEngineInput): Promise<ContextEngineOutput>;
|
|
61
|
+
}
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
Default implementation:
|
|
65
|
+
- `DefaultContextEngine` wraps existing runner behavior without changing semantics.
|
|
66
|
+
- It exposes diagnostics for prompt token size, dropped tool results, retained evidence, and compaction reason.
|
|
67
|
+
|
|
68
|
+
Future extension point:
|
|
69
|
+
- Optional registration through config, but no plugin loader is required for the first cut.
|
|
70
|
+
|
|
71
|
+
## Phased Implementation
|
|
72
|
+
|
|
73
|
+
### Phase 0: Inventory and Golden Tests
|
|
74
|
+
|
|
75
|
+
Tasks:
|
|
76
|
+
- Add tests that snapshot key prompt fragments for:
|
|
77
|
+
- normal TUI coding task,
|
|
78
|
+
- public Telegram reply,
|
|
79
|
+
- admin Telegram task,
|
|
80
|
+
- API `/v1/run` task,
|
|
81
|
+
- completion retry after critic feedback.
|
|
82
|
+
- Record current event/evidence fragments that must remain visible.
|
|
83
|
+
|
|
84
|
+
Completion metrics:
|
|
85
|
+
- Snapshot tests capture behavior before extraction.
|
|
86
|
+
- No new context logic exists yet.
|
|
87
|
+
|
|
88
|
+
### Phase 1: Define Context Types
|
|
89
|
+
|
|
90
|
+
Tasks:
|
|
91
|
+
- Add `contextEngine.ts` with input/output types and `DefaultContextEngine`.
|
|
92
|
+
- Define common message/event types, or import existing runner types if they are already exported safely.
|
|
93
|
+
- Add diagnostics:
|
|
94
|
+
- `tokenEstimateBefore`
|
|
95
|
+
- `tokenEstimateAfter`
|
|
96
|
+
- `compactionStrategy`
|
|
97
|
+
- `evidenceRetained`
|
|
98
|
+
- `evidenceDropped`
|
|
99
|
+
- `surface`
|
|
100
|
+
|
|
101
|
+
File-by-file notes:
|
|
102
|
+
- `packages/orchestrator/src/contextEngine.ts`: new boundary.
|
|
103
|
+
- `packages/orchestrator/src/index.ts`: export only if other packages need it.
|
|
104
|
+
- `packages/orchestrator/tests/contextEngine.test.ts`: unit tests for default no-op build.
|
|
105
|
+
|
|
106
|
+
Completion metrics:
|
|
107
|
+
- Types compile.
|
|
108
|
+
- Default engine can round-trip messages unchanged.
|
|
109
|
+
|
|
110
|
+
### Phase 2: Wrap Current Runner Assembly
|
|
111
|
+
|
|
112
|
+
Tasks:
|
|
113
|
+
- Move context construction code from `AgenticRunner` into default engine methods in small, reversible chunks.
|
|
114
|
+
- Do not change prompts while moving logic.
|
|
115
|
+
- Keep Telegram-specific content as input-selected surface policies, not scattered string checks.
|
|
116
|
+
|
|
117
|
+
Migration order:
|
|
118
|
+
1. Non-Telegram system prompt assembly.
|
|
119
|
+
2. Telegram prompt assembly.
|
|
120
|
+
3. Completion contract insertion.
|
|
121
|
+
4. Context trimming/compaction.
|
|
122
|
+
5. Tool-result pruning.
|
|
123
|
+
|
|
124
|
+
Completion metrics:
|
|
125
|
+
- Existing prompt snapshots remain stable.
|
|
126
|
+
- `AgenticRunner` delegates to `contextEngine.build` before backend calls.
|
|
127
|
+
- No behavior change for simple `task_complete` tests.
|
|
128
|
+
|
|
129
|
+
### Phase 3: Evidence-Aware Compaction
|
|
130
|
+
|
|
131
|
+
Tasks:
|
|
132
|
+
- Preserve recent tool evidence and critic reconciliation packets as first-class context items.
|
|
133
|
+
- Replace ad hoc retention rules with ranked evidence groups:
|
|
134
|
+
- user goal and constraints,
|
|
135
|
+
- final/proposed claims,
|
|
136
|
+
- latest tool observations,
|
|
137
|
+
- failed tool results,
|
|
138
|
+
- modified artifacts,
|
|
139
|
+
- critique feedback and reconciliation evidence.
|
|
140
|
+
|
|
141
|
+
Completion metrics:
|
|
142
|
+
- A repeated critic review sees evidence recorded after the prior critique.
|
|
143
|
+
- Tool call/result pairs remain paired after compaction.
|
|
144
|
+
- Orphaned tool results are removed or summarized with a diagnostic.
|
|
145
|
+
|
|
146
|
+
### Phase 4: Plugin Boundary
|
|
147
|
+
|
|
148
|
+
Tasks:
|
|
149
|
+
- Allow an optional configured engine name, defaulting to `default`.
|
|
150
|
+
- Keep plugin API internal until one alternate engine exists.
|
|
151
|
+
- Add a test fake engine that injects a diagnostic marker to prove selection works.
|
|
152
|
+
|
|
153
|
+
Completion metrics:
|
|
154
|
+
- Config can select default engine explicitly.
|
|
155
|
+
- Unknown engine fails closed with a clear error.
|
|
156
|
+
- Test fake engine runs without editing `AgenticRunner`.
|
|
157
|
+
|
|
158
|
+
### Phase 5: Documentation and Handoff
|
|
159
|
+
|
|
160
|
+
Tasks:
|
|
161
|
+
- Add an architecture note under `docs/architecture/` describing the context engine boundary.
|
|
162
|
+
- Document invariants:
|
|
163
|
+
- context engine may reorder/summarize but not fabricate observations,
|
|
164
|
+
- completion evidence must remain attributable,
|
|
165
|
+
- surface-specific safety text is selected by surface, not by topic keywords.
|
|
166
|
+
|
|
167
|
+
Completion metrics:
|
|
168
|
+
- Docs include diagrams or tables for inputs and outputs.
|
|
169
|
+
- Future feature workorders can target `ContextEngine` rather than `AgenticRunner`.
|
|
170
|
+
|
|
171
|
+
## Required Tests
|
|
172
|
+
|
|
173
|
+
- `contextEngine.test.ts`: interface, diagnostics, no-op default round trip.
|
|
174
|
+
- `agenticRunner.test.ts`: runner still completes simple tasks.
|
|
175
|
+
- `telegram-bot-api-10.test.ts`: public/admin prompt behavior remains stable.
|
|
176
|
+
- `completionContract.test.ts`: completion contract still appears where expected.
|
|
177
|
+
- Compaction test: evidence after prior critique survives into the next critic prompt.
|
|
178
|
+
|
|
179
|
+
## Rollout Plan
|
|
180
|
+
|
|
181
|
+
1. Add boundary with no behavioral change.
|
|
182
|
+
2. Move non-Telegram assembly.
|
|
183
|
+
3. Move Telegram assembly.
|
|
184
|
+
4. Move compaction.
|
|
185
|
+
5. Enable diagnostics in TUI/admin surfaces.
|
|
186
|
+
|
|
187
|
+
## Risks
|
|
188
|
+
|
|
189
|
+
- Prompt drift can break fragile Telegram and tool-call behavior. Mitigation: golden prompt tests before migration.
|
|
190
|
+
- Over-generalized interface can freeze wrong abstractions. Mitigation: start with current runner data and only extract actual needs.
|
|
191
|
+
- Plugin loading can introduce untrusted code. Mitigation: internal registry only for first release.
|
|
192
|
+
|
|
193
|
+
## Definition of Done
|
|
194
|
+
|
|
195
|
+
- `AgenticRunner` no longer owns all prompt/context assembly directly.
|
|
196
|
+
- Existing behavior is preserved by tests.
|
|
197
|
+
- Context diagnostics expose what was retained and compacted.
|
|
198
|
+
- Completion evidence and critic reconciliation packets are protected through compaction.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Typed Gateway Event Stream Index
|
|
2
|
+
|
|
3
|
+
Progress: not started.
|
|
4
|
+
|
|
5
|
+
Files in this folder:
|
|
6
|
+
- [WORKORDER.md](WORKORDER.md) - Full phased implementation workorder.
|
|
7
|
+
|
|
8
|
+
Primary Omnius anchors:
|
|
9
|
+
- `packages/orchestrator/src/agenticRunner.ts:15760` - run completion event emission.
|
|
10
|
+
- `packages/cli/src/tui/telegram-bridge.ts:2828` - Telegram completion/task_complete filtering.
|
|
11
|
+
- `packages/cli/src/tui/telegram-bridge.ts:12504` - public progress rendering.
|
|
12
|
+
- `packages/cli/src/tui/telegram-bridge.ts:12650` - admin completion classification.
|
|
13
|
+
|
|
14
|
+
Primary Hermes anchors:
|
|
15
|
+
- `/home/robit/Documents/repositories/hermes-agent/gateway/stream_events.py:151` - stream event union.
|
|
16
|
+
- `/home/robit/Documents/repositories/hermes-agent/gateway/stream_dispatch.py:88` - adapter dispatch.
|
|
17
|
+
|
|
18
|
+
Completion target:
|
|
19
|
+
- Runner events carry typed facts; Telegram/TUI adapters decide rendering without string-based status interpretation.
|