@telora/daemon 0.18.49 → 0.18.58

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.
Files changed (117) hide show
  1. package/build-info.json +13 -3
  2. package/dist/ai-inspection-context.d.ts.map +1 -1
  3. package/dist/ai-inspection-context.js +11 -1
  4. package/dist/ai-inspection-context.js.map +1 -1
  5. package/dist/ai-inspection-runner.d.ts.map +1 -1
  6. package/dist/ai-inspection-runner.js +0 -1
  7. package/dist/ai-inspection-runner.js.map +1 -1
  8. package/dist/audit-phase.d.ts.map +1 -1
  9. package/dist/audit-phase.js +4 -0
  10. package/dist/audit-phase.js.map +1 -1
  11. package/dist/cascade-restatement.d.ts +14 -5
  12. package/dist/cascade-restatement.d.ts.map +1 -1
  13. package/dist/cascade-restatement.js +35 -6
  14. package/dist/cascade-restatement.js.map +1 -1
  15. package/dist/completion/team-completion.d.ts.map +1 -1
  16. package/dist/completion/team-completion.js +32 -2
  17. package/dist/completion/team-completion.js.map +1 -1
  18. package/dist/de-restatement.d.ts.map +1 -1
  19. package/dist/de-restatement.js +0 -1
  20. package/dist/de-restatement.js.map +1 -1
  21. package/dist/directive/close-loop-stage.d.ts.map +1 -1
  22. package/dist/directive/close-loop-stage.js +10 -2
  23. package/dist/directive/close-loop-stage.js.map +1 -1
  24. package/dist/focus-executor.d.ts +7 -2
  25. package/dist/focus-executor.d.ts.map +1 -1
  26. package/dist/focus-executor.js +20 -9
  27. package/dist/focus-executor.js.map +1 -1
  28. package/dist/focus-lifecycle.d.ts.map +1 -1
  29. package/dist/focus-lifecycle.js +20 -0
  30. package/dist/focus-lifecycle.js.map +1 -1
  31. package/dist/git-genesis.d.ts +100 -0
  32. package/dist/git-genesis.d.ts.map +1 -0
  33. package/dist/git-genesis.js +231 -0
  34. package/dist/git-genesis.js.map +1 -0
  35. package/dist/git.d.ts.map +1 -1
  36. package/dist/git.js +28 -5
  37. package/dist/git.js.map +1 -1
  38. package/dist/negative-branch.d.ts +32 -1
  39. package/dist/negative-branch.d.ts.map +1 -1
  40. package/dist/negative-branch.js +55 -9
  41. package/dist/negative-branch.js.map +1 -1
  42. package/dist/output-monitor.js +5 -8
  43. package/dist/output-monitor.js.map +1 -1
  44. package/dist/prd-controller.d.ts +0 -2
  45. package/dist/prd-controller.d.ts.map +1 -1
  46. package/dist/prd-controller.js +14 -35
  47. package/dist/prd-controller.js.map +1 -1
  48. package/dist/prd-divergence.d.ts +19 -8
  49. package/dist/prd-divergence.d.ts.map +1 -1
  50. package/dist/prd-divergence.js +7 -26
  51. package/dist/prd-divergence.js.map +1 -1
  52. package/dist/prd-viability.d.ts +14 -15
  53. package/dist/prd-viability.d.ts.map +1 -1
  54. package/dist/prd-viability.js +21 -34
  55. package/dist/prd-viability.js.map +1 -1
  56. package/dist/queries/prd.d.ts +24 -2
  57. package/dist/queries/prd.d.ts.map +1 -1
  58. package/dist/queries/prd.js +17 -0
  59. package/dist/queries/prd.js.map +1 -1
  60. package/dist/queries/schemas.d.ts +28 -0
  61. package/dist/queries/schemas.d.ts.map +1 -1
  62. package/dist/queries/schemas.js +26 -0
  63. package/dist/queries/schemas.js.map +1 -1
  64. package/dist/queries/sessions.d.ts +14 -0
  65. package/dist/queries/sessions.d.ts.map +1 -1
  66. package/dist/queries/sessions.js +19 -0
  67. package/dist/queries/sessions.js.map +1 -1
  68. package/dist/queries/starter-repo.d.ts +27 -0
  69. package/dist/queries/starter-repo.d.ts.map +1 -0
  70. package/dist/queries/starter-repo.js +32 -0
  71. package/dist/queries/starter-repo.js.map +1 -0
  72. package/dist/queries/verification.d.ts +132 -0
  73. package/dist/queries/verification.d.ts.map +1 -1
  74. package/dist/queries/verification.js +271 -0
  75. package/dist/queries/verification.js.map +1 -1
  76. package/dist/reality-writeback.d.ts +257 -0
  77. package/dist/reality-writeback.d.ts.map +1 -0
  78. package/dist/reality-writeback.js +179 -0
  79. package/dist/reality-writeback.js.map +1 -0
  80. package/dist/resolvers/shared/reality-tree.d.ts +39 -1
  81. package/dist/resolvers/shared/reality-tree.d.ts.map +1 -1
  82. package/dist/resolvers/shared/reality-tree.js +51 -1
  83. package/dist/resolvers/shared/reality-tree.js.map +1 -1
  84. package/dist/session-lineage.d.ts +25 -0
  85. package/dist/session-lineage.d.ts.map +1 -1
  86. package/dist/session-lineage.js +23 -0
  87. package/dist/session-lineage.js.map +1 -1
  88. package/dist/session-stamp.d.ts +63 -0
  89. package/dist/session-stamp.d.ts.map +1 -0
  90. package/dist/session-stamp.js +65 -0
  91. package/dist/session-stamp.js.map +1 -0
  92. package/dist/spawner/helpers.d.ts.map +1 -1
  93. package/dist/spawner/helpers.js +5 -8
  94. package/dist/spawner/helpers.js.map +1 -1
  95. package/dist/supabase.d.ts +2 -2
  96. package/dist/supabase.d.ts.map +1 -1
  97. package/dist/supabase.js +1 -1
  98. package/dist/supabase.js.map +1 -1
  99. package/dist/templates/claude-md.d.ts +1 -1
  100. package/dist/templates/claude-md.d.ts.map +1 -1
  101. package/dist/templates/claude-md.js +6 -3
  102. package/dist/templates/claude-md.js.map +1 -1
  103. package/dist/types/session.d.ts +24 -0
  104. package/dist/types/session.d.ts.map +1 -1
  105. package/dist/verification-engine.d.ts +10 -0
  106. package/dist/verification-engine.d.ts.map +1 -1
  107. package/dist/verification-engine.js +32 -1
  108. package/dist/verification-engine.js.map +1 -1
  109. package/dist/verify-restatement.d.ts +16 -0
  110. package/dist/verify-restatement.d.ts.map +1 -1
  111. package/dist/verify-restatement.js +7 -0
  112. package/dist/verify-restatement.js.map +1 -1
  113. package/package.json +2 -2
  114. package/dist/prd-clearance-engine.d.ts +0 -121
  115. package/dist/prd-clearance-engine.d.ts.map +0 -1
  116. package/dist/prd-clearance-engine.js +0 -164
  117. package/dist/prd-clearance-engine.js.map +0 -1
