@telora/daemon 0.17.82 → 0.17.86

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 (70) hide show
  1. package/build-info.json +8 -3
  2. package/dist/audit-hooks.d.ts +24 -0
  3. package/dist/audit-hooks.d.ts.map +1 -1
  4. package/dist/audit-hooks.js +52 -1
  5. package/dist/audit-hooks.js.map +1 -1
  6. package/dist/audit-phase.d.ts +30 -6
  7. package/dist/audit-phase.d.ts.map +1 -1
  8. package/dist/audit-phase.js +46 -18
  9. package/dist/audit-phase.js.map +1 -1
  10. package/dist/cli/codex-provision.d.ts +28 -0
  11. package/dist/cli/codex-provision.d.ts.map +1 -1
  12. package/dist/cli/codex-provision.js +35 -1
  13. package/dist/cli/codex-provision.js.map +1 -1
  14. package/dist/completion/read-only-pristine.d.ts +63 -0
  15. package/dist/completion/read-only-pristine.d.ts.map +1 -0
  16. package/dist/completion/read-only-pristine.js +87 -0
  17. package/dist/completion/read-only-pristine.js.map +1 -0
  18. package/dist/completion/team-completion.d.ts.map +1 -1
  19. package/dist/completion/team-completion.js +20 -1
  20. package/dist/completion/team-completion.js.map +1 -1
  21. package/dist/condition-evaluators.d.ts.map +1 -1
  22. package/dist/condition-evaluators.js +36 -0
  23. package/dist/condition-evaluators.js.map +1 -1
  24. package/dist/focus-executor.d.ts +47 -1
  25. package/dist/focus-executor.d.ts.map +1 -1
  26. package/dist/focus-executor.js +95 -8
  27. package/dist/focus-executor.js.map +1 -1
  28. package/dist/focus-lifecycle.js +7 -7
  29. package/dist/focus-lifecycle.js.map +1 -1
  30. package/dist/focus-merge.d.ts +40 -0
  31. package/dist/focus-merge.d.ts.map +1 -1
  32. package/dist/focus-merge.js +84 -0
  33. package/dist/focus-merge.js.map +1 -1
  34. package/dist/focus-provisioning.js +7 -7
  35. package/dist/focus-provisioning.js.map +1 -1
  36. package/dist/focus-stage-lifecycle.d.ts +64 -1
  37. package/dist/focus-stage-lifecycle.d.ts.map +1 -1
  38. package/dist/focus-stage-lifecycle.js +140 -2
  39. package/dist/focus-stage-lifecycle.js.map +1 -1
  40. package/dist/listener.d.ts.map +1 -1
  41. package/dist/listener.js +2 -1
  42. package/dist/listener.js.map +1 -1
  43. package/dist/prompt-sections/role-sections.d.ts +8 -0
  44. package/dist/prompt-sections/role-sections.d.ts.map +1 -1
  45. package/dist/prompt-sections/role-sections.js +46 -11
  46. package/dist/prompt-sections/role-sections.js.map +1 -1
  47. package/dist/queries/deliveries.d.ts +17 -0
  48. package/dist/queries/deliveries.d.ts.map +1 -1
  49. package/dist/queries/deliveries.js +3 -0
  50. package/dist/queries/deliveries.js.map +1 -1
  51. package/dist/queries/focuses.d.ts +9 -0
  52. package/dist/queries/focuses.d.ts.map +1 -1
  53. package/dist/queries/focuses.js +14 -0
  54. package/dist/queries/focuses.js.map +1 -1
  55. package/dist/queries/local-models.d.ts +26 -0
  56. package/dist/queries/local-models.d.ts.map +1 -0
  57. package/dist/queries/local-models.js +31 -0
  58. package/dist/queries/local-models.js.map +1 -0
  59. package/dist/queries/schemas.d.ts +28 -0
  60. package/dist/queries/schemas.d.ts.map +1 -1
  61. package/dist/queries/schemas.js +31 -0
  62. package/dist/queries/schemas.js.map +1 -1
  63. package/dist/spawner/lifecycle.d.ts.map +1 -1
  64. package/dist/spawner/lifecycle.js +9 -6
  65. package/dist/spawner/lifecycle.js.map +1 -1
  66. package/dist/templates/claude-settings.d.ts +36 -1
  67. package/dist/templates/claude-settings.d.ts.map +1 -1
  68. package/dist/templates/claude-settings.js +63 -12
  69. package/dist/templates/claude-settings.js.map +1 -1
  70. package/package.json +2 -2
package/build-info.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
- "commitSha": "512919ac",
3
- "builtAt": "2026-06-15T16:15:31.546Z",
2
+ "commitSha": "2807cfea",
3
+ "builtAt": "2026-06-16T02:36:21.911Z",
4
4
  "expectedMigrations": [
5
5
  "20250829113330_create_org_nodes_table.sql",
6
6
  "20250829113402_fix_function_security_search_path.sql",
@@ -634,6 +634,11 @@
634
634
  "20260614231203_product_requests_reopen_audit.sql",
635
635
  "20260615103408_add_frt_statement_drafted.sql",
636
636
  "20260615105344_add_verify_classification.sql",
637
- "20260615132122_add_work_facing_to_org_nodes.sql"
637
+ "20260615132122_add_work_facing_to_org_nodes.sql",
638
+ "20260615222011_audit_playbooks_tree_authoring_discipline.sql",
639
+ "20260615225446_add_focus_ratification_signal.sql",
640
+ "20260615235758_local_models_registry.sql",
641
+ "20260616000657_focus_local_model_overrides.sql",
642
+ "20260616005744_harden_local_model_rpc_auth.sql"
638
643
  ]
639
644
  }
@@ -9,4 +9,28 @@
9
9
  * Used for read-only audit sessions.
10
10
  */
11
11
  export declare function installAuditPreCommitHook(worktreePath: string): void;
