@namewta/speculo 0.7.6 → 0.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/README.md +5 -6
  2. package/dist/src/cli.js +18 -13
  3. package/dist/src/cli.js.map +1 -1
  4. package/dist/src/config.d.ts +20 -0
  5. package/dist/src/config.js +94 -0
  6. package/dist/src/config.js.map +1 -0
  7. package/dist/src/index.d.ts +3 -2
  8. package/dist/src/index.js +56 -27
  9. package/dist/src/index.js.map +1 -1
  10. package/dist/src/manifest.d.ts +20 -0
  11. package/dist/src/manifest.js +57 -0
  12. package/dist/src/manifest.js.map +1 -0
  13. package/dist/src/refresh.d.ts +30 -0
  14. package/dist/src/refresh.js +465 -0
  15. package/dist/src/refresh.js.map +1 -0
  16. package/dist/src/structured.d.ts +12 -0
  17. package/dist/src/structured.js +236 -0
  18. package/dist/src/structured.js.map +1 -0
  19. package/package.json +2 -2
  20. package/template/.speculo/README.md +12 -11
  21. package/template/.speculo/refresh-contract.json +30 -0
  22. package/template/canonical/canonical-specdev-engineering-cognitive-mentor.md +1 -0
  23. package/template/canonical/canonical-specdev-goal-plan.md +1 -0
  24. package/template/canonical/canonical-specdev-grill-with-docs.md +1 -0
  25. package/template/canonical/canonical-specdev-spec.md +1 -0
  26. package/template/canonical/canonical-specdev-tickets.md +1 -0
  27. package/template/skills/github-npm-ops/references/preflight-checklist.md +1 -1
  28. package/template/workflows/person/runtime-contract.json +9 -0
  29. package/template/workflows/specdev/E-eli5/E-eli5.md +35 -0
  30. package/template/workflows/specdev/I-init-setup/I-init-setup.md +1 -1
  31. package/template/workflows/specdev/INDEX.md +15 -12
  32. package/template/workflows/specdev/common/rules/artifact-contract.md +1 -0
  33. package/template/workflows/specdev/common/tools/README.md +1 -1
  34. package/template/workflows/specdev/common/tools/validate-specdev.mjs +28 -0
  35. package/template/workflows/specdev/runtime-contract.json +26 -0
  36. package/dist/src/migrations.d.ts +0 -23
  37. package/dist/src/migrations.js +0 -1202
  38. package/dist/src/migrations.js.map +0 -1
  39. package/template/commands/migrate-runtime-state.md +0 -43
  40. package/template/skills/migrate-runtime-state/SKILL.md +0 -93
  41. package/template/skills/migrate-runtime-state/references/migration-contract.md +0 -64
  42. package/template/skills/migrate-runtime-state/scripts/migrate-runtime-state.mjs +0 -916
package/README.md CHANGED
@@ -29,16 +29,16 @@ Requires: Node.js ≥ 22.22.3
29
29
 
30
30
  | Command | Description |
31
31
  |---|---|
32
- | `speculo` / `speculo init [target]` | Initialize or refresh Speculo. Static commands, skills, and selected workflow packages come from the current template; compatible v0.7+ project configuration and complete workflow/command runtime state are migrated. Every refresh retains the previous configuration and runtime state in `speculo/.speculo/back/`. Incompatible or damaged state produces a clean active installation plus a pending migration marker and exits with code `2`. Projects with SpecDev installed also get idempotent `specdev-worktree/` and backup entries in the project-root `.gitignore`. |
32
+ | `speculo` / `speculo init [target]` | Initialize or refresh Speculo. Managed commands, skills, metadata, and selected workflow packages are replaced from the current template. Opaque runtime data is preserved byte-for-byte, structured state uses explicit migrators, and persistent configuration is reconciled against stored baselines. Conflicts stop before replacement with exit code `2`; only destructively changed config or structured files receive a targeted backup. |
33
33
  | `speculo version` | Print the installed version and check npm for the latest release. |
34
34
 
