@gajae-code/coding-agent 0.18.7 → 0.18.8

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 (279) hide show
  1. package/CHANGELOG.md +279 -1
  2. package/dist/types/async/job-manager.d.ts +1 -1
  3. package/dist/types/capability/mcp.d.ts +2 -0
  4. package/dist/types/capability/skill.d.ts +2 -0
  5. package/dist/types/capability/types.d.ts +2 -0
  6. package/dist/types/cli/public-command-errors.d.ts +3 -1
  7. package/dist/types/cli/setup-cli.d.ts +1 -1
  8. package/dist/types/commands/deep-interview.d.ts +3 -0
  9. package/dist/types/config/autorouting-tier-map.d.ts +348 -9
  10. package/dist/types/config/file-lock.d.ts +1 -0
  11. package/dist/types/config/model-bindings-applier.d.ts +2 -0
  12. package/dist/types/config/model-profile-activation.d.ts +11 -3
  13. package/dist/types/config/model-registry.d.ts +4 -9
  14. package/dist/types/config/skill-settings-defaults.d.ts +2 -0
  15. package/dist/types/cursor-delete-path.d.ts +1 -0
  16. package/dist/types/cursor-mcp-name.d.ts +8 -0
  17. package/dist/types/customization/inventory.d.ts +2 -0
  18. package/dist/types/debug/report-bundle-parent.d.ts +2 -0
  19. package/dist/types/defaults/gjc/extensions/grok-cli-vendor/src/provider/stream.d.ts +1 -0
  20. package/dist/types/defaults/gjc/extensions/grok-cli-vendor/src/provider/version-manager.d.ts +31 -0
  21. package/dist/types/defaults/gjc-skills.generated.d.ts +5 -6
  22. package/dist/types/discovery/helpers.d.ts +6 -1
  23. package/dist/types/export/html/css-color.d.ts +2 -0
  24. package/dist/types/export/html/template.generated.d.ts +1 -1
  25. package/dist/types/extensibility/extensions/types.d.ts +7 -0
  26. package/dist/types/extensibility/gjc-plugins/runtime-adapters.d.ts +14 -1
  27. package/dist/types/extensibility/plugins/marketplace/cache.d.ts +2 -0
  28. package/dist/types/extensibility/plugins/plugin-link-path.d.ts +2 -0
  29. package/dist/types/extensibility/runtime-skill-discovery.d.ts +3 -1
  30. package/dist/types/extensibility/skill-management.d.ts +3 -1
  31. package/dist/types/extensibility/skills.d.ts +2 -0
  32. package/dist/types/gjc-runtime/deep-interview-crystallize.d.ts +74 -0
  33. package/dist/types/gjc-runtime/deep-interview-runtime.d.ts +11 -0
  34. package/dist/types/gjc-runtime/gc-runtime.d.ts +5 -0
  35. package/dist/types/gjc-runtime/ralplan-runtime.d.ts +0 -5
  36. package/dist/types/gjc-runtime/state-argv.d.ts +1 -1
  37. package/dist/types/gjc-runtime/state-migrations.d.ts +8 -0
  38. package/dist/types/gjc-runtime/state-runtime.d.ts +95 -0
  39. package/dist/types/gjc-runtime/state-writer.d.ts +11 -1
  40. package/dist/types/gjc-runtime/ultragoal-runtime.d.ts +8 -0
  41. package/dist/types/internal-urls/skill-path.d.ts +1 -0
  42. package/dist/types/lsp/workspace-path.d.ts +1 -0
  43. package/dist/types/modes/acp/acp-agent.d.ts +7 -0
  44. package/dist/types/modes/components/custom-editor.d.ts +6 -0
  45. package/dist/types/modes/components/customization/customization-dashboard.d.ts +1 -0
  46. package/dist/types/modes/components/extensions/state-manager.d.ts +4 -3
  47. package/dist/types/modes/controllers/input-controller.d.ts +9 -0
  48. package/dist/types/modes/interactive-mode.d.ts +1 -0
  49. package/dist/types/modes/utils/interrupt-ownership.d.ts +3 -0
  50. package/dist/types/modes/utils/keybinding-matchers.d.ts +1 -0
  51. package/dist/types/modes/utils/macos-option-forwarding.d.ts +17 -0
  52. package/dist/types/progress/collect-project-progress.d.ts +38 -0
  53. package/dist/types/progress/progress-contract.d.ts +154 -0
  54. package/dist/types/progress/progress-snapshot.d.ts +11 -0
  55. package/dist/types/progress/project-progress.d.ts +141 -0
  56. package/dist/types/progress/render-progress.d.ts +28 -0
  57. package/dist/types/runtime-mcp/oauth-public-url.d.ts +1 -0
  58. package/dist/types/runtime-mcp/plugin-network-boundary.d.ts +1 -0
  59. package/dist/types/runtime-mcp/smithery-registry.d.ts +24 -0
  60. package/dist/types/runtime-mcp/types.d.ts +6 -0
  61. package/dist/types/sdk/acp/adapter.d.ts +1 -1
  62. package/dist/types/sdk/broker/broker-exit.d.ts +6 -2
  63. package/dist/types/sdk/broker/broker.d.ts +18 -1
  64. package/dist/types/sdk/broker/session-index.d.ts +12 -6
  65. package/dist/types/sdk/bus/index.d.ts +12 -1
  66. package/dist/types/sdk/bus/telegram-daemon-contract.d.ts +6 -1
  67. package/dist/types/sdk/client/client.d.ts +2 -0
  68. package/dist/types/sdk/host/query/handlers.d.ts +3 -0
  69. package/dist/types/sdk/index.d.ts +1 -0
  70. package/dist/types/sdk/router/session-router.d.ts +2 -0
  71. package/dist/types/sdk/session-list.d.ts +1 -1
  72. package/dist/types/sdk/session.d.ts +8 -0
  73. package/dist/types/session/agent-session.d.ts +38 -9
  74. package/dist/types/session/artifacts.d.ts +2 -2
  75. package/dist/types/session/internal/managed-gc-retirement-codec.d.ts +32 -0
  76. package/dist/types/session/internal/managed-session-scope.d.ts +79 -2
  77. package/dist/types/session/internal/managed-session-storage.d.ts +26 -1
  78. package/dist/types/session/internal/managed-task-owner-cleanup.d.ts +62 -0
  79. package/dist/types/session/internal/task-artifact-owner-access.d.ts +2 -0
  80. package/dist/types/session/internal/task-artifact-owner-transcript.d.ts +9 -1
  81. package/dist/types/session/session-manager.d.ts +31 -5
  82. package/dist/types/session/session-retirement.d.ts +31 -7
  83. package/dist/types/session/session-storage.d.ts +62 -2
  84. package/dist/types/session/task-artifact-owner-codec.d.ts +2 -0
  85. package/dist/types/setup/credential-auto-import.d.ts +1 -1
  86. package/dist/types/setup/credential-import.d.ts +6 -4
  87. package/dist/types/skill-state/active-state.d.ts +38 -0
  88. package/dist/types/slash-commands/helpers/progress-report.d.ts +8 -0
  89. package/dist/types/task/executor.d.ts +3 -0
  90. package/dist/types/tools/bash-skill-urls.d.ts +1 -1
  91. package/dist/types/tools/index.d.ts +3 -0
  92. package/dist/types/tools/python.d.ts +9 -1
  93. package/dist/types/tools/recipe/recipe-guard.d.ts +7 -0
  94. package/dist/types/tools/restricted-cwd.d.ts +1 -0
  95. package/dist/types/tools/todo-write.d.ts +6 -0
  96. package/dist/types/utils/tools-checksum.d.ts +7 -0
  97. package/package.json +7 -7
  98. package/scripts/generate-sdk-operation-inventory.ts +21 -0
  99. package/scripts/verify-managed-empty-stop.ts +28 -0
  100. package/src/async/job-manager.ts +228 -122
  101. package/src/capability/index.ts +17 -0
  102. package/src/capability/mcp.ts +2 -0
  103. package/src/capability/skill.ts +2 -0
  104. package/src/capability/types.ts +2 -0
  105. package/src/cli/auth-broker-cli.ts +1 -1
  106. package/src/cli/customize-doctor.ts +15 -2
  107. package/src/cli/public-command-errors.ts +21 -1
  108. package/src/cli/setup-cli.ts +4 -4
  109. package/src/cli/skills-cli.ts +5 -0
  110. package/src/commands/deep-interview.ts +47 -8
  111. package/src/commands/sdk.ts +28 -8
  112. package/src/config/autorouting-tier-map.ts +117 -7
  113. package/src/config/file-lock.ts +307 -68
  114. package/src/config/mcp-schema.json +4 -0
  115. package/src/config/model-bindings-applier.ts +20 -0
  116. package/src/config/model-profile-activation.ts +240 -46
  117. package/src/config/model-registry.ts +47 -153
  118. package/src/config/skill-settings-defaults.ts +7 -0
  119. package/src/coordinator-mcp/policy.ts +3 -2
  120. package/src/cursor-delete-path.ts +10 -0
  121. package/src/cursor-mcp-name.ts +15 -0
  122. package/src/cursor.ts +13 -2
  123. package/src/customization/inventory.ts +3 -0
  124. package/src/debug/report-bundle-parent.ts +22 -0
  125. package/src/debug/report-bundle.ts +3 -0
  126. package/src/debug/system-info.ts +13 -1
  127. package/src/defaults/gjc/extensions/grok-cli-vendor/src/provider/stream.ts +67 -4
  128. package/src/defaults/gjc/extensions/grok-cli-vendor/src/provider/version-manager.ts +80 -0
  129. package/src/defaults/gjc/skills/deep-interview/SKILL.md +105 -10
  130. package/src/defaults/gjc/skills/ralplan/SKILL.md +6 -4
  131. package/src/defaults/gjc-defaults.test.ts +18 -1
  132. package/src/defaults/gjc-defaults.ts +3 -0
  133. package/src/defaults/gjc-skills.generated.ts +58 -36
  134. package/src/discovery/agents.ts +6 -1
  135. package/src/discovery/builtin.ts +10 -0
  136. package/src/discovery/helpers.ts +159 -20
  137. package/src/discovery/mcp-json.ts +6 -0
  138. package/src/discovery/ssh.ts +1 -1
  139. package/src/discovery/substitute-plugin-root.ts +3 -1
  140. package/src/edit/file-read-cache.ts +1 -1
  141. package/src/eval/py/executor.ts +380 -120
  142. package/src/export/html/css-color.ts +9 -0
  143. package/src/export/html/index.ts +5 -4
  144. package/src/export/html/template.generated.ts +1 -1
  145. package/src/extensibility/extensions/runner.ts +4 -0
  146. package/src/extensibility/extensions/types.ts +7 -0
  147. package/src/extensibility/gjc-plugins/runtime-adapters.ts +73 -8
  148. package/src/extensibility/plugins/manager.ts +3 -2
  149. package/src/extensibility/plugins/marketplace/cache.ts +15 -0
  150. package/src/extensibility/plugins/marketplace/manager.ts +11 -3
  151. package/src/extensibility/plugins/plugin-link-path.ts +12 -0
  152. package/src/extensibility/runtime-skill-discovery.ts +20 -2
  153. package/src/extensibility/skill-management.ts +6 -2
  154. package/src/extensibility/skills.ts +6 -1
  155. package/src/gjc-runtime/deep-interview-crystallize.ts +1814 -0
  156. package/src/gjc-runtime/deep-interview-recorder.ts +20 -2
  157. package/src/gjc-runtime/deep-interview-runtime.ts +1415 -13
  158. package/src/gjc-runtime/deep-interview-stage.ts +98 -21
  159. package/src/gjc-runtime/gc-runtime.ts +206 -9
  160. package/src/gjc-runtime/launch-worktree.ts +14 -4
  161. package/src/gjc-runtime/ralplan-runtime.ts +447 -52
  162. package/src/gjc-runtime/state-argv.ts +2 -0
  163. package/src/gjc-runtime/state-migrations.ts +91 -29
  164. package/src/gjc-runtime/state-runtime.ts +3716 -135
  165. package/src/gjc-runtime/state-writer.ts +83 -8
  166. package/src/gjc-runtime/ultragoal-runtime.ts +16 -4
  167. package/src/gjc-runtime/workflow-manifest.generated.json +70 -42
  168. package/src/gjc-runtime/workflow-manifest.ts +54 -21
  169. package/src/harness-control-plane/operate.ts +12 -4
  170. package/src/harness-control-plane/owner.ts +5 -1
  171. package/src/hashline/parser.ts +48 -9
  172. package/src/hashline/recovery.ts +13 -4
  173. package/src/internal-urls/docs-index.generated.ts +18 -17
  174. package/src/internal-urls/skill-path.ts +19 -0
  175. package/src/internal-urls/skill-protocol.ts +2 -0
  176. package/src/lsp/edits.ts +6 -0
  177. package/src/lsp/workspace-path.ts +51 -0
  178. package/src/main.ts +195 -31
  179. package/src/modes/acp/acp-agent.ts +88 -4
  180. package/src/modes/components/custom-editor.ts +14 -0
  181. package/src/modes/components/customization/customization-dashboard.ts +12 -0
  182. package/src/modes/components/extensions/extension-dashboard.ts +2 -2
  183. package/src/modes/components/extensions/state-manager.ts +15 -5
  184. package/src/modes/components/model-selector.ts +1 -4
  185. package/src/modes/components/provider-onboarding-selector.ts +1 -1
  186. package/src/modes/components/status-line/segments.ts +4 -0
  187. package/src/modes/controllers/event-controller.ts +11 -4
  188. package/src/modes/controllers/input-controller.ts +74 -29
  189. package/src/modes/controllers/runtime-mcp-command-controller.ts +8 -3
  190. package/src/modes/controllers/selector-controller.ts +28 -15
  191. package/src/modes/interactive-mode.ts +4 -0
  192. package/src/modes/runtime-init.ts +4 -0
  193. package/src/modes/utils/abort-message.ts +3 -1
  194. package/src/modes/utils/interrupt-ownership.ts +12 -0
  195. package/src/modes/utils/keybinding-matchers.ts +4 -0
  196. package/src/modes/utils/macos-option-forwarding.ts +80 -0
  197. package/src/progress/collect-project-progress.ts +153 -0
  198. package/src/progress/progress-contract.ts +172 -0
  199. package/src/progress/progress-snapshot.ts +140 -0
  200. package/src/progress/project-progress.ts +446 -0
  201. package/src/progress/render-progress.ts +209 -0
  202. package/src/prompts/system/master-mode.md +1 -0
  203. package/src/prompts/tools/skill-discovery.md +1 -1
  204. package/src/runtime-mcp/config-writer.ts +10 -6
  205. package/src/runtime-mcp/config.ts +1 -0
  206. package/src/runtime-mcp/oauth-flow.ts +5 -0
  207. package/src/runtime-mcp/oauth-public-url.ts +8 -0
  208. package/src/runtime-mcp/plugin-network-boundary.ts +4 -0
  209. package/src/runtime-mcp/smithery-registry.ts +22 -3
  210. package/src/runtime-mcp/transports/http.ts +2 -2
  211. package/src/runtime-mcp/types.ts +6 -0
  212. package/src/sdk/acp/adapter.ts +93 -8
  213. package/src/sdk/broker/broker-exit.ts +52 -23
  214. package/src/sdk/broker/broker.ts +75 -6
  215. package/src/sdk/broker/ensure.ts +2 -0
  216. package/src/sdk/broker/lifecycle.ts +711 -66
  217. package/src/sdk/broker/session-index.ts +191 -81
  218. package/src/sdk/bus/chat-daemon-cli.ts +38 -1
  219. package/src/sdk/bus/chat-daemon-control.ts +2 -2
  220. package/src/sdk/bus/index.ts +238 -43
  221. package/src/sdk/bus/telegram-daemon-contract.ts +6 -1
  222. package/src/sdk/cli/session-cli.ts +17 -3
  223. package/src/sdk/client/client.ts +28 -8
  224. package/src/sdk/host/query/handlers.ts +9 -1
  225. package/src/sdk/host/session-runtime.test.ts +2647 -294
  226. package/src/sdk/host/session-runtime.ts +426 -109
  227. package/src/sdk/host/surface-policy.ts +1 -0
  228. package/src/sdk/index.ts +8 -0
  229. package/src/sdk/lifecycle-session.ts +3 -1
  230. package/src/sdk/prompt-deadline-manager.ts +15 -0
  231. package/src/sdk/protocol/operation-inventory.generated.json +146 -0
  232. package/src/sdk/protocol/operation-registry.ts +9 -2
  233. package/src/sdk/router/session-router.ts +75 -12
  234. package/src/sdk/session-list.ts +1 -0
  235. package/src/sdk/session.ts +67 -38
  236. package/src/session/agent-session.ts +623 -224
  237. package/src/session/artifacts.ts +174 -70
  238. package/src/session/internal/managed-gc-retirement-codec.ts +319 -0
  239. package/src/session/internal/managed-session-scope.ts +3457 -462
  240. package/src/session/internal/managed-session-storage.ts +376 -61
  241. package/src/session/internal/managed-task-owner-cleanup.ts +473 -0
  242. package/src/session/internal/task-artifact-owner-access.ts +19 -3
  243. package/src/session/internal/task-artifact-owner-transcript.ts +547 -1
  244. package/src/session/session-manager.ts +939 -133
  245. package/src/session/session-retirement.ts +573 -14
  246. package/src/session/session-storage.ts +417 -14
  247. package/src/session/task-artifact-owner-codec.ts +71 -8
  248. package/src/session/task-artifact-owner-retirement.ts +21 -19
  249. package/src/setup/credential-auto-import.ts +12 -3
  250. package/src/setup/credential-import.ts +176 -5
  251. package/src/setup/paseo/announce.ts +6 -1
  252. package/src/skill-state/active-state.ts +132 -2
  253. package/src/slash-commands/builtin-registry.ts +39 -9
  254. package/src/slash-commands/helpers/progress-report.ts +23 -0
  255. package/src/stt/setup.ts +3 -5
  256. package/src/task/commands.ts +3 -1
  257. package/src/task/executor.ts +4 -0
  258. package/src/task/index.ts +6 -0
  259. package/src/tools/ask.ts +205 -6
  260. package/src/tools/ast-edit.ts +4 -0
  261. package/src/tools/bash-allowed-prefixes.ts +15 -0
  262. package/src/tools/bash-skill-urls.ts +56 -3
  263. package/src/tools/bash.ts +48 -79
  264. package/src/tools/descriptors.ts +5 -1
  265. package/src/tools/eval.ts +56 -36
  266. package/src/tools/image-gen.ts +1 -1
  267. package/src/tools/index.ts +3 -0
  268. package/src/tools/python.ts +187 -66
  269. package/src/tools/recipe/index.ts +9 -0
  270. package/src/tools/recipe/recipe-guard.ts +19 -0
  271. package/src/tools/restricted-cwd.ts +10 -0
  272. package/src/tools/skill-discovery.ts +5 -0
  273. package/src/tools/skill.ts +28 -1
  274. package/src/tools/todo-write.ts +10 -1
  275. package/src/tools/tool-catalog.generated.ts +1 -1
  276. package/src/tools/write.ts +1 -0
  277. package/src/utils/tools-checksum.ts +34 -0
  278. package/src/utils/tools-manager.ts +24 -6
  279. package/src/web/search/providers/codex.ts +3 -2