12
+ /**
13
+ * Write (or merge into) the worktree's `.claude/settings.json` a write-deny
14
+ * overlay so a read-only audit team physically cannot Write/Edit or run
15
+ * write-shaped Bash.
16
+ *
17
+ * The daemon spawns agents with `--dangerously-skip-permissions
18
+ * --setting-sources project,local`, which (a) reads the worktree's
19
+ * `.claude/settings.json` (project source) and (b) still HARD-ENFORCES explicit
20
+ * `permissions.deny` entries (the bypass only auto-approves the *ask* tier).
21
+ * So a deny overlay here is the tool-layer enforcement of read-only mode --
22
+ * the pre-commit hook (installAuditPreCommitHook) is retained as
23
+ * defense-in-depth on top of it.
24
+ *
25
+ * Idempotent: re-running merges the deny list, deduplicated, producing no diff.
26
+ * MUST only be called for read-only focuses -- a writable focus's settings
27
+ * must never carry a `deny` key.
28
+ */
29
+ export declare function writeReadOnlyDenyOverlay(worktreePath: string): void;
30
+ /**
31
+ * Install all read-only audit enforcement in a worktree: the commit-blocking
32
+ * pre-commit hook AND the write-deny settings overlay. Single entry point so
33
+ * every read-only worktree-setup site gets identical coverage.
34
+ */
35
+ export declare function installReadOnlyAuditGuards(worktreePath: string): void;
12
36
  //# sourceMappingURL=audit-hooks.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"audit-hooks.d.ts","sourceRoot":"","sources":["../src/audit-hooks.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAiCpE"}
1
+ {"version":3,"file":"audit-hooks.d.ts","sourceRoot":"","sources":["../src/audit-hooks.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAOH;;;GAGG;AACH,wBAAgB,yBAAyB,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAiCpE;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,wBAAwB,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CA0BnE;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CAAC,YAAY,EAAE,MAAM,GAAG,IAAI,CAGrE"}
@@ -4,9 +4,10 @@
4
4
  * Installs a git pre-commit hook in a worktree that blocks all commits,
5
5
  * providing an informative message about the read-only audit mode.
6
6
  */
7
- import { existsSync, mkdirSync, writeFileSync } from 'node:fs';
7
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
8
8
  import { join } from 'node:path';
9
9
  import { runGitSync } from './git-types.js';
10
+ import { buildClaudeSettings, mergeClaudeSettings } from './templates/claude-settings.js';
10
11
  /**
11
12
  * Install a pre-commit hook in a worktree that blocks all commits.
12
13
  * Used for read-only audit sessions.
@@ -42,4 +43,54 @@ export function installAuditPreCommitHook(worktreePath) {
42
43
  // Point this worktree's git config at the custom hooks directory
43
44
  runGitSync(['config', 'core.hooksPath', hooksDir], worktreePath);
44
45
  }
46
+ /**
47
+ * Write (or merge into) the worktree's `.claude/settings.json` a write-deny
48
+ * overlay so a read-only audit team physically cannot Write/Edit or run
49
+ * write-shaped Bash.
50
+ *
51
+ * The daemon spawns agents with `--dangerously-skip-permissions
52
+ * --setting-sources project,local`, which (a) reads the worktree's
53
+ * `.claude/settings.json` (project source) and (b) still HARD-ENFORCES explicit
54
+ * `permissions.deny` entries (the bypass only auto-approves the *ask* tier).
55
+ * So a deny overlay here is the tool-layer enforcement of read-only mode --
56
+ * the pre-commit hook (installAuditPreCommitHook) is retained as
57
+ * defense-in-depth on top of it.
58
+ *
59
+ * Idempotent: re-running merges the deny list, deduplicated, producing no diff.
60
+ * MUST only be called for read-only focuses -- a writable focus's settings
61
+ * must never carry a `deny` key.
62
+ */
63
+ export function writeReadOnlyDenyOverlay(worktreePath) {
64
+ const dir = join(worktreePath, '.claude');
65
+ if (!existsSync(dir)) {
66
+ mkdirSync(dir, { recursive: true });
67
+ }
68
+ const settingsPath = join(dir, 'settings.json');
69
+ let existing = null;
70
+ if (existsSync(settingsPath)) {
71
+ try {
72
+ const parsed = JSON.parse(readFileSync(settingsPath, 'utf-8'));
73
+ if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) {
74
+ existing = parsed;
75
+ }
76
+ }
77
+ catch (err) {
78
+ // Corrupt settings file -- log and overwrite with the deny overlay rather
79
+ // than leave a read-only worktree without enforcement.
80
+ console.warn(`[audit-hooks] Existing ${settingsPath} is not valid JSON, overwriting with read-only overlay: ` +
81
+ `${err instanceof Error ? err.message : String(err)}`);
82
+ }
83
+ }
84
+ const merged = mergeClaudeSettings(existing, buildClaudeSettings({ readOnly: true }));
85
+ writeFileSync(settingsPath, JSON.stringify(merged, null, 2) + '\n');
86
+ }
87
+ /**
88
+ * Install all read-only audit enforcement in a worktree: the commit-blocking
89
+ * pre-commit hook AND the write-deny settings overlay. Single entry point so
90
+ * every read-only worktree-setup site gets identical coverage.
91
+ */
92
+ export function installReadOnlyAuditGuards(worktreePath) {
93
+ installAuditPreCommitHook(worktreePath);
94
+ writeReadOnlyDenyOverlay(worktreePath);
95
+ }
45
96
  //# sourceMappingURL=audit-hooks.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"audit-hooks.js","sourceRoot":"","sources":["../src/audit-hooks.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAC/D,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5C;;;GAGG;AACH,MAAM,UAAU,yBAAyB,CAAC,YAAoB;IAC5D,sDAAsD;IACtD,MAAM,QAAQ,GAAG,IAAI,CAAC,YAAY,EAAE,eAAe,CAAC,CAAC;IACrD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3C,CAAC;IAED,MAAM,UAAU,GAAG;QACjB,aAAa;QACb,SAAS;QACT,iEAAiE;QACjE,kCAAkC;QAClC,iEAAiE;QACjE,SAAS;QACT,wDAAwD;QACxD,0CAA0C;QAC1C,SAAS;QACT,sCAAsC;QACtC,iDAAiD;QACjD,oDAAoD;QACpD,iDAAiD;QACjD,SAAS;QACT,iEAAiE;QACjE,SAAS;QACT,QAAQ;QACR,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;IAC9C,aAAa,CAAC,QAAQ,EAAE,UAAU,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAErD,iEAAiE;IACjE,UAAU,CAAC,CAAC,QAAQ,EAAE,gBAAgB,EAAE,QAAQ,CAAC,EAAE,YAAY,CAAC,CAAC;AACnE,CAAC"}