35
- Legacy CLI commands `migrate`, `mirror-skills`, and `update`, plus their flags, remain removed. The CLI still exposes only `init` and `version`. When `init` reports pending migration, run the installed Agent command `migrate-runtime-state`; it inventories the read-only backup, writes a dry-run report, requires explicit confirmation for the complete plan, and applies it through staging with rollback.
35
+ Legacy CLI commands `migrate`, `mirror-skills`, and `update`, plus their flags, remain removed. The CLI exposes only `init` and `version`; refresh behavior is automatic and transactional.
36
36
 
37
37
  ## Installed Runtime Assets
38
38
 
39
39
  After initialization, the target project gains the following AI agent-callable assets:
40
40
 
41
- ### 7 Commands
41
+ ### 6 Commands
42
42
 
43
43
  | Command | Purpose |
44
44
  |---|---|
@@ -46,7 +46,6 @@ After initialization, the target project gains the following AI agent-callable a
46
46
  | `archive-and-consolidate` | Knowledge lifecycle governance: archive stale content, consolidate scattered knowledge, clean up outdated assets |
47
47
  | `git-repository-audit` | Read-only, reproducible audit of one or more local Git repositories |
48
48
  | `handoff` | Persist a compact, resumable context handoff for another agent |
49
- | `migrate-runtime-state` | Reconcile a pending runtime backup and atomically apply an explicitly confirmed migration plan |
50
49
  | `retro` | Retrospective analysis with `gh issue` creation |
51
50
  | `status` | Summary of installed workflows, active changes, and anomalies |
52
51
 
@@ -57,8 +56,8 @@ After initialization, the target project gains the following AI agent-callable a
57
56
  | `archive-and-consolidate` | Archive stale content, consolidate scattered knowledge, and clean up outdated assets |
58
57
  | `docs-sync` | Documentation audit plus incremental or full AGENTS.md / CLAUDE.md handbook synchronization |
59
58
  | `github-npm-ops` | GitHub issue/PR triage and npm operations |
60
- | `migrate-runtime-state` | Validate backups, lock source/target fingerprints, and apply runtime migration plans with rollback |
61
59
  | `optimize-codex-config` | Audit and optimize local Codex configuration, custom Responses providers, permissions, and compaction failures |
60
+ | `source-code-zip` | Create a dependency-free, code-only ZIP for isolated source delivery |
62
61
  | `speculo-retro` | Retrospective analysis |
63
62
  | `engineering-standards-builder` | Interview-driven generator that produces a project-specific TypeScript/JS/React/Node standards skill |
64
63
  | `writing-great-skills` | Authoring guidance for agent skills |
@@ -67,7 +66,7 @@ After initialization, the target project gains the following AI agent-callable a
67
66
 
68
67
  | Workflow | Work Entries | Description |
69
68
  |---|---:|---|
70
- | **specdev** | 14 | Local-first specification-driven development: archive, code review, diagnosis, mentoring, grilling, implementation, setup, goal planning, prototyping, architecture review, specs, tickets, triage, and wayfinding |
69
+ | **specdev** | 15 | Local-first specification-driven development: archive, code review, diagnosis, five-year-old visual explanation, mentoring, grilling, implementation, setup, goal planning, prototyping, architecture review, specs, tickets, triage, and wayfinding |
71
70
  | **person** | 2 | Persona-methodology and rigorous deliberation workflows (Mao Zedong Cognitive OS; Bidirectional Steelman Deliberation) |
72
71
 
73
72
  Every workflow ships an `INDEX.md` as its auto-generated work catalog. Work entries follow `<Letter>-<work_name>/<Letter>-<work_name>.md` naming with progressive-disclosure sub-files, and resolve runtime paths via `<Path>{roots.xxx}/...</Path>` pointers in `workspace.json`.
package/dist/src/cli.js CHANGED
@@ -2,6 +2,7 @@
2
2
  import { dirname, resolve } from "node:path";
3
3
  import { fileURLToPath } from "node:url";
4
4
  import { initSpeculo } from "./index.js";
5
+ import { RefreshBlockedError } from "./refresh.js";
5
6
  import { checkForUpdate, formatVersionBanner } from "./version.js";
