fifony 0.1.32 → 0.1.34

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 (44) hide show
  1. package/app/dist/apple-touch-icon.png +0 -0
  2. package/app/dist/assets/{CommandPalette-DuugDkZo.js → CommandPalette-Du7aS97R.js} +1 -1
  3. package/app/dist/assets/{KeyboardShortcutsHelp-B1a9ZDDu.js → KeyboardShortcutsHelp-mguoBIXk.js} +1 -1
  4. package/app/dist/assets/{OnboardingWizard-BF43aq_I.js → OnboardingWizard-dOrVz-hX.js} +1 -1
  5. package/app/dist/assets/{analytics.lazy-Bc6WBoMs.js → analytics.lazy-CKd9S45z.js} +1 -1
  6. package/app/dist/assets/{createLucideIcon-ggBfAlHh.js → createLucideIcon-CBw-4t9s.js} +1 -1
  7. package/app/dist/assets/index-nWJMQsCn.js +49 -0
  8. package/app/dist/assets/{index-CGCZneFa.css → index-rLcPCr9E.css} +1 -1
  9. package/app/dist/assets/vendor-DkWeBvNl.js +9 -0
  10. package/app/dist/favicon.png +0 -0
  11. package/app/dist/icon-128.png +0 -0
  12. package/app/dist/icon-144.png +0 -0
  13. package/app/dist/icon-152.png +0 -0
  14. package/app/dist/icon-16.png +0 -0
  15. package/app/dist/icon-192.png +0 -0
  16. package/app/dist/icon-32.png +0 -0
  17. package/app/dist/icon-384.png +0 -0
  18. package/app/dist/icon-48.png +0 -0
  19. package/app/dist/icon-512.png +0 -0
  20. package/app/dist/icon-72.png +0 -0
  21. package/app/dist/icon-96.png +0 -0
  22. package/app/dist/icon-maskable-192.png +0 -0
  23. package/app/dist/icon-maskable-512.png +0 -0
  24. package/app/dist/index.html +14 -7
  25. package/app/dist/manifest.webmanifest +19 -19
  26. package/app/dist/og-image.png +0 -0
  27. package/app/dist/service-worker.js +2 -2
  28. package/dist/agent/run-local.js +22 -15
  29. package/dist/{agent-3NYJEHH5.js → agent-QWN3JVX5.js} +5 -5
  30. package/dist/{chunk-FPUTP743.js → chunk-2ZK3IUJQ.js} +11 -11
  31. package/dist/{chunk-2D5P75F6.js → chunk-GW7LVDP3.js} +5 -6
  32. package/dist/{chunk-H2QRC6UQ.js → chunk-KRH4LWCW.js} +3 -3
  33. package/dist/{chunk-FAFGDK62.js → chunk-TSSVMTCS.js} +19 -16
  34. package/dist/cli.js +4 -4
  35. package/dist/{issue-runner-ZNDKLOCZ.js → issue-runner-QGJY5COY.js} +5 -5
  36. package/dist/{issue-state-machine-NBSYRDZW.js → issue-state-machine-6Y2OTUGI.js} +3 -3
  37. package/dist/{issues-GBWLDBVU.js → issues-QSMDQQFO.js} +5 -5
  38. package/dist/{queue-workers-OHPJKAPM.js → queue-workers-TDJWHJMJ.js} +2 -2
  39. package/dist/{scheduler-OU35EYUH.js → scheduler-LWCF7U6Q.js} +5 -5
  40. package/dist/{store-FFHHRNVI.js → store-DSMN6IKR.js} +5 -5
  41. package/dist/{workspace-5XOCMZ57.js → workspace-S5F5JFM6.js} +2 -2
  42. package/package.json +7 -7
  43. package/app/dist/assets/index-Dx5YOoMm.js +0 -49
  44. package/app/dist/assets/vendor-CSL5bxVU.js +0 -9
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -7,18 +7,25 @@
7
7
  <meta name="mobile-web-app-capable" content="yes" />
8
8
  <meta name="apple-mobile-web-app-capable" content="yes" />
9
9
  <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
10
+ <meta name="apple-mobile-web-app-title" content="fifony" />
10
11
  <meta name="format-detection" content="telephone=no" />
11
- <meta name="description" content="fifony orchestrator dashboard" />
12
+ <meta name="description" content="Local AI orchestrator — plan, execute, review code with Claude, Codex & Gemini" />
13
+ <meta property="og:title" content="fifony" />
14
+ <meta property="og:description" content="Local AI orchestrator — plan, execute, review code with Claude, Codex & Gemini" />
15
+ <meta property="og:image" content="/assets/og-image.png" />
16
+ <meta property="og:type" content="website" />
12
17
  <title>fifony</title>
13
18
  <link rel="manifest" href="/assets/manifest.webmanifest" />
