@mccaskie-labs/workbench-config 0.1.29 → 0.1.31

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
@@ -1,5 +1,17 @@
1
1
  # @mccaskie-labs/workbench-config
2
2
 
3
+ ## 0.1.31
4
+
5
+ ### Patch Changes
6
+
7
+ - The `gateway` manifest lists the `X-Workbench-Keep` request header (kept calls, `docs/spec.md` §2.9), and says what `X-Workbench-Subject` should hold for an app with signed-in users.
8
+
9
+ ## 0.1.30
10
+
11
+ ### Patch Changes
12
+
13
+ - The Gateway manifest's `budget_exceeded` now names which cap was reached: a tool's, the environment's or the global ceiling.
14
+
3
15
  ## 0.1.29
4
16
 
5
17
  ### Patch Changes
@@ -37,7 +37,8 @@
37
37
  { "name": "Authorization", "required": true, "description": "Bearer <key>. On /anthropic/* the key goes in x-api-key instead, so the official SDK works unchanged" },
38
38
  { "name": "X-Workbench-Job", "required": true, "pattern": "^[a-z0-9._-]{1,64}$", "description": "What the call is for, e.g. article.write. Recorded with usage" },
39
39
  { "name": "X-Workbench-Prompt-Version", "required": false, "description": "The app's prompt version, recorded with usage (audit F17)" },
40
- { "name": "X-Workbench-Subject", "required": false, "pattern": "^[a-z0-9_-]+:[^\\s]{1,128}$", "description": "type:id of the thing the call is about" },
40
+ { "name": "X-Workbench-Subject", "required": false, "pattern": "^[a-z0-9_-]+:[^\\s]{1,128}$", "description": "type:id of the thing the call is about. An app with signed-in users sends user:<its own user id>, never a name, email address or phone number, so a person's kept calls can be found and deleted (spec §2.9)" },
41
+ { "name": "X-Workbench-Keep", "required": false, "pattern": "^(yes|no)$", "description": "no: keep this AI call's facts but not its text (spec §2.9). A refused call is kept whatever it says. Left out, the project's own setting decides (on by default)" },
41
42
  { "name": "Idempotency-Key", "required": false, "description": "Email only: a repeat within 24 hours returns the stored result" },
42
43
  { "name": "X-Workbench-Env", "required": false, "pattern": "^(development|staging|production)$", "description": "The caller's WORKBENCH_ENV. The packages send it; a key from another environment is then refused with unauthorised" }
43
44
  ],
@@ -54,7 +55,7 @@
54
55
  { "code": "unauthorised", "http": 401, "retryable": false, "meaning": "No key, a malformed or unknown key, a revoked key, or a key from the wrong environment" },
55
56
  { "code": "forbidden_scope", "http": 403, "retryable": false, "meaning": "The key doesn't carry the scope this endpoint needs" },
56
57
  { "code": "invalid_request", "http": 400, "retryable": false, "meaning": "The body or a required header is missing or malformed" },
57
- { "code": "budget_exceeded", "http": 402, "retryable": false, "meaning": "The environment's enforced monthly budget, or the global ceiling, is reached" },
58
+ { "code": "budget_exceeded", "http": 402, "retryable": false, "meaning": "An enforced monthly cap is reached: the tool's cap (AI text, AI images, image search or email), the environment's budget or the global ceiling, whichever comes first. The error names it in budget (tool, environment or global) and, for a tool, tool" },
58
59
  { "code": "content_refused", "http": 422, "retryable": false, "meaning": "The Workbench content rules refuse what was sent (stage input) or what the vendor made (stage output). The error names the rule, the stage and the rules version, never the content. A vendor's own safety block is reported the same way, with rule vendor" },
59
60
  { "code": "content_check_unavailable", "http": 503, "retryable": true, "meaning": "The content check couldn't be run, so nothing was returned. Nothing passes unchecked" },
60
61
  { "code": "rate_limited", "http": 429, "retryable": true, "meaning": "Per-key rate limit; it stops runaway loops, budgets limit spend" },