6
7
  const REMOVED_COMMANDS = new Set(["migrate", "mirror-skills", "update"]);
7
8
  const REMOVED_OPTIONS = new Set(["--all", "--apply", "--dry-run"]);
@@ -68,23 +69,27 @@ async function main(argv) {
68
69
  }
69
70
  const result = await initSpeculo(targetArg ?? ".", { packageRoot });
70
71
  console.log(result.mode === "init" ? "Speculo initialized in " + result.target : "Speculo refreshed in " + result.target);
71
- for (const asset of result.assets)
72
- console.log(" refreshed " + asset);
73
- if (result.migration.status === "migrated") {
74
- console.log(" migrated runtime state from " + result.migration.sourceVersion);
75
- console.log(" retained backup " + result.migration.backupPath);
76
- }
77
- if (result.migration.status === "pending") {
78
- console.error("Speculo runtime migration is pending.");
79
- for (const blocker of result.migration.blockers) {
80
- console.error(" " + blocker.code + " " + blocker.path + ": " + blocker.message);
81
- }
82
- console.error("Run the migrate-runtime-state command before using Speculo workflows.");
83
- return 2;
72
+ console.log(" replaced " + result.refresh.managedFiles + " managed files");
73
+ console.log(" preserved " + result.refresh.preservedFiles + " runtime files");
74
+ console.log(" reconciled config: " + result.refresh.config.added + " added, " +
75
+ result.refresh.config.updated + " updated, " + result.refresh.config.preserved + " preserved, " +
76
+ result.refresh.config.removed + " removed");
77
+ if (result.refresh.structuredUpgrades > 0)
78
+ console.log(" upgraded " + result.refresh.structuredUpgrades + " structured state files");
79
+ if (result.refresh.backupPath)
80
+ console.log(" retained targeted backup " + result.refresh.backupPath);
81
+ for (const asset of result.assets.filter((asset) => asset.startsWith(".gitignore") || asset.startsWith("AGENTS") || asset.startsWith("CLAUDE"))) {
82
+ console.log(" updated " + asset);
84
83
  }
85
84
  return 0;
86
85
  }
