@gajae-code/coding-agent 0.11.4 → 0.11.6

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 (154) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/dist/types/cli/notify-cli.d.ts +5 -1
  3. package/dist/types/config/settings-schema.d.ts +31 -1
  4. package/dist/types/export/html/template.generated.d.ts +1 -1
  5. package/dist/types/gjc-runtime/deep-interview-state.d.ts +28 -0
  6. package/dist/types/gjc-runtime/launch-tmux.d.ts +3 -0
  7. package/dist/types/gjc-runtime/managed-owner-admission.d.ts +42 -0
  8. package/dist/types/gjc-runtime/managed-owner-supervisor.d.ts +41 -0
  9. package/dist/types/gjc-runtime/tmux-owner-isolation.d.ts +9 -0
  10. package/dist/types/gjc-runtime/ultragoal-owner-loss-recovery.d.ts +94 -0
  11. package/dist/types/gjc-runtime/ultragoal-runtime.d.ts +1 -0
  12. package/dist/types/harness-control-plane/owner.d.ts +3 -1
  13. package/dist/types/internal-urls/local-protocol.d.ts +18 -0
  14. package/dist/types/main.d.ts +2 -2
  15. package/dist/types/modes/components/ansi-display-validator.d.ts +2 -0
  16. package/dist/types/modes/components/notifications-settings-editor.d.ts +4 -0
  17. package/dist/types/modes/components/session-observer-overlay.d.ts +3 -1
  18. package/dist/types/modes/components/settings-selector.d.ts +2 -0
  19. package/dist/types/modes/components/tool-transcript-format.d.ts +58 -0
  20. package/dist/types/modes/components/transcript-viewer-overlay.d.ts +3 -0
  21. package/dist/types/modes/controllers/goal-mode-controller.d.ts +8 -1
  22. package/dist/types/modes/controllers/selector-controller.d.ts +15 -0
  23. package/dist/types/modes/shared/agent-wire/workflow-gate-broker.d.ts +3 -0
  24. package/dist/types/modes/shared/agent-wire/workflow-gate-types.d.ts +16 -0
  25. package/dist/types/plan-mode/approved-plan.d.ts +1 -0
  26. package/dist/types/runtime-mcp/manager.d.ts +2 -0
  27. package/dist/types/runtime-mcp/oauth-discovery.d.ts +12 -1
  28. package/dist/types/sdk/bus/chat-daemon-cli.d.ts +3 -1
  29. package/dist/types/sdk/bus/chat-daemon-control.d.ts +42 -4
  30. package/dist/types/sdk/bus/config-commands.d.ts +8 -0
  31. package/dist/types/sdk/bus/config.d.ts +22 -0
  32. package/dist/types/sdk/bus/index.d.ts +162 -2
  33. package/dist/types/sdk/bus/notification-service.d.ts +71 -8
  34. package/dist/types/sdk/bus/session-control.d.ts +11 -8
  35. package/dist/types/sdk/bus/telegram-daemon-cli.d.ts +5 -0
  36. package/dist/types/sdk/bus/telegram-daemon-contract.d.ts +11 -3
  37. package/dist/types/sdk/bus/telegram-daemon-control.d.ts +23 -4
  38. package/dist/types/sdk/bus/telegram-daemon.d.ts +214 -20
  39. package/dist/types/sdk/session.d.ts +16 -1
  40. package/dist/types/secrets/index.d.ts +4 -2
  41. package/dist/types/secrets/obfuscator.d.ts +1 -1
  42. package/dist/types/session/agent-session.d.ts +31 -2
  43. package/dist/types/session/artifacts.d.ts +30 -8
  44. package/dist/types/session/internal/managed-session-scope.d.ts +7 -0
  45. package/dist/types/session/internal/managed-session-storage.d.ts +63 -6
  46. package/dist/types/session/session-manager.d.ts +98 -18
  47. package/dist/types/session/session-storage.d.ts +27 -0
  48. package/dist/types/session/streaming-output.d.ts +4 -0
  49. package/dist/types/session/yield-queue.d.ts +8 -0
  50. package/dist/types/task/executor.d.ts +9 -0
  51. package/dist/types/tool-discovery/tool-index.d.ts +2 -0
  52. package/dist/types/tools/ask.d.ts +48 -0
  53. package/dist/types/tools/bash-skill-urls.d.ts +2 -2
  54. package/dist/types/tools/index.d.ts +4 -0
  55. package/package.json +9 -9
  56. package/scripts/generate-sdk-operation-inventory.ts +3 -0
  57. package/src/cli/notify-cli.ts +40 -18
  58. package/src/commands/sdk.ts +7 -2
  59. package/src/config/settings-schema.ts +31 -1
  60. package/src/daemon/runtime.ts +2 -2
  61. package/src/defaults/gjc/skills/deep-interview/SKILL.md +70 -49
  62. package/src/defaults/gjc/skills/ralplan/SKILL.md +0 -6
  63. package/src/defaults/gjc/skills/team/SKILL.md +7 -9
  64. package/src/defaults/gjc/skills/ultragoal/SKILL.md +0 -2
  65. package/src/eval/py/index.ts +2 -2
  66. package/src/export/html/template.generated.ts +1 -1
  67. package/src/extensibility/plugins/marketplace/manager.ts +94 -10
  68. package/src/gjc-runtime/deep-interview-recorder.ts +7 -0
  69. package/src/gjc-runtime/deep-interview-runtime.ts +10 -0
  70. package/src/gjc-runtime/deep-interview-state.ts +127 -3
  71. package/src/gjc-runtime/launch-tmux.ts +61 -6
  72. package/src/gjc-runtime/managed-owner-admission.ts +352 -0
  73. package/src/gjc-runtime/managed-owner-supervisor.ts +162 -0
  74. package/src/gjc-runtime/state-runtime.ts +38 -12
  75. package/src/gjc-runtime/team-runtime.ts +1 -1
  76. package/src/gjc-runtime/tmux-owner-isolation.ts +117 -0
  77. package/src/gjc-runtime/ultragoal-owner-loss-recovery.ts +328 -0
  78. package/src/gjc-runtime/ultragoal-runtime.ts +14 -0
  79. package/src/harness-control-plane/owner.ts +59 -3
  80. package/src/hindsight/client.ts +65 -2
  81. package/src/internal-urls/agent-protocol.ts +76 -5
  82. package/src/internal-urls/docs-index.generated.ts +8 -7
  83. package/src/internal-urls/local-protocol.ts +416 -18
  84. package/src/lsp/index.ts +4 -88
  85. package/src/main.ts +36 -12
  86. package/src/modes/acp/acp-agent.ts +8 -0
  87. package/src/modes/components/ansi-display-validator.ts +54 -0
  88. package/src/modes/components/notifications-settings-editor.ts +26 -2
  89. package/src/modes/components/session-observer-overlay.ts +40 -24
  90. package/src/modes/components/settings-selector.ts +3 -1
  91. package/src/modes/components/tool-transcript-format.ts +321 -0
  92. package/src/modes/components/transcript-viewer-overlay.ts +39 -17
  93. package/src/modes/controllers/command-controller.ts +15 -0
  94. package/src/modes/controllers/extension-ui-controller.ts +14 -2
  95. package/src/modes/controllers/goal-mode-controller.ts +20 -1
  96. package/src/modes/controllers/plan-mode-controller.ts +2 -0
  97. package/src/modes/controllers/runtime-mcp-command-controller.ts +3 -0
  98. package/src/modes/controllers/selector-controller.ts +70 -8
  99. package/src/modes/interactive-mode.ts +1 -0
  100. package/src/modes/runtime-init.ts +16 -2
  101. package/src/modes/shared/agent-wire/deep-interview-gate.ts +31 -1
  102. package/src/modes/shared/agent-wire/workflow-gate-broker.ts +17 -1
  103. package/src/modes/shared/agent-wire/workflow-gate-schema.ts +4 -2
  104. package/src/modes/shared/agent-wire/workflow-gate-types.ts +120 -3
  105. package/src/plan-mode/approved-plan.ts +3 -1
  106. package/src/prompts/agents/architect.md +1 -0
  107. package/src/prompts/agents/critic.md +1 -0
  108. package/src/prompts/system/custom-system-prompt.md +1 -1
  109. package/src/prompts/system/system-prompt.md +2 -1
  110. package/src/prompts/tools/lsp.md +3 -3
  111. package/src/runtime-mcp/manager.ts +16 -1
  112. package/src/runtime-mcp/oauth-discovery.ts +116 -26
  113. package/src/sdk/broker/session-index.ts +122 -64
  114. package/src/sdk/bus/chat-daemon-cli.ts +72 -10
  115. package/src/sdk/bus/chat-daemon-control.ts +538 -130
  116. package/src/sdk/bus/chat-daemon-runtime.ts +1 -0
  117. package/src/sdk/bus/config-commands.ts +22 -0
  118. package/src/sdk/bus/config.ts +37 -0
  119. package/src/sdk/bus/index.ts +388 -94
  120. package/src/sdk/bus/lifecycle-control-runtime.ts +53 -3
  121. package/src/sdk/bus/notification-service.ts +284 -62
  122. package/src/sdk/bus/recent-activity.ts +14 -5
  123. package/src/sdk/bus/session-control.ts +150 -44
  124. package/src/sdk/bus/telegram-daemon-cli.ts +20 -14
  125. package/src/sdk/bus/telegram-daemon-contract.ts +11 -3
  126. package/src/sdk/bus/telegram-daemon-control.ts +312 -76
  127. package/src/sdk/bus/telegram-daemon.ts +1916 -285
  128. package/src/sdk/host/control/dispatch.ts +14 -5
  129. package/src/sdk/protocol/operation-inventory.generated.json +29 -0
  130. package/src/sdk/session.ts +155 -27
  131. package/src/secrets/index.ts +53 -10
  132. package/src/secrets/obfuscator.ts +21 -18
  133. package/src/secrets/regex.ts +2 -0
  134. package/src/session/agent-session.ts +1447 -852
  135. package/src/session/artifacts.ts +188 -23
  136. package/src/session/context-estimation.ts +7 -2
  137. package/src/session/internal/managed-session-scope.ts +200 -38
  138. package/src/session/internal/managed-session-storage.ts +1152 -46
  139. package/src/session/session-manager.ts +1121 -148
  140. package/src/session/session-storage.ts +109 -11
  141. package/src/session/streaming-output.ts +6 -0
  142. package/src/session/yield-queue.ts +20 -0
  143. package/src/slash-commands/builtin-registry.ts +36 -0
  144. package/src/task/executor.ts +71 -26
  145. package/src/task/index.ts +63 -20
  146. package/src/tool-discovery/tool-index.ts +18 -0
  147. package/src/tools/ask-answer-registry.ts +15 -1
  148. package/src/tools/ask.ts +129 -32
  149. package/src/tools/bash-skill-urls.ts +14 -3
  150. package/src/tools/bash.ts +2 -2
  151. package/src/tools/index.ts +4 -0
  152. package/src/tools/plan-mode-guard.ts +1 -0
  153. package/src/tools/sqlite-reader.ts +3 -2
  154. package/src/tools/subagent.ts +2 -0
