botinabox 2.5.2 → 2.5.3

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