@openrig/cli 0.3.1 → 0.3.2
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/plugins/openrig-core/skills/forming-an-openrig-mental-model/SKILL.md +1 -1
- package/daemon/dist/adapters/codex-runtime-adapter.d.ts.map +1 -1
- package/daemon/dist/adapters/codex-runtime-adapter.js +2 -1
- package/daemon/dist/adapters/codex-runtime-adapter.js.map +1 -1
- package/daemon/dist/adapters/tmux.d.ts +36 -0
- package/daemon/dist/adapters/tmux.d.ts.map +1 -1
- package/daemon/dist/adapters/tmux.js +66 -0
- package/daemon/dist/adapters/tmux.js.map +1 -1
- package/daemon/dist/db/migrations/037_mission_control_actions.d.ts +5 -1
- package/daemon/dist/db/migrations/037_mission_control_actions.d.ts.map +1 -1
- package/daemon/dist/db/migrations/037_mission_control_actions.js +5 -1
- package/daemon/dist/db/migrations/037_mission_control_actions.js.map +1 -1
- package/daemon/dist/db/migrations/041_rig_policy.d.ts +32 -0
- package/daemon/dist/db/migrations/041_rig_policy.d.ts.map +1 -0
- package/daemon/dist/db/migrations/041_rig_policy.js +47 -0
- package/daemon/dist/db/migrations/041_rig_policy.js.map +1 -0
- package/daemon/dist/domain/agent-images/resume-token-discovery.js +1 -1
- package/daemon/dist/domain/agent-images/resume-token-discovery.js.map +1 -1
- package/daemon/dist/domain/agent-images/snapshot-capturer.d.ts.map +1 -1
- package/daemon/dist/domain/agent-images/snapshot-capturer.js +2 -1
- package/daemon/dist/domain/agent-images/snapshot-capturer.js.map +1 -1
- package/daemon/dist/domain/agent-manifest.js +27 -0
- package/daemon/dist/domain/agent-manifest.js.map +1 -1
- package/daemon/dist/domain/bootstrap-orchestrator.d.ts.map +1 -1
- package/daemon/dist/domain/bootstrap-orchestrator.js +86 -6
- package/daemon/dist/domain/bootstrap-orchestrator.js.map +1 -1
- package/daemon/dist/domain/bundle-agent-images-router.d.ts +95 -0
- package/daemon/dist/domain/bundle-agent-images-router.d.ts.map +1 -0
- package/daemon/dist/domain/bundle-agent-images-router.js +140 -0
- package/daemon/dist/domain/bundle-agent-images-router.js.map +1 -0
- package/daemon/dist/domain/bundle-assembler.d.ts +18 -1
- package/daemon/dist/domain/bundle-assembler.d.ts.map +1 -1
- package/daemon/dist/domain/bundle-assembler.js +11 -1
- package/daemon/dist/domain/bundle-assembler.js.map +1 -1
- package/daemon/dist/domain/bundle-audit.d.ts +89 -0
- package/daemon/dist/domain/bundle-audit.d.ts.map +1 -0
- package/daemon/dist/domain/bundle-audit.js +87 -0
- package/daemon/dist/domain/bundle-audit.js.map +1 -0
- package/daemon/dist/domain/bundle-conflict-detector.d.ts +57 -0
- package/daemon/dist/domain/bundle-conflict-detector.d.ts.map +1 -0
- package/daemon/dist/domain/bundle-conflict-detector.js +49 -0
- package/daemon/dist/domain/bundle-conflict-detector.js.map +1 -0
- package/daemon/dist/domain/bundle-context-packs-router.d.ts +100 -0
- package/daemon/dist/domain/bundle-context-packs-router.d.ts.map +1 -0
- package/daemon/dist/domain/bundle-context-packs-router.js +158 -0
- package/daemon/dist/domain/bundle-context-packs-router.js.map +1 -0
- package/daemon/dist/domain/bundle-plugins-router.d.ts +69 -0
- package/daemon/dist/domain/bundle-plugins-router.d.ts.map +1 -0
- package/daemon/dist/domain/bundle-plugins-router.js +87 -0
- package/daemon/dist/domain/bundle-plugins-router.js.map +1 -0
- package/daemon/dist/domain/bundle-skills-router.d.ts +62 -0
- package/daemon/dist/domain/bundle-skills-router.d.ts.map +1 -0
- package/daemon/dist/domain/bundle-skills-router.js +90 -0
- package/daemon/dist/domain/bundle-skills-router.js.map +1 -0
- package/daemon/dist/domain/bundle-types.d.ts +106 -0
- package/daemon/dist/domain/bundle-types.d.ts.map +1 -1
- package/daemon/dist/domain/bundle-types.js +375 -0
- package/daemon/dist/domain/bundle-types.js.map +1 -1
- package/daemon/dist/domain/bundle-workflow-specs-router.d.ts +94 -0
- package/daemon/dist/domain/bundle-workflow-specs-router.d.ts.map +1 -0
- package/daemon/dist/domain/bundle-workflow-specs-router.js +144 -0
- package/daemon/dist/domain/bundle-workflow-specs-router.js.map +1 -0
- package/daemon/dist/domain/context-monitor.d.ts +5 -1
- package/daemon/dist/domain/context-monitor.d.ts.map +1 -1
- package/daemon/dist/domain/context-monitor.js +28 -15
- package/daemon/dist/domain/context-monitor.js.map +1 -1
- package/daemon/dist/domain/graph-projection.d.ts +6 -0
- package/daemon/dist/domain/graph-projection.d.ts.map +1 -1
- package/daemon/dist/domain/graph-projection.js +6 -0
- package/daemon/dist/domain/graph-projection.js.map +1 -1
- package/daemon/dist/domain/native-resume-probe.js +7 -7
- package/daemon/dist/domain/native-resume-probe.js.map +1 -1
- package/daemon/dist/domain/node-inventory.d.ts +18 -0
- package/daemon/dist/domain/node-inventory.d.ts.map +1 -1
- package/daemon/dist/domain/node-inventory.js +98 -0
- package/daemon/dist/domain/node-inventory.js.map +1 -1
- package/daemon/dist/domain/node-launcher.d.ts +12 -0
- package/daemon/dist/domain/node-launcher.d.ts.map +1 -1
- package/daemon/dist/domain/node-launcher.js +25 -1
- package/daemon/dist/domain/node-launcher.js.map +1 -1
- package/daemon/dist/domain/pod-bundle-assembler.d.ts +16 -1
- package/daemon/dist/domain/pod-bundle-assembler.d.ts.map +1 -1
- package/daemon/dist/domain/pod-bundle-assembler.js +11 -1
- package/daemon/dist/domain/pod-bundle-assembler.js.map +1 -1
- package/daemon/dist/domain/profile-resolver.d.ts +10 -0
- package/daemon/dist/domain/profile-resolver.d.ts.map +1 -1
- package/daemon/dist/domain/profile-resolver.js +4 -0
- package/daemon/dist/domain/profile-resolver.js.map +1 -1
- package/daemon/dist/domain/ps-projection.d.ts +22 -0
- package/daemon/dist/domain/ps-projection.d.ts.map +1 -1
- package/daemon/dist/domain/ps-projection.js +57 -0
- package/daemon/dist/domain/ps-projection.js.map +1 -1
- package/daemon/dist/domain/queue-repository.d.ts +37 -1
- package/daemon/dist/domain/queue-repository.d.ts.map +1 -1
- package/daemon/dist/domain/queue-repository.js +99 -2
- package/daemon/dist/domain/queue-repository.js.map +1 -1
- package/daemon/dist/domain/restore-check-service.d.ts +4 -0
- package/daemon/dist/domain/restore-check-service.d.ts.map +1 -1
- package/daemon/dist/domain/restore-check-service.js +16 -7
- package/daemon/dist/domain/restore-check-service.js.map +1 -1
- package/daemon/dist/domain/rig-policy/rig-policy-defaults.d.ts +48 -0
- package/daemon/dist/domain/rig-policy/rig-policy-defaults.d.ts.map +1 -0
- package/daemon/dist/domain/rig-policy/rig-policy-defaults.js +96 -0
- package/daemon/dist/domain/rig-policy/rig-policy-defaults.js.map +1 -0
- package/daemon/dist/domain/rig-policy/rig-policy-store.d.ts +46 -0
- package/daemon/dist/domain/rig-policy/rig-policy-store.d.ts.map +1 -0
- package/daemon/dist/domain/rig-policy/rig-policy-store.js +171 -0
- package/daemon/dist/domain/rig-policy/rig-policy-store.js.map +1 -0
- package/daemon/dist/domain/rig-policy/rig-policy-types.d.ts +145 -0
- package/daemon/dist/domain/rig-policy/rig-policy-types.d.ts.map +1 -0
- package/daemon/dist/domain/rig-policy/rig-policy-types.js +52 -0
- package/daemon/dist/domain/rig-policy/rig-policy-types.js.map +1 -0
- package/daemon/dist/domain/rig-policy/rig-policy-validator.d.ts +58 -0
- package/daemon/dist/domain/rig-policy/rig-policy-validator.d.ts.map +1 -0
- package/daemon/dist/domain/rig-policy/rig-policy-validator.js +211 -0
- package/daemon/dist/domain/rig-policy/rig-policy-validator.js.map +1 -0
- package/daemon/dist/domain/rigspec-instantiator.d.ts +1 -1
- package/daemon/dist/domain/rigspec-instantiator.d.ts.map +1 -1
- package/daemon/dist/domain/rigspec-instantiator.js +109 -18
- package/daemon/dist/domain/rigspec-instantiator.js.map +1 -1
- package/daemon/dist/domain/seat-activity-service.d.ts +79 -0
- package/daemon/dist/domain/seat-activity-service.d.ts.map +1 -0
- package/daemon/dist/domain/seat-activity-service.js +123 -0
- package/daemon/dist/domain/seat-activity-service.js.map +1 -0
- package/daemon/dist/domain/slices/slice-indexer.d.ts +12 -0
- package/daemon/dist/domain/slices/slice-indexer.d.ts.map +1 -1
- package/daemon/dist/domain/slices/slice-indexer.js +23 -0
- package/daemon/dist/domain/slices/slice-indexer.js.map +1 -1
- package/daemon/dist/domain/spec-library-service.d.ts.map +1 -1
- package/daemon/dist/domain/spec-library-service.js +19 -0
- package/daemon/dist/domain/spec-library-service.js.map +1 -1
- package/daemon/dist/domain/types.d.ts +79 -3
- package/daemon/dist/domain/types.d.ts.map +1 -1
- package/daemon/dist/domain/types.js.map +1 -1
- package/daemon/dist/domain/workflow-spec-cache.d.ts +22 -0
- package/daemon/dist/domain/workflow-spec-cache.d.ts.map +1 -1
- package/daemon/dist/domain/workflow-spec-cache.js +37 -0
- package/daemon/dist/domain/workflow-spec-cache.js.map +1 -1
- package/daemon/dist/domain/workspace/default-workspace-scaffold.d.ts +7 -0
- package/daemon/dist/domain/workspace/default-workspace-scaffold.d.ts.map +1 -1
- package/daemon/dist/domain/workspace/default-workspace-scaffold.js +156 -3
- package/daemon/dist/domain/workspace/default-workspace-scaffold.js.map +1 -1
- package/daemon/dist/domain/workspace/workspace-doctor.d.ts +197 -0
- package/daemon/dist/domain/workspace/workspace-doctor.d.ts.map +1 -0
- package/daemon/dist/domain/workspace/workspace-doctor.js +448 -0
- package/daemon/dist/domain/workspace/workspace-doctor.js.map +1 -0
- package/daemon/dist/index.d.ts.map +1 -1
- package/daemon/dist/index.js +11 -0
- package/daemon/dist/index.js.map +1 -1
- package/daemon/dist/routes/bundles.d.ts.map +1 -1
- package/daemon/dist/routes/bundles.js +966 -7
- package/daemon/dist/routes/bundles.js.map +1 -1
- package/daemon/dist/routes/config.d.ts.map +1 -1
- package/daemon/dist/routes/config.js +19 -2
- package/daemon/dist/routes/config.js.map +1 -1
- package/daemon/dist/routes/info.d.ts +3 -0
- package/daemon/dist/routes/info.d.ts.map +1 -0
- package/daemon/dist/routes/info.js +20 -0
- package/daemon/dist/routes/info.js.map +1 -0
- package/daemon/dist/routes/queue.d.ts +18 -0
- package/daemon/dist/routes/queue.d.ts.map +1 -1
- package/daemon/dist/routes/queue.js +97 -5
- package/daemon/dist/routes/queue.js.map +1 -1
- package/daemon/dist/routes/rig-policy.d.ts +9 -0
- package/daemon/dist/routes/rig-policy.d.ts.map +1 -0
- package/daemon/dist/routes/rig-policy.js +174 -0
- package/daemon/dist/routes/rig-policy.js.map +1 -0
- package/daemon/dist/routes/rigs.d.ts.map +1 -1
- package/daemon/dist/routes/rigs.js +10 -2
- package/daemon/dist/routes/rigs.js.map +1 -1
- package/daemon/dist/routes/sessions.d.ts.map +1 -1
- package/daemon/dist/routes/sessions.js +26 -3
- package/daemon/dist/routes/sessions.js.map +1 -1
- package/daemon/dist/routes/up.d.ts +25 -0
- package/daemon/dist/routes/up.d.ts.map +1 -1
- package/daemon/dist/routes/up.js +70 -3
- package/daemon/dist/routes/up.js.map +1 -1
- package/daemon/dist/routes/workspace.d.ts.map +1 -1
- package/daemon/dist/routes/workspace.js +80 -1
- package/daemon/dist/routes/workspace.js.map +1 -1
- package/daemon/dist/server.d.ts +10 -0
- package/daemon/dist/server.d.ts.map +1 -1
- package/daemon/dist/server.js +11 -0
- package/daemon/dist/server.js.map +1 -1
- package/daemon/dist/startup.d.ts.map +1 -1
- package/daemon/dist/startup.js +45 -4
- package/daemon/dist/startup.js.map +1 -1
- package/daemon/specs/agents/orchestration/orchestrator/guidance/role.md +28 -4
- package/daemon/specs/agents/shared/skills/core/openrig-user/SKILL.md +285 -8
- package/daemon/specs/agents/shared/skills/core/rig-lifecycle/SKILL.md +2 -2
- package/daemon/specs/rigs/launch/conveyor/rig.yaml +1 -1
- package/dist/client.d.ts +3 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +13 -1
- package/dist/client.js.map +1 -1
- package/dist/commands/bundle.d.ts.map +1 -1
- package/dist/commands/bundle.js +123 -2
- package/dist/commands/bundle.js.map +1 -1
- package/dist/commands/config-init-workspace.d.ts.map +1 -1
- package/dist/commands/config-init-workspace.js +40 -5
- package/dist/commands/config-init-workspace.js.map +1 -1
- package/dist/commands/ps.d.ts.map +1 -1
- package/dist/commands/ps.js +51 -8
- package/dist/commands/ps.js.map +1 -1
- package/dist/commands/queue.d.ts +6 -0
- package/dist/commands/queue.d.ts.map +1 -1
- package/dist/commands/queue.js +103 -5
- package/dist/commands/queue.js.map +1 -1
- package/dist/commands/rig-policy.d.ts +48 -0
- package/dist/commands/rig-policy.d.ts.map +1 -0
- package/dist/commands/rig-policy.js +429 -0
- package/dist/commands/rig-policy.js.map +1 -0
- package/dist/commands/scope.d.ts +6 -0
- package/dist/commands/scope.d.ts.map +1 -0
- package/dist/commands/scope.js +659 -0
- package/dist/commands/scope.js.map +1 -0
- package/dist/commands/up.d.ts.map +1 -1
- package/dist/commands/up.js +47 -0
- package/dist/commands/up.js.map +1 -1
- package/dist/commands/workflow.d.ts +9 -0
- package/dist/commands/workflow.d.ts.map +1 -1
- package/dist/commands/workflow.js +139 -1
- package/dist/commands/workflow.js.map +1 -1
- package/dist/commands/workspace.d.ts +20 -0
- package/dist/commands/workspace.d.ts.map +1 -1
- package/dist/commands/workspace.js +138 -7
- package/dist/commands/workspace.js.map +1 -1
- package/dist/daemon-lifecycle.d.ts +25 -1
- package/dist/daemon-lifecycle.d.ts.map +1 -1
- package/dist/daemon-lifecycle.js +33 -2
- package/dist/daemon-lifecycle.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/scope/dot-id.d.ts +43 -0
- package/dist/lib/scope/dot-id.d.ts.map +1 -0
- package/dist/lib/scope/dot-id.js +165 -0
- package/dist/lib/scope/dot-id.js.map +1 -0
- package/dist/lib/scope/scope-fs.d.ts +79 -0
- package/dist/lib/scope/scope-fs.d.ts.map +1 -0
- package/dist/lib/scope/scope-fs.js +468 -0
- package/dist/lib/scope/scope-fs.js.map +1 -0
- package/dist/lib/scope/templates.d.ts +38 -0
- package/dist/lib/scope/templates.d.ts.map +1 -0
- package/dist/lib/scope/templates.js +109 -0
- package/dist/lib/scope/templates.js.map +1 -0
- package/dist/lib/scope/types.d.ts +61 -0
- package/dist/lib/scope/types.d.ts.map +1 -0
- package/dist/lib/scope/types.js +38 -0
- package/dist/lib/scope/types.js.map +1 -0
- package/dist/lib/scope-templates/backlog-deprecation.md +26 -0
- package/dist/lib/scope-templates/backlog-tech-debt.md +22 -0
- package/dist/lib/scope-templates/bug-fix.md +30 -0
- package/dist/lib/scope-templates/mission-notes.md +97 -0
- package/dist/lib/scope-templates/mission-placeholder.md +20 -0
- package/dist/lib/scope-templates/mission-release.md +25 -0
- package/dist/lib/scope-templates/placeholder.md +30 -0
- package/dist/lib/scope-templates/release-feature.md +26 -0
- package/dist/lib/scope-templates/research.md +22 -0
- package/package.json +2 -2
- package/ui/dist/assets/index-GjTxfi9S.js +547 -0
- package/ui/dist/index.html +1 -1
- package/ui/dist/assets/index-Rl3ZBrUg.js +0 -547
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bundle workflow_specs router (Item 6 / slice-05 Checkpoint 7.3e step 2).
|
|
3
|
+
*
|
|
4
|
+
* Pure function. Copies workflow spec YAML files declared in a bundle
|
|
5
|
+
* manifest's workflow_specs[] block from the bundle's extracted tree to the
|
|
6
|
+
* operator workflow-specs library. No daemon dependencies — fully
|
|
7
|
+
* unit-testable via FsOps injection.
|
|
8
|
+
*
|
|
9
|
+
* Mirrors the bundle-skills-router pattern (file-paths, single-file copy
|
|
10
|
+
* preserving directory layout, leading-prefix strip). Per orch-ratified
|
|
11
|
+
* Candidate A on Item-6 completeness: workflow_specs is the 3rd v0
|
|
12
|
+
* cross-primitive kind (after skills + plugins). Source primitive
|
|
13
|
+
* reachable on main (WorkflowSpecCache + workflow-runtime + scanner).
|
|
14
|
+
*
|
|
15
|
+
* Safety (banked feedback_pre_existing_trust_boundary_reuse_canonical_helper
|
|
16
|
+
* addendum): both-sides containment — declared source path must stay
|
|
17
|
+
* inside bundleRoot; resolved target path (after leading "workflows/"
|
|
18
|
+
* strip) must stay inside targetWorkflowSpecsDir. The leading-prefix
|
|
19
|
+
* strip can promote intermediate ../ segments that bypass source check
|
|
20
|
+
* but escape target.
|
|
21
|
+
*
|
|
22
|
+
* Honest-scoping: missing source files surface as warnings in the
|
|
23
|
+
* result (NOT thrown errors) so the install lifecycle can continue
|
|
24
|
+
* with what's available. Same as bundle-skills-router.
|
|
25
|
+
*
|
|
26
|
+
* /install handler integration lands at Checkpoint 7.3e step 3.
|
|
27
|
+
*/
|
|
28
|
+
import nodePath from "node:path";
|
|
29
|
+
/**
|
|
30
|
+
* Route each declared workflow_spec from the bundle tree to the operator
|
|
31
|
+
* workflow-specs library. Per-entry safety: BOTH source path (under
|
|
32
|
+
* bundleRoot) AND target path (under targetWorkflowSpecsDir, post leading-
|
|
33
|
+
* prefix strip) are containment-checked. Banked both-sides-trust-boundary
|
|
34
|
+
* lesson applied. Caller writes the install audit record using the records
|
|
35
|
+
* returned here.
|
|
36
|
+
*/
|
|
37
|
+
export function routeWorkflowSpecs(input, fs) {
|
|
38
|
+
const records = [];
|
|
39
|
+
const bundleRootResolved = nodePath.resolve(input.bundleRoot);
|
|
40
|
+
const targetRootResolved = nodePath.resolve(input.targetWorkflowSpecsDir);
|
|
41
|
+
fs.mkdirp(input.targetWorkflowSpecsDir);
|
|
42
|
+
// Track basenames already routed so duplicate-basename collisions (after
|
|
43
|
+
// the basename-flatten) surface as conflict records rather than silent
|
|
44
|
+
// overwrites with a false routedCount (banked B1 guard catch on d81456dc).
|
|
45
|
+
const routedBasenames = new Set();
|
|
46
|
+
for (const declared of input.declaredWorkflowSpecs) {
|
|
47
|
+
// Scanner-visibility prefilter: spec-library-workflow-scanner reads only
|
|
48
|
+
// .yaml/.yml top-level files (spec-library-workflow-scanner.ts:366 +
|
|
49
|
+
// 390-397). Non-YAML declarations would route to disk but be invisible
|
|
50
|
+
// to the operator via the Library UI — false-positive class. Reject
|
|
51
|
+
// here so the routedCount stays truthful at the scanner-visible
|
|
52
|
+
// boundary.
|
|
53
|
+
if (!/\.ya?ml$/i.test(declared)) {
|
|
54
|
+
records.push({
|
|
55
|
+
declaredPath: declared,
|
|
56
|
+
status: "unsafe",
|
|
57
|
+
detail: `workflow_spec '${declared}' is not a .yaml/.yml file; scanner ignores non-YAML suffixes`,
|
|
58
|
+
});
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
const sourceAbs = nodePath.resolve(input.bundleRoot, declared);
|
|
62
|
+
// Defense-in-depth path-containment on SOURCE (mirrors skills router
|
|
63
|
+
// pattern; the manifest validator already rejects unsafe paths via
|
|
64
|
+
// isRelativeSafePath but we re-check here in case the input bypassed
|
|
65
|
+
// validation upstream).
|
|
66
|
+
if (sourceAbs !== bundleRootResolved && !sourceAbs.startsWith(bundleRootResolved + nodePath.sep)) {
|
|
67
|
+
records.push({
|
|
68
|
+
declaredPath: declared,
|
|
69
|
+
status: "unsafe",
|
|
70
|
+
detail: `workflow_spec path '${declared}' escapes bundle workspace; rejected`,
|
|
71
|
+
});
|
|
72
|
+
continue;
|
|
73
|
+
}
|
|
74
|
+
if (!fs.exists(sourceAbs)) {
|
|
75
|
+
records.push({
|
|
76
|
+
declaredPath: declared,
|
|
77
|
+
status: "missing",
|
|
78
|
+
detail: `workflow_spec source '${declared}' not present in bundle; skipped`,
|
|
79
|
+
});
|
|
80
|
+
continue;
|
|
81
|
+
}
|
|
82
|
+
// Target = top-level basename under targetWorkflowSpecsDir.
|
|
83
|
+
//
|
|
84
|
+
// SCANNER-REACHABILITY CONTRACT: spec-library-workflow-scanner reads
|
|
85
|
+
// ONLY top-level YAML files via readdirSync(folder) + isFile() (see
|
|
86
|
+
// spec-library-workflow-scanner.ts:382-397) — no recursion. Nested
|
|
87
|
+
// YAML inside subdirs is INVISIBLE to the scanner and Library UI.
|
|
88
|
+
// Workflow specs MUST land at the top of <workspace.specs_root>/workflows
|
|
89
|
+
// to become operator-visible. Basename-only target computation enforces
|
|
90
|
+
// this; preserving the bundle's directory layout would silently route
|
|
91
|
+
// specs to an unscanned location.
|
|
92
|
+
//
|
|
93
|
+
// Side benefit: basename can never escape targetWorkflowSpecsDir
|
|
94
|
+
// (nodePath.basename(any-path) is a leaf name with no separators), so
|
|
95
|
+
// the "target-side escape after prefix strip" hazard banked on the
|
|
96
|
+
// skills router (595e9550 B1 repair) is structurally impossible here.
|
|
97
|
+
//
|
|
98
|
+
// Basename collisions caught BEFORE write: see the routedBasenames
|
|
99
|
+
// dedup-set + the basename-collision branch below. Two declared paths
|
|
100
|
+
// sharing the same filename → first wins (status=routed), later flagged
|
|
101
|
+
// status=conflict so routedCount stays truthful at the scanner-visible
|
|
102
|
+
// boundary (mirror of the slice's 3-part collision-error posture).
|
|
103
|
+
// Non-YAML suffixes are pre-filtered (status=unsafe) since the scanner
|
|
104
|
+
// ignores non-.yaml/.yml entries entirely.
|
|
105
|
+
const basename = nodePath.basename(declared);
|
|
106
|
+
const targetAbs = nodePath.resolve(input.targetWorkflowSpecsDir, basename);
|
|
107
|
+
// Sanity check (defensive; basename is structurally safe but the resolve
|
|
108
|
+
// could in theory be a no-op for "" → keep the check, expected always-true).
|
|
109
|
+
if (targetAbs !== targetRootResolved && !targetAbs.startsWith(targetRootResolved + nodePath.sep)) {
|
|
110
|
+
records.push({
|
|
111
|
+
declaredPath: declared,
|
|
112
|
+
status: "unsafe",
|
|
113
|
+
detail: `workflow_spec target path for '${declared}' escapes target workflow-specs library; rejected`,
|
|
114
|
+
});
|
|
115
|
+
continue;
|
|
116
|
+
}
|
|
117
|
+
// Basename-collision detection: two declared paths that share a
|
|
118
|
+
// basename would both target the same file after basename-flatten. Only
|
|
119
|
+
// the FIRST is written; later ones surface as conflict records so the
|
|
120
|
+
// routedCount equals scanner-visible specs (banked B1 guard catch on
|
|
121
|
+
// d81456dc). Operator-actionable: rename the declared path or curate
|
|
122
|
+
// the bundle manifest.
|
|
123
|
+
if (routedBasenames.has(basename)) {
|
|
124
|
+
records.push({
|
|
125
|
+
declaredPath: declared,
|
|
126
|
+
status: "conflict",
|
|
127
|
+
detail: `workflow_spec basename '${basename}' collides with an earlier declared path; only the first is routed (basename-flatten conflict)`,
|
|
128
|
+
});
|
|
129
|
+
continue;
|
|
130
|
+
}
|
|
131
|
+
const content = fs.readFile(sourceAbs);
|
|
132
|
+
fs.writeFile(targetAbs, content);
|
|
133
|
+
routedBasenames.add(basename);
|
|
134
|
+
records.push({
|
|
135
|
+
declaredPath: declared,
|
|
136
|
+
status: "routed",
|
|
137
|
+
installedAt: targetAbs,
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
const routedCount = records.filter((r) => r.status === "routed").length;
|
|
141
|
+
const rejectedCount = records.length - routedCount;
|
|
142
|
+
return { records, routedCount, rejectedCount };
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=bundle-workflow-specs-router.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bundle-workflow-specs-router.js","sourceRoot":"","sources":["../../src/domain/bundle-workflow-specs-router.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,6 +11,9 @@ interface ClaudeContextProvisioner {
|
|
|
11
11
|
}): void;
|
|
12
12
|
checkReady?(binding: NodeBinding): Promise<ReadinessResult>;
|
|
13
13
|
}
|
|
14
|
+
interface RuntimeReadinessChecker {
|
|
15
|
+
checkReady?(binding: NodeBinding): Promise<ReadinessResult>;
|
|
16
|
+
}
|
|
14
17
|
/**
|
|
15
18
|
* Polls known managed runtime context sources and persists the latest
|
|
16
19
|
* normalized telemetry. Scheduler-only: no queries, no response shaping,
|
|
@@ -26,8 +29,9 @@ export declare class ContextMonitor {
|
|
|
26
29
|
private store;
|
|
27
30
|
private claudeContextProvisioner;
|
|
28
31
|
private compactionEnforcer;
|
|
32
|
+
private readinessCheckers;
|
|
29
33
|
private timer;
|
|
30
|
-
constructor(db: Database.Database, store: ContextUsageStore, claudeContextProvisioner?: ClaudeContextProvisioner, compactionEnforcer?: ClaudeCompactionEnforcer);
|
|
34
|
+
constructor(db: Database.Database, store: ContextUsageStore, claudeContextProvisioner?: ClaudeContextProvisioner, compactionEnforcer?: ClaudeCompactionEnforcer, readinessCheckers?: Record<string, RuntimeReadinessChecker | undefined>);
|
|
31
35
|
/** Discover active managed Claude sessions and poll their sidecar files. */
|
|
32
36
|
pollOnce(): Promise<void>;
|
|
33
37
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context-monitor.d.ts","sourceRoot":"","sources":["../../src/domain/context-monitor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAChF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAEL,KAAK,WAAW,EAChB,KAAK,eAAe,EACrB,MAAM,sBAAsB,CAAC;AAG9B,4CAA4C;AAC5C,eAAO,MAAM,wBAAwB,QAAS,CAAC;AAY/C,UAAU,wBAAwB;IAChC,sBAAsB,CAAC,OAAO,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC;IAC5F,UAAU,CAAC,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;CAC7D;AAED;;;;;;;;;GASG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,EAAE,CAAoB;IAC9B,OAAO,CAAC,KAAK,CAAoB;IACjC,OAAO,CAAC,wBAAwB,CAAkC;IAClE,OAAO,CAAC,kBAAkB,CAAkC;IAC5D,OAAO,CAAC,KAAK,CAA+C;gBAG1D,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,KAAK,EAAE,iBAAiB,EACxB,wBAAwB,CAAC,EAAE,wBAAwB,EACnD,kBAAkB,CAAC,EAAE,wBAAwB;
|
|
1
|
+
{"version":3,"file":"context-monitor.d.ts","sourceRoot":"","sources":["../../src/domain/context-monitor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,iCAAiC,CAAC;AAChF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAEL,KAAK,WAAW,EAChB,KAAK,eAAe,EACrB,MAAM,sBAAsB,CAAC;AAG9B,4CAA4C;AAC5C,eAAO,MAAM,wBAAwB,QAAS,CAAC;AAY/C,UAAU,wBAAwB;IAChC,sBAAsB,CAAC,OAAO,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI,CAAC;IAC5F,UAAU,CAAC,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;CAC7D;AAED,UAAU,uBAAuB;IAC/B,UAAU,CAAC,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;CAC7D;AAED;;;;;;;;;GASG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,EAAE,CAAoB;IAC9B,OAAO,CAAC,KAAK,CAAoB;IACjC,OAAO,CAAC,wBAAwB,CAAkC;IAClE,OAAO,CAAC,kBAAkB,CAAkC;IAC5D,OAAO,CAAC,iBAAiB,CAAsD;IAC/E,OAAO,CAAC,KAAK,CAA+C;gBAG1D,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,KAAK,EAAE,iBAAiB,EACxB,wBAAwB,CAAC,EAAE,wBAAwB,EACnD,kBAAkB,CAAC,EAAE,wBAAwB,EAC7C,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,uBAAuB,GAAG,SAAS,CAAC;IAYzE,4EAA4E;IACtE,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAuB/B;;;;;OAKG;YACW,gBAAgB;IAoB9B,uDAAuD;IACvD,KAAK,CAAC,UAAU,GAAE,MAAiC,GAAG,IAAI;IAW1D,iEAAiE;IACjE,IAAI,IAAI,IAAI;IAOZ,wEAAwE;IACxE,OAAO,CAAC,mBAAmB;IA6B3B,OAAO,CAAC,gBAAgB;YAeV,sBAAsB;CAuCrC"}
|
|
@@ -16,29 +16,37 @@ export class ContextMonitor {
|
|
|
16
16
|
store;
|
|
17
17
|
claudeContextProvisioner;
|
|
18
18
|
compactionEnforcer;
|
|
19
|
+
readinessCheckers;
|
|
19
20
|
timer = null;
|
|
20
|
-
constructor(db, store, claudeContextProvisioner, compactionEnforcer) {
|
|
21
|
+
constructor(db, store, claudeContextProvisioner, compactionEnforcer, readinessCheckers) {
|
|
21
22
|
this.db = db;
|
|
22
23
|
this.store = store;
|
|
23
24
|
this.claudeContextProvisioner = claudeContextProvisioner ?? null;
|
|
24
25
|
this.compactionEnforcer = compactionEnforcer ?? null;
|
|
26
|
+
this.readinessCheckers = readinessCheckers ?? {};
|
|
27
|
+
if (claudeContextProvisioner && !this.readinessCheckers["claude-code"]) {
|
|
28
|
+
this.readinessCheckers["claude-code"] = claudeContextProvisioner;
|
|
29
|
+
}
|
|
25
30
|
}
|
|
26
31
|
/** Discover active managed Claude sessions and poll their sidecar files. */
|
|
27
32
|
async pollOnce() {
|
|
28
33
|
const sessions = this.getEligibleSessions();
|
|
29
34
|
for (const session of sessions) {
|
|
30
35
|
let observed = null;
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
this.store.persist(session.node_id, observed);
|
|
34
|
-
}
|
|
35
|
-
catch {
|
|
36
|
-
observed = null;
|
|
37
|
-
// One bad session must not crash polling for others
|
|
36
|
+
const canReadContextUsage = session.runtime !== "codex" || !!session.resume_token;
|
|
37
|
+
if (canReadContextUsage) {
|
|
38
38
|
try {
|
|
39
|
-
this.
|
|
39
|
+
observed = this.readContextUsage(session);
|
|
40
|
+
this.store.persist(session.node_id, observed);
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
observed = null;
|
|
44
|
+
// One bad session must not crash polling for others
|
|
45
|
+
try {
|
|
46
|
+
this.store.persist(session.node_id, this.store.unknownUsage("parse_error"));
|
|
47
|
+
}
|
|
48
|
+
catch { /* give up on this session */ }
|
|
40
49
|
}
|
|
41
|
-
catch { /* give up on this session */ }
|
|
42
50
|
}
|
|
43
51
|
await this.normalizeStartupStatus(session);
|
|
44
52
|
await this.maybeAutoCompact(session, observed);
|
|
@@ -105,7 +113,13 @@ export class ContextMonitor {
|
|
|
105
113
|
LEFT JOIN bindings b ON b.node_id = n.id
|
|
106
114
|
WHERE (
|
|
107
115
|
(n.runtime = 'claude-code' AND s.status = 'running')
|
|
108
|
-
OR (
|
|
116
|
+
OR (
|
|
117
|
+
n.runtime = 'codex'
|
|
118
|
+
AND (
|
|
119
|
+
s.resume_token IS NOT NULL
|
|
120
|
+
OR s.startup_status IN ('failed', 'attention_required')
|
|
121
|
+
)
|
|
122
|
+
)
|
|
109
123
|
)
|
|
110
124
|
AND COALESCE(b.attachment_type, 'tmux') = 'tmux'
|
|
111
125
|
AND COALESCE(b.tmux_session, s.session_name) IS NOT NULL
|
|
@@ -125,14 +139,13 @@ export class ContextMonitor {
|
|
|
125
139
|
return this.store.readAndNormalize(session.session_name);
|
|
126
140
|
}
|
|
127
141
|
async normalizeStartupStatus(session) {
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
if (!this.claudeContextProvisioner?.checkReady)
|
|
142
|
+
const checker = session.runtime ? this.readinessCheckers[session.runtime] : undefined;
|
|
143
|
+
if (!checker?.checkReady)
|
|
131
144
|
return;
|
|
132
145
|
if (session.startup_status !== "failed" && session.startup_status !== "attention_required")
|
|
133
146
|
return;
|
|
134
147
|
try {
|
|
135
|
-
const readiness = await
|
|
148
|
+
const readiness = await checker.checkReady({
|
|
136
149
|
id: `context-monitor:${session.session_id}`,
|
|
137
150
|
nodeId: session.node_id,
|
|
138
151
|
attachmentType: "tmux",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context-monitor.js","sourceRoot":"","sources":["../../src/domain/context-monitor.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,gCAAgC,GAGjC,MAAM,sBAAsB,CAAC;AAG9B,4CAA4C;AAC5C,MAAM,CAAC,MAAM,wBAAwB,GAAG,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"context-monitor.js","sourceRoot":"","sources":["../../src/domain/context-monitor.ts"],"names":[],"mappings":"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"}
|
|
@@ -34,6 +34,9 @@ interface RFNodeData {
|
|
|
34
34
|
contextTotalOutputTokens: number | null;
|
|
35
35
|
agentActivity?: AgentActivity | null;
|
|
36
36
|
currentQitems?: CurrentQitemSummary[];
|
|
37
|
+
terminalActive?: boolean | null;
|
|
38
|
+
hasAssignedWork?: boolean;
|
|
39
|
+
pendingWorkCount?: number;
|
|
37
40
|
}
|
|
38
41
|
interface RFNode {
|
|
39
42
|
id: string;
|
|
@@ -67,6 +70,9 @@ export interface InventoryOverlay {
|
|
|
67
70
|
contextTotalOutputTokens?: number | null;
|
|
68
71
|
agentActivity?: AgentActivity | null;
|
|
69
72
|
currentQitems?: CurrentQitemSummary[];
|
|
73
|
+
terminalActive?: boolean | null;
|
|
74
|
+
hasAssignedWork?: boolean;
|
|
75
|
+
pendingWorkCount?: number;
|
|
70
76
|
}
|
|
71
77
|
export declare function projectRigToGraph(input: RigGraphInput, inventoryOverlay?: InventoryOverlay[]): ReactFlowGraph;
|
|
72
78
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph-projection.d.ts","sourceRoot":"","sources":["../../src/domain/graph-projection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEzF,MAAM,WAAW,aAAc,SAAQ,gBAAgB;IACrD,QAAQ,EAAE,OAAO,EAAE,CAAC;IACpB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;CACd;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CACrB;AAED,UAAU,UAAU;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,OAAO,GAAG,gBAAgB,CAAC;IACrC,aAAa,EAAE,SAAS,GAAG,OAAO,GAAG,oBAAoB,GAAG,QAAQ,GAAG,IAAI,CAAC;IAC5E,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,SAAS,EAAE,MAAM,CAAC;IAClB,qBAAqB,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,YAAY,EAAE,OAAO,CAAC;IACtB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,uBAAuB,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,wBAAwB,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,aAAa,CAAC,EAAE,aAAa,GAAG,IAAI,CAAC;IACrC,aAAa,CAAC,EAAE,mBAAmB,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"graph-projection.d.ts","sourceRoot":"","sources":["../../src/domain/graph-projection.ts"],"names":[],"mappings":"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"}
|
|
@@ -53,6 +53,9 @@ export function projectRigToGraph(input, inventoryOverlay) {
|
|
|
53
53
|
contextTotalOutputTokens: overlay?.contextTotalOutputTokens ?? null,
|
|
54
54
|
agentActivity: overlay?.agentActivity ?? null,
|
|
55
55
|
currentQitems: overlay?.currentQitems ?? [],
|
|
56
|
+
terminalActive: overlay?.terminalActive,
|
|
57
|
+
hasAssignedWork: overlay?.hasAssignedWork ?? false,
|
|
58
|
+
pendingWorkCount: overlay?.pendingWorkCount ?? 0,
|
|
56
59
|
},
|
|
57
60
|
};
|
|
58
61
|
});
|
|
@@ -89,6 +92,9 @@ export function projectRigToGraph(input, inventoryOverlay) {
|
|
|
89
92
|
contextTotalOutputTokens: null,
|
|
90
93
|
agentActivity: null,
|
|
91
94
|
currentQitems: [],
|
|
95
|
+
terminalActive: null,
|
|
96
|
+
hasAssignedWork: false,
|
|
97
|
+
pendingWorkCount: 0,
|
|
92
98
|
},
|
|
93
99
|
});
|
|
94
100
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph-projection.js","sourceRoot":"","sources":["../../src/domain/graph-projection.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"graph-projection.js","sourceRoot":"","sources":["../../src/domain/graph-projection.ts"],"names":[],"mappings":"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"}
|
|
@@ -94,13 +94,6 @@ export function assessNativeResumeProbe(input) {
|
|
|
94
94
|
detail: "Codex could not refresh the stored access token; an operator must sign in again before the session can resume.",
|
|
95
95
|
};
|
|
96
96
|
}
|
|
97
|
-
if (looksLikeCodexTrustPrompt(paneContent)) {
|
|
98
|
-
return {
|
|
99
|
-
status: "inconclusive",
|
|
100
|
-
code: "trust_gate",
|
|
101
|
-
detail: "Codex is waiting for workspace trust approval before the session can become interactive.",
|
|
102
|
-
};
|
|
103
|
-
}
|
|
104
97
|
if (looksLikeCodexModelSelectionPrompt(paneContent)) {
|
|
105
98
|
return {
|
|
106
99
|
status: "inconclusive",
|
|
@@ -115,6 +108,13 @@ export function assessNativeResumeProbe(input) {
|
|
|
115
108
|
detail: "Codex is running with an active interactive TUI in the probe pane.",
|
|
116
109
|
};
|
|
117
110
|
}
|
|
111
|
+
if (looksLikeCodexTrustPrompt(paneContent)) {
|
|
112
|
+
return {
|
|
113
|
+
status: "inconclusive",
|
|
114
|
+
code: "trust_gate",
|
|
115
|
+
detail: "Codex is waiting for workspace trust approval before the session can become interactive.",
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
118
|
if (paneContent.includes("Update available!") || paneContent.includes("Updating Codex")) {
|
|
119
119
|
return {
|
|
120
120
|
status: "inconclusive",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"native-resume-probe.js","sourceRoot":"","sources":["../../src/domain/native-resume-probe.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAwBxD,MAAM,cAAc,GAAG,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;AAE5E,MAAM,UAAU,wBAAwB,CACtC,OAAsB,EACtB,WAA0B,EAC1B,WAA2B;IAE3B,IAAI,CAAC,WAAW;QAAE,OAAO,IAAI,CAAC;IAC9B,IAAI,OAAO,KAAK,aAAa,EAAE,CAAC;QAC9B,MAAM,UAAU,GAAG,WAAW,CAAC,CAAC,CAAC,WAAW,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3E,OAAO,mBAAmB,UAAU,CAAC,WAAW,CAAC,GAAG,UAAU,EAAE,CAAC;IACnE,CAAC;IACD,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;QACxB,OAAO,gBAAgB,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;IACnD,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,KAA6B;IAE7B,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC;IACpC,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,IAAI,EAAE,CAAC;IAC5C,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,IAAI,EAAE,CAAC;IAE5C,IAAI,OAAO,KAAK,aAAa,EAAE,CAAC;QAC9B,IAAI,WAAW,CAAC,QAAQ,CAAC,uBAAuB,CAAC,EAAE,CAAC;YAClD,OAAO;gBACL,MAAM,EAAE,QAAQ;gBAChB,IAAI,EAAE,uBAAuB;gBAC7B,MAAM,EAAE,8DAA8D;aACvE,CAAC;QACJ,CAAC;QACD,IAAI,oCAAoC,CAAC,WAAW,CAAC,EAAE,CAAC;YACtD,OAAO;gBACL,MAAM,EAAE,oBAAoB;gBAC5B,IAAI,EAAE,gCAAgC;gBACtC,MAAM,EAAE,+FAA+F;aACxG,CAAC;QACJ,CAAC;QACD,IAAI,0BAA0B,CAAC,WAAW,CAAC,EAAE,CAAC;YAC5C,OAAO;gBACL,MAAM,EAAE,cAAc;gBACtB,IAAI,EAAE,YAAY;gBAClB,MAAM,EAAE,2FAA2F;aACpG,CAAC;QACJ,CAAC;QACD,IAAI,gCAAgC,CAAC,WAAW,CAAC,EAAE,CAAC;YAClD,OAAO;gBACL,MAAM,EAAE,cAAc;gBACtB,IAAI,EAAE,UAAU;gBAChB,MAAM,EAAE,8FAA8F;aACvG,CAAC;QACJ,CAAC;QACD,IAAI,0BAA0B,CAAC,WAAW,CAAC,EAAE,CAAC;YAC5C,OAAO;gBACL,MAAM,EAAE,QAAQ;gBAChB,IAAI,EAAE,gBAAgB;gBACtB,MAAM,EAAE,+DAA+D;aACxE,CAAC;QACJ,CAAC;QACD,IAAI,kBAAkB,CAAC,WAAW,CAAC,EAAE,CAAC;YACpC,OAAO;gBACL,MAAM,EAAE,SAAS;gBACjB,IAAI,EAAE,gBAAgB;gBACtB,MAAM,EAAE,qEAAqE;aAC9E,CAAC;QACJ,CAAC;QACD,IAAI,WAAW,KAAK,QAAQ,EAAE,CAAC;YAC7B,OAAO;gBACL,MAAM,EAAE,SAAS;gBACjB,IAAI,EAAE,gBAAgB;gBACtB,MAAM,EAAE,4DAA4D;aACrE,CAAC;QACJ,CAAC;QACD,IAAI,cAAc,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC;YACpC,OAAO;gBACL,MAAM,EAAE,QAAQ;gBAChB,IAAI,EAAE,mBAAmB;gBACzB,MAAM,EAAE,2EAA2E;aACpF,CAAC;QACJ,CAAC;QACD,OAAO;YACL,MAAM,EAAE,cAAc;YACtB,IAAI,EAAE,kBAAkB;YACxB,MAAM,EAAE,uFAAuF;SAChG,CAAC;IACJ,CAAC;IAED,IAAI,OAAO,KAAK,OAAO,EAAE,CAAC;QACxB,IAAI,WAAW,CAAC,QAAQ,CAAC,wBAAwB,CAAC,EAAE,CAAC;YACnD,OAAO;gBACL,MAAM,EAAE,QAAQ;gBAChB,IAAI,EAAE,kBAAkB;gBACxB,MAAM,EAAE,iEAAiE;aAC1E,CAAC;QACJ,CAAC;QACD,IAAI,yBAAyB,CAAC,WAAW,CAAC,EAAE,CAAC;YAC3C,OAAO;gBACL,MAAM,EAAE,oBAAoB;gBAC5B,IAAI,EAAE,oBAAoB;gBAC1B,MAAM,EAAE,gHAAgH;aACzH,CAAC;QACJ,CAAC;QACD,IAAI,
|
|
1
|
+
{"version":3,"file":"native-resume-probe.js","sourceRoot":"","sources":["../../src/domain/native-resume-probe.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,7 @@ import type { NodeInventoryEntry, NodeDetailEntry, NodeRestoreOutcome, NodeLifec
|
|
|
3
3
|
import type { RuntimeAdapter } from "./runtime-adapter.js";
|
|
4
4
|
import type { ContextUsageStore } from "./context-usage-store.js";
|
|
5
5
|
import type { AgentActivityStore } from "./agent-activity-store.js";
|
|
6
|
+
import type { SeatActivityService } from "./seat-activity-service.js";
|
|
6
7
|
import type { TmuxAdapter } from "../adapters/tmux.js";
|
|
7
8
|
/**
|
|
8
9
|
* Derives per-node lifecycle state from session/restore truth plus the rig's latest
|
|
@@ -53,6 +54,23 @@ export declare function getNodeInventoryWithContext(db: Database.Database, rigId
|
|
|
53
54
|
* Context-aware wrapper: returns node detail with context usage attached.
|
|
54
55
|
*/
|
|
55
56
|
export declare function getNodeDetailWithContext(db: Database.Database, rigId: string, logicalId: string, contextUsageStore: ContextUsageStore, opts?: Parameters<typeof getNodeDetail>[3]): NodeDetailEntry | null;
|
|
57
|
+
/**
|
|
58
|
+
* Slice 15 — populate `terminalActive` + `hasAssignedWork` per node.
|
|
59
|
+
*
|
|
60
|
+
* Two orthogonal enrichments computed independently (non-inference
|
|
61
|
+
* contract per IMPL-PRD §2.3):
|
|
62
|
+
* - `terminalActive`: read from SeatActivityService (tmux signal)
|
|
63
|
+
* - `hasAssignedWork` + `pendingWorkCount`: derived from queue_items
|
|
64
|
+
* where destination_session matches the seat's canonical session name
|
|
65
|
+
*
|
|
66
|
+
* Pure / synchronous — keeps the projection cheap for both `rig ps` and
|
|
67
|
+
* the UI which both fetch this per-request. The two enrichments do not
|
|
68
|
+
* read each other's source.
|
|
69
|
+
*/
|
|
70
|
+
export declare function attachTerminalActivityAndWork(entries: NodeInventoryEntry[], deps: {
|
|
71
|
+
db: Database.Database;
|
|
72
|
+
seatActivity?: SeatActivityService;
|
|
73
|
+
}): NodeInventoryEntry[];
|
|
56
74
|
export declare function attachAgentActivity(entries: NodeInventoryEntry[], deps: {
|
|
57
75
|
tmuxAdapter: TmuxAdapter;
|
|
58
76
|
activityStore?: AgentActivityStore;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node-inventory.d.ts","sourceRoot":"","sources":["../../src/domain/node-inventory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAyD,kBAAkB,EAAE,kBAAkB,EAAgD,QAAQ,EAAiB,MAAM,YAAY,CAAC;AAC5O,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"node-inventory.d.ts","sourceRoot":"","sources":["../../src/domain/node-inventory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAC3C,OAAO,KAAK,EAAE,kBAAkB,EAAE,eAAe,EAAyD,kBAAkB,EAAE,kBAAkB,EAAgD,QAAQ,EAAiB,MAAM,YAAY,CAAC;AAC5O,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AACpE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACtE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAwJvD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE;IAC9C,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,cAAc,EAAE,kBAAkB,CAAC;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,EAAE,QAAQ,GAAG,IAAI,CAAC;CACjC,GAAG,kBAAkB,CAoBrB;AAwFD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,kBAAkB,EAAE,CA+G3F;AAiBD;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,IAAI,CAAC,EAAE;IACL,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAC1C,iGAAiG;IACjG,0BAA0B,CAAC,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC1F,GACA,eAAe,GAAG,IAAI,CAgJxB;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CACzC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,KAAK,EAAE,MAAM,EACb,iBAAiB,EAAE,iBAAiB,GACnC,kBAAkB,EAAE,CAoBtB;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EACjB,iBAAiB,EAAE,iBAAiB,EACpC,IAAI,CAAC,EAAE,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC,CAAC,CAAC,GACzC,eAAe,GAAG,IAAI,CAexB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,kBAAkB,EAAE,EAC7B,IAAI,EAAE;IAAE,EAAE,EAAE,QAAQ,CAAC,QAAQ,CAAC;IAAC,YAAY,CAAC,EAAE,mBAAmB,CAAA;CAAE,GAClE,kBAAkB,EAAE,CAiBtB;AAqED,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,kBAAkB,EAAE,EAC7B,IAAI,EAAE;IAAE,WAAW,EAAE,WAAW,CAAC;IAAC,aAAa,CAAC,EAAE,kBAAkB,CAAC;IAAC,GAAG,CAAC,EAAE,IAAI,CAAA;CAAE,GACjF,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAyB/B"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { probeSessionActivity } from "./session-transport.js";
|
|
2
2
|
import { findLatestUsableSnapshot } from "./rig-repository.js";
|
|
3
3
|
import { resolveNodeWorkspace } from "./workspace/workspace-resolver.js";
|
|
4
|
+
import { deriveCanonicalSessionName } from "./session-name.js";
|
|
4
5
|
// -- Helpers --
|
|
5
6
|
function computeResumeCommand(runtime, resumeToken, codexConfigProfile) {
|
|
6
7
|
if (!resumeToken)
|
|
@@ -487,6 +488,103 @@ export function getNodeDetailWithContext(db, rigId, logicalId, contextUsageStore
|
|
|
487
488
|
}
|
|
488
489
|
return detail;
|
|
489
490
|
}
|
|
491
|
+
/**
|
|
492
|
+
* Slice 15 — populate `terminalActive` + `hasAssignedWork` per node.
|
|
493
|
+
*
|
|
494
|
+
* Two orthogonal enrichments computed independently (non-inference
|
|
495
|
+
* contract per IMPL-PRD §2.3):
|
|
496
|
+
* - `terminalActive`: read from SeatActivityService (tmux signal)
|
|
497
|
+
* - `hasAssignedWork` + `pendingWorkCount`: derived from queue_items
|
|
498
|
+
* where destination_session matches the seat's canonical session name
|
|
499
|
+
*
|
|
500
|
+
* Pure / synchronous — keeps the projection cheap for both `rig ps` and
|
|
501
|
+
* the UI which both fetch this per-request. The two enrichments do not
|
|
502
|
+
* read each other's source.
|
|
503
|
+
*/
|
|
504
|
+
export function attachTerminalActivityAndWork(entries, deps) {
|
|
505
|
+
const seatActivity = deps.seatActivity ?? null;
|
|
506
|
+
const pendingByDest = readPendingWorkBySession(deps.db);
|
|
507
|
+
return entries.map((entry) => {
|
|
508
|
+
let terminalActive = undefined;
|
|
509
|
+
if (seatActivity && entry.canonicalSessionName) {
|
|
510
|
+
const obs = seatActivity.getSeatActivity(entry.canonicalSessionName);
|
|
511
|
+
terminalActive = obs ? obs.isActiveWithinWindow : null;
|
|
512
|
+
}
|
|
513
|
+
const pendingCount = countPendingForEntry(entry, pendingByDest);
|
|
514
|
+
return {
|
|
515
|
+
...entry,
|
|
516
|
+
terminalActive,
|
|
517
|
+
hasAssignedWork: pendingCount > 0,
|
|
518
|
+
pendingWorkCount: pendingCount,
|
|
519
|
+
};
|
|
520
|
+
});
|
|
521
|
+
}
|
|
522
|
+
/**
|
|
523
|
+
* QA baseline-deep-dogfood BLOCKING-A2 (qitem-20260518063900-85745917):
|
|
524
|
+
* adopted/live-session rigs do NOT surface assigned queue work because
|
|
525
|
+
* the prior lookup matched destination_session ONLY against
|
|
526
|
+
* canonicalSessionName.
|
|
527
|
+
*
|
|
528
|
+
* For MANAGED seats, canonicalSessionName equals the canonical form
|
|
529
|
+
* `{pod}-{member}@{rig}` (set by deriveCanonicalSessionName at
|
|
530
|
+
* materialize time) and queue operators address them by that form, so
|
|
531
|
+
* the single-key lookup works.
|
|
532
|
+
*
|
|
533
|
+
* For ADOPTED seats, canonicalSessionName is the RAW tmux session
|
|
534
|
+
* name (whatever the adopter chose, e.g., `my-existing-claude`).
|
|
535
|
+
* Operators address adopted seats by the canonical form (logical
|
|
536
|
+
* `{pod}-{member}@{rig}`) through `rig queue create --destination`,
|
|
537
|
+
* so the single-key lookup misses.
|
|
538
|
+
*
|
|
539
|
+
* Resolve via BOTH forms:
|
|
540
|
+
* 1. entry.canonicalSessionName (covers managed + adopted-by-raw)
|
|
541
|
+
* 2. derived `{pod}-{member}@{rig}` from logicalId + rigName
|
|
542
|
+
* (covers adopted-by-canonical)
|
|
543
|
+
*
|
|
544
|
+
* The logicalId is the pod-aware `pod.member` form (dot-separated).
|
|
545
|
+
* The canonical session form replaces the dot with a dash to match the
|
|
546
|
+
* convention from deriveCanonicalSessionName (so `redo.driver-2` in
|
|
547
|
+
* rig `openrig-velocity` becomes `redo-driver-2@openrig-velocity`).
|
|
548
|
+
*
|
|
549
|
+
* Sums distinct destination_session keys to avoid double-counting
|
|
550
|
+
* when both forms are identical (managed seats whose
|
|
551
|
+
* canonicalSessionName already equals the derived canonical form).
|
|
552
|
+
*/
|
|
553
|
+
function countPendingForEntry(entry, pendingByDest) {
|
|
554
|
+
const keys = new Set();
|
|
555
|
+
if (entry.canonicalSessionName)
|
|
556
|
+
keys.add(entry.canonicalSessionName);
|
|
557
|
+
const derived = deriveCanonicalFromEntry(entry);
|
|
558
|
+
if (derived)
|
|
559
|
+
keys.add(derived);
|
|
560
|
+
let count = 0;
|
|
561
|
+
for (const key of keys) {
|
|
562
|
+
count += pendingByDest.get(key) ?? 0;
|
|
563
|
+
}
|
|
564
|
+
return count;
|
|
565
|
+
}
|
|
566
|
+
function deriveCanonicalFromEntry(entry) {
|
|
567
|
+
if (!entry.rigName || !entry.logicalId)
|
|
568
|
+
return null;
|
|
569
|
+
const dotIdx = entry.logicalId.indexOf(".");
|
|
570
|
+
if (dotIdx <= 0 || dotIdx === entry.logicalId.length - 1)
|
|
571
|
+
return null;
|
|
572
|
+
const pod = entry.logicalId.slice(0, dotIdx);
|
|
573
|
+
const member = entry.logicalId.slice(dotIdx + 1);
|
|
574
|
+
return deriveCanonicalSessionName(pod, member, entry.rigName);
|
|
575
|
+
}
|
|
576
|
+
function readPendingWorkBySession(db) {
|
|
577
|
+
const rows = db.prepare(`
|
|
578
|
+
SELECT destination_session, COUNT(*) as c
|
|
579
|
+
FROM queue_items
|
|
580
|
+
WHERE state = 'pending'
|
|
581
|
+
GROUP BY destination_session
|
|
582
|
+
`).all();
|
|
583
|
+
const out = new Map();
|
|
584
|
+
for (const r of rows)
|
|
585
|
+
out.set(r.destination_session, r.c);
|
|
586
|
+
return out;
|
|
587
|
+
}
|
|
490
588
|
export async function attachAgentActivity(entries, deps) {
|
|
491
589
|
const sampledAt = deps.now ?? new Date();
|
|
492
590
|
return Promise.all(entries.map(async (entry) => {
|