87
86
  catch (error) {
87
+ if (error instanceof RefreshBlockedError) {
88
+ console.error(error.message);
89
+ for (const blocker of error.blockers)
90
+ console.error(" " + blocker.code + " " + blocker.path + ": " + blocker.message);
91
+ return 2;
92
+ }
88
93
  console.error(error instanceof Error ? error.message : String(error));
89
94
  return 1;
90
95
  }
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,mBAAmB,EAAoB,MAAM,cAAc,CAAC;AAErF,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,eAAe,EAAE,QAAQ,CAAC,CAAC,CAAC;AACzE,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC,CAAC;AAEnE,SAAS,KAAK;IACZ,OAAO;QACL,QAAQ;QACR,2BAA2B;QAC3B,mBAAmB;QACnB,EAAE;QACF,WAAW;QACX,wFAAwF;QACxF,sEAAsE;KACvE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED,SAAS,aAAa;IACpB,OAAO,OAAO,CAAC,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC;AACtC,CAAC;AAED,KAAK,UAAU,oBAAoB,CAAC,WAAmB,EAAE,WAAmB;IAC1E,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;IAC5D,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC;IACvC,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,eAAe;IAC5B,IAAI,CAAC,aAAa,EAAE;QAAE,OAAO,IAAI,CAAC;IAClC,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;IACtD,OAAO,OAAO,CAAC,EAAE,OAAO,EAAE,sBAAsB,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;AACrE,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAc;IAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;IACtE,IAAI,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,MAAM,GAAG,kEAAkE,CAAC,CAAC;AAC3G,CAAC;AAED,KAAK,UAAU,IAAI,CAAC,IAAc;IAChC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,QAAQ,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAC7C,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;QACrB,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;IAChC,IAAI,OAAO,IAAI,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7C,OAAO,CAAC,KAAK,CAAC,UAAU,GAAG,OAAO,GAAG,kEAAkE,CAAC,CAAC;QACzG,OAAO,CAAC,CAAC;IACX,CAAC;IAED,IAAI,CAAC;QACH,qBAAqB,CAAC,IAAI,CAAC,CAAC;QAC5B,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;QAC9E,MAAM,WAAW,GAAG,kBAAkB,CAAC;QACvC,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;YACnF,MAAM,oBAAoB,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;YACrD,OAAO,CAAC,CAAC;QACX,CAAC;QAED,MAAM,SAAS,GAAG,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;QACzD,MAAM,KAAK,GAAG,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACrD,IAAI,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,GAAG,KAAK,CAAC,CAAC;QAC5D,IAAI,SAAS,EAAE,UAAU,CAAC,GAAG,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,GAAG,SAAS,CAAC,CAAC;QAEhF,MAAM,oBAAoB,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC;QACrD,IAAI,CAAC,CAAC,MAAM,eAAe,EAAE,CAAC,EAAE,CAAC;YAC/B,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YACpB,OAAO,CAAC,CAAC;QACX,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,SAAS,IAAI,GAAG,EAAE,EAAE,WAAW,EAAE,CAAC,CAAC;QACpE,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,yBAAyB,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,uBAAuB,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC;QAC1H,OAAO,CAAC,GAAG,CAAC,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,YAAY,GAAG,gBAAgB,CAAC,CAAC;QAC5E,OAAO,CAAC,GAAG,CAAC,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC,cAAc,GAAG,gBAAgB,CAAC,CAAC;QAC/E,OAAO,CAAC,GAAG,CACT,uBAAuB,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,GAAG,UAAU;YAClE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,GAAG,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,GAAG,cAAc;YAC/F,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,GAAG,UAAU,CAC3C,CAAC;QACF,IAAI,MAAM,CAAC,OAAO,CAAC,kBAAkB,GAAG,CAAC;YAAE,OAAO,CAAC,GAAG,CAAC,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,kBAAkB,GAAG,yBAAyB,CAAC,CAAC;QACtI,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU;YAAE,OAAO,CAAC,GAAG,CAAC,6BAA6B,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACtG,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;YAChJ,OAAO,CAAC,GAAG,CAAC,YAAY,GAAG,KAAK,CAAC,CAAC;QACpC,CAAC;QACD,OAAO,CAAC,CAAC;IACX,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,mBAAmB,EAAE,CAAC;YACzC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC7B,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,QAAQ;gBAAE,OAAO,CAAC,KAAK,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,GAAG,GAAG,GAAG,OAAO,CAAC,IAAI,GAAG,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;YACvH,OAAO,CAAC,CAAC;QACX,CAAC;QACD,OAAO,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACtE,OAAO,CAAC,CAAC;IACX,CAAC;AACH,CAAC;AAED,OAAO,CAAC,QAAQ,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC"}
@@ -0,0 +1,20 @@
1
+ export type JsonObject = Record<string, unknown>;
2
+ export type ConfigMergeStats = {
3
+ added: number;
4
+ updated: number;
5
+ preserved: number;
6
+ removed: number;
7
+ };
8
+ export type ConfigMergeResult = {
9
+ value: JsonObject;
10
+ stats: ConfigMergeStats;
11
+ removedPaths: string[];
12
+ };
13
+ export type ConfigMergeOptions = {
14
+ baseline?: JsonObject;
15
+ local: JsonObject;
16
+ incoming: JsonObject;
17
+ allowsUnknown: (parentPath: string[], key: string) => boolean;
18
+ };
19
+ export declare function reconcileConfig(options: ConfigMergeOptions): ConfigMergeResult;
20
+ export declare function assertJsonObject(value: unknown, label: string): asserts value is JsonObject;
@@ -0,0 +1,94 @@
1
+ import { isDeepStrictEqual } from "node:util";
2
+ const MISSING = { missing: true };
3
+ function isObject(value) {
4
+ return value !== null && typeof value === "object" && !Array.isArray(value);
5
+ }
6
+ function isMissing(value) {
7
+ return value === MISSING;
8
+ }
9
+ function jsonKind(value) {
10
+ if (value === null)
11
+ return "null";
12
+ if (Array.isArray(value))
13
+ return "array";
14
+ return typeof value === "object" ? "object" : typeof value;
15
+ }
16
+ function assertCompatible(path, local, incoming) {
17
+ const incomingKind = jsonKind(incoming);
18
+ const localKind = jsonKind(local);
19
+ if (incomingKind === "null" || incomingKind === localKind)
20
+ return;
21
+ throw new Error(`configuration value ${path.join(".")} has type ${localKind}; expected ${incomingKind}`);
22
+ }
23
+ export function reconcileConfig(options) {
24
+ const stats = { added: 0, updated: 0, preserved: 0, removed: 0 };
25
+ const removedPaths = [];
26
+ function merge(baseline, local, incoming, path) {
27
+ if (isMissing(incoming)) {
28
+ if (!isMissing(baseline)) {
29
+ if (!isMissing(local)) {
30
+ stats.removed += 1;
31
+ removedPaths.push(path.join("."));
32
+ }
33
+ return MISSING;
34
+ }
35
+ if (isMissing(local))
36
+ return MISSING;
37
+ const key = path.at(-1) ?? "";
38
+ if (options.allowsUnknown(path.slice(0, -1), key)) {
39
+ stats.preserved += 1;
40
+ return local;
41
+ }
42
+ stats.removed += 1;
43
+ removedPaths.push(path.join("."));
44
+ return MISSING;
45
+ }
46
+ if (isMissing(local)) {
47
+ stats.added += 1;
48
+ return incoming;
49
+ }
50
+ if (isMissing(baseline)) {
51
+ assertCompatible(path, local, incoming);
52
+ if (isObject(local) && isObject(incoming)) {
53
+ return mergeObjects(MISSING, local, incoming, path);
54
+ }
55
+ stats.preserved += 1;
56
+ return local;
57
+ }
58
+ if (isObject(baseline) && isObject(local) && isObject(incoming)) {
59
+ return mergeObjects(baseline, local, incoming, path);
60
+ }
61
+ if (isDeepStrictEqual(local, baseline)) {
62
+ if (!isDeepStrictEqual(incoming, baseline))
63
+ stats.updated += 1;
64
+ return incoming;
65
+ }
66
+ assertCompatible(path, local, incoming);
67
+ stats.preserved += 1;
68
+ return local;
69
+ }
70
+ function mergeObjects(baseline, local, incoming, path) {
71
+ const output = {};
72
+ const keys = new Set([
73
+ ...(isMissing(baseline) ? [] : Object.keys(baseline)),
74
+ ...Object.keys(local),
75
+ ...Object.keys(incoming),
76
+ ]);
77
+ for (const key of [...keys].sort()) {
78
+ const value = merge(isMissing(baseline) || !(key in baseline) ? MISSING : baseline[key], key in local ? local[key] : MISSING, key in incoming ? incoming[key] : MISSING, [...path, key]);
79
+ if (!isMissing(value))
80
+ output[key] = value;
81
+ }
82
+ return output;
83
+ }
84
+ return {
85
+ value: mergeObjects(options.baseline ?? MISSING, options.local, options.incoming, []),
86
+ stats,
87
+ removedPaths,
88
+ };
89
+ }
90
+ export function assertJsonObject(value, label) {
91
+ if (!isObject(value))
92
+ throw new Error(label + " must contain a JSON object");
93
+ }
94
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"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"}
@@ -1,13 +1,14 @@
1
- import { type RuntimeMigrationResult } from "./migrations.js";
1
+ import { type RefreshSummary } from "./refresh.js";
2
2
  import { type WorkflowSelection } from "./workflows.js";
