@gajae-code/coding-agent 0.2.5 → 0.3.1

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 (234) hide show
  1. package/CHANGELOG.md +28 -0
  2. package/dist/types/async/job-manager.d.ts +91 -2
  3. package/dist/types/cli/args.d.ts +1 -1
  4. package/dist/types/commands/deep-interview.d.ts +3 -0
  5. package/dist/types/commands/harness.d.ts +37 -0
  6. package/dist/types/config/keybindings.d.ts +5 -0
  7. package/dist/types/config/settings-schema.d.ts +10 -4
  8. package/dist/types/config/settings.d.ts +2 -0
  9. package/dist/types/debug/crash-diagnostics.d.ts +45 -0
  10. package/dist/types/debug/runtime-gauges.d.ts +6 -0
  11. package/dist/types/deep-interview/render-middleware.d.ts +6 -0
  12. package/dist/types/eval/py/executor.d.ts +2 -0
  13. package/dist/types/eval/py/kernel.d.ts +2 -0
  14. package/dist/types/exec/bash-executor.d.ts +10 -0
  15. package/dist/types/extensibility/custom-tools/types.d.ts +1 -0
  16. package/dist/types/extensibility/extensions/types.d.ts +6 -0
  17. package/dist/types/extensibility/shared-events.d.ts +1 -0
  18. package/dist/types/gjc-runtime/cli-write-receipt.d.ts +24 -0
  19. package/dist/types/gjc-runtime/deep-interview-runtime.d.ts +1 -0
  20. package/dist/types/gjc-runtime/state-graph.d.ts +4 -0
  21. package/dist/types/gjc-runtime/state-migrations.d.ts +33 -0
  22. package/dist/types/gjc-runtime/state-renderer.d.ts +65 -0
  23. package/dist/types/gjc-runtime/state-runtime.d.ts +2 -0
  24. package/dist/types/gjc-runtime/state-schema.d.ts +317 -0
  25. package/dist/types/gjc-runtime/state-validation.d.ts +6 -0
  26. package/dist/types/gjc-runtime/state-writer.d.ts +147 -0
  27. package/dist/types/gjc-runtime/team-runtime.d.ts +81 -7
  28. package/dist/types/gjc-runtime/workflow-command-ref.d.ts +43 -0
  29. package/dist/types/gjc-runtime/workflow-manifest.d.ts +54 -0
  30. package/dist/types/harness-control-plane/classifier.d.ts +13 -0
  31. package/dist/types/harness-control-plane/control-endpoint.d.ts +31 -0
  32. package/dist/types/harness-control-plane/finalize.d.ts +47 -0
  33. package/dist/types/harness-control-plane/frame-mapper.d.ts +29 -0
  34. package/dist/types/harness-control-plane/operate.d.ts +35 -0
  35. package/dist/types/harness-control-plane/owner.d.ts +46 -0
  36. package/dist/types/harness-control-plane/preserve.d.ts +19 -0
  37. package/dist/types/harness-control-plane/receipts.d.ts +88 -0
  38. package/dist/types/harness-control-plane/rpc-adapter.d.ts +66 -0
  39. package/dist/types/harness-control-plane/seams.d.ts +21 -0
  40. package/dist/types/harness-control-plane/session-lease.d.ts +65 -0
  41. package/dist/types/harness-control-plane/state-machine.d.ts +19 -0
  42. package/dist/types/harness-control-plane/storage.d.ts +53 -0
  43. package/dist/types/harness-control-plane/types.d.ts +162 -0
  44. package/dist/types/hooks/skill-keywords.d.ts +2 -1
  45. package/dist/types/hooks/skill-state.d.ts +23 -29
  46. package/dist/types/internal-urls/agent-protocol.d.ts +2 -2
  47. package/dist/types/internal-urls/artifact-protocol.d.ts +2 -2
  48. package/dist/types/internal-urls/registry-helpers.d.ts +8 -7
  49. package/dist/types/internal-urls/types.d.ts +4 -0
  50. package/dist/types/lsp/index.d.ts +10 -10
  51. package/dist/types/modes/bridge/auth.d.ts +12 -0
  52. package/dist/types/modes/bridge/bridge-client-bridge.d.ts +9 -0
  53. package/dist/types/modes/bridge/bridge-mode.d.ts +44 -0
  54. package/dist/types/modes/bridge/bridge-ui-context.d.ts +88 -0
  55. package/dist/types/modes/bridge/event-stream.d.ts +8 -0
  56. package/dist/types/modes/components/custom-editor.d.ts +6 -0
  57. package/dist/types/modes/components/hook-selector.d.ts +1 -0
  58. package/dist/types/modes/components/jobs-overlay-model.d.ts +31 -0
  59. package/dist/types/modes/components/jobs-overlay.d.ts +30 -0
  60. package/dist/types/modes/components/status-line/types.d.ts +2 -0
  61. package/dist/types/modes/components/status-line.d.ts +2 -0
  62. package/dist/types/modes/controllers/input-controller.d.ts +1 -0
  63. package/dist/types/modes/controllers/selector-controller.d.ts +8 -0
  64. package/dist/types/modes/index.d.ts +1 -0
  65. package/dist/types/modes/interactive-mode.d.ts +2 -0
  66. package/dist/types/modes/jobs-observer.d.ts +57 -0
  67. package/dist/types/modes/rpc/host-tools.d.ts +1 -16
  68. package/dist/types/modes/rpc/host-uris.d.ts +1 -38
  69. package/dist/types/modes/shared/agent-wire/command-dispatch.d.ts +20 -0
  70. package/dist/types/modes/shared/agent-wire/command-validation.d.ts +2 -0
  71. package/dist/types/modes/shared/agent-wire/event-envelope.d.ts +24 -0
  72. package/dist/types/modes/shared/agent-wire/handshake.d.ts +46 -0
  73. package/dist/types/modes/shared/agent-wire/host-tool-bridge.d.ts +16 -0
  74. package/dist/types/modes/shared/agent-wire/host-uri-bridge.d.ts +17 -0
  75. package/dist/types/modes/shared/agent-wire/protocol.d.ts +44 -0
  76. package/dist/types/modes/shared/agent-wire/responses.d.ts +4 -0
  77. package/dist/types/modes/shared/agent-wire/scopes.d.ts +18 -0
  78. package/dist/types/modes/shared/agent-wire/ui-request-broker.d.ts +42 -0
  79. package/dist/types/modes/shared/agent-wire/ui-result.d.ts +27 -0
  80. package/dist/types/modes/types.d.ts +2 -0
  81. package/dist/types/sdk.d.ts +4 -0
  82. package/dist/types/session/agent-session.d.ts +19 -1
  83. package/dist/types/skill-state/active-state.d.ts +2 -0
  84. package/dist/types/skill-state/deep-interview-mutation-guard.d.ts +1 -1
  85. package/dist/types/skill-state/workflow-state-contract.d.ts +25 -2
  86. package/dist/types/skill-state/workflow-state-version.d.ts +3 -0
  87. package/dist/types/task/executor.d.ts +3 -0
  88. package/dist/types/task/id.d.ts +7 -0
  89. package/dist/types/task/index.d.ts +5 -0
  90. package/dist/types/task/receipt.d.ts +85 -0
  91. package/dist/types/task/spawn-gate.d.ts +38 -0
  92. package/dist/types/task/types.d.ts +198 -14
  93. package/dist/types/tools/cron.d.ts +6 -0
  94. package/dist/types/tools/index.d.ts +2 -0
  95. package/dist/types/tools/path-utils.d.ts +1 -0
  96. package/dist/types/tools/subagent.d.ts +26 -1
  97. package/package.json +7 -7
  98. package/scripts/build-binary.ts +7 -0
  99. package/src/async/job-manager.ts +334 -6
  100. package/src/cli/args.ts +9 -2
  101. package/src/cli/auth-broker-cli.ts +1 -0
  102. package/src/cli/config-cli.ts +10 -2
  103. package/src/cli.ts +2 -0
  104. package/src/commands/deep-interview.ts +1 -0
  105. package/src/commands/harness.ts +862 -0
  106. package/src/commands/launch.ts +2 -2
  107. package/src/commands/state.ts +2 -1
  108. package/src/commands/team.ts +54 -39
  109. package/src/config/keybindings.ts +6 -0
  110. package/src/config/settings-schema.ts +13 -3
  111. package/src/config/settings.ts +5 -0
  112. package/src/dap/client.ts +17 -3
  113. package/src/debug/crash-diagnostics.ts +223 -0
  114. package/src/debug/runtime-gauges.ts +20 -0
  115. package/src/deep-interview/render-middleware.ts +372 -0
  116. package/src/defaults/gjc/skills/deep-interview/SKILL.md +1 -1
  117. package/src/defaults/gjc/skills/ralplan/SKILL.md +31 -2
  118. package/src/defaults/gjc/skills/team/SKILL.md +47 -21
  119. package/src/defaults/gjc/skills/ultragoal/SKILL.md +106 -13
  120. package/src/eval/py/executor.ts +21 -1
  121. package/src/eval/py/kernel.ts +15 -0
  122. package/src/exec/bash-executor.ts +41 -0
  123. package/src/extensibility/custom-tools/types.ts +1 -0
  124. package/src/extensibility/extensions/types.ts +6 -0
  125. package/src/extensibility/shared-events.ts +1 -0
  126. package/src/gjc-runtime/cli-write-receipt.ts +31 -0
  127. package/src/gjc-runtime/deep-interview-runtime.ts +98 -42
  128. package/src/gjc-runtime/goal-mode-request.ts +11 -3
  129. package/src/gjc-runtime/ralplan-runtime.ts +235 -43
  130. package/src/gjc-runtime/state-graph.ts +86 -0
  131. package/src/gjc-runtime/state-migrations.ts +179 -0
  132. package/src/gjc-runtime/state-renderer.ts +345 -0
  133. package/src/gjc-runtime/state-runtime.ts +1155 -46
  134. package/src/gjc-runtime/state-schema.ts +192 -0
  135. package/src/gjc-runtime/state-validation.ts +49 -0
  136. package/src/gjc-runtime/state-writer.ts +749 -0
  137. package/src/gjc-runtime/team-runtime.ts +1255 -189
  138. package/src/gjc-runtime/ultragoal-runtime.ts +460 -43
  139. package/src/gjc-runtime/workflow-command-ref.ts +239 -0
  140. package/src/gjc-runtime/workflow-manifest.generated.json +1601 -0
  141. package/src/gjc-runtime/workflow-manifest.ts +427 -0
  142. package/src/harness-control-plane/classifier.ts +128 -0
  143. package/src/harness-control-plane/control-endpoint.ts +148 -0
  144. package/src/harness-control-plane/finalize.ts +222 -0
  145. package/src/harness-control-plane/frame-mapper.ts +286 -0
  146. package/src/harness-control-plane/operate.ts +225 -0
  147. package/src/harness-control-plane/owner.ts +600 -0
  148. package/src/harness-control-plane/preserve.ts +102 -0
  149. package/src/harness-control-plane/receipts.ts +216 -0
  150. package/src/harness-control-plane/rpc-adapter.ts +276 -0
  151. package/src/harness-control-plane/seams.ts +39 -0
  152. package/src/harness-control-plane/session-lease.ts +388 -0
  153. package/src/harness-control-plane/state-machine.ts +98 -0
  154. package/src/harness-control-plane/storage.ts +257 -0
  155. package/src/harness-control-plane/types.ts +214 -0
  156. package/src/hooks/skill-keywords.ts +4 -2
  157. package/src/hooks/skill-state.ts +197 -64
  158. package/src/internal-urls/agent-protocol.ts +68 -21
  159. package/src/internal-urls/artifact-protocol.ts +12 -17
  160. package/src/internal-urls/docs-index.generated.ts +3 -2
  161. package/src/internal-urls/registry-helpers.ts +19 -16
  162. package/src/internal-urls/types.ts +4 -0
  163. package/src/lsp/client.ts +18 -2
  164. package/src/main.ts +21 -5
  165. package/src/modes/bridge/auth.ts +41 -0
  166. package/src/modes/bridge/bridge-client-bridge.ts +47 -0
  167. package/src/modes/bridge/bridge-mode.ts +520 -0
  168. package/src/modes/bridge/bridge-ui-context.ts +200 -0
  169. package/src/modes/bridge/event-stream.ts +70 -0
  170. package/src/modes/components/assistant-message.ts +5 -1
  171. package/src/modes/components/custom-editor.ts +101 -0
  172. package/src/modes/components/hook-selector.ts +133 -20
  173. package/src/modes/components/jobs-overlay-model.ts +109 -0
  174. package/src/modes/components/jobs-overlay.ts +172 -0
  175. package/src/modes/components/status-line/presets.ts +7 -5
  176. package/src/modes/components/status-line/segments.ts +25 -0
  177. package/src/modes/components/status-line/types.ts +2 -0
  178. package/src/modes/components/status-line.ts +9 -1
  179. package/src/modes/controllers/event-controller.ts +71 -6
  180. package/src/modes/controllers/extension-ui-controller.ts +43 -1
  181. package/src/modes/controllers/input-controller.ts +105 -9
  182. package/src/modes/controllers/selector-controller.ts +31 -1
  183. package/src/modes/index.ts +1 -0
  184. package/src/modes/interactive-mode.ts +28 -0
  185. package/src/modes/jobs-observer.ts +204 -0
  186. package/src/modes/rpc/host-tools.ts +1 -186
  187. package/src/modes/rpc/host-uris.ts +1 -235
  188. package/src/modes/rpc/rpc-client.ts +25 -10
  189. package/src/modes/rpc/rpc-mode.ts +12 -381
  190. package/src/modes/shared/agent-wire/command-dispatch.ts +341 -0
  191. package/src/modes/shared/agent-wire/command-validation.ts +131 -0
  192. package/src/modes/shared/agent-wire/event-envelope.ts +108 -0
  193. package/src/modes/shared/agent-wire/handshake.ts +117 -0
  194. package/src/modes/shared/agent-wire/host-tool-bridge.ts +194 -0
  195. package/src/modes/shared/agent-wire/host-uri-bridge.ts +236 -0
  196. package/src/modes/shared/agent-wire/protocol.ts +96 -0
  197. package/src/modes/shared/agent-wire/responses.ts +17 -0
  198. package/src/modes/shared/agent-wire/scopes.ts +89 -0
  199. package/src/modes/shared/agent-wire/ui-request-broker.ts +150 -0
  200. package/src/modes/shared/agent-wire/ui-result.ts +48 -0
  201. package/src/modes/types.ts +2 -0
  202. package/src/prompts/agents/executor.md +13 -0
  203. package/src/prompts/tools/subagent.md +39 -4
  204. package/src/prompts/tools/task-summary.md +3 -9
  205. package/src/prompts/tools/task.md +5 -1
  206. package/src/sdk.ts +8 -0
  207. package/src/session/agent-session.ts +445 -71
  208. package/src/session/session-manager.ts +13 -1
  209. package/src/skill-state/active-state.ts +58 -65
  210. package/src/skill-state/deep-interview-mutation-guard.ts +114 -17
  211. package/src/skill-state/initial-phase.ts +2 -0
  212. package/src/skill-state/workflow-state-contract.ts +33 -4
  213. package/src/skill-state/workflow-state-version.ts +3 -0
  214. package/src/slash-commands/builtin-registry.ts +8 -0
  215. package/src/task/executor.ts +79 -13
  216. package/src/task/id.ts +33 -0
  217. package/src/task/index.ts +376 -74
  218. package/src/task/output-manager.ts +5 -4
  219. package/src/task/receipt.ts +297 -0
  220. package/src/task/render.ts +54 -134
  221. package/src/task/spawn-gate.ts +132 -0
  222. package/src/task/types.ts +104 -10
  223. package/src/tools/ask.ts +88 -27
  224. package/src/tools/ast-edit.ts +1 -0
  225. package/src/tools/ast-grep.ts +1 -0
  226. package/src/tools/bash.ts +1 -1
  227. package/src/tools/cron.ts +48 -0
  228. package/src/tools/find.ts +4 -1
  229. package/src/tools/index.ts +2 -0
  230. package/src/tools/path-utils.ts +3 -2
  231. package/src/tools/read.ts +1 -0
  232. package/src/tools/search.ts +1 -0
  233. package/src/tools/skill.ts +6 -1
  234. package/src/tools/subagent.ts +423 -79
