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,391 +0,0 @@
|
|
|
1
|
-
# OpenProse Examples
|
|
2
|
-
|
|
3
|
-
These examples demonstrate workflows using OpenProse's full feature set.
|
|
4
|
-
|
|
5
|
-
## Available Examples
|
|
6
|
-
|
|
7
|
-
### Basics (01-08)
|
|
8
|
-
|
|
9
|
-
| File | Description |
|
|
10
|
-
| --------------------------------- | -------------------------------------------- |
|
|
11
|
-
| `01-hello-world.prose` | Simplest possible program - a single session |
|
|
12
|
-
| `02-research-and-summarize.prose` | Research a topic, then summarize findings |
|
|
13
|
-
| `03-code-review.prose` | Multi-perspective code review pipeline |
|
|
14
|
-
| `04-write-and-refine.prose` | Draft content and iteratively improve it |
|
|
15
|
-
| `05-debug-issue.prose` | Step-by-step debugging workflow |
|
|
16
|
-
| `06-explain-codebase.prose` | Progressive exploration of a codebase |
|
|
17
|
-
| `07-refactor.prose` | Systematic refactoring workflow |
|
|
18
|
-
| `08-blog-post.prose` | End-to-end content creation |
|
|
19
|
-
|
|
20
|
-
### Agents & Skills (09-12)
|
|
21
|
-
|
|
22
|
-
| File | Description |
|
|
23
|
-
| ----------------------------------- | ------------------------------------ |
|
|
24
|
-
| `09-research-with-agents.prose` | Custom agents with model selection |
|
|
25
|
-
| `10-code-review-agents.prose` | Specialized reviewer agents |
|
|
26
|
-
| `11-skills-and-imports.prose` | External skill imports |
|
|
27
|
-
| `12-secure-agent-permissions.prose` | Agent permissions and access control |
|
|
28
|
-
|
|
29
|
-
### Variables & Composition (13-15)
|
|
30
|
-
|
|
31
|
-
| File | Description |
|
|
32
|
-
| -------------------------------- | ----------------------------------- |
|
|
33
|
-
| `13-variables-and-context.prose` | let/const bindings, context passing |
|
|
34
|
-
| `14-composition-blocks.prose` | Named blocks, do blocks |
|
|
35
|
-
| `15-inline-sequences.prose` | Arrow operator chains |
|
|
36
|
-
|
|
37
|
-
### Parallel Execution (16-19)
|
|
38
|
-
|
|
39
|
-
| File | Description |
|
|
40
|
-
| ------------------------------------ | ----------------------------------------- |
|
|
41
|
-
| `16-parallel-reviews.prose` | Basic parallel execution |
|
|
42
|
-
| `17-parallel-research.prose` | Named parallel results |
|
|
43
|
-
| `18-mixed-parallel-sequential.prose` | Combined parallel and sequential patterns |
|
|
44
|
-
| `19-advanced-parallel.prose` | Join strategies, failure policies |
|
|
45
|
-
|
|
46
|
-
### Loops (20)
|
|
47
|
-
|
|
48
|
-
| File | Description |
|
|
49
|
-
| ---------------------- | --------------------------------------- |
|
|
50
|
-
| `20-fixed-loops.prose` | repeat, for-each, parallel for patterns |
|
|
51
|
-
|
|
52
|
-
### Pipelines (21)
|
|
53
|
-
|
|
54
|
-
| File | Description |
|
|
55
|
-
| ------------------------------ | ----------------------------------------- |
|
|
56
|
-
| `21-pipeline-operations.prose` | map, filter, reduce, pmap transformations |
|
|
57
|
-
|
|
58
|
-
### Error Handling (22-23)
|
|
59
|
-
|
|
60
|
-
| File | Description |
|
|
61
|
-
| ----------------------------- | -------------------------------------- |
|
|
62
|
-
| `22-error-handling.prose` | try/catch/finally patterns |
|
|
63
|
-
| `23-retry-with-backoff.prose` | Resilient API calls with retry/backoff |
|
|
64
|
-
|
|
65
|
-
### Advanced Features (24-27)
|
|
66
|
-
|
|
67
|
-
| File | Description |
|
|
68
|
-
| ------------------------------- | --------------------------------- |
|
|
69
|
-
| `24-choice-blocks.prose` | AI-selected branching |
|
|
70
|
-
| `25-conditionals.prose` | if/elif/else patterns |
|
|
71
|
-
| `26-parameterized-blocks.prose` | Reusable blocks with arguments |
|
|
72
|
-
| `27-string-interpolation.prose` | Dynamic prompts with {var} syntax |
|
|
73
|
-
|
|
74
|
-
### Orchestration Systems (28-31)
|
|
75
|
-
|
|
76
|
-
| File | Description |
|
|
77
|
-
| ------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
78
|
-
| `28-gas-town.prose` | Multi-agent orchestration ("Kubernetes for agents") with 7 worker roles, patrols, convoys, and GUPP propulsion |
|
|
79
|
-
| `29-captains-chair.prose` | Full captain's chair pattern: coordinating agent dispatches subagents for all work, with parallel research, critic review cycles, and checkpoint validation |
|
|
80
|
-
| `30-captains-chair-simple.prose` | Minimal captain's chair: core pattern without complexity |
|
|
81
|
-
| `31-captains-chair-with-memory.prose` | Captain's chair with retrospective analysis and session-to-session learning |
|
|
82
|
-
|
|
83
|
-
### Production Workflows (33-38)
|
|
84
|
-
|
|
85
|
-
| File | Description |
|
|
86
|
-
| ---------------------------- | ---------------------------------------- |
|
|
87
|
-
| `33-pr-review-autofix.prose` | Automated PR review with fix suggestions |
|
|
88
|
-
| `34-content-pipeline.prose` | End-to-end content creation pipeline |
|
|
89
|
-
| `35-feature-factory.prose` | Feature implementation automation |
|
|
90
|
-
| `36-bug-hunter.prose` | Systematic bug detection and analysis |
|
|
91
|
-
| `37-the-forge.prose` | Build a browser from scratch |
|
|
92
|
-
| `38-skill-scan.prose` | Skill discovery and analysis |
|
|
93
|
-
|
|
94
|
-
### Architecture Patterns (39)
|
|
95
|
-
|
|
96
|
-
| File | Description |
|
|
97
|
-
| ---------------------------------- | ---------------------------------------------------------------------------------------------------- |
|
|
98
|
-
| `39-architect-by-simulation.prose` | Design systems through simulated implementation phases with serial handoffs and persistent architect |
|
|
99
|
-
|
|
100
|
-
### Recursive Language Models (40-43)
|
|
101
|
-
|
|
102
|
-
| File | Description |
|
|
103
|
-
| ----------------------------- | ------------------------------------------------------------------- |
|
|
104
|
-
| `40-rlm-self-refine.prose` | Recursive refinement until quality threshold - the core RLM pattern |
|
|
105
|
-
| `41-rlm-divide-conquer.prose` | Hierarchical chunking for inputs beyond context limits |
|
|
106
|
-
| `42-rlm-filter-recurse.prose` | Filter-then-process for needle-in-haystack tasks |
|
|
107
|
-
| `43-rlm-pairwise.prose` | O(n^2) pairwise aggregation for relationship mapping |
|
|
108
|
-
|
|
109
|
-
### Meta / Self-Hosting (44-48)
|
|
110
|
-
|
|
111
|
-
| File | Description |
|
|
112
|
-
| --------------------------------- | ------------------------------------------------------ |
|
|
113
|
-
| `44-run-endpoint-ux-test.prose` | Concurrent agents testing the /run API endpoint |
|
|
114
|
-
| `45-plugin-release.prose` | OpenProse plugin release workflow (this repo) |
|
|
115
|
-
| `46-workflow-crystallizer.prose` | Reflective: observes thread, extracts workflow, writes .prose |
|
|
116
|
-
| `47-language-self-improvement.prose` | Meta-level 2: analyzes .prose corpus to evolve the language itself |
|
|
117
|
-
| `48-habit-miner.prose` | Mines AI session logs for patterns, generates .prose automations |
|
|
118
|
-
|
|
119
|
-
## The Architect By Simulation Pattern
|
|
120
|
-
|
|
121
|
-
The architect-by-simulation pattern is for designing systems by "implementing" them through reasoning. Instead of writing code, each phase produces specification documents that the next phase builds upon.
|
|
122
|
-
|
|
123
|
-
**Key principles:**
|
|
124
|
-
|
|
125
|
-
1. **Thinking/deduction framework**: "Implement" means reasoning through design decisions
|
|
126
|
-
2. **Serial pipeline with handoffs**: Each phase reads previous phase's output
|
|
127
|
-
3. **Persistent architect**: Maintains master plan and synthesizes learnings
|
|
128
|
-
4. **User checkpoint**: Get plan approval BEFORE executing the pipeline
|
|
129
|
-
5. **Simulation as implementation**: The spec IS the deliverable
|
|
130
|
-
|
|
131
|
-
```prose
|
|
132
|
-
# The core pattern
|
|
133
|
-
agent architect:
|
|
134
|
-
model: opus
|
|
135
|
-
persist: true
|
|
136
|
-
prompt: "Design by simulating implementation"
|
|
137
|
-
|
|
138
|
-
# Create master plan with phases
|
|
139
|
-
let plan = session: architect
|
|
140
|
-
prompt: "Break feature into design phases"
|
|
141
|
-
|
|
142
|
-
# User reviews the plan BEFORE the pipeline runs
|
|
143
|
-
input user_approval: "User reviews plan and approves"
|
|
144
|
-
|
|
145
|
-
# Execute phases serially with handoffs
|
|
146
|
-
for phase_name, index in phases:
|
|
147
|
-
let handoff = session: phase-executor
|
|
148
|
-
prompt: "Execute phase {index}"
|
|
149
|
-
context: previous_handoffs
|
|
150
|
-
|
|
151
|
-
# Architect synthesizes after each phase
|
|
152
|
-
resume: architect
|
|
153
|
-
prompt: "Synthesize learnings from phase {index}"
|
|
154
|
-
context: handoff
|
|
155
|
-
|
|
156
|
-
# Synthesize all handoffs into final spec
|
|
157
|
-
output spec = session: architect
|
|
158
|
-
prompt: "Synthesize all handoffs into final spec"
|
|
159
|
-
```
|
|
160
|
-
|
|
161
|
-
See example 39 for the full implementation.
|
|
162
|
-
|
|
163
|
-
## The Captain's Chair Pattern
|
|
164
|
-
|
|
165
|
-
The captain's chair is an orchestration paradigm where a coordinating agent (the "captain") dispatches specialized subagents for all execution. The captain never writes code directly—only plans, coordinates, and validates.
|
|
166
|
-
|
|
167
|
-
**Key principles:**
|
|
168
|
-
|
|
169
|
-
1. **Context isolation**: Subagents receive targeted context, not everything
|
|
170
|
-
2. **Parallel execution**: Multiple subagents work concurrently where possible
|
|
171
|
-
3. **Continuous criticism**: Critic agents review plans and outputs mid-stream
|
|
172
|
-
4. **80/20 planning**: 80% effort on planning, 20% on execution oversight
|
|
173
|
-
5. **Checkpoint validation**: User approval at key decision points
|
|
174
|
-
|
|
175
|
-
```prose
|
|
176
|
-
# The core pattern
|
|
177
|
-
agent captain:
|
|
178
|
-
model: opus
|
|
179
|
-
prompt: "Coordinate but never execute directly"
|
|
180
|
-
|
|
181
|
-
agent executor:
|
|
182
|
-
model: sonnet
|
|
183
|
-
prompt: "Execute assigned tasks precisely"
|
|
184
|
-
|
|
185
|
-
agent critic:
|
|
186
|
-
model: sonnet
|
|
187
|
-
prompt: "Review work and find issues"
|
|
188
|
-
|
|
189
|
-
# Captain plans
|
|
190
|
-
let plan = session: captain
|
|
191
|
-
prompt: "Break down this task"
|
|
192
|
-
|
|
193
|
-
# Parallel execution with criticism
|
|
194
|
-
parallel:
|
|
195
|
-
work = session: executor
|
|
196
|
-
context: plan
|
|
197
|
-
review = session: critic
|
|
198
|
-
context: plan
|
|
199
|
-
|
|
200
|
-
# Captain validates
|
|
201
|
-
output result = session: captain
|
|
202
|
-
prompt: "Validate and integrate"
|
|
203
|
-
context: { work, review }
|
|
204
|
-
```
|
|
205
|
-
|
|
206
|
-
See examples 29-31 for full implementations.
|
|
207
|
-
|
|
208
|
-
## The Recursive Language Model Pattern
|
|
209
|
-
|
|
210
|
-
Recursive Language Models (RLMs) are a paradigm for handling inputs far beyond context limits. The key insight: treat the prompt as an external environment that the LLM can symbolically interact with, chunk, and recursively process.
|
|
211
|
-
|
|
212
|
-
**Why RLMs matter:**
|
|
213
|
-
|
|
214
|
-
- Base LLMs degrade rapidly on long contexts ("context rot")
|
|
215
|
-
- RLMs maintain performance on inputs 2 orders of magnitude beyond context limits
|
|
216
|
-
- On quadratic-complexity tasks, base models get <0.1% while RLMs achieve 58%
|
|
217
|
-
|
|
218
|
-
**Key patterns:**
|
|
219
|
-
|
|
220
|
-
1. **Self-refinement**: Recursive improvement until quality threshold
|
|
221
|
-
2. **Divide-and-conquer**: Chunk, process, aggregate recursively
|
|
222
|
-
3. **Filter-then-recurse**: Cheap filtering before expensive deep dives
|
|
223
|
-
4. **Pairwise aggregation**: Handle O(n²) tasks through batch decomposition
|
|
224
|
-
|
|
225
|
-
```prose
|
|
226
|
-
# The core RLM pattern: recursive block with scope isolation
|
|
227
|
-
block process(data, depth):
|
|
228
|
-
# Base case
|
|
229
|
-
if **data is small** or depth <= 0:
|
|
230
|
-
output session "Process directly"
|
|
231
|
-
context: data
|
|
232
|
-
|
|
233
|
-
# Recursive case: chunk and fan out
|
|
234
|
-
let chunks = session "Split into logical chunks"
|
|
235
|
-
context: data
|
|
236
|
-
|
|
237
|
-
parallel for chunk in chunks:
|
|
238
|
-
do process(chunk, depth - 1) # Recursive call
|
|
239
|
-
|
|
240
|
-
# Aggregate results (fan in)
|
|
241
|
-
output session "Synthesize partial results"
|
|
242
|
-
```
|
|
243
|
-
|
|
244
|
-
**OpenProse advantages for RLMs:**
|
|
245
|
-
|
|
246
|
-
- **Scope isolation**: Each recursive call gets its own `execution_id`, preventing variable collisions
|
|
247
|
-
- **Parallel fan-out**: `parallel for` enables concurrent processing at each recursion level
|
|
248
|
-
- **State persistence**: SQLite/PostgreSQL backends track the full call tree
|
|
249
|
-
- **Natural aggregation**: Pipelines (`| reduce`) and explicit context passing
|
|
250
|
-
|
|
251
|
-
See examples 40-43 for full implementations.
|
|
252
|
-
|
|
253
|
-
## Running Examples
|
|
254
|
-
|
|
255
|
-
Ask Claude to run any example:
|
|
256
|
-
|
|
257
|
-
```
|
|
258
|
-
Run the code review example from the OpenProse examples
|
|
259
|
-
```
|
|
260
|
-
|
|
261
|
-
Or reference the file directly:
|
|
262
|
-
|
|
263
|
-
```
|
|
264
|
-
Execute examples/03-code-review.prose
|
|
265
|
-
```
|
|
266
|
-
|
|
267
|
-
## Feature Reference
|
|
268
|
-
|
|
269
|
-
### Core Syntax
|
|
270
|
-
|
|
271
|
-
```prose
|
|
272
|
-
# Comments
|
|
273
|
-
session "prompt" # Simple session
|
|
274
|
-
let x = session "..." # Variable binding
|
|
275
|
-
const y = session "..." # Immutable binding
|
|
276
|
-
```
|
|
277
|
-
|
|
278
|
-
### Agents
|
|
279
|
-
|
|
280
|
-
```prose
|
|
281
|
-
agent name:
|
|
282
|
-
model: sonnet # haiku, sonnet, opus
|
|
283
|
-
prompt: "System prompt"
|
|
284
|
-
skills: ["skill1", "skill2"]
|
|
285
|
-
permissions:
|
|
286
|
-
read: ["*.md"]
|
|
287
|
-
bash: deny
|
|
288
|
-
```
|
|
289
|
-
|
|
290
|
-
### Parallel
|
|
291
|
-
|
|
292
|
-
```prose
|
|
293
|
-
parallel: # Basic parallel
|
|
294
|
-
a = session "A"
|
|
295
|
-
b = session "B"
|
|
296
|
-
|
|
297
|
-
parallel ("first"): # Race - first wins
|
|
298
|
-
parallel ("any", count: 2): # Wait for N successes
|
|
299
|
-
parallel (on-fail: "continue"): # Don't fail on errors
|
|
300
|
-
```
|
|
301
|
-
|
|
302
|
-
### Loops
|
|
303
|
-
|
|
304
|
-
```prose
|
|
305
|
-
repeat 3: # Fixed iterations
|
|
306
|
-
session "..."
|
|
307
|
-
|
|
308
|
-
for item in items: # For-each
|
|
309
|
-
session "..."
|
|
310
|
-
|
|
311
|
-
parallel for item in items: # Parallel for-each
|
|
312
|
-
session "..."
|
|
313
|
-
|
|
314
|
-
loop until **condition** (max: 10): # Unbounded with AI condition
|
|
315
|
-
session "..."
|
|
316
|
-
```
|
|
317
|
-
|
|
318
|
-
### Pipelines
|
|
319
|
-
|
|
320
|
-
```prose
|
|
321
|
-
items | map: # Transform each
|
|
322
|
-
session "..."
|
|
323
|
-
items | filter: # Keep matching
|
|
324
|
-
session "..."
|
|
325
|
-
items | reduce(acc, x): # Accumulate
|
|
326
|
-
session "..."
|
|
327
|
-
items | pmap: # Parallel transform
|
|
328
|
-
session "..."
|
|
329
|
-
```
|
|
330
|
-
|
|
331
|
-
### Error Handling
|
|
332
|
-
|
|
333
|
-
```prose
|
|
334
|
-
try:
|
|
335
|
-
session "..."
|
|
336
|
-
catch as err:
|
|
337
|
-
session "..."
|
|
338
|
-
finally:
|
|
339
|
-
session "..."
|
|
340
|
-
|
|
341
|
-
session "..."
|
|
342
|
-
retry: 3
|
|
343
|
-
backoff: "exponential" # none, linear, exponential
|
|
344
|
-
|
|
345
|
-
throw "message" # Raise error
|
|
346
|
-
```
|
|
347
|
-
|
|
348
|
-
### Conditionals
|
|
349
|
-
|
|
350
|
-
```prose
|
|
351
|
-
if **condition**:
|
|
352
|
-
session "..."
|
|
353
|
-
elif **other condition**:
|
|
354
|
-
session "..."
|
|
355
|
-
else:
|
|
356
|
-
session "..."
|
|
357
|
-
```
|
|
358
|
-
|
|
359
|
-
### Choice
|
|
360
|
-
|
|
361
|
-
```prose
|
|
362
|
-
choice **criteria**:
|
|
363
|
-
option "Label A":
|
|
364
|
-
session "..."
|
|
365
|
-
option "Label B":
|
|
366
|
-
session "..."
|
|
367
|
-
```
|
|
368
|
-
|
|
369
|
-
### Blocks
|
|
370
|
-
|
|
371
|
-
```prose
|
|
372
|
-
block name(param): # Define with parameters
|
|
373
|
-
session "... {param} ..."
|
|
374
|
-
|
|
375
|
-
do name("value") # Invoke with arguments
|
|
376
|
-
```
|
|
377
|
-
|
|
378
|
-
### String Interpolation
|
|
379
|
-
|
|
380
|
-
```prose
|
|
381
|
-
let x = session "Get value"
|
|
382
|
-
session "Use {x} in prompt" # Single-line
|
|
383
|
-
|
|
384
|
-
session """ # Multi-line
|
|
385
|
-
Multi-line prompt with {x}
|
|
386
|
-
"""
|
|
387
|
-
```
|
|
388
|
-
|
|
389
|
-
## Learn More
|
|
390
|
-
|
|
391
|
-
See `compiler.md` in the skill directory for the complete language specification.
|
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
# Roadmap Examples
|
|
2
|
-
|
|
3
|
-
These examples demonstrate **planned** OpenProse syntax that is **not yet implemented**.
|
|
4
|
-
|
|
5
|
-
They are included to show the direction of the language and gather feedback on the design.
|
|
6
|
-
|
|
7
|
-
## Planned Features
|
|
8
|
-
|
|
9
|
-
| Feature | Status | Example File |
|
|
10
|
-
|---------|--------|--------------|
|
|
11
|
-
| Agent definitions | Planned | `simple-pipeline.prose` |
|
|
12
|
-
| Named sessions | Planned | `simple-pipeline.prose` |
|
|
13
|
-
| Parallel execution | Planned | `parallel-review.prose` |
|
|
14
|
-
| Variables & context | Planned | `iterative-refinement.prose` |
|
|
15
|
-
| Loops & conditionals | Planned | `iterative-refinement.prose` |
|
|
16
|
-
| Imports | Planned | `syntax/open-prose-syntax.prose` |
|
|
17
|
-
|
|
18
|
-
## Do Not Run These Examples
|
|
19
|
-
|
|
20
|
-
These files will not work with the current interpreter. They are for reference only.
|
|
21
|
-
|
|
22
|
-
For working examples, see the parent `examples/` directory.
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
# Iterative Refinement Example
|
|
2
|
-
# Write draft, get feedback, refine until approved
|
|
3
|
-
|
|
4
|
-
agent writer:
|
|
5
|
-
model: opus
|
|
6
|
-
|
|
7
|
-
agent reviewer:
|
|
8
|
-
model: sonnet
|
|
9
|
-
|
|
10
|
-
let draft = session: writer
|
|
11
|
-
prompt: "Write a first draft about AI safety"
|
|
12
|
-
|
|
13
|
-
loop until **approved**:
|
|
14
|
-
let feedback = session: reviewer
|
|
15
|
-
prompt: "Review this draft and provide feedback"
|
|
16
|
-
context: draft
|
|
17
|
-
|
|
18
|
-
draft = session: writer
|
|
19
|
-
prompt: "Improve the draft based on feedback"
|
|
20
|
-
context: { draft, feedback }
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
# Parallel Review Example
|
|
2
|
-
# Three reviewers analyze code in parallel, then synthesize
|
|
3
|
-
|
|
4
|
-
agent reviewer:
|
|
5
|
-
model: sonnet
|
|
6
|
-
|
|
7
|
-
parallel:
|
|
8
|
-
security = session: reviewer
|
|
9
|
-
prompt: "Review this code for security issues"
|
|
10
|
-
performance = session: reviewer
|
|
11
|
-
prompt: "Review this code for performance issues"
|
|
12
|
-
style = session: reviewer
|
|
13
|
-
prompt: "Review this code for style and readability"
|
|
14
|
-
|
|
15
|
-
session synthesizer:
|
|
16
|
-
model: opus
|
|
17
|
-
prompt: "Synthesize the reviews into a unified report"
|
|
18
|
-
context: { security, performance, style }
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
# Simple Pipeline Example
|
|
2
|
-
# Research a topic, then write an article
|
|
3
|
-
|
|
4
|
-
import "web-search" from "github:example/web-search"
|
|
5
|
-
|
|
6
|
-
agent researcher:
|
|
7
|
-
model: sonnet
|
|
8
|
-
skills: ["web-search"]
|
|
9
|
-
|
|
10
|
-
agent writer:
|
|
11
|
-
model: opus
|
|
12
|
-
|
|
13
|
-
session research: researcher
|
|
14
|
-
prompt: "Research the latest developments in quantum computing"
|
|
15
|
-
|
|
16
|
-
-> session article: writer
|
|
17
|
-
prompt: "Write a blog post about quantum computing"
|
|
@@ -1,223 +0,0 @@
|
|
|
1
|
-
# OpenProse - Confirmed Syntax
|
|
2
|
-
# Python-like indentation, keyword-driven, minimal punctuation
|
|
3
|
-
|
|
4
|
-
# ============================================
|
|
5
|
-
# IMPORTS (quoted skill names)
|
|
6
|
-
# ============================================
|
|
7
|
-
|
|
8
|
-
import "web-search" from "github:example/web-search"
|
|
9
|
-
import "summarizer" from "./skills/summarizer"
|
|
10
|
-
|
|
11
|
-
# ============================================
|
|
12
|
-
# AGENT DEFINITIONS (quoted skills array)
|
|
13
|
-
# ============================================
|
|
14
|
-
|
|
15
|
-
agent researcher:
|
|
16
|
-
model: sonnet
|
|
17
|
-
skills: ["web-search", "summarizer"]
|
|
18
|
-
permissions:
|
|
19
|
-
bash: deny
|
|
20
|
-
|
|
21
|
-
agent writer:
|
|
22
|
-
model: opus
|
|
23
|
-
skills: ["summarizer"]
|
|
24
|
-
|
|
25
|
-
# ============================================
|
|
26
|
-
# SIMPLE FLOW
|
|
27
|
-
# ============================================
|
|
28
|
-
|
|
29
|
-
# Simplest program: single session
|
|
30
|
-
session "Explain quantum computing"
|
|
31
|
-
|
|
32
|
-
# Sequential (indentation = sequence)
|
|
33
|
-
do:
|
|
34
|
-
session: researcher
|
|
35
|
-
prompt: "Research quantum computing"
|
|
36
|
-
session: writer
|
|
37
|
-
prompt: "Write a blog post"
|
|
38
|
-
|
|
39
|
-
# Inline sequence with arrow
|
|
40
|
-
session "A" -> session "B" -> session "C"
|
|
41
|
-
|
|
42
|
-
# ============================================
|
|
43
|
-
# PARALLEL EXECUTION (quoted modifiers)
|
|
44
|
-
# ============================================
|
|
45
|
-
|
|
46
|
-
# Default: wait for all, fail-fast
|
|
47
|
-
parallel:
|
|
48
|
-
session "Security review"
|
|
49
|
-
session "Performance review"
|
|
50
|
-
session "Style review"
|
|
51
|
-
|
|
52
|
-
# Race: first to complete wins
|
|
53
|
-
parallel ("first"):
|
|
54
|
-
session "Try approach A"
|
|
55
|
-
session "Try approach B"
|
|
56
|
-
|
|
57
|
-
# Continue on failure
|
|
58
|
-
parallel (on-fail: "continue"):
|
|
59
|
-
session "Risky operation 1"
|
|
60
|
-
session "Risky operation 2"
|
|
61
|
-
|
|
62
|
-
# Named results for downstream use
|
|
63
|
-
parallel:
|
|
64
|
-
security = session "Security review"
|
|
65
|
-
perf = session "Performance review"
|
|
66
|
-
|
|
67
|
-
session "Synthesize":
|
|
68
|
-
context: { security, perf }
|
|
69
|
-
|
|
70
|
-
# ============================================
|
|
71
|
-
# COMPOSITION: NAMED BLOCKS WITH PARAMETERS
|
|
72
|
-
# ============================================
|
|
73
|
-
|
|
74
|
-
# Define a reusable block
|
|
75
|
-
block review-pipeline:
|
|
76
|
-
parallel:
|
|
77
|
-
session "Security review"
|
|
78
|
-
session "Performance review"
|
|
79
|
-
session "Synthesize reviews"
|
|
80
|
-
|
|
81
|
-
# Block with parameters
|
|
82
|
-
block research(topic):
|
|
83
|
-
session "Research {topic}"
|
|
84
|
-
session "Summarize findings about {topic}"
|
|
85
|
-
|
|
86
|
-
# Invoke with `do`
|
|
87
|
-
do:
|
|
88
|
-
session "Write code"
|
|
89
|
-
do review-pipeline
|
|
90
|
-
session "Final edits"
|
|
91
|
-
|
|
92
|
-
do research("quantum computing")
|
|
93
|
-
|
|
94
|
-
# ============================================
|
|
95
|
-
# LOOPS (with ** orchestrator discretion)
|
|
96
|
-
# ============================================
|
|
97
|
-
|
|
98
|
-
# Loop until condition (orchestrator evaluates **)
|
|
99
|
-
loop until **approved**:
|
|
100
|
-
session "Write draft"
|
|
101
|
-
session "Get feedback"
|
|
102
|
-
|
|
103
|
-
# Multi-word condition
|
|
104
|
-
loop until **user is satisfied with the result**:
|
|
105
|
-
session "Propose solution"
|
|
106
|
-
session "Get feedback"
|
|
107
|
-
|
|
108
|
-
# Repeat N times
|
|
109
|
-
repeat 3:
|
|
110
|
-
session "Attempt solution"
|
|
111
|
-
|
|
112
|
-
# Infinite loop (with runtime safeguards)
|
|
113
|
-
loop:
|
|
114
|
-
session "Monitor for events"
|
|
115
|
-
session "Handle event"
|
|
116
|
-
|
|
117
|
-
# For-each
|
|
118
|
-
for item in items:
|
|
119
|
-
session "Process {item}"
|
|
120
|
-
|
|
121
|
-
# ============================================
|
|
122
|
-
# CHOICE (orchestrator discretion)
|
|
123
|
-
# ============================================
|
|
124
|
-
|
|
125
|
-
choice **based on urgency**:
|
|
126
|
-
session "Quick fix"
|
|
127
|
-
session "Thorough solution"
|
|
128
|
-
|
|
129
|
-
# ============================================
|
|
130
|
-
# PIPELINE OPERATIONS
|
|
131
|
-
# ============================================
|
|
132
|
-
|
|
133
|
-
# Map: transform each item
|
|
134
|
-
items | map: session "Process {item}"
|
|
135
|
-
|
|
136
|
-
# Filter: select items
|
|
137
|
-
items | filter: session "Is {item} relevant?"
|
|
138
|
-
|
|
139
|
-
# Reduce: accumulate results
|
|
140
|
-
items | reduce(summary, item):
|
|
141
|
-
session "Add {item} to {summary}"
|
|
142
|
-
|
|
143
|
-
# Chaining
|
|
144
|
-
files
|
|
145
|
-
| filter: session "Is {item} relevant?"
|
|
146
|
-
| map: session "Extract info from {item}"
|
|
147
|
-
| reduce(report, info):
|
|
148
|
-
session "Add {info} to {report}"
|
|
149
|
-
|
|
150
|
-
# Parallel map
|
|
151
|
-
items | pmap: session "Process {item}"
|
|
152
|
-
|
|
153
|
-
# ============================================
|
|
154
|
-
# ERROR HANDLING
|
|
155
|
-
# ============================================
|
|
156
|
-
|
|
157
|
-
# Try/catch/finally
|
|
158
|
-
try:
|
|
159
|
-
session "Risky operation"
|
|
160
|
-
catch:
|
|
161
|
-
session "Handle failure"
|
|
162
|
-
finally:
|
|
163
|
-
session "Cleanup"
|
|
164
|
-
|
|
165
|
-
# Retry with backoff
|
|
166
|
-
session "Flaky API call" (retry: 3)
|
|
167
|
-
|
|
168
|
-
# ============================================
|
|
169
|
-
# CONTEXT PASSING
|
|
170
|
-
# ============================================
|
|
171
|
-
|
|
172
|
-
# Variable binding (mutable)
|
|
173
|
-
let research = session: researcher
|
|
174
|
-
prompt: "Research topic"
|
|
175
|
-
|
|
176
|
-
# Variable binding (immutable)
|
|
177
|
-
const config = session "Get configuration"
|
|
178
|
-
|
|
179
|
-
# Explicit context
|
|
180
|
-
session: writer
|
|
181
|
-
prompt: "Write about the research"
|
|
182
|
-
context: research
|
|
183
|
-
|
|
184
|
-
# Multiple contexts
|
|
185
|
-
session "Final synthesis":
|
|
186
|
-
context: [research, analysis, feedback]
|
|
187
|
-
|
|
188
|
-
# No context (start fresh)
|
|
189
|
-
session "Independent task":
|
|
190
|
-
context: []
|
|
191
|
-
|
|
192
|
-
# ============================================
|
|
193
|
-
# COMPLETE EXAMPLE
|
|
194
|
-
# ============================================
|
|
195
|
-
|
|
196
|
-
import "code-review" from "github:example/code-review"
|
|
197
|
-
|
|
198
|
-
agent code-reviewer:
|
|
199
|
-
model: sonnet
|
|
200
|
-
skills: ["code-review"]
|
|
201
|
-
|
|
202
|
-
agent synthesizer:
|
|
203
|
-
model: opus
|
|
204
|
-
|
|
205
|
-
# Parallel review with named results
|
|
206
|
-
parallel:
|
|
207
|
-
sec = session: code-reviewer
|
|
208
|
-
prompt: "Review for security issues"
|
|
209
|
-
perf = session: code-reviewer
|
|
210
|
-
prompt: "Review for performance issues"
|
|
211
|
-
style = session: code-reviewer
|
|
212
|
-
prompt: "Review for style issues"
|
|
213
|
-
|
|
214
|
-
# Synthesize all results
|
|
215
|
-
session: synthesizer
|
|
216
|
-
prompt: "Create unified review report"
|
|
217
|
-
context: { sec, perf, style }
|
|
218
|
-
|
|
219
|
-
# Iterative refinement with ** condition
|
|
220
|
-
loop until **approved**:
|
|
221
|
-
let draft = session "Improve based on feedback"
|
|
222
|
-
let feedback = session "Get stakeholder review"
|
|
223
|
-
context: draft
|