@interf/compiler 0.9.4 → 0.13.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 (222) hide show
  1. package/README.md +96 -91
  2. package/TRADEMARKS.md +2 -13
  3. package/agent-skills/interf-actions/SKILL.md +97 -32
  4. package/agent-skills/interf-actions/references/cli.md +124 -71
  5. package/builtin-methods/interf-default/README.md +3 -4
  6. package/builtin-methods/interf-default/compile/stages/shape/SKILL.md +2 -2
  7. package/builtin-methods/interf-default/compile/stages/summarize/SKILL.md +2 -1
  8. package/builtin-methods/interf-default/improve/SKILL.md +1 -1
  9. package/builtin-methods/interf-default/method.json +10 -4
  10. package/builtin-methods/interf-default/method.schema.json +0 -9
  11. package/builtin-methods/interf-default/use/query/SKILL.md +5 -5
  12. package/dist/cli/commands/compile.d.ts +9 -31
  13. package/dist/cli/commands/compile.js +75 -388
  14. package/dist/cli/commands/doctor.js +1 -1
  15. package/dist/cli/commands/login.d.ts +7 -0
  16. package/dist/cli/commands/login.js +39 -0
  17. package/dist/cli/commands/logout.d.ts +2 -0
  18. package/dist/cli/commands/logout.js +16 -0
  19. package/dist/cli/commands/method.d.ts +2 -0
  20. package/dist/cli/commands/method.js +113 -0
  21. package/dist/cli/commands/prep.d.ts +2 -0
  22. package/dist/cli/commands/prep.js +134 -0
  23. package/dist/cli/commands/reset.d.ts +8 -1
  24. package/dist/cli/commands/reset.js +47 -15
  25. package/dist/cli/commands/runs.d.ts +2 -0
  26. package/dist/cli/commands/runs.js +120 -0
  27. package/dist/cli/commands/status.d.ts +6 -1
  28. package/dist/cli/commands/status.js +61 -220
  29. package/dist/cli/commands/test.d.ts +6 -15
  30. package/dist/cli/commands/test.js +63 -342
  31. package/dist/cli/commands/web.d.ts +0 -9
  32. package/dist/cli/commands/web.js +140 -367
  33. package/dist/cli/commands/wizard.d.ts +9 -0
  34. package/dist/cli/commands/wizard.js +442 -0
  35. package/dist/cli/index.d.ts +7 -6
  36. package/dist/cli/index.js +13 -10
  37. package/dist/compiler-ui/404.html +1 -1
  38. package/dist/compiler-ui/__next.__PAGE__.txt +2 -2
  39. package/dist/compiler-ui/__next._full.txt +3 -3
  40. package/dist/compiler-ui/__next._head.txt +1 -1
  41. package/dist/compiler-ui/__next._index.txt +2 -2
  42. package/dist/compiler-ui/__next._tree.txt +2 -2
  43. package/dist/compiler-ui/_next/static/chunks/045gole2ojo3g.css +3 -0
  44. package/dist/compiler-ui/_next/static/chunks/17t-lulmyawg5.js +89 -0
  45. package/dist/compiler-ui/_not-found/__next._full.txt +2 -2
  46. package/dist/compiler-ui/_not-found/__next._head.txt +1 -1
  47. package/dist/compiler-ui/_not-found/__next._index.txt +2 -2
  48. package/dist/compiler-ui/_not-found/__next._not-found.__PAGE__.txt +1 -1
  49. package/dist/compiler-ui/_not-found/__next._not-found.txt +1 -1
  50. package/dist/compiler-ui/_not-found/__next._tree.txt +2 -2
  51. package/dist/compiler-ui/_not-found.html +1 -1
  52. package/dist/compiler-ui/_not-found.txt +2 -2
  53. package/dist/compiler-ui/index.html +1 -1
  54. package/dist/compiler-ui/index.txt +3 -3
  55. package/dist/index.d.ts +0 -23
  56. package/dist/index.js +0 -16
  57. package/dist/packages/agents/lib/shells.d.ts +1 -1
  58. package/dist/packages/agents/lib/shells.js +113 -54
  59. package/dist/packages/agents/lib/user-config.d.ts +4 -2
  60. package/dist/packages/agents/lib/user-config.js +15 -7
  61. package/dist/packages/compiler/compiled-paths.d.ts +9 -2
  62. package/dist/packages/compiler/compiled-paths.js +30 -15
  63. package/dist/packages/compiler/compiled-pipeline.js +23 -3
  64. package/dist/packages/compiler/compiled-stage-plan.js +4 -0
  65. package/dist/packages/compiler/compiled-target.d.ts +1 -1
  66. package/dist/packages/compiler/compiled-target.js +1 -1
  67. package/dist/packages/compiler/index.d.ts +1 -0
  68. package/dist/packages/compiler/index.js +1 -0
  69. package/dist/packages/compiler/lib/schema.d.ts +27 -32
  70. package/dist/packages/compiler/lib/schema.js +2 -13
  71. package/dist/packages/compiler/method-runs.d.ts +2 -3
  72. package/dist/packages/compiler/method-runs.js +2 -3
  73. package/dist/packages/compiler/reset.js +3 -1
  74. package/dist/packages/compiler/runtime-contracts.js +0 -3
  75. package/dist/packages/compiler/runtime-prompt.js +1 -1
  76. package/dist/packages/compiler/source-files.d.ts +46 -0
  77. package/dist/packages/compiler/source-files.js +149 -0
  78. package/dist/packages/compiler/state-artifacts.d.ts +3 -2
  79. package/dist/packages/compiler/state-artifacts.js +4 -3
  80. package/dist/packages/compiler/state-io.d.ts +3 -2
  81. package/dist/packages/compiler/state-io.js +11 -5
  82. package/dist/packages/compiler/state-paths.d.ts +2 -1
  83. package/dist/packages/compiler/state-paths.js +6 -3
  84. package/dist/packages/compiler/state-view.d.ts +3 -2
  85. package/dist/packages/compiler/state-view.js +18 -28
  86. package/dist/packages/compiler/state.d.ts +4 -4
  87. package/dist/packages/compiler/state.js +3 -3
  88. package/dist/packages/contracts/index.d.ts +1 -1
  89. package/dist/packages/contracts/lib/preparation-paths.d.ts +117 -0
  90. package/dist/packages/contracts/lib/preparation-paths.js +177 -0
  91. package/dist/packages/contracts/lib/schema.d.ts +85 -6
  92. package/dist/packages/contracts/lib/schema.js +46 -2
  93. package/dist/packages/execution/lib/schema.d.ts +50 -57
  94. package/dist/packages/execution/lib/schema.js +1 -2
  95. package/dist/packages/local-service/action-definitions.d.ts +246 -0
  96. package/dist/packages/local-service/action-definitions.js +1147 -0
  97. package/dist/packages/local-service/action-planner.d.ts +9 -0
  98. package/dist/packages/local-service/action-planner.js +135 -0
  99. package/dist/packages/local-service/action-values.d.ts +1 -23
  100. package/dist/packages/local-service/action-values.js +1 -31
  101. package/dist/packages/local-service/client.d.ts +76 -46
  102. package/dist/packages/local-service/client.js +184 -149
  103. package/dist/packages/local-service/connection-config.d.ts +38 -0
  104. package/dist/packages/local-service/connection-config.js +75 -0
  105. package/dist/packages/local-service/index.d.ts +14 -7
  106. package/dist/packages/local-service/index.js +8 -4
  107. package/dist/packages/local-service/instance-paths.d.ts +100 -0
  108. package/dist/packages/local-service/instance-paths.js +165 -0
  109. package/dist/packages/local-service/lib/schema.d.ts +689 -2575
  110. package/dist/packages/local-service/lib/schema.js +260 -101
  111. package/dist/packages/local-service/native-run-handlers.d.ts +23 -0
  112. package/dist/{cli/commands/compile-controller.js → packages/local-service/native-run-handlers.js} +204 -20
  113. package/dist/packages/local-service/preparation-store.d.ts +92 -0
  114. package/dist/packages/local-service/preparation-store.js +171 -0
  115. package/dist/{cli/commands/check-draft.d.ts → packages/local-service/readiness-check-draft.d.ts} +2 -2
  116. package/dist/packages/local-service/routes.d.ts +33 -11
  117. package/dist/packages/local-service/routes.js +44 -15
  118. package/dist/packages/local-service/run-observability.js +25 -27
  119. package/dist/packages/local-service/runtime-caches.d.ts +76 -0
  120. package/dist/packages/local-service/runtime-caches.js +191 -0
  121. package/dist/packages/local-service/runtime-event-applier.d.ts +12 -0
  122. package/dist/packages/local-service/runtime-event-applier.js +177 -0
  123. package/dist/packages/local-service/runtime-persistence.d.ts +47 -0
  124. package/dist/packages/local-service/runtime-persistence.js +137 -0
  125. package/dist/packages/local-service/runtime-proposal-helpers.d.ts +35 -0
  126. package/dist/packages/local-service/runtime-proposal-helpers.js +251 -0
  127. package/dist/packages/local-service/runtime-resource-builders.d.ts +52 -0
  128. package/dist/packages/local-service/runtime-resource-builders.js +149 -0
  129. package/dist/packages/local-service/runtime.d.ts +201 -44
  130. package/dist/packages/local-service/runtime.js +1062 -1106
  131. package/dist/packages/local-service/server.d.ts +15 -0
  132. package/dist/packages/local-service/server.js +651 -233
  133. package/dist/packages/local-service/service-registry.d.ts +47 -0
  134. package/dist/packages/local-service/service-registry.js +137 -0
  135. package/dist/packages/method-authoring/method-authoring.d.ts +1 -1
  136. package/dist/packages/method-authoring/method-authoring.js +2 -2
  137. package/dist/packages/method-authoring/method-improvement.js +1 -1
  138. package/dist/packages/method-package/builtin-compiled-method.d.ts +4 -5
  139. package/dist/packages/method-package/builtin-compiled-method.js +8 -14
  140. package/dist/packages/method-package/context-interface.d.ts +4 -40
  141. package/dist/packages/method-package/context-interface.js +1 -23
  142. package/dist/packages/method-package/interf-method-package.d.ts +4 -4
  143. package/dist/packages/method-package/interf-method-package.js +21 -33
  144. package/dist/packages/method-package/local-methods.d.ts +10 -6
  145. package/dist/packages/method-package/local-methods.js +57 -39
  146. package/dist/packages/method-package/method-definitions.d.ts +8 -34
  147. package/dist/packages/method-package/method-definitions.js +49 -37
  148. package/dist/packages/method-package/method-helpers.d.ts +1 -13
  149. package/dist/packages/method-package/method-helpers.js +8 -42
  150. package/dist/packages/method-package/method-review-paths.d.ts +1 -1
  151. package/dist/packages/method-package/method-review-paths.js +5 -5
  152. package/dist/packages/method-package/method-stage-runner.js +2 -2
  153. package/dist/packages/method-package/user-methods.d.ts +17 -0
  154. package/dist/packages/method-package/user-methods.js +77 -0
  155. package/dist/packages/project-model/index.d.ts +1 -1
  156. package/dist/packages/project-model/index.js +1 -1
  157. package/dist/packages/project-model/interf-detect.d.ts +8 -3
  158. package/dist/packages/project-model/interf-detect.js +34 -34
  159. package/dist/packages/project-model/interf-scaffold.d.ts +3 -3
  160. package/dist/packages/project-model/interf-scaffold.js +23 -32
  161. package/dist/packages/project-model/lib/schema.js +38 -1
  162. package/dist/packages/project-model/preparation-entries.d.ts +11 -0
  163. package/dist/packages/project-model/preparation-entries.js +49 -0
  164. package/dist/packages/project-model/source-config.d.ts +11 -10
  165. package/dist/packages/project-model/source-config.js +83 -44
  166. package/dist/packages/project-model/source-folders.d.ts +5 -5
  167. package/dist/packages/project-model/source-folders.js +14 -14
  168. package/dist/packages/shared/filesystem.d.ts +7 -0
  169. package/dist/packages/shared/filesystem.js +97 -10
  170. package/dist/packages/testing/lib/schema.d.ts +12 -13
  171. package/dist/packages/testing/lib/schema.js +4 -5
  172. package/dist/packages/testing/readiness-check-run.d.ts +7 -7
  173. package/dist/packages/testing/readiness-check-run.js +46 -51
  174. package/dist/packages/testing/test-execution.js +6 -6
  175. package/dist/packages/testing/test-paths.js +4 -3
  176. package/dist/packages/testing/test-sandbox.d.ts +0 -1
  177. package/dist/packages/testing/test-sandbox.js +14 -30
  178. package/dist/packages/testing/test-targets.d.ts +1 -1
  179. package/dist/packages/testing/test-targets.js +6 -6
  180. package/dist/packages/testing/test.d.ts +1 -1
  181. package/dist/packages/testing/test.js +1 -1
  182. package/package.json +6 -26
  183. package/LICENSE +0 -183
  184. package/dist/cli/commands/compile-controller.d.ts +0 -17
  185. package/dist/cli/commands/compiled-flow.d.ts +0 -25
  186. package/dist/cli/commands/compiled-flow.js +0 -112
  187. package/dist/cli/commands/control-path.d.ts +0 -11
  188. package/dist/cli/commands/control-path.js +0 -72
  189. package/dist/cli/commands/create-method-wizard.d.ts +0 -76
  190. package/dist/cli/commands/create-method-wizard.js +0 -465
  191. package/dist/cli/commands/create.d.ts +0 -8
  192. package/dist/cli/commands/create.js +0 -189
  193. package/dist/cli/commands/default.d.ts +0 -2
  194. package/dist/cli/commands/default.js +0 -39
  195. package/dist/cli/commands/executor-flow.d.ts +0 -29
  196. package/dist/cli/commands/executor-flow.js +0 -163
  197. package/dist/cli/commands/init.d.ts +0 -11
  198. package/dist/cli/commands/init.js +0 -784
  199. package/dist/cli/commands/list.d.ts +0 -2
  200. package/dist/cli/commands/list.js +0 -30
  201. package/dist/cli/commands/preparation-selection.d.ts +0 -6
  202. package/dist/cli/commands/preparation-selection.js +0 -11
  203. package/dist/cli/commands/source-config-wizard.d.ts +0 -52
  204. package/dist/cli/commands/source-config-wizard.js +0 -680
  205. package/dist/cli/commands/test-flow.d.ts +0 -58
  206. package/dist/cli/commands/test-flow.js +0 -231
  207. package/dist/cli/commands/verify.d.ts +0 -2
  208. package/dist/cli/commands/verify.js +0 -94
  209. package/dist/compiler-ui/_next/static/chunks/0d~8t0zm6545p.js +0 -118
  210. package/dist/compiler-ui/_next/static/chunks/0xnel.ax9a.2c.css +0 -3
  211. package/dist/packages/compiler/raw-snapshot.d.ts +0 -49
  212. package/dist/packages/compiler/raw-snapshot.js +0 -101
  213. package/dist/packages/method-package/index.d.ts +0 -11
  214. package/dist/packages/method-package/index.js +0 -11
  215. package/dist/packages/method-package/method-stage-policy.d.ts +0 -5
  216. package/dist/packages/method-package/method-stage-policy.js +0 -31
  217. package/dist/packages/project-model/project-paths.d.ts +0 -12
  218. package/dist/packages/project-model/project-paths.js +0 -33
  219. /package/dist/compiler-ui/_next/static/{j7pdoqWrl4YJrJUVnksbl → C6vVfy3aeYuIO3d2AoNvC}/_buildManifest.js +0 -0
  220. /package/dist/compiler-ui/_next/static/{j7pdoqWrl4YJrJUVnksbl → C6vVfy3aeYuIO3d2AoNvC}/_clientMiddlewareManifest.js +0 -0
  221. /package/dist/compiler-ui/_next/static/{j7pdoqWrl4YJrJUVnksbl → C6vVfy3aeYuIO3d2AoNvC}/_ssgManifest.js +0 -0
  222. /package/dist/{cli/commands/check-draft.js → packages/local-service/readiness-check-draft.js} +0 -0
