fifony 0.1.39 → 0.1.40
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--xFIYira.js → CommandPalette-dMSFpGLm.js} +1 -1
- package/app/dist/assets/{KeyboardShortcutsHelp-BtrclGbX.js → KeyboardShortcutsHelp-CH5aYlDe.js} +1 -1
- package/app/dist/assets/{OnboardingWizard-AdxAh1n0.js → OnboardingWizard-CdJHsRny.js} +1 -1
- package/app/dist/assets/{analytics.lazy-DaMIOiTI.js → analytics.lazy-CKu4136R.js} +1 -1
- package/app/dist/assets/{index-BWB0OQnx.css → index-BatA8x-K.css} +1 -1
- package/app/dist/assets/index-C13WwYFD.js +54 -0
- package/app/dist/index.html +2 -2
- package/app/dist/service-worker.js +1 -1
- package/dist/agent/run-local.js +5 -5
- package/dist/{agent-AAT7OHAL.js → agent-KDPOZCI5.js} +6 -6
- package/dist/{chunk-AVSRIV47.js → chunk-3QL4QAQ5.js} +22 -14
- package/dist/{chunk-T2YJOZ6N.js → chunk-EPY5TTQK.js} +6 -29
- package/dist/{chunk-DWMY2HBG.js → chunk-LYAI5RPK.js} +428 -145
- package/dist/{chunk-UNYIR5AK.js → chunk-O3FGX4J6.js} +29 -13
- package/dist/{chunk-WBOBY75G.js → chunk-UXXUTDGV.js} +3 -3
- package/dist/cli.js +5 -5
- package/dist/issue-runner-YZM6WQMY.js +15 -0
- package/dist/{issue-state-machine-TEIICCAA.js → issue-state-machine-KOZE5JWX.js} +4 -4
- package/dist/{issues-JPMKO2EE.js → issues-7HQC7OIN.js} +6 -6
- package/dist/mcp/server.js +1 -1
- package/dist/{queue-workers-5JOCROD6.js → queue-workers-ZEZHDX7M.js} +2 -2
- package/dist/{scheduler-GAO2MXGZ.js → scheduler-4R4ZAF25.js} +6 -6
- package/dist/{store-3YSID6N2.js → store-FNUWCFOX.js} +6 -6
- package/dist/{workspace-ZD5H6YOL.js → workspace-AOHHNWL5.js} +3 -3
- package/package.json +1 -1
- package/app/dist/assets/index-D5rsr1We.js +0 -54
- package/dist/issue-runner-JSHZGTKQ.js +0 -15
package/app/dist/index.html
CHANGED
|
@@ -20,12 +20,12 @@
|
|
|
20
20
|
<link rel="icon" href="/assets/icon-32.png" sizes="32x32" type="image/png" />
|
|
21
21
|
<link rel="icon" href="/assets/icon-16.png" sizes="16x16" type="image/png" />
|
|
22
22
|
<link rel="apple-touch-icon" href="/assets/apple-touch-icon.png" />
|
|
23
|
-
<script type="module" crossorigin src="/assets/assets/index-
|
|
23
|
+
<script type="module" crossorigin src="/assets/assets/index-C13WwYFD.js"></script>
|
|
24
24
|
<link rel="modulepreload" crossorigin href="/assets/assets/rolldown-runtime-Dw2cE7zH.js">
|
|
25
25
|
<link rel="modulepreload" crossorigin href="/assets/assets/api-ChEctgc5.js">
|
|
26
26
|
<link rel="modulepreload" crossorigin href="/assets/assets/vendor-DkWeBvNl.js">
|
|
27
27
|
<link rel="modulepreload" crossorigin href="/assets/assets/createLucideIcon-R47sXufx.js">
|
|
28
|
-
<link rel="stylesheet" crossorigin href="/assets/assets/index-
|
|
28
|
+
<link rel="stylesheet" crossorigin href="/assets/assets/index-BatA8x-K.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 = "1774372039411";
|
|
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"];
|
package/dist/agent/run-local.js
CHANGED
|
@@ -23,17 +23,17 @@ import {
|
|
|
23
23
|
startApiServer,
|
|
24
24
|
syncRuntimeConfigSettings,
|
|
25
25
|
validateConfig
|
|
26
|
-
} from "../chunk-
|
|
26
|
+
} from "../chunk-LYAI5RPK.js";
|
|
27
27
|
import {
|
|
28
28
|
cleanTerminalWorkspaces,
|
|
29
29
|
initQueueWorkers,
|
|
30
30
|
recoverOrphans,
|
|
31
31
|
recoverState,
|
|
32
32
|
stopQueueWorkers
|
|
33
|
-
} from "../chunk-
|
|
33
|
+
} from "../chunk-3QL4QAQ5.js";
|
|
34
34
|
import {
|
|
35
35
|
computeMetrics
|
|
36
|
-
} from "../chunk-
|
|
36
|
+
} from "../chunk-UXXUTDGV.js";
|
|
37
37
|
import {
|
|
38
38
|
detectAvailableProviders,
|
|
39
39
|
detectDefaultBranch,
|
|
@@ -41,7 +41,7 @@ import {
|
|
|
41
41
|
getProviderDefaultCommand,
|
|
42
42
|
resolveDefaultProvider,
|
|
43
43
|
setSkipSource
|
|
44
|
-
} from "../chunk-
|
|
44
|
+
} from "../chunk-O3FGX4J6.js";
|
|
45
45
|
import {
|
|
46
46
|
initLogger,
|
|
47
47
|
logger
|
|
@@ -51,7 +51,7 @@ import {
|
|
|
51
51
|
fail,
|
|
52
52
|
now,
|
|
53
53
|
parseIntArg
|
|
54
|
-
} from "../chunk-
|
|
54
|
+
} from "../chunk-EPY5TTQK.js";
|
|
55
55
|
import {
|
|
56
56
|
CLI_ARGS,
|
|
57
57
|
PACKAGE_ROOT,
|
|
@@ -15,9 +15,9 @@ import {
|
|
|
15
15
|
runIssueOnce,
|
|
16
16
|
runPlanningJob,
|
|
17
17
|
tryParseJsonOutput
|
|
18
|
-
} from "./chunk-
|
|
19
|
-
import "./chunk-
|
|
20
|
-
import "./chunk-
|
|
18
|
+
} from "./chunk-LYAI5RPK.js";
|
|
19
|
+
import "./chunk-3QL4QAQ5.js";
|
|
20
|
+
import "./chunk-UXXUTDGV.js";
|
|
21
21
|
import {
|
|
22
22
|
buildPrompt,
|
|
23
23
|
buildProviderBasePrompt,
|
|
@@ -34,9 +34,9 @@ import {
|
|
|
34
34
|
runCommandWithTimeout,
|
|
35
35
|
runHook,
|
|
36
36
|
shouldSkipMergePath
|
|
37
|
-
} from "./chunk-
|
|
37
|
+
} from "./chunk-O3FGX4J6.js";
|
|
38
38
|
import "./chunk-DVU3CXWA.js";
|
|
39
|
-
import "./chunk-
|
|
39
|
+
import "./chunk-EPY5TTQK.js";
|
|
40
40
|
import "./chunk-37N5OFHM.js";
|
|
41
41
|
export {
|
|
42
42
|
addTokenUsage,
|
|
@@ -71,4 +71,4 @@ export {
|
|
|
71
71
|
shouldSkipMergePath,
|
|
72
72
|
tryParseJsonOutput
|
|
73
73
|
};
|
|
74
|
-
//# sourceMappingURL=agent-
|
|
74
|
+
//# sourceMappingURL=agent-KDPOZCI5.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-
|
|
29
|
+
import("./store-FNUWCFOX.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-
|
|
119
|
+
const { runPlanningJob } = await import("./issue-runner-YZM6WQMY.js");
|
|
120
120
|
await runPlanningJob(runtimeState, issue);
|
|
121
121
|
}
|
|
122
122
|
async function dispatchExecute(issue) {
|
|
123
|
-
const { runIssueOnce } = await import("./issue-runner-
|
|
123
|
+
const { runIssueOnce } = await import("./issue-runner-YZM6WQMY.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-
|
|
133
|
+
const { runIssueOnce } = await import("./issue-runner-YZM6WQMY.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-
|
|
138
|
+
const { ensureNotStale } = await import("./scheduler-4R4ZAF25.js");
|
|
139
139
|
await ensureNotStale(runtimeState, runtimeState.config.staleInProgressTimeoutMs);
|
|
140
140
|
}
|
|
141
141
|
var draining = false;
|
|
@@ -181,12 +181,14 @@ async function enqueue(issue, job) {
|
|
|
181
181
|
return;
|
|
182
182
|
}
|
|
183
183
|
queue.push({ issueId: issue.id, job, enqueuedAt: Date.now() });
|
|
184
|
-
|
|
184
|
+
setImmediate(() => {
|
|
185
|
+
drain().catch((err) => logger.error({ err }, "[Queue] Drain loop error"));
|
|
186
|
+
});
|
|
185
187
|
}
|
|
186
188
|
async function recoverState() {
|
|
187
189
|
if (!runtimeState) return;
|
|
188
190
|
try {
|
|
189
|
-
const { getIssueStateMachinePlugin, ISSUE_STATE_MACHINE_ID } = await import("./issue-state-machine-
|
|
191
|
+
const { getIssueStateMachinePlugin, ISSUE_STATE_MACHINE_ID } = await import("./issue-state-machine-KOZE5JWX.js");
|
|
190
192
|
const fsmPlugin = getIssueStateMachinePlugin();
|
|
191
193
|
if (fsmPlugin?.getState) {
|
|
192
194
|
for (const issue of runtimeState.issues) {
|
|
@@ -204,8 +206,14 @@ async function recoverState() {
|
|
|
204
206
|
}
|
|
205
207
|
for (const issue of runtimeState.issues) {
|
|
206
208
|
try {
|
|
207
|
-
if (issue.state === "Planning"
|
|
208
|
-
|
|
209
|
+
if (issue.state === "Planning") {
|
|
210
|
+
if (issue.planningStatus === "planning") {
|
|
211
|
+
logger.info({ issueId: issue.id, identifier: issue.identifier }, "[Queue] Clearing stale planningStatus from previous session");
|
|
212
|
+
issue.planningStatus = "idle";
|
|
213
|
+
}
|
|
214
|
+
if (!issue.plan) {
|
|
215
|
+
await enqueue(issue, "plan");
|
|
216
|
+
}
|
|
209
217
|
} else if (issue.state === "Queued" || issue.state === "Running") {
|
|
210
218
|
await enqueue(issue, "execute");
|
|
211
219
|
} else if (issue.state === "Reviewing") {
|
|
@@ -218,9 +226,9 @@ async function recoverState() {
|
|
|
218
226
|
}
|
|
219
227
|
async function recoverOrphans() {
|
|
220
228
|
if (!runtimeState) return;
|
|
221
|
-
const { isAgentStillRunning, cleanStalePidFile } = await import("./agent-
|
|
222
|
-
const { executeTransition } = await import("./issue-state-machine-
|
|
223
|
-
const { addEvent } = await import("./issues-
|
|
229
|
+
const { isAgentStillRunning, cleanStalePidFile } = await import("./agent-KDPOZCI5.js");
|
|
230
|
+
const { executeTransition } = await import("./issue-state-machine-KOZE5JWX.js");
|
|
231
|
+
const { addEvent } = await import("./issues-7HQC7OIN.js");
|
|
224
232
|
const candidates = runtimeState.issues.filter((i) => i.state === "Running" || i.state === "Queued");
|
|
225
233
|
logger.debug({ count: candidates.length }, "[Queue] Checking for orphaned agent processes");
|
|
226
234
|
for (const issue of candidates) {
|
|
@@ -258,7 +266,7 @@ function cleanTerminalWorkspaces() {
|
|
|
258
266
|
logger.info({ count: terminals.length }, "[Queue] Scheduling terminal workspace cleanup in background");
|
|
259
267
|
const state = runtimeState;
|
|
260
268
|
setImmediate(async () => {
|
|
261
|
-
const { cleanWorkspace } = await import("./agent-
|
|
269
|
+
const { cleanWorkspace } = await import("./agent-KDPOZCI5.js");
|
|
262
270
|
for (const issue of terminals) {
|
|
263
271
|
try {
|
|
264
272
|
await cleanWorkspace(issue.id, issue, state);
|
|
@@ -292,4 +300,4 @@ export {
|
|
|
292
300
|
cleanTerminalWorkspaces,
|
|
293
301
|
getQueueStats
|
|
294
302
|
};
|
|
295
|
-
//# sourceMappingURL=chunk-
|
|
303
|
+
//# sourceMappingURL=chunk-3QL4QAQ5.js.map
|
|
@@ -196,36 +196,11 @@ var PROMPT_TEMPLATES = {
|
|
|
196
196
|
// src/agents/prompts/integrations-agency-agents.stub.md
|
|
197
197
|
"integrations-impeccable": '# Impeccable integration idea\n\nUse impeccable-oriented skills as a frontend review layer around fifony issues.\n\nSuggested pattern:\n\n1. Use `agency-senior-developer` or `codex` as executor.\n2. Route UI-heavy issues to a reviewer prompt that explicitly asks for impeccable-style critique.\n3. Expose the resulting review through the fifony MCP prompts or as a follow-up review issue.\n\nSuggested labels:\n- frontend\n- ui\n- design-system\n\nSuggested reviewer prompt seed:\n"Review this implementation using impeccable standards for frontend quality, polish, hierarchy, spacing, responsiveness, and interaction clarity."\n',
|
|
198
198
|
// src/agents/prompts/integrations-impeccable.stub.md
|
|
199
|
-
"issue-enhancer-description":
|
|
200
|
-
Rewrite the description to be clearer, complete, and directly actionable.
|
|
201
|
-
Return strict JSON only with this schema:
|
|
202
|
-
{ "field": "description", "value": "..." }
|
|
203
|
-
|
|
204
|
-
Issue type: {{issueType}}
|
|
205
|
-
Current title: {{title}}
|
|
206
|
-
Current description: {{description}}
|
|
207
|
-
{{#if images}}
|
|
208
|
-
Visual evidence (attached screenshots for context):
|
|
209
|
-
{{#each images}}
|
|
210
|
-
- {{this}}
|
|
211
|
-
{{/each}}
|
|
212
|
-
{{/if}}
|
|
213
|
-
|
|
214
|
-
Rules:
|
|
215
|
-
- Keep it concise but include meaningful acceptance criteria tailored to the issue type.
|
|
216
|
-
- For "bug": focus on problem description, expected behavior, and steps to reproduce.
|
|
217
|
-
- For "feature": focus on goal, acceptance criteria, and any relevant notes.
|
|
218
|
-
- For "refactor": describe current state, desired state, and scope.
|
|
219
|
-
- For "docs": describe what to document and target audience.
|
|
220
|
-
- For "chore": describe the task and why it's needed now.
|
|
221
|
-
- Use markdown formatting appropriate for the type (## headings, bullet points).
|
|
222
|
-
- Avoid extra wrappers, outer quotes, or extra explanation.
|
|
223
|
-
- The value should be in Portuguese if the input is in Portuguese; otherwise in English.
|
|
224
|
-
`,
|
|
199
|
+
"issue-enhancer-description": 'You are helping improve issue metadata for a software execution queue.\nRewrite the description to be clearer, complete, and directly actionable.\n\nIssue type: {{issueType}}\nCurrent title: {{title}}\nCurrent description: {{description}}\n{{#if images}}\nVisual evidence (attached screenshots for context):\n{{#each images}}\n- {{this}}\n{{/each}}\n{{/if}}\n\nRules:\n- Keep it concise but include meaningful acceptance criteria tailored to the issue type.\n- For "bug": focus on problem description, expected behavior, and steps to reproduce.\n- For "feature": focus on goal, acceptance criteria, and any relevant notes.\n- For "refactor": describe current state, desired state, and scope.\n- For "docs": describe what to document and target audience.\n- For "chore": describe the task and why it\'s needed now.\n- Use markdown formatting appropriate for the type (## headings, bullet points).\n- The value should be in Portuguese if the input is in Portuguese; otherwise in English.\n\nAfter your analysis, return a single JSON code block as the LAST thing in your output:\n```json\n{ "field": "description", "value": "<REPLACE_WITH_ACTUAL_DESCRIPTION>" }\n```\n',
|
|
225
200
|
// src/agents/prompts/issue-enhancer-description.stub.md
|
|
226
|
-
"issue-enhancer-title": 'You are helping improve issue metadata for a software execution queue.\nRewrite the title for clarity, actionability, and specificity.\
|
|
201
|
+
"issue-enhancer-title": 'You are helping improve issue metadata for a software execution queue.\nRewrite the title for clarity, actionability, and specificity.\n\nIssue type: {{issueType}}\nCurrent title: {{title}}\nDescription context: {{description}}\n{{#if images}}\nVisual evidence (attached screenshots for context):\n{{#each images}}\n- {{this}}\n{{/each}}\n{{/if}}\n\nRules:\n- Keep it concise and suitable as a task title.\n- Use imperative language when possible.\n- If the issue type is "bug", start with "fix: ". If "feature", start with "feat: ". If "refactor", start with "refactor: ". If "docs", start with "docs: ". If "chore", start with "chore: ". For "blank", use no prefix.\n- Do not include markdown, quotes, or extra explanation.\n- The value should be in Portuguese if the input is in Portuguese; otherwise in English.\n\nReturn a single JSON code block as the LAST thing in your output:\n```json\n{ "field": "title", "value": "<REPLACE_WITH_ACTUAL_TITLE>" }\n```\n',
|
|
227
202
|
// src/agents/prompts/issue-enhancer-title.stub.md
|
|
228
|
-
"issue-planner": 'You are a senior technical execution planner.\nProduce the best possible plan for the issue below, filling the JSON schema precisely.\n{{#if fast}}\n\nFAST MODE: Be brief and direct. Minimize reasoning depth.\n- 2-4 steps maximum. Skip optional fields (unknowns, risks, alternatives).\n- Focus only on: summary, steps, estimatedComplexity, suggestedPaths.\n{{/if}}\n\n{{#if availableCapabilities}}\n## Installed Capabilities (recommend from these lists)\n\n{{#if availableSkills.length}}\n### Skills\n{{#each availableSkills}}\n- **{{name}}**{{#if description}} \u2014 {{description}}{{/if}}{{#if whenToUse}} (Use when: {{whenToUse}}){{/if}}\n{{/each}}\n{{/if}}\n{{#if availableAgents.length}}\n### Agents\n{{#each availableAgents}}\n- **{{name}}**{{#if description}} \u2014 {{description}}{{/if}}{{#if whenToUse}} (Use when: {{whenToUse}}){{/if}}{{#if avoidIf}} (Avoid if: {{avoidIf}}){{/if}}\n{{/each}}\n{{/if}}\n{{#if availableCommands.length}}\n### Commands\n{{#each availableCommands}}\n- /{{name}}\n{{/each}}\n{{/if}}\n\nRecommend skills and agents ONLY from these lists. Do not invent names.\nOnly recommend when there is a concrete benefit \u2014 not everything needs skills or agents.\n{{/if}}\n\nIssue title: {{title}}\nIssue description: {{description}}\n{{#if images}}\nVisual evidence (attached screenshots for context):\n{{#each images}}\n- {{this}}\n{{/each}}\n{{/if}}\n{{#unless fast}}\n\nQuality rules:\n- Be concrete, not generic. No vague phrases like \'implement\' or \'improve\' without detail.\n- Break work into actionable steps (2-8 steps). Each step describes WHAT, not HOW.\n- Each step must have a clear \'doneWhen\' acceptance criterion.\n- Identify assumptions, constraints, unknowns, and risks.\n- For unknowns, specify what question needs answering and how to resolve it.\n- Suggest file paths that are likely relevant to the changes.\n\nComplexity estimation:\n- trivial: < 5 min, single-file cosmetic change\n- low: 5-15 min, small focused change\n- medium: 15-60 min, multi-file change with testing\n- high: > 1 hour, architectural change or new feature\n\nEffort suggestion:\n- low: simple fixes, no deep reasoning needed\n- medium: standard development work\n- high: complex architecture, security, or cross-cutting changes\n- Set per-role if different: planner, executor, reviewer\n{{/unless}}\n\
|
|
203
|
+
"issue-planner": 'You are a senior technical execution planner.\nProduce the best possible plan for the issue below, filling the JSON schema precisely.\n{{#if fast}}\n\nFAST MODE: Be brief and direct. Minimize reasoning depth.\n- 2-4 steps maximum. Skip optional fields (unknowns, risks, alternatives).\n- Focus only on: summary, steps, estimatedComplexity, suggestedPaths.\n{{/if}}\n\n{{#if availableCapabilities}}\n## Installed Capabilities (recommend from these lists)\n\n{{#if availableSkills.length}}\n### Skills\n{{#each availableSkills}}\n- **{{name}}**{{#if description}} \u2014 {{description}}{{/if}}{{#if whenToUse}} (Use when: {{whenToUse}}){{/if}}\n{{/each}}\n{{/if}}\n{{#if availableAgents.length}}\n### Agents\n{{#each availableAgents}}\n- **{{name}}**{{#if description}} \u2014 {{description}}{{/if}}{{#if whenToUse}} (Use when: {{whenToUse}}){{/if}}{{#if avoidIf}} (Avoid if: {{avoidIf}}){{/if}}\n{{/each}}\n{{/if}}\n{{#if availableCommands.length}}\n### Commands\n{{#each availableCommands}}\n- /{{name}}\n{{/each}}\n{{/if}}\n\nRecommend skills and agents ONLY from these lists. Do not invent names.\nOnly recommend when there is a concrete benefit \u2014 not everything needs skills or agents.\n{{/if}}\n\nIssue title: {{title}}\nIssue description: {{description}}\n{{#if images}}\nVisual evidence (attached screenshots for context):\n{{#each images}}\n- {{this}}\n{{/each}}\n{{/if}}\n{{#unless fast}}\n\nQuality rules:\n- Be concrete, not generic. No vague phrases like \'implement\' or \'improve\' without detail.\n- Break work into actionable steps (2-8 steps). Each step describes WHAT, not HOW.\n- Each step must have a clear \'doneWhen\' acceptance criterion.\n- Identify assumptions, constraints, unknowns, and risks.\n- For unknowns, specify what question needs answering and how to resolve it.\n- Suggest file paths that are likely relevant to the changes.\n\nComplexity estimation:\n- trivial: < 5 min, single-file cosmetic change\n- low: 5-15 min, small focused change\n- medium: 15-60 min, multi-file change with testing\n- high: > 1 hour, architectural change or new feature\n\nEffort suggestion:\n- low: simple fixes, no deep reasoning needed\n- medium: standard development work\n- high: complex architecture, security, or cross-cutting changes\n- Set per-role if different: planner, executor, reviewer\n{{/unless}}\n\n## Instructions\n\nYou are encouraged to explore the codebase \u2014 read files, search for patterns, inspect structure \u2014 to produce an informed plan. Use any tools available to you.\n\nAfter your analysis, you MUST output the final plan as a single JSON code block (```json ... ```).\nThe JSON block must be the LAST thing in your output. Any analysis or reasoning should come BEFORE it.\n\nIMPORTANT: Replace ALL placeholder values with real content specific to the issue above. Do NOT copy the example values literally \u2014 every field must contain actual plan content derived from the issue.\n\nUse these exact field names:\n\n```json\n{\n "summary": "<YOUR one-line summary here>",\n "estimatedComplexity": "trivial|low|medium|high",\n "steps": [\n {\n "step": 1,\n "action": "<YOUR concrete action here>",\n "files": ["<real/path/to/file.ts>"],\n "details": "<YOUR additional context>",\n "doneWhen": "<YOUR acceptance criterion>"\n }\n ],\n "assumptions": ["<YOUR assumptions>"],\n "constraints": ["<YOUR constraints>"],\n "unknowns": [\n { "question": "<YOUR question>", "whyItMatters": "<YOUR reason>", "howToResolve": "<YOUR approach>" }\n ],\n "successCriteria": ["<YOUR criteria>"],\n "risks": [\n { "risk": "<YOUR risk>", "impact": "<YOUR impact>", "mitigation": "<YOUR mitigation>" }\n ],\n "suggestedPaths": ["<real/path/to/relevant/file.ts>"],\n "suggestedSkills": ["<skill-name-from-list-above>"],\n "suggestedAgents": ["<agent-name-from-list-above>"],\n "suggestedEffort": { "default": "medium", "planner": "low", "executor": "medium", "reviewer": "medium" }\n}\n```\n',
|
|
229
204
|
// src/agents/prompts/issue-planner.stub.md
|
|
230
205
|
"issue-planner-refine": "You are a senior technical execution planner refining an existing plan based on user feedback.\n\n## Original Issue\nTitle: {{title}}\nDescription: {{description}}\n\n## Current Plan (JSON)\n```json\n{{currentPlan}}\n```\n\n## User Feedback\n{{feedback}}\n\n## Instructions\n\nRevise the plan above to address the user's feedback precisely.\n\nRules:\n- Keep all parts of the plan that are NOT affected by the feedback unchanged.\n- Only modify, add, or remove elements that the feedback specifically requests.\n- Preserve the same JSON schema structure as the current plan.\n- Maintain step numbering consistency after changes.\n- If feedback asks to add steps, insert them in the logical position and renumber.\n- If feedback asks to remove steps, renumber remaining steps sequentially.\n- Update the summary if the overall direction changed.\n- Re-evaluate estimatedComplexity if the scope changed significantly.\n- Update suggestedPaths, suggestedSkills, and suggestedAgents if affected by the changes.\n\nReturn strict JSON. No text outside JSON.\n",
|
|
231
206
|
// src/agents/prompts/issue-planner-refine.stub.md
|
|
@@ -237,6 +212,8 @@ Rules:
|
|
|
237
212
|
// src/agents/prompts/mcp-issue.stub.md
|
|
238
213
|
"mcp-review-workflow": "Review the pipeline configuration for this fifony workspace as {{provider}}.\n\nWorkspace: {{workspaceRoot}}\n\nFocus on:\n- provider orchestration quality (plan/execute/review stages)\n- hooks safety (beforeRun, afterRun, afterCreate, beforeRemove)\n- prompt clarity\n- issue lifecycle correctness\n- what an MCP client needs in order to integrate cleanly\n",
|
|
239
214
|
// src/agents/prompts/mcp-review-workflow.stub.md
|
|
215
|
+
"merge-conflict-resolver": "You are resolving git merge conflicts in a software project.\n\n## Context\n\nIssue: {{issueIdentifier}} \u2014 {{title}}\n{{#if description}}\nDescription: {{description}}\n{{/if}}\nMerging branch `{{featureBranch}}` into `{{baseBranch}}`.\n\n## Conflicting Files\n\nThe following files have conflict markers (`<<<<<<<`, `=======`, `>>>>>>>`) that you must resolve:\n\n{{#each conflictFiles}}\n- {{this}}\n{{/each}}\n\n## Instructions\n\n1. Read each conflicting file and understand the intent of BOTH sides.\n2. Resolve the conflict markers by choosing the correct combination of changes. Prefer keeping both sides' intent when possible.\n3. After resolving, stage each file with `git add <file>`.\n4. Do NOT commit \u2014 the merge commit will be created automatically after you finish.\n5. Do NOT modify files that are not in the conflict list.\n6. Verify there are no remaining conflict markers (`<<<<<<<`) in any resolved file.\n",
|
|
216
|
+
// src/agents/prompts/merge-conflict-resolver.stub.md
|
|
240
217
|
"project-analysis": `You are analyzing a software project to help configure an AI-powered development assistant.
|
|
241
218
|
|
|
242
219
|
Look at the project structure, source code, configuration files, and any documentation you can find. Pay special attention to:
|
|
@@ -308,4 +285,4 @@ export {
|
|
|
308
285
|
repairTruncatedJson,
|
|
309
286
|
renderPrompt
|
|
310
287
|
};
|
|
311
|
-
//# sourceMappingURL=chunk-
|
|
288
|
+
//# sourceMappingURL=chunk-EPY5TTQK.js.map
|