@interf/compiler 0.33.0 → 0.50.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 (234) hide show
  1. package/README.md +122 -226
  2. package/dist/cli/commands/agents.js +1 -32
  3. package/dist/cli/commands/benchmark.d.ts +2 -3
  4. package/dist/cli/commands/benchmark.js +1 -31
  5. package/dist/cli/commands/build-plan.js +26 -50
  6. package/dist/cli/commands/build.d.ts +2 -3
  7. package/dist/cli/commands/build.js +1 -31
  8. package/dist/cli/commands/graphs.js +177 -32
  9. package/dist/cli/commands/mcp.d.ts +1 -0
  10. package/dist/cli/commands/mcp.js +223 -126
  11. package/dist/cli/commands/project.js +10 -36
  12. package/dist/cli/commands/reset.d.ts +2 -3
  13. package/dist/cli/commands/reset.js +1 -22
  14. package/dist/cli/commands/runs.js +86 -33
  15. package/dist/cli/commands/status.js +3 -24
  16. package/dist/cli/commands/traces.js +1 -29
  17. package/dist/cli/commands/wizard.js +17 -29
  18. package/dist/cli/lib/http-client.d.ts +39 -0
  19. package/dist/cli/lib/http-client.js +73 -0
  20. package/dist/packages/build-plans/authoring/brief.d.ts +25 -4
  21. package/dist/packages/build-plans/authoring/build-plan-authoring.d.ts +42 -1
  22. package/dist/packages/build-plans/authoring/build-plan-authoring.js +470 -63
  23. package/dist/packages/build-plans/authoring/build-plan-edit-session.d.ts +9 -0
  24. package/dist/packages/build-plans/authoring/build-plan-edit-session.js +27 -10
  25. package/dist/packages/build-plans/authoring/build-plan-improvement.js +62 -8
  26. package/dist/packages/build-plans/authoring/lib/build-plan-edit-utils.d.ts +1 -0
  27. package/dist/packages/build-plans/package/build-plan-definitions.d.ts +0 -1
  28. package/dist/packages/build-plans/package/build-plan-definitions.js +5 -3
  29. package/dist/packages/build-plans/package/build-plan-stage-runner.d.ts +1 -0
  30. package/dist/packages/build-plans/package/build-plan-stage-runner.js +2 -1
  31. package/dist/packages/build-plans/package/builtin-build-plan.d.ts +2 -2
  32. package/dist/packages/build-plans/package/builtin-build-plan.js +3 -3
  33. package/dist/packages/build-plans/package/context-interface.d.ts +3 -0
  34. package/dist/packages/build-plans/package/context-interface.js +5 -5
  35. package/dist/packages/build-plans/package/interf-build-plan-package.js +22 -22
  36. package/dist/packages/build-plans/package/local-build-plans.d.ts +10 -5
  37. package/dist/packages/build-plans/package/local-build-plans.js +57 -32
  38. package/dist/packages/contracts/index.d.ts +4 -3
  39. package/dist/packages/contracts/index.js +2 -1
  40. package/dist/packages/contracts/lib/context-graph-layer.d.ts +161 -0
  41. package/dist/packages/contracts/lib/context-graph-layer.js +216 -0
  42. package/dist/packages/contracts/lib/project-paths.d.ts +7 -0
  43. package/dist/packages/contracts/lib/project-paths.js +9 -0
  44. package/dist/packages/contracts/lib/project-schema.d.ts +264 -1
  45. package/dist/packages/contracts/lib/project-schema.js +38 -13
  46. package/dist/packages/contracts/lib/schema.d.ts +556 -23
  47. package/dist/packages/contracts/lib/schema.js +279 -18
  48. package/dist/packages/contracts/utils/filesystem.d.ts +1 -0
  49. package/dist/packages/contracts/utils/filesystem.js +29 -1
  50. package/dist/packages/projects/lib/schema.d.ts +6 -8
  51. package/dist/packages/projects/lib/schema.js +3 -1
  52. package/dist/packages/projects/source-config.d.ts +0 -5
  53. package/dist/packages/projects/source-config.js +9 -22
  54. package/dist/packages/runtime/actions/fields.d.ts +4 -0
  55. package/dist/packages/runtime/actions/form-builders.js +79 -31
  56. package/dist/packages/runtime/actions/form-validators.js +9 -3
  57. package/dist/packages/runtime/actions/helpers.js +3 -3
  58. package/dist/packages/runtime/actions/registry.d.ts +1 -1
  59. package/dist/packages/runtime/actions/registry.js +1 -1
  60. package/dist/packages/runtime/actions/requests.d.ts +1 -1
  61. package/dist/packages/runtime/actions/requests.js +12 -6
  62. package/dist/packages/runtime/actions/schemas.d.ts +7 -0
  63. package/dist/packages/runtime/actions/schemas.js +1 -0
  64. package/dist/packages/runtime/agent-handoff.js +8 -7
  65. package/dist/packages/runtime/agents/lib/execution-profile.d.ts +14 -0
  66. package/dist/packages/runtime/agents/lib/execution-profile.js +23 -0
  67. package/dist/packages/runtime/agents/lib/execution.js +14 -8
  68. package/dist/packages/runtime/agents/lib/executors.d.ts +1 -0
  69. package/dist/packages/runtime/agents/lib/executors.js +11 -2
  70. package/dist/packages/runtime/agents/lib/logs.d.ts +10 -0
  71. package/dist/packages/runtime/agents/lib/logs.js +32 -8
  72. package/dist/packages/runtime/agents/lib/preflight.js +4 -1
  73. package/dist/packages/runtime/agents/lib/render.d.ts +18 -0
  74. package/dist/packages/runtime/agents/lib/render.js +44 -18
  75. package/dist/packages/runtime/agents/lib/shell-templates.js +105 -63
  76. package/dist/packages/runtime/agents/lib/shells.d.ts +29 -0
  77. package/dist/packages/runtime/agents/lib/shells.js +158 -32
  78. package/dist/packages/runtime/agents/lib/source-context-scan.d.ts +10 -0
  79. package/dist/packages/runtime/agents/lib/source-context-scan.js +388 -0
  80. package/dist/packages/runtime/agents/lib/status.js +1 -14
  81. package/dist/packages/runtime/agents/lib/string-utils.d.ts +16 -0
  82. package/dist/packages/runtime/agents/lib/string-utils.js +36 -0
  83. package/dist/packages/runtime/agents/lib/types.d.ts +1 -0
  84. package/dist/packages/runtime/agents/providers/codex.js +2 -0
  85. package/dist/packages/runtime/agents/role-executors.js +2 -1
  86. package/dist/packages/runtime/auth/session-store.js +11 -3
  87. package/dist/packages/runtime/benchmark-question-draft.d.ts +3 -0
  88. package/dist/packages/runtime/benchmark-question-draft.js +57 -28
  89. package/dist/packages/runtime/build/artifact-status.d.ts +1 -1
  90. package/dist/packages/runtime/build/artifact-status.js +1 -1
  91. package/dist/packages/runtime/build/build-evidence.d.ts +2 -1
  92. package/dist/packages/runtime/build/build-evidence.js +11 -5
  93. package/dist/packages/runtime/build/build-pipeline.js +89 -5
  94. package/dist/packages/runtime/build/build-stage-plan.js +3 -1
  95. package/dist/packages/runtime/build/build-stage-runner.js +169 -32
  96. package/dist/packages/runtime/build/build-target.d.ts +3 -0
  97. package/dist/packages/runtime/build/build-target.js +25 -1
  98. package/dist/packages/runtime/build/check-evaluator.d.ts +1 -1
  99. package/dist/packages/runtime/build/check-evaluator.js +655 -4
  100. package/dist/packages/runtime/build/context-graph-paths.d.ts +13 -0
  101. package/dist/packages/runtime/build/context-graph-paths.js +27 -0
  102. package/dist/packages/runtime/build/index.d.ts +2 -2
  103. package/dist/packages/runtime/build/index.js +2 -2
  104. package/dist/packages/runtime/build/inspect-map.d.ts +10 -0
  105. package/dist/packages/runtime/build/inspect-map.js +270 -0
  106. package/dist/packages/runtime/build/lib/schema.d.ts +246 -53
  107. package/dist/packages/runtime/build/lib/schema.js +173 -15
  108. package/dist/packages/runtime/build/native-entrypoint.d.ts +2 -0
  109. package/dist/packages/runtime/build/native-entrypoint.js +286 -0
  110. package/dist/packages/runtime/build/runtime-contracts.js +9 -3
  111. package/dist/packages/runtime/build/runtime-log-paths.d.ts +3 -0
  112. package/dist/packages/runtime/build/runtime-log-paths.js +16 -0
  113. package/dist/packages/runtime/build/runtime-prompt.js +6 -4
  114. package/dist/packages/runtime/build/runtime-runs.js +63 -10
  115. package/dist/packages/runtime/build/runtime-types.d.ts +4 -1
  116. package/dist/packages/runtime/build/runtime.d.ts +3 -1
  117. package/dist/packages/runtime/build/runtime.js +3 -1
  118. package/dist/packages/runtime/build/source-files.js +11 -2
  119. package/dist/packages/runtime/build/source-inventory.d.ts +1 -0
  120. package/dist/packages/runtime/build/source-inventory.js +246 -7
  121. package/dist/packages/runtime/build/source-manifest.d.ts +11 -0
  122. package/dist/packages/runtime/build/source-manifest.js +30 -2
  123. package/dist/packages/runtime/build/stage-evidence.js +80 -11
  124. package/dist/packages/runtime/build/stage-manifest.d.ts +45 -0
  125. package/dist/packages/runtime/build/stage-manifest.js +1125 -0
  126. package/dist/packages/runtime/build/stage-reuse.js +12 -0
  127. package/dist/packages/runtime/build/stage-session.d.ts +81 -0
  128. package/dist/packages/runtime/build/stage-session.js +308 -0
  129. package/dist/packages/runtime/build/state-io.js +10 -11
  130. package/dist/packages/runtime/build/state-view.js +1 -1
  131. package/dist/packages/runtime/build/state.d.ts +1 -1
  132. package/dist/packages/runtime/build/state.js +1 -1
  133. package/dist/packages/runtime/build/summary-coverage-index.d.ts +21 -0
  134. package/dist/packages/runtime/build/summary-coverage-index.js +189 -0
  135. package/dist/packages/runtime/build/traces.js +3 -3
  136. package/dist/packages/runtime/build/validate-context-graph.d.ts +1 -1
  137. package/dist/packages/runtime/build/validate-context-graph.js +5 -5
  138. package/dist/packages/runtime/build/validate.d.ts +1 -1
  139. package/dist/packages/runtime/build/validate.js +1 -1
  140. package/dist/packages/runtime/client.d.ts +3 -3
  141. package/dist/packages/runtime/client.js +8 -13
  142. package/dist/packages/runtime/context-checks.js +13 -0
  143. package/dist/packages/runtime/context-graph-scaffold.js +2 -1
  144. package/dist/packages/runtime/context-graph-semantic-graph.d.ts +9 -0
  145. package/dist/packages/runtime/context-graph-semantic-graph.js +416 -0
  146. package/dist/packages/runtime/execution/lib/schema.d.ts +34 -31
  147. package/dist/packages/runtime/index.d.ts +2 -2
  148. package/dist/packages/runtime/index.js +1 -1
  149. package/dist/packages/runtime/native-run-handlers.d.ts +38 -0
  150. package/dist/packages/runtime/native-run-handlers.js +52 -33
  151. package/dist/packages/runtime/plan-artifact-contract.js +1 -1
  152. package/dist/packages/runtime/project-source-state.d.ts +4 -4
  153. package/dist/packages/runtime/project-source-state.js +5 -2
  154. package/dist/packages/runtime/project-store.d.ts +5 -0
  155. package/dist/packages/runtime/project-store.js +30 -3
  156. package/dist/packages/runtime/requested-artifacts.js +1 -1
  157. package/dist/packages/runtime/run-observability.js +9 -4
  158. package/dist/packages/runtime/runtime-action-proposals.js +3 -3
  159. package/dist/packages/runtime/runtime-build-plans.js +47 -3
  160. package/dist/packages/runtime/runtime-build-runs.js +9 -16
  161. package/dist/packages/runtime/runtime-caches.d.ts +26 -0
  162. package/dist/packages/runtime/runtime-caches.js +47 -0
  163. package/dist/packages/runtime/runtime-jobs.js +6 -6
  164. package/dist/packages/runtime/runtime-project-mutations.js +1 -0
  165. package/dist/packages/runtime/runtime-project-reads.d.ts +4 -1
  166. package/dist/packages/runtime/runtime-project-reads.js +229 -36
  167. package/dist/packages/runtime/runtime-proposal-helpers.js +6 -6
  168. package/dist/packages/runtime/runtime-resource-builders.d.ts +4 -2
  169. package/dist/packages/runtime/runtime-resource-builders.js +16 -14
  170. package/dist/packages/runtime/runtime-status.d.ts +14 -0
  171. package/dist/packages/runtime/runtime-status.js +15 -0
  172. package/dist/packages/runtime/runtime-verify-runs.js +6 -5
  173. package/dist/packages/runtime/runtime.d.ts +439 -22
  174. package/dist/packages/runtime/runtime.js +16 -2
  175. package/dist/packages/runtime/schemas/actions.d.ts +24 -0
  176. package/dist/packages/runtime/schemas/agents.d.ts +28 -0
  177. package/dist/packages/runtime/schemas/agents.js +33 -0
  178. package/dist/packages/runtime/schemas/build-plans.d.ts +181 -8
  179. package/dist/packages/runtime/schemas/build-plans.js +36 -2
  180. package/dist/packages/runtime/schemas/context-graphs.d.ts +1522 -0
  181. package/dist/packages/runtime/schemas/context-graphs.js +110 -0
  182. package/dist/packages/runtime/schemas/files.d.ts +7 -347
  183. package/dist/packages/runtime/schemas/files.js +1 -24
  184. package/dist/packages/runtime/schemas/index.d.ts +1 -0
  185. package/dist/packages/runtime/schemas/index.js +1 -0
  186. package/dist/packages/runtime/schemas/jobs.js +4 -0
  187. package/dist/packages/runtime/schemas/projects.d.ts +48 -21
  188. package/dist/packages/runtime/schemas/projects.js +34 -10
  189. package/dist/packages/runtime/schemas/runs.d.ts +1009 -240
  190. package/dist/packages/runtime/schemas/runs.js +17 -0
  191. package/dist/packages/runtime/service/openapi.js +1 -0
  192. package/dist/packages/runtime/service/operations.d.ts +1666 -145
  193. package/dist/packages/runtime/service/operations.js +147 -17
  194. package/dist/packages/runtime/service/routes.d.ts +11 -3
  195. package/dist/packages/runtime/service/routes.js +11 -3
  196. package/dist/packages/runtime/service/server-app-boot.js +2 -2
  197. package/dist/packages/runtime/service/server-helpers.d.ts +11 -0
  198. package/dist/packages/runtime/service/server-helpers.js +19 -0
  199. package/dist/packages/runtime/service/server-routes-action-proposals.js +4 -2
  200. package/dist/packages/runtime/service/server-routes-agents.js +19 -85
  201. package/dist/packages/runtime/service/server-routes-build-plans.js +14 -11
  202. package/dist/packages/runtime/service/server-routes-project-context.js +102 -7
  203. package/dist/packages/runtime/service/server-routes-project-jobs.js +19 -12
  204. package/dist/packages/runtime/service/server-routes-project-runs.js +5 -2
  205. package/dist/packages/runtime/service/server-routes-projects.js +6 -2
  206. package/dist/packages/runtime/service/server-routes-runs.js +11 -4
  207. package/dist/packages/runtime/verify/lib/schema.js +12 -0
  208. package/dist/packages/runtime/verify/test-file-guard.d.ts +2 -0
  209. package/dist/packages/runtime/verify/test-file-guard.js +29 -0
  210. package/dist/packages/runtime/verify/verify-execution.d.ts +7 -0
  211. package/dist/packages/runtime/verify/verify-execution.js +109 -35
  212. package/dist/packages/runtime/verify/verify-paths.d.ts +1 -0
  213. package/dist/packages/runtime/verify/verify-paths.js +4 -0
  214. package/dist/packages/runtime/verify/verify-specs.js +49 -39
  215. package/dist/packages/runtime/wire-schemas.d.ts +1 -1
  216. package/dist/packages/runtime/wire-schemas.js +1 -1
  217. package/package.json +2 -8
  218. package/public-repo/CONTRIBUTING.md +10 -3
  219. package/public-repo/README.md +122 -226
  220. package/public-repo/build-plans/interf-default/README.md +15 -12
  221. package/public-repo/build-plans/interf-default/build/stages/entrypoint/SKILL.md +74 -0
  222. package/public-repo/build-plans/interf-default/build/stages/knowledge/SKILL.md +95 -0
  223. package/public-repo/build-plans/interf-default/build/stages/summarize/SKILL.md +38 -5
  224. package/public-repo/build-plans/interf-default/build-plan.json +27 -23
  225. package/public-repo/build-plans/interf-default/build-plan.schema.json +24 -20
  226. package/public-repo/build-plans/interf-default/use/query/SKILL.md +8 -7
  227. package/public-repo/openapi/local-service.openapi.json +11637 -4213
  228. package/public-repo/skills/interf/SKILL.md +174 -134
  229. package/dist/packages/runtime/build/runtime-paths.d.ts +0 -8
  230. package/dist/packages/runtime/build/runtime-paths.js +0 -26
  231. package/dist/packages/runtime/build/state-paths.d.ts +0 -7
  232. package/dist/packages/runtime/build/state-paths.js +0 -22
  233. package/public-repo/build-plans/interf-default/build/stages/shape/SKILL.md +0 -34
  234. package/public-repo/build-plans/interf-default/build/stages/structure/SKILL.md +0 -28
