botinabox 2.4.2 → 2.5.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/LICENSE +21 -21
- package/README.md +190 -190
- package/bin/botinabox.mjs +2 -2
- package/dist/channels/slack/index.d.ts +1 -1
- package/dist/{chat-pipeline-BWrtVqEP.d.ts → chat-pipeline-DuNX5WoL.d.ts} +3 -0
- package/dist/cli.js +0 -0
- package/dist/index.d.ts +11 -2
- package/dist/index.js +64 -27
- package/package.json +100 -99
- package/dist/channels/discord/adapter.d.ts +0 -32
- package/dist/channels/discord/adapter.js +0 -70
- package/dist/channels/discord/inbound.d.ts +0 -25
- package/dist/channels/discord/inbound.js +0 -24
- package/dist/channels/discord/models.d.ts +0 -8
- package/dist/channels/discord/models.js +0 -5
- package/dist/channels/discord/outbound.d.ts +0 -14
- package/dist/channels/discord/outbound.js +0 -38
- package/dist/channels/slack/adapter.d.ts +0 -33
- package/dist/channels/slack/adapter.js +0 -74
- package/dist/channels/slack/inbound.d.ts +0 -59
- package/dist/channels/slack/inbound.js +0 -96
- package/dist/channels/slack/models.d.ts +0 -9
- package/dist/channels/slack/models.js +0 -5
- package/dist/channels/slack/outbound.d.ts +0 -12
- package/dist/channels/slack/outbound.js +0 -18
- package/dist/channels/slack/transcribe.d.ts +0 -41
- package/dist/channels/slack/transcribe.js +0 -106
- package/dist/channels/webhook/adapter.d.ts +0 -23
- package/dist/channels/webhook/adapter.js +0 -86
- package/dist/channels/webhook/hmac.d.ts +0 -13
- package/dist/channels/webhook/hmac.js +0 -26
- package/dist/channels/webhook/models.d.ts +0 -9
- package/dist/channels/webhook/models.js +0 -5
- package/dist/channels/webhook/server.d.ts +0 -20
- package/dist/channels/webhook/server.js +0 -91
- package/dist/chat-pipeline-C-XlLGNl.d.ts +0 -648
- package/dist/chat-pipeline-CR1KF6eX.d.ts +0 -652
- package/dist/chat-pipeline-DisuC8SB.d.ts +0 -643
- package/dist/chunk-2LGXQPEA.js +0 -41
- package/dist/chunk-3X3YKI4T.js +0 -357
- package/dist/chunk-D47AIFOD.js +0 -351
- package/dist/chunk-DSNJKNEW.js +0 -328
- package/dist/chunk-GS2JFL6I.js +0 -144
- package/dist/chunk-J6S6QMUY.js +0 -144
- package/dist/chunk-QLA6YOFN.js +0 -22
- package/dist/chunk-UACT2WXX.js +0 -381
- package/dist/cli/templates/config.yml.d.ts +0 -7
- package/dist/cli/templates/config.yml.js +0 -61
- package/dist/cli/templates/env.d.ts +0 -1
- package/dist/cli/templates/env.js +0 -30
- package/dist/cli/templates/index.ts.d.ts +0 -2
- package/dist/cli/templates/index.ts.js +0 -30
- package/dist/cli/templates/package.json.d.ts +0 -5
- package/dist/cli/templates/package.json.js +0 -28
- package/dist/connector-DDahQw-2.d.ts +0 -63
- package/dist/connectors/google/calendar-connector.d.ts +0 -40
- package/dist/connectors/google/calendar-connector.js +0 -243
- package/dist/connectors/google/gmail-connector.d.ts +0 -42
- package/dist/connectors/google/gmail-connector.js +0 -345
- package/dist/connectors/google/oauth.d.ts +0 -48
- package/dist/connectors/google/oauth.js +0 -112
- package/dist/connectors/google/types.d.ts +0 -78
- package/dist/connectors/google/types.js +0 -2
- package/dist/core/chat/auto-discovery.d.ts +0 -16
- package/dist/core/chat/auto-discovery.js +0 -54
- package/dist/core/chat/channel-registry.d.ts +0 -45
- package/dist/core/chat/channel-registry.js +0 -96
- package/dist/core/chat/chat-pipeline.d.ts +0 -113
- package/dist/core/chat/chat-pipeline.js +0 -395
- package/dist/core/chat/chat-responder.d.ts +0 -90
- package/dist/core/chat/chat-responder.js +0 -185
- package/dist/core/chat/formatter.d.ts +0 -11
- package/dist/core/chat/formatter.js +0 -60
- package/dist/core/chat/index.d.ts +0 -24
- package/dist/core/chat/index.js +0 -18
- package/dist/core/chat/message-interpreter.d.ts +0 -91
- package/dist/core/chat/message-interpreter.js +0 -166
- package/dist/core/chat/message-store.d.ts +0 -66
- package/dist/core/chat/message-store.js +0 -131
- package/dist/core/chat/notification-queue.d.ts +0 -34
- package/dist/core/chat/notification-queue.js +0 -111
- package/dist/core/chat/pipeline.d.ts +0 -38
- package/dist/core/chat/pipeline.js +0 -89
- package/dist/core/chat/policies.d.ts +0 -16
- package/dist/core/chat/policies.js +0 -25
- package/dist/core/chat/routing.d.ts +0 -17
- package/dist/core/chat/routing.js +0 -36
- package/dist/core/chat/session-key.d.ts +0 -30
- package/dist/core/chat/session-key.js +0 -65
- package/dist/core/chat/session-manager.d.ts +0 -17
- package/dist/core/chat/session-manager.js +0 -23
- package/dist/core/chat/text-chunker.d.ts +0 -9
- package/dist/core/chat/text-chunker.js +0 -48
- package/dist/core/chat/triage-router.d.ts +0 -75
- package/dist/core/chat/triage-router.js +0 -142
- package/dist/core/chat/types.d.ts +0 -5
- package/dist/core/chat/types.js +0 -5
- package/dist/core/config/defaults.d.ts +0 -2
- package/dist/core/config/defaults.js +0 -38
- package/dist/core/config/index.d.ts +0 -6
- package/dist/core/config/index.js +0 -4
- package/dist/core/config/interpolate.d.ts +0 -5
- package/dist/core/config/interpolate.js +0 -27
- package/dist/core/config/loader.d.ts +0 -24
- package/dist/core/config/loader.js +0 -59
- package/dist/core/config/schema.d.ts +0 -5
- package/dist/core/config/schema.js +0 -119
- package/dist/core/data/core-entity-contexts.d.ts +0 -14
- package/dist/core/data/core-entity-contexts.js +0 -197
- package/dist/core/data/core-migrations.d.ts +0 -5
- package/dist/core/data/core-migrations.js +0 -45
- package/dist/core/data/core-schema.d.ts +0 -6
- package/dist/core/data/core-schema.js +0 -454
- package/dist/core/data/data-store.d.ts +0 -67
- package/dist/core/data/data-store.js +0 -218
- package/dist/core/data/domain-entity-contexts.d.ts +0 -29
- package/dist/core/data/domain-entity-contexts.js +0 -321
- package/dist/core/data/domain-schema.d.ts +0 -36
- package/dist/core/data/domain-schema.js +0 -323
- package/dist/core/data/index.d.ts +0 -7
- package/dist/core/data/index.js +0 -7
- package/dist/core/data/types.d.ts +0 -111
- package/dist/core/data/types.js +0 -1
- package/dist/core/hooks/hook-bus.d.ts +0 -18
- package/dist/core/hooks/hook-bus.js +0 -120
- package/dist/core/hooks/index.d.ts +0 -2
- package/dist/core/hooks/index.js +0 -1
- package/dist/core/hooks/types.d.ts +0 -19
- package/dist/core/hooks/types.js +0 -1
- package/dist/core/index.d.ts +0 -4
- package/dist/core/index.js +0 -4
- package/dist/core/llm/auto-discovery.d.ts +0 -11
- package/dist/core/llm/auto-discovery.js +0 -49
- package/dist/core/llm/cost-tracker.d.ts +0 -6
- package/dist/core/llm/cost-tracker.js +0 -38
- package/dist/core/llm/index.d.ts +0 -4
- package/dist/core/llm/index.js +0 -3
- package/dist/core/llm/model-router.d.ts +0 -25
- package/dist/core/llm/model-router.js +0 -49
- package/dist/core/llm/provider-registry.d.ts +0 -9
- package/dist/core/llm/provider-registry.js +0 -25
- package/dist/core/llm/types.d.ts +0 -2
- package/dist/core/llm/types.js +0 -2
- package/dist/core/orchestrator/adapters/api-adapter.d.ts +0 -34
- package/dist/core/orchestrator/adapters/api-adapter.js +0 -88
- package/dist/core/orchestrator/adapters/cli-adapter.d.ts +0 -22
- package/dist/core/orchestrator/adapters/cli-adapter.js +0 -69
- package/dist/core/orchestrator/adapters/deterministic-adapter.d.ts +0 -35
- package/dist/core/orchestrator/adapters/deterministic-adapter.js +0 -75
- package/dist/core/orchestrator/adapters/env-whitelist.d.ts +0 -4
- package/dist/core/orchestrator/adapters/env-whitelist.js +0 -27
- package/dist/core/orchestrator/adapters/output-extractor.d.ts +0 -11
- package/dist/core/orchestrator/adapters/output-extractor.js +0 -59
- package/dist/core/orchestrator/adapters/process-manager.d.ts +0 -15
- package/dist/core/orchestrator/adapters/process-manager.js +0 -26
- package/dist/core/orchestrator/adapters/tool-loop.d.ts +0 -22
- package/dist/core/orchestrator/adapters/tool-loop.js +0 -66
- package/dist/core/orchestrator/agent-registry.d.ts +0 -31
- package/dist/core/orchestrator/agent-registry.js +0 -135
- package/dist/core/orchestrator/budget-controller.d.ts +0 -19
- package/dist/core/orchestrator/budget-controller.js +0 -73
- package/dist/core/orchestrator/chain-guard.d.ts +0 -14
- package/dist/core/orchestrator/chain-guard.js +0 -23
- package/dist/core/orchestrator/circuit-breaker.d.ts +0 -65
- package/dist/core/orchestrator/circuit-breaker.js +0 -159
- package/dist/core/orchestrator/claude-stream-parser.d.ts +0 -31
- package/dist/core/orchestrator/claude-stream-parser.js +0 -99
- package/dist/core/orchestrator/config-revisions.d.ts +0 -6
- package/dist/core/orchestrator/config-revisions.js +0 -17
- package/dist/core/orchestrator/dependency-resolver.d.ts +0 -20
- package/dist/core/orchestrator/dependency-resolver.js +0 -78
- package/dist/core/orchestrator/governance-gate.d.ts +0 -110
- package/dist/core/orchestrator/governance-gate.js +0 -170
- package/dist/core/orchestrator/learning-pipeline.d.ts +0 -109
- package/dist/core/orchestrator/learning-pipeline.js +0 -249
- package/dist/core/orchestrator/loop-detector.d.ts +0 -51
- package/dist/core/orchestrator/loop-detector.js +0 -133
- package/dist/core/orchestrator/ndjson-logger.d.ts +0 -6
- package/dist/core/orchestrator/ndjson-logger.js +0 -18
- package/dist/core/orchestrator/permission-relay.d.ts +0 -72
- package/dist/core/orchestrator/permission-relay.js +0 -164
- package/dist/core/orchestrator/run-manager.d.ts +0 -31
- package/dist/core/orchestrator/run-manager.js +0 -178
- package/dist/core/orchestrator/scheduler.d.ts +0 -70
- package/dist/core/orchestrator/scheduler.js +0 -198
- package/dist/core/orchestrator/secret-store.d.ts +0 -57
- package/dist/core/orchestrator/secret-store.js +0 -171
- package/dist/core/orchestrator/session-manager.d.ts +0 -13
- package/dist/core/orchestrator/session-manager.js +0 -66
- package/dist/core/orchestrator/task-queue.d.ts +0 -34
- package/dist/core/orchestrator/task-queue.js +0 -83
- package/dist/core/orchestrator/template-interpolate.d.ts +0 -5
- package/dist/core/orchestrator/template-interpolate.js +0 -18
- package/dist/core/orchestrator/user-registry.d.ts +0 -47
- package/dist/core/orchestrator/user-registry.js +0 -76
- package/dist/core/orchestrator/wakeup-queue.d.ts +0 -9
- package/dist/core/orchestrator/wakeup-queue.js +0 -45
- package/dist/core/orchestrator/workflow-engine.d.ts +0 -47
- package/dist/core/orchestrator/workflow-engine.js +0 -204
- package/dist/core/security/audit.d.ts +0 -20
- package/dist/core/security/audit.js +0 -33
- package/dist/core/security/column-validator.d.ts +0 -20
- package/dist/core/security/column-validator.js +0 -37
- package/dist/core/security/index.d.ts +0 -5
- package/dist/core/security/index.js +0 -5
- package/dist/core/security/process-env.d.ts +0 -13
- package/dist/core/security/process-env.js +0 -49
- package/dist/core/security/sanitizer.d.ts +0 -11
- package/dist/core/security/sanitizer.js +0 -39
- package/dist/core/security/types.d.ts +0 -11
- package/dist/core/security/types.js +0 -1
- package/dist/core/update/auto-update.d.ts +0 -21
- package/dist/core/update/auto-update.js +0 -102
- package/dist/core/update/backup-manager.d.ts +0 -7
- package/dist/core/update/backup-manager.js +0 -24
- package/dist/core/update/index.d.ts +0 -8
- package/dist/core/update/index.js +0 -6
- package/dist/core/update/migration-hooks.d.ts +0 -11
- package/dist/core/update/migration-hooks.js +0 -10
- package/dist/core/update/types.d.ts +0 -11
- package/dist/core/update/types.js +0 -1
- package/dist/core/update/update-checker.d.ts +0 -11
- package/dist/core/update/update-checker.js +0 -63
- package/dist/core/update/update-manager.d.ts +0 -25
- package/dist/core/update/update-manager.js +0 -101
- package/dist/core/update/version-utils.d.ts +0 -6
- package/dist/core/update/version-utils.js +0 -34
- package/dist/gmail-connector-2FVYTQJH.js +0 -6
- package/dist/gmail-connector-MNUBRNFM.js +0 -6
- package/dist/gmail-connector-PS2VLGNE.js +0 -6
- package/dist/gmail-connector-ULSMN6X2.js +0 -6
- package/dist/gmail-connector-URRFX6A3.js +0 -6
- package/dist/inbound-AFBUPSPG.js +0 -10
- package/dist/inbound-AFOHYNUY.js +0 -6
- package/dist/inbound-CGIXRXGC.js +0 -8
- package/dist/inbound-MCOLRH6U.js +0 -10
- package/dist/inbound-SNEMBLGA.js +0 -6
- package/dist/inbound-ZJHAYVMF.js +0 -10
- package/dist/provider-qqJYv9nv.d.ts +0 -75
- package/dist/providers/anthropic/models.d.ts +0 -2
- package/dist/providers/anthropic/models.js +0 -29
- package/dist/providers/anthropic/provider.d.ts +0 -13
- package/dist/providers/anthropic/provider.js +0 -119
- package/dist/providers/anthropic/tool-converter.d.ts +0 -10
- package/dist/providers/anthropic/tool-converter.js +0 -7
- package/dist/providers/ollama/provider.d.ts +0 -17
- package/dist/providers/ollama/provider.js +0 -185
- package/dist/providers/openai/models.d.ts +0 -2
- package/dist/providers/openai/models.js +0 -29
- package/dist/providers/openai/provider.d.ts +0 -13
- package/dist/providers/openai/provider.js +0 -163
- package/dist/providers/openai/tool-converter.d.ts +0 -10
- package/dist/providers/openai/tool-converter.js +0 -10
- package/dist/shared/constants.d.ts +0 -50
- package/dist/shared/constants.js +0 -64
- package/dist/shared/index.d.ts +0 -14
- package/dist/shared/index.js +0 -14
- package/dist/shared/types/agent.d.ts +0 -36
- package/dist/shared/types/agent.js +0 -2
- package/dist/shared/types/channel.d.ts +0 -70
- package/dist/shared/types/channel.js +0 -2
- package/dist/shared/types/config.d.ts +0 -111
- package/dist/shared/types/config.js +0 -2
- package/dist/shared/types/connector.d.ts +0 -77
- package/dist/shared/types/connector.js +0 -2
- package/dist/shared/types/execution.d.ts +0 -29
- package/dist/shared/types/execution.js +0 -2
- package/dist/shared/types/provider.d.ts +0 -73
- package/dist/shared/types/provider.js +0 -2
- package/dist/shared/types/task.d.ts +0 -47
- package/dist/shared/types/task.js +0 -2
- package/dist/shared/types/workflow.d.ts +0 -39
- package/dist/shared/types/workflow.js +0 -2
- package/dist/shared/utils.d.ts +0 -6
- package/dist/shared/utils.js +0 -13
- package/dist/update-check.d.ts +0 -5
- package/dist/update-check.js +0 -56
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
/** Initial migration set for core tables */
|
|
2
|
-
export const CORE_MIGRATIONS = [
|
|
3
|
-
{
|
|
4
|
-
version: "001_initial_schema",
|
|
5
|
-
sql: `-- Initial schema is applied via DataStore.define() + init().
|
|
6
|
-
-- This migration is a no-op placeholder for version tracking.
|
|
7
|
-
SELECT 1;`,
|
|
8
|
-
},
|
|
9
|
-
{
|
|
10
|
-
version: "002_activity_log_indexes",
|
|
11
|
-
sql: `CREATE INDEX IF NOT EXISTS idx_activity_log_type ON activity_log(event_type, recorded_at);`,
|
|
12
|
-
},
|
|
13
|
-
{
|
|
14
|
-
version: "003_runs_cost_index",
|
|
15
|
-
sql: `CREATE INDEX IF NOT EXISTS idx_runs_cost ON runs(agent_id, completed_at) WHERE cost_cents > 0;`,
|
|
16
|
-
},
|
|
17
|
-
{
|
|
18
|
-
version: "004_schedules_table",
|
|
19
|
-
sql: `CREATE TABLE IF NOT EXISTS schedules (
|
|
20
|
-
id TEXT PRIMARY KEY,
|
|
21
|
-
name TEXT NOT NULL,
|
|
22
|
-
description TEXT,
|
|
23
|
-
type TEXT NOT NULL DEFAULT 'recurring',
|
|
24
|
-
cron TEXT,
|
|
25
|
-
run_at TEXT,
|
|
26
|
-
timezone TEXT DEFAULT 'UTC',
|
|
27
|
-
enabled INTEGER NOT NULL DEFAULT 1,
|
|
28
|
-
action TEXT NOT NULL,
|
|
29
|
-
action_config TEXT DEFAULT '{}',
|
|
30
|
-
last_fired_at TEXT,
|
|
31
|
-
next_fire_at TEXT,
|
|
32
|
-
created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
33
|
-
updated_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
34
|
-
deleted_at TEXT
|
|
35
|
-
)`,
|
|
36
|
-
},
|
|
37
|
-
{
|
|
38
|
-
version: "005_schedules_name_index",
|
|
39
|
-
sql: `CREATE UNIQUE INDEX IF NOT EXISTS idx_schedules_name ON schedules(name) WHERE deleted_at IS NULL`,
|
|
40
|
-
},
|
|
41
|
-
{
|
|
42
|
-
version: "006_schedules_next_index",
|
|
43
|
-
sql: `CREATE INDEX IF NOT EXISTS idx_schedules_next ON schedules(enabled, next_fire_at) WHERE deleted_at IS NULL`,
|
|
44
|
-
},
|
|
45
|
-
];
|
|
@@ -1,454 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Define all 18 core tables on a DataStore instance.
|
|
3
|
-
* Call before db.init().
|
|
4
|
-
*/
|
|
5
|
-
export function defineCoreTables(db) {
|
|
6
|
-
db.define("agents", {
|
|
7
|
-
columns: {
|
|
8
|
-
id: "TEXT PRIMARY KEY",
|
|
9
|
-
slug: "TEXT UNIQUE NOT NULL",
|
|
10
|
-
name: "TEXT NOT NULL",
|
|
11
|
-
role: "TEXT NOT NULL DEFAULT 'general'",
|
|
12
|
-
status: "TEXT NOT NULL DEFAULT 'idle'",
|
|
13
|
-
adapter: "TEXT NOT NULL",
|
|
14
|
-
adapter_config: "TEXT NOT NULL DEFAULT '{}'",
|
|
15
|
-
heartbeat_config: "TEXT NOT NULL DEFAULT '{}'",
|
|
16
|
-
budget_monthly_cents: "INTEGER NOT NULL DEFAULT 0",
|
|
17
|
-
spent_monthly_cents: "INTEGER NOT NULL DEFAULT 0",
|
|
18
|
-
reports_to: "TEXT",
|
|
19
|
-
cwd: "TEXT",
|
|
20
|
-
instructions_file: "TEXT",
|
|
21
|
-
created_at: "TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP",
|
|
22
|
-
updated_at: "TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP",
|
|
23
|
-
deleted_at: "TEXT",
|
|
24
|
-
},
|
|
25
|
-
});
|
|
26
|
-
db.define("tasks", {
|
|
27
|
-
columns: {
|
|
28
|
-
id: "TEXT PRIMARY KEY",
|
|
29
|
-
title: "TEXT NOT NULL",
|
|
30
|
-
description: "TEXT",
|
|
31
|
-
status: "TEXT NOT NULL DEFAULT 'backlog'",
|
|
32
|
-
priority: "INTEGER NOT NULL DEFAULT 5",
|
|
33
|
-
assignee_id: "TEXT",
|
|
34
|
-
created_by: "TEXT",
|
|
35
|
-
parent_id: "TEXT",
|
|
36
|
-
chain_origin_id: "TEXT",
|
|
37
|
-
chain_depth: "INTEGER NOT NULL DEFAULT 0",
|
|
38
|
-
workflow_run_id: "TEXT",
|
|
39
|
-
workflow_step_id: "TEXT",
|
|
40
|
-
tags: "TEXT NOT NULL DEFAULT '[]'",
|
|
41
|
-
context: "TEXT",
|
|
42
|
-
result: "TEXT",
|
|
43
|
-
retry_count: "INTEGER NOT NULL DEFAULT 0",
|
|
44
|
-
max_retries: "INTEGER NOT NULL DEFAULT 0",
|
|
45
|
-
next_retry_at: "TEXT",
|
|
46
|
-
followup_agent_id: "TEXT",
|
|
47
|
-
followup_template: "TEXT",
|
|
48
|
-
execution_run_id: "TEXT",
|
|
49
|
-
created_at: "TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP",
|
|
50
|
-
updated_at: "TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP",
|
|
51
|
-
deleted_at: "TEXT",
|
|
52
|
-
},
|
|
53
|
-
tableConstraints: [
|
|
54
|
-
"CREATE INDEX IF NOT EXISTS idx_tasks_status_assignee ON tasks(status, assignee_id)",
|
|
55
|
-
"CREATE INDEX IF NOT EXISTS idx_tasks_chain_origin ON tasks(chain_origin_id)",
|
|
56
|
-
],
|
|
57
|
-
});
|
|
58
|
-
db.define("runs", {
|
|
59
|
-
columns: {
|
|
60
|
-
id: "TEXT PRIMARY KEY",
|
|
61
|
-
task_id: "TEXT NOT NULL",
|
|
62
|
-
agent_id: "TEXT NOT NULL",
|
|
63
|
-
status: "TEXT NOT NULL DEFAULT 'queued'",
|
|
64
|
-
model: "TEXT",
|
|
65
|
-
adapter: "TEXT",
|
|
66
|
-
log_path: "TEXT",
|
|
67
|
-
exit_code: "INTEGER",
|
|
68
|
-
error_message: "TEXT",
|
|
69
|
-
cost_cents: "INTEGER NOT NULL DEFAULT 0",
|
|
70
|
-
input_tokens: "INTEGER NOT NULL DEFAULT 0",
|
|
71
|
-
output_tokens: "INTEGER NOT NULL DEFAULT 0",
|
|
72
|
-
started_at: "TEXT",
|
|
73
|
-
completed_at: "TEXT",
|
|
74
|
-
created_at: "TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP",
|
|
75
|
-
},
|
|
76
|
-
tableConstraints: [
|
|
77
|
-
"CREATE INDEX IF NOT EXISTS idx_runs_task_id ON runs(task_id)",
|
|
78
|
-
"CREATE INDEX IF NOT EXISTS idx_runs_agent_id ON runs(agent_id)",
|
|
79
|
-
"CREATE INDEX IF NOT EXISTS idx_runs_status ON runs(status)",
|
|
80
|
-
],
|
|
81
|
-
});
|
|
82
|
-
db.define("wakeups", {
|
|
83
|
-
columns: {
|
|
84
|
-
id: "TEXT PRIMARY KEY",
|
|
85
|
-
agent_id: "TEXT NOT NULL",
|
|
86
|
-
scheduled_at: "TEXT NOT NULL",
|
|
87
|
-
fired_at: "TEXT",
|
|
88
|
-
run_id: "TEXT",
|
|
89
|
-
context: "TEXT",
|
|
90
|
-
created_at: "TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP",
|
|
91
|
-
},
|
|
92
|
-
tableConstraints: [
|
|
93
|
-
"CREATE INDEX IF NOT EXISTS idx_wakeups_agent_scheduled ON wakeups(agent_id, scheduled_at)",
|
|
94
|
-
],
|
|
95
|
-
});
|
|
96
|
-
db.define("messages", {
|
|
97
|
-
columns: {
|
|
98
|
-
id: "TEXT PRIMARY KEY",
|
|
99
|
-
channel: "TEXT NOT NULL DEFAULT 'slack'",
|
|
100
|
-
direction: "TEXT NOT NULL DEFAULT 'inbound'",
|
|
101
|
-
from_user: "TEXT",
|
|
102
|
-
from_agent: "TEXT",
|
|
103
|
-
agent_id: "TEXT",
|
|
104
|
-
user_id: "TEXT",
|
|
105
|
-
body: "TEXT NOT NULL",
|
|
106
|
-
thread_id: "TEXT",
|
|
107
|
-
task_id: "TEXT",
|
|
108
|
-
created_at: "TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP",
|
|
109
|
-
deleted_at: "TEXT",
|
|
110
|
-
},
|
|
111
|
-
tableConstraints: [
|
|
112
|
-
"CREATE INDEX IF NOT EXISTS idx_messages_created ON messages(created_at)",
|
|
113
|
-
"CREATE INDEX IF NOT EXISTS idx_messages_thread ON messages(thread_id)",
|
|
114
|
-
"CREATE INDEX IF NOT EXISTS idx_messages_agent ON messages(agent_id)",
|
|
115
|
-
],
|
|
116
|
-
});
|
|
117
|
-
db.define("sessions", {
|
|
118
|
-
columns: {
|
|
119
|
-
id: "TEXT PRIMARY KEY",
|
|
120
|
-
agent_id: "TEXT NOT NULL",
|
|
121
|
-
channel: "TEXT NOT NULL",
|
|
122
|
-
peer_id: "TEXT NOT NULL",
|
|
123
|
-
user_id: "TEXT",
|
|
124
|
-
context: "TEXT NOT NULL DEFAULT '{}'",
|
|
125
|
-
message_count: "INTEGER NOT NULL DEFAULT 0",
|
|
126
|
-
last_message_at: "TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP",
|
|
127
|
-
created_at: "TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP",
|
|
128
|
-
expires_at: "TEXT",
|
|
129
|
-
},
|
|
130
|
-
tableConstraints: [
|
|
131
|
-
"CREATE UNIQUE INDEX IF NOT EXISTS idx_sessions_agent_channel_peer ON sessions(agent_id, channel, peer_id)",
|
|
132
|
-
],
|
|
133
|
-
});
|
|
134
|
-
db.define("skills", {
|
|
135
|
-
columns: {
|
|
136
|
-
id: "TEXT PRIMARY KEY",
|
|
137
|
-
slug: "TEXT UNIQUE NOT NULL",
|
|
138
|
-
name: "TEXT NOT NULL",
|
|
139
|
-
description: "TEXT",
|
|
140
|
-
category: "TEXT",
|
|
141
|
-
definition: "TEXT",
|
|
142
|
-
created_at: "TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP",
|
|
143
|
-
updated_at: "TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP",
|
|
144
|
-
deleted_at: "TEXT",
|
|
145
|
-
},
|
|
146
|
-
});
|
|
147
|
-
db.define("agent_skills", {
|
|
148
|
-
columns: {
|
|
149
|
-
agent_id: "TEXT NOT NULL",
|
|
150
|
-
skill_id: "TEXT NOT NULL",
|
|
151
|
-
granted_at: "TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP",
|
|
152
|
-
},
|
|
153
|
-
primaryKey: ["agent_id", "skill_id"],
|
|
154
|
-
tableConstraints: [
|
|
155
|
-
"FOREIGN KEY (agent_id) REFERENCES agents(id)",
|
|
156
|
-
"FOREIGN KEY (skill_id) REFERENCES skills(id)",
|
|
157
|
-
],
|
|
158
|
-
});
|
|
159
|
-
db.define("cost_events", {
|
|
160
|
-
columns: {
|
|
161
|
-
id: "TEXT PRIMARY KEY",
|
|
162
|
-
agent_id: "TEXT",
|
|
163
|
-
run_id: "TEXT",
|
|
164
|
-
model: "TEXT NOT NULL",
|
|
165
|
-
provider: "TEXT NOT NULL",
|
|
166
|
-
input_tokens: "INTEGER NOT NULL DEFAULT 0",
|
|
167
|
-
output_tokens: "INTEGER NOT NULL DEFAULT 0",
|
|
168
|
-
cost_cents: "INTEGER NOT NULL DEFAULT 0",
|
|
169
|
-
recorded_at: "TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP",
|
|
170
|
-
},
|
|
171
|
-
tableConstraints: [
|
|
172
|
-
"CREATE INDEX IF NOT EXISTS idx_cost_events_agent ON cost_events(agent_id, recorded_at)",
|
|
173
|
-
],
|
|
174
|
-
});
|
|
175
|
-
db.define("budget_policies", {
|
|
176
|
-
columns: {
|
|
177
|
-
id: "TEXT PRIMARY KEY",
|
|
178
|
-
agent_id: "TEXT",
|
|
179
|
-
scope: "TEXT NOT NULL DEFAULT 'global'",
|
|
180
|
-
monthly_limit_cents: "INTEGER NOT NULL",
|
|
181
|
-
warn_percent: "INTEGER NOT NULL DEFAULT 80",
|
|
182
|
-
created_at: "TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP",
|
|
183
|
-
updated_at: "TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP",
|
|
184
|
-
},
|
|
185
|
-
});
|
|
186
|
-
db.define("activity_log", {
|
|
187
|
-
columns: {
|
|
188
|
-
id: "TEXT PRIMARY KEY",
|
|
189
|
-
agent_id: "TEXT",
|
|
190
|
-
event_type: "TEXT NOT NULL",
|
|
191
|
-
payload: "TEXT NOT NULL DEFAULT '{}'",
|
|
192
|
-
recorded_at: "TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP",
|
|
193
|
-
},
|
|
194
|
-
tableConstraints: [
|
|
195
|
-
"CREATE INDEX IF NOT EXISTS idx_activity_log_recorded ON activity_log(recorded_at)",
|
|
196
|
-
"CREATE INDEX IF NOT EXISTS idx_activity_log_agent ON activity_log(agent_id, recorded_at)",
|
|
197
|
-
],
|
|
198
|
-
});
|
|
199
|
-
db.define("notifications", {
|
|
200
|
-
columns: {
|
|
201
|
-
id: "TEXT PRIMARY KEY",
|
|
202
|
-
channel: "TEXT NOT NULL",
|
|
203
|
-
recipient_id: "TEXT NOT NULL",
|
|
204
|
-
message: "TEXT NOT NULL",
|
|
205
|
-
status: "TEXT NOT NULL DEFAULT 'pending'",
|
|
206
|
-
retries: "INTEGER NOT NULL DEFAULT 0",
|
|
207
|
-
created_at: "TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP",
|
|
208
|
-
sent_at: "TEXT",
|
|
209
|
-
error: "TEXT",
|
|
210
|
-
},
|
|
211
|
-
tableConstraints: [
|
|
212
|
-
"CREATE INDEX IF NOT EXISTS idx_notifications_pending ON notifications(status, created_at)",
|
|
213
|
-
],
|
|
214
|
-
});
|
|
215
|
-
db.define("config_revisions", {
|
|
216
|
-
columns: {
|
|
217
|
-
id: "TEXT PRIMARY KEY",
|
|
218
|
-
version: "INTEGER NOT NULL",
|
|
219
|
-
config_yaml: "TEXT NOT NULL",
|
|
220
|
-
applied_by: "TEXT",
|
|
221
|
-
applied_at: "TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP",
|
|
222
|
-
notes: "TEXT",
|
|
223
|
-
},
|
|
224
|
-
});
|
|
225
|
-
db.define("workflows", {
|
|
226
|
-
columns: {
|
|
227
|
-
id: "TEXT PRIMARY KEY",
|
|
228
|
-
slug: "TEXT UNIQUE NOT NULL",
|
|
229
|
-
name: "TEXT NOT NULL",
|
|
230
|
-
description: "TEXT",
|
|
231
|
-
definition: "TEXT NOT NULL DEFAULT '{}'",
|
|
232
|
-
created_at: "TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP",
|
|
233
|
-
updated_at: "TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP",
|
|
234
|
-
deleted_at: "TEXT",
|
|
235
|
-
},
|
|
236
|
-
});
|
|
237
|
-
db.define("workflow_runs", {
|
|
238
|
-
columns: {
|
|
239
|
-
id: "TEXT PRIMARY KEY",
|
|
240
|
-
workflow_id: "TEXT NOT NULL",
|
|
241
|
-
trigger_task_id: "TEXT",
|
|
242
|
-
status: "TEXT NOT NULL DEFAULT 'running'",
|
|
243
|
-
current_step: "TEXT",
|
|
244
|
-
step_results: "TEXT NOT NULL DEFAULT '{}'",
|
|
245
|
-
error: "TEXT",
|
|
246
|
-
started_at: "TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP",
|
|
247
|
-
completed_at: "TEXT",
|
|
248
|
-
},
|
|
249
|
-
tableConstraints: [
|
|
250
|
-
"CREATE INDEX IF NOT EXISTS idx_workflow_runs_workflow ON workflow_runs(workflow_id, status)",
|
|
251
|
-
],
|
|
252
|
-
});
|
|
253
|
-
db.define("update_history", {
|
|
254
|
-
columns: {
|
|
255
|
-
id: "TEXT PRIMARY KEY",
|
|
256
|
-
from_version: "TEXT NOT NULL",
|
|
257
|
-
to_version: "TEXT NOT NULL",
|
|
258
|
-
status: "TEXT NOT NULL DEFAULT 'pending'",
|
|
259
|
-
migration_log: "TEXT",
|
|
260
|
-
applied_at: "TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP",
|
|
261
|
-
rolled_back_at: "TEXT",
|
|
262
|
-
},
|
|
263
|
-
});
|
|
264
|
-
// --- Protected primitives (v0.2.0) ---
|
|
265
|
-
db.define("users", {
|
|
266
|
-
columns: {
|
|
267
|
-
id: "TEXT PRIMARY KEY",
|
|
268
|
-
org_id: "TEXT",
|
|
269
|
-
name: "TEXT NOT NULL",
|
|
270
|
-
email: "TEXT",
|
|
271
|
-
role: "TEXT",
|
|
272
|
-
title: "TEXT",
|
|
273
|
-
external_id: "TEXT",
|
|
274
|
-
channel: "TEXT",
|
|
275
|
-
timezone: "TEXT",
|
|
276
|
-
preferences: "TEXT NOT NULL DEFAULT '{}'",
|
|
277
|
-
notes: "TEXT",
|
|
278
|
-
created_at: "TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP",
|
|
279
|
-
updated_at: "TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP",
|
|
280
|
-
deleted_at: "TEXT",
|
|
281
|
-
},
|
|
282
|
-
tableConstraints: [
|
|
283
|
-
"CREATE UNIQUE INDEX IF NOT EXISTS idx_users_email ON users(email) WHERE email IS NOT NULL AND deleted_at IS NULL",
|
|
284
|
-
"CREATE INDEX IF NOT EXISTS idx_users_external_id ON users(external_id) WHERE deleted_at IS NULL",
|
|
285
|
-
],
|
|
286
|
-
});
|
|
287
|
-
db.define("user_identities", {
|
|
288
|
-
columns: {
|
|
289
|
-
id: "TEXT PRIMARY KEY",
|
|
290
|
-
user_id: "TEXT NOT NULL",
|
|
291
|
-
channel: "TEXT NOT NULL",
|
|
292
|
-
external_id: "TEXT NOT NULL",
|
|
293
|
-
display_name: "TEXT",
|
|
294
|
-
verified: "INTEGER NOT NULL DEFAULT 0",
|
|
295
|
-
created_at: "TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP",
|
|
296
|
-
},
|
|
297
|
-
tableConstraints: [
|
|
298
|
-
"CREATE UNIQUE INDEX IF NOT EXISTS idx_user_identities_channel_ext ON user_identities(channel, external_id)",
|
|
299
|
-
"FOREIGN KEY (user_id) REFERENCES users(id)",
|
|
300
|
-
],
|
|
301
|
-
});
|
|
302
|
-
db.define("schedules", {
|
|
303
|
-
columns: {
|
|
304
|
-
id: "TEXT PRIMARY KEY",
|
|
305
|
-
name: "TEXT NOT NULL",
|
|
306
|
-
description: "TEXT",
|
|
307
|
-
type: "TEXT NOT NULL DEFAULT 'recurring'",
|
|
308
|
-
cron: "TEXT",
|
|
309
|
-
run_at: "TEXT",
|
|
310
|
-
timezone: "TEXT DEFAULT 'UTC'",
|
|
311
|
-
enabled: "INTEGER NOT NULL DEFAULT 1",
|
|
312
|
-
action: "TEXT NOT NULL",
|
|
313
|
-
action_config: "TEXT DEFAULT '{}'",
|
|
314
|
-
last_fired_at: "TEXT",
|
|
315
|
-
next_fire_at: "TEXT",
|
|
316
|
-
created_at: "TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP",
|
|
317
|
-
updated_at: "TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP",
|
|
318
|
-
deleted_at: "TEXT",
|
|
319
|
-
},
|
|
320
|
-
tableConstraints: [
|
|
321
|
-
"CREATE UNIQUE INDEX IF NOT EXISTS idx_schedules_name ON schedules(name) WHERE deleted_at IS NULL",
|
|
322
|
-
"CREATE INDEX IF NOT EXISTS idx_schedules_next ON schedules(enabled, next_fire_at) WHERE deleted_at IS NULL",
|
|
323
|
-
],
|
|
324
|
-
});
|
|
325
|
-
db.define("secrets", {
|
|
326
|
-
columns: {
|
|
327
|
-
id: "TEXT PRIMARY KEY",
|
|
328
|
-
org_id: "TEXT",
|
|
329
|
-
name: "TEXT NOT NULL",
|
|
330
|
-
type: "TEXT NOT NULL DEFAULT 'api_key'",
|
|
331
|
-
environment: "TEXT NOT NULL DEFAULT 'production'",
|
|
332
|
-
value: "TEXT",
|
|
333
|
-
location: "TEXT",
|
|
334
|
-
description: "TEXT",
|
|
335
|
-
rotation_schedule: "TEXT",
|
|
336
|
-
expires_at: "TEXT",
|
|
337
|
-
notes: "TEXT",
|
|
338
|
-
created_at: "TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP",
|
|
339
|
-
updated_at: "TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP",
|
|
340
|
-
deleted_at: "TEXT",
|
|
341
|
-
},
|
|
342
|
-
tableConstraints: [
|
|
343
|
-
"CREATE UNIQUE INDEX IF NOT EXISTS idx_secrets_name_env ON secrets(name, environment, org_id) WHERE deleted_at IS NULL",
|
|
344
|
-
],
|
|
345
|
-
});
|
|
346
|
-
// --- Learning pipeline (v1.6.0) ---
|
|
347
|
-
db.define("feedback", {
|
|
348
|
-
columns: {
|
|
349
|
-
id: "TEXT PRIMARY KEY",
|
|
350
|
-
agent_id: "TEXT NOT NULL",
|
|
351
|
-
task_id: "TEXT",
|
|
352
|
-
issue: "TEXT NOT NULL",
|
|
353
|
-
root_cause: "TEXT",
|
|
354
|
-
severity: "TEXT NOT NULL DEFAULT 'medium'",
|
|
355
|
-
repeatable: "INTEGER NOT NULL DEFAULT 0",
|
|
356
|
-
accuracy_score: "REAL",
|
|
357
|
-
efficiency_score: "REAL",
|
|
358
|
-
tags: "TEXT NOT NULL DEFAULT '[]'",
|
|
359
|
-
created_at: "TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP",
|
|
360
|
-
},
|
|
361
|
-
tableConstraints: [
|
|
362
|
-
"CREATE INDEX IF NOT EXISTS idx_feedback_agent ON feedback(agent_id, created_at)",
|
|
363
|
-
"CREATE INDEX IF NOT EXISTS idx_feedback_issue ON feedback(issue)",
|
|
364
|
-
],
|
|
365
|
-
});
|
|
366
|
-
db.define("playbooks", {
|
|
367
|
-
columns: {
|
|
368
|
-
id: "TEXT PRIMARY KEY",
|
|
369
|
-
pattern: "TEXT NOT NULL",
|
|
370
|
-
rule: "TEXT NOT NULL",
|
|
371
|
-
feedback_ids: "TEXT NOT NULL DEFAULT '[]'",
|
|
372
|
-
project_scoped: "INTEGER NOT NULL DEFAULT 1",
|
|
373
|
-
created_at: "TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP",
|
|
374
|
-
updated_at: "TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP",
|
|
375
|
-
deleted_at: "TEXT",
|
|
376
|
-
},
|
|
377
|
-
tableConstraints: [
|
|
378
|
-
"CREATE INDEX IF NOT EXISTS idx_playbooks_pattern ON playbooks(pattern)",
|
|
379
|
-
],
|
|
380
|
-
});
|
|
381
|
-
db.define("agent_playbooks", {
|
|
382
|
-
columns: {
|
|
383
|
-
agent_id: "TEXT NOT NULL",
|
|
384
|
-
playbook_id: "TEXT NOT NULL",
|
|
385
|
-
assigned_at: "TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP",
|
|
386
|
-
},
|
|
387
|
-
primaryKey: ["agent_id", "playbook_id"],
|
|
388
|
-
tableConstraints: [
|
|
389
|
-
"FOREIGN KEY (agent_id) REFERENCES agents(id)",
|
|
390
|
-
"FOREIGN KEY (playbook_id) REFERENCES playbooks(id)",
|
|
391
|
-
],
|
|
392
|
-
});
|
|
393
|
-
// --- Chat layer (v1.7.0) ---
|
|
394
|
-
db.define("message_attachments", {
|
|
395
|
-
columns: {
|
|
396
|
-
id: "TEXT PRIMARY KEY",
|
|
397
|
-
message_id: "TEXT NOT NULL",
|
|
398
|
-
file_type: "TEXT NOT NULL DEFAULT 'file'",
|
|
399
|
-
filename: "TEXT",
|
|
400
|
-
mime_type: "TEXT",
|
|
401
|
-
size_bytes: "INTEGER",
|
|
402
|
-
contents: "TEXT",
|
|
403
|
-
summary: "TEXT",
|
|
404
|
-
url: "TEXT",
|
|
405
|
-
created_at: "TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP",
|
|
406
|
-
},
|
|
407
|
-
tableConstraints: [
|
|
408
|
-
"CREATE INDEX IF NOT EXISTS idx_message_attachments_message ON message_attachments(message_id)",
|
|
409
|
-
"FOREIGN KEY (message_id) REFERENCES messages(id)",
|
|
410
|
-
],
|
|
411
|
-
});
|
|
412
|
-
db.define("thread_task_map", {
|
|
413
|
-
columns: {
|
|
414
|
-
id: "TEXT PRIMARY KEY",
|
|
415
|
-
thread_ts: "TEXT NOT NULL",
|
|
416
|
-
channel_id: "TEXT NOT NULL",
|
|
417
|
-
task_id: "TEXT NOT NULL",
|
|
418
|
-
created_at: "TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP",
|
|
419
|
-
},
|
|
420
|
-
tableConstraints: [
|
|
421
|
-
"CREATE UNIQUE INDEX IF NOT EXISTS idx_thread_task_map_thread ON thread_task_map(thread_ts, channel_id)",
|
|
422
|
-
"CREATE INDEX IF NOT EXISTS idx_thread_task_map_task ON thread_task_map(task_id)",
|
|
423
|
-
],
|
|
424
|
-
});
|
|
425
|
-
db.define("message_dedup", {
|
|
426
|
-
columns: {
|
|
427
|
-
id: "TEXT PRIMARY KEY",
|
|
428
|
-
content_hash: "TEXT NOT NULL",
|
|
429
|
-
channel_id: "TEXT NOT NULL",
|
|
430
|
-
created_at: "TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP",
|
|
431
|
-
},
|
|
432
|
-
tableConstraints: [
|
|
433
|
-
"CREATE INDEX IF NOT EXISTS idx_message_dedup_hash ON message_dedup(content_hash, created_at)",
|
|
434
|
-
],
|
|
435
|
-
});
|
|
436
|
-
db.define("memories", {
|
|
437
|
-
columns: {
|
|
438
|
-
id: "TEXT PRIMARY KEY",
|
|
439
|
-
message_id: "TEXT",
|
|
440
|
-
user_id: "TEXT",
|
|
441
|
-
summary: "TEXT NOT NULL",
|
|
442
|
-
contents: "TEXT NOT NULL",
|
|
443
|
-
tags: "TEXT NOT NULL DEFAULT '[]'",
|
|
444
|
-
category: "TEXT",
|
|
445
|
-
created_at: "TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP",
|
|
446
|
-
updated_at: "TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP",
|
|
447
|
-
deleted_at: "TEXT",
|
|
448
|
-
},
|
|
449
|
-
tableConstraints: [
|
|
450
|
-
"CREATE INDEX IF NOT EXISTS idx_memories_user ON memories(user_id, created_at)",
|
|
451
|
-
"CREATE INDEX IF NOT EXISTS idx_memories_message ON memories(message_id)",
|
|
452
|
-
],
|
|
453
|
-
});
|
|
454
|
-
}
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
import type { HookBus } from '../hooks/hook-bus.js';
|
|
2
|
-
import type { EntityContextDef, PkLookup, QueryOptions, Row, SeedItem, TableDefinition, TableInfoRow } from './types.js';
|
|
3
|
-
export declare class DataStoreError extends Error {
|
|
4
|
-
constructor(message: string);
|
|
5
|
-
}
|
|
6
|
-
/**
|
|
7
|
-
* Thin wrapper around Lattice that provides the botinabox DataStore API.
|
|
8
|
-
*
|
|
9
|
-
* Delegates all data operations to the latticesql package. Application-level
|
|
10
|
-
* events (task.created, run.completed, etc.) remain on the HookBus — they are
|
|
11
|
-
* emitted by orchestrator modules, not the data layer.
|
|
12
|
-
*/
|
|
13
|
-
export declare class DataStore {
|
|
14
|
-
private lattice;
|
|
15
|
-
private readonly hooks;
|
|
16
|
-
private readonly outputDir;
|
|
17
|
-
private _initialized;
|
|
18
|
-
private readonly deferredStatements;
|
|
19
|
-
constructor(opts: {
|
|
20
|
-
dbPath: string;
|
|
21
|
-
outputDir?: string;
|
|
22
|
-
wal?: boolean;
|
|
23
|
-
hooks?: HookBus;
|
|
24
|
-
});
|
|
25
|
-
/**
|
|
26
|
-
* Register a table definition. Must be called before init().
|
|
27
|
-
*
|
|
28
|
-
* tableConstraints may contain both inline constraints (FOREIGN KEY, UNIQUE)
|
|
29
|
-
* and standalone SQL statements (CREATE INDEX). Standalone statements are
|
|
30
|
-
* deferred and executed after init() creates the tables.
|
|
31
|
-
*/
|
|
32
|
-
define(name: string, def: TableDefinition): void;
|
|
33
|
-
/**
|
|
34
|
-
* Register an entity context definition for per-entity file rendering.
|
|
35
|
-
*/
|
|
36
|
-
defineEntityContext(name: string, def: EntityContextDef): void;
|
|
37
|
-
init(opts?: {
|
|
38
|
-
migrations?: Array<{
|
|
39
|
-
version: string;
|
|
40
|
-
sql: string;
|
|
41
|
-
}>;
|
|
42
|
-
}): Promise<void>;
|
|
43
|
-
private assertInitialized;
|
|
44
|
-
insert(table: string, row: Row): Promise<Row>;
|
|
45
|
-
upsert(table: string, row: Row): Promise<Row>;
|
|
46
|
-
update(table: string, pk: PkLookup, changes: Row): Promise<Row>;
|
|
47
|
-
delete(table: string, pk: PkLookup): Promise<void>;
|
|
48
|
-
/**
|
|
49
|
-
* Get a single row by primary key.
|
|
50
|
-
* Returns undefined if not found (Lattice returns null).
|
|
51
|
-
*/
|
|
52
|
-
get(table: string, pk: PkLookup): Promise<Row | undefined>;
|
|
53
|
-
query(table: string, opts?: QueryOptions): Promise<Row[]>;
|
|
54
|
-
count(table: string, opts?: QueryOptions): Promise<number>;
|
|
55
|
-
link(junctionTable: string, row: Row): Promise<void>;
|
|
56
|
-
unlink(junctionTable: string, row: Row): Promise<void>;
|
|
57
|
-
migrate(migrations: Array<{
|
|
58
|
-
version: string;
|
|
59
|
-
sql: string;
|
|
60
|
-
}>): Promise<void>;
|
|
61
|
-
seed(items: SeedItem[]): Promise<void>;
|
|
62
|
-
render(): Promise<void>;
|
|
63
|
-
reconcile(): Promise<void>;
|
|
64
|
-
tableInfo(table: string): TableInfoRow[];
|
|
65
|
-
close(): void;
|
|
66
|
-
on(event: string, handler: (context: Record<string, unknown>) => void): void;
|
|
67
|
-
}
|