@gajae-code/coding-agent 0.11.10 → 0.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (249) hide show
  1. package/CHANGELOG.md +86 -2
  2. package/dist/types/cli/read-cli.d.ts +1 -0
  3. package/dist/types/cli.d.ts +8 -1
  4. package/dist/types/commands/deep-interview.d.ts +9 -0
  5. package/dist/types/commands/harness.d.ts +22 -0
  6. package/dist/types/commands/read.d.ts +6 -0
  7. package/dist/types/config/model-profile-activation.d.ts +1 -0
  8. package/dist/types/config/model-profile-contract.d.ts +2 -0
  9. package/dist/types/config/model-registry.d.ts +4 -0
  10. package/dist/types/config/provider-auth-health.d.ts +14 -0
  11. package/dist/types/config/provider-ranking.d.ts +59 -0
  12. package/dist/types/config/settings-schema.d.ts +86 -3
  13. package/dist/types/config/settings.d.ts +3 -0
  14. package/dist/types/extensibility/extensions/types.d.ts +43 -2
  15. package/dist/types/extensibility/shared-events.d.ts +6 -0
  16. package/dist/types/gjc-runtime/deep-interview-ambiguity.d.ts +5 -12
  17. package/dist/types/gjc-runtime/deep-interview-recorder.d.ts +17 -32
  18. package/dist/types/gjc-runtime/deep-interview-stage.d.ts +37 -0
  19. package/dist/types/gjc-runtime/deep-interview-state.d.ts +4 -135
  20. package/dist/types/gjc-runtime/gc-runtime.d.ts +1 -1
  21. package/dist/types/gjc-runtime/linux-proc.d.ts +22 -14
  22. package/dist/types/gjc-runtime/memory-guard-owner-claims.d.ts +47 -0
  23. package/dist/types/gjc-runtime/ralplan-runtime.d.ts +112 -1
  24. package/dist/types/gjc-runtime/state-runtime.d.ts +3 -1
  25. package/dist/types/gjc-runtime/state-writer.d.ts +5 -46
  26. package/dist/types/gjc-runtime/team-launch.d.ts +1 -1
  27. package/dist/types/gjc-runtime/team-runtime.d.ts +2 -1
  28. package/dist/types/gjc-runtime/team-store.d.ts +12 -0
  29. package/dist/types/gjc-runtime/team-worker-memory-guard.d.ts +92 -0
  30. package/dist/types/gjc-runtime/tmux-owner-isolation.d.ts +7 -0
  31. package/dist/types/gjc-runtime/ultragoal-receipt-freshness.d.ts +8 -0
  32. package/dist/types/gjc-runtime/workflow-manifest.d.ts +3 -5
  33. package/dist/types/internal-urls/local-root-gc.d.ts +2 -0
  34. package/dist/types/main.d.ts +1 -1
  35. package/dist/types/memories/index.d.ts +2 -0
  36. package/dist/types/modes/acp/acp-agent.d.ts +22 -9
  37. package/dist/types/modes/components/assistant-message.d.ts +3 -1
  38. package/dist/types/modes/components/irc-sidebar.d.ts +41 -0
  39. package/dist/types/modes/components/queue-pane.d.ts +8 -0
  40. package/dist/types/modes/components/queued-message-selector.d.ts +6 -0
  41. package/dist/types/modes/components/read-tool-group.d.ts +4 -4
  42. package/dist/types/modes/components/session-observer-overlay.d.ts +4 -0
  43. package/dist/types/modes/components/settings-selector.d.ts +2 -0
  44. package/dist/types/modes/components/tool-execution.d.ts +8 -0
  45. package/dist/types/modes/components/welcome.d.ts +1 -0
  46. package/dist/types/modes/controllers/event-controller.d.ts +3 -0
  47. package/dist/types/modes/interactive-mode.d.ts +7 -1
  48. package/dist/types/modes/irc-observation-ledger.d.ts +17 -1
  49. package/dist/types/modes/types.d.ts +2 -0
  50. package/dist/types/modes/utils/ui-helpers.d.ts +16 -0
  51. package/dist/types/runtime/memory-domain.d.ts +9 -0
  52. package/dist/types/runtime/memory-guard-contract.d.ts +71 -0
  53. package/dist/types/runtime/memory-guard.d.ts +39 -0
  54. package/dist/types/runtime/memory-limit.d.ts +11 -0
  55. package/dist/types/runtime-mcp/manager.d.ts +8 -0
  56. package/dist/types/runtime-mcp/smithery-auth.d.ts +5 -0
  57. package/dist/types/sdk/acp/final-text.d.ts +19 -0
  58. package/dist/types/sdk/acp/mcp.d.ts +23 -0
  59. package/dist/types/sdk/broker/lifecycle.d.ts +7 -0
  60. package/dist/types/sdk/bus/chat-daemon-control.d.ts +2 -1
  61. package/dist/types/sdk/bus/control-drain-lease.d.ts +52 -0
  62. package/dist/types/sdk/bus/index.d.ts +18 -2
  63. package/dist/types/sdk/bus/kind-aware-reconciliation.d.ts +37 -0
  64. package/dist/types/sdk/bus/prompt-reconciliation.d.ts +2 -1
  65. package/dist/types/sdk/bus/rate-limit-pool.d.ts +2 -0
  66. package/dist/types/sdk/bus/reconciliation-store.d.ts +65 -0
  67. package/dist/types/sdk/bus/telegram-daemon-contract.d.ts +6 -4
  68. package/dist/types/sdk/bus/telegram-daemon.d.ts +23 -3
  69. package/dist/types/sdk/host/control/operations.d.ts +2 -1
  70. package/dist/types/sdk/host/host.d.ts +2 -0
  71. package/dist/types/sdk/host/query/handlers.d.ts +5 -0
  72. package/dist/types/sdk/lifecycle-session.d.ts +10 -1
  73. package/dist/types/sdk/startup-capability.d.ts +6 -0
  74. package/dist/types/session/agent-session.d.ts +51 -19
  75. package/dist/types/session/fallback-chain-controller.d.ts +18 -2
  76. package/dist/types/session/internal/managed-session-scope.d.ts +27 -0
  77. package/dist/types/session/memory-guard-checkpoint-participant.d.ts +69 -0
  78. package/dist/types/session/session-manager.d.ts +59 -13
  79. package/dist/types/session/streaming-output.d.ts +60 -5
  80. package/dist/types/skill-state/active-state.d.ts +0 -4
  81. package/dist/types/skill-state/workflow-hud.d.ts +3 -0
  82. package/dist/types/task/executor.d.ts +6 -0
  83. package/dist/types/task/types.d.ts +36 -0
  84. package/dist/types/task/ultragoal-redteam-activation.d.ts +33 -0
  85. package/dist/types/tools/browser/launch.d.ts +7 -0
  86. package/dist/types/tools/fetch.d.ts +17 -1
  87. package/dist/types/tools/output-meta.d.ts +21 -1
  88. package/dist/types/tools/read-internals.d.ts +12 -0
  89. package/dist/types/tools/read.d.ts +45 -1
  90. package/dist/types/tools/resource-gc.d.ts +23 -0
  91. package/dist/types/tools/tool-result.d.ts +7 -1
  92. package/package.json +9 -13
  93. package/scripts/benchmark-sticky-viewport-pr1.ts +239 -0
  94. package/scripts/capture-sticky-viewport-showcase.ts +292 -0
  95. package/scripts/generate-sdk-operation-inventory.ts +4 -0
  96. package/scripts/run-test-manifest.ts +6 -4
  97. package/scripts/verify-gjc-sdk-canonicalization.ts +122 -18
  98. package/scripts/verify-sticky-viewport-showcase.ts +611 -0
  99. package/src/capability/index.ts +8 -0
  100. package/src/cli/args.ts +14 -8
  101. package/src/cli/fast-help.ts +1 -1
  102. package/src/cli/read-cli.ts +2 -1
  103. package/src/cli.ts +49 -2
  104. package/src/commands/deep-interview.ts +29 -9
  105. package/src/commands/harness.ts +35 -12
  106. package/src/commands/read.ts +11 -2
  107. package/src/commands/sdk.ts +91 -7
  108. package/src/commands/team.ts +1 -1
  109. package/src/config/model-profile-activation.ts +1 -0
  110. package/src/config/model-profile-contract.ts +13 -0
  111. package/src/config/model-profiles.ts +24 -0
  112. package/src/config/model-registry.ts +21 -2
  113. package/src/config/provider-auth-health.ts +42 -0
  114. package/src/config/provider-ranking.ts +119 -0
  115. package/src/config/settings-schema.ts +84 -3
  116. package/src/config/settings.ts +254 -108
  117. package/src/defaults/gjc/skills/deep-interview/SKILL.md +229 -82
  118. package/src/defaults/gjc/skills/ralplan/SKILL.md +78 -26
  119. package/src/defaults/gjc/skills/team/SKILL.md +1 -1
  120. package/src/defaults/gjc/skills/ultragoal/SKILL.md +26 -16
  121. package/src/eval/py/executor.ts +7 -2
  122. package/src/extensibility/extensions/runner.ts +4 -0
  123. package/src/extensibility/extensions/types.ts +42 -4
  124. package/src/extensibility/shared-events.ts +5 -0
  125. package/src/gjc-runtime/deep-interview-ambiguity.ts +47 -68
  126. package/src/gjc-runtime/deep-interview-recorder.ts +227 -310
  127. package/src/gjc-runtime/deep-interview-runtime.ts +109 -270
  128. package/src/gjc-runtime/deep-interview-stage.ts +1016 -0
  129. package/src/gjc-runtime/deep-interview-state.ts +12 -921
  130. package/src/gjc-runtime/gc-render.ts +1 -0
  131. package/src/gjc-runtime/gc-runtime.ts +11 -1
  132. package/src/gjc-runtime/linux-proc.ts +70 -36
  133. package/src/gjc-runtime/memory-guard-owner-claims.ts +389 -0
  134. package/src/gjc-runtime/ralplan-runtime.ts +979 -71
  135. package/src/gjc-runtime/state-runtime.ts +50 -12
  136. package/src/gjc-runtime/state-writer.ts +70 -222
  137. package/src/gjc-runtime/team-launch.ts +34 -5
  138. package/src/gjc-runtime/team-runtime.ts +970 -33
  139. package/src/gjc-runtime/team-store.ts +32 -0
  140. package/src/gjc-runtime/team-worker-memory-guard.ts +363 -0
  141. package/src/gjc-runtime/team-workers.ts +1 -0
  142. package/src/gjc-runtime/tmux-owner-isolation.ts +18 -0
  143. package/src/gjc-runtime/ultragoal-receipt-freshness.ts +20 -0
  144. package/src/gjc-runtime/ultragoal-runtime.ts +13 -7
  145. package/src/gjc-runtime/workflow-manifest.generated.json +97 -350
  146. package/src/gjc-runtime/workflow-manifest.ts +34 -179
  147. package/src/hooks/native-skill-hook.ts +17 -4
  148. package/src/hooks/skill-state.ts +1 -23
  149. package/src/internal-urls/docs-index.generated.ts +10 -11
  150. package/src/internal-urls/local-protocol.ts +23 -4
  151. package/src/internal-urls/local-root-gc.ts +127 -0
  152. package/src/main.ts +9 -5
  153. package/src/memories/index.ts +10 -0
  154. package/src/modes/DESIGN.md +47 -0
  155. package/src/modes/acp/acp-agent.ts +597 -67
  156. package/src/modes/acp/acp-event-mapper.ts +106 -12
  157. package/src/modes/acp/acp-mode.ts +39 -3
  158. package/src/modes/components/assistant-message.ts +123 -22
  159. package/src/modes/components/irc-sidebar.ts +176 -62
  160. package/src/modes/components/model-selector.ts +76 -5
  161. package/src/modes/components/notifications-settings-editor.ts +1 -1
  162. package/src/modes/components/oauth-selector.ts +42 -12
  163. package/src/modes/components/queue-pane.ts +55 -9
  164. package/src/modes/components/queued-message-selector.ts +53 -10
  165. package/src/modes/components/read-tool-group.ts +82 -14
  166. package/src/modes/components/session-observer-overlay.ts +187 -32
  167. package/src/modes/components/settings-selector.ts +60 -18
  168. package/src/modes/components/tool-execution.ts +138 -27
  169. package/src/modes/components/tool-status-header.ts +1 -4
  170. package/src/modes/components/welcome.ts +18 -3
  171. package/src/modes/controllers/command-controller.ts +4 -0
  172. package/src/modes/controllers/event-controller.ts +109 -27
  173. package/src/modes/controllers/extension-ui-controller.ts +23 -12
  174. package/src/modes/controllers/input-controller.ts +62 -6
  175. package/src/modes/controllers/selector-controller.ts +83 -37
  176. package/src/modes/interactive-mode.ts +127 -29
  177. package/src/modes/irc-observation-ledger.ts +71 -15
  178. package/src/modes/runtime-init.ts +20 -2
  179. package/src/modes/types.ts +2 -0
  180. package/src/modes/utils/ui-helpers.ts +94 -1
  181. package/src/prompts/agents/architect.md +9 -1
  182. package/src/prompts/agents/critic.md +9 -0
  183. package/src/prompts/agents/executor.md +1 -1
  184. package/src/prompts/system/system-prompt.md +0 -1
  185. package/src/prompts/tools/read.md +4 -2
  186. package/src/runtime/memory-domain.ts +66 -0
  187. package/src/runtime/memory-guard-contract.ts +73 -0
  188. package/src/runtime/memory-guard.ts +292 -0
  189. package/src/runtime/memory-limit.ts +50 -0
  190. package/src/runtime-mcp/manager.ts +26 -6
  191. package/src/runtime-mcp/smithery-auth.ts +17 -2
  192. package/src/runtime-mcp/smithery-connect.ts +11 -1
  193. package/src/sdk/acp/adapter.ts +8 -1
  194. package/src/sdk/acp/final-text.ts +40 -0
  195. package/src/sdk/acp/mcp.ts +26 -0
  196. package/src/sdk/broker/lifecycle.ts +107 -7
  197. package/src/sdk/bus/chat-daemon-cli.ts +2 -2
  198. package/src/sdk/bus/chat-daemon-control.ts +4 -3
  199. package/src/sdk/bus/config.ts +1 -1
  200. package/src/sdk/bus/control-drain-lease.ts +104 -0
  201. package/src/sdk/bus/index.ts +503 -60
  202. package/src/sdk/bus/kind-aware-reconciliation.ts +242 -0
  203. package/src/sdk/bus/prompt-reconciliation.ts +2 -1
  204. package/src/sdk/bus/rate-limit-pool.ts +8 -0
  205. package/src/sdk/bus/reconciliation-store.ts +224 -0
  206. package/src/sdk/bus/telegram-daemon-contract.ts +6 -4
  207. package/src/sdk/bus/telegram-daemon.ts +531 -53
  208. package/src/sdk/host/control/dispatch.ts +7 -1
  209. package/src/sdk/host/control/operations.ts +2 -1
  210. package/src/sdk/host/host.ts +25 -3
  211. package/src/sdk/host/query/handlers.ts +55 -0
  212. package/src/sdk/lifecycle-session.ts +19 -3
  213. package/src/sdk/mcp/server.ts +46 -18
  214. package/src/sdk/protocol/operation-inventory.generated.json +76 -0
  215. package/src/sdk/protocol/operation-registry.ts +8 -2
  216. package/src/sdk/session.ts +25 -2
  217. package/src/sdk/startup-capability.ts +6 -0
  218. package/src/session/agent-session.ts +720 -190
  219. package/src/session/fallback-chain-controller.ts +47 -8
  220. package/src/session/internal/managed-session-scope.ts +40 -10
  221. package/src/session/internal/native-publish-outcome.ts +8 -3
  222. package/src/session/memory-guard-checkpoint-participant.ts +131 -0
  223. package/src/session/session-manager.ts +1372 -42
  224. package/src/session/streaming-output.ts +262 -43
  225. package/src/setup/provider-onboarding.ts +19 -4
  226. package/src/skill-state/active-state.ts +0 -10
  227. package/src/skill-state/workflow-hud.ts +25 -2
  228. package/src/skill-state/workflow-mutation-guard.ts +65 -7
  229. package/src/task/executor.ts +11 -3
  230. package/src/task/index.ts +2 -0
  231. package/src/task/types.ts +22 -11
  232. package/src/task/ultragoal-redteam-activation.ts +75 -0
  233. package/src/tools/ask.ts +89 -69
  234. package/src/tools/browser/launch.ts +41 -6
  235. package/src/tools/fetch.ts +114 -23
  236. package/src/tools/output-meta.ts +176 -9
  237. package/src/tools/path-utils.ts +5 -1
  238. package/src/tools/read-internals.ts +44 -0
  239. package/src/tools/read.ts +1542 -310
  240. package/src/tools/resource-gc.ts +665 -125
  241. package/src/tools/tool-result.ts +14 -1
  242. package/src/web/search/providers/codex.ts +1 -1
  243. package/src/workflow/workflow-intent-diff.ts +4 -1
  244. package/dist/types/gjc-runtime/deep-interview-draft.d.ts +0 -8
  245. package/dist/types/gjc-runtime/deep-interview-payload.d.ts +0 -41
  246. package/dist/types/gjc-runtime/deep-interview-repair.d.ts +0 -17
  247. package/src/gjc-runtime/deep-interview-draft.ts +0 -843
  248. package/src/gjc-runtime/deep-interview-payload.ts +0 -262
  249. package/src/gjc-runtime/deep-interview-repair.ts +0 -1674
