@workerkit/core 0.3.0 → 0.3.2

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/CHANGELOG.md CHANGED
@@ -6,6 +6,131 @@ and the package adheres to [Semantic Versioning](https://semver.org/).
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [0.3.2] - 2026-09-12
10
+
11
+ ### Added
12
+
13
+ Five manager descriptors: the fleet-operations lane. Reading the state of a
14
+ fleet took a crawl over `workers_list`, `worker_get` and `runs_feed`; the
15
+ account's headroom, a run's raw process log, fan-out and deletion were not
16
+ reachable from the toolset at all. The registry now ships 79 manager and 9
17
+ anonymous descriptors.
18
+
19
+ - **`fleet_health`** is the digest to brief from. A fleet operated from a chat
20
+ window rots quietly: workers installed but never deployed while their
21
+ schedules sit enabled, deployments paused with due times drifting into the
22
+ past, runs that ended by asking a question nobody saw, last runs refused at
23
+ the gate. One call returns the counts plus typed sections (`blocked`,
24
+ `notDeployed`, `overdueSchedules`, `awaitingInput`, `lastRunAttention`), each
25
+ row naming the worker and the fix. Paused and expired workers are counted,
26
+ never listed. The question preview inside `awaitingInput` is run content and
27
+ needs `readRuns`; the rest rides `readWorkers`.
28
+ - **`account_usage`** is the headroom read: plan tier, worker slots,
29
+ hosted-deployment slots, the wallet's spendable balance with the top-up URL to
30
+ hand a human, the plan's request windows and settled run spend — so a 402 on
31
+ `kit_install`, `worker_deploy` or a scheduled run is something an agent plans
32
+ around rather than discovers. Rides `readWorkers`.
33
+ - **`run_transcript`** reads a run's stored LLM process log, the raw record
34
+ behind the digest, which was readable only in the dashboard. It is opt-in per
35
+ deployment (`transcriptRetention`) and kept for 7 days, so the description
36
+ teaches the agent to read the receipt's `transcriptAvailable` first and to
37
+ expect 404 `no_transcript` as the normal answer on a worker that never opted
38
+ in. Rides `readRuns`.
39
+ - **`run_bulk`** fans one prompt out across up to 20 workers in one call, each
40
+ named by `workerId` (preferred) or its deprecated `tokenId`, on a window of
41
+ its own (2 calls a minute, 20 an hour per account). Like `worker_clone_bulk`
42
+ it is not atomic and reports per item — and unlike it, a miss never aborts
43
+ the batch: an unknown id, a missing deployment or a cap already hit lands on
44
+ that item and the loop goes on. A Skipped receipt counts as a success (a run
45
+ was minted; its `skipReason` says why it did not start). Rides `runWorkers`.
46
+ - **`worker_delete`** removes a worker. Deleting existed only in the WorkerKit
47
+ dashboard, so an agent could create workers — `kit_install`, `worker_clone` —
48
+ and never remove one, which also left `kit_install`'s 402 worker-cap wall
49
+ with no fix an agent could apply. It is permanent and not reversible by any
50
+ call: the key stops working, the schedules stop, and the instruction, memory,
51
+ deployment and delivery destinations go. Two things the description teaches
52
+ because an agent gets them wrong by default: deleting an orchestrator deletes
53
+ its sub-workers too (`subWorkersDeleted` says how many), and
54
+ `worker_set_enabled` with `enabled:false` is the reversible thing to reach
55
+ for when someone says "stop" or "turn off". Run receipts survive; the freed
56
+ slot is the fix for 402 `limit_exceeded`. Requires the new `deleteWorkers`
57
+ scope.
58
+
59
+ ### Changed
60
+
61
+ - **`workers_list`** takes filters — `status`, `deployed`, `readiness`, `q` —
62
+ and answers `totalWorkers` (the unfiltered count, so an empty page is
63
+ readable). Every row now carries `readiness`, and `lastRun` carries
64
+ `skipReason` and `errorCode`.
65
+ - **`runs_feed`** and **`worker_runs`**: `awaitingInput` joined the status
66
+ filter and the outcome vocabulary. The server always accepted it; the closed
67
+ enum here did not, which made the questions a fleet was waiting on
68
+ unreachable from the feed.
69
+ - **`budget_get`** and **`budget_set`**: `maxConcurrentRuns` is set by the
70
+ account's plan — Free 5, Pro 20, Team 50, Enterprise uncapped — rather than
71
+ fixed at 1, and stays absent from `budget_set` because raising it is an
72
+ upgrade. It bounds runs started on demand; **`schedule_create`** and
73
+ **`schedule_update`** now say that a schedule never overlaps itself whatever
74
+ the plan allows, and **`worker_run`** points to `run_bulk` for fan-out.
75
+ - **`worker_set_enabled`** now names itself as the reversible half of the pair,
76
+ so the permanent one is never picked by accident, and spells out that
77
+ stopping an orchestrator cascades to its sub-workers while re-enabling brings
78
+ back only the parent.
79
+ - **`kit_install`** names `worker_delete` as the second way out of the 402
80
+ worker-cap wall, to be proposed only with the person's agreement.
81
+
82
+ ### Note
83
+
84
+ `worker_delete` needs the new `deleteWorkers` scope. Like every scope younger
85
+ than the manager-key surface, a key minted before it existed does not carry
86
+ it — including one minted with "all" — so a 403 there is fixed by an account
87
+ admin re-scoping the key, never by retrying.
88
+
89
+ ## [0.3.1] - 2026-09-11
90
+
91
+ ### Added
92
+
93
+ Six manager descriptors: the hosted-deployment lane. Deploying a worker existed
94
+ only in the WorkerKit dashboard, so a worker installed through the API, MCP or
95
+ the CLI was created fully configured and could never run — its schedules never
96
+ fired and `worker_run` answered 409 `not_deployed` with nothing in the toolset
97
+ able to fix it. The registry now ships 74 manager and 9 anonymous descriptors.
98
+
99
+ - **`worker_deploy`** puts a worker on the hosted runtime: pick the model and
100
+ the per-run / per-day spend ceilings, or send nothing and take the kit's
101
+ recommended model with the platform defaults. Its refusals are the deploy
102
+ gauntlet and each names its fix — no instruction, an app still unconnected,
103
+ an unfunded wallet, a model the account's tier cannot reach.
104
+ - **`deployment_get`** and **`deployments_list`** read one deployment or every
105
+ deployed worker on the account — the fleet answer to which workers can
106
+ actually run. A worker in `workers_list` but not here is inert.
107
+ - **`deployment_update`** changes a live deployment (model, reasoning,
108
+ transcript retention, ceilings) and pauses or resumes it. Pause is the
109
+ reversible stop that keeps the model and the ceilings.
110
+ - **`worker_undeploy`** takes a worker off the runtime, keeping the worker, its
111
+ instruction, memory, schedules and its own key.
112
+ - **`models_list`** is the model picker the deployment calls need: what this
113
+ account may deploy on, priced per million tokens, with the reasoning
114
+ vocabulary each model accepts and the providers the account holds its own key
115
+ for.
116
+
117
+ ### Changed
118
+
119
+ - **`kit_install`** takes `deploy` and `deployment`, so installing and deploying
120
+ are one call. A deploy refused after the install still returns 201 with
121
+ `deploymentError` naming what to fix — the worker exists either way, so the
122
+ fix is `worker_deploy`, never a second install.
123
+ - **`workers_list`** and **`worker_get`** now describe the `deployment` field
124
+ each worker carries, and that `null` there means the worker will never run
125
+ whatever its readiness says.
126
+
127
+ ### Note
128
+
129
+ The deployment writes need the new `manageDeployments` scope. Like every scope
130
+ younger than the manager-key surface, a key minted before it existed does not
131
+ carry it — including one minted with "all" — so a 403 there is fixed by an
132
+ account admin re-scoping the key, never by retrying.
133
+
9
134
  ## [0.3.0] - 2026-09-10
10
135
 
11
136
  ### Added
package/README.md CHANGED
@@ -6,7 +6,7 @@
6
6
  [![license](https://img.shields.io/npm/l/%40workerkit%2Fcore.svg)](LICENSE)
7
7
 
8
8
  The shareable [WorkerKit](https://workerkit.ai) surface: an HTTP API client, the
9
- declarative tool-descriptor registry (68 authenticated fleet-management tools +
9
+ declarative tool-descriptor registry (79 authenticated fleet-management tools +
10
10
  9 anonymous kits-directory tools), and the single wire-execution path that turns
11
11
  a descriptor plus parameters into exactly one upstream request.
12
12
 
@@ -3,7 +3,7 @@ export type { HttpMethod, ToolAnnotations, ToolDescriptor } from "./types.js";
3
3
  export { manageDescriptors } from "./manage.js";
4
4
  export { directoryDescriptors, kitDetailData, kitDetailFooter, kitListData, listFooter, publisherPageData, publisherPageFooter, } from "./directory.js";
5
5
  import type { ToolDescriptor } from "./types.js";
6
- /** Every descriptor this package ships — 68 manager + 9 anonymous. */
6
+ /** Every descriptor this package ships — 79 manager + 9 anonymous. */
7
7
  export declare const allDescriptors: readonly ToolDescriptor[];
8
8
  /** Look a descriptor up by its tool name. */
9
9
  export declare function byName(name: string): ToolDescriptor | undefined;
@@ -3,7 +3,7 @@ export { manageDescriptors } from "./manage.js";
3
3
  export { directoryDescriptors, kitDetailData, kitDetailFooter, kitListData, listFooter, publisherPageData, publisherPageFooter, } from "./directory.js";
4
4
  import { manageDescriptors } from "./manage.js";
5
5
  import { directoryDescriptors } from "./directory.js";
6
- /** Every descriptor this package ships — 68 manager + 9 anonymous. */
6
+ /** Every descriptor this package ships — 79 manager + 9 anonymous. */
7
7
  export const allDescriptors = [
8
8
  ...manageDescriptors,
9
9
  ...directoryDescriptors,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/descriptors/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EACN,MAAM,EACN,SAAS,EACT,OAAO,EACP,MAAM,GACP,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EACL,oBAAoB,EACpB,aAAa,EACb,eAAe,EACf,WAAW,EACX,UAAU,EACV,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAEtD,sEAAsE;AACtE,MAAM,CAAC,MAAM,cAAc,GAA8B;IACvD,GAAG,iBAAiB;IACpB,GAAG,oBAAoB;CACxB,CAAC;AAEF,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAEpE,6CAA6C;AAC7C,MAAM,UAAU,MAAM,CAAC,IAAY;IACjC,OAAO,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC/B,CAAC","sourcesContent":["export {\n CREATE,\n DELETE,\n READ_ONLY,\n TRIGGER,\n UPDATE,\n} from \"./types.js\";\nexport type { HttpMethod, ToolAnnotations, ToolDescriptor } from \"./types.js\";\n\nexport { manageDescriptors } from \"./manage.js\";\nexport {\n directoryDescriptors,\n kitDetailData,\n kitDetailFooter,\n kitListData,\n listFooter,\n publisherPageData,\n publisherPageFooter,\n} from \"./directory.js\";\n\nimport type { ToolDescriptor } from \"./types.js\";\nimport { manageDescriptors } from \"./manage.js\";\nimport { directoryDescriptors } from \"./directory.js\";\n\n/** Every descriptor this package ships — 68 manager + 9 anonymous. */\nexport const allDescriptors: readonly ToolDescriptor[] = [\n ...manageDescriptors,\n ...directoryDescriptors,\n];\n\nconst byNameIndex = new Map(allDescriptors.map((d) => [d.name, d]));\n\n/** Look a descriptor up by its tool name. */\nexport function byName(name: string): ToolDescriptor | undefined {\n return byNameIndex.get(name);\n}\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/descriptors/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EACN,MAAM,EACN,SAAS,EACT,OAAO,EACP,MAAM,GACP,MAAM,YAAY,CAAC;AAGpB,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EACL,oBAAoB,EACpB,aAAa,EACb,eAAe,EACf,WAAW,EACX,UAAU,EACV,iBAAiB,EACjB,mBAAmB,GACpB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAEtD,sEAAsE;AACtE,MAAM,CAAC,MAAM,cAAc,GAA8B;IACvD,GAAG,iBAAiB;IACpB,GAAG,oBAAoB;CACxB,CAAC;AAEF,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAEpE,6CAA6C;AAC7C,MAAM,UAAU,MAAM,CAAC,IAAY;IACjC,OAAO,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC/B,CAAC","sourcesContent":["export {\n CREATE,\n DELETE,\n READ_ONLY,\n TRIGGER,\n UPDATE,\n} from \"./types.js\";\nexport type { HttpMethod, ToolAnnotations, ToolDescriptor } from \"./types.js\";\n\nexport { manageDescriptors } from \"./manage.js\";\nexport {\n directoryDescriptors,\n kitDetailData,\n kitDetailFooter,\n kitListData,\n listFooter,\n publisherPageData,\n publisherPageFooter,\n} from \"./directory.js\";\n\nimport type { ToolDescriptor } from \"./types.js\";\nimport { manageDescriptors } from \"./manage.js\";\nimport { directoryDescriptors } from \"./directory.js\";\n\n/** Every descriptor this package ships — 79 manager + 9 anonymous. */\nexport const allDescriptors: readonly ToolDescriptor[] = [\n ...manageDescriptors,\n ...directoryDescriptors,\n];\n\nconst byNameIndex = new Map(allDescriptors.map((d) => [d.name, d]));\n\n/** Look a descriptor up by its tool name. */\nexport function byName(name: string): ToolDescriptor | undefined {\n return byNameIndex.get(name);\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"manage.d.ts","sourceRoot":"","sources":["../../src/descriptors/manage.ts"],"names":[],"mappings":"AAMA,OAAO,EAA8C,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AA2pD7F,eAAO,MAAM,iBAAiB,EAAE,SAAS,cAAc,EAqEtD,CAAC"}
1
+ {"version":3,"file":"manage.d.ts","sourceRoot":"","sources":["../../src/descriptors/manage.ts"],"names":[],"mappings":"AAMA,OAAO,EAA8C,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AAi7D7F,eAAO,MAAM,iBAAiB,EAAE,SAAS,cAAc,EAgFtD,CAAC"}