@gajae-code/coding-agent 0.18.6 → 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 (302) hide show
  1. package/CHANGELOG.md +318 -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 +6 -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/settings.d.ts +4 -0
  15. package/dist/types/config/skill-settings-defaults.d.ts +2 -0
  16. package/dist/types/cursor-delete-path.d.ts +1 -0
  17. package/dist/types/cursor-mcp-name.d.ts +8 -0
  18. package/dist/types/customization/inventory.d.ts +2 -0
  19. package/dist/types/debug/report-bundle-parent.d.ts +2 -0
  20. package/dist/types/defaults/gjc/extensions/grok-cli-vendor/src/provider/stream.d.ts +1 -0
  21. package/dist/types/defaults/gjc/extensions/grok-cli-vendor/src/provider/version-manager.d.ts +31 -0
  22. package/dist/types/defaults/gjc-skills.generated.d.ts +5 -6
  23. package/dist/types/discovery/helpers.d.ts +8 -3
  24. package/dist/types/export/html/css-color.d.ts +2 -0
  25. package/dist/types/export/html/template.generated.d.ts +1 -1
  26. package/dist/types/extensibility/extensions/types.d.ts +7 -0
  27. package/dist/types/extensibility/gjc-plugins/runtime-adapters.d.ts +14 -1
  28. package/dist/types/extensibility/plugins/marketplace/cache.d.ts +2 -0
  29. package/dist/types/extensibility/plugins/plugin-link-path.d.ts +2 -0
  30. package/dist/types/extensibility/runtime-skill-discovery.d.ts +3 -1
  31. package/dist/types/extensibility/skill-management.d.ts +3 -1
  32. package/dist/types/extensibility/skills.d.ts +2 -0
  33. package/dist/types/gjc-runtime/deep-interview-crystallize.d.ts +74 -0
  34. package/dist/types/gjc-runtime/deep-interview-runtime.d.ts +11 -0
  35. package/dist/types/gjc-runtime/gc-runtime.d.ts +5 -0
  36. package/dist/types/gjc-runtime/ralplan-runtime.d.ts +0 -5
  37. package/dist/types/gjc-runtime/state-argv.d.ts +1 -1
  38. package/dist/types/gjc-runtime/state-migrations.d.ts +8 -0
  39. package/dist/types/gjc-runtime/state-runtime.d.ts +95 -0
  40. package/dist/types/gjc-runtime/state-writer.d.ts +11 -1
  41. package/dist/types/gjc-runtime/ultragoal-runtime.d.ts +8 -0
  42. package/dist/types/internal-urls/skill-path.d.ts +1 -0
  43. package/dist/types/lsp/workspace-path.d.ts +1 -0
  44. package/dist/types/modes/acp/acp-agent.d.ts +7 -0
  45. package/dist/types/modes/components/custom-editor.d.ts +6 -0
  46. package/dist/types/modes/components/customization/customization-dashboard.d.ts +1 -0
  47. package/dist/types/modes/components/extensions/state-manager.d.ts +4 -3
  48. package/dist/types/modes/controllers/input-controller.d.ts +9 -0
  49. package/dist/types/modes/interactive-mode.d.ts +1 -0
  50. package/dist/types/modes/utils/interrupt-ownership.d.ts +3 -0
  51. package/dist/types/modes/utils/keybinding-matchers.d.ts +1 -0
  52. package/dist/types/modes/utils/macos-option-forwarding.d.ts +17 -0
  53. package/dist/types/progress/collect-project-progress.d.ts +38 -0
  54. package/dist/types/progress/progress-contract.d.ts +154 -0
  55. package/dist/types/progress/progress-snapshot.d.ts +11 -0
  56. package/dist/types/progress/project-progress.d.ts +141 -0
  57. package/dist/types/progress/render-progress.d.ts +28 -0
  58. package/dist/types/runtime-mcp/elicitation.d.ts +12 -0
  59. package/dist/types/runtime-mcp/oauth-public-url.d.ts +1 -0
  60. package/dist/types/runtime-mcp/plugin-network-boundary.d.ts +1 -0
  61. package/dist/types/runtime-mcp/smithery-registry.d.ts +24 -0
  62. package/dist/types/runtime-mcp/types.d.ts +6 -0
  63. package/dist/types/sdk/acp/adapter.d.ts +1 -1
  64. package/dist/types/sdk/broker/broker-exit.d.ts +6 -2
  65. package/dist/types/sdk/broker/broker.d.ts +18 -1
  66. package/dist/types/sdk/broker/lifecycle.d.ts +9 -0
  67. package/dist/types/sdk/broker/session-index.d.ts +12 -6
  68. package/dist/types/sdk/broker/task-artifact-owner-validation.d.ts +55 -0
  69. package/dist/types/sdk/bus/index.d.ts +12 -1
  70. package/dist/types/sdk/bus/telegram-daemon-contract.d.ts +6 -1
  71. package/dist/types/sdk/bus/telegram-daemon.d.ts +3 -2
  72. package/dist/types/sdk/client/client.d.ts +2 -0
  73. package/dist/types/sdk/host/host.d.ts +6 -0
  74. package/dist/types/sdk/host/query/handlers.d.ts +3 -0
  75. package/dist/types/sdk/index.d.ts +1 -0
  76. package/dist/types/sdk/router/session-router.d.ts +9 -0
  77. package/dist/types/sdk/session-list.d.ts +1 -1
  78. package/dist/types/sdk/session.d.ts +8 -0
  79. package/dist/types/session/agent-session.d.ts +38 -9
  80. package/dist/types/session/artifacts.d.ts +2 -2
  81. package/dist/types/session/internal/managed-gc-retirement-codec.d.ts +32 -0
  82. package/dist/types/session/internal/managed-session-scope.d.ts +79 -2
  83. package/dist/types/session/internal/managed-session-storage.d.ts +36 -1
  84. package/dist/types/session/internal/managed-task-owner-cleanup.d.ts +62 -0
  85. package/dist/types/session/internal/task-artifact-owner-access.d.ts +19 -0
  86. package/dist/types/session/internal/task-artifact-owner-transcript.d.ts +11 -0
  87. package/dist/types/session/session-manager.d.ts +31 -5
  88. package/dist/types/session/session-retirement.d.ts +71 -0
  89. package/dist/types/session/session-storage.d.ts +62 -48
  90. package/dist/types/session/session-transcript-header.d.ts +2 -0
  91. package/dist/types/session/task-artifact-owner-codec.d.ts +109 -0
  92. package/dist/types/session/task-artifact-owner-retirement.d.ts +7 -0
  93. package/dist/types/session/task-artifact-owner.d.ts +10 -0
  94. package/dist/types/setup/credential-auto-import.d.ts +1 -1
  95. package/dist/types/setup/credential-import.d.ts +6 -4
  96. package/dist/types/skill-state/active-state.d.ts +38 -0
  97. package/dist/types/slash-commands/helpers/progress-report.d.ts +8 -0
  98. package/dist/types/task/executor.d.ts +3 -0
  99. package/dist/types/tools/bash-skill-urls.d.ts +1 -1
  100. package/dist/types/tools/index.d.ts +3 -0
  101. package/dist/types/tools/python.d.ts +9 -1
  102. package/dist/types/tools/recipe/recipe-guard.d.ts +7 -0
  103. package/dist/types/tools/restricted-cwd.d.ts +1 -0
  104. package/dist/types/tools/todo-write.d.ts +6 -0
  105. package/dist/types/utils/tools-checksum.d.ts +7 -0
  106. package/package.json +7 -7
  107. package/scripts/generate-sdk-operation-inventory.ts +21 -0
  108. package/scripts/resident-memory-bench.ts +174 -20
  109. package/scripts/verify-managed-empty-stop.ts +28 -0
  110. package/src/async/job-manager.ts +228 -122
  111. package/src/capability/index.ts +18 -0
  112. package/src/capability/mcp.ts +2 -0
  113. package/src/capability/skill.ts +2 -0
  114. package/src/capability/types.ts +6 -0
  115. package/src/cli/auth-broker-cli.ts +1 -1
  116. package/src/cli/config-cli.ts +8 -18
  117. package/src/cli/customize-doctor.ts +15 -2
  118. package/src/cli/public-command-errors.ts +21 -1
  119. package/src/cli/setup-cli.ts +4 -4
  120. package/src/cli/skills-cli.ts +5 -0
  121. package/src/cli-main.ts +7 -8
  122. package/src/commands/deep-interview.ts +47 -8
  123. package/src/commands/sdk.ts +140 -29
  124. package/src/config/autorouting-tier-map.ts +117 -7
  125. package/src/config/file-lock.ts +307 -68
  126. package/src/config/mcp-schema.json +4 -0
  127. package/src/config/model-bindings-applier.ts +20 -0
  128. package/src/config/model-profile-activation.ts +240 -46
  129. package/src/config/model-registry.ts +47 -153
  130. package/src/config/settings.ts +44 -4
  131. package/src/config/skill-settings-defaults.ts +7 -0
  132. package/src/coordinator-mcp/policy.ts +3 -2
  133. package/src/cursor-delete-path.ts +10 -0
  134. package/src/cursor-mcp-name.ts +15 -0
  135. package/src/cursor.ts +13 -2
  136. package/src/customization/inventory.ts +3 -0
  137. package/src/debug/report-bundle-parent.ts +22 -0
  138. package/src/debug/report-bundle.ts +3 -0
  139. package/src/debug/system-info.ts +13 -1
  140. package/src/defaults/gjc/extensions/grok-cli-vendor/src/provider/stream.ts +67 -4
  141. package/src/defaults/gjc/extensions/grok-cli-vendor/src/provider/version-manager.ts +80 -0
  142. package/src/defaults/gjc/skills/deep-interview/SKILL.md +105 -10
  143. package/src/defaults/gjc/skills/ralplan/SKILL.md +6 -4
  144. package/src/defaults/gjc-defaults.test.ts +18 -1
  145. package/src/defaults/gjc-defaults.ts +3 -0
  146. package/src/defaults/gjc-skills.generated.ts +58 -36
  147. package/src/discovery/agents.ts +6 -1
  148. package/src/discovery/builtin.ts +10 -0
  149. package/src/discovery/helpers.ts +168 -23
  150. package/src/discovery/mcp-json.ts +6 -0
  151. package/src/discovery/ssh.ts +9 -4
  152. package/src/discovery/substitute-plugin-root.ts +3 -1
  153. package/src/edit/file-read-cache.ts +1 -1
  154. package/src/eval/py/executor.ts +380 -120
  155. package/src/export/html/css-color.ts +9 -0
  156. package/src/export/html/index.ts +5 -4
  157. package/src/export/html/template.generated.ts +1 -1
  158. package/src/extensibility/extensions/runner.ts +4 -0
  159. package/src/extensibility/extensions/types.ts +7 -0
  160. package/src/extensibility/gjc-plugins/runtime-adapters.ts +73 -8
  161. package/src/extensibility/plugins/manager.ts +3 -2
  162. package/src/extensibility/plugins/marketplace/cache.ts +15 -0
  163. package/src/extensibility/plugins/marketplace/manager.ts +11 -3
  164. package/src/extensibility/plugins/plugin-link-path.ts +12 -0
  165. package/src/extensibility/runtime-skill-discovery.ts +20 -2
  166. package/src/extensibility/skill-management.ts +6 -2
  167. package/src/extensibility/skills.ts +6 -1
  168. package/src/gjc-runtime/deep-interview-crystallize.ts +1814 -0
  169. package/src/gjc-runtime/deep-interview-recorder.ts +20 -2
  170. package/src/gjc-runtime/deep-interview-runtime.ts +1415 -13
  171. package/src/gjc-runtime/deep-interview-stage.ts +98 -21
  172. package/src/gjc-runtime/gc-runtime.ts +206 -8
  173. package/src/gjc-runtime/launch-worktree.ts +14 -4
  174. package/src/gjc-runtime/ralplan-runtime.ts +447 -52
  175. package/src/gjc-runtime/state-argv.ts +2 -0
  176. package/src/gjc-runtime/state-migrations.ts +91 -29
  177. package/src/gjc-runtime/state-runtime.ts +3716 -135
  178. package/src/gjc-runtime/state-writer.ts +83 -8
  179. package/src/gjc-runtime/ultragoal-runtime.ts +16 -4
  180. package/src/gjc-runtime/workflow-manifest.generated.json +70 -42
  181. package/src/gjc-runtime/workflow-manifest.ts +54 -21
  182. package/src/harness-control-plane/operate.ts +12 -4
  183. package/src/harness-control-plane/owner.ts +5 -1
  184. package/src/hashline/parser.ts +48 -9
  185. package/src/hashline/recovery.ts +13 -4
  186. package/src/hindsight/config.ts +9 -3
  187. package/src/internal-urls/docs-index.generated.ts +19 -18
  188. package/src/internal-urls/skill-path.ts +19 -0
  189. package/src/internal-urls/skill-protocol.ts +2 -0
  190. package/src/lsp/edits.ts +6 -0
  191. package/src/lsp/workspace-path.ts +51 -0
  192. package/src/main.ts +195 -31
  193. package/src/modes/acp/acp-agent.ts +163 -7
  194. package/src/modes/components/custom-editor.ts +14 -0
  195. package/src/modes/components/customization/customization-dashboard.ts +12 -0
  196. package/src/modes/components/extensions/extension-dashboard.ts +2 -2
  197. package/src/modes/components/extensions/state-manager.ts +15 -5
  198. package/src/modes/components/model-selector.ts +1 -4
  199. package/src/modes/components/provider-onboarding-selector.ts +1 -1
  200. package/src/modes/components/status-line/segments.ts +4 -0
  201. package/src/modes/controllers/event-controller.ts +11 -4
  202. package/src/modes/controllers/input-controller.ts +74 -29
  203. package/src/modes/controllers/runtime-mcp-command-controller.ts +8 -3
  204. package/src/modes/controllers/selector-controller.ts +28 -15
  205. package/src/modes/interactive-mode.ts +4 -0
  206. package/src/modes/runtime-init.ts +4 -0
  207. package/src/modes/utils/abort-message.ts +3 -1
  208. package/src/modes/utils/interrupt-ownership.ts +12 -0
  209. package/src/modes/utils/keybinding-matchers.ts +4 -0
  210. package/src/modes/utils/macos-option-forwarding.ts +80 -0
  211. package/src/progress/collect-project-progress.ts +153 -0
  212. package/src/progress/progress-contract.ts +172 -0
  213. package/src/progress/progress-snapshot.ts +140 -0
  214. package/src/progress/project-progress.ts +446 -0
  215. package/src/progress/render-progress.ts +209 -0
  216. package/src/prompts/system/master-mode.md +1 -0
  217. package/src/prompts/tools/skill-discovery.md +1 -1
  218. package/src/runtime-mcp/client.ts +13 -4
  219. package/src/runtime-mcp/config-writer.ts +10 -6
  220. package/src/runtime-mcp/config.ts +1 -0
  221. package/src/runtime-mcp/elicitation.ts +142 -0
  222. package/src/runtime-mcp/oauth-flow.ts +5 -0
  223. package/src/runtime-mcp/oauth-public-url.ts +8 -0
  224. package/src/runtime-mcp/plugin-network-boundary.ts +4 -0
  225. package/src/runtime-mcp/smithery-registry.ts +22 -3
  226. package/src/runtime-mcp/transports/http.ts +2 -2
  227. package/src/runtime-mcp/types.ts +6 -0
  228. package/src/sdk/acp/adapter.ts +93 -8
  229. package/src/sdk/broker/broker-exit.ts +52 -23
  230. package/src/sdk/broker/broker.ts +83 -7
  231. package/src/sdk/broker/ensure.ts +2 -0
  232. package/src/sdk/broker/lifecycle.ts +820 -73
  233. package/src/sdk/broker/session-index.ts +191 -81
  234. package/src/sdk/broker/task-artifact-owner-validation.ts +259 -0
  235. package/src/sdk/bus/chat-daemon-cli.ts +38 -1
  236. package/src/sdk/bus/chat-daemon-control.ts +2 -2
  237. package/src/sdk/bus/chat-daemon-runtime.ts +3 -0
  238. package/src/sdk/bus/index.ts +241 -46
  239. package/src/sdk/bus/telegram-daemon-contract.ts +6 -1
  240. package/src/sdk/bus/telegram-daemon.ts +4 -2
  241. package/src/sdk/cli/session-cli.ts +17 -3
  242. package/src/sdk/client/client.ts +28 -8
  243. package/src/sdk/host/host.ts +6 -0
  244. package/src/sdk/host/query/handlers.ts +9 -1
  245. package/src/sdk/host/session-runtime.test.ts +2805 -411
  246. package/src/sdk/host/session-runtime.ts +428 -111
  247. package/src/sdk/host/surface-policy.ts +1 -0
  248. package/src/sdk/index.ts +8 -0
  249. package/src/sdk/lifecycle-session.ts +3 -1
  250. package/src/sdk/mcp/server.ts +15 -3
  251. package/src/sdk/prompt-deadline-manager.ts +15 -0
  252. package/src/sdk/protocol/operation-inventory.generated.json +146 -0
  253. package/src/sdk/protocol/operation-registry.ts +9 -2
  254. package/src/sdk/router/session-router.ts +94 -14
  255. package/src/sdk/session-list.ts +1 -0
  256. package/src/sdk/session.ts +81 -38
  257. package/src/session/agent-session.ts +674 -224
  258. package/src/session/artifacts.ts +174 -70
  259. package/src/session/internal/managed-gc-retirement-codec.ts +319 -0
  260. package/src/session/internal/managed-session-scope.ts +3457 -462
  261. package/src/session/internal/managed-session-storage.ts +482 -61
  262. package/src/session/internal/managed-task-owner-cleanup.ts +473 -0
  263. package/src/session/internal/task-artifact-owner-access.ts +245 -0
  264. package/src/session/internal/task-artifact-owner-transcript.ts +614 -0
  265. package/src/session/session-manager.ts +939 -133
  266. package/src/session/session-retirement.ts +714 -0
  267. package/src/session/session-storage.ts +418 -174
  268. package/src/session/session-transcript-header.ts +17 -0
  269. package/src/session/task-artifact-owner-codec.ts +641 -0
  270. package/src/session/task-artifact-owner-retirement.ts +477 -0
  271. package/src/session/task-artifact-owner.ts +289 -0
  272. package/src/setup/credential-auto-import.ts +12 -3
  273. package/src/setup/credential-import.ts +176 -5
  274. package/src/setup/paseo/announce.ts +6 -1
  275. package/src/skill-state/active-state.ts +132 -2
  276. package/src/slash-commands/builtin-registry.ts +39 -9
  277. package/src/slash-commands/helpers/progress-report.ts +23 -0
  278. package/src/stt/setup.ts +3 -5
  279. package/src/task/commands.ts +3 -1
  280. package/src/task/executor.ts +4 -0
  281. package/src/task/index.ts +6 -0
  282. package/src/tools/ask.ts +205 -6
  283. package/src/tools/ast-edit.ts +4 -0
  284. package/src/tools/bash-allowed-prefixes.ts +15 -0
  285. package/src/tools/bash-skill-urls.ts +56 -3
  286. package/src/tools/bash.ts +48 -79
  287. package/src/tools/descriptors.ts +5 -1
  288. package/src/tools/eval.ts +56 -36
  289. package/src/tools/image-gen.ts +1 -1
  290. package/src/tools/index.ts +3 -0
  291. package/src/tools/python.ts +187 -66
  292. package/src/tools/recipe/index.ts +9 -0
  293. package/src/tools/recipe/recipe-guard.ts +19 -0
  294. package/src/tools/restricted-cwd.ts +10 -0
  295. package/src/tools/skill-discovery.ts +5 -0
  296. package/src/tools/skill.ts +28 -1
  297. package/src/tools/todo-write.ts +10 -1
  298. package/src/tools/tool-catalog.generated.ts +1 -1
  299. package/src/tools/write.ts +1 -0
  300. package/src/utils/tools-checksum.ts +34 -0
  301. package/src/utils/tools-manager.ts +24 -6
  302. 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,12 @@
