@happyvertical/smrt-playbooks 0.51.32 → 0.51.34
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/__smrt-register__.d.ts +2 -0
- package/dist/__smrt-register__.d.ts.map +1 -0
- package/dist/cache.d.ts +38 -0
- package/dist/cache.d.ts.map +1 -0
- package/dist/collections/PlaybookOverrideCollection.d.ts +19 -0
- package/dist/collections/PlaybookOverrideCollection.d.ts.map +1 -0
- package/dist/index.d.ts +29 -632
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1 -1
- package/dist/manifest.json +1 -1
- package/dist/models/PlaybookOverride.d.ts +42 -0
- package/dist/models/PlaybookOverride.d.ts.map +1 -0
- package/dist/playbook-registry.d.ts +22 -0
- package/dist/playbook-registry.d.ts.map +1 -0
- package/dist/playbook-resolver.d.ts +11 -0
- package/dist/playbook-resolver.d.ts.map +1 -0
- package/dist/preflight-cache.d.ts +52 -0
- package/dist/preflight-cache.d.ts.map +1 -0
- package/dist/preflight-types.d.ts +146 -280
- package/dist/preflight-types.d.ts.map +1 -0
- package/dist/preflight.d.ts +100 -0
- package/dist/preflight.d.ts.map +1 -0
- package/dist/rest-preflight.d.ts +62 -0
- package/dist/rest-preflight.d.ts.map +1 -0
- package/dist/smrt-knowledge.json +4 -4
- package/dist/types.d.ts +213 -245
- package/dist/types.d.ts.map +1 -0
- package/dist/utils.d.ts +62 -0
- package/dist/utils.d.ts.map +1 -0
- package/package.json +7 -7
package/dist/index.js
CHANGED
|
@@ -15,7 +15,7 @@ var __exportAll = (all, no_symbols) => {
|
|
|
15
15
|
};
|
|
16
16
|
//#endregion
|
|
17
17
|
//#region src/__smrt-register__.ts
|
|
18
|
-
ObjectRegistry.registerPackageManifest(JSON.parse("{\"version\":\"1.0.0\",\"timestamp\":0,\"packageName\":\"@happyvertical/smrt-playbooks\",\"packageVersion\":\"0.51.
|
|
18
|
+
ObjectRegistry.registerPackageManifest(JSON.parse("{\"version\":\"1.0.0\",\"timestamp\":0,\"packageName\":\"@happyvertical/smrt-playbooks\",\"packageVersion\":\"0.51.34\",\"objects\":{\"@happyvertical/smrt-playbooks:PlaybookOverrideCollection\":{\"name\":\"playbookoverridecollection\",\"className\":\"PlaybookOverrideCollection\",\"qualifiedName\":\"@happyvertical/smrt-playbooks:PlaybookOverrideCollection\",\"collection\":\"playbookoverrides\",\"filePath\":\"/home/runner/work/smrt/smrt/packages/playbooks/src/collections/PlaybookOverrideCollection.ts\",\"packageName\":\"@happyvertical/smrt-playbooks\",\"fields\":{},\"methods\":{\"getAppOverride\":{\"name\":\"getAppOverride\",\"async\":true,\"parameters\":[{\"name\":\"key\",\"type\":\"string\",\"optional\":false},{\"name\":\"options\",\"type\":\"object\",\"optional\":true,\"memberTypes\":[\"string\"]}],\"returnType\":\"Promise<PlaybookOverride | null>\",\"isStatic\":false,\"isPublic\":true},\"getTenantOverride\":{\"name\":\"getTenantOverride\",\"async\":true,\"parameters\":[{\"name\":\"key\",\"type\":\"string\",\"optional\":false},{\"name\":\"tenantId\",\"type\":\"string\",\"optional\":false},{\"name\":\"options\",\"type\":\"object\",\"optional\":true,\"memberTypes\":[\"string\"]}],\"returnType\":\"Promise<PlaybookOverride | null>\",\"isStatic\":false,\"isPublic\":true},\"getResolutionLayers\":{\"name\":\"getResolutionLayers\",\"async\":true,\"parameters\":[{\"name\":\"key\",\"type\":\"string\",\"optional\":false},{\"name\":\"tenantId\",\"type\":\"string | null\",\"optional\":true,\"unionBranches\":[{\"type\":\"string\"},{\"type\":\"null\"}]},{\"name\":\"options\",\"type\":\"object\",\"optional\":true,\"memberTypes\":[\"string\"]}],\"returnType\":\"Promise<object>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"_smrt_playbook_overrides\"},\"extends\":\"SmrtCollection\",\"extendsTypeArg\":\"PlaybookOverride\",\"exportName\":\"PlaybookOverrideCollection\",\"collectionExportName\":\"PlaybookOverrideCollectionCollection\",\"schema\":{\"tableName\":\"_smrt_playbook_overrides\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"_smrt_playbook_overrides\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"key\\\" TEXT NOT NULL DEFAULT '',\\n \\\"tenant_id\\\" TEXT,\\n \\\"title\\\" TEXT,\\n \\\"description\\\" TEXT,\\n \\\"planes\\\" TEXT,\\n \\\"on_step_failure\\\" TEXT,\\n \\\"enabled\\\" BOOLEAN,\\n \\\"metadata\\\" TEXT\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"key\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false,\"default\":\"\"},\"tenant_id\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"title\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"description\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"planes\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"on_step_failure\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"enabled\":{\"type\":\"BOOLEAN\",\"notNull\":false,\"unique\":false},\"metadata\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false}},\"indexes\":[{\"name\":\"_smrt_playbook_overrides_key_context_idx\",\"columns\":[\"key\",\"context\"],\"unique\":true},{\"name\":\"_smrt_playbook_overrides_slug_context_idx\",\"columns\":[\"slug\",\"context\"]},{\"name\":\"_smrt_playbook_overrides_created_at_idx\",\"columns\":[\"created_at\"]}],\"version\":\"8aec8e13\"},\"importPath\":\"@happyvertical/smrt-playbooks\"},\"@happyvertical/smrt-playbooks:PlaybookOverride\":{\"name\":\"playbookoverride\",\"className\":\"PlaybookOverride\",\"qualifiedName\":\"@happyvertical/smrt-playbooks:PlaybookOverride\",\"collection\":\"playbookoverrides\",\"filePath\":\"/home/runner/work/smrt/smrt/packages/playbooks/src/models/PlaybookOverride.ts\",\"packageName\":\"@happyvertical/smrt-playbooks\",\"fields\":{\"key\":{\"type\":\"text\",\"required\":true,\"default\":\"\",\"_meta\":{\"required\":true}},\"tenantId\":{\"type\":\"text\",\"required\":false,\"_meta\":{\"nullable\":true}},\"title\":{\"type\":\"text\",\"required\":false,\"_meta\":{\"nullable\":true}},\"description\":{\"type\":\"text\",\"required\":false,\"_meta\":{\"nullable\":true}},\"planes\":{\"type\":\"text\",\"required\":false,\"_meta\":{\"nullable\":true}},\"onStepFailure\":{\"type\":\"text\",\"required\":false,\"_meta\":{\"nullable\":true}},\"enabled\":{\"type\":\"boolean\",\"required\":false,\"_meta\":{\"nullable\":true}},\"metadata\":{\"type\":\"text\",\"required\":false,\"_meta\":{\"nullable\":true}}},\"methods\":{\"getMetadata\":{\"name\":\"getMetadata\",\"async\":false,\"parameters\":[],\"returnType\":\"PlaybookMetadata\",\"isStatic\":false,\"isPublic\":true},\"setMetadata\":{\"name\":\"setMetadata\",\"async\":false,\"parameters\":[{\"name\":\"metadata\",\"type\":\"PlaybookMetadata | null\",\"optional\":false,\"unionBranches\":[{\"type\":\"PlaybookMetadata\"},{\"type\":\"null\"}]}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"getPlanes\":{\"name\":\"getPlanes\",\"async\":false,\"parameters\":[],\"returnType\":\"any\",\"isStatic\":false,\"isPublic\":true},\"setPlanes\":{\"name\":\"setPlanes\",\"async\":false,\"parameters\":[{\"name\":\"planes\",\"type\":\"any\",\"optional\":false,\"typeUnresolved\":true}],\"returnType\":\"void\",\"isStatic\":false,\"isPublic\":true},\"toPlaybookLayer\":{\"name\":\"toPlaybookLayer\",\"async\":false,\"parameters\":[],\"returnType\":\"PlaybookLayer\",\"isStatic\":false,\"isPublic\":true},\"save\":{\"name\":\"save\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<this>\",\"isStatic\":false,\"isPublic\":true},\"delete\":{\"name\":\"delete\",\"async\":true,\"parameters\":[],\"returnType\":\"Promise<void>\",\"isStatic\":false,\"isPublic\":true}},\"decoratorConfig\":{\"tableName\":\"_smrt_playbook_overrides\",\"conflictColumns\":[\"key\",\"context\"],\"api\":{\"include\":[\"list\",\"get\",\"create\",\"update\",\"delete\"]},\"cli\":{\"include\":[\"list\",\"get\",\"create\",\"update\",\"delete\"],\"exclude\":[\"getMetadata\",\"setMetadata\",\"getPlanes\",\"setPlanes\",\"toPlaybookLayer\"]},\"mcp\":{\"include\":[]}},\"extends\":\"SmrtObject\",\"exportName\":\"PlaybookOverride\",\"collectionExportName\":\"PlaybookOverrideCollection\",\"validationRules\":[{\"field\":\"key\",\"rule\":\"required\",\"fieldType\":\"text\"}],\"schema\":{\"tableName\":\"_smrt_playbook_overrides\",\"ddl\":\"CREATE TABLE IF NOT EXISTS \\\"_smrt_playbook_overrides\\\" (\\n \\\"id\\\" UUID PRIMARY KEY NOT NULL,\\n \\\"slug\\\" TEXT NOT NULL,\\n \\\"context\\\" TEXT NOT NULL DEFAULT '',\\n \\\"created_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"updated_at\\\" TIMESTAMP NOT NULL DEFAULT current_timestamp,\\n \\\"key\\\" TEXT NOT NULL DEFAULT '',\\n \\\"tenant_id\\\" TEXT,\\n \\\"title\\\" TEXT,\\n \\\"description\\\" TEXT,\\n \\\"planes\\\" TEXT,\\n \\\"on_step_failure\\\" TEXT,\\n \\\"enabled\\\" BOOLEAN,\\n \\\"metadata\\\" TEXT\\n);\",\"columns\":{\"id\":{\"type\":\"UUID\",\"primaryKey\":true,\"referenceKind\":\"id\",\"notNull\":true},\"slug\":{\"type\":\"TEXT\",\"notNull\":true},\"context\":{\"type\":\"TEXT\",\"notNull\":true,\"default\":\"\"},\"created_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"updated_at\":{\"type\":\"TIMESTAMP\",\"notNull\":true,\"default\":\"current_timestamp\"},\"key\":{\"type\":\"TEXT\",\"notNull\":true,\"unique\":false,\"default\":\"\"},\"tenant_id\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"title\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"description\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"planes\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"on_step_failure\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false},\"enabled\":{\"type\":\"BOOLEAN\",\"notNull\":false,\"unique\":false},\"metadata\":{\"type\":\"TEXT\",\"notNull\":false,\"unique\":false}},\"indexes\":[{\"name\":\"_smrt_playbook_overrides_key_context_idx\",\"columns\":[\"key\",\"context\"],\"unique\":true},{\"name\":\"_smrt_playbook_overrides_slug_context_idx\",\"columns\":[\"slug\",\"context\"]},{\"name\":\"_smrt_playbook_overrides_created_at_idx\",\"columns\":[\"created_at\"]}],\"version\":\"8aec8e13\"},\"importPath\":\"@happyvertical/smrt-playbooks\"}},\"moduleType\":\"smrt\",\"smrtDependencies\":[\"@happyvertical/smrt-core\",\"@happyvertical/smrt-tenancy\"]}"));
|
|
19
19
|
//#endregion
|
|
20
20
|
//#region src/cache.ts
|
|
21
21
|
var PLAYBOOK_CACHE_TTL_MS = 3e4;
|
package/dist/manifest.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"version": "1.0.0",
|
|
3
3
|
"timestamp": 0,
|
|
4
4
|
"packageName": "@happyvertical/smrt-playbooks",
|
|
5
|
-
"packageVersion": "0.51.
|
|
5
|
+
"packageVersion": "0.51.34",
|
|
6
6
|
"objects": {
|
|
7
7
|
"@happyvertical/smrt-playbooks:PlaybookOverrideCollection": {
|
|
8
8
|
"name": "playbookoverridecollection",
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { SmrtObject, type SmrtObjectOptions } from '@happyvertical/smrt-core';
|
|
2
|
+
import type { PlaybookLayer, PlaybookMetadata, PlaybookOverrideOptions as PlaybookOverrideFieldOptions, PlaybookPlane } from '../types.js';
|
|
3
|
+
export interface PlaybookOverrideOptions extends SmrtObjectOptions, PlaybookOverrideFieldOptions {
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Stored app-level (`tenantId = null`) and tenant-level playbook overrides.
|
|
7
|
+
*
|
|
8
|
+
* There is deliberately **no `steps` column**. `steps` is structurally
|
|
9
|
+
* non-editable: an override layer has nowhere to put a step list, and
|
|
10
|
+
* assigning one is rejected in `save()` rather than silently dropped. That is
|
|
11
|
+
* the description-behavior guarantee from epic #2585 — an agent announcing
|
|
12
|
+
* "checking out your cart" must not be following a rewritten script.
|
|
13
|
+
*/
|
|
14
|
+
export declare class PlaybookOverride extends SmrtObject {
|
|
15
|
+
key: string;
|
|
16
|
+
tenantId: string | null;
|
|
17
|
+
title: string | null;
|
|
18
|
+
description: string | null;
|
|
19
|
+
/** JSON array of plane names; null inherits the lower layer. */
|
|
20
|
+
planes: string | null;
|
|
21
|
+
onStepFailure: string | null;
|
|
22
|
+
/** Tri-state: null inherits, false disables. True can never widen. */
|
|
23
|
+
enabled: boolean | null;
|
|
24
|
+
/** JSON object; stored as a string with guarded get/set helpers. */
|
|
25
|
+
metadata: string | null;
|
|
26
|
+
constructor(options?: PlaybookOverrideOptions);
|
|
27
|
+
getMetadata(): PlaybookMetadata;
|
|
28
|
+
setMetadata(metadata: PlaybookMetadata | null): void;
|
|
29
|
+
getPlanes(): readonly PlaybookPlane[] | null;
|
|
30
|
+
setPlanes(planes: readonly PlaybookPlane[] | null): void;
|
|
31
|
+
toPlaybookLayer(): PlaybookLayer;
|
|
32
|
+
save(): Promise<this>;
|
|
33
|
+
private saveAfterIdentityChange;
|
|
34
|
+
private saveAfterIdentityChangeInTransaction;
|
|
35
|
+
private saveAfterIdentityChangeWithDeferredDelete;
|
|
36
|
+
delete(): Promise<void>;
|
|
37
|
+
private validatePlaybookOverride;
|
|
38
|
+
private getLowerPrecedenceLayers;
|
|
39
|
+
private normalizeForPersistence;
|
|
40
|
+
private getPersistedIdentity;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=PlaybookOverride.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PlaybookOverride.d.ts","sourceRoot":"","sources":["../../src/models/PlaybookOverride.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,UAAU,EACV,KAAK,iBAAiB,EAEvB,MAAM,0BAA0B,CAAC;AAIlC,OAAO,KAAK,EAGV,aAAa,EACb,gBAAgB,EAChB,uBAAuB,IAAI,4BAA4B,EAEvD,aAAa,EACd,MAAM,aAAa,CAAC;AAUrB,MAAM,WAAW,uBACf,SAAQ,iBAAiB,EACvB,4BAA4B;CAAG;AAkBnC;;;;;;;;GAQG;AACH,qBAgBa,gBAAiB,SAAQ,UAAU;IAE9C,GAAG,EAAE,MAAM,CAAM;IAGjB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAQ;IAG/B,KAAK,EAAE,MAAM,GAAG,IAAI,CAAQ;IAG5B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAQ;IAElC,gEAAgE;IAEhE,MAAM,EAAE,MAAM,GAAG,IAAI,CAAQ;IAG7B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAQ;IAEpC,sEAAsE;IAEtE,OAAO,EAAE,OAAO,GAAG,IAAI,CAAQ;IAE/B,oEAAoE;IAEpE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAQ;gBAEnB,OAAO,GAAE,uBAA4B;IAmCjD,WAAW,IAAI,gBAAgB;IAI/B,WAAW,CAAC,QAAQ,EAAE,gBAAgB,GAAG,IAAI,GAAG,IAAI;IAIpD,SAAS,IAAI,SAAS,aAAa,EAAE,GAAG,IAAI;IAI5C,SAAS,CAAC,MAAM,EAAE,SAAS,aAAa,EAAE,GAAG,IAAI,GAAG,IAAI;IAIxD,eAAe,IAAI,aAAa;IAkBjB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YA+BtB,uBAAuB;YAQvB,oCAAoC;YA+BpC,yCAAyC;IA6BxC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;YAOxB,wBAAwB;YAsHxB,wBAAwB;IA4BtC,OAAO,CAAC,uBAAuB;YAuCjB,oBAAoB;CAmBnC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { PlaybookDefinition, PlaybookDefinitionInput } from './types.js';
|
|
2
|
+
declare global {
|
|
3
|
+
var __smrtPlaybookRegistry: Map<string, PlaybookDefinition> | undefined;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Global process registry of code-default playbooks, keyed by namespaced key.
|
|
7
|
+
*
|
|
8
|
+
* Held on `globalThis` so it survives HMR, mirroring `PromptRegistry`.
|
|
9
|
+
*/
|
|
10
|
+
export declare const PlaybookRegistry: {
|
|
11
|
+
register(input: PlaybookDefinitionInput): PlaybookDefinition;
|
|
12
|
+
get(key: string): PlaybookDefinition | undefined;
|
|
13
|
+
has(key: string): boolean;
|
|
14
|
+
getAll(): PlaybookDefinition[];
|
|
15
|
+
clear(): void;
|
|
16
|
+
};
|
|
17
|
+
/**
|
|
18
|
+
* Registers a code-default playbook. Packages call this at import time so a
|
|
19
|
+
* bundled playbook resolves without any application registration.
|
|
20
|
+
*/
|
|
21
|
+
export declare function definePlaybook(input: PlaybookDefinitionInput): PlaybookDefinition;
|
|
22
|
+
//# sourceMappingURL=playbook-registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"playbook-registry.d.ts","sourceRoot":"","sources":["../src/playbook-registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAG9E,OAAO,CAAC,MAAM,CAAC;IAEb,IAAI,sBAAsB,EAAE,GAAG,CAAC,MAAM,EAAE,kBAAkB,CAAC,GAAG,SAAS,CAAC;CACzE;AA2BD;;;;GAIG;AACH,eAAO,MAAM,gBAAgB;oBACX,uBAAuB,GAAG,kBAAkB;aAsBnD,MAAM,GAAG,kBAAkB,GAAG,SAAS;aAIvC,MAAM,GAAG,OAAO;cAIf,kBAAkB,EAAE;aAIrB,IAAI;CAGd,CAAC;AAEF;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,uBAAuB,GAC7B,kBAAkB,CAEpB"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { PlaybookResolution, ResolvePlaybookOptions } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Resolves a playbook to a plan for a caller on a given plane.
|
|
4
|
+
*
|
|
5
|
+
* Returns a discriminated result rather than throwing: resolution fails closed
|
|
6
|
+
* and every rejection names a specific reason. Nothing here executes a step —
|
|
7
|
+
* the plan is followed step by step by the agent, and each step is authorized
|
|
8
|
+
* independently at the REST boundary or by `PrincipalRun.assertToolAllowed()`.
|
|
9
|
+
*/
|
|
10
|
+
export declare function resolvePlaybook(key: string, options?: ResolvePlaybookOptions): Promise<PlaybookResolution>;
|
|
11
|
+
//# sourceMappingURL=playbook-resolver.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"playbook-resolver.d.ts","sourceRoot":"","sources":["../src/playbook-resolver.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAQV,kBAAkB,EAClB,sBAAsB,EACvB,MAAM,YAAY,CAAC;AAmGpB;;;;;;;GAOG;AACH,wBAAsB,eAAe,CACnC,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,kBAAkB,CAAC,CAwH7B"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Preflight result cache (issue #2590).
|
|
3
|
+
*
|
|
4
|
+
* Preflight predicts; it never grants. Every step re-enforces at execution, and
|
|
5
|
+
* that constraint is exactly what makes this cache free:
|
|
6
|
+
*
|
|
7
|
+
* - a stale `allow` costs a correctly-denied step at execution;
|
|
8
|
+
* - a stale `deny` costs a briefly hidden capability that expires on the TTL.
|
|
9
|
+
*
|
|
10
|
+
* Neither is a security event, so results are cached per
|
|
11
|
+
* `(principal, key, plane, tenant)` with a short TTL and **no invalidation
|
|
12
|
+
* ceremony** beyond the playbook cache's own per-`(db, key)` generation counter:
|
|
13
|
+
* a result captured under generation N is dropped once an override write has
|
|
14
|
+
* bumped the counter past N. There is deliberately no per-principal invalidation
|
|
15
|
+
* on a permission change — the TTL is the whole contract, because execution
|
|
16
|
+
* re-enforces regardless.
|
|
17
|
+
*/
|
|
18
|
+
import type { PlaybookPreflightReport } from './preflight-types.js';
|
|
19
|
+
import type { PlaybookPlane } from './types.js';
|
|
20
|
+
/** Identity a cached preflight result is stored under. */
|
|
21
|
+
export interface PreflightCacheScope {
|
|
22
|
+
/** Opaque, caller-scoped principal partition. Never consulted for authority. */
|
|
23
|
+
principal: string;
|
|
24
|
+
key: string;
|
|
25
|
+
plane: PlaybookPlane;
|
|
26
|
+
/**
|
|
27
|
+
* Tenant the result was resolved for. Part of the key because a tenant
|
|
28
|
+
* override can disable a playbook or narrow its planes — the base playbook
|
|
29
|
+
* cache scopes by tenant for the same reason.
|
|
30
|
+
*/
|
|
31
|
+
tenantId: string | null;
|
|
32
|
+
db: unknown;
|
|
33
|
+
}
|
|
34
|
+
/** TTL applied to every cached preflight result. */
|
|
35
|
+
export declare function getPlaybookPreflightCacheTtlMs(): number;
|
|
36
|
+
/**
|
|
37
|
+
* Reads a cached preflight result.
|
|
38
|
+
*
|
|
39
|
+
* A result captured before an override write (a lower generation) is dropped
|
|
40
|
+
* rather than served, so an override change is reflected without waiting out
|
|
41
|
+
* the TTL.
|
|
42
|
+
*/
|
|
43
|
+
export declare function getCachedPlaybookPreflight(scope: PreflightCacheScope): PlaybookPreflightReport | null;
|
|
44
|
+
/**
|
|
45
|
+
* Stores a preflight result. `loadedAtGeneration` is the generation captured
|
|
46
|
+
* *before* resolution started: a write that landed while it was in flight makes
|
|
47
|
+
* the result stale on arrival, and it is dropped rather than cached.
|
|
48
|
+
*/
|
|
49
|
+
export declare function setCachedPlaybookPreflight(scope: PreflightCacheScope, report: PlaybookPreflightReport, loadedAtGeneration: number): void;
|
|
50
|
+
/** Drops every cached preflight result. Use in tests. */
|
|
51
|
+
export declare function clearPlaybookPreflightCache(): void;
|
|
52
|
+
//# sourceMappingURL=preflight-cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"preflight-cache.d.ts","sourceRoot":"","sources":["../src/preflight-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAGH,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AACpE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAYhD,0DAA0D;AAC1D,MAAM,WAAW,mBAAmB;IAClC,gFAAgF;IAChF,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,aAAa,CAAC;IACrB;;;;OAIG;IACH,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,EAAE,EAAE,OAAO,CAAC;CACb;AAgCD,oDAAoD;AACpD,wBAAgB,8BAA8B,IAAI,MAAM,CAEvD;AAED;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,mBAAmB,GACzB,uBAAuB,GAAG,IAAI,CAgBhC;AAED;;;;GAIG;AACH,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,mBAAmB,EAC1B,MAAM,EAAE,uBAAuB,EAC/B,kBAAkB,EAAE,MAAM,GACzB,IAAI,CAcN;AAED,yDAAyD;AACzD,wBAAgB,2BAA2B,IAAI,IAAI,CAElD"}
|