@telora/daemon 0.17.78 → 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 (112) hide show
  1. package/README.md +9 -5
  2. package/build-info.json +9 -3
  3. package/dist/audit-hooks.d.ts +24 -0
  4. package/dist/audit-hooks.d.ts.map +1 -1
  5. package/dist/audit-hooks.js +52 -1
  6. package/dist/audit-hooks.js.map +1 -1
  7. package/dist/audit-phase.d.ts +30 -6
  8. package/dist/audit-phase.d.ts.map +1 -1
  9. package/dist/audit-phase.js +46 -18
  10. package/dist/audit-phase.js.map +1 -1
  11. package/dist/auto-update.d.ts +8 -4
  12. package/dist/auto-update.d.ts.map +1 -1
  13. package/dist/auto-update.js +9 -5
  14. package/dist/auto-update.js.map +1 -1
  15. package/dist/cli/backfill-frt-prose.d.ts +34 -0
  16. package/dist/cli/backfill-frt-prose.d.ts.map +1 -1
  17. package/dist/cli/backfill-frt-prose.js +53 -4
  18. package/dist/cli/backfill-frt-prose.js.map +1 -1
  19. package/dist/cli/codex-provision.d.ts +28 -0
  20. package/dist/cli/codex-provision.d.ts.map +1 -1
  21. package/dist/cli/codex-provision.js +35 -1
  22. package/dist/cli/codex-provision.js.map +1 -1
  23. package/dist/cli/connect.d.ts +25 -15
  24. package/dist/cli/connect.d.ts.map +1 -1
  25. package/dist/cli/connect.js +76 -20
  26. package/dist/cli/connect.js.map +1 -1
  27. package/dist/completion/read-only-pristine.d.ts +63 -0
  28. package/dist/completion/read-only-pristine.d.ts.map +1 -0
  29. package/dist/completion/read-only-pristine.js +87 -0
  30. package/dist/completion/read-only-pristine.js.map +1 -0
  31. package/dist/completion/team-completion.d.ts.map +1 -1
  32. package/dist/completion/team-completion.js +20 -1
  33. package/dist/completion/team-completion.js.map +1 -1
  34. package/dist/condition-evaluators.d.ts.map +1 -1
  35. package/dist/condition-evaluators.js +36 -0
  36. package/dist/condition-evaluators.js.map +1 -1
  37. package/dist/focus-executor.d.ts +47 -1
  38. package/dist/focus-executor.d.ts.map +1 -1
  39. package/dist/focus-executor.js +95 -8
  40. package/dist/focus-executor.js.map +1 -1
  41. package/dist/focus-lifecycle.js +7 -7
  42. package/dist/focus-lifecycle.js.map +1 -1
  43. package/dist/focus-merge.d.ts +40 -0
  44. package/dist/focus-merge.d.ts.map +1 -1
  45. package/dist/focus-merge.js +84 -0
  46. package/dist/focus-merge.js.map +1 -1
  47. package/dist/focus-provisioning.js +7 -7
  48. package/dist/focus-provisioning.js.map +1 -1
  49. package/dist/focus-stage-lifecycle.d.ts +64 -1
  50. package/dist/focus-stage-lifecycle.d.ts.map +1 -1
  51. package/dist/focus-stage-lifecycle.js +140 -2
  52. package/dist/focus-stage-lifecycle.js.map +1 -1
  53. package/dist/index.js +14 -7
  54. package/dist/index.js.map +1 -1
  55. package/dist/listener.d.ts.map +1 -1
  56. package/dist/listener.js +2 -1
  57. package/dist/listener.js.map +1 -1
  58. package/dist/loop-engine.d.ts.map +1 -1
  59. package/dist/loop-engine.js +12 -3
  60. package/dist/loop-engine.js.map +1 -1
  61. package/dist/prompt-sections/execution-sections.d.ts.map +1 -1
  62. package/dist/prompt-sections/execution-sections.js +19 -1
  63. package/dist/prompt-sections/execution-sections.js.map +1 -1
  64. package/dist/prompt-sections/role-sections.d.ts +8 -0
  65. package/dist/prompt-sections/role-sections.d.ts.map +1 -1
  66. package/dist/prompt-sections/role-sections.js +46 -11
  67. package/dist/prompt-sections/role-sections.js.map +1 -1
  68. package/dist/prompts/starter-prompt.d.ts +1 -1
  69. package/dist/prompts/starter-prompt.d.ts.map +1 -1
  70. package/dist/prompts/starter-prompt.js +1 -1
  71. package/dist/queries/deliveries.d.ts +17 -0
  72. package/dist/queries/deliveries.d.ts.map +1 -1
  73. package/dist/queries/deliveries.js +3 -0
  74. package/dist/queries/deliveries.js.map +1 -1
  75. package/dist/queries/focuses.d.ts +48 -0
  76. package/dist/queries/focuses.d.ts.map +1 -1
  77. package/dist/queries/focuses.js +101 -0
  78. package/dist/queries/focuses.js.map +1 -1
  79. package/dist/queries/index.d.ts +2 -2
  80. package/dist/queries/index.d.ts.map +1 -1
  81. package/dist/queries/index.js +1 -1
  82. package/dist/queries/index.js.map +1 -1
  83. package/dist/queries/local-models.d.ts +26 -0
  84. package/dist/queries/local-models.d.ts.map +1 -0
  85. package/dist/queries/local-models.js +31 -0
  86. package/dist/queries/local-models.js.map +1 -0
  87. package/dist/queries/schemas.d.ts +28 -0
  88. package/dist/queries/schemas.d.ts.map +1 -1
  89. package/dist/queries/schemas.js +31 -0
  90. package/dist/queries/schemas.js.map +1 -1
  91. package/dist/retire-aware-restatement.d.ts +26 -0
  92. package/dist/retire-aware-restatement.d.ts.map +1 -1
  93. package/dist/retire-aware-restatement.js +98 -17
  94. package/dist/retire-aware-restatement.js.map +1 -1
  95. package/dist/self-update.d.ts +21 -0
  96. package/dist/self-update.d.ts.map +1 -1
  97. package/dist/self-update.js +56 -4
  98. package/dist/self-update.js.map +1 -1
  99. package/dist/spawner/lifecycle.d.ts.map +1 -1
  100. package/dist/spawner/lifecycle.js +9 -6
  101. package/dist/spawner/lifecycle.js.map +1 -1
  102. package/dist/templates/claude-settings.d.ts +36 -1
  103. package/dist/templates/claude-settings.d.ts.map +1 -1
  104. package/dist/templates/claude-settings.js +63 -12
  105. package/dist/templates/claude-settings.js.map +1 -1
  106. package/dist/unified-init.d.ts.map +1 -1
  107. package/dist/unified-init.js +40 -1
  108. package/dist/unified-init.js.map +1 -1
  109. package/dist/unified-shell.d.ts.map +1 -1
  110. package/dist/unified-shell.js +11 -1
  111. package/dist/unified-shell.js.map +1 -1
  112. package/package.json +3 -3
