apex-code 0.3.0 → 0.5.0

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 (213) hide show
  1. package/CHANGELOG.md +46 -0
  2. package/dist/client/transcript.d.ts.map +1 -1
  3. package/dist/client/transcript.js +1 -1
  4. package/dist/client/transcript.js.map +1 -1
  5. package/dist/core/agent-session-services.d.ts.map +1 -1
  6. package/dist/core/agent-session-services.js +2 -1
  7. package/dist/core/agent-session-services.js.map +1 -1
  8. package/dist/core/delegation/runtime.d.ts.map +1 -1
  9. package/dist/core/delegation/runtime.js +2 -2
  10. package/dist/core/delegation/runtime.js.map +1 -1
  11. package/dist/core/durable-state/daemon.d.ts.map +1 -1
  12. package/dist/core/durable-state/daemon.js +1 -1
  13. package/dist/core/durable-state/daemon.js.map +1 -1
  14. package/dist/core/extensions/types.d.ts +1 -1
  15. package/dist/core/extensions/types.d.ts.map +1 -1
  16. package/dist/core/extensions/types.js.map +1 -1
  17. package/dist/core/keybindings.d.ts +1 -1
  18. package/dist/core/keybindings.d.ts.map +1 -1
  19. package/dist/core/keybindings.js.map +1 -1
  20. package/dist/core/mcp/mcp-tool.d.ts.map +1 -1
  21. package/dist/core/mcp/mcp-tool.js +2 -4
  22. package/dist/core/mcp/mcp-tool.js.map +1 -1
  23. package/dist/core/mcp/oauth/authorize.d.ts.map +1 -1
  24. package/dist/core/mcp/oauth/authorize.js +7 -2
  25. package/dist/core/mcp/oauth/authorize.js.map +1 -1
  26. package/dist/core/mcp/runtime.d.ts +2 -2
  27. package/dist/core/mcp/runtime.d.ts.map +1 -1
  28. package/dist/core/mcp/runtime.js +8 -3
  29. package/dist/core/mcp/runtime.js.map +1 -1
  30. package/dist/core/permissions/store.d.ts +7 -2
  31. package/dist/core/permissions/store.d.ts.map +1 -1
  32. package/dist/core/permissions/store.js +6 -1
  33. package/dist/core/permissions/store.js.map +1 -1
  34. package/dist/core/project-resources.d.ts +12 -0
  35. package/dist/core/project-resources.d.ts.map +1 -1
  36. package/dist/core/project-resources.js +19 -0
  37. package/dist/core/project-resources.js.map +1 -1
  38. package/dist/core/provider-composer.d.ts.map +1 -1
  39. package/dist/core/provider-composer.js +10 -1
  40. package/dist/core/provider-composer.js.map +1 -1
  41. package/dist/core/resource-loader.d.ts +6 -0
  42. package/dist/core/resource-loader.d.ts.map +1 -1
  43. package/dist/core/resource-loader.js +9 -3
  44. package/dist/core/resource-loader.js.map +1 -1
  45. package/dist/core/sdk.d.ts +1 -1
  46. package/dist/core/sdk.d.ts.map +1 -1
  47. package/dist/core/sdk.js +3 -3
  48. package/dist/core/sdk.js.map +1 -1
  49. package/dist/core/settings-manager.d.ts +16 -3
  50. package/dist/core/settings-manager.d.ts.map +1 -1
  51. package/dist/core/settings-manager.js +39 -16
  52. package/dist/core/settings-manager.js.map +1 -1
  53. package/dist/core/tools/bash.d.ts +11 -7
  54. package/dist/core/tools/bash.d.ts.map +1 -1
  55. package/dist/core/tools/bash.js +37 -46
  56. package/dist/core/tools/bash.js.map +1 -1
  57. package/dist/core/tools/delegate.d.ts.map +1 -1
  58. package/dist/core/tools/delegate.js +2 -2
  59. package/dist/core/tools/delegate.js.map +1 -1
  60. package/dist/core/tools/edit.d.ts.map +1 -1
  61. package/dist/core/tools/edit.js +3 -3
  62. package/dist/core/tools/edit.js.map +1 -1
  63. package/dist/core/tools/find.d.ts.map +1 -1
  64. package/dist/core/tools/find.js +4 -4
  65. package/dist/core/tools/find.js.map +1 -1
  66. package/dist/core/tools/grep.d.ts.map +1 -1
  67. package/dist/core/tools/grep.js +4 -4
  68. package/dist/core/tools/grep.js.map +1 -1
  69. package/dist/core/tools/ls.d.ts.map +1 -1
  70. package/dist/core/tools/ls.js +4 -4
  71. package/dist/core/tools/ls.js.map +1 -1
  72. package/dist/core/tools/path-utils.d.ts +9 -0
  73. package/dist/core/tools/path-utils.d.ts.map +1 -1
  74. package/dist/core/tools/path-utils.js +235 -10
  75. package/dist/core/tools/path-utils.js.map +1 -1
  76. package/dist/core/tools/read.d.ts.map +1 -1
  77. package/dist/core/tools/read.js +11 -8
  78. package/dist/core/tools/read.js.map +1 -1
  79. package/dist/core/tools/write.d.ts.map +1 -1
  80. package/dist/core/tools/write.js +7 -8
  81. package/dist/core/tools/write.js.map +1 -1
  82. package/dist/core/workspace/state.d.ts.map +1 -1
  83. package/dist/core/workspace/state.js +1 -1
  84. package/dist/core/workspace/state.js.map +1 -1
  85. package/dist/extensions/llama/ui.d.ts.map +1 -1
  86. package/dist/extensions/llama/ui.js +3 -2
  87. package/dist/extensions/llama/ui.js.map +1 -1
  88. package/dist/main.d.ts.map +1 -1
  89. package/dist/main.js +3 -1
  90. package/dist/main.js.map +1 -1
  91. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  92. package/dist/modes/interactive/components/assistant-message.js +0 -10
  93. package/dist/modes/interactive/components/assistant-message.js.map +1 -1
  94. package/dist/modes/interactive/components/autocomplete-source.d.ts +8 -0
  95. package/dist/modes/interactive/components/autocomplete-source.d.ts.map +1 -0
  96. package/dist/modes/interactive/components/autocomplete-source.js +23 -0
  97. package/dist/modes/interactive/components/autocomplete-source.js.map +1 -0
  98. package/dist/modes/interactive/components/bash-execution.d.ts.map +1 -1
  99. package/dist/modes/interactive/components/bash-execution.js +6 -4
  100. package/dist/modes/interactive/components/bash-execution.js.map +1 -1
  101. package/dist/modes/interactive/components/bordered-loader.d.ts.map +1 -1
  102. package/dist/modes/interactive/components/bordered-loader.js +1 -1
  103. package/dist/modes/interactive/components/bordered-loader.js.map +1 -1
  104. package/dist/modes/interactive/components/composer-dock.d.ts +12 -0
  105. package/dist/modes/interactive/components/composer-dock.d.ts.map +1 -0
  106. package/dist/modes/interactive/components/composer-dock.js +24 -0
  107. package/dist/modes/interactive/components/composer-dock.js.map +1 -0
  108. package/dist/modes/interactive/components/config-selector.d.ts.map +1 -1
  109. package/dist/modes/interactive/components/config-selector.js +11 -9
  110. package/dist/modes/interactive/components/config-selector.js.map +1 -1
  111. package/dist/modes/interactive/components/diff.d.ts.map +1 -1
  112. package/dist/modes/interactive/components/diff.js +2 -2
  113. package/dist/modes/interactive/components/diff.js.map +1 -1
  114. package/dist/modes/interactive/components/extension-editor.d.ts.map +1 -1
  115. package/dist/modes/interactive/components/extension-editor.js +9 -9
  116. package/dist/modes/interactive/components/extension-editor.js.map +1 -1
  117. package/dist/modes/interactive/components/extension-input.d.ts.map +1 -1
  118. package/dist/modes/interactive/components/extension-input.js +9 -5
  119. package/dist/modes/interactive/components/extension-input.js.map +1 -1
  120. package/dist/modes/interactive/components/extension-selector.d.ts.map +1 -1
  121. package/dist/modes/interactive/components/extension-selector.js +11 -10
  122. package/dist/modes/interactive/components/extension-selector.js.map +1 -1
  123. package/dist/modes/interactive/components/first-time-setup.d.ts.map +1 -1
  124. package/dist/modes/interactive/components/first-time-setup.js +6 -6
  125. package/dist/modes/interactive/components/first-time-setup.js.map +1 -1
  126. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  127. package/dist/modes/interactive/components/footer.js +8 -3
  128. package/dist/modes/interactive/components/footer.js.map +1 -1
  129. package/dist/modes/interactive/components/keybinding-hints.d.ts +21 -0
  130. package/dist/modes/interactive/components/keybinding-hints.d.ts.map +1 -1
  131. package/dist/modes/interactive/components/keybinding-hints.js +34 -0
  132. package/dist/modes/interactive/components/keybinding-hints.js.map +1 -1
  133. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
  134. package/dist/modes/interactive/components/login-dialog.js +27 -23
  135. package/dist/modes/interactive/components/login-dialog.js.map +1 -1
  136. package/dist/modes/interactive/components/model-selector.d.ts +1 -1
  137. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  138. package/dist/modes/interactive/components/model-selector.js +14 -18
  139. package/dist/modes/interactive/components/model-selector.js.map +1 -1
  140. package/dist/modes/interactive/components/oauth-selector.d.ts.map +1 -1
  141. package/dist/modes/interactive/components/oauth-selector.js +7 -6
  142. package/dist/modes/interactive/components/oauth-selector.js.map +1 -1
  143. package/dist/modes/interactive/components/permission-preview.d.ts.map +1 -1
  144. package/dist/modes/interactive/components/permission-preview.js +3 -3
  145. package/dist/modes/interactive/components/permission-preview.js.map +1 -1
  146. package/dist/modes/interactive/components/prompt-input.d.ts +12 -0
  147. package/dist/modes/interactive/components/prompt-input.d.ts.map +1 -0
  148. package/dist/modes/interactive/components/prompt-input.js +18 -0
  149. package/dist/modes/interactive/components/prompt-input.js.map +1 -0
  150. package/dist/modes/interactive/components/scoped-models-selector.d.ts +1 -1
  151. package/dist/modes/interactive/components/scoped-models-selector.d.ts.map +1 -1
  152. package/dist/modes/interactive/components/scoped-models-selector.js +4 -3
  153. package/dist/modes/interactive/components/scoped-models-selector.js.map +1 -1
  154. package/dist/modes/interactive/components/session-selector.d.ts.map +1 -1
  155. package/dist/modes/interactive/components/session-selector.js +26 -19
  156. package/dist/modes/interactive/components/session-selector.js.map +1 -1
  157. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  158. package/dist/modes/interactive/components/settings-selector.js +39 -6
  159. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  160. package/dist/modes/interactive/components/settings-submenu.d.ts.map +1 -1
  161. package/dist/modes/interactive/components/settings-submenu.js +8 -6
  162. package/dist/modes/interactive/components/settings-submenu.js.map +1 -1
  163. package/dist/modes/interactive/components/thinking-selector.d.ts.map +1 -1
  164. package/dist/modes/interactive/components/thinking-selector.js +10 -5
  165. package/dist/modes/interactive/components/thinking-selector.js.map +1 -1
  166. package/dist/modes/interactive/components/tool-execution.d.ts +1 -11
  167. package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
  168. package/dist/modes/interactive/components/tool-execution.js +9 -38
  169. package/dist/modes/interactive/components/tool-execution.js.map +1 -1
  170. package/dist/modes/interactive/components/tool-panel.d.ts.map +1 -1
  171. package/dist/modes/interactive/components/tool-panel.js +7 -2
  172. package/dist/modes/interactive/components/tool-panel.js.map +1 -1
  173. package/dist/modes/interactive/components/tree-selector.d.ts.map +1 -1
  174. package/dist/modes/interactive/components/tree-selector.js +9 -5
  175. package/dist/modes/interactive/components/tree-selector.js.map +1 -1
  176. package/dist/modes/interactive/components/trust-selector.d.ts.map +1 -1
  177. package/dist/modes/interactive/components/trust-selector.js +11 -11
  178. package/dist/modes/interactive/components/trust-selector.js.map +1 -1
  179. package/dist/modes/interactive/components/user-message-selector.d.ts.map +1 -1
  180. package/dist/modes/interactive/components/user-message-selector.js +2 -2
  181. package/dist/modes/interactive/components/user-message-selector.js.map +1 -1
  182. package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
  183. package/dist/modes/interactive/components/user-message.js +6 -3
  184. package/dist/modes/interactive/components/user-message.js.map +1 -1
  185. package/dist/modes/interactive/interactive-mode.d.ts +7 -2
  186. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  187. package/dist/modes/interactive/interactive-mode.js +65 -65
  188. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  189. package/dist/modes/print-mode.d.ts.map +1 -1
  190. package/dist/modes/print-mode.js +49 -23
  191. package/dist/modes/print-mode.js.map +1 -1
  192. package/dist/tsconfig.json +3 -0
  193. package/dist/utils/clipboard-image.d.ts.map +1 -1
  194. package/dist/utils/clipboard-image.js +1 -1
  195. package/dist/utils/clipboard-image.js.map +1 -1
  196. package/dist/utils/syntax-highlight.d.ts.map +1 -1
  197. package/dist/utils/syntax-highlight.js +22 -22
  198. package/dist/utils/syntax-highlight.js.map +1 -1
  199. package/docs/json.md +36 -0
  200. package/docs/models.md +1 -1
  201. package/docs/settings.md +1 -1
  202. package/examples/extensions/gondolin/package-lock.json +3 -3
  203. package/examples/extensions/minimal-mode.ts +6 -6
  204. package/examples/extensions/sandbox/package-lock.json +4 -4
  205. package/examples/extensions/sandbox/package.json +1 -1
  206. package/examples/sdk/10-settings.ts +2 -2
  207. package/examples/sdk/README.md +1 -1
  208. package/npm-shrinkwrap.json +19 -34
  209. package/package.json +6 -6
  210. package/dist/modes/interactive/components/message-spine.d.ts +0 -14
  211. package/dist/modes/interactive/components/message-spine.d.ts.map +0 -1
  212. package/dist/modes/interactive/components/message-spine.js +0 -19
  213. package/dist/modes/interactive/components/message-spine.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../../../src/core/durable-state/daemon.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAqB,MAAM,iBAAiB,CAAC;AACxE,OAAO,EACN,KAAK,oBAAoB,EAGzB,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,yBAAyB;IACzC,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;CACb;AACD,MAAM,WAAW,iBAAiB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,gBAAgB,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;CACd;AACD,MAAM,WAAW,aAAa;IAC7B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,qBAAa,kBAAkB;;IAC9B,QAAQ,CAAC,mBAAmB,EAAE,SAAS,kBAAkB,EAAE,CAAC;IAC5D,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC;IAInC,YAAY,OAAO,EAAE,yBAAyB,EAM7C;IAED,MAAM,CAAC,KAAK,EAAE,iBAAiB,GAAG,kBAAkB,CAWnD;IAED,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAMhD;IAED,aAAa,CAAC,KAAK,EAAE,aAAa,GAAG,oBAAoB,CAGxD;IAEK,WAAW,CAAC,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAGlF;IAED,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,oBAAoB,GAAG,SAAS,CAEvD;IACD,eAAe,IAAI,MAAM,CAExB;IACD,OAAO,IAAI,IAAI,CAEd;CAQD","sourcesContent":["import { type GitProvenance, readGitProvenance } from \"./provenance.ts\";\nimport {\n\ttype CommandJournalRecord,\n\ttype DurableStateStore,\n\topenDurableStateStore,\n\ttype RecoveryDiagnostic,\n\ttype SessionLeaseMode,\n\ttype SessionLeaseRecord,\n} from \"./sqlite.ts\";\n\nexport interface DurableStateDaemonOptions {\n\tdatabasePath: string;\n\tdaemonId: string;\n\tcwd?: string;\n}\nexport interface AttachClientInput {\n\tsessionId: string;\n\tclientId: string;\n\tmode: SessionLeaseMode;\n\tttlMs: number;\n}\nexport interface MutationInput {\n\tid?: string;\n\tsessionId: string;\n\tclientId: string;\n\tcommand: string;\n}\n\n/**\n * Local daemon state coordinator. All session mutations are admitted through a\n * durable lease and journaled before the caller receives its operation callback.\n */\nexport class DurableStateDaemon {\n\treadonly recoveryDiagnostics: readonly RecoveryDiagnostic[];\n\treadonly provenance: GitProvenance;\n\treadonly #store: DurableStateStore;\n\treadonly #attachments = new Map<string, Map<string, SessionLeaseRecord>>();\n\n\tconstructor(options: DurableStateDaemonOptions) {\n\t\tthis.#store = openDurableStateStore(options.databasePath);\n\t\tthis.provenance = readGitProvenance(options.cwd ?? process.cwd());\n\t\tthis.recoveryDiagnostics = this.#store.recoverUnfinishedCommandsWithDiagnostics(\n\t\t\t`daemon ${options.daemonId} started before command completion`,\n\t\t);\n\t}\n\n\tattach(input: AttachClientInput): SessionLeaseRecord {\n\t\tconst lease = this.#store.acquireLease({\n\t\t\tsessionId: input.sessionId,\n\t\t\townerId: input.clientId,\n\t\t\tmode: input.mode,\n\t\t\tttlMs: input.ttlMs,\n\t\t});\n\t\tconst clients = this.#attachments.get(input.sessionId) ?? new Map<string, SessionLeaseRecord>();\n\t\tclients.set(input.clientId, lease);\n\t\tthis.#attachments.set(input.sessionId, clients);\n\t\treturn lease;\n\t}\n\n\tdetach(sessionId: string, clientId: string): void {\n\t\tthis.#store.releaseLease(sessionId, clientId);\n\t\tconst clients = this.#attachments.get(sessionId);\n\t\tif (!clients) return;\n\t\tclients.delete(clientId);\n\t\tif (clients.size === 0) this.#attachments.delete(sessionId);\n\t}\n\n\tbeginMutation(input: MutationInput): CommandJournalRecord {\n\t\tthis.#requireExclusiveAttachment(input.sessionId, input.clientId);\n\t\treturn this.#store.beginCommand({ id: input.id, sessionId: input.sessionId, command: input.command });\n\t}\n\n\tasync runMutation<T>(input: MutationInput, operation: () => Promise<T>): Promise<T> {\n\t\tthis.#requireExclusiveAttachment(input.sessionId, input.clientId);\n\t\treturn this.#store.runCommand({ id: input.id, sessionId: input.sessionId, command: input.command }, operation);\n\t}\n\n\tgetCommand(id: string): CommandJournalRecord | undefined {\n\t\treturn this.#store.getCommand(id);\n\t}\n\tgetCommandCount(): number {\n\t\treturn this.#store.commandCount();\n\t}\n\tdispose(): void {\n\t\tthis.#store.close();\n\t}\n\n\t#requireExclusiveAttachment(sessionId: string, clientId: string): void {\n\t\tconst attachment = this.#attachments.get(sessionId)?.get(clientId);\n\t\tif (!attachment || attachment.mode !== \"exclusive\" || Date.parse(attachment.expiresAt) <= Date.now()) {\n\t\t\tthrow new Error(`Client does not hold an active exclusive lease for ${sessionId}`);\n\t\t}\n\t}\n}\n"]}
