@antelopejs/dms-ai 0.1.5 → 0.2.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 (564) hide show
  1. package/README.md +54 -11
  2. package/dist/channels/bridge.d.ts +6 -1
  3. package/dist/channels/bridge.js +29 -1
  4. package/dist/channels/bridge.js.map +1 -1
  5. package/dist/channels/channel-service.d.ts +2 -1
  6. package/dist/channels/channel-service.js +3 -2
  7. package/dist/channels/channel-service.js.map +1 -1
  8. package/dist/channels/sse-stream.d.ts +3 -2
  9. package/dist/config.d.ts +0 -2
  10. package/dist/config.js +0 -7
  11. package/dist/config.js.map +1 -1
  12. package/dist/constants/http.d.ts +9 -0
  13. package/dist/constants/http.js +14 -0
  14. package/dist/constants/http.js.map +1 -0
  15. package/dist/constants/i18n.d.ts +11 -0
  16. package/dist/constants/i18n.js +15 -0
  17. package/dist/constants/i18n.js.map +1 -0
  18. package/dist/constants/pages.d.ts +50 -0
  19. package/dist/constants/pages.js +58 -0
  20. package/dist/constants/pages.js.map +1 -0
  21. package/dist/constants/sidecar.d.ts +3 -1
  22. package/dist/constants/sidecar.js +4 -2
  23. package/dist/constants/sidecar.js.map +1 -1
  24. package/dist/index.js +0 -8
  25. package/dist/index.js.map +1 -1
  26. package/dist/lifecycle/sidecar-owner.d.ts +14 -0
  27. package/dist/lifecycle/sidecar-owner.js +102 -0
  28. package/dist/lifecycle/sidecar-owner.js.map +1 -0
  29. package/dist/lifecycle/spawn-sidecar.d.ts +1 -0
  30. package/dist/lifecycle/spawn-sidecar.js +59 -145
  31. package/dist/lifecycle/spawn-sidecar.js.map +1 -1
  32. package/dist/lifecycle/terminate-process.d.ts +1 -0
  33. package/dist/lifecycle/terminate-process.js +34 -0
  34. package/dist/lifecycle/terminate-process.js.map +1 -0
  35. package/dist/logging/log-buffer.d.ts +0 -6
  36. package/dist/logging/log-buffer.js +0 -1
  37. package/dist/logging/log-buffer.js.map +1 -1
  38. package/dist/pages/activity/columns.d.ts +2 -0
  39. package/dist/pages/activity/columns.js +103 -0
  40. package/dist/pages/activity/columns.js.map +1 -0
  41. package/dist/pages/activity/page.d.ts +1 -2
  42. package/dist/pages/activity/page.js +79 -44
  43. package/dist/pages/activity/page.js.map +1 -1
  44. package/dist/pages/all.d.ts +1 -0
  45. package/dist/pages/all.js +1 -0
  46. package/dist/pages/all.js.map +1 -1
  47. package/dist/pages/changes/page.d.ts +9 -0
  48. package/dist/pages/changes/page.js +22 -0
  49. package/dist/pages/changes/page.js.map +1 -0
  50. package/dist/pages/meta.d.ts +9 -0
  51. package/dist/pages/meta.js +31 -0
  52. package/dist/pages/meta.js.map +1 -0
  53. package/dist/pages/module.js +9 -5
  54. package/dist/pages/module.js.map +1 -1
  55. package/dist/pages/overview/insights.d.ts +3 -0
  56. package/dist/pages/overview/insights.js +77 -0
  57. package/dist/pages/overview/insights.js.map +1 -0
  58. package/dist/pages/overview/kpis.d.ts +2 -0
  59. package/dist/pages/overview/kpis.js +39 -0
  60. package/dist/pages/overview/kpis.js.map +1 -0
  61. package/dist/pages/overview/page.d.ts +6 -3
  62. package/dist/pages/overview/page.js +19 -62
  63. package/dist/pages/overview/page.js.map +1 -1
  64. package/dist/pages/overview/recent-changes.d.ts +2 -0
  65. package/dist/pages/overview/recent-changes.js +144 -0
  66. package/dist/pages/overview/recent-changes.js.map +1 -0
  67. package/dist/pages/overview/status.d.ts +3 -0
  68. package/dist/pages/overview/status.js +36 -0
  69. package/dist/pages/overview/status.js.map +1 -0
  70. package/dist/pages/settings/availability.d.ts +2 -0
  71. package/dist/pages/settings/availability.js +46 -0
  72. package/dist/pages/settings/availability.js.map +1 -0
  73. package/dist/pages/settings/options.d.ts +10 -0
  74. package/dist/pages/settings/options.js +58 -0
  75. package/dist/pages/settings/options.js.map +1 -0
  76. package/dist/pages/settings/page.d.ts +2 -1
  77. package/dist/pages/settings/page.js +39 -13
  78. package/dist/pages/settings/page.js.map +1 -1
  79. package/dist/pages/settings/sections.d.ts +2 -0
  80. package/dist/pages/settings/sections.js +164 -0
  81. package/dist/pages/settings/sections.js.map +1 -0
  82. package/dist/pages/skills/page.d.ts +2 -1
  83. package/dist/pages/skills/page.js +122 -12
  84. package/dist/pages/skills/page.js.map +1 -1
  85. package/dist/routes/activity-csv.d.ts +2 -0
  86. package/dist/routes/activity-csv.js +42 -0
  87. package/dist/routes/activity-csv.js.map +1 -0
  88. package/dist/routes/activity.d.ts +8 -0
  89. package/dist/routes/activity.js +105 -0
  90. package/dist/routes/activity.js.map +1 -0
  91. package/dist/routes/actor.d.ts +2 -0
  92. package/dist/routes/actor.js +8 -0
  93. package/dist/routes/actor.js.map +1 -0
  94. package/dist/routes/banner.d.ts +3 -0
  95. package/dist/routes/banner.js +9 -0
  96. package/dist/routes/banner.js.map +1 -0
  97. package/dist/routes/builder.js +1 -5
  98. package/dist/routes/builder.js.map +1 -1
  99. package/dist/routes/changes.d.ts +17 -0
  100. package/dist/routes/changes.js +152 -0
  101. package/dist/routes/changes.js.map +1 -0
  102. package/dist/routes/channels.js +2 -1
  103. package/dist/routes/channels.js.map +1 -1
  104. package/dist/routes/index.d.ts +3 -0
  105. package/dist/routes/index.js +3 -0
  106. package/dist/routes/index.js.map +1 -1
  107. package/dist/routes/list-query.d.ts +9 -0
  108. package/dist/routes/list-query.js +34 -0
  109. package/dist/routes/list-query.js.map +1 -0
  110. package/dist/routes/metric-shapes.d.ts +8 -0
  111. package/dist/routes/metric-shapes.js +107 -0
  112. package/dist/routes/metric-shapes.js.map +1 -0
  113. package/dist/routes/metrics.d.ts +5 -48
  114. package/dist/routes/metrics.js +52 -42
  115. package/dist/routes/metrics.js.map +1 -1
  116. package/dist/routes/settings.d.ts +3 -16
  117. package/dist/routes/settings.js +40 -14
  118. package/dist/routes/settings.js.map +1 -1
  119. package/dist/routes/sidecar-results.d.ts +6 -0
  120. package/dist/routes/sidecar-results.js +44 -0
  121. package/dist/routes/sidecar-results.js.map +1 -0
  122. package/dist/routes/skills.d.ts +4 -14
  123. package/dist/routes/skills.js +91 -6
  124. package/dist/routes/skills.js.map +1 -1
  125. package/dist/routes/status-shapes.d.ts +5 -0
  126. package/dist/routes/status-shapes.js +176 -0
  127. package/dist/routes/status-shapes.js.map +1 -0
  128. package/dist/routes/status.d.ts +9 -0
  129. package/dist/routes/status.js +92 -0
  130. package/dist/routes/status.js.map +1 -0
  131. package/dist/routes/undo-confirm.d.ts +3 -0
  132. package/dist/routes/undo-confirm.js +51 -0
  133. package/dist/routes/undo-confirm.js.map +1 -0
  134. package/dist/sidecar/http-client.d.ts +11 -0
  135. package/dist/sidecar/http-client.js +59 -0
  136. package/dist/sidecar/http-client.js.map +1 -0
  137. package/dist/sidecar/index.d.ts +2 -0
  138. package/dist/sidecar/index.js +19 -0
  139. package/dist/sidecar/index.js.map +1 -0
  140. package/dist/sidecar/query.d.ts +3 -0
  141. package/dist/sidecar/query.js +25 -0
  142. package/dist/sidecar/query.js.map +1 -0
  143. package/dist/types/activity.d.ts +31 -0
  144. package/dist/types/activity.js +3 -0
  145. package/dist/types/activity.js.map +1 -0
  146. package/dist/types/changes.d.ts +45 -0
  147. package/dist/types/changes.js +3 -0
  148. package/dist/types/changes.js.map +1 -0
  149. package/dist/types/index.d.ts +5 -0
  150. package/dist/types/index.js +5 -0
  151. package/dist/types/index.js.map +1 -1
  152. package/dist/types/metrics.d.ts +76 -0
  153. package/dist/types/metrics.js +3 -0
  154. package/dist/types/metrics.js.map +1 -0
  155. package/dist/types/skills.d.ts +51 -0
  156. package/dist/types/skills.js +3 -0
  157. package/dist/types/skills.js.map +1 -0
  158. package/dist/types/status.d.ts +16 -0
  159. package/dist/types/status.js +3 -0
  160. package/dist/types/status.js.map +1 -0
  161. package/dist/vocabulary/enumerations.d.ts +9 -0
  162. package/dist/vocabulary/enumerations.js +52 -0
  163. package/dist/vocabulary/enumerations.js.map +1 -0
  164. package/dist/vocabulary/index.d.ts +5 -0
  165. package/dist/vocabulary/index.js +22 -0
  166. package/dist/vocabulary/index.js.map +1 -0
  167. package/dist/vocabulary/keys.d.ts +1 -0
  168. package/dist/vocabulary/keys.js +8 -0
  169. package/dist/vocabulary/keys.js.map +1 -0
  170. package/dist/vocabulary/options.d.ts +7 -0
  171. package/dist/vocabulary/options.js +33 -0
  172. package/dist/vocabulary/options.js.map +1 -0
  173. package/dist/vocabulary/tools.d.ts +7 -0
  174. package/dist/vocabulary/tools.js +99 -0
  175. package/dist/vocabulary/tools.js.map +1 -0
  176. package/dist/vocabulary/types.d.ts +20 -0
  177. package/dist/vocabulary/types.js +3 -0
  178. package/dist/vocabulary/types.js.map +1 -0
  179. package/frontend-vue/app/chat/components/AnswerRecord.vue +95 -0
  180. package/frontend-vue/app/chat/components/ApprovalDock.vue +371 -0
  181. package/frontend-vue/app/chat/components/ChangeSetCard.vue +297 -0
  182. package/frontend-vue/app/chat/components/ChatEmpty.vue +142 -0
  183. package/frontend-vue/app/chat/components/ChatView.vue +664 -406
  184. package/frontend-vue/app/chat/components/Composer.vue +589 -0
  185. package/frontend-vue/app/chat/components/ConnectionBanner.vue +41 -65
  186. package/frontend-vue/app/chat/components/ConversationDrawer.vue +387 -177
  187. package/frontend-vue/app/chat/components/DiffView.vue +131 -0
  188. package/frontend-vue/app/chat/components/FullAutoBanner.vue +76 -0
  189. package/frontend-vue/app/chat/components/FullAutoDialog.vue +103 -0
  190. package/frontend-vue/app/chat/components/MarkdownContent.vue +15 -15
  191. package/frontend-vue/app/chat/components/MessageList.vue +389 -295
  192. package/frontend-vue/app/chat/components/NoticeCard.vue +193 -0
  193. package/frontend-vue/app/chat/components/PanelHeader.vue +242 -0
  194. package/frontend-vue/app/chat/components/PermissionCard.vue +470 -0
  195. package/frontend-vue/app/chat/components/PlanCard.vue +115 -0
  196. package/frontend-vue/app/chat/components/QuestionDock.vue +407 -0
  197. package/frontend-vue/app/chat/components/QueueDock.vue +310 -0
  198. package/frontend-vue/app/chat/components/RulesList.vue +97 -0
  199. package/frontend-vue/app/chat/components/StepsDock.vue +181 -0
  200. package/frontend-vue/app/chat/components/ToolCluster.vue +186 -178
  201. package/frontend-vue/app/chat/components/ToolRow.vue +251 -0
  202. package/frontend-vue/app/chat/components/TurnErrorCard.vue +135 -0
  203. package/frontend-vue/app/chat/composables/conversation-events.ts +404 -0
  204. package/frontend-vue/app/chat/composables/useChangeSetActions.ts +135 -0
  205. package/frontend-vue/app/chat/composables/useChatChannel.ts +11 -3
  206. package/frontend-vue/app/chat/composables/useChatI18n.ts +35 -0
  207. package/frontend-vue/app/chat/composables/useComposerAttachments.ts +111 -0
  208. package/frontend-vue/app/chat/composables/useConversation.ts +149 -651
  209. package/frontend-vue/app/chat/composables/useConversationId.ts +2 -10
  210. package/frontend-vue/app/chat/composables/useConversationList.ts +77 -21
  211. package/frontend-vue/app/chat/composables/useConversationMode.ts +73 -0
  212. package/frontend-vue/app/chat/composables/usePaletteTurn.ts +124 -0
  213. package/frontend-vue/app/chat/composables/usePermissionQueue.ts +211 -34
  214. package/frontend-vue/app/chat/composables/useQuestionQueue.ts +103 -21
  215. package/frontend-vue/app/chat/composables/useQueueActions.ts +55 -0
  216. package/frontend-vue/app/chat/composables/useSettings.ts +17 -34
  217. package/frontend-vue/app/chat/constants/attachments.ts +2 -1
  218. package/frontend-vue/app/chat/constants/conversation.ts +18 -32
  219. package/frontend-vue/app/chat/constants/protocol.ts +25 -2
  220. package/frontend-vue/app/chat/constants/run-status.ts +8 -14
  221. package/frontend-vue/app/chat/constants/settings.ts +5 -47
  222. package/frontend-vue/app/chat/types/conversation.ts +72 -2
  223. package/frontend-vue/app/chat/types/permission.ts +31 -0
  224. package/frontend-vue/app/chat/types/protocol.ts +226 -0
  225. package/frontend-vue/app/chat/types/question.ts +10 -1
  226. package/frontend-vue/app/chat/types/settings.ts +9 -5
  227. package/frontend-vue/app/chat/utils/approval-keyboard.ts +49 -0
  228. package/frontend-vue/app/chat/utils/arrays.ts +10 -0
  229. package/frontend-vue/app/chat/utils/conversation-groups.ts +96 -0
  230. package/frontend-vue/app/chat/utils/conversation-messages.ts +251 -0
  231. package/frontend-vue/app/chat/utils/diff.ts +78 -0
  232. package/frontend-vue/app/chat/utils/format.ts +43 -0
  233. package/frontend-vue/app/chat/utils/markdown.ts +1 -1
  234. package/frontend-vue/app/chat/utils/permission-view.ts +159 -0
  235. package/frontend-vue/app/chat/utils/platform.ts +34 -0
  236. package/frontend-vue/app/chat/utils/queue.ts +18 -0
  237. package/frontend-vue/app/chat/utils/render-items.ts +164 -0
  238. package/frontend-vue/app/chat/utils/run-status.ts +19 -23
  239. package/frontend-vue/app/chat/utils/suggestions.ts +101 -0
  240. package/frontend-vue/app/chat/utils/todos.ts +2 -2
  241. package/frontend-vue/app/chat/utils/tool-lexicon.ts +540 -0
  242. package/frontend-vue/app/chat/utils/tool-state.ts +60 -0
  243. package/frontend-vue/app/components/ActivityDetail.vue +235 -0
  244. package/frontend-vue/app/components/ChangesView.vue +249 -0
  245. package/frontend-vue/app/components/ChatPanel.vue +141 -196
  246. package/frontend-vue/app/components/PaletteAnswer.vue +185 -0
  247. package/frontend-vue/app/components/SkillCard.vue +77 -0
  248. package/frontend-vue/app/components/SkillDetail.vue +188 -0
  249. package/frontend-vue/app/plugins/ai.client.ts +349 -57
  250. package/frontend-vue/app/plugins/side-panel.ts +13 -0
  251. package/frontend-vue/app/runtime/assistant-activity.ts +105 -0
  252. package/frontend-vue/app/runtime/assistant-commands.ts +210 -0
  253. package/frontend-vue/app/runtime/assistant-notifications.ts +181 -0
  254. package/frontend-vue/app/runtime/assistant-session.ts +49 -6
  255. package/frontend-vue/app/runtime/channel-client.ts +3 -6
  256. package/frontend-vue/app/runtime/constants.ts +29 -35
  257. package/frontend-vue/app/runtime/host-commands.ts +4 -4
  258. package/frontend-vue/app/runtime/listeners.ts +1 -1
  259. package/frontend-vue/app/runtime/navigation-complete.ts +1 -1
  260. package/frontend-vue/app/runtime/panel-intents.ts +55 -0
  261. package/frontend-vue/app/runtime/shortcuts.ts +3 -1
  262. package/frontend-vue/app/runtime/sidecar-status.ts +9 -1
  263. package/frontend-vue/app/runtime/stream-holds.ts +24 -0
  264. package/frontend-vue/app/views/ChangeSetPanel.vue +222 -0
  265. package/frontend-vue/app/views/DecisionLabel.vue +30 -0
  266. package/frontend-vue/app/views/DiffView.vue +215 -0
  267. package/frontend-vue/app/views/ResultPill.vue +32 -0
  268. package/frontend-vue/app/views/RowStepper.vue +48 -0
  269. package/frontend-vue/app/views/UnavailableState.vue +66 -0
  270. package/frontend-vue/app/views/composables/useAiRequest.ts +89 -0
  271. package/frontend-vue/app/views/composables/useAssistant.ts +33 -0
  272. package/frontend-vue/app/views/composables/useChangeSetActions.ts +102 -0
  273. package/frontend-vue/app/views/composables/useViewFormat.ts +55 -0
  274. package/frontend-vue/app/views/constants.ts +43 -0
  275. package/frontend-vue/app/views/types.ts +189 -0
  276. package/frontend-vue/app/views/utils/activity.ts +77 -0
  277. package/frontend-vue/app/views/utils/change-sets.ts +44 -0
  278. package/frontend-vue/app/views/utils/diff.ts +98 -0
  279. package/frontend-vue/app/views/utils/moment.ts +92 -0
  280. package/frontend-vue/app/views/utils/skills.ts +27 -0
  281. package/frontend-vue/app/views/utils/tools.ts +73 -0
  282. package/frontend-vue/dms.frontend.ts +17 -5
  283. package/frontend-vue/i18n/locales/dms-ai-pages-en-GB.json +607 -0
  284. package/frontend-vue/i18n/locales/dms-ai-pages-fr-FR.json +607 -0
  285. package/frontend-vue/i18n/locales/dms-ai-panel-en-GB.json +425 -0
  286. package/frontend-vue/i18n/locales/dms-ai-panel-fr-FR.json +425 -0
  287. package/frontend-vue/i18n/locales/dms-ai-views-en-GB.json +142 -0
  288. package/frontend-vue/i18n/locales/dms-ai-views-fr-FR.json +142 -0
  289. package/frontend-vue/package.json +1 -1
  290. package/frontend-vue/tests/chat/conversation-events.test.ts +590 -0
  291. package/frontend-vue/tests/chat/diff-and-keys.test.ts +178 -0
  292. package/frontend-vue/tests/chat/tool-lexicon.test.ts +188 -0
  293. package/frontend-vue/tests/chat/useConversation.test.ts +36 -33
  294. package/frontend-vue/tests/chat-panel.test.ts +78 -131
  295. package/frontend-vue/tests/i18n-panel.test.ts +118 -0
  296. package/frontend-vue/tests/palette-assistant.test.ts +220 -0
  297. package/frontend-vue/tests/panel-states.test.ts +806 -0
  298. package/frontend-vue/tests/sidecar-guest.test.ts +35 -3
  299. package/frontend-vue/tests/support/i18n.ts +49 -0
  300. package/frontend-vue/tests/support/panel-harness.ts +198 -0
  301. package/frontend-vue/tests/support/stubs.ts +201 -0
  302. package/frontend-vue/tests/views/diff-view.test.ts +149 -0
  303. package/frontend-vue/tests/views/view-format.test.ts +59 -0
  304. package/package.json +5 -3
  305. package/sidecar/dist/agent/attachment-files.d.ts +0 -1
  306. package/sidecar/dist/agent/attachment-files.js +1 -1
  307. package/sidecar/dist/agent/attachment-files.js.map +1 -1
  308. package/sidecar/dist/agent/call-ledger.d.ts +6 -0
  309. package/sidecar/dist/agent/call-ledger.js +41 -0
  310. package/sidecar/dist/agent/call-ledger.js.map +1 -0
  311. package/sidecar/dist/agent/command-analysis.d.ts +9 -0
  312. package/sidecar/dist/agent/command-analysis.js +104 -0
  313. package/sidecar/dist/agent/command-analysis.js.map +1 -0
  314. package/sidecar/dist/agent/conversation-modes.d.ts +32 -0
  315. package/sidecar/dist/agent/conversation-modes.js +122 -0
  316. package/sidecar/dist/agent/conversation-modes.js.map +1 -0
  317. package/sidecar/dist/agent/edit-targets.d.ts +5 -0
  318. package/sidecar/dist/agent/edit-targets.js +41 -0
  319. package/sidecar/dist/agent/edit-targets.js.map +1 -0
  320. package/sidecar/dist/agent/effective-mode.d.ts +9 -2
  321. package/sidecar/dist/agent/effective-mode.js +14 -16
  322. package/sidecar/dist/agent/effective-mode.js.map +1 -1
  323. package/sidecar/dist/agent/host-context.js +2 -2
  324. package/sidecar/dist/agent/host-context.js.map +1 -1
  325. package/sidecar/dist/agent/line-diff.d.ts +8 -0
  326. package/sidecar/dist/agent/line-diff.js +204 -0
  327. package/sidecar/dist/agent/line-diff.js.map +1 -0
  328. package/sidecar/dist/agent/permission-bus.d.ts +55 -10
  329. package/sidecar/dist/agent/permission-bus.js +130 -100
  330. package/sidecar/dist/agent/permission-bus.js.map +1 -1
  331. package/sidecar/dist/agent/permission-preview.d.ts +20 -0
  332. package/sidecar/dist/agent/permission-preview.js +203 -0
  333. package/sidecar/dist/agent/permission-preview.js.map +1 -0
  334. package/sidecar/dist/agent/permission-rules.d.ts +17 -0
  335. package/sidecar/dist/agent/permission-rules.js +95 -0
  336. package/sidecar/dist/agent/permission-rules.js.map +1 -0
  337. package/sidecar/dist/agent/provider.d.ts +12 -4
  338. package/sidecar/dist/agent/question-bus.d.ts +14 -2
  339. package/sidecar/dist/agent/question-bus.js +30 -11
  340. package/sidecar/dist/agent/question-bus.js.map +1 -1
  341. package/sidecar/dist/agent/runner-events.d.ts +3 -1
  342. package/sidecar/dist/agent/runner.d.ts +6 -4
  343. package/sidecar/dist/agent/runner.js +24 -7
  344. package/sidecar/dist/agent/runner.js.map +1 -1
  345. package/sidecar/dist/agent/switching-runner.js +1 -0
  346. package/sidecar/dist/agent/switching-runner.js.map +1 -1
  347. package/sidecar/dist/agent/tool-kinds.d.ts +12 -0
  348. package/sidecar/dist/agent/tool-kinds.js +50 -0
  349. package/sidecar/dist/agent/tool-kinds.js.map +1 -0
  350. package/sidecar/dist/agent/typecheck.d.ts +2 -6
  351. package/sidecar/dist/audit/activity-query.d.ts +37 -0
  352. package/sidecar/dist/audit/activity-query.js +111 -0
  353. package/sidecar/dist/audit/activity-query.js.map +1 -0
  354. package/sidecar/dist/audit/activity-target.d.ts +2 -0
  355. package/sidecar/dist/audit/activity-target.js +46 -0
  356. package/sidecar/dist/audit/activity-target.js.map +1 -0
  357. package/sidecar/dist/audit/activity.d.ts +45 -0
  358. package/sidecar/dist/audit/activity.js +255 -0
  359. package/sidecar/dist/audit/activity.js.map +1 -0
  360. package/sidecar/dist/audit/call-audit.d.ts +11 -0
  361. package/sidecar/dist/audit/call-audit.js +23 -0
  362. package/sidecar/dist/audit/call-audit.js.map +1 -0
  363. package/sidecar/dist/checkpoints/checkpoints.d.ts +69 -0
  364. package/sidecar/dist/checkpoints/checkpoints.js +244 -0
  365. package/sidecar/dist/checkpoints/checkpoints.js.map +1 -0
  366. package/sidecar/dist/checkpoints/shadow-git.d.ts +23 -0
  367. package/sidecar/dist/checkpoints/shadow-git.js +173 -0
  368. package/sidecar/dist/checkpoints/shadow-git.js.map +1 -0
  369. package/sidecar/dist/constants/agent.d.ts +2 -0
  370. package/sidecar/dist/constants/agent.js +4 -0
  371. package/sidecar/dist/constants/agent.js.map +1 -1
  372. package/sidecar/dist/constants/audit.d.ts +22 -0
  373. package/sidecar/dist/constants/audit.js +49 -0
  374. package/sidecar/dist/constants/audit.js.map +1 -0
  375. package/sidecar/dist/constants/builder.d.ts +3 -0
  376. package/sidecar/dist/constants/builder.js +2 -0
  377. package/sidecar/dist/constants/builder.js.map +1 -1
  378. package/sidecar/dist/constants/checkpoints.d.ts +15 -0
  379. package/sidecar/dist/constants/checkpoints.js +26 -0
  380. package/sidecar/dist/constants/checkpoints.js.map +1 -0
  381. package/sidecar/dist/constants/claude.d.ts +1 -0
  382. package/sidecar/dist/constants/claude.js +1 -0
  383. package/sidecar/dist/constants/claude.js.map +1 -1
  384. package/sidecar/dist/constants/codex.d.ts +2 -4
  385. package/sidecar/dist/constants/codex.js +2 -4
  386. package/sidecar/dist/constants/codex.js.map +1 -1
  387. package/sidecar/dist/constants/http.d.ts +1 -0
  388. package/sidecar/dist/constants/http.js +1 -0
  389. package/sidecar/dist/constants/http.js.map +1 -1
  390. package/sidecar/dist/constants/mcp.d.ts +3 -0
  391. package/sidecar/dist/constants/mcp.js +9 -0
  392. package/sidecar/dist/constants/mcp.js.map +1 -1
  393. package/sidecar/dist/constants/permissions.d.ts +9 -3
  394. package/sidecar/dist/constants/permissions.js +9 -2
  395. package/sidecar/dist/constants/permissions.js.map +1 -1
  396. package/sidecar/dist/constants/settings.d.ts +2 -1
  397. package/sidecar/dist/constants/settings.js +7 -1
  398. package/sidecar/dist/constants/settings.js.map +1 -1
  399. package/sidecar/dist/constants/tool-kinds.d.ts +14 -0
  400. package/sidecar/dist/constants/tool-kinds.js +65 -0
  401. package/sidecar/dist/constants/tool-kinds.js.map +1 -0
  402. package/sidecar/dist/index.d.ts +4 -0
  403. package/sidecar/dist/index.js +35 -5
  404. package/sidecar/dist/index.js.map +1 -1
  405. package/sidecar/dist/mcp/define-tool.d.ts +3 -2
  406. package/sidecar/dist/mcp/tool-definitions.js +4 -1
  407. package/sidecar/dist/mcp/tool-definitions.js.map +1 -1
  408. package/sidecar/dist/mcp/tools/ask-user.d.ts +2 -2
  409. package/sidecar/dist/mcp/tools/ask-user.js +7 -4
  410. package/sidecar/dist/mcp/tools/ask-user.js.map +1 -1
  411. package/sidecar/dist/mcp/tools/builder-catalog.d.ts +3 -0
  412. package/sidecar/dist/mcp/tools/builder-catalog.js +86 -0
  413. package/sidecar/dist/mcp/tools/builder-catalog.js.map +1 -0
  414. package/sidecar/dist/mcp/tools/builder-gate.d.ts +8 -0
  415. package/sidecar/dist/mcp/tools/builder-gate.js +22 -0
  416. package/sidecar/dist/mcp/tools/builder-gate.js.map +1 -0
  417. package/sidecar/dist/mcp/tools/builder.d.ts +7 -2
  418. package/sidecar/dist/mcp/tools/builder.js +48 -7
  419. package/sidecar/dist/mcp/tools/builder.js.map +1 -1
  420. package/sidecar/dist/mcp/types.d.ts +2 -0
  421. package/sidecar/dist/metrics/aggregate.d.ts +13 -10
  422. package/sidecar/dist/metrics/aggregate.js +140 -143
  423. package/sidecar/dist/metrics/aggregate.js.map +1 -1
  424. package/sidecar/dist/metrics/types.d.ts +36 -23
  425. package/sidecar/dist/metrics/types.js +3 -1
  426. package/sidecar/dist/metrics/types.js.map +1 -1
  427. package/sidecar/dist/pages/imports-scanner.d.ts +1 -1
  428. package/sidecar/dist/pages/imports-scanner.js +2 -5
  429. package/sidecar/dist/pages/imports-scanner.js.map +1 -1
  430. package/sidecar/dist/prompts/agent.d.ts +1 -3
  431. package/sidecar/dist/prompts/agent.js +4 -4
  432. package/sidecar/dist/prompts/agent.js.map +1 -1
  433. package/sidecar/dist/prompts/builder.d.ts +2 -2
  434. package/sidecar/dist/prompts/builder.js +2 -2
  435. package/sidecar/dist/protocol/events.d.ts +1084 -18
  436. package/sidecar/dist/protocol/events.js +239 -5
  437. package/sidecar/dist/protocol/events.js.map +1 -1
  438. package/sidecar/dist/protocol/messages.d.ts +273 -19
  439. package/sidecar/dist/protocol/messages.js +107 -7
  440. package/sidecar/dist/protocol/messages.js.map +1 -1
  441. package/sidecar/dist/providers/claude/config.d.ts +3 -2
  442. package/sidecar/dist/providers/claude/config.js +10 -4
  443. package/sidecar/dist/providers/claude/config.js.map +1 -1
  444. package/sidecar/dist/providers/claude/provider.d.ts +2 -8
  445. package/sidecar/dist/providers/claude/provider.js +37 -35
  446. package/sidecar/dist/providers/claude/provider.js.map +1 -1
  447. package/sidecar/dist/providers/claude/safe-mode.d.ts +6 -1
  448. package/sidecar/dist/providers/claude/safe-mode.js +13 -5
  449. package/sidecar/dist/providers/claude/safe-mode.js.map +1 -1
  450. package/sidecar/dist/providers/codex/adapter.d.ts +6 -0
  451. package/sidecar/dist/providers/codex/adapter.js +14 -4
  452. package/sidecar/dist/providers/codex/adapter.js.map +1 -1
  453. package/sidecar/dist/providers/codex/client.d.ts +0 -11
  454. package/sidecar/dist/providers/codex/config.d.ts +1 -3
  455. package/sidecar/dist/providers/codex/config.js +5 -11
  456. package/sidecar/dist/providers/codex/config.js.map +1 -1
  457. package/sidecar/dist/providers/codex/permissions.d.ts +7 -4
  458. package/sidecar/dist/providers/codex/permissions.js +32 -16
  459. package/sidecar/dist/providers/codex/permissions.js.map +1 -1
  460. package/sidecar/dist/providers/codex/process.js +1 -5
  461. package/sidecar/dist/providers/codex/process.js.map +1 -1
  462. package/sidecar/dist/providers/codex/provider.js +14 -3
  463. package/sidecar/dist/providers/codex/provider.js.map +1 -1
  464. package/sidecar/dist/providers/codex/skills.d.ts +0 -1
  465. package/sidecar/dist/providers/codex/skills.js +1 -1
  466. package/sidecar/dist/providers/codex/skills.js.map +1 -1
  467. package/sidecar/dist/providers/codex/stop.js +1 -10
  468. package/sidecar/dist/providers/codex/stop.js.map +1 -1
  469. package/sidecar/dist/server/change-set-actions.d.ts +10 -0
  470. package/sidecar/dist/server/change-set-actions.js +14 -0
  471. package/sidecar/dist/server/change-set-actions.js.map +1 -0
  472. package/sidecar/dist/server/chat-events.d.ts +15 -0
  473. package/sidecar/dist/server/chat-events.js +115 -0
  474. package/sidecar/dist/server/chat-events.js.map +1 -0
  475. package/sidecar/dist/server/chat-socket-registry.d.ts +2 -0
  476. package/sidecar/dist/server/chat-socket-registry.js +48 -37
  477. package/sidecar/dist/server/chat-socket-registry.js.map +1 -1
  478. package/sidecar/dist/server/conversation-runs.d.ts +13 -0
  479. package/sidecar/dist/server/conversation-runs.js +114 -0
  480. package/sidecar/dist/server/conversation-runs.js.map +1 -0
  481. package/sidecar/dist/server/http-io.d.ts +4 -0
  482. package/sidecar/dist/server/http-io.js +31 -0
  483. package/sidecar/dist/server/http-io.js.map +1 -0
  484. package/sidecar/dist/server/http-params.d.ts +9 -0
  485. package/sidecar/dist/server/http-params.js +79 -0
  486. package/sidecar/dist/server/http-params.js.map +1 -0
  487. package/sidecar/dist/server/http-routes.d.ts +27 -0
  488. package/sidecar/dist/server/http-routes.js +281 -0
  489. package/sidecar/dist/server/http-routes.js.map +1 -0
  490. package/sidecar/dist/server/http.d.ts +6 -1
  491. package/sidecar/dist/server/http.js +76 -164
  492. package/sidecar/dist/server/http.js.map +1 -1
  493. package/sidecar/dist/server/pending-queue.d.ts +2 -0
  494. package/sidecar/dist/server/pending-queue.js +16 -0
  495. package/sidecar/dist/server/pending-queue.js.map +1 -1
  496. package/sidecar/dist/server/permission-events.d.ts +15 -0
  497. package/sidecar/dist/server/permission-events.js +163 -0
  498. package/sidecar/dist/server/permission-events.js.map +1 -0
  499. package/sidecar/dist/server/routing.d.ts +4 -52
  500. package/sidecar/dist/server/routing.js +190 -501
  501. package/sidecar/dist/server/routing.js.map +1 -1
  502. package/sidecar/dist/server/safety-net.d.ts +7 -0
  503. package/sidecar/dist/server/safety-net.js +34 -6
  504. package/sidecar/dist/server/safety-net.js.map +1 -1
  505. package/sidecar/dist/server/services.d.ts +55 -0
  506. package/sidecar/dist/server/services.js +2 -0
  507. package/sidecar/dist/server/services.js.map +1 -0
  508. package/sidecar/dist/server/tool-calls.d.ts +6 -0
  509. package/sidecar/dist/server/tool-calls.js +134 -0
  510. package/sidecar/dist/server/tool-calls.js.map +1 -0
  511. package/sidecar/dist/server/turn-registry.d.ts +44 -0
  512. package/sidecar/dist/server/turn-registry.js +40 -0
  513. package/sidecar/dist/server/turn-registry.js.map +1 -0
  514. package/sidecar/dist/server/turns.d.ts +17 -0
  515. package/sidecar/dist/server/turns.js +335 -0
  516. package/sidecar/dist/server/turns.js.map +1 -0
  517. package/sidecar/dist/server/ws.d.ts +4 -1
  518. package/sidecar/dist/server/ws.js +102 -62
  519. package/sidecar/dist/server/ws.js.map +1 -1
  520. package/sidecar/dist/skills/build-catalog.d.ts +1 -0
  521. package/sidecar/dist/skills/build-catalog.js +14 -1
  522. package/sidecar/dist/skills/build-catalog.js.map +1 -1
  523. package/sidecar/dist/skills/skill-usage.d.ts +22 -0
  524. package/sidecar/dist/skills/skill-usage.js +97 -0
  525. package/sidecar/dist/skills/skill-usage.js.map +1 -0
  526. package/sidecar/dist/state/change-sets.d.ts +12 -0
  527. package/sidecar/dist/state/change-sets.js +77 -0
  528. package/sidecar/dist/state/change-sets.js.map +1 -0
  529. package/sidecar/dist/state/conversations.d.ts +19 -7
  530. package/sidecar/dist/state/conversations.js +61 -20
  531. package/sidecar/dist/state/conversations.js.map +1 -1
  532. package/sidecar/dist/state/host-state.d.ts +2 -1
  533. package/sidecar/dist/state/settings-store.d.ts +1 -0
  534. package/sidecar/dist/state/settings-store.js +27 -26
  535. package/sidecar/dist/state/settings-store.js.map +1 -1
  536. package/sidecar/dist/state/settings-types.d.ts +11 -1
  537. package/sidecar/dist/state/settings-types.js +3 -1
  538. package/sidecar/dist/state/settings-types.js.map +1 -1
  539. package/sidecar/dist/state/types.d.ts +114 -8
  540. package/sidecar/dist/state/types.js +6 -3
  541. package/sidecar/dist/state/types.js.map +1 -1
  542. package/skills/dms-builder-safe/REFERENCE.md +1 -1
  543. package/skills/dms-builder-safe/SKILL.md +12 -7
  544. package/dist/routes/proxy.d.ts +0 -4
  545. package/dist/routes/proxy.js +0 -55
  546. package/dist/routes/proxy.js.map +0 -1
  547. package/frontend-vue/app/chat/components/ComposerInput.vue +0 -742
  548. package/frontend-vue/app/chat/components/PermissionRequests.vue +0 -323
  549. package/frontend-vue/app/chat/components/QuestionPrompt.vue +0 -275
  550. package/frontend-vue/app/chat/components/QueuedMessages.vue +0 -109
  551. package/frontend-vue/app/chat/components/TodoList.vue +0 -291
  552. package/frontend-vue/app/chat/components/ToolCallEntry.vue +0 -218
  553. package/frontend-vue/app/chat/constants/connection-banner.ts +0 -7
  554. package/frontend-vue/app/chat/constants/conversation-drawer.ts +0 -13
  555. package/frontend-vue/app/chat/constants/permissions.ts +0 -50
  556. package/frontend-vue/app/chat/utils/tool-summary.ts +0 -53
  557. package/frontend-vue/app/components/ActivityView.vue +0 -94
  558. package/frontend-vue/app/components/SettingsView.vue +0 -387
  559. package/frontend-vue/app/components/SkillsView.vue +0 -230
  560. package/frontend-vue/app/runtime/header-action.ts +0 -64
  561. package/frontend-vue/app/runtime/overlay-prefs.ts +0 -89
  562. package/frontend-vue/app/runtime/panel-state.ts +0 -88
  563. package/frontend-vue/tests/overlay-prefs.test.ts +0 -91
  564. package/frontend-vue/tests/panel-state.test.ts +0 -58
