@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,204 @@
1
+ const DIFF_CONTEXT_LINES = 3;
2
+ const MAX_MATCH_CELLS = 2_000_000;
3
+ const LINE_BREAK = /\r?\n/;
4
+ const HUNK_HEADER = /^@@ -(\d+)(?:,\d+)? \+(\d+)(?:,\d+)? @@/;
5
+ const NO_NEWLINE_MARKER = "\\";
6
+ const FILE_HEADER_PREFIX = "diff --git";
7
+ const LINE_KIND_BY_PREFIX = {
8
+ " ": "context",
9
+ "+": "add",
10
+ "-": "remove",
11
+ };
12
+ function splitLines(text) {
13
+ if (text.length === 0)
14
+ return [];
15
+ const lines = text.split(LINE_BREAK);
16
+ if (lines.at(-1) === "")
17
+ lines.pop();
18
+ return lines;
19
+ }
20
+ function commonPrefixLength(a, b) {
21
+ let i = 0;
22
+ while (i < a.length && i < b.length && a[i] === b[i])
23
+ i++;
24
+ return i;
25
+ }
26
+ function commonSuffixLength(a, b, prefix) {
27
+ let i = 0;
28
+ while (i < a.length - prefix &&
29
+ i < b.length - prefix &&
30
+ a[a.length - 1 - i] === b[b.length - 1 - i]) {
31
+ i++;
32
+ }
33
+ return i;
34
+ }
35
+ function buildMatchTable(a, b) {
36
+ const table = Array.from({ length: a.length + 1 }, () => new Uint32Array(b.length + 1));
37
+ for (let i = a.length - 1; i >= 0; i--) {
38
+ const row = table[i];
39
+ const next = table[i + 1];
40
+ for (let j = b.length - 1; j >= 0; j--) {
41
+ row[j] =
42
+ a[i] === b[j]
43
+ ? next[j + 1] + 1
44
+ : Math.max(next[j], row[j + 1]);
45
+ }
46
+ }
47
+ return table;
48
+ }
49
+ function middleKinds(a, b) {
50
+ if (a.length * b.length > MAX_MATCH_CELLS) {
51
+ return [
52
+ ...a.map(() => "remove"),
53
+ ...b.map(() => "add"),
54
+ ];
55
+ }
56
+ const table = buildMatchTable(a, b);
57
+ const kinds = [];
58
+ let i = 0;
59
+ let j = 0;
60
+ while (i < a.length || j < b.length) {
61
+ if (i < a.length && j < b.length && a[i] === b[j]) {
62
+ kinds.push("context");
63
+ i++;
64
+ j++;
65
+ }
66
+ else if (j >= b.length ||
67
+ (i < a.length && (table[i + 1]?.[j] ?? 0) >= (table[i]?.[j + 1] ?? 0))) {
68
+ kinds.push("remove");
69
+ i++;
70
+ }
71
+ else {
72
+ kinds.push("add");
73
+ j++;
74
+ }
75
+ }
76
+ return kinds;
77
+ }
78
+ function toLines(kinds, a, b) {
79
+ const cursor = { oldLine: 1, newLine: 1 };
80
+ return kinds.map((kind) => {
81
+ const line = { kind, text: "" };
82
+ if (kind !== "add") {
83
+ line.oldLine = cursor.oldLine;
84
+ line.text = a[cursor.oldLine - 1] ?? "";
85
+ cursor.oldLine++;
86
+ }
87
+ if (kind !== "remove") {
88
+ line.newLine = cursor.newLine;
89
+ line.text = b[cursor.newLine - 1] ?? "";
90
+ cursor.newLine++;
91
+ }
92
+ return line;
93
+ });
94
+ }
95
+ function diffLines(oldText, newText) {
96
+ const a = splitLines(oldText);
97
+ const b = splitLines(newText);
98
+ const prefix = commonPrefixLength(a, b);
99
+ const suffix = commonSuffixLength(a, b, prefix);
100
+ const kinds = [
101
+ ...Array.from({ length: prefix }, () => "context"),
102
+ ...middleKinds(a.slice(prefix, a.length - suffix), b.slice(prefix, b.length - suffix)),
103
+ ...Array.from({ length: suffix }, () => "context"),
104
+ ];
105
+ return toLines(kinds, a, b);
106
+ }
107
+ function isChange(line) {
108
+ return line.kind !== "context";
109
+ }
110
+ function keptIndexes(lines, context) {
111
+ const kept = lines.map(() => false);
112
+ lines.forEach((line, index) => {
113
+ if (!isChange(line))
114
+ return;
115
+ const from = Math.max(0, index - context);
116
+ const to = Math.min(lines.length - 1, index + context);
117
+ for (let i = from; i <= to; i++)
118
+ kept[i] = true;
119
+ });
120
+ return kept;
121
+ }
122
+ function startHunk(line, cursor) {
123
+ return {
124
+ oldStart: line.oldLine ?? cursor.oldLine,
125
+ newStart: line.newLine ?? cursor.newLine,
126
+ lines: [],
127
+ };
128
+ }
129
+ function advance(cursor, line) {
130
+ if (line.oldLine !== undefined)
131
+ cursor.oldLine = line.oldLine + 1;
132
+ if (line.newLine !== undefined)
133
+ cursor.newLine = line.newLine + 1;
134
+ }
135
+ function groupHunks(lines, context = DIFF_CONTEXT_LINES) {
136
+ const kept = keptIndexes(lines, context);
137
+ const hunks = [];
138
+ const cursor = { oldLine: 1, newLine: 1 };
139
+ let current = null;
140
+ lines.forEach((line, index) => {
141
+ if (!kept[index]) {
142
+ current = null;
143
+ }
144
+ else {
145
+ current ??= startHunk(line, cursor);
146
+ if (current.lines.length === 0)
147
+ hunks.push(current);
148
+ current.lines.push(line);
149
+ }
150
+ advance(cursor, line);
151
+ });
152
+ return hunks;
153
+ }
154
+ function countKind(hunks, kind) {
155
+ return hunks.reduce((total, hunk) => total + hunk.lines.filter((l) => l.kind === kind).length, 0);
156
+ }
157
+ function withStats(hunks) {
158
+ return {
159
+ hunks,
160
+ added: countKind(hunks, "add"),
161
+ removed: countKind(hunks, "remove"),
162
+ };
163
+ }
164
+ export function diffTexts(oldText, newText) {
165
+ return withStats(groupHunks(diffLines(oldText, newText)));
166
+ }
167
+ function parsedLine(raw, cursor) {
168
+ const kind = LINE_KIND_BY_PREFIX[raw.charAt(0)];
169
+ if (kind === undefined)
170
+ return null;
171
+ const line = { kind, text: raw.slice(1) };
172
+ if (kind !== "add")
173
+ line.oldLine = cursor.oldLine++;
174
+ if (kind !== "remove")
175
+ line.newLine = cursor.newLine++;
176
+ return line;
177
+ }
178
+ function openHunk(match, cursor) {
179
+ cursor.oldLine = Number(match[1]);
180
+ cursor.newLine = Number(match[2]);
181
+ return { oldStart: cursor.oldLine, newStart: cursor.newLine, lines: [] };
182
+ }
183
+ export function parseUnifiedDiff(text) {
184
+ const hunks = [];
185
+ const cursor = { oldLine: 1, newLine: 1 };
186
+ let current = null;
187
+ for (const raw of text.split(LINE_BREAK)) {
188
+ if (raw.startsWith(FILE_HEADER_PREFIX))
189
+ current = null;
190
+ const header = HUNK_HEADER.exec(raw);
191
+ if (header !== null) {
192
+ current = openHunk(header, cursor);
193
+ hunks.push(current);
194
+ continue;
195
+ }
196
+ if (current === null || raw.startsWith(NO_NEWLINE_MARKER))
197
+ continue;
198
+ const line = parsedLine(raw, cursor);
199
+ if (line !== null)
200
+ current.lines.push(line);
201
+ }
202
+ return withStats(hunks);
203
+ }
204
+ //# sourceMappingURL=line-diff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"line-diff.js","sourceRoot":"","sources":["../../src/agent/line-diff.ts"],"names":[],"mappings":"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"}
@@ -1,26 +1,71 @@
1
- import { type PermissionDecision } from "../constants/permissions.js";
1
+ import type { AllowedBy } from "../constants/audit.js";
2
+ import { PERMISSION_SETTLEMENTS } from "../constants/permissions.js";
3
+ import type { ActiveRuleType, PermissionRequestEventType } from "../protocol/events.js";
4
+ import type { PermissionDecisionValue, PermissionRuleType } from "../protocol/messages.js";
5
+ import { type PermissionRuleStore } from "./permission-rules.js";
2
6
  export interface PermissionRequest {
3
7
  conversationId: string;
4
8
  toolName: string;
5
9
  args: unknown;
10
+ callId?: string;
6
11
  }