@@ -1,18 +1,9 @@
1
1
  import type { CommandModule } from "yargs";
2
- import type { SourcePreparationConfig } from "../../packages/project-model/lib/schema.js";
3
- import { type AgentTestMatrixRow } from "./test-flow.js";
4
- type TestMode = "raw" | "compiled" | "both";
5
- export interface TestCommandResult {
6
- sourcePath: string;
7
- preparationConfig: SourcePreparationConfig;
8
- builtCompiledPath: string | null;
9
- mode: TestMode;
10
- rows: AgentTestMatrixRow[];
2
+ interface TestArgs {
3
+ prepId: string;
4
+ target?: "source-files" | "portable-context" | "both";
5
+ url?: string;
6
+ token?: string;
11
7
  }
12
- export interface TestCommandFailure {
13
- message: string;
14
- hints: string[];
15
- }
16
- export declare const testCommand: CommandModule;
17
- export declare function runTestCommand(argv?: Record<string, unknown>): Promise<boolean>;
8
+ export declare const testCommand: CommandModule<unknown, TestArgs>;
18
9
  export {};
@@ -1,351 +1,72 @@
1
+ /**
2
+ * `interf test <prep-id>` — start a readiness-check (test) run for a preparation.
3
+ *
4
+ * interf test bristol
5
+ * interf test bristol --target source-files
6
+ * interf test bristol --target portable-context
7
+ * interf test bristol --target both
8
+ */
1
9
  import chalk from "chalk";
2
- import * as p from "@clack/prompts";
3
- import { detectInterf, resolveSourceControlPath, } from "../../packages/project-model/interf.js";
4
- import { loadCompiledPreparationConfig, sourcePreparationConfigFromInterfConfig, } from "../../packages/project-model/source-config.js";
5
- import { addExecutionProfileOptions, executionProfileFromArgv, } from "../../packages/agents/lib/execution-profile.js";
6
- import { chooseCompiledConfigToBuild, findBuiltCompiledPath, } from "./compiled-flow.js";
7
- import { resolveConfiguredPreparationSelection } from "./preparation-selection.js";
8
- import { printAgentTestFailures, printAgentTestMatrix, printSavedTestComparisonState, } from "./test-flow.js";
9
- import { createCompiledTestTarget } from "../../packages/testing/test-targets.js";
10
- import { runReadinessChecksForExecutor, } from "../../packages/testing/readiness-check-run.js";
11
- import { resolveMethodId } from "../../packages/methods/method-resolution.js";
12
- import { listRunAgentOptions, promptForTestAgents, resolveNamedLocalExecutor, resolveOrConfigureLocalExecutor, } from "./executor-flow.js";
13
- import { submitTestRunToLocalService, waitForLocalTestRun, } from "../../packages/local-service/index.js";
14
- import { resolveCommandControlPath } from "./control-path.js";
15
- export const testCommand = {
16
- command: "test",
17
- describe: "Run readiness checks against source files and Portable Context",
18
- builder: (yargs) => addExecutionProfileOptions(yargs)
19
- .option("preparation", {
20
- type: "string",
21
- describe: "Preparation id to check when this Source Folder has more than one Preparation",
22
- })
23
- .option("target", {
24
- choices: ["both", "source-files", "portable-context"],
25
- describe: "Check source files, Portable Context, or both. Default: both when Portable Context exists, otherwise source files.",
26
- })
27
- .option("keep-sandboxes", {
28
- type: "boolean",
29
- default: false,
30
- describe: "Keep every readiness-check sandbox for review instead of pruning successful ones",
31
- })
32
- .option("agents", {
33
- type: "string",
34
- describe: "Comma-separated local agents to use for readiness checks, or `all`. Example: --agents claude-code,codex",
35
- }),
36
- handler: async (argv) => {
37
- await runTestCommand(argv);
38
- },
39
- };
40
- function readSandboxRetentionMode(argv) {
41
- const enabled = argv["keep-sandboxes"] ?? argv.keepSandboxes ?? false;
42
- return enabled ? "always" : "on-failure";
43
- }
44
- function readRequestedMode(argv) {
45
- const value = argv.target;
46
- const target = value === "source-files" || value === "portable-context" || value === "both"
47
- ? value
48
- : null;
49
- if (!target)
50
- return null;
51
- return modeFromTargetChoice(target);
52
- }
53
- function modeFromTargetChoice(target) {
54
- if (target === "source-files")
55
- return "raw";
56
- if (target === "portable-context")
57
- return "compiled";
58
- return "both";
59
- }
60
- function reportTestCommandFailure(argv, message, hints = []) {
61
- process.exitCode = 1;
62
- console.log(chalk.red(` ${message}`));
63
- for (const hint of hints) {
64
- console.log(chalk.dim(` ${hint}`));
65
- }
66
- const onFailure = typeof argv.onFailure === "function"
67
- ? argv.onFailure
68
- : null;
69
- void onFailure?.({ message, hints });
70
- return false;
71
- }
72
- async function promptTestMode(hasBuiltCompiled) {
73
- if (!hasBuiltCompiled) {
74
- return "raw";
75
- }
76
- const selected = await p.select({
77
- message: "What do you want to check?",
78
- options: [
79
- {
80
- value: "both",
81
- label: "Source files and Portable Context (Recommended)",
82
- hint: "Check whether the data is ready with and without Portable Context",
83
- },
84
- {
85
- value: "raw",
86
- label: "Source files only",
87
- hint: "Measure the current baseline on the Source Folder files",
88
- },
89
- {
90
- value: "compiled",
91
- label: "Portable Context only",
92
- hint: "Run the saved readiness checks against the current Portable Context",
93
- },
94
- ],
10
+ import { CONNECT_OR_ERROR_HINT, readActiveConnection } from "../../packages/local-service/connection-config.js";
11
+ function resolveConnection(args) {
12
+ const conn = readActiveConnection({
13
+ urlOverride: args.url,
14
+ authTokenOverride: args.token,
95
15
  });
96
- if (p.isCancel(selected))
97
- return null;
98
- return selected;
99
- }
100
- function parseRequestedAgents(argv) {
101
- const raw = argv.agents;
102
- if (typeof raw !== "string" || raw.trim().length === 0)
103
- return null;
104
- if (raw.trim() === "all") {
105
- return listRunAgentOptions().map((agent) => agent.name);
16
+ if (!conn) {
17
+ console.error(CONNECT_OR_ERROR_HINT);
18
+ process.exit(1);
106
19
  }
107
- return raw
108
- .split(",")
109
- .map((value) => value.trim())
110
- .filter((value) => value.length > 0);
20
+ return { url: conn.url.replace(/\/+$/, ""), token: conn.auth_token };
111
21
  }
112
- async function resolveSelectedTestAgents(options) {
113
- const requestedAgents = parseRequestedAgents(options.argv);
114
- if (requestedAgents && requestedAgents.length > 0) {
115
- const selected = [];
116
- for (const agentName of requestedAgents) {
117
- const resolved = resolveNamedLocalExecutor(agentName, {
118
- executionProfile: options.executionProfile,
119
- });
120
- if (!resolved.executor) {
121
- process.exitCode = 1;
122
- console.log(chalk.red(` ${resolved.error ?? `Could not resolve local agent \"${agentName}\".`}`));
123
- return null;
124
- }
125
- const option = listRunAgentOptions().find((agent) => agent.name === agentName);
126
- selected.push({
127
- name: agentName,
128
- label: option?.displayName ?? agentName,
129
- executor: resolved.executor,
130
- });
22
+ async function callJson(url, token, init = {}) {
23
+ const headers = new Headers(init.headers ?? {});
24
+ if (token)
25
+ headers.set("authorization", `Bearer ${token}`);
26
+ if (init.body && !headers.has("content-type"))
27
+ headers.set("content-type", "application/json");
28
+ const response = await fetch(url, { ...init, headers });
29
+ const raw = await response.text();
30
+ let body = null;
31
+ if (raw.length > 0) {
32
+ try {
33
+ body = JSON.parse(raw);
131
34
  }
132
- return selected;
133
- }
134
- if (process.stdin.isTTY && process.stdout.isTTY) {
135
- const prompted = await promptForTestAgents();
136
- if (prompted.cancelled)
137
- return null;
138
- if (prompted.agents.length > 0) {
139
- const selected = [];
140
- for (const agent of prompted.agents) {
141
- const resolved = resolveNamedLocalExecutor(agent.name, {
142
- executionProfile: options.executionProfile,
143
- });
144
- if (!resolved.executor) {
145
- process.exitCode = 1;
146
- console.log(chalk.red(` ${resolved.error ?? `Could not resolve local agent \"${agent.name}\".`}`));
147
- return null;
148
- }
149
- selected.push({
150
- name: agent.name,
151
- label: agent.displayName,
152
- executor: resolved.executor,
153
- });
154
- }
155
- return selected;
35
+ catch {
36
+ body = null;
156
37
  }
157
38
  }
158
- const resolved = await resolveOrConfigureLocalExecutor({
159
- preflight: true,
160
- executionProfile: options.executionProfile,
161
- purpose: "test",
162
- });
163
- if (!resolved.executor) {
164
- if (resolved.cancelled)
165
- return null;
166
- process.exitCode = 1;
167
- console.log(chalk.red(resolved.error ?? "No local agent detected."));
168
- return null;
169
- }
170
- return [
171
- {
172
- name: resolved.executor.name,
173
- label: resolved.executor.displayName,
174
- executor: resolved.executor,
175
- },
176
- ];
39
+ return { status: response.status, body, raw };
177
40
  }
178
- async function runModeForAgent(options) {
179
- const result = await runReadinessChecksForExecutor({
180
- sourcePath: options.sourcePath,
181
- preparationConfig: options.preparationConfig,
182
- portableContextPath: options.builtCompiledPath,
183
- mode: options.mode,
184
- preserveSandboxes: options.preserveSandboxes,
185
- executor: options.executor,
186
- runSuffix: options.executor.name,
187
- saveLatest: options.saveLatest,
188
- });
189
- return {
190
- agentLabel: options.executor.displayName,
191
- rawOutcome: result.rawOutcome,
192
- compiledOutcome: result.compiledOutcome,
193
- comparisonRunPath: result.comparisonRunPath,
194
- comparison: result.comparison,
195
- };
196
- }
197
- export async function runTestCommand(argv = {}) {
198
- const cwd = process.cwd();
199
- const detected = detectInterf(cwd);
200
- const sourcePath = typeof argv.sourcePath === "string" && argv.sourcePath.trim().length > 0
201
- ? argv.sourcePath.trim()
202
- : (detected ? resolveSourceControlPath(detected.path) : resolveCommandControlPath(cwd));
203
- const requestedPreparation = argv.preparation;
204
- const requestedPreparationName = typeof requestedPreparation === "string" && requestedPreparation.trim().length > 0
205
- ? requestedPreparation.trim()
206
- : null;
207
- const hintedPreparationConfig = (argv.preparationConfig ?? null);
208
- const selectedCompiled = detected
209
- ? (() => {
210
- const targetName = requestedPreparationName ?? hintedPreparationConfig?.name ?? detected.config.name;
211
- return resolveConfiguredPreparationSelection({
212
- sourcePath,
213
- requestedPreparationName: targetName,
214
- hintedPreparationConfig,
215
- }) ?? (targetName === detected.config.name
216
- ? (loadCompiledPreparationConfig(detected.path)
217
- ?? sourcePreparationConfigFromInterfConfig(detected.config))
218
- : null);
219
- })()
220
- : requestedPreparationName || hintedPreparationConfig
221
- ? resolveConfiguredPreparationSelection({
222
- sourcePath,
223
- requestedPreparationName,
224
- hintedPreparationConfig,
225
- })
226
- : await chooseCompiledConfigToBuild({
227
- sourcePath,
228
- selectMessage: "Which saved Preparation do you want to test?",
229
- });
230
- if (selectedCompiled === undefined)
231
- return false;
232
- if (!selectedCompiled) {
233
- if (requestedPreparationName) {
234
- return reportTestCommandFailure(argv, `Preparation "${requestedPreparationName}" is not saved in this Source Folder.`, ["Run `interf list` to see the saved Preparations."]);
235
- }
236
- return reportTestCommandFailure(argv, "No saved Preparations are configured for this Source Folder yet.", ["Start with `interf` or `interf init`."]);
237
- }
238
- if (selectedCompiled.checks.length === 0) {
239
- return reportTestCommandFailure(argv, `Preparation "${selectedCompiled.name}" does not have any readiness checks yet.`, [
240
- "Run `interf`, edit this Preparation, and add a few readiness checks first.",
241
- "Then rerun `interf test`.",
242
- ]);
243
- }
244
- const executionProfile = executionProfileFromArgv(argv);
245
- const preserveSandboxes = readSandboxRetentionMode(argv);
246
- const builtCompiledPath = detected?.config.name === selectedCompiled.name
247
- ? detected.path
248
- : findBuiltCompiledPath(sourcePath, selectedCompiled.name);
249
- const hasBuiltCompiled = builtCompiledPath
250
- ? createCompiledTestTarget(builtCompiledPath, selectedCompiled.name, resolveMethodId(selectedCompiled)).eligible
251
- : false;
252
- const requestedMode = readRequestedMode(argv);
253
- const selectedMode = requestedMode ?? (process.stdin.isTTY && process.stdout.isTTY
254
- ? await promptTestMode(hasBuiltCompiled)
255
- : (hasBuiltCompiled ? "both" : "raw"));
256
- if (!selectedMode)
257
- return false;
258
- if (selectedMode === "compiled" && !hasBuiltCompiled) {
259
- return reportTestCommandFailure(argv, `Preparation "${selectedCompiled.name}" does not have Portable Context agents can use yet.`, ["Run `interf compile` first."]);
260
- }
261
- if (selectedMode === "both" && !hasBuiltCompiled) {
262
- return reportTestCommandFailure(argv, `Preparation "${selectedCompiled.name}" does not have Portable Context agents can use yet, so Interf cannot compare source files and Portable Context.`, ["Run `interf compile` first, or rerun with `--target source-files`."]);
263
- }
264
- const mode = selectedMode;
265
- if (argv.skipService !== true) {
266
- const submitted = await submitTestRunToLocalService({
267
- projectPath: sourcePath,
268
- request: {
269
- preparation: selectedCompiled.name,
270
- mode,
271
- },
272
- });
273
- if (submitted) {
274
- console.log(chalk.dim(` Visible in Interf: ${submitted.serviceUrl}/`));
275
- let lastStatus = "";
276
- const completed = await waitForLocalTestRun({
277
- serviceUrl: submitted.serviceUrl,
278
- runId: submitted.resource.run_id,
279
- onUpdate(resource) {
280
- if (resource.status === lastStatus)
281
- return;
282
- lastStatus = resource.status;
283
- console.log(chalk.dim(` Readiness check run: ${resource.status}`));
284
- },
285
- });
286
- if (completed.status !== "succeeded") {
287
- return reportTestCommandFailure(argv, `Readiness check run ${completed.status}.`, completed.error ? [completed.error] : []);
288
- }
289
- const compiledScore = completed.comparison?.compiled;
290
- const rawScore = completed.comparison?.raw;
291
- if (compiledScore) {
292
- console.log(chalk.green(` Portable Context readiness checks: ${compiledScore.passed_cases}/${compiledScore.total_cases}`));
293
- }
294
- if (rawScore) {
295
- console.log(chalk.dim(` Source files readiness checks: ${rawScore.passed_cases}/${rawScore.total_cases}`));
296
- }
297
- return true;
298
- }
299
- }
300
- const selectedAgents = await resolveSelectedTestAgents({
301
- argv,
302
- executionProfile,
303
- });
304
- if (!selectedAgents || selectedAgents.length === 0) {
305
- return false;
306
- }
307
- const rows = await Promise.all(selectedAgents.map((agent) => runModeForAgent({
308
- sourcePath,
309
- preparationConfig: selectedCompiled,
310
- builtCompiledPath: builtCompiledPath ?? null,
311
- mode,
312
- preserveSandboxes,
313
- executor: agent.executor,
314
- saveLatest: selectedAgents.length === 1,
315
- })));
316
- if ((mode === "compiled" || mode === "both") && rows.some((row) => !row.compiledOutcome)) {
317
- return reportTestCommandFailure(argv, `Preparation "${selectedCompiled.name}" does not have Portable Context agents can use yet.`, ["Run `interf compile` first."]);
318
- }
319
- printAgentTestMatrix(rows);
320
- printAgentTestFailures(rows);
321
- const resultSummary = {
322
- sourcePath,
323
- preparationConfig: selectedCompiled,
324
- builtCompiledPath: builtCompiledPath ?? null,
325
- mode,
326
- rows,
327
- };
328
- const onComplete = typeof argv.onComplete === "function"
329
- ? argv.onComplete
330
- : null;
331
- if (rows.length === 1) {
332
- const row = rows[0];
333
- const comparisonRunPath = row?.comparisonRunPath ?? null;
334
- const latestComparison = row?.comparison ?? null;
335
- if (latestComparison) {
336
- if (mode === "both") {
337
- console.log();
338
- console.log(chalk.dim(` Saved summary: ${comparisonRunPath}`));
339
- }
340
- else {
341
- printSavedTestComparisonState(latestComparison, comparisonRunPath);
342
- }
41
+ export const testCommand = {
42
+ command: "test <prep-id>",
43
+ describe: "Run readiness checks for a preparation",
44
+ builder: (yargs) => yargs
45
+ .positional("prep-id", { type: "string", demandOption: true, describe: "Preparation id" })
46
+ .option("target", {
47
+ type: "string",
48
+ choices: ["source-files", "portable-context", "both"],
49
+ default: "both",
50
+ describe: "Which surface to test against",
51
+ })
52
+ .option("url", { type: "string", describe: "Override the active connection URL" })
53
+ .option("token", { type: "string", describe: "Override the active bearer token" }),
54
+ handler: async (args) => {
55
+ const { url, token } = resolveConnection(args);
56
+ const mode = args.target === "portable-context" ? "compiled" : args.target === "source-files" ? "source-files" : "both";
57
+ const { status, body, raw } = await callJson(`${url}/v1/preparations/${encodeURIComponent(args.prepId)}/test-runs`, token, { method: "POST", body: JSON.stringify({ mode }) });
58
+ if (status !== 201 && status !== 200) {
59
+ console.error(chalk.red(`Failed to start test run for ${args.prepId} (HTTP ${status}).`));
60
+ if (raw)
61
+ console.error(raw);
62
+ process.exit(1);
343
63
  }
344
- await onComplete?.(resultSummary);
345
- return true;
346
- }
347
- console.log();
348
- console.log(chalk.dim(" Multi-agent compare does not overwrite the saved latest single-agent result."));
349
- await onComplete?.(resultSummary);
350
- return true;
351
- }
64
+ console.log();
65
+ console.log(` Run ${chalk.bold(body?.run_id ?? "(?)")} ${chalk.dim(`(${body?.status ?? "started"})`)}`);
66
+ if (body?.readiness?.status)
67
+ console.log(` Readiness: ${body.readiness.status}`);
68
+ if (body?.error)
69
+ console.log(chalk.red(` Error: ${body.error}`));
70
+ console.log();
71
+ },
72
+ };
@@ -1,11 +1,2 @@
1
1
  import type { CommandModule } from "yargs";
2
2
  export declare const webCommand: CommandModule;
3
- export interface WebProjectPaths {
4
- controlPath: string;
5
- sourceFolderPath: string | null;
6
- }
7
- export declare function resolveWebProjectPaths(argv?: Record<string, unknown>, cwd?: string): WebProjectPaths;
8
- export declare function ensureWebProjectInitialized(controlPath: string, options?: {
9
- sourceFolderPath?: string | null;
10
- }): void;
11
- export declare function runWebCommand(argv?: Record<string, unknown>): Promise<void>;