@interf/compiler 0.6.1 → 0.6.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 +94 -74
- package/builtin-workflows/interf/README.md +5 -5
- package/builtin-workflows/interf/compile/stages/shape/SKILL.md +4 -4
- package/builtin-workflows/interf/improve/SKILL.md +2 -2
- package/builtin-workflows/interf/use/query/SKILL.md +1 -1
- package/builtin-workflows/interf/workflow.json +6 -6
- package/builtin-workflows/interf/workflow.schema.json +1 -1
- package/dist/bin.js +2 -28
- package/dist/{commands → cli/commands}/check-draft.d.ts +2 -2
- package/dist/{commands → cli/commands}/check-draft.js +12 -12
- package/dist/{commands → cli/commands}/compile-controller.d.ts +3 -3
- package/dist/{commands → cli/commands}/compile-controller.js +36 -34
- package/dist/{commands → cli/commands}/compile.d.ts +2 -2
- package/dist/{commands → cli/commands}/compile.js +15 -11
- package/dist/{commands → cli/commands}/compiled-flow.d.ts +3 -4
- package/dist/{commands → cli/commands}/compiled-flow.js +9 -14
- package/dist/{commands → cli/commands}/create-workflow-wizard.d.ts +3 -3
- package/dist/{commands → cli/commands}/create-workflow-wizard.js +61 -34
- package/dist/{commands → cli/commands}/create.d.ts +1 -1
- package/dist/{commands → cli/commands}/create.js +15 -18
- package/dist/{commands → cli/commands}/dataset-selection.d.ts +1 -1
- package/dist/{commands → cli/commands}/default.js +3 -3
- package/dist/{commands → cli/commands}/doctor.js +5 -6
- package/dist/{commands → cli/commands}/executor-flow.d.ts +1 -1
- package/dist/{commands → cli/commands}/executor-flow.js +13 -16
- package/dist/{commands → cli/commands}/init.d.ts +4 -1
- package/dist/{commands → cli/commands}/init.js +157 -72
- package/dist/{commands → cli/commands}/list.js +5 -5
- package/dist/{commands → cli/commands}/reset.js +4 -4
- package/dist/{commands → cli/commands}/source-config-wizard.d.ts +8 -3
- package/dist/{commands → cli/commands}/source-config-wizard.js +161 -87
- package/dist/{commands → cli/commands}/status.js +20 -11
- package/dist/{commands → cli/commands}/test-flow.d.ts +13 -4
- package/dist/{commands → cli/commands}/test-flow.js +30 -26
- package/dist/cli/commands/test.d.ts +14 -0
- package/dist/{commands → cli/commands}/test.js +39 -23
- package/dist/{commands → cli/commands}/verify.js +4 -4
- package/dist/cli/index.d.ts +21 -0
- package/dist/cli/index.js +33 -0
- package/dist/index.d.ts +22 -11
- package/dist/index.js +15 -6
- package/dist/lib/agent-args.d.ts +1 -4
- package/dist/lib/agent-args.js +1 -52
- package/dist/lib/agent-constants.d.ts +1 -5
- package/dist/lib/agent-constants.js +1 -28
- package/dist/lib/agent-detection.d.ts +1 -7
- package/dist/lib/agent-detection.js +1 -65
- package/dist/lib/agent-execution.d.ts +1 -2
- package/dist/lib/agent-execution.js +1 -243
- package/dist/lib/agent-logs.d.ts +1 -2
- package/dist/lib/agent-logs.js +1 -17
- package/dist/lib/agent-preflight.d.ts +1 -7
- package/dist/lib/agent-preflight.js +1 -77
- package/dist/lib/agent-render.d.ts +1 -8
- package/dist/lib/agent-render.js +1 -218
- package/dist/lib/agent-shells.d.ts +1 -69
- package/dist/lib/agent-shells.js +1 -1021
- package/dist/lib/agent-status.d.ts +1 -3
- package/dist/lib/agent-status.js +1 -58
- package/dist/lib/agent-types.d.ts +1 -30
- package/dist/lib/agent-types.js +1 -1
- package/dist/lib/agents.d.ts +1 -6
- package/dist/lib/agents.js +1 -5
- package/dist/lib/builtin-compiled-workflow.d.ts +1 -38
- package/dist/lib/builtin-compiled-workflow.js +1 -94
- package/dist/lib/compiled-compile.d.ts +1 -48
- package/dist/lib/compiled-compile.js +1 -255
- package/dist/lib/compiled-paths.d.ts +1 -40
- package/dist/lib/compiled-paths.js +3 -106
- package/dist/lib/compiled-raw.d.ts +1 -49
- package/dist/lib/compiled-raw.js +3 -102
- package/dist/lib/compiled-reset.d.ts +1 -2
- package/dist/lib/compiled-reset.js +3 -72
- package/dist/lib/compiled-schema.d.ts +1 -31
- package/dist/lib/compiled-schema.js +1 -141
- package/dist/lib/execution-profile.d.ts +1 -17
- package/dist/lib/execution-profile.js +1 -84
- package/dist/lib/executors.d.ts +1 -32
- package/dist/lib/executors.js +1 -43
- package/dist/lib/interf-bootstrap.d.ts +1 -3
- package/dist/lib/interf-bootstrap.js +3 -18
- package/dist/lib/interf-detect.d.ts +1 -33
- package/dist/lib/interf-detect.js +3 -176
- package/dist/lib/interf-scaffold.d.ts +1 -2
- package/dist/lib/interf-scaffold.js +3 -114
- package/dist/lib/interf-workflow-package.d.ts +1 -25
- package/dist/lib/interf-workflow-package.js +1 -342
- package/dist/lib/interf.d.ts +1 -5
- package/dist/lib/interf.js +3 -4
- package/dist/lib/local-workflows.d.ts +1 -54
- package/dist/lib/local-workflows.js +1 -422
- package/dist/lib/package-root.d.ts +1 -0
- package/dist/lib/package-root.js +1 -0
- package/dist/lib/project-paths.d.ts +1 -11
- package/dist/lib/project-paths.js +3 -32
- package/dist/lib/runtime-acceptance.d.ts +1 -9
- package/dist/lib/runtime-acceptance.js +1 -269
- package/dist/lib/runtime-contracts.d.ts +1 -2
- package/dist/lib/runtime-contracts.js +1 -48
- package/dist/lib/runtime-inventory.d.ts +1 -7
- package/dist/lib/runtime-inventory.js +1 -29
- package/dist/lib/runtime-paths.d.ts +1 -8
- package/dist/lib/runtime-paths.js +1 -26
- package/dist/lib/runtime-prompt.d.ts +1 -2
- package/dist/lib/runtime-prompt.js +1 -48
- package/dist/lib/runtime-reconcile.d.ts +1 -2
- package/dist/lib/runtime-reconcile.js +1 -193
- package/dist/lib/runtime-runs.d.ts +1 -11
- package/dist/lib/runtime-runs.js +1 -262
- package/dist/lib/runtime-types.d.ts +1 -43
- package/dist/lib/runtime-types.js +1 -1
- package/dist/lib/runtime.d.ts +1 -6
- package/dist/lib/runtime.js +1 -5
- package/dist/lib/schema.d.ts +4 -1073
- package/dist/lib/schema.js +6 -542
- package/dist/lib/source-config.d.ts +1 -39
- package/dist/lib/source-config.js +3 -293
- package/dist/lib/state-artifacts.d.ts +1 -8
- package/dist/lib/state-artifacts.js +1 -13
- package/dist/lib/state-health.d.ts +1 -4
- package/dist/lib/state-health.js +1 -132
- package/dist/lib/state-io.d.ts +1 -10
- package/dist/lib/state-io.js +1 -76
- package/dist/lib/state-paths.d.ts +1 -4
- package/dist/lib/state-paths.js +1 -13
- package/dist/lib/state-view.d.ts +1 -4
- package/dist/lib/state-view.js +1 -103
- package/dist/lib/state.d.ts +1 -7
- package/dist/lib/state.js +1 -12
- package/dist/lib/test-execution.d.ts +1 -14
- package/dist/lib/test-execution.js +3 -525
- package/dist/lib/test-matrices.d.ts +1 -90
- package/dist/lib/test-matrices.js +3 -96
- package/dist/lib/test-paths.d.ts +1 -12
- package/dist/lib/test-paths.js +3 -59
- package/dist/lib/test-profile-presets.d.ts +1 -57
- package/dist/lib/test-profile-presets.js +3 -50
- package/dist/lib/test-sandbox.d.ts +1 -11
- package/dist/lib/test-sandbox.js +3 -105
- package/dist/lib/test-specs.d.ts +1 -7
- package/dist/lib/test-specs.js +3 -114
- package/dist/lib/test-targets.d.ts +1 -5
- package/dist/lib/test-targets.js +3 -38
- package/dist/lib/test-types.d.ts +1 -17
- package/dist/lib/test-types.js +3 -1
- package/dist/lib/test.d.ts +1 -4
- package/dist/lib/test.js +3 -3
- package/dist/lib/validate-compiled.d.ts +1 -27
- package/dist/lib/validate-compiled.js +1 -241
- package/dist/lib/validate-helpers.d.ts +1 -12
- package/dist/lib/validate-helpers.js +1 -41
- package/dist/lib/validate.d.ts +1 -21
- package/dist/lib/validate.js +1 -249
- package/dist/lib/workflow-authoring.d.ts +1 -26
- package/dist/lib/workflow-authoring.js +1 -119
- package/dist/lib/workflow-definitions.d.ts +1 -78
- package/dist/lib/workflow-definitions.js +1 -203
- package/dist/lib/workflow-edit-session.d.ts +1 -16
- package/dist/lib/workflow-edit-session.js +1 -57
- package/dist/lib/workflow-edit-utils.d.ts +1 -10
- package/dist/lib/workflow-edit-utils.js +1 -39
- package/dist/lib/workflow-helpers.d.ts +1 -38
- package/dist/lib/workflow-helpers.js +1 -167
- package/dist/lib/workflow-improvement.d.ts +1 -22
- package/dist/lib/workflow-improvement.js +1 -209
- package/dist/lib/workflow-primitives.d.ts +1 -2
- package/dist/lib/workflow-primitives.js +1 -5
- package/dist/lib/workflow-review-paths.d.ts +1 -10
- package/dist/lib/workflow-review-paths.js +1 -27
- package/dist/lib/workflow-stage-policy.d.ts +1 -5
- package/dist/lib/workflow-stage-policy.js +1 -31
- package/dist/lib/workflow-stage-runner.d.ts +1 -41
- package/dist/lib/workflow-stage-runner.js +1 -109
- package/dist/lib/workflows.d.ts +1 -15
- package/dist/lib/workflows.js +1 -31
- package/dist/packages/agents/index.d.ts +17 -0
- package/dist/packages/agents/index.js +15 -0
- package/dist/packages/agents/lib/agents.d.ts +6 -0
- package/dist/packages/agents/lib/agents.js +5 -0
- package/dist/packages/agents/lib/args.d.ts +4 -0
- package/dist/packages/agents/lib/args.js +52 -0
- package/dist/packages/agents/lib/constants.d.ts +5 -0
- package/dist/packages/agents/lib/constants.js +28 -0
- package/dist/packages/agents/lib/detection.d.ts +7 -0
- package/dist/packages/agents/lib/detection.js +65 -0
- package/dist/packages/agents/lib/execution-profile.d.ts +17 -0
- package/dist/packages/agents/lib/execution-profile.js +84 -0
- package/dist/packages/agents/lib/execution.d.ts +2 -0
- package/dist/packages/agents/lib/execution.js +243 -0
- package/dist/packages/agents/lib/executors.d.ts +32 -0
- package/dist/packages/agents/lib/executors.js +45 -0
- package/dist/packages/agents/lib/logs.d.ts +2 -0
- package/dist/packages/agents/lib/logs.js +17 -0
- package/dist/packages/agents/lib/preflight.d.ts +7 -0
- package/dist/packages/agents/lib/preflight.js +77 -0
- package/dist/packages/agents/lib/render.d.ts +8 -0
- package/dist/packages/agents/lib/render.js +218 -0
- package/dist/packages/agents/lib/schema.d.ts +8 -0
- package/dist/packages/agents/lib/schema.js +7 -0
- package/dist/packages/agents/lib/shells.d.ts +69 -0
- package/dist/packages/agents/lib/shells.js +1021 -0
- package/dist/packages/agents/lib/status.d.ts +3 -0
- package/dist/packages/agents/lib/status.js +58 -0
- package/dist/packages/agents/lib/types.d.ts +30 -0
- package/dist/packages/agents/lib/types.js +1 -0
- package/dist/{lib → packages/agents/lib}/user-config.d.ts +1 -0
- package/dist/{lib → packages/agents/lib}/user-config.js +3 -2
- package/dist/packages/compiler/compiled-compile.d.ts +48 -0
- package/dist/packages/compiler/compiled-compile.js +256 -0
- package/dist/packages/compiler/compiled-schema.d.ts +31 -0
- package/dist/packages/compiler/compiled-schema.js +141 -0
- package/dist/packages/compiler/index.d.ts +24 -0
- package/dist/packages/compiler/index.js +23 -0
- package/dist/packages/compiler/lib/schema.d.ts +684 -0
- package/dist/packages/compiler/lib/schema.js +361 -0
- package/dist/packages/compiler/runtime-acceptance.d.ts +9 -0
- package/dist/packages/compiler/runtime-acceptance.js +269 -0
- package/dist/packages/compiler/runtime-contracts.d.ts +2 -0
- package/dist/packages/compiler/runtime-contracts.js +48 -0
- package/dist/packages/compiler/runtime-inventory.d.ts +7 -0
- package/dist/packages/compiler/runtime-inventory.js +29 -0
- package/dist/packages/compiler/runtime-paths.d.ts +8 -0
- package/dist/packages/compiler/runtime-paths.js +26 -0
- package/dist/packages/compiler/runtime-prompt.d.ts +2 -0
- package/dist/packages/compiler/runtime-prompt.js +48 -0
- package/dist/packages/compiler/runtime-reconcile.d.ts +2 -0
- package/dist/packages/compiler/runtime-reconcile.js +193 -0
- package/dist/packages/compiler/runtime-runs.d.ts +11 -0
- package/dist/packages/compiler/runtime-runs.js +262 -0
- package/dist/packages/compiler/runtime-types.d.ts +43 -0
- package/dist/packages/compiler/runtime-types.js +1 -0
- package/dist/packages/compiler/runtime.d.ts +6 -0
- package/dist/packages/compiler/runtime.js +5 -0
- package/dist/packages/compiler/state-artifacts.d.ts +8 -0
- package/dist/packages/compiler/state-artifacts.js +13 -0
- package/dist/packages/compiler/state-health.d.ts +4 -0
- package/dist/packages/compiler/state-health.js +132 -0
- package/dist/packages/compiler/state-io.d.ts +10 -0
- package/dist/packages/compiler/state-io.js +76 -0
- package/dist/packages/compiler/state-paths.d.ts +4 -0
- package/dist/packages/compiler/state-paths.js +13 -0
- package/dist/packages/compiler/state-view.d.ts +4 -0
- package/dist/packages/compiler/state-view.js +103 -0
- package/dist/packages/compiler/state.d.ts +7 -0
- package/dist/packages/compiler/state.js +12 -0
- package/dist/packages/compiler/validate-compiled.d.ts +27 -0
- package/dist/packages/compiler/validate-compiled.js +241 -0
- package/dist/packages/compiler/validate-helpers.d.ts +12 -0
- package/dist/packages/compiler/validate-helpers.js +41 -0
- package/dist/packages/compiler/validate.d.ts +21 -0
- package/dist/packages/compiler/validate.js +249 -0
- package/dist/packages/compiler/workflow-primitives.d.ts +2 -0
- package/dist/packages/compiler/workflow-primitives.js +5 -0
- package/dist/packages/compiler/workflows.d.ts +15 -0
- package/dist/packages/compiler/workflows.js +31 -0
- package/dist/packages/project-model/compiled-paths.d.ts +40 -0
- package/dist/packages/project-model/compiled-paths.js +106 -0
- package/dist/packages/project-model/compiled-raw.d.ts +49 -0
- package/dist/packages/project-model/compiled-raw.js +102 -0
- package/dist/packages/project-model/compiled-reset.d.ts +2 -0
- package/dist/packages/project-model/compiled-reset.js +72 -0
- package/dist/packages/project-model/index.d.ts +11 -0
- package/dist/packages/project-model/index.js +10 -0
- package/dist/packages/project-model/interf-bootstrap.d.ts +3 -0
- package/dist/packages/project-model/interf-bootstrap.js +18 -0
- package/dist/packages/project-model/interf-detect.d.ts +33 -0
- package/dist/packages/project-model/interf-detect.js +176 -0
- package/dist/packages/project-model/interf-scaffold.d.ts +2 -0
- package/dist/packages/project-model/interf-scaffold.js +124 -0
- package/dist/packages/project-model/interf.d.ts +5 -0
- package/dist/packages/project-model/interf.js +4 -0
- package/dist/packages/project-model/lib/schema.d.ts +125 -0
- package/dist/packages/project-model/lib/schema.js +62 -0
- package/dist/packages/project-model/project-paths.d.ts +11 -0
- package/dist/packages/project-model/project-paths.js +32 -0
- package/dist/packages/project-model/source-config.d.ts +38 -0
- package/dist/packages/project-model/source-config.js +297 -0
- package/dist/packages/testing/index.d.ts +13 -0
- package/dist/packages/testing/index.js +10 -0
- package/dist/packages/testing/lib/schema.d.ts +261 -0
- package/dist/packages/testing/lib/schema.js +119 -0
- package/dist/packages/testing/test-execution.d.ts +14 -0
- package/dist/packages/testing/test-execution.js +525 -0
- package/dist/packages/testing/test-matrices.d.ts +90 -0
- package/dist/packages/testing/test-matrices.js +96 -0
- package/dist/packages/testing/test-paths.d.ts +12 -0
- package/dist/packages/testing/test-paths.js +59 -0
- package/dist/packages/testing/test-profile-presets.d.ts +57 -0
- package/dist/packages/testing/test-profile-presets.js +50 -0
- package/dist/packages/testing/test-sandbox.d.ts +11 -0
- package/dist/packages/testing/test-sandbox.js +105 -0
- package/dist/packages/testing/test-specs.d.ts +7 -0
- package/dist/packages/testing/test-specs.js +114 -0
- package/dist/packages/testing/test-targets.d.ts +5 -0
- package/dist/packages/testing/test-targets.js +38 -0
- package/dist/packages/testing/test-types.d.ts +16 -0
- package/dist/packages/testing/test-types.js +1 -0
- package/dist/packages/testing/test.d.ts +4 -0
- package/dist/packages/testing/test.js +3 -0
- package/dist/packages/workflow-authoring/index.d.ts +4 -0
- package/dist/packages/workflow-authoring/index.js +4 -0
- package/dist/packages/workflow-authoring/lib/workflow-edit-utils.d.ts +10 -0
- package/dist/packages/workflow-authoring/lib/workflow-edit-utils.js +39 -0
- package/dist/packages/workflow-authoring/workflow-authoring.d.ts +26 -0
- package/dist/packages/workflow-authoring/workflow-authoring.js +120 -0
- package/dist/packages/workflow-authoring/workflow-edit-session.d.ts +16 -0
- package/dist/packages/workflow-authoring/workflow-edit-session.js +57 -0
- package/dist/packages/workflow-authoring/workflow-improvement.d.ts +23 -0
- package/dist/packages/workflow-authoring/workflow-improvement.js +209 -0
- package/dist/packages/workflow-package/builtin-compiled-workflow.d.ts +38 -0
- package/dist/packages/workflow-package/builtin-compiled-workflow.js +94 -0
- package/dist/packages/workflow-package/index.d.ts +9 -0
- package/dist/packages/workflow-package/index.js +9 -0
- package/dist/packages/workflow-package/interf-workflow-package.d.ts +25 -0
- package/dist/packages/workflow-package/interf-workflow-package.js +342 -0
- package/dist/{lib/config.d.ts → packages/workflow-package/lib/package-root.d.ts} +0 -1
- package/dist/packages/workflow-package/lib/package-root.js +6 -0
- package/dist/packages/workflow-package/local-workflows.d.ts +54 -0
- package/dist/packages/workflow-package/local-workflows.js +422 -0
- package/dist/packages/workflow-package/workflow-definitions.d.ts +78 -0
- package/dist/packages/workflow-package/workflow-definitions.js +203 -0
- package/dist/packages/workflow-package/workflow-helpers.d.ts +38 -0
- package/dist/packages/workflow-package/workflow-helpers.js +167 -0
- package/dist/packages/workflow-package/workflow-review-paths.d.ts +10 -0
- package/dist/packages/workflow-package/workflow-review-paths.js +27 -0
- package/dist/packages/workflow-package/workflow-stage-policy.d.ts +5 -0
- package/dist/packages/workflow-package/workflow-stage-policy.js +31 -0
- package/dist/packages/workflow-package/workflow-stage-runner.d.ts +41 -0
- package/dist/packages/workflow-package/workflow-stage-runner.js +109 -0
- package/package.json +43 -19
- package/dist/commands/test.d.ts +0 -3
- package/dist/lib/compiled-home.d.ts +0 -5
- package/dist/lib/compiled-home.js +0 -32
- package/dist/lib/config.js +0 -9
- /package/dist/{commands → cli/commands}/dataset-selection.js +0 -0
- /package/dist/{commands → cli/commands}/default.d.ts +0 -0
- /package/dist/{commands → cli/commands}/doctor.d.ts +0 -0
- /package/dist/{commands → cli/commands}/list.d.ts +0 -0
- /package/dist/{commands → cli/commands}/reset.d.ts +0 -0
- /package/dist/{commands → cli/commands}/status.d.ts +0 -0
- /package/dist/{commands → cli/commands}/verify.d.ts +0 -0
|
@@ -1,269 +1 @@
|
|
|
1
|
-
|
|
2
|
-
import { join } from "node:path";
|
|
3
|
-
import { listFilesRecursive } from "./filesystem.js";
|
|
4
|
-
import { readJsonFileWithSchema } from "./parse.js";
|
|
5
|
-
import { WORKFLOW_SCHEMA_FILE, compiledZoneAbsolutePath, findCompiledSchemaZone, readCompiledSchemaFile, } from "./compiled-schema.js";
|
|
6
|
-
import { RuntimeStageContractSchema, } from "./schema.js";
|
|
7
|
-
import { stageContractPath } from "./runtime-paths.js";
|
|
8
|
-
import { workflowPackagePathForCompiled } from "./compiled-paths.js";
|
|
9
|
-
import { loadState } from "./state-io.js";
|
|
10
|
-
import { countBrokenWikilinks, isOutputMarkdownFile, safeReadText, validateSynthFiles } from "./validate.js";
|
|
11
|
-
function toFiniteNumber(value) {
|
|
12
|
-
if (typeof value !== "number" || !Number.isFinite(value))
|
|
13
|
-
return null;
|
|
14
|
-
return value;
|
|
15
|
-
}
|
|
16
|
-
function hasAcceptanceRules(acceptance) {
|
|
17
|
-
if (!acceptance)
|
|
18
|
-
return false;
|
|
19
|
-
return (acceptance.artifacts_exist?.length ?? 0) > 0 ||
|
|
20
|
-
(acceptance.stage_truthy?.length ?? 0) > 0 ||
|
|
21
|
-
Object.keys(acceptance.stage_equals_counts ?? {}).length > 0 ||
|
|
22
|
-
Object.keys(acceptance.stage_at_least ?? {}).length > 0 ||
|
|
23
|
-
Object.keys(acceptance.stage_at_least_counts ?? {}).length > 0 ||
|
|
24
|
-
Object.keys(acceptance.zone_counts_at_least ?? {}).length > 0 ||
|
|
25
|
-
Object.keys(acceptance.zone_counts_at_least_counts ?? {}).length > 0 ||
|
|
26
|
-
(acceptance.markdown_frontmatter_valid_zones?.length ?? 0) > 0 ||
|
|
27
|
-
Object.keys(acceptance.frontmatter_required_keys_in_zones ?? {}).length > 0 ||
|
|
28
|
-
(acceptance.markdown_abstract_valid_zones?.length ?? 0) > 0 ||
|
|
29
|
-
(acceptance.wikilinks_valid_in_zones?.length ?? 0) > 0 ||
|
|
30
|
-
Object.keys(acceptance.artifacts_must_not_contain ?? {}).length > 0;
|
|
31
|
-
}
|
|
32
|
-
function readPathValue(record, keyPath) {
|
|
33
|
-
if (!record)
|
|
34
|
-
return undefined;
|
|
35
|
-
return keyPath
|
|
36
|
-
.split(".")
|
|
37
|
-
.filter((segment) => segment.length > 0)
|
|
38
|
-
.reduce((current, segment) => {
|
|
39
|
-
if (!current || typeof current !== "object" || Array.isArray(current))
|
|
40
|
-
return undefined;
|
|
41
|
-
return current[segment];
|
|
42
|
-
}, record);
|
|
43
|
-
}
|
|
44
|
-
function countZoneArtifacts(compiledPath, zonePath, kind) {
|
|
45
|
-
const absolutePath = compiledZoneAbsolutePath(compiledPath, { path: zonePath });
|
|
46
|
-
if (!existsSync(absolutePath))
|
|
47
|
-
return 0;
|
|
48
|
-
if (kind === "file")
|
|
49
|
-
return 1;
|
|
50
|
-
return listFilesRecursive(absolutePath).length;
|
|
51
|
-
}
|
|
52
|
-
function markdownFilesForZone(compiledPath, zonePath, kind) {
|
|
53
|
-
const absolutePath = compiledZoneAbsolutePath(compiledPath, { path: zonePath });
|
|
54
|
-
if (!existsSync(absolutePath))
|
|
55
|
-
return [];
|
|
56
|
-
if (kind === "file") {
|
|
57
|
-
return isOutputMarkdownFile(absolutePath) ? [absolutePath] : [];
|
|
58
|
-
}
|
|
59
|
-
return listFilesRecursive(absolutePath, isOutputMarkdownFile);
|
|
60
|
-
}
|
|
61
|
-
function zoneRoots(compiledPath, acceptanceZones) {
|
|
62
|
-
const schema = readCompiledSchemaFile(workflowPackagePathForCompiled(compiledPath));
|
|
63
|
-
if (!schema)
|
|
64
|
-
return [];
|
|
65
|
-
return acceptanceZones
|
|
66
|
-
.map((zoneId) => findCompiledSchemaZone(schema, zoneId))
|
|
67
|
-
.filter((zone) => zone !== null)
|
|
68
|
-
.map((zone) => compiledZoneAbsolutePath(compiledPath, zone));
|
|
69
|
-
}
|
|
70
|
-
function readArtifactText(compiledPath, relativePath) {
|
|
71
|
-
const artifactPath = join(compiledPath, relativePath);
|
|
72
|
-
if (!existsSync(artifactPath))
|
|
73
|
-
return null;
|
|
74
|
-
return safeReadText(artifactPath);
|
|
75
|
-
}
|
|
76
|
-
function resolveStageCounts(contract, stageRecord) {
|
|
77
|
-
const merged = { ...contract.counts };
|
|
78
|
-
const fromStage = stageRecord?.counts;
|
|
79
|
-
if (fromStage && typeof fromStage === "object" && !Array.isArray(fromStage)) {
|
|
80
|
-
for (const [key, value] of Object.entries(fromStage)) {
|
|
81
|
-
const numeric = toFiniteNumber(value);
|
|
82
|
-
if (numeric !== null)
|
|
83
|
-
merged[key] = numeric;
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
return merged;
|
|
87
|
-
}
|
|
88
|
-
export function stageRecordFromState(state, stageId) {
|
|
89
|
-
const stages = state?.stages;
|
|
90
|
-
if (!stages || typeof stages !== "object")
|
|
91
|
-
return null;
|
|
92
|
-
const stage = stages[stageId];
|
|
93
|
-
if (!stage || typeof stage !== "object" || Array.isArray(stage))
|
|
94
|
-
return null;
|
|
95
|
-
return stage;
|
|
96
|
-
}
|
|
97
|
-
export function validateResolvedStageAcceptance(dirPath, options) {
|
|
98
|
-
const acceptance = options.acceptance;
|
|
99
|
-
if (!hasAcceptanceRules(acceptance)) {
|
|
100
|
-
return {
|
|
101
|
-
ok: true,
|
|
102
|
-
summary: "No additional stage acceptance criteria were declared.",
|
|
103
|
-
failures: [],
|
|
104
|
-
};
|
|
105
|
-
}
|
|
106
|
-
const schema = readCompiledSchemaFile(workflowPackagePathForCompiled(dirPath));
|
|
107
|
-
if (!schema) {
|
|
108
|
-
return {
|
|
109
|
-
ok: false,
|
|
110
|
-
summary: `Stage acceptance failed for ${options.stageId}: missing workflow schema.`,
|
|
111
|
-
failures: [`Missing workflow/${WORKFLOW_SCHEMA_FILE}.`],
|
|
112
|
-
};
|
|
113
|
-
}
|
|
114
|
-
const failures = [];
|
|
115
|
-
const state = loadState(dirPath);
|
|
116
|
-
const stageRecord = stageRecordFromState(state, options.stageId);
|
|
117
|
-
const counts = options.counts ?? {};
|
|
118
|
-
for (const relativePath of acceptance?.artifacts_exist ?? []) {
|
|
119
|
-
if (!existsSync(join(dirPath, relativePath))) {
|
|
120
|
-
failures.push(`Missing required artifact: ${relativePath}.`);
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
for (const keyPath of acceptance?.stage_truthy ?? []) {
|
|
124
|
-
if (!readPathValue(stageRecord, keyPath)) {
|
|
125
|
-
failures.push(`Expected truthy stage value at "${keyPath}".`);
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
for (const [keyPath, countKey] of Object.entries(acceptance?.stage_equals_counts ?? {})) {
|
|
129
|
-
const actual = readPathValue(stageRecord, keyPath);
|
|
130
|
-
const expected = counts[countKey];
|
|
131
|
-
if (typeof expected !== "number") {
|
|
132
|
-
failures.push(`Acceptance references missing count "${countKey}" for "${keyPath}".`);
|
|
133
|
-
continue;
|
|
134
|
-
}
|
|
135
|
-
if (actual !== expected) {
|
|
136
|
-
failures.push(`Expected stage "${keyPath}" to equal count "${countKey}" (${expected}), got ${JSON.stringify(actual)}.`);
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
for (const [keyPath, minimum] of Object.entries(acceptance?.stage_at_least ?? {})) {
|
|
140
|
-
const actual = toFiniteNumber(readPathValue(stageRecord, keyPath));
|
|
141
|
-
if (actual === null || actual < minimum) {
|
|
142
|
-
failures.push(`Expected stage "${keyPath}" to be at least ${minimum}, got ${actual === null ? "non-numeric" : actual}.`);
|
|
143
|
-
}
|
|
144
|
-
}
|
|
145
|
-
for (const [keyPath, countKey] of Object.entries(acceptance?.stage_at_least_counts ?? {})) {
|
|
146
|
-
const actual = toFiniteNumber(readPathValue(stageRecord, keyPath));
|
|
147
|
-
const expected = counts[countKey];
|
|
148
|
-
if (typeof expected !== "number") {
|
|
149
|
-
failures.push(`Acceptance references missing count "${countKey}" for "${keyPath}".`);
|
|
150
|
-
continue;
|
|
151
|
-
}
|
|
152
|
-
if (actual === null || actual < expected) {
|
|
153
|
-
failures.push(`Expected stage "${keyPath}" to be at least count "${countKey}" (${expected}), got ${actual === null ? "non-numeric" : actual}.`);
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
for (const [zoneId, minimum] of Object.entries(acceptance?.zone_counts_at_least ?? {})) {
|
|
157
|
-
const zone = findCompiledSchemaZone(schema, zoneId);
|
|
158
|
-
if (!zone) {
|
|
159
|
-
failures.push(`Acceptance references unknown zone "${zoneId}".`);
|
|
160
|
-
continue;
|
|
161
|
-
}
|
|
162
|
-
const actual = countZoneArtifacts(dirPath, zone.path, zone.kind);
|
|
163
|
-
if (actual < minimum) {
|
|
164
|
-
failures.push(`Expected zone "${zoneId}" to contain at least ${minimum} artifact(s), got ${actual}.`);
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
for (const [zoneId, countKey] of Object.entries(acceptance?.zone_counts_at_least_counts ?? {})) {
|
|
168
|
-
const zone = findCompiledSchemaZone(schema, zoneId);
|
|
169
|
-
if (!zone) {
|
|
170
|
-
failures.push(`Acceptance references unknown zone "${zoneId}".`);
|
|
171
|
-
continue;
|
|
172
|
-
}
|
|
173
|
-
const expected = counts[countKey];
|
|
174
|
-
if (typeof expected !== "number") {
|
|
175
|
-
failures.push(`Acceptance references missing count "${countKey}" for zone "${zoneId}".`);
|
|
176
|
-
continue;
|
|
177
|
-
}
|
|
178
|
-
const actual = countZoneArtifacts(dirPath, zone.path, zone.kind);
|
|
179
|
-
if (actual < expected) {
|
|
180
|
-
failures.push(`Expected zone "${zoneId}" to contain at least count "${countKey}" (${expected}) artifact(s), got ${actual}.`);
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
for (const zoneId of acceptance?.markdown_frontmatter_valid_zones ?? []) {
|
|
184
|
-
const zone = findCompiledSchemaZone(schema, zoneId);
|
|
185
|
-
if (!zone) {
|
|
186
|
-
failures.push(`Acceptance references unknown zone "${zoneId}".`);
|
|
187
|
-
continue;
|
|
188
|
-
}
|
|
189
|
-
const validation = validateSynthFiles(markdownFilesForZone(dirPath, zone.path, zone.kind));
|
|
190
|
-
if (validation.invalid_frontmatter > 0) {
|
|
191
|
-
failures.push(`Zone "${zoneId}" has ${validation.invalid_frontmatter} markdown file(s) with invalid or incomplete frontmatter.`);
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
for (const [zoneId, requiredKeys] of Object.entries(acceptance?.frontmatter_required_keys_in_zones ?? {})) {
|
|
195
|
-
const zone = findCompiledSchemaZone(schema, zoneId);
|
|
196
|
-
if (!zone) {
|
|
197
|
-
failures.push(`Acceptance references unknown zone "${zoneId}".`);
|
|
198
|
-
continue;
|
|
199
|
-
}
|
|
200
|
-
const validation = validateSynthFiles(markdownFilesForZone(dirPath, zone.path, zone.kind), { requiredFrontmatterKeys: requiredKeys });
|
|
201
|
-
if (validation.invalid_frontmatter > 0) {
|
|
202
|
-
failures.push(`Zone "${zoneId}" has ${validation.invalid_frontmatter} markdown file(s) missing required frontmatter keys (${requiredKeys.join(", ")}).`);
|
|
203
|
-
}
|
|
204
|
-
}
|
|
205
|
-
for (const zoneId of acceptance?.markdown_abstract_valid_zones ?? []) {
|
|
206
|
-
const zone = findCompiledSchemaZone(schema, zoneId);
|
|
207
|
-
if (!zone) {
|
|
208
|
-
failures.push(`Acceptance references unknown zone "${zoneId}".`);
|
|
209
|
-
continue;
|
|
210
|
-
}
|
|
211
|
-
const validation = validateSynthFiles(markdownFilesForZone(dirPath, zone.path, zone.kind));
|
|
212
|
-
if (validation.short_abstracts > 0) {
|
|
213
|
-
failures.push(`Zone "${zoneId}" has ${validation.short_abstracts} markdown file(s) with missing or weak abstracts.`);
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
if ((acceptance?.wikilinks_valid_in_zones?.length ?? 0) > 0) {
|
|
217
|
-
const roots = zoneRoots(dirPath, acceptance?.wikilinks_valid_in_zones ?? []);
|
|
218
|
-
const brokenLinks = countBrokenWikilinks(dirPath, roots, roots);
|
|
219
|
-
if (brokenLinks > 0) {
|
|
220
|
-
failures.push(`Detected ${brokenLinks} broken wikilink(s) across the declared acceptance zones.`);
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
for (const [relativePath, disallowedTexts] of Object.entries(acceptance?.artifacts_must_not_contain ?? {})) {
|
|
224
|
-
const content = readArtifactText(dirPath, relativePath);
|
|
225
|
-
if (content === null) {
|
|
226
|
-
failures.push(`Missing artifact required for content check: ${relativePath}.`);
|
|
227
|
-
continue;
|
|
228
|
-
}
|
|
229
|
-
for (const disallowed of disallowedTexts) {
|
|
230
|
-
if (content.includes(disallowed)) {
|
|
231
|
-
failures.push(`Artifact "${relativePath}" still contains forbidden text: ${JSON.stringify(disallowed)}.`);
|
|
232
|
-
}
|
|
233
|
-
}
|
|
234
|
-
}
|
|
235
|
-
if (failures.length === 0) {
|
|
236
|
-
return {
|
|
237
|
-
ok: true,
|
|
238
|
-
summary: `Stage acceptance satisfied for ${options.stageId}.`,
|
|
239
|
-
failures: [],
|
|
240
|
-
};
|
|
241
|
-
}
|
|
242
|
-
return {
|
|
243
|
-
ok: false,
|
|
244
|
-
summary: `Stage acceptance failed for ${options.stageId}: ${failures.join(" ")}`,
|
|
245
|
-
failures,
|
|
246
|
-
};
|
|
247
|
-
}
|
|
248
|
-
export function validateStageContractAcceptance(dirPath, contract = null) {
|
|
249
|
-
const resolvedContract = contract ?? (() => {
|
|
250
|
-
const path = stageContractPath(dirPath);
|
|
251
|
-
if (!existsSync(path))
|
|
252
|
-
return null;
|
|
253
|
-
return readJsonFileWithSchema(path, "stage contract", RuntimeStageContractSchema);
|
|
254
|
-
})();
|
|
255
|
-
if (!resolvedContract) {
|
|
256
|
-
return {
|
|
257
|
-
ok: true,
|
|
258
|
-
summary: "No active stage contract found for acceptance validation.",
|
|
259
|
-
failures: [],
|
|
260
|
-
};
|
|
261
|
-
}
|
|
262
|
-
const state = loadState(dirPath);
|
|
263
|
-
const stageRecord = stageRecordFromState(state, resolvedContract.stage);
|
|
264
|
-
return validateResolvedStageAcceptance(dirPath, {
|
|
265
|
-
stageId: resolvedContract.stage,
|
|
266
|
-
acceptance: resolvedContract.acceptance,
|
|
267
|
-
counts: resolveStageCounts(resolvedContract, stageRecord),
|
|
268
|
-
});
|
|
269
|
-
}
|
|
1
|
+
export * from "../packages/compiler/runtime-acceptance.js";
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export declare function buildRuntimeStageContract(options: RuntimeStageContractOptions): RuntimeStageContractDraft;
|
|
1
|
+
export * from "../packages/compiler/runtime-contracts.js";
|
|
@@ -1,48 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export function buildRuntimeStageContract(options) {
|
|
3
|
-
const localSkillDocs = options.localSkillDocs ?? [];
|
|
4
|
-
const workflowNotes = options.workflowNotes ?? [];
|
|
5
|
-
return {
|
|
6
|
-
instructions: options.instructions,
|
|
7
|
-
counts: {
|
|
8
|
-
...(options.counts ?? {}),
|
|
9
|
-
local_skill_docs: localSkillDocs.length,
|
|
10
|
-
},
|
|
11
|
-
...(options.acceptance ? { acceptance: options.acceptance } : {}),
|
|
12
|
-
artifacts: {
|
|
13
|
-
reads: [
|
|
14
|
-
"interf.json",
|
|
15
|
-
`workflow/${WORKFLOW_SCHEMA_FILE}`,
|
|
16
|
-
...(options.extraReadArtifacts ?? []),
|
|
17
|
-
...options.stageReadArtifacts,
|
|
18
|
-
...localSkillDocs,
|
|
19
|
-
],
|
|
20
|
-
writes: options.stageWriteArtifacts,
|
|
21
|
-
verifies: [
|
|
22
|
-
`interf verify stage ${options.stageId} --json`,
|
|
23
|
-
],
|
|
24
|
-
},
|
|
25
|
-
policies: {
|
|
26
|
-
execution_mode: "deterministic",
|
|
27
|
-
status_prefixes: ["STATUS:", "DONE:", "BLOCKED:", "ERROR:"],
|
|
28
|
-
notes: [
|
|
29
|
-
`This is the "${options.stageLabel}" stage for the compiled dataset "${options.compiledName}".`,
|
|
30
|
-
"The workflow package is the authoritative method layer for this run.",
|
|
31
|
-
`Use \`workflow/${WORKFLOW_SCHEMA_FILE}\` as the deterministic zone-contract reference for this compiled dataset.`,
|
|
32
|
-
"Honor the declared read and write artifacts instead of inventing a parallel workflow.",
|
|
33
|
-
"Only create or update files that fall under the declared write targets for this stage.",
|
|
34
|
-
"The CLI owns `.interf/runtime/` ledgers such as run, state, health, and view-spec files. Read them if needed, but do not create, edit, or replace them in this stage unless the contract explicitly marks a runtime artifact as stage-owned.",
|
|
35
|
-
"Keep scratch extraction commands single-purpose and non-destructive. Avoid wildcard cleanup and multi-command chains.",
|
|
36
|
-
...workflowNotes,
|
|
37
|
-
...(localSkillDocs.length > 0
|
|
38
|
-
? [
|
|
39
|
-
"Read any local instruction docs listed in the contract before you write artifacts or declare the stage complete.",
|
|
40
|
-
options.instructions.effective_mode === "override"
|
|
41
|
-
? "Local stage docs replace the default workflow guidance for this run, but they still do not bypass required writes, declared proof artifacts, or deterministic runtime reconciliation."
|
|
42
|
-
: "Local stage docs can refine the stage behavior, but they do not bypass required writes, declared proof artifacts, or deterministic runtime reconciliation.",
|
|
43
|
-
]
|
|
44
|
-
: []),
|
|
45
|
-
],
|
|
46
|
-
},
|
|
47
|
-
};
|
|
48
|
-
}
|
|
1
|
+
export * from "../packages/compiler/runtime-contracts.js";
|
|
@@ -1,7 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export declare function emptyCompiledInventory(): CompiledInventory;
|
|
3
|
-
export declare function compiledInventoryFromEntries(entries: CompiledInventoryEntry[], stage?: string): CompiledInventory;
|
|
4
|
-
export declare function compiledInventoryEntryCount(inventory: CompiledInventory | null): number;
|
|
5
|
-
export declare function compiledInventoryTotal(inventory: CompiledInventory | null): number;
|
|
6
|
-
export declare function compiledInventoryFrontmatterScannedCount(inventory: CompiledInventory | null): number;
|
|
7
|
-
export declare function compiledInventoryAbstractCoverageCount(inventory: CompiledInventory | null): number;
|
|
1
|
+
export * from "../packages/compiler/runtime-inventory.js";
|
|
@@ -1,29 +1 @@
|
|
|
1
|
-
export
|
|
2
|
-
return {
|
|
3
|
-
kind: "compiled-runtime-ledger",
|
|
4
|
-
version: 1,
|
|
5
|
-
entries: [],
|
|
6
|
-
total: 0,
|
|
7
|
-
};
|
|
8
|
-
}
|
|
9
|
-
export function compiledInventoryFromEntries(entries, stage) {
|
|
10
|
-
return {
|
|
11
|
-
kind: "compiled-runtime-ledger",
|
|
12
|
-
version: 1,
|
|
13
|
-
...(stage ? { stage } : {}),
|
|
14
|
-
entries,
|
|
15
|
-
total: entries.length,
|
|
16
|
-
};
|
|
17
|
-
}
|
|
18
|
-
export function compiledInventoryEntryCount(inventory) {
|
|
19
|
-
return inventory?.entries.length ?? 0;
|
|
20
|
-
}
|
|
21
|
-
export function compiledInventoryTotal(inventory) {
|
|
22
|
-
return inventory?.total ?? 0;
|
|
23
|
-
}
|
|
24
|
-
export function compiledInventoryFrontmatterScannedCount(inventory) {
|
|
25
|
-
return (inventory?.entries ?? []).filter((entry) => entry.metadata?.frontmatter_scanned === true).length;
|
|
26
|
-
}
|
|
27
|
-
export function compiledInventoryAbstractCoverageCount(inventory) {
|
|
28
|
-
return (inventory?.entries ?? []).filter((entry) => entry.metadata?.abstract_read === true || typeof entry.metadata?.abstract === "string").length;
|
|
29
|
-
}
|
|
1
|
+
export * from "../packages/compiler/runtime-inventory.js";
|
|
@@ -1,8 +1 @@
|
|
|
1
|
-
export
|
|
2
|
-
export declare function runHistoryPath(dirPath: string): string;
|
|
3
|
-
export declare function stageContractPath(dirPath: string): string;
|
|
4
|
-
export declare function archivedStageContractPath(dirPath: string, runId: string): string;
|
|
5
|
-
export declare function logsDirPath(dirPath: string): string;
|
|
6
|
-
export declare function promptLogPath(dirPath: string, runId: string): string;
|
|
7
|
-
export declare function eventLogPath(dirPath: string, runId: string): string;
|
|
8
|
-
export declare function statusLogPath(dirPath: string, runId: string): string;
|
|
1
|
+
export * from "../packages/compiler/runtime-paths.js";
|
|
@@ -1,26 +1 @@
|
|
|
1
|
-
|
|
2
|
-
import { compiledRuntimeArchivedStageContractPath, compiledRuntimeLogsRoot, compiledRuntimeRunHistoryPath, compiledRuntimeRunPath, compiledRuntimeStageContractPath, } from "./compiled-paths.js";
|
|
3
|
-
export function runPath(dirPath) {
|
|
4
|
-
return compiledRuntimeRunPath(dirPath);
|
|
5
|
-
}
|
|
6
|
-
export function runHistoryPath(dirPath) {
|
|
7
|
-
return compiledRuntimeRunHistoryPath(dirPath);
|
|
8
|
-
}
|
|
9
|
-
export function stageContractPath(dirPath) {
|
|
10
|
-
return compiledRuntimeStageContractPath(dirPath);
|
|
11
|
-
}
|
|
12
|
-
export function archivedStageContractPath(dirPath, runId) {
|
|
13
|
-
return compiledRuntimeArchivedStageContractPath(dirPath, runId);
|
|
14
|
-
}
|
|
15
|
-
export function logsDirPath(dirPath) {
|
|
16
|
-
return compiledRuntimeLogsRoot(dirPath);
|
|
17
|
-
}
|
|
18
|
-
export function promptLogPath(dirPath, runId) {
|
|
19
|
-
return join(logsDirPath(dirPath), `${runId}.prompt.txt`);
|
|
20
|
-
}
|
|
21
|
-
export function eventLogPath(dirPath, runId) {
|
|
22
|
-
return join(logsDirPath(dirPath), `${runId}.events.ndjson`);
|
|
23
|
-
}
|
|
24
|
-
export function statusLogPath(dirPath, runId) {
|
|
25
|
-
return join(logsDirPath(dirPath), `${runId}.status.log`);
|
|
26
|
-
}
|
|
1
|
+
export * from "../packages/compiler/runtime-paths.js";
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export declare function buildStagePrompt(instructions: RuntimeStageInstructions, contractPath: string, statusLines: string[]): string;
|
|
1
|
+
export * from "../packages/compiler/runtime-prompt.js";
|
|
@@ -1,48 +1 @@
|
|
|
1
|
-
export
|
|
2
|
-
const stageSkillDir = instructions.stage_skill_dir || "stage";
|
|
3
|
-
const modeNotes = instructions.effective_mode === "override"
|
|
4
|
-
? [
|
|
5
|
-
"Local stage instruction docs are authoritative for this run.",
|
|
6
|
-
"Do not fall back to bundled workflow heuristics unless the stage contract explicitly leaves room for them.",
|
|
7
|
-
"Interf still enforces the same required reads, writes, verifier outputs, and runtime reconciliation at stage close.",
|
|
8
|
-
]
|
|
9
|
-
: instructions.effective_mode === "extend"
|
|
10
|
-
? [
|
|
11
|
-
"Use the current compiled workflow docs as the default workflow for this run.",
|
|
12
|
-
"Then apply any additional local stage instruction docs referenced by the contract as stage-specific extensions.",
|
|
13
|
-
]
|
|
14
|
-
: [
|
|
15
|
-
"Use the current compiled workflow docs as the default workflow for this run.",
|
|
16
|
-
];
|
|
17
|
-
return [
|
|
18
|
-
`Interf workflow stage docs: workflow/compile/stages/${stageSkillDir}/`,
|
|
19
|
-
"",
|
|
20
|
-
"This is an automated Interf stage run, not an open-ended chat session.",
|
|
21
|
-
"The user has already invoked this stage through the Interf CLI. Execute it now.",
|
|
22
|
-
"Do not ask what the user wants, offer help, list tools, or wait for another instruction.",
|
|
23
|
-
`Read \`${contractPath}\` first. It is the authoritative contract for this stage.`,
|
|
24
|
-
"If `runtime/paths.json` exists in this shell, read it next. It maps workflow zone ids onto the shell-local `inputs/` and `outputs/` mounts for this stage.",
|
|
25
|
-
"For file-zone mounts, `runtime/paths.json` also gives the exact file path inside the `inputs/` or `outputs/` mount root.",
|
|
26
|
-
"Honor the contract's counts, artifact paths, and policies instead of inventing another workflow.",
|
|
27
|
-
"Read only the files named by the contract's `artifacts.reads` list plus any paths they explicitly direct you to open.",
|
|
28
|
-
"Prefer direct file-reading and search tools over shell commands when you inspect inputs, docs, or generated outputs.",
|
|
29
|
-
"Do not use shell helpers like `cat`, `sed`, `ls`, or `find` for routine file inspection if a native read/search tool can do the same job.",
|
|
30
|
-
"If the contract lists `instructions.local_docs`, open every one of those files before you write artifacts or declare the stage complete.",
|
|
31
|
-
"If `AGENTS.md` is listed in the contract, use it only for compiled routing that is directly relevant to this stage.",
|
|
32
|
-
"`.interf/runtime/run.json`, `.interf/runtime/state.json`, `.interf/runtime/health.json`, and `.interf/runtime/view-spec.json` are CLI-owned runtime artifacts. You may read them, but do not create, edit, or replace them unless the contract explicitly marks a different proof artifact as stage-owned.",
|
|
33
|
-
"If a contract-listed output file does not exist yet, create it in one whole-file write. Do not attempt patch-style edits against a missing runtime path.",
|
|
34
|
-
"Stay inside the current compiled dataset. Do not try to open repo docs, repo source files, or other paths outside the compiled dataset unless the stage contract explicitly requires them.",
|
|
35
|
-
instructions.effective_mode === "override"
|
|
36
|
-
? "Do not depend on any repo-root or globally installed skill cache for this run. Local stage instruction docs are the primary workflow layer for this run."
|
|
37
|
-
: "Do not depend on any repo-root or globally installed skill cache for this run. Use the current compiled workflow docs and the contract as the default behavior.",
|
|
38
|
-
...modeNotes,
|
|
39
|
-
"Do not narrate intentions, plans, or reasoning to the user.",
|
|
40
|
-
"Only emit user-visible updates that begin with STATUS:, DONE:, BLOCKED:, or ERROR:.",
|
|
41
|
-
"Those status lines are progress hints for the operator. The CLI decides stage completion from artifacts, validation, and reconcile checks rather than trusting status text alone.",
|
|
42
|
-
"Before any long-running raw inspection or shell-based helper step, emit a STATUS: line that names the current subtask.",
|
|
43
|
-
"If work stays in progress, do not remain silent for more than about one minute. Emit another STATUS: line when you switch files, page groups, targets, or extraction methods.",
|
|
44
|
-
"If you respond conversationally instead of executing the stage, the run will be treated as failed.",
|
|
45
|
-
"As soon as the required proof artifacts are complete, stop. Do not keep browsing or auditing after the contract is satisfied.",
|
|
46
|
-
...statusLines,
|
|
47
|
-
].join("\n");
|
|
48
|
-
}
|
|
1
|
+
export * from "../packages/compiler/runtime-prompt.js";
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export declare function reconcileCompiledStageRun(dirPath: string, stage: Pick<WorkflowStageDefinition, "id" | "contractType" | "reads" | "writes">): boolean;
|
|
1
|
+
export * from "../packages/compiler/runtime-reconcile.js";
|
|
@@ -1,193 +1 @@
|
|
|
1
|
-
|
|
2
|
-
import { extname, join, relative } from "node:path";
|
|
3
|
-
import { listFilesRecursive } from "./filesystem.js";
|
|
4
|
-
import { compiledZoneAbsolutePath, findCompiledSchemaZone, readCompiledSchemaFile, } from "./compiled-schema.js";
|
|
5
|
-
import { parseJsonFrontmatter } from "./parse.js";
|
|
6
|
-
import { loadRuntimeRun } from "./runtime.js";
|
|
7
|
-
import { initCompiledState, loadState, refreshCompiledArtifacts, saveState, } from "./state.js";
|
|
8
|
-
import { compiledInventoryFromEntries } from "./runtime-inventory.js";
|
|
9
|
-
import { compiledRuntimeRoot } from "./compiled-paths.js";
|
|
10
|
-
import { extractSynthAbstract, isOutputMarkdownFile } from "./validate.js";
|
|
11
|
-
function readActiveRunStartedAtMs(dirPath) {
|
|
12
|
-
const run = loadRuntimeRun(dirPath);
|
|
13
|
-
if (!run)
|
|
14
|
-
return null;
|
|
15
|
-
const startedAtMs = Date.parse(run.started_at);
|
|
16
|
-
return Number.isFinite(startedAtMs) ? startedAtMs : null;
|
|
17
|
-
}
|
|
18
|
-
function anyPathUpdatedSince(absolutePath, sinceMs) {
|
|
19
|
-
if (!existsSync(absolutePath))
|
|
20
|
-
return false;
|
|
21
|
-
try {
|
|
22
|
-
const stat = statSync(absolutePath);
|
|
23
|
-
if (stat.isFile())
|
|
24
|
-
return stat.mtimeMs >= sinceMs;
|
|
25
|
-
}
|
|
26
|
-
catch {
|
|
27
|
-
return false;
|
|
28
|
-
}
|
|
29
|
-
for (const filePath of listFilesRecursive(absolutePath)) {
|
|
30
|
-
try {
|
|
31
|
-
if (statSync(filePath).mtimeMs >= sinceMs)
|
|
32
|
-
return true;
|
|
33
|
-
}
|
|
34
|
-
catch {
|
|
35
|
-
continue;
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
return false;
|
|
39
|
-
}
|
|
40
|
-
function zoneArtifactCount(dirPath, zonePath, kind) {
|
|
41
|
-
const absolutePath = compiledZoneAbsolutePath(dirPath, { path: zonePath });
|
|
42
|
-
if (!existsSync(absolutePath))
|
|
43
|
-
return 0;
|
|
44
|
-
if (kind === "file")
|
|
45
|
-
return 1;
|
|
46
|
-
return listFilesRecursive(absolutePath).length;
|
|
47
|
-
}
|
|
48
|
-
function summaryAbstract(content) {
|
|
49
|
-
const parsed = parseJsonFrontmatter(content);
|
|
50
|
-
if (!parsed)
|
|
51
|
-
return null;
|
|
52
|
-
return extractSynthAbstract(parsed.frontmatter, parsed.body);
|
|
53
|
-
}
|
|
54
|
-
function listZoneArtifacts(dirPath, zone) {
|
|
55
|
-
const absolutePath = compiledZoneAbsolutePath(dirPath, zone);
|
|
56
|
-
if (!existsSync(absolutePath) || zone.kind === "runtime")
|
|
57
|
-
return [];
|
|
58
|
-
if (zone.kind === "file") {
|
|
59
|
-
try {
|
|
60
|
-
return statSync(absolutePath).isFile() ? [absolutePath] : [];
|
|
61
|
-
}
|
|
62
|
-
catch {
|
|
63
|
-
return [];
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
return listFilesRecursive(absolutePath);
|
|
67
|
-
}
|
|
68
|
-
function buildInventoryMetadata(options) {
|
|
69
|
-
const metadata = {
|
|
70
|
-
zone_id: options.zoneId,
|
|
71
|
-
zone_kind: options.zoneKind,
|
|
72
|
-
file_extension: extname(options.filePath).toLowerCase() || null,
|
|
73
|
-
};
|
|
74
|
-
if (!options.parsedFrontmatter) {
|
|
75
|
-
return metadata;
|
|
76
|
-
}
|
|
77
|
-
metadata.frontmatter_scanned = true;
|
|
78
|
-
const abstract = summaryAbstract(readFileSync(options.filePath, "utf8"));
|
|
79
|
-
if (abstract) {
|
|
80
|
-
metadata.abstract = abstract;
|
|
81
|
-
metadata.abstract_read = true;
|
|
82
|
-
}
|
|
83
|
-
const frontmatter = options.parsedFrontmatter.frontmatter;
|
|
84
|
-
if (typeof frontmatter.source_kind === "string") {
|
|
85
|
-
metadata.source_kind = frontmatter.source_kind;
|
|
86
|
-
}
|
|
87
|
-
if (typeof frontmatter.evidence_tier === "string") {
|
|
88
|
-
metadata.evidence_tier = frontmatter.evidence_tier;
|
|
89
|
-
}
|
|
90
|
-
if (typeof frontmatter.truth_mode === "string") {
|
|
91
|
-
metadata.truth_mode = frontmatter.truth_mode;
|
|
92
|
-
}
|
|
93
|
-
return metadata;
|
|
94
|
-
}
|
|
95
|
-
function buildStageInventoryEntries(dirPath, stage) {
|
|
96
|
-
const schema = readCompiledSchemaFile(join(dirPath, ".interf", "workflow"));
|
|
97
|
-
if (!schema)
|
|
98
|
-
return [];
|
|
99
|
-
const readableInputZones = stage.reads
|
|
100
|
-
.map((zoneId) => findCompiledSchemaZone(schema, zoneId))
|
|
101
|
-
.filter((zone) => zone !== null && zone.kind !== "runtime");
|
|
102
|
-
const outputZones = stage.writes
|
|
103
|
-
.map((zoneId) => findCompiledSchemaZone(schema, zoneId))
|
|
104
|
-
.filter((zone) => zone !== null && zone.kind !== "runtime");
|
|
105
|
-
if (outputZones.length === 0)
|
|
106
|
-
return [];
|
|
107
|
-
const entries = [];
|
|
108
|
-
for (const outputZone of outputZones) {
|
|
109
|
-
for (const filePath of listZoneArtifacts(dirPath, outputZone)) {
|
|
110
|
-
const relativeOutputPath = relative(dirPath, filePath).replaceAll("\\", "/");
|
|
111
|
-
const parsed = isOutputMarkdownFile(filePath)
|
|
112
|
-
? parseJsonFrontmatter(readFileSync(filePath, "utf8"))
|
|
113
|
-
: null;
|
|
114
|
-
const sourcePath = typeof parsed?.frontmatter.source === "string"
|
|
115
|
-
? parsed.frontmatter.source.trim()
|
|
116
|
-
: "";
|
|
117
|
-
const sourceZoneId = typeof parsed?.frontmatter.source_zone === "string"
|
|
118
|
-
? parsed.frontmatter.source_zone.trim()
|
|
119
|
-
: "";
|
|
120
|
-
const inputZone = sourceZoneId.length > 0
|
|
121
|
-
? readableInputZones.find((zone) => zone.id === sourceZoneId) ?? null
|
|
122
|
-
: readableInputZones.length === 1
|
|
123
|
-
? readableInputZones[0]
|
|
124
|
-
: null;
|
|
125
|
-
entries.push({
|
|
126
|
-
...(inputZone && sourcePath.length > 0
|
|
127
|
-
? {
|
|
128
|
-
input_zone: inputZone.id,
|
|
129
|
-
input_path: sourcePath,
|
|
130
|
-
}
|
|
131
|
-
: {}),
|
|
132
|
-
output_zone: outputZone.id,
|
|
133
|
-
output_path: relativeOutputPath,
|
|
134
|
-
...(typeof parsed?.frontmatter.state === "string"
|
|
135
|
-
? { state: parsed.frontmatter.state }
|
|
136
|
-
: {}),
|
|
137
|
-
metadata: buildInventoryMetadata({
|
|
138
|
-
zoneId: outputZone.id,
|
|
139
|
-
zoneKind: outputZone.kind,
|
|
140
|
-
filePath,
|
|
141
|
-
parsedFrontmatter: parsed,
|
|
142
|
-
}),
|
|
143
|
-
});
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
return entries.sort((left, right) => `${left.output_zone}:${left.output_path}`.localeCompare(`${right.output_zone}:${right.output_path}`));
|
|
147
|
-
}
|
|
148
|
-
function writeStageInventory(dirPath, stageId, entries) {
|
|
149
|
-
writeFileSync(join(compiledRuntimeRoot(dirPath), "inventory.json"), JSON.stringify(compiledInventoryFromEntries(entries, stageId), null, 2) + "\n");
|
|
150
|
-
}
|
|
151
|
-
function activeRunCounts(dirPath) {
|
|
152
|
-
return { ...(loadRuntimeRun(dirPath)?.counts ?? {}) };
|
|
153
|
-
}
|
|
154
|
-
export function reconcileCompiledStageRun(dirPath, stage) {
|
|
155
|
-
const startedAtMs = readActiveRunStartedAtMs(dirPath);
|
|
156
|
-
if (startedAtMs === null)
|
|
157
|
-
return false;
|
|
158
|
-
const schema = readCompiledSchemaFile(join(dirPath, ".interf", "workflow"));
|
|
159
|
-
if (!schema)
|
|
160
|
-
return false;
|
|
161
|
-
const writeZones = stage.writes
|
|
162
|
-
.map((zoneId) => findCompiledSchemaZone(schema, zoneId))
|
|
163
|
-
.filter((zone) => zone !== null);
|
|
164
|
-
if (writeZones.length === 0)
|
|
165
|
-
return false;
|
|
166
|
-
if (!writeZones.some((zone) => anyPathUpdatedSince(compiledZoneAbsolutePath(dirPath, zone), startedAtMs))) {
|
|
167
|
-
return false;
|
|
168
|
-
}
|
|
169
|
-
writeStageInventory(dirPath, stage.id, buildStageInventoryEntries(dirPath, stage));
|
|
170
|
-
const currentState = {
|
|
171
|
-
...initCompiledState(),
|
|
172
|
-
...(loadState(dirPath) ?? {}),
|
|
173
|
-
stages: {
|
|
174
|
-
...(loadState(dirPath)?.stages ?? {}),
|
|
175
|
-
},
|
|
176
|
-
};
|
|
177
|
-
const now = new Date().toISOString();
|
|
178
|
-
currentState.stages[stage.id] = {
|
|
179
|
-
contract_type: stage.contractType,
|
|
180
|
-
status: "succeeded",
|
|
181
|
-
started_at: loadRuntimeRun(dirPath)?.started_at ?? now,
|
|
182
|
-
finished_at: now,
|
|
183
|
-
counts: activeRunCounts(dirPath),
|
|
184
|
-
zone_counts: Object.fromEntries(writeZones.map((zone) => [zone.id, zoneArtifactCount(dirPath, zone.path, zone.kind)])),
|
|
185
|
-
artifacts: writeZones.map((zone) => zone.kind === "file" ? zone.path : `${zone.path}/`),
|
|
186
|
-
summary: loadRuntimeRun(dirPath)?.summary ?? null,
|
|
187
|
-
run_id: loadRuntimeRun(dirPath)?.run_id ?? null,
|
|
188
|
-
};
|
|
189
|
-
currentState.last_compile = now;
|
|
190
|
-
saveState(dirPath, currentState);
|
|
191
|
-
refreshCompiledArtifacts(dirPath, { ensureViewSpec: true });
|
|
192
|
-
return true;
|
|
193
|
-
}
|
|
1
|
+
export * from "../packages/compiler/runtime-reconcile.js";
|