@@ -0,0 +1,179 @@
1
+ /**
2
+ * Reality-tree writeback: decide the per-node verify classification a landing
3
+ * stamps onto the nodes an injection owns.
4
+ *
5
+ * The differential problem this closes: a confident-but-wrong tree stays wrong
6
+ * because reality never writes back. When a delivery lands, the injection it
7
+ * materialized is flipped to `verified`, but the *targeted* UDE nodes are not
8
+ * told whether the asserted desired effect actually held. So a mistaken claim
9
+ * is frozen, not corrected. This module computes -- deterministically, from a
10
+ * small typed landing signal -- what status each targeted node should carry so
11
+ * a later reader can see which claims actually realized.
12
+ *
13
+ * Reuses the EXISTING node verify-classification model (no new status
14
+ * machinery, no migration):
15
+ * - `classification`: 'match' | 'legitimate_divergence' | 'shortfall'
16
+ * (mirrors reality_tree_nodes.verify_classification)
17
+ * - `evidence`: rationale for a clean realization (-> node.evidence)
18
+ * - `verifyDivergenceReason`: why the achieved effect differs
19
+ * (-> node.verify_divergence_reason)
20
+ *
21
+ * The function is PURE: no DB, no I/O, no clock. The dispatcher (close-loop
22
+ * landing path) supplies the landing signal and applies the result via the
23
+ * existing callApi verify / node-update seam. Nothing here is destructive --
24
+ * the output only stamps status + evidence/reason on nodes the injection owns.
25
+ *
26
+ * @module reality-writeback
27
+ */
28
+ /**
29
+ * Default reason text used when a divergent/short landing carries no per-node
30
+ * reason. Deterministic so the output is stable for tests and audits.
31
+ */
32
+ const DEFAULT_DIVERGENCE_REASON = 'Targeted effect did not flip cleanly on landing; recorded as divergence pending review.';
33
+ const DEFAULT_SHORTFALL_REASON = 'Injection did not deliver its intended effect on landing; targeted UDE remains.';
34
+ /**
35
+ * Pure decision: given one injection's landing signal, decide the per-node
36
+ * writeback for each targeted node.
37
+ *
38
+ * Rules (deterministic, evaluated per node):
39
+ * 1. Empty target set -> empty output.
40
+ * 2. Injection did not deliver -> EVERY node 'shortfall' + reason.
41
+ * (delivered === false; the gap means the injection produced nothing.)
42
+ * 3. Node flipped AND achieved == declared -> 'match' (+ evidence if any).
43
+ * Flip is the node's own `flipped` when present, else the landing's
44
+ * `cascadeFlipped`.
45
+ * 4. Node flipped BUT achieved differs -> 'legitimate_divergence'
46
+ * (+ verifyDivergenceReason).
47
+ * 5. Node did NOT flip -> 'legitimate_divergence'
48
+ * (+ verifyDivergenceReason) -- the targeted UDE did not move as claimed,
49
+ * but the injection still delivered (rule 2 already handled non-delivery).
50
+ *
51
+ * No side effects. The caller applies the result via callApi.
52
+ */
53
+ export function decideNodeWriteback(landing) {
54
+ const nodes = landing.targetedNodes;
55
+ if (nodes.length === 0)
56
+ return [];
57
+ const delivered = landing.delivered ?? true;
58
+ const withStatement = (out, node) => {
59
+ if (typeof node.achievedStatement === 'string' && node.achievedStatement.trim().length > 0) {
60
+ out.statement = node.achievedStatement;
61
+ }
62
+ // Carry the node's ORIGINAL claim (pre-landing prose) so a contradicted
63
+ // node's inward drift proposal can frame the tree's claim, not the achieved
64
+ // reality. Absent -> the inward detector uses a deterministic placeholder.
65
+ if (typeof node.originalClaim === 'string' && node.originalClaim.trim().length > 0) {
66
+ out.originalClaim = node.originalClaim;
67
+ }
68
+ return out;
69
+ };
70
+ return nodes.map((node) => {
71
+ // Rule 2: the injection delivered nothing -> shortfall for every node.
72
+ if (!delivered) {
73
+ return withStatement({
74
+ nodeId: node.nodeId,
75
+ classification: 'shortfall',
76
+ verifyDivergenceReason: node.divergenceReason ?? DEFAULT_SHORTFALL_REASON,
77
+ }, node);
78
+ }
79
+ const flipped = node.flipped ?? landing.cascadeFlipped;
80
+ // Rule 5: the targeted UDE did not flip -> legitimate divergence.
81
+ if (!flipped) {
82
+ return withStatement({
83
+ nodeId: node.nodeId,
84
+ classification: 'legitimate_divergence',
85
+ verifyDivergenceReason: node.divergenceReason ?? DEFAULT_DIVERGENCE_REASON,
86
+ }, node);
87
+ }
88
+ // Rule 4: flipped, but the achieved effect differs from declared.
89
+ if (node.achievedDiffersFromDeclared === true) {
90
+ return withStatement({
91
+ nodeId: node.nodeId,
92
+ classification: 'legitimate_divergence',
93
+ verifyDivergenceReason: node.divergenceReason ?? DEFAULT_DIVERGENCE_REASON,
94
+ }, node);
95
+ }
96
+ // Rule 3: clean match.
97
+ const out = { nodeId: node.nodeId, classification: 'match' };
98
+ const hasEvidence = typeof landing.evidence === 'string' && landing.evidence.trim().length > 0;
99
+ if (hasEvidence) {
100
+ out.evidence = landing.evidence;
101
+ }
102
+ else {
103
+ // TEL-6: a match with NO evidence is an UNEARNED 'verified' claim. Flag it
104
+ // `assumed` so the apply step does not persist verify_classification='match'
105
+ // -- we never record an unevidenced "verified" stamp (the disease this
106
+ // writeback fights). The node stays unstamped until grounded by evidence.
107
+ out.assumed = true;
108
+ }
109
+ return withStatement(out, node);
110
+ });
111
+ }
112
+ /**
113
+ * True iff the landing realized cleanly: every targeted node matched. An
114
+ * empty target set is vacuously clean. Convenience predicate for callers that
115
+ * need a single clean/divergent bit (e.g. to choose whether to short-circuit
116
+ * the flip), derived from the same pure decision so the two never disagree.
117
+ */
118
+ export function isCleanLanding(landing) {
119
+ return decideNodeWriteback(landing).every((w) => w.classification === 'match');
120
+ }
121
+ const INWARD_OBSERVED_PLACEHOLDER = "The tree's claim for this node (statement not captured at detection time).";
122
+ const INWARD_CORRECTION_PLACEHOLDER = 'Realized reality diverged from this claim on landing; reason not recorded.';
123
+ /**
124
+ * Pure inward-drift detector.
125
+ *
126
+ * Detection rule (deterministic): a node whose `verifyClassification` is
127
+ * `legitimate_divergence` or `shortfall` is a CONTRADICTED claim -- realized
128
+ * reality did not match what the tree asserted. It maps to one inward
129
+ * `update_statement` drift proposal carrying:
130
+ * - observedState = the tree's claim (claimStatement, else a placeholder)
131
+ * - proposedCorrection = what reality showed (verifyDivergenceReason, else a
132
+ * placeholder)
133
+ * - proposedMetadata = { inward:true, sourceNodeId, verifyClassification }
134
+ *
135
+ * A node stamped `match` produces NO proposal (reality confirmed the claim).
136
+ * An unstamped node (null/undefined classification) produces NO proposal
137
+ * (reality has not written back yet, so there is nothing to contradict).
138
+ *
139
+ * No side effects. The caller surfaces the result via crt_drift_proposal_create
140
+ * -- never auto-applies it.
141
+ */
142
+ export function detectInwardDrift(node) {
143
+ const classification = node.verifyClassification;
144
+ if (classification !== 'legitimate_divergence' && classification !== 'shortfall') {
145
+ // 'match', null, undefined -> no contradiction to correct.
146
+ return null;
147
+ }
148
+ const claim = typeof node.claimStatement === 'string' && node.claimStatement.trim().length > 0
149
+ ? node.claimStatement
150
+ : INWARD_OBSERVED_PLACEHOLDER;
151
+ const correction = typeof node.verifyDivergenceReason === 'string' && node.verifyDivergenceReason.trim().length > 0
152
+ ? node.verifyDivergenceReason
153
+ : INWARD_CORRECTION_PLACEHOLDER;
154
+ return {
155
+ nodeId: node.nodeId,
156
+ proposalKind: 'update_statement',
157
+ observedState: claim,
158
+ proposedCorrection: correction,
159
+ proposedMetadata: {
160
+ inward: true,
161
+ sourceNodeId: node.nodeId,
162
+ verifyClassification: classification,
163
+ },
164
+ };
165
+ }
166
+ /**
167
+ * Batch convenience: run `detectInwardDrift` over many stamped nodes, dropping
168
+ * the nulls. Order-preserving; pure.
169
+ */
170
+ export function detectInwardDriftForNodes(nodes) {
171
+ const out = [];
172
+ for (const node of nodes) {
173
+ const proposal = detectInwardDrift(node);
174
+ if (proposal)
175
+ out.push(proposal);
176
+ }
177
+ return out;
178
+ }
179
+ //# sourceMappingURL=reality-writeback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reality-writeback.js","sourceRoot":"","sources":["../src/reality-writeback.ts"],"names":[],"mappings":"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"}
@@ -43,6 +43,13 @@ export interface RealityNodeRow {
43
43
  injectionStatus: 'proposed' | 'in_progress' | 'realized' | 'verified' | null;
44
44
  dissolvesObstacle: string | null;
45
45
  enablesNodeId: string | null;
46
+ /**
47
+ * When a negative-branch reservation pass last completed for this injection
48
+ * node. null = never run (a surfaced doubt); set = a pass completed (clean or
49
+ * with candidates). Optional for back-compat with payloads predating the
50
+ * column. Only meaningful on injection nodes.
51
+ */
52
+ negativeBranchPassRanAt?: string | null;
46
53
  evidence: string | null;
47
54
  }