@@ -1,4 +1,4 @@
1
- export declare const MANIFEST_VERSION: "4538a59cfe87";
1
+ export declare const MANIFEST_VERSION: "0f2fa24af1ca";
2
2
  export declare const capabilities: {
3
3
  readonly ai: {
4
4
  readonly $schema: "./schema.json";
@@ -1203,7 +1203,12 @@ export declare const capabilities: {
1203
1203
  readonly name: "X-Workbench-Subject";
1204
1204
  readonly required: false;
1205
1205
  readonly pattern: "^[a-z0-9_-]+:[^\\s]{1,128}$";
1206
- readonly description: "type:id of the thing the call is about";
1206
+ readonly description: "type:id of the thing the call is about. An app with signed-in users sends user:<its own user id>, never a name, email address or phone number, so a person's kept calls can be found and deleted (spec §2.9)";
1207
+ }, {
1208
+ readonly name: "X-Workbench-Keep";
1209
+ readonly required: false;
1210
+ readonly pattern: "^(yes|no)$";
1211
+ readonly description: "no: keep this AI call's facts but not its text (spec §2.9). A refused call is kept whatever it says. Left out, the project's own setting decides (on by default)";
1207
1212
  }, {
1208
1213
  readonly name: "Idempotency-Key";
1209
1214
  readonly required: false;
@@ -1263,7 +1268,7 @@ export declare const capabilities: {
1263
1268
  readonly code: "budget_exceeded";
1264
1269
  readonly http: 402;
1265
1270
  readonly retryable: false;
1266
- readonly meaning: "The environment's enforced monthly budget, or the global ceiling, is reached";
1271
+ readonly meaning: "An enforced monthly cap is reached: the tool's cap (AI text, AI images, image search or email), the environment's budget or the global ceiling, whichever comes first. The error names it in budget (tool, environment or global) and, for a tool, tool";
1267
1272
  }, {
1268
1273
  readonly code: "content_refused";
1269
1274
  readonly http: 422;
@@ -1,6 +1,6 @@
1
1
  // Generated by `npm run capabilities:build` from capabilities/*.json. Do not edit.
2
2
  // check:capabilities fails in Checks when this file is stale.
3
- export const MANIFEST_VERSION = "4538a59cfe87";
3
+ export const MANIFEST_VERSION = "0f2fa24af1ca";
4
4
  export const capabilities = {
5
5
  "ai": {
6
6
  "$schema": "./schema.json",
@@ -1653,7 +1653,13 @@ export const capabilities = {
1653
1653
  "name": "X-Workbench-Subject",
1654
1654
  "required": false,
1655
1655
  "pattern": "^[a-z0-9_-]+:[^\\s]{1,128}$",
1656
- "description": "type:id of the thing the call is about"
1656
+ "description": "type:id of the thing the call is about. An app with signed-in users sends user:<its own user id>, never a name, email address or phone number, so a person's kept calls can be found and deleted (spec §2.9)"
1657
+ },
1658
+ {
1659
+ "name": "X-Workbench-Keep",
1660
+ "required": false,
1661
+ "pattern": "^(yes|no)$",
1662
+ "description": "no: keep this AI call's facts but not its text (spec §2.9). A refused call is kept whatever it says. Left out, the project's own setting decides (on by default)"
1657
1663
  },
1658
1664
  {
1659
1665
  "name": "Idempotency-Key",
@@ -1733,7 +1739,7 @@ export const capabilities = {
1733
1739
  "code": "budget_exceeded",
1734
1740
  "http": 402,
1735
1741
  "retryable": false,
1736
- "meaning": "The environment's enforced monthly budget, or the global ceiling, is reached"
1742
+ "meaning": "An enforced monthly cap is reached: the tool's cap (AI text, AI images, image search or email), the environment's budget or the global ceiling, whichever comes first. The error names it in budget (tool, environment or global) and, for a tool, tool"
1737
1743
  },
1738
1744
  {
1739
1745
  "code": "content_refused",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mccaskie-labs/workbench-config",
3
- "version": "0.1.29",
3
+ "version": "0.1.31",
4
4
  "description": "Workbench app configuration: WORKBENCH_ENV, typed variables that fail by name, secrets that are never printed, and the capabilities manifest.",
5
5
  "license": "UNLICENSED",
6
6
  "type": "module",