@@ -0,0 +1,154 @@
1
+ /** Ultragoal story status (`UltragoalGoalStatus`). */
2
+ export type ProgressStoryStatus = "pending" | "active" | "complete" | "failed" | "blocked" | "review_blocked" | "superseded";
3
+ /** Session goal status (`GoalStatus`). */
4
+ export type ProgressGoalStatus = "active" | "paused" | "complete" | "dropped";
5
+ /** Todo item status (`TodoStatus`). */
6
+ export type ProgressTodoStatus = "pending" | "in_progress" | "completed" | "abandoned";
7
+ /** Workflow HUD chip severity (`WorkflowHudSeverity`). */
8
+ export type ProgressChipSeverity = "info" | "warning" | "blocked" | "error" | "success";
9
+ /** Durable `.gjc` session-state sources that can fail to read. */
10
+ export type ProgressDurableSource = "workflow-state" | "ultragoal-plan";
11
+ export type ProgressBasisKind = "ultragoal-stories" | "todos" | "goal-status" | "none";
12
+ export type ProgressHeadline = "complete" | "awaiting-completion" | "blocked" | "in-progress" | "not-started" | "paused" | "dropped" | "no-tracked-work";
13
+ export type ProgressSignalKind = "blocker" | "pending" | "note";
14
+ export type ProgressSignalSource = "ultragoal" | "workflow" | "subagents" | "todos" | "goal" | "state";
15
+ export interface ProgressAgentCounts {
16
+ total: number;
17
+ running: number;
18
+ /** Subagents that are queued or paused. */
19
+ waiting: number;
20
+ completed: number;
21
+ failed: number;
22
+ cancelled: number;
23
+ }
24
+ export interface ProgressReviewVerdict {
25
+ skill: string;
26
+ verdict: string;
27
+ }
28
+ export declare const PROJECT_PROGRESS_SNAPSHOT_SCHEMA = "gjc.project_progress.v1";
29
+ /** Bounds keep one snapshot well under a single SDK query page. */
30
+ export declare const PROGRESS_SNAPSHOT_LIMITS: {
31
+ readonly stories: 100;
32
+ readonly todos: 100;
33
+ readonly workflows: 16;
34
+ readonly attention: 50;
35
+ readonly text: 300;
36
+ };
37
+ export interface ProgressSnapshotStory {
38
+ id: string;
39
+ title: string;
40
+ status: ProgressStoryStatus;
41
+ /** A completion-verification (quality-gate) receipt is recorded on the story. */
42
+ verificationReceipt: boolean;
43
+ }
44
+ export interface ProgressSnapshotTodo {
45
+ content: string;
46
+ status: ProgressTodoStatus;
47
+ }
48
+ export interface ProgressSnapshotWorkflow {
49
+ skill: string;
50
+ phase: string;
51
+ summary: string | null;
52
+ chips: {
53
+ label: string;
54
+ value: string | null;
55
+ severity: ProgressChipSeverity | null;
56
+ }[];
57
+ }
58
+ export interface ProgressSnapshotAttention {
59
+ kind: ProgressSignalKind;
60
+ source: ProgressSignalSource;
61
+ ref: string | null;
62
+ text: string;
63
+ }
64
+ export interface ProjectProgressSnapshot {
65
+ schema: typeof PROJECT_PROGRESS_SNAPSHOT_SCHEMA;
66
+ /** Overall completion state; identical to the `/progress` headline. */
67
+ state: ProgressHeadline;
68
+ completion: {
69
+ /** Which countable units the indicator was derived from; `none` means nothing is countable. */
70
+ basis: ProgressBasisKind;
71
+ done: number;
72
+ total: number;
73
+ /** Whole percent; `null` when `basis` is `none`. Never 100 while a unit is open. */
74
+ percent: number | null;
75
+ /** Every counted unit is done (the session may still be awaiting goal completion or subagents). */
76
+ allUnitsDone: boolean;
77
+ /** `state === "complete"`: units done, goal (if any) complete, no subagents running, queued, or paused. */
78
+ complete: boolean;
79
+ explanation: string;
80
+ };
81
+ execution: {
82
+ goal: {
83
+ objective: string;
84
+ status: ProgressGoalStatus;
85
+ timeUsedSeconds: number;
86
+ } | null;
87
+ ultragoal: {
88
+ objective: string;
89
+ counts: {
90
+ total: number;
91
+ complete: number;
92
+ active: number;
93
+ pending: number;
94
+ blocked: number;
95
+ superseded: number;
96
+ };
97
+ stories: ProgressSnapshotStory[];
98
+ omittedStories: number;
99
+ } | null;
100
+ todos: {
101
+ counts: {
102
+ total: number;
103
+ completed: number;
104
+ inProgress: number;
105
+ pending: number;
106
+ abandoned: number;
107
+ };
108
+ items: ProgressSnapshotTodo[];
109
+ omittedItems: number;
110
+ } | null;
111
+ };
112
+ activeWork: {
113
+ /**
114
+ * Active story, else the next pending one, matching the Ultragoal scheduler.
115
+ * Blocked, review-blocked, and failed stories are never reported here (failed
116
+ * stories are retried only on explicit request); `null` when nothing is schedulable.
117
+ */
118
+ story: {
119
+ id: string;
120
+ title: string;
121
+ } | null;
122
+ /** In-progress todo, else the next pending one. */
123
+ todo: string | null;
124
+ workflows: ProgressSnapshotWorkflow[];
125
+ /** Active workflows beyond `PROGRESS_SNAPSHOT_LIMITS.workflows` that `workflows` leaves out. */
126
+ omittedWorkflows: number;
127
+ agents: ProgressAgentCounts;
128
+ };
129
+ verification: {
130
+ /** Present only when at least one story is complete. */
131
+ storyReceipts: {
132
+ complete: number;
133
+ withReceipt: number;
134
+ withoutReceipt: number;
135
+ } | null;
136
+ reviewVerdicts: ProgressReviewVerdict[];
137
+ };
138
+ attention: ProgressSnapshotAttention[];
139
+ omittedAttention: number;
140
+ sources: {
141
+ /** Session-scoped `.gjc` state (workflows, ultragoal plan) was consulted. */
142
+ sessionStateRead: boolean;
143
+ /** Sources that exist but could not be read; excluded from every count. */
144
+ unreadable: ProgressDurableSource[];
145
+ /** Sources whose primary record was unreadable but whose contents were recovered from authoritative per-entry records. */
146
+ recovered: ProgressDurableSource[];
147
+ /** Sources whose readable derived snapshot listed entries the authoritative per-entry records do not; those stale entries were discarded. */
148
+ discarded: ProgressDurableSource[];
149
+ /** Sources listing entries whose authority could not be established; those entries are excluded and their absence is unconfirmed. */
150
+ unresolved: ProgressDurableSource[];
151
+ };
152
+ }
153
+ /** Strip terminal escapes/control characters and bound length; durable text is untrusted. */
154
+ export declare function boundSnapshotText(text: string, max?: number): string;
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Machine-facing projection of the project progress report (SDK query
3
+ * `session.progress`, Q32). It is a pure re-shaping of `ProjectProgressReport`:
4
+ * every number, state, and attention item comes from the same computation, and
5
+ * the human `/progress` view renders this snapshot (`render-progress.ts`), so
6
+ * the two can never disagree. Absent evidence is `null`/empty, never estimated.
7
+ * Every bounded list reports how many entries it omitted.
8
+ */
9
+ import { type ProjectProgressSnapshot } from "./progress-contract";
10
+ import type { ProjectProgressReport } from "./project-progress";
11
+ export declare function toProjectProgressSnapshot(report: ProjectProgressReport): ProjectProgressSnapshot;
@@ -0,0 +1,141 @@
1
+ /**
2
+ * Read-only project progress projection. One report is re-shaped into the
3
+ * machine-facing `session.progress` SDK snapshot (`progress-snapshot.ts`), and
4
+ * the human-facing `/progress` view renders that same snapshot
5
+ * (`render-progress.ts`) in the TUI, text mode, and ACP.
6
+ *
7
+ * The completion indicator is derived exclusively from countable units that
8
+ * carry a durable completion status. It never weights units by size, never
9
+ * credits partial work on an open unit, and never infers progress from
10
+ * conversation text, elapsed time, or token spend. When no countable basis
11
+ * exists the indicator is reported as unknown instead of guessed.
12
+ */
13
+ import type { SubagentLifecycle } from "../async/job-manager";
14
+ import { type UltragoalGoalStatus } from "../gjc-runtime/ultragoal-runtime";
15
+ import type { GoalStatus } from "../goals/state";
16
+ import type { WorkflowHudSeverity } from "../skill-state/active-state";
17
+ import type { TodoStatus } from "../tools/todo-write";
18
+ import type { ProgressAgentCounts, ProgressBasisKind, ProgressDurableSource, ProgressHeadline, ProgressReviewVerdict, ProgressSignalKind, ProgressSignalSource } from "./progress-contract";
19
+ export interface ProgressGoalInput {
20
+ objective: string;
21
+ status: GoalStatus;
22
+ timeUsedSeconds: number;
23
+ }
24
+ export interface ProgressTodoInput {
25
+ content: string;
26
+ status: TodoStatus;
27
+ }
28
+ export interface ProgressWorkflowChip {
29
+ label: string;
30
+ value?: string;
31
+ severity?: WorkflowHudSeverity;
32
+ }
33
+ export interface ProgressWorkflowInput {
34
+ skill: string;
35
+ phase: string;
36
+ summary?: string;
37
+ chips: ProgressWorkflowChip[];
38
+ }
39
+ export interface ProgressStoryInput {
40
+ id: string;
41
+ title: string;
42
+ status: UltragoalGoalStatus;
43
+ /** A completion-verification (quality-gate) receipt is recorded on the story. */
44
+ hasVerificationReceipt: boolean;
45
+ }
46
+ export interface ProgressUltragoalInput {
47
+ objective: string;
48
+ stories: ProgressStoryInput[];
49
+ }
50
+ export declare const PROGRESS_SOURCE_LABELS: Record<ProgressDurableSource, string>;
51
+ export interface ProjectProgressInput {
52
+ goal?: ProgressGoalInput;
53
+ todos: ProgressTodoInput[];
54
+ workflows: ProgressWorkflowInput[];
55
+ ultragoal?: ProgressUltragoalInput;
56
+ subagents: SubagentLifecycle[];
57
+ /** Whether session-scoped `.gjc` state (workflows, ultragoal plan) was consulted at all. */
58
+ sessionStateRead: boolean;
59
+ /** Durable sources that exist but could not be read; excluded from the estimate. */
60
+ unreadable: ProgressDurableSource[];
61
+ /** Durable sources whose primary record was unreadable but whose contents were recovered from authoritative per-entry records. */
62
+ recovered: ProgressDurableSource[];
63
+ /** Durable sources whose readable derived snapshot listed entries the authoritative per-entry records do not; those stale entries were discarded. */
64
+ discarded: ProgressDurableSource[];
65
+ /** Durable sources listing entries whose authority could not be established; those entries are excluded and their absence is unconfirmed. */
66
+ unresolved: ProgressDurableSource[];
67
+ }
68
+ export interface ProgressSignal {
69
+ kind: ProgressSignalKind;
70
+ /** Which durable state produced the signal. */
71
+ source: ProgressSignalSource;
72
+ /** Stable identifier inside the source: story id, workflow skill, or durable source key. */
73
+ ref?: string;
74
+ text: string;
75
+ }
76
+ export interface ProgressCompletion {
77
+ basis: ProgressBasisKind;
78
+ done: number;
79
+ total: number;
80
+ /**
81
+ * Displayed whole percent, or undefined when no countable basis exists.
82
+ * Never rounds up to 100 while a unit is open, nor down to 0 once a unit is done.
83
+ */
84
+ percent: number | undefined;
85
+ }
86
+ export interface ProgressStoryCounts {
87
+ total: number;
88
+ complete: number;
89
+ active: number;
90
+ pending: number;
91
+ blocked: number;
92
+ superseded: number;
93
+ verified: number;
94
+ /** Active story, else the next pending one; blocked, review-blocked, and failed stories are never selected. */
95
+ current?: {
96
+ id: string;
97
+ title: string;
98
+ };
99
+ }
100
+ export interface ProgressTodoCounts {
101
+ total: number;
102
+ completed: number;
103
+ inProgress: number;
104
+ pending: number;
105
+ abandoned: number;
106
+ current?: string;
107
+ }
108
+ /** Verification evidence that durable state actually records; nothing is inferred. */
109
+ export interface ProgressVerification {
110
+ /** Complete stories that carry a quality-gate completion receipt (only when stories are complete). */
111
+ storyReceipts?: {
112
+ complete: number;
113
+ withReceipt: number;
114
+ };
115
+ /** Latest review verdict chips published by active workflows. */
116
+ reviewVerdicts: ProgressReviewVerdict[];
117
+ }
118
+ export interface ProjectProgressReport {
119
+ headline: ProgressHeadline;
120
+ completion: ProgressCompletion;
121
+ /** How the completion indicator was derived, in plain words. */
122
+ basisExplanation: string;
123
+ goal?: ProgressGoalInput;
124
+ /** The ultragoal plan the story counts were derived from. */
125
+ ultragoal?: ProgressUltragoalInput;
126
+ stories?: ProgressStoryCounts;
127
+ todoItems: ProgressTodoInput[];
128
+ todos?: ProgressTodoCounts;
129
+ workflows: ProgressWorkflowInput[];
130
+ agents: ProgressAgentCounts;
131
+ verification: ProgressVerification;
132
+ signals: ProgressSignal[];
133
+ sessionStateRead: boolean;
134
+ unreadable: ProgressDurableSource[];
135
+ recovered: ProgressDurableSource[];
136
+ discarded: ProgressDurableSource[];
137
+ unresolved: ProgressDurableSource[];
138
+ }
139
+ /** Whole percent that never overstates (no 100 while open) nor erases (no 0 once started) progress. */
140
+ export declare function displayPercent(done: number, total: number): number | undefined;
141
+ export declare function computeProjectProgress(input: ProjectProgressInput): ProjectProgressReport;
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Human-readable `/progress` view. It renders the machine-facing
3
+ * `session.progress` snapshot, so the TUI, text mode, and ACP (which reads the
4
+ * snapshot over the SDK) show exactly what an orchestrator receives.
5
+ *
6
+ * Like `progress-contract.ts`, this module must stay a dependency leaf: the ACP
7
+ * agent imports it, and the ACP entrypoint may not reach the session graph.
8
+ */
9
+ import { type ProgressHeadline, type ProjectProgressSnapshot } from "./progress-contract";
10
+ /** ACP palette copy for `/progress`, shared by the builtin registry and the production ACP agent. */
11
+ export declare const PROGRESS_COMMAND_ACP_DESCRIPTION = "Show read-only project progress overview";
12
+ export declare const PROGRESS_HEADLINE_LABELS: Record<ProgressHeadline, string>;
13
+ /** Styling hooks so the TUI can colour output while ACP/text mode stays plain. */
14
+ export interface ProgressRenderStyle {
15
+ bold(text: string): string;
16
+ fg(color: "accent" | "success" | "warning" | "error" | "dim" | "muted", text: string): string;
17
+ }
18
+ export interface ProgressRenderOptions {
19
+ style?: ProgressRenderStyle;
20
+ /**
21
+ * Sanitizes and bounds durable text to one display line of at most `max` columns.
22
+ * Defaults to a character-bounded plain-text clip for ACP and text mode.
23
+ */
24
+ clip?: (text: string, max: number) => string;
25
+ barWidth?: number;
26
+ }
27
+ /** Render the overview as display lines (no trailing newline). */
28
+ export declare function renderProgressSnapshot(snapshot: ProjectProgressSnapshot, options?: ProgressRenderOptions): string[];
@@ -0,0 +1 @@
1
+ export declare function assertPublicOAuthUrl(url: string): Promise<void>;
@@ -3,6 +3,7 @@ import type { MCPHttpServerConfig, MCPSseServerConfig } from "./types";
3
3
  /** Mark an in-memory plugin-bundle remote MCP config for connection-bound public-network enforcement. */