1
+ {"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../../../src/core/durable-state/daemon.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,aAAa,EAAqB,MAAM,iBAAiB,CAAC;AACxE,OAAO,EACN,KAAK,oBAAoB,EAGzB,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,KAAK,kBAAkB,EACvB,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,yBAAyB;IACzC,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;CACb;AACD,MAAM,WAAW,iBAAiB;IACjC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,gBAAgB,CAAC;IACvB,KAAK,EAAE,MAAM,CAAC;CACd;AACD,MAAM,WAAW,aAAa;IAC7B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,qBAAa,kBAAkB;;IAC9B,QAAQ,CAAC,mBAAmB,EAAE,SAAS,kBAAkB,EAAE,CAAC;IAC5D,QAAQ,CAAC,UAAU,EAAE,aAAa,CAAC;IAInC,YAAY,OAAO,EAAE,yBAAyB,EAM7C;IAED,MAAM,CAAC,KAAK,EAAE,iBAAiB,GAAG,kBAAkB,CAWnD;IAED,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAMhD;IAED,aAAa,CAAC,KAAK,EAAE,aAAa,GAAG,oBAAoB,CAGxD;IAEK,WAAW,CAAC,CAAC,EAAE,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAGlF;IAED,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,oBAAoB,GAAG,SAAS,CAEvD;IACD,eAAe,IAAI,MAAM,CAExB;IACD,OAAO,IAAI,IAAI,CAEd;CAQD","sourcesContent":["import { type GitProvenance, readGitProvenance } from \"./provenance.ts\";\nimport {\n\ttype CommandJournalRecord,\n\ttype DurableStateStore,\n\topenDurableStateStore,\n\ttype RecoveryDiagnostic,\n\ttype SessionLeaseMode,\n\ttype SessionLeaseRecord,\n} from \"./sqlite.ts\";\n\nexport interface DurableStateDaemonOptions {\n\tdatabasePath: string;\n\tdaemonId: string;\n\tcwd?: string;\n}\nexport interface AttachClientInput {\n\tsessionId: string;\n\tclientId: string;\n\tmode: SessionLeaseMode;\n\tttlMs: number;\n}\nexport interface MutationInput {\n\tid?: string;\n\tsessionId: string;\n\tclientId: string;\n\tcommand: string;\n}\n\n/**\n * Local daemon state coordinator. All session mutations are admitted through a\n * durable lease and journaled before the caller receives its operation callback.\n */\nexport class DurableStateDaemon {\n\treadonly recoveryDiagnostics: readonly RecoveryDiagnostic[];\n\treadonly provenance: GitProvenance;\n\treadonly #store: DurableStateStore;\n\treadonly #attachments = new Map<string, Map<string, SessionLeaseRecord>>();\n\n\tconstructor(options: DurableStateDaemonOptions) {\n\t\tthis.#store = openDurableStateStore(options.databasePath);\n\t\tthis.provenance = readGitProvenance(options.cwd ?? process.cwd());\n\t\tthis.recoveryDiagnostics = this.#store.recoverUnfinishedCommandsWithDiagnostics(\n\t\t\t`daemon ${options.daemonId} started before command completion`,\n\t\t);\n\t}\n\n\tattach(input: AttachClientInput): SessionLeaseRecord {\n\t\tconst lease = this.#store.acquireLease({\n\t\t\tsessionId: input.sessionId,\n\t\t\townerId: input.clientId,\n\t\t\tmode: input.mode,\n\t\t\tttlMs: input.ttlMs,\n\t\t});\n\t\tconst clients = this.#attachments.get(input.sessionId) ?? new Map<string, SessionLeaseRecord>();\n\t\tclients.set(input.clientId, lease);\n\t\tthis.#attachments.set(input.sessionId, clients);\n\t\treturn lease;\n\t}\n\n\tdetach(sessionId: string, clientId: string): void {\n\t\tthis.#store.releaseLease(sessionId, clientId);\n\t\tconst clients = this.#attachments.get(sessionId);\n\t\tif (!clients) return;\n\t\tclients.delete(clientId);\n\t\tif (clients.size === 0) this.#attachments.delete(sessionId);\n\t}\n\n\tbeginMutation(input: MutationInput): CommandJournalRecord {\n\t\tthis.#requireExclusiveAttachment(input.sessionId, input.clientId);\n\t\treturn this.#store.beginCommand({ id: input.id, sessionId: input.sessionId, command: input.command });\n\t}\n\n\tasync runMutation<T>(input: MutationInput, operation: () => Promise<T>): Promise<T> {\n\t\tthis.#requireExclusiveAttachment(input.sessionId, input.clientId);\n\t\treturn this.#store.runCommand({ id: input.id, sessionId: input.sessionId, command: input.command }, operation);\n\t}\n\n\tgetCommand(id: string): CommandJournalRecord | undefined {\n\t\treturn this.#store.getCommand(id);\n\t}\n\tgetCommandCount(): number {\n\t\treturn this.#store.commandCount();\n\t}\n\tdispose(): void {\n\t\tthis.#store.close();\n\t}\n\n\t#requireExclusiveAttachment(sessionId: string, clientId: string): void {\n\t\tconst attachment = this.#attachments.get(sessionId)?.get(clientId);\n\t\tif (attachment?.mode !== \"exclusive\" || Date.parse(attachment.expiresAt) <= Date.now()) {\n\t\t\tthrow new Error(`Client does not hold an active exclusive lease for ${sessionId}`);\n\t\t}\n\t}\n}\n"]}
@@ -54,7 +54,7 @@ export class DurableStateDaemon {
54
54
  }
