fifony 0.1.43 → 0.1.47
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.
- package/app/dist/assets/{CommandPalette-M4VAMxCU.js → CommandPalette-CL8p78lG.js} +1 -1
- package/app/dist/assets/{KeyboardShortcutsHelp-DkvPUXQq.js → KeyboardShortcutsHelp-CqEFfGcE.js} +1 -1
- package/app/dist/assets/OnboardingWizard-BmI50ZUv.js +1 -0
- package/app/dist/assets/analytics.lazy-CXGjZabc.js +1 -0
- package/app/dist/assets/{api-CkVfYg_m.js → api-CEr_D4e5.js} +1 -1
- package/app/dist/assets/{createLucideIcon-Dfk_Hxud.js → createLucideIcon-luywpIq4.js} +1 -1
- package/app/dist/assets/index-CEaccpYh.js +96 -0
- package/app/dist/assets/index-CzzWGzux.css +1 -0
- package/app/dist/assets/vendor-uqBx3VSC.js +9 -0
- package/app/dist/index.html +12 -12
- package/app/dist/service-worker.js +15 -5
- package/dist/agent/pty-daemon.js +3 -2
- package/dist/agent/run-local.js +71 -52
- package/dist/{agent-RMQTTUEC.js → agent-DFSFG6DG.js} +18 -12
- package/dist/{analytics-broadcaster-O6YBP66L.js → analytics-broadcaster-O4AE3RUK.js} +21 -14
- package/dist/approve-plan.command-QGQZZXTQ.js +17 -0
- package/dist/{chunk-E2EWEYA4.js → chunk-2PRRKBG6.js} +20 -10
- package/dist/chunk-5AMWD66T.js +38 -0
- package/dist/{chunk-QQQLP3PL.js → chunk-7TXZYZR5.js} +9 -37
- package/dist/chunk-AAVROEQC.js +859 -0
- package/dist/{chunk-ESWHDHH6.js → chunk-AAZKYWOY.js} +4 -4
- package/dist/chunk-EBCSQFPR.js +682 -0
- package/dist/{chunk-BRSR26VK.js → chunk-FH7HUPZX.js} +2 -2
- package/dist/chunk-HOIOVUHI.js +35 -0
- package/dist/{chunk-AILXZ2TD.js → chunk-JRLWLZOD.js} +20 -13
- package/dist/{chunk-YRSH2CLW.js → chunk-K36BWMUV.js} +1741 -1216
- package/dist/chunk-N4KFNX2G.js +370 -0
- package/dist/chunk-PACI3T4I.js +125 -0
- package/dist/{chunk-FJNH3G2Z.js → chunk-PI7Y77R3.js} +38 -663
- package/dist/{chunk-DVU3CXWA.js → chunk-PXTIWKLQ.js} +2 -1
- package/dist/{chunk-SOBLO4YZ.js → chunk-QH6VCTET.js} +316 -127
- package/dist/{chunk-MVTGAKQK.js → chunk-QHISYRXJ.js} +2 -2
- package/dist/{chunk-42AMQAJG.js → chunk-VM5QAYP5.js} +2 -2
- package/dist/cli.js +17 -11
- package/dist/create-issue.command-VAKYRECC.js +24 -0
- package/dist/{fsm-issue-YGGF7SIL.js → fsm-issue-EHTSKMFN.js} +9 -8
- package/dist/fsm-service-7O4AJG2R.js +32 -0
- package/dist/{helpers-L7NYO5XS.js → helpers-ON2S7UEF.js} +2 -2
- package/dist/{issue-log-broadcaster-WZAHISYB.js → issue-log-broadcaster-FZGVEEIX.js} +20 -13
- package/dist/{issues-3QRR7KM6.js → issues-3YNNTB4U.js} +10 -7
- package/dist/{log-analyzer-K7MXQB4T.js → log-analyzer-EIX6R6PP.js} +82 -18
- package/dist/logger-IFLXTQPS.js +11 -0
- package/dist/mcp/server.js +2 -2
- package/dist/merge-workspace.command-T2NIGR4M.js +24 -0
- package/dist/{parallel-executor-6INE6NDO.js → parallel-executor-DWESCNX3.js} +20 -14
- package/dist/queue-workers-V57BYXAY.js +38 -0
- package/dist/replan-issue.command-2GQ3QXCR.js +17 -0
- package/dist/retry-issue.command-GJBUUYDJ.js +17 -0
- package/dist/scheduler-KYILMWLD.js +32 -0
- package/dist/{settings-ZAWDCFP2.js → settings-SOTIS6ZD.js} +32 -12
- package/dist/settings.resource-JMD3JQOS.js +30 -0
- package/dist/{store-M6NCKMZY.js → store-S3NAYZ3S.js} +18 -12
- package/dist/{web-push-AX5IIK3P.js → web-push-QCTLS7EJ.js} +3 -3
- package/dist/websocket-T2Y3BY4B.js +61 -0
- package/dist/{workspace-CJTWFWTJ.js → workspace-OS7GPMCN.js} +7 -6
- package/package.json +8 -5
- package/app/dist/assets/OnboardingWizard-B7V9hoCR.js +0 -1
- package/app/dist/assets/analytics.lazy-zVJdF880.js +0 -1
- package/app/dist/assets/index-BpiCi7Ew.css +0 -1
- package/app/dist/assets/index-D2INW0zc.js +0 -47
- package/app/dist/assets/vendor-BEoYbFV1.js +0 -9
- package/dist/queue-workers-XFZK3TT5.js +0 -32
- package/dist/replan-issue.command-4UCWYHGZ.js +0 -15
- package/dist/scheduler-ZP7GOZDW.js +0 -26
- package/dist/settings.resource-5CW456AZ.js +0 -24
package/app/dist/index.html
CHANGED
|
@@ -12,20 +12,20 @@
|
|
|
12
12
|
<meta name="description" content="Local AI orchestrator — plan, execute, review code with Claude, Codex & Gemini" />
|
|
13
13
|
<meta property="og:title" content="fifony" />
|
|
14
14
|
<meta property="og:description" content="Local AI orchestrator — plan, execute, review code with Claude, Codex & Gemini" />
|
|
15
|
-
<meta property="og:image" content="/
|
|
15
|
+
<meta property="og:image" content="/og-image.png" />
|
|
16
16
|
<meta property="og:type" content="website" />
|
|
17
17
|
<title>fifony</title>
|
|
18
|
-
<link rel="manifest" href="/
|
|
19
|
-
<link rel="icon" href="/
|
|
20
|
-
<link rel="icon" href="/
|
|
21
|
-
<link rel="icon" href="/
|
|
22
|
-
<link rel="apple-touch-icon" href="/
|
|
23
|
-
<script type="module" crossorigin src="/assets/
|
|
24
|
-
<link rel="modulepreload" crossorigin href="/assets/
|
|
25
|
-
<link rel="modulepreload" crossorigin href="/assets/
|
|
26
|
-
<link rel="modulepreload" crossorigin href="/assets/
|
|
27
|
-
<link rel="modulepreload" crossorigin href="/assets/
|
|
28
|
-
<link rel="stylesheet" crossorigin href="/assets/
|
|
18
|
+
<link rel="manifest" href="/manifest.webmanifest" />
|
|
19
|
+
<link rel="icon" href="/favicon.png" type="image/png" />
|
|
20
|
+
<link rel="icon" href="/icon-32.png" sizes="32x32" type="image/png" />
|
|
21
|
+
<link rel="icon" href="/icon-16.png" sizes="16x16" type="image/png" />
|
|
22
|
+
<link rel="apple-touch-icon" href="/apple-touch-icon.png" />
|
|
23
|
+
<script type="module" crossorigin src="/assets/index-CEaccpYh.js"></script>
|
|
24
|
+
<link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-Dw2cE7zH.js">
|
|
25
|
+
<link rel="modulepreload" crossorigin href="/assets/api-CEr_D4e5.js">
|
|
26
|
+
<link rel="modulepreload" crossorigin href="/assets/vendor-uqBx3VSC.js">
|
|
27
|
+
<link rel="modulepreload" crossorigin href="/assets/createLucideIcon-luywpIq4.js">
|
|
28
|
+
<link rel="stylesheet" crossorigin href="/assets/index-CzzWGzux.css">
|
|
29
29
|
</head>
|
|
30
30
|
<body>
|
|
31
31
|
<div id="root"></div>
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
const CACHE_VERSION = "
|
|
1
|
+
const CACHE_VERSION = "1774899686368";
|
|
2
2
|
const CORE_CACHE = `fifony-core-${CACHE_VERSION}`;
|
|
3
3
|
const ASSET_CACHE = `fifony-assets-${CACHE_VERSION}`;
|
|
4
4
|
const APP_SHELL_ROUTES = [
|
|
@@ -16,10 +16,11 @@ const APP_SHELL_ROUTES = [
|
|
|
16
16
|
"/settings/notifications",
|
|
17
17
|
"/settings/execution",
|
|
18
18
|
"/settings/quality",
|
|
19
|
-
"/settings/
|
|
19
|
+
"/settings/assets",
|
|
20
20
|
"/settings/services",
|
|
21
21
|
"/settings/appearance",
|
|
22
22
|
"/settings/providers",
|
|
23
|
+
"/chat",
|
|
23
24
|
];
|
|
24
25
|
const APP_SHELL_FILES = ["/offline.html", "/manifest.webmanifest", "/favicon.png", "/icon-192.png", "/icon-512.png"];
|
|
25
26
|
const API_PREFIXES = ["/api/", "/docs", "/ws"];
|
|
@@ -91,16 +92,25 @@ self.addEventListener("fetch", (event) => {
|
|
|
91
92
|
|
|
92
93
|
if (request.mode === "navigate") {
|
|
93
94
|
event.respondWith((async () => {
|
|
95
|
+
const cache = await caches.open(CORE_CACHE);
|
|
96
|
+
|
|
94
97
|
try {
|
|
95
98
|
const response = await fetch(request);
|
|
96
|
-
|
|
97
|
-
|
|
99
|
+
if (response.ok) {
|
|
100
|
+
await cache.put(request, response.clone());
|
|
101
|
+
return response;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
const cached =
|
|
105
|
+
await cache.match(request) ||
|
|
106
|
+
await cache.match("/kanban") ||
|
|
107
|
+
await cache.match("/offline.html");
|
|
108
|
+
if (cached) return cached;
|
|
98
109
|
return response;
|
|
99
110
|
} catch {
|
|
100
111
|
// Offline: notify clients
|
|
101
112
|
notifyClientsOffline();
|
|
102
113
|
|
|
103
|
-
const cache = await caches.open(CORE_CACHE);
|
|
104
114
|
return (
|
|
105
115
|
await cache.match(request) ||
|
|
106
116
|
await cache.match("/kanban") ||
|
package/dist/agent/pty-daemon.js
CHANGED
|
@@ -21,7 +21,8 @@ async function main() {
|
|
|
21
21
|
process.stderr.write("[pty-daemon] Failed to parse options JSON\n");
|
|
22
22
|
process.exit(1);
|
|
23
23
|
}
|
|
24
|
-
const { command, workspacePath, issueId, startedAt, commandSlice } = opts;
|
|
24
|
+
const { command, workspacePath, codePath, issueId, startedAt, commandSlice } = opts;
|
|
25
|
+
const effectiveCwd = codePath ?? workspacePath;
|
|
25
26
|
const liveLogFile = join(workspacePath, "live-output.log");
|
|
26
27
|
const socketPath = join(workspacePath, "agent.sock");
|
|
27
28
|
const agentPidFile = join(workspacePath, "agent.pid");
|
|
@@ -99,7 +100,7 @@ async function main() {
|
|
|
99
100
|
name: "xterm-256color",
|
|
100
101
|
cols: 220,
|
|
101
102
|
rows: 50,
|
|
102
|
-
cwd:
|
|
103
|
+
cwd: effectiveCwd,
|
|
103
104
|
env: process.env
|
|
104
105
|
});
|
|
105
106
|
const agentPid = ptyProcess.pid;
|
package/dist/agent/run-local.js
CHANGED
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
applyPersistedSettings,
|
|
4
|
-
broadcastToWebSocketClients,
|
|
5
4
|
cleanTerminalWorkspaces,
|
|
6
5
|
closeStateStore,
|
|
7
6
|
createContainer,
|
|
8
7
|
hasTerminalQueue,
|
|
9
|
-
initManagedServiceWatcher,
|
|
10
8
|
initQueueWorkers,
|
|
11
9
|
initStateStore,
|
|
12
10
|
installGracefulShutdown,
|
|
@@ -30,22 +28,35 @@ import {
|
|
|
30
28
|
startApiServer,
|
|
31
29
|
startAutoConfiguredServices,
|
|
32
30
|
startManagedAgentWatcher,
|
|
33
|
-
startServiceLogBroadcasting,
|
|
34
31
|
stopQueueWorkers,
|
|
35
|
-
stopServiceLogBroadcasting,
|
|
36
32
|
syncRuntimeConfigSettings,
|
|
37
33
|
upsertPersistedVariable
|
|
38
|
-
} from "../chunk-
|
|
34
|
+
} from "../chunk-K36BWMUV.js";
|
|
35
|
+
import "../chunk-PACI3T4I.js";
|
|
36
|
+
import "../chunk-HOIOVUHI.js";
|
|
39
37
|
import {
|
|
40
38
|
initWebPush
|
|
41
|
-
} from "../chunk-
|
|
42
|
-
import
|
|
43
|
-
|
|
39
|
+
} from "../chunk-FH7HUPZX.js";
|
|
40
|
+
import {
|
|
41
|
+
broadcastToWebSocketClients,
|
|
42
|
+
sendToMeshRoom,
|
|
43
|
+
startServiceLogBroadcasting,
|
|
44
|
+
stopServiceLogBroadcasting
|
|
45
|
+
} from "../chunk-N4KFNX2G.js";
|
|
46
|
+
import {
|
|
47
|
+
setServiceRuntime,
|
|
48
|
+
setServicesAccessor,
|
|
49
|
+
startTrafficProxy,
|
|
50
|
+
stopTrafficProxy
|
|
51
|
+
} from "../chunk-AAVROEQC.js";
|
|
52
|
+
import "../chunk-5AMWD66T.js";
|
|
53
|
+
import "../chunk-7TXZYZR5.js";
|
|
54
|
+
import "../chunk-JRLWLZOD.js";
|
|
44
55
|
import {
|
|
45
56
|
detectDefaultBranch,
|
|
46
57
|
getGitRepoStatus,
|
|
47
58
|
setSkipSource
|
|
48
|
-
} from "../chunk-
|
|
59
|
+
} from "../chunk-QH6VCTET.js";
|
|
49
60
|
import {
|
|
50
61
|
addEvent,
|
|
51
62
|
applyWorkflowConfig,
|
|
@@ -56,20 +67,17 @@ import {
|
|
|
56
67
|
hydrate,
|
|
57
68
|
resolveProjectMetadata,
|
|
58
69
|
validateConfig
|
|
59
|
-
} from "../chunk-
|
|
60
|
-
import {
|
|
61
|
-
computeMetrics
|
|
62
|
-
} from "../chunk-MVTGAKQK.js";
|
|
70
|
+
} from "../chunk-2PRRKBG6.js";
|
|
63
71
|
import {
|
|
64
72
|
detectAvailableProviders,
|
|
65
73
|
getProviderDefaultCommand,
|
|
66
74
|
resolveDefaultProvider
|
|
67
|
-
} from "../chunk-
|
|
75
|
+
} from "../chunk-PI7Y77R3.js";
|
|
68
76
|
import {
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
import "../chunk-
|
|
77
|
+
computeMetrics
|
|
78
|
+
} from "../chunk-QHISYRXJ.js";
|
|
79
|
+
import "../chunk-EBCSQFPR.js";
|
|
80
|
+
import "../chunk-AAZKYWOY.js";
|
|
73
81
|
import {
|
|
74
82
|
CLI_ARGS,
|
|
75
83
|
PACKAGE_ROOT,
|
|
@@ -79,7 +87,11 @@ import {
|
|
|
79
87
|
fail,
|
|
80
88
|
now,
|
|
81
89
|
parseIntArg
|
|
82
|
-
} from "../chunk-
|
|
90
|
+
} from "../chunk-VM5QAYP5.js";
|
|
91
|
+
import {
|
|
92
|
+
initLogger,
|
|
93
|
+
logger
|
|
94
|
+
} from "../chunk-PXTIWKLQ.js";
|
|
83
95
|
import "../chunk-3NE23NYW.js";
|
|
84
96
|
|
|
85
97
|
// src/boot.ts
|
|
@@ -203,7 +215,6 @@ Options:
|
|
|
203
215
|
);
|
|
204
216
|
}
|
|
205
217
|
async function main() {
|
|
206
|
-
let serviceWatcher = null;
|
|
207
218
|
let agentWatcher = null;
|
|
208
219
|
debugBoot("main:start");
|
|
209
220
|
const args = CLI_ARGS;
|
|
@@ -347,7 +358,7 @@ async function main() {
|
|
|
347
358
|
} else if (!gitStatus.hasCommits) {
|
|
348
359
|
logger.warn({ workspace: TARGET_ROOT, branch: gitStatus.branch }, "[Boot] Target workspace has no commits. Create an initial commit before running issues because git worktree needs a base commit.");
|
|
349
360
|
}
|
|
350
|
-
if (
|
|
361
|
+
if (state.config.testCommand == null) {
|
|
351
362
|
try {
|
|
352
363
|
const pkg = JSON.parse(readFileSync(join(TARGET_ROOT, "package.json"), "utf8"));
|
|
353
364
|
if (pkg?.scripts?.test && !pkg.scripts.test.includes("no test specified")) {
|
|
@@ -379,15 +390,28 @@ async function main() {
|
|
|
379
390
|
}
|
|
380
391
|
try {
|
|
381
392
|
const services = state.config.services ?? [];
|
|
393
|
+
setServiceRuntime({
|
|
394
|
+
fifonyDir: STATE_ROOT,
|
|
395
|
+
targetRoot: TARGET_ROOT,
|
|
396
|
+
getEntries: () => apiState.config.services ?? [],
|
|
397
|
+
getGlobalEnv: () => apiState.config.serviceEnv ?? {},
|
|
398
|
+
onTransition: (t) => {
|
|
399
|
+
logger.info({ id: t.id, from: t.from, to: t.to, reason: t.reason }, "[Service] FSM transition");
|
|
400
|
+
broadcastToWebSocketClients({
|
|
401
|
+
type: "service",
|
|
402
|
+
id: t.id,
|
|
403
|
+
state: t.to,
|
|
404
|
+
running: t.to === "starting" || t.to === "running",
|
|
405
|
+
pid: t.pid ?? null
|
|
406
|
+
});
|
|
407
|
+
if (t.to === "starting") startServiceLogBroadcasting(t.id, STATE_ROOT);
|
|
408
|
+
else if (t.to === "stopped" || t.to === "crashed") stopServiceLogBroadcasting(t.id);
|
|
409
|
+
}
|
|
410
|
+
});
|
|
382
411
|
reconcileManagedServiceStates(services, STATE_ROOT);
|
|
383
|
-
const
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
STATE_ROOT,
|
|
387
|
-
state.config.serviceEnv
|
|
388
|
-
);
|
|
389
|
-
for (const t of autoStartTransitions) {
|
|
390
|
-
logger.info({ id: t.id, command: t.to }, "[Boot] Service auto-started");
|
|
412
|
+
const autoStarted = await startAutoConfiguredServices(services);
|
|
413
|
+
for (const id of autoStarted) {
|
|
414
|
+
logger.info({ id }, "[Boot] Service auto-started");
|
|
391
415
|
}
|
|
392
416
|
for (const status of listServiceStatuses(services, STATE_ROOT)) {
|
|
393
417
|
if (status.running) startServiceLogBroadcasting(status.id, STATE_ROOT);
|
|
@@ -408,27 +432,18 @@ async function main() {
|
|
|
408
432
|
} catch (error) {
|
|
409
433
|
logger.warn({ err: error }, "[Boot] Queue workers failed to initialize \u2014 continuing without queue-based dispatch");
|
|
410
434
|
}
|
|
411
|
-
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
broadcastToWebSocketClients({
|
|
419
|
-
type: "service",
|
|
420
|
-
id: t.id,
|
|
421
|
-
state: t.to,
|
|
422
|
-
running: t.to === "starting" || t.to === "running",
|
|
423
|
-
pid: t.pid ?? null
|
|
435
|
+
if (apiState.config.meshEnabled) {
|
|
436
|
+
try {
|
|
437
|
+
setServicesAccessor(() => listServiceStatuses(apiState.config.services ?? [], STATE_ROOT));
|
|
438
|
+
await startTrafficProxy({
|
|
439
|
+
port: apiState.config.meshProxyPort ?? 0,
|
|
440
|
+
bufferSize: apiState.config.meshBufferSize ?? 1e3,
|
|
441
|
+
onEntry: (entry) => sendToMeshRoom({ type: "mesh:entry", entry })
|
|
424
442
|
});
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
} else if (t.to === "stopped" || t.to === "crashed") {
|
|
428
|
-
stopServiceLogBroadcasting(t.id);
|
|
429
|
-
}
|
|
443
|
+
} catch (err) {
|
|
444
|
+
logger.warn({ err }, "[Boot] Mesh traffic proxy failed to start \u2014 continuing without mesh");
|
|
430
445
|
}
|
|
431
|
-
|
|
446
|
+
}
|
|
432
447
|
agentWatcher = startManagedAgentWatcher(
|
|
433
448
|
() => apiState.issues,
|
|
434
449
|
STATE_ROOT,
|
|
@@ -445,6 +460,14 @@ async function main() {
|
|
|
445
460
|
});
|
|
446
461
|
}
|
|
447
462
|
);
|
|
463
|
+
process.once("SIGINT", () => {
|
|
464
|
+
stopTrafficProxy().catch(() => {
|
|
465
|
+
});
|
|
466
|
+
});
|
|
467
|
+
process.once("SIGTERM", () => {
|
|
468
|
+
stopTrafficProxy().catch(() => {
|
|
469
|
+
});
|
|
470
|
+
});
|
|
448
471
|
installGracefulShutdown(state);
|
|
449
472
|
try {
|
|
450
473
|
const settings = await loadRuntimeSettings();
|
|
@@ -488,10 +511,6 @@ async function main() {
|
|
|
488
511
|
state.updatedAt = now();
|
|
489
512
|
state.metrics = computeMetrics(state.issues);
|
|
490
513
|
await persistStateFull(state);
|
|
491
|
-
try {
|
|
492
|
-
serviceWatcher?.stop();
|
|
493
|
-
} catch {
|
|
494
|
-
}
|
|
495
514
|
try {
|
|
496
515
|
agentWatcher?.stop();
|
|
497
516
|
} catch {
|
|
@@ -13,10 +13,15 @@ import {
|
|
|
13
13
|
runManagedReviewJob,
|
|
14
14
|
runPlanningJob,
|
|
15
15
|
tryParseJsonOutput
|
|
16
|
-
} from "./chunk-
|
|
17
|
-
import "./chunk-
|
|
18
|
-
import "./chunk-
|
|
19
|
-
import "./chunk-
|
|
16
|
+
} from "./chunk-K36BWMUV.js";
|
|
17
|
+
import "./chunk-PACI3T4I.js";
|
|
18
|
+
import "./chunk-HOIOVUHI.js";
|
|
19
|
+
import "./chunk-FH7HUPZX.js";
|
|
20
|
+
import "./chunk-N4KFNX2G.js";
|
|
21
|
+
import "./chunk-AAVROEQC.js";
|
|
22
|
+
import "./chunk-5AMWD66T.js";
|
|
23
|
+
import "./chunk-7TXZYZR5.js";
|
|
24
|
+
import "./chunk-JRLWLZOD.js";
|
|
20
25
|
import {
|
|
21
26
|
attachToDaemon,
|
|
22
27
|
buildPrompt,
|
|
@@ -35,13 +40,14 @@ import {
|
|
|
35
40
|
runHook,
|
|
36
41
|
shouldSkipMergePath,
|
|
37
42
|
writeToDaemon
|
|
38
|
-
} from "./chunk-
|
|
39
|
-
import "./chunk-
|
|
40
|
-
import "./chunk-
|
|
41
|
-
import "./chunk-
|
|
42
|
-
import "./chunk-
|
|
43
|
-
import "./chunk-
|
|
44
|
-
import "./chunk-
|
|
43
|
+
} from "./chunk-QH6VCTET.js";
|
|
44
|
+
import "./chunk-2PRRKBG6.js";
|
|
45
|
+
import "./chunk-PI7Y77R3.js";
|
|
46
|
+
import "./chunk-QHISYRXJ.js";
|
|
47
|
+
import "./chunk-EBCSQFPR.js";
|
|
48
|
+
import "./chunk-AAZKYWOY.js";
|
|
49
|
+
import "./chunk-VM5QAYP5.js";
|
|
50
|
+
import "./chunk-PXTIWKLQ.js";
|
|
45
51
|
import {
|
|
46
52
|
cleanStalePidFile,
|
|
47
53
|
isAgentStillRunning,
|
|
@@ -93,4 +99,4 @@ export {
|
|
|
93
99
|
tryParseJsonOutput,
|
|
94
100
|
writeToDaemon
|
|
95
101
|
};
|
|
96
|
-
//# sourceMappingURL=agent-
|
|
102
|
+
//# sourceMappingURL=agent-DFSFG6DG.js.map
|
|
@@ -1,28 +1,35 @@
|
|
|
1
1
|
import {
|
|
2
|
-
analyticsRoomHasSubscribers,
|
|
3
2
|
getEcDailyEvents,
|
|
4
|
-
getEcDailyLines
|
|
3
|
+
getEcDailyLines
|
|
4
|
+
} from "./chunk-K36BWMUV.js";
|
|
5
|
+
import "./chunk-PACI3T4I.js";
|
|
6
|
+
import "./chunk-HOIOVUHI.js";
|
|
7
|
+
import "./chunk-FH7HUPZX.js";
|
|
8
|
+
import {
|
|
9
|
+
analyticsRoomHasSubscribers,
|
|
5
10
|
sendToAnalyticsRoom,
|
|
6
11
|
setAnalyticsOnSubscribeFn,
|
|
7
12
|
wsClients
|
|
8
|
-
} from "./chunk-
|
|
9
|
-
import "./chunk-
|
|
10
|
-
import "./chunk-
|
|
11
|
-
import "./chunk-
|
|
12
|
-
import "./chunk-
|
|
13
|
+
} from "./chunk-N4KFNX2G.js";
|
|
14
|
+
import "./chunk-AAVROEQC.js";
|
|
15
|
+
import "./chunk-5AMWD66T.js";
|
|
16
|
+
import "./chunk-7TXZYZR5.js";
|
|
17
|
+
import "./chunk-JRLWLZOD.js";
|
|
18
|
+
import "./chunk-QH6VCTET.js";
|
|
13
19
|
import {
|
|
14
20
|
getAnalytics,
|
|
15
21
|
getHourlySnapshot
|
|
16
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-2PRRKBG6.js";
|
|
23
|
+
import "./chunk-PI7Y77R3.js";
|
|
17
24
|
import {
|
|
18
25
|
computeQualityGateMetrics
|
|
19
|
-
} from "./chunk-
|
|
20
|
-
import "./chunk-
|
|
26
|
+
} from "./chunk-QHISYRXJ.js";
|
|
27
|
+
import "./chunk-EBCSQFPR.js";
|
|
28
|
+
import "./chunk-AAZKYWOY.js";
|
|
29
|
+
import "./chunk-VM5QAYP5.js";
|
|
21
30
|
import {
|
|
22
31
|
logger
|
|
23
|
-
} from "./chunk-
|
|
24
|
-
import "./chunk-ESWHDHH6.js";
|
|
25
|
-
import "./chunk-42AMQAJG.js";
|
|
32
|
+
} from "./chunk-PXTIWKLQ.js";
|
|
26
33
|
import "./chunk-3NE23NYW.js";
|
|
27
34
|
|
|
28
35
|
// src/persistence/plugins/analytics-broadcaster.ts
|
|
@@ -142,4 +149,4 @@ export {
|
|
|
142
149
|
pushLinesAnalytics,
|
|
143
150
|
pushTokenAnalytics
|
|
144
151
|
};
|
|
145
|
-
//# sourceMappingURL=analytics-broadcaster-
|
|
152
|
+
//# sourceMappingURL=analytics-broadcaster-O4AE3RUK.js.map
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import {
|
|
2
|
+
approvePlanCommand
|
|
3
|
+
} from "./chunk-HOIOVUHI.js";
|
|
4
|
+
import "./chunk-7TXZYZR5.js";
|
|
5
|
+
import "./chunk-JRLWLZOD.js";
|
|
6
|
+
import "./chunk-QH6VCTET.js";
|
|
7
|
+
import "./chunk-2PRRKBG6.js";
|
|
8
|
+
import "./chunk-PI7Y77R3.js";
|
|
9
|
+
import "./chunk-QHISYRXJ.js";
|
|
10
|
+
import "./chunk-EBCSQFPR.js";
|
|
11
|
+
import "./chunk-AAZKYWOY.js";
|
|
12
|
+
import "./chunk-VM5QAYP5.js";
|
|
13
|
+
import "./chunk-PXTIWKLQ.js";
|
|
14
|
+
export {
|
|
15
|
+
approvePlanCommand
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=approve-plan.command-QGQZZXTQ.js.map
|
|
@@ -1,14 +1,11 @@
|
|
|
1
|
-
import {
|
|
2
|
-
computeMetrics
|
|
3
|
-
} from "./chunk-MVTGAKQK.js";
|
|
4
1
|
import {
|
|
5
2
|
markEventDirty,
|
|
6
3
|
markIssueDirty,
|
|
7
4
|
normalizeAgentProvider
|
|
8
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-PI7Y77R3.js";
|
|
9
6
|
import {
|
|
10
|
-
|
|
11
|
-
} from "./chunk-
|
|
7
|
+
computeMetrics
|
|
8
|
+
} from "./chunk-QHISYRXJ.js";
|
|
12
9
|
import {
|
|
13
10
|
COMPLETED_STATES,
|
|
14
11
|
PERSIST_EVENTS_MAX,
|
|
@@ -28,7 +25,10 @@ import {
|
|
|
28
25
|
toStringArray,
|
|
29
26
|
toStringValue,
|
|
30
27
|
withRetryBackoff
|
|
31
|
-
} from "./chunk-
|
|
28
|
+
} from "./chunk-VM5QAYP5.js";
|
|
29
|
+
import {
|
|
30
|
+
logger
|
|
31
|
+
} from "./chunk-PXTIWKLQ.js";
|
|
32
32
|
|
|
33
33
|
// src/domains/tokens.ts
|
|
34
34
|
var EMPTY = { inputTokens: 0, outputTokens: 0, totalTokens: 0 };
|
|
@@ -918,6 +918,8 @@ function deriveConfig(args) {
|
|
|
918
918
|
beforeRunHook: env.FIFONY_BEFORE_RUN_HOOK ?? "",
|
|
919
919
|
afterRunHook: env.FIFONY_AFTER_RUN_HOOK ?? "",
|
|
920
920
|
beforeRemoveHook: env.FIFONY_BEFORE_REMOVE_HOOK ?? "",
|
|
921
|
+
autoApproveTrivialPlans: true,
|
|
922
|
+
sandboxExecution: false,
|
|
921
923
|
serviceEnv: {}
|
|
922
924
|
};
|
|
923
925
|
}
|
|
@@ -1244,7 +1246,7 @@ function addEvent(state, issueId, kind, message) {
|
|
|
1244
1246
|
async function transitionIssue(issue, event, context = {}) {
|
|
1245
1247
|
logger.debug({ issueId: issue.id, identifier: issue.identifier, from: issue.state, event, context }, "[State] Issue transition");
|
|
1246
1248
|
if (!issueTransitionExecutor) {
|
|
1247
|
-
const { executeTransition } = await import("./fsm-issue-
|
|
1249
|
+
const { executeTransition } = await import("./fsm-issue-EHTSKMFN.js");
|
|
1248
1250
|
await executeTransition(issue, event, { ...context, issue });
|
|
1249
1251
|
return;
|
|
1250
1252
|
}
|
|
@@ -1263,6 +1265,13 @@ function getNextRetryAt(issue, baseMs) {
|
|
|
1263
1265
|
const nextDelay = withRetryBackoff(nextAttempt, baseMs);
|
|
1264
1266
|
return new Date(Date.now() + nextDelay).toISOString();
|
|
1265
1267
|
}
|
|
1268
|
+
var FAST_MODE_ISSUE_TYPES = /* @__PURE__ */ new Set(["bug", "chore", "docs"]);
|
|
1269
|
+
var FAST_MODE_DESCRIPTION_MAX_LENGTH = 150;
|
|
1270
|
+
function shouldUseFastMode(issue) {
|
|
1271
|
+
if (issue.issueType && FAST_MODE_ISSUE_TYPES.has(issue.issueType)) return true;
|
|
1272
|
+
if ((issue.description ?? "").length < FAST_MODE_DESCRIPTION_MAX_LENGTH) return true;
|
|
1273
|
+
return false;
|
|
1274
|
+
}
|
|
1266
1275
|
|
|
1267
1276
|
export {
|
|
1268
1277
|
buildQueueTitle,
|
|
@@ -1297,6 +1306,7 @@ export {
|
|
|
1297
1306
|
addEvent,
|
|
1298
1307
|
transitionIssue,
|
|
1299
1308
|
issueDependenciesResolved,
|
|
1300
|
-
getNextRetryAt
|
|
1309
|
+
getNextRetryAt,
|
|
1310
|
+
shouldUseFastMode
|
|
1301
1311
|
};
|
|
1302
|
-
//# sourceMappingURL=chunk-
|
|
1312
|
+
//# sourceMappingURL=chunk-2PRRKBG6.js.map
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import {
|
|
2
|
+
transitionIssueCommand
|
|
3
|
+
} from "./chunk-7TXZYZR5.js";
|
|
4
|
+
import {
|
|
5
|
+
TERMINAL_STATES
|
|
6
|
+
} from "./chunk-VM5QAYP5.js";
|
|
7
|
+
|
|
8
|
+
// src/commands/replan-issue.command.ts
|
|
9
|
+
async function replanIssueCommand(input, deps) {
|
|
10
|
+
const { issue } = input;
|
|
11
|
+
if (issue.planningStatus === "planning") {
|
|
12
|
+
throw new Error("Cannot replan while planning is in progress.");
|
|
13
|
+
}
|
|
14
|
+
if (TERMINAL_STATES.has(issue.state)) {
|
|
15
|
+
throw new Error(`Cannot replan issue in terminal state ${issue.state}.`);
|
|
16
|
+
}
|
|
17
|
+
if (issue.state === "Queued") {
|
|
18
|
+
throw new Error(`Cannot replan issue in ${issue.state} state \u2014 move it out of the execution queue first.`);
|
|
19
|
+
}
|
|
20
|
+
issue.plan = void 0;
|
|
21
|
+
issue.planVersion = (issue.planVersion ?? 0) + 1;
|
|
22
|
+
issue.executeAttempt = 0;
|
|
23
|
+
issue.reviewAttempt = 0;
|
|
24
|
+
issue.attempts = 0;
|
|
25
|
+
await transitionIssueCommand(
|
|
26
|
+
{ issue, target: "Planning", note: "Replan requested." },
|
|
27
|
+
deps
|
|
28
|
+
);
|
|
29
|
+
issue.planningStatus = "idle";
|
|
30
|
+
issue.planningError = void 0;
|
|
31
|
+
issue.planningStartedAt = void 0;
|
|
32
|
+
deps.eventStore.addEvent(issue.id, "manual", `Replan requested for ${issue.identifier} \u2014 now at plan v${issue.planVersion}.`);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export {
|
|
36
|
+
replanIssueCommand
|
|
37
|
+
};
|
|
38
|
+
//# sourceMappingURL=chunk-5AMWD66T.js.map
|
|
@@ -6,20 +6,19 @@ import {
|
|
|
6
6
|
getIssueTransitionHistory,
|
|
7
7
|
getStateMachineTransitions,
|
|
8
8
|
visualizeStateMachine
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-JRLWLZOD.js";
|
|
10
10
|
import {
|
|
11
11
|
transitionIssue
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-2PRRKBG6.js";
|
|
13
13
|
import {
|
|
14
14
|
markIssueDirty
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-PI7Y77R3.js";
|
|
16
16
|
import {
|
|
17
|
-
logger
|
|
18
|
-
} from "./chunk-DVU3CXWA.js";
|
|
19
|
-
import {
|
|
20
|
-
TERMINAL_STATES,
|
|
21
17
|
now
|
|
22
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-VM5QAYP5.js";
|
|
19
|
+
import {
|
|
20
|
+
logger
|
|
21
|
+
} from "./chunk-PXTIWKLQ.js";
|
|
23
22
|
|
|
24
23
|
// src/domains/issue-state.ts
|
|
25
24
|
function syncIssueStateInMemory(issue, targetState, options = {}) {
|
|
@@ -116,32 +115,6 @@ async function transitionIssueCommand(input, _deps) {
|
|
|
116
115
|
}
|
|
117
116
|
}
|
|
118
117
|
|
|
119
|
-
// src/commands/replan-issue.command.ts
|
|
120
|
-
async function replanIssueCommand(input, deps) {
|
|
121
|
-
const { issue } = input;
|
|
122
|
-
if (issue.planningStatus === "planning") {
|
|
123
|
-
throw new Error("Cannot replan while planning is in progress.");
|
|
124
|
-
}
|
|
125
|
-
if (TERMINAL_STATES.has(issue.state)) {
|
|
126
|
-
throw new Error(`Cannot replan issue in terminal state ${issue.state}.`);
|
|
127
|
-
}
|
|
128
|
-
if (issue.state === "Queued") {
|
|
129
|
-
throw new Error(`Cannot replan issue in ${issue.state} state \u2014 move it out of the execution queue first.`);
|
|
130
|
-
}
|
|
131
|
-
issue.plan = void 0;
|
|
132
|
-
issue.planVersion = (issue.planVersion ?? 0) + 1;
|
|
133
|
-
issue.executeAttempt = 0;
|
|
134
|
-
issue.reviewAttempt = 0;
|
|
135
|
-
await transitionIssueCommand(
|
|
136
|
-
{ issue, target: "Planning", note: "Replan requested." },
|
|
137
|
-
deps
|
|
138
|
-
);
|
|
139
|
-
issue.planningStatus = "idle";
|
|
140
|
-
issue.planningError = void 0;
|
|
141
|
-
issue.planningStartedAt = void 0;
|
|
142
|
-
deps.eventStore.addEvent(issue.id, "manual", `Replan requested for ${issue.identifier} \u2014 now at plan v${issue.planVersion}.`);
|
|
143
|
-
}
|
|
144
|
-
|
|
145
118
|
export {
|
|
146
119
|
syncIssueStateInMemory,
|
|
147
120
|
syncIssueStateFromFsm,
|
|
@@ -149,7 +122,6 @@ export {
|
|
|
149
122
|
getIssueStateMachineVisualization,
|
|
150
123
|
getIssueTransitionHistoryForIssue,
|
|
151
124
|
deleteIssueStateMachineResourceState,
|
|
152
|
-
transitionIssueCommand
|
|
153
|
-
replanIssueCommand
|
|
125
|
+
transitionIssueCommand
|
|
154
126
|
};
|
|
155
|
-
//# sourceMappingURL=chunk-
|
|
127
|
+
//# sourceMappingURL=chunk-7TXZYZR5.js.map
|