4
4
  export declare function bindPluginMcpToPublicNetwork<T extends MCPHttpServerConfig | MCPSseServerConfig>(config: T): T;
5
5
  /** The marker is an internal symbol, so persisted user MCP configs cannot opt into or forge this path. */
6
+ export declare function usesPublicNetworkMcpFetch(config: MCPHttpServerConfig | MCPSseServerConfig): boolean;
6
7
  export declare function isPluginMcpPublicNetworkBound(config: MCPHttpServerConfig | MCPSseServerConfig): boolean;
7
8
  /**
8
9
  * Fetch a plugin-bundle MCP request through a DNS-pinned public address. Every
@@ -1,4 +1,22 @@
1
+ import { type AddressResolver } from "../web/insane/url-guard";
1
2
  import type { MCPServerConfig } from "./types";
3
+ type SmitheryConnection = {
4
+ type?: "http" | "stdio";
5
+ deploymentUrl?: string;
6
+ configSchema?: SmitheryConfigSchema;
7
+ };
8
+ type SmitheryConfigSchema = {
9
+ type?: string;
10
+ required?: string[];
11
+ properties?: Record<string, SmitheryConfigProperty>;
12
+ };
13
+ type SmitheryConfigProperty = {
14
+ type?: string;
15
+ description?: string;
16
+ default?: unknown;
17
+ enum?: unknown[];
18
+ format?: string;
19
+ };
2
20
  type RegistryInputType = "string" | "number" | "boolean";
3
21
  export type SmitherySearchResult = {
4
22
  id: string;
@@ -46,6 +64,12 @@ export declare class SmitheryRegistryError extends Error {
46
64
  status: number;
47
65
  constructor(message: string, status: number);
48
66
  }
67
+ export declare function resolveSmitheryServerConfig(qualifiedName: string, selected: {
68
+ connection: SmitheryConnection;
69
+ useDirectHttp: boolean;
70
+ }, options?: {
71
+ resolver?: AddressResolver;
72
+ }): Promise<MCPServerConfig | null>;
49
73
  export declare function searchSmitheryRegistry(keyword: string, options?: SmitherySearchOptions): Promise<SmitherySearchResult[]>;
50
74
  export declare function toConfigName(candidate: string): string;
51
75
  export {};
@@ -119,6 +119,12 @@ export interface MCPHttpServerConfig extends MCPServerConfigBase {
119
119
  type: "http";
120
120
  url: string;
121
121
  headers?: Record<string, string>;
122
+ /**
123
+ * When true, every request and redirect for this URL is rechecked against
124
+ * the public-network policy. Persisted so a later process cannot fall back
125
+ * to an unguarded fetch. Ordinary localhost MCP servers leave this unset.
126
+ */
127
+ publicNetwork?: boolean;
122
128
  }
