@antelopejs/dms-ai 0.9.0 → 0.9.2

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 (293) hide show
  1. package/README.md +32 -34
  2. package/dist/constants/http.d.ts +1 -0
  3. package/dist/constants/http.js +1 -0
  4. package/dist/constants/http.js.map +1 -1
  5. package/dist/database/catalog.js +21 -3
  6. package/dist/database/catalog.js.map +1 -1
  7. package/dist/index.js.map +1 -1
  8. package/dist/lifecycle/sidecar-owner.js.map +1 -1
  9. package/dist/lifecycle/skill-sources.js +19 -146
  10. package/dist/lifecycle/skill-sources.js.map +1 -1
  11. package/dist/lifecycle/spawn-sidecar.js +2 -2
  12. package/dist/lifecycle/spawn-sidecar.js.map +1 -1
  13. package/dist/lifecycle/terminate-process.d.ts +1 -0
  14. package/dist/lifecycle/terminate-process.js +8 -4
  15. package/dist/lifecycle/terminate-process.js.map +1 -1
  16. package/dist/logging/log-buffer.js +22 -14
  17. package/dist/logging/log-buffer.js.map +1 -1
  18. package/dist/pages/settings/availability.js +41 -5
  19. package/dist/pages/settings/availability.js.map +1 -1
  20. package/dist/pages/settings/options.d.ts +2 -1
  21. package/dist/pages/settings/options.js +29 -8
  22. package/dist/pages/settings/options.js.map +1 -1
  23. package/dist/pages/settings/sections.js +15 -4
  24. package/dist/pages/settings/sections.js.map +1 -1
  25. package/dist/pages-registry.js +2 -6
  26. package/dist/pages-registry.js.map +1 -1
  27. package/dist/routes/activity.js +4 -3
  28. package/dist/routes/activity.js.map +1 -1
  29. package/dist/routes/banner.d.ts +2 -1
  30. package/dist/routes/banner.js +4 -1
  31. package/dist/routes/banner.js.map +1 -1
  32. package/dist/routes/builder.d.ts +5 -5
  33. package/dist/routes/builder.js +62 -44
  34. package/dist/routes/builder.js.map +1 -1
  35. package/dist/routes/changes.js +8 -7
  36. package/dist/routes/changes.js.map +1 -1
  37. package/dist/routes/codex-account.js +11 -5
  38. package/dist/routes/codex-account.js.map +1 -1
  39. package/dist/routes/content-json.d.ts +6 -0
  40. package/dist/routes/content-json.js +12 -0
  41. package/dist/routes/content-json.js.map +1 -0
  42. package/dist/routes/metrics.js +8 -8
  43. package/dist/routes/metrics.js.map +1 -1
  44. package/dist/routes/settings.js +4 -3
  45. package/dist/routes/settings.js.map +1 -1
  46. package/dist/routes/sidecar-answers.d.ts +10 -0
  47. package/dist/routes/sidecar-answers.js +90 -0
  48. package/dist/routes/sidecar-answers.js.map +1 -0
  49. package/dist/routes/sidecar-results.d.ts +2 -1
  50. package/dist/routes/sidecar-results.js +8 -2
  51. package/dist/routes/sidecar-results.js.map +1 -1
  52. package/dist/routes/skills.d.ts +2 -2
  53. package/dist/routes/skills.js +3 -2
  54. package/dist/routes/skills.js.map +1 -1
  55. package/dist/routes/status.js +23 -4
  56. package/dist/routes/status.js.map +1 -1
  57. package/dist/sidecar/answer-schemas.d.ts +8 -0
  58. package/dist/sidecar/answer-schemas.js +60 -0
  59. package/dist/sidecar/answer-schemas.js.map +1 -0
  60. package/dist/sidecar/http-client.d.ts +4 -2
  61. package/dist/sidecar/http-client.js +5 -2
  62. package/dist/sidecar/http-client.js.map +1 -1
  63. package/dist/sidecar/index.d.ts +1 -0
  64. package/dist/sidecar/index.js +1 -0
  65. package/dist/sidecar/index.js.map +1 -1
  66. package/dist/sidecar/settings-values.d.ts +3 -0
  67. package/dist/sidecar/settings-values.js +33 -1
  68. package/dist/sidecar/settings-values.js.map +1 -1
  69. package/dist/types/status.d.ts +2 -2
  70. package/dist/vocabulary/enumerations.js +2 -0
  71. package/dist/vocabulary/enumerations.js.map +1 -1
  72. package/frontend-vue/app/chat/components/ChatView.vue +16 -49
  73. package/frontend-vue/app/chat/components/Composer.vue +23 -39
  74. package/frontend-vue/app/chat/components/NoticeCard.vue +9 -0
  75. package/frontend-vue/app/chat/components/ProviderNotice.vue +14 -3
  76. package/frontend-vue/app/chat/composables/conversation-events.ts +0 -3
  77. package/frontend-vue/app/chat/composables/useConversationMode.ts +8 -11
  78. package/frontend-vue/app/chat/composables/useFollowScroll.ts +77 -0
  79. package/frontend-vue/app/chat/constants/modes.ts +15 -0
  80. package/frontend-vue/app/chat/constants/protocol.ts +0 -1
  81. package/frontend-vue/app/chat/constants/settings.ts +1 -1
  82. package/frontend-vue/app/chat/types/protocol.ts +11 -9
  83. package/frontend-vue/app/chat/types/settings.ts +7 -2
  84. package/frontend-vue/app/chat/utils/permission-view.ts +1 -0
  85. package/frontend-vue/app/views/constants.ts +2 -0
  86. package/frontend-vue/app/views/types.ts +3 -1
  87. package/frontend-vue/i18n/locales/dms-ai-pages-en-GB.json +21 -11
  88. package/frontend-vue/i18n/locales/dms-ai-pages-fr-FR.json +21 -11
  89. package/frontend-vue/i18n/locales/dms-ai-panel-en-GB.json +11 -21
  90. package/frontend-vue/i18n/locales/dms-ai-panel-fr-FR.json +11 -21
  91. package/frontend-vue/i18n/locales/dms-ai-views-en-GB.json +2 -0
  92. package/frontend-vue/i18n/locales/dms-ai-views-fr-FR.json +2 -0
  93. package/frontend-vue/package.json +1 -1
  94. package/frontend-vue/tests/chat/chat-scroll.test.ts +251 -0
  95. package/frontend-vue/tests/chat/conversation-events.test.ts +1 -3
  96. package/frontend-vue/tests/chat/provider-notice.test.ts +33 -0
  97. package/frontend-vue/tests/chat-panel.test.ts +2 -4
  98. package/frontend-vue/tests/panel-modes.test.ts +146 -0
  99. package/frontend-vue/tests/panel-questions.test.ts +1 -19
  100. package/frontend-vue/tests/panel-states.test.ts +12 -16
  101. package/frontend-vue/tests/support/fake-layout.ts +119 -0
  102. package/frontend-vue/tests/support/panel-harness.ts +14 -6
  103. package/frontend-vue/tests/support/setup-layout.ts +3 -0
  104. package/frontend-vue/tests/support/stubs.ts +2 -0
  105. package/frontend-vue/vitest.config.ts +1 -0
  106. package/package.json +16 -10
  107. package/sidecar/dist/agent/always-ask-files.d.ts +2 -0
  108. package/sidecar/dist/agent/always-ask-files.js +34 -0
  109. package/sidecar/dist/agent/always-ask-files.js.map +1 -0
  110. package/sidecar/dist/agent/conversation-modes.d.ts +3 -12
  111. package/sidecar/dist/agent/conversation-modes.js +16 -69
  112. package/sidecar/dist/agent/conversation-modes.js.map +1 -1
  113. package/sidecar/dist/agent/effective-mode.d.ts +2 -5
  114. package/sidecar/dist/agent/effective-mode.js +1 -15
  115. package/sidecar/dist/agent/effective-mode.js.map +1 -1
  116. package/sidecar/dist/agent/permission-bus.d.ts +1 -2
  117. package/sidecar/dist/agent/permission-bus.js +1 -3
  118. package/sidecar/dist/agent/permission-bus.js.map +1 -1
  119. package/sidecar/dist/agent/permission-preview.d.ts +6 -0
  120. package/sidecar/dist/agent/permission-preview.js +35 -10
  121. package/sidecar/dist/agent/permission-preview.js.map +1 -1
  122. package/sidecar/dist/agent/permission-rules.js +2 -2
  123. package/sidecar/dist/agent/permission-rules.js.map +1 -1
  124. package/sidecar/dist/agent/project-secrets.d.ts +7 -0
  125. package/sidecar/dist/agent/project-secrets.js +61 -0
  126. package/sidecar/dist/agent/project-secrets.js.map +1 -0
  127. package/sidecar/dist/agent/provider.d.ts +5 -4
  128. package/sidecar/dist/agent/runner.d.ts +3 -2
  129. package/sidecar/dist/agent/runner.js +9 -3
  130. package/sidecar/dist/agent/runner.js.map +1 -1
  131. package/sidecar/dist/agent/session.d.ts +3 -3
  132. package/sidecar/dist/agent/session.js.map +1 -1
  133. package/sidecar/dist/agent/tool-kinds.d.ts +7 -1
  134. package/sidecar/dist/agent/tool-kinds.js +24 -5
  135. package/sidecar/dist/agent/tool-kinds.js.map +1 -1
  136. package/sidecar/dist/agent/typecheck.js +14 -1
  137. package/sidecar/dist/agent/typecheck.js.map +1 -1
  138. package/sidecar/dist/audit/activity-query.js +2 -0
  139. package/sidecar/dist/audit/activity-query.js.map +1 -1
  140. package/sidecar/dist/audit/activity.js +1 -0
  141. package/sidecar/dist/audit/activity.js.map +1 -1
  142. package/sidecar/dist/audit/call-audit.js.map +1 -1
  143. package/sidecar/dist/builder/builder-client.d.ts +3 -1
  144. package/sidecar/dist/builder/builder-client.js +13 -1
  145. package/sidecar/dist/builder/builder-client.js.map +1 -1
  146. package/sidecar/dist/constants/audit.d.ts +1 -3
  147. package/sidecar/dist/constants/audit.js +2 -1
  148. package/sidecar/dist/constants/audit.js.map +1 -1
  149. package/sidecar/dist/constants/builder.d.ts +3 -0
  150. package/sidecar/dist/constants/builder.js +3 -0
  151. package/sidecar/dist/constants/builder.js.map +1 -1
  152. package/sidecar/dist/constants/claude.d.ts +6 -0
  153. package/sidecar/dist/constants/claude.js +6 -0
  154. package/sidecar/dist/constants/claude.js.map +1 -1
  155. package/sidecar/dist/constants/codex.d.ts +4 -0
  156. package/sidecar/dist/constants/codex.js +4 -0
  157. package/sidecar/dist/constants/codex.js.map +1 -1
  158. package/sidecar/dist/constants/permissions.d.ts +2 -0
  159. package/sidecar/dist/constants/permissions.js +23 -0
  160. package/sidecar/dist/constants/permissions.js.map +1 -1
  161. package/sidecar/dist/constants/project-secrets.d.ts +5 -0
  162. package/sidecar/dist/constants/project-secrets.js +20 -0
  163. package/sidecar/dist/constants/project-secrets.js.map +1 -0
  164. package/sidecar/dist/constants/providers.d.ts +2 -0
  165. package/sidecar/dist/constants/providers.js +1 -0
  166. package/sidecar/dist/constants/providers.js.map +1 -1
  167. package/sidecar/dist/constants/settings.d.ts +1 -2
  168. package/sidecar/dist/constants/settings.js +2 -9
  169. package/sidecar/dist/constants/settings.js.map +1 -1
  170. package/sidecar/dist/constants/tool-kinds.d.ts +67 -2
  171. package/sidecar/dist/constants/tool-kinds.js +111 -34
  172. package/sidecar/dist/constants/tool-kinds.js.map +1 -1
  173. package/sidecar/dist/index.js.map +1 -1
  174. package/sidecar/dist/mcp/http-binding.js +1 -1
  175. package/sidecar/dist/mcp/http-binding.js.map +1 -1
  176. package/sidecar/dist/mcp/tools/builder-compose.d.ts +4 -4
  177. package/sidecar/dist/mcp/tools/builder-compose.js +4 -3
  178. package/sidecar/dist/mcp/tools/builder-compose.js.map +1 -1
  179. package/sidecar/dist/mcp/tools/builder-expr.d.ts +5 -2
  180. package/sidecar/dist/mcp/tools/builder-expr.js +8 -11
  181. package/sidecar/dist/mcp/tools/builder-expr.js.map +1 -1
  182. package/sidecar/dist/mcp/tools/builder-gate.js +3 -1
  183. package/sidecar/dist/mcp/tools/builder-gate.js.map +1 -1
  184. package/sidecar/dist/mcp/tools/builder-project.d.ts +2 -1
  185. package/sidecar/dist/mcp/tools/builder-project.js +94 -16
  186. package/sidecar/dist/mcp/tools/builder-project.js.map +1 -1
  187. package/sidecar/dist/mcp/tools/builder-queries.d.ts +6 -6
  188. package/sidecar/dist/mcp/tools/builder-queries.js +9 -10
  189. package/sidecar/dist/mcp/tools/builder-queries.js.map +1 -1
  190. package/sidecar/dist/mcp/tools/builder-table-view.js +10 -8
  191. package/sidecar/dist/mcp/tools/builder-table-view.js.map +1 -1
  192. package/sidecar/dist/mcp/tools/builder.d.ts +14 -14
  193. package/sidecar/dist/mcp/tools/builder.js +17 -12
  194. package/sidecar/dist/mcp/tools/builder.js.map +1 -1
  195. package/sidecar/dist/protocol/events.d.ts +97 -63
  196. package/sidecar/dist/protocol/events.js +14 -8
  197. package/sidecar/dist/protocol/events.js.map +1 -1
  198. package/sidecar/dist/protocol/messages.d.ts +54 -49
  199. package/sidecar/dist/protocol/messages.js +8 -13
  200. package/sidecar/dist/protocol/messages.js.map +1 -1
  201. package/sidecar/dist/providers/claude/config.d.ts +3 -3
  202. package/sidecar/dist/providers/claude/config.js +4 -2
  203. package/sidecar/dist/providers/claude/config.js.map +1 -1
  204. package/sidecar/dist/providers/claude/provider.js +20 -26
  205. package/sidecar/dist/providers/claude/provider.js.map +1 -1
  206. package/sidecar/dist/providers/claude/safe-mode.d.ts +5 -5
  207. package/sidecar/dist/providers/claude/safe-mode.js +49 -30
  208. package/sidecar/dist/providers/claude/safe-mode.js.map +1 -1
  209. package/sidecar/dist/providers/claude/sdk-loader.js +2 -5
  210. package/sidecar/dist/providers/claude/sdk-loader.js.map +1 -1
  211. package/sidecar/dist/providers/claude/secret-files.d.ts +2 -0
  212. package/sidecar/dist/providers/claude/secret-files.js +50 -0
  213. package/sidecar/dist/providers/claude/secret-files.js.map +1 -0
  214. package/sidecar/dist/providers/claude/session-stream.d.ts +4 -9
  215. package/sidecar/dist/providers/claude/session-stream.js +22 -0
  216. package/sidecar/dist/providers/claude/session-stream.js.map +1 -1
  217. package/sidecar/dist/providers/claude/tool-guard.d.ts +14 -0
  218. package/sidecar/dist/providers/claude/tool-guard.js +112 -0
  219. package/sidecar/dist/providers/claude/tool-guard.js.map +1 -0
  220. package/sidecar/dist/providers/codex/adapter.d.ts +10 -0
  221. package/sidecar/dist/providers/codex/adapter.js +20 -5
  222. package/sidecar/dist/providers/codex/adapter.js.map +1 -1
  223. package/sidecar/dist/providers/codex/client.d.ts +3 -1
  224. package/sidecar/dist/providers/codex/client.js +26 -14
  225. package/sidecar/dist/providers/codex/client.js.map +1 -1
  226. package/sidecar/dist/providers/codex/config.d.ts +6 -17
  227. package/sidecar/dist/providers/codex/config.js +9 -56
  228. package/sidecar/dist/providers/codex/config.js.map +1 -1
  229. package/sidecar/dist/providers/codex/mcp-elicitation.d.ts +21 -0
  230. package/sidecar/dist/providers/codex/mcp-elicitation.js +66 -0
  231. package/sidecar/dist/providers/codex/mcp-elicitation.js.map +1 -0
  232. package/sidecar/dist/providers/codex/module.js +1 -1
  233. package/sidecar/dist/providers/codex/module.js.map +1 -1
  234. package/sidecar/dist/providers/codex/patch-directories.d.ts +6 -0
  235. package/sidecar/dist/providers/codex/patch-directories.js +53 -0
  236. package/sidecar/dist/providers/codex/patch-directories.js.map +1 -0
  237. package/sidecar/dist/providers/codex/permission-profiles.d.ts +11 -0
  238. package/sidecar/dist/providers/codex/permission-profiles.js +37 -0
  239. package/sidecar/dist/providers/codex/permission-profiles.js.map +1 -0
  240. package/sidecar/dist/providers/codex/permissions.d.ts +13 -4
  241. package/sidecar/dist/providers/codex/permissions.js +28 -2
  242. package/sidecar/dist/providers/codex/permissions.js.map +1 -1
  243. package/sidecar/dist/providers/codex/process.d.ts +1 -0
  244. package/sidecar/dist/providers/codex/process.js +3 -1
  245. package/sidecar/dist/providers/codex/process.js.map +1 -1
  246. package/sidecar/dist/providers/codex/protocol/common.d.ts +16 -4
  247. package/sidecar/dist/providers/codex/protocol/index.d.ts +2 -2
  248. package/sidecar/dist/providers/codex/protocol/index.js +1 -1
  249. package/sidecar/dist/providers/codex/protocol/index.js.map +1 -1
  250. package/sidecar/dist/providers/codex/protocol/v2.d.ts +23 -32
  251. package/sidecar/dist/providers/codex/provider.js +16 -15
  252. package/sidecar/dist/providers/codex/provider.js.map +1 -1
  253. package/sidecar/dist/providers/codex/secret-file-globs.d.ts +2 -0
  254. package/sidecar/dist/providers/codex/secret-file-globs.js +45 -0
  255. package/sidecar/dist/providers/codex/secret-file-globs.js.map +1 -0
  256. package/sidecar/dist/providers/codex/skills.d.ts +36 -3
  257. package/sidecar/dist/providers/codex/skills.js +16 -0
  258. package/sidecar/dist/providers/codex/skills.js.map +1 -1
  259. package/sidecar/dist/providers/types.d.ts +3 -1
  260. package/sidecar/dist/providers/types.js +2 -2
  261. package/sidecar/dist/providers/types.js.map +1 -1
  262. package/sidecar/dist/server/http-routes.js +1 -1
  263. package/sidecar/dist/server/http-routes.js.map +1 -1
  264. package/sidecar/dist/server/permission-events.d.ts +1 -1
  265. package/sidecar/dist/server/permission-events.js +5 -8
  266. package/sidecar/dist/server/permission-events.js.map +1 -1
  267. package/sidecar/dist/server/routing.js +0 -5
  268. package/sidecar/dist/server/routing.js.map +1 -1
  269. package/sidecar/dist/server/tool-calls.d.ts +0 -2
  270. package/sidecar/dist/server/tool-calls.js +20 -20
  271. package/sidecar/dist/server/tool-calls.js.map +1 -1
  272. package/sidecar/dist/server/turns.js +9 -1
  273. package/sidecar/dist/server/turns.js.map +1 -1
  274. package/sidecar/dist/server/ws.js +4 -15
  275. package/sidecar/dist/server/ws.js.map +1 -1
  276. package/sidecar/dist/skills/skill-usage.js +2 -2
  277. package/sidecar/dist/skills/skill-usage.js.map +1 -1
  278. package/sidecar/dist/state/change-sets.js.map +1 -1
  279. package/sidecar/dist/state/settings-store.d.ts +13 -5
  280. package/sidecar/dist/state/settings-store.js +33 -8
  281. package/sidecar/dist/state/settings-store.js.map +1 -1
  282. package/sidecar/dist/state/settings-types.d.ts +15 -2
  283. package/sidecar/dist/state/settings-types.js +14 -1
  284. package/sidecar/dist/state/settings-types.js.map +1 -1
  285. package/sidecar/dist/state/store.js +1 -4
  286. package/sidecar/dist/state/store.js.map +1 -1
  287. package/sidecar/dist/state/types.d.ts +7 -6
  288. package/sidecar/dist/state/types.js.map +1 -1
  289. package/sidecar/package.json +2 -1
  290. package/skills/dms-ai/SKILL.md +2 -1
  291. package/skills/dms-external-database/SKILL.md +5 -2
  292. package/frontend-vue/app/chat/components/FullAutoBanner.vue +0 -76
  293. package/frontend-vue/app/chat/components/FullAutoDialog.vue +0 -103
