@arcfoundry/cli 0.1.2

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 (77) hide show
  1. package/README.md +8 -0
  2. package/dist/arguments.d.ts +11 -0
  3. package/dist/arguments.js +48 -0
  4. package/dist/arguments.js.map +1 -0
  5. package/dist/cli.d.ts +2 -0
  6. package/dist/cli.js +24 -0
  7. package/dist/cli.js.map +1 -0
  8. package/dist/commands/default-requests.d.ts +9 -0
  9. package/dist/commands/default-requests.js +11 -0
  10. package/dist/commands/default-requests.js.map +1 -0
  11. package/dist/commands/doctor-command.d.ts +3 -0
  12. package/dist/commands/doctor-command.js +8 -0
  13. package/dist/commands/doctor-command.js.map +1 -0
  14. package/dist/commands/execute-command.d.ts +3 -0
  15. package/dist/commands/execute-command.js +30 -0
  16. package/dist/commands/execute-command.js.map +1 -0
  17. package/dist/commands/verification-levels.d.ts +2 -0
  18. package/dist/commands/verification-levels.js +14 -0
  19. package/dist/commands/verification-levels.js.map +1 -0
  20. package/dist/commands/verify-command.d.ts +3 -0
  21. package/dist/commands/verify-command.js +21 -0
  22. package/dist/commands/verify-command.js.map +1 -0
  23. package/dist/execute-command.d.ts +3 -0
  24. package/dist/execute-command.js +30 -0
  25. package/dist/execute-command.js.map +1 -0
  26. package/dist/help.d.ts +1 -0
  27. package/dist/help.js +13 -0
  28. package/dist/help.js.map +1 -0
  29. package/dist/ids.d.ts +1 -0
  30. package/dist/ids.js +8 -0
  31. package/dist/ids.js.map +1 -0
  32. package/dist/main.d.ts +9 -0
  33. package/dist/main.js +29 -0
  34. package/dist/main.js.map +1 -0
  35. package/dist/parsing/arguments.d.ts +11 -0
  36. package/dist/parsing/arguments.js +48 -0
  37. package/dist/parsing/arguments.js.map +1 -0
  38. package/dist/parsing/ids.d.ts +1 -0
  39. package/dist/parsing/ids.js +8 -0
  40. package/dist/parsing/ids.js.map +1 -0
  41. package/dist/presentation/help.d.ts +1 -0
  42. package/dist/presentation/help.js +14 -0
  43. package/dist/presentation/help.js.map +1 -0
  44. package/dist/requests.d.ts +2 -0
  45. package/dist/requests.js +16 -0
  46. package/dist/requests.js.map +1 -0
  47. package/dist/result-format/command-summary.d.ts +7 -0
  48. package/dist/result-format/command-summary.js +9 -0
  49. package/dist/result-format/command-summary.js.map +1 -0
  50. package/dist/result-format/execute-result.d.ts +2 -0
  51. package/dist/result-format/execute-result.js +13 -0
  52. package/dist/result-format/execute-result.js.map +1 -0
  53. package/dist/result-format/stage-summary.d.ts +4 -0
  54. package/dist/result-format/stage-summary.js +23 -0
  55. package/dist/result-format/stage-summary.js.map +1 -0
  56. package/dist/result-format/types.d.ts +11 -0
  57. package/dist/result-format/types.js +2 -0
  58. package/dist/result-format/types.js.map +1 -0
  59. package/dist/result-format/verification-result.d.ts +2 -0
  60. package/dist/result-format/verification-result.js +10 -0
  61. package/dist/result-format/verification-result.js.map +1 -0
  62. package/dist/result-format.d.ts +2 -0
  63. package/dist/result-format.js +3 -0
  64. package/dist/result-format.js.map +1 -0
  65. package/dist/runtime/dependencies.d.ts +11 -0
  66. package/dist/runtime/dependencies.js +11 -0
  67. package/dist/runtime/dependencies.js.map +1 -0
  68. package/dist/runtime-deps.d.ts +10 -0
  69. package/dist/runtime-deps.js +10 -0
  70. package/dist/runtime-deps.js.map +1 -0
  71. package/dist/verification-levels.d.ts +2 -0
  72. package/dist/verification-levels.js +14 -0
  73. package/dist/verification-levels.js.map +1 -0
  74. package/dist/verify-command.d.ts +3 -0
  75. package/dist/verify-command.js +21 -0
  76. package/dist/verify-command.js.map +1 -0
  77. package/package.json +23 -0
