@entelligentsia/forgecli 1.0.21 → 1.0.25
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/CHANGELOG.md +88 -0
- package/dist/CHANGELOG-forge-plugin.md +118 -0
- package/dist/extensions/forgecli/forge-tools.d.ts +1 -0
- package/dist/extensions/forgecli/forge-tools.js +73 -0
- package/dist/extensions/forgecli/forge-tools.js.map +1 -1
- package/dist/extensions/forgecli/lib/forge-root.d.ts +5 -0
- package/dist/extensions/forgecli/lib/forge-root.js +14 -1
- package/dist/extensions/forgecli/lib/forge-root.js.map +1 -1
- package/dist/extensions/forgecli/orchestrators/fix-bug.d.ts +1 -0
- package/dist/extensions/forgecli/orchestrators/fix-bug.js +26 -0
- package/dist/extensions/forgecli/orchestrators/fix-bug.js.map +1 -1
- package/dist/extensions/forgecli/orchestrators/run-sprint.js +49 -0
- package/dist/extensions/forgecli/orchestrators/run-sprint.js.map +1 -1
- package/dist/forge-payload/.base-pack/workflows/_fragments/event-emission-schema.md +4 -0
- package/dist/forge-payload/.base-pack/workflows/_fragments/event-vocabulary.md +88 -0
- package/dist/forge-payload/.base-pack/workflows/commit_task.md +41 -38
- package/dist/forge-payload/.base-pack/workflows/implement_plan.md +3 -3
- package/dist/forge-payload/.base-pack/workflows-js/wfl-fix-bug.js +42 -6
- package/dist/forge-payload/.base-pack/workflows-js/wfl-run-task.js +32 -1
- package/dist/forge-payload/.claude-plugin/plugin.json +1 -1
- package/dist/forge-payload/.schemas/enum-catalog.json +2 -2
- package/dist/forge-payload/.schemas/event.schema.json +8 -3
- package/dist/forge-payload/.schemas/migrations.json +56 -0
- package/dist/forge-payload/integrity.json +3 -3
- package/dist/forge-payload/meta/store-schema/event.schema.md +7 -0
- package/dist/forge-payload/meta/workflows/_fragments/event-emission-schema.md +4 -0
- package/dist/forge-payload/meta/workflows/_fragments/event-vocabulary.md +88 -0
- package/dist/forge-payload/meta/workflows/meta-commit.md +46 -43
- package/dist/forge-payload/meta/workflows/meta-fix-bug.md +7 -2
- package/dist/forge-payload/meta/workflows/meta-implement.md +3 -3
- package/dist/forge-payload/meta/workflows/meta-orchestrate.md +4 -1
- package/dist/forge-payload/schemas/enum-catalog.json +2 -2
- package/dist/forge-payload/schemas/event.schema.json +8 -3
- package/dist/forge-payload/schemas/structure-manifest.json +4 -2
- package/dist/forge-payload/tools/commit-task.cjs +218 -0
- package/dist/forge-payload/tools/store-cli.cjs +6 -1
- package/node_modules/@mariozechner/clipboard/package.json +2 -1
- package/node_modules/@mariozechner/clipboard-linux-x64-musl/README.md +3 -0
- package/node_modules/@mariozechner/clipboard-linux-x64-musl/package.json +25 -0
- package/package.json +2 -2
- package/dist/extensions/forgecli/add-pipeline.d.ts +0 -19
- package/dist/extensions/forgecli/add-pipeline.js +0 -143
- package/dist/extensions/forgecli/add-pipeline.js.map +0 -1
- package/dist/extensions/forgecli/add-task.d.ts +0 -20
- package/dist/extensions/forgecli/add-task.js +0 -154
- package/dist/extensions/forgecli/add-task.js.map +0 -1
- package/dist/extensions/forgecli/approve.d.ts +0 -22
- package/dist/extensions/forgecli/approve.js +0 -152
- package/dist/extensions/forgecli/approve.js.map +0 -1
- package/dist/extensions/forgecli/banner.d.ts +0 -10
- package/dist/extensions/forgecli/banner.js +0 -36
- package/dist/extensions/forgecli/banner.js.map +0 -1
- package/dist/extensions/forgecli/calibrate.d.ts +0 -64
- package/dist/extensions/forgecli/calibrate.js +0 -481
- package/dist/extensions/forgecli/calibrate.js.map +0 -1
- package/dist/extensions/forgecli/collate.d.ts +0 -22
- package/dist/extensions/forgecli/collate.js +0 -134
- package/dist/extensions/forgecli/collate.js.map +0 -1
- package/dist/extensions/forgecli/commit.d.ts +0 -22
- package/dist/extensions/forgecli/commit.js +0 -152
- package/dist/extensions/forgecli/commit.js.map +0 -1
- package/dist/extensions/forgecli/config-command.d.ts +0 -8
- package/dist/extensions/forgecli/config-command.js +0 -67
- package/dist/extensions/forgecli/config-command.js.map +0 -1
- package/dist/extensions/forgecli/config-layer.d.ts +0 -53
- package/dist/extensions/forgecli/config-layer.js +0 -72
- package/dist/extensions/forgecli/config-layer.js.map +0 -1
- package/dist/extensions/forgecli/config-writer.d.ts +0 -16
- package/dist/extensions/forgecli/config-writer.js +0 -69
- package/dist/extensions/forgecli/config-writer.js.map +0 -1
- package/dist/extensions/forgecli/enhance.d.ts +0 -27
- package/dist/extensions/forgecli/enhance.js +0 -199
- package/dist/extensions/forgecli/enhance.js.map +0 -1
- package/dist/extensions/forgecli/fix-bug.d.ts +0 -85
- package/dist/extensions/forgecli/fix-bug.js +0 -1580
- package/dist/extensions/forgecli/fix-bug.js.map +0 -1
- package/dist/extensions/forgecli/forge-header.d.ts +0 -12
- package/dist/extensions/forgecli/forge-header.js +0 -114
- package/dist/extensions/forgecli/forge-header.js.map +0 -1
- package/dist/extensions/forgecli/forge-init.d.ts +0 -26
- package/dist/extensions/forgecli/forge-init.js +0 -514
- package/dist/extensions/forgecli/forge-init.js.map +0 -1
- package/dist/extensions/forgecli/forge-root.d.ts +0 -10
- package/dist/extensions/forgecli/forge-root.js +0 -62
- package/dist/extensions/forgecli/forge-root.js.map +0 -1
- package/dist/extensions/forgecli/forge-update-command.d.ts +0 -100
- package/dist/extensions/forgecli/forge-update-command.js +0 -435
- package/dist/extensions/forgecli/forge-update-command.js.map +0 -1
- package/dist/extensions/forgecli/friction-emit.d.ts +0 -99
- package/dist/extensions/forgecli/friction-emit.js +0 -245
- package/dist/extensions/forgecli/friction-emit.js.map +0 -1
- package/dist/extensions/forgecli/implement.d.ts +0 -22
- package/dist/extensions/forgecli/implement.js +0 -170
- package/dist/extensions/forgecli/implement.js.map +0 -1
- package/dist/extensions/forgecli/init-context.d.ts +0 -99
- package/dist/extensions/forgecli/init-context.js +0 -178
- package/dist/extensions/forgecli/init-context.js.map +0 -1
- package/dist/extensions/forgecli/init-progress.d.ts +0 -39
- package/dist/extensions/forgecli/init-progress.js +0 -117
- package/dist/extensions/forgecli/init-progress.js.map +0 -1
- package/dist/extensions/forgecli/input-router.d.ts +0 -33
- package/dist/extensions/forgecli/input-router.js +0 -136
- package/dist/extensions/forgecli/input-router.js.map +0 -1
- package/dist/extensions/forgecli/lib/halt-advisor.d.ts +0 -59
- package/dist/extensions/forgecli/lib/halt-advisor.js +0 -113
- package/dist/extensions/forgecli/lib/halt-advisor.js.map +0 -1
- package/dist/extensions/forgecli/lib/orchestrator-preflight.d.ts +0 -46
- package/dist/extensions/forgecli/lib/orchestrator-preflight.js +0 -64
- package/dist/extensions/forgecli/lib/orchestrator-preflight.js.map +0 -1
- package/dist/extensions/forgecli/materialize.d.ts +0 -16
- package/dist/extensions/forgecli/materialize.js +0 -195
- package/dist/extensions/forgecli/materialize.js.map +0 -1
- package/dist/extensions/forgecli/migrate.d.ts +0 -22
- package/dist/extensions/forgecli/migrate.js +0 -260
- package/dist/extensions/forgecli/migrate.js.map +0 -1
- package/dist/extensions/forgecli/migration-engine.d.ts +0 -117
- package/dist/extensions/forgecli/migration-engine.js +0 -563
- package/dist/extensions/forgecli/migration-engine.js.map +0 -1
- package/dist/extensions/forgecli/model-registry.d.ts +0 -61
- package/dist/extensions/forgecli/model-registry.js +0 -127
- package/dist/extensions/forgecli/model-registry.js.map +0 -1
- package/dist/extensions/forgecli/model-resolver.d.ts +0 -32
- package/dist/extensions/forgecli/model-resolver.js +0 -65
- package/dist/extensions/forgecli/model-resolver.js.map +0 -1
- package/dist/extensions/forgecli/model-validator.d.ts +0 -29
- package/dist/extensions/forgecli/model-validator.js +0 -107
- package/dist/extensions/forgecli/model-validator.js.map +0 -1
- package/dist/extensions/forgecli/orchestrator-status-bar.d.ts +0 -26
- package/dist/extensions/forgecli/orchestrator-status-bar.js +0 -213
- package/dist/extensions/forgecli/orchestrator-status-bar.js.map +0 -1
- package/dist/extensions/forgecli/plan.d.ts +0 -22
- package/dist/extensions/forgecli/plan.js +0 -167
- package/dist/extensions/forgecli/plan.js.map +0 -1
- package/dist/extensions/forgecli/quiz-agent.d.ts +0 -17
- package/dist/extensions/forgecli/quiz-agent.js +0 -98
- package/dist/extensions/forgecli/quiz-agent.js.map +0 -1
- package/dist/extensions/forgecli/read-command.d.ts +0 -2
- package/dist/extensions/forgecli/read-command.js +0 -100
- package/dist/extensions/forgecli/read-command.js.map +0 -1
- package/dist/extensions/forgecli/regenerate.d.ts +0 -40
- package/dist/extensions/forgecli/regenerate.js +0 -438
- package/dist/extensions/forgecli/regenerate.js.map +0 -1
- package/dist/extensions/forgecli/remove-command.d.ts +0 -17
- package/dist/extensions/forgecli/remove-command.js +0 -124
- package/dist/extensions/forgecli/remove-command.js.map +0 -1
- package/dist/extensions/forgecli/report-bug.d.ts +0 -25
- package/dist/extensions/forgecli/report-bug.js +0 -159
- package/dist/extensions/forgecli/report-bug.js.map +0 -1
- package/dist/extensions/forgecli/retrospective.d.ts +0 -20
- package/dist/extensions/forgecli/retrospective.js +0 -126
- package/dist/extensions/forgecli/retrospective.js.map +0 -1
- package/dist/extensions/forgecli/review-code.d.ts +0 -35
- package/dist/extensions/forgecli/review-code.js +0 -196
- package/dist/extensions/forgecli/review-code.js.map +0 -1
- package/dist/extensions/forgecli/review-plan.d.ts +0 -35
- package/dist/extensions/forgecli/review-plan.js +0 -200
- package/dist/extensions/forgecli/review-plan.js.map +0 -1
- package/dist/extensions/forgecli/run-sprint.d.ts +0 -27
- package/dist/extensions/forgecli/run-sprint.js +0 -716
- package/dist/extensions/forgecli/run-sprint.js.map +0 -1
- package/dist/extensions/forgecli/run-task.d.ts +0 -204
- package/dist/extensions/forgecli/run-task.js +0 -1403
- package/dist/extensions/forgecli/run-task.js.map +0 -1
- package/dist/extensions/forgecli/skill-curation-flag.d.ts +0 -21
- package/dist/extensions/forgecli/skill-curation-flag.js +0 -71
- package/dist/extensions/forgecli/skill-curation-flag.js.map +0 -1
- package/dist/extensions/forgecli/skill-curator-subagent.d.ts +0 -102
- package/dist/extensions/forgecli/skill-curator-subagent.js +0 -339
- package/dist/extensions/forgecli/skill-curator-subagent.js.map +0 -1
- package/dist/extensions/forgecli/skill-retriever.d.ts +0 -84
- package/dist/extensions/forgecli/skill-retriever.js +0 -246
- package/dist/extensions/forgecli/skill-retriever.js.map +0 -1
- package/dist/extensions/forgecli/skill-usage-tracker.d.ts +0 -91
- package/dist/extensions/forgecli/skill-usage-tracker.js +0 -224
- package/dist/extensions/forgecli/skill-usage-tracker.js.map +0 -1
- package/dist/extensions/forgecli/sprint-intake.d.ts +0 -10
- package/dist/extensions/forgecli/sprint-intake.js +0 -91
- package/dist/extensions/forgecli/sprint-intake.js.map +0 -1
- package/dist/extensions/forgecli/sprint-plan.d.ts +0 -14
- package/dist/extensions/forgecli/sprint-plan.js +0 -122
- package/dist/extensions/forgecli/sprint-plan.js.map +0 -1
- package/dist/extensions/forgecli/status-command.d.ts +0 -19
- package/dist/extensions/forgecli/status-command.js +0 -140
- package/dist/extensions/forgecli/status-command.js.map +0 -1
- package/dist/extensions/forgecli/store-error-remediation.d.ts +0 -65
- package/dist/extensions/forgecli/store-error-remediation.js +0 -307
- package/dist/extensions/forgecli/store-error-remediation.js.map +0 -1
- package/dist/extensions/forgecli/store-query.d.ts +0 -22
- package/dist/extensions/forgecli/store-query.js +0 -107
- package/dist/extensions/forgecli/store-query.js.map +0 -1
- package/dist/extensions/forgecli/store-repair.d.ts +0 -17
- package/dist/extensions/forgecli/store-repair.js +0 -123
- package/dist/extensions/forgecli/store-repair.js.map +0 -1
- package/dist/extensions/forgecli/store-resolver.d.ts +0 -56
- package/dist/extensions/forgecli/store-resolver.js +0 -263
- package/dist/extensions/forgecli/store-resolver.js.map +0 -1
- package/dist/extensions/forgecli/store-validator.d.ts +0 -16
- package/dist/extensions/forgecli/store-validator.js +0 -32
- package/dist/extensions/forgecli/store-validator.js.map +0 -1
- package/dist/extensions/forgecli/test-orchestrate.d.ts +0 -2
- package/dist/extensions/forgecli/test-orchestrate.js +0 -182
- package/dist/extensions/forgecli/test-orchestrate.js.map +0 -1
- package/dist/extensions/forgecli/thread-switcher.d.ts +0 -5
- package/dist/extensions/forgecli/thread-switcher.js +0 -189
- package/dist/extensions/forgecli/thread-switcher.js.map +0 -1
- package/dist/extensions/forgecli/transition-guard.d.ts +0 -20
- package/dist/extensions/forgecli/transition-guard.js +0 -89
- package/dist/extensions/forgecli/transition-guard.js.map +0 -1
- package/dist/extensions/forgecli/update-check.d.ts +0 -37
- package/dist/extensions/forgecli/update-check.js +0 -185
- package/dist/extensions/forgecli/update-check.js.map +0 -1
- package/dist/extensions/forgecli/update-tools.d.ts +0 -23
- package/dist/extensions/forgecli/update-tools.js +0 -135
- package/dist/extensions/forgecli/update-tools.js.map +0 -1
- package/dist/extensions/forgecli/validate.d.ts +0 -22
- package/dist/extensions/forgecli/validate.js +0 -152
- package/dist/extensions/forgecli/validate.js.map +0 -1
- package/dist/extensions/forgecli/viewport-events.d.ts +0 -78
- package/dist/extensions/forgecli/viewport-events.js +0 -243
- package/dist/extensions/forgecli/viewport-events.js.map +0 -1
- package/dist/extensions/forgecli/viewport-renderer.d.ts +0 -83
- package/dist/extensions/forgecli/viewport-renderer.js +0 -233
- package/dist/extensions/forgecli/viewport-renderer.js.map +0 -1
- package/dist/extensions/forgecli/viewport-theme.d.ts +0 -11
- package/dist/extensions/forgecli/viewport-theme.js +0 -128
- package/dist/extensions/forgecli/viewport-theme.js.map +0 -1
- package/dist/extensions/forgecli/whats-new-widget.d.ts +0 -26
- package/dist/extensions/forgecli/whats-new-widget.js +0 -376
- package/dist/extensions/forgecli/whats-new-widget.js.map +0 -1
- package/dist/extensions/forgecli/whats-new.d.ts +0 -120
- package/dist/extensions/forgecli/whats-new.js +0 -470
- package/dist/extensions/forgecli/whats-new.js.map +0 -1
|
@@ -1,563 +0,0 @@
|
|
|
1
|
-
// migration-engine.ts — Deterministic migration apply engine (FORGE-S23-T01)
|
|
2
|
-
//
|
|
3
|
-
// Reads migrations.json from the bundled payload, walks version entries between
|
|
4
|
-
// the given bounds using semver comparison [from, to) semantics, applies
|
|
5
|
-
// regeneration actions against the project's .forge/ directory, and maintains
|
|
6
|
-
// an idempotency ledger at .forge/applied-migrations.json.
|
|
7
|
-
//
|
|
8
|
-
// Design: pure engine — no pi runtime context, no UI calls, no event emission.
|
|
9
|
-
// The calling command handler (forge-update-command.ts) is responsible for
|
|
10
|
-
// event emission after this engine returns a MigrationResult.
|
|
11
|
-
//
|
|
12
|
-
// Layer: Layer 1 of the two-layer split (pure engine / command handler).
|
|
13
|
-
import * as fs from "node:fs";
|
|
14
|
-
import { createRequire } from "node:module";
|
|
15
|
-
import * as path from "node:path";
|
|
16
|
-
import { isFile } from "./lib/shared-fs-utils.js";
|
|
17
|
-
// ── semverCompare ─────────────────────────────────────────────────────────────
|
|
18
|
-
/**
|
|
19
|
-
* Compare two version strings using semver integer-component comparison.
|
|
20
|
-
* Returns: negative if a < b, 0 if a === b, positive if a > b.
|
|
21
|
-
*
|
|
22
|
-
* Unlike string comparison, this correctly handles 0.9.x vs 0.10.x boundaries.
|
|
23
|
-
* Strips leading "v" prefix (matches parseTriple() behavior in forge-update-command.ts:118).
|
|
24
|
-
* Falls back to localeCompare for invalid/non-semver inputs.
|
|
25
|
-
*/
|
|
26
|
-
export function semverCompare(a, b) {
|
|
27
|
-
const parse = (v) => {
|
|
28
|
-
const cleaned = v.startsWith("v") ? v.slice(1) : v; // Strip "v" prefix (parity with parseTriple())
|
|
29
|
-
const parts = cleaned.split(".");
|
|
30
|
-
if (parts.length !== 3)
|
|
31
|
-
return null;
|
|
32
|
-
const [major, minor, patch] = parts.map(Number);
|
|
33
|
-
if ([major, minor, patch].some((n) => Number.isNaN(n)))
|
|
34
|
-
return null;
|
|
35
|
-
return [major, minor, patch];
|
|
36
|
-
};
|
|
37
|
-
const pa = parse(a);
|
|
38
|
-
const pb = parse(b);
|
|
39
|
-
if (!pa || !pb)
|
|
40
|
-
return a.localeCompare(b); // Fallback for invalid format
|
|
41
|
-
for (let i = 0; i < 3; i++) {
|
|
42
|
-
if (pa[i] !== pb[i])
|
|
43
|
-
return pa[i] - pb[i];
|
|
44
|
-
}
|
|
45
|
-
return 0;
|
|
46
|
-
}
|
|
47
|
-
// ── filterMigrationEntries ────────────────────────────────────────────────────
|
|
48
|
-
/**
|
|
49
|
-
* Filter migrations.json entries using [fromVersion, toVersion) semantics on keys.
|
|
50
|
-
*
|
|
51
|
-
* - fromVersion entry IS included: it represents the transition AWAY from that version.
|
|
52
|
-
* - toVersion entry is EXCLUDED: it would be a further transition past the target.
|
|
53
|
-
* - Results are sorted ascending by semver (oldest first).
|
|
54
|
-
*
|
|
55
|
-
* No first-run special case — this same filter applies for both first-run
|
|
56
|
-
* (empty ledger) and subsequent runs. The idempotency ledger handles re-run protection.
|
|
57
|
-
*/
|
|
58
|
-
export function filterMigrationEntries(migrations, fromVersion, toVersion) {
|
|
59
|
-
return Object.entries(migrations)
|
|
60
|
-
.filter(([key]) => {
|
|
61
|
-
return semverCompare(key, fromVersion) >= 0 && semverCompare(key, toVersion) < 0;
|
|
62
|
-
})
|
|
63
|
-
.map(([key, entry]) => ({ key, entry }))
|
|
64
|
-
.sort((a, b) => semverCompare(a.key, b.key));
|
|
65
|
-
}
|
|
66
|
-
// ── resolveCategory ────────────────────────────────────────────────────────────
|
|
67
|
-
/**
|
|
68
|
-
* Resolve a migration category string to one or more WriteDescriptors.
|
|
69
|
-
* Pure function — does not write files; appends to the provided writes array.
|
|
70
|
-
*
|
|
71
|
-
* ENOENT trap rule: if source doesn't exist, skip silently (never throw on ENOENT).
|
|
72
|
-
* Non-ENOENT IO errors propagate.
|
|
73
|
-
*
|
|
74
|
-
* Path-traversal defense: all output paths are validated against
|
|
75
|
-
* path.join(projectRoot, '.forge') before being added to writes.
|
|
76
|
-
*/
|
|
77
|
-
export function resolveCategory(category, bundleRoot, projectRoot, writes) {
|
|
78
|
-
const forgeDir = path.join(projectRoot, ".forge");
|
|
79
|
-
const basePack = path.join(bundleRoot, ".base-pack");
|
|
80
|
-
const schemas = path.join(bundleRoot, ".schemas");
|
|
81
|
-
function safeDest(rel) {
|
|
82
|
-
const resolved = path.join(forgeDir, rel);
|
|
83
|
-
const safePrefix = forgeDir + path.sep;
|
|
84
|
-
if (!resolved.startsWith(safePrefix)) {
|
|
85
|
-
throw new Error(`Path traversal attempt: resolved output path '${resolved}' is outside .forge/`);
|
|
86
|
-
}
|
|
87
|
-
return resolved;
|
|
88
|
-
}
|
|
89
|
-
function tryAdd(src, dest) {
|
|
90
|
-
// isFile() returns false on ENOENT and any other stat error — intentional,
|
|
91
|
-
// since the migration engine must not crash on missing optional sources.
|
|
92
|
-
if (isFile(src)) {
|
|
93
|
-
writes.push({ src, dest });
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
// ── Schema categories ───────────────────────────────────────────────────
|
|
97
|
-
if (category === "schemas") {
|
|
98
|
-
// Bare schemas — copy all *.schema.json from bundle/.schemas/ recursively,
|
|
99
|
-
// preserving subdirectory structure under the destination .forge/schemas/.
|
|
100
|
-
// (FORGE-S25-T12: enables _defs/ subtree shipping for $ref'd shared schemas.)
|
|
101
|
-
function walk(dir) {
|
|
102
|
-
let entries;
|
|
103
|
-
try {
|
|
104
|
-
entries = fs.readdirSync(dir, { withFileTypes: true });
|
|
105
|
-
}
|
|
106
|
-
catch (err) {
|
|
107
|
-
if (err.code === "ENOENT")
|
|
108
|
-
return;
|
|
109
|
-
throw err;
|
|
110
|
-
}
|
|
111
|
-
for (const entry of entries) {
|
|
112
|
-
const fullSrc = path.join(dir, entry.name);
|
|
113
|
-
if (entry.isDirectory()) {
|
|
114
|
-
walk(fullSrc);
|
|
115
|
-
}
|
|
116
|
-
else if (entry.isFile() && entry.name.endsWith(".schema.json")) {
|
|
117
|
-
const rel = path.relative(schemas, fullSrc);
|
|
118
|
-
writes.push({
|
|
119
|
-
src: fullSrc,
|
|
120
|
-
dest: safeDest(path.join("schemas", rel)),
|
|
121
|
-
});
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
walk(schemas);
|
|
126
|
-
return;
|
|
127
|
-
}
|
|
128
|
-
if (category.startsWith("schemas:")) {
|
|
129
|
-
const name = category.slice("schemas:".length);
|
|
130
|
-
// Path-traversal defense on the name itself
|
|
131
|
-
if (name.includes("..") || name.includes("/") || name.includes("\\")) {
|
|
132
|
-
// Validate safe destination will catch it — but throw explicitly for clarity
|
|
133
|
-
const dest = path.join(forgeDir, "schemas", `${name}.schema.json`);
|
|
134
|
-
const safePrefix = forgeDir + path.sep;
|
|
135
|
-
if (!dest.startsWith(safePrefix)) {
|
|
136
|
-
throw new Error(`Path traversal attempt: schemas category '${category}'`);
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
// Special case: structure-manifest (non-.schema.json file)
|
|
140
|
-
if (name === "structure-manifest") {
|
|
141
|
-
// Probe .schema.json first, fall back to .json
|
|
142
|
-
const srcSchema = path.join(schemas, `${name}.schema.json`);
|
|
143
|
-
const srcJson = path.join(schemas, `${name}.json`);
|
|
144
|
-
const dest = safeDest(path.join("schemas", `${name}.json`));
|
|
145
|
-
if (fs.existsSync(srcSchema)) {
|
|
146
|
-
writes.push({ src: srcSchema, dest });
|
|
147
|
-
}
|
|
148
|
-
else {
|
|
149
|
-
tryAdd(srcJson, dest);
|
|
150
|
-
}
|
|
151
|
-
return;
|
|
152
|
-
}
|
|
153
|
-
// Standard schema: <name>.schema.json
|
|
154
|
-
tryAdd(path.join(schemas, `${name}.schema.json`), safeDest(path.join("schemas", `${name}.schema.json`)));
|
|
155
|
-
return;
|
|
156
|
-
}
|
|
157
|
-
// ── hooks:* short-circuit ───────────────────────────────────────────────
|
|
158
|
-
if (category === "hooks" || category.startsWith("hooks:")) {
|
|
159
|
-
// No source directory in bundle; short-circuit before any fs call
|
|
160
|
-
return;
|
|
161
|
-
}
|
|
162
|
-
// ── tools:* short-circuit (excluding tools:lib:*) ──────────────────────
|
|
163
|
-
if (category === "tools" || (category.startsWith("tools:") && !category.startsWith("tools:lib"))) {
|
|
164
|
-
// FORGE-S29-T05: copy all .cjs and .js files from bundle tools/ to .forge/tools/.
|
|
165
|
-
// The tools/ directory is at bundleRoot/tools/ (same level as .schemas/, .base-pack/).
|
|
166
|
-
const toolsSrc = path.join(bundleRoot, "tools");
|
|
167
|
-
let entries;
|
|
168
|
-
try {
|
|
169
|
-
entries = fs.readdirSync(toolsSrc, { withFileTypes: true });
|
|
170
|
-
}
|
|
171
|
-
catch (err) {
|
|
172
|
-
if (err.code === "ENOENT")
|
|
173
|
-
return;
|
|
174
|
-
throw err;
|
|
175
|
-
}
|
|
176
|
-
for (const entry of entries) {
|
|
177
|
-
if (!entry.isFile())
|
|
178
|
-
continue;
|
|
179
|
-
if (!entry.name.endsWith(".cjs") && !entry.name.endsWith(".js"))
|
|
180
|
-
continue;
|
|
181
|
-
writes.push({
|
|
182
|
-
src: path.join(toolsSrc, entry.name),
|
|
183
|
-
dest: safeDest(path.join("tools", entry.name)),
|
|
184
|
-
});
|
|
185
|
-
}
|
|
186
|
-
return;
|
|
187
|
-
}
|
|
188
|
-
// ── tools:lib/<name> and tools:lib:<name> ──────────────────────────────
|
|
189
|
-
if (category.startsWith("tools:lib")) {
|
|
190
|
-
const rest = category.slice("tools:lib".length);
|
|
191
|
-
// Normalize separator: tools:lib/forge-root or tools:lib:validate → name
|
|
192
|
-
const name = rest.startsWith("/") ? rest.slice(1) : rest.startsWith(":") ? rest.slice(1) : rest;
|
|
193
|
-
const libSrc = path.join(bundleRoot, "tools", "lib");
|
|
194
|
-
// FORGE-S29-T05: copy lib files to .forge/tools/lib/ (previously wrote a
|
|
195
|
-
// marker stub to .forge/schemas/; now writes the real file to .forge/tools/lib/).
|
|
196
|
-
// Probe .cjs first, then .js (matching LIB_ALLOWLIST entry patterns).
|
|
197
|
-
// ENOENT on both: graceful skip (no throw).
|
|
198
|
-
const srcCjs = path.join(libSrc, `${name}.cjs`);
|
|
199
|
-
const srcJs = path.join(libSrc, `${name}.js`);
|
|
200
|
-
const resolvedSrc = fs.existsSync(srcCjs) ? srcCjs : fs.existsSync(srcJs) ? srcJs : null;
|
|
201
|
-
if (resolvedSrc) {
|
|
202
|
-
writes.push({
|
|
203
|
-
src: resolvedSrc,
|
|
204
|
-
dest: safeDest(path.join("tools", "lib", `${name}${resolvedSrc.endsWith(".cjs") ? ".cjs" : ".js"}`)),
|
|
205
|
-
});
|
|
206
|
-
}
|
|
207
|
-
// ENOENT on both: graceful skip
|
|
208
|
-
return;
|
|
209
|
-
}
|
|
210
|
-
// ── fragments:* and events:* (convention aliases) ──────────────────────
|
|
211
|
-
if (category.startsWith("fragments:") || category.startsWith("events:")) {
|
|
212
|
-
const prefix = category.startsWith("fragments:") ? "fragments:" : "events:";
|
|
213
|
-
const name = category.slice(prefix.length);
|
|
214
|
-
tryAdd(path.join(basePack, "workflows", "_fragments", `${name}.md`), safeDest(path.join("workflows", "_fragments", `${name}.md`)));
|
|
215
|
-
return;
|
|
216
|
-
}
|
|
217
|
-
// ── workflows:_fragments (bare-directory token) ─────────────────────────
|
|
218
|
-
if (category === "workflows:_fragments") {
|
|
219
|
-
const fragDir = path.join(basePack, "workflows", "_fragments");
|
|
220
|
-
try {
|
|
221
|
-
const entries = fs.readdirSync(fragDir);
|
|
222
|
-
for (const entry of entries) {
|
|
223
|
-
// Nesting guard: do NOT recurse into a subdirectory named _fragments/
|
|
224
|
-
if (entry === "_fragments")
|
|
225
|
-
continue;
|
|
226
|
-
const fullSrc = path.join(fragDir, entry);
|
|
227
|
-
// isFile() returns false for dirs and any stat error — skip silently.
|
|
228
|
-
if (isFile(fullSrc)) {
|
|
229
|
-
writes.push({
|
|
230
|
-
src: fullSrc,
|
|
231
|
-
dest: safeDest(path.join("workflows", "_fragments", entry)),
|
|
232
|
-
});
|
|
233
|
-
}
|
|
234
|
-
}
|
|
235
|
-
}
|
|
236
|
-
catch (err) {
|
|
237
|
-
if (err.code !== "ENOENT")
|
|
238
|
-
throw err;
|
|
239
|
-
}
|
|
240
|
-
return;
|
|
241
|
-
}
|
|
242
|
-
// ── workflows:_fragments_<name> (underscore compound) ──────────────────
|
|
243
|
-
if (category.startsWith("workflows:_fragments_")) {
|
|
244
|
-
const name = category.slice("workflows:_fragments_".length);
|
|
245
|
-
tryAdd(path.join(basePack, "workflows", "_fragments", `${name}.md`), safeDest(path.join("workflows", "_fragments", `${name}.md`)));
|
|
246
|
-
return;
|
|
247
|
-
}
|
|
248
|
-
// ── Base-pack categories ────────────────────────────────────────────────
|
|
249
|
-
const VALID_BASE_PACK_TYPES = ["personas", "workflows", "skills", "templates", "commands"];
|
|
250
|
-
const colonIdx = category.indexOf(":");
|
|
251
|
-
const typeStr = colonIdx >= 0 ? category.slice(0, colonIdx) : category;
|
|
252
|
-
const subTarget = colonIdx >= 0 ? category.slice(colonIdx + 1) : null;
|
|
253
|
-
if (!VALID_BASE_PACK_TYPES.includes(typeStr)) {
|
|
254
|
-
// Unknown category — log at debug level and skip
|
|
255
|
-
return;
|
|
256
|
-
}
|
|
257
|
-
const type = typeStr;
|
|
258
|
-
if (subTarget === null) {
|
|
259
|
-
// Bare category — walk the entire subdirectory
|
|
260
|
-
const srcDir = path.join(basePack, type);
|
|
261
|
-
try {
|
|
262
|
-
const files = fs.readdirSync(srcDir).filter((f) => f.endsWith(".md"));
|
|
263
|
-
for (const f of files) {
|
|
264
|
-
const dest = type === "skills"
|
|
265
|
-
? safeDest(path.join(type, f)) // skills files already have -skills.md suffix
|
|
266
|
-
: type === "commands"
|
|
267
|
-
? safeDest(path.join("commands", "forge", f))
|
|
268
|
-
: safeDest(path.join(type, f));
|
|
269
|
-
tryAdd(path.join(srcDir, f), dest);
|
|
270
|
-
}
|
|
271
|
-
}
|
|
272
|
-
catch (err) {
|
|
273
|
-
if (err.code !== "ENOENT")
|
|
274
|
-
throw err;
|
|
275
|
-
}
|
|
276
|
-
return;
|
|
277
|
-
}
|
|
278
|
-
// Special case: workflows:base-pack-store-cli-form — explicit no-op
|
|
279
|
-
if (type === "workflows" && subTarget === "base-pack-store-cli-form") {
|
|
280
|
-
// Sub-target doesn't exist in base-pack; debug-logged no-op
|
|
281
|
-
return;
|
|
282
|
-
}
|
|
283
|
-
// Sub-target category: <type>:<name>
|
|
284
|
-
const filename = type === "skills"
|
|
285
|
-
? `${subTarget}-skills.md` // skills:<name> → <name>-skills.md
|
|
286
|
-
: `${subTarget}.md`;
|
|
287
|
-
const dest = type === "commands" ? safeDest(path.join("commands", "forge", filename)) : safeDest(path.join(type, filename));
|
|
288
|
-
tryAdd(path.join(basePack, type, filename), dest);
|
|
289
|
-
}
|
|
290
|
-
function executeFileOps(fileOps, projectRoot, dryRun) {
|
|
291
|
-
const forgeDir = path.join(projectRoot, ".forge");
|
|
292
|
-
const safePrefix = forgeDir + path.sep;
|
|
293
|
-
const categories = [];
|
|
294
|
-
// C-19: accumulate ENOENT failures for copy/substitute-placeholder ops
|
|
295
|
-
const failed = [];
|
|
296
|
-
for (const op of fileOps) {
|
|
297
|
-
const dest = path.resolve(projectRoot, op.path);
|
|
298
|
-
if (!dest.startsWith(safePrefix) && !dest.startsWith(forgeDir)) {
|
|
299
|
-
throw new Error(`Path traversal attempt in fileOps: '${op.path}'`);
|
|
300
|
-
}
|
|
301
|
-
const categoryLabel = `fileOps:${op.op}`;
|
|
302
|
-
categories.push(categoryLabel);
|
|
303
|
-
if (dryRun)
|
|
304
|
-
continue;
|
|
305
|
-
switch (op.op) {
|
|
306
|
-
case "mkdir":
|
|
307
|
-
fs.mkdirSync(dest, { recursive: true });
|
|
308
|
-
break;
|
|
309
|
-
case "copy":
|
|
310
|
-
if (op.src) {
|
|
311
|
-
fs.mkdirSync(path.dirname(dest), { recursive: true });
|
|
312
|
-
try {
|
|
313
|
-
fs.copyFileSync(op.src, dest);
|
|
314
|
-
}
|
|
315
|
-
catch (err) {
|
|
316
|
-
if (err.code !== "ENOENT")
|
|
317
|
-
throw err;
|
|
318
|
-
// C-19: src absent — record failure so caller can surface it
|
|
319
|
-
failed.push({ category: categoryLabel, reason: `ENOENT: ${op.src}` });
|
|
320
|
-
}
|
|
321
|
-
}
|
|
322
|
-
break;
|
|
323
|
-
case "delete":
|
|
324
|
-
try {
|
|
325
|
-
fs.rmSync(dest, { force: true });
|
|
326
|
-
}
|
|
327
|
-
catch (err) {
|
|
328
|
-
if (err.code !== "ENOENT")
|
|
329
|
-
throw err;
|
|
330
|
-
}
|
|
331
|
-
break;
|
|
332
|
-
case "substitute-placeholder":
|
|
333
|
-
// Forward-compat: just copy for now (no ctx available in engine)
|
|
334
|
-
if (op.src) {
|
|
335
|
-
fs.mkdirSync(path.dirname(dest), { recursive: true });
|
|
336
|
-
try {
|
|
337
|
-
fs.copyFileSync(op.src, dest);
|
|
338
|
-
}
|
|
339
|
-
catch (err) {
|
|
340
|
-
if (err.code !== "ENOENT")
|
|
341
|
-
throw err;
|
|
342
|
-
// C-19: src absent — record failure so caller can surface it
|
|
343
|
-
failed.push({ category: categoryLabel, reason: `ENOENT: ${op.src}` });
|
|
344
|
-
}
|
|
345
|
-
}
|
|
346
|
-
break;
|
|
347
|
-
}
|
|
348
|
-
}
|
|
349
|
-
return { categories, failed };
|
|
350
|
-
}
|
|
351
|
-
// ── Ledger helpers ────────────────────────────────────────────────────────────
|
|
352
|
-
function readLedger(projectRoot) {
|
|
353
|
-
const ledgerPath = path.join(projectRoot, ".forge", "applied-migrations.json");
|
|
354
|
-
try {
|
|
355
|
-
const raw = fs.readFileSync(ledgerPath, "utf8");
|
|
356
|
-
return JSON.parse(raw);
|
|
357
|
-
}
|
|
358
|
-
catch {
|
|
359
|
-
return { schemaVersion: 1, appliedVersions: [] };
|
|
360
|
-
}
|
|
361
|
-
}
|
|
362
|
-
function writeLedger(projectRoot, ledger) {
|
|
363
|
-
const ledgerPath = path.join(projectRoot, ".forge", "applied-migrations.json");
|
|
364
|
-
fs.writeFileSync(ledgerPath, JSON.stringify(ledger, null, 2), "utf8");
|
|
365
|
-
}
|
|
366
|
-
// ── runMigrations ─────────────────────────────────────────────────────────────
|
|
367
|
-
/**
|
|
368
|
-
* Execute all migration entries between [fromVersion, toVersion) from the
|
|
369
|
-
* bundled migrations.json against the project's .forge/ directory.
|
|
370
|
-
*
|
|
371
|
-
* Design constraints:
|
|
372
|
-
* - No UI context (no ctx.ui calls).
|
|
373
|
-
* - No event emission (caller is responsible).
|
|
374
|
-
* - Pure deterministic engine: reads from bundleRoot, writes to projectRoot/.forge/.
|
|
375
|
-
* - Idempotent: already-applied versions (from .forge/applied-migrations.json) are skipped.
|
|
376
|
-
*
|
|
377
|
-
* Forward-compat: entries with non-empty fileOps[] use fileOps; otherwise regenerate.
|
|
378
|
-
* NOTE: 0 of 158 current entries use fileOps — the executor is dead code on day 1.
|
|
379
|
-
* Once a real fileOps entry lands, an integration test against that entry MUST be added.
|
|
380
|
-
*/
|
|
381
|
-
export async function runMigrations(opts) {
|
|
382
|
-
const { bundleRoot, projectRoot, fromVersion, toVersion, dryRun = false } = opts;
|
|
383
|
-
const result = {
|
|
384
|
-
applied: [],
|
|
385
|
-
skippedBreaking: [],
|
|
386
|
-
manualSteps: [],
|
|
387
|
-
dryRun,
|
|
388
|
-
schemasRefreshed: [],
|
|
389
|
-
forgeRootUpdated: false,
|
|
390
|
-
failedCategories: [], // C-19: populated when ops fail with ENOENT
|
|
391
|
-
};
|
|
392
|
-
// Read migrations.json from bundle
|
|
393
|
-
const migrationsPath = path.join(bundleRoot, ".schemas", "migrations.json");
|
|
394
|
-
let migrations;
|
|
395
|
-
try {
|
|
396
|
-
const raw = fs.readFileSync(migrationsPath, "utf8");
|
|
397
|
-
migrations = JSON.parse(raw);
|
|
398
|
-
}
|
|
399
|
-
catch (err) {
|
|
400
|
-
if (err.code === "ENOENT") {
|
|
401
|
-
// migrations.json not in bundle — no migrations to apply
|
|
402
|
-
return result;
|
|
403
|
-
}
|
|
404
|
-
throw err;
|
|
405
|
-
}
|
|
406
|
-
// Filter entries using [from, to) semantics
|
|
407
|
-
const entries = filterMigrationEntries(migrations, fromVersion, toVersion);
|
|
408
|
-
if (entries.length === 0) {
|
|
409
|
-
// No-op: empty range (from == to) or no entries in range
|
|
410
|
-
return result;
|
|
411
|
-
}
|
|
412
|
-
// Read idempotency ledger
|
|
413
|
-
const ledger = readLedger(projectRoot);
|
|
414
|
-
// Build substitution map ONCE using config from .forge/config.json
|
|
415
|
-
let buildSubstitutionMap = null;
|
|
416
|
-
let substituteFile = null;
|
|
417
|
-
try {
|
|
418
|
-
const substPath = path.join(bundleRoot, "tools", "substitute-placeholders.cjs");
|
|
419
|
-
const _require = createRequire(import.meta.url);
|
|
420
|
-
const substModule = _require(substPath);
|
|
421
|
-
buildSubstitutionMap = substModule.buildSubstitutionMap;
|
|
422
|
-
substituteFile = substModule.substituteFile;
|
|
423
|
-
}
|
|
424
|
-
catch {
|
|
425
|
-
// substitute-placeholders not available (testing or minimal bundle)
|
|
426
|
-
// Fall back to identity substitution
|
|
427
|
-
}
|
|
428
|
-
let substitutionMap = null;
|
|
429
|
-
if (buildSubstitutionMap) {
|
|
430
|
-
try {
|
|
431
|
-
const configPath = path.join(projectRoot, ".forge", "config.json");
|
|
432
|
-
const config = JSON.parse(fs.readFileSync(configPath, "utf8"));
|
|
433
|
-
substitutionMap = buildSubstitutionMap(config);
|
|
434
|
-
}
|
|
435
|
-
catch {
|
|
436
|
-
// Config unreadable — proceed without substitution
|
|
437
|
-
}
|
|
438
|
-
}
|
|
439
|
-
// Process each entry in ascending semver order
|
|
440
|
-
for (const { key, entry } of entries) {
|
|
441
|
-
// Skip if already applied (idempotency)
|
|
442
|
-
if (ledger.appliedVersions.includes(key)) {
|
|
443
|
-
continue;
|
|
444
|
-
}
|
|
445
|
-
// Skip breaking entries
|
|
446
|
-
if (entry.breaking) {
|
|
447
|
-
result.skippedBreaking.push({
|
|
448
|
-
fromVersion: key,
|
|
449
|
-
toVersion: entry.version,
|
|
450
|
-
reason: `breaking: true — manual intervention required. Notes: ${entry.notes}`,
|
|
451
|
-
});
|
|
452
|
-
continue;
|
|
453
|
-
}
|
|
454
|
-
// Collect manual steps
|
|
455
|
-
if (entry.manual && entry.manual.length > 0) {
|
|
456
|
-
result.manualSteps.push({
|
|
457
|
-
fromVersion: key,
|
|
458
|
-
toVersion: entry.version,
|
|
459
|
-
steps: entry.manual,
|
|
460
|
-
});
|
|
461
|
-
}
|
|
462
|
-
let appliedCategories = [];
|
|
463
|
-
// fileOps takes priority over regenerate when non-empty
|
|
464
|
-
// NOTE: 0 of 158 current entries use fileOps (dead code on day 1).
|
|
465
|
-
// When a real fileOps entry lands, add an integration test against it.
|
|
466
|
-
if (entry.fileOps && entry.fileOps.length > 0) {
|
|
467
|
-
// C-19: consume FileOpsResult to capture ENOENT failures
|
|
468
|
-
const fileOpsResult = executeFileOps(entry.fileOps, projectRoot, dryRun);
|
|
469
|
-
appliedCategories = fileOpsResult.categories;
|
|
470
|
-
for (const f of fileOpsResult.failed) {
|
|
471
|
-
result.failedCategories.push({ version: key, category: f.category, reason: f.reason });
|
|
472
|
-
}
|
|
473
|
-
}
|
|
474
|
-
else if (entry.regenerate && entry.regenerate.length > 0) {
|
|
475
|
-
// Resolve categories to write descriptors
|
|
476
|
-
const writes = [];
|
|
477
|
-
for (const category of entry.regenerate) {
|
|
478
|
-
resolveCategory(category, bundleRoot, projectRoot, writes);
|
|
479
|
-
}
|
|
480
|
-
// Execute writes (unless dry-run)
|
|
481
|
-
if (!dryRun) {
|
|
482
|
-
for (const { src, dest } of writes) {
|
|
483
|
-
try {
|
|
484
|
-
fs.mkdirSync(path.dirname(dest), { recursive: true });
|
|
485
|
-
// Apply placeholder substitution for base-pack files
|
|
486
|
-
if (substituteFile &&
|
|
487
|
-
substitutionMap &&
|
|
488
|
-
src.includes(path.join(".base-pack")) &&
|
|
489
|
-
dest.endsWith(".md")) {
|
|
490
|
-
const content = fs.readFileSync(src, "utf8");
|
|
491
|
-
const substituted = substituteFile(content, substitutionMap);
|
|
492
|
-
fs.writeFileSync(dest, substituted, "utf8");
|
|
493
|
-
}
|
|
494
|
-
else {
|
|
495
|
-
fs.copyFileSync(src, dest);
|
|
496
|
-
}
|
|
497
|
-
}
|
|
498
|
-
catch (err) {
|
|
499
|
-
if (err.code !== "ENOENT")
|
|
500
|
-
throw err;
|
|
501
|
-
// C-19: ENOENT on src — skip silently but record the failure so
|
|
502
|
-
// the caller (forge-update-command.ts) can surface a warning.
|
|
503
|
-
result.failedCategories.push({
|
|
504
|
-
version: key,
|
|
505
|
-
category: src,
|
|
506
|
-
reason: `ENOENT: ${src}`,
|
|
507
|
-
});
|
|
508
|
-
}
|
|
509
|
-
}
|
|
510
|
-
}
|
|
511
|
-
appliedCategories = entry.regenerate;
|
|
512
|
-
}
|
|
513
|
-
result.applied.push({
|
|
514
|
-
fromVersion: key,
|
|
515
|
-
toVersion: entry.version,
|
|
516
|
-
categories: appliedCategories,
|
|
517
|
-
});
|
|
518
|
-
// Update ledger after successful application
|
|
519
|
-
if (!dryRun) {
|
|
520
|
-
ledger.appliedVersions.push(key);
|
|
521
|
-
}
|
|
522
|
-
}
|
|
523
|
-
// Write updated ledger
|
|
524
|
-
if (!dryRun && result.applied.length > 0) {
|
|
525
|
-
writeLedger(projectRoot, ledger);
|
|
526
|
-
}
|
|
527
|
-
// Always-on schema refresh post-pass: copy all *.schema.json to .forge/schemas/
|
|
528
|
-
// Runs regardless of whether any entry had a schemas category.
|
|
529
|
-
// This is an always-overwrite safety net (schemas are not user-edited).
|
|
530
|
-
const schemasDir = path.join(bundleRoot, ".schemas");
|
|
531
|
-
const forgeSchemasDir = path.join(projectRoot, ".forge", "schemas");
|
|
532
|
-
try {
|
|
533
|
-
const schemaFiles = fs.readdirSync(schemasDir).filter((f) => f.endsWith(".schema.json"));
|
|
534
|
-
if (!dryRun) {
|
|
535
|
-
fs.mkdirSync(forgeSchemasDir, { recursive: true });
|
|
536
|
-
for (const f of schemaFiles) {
|
|
537
|
-
try {
|
|
538
|
-
fs.copyFileSync(path.join(schemasDir, f), path.join(forgeSchemasDir, f));
|
|
539
|
-
result.schemasRefreshed.push(f);
|
|
540
|
-
}
|
|
541
|
-
catch (err) {
|
|
542
|
-
if (err.code !== "ENOENT")
|
|
543
|
-
throw err;
|
|
544
|
-
}
|
|
545
|
-
}
|
|
546
|
-
}
|
|
547
|
-
else {
|
|
548
|
-
result.schemasRefreshed = schemaFiles;
|
|
549
|
-
}
|
|
550
|
-
}
|
|
551
|
-
catch (err) {
|
|
552
|
-
if (err.code !== "ENOENT")
|
|
553
|
-
throw err;
|
|
554
|
-
}
|
|
555
|
-
return result;
|
|
556
|
-
}
|
|
557
|
-
// ── Test helpers (exported for test access) ───────────────────────────────────
|
|
558
|
-
export const __test__ = {
|
|
559
|
-
semverCompare,
|
|
560
|
-
filterMigrationEntries,
|
|
561
|
-
resolveCategory,
|
|
562
|
-
};
|
|
563
|
-
//# sourceMappingURL=migration-engine.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"migration-engine.js","sourceRoot":"","sources":["../../../src/extensions/forgecli/migration-engine.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
import { type Static, Type } from "typebox";
|
|
2
|
-
declare const ProviderSchema: Type.TObject<{
|
|
3
|
-
id: Type.TString;
|
|
4
|
-
label: Type.TString;
|
|
5
|
-
enabled: Type.TBoolean;
|
|
6
|
-
deferredTo: Type.TOptional<Type.TString>;
|
|
7
|
-
modelGlobs: Type.TArray<Type.TString>;
|
|
8
|
-
credentialEnvAny: Type.TArray<Type.TString>;
|
|
9
|
-
}>;
|
|
10
|
-
declare const RegistrySchema: Type.TObject<{
|
|
11
|
-
version: Type.TLiteral<1>;
|
|
12
|
-
providers: Type.TArray<Type.TObject<{
|
|
13
|
-
id: Type.TString;
|
|
14
|
-
label: Type.TString;
|
|
15
|
-
enabled: Type.TBoolean;
|
|
16
|
-
deferredTo: Type.TOptional<Type.TString>;
|
|
17
|
-
modelGlobs: Type.TArray<Type.TString>;
|
|
18
|
-
credentialEnvAny: Type.TArray<Type.TString>;
|
|
19
|
-
}>>;
|
|
20
|
-
}>;
|
|
21
|
-
export type CuratedRegistry = Static<typeof RegistrySchema>;
|
|
22
|
-
export type CuratedProvider = Static<typeof ProviderSchema>;
|
|
23
|
-
export interface LoadOptions {
|
|
24
|
-
registryPath?: string;
|
|
25
|
-
env?: NodeJS.ProcessEnv;
|
|
26
|
-
}
|
|
27
|
-
export interface SeedOutcome {
|
|
28
|
-
seeded: boolean;
|
|
29
|
-
path: string;
|
|
30
|
-
}
|
|
31
|
-
export interface SeedOptions {
|
|
32
|
-
projectRoot: string;
|
|
33
|
-
registry: CuratedRegistry;
|
|
34
|
-
now?: () => number;
|
|
35
|
-
}
|
|
36
|
-
declare function resolveRegistryPath(opts: LoadOptions): string;
|
|
37
|
-
export declare function loadRegistry(opts?: LoadOptions): CuratedRegistry;
|
|
38
|
-
declare function seededModelGlobs(registry: CuratedRegistry): string[];
|
|
39
|
-
declare function defaultGlob(registry: CuratedRegistry): string;
|
|
40
|
-
declare function seedFilePath(projectRoot: string): string;
|
|
41
|
-
export declare function seedEnabledModels(opts: SeedOptions): Promise<SeedOutcome>;
|
|
42
|
-
export declare function detectMissingCredentials(registry: CuratedRegistry, env?: NodeJS.ProcessEnv): string | null;
|
|
43
|
-
export declare const __test__: {
|
|
44
|
-
BUNDLED_PATH: string;
|
|
45
|
-
resolveRegistryPath: typeof resolveRegistryPath;
|
|
46
|
-
seedFilePath: typeof seedFilePath;
|
|
47
|
-
seededModelGlobs: typeof seededModelGlobs;
|
|
48
|
-
defaultGlob: typeof defaultGlob;
|
|
49
|
-
RegistrySchema: Type.TObject<{
|
|
50
|
-
version: Type.TLiteral<1>;
|
|
51
|
-
providers: Type.TArray<Type.TObject<{
|
|
52
|
-
id: Type.TString;
|
|
53
|
-
label: Type.TString;
|
|
54
|
-
enabled: Type.TBoolean;
|
|
55
|
-
deferredTo: Type.TOptional<Type.TString>;
|
|
56
|
-
modelGlobs: Type.TArray<Type.TString>;
|
|
57
|
-
credentialEnvAny: Type.TArray<Type.TString>;
|
|
58
|
-
}>>;
|
|
59
|
-
}>;
|
|
60
|
-
};
|
|
61
|
-
export {};
|