pi-daddy 0.27.0 → 0.27.2
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 +16 -0
- package/PRODUCT-GUIDE.md +9 -7
- package/README.md +7 -1
- package/dist/catalog.d.ts +1 -7
- package/dist/catalog.d.ts.map +1 -1
- package/dist/catalog.js +8 -40
- package/dist/catalog.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +9 -7
- package/dist/cli.js.map +1 -1
- package/dist/definitions.d.ts +3 -8
- package/dist/definitions.d.ts.map +1 -1
- package/dist/definitions.js +19 -43
- package/dist/definitions.js.map +1 -1
- package/dist/factory-order.d.ts +10 -10
- package/dist/init.d.ts +7 -19
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +9 -20
- package/dist/init.js.map +1 -1
- package/dist/skill-packages.d.ts +6 -24
- package/dist/skill-packages.d.ts.map +1 -1
- package/dist/skill-packages.js +74 -33
- package/dist/skill-packages.js.map +1 -1
- package/dist/skill-resources.d.ts +21 -0
- package/dist/skill-resources.d.ts.map +1 -0
- package/dist/skill-resources.js +52 -0
- package/dist/skill-resources.js.map +1 -0
- package/extensions/init-command.ts +3 -2
- package/package.json +5 -3
- package/src/catalog.ts +7 -37
- package/src/cli.ts +8 -7
- package/src/definitions.ts +16 -44
- package/src/init.ts +10 -20
- package/src/skill-packages.ts +59 -34
- package/src/skill-resources.ts +48 -0
package/dist/init.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* `pi-daddy init` — scaffold a governed project from the skill packages already installed (B2, P3).
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
* body
|
|
6
|
-
*
|
|
4
|
+
* Legacy unregistered npm packages can be scaffolded per skill: create a directory, copy the
|
|
5
|
+
* body and declaration copies plus a starting `PI_GRANTS_GRANT`. Configured enabled Pi resources
|
|
6
|
+
* are referenced where installed instead (ADR-0074); no competing .pi/skills copy is created.
|
|
7
7
|
*
|
|
8
8
|
* **The line it does not cross, and the reason this module exists at all:** `init` writes files an operator
|
|
9
9
|
* then **reviews, edits and commits**. It never chooses a ceiling. A skill that declares `allowed-tools` is
|
|
@@ -23,23 +23,9 @@
|
|
|
23
23
|
*/
|
|
24
24
|
import type { Capability } from "./resolve.ts";
|
|
25
25
|
import type { SkillPackage } from "./skill-packages.ts";
|
|
26
|
-
/** Why a discovered skill is not authorised in the generated grant. `null` means it is. */
|
|
27
26
|
/**
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
* Exported because the number is printed to an operator and was wrong: `cli.ts` filtered on
|
|
31
|
-
* `withheld === null`, which is false for all three `WithholdReason`s — so a skill that declares
|
|
32
|
-
* `allowed-tools` perfectly well and merely needs a withheld capability counted as not declaring one.
|
|
33
|
-
* Against `principal-pi-skills` that printed *"7 skill(s), 3 declaring allowed-tools"* while all seven
|
|
34
|
-
* declared. R-28's shape: a diagnostic disagreeing with the thing it describes.
|
|
35
|
-
*
|
|
36
|
-
* **It was invisible until the integration worked.** Before ceilings shipped, none of the seven declared
|
|
37
|
-
* and the line read *"0 declaring"* — correct by coincidence, for the wrong reason. A count that is right
|
|
38
|
-
* only while the interesting case is absent is the kind this project keeps finding.
|
|
39
|
-
*
|
|
40
|
-
* `undeclared` is the only reason that means "did not declare". `pattern` declared something this package
|
|
41
|
-
* refuses to reinterpret, and `needs-withheld` declared something fine that the operator must opt into —
|
|
42
|
-
* both are declarations.
|
|
27
|
+
* Count declarations, not authorizations (R-73). Both pattern and needs-withheld mean the skill
|
|
28
|
+
* declared a ceiling; only undeclared means it did not. The CLI must report the same distinction.
|
|
43
29
|
*/
|
|
44
30
|
export declare function countDeclaring(skills: PlannedSkill[], from: string): number;
|
|
45
31
|
export type WithholdReason = "undeclared" | "pattern" | "needs-withheld";
|
|
@@ -49,6 +35,8 @@ export interface PlannedSkill {
|
|
|
49
35
|
from: string;
|
|
50
36
|
sourcePath: string;
|
|
51
37
|
targetPath: string;
|
|
38
|
+
/** Configured skills stay at their installed/local source, including when --force is used. */
|
|
39
|
+
referenced?: boolean;
|
|
52
40
|
/** Exactly what would be written — the file verbatim, or the file plus a commented note. */
|
|
53
41
|
content: string;
|
|
54
42
|
/** The declared ceiling, empty when the declaration is absent or unusable. */
|
package/dist/init.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AASH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AASH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAExD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,YAAY,EAAE,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAE3E;AAED,MAAM,MAAM,cAAc,GAAG,YAAY,GAAG,SAAS,GAAG,gBAAgB,CAAC;AAEzE,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,qDAAqD;IACrD,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,8FAA8F;IAC9F,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,4FAA4F;IAC5F,OAAO,EAAE,MAAM,CAAC;IAChB,8EAA8E;IAC9E,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,QAAQ,EAAE,cAAc,GAAG,IAAI,CAAC;IAChC,4FAA4F;IAC5F,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,0GAA0G;IAC1G,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,mEAAmE;IACnE,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,4FAA4F;IAC5F,oBAAoB,EAAE,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC;IAChD,0GAA0G;IAC1G,kBAAkB,EAAE,UAAU,EAAE,CAAC;IACjC,YAAY,EAAE,MAAM,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,uGAAuG;IACvG,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAyBD;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,GAAE,MAAM,EAAgB,GAAG,MAAM,CASrG;AAUD;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CACtB,QAAQ,EAAE,YAAY,EAAE,EACxB,GAAG,EAAE,MAAM;AACX;;;;;;;;GAQG;AACH,sBAAsB,GAAE,SAAS,MAAM,EAAO,GAC7C,QAAQ,CA+IV;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,0FAA0F;IAC1F,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC3C;AAiDD;;;;;;;;;;;;GAYG;AACH,wBAAsB,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAO,GAAG,OAAO,CAAC,WAAW,CAAC,CA2BvG"}
|
package/dist/init.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* `pi-daddy init` — scaffold a governed project from the skill packages already installed (B2, P3).
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
* body
|
|
6
|
-
*
|
|
4
|
+
* Legacy unregistered npm packages can be scaffolded per skill: create a directory, copy the
|
|
5
|
+
* body and declaration copies plus a starting `PI_GRANTS_GRANT`. Configured enabled Pi resources
|
|
6
|
+
* are referenced where installed instead (ADR-0074); no competing .pi/skills copy is created.
|
|
7
7
|
*
|
|
8
8
|
* **The line it does not cross, and the reason this module exists at all:** `init` writes files an operator
|
|
9
9
|
* then **reviews, edits and commits**. It never chooses a ceiling. A skill that declares `allowed-tools` is
|
|
@@ -28,23 +28,9 @@ import { ceilingForDefinition } from "./definitions.js";
|
|
|
28
28
|
import { runWithFinalizers } from "./finalization.js";
|
|
29
29
|
import { ALWAYS_LIVE, assertGrantIsWritable, isLiveByDefault, renderGrantEnv } from "./grant-env.js";
|
|
30
30
|
import { PI_BUILTIN_TOOLS } from "./pi-tools.js";
|
|
31
|
-
/** Why a discovered skill is not authorised in the generated grant. `null` means it is. */
|
|
32
31
|
/**
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
* Exported because the number is printed to an operator and was wrong: `cli.ts` filtered on
|
|
36
|
-
* `withheld === null`, which is false for all three `WithholdReason`s — so a skill that declares
|
|
37
|
-
* `allowed-tools` perfectly well and merely needs a withheld capability counted as not declaring one.
|
|
38
|
-
* Against `principal-pi-skills` that printed *"7 skill(s), 3 declaring allowed-tools"* while all seven
|
|
39
|
-
* declared. R-28's shape: a diagnostic disagreeing with the thing it describes.
|
|
40
|
-
*
|
|
41
|
-
* **It was invisible until the integration worked.** Before ceilings shipped, none of the seven declared
|
|
42
|
-
* and the line read *"0 declaring"* — correct by coincidence, for the wrong reason. A count that is right
|
|
43
|
-
* only while the interesting case is absent is the kind this project keeps finding.
|
|
44
|
-
*
|
|
45
|
-
* `undeclared` is the only reason that means "did not declare". `pattern` declared something this package
|
|
46
|
-
* refuses to reinterpret, and `needs-withheld` declared something fine that the operator must opt into —
|
|
47
|
-
* both are declarations.
|
|
32
|
+
* Count declarations, not authorizations (R-73). Both pattern and needs-withheld mean the skill
|
|
33
|
+
* declared a ceiling; only undeclared means it did not. The CLI must report the same distinction.
|
|
48
34
|
*/
|
|
49
35
|
export function countDeclaring(skills, from) {
|
|
50
36
|
return skills.filter((s) => s.from === from && s.withheld !== "undeclared").length;
|
|
@@ -142,7 +128,8 @@ registeredWorkspaceIds = []) {
|
|
|
142
128
|
name,
|
|
143
129
|
from: `${pkg.name}@${pkg.version}`,
|
|
144
130
|
sourcePath: skill.path,
|
|
145
|
-
targetPath: join(cwd, ".pi", "skills", name, "SKILL.md"),
|
|
131
|
+
targetPath: skill.referenced ? skill.path : join(cwd, ".pi", "skills", name, "SKILL.md"),
|
|
132
|
+
referenced: skill.referenced,
|
|
146
133
|
content: withPlaceholder(skill.text, withheld === null, note),
|
|
147
134
|
ceiling: ceiling.capabilities,
|
|
148
135
|
withheld,
|
|
@@ -323,6 +310,8 @@ export async function applyInit(plan, options = {}) {
|
|
|
323
310
|
}
|
|
324
311
|
const force = options.force === true;
|
|
325
312
|
for (const skill of plan.skills) {
|
|
313
|
+
if (skill.referenced)
|
|
314
|
+
continue;
|
|
326
315
|
if (force)
|
|
327
316
|
await replace(skill.targetPath, skill.content, outcome);
|
|
328
317
|
else
|
package/dist/init.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACzE,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAE,eAAe,EAAE,cAAc,EAAsB,MAAM,gBAAgB,CAAC;AACzH,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAIjD
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../src/init.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACzE,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,qBAAqB,EAAE,eAAe,EAAE,cAAc,EAAsB,MAAM,gBAAgB,CAAC;AACzH,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAIjD;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,MAAsB,EAAE,IAAY;IACjE,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,IAAI,CAAC,CAAC,QAAQ,KAAK,YAAY,CAAC,CAAC,MAAM,CAAC;AACrF,CAAC;AAqCD,MAAM,WAAW,GAAG;IAClB,uGAAuG;IACvG,oGAAoG;IACpG,uGAAuG;IACvG,iDAAiD;IACjD,uBAAuB,GAAG,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG;IAC3D,qEAAqE;CACtE,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,WAAW,GAAG,CAAC,QAAkB,EAAE,EAAE,CAAC;IAC1C,wGAAwG;IACxG,qBAAqB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,kEAAkE;IAC1G,oGAAoG;IACpG,mEAAmE;CACpE,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,QAAiB,EAAE,OAAiB,WAAW;IAC3F,IAAI,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC1B,MAAM,KAAK,GAAG,4CAA4C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtE,wGAAwG;IACxG,uEAAuE;IACvE,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,GAAG,KAAK,CAAC;IAC3C,MAAM,GAAG,GAAG,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;IACrD,OAAO,OAAO,GAAG,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACjF,CAAC;AAED,oGAAoG;AACpG,SAAS,cAAc,CAAC,YAA0B;IAChD,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAS,gBAAgB,CAAC,CAAC;IACnD,OAAO,YAAY,CAAC,MAAM,CACxB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,WAAW,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAC5F,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,QAAQ,CACtB,QAAwB,EACxB,GAAW;AACX;;;;;;;;GAQG;AACH,yBAA4C,EAAE;IAE9C,MAAM,MAAM,GAAmB,EAAE,CAAC;IAClC,MAAM,UAAU,GAAa,EAAE,CAAC;IAChC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAE/B,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,KAAK,MAAM,KAAK,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YAC/B,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC;YACnC,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBACnB,UAAU,CAAC,IAAI,CAAC,GAAG,IAAI,aAAa,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC;gBAC7E,SAAS;YACX,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAEf,MAAM,OAAO,GAAG,oBAAoB,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;YACvD,MAAM,KAAK,GAAa,EAAE,CAAC;YAC3B,IAAI,QAAQ,GAA0B,IAAI,CAAC;YAC3C,IAAI,IAAI,GAAG,WAAW,CAAC;YACvB,IAAI,OAAO,CAAC,UAAU;gBAAE,QAAQ,GAAG,YAAY,CAAC;iBAC3C,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrC,QAAQ,GAAG,SAAS,CAAC;gBACrB,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;gBACrC,KAAK,CAAC,IAAI,CACR,YAAY,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,sDAAsD;oBAC3F,+FAA+F,CAClG,CAAC;YACJ,CAAC;YAED,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI;gBACJ,IAAI,EAAE,GAAG,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,OAAO,EAAE;gBAClC,UAAU,EAAE,KAAK,CAAC,IAAI;gBACtB,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,CAAC;gBACxF,UAAU,EAAE,KAAK,CAAC,UAAU;gBAC5B,OAAO,EAAE,eAAe,CAAC,KAAK,CAAC,IAAI,EAAE,QAAQ,KAAK,IAAI,EAAE,IAAI,CAAC;gBAC7D,OAAO,EAAE,OAAO,CAAC,YAAY;gBAC7B,QAAQ;gBACR,KAAK;aACN,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,wGAAwG;IACxG,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC;IAC3D,MAAM,oBAAoB,GAAG,IAAI,GAAG,EAAwB,CAAC;IAC7D,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;QAC7B,KAAK,MAAM,UAAU,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YACvC,IAAI,eAAe,CAAC,UAAU,CAAC;gBAAE,SAAS;YAC1C,+FAA+F;YAC/F,kGAAkG;YAClG,sGAAsG;YACtG,oGAAoG;YACpG,oGAAoG;YACpG,sGAAsG;YACtG,kGAAkG;YAClG,sEAAsE;YACtE,EAAE;YACF,mGAAmG;YACnG,iGAAiG;YACjG,kGAAkG;YAClG,+CAA+C;YAC/C,IAAI,UAAU,CAAC,UAAU,CAAC,YAAY,CAAC;gBAAE,SAAS;YAClD,oBAAoB,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC,GAAG,CAAC,oBAAoB,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QACtG,CAAC;IACH,CAAC;IAED,2GAA2G;IAC3G,oGAAoG;IACpG,qGAAqG;IACrG,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;QAC7B,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;YAAE,KAAK,CAAC,QAAQ,GAAG,gBAAgB,CAAC;IACxF,CAAC;IAED,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC;IAC7D,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACvD,qGAAqG;IACrG,uGAAuG;IACvG,uGAAuG;IACvG,8FAA8F;IAC9F,MAAM,eAAe,GAA+C,EAAE,CAAC;IACvE,MAAM,IAAI,GAAG,IAAI,GAAG,CAAa,CAAC,WAAW,CAAC,CAAC,CAAC;IAChD,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;QAC/B,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QACtC,KAAK,MAAM,UAAU,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YACvC,IAAI,UAAU,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC;gBACvF,eAAe,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;gBACvD,SAAS;YACX,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IACD,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;IAE/B,MAAM,QAAQ,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CACxC,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAC3B,CAAC,CAAC,EAAE,EAAE,CACJ,GAAG,CAAC,CAAC,IAAI,aAAa,CAAC,uEAAuE;QAC9F,YAAY,CAAC,CAAC,IAAI,sCAAsC,CAC3D,CACF,CAAC;IAEF,uGAAuG;IACvG,sFAAsF;IACtF,qBAAqB,CAAC,KAAK,CAAC,CAAC;IAE7B,MAAM,QAAQ,GAAwD;QACpE,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,4DAA4D,GAAG,CAAC,CAAC,IAAI,GAAG,SAAS;QACpG,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;QAClC,gBAAgB,EAAE,CAAC,CAAC,EAAE,EAAE,CACtB,SAAS,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,mCAAmC;KACtG,CAAC;IAEF,MAAM,cAAc,GAAoB,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QACzD,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,OAAO,EAAE,CAAC,CAAC,OAAO;QAClB,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAChE,CAAC,CAAC,CAAC;IAEJ,uGAAuG;IACvG,sGAAsG;IACtG,MAAM,kBAAkB,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IACtG,MAAM,kBAAkB,GAAG;QACzB,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,sBAAsB,CAAC,GAAG,CAAC,mBAAmB,CAAC,EAAE,GAAG,kBAAkB,CAAC,CAAC;KACxF,CAAC,IAAI,EAAE,CAAC;IAET,OAAO;QACL,MAAM;QACN,UAAU;QACV,KAAK;QACL,oBAAoB;QACpB,kBAAkB;QAClB,YAAY,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,YAAY,CAAC;QAC5C,eAAe,EAAE,cAAc,CAAC;YAC9B,MAAM,EAAE,cAAc;YACtB,IAAI,EAAE,KAAK;YACX,QAAQ,EAAE,oBAAoB;YAC9B,mBAAmB,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,gBAAgB,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YAC7F,eAAe;YACf,QAAQ;YACR,kBAAkB;SACnB,CAAC;QACF,QAAQ;KACT,CAAC;AACJ,CAAC;AASD;;;;;;;;;;;;;;;;;;GAkBG;AACH,KAAK,UAAU,mBAAmB,CAAC,IAAY,EAAE,OAAe,EAAE,OAAoB;IACpF,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACnD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACtC,MAAM,iBAAiB,CACrB,GAAG,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,EACvC,CAAC,EAAE,KAAK,EAAE,gCAAgC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC,CACzE,CAAC;QACF,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAA2B,CAAC,IAAI,KAAK,QAAQ;YAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;YACvE,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACpG,CAAC;AACH,CAAC;AAED,4FAA4F;AAC5F,KAAK,UAAU,OAAO,CAAC,IAAY,EAAE,OAAe,EAAE,OAAoB;IACxE,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACnD,kGAAkG;QAClG,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAChC,MAAM,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;QACjE,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC/F,CAAC;AACH,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,IAAc,EAAE,UAA+B,EAAE;IAC/E,MAAM,OAAO,GAAgB,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC;IACnE,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;IAChD,IAAI,CAAC;QACH,0GAA0G;QAC1G,MAAM,KAAK,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QACxC,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,CAAC;QACvC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,IAAI,OAAO,CAAC,cAAc,EAAE;YAAE,MAAM,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC/G,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAK,KAA2B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACnD,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACxG,OAAO,OAAO,CAAC;QACjB,CAAC;QACD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,SAAS,CAAC,CAAC;QACxC,IAAI,QAAQ,CAAC,cAAc,EAAE,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,EAAE,CAAC;YACzD,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,uEAAuE,EAAE,CAAC,CAAC;YACzH,OAAO,OAAO,CAAC;QACjB,CAAC;IACH,CAAC;IACD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,KAAK,IAAI,CAAC;IACrC,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChC,IAAI,KAAK,CAAC,UAAU;YAAE,SAAS;QAC/B,IAAI,KAAK;YAAE,MAAM,OAAO,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;;YAC9D,MAAM,mBAAmB,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC3E,CAAC;IACD,MAAM,mBAAmB,CAAC,IAAI,CAAC,YAAY,EAAE,IAAI,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC;IAC5E,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
package/dist/skill-packages.d.ts
CHANGED
|
@@ -1,28 +1,8 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* is pi's own convention and how pi itself loads them. Measured against `principal-pi-skills@2.3.1`:
|
|
7
|
-
*
|
|
8
|
-
* ```json
|
|
9
|
-
* "pi": { "skills": ["./decide", "./architect", "./plan", "./build", "./review", "./debug", "./git-ops"] }
|
|
10
|
-
* ```
|
|
11
|
-
*
|
|
12
|
-
* **A declaration, never a heuristic.** Walking `node_modules` looking for files called `SKILL.md` would
|
|
13
|
-
* find a package's test fixtures, its examples, and its vendored copies of someone else's skills — and
|
|
14
|
-
* would then offer to install them as spawnable sub-agents. A package that says which of its files are
|
|
15
|
-
* skills has said so on purpose, and that is the only list this reads.
|
|
16
|
-
*
|
|
17
|
-
* What it deliberately does NOT do: scan `~/.pi/agent/skills/`. Definitions already in a skill root are
|
|
18
|
-
* discovered by `loadDefinitions` and governed as they stand; copying them into a project would duplicate
|
|
19
|
-
* them under a name that shadows the original (project wins on collision), which is a change nobody asked
|
|
20
|
-
* for.
|
|
21
|
-
*
|
|
22
|
-
* **Everything read here comes from a third party**, so this module is also where the refusals live: a
|
|
23
|
-
* name, a declared capability id, or a path that cannot safely be written into a generated file is refused
|
|
24
|
-
* with a reason rather than passed on (R-77, R-78, R-80). `init` generates a shell file an operator
|
|
25
|
-
* `source`s; the only strings that may reach it are ones that survived a whitelist here.
|
|
2
|
+
* Setup discovers enabled Pi resources in place through its package resolver. Configured packages
|
|
3
|
+
* are never copied into another autoload root. For legacy npm installs unregistered with Pi only,
|
|
4
|
+
* the explicit package.json pi.skills declaration remains a scaffold source (ADR-0074).
|
|
5
|
+
* Names, ceilings and bytes are checked before they can enter the generated shell grant.
|
|
26
6
|
*/
|
|
27
7
|
import { type SkillDefinition } from "./definitions.ts";
|
|
28
8
|
import { isSafeCapability } from "./capabilities.ts";
|
|
@@ -31,6 +11,8 @@ export interface DiscoveredSkill {
|
|
|
31
11
|
/** The file verbatim. `init` copies it rather than regenerating it, so nothing is lost in a round trip. */
|
|
32
12
|
text: string;
|
|
33
13
|
path: string;
|
|
14
|
+
/** Already enabled by Pi; setup must reference it rather than making a competing copy. */
|
|
15
|
+
referenced?: boolean;
|
|
34
16
|
}
|
|
35
17
|
/** Why a declared skill was refused before it could be planned. Each has a different fix. */
|
|
36
18
|
export type RefusalReason =
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill-packages.d.ts","sourceRoot":"","sources":["../src/skill-packages.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"skill-packages.d.ts","sourceRoot":"","sources":["../src/skill-packages.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,EAA8C,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAIpG,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErD,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,eAAe,CAAC;IAC5B,2GAA2G;IAC3G,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,0FAA0F;IAC1F,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,6FAA6F;AAC7F,MAAM,MAAM,aAAa;AACvB,uFAAuF;AACrF,aAAa;AACf,yFAAyF;GACvF,mBAAmB;AACrB,yGAAyG;GACvG,UAAU;AACZ,iFAAiF;GAC/E,UAAU,CAAC;AAEf,MAAM,WAAW,YAAY;IAC3B,uFAAuF;IACvF,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,aAAa,CAAC;IACtB,sDAAsD;IACtD,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,yGAAyG;IACzG,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,uGAAuG;IACvG,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,MAAM,EAAE,eAAe,EAAE,CAAC;CAC3B;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEhD;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAGH,OAAO,EAAE,gBAAgB,EAAE,CAAC;AA+D5B,2GAA2G;AAC3G,wBAAsB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAkCvF;AAED;;;;;;GAMG;AACH;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAGvD;AAED,wBAAsB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CA0DhF"}
|
package/dist/skill-packages.js
CHANGED
|
@@ -1,33 +1,14 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* is pi's own convention and how pi itself loads them. Measured against `principal-pi-skills@2.3.1`:
|
|
7
|
-
*
|
|
8
|
-
* ```json
|
|
9
|
-
* "pi": { "skills": ["./decide", "./architect", "./plan", "./build", "./review", "./debug", "./git-ops"] }
|
|
10
|
-
* ```
|
|
11
|
-
*
|
|
12
|
-
* **A declaration, never a heuristic.** Walking `node_modules` looking for files called `SKILL.md` would
|
|
13
|
-
* find a package's test fixtures, its examples, and its vendored copies of someone else's skills — and
|
|
14
|
-
* would then offer to install them as spawnable sub-agents. A package that says which of its files are
|
|
15
|
-
* skills has said so on purpose, and that is the only list this reads.
|
|
16
|
-
*
|
|
17
|
-
* What it deliberately does NOT do: scan `~/.pi/agent/skills/`. Definitions already in a skill root are
|
|
18
|
-
* discovered by `loadDefinitions` and governed as they stand; copying them into a project would duplicate
|
|
19
|
-
* them under a name that shadows the original (project wins on collision), which is a change nobody asked
|
|
20
|
-
* for.
|
|
21
|
-
*
|
|
22
|
-
* **Everything read here comes from a third party**, so this module is also where the refusals live: a
|
|
23
|
-
* name, a declared capability id, or a path that cannot safely be written into a generated file is refused
|
|
24
|
-
* with a reason rather than passed on (R-77, R-78, R-80). `init` generates a shell file an operator
|
|
25
|
-
* `source`s; the only strings that may reach it are ones that survived a whitelist here.
|
|
2
|
+
* Setup discovers enabled Pi resources in place through its package resolver. Configured packages
|
|
3
|
+
* are never copied into another autoload root. For legacy npm installs unregistered with Pi only,
|
|
4
|
+
* the explicit package.json pi.skills declaration remains a scaffold source (ADR-0074).
|
|
5
|
+
* Names, ceilings and bytes are checked before they can enter the generated shell grant.
|
|
26
6
|
*/
|
|
27
7
|
import { readdir, readFile, realpath } from "node:fs/promises";
|
|
28
8
|
import { homedir } from "node:os";
|
|
29
9
|
import { join, resolve, sep } from "node:path";
|
|
30
10
|
import { ceilingForDefinition, parseSkillDefinition } from "./definitions.js";
|
|
11
|
+
import { resolveSkillResources, skillResourceName } from "./skill-resources.js";
|
|
31
12
|
import { WILDCARD } from "./pi-tools.js";
|
|
32
13
|
import { AGENT_WILDCARD, WORKSPACE_WILDCARD } from "./resolve.js";
|
|
33
14
|
import { isSafeCapability } from "./capabilities.js";
|
|
@@ -209,21 +190,81 @@ export function skillPackageRoots(cwd) {
|
|
|
209
190
|
return [join(cwd, "node_modules"), join(agentDir, "npm", "node_modules")];
|
|
210
191
|
}
|
|
211
192
|
export async function discoverSkillPackages(cwd) {
|
|
193
|
+
const resolved = await resolveSkillResources(cwd);
|
|
194
|
+
const packages = [];
|
|
195
|
+
const seenSkills = new Set();
|
|
196
|
+
const runtimeNames = new Set(resolved.skills.map(s => skillResourceName(s.path)));
|
|
197
|
+
const configuredRoots = new Set(resolved.configured.flatMap(p => p.installedPath ? [resolve(p.installedPath)] : []));
|
|
198
|
+
const configuredNames = new Set(resolved.configured.flatMap(p => {
|
|
199
|
+
if (!p.source.startsWith("npm:"))
|
|
200
|
+
return [];
|
|
201
|
+
const spec = p.source.slice(4);
|
|
202
|
+
const versionAt = spec.indexOf("@", 1);
|
|
203
|
+
return [versionAt < 0 ? spec : spec.slice(0, versionAt)];
|
|
204
|
+
}));
|
|
205
|
+
for (const root of configuredRoots) {
|
|
206
|
+
try {
|
|
207
|
+
configuredNames.add(JSON.parse(await readFile(join(root, "package.json"), "utf8")).name);
|
|
208
|
+
}
|
|
209
|
+
catch { /* absent */ }
|
|
210
|
+
}
|
|
211
|
+
for (const resource of resolved.skills) {
|
|
212
|
+
const bytes = await readFile(resource.path).catch(() => null);
|
|
213
|
+
if (bytes === null)
|
|
214
|
+
continue;
|
|
215
|
+
const text = bytes.toString("utf8");
|
|
216
|
+
const resourceName = skillResourceName(resource.path);
|
|
217
|
+
if (seenSkills.has(resourceName))
|
|
218
|
+
continue;
|
|
219
|
+
seenSkills.add(resourceName);
|
|
220
|
+
let name = resource.metadata.source;
|
|
221
|
+
let version = "local";
|
|
222
|
+
if (resource.metadata.origin === "package" && resource.metadata.baseDir) {
|
|
223
|
+
try {
|
|
224
|
+
const manifest = JSON.parse(await readFile(join(resource.metadata.baseDir, "package.json"), "utf8"));
|
|
225
|
+
name = manifest.name ?? name;
|
|
226
|
+
version = manifest.version ?? version;
|
|
227
|
+
}
|
|
228
|
+
catch { /* the resource can be used without optional display metadata */ }
|
|
229
|
+
}
|
|
230
|
+
else
|
|
231
|
+
name = `${resource.metadata.scope} skills`;
|
|
232
|
+
let pkg = packages.find(p => p.name === name && p.version === version);
|
|
233
|
+
if (!pkg) {
|
|
234
|
+
pkg = { name, version, skills: [], refused: [], unreadable: [] };
|
|
235
|
+
packages.push(pkg);
|
|
236
|
+
}
|
|
237
|
+
if (!Buffer.from(text, "utf8").equals(bytes)) {
|
|
238
|
+
pkg.refused.push({ subject: resourceName, reason: "not-utf8", detail: [] });
|
|
239
|
+
continue;
|
|
240
|
+
}
|
|
241
|
+
const definition = parseSkillDefinition(resource.path, text);
|
|
242
|
+
if (!definition)
|
|
243
|
+
continue;
|
|
244
|
+
const skill = { definition, text, path: resource.path, referenced: true };
|
|
245
|
+
const refusal = refusalFor(skill);
|
|
246
|
+
if (refusal)
|
|
247
|
+
pkg.refused.push(refusal);
|
|
248
|
+
else
|
|
249
|
+
pkg.skills.push(skill);
|
|
250
|
+
}
|
|
251
|
+
// Compatibility for npm installs that were never registered with Pi. Runtime discovery never scans
|
|
252
|
+
// node_modules. A configured package (including one disabled by a filter) must not re-enter here.
|
|
212
253
|
const dirs = [];
|
|
213
|
-
const seenNames = new Set();
|
|
214
254
|
for (const root of skillPackageRoots(cwd))
|
|
215
255
|
await collectFrom(root, dirs);
|
|
216
|
-
const
|
|
256
|
+
const seenNames = new Set(packages.map(p => p.name));
|
|
217
257
|
for (const dir of dirs) {
|
|
258
|
+
if (configuredRoots.has(resolve(dir)))
|
|
259
|
+
continue;
|
|
218
260
|
const found = await readSkillPackage(dir);
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
}
|
|
261
|
+
if (!found || configuredNames.has(found.name) || seenNames.has(found.name))
|
|
262
|
+
continue;
|
|
263
|
+
seenNames.add(found.name);
|
|
264
|
+
found.skills = found.skills.filter(skill => !runtimeNames.has(skill.definition.name));
|
|
265
|
+
packages.push(found);
|
|
225
266
|
}
|
|
226
|
-
return packages
|
|
267
|
+
return packages;
|
|
227
268
|
}
|
|
228
269
|
/** Append every package directory under one `node_modules`, scoped packages included. */
|
|
229
270
|
async function collectFrom(root, dirs) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"skill-packages.js","sourceRoot":"","sources":["../src/skill-packages.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"skill-packages.js","sourceRoot":"","sources":["../src/skill-packages.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
interface SkillResources {
|
|
2
|
+
skills: {
|
|
3
|
+
path: string;
|
|
4
|
+
enabled: boolean;
|
|
5
|
+
metadata: {
|
|
6
|
+
source: string;
|
|
7
|
+
scope: string;
|
|
8
|
+
origin: string;
|
|
9
|
+
baseDir?: string;
|
|
10
|
+
};
|
|
11
|
+
}[];
|
|
12
|
+
configured: {
|
|
13
|
+
source: string;
|
|
14
|
+
scope: string;
|
|
15
|
+
installedPath?: string;
|
|
16
|
+
}[];
|
|
17
|
+
}
|
|
18
|
+
export declare function skillResourceName(path: string): string;
|
|
19
|
+
export declare function resolveSkillResources(cwd: string): Promise<SkillResources>;
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=skill-resources.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-resources.d.ts","sourceRoot":"","sources":["../src/skill-resources.ts"],"names":[],"mappings":"AAKA,UAAU,cAAc;IACtB,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,MAAM,EAAE,MAAM,CAAC;YAAC,OAAO,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,EAAE,CAAC;IAC5H,UAAU,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CACzE;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAItD;AAED,wBAAsB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CA+BhF"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/** Read Pi's configured resource surface without locks, installs, extension execution or model calls. */
|
|
2
|
+
import { readFileSync, statSync } from "node:fs";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { DefaultPackageManager, getAgentDir, SettingsManager } from "@earendil-works/pi-coding-agent";
|
|
5
|
+
export function skillResourceName(path) {
|
|
6
|
+
const parts = path.split(/[\\/]/);
|
|
7
|
+
const file = parts.at(-1) ?? "";
|
|
8
|
+
return file.toLowerCase() === "skill.md" ? parts.at(-2) ?? "" : file.replace(/\.md$/i, "");
|
|
9
|
+
}
|
|
10
|
+
export async function resolveSkillResources(cwd) {
|
|
11
|
+
const agentDir = getAgentDir();
|
|
12
|
+
const settingsManager = SettingsManager.fromStorage({
|
|
13
|
+
withLock(scope, read) {
|
|
14
|
+
const path = scope === "global" ? join(agentDir, "settings.json") : join(cwd, ".pi", "settings.json");
|
|
15
|
+
let text;
|
|
16
|
+
try {
|
|
17
|
+
text = readFileSync(path, "utf8");
|
|
18
|
+
}
|
|
19
|
+
catch (error) {
|
|
20
|
+
if (error.code !== "ENOENT")
|
|
21
|
+
throw error;
|
|
22
|
+
}
|
|
23
|
+
// This storage is intentionally read-only: no lock files or migrated settings are persisted.
|
|
24
|
+
read(text);
|
|
25
|
+
},
|
|
26
|
+
});
|
|
27
|
+
const errors = settingsManager.drainErrors();
|
|
28
|
+
if (errors.length)
|
|
29
|
+
throw new Error(`Cannot discover skills: ${errors.map(e => `${e.scope} settings: ${e.error.message}`).join("; ")}`);
|
|
30
|
+
const manager = new DefaultPackageManager({ cwd, agentDir, settingsManager });
|
|
31
|
+
const resolved = await manager.resolve(async () => "skip");
|
|
32
|
+
// Pi has already applied package identity, scope, manifest and settings filters and precedence.
|
|
33
|
+
const seen = new Set();
|
|
34
|
+
const skills = resolved.skills.filter(resource => resource.enabled).flatMap(resource => {
|
|
35
|
+
try {
|
|
36
|
+
const path = statSync(resource.path).isDirectory() ? join(resource.path, "SKILL.md") : resource.path;
|
|
37
|
+
return statSync(path).isFile() ? [{ ...resource, path }] : [];
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
return [];
|
|
41
|
+
}
|
|
42
|
+
}).filter(resource => {
|
|
43
|
+
// Reserve identity before parsing: a malformed local override cannot reveal a wider package ceiling.
|
|
44
|
+
const name = skillResourceName(resource.path);
|
|
45
|
+
if (seen.has(name))
|
|
46
|
+
return false;
|
|
47
|
+
seen.add(name);
|
|
48
|
+
return true;
|
|
49
|
+
});
|
|
50
|
+
return { skills, configured: manager.listConfiguredPackages() };
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=skill-resources.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill-resources.js","sourceRoot":"","sources":["../src/skill-resources.ts"],"names":[],"mappings":"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"}
|
|
@@ -44,8 +44,8 @@ export async function runInit(
|
|
|
44
44
|
const packages = await discoverSkillPackages(ctx.cwd);
|
|
45
45
|
if (packages.length === 0) {
|
|
46
46
|
ctx.ui.notify(
|
|
47
|
-
"grants: no
|
|
48
|
-
"`
|
|
47
|
+
"grants: no enabled configured skills or unregistered npm skill packages found. Install and enable one — e.g. " +
|
|
48
|
+
"`pi install npm:principal-pi-skills` — then run /grants init again.",
|
|
49
49
|
"warning",
|
|
50
50
|
);
|
|
51
51
|
return;
|
|
@@ -55,6 +55,7 @@ export async function runInit(
|
|
|
55
55
|
const outcome = await applyInit(plan);
|
|
56
56
|
const lines = [
|
|
57
57
|
`grants: ${plan.skills.length} definition(s) from ${packages.map((p) => `${p.name}@${p.version}`).join(", ")}`,
|
|
58
|
+
` using ${plan.skills.filter(s => s.referenced).length} enabled definition(s) in place; no copies`,
|
|
58
59
|
` wrote ${outcome.written.length}, kept ${outcome.kept.length} already present` +
|
|
59
60
|
`${outcome.failed.length > 0 ? `, ${outcome.failed.length} FAILED` : ""}`,
|
|
60
61
|
];
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pi-daddy",
|
|
3
|
-
"version": "0.27.
|
|
3
|
+
"version": "0.27.2",
|
|
4
4
|
"description": "Capability governance for pi sub-agents: spawn Agent Skills (SKILL.md) definitions whose allowed-tools becomes a grant that can only narrow going down a delegation tree, enforced by pi's own --tools allowlist, with an append-only ledger.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"pi-package",
|
|
@@ -276,10 +276,12 @@
|
|
|
276
276
|
"@types/node": ">=22",
|
|
277
277
|
"typebox": ">=1.0.0"
|
|
278
278
|
},
|
|
279
|
-
"
|
|
279
|
+
"dependencies": {
|
|
280
280
|
"@earendil-works/pi-coding-agent": ">=0.83.0",
|
|
281
|
+
"typebox": ">=1.0.0"
|
|
282
|
+
},
|
|
283
|
+
"devDependencies": {
|
|
281
284
|
"@types/node": "^22.0.0",
|
|
282
|
-
"typebox": ">=1.0.0",
|
|
283
285
|
"typescript": "^5.7.0"
|
|
284
286
|
}
|
|
285
287
|
}
|
package/src/catalog.ts
CHANGED
|
@@ -18,8 +18,8 @@
|
|
|
18
18
|
* supported for hand-authored grants; `deriveOwnGrant` already matches them by bare name.
|
|
19
19
|
*/
|
|
20
20
|
|
|
21
|
-
import {
|
|
22
|
-
import {
|
|
21
|
+
import { getAgentDir } from "@earendil-works/pi-coding-agent";
|
|
22
|
+
import { resolveSkillResources, skillResourceName } from "./skill-resources.ts";
|
|
23
23
|
import { join } from "node:path";
|
|
24
24
|
import { loadDefinitions, type SkillDefinition } from "./definitions.ts";
|
|
25
25
|
import { PI_BUILTIN_TOOLS, WILDCARD } from "./pi-tools.ts";
|
|
@@ -55,45 +55,15 @@ export function classifyToolNames(observed: string[]): CatalogEntry[] {
|
|
|
55
55
|
|
|
56
56
|
/** Skill roots pi discovers, project first. */
|
|
57
57
|
export function skillDirs(cwd: string): string[] {
|
|
58
|
-
return [join(cwd, ".pi", "skills"), join(
|
|
58
|
+
return [join(cwd, ".pi", "skills"), join(getAgentDir(), "skills")];
|
|
59
59
|
}
|
|
60
60
|
|
|
61
|
-
/**
|
|
62
|
-
* Discover skills: a directory containing `SKILL.md` is one skill named after the directory; a top-level
|
|
63
|
-
* `.md` file is a skill named after the file. Mirrors pi's documented convention.
|
|
64
|
-
*
|
|
65
|
-
* Directories are not descended into beyond one level, matching pi's rule that a directory containing
|
|
66
|
-
* `SKILL.md` is a single skill rather than a tree to explore.
|
|
67
|
-
*/
|
|
61
|
+
/** Enumerate the same enabled Pi resource paths as definitions, preserving resolver precedence. */
|
|
68
62
|
export async function loadSkills(cwd: string): Promise<CatalogEntry[]> {
|
|
69
63
|
const found = new Map<string, CatalogEntry>();
|
|
70
|
-
for (const
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
names = await readdir(dir);
|
|
74
|
-
} catch {
|
|
75
|
-
continue; // absent skill root is normal
|
|
76
|
-
}
|
|
77
|
-
for (const name of names.sort()) {
|
|
78
|
-
const path = join(dir, name);
|
|
79
|
-
try {
|
|
80
|
-
const info = await stat(path);
|
|
81
|
-
if (info.isDirectory()) {
|
|
82
|
-
const inner = await readdir(path).catch(() => [] as string[]);
|
|
83
|
-
if (inner.includes("SKILL.md") && !found.has(name)) {
|
|
84
|
-
found.set(name, { capability: `skill:${name}`, kind: "skill", source: path });
|
|
85
|
-
}
|
|
86
|
-
} else if (name.endsWith(".md")) {
|
|
87
|
-
const skill = name.replace(/\.md$/, "");
|
|
88
|
-
if (!found.has(skill)) {
|
|
89
|
-
found.set(skill, { capability: `skill:${skill}`, kind: "skill", source: path });
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
} catch {
|
|
93
|
-
// An unreadable entry is simply not catalogued; it therefore cannot be granted, which is the
|
|
94
|
-
// fail-closed direction.
|
|
95
|
-
}
|
|
96
|
-
}
|
|
64
|
+
for (const { path } of (await resolveSkillResources(cwd)).skills) {
|
|
65
|
+
const name = skillResourceName(path);
|
|
66
|
+
if (!found.has(name)) found.set(name, { capability: `skill:${name}`, kind: "skill", source: path });
|
|
97
67
|
}
|
|
98
68
|
return [...found.values()];
|
|
99
69
|
}
|