@namewta/speculo 0.1.12 → 0.1.14
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/dist/src/cli.js +4 -2
- package/dist/src/cli.js.map +1 -1
- package/dist/src/index.js +44 -2
- package/dist/src/index.js.map +1 -1
- package/package.json +2 -2
- package/template/commands/archive.md +13 -4
- package/template/vendor/README.md +34 -0
- package/template/workflows/dev/00-INDEX.md +5 -1
- package/template/workflows/doc/00-INDEX.md +5 -1
package/dist/src/cli.js
CHANGED
|
@@ -15,8 +15,10 @@ function usage() {
|
|
|
15
15
|
"",
|
|
16
16
|
"Options:",
|
|
17
17
|
" --all Install/update all workflows without interactive selection.",
|
|
18
|
-
"
|
|
19
|
-
"
|
|
18
|
+
" Also triggers full overwrite of vendor/ (native skills collection).",
|
|
19
|
+
" When omitted, vendor/ is merge-only — new skills are added but",
|
|
20
|
+
" existing ones are preserved. In a terminal without --all, an",
|
|
21
|
+
" interactive menu lets you pick which workflows to install or refresh."
|
|
20
22
|
].join("\n");
|
|
21
23
|
}
|
|
22
24
|
async function main(argv) {
|
package/dist/src/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
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;AAEzC,SAAS,KAAK;IACZ,OAAO;QACL,QAAQ;QACR,iCAAiC;QACjC,EAAE;QACF,WAAW;QACX,8EAA8E;QAC9E,qFAAqF;QACrF,iFAAiF;QACjF,kDAAkD;QAClD,EAAE;QACF,UAAU;QACV,uEAAuE;QACvE,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/src/index.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { cp, mkdir, rm } from "node:fs/promises";
|
|
1
|
+
import { cp, mkdir, readdir, rm } from "node:fs/promises";
|
|
2
2
|
import { join, resolve } from "node:path";
|
|
3
3
|
import { pathExists } from "./utils.js";
|
|
4
4
|
import { discoverWorkflowCatalog, promptCategorySelection, scanInstalledWorkflows, selectAllFromCatalog, isInteractive, } from "./workflows.js";
|
|
5
|
-
const INIT_ASSETS = [".speculo", "commands", "skills", "workflows"];
|
|
5
|
+
const INIT_ASSETS = [".speculo", "commands", "skills", "workflows", "vendor"];
|
|
6
6
|
const UPDATE_ASSETS = ["commands", "skills", "workflows"];
|
|
7
7
|
// Assets install under a single `speculo/` directory inside the target,
|
|
8
8
|
// mirroring the package layout — never scattered into the target root.
|
|
@@ -30,6 +30,35 @@ async function collectConflicts(root, assets) {
|
|
|
30
30
|
}
|
|
31
31
|
return conflicts;
|
|
32
32
|
}
|
|
33
|
+
/**
|
|
34
|
+
* Merge vendor skills from the template into the install root.
|
|
35
|
+
* Only copies skills that don't already exist — never overwrites.
|
|
36
|
+
* Returns a list of `vendor/<name>` paths that were added.
|
|
37
|
+
*/
|
|
38
|
+
async function mergeVendor(packageRoot, root) {
|
|
39
|
+
const added = [];
|
|
40
|
+
const vendorSrc = join(assetRoot(packageRoot), "vendor");
|
|
41
|
+
const vendorDest = join(root, "vendor");
|
|
42
|
+
await mkdir(vendorDest, { recursive: true });
|
|
43
|
+
let entries;
|
|
44
|
+
try {
|
|
45
|
+
entries = await readdir(vendorSrc, { withFileTypes: true });
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
// No vendor/ in template — nothing to merge
|
|
49
|
+
return added;
|
|
50
|
+
}
|
|
51
|
+
for (const entry of entries) {
|
|
52
|
+
if (!entry.isDirectory())
|
|
53
|
+
continue;
|
|
54
|
+
const dest = join(vendorDest, entry.name);
|
|
55
|
+
if (await pathExists(dest))
|
|
56
|
+
continue; // already exists, skip
|
|
57
|
+
await cp(join(vendorSrc, entry.name), dest, { recursive: true });
|
|
58
|
+
added.push(`vendor/${entry.name}`);
|
|
59
|
+
}
|
|
60
|
+
return added;
|
|
61
|
+
}
|
|
33
62
|
/**
|
|
34
63
|
* Copy selected workflows from the template to the install root.
|
|
35
64
|
* Handles category-level metadata (00-INDEX.md, _templates/) along with
|
|
@@ -154,6 +183,19 @@ async function initOverwrite(targetArg = ".", options = {}) {
|
|
|
154
183
|
await cp(source, destination, { recursive: true, force: true });
|
|
155
184
|
updated.push(asset);
|
|
156
185
|
}
|
|
186
|
+
// Vendor handling: full overwrite with --all, merge otherwise
|
|
187
|
+
if (options.all) {
|
|
188
|
+
const vendorSrc = await ensureAssetSource(packageRoot, "vendor");
|
|
189
|
+
const vendorDest = join(root, "vendor");
|
|
190
|
+
await rm(vendorDest, { recursive: true, force: true });
|
|
191
|
+
await cp(vendorSrc, vendorDest, { recursive: true, force: true });
|
|
192
|
+
updated.push("vendor");
|
|
193
|
+
}
|
|
194
|
+
else {
|
|
195
|
+
const added = await mergeVendor(packageRoot, root);
|
|
196
|
+
for (const item of added)
|
|
197
|
+
updated.push(item);
|
|
198
|
+
}
|
|
157
199
|
// Selective workflow overwrite
|
|
158
200
|
const selection = await resolveSelection(packageRoot, root, options, 'update');
|
|
159
201
|
const workflowPaths = await copyWorkflows(packageRoot, root, selection, { overwrite: true });
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAC1D,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EACL,uBAAuB,EACvB,uBAAuB,EACvB,sBAAsB,EACtB,oBAAoB,EACpB,aAAa,GAEd,MAAM,gBAAgB,CAAC;AAiBxB,MAAM,WAAW,GAAG,CAAC,UAAU,EAAE,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,QAAQ,CAAU,CAAC;AACvF,MAAM,aAAa,GAAG,CAAC,UAAU,EAAE,QAAQ,EAAE,WAAW,CAAU,CAAC;AAEnE,wEAAwE;AACxE,uEAAuE;AACvE,MAAM,cAAc,GAAG,SAAS,CAAC;AAEjC,SAAS,SAAS,CAAC,WAAmB;IACpC,OAAO,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;AACvC,CAAC;AAED,SAAS,WAAW,CAAC,MAAc;IACjC,OAAO,IAAI,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;AACtC,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,WAAmB,EAAE,KAAa;IACjE,MAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC,CAAC;IACnD,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;QAChC,MAAM,IAAI,KAAK,CAAC,4CAA4C,KAAK,EAAE,CAAC,CAAC;IACvE,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,gBAAgB,CAAC,IAAY,EAAE,MAAyB;IACrE,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACtC,IAAI,MAAM,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;YAClC,SAAS,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;GAIG;AACH,KAAK,UAAU,WAAW,CAAC,WAAmB,EAAE,IAAY;IAC1D,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,EAAE,QAAQ,CAAC,CAAC;IACzD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAExC,MAAM,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE7C,IAAI,OAAO,CAAC;IACZ,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,OAAO,CAAC,SAAS,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9D,CAAC;IAAC,MAAM,CAAC;QACP,4CAA4C;QAC5C,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE;YAAE,SAAS;QACnC,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAC1C,IAAI,MAAM,UAAU,CAAC,IAAI,CAAC;YAAE,SAAS,CAAC,uBAAuB;QAC7D,MAAM,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACjE,KAAK,CAAC,IAAI,CAAC,UAAU,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IACrC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,KAAK,UAAU,aAAa,CAC1B,WAAmB,EACnB,IAAY,EACZ,SAA4B,EAC5B,UAAmC,EAAE;IAErC,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;IAC9C,MAAM,iBAAiB,GAAG,IAAI,CAAC,WAAW,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;IACrE,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,KAAK,CAAC;IAE7C,MAAM,KAAK,CAAC,aAAa,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEhD,wDAAwD;IACxD,MAAM,cAAc,GAAG,IAAI,GAAG,EAAU,CAAC;IAEzC,KAAK,MAAM,EAAE,IAAI,SAAS,CAAC,SAAS,EAAE,CAAC;QACrC,MAAM,GAAG,GAAG,EAAE,CAAC,QAAQ,CAAC;QAExB,2DAA2D;QAC3D,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;YACxC,MAAM,KAAK,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAEzC,cAAc;YACd,MAAM,QAAQ,GAAG,IAAI,CAAC,iBAAiB,EAAE,GAAG,EAAE,aAAa,CAAC,CAAC;YAC7D,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;YAC9C,IAAI,SAAS,IAAI,CAAC,MAAM,UAAU,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;gBAC/C,MAAM,EAAE,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YACvC,CAAC;YACD,IAAI,MAAM,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC/B,MAAM,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC;YAChF,CAAC;YAED,cAAc;YACd,MAAM,YAAY,GAAG,IAAI,CAAC,iBAAiB,EAAE,GAAG,EAAE,YAAY,CAAC,CAAC;YAChE,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;YACjD,IAAI,SAAS,IAAI,CAAC,MAAM,UAAU,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC;gBACnD,MAAM,EAAE,CAAC,aAAa,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YAC5D,CAAC;YACD,IAAI,MAAM,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;gBACnC,MAAM,EAAE,CAAC,YAAY,EAAE,aAAa,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC;YACzG,CAAC;YAED,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC;QAED,8BAA8B;QAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,iBAAiB,EAAE,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;QACpD,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;QAEjD,IAAI,SAAS,IAAI,CAAC,MAAM,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;YAC5C,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACrD,CAAC;QAED,IAAI,MAAM,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YAC5B,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,SAAS,EAAE,CAAC,CAAC;YACzF,MAAM,CAAC,IAAI,CAAC,aAAa,GAAG,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,KAAK,UAAU,gBAAgB,CAC7B,WAAmB,EACnB,IAAY,EACZ,OAAuB,EACvB,IAAuB;IAEvB,oDAAoD;IACpD,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QACtB,OAAO,OAAO,CAAC,SAAS,CAAC;IAC3B,CAAC;IAED,6CAA6C;IAC7C,IAAI,OAAO,CAAC,GAAG,IAAI,CAAC,aAAa,EAAE,EAAE,CAAC;QACpC,MAAM,OAAO,GAAG,MAAM,uBAAuB,CAAC,WAAW,CAAC,CAAC;QAC3D,OAAO,oBAAoB,CAAC,OAAO,CAAC,CAAC;IACvC,CAAC;IAED,mBAAmB;IACnB,MAAM,OAAO,GAAG,MAAM,uBAAuB,CAAC,WAAW,CAAC,CAAC;IAE3D,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACtB,0EAA0E;QAC1E,IAAI,SAAS,GAAyC,EAAE,CAAC;QACzD,IAAI,CAAC;YACH,SAAS,GAAG,MAAM,sBAAsB,CAAC,IAAI,CAAC,CAAC;QACjD,CAAC;QAAC,MAAM,CAAC;YACP,qCAAqC;QACvC,CAAC;QACD,MAAM,qBAAqB,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;QACxE,OAAO,uBAAuB,CAAC,OAAO,EAAE,EAAE,qBAAqB,EAAE,CAAC,CAAC;IACrE,CAAC;IAED,wCAAwC;IACxC,OAAO,uBAAuB,CAAC,OAAO,CAAC,CAAC;AAC1C,CAAC;AAED,KAAK,UAAU,SAAS,CACtB,SAAS,GAAG,GAAG,EACf,UAA0B,EAAE;IAE5B,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IAClC,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAClE,MAAM,IAAI,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IAEjC,MAAM,KAAK,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEvC,iDAAiD;IACjD,uDAAuD;IACvD,MAAM,iBAAiB,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,WAAW,CAAC,CAAC;IACrE,MAAM,SAAS,GAAG,MAAM,gBAAgB,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAC;IAClE,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CACb;YACE,mDAAmD;YACnD,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,KAAK,QAAQ,EAAE,CAAC;SAChD,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;IACJ,CAAC;IAED,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,mCAAmC;IACnC,KAAK,MAAM,KAAK,IAAI,iBAAiB,EAAE,CAAC;QACtC,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QAC3D,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACtC,MAAM,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;QACrF,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACrB,CAAC;IAED,0BAA0B;IAC1B,MAAM,SAAS,GAAG,MAAM,gBAAgB,CAAC,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IAC7E,MAAM,aAAa,GAAG,MAAM,aAAa,CAAC,WAAW,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;IACxE,KAAK,MAAM,EAAE,IAAI,aAAa,EAAE,CAAC;QAC/B,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC;AAC1C,CAAC;AAED,KAAK,UAAU,aAAa,CAC1B,SAAS,GAAG,GAAG,EACf,UAA0B,EAAE;IAE5B,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IAClC,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAClE,MAAM,IAAI,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IAEjC,MAAM,KAAK,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEvC,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,gEAAgE;IAChE,KAAK,MAAM,KAAK,IAAI,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,WAAW,CAAC,EAAE,CAAC;QACjE,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QAC3D,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACtC,MAAM,EAAE,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACxD,MAAM,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAChE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACtB,CAAC;IAED,8DAA8D;IAC9D,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAChB,MAAM,SAAS,GAAG,MAAM,iBAAiB,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QACjE,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACxC,MAAM,EAAE,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACvD,MAAM,EAAE,CAAC,SAAS,EAAE,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAClE,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACzB,CAAC;SAAM,CAAC;QACN,MAAM,KAAK,GAAG,MAAM,WAAW,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;QACnD,KAAK,MAAM,IAAI,IAAI,KAAK;YAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/C,CAAC;IAED,+BAA+B;IAC/B,MAAM,SAAS,GAAG,MAAM,gBAAgB,CAAC,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC/E,MAAM,aAAa,GAAG,MAAM,aAAa,CAAC,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7F,KAAK,MAAM,EAAE,IAAI,aAAa,EAAE,CAAC;QAC/B,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACnB,CAAC;IAED,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;AAC7C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,SAAS,GAAG,GAAG,EACf,UAA0B,EAAE;IAE5B,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC;IAClC,MAAM,IAAI,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IAEjC,IAAI,MAAM,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QACvD,OAAO,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IACvC,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACnD,OAAO,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AACrC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@namewta/speculo",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.14",
|
|
4
4
|
"description": "Speculo — specification-driven development framework assets, with a CLI to install and update them across AI coding tools.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -48,7 +48,7 @@
|
|
|
48
48
|
"node": "22.22.3"
|
|
49
49
|
},
|
|
50
50
|
"devDependencies": {
|
|
51
|
-
"@types/node": "^
|
|
51
|
+
"@types/node": "^26.0.0",
|
|
52
52
|
"typescript": "^5.8.3"
|
|
53
53
|
},
|
|
54
54
|
"dependencies": {
|
|
@@ -26,11 +26,17 @@ keywords: [archive, 归档, 清理]
|
|
|
26
26
|
|
|
27
27
|
## 执行步骤
|
|
28
28
|
|
|
29
|
-
1.
|
|
29
|
+
1. **预扫描:** 列出 `speculo/.speculo/<cat>/`(内置分类至少包括 `dev` 与 `doc`)下所有符合 `YYYY-MM-DD-<kebab-name>` 格式的 change 目录。对每个目录检查 `.status.json` 是否存在:
|
|
30
|
+
- 存在且 `change_status: completed` → 加入待归档候选。
|
|
31
|
+
- 存在但 `change_status` 为其他值 → 跳过(非完成状态)。
|
|
32
|
+
- **不存在 `.status.json`** → 标记为 `broken-change: missing .status.json`,**不归档、不删除、不移动**,在清单中单独列出并跳过。
|
|
30
33
|
2. 排除已经位于 `speculo/.speculo/archive/` 下的目录;若目标归档路径已存在,标记为冲突并停止,不覆盖。
|
|
31
|
-
3.
|
|
32
|
-
|
|
33
|
-
|
|
34
|
+
3. 列出完整清单(分三组):
|
|
35
|
+
- **待归档:** 源路径、目标路径、当前分类、`updated_at`、最后 phase、是否仍在 `<cat>-status.json active[]`。
|
|
36
|
+
- **broken-change:** 缺少 `.status.json` 的 change 目录路径。
|
|
37
|
+
- **冲突:** 目标路径已存在的 change。
|
|
38
|
+
4. 向用户展示清单并等待明确确认。没有确认时只输出计划,不移动目录、不改索引。对于 `broken-change`,提示用户需先通过对应 workflow 入口(`dev/00-INDEX.md` 或 `doc/00-INDEX.md`)补建 `.status.json`,或将 `change_status` 手动置为 `completed` 后再归档。
|
|
39
|
+
5. 用户确认后逐项执行(仅对待归档项):
|
|
34
40
|
- 创建 `speculo/.speculo/archive/<cat>/<YYYY-MM>/`
|
|
35
41
|
- 移动 change 目录到 `speculo/.speculo/archive/<cat>/<YYYY-MM>/<change-name>/`
|
|
36
42
|
- 从对应 `speculo/.speculo/<cat>-status.json` 的 `active[]` 删除该 change
|
|
@@ -51,6 +57,9 @@ keywords: [archive, 归档, 清理]
|
|
|
51
57
|
## 归档清单
|
|
52
58
|
[TODO: 列出本次归档的所有 change,格式 "<source-path> → <dest-path>"]
|
|
53
59
|
|
|
60
|
+
## 跳过清单
|
|
61
|
+
[TODO: 列出被跳过的 broken-change(缺少 .status.json)和冲突项]
|
|
62
|
+
|
|
54
63
|
## 用户确认记录
|
|
55
64
|
[TODO: 记录用户确认的原始内容]
|
|
56
65
|
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Vendor — 原生 AgentSkills 收集目录
|
|
2
|
+
|
|
3
|
+
本目录用于收集来自各处的**原生 AgentSkills**,原样保存、不做 Speculo 化改造。
|
|
4
|
+
|
|
5
|
+
## 与 `skills/` 的区别
|
|
6
|
+
|
|
7
|
+
| | `skills/` | `vendor/` |
|
|
8
|
+
|---|---|---|
|
|
9
|
+
| 来源 | Speculo 官方出品 | 第三方搜集收录 |
|
|
10
|
+
| 格式 | 遵循 Speculo frontmatter 契约 | 保持原始格式,不做修改 |
|
|
11
|
+
| 结构 | `SKILL.md` + `references/` + `scripts/` | 原样保留原始目录结构 |
|
|
12
|
+
| 更新策略 | `speculo init` 全覆盖刷新 | 增量合并(见下) |
|
|
13
|
+
|
|
14
|
+
## 更新策略
|
|
15
|
+
|
|
16
|
+
- **`speculo init`(无 `--all`)**:增量合并 —— 只添加 `vendor/` 中尚不存在的技能,已收集的原生技能不受影响
|
|
17
|
+
- **`speculo init --all`**:全覆盖 —— 用当前打包的 `vendor/` 内容完全替换
|
|
18
|
+
|
|
19
|
+
## 如何添加原生技能
|
|
20
|
+
|
|
21
|
+
将任意 AgentSkill 目录直接复制到 `speculo/vendor/` 下即可:
|
|
22
|
+
|
|
23
|
+
```text
|
|
24
|
+
speculo/vendor/
|
|
25
|
+
├── README.md
|
|
26
|
+
├── some-native-skill/
|
|
27
|
+
│ └── SKILL.md
|
|
28
|
+
└── another-skill/
|
|
29
|
+
├── SKILL.md
|
|
30
|
+
└── references/
|
|
31
|
+
└── guide.md
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
无需修改内容,无需添加 Speculo frontmatter。
|
|
@@ -32,7 +32,11 @@ keywords: [dev, 开发, workflow, index, 状态]
|
|
|
32
32
|
1. 若用户未指定 change,扫描 `speculo/.speculo/dev-status.json` 和 `speculo/.speculo/dev/*/.status.json`,列出 active changes。
|
|
33
33
|
- **命名校验**:扫描时仅处理符合 `YYYY-MM-DD-<kebab-name>` 格式的目录。不符合的目录标记为 `malformed`,单独列出路径并提示用户修复或手动清理,不自动删除或重命名。
|
|
34
34
|
2. 若只有一个 active change,默认继续该 change;若有多个 active change,要求用户选择。
|
|
35
|
-
3. 若没有 active change,按用户意图创建新的 change
|
|
35
|
+
3. 若没有 active change,按用户意图创建新的 change。**以下三步为原子操作,不可跳过,前一步失败时停止后续并报告:**
|
|
36
|
+
- **3a. 创建 change 目录** —— `speculo/.speculo/dev/<YYYY-MM-DD>-<kebab-name>/`(使用当前日期,`<kebab-name>` 从用户意图提取,不超过 5 个词)。
|
|
37
|
+
- **3b. 写入 `.status.json`** —— 在 change 目录下创建 `.status.json`,按 `docs/persistence-contract.md` §2.2 最小初始化模板填入所有必填字段(`name`、`category: "dev"`、`change_status: "active"`、`created_at`、`updated_at`、`current_phase: "00-init"`、`phase_history`)。
|
|
38
|
+
- **3c. 更新 `dev-status.json`** —— 读取 `speculo/.speculo/dev-status.json`,在 `active[]` 中追加该 change 的索引条目(`name`、`current_phase: "00-init"`、`updated_at`),写回文件。
|
|
39
|
+
- 以上三步全部成功后,方可继续推荐入口。
|
|
36
40
|
4. 推荐入口时优先使用用户显式别名;没有别名时按执行模式推荐。
|
|
37
41
|
5. 执行任何 workflow 前,读取该 workflow 入口文件、阶段文件、模板和被调用 skill wrapper。
|
|
38
42
|
6. **Worktree 隔离(可选,默认 off)**:仅当用户**显式请求**隔离时,新 change 在 `dev/01` 的 Phase 0 经 `../../skills/worktree-isolation/SKILL.md` 建立隔离分支 `speculo/dev/<change>` 与 `.worktree/<change>/` 工作树,并把 `base_branch`、`change_branch` 记入 `.status.json`。扫描 active changes 时,对 `worktree_enabled` 为真者可结合 `git worktree list` 核对工作树是否存在。
|
|
@@ -29,7 +29,11 @@ keywords: [doc, writing, article, fragments, edit, 文档, 写作]
|
|
|
29
29
|
1. 若用户未指定 change,扫描 `speculo/.speculo/doc-status.json` 和 `speculo/.speculo/doc/*/.status.json`,列出 active changes。
|
|
30
30
|
- **命名校验**:扫描时仅处理符合 `YYYY-MM-DD-<kebab-name>` 格式的目录。不符合的目录标记为 `malformed`,单独列出路径并提示用户修复或手动清理,不自动删除或重命名。
|
|
31
31
|
2. 若只有一个 active change,默认继续该 change;若有多个 active change,要求用户选择。
|
|
32
|
-
3. 若没有 active change,按用户意图创建新的 doc change
|
|
32
|
+
3. 若没有 active change,按用户意图创建新的 doc change。**以下三步为原子操作,不可跳过,前一步失败时停止后续并报告:**
|
|
33
|
+
- **3a. 创建 change 目录** —— `speculo/.speculo/doc/<YYYY-MM-DD>-<kebab-name>/`(使用当前日期,`<kebab-name>` 从用户意图提取,不超过 5 个词)。
|
|
34
|
+
- **3b. 写入 `.status.json`** —— 在 change 目录下创建 `.status.json`,按 `docs/persistence-contract.md` §2.2 最小初始化模板填入所有必填字段(`name`、`category: "doc"`、`change_status: "active"`、`created_at`、`updated_at`、`current_phase: "00-init"`、`phase_history`)。
|
|
35
|
+
- **3c. 更新 `doc-status.json`** —— 读取 `speculo/.speculo/doc-status.json`,在 `active[]` 中追加该 change 的索引条目(`name`、`current_phase: "00-init"`、`updated_at`),写回文件。
|
|
36
|
+
- 以上三步全部成功后,方可继续推荐入口。
|
|
33
37
|
4. 推荐入口时优先使用用户显式别名;没有别名时按用户意图推荐一个横向 workflow。
|
|
34
38
|
5. 执行任何 workflow 前,读取该 workflow 入口文件、阶段文件和模板。
|
|
35
39
|
|