limen-ai 1.0.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/CHANGELOG.md +47 -0
- package/LICENSE +190 -0
- package/README.md +546 -0
- package/dist/api/agents/agent_api.d.ts +126 -0
- package/dist/api/agents/agent_api.d.ts.map +1 -0
- package/dist/api/agents/agent_api.js +467 -0
- package/dist/api/agents/agent_api.js.map +1 -0
- package/dist/api/agents/trust_progression.d.ts +78 -0
- package/dist/api/agents/trust_progression.d.ts.map +1 -0
- package/dist/api/agents/trust_progression.js +124 -0
- package/dist/api/agents/trust_progression.js.map +1 -0
- package/dist/api/chat/chat_pipeline.d.ts +91 -0
- package/dist/api/chat/chat_pipeline.d.ts.map +1 -0
- package/dist/api/chat/chat_pipeline.js +630 -0
- package/dist/api/chat/chat_pipeline.js.map +1 -0
- package/dist/api/chat/technique_injector.d.ts +86 -0
- package/dist/api/chat/technique_injector.d.ts.map +1 -0
- package/dist/api/chat/technique_injector.js +125 -0
- package/dist/api/chat/technique_injector.js.map +1 -0
- package/dist/api/data/data_api.d.ts +91 -0
- package/dist/api/data/data_api.d.ts.map +1 -0
- package/dist/api/data/data_api.js +306 -0
- package/dist/api/data/data_api.js.map +1 -0
- package/dist/api/enforcement/cost_tracker.d.ts +105 -0
- package/dist/api/enforcement/cost_tracker.d.ts.map +1 -0
- package/dist/api/enforcement/cost_tracker.js +227 -0
- package/dist/api/enforcement/cost_tracker.js.map +1 -0
- package/dist/api/enforcement/latency_harness.d.ts +94 -0
- package/dist/api/enforcement/latency_harness.d.ts.map +1 -0
- package/dist/api/enforcement/latency_harness.js +120 -0
- package/dist/api/enforcement/latency_harness.js.map +1 -0
- package/dist/api/enforcement/rate_guard.d.ts +52 -0
- package/dist/api/enforcement/rate_guard.d.ts.map +1 -0
- package/dist/api/enforcement/rate_guard.js +79 -0
- package/dist/api/enforcement/rate_guard.js.map +1 -0
- package/dist/api/enforcement/rbac_guard.d.ts +55 -0
- package/dist/api/enforcement/rbac_guard.d.ts.map +1 -0
- package/dist/api/enforcement/rbac_guard.js +77 -0
- package/dist/api/enforcement/rbac_guard.js.map +1 -0
- package/dist/api/errors/limen_error.d.ts +81 -0
- package/dist/api/errors/limen_error.d.ts.map +1 -0
- package/dist/api/errors/limen_error.js +324 -0
- package/dist/api/errors/limen_error.js.map +1 -0
- package/dist/api/facades/claim_facade.d.ts +47 -0
- package/dist/api/facades/claim_facade.d.ts.map +1 -0
- package/dist/api/facades/claim_facade.js +67 -0
- package/dist/api/facades/claim_facade.js.map +1 -0
- package/dist/api/facades/working_memory_facade.d.ts +47 -0
- package/dist/api/facades/working_memory_facade.d.ts.map +1 -0
- package/dist/api/facades/working_memory_facade.js +74 -0
- package/dist/api/facades/working_memory_facade.js.map +1 -0
- package/dist/api/governance/governed_orchestration.d.ts +76 -0
- package/dist/api/governance/governed_orchestration.d.ts.map +1 -0
- package/dist/api/governance/governed_orchestration.js +413 -0
- package/dist/api/governance/governed_orchestration.js.map +1 -0
- package/dist/api/index.d.ts +84 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +847 -0
- package/dist/api/index.js.map +1 -0
- package/dist/api/infer/infer_pipeline.d.ts +51 -0
- package/dist/api/infer/infer_pipeline.d.ts.map +1 -0
- package/dist/api/infer/infer_pipeline.js +291 -0
- package/dist/api/infer/infer_pipeline.js.map +1 -0
- package/dist/api/interfaces/api.d.ts +940 -0
- package/dist/api/interfaces/api.d.ts.map +1 -0
- package/dist/api/interfaces/api.js +21 -0
- package/dist/api/interfaces/api.js.map +1 -0
- package/dist/api/knowledge/knowledge_api.d.ts +55 -0
- package/dist/api/knowledge/knowledge_api.d.ts.map +1 -0
- package/dist/api/knowledge/knowledge_api.js +89 -0
- package/dist/api/knowledge/knowledge_api.js.map +1 -0
- package/dist/api/migration/023_agent_persistence.d.ts +32 -0
- package/dist/api/migration/023_agent_persistence.d.ts.map +1 -0
- package/dist/api/migration/023_agent_persistence.js +158 -0
- package/dist/api/migration/023_agent_persistence.js.map +1 -0
- package/dist/api/migration/024_trust_learning.d.ts +36 -0
- package/dist/api/migration/024_trust_learning.d.ts.map +1 -0
- package/dist/api/migration/024_trust_learning.js +194 -0
- package/dist/api/migration/024_trust_learning.js.map +1 -0
- package/dist/api/migration/025_knowledge_graph.d.ts +29 -0
- package/dist/api/migration/025_knowledge_graph.d.ts.map +1 -0
- package/dist/api/migration/025_knowledge_graph.js +97 -0
- package/dist/api/migration/025_knowledge_graph.js.map +1 -0
- package/dist/api/migration/026_replay_pipeline.d.ts +30 -0
- package/dist/api/migration/026_replay_pipeline.d.ts.map +1 -0
- package/dist/api/migration/026_replay_pipeline.js +118 -0
- package/dist/api/migration/026_replay_pipeline.js.map +1 -0
- package/dist/api/missions/mission_api.d.ts +74 -0
- package/dist/api/missions/mission_api.d.ts.map +1 -0
- package/dist/api/missions/mission_api.js +408 -0
- package/dist/api/missions/mission_api.js.map +1 -0
- package/dist/api/observability/health.d.ts +36 -0
- package/dist/api/observability/health.d.ts.map +1 -0
- package/dist/api/observability/health.js +92 -0
- package/dist/api/observability/health.js.map +1 -0
- package/dist/api/observability/metrics.d.ts +95 -0
- package/dist/api/observability/metrics.d.ts.map +1 -0
- package/dist/api/observability/metrics.js +260 -0
- package/dist/api/observability/metrics.js.map +1 -0
- package/dist/api/roles/roles_api.d.ts +45 -0
- package/dist/api/roles/roles_api.d.ts.map +1 -0
- package/dist/api/roles/roles_api.js +77 -0
- package/dist/api/roles/roles_api.js.map +1 -0
- package/dist/api/sessions/session_manager.d.ts +110 -0
- package/dist/api/sessions/session_manager.d.ts.map +1 -0
- package/dist/api/sessions/session_manager.js +278 -0
- package/dist/api/sessions/session_manager.js.map +1 -0
- package/dist/budget/harness/dba_harness.d.ts +36 -0
- package/dist/budget/harness/dba_harness.d.ts.map +1 -0
- package/dist/budget/harness/dba_harness.js +58 -0
- package/dist/budget/harness/dba_harness.js.map +1 -0
- package/dist/budget/impl/dba_impl.d.ts +47 -0
- package/dist/budget/impl/dba_impl.d.ts.map +1 -0
- package/dist/budget/impl/dba_impl.js +402 -0
- package/dist/budget/impl/dba_impl.js.map +1 -0
- package/dist/budget/interfaces/dba_types.d.ts +708 -0
- package/dist/budget/interfaces/dba_types.d.ts.map +1 -0
- package/dist/budget/interfaces/dba_types.js +124 -0
- package/dist/budget/interfaces/dba_types.js.map +1 -0
- package/dist/claims/evidence/capability_scope_validator.d.ts +32 -0
- package/dist/claims/evidence/capability_scope_validator.d.ts.map +1 -0
- package/dist/claims/evidence/capability_scope_validator.js +72 -0
- package/dist/claims/evidence/capability_scope_validator.js.map +1 -0
- package/dist/claims/evidence/evidence_validator.d.ts +35 -0
- package/dist/claims/evidence/evidence_validator.d.ts.map +1 -0
- package/dist/claims/evidence/evidence_validator.js +118 -0
- package/dist/claims/evidence/evidence_validator.js.map +1 -0
- package/dist/claims/harness/claim_harness.d.ts +22 -0
- package/dist/claims/harness/claim_harness.d.ts.map +1 -0
- package/dist/claims/harness/claim_harness.js +26 -0
- package/dist/claims/harness/claim_harness.js.map +1 -0
- package/dist/claims/interfaces/claim_types.d.ts +858 -0
- package/dist/claims/interfaces/claim_types.d.ts.map +1 -0
- package/dist/claims/interfaces/claim_types.js +201 -0
- package/dist/claims/interfaces/claim_types.js.map +1 -0
- package/dist/claims/migration/019_ccp_claims.d.ts +23 -0
- package/dist/claims/migration/019_ccp_claims.d.ts.map +1 -0
- package/dist/claims/migration/019_ccp_claims.js +196 -0
- package/dist/claims/migration/019_ccp_claims.js.map +1 -0
- package/dist/claims/store/claim_stores.d.ts +27 -0
- package/dist/claims/store/claim_stores.d.ts.map +1 -0
- package/dist/claims/store/claim_stores.js +1352 -0
- package/dist/claims/store/claim_stores.js.map +1 -0
- package/dist/context/harness/cgp_harness.d.ts +32 -0
- package/dist/context/harness/cgp_harness.d.ts.map +1 -0
- package/dist/context/harness/cgp_harness.js +295 -0
- package/dist/context/harness/cgp_harness.js.map +1 -0
- package/dist/context/interfaces/cgp_types.d.ts +905 -0
- package/dist/context/interfaces/cgp_types.d.ts.map +1 -0
- package/dist/context/interfaces/cgp_types.js +112 -0
- package/dist/context/interfaces/cgp_types.js.map +1 -0
- package/dist/context/stores/cgp_stores.d.ts +42 -0
- package/dist/context/stores/cgp_stores.d.ts.map +1 -0
- package/dist/context/stores/cgp_stores.js +856 -0
- package/dist/context/stores/cgp_stores.js.map +1 -0
- package/dist/execution/harness/egp_harness.d.ts +43 -0
- package/dist/execution/harness/egp_harness.d.ts.map +1 -0
- package/dist/execution/harness/egp_harness.js +54 -0
- package/dist/execution/harness/egp_harness.js.map +1 -0
- package/dist/execution/interfaces/egp_types.d.ts +1042 -0
- package/dist/execution/interfaces/egp_types.d.ts.map +1 -0
- package/dist/execution/interfaces/egp_types.js +195 -0
- package/dist/execution/interfaces/egp_types.js.map +1 -0
- package/dist/execution/stores/egp_stores.d.ts +29 -0
- package/dist/execution/stores/egp_stores.d.ts.map +1 -0
- package/dist/execution/stores/egp_stores.js +1250 -0
- package/dist/execution/stores/egp_stores.js.map +1 -0
- package/dist/execution/wiring/execution_gate.d.ts +56 -0
- package/dist/execution/wiring/execution_gate.d.ts.map +1 -0
- package/dist/execution/wiring/execution_gate.js +77 -0
- package/dist/execution/wiring/execution_gate.js.map +1 -0
- package/dist/execution/wiring/floor_enforcer.d.ts +68 -0
- package/dist/execution/wiring/floor_enforcer.d.ts.map +1 -0
- package/dist/execution/wiring/floor_enforcer.js +96 -0
- package/dist/execution/wiring/floor_enforcer.js.map +1 -0
- package/dist/execution/wiring/invocation_gate.d.ts +58 -0
- package/dist/execution/wiring/invocation_gate.d.ts.map +1 -0
- package/dist/execution/wiring/invocation_gate.js +69 -0
- package/dist/execution/wiring/invocation_gate.js.map +1 -0
- package/dist/execution/wiring/terminal_release.d.ts +56 -0
- package/dist/execution/wiring/terminal_release.d.ts.map +1 -0
- package/dist/execution/wiring/terminal_release.js +85 -0
- package/dist/execution/wiring/terminal_release.js.map +1 -0
- package/dist/governance/harness/governance_harness.d.ts +54 -0
- package/dist/governance/harness/governance_harness.d.ts.map +1 -0
- package/dist/governance/harness/governance_harness.js +60 -0
- package/dist/governance/harness/governance_harness.js.map +1 -0
- package/dist/governance/migration/012_governance_runs_traces.d.ts +21 -0
- package/dist/governance/migration/012_governance_runs_traces.d.ts.map +1 -0
- package/dist/governance/migration/012_governance_runs_traces.js +115 -0
- package/dist/governance/migration/012_governance_runs_traces.js.map +1 -0
- package/dist/governance/migration/013_governance_contracts.d.ts +18 -0
- package/dist/governance/migration/013_governance_contracts.d.ts.map +1 -0
- package/dist/governance/migration/013_governance_contracts.js +59 -0
- package/dist/governance/migration/013_governance_contracts.js.map +1 -0
- package/dist/governance/migration/014_governance_supervisor.d.ts +16 -0
- package/dist/governance/migration/014_governance_supervisor.d.ts.map +1 -0
- package/dist/governance/migration/014_governance_supervisor.js +75 -0
- package/dist/governance/migration/014_governance_supervisor.js.map +1 -0
- package/dist/governance/migration/015_governance_eval.d.ts +18 -0
- package/dist/governance/migration/015_governance_eval.d.ts.map +1 -0
- package/dist/governance/migration/015_governance_eval.js +65 -0
- package/dist/governance/migration/015_governance_eval.js.map +1 -0
- package/dist/governance/migration/016_governance_capabilities.d.ts +16 -0
- package/dist/governance/migration/016_governance_capabilities.d.ts.map +1 -0
- package/dist/governance/migration/016_governance_capabilities.js +60 -0
- package/dist/governance/migration/016_governance_capabilities.js.map +1 -0
- package/dist/governance/migration/017_governance_handoffs_idempotency.d.ts +20 -0
- package/dist/governance/migration/017_governance_handoffs_idempotency.d.ts.map +1 -0
- package/dist/governance/migration/017_governance_handoffs_idempotency.js +103 -0
- package/dist/governance/migration/017_governance_handoffs_idempotency.js.map +1 -0
- package/dist/governance/migration/018_supervisor_decision_delete_trigger.d.ts +17 -0
- package/dist/governance/migration/018_supervisor_decision_delete_trigger.d.ts.map +1 -0
- package/dist/governance/migration/018_supervisor_decision_delete_trigger.js +37 -0
- package/dist/governance/migration/018_supervisor_decision_delete_trigger.js.map +1 -0
- package/dist/governance/stores/governance_stores.d.ts +78 -0
- package/dist/governance/stores/governance_stores.d.ts.map +1 -0
- package/dist/governance/stores/governance_stores.js +1117 -0
- package/dist/governance/stores/governance_stores.js.map +1 -0
- package/dist/kernel/audit/audit_trail.d.ts +24 -0
- package/dist/kernel/audit/audit_trail.d.ts.map +1 -0
- package/dist/kernel/audit/audit_trail.js +569 -0
- package/dist/kernel/audit/audit_trail.js.map +1 -0
- package/dist/kernel/crypto/crypto_engine.d.ts +49 -0
- package/dist/kernel/crypto/crypto_engine.d.ts.map +1 -0
- package/dist/kernel/crypto/crypto_engine.js +350 -0
- package/dist/kernel/crypto/crypto_engine.js.map +1 -0
- package/dist/kernel/database/database_lifecycle.d.ts +24 -0
- package/dist/kernel/database/database_lifecycle.d.ts.map +1 -0
- package/dist/kernel/database/database_lifecycle.js +404 -0
- package/dist/kernel/database/database_lifecycle.js.map +1 -0
- package/dist/kernel/database/migrations.d.ts +21 -0
- package/dist/kernel/database/migrations.d.ts.map +1 -0
- package/dist/kernel/database/migrations.js +407 -0
- package/dist/kernel/database/migrations.js.map +1 -0
- package/dist/kernel/events/event_bus.d.ts +25 -0
- package/dist/kernel/events/event_bus.d.ts.map +1 -0
- package/dist/kernel/events/event_bus.js +302 -0
- package/dist/kernel/events/event_bus.js.map +1 -0
- package/dist/kernel/events/webhook_delivery.d.ts +90 -0
- package/dist/kernel/events/webhook_delivery.d.ts.map +1 -0
- package/dist/kernel/events/webhook_delivery.js +324 -0
- package/dist/kernel/events/webhook_delivery.js.map +1 -0
- package/dist/kernel/index.d.ts +39 -0
- package/dist/kernel/index.d.ts.map +1 -0
- package/dist/kernel/index.js +263 -0
- package/dist/kernel/index.js.map +1 -0
- package/dist/kernel/interfaces/audit.d.ts +146 -0
- package/dist/kernel/interfaces/audit.d.ts.map +1 -0
- package/dist/kernel/interfaces/audit.js +15 -0
- package/dist/kernel/interfaces/audit.js.map +1 -0
- package/dist/kernel/interfaces/capability_manifest.d.ts +104 -0
- package/dist/kernel/interfaces/capability_manifest.d.ts.map +1 -0
- package/dist/kernel/interfaces/capability_manifest.js +44 -0
- package/dist/kernel/interfaces/capability_manifest.js.map +1 -0
- package/dist/kernel/interfaces/common.d.ts +91 -0
- package/dist/kernel/interfaces/common.d.ts.map +1 -0
- package/dist/kernel/interfaces/common.js +10 -0
- package/dist/kernel/interfaces/common.js.map +1 -0
- package/dist/kernel/interfaces/crypto.d.ts +95 -0
- package/dist/kernel/interfaces/crypto.d.ts.map +1 -0
- package/dist/kernel/interfaces/crypto.js +14 -0
- package/dist/kernel/interfaces/crypto.js.map +1 -0
- package/dist/kernel/interfaces/database.d.ts +157 -0
- package/dist/kernel/interfaces/database.d.ts.map +1 -0
- package/dist/kernel/interfaces/database.js +10 -0
- package/dist/kernel/interfaces/database.js.map +1 -0
- package/dist/kernel/interfaces/eval.d.ts +93 -0
- package/dist/kernel/interfaces/eval.d.ts.map +1 -0
- package/dist/kernel/interfaces/eval.js +17 -0
- package/dist/kernel/interfaces/eval.js.map +1 -0
- package/dist/kernel/interfaces/events.d.ts +73 -0
- package/dist/kernel/interfaces/events.d.ts.map +1 -0
- package/dist/kernel/interfaces/events.js +13 -0
- package/dist/kernel/interfaces/events.js.map +1 -0
- package/dist/kernel/interfaces/governance_ids.d.ts +93 -0
- package/dist/kernel/interfaces/governance_ids.d.ts.map +1 -0
- package/dist/kernel/interfaces/governance_ids.js +18 -0
- package/dist/kernel/interfaces/governance_ids.js.map +1 -0
- package/dist/kernel/interfaces/idempotency.d.ts +143 -0
- package/dist/kernel/interfaces/idempotency.d.ts.map +1 -0
- package/dist/kernel/interfaces/idempotency.js +22 -0
- package/dist/kernel/interfaces/idempotency.js.map +1 -0
- package/dist/kernel/interfaces/index.d.ts +29 -0
- package/dist/kernel/interfaces/index.d.ts.map +1 -0
- package/dist/kernel/interfaces/index.js +9 -0
- package/dist/kernel/interfaces/index.js.map +1 -0
- package/dist/kernel/interfaces/kernel.d.ts +79 -0
- package/dist/kernel/interfaces/kernel.d.ts.map +1 -0
- package/dist/kernel/interfaces/kernel.js +13 -0
- package/dist/kernel/interfaces/kernel.js.map +1 -0
- package/dist/kernel/interfaces/lifecycle.d.ts +115 -0
- package/dist/kernel/interfaces/lifecycle.d.ts.map +1 -0
- package/dist/kernel/interfaces/lifecycle.js +53 -0
- package/dist/kernel/interfaces/lifecycle.js.map +1 -0
- package/dist/kernel/interfaces/mission_contract.d.ts +106 -0
- package/dist/kernel/interfaces/mission_contract.d.ts.map +1 -0
- package/dist/kernel/interfaces/mission_contract.js +20 -0
- package/dist/kernel/interfaces/mission_contract.js.map +1 -0
- package/dist/kernel/interfaces/namespace.d.ts +30 -0
- package/dist/kernel/interfaces/namespace.d.ts.map +1 -0
- package/dist/kernel/interfaces/namespace.js +12 -0
- package/dist/kernel/interfaces/namespace.js.map +1 -0
- package/dist/kernel/interfaces/rate_limiter.d.ts +42 -0
- package/dist/kernel/interfaces/rate_limiter.d.ts.map +1 -0
- package/dist/kernel/interfaces/rate_limiter.js +12 -0
- package/dist/kernel/interfaces/rate_limiter.js.map +1 -0
- package/dist/kernel/interfaces/rbac.d.ts +58 -0
- package/dist/kernel/interfaces/rbac.d.ts.map +1 -0
- package/dist/kernel/interfaces/rbac.js +13 -0
- package/dist/kernel/interfaces/rbac.js.map +1 -0
- package/dist/kernel/interfaces/retention.d.ts +58 -0
- package/dist/kernel/interfaces/retention.d.ts.map +1 -0
- package/dist/kernel/interfaces/retention.js +13 -0
- package/dist/kernel/interfaces/retention.js.map +1 -0
- package/dist/kernel/interfaces/run_identity.d.ts +132 -0
- package/dist/kernel/interfaces/run_identity.d.ts.map +1 -0
- package/dist/kernel/interfaces/run_identity.js +16 -0
- package/dist/kernel/interfaces/run_identity.js.map +1 -0
- package/dist/kernel/interfaces/supervisor.d.ts +175 -0
- package/dist/kernel/interfaces/supervisor.d.ts.map +1 -0
- package/dist/kernel/interfaces/supervisor.js +25 -0
- package/dist/kernel/interfaces/supervisor.js.map +1 -0
- package/dist/kernel/interfaces/tenant.d.ts +34 -0
- package/dist/kernel/interfaces/tenant.d.ts.map +1 -0
- package/dist/kernel/interfaces/tenant.js +12 -0
- package/dist/kernel/interfaces/tenant.js.map +1 -0
- package/dist/kernel/interfaces/time.d.ts +29 -0
- package/dist/kernel/interfaces/time.d.ts.map +1 -0
- package/dist/kernel/interfaces/time.js +13 -0
- package/dist/kernel/interfaces/time.js.map +1 -0
- package/dist/kernel/interfaces/trace.d.ts +264 -0
- package/dist/kernel/interfaces/trace.d.ts.map +1 -0
- package/dist/kernel/interfaces/trace.js +17 -0
- package/dist/kernel/interfaces/trace.js.map +1 -0
- package/dist/kernel/namespace/namespace_enforcer.d.ts +20 -0
- package/dist/kernel/namespace/namespace_enforcer.d.ts.map +1 -0
- package/dist/kernel/namespace/namespace_enforcer.js +91 -0
- package/dist/kernel/namespace/namespace_enforcer.js.map +1 -0
- package/dist/kernel/rate_limiter/rate_limiter.d.ts +23 -0
- package/dist/kernel/rate_limiter/rate_limiter.d.ts.map +1 -0
- package/dist/kernel/rate_limiter/rate_limiter.js +146 -0
- package/dist/kernel/rate_limiter/rate_limiter.js.map +1 -0
- package/dist/kernel/rbac/rbac_engine.d.ts +20 -0
- package/dist/kernel/rbac/rbac_engine.d.ts.map +1 -0
- package/dist/kernel/rbac/rbac_engine.js +257 -0
- package/dist/kernel/rbac/rbac_engine.js.map +1 -0
- package/dist/kernel/retention/retention_scheduler.d.ts +41 -0
- package/dist/kernel/retention/retention_scheduler.d.ts.map +1 -0
- package/dist/kernel/retention/retention_scheduler.js +218 -0
- package/dist/kernel/retention/retention_scheduler.js.map +1 -0
- package/dist/kernel/tenant/tenant_context.d.ts +22 -0
- package/dist/kernel/tenant/tenant_context.d.ts.map +1 -0
- package/dist/kernel/tenant/tenant_context.js +107 -0
- package/dist/kernel/tenant/tenant_context.js.map +1 -0
- package/dist/kernel/tenant/tenant_scope.d.ts +81 -0
- package/dist/kernel/tenant/tenant_scope.d.ts.map +1 -0
- package/dist/kernel/tenant/tenant_scope.js +168 -0
- package/dist/kernel/tenant/tenant_scope.js.map +1 -0
- package/dist/kernel/time/time_provider.d.ts +39 -0
- package/dist/kernel/time/time_provider.d.ts.map +1 -0
- package/dist/kernel/time/time_provider.js +58 -0
- package/dist/kernel/time/time_provider.js.map +1 -0
- package/dist/learning/applicator/technique_applicator.d.ts +41 -0
- package/dist/learning/applicator/technique_applicator.d.ts.map +1 -0
- package/dist/learning/applicator/technique_applicator.js +200 -0
- package/dist/learning/applicator/technique_applicator.js.map +1 -0
- package/dist/learning/cold_start/cold_start_manager.d.ts +35 -0
- package/dist/learning/cold_start/cold_start_manager.d.ts.map +1 -0
- package/dist/learning/cold_start/cold_start_manager.js +146 -0
- package/dist/learning/cold_start/cold_start_manager.js.map +1 -0
- package/dist/learning/cycle/learning_cycle_orchestrator.d.ts +45 -0
- package/dist/learning/cycle/learning_cycle_orchestrator.d.ts.map +1 -0
- package/dist/learning/cycle/learning_cycle_orchestrator.js +165 -0
- package/dist/learning/cycle/learning_cycle_orchestrator.js.map +1 -0
- package/dist/learning/extractor/technique_extractor.d.ts +48 -0
- package/dist/learning/extractor/technique_extractor.d.ts.map +1 -0
- package/dist/learning/extractor/technique_extractor.js +357 -0
- package/dist/learning/extractor/technique_extractor.js.map +1 -0
- package/dist/learning/harness/learning_harness.d.ts +26 -0
- package/dist/learning/harness/learning_harness.d.ts.map +1 -0
- package/dist/learning/harness/learning_harness.js +58 -0
- package/dist/learning/harness/learning_harness.js.map +1 -0
- package/dist/learning/interfaces/index.d.ts +7 -0
- package/dist/learning/interfaces/index.d.ts.map +1 -0
- package/dist/learning/interfaces/index.js +10 -0
- package/dist/learning/interfaces/index.js.map +1 -0
- package/dist/learning/interfaces/learning_types.d.ts +398 -0
- package/dist/learning/interfaces/learning_types.d.ts.map +1 -0
- package/dist/learning/interfaces/learning_types.js +69 -0
- package/dist/learning/interfaces/learning_types.js.map +1 -0
- package/dist/learning/migration/007_learning_techniques.d.ts +23 -0
- package/dist/learning/migration/007_learning_techniques.d.ts.map +1 -0
- package/dist/learning/migration/007_learning_techniques.js +86 -0
- package/dist/learning/migration/007_learning_techniques.js.map +1 -0
- package/dist/learning/migration/008_learning_outcomes.d.ts +23 -0
- package/dist/learning/migration/008_learning_outcomes.d.ts.map +1 -0
- package/dist/learning/migration/008_learning_outcomes.js +79 -0
- package/dist/learning/migration/008_learning_outcomes.js.map +1 -0
- package/dist/learning/migration/009_learning_applications.d.ts +25 -0
- package/dist/learning/migration/009_learning_applications.d.ts.map +1 -0
- package/dist/learning/migration/009_learning_applications.js +82 -0
- package/dist/learning/migration/009_learning_applications.js.map +1 -0
- package/dist/learning/migration/010_learning_quarantine.d.ts +22 -0
- package/dist/learning/migration/010_learning_quarantine.d.ts.map +1 -0
- package/dist/learning/migration/010_learning_quarantine.js +78 -0
- package/dist/learning/migration/010_learning_quarantine.js.map +1 -0
- package/dist/learning/migration/011_learning_transfers.d.ts +22 -0
- package/dist/learning/migration/011_learning_transfers.d.ts.map +1 -0
- package/dist/learning/migration/011_learning_transfers.js +77 -0
- package/dist/learning/migration/011_learning_transfers.js.map +1 -0
- package/dist/learning/quarantine/quarantine_manager.d.ts +34 -0
- package/dist/learning/quarantine/quarantine_manager.d.ts.map +1 -0
- package/dist/learning/quarantine/quarantine_manager.js +200 -0
- package/dist/learning/quarantine/quarantine_manager.js.map +1 -0
- package/dist/learning/retirement/retirement_evaluator.d.ts +35 -0
- package/dist/learning/retirement/retirement_evaluator.d.ts.map +1 -0
- package/dist/learning/retirement/retirement_evaluator.js +131 -0
- package/dist/learning/retirement/retirement_evaluator.js.map +1 -0
- package/dist/learning/specialization/over_specialization_detector.d.ts +32 -0
- package/dist/learning/specialization/over_specialization_detector.d.ts.map +1 -0
- package/dist/learning/specialization/over_specialization_detector.js +105 -0
- package/dist/learning/specialization/over_specialization_detector.js.map +1 -0
- package/dist/learning/store/technique_store.d.ts +22 -0
- package/dist/learning/store/technique_store.d.ts.map +1 -0
- package/dist/learning/store/technique_store.js +369 -0
- package/dist/learning/store/technique_store.js.map +1 -0
- package/dist/learning/tracker/effectiveness_tracker.d.ts +26 -0
- package/dist/learning/tracker/effectiveness_tracker.d.ts.map +1 -0
- package/dist/learning/tracker/effectiveness_tracker.js +158 -0
- package/dist/learning/tracker/effectiveness_tracker.js.map +1 -0
- package/dist/learning/transfer/cross_agent_transfer.d.ts +35 -0
- package/dist/learning/transfer/cross_agent_transfer.d.ts.map +1 -0
- package/dist/learning/transfer/cross_agent_transfer.js +245 -0
- package/dist/learning/transfer/cross_agent_transfer.js.map +1 -0
- package/dist/orchestration/artifacts/artifact_store.d.ts +19 -0
- package/dist/orchestration/artifacts/artifact_store.d.ts.map +1 -0
- package/dist/orchestration/artifacts/artifact_store.js +213 -0
- package/dist/orchestration/artifacts/artifact_store.js.map +1 -0
- package/dist/orchestration/artifacts/cascade_walker.d.ts +39 -0
- package/dist/orchestration/artifacts/cascade_walker.d.ts.map +1 -0
- package/dist/orchestration/artifacts/cascade_walker.js +107 -0
- package/dist/orchestration/artifacts/cascade_walker.js.map +1 -0
- package/dist/orchestration/budget/budget_governance.d.ts +20 -0
- package/dist/orchestration/budget/budget_governance.d.ts.map +1 -0
- package/dist/orchestration/budget/budget_governance.js +182 -0
- package/dist/orchestration/budget/budget_governance.js.map +1 -0
- package/dist/orchestration/checkpoints/checkpoint_coordinator.d.ts +22 -0
- package/dist/orchestration/checkpoints/checkpoint_coordinator.d.ts.map +1 -0
- package/dist/orchestration/checkpoints/checkpoint_coordinator.js +252 -0
- package/dist/orchestration/checkpoints/checkpoint_coordinator.js.map +1 -0
- package/dist/orchestration/checkpoints/drift_engine.d.ts +52 -0
- package/dist/orchestration/checkpoints/drift_engine.d.ts.map +1 -0
- package/dist/orchestration/checkpoints/drift_engine.js +126 -0
- package/dist/orchestration/checkpoints/drift_engine.js.map +1 -0
- package/dist/orchestration/compaction/bounded_cognition.d.ts +22 -0
- package/dist/orchestration/compaction/bounded_cognition.d.ts.map +1 -0
- package/dist/orchestration/compaction/bounded_cognition.js +124 -0
- package/dist/orchestration/compaction/bounded_cognition.js.map +1 -0
- package/dist/orchestration/conversation/conversation_manager.d.ts +25 -0
- package/dist/orchestration/conversation/conversation_manager.d.ts.map +1 -0
- package/dist/orchestration/conversation/conversation_manager.js +260 -0
- package/dist/orchestration/conversation/conversation_manager.js.map +1 -0
- package/dist/orchestration/events/event_propagation.d.ts +20 -0
- package/dist/orchestration/events/event_propagation.d.ts.map +1 -0
- package/dist/orchestration/events/event_propagation.js +160 -0
- package/dist/orchestration/events/event_propagation.js.map +1 -0
- package/dist/orchestration/index.d.ts +28 -0
- package/dist/orchestration/index.d.ts.map +1 -0
- package/dist/orchestration/index.js +147 -0
- package/dist/orchestration/index.js.map +1 -0
- package/dist/orchestration/interfaces/orchestration.d.ts +494 -0
- package/dist/orchestration/interfaces/orchestration.d.ts.map +1 -0
- package/dist/orchestration/interfaces/orchestration.js +64 -0
- package/dist/orchestration/interfaces/orchestration.js.map +1 -0
- package/dist/orchestration/migration/003_orchestration.d.ts +27 -0
- package/dist/orchestration/migration/003_orchestration.d.ts.map +1 -0
- package/dist/orchestration/migration/003_orchestration.js +336 -0
- package/dist/orchestration/migration/003_orchestration.js.map +1 -0
- package/dist/orchestration/migration/004_tenant_isolation.d.ts +22 -0
- package/dist/orchestration/migration/004_tenant_isolation.d.ts.map +1 -0
- package/dist/orchestration/migration/004_tenant_isolation.js +179 -0
- package/dist/orchestration/migration/004_tenant_isolation.js.map +1 -0
- package/dist/orchestration/migration/005_immutability_triggers.d.ts +30 -0
- package/dist/orchestration/migration/005_immutability_triggers.d.ts.map +1 -0
- package/dist/orchestration/migration/005_immutability_triggers.js +93 -0
- package/dist/orchestration/migration/005_immutability_triggers.js.map +1 -0
- package/dist/orchestration/migration/006_audit_tombstone.d.ts +26 -0
- package/dist/orchestration/migration/006_audit_tombstone.d.ts.map +1 -0
- package/dist/orchestration/migration/006_audit_tombstone.js +71 -0
- package/dist/orchestration/migration/006_audit_tombstone.js.map +1 -0
- package/dist/orchestration/missions/mission_recovery.d.ts +60 -0
- package/dist/orchestration/missions/mission_recovery.d.ts.map +1 -0
- package/dist/orchestration/missions/mission_recovery.js +251 -0
- package/dist/orchestration/missions/mission_recovery.js.map +1 -0
- package/dist/orchestration/missions/mission_store.d.ts +16 -0
- package/dist/orchestration/missions/mission_store.d.ts.map +1 -0
- package/dist/orchestration/missions/mission_store.js +280 -0
- package/dist/orchestration/missions/mission_store.js.map +1 -0
- package/dist/orchestration/syscalls/create_artifact.d.ts +13 -0
- package/dist/orchestration/syscalls/create_artifact.d.ts.map +1 -0
- package/dist/orchestration/syscalls/create_artifact.js +23 -0
- package/dist/orchestration/syscalls/create_artifact.js.map +1 -0
- package/dist/orchestration/syscalls/emit_event.d.ts +13 -0
- package/dist/orchestration/syscalls/emit_event.d.ts.map +1 -0
- package/dist/orchestration/syscalls/emit_event.js +13 -0
- package/dist/orchestration/syscalls/emit_event.js.map +1 -0
- package/dist/orchestration/syscalls/propose_mission.d.ts +14 -0
- package/dist/orchestration/syscalls/propose_mission.d.ts.map +1 -0
- package/dist/orchestration/syscalls/propose_mission.js +27 -0
- package/dist/orchestration/syscalls/propose_mission.js.map +1 -0
- package/dist/orchestration/syscalls/propose_task_execution.d.ts +13 -0
- package/dist/orchestration/syscalls/propose_task_execution.d.ts.map +1 -0
- package/dist/orchestration/syscalls/propose_task_execution.js +84 -0
- package/dist/orchestration/syscalls/propose_task_execution.js.map +1 -0
- package/dist/orchestration/syscalls/propose_task_graph.d.ts +13 -0
- package/dist/orchestration/syscalls/propose_task_graph.d.ts.map +1 -0
- package/dist/orchestration/syscalls/propose_task_graph.js +22 -0
- package/dist/orchestration/syscalls/propose_task_graph.js.map +1 -0
- package/dist/orchestration/syscalls/read_artifact.d.ts +14 -0
- package/dist/orchestration/syscalls/read_artifact.d.ts.map +1 -0
- package/dist/orchestration/syscalls/read_artifact.js +31 -0
- package/dist/orchestration/syscalls/read_artifact.js.map +1 -0
- package/dist/orchestration/syscalls/request_budget.d.ts +14 -0
- package/dist/orchestration/syscalls/request_budget.d.ts.map +1 -0
- package/dist/orchestration/syscalls/request_budget.js +46 -0
- package/dist/orchestration/syscalls/request_budget.js.map +1 -0
- package/dist/orchestration/syscalls/request_capability.d.ts +13 -0
- package/dist/orchestration/syscalls/request_capability.d.ts.map +1 -0
- package/dist/orchestration/syscalls/request_capability.js +136 -0
- package/dist/orchestration/syscalls/request_capability.js.map +1 -0
- package/dist/orchestration/syscalls/respond_checkpoint.d.ts +12 -0
- package/dist/orchestration/syscalls/respond_checkpoint.d.ts.map +1 -0
- package/dist/orchestration/syscalls/respond_checkpoint.js +12 -0
- package/dist/orchestration/syscalls/respond_checkpoint.js.map +1 -0
- package/dist/orchestration/syscalls/submit_result.d.ts +15 -0
- package/dist/orchestration/syscalls/submit_result.d.ts.map +1 -0
- package/dist/orchestration/syscalls/submit_result.js +97 -0
- package/dist/orchestration/syscalls/submit_result.js.map +1 -0
- package/dist/orchestration/tasks/task_graph.d.ts +26 -0
- package/dist/orchestration/tasks/task_graph.d.ts.map +1 -0
- package/dist/orchestration/tasks/task_graph.js +204 -0
- package/dist/orchestration/tasks/task_graph.js.map +1 -0
- package/dist/orchestration/tasks/task_store.d.ts +18 -0
- package/dist/orchestration/tasks/task_store.d.ts.map +1 -0
- package/dist/orchestration/tasks/task_store.js +99 -0
- package/dist/orchestration/tasks/task_store.js.map +1 -0
- package/dist/reference-agent/artifact_manager.d.ts +119 -0
- package/dist/reference-agent/artifact_manager.d.ts.map +1 -0
- package/dist/reference-agent/artifact_manager.js +149 -0
- package/dist/reference-agent/artifact_manager.js.map +1 -0
- package/dist/reference-agent/checkpoint_handler.d.ts +186 -0
- package/dist/reference-agent/checkpoint_handler.d.ts.map +1 -0
- package/dist/reference-agent/checkpoint_handler.js +423 -0
- package/dist/reference-agent/checkpoint_handler.js.map +1 -0
- package/dist/reference-agent/index.d.ts +43 -0
- package/dist/reference-agent/index.d.ts.map +1 -0
- package/dist/reference-agent/index.js +53 -0
- package/dist/reference-agent/index.js.map +1 -0
- package/dist/reference-agent/mission_planner.d.ts +163 -0
- package/dist/reference-agent/mission_planner.d.ts.map +1 -0
- package/dist/reference-agent/mission_planner.js +375 -0
- package/dist/reference-agent/mission_planner.js.map +1 -0
- package/dist/reference-agent/reference_agent.d.ts +130 -0
- package/dist/reference-agent/reference_agent.d.ts.map +1 -0
- package/dist/reference-agent/reference_agent.js +360 -0
- package/dist/reference-agent/reference_agent.js.map +1 -0
- package/dist/reference-agent/reference_agent.types.d.ts +199 -0
- package/dist/reference-agent/reference_agent.types.d.ts.map +1 -0
- package/dist/reference-agent/reference_agent.types.js +59 -0
- package/dist/reference-agent/reference_agent.types.js.map +1 -0
- package/dist/reference-agent/result_aggregator.d.ts +107 -0
- package/dist/reference-agent/result_aggregator.d.ts.map +1 -0
- package/dist/reference-agent/result_aggregator.js +219 -0
- package/dist/reference-agent/result_aggregator.js.map +1 -0
- package/dist/reference-agent/system_call_client.d.ts +106 -0
- package/dist/reference-agent/system_call_client.d.ts.map +1 -0
- package/dist/reference-agent/system_call_client.js +231 -0
- package/dist/reference-agent/system_call_client.js.map +1 -0
- package/dist/reference-agent/task_executor.d.ts +108 -0
- package/dist/reference-agent/task_executor.d.ts.map +1 -0
- package/dist/reference-agent/task_executor.js +249 -0
- package/dist/reference-agent/task_executor.js.map +1 -0
- package/dist/substrate/accounting/resource_accounting.d.ts +52 -0
- package/dist/substrate/accounting/resource_accounting.d.ts.map +1 -0
- package/dist/substrate/accounting/resource_accounting.js +200 -0
- package/dist/substrate/accounting/resource_accounting.js.map +1 -0
- package/dist/substrate/adapters/capability_registry.d.ts +28 -0
- package/dist/substrate/adapters/capability_registry.d.ts.map +1 -0
- package/dist/substrate/adapters/capability_registry.js +196 -0
- package/dist/substrate/adapters/capability_registry.js.map +1 -0
- package/dist/substrate/gateway/llm_gateway.d.ts +68 -0
- package/dist/substrate/gateway/llm_gateway.d.ts.map +1 -0
- package/dist/substrate/gateway/llm_gateway.js +442 -0
- package/dist/substrate/gateway/llm_gateway.js.map +1 -0
- package/dist/substrate/heartbeat/heartbeat_monitor.d.ts +40 -0
- package/dist/substrate/heartbeat/heartbeat_monitor.d.ts.map +1 -0
- package/dist/substrate/heartbeat/heartbeat_monitor.js +170 -0
- package/dist/substrate/heartbeat/heartbeat_monitor.js.map +1 -0
- package/dist/substrate/index.d.ts +59 -0
- package/dist/substrate/index.d.ts.map +1 -0
- package/dist/substrate/index.js +143 -0
- package/dist/substrate/index.js.map +1 -0
- package/dist/substrate/interfaces/substrate.d.ts +486 -0
- package/dist/substrate/interfaces/substrate.d.ts.map +1 -0
- package/dist/substrate/interfaces/substrate.js +14 -0
- package/dist/substrate/interfaces/substrate.js.map +1 -0
- package/dist/substrate/migration/002_substrate.d.ts +24 -0
- package/dist/substrate/migration/002_substrate.d.ts.map +1 -0
- package/dist/substrate/migration/002_substrate.js +188 -0
- package/dist/substrate/migration/002_substrate.js.map +1 -0
- package/dist/substrate/migration/022_transport_deliberation.d.ts +31 -0
- package/dist/substrate/migration/022_transport_deliberation.d.ts.map +1 -0
- package/dist/substrate/migration/022_transport_deliberation.js +77 -0
- package/dist/substrate/migration/022_transport_deliberation.js.map +1 -0
- package/dist/substrate/replay/replay_engine.d.ts +65 -0
- package/dist/substrate/replay/replay_engine.d.ts.map +1 -0
- package/dist/substrate/replay/replay_engine.js +316 -0
- package/dist/substrate/replay/replay_engine.js.map +1 -0
- package/dist/substrate/scheduler/task_scheduler.d.ts +38 -0
- package/dist/substrate/scheduler/task_scheduler.d.ts.map +1 -0
- package/dist/substrate/scheduler/task_scheduler.js +486 -0
- package/dist/substrate/scheduler/task_scheduler.js.map +1 -0
- package/dist/substrate/transport/adapters/anthropic_adapter.d.ts +57 -0
- package/dist/substrate/transport/adapters/anthropic_adapter.d.ts.map +1 -0
- package/dist/substrate/transport/adapters/anthropic_adapter.js +455 -0
- package/dist/substrate/transport/adapters/anthropic_adapter.js.map +1 -0
- package/dist/substrate/transport/adapters/gemini_adapter.d.ts +86 -0
- package/dist/substrate/transport/adapters/gemini_adapter.d.ts.map +1 -0
- package/dist/substrate/transport/adapters/gemini_adapter.js +456 -0
- package/dist/substrate/transport/adapters/gemini_adapter.js.map +1 -0
- package/dist/substrate/transport/adapters/groq_adapter.d.ts +50 -0
- package/dist/substrate/transport/adapters/groq_adapter.d.ts.map +1 -0
- package/dist/substrate/transport/adapters/groq_adapter.js +179 -0
- package/dist/substrate/transport/adapters/groq_adapter.js.map +1 -0
- package/dist/substrate/transport/adapters/mistral_adapter.d.ts +50 -0
- package/dist/substrate/transport/adapters/mistral_adapter.d.ts.map +1 -0
- package/dist/substrate/transport/adapters/mistral_adapter.js +179 -0
- package/dist/substrate/transport/adapters/mistral_adapter.js.map +1 -0
- package/dist/substrate/transport/adapters/ollama_adapter.d.ts +66 -0
- package/dist/substrate/transport/adapters/ollama_adapter.d.ts.map +1 -0
- package/dist/substrate/transport/adapters/ollama_adapter.js +347 -0
- package/dist/substrate/transport/adapters/ollama_adapter.js.map +1 -0
- package/dist/substrate/transport/adapters/openai_adapter.d.ts +68 -0
- package/dist/substrate/transport/adapters/openai_adapter.d.ts.map +1 -0
- package/dist/substrate/transport/adapters/openai_adapter.js +439 -0
- package/dist/substrate/transport/adapters/openai_adapter.js.map +1 -0
- package/dist/substrate/transport/adapters/openai_compat.d.ts +64 -0
- package/dist/substrate/transport/adapters/openai_compat.d.ts.map +1 -0
- package/dist/substrate/transport/adapters/openai_compat.js +326 -0
- package/dist/substrate/transport/adapters/openai_compat.js.map +1 -0
- package/dist/substrate/transport/index.d.ts +17 -0
- package/dist/substrate/transport/index.d.ts.map +1 -0
- package/dist/substrate/transport/index.js +25 -0
- package/dist/substrate/transport/index.js.map +1 -0
- package/dist/substrate/transport/stream_parser.d.ts +69 -0
- package/dist/substrate/transport/stream_parser.d.ts.map +1 -0
- package/dist/substrate/transport/stream_parser.js +280 -0
- package/dist/substrate/transport/stream_parser.js.map +1 -0
- package/dist/substrate/transport/transport_engine.d.ts +53 -0
- package/dist/substrate/transport/transport_engine.d.ts.map +1 -0
- package/dist/substrate/transport/transport_engine.js +444 -0
- package/dist/substrate/transport/transport_engine.js.map +1 -0
- package/dist/substrate/transport/transport_types.d.ts +207 -0
- package/dist/substrate/transport/transport_types.d.ts.map +1 -0
- package/dist/substrate/transport/transport_types.js +13 -0
- package/dist/substrate/transport/transport_types.js.map +1 -0
- package/dist/substrate/workers/worker_runtime.d.ts +40 -0
- package/dist/substrate/workers/worker_runtime.d.ts.map +1 -0
- package/dist/substrate/workers/worker_runtime.js +294 -0
- package/dist/substrate/workers/worker_runtime.js.map +1 -0
- package/dist/techniques/harness/tgp_harness.d.ts +39 -0
- package/dist/techniques/harness/tgp_harness.d.ts.map +1 -0
- package/dist/techniques/harness/tgp_harness.js +49 -0
- package/dist/techniques/harness/tgp_harness.js.map +1 -0
- package/dist/techniques/interfaces/tgp_types.d.ts +646 -0
- package/dist/techniques/interfaces/tgp_types.d.ts.map +1 -0
- package/dist/techniques/interfaces/tgp_types.js +160 -0
- package/dist/techniques/interfaces/tgp_types.js.map +1 -0
- package/dist/techniques/migration/020_tgp_governance.d.ts +36 -0
- package/dist/techniques/migration/020_tgp_governance.d.ts.map +1 -0
- package/dist/techniques/migration/020_tgp_governance.js +249 -0
- package/dist/techniques/migration/020_tgp_governance.js.map +1 -0
- package/dist/techniques/store/tgp_stores.d.ts +36 -0
- package/dist/techniques/store/tgp_stores.d.ts.map +1 -0
- package/dist/techniques/store/tgp_stores.js +854 -0
- package/dist/techniques/store/tgp_stores.js.map +1 -0
- package/dist/working-memory/harness/wmp_harness.d.ts +43 -0
- package/dist/working-memory/harness/wmp_harness.d.ts.map +1 -0
- package/dist/working-memory/harness/wmp_harness.js +81 -0
- package/dist/working-memory/harness/wmp_harness.js.map +1 -0
- package/dist/working-memory/interfaces/wmp_types.d.ts +635 -0
- package/dist/working-memory/interfaces/wmp_types.d.ts.map +1 -0
- package/dist/working-memory/interfaces/wmp_types.js +144 -0
- package/dist/working-memory/interfaces/wmp_types.js.map +1 -0
- package/dist/working-memory/migration/021_wmp.d.ts +21 -0
- package/dist/working-memory/migration/021_wmp.d.ts.map +1 -0
- package/dist/working-memory/migration/021_wmp.js +139 -0
- package/dist/working-memory/migration/021_wmp.js.map +1 -0
- package/dist/working-memory/stores/wmp_stores.d.ts +28 -0
- package/dist/working-memory/stores/wmp_stores.d.ts.map +1 -0
- package/dist/working-memory/stores/wmp_stores.js +754 -0
- package/dist/working-memory/stores/wmp_stores.js.map +1 -0
- package/package.json +84 -0
|
@@ -0,0 +1,754 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WMP (Working Memory Protocol) stores — SQLite-backed implementation.
|
|
3
|
+
* Pattern P-010: All business logic lives here. Harness is thin wiring only.
|
|
4
|
+
*
|
|
5
|
+
* Phase: v3.3.0 — Working Memory Protocol
|
|
6
|
+
* Invariants: WMP-I1 through WMP-I8 (I-41 through I-48)
|
|
7
|
+
* System calls: SC-14 (write), SC-15 (read), SC-16 (discard)
|
|
8
|
+
* Boundary snapshots: §6.2-§6.7 (4 triggers + suspension)
|
|
9
|
+
*/
|
|
10
|
+
import { randomUUID } from 'node:crypto';
|
|
11
|
+
import { WMP_KEY_MAX_LENGTH, WMP_KEY_RESERVED_PREFIX, WMP_KEY_FORBIDDEN_PATTERN, WMP_EVENTS, WMP_NULL_EVENT_SINK, } from '../interfaces/wmp_types.js';
|
|
12
|
+
// ============================================================================
|
|
13
|
+
// NotImplementedError — kept for backward compatibility
|
|
14
|
+
// ============================================================================
|
|
15
|
+
export class NotImplementedError extends Error {
|
|
16
|
+
code = 'NOT_IMPLEMENTED';
|
|
17
|
+
constructor(method) {
|
|
18
|
+
super(`${method} is not yet implemented`);
|
|
19
|
+
this.name = 'NotImplementedError';
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
// ============================================================================
|
|
23
|
+
// File-local helpers
|
|
24
|
+
// ============================================================================
|
|
25
|
+
function ok(value) {
|
|
26
|
+
return { ok: true, value };
|
|
27
|
+
}
|
|
28
|
+
function err(code, message, spec) {
|
|
29
|
+
return { ok: false, error: { code, message, spec } };
|
|
30
|
+
}
|
|
31
|
+
function errWithExtras(code, message, spec, extras) {
|
|
32
|
+
const error = { code, message, spec, ...extras };
|
|
33
|
+
return { ok: false, error: error };
|
|
34
|
+
}
|
|
35
|
+
function newId() {
|
|
36
|
+
return randomUUID();
|
|
37
|
+
}
|
|
38
|
+
// Monotonic timestamp: guarantees strictly increasing values even within same millisecond.
|
|
39
|
+
// Required for P2 eviction ordering (DC-WMP-801) — updatedAt must differ on rapid writes.
|
|
40
|
+
// Hard Stop #7: uses injectable TimeProvider as the clock source.
|
|
41
|
+
let _lastTimestamp = '';
|
|
42
|
+
function monotonicNowISO(time) {
|
|
43
|
+
let ts = time.nowISO();
|
|
44
|
+
if (ts <= _lastTimestamp) {
|
|
45
|
+
const d = new Date(_lastTimestamp);
|
|
46
|
+
d.setTime(d.getTime() + 1);
|
|
47
|
+
ts = d.toISOString();
|
|
48
|
+
}
|
|
49
|
+
_lastTimestamp = ts;
|
|
50
|
+
return ts;
|
|
51
|
+
}
|
|
52
|
+
function utf8ByteLength(str) {
|
|
53
|
+
return Buffer.byteLength(str, 'utf8');
|
|
54
|
+
}
|
|
55
|
+
function validateKey(key) {
|
|
56
|
+
if (!key || key.length === 0)
|
|
57
|
+
return { valid: false, reason: 'Key must not be empty' };
|
|
58
|
+
if (key.length > WMP_KEY_MAX_LENGTH)
|
|
59
|
+
return { valid: false, reason: `Key exceeds ${WMP_KEY_MAX_LENGTH} characters` };
|
|
60
|
+
if (WMP_KEY_FORBIDDEN_PATTERN.test(key))
|
|
61
|
+
return { valid: false, reason: 'Key contains forbidden characters (whitespace or path separators)' };
|
|
62
|
+
if (key.startsWith(WMP_KEY_RESERVED_PREFIX))
|
|
63
|
+
return { valid: false, reason: `Key must not begin with reserved prefix '${WMP_KEY_RESERVED_PREFIX}'` };
|
|
64
|
+
return { valid: true };
|
|
65
|
+
}
|
|
66
|
+
const TERMINAL_STATES = new Set(['COMPLETED', 'FAILED', 'CANCELLED']);
|
|
67
|
+
const EXECUTABLE_STATES = new Set(['RUNNING']);
|
|
68
|
+
function lookupTask(conn, taskId) {
|
|
69
|
+
return conn.get('SELECT id, state, assigned_agent FROM core_tasks WHERE id = ?', [taskId]);
|
|
70
|
+
}
|
|
71
|
+
// Module-level connection reference for WmpInternalReader (no conn param in interface).
|
|
72
|
+
// Set by every SC handler call. WmpInternalReader uses this to read entries.
|
|
73
|
+
let _connRef = null;
|
|
74
|
+
// ============================================================================
|
|
75
|
+
// Entry Store Implementation
|
|
76
|
+
// ============================================================================
|
|
77
|
+
export function createEntryStore(time) {
|
|
78
|
+
const clock = time ?? { nowISO: () => new Date().toISOString(), nowMs: () => Date.now() };
|
|
79
|
+
return Object.freeze({
|
|
80
|
+
upsert(conn, taskId, key, value, sizeBytes) {
|
|
81
|
+
const now = monotonicNowISO(clock);
|
|
82
|
+
const existing = conn.get('SELECT key, value, size_bytes, mutation_position, created_at, updated_at FROM working_memory_entries WHERE task_id = ? AND key = ?', [taskId, key]);
|
|
83
|
+
// Get next mutation position
|
|
84
|
+
conn.run('INSERT INTO wmp_mutation_counters (task_id, counter) VALUES (?, 1) ON CONFLICT(task_id) DO UPDATE SET counter = counter + 1', [taskId]);
|
|
85
|
+
const counterRow = conn.get('SELECT counter FROM wmp_mutation_counters WHERE task_id = ?', [taskId]);
|
|
86
|
+
const mutationPosition = counterRow.counter;
|
|
87
|
+
if (existing) {
|
|
88
|
+
conn.run('UPDATE working_memory_entries SET value = ?, size_bytes = ?, mutation_position = ?, updated_at = ? WHERE task_id = ? AND key = ?', [value, sizeBytes, mutationPosition, now, taskId, key]);
|
|
89
|
+
return ok({
|
|
90
|
+
key,
|
|
91
|
+
value,
|
|
92
|
+
sizeBytes,
|
|
93
|
+
createdAt: existing.created_at,
|
|
94
|
+
updatedAt: now,
|
|
95
|
+
mutationPosition,
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
conn.run('INSERT INTO working_memory_entries (task_id, key, value, size_bytes, mutation_position, created_at, updated_at) VALUES (?, ?, ?, ?, ?, ?, ?)', [taskId, key, value, sizeBytes, mutationPosition, now, now]);
|
|
99
|
+
return ok({
|
|
100
|
+
key,
|
|
101
|
+
value,
|
|
102
|
+
sizeBytes,
|
|
103
|
+
createdAt: now,
|
|
104
|
+
updatedAt: now,
|
|
105
|
+
mutationPosition,
|
|
106
|
+
});
|
|
107
|
+
},
|
|
108
|
+
get(conn, taskId, key) {
|
|
109
|
+
const row = conn.get('SELECT key, value, size_bytes, mutation_position, created_at, updated_at FROM working_memory_entries WHERE task_id = ? AND key = ?', [taskId, key]);
|
|
110
|
+
if (!row) {
|
|
111
|
+
return err('WORKING_MEMORY_NOT_FOUND', `Key '${key}' not found in task ${taskId}`, '§5.3');
|
|
112
|
+
}
|
|
113
|
+
return ok({
|
|
114
|
+
key: row.key,
|
|
115
|
+
value: row.value,
|
|
116
|
+
sizeBytes: row.size_bytes,
|
|
117
|
+
createdAt: row.created_at,
|
|
118
|
+
updatedAt: row.updated_at,
|
|
119
|
+
mutationPosition: row.mutation_position,
|
|
120
|
+
});
|
|
121
|
+
},
|
|
122
|
+
listAll(conn, taskId) {
|
|
123
|
+
const rows = conn.query('SELECT key, value, size_bytes, mutation_position, created_at, updated_at FROM working_memory_entries WHERE task_id = ? ORDER BY mutation_position ASC', [taskId]);
|
|
124
|
+
return ok(rows.map(r => ({
|
|
125
|
+
key: r.key,
|
|
126
|
+
value: r.value,
|
|
127
|
+
sizeBytes: r.size_bytes,
|
|
128
|
+
createdAt: r.created_at,
|
|
129
|
+
updatedAt: r.updated_at,
|
|
130
|
+
mutationPosition: r.mutation_position,
|
|
131
|
+
})));
|
|
132
|
+
},
|
|
133
|
+
discard(conn, taskId, key) {
|
|
134
|
+
const existing = conn.get('SELECT size_bytes FROM working_memory_entries WHERE task_id = ? AND key = ?', [taskId, key]);
|
|
135
|
+
if (!existing) {
|
|
136
|
+
return err('WORKING_MEMORY_NOT_FOUND', `Key '${key}' not found in task ${taskId}`, '§5.4');
|
|
137
|
+
}
|
|
138
|
+
conn.run('DELETE FROM working_memory_entries WHERE task_id = ? AND key = ?', [taskId, key]);
|
|
139
|
+
return ok({ freedBytes: existing.size_bytes });
|
|
140
|
+
},
|
|
141
|
+
discardAll(conn, taskId) {
|
|
142
|
+
const usage = conn.get('SELECT COUNT(*) as cnt, COALESCE(SUM(size_bytes), 0) as total FROM working_memory_entries WHERE task_id = ?', [taskId]);
|
|
143
|
+
conn.run('DELETE FROM working_memory_entries WHERE task_id = ?', [taskId]);
|
|
144
|
+
return ok({
|
|
145
|
+
discardedCount: usage?.cnt ?? 0,
|
|
146
|
+
freedBytes: usage?.total ?? 0,
|
|
147
|
+
});
|
|
148
|
+
},
|
|
149
|
+
getUsage(conn, taskId) {
|
|
150
|
+
const row = conn.get('SELECT COUNT(*) as cnt, COALESCE(SUM(size_bytes), 0) as total FROM working_memory_entries WHERE task_id = ?', [taskId]);
|
|
151
|
+
return ok({
|
|
152
|
+
entryCount: row?.cnt ?? 0,
|
|
153
|
+
totalBytes: row?.total ?? 0,
|
|
154
|
+
});
|
|
155
|
+
},
|
|
156
|
+
isInitialized(conn, taskId) {
|
|
157
|
+
const row = conn.get('SELECT counter FROM wmp_mutation_counters WHERE task_id = ?', [taskId]);
|
|
158
|
+
return ok(row !== undefined);
|
|
159
|
+
},
|
|
160
|
+
getNamespaceState(conn, taskId) {
|
|
161
|
+
const counterRow = conn.get('SELECT counter FROM wmp_mutation_counters WHERE task_id = ?', [taskId]);
|
|
162
|
+
if (!counterRow)
|
|
163
|
+
return ok('never_initialized');
|
|
164
|
+
const entryCount = conn.get('SELECT COUNT(*) as cnt FROM working_memory_entries WHERE task_id = ?', [taskId]);
|
|
165
|
+
if ((entryCount?.cnt ?? 0) > 0)
|
|
166
|
+
return ok('initialized_with_entries');
|
|
167
|
+
return ok('initialized_empty');
|
|
168
|
+
},
|
|
169
|
+
});
|
|
170
|
+
}
|
|
171
|
+
// ============================================================================
|
|
172
|
+
// Boundary Store Implementation
|
|
173
|
+
// ============================================================================
|
|
174
|
+
export function createBoundaryStore(time) {
|
|
175
|
+
const clock = time ?? { nowISO: () => new Date().toISOString(), nowMs: () => Date.now() };
|
|
176
|
+
return Object.freeze({
|
|
177
|
+
createBoundaryEvent(conn, event) {
|
|
178
|
+
const eventId = newId();
|
|
179
|
+
const timestamp = event.timestamp || monotonicNowISO(clock);
|
|
180
|
+
conn.run('INSERT INTO wmp_boundary_events (event_id, task_id, mission_id, trigger, snapshot_content_id, linked_emission_id, timestamp) VALUES (?, ?, ?, ?, ?, ?, ?)', [eventId, event.taskId, event.missionId, event.trigger, event.snapshotContentId, event.linkedEmissionId ?? null, timestamp]);
|
|
181
|
+
return ok({
|
|
182
|
+
eventId,
|
|
183
|
+
taskId: event.taskId,
|
|
184
|
+
missionId: event.missionId,
|
|
185
|
+
trigger: event.trigger,
|
|
186
|
+
snapshotContentId: event.snapshotContentId,
|
|
187
|
+
linkedEmissionId: event.linkedEmissionId,
|
|
188
|
+
timestamp,
|
|
189
|
+
});
|
|
190
|
+
},
|
|
191
|
+
createSnapshotContent(conn, content) {
|
|
192
|
+
const contentId = newId();
|
|
193
|
+
const entriesJson = content.entries ? JSON.stringify(content.entries) : null;
|
|
194
|
+
conn.run('INSERT INTO wmp_snapshot_contents (content_id, task_id, namespace_state, entries_json, total_entries, total_size_bytes, highest_mutation_position) VALUES (?, ?, ?, ?, ?, ?, ?)', [contentId, content.taskId ?? '', content.namespaceState, entriesJson, content.totalEntries, content.totalSizeBytes, content.highestMutationPosition ?? null]);
|
|
195
|
+
return ok({
|
|
196
|
+
contentId,
|
|
197
|
+
namespaceState: content.namespaceState,
|
|
198
|
+
entries: content.entries,
|
|
199
|
+
totalEntries: content.totalEntries,
|
|
200
|
+
totalSizeBytes: content.totalSizeBytes,
|
|
201
|
+
highestMutationPosition: content.highestMutationPosition,
|
|
202
|
+
});
|
|
203
|
+
},
|
|
204
|
+
findMatchingContent(conn, taskId, namespaceState, highestMutationPosition) {
|
|
205
|
+
let row;
|
|
206
|
+
if (highestMutationPosition === null) {
|
|
207
|
+
row = conn.get('SELECT content_id, namespace_state, entries_json, total_entries, total_size_bytes, highest_mutation_position FROM wmp_snapshot_contents WHERE task_id = ? AND namespace_state = ? AND highest_mutation_position IS NULL', [taskId, namespaceState]);
|
|
208
|
+
}
|
|
209
|
+
else {
|
|
210
|
+
row = conn.get('SELECT content_id, namespace_state, entries_json, total_entries, total_size_bytes, highest_mutation_position FROM wmp_snapshot_contents WHERE task_id = ? AND namespace_state = ? AND highest_mutation_position = ?', [taskId, namespaceState, highestMutationPosition]);
|
|
211
|
+
}
|
|
212
|
+
if (!row)
|
|
213
|
+
return ok(null);
|
|
214
|
+
return ok({
|
|
215
|
+
contentId: row.content_id,
|
|
216
|
+
namespaceState: row.namespace_state,
|
|
217
|
+
entries: row.entries_json ? JSON.parse(row.entries_json) : null,
|
|
218
|
+
totalEntries: row.total_entries,
|
|
219
|
+
totalSizeBytes: row.total_size_bytes,
|
|
220
|
+
highestMutationPosition: row.highest_mutation_position,
|
|
221
|
+
});
|
|
222
|
+
},
|
|
223
|
+
getBoundaryEvent(conn, eventId) {
|
|
224
|
+
const row = conn.get('SELECT event_id, task_id, mission_id, trigger, snapshot_content_id, linked_emission_id, timestamp FROM wmp_boundary_events WHERE event_id = ?', [eventId]);
|
|
225
|
+
if (!row)
|
|
226
|
+
return err('NOT_FOUND', `Boundary event ${eventId} not found`, '§6.2');
|
|
227
|
+
return ok({
|
|
228
|
+
eventId: row.event_id,
|
|
229
|
+
taskId: row.task_id,
|
|
230
|
+
missionId: row.mission_id,
|
|
231
|
+
trigger: row.trigger,
|
|
232
|
+
snapshotContentId: row.snapshot_content_id,
|
|
233
|
+
linkedEmissionId: row.linked_emission_id,
|
|
234
|
+
timestamp: row.timestamp,
|
|
235
|
+
});
|
|
236
|
+
},
|
|
237
|
+
getSnapshotContent(conn, contentId) {
|
|
238
|
+
const row = conn.get('SELECT content_id, namespace_state, entries_json, total_entries, total_size_bytes, highest_mutation_position FROM wmp_snapshot_contents WHERE content_id = ?', [contentId]);
|
|
239
|
+
if (!row)
|
|
240
|
+
return err('NOT_FOUND', `Snapshot content ${contentId} not found`, '§6.2');
|
|
241
|
+
return ok({
|
|
242
|
+
contentId: row.content_id,
|
|
243
|
+
namespaceState: row.namespace_state,
|
|
244
|
+
entries: row.entries_json ? JSON.parse(row.entries_json) : null,
|
|
245
|
+
totalEntries: row.total_entries,
|
|
246
|
+
totalSizeBytes: row.total_size_bytes,
|
|
247
|
+
highestMutationPosition: row.highest_mutation_position,
|
|
248
|
+
});
|
|
249
|
+
},
|
|
250
|
+
listBoundaryEvents(conn, taskId) {
|
|
251
|
+
const rows = conn.query('SELECT event_id, task_id, mission_id, trigger, snapshot_content_id, linked_emission_id, timestamp FROM wmp_boundary_events WHERE task_id = ? ORDER BY timestamp ASC', [taskId]);
|
|
252
|
+
return ok(rows.map(r => ({
|
|
253
|
+
eventId: r.event_id,
|
|
254
|
+
taskId: r.task_id,
|
|
255
|
+
missionId: r.mission_id,
|
|
256
|
+
trigger: r.trigger,
|
|
257
|
+
snapshotContentId: r.snapshot_content_id,
|
|
258
|
+
linkedEmissionId: r.linked_emission_id,
|
|
259
|
+
timestamp: r.timestamp,
|
|
260
|
+
})));
|
|
261
|
+
},
|
|
262
|
+
});
|
|
263
|
+
}
|
|
264
|
+
// ============================================================================
|
|
265
|
+
// Mutation Counter Implementation
|
|
266
|
+
// ============================================================================
|
|
267
|
+
export function createMutationCounter() {
|
|
268
|
+
return Object.freeze({
|
|
269
|
+
next(conn, taskId) {
|
|
270
|
+
conn.run('INSERT INTO wmp_mutation_counters (task_id, counter) VALUES (?, 1) ON CONFLICT(task_id) DO UPDATE SET counter = counter + 1', [taskId]);
|
|
271
|
+
const row = conn.get('SELECT counter FROM wmp_mutation_counters WHERE task_id = ?', [taskId]);
|
|
272
|
+
return ok(row.counter);
|
|
273
|
+
},
|
|
274
|
+
current(conn, taskId) {
|
|
275
|
+
const row = conn.get('SELECT counter FROM wmp_mutation_counters WHERE task_id = ?', [taskId]);
|
|
276
|
+
return ok(row?.counter ?? null);
|
|
277
|
+
},
|
|
278
|
+
});
|
|
279
|
+
}
|
|
280
|
+
// ============================================================================
|
|
281
|
+
// Boundary Capture Coordinator Implementation
|
|
282
|
+
// ============================================================================
|
|
283
|
+
export function createBoundaryCaptureCoordinator(entryStore, boundaryStore, mutationCounter, eventSink = WMP_NULL_EVENT_SINK, time) {
|
|
284
|
+
const clock = time ?? { nowISO: () => new Date().toISOString(), nowMs: () => Date.now() };
|
|
285
|
+
function captureSnapshot(conn, taskId) {
|
|
286
|
+
const nsResult = entryStore.getNamespaceState(conn, taskId);
|
|
287
|
+
if (!nsResult.ok)
|
|
288
|
+
return nsResult;
|
|
289
|
+
const namespaceState = nsResult.value;
|
|
290
|
+
const counterResult = mutationCounter.current(conn, taskId);
|
|
291
|
+
if (!counterResult.ok)
|
|
292
|
+
return counterResult;
|
|
293
|
+
const highestMutationPosition = counterResult.value;
|
|
294
|
+
// Attempt deduplication
|
|
295
|
+
const existingResult = boundaryStore.findMatchingContent(conn, taskId, namespaceState, highestMutationPosition);
|
|
296
|
+
if (existingResult.ok && existingResult.value) {
|
|
297
|
+
return ok(existingResult.value);
|
|
298
|
+
}
|
|
299
|
+
let entries = null;
|
|
300
|
+
let totalEntries = 0;
|
|
301
|
+
let totalSizeBytes = 0;
|
|
302
|
+
if (namespaceState === 'never_initialized') {
|
|
303
|
+
entries = null;
|
|
304
|
+
}
|
|
305
|
+
else if (namespaceState === 'initialized_empty') {
|
|
306
|
+
entries = [];
|
|
307
|
+
}
|
|
308
|
+
else {
|
|
309
|
+
const listResult = entryStore.listAll(conn, taskId);
|
|
310
|
+
if (!listResult.ok)
|
|
311
|
+
return listResult;
|
|
312
|
+
entries = listResult.value.map(e => ({
|
|
313
|
+
key: e.key,
|
|
314
|
+
value: e.value,
|
|
315
|
+
sizeBytes: e.sizeBytes,
|
|
316
|
+
createdAt: e.createdAt,
|
|
317
|
+
updatedAt: e.updatedAt,
|
|
318
|
+
mutationPosition: e.mutationPosition,
|
|
319
|
+
}));
|
|
320
|
+
totalEntries = entries.length;
|
|
321
|
+
totalSizeBytes = entries.reduce((sum, e) => sum + e.sizeBytes, 0);
|
|
322
|
+
}
|
|
323
|
+
// Store taskId in snapshot content for dedup queries
|
|
324
|
+
const contentInput = {
|
|
325
|
+
taskId,
|
|
326
|
+
namespaceState,
|
|
327
|
+
entries,
|
|
328
|
+
totalEntries,
|
|
329
|
+
totalSizeBytes,
|
|
330
|
+
highestMutationPosition,
|
|
331
|
+
};
|
|
332
|
+
return boundaryStore.createSnapshotContent(conn, contentInput);
|
|
333
|
+
}
|
|
334
|
+
function createEvent(conn, taskId, missionId, trigger, linkedEmissionId) {
|
|
335
|
+
const snapshotResult = captureSnapshot(conn, taskId);
|
|
336
|
+
if (!snapshotResult.ok) {
|
|
337
|
+
// Emit boundary capture failure event (FM-WMP-02)
|
|
338
|
+
try {
|
|
339
|
+
eventSink.emit(WMP_EVENTS.BOUNDARY_CAPTURE_FAILED, taskId, {
|
|
340
|
+
trigger,
|
|
341
|
+
missionId,
|
|
342
|
+
reason: snapshotResult.error.message,
|
|
343
|
+
code: snapshotResult.error.code,
|
|
344
|
+
});
|
|
345
|
+
}
|
|
346
|
+
catch { /* event emission failure is non-fatal per I-48 */ }
|
|
347
|
+
return snapshotResult;
|
|
348
|
+
}
|
|
349
|
+
const snapshot = snapshotResult.value;
|
|
350
|
+
const eventResult = boundaryStore.createBoundaryEvent(conn, {
|
|
351
|
+
taskId,
|
|
352
|
+
missionId,
|
|
353
|
+
trigger,
|
|
354
|
+
snapshotContentId: snapshot.contentId,
|
|
355
|
+
linkedEmissionId,
|
|
356
|
+
timestamp: monotonicNowISO(clock),
|
|
357
|
+
});
|
|
358
|
+
if (eventResult.ok) {
|
|
359
|
+
// Emit boundary captured event (§6.2)
|
|
360
|
+
try {
|
|
361
|
+
eventSink.emit(WMP_EVENTS.BOUNDARY_CAPTURED, taskId, {
|
|
362
|
+
trigger,
|
|
363
|
+
missionId,
|
|
364
|
+
eventId: eventResult.value.eventId,
|
|
365
|
+
snapshotContentId: snapshot.contentId,
|
|
366
|
+
entryCount: snapshot.totalEntries,
|
|
367
|
+
});
|
|
368
|
+
}
|
|
369
|
+
catch { /* event emission failure is non-fatal per I-48 */ }
|
|
370
|
+
}
|
|
371
|
+
else {
|
|
372
|
+
// Emit boundary capture failure event (FM-WMP-02)
|
|
373
|
+
try {
|
|
374
|
+
eventSink.emit(WMP_EVENTS.BOUNDARY_CAPTURE_FAILED, taskId, {
|
|
375
|
+
trigger,
|
|
376
|
+
missionId,
|
|
377
|
+
reason: eventResult.error.message,
|
|
378
|
+
code: eventResult.error.code,
|
|
379
|
+
});
|
|
380
|
+
}
|
|
381
|
+
catch { /* event emission failure is non-fatal per I-48 */ }
|
|
382
|
+
}
|
|
383
|
+
return eventResult;
|
|
384
|
+
}
|
|
385
|
+
return Object.freeze({
|
|
386
|
+
captureAtCheckpoint(conn, taskId, missionId) {
|
|
387
|
+
return createEvent(conn, taskId, missionId, 'checkpoint', null);
|
|
388
|
+
},
|
|
389
|
+
captureAtTerminal(conn, taskId, missionId, terminalState) {
|
|
390
|
+
return conn.transaction(() => {
|
|
391
|
+
// 1. Capture snapshot (pre-discard state) — WMP-I7 atomicity
|
|
392
|
+
const eventResult = createEvent(conn, taskId, missionId, 'task_terminal', null);
|
|
393
|
+
if (!eventResult.ok)
|
|
394
|
+
return eventResult;
|
|
395
|
+
// 2. Physical reclamation — delete all entries (AL-WMP-07, DC-WMP-209)
|
|
396
|
+
const discardResult = entryStore.discardAll(conn, taskId);
|
|
397
|
+
// 3. Emit terminal discard event (§6.4 Trigger 2)
|
|
398
|
+
try {
|
|
399
|
+
const discarded = discardResult.ok ? discardResult.value : { discardedCount: 0, freedBytes: 0 };
|
|
400
|
+
eventSink.emit(WMP_EVENTS.TERMINAL_DISCARD, taskId, {
|
|
401
|
+
missionId,
|
|
402
|
+
terminalState,
|
|
403
|
+
discardedCount: discarded.discardedCount,
|
|
404
|
+
freedBytes: discarded.freedBytes,
|
|
405
|
+
});
|
|
406
|
+
}
|
|
407
|
+
catch { /* event emission failure is non-fatal per I-48 */ }
|
|
408
|
+
// 4. Terminal state transition — update core_tasks
|
|
409
|
+
// F-WMP-BB-01: Use actual terminal state, never hard-code 'COMPLETED'
|
|
410
|
+
const now = monotonicNowISO(clock);
|
|
411
|
+
conn.run('UPDATE core_tasks SET state = ?, completed_at = ?, updated_at = ? WHERE id = ?', [terminalState, now, now, taskId]);
|
|
412
|
+
return eventResult;
|
|
413
|
+
});
|
|
414
|
+
},
|
|
415
|
+
captureAtMissionTransition(conn, taskId, missionId) {
|
|
416
|
+
return createEvent(conn, taskId, missionId, 'mission_transition', null);
|
|
417
|
+
},
|
|
418
|
+
capturePreEmission(conn, taskId, missionId, emissionId) {
|
|
419
|
+
return createEvent(conn, taskId, missionId, 'pre_irreversible_emission', emissionId);
|
|
420
|
+
},
|
|
421
|
+
captureAtSuspension(conn, taskId, missionId) {
|
|
422
|
+
return createEvent(conn, taskId, missionId, 'suspension', null);
|
|
423
|
+
},
|
|
424
|
+
});
|
|
425
|
+
}
|
|
426
|
+
// ============================================================================
|
|
427
|
+
// SC-14 Write Handler Implementation
|
|
428
|
+
// ============================================================================
|
|
429
|
+
export function createWriteHandler(entryStore, _mutationCounter, capacityPolicy, eventSink = WMP_NULL_EVENT_SINK) {
|
|
430
|
+
return Object.freeze({
|
|
431
|
+
execute(conn, callerTaskId, callerAgentId, input) {
|
|
432
|
+
_connRef = conn;
|
|
433
|
+
// 1. Scope check: callerTaskId must match input.taskId
|
|
434
|
+
if (callerTaskId !== input.taskId) {
|
|
435
|
+
return err('TASK_SCOPE_VIOLATION', 'Caller task does not match target task', 'WMP-I1');
|
|
436
|
+
}
|
|
437
|
+
// 2. Task existence and state check
|
|
438
|
+
const task = lookupTask(conn, input.taskId);
|
|
439
|
+
if (!task)
|
|
440
|
+
return err('TASK_NOT_FOUND', `Task ${input.taskId} not found`, '§5.2');
|
|
441
|
+
if (TERMINAL_STATES.has(task.state)) {
|
|
442
|
+
return err('TASK_TERMINATED', `Task ${input.taskId} has reached terminal state`, '§5.2');
|
|
443
|
+
}
|
|
444
|
+
if (!EXECUTABLE_STATES.has(task.state)) {
|
|
445
|
+
return err('TASK_NOT_EXECUTABLE', `Task ${input.taskId} is not in an executable state`, '§5.2');
|
|
446
|
+
}
|
|
447
|
+
// 2b. WMP-internal suspension check (DC-WMP-212)
|
|
448
|
+
const suspendedRow = conn.get('SELECT suspended FROM wmp_mutation_counters WHERE task_id = ?', [input.taskId]);
|
|
449
|
+
if (suspendedRow && suspendedRow.suspended === 1) {
|
|
450
|
+
return err('TASK_NOT_EXECUTABLE', `Task ${input.taskId} is suspended`, 'DC-WMP-212');
|
|
451
|
+
}
|
|
452
|
+
// 3. Agent authorization check
|
|
453
|
+
if (callerAgentId !== task.assigned_agent) {
|
|
454
|
+
return err('UNAUTHORIZED', `Agent ${callerAgentId} is not authorized for task ${input.taskId}`, 'I-13');
|
|
455
|
+
}
|
|
456
|
+
// 4. Key validation (I-46)
|
|
457
|
+
const keyValidation = validateKey(input.key);
|
|
458
|
+
if (!keyValidation.valid) {
|
|
459
|
+
return err('WORKING_MEMORY_KEY_INVALID', keyValidation.reason, '§5.2');
|
|
460
|
+
}
|
|
461
|
+
// 4b. Value validation (DC-WMP-111, F-WMP-BB-04)
|
|
462
|
+
if (input.value.includes('\0')) {
|
|
463
|
+
return err('WORKING_MEMORY_VALUE_INVALID', 'Value contains null bytes', '§5.2');
|
|
464
|
+
}
|
|
465
|
+
// 5. Compute byte size
|
|
466
|
+
const sizeBytes = utf8ByteLength(input.value);
|
|
467
|
+
// 6. Per-entry byte limit check
|
|
468
|
+
if (sizeBytes > capacityPolicy.maxBytesPerEntry) {
|
|
469
|
+
return err('WORKING_MEMORY_CAPACITY_EXCEEDED', `Value size ${sizeBytes} exceeds per-entry limit ${capacityPolicy.maxBytesPerEntry}`, '§8.1');
|
|
470
|
+
}
|
|
471
|
+
// 7. Capacity check (entry count and total bytes)
|
|
472
|
+
const usageResult = entryStore.getUsage(conn, input.taskId);
|
|
473
|
+
if (!usageResult.ok)
|
|
474
|
+
return usageResult;
|
|
475
|
+
const usage = usageResult.value;
|
|
476
|
+
// Check if this is a replacement (existing key)
|
|
477
|
+
const existingEntry = conn.get('SELECT size_bytes FROM working_memory_entries WHERE task_id = ? AND key = ?', [input.taskId, input.key]);
|
|
478
|
+
const isReplacement = !!existingEntry;
|
|
479
|
+
const effectiveEntryCount = isReplacement ? usage.entryCount : usage.entryCount + 1;
|
|
480
|
+
const effectiveTotalBytes = isReplacement
|
|
481
|
+
? usage.totalBytes - existingEntry.size_bytes + sizeBytes
|
|
482
|
+
: usage.totalBytes + sizeBytes;
|
|
483
|
+
if (effectiveEntryCount > capacityPolicy.maxEntries) {
|
|
484
|
+
return errWithExtras('WORKING_MEMORY_CAPACITY_EXCEEDED', `Entry count ${effectiveEntryCount} would exceed limit ${capacityPolicy.maxEntries}`, '§8.1', { currentEntryCount: usage.entryCount, maxEntryCount: capacityPolicy.maxEntries });
|
|
485
|
+
}
|
|
486
|
+
if (effectiveTotalBytes > capacityPolicy.maxTotalBytes) {
|
|
487
|
+
return errWithExtras('WORKING_MEMORY_CAPACITY_EXCEEDED', `Total bytes ${effectiveTotalBytes} would exceed limit ${capacityPolicy.maxTotalBytes}`, '§8.1', { currentEntryCount: usage.entryCount, maxEntryCount: capacityPolicy.maxEntries, currentSizeBytes: usage.totalBytes, maxSizeBytes: capacityPolicy.maxTotalBytes, requestedSizeBytes: sizeBytes });
|
|
488
|
+
}
|
|
489
|
+
// 8. Upsert the entry (includes mutation counter increment)
|
|
490
|
+
const upsertResult = entryStore.upsert(conn, input.taskId, input.key, input.value, sizeBytes);
|
|
491
|
+
if (!upsertResult.ok)
|
|
492
|
+
return upsertResult;
|
|
493
|
+
const entry = upsertResult.value;
|
|
494
|
+
// 9. Emit event (DC-WMP-X15, Binding 14 — transaction-coupled)
|
|
495
|
+
// Per I-48: trace failures do not roll back the write
|
|
496
|
+
try {
|
|
497
|
+
eventSink.emit(WMP_EVENTS.ENTRY_WRITTEN, input.taskId, {
|
|
498
|
+
key: entry.key,
|
|
499
|
+
sizeBytes: entry.sizeBytes,
|
|
500
|
+
created: !isReplacement,
|
|
501
|
+
mutationPosition: entry.mutationPosition,
|
|
502
|
+
});
|
|
503
|
+
}
|
|
504
|
+
catch { /* trace emission failure is non-fatal per I-48 */ }
|
|
505
|
+
// 10. Capacity warning (FM-WMP-03 monitoring) — after successful write
|
|
506
|
+
// Emit when usage exceeds 80% of either entry count or total byte limit
|
|
507
|
+
const CAPACITY_WARNING_THRESHOLD = 0.8;
|
|
508
|
+
if (effectiveEntryCount > capacityPolicy.maxEntries * CAPACITY_WARNING_THRESHOLD ||
|
|
509
|
+
effectiveTotalBytes > capacityPolicy.maxTotalBytes * CAPACITY_WARNING_THRESHOLD) {
|
|
510
|
+
try {
|
|
511
|
+
eventSink.emit(WMP_EVENTS.CAPACITY_WARNING, input.taskId, {
|
|
512
|
+
currentEntryCount: effectiveEntryCount,
|
|
513
|
+
maxEntries: capacityPolicy.maxEntries,
|
|
514
|
+
currentTotalBytes: effectiveTotalBytes,
|
|
515
|
+
maxTotalBytes: capacityPolicy.maxTotalBytes,
|
|
516
|
+
entryPct: effectiveEntryCount / capacityPolicy.maxEntries,
|
|
517
|
+
bytesPct: effectiveTotalBytes / capacityPolicy.maxTotalBytes,
|
|
518
|
+
});
|
|
519
|
+
}
|
|
520
|
+
catch { /* event emission failure is non-fatal per I-48 */ }
|
|
521
|
+
}
|
|
522
|
+
return ok({
|
|
523
|
+
key: entry.key,
|
|
524
|
+
sizeBytes: entry.sizeBytes,
|
|
525
|
+
created: !isReplacement,
|
|
526
|
+
mutationPosition: entry.mutationPosition,
|
|
527
|
+
createdAt: entry.createdAt,
|
|
528
|
+
updatedAt: entry.updatedAt,
|
|
529
|
+
});
|
|
530
|
+
},
|
|
531
|
+
});
|
|
532
|
+
}
|
|
533
|
+
// ============================================================================
|
|
534
|
+
// SC-15 Read Handler Implementation
|
|
535
|
+
// ============================================================================
|
|
536
|
+
export function createReadHandler(entryStore) {
|
|
537
|
+
return Object.freeze({
|
|
538
|
+
execute(conn, callerTaskId, callerAgentId, input) {
|
|
539
|
+
_connRef = conn;
|
|
540
|
+
// 1. Scope check
|
|
541
|
+
if (callerTaskId !== input.taskId) {
|
|
542
|
+
return err('TASK_SCOPE_VIOLATION', 'Caller task does not match target task', 'WMP-I1');
|
|
543
|
+
}
|
|
544
|
+
// 2. Task existence and state check
|
|
545
|
+
const task = lookupTask(conn, input.taskId);
|
|
546
|
+
if (!task)
|
|
547
|
+
return err('TASK_NOT_FOUND', `Task ${input.taskId} not found`, '§5.3');
|
|
548
|
+
if (TERMINAL_STATES.has(task.state)) {
|
|
549
|
+
return err('TASK_TERMINATED', `Task ${input.taskId} has reached terminal state`, '§5.3');
|
|
550
|
+
}
|
|
551
|
+
// SC-15 intentionally omits TASK_NOT_EXECUTABLE — reads are always safe (AMB-WMP-05)
|
|
552
|
+
// 3. Agent authorization check
|
|
553
|
+
if (callerAgentId !== task.assigned_agent) {
|
|
554
|
+
return err('UNAUTHORIZED', `Agent ${callerAgentId} is not authorized for task ${input.taskId}`, 'I-13');
|
|
555
|
+
}
|
|
556
|
+
// 4. Read entry or list all
|
|
557
|
+
if (input.key !== null) {
|
|
558
|
+
// Specific key read
|
|
559
|
+
const entryResult = entryStore.get(conn, input.taskId, input.key);
|
|
560
|
+
if (!entryResult.ok)
|
|
561
|
+
return entryResult;
|
|
562
|
+
const e = entryResult.value;
|
|
563
|
+
return ok({
|
|
564
|
+
key: e.key,
|
|
565
|
+
value: e.value,
|
|
566
|
+
sizeBytes: e.sizeBytes,
|
|
567
|
+
createdAt: e.createdAt,
|
|
568
|
+
updatedAt: e.updatedAt,
|
|
569
|
+
});
|
|
570
|
+
}
|
|
571
|
+
// List all entries
|
|
572
|
+
const listResult = entryStore.listAll(conn, input.taskId);
|
|
573
|
+
if (!listResult.ok)
|
|
574
|
+
return listResult;
|
|
575
|
+
const entries = listResult.value;
|
|
576
|
+
const totalSizeBytes = entries.reduce((sum, e) => sum + e.sizeBytes, 0);
|
|
577
|
+
return ok({
|
|
578
|
+
entries: entries.map(e => ({
|
|
579
|
+
key: e.key,
|
|
580
|
+
value: e.value,
|
|
581
|
+
sizeBytes: e.sizeBytes,
|
|
582
|
+
createdAt: e.createdAt,
|
|
583
|
+
updatedAt: e.updatedAt,
|
|
584
|
+
})),
|
|
585
|
+
totalEntries: entries.length,
|
|
586
|
+
totalSizeBytes,
|
|
587
|
+
});
|
|
588
|
+
},
|
|
589
|
+
});
|
|
590
|
+
}
|
|
591
|
+
// ============================================================================
|
|
592
|
+
// SC-16 Discard Handler Implementation
|
|
593
|
+
// ============================================================================
|
|
594
|
+
export function createDiscardHandler(entryStore, mutationCounter, eventSink = WMP_NULL_EVENT_SINK) {
|
|
595
|
+
return Object.freeze({
|
|
596
|
+
execute(conn, callerTaskId, callerAgentId, input) {
|
|
597
|
+
_connRef = conn;
|
|
598
|
+
// 1. Scope check
|
|
599
|
+
if (callerTaskId !== input.taskId) {
|
|
600
|
+
return err('TASK_SCOPE_VIOLATION', 'Caller task does not match target task', 'WMP-I1');
|
|
601
|
+
}
|
|
602
|
+
// 2. Task existence and state check
|
|
603
|
+
const task = lookupTask(conn, input.taskId);
|
|
604
|
+
if (!task)
|
|
605
|
+
return err('TASK_NOT_FOUND', `Task ${input.taskId} not found`, '§5.4');
|
|
606
|
+
if (TERMINAL_STATES.has(task.state)) {
|
|
607
|
+
return err('TASK_TERMINATED', `Task ${input.taskId} has reached terminal state`, '§5.4');
|
|
608
|
+
}
|
|
609
|
+
if (!EXECUTABLE_STATES.has(task.state)) {
|
|
610
|
+
return err('TASK_NOT_EXECUTABLE', `Task ${input.taskId} is not in an executable state`, '§5.4');
|
|
611
|
+
}
|
|
612
|
+
// 2b. WMP-internal suspension check (DC-WMP-212)
|
|
613
|
+
const suspendedRow = conn.get('SELECT suspended FROM wmp_mutation_counters WHERE task_id = ?', [input.taskId]);
|
|
614
|
+
if (suspendedRow && suspendedRow.suspended === 1) {
|
|
615
|
+
return err('TASK_NOT_EXECUTABLE', `Task ${input.taskId} is suspended`, 'DC-WMP-212');
|
|
616
|
+
}
|
|
617
|
+
// 3. Agent authorization check
|
|
618
|
+
if (callerAgentId !== task.assigned_agent) {
|
|
619
|
+
return err('UNAUTHORIZED', `Agent ${callerAgentId} is not authorized for task ${input.taskId}`, 'I-13');
|
|
620
|
+
}
|
|
621
|
+
// 5. Discard
|
|
622
|
+
if (input.key !== null) {
|
|
623
|
+
// Specific key discard — advance counter AFTER success (WMP-I5: failed ops get no position, BPB-001)
|
|
624
|
+
const discardResult = entryStore.discard(conn, input.taskId, input.key);
|
|
625
|
+
if (!discardResult.ok)
|
|
626
|
+
return discardResult;
|
|
627
|
+
// 4a. Advance mutation counter only after single-key discard succeeds
|
|
628
|
+
const counterResult = mutationCounter.next(conn, input.taskId);
|
|
629
|
+
if (!counterResult.ok)
|
|
630
|
+
return counterResult;
|
|
631
|
+
const mutationPosition = counterResult.value;
|
|
632
|
+
// 6. Emit event (DC-WMP-X15, Binding 14 — transaction-coupled)
|
|
633
|
+
try {
|
|
634
|
+
eventSink.emit(WMP_EVENTS.ENTRY_DISCARDED, input.taskId, {
|
|
635
|
+
key: input.key,
|
|
636
|
+
freedBytes: discardResult.value.freedBytes,
|
|
637
|
+
mutationPosition,
|
|
638
|
+
});
|
|
639
|
+
}
|
|
640
|
+
catch { /* trace emission failure is non-fatal per I-48 */ }
|
|
641
|
+
return ok({
|
|
642
|
+
discardedCount: 1,
|
|
643
|
+
freedBytes: discardResult.value.freedBytes,
|
|
644
|
+
mutationPosition,
|
|
645
|
+
});
|
|
646
|
+
}
|
|
647
|
+
// Discard all — advance counter BEFORE discard (AMB-WMP-06: always a visible mutation)
|
|
648
|
+
const counterResult = mutationCounter.next(conn, input.taskId);
|
|
649
|
+
if (!counterResult.ok)
|
|
650
|
+
return counterResult;
|
|
651
|
+
const mutationPosition = counterResult.value;
|
|
652
|
+
const discardAllResult = entryStore.discardAll(conn, input.taskId);
|
|
653
|
+
if (!discardAllResult.ok)
|
|
654
|
+
return discardAllResult;
|
|
655
|
+
// Emit event for discard-all (DC-WMP-X15)
|
|
656
|
+
try {
|
|
657
|
+
eventSink.emit(WMP_EVENTS.ENTRY_DISCARDED, input.taskId, {
|
|
658
|
+
key: null,
|
|
659
|
+
freedBytes: discardAllResult.value.freedBytes,
|
|
660
|
+
discardedCount: discardAllResult.value.discardedCount,
|
|
661
|
+
mutationPosition,
|
|
662
|
+
});
|
|
663
|
+
}
|
|
664
|
+
catch { /* trace emission failure is non-fatal per I-48 */ }
|
|
665
|
+
return ok({
|
|
666
|
+
discardedCount: discardAllResult.value.discardedCount,
|
|
667
|
+
freedBytes: discardAllResult.value.freedBytes,
|
|
668
|
+
mutationPosition,
|
|
669
|
+
});
|
|
670
|
+
},
|
|
671
|
+
});
|
|
672
|
+
}
|
|
673
|
+
// ============================================================================
|
|
674
|
+
// Task Lifecycle Handler Implementation
|
|
675
|
+
// ============================================================================
|
|
676
|
+
export function createTaskLifecycleHandler(coordinator, entryStore) {
|
|
677
|
+
return Object.freeze({
|
|
678
|
+
onTaskTerminal(conn, taskId, missionId, terminalState) {
|
|
679
|
+
return coordinator.captureAtTerminal(conn, taskId, missionId, terminalState);
|
|
680
|
+
},
|
|
681
|
+
onTaskSuspended(conn, taskId, missionId) {
|
|
682
|
+
// 1. Set suspension flag
|
|
683
|
+
conn.run('INSERT INTO wmp_mutation_counters (task_id, counter, suspended) VALUES (?, 0, 1) ON CONFLICT(task_id) DO UPDATE SET suspended = 1', [taskId]);
|
|
684
|
+
// 2. Capture boundary snapshot at suspension (DC-WMP-213)
|
|
685
|
+
return coordinator.captureAtSuspension(conn, taskId, missionId);
|
|
686
|
+
},
|
|
687
|
+
onTaskResumed(conn, taskId, _missionId) {
|
|
688
|
+
// 1. Clear suspension flag
|
|
689
|
+
conn.run('UPDATE wmp_mutation_counters SET suspended = 0 WHERE task_id = ?', [taskId]);
|
|
690
|
+
// 2. Verify namespace integrity (DC-WMP-214)
|
|
691
|
+
// Entries survive suspension because writes/discards are rejected during suspension.
|
|
692
|
+
// Verify by confirming entries are readable.
|
|
693
|
+
const listResult = entryStore.listAll(conn, taskId);
|
|
694
|
+
if (!listResult.ok)
|
|
695
|
+
return listResult;
|
|
696
|
+
return ok(undefined);
|
|
697
|
+
},
|
|
698
|
+
});
|
|
699
|
+
}
|
|
700
|
+
// ============================================================================
|
|
701
|
+
// Internal Reader Implementation (for CGP P2 — WmpInternalReader)
|
|
702
|
+
// ============================================================================
|
|
703
|
+
export function createInternalReader() {
|
|
704
|
+
return Object.freeze({
|
|
705
|
+
readLiveEntries(taskId) {
|
|
706
|
+
const conn = _connRef;
|
|
707
|
+
if (!conn)
|
|
708
|
+
return err('NO_CONNECTION', 'No database connection available', '§9.2');
|
|
709
|
+
const rows = conn.query('SELECT key, value, size_bytes, created_at, updated_at, mutation_position FROM working_memory_entries WHERE task_id = ? ORDER BY mutation_position ASC', [taskId]);
|
|
710
|
+
return ok(rows.map(r => ({
|
|
711
|
+
key: r.key,
|
|
712
|
+
value: r.value,
|
|
713
|
+
sizeBytes: r.size_bytes,
|
|
714
|
+
createdAt: r.created_at,
|
|
715
|
+
updatedAt: r.updated_at,
|
|
716
|
+
mutationPosition: r.mutation_position,
|
|
717
|
+
})));
|
|
718
|
+
},
|
|
719
|
+
});
|
|
720
|
+
}
|
|
721
|
+
// ============================================================================
|
|
722
|
+
// Pre-Emission Capture Implementation (for CCP — WmpPreEmissionCapture)
|
|
723
|
+
// ============================================================================
|
|
724
|
+
export function createPreEmissionCaptureImpl(entryStore, coordinator) {
|
|
725
|
+
return Object.freeze({
|
|
726
|
+
capture(conn, taskId) {
|
|
727
|
+
// Check if WMP is initialized for this task
|
|
728
|
+
const initResult = entryStore.isInitialized(conn, taskId);
|
|
729
|
+
if (!initResult.ok)
|
|
730
|
+
return initResult;
|
|
731
|
+
if (!initResult.value) {
|
|
732
|
+
// Never-initialized — not_applicable (no snapshot needed)
|
|
733
|
+
return ok({ captureId: null, sourcingStatus: 'not_applicable' });
|
|
734
|
+
}
|
|
735
|
+
// Initialized — capture pre-emission snapshot
|
|
736
|
+
// Look up the mission_id from core_tasks
|
|
737
|
+
const taskRow = conn.get('SELECT mission_id FROM core_tasks WHERE id = ?', [taskId]);
|
|
738
|
+
if (!taskRow) {
|
|
739
|
+
// Debt 2: Missing task row means identity cannot be established — do not fabricate empty missionId
|
|
740
|
+
return { ok: false, error: { code: 'NOT_FOUND', message: `Task ${taskId} not found in core_tasks — cannot determine mission for WMP capture`, spec: 'S7' } };
|
|
741
|
+
}
|
|
742
|
+
const actualMissionId = taskRow.mission_id;
|
|
743
|
+
const emissionId = newId();
|
|
744
|
+
const captureResult = coordinator.capturePreEmission(conn, taskId, actualMissionId, emissionId);
|
|
745
|
+
if (!captureResult.ok)
|
|
746
|
+
return captureResult;
|
|
747
|
+
return ok({
|
|
748
|
+
captureId: captureResult.value.eventId,
|
|
749
|
+
sourcingStatus: 'not_verified',
|
|
750
|
+
});
|
|
751
|
+
},
|
|
752
|
+
});
|
|
753
|
+
}
|
|
754
|
+
//# sourceMappingURL=wmp_stores.js.map
|