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.
- package/LICENSE +21 -21
- package/README.md +190 -190
- package/bin/botinabox.mjs +2 -2
- package/dist/{chunk-UACT2WXX.js → chunk-7AGWGYZC.js} +43 -5
- package/dist/cli.js +1 -1
- package/dist/connectors/google/index.d.ts +10 -1
- package/dist/connectors/google/index.js +1 -1
- package/dist/{gmail-connector-2FVYTQJH.js → gmail-connector-VP5FF56J.js} +2 -1
- package/package.json +100 -100
- 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-BWrtVqEP.d.ts +0 -652
- 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/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-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
package/package.json
CHANGED
|
@@ -1,100 +1,100 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "botinabox",
|
|
3
|
-
"version": "2.5.
|
|
4
|
-
"description": "Bot in a Box — framework for building multi-agent bots",
|
|
5
|
-
"type": "module",
|
|
6
|
-
"main": "./dist/index.js",
|
|
7
|
-
"types": "./dist/index.d.ts",
|
|
8
|
-
"exports": {
|
|
9
|
-
".": {
|
|
10
|
-
"import": "./dist/index.js",
|
|
11
|
-
"types": "./dist/index.d.ts"
|
|
12
|
-
},
|
|
13
|
-
"./anthropic": {
|
|
14
|
-
"import": "./dist/providers/anthropic/index.js",
|
|
15
|
-
"types": "./dist/providers/anthropic/index.d.ts"
|
|
16
|
-
},
|
|
17
|
-
"./openai": {
|
|
18
|
-
"import": "./dist/providers/openai/index.js",
|
|
19
|
-
"types": "./dist/providers/openai/index.d.ts"
|
|
20
|
-
},
|
|
21
|
-
"./ollama": {
|
|
22
|
-
"import": "./dist/providers/ollama/index.js",
|
|
23
|
-
"types": "./dist/providers/ollama/index.d.ts"
|
|
24
|
-
},
|
|
25
|
-
"./slack": {
|
|
26
|
-
"import": "./dist/channels/slack/index.js",
|
|
27
|
-
"types": "./dist/channels/slack/index.d.ts"
|
|
28
|
-
},
|
|
29
|
-
"./discord": {
|
|
30
|
-
"import": "./dist/channels/discord/index.js",
|
|
31
|
-
"types": "./dist/channels/discord/index.d.ts"
|
|
32
|
-
},
|
|
33
|
-
"./webhook": {
|
|
34
|
-
"import": "./dist/channels/webhook/index.js",
|
|
35
|
-
"types": "./dist/channels/webhook/index.d.ts"
|
|
36
|
-
},
|
|
37
|
-
"./google": {
|
|
38
|
-
"import": "./dist/connectors/google/index.js",
|
|
39
|
-
"types": "./dist/connectors/google/index.d.ts"
|
|
40
|
-
}
|
|
41
|
-
},
|
|
42
|
-
"bin": {
|
|
43
|
-
"botinabox": "./bin/botinabox.mjs"
|
|
44
|
-
},
|
|
45
|
-
"files": [
|
|
46
|
-
"dist",
|
|
47
|
-
"bin"
|
|
48
|
-
],
|
|
49
|
-
"engines": {
|
|
50
|
-
"node": ">=18"
|
|
51
|
-
},
|
|
52
|
-
"scripts": {
|
|
53
|
-
"build": "tsup",
|
|
54
|
-
"test": "vitest run",
|
|
55
|
-
"typecheck": "tsc --noEmit",
|
|
56
|
-
"check-docs": "echo 'Documentation check passed'",
|
|
57
|
-
"prepublishOnly": "npm run build && npm run typecheck && npm test"
|
|
58
|
-
},
|
|
59
|
-
"dependencies": {
|
|
60
|
-
"@types/uuid": "^10.0.0",
|
|
61
|
-
"ajv": "^8.17.1",
|
|
62
|
-
"cron-parser": "^4.9.0",
|
|
63
|
-
"latticesql": "^1.4.0",
|
|
64
|
-
"uuid": "^13.0.0",
|
|
65
|
-
"yaml": "^2.7.0"
|
|
66
|
-
},
|
|
67
|
-
"optionalDependencies": {
|
|
68
|
-
"whisper-node": "^1.1.1"
|
|
69
|
-
},
|
|
70
|
-
"peerDependencies": {
|
|
71
|
-
"@anthropic-ai/sdk": "^0.52.0",
|
|
72
|
-
"googleapis": ">=140.0.0 <200.0.0",
|
|
73
|
-
"openai": "^4.104.0"
|
|
74
|
-
},
|
|
75
|
-
"peerDependenciesMeta": {
|
|
76
|
-
"@anthropic-ai/sdk": {
|
|
77
|
-
"optional": true
|
|
78
|
-
},
|
|
79
|
-
"openai": {
|
|
80
|
-
"optional": true
|
|
81
|
-
},
|
|
82
|
-
"googleapis": {
|
|
83
|
-
"optional": true
|
|
84
|
-
}
|
|
85
|
-
},
|
|
86
|
-
"repository": {
|
|
87
|
-
"type": "git",
|
|
88
|
-
"url": "https://github.com/automated-industries/botinabox.git"
|
|
89
|
-
},
|
|
90
|
-
"devDependencies": {
|
|
91
|
-
"@anthropic-ai/sdk": "^0.52.0",
|
|
92
|
-
"@types/better-sqlite3": "^7.6.12",
|
|
93
|
-
"@types/node": "^22.10.0",
|
|
94
|
-
"googleapis": "^171.4.0",
|
|
95
|
-
"openai": "^4.104.0",
|
|
96
|
-
"tsup": "^8.3.5",
|
|
97
|
-
"typescript": "^5.7.2",
|
|
98
|
-
"vitest": "^3.0.0"
|
|
99
|
-
}
|
|
100
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "botinabox",
|
|
3
|
+
"version": "2.5.3",
|
|
4
|
+
"description": "Bot in a Box — framework for building multi-agent bots",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": {
|
|
10
|
+
"import": "./dist/index.js",
|
|
11
|
+
"types": "./dist/index.d.ts"
|
|
12
|
+
},
|
|
13
|
+
"./anthropic": {
|
|
14
|
+
"import": "./dist/providers/anthropic/index.js",
|
|
15
|
+
"types": "./dist/providers/anthropic/index.d.ts"
|
|
16
|
+
},
|
|
17
|
+
"./openai": {
|
|
18
|
+
"import": "./dist/providers/openai/index.js",
|
|
19
|
+
"types": "./dist/providers/openai/index.d.ts"
|
|
20
|
+
},
|
|
21
|
+
"./ollama": {
|
|
22
|
+
"import": "./dist/providers/ollama/index.js",
|
|
23
|
+
"types": "./dist/providers/ollama/index.d.ts"
|
|
24
|
+
},
|
|
25
|
+
"./slack": {
|
|
26
|
+
"import": "./dist/channels/slack/index.js",
|
|
27
|
+
"types": "./dist/channels/slack/index.d.ts"
|
|
28
|
+
},
|
|
29
|
+
"./discord": {
|
|
30
|
+
"import": "./dist/channels/discord/index.js",
|
|
31
|
+
"types": "./dist/channels/discord/index.d.ts"
|
|
32
|
+
},
|
|
33
|
+
"./webhook": {
|
|
34
|
+
"import": "./dist/channels/webhook/index.js",
|
|
35
|
+
"types": "./dist/channels/webhook/index.d.ts"
|
|
36
|
+
},
|
|
37
|
+
"./google": {
|
|
38
|
+
"import": "./dist/connectors/google/index.js",
|
|
39
|
+
"types": "./dist/connectors/google/index.d.ts"
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
"bin": {
|
|
43
|
+
"botinabox": "./bin/botinabox.mjs"
|
|
44
|
+
},
|
|
45
|
+
"files": [
|
|
46
|
+
"dist",
|
|
47
|
+
"bin"
|
|
48
|
+
],
|
|
49
|
+
"engines": {
|
|
50
|
+
"node": ">=18"
|
|
51
|
+
},
|
|
52
|
+
"scripts": {
|
|
53
|
+
"build": "tsup",
|
|
54
|
+
"test": "vitest run",
|
|
55
|
+
"typecheck": "tsc --noEmit",
|
|
56
|
+
"check-docs": "echo 'Documentation check passed'",
|
|
57
|
+
"prepublishOnly": "npm run build && npm run typecheck && npm test"
|
|
58
|
+
},
|
|
59
|
+
"dependencies": {
|
|
60
|
+
"@types/uuid": "^10.0.0",
|
|
61
|
+
"ajv": "^8.17.1",
|
|
62
|
+
"cron-parser": "^4.9.0",
|
|
63
|
+
"latticesql": "^1.4.0",
|
|
64
|
+
"uuid": "^13.0.0",
|
|
65
|
+
"yaml": "^2.7.0"
|
|
66
|
+
},
|
|
67
|
+
"optionalDependencies": {
|
|
68
|
+
"whisper-node": "^1.1.1"
|
|
69
|
+
},
|
|
70
|
+
"peerDependencies": {
|
|
71
|
+
"@anthropic-ai/sdk": "^0.52.0",
|
|
72
|
+
"googleapis": ">=140.0.0 <200.0.0",
|
|
73
|
+
"openai": "^4.104.0"
|
|
74
|
+
},
|
|
75
|
+
"peerDependenciesMeta": {
|
|
76
|
+
"@anthropic-ai/sdk": {
|
|
77
|
+
"optional": true
|
|
78
|
+
},
|
|
79
|
+
"openai": {
|
|
80
|
+
"optional": true
|
|
81
|
+
},
|
|
82
|
+
"googleapis": {
|
|
83
|
+
"optional": true
|
|
84
|
+
}
|
|
85
|
+
},
|
|
86
|
+
"repository": {
|
|
87
|
+
"type": "git",
|
|
88
|
+
"url": "https://github.com/automated-industries/botinabox.git"
|
|
89
|
+
},
|
|
90
|
+
"devDependencies": {
|
|
91
|
+
"@anthropic-ai/sdk": "^0.52.0",
|
|
92
|
+
"@types/better-sqlite3": "^7.6.12",
|
|
93
|
+
"@types/node": "^22.10.0",
|
|
94
|
+
"googleapis": "^171.4.0",
|
|
95
|
+
"openai": "^4.104.0",
|
|
96
|
+
"tsup": "^8.3.5",
|
|
97
|
+
"typescript": "^5.7.2",
|
|
98
|
+
"vitest": "^3.0.0"
|
|
99
|
+
}
|
|
100
|
+
}
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* DiscordAdapter — ChannelAdapter implementation for Discord.
|
|
3
|
-
* Story 4.6
|
|
4
|
-
*/
|
|
5
|
-
import type { ChannelAdapter, ChannelCapabilities, ChannelMeta, ChannelConfig, InboundMessage, OutboundPayload, SendResult, HealthStatus } from "../../shared/index.js";
|
|
6
|
-
/** Minimal Discord client interface for mockability. */
|
|
7
|
-
export interface DiscordClient {
|
|
8
|
-
sendMessage(channelId: string, content: string): Promise<{
|
|
9
|
-
id: string;
|
|
10
|
-
}>;
|
|
11
|
-
}
|
|
12
|
-
export declare class DiscordAdapter implements ChannelAdapter {
|
|
13
|
-
readonly id = "discord";
|
|
14
|
-
readonly meta: ChannelMeta;
|
|
15
|
-
readonly capabilities: ChannelCapabilities;
|
|
16
|
-
onMessage?: (message: InboundMessage) => Promise<void>;
|
|
17
|
-
private connected;
|
|
18
|
-
private config;
|
|
19
|
-
private client;
|
|
20
|
-
constructor(client?: DiscordClient);
|
|
21
|
-
connect(config: ChannelConfig): Promise<void>;
|
|
22
|
-
disconnect(): Promise<void>;
|
|
23
|
-
healthCheck(): Promise<HealthStatus>;
|
|
24
|
-
send(target: {
|
|
25
|
-
peerId: string;
|
|
26
|
-
threadId?: string;
|
|
27
|
-
}, payload: OutboundPayload): Promise<SendResult>;
|
|
28
|
-
/** Simulate receiving an inbound message (for testing/webhooks). */
|
|
29
|
-
receive(event: Record<string, unknown>): Promise<void>;
|
|
30
|
-
}
|
|
31
|
-
/** Factory function — default export for auto-discovery. */
|
|
32
|
-
export default function createDiscordAdapter(client?: DiscordClient): DiscordAdapter;
|
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* DiscordAdapter — ChannelAdapter implementation for Discord.
|
|
3
|
-
* Story 4.6
|
|
4
|
-
*/
|
|
5
|
-
import { formatForDiscord } from "./outbound.js";
|
|
6
|
-
export class DiscordAdapter {
|
|
7
|
-
id = "discord";
|
|
8
|
-
meta = {
|
|
9
|
-
displayName: "Discord",
|
|
10
|
-
icon: "https://discord.com/favicon.ico",
|
|
11
|
-
homepage: "https://discord.com",
|
|
12
|
-
};
|
|
13
|
-
capabilities = {
|
|
14
|
-
chatTypes: ["direct", "group", "channel"],
|
|
15
|
-
threads: true,
|
|
16
|
-
reactions: true,
|
|
17
|
-
editing: true,
|
|
18
|
-
media: true,
|
|
19
|
-
polls: false,
|
|
20
|
-
maxTextLength: 2000,
|
|
21
|
-
formattingMode: "markdown",
|
|
22
|
-
};
|
|
23
|
-
onMessage;
|
|
24
|
-
connected = false;
|
|
25
|
-
config = null;
|
|
26
|
-
client;
|
|
27
|
-
constructor(client) {
|
|
28
|
-
this.client = client ?? null;
|
|
29
|
-
}
|
|
30
|
-
async connect(config) {
|
|
31
|
-
this.config = config;
|
|
32
|
-
this.connected = true;
|
|
33
|
-
}
|
|
34
|
-
async disconnect() {
|
|
35
|
-
this.connected = false;
|
|
36
|
-
this.config = null;
|
|
37
|
-
}
|
|
38
|
-
async healthCheck() {
|
|
39
|
-
return { ok: this.connected };
|
|
40
|
-
}
|
|
41
|
-
async send(target, payload) {
|
|
42
|
-
if (!this.connected) {
|
|
43
|
-
return { success: false, error: "Not connected" };
|
|
44
|
-
}
|
|
45
|
-
const text = formatForDiscord(payload.text);
|
|
46
|
-
if (this.client) {
|
|
47
|
-
try {
|
|
48
|
-
const result = await this.client.sendMessage(target.peerId, text);
|
|
49
|
-
return { success: true, messageId: result.id };
|
|
50
|
-
}
|
|
51
|
-
catch (err) {
|
|
52
|
-
return { success: false, error: String(err) };
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
// No-op when no client provided
|
|
56
|
-
return { success: true };
|
|
57
|
-
}
|
|
58
|
-
/** Simulate receiving an inbound message (for testing/webhooks). */
|
|
59
|
-
async receive(event) {
|
|
60
|
-
if (this.onMessage) {
|
|
61
|
-
const { parseDiscordEvent } = await import("./inbound.js");
|
|
62
|
-
const msg = parseDiscordEvent(event);
|
|
63
|
-
await this.onMessage(msg);
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
/** Factory function — default export for auto-discovery. */
|
|
68
|
-
export default function createDiscordAdapter(client) {
|
|
69
|
-
return new DiscordAdapter(client);
|
|
70
|
-
}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Discord inbound message parsing.
|
|
3
|
-
* Story 4.6
|
|
4
|
-
*/
|
|
5
|
-
import type { InboundMessage } from "../../shared/index.js";
|
|
6
|
-
export interface DiscordEvent {
|
|
7
|
-
id?: string;
|
|
8
|
-
channel_id?: string;
|
|
9
|
-
guild_id?: string;
|
|
10
|
-
author?: {
|
|
11
|
-
id?: string;
|
|
12
|
-
username?: string;
|
|
13
|
-
};
|
|
14
|
-
content?: string;
|
|
15
|
-
message_reference?: {
|
|
16
|
-
message_id?: string;
|
|
17
|
-
channel_id?: string;
|
|
18
|
-
};
|
|
19
|
-
timestamp?: string;
|
|
20
|
-
[key: string]: unknown;
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* Parse a Discord message event into an InboundMessage.
|
|
24
|
-
*/
|
|
25
|
-
export declare function parseDiscordEvent(event: DiscordEvent): InboundMessage;
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Discord inbound message parsing.
|
|
3
|
-
* Story 4.6
|
|
4
|
-
*/
|
|
5
|
-
/**
|
|
6
|
-
* Parse a Discord message event into an InboundMessage.
|
|
7
|
-
*/
|
|
8
|
-
export function parseDiscordEvent(event) {
|
|
9
|
-
const id = event.id ?? `discord-${Date.now()}`;
|
|
10
|
-
const channel = event.channel_id ?? "unknown";
|
|
11
|
-
const from = event.author?.id ?? "unknown";
|
|
12
|
-
const body = event.content ?? "";
|
|
13
|
-
const replyToId = event.message_reference?.message_id;
|
|
14
|
-
const receivedAt = event.timestamp ?? new Date().toISOString();
|
|
15
|
-
return {
|
|
16
|
-
id,
|
|
17
|
-
channel,
|
|
18
|
-
from,
|
|
19
|
-
body,
|
|
20
|
-
replyToId,
|
|
21
|
-
receivedAt,
|
|
22
|
-
raw: event,
|
|
23
|
-
};
|
|
24
|
-
}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Discord outbound formatting.
|
|
3
|
-
* Discord uses native markdown — just enforce the 2000-char limit.
|
|
4
|
-
* Story 4.6
|
|
5
|
-
*/
|
|
6
|
-
/**
|
|
7
|
-
* Split text into Discord-compatible chunks (2000 char max each).
|
|
8
|
-
*/
|
|
9
|
-
export declare function chunkForDiscord(text: string): string[];
|
|
10
|
-
/**
|
|
11
|
-
* Discord uses native markdown — no conversion needed.
|
|
12
|
-
* Returns the text unchanged (Discord renders it natively).
|
|
13
|
-
*/
|
|
14
|
-
export declare function formatForDiscord(text: string): string;
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Discord outbound formatting.
|
|
3
|
-
* Discord uses native markdown — just enforce the 2000-char limit.
|
|
4
|
-
* Story 4.6
|
|
5
|
-
*/
|
|
6
|
-
const DISCORD_MAX_LENGTH = 2000;
|
|
7
|
-
/**
|
|
8
|
-
* Split text into Discord-compatible chunks (2000 char max each).
|
|
9
|
-
*/
|
|
10
|
-
export function chunkForDiscord(text) {
|
|
11
|
-
if (text.length <= DISCORD_MAX_LENGTH)
|
|
12
|
-
return [text];
|
|
13
|
-
const chunks = [];
|
|
14
|
-
let remaining = text;
|
|
15
|
-
while (remaining.length > DISCORD_MAX_LENGTH) {
|
|
16
|
-
// Try to split at a word boundary
|
|
17
|
-
const slice = remaining.slice(0, DISCORD_MAX_LENGTH);
|
|
18
|
-
const lastSpace = slice.lastIndexOf(" ");
|
|
19
|
-
if (lastSpace > 0) {
|
|
20
|
-
chunks.push(remaining.slice(0, lastSpace));
|
|
21
|
-
remaining = remaining.slice(lastSpace + 1);
|
|
22
|
-
}
|
|
23
|
-
else {
|
|
24
|
-
chunks.push(remaining.slice(0, DISCORD_MAX_LENGTH));
|
|
25
|
-
remaining = remaining.slice(DISCORD_MAX_LENGTH);
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
if (remaining.length > 0)
|
|
29
|
-
chunks.push(remaining);
|
|
30
|
-
return chunks;
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* Discord uses native markdown — no conversion needed.
|
|
34
|
-
* Returns the text unchanged (Discord renders it natively).
|
|
35
|
-
*/
|
|
36
|
-
export function formatForDiscord(text) {
|
|
37
|
-
return text;
|
|
38
|
-
}
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* SlackAdapter — ChannelAdapter implementation for Slack.
|
|
3
|
-
* Story 4.5
|
|
4
|
-
*/
|
|
5
|
-
import type { ChannelAdapter, ChannelCapabilities, ChannelMeta, ChannelConfig, InboundMessage, OutboundPayload, SendResult, HealthStatus } from "../../shared/index.js";
|
|
6
|
-
/** Minimal Bolt-compatible client interface for mockability. */
|
|
7
|
-
export interface BoltClient {
|
|
8
|
-
postMessage(channel: string, text: string, threadTs?: string): Promise<{
|
|
9
|
-
ok: boolean;
|
|
10
|
-
ts?: string;
|
|
11
|
-
}>;
|
|
12
|
-
}
|
|
13
|
-
export declare class SlackAdapter implements ChannelAdapter {
|
|
14
|
-
readonly id = "slack";
|
|
15
|
-
readonly meta: ChannelMeta;
|
|
16
|
-
readonly capabilities: ChannelCapabilities;
|
|
17
|
-
onMessage?: (message: InboundMessage) => Promise<void>;
|
|
18
|
-
private connected;
|
|
19
|
-
private config;
|
|
20
|
-
private client;
|
|
21
|
-
constructor(client?: BoltClient);
|
|
22
|
-
connect(config: ChannelConfig): Promise<void>;
|
|
23
|
-
disconnect(): Promise<void>;
|
|
24
|
-
healthCheck(): Promise<HealthStatus>;
|
|
25
|
-
send(target: {
|
|
26
|
-
peerId: string;
|
|
27
|
-
threadId?: string;
|
|
28
|
-
}, payload: OutboundPayload): Promise<SendResult>;
|
|
29
|
-
/** Simulate receiving an inbound message (for testing/webhooks). */
|
|
30
|
-
receive(event: Record<string, unknown>): Promise<void>;
|
|
31
|
-
}
|
|
32
|
-
/** Factory function — default export for auto-discovery. */
|
|
33
|
-
export default function createSlackAdapter(client?: BoltClient): SlackAdapter;
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* SlackAdapter — ChannelAdapter implementation for Slack.
|
|
3
|
-
* Story 4.5
|
|
4
|
-
*/
|
|
5
|
-
import { formatForSlack } from "./outbound.js";
|
|
6
|
-
export class SlackAdapter {
|
|
7
|
-
id = "slack";
|
|
8
|
-
meta = {
|
|
9
|
-
displayName: "Slack",
|
|
10
|
-
icon: "https://slack.com/favicon.ico",
|
|
11
|
-
homepage: "https://slack.com",
|
|
12
|
-
};
|
|
13
|
-
capabilities = {
|
|
14
|
-
chatTypes: ["direct", "group", "channel"],
|
|
15
|
-
threads: true,
|
|
16
|
-
reactions: true,
|
|
17
|
-
editing: true,
|
|
18
|
-
media: true,
|
|
19
|
-
polls: false,
|
|
20
|
-
maxTextLength: 40_000,
|
|
21
|
-
formattingMode: "mrkdwn",
|
|
22
|
-
};
|
|
23
|
-
onMessage;
|
|
24
|
-
connected = false;
|
|
25
|
-
config = null;
|
|
26
|
-
client;
|
|
27
|
-
constructor(client) {
|
|
28
|
-
this.client = client ?? null;
|
|
29
|
-
}
|
|
30
|
-
async connect(config) {
|
|
31
|
-
this.config = config;
|
|
32
|
-
this.connected = true;
|
|
33
|
-
}
|
|
34
|
-
async disconnect() {
|
|
35
|
-
this.connected = false;
|
|
36
|
-
this.config = null;
|
|
37
|
-
}
|
|
38
|
-
async healthCheck() {
|
|
39
|
-
return { ok: this.connected };
|
|
40
|
-
}
|
|
41
|
-
async send(target, payload) {
|
|
42
|
-
if (!this.connected) {
|
|
43
|
-
return { success: false, error: "Not connected" };
|
|
44
|
-
}
|
|
45
|
-
const text = formatForSlack(payload.text);
|
|
46
|
-
if (this.client) {
|
|
47
|
-
try {
|
|
48
|
-
const result = await this.client.postMessage(target.peerId, text, target.threadId);
|
|
49
|
-
return { success: result.ok, messageId: result.ts };
|
|
50
|
-
}
|
|
51
|
-
catch (err) {
|
|
52
|
-
return { success: false, error: String(err) };
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
// No-op when no client provided
|
|
56
|
-
return { success: true };
|
|
57
|
-
}
|
|
58
|
-
/** Simulate receiving an inbound message (for testing/webhooks). */
|
|
59
|
-
async receive(event) {
|
|
60
|
-
if (this.onMessage) {
|
|
61
|
-
const { parseSlackEvent } = await import("./inbound.js");
|
|
62
|
-
const { enrichVoiceMessage } = await import("./inbound.js");
|
|
63
|
-
let msg = parseSlackEvent(event);
|
|
64
|
-
if (msg.body.includes("[Voice message") && this.config?.botToken) {
|
|
65
|
-
msg = await enrichVoiceMessage(msg, this.config.botToken);
|
|
66
|
-
}
|
|
67
|
-
await this.onMessage(msg);
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
/** Factory function — default export for auto-discovery. */
|
|
72
|
-
export default function createSlackAdapter(client) {
|
|
73
|
-
return new SlackAdapter(client);
|
|
74
|
-
}
|
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Slack inbound message parsing.
|
|
3
|
-
* Story 4.5
|
|
4
|
-
*/
|
|
5
|
-
import type { InboundMessage } from "../../shared/index.js";
|
|
6
|
-
export interface SlackFile {
|
|
7
|
-
id?: string;
|
|
8
|
-
filetype?: string;
|
|
9
|
-
subtype?: string;
|
|
10
|
-
url_private?: string;
|
|
11
|
-
preview?: string;
|
|
12
|
-
transcription?: {
|
|
13
|
-
status?: string;
|
|
14
|
-
preview?: {
|
|
15
|
-
content?: string;
|
|
16
|
-
};
|
|
17
|
-
};
|
|
18
|
-
[key: string]: unknown;
|
|
19
|
-
}
|
|
20
|
-
export interface SlackEvent {
|
|
21
|
-
type: string;
|
|
22
|
-
subtype?: string;
|
|
23
|
-
client_msg_id?: string;
|
|
24
|
-
ts?: string;
|
|
25
|
-
event_ts?: string;
|
|
26
|
-
channel?: string;
|
|
27
|
-
user?: string;
|
|
28
|
-
text?: string;
|
|
29
|
-
thread_ts?: string;
|
|
30
|
-
files?: SlackFile[];
|
|
31
|
-
[key: string]: unknown;
|
|
32
|
-
}
|
|
33
|
-
/**
|
|
34
|
-
* Extract the text content from a voice message file.
|
|
35
|
-
* Prefers the transcription preview; falls back to the file preview text.
|
|
36
|
-
* Returns null if the file is not a voice message or has no transcript.
|
|
37
|
-
*/
|
|
38
|
-
export declare function extractVoiceTranscript(file: SlackFile): string | null;
|
|
39
|
-
/**
|
|
40
|
-
* Parse a Slack event into an InboundMessage.
|
|
41
|
-
*
|
|
42
|
-
* Handles standard text messages and voice messages (file_share subtype
|
|
43
|
-
* with audio files). Voice message transcripts are extracted and prefixed
|
|
44
|
-
* with `[Voice message]`.
|
|
45
|
-
*/
|
|
46
|
-
export declare function parseSlackEvent(event: SlackEvent): InboundMessage;
|
|
47
|
-
/**
|
|
48
|
-
* Enrich a voice message with local transcription when Slack's built-in
|
|
49
|
-
* transcription is unavailable.
|
|
50
|
-
*
|
|
51
|
-
* Downloads the audio file from Slack using the bot token, converts to WAV,
|
|
52
|
-
* and transcribes locally via whisper-node. Returns the original message
|
|
53
|
-
* unchanged if transcription fails or is not needed.
|
|
54
|
-
*
|
|
55
|
-
* @param msg - The parsed inbound message (from parseSlackEvent)
|
|
56
|
-
* @param botToken - Slack bot token for authenticated file download
|
|
57
|
-
* @returns The message with body replaced by transcript, or original on failure
|
|
58
|
-
*/
|
|
59
|
-
export declare function enrichVoiceMessage(msg: InboundMessage, botToken: string): Promise<InboundMessage>;
|