@@ -27,6 +27,56 @@ interface AgentOutputMetadata {
27
27
  createdAt: string;
28
28
  }
29
29
 
30
+ interface ManagedOutputSelector {
31
+ outputFilename: string;
32
+ metadataFilename: string;
33
+ outputSizeBytes: number;
34
+ outputSha256: string;
35
+ metadataSizeBytes: number;
36
+ metadataSha256: string;
37
+ }
38
+
39
+ function isSafeGenerationFilename(filename: unknown): filename is string {
40
+ return typeof filename === "string" && /^[a-zA-Z0-9_.-]+$/.test(filename);
41
+ }
42
+
43
+ function isManagedOutputSelector(value: unknown, outputId: string): value is ManagedOutputSelector {
44
+ if (!value || typeof value !== "object") return false;
45
+ const selector = value as Record<string, unknown>;
46
+ return (
47
+ isSafeGenerationFilename(selector.outputFilename) &&
48
+ isSafeGenerationFilename(selector.metadataFilename) &&
49
+ selector.outputFilename.startsWith(`${outputId}.md.`) &&
50
+ selector.outputFilename.endsWith(".output") &&
51
+ selector.metadataFilename === `${selector.outputFilename}.meta.json` &&
52
+ typeof selector.outputSizeBytes === "number" &&
53
+ typeof selector.outputSha256 === "string" &&
54
+ typeof selector.metadataSizeBytes === "number" &&
55
+ typeof selector.metadataSha256 === "string"
56
+ );
57
+ }
58
+
59
+ async function readManagedOutputSelector(
60
+ outputId: string,
61
+ selectorPath: string,
62
+ ): Promise<ManagedOutputSelector | null> {
63
+ let raw: string;
64
+ try {
65
+ raw = await Bun.file(selectorPath).text();
66
+ } catch (error) {
67
+ if (isEnoent(error)) return null;
68
+ throw error;
69
+ }
70
+ let parsed: unknown;
71
+ try {
72
+ parsed = JSON.parse(raw);
73
+ } catch {
74
+ throw new Error(`agent://${outputId} malformed output selector`);
75
+ }
76
+ if (!isManagedOutputSelector(parsed, outputId)) throw new Error(`agent://${outputId} malformed output selector`);
77
+ return parsed;
78
+ }
79
+
30
80
  function isAgentOutputMetadata(value: unknown, outputId: string): value is AgentOutputMetadata {
31
81
  if (!value || typeof value !== "object") return false;
32
82
  const meta = value as Record<string, unknown>;
@@ -40,11 +90,16 @@ function isAgentOutputMetadata(value: unknown, outputId: string): value is Agent
40
90
  );