package/src/tools/cron.ts CHANGED
@@ -137,6 +137,7 @@ function deleteRecord(ownerId: string | undefined, id: string): boolean {
137
137
  disposeRecord(record);
138
138
  const deleted = state.jobs.delete(id);
139
139
  if (state.jobs.size === 0) schedulesByOwner.delete(key);
140
+ if (deleted) notifyCronChange();
140
141
  return deleted;
141
142
  }
142
143
 
@@ -158,6 +159,7 @@ export function clearOwnerSchedules(ownerId: string | undefined): void {
158
159
  state.jobs.clear();
159
160
  state.cleanupRegistered = false;
160
161
  schedulesByOwner.delete(key);
162
+ notifyCronChange();
161
163
  }
162
164
 
163
165
  /** Reset every owner's schedule store. Test-only. */
@@ -167,6 +169,51 @@ export function resetCronRegistryForTests(): void {
167
169
  clearOwnerSchedules(ownerId);
168
170
  }
169
171
  schedulesByOwner.clear();
172
+ notifyCronChange();
173
+ }
174
+
175
+ /** Module-level listeners notified whenever the cron schedule set changes. */
176
+ const cronChangeListeners = new Set<() => void>();
177
+
178
+ /** Subscribe to cron schedule-set changes. Returns an unsubscribe function. */
179
+ export function onCronChange(cb: () => void): () => void {
180
+ cronChangeListeners.add(cb);
181
+ return () => {
182
+ cronChangeListeners.delete(cb);
183
+ };
184
+ }
185
+
186
+ function notifyCronChange(): void {
187
+ for (const cb of cronChangeListeners) {
188
+ try {
189
+ cb();
190
+ } catch (error) {
191
+ logger.warn("Cron change listener failed", {
192
+ error: error instanceof Error ? error.message : String(error),
193
+ });
194
+ }
195
+ }
196
+ }
197
+
198
+ /** Snapshot the scheduled cron jobs for an owner (or all owners when omitted). */
199
+ export function listCronSnapshots(ownerId?: string): CronJobSnapshot[] {
200
+ const out: CronJobSnapshot[] = [];
201
+ if (ownerId !== undefined) {
202
+ const state = schedulesByOwner.get(ownerKey(ownerId));
203
+ if (state) {
204
+ for (const record of state.jobs.values()) out.push(record.snapshot);
205
+ }
206
+ return out;
207
+ }
208
+ for (const state of schedulesByOwner.values()) {
209
+ for (const record of state.jobs.values()) out.push(record.snapshot);
210
+ }
211
+ return out;
212
+ }
213
+
214
+ /** Delete a scheduled cron job by owner-scoped id. Returns true when removed. */
215
+ export function deleteCronJobById(ownerId: string | undefined, id: string): boolean {
216
+ return deleteRecord(ownerId, id);
170
217
  }
