@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.
- package/dist/chat/engine.d.ts +47 -0
- package/dist/chat/engine.d.ts.map +1 -0
- package/dist/chat/engine.js +803 -0
- package/dist/chat/engine.js.map +1 -0
- package/dist/chat/events.d.ts +5 -0
- package/dist/chat/events.d.ts.map +1 -0
- package/dist/chat/events.js +100 -0
- package/dist/chat/events.js.map +1 -0
- package/dist/chat/index.d.ts +9 -0
- package/dist/chat/index.d.ts.map +1 -0
- package/dist/chat/index.js +9 -0
- package/dist/chat/index.js.map +1 -0
- package/dist/chat/liveFold.d.ts +10 -0
- package/dist/chat/liveFold.d.ts.map +1 -0
- package/dist/chat/liveFold.js +31 -0
- package/dist/chat/liveFold.js.map +1 -0
- package/dist/chat/messages.d.ts +20 -0
- package/dist/chat/messages.d.ts.map +1 -0
- package/dist/chat/messages.js +56 -0
- package/dist/chat/messages.js.map +1 -0
- package/dist/chat/persist.d.ts +39 -0
- package/dist/chat/persist.d.ts.map +1 -0
- package/dist/chat/persist.js +107 -0
- package/dist/chat/persist.js.map +1 -0
- package/dist/chat/runWatchdog.d.ts +21 -0
- package/dist/chat/runWatchdog.d.ts.map +1 -0
- package/dist/chat/runWatchdog.js +92 -0
- package/dist/chat/runWatchdog.js.map +1 -0
- package/dist/chat/stitch.d.ts +26 -0
- package/dist/chat/stitch.d.ts.map +1 -0
- package/dist/chat/stitch.js +40 -0
- package/dist/chat/stitch.js.map +1 -0
- package/dist/chat/types.d.ts +163 -0
- package/dist/chat/types.d.ts.map +1 -0
- package/dist/chat/types.js +2 -0
- package/dist/chat/types.js.map +1 -0
- package/dist/core/loop.d.ts.map +1 -1
- package/dist/core/loop.js +50 -15
- package/dist/core/loop.js.map +1 -1
- package/dist/core/spawn.d.ts +17 -0
- package/dist/core/spawn.d.ts.map +1 -1
- package/dist/core/spawn.js +48 -14
- package/dist/core/spawn.js.map +1 -1
- package/dist/fileSchema.js +1 -1
- package/dist/guardrail/builtins.d.ts.map +1 -1
- package/dist/guardrail/builtins.js +11 -6
- package/dist/guardrail/builtins.js.map +1 -1
- package/dist/guardrail/glob.d.ts +1 -2
- package/dist/guardrail/glob.d.ts.map +1 -1
- package/dist/guardrail/glob.js +4 -29
- package/dist/guardrail/glob.js.map +1 -1
- package/dist/guardrail/guardrail.d.ts +8 -0
- package/dist/guardrail/guardrail.d.ts.map +1 -1
- package/dist/guardrail/guardrail.js +12 -0
- package/dist/guardrail/guardrail.js.map +1 -1
- package/dist/guardrail/index.d.ts +1 -1
- package/dist/guardrail/index.d.ts.map +1 -1
- package/dist/guardrail/index.js +1 -1
- package/dist/guardrail/index.js.map +1 -1
- package/dist/guardrail/serialize.d.ts.map +1 -1
- package/dist/guardrail/serialize.js +3 -0
- package/dist/guardrail/serialize.js.map +1 -1
- package/dist/guardrail/validate.d.ts.map +1 -1
- package/dist/guardrail/validate.js +4 -0
- package/dist/guardrail/validate.js.map +1 -1
- package/dist/install/lockfile.d.ts +25 -5
- package/dist/install/lockfile.d.ts.map +1 -1
- package/dist/install/lockfile.js +60 -4
- package/dist/install/lockfile.js.map +1 -1
- package/dist/install/nameEntries.d.ts +28 -0
- package/dist/install/nameEntries.d.ts.map +1 -0
- package/dist/install/nameEntries.js +198 -0
- package/dist/install/nameEntries.js.map +1 -0
- package/dist/install/pinRefusal.d.ts +4 -0
- package/dist/install/pinRefusal.d.ts.map +1 -0
- package/dist/install/pinRefusal.js +19 -0
- package/dist/install/pinRefusal.js.map +1 -0
- package/dist/install/requirements.d.ts +7 -0
- package/dist/install/requirements.d.ts.map +1 -0
- package/dist/install/requirements.js +23 -0
- package/dist/install/requirements.js.map +1 -0
- package/dist/orchestrator/sidecarTools.d.ts.map +1 -1
- package/dist/orchestrator/sidecarTools.js +8 -4
- package/dist/orchestrator/sidecarTools.js.map +1 -1
- package/dist/prompts/fitProject.d.ts +6 -0
- package/dist/prompts/fitProject.d.ts.map +1 -0
- package/dist/prompts/fitProject.js +6 -0
- package/dist/prompts/fitProject.js.map +1 -0
- package/dist/prompts/library/defaults.generated.js +7 -7
- package/dist/prompts/library/defaults.generated.js.map +1 -1
- package/dist/prompts/library/index.d.ts +2 -1
- package/dist/prompts/library/index.d.ts.map +1 -1
- package/dist/prompts/library/index.js +11 -16
- package/dist/prompts/library/index.js.map +1 -1
- package/dist/providers/egressGuard.d.ts +17 -0
- package/dist/providers/egressGuard.d.ts.map +1 -0
- package/dist/providers/egressGuard.js +26 -0
- package/dist/providers/egressGuard.js.map +1 -0
- package/dist/providers/gateway.d.ts +34 -0
- package/dist/providers/gateway.d.ts.map +1 -1
- package/dist/providers/gateway.js +43 -2
- package/dist/providers/gateway.js.map +1 -1
- package/dist/sidecar/askUserBroker.d.ts +40 -0
- package/dist/sidecar/askUserBroker.d.ts.map +1 -0
- package/dist/sidecar/askUserBroker.js +103 -0
- package/dist/sidecar/askUserBroker.js.map +1 -0
- package/dist/sidecar/fleetJwe.d.ts +25 -0
- package/dist/sidecar/fleetJwe.d.ts.map +1 -0
- package/dist/sidecar/fleetJwe.js +115 -0
- package/dist/sidecar/fleetJwe.js.map +1 -0
- package/dist/sidecar/fleetJws.d.ts +15 -0
- package/dist/sidecar/fleetJws.d.ts.map +1 -0
- package/dist/sidecar/fleetJws.js +47 -0
- package/dist/sidecar/fleetJws.js.map +1 -0
- package/dist/sidecar/host.d.ts +81 -1
- package/dist/sidecar/host.d.ts.map +1 -1
- package/dist/sidecar/host.js +227 -6
- package/dist/sidecar/host.js.map +1 -1
- package/dist/sidecar/identity.d.ts +9 -0
- package/dist/sidecar/identity.d.ts.map +1 -1
- package/dist/sidecar/memberGate.d.ts.map +1 -1
- package/dist/sidecar/memberGate.js +5 -0
- package/dist/sidecar/memberGate.js.map +1 -1
- package/dist/sidecar/server.d.ts +61 -10
- package/dist/sidecar/server.d.ts.map +1 -1
- package/dist/sidecar/server.js +592 -15
- package/dist/sidecar/server.js.map +1 -1
- package/dist/skills.d.ts +18 -0
- package/dist/skills.d.ts.map +1 -1
- package/dist/skills.js +93 -12
- package/dist/skills.js.map +1 -1
- package/dist/systemParts.d.ts +0 -1
- package/dist/systemParts.d.ts.map +1 -1
- package/dist/systemParts.js +6 -2
- package/dist/systemParts.js.map +1 -1
- package/dist/todos.d.ts +8 -0
- package/dist/todos.d.ts.map +1 -1
- package/dist/todos.js +21 -17
- package/dist/todos.js.map +1 -1
- package/dist/tools/builtins.d.ts +8 -0
- package/dist/tools/builtins.d.ts.map +1 -1
- package/dist/tools/builtins.js +21 -1
- package/dist/tools/builtins.js.map +1 -1
- package/dist/tools/namespaces.d.ts +8 -0
- package/dist/tools/namespaces.d.ts.map +1 -1
- package/dist/tools/namespaces.js +18 -0
- package/dist/tools/namespaces.js.map +1 -1
- package/dist/tools/skillTool.d.ts.map +1 -1
- package/dist/tools/skillTool.js +22 -1
- package/dist/tools/skillTool.js.map +1 -1
- package/dist/tools/toolFacts.d.ts +9 -0
- package/dist/tools/toolFacts.d.ts.map +1 -0
- package/dist/tools/toolFacts.js +19 -0
- package/dist/tools/toolFacts.js.map +1 -0
- package/dist/tools/toolSearch.d.ts +25 -6
- package/dist/tools/toolSearch.d.ts.map +1 -1
- package/dist/tools/toolSearch.js +62 -14
- package/dist/tools/toolSearch.js.map +1 -1
- package/dist/tools/workflowTool.d.ts +34 -0
- package/dist/tools/workflowTool.d.ts.map +1 -0
- package/dist/tools/workflowTool.js +122 -0
- package/dist/tools/workflowTool.js.map +1 -0
- 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;
|
|
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
|
-
|
|
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:
|
|
9
|
-
*
|
|
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.
|
|
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":"
|
|
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"}
|
package/dist/install/lockfile.js
CHANGED
|
@@ -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.
|
|
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
|
-
|
|
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":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH;;sEAEsE;AACtE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"lockfile.js","sourceRoot":"","sources":["../../install/lockfile.ts"],"names":[],"mappings":"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"}
|
|
@@ -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;
|
|
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"}
|