14
- <link rel="icon" href="/assets/icon.svg" type="image/svg+xml" />
15
- <link rel="apple-touch-icon" href="/assets/icon.svg" />
16
- <script type="module" crossorigin src="/assets/assets/index-Dx5YOoMm.js"></script>
19
+ <link rel="icon" href="/assets/favicon.png" type="image/png" />
20
+ <link rel="icon" href="/assets/icon-32.png" sizes="32x32" type="image/png" />
21
+ <link rel="icon" href="/assets/icon-16.png" sizes="16x16" type="image/png" />
22
+ <link rel="apple-touch-icon" href="/assets/apple-touch-icon.png" />
23
+ <script type="module" crossorigin src="/assets/assets/index-nWJMQsCn.js"></script>
17
24
  <link rel="modulepreload" crossorigin href="/assets/assets/rolldown-runtime-Dw2cE7zH.js">
18
25
  <link rel="modulepreload" crossorigin href="/assets/assets/api-ChEctgc5.js">
19
- <link rel="modulepreload" crossorigin href="/assets/assets/vendor-CSL5bxVU.js">
20
- <link rel="modulepreload" crossorigin href="/assets/assets/createLucideIcon-ggBfAlHh.js">
21
- <link rel="stylesheet" crossorigin href="/assets/assets/index-CGCZneFa.css">
26
+ <link rel="modulepreload" crossorigin href="/assets/assets/vendor-DkWeBvNl.js">
27
+ <link rel="modulepreload" crossorigin href="/assets/assets/createLucideIcon-CBw-4t9s.js">
28
+ <link rel="stylesheet" crossorigin href="/assets/assets/index-rLcPCr9E.css">
22
29
  </head>
23
30
  <body>
24
31
  <div id="root"></div>
@@ -1,16 +1,16 @@
1
1
  {
2
2
  "id": "/",
3
- "name": "fifony Dashboard",
3
+ "name": "fifony",
4
4
  "short_name": "fifony",
5
- "description": "fifony local orchestrator dashboard (React + PWA)",
5
+ "description": "Local AI orchestrator plan, execute, review code with Claude, Codex & Gemini",
6
6
  "lang": "en-US",
7
7
  "start_url": "/kanban",
8
8
  "scope": "/",
9
- "display": "standalone",
10
- "display_override": ["window-controls-overlay", "standalone", "browser"],
9
+ "display": "fullscreen",
10
+ "display_override": ["fullscreen", "window-controls-overlay", "standalone"],
11
11
  "background_color": "#020617",
12
12
  "theme_color": "#0f172a",
13
- "orientation": "portrait-primary",
13
+ "orientation": "any",
14
14
  "prefer_related_applications": false,
15
15
  "categories": ["productivity", "developer", "business"],
16
16
  "shortcuts": [
@@ -18,32 +18,32 @@
18
18
  "name": "Kanban",
19
19
  "short_name": "Kanban",
20
20
  "url": "/kanban",
21
- "icons": [{ "src": "/icon.svg", "sizes": "any", "type": "image/svg+xml" }]
21
+ "icons": [{ "src": "/icon-96.png", "sizes": "96x96", "type": "image/png" }]
22
22
  },
23
23
  {
24
24
  "name": "Issues",
25
25
  "short_name": "Issues",
26
26
  "url": "/issues",
27
- "icons": [{ "src": "/icon.svg", "sizes": "any", "type": "image/svg+xml" }]
27
+ "icons": [{ "src": "/icon-96.png", "sizes": "96x96", "type": "image/png" }]
28
28
  },
29
29
  {
30
30
  "name": "Agents",
31
31
  "short_name": "Agents",
32
32
  "url": "/agents",
33
- "icons": [{ "src": "/icon.svg", "sizes": "any", "type": "image/svg+xml" }]
33
+ "icons": [{ "src": "/icon-96.png", "sizes": "96x96", "type": "image/png" }]
34
34
  }
35
35
  ],
36
36
  "icons": [
37
- {
38
- "src": "/icon.svg",
39
- "type": "image/svg+xml",
40
- "sizes": "any"
41
- },
42
- {
43
- "src": "/icon-maskable.svg",
44
- "type": "image/svg+xml",
45
- "sizes": "any",
46
- "purpose": "any maskable"
47
- }
37
+ { "src": "/icon-48.png", "sizes": "48x48", "type": "image/png" },
38
+ { "src": "/icon-72.png", "sizes": "72x72", "type": "image/png" },
39
+ { "src": "/icon-96.png", "sizes": "96x96", "type": "image/png" },
40
+ { "src": "/icon-128.png", "sizes": "128x128", "type": "image/png" },
41
+ { "src": "/icon-144.png", "sizes": "144x144", "type": "image/png" },
42
+ { "src": "/icon-152.png", "sizes": "152x152", "type": "image/png" },
43
+ { "src": "/icon-192.png", "sizes": "192x192", "type": "image/png" },
44
+ { "src": "/icon-384.png", "sizes": "384x384", "type": "image/png" },
45
+ { "src": "/icon-512.png", "sizes": "512x512", "type": "image/png" },
46
+ { "src": "/icon-maskable-192.png", "sizes": "192x192", "type": "image/png", "purpose": "maskable" },
47
+ { "src": "/icon-maskable-512.png", "sizes": "512x512", "type": "image/png", "purpose": "maskable" }
48
48
  ]
