@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.
Files changed (107) hide show
  1. package/LICENSE +201 -0
  2. package/bin/jcr-adk.mjs +8 -0
  3. package/dist/argv.d.ts +10 -0
  4. package/dist/argv.d.ts.map +1 -0
  5. package/dist/argv.js +56 -0
  6. package/dist/argv.js.map +1 -0
  7. package/dist/audit-summary.d.ts +28 -0
  8. package/dist/audit-summary.d.ts.map +1 -0
  9. package/dist/audit-summary.js +39 -0
  10. package/dist/audit-summary.js.map +1 -0
  11. package/dist/commands/audit.d.ts +8 -0
  12. package/dist/commands/audit.d.ts.map +1 -0
  13. package/dist/commands/audit.js +20 -0
  14. package/dist/commands/audit.js.map +1 -0
  15. package/dist/commands/doctor.d.ts +8 -0
  16. package/dist/commands/doctor.d.ts.map +1 -0
  17. package/dist/commands/doctor.js +25 -0
  18. package/dist/commands/doctor.js.map +1 -0
  19. package/dist/commands/explain-fail.d.ts +8 -0
  20. package/dist/commands/explain-fail.d.ts.map +1 -0
  21. package/dist/commands/explain-fail.js +41 -0
  22. package/dist/commands/explain-fail.js.map +1 -0
  23. package/dist/commands/gate.d.ts +8 -0
  24. package/dist/commands/gate.d.ts.map +1 -0
  25. package/dist/commands/gate.js +104 -0
  26. package/dist/commands/gate.js.map +1 -0
  27. package/dist/commands/handoff.d.ts +8 -0
  28. package/dist/commands/handoff.d.ts.map +1 -0
  29. package/dist/commands/handoff.js +61 -0
  30. package/dist/commands/handoff.js.map +1 -0
  31. package/dist/commands/init.d.ts +8 -0
  32. package/dist/commands/init.d.ts.map +1 -0
  33. package/dist/commands/init.js +48 -0
  34. package/dist/commands/init.js.map +1 -0
  35. package/dist/commands/plan.d.ts +8 -0
  36. package/dist/commands/plan.d.ts.map +1 -0
  37. package/dist/commands/plan.js +55 -0
  38. package/dist/commands/plan.js.map +1 -0
  39. package/dist/commands/replay.d.ts +8 -0
  40. package/dist/commands/replay.d.ts.map +1 -0
  41. package/dist/commands/replay.js +39 -0
  42. package/dist/commands/replay.js.map +1 -0
  43. package/dist/commands/review-pack.d.ts +8 -0
  44. package/dist/commands/review-pack.d.ts.map +1 -0
  45. package/dist/commands/review-pack.js +64 -0
  46. package/dist/commands/review-pack.js.map +1 -0
  47. package/dist/commands/run.d.ts +8 -0
  48. package/dist/commands/run.d.ts.map +1 -0
  49. package/dist/commands/run.js +205 -0
  50. package/dist/commands/run.js.map +1 -0
  51. package/dist/commands/sync.d.ts +8 -0
  52. package/dist/commands/sync.d.ts.map +1 -0
  53. package/dist/commands/sync.js +133 -0
  54. package/dist/commands/sync.js.map +1 -0
  55. package/dist/commands/tool.d.ts +12 -0
  56. package/dist/commands/tool.d.ts.map +1 -0
  57. package/dist/commands/tool.js +154 -0
  58. package/dist/commands/tool.js.map +1 -0
  59. package/dist/event-reader.d.ts +28 -0
  60. package/dist/event-reader.d.ts.map +1 -0
  61. package/dist/event-reader.js +39 -0
  62. package/dist/event-reader.js.map +1 -0
  63. package/dist/explain-fail-summary.d.ts +46 -0
  64. package/dist/explain-fail-summary.d.ts.map +1 -0
  65. package/dist/explain-fail-summary.js +405 -0
  66. package/dist/explain-fail-summary.js.map +1 -0
  67. package/dist/handlers.d.ts +134 -0
  68. package/dist/handlers.d.ts.map +1 -0
  69. package/dist/handlers.js +257 -0
  70. package/dist/handlers.js.map +1 -0
  71. package/dist/handoff-summary.d.ts +62 -0
  72. package/dist/handoff-summary.d.ts.map +1 -0
  73. package/dist/handoff-summary.js +170 -0
  74. package/dist/handoff-summary.js.map +1 -0
  75. package/dist/index.d.ts +11 -0
  76. package/dist/index.d.ts.map +1 -0
  77. package/dist/index.js +6 -0
  78. package/dist/index.js.map +1 -0
  79. package/dist/lifecycle-artifacts.d.ts +62 -0
  80. package/dist/lifecycle-artifacts.d.ts.map +1 -0
  81. package/dist/lifecycle-artifacts.js +160 -0
  82. package/dist/lifecycle-artifacts.js.map +1 -0
  83. package/dist/main.d.ts +30 -0
  84. package/dist/main.d.ts.map +1 -0
  85. package/dist/main.js +159 -0
  86. package/dist/main.js.map +1 -0
  87. package/dist/permissions.d.ts +42 -0
  88. package/dist/permissions.d.ts.map +1 -0
  89. package/dist/permissions.js +57 -0
  90. package/dist/permissions.js.map +1 -0
  91. package/dist/replay-summary.d.ts +28 -0
  92. package/dist/replay-summary.d.ts.map +1 -0
  93. package/dist/replay-summary.js +73 -0
  94. package/dist/replay-summary.js.map +1 -0
  95. package/dist/review-pack-summary.d.ts +67 -0
  96. package/dist/review-pack-summary.d.ts.map +1 -0
  97. package/dist/review-pack-summary.js +199 -0
  98. package/dist/review-pack-summary.js.map +1 -0
  99. package/dist/session-run.d.ts +62 -0
  100. package/dist/session-run.d.ts.map +1 -0
  101. package/dist/session-run.js +112 -0
  102. package/dist/session-run.js.map +1 -0
  103. package/dist/session.d.ts +24 -0
  104. package/dist/session.d.ts.map +1 -0
  105. package/dist/session.js +37 -0
  106. package/dist/session.js.map +1 -0
  107. 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"}