@@ -9,13 +9,15 @@ export interface AmbiguityClampResult {
9
9
  effective: number;
10
10
  clamped: boolean;
11
11
  }
12
- /** Compute the deterministic floor from integer units of persisted evidence. */
12
+ /** Compute the deterministic floor from the inner deep-interview `state` object. */
13
13
  export declare function computeAmbiguityFloor(inner: unknown): AmbiguityFloorBreakdown;
14
14
  /** Clamp an LLM-reported ambiguity to the deterministic floor: `max(reported, floor)`. */
15
15
  export declare function clampReportedAmbiguity(reported: number, floor: number): AmbiguityClampResult;
16
16
  /**
17
- * Legacy pure utility for migrations and explicit repair flows. The recorder does
18
- * not dispute facts when an answer is retracted: scored evidence is immutable.
17
+ * Mark every established fact recorded in `retractedRound` as disputed. This is the
18
+ * mechanical contradiction signal for answer retraction: when the user replaces an
19
+ * already-scored answer (A -> B pivot), the facts that answer established can no
20
+ * longer be trusted, so they raise the floor until re-confirmed or superseded.
19
21
  * Returns new arrays/objects; never mutates the input.
20
22
  */
21
23
  export declare function disputeFactsFromRetractedRound(facts: readonly unknown[], retractedRound: number): {
@@ -35,12 +37,3 @@ export interface AppliedAmbiguityFloor {
35
37
  * (state CLI write/reconcile, recorder) applies this immediately before persisting.
36
38
  */
37
39
  export declare function applyAmbiguityFloorToEnvelope(value: unknown): AppliedAmbiguityFloor;
38
- export type DeepInterviewAmbiguityMilestone = "initial" | "progress" | "refined" | "ready";
39
- export declare function deriveAmbiguityMilestone(effectiveUnits: number, thresholdUnits: number): DeepInterviewAmbiguityMilestone;
40
- export declare function scoreToUnits(score: number): number;
41
- export declare function weightedAmbiguityUnits(scores: {
42
- goal: number;
43
- constraints: number;
44
- criteria: number;
45
- context?: number;
46
- }, type: "greenfield" | "brownfield"): number;
@@ -1,4 +1,4 @@
1
- import { type DeepInterviewEstablishedFact, type DeepInterviewIntentItem, type DeepInterviewIntentSubstitution, type DeepInterviewRoundRecord, type DeepInterviewRoundResultV1, type DeepInterviewStateEnvelope, type DeepInterviewTriggerMetadata } from "./deep-interview-state";
1
+ import { type DeepInterviewEstablishedFact, type DeepInterviewIntentItem, type DeepInterviewIntentSubstitution, type DeepInterviewRoundRecord, type DeepInterviewStateEnvelope, type DeepInterviewTriggerMetadata } from "./deep-interview-state";
2
2
  export * from "./deep-interview-ambiguity";
3
3
  export * from "./deep-interview-state";
4
4
  /**
@@ -40,8 +40,6 @@ export interface DeepInterviewScoringInput {
40
40
  scores: Record<string, number>;
41
41
  ambiguity: number;
42
42
  triggers?: DeepInterviewTriggerMetadata[];
43
- /** Complete native round result for typed callers. */
44
- roundResult?: DeepInterviewRoundResultV1;
45
43
  }
46
44
  export type AppendOrMergeAction = "created" | "noop" | "replaced";
47
45
  export interface AppendOrMergeResult {
@@ -69,9 +67,11 @@ export interface TransitionValidationResult {
69
67
  }
70
68
  export declare function buildAnswerShell(input: DeepInterviewAnswerInput, now?: string): DeepInterviewRoundRecord;
71
69
  /**
72
- * Append-or-merge by `round_key`. An answer is a no-op only when its complete
73
- * canonical shell identity matches; a scored record is immutable evidence and
74
- * cannot be replaced by a late answer.
70
+ * Append-or-merge by `round_key`. Exactly one record per key:
71
+ * - no existing record -> append (`created`);
72
+ * - identical question_hash + answer_hash -> deterministic no-op (`noop`);
73
+ * - same key, different hashes -> deterministic replacement of the prior shell
74
+ * (`replaced`); the prior answer for that key is superseded and lifecycle resets.
75
75
  */
76
76
  export declare function appendOrMergeRound(rounds: readonly DeepInterviewRoundRecord[], shell: DeepInterviewRoundRecord): AppendOrMergeResult;
77
77
  /**
@@ -94,43 +94,28 @@ export declare function ensureDeepInterviewStateShape(value: unknown): DeepInter
94
94
  export declare function projectCompactState(value: unknown, options?: {
95
95
  lastN?: number;
96
96
  }): DeepInterviewCompactState;
97
- interface RecorderMutationOptions {
98
- sessionId?: string;
99
- expectedRevision?: number;
100
- }
101
- export interface DeepInterviewPostCommitWarning {
102
- code: "DI_POST_COMMIT_AUDIT_FAILED" | "DI_POST_COMMIT_ACTIVITY_FAILED" | "DI_POST_COMMIT_HUD_FAILED";
103
- message: string;
104
- }
105
- export declare function runDeepInterviewPostCommitEffects(options: {
106
- cwd: string;
107
- statePath: string;
108
- sessionId: string;
109
- envelope: Record<string, unknown>;
110
- revision: number;
111
- writer: string;
112
- auditWarnings?: readonly {
113
- code: "DI_POST_COMMIT_AUDIT_FAILED";
114
- message: string;
115
- }[];
116
- }): Promise<DeepInterviewPostCommitWarning[]>;
117
97
  /** Refresh the best-effort HUD cache from persisted deep-interview state. */
118
98
  export declare function syncDeepInterviewRecorderHud(cwd: string, statePath: string, sessionId: string | undefined): Promise<void>;
119
99
  /**
120
100
  * Record an `answered` shell for one round (append-or-merge by durable key).
121
101
  *
122
- * Replacing an already-scored answer is rejected with
123
- * `DI_ANSWER_LIFECYCLE_CONFLICT`; scored evidence is immutable.
102
+ * Retraction dynamics: replacing an already-`scored` answer is a mechanical
103
+ * contradiction signal (the user pivoted). The facts that round established are
104
+ * marked disputed, which raises the deterministic ambiguity floor immediately —
105
+ * without waiting for the LLM scorer to self-report a trigger.
124
106
  */
125
- export declare function appendOrMergeDeepInterviewRound(cwd: string, statePath: string, input: DeepInterviewAnswerInput, options?: RecorderMutationOptions): Promise<{
107
+ export declare function appendOrMergeDeepInterviewRound(cwd: string, statePath: string, input: DeepInterviewAnswerInput, options?: {
108
+ sessionId?: string;
109
+ }): Promise<{
126
110
  action: AppendOrMergeAction;
127
111
  record: DeepInterviewRoundRecord;
128
- warnings: DeepInterviewPostCommitWarning[];
112
+ disputedFactIds?: string[];
129
113
  }>;
130
114
  /** Merge scoring output into the same round record, transitioning to `scored`. */
131
- export declare function enrichDeepInterviewRoundScoring(cwd: string, statePath: string, input: DeepInterviewScoringInput, options?: RecorderMutationOptions): Promise<{
115
+ export declare function enrichDeepInterviewRoundScoring(cwd: string, statePath: string, input: DeepInterviewScoringInput, options?: {
116
+ sessionId?: string;
117
+ }): Promise<{
132
118
  record: DeepInterviewRoundRecord;
133
- warnings: DeepInterviewPostCommitWarning[];
134
119
  }>;
135
120
  /** Compact projection so callers read a slice instead of the full transcript. */
136
121
  export declare function readDeepInterviewStateCompact(statePath: string, options?: {
@@ -0,0 +1,37 @@
1
+ import { CommandError } from "./workflow-cli-common";
2
+ export declare const DEEP_INTERVIEW_STAGE_TRANSITIONS: readonly ["initialize-context", "record-round", "update-facts", "merge-state"];
3
+ export type DeepInterviewStageTransition = (typeof DEEP_INTERVIEW_STAGE_TRANSITIONS)[number];
4
+ declare const DRAFT_VERSION = 1;
5
+ export type DeepInterviewStageErrorCode = "DI_STAGE_USAGE" | "DI_STAGE_INPUT_INVALID" | "DI_STAGE_SESSION_REQUIRED" | "DI_STAGE_DRAFT_EXISTS" | "DI_STAGE_NO_DRAFT" | "DI_STAGE_DRAFT_CORRUPT" | "DI_STAGE_STATE_MISSING" | "DI_STAGE_STATE_CORRUPT" | "DI_STAGE_REVISION_CONFLICT" | "DI_STAGE_MERGE_REJECTED";
6
+ export declare class DeepInterviewStageError extends CommandError {
7
+ readonly code: DeepInterviewStageErrorCode;
8
+ readonly recovery?: string | undefined;
9
+ constructor(code: DeepInterviewStageErrorCode, message: string, recovery?: string | undefined);
10
+ }
11
+ export interface DeepInterviewStageDraft {
12
+ version: typeof DRAFT_VERSION;
13
+ draft_id: string;
14
+ session_id: string;
15
+ transition: DeepInterviewStageTransition;
16
+ /** State revision the draft was staged against; `apply` CAS-checks this. */
17
+ staged_against_revision: number;
18
+ /**
19
+ * Canonical content SHA-256 of the state the draft was staged against. Revision
20
+ * alone cannot catch sanctioned writers that do not bump `state_revision`
21
+ * (seed/spec-persistence), so `apply` requires BOTH to match.
22
+ */
23
+ staged_against_sha256: string;
24
+ payload: Record<string, unknown>;
25
+ created_at: string;
26
+ }
27
+ export interface DeepInterviewStageCommandResult {
28
+ status: number;
29
+ stdout?: string;
30
+ stderr?: string;
31
+ }
32
+ export declare function deepInterviewDraftPath(cwd: string, sessionId: string): string;
33
+ export declare const DEEP_INTERVIEW_STAGE_VERBS: readonly ["stage", "check", "apply", "discard", "read", "write", "clear", "handoff"];
34
+ export type DeepInterviewStageVerb = (typeof DEEP_INTERVIEW_STAGE_VERBS)[number];
35
+ export declare function isDeepInterviewStageVerb(value: string | undefined): value is DeepInterviewStageVerb;
36
+ export declare function runDeepInterviewStageCommand(verb: DeepInterviewStageVerb, args: readonly string[], cwd?: string): Promise<DeepInterviewStageCommandResult>;
37
+ export {};
@@ -1,4 +1,3 @@
1
- import { computeAmbiguityFloor, type DeepInterviewAmbiguityMilestone } from "./deep-interview-ambiguity";
2
1
  /**
3
2
  * Pure, dependency-free foundation for deep-interview state shape.
4
3
  *
@@ -36,6 +35,10 @@ export interface DeepInterviewTriggerMetadata {
36
35
  status: DeepInterviewTriggerStatus;
37
36
  component: string;
38
37
  dimension: string;
38
+ priorDimensionScore?: number;
39
+ newDimensionScore?: number;
40
+ priorAmbiguity?: number;
41
+ newAmbiguity?: number;
39
42
  evidence?: string;
40
43
  contradictedFactId?: string;
41
44
  /** Required when status is `disputed` or `unresolved` to exempt the invariant. */
@@ -65,11 +68,9 @@ export interface DeepInterviewRoundRecord {
65
68
  /** Deterministic floor in effect when this round was scored, when it clamped. */
66
69
  ambiguity_floor?: number;
67
70
  triggers?: DeepInterviewTriggerMetadata[];
68
- round_result_digest?: string;
69
71
  }
70
72
  export interface DeepInterviewStateEnvelope {
71
73
  threshold?: number;
72
- threshold_units?: number;
73
74
  threshold_source?: string;
74
75
  state?: Record<string, unknown>;
75
76
  [key: string]: unknown;
@@ -196,135 +197,3 @@ export declare function assertDeepInterviewIntentReview(value: unknown, locked:
196
197
  round: unknown;
197
198
  answer_hash: unknown;
198
199
  }[]): asserts value is DeepInterviewIntentReview;
199
- export type DeepInterviewDimension = "goal" | "constraints" | "criteria" | "context";
200
- export type DeepInterviewResolution = "auto_research_accepted" | "auto_answer" | "direct" | "refined" | "cited_confirmation";
201
- export interface DeepInterviewFactOperation {
202
- op: "add" | "dispute" | "supersede";
203
- id: string;
204
- statement?: string;
205
- component?: string;
206
- dimension?: DeepInterviewDimension;
207
- evidence?: string;
208
- target_id?: string;
209
- }
210
- export interface DeepInterviewOntologyEntity {
211
- id: string;
212
- name: string;
213
- type: string;
214
- fields: string[];
215
- }
216
- export interface DeepInterviewOntologyRelationship {
217
- id: string;
218
- from_entity_id: string;
219
- to_entity_id: string;
220
- type: string;
221
- }
222
- export interface DeepInterviewOntologyReasoning {
223
- statement: string;
224
- evidence?: string;
225
- }
226
- export interface DeepInterviewOntologyInput {
227
- entities: DeepInterviewOntologyEntity[];
228
- relationships: DeepInterviewOntologyRelationship[];
229
- reasoning: DeepInterviewOntologyReasoning[];
230
- }
231
- export interface DeepInterviewComponentUpdate {
232
- component_id: string;
233
- scores: Record<DeepInterviewDimension, number>;
234
- }
235
- /**
236
- * Optional legacy assertions accepted only when they agree with the native
237
- * target. The persisted target is always derived from component scores.
238
- */
239
- export interface DeepInterviewTargetingInput {
240
- target_component_id?: string;
241
- target_dimension?: DeepInterviewDimension;
242
- weakest_component_id?: string;
243
- weakest_dimension?: DeepInterviewDimension;
244
- last_targeted_component_id?: string | null;
245
- }
246
- export interface DeepInterviewRoundBookkeeping {
247
- resolution: DeepInterviewResolution;
248
- round_ids?: string[];
249
- counter_deltas?: Record<string, number>;
250
- }
251
- /**
252
- * Closed evidence submitted for one scoring transaction. All convergence values
253
- * (ambiguity, floor, milestone, ontology counts, rotation, and streak) are
254
- * native-derived and intentionally cannot be supplied here.
255
- */
256
- export interface DeepInterviewRoundResultV1 {
257
- global_scores: Record<DeepInterviewDimension, number>;
258
- component_updates?: DeepInterviewComponentUpdate[];
259
- targeting?: DeepInterviewTargetingInput;
260
- triggers?: DeepInterviewTriggerMetadata[];
261
- fact_ops?: DeepInterviewFactOperation[];
262
- ontology?: DeepInterviewOntologyInput | DeepInterviewOntologyEntity[];
263
- bookkeeping?: DeepInterviewRoundBookkeeping;
264
- /** Compatibility adapter for recorder callers; never persisted as the v1 wire shape. */
265
- component_scores?: Record<string, Record<DeepInterviewDimension, number>>;
266
- auto_answered?: boolean;
267
- }
268
- /**
269
- * Version 1 native projection returned by `apply-round-result` as
270
- * `native_projection`. This is the complete renderable convergence surface;
271
- * callers must not derive or supplement it from candidate scorer input.
272
- */
273
- export interface DeepInterviewRoundResultProjection {
274
- score_units: Partial<Record<DeepInterviewDimension, number>>;
275
- weighted_ambiguity: number;
276
- weighted_ambiguity_units: number;
277
- floor: number;
278
- floor_units: number;
279
- floor_cause: ReturnType<typeof computeAmbiguityFloor>;
280
- effective_ambiguity: number;
281
- effective_ambiguity_units: number;
282
- prior_effective_ambiguity: number | null;
283
- direction: "increased" | "decreased" | "unchanged" | "initial";
284
- ambiguity_milestone: DeepInterviewAmbiguityMilestone;
285
- topology: unknown;
286
- topology_counts: {
287
- active: number;
288
- deferred: number;
289
- total: number;
290
- };
291
- ontology: unknown;
292
- ontology_counts: {
293
- stable: number;
294
- changed: number;
295
- new: number;
296
- basis: string;
297
- };
298
- targeting: {
299
- target_component_id: string | null;
300
- target_dimension: DeepInterviewDimension | null;
301
- last_targeted_component_id: string | null;
302
- };
303
- transition: {
304
- round_key: string;
305
- lifecycle: "scored";
306
- auto_answer_streak: number;
307
- };
308
- }
309
- export type DeepInterviewApplyRoundResult = {
310
- kind: "noop";
311
- envelope: DeepInterviewStateEnvelope;
312
- projection?: DeepInterviewRoundResultProjection;
313
- } | {
314
- kind: "write";
315
- envelope: DeepInterviewStateEnvelope;
316
- projection: DeepInterviewRoundResultProjection;
317
- };
318
- /** Strict UTF-8 JSON serialization used by v1 replay digests. */
319
- export declare function canonicalDeepInterviewJson(value: unknown): string;
320
- export declare function deepInterviewRoundResultDigest(input: {
321
- round: number;
322
- question_id: string;
323
- round_id?: string | null;
324
- result: unknown;
325
- }): string;
326
- /** Complete persisted answer identity; omitted optional values normalize to null. */
327
- export declare function deepInterviewAnswerIdentityEqual(a: Pick<DeepInterviewRoundRecord, "round" | "round_key" | "round_id" | "question_id" | "component" | "dimension" | "question_text" | "question_hash" | "selected_options" | "custom_input">, b: Pick<DeepInterviewRoundRecord, "round" | "round_key" | "round_id" | "question_id" | "component" | "dimension" | "question_text" | "question_hash" | "selected_options" | "custom_input">): boolean;
328
- /** Apply one closed v1 scoring round. The input contains evidence only; all convergence state is derived here. */
329
- export declare function applyDeepInterviewRoundResultV1(envelopeValue: unknown, roundKey: string, result: DeepInterviewRoundResultV1, now: string): DeepInterviewApplyRoundResult;
330
- export declare function validateDeepInterviewV1Envelope(value: Record<string, unknown>): void;
@@ -12,7 +12,7 @@
12
12
  * error all mean KEEP — a live process is never signalled or killed.
13
13
  * - Dry-run by default: nothing is deleted unless `--prune`/`--force`.
14
14
  */
15
- export type GcStore = "harness_leases" | "team_workers" | "file_locks" | "tmux_sessions" | "registry_entries";
15
+ export type GcStore = "harness_leases" | "team_workers" | "file_locks" | "tmux_sessions" | "registry_entries" | "local_roots";
16
16
  export declare const GC_STORES: readonly GcStore[];
17
17
  /** Why a probed pid is kept instead of treated as dead. */
18
18
  export type GcPidKeepReason = "alive" | "eperm" | "unknown";
@@ -1,29 +1,37 @@
1
1
  /**
2
- * Shared helpers for reading Linux `/proc/<pid>/stat` process start time.
2
+ * Shared helpers for reading Linux `/proc/<pid>/stat` process identity fields.
3
3
  *
4
4
  * The `comm` field (field 2, wrapped in parentheses) may itself contain spaces
5
5
  * and parentheses, so the only robust anchor is the *last* `)` in the stat
6
6
  * string. Field 22 (the process start time in clock ticks since boot) is the
7
- * 20th whitespace-separated token after that closing paren (index 19).
8
- *
9
- * Every caller previously parsed this format independently, with subtly
10
- * different failure handling. This module fails closed: any malformed input
11
- * (missing `)`, non-numeric field 22, unreadable `/proc` file, non-Linux
12
- * platform) yields `null` rather than an inconsistent sentinel.
13
- */
14
- /**
15
- * Parse field 22 (process start time, in clock ticks since boot) from one
16
- * `/proc/<pid>/stat` record. Returns the raw numeric token, or `null` when the
17
- * record shape is malformed or field 22 is absent/non-numeric.
7
+ * 20th whitespace-separated token after that closing paren (index 19). Field 7
8
+ * (`tty_nr`) is the 5th token after the closing paren (index 4).
18
9
  */
10
+ export interface LinuxProcStatIdentity {
11
+ startTime: string;
12
+ ttyDevice: string;
13
+ }
14
+ export type LinuxProcPidProbeResult = ({
15
+ kind: "live";
16
+ } & LinuxProcStatIdentity) | {
17
+ kind: "absent";
18
+ } | {
19
+ kind: "unverifiable";
20
+ reason: "unsupported_platform" | "invalid_pid" | "permission_denied" | "read_error" | "malformed_stat";
21
+ };
22
+ /** Parse field 22 (start time) from a `/proc/<pid>/stat` record. */
19
23
  export declare function parseLinuxProcStartTime(stat: string | null | undefined): string | null;
24
+ /** Parse field 7 (`tty_nr`) from a `/proc/<pid>/stat` record. */
25
+ export declare function parseLinuxProcTtyDevice(stat: string | null | undefined): string | null;
26
+ export declare function probeLinuxProcPidSync(pid: number): LinuxProcPidProbeResult;
27
+ export declare function probeLinuxProcPid(pid: number): Promise<LinuxProcPidProbeResult>;
20
28
  /**
21
29
  * Read `/proc/<pid>/stat` synchronously and return the parsed start time.
22
- * Returns `null` on non-Linux platforms, unreadable files, or malformed input.
30
+ * Returns `null` when the probe is absent or unverifiable.
23
31
  */
24
32
  export declare function readLinuxProcStartTimeSync(pid: number): string | null;
25
33
  /**
26
34
  * Read `/proc/<pid>/stat` asynchronously and return the parsed start time.
27
- * Returns `null` on non-Linux platforms, unreadable files, or malformed input.
35
+ * Returns `null` when the probe is absent or unverifiable.
28
36
  */
29
37
  export declare function readLinuxProcStartTime(pid: number): Promise<string | null>;
@@ -0,0 +1,47 @@
1
+ import { type LinuxProcPidProbeResult } from "./linux-proc";
2
+ declare const MEMORY_GUARD_CLAIM_RESOURCES: readonly ["writer", "tty"];
3
+ type MemoryGuardClaimResource = (typeof MEMORY_GUARD_CLAIM_RESOURCES)[number];
4
+ export interface MemoryGuardClaimOwner {
5
+ sessionId: string;
6
+ generation: string;
7
+ runId: string;
8
+ childToken: string;
9
+ pid: number;
10
+ processStartTime: string;
11
+ ttyDevice: string;
12
+ }
13
+ export interface MemoryGuardClaimsLease {
14
+ writerEpoch: number;
15
+ ttyEpoch: number;
16
+ owner: MemoryGuardClaimOwner;
17
+ claimStorePath: string;
18
+ }
19
+ export declare function isMemoryGuardClaimsLease(value: unknown): value is MemoryGuardClaimsLease;
20
+ export declare function isMemoryGuardClaimsLeaseForStateDir(value: unknown, stateDir: string): value is MemoryGuardClaimsLease;
21
+ export type MemoryGuardClaimsReleasedProof = MemoryGuardClaimsLease;
22
+ interface PersistedMemoryGuardClaimRow {
23
+ resource: MemoryGuardClaimResource;
24
+ epoch: number;
25
+ session_id: string;
26
+ generation: string;
27
+ run_id: string;
28
+ child_token: string;
29
+ pid: number;
30
+ process_start_time: string;
31
+ tty_device: string;
32
+ acquired_at: string;
33
+ }
34
+ export interface MemoryGuardOwnerClaimsDeps {
35
+ probePid(pid: number): Promise<LinuxProcPidProbeResult>;
36
+ now(): string;
37
+ }
38
+ export declare function memoryGuardClaimsDatabaseFile(stateDir: string, sessionId: string): string;
39
+ export declare function acquireMemoryGuardClaims(stateDir: string, owner: MemoryGuardClaimOwner, deps?: MemoryGuardOwnerClaimsDeps): Promise<MemoryGuardClaimsLease>;
40
+ export declare function releaseMemoryGuardClaims(stateDir: string, claim: MemoryGuardClaimsLease): Promise<void>;
41
+ export declare function probeMemoryGuardClaimsReleased(stateDir: string, owner: MemoryGuardClaimOwner, deps?: MemoryGuardOwnerClaimsDeps): Promise<MemoryGuardClaimsReleasedProof>;
42
+ export interface PersistedMemoryGuardClaimsSnapshot {
43
+ epoch: number;
44
+ claims: PersistedMemoryGuardClaimRow[];
45
+ }
46
+ export declare function readMemoryGuardClaimsForTest(stateDir: string, sessionId: string): Promise<PersistedMemoryGuardClaimsSnapshot>;
47
+ export {};
@@ -1,3 +1,4 @@
1
+ import { type RalplanIndexRow } from "./ledger-event-renderer";
1
2
  /**
2
3
  * Native implementation of `gjc ralplan`.
3
4
  *
@@ -12,7 +13,7 @@
12
13
  *
13
14
  * 2. **Artifact write**: `gjc ralplan --write --stage <type> --stage_n <N>
14
15
  * (--artifact <path-or-string> | --artifact-env GJC_RALPLAN_ARTIFACT)
15
- * [--run-id <id>] [--session-id <id>] [--json]` persists Planner / Architect
16
+ * [--run-id <id>] [--session-id <id>] [--lane-verdict <token>] [--json]` persists Planner / Architect
16
17
  * / Critic / revision / post-interview / ADR / final markdown under `.gjc/plans/ralplan/<run-id>/`, maintains
17
18
  * an `index.jsonl` audit log, copies `final` stages to `pending-approval.md`, and advances
18
19
  * the HUD chip to reflect the latest persisted stage.
@@ -22,5 +23,115 @@ export interface RalplanCommandResult {
22
23
  stdout?: string;
23
24
  stderr?: string;
24
25
  }
26
+ /** Default consensus iterations (planner + revision openers) per run. Matches SKILL.md re-review cap. */
27
+ export declare const RALPLAN_DEFAULT_MAX_ITERATIONS = 5;
28
+ /** Inclusive upper bound for `gjc.ralplan.maxIterations` settings overrides. */
29
+ export declare const RALPLAN_MAX_ITERATIONS_LIMIT = 20;
30
+ /** Operator-visible stuck signal for headless/CI orchestration (#3165). */
31
+ export declare const PLANNING_STUCK_MARKER = "PLANNING-STUCK";
32
+ /** Default architect/critic review passes per consensus iteration. */
33
+ export declare const RALPLAN_DEFAULT_MAX_REVIEW_PASSES_PER_LANE = 1;
34
+ /** Inclusive upper bound for `gjc.ralplan.maxReviewPassesPerLane` settings overrides. */
35
+ export declare const RALPLAN_MAX_REVIEW_PASSES_PER_LANE_LIMIT = 10;
36
+ export type RalplanIterationCapDecision = {
37
+ allowed: true;
38
+ currentIterations: number;
39
+ projectedIterations: number;
40
+ maxIterations: number;
41
+ } | {
42
+ allowed: false;
43
+ currentIterations: number;
44
+ projectedIterations: number;
45
+ maxIterations: number;
46
+ reason: string;
47
+ };
48
+ /**
49
+ * Pure consensus-iteration budget gate (#3165).
50
+ *
51
+ * A `planner` or `revision` write opens a new iteration (same definition as
52
+ * `summarizeRalplanIndex`). Other stages never open iterations and are always
53
+ * allowed by this gate — including `final` after the cap is already reached.
54
+ *
55
+ * `iterationFloor` raises the observed opener count when on-disk evidence or a
56
+ * recovered ledger is higher than the parsed index (fail-closed vs wipe/truncate).
57
+ */
58
+ export declare function evaluateRalplanIterationCap(input: {
59
+ rows: readonly RalplanIndexRow[];
60
+ stage: string;
61
+ maxIterations?: number;
62
+ /** Minimum opener count (e.g. on-disk stage-*-{planner,revision}.md). */
63
+ iterationFloor?: number;
64
+ }): RalplanIterationCapDecision;
65
+ export type RalplanReviewLane = "architect" | "critic";
66
+ export type RalplanReviewLaneBudgetDecision = {
67
+ allowed: true;
68
+ lane?: RalplanReviewLane;
69
+ currentPasses: number;
70
+ projectedPasses: number;
71
+ maxReviewPassesPerLane: number;
72
+ finalSlot: boolean;
73
+ ledgerNote?: string;
74
+ } | {
75
+ allowed: false;
76
+ lane: RalplanReviewLane;
77
+ currentPasses: number;
78
+ projectedPasses: number;
79
+ maxReviewPassesPerLane: number;
80
+ finalSlot: false;
81
+ ledgerNote?: string;
82
+ reason: string;
83
+ };
84
+ /**
85
+ * Pure per-lane review-pass budget gate. Architect and critic passes are limited
86
+ * within the current consensus iteration; all other stages remain unconditionally
87
+ * available as escalation paths.
88
+ */
89
+ export declare function evaluateRalplanReviewLaneBudget(input: {
90
+ rows: readonly RalplanIndexRow[];
91
+ stage: string;
92
+ maxReviewPassesPerLane?: unknown;
93
+ onDiskLaneCounts?: {
94
+ architect: number;
95
+ critic: number;
96
+ };
97
+ }): RalplanReviewLaneBudgetDecision;
98
+ /**
99
+ * Count on-disk planner/revision stage artifacts for a run. Used as a floor when
100
+ * `index.jsonl` is missing, empty, truncated, or otherwise under-counts openers.
101
+ */
102
+ export declare function countRalplanOnDiskOpeners(cwd: string, sessionId: string, runId: string): Promise<number>;
103
+ /**
104
+ * Count on-disk Architect/Critic stage artifacts for a run. This is the
105
+ * fail-closed floor for a missing, truncated, or malformed `index.jsonl`.
106
+ */
107
+ export declare function countRalplanOnDiskLaneArtifacts(cwd: string, sessionId: string, runId: string): Promise<{
108
+ architect: number;
109
+ critic: number;
110
+ }>;
111
+ /**
112
+ * Load index rows for cap enforcement. Unlike HUD reads, returns structural
113
+ * signals so callers can fail closed when the ledger is empty/malformed while
114
+ * opener artifacts already exist on disk.
115
+ */
116
+ export declare function loadRalplanIndexForCap(cwd: string, sessionId: string, runId: string): Promise<{
117
+ rows: RalplanIndexRow[];
118
+ indexPresent: boolean;
119
+ parseableLines: number;
120
+ rawLineCount: number;
121
+ rawText?: string;
122
+ }>;
123
+ /**
124
+ * Resolve ralplan consensus iteration cap. Project `./.gjc/settings.json` overrides
125
+ * user settings, else default 5.
126
+ */
127
+ export declare function resolveRalplanMaxIterations(cwd: string): Promise<{
128
+ maxIterations: number;
129
+ source: string;
130
+ }>;
131
+ /** Resolve the per-lane review-pass budget with project-over-user precedence. */
132
+ export declare function resolveRalplanMaxReviewPassesPerLane(cwd: string): Promise<{
133
+ maxReviewPassesPerLane: number;
134
+ source: string;
135
+ }>;
25
136
  export declare function isRalplanArtifactWriteInvocation(args: readonly string[]): boolean;
26
137
  export declare function runNativeRalplanCommand(args: string[], cwd?: string): Promise<RalplanCommandResult>;
@@ -11,6 +11,7 @@ export interface StateCommandResult {
11
11
  stdout?: string;
12
12
  stderr?: string;
13
13
  }
14
+ type StateWarningSink = (warning: string) => void;
14
15
  /**
15
16
  * Reconcile a workflow skill's mode-state + active-state/HUD from a caller-derived
16
17
  * payload. Unlike `gjc state write`, this is a derived repair: callers reconcile from
@@ -34,5 +35,6 @@ export declare function reconcileWorkflowSkillState(options: {
34
35
  }): Promise<{
35
36
  stateFile: string;
36
37
  }>;
37
- export declare function readWorkflowStateJson(cwd: string, skill: CanonicalGjcWorkflowSkill, sessionId?: string): Promise<Record<string, unknown>>;
38
+ export declare function readWorkflowStateJson(cwd: string, skill: CanonicalGjcWorkflowSkill, sessionId?: string, onWarning?: StateWarningSink): Promise<Record<string, unknown>>;
38
39
  export declare function runNativeStateCommand(args: string[], cwd?: string): Promise<StateCommandResult>;
40
+ export {};
@@ -46,47 +46,6 @@ export interface WorkflowEnvelopeIntegrityMismatch {
46
46
  expected: string;
47
47
  actual: string;
48
48
  }
49
- export type WorkflowReceiptVerification = "legacy" | "native-valid" | "receipt-malformed" | "receipt-missing" | "checksum-mismatch";
50
- export interface GuardedWorkflowEnvelopeTransformOptions extends StateWriterOptions {
51
- expectedRevision: number;
52
- /** Additional native schema validation applied to both current and candidate envelopes. */
53
- validate?: (value: Record<string, unknown>, legacy: boolean) => void;
54
- transform: (current: Record<string, unknown>, context: {
55
- revision: number;
56
- legacy: boolean;
57
- }) => {
58
- kind: "noop";
59
- } | {
60
- kind: "write";
61
- value: Record<string, unknown>;
62
- } | Promise<{
63
- kind: "noop";
64
- } | {
65
- kind: "write";
66
- value: Record<string, unknown>;
67
- }>;
68
- }
69
- export interface GuardedWorkflowEnvelopeWarning {
70
- code: "DI_POST_COMMIT_AUDIT_FAILED";
71
- message: string;
72
- }
73
- export type GuardedWorkflowEnvelopeTransformResult = {
74
- path: string;
75
- written: false;
76
- reason: "noop";
77
- revision: number;
78
- warnings: [];
79
- } | {
80
- path: string;
81
- written: true;
82
- revision: number;
83
- stamped: Record<string, unknown>;
84
- warnings: GuardedWorkflowEnvelopeWarning[];
85
- };
86
- export declare class GuardedWorkflowEnvelopeError extends Error {
87
- readonly code: string;
88
- constructor(code: string);
89
- }
90
49
  export interface WorkflowTransactionJournal {
91
50
  version: 1;
92
51
  mutation_id: string;
@@ -103,7 +62,6 @@ export interface GuardedStateWriterOptions extends StateWriterOptions {
103
62
  policy: StateWritePolicy;
104
63
  expectedRevision?: number;
105
64
  sourceRevision?: number;
106
- lockHeld?: boolean;
107
65
  }
108
66
  export type GuardedWriteResult = {
109
67
  path: string;
@@ -121,13 +79,17 @@ export interface StateWriterOptions {
121
79
  receipt?: StateWriterReceiptContext;
122
80
  audit?: StateWriterAuditContext;
123
81
  sourceRevision?: number;
124
- orderingRevision?: number;
125
82
  /**
126
83
  * Cross-process lock tuning for read-modify-write paths that route through
127
84
  * `withWorkflowStateLock` / `updateJsonAtomic`. Omit for the hardened
128
85
  * `withFileLock` defaults.
129
86
  */
130
87
  lock?: FileLockOptions;
88
+ /**
89
+ * Caller already holds the workflow state lock for this target path (via
90
+ * `withWorkflowStateLock`). Skip re-acquisition to avoid self-deadlock.
91
+ */
92
+ lockHeld?: boolean;
131
93
  }
132
94
  export declare class StateWriteConflictError extends Error {
133
95
  readonly path: string;
@@ -183,8 +145,6 @@ export type StrictMutationReadResult = {
183
145
  };
184
146
  export declare function readExistingStateForMutation(filePath: string): Promise<StrictMutationReadResult>;
185
147
  export declare function workflowEnvelopeContentSha256(value: unknown): string;
186
- export declare function isNativeDeepInterviewV1(value: Record<string, unknown>): boolean;
187
- export declare function verifyWorkflowEnvelopeReceiptValue(value: unknown, filePath: string): WorkflowReceiptVerification;
188
148
  export declare function stampWorkflowEnvelopeChecksum<T>(value: T, filePath: string, computedAt?: string): T;
189
149
  export declare function detectWorkflowEnvelopeIntegrityMismatch(filePath: string): Promise<WorkflowEnvelopeIntegrityMismatch | undefined>;
190
150
  type ActiveStateCacheInvalidator = (cwd?: string, sessionId?: string) => void;
@@ -192,7 +152,6 @@ export declare function setActiveStateCacheInvalidator(invalidator: ActiveStateC
192
152
  export declare function persistedStateRevision(value: unknown): number;
193
153
  export declare function writeGuardedJsonAtomic(targetPath: string, value: unknown, options: GuardedStateWriterOptions): Promise<GuardedWriteResult>;
194
154
  export declare function writeGuardedWorkflowEnvelopeAtomic(targetPath: string, value: unknown, options: GuardedStateWriterOptions): Promise<GuardedWriteResult>;
195
- export declare function transformGuardedWorkflowEnvelopeAtomic(targetPath: string, options: GuardedWorkflowEnvelopeTransformOptions): Promise<GuardedWorkflowEnvelopeTransformResult>;
196
155
  export declare function writeJsonAtomic(targetPath: string, value: unknown, options?: StateWriterOptions): Promise<string>;
197
156
  export declare function writeWorkflowEnvelopeAtomic(targetPath: string, value: unknown, options?: StateWriterOptions): Promise<string>;
198
157
  export declare function writeTextAtomic(targetPath: string, text: string, options?: StateWriterOptions): Promise<string>;