@@ -109,8 +109,8 @@ const BUILD_PLAN_AUTHORING_INTERNAL_INSTRUCTION = /Use the attached values as th
109
109
  const BUILD_PLAN_AUTHORING_LABELS = [
110
110
  "Intent",
111
111
  "Context Graph output",
112
- "Context Checks",
113
- "Checks",
112
+ "Coverage",
113
+ "Ready When",
114
114
  "CLI preview",
115
115
  ];
116
116
  function normalizeBuildPlanAuthoringText(value) {
@@ -144,19 +144,19 @@ export function buildPlanAuthoringPromptFallback(message, buildPlanId) {
144
144
  .trim();
145
145
  const agentWork = extractBuildPlanAuthoringSection(cleaned, "Intent");
146
146
  const portableOutput = extractBuildPlanAuthoringSection(cleaned, "Context Graph output");
147
- const contextCheckNotes = extractBuildPlanAuthoringSection(cleaned, "Context Checks") ??
148
- extractBuildPlanAuthoringSection(cleaned, "Checks");
147
+ const coverageNotes = extractBuildPlanAuthoringSection(cleaned, "Coverage") ??
148
+ extractBuildPlanAuthoringSection(cleaned, "Ready When");
149
149
  const lines = [
150
150
  agentWork ? `Intent: ${stripBuildPlanCommandPrefix(agentWork, buildPlanId)}` : null,
151
151
  portableOutput ? `Context Graph output: ${portableOutput}` : null,
152
- contextCheckNotes ? `Context Checks: ${contextCheckNotes}` : null,
152
+ coverageNotes ? `Coverage: ${coverageNotes}` : null,
153
153
  ].filter((line) => Boolean(line));
154
154
  if (lines.length > 0)
155
155
  return lines.join("\n");
156
156
  return stripBuildPlanCommandPrefix(cleaned, buildPlanId);
157
157
  }
158
158
  export function buildPlanAuthoringHintFromPrompt(prompt) {
159
- const plain = normalizeBuildPlanAuthoringText(prompt.replace(/\b(?:Intent|Context Graph output|Context Checks|Checks)\s*:/gi, " "));
159
+ const plain = normalizeBuildPlanAuthoringText(prompt.replace(/\b(?:Intent|Context Graph output|Coverage|Ready When)\s*:/gi, " "));
160
160
  if (plain.length <= 180)
161
161
  return plain || "Custom Build Plan";
162
162
  const clipped = plain.slice(0, 177).replace(/\s+\S*$/, "").trim();
@@ -37,12 +37,11 @@ export declare function logsForExecutionStageLedger(run: ExecutionStageLedger |
37
37
  } | undefined;
38
38
  export declare function readinessTargetResult(summary: TestRunTargetSummary | null | undefined, currentFingerprint: string | null, benchmarkRunFingerprint: string | null | undefined): VerifyTargetResult | null;
39
39
  export declare function readinessSummaryForStatus(status: Readiness["status"]): string;
40
- export declare function readinessStateToProjectReadiness(readiness: Readiness): Readiness;
41
40
  export declare function buildProjectResource(project: ProjectConfig, readiness: Readiness, latestRunIds: {
42
41
  latestBuildRunId: string | null;
43
42
  latestContextGraphBuildRunId: string | null;
44
43
  latestTestRunId: string | null;
45
- }, sourcePath: string, configPath: string, artifacts?: ProjectResource["artifacts"]): ProjectResource;
44
+ }, sourcePath: string, configPath: string, artifacts?: ProjectResource["artifacts"], updatedAt?: string | null): ProjectResource;
46
45
  export declare function buildBuildPlanResource(resource: {
47
46
  id: string;
48
47
  path: string;
@@ -56,6 +55,9 @@ export declare function buildBuildPlanResource(resource: {
56
55
  inputs?: BuildPlanResource["inputs"];
57
56
  source_kind: "builtin" | "local";
58
57
  built_in: boolean;
58
+ scope: "builtin" | "user" | "local";
59
+ created_at?: string | null;
60
+ updated_at?: string | null;
59
61
  active_for_projects: string[];
60
62
  artifacts: Artifact[];
61
63
  stages: BuildPlanResource["stages"];
@@ -1,6 +1,5 @@
1
- import { ReadinessSchema, } from "../contracts/lib/schema.js";
2
1
  import { buildPlanIdForProjectConfig, } from "../projects/source-config.js";
3
- import { BuildPlanResourceSchema, ProjectResourceSchema, } from "./schemas/index.js";
2
+ import { BuildPlanResourceSchema, } from "./schemas/index.js";
4
3
  import { buildPlanContextChecks, } from "./context-checks.js";
5
4
  export function createRunId(prefix) {
6
5
  return `${prefix}_${Date.now().toString(36)}_${Math.random().toString(36).slice(2, 8)}`;
@@ -87,7 +86,7 @@ export function readinessSummaryForStatus(status) {
87
86
  if (status === "ready")
88
87
  return "Ready for agent task.";
89
88
  if (status === "not-ready")
90
- return "Artifact diagnostics or benchmark checks did not pass.";
89
+ return "Context Graph is missing required coverage for the agent task.";
91
90
  if (status === "stale")
92
91
  return "Benchmark result is stale — saved checks have changed since.";
93
92
  if (status === "checking")
@@ -99,39 +98,39 @@ export function readinessSummaryForStatus(status) {
99
98
  if (status === "not-built")
100
99
  return "Context Graph has not been built yet.";
101
100
  if (status === "not-configured")
102
- return "No checks are configured.";
101
+ return "Context Graph preparation is not configured.";
103
102
  return "Latest Build failed.";
104
103
  }
105
- export function readinessStateToProjectReadiness(readiness) {
106
- return ReadinessSchema.parse({
107
- ...readiness,
108
- checks: readiness.checks.map((check) => ({ ...check })),
109
- });
110
- }
111
- export function buildProjectResource(project, readiness, latestRunIds, sourcePath, configPath, artifacts = []) {
104
+ export function buildProjectResource(project, readiness, latestRunIds, sourcePath, configPath, artifacts = [], updatedAt = null) {
112
105
  const buildPlanId = buildPlanIdForProjectConfig(project);
113
106
  const { latestBuildRunId, latestContextGraphBuildRunId, latestTestRunId, } = latestRunIds;
114
- return ProjectResourceSchema.parse({
107
+ // Inputs are already contract-typed (ProjectConfig, Readiness, ArtifactStatus[]),
108
+ // so re-parsing the assembled object through ProjectResourceSchema can't catch
109
+ // any error the type checker doesn't already catch. Return a typed literal.
110
+ return {
115
111
  id: project.name,
116
112
  name: project.name,
117
113
  source: {
118
114
  kind: "local-folder",
119
115
  locator: sourcePath,
120
116
  },
117
+ intent: project.intent ?? "",
121
118
  config: project,
122
119
  config_path: configPath,
123
120
  source_path: sourcePath,
121
+ updated_at: updatedAt,
124
122
  build_plan_id: buildPlanId,
125
123
  context_graph: {
126
124
  project: project.name,
127
125
  path: readiness.context_graph_path,
128
126
  exists: readiness.context_graph_path !== null,
127
+ intent: project.intent ?? "",
129
128
  build_plan_id: buildPlanId,
130
129
  latest_build_run_id: latestContextGraphBuildRunId,
131
130
  latest_benchmark_run_id: latestTestRunId,
132
131
  },
133
132
  context_graph_path: readiness.context_graph_path,
134
- readiness: readinessStateToProjectReadiness(readiness),
133
+ readiness,
135
134
  runs: {
136
135
  latest_build_run_id: latestBuildRunId,
137
136
  latest_benchmark_run_id: latestTestRunId,
@@ -139,13 +138,16 @@ export function buildProjectResource(project, readiness, latestRunIds, sourcePat
139
138
  latest_build_run_id: latestBuildRunId,
140
139
  latest_benchmark_run_id: latestTestRunId,
141
140
  artifacts,
142
- });
141
+ };
143
142
  }
144
143
  export function buildBuildPlanResource(resource) {
145
144
  return BuildPlanResourceSchema.parse({
146
145
  id: resource.id,
147
146
  build_plan_id: resource.id,
148
147
  path: resource.path,
148
+ scope: resource.scope,
149
+ created_at: resource.created_at ?? null,
150
+ updated_at: resource.updated_at ?? null,
149
151
  ...(resource.label ? { label: resource.label } : {}),
150
152
  ...(resource.hint ? { hint: resource.hint } : {}),
151
153
  ...(resource.purpose
@@ -0,0 +1,14 @@
1
+ import type { LocalJobStatus } from "./schemas/jobs.js";
2
+ /**
3
+ * Single source of truth for the terminal-status three-state check.
4
+ *
5
+ * A Run/Job is terminal when it has reached `succeeded`, `failed`, or
6
+ * `cancelled` — the same set across every record model (LocalJobRun,
7
+ * BuildRun, VerifyRun), all of which share the canonical run-status enum
8
+ * (`RunStatusSchema` in `schemas/jobs.ts`, re-aliased as
9
+ * `BuildRunStatusSchema`/`VerifyRunStatusSchema`).
10
+ *
11
+ * Accepts a plain `string` so callers that only have a wire-level status
12
+ * string can reuse the same predicate without re-implementing it.
13
+ */
14
+ export declare function isTerminalStatus(status: LocalJobStatus | string): boolean;
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Single source of truth for the terminal-status three-state check.
3
+ *
4
+ * A Run/Job is terminal when it has reached `succeeded`, `failed`, or
5
+ * `cancelled` — the same set across every record model (LocalJobRun,
6
+ * BuildRun, VerifyRun), all of which share the canonical run-status enum
7
+ * (`RunStatusSchema` in `schemas/jobs.ts`, re-aliased as
8
+ * `BuildRunStatusSchema`/`VerifyRunStatusSchema`).
9
+ *
10
+ * Accepts a plain `string` so callers that only have a wire-level status
11
+ * string can reuse the same predicate without re-implementing it.
12
+ */
13
+ export function isTerminalStatus(status) {
14
+ return status === "succeeded" || status === "failed" || status === "cancelled";
15
+ }
@@ -8,6 +8,7 @@ import { createRunId } from "./runtime-resource-builders.js";
8
8
  import { LocalRunHandlerResultSchema, VerifyRunCreateRequestSchema, VerifyRunResourceSchema, } from "./schemas/index.js";
9
9
  import { readSavedBenchmarkRun } from "./verify/benchmark-run.js";
10
10
  import { createContextGraphTestTarget } from "./verify/verify-targets.js";
11
+ import { isTerminalStatus } from "./runtime-status.js";
11
12
  function requestedAgentExecutorInfo(agentName, registry = loadAgentsRegistry()) {
12
13
  const requested = agentName?.trim();
13
14
  if (!requested)
@@ -30,9 +31,6 @@ export function benchmarkFanoutAgentNames(registry) {
30
31
  .filter((agent) => agent.available !== false)
31
32
  .map((agent) => agent.name))];
32
33
  }
33
- function isTerminalVerifyStatus(status) {
34
- return status === "succeeded" || status === "failed" || status === "cancelled";
35
- }
36
34
  export function latestTopLevelVerifyRun(runs) {
37
35
  return runs.find((run) => !run.parent_run_id) ?? runs[0] ?? null;
38
36
  }
@@ -40,7 +38,7 @@ export function summarizeVerifyBatch(childRunIds, children) {
40
38
  return {
41
39
  child_run_ids: childRunIds,
42
40
  total_agents: childRunIds.length,
43
- completed_agents: children.filter((run) => isTerminalVerifyStatus(run.status)).length,
41
+ completed_agents: children.filter((run) => isTerminalStatus(run.status)).length,
44
42
  succeeded_agents: children.filter((run) => run.status === "succeeded").length,
45
43
  failed_agents: children.filter((run) => run.status === "failed" || run.status === "cancelled").length,
46
44
  };
@@ -237,7 +235,7 @@ function updateVerifyBatchRun(runtime, projectDataDir, contextGraphPath, parentR
237
235
  .filter((run) => run !== null);
238
236
  const batch = summarizeVerifyBatch(childRunIds, children);
239
237
  const status = statusForBatch(batch);
240
- const terminal = isTerminalVerifyStatus(status);
238
+ const terminal = isTerminalStatus(status);
241
239
  const nextWithoutReadiness = VerifyRunResourceSchema.parse({
242
240
  ...parent,
243
241
  status,
@@ -267,6 +265,9 @@ export function writeVerifyRun(runtime, projectDataDir, contextGraphPath, run) {
267
265
  writeJsonFile(verifyRunPath(contextGraphPath, run.run_id), VerifyRunResourceSchema.parse(run));
268
266
  runtime.verifyRunCache.invalidateProject(projectDataDir, run.project);
269
267
  runtime.readinessCache.invalidateProject(projectDataDir, run.project);
268
+ // The Context Graph resource embeds the joined readiness verdict and latest
269
+ // benchmark run id, so bust it whenever a benchmark run is written.
270
+ runtime.contextGraphResourceCache.invalidateProject(projectDataDir);
270
271
  }
271
272
  export function readLatestBenchmarkRun(projectDataDir, projectName) {
272
273
  return readSavedBenchmarkRun(projectDataDir, projectName);