1
+ import type { ExtensionUIContext } from "../extensibility/extensions/types";
2
+ import type { AskAnswerSource } from "../tools";
3
+ import type { MCPInputRequestHandler } from "./types";
4
+ export interface MCPFormInputDependencies {
5
+ getUi(): {
6
+ ui?: Pick<ExtensionUIContext, "select" | "input">;
7
+ hasUI: boolean;
8
+ };
9
+ getAskAnswerSource(): AskAnswerSource | undefined;
10
+ }
11
+ /** Register on an owned manager; dependencies are resolved per call for late UI registration. */
12
+ export declare function createMCPFormInputHandler(deps: MCPFormInputDependencies): MCPInputRequestHandler;
@@ -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
@@ -181,6 +181,15 @@ export declare function observeProcessForTest(pid: number, expectedIncarnation:
181
181
  * deliberately left untouched.
182
182
  */
183
183
  export declare function reapDeadLifecycleMarkers(root: string, limit?: number): Promise<number>;
184
+ /**
185
+ * Retires one launch id's lifecycle marker pair after its recorded owner has
186
+ * exited. Unlike the bounded background sweep, this launch-local repair is
187
+ * not age-gated and does not require the ready sibling to contain the same
188
+ * effect marker: the primary marker is the owner authority for this id.
189
+ */
190
+ type RetireExitedLifecycleMarkerPairHook = () => void | Promise<void>;
191
+ export declare function retireExitedLifecycleMarkerPair(root: string, id: string): Promise<boolean>;
192
+ export declare function retireExitedLifecycleMarkerPairForTest(root: string, id: string, afterObservation: RetireExitedLifecycleMarkerPairHook): Promise<boolean>;
184
193
  export declare function writeEffectMarker(root: string, id: string, marker: EffectMarker): Promise<void>;
185
194
  export declare class LifecycleReadinessCleanupError extends Error {
186
195
  constructor(cause: unknown);
@@ -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;
@@ -0,0 +1,55 @@
1
+ import type { NativeExactUnlinkResult } from "@gajae-code/natives";
2
+ import { type TaskArtifactOwnerDeletionEvidence, type TaskArtifactOwnerRetirementContinuation, type TaskArtifactOwnerRetirementOutcome, type TaskArtifactOwnerStorageContext } from "../../session/task-artifact-owner-codec";
3
+ export type BrokerCleanupPhase = "artifacts" | "transcript" | "metadata" | "lifecycle";
4
+ /** Exact owner-disposition wire shape. Evidence and continuation are supplied separately by cleanup replay. */
5
+ export type BrokerTaskArtifactOwnerRetirementDisposition = {
6
+ readonly kind: "completed";
7
+ readonly nativeOutcome?: NativeExactUnlinkResult;
8
+ } | {
9
+ readonly kind: "payload_retired";
10
+ readonly namespace: "retained";
11
+ readonly nativeOutcome: NativeExactUnlinkResult;
12
+ } | {
13
+ readonly kind: "cleanup_pending";
14
+ readonly nativeOutcome?: NativeExactUnlinkResult;
15
+ } | {
16
+ readonly kind: "uncertain";
17
+ readonly reason: string;
18
+ readonly nativeOutcome?: NativeExactUnlinkResult;
19
+ };
20
+ /** Owner-only projection of durable cleanup state accepted by the pure validator. */
21
+ export interface BrokerTaskArtifactOwnerCleanupFields {
22
+ readonly taskArtifactOwnerDeletionEvidence?: unknown;
23
+ readonly taskArtifactOwnerRetirementContinuation?: unknown;
24
+ readonly taskArtifactOwnerRetirementOutcome?: unknown;
25
+ readonly taskArtifactOwnerPayloadRetired?: unknown;
26
+ readonly taskArtifactOwnerNamespaceRetained?: unknown;
27
+ readonly taskArtifactOwnerRetired?: unknown;
28
+ readonly taskArtifactOwnerTranscriptDeleted?: unknown;
29
+ readonly taskArtifactOwnerCleanupError?: unknown;
30
+ }
31
+ /** Fully decoded owner-only cleanup state for an authorized session and phase. */
32
+ export interface BrokerTaskArtifactOwnerCleanupValidation {
33
+ readonly deletionEvidence?: TaskArtifactOwnerDeletionEvidence;
34
+ readonly retirementContinuation?: TaskArtifactOwnerRetirementContinuation;
35
+ readonly retirementOutcome?: TaskArtifactOwnerRetirementOutcome;
36
+ readonly payloadRetired?: true;
37
+ readonly namespaceRetained?: true;
38
+ readonly retired?: true;
39
+ readonly transcriptDeleted?: true;
40
+ readonly cleanupDiagnostic?: string;
41
+ }
42
+ /**
43
+ * Decode the owner-only wire disposition using its exact trusted evidence and continuation.
44
+ * A decoded `completed` value is historical DTO data, not proof of physical retirement or writer closure.
45
+ */
46
+ export declare function parseBrokerTaskArtifactOwnerRetirementDisposition(value: unknown, context: TaskArtifactOwnerStorageContext, evidence: TaskArtifactOwnerDeletionEvidence, continuation: TaskArtifactOwnerRetirementContinuation | undefined): TaskArtifactOwnerRetirementOutcome;
47
+ /** Project an already validated internal outcome to the exact broker wire disposition. */
48
+ export declare function serializeBrokerTaskArtifactOwnerRetirementDisposition(outcome: TaskArtifactOwnerRetirementOutcome): BrokerTaskArtifactOwnerRetirementDisposition;
49
+ /**
50
+ * Strictly decode the owner-field projection of cleanup state against trusted session, scope context, phase,
51
+ * and artifact-removal state. Empty/legacy owner fields decode to an empty result. A decoded completion
52
+ * remains historical data: any later effect must separately verify current physical absence, fresh scrub
53
+ * proof, native success and current owner-parent/side-path authority before it mutates storage or transcripts.
54
+ */
55
+ export declare function decodeBrokerTaskArtifactOwnerCleanupFields(value: unknown, context: TaskArtifactOwnerStorageContext, expectedSessionId: string, phase: BrokerCleanupPhase, artifactsRemoved: boolean | undefined): BrokerTaskArtifactOwnerCleanupValidation;
@@ -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;