3
3
  export type SpeculoCommandResult = {
4
4
  target: string;
5
5
  mode: "init" | "refresh";
6
6
  assets: string[];
7
- migration: RuntimeMigrationResult;
7
+ refresh: RefreshSummary;
8
8
  };
9
9
  export type SpeculoOptions = {
10
10
  packageRoot?: string;
11
11
  selection?: WorkflowSelection;
12
+ beforeCommit?: (installRoot: string) => Promise<void>;
12
13
  };
13
14
  export declare function initSpeculo(targetArg?: string, options?: SpeculoOptions): Promise<SpeculoCommandResult>;
package/dist/src/index.js CHANGED
@@ -1,6 +1,7 @@
1
1
  import { cp, mkdir, mkdtemp, readFile, rename, rm, writeFile } from "node:fs/promises";
2
2
  import { basename, join, resolve } from "node:path";
3
- import { assertNoPendingMigration, initializeRuntimeManifest, migrateRuntimeState, } from "./migrations.js";
3
+ import { fingerprintTree } from "./manifest.js";
4
+ import { assertNoLegacyPending, prepareRefresh, RefreshBlockedError } from "./refresh.js";
4
5
  import { pathExists } from "./utils.js";
5
6
  import { discoverWorkflowCatalog, isInteractive, promptWorkflowSelection, scanInstalledWorkflows, selectAllFromCatalog, } from "./workflows.js";
