circuschief 0.7.0 → 1.0.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 (185) hide show
  1. package/package.json +1 -1
  2. package/packages/server/src/agents/adapters/CodexAdapter.js +5 -4
  3. package/packages/server/src/api/canvas.js +22 -57
  4. package/packages/server/src/api/commandButtons.js +16 -15
  5. package/packages/server/src/api/index.js +2 -0
  6. package/packages/server/src/api/kanban.js +4 -2
  7. package/packages/server/src/api/projects-commandButtons.js +6 -6
  8. package/packages/server/src/api/projects-helpers.js +20 -3
  9. package/packages/server/src/api/projects-session-create.js +109 -0
  10. package/packages/server/src/api/projects-session-defaults.js +51 -0
  11. package/packages/server/src/api/projects-session-helpers.js +57 -5
  12. package/packages/server/src/api/projects-templates.js +38 -0
  13. package/packages/server/src/api/projects.js +28 -170
  14. package/packages/server/src/api/providers.js +11 -1
  15. package/packages/server/src/api/sessions-commands.js +46 -25
  16. package/packages/server/src/api/sessions-lifecycle.js +10 -10
  17. package/packages/server/src/api/sessions-patch.js +45 -1
  18. package/packages/server/src/api/sessions.js +6 -5
  19. package/packages/server/src/database.js +0 -2
  20. package/packages/server/src/db/DatabaseManager.js +5 -1
  21. package/packages/server/src/db/ProjectDefaultsRepository.js +3 -3
  22. package/packages/server/src/db/ProviderRepository.js +87 -32
  23. package/packages/server/src/db/SessionRepository.js +2 -1
  24. package/packages/server/src/db/SessionTemplateRepository.js +23 -2
  25. package/packages/server/src/db/index.js +0 -3
  26. package/packages/server/src/db/migrations/index.js +60 -7
  27. package/packages/server/src/db/migrations/kanbanMigrations.js +1 -1
  28. package/packages/server/src/db/migrations/miscMigrations.js +59 -184
  29. package/packages/server/src/db/migrations/projectsMigrations.js +31 -0
  30. package/packages/server/src/db/migrations/providerCommitAttributionMigrations.js +30 -0
  31. package/packages/server/src/db/migrations/providerMigrations.js +165 -0
  32. package/packages/server/src/db/migrations/sessionTableRecreate.js +136 -0
  33. package/packages/server/src/db/migrations/sessionsMigrations.js +18 -5
  34. package/packages/server/src/db/seedBaselineData.js +137 -0
  35. package/packages/server/src/db/session-helpers.js +32 -4
  36. package/packages/server/src/middleware/sessionLookup.js +81 -8
  37. package/packages/server/src/schema.sql +153 -132
  38. package/packages/server/src/scripts/backupDatabase.js +21 -0
  39. package/packages/server/src/scripts/dbUtils.js +81 -0
  40. package/packages/server/src/scripts/inspectDatabaseSchema.js +81 -0
  41. package/packages/server/src/scripts/validateDatabaseBaseline.js +212 -0
  42. package/packages/server/src/services/codexSpawnHelper.js +9 -0
  43. package/packages/server/src/services/commandButtonPrompts.js +14 -12
  44. package/packages/server/src/services/commandRunner.js +7 -1
  45. package/packages/server/src/services/e2eSpawnCapture.js +147 -0
  46. package/packages/server/src/services/gitCommitAttribution.js +150 -0
  47. package/packages/server/src/services/gitDiff.js +132 -0
  48. package/packages/server/src/services/gitRepoUrl.js +174 -0
  49. package/packages/server/src/services/gitService.js +48 -311
  50. package/packages/server/src/services/gitSessionSetup.js +11 -1
  51. package/packages/server/src/services/gitWorktree.js +127 -0
  52. package/packages/server/src/services/kanbanTriggers.js +6 -3
  53. package/packages/server/src/services/nodeSpawnHelper.js +9 -0
  54. package/packages/server/src/services/prUrlService.js +3 -3
  55. package/packages/server/src/services/queryParamBuilder.js +90 -0
  56. package/packages/server/src/services/sessionDuplicator.js +1 -5
  57. package/packages/server/src/services/sessionExecution.js +56 -108
  58. package/packages/server/src/services/sessionPrompts.js +12 -47
  59. package/packages/server/src/services/sessionProvider.js +10 -0
  60. package/packages/server/src/services/summaryService.js +5 -3
  61. package/packages/server/src/services/summaryStaleCheck.js +23 -4
  62. package/packages/server/src/services/templateTriggerService.js +3 -1
  63. package/packages/shared/src/constants.js +3 -0
  64. package/packages/shared/src/contracts/commandButtons.js +16 -2
  65. package/packages/shared/src/contracts/projects.js +2 -2
  66. package/packages/shared/src/contracts/providers.js +60 -0
  67. package/packages/shared/src/contracts/sessions.js +29 -2
  68. package/packages/shared/src/contracts/templates.js +12 -2
  69. package/packages/shared/src/types.js +1 -9
  70. package/packages/shared/src/utils.js +2 -2
  71. package/packages/web/dist/assets/{ActiveSessionsView-UJsCILDL.js → ActiveSessionsView-Cxh8mHmB.js} +1 -1
  72. package/packages/web/dist/assets/{AgentLogsView-BGFPLjLa.js → AgentLogsView-xdfI2bR6.js} +2 -2
  73. package/packages/web/dist/assets/ApiClient-DfbJwzpz.js +1 -0
  74. package/packages/web/dist/assets/ArchiveConfirmModal-DXZYdzHR.js +1 -0
  75. package/packages/web/dist/assets/ArchiveConfirmModal-DeoCVGXt.css +1 -0
  76. package/packages/web/dist/assets/CommandButtonDetailView-D8xfqLAp.js +1 -0
  77. package/packages/web/dist/assets/CommandButtonDetailView-D9zjx9ME.css +1 -0
  78. package/packages/web/dist/assets/EffortLevelSelector-D2Hdzc_8.js +1 -0
  79. package/packages/web/dist/assets/{GeneralSettingsView-DsHChEhv.js → GeneralSettingsView-sPXkLlLy.js} +1 -1
  80. package/packages/web/dist/assets/InputWithButton-B-o0DgMH.js +1 -0
  81. package/packages/web/dist/assets/{InputWithButton-cYdrEmTs.css → InputWithButton-D9HMvfR5.css} +1 -1
  82. package/packages/web/dist/assets/{InterpolationHelp-CIkOSkWX.js → InterpolationHelp-Dxn1li4l.js} +1 -1
  83. package/packages/web/dist/assets/MarkdownEditor-D4Kbb-9l.js +2 -0
  84. package/packages/web/dist/assets/ModelSelector-72C7MUH4.js +1 -0
  85. package/packages/web/dist/assets/{ModelSelector-D8hbTRIt.css → ModelSelector-BNYKujL-.css} +1 -1
  86. package/packages/web/dist/assets/NewSessionView-BR_COfgW.js +3 -0
  87. package/packages/web/dist/assets/NewSessionView-DBl7T2Xp.css +1 -0
  88. package/packages/web/dist/assets/ProjectEditView-DbqTbA0q.css +1 -0
  89. package/packages/web/dist/assets/ProjectEditView-WImU7sNd.js +1 -0
  90. package/packages/web/dist/assets/{ProjectListView-B9FuWESY.js → ProjectListView-CYmmAcBD.js} +1 -1
  91. package/packages/web/dist/assets/{ProjectNewView-D62jYlBL.js → ProjectNewView-DEhqw3Jv.js} +1 -1
  92. package/packages/web/dist/assets/ProvidersView-XZh3jkmH.js +1 -0
  93. package/packages/web/dist/assets/ProvidersView-bZemq_Rv.css +1 -0
  94. package/packages/web/dist/assets/QuickResponsesPanel-BqmnTd-D.js +1 -0
  95. package/packages/web/dist/assets/QuickResponsesPanel-dk-Rj8xx.css +1 -0
  96. package/packages/web/dist/assets/ResizableTextarea-BQNw5e0C.css +1 -0
  97. package/packages/web/dist/assets/ResizableTextarea-DpWdIAP6.js +1 -0
  98. package/packages/web/dist/assets/SessionCard-Bw77-KwD.js +1 -0
  99. package/packages/web/dist/assets/SessionDetailView-B59TEkr-.js +36 -0
  100. package/packages/web/dist/assets/SessionDetailView-CKVBnR4T.css +1 -0
  101. package/packages/web/dist/assets/{SessionFormOptions-DYUISplS.js → SessionFormOptions-hqijxc0S.js} +1 -1
  102. package/packages/web/dist/assets/SessionListView-3-xx6EVs.css +1 -0
  103. package/packages/web/dist/assets/SessionListView-DYXHM9I-.js +1 -0
  104. package/packages/web/dist/assets/{SessionLogStream-DpUE6Xsh.js → SessionLogStream-5NfVr9pF.js} +6 -6
  105. package/packages/web/dist/assets/{SettingsView-BC055tIA.js → SettingsView-DI8ncOAV.js} +1 -1
  106. package/packages/web/dist/assets/{SlashCommandWizard-DmTyNG9O.js → SlashCommandWizard-BQ_rMzn-.js} +1 -1
  107. package/packages/web/dist/assets/{SlashCommandWizard-Dn7sNaBd.css → SlashCommandWizard-DJzw3LP5.css} +1 -1
  108. package/packages/web/dist/assets/{SummarySettingsView-BgnRCwlq.js → SummarySettingsView-C2Qs35mm.js} +1 -1
  109. package/packages/web/dist/assets/TemplateDetailView-B5NI2oTR.css +1 -0
  110. package/packages/web/dist/assets/TemplateDetailView-zVkIvgtu.js +1 -0
  111. package/packages/web/dist/assets/{commandButtons-D4RPpLiu.js → commandButtons-CoU3G4zK.js} +1 -1
  112. package/packages/web/dist/assets/index-9yF1uCCA.js +1 -0
  113. package/packages/web/dist/assets/index-BKstCaYU.js +1 -0
  114. package/packages/web/dist/assets/index-BhbH7eOk.js +1 -0
  115. package/packages/web/dist/assets/{index-BGwH4Cfn.js → index-BjuRttEY.js} +3 -3
  116. package/packages/web/dist/assets/index-Bo7PdwM5.js +1 -0
  117. package/packages/web/dist/assets/index-C2QFVD7d.js +83 -0
  118. package/packages/web/dist/assets/index-C7Ww2auW.js +1 -0
  119. package/packages/web/dist/assets/index-CAGdsDh7.js +1 -0
  120. package/packages/web/dist/assets/index-CLRsVASf.js +3 -0
  121. package/packages/web/dist/assets/{index-Bn5xdGFM.js → index-CP-SxOlV.js} +1 -1
  122. package/packages/web/dist/assets/index-CslU0psO.js +1 -0
  123. package/packages/web/dist/assets/index-DI4NxaWD.js +1 -0
  124. package/packages/web/dist/assets/index-DOzONENy.js +1 -0
  125. package/packages/web/dist/assets/index-DUa7adFh.js +1 -0
  126. package/packages/web/dist/assets/index-DZBpETI5.js +1 -0
  127. package/packages/web/dist/assets/index-DsjWqc6R.js +7 -0
  128. package/packages/web/dist/assets/index-c99Bo3JV.js +1 -0
  129. package/packages/web/dist/assets/index-mT1JpxDc.js +1 -0
  130. package/packages/web/dist/assets/index-rkQx2tso.js +1 -0
  131. package/packages/web/dist/assets/{index-Cs2nxhrT.css → index-uySCcnA_.css} +1 -1
  132. package/packages/web/dist/assets/projectDefaults-B8esIcYq.js +1 -0
  133. package/packages/web/dist/assets/{projects-BUiOGmmb.js → projects-C-8PSxKi.js} +1 -1
  134. package/packages/web/dist/assets/{providers-Bh1ZiiJi.js → providers-oXifvvqN.js} +1 -1
  135. package/packages/web/dist/assets/sessions-Nq5VafSf.js +1 -0
  136. package/packages/web/dist/assets/{settings-Z4AVVmkJ.js → settings-DtpuiyT6.js} +1 -1
  137. package/packages/web/dist/index.html +2 -2
  138. package/packages/server/src/api/sessions-notes.js +0 -51
  139. package/packages/server/src/db/SessionNoteRepository.js +0 -60
  140. package/packages/web/dist/assets/ApiClient-B4YTtyY4.js +0 -1
  141. package/packages/web/dist/assets/ArchiveConfirmModal-BQ-4gI0R.css +0 -1
  142. package/packages/web/dist/assets/ArchiveConfirmModal-OFaj_uX5.js +0 -1
  143. package/packages/web/dist/assets/CommandButtonDetailView-D8S258uP.js +0 -1
  144. package/packages/web/dist/assets/CommandButtonDetailView-DBm3rzhw.css +0 -1
  145. package/packages/web/dist/assets/EffortLevelSelector-C2378L8e.js +0 -1
  146. package/packages/web/dist/assets/InputWithButton-Ci15ox0a.js +0 -1
  147. package/packages/web/dist/assets/MarkdownEditor-5-bexzUT.js +0 -2
  148. package/packages/web/dist/assets/ModelSelector-BMpR0DPr.js +0 -1
  149. package/packages/web/dist/assets/NewSessionView-BCqtIgWH.js +0 -3
  150. package/packages/web/dist/assets/NewSessionView-CUUdHkfv.css +0 -1
  151. package/packages/web/dist/assets/ProjectEditView-D9sK0fdH.css +0 -1
  152. package/packages/web/dist/assets/ProjectEditView-RFaxHhAX.js +0 -1
  153. package/packages/web/dist/assets/ProvidersView-DDKMIQWZ.js +0 -1
  154. package/packages/web/dist/assets/ProvidersView-DE82G_5W.css +0 -1
  155. package/packages/web/dist/assets/QuickResponseSettings-B8188A1D.css +0 -1
  156. package/packages/web/dist/assets/QuickResponseSettings-CDm5vwP7.js +0 -1
  157. package/packages/web/dist/assets/QuickResponsesPanel-BlFDvnZ2.css +0 -1
  158. package/packages/web/dist/assets/QuickResponsesPanel-DZ_Lre_l.js +0 -1
  159. package/packages/web/dist/assets/ResizableTextarea-DiIOEGjN.js +0 -1
  160. package/packages/web/dist/assets/ResizableTextarea-DsU3TVwF.css +0 -1
  161. package/packages/web/dist/assets/SessionCard-DmjnVYWn.js +0 -1
  162. package/packages/web/dist/assets/SessionDetailView-CL7nmfiB.js +0 -36
  163. package/packages/web/dist/assets/SessionDetailView-CupIkI7u.css +0 -1
  164. package/packages/web/dist/assets/SessionListView-BcxGz4aC.js +0 -1
  165. package/packages/web/dist/assets/SessionListView-fHlQyecX.css +0 -1
  166. package/packages/web/dist/assets/TemplateDetailView-BlhOmLUX.js +0 -1
  167. package/packages/web/dist/assets/TemplateDetailView-DT2m06W7.css +0 -1
  168. package/packages/web/dist/assets/index-4rhEeO0B.js +0 -1
  169. package/packages/web/dist/assets/index-9vb2KaAd.js +0 -1
  170. package/packages/web/dist/assets/index-B0CvZXuN.js +0 -7
  171. package/packages/web/dist/assets/index-B6G18FqB.js +0 -82
  172. package/packages/web/dist/assets/index-BUhvkAdF.js +0 -1
  173. package/packages/web/dist/assets/index-BcnkUk2o.js +0 -1
  174. package/packages/web/dist/assets/index-CNwkdB0T.js +0 -1
  175. package/packages/web/dist/assets/index-CfL84oGW.js +0 -1
  176. package/packages/web/dist/assets/index-CkmxO8Mm.js +0 -1
  177. package/packages/web/dist/assets/index-Cpy4-yv3.js +0 -1
  178. package/packages/web/dist/assets/index-CrAQJmoZ.js +0 -1
  179. package/packages/web/dist/assets/index-D6Ky9vJe.js +0 -3
  180. package/packages/web/dist/assets/index-DfrE0gAC.js +0 -1
  181. package/packages/web/dist/assets/index-KwEyz0F3.js +0 -1
  182. package/packages/web/dist/assets/index-OfCywayk.js +0 -1
  183. package/packages/web/dist/assets/index-PDesaJc6.js +0 -1
  184. package/packages/web/dist/assets/index-uB6nhSvz.js +0 -1
  185. package/packages/web/dist/assets/sessions-DH1R-NhV.js +0 -1
@@ -1,5 +1,62 @@
1
1
  import { z } from 'zod';
2
2
 
