@ornexus/neocortex 4.60.16
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/LICENSE +56 -0
- package/LICENSE-COMMERCIAL.md +70 -0
- package/README.md +58 -0
- package/dist/sbom.cdx.json +11159 -0
- package/docs/install/coderabbit-manual-setup.md +86 -0
- package/docs/install/installer-diagnostics.md +107 -0
- package/docs/install/linux-global-install.md +97 -0
- package/install.js +572 -0
- package/install.ps1 +2214 -0
- package/install.sh +2013 -0
- package/package.json +132 -0
- package/packages/client/dist/adapters/adapter-registry.d.ts +61 -0
- package/packages/client/dist/adapters/adapter-registry.js +1 -0
- package/packages/client/dist/adapters/antigravity-adapter.d.ts +18 -0
- package/packages/client/dist/adapters/antigravity-adapter.js +2 -0
- package/packages/client/dist/adapters/claude-code-adapter.d.ts +19 -0
- package/packages/client/dist/adapters/claude-code-adapter.js +3 -0
- package/packages/client/dist/adapters/codex-adapter.d.ts +19 -0
- package/packages/client/dist/adapters/codex-adapter.js +2 -0
- package/packages/client/dist/adapters/cursor-adapter.d.ts +19 -0
- package/packages/client/dist/adapters/cursor-adapter.js +4 -0
- package/packages/client/dist/adapters/gemini-adapter.d.ts +18 -0
- package/packages/client/dist/adapters/gemini-adapter.js +2 -0
- package/packages/client/dist/adapters/index.d.ts +19 -0
- package/packages/client/dist/adapters/index.js +1 -0
- package/packages/client/dist/adapters/platform-detector.d.ts +48 -0
- package/packages/client/dist/adapters/platform-detector.js +1 -0
- package/packages/client/dist/adapters/target-adapter.d.ts +70 -0
- package/packages/client/dist/adapters/target-adapter.js +0 -0
- package/packages/client/dist/adapters/vscode-adapter.d.ts +19 -0
- package/packages/client/dist/adapters/vscode-adapter.js +2 -0
- package/packages/client/dist/agent/refresh-stubs.d.ts +90 -0
- package/packages/client/dist/agent/refresh-stubs.js +2 -0
- package/packages/client/dist/agent/update-agent-yaml.d.ts +26 -0
- package/packages/client/dist/agent/update-agent-yaml.js +1 -0
- package/packages/client/dist/agent/update-description.d.ts +45 -0
- package/packages/client/dist/agent/update-description.js +1 -0
- package/packages/client/dist/cache/crypto-utils.d.ts +30 -0
- package/packages/client/dist/cache/crypto-utils.js +1 -0
- package/packages/client/dist/cache/encrypted-cache.d.ts +30 -0
- package/packages/client/dist/cache/encrypted-cache.js +1 -0
- package/packages/client/dist/cache/in-memory-asset-cache.d.ts +62 -0
- package/packages/client/dist/cache/in-memory-asset-cache.js +1 -0
- package/packages/client/dist/cache/index.d.ts +13 -0
- package/packages/client/dist/cache/index.js +1 -0
- package/packages/client/dist/cache/protected-pi-boundary.d.ts +19 -0
- package/packages/client/dist/cache/protected-pi-boundary.js +1 -0
- package/packages/client/dist/checkpoint/checkpoint-client-reader.d.ts +45 -0
- package/packages/client/dist/checkpoint/checkpoint-client-reader.js +2 -0
- package/packages/client/dist/checkpoint/index.d.ts +12 -0
- package/packages/client/dist/checkpoint/index.js +1 -0
- package/packages/client/dist/checkpoint/shared-checkpoint-types.d.ts +85 -0
- package/packages/client/dist/checkpoint/shared-checkpoint-types.js +1 -0
- package/packages/client/dist/cli.d.ts +14 -0
- package/packages/client/dist/cli.js +81 -0
- package/packages/client/dist/commands/activate.d.ts +55 -0
- package/packages/client/dist/commands/activate.js +8 -0
- package/packages/client/dist/commands/cache-status.d.ts +39 -0
- package/packages/client/dist/commands/cache-status.js +2 -0
- package/packages/client/dist/commands/invoke.d.ts +546 -0
- package/packages/client/dist/commands/invoke.js +140 -0
- package/packages/client/dist/commands/refresh-memory.d.ts +11 -0
- package/packages/client/dist/commands/refresh-memory.js +1 -0
- package/packages/client/dist/config/resolver-selection.d.ts +40 -0
- package/packages/client/dist/config/resolver-selection.js +1 -0
- package/packages/client/dist/config/secure-config.d.ts +78 -0
- package/packages/client/dist/config/secure-config.js +12 -0
- package/packages/client/dist/constants.d.ts +25 -0
- package/packages/client/dist/constants.js +1 -0
- package/packages/client/dist/context/context-collector.d.ts +28 -0
- package/packages/client/dist/context/context-collector.js +2 -0
- package/packages/client/dist/context/context-sanitizer.d.ts +28 -0
- package/packages/client/dist/context/context-sanitizer.js +1 -0
- package/packages/client/dist/continuity/autonomous-governance.d.ts +84 -0
- package/packages/client/dist/continuity/autonomous-governance.js +1 -0
- package/packages/client/dist/continuity/continuity-client-state-store.d.ts +302 -0
- package/packages/client/dist/continuity/continuity-client-state-store.js +1 -0
- package/packages/client/dist/continuity/invoke-hooks.d.ts +19 -0
- package/packages/client/dist/continuity/invoke-hooks.js +1 -0
- package/packages/client/dist/continuity/migrations/001-initial-schema.d.ts +11 -0
- package/packages/client/dist/continuity/migrations/001-initial-schema.js +263 -0
- package/packages/client/dist/continuity/migrations/002-processing-output-summary-indexes.d.ts +11 -0
- package/packages/client/dist/continuity/migrations/002-processing-output-summary-indexes.js +7 -0
- package/packages/client/dist/continuity/migrations/003-headless-execution-attempts.d.ts +11 -0
- package/packages/client/dist/continuity/migrations/003-headless-execution-attempts.js +62 -0
- package/packages/client/dist/continuity/migrations/004-outbox-delivery-state.d.ts +11 -0
- package/packages/client/dist/continuity/migrations/004-outbox-delivery-state.js +19 -0
- package/packages/client/dist/continuity/migrations/005-bounded-headless-queue.d.ts +11 -0
- package/packages/client/dist/continuity/migrations/005-bounded-headless-queue.js +35 -0
- package/packages/client/dist/continuity/outbox.d.ts +83 -0
- package/packages/client/dist/continuity/outbox.js +1 -0
- package/packages/client/dist/continuity/runner-bootstrap-policy.d.ts +50 -0
- package/packages/client/dist/continuity/runner-bootstrap-policy.js +1 -0
- package/packages/client/dist/continuity/sqlite-store.d.ts +926 -0
- package/packages/client/dist/continuity/sqlite-store.js +619 -0
- package/packages/client/dist/errors/error-messages.d.ts +40 -0
- package/packages/client/dist/errors/error-messages.js +2 -0
- package/packages/client/dist/graph-retrieval/pre-command-hook.d.ts +34 -0
- package/packages/client/dist/graph-retrieval/pre-command-hook.js +1 -0
- package/packages/client/dist/graph-retrieval/shared-graph-retrieval-contract.d.ts +99 -0
- package/packages/client/dist/graph-retrieval/shared-graph-retrieval-contract.js +1 -0
- package/packages/client/dist/i18n/first-run.d.ts +23 -0
- package/packages/client/dist/i18n/first-run.js +2 -0
- package/packages/client/dist/index.d.ts +56 -0
- package/packages/client/dist/index.js +1 -0
- package/packages/client/dist/license/index.d.ts +5 -0
- package/packages/client/dist/license/index.js +1 -0
- package/packages/client/dist/license/license-client.d.ts +79 -0
- package/packages/client/dist/license/license-client.js +1 -0
- package/packages/client/dist/machine/fingerprint.d.ts +34 -0
- package/packages/client/dist/machine/fingerprint.js +2 -0
- package/packages/client/dist/machine/index.d.ts +5 -0
- package/packages/client/dist/machine/index.js +1 -0
- package/packages/client/dist/memory/project-memory-writer.d.ts +74 -0
- package/packages/client/dist/memory/project-memory-writer.js +36 -0
- package/packages/client/dist/memory/shared-project-memory-types.d.ts +370 -0
- package/packages/client/dist/memory/shared-project-memory-types.js +2 -0
- package/packages/client/dist/policy/architecture-policy.d.ts +40 -0
- package/packages/client/dist/policy/architecture-policy.js +2 -0
- package/packages/client/dist/policy/index.d.ts +8 -0
- package/packages/client/dist/policy/index.js +1 -0
- package/packages/client/dist/policy/shared-policy-types.d.ts +89 -0
- package/packages/client/dist/policy/shared-policy-types.js +0 -0
- package/packages/client/dist/resilience/circuit-breaker.d.ts +70 -0
- package/packages/client/dist/resilience/circuit-breaker.js +1 -0
- package/packages/client/dist/resilience/degradation-manager.d.ts +67 -0
- package/packages/client/dist/resilience/degradation-manager.js +1 -0
- package/packages/client/dist/resilience/freshness-indicator.d.ts +59 -0
- package/packages/client/dist/resilience/freshness-indicator.js +1 -0
- package/packages/client/dist/resilience/index.d.ts +8 -0
- package/packages/client/dist/resilience/index.js +1 -0
- package/packages/client/dist/resilience/recovery-detector.d.ts +59 -0
- package/packages/client/dist/resilience/recovery-detector.js +1 -0
- package/packages/client/dist/resolvers/asset-resolver.d.ts +79 -0
- package/packages/client/dist/resolvers/asset-resolver.js +0 -0
- package/packages/client/dist/resolvers/local-resolver.d.ts +26 -0
- package/packages/client/dist/resolvers/local-resolver.js +8 -0
- package/packages/client/dist/resolvers/remote-resolver.d.ts +91 -0
- package/packages/client/dist/resolvers/remote-resolver.js +1 -0
- package/packages/client/dist/runner/binary.d.ts +115 -0
- package/packages/client/dist/runner/binary.js +1 -0
- package/packages/client/dist/runner/cli.d.ts +168 -0
- package/packages/client/dist/runner/cli.js +70 -0
- package/packages/client/dist/runner/headless/adapters.d.ts +20 -0
- package/packages/client/dist/runner/headless/adapters.js +1 -0
- package/packages/client/dist/runner/headless/claude-code-adapter.d.ts +8 -0
- package/packages/client/dist/runner/headless/claude-code-adapter.js +1 -0
- package/packages/client/dist/runner/headless/fake-adapter.d.ts +8 -0
- package/packages/client/dist/runner/headless/fake-adapter.js +1 -0
- package/packages/client/dist/runner/headless/opencode-adapter.d.ts +15 -0
- package/packages/client/dist/runner/headless/opencode-adapter.js +2 -0
- package/packages/client/dist/runner/headless/resolver.d.ts +68 -0
- package/packages/client/dist/runner/headless/resolver.js +1 -0
- package/packages/client/dist/runner/headless/run-yolo.d.ts +59 -0
- package/packages/client/dist/runner/headless/run-yolo.js +1 -0
- package/packages/client/dist/runner/headless/run-yoloop.d.ts +113 -0
- package/packages/client/dist/runner/headless/run-yoloop.js +1 -0
- package/packages/client/dist/runner/headless/types.d.ts +194 -0
- package/packages/client/dist/runner/headless/types.js +2 -0
- package/packages/client/dist/runner/local-console.d.ts +83 -0
- package/packages/client/dist/runner/local-console.js +13 -0
- package/packages/client/dist/runner/portal-sync-worker.d.ts +184 -0
- package/packages/client/dist/runner/portal-sync-worker.js +1 -0
- package/packages/client/dist/runner/project-identity.d.ts +19 -0
- package/packages/client/dist/runner/project-identity.js +1 -0
- package/packages/client/dist/runner/scheduler.d.ts +186 -0
- package/packages/client/dist/runner/scheduler.js +7 -0
- package/packages/client/dist/runner-cli.d.ts +9 -0
- package/packages/client/dist/runner-cli.js +3 -0
- package/packages/client/dist/state/project-state-snapshot.d.ts +24 -0
- package/packages/client/dist/state/project-state-snapshot.js +1 -0
- package/packages/client/dist/state/state-json-repair.d.ts +74 -0
- package/packages/client/dist/state/state-json-repair.js +3 -0
- package/packages/client/dist/telemetry/index.d.ts +5 -0
- package/packages/client/dist/telemetry/index.js +1 -0
- package/packages/client/dist/telemetry/offline-queue.d.ts +57 -0
- package/packages/client/dist/telemetry/offline-queue.js +1 -0
- package/packages/client/dist/tier/index.d.ts +5 -0
- package/packages/client/dist/tier/index.js +1 -0
- package/packages/client/dist/tier/tier-aware-client.d.ts +105 -0
- package/packages/client/dist/tier/tier-aware-client.js +1 -0
- package/packages/client/dist/types/index.d.ts +140 -0
- package/packages/client/dist/types/index.js +1 -0
- package/packages/client/dist/yoloop/discovery-hook.d.ts +85 -0
- package/packages/client/dist/yoloop/discovery-hook.js +2 -0
- package/packages/client/dist/yoloop/index.d.ts +10 -0
- package/packages/client/dist/yoloop/index.js +1 -0
- package/packages/client/dist/yoloop/invoke-hooks.d.ts +127 -0
- package/packages/client/dist/yoloop/invoke-hooks.js +5 -0
- package/packages/client/dist/yoloop/shared-discover-epics.d.ts +289 -0
- package/packages/client/dist/yoloop/shared-discover-epics.js +1 -0
- package/packages/client/dist/yoloop/shared-yoloop-types.d.ts +172 -0
- package/packages/client/dist/yoloop/shared-yoloop-types.js +1 -0
- package/packages/client/dist/yoloop/yoloop-client-state-store.d.ts +124 -0
- package/packages/client/dist/yoloop/yoloop-client-state-store.js +1 -0
- package/postinstall.js +754 -0
- package/targets-stubs/antigravity/README.md +36 -0
- package/targets-stubs/antigravity/gemini.md +29 -0
- package/targets-stubs/antigravity/install-antigravity.sh +153 -0
- package/targets-stubs/antigravity/mcp-config.json +30 -0
- package/targets-stubs/antigravity/skill/SKILL.md +166 -0
- package/targets-stubs/claude-code/.mcp.json +32 -0
- package/targets-stubs/claude-code/README.md +20 -0
- package/targets-stubs/claude-code/neocortex-root.agent.yaml +42 -0
- package/targets-stubs/claude-code/neocortex-root.md +317 -0
- package/targets-stubs/claude-code/neocortex.agent.yaml +42 -0
- package/targets-stubs/claude-code/neocortex.md +385 -0
- package/targets-stubs/codex/AGENTS.md +250 -0
- package/targets-stubs/codex/README.md +47 -0
- package/targets-stubs/codex/config-mcp.toml +22 -0
- package/targets-stubs/codex/install-codex.sh +63 -0
- package/targets-stubs/codex/neocortex.toml +33 -0
- package/targets-stubs/cursor/README.md +33 -0
- package/targets-stubs/cursor/agent.md +211 -0
- package/targets-stubs/cursor/install-cursor.sh +50 -0
- package/targets-stubs/cursor/mcp.json +30 -0
- package/targets-stubs/gemini-cli/README.md +34 -0
- package/targets-stubs/gemini-cli/agent.md +241 -0
- package/targets-stubs/gemini-cli/agents/neocortex.md +60 -0
- package/targets-stubs/gemini-cli/gemini.md +46 -0
- package/targets-stubs/gemini-cli/install-gemini.sh +70 -0
- package/targets-stubs/gemini-cli/settings-mcp.json +30 -0
- package/targets-stubs/kimi/mcp.json +33 -0
- package/targets-stubs/kimi/neocortex.md +60 -0
- package/targets-stubs/lib/mcp-merge.js +189 -0
- package/targets-stubs/openclaw/README.md +12 -0
- package/targets-stubs/openclaw/SKILL.md +92 -0
- package/targets-stubs/opencode/neocortex-root.md +267 -0
- package/targets-stubs/opencode/neocortex.md +65 -0
- package/targets-stubs/opencode/opencode-mcp.json +35 -0
- package/targets-stubs/vscode/README.md +34 -0
- package/targets-stubs/vscode/copilot-instructions.md +47 -0
- package/targets-stubs/vscode/install-vscode.sh +72 -0
- package/targets-stubs/vscode/mcp.json +36 -0
- package/targets-stubs/vscode/neocortex.agent.md +252 -0
|
@@ -0,0 +1,263 @@
|
|
|
1
|
+
const E=Object.freeze({version:1,name:"initial-continuity-schema",sql:`
|
|
2
|
+
CREATE TABLE IF NOT EXISTS jobs (
|
|
3
|
+
job_id TEXT PRIMARY KEY,
|
|
4
|
+
kind TEXT NOT NULL CHECK (kind IN ('goal', 'loop', 'runner', 'jobs')),
|
|
5
|
+
status TEXT NOT NULL CHECK (status IN (
|
|
6
|
+
'draft', 'planned', 'active', 'running', 'waiting_external', 'waiting_human',
|
|
7
|
+
'backoff', 'paused', 'blocked', 'completed', 'aborted', 'cancelled'
|
|
8
|
+
)),
|
|
9
|
+
summary TEXT,
|
|
10
|
+
reason_code TEXT,
|
|
11
|
+
created_at TEXT NOT NULL,
|
|
12
|
+
updated_at TEXT NOT NULL,
|
|
13
|
+
next_run_at TEXT,
|
|
14
|
+
goal_id TEXT,
|
|
15
|
+
loop_id TEXT,
|
|
16
|
+
campaign_id TEXT,
|
|
17
|
+
operation_id TEXT,
|
|
18
|
+
idempotency_key TEXT,
|
|
19
|
+
metadata_json TEXT CHECK (metadata_json IS NULL OR json_valid(metadata_json)),
|
|
20
|
+
public_safe INTEGER NOT NULL DEFAULT 1 CHECK (public_safe = 1),
|
|
21
|
+
UNIQUE (operation_id),
|
|
22
|
+
UNIQUE (idempotency_key)
|
|
23
|
+
);
|
|
24
|
+
|
|
25
|
+
CREATE INDEX IF NOT EXISTS idx_jobs_status ON jobs(status);
|
|
26
|
+
CREATE INDEX IF NOT EXISTS idx_jobs_next_run_at ON jobs(next_run_at);
|
|
27
|
+
CREATE INDEX IF NOT EXISTS idx_jobs_goal_id ON jobs(goal_id);
|
|
28
|
+
CREATE INDEX IF NOT EXISTS idx_jobs_loop_id ON jobs(loop_id);
|
|
29
|
+
|
|
30
|
+
CREATE TABLE IF NOT EXISTS job_leases (
|
|
31
|
+
lease_id TEXT PRIMARY KEY,
|
|
32
|
+
job_id TEXT NOT NULL,
|
|
33
|
+
runner_id TEXT NOT NULL,
|
|
34
|
+
status TEXT NOT NULL DEFAULT 'acquired' CHECK (status IN ('acquired', 'released', 'expired')),
|
|
35
|
+
acquired_at TEXT NOT NULL,
|
|
36
|
+
expires_at TEXT NOT NULL,
|
|
37
|
+
released_at TEXT,
|
|
38
|
+
operation_id TEXT,
|
|
39
|
+
idempotency_key TEXT,
|
|
40
|
+
metadata_json TEXT CHECK (metadata_json IS NULL OR json_valid(metadata_json)),
|
|
41
|
+
public_safe INTEGER NOT NULL DEFAULT 1 CHECK (public_safe = 1),
|
|
42
|
+
FOREIGN KEY (job_id) REFERENCES jobs(job_id) ON DELETE CASCADE,
|
|
43
|
+
UNIQUE (operation_id),
|
|
44
|
+
UNIQUE (idempotency_key)
|
|
45
|
+
);
|
|
46
|
+
|
|
47
|
+
CREATE INDEX IF NOT EXISTS idx_job_leases_job_id ON job_leases(job_id);
|
|
48
|
+
CREATE INDEX IF NOT EXISTS idx_job_leases_expires_at ON job_leases(expires_at);
|
|
49
|
+
CREATE UNIQUE INDEX IF NOT EXISTS idx_job_leases_active_job
|
|
50
|
+
ON job_leases(job_id)
|
|
51
|
+
WHERE released_at IS NULL;
|
|
52
|
+
|
|
53
|
+
CREATE TABLE IF NOT EXISTS job_events (
|
|
54
|
+
event_id TEXT PRIMARY KEY,
|
|
55
|
+
job_id TEXT NOT NULL,
|
|
56
|
+
operation_id TEXT NOT NULL,
|
|
57
|
+
idempotency_key TEXT,
|
|
58
|
+
event_sequence INTEGER,
|
|
59
|
+
type TEXT NOT NULL,
|
|
60
|
+
summary TEXT NOT NULL,
|
|
61
|
+
reason_code TEXT,
|
|
62
|
+
created_at TEXT NOT NULL,
|
|
63
|
+
metadata_json TEXT CHECK (metadata_json IS NULL OR json_valid(metadata_json)),
|
|
64
|
+
public_safe INTEGER NOT NULL DEFAULT 1 CHECK (public_safe = 1),
|
|
65
|
+
FOREIGN KEY (job_id) REFERENCES jobs(job_id) ON DELETE CASCADE,
|
|
66
|
+
UNIQUE (operation_id),
|
|
67
|
+
UNIQUE (idempotency_key)
|
|
68
|
+
);
|
|
69
|
+
|
|
70
|
+
CREATE INDEX IF NOT EXISTS idx_job_events_job_id ON job_events(job_id);
|
|
71
|
+
CREATE INDEX IF NOT EXISTS idx_job_events_created_at ON job_events(created_at);
|
|
72
|
+
|
|
73
|
+
CREATE TABLE IF NOT EXISTS job_receipts (
|
|
74
|
+
receipt_id TEXT PRIMARY KEY,
|
|
75
|
+
job_id TEXT NOT NULL,
|
|
76
|
+
operation_id TEXT,
|
|
77
|
+
idempotency_key TEXT,
|
|
78
|
+
status TEXT NOT NULL CHECK (status IN ('accepted', 'applied', 'ignored', 'failed', 'deferred')),
|
|
79
|
+
reason_code TEXT,
|
|
80
|
+
applied_operation_ids_json TEXT CHECK (applied_operation_ids_json IS NULL OR json_valid(applied_operation_ids_json)),
|
|
81
|
+
ignored_operation_ids_json TEXT CHECK (ignored_operation_ids_json IS NULL OR json_valid(ignored_operation_ids_json)),
|
|
82
|
+
created_at TEXT NOT NULL,
|
|
83
|
+
metadata_json TEXT CHECK (metadata_json IS NULL OR json_valid(metadata_json)),
|
|
84
|
+
public_safe INTEGER NOT NULL DEFAULT 1 CHECK (public_safe = 1),
|
|
85
|
+
FOREIGN KEY (job_id) REFERENCES jobs(job_id) ON DELETE CASCADE,
|
|
86
|
+
UNIQUE (operation_id),
|
|
87
|
+
UNIQUE (idempotency_key)
|
|
88
|
+
);
|
|
89
|
+
|
|
90
|
+
CREATE INDEX IF NOT EXISTS idx_job_receipts_job_id ON job_receipts(job_id);
|
|
91
|
+
CREATE INDEX IF NOT EXISTS idx_job_receipts_created_at ON job_receipts(created_at);
|
|
92
|
+
|
|
93
|
+
CREATE TABLE IF NOT EXISTS goal_campaigns (
|
|
94
|
+
campaign_id TEXT PRIMARY KEY,
|
|
95
|
+
job_id TEXT NOT NULL UNIQUE,
|
|
96
|
+
status TEXT NOT NULL,
|
|
97
|
+
title TEXT,
|
|
98
|
+
public_summary TEXT,
|
|
99
|
+
reason_code TEXT,
|
|
100
|
+
created_at TEXT NOT NULL,
|
|
101
|
+
updated_at TEXT NOT NULL,
|
|
102
|
+
operation_id TEXT,
|
|
103
|
+
idempotency_key TEXT,
|
|
104
|
+
metadata_json TEXT CHECK (metadata_json IS NULL OR json_valid(metadata_json)),
|
|
105
|
+
public_safe INTEGER NOT NULL DEFAULT 1 CHECK (public_safe = 1),
|
|
106
|
+
FOREIGN KEY (job_id) REFERENCES jobs(job_id) ON DELETE CASCADE,
|
|
107
|
+
UNIQUE (operation_id),
|
|
108
|
+
UNIQUE (idempotency_key)
|
|
109
|
+
);
|
|
110
|
+
|
|
111
|
+
CREATE INDEX IF NOT EXISTS idx_goal_campaigns_status ON goal_campaigns(status);
|
|
112
|
+
|
|
113
|
+
CREATE TABLE IF NOT EXISTS goal_ledger_items (
|
|
114
|
+
item_id TEXT PRIMARY KEY,
|
|
115
|
+
campaign_id TEXT NOT NULL,
|
|
116
|
+
operation_id TEXT NOT NULL,
|
|
117
|
+
idempotency_key TEXT,
|
|
118
|
+
item_type TEXT NOT NULL,
|
|
119
|
+
status TEXT NOT NULL,
|
|
120
|
+
summary TEXT NOT NULL,
|
|
121
|
+
reason_code TEXT,
|
|
122
|
+
created_at TEXT NOT NULL,
|
|
123
|
+
updated_at TEXT NOT NULL,
|
|
124
|
+
metadata_json TEXT CHECK (metadata_json IS NULL OR json_valid(metadata_json)),
|
|
125
|
+
public_safe INTEGER NOT NULL DEFAULT 1 CHECK (public_safe = 1),
|
|
126
|
+
FOREIGN KEY (campaign_id) REFERENCES goal_campaigns(campaign_id) ON DELETE CASCADE,
|
|
127
|
+
UNIQUE (operation_id),
|
|
128
|
+
UNIQUE (idempotency_key)
|
|
129
|
+
);
|
|
130
|
+
|
|
131
|
+
CREATE INDEX IF NOT EXISTS idx_goal_ledger_items_campaign_id ON goal_ledger_items(campaign_id);
|
|
132
|
+
|
|
133
|
+
CREATE TABLE IF NOT EXISTS goal_verifiers (
|
|
134
|
+
verifier_id TEXT PRIMARY KEY,
|
|
135
|
+
campaign_id TEXT NOT NULL,
|
|
136
|
+
kind TEXT NOT NULL,
|
|
137
|
+
status TEXT NOT NULL,
|
|
138
|
+
summary TEXT,
|
|
139
|
+
reason_code TEXT,
|
|
140
|
+
last_checked_at TEXT,
|
|
141
|
+
operation_id TEXT,
|
|
142
|
+
idempotency_key TEXT,
|
|
143
|
+
metadata_json TEXT CHECK (metadata_json IS NULL OR json_valid(metadata_json)),
|
|
144
|
+
public_safe INTEGER NOT NULL DEFAULT 1 CHECK (public_safe = 1),
|
|
145
|
+
FOREIGN KEY (campaign_id) REFERENCES goal_campaigns(campaign_id) ON DELETE CASCADE,
|
|
146
|
+
UNIQUE (operation_id),
|
|
147
|
+
UNIQUE (idempotency_key)
|
|
148
|
+
);
|
|
149
|
+
|
|
150
|
+
CREATE INDEX IF NOT EXISTS idx_goal_verifiers_campaign_id ON goal_verifiers(campaign_id);
|
|
151
|
+
|
|
152
|
+
CREATE TABLE IF NOT EXISTS goal_review_gates (
|
|
153
|
+
gate_id TEXT PRIMARY KEY,
|
|
154
|
+
campaign_id TEXT NOT NULL,
|
|
155
|
+
status TEXT NOT NULL,
|
|
156
|
+
summary TEXT,
|
|
157
|
+
required INTEGER NOT NULL DEFAULT 1 CHECK (required IN (0, 1)),
|
|
158
|
+
reason_code TEXT,
|
|
159
|
+
operation_id TEXT,
|
|
160
|
+
idempotency_key TEXT,
|
|
161
|
+
metadata_json TEXT CHECK (metadata_json IS NULL OR json_valid(metadata_json)),
|
|
162
|
+
public_safe INTEGER NOT NULL DEFAULT 1 CHECK (public_safe = 1),
|
|
163
|
+
FOREIGN KEY (campaign_id) REFERENCES goal_campaigns(campaign_id) ON DELETE CASCADE,
|
|
164
|
+
UNIQUE (operation_id),
|
|
165
|
+
UNIQUE (idempotency_key)
|
|
166
|
+
);
|
|
167
|
+
|
|
168
|
+
CREATE INDEX IF NOT EXISTS idx_goal_review_gates_campaign_id ON goal_review_gates(campaign_id);
|
|
169
|
+
|
|
170
|
+
CREATE TABLE IF NOT EXISTS loop_jobs (
|
|
171
|
+
loop_id TEXT PRIMARY KEY,
|
|
172
|
+
job_id TEXT NOT NULL UNIQUE,
|
|
173
|
+
interval_seconds INTEGER NOT NULL CHECK (interval_seconds > 0),
|
|
174
|
+
max_iterations INTEGER,
|
|
175
|
+
max_duration_ms INTEGER,
|
|
176
|
+
backoff_policy_json TEXT CHECK (backoff_policy_json IS NULL OR json_valid(backoff_policy_json)),
|
|
177
|
+
overlap_policy TEXT NOT NULL,
|
|
178
|
+
next_tick_at TEXT,
|
|
179
|
+
iteration INTEGER NOT NULL DEFAULT 0 CHECK (iteration >= 0),
|
|
180
|
+
operation_id TEXT,
|
|
181
|
+
idempotency_key TEXT,
|
|
182
|
+
metadata_json TEXT CHECK (metadata_json IS NULL OR json_valid(metadata_json)),
|
|
183
|
+
public_safe INTEGER NOT NULL DEFAULT 1 CHECK (public_safe = 1),
|
|
184
|
+
FOREIGN KEY (job_id) REFERENCES jobs(job_id) ON DELETE CASCADE,
|
|
185
|
+
UNIQUE (operation_id),
|
|
186
|
+
UNIQUE (idempotency_key)
|
|
187
|
+
);
|
|
188
|
+
|
|
189
|
+
CREATE INDEX IF NOT EXISTS idx_loop_jobs_next_tick_at ON loop_jobs(next_tick_at);
|
|
190
|
+
|
|
191
|
+
CREATE TABLE IF NOT EXISTS artifacts (
|
|
192
|
+
artifact_id TEXT PRIMARY KEY,
|
|
193
|
+
job_id TEXT,
|
|
194
|
+
kind TEXT NOT NULL,
|
|
195
|
+
relative_path TEXT NOT NULL,
|
|
196
|
+
sha256 TEXT,
|
|
197
|
+
summary TEXT,
|
|
198
|
+
operation_id TEXT,
|
|
199
|
+
idempotency_key TEXT,
|
|
200
|
+
created_at TEXT NOT NULL,
|
|
201
|
+
metadata_json TEXT CHECK (metadata_json IS NULL OR json_valid(metadata_json)),
|
|
202
|
+
public_safe INTEGER NOT NULL DEFAULT 1 CHECK (public_safe = 1),
|
|
203
|
+
FOREIGN KEY (job_id) REFERENCES jobs(job_id) ON DELETE SET NULL,
|
|
204
|
+
UNIQUE (operation_id),
|
|
205
|
+
UNIQUE (idempotency_key)
|
|
206
|
+
);
|
|
207
|
+
|
|
208
|
+
CREATE INDEX IF NOT EXISTS idx_artifacts_job_id ON artifacts(job_id);
|
|
209
|
+
CREATE INDEX IF NOT EXISTS idx_artifacts_relative_path ON artifacts(relative_path);
|
|
210
|
+
|
|
211
|
+
CREATE TABLE IF NOT EXISTS state_snapshots (
|
|
212
|
+
snapshot_id TEXT PRIMARY KEY,
|
|
213
|
+
job_id TEXT,
|
|
214
|
+
kind TEXT NOT NULL,
|
|
215
|
+
relative_path TEXT,
|
|
216
|
+
sha256 TEXT,
|
|
217
|
+
summary TEXT,
|
|
218
|
+
captured_at TEXT NOT NULL,
|
|
219
|
+
operation_id TEXT,
|
|
220
|
+
idempotency_key TEXT,
|
|
221
|
+
metadata_json TEXT CHECK (metadata_json IS NULL OR json_valid(metadata_json)),
|
|
222
|
+
public_safe INTEGER NOT NULL DEFAULT 1 CHECK (public_safe = 1),
|
|
223
|
+
FOREIGN KEY (job_id) REFERENCES jobs(job_id) ON DELETE SET NULL,
|
|
224
|
+
UNIQUE (operation_id),
|
|
225
|
+
UNIQUE (idempotency_key)
|
|
226
|
+
);
|
|
227
|
+
|
|
228
|
+
CREATE INDEX IF NOT EXISTS idx_state_snapshots_job_id ON state_snapshots(job_id);
|
|
229
|
+
CREATE INDEX IF NOT EXISTS idx_state_snapshots_captured_at ON state_snapshots(captured_at);
|
|
230
|
+
|
|
231
|
+
CREATE TABLE IF NOT EXISTS runner_config (
|
|
232
|
+
key TEXT PRIMARY KEY,
|
|
233
|
+
value_json TEXT NOT NULL CHECK (json_valid(value_json)),
|
|
234
|
+
updated_at TEXT NOT NULL,
|
|
235
|
+
operation_id TEXT,
|
|
236
|
+
idempotency_key TEXT,
|
|
237
|
+
public_safe INTEGER NOT NULL DEFAULT 1 CHECK (public_safe = 1),
|
|
238
|
+
UNIQUE (operation_id),
|
|
239
|
+
UNIQUE (idempotency_key)
|
|
240
|
+
);
|
|
241
|
+
|
|
242
|
+
CREATE TABLE IF NOT EXISTS outbox (
|
|
243
|
+
outbox_id TEXT PRIMARY KEY,
|
|
244
|
+
job_id TEXT,
|
|
245
|
+
operation_id TEXT NOT NULL,
|
|
246
|
+
idempotency_key TEXT,
|
|
247
|
+
type TEXT NOT NULL,
|
|
248
|
+
status TEXT NOT NULL DEFAULT 'pending' CHECK (status IN ('pending', 'sent', 'acked', 'failed', 'dead_letter')),
|
|
249
|
+
payload_json TEXT NOT NULL CHECK (json_valid(payload_json)),
|
|
250
|
+
retry_count INTEGER NOT NULL DEFAULT 0 CHECK (retry_count >= 0),
|
|
251
|
+
next_attempt_at TEXT,
|
|
252
|
+
last_error_code TEXT,
|
|
253
|
+
created_at TEXT NOT NULL,
|
|
254
|
+
updated_at TEXT NOT NULL,
|
|
255
|
+
public_safe INTEGER NOT NULL DEFAULT 1 CHECK (public_safe = 1),
|
|
256
|
+
FOREIGN KEY (job_id) REFERENCES jobs(job_id) ON DELETE SET NULL,
|
|
257
|
+
UNIQUE (operation_id),
|
|
258
|
+
UNIQUE (idempotency_key)
|
|
259
|
+
);
|
|
260
|
+
|
|
261
|
+
CREATE INDEX IF NOT EXISTS idx_outbox_status_next_attempt ON outbox(status, next_attempt_at);
|
|
262
|
+
CREATE INDEX IF NOT EXISTS idx_outbox_job_id ON outbox(job_id);
|
|
263
|
+
`});export{E as INITIAL_CONTINUITY_SQLITE_MIGRATION};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license FSL-1.1
|
|
3
|
+
* Copyright (c) 2026 OrNexus AI
|
|
4
|
+
*
|
|
5
|
+
* P185.02 -- Bounded processing-output summary cursor indexes.
|
|
6
|
+
*/
|
|
7
|
+
export declare const PROCESSING_OUTPUT_SUMMARY_SQLITE_MIGRATION: Readonly<{
|
|
8
|
+
readonly version: 2;
|
|
9
|
+
readonly name: "processing-output-summary-indexes";
|
|
10
|
+
readonly sql: "\nCREATE INDEX IF NOT EXISTS idx_job_events_type_created_at_event_id\n ON job_events(type, created_at, event_id);\n\nCREATE INDEX IF NOT EXISTS idx_job_events_job_type_created_at_event_id\n ON job_events(job_id, type, created_at, event_id);\n";
|
|
11
|
+
}>;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
const e=Object.freeze({version:2,name:"processing-output-summary-indexes",sql:`
|
|
2
|
+
CREATE INDEX IF NOT EXISTS idx_job_events_type_created_at_event_id
|
|
3
|
+
ON job_events(type, created_at, event_id);
|
|
4
|
+
|
|
5
|
+
CREATE INDEX IF NOT EXISTS idx_job_events_job_type_created_at_event_id
|
|
6
|
+
ON job_events(job_id, type, created_at, event_id);
|
|
7
|
+
`});export{e as PROCESSING_OUTPUT_SUMMARY_SQLITE_MIGRATION};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license FSL-1.1
|
|
3
|
+
* Copyright (c) 2026 OrNexus AI
|
|
4
|
+
*
|
|
5
|
+
* P190.03 -- Headless execution attempt queue, leases and public summaries.
|
|
6
|
+
*/
|
|
7
|
+
export declare const HEADLESS_EXECUTION_ATTEMPTS_SQLITE_MIGRATION: Readonly<{
|
|
8
|
+
readonly version: 3;
|
|
9
|
+
readonly name: "headless-execution-attempts";
|
|
10
|
+
readonly sql: "\nCREATE TABLE IF NOT EXISTS headless_execution_attempts (\n attempt_id TEXT PRIMARY KEY,\n execution_id TEXT NOT NULL,\n job_id TEXT NOT NULL,\n directive_hash TEXT NOT NULL,\n directive_kind TEXT NOT NULL CHECK (directive_kind IN ('run_yolo', 'run_yoloop')),\n command_class TEXT NOT NULL CHECK (command_class IN ('goal-tick', 'loop-tick')),\n target_kind TEXT NOT NULL CHECK (target_kind IN ('story', 'epic')),\n target_ref TEXT NOT NULL,\n story_id TEXT,\n epic_id TEXT,\n runtime_id TEXT,\n model_id TEXT,\n runtime_source TEXT CHECK (runtime_source IS NULL OR runtime_source IN ('explicit', 'origin', 'default', 'fallback', 'unspecified')),\n status TEXT NOT NULL CHECK (status IN ('queued', 'running', 'completed', 'failed', 'timed_out', 'backoff', 'skipped')),\n reason_code TEXT,\n public_summary TEXT,\n enqueued_at TEXT NOT NULL,\n not_before_at TEXT,\n started_at TEXT,\n heartbeat_at TEXT,\n completed_at TEXT,\n duration_ms INTEGER CHECK (duration_ms IS NULL OR duration_ms >= 0),\n retry_count INTEGER NOT NULL DEFAULT 0 CHECK (retry_count >= 0),\n max_attempts INTEGER NOT NULL DEFAULT 3 CHECK (max_attempts > 0),\n lease_id TEXT,\n runner_id TEXT,\n lease_expires_at TEXT,\n lease_released_at TEXT,\n operation_id TEXT,\n idempotency_key TEXT,\n counts_json TEXT CHECK (counts_json IS NULL OR json_valid(counts_json)),\n hashes_json TEXT CHECK (hashes_json IS NULL OR json_valid(hashes_json)),\n redaction_summary_json TEXT CHECK (redaction_summary_json IS NULL OR json_valid(redaction_summary_json)),\n relative_paths_json TEXT CHECK (relative_paths_json IS NULL OR json_valid(relative_paths_json)),\n metadata_json TEXT CHECK (metadata_json IS NULL OR json_valid(metadata_json)),\n public_safe INTEGER NOT NULL DEFAULT 1 CHECK (public_safe = 1),\n FOREIGN KEY (job_id) REFERENCES jobs(job_id) ON DELETE CASCADE,\n UNIQUE (operation_id),\n UNIQUE (idempotency_key)\n);\n\nCREATE INDEX IF NOT EXISTS idx_headless_execution_attempts_execution_id\n ON headless_execution_attempts(execution_id);\n\nCREATE INDEX IF NOT EXISTS idx_headless_execution_attempts_job_status\n ON headless_execution_attempts(job_id, status);\n\nCREATE INDEX IF NOT EXISTS idx_headless_execution_attempts_due\n ON headless_execution_attempts(status, not_before_at, enqueued_at, attempt_id);\n\nCREATE INDEX IF NOT EXISTS idx_headless_execution_attempts_lease_expiry\n ON headless_execution_attempts(status, lease_expires_at, attempt_id);\n\nCREATE INDEX IF NOT EXISTS idx_headless_execution_attempts_runtime_model\n ON headless_execution_attempts(runtime_id, model_id);\n\nCREATE UNIQUE INDEX IF NOT EXISTS idx_headless_execution_attempts_active_lease\n ON headless_execution_attempts(lease_id)\n WHERE lease_id IS NOT NULL AND lease_released_at IS NULL;\n";
|
|
11
|
+
}>;
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
const e=Object.freeze({version:3,name:"headless-execution-attempts",sql:`
|
|
2
|
+
CREATE TABLE IF NOT EXISTS headless_execution_attempts (
|
|
3
|
+
attempt_id TEXT PRIMARY KEY,
|
|
4
|
+
execution_id TEXT NOT NULL,
|
|
5
|
+
job_id TEXT NOT NULL,
|
|
6
|
+
directive_hash TEXT NOT NULL,
|
|
7
|
+
directive_kind TEXT NOT NULL CHECK (directive_kind IN ('run_yolo', 'run_yoloop')),
|
|
8
|
+
command_class TEXT NOT NULL CHECK (command_class IN ('goal-tick', 'loop-tick')),
|
|
9
|
+
target_kind TEXT NOT NULL CHECK (target_kind IN ('story', 'epic')),
|
|
10
|
+
target_ref TEXT NOT NULL,
|
|
11
|
+
story_id TEXT,
|
|
12
|
+
epic_id TEXT,
|
|
13
|
+
runtime_id TEXT,
|
|
14
|
+
model_id TEXT,
|
|
15
|
+
runtime_source TEXT CHECK (runtime_source IS NULL OR runtime_source IN ('explicit', 'origin', 'default', 'fallback', 'unspecified')),
|
|
16
|
+
status TEXT NOT NULL CHECK (status IN ('queued', 'running', 'completed', 'failed', 'timed_out', 'backoff', 'skipped')),
|
|
17
|
+
reason_code TEXT,
|
|
18
|
+
public_summary TEXT,
|
|
19
|
+
enqueued_at TEXT NOT NULL,
|
|
20
|
+
not_before_at TEXT,
|
|
21
|
+
started_at TEXT,
|
|
22
|
+
heartbeat_at TEXT,
|
|
23
|
+
completed_at TEXT,
|
|
24
|
+
duration_ms INTEGER CHECK (duration_ms IS NULL OR duration_ms >= 0),
|
|
25
|
+
retry_count INTEGER NOT NULL DEFAULT 0 CHECK (retry_count >= 0),
|
|
26
|
+
max_attempts INTEGER NOT NULL DEFAULT 3 CHECK (max_attempts > 0),
|
|
27
|
+
lease_id TEXT,
|
|
28
|
+
runner_id TEXT,
|
|
29
|
+
lease_expires_at TEXT,
|
|
30
|
+
lease_released_at TEXT,
|
|
31
|
+
operation_id TEXT,
|
|
32
|
+
idempotency_key TEXT,
|
|
33
|
+
counts_json TEXT CHECK (counts_json IS NULL OR json_valid(counts_json)),
|
|
34
|
+
hashes_json TEXT CHECK (hashes_json IS NULL OR json_valid(hashes_json)),
|
|
35
|
+
redaction_summary_json TEXT CHECK (redaction_summary_json IS NULL OR json_valid(redaction_summary_json)),
|
|
36
|
+
relative_paths_json TEXT CHECK (relative_paths_json IS NULL OR json_valid(relative_paths_json)),
|
|
37
|
+
metadata_json TEXT CHECK (metadata_json IS NULL OR json_valid(metadata_json)),
|
|
38
|
+
public_safe INTEGER NOT NULL DEFAULT 1 CHECK (public_safe = 1),
|
|
39
|
+
FOREIGN KEY (job_id) REFERENCES jobs(job_id) ON DELETE CASCADE,
|
|
40
|
+
UNIQUE (operation_id),
|
|
41
|
+
UNIQUE (idempotency_key)
|
|
42
|
+
);
|
|
43
|
+
|
|
44
|
+
CREATE INDEX IF NOT EXISTS idx_headless_execution_attempts_execution_id
|
|
45
|
+
ON headless_execution_attempts(execution_id);
|
|
46
|
+
|
|
47
|
+
CREATE INDEX IF NOT EXISTS idx_headless_execution_attempts_job_status
|
|
48
|
+
ON headless_execution_attempts(job_id, status);
|
|
49
|
+
|
|
50
|
+
CREATE INDEX IF NOT EXISTS idx_headless_execution_attempts_due
|
|
51
|
+
ON headless_execution_attempts(status, not_before_at, enqueued_at, attempt_id);
|
|
52
|
+
|
|
53
|
+
CREATE INDEX IF NOT EXISTS idx_headless_execution_attempts_lease_expiry
|
|
54
|
+
ON headless_execution_attempts(status, lease_expires_at, attempt_id);
|
|
55
|
+
|
|
56
|
+
CREATE INDEX IF NOT EXISTS idx_headless_execution_attempts_runtime_model
|
|
57
|
+
ON headless_execution_attempts(runtime_id, model_id);
|
|
58
|
+
|
|
59
|
+
CREATE UNIQUE INDEX IF NOT EXISTS idx_headless_execution_attempts_active_lease
|
|
60
|
+
ON headless_execution_attempts(lease_id)
|
|
61
|
+
WHERE lease_id IS NOT NULL AND lease_released_at IS NULL;
|
|
62
|
+
`});export{e as HEADLESS_EXECUTION_ATTEMPTS_SQLITE_MIGRATION};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license FSL-1.1
|
|
3
|
+
* Copyright (c) 2026 OrNexus AI
|
|
4
|
+
*
|
|
5
|
+
* P192.03 -- Replay-safe outbox delivery cursor, ack and dead-letter state.
|
|
6
|
+
*/
|
|
7
|
+
export declare const OUTBOX_DELIVERY_STATE_SQLITE_MIGRATION: Readonly<{
|
|
8
|
+
readonly version: 4;
|
|
9
|
+
readonly name: "outbox-delivery-state";
|
|
10
|
+
readonly sql: "\nALTER TABLE outbox ADD COLUMN delivery_cursor TEXT;\nALTER TABLE outbox ADD COLUMN attempt_count INTEGER NOT NULL DEFAULT 0 CHECK (attempt_count >= 0);\nALTER TABLE outbox ADD COLUMN last_attempt_at TEXT;\nALTER TABLE outbox ADD COLUMN sent_at TEXT;\nALTER TABLE outbox ADD COLUMN acked_at TEXT;\nALTER TABLE outbox ADD COLUMN last_error_reason TEXT;\nALTER TABLE outbox ADD COLUMN last_error_summary TEXT;\nALTER TABLE outbox ADD COLUMN dead_letter_summary TEXT;\nALTER TABLE outbox ADD COLUMN dead_lettered_at TEXT;\n\nCREATE UNIQUE INDEX IF NOT EXISTS idx_outbox_delivery_cursor\n ON outbox(delivery_cursor)\n WHERE delivery_cursor IS NOT NULL;\nCREATE INDEX IF NOT EXISTS idx_outbox_delivery_batch\n ON outbox(status, next_attempt_at, created_at, outbox_id);\nCREATE INDEX IF NOT EXISTS idx_outbox_ack_state\n ON outbox(status, acked_at, updated_at);\n";
|
|
11
|
+
}>;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
const t=Object.freeze({version:4,name:"outbox-delivery-state",sql:`
|
|
2
|
+
ALTER TABLE outbox ADD COLUMN delivery_cursor TEXT;
|
|
3
|
+
ALTER TABLE outbox ADD COLUMN attempt_count INTEGER NOT NULL DEFAULT 0 CHECK (attempt_count >= 0);
|
|
4
|
+
ALTER TABLE outbox ADD COLUMN last_attempt_at TEXT;
|
|
5
|
+
ALTER TABLE outbox ADD COLUMN sent_at TEXT;
|
|
6
|
+
ALTER TABLE outbox ADD COLUMN acked_at TEXT;
|
|
7
|
+
ALTER TABLE outbox ADD COLUMN last_error_reason TEXT;
|
|
8
|
+
ALTER TABLE outbox ADD COLUMN last_error_summary TEXT;
|
|
9
|
+
ALTER TABLE outbox ADD COLUMN dead_letter_summary TEXT;
|
|
10
|
+
ALTER TABLE outbox ADD COLUMN dead_lettered_at TEXT;
|
|
11
|
+
|
|
12
|
+
CREATE UNIQUE INDEX IF NOT EXISTS idx_outbox_delivery_cursor
|
|
13
|
+
ON outbox(delivery_cursor)
|
|
14
|
+
WHERE delivery_cursor IS NOT NULL;
|
|
15
|
+
CREATE INDEX IF NOT EXISTS idx_outbox_delivery_batch
|
|
16
|
+
ON outbox(status, next_attempt_at, created_at, outbox_id);
|
|
17
|
+
CREATE INDEX IF NOT EXISTS idx_outbox_ack_state
|
|
18
|
+
ON outbox(status, acked_at, updated_at);
|
|
19
|
+
`});export{t as OUTBOX_DELIVERY_STATE_SQLITE_MIGRATION};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license FSL-1.1
|
|
3
|
+
* Copyright (c) 2026 OrNexus AI
|
|
4
|
+
*
|
|
5
|
+
* P199.04 -- Additive bounded queue metadata for headless execution attempts.
|
|
6
|
+
*/
|
|
7
|
+
export declare const BOUNDED_HEADLESS_QUEUE_SQLITE_MIGRATION: Readonly<{
|
|
8
|
+
readonly version: 5;
|
|
9
|
+
readonly name: "bounded-headless-queue";
|
|
10
|
+
readonly sql: "\nALTER TABLE headless_execution_attempts\n ADD COLUMN queue_priority INTEGER NOT NULL DEFAULT 0\n CHECK (queue_priority >= -100 AND queue_priority <= 100);\n\nALTER TABLE headless_execution_attempts\n ADD COLUMN queue_scope TEXT NOT NULL DEFAULT 'project'\n CHECK (queue_scope IN ('project', 'workspace'));\n\nALTER TABLE headless_execution_attempts\n ADD COLUMN attempt_count INTEGER NOT NULL DEFAULT 0\n CHECK (attempt_count >= 0);\n\nALTER TABLE headless_execution_attempts\n ADD COLUMN next_retry_at TEXT;\n\nALTER TABLE headless_execution_attempts\n ADD COLUMN dead_lettered_at TEXT;\n\nALTER TABLE headless_execution_attempts\n ADD COLUMN dead_letter_reason_code TEXT;\n\nCREATE INDEX IF NOT EXISTS idx_headless_execution_attempts_bounded_due\n ON headless_execution_attempts(\n status,\n queue_priority DESC,\n next_retry_at,\n not_before_at,\n enqueued_at,\n attempt_id\n );\n\nCREATE INDEX IF NOT EXISTS idx_headless_execution_attempts_dead_letter\n ON headless_execution_attempts(dead_lettered_at, attempt_id);\n";
|
|
11
|
+
}>;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
const e=Object.freeze({version:5,name:"bounded-headless-queue",sql:`
|
|
2
|
+
ALTER TABLE headless_execution_attempts
|
|
3
|
+
ADD COLUMN queue_priority INTEGER NOT NULL DEFAULT 0
|
|
4
|
+
CHECK (queue_priority >= -100 AND queue_priority <= 100);
|
|
5
|
+
|
|
6
|
+
ALTER TABLE headless_execution_attempts
|
|
7
|
+
ADD COLUMN queue_scope TEXT NOT NULL DEFAULT 'project'
|
|
8
|
+
CHECK (queue_scope IN ('project', 'workspace'));
|
|
9
|
+
|
|
10
|
+
ALTER TABLE headless_execution_attempts
|
|
11
|
+
ADD COLUMN attempt_count INTEGER NOT NULL DEFAULT 0
|
|
12
|
+
CHECK (attempt_count >= 0);
|
|
13
|
+
|
|
14
|
+
ALTER TABLE headless_execution_attempts
|
|
15
|
+
ADD COLUMN next_retry_at TEXT;
|
|
16
|
+
|
|
17
|
+
ALTER TABLE headless_execution_attempts
|
|
18
|
+
ADD COLUMN dead_lettered_at TEXT;
|
|
19
|
+
|
|
20
|
+
ALTER TABLE headless_execution_attempts
|
|
21
|
+
ADD COLUMN dead_letter_reason_code TEXT;
|
|
22
|
+
|
|
23
|
+
CREATE INDEX IF NOT EXISTS idx_headless_execution_attempts_bounded_due
|
|
24
|
+
ON headless_execution_attempts(
|
|
25
|
+
status,
|
|
26
|
+
queue_priority DESC,
|
|
27
|
+
next_retry_at,
|
|
28
|
+
not_before_at,
|
|
29
|
+
enqueued_at,
|
|
30
|
+
attempt_id
|
|
31
|
+
);
|
|
32
|
+
|
|
33
|
+
CREATE INDEX IF NOT EXISTS idx_headless_execution_attempts_dead_letter
|
|
34
|
+
ON headless_execution_attempts(dead_lettered_at, attempt_id);
|
|
35
|
+
`});export{e as BOUNDED_HEADLESS_QUEUE_SQLITE_MIGRATION};
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license FSL-1.1
|
|
3
|
+
* Copyright (c) 2026 OrNexus AI
|
|
4
|
+
*
|
|
5
|
+
* P192.03 -- Public-safe continuity outbox retry/dead-letter helpers.
|
|
6
|
+
*/
|
|
7
|
+
export type ContinuityOutboxStatus = 'pending' | 'sent' | 'acked' | 'failed' | 'dead_letter';
|
|
8
|
+
export interface ContinuityOutboxRetryPolicy {
|
|
9
|
+
readonly maxAttempts: number;
|
|
10
|
+
readonly baseDelayMs: number;
|
|
11
|
+
readonly maxDelayMs: number;
|
|
12
|
+
}
|
|
13
|
+
export interface ContinuityOutboxFailureInput {
|
|
14
|
+
readonly nowIso: string;
|
|
15
|
+
readonly attemptCount: number;
|
|
16
|
+
readonly reasonCode: string;
|
|
17
|
+
readonly summary?: string;
|
|
18
|
+
readonly nextRetryAt?: string;
|
|
19
|
+
readonly policy?: Partial<ContinuityOutboxRetryPolicy>;
|
|
20
|
+
}
|
|
21
|
+
export interface ContinuityOutboxFailureDecision {
|
|
22
|
+
readonly status: Extract<ContinuityOutboxStatus, 'failed' | 'dead_letter'>;
|
|
23
|
+
readonly reasonCode: string;
|
|
24
|
+
readonly summary?: string;
|
|
25
|
+
readonly nextRetryAt?: string;
|
|
26
|
+
readonly deadLetteredAt?: string;
|
|
27
|
+
readonly maxAttempts: number;
|
|
28
|
+
readonly publicSafe: true;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* P199.04 -- Client-local bounded queue policy. The shared public SSoT lives in
|
|
32
|
+
* `packages/shared/src/continuity/queue.ts`; the SQLite store keeps this local
|
|
33
|
+
* copy so it does not acquire a runtime dependency on `@neocortex/shared`.
|
|
34
|
+
*/
|
|
35
|
+
export interface ContinuityQueuePolicy {
|
|
36
|
+
readonly maxItems: number;
|
|
37
|
+
readonly leaseMs: number;
|
|
38
|
+
readonly maxAttempts: number;
|
|
39
|
+
readonly baseDelayMs: number;
|
|
40
|
+
readonly maxDelayMs: number;
|
|
41
|
+
}
|
|
42
|
+
/** P199.06 client-local mirror of the shared bounded retention policy. */
|
|
43
|
+
export interface ContinuityRetentionWindow {
|
|
44
|
+
readonly maxAgeMs: number;
|
|
45
|
+
readonly maxItems: number;
|
|
46
|
+
readonly maxBytes: number;
|
|
47
|
+
}
|
|
48
|
+
export interface ContinuityRetentionPolicy {
|
|
49
|
+
readonly policyVersion: 1;
|
|
50
|
+
readonly receipts: ContinuityRetentionWindow;
|
|
51
|
+
readonly processingOutputs: ContinuityRetentionWindow;
|
|
52
|
+
readonly maxDeleteRowsPerRun: number;
|
|
53
|
+
readonly maxCompactionSummariesPerJob: number;
|
|
54
|
+
}
|
|
55
|
+
export type ContinuityRetentionPolicyInput = Partial<Omit<ContinuityRetentionPolicy, 'receipts' | 'processingOutputs'>> & {
|
|
56
|
+
readonly receipts?: Partial<ContinuityRetentionWindow>;
|
|
57
|
+
readonly processingOutputs?: Partial<ContinuityRetentionWindow>;
|
|
58
|
+
};
|
|
59
|
+
export declare const DEFAULT_CONTINUITY_RETENTION_POLICY: ContinuityRetentionPolicy;
|
|
60
|
+
export declare const CONTINUITY_RECEIPT_COMPACTION_EVENT_TYPE: "receipt_compaction";
|
|
61
|
+
export declare const CONTINUITY_RECEIPT_RETENTION_REASON_CODES: Readonly<{
|
|
62
|
+
readonly COMPACTED: "receipt-compacted";
|
|
63
|
+
readonly NOOP: "receipt-retention-noop";
|
|
64
|
+
}>;
|
|
65
|
+
export declare const CONTINUITY_QUEUE_SCOPES: readonly ["project", "workspace"];
|
|
66
|
+
export type ContinuityQueueScope = (typeof CONTINUITY_QUEUE_SCOPES)[number];
|
|
67
|
+
export declare const DEFAULT_CONTINUITY_QUEUE_PRIORITY: 0;
|
|
68
|
+
export declare const MIN_CONTINUITY_QUEUE_PRIORITY: -100;
|
|
69
|
+
export declare const MAX_CONTINUITY_QUEUE_PRIORITY: 100;
|
|
70
|
+
export declare const DEFAULT_CONTINUITY_QUEUE_POLICY: ContinuityQueuePolicy;
|
|
71
|
+
export declare const CONTINUITY_QUEUE_REASON_CODES: Readonly<{
|
|
72
|
+
readonly CAP_REACHED: "queue-cap-reached";
|
|
73
|
+
readonly LEASE_TIMEOUT_RETRY: "queue-lease-timeout-retry";
|
|
74
|
+
readonly ATTEMPTS_EXHAUSTED: "queue-attempts-exhausted";
|
|
75
|
+
}>;
|
|
76
|
+
export declare const DEFAULT_CONTINUITY_OUTBOX_RETRY_POLICY: ContinuityOutboxRetryPolicy;
|
|
77
|
+
export declare function normalizeContinuityQueuePolicy(policy: Partial<ContinuityQueuePolicy> | undefined): ContinuityQueuePolicy;
|
|
78
|
+
export declare function normalizeContinuityRetentionPolicy(input: ContinuityRetentionPolicyInput | undefined): ContinuityRetentionPolicy;
|
|
79
|
+
export declare function normalizeContinuityQueuePriority(value: number | undefined): number;
|
|
80
|
+
export declare function normalizeContinuityQueueScope(value: string | undefined): ContinuityQueueScope;
|
|
81
|
+
export declare function computeContinuityQueueRetryAt(nowIso: string, retryCount: number, policy?: Partial<ContinuityQueuePolicy>): string;
|
|
82
|
+
export declare function normalizeContinuityOutboxRetryPolicy(policy: Partial<ContinuityOutboxRetryPolicy> | undefined): ContinuityOutboxRetryPolicy;
|
|
83
|
+
export declare function computeContinuityOutboxFailureDecision(input: ContinuityOutboxFailureInput): ContinuityOutboxFailureDecision;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const c=Object.freeze({policyVersion:1,receipts:Object.freeze({maxAgeMs:2592e6,maxItems:1e3,maxBytes:2097152}),processingOutputs:Object.freeze({maxAgeMs:6048e5,maxItems:500,maxBytes:1048576}),maxDeleteRowsPerRun:5e3,maxCompactionSummariesPerJob:20}),E="receipt_compaction",C=Object.freeze({COMPACTED:"receipt-compacted",NOOP:"receipt-retention-noop"}),l=Object.freeze(["project","workspace"]),p=0,M=-100,I=100,r=Object.freeze({maxItems:100,leaseMs:5*6e4,maxAttempts:3,baseDelayMs:3e4,maxDelayMs:15*6e4}),D=Object.freeze({CAP_REACHED:"queue-cap-reached",LEASE_TIMEOUT_RETRY:"queue-lease-timeout-retry",ATTEMPTS_EXHAUSTED:"queue-attempts-exhausted"}),u=Object.freeze({maxAttempts:3,baseDelayMs:6e4,maxDelayMs:60*6e4});function y(e){const t=s(e?.maxItems,1,1e4,r.maxItems),a=s(e?.leaseMs,1e3,60*6e4,r.leaseMs),o=s(e?.maxAttempts,1,100,r.maxAttempts),m=s(e?.baseDelayMs,1e3,1440*6e4,r.baseDelayMs),n=s(e?.maxDelayMs,m,10080*6e4,r.maxDelayMs);return{maxItems:t,leaseMs:a,maxAttempts:o,baseDelayMs:m,maxDelayMs:n}}function A(e){return{policyVersion:1,receipts:i(e?.receipts,c.receipts),processingOutputs:i(e?.processingOutputs,c.processingOutputs),maxDeleteRowsPerRun:s(e?.maxDeleteRowsPerRun,1,5e4,c.maxDeleteRowsPerRun),maxCompactionSummariesPerJob:s(e?.maxCompactionSummariesPerJob,1,100,c.maxCompactionSummariesPerJob)}}function N(e){return s(e,M,I,p)}function R(e){return e==="workspace"?"workspace":"project"}function b(e,t,a){const o=y(a),m=Date.parse(e),n=Number.isFinite(m)?m:Date.now(),x=Math.max(0,Math.min(16,Math.floor(t)-1)),_=Math.min(o.maxDelayMs,o.baseDelayMs*2**x);return new Date(n+_).toISOString()}function O(e){const t=s(e?.maxAttempts,1,100,u.maxAttempts),a=s(e?.baseDelayMs,1e3,1440*6e4,u.baseDelayMs),o=s(e?.maxDelayMs,a,10080*6e4,u.maxDelayMs);return{maxAttempts:t,baseDelayMs:a,maxDelayMs:o}}function U(e){const t=O(e.policy),a=s(e.attemptCount,0,Number.MAX_SAFE_INTEGER,0);return a>=t.maxAttempts?{status:"dead_letter",reasonCode:e.reasonCode,...e.summary?{summary:e.summary}:{},deadLetteredAt:e.nowIso,maxAttempts:t.maxAttempts,publicSafe:!0}:{status:"failed",reasonCode:e.reasonCode,...e.summary?{summary:e.summary}:{},nextRetryAt:e.nextRetryAt??T(e.nowIso,a,t),maxAttempts:t.maxAttempts,publicSafe:!0}}function T(e,t,a){const o=Date.parse(e),m=Number.isFinite(o)?o:Date.now(),n=Math.max(0,Math.min(16,t-1)),x=Math.min(a.maxDelayMs,a.baseDelayMs*2**n);return new Date(m+x).toISOString()}function s(e,t,a,o){return Number.isFinite(e)?Math.max(t,Math.min(a,Math.floor(e))):o}function i(e,t){return{maxAgeMs:s(e?.maxAgeMs,6e4,365*24*60*6e4,t.maxAgeMs),maxItems:s(e?.maxItems,1,1e5,t.maxItems),maxBytes:s(e?.maxBytes,1024,256*1024*1024,t.maxBytes)}}export{D as CONTINUITY_QUEUE_REASON_CODES,l as CONTINUITY_QUEUE_SCOPES,E as CONTINUITY_RECEIPT_COMPACTION_EVENT_TYPE,C as CONTINUITY_RECEIPT_RETENTION_REASON_CODES,u as DEFAULT_CONTINUITY_OUTBOX_RETRY_POLICY,r as DEFAULT_CONTINUITY_QUEUE_POLICY,p as DEFAULT_CONTINUITY_QUEUE_PRIORITY,c as DEFAULT_CONTINUITY_RETENTION_POLICY,I as MAX_CONTINUITY_QUEUE_PRIORITY,M as MIN_CONTINUITY_QUEUE_PRIORITY,U as computeContinuityOutboxFailureDecision,b as computeContinuityQueueRetryAt,O as normalizeContinuityOutboxRetryPolicy,y as normalizeContinuityQueuePolicy,N as normalizeContinuityQueuePriority,R as normalizeContinuityQueueScope,A as normalizeContinuityRetentionPolicy};
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license FSL-1.1
|
|
3
|
+
* Copyright (c) 2026 OrNexus AI
|
|
4
|
+
*
|
|
5
|
+
* P181.03 -- public-safe runner bootstrap classifier for durable goal/loop
|
|
6
|
+
* operations.
|
|
7
|
+
*/
|
|
8
|
+
export declare const RUNNER_BOOTSTRAP_POLICY_REASON_CODES: {
|
|
9
|
+
readonly REQUIRED_DURABLE_COMMAND: "runner-bootstrap-required-durable-command";
|
|
10
|
+
readonly REQUIRED_UNKNOWN_GOAL_LOOP_OPERATION: "runner-bootstrap-required-unknown-goal-loop-operation";
|
|
11
|
+
readonly OPTIONAL_OPERATOR_COMMAND: "runner-bootstrap-optional-operator-command";
|
|
12
|
+
readonly SKIPPED_BOOTSTRAP_IN_PROGRESS: "runner-bootstrap-skipped-bootstrap-in-progress";
|
|
13
|
+
readonly SKIPPED_RUNNER_PLATFORM: "runner-bootstrap-skipped-runner-platform";
|
|
14
|
+
readonly SKIPPED_GOAL_LOOP_TICK: "runner-bootstrap-skipped-goal-loop-tick";
|
|
15
|
+
readonly SKIPPED_JOBS_COMMAND: "runner-bootstrap-skipped-jobs-command";
|
|
16
|
+
readonly SKIPPED_RUNNER_COMMAND: "runner-bootstrap-skipped-runner-command";
|
|
17
|
+
readonly SKIPPED_NON_CONTINUITY_COMMAND: "runner-bootstrap-skipped-non-continuity-command";
|
|
18
|
+
};
|
|
19
|
+
export type RunnerBootstrapPolicyReasonCode = typeof RUNNER_BOOTSTRAP_POLICY_REASON_CODES[keyof typeof RUNNER_BOOTSTRAP_POLICY_REASON_CODES];
|
|
20
|
+
export type RunnerBootstrapCommandKind = 'goal' | 'loop' | 'jobs' | 'runner' | 'unknown';
|
|
21
|
+
export type RunnerBootstrapOperation = 'create' | 'start' | 'resume' | 'activate' | 'run' | 'run-once' | 'restart' | 'continue' | 'unpause' | 'status' | 'cancel' | 'pause' | 'report' | 'reports' | 'log' | 'logs' | 'tick' | 'unknown' | 'none';
|
|
22
|
+
export type RunnerBootstrapPolicyAction = 'required' | 'optional' | 'skipped';
|
|
23
|
+
export type RunnerBootstrapFailurePolicy = 'fail-closed' | 'fail-open' | 'not-applicable';
|
|
24
|
+
export interface RunnerBootstrapCommandIntent {
|
|
25
|
+
readonly kind: RunnerBootstrapCommandKind;
|
|
26
|
+
/** Canonical public operation token, never raw user text. */
|
|
27
|
+
readonly operation: RunnerBootstrapOperation;
|
|
28
|
+
/** Whether the leading public command token was recognized as an alias/number. */
|
|
29
|
+
readonly recognizedAlias: boolean;
|
|
30
|
+
readonly publicSafe: true;
|
|
31
|
+
}
|
|
32
|
+
export interface RunnerBootstrapPolicyContext {
|
|
33
|
+
readonly platformTarget?: string;
|
|
34
|
+
/** Explicit recursion guard set by future invoke integration. */
|
|
35
|
+
readonly bootstrapInProgress?: boolean;
|
|
36
|
+
/** Optional process-like environment, provided explicitly to keep the classifier pure. */
|
|
37
|
+
readonly environment?: Readonly<Record<string, string | undefined>>;
|
|
38
|
+
}
|
|
39
|
+
export interface RunnerBootstrapPolicyDecision {
|
|
40
|
+
readonly action: RunnerBootstrapPolicyAction;
|
|
41
|
+
readonly failurePolicy: RunnerBootstrapFailurePolicy;
|
|
42
|
+
readonly command: RunnerBootstrapCommandKind;
|
|
43
|
+
readonly operation: RunnerBootstrapOperation;
|
|
44
|
+
readonly reasonCodes: readonly RunnerBootstrapPolicyReasonCode[];
|
|
45
|
+
readonly publicSummary: string;
|
|
46
|
+
readonly publicSafe: true;
|
|
47
|
+
}
|
|
48
|
+
export declare function parseRunnerBootstrapCommandIntent(args: string): RunnerBootstrapCommandIntent;
|
|
49
|
+
export declare function classifyRunnerBootstrapPolicy(commandIntent: RunnerBootstrapCommandIntent, context?: RunnerBootstrapPolicyContext): RunnerBootstrapPolicyDecision;
|
|
50
|
+
export declare function classifyRunnerBootstrapPolicyFromArgs(args: string, context?: RunnerBootstrapPolicyContext): RunnerBootstrapPolicyDecision;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
const e={REQUIRED_DURABLE_COMMAND:"runner-bootstrap-required-durable-command",REQUIRED_UNKNOWN_GOAL_LOOP_OPERATION:"runner-bootstrap-required-unknown-goal-loop-operation",OPTIONAL_OPERATOR_COMMAND:"runner-bootstrap-optional-operator-command",SKIPPED_BOOTSTRAP_IN_PROGRESS:"runner-bootstrap-skipped-bootstrap-in-progress",SKIPPED_RUNNER_PLATFORM:"runner-bootstrap-skipped-runner-platform",SKIPPED_GOAL_LOOP_TICK:"runner-bootstrap-skipped-goal-loop-tick",SKIPPED_JOBS_COMMAND:"runner-bootstrap-skipped-jobs-command",SKIPPED_RUNNER_COMMAND:"runner-bootstrap-skipped-runner-command",SKIPPED_NON_CONTINUITY_COMMAND:"runner-bootstrap-skipped-non-continuity-command"},P=new Set(["goal","goals","durable-goal","continuity-goal","59"]),N=new Set(["loop","loops","durable-loop","continuity-loop","60"]),f=new Set(["jobs","job","continuity-jobs","61"]),R=new Set(["runner","neocortex-runner","continuity-runner","62"]),E=new Map([["goal-tick","goal"],["loop-tick","loop"]]),s=new Set(["create","start","resume","activate","run","run-once","restart","continue","unpause"]),p=new Set(["status","cancel","pause","report","reports","log","logs"]),S=new Set([...s,...p,"tick"]),A=/^@?(?:goal|loop|job)-[a-z0-9][a-z0-9._-]*$/i;function b(r){const o=d(r),n=l(o[0]);if(!n)return u("unknown","none",!1);const a=E.get(n);if(a)return u(a,"tick",!0);const i=T(n);return i==="unknown"?u("unknown","none",!1):u(i,O(_(o)),!0)}function k(r,o={}){if(C(o))return t(r,e.SKIPPED_BOOTSTRAP_IN_PROGRESS,"runner bootstrap skipped because a bootstrap guard is active.");if(D(o.platformTarget)==="runner")return t(r,e.SKIPPED_RUNNER_PLATFORM,"runner bootstrap skipped for runner platform invocation.");if((r.kind==="goal"||r.kind==="loop")&&r.operation==="tick")return t(r,e.SKIPPED_GOAL_LOOP_TICK,`runner bootstrap skipped for ${r.kind} tick operation.`);if(r.kind==="jobs")return t(r,e.SKIPPED_JOBS_COMMAND,"runner bootstrap skipped for jobs command.");if(r.kind==="runner")return t(r,e.SKIPPED_RUNNER_COMMAND,"runner bootstrap skipped for runner command.");if(r.kind!=="goal"&&r.kind!=="loop")return t(r,e.SKIPPED_NON_CONTINUITY_COMMAND,"runner bootstrap skipped for non-continuity command.");if(p.has(r.operation))return{action:"optional",failurePolicy:"fail-open",command:r.kind,operation:r.operation,reasonCodes:[e.OPTIONAL_OPERATOR_COMMAND],publicSummary:`runner bootstrap optional for ${r.kind} operator command.`,publicSafe:!0};const n=s.has(r.operation)||r.operation==="none"?e.REQUIRED_DURABLE_COMMAND:e.REQUIRED_UNKNOWN_GOAL_LOOP_OPERATION;return{action:"required",failurePolicy:"fail-closed",command:r.kind,operation:r.operation==="none"?"create":r.operation,reasonCodes:[n],publicSummary:`runner bootstrap required for durable ${r.kind} command.`,publicSafe:!0}}function M(r,o={}){return k(b(r),o)}function t(r,o,n){return{action:"skipped",failurePolicy:"not-applicable",command:r.kind,operation:r.operation,reasonCodes:[o],publicSummary:n,publicSafe:!0}}function u(r,o,n){return{kind:r,operation:o,recognizedAlias:n,publicSafe:!0}}function T(r){return P.has(r)?"goal":N.has(r)?"loop":f.has(r)?"jobs":R.has(r)?"runner":"unknown"}function O(r){const o=l(r);return o?S.has(o)?o:"unknown":"none"}function _(r){const o=r[1];if(o)return A.test(o)?r[2]:o}function d(r){return r.trim().split(/\s+/).filter(Boolean).slice(0,3)}function l(r){return(r??"").trim().toLowerCase().replace(/^\*/,"")}function D(r){return(r??"").trim().toLowerCase()}function C(r){return r.bootstrapInProgress?!0:c(r.environment?.NEOCORTEX_RUNNER_BOOTSTRAP_IN_PROGRESS)||c(r.environment?.NEOCORTEX_BOOTSTRAP_IN_PROGRESS)}function c(r){return/^(1|true|yes|on)$/i.test(r??"")}export{e as RUNNER_BOOTSTRAP_POLICY_REASON_CODES,k as classifyRunnerBootstrapPolicy,M as classifyRunnerBootstrapPolicyFromArgs,b as parseRunnerBootstrapCommandIntent};
|