@jcr-adk/cli 2.0.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/LICENSE +201 -0
- package/bin/jcr-adk.mjs +8 -0
- package/dist/argv.d.ts +10 -0
- package/dist/argv.d.ts.map +1 -0
- package/dist/argv.js +56 -0
- package/dist/argv.js.map +1 -0
- package/dist/audit-summary.d.ts +28 -0
- package/dist/audit-summary.d.ts.map +1 -0
- package/dist/audit-summary.js +39 -0
- package/dist/audit-summary.js.map +1 -0
- package/dist/commands/audit.d.ts +8 -0
- package/dist/commands/audit.d.ts.map +1 -0
- package/dist/commands/audit.js +20 -0
- package/dist/commands/audit.js.map +1 -0
- package/dist/commands/doctor.d.ts +8 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +25 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/explain-fail.d.ts +8 -0
- package/dist/commands/explain-fail.d.ts.map +1 -0
- package/dist/commands/explain-fail.js +41 -0
- package/dist/commands/explain-fail.js.map +1 -0
- package/dist/commands/gate.d.ts +8 -0
- package/dist/commands/gate.d.ts.map +1 -0
- package/dist/commands/gate.js +104 -0
- package/dist/commands/gate.js.map +1 -0
- package/dist/commands/handoff.d.ts +8 -0
- package/dist/commands/handoff.d.ts.map +1 -0
- package/dist/commands/handoff.js +61 -0
- package/dist/commands/handoff.js.map +1 -0
- package/dist/commands/init.d.ts +8 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +48 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/plan.d.ts +8 -0
- package/dist/commands/plan.d.ts.map +1 -0
- package/dist/commands/plan.js +55 -0
- package/dist/commands/plan.js.map +1 -0
- package/dist/commands/replay.d.ts +8 -0
- package/dist/commands/replay.d.ts.map +1 -0
- package/dist/commands/replay.js +39 -0
- package/dist/commands/replay.js.map +1 -0
- package/dist/commands/review-pack.d.ts +8 -0
- package/dist/commands/review-pack.d.ts.map +1 -0
- package/dist/commands/review-pack.js +64 -0
- package/dist/commands/review-pack.js.map +1 -0
- package/dist/commands/run.d.ts +8 -0
- package/dist/commands/run.d.ts.map +1 -0
- package/dist/commands/run.js +205 -0
- package/dist/commands/run.js.map +1 -0
- package/dist/commands/sync.d.ts +8 -0
- package/dist/commands/sync.d.ts.map +1 -0
- package/dist/commands/sync.js +133 -0
- package/dist/commands/sync.js.map +1 -0
- package/dist/commands/tool.d.ts +12 -0
- package/dist/commands/tool.d.ts.map +1 -0
- package/dist/commands/tool.js +154 -0
- package/dist/commands/tool.js.map +1 -0
- package/dist/event-reader.d.ts +28 -0
- package/dist/event-reader.d.ts.map +1 -0
- package/dist/event-reader.js +39 -0
- package/dist/event-reader.js.map +1 -0
- package/dist/explain-fail-summary.d.ts +46 -0
- package/dist/explain-fail-summary.d.ts.map +1 -0
- package/dist/explain-fail-summary.js +405 -0
- package/dist/explain-fail-summary.js.map +1 -0
- package/dist/handlers.d.ts +134 -0
- package/dist/handlers.d.ts.map +1 -0
- package/dist/handlers.js +257 -0
- package/dist/handlers.js.map +1 -0
- package/dist/handoff-summary.d.ts +62 -0
- package/dist/handoff-summary.d.ts.map +1 -0
- package/dist/handoff-summary.js +170 -0
- package/dist/handoff-summary.js.map +1 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/lifecycle-artifacts.d.ts +62 -0
- package/dist/lifecycle-artifacts.d.ts.map +1 -0
- package/dist/lifecycle-artifacts.js +160 -0
- package/dist/lifecycle-artifacts.js.map +1 -0
- package/dist/main.d.ts +30 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +159 -0
- package/dist/main.js.map +1 -0
- package/dist/permissions.d.ts +42 -0
- package/dist/permissions.d.ts.map +1 -0
- package/dist/permissions.js +57 -0
- package/dist/permissions.js.map +1 -0
- package/dist/replay-summary.d.ts +28 -0
- package/dist/replay-summary.d.ts.map +1 -0
- package/dist/replay-summary.js +73 -0
- package/dist/replay-summary.js.map +1 -0
- package/dist/review-pack-summary.d.ts +67 -0
- package/dist/review-pack-summary.d.ts.map +1 -0
- package/dist/review-pack-summary.js +199 -0
- package/dist/review-pack-summary.js.map +1 -0
- package/dist/session-run.d.ts +62 -0
- package/dist/session-run.d.ts.map +1 -0
- package/dist/session-run.js +112 -0
- package/dist/session-run.js.map +1 -0
- package/dist/session.d.ts +24 -0
- package/dist/session.d.ts.map +1 -0
- package/dist/session.js +37 -0
- package/dist/session.js.map +1 -0
- package/package.json +41 -0
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ParsedArgv } from "../argv.js";
|
|
2
|
+
export interface HandoffCommandResult {
|
|
3
|
+
readonly exitCode: number;
|
|
4
|
+
readonly output: string;
|
|
5
|
+
}
|
|
6
|
+
/** `jcr-adk handoff <specId>` — read-only handoff package (DAC-006). */
|
|
7
|
+
export declare function runHandoffCommand(parsed: ParsedArgv): Promise<HandoffCommandResult>;
|
|
8
|
+
//# sourceMappingURL=handoff.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handoff.d.ts","sourceRoot":"","sources":["../../src/commands/handoff.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAK7C,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,wEAAwE;AACxE,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAqEzF"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { join } from "node:path";
|
|
2
|
+
import { flagBoolean, flagString } from "../argv.js";
|
|
3
|
+
import { runHandoffHandler } from "../handlers.js";
|
|
4
|
+
import { loadWorkspaceConfig, writeJsonArtifact, writeTextArtifact } from "../lifecycle-artifacts.js";
|
|
5
|
+
/** `jcr-adk handoff <specId>` — read-only handoff package (DAC-006). */
|
|
6
|
+
export async function runHandoffCommand(parsed) {
|
|
7
|
+
const workspaceRoot = flagString(parsed.flags, "workspace", "w") ?? process.cwd();
|
|
8
|
+
const specId = flagString(parsed.flags, "spec-id", "s") ?? parsed.positional[0];
|
|
9
|
+
const writeArtifacts = flagBoolean(parsed.flags, "write");
|
|
10
|
+
const includeMarkdown = flagBoolean(parsed.flags, "markdown") || flagBoolean(parsed.flags, "m");
|
|
11
|
+
if (!specId) {
|
|
12
|
+
return {
|
|
13
|
+
exitCode: 2,
|
|
14
|
+
output: "usage: jcr-adk handoff <specId> [--workspace <path>] [--write] [--markdown]",
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
const result = await runHandoffHandler({ workspaceRoot, specId });
|
|
18
|
+
if (!result.ok) {
|
|
19
|
+
const reason = result.reason === "READ_ERROR"
|
|
20
|
+
? "event log is corrupt or unreadable (fail-closed)"
|
|
21
|
+
: result.reason === "ARTIFACT_READ_ERROR"
|
|
22
|
+
? "spec artifact is corrupt or unreadable (fail-closed)"
|
|
23
|
+
: result.reason === "SPEC_NOT_FOUND"
|
|
24
|
+
? "spec artifacts not found (fail-closed)"
|
|
25
|
+
: "handoff failed (fail-closed)";
|
|
26
|
+
return {
|
|
27
|
+
exitCode: 1,
|
|
28
|
+
output: JSON.stringify({
|
|
29
|
+
ok: false,
|
|
30
|
+
command: "handoff",
|
|
31
|
+
specId,
|
|
32
|
+
reason,
|
|
33
|
+
...(result.error !== undefined ? { error: result.error } : {}),
|
|
34
|
+
}, null, 2),
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
const writtenPaths = [];
|
|
38
|
+
if (writeArtifacts && result.package) {
|
|
39
|
+
const config = await loadWorkspaceConfig(workspaceRoot);
|
|
40
|
+
const handoffDir = join(config.adkDir, "handoffs");
|
|
41
|
+
const jsonPath = join(handoffDir, `handoff-${specId}.json`);
|
|
42
|
+
await writeJsonArtifact(jsonPath, result.package, true);
|
|
43
|
+
writtenPaths.push(jsonPath);
|
|
44
|
+
if (includeMarkdown && result.markdown) {
|
|
45
|
+
const mdPath = join(handoffDir, `handoff-${specId}.md`);
|
|
46
|
+
await writeTextArtifact(mdPath, result.markdown, true);
|
|
47
|
+
writtenPaths.push(mdPath);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return {
|
|
51
|
+
exitCode: 0,
|
|
52
|
+
output: JSON.stringify({
|
|
53
|
+
ok: true,
|
|
54
|
+
command: "handoff",
|
|
55
|
+
package: result.package,
|
|
56
|
+
...(includeMarkdown && result.markdown ? { markdown: result.markdown } : {}),
|
|
57
|
+
...(writtenPaths.length > 0 ? { writtenPaths } : {}),
|
|
58
|
+
}, null, 2),
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=handoff.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handoff.js","sourceRoot":"","sources":["../../src/commands/handoff.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ParsedArgv } from "../argv.js";
|
|
2
|
+
export interface InitCommandResult {
|
|
3
|
+
readonly exitCode: number;
|
|
4
|
+
readonly output: string;
|
|
5
|
+
}
|
|
6
|
+
/** `jcr-adk init` — scaffold `.jcr-adk` layout. */
|
|
7
|
+
export declare function runInitCommand(parsed: ParsedArgv): Promise<InitCommandResult>;
|
|
8
|
+
//# sourceMappingURL=init.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAU7C,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,mDAAmD;AACnD,wBAAsB,cAAc,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA4CnF"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { writeFile } from "node:fs/promises";
|
|
2
|
+
import { flagBoolean, flagString } from "../argv.js";
|
|
3
|
+
import { buildInitConfigFile, ensureDir, pathExists, resolveInitPaths, writeJsonArtifact, } from "../lifecycle-artifacts.js";
|
|
4
|
+
/** `jcr-adk init` — scaffold `.jcr-adk` layout. */
|
|
5
|
+
export async function runInitCommand(parsed) {
|
|
6
|
+
const workspaceRoot = flagString(parsed.flags, "workspace", "w") ?? process.cwd();
|
|
7
|
+
const projectId = flagString(parsed.flags, "project-id");
|
|
8
|
+
const force = flagBoolean(parsed.flags, "force");
|
|
9
|
+
const paths = resolveInitPaths(workspaceRoot);
|
|
10
|
+
const created = [];
|
|
11
|
+
const existing = [];
|
|
12
|
+
const configExists = await pathExists(paths.configFile);
|
|
13
|
+
if (configExists && !force) {
|
|
14
|
+
existing.push(paths.configFile);
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
const config = buildInitConfigFile(projectId);
|
|
18
|
+
if (configExists && force) {
|
|
19
|
+
await writeFile(paths.configFile, `${JSON.stringify(config, null, 2)}\n`, "utf8");
|
|
20
|
+
created.push(paths.configFile);
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
const outcome = await writeJsonArtifact(paths.configFile, config, true);
|
|
24
|
+
if (outcome === "created" || outcome === "written")
|
|
25
|
+
created.push(paths.configFile);
|
|
26
|
+
else
|
|
27
|
+
existing.push(paths.configFile);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
for (const dir of [paths.specsDir, paths.logsDir, paths.gateReportsDir]) {
|
|
31
|
+
const wasNew = await ensureDir(dir);
|
|
32
|
+
if (wasNew)
|
|
33
|
+
created.push(dir);
|
|
34
|
+
else
|
|
35
|
+
existing.push(dir);
|
|
36
|
+
}
|
|
37
|
+
const ok = created.length > 0 || existing.length > 0;
|
|
38
|
+
return {
|
|
39
|
+
exitCode: ok ? 0 : 1,
|
|
40
|
+
output: JSON.stringify({
|
|
41
|
+
ok,
|
|
42
|
+
workspaceRoot,
|
|
43
|
+
created,
|
|
44
|
+
existing,
|
|
45
|
+
}, null, 2),
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EACL,mBAAmB,EACnB,SAAS,EACT,UAAU,EACV,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,2BAA2B,CAAC;AAOnC,mDAAmD;AACnD,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,MAAkB;IACrD,MAAM,aAAa,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,CAAC,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAClF,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;IACzD,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IAEjD,MAAM,KAAK,GAAG,gBAAgB,CAAC,aAAa,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,QAAQ,GAAa,EAAE,CAAC;IAE9B,MAAM,YAAY,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACxD,IAAI,YAAY,IAAI,CAAC,KAAK,EAAE,CAAC;QAC3B,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAClC,CAAC;SAAM,CAAC;QACN,MAAM,MAAM,GAAG,mBAAmB,CAAC,SAAS,CAAC,CAAC;QAC9C,IAAI,YAAY,IAAI,KAAK,EAAE,CAAC;YAC1B,MAAM,SAAS,CAAC,KAAK,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YAClF,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACjC,CAAC;aAAM,CAAC;YACN,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,KAAK,CAAC,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;YACxE,IAAI,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,SAAS;gBAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;;gBAC9E,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IAED,KAAK,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,cAAc,CAAC,EAAE,CAAC;QACxE,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC,CAAC;QACpC,IAAI,MAAM;YAAE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;;YACzB,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC1B,CAAC;IAED,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;IACrD,OAAO;QACL,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACpB,MAAM,EAAE,IAAI,CAAC,SAAS,CACpB;YACE,EAAE;YACF,aAAa;YACb,OAAO;YACP,QAAQ;SACT,EACD,IAAI,EACJ,CAAC,CACF;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ParsedArgv } from "../argv.js";
|
|
2
|
+
export interface PlanCommandResult {
|
|
3
|
+
readonly exitCode: number;
|
|
4
|
+
readonly output: string;
|
|
5
|
+
}
|
|
6
|
+
/** `jcr-adk plan` — template-based SPEC/PLAN/AC/metadata scaffold. */
|
|
7
|
+
export declare function runPlanCommand(parsed: ParsedArgv): Promise<PlanCommandResult>;
|
|
8
|
+
//# sourceMappingURL=plan.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../src/commands/plan.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAa7C,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAWD,sEAAsE;AACtE,wBAAsB,cAAc,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA8DnF"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { readFile } from "node:fs/promises";
|
|
2
|
+
import { generateSpecId } from "@jcr-adk/core";
|
|
3
|
+
import { flagBoolean, flagString } from "../argv.js";
|
|
4
|
+
import { buildPlanAcceptanceJson, buildPlanMarkdown, buildPlannedMetadata, buildPlanSpecMarkdown, loadWorkspaceConfig, resolveSpecArtifactPaths, writeJsonArtifact, writeTextArtifact, } from "../lifecycle-artifacts.js";
|
|
5
|
+
async function resolveIntent(parsed) {
|
|
6
|
+
const inline = flagString(parsed.flags, "intent");
|
|
7
|
+
const filePath = flagString(parsed.flags, "intent-file");
|
|
8
|
+
if (filePath) {
|
|
9
|
+
return (await readFile(filePath, "utf8")).trim();
|
|
10
|
+
}
|
|
11
|
+
return inline?.trim() || undefined;
|
|
12
|
+
}
|
|
13
|
+
/** `jcr-adk plan` — template-based SPEC/PLAN/AC/metadata scaffold. */
|
|
14
|
+
export async function runPlanCommand(parsed) {
|
|
15
|
+
const workspaceRoot = flagString(parsed.flags, "workspace", "w") ?? process.cwd();
|
|
16
|
+
const specId = flagString(parsed.flags, "spec-id") ?? generateSpecId();
|
|
17
|
+
const title = flagString(parsed.flags, "title") ?? specId;
|
|
18
|
+
const force = flagBoolean(parsed.flags, "force");
|
|
19
|
+
try {
|
|
20
|
+
const config = await loadWorkspaceConfig(workspaceRoot);
|
|
21
|
+
const paths = resolveSpecArtifactPaths(config, specId);
|
|
22
|
+
const intent = await resolveIntent(parsed);
|
|
23
|
+
const artifacts = {};
|
|
24
|
+
const created = [];
|
|
25
|
+
const existing = [];
|
|
26
|
+
const specOutcome = await writeTextArtifact(paths.specMd, buildPlanSpecMarkdown(specId, title, intent), force);
|
|
27
|
+
artifacts.specMd = paths.specMd;
|
|
28
|
+
(specOutcome === "existing" ? existing : created).push(paths.specMd);
|
|
29
|
+
const planOutcome = await writeTextArtifact(paths.planMd, buildPlanMarkdown(specId), force);
|
|
30
|
+
artifacts.planMd = paths.planMd;
|
|
31
|
+
(planOutcome === "existing" ? existing : created).push(paths.planMd);
|
|
32
|
+
const acceptanceOutcome = await writeJsonArtifact(paths.acceptanceJson, buildPlanAcceptanceJson(specId), force);
|
|
33
|
+
artifacts.acceptanceJson = paths.acceptanceJson;
|
|
34
|
+
(acceptanceOutcome === "existing" ? existing : created).push(paths.acceptanceJson);
|
|
35
|
+
const metadataOutcome = await writeJsonArtifact(paths.metadataJson, buildPlannedMetadata(specId), force);
|
|
36
|
+
artifacts.metadataJson = paths.metadataJson;
|
|
37
|
+
(metadataOutcome === "existing" ? existing : created).push(paths.metadataJson);
|
|
38
|
+
return {
|
|
39
|
+
exitCode: 0,
|
|
40
|
+
output: JSON.stringify({
|
|
41
|
+
ok: true,
|
|
42
|
+
workspaceRoot,
|
|
43
|
+
specId,
|
|
44
|
+
status: "planned",
|
|
45
|
+
artifacts,
|
|
46
|
+
created,
|
|
47
|
+
existing,
|
|
48
|
+
}, null, 2),
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
catch (err) {
|
|
52
|
+
return { exitCode: 1, output: String(err) };
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=plan.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan.js","sourceRoot":"","sources":["../../src/commands/plan.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ParsedArgv } from "../argv.js";
|
|
2
|
+
export interface ReplayCommandResult {
|
|
3
|
+
readonly exitCode: number;
|
|
4
|
+
readonly output: string;
|
|
5
|
+
}
|
|
6
|
+
/** `jcr-adk replay <runId>` — read-only JSONL replay summary (SR-09). */
|
|
7
|
+
export declare function runReplayCommand(parsed: ParsedArgv): Promise<ReplayCommandResult>;
|
|
8
|
+
//# sourceMappingURL=replay.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"replay.d.ts","sourceRoot":"","sources":["../../src/commands/replay.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAI7C,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,yEAAyE;AACzE,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,mBAAmB,CAAC,CA+CvF"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { flagString } from "../argv.js";
|
|
2
|
+
import { runReplayHandler } from "../handlers.js";
|
|
3
|
+
/** `jcr-adk replay <runId>` — read-only JSONL replay summary (SR-09). */
|
|
4
|
+
export async function runReplayCommand(parsed) {
|
|
5
|
+
const workspaceRoot = flagString(parsed.flags, "workspace", "w") ?? process.cwd();
|
|
6
|
+
const runId = flagString(parsed.flags, "run-id") ?? parsed.positional[0];
|
|
7
|
+
const specId = flagString(parsed.flags, "spec-id", "s");
|
|
8
|
+
if (!runId) {
|
|
9
|
+
return {
|
|
10
|
+
exitCode: 2,
|
|
11
|
+
output: "usage: jcr-adk replay <runId> [--spec-id <id>] [--workspace <path>]",
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
const result = await runReplayHandler({ workspaceRoot, runId, specId });
|
|
15
|
+
if (!result.ok) {
|
|
16
|
+
const reason = result.reason === "READ_ERROR"
|
|
17
|
+
? "event log is corrupt or unreadable (fail-closed)"
|
|
18
|
+
: "no events found for runId (fail-closed)";
|
|
19
|
+
return {
|
|
20
|
+
exitCode: 1,
|
|
21
|
+
output: JSON.stringify({
|
|
22
|
+
ok: false,
|
|
23
|
+
command: "replay",
|
|
24
|
+
runId,
|
|
25
|
+
reason,
|
|
26
|
+
...(result.error !== undefined ? { error: result.error } : {}),
|
|
27
|
+
}, null, 2),
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
return {
|
|
31
|
+
exitCode: 0,
|
|
32
|
+
output: JSON.stringify({
|
|
33
|
+
ok: true,
|
|
34
|
+
command: "replay",
|
|
35
|
+
summary: result.summary,
|
|
36
|
+
}, null, 2),
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=replay.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"replay.js","sourceRoot":"","sources":["../../src/commands/replay.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAOlD,yEAAyE;AACzE,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,MAAkB;IACvD,MAAM,aAAa,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,WAAW,EAAE,GAAG,CAAC,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAClF,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IACzE,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,EAAE,GAAG,CAAC,CAAC;IAExD,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO;YACL,QAAQ,EAAE,CAAC;YACX,MAAM,EAAE,qEAAqE;SAC9E,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;IAExE,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,MAAM,MAAM,GACV,MAAM,CAAC,MAAM,KAAK,YAAY;YAC5B,CAAC,CAAC,kDAAkD;YACpD,CAAC,CAAC,yCAAyC,CAAC;QAChD,OAAO;YACL,QAAQ,EAAE,CAAC;YACX,MAAM,EAAE,IAAI,CAAC,SAAS,CACpB;gBACE,EAAE,EAAE,KAAK;gBACT,OAAO,EAAE,QAAQ;gBACjB,KAAK;gBACL,MAAM;gBACN,GAAG,CAAC,MAAM,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC/D,EACD,IAAI,EACJ,CAAC,CACF;SACF,CAAC;IACJ,CAAC;IAED,OAAO;QACL,QAAQ,EAAE,CAAC;QACX,MAAM,EAAE,IAAI,CAAC,SAAS,CACpB;YACE,EAAE,EAAE,IAAI;YACR,OAAO,EAAE,QAAQ;YACjB,OAAO,EAAE,MAAM,CAAC,OAAO;SACxB,EACD,IAAI,EACJ,CAAC,CACF;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ParsedArgv } from "../argv.js";
|
|
2
|
+
export interface ReviewPackCommandResult {
|
|
3
|
+
readonly exitCode: number;
|
|
4
|
+
readonly output: string;
|
|
5
|
+
}
|
|
6
|
+
/** `jcr-adk review-pack <specId>` — read-only reviewer evidence bundle (DAC-007). */
|
|
7
|
+
export declare function runReviewPackCommand(parsed: ParsedArgv): Promise<ReviewPackCommandResult>;
|
|
8
|
+
//# sourceMappingURL=review-pack.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review-pack.d.ts","sourceRoot":"","sources":["../../src/commands/review-pack.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAK7C,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,qFAAqF;AACrF,wBAAsB,oBAAoB,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAwE/F"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { mkdir, writeFile } from "node:fs/promises";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { flagBoolean, flagString } from "../argv.js";
|
|
4
|
+
import { runReviewPackHandler } from "../handlers.js";
|
|
5
|
+
import { loadWorkspaceConfig } from "../lifecycle-artifacts.js";
|
|
6
|
+
/** `jcr-adk review-pack <specId>` — read-only reviewer evidence bundle (DAC-007). */
|
|
7
|
+
export async function runReviewPackCommand(parsed) {
|
|
8
|
+
const workspaceRoot = flagString(parsed.flags, "workspace", "w") ?? process.cwd();
|
|
9
|
+
const specId = flagString(parsed.flags, "spec-id", "s") ?? parsed.positional[0];
|
|
10
|
+
const writeArtifacts = flagBoolean(parsed.flags, "write");
|
|
11
|
+
const includeMarkdown = flagBoolean(parsed.flags, "markdown") || flagBoolean(parsed.flags, "m");
|
|
12
|
+
if (!specId) {
|
|
13
|
+
return {
|
|
14
|
+
exitCode: 2,
|
|
15
|
+
output: "usage: jcr-adk review-pack <specId> [--workspace <path>] [--write] [--markdown]",
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
const result = await runReviewPackHandler({ workspaceRoot, specId });
|
|
19
|
+
if (!result.ok) {
|
|
20
|
+
const reason = result.reason === "READ_ERROR"
|
|
21
|
+
? "event log is corrupt or unreadable (fail-closed)"
|
|
22
|
+
: result.reason === "ARTIFACT_READ_ERROR"
|
|
23
|
+
? "spec artifact is corrupt or unreadable (fail-closed)"
|
|
24
|
+
: result.reason === "SPEC_NOT_FOUND"
|
|
25
|
+
? "spec artifacts not found (fail-closed)"
|
|
26
|
+
: "review-pack failed (fail-closed)";
|
|
27
|
+
return {
|
|
28
|
+
exitCode: 1,
|
|
29
|
+
output: JSON.stringify({
|
|
30
|
+
ok: false,
|
|
31
|
+
command: "review-pack",
|
|
32
|
+
specId,
|
|
33
|
+
reason,
|
|
34
|
+
...(result.error !== undefined ? { error: result.error } : {}),
|
|
35
|
+
}, null, 2),
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
const writtenPaths = [];
|
|
39
|
+
let bundleDir;
|
|
40
|
+
if (writeArtifacts && result.bundle) {
|
|
41
|
+
const config = await loadWorkspaceConfig(workspaceRoot);
|
|
42
|
+
bundleDir = join(config.adkDir, "review-packs", `review-pack-${specId}`);
|
|
43
|
+
await mkdir(bundleDir, { recursive: true });
|
|
44
|
+
const jsonPath = join(bundleDir, "bundle.json");
|
|
45
|
+
await writeFile(jsonPath, `${JSON.stringify(result.bundle, null, 2)}\n`, "utf8");
|
|
46
|
+
writtenPaths.push(jsonPath);
|
|
47
|
+
if (result.markdown) {
|
|
48
|
+
const mdPath = join(bundleDir, "README.md");
|
|
49
|
+
await writeFile(mdPath, result.markdown.endsWith("\n") ? result.markdown : `${result.markdown}\n`, "utf8");
|
|
50
|
+
writtenPaths.push(mdPath);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
return {
|
|
54
|
+
exitCode: 0,
|
|
55
|
+
output: JSON.stringify({
|
|
56
|
+
ok: true,
|
|
57
|
+
command: "review-pack",
|
|
58
|
+
bundle: result.bundle,
|
|
59
|
+
...(includeMarkdown && result.markdown ? { markdown: result.markdown } : {}),
|
|
60
|
+
...(bundleDir ? { bundleDir, writtenPaths } : {}),
|
|
61
|
+
}, null, 2),
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=review-pack.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review-pack.js","sourceRoot":"","sources":["../../src/commands/review-pack.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ParsedArgv } from "../argv.js";
|
|
2
|
+
export interface RunCommandResult {
|
|
3
|
+
readonly exitCode: number;
|
|
4
|
+
readonly output: string;
|
|
5
|
+
}
|
|
6
|
+
/** `jcr-adk run` — guarded SDK runner (live) or dry-run mock pipeline. */
|
|
7
|
+
export declare function runRunCommand(parsed: ParsedArgv, env?: Record<string, string | undefined>): Promise<RunCommandResult>;
|
|
8
|
+
//# sourceMappingURL=run.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAS7C,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AA6CD,0EAA0E;AAC1E,wBAAsB,aAAa,CACjC,MAAM,EAAE,UAAU,EAClB,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAe,GACpD,OAAO,CAAC,gBAAgB,CAAC,CAiM3B"}
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
import { readFile } from "node:fs/promises";
|
|
2
|
+
import { randomUUID } from "node:crypto";
|
|
3
|
+
import { createCorrelationIds, generateRunId } from "@jcr-adk/core";
|
|
4
|
+
import { isLiveSdkAvailable, resolveCursorApiKey } from "@jcr-adk/runner-sdk";
|
|
5
|
+
import { runGuardedCursorAgent } from "@jcr-adk/runtime";
|
|
6
|
+
import { flagBoolean, flagString } from "../argv.js";
|
|
7
|
+
import { createCliSession } from "../session.js";
|
|
8
|
+
import { clearCurrentRunSession, markRunSessionBlocked, markRunSessionCompleted, } from "../session-run.js";
|
|
9
|
+
async function resolvePrompt(parsed) {
|
|
10
|
+
const inline = flagString(parsed.flags, "prompt");
|
|
11
|
+
const filePath = flagString(parsed.flags, "prompt-file");
|
|
12
|
+
if (filePath) {
|
|
13
|
+
return (await readFile(filePath, "utf8")).trim();
|
|
14
|
+
}
|
|
15
|
+
return inline?.trim() || undefined;
|
|
16
|
+
}
|
|
17
|
+
function flagPositiveInteger(parsed, key) {
|
|
18
|
+
const value = flagString(parsed.flags, key);
|
|
19
|
+
if (value === undefined)
|
|
20
|
+
return undefined;
|
|
21
|
+
const parsedValue = Number(value);
|
|
22
|
+
if (!Number.isInteger(parsedValue) || parsedValue < 0) {
|
|
23
|
+
throw new Error(`--${key} must be a non-negative integer`);
|
|
24
|
+
}
|
|
25
|
+
return parsedValue;
|
|
26
|
+
}
|
|
27
|
+
function buildRunBlockedEvent(input) {
|
|
28
|
+
return {
|
|
29
|
+
id: `EVT-${randomUUID()}`,
|
|
30
|
+
kind: "run.failed",
|
|
31
|
+
timestamp: new Date().toISOString(),
|
|
32
|
+
specId: input.specId,
|
|
33
|
+
runId: input.runId,
|
|
34
|
+
requestId: input.requestId,
|
|
35
|
+
payload: {
|
|
36
|
+
status: "BLOCKED",
|
|
37
|
+
ruleId: "AC-009",
|
|
38
|
+
reason: `max iteration exceeded: iteration ${input.iteration} > max ${input.maxIterations}`,
|
|
39
|
+
iteration: input.iteration,
|
|
40
|
+
maxIterations: input.maxIterations,
|
|
41
|
+
},
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
/** `jcr-adk run` — guarded SDK runner (live) or dry-run mock pipeline. */
|
|
45
|
+
export async function runRunCommand(parsed, env = process.env) {
|
|
46
|
+
const workspaceRoot = flagString(parsed.flags, "workspace", "w") ?? process.cwd();
|
|
47
|
+
const specId = flagString(parsed.flags, "spec-id", "s");
|
|
48
|
+
if (!specId) {
|
|
49
|
+
return { exitCode: 2, output: "missing required flag: --spec-id" };
|
|
50
|
+
}
|
|
51
|
+
// run owns runId generation. An explicit --run-id is honored, otherwise we
|
|
52
|
+
// always mint a fresh runId so a new run never silently reuses a stale one.
|
|
53
|
+
// The session is recorded as completed ONLY after a successful run below, so
|
|
54
|
+
// a failed run cannot satisfy sync's reuse-or-fail gate (NP-01 fail-closed).
|
|
55
|
+
const runId = flagString(parsed.flags, "run-id") ?? generateRunId();
|
|
56
|
+
await clearCurrentRunSession(workspaceRoot);
|
|
57
|
+
const liveRequested = flagBoolean(parsed.flags, "live") || env["JCR_LIVE_ADK"] === "1";
|
|
58
|
+
const dryRunRequested = flagBoolean(parsed.flags, "dry-run");
|
|
59
|
+
let iteration;
|
|
60
|
+
let maxIterations;
|
|
61
|
+
try {
|
|
62
|
+
iteration = flagPositiveInteger(parsed, "iteration");
|
|
63
|
+
maxIterations = flagPositiveInteger(parsed, "max-iterations");
|
|
64
|
+
}
|
|
65
|
+
catch (err) {
|
|
66
|
+
return { exitCode: 2, output: err instanceof Error ? err.message : String(err) };
|
|
67
|
+
}
|
|
68
|
+
if (liveRequested && dryRunRequested) {
|
|
69
|
+
return {
|
|
70
|
+
exitCode: 2,
|
|
71
|
+
output: "cannot combine --live and --dry-run",
|
|
72
|
+
};
|
|
73
|
+
}
|
|
74
|
+
if ((iteration !== undefined && maxIterations === undefined) ||
|
|
75
|
+
(iteration === undefined && maxIterations !== undefined)) {
|
|
76
|
+
return {
|
|
77
|
+
exitCode: 2,
|
|
78
|
+
output: "AC-009 requires both --iteration and --max-iterations (fail-closed)",
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
const mode = liveRequested ? "live" : "dry-run";
|
|
82
|
+
if (iteration !== undefined && maxIterations !== undefined && iteration > maxIterations) {
|
|
83
|
+
const session = await createCliSession({ workspaceRoot, specId, runId });
|
|
84
|
+
const appendOutcome = await session.store.append(buildRunBlockedEvent({
|
|
85
|
+
specId: session.correlation.specId,
|
|
86
|
+
runId: session.correlation.runId,
|
|
87
|
+
requestId: session.correlation.requestId,
|
|
88
|
+
iteration,
|
|
89
|
+
maxIterations,
|
|
90
|
+
}));
|
|
91
|
+
if (!appendOutcome.ok) {
|
|
92
|
+
return {
|
|
93
|
+
exitCode: 2,
|
|
94
|
+
output: `failed to record AC-009 run.failed audit event: ${appendOutcome.message}`,
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
await markRunSessionBlocked(workspaceRoot, { specId, runId: session.correlation.runId });
|
|
98
|
+
return {
|
|
99
|
+
exitCode: 1,
|
|
100
|
+
output: JSON.stringify({
|
|
101
|
+
ok: false,
|
|
102
|
+
mode,
|
|
103
|
+
specId,
|
|
104
|
+
runId: session.correlation.runId,
|
|
105
|
+
status: "BLOCKED",
|
|
106
|
+
ruleId: "AC-009",
|
|
107
|
+
reason: `max iteration exceeded: iteration ${iteration} > max ${maxIterations}`,
|
|
108
|
+
iteration,
|
|
109
|
+
maxIterations,
|
|
110
|
+
}, null, 2),
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
if (mode === "live") {
|
|
114
|
+
const apiKey = resolveCursorApiKey({ env });
|
|
115
|
+
if (!apiKey) {
|
|
116
|
+
return {
|
|
117
|
+
exitCode: 1,
|
|
118
|
+
output: JSON.stringify({
|
|
119
|
+
ok: false,
|
|
120
|
+
mode: "live",
|
|
121
|
+
error: "CURSOR_API_KEY is required for live SDK runs (fail-closed, OI-014)",
|
|
122
|
+
}, null, 2),
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
const prompt = (await resolvePrompt(parsed)) ?? "Execute the planned ADK workflow using guarded custom tools.";
|
|
126
|
+
const correlation = createCorrelationIds({ specId, runId });
|
|
127
|
+
try {
|
|
128
|
+
const result = await runGuardedCursorAgent({
|
|
129
|
+
workspaceRoot,
|
|
130
|
+
specId,
|
|
131
|
+
runId,
|
|
132
|
+
prompt,
|
|
133
|
+
env,
|
|
134
|
+
apiKey,
|
|
135
|
+
correlation,
|
|
136
|
+
});
|
|
137
|
+
if (result.ok) {
|
|
138
|
+
await markRunSessionCompleted(workspaceRoot, { specId, runId });
|
|
139
|
+
}
|
|
140
|
+
return {
|
|
141
|
+
exitCode: result.ok ? 0 : 1,
|
|
142
|
+
output: JSON.stringify({
|
|
143
|
+
ok: result.ok,
|
|
144
|
+
mode: "live",
|
|
145
|
+
specId,
|
|
146
|
+
runId: result.correlation?.runId ?? runId,
|
|
147
|
+
requestId: result.correlation?.requestId,
|
|
148
|
+
agentRunId: result.agentRunId,
|
|
149
|
+
status: result.status,
|
|
150
|
+
result: result.result,
|
|
151
|
+
error: result.error,
|
|
152
|
+
}, null, 2),
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
catch (err) {
|
|
156
|
+
return {
|
|
157
|
+
exitCode: 1,
|
|
158
|
+
output: JSON.stringify({ ok: false, mode: "live", error: String(err) }, null, 2),
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
// dry-run: guarded session + minimal tool pipeline (no live SDK)
|
|
163
|
+
try {
|
|
164
|
+
const session = await createCliSession({ workspaceRoot, specId, runId });
|
|
165
|
+
const readResult = await session.executor.execute({
|
|
166
|
+
toolName: "adk_spec_read",
|
|
167
|
+
args: { specId: session.correlation.specId },
|
|
168
|
+
correlation: session.correlation,
|
|
169
|
+
});
|
|
170
|
+
if (!readResult.ok) {
|
|
171
|
+
return {
|
|
172
|
+
exitCode: 1,
|
|
173
|
+
output: JSON.stringify({
|
|
174
|
+
ok: false,
|
|
175
|
+
mode: "dry-run",
|
|
176
|
+
stage: readResult.stage,
|
|
177
|
+
ruleId: readResult.ruleId,
|
|
178
|
+
reason: readResult.reason,
|
|
179
|
+
}, null, 2),
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
const prompt = (await resolvePrompt(parsed)) ?? "dry-run guarded pipeline";
|
|
183
|
+
await markRunSessionCompleted(workspaceRoot, { specId, runId });
|
|
184
|
+
return {
|
|
185
|
+
exitCode: 0,
|
|
186
|
+
output: JSON.stringify({
|
|
187
|
+
ok: true,
|
|
188
|
+
mode: "dry-run",
|
|
189
|
+
specId: session.correlation.specId,
|
|
190
|
+
runId: session.correlation.runId,
|
|
191
|
+
requestId: session.correlation.requestId,
|
|
192
|
+
prompt,
|
|
193
|
+
toolOutput: readResult.output,
|
|
194
|
+
liveSdkAvailable: isLiveSdkAvailable(env),
|
|
195
|
+
}, null, 2),
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
catch (err) {
|
|
199
|
+
return {
|
|
200
|
+
exitCode: 1,
|
|
201
|
+
output: JSON.stringify({ ok: false, mode: "dry-run", error: String(err) }, null, 2),
|
|
202
|
+
};
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
//# sourceMappingURL=run.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ParsedArgv } from "../argv.js";
|
|
2
|
+
export interface SyncCommandResult {
|
|
3
|
+
readonly exitCode: number;
|
|
4
|
+
readonly output: string;
|
|
5
|
+
}
|
|
6
|
+
/** `jcr-adk sync` — gate PASS 후 metadata/progress/sync-summary 갱신. */
|
|
7
|
+
export declare function runSyncCommand(parsed: ParsedArgv): Promise<SyncCommandResult>;
|
|
8
|
+
//# sourceMappingURL=sync.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAY7C,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAuBD,sEAAsE;AACtE,wBAAsB,cAAc,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAsInF"}
|