@openrig/cli 0.4.8 → 0.5.0
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/daemon/assets/claude-statusline-context.cjs +40 -8
- package/daemon/assets/plugins/openrig-core/hooks/scripts/activity-relay.cjs +0 -0
- package/daemon/assets/plugins/openrig-core/skills/mission-slice-sop/SKILL.md +7 -4
- package/daemon/assets/plugins/openrig-core/skills/openrig-user/SKILL.md +68 -17
- package/daemon/assets/plugins/openrig-core/skills/queue-handoff/SKILL.md +2 -0
- package/daemon/assets/plugins/openrig-core/skills/seat-continuity-and-handover/SKILL.md +2 -1
- package/daemon/assets/plugins/openrig-core/skills/session-compaction-and-restore/SKILL.md +1 -0
- package/daemon/dist/adapters/claude-code-adapter.d.ts +36 -0
- package/daemon/dist/adapters/claude-code-adapter.d.ts.map +1 -1
- package/daemon/dist/adapters/claude-code-adapter.js +203 -3
- package/daemon/dist/adapters/claude-code-adapter.js.map +1 -1
- package/daemon/dist/adapters/codex-runtime-adapter.d.ts +12 -0
- package/daemon/dist/adapters/codex-runtime-adapter.d.ts.map +1 -1
- package/daemon/dist/adapters/codex-runtime-adapter.js +24 -2
- package/daemon/dist/adapters/codex-runtime-adapter.js.map +1 -1
- package/daemon/dist/build-info.js +3 -3
- package/daemon/dist/domain/agent-activity-store.d.ts +1 -0
- package/daemon/dist/domain/agent-activity-store.d.ts.map +1 -1
- package/daemon/dist/domain/agent-activity-store.js +2 -2
- package/daemon/dist/domain/agent-activity-store.js.map +1 -1
- package/daemon/dist/domain/claude-activity-hooks.d.ts +33 -0
- package/daemon/dist/domain/claude-activity-hooks.d.ts.map +1 -0
- package/daemon/dist/domain/claude-activity-hooks.js +60 -0
- package/daemon/dist/domain/claude-activity-hooks.js.map +1 -0
- package/daemon/dist/domain/context-packs/bundle-assembler.d.ts +30 -0
- package/daemon/dist/domain/context-packs/bundle-assembler.d.ts.map +1 -1
- package/daemon/dist/domain/context-packs/bundle-assembler.js +31 -1
- package/daemon/dist/domain/context-packs/bundle-assembler.js.map +1 -1
- package/daemon/dist/domain/context-packs/context-pack-library-service.d.ts +69 -14
- package/daemon/dist/domain/context-packs/context-pack-library-service.d.ts.map +1 -1
- package/daemon/dist/domain/context-packs/context-pack-library-service.js +263 -48
- package/daemon/dist/domain/context-packs/context-pack-library-service.js.map +1 -1
- package/daemon/dist/domain/context-packs/context-pack-types.d.ts +2 -2
- package/daemon/dist/domain/context-packs/context-pack-types.d.ts.map +1 -1
- package/daemon/dist/domain/context-packs/context-pack-types.js.map +1 -1
- package/daemon/dist/domain/context-packs/manifest-parser.d.ts.map +1 -1
- package/daemon/dist/domain/context-packs/manifest-parser.js +11 -0
- package/daemon/dist/domain/context-packs/manifest-parser.js.map +1 -1
- package/daemon/dist/domain/context-packs/ref-safety.d.ts +11 -0
- package/daemon/dist/domain/context-packs/ref-safety.d.ts.map +1 -0
- package/daemon/dist/domain/context-packs/ref-safety.js +46 -0
- package/daemon/dist/domain/context-packs/ref-safety.js.map +1 -0
- package/daemon/dist/domain/context-packs/token-estimate.d.ts +3 -0
- package/daemon/dist/domain/context-packs/token-estimate.d.ts.map +1 -0
- package/daemon/dist/domain/context-packs/token-estimate.js +5 -0
- package/daemon/dist/domain/context-packs/token-estimate.js.map +1 -0
- package/daemon/dist/domain/plugin-vendor-service.d.ts +14 -0
- package/daemon/dist/domain/plugin-vendor-service.d.ts.map +1 -1
- package/daemon/dist/domain/plugin-vendor-service.js +26 -2
- package/daemon/dist/domain/plugin-vendor-service.js.map +1 -1
- package/daemon/dist/domain/provider/claude-usage-reader.d.ts +44 -0
- package/daemon/dist/domain/provider/claude-usage-reader.d.ts.map +1 -0
- package/daemon/dist/domain/provider/claude-usage-reader.js +112 -0
- package/daemon/dist/domain/provider/claude-usage-reader.js.map +1 -0
- package/daemon/dist/domain/provider/codex-auth-reader.d.ts +18 -0
- package/daemon/dist/domain/provider/codex-auth-reader.d.ts.map +1 -0
- package/daemon/dist/domain/provider/codex-auth-reader.js +64 -0
- package/daemon/dist/domain/provider/codex-auth-reader.js.map +1 -0
- package/daemon/dist/domain/provider/host-usage-rollup.d.ts +51 -0
- package/daemon/dist/domain/provider/host-usage-rollup.d.ts.map +1 -0
- package/daemon/dist/domain/provider/host-usage-rollup.js +162 -0
- package/daemon/dist/domain/provider/host-usage-rollup.js.map +1 -0
- package/daemon/dist/domain/provider/provider-collect.d.ts +22 -0
- package/daemon/dist/domain/provider/provider-collect.d.ts.map +1 -0
- package/daemon/dist/domain/provider/provider-collect.js +74 -0
- package/daemon/dist/domain/provider/provider-collect.js.map +1 -0
- package/daemon/dist/domain/provider/provider-policy.d.ts +38 -0
- package/daemon/dist/domain/provider/provider-policy.d.ts.map +1 -0
- package/daemon/dist/domain/provider/provider-policy.js +76 -0
- package/daemon/dist/domain/provider/provider-policy.js.map +1 -0
- package/daemon/dist/domain/provider/provider-read-model.d.ts +28 -0
- package/daemon/dist/domain/provider/provider-read-model.d.ts.map +1 -0
- package/daemon/dist/domain/provider/provider-read-model.js +68 -0
- package/daemon/dist/domain/provider/provider-read-model.js.map +1 -0
- package/daemon/dist/domain/provider/provider-service-impl.d.ts +26 -0
- package/daemon/dist/domain/provider/provider-service-impl.d.ts.map +1 -0
- package/daemon/dist/domain/provider/provider-service-impl.js +83 -0
- package/daemon/dist/domain/provider/provider-service-impl.js.map +1 -0
- package/daemon/dist/domain/provider/provider-service.d.ts +33 -0
- package/daemon/dist/domain/provider/provider-service.d.ts.map +1 -0
- package/daemon/dist/domain/provider/provider-service.js +6 -0
- package/daemon/dist/domain/provider/provider-service.js.map +1 -0
- package/daemon/dist/domain/provider/provider-signals.d.ts +76 -0
- package/daemon/dist/domain/provider/provider-signals.d.ts.map +1 -0
- package/daemon/dist/domain/provider/provider-signals.js +144 -0
- package/daemon/dist/domain/provider/provider-signals.js.map +1 -0
- package/daemon/dist/domain/provider/provider-types.d.ts +101 -0
- package/daemon/dist/domain/provider/provider-types.d.ts.map +1 -0
- package/daemon/dist/domain/provider/provider-types.js +7 -0
- package/daemon/dist/domain/provider/provider-types.js.map +1 -0
- package/daemon/dist/domain/provider/reactive-tap.d.ts +29 -0
- package/daemon/dist/domain/provider/reactive-tap.d.ts.map +1 -0
- package/daemon/dist/domain/provider/reactive-tap.js +80 -0
- package/daemon/dist/domain/provider/reactive-tap.js.map +1 -0
- package/daemon/dist/domain/rigspec-instantiator.d.ts +7 -23
- package/daemon/dist/domain/rigspec-instantiator.d.ts.map +1 -1
- package/daemon/dist/domain/rigspec-instantiator.js +3 -61
- package/daemon/dist/domain/rigspec-instantiator.js.map +1 -1
- package/daemon/dist/domain/rigspec-preflight.d.ts +11 -0
- package/daemon/dist/domain/rigspec-preflight.d.ts.map +1 -1
- package/daemon/dist/domain/rigspec-preflight.js +43 -1
- package/daemon/dist/domain/rigspec-preflight.js.map +1 -1
- package/daemon/dist/domain/runtime-adapter.d.ts +2 -11
- package/daemon/dist/domain/runtime-adapter.d.ts.map +1 -1
- package/daemon/dist/domain/runtime-adapter.js.map +1 -1
- package/daemon/dist/domain/scope/attestation-lineage.generated.d.ts +14 -0
- package/daemon/dist/domain/scope/attestation-lineage.generated.d.ts.map +1 -0
- package/daemon/dist/domain/scope/attestation-lineage.generated.js +26 -0
- package/daemon/dist/domain/scope/attestation-lineage.generated.js.map +1 -0
- package/daemon/dist/domain/scope/scope-approve.d.ts +13 -0
- package/daemon/dist/domain/scope/scope-approve.d.ts.map +1 -1
- package/daemon/dist/domain/scope/scope-approve.js +50 -10
- package/daemon/dist/domain/scope/scope-approve.js.map +1 -1
- package/daemon/dist/domain/startup-validation.d.ts.map +1 -1
- package/daemon/dist/domain/startup-validation.js +18 -54
- package/daemon/dist/domain/startup-validation.js.map +1 -1
- package/daemon/dist/domain/stream-store.d.ts +4 -0
- package/daemon/dist/domain/stream-store.d.ts.map +1 -1
- package/daemon/dist/domain/stream-store.js +15 -2
- package/daemon/dist/domain/stream-store.js.map +1 -1
- package/daemon/dist/domain/types.d.ts +2 -9
- package/daemon/dist/domain/types.d.ts.map +1 -1
- package/daemon/dist/domain/types.js.map +1 -1
- package/daemon/dist/domain/workspace/default-workspace-scaffold.js +1 -1
- package/daemon/dist/routes/context-packs.d.ts.map +1 -1
- package/daemon/dist/routes/context-packs.js +157 -75
- package/daemon/dist/routes/context-packs.js.map +1 -1
- package/daemon/dist/routes/provider.d.ts +3 -0
- package/daemon/dist/routes/provider.d.ts.map +1 -0
- package/daemon/dist/routes/provider.js +124 -0
- package/daemon/dist/routes/provider.js.map +1 -0
- package/daemon/dist/routes/scope-approve.d.ts.map +1 -1
- package/daemon/dist/routes/scope-approve.js +6 -3
- package/daemon/dist/routes/scope-approve.js.map +1 -1
- package/daemon/dist/routes/scope-audit.d.ts.map +1 -1
- package/daemon/dist/routes/scope-audit.js +4 -1
- package/daemon/dist/routes/scope-audit.js.map +1 -1
- package/daemon/dist/routes/stream.d.ts.map +1 -1
- package/daemon/dist/routes/stream.js +71 -1
- package/daemon/dist/routes/stream.js.map +1 -1
- package/daemon/dist/server.d.ts +3 -0
- package/daemon/dist/server.d.ts.map +1 -1
- package/daemon/dist/server.js +5 -0
- package/daemon/dist/server.js.map +1 -1
- package/daemon/dist/startup.d.ts.map +1 -1
- package/daemon/dist/startup.js +21 -11
- package/daemon/dist/startup.js.map +1 -1
- package/daemon/docs/reference/developing.md +39 -0
- package/daemon/specs/agents/apps/vault-specialist/agent.yaml +1 -1
- package/daemon/specs/agents/conveyor/builder/agent.yaml +1 -1
- package/daemon/specs/agents/conveyor/lead/agent.yaml +1 -1
- package/daemon/specs/agents/conveyor/planner/agent.yaml +1 -1
- package/daemon/specs/agents/conveyor/reviewer/agent.yaml +1 -1
- package/daemon/specs/agents/design/product-designer/agent.yaml +1 -1
- package/daemon/specs/agents/development/implementer/agent.yaml +1 -1
- package/daemon/specs/agents/development/qa/agent.yaml +1 -1
- package/daemon/specs/agents/factory-rsi/dogfood/agent.yaml +1 -1
- package/daemon/specs/agents/factory-rsi/release-manager/agent.yaml +1 -1
- package/daemon/specs/agents/orchestration/orchestrator/agent.yaml +1 -1
- package/daemon/specs/agents/product-management/pm/agent.yaml +1 -0
- package/daemon/specs/agents/research/analyst/agent.yaml +1 -1
- package/daemon/specs/agents/research/synthesizer/agent.yaml +1 -1
- package/daemon/specs/agents/review/independent-reviewer/agent.yaml +1 -1
- package/daemon/specs/agents/shared/agent.yaml +6 -0
- package/daemon/specs/agents/shared/runtime/claude-activity-hooks.json +4 -0
- package/daemon/specs/agents/shared/skills/core/watchdog/SKILL.md +1 -0
- package/dist/bin-wrapper.d.ts.map +1 -1
- package/dist/bin-wrapper.js +7 -0
- package/dist/bin-wrapper.js.map +1 -1
- package/dist/build-info.js +3 -3
- package/dist/commands/agent-image.d.ts.map +1 -1
- package/dist/commands/agent-image.js +2 -1
- package/dist/commands/agent-image.js.map +1 -1
- package/dist/commands/broadcast.d.ts.map +1 -1
- package/dist/commands/broadcast.js +37 -2
- package/dist/commands/broadcast.js.map +1 -1
- package/dist/commands/context.d.ts +2 -7
- package/dist/commands/context.d.ts.map +1 -1
- package/dist/commands/context.js +391 -213
- package/dist/commands/context.js.map +1 -1
- package/dist/commands/provider.d.ts +4 -0
- package/dist/commands/provider.d.ts.map +1 -0
- package/dist/commands/provider.js +218 -0
- package/dist/commands/provider.js.map +1 -0
- package/dist/commands/ps.d.ts +7 -0
- package/dist/commands/ps.d.ts.map +1 -1
- package/dist/commands/ps.js +34 -4
- package/dist/commands/ps.js.map +1 -1
- package/dist/commands/queue.d.ts.map +1 -1
- package/dist/commands/queue.js +38 -8
- package/dist/commands/queue.js.map +1 -1
- package/dist/commands/scope.d.ts.map +1 -1
- package/dist/commands/scope.js +48 -4
- package/dist/commands/scope.js.map +1 -1
- package/dist/commands/send.d.ts.map +1 -1
- package/dist/commands/send.js +70 -11
- package/dist/commands/send.js.map +1 -1
- package/dist/commands/stream.d.ts +1 -0
- package/dist/commands/stream.d.ts.map +1 -1
- package/dist/commands/stream.js +93 -0
- package/dist/commands/stream.js.map +1 -1
- package/dist/commands/tui.d.ts +4 -0
- package/dist/commands/tui.d.ts.map +1 -0
- package/dist/commands/tui.js +29 -0
- package/dist/commands/tui.js.map +1 -0
- package/dist/commands/walk.d.ts +19 -0
- package/dist/commands/walk.d.ts.map +1 -0
- package/dist/commands/walk.js +139 -0
- package/dist/commands/walk.js.map +1 -0
- package/dist/context-resolve.d.ts +14 -0
- package/dist/context-resolve.d.ts.map +1 -0
- package/dist/context-resolve.js +40 -0
- package/dist/context-resolve.js.map +1 -0
- package/dist/front-door.d.ts +31 -0
- package/dist/front-door.d.ts.map +1 -0
- package/dist/front-door.js +114 -0
- package/dist/front-door.js.map +1 -0
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -6
- package/dist/index.js.map +1 -1
- package/dist/lib/scope/attestation-lineage.d.ts +14 -0
- package/dist/lib/scope/attestation-lineage.d.ts.map +1 -0
- package/dist/lib/scope/attestation-lineage.js +34 -0
- package/dist/lib/scope/attestation-lineage.js.map +1 -0
- package/package.json +4 -2
- package/tui/dist/daemon-client.d.ts +56 -0
- package/tui/dist/daemon-client.d.ts.map +1 -0
- package/tui/dist/daemon-client.js +99 -0
- package/tui/dist/daemon-client.js.map +1 -0
- package/tui/dist/demo-data.d.ts +3 -0
- package/tui/dist/demo-data.d.ts.map +1 -0
- package/tui/dist/demo-data.js +52 -0
- package/tui/dist/demo-data.js.map +1 -0
- package/tui/dist/detail.d.ts +34 -0
- package/tui/dist/detail.d.ts.map +1 -0
- package/tui/dist/detail.js +47 -0
- package/tui/dist/detail.js.map +1 -0
- package/tui/dist/grammar.d.ts +3 -0
- package/tui/dist/grammar.d.ts.map +1 -0
- package/tui/dist/grammar.js +66 -0
- package/tui/dist/grammar.js.map +1 -0
- package/tui/dist/hydrate.d.ts +78 -0
- package/tui/dist/hydrate.d.ts.map +1 -0
- package/tui/dist/hydrate.js +294 -0
- package/tui/dist/hydrate.js.map +1 -0
- package/tui/dist/index.d.ts +12 -0
- package/tui/dist/index.d.ts.map +1 -0
- package/tui/dist/index.js +12 -0
- package/tui/dist/index.js.map +1 -0
- package/tui/dist/input.d.ts +21 -0
- package/tui/dist/input.d.ts.map +1 -0
- package/tui/dist/input.js +128 -0
- package/tui/dist/input.js.map +1 -0
- package/tui/dist/live.d.ts +20 -0
- package/tui/dist/live.d.ts.map +1 -0
- package/tui/dist/live.js +67 -0
- package/tui/dist/live.js.map +1 -0
- package/tui/dist/main.d.ts +3 -0
- package/tui/dist/main.d.ts.map +1 -0
- package/tui/dist/main.js +184 -0
- package/tui/dist/main.js.map +1 -0
- package/tui/dist/motion.d.ts +13 -0
- package/tui/dist/motion.d.ts.map +1 -0
- package/tui/dist/motion.js +31 -0
- package/tui/dist/motion.js.map +1 -0
- package/tui/dist/navigator.d.ts +21 -0
- package/tui/dist/navigator.d.ts.map +1 -0
- package/tui/dist/navigator.js +168 -0
- package/tui/dist/navigator.js.map +1 -0
- package/tui/dist/refresh.d.ts +3 -0
- package/tui/dist/refresh.d.ts.map +1 -0
- package/tui/dist/refresh.js +9 -0
- package/tui/dist/refresh.js.map +1 -0
- package/tui/dist/render.d.ts +21 -0
- package/tui/dist/render.d.ts.map +1 -0
- package/tui/dist/render.js +807 -0
- package/tui/dist/render.js.map +1 -0
- package/tui/dist/sections.d.ts +4 -0
- package/tui/dist/sections.d.ts.map +1 -0
- package/tui/dist/sections.js +19 -0
- package/tui/dist/sections.js.map +1 -0
- package/tui/dist/socket-server.d.ts +24 -0
- package/tui/dist/socket-server.d.ts.map +1 -0
- package/tui/dist/socket-server.js +85 -0
- package/tui/dist/socket-server.js.map +1 -0
- package/tui/dist/state.d.ts +51 -0
- package/tui/dist/state.d.ts.map +1 -0
- package/tui/dist/state.js +480 -0
- package/tui/dist/state.js.map +1 -0
- package/tui/dist/stylize.d.ts +4 -0
- package/tui/dist/stylize.d.ts.map +1 -0
- package/tui/dist/stylize.js +248 -0
- package/tui/dist/stylize.js.map +1 -0
- package/tui/dist/theme.d.ts +19 -0
- package/tui/dist/theme.d.ts.map +1 -0
- package/tui/dist/theme.js +86 -0
- package/tui/dist/theme.js.map +1 -0
- package/tui/dist/topology/canvas.d.ts +43 -0
- package/tui/dist/topology/canvas.d.ts.map +1 -0
- package/tui/dist/topology/canvas.js +131 -0
- package/tui/dist/topology/canvas.js.map +1 -0
- package/tui/dist/topology/fixture.d.ts +4 -0
- package/tui/dist/topology/fixture.d.ts.map +1 -0
- package/tui/dist/topology/fixture.js +71 -0
- package/tui/dist/topology/fixture.js.map +1 -0
- package/tui/dist/topology/glyphs.d.ts +21 -0
- package/tui/dist/topology/glyphs.d.ts.map +1 -0
- package/tui/dist/topology/glyphs.js +49 -0
- package/tui/dist/topology/glyphs.js.map +1 -0
- package/tui/dist/topology/graph-types.d.ts +39 -0
- package/tui/dist/topology/graph-types.d.ts.map +1 -0
- package/tui/dist/topology/graph-types.js +2 -0
- package/tui/dist/topology/graph-types.js.map +1 -0
- package/tui/dist/topology/layout.d.ts +52 -0
- package/tui/dist/topology/layout.d.ts.map +1 -0
- package/tui/dist/topology/layout.js +118 -0
- package/tui/dist/topology/layout.js.map +1 -0
- package/tui/dist/topology/render-graph.d.ts +8 -0
- package/tui/dist/topology/render-graph.d.ts.map +1 -0
- package/tui/dist/topology/render-graph.js +20 -0
- package/tui/dist/topology/render-graph.js.map +1 -0
- package/tui/dist/topology/runtime-marks.d.ts +53 -0
- package/tui/dist/topology/runtime-marks.d.ts.map +1 -0
- package/tui/dist/topology/runtime-marks.js +185 -0
- package/tui/dist/topology/runtime-marks.js.map +1 -0
- package/tui/dist/topology/styles/braille.d.ts +5 -0
- package/tui/dist/topology/styles/braille.d.ts.map +1 -0
- package/tui/dist/topology/styles/braille.js +84 -0
- package/tui/dist/topology/styles/braille.js.map +1 -0
- package/tui/dist/topology/styles/hatchet.d.ts +41 -0
- package/tui/dist/topology/styles/hatchet.d.ts.map +1 -0
- package/tui/dist/topology/styles/hatchet.js +146 -0
- package/tui/dist/topology/styles/hatchet.js.map +1 -0
- package/tui/dist/types.d.ts +362 -0
- package/tui/dist/types.d.ts.map +1 -0
- package/tui/dist/types.js +6 -0
- package/tui/dist/types.js.map +1 -0
- package/ui/dist/assets/{index-DkNi0RT8.js → index-Dv5VaLCN.js} +135 -135
- package/ui/dist/index.html +1 -1
- package/dist/commands/context-pack.d.ts +0 -4
- package/dist/commands/context-pack.d.ts.map +0 -1
- package/dist/commands/context-pack.js +0 -357
- package/dist/commands/context-pack.js.map +0 -1
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
export const FIXTURE_RIG_NAME = "openrig-build";
|
|
2
|
+
export function spikeFixtureGraph() {
|
|
3
|
+
return {
|
|
4
|
+
nodes: [
|
|
5
|
+
{ id: "pod-01SPIKEORCH000000000000000", type: "podGroup", data: { logicalId: "orch", podNamespace: "orch", podLabel: "orch", runtime: null, model: null, status: null, nodeKind: "agent", startupStatus: null, contextUsedPercentage: null } },
|
|
6
|
+
{ id: "pod-01SPIKEDEV0000000000000000", type: "podGroup", data: { logicalId: "dev", podNamespace: "dev", podLabel: "dev", runtime: null, model: null, status: null, nodeKind: "agent", startupStatus: null, contextUsedPercentage: null } },
|
|
7
|
+
{ id: "pod-01SPIKEREVIEW00000000000000", type: "podGroup", data: { logicalId: "review", podNamespace: "review", podLabel: "review", runtime: null, model: null, status: null, nodeKind: "agent", startupStatus: null, contextUsedPercentage: null } },
|
|
8
|
+
{
|
|
9
|
+
id: "01SPIKENODELEAD00000000000",
|
|
10
|
+
type: "rigNode",
|
|
11
|
+
parentId: "pod-01SPIKEORCH000000000000000",
|
|
12
|
+
data: {
|
|
13
|
+
logicalId: "orch.lead", podNamespace: "orch", runtime: "claude-code", model: "claude",
|
|
14
|
+
status: "running", nodeKind: "agent", startupStatus: "ready", contextUsedPercentage: 18,
|
|
15
|
+
agentActivity: { state: "running" }, terminalActive: true, canonicalSessionName: "orch-lead@openrig-build",
|
|
16
|
+
},
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
id: "01SPIKENODEDRIVER000000000",
|
|
20
|
+
type: "rigNode",
|
|
21
|
+
parentId: "pod-01SPIKEDEV0000000000000000",
|
|
22
|
+
data: {
|
|
23
|
+
logicalId: "dev.driver", podNamespace: "dev", runtime: "claude-code", model: "claude",
|
|
24
|
+
status: "running", nodeKind: "agent", startupStatus: "ready", contextUsedPercentage: 24,
|
|
25
|
+
agentActivity: { state: "running" }, terminalActive: true, canonicalSessionName: "dev-driver@openrig-build",
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
id: "01SPIKENODEQA0000000000000",
|
|
30
|
+
type: "rigNode",
|
|
31
|
+
parentId: "pod-01SPIKEDEV0000000000000000",
|
|
32
|
+
data: {
|
|
33
|
+
// ◐ partial/% — the EXISTING amber-attention state with a served ctx%
|
|
34
|
+
logicalId: "dev.qa", podNamespace: "dev", runtime: "codex", model: "gpt",
|
|
35
|
+
status: "running", nodeKind: "agent", startupStatus: "attention_required", contextUsedPercentage: 63,
|
|
36
|
+
agentActivity: { state: "needs_input" }, terminalActive: false, canonicalSessionName: "dev-qa@openrig-build",
|
|
37
|
+
},
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
id: "01SPIKENODER1000000000000Z",
|
|
41
|
+
type: "rigNode",
|
|
42
|
+
parentId: "pod-01SPIKEREVIEW00000000000000",
|
|
43
|
+
data: {
|
|
44
|
+
// ○ honest-unknown — NO session, NO activity, NO ctx: the projection
|
|
45
|
+
// has no value, so the render must say so (never fabricate ●)
|
|
46
|
+
logicalId: "review.r1", podNamespace: "review", runtime: "codex", model: null,
|
|
47
|
+
status: null, nodeKind: "agent", startupStatus: null, contextUsedPercentage: null,
|
|
48
|
+
agentActivity: null, terminalActive: null, canonicalSessionName: null,
|
|
49
|
+
},
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
id: "01SPIKENODEVALID0000000000",
|
|
53
|
+
type: "rigNode",
|
|
54
|
+
parentId: "pod-01SPIKEREVIEW00000000000000",
|
|
55
|
+
data: {
|
|
56
|
+
// ✕ failed
|
|
57
|
+
logicalId: "review.validator", podNamespace: "review", runtime: "codex", model: "gpt",
|
|
58
|
+
status: "running", nodeKind: "agent", startupStatus: "failed", contextUsedPercentage: null,
|
|
59
|
+
agentActivity: null, terminalActive: false, canonicalSessionName: "review-validator@openrig-build",
|
|
60
|
+
},
|
|
61
|
+
},
|
|
62
|
+
],
|
|
63
|
+
edges: [
|
|
64
|
+
{ id: "01SPIKEEDGE1", source: "01SPIKENODELEAD00000000000", target: "01SPIKENODEDRIVER000000000", label: "delegates_to" },
|
|
65
|
+
{ id: "01SPIKEEDGE2", source: "01SPIKENODELEAD00000000000", target: "01SPIKENODER1000000000000Z", label: "delegates_to" },
|
|
66
|
+
{ id: "01SPIKEEDGE3", source: "01SPIKENODEDRIVER000000000", target: "01SPIKENODEQA0000000000000", label: "collaborates_with" },
|
|
67
|
+
{ id: "01SPIKEEDGE4", source: "01SPIKENODER1000000000000Z", target: "01SPIKENODELEAD00000000000", label: "escalates_to" },
|
|
68
|
+
],
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=fixture.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fixture.js","sourceRoot":"","sources":["../../src/topology/fixture.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { Token } from "../theme.js";
|
|
2
|
+
import type { GraphNodeData } from "./graph-types.js";
|
|
3
|
+
export interface StatusGlyph {
|
|
4
|
+
glyph: "●" | "◐" | "○" | "✕";
|
|
5
|
+
token: Token;
|
|
6
|
+
/** ctx% overlay text ("63%") when the ◐ bucket has a served percentage */
|
|
7
|
+
overlay: string | null;
|
|
8
|
+
}
|
|
9
|
+
export declare function statusGlyph(data: GraphNodeData): StatusGlyph;
|
|
10
|
+
/** S19 round-4 (guard finding 4): the EXPLORER row's status glyph+role,
|
|
11
|
+
* folded from the SERVED AgentRow status vocabulary (hydrate.toAgentRow
|
|
12
|
+
* derives it verbatim from the projection: failed / attention_required /
|
|
13
|
+
* needs_input / active / idle / sessionStatus-or-"unknown"; the demo fixture
|
|
14
|
+
* additionally uses the legacy "needs-attention" spelling). Same honest
|
|
15
|
+
* 4-glyph vocabulary + activity roles as the topology statusGlyph — anything
|
|
16
|
+
* not positively known renders ○, never a fabricated ●. */
|
|
17
|
+
export declare function rowStatusGlyph(agent: {
|
|
18
|
+
status: string;
|
|
19
|
+
}): Pick<StatusGlyph, "glyph" | "token">;
|
|
20
|
+
export declare function edgeToken(kind: string): Token;
|
|
21
|
+
//# sourceMappingURL=glyphs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"glyphs.d.ts","sourceRoot":"","sources":["../../src/topology/glyphs.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEtD,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IAC7B,KAAK,EAAE,KAAK,CAAC;IACb,0EAA0E;IAC1E,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,aAAa,GAAG,WAAW,CAmB5D;AAED;;;;;;2DAM2D;AAC3D,wBAAgB,cAAc,CAAC,KAAK,EAAE;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAAC,WAAW,EAAE,OAAO,GAAG,OAAO,CAAC,CAQ9F;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,CAK7C"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
export function statusGlyph(data) {
|
|
2
|
+
const activity = data.agentActivity?.state;
|
|
3
|
+
if (data.startupStatus === "failed" || data.status === "failed" || data.status === "stopped")
|
|
4
|
+
return { glyph: "✕", token: "error", overlay: null };
|
|
5
|
+
if (data.startupStatus === "attention_required" || data.heldReason != null || activity === "needs_input")
|
|
6
|
+
return {
|
|
7
|
+
glyph: "◐",
|
|
8
|
+
token: "actAttention",
|
|
9
|
+
overlay: data.contextUsedPercentage != null ? `${Math.round(data.contextUsedPercentage)}%` : null,
|
|
10
|
+
};
|
|
11
|
+
if (data.startupStatus === "ready" && data.status === "running") {
|
|
12
|
+
// S19 MR3: ACTIVITY splits the ● bucket by color ROLE (glyph honesty
|
|
13
|
+
// unchanged) — actively-working vs idle are visibly distinct
|
|
14
|
+
const working = activity === "running" || data.terminalActive === true;
|
|
15
|
+
return { glyph: "●", token: working ? "actActive" : "actIdle", overlay: null };
|
|
16
|
+
}
|
|
17
|
+
// everything else — pending, queued, detached, no session — is the honest
|
|
18
|
+
// ○ bucket, rendered wherever the projection has no value (role: detached)
|
|
19
|
+
return { glyph: "○", token: "actDetached", overlay: null };
|
|
20
|
+
}
|
|
21
|
+
/** S19 round-4 (guard finding 4): the EXPLORER row's status glyph+role,
|
|
22
|
+
* folded from the SERVED AgentRow status vocabulary (hydrate.toAgentRow
|
|
23
|
+
* derives it verbatim from the projection: failed / attention_required /
|
|
24
|
+
* needs_input / active / idle / sessionStatus-or-"unknown"; the demo fixture
|
|
25
|
+
* additionally uses the legacy "needs-attention" spelling). Same honest
|
|
26
|
+
* 4-glyph vocabulary + activity roles as the topology statusGlyph — anything
|
|
27
|
+
* not positively known renders ○, never a fabricated ●. */
|
|
28
|
+
export function rowStatusGlyph(agent) {
|
|
29
|
+
const s = agent.status;
|
|
30
|
+
if (s === "failed")
|
|
31
|
+
return { glyph: "✕", token: "error" };
|
|
32
|
+
if (s === "attention_required" || s === "needs_input" || s === "needs-attention")
|
|
33
|
+
return { glyph: "◐", token: "actAttention" };
|
|
34
|
+
if (s === "active")
|
|
35
|
+
return { glyph: "●", token: "actActive" };
|
|
36
|
+
if (s === "idle")
|
|
37
|
+
return { glyph: "●", token: "actIdle" };
|
|
38
|
+
return { glyph: "○", token: "actDetached" };
|
|
39
|
+
}
|
|
40
|
+
export function edgeToken(kind) {
|
|
41
|
+
if (kind === "delegates_to")
|
|
42
|
+
return "accent";
|
|
43
|
+
if (kind === "collaborates_with")
|
|
44
|
+
return "ok";
|
|
45
|
+
if (kind === "escalates_to")
|
|
46
|
+
return "warn";
|
|
47
|
+
return "dim";
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=glyphs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"glyphs.js","sourceRoot":"","sources":["../../src/topology/glyphs.ts"],"names":[],"mappings":"AA+BA,MAAM,UAAU,WAAW,CAAC,IAAmB;IAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC;IAC3C,IAAI,IAAI,CAAC,aAAa,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,KAAK,QAAQ,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS;QAC1F,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IACvD,IAAI,IAAI,CAAC,aAAa,KAAK,oBAAoB,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,IAAI,QAAQ,KAAK,aAAa;QACtG,OAAO;YACL,KAAK,EAAE,GAAG;YACV,KAAK,EAAE,cAAc;YACrB,OAAO,EAAE,IAAI,CAAC,qBAAqB,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI;SAClG,CAAC;IACJ,IAAI,IAAI,CAAC,aAAa,KAAK,OAAO,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAChE,qEAAqE;QACrE,6DAA6D;QAC7D,MAAM,OAAO,GAAG,QAAQ,KAAK,SAAS,IAAI,IAAI,CAAC,cAAc,KAAK,IAAI,CAAC;QACvE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IACjF,CAAC;IACD,0EAA0E;IAC1E,2EAA2E;IAC3E,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC7D,CAAC;AAED;;;;;;2DAM2D;AAC3D,MAAM,UAAU,cAAc,CAAC,KAAyB;IACtD,MAAM,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;IACvB,IAAI,CAAC,KAAK,QAAQ;QAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC;IAC1D,IAAI,CAAC,KAAK,oBAAoB,IAAI,CAAC,KAAK,aAAa,IAAI,CAAC,KAAK,iBAAiB;QAC9E,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,cAAc,EAAE,CAAC;IAC/C,IAAI,CAAC,KAAK,QAAQ;QAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;IAC9D,IAAI,CAAC,KAAK,MAAM;QAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC;IAC1D,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,IAAI,IAAI,KAAK,cAAc;QAAE,OAAO,QAAQ,CAAC;IAC7C,IAAI,IAAI,KAAK,mBAAmB;QAAE,OAAO,IAAI,CAAC;IAC9C,IAAI,IAAI,KAAK,cAAc;QAAE,OAAO,MAAM,CAAC;IAC3C,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
export interface GraphNodeData {
|
|
2
|
+
logicalId: string;
|
|
3
|
+
podNamespace?: string | null;
|
|
4
|
+
podLabel?: string | null;
|
|
5
|
+
runtime: string | null;
|
|
6
|
+
model: string | null;
|
|
7
|
+
/** latest session status verbatim (null = no session) */
|
|
8
|
+
status: string | null;
|
|
9
|
+
nodeKind: "agent" | "infrastructure";
|
|
10
|
+
startupStatus: "pending" | "ready" | "attention_required" | "failed" | null;
|
|
11
|
+
contextUsedPercentage: number | null;
|
|
12
|
+
agentActivity?: {
|
|
13
|
+
state?: string;
|
|
14
|
+
} | null;
|
|
15
|
+
terminalActive?: boolean | null;
|
|
16
|
+
heldReason?: string | null;
|
|
17
|
+
canonicalSessionName?: string | null;
|
|
18
|
+
}
|
|
19
|
+
export interface GraphNode {
|
|
20
|
+
id: string;
|
|
21
|
+
/** "podGroup" (pod container) or "rigNode" (agent/infrastructure seat) */
|
|
22
|
+
type: string;
|
|
23
|
+
parentId?: string;
|
|
24
|
+
data: GraphNodeData;
|
|
25
|
+
}
|
|
26
|
+
export interface GraphEdge {
|
|
27
|
+
id: string;
|
|
28
|
+
/** node ids (NOT logicalIds) — join through GraphNode.id */
|
|
29
|
+
source: string;
|
|
30
|
+
target: string;
|
|
31
|
+
/** the served edge KIND string (e.g. delegates_to) — the daemon serializes
|
|
32
|
+
* it under `label`; the spike renders it as line COLOR, never as text */
|
|
33
|
+
label: string;
|
|
34
|
+
}
|
|
35
|
+
export interface RigGraph {
|
|
36
|
+
nodes: GraphNode[];
|
|
37
|
+
edges: GraphEdge[];
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=graph-types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph-types.d.ts","sourceRoot":"","sources":["../../src/topology/graph-types.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,yDAAyD;IACzD,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,EAAE,OAAO,GAAG,gBAAgB,CAAC;IACrC,aAAa,EAAE,SAAS,GAAG,OAAO,GAAG,oBAAoB,GAAG,QAAQ,GAAG,IAAI,CAAC;IAC5E,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,aAAa,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAC1C,cAAc,CAAC,EAAE,OAAO,GAAG,IAAI,CAAC;IAChC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,oBAAoB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACtC;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,0EAA0E;IAC1E,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,aAAa,CAAC;CACrB;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,4DAA4D;IAC5D,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf;6EACyE;IACzE,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,QAAQ;IACvB,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,KAAK,EAAE,SAAS,EAAE,CAAC;CACpB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"graph-types.js","sourceRoot":"","sources":["../../src/topology/graph-types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { GraphEdge, GraphNode, RigGraph } from "./graph-types.js";
|
|
2
|
+
import { type StatusGlyph } from "./glyphs.js";
|
|
3
|
+
export interface PlacedNode {
|
|
4
|
+
node: GraphNode;
|
|
5
|
+
glyph: StatusGlyph;
|
|
6
|
+
/** MEMBER-only display title (S19 MR1 — identity stays logicalId in every
|
|
7
|
+
* zone/action; this is display only) */
|
|
8
|
+
title: string;
|
|
9
|
+
/** `● member 63%` and `runtime · ctx%` — the info INSIDE the node */
|
|
10
|
+
nameLine: string;
|
|
11
|
+
metaLine: string;
|
|
12
|
+
x: number;
|
|
13
|
+
y: number;
|
|
14
|
+
w: number;
|
|
15
|
+
h: number;
|
|
16
|
+
}
|
|
17
|
+
export interface GraphContainer {
|
|
18
|
+
kind: "rig" | "pod";
|
|
19
|
+
name: string;
|
|
20
|
+
x: number;
|
|
21
|
+
y: number;
|
|
22
|
+
w: number;
|
|
23
|
+
h: number;
|
|
24
|
+
}
|
|
25
|
+
export interface GraphLayout {
|
|
26
|
+
placed: PlacedNode[];
|
|
27
|
+
byId: Map<string, PlacedNode>;
|
|
28
|
+
edges: GraphEdge[];
|
|
29
|
+
/** R2 HIGH-1: the LOCKED containment hierarchy — the rig container wraps
|
|
30
|
+
* pod containers, pod containers wrap their member agent boxes; renderers
|
|
31
|
+
* MUST draw them (agent-in-pod-in-rig is a visible contract, not metadata) */
|
|
32
|
+
containers: GraphContainer[];
|
|
33
|
+
width: number;
|
|
34
|
+
height: number;
|
|
35
|
+
/** MR8: true when the laid-out extent exceeds the viewport width — the
|
|
36
|
+
* renderer MUST show the honest clipped-content indicator */
|
|
37
|
+
clipped: boolean;
|
|
38
|
+
}
|
|
39
|
+
export declare function agentNodes(graph: RigGraph): GraphNode[];
|
|
40
|
+
export declare function nodeLines(node: GraphNode): {
|
|
41
|
+
glyph: StatusGlyph;
|
|
42
|
+
title: string;
|
|
43
|
+
nameLine: string;
|
|
44
|
+
metaLine: string;
|
|
45
|
+
};
|
|
46
|
+
/** R2 HIGH-1 layout: pods are the clustering unit — each pod is a container
|
|
47
|
+
* column holding its member agent boxes stacked vertically; pods order by the
|
|
48
|
+
* min delegation rank of their members (delegation still reads left→right);
|
|
49
|
+
* the rig container wraps everything. Ungrouped agents get a "(no pod)"
|
|
50
|
+
* cluster so nothing served is ever dropped. */
|
|
51
|
+
export declare function layoutGraph(graph: RigGraph, maxWidth: number, rigName?: string): GraphLayout;
|
|
52
|
+
//# sourceMappingURL=layout.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../src/topology/layout.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACvE,OAAO,EAAe,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAG5D,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,WAAW,CAAC;IACnB;4CACwC;IACxC,KAAK,EAAE,MAAM,CAAC;IACd,sEAAsE;IACtE,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,KAAK,GAAG,KAAK,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAED,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,UAAU,EAAE,CAAC;IACrB,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAC9B,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB;;kFAE8E;IAC9E,UAAU,EAAE,cAAc,EAAE,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf;iEAC6D;IAC7D,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,QAAQ,GAAG,SAAS,EAAE,CAEvD;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,SAAS,GAAG;IAAE,KAAK,EAAE,WAAW,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAepH;AAsCD;;;;gDAIgD;AAChD,wBAAgB,WAAW,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,SAAK,GAAG,WAAW,CAwDxF"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { statusGlyph } from "./glyphs.js";
|
|
2
|
+
import { markText, runtimeMarkSegs } from "./runtime-marks.js";
|
|
3
|
+
export function agentNodes(graph) {
|
|
4
|
+
return graph.nodes.filter((n) => n.type === "rigNode" && n.data.nodeKind === "agent");
|
|
5
|
+
}
|
|
6
|
+
export function nodeLines(node) {
|
|
7
|
+
const glyph = statusGlyph(node.data);
|
|
8
|
+
const ctx = node.data.contextUsedPercentage;
|
|
9
|
+
// S19 MR1 (§A1): the pod is named ONCE — by its container tab. The card
|
|
10
|
+
// title is the MEMBER-only segment (a confirmed `${pod}.` prefix strips,
|
|
11
|
+
// the navigator's rule; non-prefixed names display unchanged) and the meta
|
|
12
|
+
// drops the pod suffix.
|
|
13
|
+
const pod = node.data.podNamespace;
|
|
14
|
+
const member = pod && node.data.logicalId.startsWith(`${pod}.`)
|
|
15
|
+
? node.data.logicalId.slice(pod.length + 1)
|
|
16
|
+
: node.data.logicalId;
|
|
17
|
+
const nameLine = `${glyph.glyph} ${member}${glyph.overlay ? ` ${glyph.overlay}` : ""}`;
|
|
18
|
+
// S19 MR2: meta = web-family runtime MARK + adjacent ctx% (honest-unknown —)
|
|
19
|
+
const metaLine = `${markText(runtimeMarkSegs(node.data.runtime))} ${ctx == null ? "—" : `${Math.round(ctx)}%`}`;
|
|
20
|
+
return { glyph, title: member, nameLine, metaLine };
|
|
21
|
+
}
|
|
22
|
+
function rankNodes(agents, edges) {
|
|
23
|
+
const rank = new Map();
|
|
24
|
+
const delegates = edges.filter((e) => e.label === "delegates_to");
|
|
25
|
+
const hasIncoming = new Set(delegates.map((e) => e.target));
|
|
26
|
+
const roots = agents.filter((n) => !hasIncoming.has(n.id));
|
|
27
|
+
for (const root of roots)
|
|
28
|
+
rank.set(root.id, 0);
|
|
29
|
+
// relax delegation depth (fixture-scale graphs; bounded passes)
|
|
30
|
+
for (let pass = 0; pass < agents.length; pass++) {
|
|
31
|
+
let changed = false;
|
|
32
|
+
for (const e of delegates) {
|
|
33
|
+
const from = rank.get(e.source);
|
|
34
|
+
if (from == null)
|
|
35
|
+
continue;
|
|
36
|
+
const proposed = from + 1;
|
|
37
|
+
if ((rank.get(e.target) ?? -1) < proposed) {
|
|
38
|
+
rank.set(e.target, proposed);
|
|
39
|
+
changed = true;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
if (!changed)
|
|
43
|
+
break;
|
|
44
|
+
}
|
|
45
|
+
// collaborators sit one column RIGHT of their partner (the mockup reading:
|
|
46
|
+
// lead → driver ═ qa) — applies to nodes that are not delegation targets
|
|
47
|
+
// themselves, even if the root-default provisionally ranked them 0
|
|
48
|
+
for (const e of edges.filter((x) => x.label === "collaborates_with")) {
|
|
49
|
+
const from = rank.get(e.source);
|
|
50
|
+
const targetIsDelegate = delegates.some((d) => d.target === e.target);
|
|
51
|
+
const targetDelegates = delegates.some((d) => d.source === e.target);
|
|
52
|
+
if (from != null && !targetIsDelegate && !targetDelegates)
|
|
53
|
+
rank.set(e.target, from + 1);
|
|
54
|
+
}
|
|
55
|
+
for (const n of agents)
|
|
56
|
+
if (!rank.has(n.id))
|
|
57
|
+
rank.set(n.id, 0);
|
|
58
|
+
return rank;
|
|
59
|
+
}
|
|
60
|
+
const POD_GAP = 4;
|
|
61
|
+
const MARGIN_X = 1;
|
|
62
|
+
/** R2 HIGH-1 layout: pods are the clustering unit — each pod is a container
|
|
63
|
+
* column holding its member agent boxes stacked vertically; pods order by the
|
|
64
|
+
* min delegation rank of their members (delegation still reads left→right);
|
|
65
|
+
* the rig container wraps everything. Ungrouped agents get a "(no pod)"
|
|
66
|
+
* cluster so nothing served is ever dropped. */
|
|
67
|
+
export function layoutGraph(graph, maxWidth, rigName = "") {
|
|
68
|
+
const agents = agentNodes(graph);
|
|
69
|
+
const rank = rankNodes(agents, graph.edges);
|
|
70
|
+
const podLabel = new Map(graph.nodes.filter((n) => n.type === "podGroup").map((n) => [n.id, n.data.podNamespace ?? n.data.logicalId]));
|
|
71
|
+
const pods = new Map();
|
|
72
|
+
for (const n of agents) {
|
|
73
|
+
const key = (n.parentId && podLabel.get(n.parentId)) ?? n.data.podNamespace ?? "(no pod)";
|
|
74
|
+
pods.set(key, [...(pods.get(key) ?? []), n]);
|
|
75
|
+
}
|
|
76
|
+
const podOrder = [...pods.entries()].sort(([an, a], [bn, b]) => {
|
|
77
|
+
const ar = Math.min(...a.map((n) => rank.get(n.id) ?? 0));
|
|
78
|
+
const br = Math.min(...b.map((n) => rank.get(n.id) ?? 0));
|
|
79
|
+
return ar - br || an.localeCompare(bn);
|
|
80
|
+
});
|
|
81
|
+
const placed = [];
|
|
82
|
+
const byId = new Map();
|
|
83
|
+
const containers = [];
|
|
84
|
+
const rigX = MARGIN_X;
|
|
85
|
+
const rigY = 1;
|
|
86
|
+
let podX = rigX + 2;
|
|
87
|
+
let maxPodBottom = 0;
|
|
88
|
+
for (const [podName, members] of podOrder) {
|
|
89
|
+
const sorted = [...members].sort((a, b) => (rank.get(a.id) ?? 0) - (rank.get(b.id) ?? 0) || a.data.logicalId.localeCompare(b.data.logicalId));
|
|
90
|
+
const podTop = rigY + 1;
|
|
91
|
+
let y = podTop + 1;
|
|
92
|
+
let podInnerW = Math.max(`▾ ${podName}`.length + 2, 8);
|
|
93
|
+
for (const node of sorted) {
|
|
94
|
+
const { glyph, title, nameLine, metaLine } = nodeLines(node);
|
|
95
|
+
const w = Math.max(nameLine.length, metaLine.length) + 4;
|
|
96
|
+
const p = { node, glyph, title, nameLine, metaLine, x: podX + 2, y, w, h: 4 };
|
|
97
|
+
placed.push(p);
|
|
98
|
+
byId.set(node.id, p);
|
|
99
|
+
y += p.h + 1;
|
|
100
|
+
podInnerW = Math.max(podInnerW, w);
|
|
101
|
+
}
|
|
102
|
+
const podW = podInnerW + 4;
|
|
103
|
+
const podH = y - podTop + 1;
|
|
104
|
+
containers.push({ kind: "pod", name: podName, x: podX, y: podTop, w: podW, h: podH });
|
|
105
|
+
maxPodBottom = Math.max(maxPodBottom, podTop + podH);
|
|
106
|
+
podX += podW + POD_GAP;
|
|
107
|
+
}
|
|
108
|
+
const rigW = podX - POD_GAP + 2 - rigX;
|
|
109
|
+
// two spare interior rows: the escalation under-route corridor (lanes 0-1)
|
|
110
|
+
// must never land on the rig's own bottom border
|
|
111
|
+
const rigH = maxPodBottom - rigY + 4;
|
|
112
|
+
containers.unshift({ kind: "rig", name: rigName, x: rigX, y: rigY, w: rigW, h: rigH });
|
|
113
|
+
const trueWidth = rigX + rigW + MARGIN_X;
|
|
114
|
+
const width = Math.min(trueWidth, maxWidth);
|
|
115
|
+
const height = rigY + rigH + 1;
|
|
116
|
+
return { placed, byId, edges: graph.edges, containers, width, height, clipped: trueWidth > maxWidth };
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=layout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"layout.js","sourceRoot":"","sources":["../../src/topology/layout.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { GraphCanvas } from "./canvas.js";
|
|
2
|
+
import { type StyleContext } from "./styles/hatchet.js";
|
|
3
|
+
import type { RigGraph } from "./graph-types.js";
|
|
4
|
+
export declare const GRAPH_STYLE_NAMES: readonly ["hatchet", "braille", "braille-fallback"];
|
|
5
|
+
export type GraphStyle = (typeof GRAPH_STYLE_NAMES)[number];
|
|
6
|
+
export declare function isGraphStyle(value: string): value is GraphStyle;
|
|
7
|
+
export declare function renderGraphStyle(style: string, graph: RigGraph, ctx: StyleContext, width: number): GraphCanvas;
|
|
8
|
+
//# sourceMappingURL=render-graph.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render-graph.d.ts","sourceRoot":"","sources":["../../src/topology/render-graph.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,EAAiB,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEvE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEjD,eAAO,MAAM,iBAAiB,qDAAsD,CAAC;AACrF,MAAM,MAAM,UAAU,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE5D,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,UAAU,CAE/D;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,GAAG,WAAW,CAW9G"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { layoutGraph } from "./layout.js";
|
|
2
|
+
import { renderHatchet } from "./styles/hatchet.js";
|
|
3
|
+
import { renderBraille } from "./styles/braille.js";
|
|
4
|
+
export const GRAPH_STYLE_NAMES = ["hatchet", "braille", "braille-fallback"];
|
|
5
|
+
export function isGraphStyle(value) {
|
|
6
|
+
return GRAPH_STYLE_NAMES.includes(value);
|
|
7
|
+
}
|
|
8
|
+
export function renderGraphStyle(style, graph, ctx, width) {
|
|
9
|
+
switch (style) {
|
|
10
|
+
case "braille":
|
|
11
|
+
return renderBraille(layoutGraph(graph, width, ctx.rig), ctx, width, false);
|
|
12
|
+
case "braille-fallback":
|
|
13
|
+
return renderBraille(layoutGraph(graph, width, ctx.rig), ctx, width, true);
|
|
14
|
+
default:
|
|
15
|
+
// hatchet is the mainline AND the unknown-style safety floor — the
|
|
16
|
+
// reducer already rejects unknown names before render (one surface)
|
|
17
|
+
return renderHatchet(layoutGraph(graph, width, ctx.rig), ctx, width);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=render-graph.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"render-graph.js","sourceRoot":"","sources":["../../src/topology/render-graph.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAqB,MAAM,qBAAqB,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGpD,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,SAAS,EAAE,SAAS,EAAE,kBAAkB,CAAU,CAAC;AAGrF,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,OAAQ,iBAAuC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAClE,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAa,EAAE,KAAe,EAAE,GAAiB,EAAE,KAAa;IAC/F,QAAQ,KAAK,EAAE,CAAC;QACd,KAAK,SAAS;YACZ,OAAO,aAAa,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QAC9E,KAAK,kBAAkB;YACrB,OAAO,aAAa,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;QAC7E;YACE,mEAAmE;YACnE,oEAAoE;YACpE,OAAO,aAAa,CAAC,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;IACzE,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import type { Token } from "../theme.js";
|
|
2
|
+
export type ClawdPixel = 0 | 1 | 2;
|
|
3
|
+
/** the 16x16 pixel matrix, derived from the rect list (row-major) */
|
|
4
|
+
export declare function clawdGrid(): ClawdPixel[][];
|
|
5
|
+
export interface MarkSeg {
|
|
6
|
+
text: string;
|
|
7
|
+
token?: Token;
|
|
8
|
+
bold?: boolean;
|
|
9
|
+
/** background token for half/quadrant cells whose lower/other half differs */
|
|
10
|
+
bg?: Token;
|
|
11
|
+
}
|
|
12
|
+
/** FAITHFUL form — 16 cells x 8 rows of half-blocks (▀ paints the top pixel
|
|
13
|
+
* with fg and the bottom with bg): the detail-pane / prototype scale. */
|
|
14
|
+
export declare function clawdFaithfulRows(): MarkSeg[][];
|
|
15
|
+
export declare function clawdDownsample(cols: number, rows: number): MarkSeg[][];
|
|
16
|
+
/** FOUNDER ROUND-2 DESIGN (2026-08-04 via pm-lead): the row mark is a flat
|
|
17
|
+
* claude-terracotta BLOCK with two short dark vertical eye bars centered —
|
|
18
|
+
* no limbs/legs; color + face ARE the mark at 2-cell size. Exact source
|
|
19
|
+
* values: body #ad6755, eyes #181818 (RuntimeMark.tsx). */
|
|
20
|
+
export declare function clawdFounderMark(): MarkSeg[];
|
|
21
|
+
/** PICKS-V4 clawd row mark (founder amendment, PICKS-OF-RECORD sha256-16
|
|
22
|
+
* 14afeb74, 2026-08-04 — a bounded refinement INSIDE the locked square-with-
|
|
23
|
+
* eyes direction): the eyes are literally the characters `><` — left eye `>`,
|
|
24
|
+
* right eye `<`, pointing INWARD, squinty (reference image-cache 102).
|
|
25
|
+
* Founder rationale verbatim: eyes at the far edges do not read as eyes;
|
|
26
|
+
* inward angle brackets make it read as a FACE. Dark #181818 eyes ON the
|
|
27
|
+
* #ad6755 terracotta field, unchanged. (Lineage: round-4 shipped the ▘▝
|
|
28
|
+
* outer-quadrant pair; superseded by this amendment.) */
|
|
29
|
+
export declare function clawdSquareMark(): MarkSeg[];
|
|
30
|
+
/** ROUND-3 codex blue-hint CANDIDATES — PICKED at picks v4 (14afeb74):
|
|
31
|
+
* CHEVRON-ONLY, on detail/topology surfaces only (founder delegated; pm-lead
|
|
32
|
+
* ruled the most restrained option). codexMark() below now ships the chevron
|
|
33
|
+
* form; this record keeps the presented variants for decision lineage. Each
|
|
34
|
+
* variant uses the OFFICIAL sampled #6867aa (token codexBlue), never a
|
|
35
|
+
* remembered value. */
|
|
36
|
+
export declare function codexHintVariants(): Record<"chevron" | "outline" | "none", MarkSeg[]>;
|
|
37
|
+
/** row-mark CANDIDATES for the mr7 pick — both are downsample outputs */
|
|
38
|
+
export declare function clawdMiniA(): MarkSeg[];
|
|
39
|
+
export declare function clawdMiniB(): MarkSeg[];
|
|
40
|
+
/** Codex: the `>_` prompt mark with the PICKS-V4 CHEVRON-ONLY blue hint
|
|
41
|
+
* (item a, 14afeb74): the `>` carries the OFFICIAL sampled #6867aa; the `_`
|
|
42
|
+
* stays light ink. Text stays exactly ASCII `>_` (web-identity: the SAME
|
|
43
|
+
* mark, not a cousin; ❯ remains vetoed). This mark renders on detail +
|
|
44
|
+
* topology surfaces only — the explorer carries no marks (locked). */
|
|
45
|
+
export declare function codexMark(): MarkSeg[];
|
|
46
|
+
/** terminal/tty runtime: dark cell + white `>_` — same family, inverted. */
|
|
47
|
+
export declare function terminalMark(): MarkSeg[];
|
|
48
|
+
/** the row-scale mark for a served runtime string (placeholder-safe default:
|
|
49
|
+
* miniA for claude until the founder pick lands — swap point, one site) */
|
|
50
|
+
export declare function runtimeMarkSegs(runtime: string | null | undefined): MarkSeg[];
|
|
51
|
+
/** plain-text width of a mark (all marks are single-cell glyphs) */
|
|
52
|
+
export declare function markText(segs: MarkSeg[]): string;
|
|
53
|
+
//# sourceMappingURL=runtime-marks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runtime-marks.d.ts","sourceRoot":"","sources":["../../src/topology/runtime-marks.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAgBzC,MAAM,MAAM,UAAU,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAEnC,qEAAqE;AACrE,wBAAgB,SAAS,IAAI,UAAU,EAAE,EAAE,CAO1C;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,8EAA8E;IAC9E,EAAE,CAAC,EAAE,KAAK,CAAC;CACZ;AAED;yEACyE;AACzE,wBAAgB,iBAAiB,IAAI,OAAO,EAAE,EAAE,CAkB/C;AAcD,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,EAAE,EAAE,CA+BvE;AAED;;;2DAG2D;AAC3D,wBAAgB,gBAAgB,IAAI,OAAO,EAAE,CAO5C;AAED;;;;;;;yDAOyD;AACzD,wBAAgB,eAAe,IAAI,OAAO,EAAE,CAK3C;AAED;;;;;uBAKuB;AACvB,wBAAgB,iBAAiB,IAAI,MAAM,CAAC,SAAS,GAAG,SAAS,GAAG,MAAM,EAAE,OAAO,EAAE,CAAC,CAcrF;AAED,yEAAyE;AACzE,wBAAgB,UAAU,IAAI,OAAO,EAAE,CAEtC;AAED,wBAAgB,UAAU,IAAI,OAAO,EAAE,CAEtC;AAED;;;;sEAIsE;AACtE,wBAAgB,SAAS,IAAI,OAAO,EAAE,CAKrC;AAED,4EAA4E;AAC5E,wBAAgB,YAAY,IAAI,OAAO,EAAE,CAKxC;AAED;2EAC2E;AAC3E,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,EAAE,CAO7E;AAED,oEAAoE;AACpE,wBAAgB,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,CAEhD"}
|