3
+ export const COMMIT_ATTRIBUTION_VALIDATION_MESSAGE =
4
+ 'Commit attribution must be in the format "Name <email@example.com>" or "Co-authored-by: Name <email@example.com>".';
5
+
6
+ const CO_AUTHOR_PREFIX_RE = /^Co-authored-by:\s*/i;
7
+ const TRAILER_RE = /^([^\n<>]+?)\s*<([^\s<>\n@]+@[^\s<>\n@]+\.[^\s<>\n@]+)>$/;
8
+
9
+ export function parseCommitAttributionOverride(value) {
10
+ if (value === undefined || value === null) {
11
+ return { success: true, value: null };
12
+ }
13
+ if (typeof value !== 'string') {
14
+ return { success: false, error: COMMIT_ATTRIBUTION_VALIDATION_MESSAGE };
15
+ }
16
+
17
+ const trimmed = value.trim();
18
+ if (!trimmed) {
19
+ return { success: true, value: null };
20
+ }
21
+ if (trimmed.includes('\n') || trimmed.includes('\r')) {
22
+ return { success: false, error: COMMIT_ATTRIBUTION_VALIDATION_MESSAGE };
23
+ }
24
+
25
+ const withoutPrefix = trimmed.replace(CO_AUTHOR_PREFIX_RE, '').trim();
26
+ const match = withoutPrefix.match(TRAILER_RE);
27
+ if (!match) {
28
+ return { success: false, error: COMMIT_ATTRIBUTION_VALIDATION_MESSAGE };
29
+ }
30
+
31
+ const name = match[1].trim();
32
+ const email = match[2].trim();
33
+ if (!name || !email) {
34
+ return { success: false, error: COMMIT_ATTRIBUTION_VALIDATION_MESSAGE };
35
+ }
36
+
37
+ return { success: true, value: `Co-authored-by: ${name} <${email}>` };
38
+ }
39
+
40
+ export function normalizeCommitAttributionOverride(value) {
41
+ const result = parseCommitAttributionOverride(value);
42
+ if (!result.success) {
43
+ throw new Error(result.error);
44
+ }
45
+ return result.value;
46
+ }
47
+
48
+ const CommitAttributionOverride = z
49
+ .any()
50
+ .transform((value, ctx) => {
51
+ const result = parseCommitAttributionOverride(value);
52
+ if (result.success) return result.value;
53
+ ctx.addIssue({
54
+ code: 'custom',
55
+ message: result.error,
56
+ });
57
+ return z.NEVER;
58
+ });
59
+
3
60
  /**
4
61
  * Provider "kind" == wire protocol / env-var convention.
5
62
  * 'anthropic' → Claude Code SDK (ANTHROPIC_* env vars)
@@ -16,6 +73,7 @@ export const CreateProviderRequest = z.object({
16
73
  authToken: z.string().nullable().optional(),
17
74
  apiTimeoutMs: z.number().int().positive().nullable().optional(),
18
75
  additionalEnvVars: z.record(z.string()).nullable().optional(),
76
+ commitAttributionOverride: CommitAttributionOverride.optional(),
19
77
  });
20
78
 
21
79
  // `kind` is intentionally omitted. `.strict()` makes any extra key (including
@@ -28,6 +86,7 @@ export const UpdateProviderRequest = z
28
86
  authToken: z.string().nullable().optional(),
29
87
  apiTimeoutMs: z.number().int().positive().nullable().optional(),
30
88
  additionalEnvVars: z.record(z.string()).nullable().optional(),
89
+ commitAttributionOverride: CommitAttributionOverride.optional(),
31
90
  })
32
91
  .strict();
33
92
 
@@ -39,6 +98,7 @@ export const ProviderResponse = z.object({
39
98
  authToken: z.string().nullable(), // Will be redacted in API responses
40
99
  apiTimeoutMs: z.number().nullable(),
41
100
  additionalEnvVars: z.record(z.string()).nullable(),
101
+ commitAttributionOverride: z.string().nullable(),
42
102
  isBuiltIn: z.boolean(),
43
103
  createdAt: z.number(),
44
104
  updatedAt: z.number(),
@@ -1,5 +1,31 @@
1
1
  import { z } from 'zod';
2
2
 
3
+ const SCHEDULED_AT_FORMAT_MESSAGE = 'scheduledAt must be a valid ISO 8601 date-time string with a timezone';
4
+ const ISO_8601_DATE_TIME_WITH_TIMEZONE = /^(\d{4})-(\d{2})-(\d{2})T([01]\d|2[0-3]):([0-5]\d):([0-5]\d)(?:\.\d+)?(Z|[+-](?:[01]\d|2[0-3]):[0-5]\d)$/;
5
+
6
+ function hasValidDateParts(year, month, day) {
7
+ const parsed = new Date(Date.UTC(year, month - 1, day));
8
+ return parsed.getUTCFullYear() === year
9
+ && parsed.getUTCMonth() === month - 1
10
+ && parsed.getUTCDate() === day;
11
+ }
12
+
13
+ function isScheduledAtIsoString(value) {
14
+ const match = ISO_8601_DATE_TIME_WITH_TIMEZONE.exec(value);
15
+ if (!match) return false;
16
+
17
+ const year = Number(match[1]);
18
+ const month = Number(match[2]);
19
+ const day = Number(match[3]);
20
+ if (!hasValidDateParts(year, month, day)) return false;
21
+
22
+ return Number.isFinite(Date.parse(value));
23
+ }
24
+
25
+ const ScheduledAtIsoString = z.string().refine(isScheduledAtIsoString, {
26
+ message: SCHEDULED_AT_FORMAT_MESSAGE,
27
+ });
28
+
3
29
  export const CreateSessionRequest = z.object({
4
30
  prompt: z.string().min(1),
5
31
  name: z.string().optional(),
@@ -7,11 +33,11 @@ export const CreateSessionRequest = z.object({
7
33
  thinkingEnabled: z.boolean().optional(),
8
34
  effortLevel: z.enum(['low', 'medium', 'high', 'max', 'auto']).optional(),
9
35
  gitBranch: z.string().optional(),
10
- gitMode: z.enum(['branch', 'worktree']).optional(),
36
+ gitMode: z.enum(['branch', 'worktree', 'current']).optional(),
11
37
  templateId: z.string().uuid().optional(), // Template to apply on session creation
12
38
  nextTemplateId: z.string().uuid().nullable().optional(),
13
39
  // Scheduling fields
14
- scheduledAt: z.number().optional(), // Unix timestamp in ms
40
+ scheduledAt: ScheduledAtIsoString.optional(),
15
41
  autoRescheduleEnabled: z.boolean().optional(),
16
42
  rescheduleDelayMinutes: z.number().min(5).max(1440).optional(), // 5 min to 24 hours
17
43
  rescheduleOnTokenLimit: z.boolean().optional(),
@@ -64,6 +90,7 @@ export const SessionResponse = z.object({
64
90
  gitBranch: z.string().nullable(),
65
91
  gitWorktree: z.string().nullable(),
66
92
  prUrl: z.string().nullable(),
93
+ prUrlAutoLinkDisabled: z.boolean(),
67
94
  manuallyNamed: z.boolean(),
68
95
  error: z.string().nullable(),
69
96
  nextTemplateId: z.string().uuid().nullable(),
@@ -6,11 +6,14 @@ export const CreateSessionTemplateRequest = z.object({
6
6
  nextTemplateId: z.string().uuid().nullable().optional(),
7
7
  thinkingEnabled: z.boolean().nullable().optional(),
8
8
  gitBranch: z.string().nullable().optional(),
9
- gitMode: z.enum(['branch', 'worktree']).nullable().optional(),
9
+ gitMode: z.enum(['branch', 'worktree', 'current']).nullable().optional(),
10
10
  model: z.string().nullable().optional(),
11
11
  mode: z.enum(['plan', 'standard', 'yolo']).nullable().optional(),
12
12
  effortLevel: z.enum(['low', 'medium', 'high', 'max', 'auto']).nullable().optional(),
13
13
  targetLaneId: z.string().uuid().nullable().optional(), // Lane to place session in when created from this template
14
+ showInQuickResponses: z.boolean().optional(),
15
+ quickResponseAutoSubmit: z.boolean().optional(),
16
+ quickResponseSortOrder: z.number().int().optional(),
14
17
  });
15
18
 
16
19
  export const UpdateSessionTemplateRequest = z.object({
@@ -19,11 +22,14 @@ export const UpdateSessionTemplateRequest = z.object({
19
22
  nextTemplateId: z.string().uuid().nullable().optional(),
20
23
  thinkingEnabled: z.boolean().nullable().optional(),
21
24
  gitBranch: z.string().nullable().optional(),
22
- gitMode: z.enum(['branch', 'worktree']).nullable().optional(),
25
+ gitMode: z.enum(['branch', 'worktree', 'current']).nullable().optional(),
23
26
  model: z.string().nullable().optional(),
24
27
  mode: z.enum(['plan', 'standard', 'yolo']).nullable().optional(),
25
28
  effortLevel: z.enum(['low', 'medium', 'high', 'max', 'auto']).nullable().optional(),
26
29
  targetLaneId: z.string().uuid().nullable().optional(),
30
+ showInQuickResponses: z.boolean().optional(),
31
+ quickResponseAutoSubmit: z.boolean().optional(),
32
+ quickResponseSortOrder: z.number().int().optional(),
27
33
  });
28
34
 
29
35
  export const SessionTemplateResponse = z.object({
@@ -39,6 +45,10 @@ export const SessionTemplateResponse = z.object({
39
45
  mode: z.string().nullable(),
40
46
  effortLevel: z.enum(['low', 'medium', 'high', 'max', 'auto']).nullable(),
41
47
  targetLaneId: z.string().uuid().nullable(),
48
+ showInQuickResponses: z.boolean(),
49
+ quickResponseAutoSubmit: z.boolean(),
50
+ quickResponseSortOrder: z.number(),
51
+ legacyQuickResponseId: z.string().nullable(),
42
52
  createdAt: z.number(),
43
53
  updatedAt: z.number(),
44
54
  });
@@ -47,6 +47,7 @@
47
47
  * @property {string|null} gitBranch
48
48
  * @property {string|null} gitWorktree
49
49
  * @property {string|null} prUrl
50
+ * @property {boolean} prUrlAutoLinkDisabled
50
51
  * @property {string|null} error
51
52
  * @property {number} createdAt
52
53
  * @property {number} updatedAt
@@ -77,15 +78,6 @@
77
78
  * @property {number} createdAt
78
79
  */
79
80
 
80
- /**
81
- * @typedef {Object} SessionNote
82
- * @property {string} id
83
- * @property {string} sessionId
84
- * @property {string} content
85
- * @property {number} createdAt
86
- * @property {number} updatedAt
87
- */
88
-
89
81
  /**
90
82
  * @typedef {Object} GlobalToolTemplate
91
83
  * @property {string} id
@@ -70,7 +70,7 @@ export function extractSlugFromPrompt(prompt) {
70
70
  * Generate a git branch name for a worktree
71
71
  * @param {string} [sessionName] - Optional session name
72
72
  * @param {string} [prompt] - Optional prompt to extract slug from
73
- * @returns {string} Branch name in format: claude-tools/{shortId}-{slug}
73
+ * @returns {string} Branch name in format: circus-chief/{shortId}-{slug}
74
74
  */
75
75
  export function generateWorktreeBranch(sessionName, prompt) {
76
76
  const shortId = generateShortId();
@@ -89,5 +89,5 @@ export function generateWorktreeBranch(sessionName, prompt) {
89
89
  slug = 'session';
90
90
  }
91
91
 
92
- return `claude-tools/${shortId}-${slug}`;
92
+ return `circus-chief/${shortId}-${slug}`;
93
93
  }
