@corenel/harness 0.18.0 → 0.20.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/core/pricing.d.ts +12 -0
- package/dist/core/pricing.d.ts.map +1 -1
- package/dist/core/pricing.js +8 -3
- package/dist/core/pricing.js.map +1 -1
- package/dist/core/spawn.d.ts +7 -0
- package/dist/core/spawn.d.ts.map +1 -1
- package/dist/core/spawn.js +21 -10
- package/dist/core/spawn.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/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/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 +33 -0
- package/dist/providers/gateway.d.ts.map +1 -1
- package/dist/providers/gateway.js +42 -2
- package/dist/providers/gateway.js.map +1 -1
- 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 +5 -0
- package/dist/sidecar/host.d.ts.map +1 -1
- package/dist/sidecar/host.js +12 -2
- 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/server.d.ts +19 -6
- package/dist/sidecar/server.d.ts.map +1 -1
- package/dist/sidecar/server.js +86 -7
- 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/package.json +5 -4
package/dist/core/pricing.d.ts
CHANGED
|
@@ -13,6 +13,16 @@ export type PriceTable = Map<string, ModelRates>;
|
|
|
13
13
|
* crew-run guard (executor.ts), the room guard (roomDeps.ts), and `corenel
|
|
14
14
|
* run`. */
|
|
15
15
|
export declare function pricedForUsd(rates: ModelRates | null): boolean;
|
|
16
|
+
/** One catalog model with what a host needs to decide whether THIS person can
|
|
17
|
+
* run it: its provider and whether they hold a key for that provider. The
|
|
18
|
+
* strategy engine's routability rule (@corenel/strategies/models) reads this
|
|
19
|
+
* on hosts with no web catalog of their own (the CLI, the daemon). */
|
|
20
|
+
export interface CatalogModel {
|
|
21
|
+
id: string;
|
|
22
|
+
provider: string;
|
|
23
|
+
hasKey: boolean;
|
|
24
|
+
tools: boolean;
|
|
25
|
+
}
|
|
16
26
|
/** Model id -> context window in tokens, from the SAME hydration as
|
|
17
27
|
* `PriceTable`. Deliberately a SEPARATE map rather than a field added to
|
|
18
28
|
* `ModelRates`: `ModelRates` is the fail-closed usd-guard's contract
|
|
@@ -32,6 +42,8 @@ export type WindowTable = Map<string, number>;
|
|
|
32
42
|
export interface HydratedCatalog {
|
|
33
43
|
prices: PriceTable;
|
|
34
44
|
windows: WindowTable;
|
|
45
|
+
/** Every model with its provider and key ownership, in catalog order. */
|
|
46
|
+
models: CatalogModel[];
|
|
35
47
|
}
|
|
36
48
|
/** Hydrate BOTH tables from one fetch -- prefer this over `hydratePrices`
|
|
37
49
|
* alone when the caller also needs context windows (see `WindowTable` above),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pricing.d.ts","sourceRoot":"","sources":["../../core/pricing.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE/C,MAAM,WAAW,UAAU;IAAG,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE;AACjE,eAAO,MAAM,qBAAqB,MAAM,CAAC;AAEzC,wBAAgB,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAQpF;AAYD,MAAM,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AAEjD;;;;;WAKW;AACX,wBAAgB,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,GAAG,OAAO,CAG9D;
|
|
1
|
+
{"version":3,"file":"pricing.d.ts","sourceRoot":"","sources":["../../core/pricing.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE/C,MAAM,WAAW,UAAU;IAAG,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE;AACjE,eAAO,MAAM,qBAAqB,MAAM,CAAC;AAEzC,wBAAgB,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,CAQpF;AAYD,MAAM,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AAEjD;;;;;WAKW;AACX,wBAAgB,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,GAAG,OAAO,CAG9D;AAoBD;;;sEAGsE;AACtE,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;CAChB;AAED;;;;;;;;;;;;;;wDAcwD;AACxD,MAAM,MAAM,WAAW,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAE9C,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,UAAU,CAAC;IACnB,OAAO,EAAE,WAAW,CAAC;IACrB,yEAAyE;IACzE,MAAM,EAAE,YAAY,EAAE,CAAC;CACxB;AAgCD;;;eAGe;AACf,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,EACtC,SAAS,GAAE,OAAO,KAAa,GAC9B,OAAO,CAAC,eAAe,CAAC,CAqB1B;AAED;;;;;;;;uCAQuC;AACvC,wBAAsB,aAAa,CACjC,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,EACtC,SAAS,GAAE,OAAO,KAAa,GAC9B,OAAO,CAAC,UAAU,CAAC,CAErB"}
|
package/dist/core/pricing.js
CHANGED
|
@@ -43,8 +43,11 @@ async function fetchAvailableModels(endpoint, getToken, fetchImpl) {
|
|
|
43
43
|
return [];
|
|
44
44
|
const json = (await res.json());
|
|
45
45
|
const out = [];
|
|
46
|
-
for (const p of json.providers ?? [])
|
|
47
|
-
|
|
46
|
+
for (const p of json.providers ?? []) {
|
|
47
|
+
const provider = p.displayName || p.providerId || '';
|
|
48
|
+
for (const m of p.models ?? [])
|
|
49
|
+
out.push({ ...m, provider, hasKey: p.hasKey === true });
|
|
50
|
+
}
|
|
48
51
|
return out;
|
|
49
52
|
}
|
|
50
53
|
catch {
|
|
@@ -58,6 +61,7 @@ async function fetchAvailableModels(endpoint, getToken, fetchImpl) {
|
|
|
58
61
|
export async function hydrateCatalog(endpoint, getToken, fetchImpl = fetch) {
|
|
59
62
|
const prices = new Map();
|
|
60
63
|
const windows = new Map();
|
|
64
|
+
const catalog = [];
|
|
61
65
|
const models = await fetchAvailableModels(endpoint, getToken, fetchImpl);
|
|
62
66
|
for (const m of models) {
|
|
63
67
|
// An UNPRICED model must stay ABSENT from the table, never entered at
|
|
@@ -72,8 +76,9 @@ export async function hydrateCatalog(endpoint, getToken, fetchImpl = fetch) {
|
|
|
72
76
|
if (typeof m.contextWindow === 'number' && m.contextWindow > 0) {
|
|
73
77
|
windows.set(m.model, m.contextWindow);
|
|
74
78
|
}
|
|
79
|
+
catalog.push({ id: m.model, provider: m.provider, hasKey: m.hasKey, tools: m.supportsTools === true });
|
|
75
80
|
}
|
|
76
|
-
return { prices, windows };
|
|
81
|
+
return { prices, windows, models: catalog };
|
|
77
82
|
}
|
|
78
83
|
/** Hydrate the rate table from the SAME backend the app uses (GET
|
|
79
84
|
* <endpoint>/llm-providers/available, Bearer login token), so prices are the
|
package/dist/core/pricing.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pricing.js","sourceRoot":"","sources":["../../core/pricing.ts"],"names":[],"mappings":"AAQA,MAAM,CAAC,MAAM,qBAAqB,GAAG,GAAG,CAAC;AAEzC,MAAM,UAAU,cAAc,CAAC,KAAY,EAAE,KAAwB;IACnE,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,IAAI,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;IACrE,MAAM,KAAK,GAAG,KAAK,CAAC,YAAY,GAAG,MAAM,CAAC;IAC1C,MAAM,IAAI,GAAG,OAAS,CAAC;IACvB,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,OAAO;UACjC,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,OAAO,GAAG,qBAAqB;UACvD,CAAC,KAAK,CAAC,gBAAgB,GAAG,IAAI,CAAC,GAAG,KAAK,CAAC,QAAQ,CAAC;AACvD,CAAC;AAcD;;;;;WAKW;AACX,MAAM,UAAU,YAAY,CAAC,KAAwB;IACnD,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACzB,OAAO,KAAK,CAAC,OAAO,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC;AACjD,CAAC;
|
|
1
|
+
{"version":3,"file":"pricing.js","sourceRoot":"","sources":["../../core/pricing.ts"],"names":[],"mappings":"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"}
|
package/dist/core/spawn.d.ts
CHANGED
|
@@ -63,6 +63,13 @@ export interface SpawnDeps {
|
|
|
63
63
|
* which this module fills in per child. */
|
|
64
64
|
toolCtxBase: Omit<ToolContext, 'signal' | 'spawn'>;
|
|
65
65
|
client: OpenAI;
|
|
66
|
+
/** The client a NAMED callee calls models through (call_agent sets
|
|
67
|
+
* `req.label` to its name), or undefined for `client`. A host holds a callee
|
|
68
|
+
* to its own model egress this way. The callee's own anonymous sub-spawns
|
|
69
|
+
* keep the client it was given. Absent: every child uses `client`. */
|
|
70
|
+
clientFor?: (meta: {
|
|
71
|
+
agentName?: string;
|
|
72
|
+
}) => OpenAI | undefined;
|
|
66
73
|
defaultModel: string;
|
|
67
74
|
policy?: Policy;
|
|
68
75
|
permission?: PermissionService;
|
package/dist/core/spawn.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spawn.d.ts","sourceRoot":"","sources":["../../core/spawn.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"spawn.d.ts","sourceRoot":"","sources":["../../core/spawn.ts"],"names":[],"mappings":"AA4BA,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAC;AACjC,OAAO,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,EAAE,iBAAiB,EAAE,SAAS,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACnI,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAGzE,2EAA2E;AAC3E,eAAO,MAAM,aAAa,IAAI,CAAC;AAC/B,yDAAyD;AACzD,eAAO,MAAM,aAAa,IAAI,CAAC;AAE/B;;uDAEuD;AACvD,MAAM,WAAW,cAAc;IAC7B,sEAAsE;IACtE,KAAK,EAAE,MAAM,CAAC;IACd,uEAAuE;IACvE,YAAY,EAAE,MAAM,CAAC;IACrB,gCAAgC;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB;;2EAEuE;IACvE,KAAK,EAAE,MAAM,CAAC;IACd;;;sDAGkD;IAClD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;kEAC8D;IAC9D,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;6EAK6E;AAC7E,wBAAgB,eAAe,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,cAAc,GAAG,SAAS,CAMjF;AASD;+EAC+E;AAC/E,eAAO,MAAM,qBAAqB,EAAE,SAAS,MAAM,EAAqE,CAAC;AAEzH,4DAA4D;AAC5D,MAAM,WAAW,YAAY;IAC3B;gEAC4D;IAC5D,QAAQ,EAAE,eAAe,CAAC;IAC1B;;6DAEyD;IACzD,KAAK,CAAC,EAAE,SAAS,EAAE,CAAC;CACrB;AAaD,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,MAAM,CAAC;IACd;0EACsE;IACtE,OAAO,EAAE;QAAE,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACvB,YAAY,EAAE,WAAW,CAAC;IAC1B;gEAC4D;IAC5D,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB;+CAC2C;IAC3C,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,QAAQ,GAAG,OAAO,CAAC,CAAC;IACnD,MAAM,EAAE,MAAM,CAAC;IACf;;;0EAGsE;IACtE,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,MAAM,GAAG,SAAS,CAAC;IACjE,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B,WAAW,CAAC,EAAE,iBAAiB,CAAC;IAChC;gFAC4E;IAC5E,MAAM,EAAE,MAAM,CAAC;IACf;gFAC4E;IAC5E,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,cAAc,KAAK,IAAI,CAAC;IAC/D;;0CAEsC;IACtC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;;;;;;iCAS6B;IAC7B,aAAa,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,iBAAiB,CAAC;IACpH;;oFAEgF;IAChF,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,KAAK,UAAU,GAAG,SAAS,CAAC;IACnI;;;;2EAIuE;IACvE,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,YAAY,GAAG,IAAI,CAAC;IACjF;2EACuE;IACvE,WAAW,CAAC,EAAE,CAAC,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,OAAO,EAAE,CAAA;KAAE,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IACpF;;6BAEyB;IACzB,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,OAAO,CAAC;CAC1C;AAED;qEACqE;AACrE,wBAAgB,SAAS,CAAC,IAAI,EAAE,SAAS,GAAG,WAAW,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC,CAyH5E"}
|
package/dist/core/spawn.js
CHANGED
|
@@ -83,8 +83,21 @@ export function makeSpawn(deps) {
|
|
|
83
83
|
// delegation (call_agent attributes them to its task and callee), else
|
|
84
84
|
// whatever the spawning context logs to. A child's changes are its
|
|
85
85
|
// caller's run's changes either way.
|
|
86
|
+
const childClient = deps.clientFor?.(req.label ? { agentName: req.label } : {}) ?? deps.client;
|
|
86
87
|
const childFiles = req.onFileChange ?? deps.toolCtxBase.onFileChange;
|
|
87
88
|
const childBase = { ...deps.toolCtxBase, memory: childMemory, ...(childFiles ? { onFileChange: childFiles } : {}) };
|
|
89
|
+
// Label the node by the calling model's title, else by its task (a host
|
|
90
|
+
// canvas falls back to the id otherwise). A cut task says so with "...",
|
|
91
|
+
// or a card's "<label> finished" runs it into the next word.
|
|
92
|
+
const label = req.title?.trim() || taskLabel(req.task) || childId;
|
|
93
|
+
/* The policy and permission service this child runs under. Its own nested
|
|
94
|
+
* spawns inherit THESE, never the root's (final review M9): a
|
|
95
|
+
* policy-carrying callee's anonymous sub-spawn would otherwise run under
|
|
96
|
+
* the caller's wider policy. */
|
|
97
|
+
const childPolicy = req.policy ?? deps.policy;
|
|
98
|
+
const childPermission = req.policy && deps.permissionFor
|
|
99
|
+
? deps.permissionFor(req.policy, { childId, label: req.label || label, ...(req.label ? { agentName: req.label } : {}) })
|
|
100
|
+
: deps.permission;
|
|
88
101
|
const childCtx = {
|
|
89
102
|
...childBase,
|
|
90
103
|
signal: childAc.signal,
|
|
@@ -96,17 +109,17 @@ export function makeSpawn(deps) {
|
|
|
96
109
|
spawn: childDepth < maxDepth
|
|
97
110
|
? makeSpawn({
|
|
98
111
|
...deps, depth: childDepth, parentSignal: childAc.signal, nodeId: childId,
|
|
112
|
+
// A grandchild runs on THIS child's client (a callee's subtask is
|
|
113
|
+
// still the callee's model traffic).
|
|
114
|
+
client: childClient,
|
|
99
115
|
// A grandchild inherits THIS child's memory plane and file
|
|
100
116
|
// observer, not the root's.
|
|
101
117
|
tools: childTools, toolCtxBase: childBase,
|
|
118
|
+
...(childPolicy ? { policy: childPolicy } : {}),
|
|
119
|
+
...(childPermission ? { permission: childPermission } : {}),
|
|
102
120
|
})
|
|
103
121
|
: undefined,
|
|
104
122
|
};
|
|
105
|
-
// Label the node by the calling model's title, else by its task (a host
|
|
106
|
-
// canvas falls back to the id otherwise). A cut task says so with "...",
|
|
107
|
-
// or a card's "<label> finished" runs it into the next word.
|
|
108
|
-
const label = req.title?.trim() || taskLabel(req.task) || childId;
|
|
109
|
-
const childPolicy = req.policy ?? deps.policy;
|
|
110
123
|
const childDonts = deps.dontsFor && childPolicy
|
|
111
124
|
? deps.dontsFor(childPolicy, {
|
|
112
125
|
childId, label: req.label || label, ...(req.label ? { agentName: req.label } : {}), model: req.model || deps.defaultModel,
|
|
@@ -126,11 +139,9 @@ export function makeSpawn(deps) {
|
|
|
126
139
|
...(req.toolCallId ? { toolCallId: req.toolCallId } : {}),
|
|
127
140
|
}),
|
|
128
141
|
}, {
|
|
129
|
-
client:
|
|
130
|
-
policy:
|
|
131
|
-
permission:
|
|
132
|
-
? deps.permissionFor(req.policy, { childId, label: req.label || label, ...(req.label ? { agentName: req.label } : {}) })
|
|
133
|
-
: deps.permission,
|
|
142
|
+
client: childClient, defaultModel: req.model || deps.defaultModel, tools: childTools, toolCtx: childCtx,
|
|
143
|
+
policy: childPolicy,
|
|
144
|
+
permission: childPermission,
|
|
134
145
|
// EVERY child's decisions name it -- a policy-less child shares the
|
|
135
146
|
// caller's service (keeping its session allows), so the service
|
|
136
147
|
// itself cannot tell the two apart.
|
package/dist/core/spawn.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spawn.js","sourceRoot":"","sources":["../../core/spawn.ts"],"names":[],"mappings":"AA+BA,OAAO,EAAE,OAAO,EAAiB,MAAM,oBAAoB,CAAC;AAE5D,2EAA2E;AAC3E,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC;AAC/B,yDAAyD;AACzD,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC;AA0B/B;;;;;6EAK6E;AAC7E,MAAM,UAAU,eAAe,CAAC,KAAgB,EAAE,IAAoB;IACpE,OAAO,KAAK,CAAC,IAAI,KAAK,YAAY;QAChC,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,QAAQ,EAAE,IAAI,CAAC,YAAY,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAgB;YACpF,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACxD,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;QACjE,CAAC,CAAC,KAAK,CAAC;AACZ,CAAC;AAED,0EAA0E;AAC1E,MAAM,WAAW,GAAG,EAAE,CAAC;AACvB,SAAS,SAAS,CAAC,IAAY;IAC7B,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;IACtB,OAAO,CAAC,CAAC,MAAM,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACtE,CAAC;AAED;+EAC+E;AAC/E,MAAM,CAAC,MAAM,qBAAqB,GAAsB,CAAC,aAAa,EAAE,eAAe,EAAE,aAAa,EAAE,eAAe,CAAC,CAAC;AAazH;;6DAE6D;AAC7D,MAAM,SAAS,GAAoB;IACjC,IAAI,EAAE,KAAK,IAAI,EAAE,GAAG,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC,CAAC,CAAC;IACxE,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,IAAI;IACtB,MAAM,EAAE,KAAK,IAAI,EAAE,CAAC,EAAE;IACtB,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,EAAE;IACpB,MAAM,EAAE,KAAK,IAAI,EAAE,GAAG,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC,CAAC,CAAC;CAC3E,CAAC;
|
|
1
|
+
{"version":3,"file":"spawn.js","sourceRoot":"","sources":["../../core/spawn.ts"],"names":[],"mappings":"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"}
|
package/dist/guardrail/glob.d.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"glob.d.ts","sourceRoot":"","sources":["../../guardrail/glob.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"glob.d.ts","sourceRoot":"","sources":["../../guardrail/glob.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC"}
|
package/dist/guardrail/glob.js
CHANGED
|
@@ -1,33 +1,8 @@
|
|
|
1
|
-
/* Tool-name glob matching
|
|
1
|
+
/* Tool-name glob matching. The one implementation lives in @corenel/protocol
|
|
2
|
+
* (toolNarrowing.ts) beside the ACL narrowing rule that uses it, so the fleet
|
|
3
|
+
* server and the node never disagree about what a glob covers.
|
|
2
4
|
* `*` matches within a dot-segment, `**` matches across dots. Our tool names have
|
|
3
5
|
* no dots (compile_prompd, kv_set), so `*` matches a whole name and `kv_*` etc.
|
|
4
6
|
* work as expected. */
|
|
5
|
-
export
|
|
6
|
-
let src = '';
|
|
7
|
-
for (let i = 0; i < glob.length; i++) {
|
|
8
|
-
const c = glob[i];
|
|
9
|
-
if (c === '*') {
|
|
10
|
-
if (glob[i + 1] === '*') {
|
|
11
|
-
src += '.*';
|
|
12
|
-
i++;
|
|
13
|
-
}
|
|
14
|
-
else {
|
|
15
|
-
src += '[^.]*';
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
else if (c === '?') {
|
|
19
|
-
src += '[^.]';
|
|
20
|
-
}
|
|
21
|
-
else if ('.+^$()[]{}|\\'.includes(c)) {
|
|
22
|
-
src += '\\' + c;
|
|
23
|
-
}
|
|
24
|
-
else {
|
|
25
|
-
src += c;
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
return new RegExp(`^${src}$`);
|
|
29
|
-
}
|
|
30
|
-
export function matchesAnyGlob(name, globs) {
|
|
31
|
-
return globs.some((g) => globToRegex(g).test(name));
|
|
32
|
-
}
|
|
7
|
+
export { globToRegex, matchesAnyGlob } from '@corenel/protocol';
|
|
33
8
|
//# sourceMappingURL=glob.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"glob.js","sourceRoot":"","sources":["../../guardrail/glob.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"glob.js","sourceRoot":"","sources":["../../guardrail/glob.ts"],"names":[],"mappings":"AAAA;;;;;uBAKuB;AACvB,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -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"}
|