@corenel/harness 0.19.0 → 0.21.0

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 (163) hide show
  1. package/dist/chat/engine.d.ts +47 -0
  2. package/dist/chat/engine.d.ts.map +1 -0
  3. package/dist/chat/engine.js +803 -0
  4. package/dist/chat/engine.js.map +1 -0
  5. package/dist/chat/events.d.ts +5 -0
  6. package/dist/chat/events.d.ts.map +1 -0
  7. package/dist/chat/events.js +100 -0
  8. package/dist/chat/events.js.map +1 -0
  9. package/dist/chat/index.d.ts +9 -0
  10. package/dist/chat/index.d.ts.map +1 -0
  11. package/dist/chat/index.js +9 -0
  12. package/dist/chat/index.js.map +1 -0
  13. package/dist/chat/liveFold.d.ts +10 -0
  14. package/dist/chat/liveFold.d.ts.map +1 -0
  15. package/dist/chat/liveFold.js +31 -0
  16. package/dist/chat/liveFold.js.map +1 -0
  17. package/dist/chat/messages.d.ts +20 -0
  18. package/dist/chat/messages.d.ts.map +1 -0
  19. package/dist/chat/messages.js +56 -0
  20. package/dist/chat/messages.js.map +1 -0
  21. package/dist/chat/persist.d.ts +39 -0
  22. package/dist/chat/persist.d.ts.map +1 -0
  23. package/dist/chat/persist.js +107 -0
  24. package/dist/chat/persist.js.map +1 -0
  25. package/dist/chat/runWatchdog.d.ts +21 -0
  26. package/dist/chat/runWatchdog.d.ts.map +1 -0
  27. package/dist/chat/runWatchdog.js +92 -0
  28. package/dist/chat/runWatchdog.js.map +1 -0
  29. package/dist/chat/stitch.d.ts +26 -0
  30. package/dist/chat/stitch.d.ts.map +1 -0
  31. package/dist/chat/stitch.js +40 -0
  32. package/dist/chat/stitch.js.map +1 -0
  33. package/dist/chat/types.d.ts +163 -0
  34. package/dist/chat/types.d.ts.map +1 -0
  35. package/dist/chat/types.js +2 -0
  36. package/dist/chat/types.js.map +1 -0
  37. package/dist/core/loop.d.ts.map +1 -1
  38. package/dist/core/loop.js +50 -15
  39. package/dist/core/loop.js.map +1 -1
  40. package/dist/core/spawn.d.ts +17 -0
  41. package/dist/core/spawn.d.ts.map +1 -1
  42. package/dist/core/spawn.js +48 -14
  43. package/dist/core/spawn.js.map +1 -1
  44. package/dist/fileSchema.js +1 -1
  45. package/dist/guardrail/builtins.d.ts.map +1 -1
  46. package/dist/guardrail/builtins.js +11 -6
  47. package/dist/guardrail/builtins.js.map +1 -1
  48. package/dist/guardrail/glob.d.ts +1 -2
  49. package/dist/guardrail/glob.d.ts.map +1 -1
  50. package/dist/guardrail/glob.js +4 -29
  51. package/dist/guardrail/glob.js.map +1 -1
  52. package/dist/guardrail/guardrail.d.ts +8 -0
  53. package/dist/guardrail/guardrail.d.ts.map +1 -1
  54. package/dist/guardrail/guardrail.js +12 -0
  55. package/dist/guardrail/guardrail.js.map +1 -1
  56. package/dist/guardrail/index.d.ts +1 -1
  57. package/dist/guardrail/index.d.ts.map +1 -1
  58. package/dist/guardrail/index.js +1 -1
  59. package/dist/guardrail/index.js.map +1 -1
  60. package/dist/guardrail/serialize.d.ts.map +1 -1
  61. package/dist/guardrail/serialize.js +3 -0
  62. package/dist/guardrail/serialize.js.map +1 -1
  63. package/dist/guardrail/validate.d.ts.map +1 -1
  64. package/dist/guardrail/validate.js +4 -0
  65. package/dist/guardrail/validate.js.map +1 -1
  66. package/dist/install/lockfile.d.ts +25 -5
  67. package/dist/install/lockfile.d.ts.map +1 -1
  68. package/dist/install/lockfile.js +60 -4
  69. package/dist/install/lockfile.js.map +1 -1
  70. package/dist/install/nameEntries.d.ts +28 -0
  71. package/dist/install/nameEntries.d.ts.map +1 -0
  72. package/dist/install/nameEntries.js +198 -0
  73. package/dist/install/nameEntries.js.map +1 -0
  74. package/dist/install/pinRefusal.d.ts +4 -0
  75. package/dist/install/pinRefusal.d.ts.map +1 -0
  76. package/dist/install/pinRefusal.js +19 -0
  77. package/dist/install/pinRefusal.js.map +1 -0
  78. package/dist/install/requirements.d.ts +7 -0
  79. package/dist/install/requirements.d.ts.map +1 -0
  80. package/dist/install/requirements.js +23 -0
  81. package/dist/install/requirements.js.map +1 -0
  82. package/dist/orchestrator/sidecarTools.d.ts.map +1 -1
  83. package/dist/orchestrator/sidecarTools.js +8 -4
  84. package/dist/orchestrator/sidecarTools.js.map +1 -1
  85. package/dist/prompts/fitProject.d.ts +6 -0
  86. package/dist/prompts/fitProject.d.ts.map +1 -0
  87. package/dist/prompts/fitProject.js +6 -0
  88. package/dist/prompts/fitProject.js.map +1 -0
  89. package/dist/prompts/library/defaults.generated.js +7 -7
  90. package/dist/prompts/library/defaults.generated.js.map +1 -1
  91. package/dist/prompts/library/index.d.ts +2 -1
  92. package/dist/prompts/library/index.d.ts.map +1 -1
  93. package/dist/prompts/library/index.js +11 -16
  94. package/dist/prompts/library/index.js.map +1 -1
  95. package/dist/providers/egressGuard.d.ts +17 -0
  96. package/dist/providers/egressGuard.d.ts.map +1 -0
  97. package/dist/providers/egressGuard.js +26 -0
  98. package/dist/providers/egressGuard.js.map +1 -0
  99. package/dist/providers/gateway.d.ts +34 -0
  100. package/dist/providers/gateway.d.ts.map +1 -1
  101. package/dist/providers/gateway.js +43 -2
  102. package/dist/providers/gateway.js.map +1 -1
  103. package/dist/sidecar/askUserBroker.d.ts +40 -0
  104. package/dist/sidecar/askUserBroker.d.ts.map +1 -0
  105. package/dist/sidecar/askUserBroker.js +103 -0
  106. package/dist/sidecar/askUserBroker.js.map +1 -0
  107. package/dist/sidecar/fleetJwe.d.ts +25 -0
  108. package/dist/sidecar/fleetJwe.d.ts.map +1 -0
  109. package/dist/sidecar/fleetJwe.js +115 -0
  110. package/dist/sidecar/fleetJwe.js.map +1 -0
  111. package/dist/sidecar/fleetJws.d.ts +15 -0
  112. package/dist/sidecar/fleetJws.d.ts.map +1 -0
  113. package/dist/sidecar/fleetJws.js +47 -0
  114. package/dist/sidecar/fleetJws.js.map +1 -0
  115. package/dist/sidecar/host.d.ts +81 -1
  116. package/dist/sidecar/host.d.ts.map +1 -1
  117. package/dist/sidecar/host.js +227 -6
  118. package/dist/sidecar/host.js.map +1 -1
  119. package/dist/sidecar/identity.d.ts +9 -0
  120. package/dist/sidecar/identity.d.ts.map +1 -1
  121. package/dist/sidecar/memberGate.d.ts.map +1 -1
  122. package/dist/sidecar/memberGate.js +5 -0
  123. package/dist/sidecar/memberGate.js.map +1 -1
  124. package/dist/sidecar/server.d.ts +61 -10
  125. package/dist/sidecar/server.d.ts.map +1 -1
  126. package/dist/sidecar/server.js +592 -15
  127. package/dist/sidecar/server.js.map +1 -1
  128. package/dist/skills.d.ts +18 -0
  129. package/dist/skills.d.ts.map +1 -1
  130. package/dist/skills.js +93 -12
  131. package/dist/skills.js.map +1 -1
  132. package/dist/systemParts.d.ts +0 -1
  133. package/dist/systemParts.d.ts.map +1 -1
  134. package/dist/systemParts.js +6 -2
  135. package/dist/systemParts.js.map +1 -1
  136. package/dist/todos.d.ts +8 -0
  137. package/dist/todos.d.ts.map +1 -1
  138. package/dist/todos.js +21 -17
  139. package/dist/todos.js.map +1 -1
  140. package/dist/tools/builtins.d.ts +8 -0
  141. package/dist/tools/builtins.d.ts.map +1 -1
  142. package/dist/tools/builtins.js +21 -1
  143. package/dist/tools/builtins.js.map +1 -1
  144. package/dist/tools/namespaces.d.ts +8 -0
  145. package/dist/tools/namespaces.d.ts.map +1 -1
  146. package/dist/tools/namespaces.js +18 -0
  147. package/dist/tools/namespaces.js.map +1 -1
  148. package/dist/tools/skillTool.d.ts.map +1 -1
  149. package/dist/tools/skillTool.js +22 -1
  150. package/dist/tools/skillTool.js.map +1 -1
  151. package/dist/tools/toolFacts.d.ts +9 -0
  152. package/dist/tools/toolFacts.d.ts.map +1 -0
  153. package/dist/tools/toolFacts.js +19 -0
  154. package/dist/tools/toolFacts.js.map +1 -0
  155. package/dist/tools/toolSearch.d.ts +25 -6
  156. package/dist/tools/toolSearch.d.ts.map +1 -1
  157. package/dist/tools/toolSearch.js +62 -14
  158. package/dist/tools/toolSearch.js.map +1 -1
  159. package/dist/tools/workflowTool.d.ts +34 -0
  160. package/dist/tools/workflowTool.d.ts.map +1 -0
  161. package/dist/tools/workflowTool.js +122 -0
  162. package/dist/tools/workflowTool.js.map +1 -0
  163. package/package.json +8 -4
