@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 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';
@@ -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;AAClE,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"}
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"}
@@ -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, backed by `semver.maxSatisfying`).
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
- * Uses `semver.maxSatisfying` (npm grammar). Distinct failure modes:
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 by `maxSatisfying`. Callers capture this in
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;
@@ -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;AAE1C;;;;;;;;;;GAUG;AACH,MAAM,WAAW,YAAY;IAC3B;;;;OAIG;IACH,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACjD;;;;;OAKG;IACH,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAC5C,8CAA8C;IAC9C,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,+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,CAgK9E"}
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()].sort((a, b) => semver.rcompare(a, b));
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
- if (semver.validRange(range) === null) {
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
- const available = [...versions.keys()];
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
- // maxSatisfying returned a version we just enumerated — guaranteed
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
- const versions = tools.get(id);
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
- const out = [];
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);
@@ -1 +1 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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"}
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
@@ -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"}
@@ -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",
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.3",
34
- "@kindgi/types": "0.1.3",
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.3",
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, backed by `semver.maxSatisfying`).
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
- * Uses `semver.maxSatisfying` (npm grammar). Distinct failure modes:
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 by `maxSatisfying`. Callers capture this in
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()].sort((a, b) => semver.rcompare(a, b));
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
- if (semver.validRange(range) === null) {
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
- const available = [...versions.keys()];
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
- // maxSatisfying returned a version we just enumerated — guaranteed
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
- const versions = tools.get(id);
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
- const out: ToolId[] = [];
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
@@ -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
+ }