@@ -3,14 +3,13 @@ import { dirname } from "node:path";
3
3
  import { z } from "zod";
4
4
  import { DEFAULT_SETTINGS, SETTINGS_LOG_PREFIX, } from "../constants/settings.js";
5
5
  import { STATE_FILE_ENCODING, STATE_JSON_INDENT } from "../constants/state.js";
6
- import { CHAT_MODES, CHECKPOINT_RETENTION_DAYS, GENERATION_MODES, REQUEST_TIMEOUT_MINUTES, THINKING_LEVELS, } from "./settings-types.js";
6
+ import { CHAT_MODES, CHECKPOINT_RETENTION_DAYS, CODEX_CHAT_MODES, GENERATION_MODES, REQUEST_TIMEOUT_MINUTES, THINKING_LEVELS, } from "./settings-types.js";
7
7
  import { PROVIDER_NAMES } from "./types.js";
8
8
  function lenient(schema) {
9
9
  return z.unknown().pipe(schema).optional().catch(undefined);
10
10
  }
11
- const StoredSettingsSchema = z.object({
11
+ const FlatSettingsSchema = z.object({
12
12
  provider: lenient(z.enum(PROVIDER_NAMES)),
13
- mode: lenient(z.enum(CHAT_MODES)),
14
13
  thinking: lenient(z.enum(THINKING_LEVELS)),
15
14
  claudeModel: lenient(z.string().trim().min(1)),
16
15
  generationMode: lenient(z.enum(GENERATION_MODES)),
@@ -21,23 +20,49 @@ const StoredSettingsSchema = z.object({
21
20
  notifyRequests: lenient(z.boolean()),
22
21
  checkpointRetentionDays: lenient(z.literal(CHECKPOINT_RETENTION_DAYS)),
23
22
  });
24
- const SETTINGS_KEYS = StoredSettingsSchema.keyof().options;
23
+ const StoredSettingsSchema = FlatSettingsSchema.extend({
24
+ defaultModes: lenient(z.object({
25
+ claude: lenient(z.enum(CHAT_MODES)),
26
+ codex: lenient(z.enum(CODEX_CHAT_MODES)),
27
+ })),
28
+ });
29
+ const FLAT_SETTINGS_KEYS = FlatSettingsSchema.keyof().options;
30
+ const LegacySettingsSchema = z.object({ mode: lenient(z.enum(CHAT_MODES)) });
31
+ const LEGACY_MODE_SEEDS = {
32
+ normal: { claude: DEFAULT_SETTINGS.defaultModes.claude, codex: "normal" },
33
+ auto: { claude: "normal", codex: "normal" },
34
+ acceptEdits: { claude: "acceptEdits", codex: "acceptEdits" },
35
+ plan: { claude: "plan", codex: "plan" },
36
+ };
25
37
  export function mergeSettings(current, patch) {
26
38
  const accepted = StoredSettingsSchema.parse(patch);
27
- const merged = { ...current };
28
- for (const key of SETTINGS_KEYS) {
39
+ const merged = {
40
+ ...current,
41
+ defaultModes: {
42
+ claude: accepted.defaultModes?.claude ?? current.defaultModes.claude,
43
+ codex: accepted.defaultModes?.codex ?? current.defaultModes.codex,
44
+ },
45
+ };
46
+ for (const key of FLAT_SETTINGS_KEYS) {
29
47
  const value = accepted[key];
30
48
  if (value !== undefined)
31
49
  Object.assign(merged, { [key]: value });
32
50
  }
33
51
  return merged;
34
52
  }
53
+ function storedDefaults(legacy) {
54
+ if (legacy === undefined)
55
+ return DEFAULT_SETTINGS;
56
+ return { ...DEFAULT_SETTINGS, defaultModes: LEGACY_MODE_SEEDS[legacy] };
57
+ }
35
58
  export function parseSettings(raw) {
36
59
  try {
37
- const parsed = StoredSettingsSchema.safeParse(JSON.parse(raw));
60
+ const stored = JSON.parse(raw);
61
+ const parsed = StoredSettingsSchema.safeParse(stored);
38
62
  if (!parsed.success)
39
63
  return DEFAULT_SETTINGS;
40
- return mergeSettings(DEFAULT_SETTINGS, parsed.data);
64
+ const legacy = LegacySettingsSchema.safeParse(stored).data?.mode;
65
+ return mergeSettings(storedDefaults(legacy), parsed.data);
41
66
  }
42
67
  catch {
43
68
  return DEFAULT_SETTINGS;
@@ -1 +1 @@
1
- {"version":3,"file":"settings-store.js","sourceRoot":"","sources":["../../src/state/settings-store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EACL,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC/E,OAAO,EAEL,UAAU,EACV,yBAAyB,EACzB,gBAAgB,EAChB,uBAAuB,EACvB,eAAe,GAChB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAwB5C,SAAS,OAAO,CAAsB,MAAS;IAC7C,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AAC9D,CAAC;AAED,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;IACzC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACjC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAC1C,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAC9C,cAAc,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IACjD,gBAAgB,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;IACtC,qBAAqB,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;IAC3C,qBAAqB,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;IAC3C,qBAAqB,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,uBAAuB,CAAC,CAAC;IAClE,cAAc,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;IACpC,uBAAuB,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,yBAAyB,CAAC,CAAC;CACvE,CAAC,CAAC;AAIH,MAAM,aAAa,GAAG,oBAAoB,CAAC,KAAK,EAAE,CAAC,OAAO,CAAC;AAM3D,MAAM,UAAU,aAAa,CAC3B,OAAoB,EACpB,KAAyB;IAEzB,MAAM,QAAQ,GAAG,oBAAoB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACnD,MAAM,MAAM,GAAgB,EAAE,GAAG,OAAO,EAAE,CAAC;IAC3C,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC;QAChC,MAAM,KAAK,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,KAAK,KAAK,SAAS;YAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;IACnE,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,GAAW;IACvC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,oBAAoB,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;QAC/D,IAAI,CAAC,MAAM,CAAC,OAAO;YAAE,OAAO,gBAAgB,CAAC;QAC7C,OAAO,aAAa,CAAC,gBAAgB,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;IACtD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,gBAAgB,CAAC;IAC1B,CAAC;AACH,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,QAAgB;IAC1C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC;QAC1D,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC;IAC5B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,SAAS,GACb,GAAG,YAAY,KAAK,IAAI,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAC;QACjE,IAAI,SAAS;YAAE,OAAO,gBAAgB,CAAC;QACvC,OAAO,CAAC,IAAI,CAAC,GAAG,mBAAmB,iBAAiB,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACnE,OAAO,gBAAgB,CAAC;IAC1B,CAAC;AACH,CAAC;AAED,KAAK,UAAU,eAAe,CAC5B,QAAgB,EAChB,QAAqB;IAErB,MAAM,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACpD,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,iBAAiB,CAAC,CAAC;IAC/D,MAAM,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,mBAAmB,CAAC,CAAC;AACvD,CAAC;AAED,SAAS,aAAa,CAAC,KAAoB;IACzC,KAAK,CAAC,QAAQ,GAAG,eAAe,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,KAAK,CACnE,CAAC,GAAG,EAAE,EAAE;QACN,OAAO,CAAC,IAAI,CAAC,GAAG,mBAAmB,kBAAkB,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IACtE,CAAC,CACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,OAAmC;IAEnC,MAAM,KAAK,GAAkB;QAC3B,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,OAAO,EAAE,gBAAgB;QACzB,QAAQ,EAAE,IAAI;KACf,CAAC;IACF,OAAO;QACL,GAAG,EAAE,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO;QACxB,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE;YACZ,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;YACrB,aAAa,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;QACD,IAAI,EAAE,KAAK,IAAI,EAAE;YACf,KAAK,CAAC,OAAO,GAAG,MAAM,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACrD,CAAC;QACD,KAAK,EAAE,KAAK,IAAI,EAAE;YAChB,IAAI,KAAK,CAAC,QAAQ,KAAK,IAAI;gBAAE,MAAM,KAAK,CAAC,QAAQ,CAAC;QACpD,CAAC;KACF,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"settings-store.js","sourceRoot":"","sources":["../../src/state/settings-store.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,16 @@
1
1
  import type { ProviderName } from "./types.js";
2
- export declare const CHAT_MODES: readonly ["normal", "acceptEdits", "plan"];
2
+ export declare const CHAT_MODES: readonly ["normal", "auto", "acceptEdits", "plan"];
3
3
  export type ChatMode = (typeof CHAT_MODES)[number];
4
+ export declare const CODEX_CHAT_MODES: readonly ["normal", "acceptEdits", "plan"];
5
+ export type CodexChatMode = (typeof CODEX_CHAT_MODES)[number];
6
+ declare const PROVIDER_CHAT_MODES: {
7
+ readonly claude: readonly ["normal", "auto", "acceptEdits", "plan"];
8
+ readonly codex: readonly ["normal", "acceptEdits", "plan"];
9
+ };
10
+ export declare function modeForProvider(provider: ProviderName, mode: ChatMode): ChatMode;
11
+ export type DefaultModes = {
12
+ [P in ProviderName]: (typeof PROVIDER_CHAT_MODES)[P][number];
13
+ };
4
14
  export declare const THINKING_LEVELS: readonly ["off", "low", "medium", "high"];
5
15
  export type ThinkingLevel = (typeof THINKING_LEVELS)[number];
6
16
  export declare const GENERATION_MODES: readonly ["safe", "vibe"];
@@ -11,7 +21,7 @@ export declare const CHECKPOINT_RETENTION_DAYS: readonly [7, 30, 90];
11
21
  type CheckpointRetentionDays = (typeof CHECKPOINT_RETENTION_DAYS)[number];
12
22
  export interface AppSettings {
13
23
  provider: ProviderName;
14
- mode: ChatMode;
24
+ defaultModes: DefaultModes;
15
25
  thinking: ThinkingLevel;
16
26
  claudeModel: string;
17
27
  generationMode: GenerationMode;
@@ -22,4 +32,7 @@ export interface AppSettings {
22
32
  notifyRequests: boolean;
23
33
  checkpointRetentionDays: CheckpointRetentionDays;
24
34
  }
35
+ export interface TurnSettings extends AppSettings {
36
+ mode: ChatMode;
37
+ }
25
38
  export {};
@@ -1,4 +1,17 @@
1
- export const CHAT_MODES = ["normal", "acceptEdits", "plan"];
1
+ export const CHAT_MODES = ["normal", "auto", "acceptEdits", "plan"];
2
+ export const CODEX_CHAT_MODES = [
3
+ "normal",
4
+ "acceptEdits",
5
+ "plan",
6
+ ];
7
+ const PROVIDER_CHAT_MODES = {
8
+ claude: CHAT_MODES,
9
+ codex: CODEX_CHAT_MODES,
10
+ };
11
+ export function modeForProvider(provider, mode) {
12
+ const modes = PROVIDER_CHAT_MODES[provider];
13
+ return modes.includes(mode) ? mode : "normal";
14
+ }
2
15
  export const THINKING_LEVELS = ["off", "low", "medium", "high"];
3
16
  export const GENERATION_MODES = ["safe", "vibe"];
4
17
  export const REQUEST_TIMEOUT_MINUTES = [5, 15, 30];
@@ -1 +1 @@
1
- {"version":3,"file":"settings-types.js","sourceRoot":"","sources":["../../src/state/settings-types.ts"],"names":[],"mappings":"AAOA,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,QAAQ,EAAE,aAAa,EAAE,MAAM,CAAU,CAAC;AAGrE,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAU,CAAC;AAQzE,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,MAAM,EAAE,MAAM,CAAU,CAAC;AAG1D,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAU,CAAC;AAG5D,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAU,CAAC"}
1
+ {"version":3,"file":"settings-types.js","sourceRoot":"","sources":["../../src/state/settings-types.ts"],"names":[],"mappings":"AAaA,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,CAAU,CAAC;AAG7E,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,QAAQ;IACR,aAAa;IACb,MAAM;CACgC,CAAC;AAGzC,MAAM,mBAAmB,GAAG;IAC1B,MAAM,EAAE,UAAU;IAClB,KAAK,EAAE,gBAAgB;CACqC,CAAC;AAM/D,MAAM,UAAU,eAAe,CAC7B,QAAsB,EACtB,IAAc;IAEd,MAAM,KAAK,GAAwB,mBAAmB,CAAC,QAAQ,CAAC,CAAC;IACjE,OAAO,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC;AAChD,CAAC;AAMD,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,CAAU,CAAC;AAQzE,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,MAAM,EAAE,MAAM,CAAU,CAAC;AAG1D,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAU,CAAC;AAG5D,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAU,CAAC"}
@@ -4,9 +4,6 @@ import { STATE_DEBOUNCE_MS, STATE_FILE_ENCODING, STATE_INITIAL, STATE_JSON_INDEN
4
4
  function isObject(value) {
5
5
  return typeof value === "object" && value !== null;
6
6
  }
7
- function isObjectOrNull(value) {
8
- return typeof value === "object";
9
- }
10
7
  function parseStateContents(raw) {
11
8
  try {
12
9
  const parsed = JSON.parse(raw);
@@ -14,7 +11,7 @@ function parseStateContents(raw) {
14
11
  return STATE_INITIAL;
15
12
  const candidate = parsed;
16
13
  if (candidate.conversations === undefined ||
17
- !isObjectOrNull(candidate.conversations)) {
14
+ !isObject(candidate.conversations)) {
18
15
  return STATE_INITIAL;
19
16
  }
20
17
  return { conversations: candidate.conversations };
@@ -1 +1 @@
1
- {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/state/store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/state/store.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { AllowedBy, ChangeFileStatus, ChangeSetState, FullAutoDuration, PermissionKind, ToolOutcome, TypecheckOutcome } from "../constants/audit.js";
1
+ import type { AllowedBy, ChangeFileStatus, ChangeSetState, PermissionKind, ToolOutcome, TypecheckOutcome } from "../constants/audit.js";
2
2
  import type { BlockPreviewType } from "../protocol/preview.js";
3
3
  import type { ChatMode, GenerationMode } from "./settings-types.js";
4
4
  declare const STORED_MESSAGE_ROLES: readonly ["user", "assistant", "tool_use", "tool_result", "permission", "error", "notice", "change_set", "question_answer", "block_preview"];
@@ -40,7 +40,12 @@ export interface ModelFallbackNotice {
40
40
  usedModel: string;
41
41
  timestampMs: number;
42
42
  }
43
- export type Notice = AutoFixNotice | PermissionExpiredNotice | QuestionSkippedNotice | FullAutoEndedNotice | ModelFallbackNotice;
43
+ export interface AutoUnavailableNotice {
44
+ kind: "auto_unavailable";
45
+ model: string;
46
+ timestampMs: number;
47
+ }
48
+ export type Notice = AutoFixNotice | PermissionExpiredNotice | QuestionSkippedNotice | FullAutoEndedNotice | ModelFallbackNotice | AutoUnavailableNotice;
44
49
  export interface QuestionAnswerRecord {
45
50
  header: string;
46
51
  question: string;
@@ -118,10 +123,6 @@ export interface ConversationSummary extends StoredConversationSummary {
118
123
  pendingQuestions: number;
119
124
  generationMode: GenerationMode;
120
125
  }
121
- export interface FullAutoState {
122
- duration: FullAutoDuration;
123
- untilMs?: number;
124
- }
125
126
  export interface ChangeSetFile {
126
127
  path: string;
127
128
  status: ChangeFileStatus;
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/state/types.ts"],"names":[],"mappings":"AA6BA,MAAM,oBAAoB,GAAG;IAC3B,MAAM;IACN,WAAW;IACX,UAAU;IACV,aAAa;IACb,YAAY;IACZ,OAAO;IACP,QAAQ;IACR,YAAY;IACZ,iBAAiB;IACjB,eAAe;CACP,CAAC;AAIX,MAAM,uBAAuB,GAAG,CAAC,SAAS,EAAE,OAAO,CAAU,CAAC;AAQ9D,MAAM,2BAA2B,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAU,CAAC;AAoGpE,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAU,CAAC;AAG3D,MAAM,CAAC,MAAM,qBAAqB,GAAiB,cAAc,CAAC,CAAC,CAAC,CAAC;AAYrE,MAAM,CAAC,MAAM,iBAAiB,GAAe;IAC3C,WAAW,EAAE,CAAC;IACd,YAAY,EAAE,CAAC;IACf,WAAW,EAAE,CAAC;CACf,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/state/types.ts"],"names":[],"mappings":"AA4BA,MAAM,oBAAoB,GAAG;IAC3B,MAAM;IACN,WAAW;IACX,UAAU;IACV,aAAa;IACb,YAAY;IACZ,OAAO;IACP,QAAQ;IACR,YAAY;IACZ,iBAAiB;IACjB,eAAe;CACP,CAAC;AAIX,MAAM,uBAAuB,GAAG,CAAC,SAAS,EAAE,OAAO,CAAU,CAAC;AAQ9D,MAAM,2BAA2B,GAAG,CAAC,UAAU,EAAE,QAAQ,CAAU,CAAC;AA6GpE,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,QAAQ,EAAE,OAAO,CAAU,CAAC;AAG3D,MAAM,CAAC,MAAM,qBAAqB,GAAiB,cAAc,CAAC,CAAC,CAAC,CAAC;AAYrE,MAAM,CAAC,MAAM,iBAAiB,GAAe;IAC3C,WAAW,EAAE,CAAC;IACd,YAAY,EAAE,CAAC;IACf,WAAW,EAAE,CAAC;CACf,CAAC"}
@@ -26,8 +26,9 @@
26
26
  "zod": "^4.0.0"
27
27
  },
28
28
  "devDependencies": {
29
+ "@antelopejs/interface-dms-builder": ">=0.4.0 <1.0.0",
29
30
  "@antelopejs/tooling-configs": "^0.2.11",
30
- "@openai/codex": "0.154.0",
31
+ "@openai/codex": "0.166.0",
31
32
  "@types/node": "^22.19.15",
32
33
  "@types/ws": "^8.5.12",
33
34
  "knip": "^6.34.0",
@@ -27,5 +27,6 @@ The sidecar loads every directory a loaded module declares in `package.json` `an
27
27
  - Overview and Activity open with the DMS `PageToolbar` (period only, no live: "updated" + refresh); their selectors share `rememberKey: "ai"`. The Overview offers previous period / previous year / none in a menu (`comparisonControl: "menu"`); its KPI, series, allowed and top-tools routes forward `compareFrom` / `compareTo` (absent under none); the top lists carry a per-row `delta`. `/ai/activity` filters on the `from` / `to` the table sends; the CSV export ignores them.
28
28
  - Offline assistant: Restart on the Overview; lists and settings answer `503` while the sidecar is down.
29
29
  - Remote over plain HTTP: start the frontend with `DMS_COOKIE_SECURE=false`.
30
- - Deleting pages, tables, fields or queries asks in every mode, Full auto included.
30
+ - Deleting pages, tables, fields or queries asks in every mode, Auto review included. So does a database mapping that would remove a page, and so does every edit of a git hook file (anything inside a `.git` directory, `.husky/*`, a lefthook config file, `.pre-commit-config.yaml`), whatever the dependencies toggle says. With Codex, the sandbox is read-only in every mode, so every write asks, and the card for such a file offers no rule.
31
+ - Claude Code defaults to Auto review (a safety check approves routine file edits and web access); every shell command, scheduled task and tool it does not know still asks the person, and so does every edit of `package.json`, a lockfile, `pnpm-workspace.yaml`, `.npmrc`, `.pnpmfile.cjs`, `.yarnrc`, `.yarnrc.yml` or `bunfig.toml` unless the person turned off the dependency approval. Codex defaults to Ask first and has no Auto review. Ask first asks before every command, read-only ones included, and before any change outside the Builder. Accept edits applies file edits unasked, except dependency and git hook files, and asks before every command; with Codex it works as Ask first, asking before every file edit and any command that writes.
31
32
  - Undo is limited to the checkpoint retention (7, 30 or 90 days).
@@ -14,8 +14,11 @@ the questions they left open, revisit the defaults the names and comments contra
14
14
  analytics pages from the data. You never start from scratch.
15
15
 
16
16
  You work through the `Database*` and `Builder*` tools only. You never read rows of the client's
17
- database: the catalog and aggregates are what you have, and they are enough. You never see or
18
- write a credential: the database's URL is an environment variable the integrator sets.
17
+ database: the catalog and aggregates are what you have, and they are enough. The database's URL
18
+ lives in the project's `.env`. The sidecar refuses your file tools on `.env` files and keeps their
19
+ variables out of your environment. Under Claude Code a shell in Code mode can still read them; under
20
+ Codex the sandbox refuses that too. Never read `.env` or print the environment, and never write a
21
+ credential yourself.
19
22
 
20
23
  The flow is **connect → analyse → settle → validate → apply → check**. Analysing and settling
21
24
  read only, so they run in plan mode. Nothing is written before the integrator presses **Run** on
@@ -1,76 +0,0 @@
1
- <script setup lang="ts">
2
- import { computed } from "vue";
3
- import { useChatI18n } from "../composables/useChatI18n";
4
- import type { FullAutoState } from "../types/protocol";
5
- import { formatClock } from "../utils/format";
6
-
7
- interface Props {
8
- fullAuto: FullAutoState;
9
- nowMs: number;
10
- }
11
-
12
- interface Emits {
13
- turnOff: [];
14
- }
15
-
16
- const props = defineProps<Props>();
17
- const emit = defineEmits<Emits>();
18
- const { t } = useChatI18n();
19
-
20
- const scope = computed<string>(() => {
21
- const { duration, untilMs } = props.fullAuto;
22
- if (duration === "30m" && untilMs !== undefined)
23
- return t("dms_ai.panel.full_auto.banner_until", {
24
- time: formatClock(Math.max(0, untilMs - props.nowMs)),
25
- });
26
- return t(`dms_ai.panel.full_auto.banner_${duration}`);
27
- });
28
- </script>
29
-
30
- <template>
31
- <div class="cb-banner-auto" role="status">
32
- <UIcon name="i-ph-lightning" class="cb-banner-auto__icon" />
33
- <span class="cb-banner-auto__text">
34
- <b>{{ t("dms_ai.common.mode.auto") }}</b>
35
- · {{ scope }}
36
- </span>
37
- <UButton
38
- size="xs"
39
- color="neutral"
40
- variant="outline"
41
- :label="t('dms_ai.panel.full_auto.turn_off')"
42
- @click="emit('turnOff')"
43
- />
44
- </div>
45
- </template>
46
-
47
- <style scoped>
48
- .cb-banner-auto {
49
- display: flex;
50
- flex: none;
51
- align-items: center;
52
- gap: 8px;
53
- padding: 8px 10px 8px 14px;
54
- border-bottom: 1px solid var(--dms-error-line);
55
- background: var(--dms-error-tint);
56
- font-size: 12.5px;
57
- color: var(--ui-text-toned);
58
- }
59
-
60
- .cb-banner-auto__icon {
61
- width: 15px;
62
- height: 15px;
63
- flex: none;
64
- color: var(--ui-error);
65
- }
66
-
67
- .cb-banner-auto__text {
68
- flex: 1;
69
- min-width: 0;
70
- }
71
-
72
- .cb-banner-auto__text b {
73
- font-weight: 600;
74
- color: var(--ui-text-highlighted);
75
- }
76
- </style>
@@ -1,103 +0,0 @@
1
- <script setup lang="ts">
2
- import { computed, ref } from "vue";
3
- import { useChatI18n } from "../composables/useChatI18n";
4
- import type { FullAutoDuration } from "../types/protocol";
5
-
6
- interface Emits {
7
- confirm: [duration: FullAutoDuration];
8
- }
9
-
10
- const emit = defineEmits<Emits>();
11
- const open = defineModel<boolean>("open", { required: true });
12
- const { t } = useChatI18n();
13
-
14
- const DURATIONS: readonly FullAutoDuration[] = ["turn", "30m", "chat"];
15
-
16
- const duration = ref<FullAutoDuration>("turn");
17
- const items = computed(() =>
18
- DURATIONS.map((value) => ({
19
- value,
20
- label: t(`dms_ai.panel.full_auto.duration_${value}`),
21
- })),
22
- );
23
-
24
- function confirm(): void {
25
- emit("confirm", duration.value);
26
- open.value = false;
27
- }
28
- </script>
29
-
30
- <template>
31
- <UModal v-model:open="open" :title="t('dms_ai.panel.full_auto.title')">
32
- <template #body>
33
- <div class="full-auto">
34
- <div class="full-auto__intro">
35
- <DmsIconWell icon="i-ph-lightning" tone="error" size="lg" />
36
- <p class="full-auto__text">
37
- {{ t("dms_ai.panel.full_auto.description") }}
38
- </p>
39
- </div>
40
- <span class="full-auto__label">
41
- {{ t("dms_ai.panel.full_auto.turn_off_after") }}
42
- </span>
43
- <DmsSegmented
44
- v-model="duration"
45
- :items="items"
46
- size="md"
47
- block
48
- :aria-label="t('dms_ai.panel.full_auto.turn_off_after')"
49
- />
50
- </div>
51
- </template>
52
- <template #footer>
53
- <div class="full-auto__foot">
54
- <UButton
55
- color="neutral"
56
- variant="outline"
57
- :label="t('dms_ai.common.cancel')"
58
- @click="open = false"
59
- />
60
- <UButton
61
- color="error"
62
- icon="i-ph-lightning"
63
- class="full-auto__confirm"
64
- :label="t('dms_ai.panel.full_auto.confirm')"
65
- @click="confirm"
66
- />
67
- </div>
68
- </template>
69
- </UModal>
70
- </template>
71
-
72
- <style scoped>
73
- .full-auto {
74
- display: grid;
75
- gap: 10px;
76
- }
77
-
78
- .full-auto__intro {
79
- display: flex;
80
- align-items: flex-start;
81
- gap: 12px;
82
- }
83
-
84
- .full-auto__text {
85
- margin: 0;
86
- font-size: 13px;
87
- line-height: 1.5;
88
- color: var(--ui-text-muted);
89
- }
90
-
91
- .full-auto__label {
92
- font-size: 12.5px;
93
- font-weight: 600;
94
- color: var(--ui-text-highlighted);
95
- }
96
-
97
- .full-auto__foot {
98
- display: flex;
99
- justify-content: flex-end;
100
- gap: 8px;
101
- width: 100%;
102
- }
103
- </style>