1
+ {"version":3,"file":"audit-hooks.js","sourceRoot":"","sources":["../src/audit-hooks.ts"],"names":[],"mappings":"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"}
@@ -22,10 +22,25 @@ import type { DaemonConfig } from './types.js';
22
22
  * code-level diff, then the live graph it must reconcile.
23
23
  */
24
24
  export declare const AUDIT_ASSEMBLY_RECIPE: readonly string[];
25
- /** MCP tool names the assessor session is permitted to call. */
25
+ /**
26
+ * MCP tool names the assessor session is permitted to call.
27
+ *
28
+ * The audit is READ-ONLY w.r.t. code but AUTHORS intent structure: a CRT
29
+ * (entities + UDEs) plus an FRT of injections, self-validated via
30
+ * telora_reality_tree action=derive_frt (read-only, carried on the
31
+ * telora_reality_tree tool), then anchored to planning deliveries via
32
+ * telora_product_delivery create (injectionNodeId + executionStatus). It must
33
+ * NOT touch workflow state otherwise, and must NOT file remediation issues.
34
+ */
26
35
  export declare const AUDIT_MCP_TOOLS: readonly string[];
27
- /** Default Claude model for the audit assessor. Override via deps. */
28
- export declare const AUDIT_DEFAULT_MODEL = "sonnet";
36
+ /**
37
+ * Default Claude model for the audit assessor. Override via deps.
38
+ * Opus: the audit authors a navigable causal tree + injection plan a human
39
+ * reviews before any fix runs -- the reasoning depth (root-cause attribution,
40
+ * FRT self-validation) warrants the stronger model. Matched as a substring by
41
+ * the telemetry pricing table (see spawner/lifecycle AUDIT_CAPTURE_MODEL).
42
+ */
43
+ export declare const AUDIT_DEFAULT_MODEL = "opus";
29
44
  /** Default timeout for the assessor session (15 minutes). */
30
45
  export declare const AUDIT_DEFAULT_TIMEOUT_MS: number;
31
46
  /**
@@ -35,9 +50,18 @@ export declare const AUDIT_DEFAULT_TIMEOUT_MS: number;
35
50
  */
36
51
  export declare const AUDIT_LINEAGE = "audit";
37
52
  /**
38
- * Audit prompt. The assessor is told its role, given the assembled context
39
- * via stdin/CLI, and instructed to emit a fenced audit-summary tail block
40
- * the daemon can parse.
53
+ * Audit prompt: the tree-authoring discipline for the read-only audit
54
+ * assessor. The assessor authors a CRT + an FRT of injections and anchors a
55
+ * navigable plan a human reviews BEFORE any fix runs -- it never emits a flat
56
+ * remediation task checklist.
57
+ *
58
+ * CANONICAL SOURCE OF TRUTH for this guidance is the MCP-package constant
59
+ * AUDIT_TREE_AUTHORING_GUIDE in
60
+ * mcp/telora-products/src/handlers/auditTreeAuthoringGuide.ts (surfaced inline
61
+ * by telora_discover when the reality-tree domain loads). The daemon cannot
62
+ * runtime-import the MCP package (no cross-package runtime import), so the
63
+ * prose is duplicated here; keep the two in sync. The audit-summary tail block
64
+ * is daemon-specific (parsed by parseAuditSummary) and lives only here.
41
65
  */
42
66
  export declare const AUDIT_PROMPT: string;