171
218
 
172
219
  const CRON_FIELD_BOUNDS: Array<{ name: string; min: number; max: number }> = [
@@ -448,6 +495,7 @@ function scheduleRecord(ownerId: string | undefined, state: OwnerScheduleState,
448
495
  });
449
496
  record.snapshot.nextFireAt = fireAt;
450
497
  record.timer = setCronTimeout(() => fireRecord(ownerId, state, record.snapshot.id), fireAt - now);
498
+ notifyCronChange();
451
499
  }
452
500
 
453
501
  function scheduleExpiry(ownerId: string | undefined, record: CronScheduleRecord): void {
package/src/tools/find.ts CHANGED
@@ -155,7 +155,10 @@ export class FindTool implements AgentTool<typeof findSchema, FindToolDetails> {
155
155
  if (hasGlobPathChars(rawPattern)) {
156
156
  throw new ToolError(`Glob patterns are not supported for internal URLs: ${rawPattern}`);
157
157
  }
158
- const resource = await internalRouter.resolve(rawPattern);
158
+ const resource = await internalRouter.resolve(rawPattern, {
159
+ cwd: this.session.cwd,
160
+ getArtifactsDir: this.session.getArtifactsDir,
161
+ });
159
162
  if (!resource.sourcePath) {
160
163
  throw new ToolError(`Cannot find internal URL without a backing file: ${rawPattern}`);
161
164
  }
@@ -150,6 +150,8 @@ export interface ToolSession {
150
150
  requireYieldTool?: boolean;
151
151
  /** Task recursion depth (0 = top-level, 1 = first child, etc.) */
152
152
  taskDepth?: number;
153
+ /** Current role-agent type/name for nested task sessions. */
154
+ currentAgentType?: string;
153
155
  /** Get session file */
154
156
  getSessionFile: () => string | null;
155
157
  /** Get eval kernel owner ID for session-scoped retained-kernel cleanup. */
@@ -625,6 +625,7 @@ export function resolveReadPath(filePath: string, cwd: string): string {
625
625
  export interface ToolScopeOptions {
626
626
  rawPaths: string[];
627
627
  cwd: string;
628
+ getArtifactsDir?: () => string | null;
628
629
  /** Verb used in the "Cannot {action} internal URL without a backing file: …" message. */
629
630
  internalUrlAction: string;
630
631
  /** Collect absolute paths flagged immutable by their internal-URL handler. */
@@ -655,7 +656,7 @@ export interface ToolScopeResolution {
655
656
  * 5. stat the resolved base path so callers can branch on directory vs file scope.
656
657
  */
657
658
  export async function resolveToolSearchScope(opts: ToolScopeOptions): Promise<ToolScopeResolution> {
658
- const { rawPaths: inputs, cwd, internalUrlAction } = opts;
659
+ const { rawPaths: inputs, cwd, internalUrlAction, getArtifactsDir } = opts;
659
660
  const rawPaths = inputs.map(normalizePathLikeInput);
660
661
  if (rawPaths.some(rawPath => rawPath.length === 0)) {
661
662
  throw new ToolError("`paths` must contain non-empty paths or globs");
@@ -671,7 +672,7 @@ export async function resolveToolSearchScope(opts: ToolScopeOptions): Promise<To
671
672
  if (hasGlobPathChars(rawPath)) {
672
673
  throw new ToolError(`Glob patterns are not supported for internal URLs: ${rawPath}`);
673
674
  }
674
- const resource = await internalRouter.resolve(rawPath);
675
+ const resource = await internalRouter.resolve(rawPath, { cwd, getArtifactsDir });
675
676
  if (!resource.sourcePath) {
676
677
  throw new ToolError(`Cannot ${internalUrlAction} internal URL without a backing file: ${rawPath}`);
677
678
  }
package/src/tools/read.ts CHANGED
@@ -2045,6 +2045,7 @@ export class ReadTool implements AgentTool<typeof readSchema, ReadToolDetails> {
2045
2045
  // Resolve the internal URL
2046
2046
  const resource = await internalRouter.resolve(url, {
2047
2047
  cwd: this.session.cwd,
2048
+ getArtifactsDir: this.session.getArtifactsDir,
2048
2049
  settings: this.session.settings,
2049
2050
  signal,
2050
2051
  });
@@ -280,6 +280,7 @@ export class SearchTool implements AgentTool<typeof searchSchema, SearchToolDeta
280
280
  const scope = await resolveToolSearchScope({
281
281
  rawPaths: resolvedPaths,
282
282
  cwd: this.session.cwd,
283
+ getArtifactsDir: this.session.getArtifactsDir,
283
284
  internalUrlAction: "search",
284
285
  trackImmutableSources: true,
285
286
  surfaceExactFilePaths: true,
@@ -138,7 +138,12 @@ export class SkillTool implements AgentTool<typeof skillSchema, SkillToolDetails
138
138
  { triggerTurn: false },
139
139
  );
140
140
 
141
- const summary = args ? `Handed off to /skill:${skill.name} ${args}.` : `Handed off to /skill:${skill.name}.`;
141
+ const summary = JSON.stringify({
142
+ callee: skill.name,
143
+ path: skill.filePath,
144
+ args: args || undefined,
145
+ lineCount: built.details.lineCount,
146
+ });
142
147
  return {
143
148
  content: [{ type: "text", text: summary }],
144
149
  details: {