botinabox 2.5.2 → 2.6.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.
Files changed (277) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +190 -190
  3. package/bin/botinabox.mjs +1 -1
  4. package/dist/{chunk-UACT2WXX.js → chunk-7AGWGYZC.js} +43 -5
  5. package/dist/cli.js +1 -1
  6. package/dist/connectors/google/index.d.ts +10 -1
  7. package/dist/connectors/google/index.js +1 -1
  8. package/dist/{gmail-connector-2FVYTQJH.js → gmail-connector-VP5FF56J.js} +2 -1
  9. package/dist/index.d.ts +64 -1
  10. package/dist/index.js +44 -10
  11. package/package.json +100 -100
  12. package/dist/channels/discord/adapter.d.ts +0 -32
  13. package/dist/channels/discord/adapter.js +0 -70
  14. package/dist/channels/discord/inbound.d.ts +0 -25
  15. package/dist/channels/discord/inbound.js +0 -24
  16. package/dist/channels/discord/models.d.ts +0 -8
  17. package/dist/channels/discord/models.js +0 -5
  18. package/dist/channels/discord/outbound.d.ts +0 -14
  19. package/dist/channels/discord/outbound.js +0 -38
  20. package/dist/channels/slack/adapter.d.ts +0 -33
  21. package/dist/channels/slack/adapter.js +0 -74
  22. package/dist/channels/slack/inbound.d.ts +0 -59
  23. package/dist/channels/slack/inbound.js +0 -96
  24. package/dist/channels/slack/models.d.ts +0 -9
  25. package/dist/channels/slack/models.js +0 -5
  26. package/dist/channels/slack/outbound.d.ts +0 -12
  27. package/dist/channels/slack/outbound.js +0 -18
  28. package/dist/channels/slack/transcribe.d.ts +0 -41
  29. package/dist/channels/slack/transcribe.js +0 -106
  30. package/dist/channels/webhook/adapter.d.ts +0 -23
  31. package/dist/channels/webhook/adapter.js +0 -86
  32. package/dist/channels/webhook/hmac.d.ts +0 -13
  33. package/dist/channels/webhook/hmac.js +0 -26
  34. package/dist/channels/webhook/models.d.ts +0 -9
  35. package/dist/channels/webhook/models.js +0 -5
  36. package/dist/channels/webhook/server.d.ts +0 -20
  37. package/dist/channels/webhook/server.js +0 -91
  38. package/dist/chat-pipeline-C-XlLGNl.d.ts +0 -648
  39. package/dist/chat-pipeline-CR1KF6eX.d.ts +0 -652
  40. package/dist/chat-pipeline-DisuC8SB.d.ts +0 -643
  41. package/dist/chunk-2LGXQPEA.js +0 -41
  42. package/dist/chunk-3X3YKI4T.js +0 -357
  43. package/dist/chunk-D47AIFOD.js +0 -351
  44. package/dist/chunk-DSNJKNEW.js +0 -328
  45. package/dist/chunk-GS2JFL6I.js +0 -144
  46. package/dist/chunk-J6S6QMUY.js +0 -144
  47. package/dist/chunk-QLA6YOFN.js +0 -22
  48. package/dist/cli/templates/config.yml.d.ts +0 -7
  49. package/dist/cli/templates/config.yml.js +0 -61
  50. package/dist/cli/templates/env.d.ts +0 -1
  51. package/dist/cli/templates/env.js +0 -30
  52. package/dist/cli/templates/index.ts.d.ts +0 -2
  53. package/dist/cli/templates/index.ts.js +0 -30
  54. package/dist/cli/templates/package.json.d.ts +0 -5
  55. package/dist/cli/templates/package.json.js +0 -28
  56. package/dist/connector-DDahQw-2.d.ts +0 -63
  57. package/dist/connectors/google/calendar-connector.d.ts +0 -40
  58. package/dist/connectors/google/calendar-connector.js +0 -243
  59. package/dist/connectors/google/gmail-connector.d.ts +0 -42
  60. package/dist/connectors/google/gmail-connector.js +0 -345
  61. package/dist/connectors/google/oauth.d.ts +0 -48
  62. package/dist/connectors/google/oauth.js +0 -112
  63. package/dist/connectors/google/types.d.ts +0 -78
  64. package/dist/connectors/google/types.js +0 -2
  65. package/dist/core/chat/auto-discovery.d.ts +0 -16
  66. package/dist/core/chat/auto-discovery.js +0 -54
  67. package/dist/core/chat/channel-registry.d.ts +0 -45
  68. package/dist/core/chat/channel-registry.js +0 -96
  69. package/dist/core/chat/chat-pipeline.d.ts +0 -113
  70. package/dist/core/chat/chat-pipeline.js +0 -395
  71. package/dist/core/chat/chat-responder.d.ts +0 -90
  72. package/dist/core/chat/chat-responder.js +0 -185
  73. package/dist/core/chat/formatter.d.ts +0 -11
  74. package/dist/core/chat/formatter.js +0 -60
  75. package/dist/core/chat/index.d.ts +0 -24
  76. package/dist/core/chat/index.js +0 -18
  77. package/dist/core/chat/message-interpreter.d.ts +0 -91
  78. package/dist/core/chat/message-interpreter.js +0 -166
  79. package/dist/core/chat/message-store.d.ts +0 -66
  80. package/dist/core/chat/message-store.js +0 -131
  81. package/dist/core/chat/notification-queue.d.ts +0 -34
  82. package/dist/core/chat/notification-queue.js +0 -111
  83. package/dist/core/chat/pipeline.d.ts +0 -38
  84. package/dist/core/chat/pipeline.js +0 -89
  85. package/dist/core/chat/policies.d.ts +0 -16
  86. package/dist/core/chat/policies.js +0 -25
  87. package/dist/core/chat/routing.d.ts +0 -17
  88. package/dist/core/chat/routing.js +0 -36
  89. package/dist/core/chat/session-key.d.ts +0 -30
  90. package/dist/core/chat/session-key.js +0 -65
  91. package/dist/core/chat/session-manager.d.ts +0 -17
  92. package/dist/core/chat/session-manager.js +0 -23
  93. package/dist/core/chat/text-chunker.d.ts +0 -9
  94. package/dist/core/chat/text-chunker.js +0 -48
  95. package/dist/core/chat/triage-router.d.ts +0 -75
  96. package/dist/core/chat/triage-router.js +0 -142
  97. package/dist/core/chat/types.d.ts +0 -5
  98. package/dist/core/chat/types.js +0 -5
  99. package/dist/core/config/defaults.d.ts +0 -2
  100. package/dist/core/config/defaults.js +0 -38
  101. package/dist/core/config/index.d.ts +0 -6
  102. package/dist/core/config/index.js +0 -4
  103. package/dist/core/config/interpolate.d.ts +0 -5
  104. package/dist/core/config/interpolate.js +0 -27
  105. package/dist/core/config/loader.d.ts +0 -24
  106. package/dist/core/config/loader.js +0 -59
  107. package/dist/core/config/schema.d.ts +0 -5
  108. package/dist/core/config/schema.js +0 -119
  109. package/dist/core/data/core-entity-contexts.d.ts +0 -14
  110. package/dist/core/data/core-entity-contexts.js +0 -197
  111. package/dist/core/data/core-migrations.d.ts +0 -5
  112. package/dist/core/data/core-migrations.js +0 -45
  113. package/dist/core/data/core-schema.d.ts +0 -6
  114. package/dist/core/data/core-schema.js +0 -454
  115. package/dist/core/data/data-store.d.ts +0 -67
  116. package/dist/core/data/data-store.js +0 -218
  117. package/dist/core/data/domain-entity-contexts.d.ts +0 -29
  118. package/dist/core/data/domain-entity-contexts.js +0 -321
  119. package/dist/core/data/domain-schema.d.ts +0 -36
  120. package/dist/core/data/domain-schema.js +0 -323
  121. package/dist/core/data/index.d.ts +0 -7
  122. package/dist/core/data/index.js +0 -7
  123. package/dist/core/data/types.d.ts +0 -111
  124. package/dist/core/data/types.js +0 -1
  125. package/dist/core/hooks/hook-bus.d.ts +0 -18
  126. package/dist/core/hooks/hook-bus.js +0 -120
  127. package/dist/core/hooks/index.d.ts +0 -2
  128. package/dist/core/hooks/index.js +0 -1
  129. package/dist/core/hooks/types.d.ts +0 -19
  130. package/dist/core/hooks/types.js +0 -1
  131. package/dist/core/index.d.ts +0 -4
  132. package/dist/core/index.js +0 -4
  133. package/dist/core/llm/auto-discovery.d.ts +0 -11
  134. package/dist/core/llm/auto-discovery.js +0 -49
  135. package/dist/core/llm/cost-tracker.d.ts +0 -6
  136. package/dist/core/llm/cost-tracker.js +0 -38
  137. package/dist/core/llm/index.d.ts +0 -4
  138. package/dist/core/llm/index.js +0 -3
  139. package/dist/core/llm/model-router.d.ts +0 -25
  140. package/dist/core/llm/model-router.js +0 -49
  141. package/dist/core/llm/provider-registry.d.ts +0 -9
  142. package/dist/core/llm/provider-registry.js +0 -25
  143. package/dist/core/llm/types.d.ts +0 -2
  144. package/dist/core/llm/types.js +0 -2
  145. package/dist/core/orchestrator/adapters/api-adapter.d.ts +0 -34
  146. package/dist/core/orchestrator/adapters/api-adapter.js +0 -88
  147. package/dist/core/orchestrator/adapters/cli-adapter.d.ts +0 -22
  148. package/dist/core/orchestrator/adapters/cli-adapter.js +0 -69
  149. package/dist/core/orchestrator/adapters/deterministic-adapter.d.ts +0 -35
  150. package/dist/core/orchestrator/adapters/deterministic-adapter.js +0 -75
  151. package/dist/core/orchestrator/adapters/env-whitelist.d.ts +0 -4
  152. package/dist/core/orchestrator/adapters/env-whitelist.js +0 -27
  153. package/dist/core/orchestrator/adapters/output-extractor.d.ts +0 -11
  154. package/dist/core/orchestrator/adapters/output-extractor.js +0 -59
  155. package/dist/core/orchestrator/adapters/process-manager.d.ts +0 -15
  156. package/dist/core/orchestrator/adapters/process-manager.js +0 -26
  157. package/dist/core/orchestrator/adapters/tool-loop.d.ts +0 -22
  158. package/dist/core/orchestrator/adapters/tool-loop.js +0 -66
  159. package/dist/core/orchestrator/agent-registry.d.ts +0 -31
  160. package/dist/core/orchestrator/agent-registry.js +0 -135
  161. package/dist/core/orchestrator/budget-controller.d.ts +0 -19
  162. package/dist/core/orchestrator/budget-controller.js +0 -73
  163. package/dist/core/orchestrator/chain-guard.d.ts +0 -14
  164. package/dist/core/orchestrator/chain-guard.js +0 -23
  165. package/dist/core/orchestrator/circuit-breaker.d.ts +0 -65
  166. package/dist/core/orchestrator/circuit-breaker.js +0 -159
  167. package/dist/core/orchestrator/claude-stream-parser.d.ts +0 -31
  168. package/dist/core/orchestrator/claude-stream-parser.js +0 -99
  169. package/dist/core/orchestrator/config-revisions.d.ts +0 -6
  170. package/dist/core/orchestrator/config-revisions.js +0 -17
  171. package/dist/core/orchestrator/dependency-resolver.d.ts +0 -20
  172. package/dist/core/orchestrator/dependency-resolver.js +0 -78
  173. package/dist/core/orchestrator/governance-gate.d.ts +0 -110
  174. package/dist/core/orchestrator/governance-gate.js +0 -170
  175. package/dist/core/orchestrator/learning-pipeline.d.ts +0 -109
  176. package/dist/core/orchestrator/learning-pipeline.js +0 -249
  177. package/dist/core/orchestrator/loop-detector.d.ts +0 -51
  178. package/dist/core/orchestrator/loop-detector.js +0 -133
  179. package/dist/core/orchestrator/ndjson-logger.d.ts +0 -6
  180. package/dist/core/orchestrator/ndjson-logger.js +0 -18
  181. package/dist/core/orchestrator/permission-relay.d.ts +0 -72
  182. package/dist/core/orchestrator/permission-relay.js +0 -164
  183. package/dist/core/orchestrator/run-manager.d.ts +0 -31
  184. package/dist/core/orchestrator/run-manager.js +0 -178
  185. package/dist/core/orchestrator/scheduler.d.ts +0 -70
  186. package/dist/core/orchestrator/scheduler.js +0 -198
  187. package/dist/core/orchestrator/secret-store.d.ts +0 -57
  188. package/dist/core/orchestrator/secret-store.js +0 -171
  189. package/dist/core/orchestrator/session-manager.d.ts +0 -13
  190. package/dist/core/orchestrator/session-manager.js +0 -66
  191. package/dist/core/orchestrator/task-queue.d.ts +0 -34
  192. package/dist/core/orchestrator/task-queue.js +0 -83
  193. package/dist/core/orchestrator/template-interpolate.d.ts +0 -5
  194. package/dist/core/orchestrator/template-interpolate.js +0 -18
  195. package/dist/core/orchestrator/user-registry.d.ts +0 -47
  196. package/dist/core/orchestrator/user-registry.js +0 -76
  197. package/dist/core/orchestrator/wakeup-queue.d.ts +0 -9
  198. package/dist/core/orchestrator/wakeup-queue.js +0 -45
  199. package/dist/core/orchestrator/workflow-engine.d.ts +0 -47
  200. package/dist/core/orchestrator/workflow-engine.js +0 -204
  201. package/dist/core/security/audit.d.ts +0 -20
  202. package/dist/core/security/audit.js +0 -33
  203. package/dist/core/security/column-validator.d.ts +0 -20
  204. package/dist/core/security/column-validator.js +0 -37
  205. package/dist/core/security/index.d.ts +0 -5
  206. package/dist/core/security/index.js +0 -5
  207. package/dist/core/security/process-env.d.ts +0 -13
  208. package/dist/core/security/process-env.js +0 -49
  209. package/dist/core/security/sanitizer.d.ts +0 -11
  210. package/dist/core/security/sanitizer.js +0 -39
  211. package/dist/core/security/types.d.ts +0 -11
  212. package/dist/core/security/types.js +0 -1
  213. package/dist/core/update/auto-update.d.ts +0 -21
  214. package/dist/core/update/auto-update.js +0 -102
  215. package/dist/core/update/backup-manager.d.ts +0 -7
  216. package/dist/core/update/backup-manager.js +0 -24
  217. package/dist/core/update/index.d.ts +0 -8
  218. package/dist/core/update/index.js +0 -6
  219. package/dist/core/update/migration-hooks.d.ts +0 -11
  220. package/dist/core/update/migration-hooks.js +0 -10
  221. package/dist/core/update/types.d.ts +0 -11
  222. package/dist/core/update/types.js +0 -1
  223. package/dist/core/update/update-checker.d.ts +0 -11
  224. package/dist/core/update/update-checker.js +0 -63
  225. package/dist/core/update/update-manager.d.ts +0 -25
  226. package/dist/core/update/update-manager.js +0 -101
  227. package/dist/core/update/version-utils.d.ts +0 -6
  228. package/dist/core/update/version-utils.js +0 -34
  229. package/dist/gmail-connector-MNUBRNFM.js +0 -6
  230. package/dist/gmail-connector-PS2VLGNE.js +0 -6
  231. package/dist/gmail-connector-ULSMN6X2.js +0 -6
  232. package/dist/gmail-connector-URRFX6A3.js +0 -6
  233. package/dist/inbound-AFBUPSPG.js +0 -10
  234. package/dist/inbound-AFOHYNUY.js +0 -6
  235. package/dist/inbound-CGIXRXGC.js +0 -8
  236. package/dist/inbound-MCOLRH6U.js +0 -10
  237. package/dist/inbound-SNEMBLGA.js +0 -6
  238. package/dist/inbound-ZJHAYVMF.js +0 -10
  239. package/dist/provider-qqJYv9nv.d.ts +0 -75
  240. package/dist/providers/anthropic/models.d.ts +0 -2
  241. package/dist/providers/anthropic/models.js +0 -29
  242. package/dist/providers/anthropic/provider.d.ts +0 -13
  243. package/dist/providers/anthropic/provider.js +0 -119
  244. package/dist/providers/anthropic/tool-converter.d.ts +0 -10
  245. package/dist/providers/anthropic/tool-converter.js +0 -7
  246. package/dist/providers/ollama/provider.d.ts +0 -17
  247. package/dist/providers/ollama/provider.js +0 -185
  248. package/dist/providers/openai/models.d.ts +0 -2
  249. package/dist/providers/openai/models.js +0 -29
  250. package/dist/providers/openai/provider.d.ts +0 -13
  251. package/dist/providers/openai/provider.js +0 -163
  252. package/dist/providers/openai/tool-converter.d.ts +0 -10
  253. package/dist/providers/openai/tool-converter.js +0 -10
  254. package/dist/shared/constants.d.ts +0 -50
  255. package/dist/shared/constants.js +0 -64
  256. package/dist/shared/index.d.ts +0 -14
  257. package/dist/shared/index.js +0 -14
  258. package/dist/shared/types/agent.d.ts +0 -36
  259. package/dist/shared/types/agent.js +0 -2
  260. package/dist/shared/types/channel.d.ts +0 -70
  261. package/dist/shared/types/channel.js +0 -2
  262. package/dist/shared/types/config.d.ts +0 -111
  263. package/dist/shared/types/config.js +0 -2
  264. package/dist/shared/types/connector.d.ts +0 -77
  265. package/dist/shared/types/connector.js +0 -2
  266. package/dist/shared/types/execution.d.ts +0 -29
  267. package/dist/shared/types/execution.js +0 -2
  268. package/dist/shared/types/provider.d.ts +0 -73
  269. package/dist/shared/types/provider.js +0 -2
  270. package/dist/shared/types/task.d.ts +0 -47
  271. package/dist/shared/types/task.js +0 -2
  272. package/dist/shared/types/workflow.d.ts +0 -39
  273. package/dist/shared/types/workflow.js +0 -2
  274. package/dist/shared/utils.d.ts +0 -6
  275. package/dist/shared/utils.js +0 -13
  276. package/dist/update-check.d.ts +0 -5
  277. package/dist/update-check.js +0 -56
@@ -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
- }