123
129
  /** SSE server configuration (deprecated, use HTTP) */
124
130
  export interface MCPSseServerConfig extends MCPServerConfigBase {
@@ -129,5 +129,5 @@ export declare class AcpSdkAdapter {
129
129
  }): Promise<unknown>;
130
130
  /** Dispatches the ACP extension method names without exposing endpoint credentials. */
131
131
  handle(method: string, params?: JsonObject): Promise<unknown>;
132
- registerProvider(provider: AcpProviderRegistration): Promise<void>;
132
+ registerProvider(provider: AcpProviderRegistration, timeoutMs?: number, deadline?: number): Promise<void>;
133
133
  }
@@ -4,7 +4,7 @@ export type { BrokerExitWriterTestBarrier } from "./broker-exit-writer-worker";
4
4
  export declare function setBrokerExitWriterBarrierForTest(barrier?: BrokerExitWriterTestBarrier): void;
5
5
  export type BrokerExitMode = "owned-root" | "lost-root";
6
6
  export type BrokerFenceReason = "suspect-unpublished" | "observation-ambiguous" | "heartbeat-ambiguous";
7
- export type BrokerExitReason = "ownership-fence-expired" | "publication-liveness-timeout" | "restart-committed" | "shutdown-request" | "startup-failure" | "signal";
7
+ export type BrokerExitReason = "ownership-fence-expired" | "publication-liveness-timeout" | "heartbeat-renewal-blocked" | "restart-committed" | "shutdown-request" | "startup-failure" | "signal";
8
8
  export type BrokerStopRequest = {
9
9
  kind: "shutdown-request";
10
10
  } | {
@@ -20,6 +20,8 @@ export interface BrokerExitRecord {
20
20
  fenceReason: BrokerFenceReason | null;
21
21
  fencedForMs: number;
22
22
  uptimeMs: number;
23
+ /** For a blocked heartbeat renewal: retained removal transition path. */
24
+ blockingLockPath?: string;
23
25
  pid: number;
24
26
  signal: "SIGINT" | "SIGTERM" | null;
25
27
  writtenAt: number;
@@ -27,7 +29,7 @@ export interface BrokerExitRecord {
27
29
  export interface BrokerStartupExitRecord {
28
30
  version: 1;
29
31
  mode: "startup";
30
- reason: "startup-deadline" | "startup-signal";
32
+ reason: "startup-deadline" | "startup-signal" | "startup-lock-blocked";
31
33
  fenceReason: null;
32
34
  fencedForMs: 0;
33
35
  uptimeMs: number;
@@ -36,6 +38,8 @@ export interface BrokerStartupExitRecord {
36
38
  exitCode: 1 | 130 | 143;
37
39
  timeoutMs: number | null;
38
40
  writtenAt: number;
41
+ /** For lock-blocked reason: path to the retained removal transition. */
42
+ blockingLockPath?: string;
39
43
  }
40
44
  export type BrokerStartupExitWriteStatus = {
41
45
  kind: "written";
@@ -1,5 +1,6 @@
1
1
  import type { NativeDirectoryTreeSnapshot } from "@gajae-code/natives";
2
2
  import type { ModelProfileErrorDetails } from "../../config/model-profile-contract";
3
+ import type { TaskArtifactOwnerDeletionEvidence, TaskArtifactOwnerRetirementContinuation } from "../../session/task-artifact-owner-codec";
3
4
  import { type SdkHostModelResolver } from "../host/model-pin";
4
5
  import { type DirectoryMigrationPolicy } from "../session-directory";
5
6
  import { type BrokerStopRequest } from "./broker-exit";
@@ -7,6 +8,7 @@ import { type BrokerDiscovery, type BrokerPublicationObservation, type RedactedB
7
8
  import { type LifecycleDurableEffectsReceipt, LifecycleLedger, type LifecycleStartupFailureReceipt } from "./lifecycle-ledger";
8
9
  import { type IndexedSession, SessionIndex } from "./session-index";
9
10
  import { type MasterCapabilityVerifier, type SpawnSubstrateFailure, type SpawnSubstrateProvider } from "./spawn-authority";
11
+ import type { BrokerTaskArtifactOwnerRetirementDisposition } from "./task-artifact-owner-validation";
10
12
  export interface BrokerSettings {
11
13
  agentDir: string;
12
14
  packageGeneration?: string;
@@ -36,6 +38,8 @@ export interface BrokerSettings {
36
38
  restartRequestId?: string;
37
39
  /** Cancel bootstrap before retained publication when the owning CLI receives a signal. */
38
40
  startupAbortSignal?: AbortSignal;
41
+ /** Monotonic checkpoint deadline, leaving time for retained publication. */
42
+ startupCheckpointDeadline?: number;
39
43
  /** Called synchronously when retained publication establishes broker readiness. */
40
44
  onStartupReady?: () => void;
41
45
  /** Test-only delay after session checkpoint to verify unpublished discovery ownership. */
@@ -127,6 +131,19 @@ export type BrokerCleanupEvidence = {
127
131
  retainedTranscriptSuccessorPath?: string;
128
132
  retainedTranscriptPlaceholderPath?: string;
129
133
  retainedTranscriptUnknownPath?: string;
134
+ /** Immutable task-artifact owner authority captured before the first deletion effect. */
135
+ taskArtifactOwnerDeletionEvidence?: TaskArtifactOwnerDeletionEvidence;
136
+ /** Latest exact native remnant; it never replaces the original deletion evidence. */
137
+ taskArtifactOwnerRetirementContinuation?: TaskArtifactOwnerRetirementContinuation;
138
+ /** Strict owner-only wire disposition, decoded only with its separately stored evidence. */
139
+ taskArtifactOwnerRetirementOutcome?: BrokerTaskArtifactOwnerRetirementDisposition;
140
+ taskArtifactOwnerPayloadRetired?: true;
141
+ taskArtifactOwnerNamespaceRetained?: true;
142
+ taskArtifactOwnerRetired?: true;
143
+ /** Durable fact that transcript retirement completed while the owner namespace remains. */
144
+ taskArtifactOwnerTranscriptDeleted?: true;
145
+ /** Stable artifacts-phase owner refusal diagnostic. */
146
+ taskArtifactOwnerCleanupError?: string;
130
147
  /** Durable proof that artifact cleanup completed before transcript mutation. */
131
148
  artifactsRemoved?: boolean;
132
149
  artifactsAbsentAtAuthorization?: true;
@@ -362,7 +379,7 @@ export declare class Broker {
362
379
  status(): RedactedBrokerDiscovery | null;
363
380
  heartbeat(): Promise<void>;
364
381
  /** Re-observes provably live session hosts and checkpoints their liveness. */
365
- heartbeatSessions(now?: number): Promise<number>;
382
+ heartbeatSessions(now?: number, abortSignal?: AbortSignal, deadlineAt?: number): Promise<number>;
366
383
  /**
367
384
  * Revalidate retained publication ownership and begin one synchronous effect in
368
385
  * the same stack. The callback is the authority boundary: callers must perform
@@ -192,10 +192,12 @@ export declare class SessionIndex {
192
192
  * stamp of the last completed locked pass, the in-memory projection is
193
193
  * already current and the locked rescan is skipped entirely — this is what
194
194
  * keeps an idle SessionRouter reconcile (2s cadence) from re-parsing and
195
- * re-checksumming the whole index forever. An append committed before the
196
- * stat always changes the stamp, so a miss is impossible; a change landing
197
- * after the stat is seen on the next poll, the same TOCTOU envelope a
198
- * locked read has. A corrupt suffix never takes the fast path: re-scanning
195
+ * re-checksumming the whole index forever. The unchanged check runs before
196
+ * the local queue so unrelated heartbeat work cannot delay ordinary creates.
197
+ * Admission that requires serialized authority must use refresh() instead.
198
+ * An append committed before the stat always changes
199
+ * the stamp; a change landing after the stat is seen on the next poll, the
200
+ * same TOCTOU envelope a locked read has. A corrupt suffix never takes the fast path: re-scanning
199
201
  * preserves the existing re-diagnosis behavior. Returns true when state was
200
202
  * reloaded. Authority revalidation that needs the strongest available
201
203
  * snapshot inside an already-locked write (append, unregister) keeps using
@@ -229,7 +231,11 @@ export declare class SessionIndex {
229
231
  * injected retention policy to a fresh snapshot and truncates the log.
230
232
  */
231
233
  compact(): Promise<void>;
232
- listSessions(probedIncarnations?: ReadonlyMap<string, string | undefined>): SessionList;
234
+ /**
235
+ * Public session rows. `sessionIds` scopes the projection to those sessions:
236
+ * rows for them are identical to the unscoped read, other sessions are absent.
237
+ */
238
+ listSessions(probedIncarnations?: ReadonlyMap<string, string | undefined>, sessionIds?: ReadonlySet<string>): SessionList;
233
239
  /**
234
240
  * Credential-free proof for one exact public endpoint generation.
235
241
  *
@@ -274,7 +280,7 @@ export declare class SessionIndex {
274
280
  * while the broker was down keep their stale or missing heartbeat and read as
275
281
  * unknown/not-live (never fresh forever). Returns the number of checkpoints written.
276
282
  */
277
- checkpointLiveHeartbeats(now?: number): Promise<number>;
283
+ checkpointLiveHeartbeats(now?: number, abortSignal?: AbortSignal, deadlineAt?: number): Promise<number>;
278
284
  hostUnregisteredAfter(registration: Pick<IndexedSession, "sessionId" | "locator" | "endpointGeneration" | "pid" | "indexSeq" | "lifecycleRequestId" | "hostIncarnation" | "processIncarnation" | "endpointFileId">): {
279
285
  indexSeq: number;
280
286
  lifecycleRequestId?: string;
@@ -17,7 +17,7 @@
17
17
  * Enable with Settings notifications config, `GJC_NOTIFICATIONS=1` (a token is
18
18
  * generated), or `GJC_NOTIFICATIONS_TOKEN`.
19
19
  */
20
- import { type RunSettlementProof } from "@gajae-code/agent-core";
20
+ import { type AgentTerminalOwnerContext, type RunCancellationDomain, type RunSettlementProof } from "@gajae-code/agent-core";
21
21
  import type { Tool } from "@gajae-code/ai/core";
22
22
  import type { NotificationServer as NativeNotificationServer } from "@gajae-code/natives";
23
23
  type NotificationServer = NativeNotificationServer;
@@ -266,6 +266,15 @@ export declare class PresentationArbiter {
266
266
  interface SessionRuntime {
267
267
  server: NotificationServer;
268
268
  host: SessionSdkHost;
269
+ getJoinedPromptCorrelations: (owner: AgentTerminalOwnerContext) => Array<{
270
+ commandId: string;
271
+ turnId: string;
272
+ }>;
273
+ isPromptRunOwner: (correlation: {
274
+ commandId: string;
275
+ turnId: string;
276
+ }, owner: AgentTerminalOwnerContext) => boolean;
277
+ retireJoinedPromptOwners: () => void;
269
278
  /** Delivers one ring-positioned event envelope to every attached subscriber
270
279
  * connection, applying the same capability gate as event replay. */
271
280
  broadcastEventFrame: (event: SdkFrame) => string[];
@@ -640,6 +649,8 @@ export declare function createNotificationsExtension(api: ExtensionAPI, options?
640
649
  * preflight outside the durable admission path (review thread P2).
641
650
  */
642
651
  terminalAbortSeams?: {
652
+ getTerminalRunOwnerForEvent?: (event: object) => AgentTerminalOwnerContext | undefined;
653
+ getRunOwnerDomain?: (handle: string) => RunCancellationDomain | undefined;
643
654
  getTerminalTurnEpoch: () => number | undefined;
644
655
  cancelPendingPreflightForTerminalAbort: () => void;
645
656
  captureTerminalAbortSteeringSnapshot?: () => void;
@@ -291,8 +291,13 @@ export declare const SDK_LIFECYCLE_ROUTER_PROTOCOL_VERSION = 1;
291
291
  * so generation-191 owners cannot reap hosts with queued or promoted work.
292
292
  * Generation 193 gates streamed content on negotiated observer capabilities,
293
293
  * so existing owners are replaced before exposing the new observer path.
294
+ * Generation 201 binds queued cancellation and terminal deadlines to the exact
295
+ * consuming run, so pre-fix owners cannot serve the new generic lifecycle path.
296
+ * Generation 202 joins queued-removal terminal publication before ordinary
297
+ * abort acknowledgement, replacing owners that still acknowledge cancellation
298
+ * before its terminal record is durable.
294
299
  */
295
- export declare const DAEMON_GENERATION = 200;
300
+ export declare const DAEMON_GENERATION = 202;
296
301
  /**
297
302
  * Serving-compatibility boundary for daemon lifecycle requests. Epoch 7
298
303
  * requires durable publication receipts and acknowledged attachment dispatch,
@@ -58,6 +58,8 @@ export interface SdkClientOptions {
58
58
  }
59
59
  export interface SdkRequestOptions {
60
60
  timeoutMs?: number;
61
+ /** Absolute wall-clock deadline for this request, including connection setup. */
62
+ deadline?: number;
61
63
  idempotencyKey?: string;
62
64
  confirm?: boolean;
63
65
  /**
@@ -1,3 +1,4 @@
1
+ import type { ProjectProgressSnapshot } from "../../../progress/progress-contract.js";
1
2
  import type { ActiveProviderDescriptor } from "../../providers.js";
2
3
  import { type CursorRegistry } from "./cursor.js";
3
4
  import type { RevisionStore } from "./revision-store.js";
@@ -33,6 +34,8 @@ export interface SessionSurface {
33
34
  totalBytes: number;
34
35
  } | undefined>;
35
36
  getJobs(): unknown | Promise<unknown>;
37
+ /** Q32 read-only project progress snapshot (`gjc.project_progress.v1`). */
38
+ getProjectProgress?(): ProjectProgressSnapshot | Promise<ProjectProgressSnapshot>;
36
39
  /** Q26 keyed lookup of a submitted prompt's authoritative reconciliation status. */
37
40
  getPromptStatus?(selector: {
38
41
  commandId?: string;
@@ -1,4 +1,5 @@
1
1
  export { MODEL_PROFILE_DISCOVERY_QUERY, MODEL_PROFILE_ERROR_DETAIL_MAX_BYTES, type ModelProfileCatalogItem, type ModelProfileErrorCode, type ModelProfileErrorDetails, ModelProfileRegistryError, type ModelProfileRegistryErrorDetails, type UnknownModelProfileDetails, UnknownModelProfileError, } from "../config/model-profile-contract";
2
+ export { PROJECT_PROGRESS_SNAPSHOT_SCHEMA, type ProgressSnapshotAttention, type ProgressSnapshotStory, type ProgressSnapshotTodo, type ProgressSnapshotWorkflow, type ProjectProgressSnapshot, } from "../progress/progress-contract";
2
3
  export type { QueuedInputAdmission, QueuedInputDelivery, QueuedInputExecution, QueuedInputQueuePolicy, QueuedInputRemovalReason, QueuedInputSubmission, QueuedInputTerminal, SendUserMessageOptions, TrackedSendUserMessageOptions, } from "../session/agent-session";
3
4
  export * as bus from "./bus";
4
5
  export * from "./diagnostics/observe-broker";
@@ -112,6 +112,7 @@ export interface SessionRouterClient {
112
112
  connect?(): Promise<void>;
113
113
  request(frame: Record<string, unknown>, options?: {
114
114
  timeoutMs?: number;
115
+ deadline?: number;
115
116
  connectedOnly?: boolean;
116
117
  /** Synchronous pre-send observer; a throw aborts the dispatch before the wire. */
117
118
  beforeDispatch?: (context: SdkDispatchContext) => void;
@@ -224,6 +225,7 @@ export declare class SessionRouter {
224
225
  /** Sends an SDK command through the current attachment without exposing its client. */
225
226
  request(sessionId: string, frame: Record<string, unknown>, expectedGeneration?: number, expectedAttachment?: SessionAttachment, options?: {
226
227
  timeoutMs?: number;
228
+ deadline?: number;
227
229
  beforeDispatch?: (context: SdkDispatchContext) => void;
228
230
  onDispatch?: SdkDispatchHandler;
229
231
  dispatchFence?: (dispatch: () => Promise<Record<string, unknown>>) => Promise<Record<string, unknown>>;
@@ -1,6 +1,6 @@
1
1
  export type SessionListPageRecord = Record<string, unknown>;
2
2
  export type SessionListSavedSessionOmissionReason = "scope_unavailable" | "candidate_scan_failed" | "candidate_not_found" | "candidate_ambiguous" | "candidate_invalid" | "identity_incomplete";
3
- export declare const SESSION_LIST_SAVED_SESSION_OMISSION_DETAIL_CODES: readonly ["cwd_missing", "cwd_not_directory", "identity_unavailable", "network_unsupported", "sessions_root_unavailable", "binding_conflict", "binding_invalid", "migration_busy", "atomic_unavailable", "invalid_request", "durability_failed", "durability_not_provable", "capacity_exceeded", "scan_failed", "unsafe_root", "invalid_candidate", "invalid_header", "unreadable_candidate", "source_changed", "cwd_not_found", "cwd_not_utf8", "cwd_network_unsupported", "cwd_identity_unavailable", "cwd_io_error"];
3
+ export declare const SESSION_LIST_SAVED_SESSION_OMISSION_DETAIL_CODES: readonly ["cwd_missing", "cwd_not_directory", "identity_unavailable", "network_unsupported", "sessions_root_unavailable", "binding_conflict", "binding_invalid", "migration_busy", "managed_gc_journal_capacity_exceeded", "atomic_unavailable", "invalid_request", "durability_failed", "durability_not_provable", "capacity_exceeded", "scan_failed", "unsafe_root", "invalid_candidate", "invalid_header", "unreadable_candidate", "source_changed", "cwd_not_found", "cwd_not_utf8", "cwd_network_unsupported", "cwd_identity_unavailable", "cwd_io_error"];
4
4
  export type SessionListSavedSessionOmissionDetailCode = (typeof SESSION_LIST_SAVED_SESSION_OMISSION_DETAIL_CODES)[number];
5
5
  /** Path-free diagnostic for a requested managed transcript that could not be selected safely. */
6
6
  export interface SessionListSavedSessionOmission {