55
55
  #requireExclusiveAttachment(sessionId, clientId) {
56
56
  const attachment = this.#attachments.get(sessionId)?.get(clientId);
57
- if (!attachment || attachment.mode !== "exclusive" || Date.parse(attachment.expiresAt) <= Date.now()) {
57
+ if (attachment?.mode !== "exclusive" || Date.parse(attachment.expiresAt) <= Date.now()) {
58
58
  throw new Error(`Client does not hold an active exclusive lease for ${sessionId}`);
59
59
  }
60
60
  }
@@ -1 +1 @@
1
- {"version":3,"file":"daemon.js","sourceRoot":"","sources":["../../../src/core/durable-state/daemon.ts"],"names":[],"mappings":"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","sourcesContent":["import { type GitProvenance, readGitProvenance } from \"./provenance.ts\";\nimport {\n\ttype CommandJournalRecord,\n\ttype DurableStateStore,\n\topenDurableStateStore,\n\ttype RecoveryDiagnostic,\n\ttype SessionLeaseMode,\n\ttype SessionLeaseRecord,\n} from \"./sqlite.ts\";\n\nexport interface DurableStateDaemonOptions {\n\tdatabasePath: string;\n\tdaemonId: string;\n\tcwd?: string;\n}\nexport interface AttachClientInput {\n\tsessionId: string;\n\tclientId: string;\n\tmode: SessionLeaseMode;\n\tttlMs: number;\n}\nexport interface MutationInput {\n\tid?: string;\n\tsessionId: string;\n\tclientId: string;\n\tcommand: string;\n}\n\n/**\n * Local daemon state coordinator. All session mutations are admitted through a\n * durable lease and journaled before the caller receives its operation callback.\n */\nexport class DurableStateDaemon {\n\treadonly recoveryDiagnostics: readonly RecoveryDiagnostic[];\n\treadonly provenance: GitProvenance;\n\treadonly #store: DurableStateStore;\n\treadonly #attachments = new Map<string, Map<string, SessionLeaseRecord>>();\n\n\tconstructor(options: DurableStateDaemonOptions) {\n\t\tthis.#store = openDurableStateStore(options.databasePath);\n\t\tthis.provenance = readGitProvenance(options.cwd ?? process.cwd());\n\t\tthis.recoveryDiagnostics = this.#store.recoverUnfinishedCommandsWithDiagnostics(\n\t\t\t`daemon ${options.daemonId} started before command completion`,\n\t\t);\n\t}\n\n\tattach(input: AttachClientInput): SessionLeaseRecord {\n\t\tconst lease = this.#store.acquireLease({\n\t\t\tsessionId: input.sessionId,\n\t\t\townerId: input.clientId,\n\t\t\tmode: input.mode,\n\t\t\tttlMs: input.ttlMs,\n\t\t});\n\t\tconst clients = this.#attachments.get(input.sessionId) ?? new Map<string, SessionLeaseRecord>();\n\t\tclients.set(input.clientId, lease);\n\t\tthis.#attachments.set(input.sessionId, clients);\n\t\treturn lease;\n\t}\n\n\tdetach(sessionId: string, clientId: string): void {\n\t\tthis.#store.releaseLease(sessionId, clientId);\n\t\tconst clients = this.#attachments.get(sessionId);\n\t\tif (!clients) return;\n\t\tclients.delete(clientId);\n\t\tif (clients.size === 0) this.#attachments.delete(sessionId);\n\t}\n\n\tbeginMutation(input: MutationInput): CommandJournalRecord {\n\t\tthis.#requireExclusiveAttachment(input.sessionId, input.clientId);\n\t\treturn this.#store.beginCommand({ id: input.id, sessionId: input.sessionId, command: input.command });\n\t}\n\n\tasync runMutation<T>(input: MutationInput, operation: () => Promise<T>): Promise<T> {\n\t\tthis.#requireExclusiveAttachment(input.sessionId, input.clientId);\n\t\treturn this.#store.runCommand({ id: input.id, sessionId: input.sessionId, command: input.command }, operation);\n\t}\n\n\tgetCommand(id: string): CommandJournalRecord | undefined {\n\t\treturn this.#store.getCommand(id);\n\t}\n\tgetCommandCount(): number {\n\t\treturn this.#store.commandCount();\n\t}\n\tdispose(): void {\n\t\tthis.#store.close();\n\t}\n\n\t#requireExclusiveAttachment(sessionId: string, clientId: string): void {\n\t\tconst attachment = this.#attachments.get(sessionId)?.get(clientId);\n\t\tif (!attachment || attachment.mode !== \"exclusive\" || Date.parse(attachment.expiresAt) <= Date.now()) {\n\t\t\tthrow new Error(`Client does not hold an active exclusive lease for ${sessionId}`);\n\t\t}\n\t}\n}\n"]}
1
+ {"version":3,"file":"daemon.js","sourceRoot":"","sources":["../../../src/core/durable-state/daemon.ts"],"names":[],"mappings":"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","sourcesContent":["import { type GitProvenance, readGitProvenance } from \"./provenance.ts\";\nimport {\n\ttype CommandJournalRecord,\n\ttype DurableStateStore,\n\topenDurableStateStore,\n\ttype RecoveryDiagnostic,\n\ttype SessionLeaseMode,\n\ttype SessionLeaseRecord,\n} from \"./sqlite.ts\";\n\nexport interface DurableStateDaemonOptions {\n\tdatabasePath: string;\n\tdaemonId: string;\n\tcwd?: string;\n}\nexport interface AttachClientInput {\n\tsessionId: string;\n\tclientId: string;\n\tmode: SessionLeaseMode;\n\tttlMs: number;\n}\nexport interface MutationInput {\n\tid?: string;\n\tsessionId: string;\n\tclientId: string;\n\tcommand: string;\n}\n\n/**\n * Local daemon state coordinator. All session mutations are admitted through a\n * durable lease and journaled before the caller receives its operation callback.\n */\nexport class DurableStateDaemon {\n\treadonly recoveryDiagnostics: readonly RecoveryDiagnostic[];\n\treadonly provenance: GitProvenance;\n\treadonly #store: DurableStateStore;\n\treadonly #attachments = new Map<string, Map<string, SessionLeaseRecord>>();\n\n\tconstructor(options: DurableStateDaemonOptions) {\n\t\tthis.#store = openDurableStateStore(options.databasePath);\n\t\tthis.provenance = readGitProvenance(options.cwd ?? process.cwd());\n\t\tthis.recoveryDiagnostics = this.#store.recoverUnfinishedCommandsWithDiagnostics(\n\t\t\t`daemon ${options.daemonId} started before command completion`,\n\t\t);\n\t}\n\n\tattach(input: AttachClientInput): SessionLeaseRecord {\n\t\tconst lease = this.#store.acquireLease({\n\t\t\tsessionId: input.sessionId,\n\t\t\townerId: input.clientId,\n\t\t\tmode: input.mode,\n\t\t\tttlMs: input.ttlMs,\n\t\t});\n\t\tconst clients = this.#attachments.get(input.sessionId) ?? new Map<string, SessionLeaseRecord>();\n\t\tclients.set(input.clientId, lease);\n\t\tthis.#attachments.set(input.sessionId, clients);\n\t\treturn lease;\n\t}\n\n\tdetach(sessionId: string, clientId: string): void {\n\t\tthis.#store.releaseLease(sessionId, clientId);\n\t\tconst clients = this.#attachments.get(sessionId);\n\t\tif (!clients) return;\n\t\tclients.delete(clientId);\n\t\tif (clients.size === 0) this.#attachments.delete(sessionId);\n\t}\n\n\tbeginMutation(input: MutationInput): CommandJournalRecord {\n\t\tthis.#requireExclusiveAttachment(input.sessionId, input.clientId);\n\t\treturn this.#store.beginCommand({ id: input.id, sessionId: input.sessionId, command: input.command });\n\t}\n\n\tasync runMutation<T>(input: MutationInput, operation: () => Promise<T>): Promise<T> {\n\t\tthis.#requireExclusiveAttachment(input.sessionId, input.clientId);\n\t\treturn this.#store.runCommand({ id: input.id, sessionId: input.sessionId, command: input.command }, operation);\n\t}\n\n\tgetCommand(id: string): CommandJournalRecord | undefined {\n\t\treturn this.#store.getCommand(id);\n\t}\n\tgetCommandCount(): number {\n\t\treturn this.#store.commandCount();\n\t}\n\tdispose(): void {\n\t\tthis.#store.close();\n\t}\n\n\t#requireExclusiveAttachment(sessionId: string, clientId: string): void {\n\t\tconst attachment = this.#attachments.get(sessionId)?.get(clientId);\n\t\tif (attachment?.mode !== \"exclusive\" || Date.parse(attachment.expiresAt) <= Date.now()) {\n\t\t\tthrow new Error(`Client does not hold an active exclusive lease for ${sessionId}`);\n\t\t}\n\t}\n}\n"]}
@@ -30,9 +30,9 @@ import type { BashOperations } from "../tools/bash.ts";
30
30
  import type { EditToolDetails } from "../tools/edit.ts";
31
31
  import type { BashToolDetails, BashToolInput, EditToolInput, FindToolDetails, FindToolInput, GrepToolDetails, GrepToolInput, LsToolDetails, LsToolInput, PowerShellToolDetails, PowerShellToolInput, ReadToolDetails, ReadToolInput, WriteToolInput } from "../tools/index.ts";
32
32
  export type { ExecOptions, ExecResult } from "../exec.ts";
33
+ export type { AppKeybinding, KeybindingsManager } from "../keybindings.ts";
33
34
  export type { BuildSystemPromptOptions } from "../system-prompt.ts";
34
35
  export type { AgentToolResult, AgentToolUpdateCallback, ToolExecutionMode };
35
- export type { AppKeybinding, KeybindingsManager } from "../keybindings.ts";
36
36
  /** Options for extension UI dialogs. */
37
37
  export interface ExtensionUIDialogOptions {
38
38
  /** AbortSignal to programmatically dismiss the dialog. */