@adhamalkhaja/seyola-runtime 0.11.4
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/LICENSE +56 -0
- package/README.md +87 -0
- package/dist/adapters/claude-code-local/index.d.ts +60 -0
- package/dist/adapters/claude-code-local/index.d.ts.map +1 -0
- package/dist/adapters/claude-code-local/index.js +270 -0
- package/dist/adapters/claude-code-local/index.js.map +1 -0
- package/dist/bundle/index.d.ts +60 -0
- package/dist/bundle/index.d.ts.map +1 -0
- package/dist/bundle/index.js +989 -0
- package/dist/bundle/index.js.map +1 -0
- package/dist/cli/index.d.ts +12 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +207 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/compile-plan/budgets.d.ts +23 -0
- package/dist/compile-plan/budgets.d.ts.map +1 -0
- package/dist/compile-plan/budgets.js +55 -0
- package/dist/compile-plan/budgets.js.map +1 -0
- package/dist/compile-plan/graph.d.ts +40 -0
- package/dist/compile-plan/graph.d.ts.map +1 -0
- package/dist/compile-plan/graph.js +114 -0
- package/dist/compile-plan/graph.js.map +1 -0
- package/dist/compile-plan/index.d.ts +28 -0
- package/dist/compile-plan/index.d.ts.map +1 -0
- package/dist/compile-plan/index.js +423 -0
- package/dist/compile-plan/index.js.map +1 -0
- package/dist/compile-plan/registries.d.ts +35 -0
- package/dist/compile-plan/registries.d.ts.map +1 -0
- package/dist/compile-plan/registries.js +81 -0
- package/dist/compile-plan/registries.js.map +1 -0
- package/dist/compile-plan/resolver.d.ts +24 -0
- package/dist/compile-plan/resolver.d.ts.map +1 -0
- package/dist/compile-plan/resolver.js +57 -0
- package/dist/compile-plan/resolver.js.map +1 -0
- package/dist/compile-plan/types.d.ts +192 -0
- package/dist/compile-plan/types.d.ts.map +1 -0
- package/dist/compile-plan/types.js +7 -0
- package/dist/compile-plan/types.js.map +1 -0
- package/dist/doctor/index.d.ts +43 -0
- package/dist/doctor/index.d.ts.map +1 -0
- package/dist/doctor/index.js +224 -0
- package/dist/doctor/index.js.map +1 -0
- package/dist/init/index.d.ts +53 -0
- package/dist/init/index.d.ts.map +1 -0
- package/dist/init/index.js +414 -0
- package/dist/init/index.js.map +1 -0
- package/dist/lib/ajvSetup.d.ts +30 -0
- package/dist/lib/ajvSetup.d.ts.map +1 -0
- package/dist/lib/ajvSetup.js +44 -0
- package/dist/lib/ajvSetup.js.map +1 -0
- package/dist/lib/loadJson.d.ts +21 -0
- package/dist/lib/loadJson.d.ts.map +1 -0
- package/dist/lib/loadJson.js +43 -0
- package/dist/lib/loadJson.js.map +1 -0
- package/dist/lib/loadYaml.d.ts +18 -0
- package/dist/lib/loadYaml.d.ts.map +1 -0
- package/dist/lib/loadYaml.js +41 -0
- package/dist/lib/loadYaml.js.map +1 -0
- package/dist/lib/paths.d.ts +22 -0
- package/dist/lib/paths.d.ts.map +1 -0
- package/dist/lib/paths.js +61 -0
- package/dist/lib/paths.js.map +1 -0
- package/dist/run-plan/index.d.ts +17 -0
- package/dist/run-plan/index.d.ts.map +1 -0
- package/dist/run-plan/index.js +235 -0
- package/dist/run-plan/index.js.map +1 -0
- package/dist/run-plan/types.d.ts +53 -0
- package/dist/run-plan/types.d.ts.map +1 -0
- package/dist/run-plan/types.js +6 -0
- package/dist/run-plan/types.js.map +1 -0
- package/dist/run-step/contextPacket.d.ts +39 -0
- package/dist/run-step/contextPacket.d.ts.map +1 -0
- package/dist/run-step/contextPacket.js +213 -0
- package/dist/run-step/contextPacket.js.map +1 -0
- package/dist/run-step/derivation.d.ts +41 -0
- package/dist/run-step/derivation.d.ts.map +1 -0
- package/dist/run-step/derivation.js +61 -0
- package/dist/run-step/derivation.js.map +1 -0
- package/dist/run-step/effectExecutor.d.ts +42 -0
- package/dist/run-step/effectExecutor.d.ts.map +1 -0
- package/dist/run-step/effectExecutor.js +297 -0
- package/dist/run-step/effectExecutor.js.map +1 -0
- package/dist/run-step/formatExecutor.d.ts +34 -0
- package/dist/run-step/formatExecutor.d.ts.map +1 -0
- package/dist/run-step/formatExecutor.js +329 -0
- package/dist/run-step/formatExecutor.js.map +1 -0
- package/dist/run-step/index.d.ts +23 -0
- package/dist/run-step/index.d.ts.map +1 -0
- package/dist/run-step/index.js +627 -0
- package/dist/run-step/index.js.map +1 -0
- package/dist/run-step/inputResolver.d.ts +48 -0
- package/dist/run-step/inputResolver.d.ts.map +1 -0
- package/dist/run-step/inputResolver.js +268 -0
- package/dist/run-step/inputResolver.js.map +1 -0
- package/dist/run-step/types.d.ts +123 -0
- package/dist/run-step/types.d.ts.map +1 -0
- package/dist/run-step/types.js +6 -0
- package/dist/run-step/types.js.map +1 -0
- package/dist/validate-pack/checks/capabilitiesRegistry.d.ts +3 -0
- package/dist/validate-pack/checks/capabilitiesRegistry.d.ts.map +1 -0
- package/dist/validate-pack/checks/capabilitiesRegistry.js +83 -0
- package/dist/validate-pack/checks/capabilitiesRegistry.js.map +1 -0
- package/dist/validate-pack/checks/contextPolicies.d.ts +3 -0
- package/dist/validate-pack/checks/contextPolicies.d.ts.map +1 -0
- package/dist/validate-pack/checks/contextPolicies.js +40 -0
- package/dist/validate-pack/checks/contextPolicies.js.map +1 -0
- package/dist/validate-pack/checks/mvkExamples.d.ts +10 -0
- package/dist/validate-pack/checks/mvkExamples.d.ts.map +1 -0
- package/dist/validate-pack/checks/mvkExamples.js +77 -0
- package/dist/validate-pack/checks/mvkExamples.js.map +1 -0
- package/dist/validate-pack/checks/requiredFiles.d.ts +3 -0
- package/dist/validate-pack/checks/requiredFiles.d.ts.map +1 -0
- package/dist/validate-pack/checks/requiredFiles.js +35 -0
- package/dist/validate-pack/checks/requiredFiles.js.map +1 -0
- package/dist/validate-pack/checks/resolutionPolicy.d.ts +3 -0
- package/dist/validate-pack/checks/resolutionPolicy.d.ts.map +1 -0
- package/dist/validate-pack/checks/resolutionPolicy.js +88 -0
- package/dist/validate-pack/checks/resolutionPolicy.js.map +1 -0
- package/dist/validate-pack/checks/schemas.d.ts +16 -0
- package/dist/validate-pack/checks/schemas.d.ts.map +1 -0
- package/dist/validate-pack/checks/schemas.js +70 -0
- package/dist/validate-pack/checks/schemas.js.map +1 -0
- package/dist/validate-pack/index.d.ts +25 -0
- package/dist/validate-pack/index.d.ts.map +1 -0
- package/dist/validate-pack/index.js +95 -0
- package/dist/validate-pack/index.js.map +1 -0
- package/dist/validate-pack/reporting.d.ts +6 -0
- package/dist/validate-pack/reporting.d.ts.map +1 -0
- package/dist/validate-pack/reporting.js +40 -0
- package/dist/validate-pack/reporting.js.map +1 -0
- package/dist/validate-pack/types.d.ts +34 -0
- package/dist/validate-pack/types.d.ts.map +1 -0
- package/dist/validate-pack/types.js +8 -0
- package/dist/validate-pack/types.js.map +1 -0
- package/package.json +54 -0
|
@@ -0,0 +1,423 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Milestone 2 entry point — compile-plan.
|
|
3
|
+
*
|
|
4
|
+
* Pure deterministic compiler. Reads a TaskSpec + pack registries,
|
|
5
|
+
* walks the capability graph backward from artifact_target, emits a
|
|
6
|
+
* WorkPlan validating against work-plan.schema.json.
|
|
7
|
+
*
|
|
8
|
+
* No model calls. No execution. No effects. No tools. No PDF.
|
|
9
|
+
*
|
|
10
|
+
* Determinism guarantee: same TaskSpec + same registries + same lockfile
|
|
11
|
+
* produces the same WorkPlan and the same plan id.
|
|
12
|
+
*/
|
|
13
|
+
import { createHash } from "node:crypto";
|
|
14
|
+
import { writeFileSync } from "node:fs";
|
|
15
|
+
import { resolve } from "node:path";
|
|
16
|
+
import { resolvePackPath } from "../lib/paths.js";
|
|
17
|
+
import { loadJson } from "../lib/loadJson.js";
|
|
18
|
+
import { makeAjv, compileSchema, formatAjvErrors } from "../lib/ajvSetup.js";
|
|
19
|
+
import { loadAllRegistries, loadTaskSpec } from "./registries.js";
|
|
20
|
+
import { backwardWalk } from "./graph.js";
|
|
21
|
+
import { resolveConfig } from "./resolver.js";
|
|
22
|
+
import { partitionBudgets } from "./budgets.js";
|
|
23
|
+
export async function compilePlan(args) {
|
|
24
|
+
const errors = [];
|
|
25
|
+
const warnings = [];
|
|
26
|
+
// 1. Load TaskSpec.
|
|
27
|
+
const taskResult = loadTaskSpec(args.taskPath);
|
|
28
|
+
if (!taskResult.ok || !taskResult.task) {
|
|
29
|
+
errors.push({
|
|
30
|
+
code: taskResult.code ?? "task_load_failed",
|
|
31
|
+
message: taskResult.message ?? "Could not load TaskSpec",
|
|
32
|
+
details: { path: taskResult.path },
|
|
33
|
+
});
|
|
34
|
+
return finish(errors, warnings, undefined, args);
|
|
35
|
+
}
|
|
36
|
+
const task = taskResult.task;
|
|
37
|
+
// 2. Load registries + policies + lockfile.
|
|
38
|
+
const regsResult = loadAllRegistries(args.packPath, args.lockfilePath);
|
|
39
|
+
if (!regsResult.ok) {
|
|
40
|
+
errors.push({ code: regsResult.code, message: regsResult.message, details: { path: regsResult.path } });
|
|
41
|
+
return finish(errors, warnings, undefined, args);
|
|
42
|
+
}
|
|
43
|
+
const regs = regsResult.registries;
|
|
44
|
+
// 3. Validate TaskSpec against task-spec schema.
|
|
45
|
+
const taskSchemaPath = resolvePackPath(args.packPath, ".harness/schemas/task-spec.schema.json");
|
|
46
|
+
const taskSchemaJson = loadJson(taskSchemaPath);
|
|
47
|
+
if (!taskSchemaJson.ok) {
|
|
48
|
+
errors.push({ code: "task_schema_unavailable", message: taskSchemaJson.message });
|
|
49
|
+
return finish(errors, warnings, undefined, args);
|
|
50
|
+
}
|
|
51
|
+
const ajv = makeAjv();
|
|
52
|
+
const taskSchema = compileSchema(ajv, taskSchemaJson.data);
|
|
53
|
+
if (!taskSchema.ok) {
|
|
54
|
+
errors.push({ code: "task_schema_compile_failed", message: taskSchema.message });
|
|
55
|
+
return finish(errors, warnings, undefined, args);
|
|
56
|
+
}
|
|
57
|
+
if (!taskSchema.validate(task)) {
|
|
58
|
+
errors.push({
|
|
59
|
+
code: "task_schema_validation_failed",
|
|
60
|
+
message: "TaskSpec does not validate against task-spec schema.",
|
|
61
|
+
details: { errors: formatAjvErrors(taskSchema.validate.errors) },
|
|
62
|
+
});
|
|
63
|
+
return finish(errors, warnings, undefined, args);
|
|
64
|
+
}
|
|
65
|
+
// 4. Confirm artifact_target exists in artifact registry.
|
|
66
|
+
const targetType = task.parsed.artifact_target;
|
|
67
|
+
if (!regs.artifacts.artifact_types[targetType]) {
|
|
68
|
+
errors.push({
|
|
69
|
+
code: "unknown_artifact_target",
|
|
70
|
+
message: `TaskSpec.parsed.artifact_target='${targetType}' not in .artifacts/registry.json.`,
|
|
71
|
+
});
|
|
72
|
+
return finish(errors, warnings, undefined, args);
|
|
73
|
+
}
|
|
74
|
+
// 5. Build the "given" set — types the member supplied via source_material.
|
|
75
|
+
const given = new Set();
|
|
76
|
+
for (const sm of task.parsed.source_material ?? []) {
|
|
77
|
+
given.add(sm.type);
|
|
78
|
+
}
|
|
79
|
+
// 6. Walk the capability graph backward.
|
|
80
|
+
const walk = backwardWalk(regs.capabilities, targetType, given);
|
|
81
|
+
if (!walk.ok) {
|
|
82
|
+
errors.push({ code: walk.code, message: walk.message, details: walk.details });
|
|
83
|
+
return finish(errors, warnings, undefined, args);
|
|
84
|
+
}
|
|
85
|
+
// 7. Surface gap-status capabilities as warnings.
|
|
86
|
+
for (const node of walk.ordered) {
|
|
87
|
+
const status = node.capability.provider_status ?? "";
|
|
88
|
+
if (status.startsWith("gap:")) {
|
|
89
|
+
warnings.push({
|
|
90
|
+
code: "capability_gap",
|
|
91
|
+
message: `Capability '${node.capabilityId}' has provider_status='${status}'. Plan compiles but execution will fail until the gap closes.`,
|
|
92
|
+
details: { capability: node.capabilityId, provider_status: status },
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
// 8. Build skill steps.
|
|
97
|
+
const steps = [];
|
|
98
|
+
const stepIdByCapability = new Map();
|
|
99
|
+
const capabilityById = new Map();
|
|
100
|
+
for (const [id, cap] of Object.entries(regs.capabilities.capabilities)) {
|
|
101
|
+
capabilityById.set(id, cap);
|
|
102
|
+
}
|
|
103
|
+
let counter = 1;
|
|
104
|
+
for (const node of walk.ordered) {
|
|
105
|
+
const stepId = `s${counter++}`;
|
|
106
|
+
stepIdByCapability.set(node.capabilityId, stepId);
|
|
107
|
+
const step = {
|
|
108
|
+
id: stepId,
|
|
109
|
+
kind: "skill",
|
|
110
|
+
capability: node.capabilityId,
|
|
111
|
+
skill_ref: node.capability.provided_by_skills?.[0] ?? undefined,
|
|
112
|
+
depends_on: node.dependsOnCapabilities
|
|
113
|
+
.map((c) => stepIdByCapability.get(c))
|
|
114
|
+
.filter((x) => Boolean(x)),
|
|
115
|
+
inputs: buildStepInputs(node.capability, task, regs.configs, regs.lockfile, stepIdByCapability, capabilityById),
|
|
116
|
+
produces: node.capability.output_artifact_type,
|
|
117
|
+
verify: buildVerifyClause(node.capability, regs.artifacts, task, targetType),
|
|
118
|
+
requires_approval: false,
|
|
119
|
+
};
|
|
120
|
+
if (step.depends_on && step.depends_on.length === 0)
|
|
121
|
+
delete step.depends_on;
|
|
122
|
+
steps.push(step);
|
|
123
|
+
}
|
|
124
|
+
// 9. Append a format step if a transform capability exists matching the format_target.
|
|
125
|
+
const formatStep = maybeAppendFormatStep(task, regs.capabilities, capabilityById, walk.ordered, steps, counter, warnings);
|
|
126
|
+
if (formatStep) {
|
|
127
|
+
steps.push(formatStep);
|
|
128
|
+
counter++;
|
|
129
|
+
}
|
|
130
|
+
// 10. Append an effect step if the artifact is a substrate-write target.
|
|
131
|
+
const effectStep = maybeAppendEffectStep(task, regs.artifacts, steps, counter);
|
|
132
|
+
if (effectStep) {
|
|
133
|
+
steps.push(effectStep);
|
|
134
|
+
counter++;
|
|
135
|
+
}
|
|
136
|
+
// 11. Partition context budgets.
|
|
137
|
+
const totalBudget = task.constraints?.max_token_budget ?? 200000;
|
|
138
|
+
partitionBudgets(steps, totalBudget);
|
|
139
|
+
// 12. Assemble fallback_tree.
|
|
140
|
+
const fallback_tree = assembleFallbackTree(steps);
|
|
141
|
+
// 13. Compute deterministic plan id.
|
|
142
|
+
const planId = computePlanId(task, regs.registriesHash);
|
|
143
|
+
const dateFromTask = extractDateFromTaskId(task.id);
|
|
144
|
+
const planIdWithDate = dateFromTask ? `plan-${dateFromTask}-${planId.slice(0, 8)}` : `plan-${planId.slice(0, 16)}`;
|
|
145
|
+
// 14. Assemble artifacts_produced and effects_to_commit.
|
|
146
|
+
const artifacts_produced = buildArtifactsProduced(steps, targetType);
|
|
147
|
+
const effects_to_commit = steps
|
|
148
|
+
.filter((s) => s.kind === "effect")
|
|
149
|
+
.map((s) => ({ id: s.id, risk: "low", idempotent: true }));
|
|
150
|
+
// 15. Emit WorkPlan.
|
|
151
|
+
const plan = {
|
|
152
|
+
id: planIdWithDate,
|
|
153
|
+
task_spec_ref: task.id,
|
|
154
|
+
compiler_version: "seyola-runtime-compile-plan/1.0.0",
|
|
155
|
+
context_budget: {
|
|
156
|
+
max_total_tokens: totalBudget,
|
|
157
|
+
model_default: "claude-opus-4-7-1m",
|
|
158
|
+
},
|
|
159
|
+
steps,
|
|
160
|
+
fallback_tree,
|
|
161
|
+
artifacts_produced,
|
|
162
|
+
effects_to_commit: effects_to_commit.length > 0 ? effects_to_commit : undefined,
|
|
163
|
+
};
|
|
164
|
+
// 16. Validate emitted plan against work-plan schema.
|
|
165
|
+
const planSchemaPath = resolvePackPath(args.packPath, ".harness/schemas/work-plan.schema.json");
|
|
166
|
+
const planSchemaJson = loadJson(planSchemaPath);
|
|
167
|
+
if (!planSchemaJson.ok) {
|
|
168
|
+
errors.push({ code: "plan_schema_unavailable", message: planSchemaJson.message });
|
|
169
|
+
return finish(errors, warnings, plan, args);
|
|
170
|
+
}
|
|
171
|
+
const planSchema = compileSchema(ajv, planSchemaJson.data);
|
|
172
|
+
if (!planSchema.ok) {
|
|
173
|
+
errors.push({ code: "plan_schema_compile_failed", message: planSchema.message });
|
|
174
|
+
return finish(errors, warnings, plan, args);
|
|
175
|
+
}
|
|
176
|
+
if (!planSchema.validate(plan)) {
|
|
177
|
+
errors.push({
|
|
178
|
+
code: "emitted_plan_invalid",
|
|
179
|
+
message: "Emitted WorkPlan failed validation against work-plan schema.",
|
|
180
|
+
details: { errors: formatAjvErrors(planSchema.validate.errors) },
|
|
181
|
+
});
|
|
182
|
+
return finish(errors, warnings, plan, args);
|
|
183
|
+
}
|
|
184
|
+
return finish(errors, warnings, plan, args);
|
|
185
|
+
}
|
|
186
|
+
// ---------- Helpers ----------
|
|
187
|
+
function buildStepInputs(capability, task, configs, lockfile, stepIdByCapability, capabilityById) {
|
|
188
|
+
const inputs = {};
|
|
189
|
+
// 1. Artifact-type inputs: either member-supplied (from source_material) or
|
|
190
|
+
// upstream-produced (${sN.output} reference). For upstream lookup, find
|
|
191
|
+
// the already-minted step whose capability's output_artifact_type matches.
|
|
192
|
+
for (const inputType of capability.input_artifact_types ?? []) {
|
|
193
|
+
const paramName = inputType.replace(/-/g, "_");
|
|
194
|
+
const fromSource = (task.parsed.source_material ?? []).find((sm) => sm.type === inputType);
|
|
195
|
+
if (fromSource) {
|
|
196
|
+
// Two shapes supported:
|
|
197
|
+
// - content: "..." → inline content. Encoded as inline:<text> for the resolver.
|
|
198
|
+
// - ref: "path" → file path. Resolved by inputResolver against TaskSpec dir → memberRoot → output dir.
|
|
199
|
+
if (fromSource.content !== undefined) {
|
|
200
|
+
inputs[paramName] = `inline:${fromSource.content}`;
|
|
201
|
+
}
|
|
202
|
+
else if (fromSource.ref !== undefined) {
|
|
203
|
+
inputs[paramName] = fromSource.ref;
|
|
204
|
+
}
|
|
205
|
+
else {
|
|
206
|
+
// Neither field provided. Surface as a missing-input warning by storing an empty inline marker.
|
|
207
|
+
inputs[paramName] = "inline:";
|
|
208
|
+
}
|
|
209
|
+
continue;
|
|
210
|
+
}
|
|
211
|
+
let upstreamStepId = null;
|
|
212
|
+
for (const [capId, stepId] of stepIdByCapability.entries()) {
|
|
213
|
+
const cap = capabilityById.get(capId);
|
|
214
|
+
if (cap?.output_artifact_type === inputType) {
|
|
215
|
+
upstreamStepId = stepId;
|
|
216
|
+
break;
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
inputs[paramName] = upstreamStepId ? `\${${upstreamStepId}.output}` : `\${upstream.output}`;
|
|
220
|
+
}
|
|
221
|
+
// 2. Typed-config inputs: resolve via the resolver dry-run.
|
|
222
|
+
for (const family of capability.requires_configs ?? []) {
|
|
223
|
+
if (family === "audience") {
|
|
224
|
+
// Audience profiles are member-substrate paths, not typed configs.
|
|
225
|
+
const audience = task.parsed.audience;
|
|
226
|
+
inputs["audience"] = audience
|
|
227
|
+
? `market/audience-profiles/${audience}.md`
|
|
228
|
+
: "market/audience-profiles/default.md";
|
|
229
|
+
continue;
|
|
230
|
+
}
|
|
231
|
+
const resolved = resolveConfig(family, configs, lockfile);
|
|
232
|
+
if (resolved.address) {
|
|
233
|
+
inputs[family] = resolved.address;
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
return inputs;
|
|
237
|
+
}
|
|
238
|
+
function buildVerifyClause(capability, artifacts, task, targetType) {
|
|
239
|
+
// For the final step (output_artifact_type === artifact_target), use TaskSpec.success_criteria.
|
|
240
|
+
if (capability.output_artifact_type === targetType && task.success_criteria && task.success_criteria.length > 0) {
|
|
241
|
+
const list = task.success_criteria.map((c) => `rubric:${c.rubric}@${c.threshold}`);
|
|
242
|
+
return list.length === 1 ? list[0] : list;
|
|
243
|
+
}
|
|
244
|
+
// For intermediate steps: use capability.verify_rubric if declared.
|
|
245
|
+
if (capability.verify_rubric) {
|
|
246
|
+
if (Array.isArray(capability.verify_rubric)) {
|
|
247
|
+
return capability.verify_rubric.length === 1 ? capability.verify_rubric[0] : capability.verify_rubric;
|
|
248
|
+
}
|
|
249
|
+
return capability.verify_rubric;
|
|
250
|
+
}
|
|
251
|
+
// Fall back to artifact's quality_rubrics[0] if any, with default threshold 8.
|
|
252
|
+
const outputType = capability.output_artifact_type;
|
|
253
|
+
if (outputType) {
|
|
254
|
+
const artifact = artifacts.artifact_types[outputType];
|
|
255
|
+
if (artifact?.quality_rubrics && artifact.quality_rubrics.length > 0) {
|
|
256
|
+
return `rubric:${artifact.quality_rubrics[0]}@8`;
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
return undefined;
|
|
260
|
+
}
|
|
261
|
+
function maybeAppendFormatStep(task, registry, capabilityById, walk, existingSteps, nextCounter, warnings) {
|
|
262
|
+
const formatTarget = task.parsed.format_target;
|
|
263
|
+
if (!formatTarget)
|
|
264
|
+
return null;
|
|
265
|
+
const lastSkillStep = existingSteps[existingSteps.length - 1];
|
|
266
|
+
if (!lastSkillStep)
|
|
267
|
+
return null;
|
|
268
|
+
const lastCapability = walk.find((n) => n.capabilityId === lastSkillStep.capability);
|
|
269
|
+
if (lastCapability?.capability.output_format === formatTarget)
|
|
270
|
+
return null;
|
|
271
|
+
// Find a transform capability whose input_artifact_types includes the prior
|
|
272
|
+
// step's produces AND output_format matches formatTarget.
|
|
273
|
+
const upstreamProduces = lastSkillStep.produces;
|
|
274
|
+
let formatCapId = null;
|
|
275
|
+
let formatCap = null;
|
|
276
|
+
for (const [id, cap] of Object.entries(registry.capabilities)) {
|
|
277
|
+
if (cap.operation === "transform" &&
|
|
278
|
+
cap.output_format === formatTarget &&
|
|
279
|
+
(cap.input_artifact_types ?? []).includes(upstreamProduces ?? "")) {
|
|
280
|
+
formatCapId = id;
|
|
281
|
+
formatCap = cap;
|
|
282
|
+
break;
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
void capabilityById;
|
|
286
|
+
// Surface gap warning if applicable.
|
|
287
|
+
if (formatCap?.provider_status?.startsWith("gap:")) {
|
|
288
|
+
warnings.push({
|
|
289
|
+
code: "capability_gap",
|
|
290
|
+
message: `Capability '${formatCapId}' has provider_status='${formatCap.provider_status}'. Plan compiles but execution will fail until the gap closes.`,
|
|
291
|
+
details: { capability: formatCapId ?? undefined, provider_status: formatCap.provider_status },
|
|
292
|
+
});
|
|
293
|
+
}
|
|
294
|
+
const stepId = `s${nextCounter}`;
|
|
295
|
+
return {
|
|
296
|
+
id: stepId,
|
|
297
|
+
kind: "format",
|
|
298
|
+
adapter: formatCap?.format_adapter_id ?? `${formatTarget}-proposal`,
|
|
299
|
+
depends_on: [lastSkillStep.id],
|
|
300
|
+
inputs: {
|
|
301
|
+
document: `\${${lastSkillStep.id}.output}`,
|
|
302
|
+
format_config: formatCap?.format_config_address ?? `universal:format:${formatTarget}-formal@v1`,
|
|
303
|
+
},
|
|
304
|
+
produces: lastSkillStep.produces,
|
|
305
|
+
verify: "rubric:format-fidelity@9",
|
|
306
|
+
requires_approval: false,
|
|
307
|
+
};
|
|
308
|
+
}
|
|
309
|
+
function maybeAppendEffectStep(task, artifacts, existingSteps, nextCounter) {
|
|
310
|
+
// Append a file.export effect step writing the final artifact to a substrate path.
|
|
311
|
+
// Always allowed — file.export is a substrate write, not an external effect.
|
|
312
|
+
const targetType = task.parsed.artifact_target;
|
|
313
|
+
const artifact = artifacts.artifact_types[targetType];
|
|
314
|
+
if (!artifact)
|
|
315
|
+
return null;
|
|
316
|
+
const lastStep = existingSteps[existingSteps.length - 1];
|
|
317
|
+
if (!lastStep)
|
|
318
|
+
return null;
|
|
319
|
+
const stepId = `s${nextCounter}`;
|
|
320
|
+
const dateStamp = extractDateFromTaskId(task.id) ?? "DATE";
|
|
321
|
+
const clientSlug = extractClientFromSourceMaterial(task) ?? "default";
|
|
322
|
+
const targetPath = `output/${pluralize(artifact.family)}/${clientSlug}/${dateStamp}-${targetType}.${task.parsed.format_target ?? "md"}`;
|
|
323
|
+
return {
|
|
324
|
+
id: stepId,
|
|
325
|
+
kind: "effect",
|
|
326
|
+
depends_on: [lastStep.id],
|
|
327
|
+
effect_request: {
|
|
328
|
+
type: "file.export",
|
|
329
|
+
target: targetPath,
|
|
330
|
+
payload: `\${${lastStep.id}.output}`,
|
|
331
|
+
},
|
|
332
|
+
requires_approval: false,
|
|
333
|
+
};
|
|
334
|
+
}
|
|
335
|
+
function pluralize(family) {
|
|
336
|
+
if (family === "document")
|
|
337
|
+
return "proposals";
|
|
338
|
+
if (family.endsWith("s"))
|
|
339
|
+
return family;
|
|
340
|
+
return `${family}s`;
|
|
341
|
+
}
|
|
342
|
+
function extractDateFromTaskId(taskId) {
|
|
343
|
+
const match = /^task-(\d{4}-\d{2}-\d{2})/.exec(taskId);
|
|
344
|
+
return match ? match[1] : null;
|
|
345
|
+
}
|
|
346
|
+
function extractClientFromSourceMaterial(task) {
|
|
347
|
+
for (const sm of task.parsed.source_material ?? []) {
|
|
348
|
+
if (!sm.ref)
|
|
349
|
+
continue;
|
|
350
|
+
const match = /^clients\/([^/]+)\//.exec(sm.ref);
|
|
351
|
+
if (match)
|
|
352
|
+
return match[1];
|
|
353
|
+
}
|
|
354
|
+
return null;
|
|
355
|
+
}
|
|
356
|
+
function assembleFallbackTree(steps) {
|
|
357
|
+
const tree = {};
|
|
358
|
+
for (const step of steps) {
|
|
359
|
+
if (step.kind === "skill") {
|
|
360
|
+
tree[`${step.id}.failed`] = `surface_blocked_status`;
|
|
361
|
+
if (step.verify) {
|
|
362
|
+
tree[`${step.id}.rubric_failed`] = `replan_with_feedback`;
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
else if (step.kind === "format") {
|
|
366
|
+
tree[`${step.id}.failed`] = `surface_blocked_status`;
|
|
367
|
+
}
|
|
368
|
+
else if (step.kind === "effect") {
|
|
369
|
+
tree[`${step.id}.permission_denied`] = `surface_blocked_status`;
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
return tree;
|
|
373
|
+
}
|
|
374
|
+
function buildArtifactsProduced(steps, targetType) {
|
|
375
|
+
// Find the LAST non-effect step that produces the target type. That's the
|
|
376
|
+
// step that wrote the final artifact to the path the effect step exports.
|
|
377
|
+
const effect = steps.find((s) => s.kind === "effect");
|
|
378
|
+
let targetPath;
|
|
379
|
+
if (effect?.effect_request?.target) {
|
|
380
|
+
targetPath = effect.effect_request.target;
|
|
381
|
+
}
|
|
382
|
+
if (!targetPath)
|
|
383
|
+
return undefined;
|
|
384
|
+
// Find the producing step (whatever the effect depends on).
|
|
385
|
+
const producerId = effect?.depends_on?.[effect.depends_on.length - 1];
|
|
386
|
+
return [{ type: targetType, path: targetPath, produced_by_step: producerId }];
|
|
387
|
+
}
|
|
388
|
+
function computePlanId(task, registriesHash) {
|
|
389
|
+
const hash = createHash("sha256");
|
|
390
|
+
hash.update(JSON.stringify(task));
|
|
391
|
+
hash.update(registriesHash);
|
|
392
|
+
return hash.digest("hex");
|
|
393
|
+
}
|
|
394
|
+
function finish(errors, warnings, plan, args) {
|
|
395
|
+
if (args.outputPath && plan) {
|
|
396
|
+
writeFileSync(resolve(args.outputPath), JSON.stringify(plan, null, 2));
|
|
397
|
+
}
|
|
398
|
+
if (args.json) {
|
|
399
|
+
process.stdout.write(JSON.stringify({ plan, warnings, errors }, null, 2) + "\n");
|
|
400
|
+
}
|
|
401
|
+
else {
|
|
402
|
+
if (plan) {
|
|
403
|
+
process.stderr.write(`compile-plan: emitted plan ${plan.id} with ${plan.steps.length} steps`);
|
|
404
|
+
if (warnings.length > 0)
|
|
405
|
+
process.stderr.write(` and ${warnings.length} warning${warnings.length === 1 ? "" : "s"}`);
|
|
406
|
+
process.stderr.write("\n");
|
|
407
|
+
for (const w of warnings)
|
|
408
|
+
process.stderr.write(` warning [${w.code}]: ${w.message}\n`);
|
|
409
|
+
if (errors.length > 0) {
|
|
410
|
+
process.stderr.write(`\nerrors:\n`);
|
|
411
|
+
for (const e of errors)
|
|
412
|
+
process.stderr.write(` error [${e.code}]: ${e.message}\n`);
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
else {
|
|
416
|
+
process.stderr.write(`compile-plan FAILED:\n`);
|
|
417
|
+
for (const e of errors)
|
|
418
|
+
process.stderr.write(` error [${e.code}]: ${e.message}\n`);
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
return { exitCode: errors.length === 0 ? 0 : 1, plan, warnings, errors };
|
|
422
|
+
}
|
|
423
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/compile-plan/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Loads every registry, policy, and lockfile compile-plan needs. One place,
|
|
3
|
+
* one set of error codes. Registry hash captured for deterministic plan ids.
|
|
4
|
+
*/
|
|
5
|
+
import type { CapabilityRegistry, ArtifactRegistry, ConfigsRegistry, TypeRegistry, ResolutionPolicy, PlanningPolicy, Lockfile, TaskSpec } from "./types.js";
|
|
6
|
+
export interface LoadedRegistries {
|
|
7
|
+
capabilities: CapabilityRegistry;
|
|
8
|
+
artifacts: ArtifactRegistry;
|
|
9
|
+
configs: ConfigsRegistry;
|
|
10
|
+
types: TypeRegistry;
|
|
11
|
+
resolutionPolicy: ResolutionPolicy;
|
|
12
|
+
planningPolicy: PlanningPolicy;
|
|
13
|
+
lockfile: Lockfile | null;
|
|
14
|
+
registriesHash: string;
|
|
15
|
+
}
|
|
16
|
+
export interface LoadFailure {
|
|
17
|
+
ok: false;
|
|
18
|
+
code: string;
|
|
19
|
+
message: string;
|
|
20
|
+
path?: string;
|
|
21
|
+
}
|
|
22
|
+
export type LoadRegistriesResult = {
|
|
23
|
+
ok: true;
|
|
24
|
+
registries: LoadedRegistries;
|
|
25
|
+
} | LoadFailure;
|
|
26
|
+
export interface LoadTaskResult {
|
|
27
|
+
ok: boolean;
|
|
28
|
+
task?: TaskSpec;
|
|
29
|
+
code?: string;
|
|
30
|
+
message?: string;
|
|
31
|
+
path?: string;
|
|
32
|
+
}
|
|
33
|
+
export declare function loadAllRegistries(packRoot: string, lockfilePath?: string): LoadRegistriesResult;
|
|
34
|
+
export declare function loadTaskSpec(taskPath: string): LoadTaskResult;
|
|
35
|
+
//# sourceMappingURL=registries.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registries.d.ts","sourceRoot":"","sources":["../../src/compile-plan/registries.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,OAAO,KAAK,EACV,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EACf,YAAY,EACZ,gBAAgB,EAChB,cAAc,EACd,QAAQ,EACR,QAAQ,EACT,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE,kBAAkB,CAAC;IACjC,SAAS,EAAE,gBAAgB,CAAC;IAC5B,OAAO,EAAE,eAAe,CAAC;IACzB,KAAK,EAAE,YAAY,CAAC;IACpB,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,cAAc,EAAE,cAAc,CAAC;IAC/B,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC;IAC1B,cAAc,EAAE,MAAM,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,KAAK,CAAC;IACV,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,oBAAoB,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,UAAU,EAAE,gBAAgB,CAAA;CAAE,GAAG,WAAW,CAAC;AAE5F,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,OAAO,CAAC;IACZ,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,oBAAoB,CA0D/F;AAED,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,CAO7D"}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Loads every registry, policy, and lockfile compile-plan needs. One place,
|
|
3
|
+
* one set of error codes. Registry hash captured for deterministic plan ids.
|
|
4
|
+
*/
|
|
5
|
+
import { createHash } from "node:crypto";
|
|
6
|
+
import { readFileSync } from "node:fs";
|
|
7
|
+
import { resolvePackPath } from "../lib/paths.js";
|
|
8
|
+
import { loadJson } from "../lib/loadJson.js";
|
|
9
|
+
import { loadYaml } from "../lib/loadYaml.js";
|
|
10
|
+
export function loadAllRegistries(packRoot, lockfilePath) {
|
|
11
|
+
const capPath = resolvePackPath(packRoot, ".capabilities/registry.json");
|
|
12
|
+
const artPath = resolvePackPath(packRoot, ".artifacts/registry.json");
|
|
13
|
+
const cfgPath = resolvePackPath(packRoot, ".configs/registry.json");
|
|
14
|
+
const typPath = resolvePackPath(packRoot, ".types/registry.json");
|
|
15
|
+
const resPath = resolvePackPath(packRoot, ".composer/resolution-policy.json");
|
|
16
|
+
const plnPath = resolvePackPath(packRoot, ".harness/planning-policy.json");
|
|
17
|
+
const cap = loadJson(capPath);
|
|
18
|
+
if (!cap.ok)
|
|
19
|
+
return { ok: false, code: cap.code, message: cap.message, path: cap.path };
|
|
20
|
+
const art = loadJson(artPath);
|
|
21
|
+
if (!art.ok)
|
|
22
|
+
return { ok: false, code: art.code, message: art.message, path: art.path };
|
|
23
|
+
const cfg = loadJson(cfgPath);
|
|
24
|
+
if (!cfg.ok)
|
|
25
|
+
return { ok: false, code: cfg.code, message: cfg.message, path: cfg.path };
|
|
26
|
+
const typ = loadJson(typPath);
|
|
27
|
+
if (!typ.ok)
|
|
28
|
+
return { ok: false, code: typ.code, message: typ.message, path: typ.path };
|
|
29
|
+
const res = loadJson(resPath);
|
|
30
|
+
if (!res.ok)
|
|
31
|
+
return { ok: false, code: res.code, message: res.message, path: res.path };
|
|
32
|
+
const pln = loadJson(plnPath);
|
|
33
|
+
if (!pln.ok)
|
|
34
|
+
return { ok: false, code: pln.code, message: pln.message, path: pln.path };
|
|
35
|
+
// Lockfile: prefer real, fall back to .example for deterministic CI runs.
|
|
36
|
+
const realLock = lockfilePath ?? resolvePackPath(packRoot, ".composer/install.lock");
|
|
37
|
+
const exampleLock = resolvePackPath(packRoot, ".composer/install.lock.example");
|
|
38
|
+
const lockResult = loadJson(realLock);
|
|
39
|
+
let lockfile = null;
|
|
40
|
+
if (lockResult.ok) {
|
|
41
|
+
lockfile = lockResult.data;
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
const fallback = loadJson(exampleLock);
|
|
45
|
+
if (fallback.ok) {
|
|
46
|
+
lockfile = fallback.data;
|
|
47
|
+
}
|
|
48
|
+
// It's not fatal to be missing a lockfile; deterministic ids still derive
|
|
49
|
+
// from registries + task. The lockfile, when present, pins binding choices.
|
|
50
|
+
}
|
|
51
|
+
// Hash all five registry files + planning + resolution policies + lockfile
|
|
52
|
+
// for deterministic plan-id derivation.
|
|
53
|
+
const hash = createHash("sha256");
|
|
54
|
+
for (const p of [capPath, artPath, cfgPath, typPath, resPath, plnPath]) {
|
|
55
|
+
hash.update(readFileSync(p));
|
|
56
|
+
}
|
|
57
|
+
if (lockfile)
|
|
58
|
+
hash.update(JSON.stringify(lockfile));
|
|
59
|
+
return {
|
|
60
|
+
ok: true,
|
|
61
|
+
registries: {
|
|
62
|
+
capabilities: cap.data,
|
|
63
|
+
artifacts: art.data,
|
|
64
|
+
configs: cfg.data,
|
|
65
|
+
types: typ.data,
|
|
66
|
+
resolutionPolicy: res.data,
|
|
67
|
+
planningPolicy: pln.data,
|
|
68
|
+
lockfile,
|
|
69
|
+
registriesHash: hash.digest("hex"),
|
|
70
|
+
},
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
export function loadTaskSpec(taskPath) {
|
|
74
|
+
const isYaml = taskPath.endsWith(".yaml") || taskPath.endsWith(".yml");
|
|
75
|
+
const result = isYaml ? loadYaml(taskPath) : loadJson(taskPath);
|
|
76
|
+
if (!result.ok) {
|
|
77
|
+
return { ok: false, code: result.code, message: result.message, path: result.path };
|
|
78
|
+
}
|
|
79
|
+
return { ok: true, task: result.data };
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=registries.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registries.js","sourceRoot":"","sources":["../../src/compile-plan/registries.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAwC9C,MAAM,UAAU,iBAAiB,CAAC,QAAgB,EAAE,YAAqB;IACvE,MAAM,OAAO,GAAG,eAAe,CAAC,QAAQ,EAAE,6BAA6B,CAAC,CAAC;IACzE,MAAM,OAAO,GAAG,eAAe,CAAC,QAAQ,EAAE,0BAA0B,CAAC,CAAC;IACtE,MAAM,OAAO,GAAG,eAAe,CAAC,QAAQ,EAAE,wBAAwB,CAAC,CAAC;IACpE,MAAM,OAAO,GAAG,eAAe,CAAC,QAAQ,EAAE,sBAAsB,CAAC,CAAC;IAClE,MAAM,OAAO,GAAG,eAAe,CAAC,QAAQ,EAAE,kCAAkC,CAAC,CAAC;IAC9E,MAAM,OAAO,GAAG,eAAe,CAAC,QAAQ,EAAE,+BAA+B,CAAC,CAAC;IAE3E,MAAM,GAAG,GAAG,QAAQ,CAAqB,OAAO,CAAC,CAAC;IAClD,IAAI,CAAC,GAAG,CAAC,EAAE;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC;IACxF,MAAM,GAAG,GAAG,QAAQ,CAAmB,OAAO,CAAC,CAAC;IAChD,IAAI,CAAC,GAAG,CAAC,EAAE;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC;IACxF,MAAM,GAAG,GAAG,QAAQ,CAAkB,OAAO,CAAC,CAAC;IAC/C,IAAI,CAAC,GAAG,CAAC,EAAE;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC;IACxF,MAAM,GAAG,GAAG,QAAQ,CAAe,OAAO,CAAC,CAAC;IAC5C,IAAI,CAAC,GAAG,CAAC,EAAE;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC;IACxF,MAAM,GAAG,GAAG,QAAQ,CAAmB,OAAO,CAAC,CAAC;IAChD,IAAI,CAAC,GAAG,CAAC,EAAE;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC;IACxF,MAAM,GAAG,GAAG,QAAQ,CAAiB,OAAO,CAAC,CAAC;IAC9C,IAAI,CAAC,GAAG,CAAC,EAAE;QAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC;IAExF,0EAA0E;IAC1E,MAAM,QAAQ,GAAG,YAAY,IAAI,eAAe,CAAC,QAAQ,EAAE,wBAAwB,CAAC,CAAC;IACrF,MAAM,WAAW,GAAG,eAAe,CAAC,QAAQ,EAAE,gCAAgC,CAAC,CAAC;IAChF,MAAM,UAAU,GAAG,QAAQ,CAAW,QAAQ,CAAC,CAAC;IAChD,IAAI,QAAQ,GAAoB,IAAI,CAAC;IACrC,IAAI,UAAU,CAAC,EAAE,EAAE,CAAC;QAClB,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC;IAC7B,CAAC;SAAM,CAAC;QACN,MAAM,QAAQ,GAAG,QAAQ,CAAW,WAAW,CAAC,CAAC;QACjD,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC;YAChB,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC;QAC3B,CAAC;QACD,0EAA0E;QAC1E,4EAA4E;IAC9E,CAAC;IAED,2EAA2E;IAC3E,wCAAwC;IACxC,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;IAClC,KAAK,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC;QACvE,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;IAC/B,CAAC;IACD,IAAI,QAAQ;QAAE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEpD,OAAO;QACL,EAAE,EAAE,IAAI;QACR,UAAU,EAAE;YACV,YAAY,EAAE,GAAG,CAAC,IAAI;YACtB,SAAS,EAAE,GAAG,CAAC,IAAI;YACnB,OAAO,EAAE,GAAG,CAAC,IAAI;YACjB,KAAK,EAAE,GAAG,CAAC,IAAI;YACf,gBAAgB,EAAE,GAAG,CAAC,IAAI;YAC1B,cAAc,EAAE,GAAG,CAAC,IAAI;YACxB,QAAQ;YACR,cAAc,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;SACnC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,QAAgB;IAC3C,MAAM,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACvE,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAW,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAW,QAAQ,CAAC,CAAC;IACpF,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;IACtF,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;AACzC,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Resolver dry-run for typed-config inputs. Walks the 8-step precedence
|
|
3
|
+
* declared in .composer/resolution-policy.json. Returns the address that
|
|
4
|
+
* WOULD be selected (does not commit; that's M3 work). Lockfile takes
|
|
5
|
+
* precedence when present.
|
|
6
|
+
*/
|
|
7
|
+
import type { ConfigsRegistry, Lockfile, ConfigEntry } from "./types.js";
|
|
8
|
+
export interface ResolvedAddress {
|
|
9
|
+
address: string;
|
|
10
|
+
source: "lockfile" | "member" | "creator" | "pack" | "universal" | "default" | "unresolved";
|
|
11
|
+
config?: ConfigEntry;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Resolve a typed-config family by walking precedence.
|
|
15
|
+
*
|
|
16
|
+
* For M2 we only need:
|
|
17
|
+
* - lockfile (if present) → use the address
|
|
18
|
+
* - else first config of the family in member > creator > pack > universal scope
|
|
19
|
+
*
|
|
20
|
+
* No member/creator scopes ship in the v1.9.4 pack, so most resolution
|
|
21
|
+
* lands at universal.
|
|
22
|
+
*/
|
|
23
|
+
export declare function resolveConfig(family: string, configs: ConfigsRegistry, lockfile: Lockfile | null): ResolvedAddress;
|
|
24
|
+
//# sourceMappingURL=resolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../../src/compile-plan/resolver.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAEzE,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,UAAU,GAAG,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,WAAW,GAAG,SAAS,GAAG,YAAY,CAAC;IAC5F,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,eAAe,EACxB,QAAQ,EAAE,QAAQ,GAAG,IAAI,GACxB,eAAe,CA0BjB"}
|