loudmouth-ai 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +148 -77
- package/dist/build-info.json +3 -3
- package/extensions/package.json +6 -0
- package/package.json +1 -1
- package/skills/autopilot/SKILL.md +179 -0
- package/skills/goals/SKILL.md +189 -0
- package/skills/wordpress/SKILL.md +232 -0
- package/extensions/bluebubbles/clawdbot.plugin.json +0 -11
- package/extensions/bluebubbles/index.ts +0 -20
- package/extensions/bluebubbles/package.json +0 -33
- package/extensions/bluebubbles/src/accounts.ts +0 -80
- package/extensions/bluebubbles/src/actions.test.ts +0 -651
- package/extensions/bluebubbles/src/actions.ts +0 -403
- package/extensions/bluebubbles/src/attachments.test.ts +0 -346
- package/extensions/bluebubbles/src/attachments.ts +0 -282
- package/extensions/bluebubbles/src/channel.ts +0 -399
- package/extensions/bluebubbles/src/chat.test.ts +0 -462
- package/extensions/bluebubbles/src/chat.ts +0 -354
- package/extensions/bluebubbles/src/config-schema.ts +0 -51
- package/extensions/bluebubbles/src/media-send.ts +0 -168
- package/extensions/bluebubbles/src/monitor.test.ts +0 -2140
- package/extensions/bluebubbles/src/monitor.ts +0 -2101
- package/extensions/bluebubbles/src/onboarding.ts +0 -340
- package/extensions/bluebubbles/src/probe.ts +0 -127
- package/extensions/bluebubbles/src/reactions.test.ts +0 -393
- package/extensions/bluebubbles/src/reactions.ts +0 -183
- package/extensions/bluebubbles/src/runtime.ts +0 -14
- package/extensions/bluebubbles/src/send.test.ts +0 -809
- package/extensions/bluebubbles/src/send.ts +0 -418
- package/extensions/bluebubbles/src/targets.test.ts +0 -184
- package/extensions/bluebubbles/src/targets.ts +0 -323
- package/extensions/bluebubbles/src/types.ts +0 -127
- package/extensions/copilot-proxy/README.md +0 -24
- package/extensions/copilot-proxy/clawdbot.plugin.json +0 -11
- package/extensions/copilot-proxy/index.ts +0 -142
- package/extensions/copilot-proxy/package.json +0 -11
- package/extensions/google-antigravity-auth/README.md +0 -24
- package/extensions/google-antigravity-auth/clawdbot.plugin.json +0 -11
- package/extensions/google-antigravity-auth/index.ts +0 -437
- package/extensions/google-antigravity-auth/package.json +0 -11
- package/extensions/google-gemini-cli-auth/README.md +0 -35
- package/extensions/google-gemini-cli-auth/clawdbot.plugin.json +0 -11
- package/extensions/google-gemini-cli-auth/index.ts +0 -91
- package/extensions/google-gemini-cli-auth/oauth.test.ts +0 -228
- package/extensions/google-gemini-cli-auth/oauth.ts +0 -580
- package/extensions/google-gemini-cli-auth/package.json +0 -11
- package/extensions/googlechat/clawdbot.plugin.json +0 -11
- package/extensions/googlechat/index.ts +0 -20
- package/extensions/googlechat/package.json +0 -39
- package/extensions/googlechat/src/accounts.ts +0 -133
- package/extensions/googlechat/src/actions.ts +0 -162
- package/extensions/googlechat/src/api.test.ts +0 -62
- package/extensions/googlechat/src/api.ts +0 -259
- package/extensions/googlechat/src/auth.ts +0 -113
- package/extensions/googlechat/src/channel.ts +0 -580
- package/extensions/googlechat/src/monitor.test.ts +0 -27
- package/extensions/googlechat/src/monitor.ts +0 -900
- package/extensions/googlechat/src/onboarding.ts +0 -278
- package/extensions/googlechat/src/runtime.ts +0 -14
- package/extensions/googlechat/src/targets.test.ts +0 -35
- package/extensions/googlechat/src/targets.ts +0 -55
- package/extensions/googlechat/src/types.config.ts +0 -3
- package/extensions/googlechat/src/types.ts +0 -73
- package/extensions/imessage/clawdbot.plugin.json +0 -11
- package/extensions/imessage/index.ts +0 -18
- package/extensions/imessage/package.json +0 -11
- package/extensions/imessage/src/channel.ts +0 -294
- package/extensions/imessage/src/runtime.ts +0 -14
- package/extensions/line/clawdbot.plugin.json +0 -11
- package/extensions/line/index.ts +0 -20
- package/extensions/line/package.json +0 -29
- package/extensions/line/src/card-command.ts +0 -338
- package/extensions/line/src/channel.logout.test.ts +0 -96
- package/extensions/line/src/channel.sendPayload.test.ts +0 -308
- package/extensions/line/src/channel.ts +0 -773
- package/extensions/line/src/runtime.ts +0 -14
- package/extensions/matrix/CHANGELOG.md +0 -54
- package/extensions/matrix/clawdbot.plugin.json +0 -11
- package/extensions/matrix/index.ts +0 -18
- package/extensions/matrix/package.json +0 -36
- package/extensions/matrix/src/actions.ts +0 -185
- package/extensions/matrix/src/channel.directory.test.ts +0 -56
- package/extensions/matrix/src/channel.ts +0 -417
- package/extensions/matrix/src/config-schema.ts +0 -62
- package/extensions/matrix/src/directory-live.ts +0 -175
- package/extensions/matrix/src/group-mentions.ts +0 -61
- package/extensions/matrix/src/matrix/accounts.test.ts +0 -83
- package/extensions/matrix/src/matrix/accounts.ts +0 -63
- package/extensions/matrix/src/matrix/actions/client.ts +0 -53
- package/extensions/matrix/src/matrix/actions/messages.ts +0 -120
- package/extensions/matrix/src/matrix/actions/pins.ts +0 -70
- package/extensions/matrix/src/matrix/actions/reactions.ts +0 -84
- package/extensions/matrix/src/matrix/actions/room.ts +0 -88
- package/extensions/matrix/src/matrix/actions/summary.ts +0 -77
- package/extensions/matrix/src/matrix/actions/types.ts +0 -84
- package/extensions/matrix/src/matrix/actions.ts +0 -15
- package/extensions/matrix/src/matrix/active-client.ts +0 -11
- package/extensions/matrix/src/matrix/client/config.ts +0 -165
- package/extensions/matrix/src/matrix/client/create-client.ts +0 -127
- package/extensions/matrix/src/matrix/client/logging.ts +0 -35
- package/extensions/matrix/src/matrix/client/runtime.ts +0 -4
- package/extensions/matrix/src/matrix/client/shared.ts +0 -169
- package/extensions/matrix/src/matrix/client/storage.ts +0 -131
- package/extensions/matrix/src/matrix/client/types.ts +0 -34
- package/extensions/matrix/src/matrix/client.test.ts +0 -57
- package/extensions/matrix/src/matrix/client.ts +0 -9
- package/extensions/matrix/src/matrix/credentials.ts +0 -103
- package/extensions/matrix/src/matrix/deps.ts +0 -57
- package/extensions/matrix/src/matrix/format.test.ts +0 -34
- package/extensions/matrix/src/matrix/format.ts +0 -22
- package/extensions/matrix/src/matrix/index.ts +0 -11
- package/extensions/matrix/src/matrix/monitor/allowlist.ts +0 -58
- package/extensions/matrix/src/matrix/monitor/auto-join.ts +0 -68
- package/extensions/matrix/src/matrix/monitor/direct.ts +0 -105
- package/extensions/matrix/src/matrix/monitor/events.ts +0 -103
- package/extensions/matrix/src/matrix/monitor/handler.ts +0 -645
- package/extensions/matrix/src/matrix/monitor/index.ts +0 -279
- package/extensions/matrix/src/matrix/monitor/location.ts +0 -83
- package/extensions/matrix/src/matrix/monitor/media.test.ts +0 -103
- package/extensions/matrix/src/matrix/monitor/media.ts +0 -113
- package/extensions/matrix/src/matrix/monitor/mentions.ts +0 -31
- package/extensions/matrix/src/matrix/monitor/replies.ts +0 -96
- package/extensions/matrix/src/matrix/monitor/room-info.ts +0 -58
- package/extensions/matrix/src/matrix/monitor/rooms.ts +0 -43
- package/extensions/matrix/src/matrix/monitor/threads.ts +0 -64
- package/extensions/matrix/src/matrix/monitor/types.ts +0 -39
- package/extensions/matrix/src/matrix/poll-types.test.ts +0 -22
- package/extensions/matrix/src/matrix/poll-types.ts +0 -157
- package/extensions/matrix/src/matrix/probe.ts +0 -70
- package/extensions/matrix/src/matrix/send/client.ts +0 -63
- package/extensions/matrix/src/matrix/send/formatting.ts +0 -92
- package/extensions/matrix/src/matrix/send/media.ts +0 -220
- package/extensions/matrix/src/matrix/send/targets.test.ts +0 -102
- package/extensions/matrix/src/matrix/send/targets.ts +0 -144
- package/extensions/matrix/src/matrix/send/types.ts +0 -109
- package/extensions/matrix/src/matrix/send.test.ts +0 -172
- package/extensions/matrix/src/matrix/send.ts +0 -255
- package/extensions/matrix/src/onboarding.ts +0 -432
- package/extensions/matrix/src/outbound.ts +0 -53
- package/extensions/matrix/src/resolve-targets.ts +0 -89
- package/extensions/matrix/src/runtime.ts +0 -14
- package/extensions/matrix/src/tool-actions.ts +0 -160
- package/extensions/matrix/src/types.ts +0 -95
- package/extensions/mattermost/clawdbot.plugin.json +0 -11
- package/extensions/mattermost/index.ts +0 -18
- package/extensions/mattermost/package.json +0 -25
- package/extensions/mattermost/src/channel.test.ts +0 -43
- package/extensions/mattermost/src/channel.ts +0 -339
- package/extensions/mattermost/src/config-schema.ts +0 -56
- package/extensions/mattermost/src/group-mentions.ts +0 -14
- package/extensions/mattermost/src/mattermost/accounts.ts +0 -115
- package/extensions/mattermost/src/mattermost/client.ts +0 -208
- package/extensions/mattermost/src/mattermost/index.ts +0 -9
- package/extensions/mattermost/src/mattermost/monitor-helpers.ts +0 -150
- package/extensions/mattermost/src/mattermost/monitor.ts +0 -921
- package/extensions/mattermost/src/mattermost/probe.ts +0 -70
- package/extensions/mattermost/src/mattermost/send.ts +0 -217
- package/extensions/mattermost/src/normalize.ts +0 -38
- package/extensions/mattermost/src/onboarding-helpers.ts +0 -42
- package/extensions/mattermost/src/onboarding.ts +0 -187
- package/extensions/mattermost/src/runtime.ts +0 -14
- package/extensions/mattermost/src/types.ts +0 -50
- package/extensions/msteams/CHANGELOG.md +0 -51
- package/extensions/msteams/clawdbot.plugin.json +0 -11
- package/extensions/msteams/index.ts +0 -18
- package/extensions/msteams/package.json +0 -36
- package/extensions/msteams/src/attachments/download.ts +0 -206
- package/extensions/msteams/src/attachments/graph.ts +0 -319
- package/extensions/msteams/src/attachments/html.ts +0 -76
- package/extensions/msteams/src/attachments/payload.ts +0 -22
- package/extensions/msteams/src/attachments/shared.ts +0 -235
- package/extensions/msteams/src/attachments/types.ts +0 -37
- package/extensions/msteams/src/attachments.test.ts +0 -424
- package/extensions/msteams/src/attachments.ts +0 -18
- package/extensions/msteams/src/channel.directory.test.ts +0 -46
- package/extensions/msteams/src/channel.ts +0 -436
- package/extensions/msteams/src/conversation-store-fs.test.ts +0 -88
- package/extensions/msteams/src/conversation-store-fs.ts +0 -155
- package/extensions/msteams/src/conversation-store-memory.ts +0 -45
- package/extensions/msteams/src/conversation-store.ts +0 -41
- package/extensions/msteams/src/directory-live.ts +0 -179
- package/extensions/msteams/src/errors.test.ts +0 -46
- package/extensions/msteams/src/errors.ts +0 -158
- package/extensions/msteams/src/file-consent-helpers.test.ts +0 -234
- package/extensions/msteams/src/file-consent-helpers.ts +0 -73
- package/extensions/msteams/src/file-consent.ts +0 -122
- package/extensions/msteams/src/graph-chat.ts +0 -52
- package/extensions/msteams/src/graph-upload.ts +0 -445
- package/extensions/msteams/src/inbound.test.ts +0 -67
- package/extensions/msteams/src/inbound.ts +0 -38
- package/extensions/msteams/src/index.ts +0 -4
- package/extensions/msteams/src/media-helpers.test.ts +0 -186
- package/extensions/msteams/src/media-helpers.ts +0 -77
- package/extensions/msteams/src/messenger.test.ts +0 -245
- package/extensions/msteams/src/messenger.ts +0 -460
- package/extensions/msteams/src/monitor-handler/inbound-media.ts +0 -123
- package/extensions/msteams/src/monitor-handler/message-handler.ts +0 -629
- package/extensions/msteams/src/monitor-handler.ts +0 -166
- package/extensions/msteams/src/monitor-types.ts +0 -5
- package/extensions/msteams/src/monitor.ts +0 -290
- package/extensions/msteams/src/onboarding.ts +0 -432
- package/extensions/msteams/src/outbound.ts +0 -47
- package/extensions/msteams/src/pending-uploads.ts +0 -87
- package/extensions/msteams/src/policy.test.ts +0 -210
- package/extensions/msteams/src/policy.ts +0 -202
- package/extensions/msteams/src/polls-store-memory.ts +0 -30
- package/extensions/msteams/src/polls-store.test.ts +0 -40
- package/extensions/msteams/src/polls.test.ts +0 -72
- package/extensions/msteams/src/polls.ts +0 -299
- package/extensions/msteams/src/probe.test.ts +0 -57
- package/extensions/msteams/src/probe.ts +0 -99
- package/extensions/msteams/src/reply-dispatcher.ts +0 -128
- package/extensions/msteams/src/resolve-allowlist.ts +0 -277
- package/extensions/msteams/src/runtime.ts +0 -14
- package/extensions/msteams/src/sdk-types.ts +0 -19
- package/extensions/msteams/src/sdk.ts +0 -33
- package/extensions/msteams/src/send-context.ts +0 -156
- package/extensions/msteams/src/send.ts +0 -489
- package/extensions/msteams/src/sent-message-cache.test.ts +0 -16
- package/extensions/msteams/src/sent-message-cache.ts +0 -41
- package/extensions/msteams/src/storage.ts +0 -22
- package/extensions/msteams/src/store-fs.ts +0 -80
- package/extensions/msteams/src/token.ts +0 -19
- package/extensions/nextcloud-talk/clawdbot.plugin.json +0 -11
- package/extensions/nextcloud-talk/index.ts +0 -18
- package/extensions/nextcloud-talk/package.json +0 -30
- package/extensions/nextcloud-talk/src/accounts.ts +0 -154
- package/extensions/nextcloud-talk/src/channel.ts +0 -404
- package/extensions/nextcloud-talk/src/config-schema.ts +0 -78
- package/extensions/nextcloud-talk/src/format.ts +0 -79
- package/extensions/nextcloud-talk/src/inbound.ts +0 -336
- package/extensions/nextcloud-talk/src/monitor.ts +0 -246
- package/extensions/nextcloud-talk/src/normalize.ts +0 -31
- package/extensions/nextcloud-talk/src/onboarding.ts +0 -341
- package/extensions/nextcloud-talk/src/policy.ts +0 -175
- package/extensions/nextcloud-talk/src/room-info.ts +0 -111
- package/extensions/nextcloud-talk/src/runtime.ts +0 -14
- package/extensions/nextcloud-talk/src/send.ts +0 -206
- package/extensions/nextcloud-talk/src/signature.ts +0 -67
- package/extensions/nextcloud-talk/src/types.ts +0 -179
- package/extensions/nostr/CHANGELOG.md +0 -46
- package/extensions/nostr/README.md +0 -136
- package/extensions/nostr/clawdbot.plugin.json +0 -11
- package/extensions/nostr/index.ts +0 -69
- package/extensions/nostr/package.json +0 -31
- package/extensions/nostr/src/channel.test.ts +0 -141
- package/extensions/nostr/src/channel.ts +0 -342
- package/extensions/nostr/src/config-schema.ts +0 -90
- package/extensions/nostr/src/metrics.ts +0 -464
- package/extensions/nostr/src/nostr-bus.fuzz.test.ts +0 -544
- package/extensions/nostr/src/nostr-bus.integration.test.ts +0 -452
- package/extensions/nostr/src/nostr-bus.test.ts +0 -199
- package/extensions/nostr/src/nostr-bus.ts +0 -741
- package/extensions/nostr/src/nostr-profile-http.test.ts +0 -378
- package/extensions/nostr/src/nostr-profile-http.ts +0 -500
- package/extensions/nostr/src/nostr-profile-import.test.ts +0 -120
- package/extensions/nostr/src/nostr-profile-import.ts +0 -259
- package/extensions/nostr/src/nostr-profile.fuzz.test.ts +0 -479
- package/extensions/nostr/src/nostr-profile.test.ts +0 -410
- package/extensions/nostr/src/nostr-profile.ts +0 -242
- package/extensions/nostr/src/nostr-state-store.test.ts +0 -128
- package/extensions/nostr/src/nostr-state-store.ts +0 -226
- package/extensions/nostr/src/runtime.ts +0 -14
- package/extensions/nostr/src/seen-tracker.ts +0 -271
- package/extensions/nostr/src/types.test.ts +0 -161
- package/extensions/nostr/src/types.ts +0 -99
- package/extensions/nostr/test/setup.ts +0 -5
- package/extensions/open-prose/README.md +0 -25
- package/extensions/open-prose/clawdbot.plugin.json +0 -11
- package/extensions/open-prose/index.ts +0 -5
- package/extensions/open-prose/package.json +0 -11
- package/extensions/open-prose/skills/prose/LICENSE +0 -21
- package/extensions/open-prose/skills/prose/SKILL.md +0 -318
- package/extensions/open-prose/skills/prose/alt-borges.md +0 -141
- package/extensions/open-prose/skills/prose/alts/arabian-nights.md +0 -358
- package/extensions/open-prose/skills/prose/alts/borges.md +0 -360
- package/extensions/open-prose/skills/prose/alts/folk.md +0 -322
- package/extensions/open-prose/skills/prose/alts/homer.md +0 -346
- package/extensions/open-prose/skills/prose/alts/kafka.md +0 -373
- package/extensions/open-prose/skills/prose/compiler.md +0 -2967
- package/extensions/open-prose/skills/prose/examples/01-hello-world.prose +0 -4
- package/extensions/open-prose/skills/prose/examples/02-research-and-summarize.prose +0 -6
- package/extensions/open-prose/skills/prose/examples/03-code-review.prose +0 -17
- package/extensions/open-prose/skills/prose/examples/04-write-and-refine.prose +0 -14
- package/extensions/open-prose/skills/prose/examples/05-debug-issue.prose +0 -20
- package/extensions/open-prose/skills/prose/examples/06-explain-codebase.prose +0 -17
- package/extensions/open-prose/skills/prose/examples/07-refactor.prose +0 -20
- package/extensions/open-prose/skills/prose/examples/08-blog-post.prose +0 -20
- package/extensions/open-prose/skills/prose/examples/09-research-with-agents.prose +0 -25
- package/extensions/open-prose/skills/prose/examples/10-code-review-agents.prose +0 -32
- package/extensions/open-prose/skills/prose/examples/11-skills-and-imports.prose +0 -27
- package/extensions/open-prose/skills/prose/examples/12-secure-agent-permissions.prose +0 -43
- package/extensions/open-prose/skills/prose/examples/13-variables-and-context.prose +0 -51
- package/extensions/open-prose/skills/prose/examples/14-composition-blocks.prose +0 -48
- package/extensions/open-prose/skills/prose/examples/15-inline-sequences.prose +0 -23
- package/extensions/open-prose/skills/prose/examples/16-parallel-reviews.prose +0 -19
- package/extensions/open-prose/skills/prose/examples/17-parallel-research.prose +0 -19
- package/extensions/open-prose/skills/prose/examples/18-mixed-parallel-sequential.prose +0 -36
- package/extensions/open-prose/skills/prose/examples/19-advanced-parallel.prose +0 -71
- package/extensions/open-prose/skills/prose/examples/20-fixed-loops.prose +0 -20
- package/extensions/open-prose/skills/prose/examples/21-pipeline-operations.prose +0 -35
- package/extensions/open-prose/skills/prose/examples/22-error-handling.prose +0 -51
- package/extensions/open-prose/skills/prose/examples/23-retry-with-backoff.prose +0 -63
- package/extensions/open-prose/skills/prose/examples/24-choice-blocks.prose +0 -86
- package/extensions/open-prose/skills/prose/examples/25-conditionals.prose +0 -114
- package/extensions/open-prose/skills/prose/examples/26-parameterized-blocks.prose +0 -100
- package/extensions/open-prose/skills/prose/examples/27-string-interpolation.prose +0 -105
- package/extensions/open-prose/skills/prose/examples/28-automated-pr-review.prose +0 -37
- package/extensions/open-prose/skills/prose/examples/28-gas-town.prose +0 -1572
- package/extensions/open-prose/skills/prose/examples/29-captains-chair.prose +0 -218
- package/extensions/open-prose/skills/prose/examples/30-captains-chair-simple.prose +0 -42
- package/extensions/open-prose/skills/prose/examples/31-captains-chair-with-memory.prose +0 -145
- package/extensions/open-prose/skills/prose/examples/33-pr-review-autofix.prose +0 -168
- package/extensions/open-prose/skills/prose/examples/34-content-pipeline.prose +0 -204
- package/extensions/open-prose/skills/prose/examples/35-feature-factory.prose +0 -296
- package/extensions/open-prose/skills/prose/examples/36-bug-hunter.prose +0 -237
- package/extensions/open-prose/skills/prose/examples/37-the-forge.prose +0 -1474
- package/extensions/open-prose/skills/prose/examples/38-skill-scan.prose +0 -455
- package/extensions/open-prose/skills/prose/examples/39-architect-by-simulation.prose +0 -277
- package/extensions/open-prose/skills/prose/examples/40-rlm-self-refine.prose +0 -32
- package/extensions/open-prose/skills/prose/examples/41-rlm-divide-conquer.prose +0 -38
- package/extensions/open-prose/skills/prose/examples/42-rlm-filter-recurse.prose +0 -46
- package/extensions/open-prose/skills/prose/examples/43-rlm-pairwise.prose +0 -50
- package/extensions/open-prose/skills/prose/examples/44-run-endpoint-ux-test.prose +0 -261
- package/extensions/open-prose/skills/prose/examples/45-plugin-release.prose +0 -159
- package/extensions/open-prose/skills/prose/examples/45-run-endpoint-ux-test-with-remediation.prose +0 -637
- package/extensions/open-prose/skills/prose/examples/46-run-endpoint-ux-test-fast.prose +0 -148
- package/extensions/open-prose/skills/prose/examples/46-workflow-crystallizer.prose +0 -225
- package/extensions/open-prose/skills/prose/examples/47-language-self-improvement.prose +0 -356
- package/extensions/open-prose/skills/prose/examples/48-habit-miner.prose +0 -445
- package/extensions/open-prose/skills/prose/examples/49-prose-run-retrospective.prose +0 -210
- package/extensions/open-prose/skills/prose/examples/README.md +0 -391
- package/extensions/open-prose/skills/prose/examples/roadmap/README.md +0 -22
- package/extensions/open-prose/skills/prose/examples/roadmap/iterative-refinement.prose +0 -20
- package/extensions/open-prose/skills/prose/examples/roadmap/parallel-review.prose +0 -18
- package/extensions/open-prose/skills/prose/examples/roadmap/simple-pipeline.prose +0 -17
- package/extensions/open-prose/skills/prose/examples/roadmap/syntax/open-prose-syntax.prose +0 -223
- package/extensions/open-prose/skills/prose/guidance/antipatterns.md +0 -951
- package/extensions/open-prose/skills/prose/guidance/patterns.md +0 -700
- package/extensions/open-prose/skills/prose/guidance/system-prompt.md +0 -180
- package/extensions/open-prose/skills/prose/help.md +0 -143
- package/extensions/open-prose/skills/prose/lib/README.md +0 -105
- package/extensions/open-prose/skills/prose/lib/calibrator.prose +0 -215
- package/extensions/open-prose/skills/prose/lib/cost-analyzer.prose +0 -174
- package/extensions/open-prose/skills/prose/lib/error-forensics.prose +0 -250
- package/extensions/open-prose/skills/prose/lib/inspector.prose +0 -196
- package/extensions/open-prose/skills/prose/lib/profiler.prose +0 -460
- package/extensions/open-prose/skills/prose/lib/program-improver.prose +0 -275
- package/extensions/open-prose/skills/prose/lib/project-memory.prose +0 -118
- package/extensions/open-prose/skills/prose/lib/user-memory.prose +0 -93
- package/extensions/open-prose/skills/prose/lib/vm-improver.prose +0 -243
- package/extensions/open-prose/skills/prose/primitives/session.md +0 -587
- package/extensions/open-prose/skills/prose/prose.md +0 -1235
- package/extensions/open-prose/skills/prose/state/filesystem.md +0 -478
- package/extensions/open-prose/skills/prose/state/in-context.md +0 -380
- package/extensions/open-prose/skills/prose/state/postgres.md +0 -875
- package/extensions/open-prose/skills/prose/state/sqlite.md +0 -572
- package/extensions/qwen-portal-auth/README.md +0 -24
- package/extensions/qwen-portal-auth/clawdbot.plugin.json +0 -11
- package/extensions/qwen-portal-auth/index.ts +0 -127
- package/extensions/qwen-portal-auth/oauth.ts +0 -190
- package/extensions/signal/clawdbot.plugin.json +0 -11
- package/extensions/signal/index.ts +0 -18
- package/extensions/signal/package.json +0 -11
- package/extensions/signal/src/channel.ts +0 -312
- package/extensions/signal/src/runtime.ts +0 -14
- package/extensions/telegram/clawdbot.plugin.json +0 -11
- package/extensions/telegram/index.ts +0 -18
- package/extensions/telegram/package.json +0 -11
- package/extensions/telegram/src/channel.ts +0 -478
- package/extensions/telegram/src/runtime.ts +0 -14
- package/extensions/tlon/README.md +0 -5
- package/extensions/tlon/clawdbot.plugin.json +0 -11
- package/extensions/tlon/index.ts +0 -18
- package/extensions/tlon/package.json +0 -30
- package/extensions/tlon/src/channel.ts +0 -379
- package/extensions/tlon/src/config-schema.test.ts +0 -32
- package/extensions/tlon/src/config-schema.ts +0 -43
- package/extensions/tlon/src/monitor/discovery.ts +0 -71
- package/extensions/tlon/src/monitor/history.ts +0 -87
- package/extensions/tlon/src/monitor/index.ts +0 -501
- package/extensions/tlon/src/monitor/processed-messages.test.ts +0 -24
- package/extensions/tlon/src/monitor/processed-messages.ts +0 -38
- package/extensions/tlon/src/monitor/utils.ts +0 -83
- package/extensions/tlon/src/onboarding.ts +0 -213
- package/extensions/tlon/src/runtime.ts +0 -14
- package/extensions/tlon/src/targets.ts +0 -79
- package/extensions/tlon/src/types.ts +0 -85
- package/extensions/tlon/src/urbit/auth.ts +0 -18
- package/extensions/tlon/src/urbit/http-api.ts +0 -36
- package/extensions/tlon/src/urbit/send.test.ts +0 -38
- package/extensions/tlon/src/urbit/send.ts +0 -127
- package/extensions/tlon/src/urbit/sse-client.test.ts +0 -41
- package/extensions/tlon/src/urbit/sse-client.ts +0 -367
- package/extensions/twitch/CHANGELOG.md +0 -21
- package/extensions/twitch/README.md +0 -89
- package/extensions/twitch/clawdbot.plugin.json +0 -9
- package/extensions/twitch/index.ts +0 -20
- package/extensions/twitch/package.json +0 -20
- package/extensions/twitch/src/access-control.test.ts +0 -489
- package/extensions/twitch/src/access-control.ts +0 -154
- package/extensions/twitch/src/actions.ts +0 -173
- package/extensions/twitch/src/client-manager-registry.ts +0 -115
- package/extensions/twitch/src/config-schema.ts +0 -82
- package/extensions/twitch/src/config.test.ts +0 -88
- package/extensions/twitch/src/config.ts +0 -116
- package/extensions/twitch/src/monitor.ts +0 -257
- package/extensions/twitch/src/onboarding.test.ts +0 -311
- package/extensions/twitch/src/onboarding.ts +0 -411
- package/extensions/twitch/src/outbound.test.ts +0 -373
- package/extensions/twitch/src/outbound.ts +0 -186
- package/extensions/twitch/src/plugin.test.ts +0 -39
- package/extensions/twitch/src/plugin.ts +0 -274
- package/extensions/twitch/src/probe.test.ts +0 -198
- package/extensions/twitch/src/probe.ts +0 -118
- package/extensions/twitch/src/resolver.ts +0 -137
- package/extensions/twitch/src/runtime.ts +0 -14
- package/extensions/twitch/src/send.test.ts +0 -289
- package/extensions/twitch/src/send.ts +0 -136
- package/extensions/twitch/src/status.test.ts +0 -270
- package/extensions/twitch/src/status.ts +0 -176
- package/extensions/twitch/src/token.test.ts +0 -171
- package/extensions/twitch/src/token.ts +0 -87
- package/extensions/twitch/src/twitch-client.test.ts +0 -574
- package/extensions/twitch/src/twitch-client.ts +0 -277
- package/extensions/twitch/src/types.ts +0 -141
- package/extensions/twitch/src/utils/markdown.ts +0 -92
- package/extensions/twitch/src/utils/twitch.ts +0 -78
- package/extensions/twitch/test/setup.ts +0 -7
- package/extensions/voice-call/CHANGELOG.md +0 -72
- package/extensions/voice-call/README.md +0 -134
- package/extensions/voice-call/clawdbot.plugin.json +0 -601
- package/extensions/voice-call/index.ts +0 -497
- package/extensions/voice-call/package.json +0 -16
- package/extensions/voice-call/src/cli.ts +0 -300
- package/extensions/voice-call/src/config.test.ts +0 -204
- package/extensions/voice-call/src/config.ts +0 -493
- package/extensions/voice-call/src/core-bridge.ts +0 -196
- package/extensions/voice-call/src/manager/context.ts +0 -21
- package/extensions/voice-call/src/manager/events.ts +0 -177
- package/extensions/voice-call/src/manager/lookup.ts +0 -33
- package/extensions/voice-call/src/manager/outbound.ts +0 -248
- package/extensions/voice-call/src/manager/state.ts +0 -50
- package/extensions/voice-call/src/manager/store.ts +0 -88
- package/extensions/voice-call/src/manager/timers.ts +0 -86
- package/extensions/voice-call/src/manager/twiml.ts +0 -9
- package/extensions/voice-call/src/manager.test.ts +0 -108
- package/extensions/voice-call/src/manager.ts +0 -876
- package/extensions/voice-call/src/media-stream.test.ts +0 -97
- package/extensions/voice-call/src/media-stream.ts +0 -393
- package/extensions/voice-call/src/providers/base.ts +0 -67
- package/extensions/voice-call/src/providers/index.ts +0 -10
- package/extensions/voice-call/src/providers/mock.ts +0 -168
- package/extensions/voice-call/src/providers/plivo.test.ts +0 -28
- package/extensions/voice-call/src/providers/plivo.ts +0 -504
- package/extensions/voice-call/src/providers/stt-openai-realtime.ts +0 -311
- package/extensions/voice-call/src/providers/telnyx.ts +0 -364
- package/extensions/voice-call/src/providers/tts-openai.ts +0 -264
- package/extensions/voice-call/src/providers/twilio/api.ts +0 -45
- package/extensions/voice-call/src/providers/twilio/webhook.ts +0 -29
- package/extensions/voice-call/src/providers/twilio.test.ts +0 -64
- package/extensions/voice-call/src/providers/twilio.ts +0 -595
- package/extensions/voice-call/src/response-generator.ts +0 -171
- package/extensions/voice-call/src/runtime.ts +0 -205
- package/extensions/voice-call/src/telephony-audio.ts +0 -88
- package/extensions/voice-call/src/telephony-tts.ts +0 -95
- package/extensions/voice-call/src/tunnel.ts +0 -331
- package/extensions/voice-call/src/types.ts +0 -272
- package/extensions/voice-call/src/utils.ts +0 -12
- package/extensions/voice-call/src/voice-mapping.ts +0 -65
- package/extensions/voice-call/src/webhook-security.test.ts +0 -233
- package/extensions/voice-call/src/webhook-security.ts +0 -446
- package/extensions/voice-call/src/webhook.ts +0 -490
- package/extensions/whatsapp/clawdbot.plugin.json +0 -11
- package/extensions/whatsapp/index.ts +0 -18
- package/extensions/whatsapp/package.json +0 -11
- package/extensions/whatsapp/src/channel.ts +0 -500
- package/extensions/whatsapp/src/runtime.ts +0 -14
- package/extensions/zalo/CHANGELOG.md +0 -55
- package/extensions/zalo/README.md +0 -50
- package/extensions/zalo/clawdbot.plugin.json +0 -11
- package/extensions/zalo/index.ts +0 -20
- package/extensions/zalo/package.json +0 -33
- package/extensions/zalo/src/accounts.ts +0 -71
- package/extensions/zalo/src/actions.ts +0 -62
- package/extensions/zalo/src/api.ts +0 -206
- package/extensions/zalo/src/channel.directory.test.ts +0 -35
- package/extensions/zalo/src/channel.ts +0 -394
- package/extensions/zalo/src/config-schema.ts +0 -24
- package/extensions/zalo/src/monitor.ts +0 -760
- package/extensions/zalo/src/monitor.webhook.test.ts +0 -70
- package/extensions/zalo/src/onboarding.ts +0 -405
- package/extensions/zalo/src/probe.ts +0 -46
- package/extensions/zalo/src/proxy.ts +0 -18
- package/extensions/zalo/src/runtime.ts +0 -14
- package/extensions/zalo/src/send.ts +0 -117
- package/extensions/zalo/src/status-issues.ts +0 -50
- package/extensions/zalo/src/token.ts +0 -55
- package/extensions/zalo/src/types.ts +0 -42
- package/extensions/zalouser/CHANGELOG.md +0 -33
- package/extensions/zalouser/README.md +0 -221
- package/extensions/zalouser/clawdbot.plugin.json +0 -11
- package/extensions/zalouser/index.ts +0 -32
- package/extensions/zalouser/package.json +0 -33
- package/extensions/zalouser/src/accounts.ts +0 -117
- package/extensions/zalouser/src/channel.test.ts +0 -17
- package/extensions/zalouser/src/channel.ts +0 -641
- package/extensions/zalouser/src/config-schema.ts +0 -27
- package/extensions/zalouser/src/monitor.ts +0 -574
- package/extensions/zalouser/src/onboarding.ts +0 -488
- package/extensions/zalouser/src/probe.ts +0 -28
- package/extensions/zalouser/src/runtime.ts +0 -14
- package/extensions/zalouser/src/send.ts +0 -150
- package/extensions/zalouser/src/status-issues.test.ts +0 -58
- package/extensions/zalouser/src/status-issues.ts +0 -81
- package/extensions/zalouser/src/tool.ts +0 -156
- package/extensions/zalouser/src/types.ts +0 -102
- package/extensions/zalouser/src/zca.ts +0 -208
- package/skills/1password/SKILL.md +0 -53
- package/skills/1password/references/cli-examples.md +0 -29
- package/skills/1password/references/get-started.md +0 -17
- package/skills/apple-notes/SKILL.md +0 -50
- package/skills/apple-reminders/SKILL.md +0 -67
- package/skills/bear-notes/SKILL.md +0 -79
- package/skills/bird/SKILL.md +0 -197
- package/skills/blogwatcher/SKILL.md +0 -46
- package/skills/blucli/SKILL.md +0 -27
- package/skills/bluebubbles/SKILL.md +0 -39
- package/skills/camsnap/SKILL.md +0 -25
- package/skills/canvas/SKILL.md +0 -189
- package/skills/clawdhub/SKILL.md +0 -53
- package/skills/coding-agent/SKILL.md +0 -278
- package/skills/discord/SKILL.md +0 -475
- package/skills/eightctl/SKILL.md +0 -29
- package/skills/food-order/SKILL.md +0 -41
- package/skills/gemini/SKILL.md +0 -23
- package/skills/gifgrep/SKILL.md +0 -47
- package/skills/github/SKILL.md +0 -48
- package/skills/gog/SKILL.md +0 -92
- package/skills/goplaces/SKILL.md +0 -30
- package/skills/himalaya/SKILL.md +0 -217
- package/skills/himalaya/references/configuration.md +0 -174
- package/skills/himalaya/references/message-composition.md +0 -182
- package/skills/imsg/SKILL.md +0 -25
- package/skills/local-places/SERVER_README.md +0 -101
- package/skills/local-places/SKILL.md +0 -91
- package/skills/local-places/pyproject.toml +0 -27
- package/skills/local-places/src/local_places/__init__.py +0 -2
- package/skills/local-places/src/local_places/google_places.py +0 -314
- package/skills/local-places/src/local_places/main.py +0 -65
- package/skills/local-places/src/local_places/schemas.py +0 -107
- package/skills/mcporter/SKILL.md +0 -38
- package/skills/model-usage/SKILL.md +0 -45
- package/skills/model-usage/references/codexbar-cli.md +0 -28
- package/skills/model-usage/scripts/model_usage.py +0 -310
- package/skills/nano-banana-pro/SKILL.md +0 -30
- package/skills/nano-banana-pro/scripts/generate_image.py +0 -169
- package/skills/nano-pdf/SKILL.md +0 -20
- package/skills/notion/SKILL.md +0 -156
- package/skills/obsidian/SKILL.md +0 -55
- package/skills/openai-image-gen/SKILL.md +0 -71
- package/skills/openai-image-gen/scripts/gen.py +0 -240
- package/skills/openai-whisper/SKILL.md +0 -19
- package/skills/openai-whisper-api/SKILL.md +0 -43
- package/skills/openai-whisper-api/scripts/transcribe.sh +0 -85
- package/skills/openhue/SKILL.md +0 -30
- package/skills/oracle/SKILL.md +0 -105
- package/skills/ordercli/SKILL.md +0 -47
- package/skills/peekaboo/SKILL.md +0 -153
- package/skills/sag/SKILL.md +0 -62
- package/skills/session-logs/SKILL.md +0 -105
- package/skills/sherpa-onnx-tts/SKILL.md +0 -49
- package/skills/sherpa-onnx-tts/bin/sherpa-onnx-tts +0 -178
- package/skills/skill-creator/SKILL.md +0 -371
- package/skills/skill-creator/license.txt +0 -202
- package/skills/skill-creator/scripts/init_skill.py +0 -378
- package/skills/skill-creator/scripts/package_skill.py +0 -111
- package/skills/skill-creator/scripts/quick_validate.py +0 -101
- package/skills/slack/SKILL.md +0 -144
- package/skills/songsee/SKILL.md +0 -29
- package/skills/sonoscli/SKILL.md +0 -26
- package/skills/spotify-player/SKILL.md +0 -34
- package/skills/summarize/SKILL.md +0 -67
- package/skills/things-mac/SKILL.md +0 -61
- package/skills/tmux/SKILL.md +0 -121
- package/skills/tmux/scripts/find-sessions.sh +0 -112
- package/skills/tmux/scripts/wait-for-text.sh +0 -83
- package/skills/trello/SKILL.md +0 -84
- package/skills/video-frames/SKILL.md +0 -29
- package/skills/video-frames/scripts/frame.sh +0 -81
- package/skills/voice-call/SKILL.md +0 -35
- package/skills/wacli/SKILL.md +0 -42
- package/skills/weather/SKILL.md +0 -49
|
@@ -1,206 +0,0 @@
|
|
|
1
|
-
import { resolveNextcloudTalkAccount } from "./accounts.js";
|
|
2
|
-
import { getNextcloudTalkRuntime } from "./runtime.js";
|
|
3
|
-
import { generateNextcloudTalkSignature } from "./signature.js";
|
|
4
|
-
import type { CoreConfig, NextcloudTalkSendResult } from "./types.js";
|
|
5
|
-
|
|
6
|
-
type NextcloudTalkSendOpts = {
|
|
7
|
-
baseUrl?: string;
|
|
8
|
-
secret?: string;
|
|
9
|
-
accountId?: string;
|
|
10
|
-
replyTo?: string;
|
|
11
|
-
verbose?: boolean;
|
|
12
|
-
};
|
|
13
|
-
|
|
14
|
-
function resolveCredentials(
|
|
15
|
-
explicit: { baseUrl?: string; secret?: string },
|
|
16
|
-
account: { baseUrl: string; secret: string; accountId: string },
|
|
17
|
-
): { baseUrl: string; secret: string } {
|
|
18
|
-
const baseUrl = explicit.baseUrl?.trim() ?? account.baseUrl;
|
|
19
|
-
const secret = explicit.secret?.trim() ?? account.secret;
|
|
20
|
-
|
|
21
|
-
if (!baseUrl) {
|
|
22
|
-
throw new Error(
|
|
23
|
-
`Nextcloud Talk baseUrl missing for account "${account.accountId}" (set channels.nextcloud-talk.baseUrl).`,
|
|
24
|
-
);
|
|
25
|
-
}
|
|
26
|
-
if (!secret) {
|
|
27
|
-
throw new Error(
|
|
28
|
-
`Nextcloud Talk bot secret missing for account "${account.accountId}" (set channels.nextcloud-talk.botSecret/botSecretFile or NEXTCLOUD_TALK_BOT_SECRET for default).`,
|
|
29
|
-
);
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
return { baseUrl, secret };
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
function normalizeRoomToken(to: string): string {
|
|
36
|
-
const trimmed = to.trim();
|
|
37
|
-
if (!trimmed) throw new Error("Room token is required for Nextcloud Talk sends");
|
|
38
|
-
|
|
39
|
-
let normalized = trimmed;
|
|
40
|
-
if (normalized.startsWith("nextcloud-talk:")) {
|
|
41
|
-
normalized = normalized.slice("nextcloud-talk:".length).trim();
|
|
42
|
-
} else if (normalized.startsWith("nc:")) {
|
|
43
|
-
normalized = normalized.slice("nc:".length).trim();
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
if (normalized.startsWith("room:")) {
|
|
47
|
-
normalized = normalized.slice("room:".length).trim();
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
if (!normalized) throw new Error("Room token is required for Nextcloud Talk sends");
|
|
51
|
-
return normalized;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
export async function sendMessageNextcloudTalk(
|
|
55
|
-
to: string,
|
|
56
|
-
text: string,
|
|
57
|
-
opts: NextcloudTalkSendOpts = {},
|
|
58
|
-
): Promise<NextcloudTalkSendResult> {
|
|
59
|
-
const cfg = getNextcloudTalkRuntime().config.loadConfig() as CoreConfig;
|
|
60
|
-
const account = resolveNextcloudTalkAccount({
|
|
61
|
-
cfg,
|
|
62
|
-
accountId: opts.accountId,
|
|
63
|
-
});
|
|
64
|
-
const { baseUrl, secret } = resolveCredentials(
|
|
65
|
-
{ baseUrl: opts.baseUrl, secret: opts.secret },
|
|
66
|
-
account,
|
|
67
|
-
);
|
|
68
|
-
const roomToken = normalizeRoomToken(to);
|
|
69
|
-
|
|
70
|
-
if (!text?.trim()) {
|
|
71
|
-
throw new Error("Message must be non-empty for Nextcloud Talk sends");
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
const tableMode = getNextcloudTalkRuntime().channel.text.resolveMarkdownTableMode({
|
|
75
|
-
cfg,
|
|
76
|
-
channel: "nextcloud-talk",
|
|
77
|
-
accountId: account.accountId,
|
|
78
|
-
});
|
|
79
|
-
const message = getNextcloudTalkRuntime().channel.text.convertMarkdownTables(
|
|
80
|
-
text.trim(),
|
|
81
|
-
tableMode,
|
|
82
|
-
);
|
|
83
|
-
|
|
84
|
-
const body: Record<string, unknown> = {
|
|
85
|
-
message,
|
|
86
|
-
};
|
|
87
|
-
if (opts.replyTo) {
|
|
88
|
-
body.replyTo = opts.replyTo;
|
|
89
|
-
}
|
|
90
|
-
const bodyStr = JSON.stringify(body);
|
|
91
|
-
|
|
92
|
-
const { random, signature } = generateNextcloudTalkSignature({
|
|
93
|
-
body: bodyStr,
|
|
94
|
-
secret,
|
|
95
|
-
});
|
|
96
|
-
|
|
97
|
-
const url = `${baseUrl}/ocs/v2.php/apps/spreed/api/v1/bot/${roomToken}/message`;
|
|
98
|
-
|
|
99
|
-
const response = await fetch(url, {
|
|
100
|
-
method: "POST",
|
|
101
|
-
headers: {
|
|
102
|
-
"Content-Type": "application/json",
|
|
103
|
-
"OCS-APIRequest": "true",
|
|
104
|
-
"X-Nextcloud-Talk-Bot-Random": random,
|
|
105
|
-
"X-Nextcloud-Talk-Bot-Signature": signature,
|
|
106
|
-
},
|
|
107
|
-
body: bodyStr,
|
|
108
|
-
});
|
|
109
|
-
|
|
110
|
-
if (!response.ok) {
|
|
111
|
-
const errorBody = await response.text().catch(() => "");
|
|
112
|
-
const status = response.status;
|
|
113
|
-
let errorMsg = `Nextcloud Talk send failed (${status})`;
|
|
114
|
-
|
|
115
|
-
if (status === 400) {
|
|
116
|
-
errorMsg = `Nextcloud Talk: bad request - ${errorBody || "invalid message format"}`;
|
|
117
|
-
} else if (status === 401) {
|
|
118
|
-
errorMsg = "Nextcloud Talk: authentication failed - check bot secret";
|
|
119
|
-
} else if (status === 403) {
|
|
120
|
-
errorMsg = "Nextcloud Talk: forbidden - bot may not have permission in this room";
|
|
121
|
-
} else if (status === 404) {
|
|
122
|
-
errorMsg = `Nextcloud Talk: room not found (token=${roomToken})`;
|
|
123
|
-
} else if (errorBody) {
|
|
124
|
-
errorMsg = `Nextcloud Talk send failed: ${errorBody}`;
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
throw new Error(errorMsg);
|
|
128
|
-
}
|
|
129
|
-
|
|
130
|
-
let messageId = "unknown";
|
|
131
|
-
let timestamp: number | undefined;
|
|
132
|
-
try {
|
|
133
|
-
const data = (await response.json()) as {
|
|
134
|
-
ocs?: {
|
|
135
|
-
data?: {
|
|
136
|
-
id?: number | string;
|
|
137
|
-
timestamp?: number;
|
|
138
|
-
};
|
|
139
|
-
};
|
|
140
|
-
};
|
|
141
|
-
if (data.ocs?.data?.id != null) {
|
|
142
|
-
messageId = String(data.ocs.data.id);
|
|
143
|
-
}
|
|
144
|
-
if (typeof data.ocs?.data?.timestamp === "number") {
|
|
145
|
-
timestamp = data.ocs.data.timestamp;
|
|
146
|
-
}
|
|
147
|
-
} catch {
|
|
148
|
-
// Response parsing failed, but message was sent.
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
if (opts.verbose) {
|
|
152
|
-
console.log(`[nextcloud-talk] Sent message ${messageId} to room ${roomToken}`);
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
getNextcloudTalkRuntime().channel.activity.record({
|
|
156
|
-
channel: "nextcloud-talk",
|
|
157
|
-
accountId: account.accountId,
|
|
158
|
-
direction: "outbound",
|
|
159
|
-
});
|
|
160
|
-
|
|
161
|
-
return { messageId, roomToken, timestamp };
|
|
162
|
-
}
|
|
163
|
-
|
|
164
|
-
export async function sendReactionNextcloudTalk(
|
|
165
|
-
roomToken: string,
|
|
166
|
-
messageId: string,
|
|
167
|
-
reaction: string,
|
|
168
|
-
opts: Omit<NextcloudTalkSendOpts, "replyTo"> = {},
|
|
169
|
-
): Promise<{ ok: true }> {
|
|
170
|
-
const cfg = getNextcloudTalkRuntime().config.loadConfig() as CoreConfig;
|
|
171
|
-
const account = resolveNextcloudTalkAccount({
|
|
172
|
-
cfg,
|
|
173
|
-
accountId: opts.accountId,
|
|
174
|
-
});
|
|
175
|
-
const { baseUrl, secret } = resolveCredentials(
|
|
176
|
-
{ baseUrl: opts.baseUrl, secret: opts.secret },
|
|
177
|
-
account,
|
|
178
|
-
);
|
|
179
|
-
const normalizedToken = normalizeRoomToken(roomToken);
|
|
180
|
-
|
|
181
|
-
const body = JSON.stringify({ reaction });
|
|
182
|
-
const { random, signature } = generateNextcloudTalkSignature({
|
|
183
|
-
body,
|
|
184
|
-
secret,
|
|
185
|
-
});
|
|
186
|
-
|
|
187
|
-
const url = `${baseUrl}/ocs/v2.php/apps/spreed/api/v1/bot/${normalizedToken}/reaction/${messageId}`;
|
|
188
|
-
|
|
189
|
-
const response = await fetch(url, {
|
|
190
|
-
method: "POST",
|
|
191
|
-
headers: {
|
|
192
|
-
"Content-Type": "application/json",
|
|
193
|
-
"OCS-APIRequest": "true",
|
|
194
|
-
"X-Nextcloud-Talk-Bot-Random": random,
|
|
195
|
-
"X-Nextcloud-Talk-Bot-Signature": signature,
|
|
196
|
-
},
|
|
197
|
-
body,
|
|
198
|
-
});
|
|
199
|
-
|
|
200
|
-
if (!response.ok) {
|
|
201
|
-
const errorBody = await response.text().catch(() => "");
|
|
202
|
-
throw new Error(`Nextcloud Talk reaction failed: ${response.status} ${errorBody}`.trim());
|
|
203
|
-
}
|
|
204
|
-
|
|
205
|
-
return { ok: true };
|
|
206
|
-
}
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
import { createHmac, randomBytes } from "node:crypto";
|
|
2
|
-
|
|
3
|
-
import type { NextcloudTalkWebhookHeaders } from "./types.js";
|
|
4
|
-
|
|
5
|
-
const SIGNATURE_HEADER = "x-nextcloud-talk-signature";
|
|
6
|
-
const RANDOM_HEADER = "x-nextcloud-talk-random";
|
|
7
|
-
const BACKEND_HEADER = "x-nextcloud-talk-backend";
|
|
8
|
-
|
|
9
|
-
/**
|
|
10
|
-
* Verify the HMAC-SHA256 signature of an incoming webhook request.
|
|
11
|
-
* Signature is calculated as: HMAC-SHA256(random + body, secret)
|
|
12
|
-
*/
|
|
13
|
-
export function verifyNextcloudTalkSignature(params: {
|
|
14
|
-
signature: string;
|
|
15
|
-
random: string;
|
|
16
|
-
body: string;
|
|
17
|
-
secret: string;
|
|
18
|
-
}): boolean {
|
|
19
|
-
const { signature, random, body, secret } = params;
|
|
20
|
-
if (!signature || !random || !secret) return false;
|
|
21
|
-
|
|
22
|
-
const expected = createHmac("sha256", secret)
|
|
23
|
-
.update(random + body)
|
|
24
|
-
.digest("hex");
|
|
25
|
-
|
|
26
|
-
if (signature.length !== expected.length) return false;
|
|
27
|
-
let result = 0;
|
|
28
|
-
for (let i = 0; i < signature.length; i++) {
|
|
29
|
-
result |= signature.charCodeAt(i) ^ expected.charCodeAt(i);
|
|
30
|
-
}
|
|
31
|
-
return result === 0;
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
/**
|
|
35
|
-
* Extract webhook headers from an incoming request.
|
|
36
|
-
*/
|
|
37
|
-
export function extractNextcloudTalkHeaders(
|
|
38
|
-
headers: Record<string, string | string[] | undefined>,
|
|
39
|
-
): NextcloudTalkWebhookHeaders | null {
|
|
40
|
-
const getHeader = (name: string): string | undefined => {
|
|
41
|
-
const value = headers[name] ?? headers[name.toLowerCase()];
|
|
42
|
-
return Array.isArray(value) ? value[0] : value;
|
|
43
|
-
};
|
|
44
|
-
|
|
45
|
-
const signature = getHeader(SIGNATURE_HEADER);
|
|
46
|
-
const random = getHeader(RANDOM_HEADER);
|
|
47
|
-
const backend = getHeader(BACKEND_HEADER);
|
|
48
|
-
|
|
49
|
-
if (!signature || !random || !backend) return null;
|
|
50
|
-
|
|
51
|
-
return { signature, random, backend };
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
/**
|
|
55
|
-
* Generate signature headers for an outbound request to Nextcloud Talk.
|
|
56
|
-
*/
|
|
57
|
-
export function generateNextcloudTalkSignature(params: { body: string; secret: string }): {
|
|
58
|
-
random: string;
|
|
59
|
-
signature: string;
|
|
60
|
-
} {
|
|
61
|
-
const { body, secret } = params;
|
|
62
|
-
const random = randomBytes(32).toString("hex");
|
|
63
|
-
const signature = createHmac("sha256", secret)
|
|
64
|
-
.update(random + body)
|
|
65
|
-
.digest("hex");
|
|
66
|
-
return { random, signature };
|
|
67
|
-
}
|
|
@@ -1,179 +0,0 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
BlockStreamingCoalesceConfig,
|
|
3
|
-
DmConfig,
|
|
4
|
-
DmPolicy,
|
|
5
|
-
GroupPolicy,
|
|
6
|
-
} from "clawdbot/plugin-sdk";
|
|
7
|
-
|
|
8
|
-
export type NextcloudTalkRoomConfig = {
|
|
9
|
-
requireMention?: boolean;
|
|
10
|
-
/** Optional tool policy overrides for this room. */
|
|
11
|
-
tools?: { allow?: string[]; deny?: string[] };
|
|
12
|
-
/** If specified, only load these skills for this room. Omit = all skills; empty = no skills. */
|
|
13
|
-
skills?: string[];
|
|
14
|
-
/** If false, disable the bot for this room. */
|
|
15
|
-
enabled?: boolean;
|
|
16
|
-
/** Optional allowlist for room senders (user ids). */
|
|
17
|
-
allowFrom?: string[];
|
|
18
|
-
/** Optional system prompt snippet for this room. */
|
|
19
|
-
systemPrompt?: string;
|
|
20
|
-
};
|
|
21
|
-
|
|
22
|
-
export type NextcloudTalkAccountConfig = {
|
|
23
|
-
/** Optional display name for this account (used in CLI/UI lists). */
|
|
24
|
-
name?: string;
|
|
25
|
-
/** If false, do not start this Nextcloud Talk account. Default: true. */
|
|
26
|
-
enabled?: boolean;
|
|
27
|
-
/** Base URL of the Nextcloud instance (e.g., "https://cloud.example.com"). */
|
|
28
|
-
baseUrl?: string;
|
|
29
|
-
/** Bot shared secret from occ talk:bot:install output. */
|
|
30
|
-
botSecret?: string;
|
|
31
|
-
/** Path to file containing bot secret (for secret managers). */
|
|
32
|
-
botSecretFile?: string;
|
|
33
|
-
/** Optional API user for room lookups (DM detection). */
|
|
34
|
-
apiUser?: string;
|
|
35
|
-
/** Optional API password/app password for room lookups. */
|
|
36
|
-
apiPassword?: string;
|
|
37
|
-
/** Path to file containing API password/app password. */
|
|
38
|
-
apiPasswordFile?: string;
|
|
39
|
-
/** Direct message policy (default: pairing). */
|
|
40
|
-
dmPolicy?: DmPolicy;
|
|
41
|
-
/** Webhook server port. Default: 8788. */
|
|
42
|
-
webhookPort?: number;
|
|
43
|
-
/** Webhook server host. Default: "0.0.0.0". */
|
|
44
|
-
webhookHost?: string;
|
|
45
|
-
/** Webhook endpoint path. Default: "/nextcloud-talk-webhook". */
|
|
46
|
-
webhookPath?: string;
|
|
47
|
-
/** Public URL for the webhook (used if behind reverse proxy). */
|
|
48
|
-
webhookPublicUrl?: string;
|
|
49
|
-
/** Optional allowlist of user IDs allowed to DM the bot. */
|
|
50
|
-
allowFrom?: string[];
|
|
51
|
-
/** Optional allowlist for Nextcloud Talk room senders (user ids). */
|
|
52
|
-
groupAllowFrom?: string[];
|
|
53
|
-
/** Group message policy (default: allowlist). */
|
|
54
|
-
groupPolicy?: GroupPolicy;
|
|
55
|
-
/** Per-room configuration (key is room token). */
|
|
56
|
-
rooms?: Record<string, NextcloudTalkRoomConfig>;
|
|
57
|
-
/** Max group messages to keep as history context (0 disables). */
|
|
58
|
-
historyLimit?: number;
|
|
59
|
-
/** Max DM turns to keep as history context. */
|
|
60
|
-
dmHistoryLimit?: number;
|
|
61
|
-
/** Per-DM config overrides keyed by user ID. */
|
|
62
|
-
dms?: Record<string, DmConfig>;
|
|
63
|
-
/** Outbound text chunk size (chars). Default: 4000. */
|
|
64
|
-
textChunkLimit?: number;
|
|
65
|
-
/** Chunking mode: "length" (default) splits by size; "newline" splits on every newline. */
|
|
66
|
-
chunkMode?: "length" | "newline";
|
|
67
|
-
/** Disable block streaming for this account. */
|
|
68
|
-
blockStreaming?: boolean;
|
|
69
|
-
/** Merge streamed block replies before sending. */
|
|
70
|
-
blockStreamingCoalesce?: BlockStreamingCoalesceConfig;
|
|
71
|
-
/** Media upload max size in MB. */
|
|
72
|
-
mediaMaxMb?: number;
|
|
73
|
-
};
|
|
74
|
-
|
|
75
|
-
export type NextcloudTalkConfig = {
|
|
76
|
-
/** Optional per-account Nextcloud Talk configuration (multi-account). */
|
|
77
|
-
accounts?: Record<string, NextcloudTalkAccountConfig>;
|
|
78
|
-
} & NextcloudTalkAccountConfig;
|
|
79
|
-
|
|
80
|
-
export type CoreConfig = {
|
|
81
|
-
channels?: {
|
|
82
|
-
"nextcloud-talk"?: NextcloudTalkConfig;
|
|
83
|
-
};
|
|
84
|
-
[key: string]: unknown;
|
|
85
|
-
};
|
|
86
|
-
|
|
87
|
-
/**
|
|
88
|
-
* Nextcloud Talk webhook payload types based on Activity Streams 2.0 format.
|
|
89
|
-
* Reference: https://nextcloud-talk.readthedocs.io/en/latest/bots/
|
|
90
|
-
*/
|
|
91
|
-
|
|
92
|
-
/** Actor in the activity (the message sender). */
|
|
93
|
-
export type NextcloudTalkActor = {
|
|
94
|
-
type: "Person";
|
|
95
|
-
/** User ID in Nextcloud. */
|
|
96
|
-
id: string;
|
|
97
|
-
/** Display name of the user. */
|
|
98
|
-
name: string;
|
|
99
|
-
};
|
|
100
|
-
|
|
101
|
-
/** The message object in the activity. */
|
|
102
|
-
export type NextcloudTalkObject = {
|
|
103
|
-
type: "Note";
|
|
104
|
-
/** Message ID. */
|
|
105
|
-
id: string;
|
|
106
|
-
/** Message text (same as content for text/plain). */
|
|
107
|
-
name: string;
|
|
108
|
-
/** Message content. */
|
|
109
|
-
content: string;
|
|
110
|
-
/** Media type of the content. */
|
|
111
|
-
mediaType: string;
|
|
112
|
-
};
|
|
113
|
-
|
|
114
|
-
/** Target conversation/room. */
|
|
115
|
-
export type NextcloudTalkTarget = {
|
|
116
|
-
type: "Collection";
|
|
117
|
-
/** Room token. */
|
|
118
|
-
id: string;
|
|
119
|
-
/** Room display name. */
|
|
120
|
-
name: string;
|
|
121
|
-
};
|
|
122
|
-
|
|
123
|
-
/** Incoming webhook payload from Nextcloud Talk. */
|
|
124
|
-
export type NextcloudTalkWebhookPayload = {
|
|
125
|
-
type: "Create" | "Update" | "Delete";
|
|
126
|
-
actor: NextcloudTalkActor;
|
|
127
|
-
object: NextcloudTalkObject;
|
|
128
|
-
target: NextcloudTalkTarget;
|
|
129
|
-
};
|
|
130
|
-
|
|
131
|
-
/** Result from sending a message to Nextcloud Talk. */
|
|
132
|
-
export type NextcloudTalkSendResult = {
|
|
133
|
-
messageId: string;
|
|
134
|
-
roomToken: string;
|
|
135
|
-
timestamp?: number;
|
|
136
|
-
};
|
|
137
|
-
|
|
138
|
-
/** Parsed incoming message context. */
|
|
139
|
-
export type NextcloudTalkInboundMessage = {
|
|
140
|
-
messageId: string;
|
|
141
|
-
roomToken: string;
|
|
142
|
-
roomName: string;
|
|
143
|
-
senderId: string;
|
|
144
|
-
senderName: string;
|
|
145
|
-
text: string;
|
|
146
|
-
mediaType: string;
|
|
147
|
-
timestamp: number;
|
|
148
|
-
isGroupChat: boolean;
|
|
149
|
-
};
|
|
150
|
-
|
|
151
|
-
/** Headers sent by Nextcloud Talk webhook. */
|
|
152
|
-
export type NextcloudTalkWebhookHeaders = {
|
|
153
|
-
/** HMAC-SHA256 signature of the request. */
|
|
154
|
-
signature: string;
|
|
155
|
-
/** Random string used in signature calculation. */
|
|
156
|
-
random: string;
|
|
157
|
-
/** Backend Nextcloud server URL. */
|
|
158
|
-
backend: string;
|
|
159
|
-
};
|
|
160
|
-
|
|
161
|
-
/** Options for the webhook server. */
|
|
162
|
-
export type NextcloudTalkWebhookServerOptions = {
|
|
163
|
-
port: number;
|
|
164
|
-
host: string;
|
|
165
|
-
path: string;
|
|
166
|
-
secret: string;
|
|
167
|
-
onMessage: (message: NextcloudTalkInboundMessage) => void | Promise<void>;
|
|
168
|
-
onError?: (error: Error) => void;
|
|
169
|
-
abortSignal?: AbortSignal;
|
|
170
|
-
};
|
|
171
|
-
|
|
172
|
-
/** Options for sending a message. */
|
|
173
|
-
export type NextcloudTalkSendOptions = {
|
|
174
|
-
baseUrl: string;
|
|
175
|
-
secret: string;
|
|
176
|
-
roomToken: string;
|
|
177
|
-
message: string;
|
|
178
|
-
replyTo?: string;
|
|
179
|
-
};
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
# Changelog
|
|
2
|
-
|
|
3
|
-
## 2026.1.23
|
|
4
|
-
|
|
5
|
-
### Changes
|
|
6
|
-
- Version alignment with core Clawdbot release numbers.
|
|
7
|
-
|
|
8
|
-
## 2026.1.22
|
|
9
|
-
|
|
10
|
-
### Changes
|
|
11
|
-
- Version alignment with core Clawdbot release numbers.
|
|
12
|
-
|
|
13
|
-
## 2026.1.21
|
|
14
|
-
|
|
15
|
-
### Changes
|
|
16
|
-
- Version alignment with core Clawdbot release numbers.
|
|
17
|
-
|
|
18
|
-
## 2026.1.20
|
|
19
|
-
|
|
20
|
-
### Changes
|
|
21
|
-
- Version alignment with core Clawdbot release numbers.
|
|
22
|
-
|
|
23
|
-
## 2026.1.19-1
|
|
24
|
-
|
|
25
|
-
Initial release.
|
|
26
|
-
|
|
27
|
-
### Features
|
|
28
|
-
|
|
29
|
-
- NIP-04 encrypted DM support (kind:4 events)
|
|
30
|
-
- Key validation (hex and nsec formats)
|
|
31
|
-
- Multi-relay support with sequential fallback
|
|
32
|
-
- Event signature verification
|
|
33
|
-
- TTL-based deduplication (24h)
|
|
34
|
-
- Access control via dmPolicy (pairing, allowlist, open, disabled)
|
|
35
|
-
- Pubkey normalization (hex/npub)
|
|
36
|
-
|
|
37
|
-
### Protocol Support
|
|
38
|
-
|
|
39
|
-
- NIP-01: Basic event structure
|
|
40
|
-
- NIP-04: Encrypted direct messages
|
|
41
|
-
|
|
42
|
-
### Planned for v2
|
|
43
|
-
|
|
44
|
-
- NIP-17: Gift-wrapped DMs
|
|
45
|
-
- NIP-44: Versioned encryption
|
|
46
|
-
- Media attachments
|
|
@@ -1,136 +0,0 @@
|
|
|
1
|
-
# @clawdbot/nostr
|
|
2
|
-
|
|
3
|
-
Nostr DM channel plugin for Clawdbot using NIP-04 encrypted direct messages.
|
|
4
|
-
|
|
5
|
-
## Overview
|
|
6
|
-
|
|
7
|
-
This extension adds Nostr as a messaging channel to Clawdbot. It enables your bot to:
|
|
8
|
-
|
|
9
|
-
- Receive encrypted DMs from Nostr users
|
|
10
|
-
- Send encrypted responses back
|
|
11
|
-
- Work with any NIP-04 compatible Nostr client (Damus, Amethyst, etc.)
|
|
12
|
-
|
|
13
|
-
## Installation
|
|
14
|
-
|
|
15
|
-
```bash
|
|
16
|
-
clawdbot plugins install @clawdbot/nostr
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
## Quick Setup
|
|
20
|
-
|
|
21
|
-
1. Generate a Nostr keypair (if you don't have one):
|
|
22
|
-
```bash
|
|
23
|
-
# Using nak CLI
|
|
24
|
-
nak key generate
|
|
25
|
-
|
|
26
|
-
# Or use any Nostr key generator
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
2. Add to your config:
|
|
30
|
-
```json
|
|
31
|
-
{
|
|
32
|
-
"channels": {
|
|
33
|
-
"nostr": {
|
|
34
|
-
"privateKey": "${NOSTR_PRIVATE_KEY}",
|
|
35
|
-
"relays": ["wss://relay.damus.io", "wss://nos.lol"]
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
```
|
|
40
|
-
|
|
41
|
-
3. Set the environment variable:
|
|
42
|
-
```bash
|
|
43
|
-
export NOSTR_PRIVATE_KEY="nsec1..." # or hex format
|
|
44
|
-
```
|
|
45
|
-
|
|
46
|
-
4. Restart the gateway
|
|
47
|
-
|
|
48
|
-
## Configuration
|
|
49
|
-
|
|
50
|
-
| Key | Type | Default | Description |
|
|
51
|
-
|-----|------|---------|-------------|
|
|
52
|
-
| `privateKey` | string | required | Bot's private key (nsec or hex format) |
|
|
53
|
-
| `relays` | string[] | `["wss://relay.damus.io", "wss://nos.lol"]` | WebSocket relay URLs |
|
|
54
|
-
| `dmPolicy` | string | `"pairing"` | Access control: `pairing`, `allowlist`, `open`, `disabled` |
|
|
55
|
-
| `allowFrom` | string[] | `[]` | Allowed sender pubkeys (npub or hex) |
|
|
56
|
-
| `enabled` | boolean | `true` | Enable/disable the channel |
|
|
57
|
-
| `name` | string | - | Display name for the account |
|
|
58
|
-
|
|
59
|
-
## Access Control
|
|
60
|
-
|
|
61
|
-
### DM Policies
|
|
62
|
-
|
|
63
|
-
- **pairing** (default): Unknown senders receive a pairing code to request access
|
|
64
|
-
- **allowlist**: Only pubkeys in `allowFrom` can message the bot
|
|
65
|
-
- **open**: Anyone can message the bot (use with caution)
|
|
66
|
-
- **disabled**: DMs are disabled
|
|
67
|
-
|
|
68
|
-
### Example: Allowlist Mode
|
|
69
|
-
|
|
70
|
-
```json
|
|
71
|
-
{
|
|
72
|
-
"channels": {
|
|
73
|
-
"nostr": {
|
|
74
|
-
"privateKey": "${NOSTR_PRIVATE_KEY}",
|
|
75
|
-
"dmPolicy": "allowlist",
|
|
76
|
-
"allowFrom": [
|
|
77
|
-
"npub1abc...",
|
|
78
|
-
"0123456789abcdef..."
|
|
79
|
-
]
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
```
|
|
84
|
-
|
|
85
|
-
## Testing
|
|
86
|
-
|
|
87
|
-
### Local Relay (Recommended)
|
|
88
|
-
|
|
89
|
-
```bash
|
|
90
|
-
# Using strfry
|
|
91
|
-
docker run -p 7777:7777 ghcr.io/hoytech/strfry
|
|
92
|
-
|
|
93
|
-
# Configure clawdbot to use local relay
|
|
94
|
-
"relays": ["ws://localhost:7777"]
|
|
95
|
-
```
|
|
96
|
-
|
|
97
|
-
### Manual Test
|
|
98
|
-
|
|
99
|
-
1. Start the gateway with Nostr configured
|
|
100
|
-
2. Open Damus, Amethyst, or another Nostr client
|
|
101
|
-
3. Send a DM to your bot's npub
|
|
102
|
-
4. Verify the bot responds
|
|
103
|
-
|
|
104
|
-
## Protocol Support
|
|
105
|
-
|
|
106
|
-
| NIP | Status | Notes |
|
|
107
|
-
|-----|--------|-------|
|
|
108
|
-
| NIP-01 | Supported | Basic event structure |
|
|
109
|
-
| NIP-04 | Supported | Encrypted DMs (kind:4) |
|
|
110
|
-
| NIP-17 | Planned | Gift-wrapped DMs (v2) |
|
|
111
|
-
|
|
112
|
-
## Security Notes
|
|
113
|
-
|
|
114
|
-
- Private keys are never logged
|
|
115
|
-
- Event signatures are verified before processing
|
|
116
|
-
- Use environment variables for keys, never commit to config files
|
|
117
|
-
- Consider using `allowlist` mode in production
|
|
118
|
-
|
|
119
|
-
## Troubleshooting
|
|
120
|
-
|
|
121
|
-
### Bot not receiving messages
|
|
122
|
-
|
|
123
|
-
1. Verify private key is correctly configured
|
|
124
|
-
2. Check relay connectivity
|
|
125
|
-
3. Ensure `enabled` is not set to `false`
|
|
126
|
-
4. Check the bot's public key matches what you're sending to
|
|
127
|
-
|
|
128
|
-
### Messages not being delivered
|
|
129
|
-
|
|
130
|
-
1. Check relay URLs are correct (must use `wss://`)
|
|
131
|
-
2. Verify relays are online and accepting connections
|
|
132
|
-
3. Check for rate limiting (reduce message frequency)
|
|
133
|
-
|
|
134
|
-
## License
|
|
135
|
-
|
|
136
|
-
MIT
|