49
49
  }
Binary file
@@ -1,8 +1,8 @@
1
- const CACHE_VERSION = "1774232635409";
1
+ const CACHE_VERSION = "1774234783902";
2
2
  const CORE_CACHE = `fifony-core-${CACHE_VERSION}`;
3
3
  const ASSET_CACHE = `fifony-assets-${CACHE_VERSION}`;
4
4
  const APP_SHELL_ROUTES = ["/kanban", "/issues", "/agents", "/settings", "/onboarding"];
5
- const APP_SHELL_FILES = ["/offline.html", "/manifest.webmanifest", "/icon.svg", "/icon-maskable.svg"];
5
+ const APP_SHELL_FILES = ["/offline.html", "/manifest.webmanifest", "/favicon.png", "/icon-192.png", "/icon-512.png"];
6
6
  const API_PREFIXES = ["/api/", "/docs", "/ws"];
7
7
 
8
8
  self.addEventListener("install", (event) => {
@@ -23,10 +23,10 @@ import {
23
23
  startApiServer,
24
24
  syncRuntimeConfigSettings,
25
25
  validateConfig
26
- } from "../chunk-FAFGDK62.js";
26
+ } from "../chunk-TSSVMTCS.js";
27
27
  import {
28
28
  computeMetrics
29
- } from "../chunk-H2QRC6UQ.js";
29
+ } from "../chunk-KRH4LWCW.js";
30
30
  import {
31
31
  detectAvailableProviders,
32
32
  detectDefaultBranch,
@@ -34,7 +34,7 @@ import {
34
34
  getProviderDefaultCommand,
35
35
  resolveDefaultProvider,
36
36
  setSkipSource
37
- } from "../chunk-2D5P75F6.js";
37
+ } from "../chunk-GW7LVDP3.js";
38
38
  import {
39
39
  debugBoot,
40
40
  fail,
@@ -47,7 +47,7 @@ import {
47
47
  recoverOrphans,
48
48
  recoverState,
49
49
  stopQueueWorkers
50
- } from "../chunk-FPUTP743.js";
50
+ } from "../chunk-2ZK3IUJQ.js";
51
51
  import {
52
52
  initLogger,
53
53
  logger
@@ -65,7 +65,7 @@ import { env, exit, argv } from "process";
65
65
 
66
66
  // src/persistence/plugins/dev-server.ts
67
67
  import { resolve } from "path";
68
- async function startDevFrontend(apiPort, devPort) {
68
+ async function startDevFrontend(apiPort, devPort, options) {
69
69
  const VITE_CONFIG_PATH = resolve(PACKAGE_ROOT, "app/vite.config.js");
70
70
  let createViteServer;
71
71
  try {
@@ -75,9 +75,14 @@ async function startDevFrontend(apiPort, devPort) {
75
75
  logger.warn("Vite not installed (devDependency). Run 'pnpm install' in the project to enable --dev mode.");
76
76
  return;
77
77
  }
78
+ const tls = options?.tls ?? false;
79
+ const scheme = tls ? "https" : "http";
80
+ const wsScheme = tls ? "wss" : "ws";
78
81
  for (let attempt = 0; attempt < 20; attempt++) {
79
82
  try {
80
- const res = await fetch(`http://localhost:${apiPort}/api/health`);
83
+ const res = await fetch(`${scheme}://localhost:${apiPort}/api/health`, {
84
+ ...tls ? { dispatcher: void 0 } : {}
85
+ });
81
86
  if (res.ok) break;
82
87
  } catch {
83
88
  await new Promise((r) => setTimeout(r, 250));
@@ -106,10 +111,11 @@ async function startDevFrontend(apiPort, devPort) {
106
111
  port: devPort,
107
112
  host: true,
108
113
  proxy: {
109
- "/api": `http://localhost:${apiPort}`,
114
+ "/api": { target: `${scheme}://localhost:${apiPort}`, secure: false },
110
115
  "/ws": {
111
- target: `ws://localhost:${apiPort}`,
116
+ target: `${wsScheme}://localhost:${apiPort}`,
112
117
  ws: true,
118
+ secure: false,
113
119
  configure: (proxy) => {
114
120
  const silence = (err) => {
115
121
  logger.debug(`[Vite] WS proxy transient: ${err.code || err.message}`);
@@ -120,13 +126,13 @@ async function startDevFrontend(apiPort, devPort) {
120
126
  });
121
127
  }
122
128
  },
123
- "/docs": `http://localhost:${apiPort}`,
124
- "/health": `http://localhost:${apiPort}`,
125
- "/manifest.webmanifest": `http://localhost:${apiPort}`,
126
- "/service-worker.js": `http://localhost:${apiPort}`,
127
- "/icon.svg": `http://localhost:${apiPort}`,
128
- "/icon-maskable.svg": `http://localhost:${apiPort}`,
129
- "/offline.html": `http://localhost:${apiPort}`
129
+ "/docs": { target: `${scheme}://localhost:${apiPort}`, secure: false },
130
+ "/health": { target: `${scheme}://localhost:${apiPort}`, secure: false },
131
+ "/manifest.webmanifest": { target: `${scheme}://localhost:${apiPort}`, secure: false },
132
+ "/service-worker.js": { target: `${scheme}://localhost:${apiPort}`, secure: false },
133
+ "/icon.svg": { target: `${scheme}://localhost:${apiPort}`, secure: false },
134
+ "/icon-maskable.svg": { target: `${scheme}://localhost:${apiPort}`, secure: false },
135
+ "/offline.html": { target: `${scheme}://localhost:${apiPort}`, secure: false }
130
136
  }
131
137
  }
132
138
  });
@@ -164,6 +170,7 @@ Options:
164
170
  --poll <ms> Scheduler interval in ms
165
171
  --timeout <ms> Agent command timeout in ms (default: 1800000)
166
172
  --dev Start Vite dev server alongside API (HMR on port+1)
173
+ --no-tls Disable HTTPS (use plain HTTP)
167
174
  --once Process once and exit
168
175
  --skip-source Skip source snapshot copy
169
176
  --skip-scan Skip project analysis
@@ -15,8 +15,8 @@ import {
15
15
  runIssueOnce,
16
16
  runPlanningJob,
17
17
  tryParseJsonOutput
18
- } from "./chunk-FAFGDK62.js";
19
- import "./chunk-H2QRC6UQ.js";
18
+ } from "./chunk-TSSVMTCS.js";
19
+ import "./chunk-KRH4LWCW.js";
20
20
  import {
21
21
  buildPrompt,
22
22
  buildProviderBasePrompt,
@@ -33,9 +33,9 @@ import {
33
33
  runCommandWithTimeout,
34
34
  runHook,
35
35
  shouldSkipMergePath
36
- } from "./chunk-2D5P75F6.js";
36
+ } from "./chunk-GW7LVDP3.js";
37
37
  import "./chunk-O5AEQXUV.js";
38
- import "./chunk-FPUTP743.js";
38
+ import "./chunk-2ZK3IUJQ.js";
39
39
  import "./chunk-DVU3CXWA.js";
40
40
  import "./chunk-OONOOWNC.js";
41
41
  export {
@@ -71,4 +71,4 @@ export {
71
71
  shouldSkipMergePath,
72
72
  tryParseJsonOutput
73
73
  };
74
- //# sourceMappingURL=agent-3NYJEHH5.js.map
74
+ //# sourceMappingURL=agent-QWN3JVX5.js.map
@@ -26,7 +26,7 @@ async function initQueueWorkers(state) {
26
26
  }, 3e4);
27
27
  persistInterval = setInterval(() => {
28
28
  if (!active || !runtimeState) return;
29
- import("./store-FFHHRNVI.js").then(
29
+ import("./store-DSMN6IKR.js").then(
30
30
  ({ persistState }) => persistState(runtimeState).catch(() => {
31
31
  })
32
32
  ).catch(() => {
@@ -116,11 +116,11 @@ function sortQueue() {
116
116
  }
117
117
  async function dispatchPlan(issue) {
118
118
  logger.info({ issueId: issue.id, identifier: issue.identifier }, "[Queue] Dispatching plan job");
119
- const { runPlanningJob } = await import("./issue-runner-ZNDKLOCZ.js");
119
+ const { runPlanningJob } = await import("./issue-runner-QGJY5COY.js");
120
120
  await runPlanningJob(runtimeState, issue);
121
121
  }
122
122
  async function dispatchExecute(issue) {
123
- const { runIssueOnce } = await import("./issue-runner-ZNDKLOCZ.js");
123
+ const { runIssueOnce } = await import("./issue-runner-QGJY5COY.js");
124
124
  while (active && runtimeState) {
125
125
  const current = getCurrentIssue(issue.id);
126
126
  if (!current || current.state !== "Queued" && current.state !== "Running") break;
@@ -130,12 +130,12 @@ async function dispatchExecute(issue) {
130
130
  }
131
131
  async function dispatchReview(issue) {
132
132
  logger.info({ issueId: issue.id, identifier: issue.identifier }, "[Queue] Dispatching review job");
133
- const { runIssueOnce } = await import("./issue-runner-ZNDKLOCZ.js");
133
+ const { runIssueOnce } = await import("./issue-runner-QGJY5COY.js");
134
134
  await runIssueOnce(runtimeState, issue, running);
135
135
  }
136
136
  async function checkStaleIssues() {
137
137
  if (!runtimeState) return;
138
- const { ensureNotStale } = await import("./scheduler-OU35EYUH.js");
138
+ const { ensureNotStale } = await import("./scheduler-LWCF7U6Q.js");
139
139
  await ensureNotStale(runtimeState, runtimeState.config.staleInProgressTimeoutMs);
140
140
  }
141
141
  var draining = false;
@@ -186,7 +186,7 @@ async function enqueue(issue, job) {
186
186
  async function recoverState() {
187
187
  if (!runtimeState) return;
188
188
  try {
189
- const { getIssueStateMachinePlugin, ISSUE_STATE_MACHINE_ID } = await import("./issue-state-machine-NBSYRDZW.js");
189
+ const { getIssueStateMachinePlugin, ISSUE_STATE_MACHINE_ID } = await import("./issue-state-machine-6Y2OTUGI.js");
190
190
  const fsmPlugin = getIssueStateMachinePlugin();
191
191
  if (fsmPlugin?.getState) {
192
192
  for (const issue of runtimeState.issues) {
@@ -218,9 +218,9 @@ async function recoverState() {
218
218
  }
219
219
  async function recoverOrphans() {
220
220
  if (!runtimeState) return;
221
- const { isAgentStillRunning, cleanStalePidFile } = await import("./agent-3NYJEHH5.js");
222
- const { executeTransition } = await import("./issue-state-machine-NBSYRDZW.js");
223
- const { addEvent } = await import("./issues-GBWLDBVU.js");
221
+ const { isAgentStillRunning, cleanStalePidFile } = await import("./agent-QWN3JVX5.js");
222
+ const { executeTransition } = await import("./issue-state-machine-6Y2OTUGI.js");
223
+ const { addEvent } = await import("./issues-QSMDQQFO.js");
224
224
  const candidates = runtimeState.issues.filter((i) => i.state === "Running" || i.state === "Queued");
225
225
  logger.debug({ count: candidates.length }, "[Queue] Checking for orphaned agent processes");
226
226
  for (const issue of candidates) {
@@ -258,7 +258,7 @@ function cleanTerminalWorkspaces() {
258
258
  logger.info({ count: terminals.length }, "[Queue] Scheduling terminal workspace cleanup in background");
259
259
  const state = runtimeState;
260
260
  setImmediate(async () => {
261
- const { cleanWorkspace } = await import("./agent-3NYJEHH5.js");
261
+ const { cleanWorkspace } = await import("./agent-QWN3JVX5.js");
262
262
  for (const issue of terminals) {
263
263
  try {
264
264
  await cleanWorkspace(issue.id, issue, state);
@@ -292,4 +292,4 @@ export {
292
292
  cleanTerminalWorkspaces,
293
293
  getQueueStats
294
294
  };
295
- //# sourceMappingURL=chunk-FPUTP743.js.map
295
+ //# sourceMappingURL=chunk-2ZK3IUJQ.js.map
@@ -528,12 +528,12 @@ function parseClaudeUsageHeading(line) {
528
528
  }
529
529
  function formatClaudeModelFromLabel(label) {
530
530
  const normalized = label.trim().toLowerCase();
531
- const compact = normalized.replace(/\s+/g, "-");
531
+ const compact = normalized.replace(/[\s.]+/g, "-");
532
532
  if (compact.includes("opus")) return `claude-${compact}`;
533
533
  if (compact.includes("sonnet")) return `claude-${compact}`;
534
534
  if (compact.includes("haiku")) return `claude-${compact}`;
535
535
  if (compact.startsWith("claude-")) return compact;
536
- return label.trim();
536
+ return label.trim().toLowerCase();
537
537
  }
538
538
  function parseClaudeUsageFromStatus(raw) {
539
539
  const base = initSnapshot(raw);
@@ -959,8 +959,7 @@ function buildCodexCommand(options) {
959
959
  "codex",
960
960
  "exec",
961
961
  "--skip-git-repo-check",
962
- "--dangerously-bypass-approvals-and-sandbox",
963
- "--no-alt-screen"
962
+ "--dangerously-bypass-approvals-and-sandbox"
964
963
  ];
965
964
  if (options.model && options.model !== "codex") {
966
965
  parts.push(`--model ${options.model}`);
@@ -2086,7 +2085,7 @@ function parseDiffStats(issue, raw) {
2086
2085
  }
2087
2086
  async function syncIssueDiffStatsToStore(issue) {
2088
2087
  if (!issue?.id) return;
2089
- const { getIssueStateResource } = await import("./store-FFHHRNVI.js");
2088
+ const { getIssueStateResource } = await import("./store-DSMN6IKR.js");
2090
2089
  const issueResource = getIssueStateResource();
2091
2090
  if (!issueResource) return;
2092
2091
  const toNumber = (value) => {
@@ -2350,4 +2349,4 @@ export {
2350
2349
  hydrateIssuePathsFromWorkspace,
2351
2350
  writeVersionedArtifacts
2352
2351
  };
2353
- //# sourceMappingURL=chunk-2D5P75F6.js.map
2352
+ //# sourceMappingURL=chunk-GW7LVDP3.js.map
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  computeDiffStats,
3
3
  syncIssueDiffStatsToStore
4
- } from "./chunk-2D5P75F6.js";
4
+ } from "./chunk-GW7LVDP3.js";
5
5
  import {
6
6
  isoWeek,
7
7
  now
@@ -324,7 +324,7 @@ function emitFsmEvent(issueId, kind, message) {
324
324
  }
325
325
  }
326
326
  async function lazyEnqueue(issue, job) {
327
- const { enqueue } = await import("./queue-workers-OHPJKAPM.js");
327
+ const { enqueue } = await import("./queue-workers-TDJWHJMJ.js");
328
328
  return enqueue(issue, job);
329
329
  }
330
330
  var ISSUE_STATE_MACHINE_ID = "issue-lifecycle";
@@ -835,4 +835,4 @@ export {
835
835
  canTransitionIssue,
836
836
  visualizeStateMachine
837
837
  };
838
- //# sourceMappingURL=chunk-H2QRC6UQ.js.map
838
+ //# sourceMappingURL=chunk-KRH4LWCW.js.map
@@ -21,7 +21,7 @@ import {
21
21
  snapshotAndClearDirtyEventIds,
22
22
  snapshotAndClearDirtyIssueIds,
23
23
  snapshotAndClearDirtyIssuePlanIds
24
- } from "./chunk-H2QRC6UQ.js";
24
+ } from "./chunk-KRH4LWCW.js";
25
25
  import {
26
26
  ADAPTERS,
27
27
  assertIssueHasGitWorktree,
@@ -52,7 +52,7 @@ import {
52
52
  resolveAgentCommand,
53
53
  runCommandWithTimeout,
54
54
  runHook
55
- } from "./chunk-2D5P75F6.js";
55
+ } from "./chunk-GW7LVDP3.js";
56
56
  import {
57
57
  appendFileTail,
58
58
  clamp,
@@ -77,7 +77,7 @@ import {
77
77
  } from "./chunk-O5AEQXUV.js";
78
78
  import {
79
79
  enqueue
80
- } from "./chunk-FPUTP743.js";
80
+ } from "./chunk-2ZK3IUJQ.js";
81
81
  import {
82
82
  logger
83
83
  } from "./chunk-DVU3CXWA.js";
@@ -2560,9 +2560,10 @@ async function collectClaudeUsage() {
2560
2560
  }
2561
2561
  }
2562
2562
  const models = [
2563
- { slug: "claude-opus-4-6", displayName: "claude opus 4.6", description: "Most capable model for complex tasks" },
2564
- { slug: "claude-sonnet-4-6", displayName: "claude sonnet 4.6", description: "Balanced performance and speed" },
2565
- { slug: "claude-haiku-4-5", displayName: "claude haiku 4.5", description: "Fast and efficient model" }
2563
+ { slug: "claude-opus-4-6", displayName: "claude-opus-4-6", description: "Most capable for complex work" },
2564
+ { slug: "claude-sonnet-4-6", displayName: "claude-sonnet-4-6", description: "Best for everyday tasks" },
2565
+ { slug: "claude-sonnet-4-6-1m", displayName: "claude-sonnet-4-6 (1m context)", description: "Billed as extra usage \xB7 $3/$15 per Mtok" },
2566
+ { slug: "claude-haiku-4-5", displayName: "claude-haiku-4-5", description: "Fastest for quick answers" }
2566
2567
  ];
2567
2568
  let plan = "pro";
2568
2569
  let resetInfo = "Weekly reset (every Monday 00:00 UTC)";
@@ -3800,7 +3801,7 @@ function registerStateRoutes(app, state) {
3800
3801
  if (!issueId) return c.json({ ok: false, error: "Issue id is required." }, 400);
3801
3802
  const issue = findIssue(state, issueId);
3802
3803
  if (!issue) return c.json({ ok: false, error: "Issue not found." }, 404);
3803
- const { dryMerge } = await import("./workspace-5XOCMZ57.js");
3804
+ const { dryMerge } = await import("./workspace-S5F5JFM6.js");
3804
3805
  const result = dryMerge(issue);
3805
3806
  return c.json({ ok: true, ...result });
3806
3807
  } catch (error) {
@@ -3815,7 +3816,7 @@ function registerStateRoutes(app, state) {
3815
3816
  if (!issueId) return c.json({ ok: false, error: "Issue id is required." }, 400);
3816
3817
  const issue = findIssue(state, issueId);
3817
3818
  if (!issue) return c.json({ ok: false, error: "Issue not found." }, 404);
3818
- const { rebaseWorktree } = await import("./workspace-5XOCMZ57.js");
3819
+ const { rebaseWorktree } = await import("./workspace-S5F5JFM6.js");
3819
3820
  const result = rebaseWorktree(issue);
3820
3821
  if (result.success) {
3821
3822
  addEvent(state, issue.id, "info", `Branch ${issue.branchName} rebased onto ${issue.baseBranch}.`);
@@ -3947,7 +3948,7 @@ function registerStateRoutes(app, state) {
3947
3948
  const issue = findIssue(state, issueId);
3948
3949
  if (!issue) return c.json({ ok: false, error: "Issue not found." }, 404);
3949
3950
  try {
3950
- const { getIssueTransitionHistory } = await import("./issue-state-machine-NBSYRDZW.js");
3951
+ const { getIssueTransitionHistory } = await import("./issue-state-machine-6Y2OTUGI.js");
3951
3952
  const limit = parseInt(c.req.query("limit") ?? "50", 10);
3952
3953
  const offset = parseInt(c.req.query("offset") ?? "0", 10);
3953
3954
  const transitions = await getIssueTransitionHistory(issue.id, { limit, offset });
@@ -3958,7 +3959,7 @@ function registerStateRoutes(app, state) {
3958
3959
  });
3959
3960
  app.get("/api/state-machine/transitions", async (c) => {
3960
3961
  try {
3961
- const { getStateMachineTransitions } = await import("./issue-state-machine-NBSYRDZW.js");
3962
+ const { getStateMachineTransitions } = await import("./issue-state-machine-6Y2OTUGI.js");
3962
3963
  return c.json({ ok: true, transitions: getStateMachineTransitions() });
3963
3964
  } catch (error) {
3964
3965
  return c.json({ ok: false, error: error instanceof Error ? error.message : String(error) }, 500);
@@ -3966,7 +3967,7 @@ function registerStateRoutes(app, state) {
3966
3967
  });
3967
3968
  app.get("/api/state-machine/visualize", async (c) => {
3968
3969
  try {
3969
- const { visualizeStateMachine } = await import("./issue-state-machine-NBSYRDZW.js");
3970
+ const { visualizeStateMachine } = await import("./issue-state-machine-6Y2OTUGI.js");
3970
3971
  const dot = visualizeStateMachine();
3971
3972
  if (!dot) return c.json({ ok: false, error: "Visualization not available." }, 404);
3972
3973
  return c.json({ ok: true, dot });
@@ -5002,7 +5003,8 @@ import { spawn as spawn2 } from "child_process";
5002
5003
  import { tmpdir as tmpdir3 } from "os";
5003
5004
  import { join as join13 } from "path";
5004
5005
  function getProviderCommand(provider, config) {
5005
- return resolveAgentCommand(provider, config.agentCommand || "", "", "");
5006
+ const explicit = provider === config.agentProvider ? config.agentCommand || "" : "";
5007
+ return resolveAgentCommand(provider, explicit, "", "");
5006
5008
  }
5007
5009
  async function buildPrompt2(field, title, description, issueType, images) {
5008
5010
  const context2 = {
@@ -6148,7 +6150,7 @@ var RouteCollector = class {
6148
6150
  this.routes[`DELETE ${path}`] = handler;
6149
6151
  }
6150
6152
  };
6151
- async function startApiServer(state, port) {
6153
+ async function startApiServer(state, port, options) {
6152
6154
  logger.info({ port }, "[API] Starting API server");
6153
6155
  const stateDb2 = getStateDb();
6154
6156
  if (!stateDb2) {
@@ -6207,6 +6209,7 @@ async function startApiServer(state, port) {
6207
6209
  const apiPlugin = new ApiPlugin({
6208
6210
  port,
6209
6211
  host: "0.0.0.0",
6212
+ tls: false,
6210
6213
  versionPrefix: false,
6211
6214
  metrics: {
6212
6215
  logLevel: "info"
@@ -7869,7 +7872,7 @@ async function handleStatePatch(state, issue, payload) {
7869
7872
  }
7870
7873
  if (nextState === "Running" && sourceState === "Queued") {
7871
7874
  try {
7872
- const { enqueue: enqueue2 } = await import("./queue-workers-OHPJKAPM.js");
7875
+ const { enqueue: enqueue2 } = await import("./queue-workers-TDJWHJMJ.js");
7873
7876
  await enqueue2(issue, "execute");
7874
7877
  } catch (error) {
7875
7878
  logger.warn({ issueId: issue.id, err: error }, "[Issues] Failed to enqueue after manual Running transition");
@@ -8137,7 +8140,7 @@ async function runIssueOnce(state, issue, running) {
8137
8140
  const { workspacePath, promptText, promptFile } = await prepareWorkspace(issue, state, state.config.defaultBranch);
8138
8141
  container.issueRepository.markDirty(issue.id);
8139
8142
  try {
8140
- const { getIssueStateResource: getIssueStateResource2 } = await import("./store-FFHHRNVI.js");
8143
+ const { getIssueStateResource: getIssueStateResource2 } = await import("./store-DSMN6IKR.js");
8141
8144
  const res = getIssueStateResource2();
8142
8145
  if (res) {
8143
8146
  await res.patch(issue.id, {
@@ -8249,4 +8252,4 @@ export {
8249
8252
  syncReferenceRepositories,
8250
8253
  importReferenceArtifacts
8251
8254
  };
8252
- //# sourceMappingURL=chunk-FAFGDK62.js.map
8255
+ //# sourceMappingURL=chunk-TSSVMTCS.js.map
package/dist/cli.js CHANGED
@@ -3,11 +3,11 @@ import {
3
3
  importReferenceArtifacts,
4
4
  listReferenceRepositories,
5
5
  syncReferenceRepositories
6
- } from "./chunk-FAFGDK62.js";
7
- import "./chunk-H2QRC6UQ.js";
8
- import "./chunk-2D5P75F6.js";
6
+ } from "./chunk-TSSVMTCS.js";
7
+ import "./chunk-KRH4LWCW.js";
8
+ import "./chunk-GW7LVDP3.js";
9
9
  import "./chunk-O5AEQXUV.js";
10
- import "./chunk-FPUTP743.js";
10
+ import "./chunk-2ZK3IUJQ.js";
11
11
  import "./chunk-DVU3CXWA.js";
12
12
  import "./chunk-OONOOWNC.js";
13
13
 
@@ -1,15 +1,15 @@
1
1
  import {
2
2
  runIssueOnce,
3
3
  runPlanningJob
4
- } from "./chunk-FAFGDK62.js";
5
- import "./chunk-H2QRC6UQ.js";
6
- import "./chunk-2D5P75F6.js";
4
+ } from "./chunk-TSSVMTCS.js";
5
+ import "./chunk-KRH4LWCW.js";
6
+ import "./chunk-GW7LVDP3.js";
7
7
  import "./chunk-O5AEQXUV.js";
8
- import "./chunk-FPUTP743.js";
8
+ import "./chunk-2ZK3IUJQ.js";
9
9
  import "./chunk-DVU3CXWA.js";
10
10
  import "./chunk-OONOOWNC.js";
11
11
  export {
12
12
  runIssueOnce,
13
13
  runPlanningJob
14
14
  };
15
- //# sourceMappingURL=issue-runner-ZNDKLOCZ.js.map
15
+ //# sourceMappingURL=issue-runner-QGJY5COY.js.map
@@ -15,8 +15,8 @@ import {
15
15
  setIssueResourceStateApi,
16
16
  setIssueStateMachinePlugin,
17
17
  visualizeStateMachine
18
- } from "./chunk-H2QRC6UQ.js";
19
- import "./chunk-2D5P75F6.js";
18
+ } from "./chunk-KRH4LWCW.js";
19
+ import "./chunk-GW7LVDP3.js";
20
20
  import "./chunk-O5AEQXUV.js";
21
21
  import "./chunk-DVU3CXWA.js";
22
22
  import "./chunk-OONOOWNC.js";
@@ -38,4 +38,4 @@ export {
38
38
  setIssueStateMachinePlugin,
39
39
  visualizeStateMachine
40
40
  };
41
- //# sourceMappingURL=issue-state-machine-NBSYRDZW.js.map
41
+ //# sourceMappingURL=issue-state-machine-6Y2OTUGI.js.map
@@ -12,13 +12,13 @@ import {
12
12
  normalizeIssue,
13
13
  transitionIssue,
14
14
  validateConfig
15
- } from "./chunk-FAFGDK62.js";
15
+ } from "./chunk-TSSVMTCS.js";
16
16
  import {
17
17
  computeMetrics
18
- } from "./chunk-H2QRC6UQ.js";
19
- import "./chunk-2D5P75F6.js";
18
+ } from "./chunk-KRH4LWCW.js";
19
+ import "./chunk-GW7LVDP3.js";
20
20
  import "./chunk-O5AEQXUV.js";
21
- import "./chunk-FPUTP743.js";
21
+ import "./chunk-2ZK3IUJQ.js";
22
22
  import "./chunk-DVU3CXWA.js";
23
23
  import "./chunk-OONOOWNC.js";
24
24
  export {
@@ -37,4 +37,4 @@ export {
37
37
  transitionIssue,
38
38
  validateConfig
39
39
  };
40
- //# sourceMappingURL=issues-GBWLDBVU.js.map
40
+ //# sourceMappingURL=issues-QSMDQQFO.js.map