6
7
  const CORE_ASSETS = [".speculo", "commands", "skills", "config.json"];
@@ -69,12 +70,12 @@ function generateSpeculoContent(selection) {
69
70
  "",
70
71
  "- ./speculo/.speculo/workspace.json — 工作区根别名配置",
71
72
  "- ./speculo/config.json — 项目配置文件",
72
- "- ./speculo/.speculo/migration.json — 运行时迁移状态(存在时读取)",
73
73
  "",
74
74
  "若上述文件不存在或内容为空,说明项目尚未完成 Speculo 初始化。",
75
75
  "此时必须提示用户:请先运行 speculo init 完成初始化配置。",
76
76
  "",
77
- " migration.json 存在且 status pending,必须停止所有 workflow 读取和状态写入,提示用户运行 migrate-runtime-state command;只有该 command 可以在 pending 期间执行。",
77
+ "`speculo init` 会直接替换受管理静态资产,并依据 refresh contract 保留用户 runtime state、合并持久配置。",
78
+ "结构化状态不兼容时初始化会在替换前停止,当前安装保持不变。",
78
79
  "",
79
80
  ];
80
81
  if (selection.workflowIds.length > 0) {
@@ -178,16 +179,15 @@ async function buildStagedInstall(packageRoot, target, previousRoot, catalog, se
178
179
  for (const workflowId of selection.workflowIds)
179
180
  await copySelectedWorkflow(packageRoot, stagedRoot, workflowId);
180
181
  const unselectedWorkflowIds = await installedUnselectedWorkflowIds(catalog, selection, previousRoot);
181
- const migration = existed
182
- ? await migrateRuntimeState({
183
- packageRoot,
184
- previousRoot,
185
- stagedRoot,
186
- selectedWorkflowIds: selection.workflowIds,
187
- unselectedWorkflowIds,
188
- })
189
- : await initializeRuntimeManifest(packageRoot, stagedRoot, selection.workflowIds);
190
- return { stagedRoot, migration };
182
+ const refresh = await prepareRefresh({
183
+ packageRoot,
184
+ previousRoot,
185
+ stagedRoot,
186
+ selectedWorkflowIds: selection.workflowIds,
187
+ installedWorkflowIds: [...new Set([...selection.workflowIds, ...unselectedWorkflowIds])].sort(),
188
+ existed,
189
+ });
190
+ return { stagedRoot, refresh };
191
191
  }
192
192
  catch (error) {
193
193
  await rm(stagedRoot, { recursive: true, force: true });
@@ -195,17 +195,26 @@ async function buildStagedInstall(packageRoot, target, previousRoot, catalog, se
195
195
  }
196
196
  }
197
197
  async function replaceInstall(stagedRoot, root) {
198
+ const expectedFingerprint = await fingerprintTree(stagedRoot);
198
199
  if (!(await pathExists(root))) {
199
200
  await rename(stagedRoot, root);
201
+ if (await fingerprintTree(root) !== expectedFingerprint) {
202
+ await rename(root, stagedRoot);
203
+ throw new Error("post-install validation failed");
204
+ }
200
205
  return;
201
206
  }
202
207
  const backupRoot = stagedRoot + "-backup";
203
208
  await rename(root, backupRoot);
204
209
  try {
205
210
  await rename(stagedRoot, root);
211
+ if (await fingerprintTree(root) !== expectedFingerprint)
212
+ throw new Error("post-install validation failed");
206
213
  }
207
214
  catch (error) {
208
215
  try {
216
+ if (await pathExists(root))
217
+ await rename(root, stagedRoot);
209
218
  await rename(backupRoot, root);
210
219
  }
211
220
  catch (rollbackError) {
@@ -220,30 +229,50 @@ export async function initSpeculo(targetArg = ".", options = {}) {
220
229
  const packageRoot = resolve(options.packageRoot ?? process.cwd());
221
230
  const root = installRoot(target);
222
231
  const existed = await pathExists(root);
223
- if (existed)
224
- await assertNoPendingMigration(root);
225
- const catalog = await discoverWorkflowCatalog(packageRoot);
226
- const selection = await resolveSelection(packageRoot, root, options);
232
+ await mkdir(target, { recursive: true });
233
+ const lockRoot = join(target, ".speculo-init.lock");
234
+ try {
235
+ await mkdir(lockRoot);
236
+ }
237
+ catch (error) {
238
+ if (error.code !== "EEXIST")
239
+ throw error;
240
+ throw new RefreshBlockedError([{ code: "refresh-locked", path: lockRoot, message: "another speculo init is already running" }]);
241
+ }
227
242
  let stagedRoot;
228
- let migration;
243
+ let refresh;
229
244
  try {
245
+ if (existed)
246
+ await assertNoLegacyPending(root);
247
+ const catalog = await discoverWorkflowCatalog(packageRoot);
248
+ const selection = await resolveSelection(packageRoot, root, options);
249
+ const initialFingerprint = await fingerprintTree(root);
230
250
  const staged = await buildStagedInstall(packageRoot, target, root, catalog, selection, existed);
231
251
  stagedRoot = staged.stagedRoot;
232
- migration = staged.migration;
252
+ refresh = staged.refresh;
253
+ await options.beforeCommit?.(root);
254
+ if (await fingerprintTree(root) !== initialFingerprint) {
255
+ throw new RefreshBlockedError([{
256
+ code: "concurrent-drift",
257
+ path: "speculo",
258
+ message: "the active installation changed while refresh staging was in progress",
259
+ }]);
260
+ }
233
261
  await replaceInstall(stagedRoot, root);
234
262
  stagedRoot = undefined;
263
+ const assets = [".speculo", "config.json", "commands", "skills"];
264
+ assets.push(...selection.workflowIds.map((workflowId) => "workflows/" + workflowId));
265
+ const gitignoreResult = await ensureRuntimeIgnores(target, root);
266
+ assets.push(gitignoreResult);
267
+ assets.push(...await writeAgentFiles(target, packageRoot, selection));
268
+ if (!refresh)
269
+ throw new Error("Speculo refresh result was not produced");
270
+ return { target, mode: existed ? "refresh" : "init", assets, refresh };
235
271
  }
236
272
  finally {
237
273
  if (stagedRoot)
238
274
  await rm(stagedRoot, { recursive: true, force: true });
275
+ await rm(lockRoot, { recursive: true, force: true });
239
276
  }
240
- const assets = [".speculo", "config.json", "commands", "skills"];
241
- assets.push(...selection.workflowIds.map((workflowId) => "workflows/" + workflowId));
242
- const gitignoreResult = await ensureRuntimeIgnores(target, root);
243
- assets.push(gitignoreResult);
244
- assets.push(...await writeAgentFiles(target, packageRoot, selection));
245
- if (!migration)
246
- throw new Error("Speculo migration result was not produced");
247
- return { target, mode: existed ? "refresh" : "init", assets, migration };
248
277
  }
249
278
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ export type FileRecord = {
2
+ path: string;
3
+ bytes: number;
4
+ sha256: string;
5
+ };
6
+ export type ManagedFileRecord = FileRecord & {
7
+ owner: string;
8
+ kind: "static" | "baseline" | "contract";
9
+ package_version: string;
10
+ };
11
+ export declare function toPosix(path: string): string;
12
+ export declare function sha256File(path: string): Promise<{
13
+ bytes: number;
14
+ sha256: string;
15
+ }>;
16
+ export declare function collectFiles(root: string, options?: {
17
+ include?: (relativePath: string) => boolean;
18
+ rejectSymlinks?: boolean;
19
+ }): Promise<FileRecord[]>;
20
+ export declare function fingerprintTree(root: string): Promise<string>;
@@ -0,0 +1,57 @@
1
+ import { createHash } from "node:crypto";
2
+ import { lstat, readFile, readdir, readlink } from "node:fs/promises";
3
+ import { join, relative, sep } from "node:path";
4
+ import { pathExists } from "./utils.js";
5
+ export function toPosix(path) {
6
+ return path.split(sep).join("/");
7
+ }
8
+ export async function sha256File(path) {
9
+ const content = await readFile(path);
10
+ return {
11
+ bytes: content.byteLength,
12
+ sha256: createHash("sha256").update(content).digest("hex"),
13
+ };
14
+ }
15
+ export async function collectFiles(root, options = {}) {
16
+ if (!(await pathExists(root)))
17
+ return [];
18
+ const files = [];
19
+ async function visit(current) {
20
+ for (const entry of await readdir(current, { withFileTypes: true })) {
21
+ const path = join(current, entry.name);
22
+ const relativePath = toPosix(relative(root, path));
23
+ const stats = await lstat(path);
24
+ if (stats.isSymbolicLink()) {
25
+ if (options.rejectSymlinks !== false)
26
+ throw new Error("symbolic link is not allowed in refresh input: " + relativePath);
27
+ const target = await readlink(path);
28
+ const content = Buffer.from("symlink\0" + target);
29
+ if (options.include?.(relativePath) ?? true) {
30
+ files.push({
31
+ path: relativePath,
32
+ bytes: content.byteLength,
33
+ sha256: createHash("sha256").update(content).digest("hex"),
34
+ });
35
+ }
36
+ }
37
+ if (stats.isDirectory()) {
38
+ await visit(path);
39
+ }
40
+ else if (stats.isFile() && (options.include?.(relativePath) ?? true)) {
41
+ files.push({ path: relativePath, ...await sha256File(path) });
42
+ }
43
+ }
44
+ }
45
+ await visit(root);
46
+ return files.sort((left, right) => left.path.localeCompare(right.path));
47
+ }
48
+ export async function fingerprintTree(root) {
49
+ if (!(await pathExists(root)))
50
+ return "absent";
51
+ const files = await collectFiles(root, { rejectSymlinks: false });
52
+ const hash = createHash("sha256");
53
+ for (const file of files)
54
+ hash.update(`${file.path}\0${file.bytes}\0${file.sha256}\n`);
55
+ return hash.digest("hex");
56
+ }
57
+ //# sourceMappingURL=manifest.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../src/manifest.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,30 @@
1
+ import { type ConfigMergeStats } from "./config.js";
2
+ export type RefreshBlocker = {
3
+ code: string;
4
+ path: string;
5
+ message: string;
6
+ };
7
+ export declare class RefreshBlockedError extends Error {
8
+ readonly blockers: RefreshBlocker[];
9
+ constructor(blockers: RefreshBlocker[]);
10
+ }
11
+ export type RefreshSummary = {
12
+ status: "initialized" | "updated";
13
+ sourceVersion: string | null;
14
+ targetVersion: string;
15
+ managedFiles: number;
16
+ preservedFiles: number;
17
+ config: ConfigMergeStats;
18
+ structuredUpgrades: number;
19
+ backupPath: string | null;
20
+ };
21
+ export type PrepareRefreshOptions = {
22
+ packageRoot: string;
23
+ previousRoot: string;
24
+ stagedRoot: string;
25
+ selectedWorkflowIds: string[];
26
+ installedWorkflowIds: string[];
27
+ existed: boolean;
28
+ };
29
+ export declare function assertNoLegacyPending(previousRoot: string): Promise<void>;
30
+ export declare function prepareRefresh(options: PrepareRefreshOptions): Promise<RefreshSummary>;