package/README.md ADDED
@@ -0,0 +1,8 @@
1
+ # @arcfoundry/cli
2
+
3
+ Installable command line interface for the Arc Foundry governed agentic web agency runtime.
4
+
5
+ ```bash
6
+ npm install --global @arcfoundry/cli
7
+ arc-agency execute --runtime opencode --repo-root "$PWD" --request "Build and verify the requested web feature."
8
+ ```
@@ -0,0 +1,11 @@
1
+ export declare function normalizeCliArgs(rawArgs: string[]): string[];
2
+ export declare class CliArguments {
3
+ readonly tokens: string[];
4
+ constructor(rawArgs: string[]);
5
+ get command(): string | undefined;
6
+ readFlag(name: string): string | undefined;
7
+ requireFlag(name: string): string;
8
+ private valueAfter;
9
+ }
10
+ export declare function readFlag(args: string[], name: string): string | undefined;
11
+ export declare function requireFlag(args: string[], name: string): string;
@@ -0,0 +1,48 @@
1
+ export function normalizeCliArgs(rawArgs) {
2
+ const args = [...rawArgs];
3
+ if (args[0] === "--")
4
+ args.shift();
5
+ return args;
6
+ }
7
+ export class CliArguments {
8
+ tokens;
9
+ constructor(rawArgs) {
10
+ this.tokens = normalizeCliArgs(rawArgs);
11
+ }
12
+ get command() {
13
+ return this.tokens[0];
14
+ }
15
+ readFlag(name) {
16
+ const values = [];
17
+ for (let index = 1; index < this.tokens.length; index += 1) {
18
+ if (this.tokens[index] === name) {
19
+ values.push(this.valueAfter(index, name));
20
+ }
21
+ }
22
+ if (values.length > 1) {
23
+ throw new Error(`Duplicate flag: ${name}`);
24
+ }
25
+ return values[0];
26
+ }
27
+ requireFlag(name) {
28
+ const value = this.readFlag(name);
29
+ if (!value) {
30
+ throw new Error(`Missing required flag: ${name}`);
31
+ }
32
+ return value;
33
+ }
34
+ valueAfter(index, name) {
35
+ const value = this.tokens[index + 1];
36
+ if (!value || value.startsWith("--")) {
37
+ throw new Error(`Flag requires a value: ${name}`);
38
+ }
39
+ return value;
40
+ }
41
+ }
42
+ export function readFlag(args, name) {
43
+ return new CliArguments(args).readFlag(name);
44
+ }
45
+ export function requireFlag(args, name) {
46
+ return new CliArguments(args).requireFlag(name);
47
+ }
48
+ //# sourceMappingURL=arguments.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"arguments.js","sourceRoot":"","sources":["../src/arguments.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,gBAAgB,CAAC,OAAiB;IAChD,MAAM,IAAI,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC;IAC1B,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI;QAAE,IAAI,CAAC,KAAK,EAAE,CAAC;IACnC,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,OAAO,YAAY;IACd,MAAM,CAAW;IAE1B,YAAY,OAAiB;QAC3B,IAAI,CAAC,MAAM,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAC1C,CAAC;IAED,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACxB,CAAC;IAED,QAAQ,CAAC,IAAY;QACnB,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;YAC3D,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;gBAChC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;YAC5C,CAAC;QACH,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,mBAAmB,IAAI,EAAE,CAAC,CAAC;QAC7C,CAAC;QACD,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC;IAED,WAAW,CAAC,IAAY;QACtB,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,0BAA0B,IAAI,EAAE,CAAC,CAAC;QACpD,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,UAAU,CAAC,KAAa,EAAE,IAAY;QAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QACrC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACrC,MAAM,IAAI,KAAK,CAAC,0BAA0B,IAAI,EAAE,CAAC,CAAC;QACpD,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;CACF;AAED,MAAM,UAAU,QAAQ,CAAC,IAAc,EAAE,IAAY;IACnD,OAAO,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAc,EAAE,IAAY;IACtD,OAAO,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AAClD,CAAC"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ import { type CliDependencies } from "./runtime/dependencies.js";
2
+ export declare function runCli(rawArgs: string[], dependencies: CliDependencies): Promise<number>;
package/dist/cli.js ADDED
@@ -0,0 +1,24 @@
1
+ import { runExecuteCommand } from "./commands/execute-command.js";
2
+ import { runDoctorCommand } from "./commands/doctor-command.js";
3
+ import { runVerifyCommand } from "./commands/verify-command.js";
4
+ import { CliArguments } from "./parsing/arguments.js";
5
+ import { helpText } from "./presentation/help.js";
6
+ export async function runCli(rawArgs, dependencies) {
7
+ const args = new CliArguments(rawArgs);
8
+ const command = args.command;
9
+ if (!command || command === "help" || command === "--help") {
10
+ dependencies.stdout(helpText());
11
+ return 0;
12
+ }
13
+ if (command === "execute") {
14
+ return runExecuteCommand(args, dependencies);
15
+ }
16
+ if (command === "doctor") {
17
+ return runDoctorCommand(args, dependencies);
18
+ }
19
+ if (command === "verify") {
20
+ return runVerifyCommand(args, dependencies);
21
+ }
22
+ throw new Error(`Unknown command: ${command}`);
23
+ }
24
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAGlD,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,OAAiB,EAAE,YAA6B;IAC3E,MAAM,IAAI,GAAG,IAAI,YAAY,CAAC,OAAO,CAAC,CAAC;IACvC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;IAC7B,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,MAAM,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QAC3D,YAAY,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QAChC,OAAO,CAAC,CAAC;IACX,CAAC;IACD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,OAAO,iBAAiB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IAC/C,CAAC;IACD,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QACzB,OAAO,gBAAgB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IAC9C,CAAC;IACD,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QACzB,OAAO,gBAAgB,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IAC9C,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,oBAAoB,OAAO,EAAE,CAAC,CAAC;AACjD,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { type VerificationLevel } from "@arcfoundry/core";
2
+ export declare const defaultVerificationRequests: {
3
+ "existing-project": string;
4
+ "auth-sensitive": string;
5
+ "data-driven": string;
6
+ "interactive-ui": string;
7
+ "simple-ui": string;
8
+ };
9
+ export declare function defaultRequestFor(level: VerificationLevel): string;
@@ -0,0 +1,11 @@
1
+ export const defaultVerificationRequests = {
2
+ "existing-project": "Modify the existing Client Delivery Portal to add delivery-risk review while preserving approved project memory, accepted ADR boundaries, local project data, and stable status language.",
3
+ "auth-sensitive": "Create a permission-sensitive client workspace with role-based project visibility and admin-only access approval.",
4
+ "data-driven": "Create a channel performance dashboard with summary metrics, filtering, sorting, loading and empty states, and CSV export.",
5
+ "interactive-ui": "Create a contact form with client-side validation, error messages, success state, and disabled submit while sending.",
6
+ "simple-ui": "Add a responsive pricing card component with three plans and a highlighted recommended plan.",
7
+ };
8
+ export function defaultRequestFor(level) {
9
+ return defaultVerificationRequests[level];
10
+ }
11
+ //# sourceMappingURL=default-requests.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"default-requests.js","sourceRoot":"","sources":["../../src/commands/default-requests.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,2BAA2B,GAAG;IACzC,kBAAkB,EAChB,2LAA2L;IAC7L,gBAAgB,EACd,mHAAmH;IACrH,aAAa,EACX,4HAA4H;IAC9H,gBAAgB,EACd,sHAAsH;IACxH,WAAW,EACT,8FAA8F;CACrD,CAAC;AAE9C,MAAM,UAAU,iBAAiB,CAAC,KAAwB;IACxD,OAAO,2BAA2B,CAAC,KAAK,CAAC,CAAC;AAC5C,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type CliArguments } from "../parsing/arguments.js";
2
+ import { type CliDependencies } from "../runtime/dependencies.js";
3
+ export declare function runDoctorCommand(args: CliArguments, dependencies: CliDependencies): Promise<number>;
@@ -0,0 +1,8 @@
1
+ import path from "node:path";
2
+ export async function runDoctorCommand(args, dependencies) {
3
+ const repoRoot = path.resolve(dependencies.cwd(), args.readFlag("--repo-root") ?? ".");
4
+ const result = await dependencies.inspectAgencyContracts(repoRoot);
5
+ dependencies.stdout(JSON.stringify(result, null, 2));
6
+ return 0;
7
+ }
8
+ //# sourceMappingURL=doctor-command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doctor-command.js","sourceRoot":"","sources":["../../src/commands/doctor-command.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAI7B,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,IAAkB,EAClB,YAA6B;IAE7B,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,GAAG,CAAC,CAAC;IACvF,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC;IACnE,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACrD,OAAO,CAAC,CAAC;AACX,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type CliArguments } from "../parsing/arguments.js";
2
+ import { type CliDependencies } from "../runtime/dependencies.js";
3
+ export declare function runExecuteCommand(args: CliArguments, dependencies: CliDependencies): Promise<number>;
@@ -0,0 +1,30 @@
1
+ import path from "node:path";
2
+ import { timestampId } from "../parsing/ids.js";
3
+ import { formatExecuteResult } from "../result-format.js";
4
+ export async function runExecuteCommand(args, dependencies) {
5
+ const request = args.requireFlag("--request");
6
+ const repoRoot = path.resolve(dependencies.cwd(), args.readFlag("--repo-root") ?? ".");
7
+ const runtime = parseExecuteRuntime(args.readFlag("--runtime") ?? "opencode");
8
+ const requestId = args.readFlag("--request-id") ?? timestampId("req", dependencies.now());
9
+ const result = runtime === "opencode"
10
+ ? await dependencies.runAgencyExecution({
11
+ repoRoot,
12
+ projectId: "arc-foundry",
13
+ requestId,
14
+ clientRequest: request,
15
+ })
16
+ : await dependencies.runLocalAgencyExecution({
17
+ repoRoot,
18
+ projectId: "arc-foundry",
19
+ requestId,
20
+ clientRequest: request,
21
+ });
22
+ dependencies.stdout(JSON.stringify(formatExecuteResult(result, runtime), null, 2));
23
+ return result.status === "passed" ? 0 : 1;
24
+ }
25
+ function parseExecuteRuntime(value) {
26
+ if (value === "local" || value === "opencode")
27
+ return value;
28
+ throw new Error(`Supported execute runtimes are local and opencode; received ${value}`);
29
+ }
30
+ //# sourceMappingURL=execute-command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execute-command.js","sourceRoot":"","sources":["../../src/commands/execute-command.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAG1D,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,IAAkB,EAClB,YAA6B;IAE7B,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;IAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,GAAG,CAAC,CAAC;IACvF,MAAM,OAAO,GAAG,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,UAAU,CAAC,CAAC;IAC9E,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,WAAW,CAAC,KAAK,EAAE,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC;IAE1F,MAAM,MAAM,GACV,OAAO,KAAK,UAAU;QACpB,CAAC,CAAC,MAAM,YAAY,CAAC,kBAAkB,CAAC;YACpC,QAAQ;YACR,SAAS,EAAE,aAAa;YACxB,SAAS;YACT,aAAa,EAAE,OAAO;SACvB,CAAC;QACJ,CAAC,CAAC,MAAM,YAAY,CAAC,uBAAuB,CAAC;YACzC,QAAQ;YACR,SAAS,EAAE,aAAa;YACxB,SAAS;YACT,aAAa,EAAE,OAAO;SACvB,CAAC,CAAC;IAET,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACnF,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5C,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAa;IACxC,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,UAAU;QAAE,OAAO,KAAK,CAAC;IAC5D,MAAM,IAAI,KAAK,CAAC,+DAA+D,KAAK,EAAE,CAAC,CAAC;AAC1F,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { type VerificationLevel } from "@arcfoundry/core";
2
+ export declare function parseVerificationLevel(value: string): VerificationLevel;
@@ -0,0 +1,14 @@
1
+ const verificationLevels = [
2
+ "simple-ui",
3
+ "interactive-ui",
4
+ "data-driven",
5
+ "auth-sensitive",
6
+ "existing-project",
7
+ ];
8
+ export function parseVerificationLevel(value) {
9
+ if (verificationLevels.includes(value)) {
10
+ return value;
11
+ }
12
+ throw new Error(`Supported verification levels are ${verificationLevels.join(", ")}; received ${value}`);
13
+ }
14
+ //# sourceMappingURL=verification-levels.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verification-levels.js","sourceRoot":"","sources":["../../src/commands/verification-levels.ts"],"names":[],"mappings":"AAEA,MAAM,kBAAkB,GAAG;IACzB,WAAW;IACX,gBAAgB;IAChB,aAAa;IACb,gBAAgB;IAChB,kBAAkB;CAC6B,CAAC;AAElD,MAAM,UAAU,sBAAsB,CAAC,KAAa;IAClD,IAAI,kBAAkB,CAAC,QAAQ,CAAC,KAA0B,CAAC,EAAE,CAAC;QAC5D,OAAO,KAA0B,CAAC;IACpC,CAAC;IACD,MAAM,IAAI,KAAK,CACb,qCAAqC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,KAAK,EAAE,CACxF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type CliArguments } from "../parsing/arguments.js";
2
+ import { type CliDependencies } from "../runtime/dependencies.js";
3
+ export declare function runVerifyCommand(args: CliArguments, dependencies: CliDependencies): Promise<number>;
@@ -0,0 +1,21 @@
1
+ import path from "node:path";
2
+ import { timestampId } from "../parsing/ids.js";
3
+ import { formatVerificationResult } from "../result-format.js";
4
+ import { defaultRequestFor } from "./default-requests.js";
5
+ import { parseVerificationLevel } from "./verification-levels.js";
6
+ export async function runVerifyCommand(args, dependencies) {
7
+ const level = parseVerificationLevel(args.readFlag("--level") ?? "simple-ui");
8
+ const request = args.readFlag("--request") ?? defaultRequestFor(level);
9
+ const repoRoot = path.resolve(dependencies.cwd(), args.readFlag("--repo-root") ?? ".");
10
+ const requestId = args.readFlag("--request-id") ?? timestampId("vr", dependencies.now(), level);
11
+ const result = await dependencies.runAgencyWorkflow({
12
+ repoRoot,
13
+ projectId: "arc-foundry",
14
+ requestId,
15
+ clientRequest: request,
16
+ level,
17
+ });
18
+ dependencies.stdout(JSON.stringify(formatVerificationResult(result), null, 2));
19
+ return result.status === "passed" ? 0 : 1;
20
+ }
21
+ //# sourceMappingURL=verify-command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify-command.js","sourceRoot":"","sources":["../../src/commands/verify-command.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAE/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAElE,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,IAAkB,EAClB,YAA6B;IAE7B,MAAM,KAAK,GAAG,sBAAsB,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,WAAW,CAAC,CAAC;IAC9E,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,iBAAiB,CAAC,KAAK,CAAC,CAAC;IACvE,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,GAAG,CAAC,CAAC;IACvF,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,WAAW,CAAC,IAAI,EAAE,YAAY,CAAC,GAAG,EAAE,EAAE,KAAK,CAAC,CAAC;IAEhG,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,iBAAiB,CAAC;QAClD,QAAQ;QACR,SAAS,EAAE,aAAa;QACxB,SAAS;QACT,aAAa,EAAE,OAAO;QACtB,KAAK;KACN,CAAC,CAAC;IAEH,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,wBAAwB,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/E,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5C,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type CliArguments } from "./arguments.js";
2
+ import { type CliDependencies } from "./runtime-deps.js";
3
+ export declare function runExecuteCommand(args: CliArguments, dependencies: CliDependencies): Promise<number>;
@@ -0,0 +1,30 @@
1
+ import path from "node:path";
2
+ import { timestampId } from "./ids.js";
3
+ import { formatExecuteResult } from "./result-format.js";
4
+ export async function runExecuteCommand(args, dependencies) {
5
+ const request = args.requireFlag("--request");
6
+ const repoRoot = path.resolve(dependencies.cwd(), args.readFlag("--repo-root") ?? ".");
7
+ const runtime = parseExecuteRuntime(args.readFlag("--runtime") ?? "opencode");
8
+ const requestId = args.readFlag("--request-id") ?? timestampId("req", dependencies.now());
9
+ const result = runtime === "opencode"
10
+ ? await dependencies.runAgencyExecution({
11
+ repoRoot,
12
+ projectId: "arc-foundry",
13
+ requestId,
14
+ clientRequest: request,
15
+ })
16
+ : await dependencies.runLocalAgencyExecution({
17
+ repoRoot,
18
+ projectId: "arc-foundry",
19
+ requestId,
20
+ clientRequest: request,
21
+ });
22
+ dependencies.stdout(JSON.stringify(formatExecuteResult(result, runtime), null, 2));
23
+ return result.status === "passed" ? 0 : 1;
24
+ }
25
+ function parseExecuteRuntime(value) {
26
+ if (value === "local" || value === "opencode")
27
+ return value;
28
+ throw new Error(`Supported execute runtimes are local and opencode; received ${value}`);
29
+ }
30
+ //# sourceMappingURL=execute-command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execute-command.js","sourceRoot":"","sources":["../src/execute-command.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAGzD,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,IAAkB,EAClB,YAA6B;IAE7B,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;IAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,GAAG,CAAC,CAAC;IACvF,MAAM,OAAO,GAAG,mBAAmB,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,UAAU,CAAC,CAAC;IAC9E,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,WAAW,CAAC,KAAK,EAAE,YAAY,CAAC,GAAG,EAAE,CAAC,CAAC;IAE1F,MAAM,MAAM,GACV,OAAO,KAAK,UAAU;QACpB,CAAC,CAAC,MAAM,YAAY,CAAC,kBAAkB,CAAC;YACpC,QAAQ;YACR,SAAS,EAAE,aAAa;YACxB,SAAS;YACT,aAAa,EAAE,OAAO;SACvB,CAAC;QACJ,CAAC,CAAC,MAAM,YAAY,CAAC,uBAAuB,CAAC;YACzC,QAAQ;YACR,SAAS,EAAE,aAAa;YACxB,SAAS;YACT,aAAa,EAAE,OAAO;SACvB,CAAC,CAAC;IAET,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,mBAAmB,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACnF,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5C,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAa;IACxC,IAAI,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,UAAU;QAAE,OAAO,KAAK,CAAC;IAC5D,MAAM,IAAI,KAAK,CAAC,+DAA+D,KAAK,EAAE,CAAC,CAAC;AAC1F,CAAC"}
package/dist/help.d.ts ADDED
@@ -0,0 +1 @@
1
+ export declare function helpText(): string;
package/dist/help.js ADDED
@@ -0,0 +1,13 @@
1
+ export function helpText() {
2
+ return `arc-agency
3
+
4
+ Commands:
5
+ execute --request "..." [--runtime opencode|local]
6
+ verify --level simple-ui [--request "..."] [--request-id "..."]
7
+ verify --level interactive-ui [--request "..."] [--request-id "..."]
8
+ verify --level data-driven [--request "..."] [--request-id "..."]
9
+ verify --level auth-sensitive [--request "..."] [--request-id "..."]
10
+ verify --level existing-project [--request "..."] [--request-id "..."]
11
+ `;
12
+ }
13
+ //# sourceMappingURL=help.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"help.js","sourceRoot":"","sources":["../src/help.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,QAAQ;IACtB,OAAO;;;;;;;;;CASR,CAAC;AACF,CAAC"}
package/dist/ids.d.ts ADDED
@@ -0,0 +1 @@
1
+ export declare function timestampId(prefix: string, now: Date, suffix?: string): string;
package/dist/ids.js ADDED
@@ -0,0 +1,8 @@
1
+ export function timestampId(prefix, now, suffix) {
2
+ const timestamp = now
3
+ .toISOString()
4
+ .replace(/[-:.TZ]/g, "")
5
+ .slice(0, 14);
6
+ return suffix ? `${prefix}-${timestamp}-${suffix}` : `${prefix}-${timestamp}`;
7
+ }
8
+ //# sourceMappingURL=ids.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ids.js","sourceRoot":"","sources":["../src/ids.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,WAAW,CAAC,MAAc,EAAE,GAAS,EAAE,MAAe;IACpE,MAAM,SAAS,GAAG,GAAG;SAClB,WAAW,EAAE;SACb,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;SACvB,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAChB,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,SAAS,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,SAAS,EAAE,CAAC;AAChF,CAAC"}
package/dist/main.d.ts ADDED
@@ -0,0 +1,9 @@
1
+ #!/usr/bin/env node
2
+ import { type CliDependencies } from "./runtime/dependencies.js";
3
+ export type CliEntrypoint = {
4
+ argv: string[];
5
+ dependencies: CliDependencies;
6
+ stderr: (message: string) => void;
7
+ setExitCode: (exitCode: number) => void;
8
+ };
9
+ export declare function runCliEntrypoint(input: CliEntrypoint): Promise<void>;
package/dist/main.js ADDED
@@ -0,0 +1,29 @@
1
+ #!/usr/bin/env node
2
+ import { fileURLToPath } from "node:url";
3
+ import { runCli } from "./cli.js";
4
+ import { productionCliDependencies } from "./runtime/dependencies.js";
5
+ export async function runCliEntrypoint(input) {
6
+ try {
7
+ const exitCode = await runCli(input.argv.slice(2), input.dependencies);
8
+ if (exitCode !== 0)
9
+ input.setExitCode(exitCode);
10
+ }
11
+ catch (error) {
12
+ input.stderr(error instanceof Error ? error.message : String(error));
13
+ input.setExitCode(1);
14
+ }
15
+ }
16
+ if (isDirectEntrypoint(import.meta.url, process.argv[1])) {
17
+ void runCliEntrypoint({
18
+ argv: process.argv,
19
+ dependencies: productionCliDependencies,
20
+ stderr: (message) => console.error(message),
21
+ setExitCode: (exitCode) => {
22
+ process.exitCode = exitCode;
23
+ },
24
+ });
25
+ }
26
+ function isDirectEntrypoint(moduleUrl, scriptPath) {
27
+ return scriptPath !== undefined && fileURLToPath(moduleUrl) === scriptPath;
28
+ }
29
+ //# sourceMappingURL=main.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAClC,OAAO,EAAE,yBAAyB,EAAwB,MAAM,2BAA2B,CAAC;AAS5F,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,KAAoB;IACzD,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;QACvE,IAAI,QAAQ,KAAK,CAAC;YAAE,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;IAClD,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,KAAK,CAAC,MAAM,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACrE,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;IACvB,CAAC;AACH,CAAC;AAED,IAAI,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACzD,KAAK,gBAAgB,CAAC;QACpB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,YAAY,EAAE,yBAAyB;QACvC,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC;QAC3C,WAAW,EAAE,CAAC,QAAQ,EAAE,EAAE;YACxB,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAC9B,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED,SAAS,kBAAkB,CAAC,SAAiB,EAAE,UAA8B;IAC3E,OAAO,UAAU,KAAK,SAAS,IAAI,aAAa,CAAC,SAAS,CAAC,KAAK,UAAU,CAAC;AAC7E,CAAC"}
@@ -0,0 +1,11 @@
1
+ export declare function normalizeCliArgs(rawArgs: string[]): string[];
2
+ export declare class CliArguments {
3
+ readonly tokens: string[];
4
+ constructor(rawArgs: string[]);
5
+ get command(): string | undefined;
6
+ readFlag(name: string): string | undefined;
7
+ requireFlag(name: string): string;
8
+ private valueAfter;
9
+ }
10
+ export declare function readFlag(args: string[], name: string): string | undefined;
11
+ export declare function requireFlag(args: string[], name: string): string;
@@ -0,0 +1,48 @@
1
+ export function normalizeCliArgs(rawArgs) {
2
+ const args = [...rawArgs];
3
+ if (args[0] === "--")
4
+ args.shift();
5
+ return args;
6
+ }
7
+ export class CliArguments {
8
+ tokens;
9
+ constructor(rawArgs) {
10
+ this.tokens = normalizeCliArgs(rawArgs);
11
+ }
12
+ get command() {
13
+ return this.tokens[0];
14
+ }
15
+ readFlag(name) {
16
+ const values = [];
17
+ for (let index = 1; index < this.tokens.length; index += 1) {
18
+ if (this.tokens[index] === name) {
19
+ values.push(this.valueAfter(index, name));
20
+ }
21
+ }
22
+ if (values.length > 1) {
23
+ throw new Error(`Duplicate flag: ${name}`);
24
+ }
25
+ return values[0];
26
+ }
27
+ requireFlag(name) {
28
+ const value = this.readFlag(name);
29
+ if (!value) {
30
+ throw new Error(`Missing required flag: ${name}`);
31
+ }
32
+ return value;
33
+ }
34
+ valueAfter(index, name) {
35
+ const value = this.tokens[index + 1];
36
+ if (!value || value.startsWith("--")) {
37
+ throw new Error(`Flag requires a value: ${name}`);
38
+ }
39
+ return value;
40
+ }
41
+ }
42
+ export function readFlag(args, name) {
43
+ return new CliArguments(args).readFlag(name);
44
+ }
45
+ export function requireFlag(args, name) {
46
+ return new CliArguments(args).requireFlag(name);
47
+ }
48
+ //# sourceMappingURL=arguments.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"arguments.js","sourceRoot":"","sources":["../../src/parsing/arguments.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,gBAAgB,CAAC,OAAiB;IAChD,MAAM,IAAI,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC;IAC1B,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI;QAAE,IAAI,CAAC,KAAK,EAAE,CAAC;IACnC,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,OAAO,YAAY;IACd,MAAM,CAAW;IAE1B,YAAY,OAAiB;QAC3B,IAAI,CAAC,MAAM,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAC1C,CAAC;IAED,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACxB,CAAC;IAED,QAAQ,CAAC,IAAY;QACnB,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC;YAC3D,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;gBAChC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;YAC5C,CAAC;QACH,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,mBAAmB,IAAI,EAAE,CAAC,CAAC;QAC7C,CAAC;QACD,OAAO,MAAM,CAAC,CAAC,CAAC,CAAC;IACnB,CAAC;IAED,WAAW,CAAC,IAAY;QACtB,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,0BAA0B,IAAI,EAAE,CAAC,CAAC;QACpD,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,UAAU,CAAC,KAAa,EAAE,IAAY;QAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QACrC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;YACrC,MAAM,IAAI,KAAK,CAAC,0BAA0B,IAAI,EAAE,CAAC,CAAC;QACpD,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;CACF;AAED,MAAM,UAAU,QAAQ,CAAC,IAAc,EAAE,IAAY;IACnD,OAAO,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,IAAc,EAAE,IAAY;IACtD,OAAO,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AAClD,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function timestampId(prefix: string, now: Date, suffix?: string): string;
@@ -0,0 +1,8 @@
1
+ export function timestampId(prefix, now, suffix) {
2
+ const timestamp = now
3
+ .toISOString()
4
+ .replace(/[-:.TZ]/g, "")
5
+ .slice(0, 14);
6
+ return suffix ? `${prefix}-${timestamp}-${suffix}` : `${prefix}-${timestamp}`;
7
+ }
8
+ //# sourceMappingURL=ids.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ids.js","sourceRoot":"","sources":["../../src/parsing/ids.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,WAAW,CAAC,MAAc,EAAE,GAAS,EAAE,MAAe;IACpE,MAAM,SAAS,GAAG,GAAG;SAClB,WAAW,EAAE;SACb,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;SACvB,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAChB,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,SAAS,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,SAAS,EAAE,CAAC;AAChF,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function helpText(): string;
@@ -0,0 +1,14 @@
1
+ export function helpText() {
2
+ return `arc-agency
3
+
4
+ Commands:
5
+ execute --request "..." [--runtime opencode|local]
6
+ doctor [--repo-root "."]
7
+ verify --level simple-ui [--request "..."] [--request-id "..."]
8
+ verify --level interactive-ui [--request "..."] [--request-id "..."]
9
+ verify --level data-driven [--request "..."] [--request-id "..."]
10
+ verify --level auth-sensitive [--request "..."] [--request-id "..."]
11
+ verify --level existing-project [--request "..."] [--request-id "..."]
12
+ `;
13
+ }
14
+ //# sourceMappingURL=help.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"help.js","sourceRoot":"","sources":["../../src/presentation/help.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,QAAQ;IACtB,OAAO;;;;;;;;;;CAUR,CAAC;AACF,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { type VerificationLevel } from "@arc-foundry/core";
2
+ export declare function defaultRequestFor(level: VerificationLevel): string;
@@ -0,0 +1,16 @@
1
+ export function defaultRequestFor(level) {
2
+ if (level === "existing-project") {
3
+ return "Modify the existing Client Delivery Portal to add delivery-risk review while preserving approved project memory, accepted ADR boundaries, local project data, and stable status language.";
4
+ }
5
+ if (level === "auth-sensitive") {
6
+ return "Create a permission-sensitive client workspace with role-based project visibility and admin-only access approval.";
7
+ }
8
+ if (level === "data-driven") {
9
+ return "Create a channel performance dashboard with summary metrics, filtering, sorting, loading and empty states, and CSV export.";
10
+ }
11
+ if (level === "interactive-ui") {
12
+ return "Create a contact form with client-side validation, error messages, success state, and disabled submit while sending.";
13
+ }
14
+ return "Add a responsive pricing card component with three plans and a highlighted recommended plan.";
15
+ }
16
+ //# sourceMappingURL=requests.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"requests.js","sourceRoot":"","sources":["../src/requests.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,iBAAiB,CAAC,KAAwB;IACxD,IAAI,KAAK,KAAK,kBAAkB,EAAE,CAAC;QACjC,OAAO,2LAA2L,CAAC;IACrM,CAAC;IACD,IAAI,KAAK,KAAK,gBAAgB,EAAE,CAAC;QAC/B,OAAO,mHAAmH,CAAC;IAC7H,CAAC;IACD,IAAI,KAAK,KAAK,aAAa,EAAE,CAAC;QAC5B,OAAO,4HAA4H,CAAC;IACtI,CAAC;IACD,IAAI,KAAK,KAAK,gBAAgB,EAAE,CAAC;QAC/B,OAAO,sHAAsH,CAAC;IAChI,CAAC;IACD,OAAO,8FAA8F,CAAC;AACxG,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { type CommandSummary } from "./types.js";
2
+ export declare function summarizeCommands(commands: Array<{
3
+ purpose?: string;
4
+ command: string;
5
+ exitCode: number | null;
6
+ durationMs: number;
7
+ }>): CommandSummary[];
@@ -0,0 +1,9 @@
1
+ export function summarizeCommands(commands) {
2
+ return commands.map(({ purpose, command, exitCode, durationMs }) => ({
3
+ purpose,
4
+ command,
5
+ exitCode,
6
+ durationMs,
7
+ }));
8
+ }
9
+ //# sourceMappingURL=command-summary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"command-summary.js","sourceRoot":"","sources":["../../src/result-format/command-summary.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,iBAAiB,CAC/B,QAKE;IAEF,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;QACnE,OAAO;QACP,OAAO;QACP,QAAQ;QACR,UAAU;KACX,CAAC,CAAC,CAAC;AACN,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { type ExecuteResult } from "./types.js";
2
+ export declare function formatExecuteResult(result: ExecuteResult, runtime: "local" | "opencode"): Record<string, unknown>;
@@ -0,0 +1,13 @@
1
+ import { summarizeCommands } from "./command-summary.js";
2
+ import { summarizeAgentStages } from "./stage-summary.js";
3
+ export function formatExecuteResult(result, runtime) {
4
+ return {
5
+ status: result.status,
6
+ runDir: result.runDir,
7
+ artifacts: result.artifacts,
8
+ runtime,
9
+ agentStages: summarizeAgentStages(result.agentStages),
10
+ commands: summarizeCommands(result.commands),
11
+ };
12
+ }
13
+ //# sourceMappingURL=execute-result.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execute-result.js","sourceRoot":"","sources":["../../src/result-format/execute-result.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAG1D,MAAM,UAAU,mBAAmB,CACjC,MAAqB,EACrB,OAA6B;IAE7B,OAAO;QACL,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,OAAO;QACP,WAAW,EAAE,oBAAoB,CAAC,MAAM,CAAC,WAAW,CAAC;QACrD,QAAQ,EAAE,iBAAiB,CAAC,MAAM,CAAC,QAAQ,CAAC;KAC7C,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { type ExecuteResult } from "./types.js";
2
+ type ExecuteStage = ExecuteResult["agentStages"][number];
3
+ export declare function summarizeAgentStages(stages: ExecuteStage[]): Record<string, unknown>[];
4
+ export {};
@@ -0,0 +1,23 @@
1
+ export function summarizeAgentStages(stages) {
2
+ return stages.map((stage) => "command" in stage ? summarizeOpenCodeStage(stage) : summarizeLocalStage(stage));
3
+ }
4
+ function summarizeOpenCodeStage(stage) {
5
+ return {
6
+ stage: stage.stage,
7
+ agent: stage.agent,
8
+ command: stage.command.command,
9
+ exitCode: stage.command.exitCode,
10
+ transcriptRefs: stage.transcriptRefs,
11
+ parsed: Boolean(stage.parsedOutput),
12
+ parsingError: stage.parsingError,
13
+ };
14
+ }
15
+ function summarizeLocalStage(stage) {
16
+ return {
17
+ stage: stage.stage,
18
+ agent: stage.agent,
19
+ runtime: stage.runtime,
20
+ transcriptRef: stage.transcriptRef,
21
+ };
22
+ }
23
+ //# sourceMappingURL=stage-summary.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stage-summary.js","sourceRoot":"","sources":["../../src/result-format/stage-summary.ts"],"names":[],"mappings":"AAIA,MAAM,UAAU,oBAAoB,CAAC,MAAsB;IACzD,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAC1B,SAAS,IAAI,KAAK,CAAC,CAAC,CAAC,sBAAsB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAChF,CAAC;AACJ,CAAC;AAED,SAAS,sBAAsB,CAAC,KAAkD;IAChF,OAAO;QACL,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,OAAO;QAC9B,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC,QAAQ;QAChC,cAAc,EAAE,KAAK,CAAC,cAAc;QACpC,MAAM,EAAE,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC;QACnC,YAAY,EAAE,KAAK,CAAC,YAAY;KACjC,CAAC;AACJ,CAAC;AAED,SAAS,mBAAmB,CAAC,KAAkD;IAC7E,OAAO;QACL,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,aAAa,EAAE,KAAK,CAAC,aAAa;KACnC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { type runAgencyExecution, type runAgencyWorkflow, type runLocalAgencyExecution } from "@arcfoundry/core";
2
+ export type AgencyExecutionResult = Awaited<ReturnType<typeof runAgencyExecution>>;
3
+ export type LocalAgencyExecutionResult = Awaited<ReturnType<typeof runLocalAgencyExecution>>;
4
+ export type AgencyWorkflowResult = Awaited<ReturnType<typeof runAgencyWorkflow>>;
5
+ export type ExecuteResult = AgencyExecutionResult | LocalAgencyExecutionResult;
6
+ export interface CommandSummary {
7
+ purpose?: string;
8
+ command: string;
9
+ exitCode: number | null;
10
+ durationMs: number;
11
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/result-format/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ import { type AgencyWorkflowResult } from "./types.js";
2
+ export declare function formatVerificationResult(result: AgencyWorkflowResult): Record<string, unknown>;
@@ -0,0 +1,10 @@
1
+ import { summarizeCommands } from "./command-summary.js";
2
+ export function formatVerificationResult(result) {
3
+ return {
4
+ status: result.status,
5
+ runDir: result.runDir,
6
+ artifacts: result.artifacts,
7
+ commands: summarizeCommands(result.commands),
8
+ };
9
+ }
10
+ //# sourceMappingURL=verification-result.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verification-result.js","sourceRoot":"","sources":["../../src/result-format/verification-result.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAGzD,MAAM,UAAU,wBAAwB,CAAC,MAA4B;IACnE,OAAO;QACL,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,MAAM,EAAE,MAAM,CAAC,MAAM;QACrB,SAAS,EAAE,MAAM,CAAC,SAAS;QAC3B,QAAQ,EAAE,iBAAiB,CAAC,MAAM,CAAC,QAAQ,CAAC;KAC7C,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { formatExecuteResult } from "./result-format/execute-result.js";
2
+ export { formatVerificationResult } from "./result-format/verification-result.js";
@@ -0,0 +1,3 @@
1
+ export { formatExecuteResult } from "./result-format/execute-result.js";
2
+ export { formatVerificationResult } from "./result-format/verification-result.js";
3
+ //# sourceMappingURL=result-format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"result-format.js","sourceRoot":"","sources":["../src/result-format.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,wBAAwB,EAAE,MAAM,wCAAwC,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { inspectAgencyContracts, runAgencyExecution, runAgencyWorkflow, runLocalAgencyExecution } from "@arcfoundry/core";
2
+ export declare const productionCliDependencies: {
3
+ cwd: () => string;
4
+ now: () => Date;
5
+ stdout: (message: string) => void;
6
+ runAgencyExecution: typeof runAgencyExecution;
7
+ runAgencyWorkflow: typeof runAgencyWorkflow;
8
+ runLocalAgencyExecution: typeof runLocalAgencyExecution;
9
+ inspectAgencyContracts: typeof inspectAgencyContracts;
10
+ };
11
+ export type CliDependencies = typeof productionCliDependencies;
@@ -0,0 +1,11 @@
1
+ import { inspectAgencyContracts, runAgencyExecution, runAgencyWorkflow, runLocalAgencyExecution, } from "@arcfoundry/core";
2
+ export const productionCliDependencies = {
3
+ cwd: () => process.cwd(),
4
+ now: () => new Date(),
5
+ stdout: (message) => console.log(message),
6
+ runAgencyExecution,
7
+ runAgencyWorkflow,
8
+ runLocalAgencyExecution,
9
+ inspectAgencyContracts,
10
+ };
11
+ //# sourceMappingURL=dependencies.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dependencies.js","sourceRoot":"","sources":["../../src/runtime/dependencies.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,kBAAkB,EAClB,iBAAiB,EACjB,uBAAuB,GACxB,MAAM,kBAAkB,CAAC;AAE1B,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACvC,GAAG,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE;IACxB,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE;IACrB,MAAM,EAAE,CAAC,OAAe,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;IACjD,kBAAkB;IAClB,iBAAiB;IACjB,uBAAuB;IACvB,sBAAsB;CACvB,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { runAgencyExecution, runAgencyWorkflow, runLocalAgencyExecution } from "@arc-foundry/core";
2
+ export declare const productionCliDependencies: {
3
+ cwd: () => string;
4
+ now: () => Date;
5
+ stdout: (message: string) => void;
6
+ runAgencyExecution: typeof runAgencyExecution;
7
+ runAgencyWorkflow: typeof runAgencyWorkflow;
8
+ runLocalAgencyExecution: typeof runLocalAgencyExecution;
9
+ };
10
+ export type CliDependencies = typeof productionCliDependencies;
@@ -0,0 +1,10 @@
1
+ import { runAgencyExecution, runAgencyWorkflow, runLocalAgencyExecution } from "@arc-foundry/core";
2
+ export const productionCliDependencies = {
3
+ cwd: () => process.cwd(),
4
+ now: () => new Date(),
5
+ stdout: (message) => console.log(message),
6
+ runAgencyExecution,
7
+ runAgencyWorkflow,
8
+ runLocalAgencyExecution,
9
+ };
10
+ //# sourceMappingURL=runtime-deps.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime-deps.js","sourceRoot":"","sources":["../src/runtime-deps.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAEnG,MAAM,CAAC,MAAM,yBAAyB,GAAG;IACvC,GAAG,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE;IACxB,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE;IACrB,MAAM,EAAE,CAAC,OAAe,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;IACjD,kBAAkB;IAClB,iBAAiB;IACjB,uBAAuB;CACxB,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { type VerificationLevel } from "@arc-foundry/core";
2
+ export declare function parseVerificationLevel(value: string): VerificationLevel;
@@ -0,0 +1,14 @@
1
+ const verificationLevels = [
2
+ "simple-ui",
3
+ "interactive-ui",
4
+ "data-driven",
5
+ "auth-sensitive",
6
+ "existing-project",
7
+ ];
8
+ export function parseVerificationLevel(value) {
9
+ if (verificationLevels.includes(value)) {
10
+ return value;
11
+ }
12
+ throw new Error(`Supported verification levels are ${verificationLevels.join(", ")}; received ${value}`);
13
+ }
14
+ //# sourceMappingURL=verification-levels.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verification-levels.js","sourceRoot":"","sources":["../src/verification-levels.ts"],"names":[],"mappings":"AAEA,MAAM,kBAAkB,GAAG;IACzB,WAAW;IACX,gBAAgB;IAChB,aAAa;IACb,gBAAgB;IAChB,kBAAkB;CAC6B,CAAC;AAElD,MAAM,UAAU,sBAAsB,CAAC,KAAa;IAClD,IAAI,kBAAkB,CAAC,QAAQ,CAAC,KAA0B,CAAC,EAAE,CAAC;QAC5D,OAAO,KAA0B,CAAC;IACpC,CAAC;IACD,MAAM,IAAI,KAAK,CACb,qCAAqC,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,KAAK,EAAE,CACxF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { type CliArguments } from "./arguments.js";
2
+ import { type CliDependencies } from "./runtime-deps.js";
3
+ export declare function runVerifyCommand(args: CliArguments, dependencies: CliDependencies): Promise<number>;
@@ -0,0 +1,21 @@
1
+ import path from "node:path";
2
+ import { timestampId } from "./ids.js";
3
+ import { defaultRequestFor } from "./requests.js";
4
+ import { formatVerificationResult } from "./result-format.js";
5
+ import { parseVerificationLevel } from "./verification-levels.js";
6
+ export async function runVerifyCommand(args, dependencies) {
7
+ const level = parseVerificationLevel(args.readFlag("--level") ?? "simple-ui");
8
+ const request = args.readFlag("--request") ?? defaultRequestFor(level);
9
+ const repoRoot = path.resolve(dependencies.cwd(), args.readFlag("--repo-root") ?? ".");
10
+ const requestId = args.readFlag("--request-id") ?? timestampId("vr", dependencies.now(), level);
11
+ const result = await dependencies.runAgencyWorkflow({
12
+ repoRoot,
13
+ projectId: "arc-foundry",
14
+ requestId,
15
+ clientRequest: request,
16
+ level,
17
+ });
18
+ dependencies.stdout(JSON.stringify(formatVerificationResult(result), null, 2));
19
+ return result.status === "passed" ? 0 : 1;
20
+ }
21
+ //# sourceMappingURL=verify-command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verify-command.js","sourceRoot":"","sources":["../src/verify-command.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAE9D,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAElE,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,IAAkB,EAClB,YAA6B;IAE7B,MAAM,KAAK,GAAG,sBAAsB,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,WAAW,CAAC,CAAC;IAC9E,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,iBAAiB,CAAC,KAAK,CAAC,CAAC;IACvE,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,GAAG,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,GAAG,CAAC,CAAC;IACvF,MAAM,SAAS,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,WAAW,CAAC,IAAI,EAAE,YAAY,CAAC,GAAG,EAAE,EAAE,KAAK,CAAC,CAAC;IAEhG,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,iBAAiB,CAAC;QAClD,QAAQ;QACR,SAAS,EAAE,aAAa;QACxB,SAAS;QACT,aAAa,EAAE,OAAO;QACtB,KAAK;KACN,CAAC,CAAC;IAEH,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,wBAAwB,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC/E,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC5C,CAAC"}
package/package.json ADDED
@@ -0,0 +1,23 @@
1
+ {
2
+ "name": "@arcfoundry/cli",
3
+ "version": "0.1.2",
4
+ "description": "Command line interface for the Arc Foundry governed agentic web agency runtime.",
5
+ "license": "UNLICENSED",
6
+ "bin": {
7
+ "arc-agency": "./dist/main.js"
8
+ },
9
+ "files": [
10
+ "dist",
11
+ "README.md"
12
+ ],
13
+ "type": "module",
14
+ "publishConfig": {
15
+ "access": "public"
16
+ },
17
+ "dependencies": {
18
+ "@arcfoundry/core": "0.1.2"
19
+ },
20
+ "engines": {
21
+ "node": "^24.11.0"
22
+ }
23
+ }