gsd-pi 2.67.0-dev.1cd1e0f → 2.67.0-dev.2367d7e

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 (257) hide show
  1. package/README.md +1 -1
  2. package/dist/resources/extensions/claude-code-cli/stream-adapter.js +155 -70
  3. package/dist/resources/extensions/gsd/auto/phases.js +17 -0
  4. package/dist/resources/extensions/gsd/auto/session.js +10 -0
  5. package/dist/resources/extensions/gsd/auto-direct-dispatch.js +12 -0
  6. package/dist/resources/extensions/gsd/auto-dispatch.js +1 -1
  7. package/dist/resources/extensions/gsd/auto-start.js +16 -30
  8. package/dist/resources/extensions/gsd/auto-worktree.js +62 -15
  9. package/dist/resources/extensions/gsd/auto.js +121 -59
  10. package/dist/resources/extensions/gsd/bootstrap/db-tools.js +11 -435
  11. package/dist/resources/extensions/gsd/bootstrap/dynamic-tools.js +1 -4
  12. package/dist/resources/extensions/gsd/bootstrap/query-tools.js +7 -64
  13. package/dist/resources/extensions/gsd/bootstrap/system-context.js +7 -2
  14. package/dist/resources/extensions/gsd/bootstrap/write-gate.js +88 -8
  15. package/dist/resources/extensions/gsd/commands/catalog.js +2 -1
  16. package/dist/resources/extensions/gsd/commands/handlers/core.js +39 -25
  17. package/dist/resources/extensions/gsd/commands/index.js +8 -1
  18. package/dist/resources/extensions/gsd/commands-mcp-status.js +43 -7
  19. package/dist/resources/extensions/gsd/doctor-git-checks.js +4 -4
  20. package/dist/resources/extensions/gsd/doctor-proactive.js +3 -3
  21. package/dist/resources/extensions/gsd/doctor.js +8 -4
  22. package/dist/resources/extensions/gsd/gsd-db.js +11 -0
  23. package/dist/resources/extensions/gsd/guided-flow.js +56 -31
  24. package/dist/resources/extensions/gsd/init-wizard.js +37 -0
  25. package/dist/resources/extensions/gsd/interrupted-session.js +146 -0
  26. package/dist/resources/extensions/gsd/mcp-project-config.js +83 -0
  27. package/dist/resources/extensions/gsd/state.js +7 -2
  28. package/dist/resources/extensions/gsd/tools/workflow-tool-executors.js +508 -0
  29. package/dist/resources/extensions/gsd/workflow-logger.js +18 -3
  30. package/dist/resources/extensions/gsd/workflow-mcp.js +261 -0
  31. package/dist/web/standalone/.next/BUILD_ID +1 -1
  32. package/dist/web/standalone/.next/app-path-routes-manifest.json +8 -8
  33. package/dist/web/standalone/.next/build-manifest.json +3 -3
  34. package/dist/web/standalone/.next/prerender-manifest.json +3 -3
  35. package/dist/web/standalone/.next/react-loadable-manifest.json +2 -2
  36. package/dist/web/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
  37. package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
  38. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  39. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  40. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  41. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  42. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  43. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  44. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  45. package/dist/web/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  46. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  47. package/dist/web/standalone/.next/server/app/_not-found.rsc +1 -1
  48. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  49. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  50. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  51. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  52. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  53. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  54. package/dist/web/standalone/.next/server/app/index.html +1 -1
  55. package/dist/web/standalone/.next/server/app/index.rsc +2 -2
  56. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
  57. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +2 -2
  58. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  59. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +1 -1
  60. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  61. package/dist/web/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
  62. package/dist/web/standalone/.next/server/app-paths-manifest.json +8 -8
  63. package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
  64. package/dist/web/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
  65. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  66. package/dist/web/standalone/.next/server/pages/500.html +1 -1
  67. package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
  68. package/dist/web/standalone/.next/static/chunks/2826.821e01b07d92e948.js +9 -0
  69. package/dist/web/standalone/.next/static/chunks/app/{page-0c485498795110d6.js → page-f1e30ab6bb269149.js} +1 -1
  70. package/dist/web/standalone/.next/static/chunks/{webpack-b49b09f97429b5d0.js → webpack-6e4d7e9a4f57bed4.js} +1 -1
  71. package/package.json +4 -2
  72. package/packages/mcp-server/README.md +38 -0
  73. package/packages/mcp-server/dist/cli.d.ts +9 -0
  74. package/packages/mcp-server/dist/cli.d.ts.map +1 -0
  75. package/packages/mcp-server/dist/cli.js +58 -0
  76. package/packages/mcp-server/dist/cli.js.map +1 -0
  77. package/packages/mcp-server/dist/index.d.ts +20 -0
  78. package/packages/mcp-server/dist/index.d.ts.map +1 -0
  79. package/packages/mcp-server/dist/index.js +14 -0
  80. package/packages/mcp-server/dist/index.js.map +1 -0
  81. package/packages/mcp-server/dist/readers/captures.d.ts +25 -0
  82. package/packages/mcp-server/dist/readers/captures.d.ts.map +1 -0
  83. package/packages/mcp-server/dist/readers/captures.js +67 -0
  84. package/packages/mcp-server/dist/readers/captures.js.map +1 -0
  85. package/packages/mcp-server/dist/readers/doctor-lite.d.ts +20 -0
  86. package/packages/mcp-server/dist/readers/doctor-lite.d.ts.map +1 -0
  87. package/packages/mcp-server/dist/readers/doctor-lite.js +173 -0
  88. package/packages/mcp-server/dist/readers/doctor-lite.js.map +1 -0
  89. package/packages/mcp-server/dist/readers/index.d.ts +14 -0
  90. package/packages/mcp-server/dist/readers/index.d.ts.map +1 -0
  91. package/packages/mcp-server/dist/readers/index.js +10 -0
  92. package/packages/mcp-server/dist/readers/index.js.map +1 -0
  93. package/packages/mcp-server/dist/readers/knowledge.d.ts +18 -0
  94. package/packages/mcp-server/dist/readers/knowledge.d.ts.map +1 -0
  95. package/packages/mcp-server/dist/readers/knowledge.js +82 -0
  96. package/packages/mcp-server/dist/readers/knowledge.js.map +1 -0
  97. package/packages/mcp-server/dist/readers/metrics.d.ts +32 -0
  98. package/packages/mcp-server/dist/readers/metrics.d.ts.map +1 -0
  99. package/packages/mcp-server/dist/readers/metrics.js +74 -0
  100. package/packages/mcp-server/dist/readers/metrics.js.map +1 -0
  101. package/packages/mcp-server/dist/readers/paths.d.ts +42 -0
  102. package/packages/mcp-server/dist/readers/paths.d.ts.map +1 -0
  103. package/packages/mcp-server/dist/readers/paths.js +199 -0
  104. package/packages/mcp-server/dist/readers/paths.js.map +1 -0
  105. package/packages/mcp-server/dist/readers/roadmap.d.ts +26 -0
  106. package/packages/mcp-server/dist/readers/roadmap.d.ts.map +1 -0
  107. package/packages/mcp-server/dist/readers/roadmap.js +194 -0
  108. package/packages/mcp-server/dist/readers/roadmap.js.map +1 -0
  109. package/packages/mcp-server/dist/readers/state.d.ts +43 -0
  110. package/packages/mcp-server/dist/readers/state.d.ts.map +1 -0
  111. package/packages/mcp-server/dist/readers/state.js +184 -0
  112. package/packages/mcp-server/dist/readers/state.js.map +1 -0
  113. package/packages/mcp-server/dist/server.d.ts +28 -0
  114. package/packages/mcp-server/dist/server.d.ts.map +1 -0
  115. package/packages/mcp-server/dist/server.js +319 -0
  116. package/packages/mcp-server/dist/server.js.map +1 -0
  117. package/packages/mcp-server/dist/session-manager.d.ts +54 -0
  118. package/packages/mcp-server/dist/session-manager.d.ts.map +1 -0
  119. package/packages/mcp-server/dist/session-manager.js +284 -0
  120. package/packages/mcp-server/dist/session-manager.js.map +1 -0
  121. package/packages/mcp-server/dist/types.d.ts +61 -0
  122. package/packages/mcp-server/dist/types.d.ts.map +1 -0
  123. package/packages/mcp-server/dist/types.js +11 -0
  124. package/packages/mcp-server/dist/types.js.map +1 -0
  125. package/packages/mcp-server/dist/workflow-tools.d.ts +9 -0
  126. package/packages/mcp-server/dist/workflow-tools.d.ts.map +1 -0
  127. package/packages/mcp-server/dist/workflow-tools.js +532 -0
  128. package/packages/mcp-server/dist/workflow-tools.js.map +1 -0
  129. package/packages/mcp-server/src/server.ts +6 -2
  130. package/packages/mcp-server/src/workflow-tools.test.ts +976 -0
  131. package/packages/mcp-server/src/workflow-tools.ts +997 -0
  132. package/packages/mcp-server/tsconfig.json +1 -1
  133. package/packages/pi-agent-core/dist/agent-loop.js +14 -6
  134. package/packages/pi-agent-core/dist/agent-loop.js.map +1 -1
  135. package/packages/pi-agent-core/src/agent-loop.test.ts +53 -0
  136. package/packages/pi-agent-core/src/agent-loop.ts +20 -6
  137. package/packages/pi-coding-agent/dist/core/contextual-tips.d.ts +43 -0
  138. package/packages/pi-coding-agent/dist/core/contextual-tips.d.ts.map +1 -0
  139. package/packages/pi-coding-agent/dist/core/contextual-tips.js +208 -0
  140. package/packages/pi-coding-agent/dist/core/contextual-tips.js.map +1 -0
  141. package/packages/pi-coding-agent/dist/core/contextual-tips.test.d.ts +2 -0
  142. package/packages/pi-coding-agent/dist/core/contextual-tips.test.d.ts.map +1 -0
  143. package/packages/pi-coding-agent/dist/core/contextual-tips.test.js +227 -0
  144. package/packages/pi-coding-agent/dist/core/contextual-tips.test.js.map +1 -0
  145. package/packages/pi-coding-agent/dist/core/index.d.ts +1 -0
  146. package/packages/pi-coding-agent/dist/core/index.d.ts.map +1 -1
  147. package/packages/pi-coding-agent/dist/core/index.js +1 -0
  148. package/packages/pi-coding-agent/dist/core/index.js.map +1 -1
  149. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-execution.test.d.ts +2 -0
  150. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-execution.test.d.ts.map +1 -0
  151. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-execution.test.js +28 -0
  152. package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-execution.test.js.map +1 -0
  153. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts +1 -0
  154. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  155. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js +17 -12
  156. package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js.map +1 -1
  157. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.d.ts.map +1 -1
  158. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js +19 -0
  159. package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
  160. package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.d.ts +4 -0
  161. package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.d.ts.map +1 -1
  162. package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.js +14 -0
  163. package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.js.map +1 -1
  164. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts +3 -0
  165. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  166. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js +15 -12
  167. package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
  168. package/packages/pi-coding-agent/src/core/contextual-tips.test.ts +259 -0
  169. package/packages/pi-coding-agent/src/core/contextual-tips.ts +232 -0
  170. package/packages/pi-coding-agent/src/core/index.ts +2 -0
  171. package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/tool-execution.test.ts +54 -0
  172. package/packages/pi-coding-agent/src/modes/interactive/components/tool-execution.ts +18 -12
  173. package/packages/pi-coding-agent/src/modes/interactive/controllers/chat-controller.ts +21 -0
  174. package/packages/pi-coding-agent/src/modes/interactive/controllers/input-controller.ts +19 -0
  175. package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +19 -15
  176. package/packages/rpc-client/dist/index.d.ts +10 -0
  177. package/packages/rpc-client/dist/index.d.ts.map +1 -0
  178. package/packages/rpc-client/dist/index.js +9 -0
  179. package/packages/rpc-client/dist/index.js.map +1 -0
  180. package/packages/rpc-client/dist/jsonl.d.ts +17 -0
  181. package/packages/rpc-client/dist/jsonl.d.ts.map +1 -0
  182. package/packages/rpc-client/dist/jsonl.js +54 -0
  183. package/packages/rpc-client/dist/jsonl.js.map +1 -0
  184. package/packages/rpc-client/dist/rpc-client.d.ts +259 -0
  185. package/packages/rpc-client/dist/rpc-client.d.ts.map +1 -0
  186. package/packages/rpc-client/dist/rpc-client.js +541 -0
  187. package/packages/rpc-client/dist/rpc-client.js.map +1 -0
  188. package/packages/rpc-client/dist/rpc-client.test.d.ts +2 -0
  189. package/packages/rpc-client/dist/rpc-client.test.d.ts.map +1 -0
  190. package/packages/rpc-client/dist/rpc-client.test.js +477 -0
  191. package/packages/rpc-client/dist/rpc-client.test.js.map +1 -0
  192. package/packages/rpc-client/dist/rpc-types.d.ts +566 -0
  193. package/packages/rpc-client/dist/rpc-types.d.ts.map +1 -0
  194. package/packages/rpc-client/dist/rpc-types.js +12 -0
  195. package/packages/rpc-client/dist/rpc-types.js.map +1 -0
  196. package/scripts/ensure-workspace-builds.cjs +2 -0
  197. package/scripts/link-workspace-packages.cjs +21 -14
  198. package/src/resources/extensions/claude-code-cli/stream-adapter.ts +193 -93
  199. package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +173 -79
  200. package/src/resources/extensions/gsd/auto/phases.ts +25 -0
  201. package/src/resources/extensions/gsd/auto/session.ts +10 -0
  202. package/src/resources/extensions/gsd/auto-direct-dispatch.ts +20 -0
  203. package/src/resources/extensions/gsd/auto-dispatch.ts +1 -1
  204. package/src/resources/extensions/gsd/auto-start.ts +23 -55
  205. package/src/resources/extensions/gsd/auto-worktree.ts +59 -15
  206. package/src/resources/extensions/gsd/auto.ts +133 -64
  207. package/src/resources/extensions/gsd/bootstrap/db-tools.ts +22 -435
  208. package/src/resources/extensions/gsd/bootstrap/dynamic-tools.ts +1 -5
  209. package/src/resources/extensions/gsd/bootstrap/query-tools.ts +7 -72
  210. package/src/resources/extensions/gsd/bootstrap/system-context.ts +8 -2
  211. package/src/resources/extensions/gsd/bootstrap/write-gate.ts +122 -6
  212. package/src/resources/extensions/gsd/commands/catalog.ts +2 -1
  213. package/src/resources/extensions/gsd/commands/handlers/core.ts +53 -26
  214. package/src/resources/extensions/gsd/commands/index.ts +7 -1
  215. package/src/resources/extensions/gsd/commands-mcp-status.ts +53 -7
  216. package/src/resources/extensions/gsd/doctor-git-checks.ts +4 -4
  217. package/src/resources/extensions/gsd/doctor-proactive.ts +3 -3
  218. package/src/resources/extensions/gsd/doctor.ts +9 -5
  219. package/src/resources/extensions/gsd/gsd-db.ts +12 -0
  220. package/src/resources/extensions/gsd/guided-flow.ts +66 -36
  221. package/src/resources/extensions/gsd/init-wizard.ts +40 -0
  222. package/src/resources/extensions/gsd/interrupted-session.ts +224 -0
  223. package/src/resources/extensions/gsd/mcp-project-config.ts +128 -0
  224. package/src/resources/extensions/gsd/state.ts +7 -1
  225. package/src/resources/extensions/gsd/tests/auto-project-root-env.test.ts +29 -0
  226. package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +668 -2
  227. package/src/resources/extensions/gsd/tests/cold-resume-db-reopen.test.ts +14 -4
  228. package/src/resources/extensions/gsd/tests/copy-planning-artifacts-samepath.test.ts +21 -0
  229. package/src/resources/extensions/gsd/tests/core-overlay-fallback.test.ts +101 -0
  230. package/src/resources/extensions/gsd/tests/crash-recovery.test.ts +380 -2
  231. package/src/resources/extensions/gsd/tests/ensure-db-open.test.ts +66 -0
  232. package/src/resources/extensions/gsd/tests/forensics-context-persist.test.ts +30 -0
  233. package/src/resources/extensions/gsd/tests/gsd-db.test.ts +12 -0
  234. package/src/resources/extensions/gsd/tests/guided-flow-session-isolation.test.ts +2 -2
  235. package/src/resources/extensions/gsd/tests/integration/doctor-fixlevel.test.ts +52 -1
  236. package/src/resources/extensions/gsd/tests/integration/doctor-git.test.ts +2 -9
  237. package/src/resources/extensions/gsd/tests/integration/doctor-proactive.test.ts +0 -33
  238. package/src/resources/extensions/gsd/tests/integration/merge-cwd-restore.test.ts +169 -0
  239. package/src/resources/extensions/gsd/tests/interrupted-session-auto.test.ts +146 -0
  240. package/src/resources/extensions/gsd/tests/interrupted-session-ui.test.ts +136 -0
  241. package/src/resources/extensions/gsd/tests/mcp-project-config.test.ts +85 -0
  242. package/src/resources/extensions/gsd/tests/mcp-status.test.ts +15 -0
  243. package/src/resources/extensions/gsd/tests/verification-operational-gate.test.ts +11 -0
  244. package/src/resources/extensions/gsd/tests/workflow-logger.test.ts +16 -0
  245. package/src/resources/extensions/gsd/tests/workflow-mcp.test.ts +500 -0
  246. package/src/resources/extensions/gsd/tests/workflow-tool-executors.test.ts +625 -0
  247. package/src/resources/extensions/gsd/tools/workflow-tool-executors.ts +629 -0
  248. package/src/resources/extensions/gsd/workflow-logger.ts +19 -3
  249. package/src/resources/extensions/gsd/workflow-mcp.ts +320 -0
  250. package/dist/web/standalone/.next/static/chunks/6502.b804e48b7919f55e.js +0 -9
  251. package/packages/pi-coding-agent/dist/modes/interactive/provider-auth-setup.d.ts +0 -13
  252. package/packages/pi-coding-agent/dist/modes/interactive/provider-auth-setup.d.ts.map +0 -1
  253. package/packages/pi-coding-agent/dist/modes/interactive/provider-auth-setup.js +0 -27
  254. package/packages/pi-coding-agent/dist/modes/interactive/provider-auth-setup.js.map +0 -1
  255. package/packages/pi-coding-agent/src/modes/interactive/provider-auth-setup.ts +0 -40
  256. /package/dist/web/standalone/.next/static/{PHqEommYRR8CRn3i84CGM → WMDT_0C0XDkBKtsAI_AX4}/_buildManifest.js +0 -0
  257. /package/dist/web/standalone/.next/static/{PHqEommYRR8CRn3i84CGM → WMDT_0C0XDkBKtsAI_AX4}/_ssgManifest.js +0 -0
