fifony 0.1.31 → 0.1.33
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/README.md +36 -3
- package/app/dist/apple-touch-icon.png +0 -0
- package/app/dist/assets/CommandPalette-Du7aS97R.js +1 -0
- package/app/dist/assets/KeyboardShortcutsHelp-mguoBIXk.js +1 -0
- package/app/dist/assets/OnboardingWizard-dOrVz-hX.js +1 -0
- package/app/dist/assets/analytics.lazy-CKd9S45z.js +1 -0
- package/app/dist/assets/api-ChEctgc5.js +1 -0
- package/app/dist/assets/{createLucideIcon-DgMTp0yx.js → createLucideIcon-CBw-4t9s.js} +1 -1
- package/app/dist/assets/index-nWJMQsCn.js +49 -0
- package/app/dist/assets/{index-lf3jEP_3.css → index-rLcPCr9E.css} +1 -1
- package/app/dist/assets/rolldown-runtime-Dw2cE7zH.js +1 -0
- package/app/dist/assets/vendor-DkWeBvNl.js +9 -0
- package/app/dist/favicon.png +0 -0
- package/app/dist/icon-128.png +0 -0
- package/app/dist/icon-144.png +0 -0
- package/app/dist/icon-152.png +0 -0
- package/app/dist/icon-16.png +0 -0
- package/app/dist/icon-192.png +0 -0
- package/app/dist/icon-32.png +0 -0
- package/app/dist/icon-384.png +0 -0
- package/app/dist/icon-48.png +0 -0
- package/app/dist/icon-512.png +0 -0
- package/app/dist/icon-72.png +0 -0
- package/app/dist/icon-96.png +0 -0
- package/app/dist/icon-maskable-192.png +0 -0
- package/app/dist/icon-maskable-512.png +0 -0
- package/app/dist/index.html +16 -8
- package/app/dist/manifest.webmanifest +19 -19
- package/app/dist/og-image.png +0 -0
- package/app/dist/service-worker.js +2 -2
- package/dist/agent/run-local.js +22 -15
- package/dist/{agent-OBLUHG2W.js → agent-7BMCWKOD.js} +5 -5
- package/dist/{chunk-CXFEPU5Q.js → chunk-DAXG76WD.js} +8 -17
- package/dist/{chunk-7AMUAUY5.js → chunk-GAYQ2TXV.js} +628 -81
- package/dist/{chunk-VUNMXX7N.js → chunk-LX666HVP.js} +11 -11
- package/dist/{chunk-IYAF3SY6.js → chunk-NNPKCBAB.js} +556 -17
- package/dist/cli.js +4 -4
- package/dist/{issue-runner-CI7IUBBD.js → issue-runner-BNAW3M6E.js} +5 -5
- package/dist/{issue-state-machine-ETAJLBS6.js → issue-state-machine-24GKGB3W.js} +3 -3
- package/dist/{issues-6VCD27PA.js → issues-C4WJIF7S.js} +5 -5
- package/dist/{queue-workers-IEI23UUO.js → queue-workers-HF7RBVV7.js} +2 -2
- package/dist/{scheduler-JSH55NAQ.js → scheduler-JZCJB2IN.js} +5 -5
- package/dist/{store-MTE6H7WQ.js → store-MHU3G2W4.js} +5 -5
- package/dist/{workspace-3PV5PTR5.js → workspace-IKR6X6OE.js} +2 -2
- package/package.json +9 -6
- package/app/dist/assets/KeyboardShortcutsHelp-3vwtTKsQ.js +0 -1
- package/app/dist/assets/OnboardingWizard-urUin_Ob.js +0 -1
- package/app/dist/assets/analytics.lazy-CbuW3ebu.js +0 -1
- package/app/dist/assets/index-ywtlX6S8.js +0 -45
- package/app/dist/assets/rolldown-runtime-DF2fYuay.js +0 -1
- package/app/dist/assets/vendor-D-IqxHHu.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
|
package/app/dist/index.html
CHANGED
|
@@ -7,17 +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="
|
|
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/
|
|
15
|
-
<link rel="
|
|
16
|
-
<
|
|
17
|
-
<link rel="
|
|
18
|
-
<
|
|
19
|
-
<link rel="modulepreload" crossorigin href="/assets/assets/
|
|
20
|
-
<link rel="
|
|
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>
|
|
24
|
+
<link rel="modulepreload" crossorigin href="/assets/assets/rolldown-runtime-Dw2cE7zH.js">
|
|
25
|
+
<link rel="modulepreload" crossorigin href="/assets/assets/api-ChEctgc5.js">
|
|
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">
|
|
21
29
|
</head>
|
|
22
30
|
<body>
|
|
23
31
|
<div id="root"></div>
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"id": "/",
|
|
3
|
-
"name": "fifony
|
|
3
|
+
"name": "fifony",
|
|
4
4
|
"short_name": "fifony",
|
|
5
|
-
"description": "
|
|
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": "
|
|
10
|
-
"display_override": ["window-controls-overlay", "standalone"
|
|
9
|
+
"display": "fullscreen",
|
|
10
|
+
"display_override": ["fullscreen", "window-controls-overlay", "standalone"],
|
|
11
11
|
"background_color": "#020617",
|
|
12
12
|
"theme_color": "#0f172a",
|
|
13
|
-
"orientation": "
|
|
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.
|
|
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.
|
|
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.
|
|
33
|
+
"icons": [{ "src": "/icon-96.png", "sizes": "96x96", "type": "image/png" }]
|
|
34
34
|
}
|
|
35
35
|
],
|
|
36
36
|
"icons": [
|
|
37
|
-
{
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
},
|
|
42
|
-
{
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
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 = "
|
|
1
|
+
const CACHE_VERSION = "1774232641793";
|
|
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.
|
|
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) => {
|
package/dist/agent/run-local.js
CHANGED
|
@@ -23,10 +23,10 @@ import {
|
|
|
23
23
|
startApiServer,
|
|
24
24
|
syncRuntimeConfigSettings,
|
|
25
25
|
validateConfig
|
|
26
|
-
} from "../chunk-
|
|
26
|
+
} from "../chunk-GAYQ2TXV.js";
|
|
27
27
|
import {
|
|
28
28
|
computeMetrics
|
|
29
|
-
} from "../chunk-
|
|
29
|
+
} from "../chunk-DAXG76WD.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-
|
|
37
|
+
} from "../chunk-NNPKCBAB.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-
|
|
50
|
+
} from "../chunk-LX666HVP.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(
|
|
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":
|
|
114
|
+
"/api": { target: `${scheme}://localhost:${apiPort}`, secure: false },
|
|
110
115
|
"/ws": {
|
|
111
|
-
target:
|
|
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":
|
|
124
|
-
"/health":
|
|
125
|
-
"/manifest.webmanifest":
|
|
126
|
-
"/service-worker.js":
|
|
127
|
-
"/icon.svg":
|
|
128
|
-
"/icon-maskable.svg":
|
|
129
|
-
"/offline.html":
|
|
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-
|
|
19
|
-
import "./chunk-
|
|
18
|
+
} from "./chunk-GAYQ2TXV.js";
|
|
19
|
+
import "./chunk-DAXG76WD.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-
|
|
36
|
+
} from "./chunk-NNPKCBAB.js";
|
|
37
37
|
import "./chunk-O5AEQXUV.js";
|
|
38
|
-
import "./chunk-
|
|
38
|
+
import "./chunk-LX666HVP.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-
|
|
74
|
+
//# sourceMappingURL=agent-7BMCWKOD.js.map
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import {
|
|
2
|
-
computeDiffStats
|
|
3
|
-
|
|
2
|
+
computeDiffStats,
|
|
3
|
+
syncIssueDiffStatsToStore
|
|
4
|
+
} from "./chunk-NNPKCBAB.js";
|
|
4
5
|
import {
|
|
5
6
|
isoWeek,
|
|
6
7
|
now
|
|
@@ -323,7 +324,7 @@ function emitFsmEvent(issueId, kind, message) {
|
|
|
323
324
|
}
|
|
324
325
|
}
|
|
325
326
|
async function lazyEnqueue(issue, job) {
|
|
326
|
-
const { enqueue } = await import("./queue-workers-
|
|
327
|
+
const { enqueue } = await import("./queue-workers-HF7RBVV7.js");
|
|
327
328
|
return enqueue(issue, job);
|
|
328
329
|
}
|
|
329
330
|
var ISSUE_STATE_MACHINE_ID = "issue-lifecycle";
|
|
@@ -536,6 +537,9 @@ var issueStateMachineConfig = {
|
|
|
536
537
|
if (!issue.linesAdded && !issue.linesRemoved && issue.baseBranch && issue.branchName) {
|
|
537
538
|
computeDiffStats(issue);
|
|
538
539
|
}
|
|
540
|
+
await syncIssueDiffStatsToStore(issue).catch((err) => {
|
|
541
|
+
logger.warn({ err, issueId: issue.id }, "[FSM] Failed to sync diff stats to EC on approval");
|
|
542
|
+
});
|
|
539
543
|
emitFsmEvent(issue.id, "state", `${issue.identifier} approved \u2014 waiting for merge.`);
|
|
540
544
|
}
|
|
541
545
|
},
|
|
@@ -556,31 +560,18 @@ var issueStateMachineConfig = {
|
|
|
556
560
|
}
|
|
557
561
|
const res = issueResource(machine);
|
|
558
562
|
if (res) {
|
|
559
|
-
const churnAdded = issue?.linesAdded ?? 0;
|
|
560
|
-
const churnRemoved = issue?.linesRemoved ?? 0;
|
|
561
|
-
const churnFiles = issue?.filesChanged ?? 0;
|
|
562
|
-
if (churnAdded || churnRemoved || churnFiles) {
|
|
563
|
-
await res.patch(machine.entityId, { linesAdded: 0, linesRemoved: 0, filesChanged: 0 }).catch(() => {
|
|
564
|
-
});
|
|
565
|
-
}
|
|
566
563
|
await res.patch(machine.entityId, {
|
|
567
564
|
completedAt: ts,
|
|
568
565
|
terminalWeek: week,
|
|
569
566
|
mergedAt: issue?.mergedAt ?? ts,
|
|
570
567
|
nextRetryAt: void 0,
|
|
571
568
|
lastError: void 0,
|
|
572
|
-
linesAdded: churnAdded,
|
|
573
|
-
linesRemoved: churnRemoved,
|
|
574
|
-
filesChanged: churnFiles,
|
|
575
569
|
branchName: issue?.branchName,
|
|
576
570
|
workspacePath: issue?.workspacePath,
|
|
577
571
|
worktreePath: issue?.worktreePath,
|
|
578
572
|
mergedReason: issue?.mergedReason
|
|
579
573
|
}).catch(() => {
|
|
580
574
|
});
|
|
581
|
-
if (churnAdded || churnRemoved || churnFiles) {
|
|
582
|
-
logger.info({ issueId: issue?.id, linesAdded: churnAdded, linesRemoved: churnRemoved, filesChanged: churnFiles }, "[FSM] EC diff stats patched on merge (reset\u2192set for delta tracking)");
|
|
583
|
-
}
|
|
584
575
|
}
|
|
585
576
|
},
|
|
586
577
|
onEnterCancelled: async (context, _event, machine) => {
|
|
@@ -844,4 +835,4 @@ export {
|
|
|
844
835
|
canTransitionIssue,
|
|
845
836
|
visualizeStateMachine
|
|
846
837
|
};
|
|
847
|
-
//# sourceMappingURL=chunk-
|
|
838
|
+
//# sourceMappingURL=chunk-DAXG76WD.js.map
|