@@ -1 +1 @@
1
- import{u as K}from"./sessions-DH1R-NhV.js";import{u as Q}from"./commandButtons-D4RPpLiu.js";import{z as j,W as c,_ as X,o as Z,A as ee,l as te,a,c as l,b as f,F as A,r as C,E as O,u as S,t as b,d as se,w as re,f as ne,x as D,g as oe,n as ie,y as R,G as ae}from"./index-B6G18FqB.js";import{a as x}from"./ApiClient-B4YTtyY4.js";import{S as le}from"./SessionCard-DmjnVYWn.js";import"./SessionLogStream-DpUE6Xsh.js";function ce(){const{on:E,off:s}=j(),d=h=>p=>{const i=F=>{F.session&&p(F.session,F.projectId)};return E(h,i),()=>s(h,i)},I=d(c.SESSION_CREATED),w=d(c.SESSION_UPDATED);return{onSessionCreated:I,onSessionUpdated:w,onSessionDeleted:h=>{const p=i=>{i.sessionId&&h(i.sessionId,i.projectId)};return E(c.SESSION_DELETED,p),()=>s(c.SESSION_DELETED,p)},onSessionSummaryUpdated:h=>{const p=i=>{i.sessionId&&i.summary&&h(i.sessionId,i.summary,i.projectId)};return E(c.SESSION_SUMMARY_UPDATED,p),()=>s(c.SESSION_SUMMARY_UPDATED,p)}}}const de=["data-state"],ue={class:"filters-container"},fe={class:"status-filters"},Se=["onClick"],pe=["title"],me={key:0,class:"star-icon"},he={key:1,class:"star-icon star-crossed"},_e={key:2,class:"star-icon"},ye={key:0,class:"skeleton-list"},ve={key:1,class:"error-message"},Fe={key:2,class:"empty-state","data-testid":"active-sessions-empty"},Ee={key:3,class:"empty-state","data-testid":"active-sessions-empty"},Ie={key:4,class:"session-list"},we={__name:"ActiveSessionsView",setup(E){const s=K(),d=Q(),I=["waiting","stopped","error"],w=["running","starting"],v=ie(new Set),g=e=>{s.statusFilter===e?s.setStatusFilter(null):s.setStatusFilter(e)},h=()=>{s.starredFilter===null?s.setStarredFilter("starred"):s.starredFilter==="starred"?s.setStarredFilter("unstarred"):s.setStarredFilter(null)},p=D(()=>s.starredFilter==="starred"?"Showing starred sessions only. Click to filter unstarred.":s.starredFilter==="unstarred"?"Showing unstarred sessions only. Click to show all.":"Showing all sessions. Click to filter by starred."),i=D(()=>{let e=s.activeSessions;return s.statusFilter&&(e=e.filter(t=>{const r=t.status;return!!(s.statusFilter==="idle"&&I.includes(r)||s.statusFilter==="running"&&w.includes(r))})),s.starredFilter==="starred"?e=e.filter(t=>t.starred):s.starredFilter==="unstarred"&&(e=e.filter(t=>!t.starred)),e}),F=D(()=>s.loading?"loading":s.error?"error":s.activeSessions.length===0?"empty-all":i.value.length===0?"empty-filtered":"results"),_=R({}),u=R({}),m=R({});let N=null;const y=[],{onSessionCreated:P,onSessionUpdated:B,onSessionDeleted:L,onSessionSummaryUpdated:V}=ce();async function M(){const e=new Set(s.activeSessions.map(t=>t.projectId).filter(t=>t&&!v.value.has(t)));for(const t of e)try{await d.fetchButtons(t),await d.fetchLatestRunsForProject(t),v.value.add(t)}catch(r){console.error(`Failed to fetch buttons for project ${t}:`,r)}}function U(e,t,r){d.runs[e]||(d.runs[e]={runId:e,buttonId:t,sessionId:r,status:"running",output:"",exitCode:null,startedAt:Date.now(),outputTruncated:!1})}function H(e){["running","waiting","starting"].includes(e.status)&&(s.activeSessions.some(r=>r.id===e.id)||(s.activeSessions.unshift(e),e.projectId&&!v.value.has(e.projectId)&&(d.fetchButtons(e.projectId),v.value.add(e.projectId))))}function G(e){const t=["running","waiting","starting"].includes(e.status),r=s.activeSessions.findIndex(n=>n.id===e.id);t?r>=0?s.activeSessions[r]=e:s.activeSessions.unshift(e):r>=0&&(s.activeSessions.splice(r,1),delete _[e.id],delete u[e.id],delete m[e.id])}function W(e){const t=s.activeSessions.findIndex(r=>r.id===e);t>=0&&s.activeSessions.splice(t,1),delete _[e],delete u[e],delete m[e]}function Y(e,t){_[e]=t,u[e]=!1,m[e]=!1}function $(e,t,r){const n=o=>{U(o.runId,o.buttonId,o.sessionId),d.appendOutput(o.runId,o.output)};e(c.COMMAND_RUN_OUTPUT,n),r.push(()=>t(c.COMMAND_RUN_OUTPUT,n));const k=o=>{U(o.runId,o.buttonId,o.sessionId),d.completeRun(o.runId,o.exitCode,o.output)};e(c.COMMAND_RUN_COMPLETE,k),r.push(()=>t(c.COMMAND_RUN_COMPLETE,k));const T=o=>{U(o.runId,o.buttonId,o.sessionId),d.errorRun(o.runId,o.error)};e(c.COMMAND_RUN_ERROR,T),r.push(()=>t(c.COMMAND_RUN_ERROR,T))}Z(async()=>{s.restoreStatusFilter(),s.restoreStarredFilter(),await s.fetchActiveSessions(),await M(),y.push(P(H)),y.push(B(G)),y.push(L(W)),y.push(V(Y));const{on:e,off:t}=j();$(e,t,y),N=setInterval(()=>{s.fetchActiveSessions(!1)},3e4)}),ee(()=>{y.forEach(e=>e()),N&&clearInterval(N)}),te(()=>s.activeSessions,()=>{z(),M()},{immediate:!0});async function z(){const t=s.activeSessions.filter(r=>!_[r.id]&&!u[r.id]).map(r=>r.id);if(t.length!==0){for(const r of t)u[r]=!0,m[r]=!1;try{const r=await x.getSessionSummariesBatch(t);for(const n of t)r[n]&&(_[n]=r[n]),u[n]=!1}catch(r){console.warn("Failed to fetch summaries batch:",r.message);for(const n of t)m[n]=!0,u[n]=!1}}}async function q(e){var t;u[e]=!0,m[e]=!1;try{const r=await x.getSessionSummary(e);r&&(_[e]=r)}catch(r){((t=r.response)==null?void 0:t.status)!==404&&(console.warn(`Failed to fetch summary for session ${e}:`,r.message),m[e]=!0)}finally{u[e]=!1}}async function J(e){m[e]=!1,await q(e)}return(e,t)=>{const r=oe("router-link");return a(),l("div",{class:"container","data-testid":"active-sessions-view","data-state":F.value},[t[3]||(t[3]=f("div",{class:"page-header"},[f("div",null,[f("p",{class:"page-description"}," All active sessions across your projects ")])],-1)),f("div",ue,[f("div",fe,[(a(),l(A,null,C(["running","idle"],n=>f("button",{key:n,class:O(["filter-btn",{active:S(s).statusFilter===n}]),onClick:k=>g(n)},b(n),11,Se)),64)),f("button",{class:O(["filter-btn star-btn",{"star-filter-active":S(s).starredFilter==="starred","star-filter-unstarred":S(s).starredFilter==="unstarred","star-filter-all":S(s).starredFilter===null}]),title:p.value,onClick:h},[S(s).starredFilter==="starred"?(a(),l("span",me,"⭐")):S(s).starredFilter==="unstarred"?(a(),l("span",he,"⭐")):(a(),l("span",_e,"☆"))],10,pe)])]),S(s).loading?(a(),l("div",ye,[(a(),l(A,null,C(3,n=>f("div",{key:n,class:"skeleton card",style:{height:"120px"}})),64))])):S(s).error?(a(),l("div",ve,b(S(s).error),1)):S(s).activeSessions.length===0?(a(),l("div",Fe,[t[1]||(t[1]=f("p",null,"No active sessions. All sessions are completed or there are no sessions yet.",-1)),se(r,{to:"/",class:"btn btn-primary"},{default:re(()=>[...t[0]||(t[0]=[ne(" View Projects ",-1)])]),_:1})])):i.value.length===0?(a(),l("div",Ee,[...t[2]||(t[2]=[f("p",null,"No sessions match the current filter.",-1)])])):(a(),l("div",Ie,[(a(!0),l(A,null,C(i.value,n=>(a(),ae(le,{key:n.id,session:n,"show-project":!0,"show-summary":!0,summary:_[n.id],"summary-loading":u[n.id],"summary-error":m[n.id],onRetrySummary:J},null,8,["session","summary","summary-loading","summary-error"]))),128))]))],8,de)}}},Re=X(we,[["__scopeId","data-v-9a53578e"]]);export{Re as default};
1
+ import{u as K}from"./sessions-Nq5VafSf.js";import{u as Q}from"./commandButtons-CoU3G4zK.js";import{E as j,W as c,_ as X,o as Z,G as ee,l as te,a,c as l,b as f,F as C,r as D,J as O,u as S,t as b,d as se,w as re,f as ne,z as A,g as oe,n as ie,C as R,x as ae}from"./index-C2QFVD7d.js";import{a as x}from"./ApiClient-DfbJwzpz.js";import{S as le}from"./SessionCard-Bw77-KwD.js";import"./SessionLogStream-5NfVr9pF.js";function ce(){const{on:E,off:s}=j(),d=h=>p=>{const i=F=>{F.session&&p(F.session,F.projectId)};return E(h,i),()=>s(h,i)},I=d(c.SESSION_CREATED),w=d(c.SESSION_UPDATED);return{onSessionCreated:I,onSessionUpdated:w,onSessionDeleted:h=>{const p=i=>{i.sessionId&&h(i.sessionId,i.projectId)};return E(c.SESSION_DELETED,p),()=>s(c.SESSION_DELETED,p)},onSessionSummaryUpdated:h=>{const p=i=>{i.sessionId&&i.summary&&h(i.sessionId,i.summary,i.projectId)};return E(c.SESSION_SUMMARY_UPDATED,p),()=>s(c.SESSION_SUMMARY_UPDATED,p)}}}const de=["data-state"],ue={class:"filters-container"},fe={class:"status-filters"},Se=["onClick"],pe=["title"],me={key:0,class:"star-icon"},he={key:1,class:"star-icon star-crossed"},_e={key:2,class:"star-icon"},ve={key:0,class:"skeleton-list"},ye={key:1,class:"error-message"},Fe={key:2,class:"empty-state","data-testid":"active-sessions-empty"},Ee={key:3,class:"empty-state","data-testid":"active-sessions-empty"},Ie={key:4,class:"session-list"},we={__name:"ActiveSessionsView",setup(E){const s=K(),d=Q(),I=["waiting","stopped","error"],w=["running","starting"],y=ie(new Set),g=e=>{s.statusFilter===e?s.setStatusFilter(null):s.setStatusFilter(e)},h=()=>{s.starredFilter===null?s.setStarredFilter("starred"):s.starredFilter==="starred"?s.setStarredFilter("unstarred"):s.setStarredFilter(null)},p=A(()=>s.starredFilter==="starred"?"Showing starred sessions only. Click to filter unstarred.":s.starredFilter==="unstarred"?"Showing unstarred sessions only. Click to show all.":"Showing all sessions. Click to filter by starred."),i=A(()=>{let e=s.activeSessions;return s.statusFilter&&(e=e.filter(t=>{const r=t.status;return!!(s.statusFilter==="idle"&&I.includes(r)||s.statusFilter==="running"&&w.includes(r))})),s.starredFilter==="starred"?e=e.filter(t=>t.starred):s.starredFilter==="unstarred"&&(e=e.filter(t=>!t.starred)),e}),F=A(()=>s.loading?"loading":s.error?"error":s.activeSessions.length===0?"empty-all":i.value.length===0?"empty-filtered":"results"),_=R({}),u=R({}),m=R({});let N=null;const v=[],{onSessionCreated:P,onSessionUpdated:B,onSessionDeleted:L,onSessionSummaryUpdated:V}=ce();async function M(){const e=new Set(s.activeSessions.map(t=>t.projectId).filter(t=>t&&!y.value.has(t)));for(const t of e)try{await d.fetchButtons(t),await d.fetchLatestRunsForProject(t),y.value.add(t)}catch(r){console.error(`Failed to fetch buttons for project ${t}:`,r)}}function U(e,t,r){d.runs[e]||(d.runs[e]={runId:e,buttonId:t,sessionId:r,status:"running",output:"",exitCode:null,startedAt:Date.now(),outputTruncated:!1})}function H(e){["running","waiting","starting"].includes(e.status)&&(s.activeSessions.some(r=>r.id===e.id)||(s.activeSessions.unshift(e),e.projectId&&!y.value.has(e.projectId)&&(d.fetchButtons(e.projectId),y.value.add(e.projectId))))}function G(e){const t=["running","waiting","starting"].includes(e.status),r=s.activeSessions.findIndex(n=>n.id===e.id);t?r>=0?s.activeSessions[r]=e:s.activeSessions.unshift(e):r>=0&&(s.activeSessions.splice(r,1),delete _[e.id],delete u[e.id],delete m[e.id])}function W(e){const t=s.activeSessions.findIndex(r=>r.id===e);t>=0&&s.activeSessions.splice(t,1),delete _[e],delete u[e],delete m[e]}function Y(e,t){_[e]=t,u[e]=!1,m[e]=!1}function $(e,t,r){const n=o=>{U(o.runId,o.buttonId,o.sessionId),d.appendOutput(o.runId,o.output)};e(c.COMMAND_RUN_OUTPUT,n),r.push(()=>t(c.COMMAND_RUN_OUTPUT,n));const k=o=>{U(o.runId,o.buttonId,o.sessionId),d.completeRun(o.runId,o.exitCode,o.output)};e(c.COMMAND_RUN_COMPLETE,k),r.push(()=>t(c.COMMAND_RUN_COMPLETE,k));const T=o=>{U(o.runId,o.buttonId,o.sessionId),d.errorRun(o.runId,o.error)};e(c.COMMAND_RUN_ERROR,T),r.push(()=>t(c.COMMAND_RUN_ERROR,T))}Z(async()=>{s.restoreStatusFilter(),s.restoreStarredFilter(),await s.fetchActiveSessions(),await M(),v.push(P(H)),v.push(B(G)),v.push(L(W)),v.push(V(Y));const{on:e,off:t}=j();$(e,t,v),N=setInterval(()=>{s.fetchActiveSessions(!1)},3e4)}),ee(()=>{v.forEach(e=>e()),N&&clearInterval(N)}),te(()=>s.activeSessions,()=>{z(),M()},{immediate:!0});async function z(){const t=s.activeSessions.filter(r=>!_[r.id]&&!u[r.id]).map(r=>r.id);if(t.length!==0){for(const r of t)u[r]=!0,m[r]=!1;try{const r=await x.getSessionSummariesBatch(t);for(const n of t)r[n]&&(_[n]=r[n]),u[n]=!1}catch(r){console.warn("Failed to fetch summaries batch:",r.message);for(const n of t)m[n]=!0,u[n]=!1}}}async function q(e){var t;u[e]=!0,m[e]=!1;try{const r=await x.getSessionSummary(e);r&&(_[e]=r)}catch(r){((t=r.response)==null?void 0:t.status)!==404&&(console.warn(`Failed to fetch summary for session ${e}:`,r.message),m[e]=!0)}finally{u[e]=!1}}async function J(e){m[e]=!1,await q(e)}return(e,t)=>{const r=oe("router-link");return a(),l("div",{class:"container","data-testid":"active-sessions-view","data-state":F.value},[t[3]||(t[3]=f("div",{class:"page-header"},[f("div",null,[f("p",{class:"page-description"}," All active sessions across your projects ")])],-1)),f("div",ue,[f("div",fe,[(a(),l(C,null,D(["running","idle"],n=>f("button",{key:n,class:O(["filter-btn",{active:S(s).statusFilter===n}]),onClick:k=>g(n)},b(n),11,Se)),64)),f("button",{class:O(["filter-btn star-btn",{"star-filter-active":S(s).starredFilter==="starred","star-filter-unstarred":S(s).starredFilter==="unstarred","star-filter-all":S(s).starredFilter===null}]),title:p.value,onClick:h},[S(s).starredFilter==="starred"?(a(),l("span",me,"⭐")):S(s).starredFilter==="unstarred"?(a(),l("span",he,"⭐")):(a(),l("span",_e,"☆"))],10,pe)])]),S(s).loading?(a(),l("div",ve,[(a(),l(C,null,D(3,n=>f("div",{key:n,class:"skeleton card",style:{height:"120px"}})),64))])):S(s).error?(a(),l("div",ye,b(S(s).error),1)):S(s).activeSessions.length===0?(a(),l("div",Fe,[t[1]||(t[1]=f("p",null,"No active sessions. All sessions are completed or there are no sessions yet.",-1)),se(r,{to:"/",class:"btn btn-primary"},{default:re(()=>[...t[0]||(t[0]=[ne(" View Projects ",-1)])]),_:1})])):i.value.length===0?(a(),l("div",Ee,[...t[2]||(t[2]=[f("p",null,"No sessions match the current filter.",-1)])])):(a(),l("div",Ie,[(a(!0),l(C,null,D(i.value,n=>(a(),ae(le,{key:n.id,session:n,"show-project":!0,"show-summary":!0,summary:_[n.id],"summary-loading":u[n.id],"summary-error":m[n.id],onRetrySummary:J},null,8,["session","summary","summary-loading","summary-error"]))),128))]))],8,de)}}},Re=X(we,[["__scopeId","data-v-9a53578e"]]);export{Re as default};
@@ -1,2 +1,2 @@
1
- import{L as q,_ as O,a as r,c as i,b as t,F as k,r as $,t as f,i as _,E as A,x as p,g as W,f as F,G as z,w as G,o as H,A as J,d as w,u as m,n as B}from"./index-B6G18FqB.js";import{a as L}from"./ApiClient-B4YTtyY4.js";const U=q("agentLogs",{state:()=>({logs:[],pagination:{total:0,limit:25,offset:0,hasMore:!1},filters:{agentType:null,callType:null,status:null,model:null,startDate:null,endDate:null,sessionId:null},filterOptions:{agentTypes:[],callTypes:[],statuses:[],models:[]},perPage:25,currentPage:1,sortBy:"started_at",sortOrder:"DESC",loading:!1,error:null}),getters:{totalPages:s=>Math.ceil(s.pagination.total/s.perPage)||0,activeFilters:s=>{const e={};for(const[y,h]of Object.entries(s.filters))h!=null&&(e[y]=h);return e}},actions:{async fetchLogs(){this.loading=!0,this.error=null;try{const s=(this.currentPage-1)*this.perPage,e=await L.getAgentCallLogs({limit:this.perPage,offset:s,...this.activeFilters,sortBy:this.sortBy,sortOrder:this.sortOrder});this.logs=e.logs,this.pagination=e.pagination}catch(s){this.error=s.message}finally{this.loading=!1}},async fetchFilterOptions(){try{const s=await L.getAgentCallFilterOptions();this.filterOptions=s}catch(s){console.error("Failed to fetch filter options:",s)}},setFilter(s,e){this.filters[s]=e||null,this.currentPage=1,this.fetchLogs()},clearFilters(){Object.keys(this.filters).forEach(s=>this.filters[s]=null),this.currentPage=1,this.fetchLogs()},setPage(s){this.currentPage=s,this.fetchLogs()},setPerPage(s){this.perPage=s,this.currentPage=1,this.fetchLogs()},setSort(s,e){this.sortBy=s,this.sortOrder=e,this.currentPage=1,this.fetchLogs()},async clearAllLogs(){this.loading=!0,this.error=null;try{await L.deleteAllAgentCallLogs(),this.logs=[],this.pagination={total:0,limit:this.perPage,offset:0,hasMore:!1},this.currentPage=1,await this.fetchFilterOptions()}catch(s){this.error=s.message}finally{this.loading=!1}}}}),Z={class:"filter-bar"},Q={class:"filter-row"},X={class:"filter-group"},Y=["value"],K={class:"filter-group"},tt=["value"],et={class:"filter-group"},st=["value"],lt=["value"],at={class:"filter-group"},nt=["value"],ot=["value"],rt={class:"filter-group"},it=["value"],ut=["value"],dt={class:"filter-group"},ct=["value"],ft=["value"],gt={__name:"AgentLogFilters",props:{filters:{type:Object,required:!0},filterOptions:{type:Object,required:!0},hasActiveFilters:{type:Boolean,default:!1},confirming:{type:Boolean,default:!1}},emits:["filter-change","date-change","clear-filters","clear-all"],setup(s){const e=s;function y(v){return new Date(v).toISOString().slice(0,10)}const h=p(()=>e.filters.startDate?y(e.filters.startDate):""),b=p(()=>e.filters.endDate?y(e.filters.endDate):"");return(v,a)=>(r(),i("div",Z,[t("div",Q,[t("div",X,[a[8]||(a[8]=t("label",{class:"filter-label"},"From",-1)),t("input",{type:"date",class:"filter-input",value:h.value,onChange:a[0]||(a[0]=n=>v.$emit("date-change","startDate",n))},null,40,Y)]),t("div",K,[a[9]||(a[9]=t("label",{class:"filter-label"},"To",-1)),t("input",{type:"date",class:"filter-input",value:b.value,onChange:a[1]||(a[1]=n=>v.$emit("date-change","endDate",n))},null,40,tt)]),t("div",et,[a[11]||(a[11]=t("label",{class:"filter-label"},"Agent Type",-1)),t("select",{class:"filter-select",value:s.filters.agentType||"",onChange:a[2]||(a[2]=n=>v.$emit("filter-change","agentType",n.target.value))},[a[10]||(a[10]=t("option",{value:""}," All ",-1)),(r(!0),i(k,null,$(s.filterOptions.agentTypes,n=>(r(),i("option",{key:n,value:n},f(n),9,lt))),128))],40,st)]),t("div",at,[a[13]||(a[13]=t("label",{class:"filter-label"},"Call Type",-1)),t("select",{class:"filter-select",value:s.filters.callType||"",onChange:a[3]||(a[3]=n=>v.$emit("filter-change","callType",n.target.value))},[a[12]||(a[12]=t("option",{value:""}," All ",-1)),(r(!0),i(k,null,$(s.filterOptions.callTypes,n=>(r(),i("option",{key:n,value:n},f(n),9,ot))),128))],40,nt)]),t("div",rt,[a[15]||(a[15]=t("label",{class:"filter-label"},"Status",-1)),t("select",{class:"filter-select",value:s.filters.status||"",onChange:a[4]||(a[4]=n=>v.$emit("filter-change","status",n.target.value))},[a[14]||(a[14]=t("option",{value:""}," All ",-1)),(r(!0),i(k,null,$(s.filterOptions.statuses,n=>(r(),i("option",{key:n,value:n},f(n),9,ut))),128))],40,it)]),t("div",dt,[a[17]||(a[17]=t("label",{class:"filter-label"},"Model",-1)),t("select",{class:"filter-select",value:s.filters.model||"",onChange:a[5]||(a[5]=n=>v.$emit("filter-change","model",n.target.value))},[a[16]||(a[16]=t("option",{value:""}," All ",-1)),(r(!0),i(k,null,$(s.filterOptions.models,n=>(r(),i("option",{key:n,value:n},f(n),9,ft))),128))],40,ct)]),s.hasActiveFilters?(r(),i("button",{key:0,class:"btn-clear",onClick:a[6]||(a[6]=n=>v.$emit("clear-filters"))}," Clear Filters ")):_("",!0),t("button",{class:A(["btn-clear-all",{confirming:s.confirming}]),onClick:a[7]||(a[7]=n=>v.$emit("clear-all"))},f(s.confirming?"Confirm Clear All?":"Clear All Logs"),3)])]))}},vt=O(gt,[["__scopeId","data-v-780329d3"]]),pt={class:"table-wrapper"},ht={key:0,class:"loading-overlay"},yt={class:"log-table"},bt=["onClick"],mt={key:0,class:"sort-indicator"},kt={key:0},$t=["colspan"],Ct={class:"td"},_t={class:"status-text"},Tt={class:"td font-mono text-sm"},At={class:"td font-mono text-sm"},Pt={class:"td model-cell"},Lt={class:"td"},Ot={key:1},St={class:"td"},Dt={key:1},Ft=["title"],wt={class:"td text-right"},Bt=["title"],Mt={__name:"AgentLogTable",props:{logs:{type:Array,required:!0},loading:{type:Boolean,default:!1},sortBy:{type:String,default:"started_at"},sortOrder:{type:String,default:"DESC"}},emits:["sort"],setup(s){const e=[{key:"status",label:"Status",sortable:!0},{key:"agent_type",label:"Agent Type",sortable:!0},{key:"call_type",label:"Call Type",sortable:!0},{key:"model",label:"Model",sortable:!0},{key:"session",label:"Session",sortable:!1},{key:"effort",label:"Effort",sortable:!1},{key:"total_tokens",label:"Tokens",sortable:!0},{key:"duration_ms",label:"Duration",sortable:!0},{key:"started_at",label:"Started",sortable:!0}];function y(l){switch(l){case"completed":return"dot-completed";case"error":return"dot-error";case"streaming":case"pending":return"dot-pending";default:return"dot-default"}}function h(l){const d=[];return l.inputTokens&&d.push(`Input: ${b(l.inputTokens)}`),l.outputTokens&&d.push(`Output: ${b(l.outputTokens)}`),l.thinkingTokens&&d.push(`Thinking: ${b(l.thinkingTokens)}`),l.cacheReadTokens&&d.push(`Cache Read: ${b(l.cacheReadTokens)}`),l.cacheWriteTokens&&d.push(`Cache Write: ${b(l.cacheWriteTokens)}`),d.join(`
2
- `)||"No token data"}function b(l){return l==null||l===0?"0":l.toLocaleString()}function v(l){if(l==null)return"—";if(l<1e3)return`${l}ms`;if(l<6e4)return`${(l/1e3).toFixed(1)}s`;const d=Math.floor(l/6e4),C=Math.floor(l%6e4/1e3);return`${d}m ${C}s`}function a(l){const d=Date.now()-l;return d<6e4?"just now":d<36e5?`${Math.floor(d/6e4)}m ago`:d<864e5?`${Math.floor(d/36e5)}h ago`:`${Math.floor(d/864e5)}d ago`}function n(l){try{if(l.metadata)return(typeof l.metadata=="string"?JSON.parse(l.metadata):l.metadata).effortLevel||null}catch{}return null}function P(l){return{auto:"Auto",low:"Low",medium:"Med",high:"High",max:"Max"}[l]||l}return(l,d)=>{const C=W("router-link");return r(),i("div",pt,[s.loading?(r(),i("div",ht,[...d[0]||(d[0]=[t("div",{class:"spinner"},null,-1)])])):_("",!0),t("table",yt,[t("thead",null,[t("tr",null,[(r(),i(k,null,$(e,o=>t("th",{key:o.key,class:A(["th",o.sortable?"sortable":""]),onClick:S=>o.sortable?l.$emit("sort",o.key):null},[F(f(o.label)+" ",1),o.sortable&&s.sortBy===o.key?(r(),i("span",mt,f(s.sortOrder==="ASC"?"↑":"↓"),1)):_("",!0)],10,bt)),64))])]),t("tbody",null,[!s.loading&&s.logs.length===0?(r(),i("tr",kt,[t("td",{colspan:e.length,class:"empty-cell"}," No agent call logs found. ",8,$t)])):_("",!0),(r(!0),i(k,null,$(s.logs,o=>(r(),i("tr",{key:o.id,class:"log-row"},[t("td",Ct,[t("span",{class:A(["status-dot",y(o.status)])},null,2),t("span",_t,f(o.status),1)]),t("td",Tt,f(o.agentType||"—"),1),t("td",At,f(o.callType||"—"),1),t("td",Pt,f(o.model||"—"),1),t("td",Lt,[o.sessionId?(r(),z(C,{key:0,to:`/sessions/${o.sessionId}`,class:"session-link"},{default:G(()=>[F(f(o.sessionName||o.sessionId),1)]),_:2},1032,["to"])):(r(),i("span",Ot,"—"))]),t("td",St,[n(o)?(r(),i("span",{key:0,class:A(["effort-badge",`effort-${n(o)}`])},f(P(n(o))),3)):(r(),i("span",Dt,"—"))]),t("td",{class:"td text-right",title:h(o)},f(b(o.totalTokens)),9,Ft),t("td",wt,f(v(o.durationMs)),1),t("td",{class:"td text-right",title:o.startedAt?new Date(o.startedAt).toLocaleString():""},f(o.startedAt?a(o.startedAt):"—"),9,Bt)]))),128))])])])}}},It=O(Mt,[["__scopeId","data-v-20d5856a"]]),Et={class:"agent-logs"},Nt={key:0,class:"error-banner"},Vt={key:1,class:"pagination-bar"},xt={class:"per-page-control"},jt=["value"],Rt=["value"],qt={class:"page-info"},Wt={class:"page-buttons"},zt=["disabled"],Gt=["disabled"],Ht={key:0,class:"page-ellipsis"},Jt=["onClick"],Ut=["disabled"],Zt=["disabled"],Qt={__name:"AgentLogsView",setup(s){const e=U(),y=B(!1),h=B(null),b=p(()=>e.logs),v=p(()=>e.pagination),a=p(()=>e.filters),n=p(()=>e.filterOptions),P=p(()=>e.perPage),l=p(()=>e.currentPage),d=p(()=>e.totalPages),C=p(()=>e.sortBy),o=p(()=>e.sortOrder),S=p(()=>e.loading),D=p(()=>e.error),M=p(()=>Object.values(e.filters).some(g=>g!=null)),I=p(()=>v.value.total===0?0:v.value.offset+1),E=p(()=>Math.min(v.value.offset+P.value,v.value.total)),N=p(()=>{const g=d.value,c=l.value;if(g<=7)return Array.from({length:g},(T,R)=>R+1);const u=[];return c<=4?u.push(1,2,3,4,5,"...",g):c>=g-3?u.push(1,"...",g-4,g-3,g-2,g-1,g):u.push(1,"...",c-1,c,c+1,"...",g),u});function V(g){C.value===g?e.setSort(g,o.value==="ASC"?"DESC":"ASC"):e.setSort(g,"DESC")}function x(g,c){const u=c.target.value;if(!u){e.setFilter(g,null);return}const T=new Date(`${u}T00:00:00Z`).getTime();e.filters[g]=T,e.currentPage=1,e.fetchLogs()}function j(){y.value?(h.value&&(clearTimeout(h.value),h.value=null),y.value=!1,e.clearAllLogs()):(y.value=!0,h.value=setTimeout(()=>{y.value=!1,h.value=null},3e3))}return H(()=>{e.fetchLogs(),e.fetchFilterOptions()}),J(()=>{h.value&&clearTimeout(h.value)}),(g,c)=>(r(),i("div",Et,[w(vt,{filters:a.value,"filter-options":n.value,"has-active-filters":M.value,confirming:y.value,onFilterChange:c[0]||(c[0]=(u,T)=>m(e).setFilter(u,T)),onDateChange:x,onClearFilters:c[1]||(c[1]=u=>m(e).clearFilters()),onClearAll:j},null,8,["filters","filter-options","has-active-filters","confirming"]),D.value?(r(),i("div",Nt,[t("span",null,f(D.value),1),t("button",{class:"btn-retry",onClick:c[2]||(c[2]=u=>m(e).fetchLogs())}," Retry ")])):_("",!0),w(It,{logs:b.value,loading:S.value,"sort-by":C.value,"sort-order":o.value,onSort:V},null,8,["logs","loading","sort-by","sort-order"]),v.value.total>0?(r(),i("div",Vt,[t("div",xt,[c[8]||(c[8]=t("label",{class:"filter-label"},"Per page",-1)),t("select",{class:"filter-select per-page-select",value:P.value,onChange:c[3]||(c[3]=u=>m(e).setPerPage(parseInt(u.target.value)))},[(r(),i(k,null,$([10,25,50,100],u=>t("option",{key:u,value:u},f(u),9,Rt)),64))],40,jt)]),t("div",qt," Showing "+f(I.value)+"–"+f(E.value)+" of "+f(v.value.total)+" logs ",1),t("div",Wt,[t("button",{class:"page-btn",disabled:l.value===1,onClick:c[4]||(c[4]=u=>m(e).setPage(1))}," « ",8,zt),t("button",{class:"page-btn",disabled:l.value===1,onClick:c[5]||(c[5]=u=>m(e).setPage(l.value-1))}," ‹ ",8,Gt),(r(!0),i(k,null,$(N.value,u=>(r(),i(k,{key:u},[u==="..."?(r(),i("span",Ht,"…")):(r(),i("button",{key:1,class:A(["page-btn",{"page-btn-active":u===l.value}]),onClick:T=>m(e).setPage(u)},f(u),11,Jt))],64))),128)),t("button",{class:"page-btn",disabled:l.value===d.value,onClick:c[6]||(c[6]=u=>m(e).setPage(l.value+1))}," › ",8,Ut),t("button",{class:"page-btn",disabled:l.value===d.value,onClick:c[7]||(c[7]=u=>m(e).setPage(d.value))}," » ",8,Zt)])])):_("",!0)]))}},Kt=O(Qt,[["__scopeId","data-v-e1df2011"]]);export{Kt as default};
1
+ import{p as q,_ as O,a as r,c as i,b as t,F as k,r as $,t as f,i as _,J as A,z as p,g as W,f as F,x as z,w as J,o as G,G as H,d as w,u as m,n as B}from"./index-C2QFVD7d.js";import{a as L}from"./ApiClient-DfbJwzpz.js";const U=q("agentLogs",{state:()=>({logs:[],pagination:{total:0,limit:25,offset:0,hasMore:!1},filters:{agentType:null,callType:null,status:null,model:null,startDate:null,endDate:null,sessionId:null},filterOptions:{agentTypes:[],callTypes:[],statuses:[],models:[]},perPage:25,currentPage:1,sortBy:"started_at",sortOrder:"DESC",loading:!1,error:null}),getters:{totalPages:s=>Math.ceil(s.pagination.total/s.perPage)||0,activeFilters:s=>{const e={};for(const[y,h]of Object.entries(s.filters))h!=null&&(e[y]=h);return e}},actions:{async fetchLogs(){this.loading=!0,this.error=null;try{const s=(this.currentPage-1)*this.perPage,e=await L.getAgentCallLogs({limit:this.perPage,offset:s,...this.activeFilters,sortBy:this.sortBy,sortOrder:this.sortOrder});this.logs=e.logs,this.pagination=e.pagination}catch(s){this.error=s.message}finally{this.loading=!1}},async fetchFilterOptions(){try{const s=await L.getAgentCallFilterOptions();this.filterOptions=s}catch(s){console.error("Failed to fetch filter options:",s)}},setFilter(s,e){this.filters[s]=e||null,this.currentPage=1,this.fetchLogs()},clearFilters(){Object.keys(this.filters).forEach(s=>this.filters[s]=null),this.currentPage=1,this.fetchLogs()},setPage(s){this.currentPage=s,this.fetchLogs()},setPerPage(s){this.perPage=s,this.currentPage=1,this.fetchLogs()},setSort(s,e){this.sortBy=s,this.sortOrder=e,this.currentPage=1,this.fetchLogs()},async clearAllLogs(){this.loading=!0,this.error=null;try{await L.deleteAllAgentCallLogs(),this.logs=[],this.pagination={total:0,limit:this.perPage,offset:0,hasMore:!1},this.currentPage=1,await this.fetchFilterOptions()}catch(s){this.error=s.message}finally{this.loading=!1}}}}),Z={class:"filter-bar"},Q={class:"filter-row"},X={class:"filter-group"},Y=["value"],K={class:"filter-group"},tt=["value"],et={class:"filter-group"},st=["value"],lt=["value"],at={class:"filter-group"},nt=["value"],ot=["value"],rt={class:"filter-group"},it=["value"],ut=["value"],dt={class:"filter-group"},ct=["value"],ft=["value"],gt={__name:"AgentLogFilters",props:{filters:{type:Object,required:!0},filterOptions:{type:Object,required:!0},hasActiveFilters:{type:Boolean,default:!1},confirming:{type:Boolean,default:!1}},emits:["filter-change","date-change","clear-filters","clear-all"],setup(s){const e=s;function y(v){return new Date(v).toISOString().slice(0,10)}const h=p(()=>e.filters.startDate?y(e.filters.startDate):""),b=p(()=>e.filters.endDate?y(e.filters.endDate):"");return(v,a)=>(r(),i("div",Z,[t("div",Q,[t("div",X,[a[8]||(a[8]=t("label",{class:"filter-label"},"From",-1)),t("input",{type:"date",class:"filter-input",value:h.value,onChange:a[0]||(a[0]=n=>v.$emit("date-change","startDate",n))},null,40,Y)]),t("div",K,[a[9]||(a[9]=t("label",{class:"filter-label"},"To",-1)),t("input",{type:"date",class:"filter-input",value:b.value,onChange:a[1]||(a[1]=n=>v.$emit("date-change","endDate",n))},null,40,tt)]),t("div",et,[a[11]||(a[11]=t("label",{class:"filter-label"},"Agent Type",-1)),t("select",{class:"filter-select",value:s.filters.agentType||"",onChange:a[2]||(a[2]=n=>v.$emit("filter-change","agentType",n.target.value))},[a[10]||(a[10]=t("option",{value:""}," All ",-1)),(r(!0),i(k,null,$(s.filterOptions.agentTypes,n=>(r(),i("option",{key:n,value:n},f(n),9,lt))),128))],40,st)]),t("div",at,[a[13]||(a[13]=t("label",{class:"filter-label"},"Call Type",-1)),t("select",{class:"filter-select",value:s.filters.callType||"",onChange:a[3]||(a[3]=n=>v.$emit("filter-change","callType",n.target.value))},[a[12]||(a[12]=t("option",{value:""}," All ",-1)),(r(!0),i(k,null,$(s.filterOptions.callTypes,n=>(r(),i("option",{key:n,value:n},f(n),9,ot))),128))],40,nt)]),t("div",rt,[a[15]||(a[15]=t("label",{class:"filter-label"},"Status",-1)),t("select",{class:"filter-select",value:s.filters.status||"",onChange:a[4]||(a[4]=n=>v.$emit("filter-change","status",n.target.value))},[a[14]||(a[14]=t("option",{value:""}," All ",-1)),(r(!0),i(k,null,$(s.filterOptions.statuses,n=>(r(),i("option",{key:n,value:n},f(n),9,ut))),128))],40,it)]),t("div",dt,[a[17]||(a[17]=t("label",{class:"filter-label"},"Model",-1)),t("select",{class:"filter-select",value:s.filters.model||"",onChange:a[5]||(a[5]=n=>v.$emit("filter-change","model",n.target.value))},[a[16]||(a[16]=t("option",{value:""}," All ",-1)),(r(!0),i(k,null,$(s.filterOptions.models,n=>(r(),i("option",{key:n,value:n},f(n),9,ft))),128))],40,ct)]),s.hasActiveFilters?(r(),i("button",{key:0,class:"btn-clear",onClick:a[6]||(a[6]=n=>v.$emit("clear-filters"))}," Clear Filters ")):_("",!0),t("button",{class:A(["btn-clear-all",{confirming:s.confirming}]),onClick:a[7]||(a[7]=n=>v.$emit("clear-all"))},f(s.confirming?"Confirm Clear All?":"Clear All Logs"),3)])]))}},vt=O(gt,[["__scopeId","data-v-780329d3"]]),pt={class:"table-wrapper"},ht={key:0,class:"loading-overlay"},yt={class:"log-table"},bt=["onClick"],mt={key:0,class:"sort-indicator"},kt={key:0},$t=["colspan"],Ct={class:"td"},_t={class:"status-text"},Tt={class:"td font-mono text-sm"},At={class:"td font-mono text-sm"},Pt={class:"td model-cell"},Lt={class:"td"},Ot={key:1},St={class:"td"},Dt={key:1},Ft=["title"],wt={class:"td text-right"},Bt=["title"],Mt={__name:"AgentLogTable",props:{logs:{type:Array,required:!0},loading:{type:Boolean,default:!1},sortBy:{type:String,default:"started_at"},sortOrder:{type:String,default:"DESC"}},emits:["sort"],setup(s){const e=[{key:"status",label:"Status",sortable:!0},{key:"agent_type",label:"Agent Type",sortable:!0},{key:"call_type",label:"Call Type",sortable:!0},{key:"model",label:"Model",sortable:!0},{key:"session",label:"Session",sortable:!1},{key:"effort",label:"Effort",sortable:!1},{key:"total_tokens",label:"Tokens",sortable:!0},{key:"duration_ms",label:"Duration",sortable:!0},{key:"started_at",label:"Started",sortable:!0}];function y(l){switch(l){case"completed":return"dot-completed";case"error":return"dot-error";case"streaming":case"pending":return"dot-pending";default:return"dot-default"}}function h(l){const d=[];return l.inputTokens&&d.push(`Input: ${b(l.inputTokens)}`),l.outputTokens&&d.push(`Output: ${b(l.outputTokens)}`),l.thinkingTokens&&d.push(`Thinking: ${b(l.thinkingTokens)}`),l.cacheReadTokens&&d.push(`Cache Read: ${b(l.cacheReadTokens)}`),l.cacheWriteTokens&&d.push(`Cache Write: ${b(l.cacheWriteTokens)}`),d.join(`
2
+ `)||"No token data"}function b(l){return l==null||l===0?"0":l.toLocaleString()}function v(l){if(l==null)return"—";if(l<1e3)return`${l}ms`;if(l<6e4)return`${(l/1e3).toFixed(1)}s`;const d=Math.floor(l/6e4),C=Math.floor(l%6e4/1e3);return`${d}m ${C}s`}function a(l){const d=Date.now()-l;return d<6e4?"just now":d<36e5?`${Math.floor(d/6e4)}m ago`:d<864e5?`${Math.floor(d/36e5)}h ago`:`${Math.floor(d/864e5)}d ago`}function n(l){try{if(l.metadata)return(typeof l.metadata=="string"?JSON.parse(l.metadata):l.metadata).effortLevel||null}catch{}return null}function P(l){return{auto:"Auto",low:"Low",medium:"Med",high:"High",max:"Max"}[l]||l}return(l,d)=>{const C=W("router-link");return r(),i("div",pt,[s.loading?(r(),i("div",ht,[...d[0]||(d[0]=[t("div",{class:"spinner"},null,-1)])])):_("",!0),t("table",yt,[t("thead",null,[t("tr",null,[(r(),i(k,null,$(e,o=>t("th",{key:o.key,class:A(["th",o.sortable?"sortable":""]),onClick:S=>o.sortable?l.$emit("sort",o.key):null},[F(f(o.label)+" ",1),o.sortable&&s.sortBy===o.key?(r(),i("span",mt,f(s.sortOrder==="ASC"?"↑":"↓"),1)):_("",!0)],10,bt)),64))])]),t("tbody",null,[!s.loading&&s.logs.length===0?(r(),i("tr",kt,[t("td",{colspan:e.length,class:"empty-cell"}," No agent call logs found. ",8,$t)])):_("",!0),(r(!0),i(k,null,$(s.logs,o=>(r(),i("tr",{key:o.id,class:"log-row"},[t("td",Ct,[t("span",{class:A(["status-dot",y(o.status)])},null,2),t("span",_t,f(o.status),1)]),t("td",Tt,f(o.agentType||"—"),1),t("td",At,f(o.callType||"—"),1),t("td",Pt,f(o.model||"—"),1),t("td",Lt,[o.sessionId?(r(),z(C,{key:0,to:`/sessions/${o.sessionId}`,class:"session-link"},{default:J(()=>[F(f(o.sessionName||o.sessionId),1)]),_:2},1032,["to"])):(r(),i("span",Ot,"—"))]),t("td",St,[n(o)?(r(),i("span",{key:0,class:A(["effort-badge",`effort-${n(o)}`])},f(P(n(o))),3)):(r(),i("span",Dt,"—"))]),t("td",{class:"td text-right",title:h(o)},f(b(o.totalTokens)),9,Ft),t("td",wt,f(v(o.durationMs)),1),t("td",{class:"td text-right",title:o.startedAt?new Date(o.startedAt).toLocaleString():""},f(o.startedAt?a(o.startedAt):"—"),9,Bt)]))),128))])])])}}},It=O(Mt,[["__scopeId","data-v-20d5856a"]]),Nt={class:"agent-logs"},Et={key:0,class:"error-banner"},Vt={key:1,class:"pagination-bar"},xt={class:"per-page-control"},jt=["value"],Rt=["value"],qt={class:"page-info"},Wt={class:"page-buttons"},zt=["disabled"],Jt=["disabled"],Gt={key:0,class:"page-ellipsis"},Ht=["onClick"],Ut=["disabled"],Zt=["disabled"],Qt={__name:"AgentLogsView",setup(s){const e=U(),y=B(!1),h=B(null),b=p(()=>e.logs),v=p(()=>e.pagination),a=p(()=>e.filters),n=p(()=>e.filterOptions),P=p(()=>e.perPage),l=p(()=>e.currentPage),d=p(()=>e.totalPages),C=p(()=>e.sortBy),o=p(()=>e.sortOrder),S=p(()=>e.loading),D=p(()=>e.error),M=p(()=>Object.values(e.filters).some(g=>g!=null)),I=p(()=>v.value.total===0?0:v.value.offset+1),N=p(()=>Math.min(v.value.offset+P.value,v.value.total)),E=p(()=>{const g=d.value,c=l.value;if(g<=7)return Array.from({length:g},(T,R)=>R+1);const u=[];return c<=4?u.push(1,2,3,4,5,"...",g):c>=g-3?u.push(1,"...",g-4,g-3,g-2,g-1,g):u.push(1,"...",c-1,c,c+1,"...",g),u});function V(g){C.value===g?e.setSort(g,o.value==="ASC"?"DESC":"ASC"):e.setSort(g,"DESC")}function x(g,c){const u=c.target.value;if(!u){e.setFilter(g,null);return}const T=new Date(`${u}T00:00:00Z`).getTime();e.filters[g]=T,e.currentPage=1,e.fetchLogs()}function j(){y.value?(h.value&&(clearTimeout(h.value),h.value=null),y.value=!1,e.clearAllLogs()):(y.value=!0,h.value=setTimeout(()=>{y.value=!1,h.value=null},3e3))}return G(()=>{e.fetchLogs(),e.fetchFilterOptions()}),H(()=>{h.value&&clearTimeout(h.value)}),(g,c)=>(r(),i("div",Nt,[w(vt,{filters:a.value,"filter-options":n.value,"has-active-filters":M.value,confirming:y.value,onFilterChange:c[0]||(c[0]=(u,T)=>m(e).setFilter(u,T)),onDateChange:x,onClearFilters:c[1]||(c[1]=u=>m(e).clearFilters()),onClearAll:j},null,8,["filters","filter-options","has-active-filters","confirming"]),D.value?(r(),i("div",Et,[t("span",null,f(D.value),1),t("button",{class:"btn-retry",onClick:c[2]||(c[2]=u=>m(e).fetchLogs())}," Retry ")])):_("",!0),w(It,{logs:b.value,loading:S.value,"sort-by":C.value,"sort-order":o.value,onSort:V},null,8,["logs","loading","sort-by","sort-order"]),v.value.total>0?(r(),i("div",Vt,[t("div",xt,[c[8]||(c[8]=t("label",{class:"filter-label"},"Per page",-1)),t("select",{class:"filter-select per-page-select",value:P.value,onChange:c[3]||(c[3]=u=>m(e).setPerPage(parseInt(u.target.value)))},[(r(),i(k,null,$([10,25,50,100],u=>t("option",{key:u,value:u},f(u),9,Rt)),64))],40,jt)]),t("div",qt," Showing "+f(I.value)+"–"+f(N.value)+" of "+f(v.value.total)+" logs ",1),t("div",Wt,[t("button",{class:"page-btn",disabled:l.value===1,onClick:c[4]||(c[4]=u=>m(e).setPage(1))}," « ",8,zt),t("button",{class:"page-btn",disabled:l.value===1,onClick:c[5]||(c[5]=u=>m(e).setPage(l.value-1))}," ‹ ",8,Jt),(r(!0),i(k,null,$(E.value,u=>(r(),i(k,{key:u},[u==="..."?(r(),i("span",Gt,"…")):(r(),i("button",{key:1,class:A(["page-btn",{"page-btn-active":u===l.value}]),onClick:T=>m(e).setPage(u)},f(u),11,Ht))],64))),128)),t("button",{class:"page-btn",disabled:l.value===d.value,onClick:c[6]||(c[6]=u=>m(e).setPage(l.value+1))}," › ",8,Ut),t("button",{class:"page-btn",disabled:l.value===d.value,onClick:c[7]||(c[7]=u=>m(e).setPage(d.value))}," » ",8,Zt)])])):_("",!0)]))}},Kt=O(Qt,[["__scopeId","data-v-e1df2011"]]);export{Kt as default};
@@ -0,0 +1 @@
1
+ var b=n=>{throw TypeError(n)};var g=(n,e,s)=>e.has(n)||b("Cannot "+s);var h=(n,e,s)=>(g(n,e,"read from private field"),s?s.call(n):e.get(n)),y=(n,e,s)=>e.has(n)?b("Cannot add the same private member more than once"):e instanceof WeakSet?e.add(n):e.set(n,s),C=(n,e,s,t)=>(g(n,e,"write to private field"),t?t.call(n,s):e.set(n,s),s),l=(n,e,s)=>(g(n,e,"access private method"),s);function j(n){Object.assign(n.prototype,{async getProjects(){return this._get("/projects")},async getProject(e){return this._get(`/projects/${e}`)},async createProject(e){return this._post("/projects",e)},async updateProject(e,s){return this._put(`/projects/${e}`,s)},async deleteProject(e){return this._delete(`/projects/${e}`)}})}function S(n,e,s){for(const t of s)e[t]!==void 0&&e[t]!==null&&n.append(t,e[t])}function k(n,e,s){for(const t of s)e[t]!==void 0&&e[t]!==null&&n.append(t,String(e[t]))}function P(n,e){const s=new FormData;s.append("prompt",n.prompt),S(s,n,["name","mode","model","providerId","effortLevel","gitBranch","gitMode","templateId","parentSessionId"]),k(s,n,["thinkingEnabled","startImmediately","autoRescheduleEnabled","rescheduleOnTokenLimit","rescheduleOnServiceError"]),S(s,n,["scheduledAt","rescheduleDelayMinutes","maxRescheduleCount","maxTotalTokens","rescheduleAtTokenCount"]);for(const t of e)s.append("files",t);return s}function A(n){return typeof n.scheduledAt=="number"||n.scheduledAt instanceof Date?{...n,scheduledAt:new Date(n.scheduledAt).toISOString()}:n}function w(n){Object.assign(n.prototype,{async getActiveSessions(){return this._get("/sessions")},async getProjectSessions(e,s=null,t=null,{limit:r=null,offset:a=0}={}){const o={};return s!==null&&(o.archived=s),t==="starred"?o.starred=!0:t==="unstarred"&&(o.starred=!1),r!==null&&(o.limit=r,o.offset=a),this._get(this._buildQueryPath(`/projects/${e}/sessions`,o))},async createSession(e,s){const{files:t,...r}=A(s);if(t&&t.length>0){const a=P(r,t);return this._uploadFormData(`/projects/${e}/sessions`,a)}return this._post(`/projects/${e}/sessions`,r)},async getSession(e){return this._get(`/sessions/${e}`)},async getSessionMessages(e){return this._get(`/sessions/${e}/messages`)},async getSessionWorkLogs(e){return this._get(`/sessions/${e}/work-logs`)},async sendMessage(e,s,t=[],r=null){if(console.log(`[MODEL AUDIT - ApiClient] sendMessage called with model: "${r}"`),t&&t.length>0){const a=new FormData;a.append("content",s),r&&a.append("model",r);for(const o of t)a.append("files",o);return this._uploadFormData(`/sessions/${e}/message`,a)}return this._post(`/sessions/${e}/message`,{content:s,model:r})},async stopSession(e){return this._post(`/sessions/${e}/stop`)},async getSessionChanges(e,s="local",t=null){const r={};return s==="branch"&&(r.compareMode="branch",t&&(r.branch=t)),this._get(this._buildQueryPath(`/sessions/${e}/changes`,r))},async getSessionDefaultBranch(e){return this._get(`/sessions/${e}/default-branch`)},async getSessionFilesCount(e){return this._get(`/sessions/${e}/files-count`)},async getSessionFile(e,s){return this._get(`/sessions/${e}/file?path=${encodeURIComponent(s)}`)},async restartSession(e){return this._post(`/sessions/${e}/restart`)},async startSession(e,s,t,r){const a={};return s!==void 0&&(a.prompt=s),t!==void 0&&(a.model=t),r!==void 0&&(a.providerId=r),this._post(`/sessions/${e}/start`,Object.keys(a).length>0?a:void 0)},async updateSessionInitialPrompt(e,s){return this._put(`/sessions/${e}/initial-prompt`,{prompt:s})},async updateSession(e,s){return this._patch(`/sessions/${e}`,s)},async updateSessionPendingPrompt(e,s){return this._patch(`/sessions/${e}/pending-prompt`,{pendingPrompt:s})},async deleteSession(e){return this._delete(`/sessions/${e}`)},async archiveSession(e,{cleanup:s=!1}={}){return this._post(`/sessions/${e}/archive`,{cleanup:s})},async unarchiveSession(e){return this._post(`/sessions/${e}/unarchive`)},async toggleSessionStar(e){return this._post(`/sessions/${e}/star`)},async duplicateSession(e,s={}){return this._post(`/sessions/${e}/duplicate`,s)},async scheduleSession(e,s){return this._post(`/sessions/${e}/schedule`,s)}})}function T(n){Object.assign(n.prototype,{async getCanvasItems(e){return this._get(`/sessions/${e}/canvas`)},async getCanvasFileContent(e,s){return this._get(`/sessions/${e}/canvas/file/${encodeURIComponent(s)}/content`)},async getCanvasItemContent(e,s){return this._get(`/sessions/${e}/canvas/${s}/content`)},async getAllCanvasItems(e){return this._get(`/sessions/${e}/canvas/all`)},async uploadCanvasItem(e,s){const t=new FormData;return t.append("file",s),this._uploadFormData(`/sessions/${e}/canvas`,t)},async createCanvasItem(e,s){return this._post(`/sessions/${e}/canvas`,s)},async updateCanvasItem(e,s,t){return this._put(`/sessions/${e}/canvas/${s}`,t)},async deleteCanvasItem(e,s){return this._delete(`/sessions/${e}/canvas/${s}`)},async getCanvasTrash(e){return this._get(`/sessions/${e}/canvas-trash`)},async recoverCanvasItem(e,s){return this._post(`/sessions/${e}/canvas/${s}/recover`)},async recoverCanvasFile(e,s){return this._post(`/sessions/${e}/canvas-trash/recover-file/${encodeURIComponent(s)}`)},async permanentlyDeleteCanvasItem(e,s){return this._delete(`/sessions/${e}/canvas/${s}/permanent`)},async bulkDeleteCanvasItems(e,s){return this._post(`/sessions/${e}/canvas/bulk-delete`,{itemIds:s})},async bulkRecoverCanvasItems(e,s){return this._post(`/sessions/${e}/canvas/bulk-recover`,{itemIds:s})},async bulkPermanentlyDeleteCanvasItems(e,s){return this._delete(`/sessions/${e}/canvas/bulk-delete-permanent`,{itemIds:s})}})}function R(n){Object.assign(n.prototype,{async getProviders(){return this._get("/providers")},async getProvider(e){return this._get(`/providers/${e}`)},async createProvider(e){return this._post("/providers",e)},async updateProvider(e,s){return this._patch(`/providers/${e}`,s)},async deleteProvider(e){return this._delete(`/providers/${e}`)},async testProviderConnection(e){return this._post("/providers/test",e)},async testExistingProvider(e){return this._post(`/providers/${e}/test`)},async getProviderModels(e){return this._get(`/providers/${e}/models`)},async addProviderModel(e,s){return this._post(`/providers/${e}/models`,s)},async updateProviderModel(e,s,t){return this._patch(`/providers/${e}/models/${s}`,t)},async removeProviderModel(e,s){return this._delete(`/providers/${e}/models/${s}`)}})}function D(n){Object.assign(n.prototype,{async getAgents(){return this._get("/agents")}})}function I(n){Object.assign(n.prototype,{async getCommandButtons(e){return this._get(`/projects/${e}/circus-commands`)},async createCommandButton(e,s){return this._post(`/projects/${e}/circus-commands`,s)},async getCommandButton(e,s){return this._get(`/projects/${e}/circus-commands/${s}`)},async updateCommandButton(e,s,t){return this._patch(`/projects/${e}/circus-commands/${s}`,t)},async deleteCommandButton(e,s){return this._delete(`/projects/${e}/circus-commands/${s}`)},async runCommandButton(e,s){return this._post(`/sessions/${e}/circus-commands/${s}/run`)},async getActiveRuns(e){return this._get(`/sessions/${e}/circus-commands/runs`)},async getCommandRun(e,s){return this._get(`/sessions/${e}/circus-commands/runs/${s}`)},async getLatestRunsForProject(e){return this._get(`/projects/${e}/circus-commands/latest-runs`)},async killCommandRun(e,s){return this._post(`/sessions/${e}/circus-commands/runs/${s}/kill`)},async deleteCommandRun(e,s){return this._delete(`/sessions/${e}/circus-commands/runs/${s}`)},async deleteAllRunsForButton(e,s){return this._delete(`/sessions/${e}/circus-commands/${s}/runs/all`)}})}function O(n){Object.assign(n.prototype,{async getTokenCostWeights(){return this._get("/settings/token-weights")},async updateTokenCostWeights(e){return this._put("/settings/token-weights",e)},async resetTokenCostWeights(){return this._delete("/settings/token-weights")},async getSummarySettings(){return this._get("/settings/summary")},async updateSummarySettings(e){return this._put("/settings/summary",e)},async resetSummarySettings(){return this._delete("/settings/summary")},async getGeneralSettings(){return this._get("/settings/general")},async updateGeneralSettings(e){return this._put("/settings/general",e)},async resetGeneralSettings(){return this._delete("/settings/general")}})}function F(n){Object.assign(n.prototype,{async getConversations(e){return this._get(`/sessions/${e}/conversations`)},async createConversation(e,s=null){return this._post(`/sessions/${e}/conversations`,{name:s})},async getConversation(e,s){return this._get(`/sessions/${e}/conversations/${s}`)},async updateConversation(e,s,t){return this._patch(`/sessions/${e}/conversations/${s}`,t)},async deleteConversation(e,s){return this._delete(`/sessions/${e}/conversations/${s}`)},async branchConversation(e,s,t){return this._post(`/sessions/${e}/conversations/${s}/branch`,t)},async getConversationMessages(e,s){return this._get(`/sessions/${e}/messages?conversation_id=${s}`)}})}function Q(n){Object.assign(n.prototype,{async getGlobalTemplates(){return this._get("/templates")},async createGlobalTemplate(e){return this._post("/templates",e)},async getTemplate(e){return this._get(`/templates/${e}`)},async updateTemplate(e,s){return this._patch(`/templates/${e}`,s)},async deleteTemplate(e){return this._delete(`/templates/${e}`)},async getProjectTemplates(e){return this._get(`/projects/${e}/templates`)},async createProjectTemplate(e,s){return this._post(`/projects/${e}/templates`,s)}})}function B(n){Object.assign(n.prototype,{async getQuickResponses(e){return this._get(`/projects/${e}/quick-responses`)},async getGlobalQuickResponses(){return this._get("/quick-responses/global")},async createQuickResponse(e,s){return this._post(`/projects/${e}/quick-responses`,s)},async updateQuickResponse(e,s){return this._patch(`/quick-responses/${e}`,s)},async deleteQuickResponse(e){return this._delete(`/quick-responses/${e}`)},async reorderQuickResponses(e,s){return this._post(`/projects/${e}/quick-responses/reorder`,s)},async reorderGlobalQuickResponses(e){return this._post("/quick-responses/global/reorder",e)}})}function L(n){Object.assign(n.prototype,{async getGitStatus(e){return this._get(`/git/projects/${e}/status`)},async getWorktrees(e){return this._get(`/git/projects/${e}/worktrees`)},async detectWorktreePath(e){return this._get(this._buildQueryPath("/git/detect-worktree-path",{directory:e}))},async getSessionTodos(e,s=null){return this._get(this._buildQueryPath(`/sessions/${e}/todos`,{conversation_id:s||void 0}))},async getSessionSummary(e,s=!1){const t=s?this._buildQueryPath(`/sessions/${e}/summary`,{generate:"true"}):`/sessions/${e}/summary`;try{return await this._get(t)}catch(r){if(r.message.includes("404")||r.message.includes("not found"))return null;throw r}},async getSessionSummariesBatch(e){return!e||e.length===0?{}:this._post("/sessions/summaries/batch",{ids:e})},async generateSessionSummary(e){return this._post(`/sessions/${e}/summary`)},async getWorkflowLatestResponse(e){try{return await this._get(`/sessions/${e}/workflow-latest-response`)}catch(s){if(s.message.includes("404"))return null;throw s}},async browseDirectory(e=""){return this._get(this._buildQueryPath("/filesystem/browse",{path:e||void 0}))},async getSlashCommands(e){return this._get(`/commands?directory=${encodeURIComponent(e)}`)},async getSlashCommand(e,s){return this._get(`/commands/${encodeURIComponent(s)}?directory=${encodeURIComponent(e)}`)},async executeSlashCommand(e,s,t={}){return this._post(`/commands/${encodeURIComponent(s)}/execute`,{sessionId:e,args:t})},async getAgentCallLogs({limit:e,offset:s,agentType:t,callType:r,status:a,startDate:o,endDate:m,sessionId:_,model:$,sortBy:f,sortOrder:v}={}){const c={};return e!=null&&(c.limit=e),s!=null&&(c.offset=s),t&&(c.agentType=t),r&&(c.callType=r),a&&(c.status=a),o&&(c.startDate=o),m&&(c.endDate=m),_&&(c.sessionId=_),$&&(c.model=$),f&&(c.sortBy=f),v&&(c.sortOrder=v),this._get(this._buildQueryPath("/agent-calls",c))},async getAgentCallFilterOptions(){return this._get("/agent-calls/filter-options")},async deleteAllAgentCallLogs(){return this._delete("/agent-calls")},async getProjectSessionDefaults(e){return this._get(`/projects/${e}/session-defaults`)},async updateProjectSessionDefaults(e,s){return this._post(`/projects/${e}/session-defaults`,s)},async resetProjectSessionDefaults(e){return this._delete(`/projects/${e}/session-defaults`)}})}function M(n){Object.assign(n.prototype,{async getKanbanBoard(e){return this._get(`/projects/${e}/kanban`)},async deleteKanbanBoard(e){return this._delete(`/projects/${e}/kanban`)},async createKanbanLane(e,s){return this._post(`/projects/${e}/kanban/lanes`,s)},async updateKanbanLane(e,s,t){return this._patch(`/projects/${e}/kanban/lanes/${s}`,t)},async deleteKanbanLane(e,s){return this._delete(`/projects/${e}/kanban/lanes/${s}`)},async reorderKanbanLanes(e,s){return this._put(`/projects/${e}/kanban/lanes/reorder`,s)},async createKanbanCard(e,s){return this._post(`/projects/${e}/kanban/cards`,s)},async moveKanbanCard(e,s,t){return this._patch(`/projects/${e}/kanban/cards/${s}/move`,t)},async deleteKanbanCard(e,s){return this._delete(`/projects/${e}/kanban/cards/${s}`)},async reorderKanbanCards(e,s,t){return this._put(`/projects/${e}/kanban/lanes/${s}/cards/reorder`,t)}})}var p,u,d;class i{constructor(e="/api"){y(this,u);y(this,p);C(this,p,e)}get baseUrl(){return h(this,p)}async _uploadFormData(e,s){const t=await fetch(`${h(this,p)}${e}`,{method:"POST",body:s});if(!t.ok){const r=await t.json().catch(()=>({}));throw new Error(r.message||r.error||`HTTP ${t.status}`)}return t.json()}_buildQueryPath(e,s){const t=new URLSearchParams;for(const[a,o]of Object.entries(s))o!=null&&t.append(a,o);const r=t.toString();return r?`${e}?${r}`:e}_get(e){return l(this,u,d).call(this,"GET",e)}_post(e,s){return l(this,u,d).call(this,"POST",e,s)}_put(e,s){return l(this,u,d).call(this,"PUT",e,s)}_patch(e,s){return l(this,u,d).call(this,"PATCH",e,s)}_delete(e,s){return l(this,u,d).call(this,"DELETE",e,s)}}p=new WeakMap,u=new WeakSet,d=async function(e,s,t=null){const r={method:e,headers:{"Content-Type":"application/json"}};t&&e!=="GET"&&(r.body=JSON.stringify(t));const a=await fetch(`${h(this,p)}${s}`,r);if(!a.ok){const o=await a.json().catch(()=>({}));throw new Error(o.message||o.error||`HTTP ${a.status}`)}return a.status===204?null:a.json()};j(i);w(i);T(i);R(i);D(i);I(i);O(i);F(i);Q(i);B(i);L(i);M(i);const U=new i;export{U as a};
@@ -0,0 +1 @@
1
+ import{_ as B,k as U,l as I,o as O,G as A,a as r,c,b as e,t as p,F as j,r as q,J as z,m as L,y as D,i as h,s as N,j as R,z as k,n as g,x as G,f as E,T as J}from"./index-C2QFVD7d.js";import{u as K}from"./SessionLogStream-5NfVr9pF.js";const P={class:"modal-content",role:"dialog","aria-labelledby":"modal-title"},H={class:"modal-body"},Q={class:"moving-info"},W={class:"moving-session-name"},X={key:0,class:"empty-state"},Y={key:1,class:"lanes-list"},Z={class:"lane-label"},ee=["name","value","disabled","aria-disabled","aria-label"],ae={class:"lane-info"},ne={class:"lane-name"},oe={key:0,class:"lane-current-badge"},te={key:1,class:"lane-automation-icon",title:"Automation enabled"},se={key:2,class:"automation-option"},le={class:"checkbox-label"},ie={class:"modal-footer"},de=["disabled"],re=["disabled","aria-label"],ce=["disabled"],ue={__name:"MoveCardModal",props:{isOpen:Boolean,projectId:{type:String,required:!0},cardId:{type:String,required:!0},currentLaneId:{type:String,required:!0},sessionName:{type:String,default:""}},emits:["update:isOpen","close","moved"],setup(n,{emit:_}){const o=n,u=_,v=K(),f=U(),i=g(null),m=g(!0),b=g(!1),d=g(!1),s=k(()=>{var a;return((a=v.board)==null?void 0:a.lanes)||[]}),C=k(()=>o.sessionName?o.sessionName:o.cardId||"Unnamed session"),x=k(()=>i.value&&s.value.find(a=>a.id===i.value)||null),V=k(()=>x.value?w(x.value):!1),S=k(()=>i.value&&i.value!==o.currentLaneId);function w(a){return a?!!(a.onEnterTemplateId||a.onEnterPrompt):!1}function y(){u("update:isOpen",!1),u("close"),i.value=null,m.value=!0}async function F(){if(!(!S.value||!o.cardId)){b.value=!0;try{await v.moveCard(o.projectId,o.cardId,i.value,{runOnEnterTemplate:m.value}),f.success("Card moved successfully"),u("moved"),y()}catch(a){console.error("Failed to move card:",a),f.error(a.message||"Failed to move card")}finally{b.value=!1}}}async function T(){if(confirm("Remove this session from the board?")){d.value=!0;try{await v.removeCard(o.projectId,o.cardId),f.success("Session removed from board"),u("close")}catch(a){console.error("Failed to remove card:",a),f.error(a.message||"Failed to remove session")}finally{d.value=!1}}}I(i,(a,t)=>{if(a!==t){const l=s.value.find(M=>M.id===a);m.value=w(l)}}),I(()=>o.isOpen,a=>{a&&(i.value=null,m.value=!0)});function $(a){a.key==="Escape"&&o.isOpen&&y()}return O(()=>{document.addEventListener("keydown",$)}),A(()=>{document.removeEventListener("keydown",$)}),(a,t)=>n.isOpen?(r(),c("div",{key:0,class:"modal-backdrop",onClick:R(y,["self"])},[e("div",P,[e("div",{class:"modal-header"},[t[2]||(t[2]=e("h2",{id:"modal-title",class:"modal-title"}," Move to Lane ",-1)),e("button",{class:"close-btn","aria-label":"Close modal",onClick:y}," × ")]),e("div",H,[e("div",Q,[t[3]||(t[3]=e("span",{class:"moving-label"},"Moving:",-1)),e("span",W,p(C.value),1)]),s.value.length===0?(r(),c("div",X,[...t[4]||(t[4]=[e("p",null,"No lanes available",-1)])])):(r(),c("div",Y,[(r(!0),c(j,null,q(s.value,l=>(r(),c("div",{key:l.id,class:z(["lane-row",{"lane-row-current":l.id===n.currentLaneId,"lane-row-disabled":l.id===n.currentLaneId}])},[e("label",Z,[L(e("input",{"onUpdate:modelValue":t[0]||(t[0]=M=>i.value=M),type:"radio",name:`lane-${n.cardId}`,value:l.id,disabled:l.id===n.currentLaneId,"aria-disabled":l.id===n.currentLaneId,"aria-label":`Move to ${l.name}`},null,8,ee),[[D,i.value]]),e("span",ae,[e("span",ne,p(l.name),1),l.id===n.currentLaneId?(r(),c("span",oe,"(current)")):h("",!0),w(l)?(r(),c("span",te,[...t[5]||(t[5]=[e("svg",{xmlns:"http://www.w3.org/2000/svg",width:"14",height:"14",viewBox:"0 0 24 24",fill:"currentColor"},[e("path",{d:"M13 10V3L4 14h7v7l9-11h-7z"})],-1)])])):h("",!0)])])],2))),128))])),V.value?(r(),c("div",se,[e("label",le,[L(e("input",{"onUpdate:modelValue":t[1]||(t[1]=l=>m.value=l),type:"checkbox","aria-label":"Run automation on entry"},null,512),[[N,m.value]]),t[6]||(t[6]=e("span",null,"Run automation on entry",-1))])])):h("",!0)]),e("div",ie,[e("button",{class:"btn btn-secondary",disabled:d.value,onClick:y}," Cancel ",8,de),e("button",{class:"btn btn-danger",disabled:d.value,"aria-label":`Remove ${C.value} from board`,onClick:T},p(d.value?"Removing...":"Remove from Board"),9,re),e("button",{class:"btn btn-primary",disabled:!S.value||b.value||d.value,"aria-label":"Move card to selected lane",onClick:F},p(b.value?"Moving...":"Move"),9,ce)])])])):h("",!0)}},Ie=B(ue,[["__scopeId","data-v-bddc7788"]]),ve={class:"modal-content",role:"dialog","aria-labelledby":"archive-modal-title"},me={class:"modal-header"},be=["disabled"],fe={class:"modal-body"},pe={class:"confirm-message"},he={key:0,class:"cleanup-option"},ye={class:"checkbox-label"},ke={class:"modal-footer"},ge=["disabled"],Ce=["disabled"],_e={__name:"ArchiveConfirmModal",props:{isOpen:{type:Boolean,default:!1},sessionName:{type:String,default:"this session"},hasCleanupScript:{type:Boolean,default:!1},loading:{type:Boolean,default:!1}},emits:["confirm","cancel"],setup(n,{emit:_}){const o=n,u=_,v=g(!0);I(()=>o.isOpen,d=>{d&&(v.value=!0)});function f(){u("confirm",v.value)}function i(){o.loading||u("cancel")}function m(){o.loading||u("cancel")}function b(d){d.key==="Escape"&&o.isOpen&&!o.loading&&u("cancel")}return O(()=>{document.addEventListener("keydown",b)}),A(()=>{document.removeEventListener("keydown",b)}),(d,s)=>(r(),G(J,{to:"body"},[n.isOpen?(r(),c("div",{key:0,class:"modal-backdrop",onClick:R(m,["self"])},[e("div",ve,[e("div",me,[s[1]||(s[1]=e("h2",{id:"archive-modal-title",class:"modal-title"}," Archive Session ",-1)),e("button",{class:"close-btn","aria-label":"Close modal",disabled:n.loading,onClick:i}," × ",8,be)]),e("div",fe,[e("p",pe,[s[2]||(s[2]=E(" Are you sure you want to archive ",-1)),e("strong",null,p(n.sessionName),1),s[3]||(s[3]=E("? ",-1))]),n.hasCleanupScript?(r(),c("div",he,[e("label",ye,[L(e("input",{"onUpdate:modelValue":s[0]||(s[0]=C=>v.value=C),type:"checkbox","aria-label":"Run git worktree cleanup"},null,512),[[N,v.value]]),s[4]||(s[4]=e("span",null,"Run git worktree cleanup",-1))])])):h("",!0)]),e("div",ke,[e("button",{class:"btn btn-secondary",disabled:n.loading,onClick:i}," Cancel ",8,ge),e("button",{class:"btn btn-primary",disabled:n.loading,onClick:f},p(n.loading?"Archiving...":"Archive"),9,Ce)])])])):h("",!0)]))}},Le=B(_e,[["__scopeId","data-v-140e797f"]]);export{Le as A,Ie as M};
@@ -0,0 +1 @@
1
+ .modal-backdrop[data-v-bddc7788]{position:fixed;top:0;right:0;bottom:0;left:0;background:#000000b3;display:flex;align-items:center;justify-content:center;z-index:1000}.modal-content[data-v-bddc7788]{background:var(--color-background-secondary, #1f2937);border-radius:.5rem;width:100%;max-width:500px;max-height:90vh;overflow:hidden;display:flex;flex-direction:column;border:1px solid var(--color-border)}.modal-header[data-v-bddc7788]{display:flex;justify-content:space-between;align-items:center;padding:1rem 1.5rem;border-bottom:1px solid var(--color-border)}.modal-title[data-v-bddc7788]{margin:0;font-size:1.25rem;font-weight:600;color:var(--color-text)}.close-btn[data-v-bddc7788]{background:none;border:none;font-size:1.5rem;color:var(--color-text-soft);cursor:pointer;padding:0;line-height:1}.close-btn[data-v-bddc7788]:hover{color:var(--color-text)}.modal-body[data-v-bddc7788]{padding:1.5rem;flex:1;overflow-y:auto}.modal-footer[data-v-bddc7788]{display:flex;justify-content:flex-end;gap:.75rem;padding:1rem 1.5rem;border-top:1px solid var(--color-border)}.moving-info[data-v-bddc7788]{margin-bottom:1.5rem;padding:.75rem;background:var(--color-bg-soft, rgba(255, 255, 255, .05));border-radius:.25rem}.moving-label[data-v-bddc7788]{display:block;font-size:.75rem;color:var(--color-text-soft);margin-bottom:.25rem}.moving-session-name[data-v-bddc7788]{display:block;font-size:.875rem;font-weight:500;color:var(--color-text)}.empty-state[data-v-bddc7788]{display:flex;align-items:center;justify-content:center;padding:2rem;color:var(--color-text-soft)}.lanes-list[data-v-bddc7788]{display:flex;flex-direction:column;gap:.5rem;margin-bottom:1rem}.lane-row[data-v-bddc7788]{border:1px solid var(--color-border);border-radius:.25rem;transition:background-color .15s,border-color .15s}.lane-row[data-v-bddc7788]:not(.lane-row-disabled):hover{background:var(--color-bg-soft);border-color:var(--color-primary)}.lane-row-current[data-v-bddc7788]{opacity:.6}.lane-label[data-v-bddc7788]{display:flex;align-items:center;padding:.75rem;cursor:pointer;gap:.75rem;width:100%}.lane-label input[type=radio][data-v-bddc7788]{flex-shrink:0;width:1rem;height:1rem;cursor:pointer}.lane-label input[type=radio][data-v-bddc7788]:disabled{cursor:not-allowed}.lane-info[data-v-bddc7788]{display:flex;align-items:center;gap:.5rem;flex:1}.lane-name[data-v-bddc7788]{font-size:.875rem;font-weight:500;color:var(--color-text)}.lane-current-badge[data-v-bddc7788]{font-size:.75rem;color:var(--color-text-soft);font-style:italic}.lane-automation-icon[data-v-bddc7788]{color:#f59e0b;flex-shrink:0;display:flex;align-items:center}.automation-option[data-v-bddc7788]{margin-top:1rem;padding-top:1rem;border-top:1px solid var(--color-border)}.checkbox-label[data-v-bddc7788]{display:flex;align-items:center;gap:.5rem;cursor:pointer;font-size:.875rem;color:var(--color-text)}.checkbox-label input[type=checkbox][data-v-bddc7788]{width:1rem;height:1rem;cursor:pointer}.btn[data-v-bddc7788]{padding:.5rem 1rem;border-radius:.25rem;font-weight:500;cursor:pointer;border:none;font-size:.9rem;transition:opacity .2s,background-color .2s}.btn-primary[data-v-bddc7788]{background:var(--color-primary);color:#fff}.btn-primary[data-v-bddc7788]:hover:not(:disabled){opacity:.9}.btn-primary[data-v-bddc7788]:disabled{opacity:.5;cursor:not-allowed}.btn-secondary[data-v-bddc7788]{background:var(--color-background);border:1px solid var(--color-border);color:var(--color-text)}.btn-secondary[data-v-bddc7788]:hover{background:var(--color-background-secondary)}.btn-danger[data-v-bddc7788]{background:#ef4444;color:#fff}.btn-danger[data-v-bddc7788]:hover:not(:disabled){background:#dc2626}.btn-danger[data-v-bddc7788]:disabled{opacity:.5;cursor:not-allowed}.modal-backdrop[data-v-140e797f]{position:fixed;top:0;right:0;bottom:0;left:0;background:#000000b3;display:flex;align-items:center;justify-content:center;z-index:1000}.modal-content[data-v-140e797f]{background:var(--color-background-secondary, #1f2937);border-radius:.5rem;width:100%;max-width:450px;overflow:hidden;display:flex;flex-direction:column;border:1px solid var(--color-border)}.modal-header[data-v-140e797f]{display:flex;justify-content:space-between;align-items:center;padding:1rem 1.5rem;border-bottom:1px solid var(--color-border)}.modal-title[data-v-140e797f]{margin:0;font-size:1.25rem;font-weight:600;color:var(--color-text)}.close-btn[data-v-140e797f]{background:none;border:none;font-size:1.5rem;color:var(--color-text-soft);cursor:pointer;padding:0;line-height:1}.close-btn[data-v-140e797f]:hover{color:var(--color-text)}.modal-body[data-v-140e797f]{padding:1.5rem}.confirm-message[data-v-140e797f]{margin:0;font-size:.9rem;color:var(--color-text);line-height:1.5}.cleanup-option[data-v-140e797f]{margin-top:1rem;padding-top:1rem;border-top:1px solid var(--color-border)}.checkbox-label[data-v-140e797f]{display:flex;align-items:center;gap:.5rem;cursor:pointer;font-size:.875rem;color:var(--color-text)}.checkbox-label input[type=checkbox][data-v-140e797f]{width:1rem;height:1rem;cursor:pointer}.modal-footer[data-v-140e797f]{display:flex;justify-content:flex-end;gap:.75rem;padding:1rem 1.5rem;border-top:1px solid var(--color-border)}.btn[data-v-140e797f]{padding:.5rem 1rem;border-radius:.25rem;font-weight:500;cursor:pointer;border:none;font-size:.9rem;transition:opacity .2s,background-color .2s}.btn-primary[data-v-140e797f]{background:var(--color-primary);color:#fff}.btn-primary[data-v-140e797f]:hover{opacity:.9}.btn-secondary[data-v-140e797f]{background:var(--color-background);border:1px solid var(--color-border);color:var(--color-text)}.btn-secondary[data-v-140e797f]:hover{background:var(--color-background-secondary)}.btn[data-v-140e797f]:disabled{opacity:.5;cursor:not-allowed}.close-btn[data-v-140e797f]:disabled{opacity:.5;cursor:not-allowed}
@@ -0,0 +1 @@
1
+ import{_ as N,k as U,o as V,a as r,c as u,b as s,f as _,d as j,w as P,u as I,t as i,m as k,v as B,i as v,s as J,j as h,z as M,B as $,n as m,g as A,h as q}from"./index-C2QFVD7d.js";import{u as F}from"./commandButtons-CoU3G4zK.js";import{a as z}from"./ApiClient-DfbJwzpz.js";const p={PROJECT_ID:"projectId",PROJECT_ID_ALT:"id",BUTTON_ID:"buttonId",SESSION_ID:"id",SESSION_TAB:"tab"},W={class:"container command-button-detail"},G={key:0,class:"loading-state"},H={key:1,class:"form-container"},K={class:"form-header"},Q={class:"form-group"},X={key:0,class:"form-error"},Y={class:"form-group"},Z={key:0,class:"form-error"},ee={class:"form-group"},se={key:0,class:"form-error"},te={class:"form-group form-group-checkbox"},oe={for:"showOnList",class:"checkbox-label"},ae={class:"form-actions"},le=["disabled"],ne={key:0,class:"form-error-message"},re={class:"modal-body"},ue={class:"modal-footer"},de=["disabled"],ie={__name:"CommandButtonDetailView",setup(me){const d=$(),w=q(),y=F(),b=U(),D=m(!1),O=m(!1),g=m(!1),f=m(!1),c=m(null),a=m({}),t=m({label:"",command:"",sortOrder:0,showOnList:!1}),C=M(()=>!!d.params.buttonId),S=async o=>{D.value=!0;try{const e=d.params[p.PROJECT_ID];let l=y.getButtonById(o);l||(l=await z.getCommandButton(e,o)),l&&(t.value={label:l.label,command:l.command,sortOrder:l.sortOrder||0,showOnList:l.showOnList||!1})}catch(e){c.value=`Failed to load button: ${e.message}`}finally{D.value=!1}},T=()=>(a.value={},t.value.label.trim()||(a.value.label="Label is required"),t.value.command.trim()||(a.value.command="Command is required"),t.value.sortOrder<0&&(a.value.sortOrder="Sort order must be 0 or greater"),Object.keys(a.value).length===0),L=async()=>{if(c.value=null,!!T()){O.value=!0;try{const o=d.params[p.PROJECT_ID],e={label:t.value.label,command:t.value.command,sortOrder:t.value.sortOrder,showOnList:t.value.showOnList};C.value?(await y.updateButton(o,d.params[p.BUTTON_ID],e),b.success("Circus Command updated")):(await y.createButton(o,e),b.success("Circus Command created")),w.push(`/projects/${o}/sessions`)}catch(o){c.value=o.message,b.error(o.message)}finally{O.value=!1}}},x=()=>{w.back()},E=()=>{f.value=!0},R=async()=>{g.value=!0;try{const o=d.params[p.PROJECT_ID],e=d.params[p.BUTTON_ID];await y.deleteButton(o,e),b.success("Circus Command deleted"),f.value=!1,w.push(`/projects/${o}/sessions`)}catch(o){c.value=o.message,b.error(o.message)}finally{g.value=!1}};return V(async()=>{C.value&&await S(d.params.buttonId)}),(o,e)=>{const l=A("router-link");return r(),u("div",W,[D.value?(r(),u("div",G,[...e[7]||(e[7]=[s("span",{class:"loading-spinner"},null,-1),_(" Loading... ",-1)])])):(r(),u("div",H,[s("div",K,[j(l,{to:`/projects/${I(d).params[I(p).PROJECT_ID]}/sessions`,class:"btn btn-outline-secondary"},{default:P(()=>[...e[8]||(e[8]=[_(" ← Back ",-1)])]),_:1},8,["to"]),s("h2",null,i(C.value?"Edit Circus Command":"New Circus Command"),1)]),s("form",{class:"command-button-form",onSubmit:h(L,["prevent"])},[s("div",Q,[e[9]||(e[9]=s("label",{for:"label"},"Label",-1)),k(s("input",{id:"label","onUpdate:modelValue":e[0]||(e[0]=n=>t.value.label=n),type:"text",class:"form-input",placeholder:"e.g., Run Tests",required:""},null,512),[[B,t.value.label]]),a.value.label?(r(),u("span",X,i(a.value.label),1)):v("",!0)]),s("div",Y,[e[10]||(e[10]=s("label",{for:"command"},"Command",-1)),k(s("textarea",{id:"command","onUpdate:modelValue":e[1]||(e[1]=n=>t.value.command=n),class:"form-input",placeholder:"e.g., npm test",rows:"4",required:""},null,512),[[B,t.value.command]]),a.value.command?(r(),u("span",Z,i(a.value.command),1)):v("",!0)]),s("div",ee,[e[11]||(e[11]=s("label",{for:"sortOrder"},"Sort Order (optional)",-1)),k(s("input",{id:"sortOrder","onUpdate:modelValue":e[2]||(e[2]=n=>t.value.sortOrder=n),type:"number",class:"form-input",placeholder:"0",min:"0"},null,512),[[B,t.value.sortOrder,void 0,{number:!0}]]),a.value.sortOrder?(r(),u("span",se,i(a.value.sortOrder),1)):v("",!0),e[12]||(e[12]=s("span",{class:"form-help"},"Buttons are displayed in ascending order. Leave as 0 for default.",-1))]),s("div",te,[s("label",oe,[k(s("input",{id:"showOnList","onUpdate:modelValue":e[3]||(e[3]=n=>t.value.showOnList=n),type:"checkbox",class:"form-checkbox"},null,512),[[J,t.value.showOnList]]),e[13]||(e[13]=s("span",null,"Show status indicator on session lists",-1))]),e[14]||(e[14]=s("span",{class:"form-help"},"When enabled, the button status will be displayed on session cards",-1))]),s("div",ae,[s("button",{type:"button",class:"btn btn-outline-secondary",onClick:x}," Cancel "),C.value?(r(),u("button",{key:0,type:"button",class:"btn btn-outline-danger",onClick:E}," Delete ")):v("",!0),s("button",{type:"submit",class:"btn btn-primary",disabled:O.value},i(O.value?"Saving...":C.value?"Update":"Create"),9,le)]),c.value?(r(),u("div",ne,i(c.value),1)):v("",!0)],32)])),f.value?(r(),u("div",{key:2,class:"modal-overlay",onClick:e[6]||(e[6]=n=>f.value=!1)},[s("div",{class:"modal-dialog",onClick:e[5]||(e[5]=h(()=>{},["stop"]))},[e[18]||(e[18]=s("div",{class:"modal-header"},[s("h4",null,"Delete Circus Command")],-1)),s("div",re,[s("p",null,[e[15]||(e[15]=_('Are you sure you want to delete "',-1)),s("strong",null,i(t.value.label),1),e[16]||(e[16]=_('"?',-1))]),e[17]||(e[17]=s("p",null,"This action cannot be undone.",-1))]),s("div",ue,[s("button",{class:"btn btn-outline-secondary",onClick:e[4]||(e[4]=n=>f.value=!1)}," Cancel "),s("button",{class:"btn btn-danger",disabled:g.value,onClick:R},i(g.value?"Deleting...":"Delete"),9,de)])])])):v("",!0)])}}},be=N(ie,[["__scopeId","data-v-471675f8"]]);export{be as default};
@@ -0,0 +1 @@
1
+ .command-button-detail[data-v-471675f8]{max-width:600px;margin:0 auto;padding:2rem 0}.loading-state[data-v-471675f8]{display:flex;align-items:center;justify-content:center;gap:.75rem;padding:3rem;color:var(--color-text-soft)}.form-container[data-v-471675f8]{display:flex;flex-direction:column;gap:2rem}.form-header[data-v-471675f8]{display:flex;align-items:center;gap:1rem}.form-header h2[data-v-471675f8]{margin:0;color:var(--color-text);flex:1}.command-button-form[data-v-471675f8]{display:flex;flex-direction:column;gap:1.5rem;background-color:var(--color-background-soft);border:1px solid var(--color-border);border-radius:var(--border-radius);padding:2rem}.form-group[data-v-471675f8]{display:flex;flex-direction:column;gap:.5rem}.form-group label[data-v-471675f8]{font-weight:500;color:var(--color-text);font-size:.95rem}.form-input[data-v-471675f8]{padding:.75rem;background-color:var(--color-background);border:1px solid var(--color-border);border-radius:var(--border-radius);color:var(--color-text);font-family:inherit;font-size:.95rem;transition:border-color .2s}.form-input[data-v-471675f8]:focus{outline:none;border-color:var(--color-primary);box-shadow:0 0 0 3px #58a6ff1a}.form-input[data-v-471675f8]::placeholder{color:var(--color-text-soft)}textarea.form-input[data-v-471675f8]{font-family:var(--font-mono);font-size:.85rem;resize:vertical;min-height:100px}.form-help[data-v-471675f8]{font-size:.85rem;color:var(--color-text-soft)}.form-error[data-v-471675f8]{font-size:.85rem;color:var(--color-error)}.form-group-checkbox[data-v-471675f8]{gap:.25rem}.checkbox-label[data-v-471675f8]{display:flex;align-items:center;gap:.5rem;font-weight:500;color:var(--color-text);font-size:.95rem;cursor:pointer;-webkit-user-select:none;user-select:none}.form-checkbox[data-v-471675f8]{width:18px;height:18px;cursor:pointer;accent-color:var(--color-primary)}.form-error-message[data-v-471675f8]{padding:.75rem;background-color:#f851491a;border:1px solid var(--color-error);border-radius:var(--border-radius);color:var(--color-error);font-size:.9rem}.form-actions[data-v-471675f8]{display:flex;gap:.75rem;justify-content:flex-end;margin-top:1rem}.form-actions button[data-v-471675f8]:disabled{opacity:.6;cursor:not-allowed}.modal-overlay[data-v-471675f8]{position:fixed;top:0;left:0;right:0;bottom:0;background-color:#00000080;display:flex;align-items:center;justify-content:center;z-index:1000}.modal-dialog[data-v-471675f8]{background-color:var(--color-background-soft);border:1px solid var(--color-border);border-radius:var(--border-radius);max-width:400px;width:90%;overflow:hidden}.modal-header[data-v-471675f8]{padding:1rem;border-bottom:1px solid var(--color-border)}.modal-header h4[data-v-471675f8]{margin:0;color:var(--color-text)}.modal-body[data-v-471675f8]{padding:1.5rem 1rem;color:var(--color-text-soft)}.modal-body p[data-v-471675f8]{margin:.5rem 0}.modal-footer[data-v-471675f8]{padding:1rem;border-top:1px solid var(--color-border);display:flex;gap:.5rem;justify-content:flex-end}@media (max-width: 640px){.command-button-detail[data-v-471675f8]{padding:1rem}.form-header[data-v-471675f8]{flex-direction:column;align-items:flex-start}.command-button-form[data-v-471675f8]{padding:1.5rem 1rem}.form-actions[data-v-471675f8]{flex-direction:column-reverse}.form-actions button[data-v-471675f8]{width:100%}}
@@ -0,0 +1 @@
1
+ import{p as f,a6 as g,_ as b,k as E,n as h,l as _,a as p,c as m,b as j,F as I,r as w,t as x,u as k,z as C,U as L}from"./index-C2QFVD7d.js";import{a as r}from"./ApiClient-DfbJwzpz.js";import{u as O}from"./sessions-Nq5VafSf.js";const P=["low","medium","high","max","auto"],H=[{id:"claude-haiku-4-5-20251001",name:"Haiku 4.5",description:"Fast & lightweight"},{id:"claude-sonnet-4-6",name:"Sonnet 4.6",description:"Balanced"},{id:"claude-opus-4-6",name:"Opus 4.6",description:"Previous generation"},{id:"claude-opus-4-7",name:"Opus 4.7",description:"Most capable (default)"}],K="claude-opus-4-7",Q=[{id:"gpt-5.5",name:"GPT-5.5",description:"Flagship coding and professional work",seedId:"openai-gpt-5-5"},{id:"gpt-5.4",name:"GPT-5.4",description:"High capability professional work",seedId:"openai-gpt-5-4"},{id:"gpt-5.4-mini",name:"GPT-5.4 mini",description:"Fast lower-cost coding and subagent work",seedId:"openai-gpt-5-4-mini"},{id:"gpt-5.3-codex",name:"GPT-5.3-Codex",description:"Coding-optimized agentic model",seedId:"openai-gpt-5-3-codex"}],Y=f("templates",{state:()=>({projectTemplates:[],globalTemplates:[],currentProjectId:null,loading:!1,error:null}),getters:{allTemplates:t=>[...t.projectTemplates,...t.globalTemplates],getTemplateById:t=>e=>t.projectTemplates.find(s=>s.id===e)||t.globalTemplates.find(s=>s.id===e),quickResponseTemplates:t=>{const e=s=>s.filter(l=>l.showInQuickResponses).slice().sort((l,o)=>(l.quickResponseSortOrder??0)-(o.quickResponseSortOrder??0)||(l.createdAt??0)-(o.createdAt??0)||l.name.localeCompare(o.name));return{project:e(t.projectTemplates),global:e(t.globalTemplates)}},hasQuickResponseTemplates(){return this.quickResponseTemplates.project.length>0||this.quickResponseTemplates.global.length>0}},actions:{async fetchProjectTemplates(t){this.loading=!0,this.error=null;try{const e=await r.getProjectTemplates(t);this.projectTemplates=e.project||[],this.globalTemplates=e.global||[],this.currentProjectId=t}catch(e){this.error=e.message}finally{this.loading=!1}},async createProjectTemplate(t,e){this.loading=!0,this.error=null;try{const s=await r.createProjectTemplate(t,e);return this.projectTemplates.unshift(s),s}catch(s){throw this.error=s.message,s}finally{this.loading=!1}},async createGlobalTemplate(t){this.loading=!0,this.error=null;try{const e=await r.createGlobalTemplate(t);return this.globalTemplates.unshift(e),e}catch(e){throw this.error=e.message,e}finally{this.loading=!1}},async updateTemplate(t,e){this.loading=!0,this.error=null;try{const s=await r.updateTemplate(t,e);let l=this.projectTemplates.findIndex(o=>o.id===t);return l!==-1?this.projectTemplates[l]=s:(l=this.globalTemplates.findIndex(o=>o.id===t),l!==-1&&(this.globalTemplates[l]=s)),s}catch(s){throw this.error=s.message,s}finally{this.loading=!1}},async deleteTemplate(t){this.loading=!0,this.error=null;try{await r.deleteTemplate(t),this.projectTemplates=this.projectTemplates.filter(e=>e.id!==t),this.globalTemplates=this.globalTemplates.filter(e=>e.id!==t)}catch(e){throw this.error=e.message,e}finally{this.loading=!1}}}}),R=f("todos",{state:()=>({items:[],loading:!1,error:null,expanded:!1,currentConversationId:null}),getters:{hasTodos:t=>t.items.length>0,pendingCount:t=>t.items.filter(e=>e.status==="pending").length,inProgressCount:t=>t.items.filter(e=>e.status==="in_progress").length,completedCount:t=>t.items.filter(e=>e.status==="completed").length},actions:{async fetchTodos(t,e=null){this.loading=!0,this.error=null,this.currentConversationId=e;try{this.items=await r.getSessionTodos(t,e)}catch(s){this.error=s.message}finally{this.loading=!1}},updateTodos(t,e=null){(e===null||this.currentConversationId===null||e===this.currentConversationId)&&(this.items=t)},clearTodos(){this.items=[],this.loading=!1,this.error=null,this.currentConversationId=null,this.expanded=!1},toggleExpanded(){this.expanded=!this.expanded},setExpanded(t){this.expanded=t}}}),F=Symbol("overlay-sessions-store"),D=Symbol("overlay-todos-store");function V(){return g(F,O())}function $(){return g(D,R())}const A={class:"effort-selector"},B=["value","disabled"],G=["value"],q={__name:"EffortLevelSelector",props:{sessionId:{type:String,default:null},modelValue:{type:String,default:null},disabled:{type:Boolean,default:!1}},emits:["update:modelValue"],setup(t,{emit:e}){const s=t,l=e,o=V(),T=E(),d=h(!1),S=["auto",...P.filter(a=>a!=="auto")].map(a=>({value:a,label:`${a.charAt(0).toUpperCase()+a.slice(1)} Effort`})),u=C(()=>{var a;return s.sessionId?((a=o.currentSession)==null?void 0:a.effortLevel)||"auto":s.modelValue||"auto"}),n=h(u.value),y=L(s,"modelValue");_([u,y],([a])=>{n.value=a||"auto"},{flush:"sync"});async function v(a){if(!d.value&&n.value!==a)if(n.value=a,s.sessionId){d.value=!0;try{await o.updateSessionFields(s.sessionId,{effortLevel:a==="auto"?null:a})}catch(c){n.value=u.value,T.error(c.message)}finally{d.value=!1}}else l("update:modelValue",a==="auto"?null:a)}return(a,c)=>(p(),m("div",A,[j("select",{id:"effort-select",value:n.value,disabled:t.disabled||d.value,class:"effort-select","aria-label":"Effort level",onChange:c[0]||(c[0]=i=>v(i.target.value))},[(p(!0),m(I,null,w(k(S),i=>(p(),m("option",{key:i.value,value:i.value},x(i.label),9,G))),128))],40,B)]))}},J=b(q,[["__scopeId","data-v-8bc1fe64"]]);export{H as C,K as D,J as E,Q as O,F as S,D as T,R as a,V as b,$ as c,Y as u};
@@ -1 +1 @@
1
- import{_ as m,k as _,o as b,l as y,u as S,a as i,c as r,b as s,f as c,m as h,q as k,t as d,i as p,j as x,n as u}from"./index-B6G18FqB.js";import{u as w}from"./settings-Z4AVVmkJ.js";import"./ApiClient-B4YTtyY4.js";const V={key:0,class:"loading-state"},G={class:"form-group"},A={class:"checkbox-label"},B={key:0,class:"error-message"},C={class:"form-actions"},D=["disabled"],M={key:0,class:"loading-spinner"},N={__name:"GeneralSettingsView",setup(U){const n=w(),v=_(),l=u(!1),a=u(!1),o=u(null);b(()=>{n.fetchGeneralSettings()}),y(()=>n.generalSettings,t=>{t&&(l.value=t.disableAnalytics)},{immediate:!0});async function f(){a.value=!0,o.value=null;try{await n.updateGeneralSettings({disableAnalytics:l.value}),v.success("General settings saved successfully")}catch(t){o.value=t.message}finally{a.value=!1}}return(t,e)=>S(n).loading?(i(),r("div",V,[...e[1]||(e[1]=[s("span",{class:"loading-spinner"},null,-1),c(" Loading... ",-1)])])):(i(),r("form",{key:1,class:"form card",onSubmit:x(f,["prevent"])},[s("div",G,[s("label",A,[h(s("input",{"onUpdate:modelValue":e[0]||(e[0]=g=>l.value=g),type:"checkbox"},null,512),[[k,l.value]]),e[2]||(e[2]=c(" Disable analytics tracking ",-1))]),e[3]||(e[3]=s("p",{class:"form-help"}," When checked, no usage analytics will be collected. Changes take effect on next page load. ",-1))]),o.value?(i(),r("div",B,d(o.value),1)):p("",!0),s("div",C,[s("button",{type:"submit",class:"btn btn-primary",disabled:a.value},[a.value?(i(),r("span",M)):p("",!0),c(" "+d(a.value?"Saving...":"Save Settings"),1)],8,D)])],32))}},I=m(N,[["__scopeId","data-v-0cd79804"]]);export{I as default};
1
+ import{_ as m,k as _,o as b,l as y,u as S,a as i,c as r,b as s,f as c,m as h,s as k,t as d,i as p,j as x,n as u}from"./index-C2QFVD7d.js";import{u as w}from"./settings-DtpuiyT6.js";import"./ApiClient-DfbJwzpz.js";const V={key:0,class:"loading-state"},G={class:"form-group"},A={class:"checkbox-label"},B={key:0,class:"error-message"},C={class:"form-actions"},D=["disabled"],M={key:0,class:"loading-spinner"},N={__name:"GeneralSettingsView",setup(U){const n=w(),v=_(),l=u(!1),a=u(!1),o=u(null);b(()=>{n.fetchGeneralSettings()}),y(()=>n.generalSettings,t=>{t&&(l.value=t.disableAnalytics)},{immediate:!0});async function f(){a.value=!0,o.value=null;try{await n.updateGeneralSettings({disableAnalytics:l.value}),v.success("General settings saved successfully")}catch(t){o.value=t.message}finally{a.value=!1}}return(t,e)=>S(n).loading?(i(),r("div",V,[...e[1]||(e[1]=[s("span",{class:"loading-spinner"},null,-1),c(" Loading... ",-1)])])):(i(),r("form",{key:1,class:"form card",onSubmit:x(f,["prevent"])},[s("div",G,[s("label",A,[h(s("input",{"onUpdate:modelValue":e[0]||(e[0]=g=>l.value=g),type:"checkbox"},null,512),[[k,l.value]]),e[2]||(e[2]=c(" Disable analytics tracking ",-1))]),e[3]||(e[3]=s("p",{class:"form-help"}," When checked, no usage analytics will be collected. Changes take effect on next page load. ",-1))]),o.value?(i(),r("div",B,d(o.value),1)):p("",!0),s("div",C,[s("button",{type:"submit",class:"btn btn-primary",disabled:a.value},[a.value?(i(),r("span",M)):p("",!0),c(" "+d(a.value?"Saving...":"Save Settings"),1)],8,D)])],32))}},L=m(N,[["__scopeId","data-v-0cd79804"]]);export{L as default};
@@ -0,0 +1 @@
1
+ import{_ as N,n as l,l as $,a as s,c as o,b as t,m as D,v as j,j as F,t as h,f as w,i as f,F as k,r as S}from"./index-C2QFVD7d.js";import{a as T}from"./ApiClient-DfbJwzpz.js";const E={class:"path-chooser"},I={class:"path-input-group"},L={class:"path-browser"},M={class:"browser-header"},U={class:"browser-path"},q={class:"browser-content"},z={key:1,class:"browser-loading"},A={key:2,class:"browser-error"},G=["onClick"],H={key:0,class:"browser-empty"},J={key:1,class:"browser-empty"},K={__name:"PathChooser",props:{modelValue:{type:String,default:""}},emits:["update:modelValue"],setup(g,{emit:C}){const y=g,_=C,r=l(y.modelValue);$(()=>y.modelValue,a=>{a!==r.value&&(r.value=a)});function V(){_("update:modelValue",r.value)}const p=l(!1),i=l(""),c=l(null),d=l([]),b=l(!1),u=l(null);async function B(){p.value=!0,await m(r.value||"")}function v(){p.value=!1}async function m(a){b.value=!0,u.value=null;try{const e=await T.browseDirectory(a);i.value=e.path,c.value=e.parent,d.value=e.entries,e.error&&(u.value=e.error)}catch(e){u.value=e.message||"Failed to browse directory"}finally{b.value=!1}}function P(){r.value=i.value,_("update:modelValue",i.value),v()}function x(a,e){return a==="/"?`/${e}`:`${a}/${e}`}return(a,e)=>(s(),o("div",E,[t("div",I,[D(t("input",{"onUpdate:modelValue":e[0]||(e[0]=n=>r.value=n),type:"text",class:"form-input",placeholder:"/path/to/project",onInput:V},null,544),[[j,r.value]]),t("button",{type:"button",class:"btn",onClick:B}," Browse ")]),p.value?(s(),o("div",{key:0,class:"path-browser-overlay",onClick:F(v,["self"])},[t("div",L,[t("div",M,[t("span",U,h(i.value),1),t("button",{type:"button",class:"browser-close",onClick:v}," × ")]),t("div",q,[c.value?(s(),o("div",{key:0,class:"browser-item parent",onClick:e[1]||(e[1]=n=>m(c.value))},[...e[2]||(e[2]=[t("span",{class:"browser-item-icon"},"←",-1),w(" Parent Directory ",-1)])])):f("",!0),b.value?(s(),o("div",z,[...e[3]||(e[3]=[t("span",{class:"loading-spinner"},null,-1),w(" Loading... ",-1)])])):u.value?(s(),o("div",A,h(u.value),1)):(s(),o(k,{key:3},[(s(!0),o(k,null,S(d.value,n=>(s(),o("div",{key:n.name,class:"browser-item",onClick:O=>m(x(i.value,n.name))},[e[4]||(e[4]=t("span",{class:"browser-item-icon"},"📁",-1)),w(" "+h(n.name),1)],8,G))),128)),d.value.length===0&&!c.value?(s(),o("div",H," No subdirectories ")):d.value.length===0?(s(),o("div",J," No subdirectories in this folder ")):f("",!0)],64))]),t("div",{class:"browser-footer"},[t("button",{type:"button",class:"btn",onClick:v}," Cancel "),t("button",{type:"button",class:"btn btn-primary",onClick:P}," Select ")])])])):f("",!0)]))}},W=N(K,[["__scopeId","data-v-6bb30ba2"]]);export{W as P};
@@ -1 +1 @@
1
- .path-chooser[data-v-297ad79a]{width:100%}.path-input-group[data-v-297ad79a]{display:flex;gap:.5rem}.path-input-group .form-input[data-v-297ad79a]{flex:1}.path-browser-overlay[data-v-297ad79a]{position:fixed;top:0;left:0;right:0;bottom:0;background-color:#000000b3;display:flex;align-items:center;justify-content:center;z-index:1000}.path-browser[data-v-297ad79a]{background-color:var(--color-background-soft);border:1px solid var(--color-border);border-radius:var(--border-radius);width:90%;max-width:600px;max-height:80vh;display:flex;flex-direction:column}.browser-header[data-v-297ad79a]{display:flex;justify-content:space-between;align-items:center;padding:1rem;border-bottom:1px solid var(--color-border);background-color:var(--color-background-mute);border-radius:var(--border-radius) var(--border-radius) 0 0}.browser-path[data-v-297ad79a]{font-family:var(--font-mono);font-size:.875rem;color:var(--color-text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1;margin-right:1rem}.browser-close[data-v-297ad79a]{background:none;border:none;color:var(--color-text-soft);font-size:1.5rem;line-height:1;padding:0;cursor:pointer;width:2rem;height:2rem;display:flex;align-items:center;justify-content:center;border-radius:var(--border-radius)}.browser-close[data-v-297ad79a]:hover{background-color:var(--color-background);color:var(--color-text)}.browser-content[data-v-297ad79a]{flex:1;overflow-y:auto;padding:.5rem;min-height:200px;max-height:400px}.browser-item[data-v-297ad79a]{display:flex;align-items:center;gap:.5rem;padding:.625rem .75rem;cursor:pointer;border-radius:var(--border-radius);color:var(--color-text);font-size:.875rem}.browser-item[data-v-297ad79a]:hover{background-color:var(--color-background-mute)}.browser-item.parent[data-v-297ad79a]{color:var(--color-primary);border-bottom:1px solid var(--color-border);margin-bottom:.5rem;border-radius:0}.browser-item.parent[data-v-297ad79a]:hover{background-color:var(--color-background)}.browser-item-icon[data-v-297ad79a]{flex-shrink:0}.browser-loading[data-v-297ad79a]{display:flex;align-items:center;justify-content:center;gap:.5rem;padding:2rem;color:var(--color-text-soft)}.browser-error[data-v-297ad79a]{padding:1rem;color:var(--color-error);text-align:center}.browser-empty[data-v-297ad79a]{padding:2rem;color:var(--color-text-soft);text-align:center}.browser-footer[data-v-297ad79a]{display:flex;justify-content:flex-end;gap:.5rem;padding:1rem;border-top:1px solid var(--color-border);background-color:var(--color-background-mute);border-radius:0 0 var(--border-radius) var(--border-radius)}@media (max-width: 480px){.path-input-group[data-v-297ad79a]{flex-direction:column}.path-input-group .btn[data-v-297ad79a]{width:100%}}.input-with-button{display:flex;gap:.5rem;align-items:stretch}.input-with-button .form-input{flex:1}.input-with-button .btn{flex-shrink:0}
1
+ .path-chooser[data-v-6bb30ba2]{width:100%}.path-input-group[data-v-6bb30ba2]{display:flex;gap:.5rem}.path-input-group .form-input[data-v-6bb30ba2]{flex:1}.path-browser-overlay[data-v-6bb30ba2]{position:fixed;top:0;left:0;right:0;bottom:0;background-color:#000000b3;display:flex;align-items:center;justify-content:center;z-index:1000}.path-browser[data-v-6bb30ba2]{background-color:var(--color-background-soft);border:1px solid var(--color-border);border-radius:var(--border-radius);width:90%;max-width:600px;max-height:80vh;display:flex;flex-direction:column}.browser-header[data-v-6bb30ba2]{display:flex;justify-content:space-between;align-items:center;padding:1rem;border-bottom:1px solid var(--color-border);background-color:var(--color-background-mute);border-radius:var(--border-radius) var(--border-radius) 0 0}.browser-path[data-v-6bb30ba2]{font-family:var(--font-mono);font-size:.875rem;color:var(--color-text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1;margin-right:1rem}.browser-close[data-v-6bb30ba2]{background:none;border:none;color:var(--color-text-soft);font-size:1.5rem;line-height:1;padding:0;cursor:pointer;width:2rem;height:2rem;display:flex;align-items:center;justify-content:center;border-radius:var(--border-radius)}.browser-close[data-v-6bb30ba2]:hover{background-color:var(--color-background);color:var(--color-text)}.browser-content[data-v-6bb30ba2]{flex:1;overflow-y:auto;padding:.5rem;min-height:200px;max-height:400px}.browser-item[data-v-6bb30ba2]{display:flex;align-items:center;gap:.5rem;padding:.625rem .75rem;cursor:pointer;border-radius:var(--border-radius);color:var(--color-text);font-size:.875rem}.browser-item[data-v-6bb30ba2]:hover{background-color:var(--color-background-mute)}.browser-item.parent[data-v-6bb30ba2]{color:var(--color-primary);border-bottom:1px solid var(--color-border);margin-bottom:.5rem;border-radius:0}.browser-item.parent[data-v-6bb30ba2]:hover{background-color:var(--color-background)}.browser-item-icon[data-v-6bb30ba2]{flex-shrink:0}.browser-loading[data-v-6bb30ba2]{display:flex;align-items:center;justify-content:center;gap:.5rem;padding:2rem;color:var(--color-text-soft)}.browser-error[data-v-6bb30ba2]{padding:1rem;color:var(--color-error);text-align:center}.browser-empty[data-v-6bb30ba2]{padding:2rem;color:var(--color-text-soft);text-align:center}.browser-footer[data-v-6bb30ba2]{display:flex;justify-content:flex-end;gap:.5rem;padding:1rem;border-top:1px solid var(--color-border);background-color:var(--color-background-mute);border-radius:0 0 var(--border-radius) var(--border-radius)}@media (max-width: 480px){.path-input-group[data-v-6bb30ba2]{flex-direction:column}.path-input-group .btn[data-v-6bb30ba2]{width:100%}}.input-with-button{display:flex;gap:.5rem;align-items:stretch}.input-with-button .form-input{flex:1}.input-with-button .btn{flex-shrink:0}
@@ -1 +1 @@
1
- import{_ as t,a,c as n,f as e,b as o}from"./index-B6G18FqB.js";const r={class:"form-help"},l={__name:"InterpolationHelp",setup(c){return(p,s)=>(a(),n("p",r,[...s[0]||(s[0]=[e(" Available variables: ",-1),o("code",null,"{{rootSession.id}}",-1),e(", ",-1),o("code",null,"{{rootSession.name}}",-1),e(", ",-1),o("code",null,"{{rootSession.summary}}",-1),e(", ",-1),o("code",null,"{{rootSession.status}}",-1)])]))}},i=t(l,[["__scopeId","data-v-26718cef"]]);export{i as I};
1
+ import{_ as t,a,c as n,f as e,b as o}from"./index-C2QFVD7d.js";const r={class:"form-help"},l={__name:"InterpolationHelp",setup(c){return(p,s)=>(a(),n("p",r,[...s[0]||(s[0]=[e(" Available variables: ",-1),o("code",null,"{{rootSession.id}}",-1),e(", ",-1),o("code",null,"{{rootSession.name}}",-1),e(", ",-1),o("code",null,"{{rootSession.summary}}",-1),e(", ",-1),o("code",null,"{{rootSession.status}}",-1)])]))}},i=t(l,[["__scopeId","data-v-26718cef"]]);export{i as I};
@@ -0,0 +1,2 @@
1
+ const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-BjuRttEY.js","assets/index-C2QFVD7d.js","assets/index-uySCcnA_.css","assets/SessionDetailView-B59TEkr-.js","assets/sessions-Nq5VafSf.js","assets/ApiClient-DfbJwzpz.js","assets/projects-C-8PSxKi.js","assets/EffortLevelSelector-D2Hdzc_8.js","assets/EffortLevelSelector-BQaQmU2d.css","assets/SessionLogStream-5NfVr9pF.js","assets/commandButtons-CoU3G4zK.js","assets/SessionLogStream-zPUTiGbe.css","assets/SlashCommandWizard-BQ_rMzn-.js","assets/providers-oXifvvqN.js","assets/SlashCommandWizard-DJzw3LP5.css","assets/useSummaryHelpers-GVg7sMWF.js","assets/ModelSelector-72C7MUH4.js","assets/ModelSelector-BNYKujL-.css","assets/ArchiveConfirmModal-DXZYdzHR.js","assets/ArchiveConfirmModal-DeoCVGXt.css","assets/projectDefaults-B8esIcYq.js","assets/QuickResponsesPanel-BqmnTd-D.js","assets/QuickResponsesPanel-dk-Rj8xx.css","assets/ResizableTextarea-DpWdIAP6.js","assets/ResizableTextarea-BQNw5e0C.css","assets/SessionDetailView-CKVBnR4T.css","assets/style-BTin-zR_.css"])))=>i.map(i=>d[i]);
2
+ import{n as E,l as u,G as T,a as l,c as y,x as k,w as d,b as m,f as x,d as V,u as h,ac as w,Q as b,R as p}from"./index-C2QFVD7d.js";import{u as A}from"./SessionDetailView-B59TEkr-.js";import"./sessions-Nq5VafSf.js";import"./ApiClient-DfbJwzpz.js";import"./projects-C-8PSxKi.js";import"./EffortLevelSelector-D2Hdzc_8.js";import"./SessionLogStream-5NfVr9pF.js";import"./commandButtons-CoU3G4zK.js";import"./SlashCommandWizard-BQ_rMzn-.js";import"./providers-oXifvvqN.js";import"./useSummaryHelpers-GVg7sMWF.js";import"./ModelSelector-72C7MUH4.js";import"./ArchiveConfirmModal-DXZYdzHR.js";import"./projectDefaults-B8esIcYq.js";import"./QuickResponsesPanel-BqmnTd-D.js";import"./ResizableTextarea-DpWdIAP6.js";const B={class:"canvas-md-editor"},H={__name:"MarkdownEditor",props:{content:{type:String,default:""},sessionId:{type:String,required:!0},filename:{type:String,required:!0},itemId:{type:String,required:!0}},emits:["save"],setup(c,{expose:f,emit:v}){const _=b(()=>p(()=>import("./index-BjuRttEY.js").then(e=>e.w),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25])).then(async e=>(await p(()=>Promise.resolve({}),__vite__mapDeps([26])),e.MdEditor))),r=c,n=v,g=A(),o=E(r.content||"");let t=null,a=r.content||"";u(o,e=>{e!==a&&(t&&clearTimeout(t),t=setTimeout(()=>{a=e,n("save",e)},1e3))});function s(){t&&(clearTimeout(t),t=null),o.value!==a&&n("save",o.value)}return f({flushPendingSave:s}),u(()=>r.content,e=>{e!==o.value&&(t&&(clearTimeout(t),t=null),a=e||"",o.value=e||"")}),T(()=>{s(),g.endEditing(r.filename)}),(e,i)=>(l(),y("div",B,[(l(),k(w,null,{default:d(()=>[V(h(_),{modelValue:o.value,"onUpdate:modelValue":i[0]||(i[0]=S=>o.value=S),theme:"dark",preview:!1,language:"en-US","no-upload-img":!0,"show-code-row-number":!0},null,8,["modelValue"])]),fallback:d(()=>[...i[1]||(i[1]=[m("div",{class:"editor-loading"},[m("span",{class:"loading-spinner"}),x(" Loading editor... ")],-1)])]),_:1}))]))}};export{H as default};
@@ -0,0 +1 @@
1
+ import{u as G}from"./providers-oXifvvqN.js";import{_ as Q,o as W,n as b,l as M,a as p,c as I,b as X,t as k,i as Y,F as P,r as x,J as Z,z as i,U as $}from"./index-C2QFVD7d.js";const ee=["data-model","data-provider-id"],te=["value","disabled"],le={key:0,value:""},oe=["label","data-agent-type"],de=["value","data-provider-id","data-model-id","data-agent-type"],ne={__name:"ModelSelector",props:{modelValue:{type:String,default:null},disabled:{type:Boolean,default:!1},allowEmpty:{type:Boolean,default:!1},emptyLabel:{type:String,default:"Use system default"},selectClass:{type:String,default:""},providerId:{type:String,default:null},hideBuiltInDuplicates:{type:Boolean,default:!0}},emits:["update:modelValue","model-selected","update:providerId"],setup(y,{emit:E}){const n=y,c=E,a=G(),V=i(()=>a.providers.length>0&&a.providers.some(e=>e.models&&e.models.length>0)),F=i(()=>{const e=new Set;for(const t of h.value)if(t.models)for(const l of t.models)e.add(l.modelId);return e});function w(e){return e&&F.value.has(e)}function f(e){return(e==null?void 0:e.kind)==="openai"?"codex":"claude-code"}function L(e){return f(e)==="codex"?"Codex":"Claude Code"}const D=i(()=>{const e=[...a.providers];return e.sort((t,l)=>{const o=f(t),d=f(l);return o!==d?o==="claude-code"?-1:1:t.isBuiltIn!==l.isBuiltIn?t.isBuiltIn?-1:1:(t.name||"").localeCompare(l.name||"")}),e}),h=i(()=>{const e=new Set;for(const t of a.providers)if(!(t.isBuiltIn||!t.models))for(const l of t.models)e.add(l.modelId);return D.value.map(t=>!n.hideBuiltInDuplicates||!t.isBuiltIn?t:z(t,e)).filter(t=>{var l;return(l=t.models)==null?void 0:l.length})}),K=i(()=>{const e=new Map;for(const t of h.value)for(const l of t.models||[])e.set(l.modelId,(e.get(l.modelId)||0)+1);return new Set([...e.entries()].filter(([,t])=>t>1).map(([t])=>t))});function z(e,t){return{...e,models:(e.models||[]).filter(l=>!t.has(l.modelId))}}const v=i(()=>{var o;const e=a.providers.filter(d=>f(d)==="claude-code");if(e.length===0)return null;const l=e.find(d=>d.isBuiltIn)||e[0];if((o=l==null?void 0:l.models)!=null&&o.length){const d=l.models.find(m=>m.tier==="sonnet");return(d==null?void 0:d.modelId)||l.models[0].modelId}return null}),N=b(!1);W(async()=>{(a.providers.length===0||!V.value)&&await a.fetchProviders(),N.value=!0});function B(e){var l;if(!e)return null;if(e.includes("claude-"))return e;const t=a.providers.find(o=>o.isBuiltIn&&f(o)==="claude-code");if((l=t==null?void 0:t.models)!=null&&l.length){const o=t.models.find(d=>d.tier===e);if(o)return o.modelId}return e}const r=b(B(n.modelValue)),s=b(n.providerId),u=i(()=>n.allowEmpty&&(!r.value||r.value==="")?"":r.value&&w(r.value)?r.value:v.value?v.value:r.value),C=i(()=>{if(!u.value)return null;const e=g(u.value,n.providerId||s.value);return(e==null?void 0:e.provider.id)||null}),O=i(()=>{if(n.allowEmpty&&(!u.value||u.value==="")||!u.value)return"";const e=g(u.value,n.providerId||s.value);return e?_(e.provider.id,e.model.modelId):u.value}),R=$(n,"modelValue");M(R,e=>{r.value=B(e)},{flush:"sync"}),M($(n,"providerId"),e=>{s.value=e},{flush:"sync"}),M(()=>a.providers,T,{deep:!0,immediate:!0});function T(){if(!V.value)return;if(n.allowEmpty&&(!n.modelValue||n.modelValue==="")){r.value="";return}const e=n.modelValue?B(n.modelValue):null;if(e&&w(e)){H(e);return}U()}function H(e){var l;const t=((l=g(e,n.providerId))==null?void 0:l.provider.id)||null;if(r.value===e){s.value!==t&&(s.value=t,c("update:providerId",t));return}r.value=e,s.value=t,e!==n.modelValue&&c("update:modelValue",e),t!==n.providerId&&c("update:providerId",t)}function U(){var e;!v.value||r.value===v.value||(r.value=v.value,s.value=((e=g(v.value))==null?void 0:e.provider.id)||null,c("update:modelValue",v.value))}function J(e){const t=e.target.value,l=t?q(t):null,o=l?{modelId:l.modelId,providerId:l.providerId,kind:j(l.providerId)}:{modelId:"",providerId:null,kind:null},d=o.modelId;u.value===d&&C.value===o.providerId||(r.value=d,s.value=o.providerId,c("update:modelValue",d),c("update:providerId",o.providerId),c("model-selected",o))}function j(e){if(!e)return null;const t=a.providers.find(l=>l.id===e);return(t==null?void 0:t.kind)||"anthropic"}function _(e,t){return`${e}::${t}`}function q(e){const t=e.indexOf("::");return t===-1?null:{providerId:e.slice(0,t),modelId:e.slice(t+2)}}function g(e,t=null){var l,o;if(!e)return null;for(const d of h.value){if(t&&d.id!==t)continue;const m=(l=d.models)==null?void 0:l.find(S=>S.modelId===e);if(m)return{provider:d,model:m}}for(const d of h.value){const m=(o=d.models)==null?void 0:o.find(S=>S.modelId===e);if(m)return{provider:d,model:m}}return null}function A(e,t){const l=e.isBuiltIn?t.displayName:t.modelId;return K.value.has(t.modelId)?`${l} (${e.name})`:l}return(e,t)=>(p(),I("div",{class:"model-selector","data-model":u.value,"data-provider-id":C.value||""},[X("select",{id:"model-select",value:O.value,disabled:y.disabled,class:Z(y.selectClass||"model-select"),onChange:t[0]||(t[0]=l=>J(l))},[y.allowEmpty?(p(),I("option",le,k(y.emptyLabel),1)):Y("",!0),(p(!0),I(P,null,x(h.value,l=>(p(),I("optgroup",{key:l.id,label:`${L(l)} · ${l.name}`,"data-agent-type":f(l)},[(p(!0),I(P,null,x(l.models,o=>(p(),I("option",{key:`${l.id}:${o.id}`,value:_(l.id,o.modelId),"data-provider-id":l.id,"data-model-id":o.modelId,"data-agent-type":f(l)},k(A(l,o)),9,de))),128))],8,oe))),128))],42,te)],8,ee))}},ue=Q(ne,[["__scopeId","data-v-c344ef1a"]]);export{ue as M};
@@ -1 +1 @@
1
- .model-selector[data-v-3e00f414]{display:flex;align-items:center;gap:.5rem}.model-select[data-v-3e00f414]{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:.375rem 2rem .375rem .5rem;font-size:.75rem;font-weight:500;background-color:var(--color-background);border:1px solid var(--color-border);border-radius:.375rem;color:var(--color-text-soft);cursor:pointer;transition:all .15s;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%239ca3af' d='M1.5 4.5l4.5 4 4.5-4'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right .5rem center;background-size:12px}.model-select[data-v-3e00f414]:hover:not(:disabled){border-color:var(--color-border-hover);background-color:var(--color-bg-hover)}.model-select[data-v-3e00f414]:focus{outline:none;border-color:var(--color-primary);box-shadow:0 0 0 2px #06b6d41a}.model-select[data-v-3e00f414]:disabled{opacity:.5;cursor:not-allowed}.model-select option[data-v-3e00f414]{background-color:var(--color-background);color:var(--color-text)}
1
+ .model-selector[data-v-c344ef1a]{display:flex;align-items:center;gap:.5rem}.model-select[data-v-c344ef1a]{-webkit-appearance:none;-moz-appearance:none;appearance:none;padding:.375rem 2rem .375rem .5rem;font-size:.75rem;font-weight:500;background-color:var(--color-background);border:1px solid var(--color-border);border-radius:.375rem;color:var(--color-text-soft);cursor:pointer;transition:all .15s;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath fill='%239ca3af' d='M1.5 4.5l4.5 4 4.5-4'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right .5rem center;background-size:12px}.model-select[data-v-c344ef1a]:hover:not(:disabled){border-color:var(--color-border-hover);background-color:var(--color-bg-hover)}.model-select[data-v-c344ef1a]:focus{outline:none;border-color:var(--color-primary);box-shadow:0 0 0 2px #06b6d41a}.model-select[data-v-c344ef1a]:disabled{opacity:.5;cursor:not-allowed}.model-select option[data-v-c344ef1a]{background-color:var(--color-background);color:var(--color-text)}