7
- export interface PendingRequest {
8
- requestId: string;
12
+ export interface PermissionOutcome {
13
+ isAllowed: boolean;
14
+ allowedBy: AllowedBy;
15
+ feedback?: string;
16
+ keepData?: boolean;
17
+ shouldInterrupt?: boolean;
18
+ }
19
+ export type PendingRequest = Omit<PermissionRequestEventType, "type">;
20
+ type PermissionSettlementKind = PermissionDecisionValue | (typeof PERMISSION_SETTLEMENTS)[keyof typeof PERMISSION_SETTLEMENTS];
21
+ export interface PermissionPolicy {
22
+ hostProjectRoot: string;
23
+ isFullAuto: boolean;
24
+ timeoutMs: number;
25
+ alwaysAskDependencies: boolean;
26
+ alwaysAskBlockRemoval: boolean;
27
+ }
28
+ export interface PermissionDecisionRecord {
9
29
  conversationId: string;
30
+ callId?: string;
10
31
  toolName: string;
11
- args: unknown;
32
+ outcome: PermissionOutcome;
33
+ prompt?: PermissionPrompt;
34
+ }
35
+ export interface PermissionPrompt {
36
+ request: PendingRequest;
37
+ settledAs: PermissionSettlementKind;
38
+ decidedAtMs: number;
39
+ decidedBy?: string;
40
+ }
41
+ export interface PermissionAnswer {
42
+ requestId: string;
43
+ decision: PermissionDecisionValue;
44
+ rule?: PermissionRuleType;
45
+ feedback?: string;
46
+ keepData?: boolean;
47
+ actor?: string;
12
48
  }
13
49
  export interface BusOptions {
50
+ getPolicy: (conversationId: string) => PermissionPolicy;
14
51
  onPromptChat: (event: PendingRequest) => void;
52
+ onDecided?: (record: PermissionDecisionRecord) => void;
53
+ onRulesChanged?: (conversationId: string, rules: ActiveRuleType[]) => void;
54
+ onDenyAll?: (conversationId: string) => void;
15
55
  timeoutMs?: number;
56
+ rules?: PermissionRuleStore;
16
57
  }
17
58
  export interface PermissionBus {
18
- requestPermission(req: PermissionRequest): Promise<PermissionDecision>;
19
- resolvePermission(requestId: string, decision: PermissionDecision): void;
20
- rememberSessionDecision(conversationId: string, toolName: string): void;
21
- hasSessionAllowed(conversationId: string, toolName: string): boolean;
22
- forgetConversation(conversationId: string): void;
59
+ requestPermission(req: PermissionRequest): Promise<PermissionOutcome>;
60
+ resolvePermission(answer: PermissionAnswer): void;
23
61
  getPendingForConversation(conversationId: string): PendingRequest[];
24
- setAutoApprove(autoApprove: boolean): void;
62
+ countPending(conversationId?: string): number;
63
+ cancelConversation(conversationId: string): void;
64
+ cancelCall(conversationId: string, callId: string): void;
65
+ forgetConversation(conversationId: string): void;
66
+ listRules(conversationId: string): ActiveRuleType[];
67
+ revokeRule(conversationId: string, ruleId: string): boolean;
25
68
  }
69
+ export declare function denialMessage(outcome: PermissionOutcome): string;
26
70
  export declare function createPermissionBus(opts: BusOptions): PermissionBus;
71
+ export {};
@@ -1,137 +1,167 @@
1
1
  import { randomUUID } from "node:crypto";
2
- import { PERMISSION_DECISIONS, PERMISSION_LOG_PREFIX, PERMISSION_TIMEOUT_MS, PERMISSION_TIMEOUT_REASON, PERMISSION_UNKNOWN_REQUEST_REASON, } from "../constants/permissions.js";
3
- function ensureSessionSet(state, conversationId) {
4
- const existing = state.sessionAllowed.get(conversationId);
5
- if (existing)
6
- return existing;
7
- const fresh = new Set();
8
- state.sessionAllowed.set(conversationId, fresh);
9
- return fresh;
2
+ import { PERMISSION_DECISIONS, PERMISSION_DENIED_MESSAGE, PERMISSION_DENY_ALL_MESSAGE, PERMISSION_EXPIRED_MESSAGE, PERMISSION_FEEDBACK_PREFIX, PERMISSION_LOG_PREFIX, PERMISSION_SETTLEMENTS, PERMISSION_TIMEOUT_REASON, PERMISSION_UNKNOWN_REQUEST_REASON, } from "../constants/permissions.js";
3
+ import { describeRequest } from "./permission-preview.js";
4
+ import { createPermissionRuleStore, isSameRule, } from "./permission-rules.js";
5
+ import { buildToolSummary } from "./tool-summary.js";
6
+ const DENIED = { isAllowed: false, allowedBy: "denied" };
7
+ export function denialMessage(outcome) {
8
+ if (outcome.allowedBy === "expired")
9
+ return PERMISSION_EXPIRED_MESSAGE;
10
+ if (outcome.shouldInterrupt === true)
11
+ return PERMISSION_DENY_ALL_MESSAGE;
12
+ const feedback = outcome.feedback?.trim();
13
+ if (feedback)
14
+ return `${PERMISSION_FEEDBACK_PREFIX}${feedback}`;
15
+ return PERMISSION_DENIED_MESSAGE;
10
16
  }
11
- function rememberDecision(state, conversationId, toolName) {
12
- const set = ensureSessionSet(state, conversationId);
13
- set.add(toolName);
17
+ function settle(state, pending, outcome, answer) {
18
+ clearTimeout(pending.timer);
19
+ state.pending.delete(pending.request.requestId);
20
+ const { request } = pending;
21
+ state.onDecided?.({
22
+ conversationId: request.conversationId,
23
+ callId: request.callId,
24
+ toolName: request.toolName,
25
+ outcome,
26
+ prompt: { request, decidedAtMs: Date.now(), ...answer },
27
+ });
28
+ pending.resolve(outcome);
14
29
  }
15
- function hasAllowed(state, conversationId, toolName) {
16
- const set = state.sessionAllowed.get(conversationId);
17
- if (!set)
18
- return false;
19
- return set.has(toolName);
30
+ function addRule(state, pending, rule) {
31
+ const offered = pending.request.ruleOptions;
32
+ if (rule === undefined || !offered.some((o) => isSameRule(o, rule)))
33
+ return;
34
+ const { conversationId } = pending.request;
35
+ state.rules.add(conversationId, rule);
36
+ state.onRulesChanged?.(conversationId, state.rules.list(conversationId));
20
37
  }
21
- const DECISION_HANDLERS = {
22
- [PERMISSION_DECISIONS.ALLOW_ONCE]: () => { },
23
- [PERMISSION_DECISIONS.ALLOW_SESSION]: (state, pending) => {
24
- rememberDecision(state, pending.conversationId, pending.toolName);
25
- },
26
- [PERMISSION_DECISIONS.DENY]: () => { },
27
- };
28
- function applyDecisionSideEffect(state, pending, decision) {
29
- const handler = DECISION_HANDLERS[decision];
30
- handler(state, pending);
38
+ function pendingOf(state, conversationId) {
39
+ return [...state.pending.values()].filter((p) => p.request.conversationId === conversationId);
31
40
  }
32
- function settlePending(state, pending, decision) {
33
- clearTimeout(pending.timer);
34
- state.pending.delete(pending.requestId);
35
- applyDecisionSideEffect(state, pending, decision);
36
- pending.resolve(decision);
41
+ function denyAll(state, pending, answer) {
42
+ const outcome = { ...DENIED, shouldInterrupt: true };
43
+ const { conversationId } = pending.request;
44
+ for (const other of [pending, ...pendingOf(state, conversationId)]) {
45
+ if (!state.pending.has(other.request.requestId))
46
+ continue;
47
+ settle(state, other, outcome, {
48
+ settledAs: PERMISSION_DECISIONS.DENY_ALL,
49
+ decidedBy: answer.actor,
50
+ });
51
+ }
52
+ state.onDenyAll?.(conversationId);
37
53
  }
38
- function scheduleTimeout(state, requestId) {
54
+ const ANSWER_HANDLERS = {
55
+ allow_once: (state, pending, answer) => settle(state, pending, { isAllowed: true, allowedBy: "approved", keepData: answer.keepData }, { settledAs: answer.decision, decidedBy: answer.actor }),
56
+ allow_rule: (state, pending, answer) => {
57
+ addRule(state, pending, answer.rule);
58
+ settle(state, pending, { isAllowed: true, allowedBy: "approved" }, { settledAs: answer.decision, decidedBy: answer.actor });
59
+ },
60
+ deny: (state, pending, answer) => settle(state, pending, { ...DENIED, feedback: answer.feedback }, { settledAs: answer.decision, decidedBy: answer.actor }),
61
+ deny_all: denyAll,
62
+ };
63
+ function scheduleTimeout(state, requestId, timeoutMs) {
39
64
  return setTimeout(() => {
40
65
  const pending = state.pending.get(requestId);
41
- if (!pending)
66
+ if (pending === undefined)
42
67
  return;
43
68
  console.warn(`${PERMISSION_LOG_PREFIX} ${PERMISSION_TIMEOUT_REASON} (requestId=${requestId})`);
44
- settlePending(state, pending, PERMISSION_DECISIONS.DENY);
45
- }, state.timeoutMs);
69
+ settle(state, pending, { isAllowed: false, allowedBy: "expired" }, { settledAs: PERMISSION_SETTLEMENTS.EXPIRED });
70
+ }, timeoutMs);
46
71
  }
47
- function registerPending(state, req, resolve) {
48
- const requestId = randomUUID();
49
- const timer = scheduleTimeout(state, requestId);
50
- const pending = {
51
- requestId,
52
- conversationId: req.conversationId,
72
+ async function buildPending(req, policy, timeoutMs) {
73
+ const description = await describeRequest({
53
74
  toolName: req.toolName,
54
75
  args: req.args,
55
- resolve,
56
- timer,
57
- };
58
- state.pending.set(requestId, pending);
76
+ hostProjectRoot: policy.hostProjectRoot,
77
+ alwaysAskDependencies: policy.alwaysAskDependencies,
78
+ alwaysAskBlockRemoval: policy.alwaysAskBlockRemoval,
79
+ });
80
+ const createdAtMs = Date.now();
59
81
  return {
60
- requestId,
61
82
  conversationId: req.conversationId,
83
+ requestId: randomUUID(),
84
+ callId: req.callId,
62
85
  toolName: req.toolName,
63
86
  args: req.args,
87
+ summary: buildToolSummary(req.toolName, req.args),
88
+ ...description,
89
+ createdAtMs,
90
+ expiresAtMs: createdAtMs + timeoutMs,
64
91
  };
65
92
  }
66
- function startRequest(state, req) {
67
- if (state.autoApprove) {
68
- return Promise.resolve(PERMISSION_DECISIONS.ALLOW_ONCE);
93
+ function decideWithoutAsking(state, req, request, policy) {
94
+ if (request.alwaysAsk)
95
+ return null;
96
+ const subject = { ...req, hostProjectRoot: policy.hostProjectRoot };
97
+ if (state.rules.matches(req.conversationId, subject)) {
98
+ return { isAllowed: true, allowedBy: "rule" };
69
99
  }
70
- if (hasAllowed(state, req.conversationId, req.toolName)) {
71
- return Promise.resolve(PERMISSION_DECISIONS.ALLOW_ONCE);
100
+ if (policy.isFullAuto)
101
+ return { isAllowed: true, allowedBy: "full_auto" };
102
+ return null;
103
+ }
104
+ async function startRequest(state, req) {
105
+ const policy = state.getPolicy(req.conversationId);
106
+ const timeoutMs = state.timeoutMs ?? policy.timeoutMs;
107
+ const request = await buildPending(req, policy, timeoutMs);
108
+ const automatic = decideWithoutAsking(state, req, request, policy);
109
+ if (automatic !== null) {
110
+ state.onDecided?.({ ...req, outcome: automatic });
111
+ return automatic;
72
112
  }
73
113
  return new Promise((resolve) => {
74
- const event = registerPending(state, req, resolve);
75
- state.onPromptChat(event);
114
+ const timer = scheduleTimeout(state, request.requestId, timeoutMs);
115
+ state.pending.set(request.requestId, { request, resolve, timer });
116
+ state.onPromptChat(request);
76
117
  });
77
118
  }
78
- function handleResolve(state, requestId, decision) {
79
- const pending = state.pending.get(requestId);
80
- if (!pending) {
81
- console.warn(`${PERMISSION_LOG_PREFIX} ${PERMISSION_UNKNOWN_REQUEST_REASON} (requestId=${requestId})`);
119
+ function handleAnswer(state, answer) {
120
+ const pending = state.pending.get(answer.requestId);
121
+ if (pending === undefined) {
122
+ console.warn(`${PERMISSION_LOG_PREFIX} ${PERMISSION_UNKNOWN_REQUEST_REASON} (requestId=${answer.requestId})`);
82
123
  return;
83
124
  }
84
- settlePending(state, pending, decision);
125
+ ANSWER_HANDLERS[answer.decision](state, pending, answer);
85
126
  }
86
- function pendingToRequest(pending) {
87
- return {
88
- requestId: pending.requestId,
89
- conversationId: pending.conversationId,
90
- toolName: pending.toolName,
91
- args: pending.args,
92
- };
93
- }
94
- function collectPendingForConversation(state, conversationId) {
95
- const out = [];
96
- for (const pending of state.pending.values()) {
97
- if (pending.conversationId !== conversationId)
98
- continue;
99
- out.push(pendingToRequest(pending));
127
+ function cancelPending(state, pending) {
128
+ for (const one of pending) {
129
+ settle(state, one, DENIED, { settledAs: PERMISSION_SETTLEMENTS.CANCELLED });
100
130
  }
101
- return out;
102
131
  }
103
- function buildState(opts) {
104
- return {
105
- pending: new Map(),
106
- sessionAllowed: new Map(),
107
- timeoutMs: opts.timeoutMs ?? PERMISSION_TIMEOUT_MS,
108
- autoApprove: false,
109
- onPromptChat: opts.onPromptChat,
110
- };
132
+ function cancelConversation(state, conversationId) {
133
+ cancelPending(state, pendingOf(state, conversationId));
134
+ }
135
+ function cancelCall(state, conversationId, callId) {
136
+ const ofCall = pendingOf(state, conversationId).filter((p) => p.request.callId === callId);
137
+ cancelPending(state, ofCall);
111
138
  }
112
139
  export function createPermissionBus(opts) {
113
- const state = buildState(opts);
140
+ const state = {
141
+ ...opts,
142
+ pending: new Map(),
143
+ rules: opts.rules ?? createPermissionRuleStore(),
144
+ };
114
145
  return {
115
- requestPermission(req) {
116
- return startRequest(state, req);
117
- },
118
- resolvePermission(requestId, decision) {
119
- handleResolve(state, requestId, decision);
120
- },
121
- rememberSessionDecision(conversationId, toolName) {
122
- rememberDecision(state, conversationId, toolName);
123
- },
124
- hasSessionAllowed(conversationId, toolName) {
125
- return hasAllowed(state, conversationId, toolName);
126
- },
146
+ requestPermission: (req) => startRequest(state, req),
147
+ resolvePermission: (answer) => handleAnswer(state, answer),
148
+ getPendingForConversation: (conversationId) => pendingOf(state, conversationId).map((p) => p.request),
149
+ countPending: (conversationId) => conversationId === undefined
150
+ ? state.pending.size
151
+ : pendingOf(state, conversationId).length,
152
+ cancelConversation: (conversationId) => cancelConversation(state, conversationId),
153
+ cancelCall: (conversationId, callId) => cancelCall(state, conversationId, callId),
127
154
  forgetConversation(conversationId) {
128
- state.sessionAllowed.delete(conversationId);
129
- },
130
- getPendingForConversation(conversationId) {
131
- return collectPendingForConversation(state, conversationId);
155
+ cancelConversation(state, conversationId);
156
+ state.rules.forget(conversationId);
132
157
  },
133
- setAutoApprove(autoApprove) {
134
- state.autoApprove = autoApprove;
158
+ listRules: (conversationId) => state.rules.list(conversationId),
159
+ revokeRule(conversationId, ruleId) {
160
+ const isRevoked = state.rules.revoke(conversationId, ruleId);
161
+ if (isRevoked) {
162
+ state.onRulesChanged?.(conversationId, state.rules.list(conversationId));
163
+ }
164
+ return isRevoked;
135
165
  },
136
166
  };
137
167
  }
@@ -1 +1 @@
1
- {"version":3,"file":"permission-bus.js","sourceRoot":"","sources":["../../src/agent/permission-bus.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"permission-bus.js","sourceRoot":"","sources":["../../src/agent/permission-bus.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import type { PermissionKind } from "../constants/audit.js";
2
+ import type { PermissionPreviewType } from "../protocol/events.js";
3
+ import type { PermissionRuleType } from "../protocol/messages.js";
4
+ export declare const CODEX_CHANGE_KIND_ARG = "change_kind";
5
+ export declare const CODEX_CHANGE_DIFF_ARG = "diff";
6
+ export interface RequestDescription {
7
+ kind: PermissionKind;
8
+ alwaysAsk: boolean;
9
+ preview: PermissionPreviewType;
10
+ ruleOptions: PermissionRuleType[];
11
+ }
12
+ export interface DescribeOptions {
13
+ toolName: string;
14
+ args: unknown;
15
+ hostProjectRoot: string;
16
+ alwaysAskDependencies: boolean;
17
+ alwaysAskBlockRemoval: boolean;
18
+ }
19
+ export declare function hostOf(url: string): string | null;
20
+ export declare function describeRequest(options: DescribeOptions): Promise<RequestDescription>;