@@ -1 +1 @@
1
- {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../guardrail/validate.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAoD,MAAM,mBAAmB,CAAC;AA2BlG,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AA8BD,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,sBAAsB,CA2ErE"}
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../guardrail/validate.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAoD,MAAM,mBAAmB,CAAC;AA2BlG,MAAM,WAAW,sBAAsB;IACrC,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAgCD,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,sBAAsB,CA4ErE"}
@@ -36,6 +36,8 @@ const POLICY_KEYS = new Set([
36
36
  'version', 'name', 'description', 'onViolation', 'maxTurns', 'maxToolCalls',
37
37
  'tools', 'mustCall', 'permissions', 'defaultPermission', 'mutatingDefault',
38
38
  'unattended', 'parkTimeoutMs', 'pushWaitMs', 'skills',
39
+ // A managed agent's fleet workflows grant (run_workflow): a crew POLICY.yaml carries it (packages/crew/policy.ts).
40
+ 'workflows',
39
41
  // Team don'ts (Part F): parsePolicyYaml emits them and the browser registers
40
42
  // every crew policy through here, so they must be recognized (not enforced).
41
43
  'donts', 'donts_model',
@@ -93,6 +95,8 @@ export function validatePolicy(input) {
93
95
  errors.push('Policy.mustCall must be a string[].');
94
96
  if (o.skills !== undefined && !isStringArray(o.skills))
95
97
  errors.push('Policy.skills must be a string[].');
98
+ if (o.workflows !== undefined && !isStringArray(o.workflows))
99
+ errors.push('Policy.workflows must be a string[].');
96
100
  if (o.donts !== undefined && !isStringArray(o.donts))
97
101
  errors.push('Policy.donts must be a string[].');
98
102
  if (o.donts_model !== undefined && typeof o.donts_model !== 'string')
@@ -1 +1 @@
1
- {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../guardrail/validate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../guardrail/validate.ts"],"names":[],"mappings":"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"}
@@ -1,14 +1,20 @@
1
- export type LockedType = 'package' | 'workflow' | 'skill' | 'node-template' | (string & {});
1
+ import type { InstalledPackageInfo } from '@corenel/protocol';
2
+ export type LockedType = 'package' | 'workflow' | 'skill' | 'agent' | (string & {});
2
3
  export interface LockedPackage {
3
4
  /** Full scoped name, e.g. "@prompd/core". */
4
5
  name: string;
5
6
  /** EXACT resolved version. A range here would defeat the point. */
6
7
  version: string;
7
8
  type: LockedType;
8
- /** Entry-relative paths the install wrote. Optional: node-templates write none,
9
- * and an older lockfile may predate the field. Sorted when present, so the
10
- * serialization stays canonical. */
9
+ /** Entry-relative paths the install wrote. Optional: an older lockfile may predate the field.
10
+ * Sorted when present, so the serialization stays canonical. */
11
11
  files?: string[];
12
+ /** "sha256:<hex>" of the archive this pin installed. Absent only on entries
13
+ * written before digests existed; the next install of that package fills it. */
14
+ digest?: string;
15
+ /** The crew name an agent was installed under when it is not the package's own
16
+ * (install `as`). Lets a lockfile restore re-link it under that name. */
17
+ as?: string;
12
18
  }
13
19
  export interface Lockfile {
14
20
  lockfileVersion: 1;
@@ -24,7 +30,9 @@ export declare function lockfileReadPaths(): string[];
24
30
  /** Merge locks given in priority order: on a NAME collision the earlier lock
25
31
  * wins outright — every entry for that name in a later lock is dropped, even
26
32
  * at a different version — so the host's pin always shadows Prompd's for the
27
- * same package rather than the two versions coexisting. Built through
33
+ * same package rather than the two versions coexisting. The earlier lock's
34
+ * entry wins ENTIRELY, including its digest; a digest in the earlier entry
35
+ * shadows the absence of a digest in the later one. Built through
28
36
  * `withPackages` so the result stays canonical. A READ view only; never write
29
37
  * the result back. */
30
38
  export declare function mergeLocks(locks: readonly Lockfile[]): Lockfile;
@@ -35,6 +43,11 @@ export declare function emptyLock(): Lockfile;
35
43
  * Replacement is by name+version, so re-installing the same version updates its
36
44
  * file list in place rather than duplicating it, while a genuinely new version
37
45
  * is added alongside — matching how core installs to a per-version directory.
46
+ *
47
+ * Digest handling: when an incoming entry has NO digest and the lock already has
48
+ * the same name@version WITH a digest, the existing digest is preserved (a
49
+ * digest-less write must not erase a pin). An incoming entry WITH a digest still
50
+ * replaces entirely (a reinstall re-pins).
38
51
  */
39
52
  export declare function withPackages(lock: Lockfile, added: readonly LockedPackage[]): Lockfile;
40
53
  /** Drop every version of a package by name — the uninstall counterpart. */
@@ -60,6 +73,9 @@ export interface LockDiff {
60
73
  added: LockedPackage[];
61
74
  /** In `prev` but not `next`. */
62
75
  removed: LockedPackage[];
76
+ /** Present in both prev and next with the same name+version but different digest.
77
+ * Each entry is the NEXT state (from next lockfile). */
78
+ changed: LockedPackage[];
63
79
  }
64
80
  /** What changed between two lockfiles, by name+version. */
65
81
  export declare function diffLock(prev: Lockfile, next: Lockfile): LockDiff;
@@ -84,4 +100,8 @@ export declare function missingFrom(lock: Lockfile, installed: readonly {
84
100
  /** `name@version` refs for the pins, in install order — what a caller feeds back
85
101
  * to the installer to reproduce the set. */
86
102
  export declare function lockRefs(lock: Lockfile): string[];
103
+ /** Lockfile pins for the installer: "name@version" -> digest, for entries that have one. */
104
+ export declare function lockPins(lock: Lockfile): Map<string, string>;
105
+ /** Every package an install produced (the package and its dependency tree), once each. */
106
+ export declare function lockedFromInstalled(installed: InstalledPackageInfo): LockedPackage[];
87
107
  //# sourceMappingURL=lockfile.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"lockfile.d.ts","sourceRoot":"","sources":["../../install/lockfile.ts"],"names":[],"mappings":"AAyBA,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,UAAU,GAAG,OAAO,GAAG,eAAe,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAE5F,MAAM,WAAW,aAAa;IAC5B,6CAA6C;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,mEAAmE;IACnE,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,UAAU,CAAC;IACjB;;wCAEoC;IACpC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,QAAQ;IACvB,eAAe,EAAE,CAAC,CAAC;IACnB,QAAQ,EAAE,aAAa,EAAE,CAAC;CAC3B;AAED,eAAO,MAAM,gBAAgB,EAAG,CAAU,CAAC;AAE3C,iFAAiF;AACjF,eAAO,MAAM,aAAa,qBAAqB,CAAC;AAEhD,uFAAuF;AACvF,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED,kFAAkF;AAClF,wBAAgB,iBAAiB,IAAI,MAAM,EAAE,CAE5C;AAED;;;;;uBAKuB;AACvB,wBAAgB,UAAU,CAAC,KAAK,EAAE,SAAS,QAAQ,EAAE,GAAG,QAAQ,CAS/D;AAED,wBAAgB,SAAS,IAAI,QAAQ,CAEpC;AAwBD;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,aAAa,EAAE,GAAG,QAAQ,CAKtF;AAED,2EAA2E;AAC3E,wBAAgB,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ,CAKrE;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAMpD;AAMD;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAqBvD;AAED,MAAM,WAAW,QAAQ;IACvB,gCAAgC;IAChC,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,gCAAgC;IAChC,OAAO,EAAE,aAAa,EAAE,CAAC;CAC1B;AAED,2DAA2D;AAC3D,wBAAgB,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAOjE;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAAE,GAAG,OAAO,CAG9G;AAED,iFAAiF;AACjF,wBAAgB,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAAE,GAAG,aAAa,EAAE,CAGpH;AAED;4CAC4C;AAC5C,wBAAgB,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,EAAE,CAEjD"}
1
+ {"version":3,"file":"lockfile.d.ts","sourceRoot":"","sources":["../../install/lockfile.ts"],"names":[],"mappings":"AAwBA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAE9D,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,UAAU,GAAG,OAAO,GAAG,OAAO,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;AAIpF,MAAM,WAAW,aAAa;IAC5B,6CAA6C;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,mEAAmE;IACnE,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,UAAU,CAAC;IACjB;oEACgE;IAChE,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB;oFACgF;IAChF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;6EACyE;IACzE,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAKD,MAAM,WAAW,QAAQ;IACvB,eAAe,EAAE,CAAC,CAAC;IACnB,QAAQ,EAAE,aAAa,EAAE,CAAC;CAC3B;AAED,eAAO,MAAM,gBAAgB,EAAG,CAAU,CAAC;AAE3C,iFAAiF;AACjF,eAAO,MAAM,aAAa,qBAAqB,CAAC;AAEhD,uFAAuF;AACvF,wBAAgB,YAAY,IAAI,MAAM,CAErC;AAED,kFAAkF;AAClF,wBAAgB,iBAAiB,IAAI,MAAM,EAAE,CAE5C;AAED;;;;;;;uBAOuB;AACvB,wBAAgB,UAAU,CAAC,KAAK,EAAE,SAAS,QAAQ,EAAE,GAAG,QAAQ,CAS/D;AAED,wBAAgB,SAAS,IAAI,QAAQ,CAEpC;AA0BD;;;;;;;;;;;GAWG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,aAAa,EAAE,GAAG,QAAQ,CAmBtF;AAED,2EAA2E;AAC3E,wBAAgB,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ,CAKrE;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAMpD;AAMD;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAuBvD;AAED,MAAM,WAAW,QAAQ;IACvB,gCAAgC;IAChC,KAAK,EAAE,aAAa,EAAE,CAAC;IACvB,gCAAgC;IAChC,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB;4DACwD;IACxD,OAAO,EAAE,aAAa,EAAE,CAAC;CAC1B;AAED,2DAA2D;AAC3D,wBAAgB,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAWjE;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAAE,GAAG,OAAO,CAG9G;AAED,iFAAiF;AACjF,wBAAgB,WAAW,CAAC,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAAE,GAAG,aAAa,EAAE,CAGpH;AAED;4CAC4C;AAC5C,wBAAgB,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,EAAE,CAEjD;AAED,4FAA4F;AAC5F,wBAAgB,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAI5D;AAED,0FAA0F;AAC1F,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,oBAAoB,GAAG,aAAa,EAAE,CAYpF"}
@@ -21,6 +21,9 @@
21
21
  * from @prompd/core, to keep this module free of that dependency; unknown kinds
22
22
  * off the wire are preserved rather than rejected (see parseLock). */
23
23
  import { stateDirName, stateReadDirs } from '@corenel/protocol';
24
+ const DIGEST_RE = /^sha256:[0-9a-f]{64}$/;
25
+ /** A valid `as` name: the same rule name entries use. */
26
+ const AS_RE = /^[A-Za-z0-9][A-Za-z0-9_-]*$/;
24
27
  export const LOCKFILE_VERSION = 1;
25
28
  /** The lockfile's name. It carries Prompd's name because it names the FORMAT. */
26
29
  export const LOCKFILE_NAME = 'prompd-lock.json';
@@ -35,7 +38,9 @@ export function lockfileReadPaths() {
35
38
  /** Merge locks given in priority order: on a NAME collision the earlier lock
36
39
  * wins outright — every entry for that name in a later lock is dropped, even
37
40
  * at a different version — so the host's pin always shadows Prompd's for the
38
- * same package rather than the two versions coexisting. Built through
41
+ * same package rather than the two versions coexisting. The earlier lock's
42
+ * entry wins ENTIRELY, including its digest; a digest in the earlier entry
43
+ * shadows the absence of a digest in the later one. Built through
39
44
  * `withPackages` so the result stays canonical. A READ view only; never write
40
45
  * the result back. */
41
46
  export function mergeLocks(locks) {
@@ -69,6 +74,8 @@ function normalize(p) {
69
74
  version: p.version,
70
75
  type: p.type,
71
76
  ...(p.files && p.files.length ? { files: [...p.files].sort() } : {}),
77
+ ...(p.digest && DIGEST_RE.test(p.digest) ? { digest: p.digest } : {}),
78
+ ...(p.type === 'agent' && p.as && AS_RE.test(p.as) ? { as: p.as } : {}),
72
79
  };
73
80
  }
74
81
  /**
@@ -77,13 +84,32 @@ function normalize(p) {
77
84
  * Replacement is by name+version, so re-installing the same version updates its
78
85
  * file list in place rather than duplicating it, while a genuinely new version
79
86
  * is added alongside — matching how core installs to a per-version directory.
87
+ *
88
+ * Digest handling: when an incoming entry has NO digest and the lock already has
89
+ * the same name@version WITH a digest, the existing digest is preserved (a
90
+ * digest-less write must not erase a pin). An incoming entry WITH a digest still
91
+ * replaces entirely (a reinstall re-pins).
80
92
  */
81
93
  export function withPackages(lock, added) {
82
94
  const merged = new Map();
83
95
  for (const p of lock.packages)
84
96
  merged.set(keyOf(p), normalize(p));
85
- for (const p of added)
86
- merged.set(keyOf(p), normalize(p));
97
+ for (const p of added) {
98
+ const key = keyOf(p);
99
+ const normalized = normalize(p);
100
+ // If incoming entry has no digest but existing does, preserve the existing digest
101
+ if (!normalized.digest && merged.has(key)) {
102
+ const existing = merged.get(key);
103
+ if (existing.digest) {
104
+ normalized.digest = existing.digest;
105
+ }
106
+ }
107
+ // Likewise an `as` name: a re-pin that does not name one (say, as another
108
+ // package's dependency) must not forget the name the agent is linked under.
109
+ if (!normalized.as && merged.get(key)?.as)
110
+ normalized.as = merged.get(key).as;
111
+ merged.set(key, normalized);
112
+ }
87
113
  return { lockfileVersion: LOCKFILE_VERSION, packages: [...merged.values()].sort(byIdentity) };
88
114
  }
89
115
  /** Drop every version of a package by name — the uninstall counterpart. */
@@ -135,7 +161,7 @@ export function parseLock(text) {
135
161
  for (const raw of parsed.packages) {
136
162
  if (!isRecord(raw))
137
163
  continue;
138
- const { name, version, type, files } = raw;
164
+ const { name, version, type, files, digest, as } = raw;
139
165
  if (typeof name !== 'string' || !name)
140
166
  continue;
141
167
  if (typeof version !== 'string' || !version)
@@ -145,6 +171,8 @@ export function parseLock(text) {
145
171
  version,
146
172
  type: typeof type === 'string' ? type : 'package',
147
173
  ...(Array.isArray(files) ? { files: files.filter((f) => typeof f === 'string') } : {}),
174
+ ...(typeof digest === 'string' ? { digest } : {}),
175
+ ...(typeof as === 'string' ? { as } : {}),
148
176
  }));
149
177
  }
150
178
  return { lockfileVersion: LOCKFILE_VERSION, packages: packages.sort(byIdentity) };
@@ -153,9 +181,13 @@ export function parseLock(text) {
153
181
  export function diffLock(prev, next) {
154
182
  const before = new Set(prev.packages.map(keyOf));
155
183
  const after = new Set(next.packages.map(keyOf));
184
+ const prevByKey = new Map(prev.packages.map((p) => [keyOf(p), p]));
156
185
  return {
157
186
  added: next.packages.filter((p) => !before.has(keyOf(p))).sort(byIdentity),
158
187
  removed: prev.packages.filter((p) => !after.has(keyOf(p))).sort(byIdentity),
188
+ changed: next.packages
189
+ .filter((p) => before.has(keyOf(p)) && prevByKey.get(keyOf(p))?.digest !== p.digest)
190
+ .sort(byIdentity),
159
191
  };
160
192
  }
161
193
  /**
@@ -181,4 +213,28 @@ export function missingFrom(lock, installed) {
181
213
  export function lockRefs(lock) {
182
214
  return [...lock.packages].sort(byIdentity).map(keyOf);
183
215
  }
216
+ /** Lockfile pins for the installer: "name@version" -> digest, for entries that have one. */
217
+ export function lockPins(lock) {
218
+ const out = new Map();
219
+ for (const p of lock.packages)
220
+ if (p.digest)
221
+ out.set(keyOf(p), p.digest);
222
+ return out;
223
+ }
224
+ /** Every package an install produced (the package and its dependency tree), once each. */
225
+ export function lockedFromInstalled(installed) {
226
+ const out = [];
227
+ const seen = new Set();
228
+ const walk = (p) => {
229
+ const key = keyOf(p);
230
+ if (seen.has(key))
231
+ return;
232
+ seen.add(key);
233
+ out.push(normalize({ name: p.name, version: p.version, type: p.type, ...(p.files.length ? { files: p.files } : {}), digest: p.digest }));
234
+ for (const d of p.dependencies)
235
+ walk(d);
236
+ };
237
+ walk(installed);
238
+ return out;
239
+ }
184
240
  //# sourceMappingURL=lockfile.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"lockfile.js","sourceRoot":"","sources":["../../install/lockfile.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lockfile.js","sourceRoot":"","sources":["../../install/lockfile.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH;;sEAEsE;AACtE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAKhE,MAAM,SAAS,GAAG,uBAAuB,CAAC;AAmB1C,yDAAyD;AACzD,MAAM,KAAK,GAAG,6BAA6B,CAAC;AAO5C,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAU,CAAC;AAE3C,iFAAiF;AACjF,MAAM,CAAC,MAAM,aAAa,GAAG,kBAAkB,CAAC;AAEhD,uFAAuF;AACvF,MAAM,UAAU,YAAY;IAC1B,OAAO,GAAG,YAAY,EAAE,IAAI,aAAa,EAAE,CAAC;AAC9C,CAAC;AAED,kFAAkF;AAClF,MAAM,UAAU,iBAAiB;IAC/B,OAAO,aAAa,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,aAAa,EAAE,CAAC,CAAC;AAC7D,CAAC;AAED;;;;;;;uBAOuB;AACvB,MAAM,UAAU,UAAU,CAAC,KAA0B;IACnD,IAAI,GAAG,GAAG,SAAS,EAAE,CAAC;IACtB,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IACpC,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,MAAM,IAAI,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9D,GAAG,GAAG,YAAY,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAC9B,KAAK,MAAM,CAAC,IAAI,IAAI;YAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAC9C,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,SAAS;IACvB,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;AAC7D,CAAC;AAED;;mDAEmD;AACnD,SAAS,KAAK,CAAC,CAAoC;IACjD,OAAO,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;AAClC,CAAC;AAED;qDACqD;AACrD,SAAS,UAAU,CAAC,CAAgB,EAAE,CAAgB;IACpD,OAAO,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;AAC/F,CAAC;AAED,SAAS,SAAS,CAAC,CAAgB;IACjC,OAAO;QACL,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,OAAO,EAAE,CAAC,CAAC,OAAO;QAClB,IAAI,EAAE,CAAC,CAAC,IAAI;QACZ,GAAG,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACpE,GAAG,CAAC,CAAC,CAAC,MAAM,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrE,GAAG,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,CAAC,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACxE,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,YAAY,CAAC,IAAc,EAAE,KAA+B;IAC1E,MAAM,MAAM,GAAG,IAAI,GAAG,EAAyB,CAAC;IAChD,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ;QAAE,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;IAClE,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE,CAAC;QACtB,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACrB,MAAM,UAAU,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QAChC,kFAAkF;QAClF,IAAI,CAAC,UAAU,CAAC,MAAM,IAAI,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAC1C,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC;YAClC,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;gBACpB,UAAU,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;YACtC,CAAC;QACH,CAAC;QACD,0EAA0E;QAC1E,4EAA4E;QAC5E,IAAI,CAAC,UAAU,CAAC,EAAE,IAAI,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,EAAE;YAAE,UAAU,CAAC,EAAE,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAE,CAAC,EAAE,CAAC;QAC/E,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IAC9B,CAAC;IACD,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,QAAQ,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;AAChG,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,cAAc,CAAC,IAAc,EAAE,IAAY;IACzD,OAAO;QACL,eAAe,EAAE,gBAAgB;QACjC,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;KACvF,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,IAAc;IAC1C,MAAM,SAAS,GAAa;QAC1B,eAAe,EAAE,gBAAgB;QACjC,QAAQ,EAAE,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;KAC7D,CAAC;IACF,OAAO,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;AACnD,CAAC;AAED,SAAS,QAAQ,CAAC,CAAU;IAC1B,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAClE,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,IAAI,CAAC;IAAC,CAAC;IACzD,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,IAAI,MAAM,CAAC,eAAe,KAAK,gBAAgB;QAAE,OAAO,IAAI,CAAC;IAC7D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IAEjD,MAAM,QAAQ,GAAoB,EAAE,CAAC;IACrC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QAClC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;YAAE,SAAS;QAC7B,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,GAAG,GAAG,CAAC;QACvD,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,IAAI;YAAE,SAAS;QAChD,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,CAAC,OAAO;YAAE,SAAS;QACtD,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC;YACtB,IAAI;YACJ,OAAO;YACP,IAAI,EAAE,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;YACjD,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,OAAO,CAAC,KAAK,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACnG,GAAG,CAAC,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACjD,GAAG,CAAC,OAAO,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC1C,CAAC,CAAC,CAAC;IACN,CAAC;IACD,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,QAAQ,EAAE,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;AACpF,CAAC;AAYD,2DAA2D;AAC3D,MAAM,UAAU,QAAQ,CAAC,IAAc,EAAE,IAAc;IACrD,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;IACjD,MAAM,KAAK,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;IAChD,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IACnE,OAAO;QACL,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;QAC1E,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;QAC3E,OAAO,EAAE,IAAI,CAAC,QAAQ;aACnB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,KAAK,CAAC,CAAC,MAAM,CAAC;aACnF,IAAI,CAAC,UAAU,CAAC;KACpB,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,aAAa,CAAC,IAAc,EAAE,SAAuD;IACnG,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3C,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACxD,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,WAAW,CAAC,IAAc,EAAE,SAAuD;IACjG,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3C,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAC3E,CAAC;AAED;4CAC4C;AAC5C,MAAM,UAAU,QAAQ,CAAC,IAAc;IACrC,OAAO,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACxD,CAAC;AAED,4FAA4F;AAC5F,MAAM,UAAU,QAAQ,CAAC,IAAc;IACrC,MAAM,GAAG,GAAG,IAAI,GAAG,EAAkB,CAAC;IACtC,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ;QAAE,IAAI,CAAC,CAAC,MAAM;YAAE,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC;IACzE,OAAO,GAAG,CAAC;AACb,CAAC;AAED,0FAA0F;AAC1F,MAAM,UAAU,mBAAmB,CAAC,SAA+B;IACjE,MAAM,GAAG,GAAoB,EAAE,CAAC;IAChC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,IAAI,GAAG,CAAC,CAAuB,EAAQ,EAAE;QAC7C,MAAM,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACrB,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,OAAO;QAC1B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACd,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QACzI,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,YAAY;YAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IAC1C,CAAC,CAAC;IACF,IAAI,CAAC,SAAS,CAAC,CAAC;IAChB,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,28 @@
1
+ import type { FileService, InstalledPackageInfo, NameEntryType } from '@corenel/protocol';
2
+ import { type ManagedNameEntry, type PackageRef } from '@corenel/protocol';
3
+ export declare class NameEntryConflict extends Error {
4
+ readonly path: string;
5
+ constructor(path: string, message: string);
6
+ }
7
+ export interface WrittenNameEntry {
8
+ type: NameEntryType;
9
+ name: string;
10
+ path: string;
11
+ package: string;
12
+ version: string;
13
+ }
14
+ export declare function writeNameEntries(fs: FileService, base: string, installed: InstalledPackageInfo, opts?: {
15
+ as?: string;
16
+ managed?: ManagedNameEntry;
17
+ }): Promise<WrittenNameEntry[]>;
18
+ export interface NameEntryOf {
19
+ type: NameEntryType;
20
+ name: string;
21
+ dir: string;
22
+ ref: PackageRef;
23
+ }
24
+ /** Every name entry of a type under base that points at `pkg` (any version), by the
25
+ * reference it holds rather than by the folder's name: an agent linked under an `as`
26
+ * name is found as well. Folders that cannot be listed or read are skipped. */
27
+ export declare function nameEntriesFor(fs: FileService, base: string, type: NameEntryType, pkg: string): Promise<NameEntryOf[]>;
28
+ //# sourceMappingURL=nameEntries.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nameEntries.d.ts","sourceRoot":"","sources":["../../install/nameEntries.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,WAAW,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAC1F,OAAO,EAA2F,KAAK,gBAAgB,EAAE,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAIpK,qBAAa,iBAAkB,SAAQ,KAAK;IAC1C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;gBACV,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM;CAK1C;AAED,MAAM,WAAW,gBAAgB;IAAG,IAAI,EAAE,aAAa,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE;AA8GvH,wBAAsB,gBAAgB,CACpC,EAAE,EAAE,WAAW,EACf,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,oBAAoB,EAC/B,IAAI,GAAE;IAAE,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,gBAAgB,CAAA;CAAO,GACrD,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAe7B;AAED,MAAM,WAAW,WAAW;IAAG,IAAI,EAAE,aAAa,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,UAAU,CAAA;CAAE;AAEhG;;+EAE+E;AAC/E,wBAAsB,cAAc,CAAC,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAoB5H"}
@@ -0,0 +1,198 @@
1
+ import { PACKAGE_REF_FILE, parsePackageRef, serializePackageRef, nameEntryDir, packageInstallDir } from '@corenel/protocol';
2
+ const NAME_RE = /^[A-Za-z0-9][A-Za-z0-9_-]*$/;
3
+ export class NameEntryConflict extends Error {
4
+ constructor(path, message) {
5
+ super(message);
6
+ Object.defineProperty(this, "path", {
7
+ enumerable: true,
8
+ configurable: true,
9
+ writable: true,
10
+ value: void 0
11
+ });
12
+ this.name = 'NameEntryConflict';
13
+ this.path = path;
14
+ }
15
+ }
16
+ function unscoped(name) {
17
+ const i = name.indexOf('/');
18
+ return name.startsWith('@') && i > 0 ? name.slice(i + 1) : name;
19
+ }
20
+ function flatten(top) {
21
+ const out = [];
22
+ const seen = new Set();
23
+ const walk = (p) => {
24
+ const key = `${p.name}@${p.version}`;
25
+ if (seen.has(key))
26
+ return;
27
+ seen.add(key);
28
+ out.push(p);
29
+ for (const d of p.dependencies)
30
+ walk(d);
31
+ };
32
+ walk(top);
33
+ return out;
34
+ }
35
+ async function readOrNull(fs, path) {
36
+ try {
37
+ return await fs.read(path);
38
+ }
39
+ catch {
40
+ return null;
41
+ }
42
+ }
43
+ function isNotFound(e) {
44
+ return e instanceof Error && /not found|enoent|no such|does not exist/i.test(e.message);
45
+ }
46
+ /** Whether a folder exists with something in it. An empty folder counts as absent.
47
+ * Fails CLOSED: any error other than "not found" is a conflict, never "absent". */
48
+ async function hasEntries(fs, dir) {
49
+ let exists;
50
+ try {
51
+ exists = (await fs.stat(dir)) !== null;
52
+ }
53
+ catch (e) {
54
+ if (isNotFound(e))
55
+ return false;
56
+ throw new NameEntryConflict(dir, `could not read ${dir}; not linked`);
57
+ }
58
+ if (!exists)
59
+ return false;
60
+ try {
61
+ const nodes = fs.listDir ? await fs.listDir(dir) : await fs.list(dir);
62
+ return nodes.length > 0;
63
+ }
64
+ catch {
65
+ throw new NameEntryConflict(dir, `could not read ${dir}; not linked`);
66
+ }
67
+ }
68
+ async function plan(fs, base, installed, as, managed) {
69
+ const out = [];
70
+ const byDir = new Map();
71
+ for (const p of flatten(installed)) {
72
+ if (p.type !== 'agent' && p.type !== 'skill')
73
+ continue;
74
+ const type = p.type;
75
+ if (p === installed && as && type !== 'agent')
76
+ throw new NameEntryConflict(as, `"as" renames only an agent; ${p.name} is a ${type}`);
77
+ const name = p === installed && type === 'agent' && as ? as : unscoped(p.name);
78
+ if (!NAME_RE.test(name))
79
+ throw new NameEntryConflict(name, `"${name}" is not a valid ${type} name (letters, digits, - and _, starting with a letter or digit)`);
80
+ const dir = nameEntryDir(base, type, name);
81
+ const claimed = byDir.get(dir);
82
+ if (claimed)
83
+ throw new NameEntryConflict(dir, `${p.name}@${p.version} and ${claimed} would both install as ${type} "${name}"`);
84
+ byDir.set(dir, `${p.name}@${p.version}`);
85
+ const top = p === installed && type === 'agent';
86
+ const mark = top ? managed : undefined;
87
+ const refText = await readOrNull(fs, `${dir}/${PACKAGE_REF_FILE}`);
88
+ let previous = null;
89
+ if (refText !== null) {
90
+ try {
91
+ previous = parsePackageRef(refText);
92
+ }
93
+ catch {
94
+ throw new NameEntryConflict(dir, `${dir} holds an unreadable ${PACKAGE_REF_FILE}; remove it to install ${p.name}`);
95
+ }
96
+ if (previous.managed && !mark)
97
+ throw new NameEntryConflict(dir, `${type} "${name}" is managed by the fleet; ${p.name} was not linked`);
98
+ if (!previous.managed && mark)
99
+ throw new NameEntryConflict(dir, `a local ${type} named "${name}" already exists; ${p.name} was not linked`);
100
+ if (previous.package !== p.name)
101
+ throw new NameEntryConflict(dir, `${type} "${name}" is already ${previous.package}; ${p.name} was not linked`);
102
+ }
103
+ else if (mark) {
104
+ /* A managed agent may link into a folder that holds only what an earlier
105
+ * deployment left (settings, memory). Never over a local definition. */
106
+ if ((await readOrNull(fs, `${dir}/AGENT.md`)) !== null)
107
+ throw new NameEntryConflict(dir, `a local ${type} named "${name}" already exists; ${p.name} was not linked`);
108
+ }
109
+ else if (await hasEntries(fs, dir)) {
110
+ throw new NameEntryConflict(dir, `a local ${type} named "${name}" already exists; ${p.name} was not linked`);
111
+ }
112
+ out.push({ type, name, path: `${dir}/${PACKAGE_REF_FILE}`, package: p.name, version: p.version, digest: p.digest, previous, dir, ...(mark ? { managed: mark } : {}) });
113
+ }
114
+ return out;
115
+ }
116
+ /** Every name entry of a type under base, as references. `complete` is false when any
117
+ * listing or reference could not be read: the caller must then not conclude "unused". */
118
+ async function referencesOf(fs, base, type) {
119
+ const root = nameEntryDir(base, type, '').replace(/\/$/, '');
120
+ let names;
121
+ try {
122
+ if ((await fs.stat(root)) === null)
123
+ return { refs: [], complete: true };
124
+ const nodes = fs.listDir ? await fs.listDir(root) : await fs.list(root);
125
+ names = nodes.filter((n) => n.kind === 'directory' && !n.name.startsWith('@')).map((n) => n.name);
126
+ }
127
+ catch {
128
+ return { refs: [], complete: false };
129
+ }
130
+ const refs = [];
131
+ let complete = true;
132
+ for (const n of names) {
133
+ const file = `${root}/${n}/${PACKAGE_REF_FILE}`;
134
+ try {
135
+ if ((await fs.stat(file)) === null)
136
+ continue; // a local agent or skill: no reference
137
+ refs.push(parsePackageRef(await fs.read(file)));
138
+ }
139
+ catch {
140
+ complete = false;
141
+ }
142
+ }
143
+ return { refs, complete };
144
+ }
145
+ export async function writeNameEntries(fs, base, installed, opts = {}) {
146
+ const planned = await plan(fs, base, installed, opts.as, opts.managed);
147
+ for (const e of planned) {
148
+ await fs.write(e.path, serializePackageRef({ package: e.package, version: e.version, digest: e.digest, ...(e.managed ? { managed: e.managed } : {}) }));
149
+ }
150
+ for (const e of planned) {
151
+ const prev = e.previous;
152
+ if (!prev || prev.version === e.version)
153
+ continue;
154
+ const { refs, complete } = await referencesOf(fs, base, e.type);
155
+ const stillUsed = refs.some((r) => r.package === prev.package && r.version === prev.version);
156
+ if (complete && !stillUsed) {
157
+ try {
158
+ await fs.remove(packageInstallDir(base, e.type, prev));
159
+ }
160
+ catch { /* already gone */ }
161
+ }
162
+ }
163
+ return planned.map(({ type, name, path, package: pkg, version }) => ({ type, name, path, package: pkg, version }));
164
+ }
165
+ /** Every name entry of a type under base that points at `pkg` (any version), by the
166
+ * reference it holds rather than by the folder's name: an agent linked under an `as`
167
+ * name is found as well. Folders that cannot be listed or read are skipped. */
168
+ export async function nameEntriesFor(fs, base, type, pkg) {
169
+ const root = nameEntryDir(base, type, '').replace(/\/$/, '');
170
+ let names;
171
+ try {
172
+ if ((await fs.stat(root)) === null)
173
+ return [];
174
+ const nodes = fs.listDir ? await fs.listDir(root) : await fs.list(root);
175
+ names = [...new Set(nodes.map((n) => n.name).filter((n) => !n.startsWith('@')))];
176
+ }
177
+ catch {
178
+ return [];
179
+ }
180
+ const out = [];
181
+ for (const name of names) {
182
+ const dir = `${root}/${name}`;
183
+ const text = await readOrNull(fs, `${dir}/${PACKAGE_REF_FILE}`);
184
+ if (text === null)
185
+ continue;
186
+ let ref;
187
+ try {
188
+ ref = parsePackageRef(text);
189
+ }
190
+ catch {
191
+ continue;
192
+ }
193
+ if (ref.package === pkg)
194
+ out.push({ type, name, dir, ref });
195
+ }
196
+ return out;
197
+ }
198
+ //# sourceMappingURL=nameEntries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nameEntries.js","sourceRoot":"","sources":["../../install/nameEntries.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ /** The refusal text naming the pinned entry, or null when no pin digest appears in
2
+ * `coreMessage` (the caller then falls back to core's own wording). */
3
+ export declare function pinRefusalMessage(coreMessage: string, pins: ReadonlyMap<string, string>): string | null;
4
+ //# sourceMappingURL=pinRefusal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pinRefusal.d.ts","sourceRoot":"","sources":["../../install/pinRefusal.ts"],"names":[],"mappings":"AAQA;uEACuE;AACvE,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,GAAG,IAAI,CAOvG"}
@@ -0,0 +1,19 @@
1
+ /* The line for an install that a lockfile pin refused. Core throws DIGEST_MISMATCH
2
+ * for any node of the install tree, with the expected digest (the pin) in its
3
+ * message but not always a name, so the entry to blame is the pin whose digest the
4
+ * message carries, not the ref the person typed: a dependency whose bytes changed
5
+ * must not be reported as the agent that depends on it. Pure; no core import
6
+ * (kernel boundary). */
7
+ import { lockfilePath } from './lockfile.js';
8
+ /** The refusal text naming the pinned entry, or null when no pin digest appears in
9
+ * `coreMessage` (the caller then falls back to core's own wording). */
10
+ export function pinRefusalMessage(coreMessage, pins) {
11
+ for (const [key, digest] of pins) {
12
+ if (!coreMessage.includes(digest))
13
+ continue;
14
+ const lockPath = lockfilePath();
15
+ return `${key} does not match the digest recorded in ${lockPath} (${digest}). Not installed. If this version was republished on purpose, remove its entry from ${lockPath} and install again.`;
16
+ }
17
+ return null;
18
+ }
19
+ //# sourceMappingURL=pinRefusal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pinRefusal.js","sourceRoot":"","sources":["../../install/pinRefusal.ts"],"names":[],"mappings":"AAAA;;;;;wBAKwB;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE1C;uEACuE;AACvE,MAAM,UAAU,iBAAiB,CAAC,WAAmB,EAAE,IAAiC;IACtF,KAAK,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACjC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC;YAAE,SAAS;QAC5C,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAC;QAChC,OAAO,GAAG,GAAG,0CAA0C,QAAQ,KAAK,MAAM,uFAAuF,QAAQ,qBAAqB,CAAC;IACjM,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { InstalledPackageInfo } from '@corenel/protocol';
2
+ export interface AvailableOnMachine {
3
+ mcp: readonly string[];
4
+ skills: readonly string[];
5
+ }
6
+ export declare function unmetRequirements(installed: InstalledPackageInfo, available: AvailableOnMachine): string[];
7
+ //# sourceMappingURL=requirements.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"requirements.d.ts","sourceRoot":"","sources":["../../install/requirements.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAE9D,MAAM,WAAW,kBAAkB;IAAG,GAAG,EAAE,SAAS,MAAM,EAAE,CAAC;IAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE;AAEzF,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,oBAAoB,EAAE,SAAS,EAAE,kBAAkB,GAAG,MAAM,EAAE,CAa1G"}
@@ -0,0 +1,23 @@
1
+ export function unmetRequirements(installed, available) {
2
+ const mcp = new Set(available.mcp);
3
+ const skills = new Set(available.skills);
4
+ const out = [];
5
+ const seen = new Set();
6
+ const add = (line) => { if (!seen.has(line)) {
7
+ seen.add(line);
8
+ out.push(line);
9
+ } };
10
+ const walk = (p) => {
11
+ for (const s of p.requires?.mcp ?? [])
12
+ if (!mcp.has(s))
13
+ add(`needs MCP server "${s}", not configured`);
14
+ for (const s of p.requires?.skills ?? [])
15
+ if (!skills.has(s))
16
+ add(`needs skill "${s}", not installed`);
17
+ for (const d of p.dependencies)
18
+ walk(d);
19
+ };
20
+ walk(installed);
21
+ return out;
22
+ }
23
+ //# sourceMappingURL=requirements.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"requirements.js","sourceRoot":"","sources":["../../install/requirements.ts"],"names":[],"mappings":"AAOA,MAAM,UAAU,iBAAiB,CAAC,SAA+B,EAAE,SAA6B;IAC9F,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IACnC,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;IACzC,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,GAAG,GAAG,CAAC,IAAY,EAAE,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAAC,CAAC,CAAC,CAAC,CAAC;IAC3F,MAAM,IAAI,GAAG,CAAC,CAAuB,EAAQ,EAAE;QAC7C,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,GAAG,IAAI,EAAE;YAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;gBAAE,GAAG,CAAC,qBAAqB,CAAC,mBAAmB,CAAC,CAAC;QACvG,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,MAAM,IAAI,EAAE;YAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;gBAAE,GAAG,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,CAAC;QACvG,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,YAAY;YAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IAC1C,CAAC,CAAC;IACF,IAAI,CAAC,SAAS,CAAC,CAAC;IAChB,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"sidecarTools.d.ts","sourceRoot":"","sources":["../../orchestrator/sidecarTools.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,SAAS,EAA6E,MAAM,mBAAmB,CAAC;AA6C9H;+EAC+E;AAC/E,eAAO,MAAM,oBAAoB,QAC8G,CAAC;AAEhJ,4EAA4E;AAC5E,eAAO,MAAM,gBAAgB,QAC0D,CAAC;AAwGxF;wBACwB;AACxB,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE;IAAE,YAAY,EAAE,OAAO,CAAA;CAAE,GAAG,SAAS,EAAE,CAS7G"}
1
+ {"version":3,"file":"sidecarTools.d.ts","sourceRoot":"","sources":["../../orchestrator/sidecarTools.ts"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,SAAS,EAA6E,MAAM,mBAAmB,CAAC;AA6C9H;+EAC+E;AAC/E,eAAO,MAAM,oBAAoB,QAC8G,CAAC;AAEhJ,4EAA4E;AAC5E,eAAO,MAAM,gBAAgB,QAC0D,CAAC;AA4GxF;wBACwB;AACxB,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,SAAS,EAAE,EAAE,IAAI,EAAE;IAAE,YAAY,EAAE,OAAO,CAAA;CAAE,GAAG,SAAS,EAAE,CAS7G"}