48
55
  export interface RealityEdgeRow {
@@ -61,6 +68,37 @@ export interface EdgeListResponse {
61
68
  totalCount: number;
62
69
  }
63
70
  export declare const CRT_DUMP_BUDGET_CHARS = 10000;
64
- export declare function renderRealityTreeDump(tree: RealityTreeRow, nodes: RealityNodeRow[], edges: RealityEdgeRow[], budgetChars: number): string;
71
+ /**
72
+ * Deterministic presentability check (connectivity gate), daemon-local mirror
73
+ * of the canonical `validateTreeIntegrity` in src/lib/reality-tree/tree-integrity.ts.
74
+ *
75
+ * The daemon cannot import the canonical validator (it lives in the Vite
76
+ * workspace; the Deno `_shared` copy is generated, not importable from Node), so
77
+ * the SAME rule is inlined here: a node is an ORPHAN -- and the tree is NOT
78
+ * presentable -- when it has zero edges of ANY type touching it AND no evidence.
79
+ * A non-empty `evidence` string folds the node into its own basis. Only ACTIVE
80
+ * wiring counts: callers pass already-active nodes, and any edge whose endpoint
81
+ * is not in the active node set is ignored (it cannot rescue a node).
82
+ *
83
+ * Pure and order-independent. Returns the orphan seqs (ascending) so a refusal
84
+ * notice can name them, and `presentable` (no orphans).
85
+ */
86
+ export declare function computeTreePresentability(nodes: RealityNodeRow[], edges: RealityEdgeRow[]): {
87
+ presentable: boolean;
88
+ orphanSeqs: number[];
89
+ };
90
+ export interface RenderRealityTreeDumpOptions {
91
+ /**
92
+ * When true, the connectivity gate is ENFORCED MECHANICALLY: a tree carrying
93
+ * an orphan (not presentable) is WITHHELD -- the node/edge body is replaced
94
+ * with a refusal notice naming the orphan seqs. Use this at a downstream
95
+ * DECISION seam (e.g. the ai_inspection runner) where a non-presentable tree
96
+ * must not silently become reasoning context. Default false: authoring /
97
+ * inspection surfaces render the full tree (with doubt surfaced) so an author
98
+ * can SEE the orphans and fix them -- the gate must never wedge editing.
99
+ */
100
+ enforcePresentable?: boolean;
101
+ }
102
+ export declare function renderRealityTreeDump(tree: RealityTreeRow, nodes: RealityNodeRow[], edges: RealityEdgeRow[], budgetChars: number, opts?: RenderRealityTreeDumpOptions): string;
65
103
  export declare const FOCUS_REALITY_TREE_EMPTY_STATE: string;
66
104
  //# sourceMappingURL=reality-tree.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"reality-tree.d.ts","sourceRoot":"","sources":["../../../src/resolvers/shared/reality-tree.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,QAAQ,GAAG,UAAU,CAAC;CAC/B;AAED,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,EAAE,MAAM,CAAC;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,QAAQ,GAAG,kBAAkB,GAAG,gBAAgB,GAAG,WAAW,CAAC;IACzE,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B;;;;;OAKG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;;;OAIG;IACH,oBAAoB,CAAC,EAAE,OAAO,GAAG,uBAAuB,GAAG,WAAW,GAAG,IAAI,CAAC;IAC9E,iGAAiG;IACjG,sBAAsB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,EAAE,MAAM,GAAG,UAAU,GAAG,UAAU,CAAC;IAC5C,MAAM,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC7B,eAAe,EAAE,UAAU,GAAG,aAAa,GAAG,UAAU,GAAG,UAAU,GAAG,IAAI,CAAC;IAC7E,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,YAAY,GAAG,KAAK,GAAG,cAAc,GAAG,SAAS,CAAC;CAC7D;AAED,MAAM,WAAW,gBAAgB;IAAG,KAAK,EAAE,cAAc,EAAE,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE;AACjF,MAAM,WAAW,gBAAgB;IAAG,KAAK,EAAE,cAAc,EAAE,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE;AAEjF,eAAO,MAAM,qBAAqB,QAAS,CAAC;AA2D5C,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,cAAc,EACpB,KAAK,EAAE,cAAc,EAAE,EACvB,KAAK,EAAE,cAAc,EAAE,EACvB,WAAW,EAAE,MAAM,GAClB,MAAM,CAsER;AAED,eAAO,MAAM,8BAA8B,QAG0C,CAAC"}
1
+ {"version":3,"file":"reality-tree.d.ts","sourceRoot":"","sources":["../../../src/resolvers/shared/reality-tree.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,QAAQ,GAAG,UAAU,CAAC;CAC/B;AAED,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,cAAc,EAAE,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,EAAE,MAAM,CAAC;IACtB,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,QAAQ,GAAG,kBAAkB,GAAG,gBAAgB,GAAG,WAAW,CAAC;IACzE,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B;;;;;OAKG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;;;OAIG;IACH,oBAAoB,CAAC,EAAE,OAAO,GAAG,uBAAuB,GAAG,WAAW,GAAG,IAAI,CAAC;IAC9E,iGAAiG;IACjG,sBAAsB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,EAAE,MAAM,GAAG,UAAU,GAAG,UAAU,CAAC;IAC5C,MAAM,EAAE,QAAQ,GAAG,SAAS,CAAC;IAC7B,eAAe,EAAE,UAAU,GAAG,aAAa,GAAG,UAAU,GAAG,UAAU,GAAG,IAAI,CAAC;IAC7E,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B;;;;;OAKG;IACH,uBAAuB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,YAAY,GAAG,KAAK,GAAG,cAAc,GAAG,SAAS,CAAC;CAC7D;AAED,MAAM,WAAW,gBAAgB;IAAG,KAAK,EAAE,cAAc,EAAE,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE;AACjF,MAAM,WAAW,gBAAgB;IAAG,KAAK,EAAE,cAAc,EAAE,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE;AAEjF,eAAO,MAAM,qBAAqB,QAAS,CAAC;AA2D5C;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,cAAc,EAAE,EACvB,KAAK,EAAE,cAAc,EAAE,GACtB;IAAE,WAAW,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,MAAM,EAAE,CAAA;CAAE,CAiBhD;AAED,MAAM,WAAW,4BAA4B;IAC3C;;;;;;;;OAQG;IACH,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,cAAc,EACpB,KAAK,EAAE,cAAc,EAAE,EACvB,KAAK,EAAE,cAAc,EAAE,EACvB,WAAW,EAAE,MAAM,EACnB,IAAI,GAAE,4BAAiC,GACtC,MAAM,CAyFR;AAED,eAAO,MAAM,8BAA8B,QAG0C,CAAC"}
@@ -50,9 +50,59 @@ function renderEdgeLine(e, nodeBySeq) {
50
50
  const toRef = to ? `#${to.seq}` : '?';
51
51
  return `- ${fromRef} →[${e.edgeType}]→ ${toRef}`;
52
52
  }
53
- export function renderRealityTreeDump(tree, nodes, edges, budgetChars) {
53
+ /**
54
+ * Deterministic presentability check (connectivity gate), daemon-local mirror
55
+ * of the canonical `validateTreeIntegrity` in src/lib/reality-tree/tree-integrity.ts.
56
+ *
57
+ * The daemon cannot import the canonical validator (it lives in the Vite
58
+ * workspace; the Deno `_shared` copy is generated, not importable from Node), so
59
+ * the SAME rule is inlined here: a node is an ORPHAN -- and the tree is NOT
60
+ * presentable -- when it has zero edges of ANY type touching it AND no evidence.
61
+ * A non-empty `evidence` string folds the node into its own basis. Only ACTIVE
62
+ * wiring counts: callers pass already-active nodes, and any edge whose endpoint
63
+ * is not in the active node set is ignored (it cannot rescue a node).
64
+ *
65
+ * Pure and order-independent. Returns the orphan seqs (ascending) so a refusal
66
+ * notice can name them, and `presentable` (no orphans).
67
+ */
68
+ export function computeTreePresentability(nodes, edges) {
69
+ const activeIds = new Set(nodes.map((n) => n.id));
70
+ const touched = new Set();
71
+ for (const e of edges) {
72
+ // Only edges between two active nodes count as a real "touch".
73
+ if (activeIds.has(e.fromNodeId) && activeIds.has(e.toNodeId)) {
74
+ touched.add(e.fromNodeId);
75
+ touched.add(e.toNodeId);
76
+ }
77
+ }
78
+ const orphanSeqs = [];
79
+ for (const n of nodes) {
80
+ const grounded = typeof n.evidence === 'string' && n.evidence.trim().length > 0;
81
+ if (!touched.has(n.id) && !grounded)
82
+ orphanSeqs.push(n.seq);
83
+ }
84
+ orphanSeqs.sort((a, b) => a - b);
85
+ return { presentable: orphanSeqs.length === 0, orphanSeqs };
86
+ }
87
+ export function renderRealityTreeDump(tree, nodes, edges, budgetChars, opts = {}) {
54
88
  if (nodes.length === 0)
55
89
  return '';
90
+ // Mechanical connectivity gate at the downstream-decision seam: a
91
+ // non-presentable tree is REFUSED (withheld), not handed to a consumer with a
92
+ // prose warning it might ignore. This is code-branch enforcement, not advice.
93
+ if (opts.enforcePresentable) {
94
+ const { presentable, orphanSeqs } = computeTreePresentability(nodes, edges);
95
+ if (!presentable) {
96
+ const seqList = orphanSeqs.map((s) => '#' + s).join(', ');
97
+ return (`### Tree: ${tree.name}\n\n` +
98
+ `_NOT PRESENTABLE -- withheld._ This tree carries ${orphanSeqs.length} ` +
99
+ `orphan node(s) (${seqList}): each floats with zero active edges and no ` +
100
+ `evidence. A tree with unwired, unevidenced claims is reality with ` +
101
+ `nothing to measure it against; it is not safe to use as reasoning ` +
102
+ `context until every node is wired into the causal graph or grounded in ` +
103
+ `evidence.`);
104
+ }
105
+ }
56
106
  const nodeById = new Map();
57
107
  for (const n of nodes)
58
108
  nodeById.set(n.id, n);
@@ -1 +1 @@
1
- {"version":3,"file":"reality-tree.js","sourceRoot":"","sources":["../../../src/resolvers/shared/reality-tree.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"reality-tree.js","sourceRoot":"","sources":["../../../src/resolvers/shared/reality-tree.ts"],"names":[],"mappings":"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"}
@@ -67,4 +67,29 @@ export declare function resolveResumeId(args: {
67
67
  * jsonb_set implements in production.
68
68
  */
69
69
  export declare function setLineageSessionId(map: Record<string, string> | null | undefined, lineage: string, sessionId: string): Record<string, string>;
70
+ /**
71
+ * Decide whether a terminating team's (focus, lineage) pass should be CLOSED.
72
+ *
73
+ * A pass groups all spawns of one logical (focus, lineage) session. It must
74
+ * close only when the lineage genuinely ends, so a later re-code opens a FRESH
75
+ * pass while a same-lineage respawn keeps appending segments to the open one.
76
+ * The deciding signal is the queued respawn (the pending spawn directive):
77
+ *
78
+ * - a pending spawn for a DIFFERENT lineage (e.g. coding -> review) ends this
79
+ * lineage -> close.
80
+ * - a pending spawn for the SAME lineage (a continuation handoff) -> keep open;
81
+ * find-or-open reattaches the next segment to this pass.
82
+ * - no pending spawn + a terminal disposition (work done / teardown /
83
+ * deactivated / user stopped) -> close.
84
+ * - no pending spawn + a benign handoff/error (the poll loop or the
85
+ * --resume-failure retry will respawn the same lineage) -> keep open.
86
+ */
87
+ export declare function shouldClosePass(args: {
88
+ /** sessionType/lineage of a queued respawn for this focus, or null if none. */
89
+ pendingNextLineage: string | null;
90
+ /** The terminating team's lineage (teamState.sessionType). */
91
+ currentLineage: string;
92
+ /** True when the exit category marks the lineage/focus as finishing. */
93
+ lineageEnding: boolean;
94
+ }): boolean;
70
95
  //# sourceMappingURL=session-lineage.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"session-lineage.d.ts","sourceRoot":"","sources":["../src/session-lineage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,oDAAoD;AACpD,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEnD,8DAA8D;AAC9D,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,iBAAiB,CAAC;CAC/B;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE;IACvC,QAAQ,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,UAAU,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI,GAAG,SAAS,CAAC;IAChG,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;CACtC,GAAG,WAAW,CAKd;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE;IACpC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC;IACtD,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,iBAAiB,CAAC;CAC/B,GAAG,MAAM,GAAG,IAAI,CAGhB;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,GAAG,SAAS,EAC9C,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,GAChB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAExB"}
1
+ {"version":3,"file":"session-lineage.d.ts","sourceRoot":"","sources":["../src/session-lineage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,oDAAoD;AACpD,MAAM,MAAM,iBAAiB,GAAG,QAAQ,GAAG,OAAO,CAAC;AAEnD,8DAA8D;AAC9D,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,iBAAiB,CAAC;CAC/B;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE;IACvC,QAAQ,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,UAAU,CAAC,EAAE,iBAAiB,GAAG,IAAI,CAAA;KAAE,GAAG,IAAI,GAAG,SAAS,CAAC;IAChG,SAAS,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;CACtC,GAAG,WAAW,CAKd;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE;IACpC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,GAAG,SAAS,CAAC;IACtD,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,iBAAiB,CAAC;CAC/B,GAAG,MAAM,GAAG,IAAI,CAGhB;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,GAAG,SAAS,EAC9C,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,GAChB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAExB;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE;IACpC,+EAA+E;IAC/E,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAClC,8DAA8D;IAC9D,cAAc,EAAE,MAAM,CAAC;IACvB,wEAAwE;IACxE,aAAa,EAAE,OAAO,CAAC;CACxB,GAAG,OAAO,CAKV"}
@@ -61,4 +61,27 @@ export function resolveResumeId(args) {
61
61
  export function setLineageSessionId(map, lineage, sessionId) {
62
62
  return { ...(map ?? {}), [lineage]: sessionId };
63
63
  }
64
+ /**
65
+ * Decide whether a terminating team's (focus, lineage) pass should be CLOSED.
66
+ *
67
+ * A pass groups all spawns of one logical (focus, lineage) session. It must
68
+ * close only when the lineage genuinely ends, so a later re-code opens a FRESH
69
+ * pass while a same-lineage respawn keeps appending segments to the open one.
70
+ * The deciding signal is the queued respawn (the pending spawn directive):
71
+ *
72
+ * - a pending spawn for a DIFFERENT lineage (e.g. coding -> review) ends this
73
+ * lineage -> close.
74
+ * - a pending spawn for the SAME lineage (a continuation handoff) -> keep open;
75
+ * find-or-open reattaches the next segment to this pass.
76
+ * - no pending spawn + a terminal disposition (work done / teardown /
77
+ * deactivated / user stopped) -> close.
78
+ * - no pending spawn + a benign handoff/error (the poll loop or the
79
+ * --resume-failure retry will respawn the same lineage) -> keep open.
80
+ */
81
+ export function shouldClosePass(args) {
82
+ if (args.pendingNextLineage !== null) {
83
+ return args.pendingNextLineage !== args.currentLineage;
84
+ }
85
+ return args.lineageEnding;
86
+ }
64
87
  //# sourceMappingURL=session-lineage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"session-lineage.js","sourceRoot":"","sources":["../src/session-lineage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAWH;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAGlC;IACC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,OAAO;WACjC,CAAC,IAAI,CAAC,SAAS,KAAK,WAAW,IAAI,IAAI,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC3F,MAAM,UAAU,GAAsB,IAAI,CAAC,QAAQ,EAAE,UAAU,IAAI,QAAQ,CAAC;IAC5E,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;AACjC,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,eAAe,CAAC,IAI/B;IACC,IAAI,IAAI,CAAC,UAAU,KAAK,OAAO;QAAE,OAAO,IAAI,CAAC;IAC7C,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC;AACjD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CACjC,GAA8C,EAC9C,OAAe,EACf,SAAiB;IAEjB,OAAO,EAAE,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC;AAClD,CAAC"}
1
+ {"version":3,"file":"session-lineage.js","sourceRoot":"","sources":["../src/session-lineage.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAWH;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAGlC;IACC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,OAAO;WACjC,CAAC,IAAI,CAAC,SAAS,KAAK,WAAW,IAAI,IAAI,CAAC,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC3F,MAAM,UAAU,GAAsB,IAAI,CAAC,QAAQ,EAAE,UAAU,IAAI,QAAQ,CAAC;IAC5E,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC;AACjC,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,eAAe,CAAC,IAI/B;IACC,IAAI,IAAI,CAAC,UAAU,KAAK,OAAO;QAAE,OAAO,IAAI,CAAC;IAC7C,OAAO,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC;AACjD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CACjC,GAA8C,EAC9C,OAAe,EACf,SAAiB;IAEjB,OAAO,EAAE,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,EAAE,SAAS,EAAE,CAAC;AAClD,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,eAAe,CAAC,IAO/B;IACC,IAAI,IAAI,CAAC,kBAAkB,KAAK,IAAI,EAAE,CAAC;QACrC,OAAO,IAAI,CAAC,kBAAkB,KAAK,IAAI,CAAC,cAAc,CAAC;IACzD,CAAC;IACD,OAAO,IAAI,CAAC,aAAa,CAAC;AAC5B,CAAC"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Single stamp site for the `session_started` event (Session identity at the
3
+ * lineage-pass level, D2 write-path).
4
+ *
5
+ * When a spawned team lead emits `session_started`, the daemon must record the
6
+ * engine's Claude session id in two places, keyed by the team's DECLARED lineage:
7
+ *
8
+ * 1. the focus per-lineage resume slot (`product_focuses.claude_session_ids`),
9
+ * so a same-lineage re-spawn can `--resume` it and a sibling lineage cannot
10
+ * clobber it (INJ-A/INJ-B);
11
+ * 2. forward onto THIS lead segment row (`agent_sessions.claude_session_id`),
12
+ * so pass grouping is exact -- the join key historically lived only on the
13
+ * focus slot.
14
+ *
15
+ * This logic previously lived inline in BOTH `output-monitor.ts` and
16
+ * `spawner/helpers.ts`. The two copies drifted in nothing yet, but a single
17
+ * source removes that risk and gives the decision a unit test. The pure decision
18
+ * (`resolveSessionStartedStamp`) is testable without mocks; `stampSessionStarted`
19
+ * is the impure applier both call sites invoke.
20
+ */
21
+ import type { FocusTeamState } from './types.js';
22
+ /** The two writes a `session_started` stamp performs, plus the team-state mutation. */
23
+ export interface SessionStartedStamp {
24
+ /** Always written: the focus per-lineage resume slot. */
25
+ focusSlot: {
26
+ focusId: string;
27
+ lineage: string;
28
+ claudeSessionId: string;
29
+ };
30
+ /**
31
+ * Written only when the team lead has a persisted segment row -- the forward
32
+ * stamp onto agent_sessions.claude_session_id. Null when leadSessionId is unset.
33
+ */
34
+ segment: {
35
+ sessionId: string;
36
+ claudeSessionId: string;
37
+ } | null;
38
+ }
39
+ /**
40
+ * Pure decision: given the team's lineage + lead-session id and the focus id +
41
+ * the engine session id from the event, resolve the two writes to perform.
42
+ *
43
+ * The segment write is suppressed when there is no `leadSessionId` (a lead
44
+ * segment row was never persisted), since there is nothing to stamp.
45
+ */
46
+ export declare function resolveSessionStartedStamp(args: {
47
+ focusId: string;
48
+ lineage: string;
49
+ leadSessionId: string | null;
50
+ eventSessionId: string;
51
+ }): SessionStartedStamp;
52
+ /**
53
+ * Apply a `session_started` stamp: mutate the in-memory team state and fire the
54
+ * two (best-effort, fire-and-forget) DB writes. The single stamp site shared by
55
+ * `output-monitor.ts` and `spawner/helpers.ts`.
56
+ */
57
+ export declare function stampSessionStarted(args: {
58
+ teamState: FocusTeamState;
59
+ focusId: string;
60
+ focusName: string;
61
+ eventSessionId: string;
62
+ }): void;
63
+ //# sourceMappingURL=session-stamp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-stamp.d.ts","sourceRoot":"","sources":["../src/session-stamp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAIjD,uFAAuF;AACvF,MAAM,WAAW,mBAAmB;IAClC,yDAAyD;IACzD,SAAS,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,MAAM,CAAA;KAAE,CAAC;IACzE;;;OAGG;IACH,OAAO,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CAChE;AAED;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,cAAc,EAAE,MAAM,CAAC;CACxB,GAAG,mBAAmB,CAOtB;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE;IACxC,SAAS,EAAE,cAAc,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;CACxB,GAAG,IAAI,CA4BP"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Single stamp site for the `session_started` event (Session identity at the
3
+ * lineage-pass level, D2 write-path).
4
+ *
5
+ * When a spawned team lead emits `session_started`, the daemon must record the
6
+ * engine's Claude session id in two places, keyed by the team's DECLARED lineage:
7
+ *
8
+ * 1. the focus per-lineage resume slot (`product_focuses.claude_session_ids`),
9
+ * so a same-lineage re-spawn can `--resume` it and a sibling lineage cannot
10
+ * clobber it (INJ-A/INJ-B);
11
+ * 2. forward onto THIS lead segment row (`agent_sessions.claude_session_id`),
12
+ * so pass grouping is exact -- the join key historically lived only on the
13
+ * focus slot.
14
+ *
15
+ * This logic previously lived inline in BOTH `output-monitor.ts` and
16
+ * `spawner/helpers.ts`. The two copies drifted in nothing yet, but a single
17
+ * source removes that risk and gives the decision a unit test. The pure decision
18
+ * (`resolveSessionStartedStamp`) is testable without mocks; `stampSessionStarted`
19
+ * is the impure applier both call sites invoke.
20
+ */
21
+ import { updateFocusClaudeSessionId } from './queries/focuses.js';
22
+ import { updateSession } from './queries/sessions.js';
23
+ /**
24
+ * Pure decision: given the team's lineage + lead-session id and the focus id +
25
+ * the engine session id from the event, resolve the two writes to perform.
26
+ *
27
+ * The segment write is suppressed when there is no `leadSessionId` (a lead
28
+ * segment row was never persisted), since there is nothing to stamp.
29
+ */
30
+ export function resolveSessionStartedStamp(args) {
31
+ return {
32
+ focusSlot: { focusId: args.focusId, lineage: args.lineage, claudeSessionId: args.eventSessionId },
33
+ segment: args.leadSessionId
34
+ ? { sessionId: args.leadSessionId, claudeSessionId: args.eventSessionId }
35
+ : null,
36
+ };
37
+ }
38
+ /**
39
+ * Apply a `session_started` stamp: mutate the in-memory team state and fire the
40
+ * two (best-effort, fire-and-forget) DB writes. The single stamp site shared by
41
+ * `output-monitor.ts` and `spawner/helpers.ts`.
42
+ */
43
+ export function stampSessionStarted(args) {
44
+ const { teamState, focusId, focusName, eventSessionId } = args;
45
+ teamState.claudeSessionId = eventSessionId;
46
+ const stamp = resolveSessionStartedStamp({
47
+ focusId,
48
+ lineage: teamState.lineage,
49
+ leadSessionId: teamState.leadSessionId,
50
+ eventSessionId,
51
+ });
52
+ // Persist session ID for --resume support on re-spawn, keyed by the team's
53
+ // declared lineage so a review spawn does not clobber the coding lineage's slot.
54
+ updateFocusClaudeSessionId(stamp.focusSlot.focusId, stamp.focusSlot.lineage, stamp.focusSlot.claudeSessionId).catch((err) => {
55
+ console.warn(`[focus-executor] Failed to persist session ID for "${focusName}":`, err.message);
56
+ });
57
+ // Forward-stamp the Claude session id onto this lead segment so future pass
58
+ // grouping is exact.
59
+ if (stamp.segment) {
60
+ updateSession(stamp.segment.sessionId, { claude_session_id: stamp.segment.claudeSessionId }).catch((err) => {
61
+ console.warn(`[focus-executor] Failed to stamp segment session ID for "${focusName}":`, err.message);
62
+ });
63
+ }
64
+ }
65
+ //# sourceMappingURL=session-stamp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-stamp.js","sourceRoot":"","sources":["../src/session-stamp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAGH,OAAO,EAAE,0BAA0B,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAatD;;;;;;GAMG;AACH,MAAM,UAAU,0BAA0B,CAAC,IAK1C;IACC,OAAO;QACL,SAAS,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,eAAe,EAAE,IAAI,CAAC,cAAc,EAAE;QACjG,OAAO,EAAE,IAAI,CAAC,aAAa;YACzB,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,aAAa,EAAE,eAAe,EAAE,IAAI,CAAC,cAAc,EAAE;YACzE,CAAC,CAAC,IAAI;KACT,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAKnC;IACC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC;IAC/D,SAAS,CAAC,eAAe,GAAG,cAAc,CAAC;IAE3C,MAAM,KAAK,GAAG,0BAA0B,CAAC;QACvC,OAAO;QACP,OAAO,EAAE,SAAS,CAAC,OAAO;QAC1B,aAAa,EAAE,SAAS,CAAC,aAAa;QACtC,cAAc;KACf,CAAC,CAAC;IAEH,2EAA2E;IAC3E,iFAAiF;IACjF,0BAA0B,CACxB,KAAK,CAAC,SAAS,CAAC,OAAO,EACvB,KAAK,CAAC,SAAS,CAAC,OAAO,EACvB,KAAK,CAAC,SAAS,CAAC,eAAe,CAChC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;QACd,OAAO,CAAC,IAAI,CAAC,sDAAsD,SAAS,IAAI,EAAG,GAAa,CAAC,OAAO,CAAC,CAAC;IAC5G,CAAC,CAAC,CAAC;IAEH,4EAA4E;IAC5E,qBAAqB;IACrB,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAClB,aAAa,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,iBAAiB,EAAE,KAAK,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;YACzG,OAAO,CAAC,IAAI,CAAC,4DAA4D,SAAS,IAAI,EAAG,GAAa,CAAC,OAAO,CAAC,CAAC;QAClH,CAAC,CAAC,CAAC;IACL,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/spawner/helpers.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAE5C,OAAO,KAAK,EACV,YAAY,EACZ,cAAc,EACf,MAAM,aAAa,CAAC;AAMrB,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAKzD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAIzD,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC;IACtD,YAAY,EAAE,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC;IACnD,WAAW,EAAE,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC;CACnD;AAED,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,YAAY,CAAC;IACnB,OAAO,EAAE,YAAY,CAAC;IACtB,SAAS,EAAE,cAAc,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,cAAc,CAAC;CACtB;AAED,MAAM,WAAW,0BAA0B;IACzC,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,eAAe,EAAE,eAAe,CAAC;CAClC;AAED,MAAM,WAAW,4BAA4B;IAC3C,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,cAAc,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,YAAY,CAAC;IACrB,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,eAAe,EAAE,eAAe,CAAC;IACjC,IAAI,EAAE,cAAc,CAAC;IACrB,MAAM,EAAE,oBAAoB,CAAC;IAC7B,QAAQ,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAClC,cAAc,EAAE,CAAC,MAAM,EAAE,oBAAoB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACjE;AAID;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,cAAc,CAuBzG;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,0BAA0B,GAAG,0BAA0B,CA0DnG;AAED;;;;;GAKG;AACH,wBAAsB,sBAAsB,CAAC,GAAG,EAAE,4BAA4B,GAAG,OAAO,CAAC,IAAI,CAAC,CA0F7F"}
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/spawner/helpers.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAE5C,OAAO,KAAK,EACV,YAAY,EACZ,cAAc,EACf,MAAM,aAAa,CAAC;AAMrB,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAKzD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACjE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAIzD,MAAM,WAAW,cAAc;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC;IACtD,YAAY,EAAE,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC;IACnD,WAAW,EAAE,UAAU,CAAC,OAAO,iBAAiB,CAAC,CAAC;CACnD;AAED,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,YAAY,CAAC;IACnB,OAAO,EAAE,YAAY,CAAC;IACtB,SAAS,EAAE,cAAc,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,cAAc,CAAC;CACtB;AAED,MAAM,WAAW,0BAA0B;IACzC,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,eAAe,EAAE,eAAe,CAAC;CAClC;AAED,MAAM,WAAW,4BAA4B;IAC3C,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,cAAc,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,YAAY,CAAC;IACrB,kBAAkB,EAAE,kBAAkB,CAAC;IACvC,eAAe,EAAE,eAAe,CAAC;IACjC,IAAI,EAAE,cAAc,CAAC;IACrB,MAAM,EAAE,oBAAoB,CAAC;IAC7B,QAAQ,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAClC,cAAc,EAAE,CAAC,MAAM,EAAE,oBAAoB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACjE;AAID;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,cAAc,CAuBzG;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,0BAA0B,GAAG,0BAA0B,CAuDnG;AAED;;;;;GAKG;AACH,wBAAsB,sBAAsB,CAAC,GAAG,EAAE,4BAA4B,GAAG,OAAO,CAAC,IAAI,CAAC,CA0F7F"}
@@ -13,7 +13,7 @@ import { ActivityTracker } from '../activity-tracker.js';
13
13
  import { getActiveTeams } from '../focus-team-state.js';
14
14
  import { handleTeamCompletion } from '../completion/index.js';
15
15
  import { isSigtermExit } from '../completion/exit-classification.js';
16
- import { updateFocusClaudeSessionId } from '../queries/focuses.js';
16
+ import { stampSessionStarted } from '../session-stamp.js';
17
17
  // ── Functions ───────────────────────────────────────────────────────────
18
18
  /**
19
19
  * Create log file paths and writable streams for a team's output.
@@ -67,13 +67,10 @@ export function attachStreamHandlers(params) {
67
67
  switch (event.kind) {
68
68
  case 'session_started':
69
69
  console.log(` [focus-team] Session initialized (model: ${event.model ?? 'unknown'})`);
70
- teamState.claudeSessionId = event.sessionId;
71
- // Persist session ID for --resume support on re-spawn, keyed by the
72
- // team's declared lineage so a review spawn does not clobber the coding
73
- // lineage's slot (INJ-A/INJ-B).
74
- updateFocusClaudeSessionId(focusId, teamState.lineage, event.sessionId).catch((err) => {
75
- console.warn(`[focus-executor] Failed to persist session ID for "${focusName}":`, err.message);
76
- });
70
+ // Single stamp site (session-stamp.ts): writes the focus per-lineage
71
+ // resume slot AND forward-stamps the Claude session id onto this lead
72
+ // segment so pass grouping is exact (INJ-A/INJ-B).
73
+ stampSessionStarted({ teamState, focusId, focusName, eventSessionId: event.sessionId });
77
74
  break;
78
75
  case 'subagent_activity':
79
76
  if (event.phase === 'spawned') {
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/spawner/helpers.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAKjC,OAAO,EACL,aAAa,GACd,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AACrE,OAAO,EAAE,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AAiDnE,2EAA2E;AAE3E;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAc,EAAE,UAAkB,EAAE,SAAiB;IACvF,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACjE,MAAM,SAAS,GAAG,SAAS,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,IAAI,SAAS,EAAE,CAAC;IACzE,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,SAAS,aAAa,CAAC,CAAC;IAC3D,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,SAAS,aAAa,CAAC,CAAC;IAC3D,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,SAAS,eAAe,CAAC,CAAC;IAE5D,MAAM,eAAe,GAAG,iBAAiB,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACvE,MAAM,YAAY,GAAG,iBAAiB,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IACpE,MAAM,WAAW,GAAG,iBAAiB,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAElE,qFAAqF;IACrF,eAAe,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;QAClC,OAAO,CAAC,IAAI,CAAC,iDAAiD,SAAS,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IAC9F,CAAC,CAAC,CAAC;IACH,YAAY,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;QAC/B,OAAO,CAAC,IAAI,CAAC,iDAAiD,SAAS,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IAC9F,CAAC,CAAC,CAAC;IACH,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;QAC9B,OAAO,CAAC,IAAI,CAAC,gDAAgD,SAAS,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;IAC7F,CAAC,CAAC,CAAC;IAEH,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,eAAe,EAAE,YAAY,EAAE,WAAW,EAAE,CAAC;AAC3F,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAkC;IACrE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC;IAEjF,MAAM,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IACtC,MAAM,kBAAkB,GAAG,IAAI,kBAAkB,EAAE,CAAC;IAEpD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,MAAO,CAAC,CAAC;IAC5B,kBAAkB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAClC,SAAS,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;IAElD,sDAAsD;IACtD,MAAM,eAAe,GAAG,IAAI,eAAe,CAAC,SAAS,CAAC,CAAC;IACvD,eAAe,CAAC,WAAW,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;IACnE,eAAe,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAE/B,+EAA+E;IAC/E,0BAA0B;IAC1B,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE;QAChC,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC;QACnD,IAAI,OAAO,EAAE,CAAC;YACZ,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,wEAAwE;IACxE,MAAM,CAAC,EAAE,CAAC,aAAa,EAAE,CAAC,KAAiB,EAAE,EAAE;QAC7C,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;YACnB,KAAK,iBAAiB;gBACpB,OAAO,CAAC,GAAG,CAAC,8CAA8C,KAAK,CAAC,KAAK,IAAI,SAAS,GAAG,CAAC,CAAC;gBACvF,SAAS,CAAC,eAAe,GAAG,KAAK,CAAC,SAAS,CAAC;gBAC5C,oEAAoE;gBACpE,wEAAwE;gBACxE,gCAAgC;gBAChC,0BAA0B,CAAC,OAAO,EAAE,SAAS,CAAC,OAAO,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;oBACpF,OAAO,CAAC,IAAI,CAAC,sDAAsD,SAAS,IAAI,EAAG,GAAa,CAAC,OAAO,CAAC,CAAC;gBAC5G,CAAC,CAAC,CAAC;gBACH,MAAM;YACR,KAAK,mBAAmB;gBACtB,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;oBAC9B,OAAO,CAAC,GAAG,CAAC,kCAAkC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;gBACnE,CAAC;qBAAM,IAAI,KAAK,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;oBACvC,OAAO,CAAC,GAAG,CAAC,yBAAyB,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,KAAK,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;gBACrG,CAAC;gBACD,MAAM;YACR,KAAK,QAAQ,CAAC,CAAC,CAAC;gBACd,MAAM,IAAI,GAAG,KAAK,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC;gBACnD,OAAO,CAAC,GAAG,CAAC,0BAA0B,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,KAAK,KAAK,CAAC,QAAQ,YAAY,IAAI,EAAE,CAAC,CAAC;gBAChH,MAAM;YACR,CAAC;YACD;gBACE,MAAM;QACV,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,sBAAsB;IACtB,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAErC,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,CAAC;AACjD,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAAC,GAAiC;IAC5E,MAAM,EACJ,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EACrD,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,kBAAkB,EAAE,eAAe,EACtE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,cAAc,EAAE,OAAO,GAC7D,GAAG,GAAG,CAAC;IACR,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IAErC,OAAO,CAAC,GAAG,CAAC,mCAAmC,SAAS,mBAAmB,IAAI,aAAa,MAAM,GAAG,CAAC,CAAC;IAEvG,wEAAwE;IACxE,oDAAoD;IACpD,EAAE;IACF,+EAA+E;IAC/E,8EAA8E;IAC9E,8EAA8E;IAC9E,yEAAyE;IACzE,gFAAgF;IAChF,yEAAyE;IACzE,8EAA8E;IAC9E,2DAA2D;IAC3D,EAAE;IACF,2EAA2E;IAC3E,4EAA4E;IAC5E,2EAA2E;IAC3E,yEAAyE;IACzE,4EAA4E;IAC5E,4EAA4E;IAC5E,6EAA6E;IAC7E,+EAA+E;IAC/E,6EAA6E;IAC7E,4EAA4E;IAC5E,0DAA0D;IAC1D,MAAM,2BAA2B,GAAG,MAAM,CAAC;IAC3C,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;IACzC,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC/C,IAAI,QAAQ,IAAI,CAAC,UAAU,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,IAAI,IAAI,SAAS,GAAG,2BAA2B,EAAE,CAAC;QACtG,OAAO,CAAC,IAAI,CAAC,uCAAuC,SAAS,gBAAgB,SAAS,8BAA8B,CAAC,CAAC;QAEtH,mDAAmD;QACnD,QAAQ,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;QAC/B,kBAAkB,CAAC,OAAO,EAAE,CAAC;QAC7B,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,CAAC;QAC3B,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC;QACxB,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC;QAEvB,kCAAkC;QAClC,IAAI,CAAC;YACH,MAAM,aAAa,CAAC,SAAS,EAAE;gBAC7B,MAAM,EAAE,QAAQ;gBAChB,WAAW,EAAE,uBAAuB,IAAI,4BAA4B;gBACpE,aAAa,EAAE,UAAU;gBACzB,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;aACnC,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,SAAS,EAAE,CAAC;YACnB,OAAO,CAAC,IAAI,CAAC,iEAAiE,EAAG,SAAmB,CAAC,OAAO,CAAC,CAAC;QAChH,CAAC;QACD,SAAS,CAAC,KAAK,GAAG,YAAY,CAAC;QAC/B,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAE5B,wEAAwE;QACxE,yDAAyD;QACzD,MAAM,OAAO,CAAC,EAAE,GAAG,WAAW,EAAE,mBAAmB,EAAE,IAAI,EAAE,gBAAgB,EAAE,IAAI,EAAE,CAAC,CAAC;QACrF,OAAO;IACT,CAAC;IAED,oDAAoD;IACpD,QAAQ,EAAE,WAAW,CAAC,OAAO,CAAC,CAAC;IAE/B,+DAA+D;IAC/D,2EAA2E;IAC3E,SAAS,CAAC,SAAS,GAAG,IAAI,CAAC;IAE3B,sCAAsC;IACtC,IAAI,CAAC;QAAC,MAAM,eAAe,CAAC,UAAU,EAAE,CAAC;IAAC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QAAC,OAAO,CAAC,IAAI,CAAC,qDAAqD,EAAG,GAAa,CAAC,OAAO,CAAC,CAAC;IAAC,CAAC;IAExJ,mBAAmB;IACnB,kBAAkB,CAAC,OAAO,EAAE,CAAC;IAC7B,IAAI,CAAC,eAAe,CAAC,GAAG,EAAE,CAAC;IAC3B,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,CAAC;IACxB,IAAI,CAAC,WAAW,CAAC,GAAG,EAAE,CAAC;IACvB,cAAc,EAAE,CAAC;IAEjB,MAAM,oBAAoB,CAAC;QACzB,MAAM,EAAE,GAAG;QACX,SAAS;QACT,SAAS;QACT,IAAI;QACJ,MAAM;KACP,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/spawner/helpers.ts"],"names":[],"mappings":"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"}