@nodetool-ai/cli 0.8.1 → 0.8.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +31 -1
- package/dist/.nodetool-build-stamp +1 -1
- package/dist/affected/affected.d.ts +11 -13
- package/dist/affected/affected.d.ts.map +1 -1
- package/dist/affected/affected.js +51 -2
- package/dist/affected/affected.js.map +1 -1
- package/dist/app-debug/app-target.d.ts +1 -1
- package/dist/app-debug/app-target.d.ts.map +1 -1
- package/dist/app-debug/harness.d.ts +3 -1
- package/dist/app-debug/harness.d.ts.map +1 -1
- package/dist/app-debug/harness.js +23 -0
- package/dist/app-debug/harness.js.map +1 -1
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +2 -1
- package/dist/app.js.map +1 -1
- package/dist/chat-codeact.d.ts +8 -0
- package/dist/chat-codeact.d.ts.map +1 -1
- package/dist/chat-codeact.js +59 -21
- package/dist/chat-codeact.js.map +1 -1
- package/dist/chat-context.d.ts.map +1 -1
- package/dist/chat-context.js +7 -2
- package/dist/chat-context.js.map +1 -1
- package/dist/child-exit.d.ts +3 -0
- package/dist/child-exit.d.ts.map +1 -0
- package/dist/child-exit.js +17 -0
- package/dist/child-exit.js.map +1 -0
- package/dist/commands/__tests__/timeline-render-audio.test.js +1 -1
- package/dist/commands/__tests__/timeline-render-audio.test.js.map +1 -1
- package/dist/commands/__tests__/timeline-render-completeness.test.d.ts +2 -0
- package/dist/commands/__tests__/timeline-render-completeness.test.d.ts.map +1 -0
- package/dist/commands/__tests__/timeline-render-completeness.test.js +117 -0
- package/dist/commands/__tests__/timeline-render-completeness.test.js.map +1 -0
- package/dist/commands/__tests__/timeline-score.test.d.ts +2 -0
- package/dist/commands/__tests__/timeline-score.test.d.ts.map +1 -0
- package/dist/commands/__tests__/timeline-score.test.js +100 -0
- package/dist/commands/__tests__/timeline-score.test.js.map +1 -0
- package/dist/commands/affected.d.ts.map +1 -1
- package/dist/commands/affected.js +10 -5
- package/dist/commands/affected.js.map +1 -1
- package/dist/commands/agent.d.ts.map +1 -1
- package/dist/commands/agent.js +12 -2
- package/dist/commands/agent.js.map +1 -1
- package/dist/commands/app.d.ts.map +1 -1
- package/dist/commands/app.js +29 -5
- package/dist/commands/app.js.map +1 -1
- package/dist/commands/apps.d.ts.map +1 -1
- package/dist/commands/apps.js +126 -32
- package/dist/commands/apps.js.map +1 -1
- package/dist/commands/debug-summary-output.d.ts +22 -0
- package/dist/commands/debug-summary-output.d.ts.map +1 -0
- package/dist/commands/debug-summary-output.js +28 -0
- package/dist/commands/debug-summary-output.js.map +1 -0
- package/dist/commands/deploy-helpers.d.ts +2 -1
- package/dist/commands/deploy-helpers.d.ts.map +1 -1
- package/dist/commands/errors.d.ts +11 -0
- package/dist/commands/errors.d.ts.map +1 -0
- package/dist/commands/errors.js +177 -0
- package/dist/commands/errors.js.map +1 -0
- package/dist/commands/eval.d.ts.map +1 -1
- package/dist/commands/eval.js +4 -1
- package/dist/commands/eval.js.map +1 -1
- package/dist/commands/extension.d.ts +12 -0
- package/dist/commands/extension.d.ts.map +1 -0
- package/dist/commands/extension.js +30 -0
- package/dist/commands/extension.js.map +1 -0
- package/dist/commands/game-benchmark.d.ts +34 -0
- package/dist/commands/game-benchmark.d.ts.map +1 -0
- package/dist/commands/game-benchmark.js +95 -0
- package/dist/commands/game-benchmark.js.map +1 -0
- package/dist/commands/game-smoke.d.ts +3 -0
- package/dist/commands/game-smoke.d.ts.map +1 -0
- package/dist/commands/game-smoke.js +23 -0
- package/dist/commands/game-smoke.js.map +1 -0
- package/dist/commands/game.d.ts.map +1 -1
- package/dist/commands/game.js +291 -20
- package/dist/commands/game.js.map +1 -1
- package/dist/commands/harness.d.ts +50 -0
- package/dist/commands/harness.d.ts.map +1 -1
- package/dist/commands/harness.js +289 -73
- package/dist/commands/harness.js.map +1 -1
- package/dist/commands/js-script.d.ts.map +1 -1
- package/dist/commands/js-script.js +6 -22
- package/dist/commands/js-script.js.map +1 -1
- package/dist/commands/mcp.d.ts +21 -0
- package/dist/commands/mcp.d.ts.map +1 -0
- package/dist/commands/mcp.js +166 -0
- package/dist/commands/mcp.js.map +1 -0
- package/dist/commands/output.d.ts +8 -0
- package/dist/commands/output.d.ts.map +1 -1
- package/dist/commands/output.js +18 -0
- package/dist/commands/output.js.map +1 -1
- package/dist/commands/package.d.ts.map +1 -1
- package/dist/commands/package.js +12 -12
- package/dist/commands/package.js.map +1 -1
- package/dist/commands/resource-read.d.ts.map +1 -1
- package/dist/commands/resource-read.js +5 -1
- package/dist/commands/resource-read.js.map +1 -1
- package/dist/commands/runs.d.ts +7 -0
- package/dist/commands/runs.d.ts.map +1 -0
- package/dist/commands/runs.js +302 -0
- package/dist/commands/runs.js.map +1 -0
- package/dist/commands/sketch.d.ts.map +1 -1
- package/dist/commands/sketch.js +6 -22
- package/dist/commands/sketch.js.map +1 -1
- package/dist/commands/timeline-render.d.ts +6 -1
- package/dist/commands/timeline-render.d.ts.map +1 -1
- package/dist/commands/timeline-render.js +15 -25
- package/dist/commands/timeline-render.js.map +1 -1
- package/dist/commands/timeline-score.d.ts +16 -0
- package/dist/commands/timeline-score.d.ts.map +1 -0
- package/dist/commands/timeline-score.js +90 -0
- package/dist/commands/timeline-score.js.map +1 -0
- package/dist/commands/timeline.d.ts.map +1 -1
- package/dist/commands/timeline.js +8 -22
- package/dist/commands/timeline.js.map +1 -1
- package/dist/commands/version-commands.d.ts +2 -5
- package/dist/commands/version-commands.d.ts.map +1 -1
- package/dist/commands/version-commands.js.map +1 -1
- package/dist/commands/worker.js +1 -1
- package/dist/commands/worker.js.map +1 -1
- package/dist/debug/server-runner.d.ts +2 -0
- package/dist/debug/server-runner.d.ts.map +1 -1
- package/dist/debug/server-runner.js +45 -4
- package/dist/debug/server-runner.js.map +1 -1
- package/dist/debug-bundle.d.ts +12 -0
- package/dist/debug-bundle.d.ts.map +1 -0
- package/dist/debug-bundle.js +23 -0
- package/dist/debug-bundle.js.map +1 -0
- package/dist/document-json.d.ts +11 -0
- package/dist/document-json.d.ts.map +1 -0
- package/dist/document-json.js +27 -0
- package/dist/document-json.js.map +1 -0
- package/dist/harness/capability-coverage.d.ts +1 -1
- package/dist/harness/capability-coverage.d.ts.map +1 -1
- package/dist/harness/capability-coverage.js +1 -1
- package/dist/harness/capability-coverage.js.map +1 -1
- package/dist/harness/capability-table.d.ts.map +1 -1
- package/dist/harness/capability-table.js +365 -35
- package/dist/harness/capability-table.js.map +1 -1
- package/dist/harness/changed-files.d.ts +2 -0
- package/dist/harness/changed-files.d.ts.map +1 -1
- package/dist/harness/changed-files.js +14 -0
- package/dist/harness/changed-files.js.map +1 -1
- package/dist/harness/registry.d.ts +32 -4
- package/dist/harness/registry.d.ts.map +1 -1
- package/dist/harness/registry.js +377 -33
- package/dist/harness/registry.js.map +1 -1
- package/dist/index.js +4 -3
- package/dist/index.js.map +1 -1
- package/dist/interaction-script.d.ts +23 -0
- package/dist/interaction-script.d.ts.map +1 -1
- package/dist/interaction-script.js +50 -1
- package/dist/interaction-script.js.map +1 -1
- package/dist/js-script-debug/harness.d.ts +29 -1
- package/dist/js-script-debug/harness.d.ts.map +1 -1
- package/dist/js-script-debug/harness.js +29 -72
- package/dist/js-script-debug/harness.js.map +1 -1
- package/dist/js-script-debug/target.d.ts.map +1 -1
- package/dist/js-script-debug/target.js +1 -24
- package/dist/js-script-debug/target.js.map +1 -1
- package/dist/local-model-interfaces.d.ts.map +1 -1
- package/dist/local-model-interfaces.js +1 -24
- package/dist/local-model-interfaces.js.map +1 -1
- package/dist/node-registry.d.ts +14 -0
- package/dist/node-registry.d.ts.map +1 -1
- package/dist/node-registry.js +15 -18
- package/dist/node-registry.js.map +1 -1
- package/dist/nodetool-main.d.ts +15 -0
- package/dist/nodetool-main.d.ts.map +1 -0
- package/dist/nodetool-main.js +1411 -0
- package/dist/nodetool-main.js.map +1 -0
- package/dist/nodetool.d.ts +0 -13
- package/dist/nodetool.d.ts.map +1 -1
- package/dist/nodetool.js +17 -1683
- package/dist/nodetool.js.map +1 -1
- package/dist/package-assets.d.ts +8 -0
- package/dist/package-assets.d.ts.map +1 -0
- package/dist/package-assets.js +21 -0
- package/dist/package-assets.js.map +1 -0
- package/dist/providers.d.ts +1 -1
- package/dist/providers.d.ts.map +1 -1
- package/dist/providers.js +15 -1
- package/dist/providers.js.map +1 -1
- package/dist/run-dsl.d.ts +6 -0
- package/dist/run-dsl.d.ts.map +1 -1
- package/dist/run-dsl.js +4 -1
- package/dist/run-dsl.js.map +1 -1
- package/dist/sandbox-catalog.d.ts +15 -1
- package/dist/sandbox-catalog.d.ts.map +1 -1
- package/dist/sandbox-catalog.js +58 -2
- package/dist/sandbox-catalog.js.map +1 -1
- package/dist/settings.d.ts.map +1 -1
- package/dist/settings.js +2 -0
- package/dist/settings.js.map +1 -1
- package/dist/sketch-debug/harness.d.ts +14 -0
- package/dist/sketch-debug/harness.d.ts.map +1 -1
- package/dist/sketch-debug/harness.js +11 -66
- package/dist/sketch-debug/harness.js.map +1 -1
- package/dist/sketch-debug/target.d.ts.map +1 -1
- package/dist/sketch-debug/target.js +1 -24
- package/dist/sketch-debug/target.js.map +1 -1
- package/dist/stdin.d.ts +6 -1
- package/dist/stdin.d.ts.map +1 -1
- package/dist/stdin.js +10 -1
- package/dist/stdin.js.map +1 -1
- package/dist/timeline-debug/harness.d.ts +14 -0
- package/dist/timeline-debug/harness.d.ts.map +1 -1
- package/dist/timeline-debug/harness.js +11 -66
- package/dist/timeline-debug/harness.js.map +1 -1
- package/dist/timeline-debug/target.d.ts.map +1 -1
- package/dist/timeline-debug/target.js +1 -24
- package/dist/timeline-debug/target.js.map +1 -1
- package/package.json +39 -35
package/dist/harness/registry.js
CHANGED
|
@@ -25,6 +25,8 @@
|
|
|
25
25
|
* the selfchecks of every harness covering a touched surface. The gate — not
|
|
26
26
|
* the author — selects the checks.
|
|
27
27
|
*/
|
|
28
|
+
import { computeAffected } from "../affected/affected.js";
|
|
29
|
+
import { isGlobalGateFile } from "./changed-files.js";
|
|
28
30
|
/**
|
|
29
31
|
* The pure suites behind the script↔storyboard link and the guided creation
|
|
30
32
|
* flows. One constant because the entry's `command` and its `selfcheck` must
|
|
@@ -54,7 +56,10 @@ const GAME_FLOW_SUITES = "npm run test --workspace=packages/protocol -- game &&
|
|
|
54
56
|
"npm run test --workspace=packages/game-nodes && " +
|
|
55
57
|
"npm run test --workspace=packages/game-runtime && " +
|
|
56
58
|
"npm run test --workspace=packages/game-renderer && " +
|
|
57
|
-
"npm run test --workspace=packages/websocket -- trpc-games"
|
|
59
|
+
"npm run test --workspace=packages/websocket -- trpc-games trpc-game-asset-browser gameDraftHistory style-presets && " +
|
|
60
|
+
"npm run test --workspace=packages/agents -- game && " +
|
|
61
|
+
"npm run test --workspace=packages/cli -- game-command && " +
|
|
62
|
+
"npm run test --workspace=web -- src/stores/game src/components/game src/components/setup/game src/hooks/game";
|
|
58
63
|
/**
|
|
59
64
|
* Durable generation recovery without a provider call. These suites exercise
|
|
60
65
|
* acceptance and lease fencing, explicit FAL queue binding, receipt ordering,
|
|
@@ -91,8 +96,9 @@ const TIMELINE_MODEL3D_SUITES = "npm run test --workspace=packages/video-nodes -
|
|
|
91
96
|
const TIMELINE_NATIVE_MEDIA_EDITING_SUITES = "npm run test --workspace=packages/timeline -- extension && " +
|
|
92
97
|
"npm run test --workspace=packages/runtime -- video-extension && " +
|
|
93
98
|
"npm run test --workspace=packages/websocket -- video-extension-inference && " +
|
|
94
|
-
"npm run test --workspace=packages/agents -- timeline-generative-edit timeline-tool-loop && " +
|
|
95
|
-
"npm run test --workspace=web -- useTimelineAgentBridge timelineTools nativeMediaEditingAcceptance nativeMediaEditingPreview timelineExtension useTimelineExtension ExtendClipPanel"
|
|
99
|
+
"npm run test --workspace=packages/agents -- timeline-headless-media-parity timeline-tool-contracts timeline-generative-edit timeline-tool-loop && " +
|
|
100
|
+
"npm run test --workspace=web -- useTimelineAgentBridge timelineTools nativeMediaEditingAcceptance nativeMediaEditingPreview timelineExtension useTimelineExtension ExtendClipPanel" +
|
|
101
|
+
" && npm run test --workspace=packages/websocket -- generation-recovery-media";
|
|
96
102
|
/**
|
|
97
103
|
* The audio-driven-motion suites: `bake_audio_animation`'s own arithmetic
|
|
98
104
|
* (the two clock hops, the envelope/beats curve shapes) plus the end-to-end
|
|
@@ -200,6 +206,21 @@ export const HARNESSES = [
|
|
|
200
206
|
cost: "expensive"
|
|
201
207
|
}
|
|
202
208
|
},
|
|
209
|
+
{
|
|
210
|
+
id: "manimgx",
|
|
211
|
+
title: "ManimGX scene inspection and render (nodetool.manimgx.* nodes)",
|
|
212
|
+
command: "npm run test:real --workspace=packages/manimgx-nodes",
|
|
213
|
+
kind: "execution",
|
|
214
|
+
capabilities: ["no-db"],
|
|
215
|
+
docs: "packages/manimgx-nodes/README.md",
|
|
216
|
+
selfcheck: {
|
|
217
|
+
// Renders and inspects real scenes through the nodes, with an image
|
|
218
|
+
// input. It needs manimgx installed (Python 3.13+, GPU or lavapipe),
|
|
219
|
+
// so the default gate skips it without --expensive.
|
|
220
|
+
command: "npm run test:real --workspace=packages/manimgx-nodes",
|
|
221
|
+
cost: "expensive"
|
|
222
|
+
}
|
|
223
|
+
},
|
|
203
224
|
{
|
|
204
225
|
id: "dsl-native-flow",
|
|
205
226
|
title: "Native flow (call a node as a function, host backend + guest surface)",
|
|
@@ -214,6 +235,31 @@ export const HARNESSES = [
|
|
|
214
235
|
docs: "docs/dsl-native-flow-design.md",
|
|
215
236
|
selfcheck: {
|
|
216
237
|
command: "npm run test --workspace=packages/dsl -- flow-core flow-streaming flow-abort",
|
|
238
|
+
cost: "cheap",
|
|
239
|
+
suiteOnly: true
|
|
240
|
+
}
|
|
241
|
+
},
|
|
242
|
+
{
|
|
243
|
+
id: "app-runs",
|
|
244
|
+
title: "Durable app operation and generation attachment check",
|
|
245
|
+
command: "npm run test --workspace=packages/execution -- app-operation app-run-generation",
|
|
246
|
+
kind: "execution",
|
|
247
|
+
capabilities: [],
|
|
248
|
+
docs: "docs/harnesses.md § App runs phase 1",
|
|
249
|
+
selfcheck: {
|
|
250
|
+
command: "npm run test --workspace=packages/execution -- app-operation app-run-generation",
|
|
251
|
+
cost: "cheap"
|
|
252
|
+
}
|
|
253
|
+
},
|
|
254
|
+
{
|
|
255
|
+
id: "run-traces",
|
|
256
|
+
title: "Durable app trace, content policy and ancestry check",
|
|
257
|
+
command: "npm run test --workspace=packages/execution --workspace=packages/runtime --workspace=packages/models --workspace=packages/websocket -- run-trace external-trace-privacy http-tracing",
|
|
258
|
+
kind: "execution",
|
|
259
|
+
capabilities: [],
|
|
260
|
+
docs: "docs/harnesses.md § Run traces phase 2",
|
|
261
|
+
selfcheck: {
|
|
262
|
+
command: "npm run test --workspace=packages/execution --workspace=packages/runtime --workspace=packages/models --workspace=packages/websocket -- run-trace external-trace-privacy http-tracing",
|
|
217
263
|
cost: "cheap"
|
|
218
264
|
}
|
|
219
265
|
},
|
|
@@ -225,10 +271,88 @@ export const HARNESSES = [
|
|
|
225
271
|
capabilities: ["json", "interact", "no-db"],
|
|
226
272
|
docs: "docs/harnesses.md § nodetool app debug",
|
|
227
273
|
selfcheck: {
|
|
228
|
-
|
|
274
|
+
// Ad Maker shows one step at a time, so the check walks both steps the
|
|
275
|
+
// way a person does before it judges whether every run is reachable.
|
|
276
|
+
command: "npm run dev:nodetool -- app debug packages/base-nodes/nodetool/examples/apps/ad-maker.app.json --no-run --interact '[{\"set\":{\"key\":\"step\",\"value\":\"settle-the-message\"}},{\"set\":{\"key\":\"step\",\"value\":\"direct-the-campaign-image\"}}]'",
|
|
277
|
+
cost: "cheap"
|
|
278
|
+
}
|
|
279
|
+
},
|
|
280
|
+
{
|
|
281
|
+
id: "run-readers",
|
|
282
|
+
title: "Run reader, debug history and CLI failure-path check",
|
|
283
|
+
command: "npm run test --workspace=packages/execution --workspace=packages/models --workspace=packages/websocket --workspace=packages/agents --workspace=packages/cli -- runs-phase3 app-debug-versioned-targets app-debug-workflow-inputs-phase3 capabilities-runs runs-command runs-integration run-readers job-find runs-trpc sandbox-api-coverage",
|
|
284
|
+
kind: "execution",
|
|
285
|
+
capabilities: ["json"],
|
|
286
|
+
docs: "docs/harnesses.md § Run readers phase 3",
|
|
287
|
+
selfcheck: {
|
|
288
|
+
command: "npm run test --workspace=packages/execution --workspace=packages/models --workspace=packages/websocket --workspace=packages/agents --workspace=packages/cli -- runs-phase3 app-debug-versioned-targets app-debug-workflow-inputs-phase3 capabilities-runs runs-command runs-integration run-readers job-find runs-trpc sandbox-api-coverage",
|
|
289
|
+
cost: "cheap"
|
|
290
|
+
}
|
|
291
|
+
},
|
|
292
|
+
{
|
|
293
|
+
id: "browser-run-spans",
|
|
294
|
+
title: "Browser run ownership, ancestry and restart check",
|
|
295
|
+
command: "npm run test --workspace=packages/websocket -- browser-run-spans-phase4 browser-app-run-phase4 app-runs-workflow",
|
|
296
|
+
kind: "execution",
|
|
297
|
+
capabilities: [],
|
|
298
|
+
docs: "docs/harnesses.md § Run inspection phase 4",
|
|
299
|
+
selfcheck: {
|
|
300
|
+
command: "npm run test --workspace=packages/websocket -- browser-run-spans-phase4 browser-app-run-phase4 app-runs-workflow",
|
|
301
|
+
cost: "cheap"
|
|
302
|
+
}
|
|
303
|
+
},
|
|
304
|
+
{
|
|
305
|
+
id: "run-inspection-ui",
|
|
306
|
+
title: "Stored trace, activity replay and browser recorder check",
|
|
307
|
+
command: "npm run test --workspace=web -- --runInBand --testPathPattern='browserRunTrace|browserWorkflowRunner|WorkflowRunner.test|TracePanel.test|TraceStore|useRuns|runTraceCache|appRunActivity|AgentActivityWidget|useWidgetRuntime|sketchPadWidget|workflowFormWidget|chatWidgets|mediaWidgets|buttonWidget|recorderWidgets|conditionalWidget|errorTraceReporting|ChatSurface.test|AskRunAgentButton|useAppRuntime|runJsScript.test'",
|
|
308
|
+
kind: "execution",
|
|
309
|
+
capabilities: [],
|
|
310
|
+
docs: "docs/harnesses.md § Run inspection phase 4",
|
|
311
|
+
selfcheck: {
|
|
312
|
+
command: "npm run test --workspace=web -- --runInBand --testPathPattern='browserRunTrace|browserWorkflowRunner|WorkflowRunner.test|TracePanel.test|TraceStore|useRuns|runTraceCache|appRunActivity|AgentActivityWidget|useWidgetRuntime|sketchPadWidget|workflowFormWidget|chatWidgets|mediaWidgets|buttonWidget|recorderWidgets|conditionalWidget|errorTraceReporting|ChatSurface.test|AskRunAgentButton|useAppRuntime|runJsScript.test'",
|
|
313
|
+
cost: "cheap"
|
|
314
|
+
}
|
|
315
|
+
},
|
|
316
|
+
{
|
|
317
|
+
id: "run-inspection-browser",
|
|
318
|
+
title: "Browser action ancestry and Trace/Logs reload journey",
|
|
319
|
+
command: "npm run test:journeys --workspace=web -- run-observability.spec.ts",
|
|
320
|
+
kind: "execution",
|
|
321
|
+
capabilities: ["browser"],
|
|
322
|
+
docs: "docs/harnesses.md § Run inspection phase 4"
|
|
323
|
+
},
|
|
324
|
+
{
|
|
325
|
+
id: "app-instance-history",
|
|
326
|
+
title: "Instance management, pinned versions and history projection check",
|
|
327
|
+
command: "npm run test --workspace=packages/models --workspace=packages/execution --workspace=packages/websocket -- app-instance run-list-app-metadata runs-phase3 app-operation",
|
|
328
|
+
kind: "execution",
|
|
329
|
+
capabilities: [],
|
|
330
|
+
docs: "docs/harnesses.md § App instances and history phase 5",
|
|
331
|
+
selfcheck: {
|
|
332
|
+
command: "npm run test --workspace=packages/models --workspace=packages/execution --workspace=packages/websocket -- app-instance run-list-app-metadata runs-phase3 app-operation",
|
|
229
333
|
cost: "cheap"
|
|
230
334
|
}
|
|
231
335
|
},
|
|
336
|
+
{
|
|
337
|
+
id: "app-instance-history-ui",
|
|
338
|
+
title: "Instance tabs, management cache and app host check",
|
|
339
|
+
command: "npm run test --workspace=web -- --runInBand --testPathPattern='WorkspaceTabsStore|useAppInstances|useAppInstance|ApplicationSurface|ApplicationRunView|AppRuntimeView|AppRunHistory|useAppRuntime'",
|
|
340
|
+
kind: "execution",
|
|
341
|
+
capabilities: [],
|
|
342
|
+
docs: "docs/harnesses.md § App instances and history phase 5",
|
|
343
|
+
selfcheck: {
|
|
344
|
+
command: "npm run test --workspace=web -- --runInBand --testPathPattern='WorkspaceTabsStore|useAppInstances|useAppInstance|ApplicationSurface|ApplicationRunView|AppRuntimeView|AppRunHistory|useAppRuntime'",
|
|
345
|
+
cost: "cheap"
|
|
346
|
+
}
|
|
347
|
+
},
|
|
348
|
+
{
|
|
349
|
+
id: "app-instance-history-browser",
|
|
350
|
+
title: "Independent app instances and read-only historical results journey",
|
|
351
|
+
command: "npm run test:journeys --workspace=web -- app-instances.spec.ts run-observability.spec.ts",
|
|
352
|
+
kind: "execution",
|
|
353
|
+
capabilities: ["browser"],
|
|
354
|
+
docs: "docs/harnesses.md § App instances and history phase 5"
|
|
355
|
+
},
|
|
232
356
|
{
|
|
233
357
|
id: "app-build",
|
|
234
358
|
title: "Mini-app build harness (spec→plan→author→check→run→judge)",
|
|
@@ -290,6 +414,21 @@ export const HARNESSES = [
|
|
|
290
414
|
cost: "cheap"
|
|
291
415
|
}
|
|
292
416
|
},
|
|
417
|
+
{
|
|
418
|
+
id: "timeline-score",
|
|
419
|
+
title: "Timeline craft scorecard (agent output vs. shipped showcase examples)",
|
|
420
|
+
command: "nodetool timeline score <id|file.json> [--json] [--min-score <n>] [--sheet <out.png>]",
|
|
421
|
+
kind: "static",
|
|
422
|
+
capabilities: ["json", "no-db"],
|
|
423
|
+
docs: "docs/harnesses.md § nodetool timeline score",
|
|
424
|
+
selfcheck: {
|
|
425
|
+
// Deterministic: the metrics/formula core, plus the reference band
|
|
426
|
+
// computed from the shipped examples at test time — no model, no key.
|
|
427
|
+
command: "npm run test --workspace=packages/execution -- timeline-score && " +
|
|
428
|
+
"npm run test --workspace=packages/cli -- timeline-score",
|
|
429
|
+
cost: "cheap"
|
|
430
|
+
}
|
|
431
|
+
},
|
|
293
432
|
{
|
|
294
433
|
id: "serein-timeline-repro",
|
|
295
434
|
title: "Serein timeline motion frame reproduction",
|
|
@@ -354,7 +493,11 @@ export const HARNESSES = [
|
|
|
354
493
|
capabilities: ["no-db"],
|
|
355
494
|
agentTool: "bake_audio_animation",
|
|
356
495
|
docs: "docs/harnesses.md § Audio-driven timeline motion",
|
|
357
|
-
selfcheck: {
|
|
496
|
+
selfcheck: {
|
|
497
|
+
command: TIMELINE_AUDIO_DRIVE_SUITES,
|
|
498
|
+
cost: "cheap",
|
|
499
|
+
suiteOnly: true
|
|
500
|
+
}
|
|
358
501
|
},
|
|
359
502
|
{
|
|
360
503
|
id: "timeline-generated-matte",
|
|
@@ -471,7 +614,8 @@ export const HARNESSES = [
|
|
|
471
614
|
docs: "docs/harnesses.md § nodetool chat",
|
|
472
615
|
selfcheck: {
|
|
473
616
|
command: "npm run test --workspace=packages/cli -- tests/chat-app.test.ts tests/chat-media.test.ts tests/terminal-keyboard.test.ts tests/terminal-input.test.ts tests/terminal-mouse.test.ts tests/terminal-screen.test.ts tests/chat-prompts.test.ts tests/chat-sessions.test.ts tests/websocket-client.test.ts",
|
|
474
|
-
cost: "cheap"
|
|
617
|
+
cost: "cheap",
|
|
618
|
+
suiteOnly: true
|
|
475
619
|
}
|
|
476
620
|
},
|
|
477
621
|
{
|
|
@@ -688,6 +832,20 @@ export const HARNESSES = [
|
|
|
688
832
|
cost: "cheap"
|
|
689
833
|
}
|
|
690
834
|
},
|
|
835
|
+
{
|
|
836
|
+
id: "mutator",
|
|
837
|
+
title: "Mutation testing (nodetool-mutator)",
|
|
838
|
+
command: "npm run mutate -- --base origin/main packages/<name>/src",
|
|
839
|
+
kind: "static",
|
|
840
|
+
capabilities: ["no-db"],
|
|
841
|
+
docs: "docs/harnesses.md § npm run mutate",
|
|
842
|
+
selfcheck: {
|
|
843
|
+
// Parses and binds every site in the tool's own source through the
|
|
844
|
+
// built CLI, without running a test.
|
|
845
|
+
command: "npm run mutate -- --scan packages/mutator/src",
|
|
846
|
+
cost: "cheap"
|
|
847
|
+
}
|
|
848
|
+
},
|
|
691
849
|
{
|
|
692
850
|
id: "recipes",
|
|
693
851
|
title: "Recipe chains (shipped manifests, the app listing, the site pages)",
|
|
@@ -728,7 +886,8 @@ export const HARNESSES = [
|
|
|
728
886
|
docs: "docs/plans/tutorial-focus-animation.md",
|
|
729
887
|
selfcheck: {
|
|
730
888
|
command: "npm run test --workspace=demo",
|
|
731
|
-
cost: "cheap"
|
|
889
|
+
cost: "cheap",
|
|
890
|
+
suiteOnly: true
|
|
732
891
|
}
|
|
733
892
|
},
|
|
734
893
|
{
|
|
@@ -760,7 +919,8 @@ export const HARNESSES = [
|
|
|
760
919
|
// resolution, drain/shutdown. Multi-minute (255 files), so this stays
|
|
761
920
|
// an --expensive selfcheck rather than the default gate.
|
|
762
921
|
command: "npm run test --workspace=packages/websocket",
|
|
763
|
-
cost: "expensive"
|
|
922
|
+
cost: "expensive",
|
|
923
|
+
suiteOnly: true
|
|
764
924
|
}
|
|
765
925
|
},
|
|
766
926
|
{
|
|
@@ -772,7 +932,8 @@ export const HARNESSES = [
|
|
|
772
932
|
docs: "packages/models/AGENTS.md",
|
|
773
933
|
selfcheck: {
|
|
774
934
|
command: "npm run test --workspace=packages/models",
|
|
775
|
-
cost: "cheap"
|
|
935
|
+
cost: "cheap",
|
|
936
|
+
suiteOnly: true
|
|
776
937
|
}
|
|
777
938
|
},
|
|
778
939
|
{
|
|
@@ -925,16 +1086,15 @@ export const SURFACES = [
|
|
|
925
1086
|
// `capability-suites` covers the seam — dispatch, classification, and what
|
|
926
1087
|
// a process with no action layer answers. The half below it runs in
|
|
927
1088
|
// `npm run test:integration --workspace=packages/browser`, which
|
|
928
|
-
// launches a real Chrome with the built extension loaded and
|
|
929
|
-
// production transport end to end. It is
|
|
930
|
-
//
|
|
931
|
-
// by hand.
|
|
1089
|
+
// launches a real Chrome with the built extension loaded and its native
|
|
1090
|
+
// host registered, and drives the production transport end to end. It is
|
|
1091
|
+
// not a selfcheck: it downloads Chrome, so a diff to the relay still
|
|
1092
|
+
// needs it run by hand.
|
|
932
1093
|
paths: [
|
|
933
1094
|
"chrome-extension/",
|
|
934
1095
|
"packages/browser/",
|
|
935
1096
|
"packages/agents/src/capabilities/browser.ts",
|
|
936
|
-
"packages/agents/src/capabilities/browser.specs.ts"
|
|
937
|
-
"packages/websocket/src/extension-cdp-bridge.ts"
|
|
1097
|
+
"packages/agents/src/capabilities/browser.specs.ts"
|
|
938
1098
|
]
|
|
939
1099
|
},
|
|
940
1100
|
{
|
|
@@ -995,9 +1155,13 @@ export const SURFACES = [
|
|
|
995
1155
|
title: "Native game creation and editing",
|
|
996
1156
|
harnesses: ["game-flow", "capability-suites", "validate"],
|
|
997
1157
|
paths: [
|
|
1158
|
+
"packages/cli/src/commands/game.ts",
|
|
1159
|
+
"packages/protocol/src/game.ts",
|
|
1160
|
+
"packages/protocol/src/game3d.ts",
|
|
998
1161
|
"packages/protocol/src/game-design.ts",
|
|
999
1162
|
"packages/protocol/src/game-graph.ts",
|
|
1000
1163
|
"packages/protocol/src/game-flow-prompt.ts",
|
|
1164
|
+
"packages/protocol/src/native-game-templates.ts",
|
|
1001
1165
|
"packages/protocol/src/style-presets.ts",
|
|
1002
1166
|
"packages/game-nodes/",
|
|
1003
1167
|
"packages/game-runtime/",
|
|
@@ -1006,9 +1170,125 @@ export const SURFACES = [
|
|
|
1006
1170
|
"packages/godot-templates/",
|
|
1007
1171
|
"packages/base-nodes/tests/game-graph-chips.test.ts",
|
|
1008
1172
|
"packages/websocket/src/trpc/routers/games.ts",
|
|
1173
|
+
"packages/websocket/src/trpc/routers/gameDraftHistory.ts",
|
|
1009
1174
|
"packages/websocket/src/lib/style-presets.ts",
|
|
1175
|
+
"web/src/components/game/",
|
|
1176
|
+
"web/src/components/setup/game/",
|
|
1177
|
+
"web/src/hooks/game/",
|
|
1178
|
+
"web/src/stores/game/",
|
|
1179
|
+
"web/tests/journeys/native-game3d-editor.spec.ts",
|
|
1010
1180
|
"web/src/components/workspace/GameSurface.tsx",
|
|
1011
|
-
"web/src/components/projects/NewProjectSurface.tsx"
|
|
1181
|
+
"web/src/components/projects/NewProjectSurface.tsx",
|
|
1182
|
+
"packages/protocol/src/game-script-params.ts"
|
|
1183
|
+
]
|
|
1184
|
+
},
|
|
1185
|
+
{
|
|
1186
|
+
id: "app-runs",
|
|
1187
|
+
title: "App instances and durable operation runs",
|
|
1188
|
+
harnesses: ["app-runs"],
|
|
1189
|
+
paths: [
|
|
1190
|
+
"packages/models/src/app-instance.ts",
|
|
1191
|
+
"packages/models/src/migrations/versions.ts",
|
|
1192
|
+
"packages/protocol/src/api-schemas/app-runs.ts",
|
|
1193
|
+
"packages/execution/src/service/app-operation.ts",
|
|
1194
|
+
"packages/execution/src/app-run-generation.ts",
|
|
1195
|
+
"packages/websocket/src/lib/app-instances-service.ts",
|
|
1196
|
+
"packages/websocket/src/routes/app-runs.ts",
|
|
1197
|
+
"packages/websocket/src/trpc/routers/app-instances.ts",
|
|
1198
|
+
"packages/websocket/src/trpc/routers/app-runs.ts",
|
|
1199
|
+
"web/src/components/appbuilder/runtime/"
|
|
1200
|
+
]
|
|
1201
|
+
},
|
|
1202
|
+
{
|
|
1203
|
+
id: "run-traces",
|
|
1204
|
+
title: "Server run trace persistence and privacy",
|
|
1205
|
+
harnesses: ["run-traces"],
|
|
1206
|
+
paths: [
|
|
1207
|
+
"packages/protocol/src/run-trace.ts",
|
|
1208
|
+
"packages/models/src/run-trace.ts",
|
|
1209
|
+
"packages/models/src/migrations/run-traces.ts",
|
|
1210
|
+
"packages/models/src/schema/run-traces.ts",
|
|
1211
|
+
"packages/models/src/schema-pg/run-traces.ts",
|
|
1212
|
+
"packages/runtime/src/run-trace-",
|
|
1213
|
+
"packages/runtime/src/telemetry.ts",
|
|
1214
|
+
"packages/runtime/src/trace-exporters.ts",
|
|
1215
|
+
"packages/runtime/src/providers/loop-tracing.ts",
|
|
1216
|
+
"packages/execution/src/run-trace-store.ts",
|
|
1217
|
+
"packages/execution/src/service/run-trace-lifecycle.ts",
|
|
1218
|
+
"packages/websocket/src/lib/http-tracing.ts",
|
|
1219
|
+
"packages/websocket/src/storage-retention.ts"
|
|
1220
|
+
]
|
|
1221
|
+
},
|
|
1222
|
+
{
|
|
1223
|
+
id: "run-readers",
|
|
1224
|
+
title: "Common run inspection for agents and CLI",
|
|
1225
|
+
harnesses: ["run-readers"],
|
|
1226
|
+
paths: [
|
|
1227
|
+
"packages/protocol/src/run-readers.ts",
|
|
1228
|
+
"packages/protocol/src/api-schemas/runs.ts",
|
|
1229
|
+
"packages/models/src/run-readers.ts",
|
|
1230
|
+
"packages/execution/src/runs.ts",
|
|
1231
|
+
"packages/execution/src/app-debug/run-recording.ts",
|
|
1232
|
+
"packages/execution/src/service/app-debug-service.ts",
|
|
1233
|
+
"packages/agents/src/capabilities/runs",
|
|
1234
|
+
"packages/agents/src/capabilities/jobs.ts",
|
|
1235
|
+
"packages/agents/src/evals/codeact-api-runs.ts",
|
|
1236
|
+
"packages/cli/src/commands/runs.ts",
|
|
1237
|
+
"packages/cli/src/app-debug/harness.ts",
|
|
1238
|
+
"packages/websocket/src/trpc/routers/runs.ts",
|
|
1239
|
+
"packages/websocket/src/lib/app-debug-service.ts"
|
|
1240
|
+
]
|
|
1241
|
+
},
|
|
1242
|
+
{
|
|
1243
|
+
id: "run-inspection",
|
|
1244
|
+
title: "Browser run ingestion and durable UI inspection",
|
|
1245
|
+
harnesses: ["browser-run-spans", "run-inspection-ui", "run-inspection-browser"],
|
|
1246
|
+
paths: [
|
|
1247
|
+
"packages/protocol/src/browser-run-traces.ts",
|
|
1248
|
+
"packages/execution/src/browser-app-run.ts",
|
|
1249
|
+
"packages/execution/src/browser-run-spans.ts",
|
|
1250
|
+
"packages/execution/src/browser-trace-policy.ts",
|
|
1251
|
+
"packages/websocket/src/routes/run-spans.ts",
|
|
1252
|
+
"packages/websocket/src/lib/test-ui-run-routes.ts",
|
|
1253
|
+
"web/src/lib/browserRunTrace.ts",
|
|
1254
|
+
"web/src/lib/workflow/browserWorkflowRunner.ts",
|
|
1255
|
+
"web/src/components/panels/TracePanel.tsx",
|
|
1256
|
+
"web/src/components/appbuilder/runtime/",
|
|
1257
|
+
"web/src/components/appbuilder/AppRuntimeView.tsx",
|
|
1258
|
+
"web/src/components/appbuilder/puck/useWidgetRuntime.ts",
|
|
1259
|
+
"web/src/components/appbuilder/puck/conditionalWidget.tsx",
|
|
1260
|
+
"web/src/components/workspace/ChatSurface.tsx",
|
|
1261
|
+
"web/src/stores/ChatDraftStore.ts",
|
|
1262
|
+
"web/src/components/appbuilder/puck/AgentActivityWidget.tsx",
|
|
1263
|
+
"web/src/components/runs/",
|
|
1264
|
+
"web/src/serverState/useRuns.ts",
|
|
1265
|
+
"web/src/serverState/runTraceCache.ts",
|
|
1266
|
+
"web/src/serverState/appRunActivity.ts",
|
|
1267
|
+
"web/src/hooks/useAppOperationRun.ts",
|
|
1268
|
+
"web/src/hooks/useRunInspection.ts",
|
|
1269
|
+
"web/src/stores/TraceStore.ts",
|
|
1270
|
+
"web/tests/journeys/run-observability.spec.ts"
|
|
1271
|
+
]
|
|
1272
|
+
},
|
|
1273
|
+
{
|
|
1274
|
+
id: "app-instance-history",
|
|
1275
|
+
title: "App instance management and historical results",
|
|
1276
|
+
harnesses: ["app-instance-history", "app-instance-history-ui", "app-instance-history-browser"],
|
|
1277
|
+
paths: [
|
|
1278
|
+
"packages/models/src/app-instance",
|
|
1279
|
+
"packages/models/src/run-readers.ts",
|
|
1280
|
+
"packages/execution/src/runs.ts",
|
|
1281
|
+
"packages/protocol/src/api-schemas/app-runs.ts",
|
|
1282
|
+
"packages/websocket/src/lib/app-instances-service.ts",
|
|
1283
|
+
"packages/websocket/src/routes/app-runs.ts",
|
|
1284
|
+
"packages/websocket/src/trpc/routers/app-instances.ts",
|
|
1285
|
+
"web/src/components/appbuilder/",
|
|
1286
|
+
"web/src/components/workspace/ApplicationSurface.tsx",
|
|
1287
|
+
"web/src/components/workspace/TabContent.tsx",
|
|
1288
|
+
"web/src/stores/WorkspaceTabsStore.ts",
|
|
1289
|
+
"web/src/serverState/useAppInstances.ts",
|
|
1290
|
+
"web/src/serverState/useRuns.ts",
|
|
1291
|
+
"web/tests/journeys/app-instances.spec.ts"
|
|
1012
1292
|
]
|
|
1013
1293
|
},
|
|
1014
1294
|
{
|
|
@@ -1017,6 +1297,7 @@ export const SURFACES = [
|
|
|
1017
1297
|
harnesses: ["app-debug", "app-build", "eval"],
|
|
1018
1298
|
paths: [
|
|
1019
1299
|
"packages/app-runtime/",
|
|
1300
|
+
"packages/app-export/",
|
|
1020
1301
|
"packages/agents/src/app-build/",
|
|
1021
1302
|
"packages/execution/src/app-debug/",
|
|
1022
1303
|
"packages/base-nodes/nodetool/examples/apps/",
|
|
@@ -1038,6 +1319,7 @@ export const SURFACES = [
|
|
|
1038
1319
|
"timeline-validate",
|
|
1039
1320
|
"timeline-debug",
|
|
1040
1321
|
"timeline-render",
|
|
1322
|
+
"timeline-score",
|
|
1041
1323
|
"timeline-versions",
|
|
1042
1324
|
"eval"
|
|
1043
1325
|
],
|
|
@@ -1048,10 +1330,12 @@ export const SURFACES = [
|
|
|
1048
1330
|
"packages/cli/src/timeline-debug/",
|
|
1049
1331
|
"packages/cli/src/commands/timeline-versions.ts",
|
|
1050
1332
|
"packages/cli/src/commands/timeline-render.ts",
|
|
1333
|
+
"packages/cli/src/commands/timeline-score.ts",
|
|
1051
1334
|
"packages/video-nodes/src/nodes/timeline/compositeRender.ts",
|
|
1052
1335
|
"packages/agents/src/tools/timeline-version-tools.ts",
|
|
1053
1336
|
"packages/models/src/timeline-sequence-version.ts",
|
|
1054
|
-
"packages/websocket/src/trpc/routers/timeline.ts"
|
|
1337
|
+
"packages/websocket/src/trpc/routers/timeline.ts",
|
|
1338
|
+
"scripts/motion-craft-eval.mjs"
|
|
1055
1339
|
]
|
|
1056
1340
|
},
|
|
1057
1341
|
{
|
|
@@ -1084,6 +1368,14 @@ export const SURFACES = [
|
|
|
1084
1368
|
harnesses: ["timeline-native-media-editing"],
|
|
1085
1369
|
paths: [
|
|
1086
1370
|
"packages/timeline/src/generative.ts",
|
|
1371
|
+
"packages/agents/src/capabilities/timelines.ts",
|
|
1372
|
+
"packages/agents/src/capabilities/timeline-media-edit.ts",
|
|
1373
|
+
"packages/agents/src/capabilities/timeline-clip-frames.ts",
|
|
1374
|
+
"packages/agents/tests/timeline-headless-media-parity.test.ts",
|
|
1375
|
+
"packages/runtime/src/trim-video-window.ts",
|
|
1376
|
+
"packages/websocket/src/timeline-generation-recovery.ts",
|
|
1377
|
+
"packages/websocket/src/lib/media.ts",
|
|
1378
|
+
"packages/websocket/tests/generation-recovery-media.test.ts",
|
|
1087
1379
|
"packages/timeline/src/extension.ts",
|
|
1088
1380
|
"packages/timeline/src/extensionRequest.ts",
|
|
1089
1381
|
"packages/timeline/src/takes.ts",
|
|
@@ -1103,17 +1395,6 @@ export const SURFACES = [
|
|
|
1103
1395
|
"web/src/lib/tools/builtin/timeline.ts"
|
|
1104
1396
|
]
|
|
1105
1397
|
},
|
|
1106
|
-
{
|
|
1107
|
-
id: "timeline-native-media-editing-server-generation-gap",
|
|
1108
|
-
title: "Server edit_timeline generative-edit submission",
|
|
1109
|
-
harnesses: [],
|
|
1110
|
-
paths: ["packages/agents/src/capabilities/timelines.ts"],
|
|
1111
|
-
gap: "edit_timeline deliberately excludes ui_timeline_generatively_edit_clip: " +
|
|
1112
|
-
"it can persist a timeline document but cannot submit or reconcile a " +
|
|
1113
|
-
"durable media-generation job. A future harness should drive that " +
|
|
1114
|
-
"server-side job through candidate creation, explicit apply_take, and " +
|
|
1115
|
-
"a restored undo snapshot without inventing an asset id."
|
|
1116
|
-
},
|
|
1117
1398
|
{
|
|
1118
1399
|
id: "timeline-audio-drive",
|
|
1119
1400
|
title: "Audio-driven timeline motion (bake_audio_animation, audio analysis)",
|
|
@@ -1276,7 +1557,9 @@ export const SURFACES = [
|
|
|
1276
1557
|
"packages/audio-nodes/src/nodes/game.ts",
|
|
1277
1558
|
"packages/game-nodes/src/nodes/game.ts",
|
|
1278
1559
|
"packages/agents/src/capabilities/game.ts",
|
|
1279
|
-
"packages/agents/src/capabilities/game.specs.ts"
|
|
1560
|
+
"packages/agents/src/capabilities/game.specs.ts",
|
|
1561
|
+
"packages/agents/src/capabilities/game3d.ts",
|
|
1562
|
+
"packages/agents/src/capabilities/game-asset-source.ts"
|
|
1280
1563
|
]
|
|
1281
1564
|
},
|
|
1282
1565
|
{
|
|
@@ -1285,6 +1568,12 @@ export const SURFACES = [
|
|
|
1285
1568
|
harnesses: ["blender"],
|
|
1286
1569
|
paths: ["packages/blender-nodes/"]
|
|
1287
1570
|
},
|
|
1571
|
+
{
|
|
1572
|
+
id: "manimgx",
|
|
1573
|
+
title: "ManimGX scenes (runner, nodes, authoring skill)",
|
|
1574
|
+
harnesses: ["manimgx"],
|
|
1575
|
+
paths: ["packages/manimgx-nodes/"]
|
|
1576
|
+
},
|
|
1288
1577
|
{
|
|
1289
1578
|
id: "entities",
|
|
1290
1579
|
title: "Entity library (ingredients, prompt injection, ui_entity_* tools)",
|
|
@@ -1361,7 +1650,9 @@ export const SURFACES = [
|
|
|
1361
1650
|
paths: [
|
|
1362
1651
|
"demo/src/",
|
|
1363
1652
|
"demo/scripts/render-tutorials.ts",
|
|
1364
|
-
"demo/scripts/render-marketing.ts"
|
|
1653
|
+
"demo/scripts/render-marketing.ts",
|
|
1654
|
+
"demo/scripts/encode-hero.mjs",
|
|
1655
|
+
"demo/scripts/vibe-track.ts"
|
|
1365
1656
|
]
|
|
1366
1657
|
},
|
|
1367
1658
|
{
|
|
@@ -1390,6 +1681,12 @@ export const SURFACES = [
|
|
|
1390
1681
|
"scripts/provider-codegen-check.mjs"
|
|
1391
1682
|
]
|
|
1392
1683
|
},
|
|
1684
|
+
{
|
|
1685
|
+
id: "mutation-testing",
|
|
1686
|
+
title: "Mutation testing tool and its score report",
|
|
1687
|
+
harnesses: ["mutator"],
|
|
1688
|
+
paths: ["packages/mutator/", "scripts/mutation-score.mjs"]
|
|
1689
|
+
},
|
|
1393
1690
|
{
|
|
1394
1691
|
id: "deploy-image",
|
|
1395
1692
|
title: "Deployed GHCR image (Fly.io / self-hosted)",
|
|
@@ -1499,6 +1796,7 @@ export const SURFACES = [
|
|
|
1499
1796
|
"packages/together-nodes/",
|
|
1500
1797
|
"packages/topaz-nodes/",
|
|
1501
1798
|
"packages/transformers-js-nodes/",
|
|
1799
|
+
"packages/whisper-cpp/",
|
|
1502
1800
|
"packages/video-nodes/",
|
|
1503
1801
|
// Portable runner (graph + registry → a Request/Response handler); CI
|
|
1504
1802
|
// groups it with the node packages for the same reason.
|
|
@@ -1666,11 +1964,21 @@ export function auditPathClaims(rootDirs, surfaces = SURFACES, unclaimed = UNCLA
|
|
|
1666
1964
|
return !claims.some((p) => p.startsWith(prefix) || prefix.startsWith(p));
|
|
1667
1965
|
});
|
|
1668
1966
|
}
|
|
1669
|
-
|
|
1967
|
+
/**
|
|
1968
|
+
* Select checks for a diff. Without `packages`, a surface is touched only by a
|
|
1969
|
+
* changed path under one of its prefixes. With them, a surface is also touched
|
|
1970
|
+
* when one of its paths lies inside a workspace downstream of a changed one,
|
|
1971
|
+
* since its code then runs against changed code (`viaDependency`).
|
|
1972
|
+
*/
|
|
1973
|
+
export function planGate(changedFiles, harnesses = HARNESSES, surfaces = SURFACES, packages) {
|
|
1670
1974
|
const byId = new Map(harnesses.map((h) => [h.id, h]));
|
|
1671
1975
|
const touched = new Map();
|
|
1976
|
+
const viaDependency = new Set();
|
|
1672
1977
|
const unmappedFiles = [];
|
|
1978
|
+
const globalFiles = changedFiles.filter(isGlobalGateFile);
|
|
1673
1979
|
for (const file of changedFiles) {
|
|
1980
|
+
if (isGlobalGateFile(file))
|
|
1981
|
+
continue;
|
|
1674
1982
|
let matched = false;
|
|
1675
1983
|
for (const s of surfaces) {
|
|
1676
1984
|
if (s.paths.some((p) => file === p || file.startsWith(p))) {
|
|
@@ -1683,6 +1991,21 @@ export function planGate(changedFiles, harnesses = HARNESSES, surfaces = SURFACE
|
|
|
1683
1991
|
if (!matched)
|
|
1684
1992
|
unmappedFiles.push(file);
|
|
1685
1993
|
}
|
|
1994
|
+
if (packages) {
|
|
1995
|
+
const dirs = computeAffected(changedFiles, packages)
|
|
1996
|
+
.affected.map((name) => packages.find((p) => p.name === name)?.dir)
|
|
1997
|
+
.filter((d) => d !== undefined)
|
|
1998
|
+
.map((d) => d.replace(/^\.\//, "").replace(/\/+$/, ""));
|
|
1999
|
+
for (const s of surfaces) {
|
|
2000
|
+
if (touched.has(s.id))
|
|
2001
|
+
continue;
|
|
2002
|
+
const inside = s.paths.some((p) => dirs.some((d) => p === d || p.startsWith(`${d}/`)));
|
|
2003
|
+
if (inside) {
|
|
2004
|
+
touched.set(s.id, []);
|
|
2005
|
+
viaDependency.add(s.id);
|
|
2006
|
+
}
|
|
2007
|
+
}
|
|
2008
|
+
}
|
|
1686
2009
|
const checkByHarness = new Map();
|
|
1687
2010
|
const manualByHarness = new Map();
|
|
1688
2011
|
const uncoveredSurfaces = [];
|
|
@@ -1707,6 +2030,7 @@ export function planGate(changedFiles, harnesses = HARNESSES, surfaces = SURFACE
|
|
|
1707
2030
|
harnessId: id,
|
|
1708
2031
|
command: h.selfcheck.command,
|
|
1709
2032
|
cost: h.selfcheck.cost,
|
|
2033
|
+
suiteOnly: h.selfcheck.suiteOnly ?? false,
|
|
1710
2034
|
surfaces: [s.id]
|
|
1711
2035
|
});
|
|
1712
2036
|
}
|
|
@@ -1726,13 +2050,33 @@ export function planGate(changedFiles, harnesses = HARNESSES, surfaces = SURFACE
|
|
|
1726
2050
|
}
|
|
1727
2051
|
}
|
|
1728
2052
|
}
|
|
2053
|
+
// A global file selects every selfcheck, as `--all` does; surfaces it
|
|
2054
|
+
// would not otherwise name stay with an empty list.
|
|
2055
|
+
if (globalFiles.length > 0) {
|
|
2056
|
+
for (const h of harnesses) {
|
|
2057
|
+
if (!h.selfcheck || checkByHarness.has(h.id))
|
|
2058
|
+
continue;
|
|
2059
|
+
checkByHarness.set(h.id, {
|
|
2060
|
+
harnessId: h.id,
|
|
2061
|
+
command: h.selfcheck.command,
|
|
2062
|
+
cost: h.selfcheck.cost,
|
|
2063
|
+
suiteOnly: h.selfcheck.suiteOnly ?? false,
|
|
2064
|
+
surfaces: []
|
|
2065
|
+
});
|
|
2066
|
+
}
|
|
2067
|
+
}
|
|
1729
2068
|
return {
|
|
1730
2069
|
changedFiles,
|
|
1731
|
-
surfaces: [...touched.entries()].map(([id, files]) => ({
|
|
2070
|
+
surfaces: [...touched.entries()].map(([id, files]) => ({
|
|
2071
|
+
id,
|
|
2072
|
+
files,
|
|
2073
|
+
...(viaDependency.has(id) && { viaDependency: true })
|
|
2074
|
+
})),
|
|
1732
2075
|
checks: [...checkByHarness.values()],
|
|
1733
2076
|
manual: [...manualByHarness.values()],
|
|
1734
2077
|
uncoveredSurfaces,
|
|
1735
|
-
unmappedFiles
|
|
2078
|
+
unmappedFiles,
|
|
2079
|
+
globalFiles
|
|
1736
2080
|
};
|
|
1737
2081
|
}
|
|
1738
2082
|
//# sourceMappingURL=registry.js.map
|