@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
@@ -1,94 +0,0 @@
1
- <script setup lang="ts">
2
- import { onMounted, ref } from "vue";
3
-
4
- interface ActivityItem {
5
- id: string;
6
- timestampMs: number;
7
- toolName: string;
8
- status: "success" | "error" | "pending";
9
- conversationId: string;
10
- conversationTitle: string;
11
- summary: string;
12
- }
13
-
14
- const { $authFetch } = useAuthFetch();
15
-
16
- const items = ref<ActivityItem[]>([]);
17
- const loading = ref(false);
18
- const error = ref<string | null>(null);
19
-
20
- async function load(): Promise<void> {
21
- loading.value = true;
22
- error.value = null;
23
- try {
24
- const activity = await $authFetch<{ items: ActivityItem[] }>(
25
- "/ai/activity?limit=50",
26
- );
27
- items.value = activity.items ?? [];
28
- } catch (e) {
29
- error.value = e instanceof Error ? e.message : String(e);
30
- } finally {
31
- loading.value = false;
32
- }
33
- }
34
-
35
- onMounted(load);
36
-
37
- const STATUS_COLOR: Record<ActivityItem["status"], string> = {
38
- success: "success",
39
- error: "error",
40
- pending: "warning",
41
- };
42
-
43
- function formatTime(ms: number): string {
44
- return new Date(ms).toLocaleString();
45
- }
46
- </script>
47
-
48
- <template>
49
- <div class="flex w-full flex-col gap-4 pb-10">
50
- <div
51
- v-if="error"
52
- class="border-error bg-error/10 text-error rounded border p-4 text-sm"
53
- >
54
- {{ error }}
55
- </div>
56
-
57
- <div v-else class="border-default rounded border">
58
- <div v-if="loading" class="text-dimmed p-4 text-sm">
59
- Loading activity…
60
- </div>
61
- <div
62
- v-else-if="items.length === 0"
63
- class="text-dimmed p-6 text-center text-sm"
64
- >
65
- No AI actions recorded yet.
66
- </div>
67
- <ul v-else class="divide-default divide-y">
68
- <li
69
- v-for="item in items"
70
- :key="item.id"
71
- class="flex items-start gap-3 p-3"
72
- >
73
- <UIcon name="i-ph-wrench" class="text-dimmed mt-1" />
74
- <div class="min-w-0 flex-1">
75
- <div class="flex items-center gap-2">
76
- <span class="font-medium">{{ item.toolName }}</span>
77
- <UBadge
78
- :color="STATUS_COLOR[item.status]"
79
- variant="subtle"
80
- size="sm"
81
- >
82
- {{ item.status }}
83
- </UBadge>
84
- </div>
85
- <p class="text-muted truncate text-sm">{{ item.summary }}</p>
86
- <p class="text-dimmed text-xs">
87
- {{ item.conversationTitle }} · {{ formatTime(item.timestampMs) }}
88
- </p>
89
- </div>
90
- </li>
91
- </ul>
92
- </div>
93
- </div>
94
- </template>
@@ -1,387 +0,0 @@
1
- <script setup lang="ts">
2
- import { computed, onMounted, ref } from "vue";
3
-
4
- type Mode = "normal" | "acceptEdits" | "plan" | "auto";
5
- type Thinking = "off" | "low" | "medium" | "high";
6
- type GenerationMode = "safe" | "vibe";
7
- type ProviderName = "claude" | "codex";
8
-
9
- interface ProviderAvailability {
10
- available: boolean;
11
- reason?: string;
12
- }
13
-
14
- interface AiSettings {
15
- provider: ProviderName;
16
- mode: Mode;
17
- thinking: Thinking;
18
- generationMode: GenerationMode;
19
- allowLocalSkills: boolean;
20
- builderAvailable: boolean;
21
- providers: Record<ProviderName, ProviderAvailability>;
22
- }
23
-
24
- const { $authFetch } = useAuthFetch();
25
-
26
- const settings = ref<AiSettings>({
27
- provider: "claude",
28
- mode: "normal",
29
- thinking: "medium",
30
- generationMode: "safe",
31
- allowLocalSkills: false,
32
- builderAvailable: false,
33
- providers: { claude: { available: true }, codex: { available: false } },
34
- });
35
- const loading = ref(false);
36
- const saving = ref(false);
37
- const error = ref<string | null>(null);
38
-
39
- const MODE_OPTIONS: Array<{ value: Mode; label: string; hint: string }> = [
40
- { value: "normal", label: "Normal", hint: "Ask before each tool action" },
41
- {
42
- value: "acceptEdits",
43
- label: "Accept edits",
44
- hint: "Auto-accept file edits, ask for the rest",
45
- },
46
- { value: "plan", label: "Plan", hint: "Plan only — propose without changes" },
47
- { value: "auto", label: "Auto", hint: "Auto-approve every tool action" },
48
- ];
49
-
50
- // Safe mode refuses raw edits whatever the mode, and Auto stops short of
51
- // approving everything there, so the mode hint says so while it is active.
52
- const SAFE_MODE_MODE_NOTE =
53
- "Safe mode: raw edits and shell commands stay blocked, and Auto still asks before other actions.";
54
-
55
- interface ProviderOption {
56
- value: ProviderName;
57
- label: string;
58
- }
59
-
60
- const PROVIDER_OPTIONS: ProviderOption[] = [
61
- { value: "claude", label: "Anthropic (Claude)" },
62
- { value: "codex", label: "OpenAI (Codex)" },
63
- ];
64
-
65
- // One control, two meanings: a token budget on Claude, a reasoning effort level
66
- // on Codex, which has no "off" and maps it to its lowest level.
67
- const THINKING_HINTS: Record<ProviderName, string> = {
68
- claude: "Thinking budget handed to the model.",
69
- codex:
70
- 'Reasoning effort handed to the model. Codex has no "off": it maps to the lowest level.',
71
- };
72
-
73
- const THINKING_OPTIONS: Array<{ value: Thinking; label: string }> = [
74
- { value: "off", label: "Off" },
75
- { value: "low", label: "Low" },
76
- { value: "medium", label: "Medium" },
77
- { value: "high", label: "High" },
78
- ];
79
-
80
- async function load(): Promise<void> {
81
- loading.value = true;
82
- error.value = null;
83
- try {
84
- settings.value = await $authFetch<AiSettings>("/ai/settings");
85
- } catch (e) {
86
- error.value = e instanceof Error ? e.message : String(e);
87
- } finally {
88
- loading.value = false;
89
- }
90
- }
91
-
92
- async function persist(): Promise<void> {
93
- saving.value = true;
94
- error.value = null;
95
- try {
96
- settings.value = await $authFetch<AiSettings>("/ai/settings", {
97
- method: "PUT",
98
- body: settings.value,
99
- });
100
- } catch (e) {
101
- error.value = e instanceof Error ? e.message : String(e);
102
- } finally {
103
- saving.value = false;
104
- }
105
- }
106
-
107
- function availabilityOf(name: ProviderName): ProviderAvailability {
108
- return settings.value.providers?.[name] ?? { available: false };
109
- }
110
-
111
- function providerLabel(option: ProviderOption): string {
112
- return availabilityOf(option.value).available
113
- ? option.label
114
- : `${option.label} — unavailable`;
115
- }
116
-
117
- const activeProvider = computed(() => settings.value.provider);
118
-
119
- const providerReason = computed(
120
- () => availabilityOf(settings.value.provider).reason ?? null,
121
- );
122
-
123
- function onProvider(event: Event): void {
124
- const next = (event.target as HTMLSelectElement).value as ProviderName;
125
- if (!availabilityOf(next).available) {
126
- // The option is disabled, so this only fires on a stale DOM; snap back.
127
- (event.target as HTMLSelectElement).value = settings.value.provider;
128
- return;
129
- }
130
- settings.value.provider = next;
131
- void persist();
132
- }
133
-
134
- function onMode(event: Event): void {
135
- settings.value.mode = (event.target as HTMLSelectElement).value as Mode;
136
- void persist();
137
- }
138
-
139
- function onThinking(event: Event): void {
140
- settings.value.thinking = (event.target as HTMLSelectElement)
141
- .value as Thinking;
142
- void persist();
143
- }
144
-
145
- function onAllowLocalSkills(event: Event): void {
146
- settings.value.allowLocalSkills = (event.target as HTMLInputElement).checked;
147
- void persist();
148
- }
149
-
150
- const activeMode = computed<GenerationMode>(() =>
151
- settings.value.generationMode === "safe" && settings.value.builderAvailable
152
- ? "safe"
153
- : "vibe",
154
- );
155
-
156
- function onGenerationMode(mode: GenerationMode): void {
157
- if (mode === "safe" && !settings.value.builderAvailable) return;
158
- if (mode === settings.value.generationMode) return;
159
- settings.value.generationMode = mode;
160
- void persist();
161
- }
162
-
163
- onMounted(load);
164
-
165
- const SELECT_CLASS =
166
- "w-full rounded-md border border-default bg-elevated px-3 py-2 text-sm";
167
- </script>
168
-
169
- <template>
170
- <div class="flex w-full flex-col gap-5 pb-10">
171
- <div
172
- v-if="error"
173
- class="border-error bg-error/10 text-error rounded-lg border p-4 text-sm"
174
- >
175
- {{ error }}
176
- </div>
177
-
178
- <!-- Row 1: Provider (left) · Default behavior (right) -->
179
- <div class="grid gap-5 lg:grid-cols-2">
180
- <section class="border-default bg-elevated/30 rounded-xl border">
181
- <header class="border-default border-b px-5 py-4">
182
- <h2 class="text-highlighted text-sm font-semibold">Provider</h2>
183
- </header>
184
- <div class="flex flex-col gap-4 p-5">
185
- <div>
186
- <label class="text-toned mb-1.5 block text-xs font-medium">
187
- Provider
188
- </label>
189
- <select
190
- :class="SELECT_CLASS"
191
- :value="activeProvider"
192
- :disabled="loading || saving"
193
- @change="onProvider"
194
- >
195
- <option
196
- v-for="option in PROVIDER_OPTIONS"
197
- :key="option.value"
198
- :value="option.value"
199
- :disabled="!availabilityOf(option.value).available"
200
- >
201
- {{ providerLabel(option) }}
202
- </option>
203
- </select>
204
- <p v-if="providerReason" class="text-error mt-1.5 text-xs">
205
- {{ providerReason }}
206
- </p>
207
- <p class="text-dimmed mt-1.5 text-xs">
208
- The provider runs its own default model. Switching provider ends
209
- the live context of open conversations; their transcripts are
210
- kept.
211
- </p>
212
- </div>
213
- </div>
214
- </section>
215
-
216
- <section class="border-default bg-elevated/30 rounded-xl border">
217
- <header class="border-default border-b px-5 py-4">
218
- <h2 class="text-highlighted text-sm font-semibold">
219
- Default behavior
220
- </h2>
221
- </header>
222
- <div class="flex flex-col gap-4 p-5">
223
- <div>
224
- <label class="text-toned mb-1.5 block text-xs font-medium">
225
- Operating mode
226
- </label>
227
- <select
228
- :class="SELECT_CLASS"
229
- :value="settings.mode"
230
- :disabled="loading || saving"
231
- @change="onMode"
232
- >
233
- <option
234
- v-for="option in MODE_OPTIONS"
235
- :key="option.value"
236
- :value="option.value"
237
- >
238
- {{ option.label }}
239
- </option>
240
- </select>
241
- <p class="text-dimmed mt-1.5 text-xs">
242
- {{ MODE_OPTIONS.find((o) => o.value === settings.mode)?.hint }}
243
- </p>
244
- <p v-if="activeMode === 'safe'" class="text-dimmed mt-1 text-xs">
245
- {{ SAFE_MODE_MODE_NOTE }}
246
- </p>
247
- </div>
248
- <div>
249
- <label class="text-toned mb-1.5 block text-xs font-medium">
250
- Thinking
251
- </label>
252
- <select
253
- :class="SELECT_CLASS"
254
- :value="settings.thinking"
255
- :disabled="loading || saving"
256
- @change="onThinking"
257
- >
258
- <option
259
- v-for="option in THINKING_OPTIONS"
260
- :key="option.value"
261
- :value="option.value"
262
- >
263
- {{ option.label }}
264
- </option>
265
- </select>
266
- <p class="text-dimmed mt-1.5 text-xs">
267
- {{ THINKING_HINTS[settings.provider] }}
268
- </p>
269
- </div>
270
- <div>
271
- <label class="flex items-start gap-3">
272
- <input
273
- type="checkbox"
274
- class="border-default mt-0.5 size-4 rounded"
275
- :checked="settings.allowLocalSkills"
276
- :disabled="loading || saving"
277
- @change="onAllowLocalSkills"
278
- />
279
- <span>
280
- <span class="text-toned block text-xs font-medium">
281
- Use machine-local skills (~/.claude/skills)
282
- </span>
283
- <span class="text-dimmed mt-0.5 block text-xs">
284
- Adds the skills from your machine (
285
- <code>~/.claude/skills</code>
286
- ) on top of the ones bundled by modules. Machine-local, so not
287
- shared with other environments. Off by default.
288
- </span>
289
- </span>
290
- </label>
291
- </div>
292
- </div>
293
- </section>
294
- </div>
295
-
296
- <!-- Row 2: Generation mode (full width) -->
297
- <section class="border-default bg-elevated/30 rounded-xl border">
298
- <header class="border-default border-b px-5 py-4">
299
- <h2 class="text-highlighted text-sm font-semibold">Generation mode</h2>
300
- <p class="text-dimmed mt-0.5 text-xs">
301
- Default mode applied to new prompts
302
- </p>
303
- </header>
304
- <div class="grid gap-4 p-5 sm:grid-cols-2">
305
- <button
306
- type="button"
307
- :disabled="!settings.builderAvailable || loading || saving"
308
- class="rounded-lg border p-4 text-left transition"
309
- :class="[
310
- activeMode === 'safe'
311
- ? 'border-primary bg-primary/10'
312
- : 'border-default',
313
- settings.builderAvailable
314
- ? 'hover:border-primary/60 cursor-pointer'
315
- : 'cursor-not-allowed opacity-60',
316
- ]"
317
- @click="onGenerationMode('safe')"
318
- >
319
- <div class="mb-2 flex items-center gap-2">
320
- <UIcon
321
- name="i-ph-shield"
322
- :class="activeMode === 'safe' ? 'text-primary' : 'text-muted'"
323
- />
324
- <b class="text-highlighted">Safe code</b>
325
- <UBadge
326
- v-if="activeMode === 'safe'"
327
- class="ml-auto"
328
- color="primary"
329
- variant="subtle"
330
- size="sm"
331
- >
332
- Active
333
- </UBadge>
334
- <UBadge
335
- v-else-if="!settings.builderAvailable"
336
- class="ml-auto"
337
- color="neutral"
338
- variant="subtle"
339
- size="sm"
340
- >
341
- Unavailable
342
- </UBadge>
343
- </div>
344
- <p class="text-dimmed text-xs leading-relaxed">
345
- Acts only through the Builder (MCP) — emits accepted configurations,
346
- never raw code.
347
- <template v-if="!settings.builderAvailable">
348
- Available once the Builder module is loaded.
349
- </template>
350
- </p>
351
- </button>
352
- <button
353
- type="button"
354
- :disabled="loading || saving"
355
- class="rounded-lg border p-4 text-left transition"
356
- :class="
357
- activeMode === 'vibe'
358
- ? 'border-primary bg-primary/10'
359
- : 'border-default hover:border-primary/60 cursor-pointer'
360
- "
361
- @click="onGenerationMode('vibe')"
362
- >
363
- <div class="mb-2 flex items-center gap-2">
364
- <UIcon
365
- name="i-ph-magic-wand"
366
- :class="activeMode === 'vibe' ? 'text-primary' : 'text-muted'"
367
- />
368
- <b class="text-highlighted">Vibe code</b>
369
- <UBadge
370
- v-if="activeMode === 'vibe'"
371
- class="ml-auto"
372
- color="primary"
373
- variant="subtle"
374
- size="sm"
375
- >
376
- Active
377
- </UBadge>
378
- </div>
379
- <p class="text-dimmed text-xs leading-relaxed">
380
- Free to write custom code and bespoke pages beyond the Builder
381
- blocks — full creative range.
382
- </p>
383
- </button>
384
- </div>
385
- </section>
386
- </div>
387
- </template>
@@ -1,230 +0,0 @@
1
- <script setup lang="ts">
2
- import { computed, onMounted, ref } from "vue";
3
-
4
- interface SkillItem {
5
- id: string;
6
- name: string;
7
- description: string;
8
- icon?: string;
9
- category?: string;
10
- tags: string[];
11
- provenance: string;
12
- body: string;
13
- }
14
-
15
- const LOCAL_PROVENANCE = "local";
16
-
17
- const { $authFetch } = useAuthFetch();
18
-
19
- const items = ref<SkillItem[]>([]);
20
- const loading = ref(false);
21
- const error = ref<string | null>(null);
22
- const search = ref("");
23
- const selected = ref<SkillItem | null>(null);
24
-
25
- async function load(): Promise<void> {
26
- loading.value = true;
27
- error.value = null;
28
- try {
29
- const res = await $authFetch<{ items: SkillItem[] }>("/ai/skills");
30
- items.value = res.items;
31
- } catch (e) {
32
- error.value = e instanceof Error ? e.message : String(e);
33
- } finally {
34
- loading.value = false;
35
- }
36
- }
37
-
38
- onMounted(load);
39
-
40
- // Flat list, sorted by provenance then name so skills from the same package
41
- // stay adjacent without a grouping layer.
42
- const filtered = computed(() => {
43
- const q = search.value.trim().toLowerCase();
44
- return items.value
45
- .filter((s) => {
46
- if (q.length === 0) return true;
47
- const haystack = [s.name, s.description, s.category ?? "", ...s.tags]
48
- .join(" ")
49
- .toLowerCase();
50
- return haystack.includes(q);
51
- })
52
- .sort(
53
- (a, b) =>
54
- a.provenance.localeCompare(b.provenance) ||
55
- a.name.localeCompare(b.name),
56
- );
57
- });
58
-
59
- function isLocal(provenance: string): boolean {
60
- return provenance === LOCAL_PROVENANCE;
61
- }
62
-
63
- function open(skill: SkillItem): void {
64
- selected.value = skill;
65
- }
66
-
67
- function close(): void {
68
- selected.value = null;
69
- }
70
-
71
- const CARD_CLASS =
72
- "flex flex-col gap-2 rounded-xl border border-default bg-elevated/30 p-4 text-left transition-colors hover:border-primary";
73
- </script>
74
-
75
- <template>
76
- <div class="flex w-full flex-col gap-5 pb-10">
77
- <div
78
- v-if="error"
79
- class="border-error bg-error/10 text-error rounded-lg border p-4 text-sm"
80
- >
81
- {{ error }}
82
- </div>
83
-
84
- <!-- Stat row -->
85
- <div class="grid gap-4 sm:grid-cols-2">
86
- <div class="border-default bg-elevated/30 rounded-xl border p-4">
87
- <p class="text-toned text-xs font-medium">Total skills</p>
88
- <p class="text-highlighted mt-1 text-2xl font-semibold">
89
- {{ items.length }}
90
- </p>
91
- </div>
92
- </div>
93
-
94
- <!-- Controls -->
95
- <div class="flex flex-wrap items-center gap-3">
96
- <input
97
- v-model="search"
98
- type="search"
99
- placeholder="Search skills…"
100
- class="border-default bg-elevated w-full max-w-xs rounded-md border px-3 py-2 text-sm"
101
- />
102
- </div>
103
-
104
- <p
105
- v-if="!loading && items.length === 0"
106
- class="border-default bg-elevated/30 text-dimmed rounded-lg border p-6 text-center text-sm"
107
- >
108
- No skills are loaded. Module-contributed skills appear here, plus
109
- machine-local skills when enabled in Settings.
110
- </p>
111
-
112
- <!-- Skill cards -->
113
- <div class="grid gap-3 sm:grid-cols-2 lg:grid-cols-3">
114
- <button
115
- v-for="skill in filtered"
116
- :key="skill.id"
117
- type="button"
118
- :class="CARD_CLASS"
119
- @click="open(skill)"
120
- >
121
- <div class="flex items-start gap-2">
122
- <UIcon
123
- :name="skill.icon || 'i-ph-sparkle'"
124
- class="text-primary mt-0.5 shrink-0"
125
- />
126
- <div class="min-w-0">
127
- <p class="text-highlighted truncate text-sm font-semibold">
128
- {{ skill.name }}
129
- </p>
130
- <p class="text-dimmed truncate text-xs">
131
- {{ skill.provenance }}
132
- </p>
133
- </div>
134
- <UBadge
135
- v-if="isLocal(skill.provenance)"
136
- class="ml-auto shrink-0"
137
- color="warning"
138
- variant="subtle"
139
- size="sm"
140
- >
141
- Local
142
- </UBadge>
143
- </div>
144
- <p class="text-toned line-clamp-3 text-xs leading-relaxed">
145
- {{ skill.description }}
146
- </p>
147
- <div v-if="skill.tags.length" class="mt-auto flex flex-wrap gap-1">
148
- <UBadge
149
- v-for="tag in skill.tags"
150
- :key="tag"
151
- color="neutral"
152
- variant="soft"
153
- size="sm"
154
- >
155
- {{ tag }}
156
- </UBadge>
157
- </div>
158
- </button>
159
- </div>
160
-
161
- <!-- Detail drawer -->
162
- <div
163
- v-if="selected"
164
- class="fixed inset-0 z-50 flex justify-end bg-black/40"
165
- @click.self="close"
166
- >
167
- <div
168
- class="border-default bg-default flex h-full w-full max-w-lg flex-col overflow-y-auto border-l p-6 shadow-xl"
169
- >
170
- <div class="mb-4 flex items-start gap-3">
171
- <UIcon
172
- :name="selected.icon || 'i-ph-sparkle'"
173
- class="text-primary mt-1 shrink-0 text-xl"
174
- />
175
- <div class="min-w-0 flex-1">
176
- <h2 class="text-highlighted text-lg font-semibold">
177
- {{ selected.name }}
178
- </h2>
179
- <p class="text-dimmed text-xs">{{ selected.id }}</p>
180
- </div>
181
- <UButton
182
- icon="i-ph-x"
183
- color="neutral"
184
- variant="ghost"
185
- size="sm"
186
- square
187
- @click="close"
188
- />
189
- </div>
190
-
191
- <div class="mb-4 flex flex-wrap items-center gap-2">
192
- <UBadge color="primary" variant="subtle" size="sm">
193
- {{ selected.provenance }}
194
- </UBadge>
195
- <UBadge
196
- v-if="isLocal(selected.provenance)"
197
- color="warning"
198
- variant="subtle"
199
- size="sm"
200
- >
201
- Local — this machine
202
- </UBadge>
203
- <UBadge
204
- v-for="tag in selected.tags"
205
- :key="tag"
206
- color="neutral"
207
- variant="soft"
208
- size="sm"
209
- >
210
- {{ tag }}
211
- </UBadge>
212
- </div>
213
-
214
- <p class="text-toned mb-4 text-sm leading-relaxed">
215
- {{ selected.description }}
216
- </p>
217
-
218
- <h3
219
- class="text-dimmed mb-2 text-xs font-semibold uppercase tracking-wide"
220
- >
221
- Instructions (SKILL.md)
222
- </h3>
223
- <pre
224
- class="border-default bg-elevated/40 text-toned whitespace-pre-wrap rounded-lg border p-4 text-xs leading-relaxed"
225
- >{{ selected.body }}</pre
226
- >
227
- </div>
228
- </div>
229
- </div>
230
- </template>