@vorionsys/atsf-core 0.2.2 → 0.2.3
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 +3 -3
- package/README.md +77 -11
- package/dist/api/index.d.ts +1 -1
- package/dist/api/index.js +1 -1
- package/dist/api/server.d.ts +5 -2
- package/dist/api/server.d.ts.map +1 -1
- package/dist/api/server.js +186 -149
- package/dist/api/server.js.map +1 -1
- package/dist/arbitration/index.d.ts +4 -4
- package/dist/arbitration/index.d.ts.map +1 -1
- package/dist/arbitration/index.js +46 -41
- package/dist/arbitration/index.js.map +1 -1
- package/dist/arbitration/types.d.ts +10 -10
- package/dist/arbitration/types.d.ts.map +1 -1
- package/dist/basis/evaluator.d.ts +1 -1
- package/dist/basis/evaluator.d.ts.map +1 -1
- package/dist/basis/evaluator.js +56 -54
- package/dist/basis/evaluator.js.map +1 -1
- package/dist/basis/index.d.ts +3 -3
- package/dist/basis/index.js +3 -3
- package/dist/basis/parser.d.ts +16 -16
- package/dist/basis/parser.d.ts.map +1 -1
- package/dist/basis/parser.js +32 -25
- package/dist/basis/parser.js.map +1 -1
- package/dist/basis/types.d.ts +2 -2
- package/dist/chain/index.d.ts.map +1 -1
- package/dist/chain/index.js +16 -16
- package/dist/chain/index.js.map +1 -1
- package/dist/cognigate/index.d.ts +1 -1
- package/dist/cognigate/index.d.ts.map +1 -1
- package/dist/cognigate/index.js +44 -33
- package/dist/cognigate/index.js.map +1 -1
- package/dist/common/adapters.d.ts +18 -11
- package/dist/common/adapters.d.ts.map +1 -1
- package/dist/common/adapters.js +100 -79
- package/dist/common/adapters.js.map +1 -1
- package/dist/common/config.d.ts +67 -67
- package/dist/common/config.js +49 -49
- package/dist/common/config.js.map +1 -1
- package/dist/common/index.d.ts +4 -4
- package/dist/common/index.js +4 -4
- package/dist/common/logger.d.ts +1 -1
- package/dist/common/logger.js +8 -8
- package/dist/common/types.d.ts +8 -8
- package/dist/common/types.js +5 -5
- package/dist/containment/index.d.ts +3 -3
- package/dist/containment/index.d.ts.map +1 -1
- package/dist/containment/index.js +119 -105
- package/dist/containment/index.js.map +1 -1
- package/dist/containment/types.d.ts +11 -11
- package/dist/containment/types.d.ts.map +1 -1
- package/dist/contracts/index.d.ts +9 -9
- package/dist/contracts/index.d.ts.map +1 -1
- package/dist/contracts/index.js +59 -54
- package/dist/contracts/index.js.map +1 -1
- package/dist/contracts/types.d.ts +12 -12
- package/dist/contracts/types.d.ts.map +1 -1
- package/dist/crewai/callback.d.ts +91 -0
- package/dist/crewai/callback.d.ts.map +1 -0
- package/dist/crewai/callback.js +271 -0
- package/dist/crewai/callback.js.map +1 -0
- package/dist/crewai/executor.d.ts +135 -0
- package/dist/crewai/executor.d.ts.map +1 -0
- package/dist/crewai/executor.js +381 -0
- package/dist/crewai/executor.js.map +1 -0
- package/dist/crewai/index.d.ts +12 -0
- package/dist/crewai/index.d.ts.map +1 -0
- package/dist/crewai/index.js +12 -0
- package/dist/crewai/index.js.map +1 -0
- package/dist/crewai/tools.d.ts +21 -0
- package/dist/crewai/tools.d.ts.map +1 -0
- package/dist/crewai/tools.js +164 -0
- package/dist/crewai/tools.js.map +1 -0
- package/dist/crewai/types.d.ts +139 -0
- package/dist/crewai/types.d.ts.map +1 -0
- package/dist/crewai/types.js +9 -0
- package/dist/crewai/types.js.map +1 -0
- package/dist/enforce/index.d.ts +48 -222
- package/dist/enforce/index.d.ts.map +1 -1
- package/dist/enforce/index.js +144 -47
- package/dist/enforce/index.js.map +1 -1
- package/dist/enforce/trust-aware-enforcement-service.d.ts +121 -0
- package/dist/enforce/trust-aware-enforcement-service.d.ts.map +1 -0
- package/dist/enforce/trust-aware-enforcement-service.js +601 -0
- package/dist/enforce/trust-aware-enforcement-service.js.map +1 -0
- package/dist/enforce/types.d.ts +234 -0
- package/dist/enforce/types.d.ts.map +1 -0
- package/dist/enforce/types.js +10 -0
- package/dist/enforce/types.js.map +1 -0
- package/dist/governance/fluid-workflow.d.ts +8 -8
- package/dist/governance/fluid-workflow.d.ts.map +1 -1
- package/dist/governance/fluid-workflow.js +114 -86
- package/dist/governance/fluid-workflow.js.map +1 -1
- package/dist/governance/index.d.ts +7 -7
- package/dist/governance/index.d.ts.map +1 -1
- package/dist/governance/index.js +81 -74
- package/dist/governance/index.js.map +1 -1
- package/dist/governance/proof-bridge.d.ts +6 -6
- package/dist/governance/proof-bridge.d.ts.map +1 -1
- package/dist/governance/proof-bridge.js +5 -5
- package/dist/governance/proof-bridge.js.map +1 -1
- package/dist/governance/types.d.ts +16 -9
- package/dist/governance/types.d.ts.map +1 -1
- package/dist/governance/types.js.map +1 -1
- package/dist/index.d.ts +29 -25
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +33 -23
- package/dist/index.js.map +1 -1
- package/dist/intent/index.d.ts +21 -56
- package/dist/intent/index.d.ts.map +1 -1
- package/dist/intent/index.js +58 -24
- package/dist/intent/index.js.map +1 -1
- package/dist/intent/persistent-intent-service.d.ts +68 -0
- package/dist/intent/persistent-intent-service.d.ts.map +1 -0
- package/dist/intent/persistent-intent-service.js +277 -0
- package/dist/intent/persistent-intent-service.js.map +1 -0
- package/dist/intent/types.d.ts +69 -0
- package/dist/intent/types.d.ts.map +1 -0
- package/dist/intent/types.js +10 -0
- package/dist/intent/types.js.map +1 -0
- package/dist/intent-gateway/index.d.ts +522 -0
- package/dist/intent-gateway/index.d.ts.map +1 -0
- package/dist/intent-gateway/index.js +1499 -0
- package/dist/intent-gateway/index.js.map +1 -0
- package/dist/langchain/callback.d.ts +2 -2
- package/dist/langchain/callback.d.ts.map +1 -1
- package/dist/langchain/callback.js +30 -30
- package/dist/langchain/callback.js.map +1 -1
- package/dist/langchain/executor.d.ts +4 -4
- package/dist/langchain/executor.d.ts.map +1 -1
- package/dist/langchain/executor.js +82 -80
- package/dist/langchain/executor.js.map +1 -1
- package/dist/langchain/index.d.ts +5 -5
- package/dist/langchain/index.js +5 -5
- package/dist/langchain/tools.d.ts +1 -1
- package/dist/langchain/tools.d.ts.map +1 -1
- package/dist/langchain/tools.js +33 -33
- package/dist/langchain/tools.js.map +1 -1
- package/dist/langchain/types.d.ts +3 -3
- package/dist/langchain/types.d.ts.map +1 -1
- package/dist/layers/implementations/L0-request-format.d.ts +37 -0
- package/dist/layers/implementations/L0-request-format.d.ts.map +1 -0
- package/dist/layers/implementations/L0-request-format.js +218 -0
- package/dist/layers/implementations/L0-request-format.js.map +1 -0
- package/dist/layers/implementations/L1-input-size.d.ts +36 -0
- package/dist/layers/implementations/L1-input-size.d.ts.map +1 -0
- package/dist/layers/implementations/L1-input-size.js +160 -0
- package/dist/layers/implementations/L1-input-size.js.map +1 -0
- package/dist/layers/implementations/L2-charset-sanitizer.d.ts +28 -0
- package/dist/layers/implementations/L2-charset-sanitizer.d.ts.map +1 -0
- package/dist/layers/implementations/L2-charset-sanitizer.js +230 -0
- package/dist/layers/implementations/L2-charset-sanitizer.js.map +1 -0
- package/dist/layers/implementations/L3-schema-conformance.d.ts +47 -0
- package/dist/layers/implementations/L3-schema-conformance.d.ts.map +1 -0
- package/dist/layers/implementations/L3-schema-conformance.js +267 -0
- package/dist/layers/implementations/L3-schema-conformance.js.map +1 -0
- package/dist/layers/implementations/L4-injection-detector.d.ts +47 -0
- package/dist/layers/implementations/L4-injection-detector.d.ts.map +1 -0
- package/dist/layers/implementations/L4-injection-detector.js +260 -0
- package/dist/layers/implementations/L4-injection-detector.js.map +1 -0
- package/dist/layers/implementations/L5-rate-limiter.d.ts +51 -0
- package/dist/layers/implementations/L5-rate-limiter.d.ts.map +1 -0
- package/dist/layers/implementations/L5-rate-limiter.js +183 -0
- package/dist/layers/implementations/L5-rate-limiter.js.map +1 -0
- package/dist/layers/implementations/index.d.ts +16 -0
- package/dist/layers/implementations/index.d.ts.map +1 -0
- package/dist/layers/implementations/index.js +16 -0
- package/dist/layers/implementations/index.js.map +1 -0
- package/dist/layers/index.d.ts +3 -3
- package/dist/layers/index.d.ts.map +1 -1
- package/dist/layers/index.js +99 -71
- package/dist/layers/index.js.map +1 -1
- package/dist/layers/types.d.ts +16 -16
- package/dist/layers/types.d.ts.map +1 -1
- package/dist/persistence/file.d.ts +3 -3
- package/dist/persistence/file.d.ts.map +1 -1
- package/dist/persistence/file.js +32 -28
- package/dist/persistence/file.js.map +1 -1
- package/dist/persistence/index.d.ts +7 -7
- package/dist/persistence/index.d.ts.map +1 -1
- package/dist/persistence/index.js +18 -18
- package/dist/persistence/index.js.map +1 -1
- package/dist/persistence/memory.d.ts +3 -3
- package/dist/persistence/memory.d.ts.map +1 -1
- package/dist/persistence/memory.js +10 -8
- package/dist/persistence/memory.js.map +1 -1
- package/dist/persistence/sqlite.d.ts +3 -3
- package/dist/persistence/sqlite.d.ts.map +1 -1
- package/dist/persistence/sqlite.js +36 -36
- package/dist/persistence/sqlite.js.map +1 -1
- package/dist/persistence/supabase.d.ts +3 -3
- package/dist/persistence/supabase.d.ts.map +1 -1
- package/dist/persistence/supabase.js +41 -43
- package/dist/persistence/supabase.js.map +1 -1
- package/dist/persistence/types.d.ts +5 -5
- package/dist/phase6/ceiling.d.ts +5 -5
- package/dist/phase6/ceiling.d.ts.map +1 -1
- package/dist/phase6/ceiling.js +67 -34
- package/dist/phase6/ceiling.js.map +1 -1
- package/dist/phase6/context.d.ts +3 -3
- package/dist/phase6/context.d.ts.map +1 -1
- package/dist/phase6/context.js +91 -45
- package/dist/phase6/context.js.map +1 -1
- package/dist/phase6/index.d.ts +13 -13
- package/dist/phase6/index.d.ts.map +1 -1
- package/dist/phase6/index.js +16 -16
- package/dist/phase6/index.js.map +1 -1
- package/dist/phase6/presets.d.ts +2 -2
- package/dist/phase6/presets.d.ts.map +1 -1
- package/dist/phase6/presets.js +39 -33
- package/dist/phase6/presets.js.map +1 -1
- package/dist/phase6/provenance.d.ts +4 -4
- package/dist/phase6/provenance.d.ts.map +1 -1
- package/dist/phase6/provenance.js +42 -35
- package/dist/phase6/provenance.js.map +1 -1
- package/dist/phase6/role-gates/index.d.ts +2 -2
- package/dist/phase6/role-gates/index.js +2 -2
- package/dist/phase6/role-gates/kernel.d.ts.map +1 -1
- package/dist/phase6/role-gates/kernel.js +16 -16
- package/dist/phase6/role-gates/kernel.js.map +1 -1
- package/dist/phase6/role-gates/policy.d.ts +2 -2
- package/dist/phase6/role-gates/policy.js +6 -6
- package/dist/phase6/role-gates.d.ts +4 -4
- package/dist/phase6/role-gates.d.ts.map +1 -1
- package/dist/phase6/role-gates.js +80 -58
- package/dist/phase6/role-gates.js.map +1 -1
- package/dist/phase6/types.d.ts +35 -35
- package/dist/phase6/types.d.ts.map +1 -1
- package/dist/phase6/types.js +166 -66
- package/dist/phase6/types.js.map +1 -1
- package/dist/phase6/weight-presets/canonical.d.ts +2 -2
- package/dist/phase6/weight-presets/canonical.d.ts.map +1 -1
- package/dist/phase6/weight-presets/canonical.js +12 -12
- package/dist/phase6/weight-presets/canonical.js.map +1 -1
- package/dist/phase6/weight-presets/deltas.d.ts +2 -2
- package/dist/phase6/weight-presets/deltas.d.ts.map +1 -1
- package/dist/phase6/weight-presets/deltas.js +27 -27
- package/dist/phase6/weight-presets/deltas.js.map +1 -1
- package/dist/phase6/weight-presets/index.d.ts +4 -4
- package/dist/phase6/weight-presets/index.js +4 -4
- package/dist/phase6/weight-presets/merger.d.ts +3 -3
- package/dist/phase6/weight-presets/merger.d.ts.map +1 -1
- package/dist/phase6/weight-presets/merger.js +40 -44
- package/dist/phase6/weight-presets/merger.js.map +1 -1
- package/dist/proof/index.d.ts +3 -3
- package/dist/proof/index.d.ts.map +1 -1
- package/dist/proof/index.js +44 -38
- package/dist/proof/index.js.map +1 -1
- package/dist/proof/merkle.d.ts +3 -3
- package/dist/proof/merkle.d.ts.map +1 -1
- package/dist/proof/merkle.js +26 -25
- package/dist/proof/merkle.js.map +1 -1
- package/dist/proof/zk-proofs.d.ts +6 -6
- package/dist/proof/zk-proofs.d.ts.map +1 -1
- package/dist/proof/zk-proofs.js +42 -43
- package/dist/proof/zk-proofs.js.map +1 -1
- package/dist/provenance/index.d.ts +3 -3
- package/dist/provenance/index.d.ts.map +1 -1
- package/dist/provenance/index.js +19 -17
- package/dist/provenance/index.js.map +1 -1
- package/dist/provenance/types.d.ts +4 -4
- package/dist/provenance/types.d.ts.map +1 -1
- package/dist/sandbox-training/challenges.d.ts +1 -1
- package/dist/sandbox-training/challenges.d.ts.map +1 -1
- package/dist/sandbox-training/challenges.js +228 -228
- package/dist/sandbox-training/challenges.js.map +1 -1
- package/dist/sandbox-training/graduation.d.ts +1 -1
- package/dist/sandbox-training/graduation.d.ts.map +1 -1
- package/dist/sandbox-training/graduation.js +14 -15
- package/dist/sandbox-training/graduation.js.map +1 -1
- package/dist/sandbox-training/index.d.ts +9 -9
- package/dist/sandbox-training/index.d.ts.map +1 -1
- package/dist/sandbox-training/index.js +6 -6
- package/dist/sandbox-training/index.js.map +1 -1
- package/dist/sandbox-training/promotion-service.d.ts +4 -4
- package/dist/sandbox-training/promotion-service.d.ts.map +1 -1
- package/dist/sandbox-training/promotion-service.js +5 -5
- package/dist/sandbox-training/promotion-service.js.map +1 -1
- package/dist/sandbox-training/runner.d.ts +1 -1
- package/dist/sandbox-training/runner.d.ts.map +1 -1
- package/dist/sandbox-training/runner.js +74 -73
- package/dist/sandbox-training/runner.js.map +1 -1
- package/dist/sandbox-training/scorer.d.ts +4 -4
- package/dist/sandbox-training/scorer.js +5 -5
- package/dist/sandbox-training/types.d.ts +4 -4
- package/dist/sandbox-training/types.d.ts.map +1 -1
- package/dist/sandbox-training/types.js +11 -7
- package/dist/sandbox-training/types.js.map +1 -1
- package/dist/trust-engine/ceiling-enforcement/audit.d.ts +1 -1
- package/dist/trust-engine/ceiling-enforcement/audit.d.ts.map +1 -1
- package/dist/trust-engine/ceiling-enforcement/audit.js +3 -4
- package/dist/trust-engine/ceiling-enforcement/audit.js.map +1 -1
- package/dist/trust-engine/ceiling-enforcement/index.d.ts +2 -2
- package/dist/trust-engine/ceiling-enforcement/index.js +2 -2
- package/dist/trust-engine/ceiling-enforcement/kernel.d.ts +1 -1
- package/dist/trust-engine/ceiling-enforcement/kernel.d.ts.map +1 -1
- package/dist/trust-engine/ceiling-enforcement/kernel.js +1 -1
- package/dist/trust-engine/context-policy/enforcement.d.ts.map +1 -1
- package/dist/trust-engine/context-policy/factory.d.ts +1 -1
- package/dist/trust-engine/context-policy/factory.d.ts.map +1 -1
- package/dist/trust-engine/context-policy/factory.js +1 -1
- package/dist/trust-engine/context-policy/factory.js.map +1 -1
- package/dist/trust-engine/context-policy/index.d.ts +2 -2
- package/dist/trust-engine/context-policy/index.js +2 -2
- package/dist/trust-engine/creation-modifiers/index.d.ts +1 -1
- package/dist/trust-engine/creation-modifiers/index.js +1 -1
- package/dist/trust-engine/creation-modifiers/types.d.ts.map +1 -1
- package/dist/trust-engine/creation-modifiers/types.js +2 -3
- package/dist/trust-engine/creation-modifiers/types.js.map +1 -1
- package/dist/trust-engine/decay-profiles.d.ts +1 -1
- package/dist/trust-engine/decay-profiles.d.ts.map +1 -1
- package/dist/trust-engine/decay-profiles.js +4 -4
- package/dist/trust-engine/decay-profiles.js.map +1 -1
- package/dist/trust-engine/index.d.ts +111 -45
- package/dist/trust-engine/index.d.ts.map +1 -1
- package/dist/trust-engine/index.js +418 -61
- package/dist/trust-engine/index.js.map +1 -1
- package/dist/trust-engine/phase6-types.d.ts +10 -10
- package/dist/trust-engine/phase6-types.d.ts.map +1 -1
- package/dist/trust-engine/phase6-types.js +25 -23
- package/dist/trust-engine/phase6-types.js.map +1 -1
- package/dist/trust-engine/types.d.ts +77 -0
- package/dist/trust-engine/types.d.ts.map +1 -0
- package/dist/trust-engine/types.js +20 -0
- package/dist/trust-engine/types.js.map +1 -0
- package/package.json +5 -4
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Persistent Intent Service
|
|
3
|
+
*
|
|
4
|
+
* Production-quality intent service that provides:
|
|
5
|
+
* - Input validation via Zod schemas
|
|
6
|
+
* - Automatic expiration of stale intents
|
|
7
|
+
* - State machine enforcement for status transitions
|
|
8
|
+
* - Correlation ID tracking for distributed tracing
|
|
9
|
+
* - Tenant isolation
|
|
10
|
+
*
|
|
11
|
+
* Uses an in-memory store by default. For durable persistence, subclass
|
|
12
|
+
* and override the storage methods, or use the Supabase-backed variant.
|
|
13
|
+
*
|
|
14
|
+
* @packageDocumentation
|
|
15
|
+
*/
|
|
16
|
+
import type { Intent, ID, IntentStatus } from "../common/types.js";
|
|
17
|
+
import type { IIntentService, IntentSubmission, SubmitOptions } from "./types.js";
|
|
18
|
+
export interface PersistentIntentServiceConfig {
|
|
19
|
+
/** Default expiration time for intents without explicit expiresIn (ms). Default: 1 hour */
|
|
20
|
+
defaultExpirationMs?: number;
|
|
21
|
+
/** How often to sweep expired intents (ms). Default: 60 seconds. 0 to disable. */
|
|
22
|
+
expirationSweepIntervalMs?: number;
|
|
23
|
+
/** Maximum intents per entity per tenant. Default: 1000 */
|
|
24
|
+
maxIntentsPerEntity?: number;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Production-quality intent service with validation, state machine,
|
|
28
|
+
* expiration, and tenant isolation.
|
|
29
|
+
*/
|
|
30
|
+
export declare class PersistentIntentService implements IIntentService {
|
|
31
|
+
private intents;
|
|
32
|
+
private entityIndex;
|
|
33
|
+
private config;
|
|
34
|
+
private sweepTimer;
|
|
35
|
+
constructor(config?: PersistentIntentServiceConfig);
|
|
36
|
+
/**
|
|
37
|
+
* Submit a new intent with full validation.
|
|
38
|
+
*/
|
|
39
|
+
submit(submission: IntentSubmission, options: SubmitOptions): Promise<Intent>;
|
|
40
|
+
/**
|
|
41
|
+
* Get an intent by ID with tenant isolation.
|
|
42
|
+
*/
|
|
43
|
+
get(id: ID, tenantId: ID): Promise<Intent | undefined>;
|
|
44
|
+
/**
|
|
45
|
+
* Update intent status with state machine enforcement.
|
|
46
|
+
*/
|
|
47
|
+
updateStatus(id: ID, tenantId: ID, status: IntentStatus): Promise<Intent | undefined>;
|
|
48
|
+
/**
|
|
49
|
+
* List intents for an entity with tenant isolation.
|
|
50
|
+
*/
|
|
51
|
+
listByEntity(entityId: ID, tenantId: ID): Promise<Intent[]>;
|
|
52
|
+
/**
|
|
53
|
+
* Get count of active intents.
|
|
54
|
+
*/
|
|
55
|
+
count(): number;
|
|
56
|
+
/**
|
|
57
|
+
* Shut down the service and clean up timers.
|
|
58
|
+
*/
|
|
59
|
+
close(): void;
|
|
60
|
+
/**
|
|
61
|
+
* Clear all intents (for testing).
|
|
62
|
+
*/
|
|
63
|
+
clear(): void;
|
|
64
|
+
private isExpired;
|
|
65
|
+
private expireIntent;
|
|
66
|
+
private sweepExpired;
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=persistent-intent-service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"persistent-intent-service.d.ts","sourceRoot":"","sources":["../../src/intent/persistent-intent-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACnE,OAAO,KAAK,EACV,cAAc,EACd,gBAAgB,EAChB,aAAa,EACd,MAAM,YAAY,CAAC;AA8DpB,MAAM,WAAW,6BAA6B;IAC5C,2FAA2F;IAC3F,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,kFAAkF;IAClF,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,2DAA2D;IAC3D,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAQD;;;GAGG;AACH,qBAAa,uBAAwB,YAAW,cAAc;IAC5D,OAAO,CAAC,OAAO,CAAyB;IACxC,OAAO,CAAC,WAAW,CAA8B;IACjD,OAAO,CAAC,MAAM,CAA0C;IACxD,OAAO,CAAC,UAAU,CAA+C;gBAErD,MAAM,CAAC,EAAE,6BAA6B;IAmBlD;;OAEG;IACG,MAAM,CACV,UAAU,EAAE,gBAAgB,EAC5B,OAAO,EAAE,aAAa,GACrB,OAAO,CAAC,MAAM,CAAC;IAuElB;;OAEG;IACG,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAe5D;;OAEG;IACG,YAAY,CAChB,EAAE,EAAE,EAAE,EACN,QAAQ,EAAE,EAAE,EACZ,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAqC9B;;OAEG;IACG,YAAY,CAAC,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAiBjE;;OAEG;IACH,KAAK,IAAI,MAAM;IAIf;;OAEG;IACH,KAAK,IAAI,IAAI;IAOb;;OAEG;IACH,KAAK,IAAI,IAAI;IASb,OAAO,CAAC,SAAS;YAKH,YAAY;IAY1B,OAAO,CAAC,YAAY;CA0BrB"}
|
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Persistent Intent Service
|
|
3
|
+
*
|
|
4
|
+
* Production-quality intent service that provides:
|
|
5
|
+
* - Input validation via Zod schemas
|
|
6
|
+
* - Automatic expiration of stale intents
|
|
7
|
+
* - State machine enforcement for status transitions
|
|
8
|
+
* - Correlation ID tracking for distributed tracing
|
|
9
|
+
* - Tenant isolation
|
|
10
|
+
*
|
|
11
|
+
* Uses an in-memory store by default. For durable persistence, subclass
|
|
12
|
+
* and override the storage methods, or use the Supabase-backed variant.
|
|
13
|
+
*
|
|
14
|
+
* @packageDocumentation
|
|
15
|
+
*/
|
|
16
|
+
import { createLogger } from "../common/logger.js";
|
|
17
|
+
const logger = createLogger({ component: "persistent-intent-service" });
|
|
18
|
+
// =============================================================================
|
|
19
|
+
// STATE MACHINE
|
|
20
|
+
// =============================================================================
|
|
21
|
+
/**
|
|
22
|
+
* Valid status transitions for the intent lifecycle.
|
|
23
|
+
* Any transition not listed here is rejected.
|
|
24
|
+
*/
|
|
25
|
+
const VALID_TRANSITIONS = {
|
|
26
|
+
pending: ["evaluating", "cancelled"],
|
|
27
|
+
evaluating: ["approved", "denied", "escalated", "failed"],
|
|
28
|
+
approved: ["executing", "cancelled"],
|
|
29
|
+
denied: [],
|
|
30
|
+
escalated: ["approved", "denied", "cancelled"],
|
|
31
|
+
executing: ["completed", "failed"],
|
|
32
|
+
completed: [],
|
|
33
|
+
failed: ["pending"], // allow retry
|
|
34
|
+
cancelled: [],
|
|
35
|
+
};
|
|
36
|
+
// =============================================================================
|
|
37
|
+
// VALIDATION
|
|
38
|
+
// =============================================================================
|
|
39
|
+
function validateSubmission(submission) {
|
|
40
|
+
const errors = [];
|
|
41
|
+
if (!submission.entityId || typeof submission.entityId !== "string") {
|
|
42
|
+
errors.push("entityId is required and must be a non-empty string");
|
|
43
|
+
}
|
|
44
|
+
if (!submission.goal || typeof submission.goal !== "string") {
|
|
45
|
+
errors.push("goal is required and must be a non-empty string");
|
|
46
|
+
}
|
|
47
|
+
if (submission.goal && submission.goal.length > 10_000) {
|
|
48
|
+
errors.push("goal must be 10,000 characters or fewer");
|
|
49
|
+
}
|
|
50
|
+
if (submission.context !== undefined &&
|
|
51
|
+
(typeof submission.context !== "object" || submission.context === null)) {
|
|
52
|
+
errors.push("context must be a plain object");
|
|
53
|
+
}
|
|
54
|
+
if (submission.expiresIn !== undefined) {
|
|
55
|
+
if (typeof submission.expiresIn !== "number" || submission.expiresIn <= 0) {
|
|
56
|
+
errors.push("expiresIn must be a positive number (milliseconds)");
|
|
57
|
+
}
|
|
58
|
+
if (submission.expiresIn > 86_400_000) {
|
|
59
|
+
errors.push("expiresIn cannot exceed 24 hours (86400000ms)");
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return errors;
|
|
63
|
+
}
|
|
64
|
+
const DEFAULT_CONFIG = {
|
|
65
|
+
defaultExpirationMs: 3_600_000,
|
|
66
|
+
expirationSweepIntervalMs: 60_000,
|
|
67
|
+
maxIntentsPerEntity: 1_000,
|
|
68
|
+
};
|
|
69
|
+
/**
|
|
70
|
+
* Production-quality intent service with validation, state machine,
|
|
71
|
+
* expiration, and tenant isolation.
|
|
72
|
+
*/
|
|
73
|
+
export class PersistentIntentService {
|
|
74
|
+
intents = new Map();
|
|
75
|
+
entityIndex = new Map(); // "tenantId:entityId" → intent IDs
|
|
76
|
+
config;
|
|
77
|
+
sweepTimer = null;
|
|
78
|
+
constructor(config) {
|
|
79
|
+
this.config = { ...DEFAULT_CONFIG, ...config };
|
|
80
|
+
if (this.config.expirationSweepIntervalMs > 0) {
|
|
81
|
+
this.sweepTimer = setInterval(() => this.sweepExpired(), this.config.expirationSweepIntervalMs);
|
|
82
|
+
// Don't prevent Node.js from exiting
|
|
83
|
+
if (this.sweepTimer &&
|
|
84
|
+
typeof this.sweepTimer === "object" &&
|
|
85
|
+
"unref" in this.sweepTimer) {
|
|
86
|
+
this.sweepTimer.unref();
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Submit a new intent with full validation.
|
|
92
|
+
*/
|
|
93
|
+
async submit(submission, options) {
|
|
94
|
+
// Validate input
|
|
95
|
+
const errors = validateSubmission(submission);
|
|
96
|
+
if (errors.length > 0) {
|
|
97
|
+
throw new Error(`Invalid intent submission: ${errors.join("; ")}`);
|
|
98
|
+
}
|
|
99
|
+
if (!options.tenantId) {
|
|
100
|
+
throw new Error("tenantId is required in SubmitOptions");
|
|
101
|
+
}
|
|
102
|
+
// Check per-entity limit
|
|
103
|
+
const indexKey = `${options.tenantId}:${submission.entityId}`;
|
|
104
|
+
const existingIds = this.entityIndex.get(indexKey);
|
|
105
|
+
if (existingIds && existingIds.size >= this.config.maxIntentsPerEntity) {
|
|
106
|
+
throw new Error(`Entity '${submission.entityId}' has reached the maximum of ${this.config.maxIntentsPerEntity} active intents`);
|
|
107
|
+
}
|
|
108
|
+
const now = new Date().toISOString();
|
|
109
|
+
const correlationId = submission.correlationId ?? crypto.randomUUID();
|
|
110
|
+
const expiresAt = submission.expiresIn
|
|
111
|
+
? new Date(Date.now() + submission.expiresIn).toISOString()
|
|
112
|
+
: new Date(Date.now() + this.config.defaultExpirationMs).toISOString();
|
|
113
|
+
const intent = {
|
|
114
|
+
id: crypto.randomUUID(),
|
|
115
|
+
tenantId: options.tenantId,
|
|
116
|
+
entityId: submission.entityId,
|
|
117
|
+
goal: submission.goal,
|
|
118
|
+
context: submission.context ?? {},
|
|
119
|
+
metadata: submission.metadata ?? {},
|
|
120
|
+
status: "pending",
|
|
121
|
+
createdAt: now,
|
|
122
|
+
updatedAt: now,
|
|
123
|
+
trustSnapshot: options.trustSnapshot ?? null,
|
|
124
|
+
trustLevel: options.trustLevel ?? null,
|
|
125
|
+
correlationId,
|
|
126
|
+
actionType: submission.actionType ?? null,
|
|
127
|
+
resourceScope: submission.resourceScope ?? null,
|
|
128
|
+
dataSensitivity: submission.dataSensitivity ?? null,
|
|
129
|
+
reversibility: submission.reversibility ?? null,
|
|
130
|
+
expiresAt,
|
|
131
|
+
source: submission.source ?? null,
|
|
132
|
+
};
|
|
133
|
+
// Store
|
|
134
|
+
this.intents.set(intent.id, intent);
|
|
135
|
+
// Update entity index
|
|
136
|
+
if (!this.entityIndex.has(indexKey)) {
|
|
137
|
+
this.entityIndex.set(indexKey, new Set());
|
|
138
|
+
}
|
|
139
|
+
this.entityIndex.get(indexKey).add(intent.id);
|
|
140
|
+
logger.info({
|
|
141
|
+
intentId: intent.id,
|
|
142
|
+
entityId: intent.entityId,
|
|
143
|
+
tenantId: options.tenantId,
|
|
144
|
+
goal: intent.goal.slice(0, 100),
|
|
145
|
+
correlationId,
|
|
146
|
+
actionType: intent.actionType,
|
|
147
|
+
}, "Intent submitted");
|
|
148
|
+
return intent;
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Get an intent by ID with tenant isolation.
|
|
152
|
+
*/
|
|
153
|
+
async get(id, tenantId) {
|
|
154
|
+
const intent = this.intents.get(id);
|
|
155
|
+
if (!intent || intent.tenantId !== tenantId) {
|
|
156
|
+
return undefined;
|
|
157
|
+
}
|
|
158
|
+
// Check expiration
|
|
159
|
+
if (this.isExpired(intent)) {
|
|
160
|
+
await this.expireIntent(intent);
|
|
161
|
+
return undefined;
|
|
162
|
+
}
|
|
163
|
+
return intent;
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Update intent status with state machine enforcement.
|
|
167
|
+
*/
|
|
168
|
+
async updateStatus(id, tenantId, status) {
|
|
169
|
+
const intent = this.intents.get(id);
|
|
170
|
+
if (!intent || intent.tenantId !== tenantId) {
|
|
171
|
+
return undefined;
|
|
172
|
+
}
|
|
173
|
+
// Validate transition
|
|
174
|
+
const allowed = VALID_TRANSITIONS[intent.status];
|
|
175
|
+
if (!allowed || !allowed.includes(status)) {
|
|
176
|
+
throw new Error(`Invalid status transition: '${intent.status}' → '${status}'. ` +
|
|
177
|
+
`Allowed transitions from '${intent.status}': [${allowed?.join(", ") ?? "none"}]`);
|
|
178
|
+
}
|
|
179
|
+
const previousStatus = intent.status;
|
|
180
|
+
intent.status = status;
|
|
181
|
+
intent.updatedAt = new Date().toISOString();
|
|
182
|
+
// Clean up terminal intents from entity index
|
|
183
|
+
if (status === "completed" ||
|
|
184
|
+
status === "cancelled" ||
|
|
185
|
+
status === "denied") {
|
|
186
|
+
const indexKey = `${tenantId}:${intent.entityId}`;
|
|
187
|
+
this.entityIndex.get(indexKey)?.delete(id);
|
|
188
|
+
}
|
|
189
|
+
logger.info({ intentId: id, from: previousStatus, to: status }, "Intent status updated");
|
|
190
|
+
return intent;
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* List intents for an entity with tenant isolation.
|
|
194
|
+
*/
|
|
195
|
+
async listByEntity(entityId, tenantId) {
|
|
196
|
+
const indexKey = `${tenantId}:${entityId}`;
|
|
197
|
+
const ids = this.entityIndex.get(indexKey);
|
|
198
|
+
if (!ids || ids.size === 0)
|
|
199
|
+
return [];
|
|
200
|
+
const results = [];
|
|
201
|
+
for (const id of ids) {
|
|
202
|
+
const intent = this.intents.get(id);
|
|
203
|
+
if (intent && !this.isExpired(intent)) {
|
|
204
|
+
results.push(intent);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
// Sort by creation time (newest first)
|
|
208
|
+
return results.sort((a, b) => b.createdAt.localeCompare(a.createdAt));
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Get count of active intents.
|
|
212
|
+
*/
|
|
213
|
+
count() {
|
|
214
|
+
return this.intents.size;
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Shut down the service and clean up timers.
|
|
218
|
+
*/
|
|
219
|
+
close() {
|
|
220
|
+
if (this.sweepTimer) {
|
|
221
|
+
clearInterval(this.sweepTimer);
|
|
222
|
+
this.sweepTimer = null;
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Clear all intents (for testing).
|
|
227
|
+
*/
|
|
228
|
+
clear() {
|
|
229
|
+
this.intents.clear();
|
|
230
|
+
this.entityIndex.clear();
|
|
231
|
+
}
|
|
232
|
+
// ===========================================================================
|
|
233
|
+
// Private Helpers
|
|
234
|
+
// ===========================================================================
|
|
235
|
+
isExpired(intent) {
|
|
236
|
+
if (!intent.expiresAt)
|
|
237
|
+
return false;
|
|
238
|
+
return new Date(intent.expiresAt).getTime() < Date.now();
|
|
239
|
+
}
|
|
240
|
+
async expireIntent(intent) {
|
|
241
|
+
if (intent.status !== "completed" &&
|
|
242
|
+
intent.status !== "cancelled" &&
|
|
243
|
+
intent.status !== "denied") {
|
|
244
|
+
intent.status = "cancelled";
|
|
245
|
+
intent.updatedAt = new Date().toISOString();
|
|
246
|
+
logger.debug({ intentId: intent.id }, "Intent expired");
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
sweepExpired() {
|
|
250
|
+
let swept = 0;
|
|
251
|
+
for (const [id, intent] of this.intents) {
|
|
252
|
+
if (this.isExpired(intent)) {
|
|
253
|
+
// Remove terminal intents entirely, expire active ones
|
|
254
|
+
const isTerminal = [
|
|
255
|
+
"completed",
|
|
256
|
+
"cancelled",
|
|
257
|
+
"denied",
|
|
258
|
+
"failed",
|
|
259
|
+
].includes(intent.status);
|
|
260
|
+
if (isTerminal) {
|
|
261
|
+
this.intents.delete(id);
|
|
262
|
+
const indexKey = `${intent.tenantId}:${intent.entityId}`;
|
|
263
|
+
this.entityIndex.get(indexKey)?.delete(id);
|
|
264
|
+
swept++;
|
|
265
|
+
}
|
|
266
|
+
else {
|
|
267
|
+
this.expireIntent(intent);
|
|
268
|
+
swept++;
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
if (swept > 0) {
|
|
273
|
+
logger.debug({ swept }, "Expired intents swept");
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
//# sourceMappingURL=persistent-intent-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"persistent-intent-service.js","sourceRoot":"","sources":["../../src/intent/persistent-intent-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Intent Service Types
|
|
3
|
+
*
|
|
4
|
+
* Extracted from intent/index.ts to break circular dependency with
|
|
5
|
+
* persistent-intent-service.ts.
|
|
6
|
+
*
|
|
7
|
+
* @packageDocumentation
|
|
8
|
+
*/
|
|
9
|
+
import type { Intent, ID, IntentStatus } from "../common/types.js";
|
|
10
|
+
/** Action type values (mirrors ActionType const in index.ts) */
|
|
11
|
+
type ActionTypeValue = "read" | "write" | "delete" | "execute" | "communicate" | "transfer";
|
|
12
|
+
/** Data sensitivity values (mirrors DataSensitivity const in index.ts) */
|
|
13
|
+
type DataSensitivityValue = "PUBLIC" | "INTERNAL" | "CONFIDENTIAL" | "RESTRICTED";
|
|
14
|
+
/** Reversibility values (mirrors Reversibility const in index.ts) */
|
|
15
|
+
type ReversibilityValue = "REVERSIBLE" | "PARTIALLY_REVERSIBLE" | "IRREVERSIBLE";
|
|
16
|
+
/**
|
|
17
|
+
* Intent submission request with canonical fields
|
|
18
|
+
*/
|
|
19
|
+
export interface IntentSubmission {
|
|
20
|
+
/** Agent/entity making the request */
|
|
21
|
+
entityId: ID;
|
|
22
|
+
/** Human-readable goal/action description */
|
|
23
|
+
goal: string;
|
|
24
|
+
/** Additional context for evaluation */
|
|
25
|
+
context: Record<string, unknown>;
|
|
26
|
+
/** Optional metadata */
|
|
27
|
+
metadata?: Record<string, unknown>;
|
|
28
|
+
/** Correlation ID for distributed tracing */
|
|
29
|
+
correlationId?: string;
|
|
30
|
+
/** Action type category */
|
|
31
|
+
actionType?: ActionTypeValue;
|
|
32
|
+
/** Resources this intent accesses/modifies */
|
|
33
|
+
resourceScope?: string[];
|
|
34
|
+
/** Data sensitivity level */
|
|
35
|
+
dataSensitivity?: DataSensitivityValue;
|
|
36
|
+
/** Whether action can be undone */
|
|
37
|
+
reversibility?: ReversibilityValue;
|
|
38
|
+
/** Intent expiration in milliseconds from now */
|
|
39
|
+
expiresIn?: number;
|
|
40
|
+
/** Source system identifier */
|
|
41
|
+
source?: string;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Options for submitting an intent
|
|
45
|
+
*/
|
|
46
|
+
export interface SubmitOptions {
|
|
47
|
+
/** Tenant identifier */
|
|
48
|
+
tenantId: ID;
|
|
49
|
+
/** Trust snapshot at submission time */
|
|
50
|
+
trustSnapshot?: Record<string, unknown> | null;
|
|
51
|
+
/** Current trust level of the entity */
|
|
52
|
+
trustLevel?: number;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Interface for intent service implementations
|
|
56
|
+
*
|
|
57
|
+
* Implement this interface to create custom intent handling:
|
|
58
|
+
* - API client for remote Vorion service
|
|
59
|
+
* - Custom persistence layer
|
|
60
|
+
* - Testing mocks with specific behaviors
|
|
61
|
+
*/
|
|
62
|
+
export interface IIntentService {
|
|
63
|
+
submit(submission: IntentSubmission, options: SubmitOptions): Promise<Intent>;
|
|
64
|
+
get(id: ID, tenantId: ID): Promise<Intent | undefined>;
|
|
65
|
+
updateStatus(id: ID, tenantId: ID, status: IntentStatus): Promise<Intent | undefined>;
|
|
66
|
+
listByEntity(entityId: ID, tenantId: ID): Promise<Intent[]>;
|
|
67
|
+
}
|
|
68
|
+
export {};
|
|
69
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/intent/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAOnE,gEAAgE;AAChE,KAAK,eAAe,GAChB,MAAM,GACN,OAAO,GACP,QAAQ,GACR,SAAS,GACT,aAAa,GACb,UAAU,CAAC;AAEf,0EAA0E;AAC1E,KAAK,oBAAoB,GACrB,QAAQ,GACR,UAAU,GACV,cAAc,GACd,YAAY,CAAC;AAEjB,qEAAqE;AACrE,KAAK,kBAAkB,GACnB,YAAY,GACZ,sBAAsB,GACtB,cAAc,CAAC;AAMnB;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,sCAAsC;IACtC,QAAQ,EAAE,EAAE,CAAC;IACb,6CAA6C;IAC7C,IAAI,EAAE,MAAM,CAAC;IACb,wCAAwC;IACxC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,wBAAwB;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAGnC,6CAA6C;IAC7C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,2BAA2B;IAC3B,UAAU,CAAC,EAAE,eAAe,CAAC;IAC7B,8CAA8C;IAC9C,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,6BAA6B;IAC7B,eAAe,CAAC,EAAE,oBAAoB,CAAC;IACvC,mCAAmC;IACnC,aAAa,CAAC,EAAE,kBAAkB,CAAC;IACnC,iDAAiD;IACjD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,+BAA+B;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,wBAAwB;IACxB,QAAQ,EAAE,EAAE,CAAC;IACb,wCAAwC;IACxC,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC/C,wCAAwC;IACxC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAMD;;;;;;;GAOG;AACH,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,UAAU,EAAE,gBAAgB,EAAE,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9E,GAAG,CAAC,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IACvD,YAAY,CACV,EAAE,EAAE,EAAE,EACN,QAAQ,EAAE,EAAE,EACZ,MAAM,EAAE,YAAY,GACnB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAC/B,YAAY,CAAC,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;CAC7D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/intent/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}
|