@@ -0,0 +1,255 @@
1
+ import { bareToolName, isEditTool, isMutatingBuilderTool, isReadOnlyTool, permissionKindOf, } from "../agent/tool-kinds.js";
2
+ import { DEFAULT_PROVIDER_NAME, } from "../state/types.js";
3
+ import { activityTarget, parseArgs } from "./activity-target.js";
4
+ export const UNDO_TOOL_NAME = "UndoChangeSet";
5
+ export const REDO_TOOL_NAME = "RedoChangeSet";
6
+ const STATE_CHANGE_TOOL = {
7
+ undone: UNDO_TOOL_NAME,
8
+ applied: REDO_TOOL_NAME,
9
+ };
10
+ const RESULT_BY_ALLOWED = {
11
+ denied: "denied",
12
+ blocked: "blocked",
13
+ expired: "expired",
14
+ };
15
+ const DETAIL_BY_RESULT = {
16
+ blocked: "Blocked by safe mode",
17
+ expired: "Request expired",
18
+ };
19
+ const DENIED_RESULTS = [
20
+ "denied",
21
+ "blocked",
22
+ "expired",
23
+ ];
24
+ function indexConversation(entry, changeSets) {
25
+ const results = new Map();
26
+ const permissions = new Map();
27
+ for (const message of entry.conversation.messages) {
28
+ if (message.callId === undefined)
29
+ continue;
30
+ if (message.role === "tool_result")
31
+ results.set(message.callId, message);
32
+ if (message.role === "permission")
33
+ permissions.set(message.callId, message);
34
+ }
35
+ const ownSets = changeSets.filter((c) => c.conversationId === entry.id);
36
+ return {
37
+ results,
38
+ permissions,
39
+ changeSets: new Map(ownSets.map((c) => [c.id, c])),
40
+ };
41
+ }
42
+ function undecidedAllowedBy(toolName) {
43
+ if (isReadOnlyTool(toolName))
44
+ return "read_auto";
45
+ return isMutatingBuilderTool(toolName) ? "builder_auto" : "approved";
46
+ }
47
+ function resultOf(result, allowedBy, isRunning) {
48
+ const decided = RESULT_BY_ALLOWED[allowedBy];
49
+ if (decided !== undefined && result?.outcome !== "stopped")
50
+ return decided;
51
+ if (result === undefined)
52
+ return isRunning ? "pending" : "stopped";
53
+ if (result.outcome !== undefined)
54
+ return result.outcome;
55
+ return result.status === "error" ? "failed" : "done";
56
+ }
57
+ function isChange(record) {
58
+ if (record.result !== "done")
59
+ return false;
60
+ if (record.changeSetId !== undefined)
61
+ return true;
62
+ return isEditTool(record.tool) || isMutatingBuilderTool(record.tool);
63
+ }
64
+ function categoriesOf(record) {
65
+ const categories = [];
66
+ if (isChange(record))
67
+ categories.push("changed");
68
+ if (record.isAsked)
69
+ categories.push("asked");
70
+ if (DENIED_RESULTS.includes(record.result))
71
+ categories.push("denied");
72
+ if (record.result === "failed")
73
+ categories.push("failed");
74
+ return categories;
75
+ }
76
+ function lineCounts(record, changeSet) {
77
+ const file = changeSet?.files.find((f) => record.target.endsWith(f.path));
78
+ if (file === undefined)
79
+ return {};
80
+ return { added: file.added, removed: file.removed };
81
+ }
82
+ function finish(record, changeSet) {
83
+ const withCounts = { ...record, ...lineCounts(record, changeSet) };
84
+ const detail = record.resultDetail ?? DETAIL_BY_RESULT[record.result];
85
+ return {
86
+ ...withCounts,
87
+ resultDetail: detail,
88
+ category: categoriesOf(withCounts),
89
+ };
90
+ }
91
+ function callRecord(input, use) {
92
+ const { entry, index } = input;
93
+ const callId = use.callId ?? String(use.timestampMs);
94
+ const toolName = use.toolName ?? "";
95
+ const result = index.results.get(callId);
96
+ const permission = index.permissions.get(callId);
97
+ const allowedBy = result?.allowedBy ??
98
+ use.allowedBy ??
99
+ permission?.allowedBy ??
100
+ undecidedAllowedBy(toolName);
101
+ const changeSetId = result?.changeSetId ?? use.changeSetId;
102
+ const changeSet = changeSetId === undefined ? undefined : index.changeSets.get(changeSetId);
103
+ const args = parseArgs(use.content);
104
+ const record = {
105
+ id: `${entry.id}:${callId}`,
106
+ timestampMs: use.timestampMs,
107
+ tool: bareToolName(toolName),
108
+ target: activityTarget(toolName, args, input.sources.hostProjectRoot),
109
+ agent: entry.conversation.provider ?? DEFAULT_PROVIDER_NAME,
110
+ allowedBy,
111
+ result: resultOf(result, allowedBy, input.sources.running.has(entry.id)),
112
+ resultDetail: permission?.feedback,
113
+ changeSetId: changeSet?.id,
114
+ changeSetNumber: changeSet?.number,
115
+ conversationId: entry.id,
116
+ conversationTitle: entry.title,
117
+ durationMs: result === undefined ? undefined : result.timestampMs - use.timestampMs,
118
+ isReadOnly: allowedBy === "read_auto" || isReadOnlyTool(toolName),
119
+ isAutoFix: use.isAutoFix === true,
120
+ category: [],
121
+ kind: permissionKindOf(toolName),
122
+ isAsked: permission !== undefined,
123
+ isAlwaysAsk: permission?.alwaysAsk === true,
124
+ args,
125
+ resultText: result?.content,
126
+ permission,
127
+ endedAtMs: result?.timestampMs,
128
+ };
129
+ return finish(record, changeSet);
130
+ }
131
+ function permissionOnlyRecord(input, permission) {
132
+ const { entry } = input;
133
+ const toolName = permission.toolName ?? "";
134
+ const allowedBy = permission.allowedBy ?? undecidedAllowedBy(toolName);
135
+ const record = {
136
+ id: `${entry.id}:${permission.requestId ?? permission.callId ?? permission.timestampMs}`,
137
+ timestampMs: permission.requestedAtMs ?? permission.timestampMs,
138
+ tool: bareToolName(toolName),
139
+ target: activityTarget(toolName, permission.args, input.sources.hostProjectRoot),
140
+ agent: entry.conversation.provider ?? DEFAULT_PROVIDER_NAME,
141
+ allowedBy,
142
+ result: RESULT_BY_ALLOWED[allowedBy] ?? "done",
143
+ resultDetail: permission.feedback,
144
+ conversationId: entry.id,
145
+ conversationTitle: entry.title,
146
+ isReadOnly: false,
147
+ isAutoFix: false,
148
+ category: [],
149
+ kind: permission.kind ?? permissionKindOf(toolName),
150
+ isAsked: true,
151
+ isAlwaysAsk: permission.alwaysAsk === true,
152
+ args: permission.args,
153
+ permission,
154
+ };
155
+ return finish(record);
156
+ }
157
+ function stateChangeRecords(entry, changeSet) {
158
+ return (changeSet.stateLog ?? []).map((change, position) => finish({
159
+ id: `${entry.id}:${changeSet.id}:${position}`,
160
+ timestampMs: change.atMs,
161
+ tool: STATE_CHANGE_TOOL[change.state] ?? UNDO_TOOL_NAME,
162
+ target: `#${changeSet.number} ${changeSet.title}`,
163
+ agent: changeSet.agent,
164
+ allowedBy: "approved",
165
+ result: "done",
166
+ resultDetail: change.by,
167
+ changeSetId: changeSet.id,
168
+ changeSetNumber: changeSet.number,
169
+ conversationId: entry.id,
170
+ conversationTitle: entry.title,
171
+ isReadOnly: false,
172
+ isAutoFix: changeSet.isAutoFix,
173
+ category: [],
174
+ kind: "other",
175
+ isAsked: false,
176
+ isAlwaysAsk: false,
177
+ args: { changeSetId: changeSet.id },
178
+ }));
179
+ }
180
+ function pendingRecord(input, request, existing) {
181
+ const base = existing ?? {
182
+ id: `${input.entry.id}:${request.callId ?? request.requestId}`,
183
+ timestampMs: request.createdAtMs,
184
+ tool: bareToolName(request.toolName),
185
+ target: activityTarget(request.toolName, request.args, input.sources.hostProjectRoot),
186
+ agent: input.entry.conversation.provider ?? DEFAULT_PROVIDER_NAME,
187
+ allowedBy: "approved",
188
+ result: "pending",
189
+ conversationId: input.entry.id,
190
+ conversationTitle: input.entry.title,
191
+ isReadOnly: false,
192
+ isAutoFix: false,
193
+ category: [],
194
+ kind: request.kind,
195
+ isAsked: true,
196
+ isAlwaysAsk: request.alwaysAsk,
197
+ args: request.args,
198
+ };
199
+ return finish({
200
+ ...base,
201
+ result: "pending",
202
+ isAsked: true,
203
+ isAlwaysAsk: request.alwaysAsk,
204
+ expiresAtMs: request.expiresAtMs,
205
+ });
206
+ }
207
+ function conversationRecords(input) {
208
+ const messages = input.entry.conversation.messages;
209
+ const calls = messages
210
+ .filter((m) => m.role === "tool_use")
211
+ .map((use) => callRecord(input, use));
212
+ const callIds = new Set(messages.filter((m) => m.role === "tool_use").map((m) => m.callId));
213
+ const orphans = messages
214
+ .filter((m) => m.role === "permission" &&
215
+ (m.callId === undefined || !callIds.has(m.callId)))
216
+ .map((permission) => permissionOnlyRecord(input, permission));
217
+ const undos = [...input.index.changeSets.values()].flatMap((c) => stateChangeRecords(input.entry, c));
218
+ return [...calls, ...orphans, ...undos];
219
+ }
220
+ function applyPending(input, records) {
221
+ const own = input.sources.pending.filter((p) => p.conversationId === input.entry.id);
222
+ const byId = new Map(records.map((r) => [r.id, r]));
223
+ for (const request of own) {
224
+ const id = `${input.entry.id}:${request.callId ?? request.requestId}`;
225
+ byId.set(id, pendingRecord(input, request, byId.get(id)));
226
+ }
227
+ return [...byId.values()];
228
+ }
229
+ export function buildActivityRecords(sources) {
230
+ const records = sources.entries.flatMap((entry) => {
231
+ const input = {
232
+ entry,
233
+ index: indexConversation(entry, sources.changeSets),
234
+ sources,
235
+ };
236
+ return applyPending(input, conversationRecords(input));
237
+ });
238
+ return records.sort((a, b) => b.timestampMs - a.timestampMs);
239
+ }
240
+ const ROW_ONLY_FIELDS = [
241
+ "kind",
242
+ "isAsked",
243
+ "isAlwaysAsk",
244
+ "args",
245
+ "resultText",
246
+ "permission",
247
+ "endedAtMs",
248
+ ];
249
+ export function toActivityRow(record) {
250
+ const row = { ...record };
251
+ for (const field of ROW_ONLY_FIELDS)
252
+ delete row[field];
253
+ return row;
254
+ }
255
+ //# sourceMappingURL=activity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"activity.js","sourceRoot":"","sources":["../../src/audit/activity.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { AllowedBy } from "../constants/audit.js";
2
+ export interface CallDecision {
3
+ allowedBy: AllowedBy;
4
+ isPrompted: boolean;
5
+ }
6
+ export interface CallAudit {
7
+ record(conversationId: string, callId: string, decision: CallDecision): void;
8
+ lookup(conversationId: string, callId: string): CallDecision | undefined;
9
+ forget(conversationId: string): void;
10
+ }
11
+ export declare function createCallAudit(): CallAudit;
@@ -0,0 +1,23 @@
1
+ const CALL_INDEX_SEPARATOR = ":";
2
+ function itemIdOf(callId) {
3
+ const index = callId.lastIndexOf(CALL_INDEX_SEPARATOR);
4
+ return index < 0 ? callId : callId.slice(0, index);
5
+ }
6
+ export function createCallAudit() {
7
+ const byConversation = new Map();
8
+ return {
9
+ record(conversationId, callId, decision) {
10
+ const calls = byConversation.get(conversationId) ?? new Map();
11
+ calls.set(callId, decision);
12
+ byConversation.set(conversationId, calls);
13
+ },
14
+ lookup(conversationId, callId) {
15
+ const calls = byConversation.get(conversationId);
16
+ return calls?.get(callId) ?? calls?.get(itemIdOf(callId));
17
+ },
18
+ forget(conversationId) {
19
+ byConversation.delete(conversationId);
20
+ },
21
+ };
22
+ }
23
+ //# sourceMappingURL=call-audit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"call-audit.js","sourceRoot":"","sources":["../../src/audit/call-audit.ts"],"names":[],"mappings":"AAIA,MAAM,oBAAoB,GAAG,GAAG,CAAC;AAejC,SAAS,QAAQ,CAAC,MAAc;IAC9B,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,oBAAoB,CAAC,CAAC;IACvD,OAAO,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,eAAe;IAC7B,MAAM,cAAc,GAAG,IAAI,GAAG,EAAqC,CAAC;IACpE,OAAO;QACL,MAAM,CAAC,cAAc,EAAE,MAAM,EAAE,QAAQ;YACrC,MAAM,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC,cAAc,CAAC,IAAI,IAAI,GAAG,EAAE,CAAC;YAC9D,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;YAC5B,cAAc,CAAC,GAAG,CAAC,cAAc,EAAE,KAAK,CAAC,CAAC;QAC5C,CAAC;QACD,MAAM,CAAC,cAAc,EAAE,MAAM;YAC3B,MAAM,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;YACjD,OAAO,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,KAAK,EAAE,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;QAC5D,CAAC;QACD,MAAM,CAAC,cAAc;YACnB,cAAc,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;QACxC,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,69 @@
1
+ import type { TypecheckOutcome } from "../constants/audit.js";
2
+ import type { DiffHunkType } from "../protocol/events.js";
3
+ import type { ChangeSetStore } from "../state/change-sets.js";
4
+ import type { GenerationMode } from "../state/settings-types.js";
5
+ import type { ChangeSetFile, ChangeSetRecord, ChangeSetSummary, ProviderName } from "../state/types.js";
6
+ import type { ShadowGit } from "./shadow-git.js";
7
+ export interface TurnChangeMeta {
8
+ conversationId: string;
9
+ title: string;
10
+ agent: ProviderName;
11
+ scope: GenerationMode;
12
+ isAutoFix: boolean;
13
+ askedBy?: string;
14
+ approvalsNeeded: number;
15
+ builderOps: number;
16
+ typecheck: TypecheckOutcome;
17
+ pagePath?: string;
18
+ }
19
+ export interface TurnCheckpoint {
20
+ ready(): Promise<void>;
21
+ finish(meta: TurnChangeMeta): Promise<ChangeSetRecord | null>;
22
+ }
23
+ interface ChangeSetFileDetail extends ChangeSetFile {
24
+ hunks: DiffHunkType[];
25
+ isBinary: boolean;
26
+ }
27
+ export interface UndoConflict {
28
+ changeSetId: string;
29
+ number: number;
30
+ title: string;
31
+ files: string[];
32
+ }
33
+ export interface UndoPreview {
34
+ changeSetId: string;
35
+ files: string[];
36
+ conflicts: UndoConflict[];
37
+ }
38
+ export declare const CHANGE_SET_ERRORS: {
39
+ readonly NOT_FOUND: "not_found";
40
+ readonly WRONG_STATE: "wrong_state";
41
+ readonly UNAVAILABLE: "unavailable";
42
+ };
43
+ export type ChangeSetErrorCode = (typeof CHANGE_SET_ERRORS)[keyof typeof CHANGE_SET_ERRORS];
44
+ export declare class ChangeSetActionError extends Error {
45
+ readonly code: ChangeSetErrorCode;
46
+ constructor(code: ChangeSetErrorCode, message: string);
47
+ }
48
+ export interface Checkpoints {
49
+ isAvailable(): boolean;
50
+ start(retentionDays: number): Promise<void>;
51
+ beginTurn(conversationId: string): TurnCheckpoint;
52
+ all(): ChangeSetRecord[];
53
+ get(id: string): ChangeSetRecord | null;
54
+ forConversation(conversationId: string): ChangeSetSummary[];
55
+ fileDetails(id: string): Promise<ChangeSetFileDetail[]>;
56
+ undoPreview(id: string): UndoPreview;
57
+ undo(id: string, includeLater: boolean, actor?: string): Promise<ChangeSetRecord[]>;
58
+ redo(id: string, actor?: string): Promise<ChangeSetRecord[]>;
59
+ setTypecheck(id: string, outcome: TypecheckOutcome): ChangeSetRecord | null;
60
+ flush(): Promise<void>;
61
+ }
62
+ export interface CheckpointsDeps {
63
+ git: ShadowGit;
64
+ store: ChangeSetStore;
65
+ }
66
+ export declare function toSummary(record: ChangeSetRecord): ChangeSetSummary;
67
+ export declare function createCheckpoints(deps: CheckpointsDeps): Checkpoints;
68
+ export declare function checkpointExcludes(stateDir: string, root: string): string[];
69
+ export {};
@@ -0,0 +1,244 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import path from "node:path";
3
+ import { parseUnifiedDiff } from "../agent/line-diff.js";
4
+ import { CHECKPOINTS_LOG_PREFIX, MS_PER_DAY, } from "../constants/checkpoints.js";
5
+ export const CHANGE_SET_ERRORS = {
6
+ NOT_FOUND: "not_found",
7
+ WRONG_STATE: "wrong_state",
8
+ UNAVAILABLE: "unavailable",
9
+ };
10
+ export class ChangeSetActionError extends Error {
11
+ code;
12
+ constructor(code, message) {
13
+ super(message);
14
+ this.code = code;
15
+ }
16
+ }
17
+ const NO_OP_CHECKPOINT = {
18
+ ready: () => Promise.resolve(),
19
+ finish: () => Promise.resolve(null),
20
+ };
21
+ function serialize(state, task) {
22
+ const run = state.lock.then(task, task);
23
+ state.lock = run.catch(() => undefined);
24
+ return run;
25
+ }
26
+ export function toSummary(record) {
27
+ const { beforeTree: _before, afterTree: _after, pagePath: _page, stateLog: _log, ...summary } = record;
28
+ return summary;
29
+ }
30
+ function sum(files, key) {
31
+ return files.reduce((total, file) => total + file[key], 0);
32
+ }
33
+ function buildRecord(state, meta, trees, files, isOverlapped) {
34
+ return {
35
+ id: randomUUID(),
36
+ number: state.store.nextNumber(),
37
+ ...meta,
38
+ createdAtMs: Date.now(),
39
+ overlapped: isOverlapped,
40
+ files,
41
+ added: sum(files, "added"),
42
+ removed: sum(files, "removed"),
43
+ state: "applied",
44
+ beforeTree: trees[0],
45
+ afterTree: trees[1],
46
+ };
47
+ }
48
+ async function recordTurn(state, before, meta, turn) {
49
+ const after = await serialize(state, () => state.git.snapshot());
50
+ const files = await state.git.changedFiles(before, after);
51
+ if (files.length === 0)
52
+ return null;
53
+ const record = buildRecord(state, meta, [before, after], files, turn.isOverlapped);
54
+ await state.git.keep(record.id, before, after);
55
+ state.store.add(record);
56
+ return record;
57
+ }
58
+ function markOverlaps(state, turn) {
59
+ if (state.running.size === 0)
60
+ return;
61
+ turn.isOverlapped = true;
62
+ for (const other of state.running)
63
+ other.isOverlapped = true;
64
+ }
65
+ function beginTurn(state) {
66
+ if (!state.isAvailable)
67
+ return NO_OP_CHECKPOINT;
68
+ const turn = { isOverlapped: false };
69
+ markOverlaps(state, turn);
70
+ state.running.add(turn);
71
+ const before = serialize(state, () => state.git.snapshot());
72
+ before.catch(() => undefined);
73
+ return {
74
+ ready: () => before.then(() => undefined, () => undefined),
75
+ finish: async (meta) => {
76
+ try {
77
+ return await recordTurn(state, await before, meta, turn);
78
+ }
79
+ catch (err) {
80
+ console.warn(`${CHECKPOINTS_LOG_PREFIX} snapshot failed: ${String(err)}`);
81
+ return null;
82
+ }
83
+ finally {
84
+ state.running.delete(turn);
85
+ }
86
+ },
87
+ };
88
+ }
89
+ function requireRecord(state, id) {
90
+ const record = state.store.get(id);
91
+ if (record === null) {
92
+ throw new ChangeSetActionError(CHANGE_SET_ERRORS.NOT_FOUND, "Unknown change set.");
93
+ }
94
+ return record;
95
+ }
96
+ function requireState(record, expected) {
97
+ if (record.state === expected)
98
+ return;
99
+ throw new ChangeSetActionError(CHANGE_SET_ERRORS.WRONG_STATE, `Change set #${record.number} is already ${record.state}.`);
100
+ }
101
+ function pathsOf(record) {
102
+ return record.files.map((file) => file.path);
103
+ }
104
+ function laterConflicts(state, record) {
105
+ const files = new Set(pathsOf(record));
106
+ return state.store
107
+ .all()
108
+ .filter((other) => other.number > record.number &&
109
+ other.state === "applied" &&
110
+ other.files.some((file) => files.has(file.path)))
111
+ .sort((a, b) => b.number - a.number);
112
+ }
113
+ function undoPreview(state, id) {
114
+ const record = requireRecord(state, id);
115
+ const files = new Set(pathsOf(record));
116
+ return {
117
+ changeSetId: id,
118
+ files: pathsOf(record),
119
+ conflicts: laterConflicts(state, record).map((other) => ({
120
+ changeSetId: other.id,
121
+ number: other.number,
122
+ title: other.title,
123
+ files: pathsOf(other).filter((file) => files.has(file)),
124
+ })),
125
+ };
126
+ }
127
+ function markState(state, record, next, actor) {
128
+ const atMs = Date.now();
129
+ const change = { state: next, atMs, by: actor };
130
+ return (state.store.update(record.id, {
131
+ state: next,
132
+ stateChangedAtMs: atMs,
133
+ stateChangedBy: actor,
134
+ stateLog: [...(record.stateLog ?? []), change],
135
+ }) ?? record);
136
+ }
137
+ function assertAvailable(state) {
138
+ if (state.isAvailable)
139
+ return;
140
+ throw new ChangeSetActionError(CHANGE_SET_ERRORS.UNAVAILABLE, "Change sets are off: git is not installed.");
141
+ }
142
+ async function undo(state, id, includeLater, actor) {
143
+ assertAvailable(state);
144
+ const record = requireRecord(state, id);
145
+ requireState(record, "applied");
146
+ const targets = includeLater
147
+ ? [...laterConflicts(state, record), record]
148
+ : [record];
149
+ return serialize(state, async () => {
150
+ const undone = [];
151
+ for (const target of targets) {
152
+ await state.git.restore(target.beforeTree, pathsOf(target));
153
+ undone.push(markState(state, target, "undone", actor));
154
+ }
155
+ return undone;
156
+ });
157
+ }
158
+ async function redo(state, id, actor) {
159
+ assertAvailable(state);
160
+ const record = requireRecord(state, id);
161
+ requireState(record, "undone");
162
+ return serialize(state, async () => {
163
+ await state.git.restore(record.afterTree, pathsOf(record));
164
+ return [markState(state, record, "applied", actor)];
165
+ });
166
+ }
167
+ async function fileDetails(state, id) {
168
+ const record = requireRecord(state, id);
169
+ if (!state.isAvailable) {
170
+ return record.files.map((file) => ({
171
+ ...file,
172
+ hunks: [],
173
+ isBinary: false,
174
+ }));
175
+ }
176
+ return Promise.all(record.files.map(async (file) => {
177
+ const diff = await state.git
178
+ .fileDiff(record.beforeTree, record.afterTree, file.path)
179
+ .catch(() => ({ text: "", isBinary: false }));
180
+ return {
181
+ ...file,
182
+ hunks: parseUnifiedDiff(diff.text).hunks,
183
+ isBinary: diff.isBinary,
184
+ };
185
+ }));
186
+ }
187
+ async function pruneExpired(state, retentionDays) {
188
+ const cutoff = Date.now() - retentionDays * MS_PER_DAY;
189
+ const expired = state.store.all().filter((c) => c.createdAtMs < cutoff);
190
+ if (expired.length === 0)
191
+ return;
192
+ for (const record of expired)
193
+ await state.git.drop(record.id);
194
+ state.store.remove(expired.map((record) => record.id));
195
+ void serialize(state, () => state.git.prune()).catch(() => undefined);
196
+ }
197
+ async function start(state, retentionDays) {
198
+ await state.store.load();
199
+ if (!(await state.git.isInstalled()))
200
+ return;
201
+ try {
202
+ await state.git.init();
203
+ state.isAvailable = true;
204
+ await pruneExpired(state, retentionDays);
205
+ }
206
+ catch (err) {
207
+ console.warn(`${CHECKPOINTS_LOG_PREFIX} unavailable: ${String(err)}`);
208
+ }
209
+ }
210
+ export function createCheckpoints(deps) {
211
+ const state = {
212
+ ...deps,
213
+ isAvailable: false,
214
+ lock: Promise.resolve(),
215
+ running: new Set(),
216
+ };
217
+ return {
218
+ isAvailable: () => state.isAvailable,
219
+ start: (retentionDays) => start(state, retentionDays),
220
+ beginTurn: () => beginTurn(state),
221
+ all: () => state.store.all(),
222
+ get: (id) => state.store.get(id),
223
+ forConversation: (conversationId) => state.store
224
+ .all()
225
+ .filter((c) => c.conversationId === conversationId)
226
+ .map(toSummary),
227
+ fileDetails: (id) => fileDetails(state, id),
228
+ undoPreview: (id) => undoPreview(state, id),
229
+ undo: (id, includeLater, actor) => undo(state, id, includeLater, actor),
230
+ redo: (id, actor) => redo(state, id, actor),
231
+ flush: async () => {
232
+ await state.lock;
233
+ await state.store.flush();
234
+ },
235
+ setTypecheck: (id, outcome) => state.store.update(id, { typecheck: outcome }),
236
+ };
237
+ }
238
+ export function checkpointExcludes(stateDir, root) {
239
+ const relative = path.relative(root, stateDir);
240
+ if (relative.startsWith("..") || path.isAbsolute(relative))
241
+ return [];
242
+ return [relative.split(path.sep).join("/")];
243
+ }
244
+ //# sourceMappingURL=checkpoints.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkpoints.js","sourceRoot":"","sources":["../../src/checkpoints/checkpoints.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,OAAO,EACL,sBAAsB,EACtB,UAAU,GACX,MAAM,6BAA6B,CAAC;AAoDrC,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,SAAS,EAAE,WAAW;IACtB,WAAW,EAAE,aAAa;IAC1B,WAAW,EAAE,aAAa;CAClB,CAAC;AAIX,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IAElC;IADX,YACW,IAAwB,EACjC,OAAe;QAEf,KAAK,CAAC,OAAO,CAAC,CAAC;QAHN,SAAI,GAAJ,IAAI,CAAoB;IAInC,CAAC;CACF;AAsCD,MAAM,gBAAgB,GAAmB;IACvC,KAAK,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE;IAC9B,MAAM,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC;CACpC,CAAC;AAGF,SAAS,SAAS,CAChB,KAAuB,EACvB,IAAsB;IAEtB,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACxC,KAAK,CAAC,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IACxC,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,MAAuB;IAC/C,MAAM,EACJ,UAAU,EAAE,OAAO,EACnB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,KAAK,EACf,QAAQ,EAAE,IAAI,EACd,GAAG,OAAO,EACX,GAAG,MAAM,CAAC;IACX,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,GAAG,CAAC,KAAsB,EAAE,GAAwB;IAC3D,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;AAC7D,CAAC;AAED,SAAS,WAAW,CAClB,KAAuB,EACvB,IAAoB,EACpB,KAAuB,EACvB,KAAsB,EACtB,YAAqB;IAErB,OAAO;QACL,EAAE,EAAE,UAAU,EAAE;QAChB,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,UAAU,EAAE;QAChC,GAAG,IAAI;QACP,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE;QACvB,UAAU,EAAE,YAAY;QACxB,KAAK;QACL,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC;QAC1B,OAAO,EAAE,GAAG,CAAC,KAAK,EAAE,SAAS,CAAC;QAC9B,KAAK,EAAE,SAAS;QAChB,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC;QACpB,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;KACpB,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,UAAU,CACvB,KAAuB,EACvB,MAAc,EACd,IAAoB,EACpB,IAAiB;IAEjB,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;IACjE,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC1D,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACpC,MAAM,MAAM,GAAG,WAAW,CACxB,KAAK,EACL,IAAI,EACJ,CAAC,MAAM,EAAE,KAAK,CAAC,EACf,KAAK,EACL,IAAI,CAAC,YAAY,CAClB,CAAC;IACF,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;IAC/C,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACxB,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,YAAY,CAAC,KAAuB,EAAE,IAAiB;IAC9D,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO;IACrC,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;IACzB,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,OAAO;QAAE,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC;AAC/D,CAAC;AAED,SAAS,SAAS,CAAC,KAAuB;IACxC,IAAI,CAAC,KAAK,CAAC,WAAW;QAAE,OAAO,gBAAgB,CAAC;IAChD,MAAM,IAAI,GAAgB,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;IAClD,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAC1B,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACxB,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC5D,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;IAC9B,OAAO;QACL,KAAK,EAAE,GAAG,EAAE,CACV,MAAM,CAAC,IAAI,CACT,GAAG,EAAE,CAAC,SAAS,EACf,GAAG,EAAE,CAAC,SAAS,CAChB;QACH,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YACrB,IAAI,CAAC;gBACH,OAAO,MAAM,UAAU,CAAC,KAAK,EAAE,MAAM,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YAC3D,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,IAAI,CACV,GAAG,sBAAsB,qBAAqB,MAAM,CAAC,GAAG,CAAC,EAAE,CAC5D,CAAC;gBACF,OAAO,IAAI,CAAC;YACd,CAAC;oBAAS,CAAC;gBACT,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,KAAuB,EAAE,EAAU;IACxD,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACnC,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACpB,MAAM,IAAI,oBAAoB,CAC5B,iBAAiB,CAAC,SAAS,EAC3B,qBAAqB,CACtB,CAAC;IACJ,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,YAAY,CAAC,MAAuB,EAAE,QAAwB;IACrE,IAAI,MAAM,CAAC,KAAK,KAAK,QAAQ;QAAE,OAAO;IACtC,MAAM,IAAI,oBAAoB,CAC5B,iBAAiB,CAAC,WAAW,EAC7B,eAAe,MAAM,CAAC,MAAM,eAAe,MAAM,CAAC,KAAK,GAAG,CAC3D,CAAC;AACJ,CAAC;AAED,SAAS,OAAO,CAAC,MAAuB;IACtC,OAAO,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC/C,CAAC;AAGD,SAAS,cAAc,CACrB,KAAuB,EACvB,MAAuB;IAEvB,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IACvC,OAAO,KAAK,CAAC,KAAK;SACf,GAAG,EAAE;SACL,MAAM,CACL,CAAC,KAAK,EAAE,EAAE,CACR,KAAK,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM;QAC5B,KAAK,CAAC,KAAK,KAAK,SAAS;QACzB,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CACnD;SACA,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC;AACzC,CAAC;AAED,SAAS,WAAW,CAAC,KAAuB,EAAE,EAAU;IACtD,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACxC,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IACvC,OAAO;QACL,WAAW,EAAE,EAAE;QACf,KAAK,EAAE,OAAO,CAAC,MAAM,CAAC;QACtB,SAAS,EAAE,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACvD,WAAW,EAAE,KAAK,CAAC,EAAE;YACrB,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;SACxD,CAAC,CAAC;KACJ,CAAC;AACJ,CAAC;AAED,SAAS,SAAS,CAChB,KAAuB,EACvB,MAAuB,EACvB,IAAoB,EACpB,KAAyB;IAEzB,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACxB,MAAM,MAAM,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC;IAChD,OAAO,CACL,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE;QAC5B,KAAK,EAAE,IAAI;QACX,gBAAgB,EAAE,IAAI;QACtB,cAAc,EAAE,KAAK;QACrB,QAAQ,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC,EAAE,MAAM,CAAC;KAC/C,CAAC,IAAI,MAAM,CACb,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,KAAuB;IAC9C,IAAI,KAAK,CAAC,WAAW;QAAE,OAAO;IAC9B,MAAM,IAAI,oBAAoB,CAC5B,iBAAiB,CAAC,WAAW,EAC7B,4CAA4C,CAC7C,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,IAAI,CACjB,KAAuB,EACvB,EAAU,EACV,YAAqB,EACrB,KAAyB;IAEzB,eAAe,CAAC,KAAK,CAAC,CAAC;IACvB,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACxC,YAAY,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAChC,MAAM,OAAO,GAAG,YAAY;QAC1B,CAAC,CAAC,CAAC,GAAG,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAC5C,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACb,OAAO,SAAS,CAAC,KAAK,EAAE,KAAK,IAAI,EAAE;QACjC,MAAM,MAAM,GAAsB,EAAE,CAAC;QACrC,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;YAC5D,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;QACzD,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,IAAI,CACjB,KAAuB,EACvB,EAAU,EACV,KAAyB;IAEzB,eAAe,CAAC,KAAK,CAAC,CAAC;IACvB,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACxC,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC/B,OAAO,SAAS,CAAC,KAAK,EAAE,KAAK,IAAI,EAAE;QACjC,MAAM,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;QAC3D,OAAO,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,WAAW,CACxB,KAAuB,EACvB,EAAU;IAEV,MAAM,MAAM,GAAG,aAAa,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;IACxC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;QACvB,OAAO,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACjC,GAAG,IAAI;YACP,KAAK,EAAE,EAAE;YACT,QAAQ,EAAE,KAAK;SAChB,CAAC,CAAC,CAAC;IACN,CAAC;IACD,OAAO,OAAO,CAAC,GAAG,CAChB,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QAC9B,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG;aACzB,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,IAAI,CAAC;aACxD,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;QAChD,OAAO;YACL,GAAG,IAAI;YACP,KAAK,EAAE,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK;YACxC,QAAQ,EAAE,IAAI,CAAC,QAAQ;SACxB,CAAC;IACJ,CAAC,CAAC,CACH,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,KAAuB,EAAE,aAAqB;IACxE,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,aAAa,GAAG,UAAU,CAAC;IACvD,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,GAAG,MAAM,CAAC,CAAC;IACxE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IACjC,KAAK,MAAM,MAAM,IAAI,OAAO;QAAE,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC9D,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAEvD,KAAK,SAAS,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;AACxE,CAAC;AAED,KAAK,UAAU,KAAK,CAAC,KAAuB,EAAE,aAAqB;IACjE,MAAM,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;IACzB,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC;QAAE,OAAO;IAC7C,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QACvB,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC;QACzB,MAAM,YAAY,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;IAC3C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,GAAG,sBAAsB,iBAAiB,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACxE,CAAC;AACH,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAqB;IACrD,MAAM,KAAK,GAAqB;QAC9B,GAAG,IAAI;QACP,WAAW,EAAE,KAAK;QAClB,IAAI,EAAE,OAAO,CAAC,OAAO,EAAE;QACvB,OAAO,EAAE,IAAI,GAAG,EAAE;KACnB,CAAC;IACF,OAAO;QACL,WAAW,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,WAAW;QACpC,KAAK,EAAE,CAAC,aAAa,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,aAAa,CAAC;QACrD,SAAS,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC;QACjC,GAAG,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE;QAC5B,GAAG,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;QAChC,eAAe,EAAE,CAAC,cAAc,EAAE,EAAE,CAClC,KAAK,CAAC,KAAK;aACR,GAAG,EAAE;aACL,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,KAAK,cAAc,CAAC;aAClD,GAAG,CAAC,SAAS,CAAC;QACnB,WAAW,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,EAAE,CAAC;QAC3C,WAAW,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,EAAE,EAAE,CAAC;QAC3C,IAAI,EAAE,CAAC,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,EAAE,YAAY,EAAE,KAAK,CAAC;QACvE,IAAI,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,EAAE,EAAE,KAAK,CAAC;QAC3C,KAAK,EAAE,KAAK,IAAI,EAAE;YAChB,MAAM,KAAK,CAAC,IAAI,CAAC;YACjB,MAAM,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QAC5B,CAAC;QACD,YAAY,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,CAC5B,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,CAAC;KACjD,CAAC;AACJ,CAAC;AAGD,MAAM,UAAU,kBAAkB,CAAC,QAAgB,EAAE,IAAY;IAC/D,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC/C,IAAI,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,EAAE,CAAC;IACtE,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC9C,CAAC"}
@@ -0,0 +1,23 @@
1
+ import type { ChangeSetFile } from "../state/types.js";
2
+ export interface ShadowGitOptions {
3
+ gitDir: string;
4
+ workTree: string;
5
+ extraExcludes: string[];
6
+ }
7
+ interface FileDiff {
8
+ text: string;
9
+ isBinary: boolean;
10
+ }
11
+ export interface ShadowGit {
12
+ isInstalled(): Promise<boolean>;
13
+ init(): Promise<void>;
14
+ snapshot(): Promise<string>;
15
+ changedFiles(before: string, after: string): Promise<ChangeSetFile[]>;
16
+ fileDiff(before: string, after: string, file: string): Promise<FileDiff>;
17
+ restore(tree: string, files: string[]): Promise<void>;
18
+ keep(id: string, before: string, after: string): Promise<void>;
19
+ drop(id: string): Promise<void>;
20
+ prune(): Promise<void>;
21
+ }
22
+ export declare function createShadowGit(options: ShadowGitOptions): ShadowGit;
23
+ export {};