41
91
  }
42
92
 
43
- async function verifyAgentOutputMetadata(outputId: string, foundPath: string, bytes: Buffer): Promise<void> {
44
- const metaPath = `${foundPath}.meta.json`;
93
+ async function verifyAgentOutputMetadata(
94
+ outputId: string,
95
+ foundPath: string,
96
+ metadataPath: string,
97
+ bytes: Buffer,
98
+ selector?: ManagedOutputSelector,
99
+ ): Promise<void> {
45
100
  let metaRaw: string;
46
101
  try {
47
- metaRaw = await Bun.file(metaPath).text();
102
+ metaRaw = await Bun.file(metadataPath).text();
48
103
  } catch (err) {
49
104
  if (isEnoent(err)) throw new Error(`agent://${outputId} missing metadata`);
50
105
  throw err;
@@ -58,6 +113,7 @@ async function verifyAgentOutputMetadata(outputId: string, foundPath: string, by
58
113
  if (!isAgentOutputMetadata(parsed, outputId)) {
59
114
  throw new Error(`agent://${outputId} malformed metadata`);
60
115
  }
116
+ const metadataBytes = Buffer.from(metaRaw, "utf8");
61
117
  const stat = await fs.stat(foundPath);
62
118
  if (stat.size !== parsed.sizeBytes || bytes.byteLength !== parsed.sizeBytes) {
63
119
  throw new Error(`agent://${outputId} size mismatch`);
@@ -66,6 +122,15 @@ async function verifyAgentOutputMetadata(outputId: string, foundPath: string, by
66
122
  if (sha256 !== parsed.sha256) {
67
123
  throw new Error(`agent://${outputId} hash mismatch`);
68
124
  }
125
+ if (
126
+ selector &&
127
+ (selector.outputSizeBytes !== bytes.byteLength ||
128
+ selector.outputSha256 !== sha256 ||
129
+ selector.metadataSizeBytes !== metadataBytes.byteLength ||
130
+ selector.metadataSha256 !== createHash("sha256").update(metadataBytes).digest("hex"))
131
+ ) {
132
+ throw new Error(`agent://${outputId} selected generation mismatch`);
133
+ }
69
134
  }
70
135
  /**
71
136
  * Handler for agent:// URLs.
@@ -105,6 +170,8 @@ export class AgentProtocolHandler implements ProtocolHandler {
105
170
  }
106
171
 
107
172
  let foundPath: string | undefined;
173
+ let foundMetadataPath: string | undefined;
174
+ let foundSelector: ManagedOutputSelector | undefined;
108
175
  let anyDirExists = false;
109
176
 
110
177
  for (const dir of dirs) {
@@ -115,11 +182,15 @@ export class AgentProtocolHandler implements ProtocolHandler {
115
182
  if (isEnoent(err)) continue;
116
183
  throw err;
117
184
  }
118
- const candidate = path.join(dir, `${outputId}.md`);
185
+ const selector = await readManagedOutputSelector(outputId, path.join(dir, `${outputId}.md.selector.json`));
186
+ const candidate = selector ? path.join(dir, selector.outputFilename) : path.join(dir, `${outputId}.md`);
187
+ const metadataPath = selector ? path.join(dir, selector.metadataFilename) : `${candidate}.meta.json`;
119
188
  try {
120
189
  await fs.stat(candidate);
121
190
  if (foundPath) throw new Error(`agent://${outputId} ambiguous id in authorized artifacts`);
122
191
  foundPath = candidate;
192
+ foundMetadataPath = metadataPath;
193
+ foundSelector = selector ?? undefined;
123
194
  } catch (err) {
124
195
  if (!isEnoent(err)) throw err;
125
196
  }
@@ -134,7 +205,7 @@ export class AgentProtocolHandler implements ProtocolHandler {
134
205
  }
135
206
 
136
207
  const rawBytes = Buffer.from(await Bun.file(foundPath).arrayBuffer());
137
- await verifyAgentOutputMetadata(outputId, foundPath, rawBytes);
208
+ await verifyAgentOutputMetadata(outputId, foundPath, foundMetadataPath!, rawBytes, foundSelector);
138
209
  const rawContent = rawBytes.toString("utf8");
139
210
  const notes: string[] = [];
140
211
  let content = rawContent;