@@ -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"}
@@ -1 +1 @@
1
- {"version":3,"file":"team-completion.d.ts","sourceRoot":"","sources":["../../src/completion/team-completion.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAqB,MAAM,aAAa,CAAC;AAsBnF,OAAO,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACnF,OAAO,EACL,KAAK,sBAAsB,EAC3B,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,kBAAkB,EAClB,4BAA4B,EAC5B,uBAAuB,EACvB,KAAK,qBAAqB,EAC1B,KAAK,uBAAuB,EAC5B,iBAAiB,EACjB,6BAA6B,EAC7B,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,KAAK,mBAAmB,EACxB,uBAAuB,GACxB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,oBAAoB,GACrB,MAAM,wBAAwB,CAAC;AAEhC,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,YAAY,CAAC;IACrB,SAAS,EAAE,cAAc,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AA8GD;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAsKtF"}
1
+ {"version":3,"file":"team-completion.d.ts","sourceRoot":"","sources":["../../src/completion/team-completion.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,cAAc,EAAqB,MAAM,aAAa,CAAC;AAuBnF,OAAO,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,wBAAwB,CAAC;AACnF,OAAO,EACL,KAAK,sBAAsB,EAC3B,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,kBAAkB,EAClB,4BAA4B,EAC5B,uBAAuB,EACvB,KAAK,qBAAqB,EAC1B,KAAK,uBAAuB,EAC5B,iBAAiB,EACjB,6BAA6B,EAC7B,gBAAgB,GACjB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,KAAK,mBAAmB,EACxB,uBAAuB,GACxB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,oBAAoB,GACrB,MAAM,wBAAwB,CAAC;AAEhC,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,YAAY,CAAC;IACrB,SAAS,EAAE,cAAc,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAiID;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,IAAI,CAAC,CAsKtF"}
@@ -24,6 +24,7 @@ import { getActiveTeams } from '../focus-team-state.js';
24
24
  import { commitWipChanges, worktreeHasUncommittedChanges, branchHasUnmergedCommits, runGitSync } from '../git.js';
25
25
  import { computeGitDiffStats } from '../git-utils.js';
26
26
  import { getFocusDeliveries } from '../queries/focuses.js';
27
+ import { assertReadOnlyWorktreePristine } from './read-only-pristine.js';
27
28
  import { classifyTeamExit, deriveExitCategory } from './exit-classification.js';
28
29
  import { selectWorkedDeliveryIds, attemptFocusMerge, escalateFailedMergeDeliveries, runCiMergeToMain, } from './merge-phase.js';
29
30
  import { advanceDeliveryStatuses } from './status-advance-phase.js';
@@ -87,9 +88,27 @@ async function runReadOnlyGuardPhase(config, teamState, sessionId) {
87
88
  return false;
88
89
  const { focusId, focusName, branchName } = teamState;
89
90
  const worktreePath = teamState.worktreePath;
90
- // Revert any uncommitted changes
91
+ // Pristine-at-exit assertion: a read-only audit must leave the worktree
92
+ // pristine. If it didn't, file a (dedup-aware) escalation BEFORE reverting,
93
+ // so an operator sees that the audit modified files it shouldn't have. The
94
+ // write-deny overlay should make this impossible at the tool layer; this is
95
+ // the completion-side backstop.
91
96
  const hasChanges = worktreeHasUncommittedChanges(worktreePath);
92
97
  if (hasChanges) {
98
+ // A representative delivery anchors the escalation. Prefer a worked/known
99
+ // delivery; the audit-focus case may have none, in which case the focusId
100
+ // anchor still carries provenance.
101
+ const representativeDeliveryId = [...teamState.knownDeliveryIds][0] ?? '';
102
+ await assertReadOnlyWorktreePristine({
103
+ worktreePath,
104
+ organizationId: teamState.organizationId,
105
+ sessionId,
106
+ deliveryId: representativeDeliveryId,
107
+ focusId,
108
+ focusName,
109
+ branchName,
110
+ });
111
+ // Revert the uncommitted changes so the worktree returns to pristine.
93
112
  console.warn(`[focus-executor] Read-only audit "${focusName}" left uncommitted changes. Reverting.`);
94
113
  runGitSync(['checkout', '.'], worktreePath);
95
114
  runGitSync(['clean', '-fd'], worktreePath);
@@ -1 +1 @@
1
- {"version":3,"file":"team-completion.js","sourceRoot":"","sources":["../../src/completion/team-completion.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"team-completion.js","sourceRoot":"","sources":["../../src/completion/team-completion.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"condition-evaluators.d.ts","sourceRoot":"","sources":["../src/condition-evaluators.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EACV,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAMjE;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAI1D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAU3F;AAMD;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG,CACjC,IAAI,EAAE,kBAAkB,EACxB,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,iBAAiB,KACnB,mBAAmB,CAAC;AAmczB;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,kBAAkB,EACxB,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,iBAAiB,GACrB,mBAAmB,CASrB"}
1
+ {"version":3,"file":"condition-evaluators.d.ts","sourceRoot":"","sources":["../src/condition-evaluators.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EACV,kBAAkB,EAClB,mBAAmB,EACpB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAMjE;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAI1D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAU3F;AAMD;;GAEG;AACH,MAAM,MAAM,oBAAoB,GAAG,CACjC,IAAI,EAAE,kBAAkB,EACxB,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,iBAAiB,KACnB,mBAAmB,CAAC;AA4ezB;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,kBAAkB,EACxB,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,iBAAiB,GACrB,mBAAmB,CASrB"}
@@ -371,6 +371,41 @@ function evaluateWallClock(node, nodeId, ctx) {
371
371
  : `Wall clock (${Math.round(observed)}${unit}) does not satisfy ${operator} ${expected}${unit}`,
372
372
  };
373
373
  }
374
+ /**
375
+ * human_ratification: passes only when a human has ratified the focus's
376
+ * remediation plan (sourced from product_focuses.ratified_at IS NOT NULL,
377
+ * surfaced as a `humanRatified` flag on the evaluation context).
378
+ *
379
+ * The load-bearing crossing for the Safe audit-to-remediation gate is the
380
+ * daemon focus-phase transition `releaseRatifiedReadOnlyFocus` (which reads
381
+ * focus.ratifiedAt directly); this condition is the guard-engine vocabulary
382
+ * for expressing the same gate once focus-level guard evaluation is wired.
383
+ * The context field is read defensively via a narrow local type so this
384
+ * evaluator stays self-contained -- it does NOT require the shared
385
+ * `EvaluationContext` (in @telora/daemon-core) to declare the field, which
386
+ * keeps the daemon-core package untouched until a focus-level guard actually
387
+ * populates the signal.
388
+ *
389
+ * FAIL-CLOSED: when the context carries no ratification signal (humanRatified
390
+ * absent or false) the condition BLOCKS. The whole point of the gate is that
391
+ * crossing planning->execution requires a genuine, distinct human signal -- so
392
+ * a missing signal must never read as satisfied. There is no node parameter:
393
+ * ratification is binary and contextual.
394
+ */
395
+ function evaluateHumanRatification(node, nodeId, ctx) {
396
+ const conditionType = node.condition_type ?? 'human_ratification';
397
+ const ratified = ctx.humanRatified === true;
398
+ return {
399
+ condition_id: nodeId,
400
+ condition_type: conditionType,
401
+ passed: ratified,
402
+ observed_value: ratified,
403
+ expected_value: true,
404
+ message: ratified
405
+ ? 'Human has ratified the remediation plan'
406
+ : 'No human ratification signal -- blocked (fail-closed; ratification required to cross planning->execution)',
407
+ };
408
+ }
374
409
  function evaluateUnknown(node, nodeId, _ctx) {
375
410
  const conditionType = node.condition_type ?? 'unknown';
376
411
  console.warn(`[guard] Unknown condition type "${conditionType}" -- blocking (possible misconfiguration)`);
@@ -400,6 +435,7 @@ const conditionEvaluators = {
400
435
  all_work_units_completed: evaluateAllWorkUnitsCompleted,
401
436
  cycle_count: evaluateCycleCount,
402
437
  wall_clock: evaluateWallClock,
438
+ human_ratification: evaluateHumanRatification,
403
439
  };
404
440
  /**
405
441
  * Evaluate a single leaf condition against the evaluation context.
@@ -1 +1 @@
1
- {"version":3,"file":"condition-evaluators.js","sourceRoot":"","sources":["../src/condition-evaluators.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"condition-evaluators.js","sourceRoot":"","sources":["../src/condition-evaluators.ts"],"names":[],"mappings":"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"}
@@ -31,7 +31,8 @@ import type { DaemonConfig, AgentRole, PipelineConfig } from './types.js';
31
31
  import { type ResourceGovernor } from '@telora/daemon-core';
32
32
  import { getFocusDeliveries } from './queries/focuses.js';
33
33
  import './assembly-resolvers.js';
34
- import { type AgentBackend, type EngineOverride } from './backends/index.js';
34
+ import { type LocalModelCoordinates } from './queries/local-models.js';
35
+ import { type AgentBackend, type EngineOverride, type EnginePass } from './backends/index.js';
35
36
  export { getActiveTeams, hasActiveTeam, getActiveTeamCount, } from './focus-team-state.js';
36
37
  export { mergeFocusBranch, } from './focus-merge.js';
37
38
  export { handleTeamCompletion, advanceDeliveryStatuses, isStatusTerminal, isStatusAgentActionable, } from './completion/index.js';
@@ -112,6 +113,43 @@ export declare function generateFocusBranchName(role: AgentRole, focusName: stri
112
113
  export declare function codexHomeForSpawn(engineId: string, config: {
113
114
  codexHome?: string;
114
115
  }): string | undefined;
116
+ /**
117
+ * Select the per-pass local model ref to resolve for this spawn, or null.
118
+ *
119
+ * Pure + testable. A ref applies ONLY to a codex-engine spawn whose focus has a
120
+ * non-empty localModelOverride entry for the pass being spawned. Every other
121
+ * case (claude engine, no override, blank ref) returns null so the spawn keeps
122
+ * its per-product / engine-default behavior unchanged.
123
+ */
124
+ export declare function selectLocalModelRef(engineId: string, pass: EnginePass, localModelOverride: Record<string, string | null> | null | undefined): string | null;
125
+ /**
126
+ * Decide what a codex spawn should do with a selected local-model ref, given the
127
+ * resolved coordinates and a way to look up env vars. Pure + testable: it holds
128
+ * NO I/O (the DB call that produces `coords` and the CODEX_HOME write/session
129
+ * update happen in the caller). It only renders the routing DECISION:
130
+ *
131
+ * - ref null -> { kind: 'none' } (no local model selected)
132
+ * - ref set but coords null -> { kind: 'fallback' } (ref not in registry)
133
+ * - coords present + key env unset -> { kind: 'skip' } (fail closed)
134
+ * - coords present + key env set -> { kind: 'route' } (route the spawn)
135
+ *
136
+ * Reached only when a ref exists upstream (codex-only is already enforced by
137
+ * `selectLocalModelRef`); `coords` is `getLocalModel(ref)`'s result.
138
+ */
139
+ export type LocalModelRouting = {
140
+ kind: 'none';
141
+ } | {
142
+ kind: 'fallback';
143
+ } | {
144
+ kind: 'skip';
145
+ envName: string;
146
+ coords: LocalModelCoordinates;
147
+ } | {
148
+ kind: 'route';
149
+ envName: string;
150
+ coords: LocalModelCoordinates;
151
+ };
152
+ export declare function decideLocalModelRouting(ref: string | null, coords: LocalModelCoordinates | null, envLookup: (name: string) => string | undefined): LocalModelRouting;
115
153
  /**
116
154
  * Resolve the effective model id for a spawn. Priority (most specific wins):
117
155
  * 1. directiveModel -- a stage-directive model override
@@ -150,6 +188,14 @@ export interface SpawnFocusTeamParams {
150
188
  * inherit the org default. Fed into resolveBackend() (D3).
151
189
  */
152
190
  engineOverride?: EngineOverride | null;
191
+ /**
192
+ * Per-focus selected local model (per-pass map {coding?, review?} of
193
+ * local_models ids); null/absent = no specific local model selected. When the
194
+ * resolved engine for a pass is codex and this carries a ref for that pass,
195
+ * the daemon resolves the ref to coordinates and routes the spawn to that
196
+ * model's endpoint (D3).
197
+ */
198
+ localModelOverride?: Record<string, string | null> | null;
153
199
  /** Org-level default engine id; null/absent = the global default ('claude'). */
154
200
  orgDefaultEngine?: string | null;
155
201
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"focus-executor.d.ts","sourceRoot":"","sources":["../src/focus-executor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"focus-executor.d.ts","sourceRoot":"","sources":["../src/focus-executor.ts"],"names":[],"mappings":"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"}
@@ -31,7 +31,7 @@ import { spawn } from 'node:child_process';
31
31
  import { mkdirSync, existsSync } from 'node:fs';
32
32
  import { createSession, updateSession, getActiveFocuses, } from './supabase.js';
33
33
  import { createWorktree, runGitSync, repoHasCommits } from './git.js';
34
- import { installAuditPreCommitHook } from './audit-hooks.js';
34
+ import { installReadOnlyAuditGuards } from './audit-hooks.js';
35
35
  import { getFocusWorktree, setFocusWorktree } from './focus-worktree-state.js';
36
36
  import { withRetry, productLabel } from '@telora/daemon-core';
37
37
  import { recordActivity } from './heartbeat.js';
@@ -54,6 +54,8 @@ import './assembly-resolvers.js';
54
54
  import { isStatusAgentActionable, isStatusBlocking } from './stage-classifier.js';
55
55
  import { filterReviewFiledIssues } from './review-defect-detector.js';
56
56
  import { getActiveFocuses as fetchActiveFocusesForReviewState } from './queries/deliveries.js';
57
+ import { getLocalModel } from './queries/local-models.js';
58
+ import { writeLocalModelCodexHome, resolveApiKeyEnv } from './cli/codex-provision.js';
57
59
  // ── Imports from extracted modules ──────────────────────────────────────
58
60
  import { getActiveTeams, deriveExecutionConfig, } from './focus-team-state.js';
59
61
  // Import the spawn helpers from their defining module (NOT the spawner barrel):
@@ -165,6 +167,30 @@ export function generateFocusBranchName(role, focusName, focusId) {
165
167
  export function codexHomeForSpawn(engineId, config) {
166
168
  return engineId === 'codex' && config.codexHome ? config.codexHome : undefined;
167
169
  }
170
+ /**
171
+ * Select the per-pass local model ref to resolve for this spawn, or null.
172
+ *
173
+ * Pure + testable. A ref applies ONLY to a codex-engine spawn whose focus has a
174
+ * non-empty localModelOverride entry for the pass being spawned. Every other
175
+ * case (claude engine, no override, blank ref) returns null so the spawn keeps
176
+ * its per-product / engine-default behavior unchanged.
177
+ */
178
+ export function selectLocalModelRef(engineId, pass, localModelOverride) {
179
+ if (engineId !== 'codex')
180
+ return null;
181
+ const ref = localModelOverride?.[pass];
182
+ return typeof ref === 'string' && ref.trim().length > 0 ? ref.trim() : null;
183
+ }
184
+ export function decideLocalModelRouting(ref, coords, envLookup) {
185
+ if (!ref)
186
+ return { kind: 'none' };
187
+ if (!coords)
188
+ return { kind: 'fallback' };
189
+ const envName = resolveApiKeyEnv(coords.apiKeyEnv);
190
+ if (!envLookup(envName))
191
+ return { kind: 'skip', envName, coords };
192
+ return { kind: 'route', envName, coords };
193
+ }
168
194
  /**
169
195
  * Resolve the effective model id for a spawn. Priority (most specific wins):
170
196
  * 1. directiveModel -- a stage-directive model override
@@ -203,7 +229,7 @@ export function buildAgentArgs(backend, config, worktreePath, pipelineConfig, re
203
229
  * and issues, builds a task DAG, and coordinates worker execution.
204
230
  */
205
231
  export async function spawnFocusTeam(params) {
206
- const { config, focusId, focusName, role, pipelineConfig, readOnly = false, claudeSessionIds, engineOverride, orgDefaultEngine, forceSpawn = false } = params;
232
+ const { config, focusId, focusName, role, pipelineConfig, readOnly = false, claudeSessionIds, engineOverride, localModelOverride, orgDefaultEngine, forceSpawn = false } = params;
207
233
  const activeTeams = getActiveTeams();
208
234
  // The agent backend is resolved per-pass below, once the spawn's lineage
209
235
  // (coding vs review) is known -- see resolveBackend() after lineage resolution.
@@ -398,6 +424,14 @@ export async function spawnFocusTeam(params) {
398
424
  console.warn(`[focus-executor] Rebase failed for "${focusName}", continuing with existing state`);
399
425
  }
400
426
  console.log(` Worktree (reused): ${worktreePath}`);
427
+ // Re-assert read-only audit guards on the reused worktree. ensureFocusWorktrees
428
+ // installs them at provisioning time, but a read-only focus may reuse a
429
+ // persistent worktree across daemon restarts -- re-applying here (idempotent)
430
+ // guarantees the deny overlay + pre-commit hook are present before spawn.
431
+ if (readOnly) {
432
+ installReadOnlyAuditGuards(worktreePath);
433
+ console.log(` Re-asserted read-only audit guards (reused worktree)`);
434
+ }
401
435
  }
402
436
  else {
403
437
  // Guard: can't create worktrees in a repo with no commits
@@ -419,10 +453,10 @@ export async function spawnFocusTeam(params) {
419
453
  createdAt: new Date(),
420
454
  });
421
455
  console.log(` Worktree (created inline): ${worktreePath}`);
422
- // Install audit pre-commit hook for read-only focuses
456
+ // Install read-only audit guards (pre-commit hook + write-deny overlay)
423
457
  if (readOnly) {
424
- installAuditPreCommitHook(worktreePath);
425
- console.log(` Installed audit pre-commit hook (read-only mode)`);
458
+ installReadOnlyAuditGuards(worktreePath);
459
+ console.log(` Installed read-only audit guards (read-only mode)`);
426
460
  }
427
461
  }
428
462
  catch (err) {
@@ -632,10 +666,63 @@ export async function spawnFocusTeam(params) {
632
666
  // Resolve the per-product isolated CODEX_HOME for this spawn (undefined for
633
667
  // claude engines and cloud products with no provisioned codexHome -- those
634
668
  // spawns are byte-for-byte unaffected).
635
- const spawnCodexHome = codexHomeForSpawn(resolvedEngine.engineId, config);
636
- // Model selection: directive override > per-product local model > pipeline default.
669
+ let spawnCodexHome = codexHomeForSpawn(resolvedEngine.engineId, config);
670
+ let spawnCodexModel = config.codexModel;
671
+ // Per-pass local model routing (D3): if this codex pass selected a registered
672
+ // local model, resolve it to coordinates, provision a per-model CODEX_HOME,
673
+ // and route the spawn there -- overriding the per-product codexHome/codexModel
674
+ // for this pass only. Absent ref => the per-product default above is kept, so
675
+ // existing spawns are unaffected. Coding and review can resolve different
676
+ // models within one focus because resolution is keyed on enginePass.
677
+ const localModelRef = selectLocalModelRef(resolvedEngine.engineId, enginePass, localModelOverride);
678
+ // getLocalModel (the DB call) stays here; decideLocalModelRouting is the pure
679
+ // decision over its result. coords is only fetched when a ref exists.
680
+ const localModelCoords = localModelRef ? await getLocalModel(localModelRef) : null;
681
+ const localModelRouting = decideLocalModelRouting(localModelRef, localModelCoords, (n) => process.env[n]);
682
+ if (localModelRouting.kind === 'fallback') {
683
+ console.warn(`[focus-executor] Focus "${focusName}" ${enginePass} pass selected local model ` +
684
+ `${(localModelRef ?? '').slice(0, 8)} but it is not in the registry; falling back to the ` +
685
+ `per-product default model.`);
686
+ }
687
+ else if (localModelRouting.kind === 'skip') {
688
+ const { coords, envName } = localModelRouting;
689
+ // Fail closed: never spawn a local-model pass against a server whose API
690
+ // key env var is unset on the daemon host. Mark the already-created session
691
+ // terminal (mirroring the governor-denied / sandbox-unavailable paths so the
692
+ // row does not linger non-terminal), clean up the registered team state, and
693
+ // skip this spawn (a later poll retries once the operator sets the var).
694
+ // Surfaced loudly so the misconfiguration is actionable.
695
+ console.error(`[focus-executor] Cannot route "${focusName}" ${enginePass} pass to local model ` +
696
+ `"${coords.name}" (${coords.model} @ ${coords.baseUrl}): required API-key env var ` +
697
+ `${envName} is not set on the daemon host. Set ${envName} and re-run; skipping spawn.`);
698
+ await updateSession(session.id, {
699
+ status: 'failed',
700
+ exit_reason: `Required API-key env var ${envName} is not set for local model "${coords.name}"`,
701
+ exit_category: 'local_model_key_unset',
702
+ ended_at: new Date().toISOString(),
703
+ }).catch(updateErr => {
704
+ console.warn(`[focus-executor] Failed to update session after local-model key-unset:`, updateErr.message);
705
+ });
706
+ activeTeams.delete(focusId);
707
+ return;
708
+ }
709
+ else if (localModelRouting.kind === 'route') {
710
+ const { coords, envName } = localModelRouting;
711
+ const { codexHome } = writeLocalModelCodexHome(coords.id, {
712
+ baseUrl: coords.baseUrl,
713
+ model: coords.model,
714
+ wireApi: coords.wireApi ?? undefined,
715
+ apiKeyEnv: coords.apiKeyEnv ?? undefined,
716
+ });
717
+ spawnCodexHome = codexHome;
718
+ spawnCodexModel = coords.model;
719
+ console.log(`[focus-executor] Routing "${focusName}" ${enginePass} pass to local model ` +
720
+ `"${coords.name}" (${coords.model} @ ${coords.baseUrl}); CODEX_HOME=${codexHome}, ` +
721
+ `key env=${envName}.`);
722
+ }
723
+ // Model selection: directive override > resolved local model > pipeline default.
637
724
  // resolveEffectiveModel is exported for unit testing.
638
- const effectiveModel = resolveEffectiveModel(directiveModel, spawnCodexHome, config.codexModel, pipelineConfig?.model);
725
+ const effectiveModel = resolveEffectiveModel(directiveModel, spawnCodexHome, spawnCodexModel, pipelineConfig?.model);
639
726
  const effectivePipelineConfig = effectiveModel !== (pipelineConfig?.model ?? null)
640
727
  ? { ...pipelineConfig, model: effectiveModel }
641
728
  : pipelineConfig;