@kindgi/tools 0.1.3 → 0.1.4-rc.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/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/registry.d.ts +17 -5
- package/dist/registry.d.ts.map +1 -1
- package/dist/registry.js +18 -15
- package/dist/registry.js.map +1 -1
- package/dist/types.d.ts +7 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/versions.d.ts +43 -0
- package/dist/versions.d.ts.map +1 -0
- package/dist/versions.js +34 -0
- package/dist/versions.js.map +1 -0
- package/package.json +4 -4
- package/src/index.ts +3 -1
- package/src/registry.ts +35 -19
- package/src/types.ts +7 -0
- package/src/versions.ts +60 -0
package/dist/index.d.ts
CHANGED
|
@@ -7,7 +7,9 @@ export { invokeTool } from './invoke.js';
|
|
|
7
7
|
export { ToolPreconditionError, isToolPreconditionError } from './precondition.js';
|
|
8
8
|
export type { InvokeToolOptions } from './invoke.js';
|
|
9
9
|
export { createToolRegistry } from './registry.js';
|
|
10
|
-
export type { ToolRegistry, ToolResolution } from './registry.js';
|
|
10
|
+
export type { ToolRegisterOptions, ToolRegistry, ToolResolution } from './registry.js';
|
|
11
|
+
export { latestVersion, nextVersion, pickVersion } from './versions.js';
|
|
12
|
+
export type { VersionPick } from './versions.js';
|
|
11
13
|
export { toManifest, toMcpManifest } from './manifest.js';
|
|
12
14
|
export { EFFECT_KINDS } from './types.js';
|
|
13
15
|
export type { AnyTool, CodeArtifactRef, Effect, EffectKind, HttpAuthSpec, HttpHeaderSpec, HttpMethod, HttpRequestBodySpec, HttpToolSpec, JsonSchema, McpToolManifest, Need, NetworkPolicy, RuntimeLimits, SandboxMode, Tool, ToolContext, ToolManifest, ToolSecretRef, ToolSpec, TypedNeeds, } from './types.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,UAAU,EACV,eAAe,EACf,oBAAoB,EACpB,wBAAwB,IAAI,eAAe,GAC5C,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,iBAAiB,EACjB,cAAc,EACd,WAAW,EACX,UAAU,EACV,WAAW,GACZ,MAAM,aAAa,CAAC;AAIrB,OAAO,WAAW,CAAC;AACnB,OAAO,EAAE,2BAA2B,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACzF,YAAY,EAAE,mBAAmB,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AAC1F,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AACnF,YAAY,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,UAAU,EACV,eAAe,EACf,oBAAoB,EACpB,wBAAwB,IAAI,eAAe,GAC5C,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,iBAAiB,EACjB,cAAc,EACd,WAAW,EACX,UAAU,EACV,WAAW,GACZ,MAAM,aAAa,CAAC;AAIrB,OAAO,WAAW,CAAC;AACnB,OAAO,EAAE,2BAA2B,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AACzF,YAAY,EAAE,mBAAmB,EAAE,0BAA0B,EAAE,MAAM,oBAAoB,CAAC;AAC1F,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AACnF,YAAY,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,YAAY,EAAE,mBAAmB,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACvF,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACxE,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,YAAY,EACV,OAAO,EACP,eAAe,EACf,MAAM,EACN,UAAU,EACV,YAAY,EACZ,cAAc,EACd,UAAU,EACV,mBAAmB,EACnB,YAAY,EACZ,UAAU,EACV,eAAe,EACf,IAAI,EACJ,aAAa,EACb,aAAa,EACb,WAAW,EACX,IAAI,EACJ,WAAW,EACX,YAAY,EACZ,aAAa,EACb,QAAQ,EACR,UAAU,GACX,MAAM,YAAY,CAAC;AACpB,YAAY,EACV,kBAAkB,EAClB,yBAAyB,EACzB,YAAY,EACZ,oBAAoB,EACpB,kBAAkB,EAClB,0BAA0B,EAC1B,wBAAwB,EACxB,qBAAqB,EACrB,uBAAuB,EACvB,SAAS,EACT,iBAAiB,EACjB,wBAAwB,EACxB,4BAA4B,EAC5B,kBAAkB,GACnB,MAAM,aAAa,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -9,6 +9,7 @@ export { registerToolSpecSynthesizer, getToolSpecSynthesizer } from './spec-regi
|
|
|
9
9
|
export { invokeTool } from './invoke.js';
|
|
10
10
|
export { ToolPreconditionError, isToolPreconditionError } from './precondition.js';
|
|
11
11
|
export { createToolRegistry } from './registry.js';
|
|
12
|
+
export { latestVersion, nextVersion, pickVersion } from './versions.js';
|
|
12
13
|
export { toManifest, toMcpManifest } from './manifest.js';
|
|
13
14
|
export { EFFECT_KINDS } from './types.js';
|
|
14
15
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,iCAAiC;AAEjC,OAAO,EACL,UAAU,EACV,eAAe,EACf,oBAAoB,EACpB,wBAAwB,IAAI,eAAe,GAC5C,MAAM,aAAa,CAAC;AAQrB,gEAAgE;AAChE,kEAAkE;AAClE,8DAA8D;AAC9D,OAAO,WAAW,CAAC;AACnB,OAAO,EAAE,2BAA2B,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAEzF,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAEnF,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAEnD,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,iCAAiC;AAEjC,OAAO,EACL,UAAU,EACV,eAAe,EACf,oBAAoB,EACpB,wBAAwB,IAAI,eAAe,GAC5C,MAAM,aAAa,CAAC;AAQrB,gEAAgE;AAChE,kEAAkE;AAClE,8DAA8D;AAC9D,OAAO,WAAW,CAAC;AACnB,OAAO,EAAE,2BAA2B,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAEzF,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAEnF,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAEnD,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAExE,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC"}
|
package/dist/registry.d.ts
CHANGED
|
@@ -6,7 +6,7 @@ import type { AnyTool } from './types.js';
|
|
|
6
6
|
* a single id may carry multiple compiled implementations at different
|
|
7
7
|
* exact semver strings; agent bindings reference tools by (id, range)
|
|
8
8
|
* and dispatch resolves at run start via `resolve(id, range)` (npm-
|
|
9
|
-
* compatible semver grammar,
|
|
9
|
+
* compatible semver grammar, by `pickVersion`'s rule).
|
|
10
10
|
*
|
|
11
11
|
* Not tenant-scoped. Multi-tenant deployments hold one registry per
|
|
12
12
|
* tenant or encode tenancy into tool ids. Cross-tenant tool sharing goes
|
|
@@ -17,8 +17,13 @@ export interface ToolRegistry {
|
|
|
17
17
|
* Register a tool. Fails with `duplicate-tool-version` if the same
|
|
18
18
|
* `(id, version)` pair is already registered. Distinct versions of the
|
|
19
19
|
* same id may coexist — that's the whole point of the versioned model.
|
|
20
|
+
*
|
|
21
|
+
* A `retired` version (unregistered, kept for the published versions
|
|
22
|
+
* that pin it) is served only by its exact version (`getVersion`,
|
|
23
|
+
* `hasVersion`): no range, "latest" or listing picks it. Unregister
|
|
24
|
+
* stops a tool version being chosen, not the pins that hold it.
|
|
20
25
|
*/
|
|
21
|
-
register(tool: AnyTool): Result<void, ToolError>;
|
|
26
|
+
register(tool: AnyTool, options?: ToolRegisterOptions): Result<void, ToolError>;
|
|
22
27
|
/**
|
|
23
28
|
* Return the latest active version for an id. "Latest" is defined by
|
|
24
29
|
* `semver.compare` — the highest exact version present. For callers
|
|
@@ -26,11 +31,11 @@ export interface ToolRegistry {
|
|
|
26
31
|
* when a range is available.
|
|
27
32
|
*/
|
|
28
33
|
get(id: ToolId): Result<AnyTool, ToolError>;
|
|
29
|
-
/** Return a specific `(id, version)` pair. */
|
|
34
|
+
/** Return a specific `(id, version)` pair, a retired one included: what a pin resolves. */
|
|
30
35
|
getVersion(id: ToolId, version: string): Result<AnyTool, ToolError>;
|
|
31
36
|
/**
|
|
32
37
|
* Resolve a semver range against the versions registered under `id`.
|
|
33
|
-
*
|
|
38
|
+
* Picks by `pickVersion`'s rule (npm's). Distinct failure modes:
|
|
34
39
|
* - `tool-not-found` → id has no versions at all
|
|
35
40
|
* - `invalid-version-range` → range string is grammatically broken
|
|
36
41
|
* - `tool-version-unresolvable` → id is present but no version satisfies
|
|
@@ -69,11 +74,18 @@ export interface ToolRegistry {
|
|
|
69
74
|
*/
|
|
70
75
|
readonly invalidate?: (tenantId: TenantId) => void;
|
|
71
76
|
}
|
|
77
|
+
export interface ToolRegisterOptions {
|
|
78
|
+
/**
|
|
79
|
+
* The version is unregistered but kept for the published versions that
|
|
80
|
+
* pin it: only its exact version reaches it. Default `false`.
|
|
81
|
+
*/
|
|
82
|
+
readonly retired?: boolean;
|
|
83
|
+
}
|
|
72
84
|
/** The outcome of a successful `resolve(id, range)` lookup. */
|
|
73
85
|
export interface ToolResolution {
|
|
74
86
|
readonly tool: AnyTool;
|
|
75
87
|
/**
|
|
76
|
-
* The exact version picked
|
|
88
|
+
* The exact version `pickVersion` picked. Callers capture this in
|
|
77
89
|
* provenance + telemetry so a replay can pin against the same version.
|
|
78
90
|
*/
|
|
79
91
|
readonly resolvedVersion: string;
|
package/dist/registry.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAE9D,OAAO,KAAK,EAGV,SAAS,EAIV,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AAE9D,OAAO,KAAK,EAGV,SAAS,EAIV,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAG1C;;;;;;;;;;GAUG;AACH,MAAM,WAAW,YAAY;IAC3B;;;;;;;;;OASG;IACH,QAAQ,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,mBAAmB,GAAG,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAChF;;;;;OAKG;IACH,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAC5C,2FAA2F;IAC3F,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IACpE;;;;;;OAMG;IACH,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC,cAAc,EAAE,SAAS,CAAC,CAAC;IACtE,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC;IACzB,UAAU,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC;IACjD;;;;OAIG;IACH,IAAI,IAAI,SAAS,OAAO,EAAE,CAAC;IAC3B,4DAA4D;IAC5D,GAAG,IAAI,SAAS,MAAM,EAAE,CAAC;IACzB,qEAAqE;IACrE,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC;IACxC;;;;;;;;;OASG;IACH,SAAS,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IACrD;;;;;;;OAOG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,KAAK,IAAI,CAAC;CACpD;AAED,MAAM,WAAW,mBAAmB;IAClC;;;OAGG;IACH,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED,+DAA+D;AAC/D,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC;IACvB;;;OAGG;IACH,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;CAClC;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,GAAE,SAAS,OAAO,EAAO,GAAG,YAAY,CAkK9E"}
|
package/dist/registry.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
// SPDX-License-Identifier: Apache-2.0
|
|
2
2
|
// Copyright (C) 2026 Kindgi Inc.
|
|
3
3
|
import semver from 'semver';
|
|
4
|
+
import { pickVersion } from './versions.js';
|
|
4
5
|
/**
|
|
5
6
|
* Create an empty tool registry. Seeds are registered in order; the seed
|
|
6
7
|
* throws on duplicate `(id, version)` so accidental clobbers of a
|
|
@@ -10,14 +11,19 @@ export function createToolRegistry(seed = []) {
|
|
|
10
11
|
// id → version → tool. Nested map so we can iterate versions per id
|
|
11
12
|
// cheaply and cache a sorted-version list.
|
|
12
13
|
const tools = new Map();
|
|
14
|
+
// `${id}@${version}` of the retired versions: served by exact version only.
|
|
15
|
+
const retired = new Set();
|
|
16
|
+
/** The versions a range, "latest" or a listing can pick: the active ones, highest first. */
|
|
13
17
|
function versionsDesc(id) {
|
|
14
18
|
const versions = tools.get(id);
|
|
15
19
|
if (versions === undefined)
|
|
16
20
|
return [];
|
|
17
|
-
return [...versions.keys()]
|
|
21
|
+
return [...versions.keys()]
|
|
22
|
+
.filter((v) => !retired.has(`${id}@${v}`))
|
|
23
|
+
.sort((a, b) => semver.rcompare(a, b));
|
|
18
24
|
}
|
|
19
25
|
const registry = {
|
|
20
|
-
register(tool) {
|
|
26
|
+
register(tool, options) {
|
|
21
27
|
let versions = tools.get(tool.id);
|
|
22
28
|
if (versions === undefined) {
|
|
23
29
|
versions = new Map();
|
|
@@ -33,6 +39,8 @@ export function createToolRegistry(seed = []) {
|
|
|
33
39
|
return { kind: 'err', error: dup };
|
|
34
40
|
}
|
|
35
41
|
versions.set(tool.version, tool);
|
|
42
|
+
if (options?.retired === true)
|
|
43
|
+
retired.add(`${tool.id}@${tool.version}`);
|
|
36
44
|
return { kind: 'ok', value: undefined };
|
|
37
45
|
},
|
|
38
46
|
get(id) {
|
|
@@ -88,7 +96,9 @@ export function createToolRegistry(seed = []) {
|
|
|
88
96
|
};
|
|
89
97
|
return { kind: 'err', error: err };
|
|
90
98
|
}
|
|
91
|
-
|
|
99
|
+
const available = versionsDesc(id);
|
|
100
|
+
const pick = pickVersion(available, range);
|
|
101
|
+
if (pick.kind === 'invalid-range') {
|
|
92
102
|
const err = {
|
|
93
103
|
code: 'invalid-version-range',
|
|
94
104
|
message: `Version range "${range}" for tool "${id}" is not a valid semver range`,
|
|
@@ -97,9 +107,7 @@ export function createToolRegistry(seed = []) {
|
|
|
97
107
|
};
|
|
98
108
|
return { kind: 'err', error: err };
|
|
99
109
|
}
|
|
100
|
-
|
|
101
|
-
const picked = semver.maxSatisfying(available, range);
|
|
102
|
-
if (picked === null) {
|
|
110
|
+
if (pick.kind === 'not-satisfiable') {
|
|
103
111
|
const err = {
|
|
104
112
|
code: 'tool-version-unresolvable',
|
|
105
113
|
message: `Tool "${id}" has no version satisfying "${range}" (available: ${available
|
|
@@ -111,8 +119,9 @@ export function createToolRegistry(seed = []) {
|
|
|
111
119
|
};
|
|
112
120
|
return { kind: 'err', error: err };
|
|
113
121
|
}
|
|
122
|
+
const picked = pick.version;
|
|
114
123
|
const tool = versions.get(picked);
|
|
115
|
-
//
|
|
124
|
+
// pickVersion returned a version we just enumerated — guaranteed
|
|
116
125
|
// to be in the map. The `if (tool === undefined)` branch is a
|
|
117
126
|
// defensive no-op for the type system.
|
|
118
127
|
if (tool === undefined) {
|
|
@@ -127,8 +136,7 @@ export function createToolRegistry(seed = []) {
|
|
|
127
136
|
return { kind: 'ok', value: { tool, resolvedVersion: picked } };
|
|
128
137
|
},
|
|
129
138
|
has(id) {
|
|
130
|
-
|
|
131
|
-
return versions !== undefined && versions.size > 0;
|
|
139
|
+
return versionsDesc(id).length > 0;
|
|
132
140
|
},
|
|
133
141
|
hasVersion(id, version) {
|
|
134
142
|
return tools.get(id)?.has(version) ?? false;
|
|
@@ -146,12 +154,7 @@ export function createToolRegistry(seed = []) {
|
|
|
146
154
|
return out;
|
|
147
155
|
},
|
|
148
156
|
ids() {
|
|
149
|
-
|
|
150
|
-
for (const [id, versions] of tools) {
|
|
151
|
-
if (versions.size > 0)
|
|
152
|
-
out.push(id);
|
|
153
|
-
}
|
|
154
|
-
return out;
|
|
157
|
+
return [...tools.keys()].filter((id) => versionsDesc(id).length > 0);
|
|
155
158
|
},
|
|
156
159
|
versions(id) {
|
|
157
160
|
return versionsDesc(id);
|
package/dist/registry.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,iCAAiC;AAEjC,OAAO,MAAM,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -100,6 +100,13 @@ export interface ToolContext {
|
|
|
100
100
|
* `SecretBinding` scoped to the invoking tenant.
|
|
101
101
|
*/
|
|
102
102
|
readonly resolveSecret?: (ref: ToolSecretRef) => Promise<string>;
|
|
103
|
+
/**
|
|
104
|
+
* The values of the settings blocks the calling agent version pins, by
|
|
105
|
+
* block id (`ctx.settings['acme.weights'].recency`). Unset when the
|
|
106
|
+
* agent references none. A tool reads its tunables here, so an expert
|
|
107
|
+
* changes them by publishing a new block version, not new code.
|
|
108
|
+
*/
|
|
109
|
+
readonly settings?: Readonly<Record<string, Readonly<Record<string, unknown>>>>;
|
|
103
110
|
/**
|
|
104
111
|
* The secrets this tool declares in `needsSpec.secrets`, by name,
|
|
105
112
|
* resolved by the runtime for this call: for the call's tenant, in the
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The one rule for picking a version, used wherever Kindgi turns a
|
|
3
|
+
* version range into the version that runs: the in-process registry a
|
|
4
|
+
* turn resolves its tools against, the runtime's registries, `kindgi dev`
|
|
5
|
+
* and the versions an agent version pins at publish. Picks that agree
|
|
6
|
+
* here are what lets a pin match what a run would have picked.
|
|
7
|
+
*
|
|
8
|
+
* - A range picks the highest version it allows, by npm's rule: a
|
|
9
|
+
* prerelease is picked only when the range names a prerelease of the
|
|
10
|
+
* same `major.minor.patch`. `^1.0.0` never picks `1.3.0-beta.1`;
|
|
11
|
+
* `^1.3.0-beta.0` does.
|
|
12
|
+
* - No range picks the latest: the highest version, a prerelease
|
|
13
|
+
* included.
|
|
14
|
+
*
|
|
15
|
+
* Tool versions are plain `major.minor.patch`, so for tools the
|
|
16
|
+
* prerelease rule never comes up. Strings in `available` that aren't
|
|
17
|
+
* valid semver are skipped.
|
|
18
|
+
*/
|
|
19
|
+
export type VersionPick = {
|
|
20
|
+
readonly kind: 'ok';
|
|
21
|
+
readonly version: string;
|
|
22
|
+
}
|
|
23
|
+
/** The range isn't valid semver range grammar. */
|
|
24
|
+
| {
|
|
25
|
+
readonly kind: 'invalid-range';
|
|
26
|
+
}
|
|
27
|
+
/** The range is valid, but no version in `available` satisfies it. */
|
|
28
|
+
| {
|
|
29
|
+
readonly kind: 'not-satisfiable';
|
|
30
|
+
};
|
|
31
|
+
/** Pick the version a range (or, with none, "latest") resolves to. */
|
|
32
|
+
export declare function pickVersion(available: readonly string[], range?: string): VersionPick;
|
|
33
|
+
/** The highest version in `available`, a prerelease included. */
|
|
34
|
+
export declare function latestVersion(available: readonly string[]): string | undefined;
|
|
35
|
+
/**
|
|
36
|
+
* The version after `version` when the runtime registers a new version
|
|
37
|
+
* in its place (a deploy whose agent version is taken): the next patch,
|
|
38
|
+
* `1.4.0` → `1.4.1`, or for a prerelease the next prerelease,
|
|
39
|
+
* `1.4.0-rc.1` → `1.4.0-rc.2`. It stays in the same line, so it never
|
|
40
|
+
* outranks a newer minor or major. `undefined` for an invalid version.
|
|
41
|
+
*/
|
|
42
|
+
export declare function nextVersion(version: string): string | undefined;
|
|
43
|
+
//# sourceMappingURL=versions.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"versions.d.ts","sourceRoot":"","sources":["../src/versions.ts"],"names":[],"mappings":"AAKA;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,MAAM,WAAW,GACnB;IAAE,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE;AACnD,kDAAkD;GAChD;IAAE,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAA;CAAE;AACpC,sEAAsE;GACpE;IAAE,QAAQ,CAAC,IAAI,EAAE,iBAAiB,CAAA;CAAE,CAAC;AAEzC,sEAAsE;AACtE,wBAAgB,WAAW,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,WAAW,CAQrF;AAED,iEAAiE;AACjE,wBAAgB,aAAa,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,GAAG,SAAS,CAE9E;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAM/D"}
|
package/dist/versions.js
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
// Copyright (C) 2026 Kindgi Inc.
|
|
3
|
+
import semver from 'semver';
|
|
4
|
+
/** Pick the version a range (or, with none, "latest") resolves to. */
|
|
5
|
+
export function pickVersion(available, range) {
|
|
6
|
+
if (range === undefined) {
|
|
7
|
+
const latest = latestVersion(available);
|
|
8
|
+
return latest === undefined ? { kind: 'not-satisfiable' } : { kind: 'ok', version: latest };
|
|
9
|
+
}
|
|
10
|
+
if (semver.validRange(range) === null)
|
|
11
|
+
return { kind: 'invalid-range' };
|
|
12
|
+
const picked = semver.maxSatisfying([...available], range);
|
|
13
|
+
return picked === null ? { kind: 'not-satisfiable' } : { kind: 'ok', version: picked };
|
|
14
|
+
}
|
|
15
|
+
/** The highest version in `available`, a prerelease included. */
|
|
16
|
+
export function latestVersion(available) {
|
|
17
|
+
return semver.maxSatisfying([...available], '*', { includePrerelease: true }) ?? undefined;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* The version after `version` when the runtime registers a new version
|
|
21
|
+
* in its place (a deploy whose agent version is taken): the next patch,
|
|
22
|
+
* `1.4.0` → `1.4.1`, or for a prerelease the next prerelease,
|
|
23
|
+
* `1.4.0-rc.1` → `1.4.0-rc.2`. It stays in the same line, so it never
|
|
24
|
+
* outranks a newer minor or major. `undefined` for an invalid version.
|
|
25
|
+
*/
|
|
26
|
+
export function nextVersion(version) {
|
|
27
|
+
const parsed = semver.parse(version);
|
|
28
|
+
if (parsed === null)
|
|
29
|
+
return undefined;
|
|
30
|
+
return parsed.prerelease.length > 0
|
|
31
|
+
? (semver.inc(parsed, 'prerelease') ?? undefined)
|
|
32
|
+
: (semver.inc(parsed, 'patch') ?? undefined);
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=versions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"versions.js","sourceRoot":"","sources":["../src/versions.ts"],"names":[],"mappings":"AAAA,sCAAsC;AACtC,iCAAiC;AAEjC,OAAO,MAAM,MAAM,QAAQ,CAAC;AA2B5B,sEAAsE;AACtE,MAAM,UAAU,WAAW,CAAC,SAA4B,EAAE,KAAc;IACtE,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,MAAM,MAAM,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;QACxC,OAAO,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAC9F,CAAC;IACD,IAAI,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,IAAI;QAAE,OAAO,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC;IACxE,MAAM,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC,CAAC,GAAG,SAAS,CAAC,EAAE,KAAK,CAAC,CAAC;IAC3D,OAAO,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;AACzF,CAAC;AAED,iEAAiE;AACjE,MAAM,UAAU,aAAa,CAAC,SAA4B;IACxD,OAAO,MAAM,CAAC,aAAa,CAAC,CAAC,GAAG,SAAS,CAAC,EAAE,GAAG,EAAE,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,IAAI,SAAS,CAAC;AAC7F,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACrC,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IACtC,OAAO,MAAM,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC;QACjC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,IAAI,SAAS,CAAC;QACjD,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,SAAS,CAAC,CAAC;AACjD,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@kindgi/tools",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.4-rc.0",
|
|
4
4
|
"description": "Tool authoring shape + registry + invocation for Kindgi. A tool is a typed, effect-declared unit of work — the same definition runs in-process for one flow, over MCP for another. Pure — no kernel dependency; the kernel bridges tools to node handlers separately.",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"repository": {
|
|
@@ -30,8 +30,8 @@
|
|
|
30
30
|
"type-manifest.json"
|
|
31
31
|
],
|
|
32
32
|
"dependencies": {
|
|
33
|
-
"@kindgi/schema": "0.1.
|
|
34
|
-
"@kindgi/types": "0.1.
|
|
33
|
+
"@kindgi/schema": "0.1.4-rc.0",
|
|
34
|
+
"@kindgi/types": "0.1.4-rc.0",
|
|
35
35
|
"ajv": "^8.17.1",
|
|
36
36
|
"ajv-formats": "^3.0.1",
|
|
37
37
|
"semver": "^7.6.3"
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
}
|
|
46
46
|
},
|
|
47
47
|
"devDependencies": {
|
|
48
|
-
"@kindgi/specs": "0.1.
|
|
48
|
+
"@kindgi/specs": "0.1.4-rc.0",
|
|
49
49
|
"@types/node": "^22.10.5",
|
|
50
50
|
"@types/semver": "^7.5.8",
|
|
51
51
|
"typescript": "^5.7.3",
|
package/src/index.ts
CHANGED
|
@@ -24,7 +24,9 @@ export { invokeTool } from './invoke.js';
|
|
|
24
24
|
export { ToolPreconditionError, isToolPreconditionError } from './precondition.js';
|
|
25
25
|
export type { InvokeToolOptions } from './invoke.js';
|
|
26
26
|
export { createToolRegistry } from './registry.js';
|
|
27
|
-
export type { ToolRegistry, ToolResolution } from './registry.js';
|
|
27
|
+
export type { ToolRegisterOptions, ToolRegistry, ToolResolution } from './registry.js';
|
|
28
|
+
export { latestVersion, nextVersion, pickVersion } from './versions.js';
|
|
29
|
+
export type { VersionPick } from './versions.js';
|
|
28
30
|
export { toManifest, toMcpManifest } from './manifest.js';
|
|
29
31
|
export { EFFECT_KINDS } from './types.js';
|
|
30
32
|
export type {
|
package/src/registry.ts
CHANGED
|
@@ -14,13 +14,14 @@ import type {
|
|
|
14
14
|
ToolVersionUnresolvableError,
|
|
15
15
|
} from './errors.js';
|
|
16
16
|
import type { AnyTool } from './types.js';
|
|
17
|
+
import { pickVersion } from './versions.js';
|
|
17
18
|
|
|
18
19
|
/**
|
|
19
20
|
* In-process registry mapping (tool id, version) → tool. Multi-version:
|
|
20
21
|
* a single id may carry multiple compiled implementations at different
|
|
21
22
|
* exact semver strings; agent bindings reference tools by (id, range)
|
|
22
23
|
* and dispatch resolves at run start via `resolve(id, range)` (npm-
|
|
23
|
-
* compatible semver grammar,
|
|
24
|
+
* compatible semver grammar, by `pickVersion`'s rule).
|
|
24
25
|
*
|
|
25
26
|
* Not tenant-scoped. Multi-tenant deployments hold one registry per
|
|
26
27
|
* tenant or encode tenancy into tool ids. Cross-tenant tool sharing goes
|
|
@@ -31,8 +32,13 @@ export interface ToolRegistry {
|
|
|
31
32
|
* Register a tool. Fails with `duplicate-tool-version` if the same
|
|
32
33
|
* `(id, version)` pair is already registered. Distinct versions of the
|
|
33
34
|
* same id may coexist — that's the whole point of the versioned model.
|
|
35
|
+
*
|
|
36
|
+
* A `retired` version (unregistered, kept for the published versions
|
|
37
|
+
* that pin it) is served only by its exact version (`getVersion`,
|
|
38
|
+
* `hasVersion`): no range, "latest" or listing picks it. Unregister
|
|
39
|
+
* stops a tool version being chosen, not the pins that hold it.
|
|
34
40
|
*/
|
|
35
|
-
register(tool: AnyTool): Result<void, ToolError>;
|
|
41
|
+
register(tool: AnyTool, options?: ToolRegisterOptions): Result<void, ToolError>;
|
|
36
42
|
/**
|
|
37
43
|
* Return the latest active version for an id. "Latest" is defined by
|
|
38
44
|
* `semver.compare` — the highest exact version present. For callers
|
|
@@ -40,11 +46,11 @@ export interface ToolRegistry {
|
|
|
40
46
|
* when a range is available.
|
|
41
47
|
*/
|
|
42
48
|
get(id: ToolId): Result<AnyTool, ToolError>;
|
|
43
|
-
/** Return a specific `(id, version)` pair. */
|
|
49
|
+
/** Return a specific `(id, version)` pair, a retired one included: what a pin resolves. */
|
|
44
50
|
getVersion(id: ToolId, version: string): Result<AnyTool, ToolError>;
|
|
45
51
|
/**
|
|
46
52
|
* Resolve a semver range against the versions registered under `id`.
|
|
47
|
-
*
|
|
53
|
+
* Picks by `pickVersion`'s rule (npm's). Distinct failure modes:
|
|
48
54
|
* - `tool-not-found` → id has no versions at all
|
|
49
55
|
* - `invalid-version-range` → range string is grammatically broken
|
|
50
56
|
* - `tool-version-unresolvable` → id is present but no version satisfies
|
|
@@ -84,11 +90,19 @@ export interface ToolRegistry {
|
|
|
84
90
|
readonly invalidate?: (tenantId: TenantId) => void;
|
|
85
91
|
}
|
|
86
92
|
|
|
93
|
+
export interface ToolRegisterOptions {
|
|
94
|
+
/**
|
|
95
|
+
* The version is unregistered but kept for the published versions that
|
|
96
|
+
* pin it: only its exact version reaches it. Default `false`.
|
|
97
|
+
*/
|
|
98
|
+
readonly retired?: boolean;
|
|
99
|
+
}
|
|
100
|
+
|
|
87
101
|
/** The outcome of a successful `resolve(id, range)` lookup. */
|
|
88
102
|
export interface ToolResolution {
|
|
89
103
|
readonly tool: AnyTool;
|
|
90
104
|
/**
|
|
91
|
-
* The exact version picked
|
|
105
|
+
* The exact version `pickVersion` picked. Callers capture this in
|
|
92
106
|
* provenance + telemetry so a replay can pin against the same version.
|
|
93
107
|
*/
|
|
94
108
|
readonly resolvedVersion: string;
|
|
@@ -103,15 +117,20 @@ export function createToolRegistry(seed: readonly AnyTool[] = []): ToolRegistry
|
|
|
103
117
|
// id → version → tool. Nested map so we can iterate versions per id
|
|
104
118
|
// cheaply and cache a sorted-version list.
|
|
105
119
|
const tools = new Map<ToolId, Map<string, AnyTool>>();
|
|
120
|
+
// `${id}@${version}` of the retired versions: served by exact version only.
|
|
121
|
+
const retired = new Set<string>();
|
|
106
122
|
|
|
123
|
+
/** The versions a range, "latest" or a listing can pick: the active ones, highest first. */
|
|
107
124
|
function versionsDesc(id: ToolId): string[] {
|
|
108
125
|
const versions = tools.get(id);
|
|
109
126
|
if (versions === undefined) return [];
|
|
110
|
-
return [...versions.keys()]
|
|
127
|
+
return [...versions.keys()]
|
|
128
|
+
.filter((v) => !retired.has(`${id}@${v}`))
|
|
129
|
+
.sort((a, b) => semver.rcompare(a, b));
|
|
111
130
|
}
|
|
112
131
|
|
|
113
132
|
const registry: ToolRegistry = {
|
|
114
|
-
register(tool: AnyTool): Result<void, ToolError> {
|
|
133
|
+
register(tool: AnyTool, options?: ToolRegisterOptions): Result<void, ToolError> {
|
|
115
134
|
let versions = tools.get(tool.id);
|
|
116
135
|
if (versions === undefined) {
|
|
117
136
|
versions = new Map();
|
|
@@ -127,6 +146,7 @@ export function createToolRegistry(seed: readonly AnyTool[] = []): ToolRegistry
|
|
|
127
146
|
return { kind: 'err', error: dup };
|
|
128
147
|
}
|
|
129
148
|
versions.set(tool.version, tool);
|
|
149
|
+
if (options?.retired === true) retired.add(`${tool.id}@${tool.version}`);
|
|
130
150
|
return { kind: 'ok', value: undefined };
|
|
131
151
|
},
|
|
132
152
|
get(id: ToolId): Result<AnyTool, ToolError> {
|
|
@@ -182,7 +202,9 @@ export function createToolRegistry(seed: readonly AnyTool[] = []): ToolRegistry
|
|
|
182
202
|
};
|
|
183
203
|
return { kind: 'err', error: err };
|
|
184
204
|
}
|
|
185
|
-
|
|
205
|
+
const available = versionsDesc(id);
|
|
206
|
+
const pick = pickVersion(available, range);
|
|
207
|
+
if (pick.kind === 'invalid-range') {
|
|
186
208
|
const err: InvalidVersionRangeError = {
|
|
187
209
|
code: 'invalid-version-range',
|
|
188
210
|
message: `Version range "${range}" for tool "${id}" is not a valid semver range`,
|
|
@@ -191,9 +213,7 @@ export function createToolRegistry(seed: readonly AnyTool[] = []): ToolRegistry
|
|
|
191
213
|
};
|
|
192
214
|
return { kind: 'err', error: err };
|
|
193
215
|
}
|
|
194
|
-
|
|
195
|
-
const picked = semver.maxSatisfying(available, range);
|
|
196
|
-
if (picked === null) {
|
|
216
|
+
if (pick.kind === 'not-satisfiable') {
|
|
197
217
|
const err: ToolVersionUnresolvableError = {
|
|
198
218
|
code: 'tool-version-unresolvable',
|
|
199
219
|
message: `Tool "${id}" has no version satisfying "${range}" (available: ${available
|
|
@@ -205,8 +225,9 @@ export function createToolRegistry(seed: readonly AnyTool[] = []): ToolRegistry
|
|
|
205
225
|
};
|
|
206
226
|
return { kind: 'err', error: err };
|
|
207
227
|
}
|
|
228
|
+
const picked = pick.version;
|
|
208
229
|
const tool = versions.get(picked);
|
|
209
|
-
//
|
|
230
|
+
// pickVersion returned a version we just enumerated — guaranteed
|
|
210
231
|
// to be in the map. The `if (tool === undefined)` branch is a
|
|
211
232
|
// defensive no-op for the type system.
|
|
212
233
|
if (tool === undefined) {
|
|
@@ -221,8 +242,7 @@ export function createToolRegistry(seed: readonly AnyTool[] = []): ToolRegistry
|
|
|
221
242
|
return { kind: 'ok', value: { tool, resolvedVersion: picked } };
|
|
222
243
|
},
|
|
223
244
|
has(id: ToolId): boolean {
|
|
224
|
-
|
|
225
|
-
return versions !== undefined && versions.size > 0;
|
|
245
|
+
return versionsDesc(id).length > 0;
|
|
226
246
|
},
|
|
227
247
|
hasVersion(id: ToolId, version: string): boolean {
|
|
228
248
|
return tools.get(id)?.has(version) ?? false;
|
|
@@ -239,11 +259,7 @@ export function createToolRegistry(seed: readonly AnyTool[] = []): ToolRegistry
|
|
|
239
259
|
return out;
|
|
240
260
|
},
|
|
241
261
|
ids(): readonly ToolId[] {
|
|
242
|
-
|
|
243
|
-
for (const [id, versions] of tools) {
|
|
244
|
-
if (versions.size > 0) out.push(id);
|
|
245
|
-
}
|
|
246
|
-
return out;
|
|
262
|
+
return [...tools.keys()].filter((id) => versionsDesc(id).length > 0);
|
|
247
263
|
},
|
|
248
264
|
versions(id: ToolId): readonly string[] {
|
|
249
265
|
return versionsDesc(id);
|
package/src/types.ts
CHANGED
|
@@ -118,6 +118,13 @@ export interface ToolContext {
|
|
|
118
118
|
* `SecretBinding` scoped to the invoking tenant.
|
|
119
119
|
*/
|
|
120
120
|
readonly resolveSecret?: (ref: ToolSecretRef) => Promise<string>;
|
|
121
|
+
/**
|
|
122
|
+
* The values of the settings blocks the calling agent version pins, by
|
|
123
|
+
* block id (`ctx.settings['acme.weights'].recency`). Unset when the
|
|
124
|
+
* agent references none. A tool reads its tunables here, so an expert
|
|
125
|
+
* changes them by publishing a new block version, not new code.
|
|
126
|
+
*/
|
|
127
|
+
readonly settings?: Readonly<Record<string, Readonly<Record<string, unknown>>>>;
|
|
121
128
|
/**
|
|
122
129
|
* The secrets this tool declares in `needsSpec.secrets`, by name,
|
|
123
130
|
* resolved by the runtime for this call: for the call's tenant, in the
|
package/src/versions.ts
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
// SPDX-License-Identifier: Apache-2.0
|
|
2
|
+
// Copyright (C) 2026 Kindgi Inc.
|
|
3
|
+
|
|
4
|
+
import semver from 'semver';
|
|
5
|
+
|
|
6
|
+
/**
|
|
7
|
+
* The one rule for picking a version, used wherever Kindgi turns a
|
|
8
|
+
* version range into the version that runs: the in-process registry a
|
|
9
|
+
* turn resolves its tools against, the runtime's registries, `kindgi dev`
|
|
10
|
+
* and the versions an agent version pins at publish. Picks that agree
|
|
11
|
+
* here are what lets a pin match what a run would have picked.
|
|
12
|
+
*
|
|
13
|
+
* - A range picks the highest version it allows, by npm's rule: a
|
|
14
|
+
* prerelease is picked only when the range names a prerelease of the
|
|
15
|
+
* same `major.minor.patch`. `^1.0.0` never picks `1.3.0-beta.1`;
|
|
16
|
+
* `^1.3.0-beta.0` does.
|
|
17
|
+
* - No range picks the latest: the highest version, a prerelease
|
|
18
|
+
* included.
|
|
19
|
+
*
|
|
20
|
+
* Tool versions are plain `major.minor.patch`, so for tools the
|
|
21
|
+
* prerelease rule never comes up. Strings in `available` that aren't
|
|
22
|
+
* valid semver are skipped.
|
|
23
|
+
*/
|
|
24
|
+
export type VersionPick =
|
|
25
|
+
| { readonly kind: 'ok'; readonly version: string }
|
|
26
|
+
/** The range isn't valid semver range grammar. */
|
|
27
|
+
| { readonly kind: 'invalid-range' }
|
|
28
|
+
/** The range is valid, but no version in `available` satisfies it. */
|
|
29
|
+
| { readonly kind: 'not-satisfiable' };
|
|
30
|
+
|
|
31
|
+
/** Pick the version a range (or, with none, "latest") resolves to. */
|
|
32
|
+
export function pickVersion(available: readonly string[], range?: string): VersionPick {
|
|
33
|
+
if (range === undefined) {
|
|
34
|
+
const latest = latestVersion(available);
|
|
35
|
+
return latest === undefined ? { kind: 'not-satisfiable' } : { kind: 'ok', version: latest };
|
|
36
|
+
}
|
|
37
|
+
if (semver.validRange(range) === null) return { kind: 'invalid-range' };
|
|
38
|
+
const picked = semver.maxSatisfying([...available], range);
|
|
39
|
+
return picked === null ? { kind: 'not-satisfiable' } : { kind: 'ok', version: picked };
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/** The highest version in `available`, a prerelease included. */
|
|
43
|
+
export function latestVersion(available: readonly string[]): string | undefined {
|
|
44
|
+
return semver.maxSatisfying([...available], '*', { includePrerelease: true }) ?? undefined;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* The version after `version` when the runtime registers a new version
|
|
49
|
+
* in its place (a deploy whose agent version is taken): the next patch,
|
|
50
|
+
* `1.4.0` → `1.4.1`, or for a prerelease the next prerelease,
|
|
51
|
+
* `1.4.0-rc.1` → `1.4.0-rc.2`. It stays in the same line, so it never
|
|
52
|
+
* outranks a newer minor or major. `undefined` for an invalid version.
|
|
53
|
+
*/
|
|
54
|
+
export function nextVersion(version: string): string | undefined {
|
|
55
|
+
const parsed = semver.parse(version);
|
|
56
|
+
if (parsed === null) return undefined;
|
|
57
|
+
return parsed.prerelease.length > 0
|
|
58
|
+
? (semver.inc(parsed, 'prerelease') ?? undefined)
|
|
59
|
+
: (semver.inc(parsed, 'patch') ?? undefined);
|
|
60
|
+
}
|