43
67
  export interface AuditPhaseResult {
@@ -1 +1 @@
1
- {"version":3,"file":"audit-phase.d.ts","sourceRoot":"","sources":["../src/audit-phase.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"audit-phase.d.ts","sourceRoot":"","sources":["../src/audit-phase.ts"],"names":[],"mappings":"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"}
@@ -37,15 +37,31 @@ export const AUDIT_ASSEMBLY_RECIPE = [
37
37
  'agent_escalations',
38
38
  'reality_tree.snapshot',
39
39
  ];
40
- /** MCP tool names the assessor session is permitted to call. */
40
+ /**
41
+ * MCP tool names the assessor session is permitted to call.
42
+ *
43
+ * The audit is READ-ONLY w.r.t. code but AUTHORS intent structure: a CRT
44
+ * (entities + UDEs) plus an FRT of injections, self-validated via
45
+ * telora_reality_tree action=derive_frt (read-only, carried on the
46
+ * telora_reality_tree tool), then anchored to planning deliveries via
47
+ * telora_product_delivery create (injectionNodeId + executionStatus). It must
48
+ * NOT touch workflow state otherwise, and must NOT file remediation issues.
49
+ */
41
50
  export const AUDIT_MCP_TOOLS = [
42
51
  'mcp__telora-products__telora_reality_tree',
43
52
  'mcp__telora-products__telora_reality_tree_node',
44
53
  'mcp__telora-products__telora_reality_tree_edge',
45
54
  'mcp__telora-products__telora_reality_tree_link',
55
+ 'mcp__telora-products__telora_product_delivery',
46
56
  ];
47
- /** Default Claude model for the audit assessor. Override via deps. */
48
- export const AUDIT_DEFAULT_MODEL = 'sonnet';
57
+ /**
58
+ * Default Claude model for the audit assessor. Override via deps.
59
+ * Opus: the audit authors a navigable causal tree + injection plan a human
60
+ * reviews before any fix runs -- the reasoning depth (root-cause attribution,
61
+ * FRT self-validation) warrants the stronger model. Matched as a substring by
62
+ * the telemetry pricing table (see spawner/lifecycle AUDIT_CAPTURE_MODEL).
63
+ */
64
+ export const AUDIT_DEFAULT_MODEL = 'opus';
49
65
  /** Default timeout for the assessor session (15 minutes). */
50
66
  export const AUDIT_DEFAULT_TIMEOUT_MS = 15 * 60 * 1000;
51
67
  /**
@@ -55,25 +71,37 @@ export const AUDIT_DEFAULT_TIMEOUT_MS = 15 * 60 * 1000;
55
71
  */
56
72
  export const AUDIT_LINEAGE = 'audit';
57
73
  /**
58
- * Audit prompt. The assessor is told its role, given the assembled context
59
- * via stdin/CLI, and instructed to emit a fenced audit-summary tail block
60
- * the daemon can parse.
74
+ * Audit prompt: the tree-authoring discipline for the read-only audit
75
+ * assessor. The assessor authors a CRT + an FRT of injections and anchors a
76
+ * navigable plan a human reviews BEFORE any fix runs -- it never emits a flat
77
+ * remediation task checklist.
78
+ *
79
+ * CANONICAL SOURCE OF TRUTH for this guidance is the MCP-package constant
80
+ * AUDIT_TREE_AUTHORING_GUIDE in
81
+ * mcp/telora-products/src/handlers/auditTreeAuthoringGuide.ts (surfaced inline
82
+ * by telora_discover when the reality-tree domain loads). The daemon cannot
83
+ * runtime-import the MCP package (no cross-package runtime import), so the
84
+ * prose is duplicated here; keep the two in sync. The audit-summary tail block
85
+ * is daemon-specific (parsed by parseAuditSummary) and lives only here.
61
86
  */
62
87
  export const AUDIT_PROMPT = [
63
- 'You are the autonomous reality-tree audit assessor for a Telora focus.',
88
+ 'You are the read-only reality-tree audit assessor for a Telora focus.',
89
+ '',
90
+ 'A safe audit emits a TREE and a PLAN, never a task checklist. You are READ-ONLY with respect to code: discovery only. You author the intent structure -- the current reality, its root causes, and the leverage points -- and you anchor a plan a human reviews BEFORE any fix runs. You do NOT fix anything, and you do NOT file remediation Task or Bug issues. Remediation is scoped LATER, one root cause at a time, from the injections you anchor here -- so there is no flat checklist to complete with completion-vigor and churn stays bounded to the real defects.',
91
+ '',
92
+ 'Work in rounds:',
93
+ '',
94
+ '1. Facts -> CRT. Author the current reality. Create the focus reality tree if none exists (telora_reality_tree action=create), then add an entity node per real component/observation and an undesired_effect (UDE) node per observed problem (telora_reality_tree_node action=create). State what IS, in evidence terms -- not a fix.',
95
+ '',
96
+ '2. Relationships -> causal edges. Wire cause -> effect with telora_reality_tree_edge action=create (cause node -> effect node). This is the load-bearing round: edges turn a list of symptoms into a causal structure, so a single deep cause feeding many surface UDEs across different audit areas becomes visible as ONE root in ONE tree -- which stops "one delivery per area" sprawl.',
64
97
  '',
65
- 'Your job is to compare observable reality against the focus\'s reality tree (CRT) and apply mutations directly via the reality_tree_* MCP tools so the graph reflects what actually happened during the just-completed audit cycle.',
98
+ '3. Leverage -> injections. Propose injection nodes at the LOWEST / root causes (the nodes with the most downstream UDEs), not at the symptoms. One injection at a root can clear a whole subtree of UDEs.',
66
99
  '',
67
- 'You have read access to the worktree and full mutation surface on the focus\'s reality tree. You do NOT propose changes for human ratification -- you make the changes. Be conservative: only mutate when the evidence in the diff, narrations, or escalations is unambiguous.',
100
+ '4. Self-validate -> derive_frt. Call telora_reality_tree action=derive_frt with the treeId. This is read-only: it returns the cleared/flipped UDE sets the injections produce. Confirm each injection flips the UDEs you targeted. If a UDE is left unresolved by your injection set, REPORT it in the summary -- do not hide it and do not lower the bar to make the tree look clean.',
68
101
  '',
69
- 'Common mutations:',
70
- '- Add or refresh evidence on an entity node when the diff shows a related change.',
71
- '- Retire an injection node (set status=verified, run reality_tree_node verify) when the FRT overlay is observably true.',
72
- '- Add a new entity node for an observation the tree does not yet capture.',
73
- '- Flip a UDE to a desired_effect via the verify mutation when the targeted injection has retired and reality has shifted.',
74
- '- Adjust an edge when a dependency appears or dissolves.',
102
+ '5. Anchor the plan -> injection-anchored deliveries. For each injection, create a remediation delivery with telora_product_delivery action=create, passing injectionNodeId=<the injection node> and executionStatus="planning". Set its acceptance to the FRT desired effect -- the future-state the injection produces (what becomes true once the root cause is cleared), NOT a list of edits. This is the navigable plan the human reviews before anything executes.',
75
103
  '',
76
- 'Do NOT mutate nodes you have no evidence for. Do NOT mutate workflow state -- only the reality tree.',
104
+ 'Explicitly: your output is the tree + the anchored planning deliveries ONLY. Do NOT create remediation Task or Bug issues during the audit. Do NOT create one delivery per audit area -- unify the audit into ONE focus tree and let each injection (each root cause) anchor exactly one planning delivery. Do NOT mutate workflow state beyond creating those planning deliveries, and do NOT attempt fixes.',
77
105
  '',
78
106
  'When you are done, emit ONE fenced markdown block as the very last thing in your output, exactly in this shape (do not skip any field):',
79
107
  '',
@@ -81,10 +109,10 @@ export const AUDIT_PROMPT = [
81
109
  'nodes_touched: <integer>',
82
110
  'edges_touched: <integer>',
83
111
  'summary: |',
84
- ' <markdown narrative -- one bullet per significant mutation, with seq numbers>',
112
+ ' <markdown narrative -- one bullet per UDE/injection/anchored delivery, with seq numbers; call out any UDE left unresolved by derive_frt>',
85
113
  '```',
86
114
  '',
87
- 'If you make no changes, still emit the block with nodes_touched: 0 / edges_touched: 0 and a one-line summary explaining why no mutations were warranted.',
115
+ 'If you author nothing (the tree already reflects reality and needs no new injections), still emit the block with nodes_touched: 0 / edges_touched: 0 and a one-line summary explaining why.',
88
116
  ].join('\n');
89
117
  // ---------------------------------------------------------------------------
90
118
  // Summary parser
@@ -1 +1 @@
1
- {"version":3,"file":"audit-phase.js","sourceRoot":"","sources":["../src/audit-phase.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"audit-phase.js","sourceRoot":"","sources":["../src/audit-phase.ts"],"names":[],"mappings":"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"}
@@ -39,6 +39,14 @@ export interface CodexLocalCoords {
39
39
  * 0.133 dropped chat-completions, so we always emit "responses".
40
40
  */
41
41
  wireApi?: string;
42
+ /**
43
+ * NAME of the env var holding this server's API key. The VALUE is never
44
+ * written -- only this name lands in config.toml's env_key, so Codex resolves
45
+ * the secret from the environment. Defaults to TELORA_LOCAL_API_KEY_ENV when
46
+ * absent (single-server back-compat). A registry with many servers each set
47
+ * their own name so different servers resolve different keys.
48
+ */
49
+ apiKeyEnv?: string;
42
50
  }
43
51
  export interface CodexProvisionIO {
44
52
  out?: (msg: string) => void;
@@ -65,6 +73,26 @@ export declare function resolveProductCodexHome(productId: string): string;
65
73
  * Throws if baseUrl or model contains a double-quote, backslash, or newline.
66
74
  */
67
75
  export declare function renderCodexConfigToml(coords: CodexLocalCoords): string;
76
+ /**
77
+ * The env var NAME to write into config.toml's env_key. A registry model's
78
+ * api_key_env (when set) wins so each server resolves its own key; absent =>
79
+ * the single-server default (TELORA_LOCAL_API_KEY). Empty/blank => default.
80
+ */
81
+ export declare function resolveApiKeyEnv(apiKeyEnv?: string | null): string;
82
+ /**
83
+ * Resolve the ISOLATED per-model CODEX_HOME directory under the daemon's global
84
+ * state dir: `<stateDir>/codex/models/<localModelId>`. CWD-independent; honors
85
+ * $TELORA_STATE_DIR via resolveGlobalStateDir(). Keyed by the local_models row
86
+ * id so two passes selecting the same model share one home and different models
87
+ * get distinct homes. Does NOT create the directory.
88
+ */
89
+ export declare function resolveLocalModelCodexHome(localModelId: string): string;
90
+ /**
91
+ * Write the rendered config.toml into a per-model CODEX_HOME (keyed by the
92
+ * local_models row id). Same security invariants as writeProductCodexHome:
93
+ * 0700 dir, 0600 file, key VALUE never written. Idempotent.
94
+ */
95
+ export declare function writeLocalModelCodexHome(localModelId: string, coords: CodexLocalCoords, io?: CodexProvisionIO): WriteProductCodexHomeResult;
68
96
  /**
69
97
  * Write the rendered config.toml into the per-product CODEX_HOME.
70
98
  *
@@ -1 +1 @@
1
- {"version":3,"file":"codex-provision.d.ts","sourceRoot":"","sources":["../../src/cli/codex-provision.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAMH;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,yBAAyB,CAAC;AAE/D,qEAAqE;AACrE,eAAO,MAAM,wBAAwB,iBAAiB,CAAC;AAEvD;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,uFAAuF;IACvF,OAAO,EAAE,MAAM,CAAC;IAChB,6DAA6D;IAC7D,KAAK,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5B,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,2BAA2B;IAC1C,6DAA6D;IAC7D,SAAS,EAAE,MAAM,CAAC;IAClB,kEAAkE;IAClE,UAAU,EAAE,MAAM,CAAC;CACpB;AAeD;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEjE;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CActE;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,gBAAgB,EACxB,EAAE,CAAC,EAAE,gBAAgB,GACpB,2BAA2B,CAU7B;AAED;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAczE"}
1
+ {"version":3,"file":"codex-provision.d.ts","sourceRoot":"","sources":["../../src/cli/codex-provision.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAMH;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,yBAAyB,CAAC;AAE/D,qEAAqE;AACrE,eAAO,MAAM,wBAAwB,iBAAiB,CAAC;AAEvD;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,uFAAuF;IACvF,OAAO,EAAE,MAAM,CAAC;IAChB,6DAA6D;IAC7D,KAAK,EAAE,MAAM,CAAC;IACd;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IAC5B,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7B;AAED,MAAM,WAAW,2BAA2B;IAC1C,6DAA6D;IAC7D,SAAS,EAAE,MAAM,CAAC;IAClB,kEAAkE;IAClE,UAAU,EAAE,MAAM,CAAC;CACpB;AAeD;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAEjE;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAgBtE;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI,GAAG,MAAM,CAGlE;AAED;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,CAEvE;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CACtC,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,gBAAgB,EACxB,EAAE,CAAC,EAAE,gBAAgB,GACpB,2BAA2B,CAU7B;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,gBAAgB,EACxB,EAAE,CAAC,EAAE,gBAAgB,GACpB,2BAA2B,CAU7B;AAED;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAczE"}
@@ -58,6 +58,8 @@ export function resolveProductCodexHome(productId) {
58
58
  export function renderCodexConfigToml(coords) {
59
59
  assertTomlSafe('baseUrl', coords.baseUrl);
60
60
  assertTomlSafe('model', coords.model);
61
+ const envKey = resolveApiKeyEnv(coords.apiKeyEnv);
62
+ assertTomlSafe('apiKeyEnv', envKey);
61
63
  return (`model = "${coords.model}"\n` +
62
64
  `model_provider = "${TELORA_LOCAL_PROVIDER_ID}"\n` +
63
65
  `\n` +
@@ -65,7 +67,39 @@ export function renderCodexConfigToml(coords) {
65
67
  `name = "Telora Local"\n` +
66
68
  `base_url = "${coords.baseUrl}"\n` +
67
69
  `wire_api = "responses"\n` +
68
- `env_key = "${TELORA_LOCAL_API_KEY_ENV}"\n`);
70
+ `env_key = "${envKey}"\n`);
71
+ }
72
+ /**
73
+ * The env var NAME to write into config.toml's env_key. A registry model's
74
+ * api_key_env (when set) wins so each server resolves its own key; absent =>
75
+ * the single-server default (TELORA_LOCAL_API_KEY). Empty/blank => default.
76
+ */
77
+ export function resolveApiKeyEnv(apiKeyEnv) {
78
+ const trimmed = typeof apiKeyEnv === 'string' ? apiKeyEnv.trim() : '';
79
+ return trimmed.length > 0 ? trimmed : TELORA_LOCAL_API_KEY_ENV;
80
+ }
81
+ /**
82
+ * Resolve the ISOLATED per-model CODEX_HOME directory under the daemon's global
83
+ * state dir: `<stateDir>/codex/models/<localModelId>`. CWD-independent; honors
84
+ * $TELORA_STATE_DIR via resolveGlobalStateDir(). Keyed by the local_models row
85
+ * id so two passes selecting the same model share one home and different models
86
+ * get distinct homes. Does NOT create the directory.
87
+ */
88
+ export function resolveLocalModelCodexHome(localModelId) {
89
+ return resolve(resolveGlobalStateDir(), 'codex', 'models', localModelId);
90
+ }
91
+ /**
92
+ * Write the rendered config.toml into a per-model CODEX_HOME (keyed by the
93
+ * local_models row id). Same security invariants as writeProductCodexHome:
94
+ * 0700 dir, 0600 file, key VALUE never written. Idempotent.
95
+ */
96
+ export function writeLocalModelCodexHome(localModelId, coords, io) {
97
+ const codexHome = resolveLocalModelCodexHome(localModelId);
98
+ mkdirSync(codexHome, { recursive: true, mode: 0o700 });
99
+ const configPath = resolve(codexHome, 'config.toml');
100
+ writeFileSync(configPath, renderCodexConfigToml(coords), { mode: 0o600 });
101
+ io?.out?.(`Wrote Codex profile to ${configPath} (CODEX_HOME=${codexHome}).\n`);
102
+ return { codexHome, configPath };
69
103
  }
70
104
  /**
71
105
  * Write the rendered config.toml into the per-product CODEX_HOME.
@@ -1 +1 @@
1
- {"version":3,"file":"codex-provision.js","sourceRoot":"","sources":["../../src/cli/codex-provision.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAE7D;;;;GAIG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,sBAAsB,CAAC;AAE/D,qEAAqE;AACrE,MAAM,CAAC,MAAM,wBAAwB,GAAG,cAAc,CAAC;AA6BvD;;;;GAIG;AACH,SAAS,cAAc,CAAC,KAAa,EAAE,KAAa;IAClD,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAChG,MAAM,IAAI,KAAK,CACb,WAAW,KAAK,2DAA2D,CAC5E,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CAAC,SAAiB;IACvD,OAAO,OAAO,CAAC,qBAAqB,EAAE,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;AAC9D,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAAwB;IAC5D,cAAc,CAAC,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IAC1C,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IAEtC,OAAO,CACL,YAAY,MAAM,CAAC,KAAK,KAAK;QAC7B,qBAAqB,wBAAwB,KAAK;QAClD,IAAI;QACJ,oBAAoB,wBAAwB,KAAK;QACjD,yBAAyB;QACzB,eAAe,MAAM,CAAC,OAAO,KAAK;QAClC,0BAA0B;QAC1B,cAAc,wBAAwB,KAAK,CAC5C,CAAC;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CACnC,SAAiB,EACjB,MAAwB,EACxB,EAAqB;IAErB,MAAM,SAAS,GAAG,uBAAuB,CAAC,SAAS,CAAC,CAAC;IACrD,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAEvD,MAAM,UAAU,GAAG,OAAO,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;IACrD,aAAa,CAAC,UAAU,EAAE,qBAAqB,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAE1E,EAAE,EAAE,GAAG,EAAE,CAAC,0BAA0B,UAAU,gBAAgB,SAAS,MAAM,CAAC,CAAC;IAE/E,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC;AACnC,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,wBAAwB,CAAC,MAAwB;IAC/D,MAAM,OAAO,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;IAC9C,OAAO,CACL,yDAAyD;QACzD,IAAI;QACJ,GAAG,OAAO,EAAE;QACZ,IAAI;QACJ,kFAAkF;QAClF,UAAU,wBAAwB,+BAA+B;QACjE,IAAI;QACJ,oFAAoF;QACpF,iFAAiF;QACjF,4BAA4B,CAC7B,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"codex-provision.js","sourceRoot":"","sources":["../../src/cli/codex-provision.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Pristine-at-exit assertion for read-only audit focuses.
3
+ *
4
+ * A read-only audit focus is supposed to leave the worktree exactly as it found
5
+ * it -- discovery only, no file modifications. The write-deny settings overlay
6
+ * (templates/claude-settings -> audit-hooks) makes this physically true at the
7
+ * tool layer, and the pre-commit hook blocks commits. This module is the
8
+ * completion-side backstop: when a read-only team exits, assert the worktree is
9
+ * pristine; if it is NOT, file a (dedup-aware) escalation so an operator sees
10
+ * that a read-only audit modified files it shouldn't have.
11
+ *
12
+ * Modeled on delivery-advance-block.ts `ensureWorktreeCommittedBeforeAdvance`:
13
+ * dependency-injected collaborators, durable dedup via
14
+ * `hasOpenEscalationForDelivery`, fail-open lookup.
15
+ *
16
+ * @module completion/read-only-pristine
17
+ */
18
+ import { createEscalation, hasOpenEscalationForDelivery } from '../supabase.js';
19
+ import { worktreeHasUncommittedChanges } from '../worktree-safety.js';
20
+ /**
21
+ * escalation_kind discriminator for the read-only-pristine violation.
22
+ *
23
+ * Reuses ADVANCE_BLOCKED -- the violation is "the daemon refuses to advance /
24
+ * merge this focus because its worktree is not in the expected (pristine)
25
+ * state", the same class as the uncommitted-changes advance block. Keeps the
26
+ * dedup keyed on a kind already in the escalation_kind CHECK set without a
27
+ * schema change.
28
+ */
29
+ export declare const READ_ONLY_PRISTINE_ESCALATION_KIND: "advance_blocked";
30
+ /**
31
+ * Injectable collaborators for assertReadOnlyWorktreePristine. Defaults to the
32
+ * real implementations; tests override them to drive the violation path without
33
+ * a live worktree or Supabase.
34
+ */
35
+ export interface AssertReadOnlyPristineDeps {
36
+ worktreeHasUncommittedChanges?: typeof worktreeHasUncommittedChanges;
37
+ createEscalation?: typeof createEscalation;
38
+ hasOpenEscalationForDelivery?: typeof hasOpenEscalationForDelivery;
39
+ }
40
+ /**
41
+ * Assert that a read-only focus's worktree is pristine at team exit.
42
+ *
43
+ * Returns pristine=true when the worktree has no uncommitted changes (or no
44
+ * worktree path is known). Returns pristine=false and files a dedup-aware
45
+ * escalation when uncommitted changes are present -- the caller then reverts the
46
+ * dirty tree and skips the merge.
47
+ *
48
+ * Dedup: at most ONE open escalation per delivery (queried via
49
+ * hasOpenEscalationForDelivery on the ADVANCE_BLOCKED kind). Fail-open on the
50
+ * lookup so a genuine first violation is never silently swallowed.
51
+ */
52
+ export declare function assertReadOnlyWorktreePristine(params: {
53
+ worktreePath: string | null | undefined;
54
+ organizationId: string;
55
+ sessionId: string | null;
56
+ deliveryId: string;
57
+ focusId: string;
58
+ focusName: string;
59
+ branchName: string;
60
+ }, deps?: AssertReadOnlyPristineDeps): Promise<{
61
+ pristine: boolean;
62
+ }>;
63
+ //# sourceMappingURL=read-only-pristine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-only-pristine.d.ts","sourceRoot":"","sources":["../../src/completion/read-only-pristine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,gBAAgB,EAAE,4BAA4B,EAAE,MAAM,gBAAgB,CAAC;AAEhF,OAAO,EAAE,6BAA6B,EAAE,MAAM,uBAAuB,CAAC;AAEtE;;;;;;;;GAQG;AACH,eAAO,MAAM,kCAAkC,mBAAmC,CAAC;AAEnF;;;;GAIG;AACH,MAAM,WAAW,0BAA0B;IACzC,6BAA6B,CAAC,EAAE,OAAO,6BAA6B,CAAC;IACrE,gBAAgB,CAAC,EAAE,OAAO,gBAAgB,CAAC;IAC3C,4BAA4B,CAAC,EAAE,OAAO,4BAA4B,CAAC;CACpE;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,8BAA8B,CAClD,MAAM,EAAE;IACN,YAAY,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACxC,cAAc,EAAE,MAAM,CAAC;IACvB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB,EACD,IAAI,GAAE,0BAA+B,GACpC,OAAO,CAAC;IAAE,QAAQ,EAAE,OAAO,CAAA;CAAE,CAAC,CA0DhC"}
@@ -0,0 +1,87 @@
1
+ /**
2
+ * Pristine-at-exit assertion for read-only audit focuses.
3
+ *
4
+ * A read-only audit focus is supposed to leave the worktree exactly as it found
5
+ * it -- discovery only, no file modifications. The write-deny settings overlay
6
+ * (templates/claude-settings -> audit-hooks) makes this physically true at the
7
+ * tool layer, and the pre-commit hook blocks commits. This module is the
8
+ * completion-side backstop: when a read-only team exits, assert the worktree is
9
+ * pristine; if it is NOT, file a (dedup-aware) escalation so an operator sees
10
+ * that a read-only audit modified files it shouldn't have.
11
+ *
12
+ * Modeled on delivery-advance-block.ts `ensureWorktreeCommittedBeforeAdvance`:
13
+ * dependency-injected collaborators, durable dedup via
14
+ * `hasOpenEscalationForDelivery`, fail-open lookup.
15
+ *
16
+ * @module completion/read-only-pristine
17
+ */
18
+ import { createEscalation, hasOpenEscalationForDelivery } from '../supabase.js';
19
+ import { withRetry, ESCALATION_REASONS, ESCALATION_DISPOSITIONS, ESCALATION_KINDS } from '@telora/daemon-core';
20
+ import { worktreeHasUncommittedChanges } from '../worktree-safety.js';
21
+ /**
22
+ * escalation_kind discriminator for the read-only-pristine violation.
23
+ *
24
+ * Reuses ADVANCE_BLOCKED -- the violation is "the daemon refuses to advance /
25
+ * merge this focus because its worktree is not in the expected (pristine)
26
+ * state", the same class as the uncommitted-changes advance block. Keeps the
27
+ * dedup keyed on a kind already in the escalation_kind CHECK set without a
28
+ * schema change.
29
+ */
30
+ export const READ_ONLY_PRISTINE_ESCALATION_KIND = ESCALATION_KINDS.ADVANCE_BLOCKED;
31
+ /**
32
+ * Assert that a read-only focus's worktree is pristine at team exit.
33
+ *
34
+ * Returns pristine=true when the worktree has no uncommitted changes (or no
35
+ * worktree path is known). Returns pristine=false and files a dedup-aware
36
+ * escalation when uncommitted changes are present -- the caller then reverts the
37
+ * dirty tree and skips the merge.
38
+ *
39
+ * Dedup: at most ONE open escalation per delivery (queried via
40
+ * hasOpenEscalationForDelivery on the ADVANCE_BLOCKED kind). Fail-open on the
41
+ * lookup so a genuine first violation is never silently swallowed.
42
+ */
43
+ export async function assertReadOnlyWorktreePristine(params, deps = {}) {
44
+ const hasUncommitted = deps.worktreeHasUncommittedChanges ?? worktreeHasUncommittedChanges;
45
+ const createEsc = deps.createEscalation ?? createEscalation;
46
+ const hasOpenEsc = deps.hasOpenEscalationForDelivery ?? hasOpenEscalationForDelivery;
47
+ const { worktreePath, organizationId, sessionId, deliveryId, focusId, focusName, branchName } = params;
48
+ if (!worktreePath || !hasUncommitted(worktreePath)) {
49
+ return { pristine: true };
50
+ }
51
+ console.warn(`[focus-executor] READ-ONLY PRISTINE VIOLATION: audit "${focusName}" left uncommitted changes in ${worktreePath}.`);
52
+ // Durable dedup: skip filing if an open escalation already exists for this
53
+ // delivery. Fail open -- a lookup error proceeds to file.
54
+ let alreadyOpen = false;
55
+ try {
56
+ alreadyOpen = await hasOpenEsc(deliveryId, READ_ONLY_PRISTINE_ESCALATION_KIND);
57
+ }
58
+ catch (err) {
59
+ console.warn(`[focus-executor] Open read-only-pristine escalation lookup failed for "${focusName}", proceeding to file: ${err.message}`);
60
+ }
61
+ if (alreadyOpen) {
62
+ return { pristine: false };
63
+ }
64
+ try {
65
+ await withRetry(() => createEsc({
66
+ organizationId,
67
+ sessionId: sessionId ?? '',
68
+ issueId: null,
69
+ reasonType: ESCALATION_REASONS.ERROR_ENCOUNTERED,
70
+ disposition: ESCALATION_DISPOSITIONS.NEEDS_OPERATOR,
71
+ escalationKind: READ_ONLY_PRISTINE_ESCALATION_KIND,
72
+ anchor: { deliveryId, focusId, branch: branchName },
73
+ description: `Read-only audit "${focusName}" left uncommitted changes in its worktree.\n\n` +
74
+ `A read-only audit focus must leave the worktree pristine (discovery ` +
75
+ `only -- no file modifications). The daemon has reverted the changes ` +
76
+ `and will NOT merge this focus. Review what the audit modified.`,
77
+ whatWasTried: 'On read-only team exit the daemon ran `git status --porcelain` and found uncommitted changes in the focus worktree, which a read-only audit must never produce.',
78
+ helpNeeded: `Inspect the audit session for "${focusName}"; the worktree at ${worktreePath} has been reverted. No merge was performed.`,
79
+ }), { maxAttempts: 3, label: 'escalation-read-only-pristine' });
80
+ console.log(`[focus-executor] Filed read-only-pristine escalation for "${focusName}"`);
81
+ }
82
+ catch (err) {
83
+ console.error(`[focus-executor] Failed to file read-only-pristine escalation for "${focusName}": ${err.message}`);
84
+ }
85
+ return { pristine: false };
86
+ }
87
+ //# sourceMappingURL=read-only-pristine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-only-pristine.js","sourceRoot":"","sources":["../../src/completion/read-only-pristine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,EAAE,gBAAgB,EAAE,4BAA4B,EAAE,MAAM,gBAAgB,CAAC;AAChF,OAAO,EAAE,SAAS,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAC/G,OAAO,EAAE,6BAA6B,EAAE,MAAM,uBAAuB,CAAC;AAEtE;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,kCAAkC,GAAG,gBAAgB,CAAC,eAAe,CAAC;AAanF;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,8BAA8B,CAClD,MAQC,EACD,OAAmC,EAAE;IAErC,MAAM,cAAc,GAAG,IAAI,CAAC,6BAA6B,IAAI,6BAA6B,CAAC;IAC3F,MAAM,SAAS,GAAG,IAAI,CAAC,gBAAgB,IAAI,gBAAgB,CAAC;IAC5D,MAAM,UAAU,GAAG,IAAI,CAAC,4BAA4B,IAAI,4BAA4B,CAAC;IAErF,MAAM,EAAE,YAAY,EAAE,cAAc,EAAE,SAAS,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,MAAM,CAAC;IAEvG,IAAI,CAAC,YAAY,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,EAAE,CAAC;QACnD,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;IAC5B,CAAC;IAED,OAAO,CAAC,IAAI,CACV,yDAAyD,SAAS,iCAAiC,YAAY,GAAG,CACnH,CAAC;IAEF,2EAA2E;IAC3E,0DAA0D;IAC1D,IAAI,WAAW,GAAG,KAAK,CAAC;IACxB,IAAI,CAAC;QACH,WAAW,GAAG,MAAM,UAAU,CAAC,UAAU,EAAE,kCAAkC,CAAC,CAAC;IACjF,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CACV,0EAA0E,SAAS,0BAA2B,GAAa,CAAC,OAAO,EAAE,CACtI,CAAC;IACJ,CAAC;IACD,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IAC7B,CAAC;IAED,IAAI,CAAC;QACH,MAAM,SAAS,CACb,GAAG,EAAE,CAAC,SAAS,CAAC;YACd,cAAc;YACd,SAAS,EAAE,SAAS,IAAI,EAAE;YAC1B,OAAO,EAAE,IAAI;YACb,UAAU,EAAE,kBAAkB,CAAC,iBAAiB;YAChD,WAAW,EAAE,uBAAuB,CAAC,cAAc;YACnD,cAAc,EAAE,kCAAkC;YAClD,MAAM,EAAE,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE;YACnD,WAAW,EACT,oBAAoB,SAAS,iDAAiD;gBAC9E,sEAAsE;gBACtE,sEAAsE;gBACtE,gEAAgE;YAClE,YAAY,EACV,iKAAiK;YACnK,UAAU,EAAE,kCAAkC,SAAS,sBAAsB,YAAY,6CAA6C;SACvI,CAAC,EACF,EAAE,WAAW,EAAE,CAAC,EAAE,KAAK,EAAE,+BAA+B,EAAE,CAC3D,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,6DAA6D,SAAS,GAAG,CAAC,CAAC;IACzF,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CACX,sEAAsE,SAAS,MAAO,GAAa,CAAC,OAAO,EAAE,CAC9G,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AAC7B,CAAC"}