issue-flow 0.17.0 → 0.18.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{agent-TB6W7PT7.js → agent-HMZTXCRT.js} +5 -5
- package/dist/{analyze-6M3KEOX7.js → analyze-Q4ONIWRZ.js} +10 -10
- package/dist/{apply-ADB3ZK7W.js → apply-EEFPY2W4.js} +5 -5
- package/dist/{bench-FM7I7EIV.js → bench-WWWXLTFH.js} +9 -9
- package/dist/{chunk-KZ5EY5XX.js → chunk-34OCSKOB.js} +7 -7
- package/dist/{chunk-UWDCIFTP.js → chunk-45WZ6GMI.js} +27 -43
- package/dist/chunk-45WZ6GMI.js.map +1 -0
- package/dist/{chunk-QMIQR7EE.js → chunk-62GVVZQO.js} +3 -3
- package/dist/{chunk-YII4U7ZD.js → chunk-6K2LCFG6.js} +2 -2
- package/dist/{chunk-A4H7P7T7.js → chunk-7UMMFOL2.js} +3 -3
- package/dist/chunk-7UMMFOL2.js.map +1 -0
- package/dist/{chunk-HJBF4WD2.js → chunk-CWSQVHVV.js} +59 -25
- package/dist/chunk-CWSQVHVV.js.map +1 -0
- package/dist/{chunk-SGTTR4XW.js → chunk-E4I6MMHD.js} +4 -4
- package/dist/{chunk-6YQT3SSM.js → chunk-ECU7YO7S.js} +2 -2
- package/dist/{chunk-MI5TREN3.js → chunk-EG2MGDP5.js} +6 -6
- package/dist/{chunk-RCZJQUTC.js → chunk-HOAHMERN.js} +43 -10
- package/dist/chunk-HOAHMERN.js.map +1 -0
- package/dist/{chunk-HLAPOUEM.js → chunk-KMCS76ZW.js} +3 -3
- package/dist/{chunk-KZXQWC7U.js → chunk-KRAGAUKD.js} +8 -8
- package/dist/{chunk-E6KXCV3T.js → chunk-LGHND47K.js} +2 -2
- package/dist/{chunk-DV7HUC4Z.js → chunk-LI35PIIS.js} +2 -2
- package/dist/{chunk-Z5O2XBWA.js → chunk-LTH6XYZ3.js} +5 -5
- package/dist/{chunk-2SUFAE6X.js → chunk-NEWNXZ65.js} +21 -12
- package/dist/{chunk-2SUFAE6X.js.map → chunk-NEWNXZ65.js.map} +1 -1
- package/dist/{chunk-LPWPFIIB.js → chunk-OODXFCQV.js} +7 -7
- package/dist/{chunk-ISZ54SVE.js → chunk-PMLE7KAQ.js} +17 -9
- package/dist/chunk-PMLE7KAQ.js.map +1 -0
- package/dist/{chunk-HY5HLFDU.js → chunk-QF7VEL3M.js} +115 -14
- package/dist/chunk-QF7VEL3M.js.map +1 -0
- package/dist/{chunk-B3TSS7BT.js → chunk-QJ44VG5G.js} +2 -2
- package/dist/{chunk-VE3IYNDN.js → chunk-SA6HXL4Y.js} +2 -2
- package/dist/{chunk-UK4E2FUA.js → chunk-TZYINKCC.js} +75 -53
- package/dist/chunk-TZYINKCC.js.map +1 -0
- package/dist/{chunk-32JSYXEK.js → chunk-V7QOIQYC.js} +2 -2
- package/dist/{chunk-ANI2NTR4.js → chunk-XUEMATVY.js} +6 -6
- package/dist/{chunk-D6ZBGJ3L.js → chunk-ZVZMWNCG.js} +129 -35
- package/dist/chunk-ZVZMWNCG.js.map +1 -0
- package/dist/cli.js +35 -35
- package/dist/cli.js.map +1 -1
- package/dist/{config-KGZUPAUP.js → config-LEBZZCJP.js} +4 -4
- package/dist/{conventions-RYN7OXJN.js → conventions-XOT6YW5L.js} +6 -6
- package/dist/{execute-QL3ZQIAP.js → execute-LELOSR5T.js} +14 -14
- package/dist/{generate-CX6KNHZS.js → generate-JGW5JSKB.js} +10 -10
- package/dist/{init-PDVQDRS6.js → init-TO6MUXO4.js} +7 -5
- package/dist/{operations-CAKIT2BO.js → operations-O4FORFIH.js} +4 -4
- package/dist/{plan-PRORGS3L.js → plan-OXAT344Q.js} +12 -12
- package/dist/{policy-WX6O2JID.js → policy-U5NBFAO5.js} +5 -5
- package/dist/{pr-27RMQI5F.js → pr-UZHNKKZC.js} +12 -12
- package/dist/{pr-review-VNESMAMT.js → pr-review-Q4ACAWDM.js} +9 -9
- package/dist/{prd-ZNC4T5BS.js → prd-6CYEMLDY.js} +12 -12
- package/dist/{recorder-N7U66HCO.js → recorder-2BAKPBRA.js} +2 -2
- package/dist/{resume-VLWIE264.js → resume-URCU6CIJ.js} +26 -26
- package/dist/{review-7CREJDKB.js → review-LVZT2TMW.js} +13 -13
- package/dist/{routing-VCDYHSXA.js → routing-EK6RBZM4.js} +6 -6
- package/dist/run-2RXJCJKT.js +56 -0
- package/dist/{usage-U7QNGCPK.js → usage-KTMYXAPF.js} +3 -3
- package/dist/{web-HUNDHCJ4.js → web-B5UPHHR5.js} +8 -8
- package/package.json +1 -1
- package/web/AGENTS.md +115 -7
- package/web/public/app.css +393 -245
- package/web/public/app.js +108 -38
- package/web/public/index.html +106 -78
- package/dist/chunk-A4H7P7T7.js.map +0 -1
- package/dist/chunk-D6ZBGJ3L.js.map +0 -1
- package/dist/chunk-HJBF4WD2.js.map +0 -1
- package/dist/chunk-HY5HLFDU.js.map +0 -1
- package/dist/chunk-ISZ54SVE.js.map +0 -1
- package/dist/chunk-RCZJQUTC.js.map +0 -1
- package/dist/chunk-UK4E2FUA.js.map +0 -1
- package/dist/chunk-UWDCIFTP.js.map +0 -1
- package/dist/run-3MPORLF5.js +0 -56
- /package/dist/{agent-TB6W7PT7.js.map → agent-HMZTXCRT.js.map} +0 -0
- /package/dist/{analyze-6M3KEOX7.js.map → analyze-Q4ONIWRZ.js.map} +0 -0
- /package/dist/{apply-ADB3ZK7W.js.map → apply-EEFPY2W4.js.map} +0 -0
- /package/dist/{bench-FM7I7EIV.js.map → bench-WWWXLTFH.js.map} +0 -0
- /package/dist/{chunk-KZ5EY5XX.js.map → chunk-34OCSKOB.js.map} +0 -0
- /package/dist/{chunk-QMIQR7EE.js.map → chunk-62GVVZQO.js.map} +0 -0
- /package/dist/{chunk-YII4U7ZD.js.map → chunk-6K2LCFG6.js.map} +0 -0
- /package/dist/{chunk-SGTTR4XW.js.map → chunk-E4I6MMHD.js.map} +0 -0
- /package/dist/{chunk-6YQT3SSM.js.map → chunk-ECU7YO7S.js.map} +0 -0
- /package/dist/{chunk-MI5TREN3.js.map → chunk-EG2MGDP5.js.map} +0 -0
- /package/dist/{chunk-HLAPOUEM.js.map → chunk-KMCS76ZW.js.map} +0 -0
- /package/dist/{chunk-KZXQWC7U.js.map → chunk-KRAGAUKD.js.map} +0 -0
- /package/dist/{chunk-E6KXCV3T.js.map → chunk-LGHND47K.js.map} +0 -0
- /package/dist/{chunk-DV7HUC4Z.js.map → chunk-LI35PIIS.js.map} +0 -0
- /package/dist/{chunk-Z5O2XBWA.js.map → chunk-LTH6XYZ3.js.map} +0 -0
- /package/dist/{chunk-LPWPFIIB.js.map → chunk-OODXFCQV.js.map} +0 -0
- /package/dist/{chunk-B3TSS7BT.js.map → chunk-QJ44VG5G.js.map} +0 -0
- /package/dist/{chunk-VE3IYNDN.js.map → chunk-SA6HXL4Y.js.map} +0 -0
- /package/dist/{chunk-32JSYXEK.js.map → chunk-V7QOIQYC.js.map} +0 -0
- /package/dist/{chunk-ANI2NTR4.js.map → chunk-XUEMATVY.js.map} +0 -0
- /package/dist/{config-KGZUPAUP.js.map → config-LEBZZCJP.js.map} +0 -0
- /package/dist/{conventions-RYN7OXJN.js.map → conventions-XOT6YW5L.js.map} +0 -0
- /package/dist/{execute-QL3ZQIAP.js.map → execute-LELOSR5T.js.map} +0 -0
- /package/dist/{generate-CX6KNHZS.js.map → generate-JGW5JSKB.js.map} +0 -0
- /package/dist/{init-PDVQDRS6.js.map → init-TO6MUXO4.js.map} +0 -0
- /package/dist/{operations-CAKIT2BO.js.map → operations-O4FORFIH.js.map} +0 -0
- /package/dist/{plan-PRORGS3L.js.map → plan-OXAT344Q.js.map} +0 -0
- /package/dist/{policy-WX6O2JID.js.map → policy-U5NBFAO5.js.map} +0 -0
- /package/dist/{pr-27RMQI5F.js.map → pr-UZHNKKZC.js.map} +0 -0
- /package/dist/{pr-review-VNESMAMT.js.map → pr-review-Q4ACAWDM.js.map} +0 -0
- /package/dist/{prd-ZNC4T5BS.js.map → prd-6CYEMLDY.js.map} +0 -0
- /package/dist/{recorder-N7U66HCO.js.map → recorder-2BAKPBRA.js.map} +0 -0
- /package/dist/{resume-VLWIE264.js.map → resume-URCU6CIJ.js.map} +0 -0
- /package/dist/{review-7CREJDKB.js.map → review-LVZT2TMW.js.map} +0 -0
- /package/dist/{routing-VCDYHSXA.js.map → routing-EK6RBZM4.js.map} +0 -0
- /package/dist/{run-3MPORLF5.js.map → run-2RXJCJKT.js.map} +0 -0
- /package/dist/{usage-U7QNGCPK.js.map → usage-KTMYXAPF.js.map} +0 -0
- /package/dist/{web-HUNDHCJ4.js.map → web-B5UPHHR5.js.map} +0 -0
|
@@ -3,15 +3,15 @@ import {
|
|
|
3
3
|
applyAcceptanceToPlan,
|
|
4
4
|
formatVerificationLine,
|
|
5
5
|
runAcceptanceGate
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-ECU7YO7S.js";
|
|
7
7
|
import {
|
|
8
8
|
issuePlaceholders,
|
|
9
9
|
resolveCommandIssue
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-SA6HXL4Y.js";
|
|
11
11
|
import {
|
|
12
12
|
publishPhaseMetrics,
|
|
13
13
|
resolvePolicyPlaceholders
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-KMCS76ZW.js";
|
|
15
15
|
import {
|
|
16
16
|
applyPlaceholders,
|
|
17
17
|
loadPrompt
|
|
@@ -19,10 +19,10 @@ import {
|
|
|
19
19
|
import {
|
|
20
20
|
DEFAULT_HEADLESS_TIMEOUT_MS,
|
|
21
21
|
runHeadless
|
|
22
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-TZYINKCC.js";
|
|
23
23
|
import {
|
|
24
24
|
resolveIssuePaths
|
|
25
|
-
} from "./chunk-
|
|
25
|
+
} from "./chunk-LI35PIIS.js";
|
|
26
26
|
import {
|
|
27
27
|
getGlobalTimeout,
|
|
28
28
|
printError,
|
|
@@ -163,4 +163,4 @@ async function runReview(issue, resolvedIssue) {
|
|
|
163
163
|
export {
|
|
164
164
|
runReview
|
|
165
165
|
};
|
|
166
|
-
//# sourceMappingURL=chunk-
|
|
166
|
+
//# sourceMappingURL=chunk-EG2MGDP5.js.map
|
|
@@ -4,14 +4,15 @@ import {
|
|
|
4
4
|
PRIORS_VERSION,
|
|
5
5
|
RECOMMENDED_POLICY_VERSION,
|
|
6
6
|
decideRouting
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-ZVZMWNCG.js";
|
|
8
8
|
import {
|
|
9
9
|
GLOBAL_CONFIG_FILENAME,
|
|
10
|
-
loadRoutingConfig
|
|
11
|
-
|
|
10
|
+
loadRoutingConfig,
|
|
11
|
+
probeReadinessInventory
|
|
12
|
+
} from "./chunk-QF7VEL3M.js";
|
|
12
13
|
import {
|
|
13
14
|
resolveIssuePaths
|
|
14
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-LI35PIIS.js";
|
|
15
16
|
import {
|
|
16
17
|
printError,
|
|
17
18
|
printInfo,
|
|
@@ -112,6 +113,7 @@ async function runRoutingReport(options) {
|
|
|
112
113
|
}
|
|
113
114
|
async function runRoutingExplain(options = {}) {
|
|
114
115
|
const config = await loadRoutingConfig();
|
|
116
|
+
const inventory = await probeReadinessInventory();
|
|
115
117
|
const phases = AGENT_PHASES.map((phase) => {
|
|
116
118
|
const decision = decideRouting({
|
|
117
119
|
phase,
|
|
@@ -119,21 +121,47 @@ async function runRoutingExplain(options = {}) {
|
|
|
119
121
|
actualProvider: "claude",
|
|
120
122
|
mode: config.mode === "off" ? "shadow" : config.mode,
|
|
121
123
|
profile: config.profile,
|
|
122
|
-
policy: config.policy
|
|
124
|
+
policy: config.policy,
|
|
125
|
+
readiness: inventory
|
|
123
126
|
});
|
|
127
|
+
const ranking = (decision?.candidates ?? []).filter((candidate) => candidate.eligible).slice(0, 5).map((candidate) => ({
|
|
128
|
+
harness: candidate.harness,
|
|
129
|
+
provider: candidate.provider,
|
|
130
|
+
model: candidate.model,
|
|
131
|
+
tier: candidate.tier,
|
|
132
|
+
score: candidate.score,
|
|
133
|
+
reasonCodes: candidate.reasonCodes
|
|
134
|
+
}));
|
|
124
135
|
return {
|
|
125
136
|
phase,
|
|
126
137
|
target: decision?.selected ?? null,
|
|
127
|
-
origin: config.policy === "recommended" ? "recommended policy" : "adaptive score"
|
|
138
|
+
origin: config.policy === "recommended" ? "recommended policy" : "adaptive score",
|
|
139
|
+
reasonCodes: decision?.reasonCodes ?? [],
|
|
140
|
+
ranking
|
|
128
141
|
};
|
|
129
142
|
});
|
|
130
143
|
if (options.json === true) {
|
|
131
144
|
console.log(
|
|
132
|
-
JSON.stringify(
|
|
145
|
+
JSON.stringify(
|
|
146
|
+
{
|
|
147
|
+
schemaVersion: ROUTING_COMMAND_SCHEMA_VERSION,
|
|
148
|
+
config,
|
|
149
|
+
inventory,
|
|
150
|
+
phases
|
|
151
|
+
},
|
|
152
|
+
null,
|
|
153
|
+
2
|
|
154
|
+
)
|
|
133
155
|
);
|
|
134
156
|
return 0;
|
|
135
157
|
}
|
|
136
158
|
printInfo(`routing policy: ${config.policy ?? "adaptive"} (${config.mode})`);
|
|
159
|
+
printInfo("inventory");
|
|
160
|
+
for (const provider of Object.values(inventory.providers)) {
|
|
161
|
+
printInfo(
|
|
162
|
+
` ${provider.provider.padEnd(12)} ${provider.state.padEnd(12)} auth=${provider.authentication} \xB7 ${provider.detail}`
|
|
163
|
+
);
|
|
164
|
+
}
|
|
137
165
|
for (const phase of phases) {
|
|
138
166
|
printInfo(
|
|
139
167
|
`${phase.phase.padEnd(12)} ${targetLabel(phase.target ?? void 0)} (${phase.origin})`
|
|
@@ -175,9 +203,14 @@ async function runRoutingUse(policy, options = {}) {
|
|
|
175
203
|
try {
|
|
176
204
|
const file = await writeRoutingPreference({
|
|
177
205
|
target: options.project === true ? "project" : "global",
|
|
178
|
-
values: {
|
|
206
|
+
values: {
|
|
207
|
+
policy: "recommended",
|
|
208
|
+
...options.active === true ? { mode: "active" } : {}
|
|
209
|
+
}
|
|
179
210
|
});
|
|
180
|
-
printSuccess(
|
|
211
|
+
printSuccess(
|
|
212
|
+
`Wrote recommended routing policy${options.active === true ? " in active mode" : ""} to ${file}`
|
|
213
|
+
);
|
|
181
214
|
return 0;
|
|
182
215
|
} catch (error) {
|
|
183
216
|
printError(error instanceof Error ? error.message : String(error));
|
|
@@ -193,4 +226,4 @@ export {
|
|
|
193
226
|
writeRoutingPreference,
|
|
194
227
|
runRoutingUse
|
|
195
228
|
};
|
|
196
|
-
//# sourceMappingURL=chunk-
|
|
229
|
+
//# sourceMappingURL=chunk-HOAHMERN.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/commands/routing.ts"],"sourcesContent":["import { mkdir, readFile } from 'node:fs/promises';\nimport { dirname, join } from 'node:path';\nimport { probeReadinessInventory } from '../agents/availability.js';\nimport { AGENT_PHASES } from '../agents/types.js';\nimport { GLOBAL_CONFIG_FILENAME, loadRoutingConfig } from '../config.js';\nimport { loadTaskPlan } from '../core/state-manager.js';\nimport { decideRouting } from '../routing/decide.js';\nimport { MODEL_CATALOG_VERSION } from '../routing/models.js';\nimport { RECOMMENDED_POLICY_VERSION } from '../routing/policy.js';\nimport { PRIORS_VERSION } from '../routing/priors.js';\nimport { type RoutingConfigInput, routingConfigInputSchema } from '../schemas.js';\nimport { getGlobalRoot } from '../storage/paths.js';\nimport { resolveIssuePaths } from '../storage/resolve.js';\nimport { printError, printInfo, printSuccess } from '../ui/logger.js';\nimport { writeFileAtomic } from '../utils/fs.js';\nimport { getProjectRoot } from '../utils/git.js';\n\nexport const ROUTING_COMMAND_SCHEMA_VERSION = 1;\n\nfunction targetLabel(\n target:\n | { harness: string; provider: string; model?: string | null; tier?: string }\n | string\n | undefined,\n): string {\n if (target === undefined) return '—';\n if (typeof target === 'string') return target;\n const tier = target.tier ? `:${target.tier}` : '';\n const model = target.model ? ` · ${target.model}` : '';\n return `${target.provider}${tier}${model}`;\n}\n\nfunction targetKey(\n target:\n | { harness: string; provider: string; model?: string | null; tier?: string }\n | string\n | undefined,\n): string {\n if (target === undefined) return '—';\n if (typeof target === 'string') return target;\n return `${target.harness}:${target.provider}:${target.model ?? ''}`;\n}\n\nexport async function runRoutingInspect(options: { json?: boolean }): Promise<number> {\n const config = await loadRoutingConfig();\n const sample = decideRouting({\n phase: 'execute',\n actualHarness: 'claude-code',\n mode: config.mode,\n profile: config.profile,\n });\n if (options.json === true) {\n console.log(\n JSON.stringify(\n {\n schemaVersion: ROUTING_COMMAND_SCHEMA_VERSION,\n priorsVersion: PRIORS_VERSION,\n modelCatalogVersion: MODEL_CATALOG_VERSION,\n recommendedPolicyVersion: RECOMMENDED_POLICY_VERSION,\n config,\n sample,\n },\n null,\n 2,\n ),\n );\n return 0;\n }\n printInfo(`routing.mode: ${config.mode} (default shadow — records, does not act)`);\n printInfo(`routing.profile: ${config.profile}`);\n if (sample) {\n printInfo(\n `sample selected=${targetLabel(sample.selected)} actual=${targetLabel(sample.actual)} class=${sample.taskClass}`,\n );\n }\n return 0;\n}\n\nexport async function runRoutingReport(options: {\n issue?: string;\n json?: boolean;\n}): Promise<number> {\n if (options.issue === undefined) {\n printInfo('Pass --issue N to compare selected vs actual on that plan.');\n return 0;\n }\n const paths = await resolveIssuePaths(options.issue);\n const plan = await loadTaskPlan(paths.tasksFile);\n const records = plan.executions ?? [];\n let agree = 0;\n let total = 0;\n for (const record of records) {\n const decision = record.routingDecision;\n if (decision === undefined || decision === null) continue;\n total += 1;\n if (targetKey(decision.selected) === targetKey(decision.actual)) agree += 1;\n }\n const rate = total === 0 ? 0 : agree / total;\n if (options.json === true) {\n console.log(\n JSON.stringify({ schemaVersion: ROUTING_COMMAND_SCHEMA_VERSION, total, agree, rate }),\n );\n return 0;\n }\n printInfo(`shadow agreement: ${agree}/${total} (${(rate * 100).toFixed(0)}%)`);\n return 0;\n}\n\nexport async function runRoutingExplain(options: { json?: boolean } = {}): Promise<number> {\n const config = await loadRoutingConfig();\n const inventory = await probeReadinessInventory();\n const phases = AGENT_PHASES.map((phase) => {\n const decision = decideRouting({\n phase,\n actualHarness: 'claude-code',\n actualProvider: 'claude',\n mode: config.mode === 'off' ? 'shadow' : config.mode,\n profile: config.profile,\n policy: config.policy,\n readiness: inventory,\n });\n const ranking = (decision?.candidates ?? [])\n .filter((candidate) => candidate.eligible)\n .slice(0, 5)\n .map((candidate) => ({\n harness: candidate.harness,\n provider: candidate.provider,\n model: candidate.model,\n tier: candidate.tier,\n score: candidate.score,\n reasonCodes: candidate.reasonCodes,\n }));\n return {\n phase,\n target: decision?.selected ?? null,\n origin: config.policy === 'recommended' ? 'recommended policy' : 'adaptive score',\n reasonCodes: decision?.reasonCodes ?? [],\n ranking,\n };\n });\n if (options.json === true) {\n console.log(\n JSON.stringify(\n {\n schemaVersion: ROUTING_COMMAND_SCHEMA_VERSION,\n config,\n inventory,\n phases,\n },\n null,\n 2,\n ),\n );\n return 0;\n }\n printInfo(`routing policy: ${config.policy ?? 'adaptive'} (${config.mode})`);\n printInfo('inventory');\n for (const provider of Object.values(inventory.providers)) {\n printInfo(\n ` ${provider.provider.padEnd(12)} ${provider.state.padEnd(12)} auth=${provider.authentication} · ${provider.detail}`,\n );\n }\n for (const phase of phases) {\n printInfo(\n `${phase.phase.padEnd(12)} ${targetLabel(phase.target ?? undefined)} (${phase.origin})`,\n );\n }\n return 0;\n}\n\nexport async function writeRoutingPreference(input: {\n target: 'global' | 'project';\n values: RoutingConfigInput;\n projectRoot?: string;\n}): Promise<string> {\n const parsed = routingConfigInputSchema.safeParse(input.values);\n if (!parsed.success || Object.keys(parsed.data).length === 0) {\n throw new Error(\n parsed.success\n ? 'At least one routing setting is required.'\n : `Invalid routing setting: ${parsed.error.issues[0]?.message ?? 'invalid value'}.`,\n );\n }\n const path =\n input.target === 'global'\n ? join(getGlobalRoot(), GLOBAL_CONFIG_FILENAME)\n : join(input.projectRoot ?? (await getProjectRoot()), '.issue-flow.json');\n let existing: Record<string, unknown> = {};\n try {\n const value: unknown = JSON.parse(await readFile(path, 'utf-8'));\n if (value !== null && typeof value === 'object' && !Array.isArray(value)) {\n existing = value as Record<string, unknown>;\n }\n } catch (error: unknown) {\n if ((error as NodeJS.ErrnoException).code !== 'ENOENT') {\n throw new Error(`Could not read ${path}: ${(error as Error).message}`);\n }\n }\n const current =\n existing.routing !== null &&\n typeof existing.routing === 'object' &&\n !Array.isArray(existing.routing)\n ? (existing.routing as Record<string, unknown>)\n : {};\n existing.routing = { ...current, ...parsed.data };\n await mkdir(dirname(path), { recursive: true });\n await writeFileAtomic(path, `${JSON.stringify(existing, null, 2)}\\n`);\n return path;\n}\n\nexport async function runRoutingUse(\n policy: string,\n options: { active?: boolean; global?: boolean; project?: boolean } = {},\n): Promise<number> {\n if (policy !== 'recommended') {\n printError(`Unknown routing policy '${policy}'. Valid policy: recommended.`);\n return 1;\n }\n try {\n const file = await writeRoutingPreference({\n target: options.project === true ? 'project' : 'global',\n values: {\n policy: 'recommended',\n ...(options.active === true ? { mode: 'active' as const } : {}),\n },\n });\n printSuccess(\n `Wrote recommended routing policy${options.active === true ? ' in active mode' : ''} to ${file}`,\n );\n return 0;\n } catch (error) {\n printError(error instanceof Error ? error.message : String(error));\n return 1;\n }\n}\n"],"mappings":"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","names":[]}
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
import {
|
|
3
3
|
DEFAULT_BRANCH_CONVENTION,
|
|
4
4
|
loadRepositoryPolicy
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-LGHND47K.js";
|
|
6
6
|
import {
|
|
7
7
|
loadPolicyConfig
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-QF7VEL3M.js";
|
|
9
9
|
import {
|
|
10
10
|
getBaseBranch
|
|
11
11
|
} from "./chunk-YVPZUN6X.js";
|
|
@@ -294,4 +294,4 @@ export {
|
|
|
294
294
|
publishStoryMetrics,
|
|
295
295
|
resolvePolicyPlaceholders
|
|
296
296
|
};
|
|
297
|
-
//# sourceMappingURL=chunk-
|
|
297
|
+
//# sourceMappingURL=chunk-KMCS76ZW.js.map
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
ensureWebMonitor
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-NEWNXZ65.js";
|
|
5
5
|
import {
|
|
6
6
|
applyAcceptanceToPlan,
|
|
7
7
|
resolveIssueDir,
|
|
8
8
|
runAcceptanceGate
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-ECU7YO7S.js";
|
|
10
10
|
import {
|
|
11
11
|
groupBy,
|
|
12
12
|
summarize
|
|
@@ -18,21 +18,21 @@ import {
|
|
|
18
18
|
publishIterationMetrics,
|
|
19
19
|
publishStoryMetrics,
|
|
20
20
|
resolvePolicyPlaceholders
|
|
21
|
-
} from "./chunk-
|
|
21
|
+
} from "./chunk-KMCS76ZW.js";
|
|
22
22
|
import {
|
|
23
23
|
applyPlaceholders,
|
|
24
24
|
loadPrompt
|
|
25
25
|
} from "./chunk-7F7LGMVO.js";
|
|
26
26
|
import {
|
|
27
27
|
invokeSelectedAgent
|
|
28
|
-
} from "./chunk-
|
|
28
|
+
} from "./chunk-TZYINKCC.js";
|
|
29
29
|
import {
|
|
30
30
|
getPackageVersion
|
|
31
31
|
} from "./chunk-C5TL7T4V.js";
|
|
32
32
|
import {
|
|
33
33
|
archiveFolderName,
|
|
34
34
|
commitMessage
|
|
35
|
-
} from "./chunk-
|
|
35
|
+
} from "./chunk-LGHND47K.js";
|
|
36
36
|
import {
|
|
37
37
|
createConfig,
|
|
38
38
|
getActiveResilienceConfig,
|
|
@@ -42,10 +42,10 @@ import {
|
|
|
42
42
|
resolveAgentFor,
|
|
43
43
|
resolvePaths,
|
|
44
44
|
validateDependencies
|
|
45
|
-
} from "./chunk-
|
|
45
|
+
} from "./chunk-QF7VEL3M.js";
|
|
46
46
|
import {
|
|
47
47
|
resolveIssuePaths
|
|
48
|
-
} from "./chunk-
|
|
48
|
+
} from "./chunk-LI35PIIS.js";
|
|
49
49
|
import {
|
|
50
50
|
formatDuration,
|
|
51
51
|
getIcons,
|
|
@@ -1019,4 +1019,4 @@ export {
|
|
|
1019
1019
|
stripMarkdown,
|
|
1020
1020
|
runExecute
|
|
1021
1021
|
};
|
|
1022
|
-
//# sourceMappingURL=chunk-
|
|
1022
|
+
//# sourceMappingURL=chunk-KRAGAUKD.js.map
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
import {
|
|
3
3
|
loadPolicyConfig,
|
|
4
4
|
mergeConfigLayers
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-QF7VEL3M.js";
|
|
6
6
|
import {
|
|
7
7
|
printWarning
|
|
8
8
|
} from "./chunk-XZUEFTUP.js";
|
|
@@ -1559,4 +1559,4 @@ export {
|
|
|
1559
1559
|
issueReferenceLines,
|
|
1560
1560
|
loadRepositoryPolicy
|
|
1561
1561
|
};
|
|
1562
|
-
//# sourceMappingURL=chunk-
|
|
1562
|
+
//# sourceMappingURL=chunk-LGHND47K.js.map
|
|
@@ -19,7 +19,7 @@ import {
|
|
|
19
19
|
} from "./chunk-YVPZUN6X.js";
|
|
20
20
|
import {
|
|
21
21
|
bindTelemetry
|
|
22
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-6K2LCFG6.js";
|
|
23
23
|
import {
|
|
24
24
|
isoNow
|
|
25
25
|
} from "./chunk-SOM4QA6C.js";
|
|
@@ -280,4 +280,4 @@ export {
|
|
|
280
280
|
resolveQueuePaths,
|
|
281
281
|
resolveIssuePaths
|
|
282
282
|
};
|
|
283
|
-
//# sourceMappingURL=chunk-
|
|
283
|
+
//# sourceMappingURL=chunk-LI35PIIS.js.map
|
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
import {
|
|
6
6
|
publishPhaseMetrics,
|
|
7
7
|
resolvePolicyPlaceholders
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-KMCS76ZW.js";
|
|
9
9
|
import {
|
|
10
10
|
applyPlaceholders,
|
|
11
11
|
loadPrompt
|
|
@@ -13,13 +13,13 @@ import {
|
|
|
13
13
|
import {
|
|
14
14
|
DEFAULT_HEADLESS_TIMEOUT_MS,
|
|
15
15
|
runHeadless
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-TZYINKCC.js";
|
|
17
17
|
import {
|
|
18
18
|
loadPrReviewConfig
|
|
19
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-QF7VEL3M.js";
|
|
20
20
|
import {
|
|
21
21
|
resolveIssuePaths
|
|
22
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-LI35PIIS.js";
|
|
23
23
|
import {
|
|
24
24
|
getGlobalTimeout,
|
|
25
25
|
printError,
|
|
@@ -802,4 +802,4 @@ export {
|
|
|
802
802
|
exitCodeFor,
|
|
803
803
|
runPrReview
|
|
804
804
|
};
|
|
805
|
-
//# sourceMappingURL=chunk-
|
|
805
|
+
//# sourceMappingURL=chunk-LTH6XYZ3.js.map
|
|
@@ -1,23 +1,23 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
writeAgentPreference
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-45WZ6GMI.js";
|
|
5
5
|
import {
|
|
6
6
|
writeRoutingPreference
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-HOAHMERN.js";
|
|
8
8
|
import {
|
|
9
9
|
resolvePackageDir
|
|
10
10
|
} from "./chunk-7F7LGMVO.js";
|
|
11
11
|
import {
|
|
12
12
|
MODEL_CATALOG
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-ZVZMWNCG.js";
|
|
14
14
|
import {
|
|
15
15
|
getPackageVersion
|
|
16
16
|
} from "./chunk-C5TL7T4V.js";
|
|
17
17
|
import {
|
|
18
18
|
loadRoutingConfig,
|
|
19
19
|
probeAgent
|
|
20
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-QF7VEL3M.js";
|
|
21
21
|
import {
|
|
22
22
|
printInfo,
|
|
23
23
|
printWarning
|
|
@@ -315,13 +315,22 @@ async function startWebServer(options) {
|
|
|
315
315
|
effective: snapshot?.configuration ?? null,
|
|
316
316
|
capturedForSession: snapshot?.sessionId ?? null,
|
|
317
317
|
routing: await loadRoutingConfig(),
|
|
318
|
-
catalog: harnesses.map((harness, index) =>
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
318
|
+
catalog: harnesses.map((harness, index) => {
|
|
319
|
+
const entry = availability[index];
|
|
320
|
+
return {
|
|
321
|
+
harness,
|
|
322
|
+
provider: providers[index],
|
|
323
|
+
installed: entry?.installed ?? false,
|
|
324
|
+
authenticated: entry?.authenticated ?? false,
|
|
325
|
+
authentication: entry?.authentication ?? "failed",
|
|
326
|
+
state: entry?.state ?? "unavailable",
|
|
327
|
+
source: entry?.source ?? "probe",
|
|
328
|
+
observedAt: entry?.observedAt ?? null,
|
|
329
|
+
expiresAt: entry?.expiresAt ?? null,
|
|
330
|
+
detail: entry?.detail ?? null,
|
|
331
|
+
models: MODEL_CATALOG[harness] ?? []
|
|
332
|
+
};
|
|
333
|
+
}),
|
|
325
334
|
writable: isLoopbackHost(options.host),
|
|
326
335
|
writeScope: "global preferences for future executions"
|
|
327
336
|
});
|
|
@@ -930,4 +939,4 @@ export {
|
|
|
930
939
|
stopWebMonitor,
|
|
931
940
|
ensureWebMonitor
|
|
932
941
|
};
|
|
933
|
-
//# sourceMappingURL=chunk-
|
|
942
|
+
//# sourceMappingURL=chunk-NEWNXZ65.js.map
|