@@ -1,17 +1,21 @@
1
1
  import { dispatchSlashCommand } from "../slash-command-handlers.js";
2
2
  import type { InteractiveModeStateHost } from "../interactive-mode-state.js";
3
+ import type { ContextualTips } from "../../../core/contextual-tips.js";
3
4
 
4
5
  export function setupEditorSubmitHandler(host: InteractiveModeStateHost & {
5
6
  getSlashCommandContext: () => any;
6
7
  handleBashCommand: (command: string, excludeFromContext?: boolean) => Promise<void>;
7
8
  showWarning: (message: string) => void;
8
9
  showError: (message: string) => void;
10
+ showTip: (message: string) => void;
9
11
  updateEditorBorderColor: () => void;
10
12
  isExtensionCommand: (text: string) => boolean;
11
13
  isKnownSlashCommand: (text: string) => boolean;
12
14
  queueCompactionMessage: (text: string, mode: "steer" | "followUp") => void;
13
15
  updatePendingMessagesDisplay: () => void;
14
16
  flushPendingBashComponents: () => void;
17
+ contextualTips: ContextualTips;
18
+ getContextPercent: () => number | undefined;
15
19
  options?: { submitPromptsDirectly?: boolean };
16
20
  }): void {
17
21
  host.defaultEditor.onSubmit = async (text: string) => {
@@ -41,6 +45,10 @@ export function setupEditorSubmitHandler(host: InteractiveModeStateHost & {
41
45
  host.editor.setText(text);
42
46
  return;
43
47
  }
48
+ // Track included bash commands for double-bang tip
49
+ if (!isExcluded) {
50
+ host.contextualTips.recordBashIncluded();
51
+ }
44
52
  host.editor.addToHistory?.(text);
45
53
  await host.handleBashCommand(command, isExcluded);
46
54
  host.isBashMode = false;
@@ -49,6 +57,17 @@ export function setupEditorSubmitHandler(host: InteractiveModeStateHost & {
49
57
  }
50
58
  }
51
59
 
60
+ // Evaluate contextual tips before sending to agent
61
+ const tip = host.contextualTips.evaluate({
62
+ input: text,
63
+ isStreaming: host.session.isStreaming,
64
+ thinkingLevel: host.session.thinkingLevel,
65
+ contextPercent: host.getContextPercent(),
66
+ });
67
+ if (tip) {
68
+ host.showTip(tip);
69
+ }
70
+
52
71
  if (host.session.isCompacting) {
53
72
  if (host.isExtensionCommand(text)) {
54
73
  host.editor.addToHistory?.(text);
@@ -82,7 +82,6 @@ import { LoginDialogComponent } from "./components/login-dialog.js";
82
82
  import { ModelSelectorComponent, providerDisplayName } from "./components/model-selector.js";
83
83
  import { OAuthSelectorComponent } from "./components/oauth-selector.js";
84
84
  import { ProviderManagerComponent } from "./components/provider-manager.js";
85
- import { getProviderSetupAction } from "./provider-auth-setup.js";
86
85
  import { ScopedModelsSelectorComponent } from "./components/scoped-models-selector.js";
87
86
  import { SessionSelectorComponent } from "./components/session-selector.js";
88
87
  import { SettingsSelectorComponent } from "./components/settings-selector.js";
@@ -91,6 +90,7 @@ import { ToolExecutionComponent } from "./components/tool-execution.js";
91
90
  import { TreeSelectorComponent } from "./components/tree-selector.js";
92
91
  import { UserMessageComponent } from "./components/user-message.js";
93
92
  import { UserMessageSelectorComponent } from "./components/user-message-selector.js";
93
+ import { ContextualTips } from "../../core/contextual-tips.js";
94
94
  import { type SlashCommandContext, dispatchSlashCommand, getAppKeyDisplay } from "./slash-command-handlers.js";
95
95
  import { handleAgentEvent } from "./controllers/chat-controller.js";
96
96
  import { createExtensionUIContext as buildExtensionUIContext } from "./controllers/extension-ui-controller.js";
@@ -215,6 +215,9 @@ export class InteractiveMode {
215
215
  // Track if editor is in bash mode (text starts with !)
216
216
  private isBashMode = false;
217
217
 
218
+ // Contextual tips — session-scoped, non-intrusive hints
219
+ private contextualTips = new ContextualTips();
220
+
218
221
  // Track current bash execution component
219
222
  private bashComponent: BashExecutionComponent | undefined = undefined;
220
223
 
@@ -2594,6 +2597,16 @@ export class InteractiveMode {
2594
2597
  this.ui.requestRender();
2595
2598
  }
2596
2599
 
2600
+ showTip(message: string): void {
2601
+ this.chatContainer.addChild(new Spacer(1));
2602
+ this.chatContainer.addChild(new Text(theme.fg("dim", `💡 ${message}`), 1, 0));
2603
+ this.ui.requestRender();
2604
+ }
2605
+
2606
+ getContextPercent(): number | undefined {
2607
+ return this.session.getContextUsage()?.percent ?? undefined;
2608
+ }
2609
+
2597
2610
  showNewVersionNotification(newVersion: string): void {
2598
2611
  const action = theme.fg("accent", getUpdateInstruction("@gsd/pi-coding-agent"));
2599
2612
  const updateInstruction = theme.fg("muted", `New version ${newVersion} is available. `) + action;
@@ -3413,21 +3426,9 @@ export class InteractiveMode {
3413
3426
  this.ui.requestRender();
3414
3427
  },
3415
3428
  async (provider: string) => {
3429
+ // Enter key → auth setup for selected provider (#3579)
3416
3430
  done();
3417
-
3418
- const action = getProviderSetupAction({
3419
- provider,
3420
- authMode: this.session.modelRegistry.getProviderAuthMode(provider),
3421
- hasAuth: this.session.modelRegistry.authStorage.hasAuth(provider),
3422
- });
3423
-
3424
- if (action.kind === "oauth-login") {
3425
- await this.showLoginDialog(provider);
3426
- return;
3427
- }
3428
-
3429
- this.showStatus(action.message);
3430
- this.ui.requestRender();
3431
+ await this.showLoginDialog(provider);
3431
3432
  },
3432
3433
  );
3433
3434
  return { component, focus: component };
@@ -3692,6 +3693,9 @@ export class InteractiveMode {
3692
3693
  this.streamingMessage = undefined;
3693
3694
  this.pendingTools.clear();
3694
3695
 
3696
+ // Reset contextual tips for the new session
3697
+ this.contextualTips.reset();
3698
+
3695
3699
  this.chatContainer.addChild(new Spacer(1));
3696
3700
  this.chatContainer.addChild(new Text(`${theme.fg("accent", "✓ New session started")}`, 1, 1));
3697
3701
  this.ui.requestRender();
@@ -0,0 +1,10 @@
1
+ /**
2
+ * @gsd-build/rpc-client — standalone RPC client SDK for GSD.
3
+ *
4
+ * Re-exports all types, JSONL utilities, and the RpcClient class.
5
+ */
6
+ export * from "./rpc-types.js";
7
+ export { serializeJsonLine, attachJsonlLineReader } from "./jsonl.js";
8
+ export { RpcClient } from "./rpc-client.js";
9
+ export type { RpcClientOptions, RpcEventListener, SdkAgentEvent } from "./rpc-client.js";
10
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACtE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,YAAY,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * @gsd-build/rpc-client — standalone RPC client SDK for GSD.
3
+ *
4
+ * Re-exports all types, JSONL utilities, and the RpcClient class.
5
+ */
6
+ export * from "./rpc-types.js";
7
+ export { serializeJsonLine, attachJsonlLineReader } from "./jsonl.js";
8
+ export { RpcClient } from "./rpc-client.js";
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,cAAc,gBAAgB,CAAC;AAC/B,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACtE,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC","sourcesContent":["/**\n * @gsd-build/rpc-client — standalone RPC client SDK for GSD.\n *\n * Re-exports all types, JSONL utilities, and the RpcClient class.\n */\n\nexport * from \"./rpc-types.js\";\nexport { serializeJsonLine, attachJsonlLineReader } from \"./jsonl.js\";\nexport { RpcClient } from \"./rpc-client.js\";\nexport type { RpcClientOptions, RpcEventListener, SdkAgentEvent } from \"./rpc-client.js\";\n"]}
@@ -0,0 +1,17 @@
1
+ import type { Readable } from "node:stream";
2
+ /**
3
+ * Serialize a single strict JSONL record.
4
+ *
5
+ * Framing is LF-only. Payload strings may contain other Unicode separators such as
6
+ * U+2028 and U+2029. Clients must split records on `\n` only.
7
+ */
8
+ export declare function serializeJsonLine(value: unknown): string;
9
+ /**
10
+ * Attach an LF-only JSONL reader to a stream.
11
+ *
12
+ * This intentionally does not use Node readline. Readline splits on additional
13
+ * Unicode separators that are valid inside JSON strings and therefore does not
14
+ * implement strict JSONL framing.
15
+ */
16
+ export declare function attachJsonlLineReader(stream: Readable, onLine: (line: string) => void): () => void;
17
+ //# sourceMappingURL=jsonl.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsonl.d.ts","sourceRoot":"","sources":["../src/jsonl.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAG5C;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAExD;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,MAAM,IAAI,CA2ClG"}
@@ -0,0 +1,54 @@
1
+ import { StringDecoder } from "node:string_decoder";
2
+ /**
3
+ * Serialize a single strict JSONL record.
4
+ *
5
+ * Framing is LF-only. Payload strings may contain other Unicode separators such as
6
+ * U+2028 and U+2029. Clients must split records on `\n` only.
7
+ */
8
+ export function serializeJsonLine(value) {
9
+ return `${JSON.stringify(value)}\n`;
10
+ }
11
+ /**
12
+ * Attach an LF-only JSONL reader to a stream.
13
+ *
14
+ * This intentionally does not use Node readline. Readline splits on additional
15
+ * Unicode separators that are valid inside JSON strings and therefore does not
16
+ * implement strict JSONL framing.
17
+ */
18
+ export function attachJsonlLineReader(stream, onLine) {
19
+ const decoder = new StringDecoder("utf8");
20
+ let buffer = "";
21
+ const emitLine = (line) => {
22
+ onLine(line.endsWith("\r") ? line.slice(0, -1) : line);
23
+ };
24
+ const onData = (chunk) => {
25
+ buffer += typeof chunk === "string" ? chunk : decoder.write(chunk);
26
+ while (true) {
27
+ const newlineIndex = buffer.indexOf("\n");
28
+ if (newlineIndex === -1) {
29
+ return;
30
+ }
31
+ emitLine(buffer.slice(0, newlineIndex));
32
+ buffer = buffer.slice(newlineIndex + 1);
33
+ }
34
+ };
35
+ const onEnd = () => {
36
+ buffer += decoder.end();
37
+ if (buffer.length > 0) {
38
+ emitLine(buffer);
39
+ buffer = "";
40
+ }
41
+ };
42
+ const onError = (_err) => {
43
+ // Stream errors are non-fatal for JSONL reading
44
+ };
45
+ stream.on("data", onData);
46
+ stream.on("end", onEnd);
47
+ stream.on("error", onError);
48
+ return () => {
49
+ stream.off("data", onData);
50
+ stream.off("end", onEnd);
51
+ stream.off("error", onError);
52
+ };
53
+ }
54
+ //# sourceMappingURL=jsonl.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jsonl.js","sourceRoot":"","sources":["../src/jsonl.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,KAAc;IAC/C,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC;AACrC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAAgB,EAAE,MAA8B;IACrF,MAAM,OAAO,GAAG,IAAI,aAAa,CAAC,MAAM,CAAC,CAAC;IAC1C,IAAI,MAAM,GAAG,EAAE,CAAC;IAEhB,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAE,EAAE;QACjC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IACxD,CAAC,CAAC;IAEF,MAAM,MAAM,GAAG,CAAC,KAAsB,EAAE,EAAE;QACzC,MAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAEnE,OAAO,IAAI,EAAE,CAAC;YACb,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC1C,IAAI,YAAY,KAAK,CAAC,CAAC,EAAE,CAAC;gBACzB,OAAO;YACR,CAAC;YAED,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC;YACxC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;QACzC,CAAC;IACF,CAAC,CAAC;IAEF,MAAM,KAAK,GAAG,GAAG,EAAE;QAClB,MAAM,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QACxB,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,QAAQ,CAAC,MAAM,CAAC,CAAC;YACjB,MAAM,GAAG,EAAE,CAAC;QACb,CAAC;IACF,CAAC,CAAC;IAEF,MAAM,OAAO,GAAG,CAAC,IAAW,EAAE,EAAE;QAC/B,gDAAgD;IACjD,CAAC,CAAC;IAEF,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC1B,MAAM,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACxB,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAE5B,OAAO,GAAG,EAAE;QACX,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC3B,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACzB,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC9B,CAAC,CAAC;AACH,CAAC","sourcesContent":["import type { Readable } from \"node:stream\";\nimport { StringDecoder } from \"node:string_decoder\";\n\n/**\n * Serialize a single strict JSONL record.\n *\n * Framing is LF-only. Payload strings may contain other Unicode separators such as\n * U+2028 and U+2029. Clients must split records on `\\n` only.\n */\nexport function serializeJsonLine(value: unknown): string {\n\treturn `${JSON.stringify(value)}\\n`;\n}\n\n/**\n * Attach an LF-only JSONL reader to a stream.\n *\n * This intentionally does not use Node readline. Readline splits on additional\n * Unicode separators that are valid inside JSON strings and therefore does not\n * implement strict JSONL framing.\n */\nexport function attachJsonlLineReader(stream: Readable, onLine: (line: string) => void): () => void {\n\tconst decoder = new StringDecoder(\"utf8\");\n\tlet buffer = \"\";\n\n\tconst emitLine = (line: string) => {\n\t\tonLine(line.endsWith(\"\\r\") ? line.slice(0, -1) : line);\n\t};\n\n\tconst onData = (chunk: string | Buffer) => {\n\t\tbuffer += typeof chunk === \"string\" ? chunk : decoder.write(chunk);\n\n\t\twhile (true) {\n\t\t\tconst newlineIndex = buffer.indexOf(\"\\n\");\n\t\t\tif (newlineIndex === -1) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\temitLine(buffer.slice(0, newlineIndex));\n\t\t\tbuffer = buffer.slice(newlineIndex + 1);\n\t\t}\n\t};\n\n\tconst onEnd = () => {\n\t\tbuffer += decoder.end();\n\t\tif (buffer.length > 0) {\n\t\t\temitLine(buffer);\n\t\t\tbuffer = \"\";\n\t\t}\n\t};\n\n\tconst onError = (_err: Error) => {\n\t\t// Stream errors are non-fatal for JSONL reading\n\t};\n\n\tstream.on(\"data\", onData);\n\tstream.on(\"end\", onEnd);\n\tstream.on(\"error\", onError);\n\n\treturn () => {\n\t\tstream.off(\"data\", onData);\n\t\tstream.off(\"end\", onEnd);\n\t\tstream.off(\"error\", onError);\n\t};\n}\n"]}
@@ -0,0 +1,259 @@
1
+ /**
2
+ * RPC Client for programmatic access to the coding agent.
3
+ *
4
+ * Spawns the agent in RPC mode and provides a typed API for all operations.
5
+ * This is a standalone SDK client — all types are inlined with zero internal
6
+ * package dependencies.
7
+ */
8
+ import type { BashResult, CompactionResult, ImageContent, ModelInfo, RpcInitResult, RpcSessionState, RpcSlashCommand, ThinkingLevel, SessionStats } from "./rpc-types.js";
9
+ /** Agent event — a loosely-typed record from the server. The `type` field is always present. */
10
+ export interface SdkAgentEvent {
11
+ type: string;
12
+ [key: string]: unknown;
13
+ }
14
+ export interface RpcClientOptions {
15
+ /** Path to the CLI entry point (default: searches for dist/cli.js) */
16
+ cliPath?: string;
17
+ /** Working directory for the agent */
18
+ cwd?: string;
19
+ /** Environment variables */
20
+ env?: Record<string, string>;
21
+ /** Provider to use */
22
+ provider?: string;
23
+ /** Model ID to use */
24
+ model?: string;
25
+ /** Additional CLI arguments */
26
+ args?: string[];
27
+ }
28
+ export type RpcEventListener = (event: SdkAgentEvent) => void;
29
+ export declare class RpcClient {
30
+ private options;
31
+ private process;
32
+ private stopReadingStdout;
33
+ private _stderrHandler?;
34
+ private eventListeners;
35
+ private pendingRequests;
36
+ private requestId;
37
+ private stderr;
38
+ private _stopped;
39
+ constructor(options?: RpcClientOptions);
40
+ /**
41
+ * Start the RPC agent process.
42
+ */
43
+ start(): Promise<void>;
44
+ /**
45
+ * Stop the RPC agent process.
46
+ */
47
+ stop(): Promise<void>;
48
+ /**
49
+ * Subscribe to agent events via callback.
50
+ */
51
+ onEvent(listener: RpcEventListener): () => void;
52
+ /**
53
+ * Async generator that yields agent events as they arrive.
54
+ *
55
+ * Usage:
56
+ * ```ts
57
+ * for await (const event of client.events()) {
58
+ * console.log(event.type, event);
59
+ * }
60
+ * ```
61
+ *
62
+ * The generator terminates when:
63
+ * - `stop()` is called
64
+ * - The agent process exits
65
+ * - The consumer breaks out of the loop
66
+ */
67
+ events(): AsyncGenerator<SdkAgentEvent, void, undefined>;
68
+ /**
69
+ * Get collected stderr output (useful for debugging).
70
+ */
71
+ getStderr(): string;
72
+ /**
73
+ * Send a prompt to the agent.
74
+ * Returns immediately after sending; use onEvent() or events() to receive streaming events.
75
+ * Use waitForIdle() to wait for completion.
76
+ */
77
+ prompt(message: string, images?: ImageContent[]): Promise<void>;
78
+ /**
79
+ * Queue a steering message to interrupt the agent mid-run.
80
+ */
81
+ steer(message: string, images?: ImageContent[]): Promise<void>;
82
+ /**
83
+ * Queue a follow-up message to be processed after the agent finishes.
84
+ */
85
+ followUp(message: string, images?: ImageContent[]): Promise<void>;
86
+ /**
87
+ * Abort current operation.
88
+ */
89
+ abort(): Promise<void>;
90
+ /**
91
+ * Start a new session, optionally with parent tracking.
92
+ * @param parentSession - Optional parent session path for lineage tracking
93
+ * @returns Object with `cancelled: true` if an extension cancelled the new session
94
+ */
95
+ newSession(parentSession?: string): Promise<{
96
+ cancelled: boolean;
97
+ }>;
98
+ /**
99
+ * Get current session state.
100
+ */
101
+ getState(): Promise<RpcSessionState>;
102
+ /**
103
+ * Set model by provider and ID.
104
+ */
105
+ setModel(provider: string, modelId: string): Promise<{
106
+ provider: string;
107
+ id: string;
108
+ }>;
109
+ /**
110
+ * Cycle to next model.
111
+ */
112
+ cycleModel(): Promise<{
113
+ model: {
114
+ provider: string;
115
+ id: string;
116
+ };
117
+ thinkingLevel: ThinkingLevel;
118
+ isScoped: boolean;
119
+ } | null>;
120
+ /**
121
+ * Get list of available models.
122
+ */
123
+ getAvailableModels(): Promise<ModelInfo[]>;
124
+ /**
125
+ * Set thinking level.
126
+ */
127
+ setThinkingLevel(level: ThinkingLevel): Promise<void>;
128
+ /**
129
+ * Cycle thinking level.
130
+ */
131
+ cycleThinkingLevel(): Promise<{
132
+ level: ThinkingLevel;
133
+ } | null>;
134
+ /**
135
+ * Set steering mode.
136
+ */
137
+ setSteeringMode(mode: "all" | "one-at-a-time"): Promise<void>;
138
+ /**
139
+ * Set follow-up mode.
140
+ */
141
+ setFollowUpMode(mode: "all" | "one-at-a-time"): Promise<void>;
142
+ /**
143
+ * Compact session context.
144
+ */
145
+ compact(customInstructions?: string): Promise<CompactionResult>;
146
+ /**
147
+ * Set auto-compaction enabled/disabled.
148
+ */
149
+ setAutoCompaction(enabled: boolean): Promise<void>;
150
+ /**
151
+ * Set auto-retry enabled/disabled.
152
+ */
153
+ setAutoRetry(enabled: boolean): Promise<void>;
154
+ /**
155
+ * Abort in-progress retry.
156
+ */
157
+ abortRetry(): Promise<void>;
158
+ /**
159
+ * Execute a bash command.
160
+ */
161
+ bash(command: string): Promise<BashResult>;
162
+ /**
163
+ * Abort running bash command.
164
+ */
165
+ abortBash(): Promise<void>;
166
+ /**
167
+ * Get session statistics.
168
+ */
169
+ getSessionStats(): Promise<SessionStats>;
170
+ /**
171
+ * Export session to HTML.
172
+ */
173
+ exportHtml(outputPath?: string): Promise<{
174
+ path: string;
175
+ }>;
176
+ /**
177
+ * Switch to a different session file.
178
+ * @returns Object with `cancelled: true` if an extension cancelled the switch
179
+ */
180
+ switchSession(sessionPath: string): Promise<{
181
+ cancelled: boolean;
182
+ }>;
183
+ /**
184
+ * Fork from a specific message.
185
+ * @returns Object with `text` (the message text) and `cancelled` (if extension cancelled)
186
+ */
187
+ fork(entryId: string): Promise<{
188
+ text: string;
189
+ cancelled: boolean;
190
+ }>;
191
+ /**
192
+ * Get messages available for forking.
193
+ */
194
+ getForkMessages(): Promise<Array<{
195
+ entryId: string;
196
+ text: string;
197
+ }>>;
198
+ /**
199
+ * Get text of last assistant message.
200
+ */
201
+ getLastAssistantText(): Promise<string | null>;
202
+ /**
203
+ * Set the session display name.
204
+ */
205
+ setSessionName(name: string): Promise<void>;
206
+ /**
207
+ * Get all messages in the session.
208
+ * Messages are returned as opaque objects — the internal structure may vary.
209
+ */
210
+ getMessages(): Promise<unknown[]>;
211
+ /**
212
+ * Get available commands (extension commands, prompt templates, skills).
213
+ */
214
+ getCommands(): Promise<RpcSlashCommand[]>;
215
+ /**
216
+ * Send a UI response to a pending extension_ui_request.
217
+ * Fire-and-forget — no request/response correlation.
218
+ */
219
+ sendUIResponse(id: string, response: {
220
+ value?: string;
221
+ values?: string[];
222
+ confirmed?: boolean;
223
+ cancelled?: boolean;
224
+ }): void;
225
+ /**
226
+ * Initialize a v2 protocol session. Must be sent as the first command.
227
+ * Returns the negotiated protocol version, session ID, and server capabilities.
228
+ */
229
+ init(options?: {
230
+ clientId?: string;
231
+ }): Promise<RpcInitResult>;
232
+ /**
233
+ * Request a graceful shutdown of the agent process.
234
+ * Waits for the response before the process exits.
235
+ */
236
+ shutdown(): Promise<void>;
237
+ /**
238
+ * Subscribe to specific event types (v2 only).
239
+ * Pass ["*"] to receive all events, or a list of event type strings to filter.
240
+ */
241
+ subscribe(events: string[]): Promise<void>;
242
+ /**
243
+ * Wait for agent to become idle (no streaming).
244
+ * Resolves when agent_end event is received.
245
+ */
246
+ waitForIdle(timeout?: number): Promise<void>;
247
+ /**
248
+ * Collect events until agent becomes idle.
249
+ */
250
+ collectEvents(timeout?: number): Promise<SdkAgentEvent[]>;
251
+ /**
252
+ * Send prompt and wait for completion, returning all events.
253
+ */
254
+ promptAndWait(message: string, images?: ImageContent[], timeout?: number): Promise<SdkAgentEvent[]>;
255
+ private handleLine;
256
+ private send;
257
+ private getData;
258
+ }
259
+ //# sourceMappingURL=rpc-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rpc-client.d.ts","sourceRoot":"","sources":["../src/rpc-client.ts"],"names":[],"mappings":"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"}