botmux 2.33.0 → 2.33.1
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.en.md +12 -1
- package/README.md +45 -1
- package/dist/adapters/cli/claude-code.d.ts.map +1 -1
- package/dist/adapters/cli/claude-code.js +11 -0
- package/dist/adapters/cli/claude-code.js.map +1 -1
- package/dist/cli/bots-list-output.d.ts +21 -0
- package/dist/cli/bots-list-output.d.ts.map +1 -0
- package/dist/cli/bots-list-output.js +23 -0
- package/dist/cli/bots-list-output.js.map +1 -0
- package/dist/cli/workflow.d.ts +13 -0
- package/dist/cli/workflow.d.ts.map +1 -0
- package/dist/cli/workflow.js +781 -0
- package/dist/cli/workflow.js.map +1 -0
- package/dist/cli.js +69 -14
- package/dist/cli.js.map +1 -1
- package/dist/core/command-handler.d.ts.map +1 -1
- package/dist/core/command-handler.js +211 -4
- package/dist/core/command-handler.js.map +1 -1
- package/dist/core/session-manager.d.ts +6 -1
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +22 -12
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/worker-pool.d.ts +13 -0
- package/dist/core/worker-pool.d.ts.map +1 -1
- package/dist/core/worker-pool.js +100 -6
- package/dist/core/worker-pool.js.map +1 -1
- package/dist/daemon.d.ts +3 -0
- package/dist/daemon.d.ts.map +1 -1
- package/dist/daemon.js +884 -3
- package/dist/daemon.js.map +1 -1
- package/dist/dashboard/auth.d.ts +36 -0
- package/dist/dashboard/auth.d.ts.map +1 -1
- package/dist/dashboard/auth.js +22 -0
- package/dist/dashboard/auth.js.map +1 -1
- package/dist/dashboard/web/app.js +20 -1
- package/dist/dashboard/web/app.js.map +1 -1
- package/dist/dashboard/web/i18n.d.ts.map +1 -1
- package/dist/dashboard/web/i18n.js +356 -0
- package/dist/dashboard/web/i18n.js.map +1 -1
- package/dist/dashboard/web/workflow-catalog.d.ts +2 -0
- package/dist/dashboard/web/workflow-catalog.d.ts.map +1 -0
- package/dist/dashboard/web/workflow-catalog.js +323 -0
- package/dist/dashboard/web/workflow-catalog.js.map +1 -0
- package/dist/dashboard/web/workflows.d.ts +2 -0
- package/dist/dashboard/web/workflows.d.ts.map +1 -0
- package/dist/dashboard/web/workflows.js +1618 -0
- package/dist/dashboard/web/workflows.js.map +1 -0
- package/dist/dashboard/workflow-api.d.ts +23 -0
- package/dist/dashboard/workflow-api.d.ts.map +1 -0
- package/dist/dashboard/workflow-api.js +463 -0
- package/dist/dashboard/workflow-api.js.map +1 -0
- package/dist/dashboard-web/app.js +494 -199
- package/dist/dashboard-web/index.html +1 -0
- package/dist/dashboard-web/style.css +160 -6
- package/dist/dashboard-web/terminal-replay.html +227 -0
- package/dist/dashboard.js +29 -12
- package/dist/dashboard.js.map +1 -1
- package/dist/i18n/en.d.ts.map +1 -1
- package/dist/i18n/en.js +12 -0
- package/dist/i18n/en.js.map +1 -1
- package/dist/i18n/zh.d.ts.map +1 -1
- package/dist/i18n/zh.js +12 -0
- package/dist/i18n/zh.js.map +1 -1
- package/dist/im/lark/card-handler.d.ts +3 -0
- package/dist/im/lark/card-handler.d.ts.map +1 -1
- package/dist/im/lark/card-handler.js +27 -1
- package/dist/im/lark/card-handler.js.map +1 -1
- package/dist/im/lark/client.d.ts +19 -2
- package/dist/im/lark/client.d.ts.map +1 -1
- package/dist/im/lark/client.js +21 -2
- package/dist/im/lark/client.js.map +1 -1
- package/dist/im/lark/workflow-card-handler.d.ts +50 -0
- package/dist/im/lark/workflow-card-handler.d.ts.map +1 -0
- package/dist/im/lark/workflow-card-handler.js +152 -0
- package/dist/im/lark/workflow-card-handler.js.map +1 -0
- package/dist/im/lark/workflow-cards.d.ts +46 -0
- package/dist/im/lark/workflow-cards.d.ts.map +1 -0
- package/dist/im/lark/workflow-cards.js +226 -0
- package/dist/im/lark/workflow-cards.js.map +1 -0
- package/dist/im/lark/workflow-progress-card.d.ts +76 -0
- package/dist/im/lark/workflow-progress-card.d.ts.map +1 -0
- package/dist/im/lark/workflow-progress-card.js +279 -0
- package/dist/im/lark/workflow-progress-card.js.map +1 -0
- package/dist/im/lark/workflow-slash-command.d.ts +92 -0
- package/dist/im/lark/workflow-slash-command.d.ts.map +1 -0
- package/dist/im/lark/workflow-slash-command.js +185 -0
- package/dist/im/lark/workflow-slash-command.js.map +1 -0
- package/dist/services/group-creator.d.ts.map +1 -1
- package/dist/services/group-creator.js +17 -4
- package/dist/services/group-creator.js.map +1 -1
- package/dist/services/groups-store.d.ts +11 -0
- package/dist/services/groups-store.d.ts.map +1 -1
- package/dist/services/groups-store.js +26 -0
- package/dist/services/groups-store.js.map +1 -1
- package/dist/services/jsonl-cursor.d.ts +12 -0
- package/dist/services/jsonl-cursor.d.ts.map +1 -0
- package/dist/services/jsonl-cursor.js +45 -0
- package/dist/services/jsonl-cursor.js.map +1 -0
- package/dist/services/schedule-store.d.ts +35 -0
- package/dist/services/schedule-store.d.ts.map +1 -1
- package/dist/services/schedule-store.js +108 -1
- package/dist/services/schedule-store.js.map +1 -1
- package/dist/skills/definitions.d.ts.map +1 -1
- package/dist/skills/definitions.js +399 -0
- package/dist/skills/definitions.js.map +1 -1
- package/dist/types.d.ts +4 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/cli-usage-limit.d.ts.map +1 -1
- package/dist/utils/cli-usage-limit.js +4 -0
- package/dist/utils/cli-usage-limit.js.map +1 -1
- package/dist/worker.js +118 -14
- package/dist/worker.js.map +1 -1
- package/dist/workflows/attempt-resume.d.ts +114 -0
- package/dist/workflows/attempt-resume.d.ts.map +1 -0
- package/dist/workflows/attempt-resume.js +385 -0
- package/dist/workflows/attempt-resume.js.map +1 -0
- package/dist/workflows/attempt-terminal.d.ts +21 -0
- package/dist/workflows/attempt-terminal.d.ts.map +1 -0
- package/dist/workflows/attempt-terminal.js +7 -0
- package/dist/workflows/attempt-terminal.js.map +1 -0
- package/dist/workflows/blob.d.ts +27 -0
- package/dist/workflows/blob.d.ts.map +1 -0
- package/dist/workflows/blob.js +39 -0
- package/dist/workflows/blob.js.map +1 -0
- package/dist/workflows/cancel-run.d.ts +45 -0
- package/dist/workflows/cancel-run.d.ts.map +1 -0
- package/dist/workflows/cancel-run.js +99 -0
- package/dist/workflows/cancel-run.js.map +1 -0
- package/dist/workflows/cancel.d.ts +111 -0
- package/dist/workflows/cancel.d.ts.map +1 -0
- package/dist/workflows/cancel.js +120 -0
- package/dist/workflows/cancel.js.map +1 -0
- package/dist/workflows/catalog.d.ts +60 -0
- package/dist/workflows/catalog.d.ts.map +1 -0
- package/dist/workflows/catalog.js +119 -0
- package/dist/workflows/catalog.js.map +1 -0
- package/dist/workflows/cold-attach.d.ts +30 -0
- package/dist/workflows/cold-attach.d.ts.map +1 -0
- package/dist/workflows/cold-attach.js +40 -0
- package/dist/workflows/cold-attach.js.map +1 -0
- package/dist/workflows/cold-scan.d.ts +21 -0
- package/dist/workflows/cold-scan.d.ts.map +1 -0
- package/dist/workflows/cold-scan.js +70 -0
- package/dist/workflows/cold-scan.js.map +1 -0
- package/dist/workflows/daemon-spawn.d.ts +117 -0
- package/dist/workflows/daemon-spawn.d.ts.map +1 -0
- package/dist/workflows/daemon-spawn.js +551 -0
- package/dist/workflows/daemon-spawn.js.map +1 -0
- package/dist/workflows/definition.d.ts +1309 -0
- package/dist/workflows/definition.d.ts.map +1 -0
- package/dist/workflows/definition.js +334 -0
- package/dist/workflows/definition.js.map +1 -0
- package/dist/workflows/effect-input.d.ts +4 -0
- package/dist/workflows/effect-input.d.ts.map +1 -0
- package/dist/workflows/effect-input.js +18 -0
- package/dist/workflows/effect-input.js.map +1 -0
- package/dist/workflows/events/append.d.ts +77 -0
- package/dist/workflows/events/append.d.ts.map +1 -0
- package/dist/workflows/events/append.js +214 -0
- package/dist/workflows/events/append.js.map +1 -0
- package/dist/workflows/events/idempotency.d.ts +77 -0
- package/dist/workflows/events/idempotency.d.ts.map +1 -0
- package/dist/workflows/events/idempotency.js +116 -0
- package/dist/workflows/events/idempotency.js.map +1 -0
- package/dist/workflows/events/index.d.ts +7 -0
- package/dist/workflows/events/index.d.ts.map +1 -0
- package/dist/workflows/events/index.js +7 -0
- package/dist/workflows/events/index.js.map +1 -0
- package/dist/workflows/events/payloads.d.ts +917 -0
- package/dist/workflows/events/payloads.d.ts.map +1 -0
- package/dist/workflows/events/payloads.js +337 -0
- package/dist/workflows/events/payloads.js.map +1 -0
- package/dist/workflows/events/replay.d.ts +238 -0
- package/dist/workflows/events/replay.d.ts.map +1 -0
- package/dist/workflows/events/replay.js +608 -0
- package/dist/workflows/events/replay.js.map +1 -0
- package/dist/workflows/events/schema.d.ts +5242 -0
- package/dist/workflows/events/schema.d.ts.map +1 -0
- package/dist/workflows/events/schema.js +295 -0
- package/dist/workflows/events/schema.js.map +1 -0
- package/dist/workflows/events/types.d.ts +34 -0
- package/dist/workflows/events/types.d.ts.map +1 -0
- package/dist/workflows/events/types.js +2 -0
- package/dist/workflows/events/types.js.map +1 -0
- package/dist/workflows/fanout.d.ts +36 -0
- package/dist/workflows/fanout.d.ts.map +1 -0
- package/dist/workflows/fanout.js +114 -0
- package/dist/workflows/fanout.js.map +1 -0
- package/dist/workflows/hostExecutors/botmux-schedule.d.ts +41 -0
- package/dist/workflows/hostExecutors/botmux-schedule.d.ts.map +1 -0
- package/dist/workflows/hostExecutors/botmux-schedule.js +121 -0
- package/dist/workflows/hostExecutors/botmux-schedule.js.map +1 -0
- package/dist/workflows/hostExecutors/feishu-im.d.ts +12 -0
- package/dist/workflows/hostExecutors/feishu-im.d.ts.map +1 -0
- package/dist/workflows/hostExecutors/feishu-im.js +49 -0
- package/dist/workflows/hostExecutors/feishu-im.js.map +1 -0
- package/dist/workflows/hostExecutors/feishu-reply.d.ts +24 -0
- package/dist/workflows/hostExecutors/feishu-reply.d.ts.map +1 -0
- package/dist/workflows/hostExecutors/feishu-reply.js +88 -0
- package/dist/workflows/hostExecutors/feishu-reply.js.map +1 -0
- package/dist/workflows/hostExecutors/feishu-send.d.ts +23 -0
- package/dist/workflows/hostExecutors/feishu-send.d.ts.map +1 -0
- package/dist/workflows/hostExecutors/feishu-send.js +124 -0
- package/dist/workflows/hostExecutors/feishu-send.js.map +1 -0
- package/dist/workflows/hostExecutors/index.d.ts +8 -0
- package/dist/workflows/hostExecutors/index.d.ts.map +1 -0
- package/dist/workflows/hostExecutors/index.js +8 -0
- package/dist/workflows/hostExecutors/index.js.map +1 -0
- package/dist/workflows/hostExecutors/protocol.d.ts +42 -0
- package/dist/workflows/hostExecutors/protocol.d.ts.map +1 -0
- package/dist/workflows/hostExecutors/protocol.js +181 -0
- package/dist/workflows/hostExecutors/protocol.js.map +1 -0
- package/dist/workflows/hostExecutors/registry.d.ts +10 -0
- package/dist/workflows/hostExecutors/registry.d.ts.map +1 -0
- package/dist/workflows/hostExecutors/registry.js +36 -0
- package/dist/workflows/hostExecutors/registry.js.map +1 -0
- package/dist/workflows/hostExecutors/types.d.ts +78 -0
- package/dist/workflows/hostExecutors/types.d.ts.map +1 -0
- package/dist/workflows/hostExecutors/types.js +2 -0
- package/dist/workflows/hostExecutors/types.js.map +1 -0
- package/dist/workflows/loader.d.ts +16 -0
- package/dist/workflows/loader.d.ts.map +1 -0
- package/dist/workflows/loader.js +56 -0
- package/dist/workflows/loader.js.map +1 -0
- package/dist/workflows/loop.d.ts +50 -0
- package/dist/workflows/loop.d.ts.map +1 -0
- package/dist/workflows/loop.js +350 -0
- package/dist/workflows/loop.js.map +1 -0
- package/dist/workflows/ops-projection.d.ts +168 -0
- package/dist/workflows/ops-projection.d.ts.map +1 -0
- package/dist/workflows/ops-projection.js +707 -0
- package/dist/workflows/ops-projection.js.map +1 -0
- package/dist/workflows/orchestrator.d.ts +107 -0
- package/dist/workflows/orchestrator.d.ts.map +1 -0
- package/dist/workflows/orchestrator.js +197 -0
- package/dist/workflows/orchestrator.js.map +1 -0
- package/dist/workflows/output-binding.d.ts +70 -0
- package/dist/workflows/output-binding.d.ts.map +1 -0
- package/dist/workflows/output-binding.js +265 -0
- package/dist/workflows/output-binding.js.map +1 -0
- package/dist/workflows/params.d.ts +61 -0
- package/dist/workflows/params.d.ts.map +1 -0
- package/dist/workflows/params.js +195 -0
- package/dist/workflows/params.js.map +1 -0
- package/dist/workflows/resume.d.ts +263 -0
- package/dist/workflows/resume.d.ts.map +1 -0
- package/dist/workflows/resume.js +808 -0
- package/dist/workflows/resume.js.map +1 -0
- package/dist/workflows/run-id.d.ts +2 -0
- package/dist/workflows/run-id.d.ts.map +1 -0
- package/dist/workflows/run-id.js +7 -0
- package/dist/workflows/run-id.js.map +1 -0
- package/dist/workflows/run-init.d.ts +48 -0
- package/dist/workflows/run-init.d.ts.map +1 -0
- package/dist/workflows/run-init.js +99 -0
- package/dist/workflows/run-init.js.map +1 -0
- package/dist/workflows/runs-dir.d.ts +4 -0
- package/dist/workflows/runs-dir.d.ts.map +1 -0
- package/dist/workflows/runs-dir.js +15 -0
- package/dist/workflows/runs-dir.js.map +1 -0
- package/dist/workflows/runtime.d.ts +211 -0
- package/dist/workflows/runtime.d.ts.map +1 -0
- package/dist/workflows/runtime.js +594 -0
- package/dist/workflows/runtime.js.map +1 -0
- package/dist/workflows/spawn-bot.d.ts +165 -0
- package/dist/workflows/spawn-bot.d.ts.map +1 -0
- package/dist/workflows/spawn-bot.js +215 -0
- package/dist/workflows/spawn-bot.js.map +1 -0
- package/dist/workflows/system.d.ts +49 -0
- package/dist/workflows/system.d.ts.map +1 -0
- package/dist/workflows/system.js +48 -0
- package/dist/workflows/system.js.map +1 -0
- package/dist/workflows/trigger-run.d.ts +70 -0
- package/dist/workflows/trigger-run.d.ts.map +1 -0
- package/dist/workflows/trigger-run.js +88 -0
- package/dist/workflows/trigger-run.js.map +1 -0
- package/dist/workflows/wait.d.ts +120 -0
- package/dist/workflows/wait.d.ts.map +1 -0
- package/dist/workflows/wait.js +181 -0
- package/dist/workflows/wait.js.map +1 -0
- package/package.json +3 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../../src/workflows/events/schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAEL,YAAY,EAiCb,MAAM,eAAe,CAAC;AAIvB,eAAO,MAAM,gBAAgB;;;;;;;;;;;;EAI3B,CAAC;AACH,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAE1D,wBAAgB,YAAY,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,UAAU,CASxD;AAOD,eAAO,MAAM,aAAa,aAE0D,CAAC;AAiCrF,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAyC,CAAC;AAC5E,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAyC,CAAC;AAC5E,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAA6C,CAAC;AAClF,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAuC,CAAC;AACzE,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAA2C,CAAC;AAC/E,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAA2C,CAAC;AAC/E,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAA6C,CAAC;AAClF,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAA+C,CAAC;AACrF,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAyC,CAAC;AAC5E,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAA2C,CAAC;AAC/E,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAA6C,CAAC;AAClF,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAmD,CAAC;AAC3F,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAmD,CAAC;AAC3F,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAqD,CAAC;AAG9F,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAyD,CAAC;AACpG,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAA2C,CAAC;AAC/E,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAiD,CAAC;AACxF,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAqD,CAAC;AAC9F,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAiD,CAAC;AAGxF,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAmD,CAAC;AAC3F,eAAO,MAAM,4BAA4B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAuD,CAAC;AACjG,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAiD,CAAC;AAGxF,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAA2C,CAAC;AAC/E,eAAO,MAAM,uBAAuB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAA6C,CAAC;AAClF,eAAO,MAAM,+BAA+B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAG3C,CAAC;AAGF,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAmD,CAAC;AAC3F,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAmD,CAAC;AAC3F,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAqD,CAAC;AAG9F,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAyC,CAAC;AAC5E,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAA+C,CAAC;AACrF,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAmD,CAAC;AAsC3F;;;;;;;;GAQG;AACH,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAAmD,CAAC;AAE5E,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC;AACxD,MAAM,MAAM,iBAAiB,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;AAItD;;;;;;;GAOG;AACH,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,GAAG,IAAI,CAS7E;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,GAAG,IAAI,CAiBjF;AAED;;;;;;;;;GASG;AACH,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,GAAG,IAAI,CAWnF;AAiCD;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,OAAO,GAAG,aAAa,CAKtD;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,OAAO,GAEV;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,aAAa,CAAA;CAAE,GACtC;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,CAAC,CAAC,QAAQ,CAAA;CAAE,CAMxC;AAID;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,OAAO,CAAC;AAE7C;;;;;GAKG;AACH,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAGlD,CAAC;AAIF,OAAO,EAAE,YAAY,EAAE,CAAC"}
|
|
@@ -0,0 +1,295 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { ActorEnum, Sha256Schema, Sha256Pattern, RunCreatedPayload, RunStartedPayload, RunSucceededPayload, RunFailedPayload, RunCanceledPayload, NodeWaitingPayload, NodeRetryingPayload, NodeSucceededPayload, NodeFailedPayload, NodeSkippedPayload, NodeCanceledPayload, ActivityRunningPayload, ActivityWaitingPayload, ActivityTimedOutPayload, ConditionEvaluatedPayload, LeaseSignedPayload, AttemptCreatedPayload, BackoffScheduledPayload, BackoffElapsedPayload, EffectAttemptedPayload, ActivitySucceededPayload, ActivityFailedPayload, WaitCreatedPayload, WaitResolvedPayload, WaitDeadlineExceededPayload, CancelRequestedPayload, CancelDeliveredPayload, ActivityCanceledPayload, WorkerLostPayload, ResumeStartedPayload, ReconcileResultPayload, } from './payloads.js';
|
|
3
|
+
// ─── Payload ref / inline ───────────────────────────────────────────────────
|
|
4
|
+
export const PayloadRefSchema = z.object({
|
|
5
|
+
ref: z.string().min(1),
|
|
6
|
+
bytes: z.number().int().positive(),
|
|
7
|
+
schemaVersion: z.number().int().positive(),
|
|
8
|
+
});
|
|
9
|
+
export function isPayloadRef(p) {
|
|
10
|
+
return (typeof p === 'object' &&
|
|
11
|
+
p !== null &&
|
|
12
|
+
'ref' in p &&
|
|
13
|
+
'bytes' in p &&
|
|
14
|
+
'schemaVersion' in p &&
|
|
15
|
+
!('eventId' in p) // sanity: payload object, not envelope
|
|
16
|
+
);
|
|
17
|
+
}
|
|
18
|
+
// ─── Envelope ───────────────────────────────────────────────────────────────
|
|
19
|
+
// eventId = `<runId>-<seq>`, seq is a positive integer. We allow runIds that
|
|
20
|
+
// contain dashes themselves (uuidv4/uuidv7 do), so the format check only
|
|
21
|
+
// asserts: must end with `-<positive-integer>`.
|
|
22
|
+
export const EventIdSchema = z
|
|
23
|
+
.string()
|
|
24
|
+
.regex(/^.+-[1-9]\d*$/, 'eventId must be <runId>-<seq> with positive integer seq');
|
|
25
|
+
const EnvelopeBase = {
|
|
26
|
+
eventId: EventIdSchema,
|
|
27
|
+
runId: z.string().min(1),
|
|
28
|
+
timestamp: z.number().int().positive(),
|
|
29
|
+
schemaVersion: z.literal(1),
|
|
30
|
+
actor: ActorEnum,
|
|
31
|
+
payloadHash: z.string().regex(Sha256Pattern).optional(),
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Build a single event schema by wrapping the envelope around a literal
|
|
35
|
+
* `type` and the type's payload schema. The payload can be inline (the
|
|
36
|
+
* payload zod object) OR a ref to a blob file when it exceeds the inline
|
|
37
|
+
* size cap (see INLINE_PAYLOAD_MAX_BYTES below).
|
|
38
|
+
*
|
|
39
|
+
* Note the generic constraint `L extends string`: without it, callers
|
|
40
|
+
* passing `'runCreated'` would have the literal widened to `string`, which
|
|
41
|
+
* destroys discriminator narrowing on `z.infer<>` and breaks exhaustive
|
|
42
|
+
* `switch (e.type)` checks downstream (replay, dispatchers, etc.).
|
|
43
|
+
*/
|
|
44
|
+
function event(typeLiteral, payloadSchema) {
|
|
45
|
+
return z.object({
|
|
46
|
+
...EnvelopeBase,
|
|
47
|
+
type: z.literal(typeLiteral),
|
|
48
|
+
payload: z.union([payloadSchema, PayloadRefSchema]),
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
// ─── The 31 event schemas ───────────────────────────────────────────────────
|
|
52
|
+
// Group 1 — Lifecycle (14)
|
|
53
|
+
export const RunCreatedEventSchema = event('runCreated', RunCreatedPayload);
|
|
54
|
+
export const RunStartedEventSchema = event('runStarted', RunStartedPayload);
|
|
55
|
+
export const RunSucceededEventSchema = event('runSucceeded', RunSucceededPayload);
|
|
56
|
+
export const RunFailedEventSchema = event('runFailed', RunFailedPayload);
|
|
57
|
+
export const RunCanceledEventSchema = event('runCanceled', RunCanceledPayload);
|
|
58
|
+
export const NodeWaitingEventSchema = event('nodeWaiting', NodeWaitingPayload);
|
|
59
|
+
export const NodeRetryingEventSchema = event('nodeRetrying', NodeRetryingPayload);
|
|
60
|
+
export const NodeSucceededEventSchema = event('nodeSucceeded', NodeSucceededPayload);
|
|
61
|
+
export const NodeFailedEventSchema = event('nodeFailed', NodeFailedPayload);
|
|
62
|
+
export const NodeSkippedEventSchema = event('nodeSkipped', NodeSkippedPayload);
|
|
63
|
+
export const NodeCanceledEventSchema = event('nodeCanceled', NodeCanceledPayload);
|
|
64
|
+
export const ActivityRunningEventSchema = event('activityRunning', ActivityRunningPayload);
|
|
65
|
+
export const ActivityWaitingEventSchema = event('activityWaiting', ActivityWaitingPayload);
|
|
66
|
+
export const ActivityTimedOutEventSchema = event('activityTimedOut', ActivityTimedOutPayload);
|
|
67
|
+
// Group 2 — Scheduling (5)
|
|
68
|
+
export const ConditionEvaluatedEventSchema = event('conditionEvaluated', ConditionEvaluatedPayload);
|
|
69
|
+
export const LeaseSignedEventSchema = event('leaseSigned', LeaseSignedPayload);
|
|
70
|
+
export const AttemptCreatedEventSchema = event('attemptCreated', AttemptCreatedPayload);
|
|
71
|
+
export const BackoffScheduledEventSchema = event('backoffScheduled', BackoffScheduledPayload);
|
|
72
|
+
export const BackoffElapsedEventSchema = event('backoffElapsed', BackoffElapsedPayload);
|
|
73
|
+
// Group 3 — Side Effect (3)
|
|
74
|
+
export const EffectAttemptedEventSchema = event('effectAttempted', EffectAttemptedPayload);
|
|
75
|
+
export const ActivitySucceededEventSchema = event('activitySucceeded', ActivitySucceededPayload);
|
|
76
|
+
export const ActivityFailedEventSchema = event('activityFailed', ActivityFailedPayload);
|
|
77
|
+
// Group 4 — Wait / Human (3)
|
|
78
|
+
export const WaitCreatedEventSchema = event('waitCreated', WaitCreatedPayload);
|
|
79
|
+
export const WaitResolvedEventSchema = event('waitResolved', WaitResolvedPayload);
|
|
80
|
+
export const WaitDeadlineExceededEventSchema = event('waitDeadlineExceeded', WaitDeadlineExceededPayload);
|
|
81
|
+
// Group 5 — Control (3)
|
|
82
|
+
export const CancelRequestedEventSchema = event('cancelRequested', CancelRequestedPayload);
|
|
83
|
+
export const CancelDeliveredEventSchema = event('cancelDelivered', CancelDeliveredPayload);
|
|
84
|
+
export const ActivityCanceledEventSchema = event('activityCanceled', ActivityCanceledPayload);
|
|
85
|
+
// Group 6 — System / Recovery (3)
|
|
86
|
+
export const WorkerLostEventSchema = event('workerLost', WorkerLostPayload);
|
|
87
|
+
export const ResumeStartedEventSchema = event('resumeStarted', ResumeStartedPayload);
|
|
88
|
+
export const ReconcileResultEventSchema = event('reconcileResult', ReconcileResultPayload);
|
|
89
|
+
// ─── Discriminated union over all 31 ────────────────────────────────────────
|
|
90
|
+
const EVENT_SCHEMAS = [
|
|
91
|
+
RunCreatedEventSchema,
|
|
92
|
+
RunStartedEventSchema,
|
|
93
|
+
RunSucceededEventSchema,
|
|
94
|
+
RunFailedEventSchema,
|
|
95
|
+
RunCanceledEventSchema,
|
|
96
|
+
NodeWaitingEventSchema,
|
|
97
|
+
NodeRetryingEventSchema,
|
|
98
|
+
NodeSucceededEventSchema,
|
|
99
|
+
NodeFailedEventSchema,
|
|
100
|
+
NodeSkippedEventSchema,
|
|
101
|
+
NodeCanceledEventSchema,
|
|
102
|
+
ActivityRunningEventSchema,
|
|
103
|
+
ActivityWaitingEventSchema,
|
|
104
|
+
ActivityTimedOutEventSchema,
|
|
105
|
+
ConditionEvaluatedEventSchema,
|
|
106
|
+
LeaseSignedEventSchema,
|
|
107
|
+
AttemptCreatedEventSchema,
|
|
108
|
+
BackoffScheduledEventSchema,
|
|
109
|
+
BackoffElapsedEventSchema,
|
|
110
|
+
EffectAttemptedEventSchema,
|
|
111
|
+
ActivitySucceededEventSchema,
|
|
112
|
+
ActivityFailedEventSchema,
|
|
113
|
+
WaitCreatedEventSchema,
|
|
114
|
+
WaitResolvedEventSchema,
|
|
115
|
+
WaitDeadlineExceededEventSchema,
|
|
116
|
+
CancelRequestedEventSchema,
|
|
117
|
+
CancelDeliveredEventSchema,
|
|
118
|
+
ActivityCanceledEventSchema,
|
|
119
|
+
WorkerLostEventSchema,
|
|
120
|
+
ResumeStartedEventSchema,
|
|
121
|
+
ReconcileResultEventSchema,
|
|
122
|
+
];
|
|
123
|
+
/**
|
|
124
|
+
* The discriminated union over all 31 event types — pure, no refinements.
|
|
125
|
+
*
|
|
126
|
+
* Why pure: zod's `.superRefine` wraps the union in `ZodEffects`, which
|
|
127
|
+
* breaks `z.infer<>` narrowing on the discriminator at compile time
|
|
128
|
+
* (`switch (e.type)` won't exhaustively narrow). The payloadHash
|
|
129
|
+
* invariant (events doc §1.1) lives in `parseEvent` / `safeParseEvent`
|
|
130
|
+
* instead, applied as a post-parse check.
|
|
131
|
+
*/
|
|
132
|
+
export const EventSchema = z.discriminatedUnion('type', [...EVENT_SCHEMAS]);
|
|
133
|
+
// ─── payloadHash invariant + canonical parse helpers ────────────────────────
|
|
134
|
+
/**
|
|
135
|
+
* Check the payloadHash <-> payload-ref invariant from events doc §1.1:
|
|
136
|
+
* - inline payload: payloadHash MUST be absent
|
|
137
|
+
* - ref payload: payloadHash MUST be present
|
|
138
|
+
*
|
|
139
|
+
* Returns `null` if the event respects the invariant; otherwise a human
|
|
140
|
+
* readable reason string. Pure function — no side effects, no throws.
|
|
141
|
+
*/
|
|
142
|
+
export function checkPayloadHashInvariant(event) {
|
|
143
|
+
const isRef = isPayloadRef(event.payload);
|
|
144
|
+
if (isRef && !event.payloadHash) {
|
|
145
|
+
return 'payloadHash required when payload is a ref';
|
|
146
|
+
}
|
|
147
|
+
if (!isRef && event.payloadHash !== undefined) {
|
|
148
|
+
return 'payloadHash must be absent when payload is inline';
|
|
149
|
+
}
|
|
150
|
+
return null;
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* `reconcileResult.capability` × `decision` legal combinations (events
|
|
154
|
+
* doc v0.1.2 §4.3.1 — table updated per spec freeze; the codex round 4
|
|
155
|
+
* variant of this invariant pinned `completedByIdempotentSubmit` to
|
|
156
|
+
* `idempotentSubmit` only, but the spec explicitly allows the
|
|
157
|
+
* `readOnlyLookup → found → completedByIdempotentSubmit` path for
|
|
158
|
+
* schedule, so we widen accordingly):
|
|
159
|
+
*
|
|
160
|
+
* | decision | allowed capability |
|
|
161
|
+
* |--------------------------------|---------------------------|
|
|
162
|
+
* | replayed | none |
|
|
163
|
+
* | completedByIdempotentSubmit | readOnlyLookup OR |
|
|
164
|
+
* | | idempotentSubmit |
|
|
165
|
+
* | freshRetry | readOnlyLookup |
|
|
166
|
+
* | manual | any |
|
|
167
|
+
*
|
|
168
|
+
* Rationale:
|
|
169
|
+
* - `replayed` means the event log already had a terminal — resume
|
|
170
|
+
* scans the log, no provider call, capability is `none`.
|
|
171
|
+
* - `completedByIdempotentSubmit` covers BOTH "ROL found the effect"
|
|
172
|
+
* (schedule case) and "IS re-submit returned the original ref"
|
|
173
|
+
* (Feishu case). The `capability` field disambiguates which path
|
|
174
|
+
* was taken; the decision name reflects the outcome.
|
|
175
|
+
* - `freshRetry` requires `readOnlyLookup`: the only way to confirm
|
|
176
|
+
* "provider definitely doesn't have it, safe to retry" is a
|
|
177
|
+
* side-effect-free read. IS by itself cannot produce freshRetry —
|
|
178
|
+
* a re-submit either lands or fails, no "definitely-not-yet" state.
|
|
179
|
+
* - `manual` is the catch-all; capability records what was tried.
|
|
180
|
+
*
|
|
181
|
+
* Returns `null` if legal, otherwise a reason string.
|
|
182
|
+
*/
|
|
183
|
+
export function checkReconcileResultInvariant(event) {
|
|
184
|
+
if (event.type !== 'reconcileResult')
|
|
185
|
+
return null;
|
|
186
|
+
if (isPayloadRef(event.payload))
|
|
187
|
+
return null; // can't inspect ref payload
|
|
188
|
+
const { capability, decision } = event.payload;
|
|
189
|
+
const allowed = {
|
|
190
|
+
replayed: ['none'],
|
|
191
|
+
completedByIdempotentSubmit: ['readOnlyLookup', 'idempotentSubmit'],
|
|
192
|
+
freshRetry: ['readOnlyLookup'],
|
|
193
|
+
manual: ['none', 'readOnlyLookup', 'idempotentSubmit'],
|
|
194
|
+
};
|
|
195
|
+
if (!allowed[decision].includes(capability)) {
|
|
196
|
+
return `reconcileResult: decision='${decision}' requires capability ∈ {${allowed[decision].join(', ')}}, got '${capability}'`;
|
|
197
|
+
}
|
|
198
|
+
return null;
|
|
199
|
+
}
|
|
200
|
+
/**
|
|
201
|
+
* `waitCreated` shape invariant: `prompt` (inline) and `promptRef` (blob
|
|
202
|
+
* spill) are mutually exclusive, and any spill MUST carry `promptPreview`
|
|
203
|
+
* so cards / dashboard can render without reading the blob file.
|
|
204
|
+
*
|
|
205
|
+
* Schema keeps `prompt` as `z.string().optional()` (no `.max()`) so that
|
|
206
|
+
* historical events with multi-KB inline prompts still parse / replay.
|
|
207
|
+
* The producer (runtime.dispatchGate) is responsible for the 1024-byte
|
|
208
|
+
* split policy.
|
|
209
|
+
*/
|
|
210
|
+
export function checkWaitCreatedPromptInvariant(event) {
|
|
211
|
+
if (event.type !== 'waitCreated')
|
|
212
|
+
return null;
|
|
213
|
+
if (isPayloadRef(event.payload))
|
|
214
|
+
return null; // ref payloads opaque here
|
|
215
|
+
const p = event.payload;
|
|
216
|
+
if (p.prompt !== undefined && p.promptRef !== undefined) {
|
|
217
|
+
return 'waitCreated: prompt and promptRef are mutually exclusive';
|
|
218
|
+
}
|
|
219
|
+
if (p.promptRef !== undefined && p.promptPreview === undefined) {
|
|
220
|
+
return 'waitCreated: promptRef requires promptPreview for card / dashboard display';
|
|
221
|
+
}
|
|
222
|
+
return null;
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Run every post-parse invariant against a WorkflowEvent. Each entry is
|
|
226
|
+
* a `(event) => string | null` checker; the first failure wins and gets
|
|
227
|
+
* surfaced as a ZodIssue. Adding new invariants here means they apply
|
|
228
|
+
* uniformly to parseEvent / safeParseEvent / append paths.
|
|
229
|
+
*/
|
|
230
|
+
const POST_PARSE_INVARIANTS = [
|
|
231
|
+
{ path: ['payloadHash'], check: checkPayloadHashInvariant },
|
|
232
|
+
{ path: ['payload'], check: checkReconcileResultInvariant },
|
|
233
|
+
{ path: ['payload'], check: checkWaitCreatedPromptInvariant },
|
|
234
|
+
];
|
|
235
|
+
function applyInvariants(event) {
|
|
236
|
+
for (const { path, check } of POST_PARSE_INVARIANTS) {
|
|
237
|
+
const reason = check(event);
|
|
238
|
+
if (reason) {
|
|
239
|
+
return new z.ZodError([
|
|
240
|
+
{
|
|
241
|
+
code: z.ZodIssueCode.custom,
|
|
242
|
+
path,
|
|
243
|
+
message: reason,
|
|
244
|
+
},
|
|
245
|
+
]);
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
return null;
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Parse + validate an unknown value as a WorkflowEvent. Combines the
|
|
252
|
+
* discriminated-union schema check with the post-parse invariants
|
|
253
|
+
* (payloadHash, reconcileResult capability×decision). Throws ZodError
|
|
254
|
+
* on failure.
|
|
255
|
+
*/
|
|
256
|
+
export function parseEvent(raw) {
|
|
257
|
+
const event = EventSchema.parse(raw);
|
|
258
|
+
const err = applyInvariants(event);
|
|
259
|
+
if (err)
|
|
260
|
+
throw err;
|
|
261
|
+
return event;
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Safe variant of `parseEvent`: returns a result object instead of throwing.
|
|
265
|
+
* Mirrors `ZodType.safeParse` API for ergonomic call sites.
|
|
266
|
+
*/
|
|
267
|
+
export function safeParseEvent(raw) {
|
|
268
|
+
const parsed = EventSchema.safeParse(raw);
|
|
269
|
+
if (!parsed.success)
|
|
270
|
+
return { success: false, error: parsed.error };
|
|
271
|
+
const err = applyInvariants(parsed.data);
|
|
272
|
+
if (err)
|
|
273
|
+
return { success: false, error: err };
|
|
274
|
+
return { success: true, data: parsed.data };
|
|
275
|
+
}
|
|
276
|
+
// ─── Constants ──────────────────────────────────────────────────────────────
|
|
277
|
+
/**
|
|
278
|
+
* Inline payload size cap. Payloads larger than this must be written as a
|
|
279
|
+
* content-addressed blob and referenced via `PayloadRef`. v0 value is a
|
|
280
|
+
* pragmatic default; verify and tune after dogfooding (see events doc §6.2).
|
|
281
|
+
*/
|
|
282
|
+
export const INLINE_PAYLOAD_MAX_BYTES = 4096;
|
|
283
|
+
/**
|
|
284
|
+
* Per-provider TTL (ms) within which `idempotentSubmit` is safe. Used by
|
|
285
|
+
* the reconcile path to decide whether a dangling `effectAttempted` can
|
|
286
|
+
* still be safely retried with the same uuid. Feishu's documented uuid
|
|
287
|
+
* dedupe window is 1 hour (spike report §1.2).
|
|
288
|
+
*/
|
|
289
|
+
export const PROVIDER_TTL_MS = {
|
|
290
|
+
'feishu-im': 60 * 60 * 1000,
|
|
291
|
+
'botmux-schedule': Number.MAX_SAFE_INTEGER, // schedule entry id is permanent
|
|
292
|
+
};
|
|
293
|
+
// ─── Re-export Sha256Schema for callers ─────────────────────────────────────
|
|
294
|
+
export { Sha256Schema };
|
|
295
|
+
//# sourceMappingURL=schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema.js","sourceRoot":"","sources":["../../../src/workflows/events/schema.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { RunCreatedEventSchema, RunStartedEventSchema, RunSucceededEventSchema, RunFailedEventSchema, RunCanceledEventSchema, NodeWaitingEventSchema, NodeRetryingEventSchema, NodeSucceededEventSchema, NodeFailedEventSchema, NodeSkippedEventSchema, NodeCanceledEventSchema, ActivityRunningEventSchema, ActivityWaitingEventSchema, ActivityTimedOutEventSchema, ConditionEvaluatedEventSchema, LeaseSignedEventSchema, AttemptCreatedEventSchema, BackoffScheduledEventSchema, BackoffElapsedEventSchema, EffectAttemptedEventSchema, ActivitySucceededEventSchema, ActivityFailedEventSchema, WaitCreatedEventSchema, WaitResolvedEventSchema, WaitDeadlineExceededEventSchema, CancelRequestedEventSchema, CancelDeliveredEventSchema, ActivityCanceledEventSchema, WorkerLostEventSchema, ResumeStartedEventSchema, ReconcileResultEventSchema } from './schema.js';
|
|
3
|
+
export type RunCreatedEvent = z.infer<typeof RunCreatedEventSchema>;
|
|
4
|
+
export type RunStartedEvent = z.infer<typeof RunStartedEventSchema>;
|
|
5
|
+
export type RunSucceededEvent = z.infer<typeof RunSucceededEventSchema>;
|
|
6
|
+
export type RunFailedEvent = z.infer<typeof RunFailedEventSchema>;
|
|
7
|
+
export type RunCanceledEvent = z.infer<typeof RunCanceledEventSchema>;
|
|
8
|
+
export type NodeWaitingEvent = z.infer<typeof NodeWaitingEventSchema>;
|
|
9
|
+
export type NodeRetryingEvent = z.infer<typeof NodeRetryingEventSchema>;
|
|
10
|
+
export type NodeSucceededEvent = z.infer<typeof NodeSucceededEventSchema>;
|
|
11
|
+
export type NodeFailedEvent = z.infer<typeof NodeFailedEventSchema>;
|
|
12
|
+
export type NodeSkippedEvent = z.infer<typeof NodeSkippedEventSchema>;
|
|
13
|
+
export type NodeCanceledEvent = z.infer<typeof NodeCanceledEventSchema>;
|
|
14
|
+
export type ActivityRunningEvent = z.infer<typeof ActivityRunningEventSchema>;
|
|
15
|
+
export type ActivityWaitingEvent = z.infer<typeof ActivityWaitingEventSchema>;
|
|
16
|
+
export type ActivityTimedOutEvent = z.infer<typeof ActivityTimedOutEventSchema>;
|
|
17
|
+
export type ConditionEvaluatedEvent = z.infer<typeof ConditionEvaluatedEventSchema>;
|
|
18
|
+
export type LeaseSignedEvent = z.infer<typeof LeaseSignedEventSchema>;
|
|
19
|
+
export type AttemptCreatedEvent = z.infer<typeof AttemptCreatedEventSchema>;
|
|
20
|
+
export type BackoffScheduledEvent = z.infer<typeof BackoffScheduledEventSchema>;
|
|
21
|
+
export type BackoffElapsedEvent = z.infer<typeof BackoffElapsedEventSchema>;
|
|
22
|
+
export type EffectAttemptedEvent = z.infer<typeof EffectAttemptedEventSchema>;
|
|
23
|
+
export type ActivitySucceededEvent = z.infer<typeof ActivitySucceededEventSchema>;
|
|
24
|
+
export type ActivityFailedEvent = z.infer<typeof ActivityFailedEventSchema>;
|
|
25
|
+
export type WaitCreatedEvent = z.infer<typeof WaitCreatedEventSchema>;
|
|
26
|
+
export type WaitResolvedEvent = z.infer<typeof WaitResolvedEventSchema>;
|
|
27
|
+
export type WaitDeadlineExceededEvent = z.infer<typeof WaitDeadlineExceededEventSchema>;
|
|
28
|
+
export type CancelRequestedEvent = z.infer<typeof CancelRequestedEventSchema>;
|
|
29
|
+
export type CancelDeliveredEvent = z.infer<typeof CancelDeliveredEventSchema>;
|
|
30
|
+
export type ActivityCanceledEvent = z.infer<typeof ActivityCanceledEventSchema>;
|
|
31
|
+
export type WorkerLostEvent = z.infer<typeof WorkerLostEventSchema>;
|
|
32
|
+
export type ResumeStartedEvent = z.infer<typeof ResumeStartedEventSchema>;
|
|
33
|
+
export type ReconcileResultEvent = z.infer<typeof ReconcileResultEventSchema>;
|
|
34
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/workflows/events/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/workflows/events/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { EventLog } from './events/append.js';
|
|
2
|
+
import type { WorkflowEvent } from './events/schema.js';
|
|
3
|
+
import { type Snapshot } from './events/replay.js';
|
|
4
|
+
import { type RunChatBinding } from './loader.js';
|
|
5
|
+
export type WorkflowEventCallback = (event: WorkflowEvent) => void | Promise<void>;
|
|
6
|
+
export type WorkflowEventWatcherOptions = {
|
|
7
|
+
runsDir?: string;
|
|
8
|
+
onError?: (err: unknown) => void;
|
|
9
|
+
pollIntervalMs?: number;
|
|
10
|
+
useFsWatch?: boolean;
|
|
11
|
+
};
|
|
12
|
+
export declare class WorkflowEventWatcher {
|
|
13
|
+
private readonly onNewEvent;
|
|
14
|
+
private readonly opts;
|
|
15
|
+
readonly runId: string;
|
|
16
|
+
readonly log: EventLog;
|
|
17
|
+
readonly ready: Promise<void>;
|
|
18
|
+
private watcher?;
|
|
19
|
+
private pollTimer?;
|
|
20
|
+
private lastSeq;
|
|
21
|
+
private draining;
|
|
22
|
+
private pendingDrain;
|
|
23
|
+
private closed;
|
|
24
|
+
constructor(runId: string, onNewEvent: WorkflowEventCallback, opts?: WorkflowEventWatcherOptions);
|
|
25
|
+
close(): void;
|
|
26
|
+
drain(): Promise<void>;
|
|
27
|
+
private start;
|
|
28
|
+
}
|
|
29
|
+
export type WorkflowFanoutDeps = {
|
|
30
|
+
runsDir?: string;
|
|
31
|
+
binding?: RunChatBinding;
|
|
32
|
+
snapshot?: Snapshot;
|
|
33
|
+
sendCard?: (larkAppId: string, chatId: string, cardJson: string, msgType: 'interactive') => Promise<string>;
|
|
34
|
+
};
|
|
35
|
+
export declare function handleWorkflowFanoutEvent(event: WorkflowEvent, deps?: WorkflowFanoutDeps): Promise<string | undefined>;
|
|
36
|
+
//# sourceMappingURL=fanout.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fanout.d.ts","sourceRoot":"","sources":["../../src/workflows/fanout.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,EAAU,KAAK,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAI3D,OAAO,EAAsB,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC;AAKtE,MAAM,MAAM,qBAAqB,GAAG,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;AAEnF,MAAM,MAAM,2BAA2B,GAAG;IACxC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IACjC,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB,CAAC;AAEF,qBAAa,oBAAoB;IAc7B,OAAO,CAAC,QAAQ,CAAC,UAAU;IAC3B,OAAO,CAAC,QAAQ,CAAC,IAAI;IAdvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAE9B,OAAO,CAAC,OAAO,CAAC,CAAY;IAC5B,OAAO,CAAC,SAAS,CAAC,CAAiB;IACnC,OAAO,CAAC,OAAO,CAAK;IACpB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,MAAM,CAAS;gBAGrB,KAAK,EAAE,MAAM,EACI,UAAU,EAAE,qBAAqB,EACjC,IAAI,GAAE,2BAAgC;IAOzD,KAAK,IAAI,IAAI;IAQP,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;YA+Bd,KAAK;CAgBpB;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,QAAQ,CAAC,EAAE,CACT,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,aAAa,KACnB,OAAO,CAAC,MAAM,CAAC,CAAC;CACtB,CAAC;AAEF,wBAAsB,yBAAyB,CAC7C,KAAK,EAAE,aAAa,EACpB,IAAI,GAAE,kBAAuB,GAC5B,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAgB7B"}
|
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
import { existsSync } from 'node:fs';
|
|
2
|
+
import { mkdir, writeFile } from 'node:fs/promises';
|
|
3
|
+
import { dirname } from 'node:path';
|
|
4
|
+
import { watch } from 'node:fs';
|
|
5
|
+
import { EventLog } from './events/append.js';
|
|
6
|
+
import { replay } from './events/replay.js';
|
|
7
|
+
import { isPayloadRef } from './events/schema.js';
|
|
8
|
+
import { getRunsDir } from './runs-dir.js';
|
|
9
|
+
import { readRunChatBinding } from './loader.js';
|
|
10
|
+
import { buildWorkflowApprovalCard } from '../im/lark/workflow-cards.js';
|
|
11
|
+
import { sendMessage } from '../im/lark/client.js';
|
|
12
|
+
import { logger } from '../utils/logger.js';
|
|
13
|
+
export class WorkflowEventWatcher {
|
|
14
|
+
onNewEvent;
|
|
15
|
+
opts;
|
|
16
|
+
runId;
|
|
17
|
+
log;
|
|
18
|
+
ready;
|
|
19
|
+
watcher;
|
|
20
|
+
pollTimer;
|
|
21
|
+
lastSeq = 0;
|
|
22
|
+
draining = false;
|
|
23
|
+
pendingDrain = false;
|
|
24
|
+
closed = false;
|
|
25
|
+
constructor(runId, onNewEvent, opts = {}) {
|
|
26
|
+
this.onNewEvent = onNewEvent;
|
|
27
|
+
this.opts = opts;
|
|
28
|
+
this.runId = runId;
|
|
29
|
+
this.log = new EventLog(runId, opts.runsDir ?? getRunsDir());
|
|
30
|
+
this.ready = this.start();
|
|
31
|
+
}
|
|
32
|
+
close() {
|
|
33
|
+
this.closed = true;
|
|
34
|
+
this.watcher?.close();
|
|
35
|
+
this.watcher = undefined;
|
|
36
|
+
if (this.pollTimer)
|
|
37
|
+
clearInterval(this.pollTimer);
|
|
38
|
+
this.pollTimer = undefined;
|
|
39
|
+
}
|
|
40
|
+
async drain() {
|
|
41
|
+
if (this.closed)
|
|
42
|
+
return;
|
|
43
|
+
if (this.draining) {
|
|
44
|
+
this.pendingDrain = true;
|
|
45
|
+
return;
|
|
46
|
+
}
|
|
47
|
+
this.draining = true;
|
|
48
|
+
try {
|
|
49
|
+
do {
|
|
50
|
+
this.pendingDrain = false;
|
|
51
|
+
const events = await this.log.readAll();
|
|
52
|
+
for (const event of events) {
|
|
53
|
+
const seq = eventSeq(event);
|
|
54
|
+
if (seq <= this.lastSeq)
|
|
55
|
+
continue;
|
|
56
|
+
try {
|
|
57
|
+
await this.onNewEvent(event);
|
|
58
|
+
}
|
|
59
|
+
catch (err) {
|
|
60
|
+
this.opts.onError?.(err);
|
|
61
|
+
// At-least-once delivery: do not advance the cursor when a
|
|
62
|
+
// downstream card/send/update fails. A later fs.watch event or
|
|
63
|
+
// polling tick will retry the same event before newer events.
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
this.lastSeq = seq;
|
|
67
|
+
}
|
|
68
|
+
} while (this.pendingDrain && !this.closed);
|
|
69
|
+
}
|
|
70
|
+
finally {
|
|
71
|
+
this.draining = false;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
async start() {
|
|
75
|
+
await mkdir(dirname(this.log.eventsFile), { recursive: true });
|
|
76
|
+
if (!existsSync(this.log.eventsFile)) {
|
|
77
|
+
await writeFile(this.log.eventsFile, '', { flag: 'a' });
|
|
78
|
+
}
|
|
79
|
+
this.lastSeq = await this.log.currentSeq();
|
|
80
|
+
if (this.opts.useFsWatch !== false) {
|
|
81
|
+
this.watcher = watch(this.log.eventsFile, { persistent: false }, () => {
|
|
82
|
+
void this.drain();
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
this.pollTimer = setInterval(() => {
|
|
86
|
+
void this.drain();
|
|
87
|
+
}, this.opts.pollIntervalMs ?? 5_000);
|
|
88
|
+
this.pollTimer.unref?.();
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
export async function handleWorkflowFanoutEvent(event, deps = {}) {
|
|
92
|
+
if (event.type !== 'waitCreated')
|
|
93
|
+
return undefined;
|
|
94
|
+
const waitEvent = event;
|
|
95
|
+
if (isPayloadRef(waitEvent.payload) || waitEvent.payload.waitKind !== 'human-gate') {
|
|
96
|
+
return undefined;
|
|
97
|
+
}
|
|
98
|
+
const runsDir = deps.runsDir ?? getRunsDir();
|
|
99
|
+
const binding = deps.binding ?? (await readRunChatBinding(event.runId, { runsDir }));
|
|
100
|
+
const snapshot = deps.snapshot ?? replay(await new EventLog(event.runId, runsDir).readAll());
|
|
101
|
+
const cardJson = buildWorkflowApprovalCard(waitEvent, snapshot);
|
|
102
|
+
const sendCard = deps.sendCard ?? defaultSendWorkflowCard;
|
|
103
|
+
const messageId = await sendCard(binding.larkAppId, binding.chatId, cardJson, 'interactive');
|
|
104
|
+
logger.info(`[workflow:${event.runId}] approval card sent to ${binding.chatId}: ${messageId}`);
|
|
105
|
+
return messageId;
|
|
106
|
+
}
|
|
107
|
+
async function defaultSendWorkflowCard(larkAppId, chatId, cardJson, msgType) {
|
|
108
|
+
return sendMessage(larkAppId, chatId, cardJson, msgType);
|
|
109
|
+
}
|
|
110
|
+
function eventSeq(event) {
|
|
111
|
+
const match = event.eventId.match(/-(\d+)$/);
|
|
112
|
+
return match ? Number(match[1]) : 0;
|
|
113
|
+
}
|
|
114
|
+
//# sourceMappingURL=fanout.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fanout.js","sourceRoot":"","sources":["../../src/workflows/fanout.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { ParsedSchedule } from '../../types.js';
|
|
2
|
+
import type { ProviderReconciler } from '../resume.js';
|
|
3
|
+
import type { SideEffectingExecutor } from './types.js';
|
|
4
|
+
export type ScheduleInput = {
|
|
5
|
+
name: string;
|
|
6
|
+
schedule: string;
|
|
7
|
+
/** Pre-resolved schedule (parser output). Required for relative
|
|
8
|
+
* schedules (`30m`, `2h`, `明天9:00`) to keep canonical input frozen
|
|
9
|
+
* against re-parse drift (codex round 4 finding 4). */
|
|
10
|
+
parsed: ParsedSchedule;
|
|
11
|
+
prompt: string;
|
|
12
|
+
workingDir: string;
|
|
13
|
+
chatId: string;
|
|
14
|
+
rootMessageId?: string;
|
|
15
|
+
scope?: 'thread' | 'chat';
|
|
16
|
+
larkAppId?: string;
|
|
17
|
+
/** `repeat.completed` is intentionally absent — it's a runtime counter
|
|
18
|
+
* and must not be part of canonical input. See schedule-store
|
|
19
|
+
* canonicalScheduleInput. */
|
|
20
|
+
repeat?: {
|
|
21
|
+
times: number | null;
|
|
22
|
+
};
|
|
23
|
+
deliver?: 'origin' | 'local';
|
|
24
|
+
};
|
|
25
|
+
export type ScheduleOutput = {
|
|
26
|
+
taskId: string;
|
|
27
|
+
};
|
|
28
|
+
export declare function parseScheduleInput(input: unknown): ScheduleInput;
|
|
29
|
+
/**
|
|
30
|
+
* `botmux-schedule` hostExecutor. Calls `schedule-store.createTask`
|
|
31
|
+
* passing the runtime-derived `idempotencyKey` as the deterministic
|
|
32
|
+
* task id; schedule-store applies create-or-return-identical semantics
|
|
33
|
+
* (Step 5).
|
|
34
|
+
*
|
|
35
|
+
* Provider TTL is effectively infinite for schedule (the task entry
|
|
36
|
+
* lives until removed), so dangling effectAttempted reconcile uses
|
|
37
|
+
* readOnlyLookup (`getTask(idempotencyKey)`) — no TTL boundary.
|
|
38
|
+
*/
|
|
39
|
+
export declare const botmuxScheduleExecutor: SideEffectingExecutor<ScheduleInput, ScheduleOutput>;
|
|
40
|
+
export declare const botmuxScheduleReconciler: ProviderReconciler;
|
|
41
|
+
//# sourceMappingURL=botmux-schedule.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"botmux-schedule.d.ts","sourceRoot":"","sources":["../../../src/workflows/hostExecutors/botmux-schedule.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAExD,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB;;4DAEwD;IACxD,MAAM,EAAE,cAAc,CAAC;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;kCAE8B;IAC9B,MAAM,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IAClC,OAAO,CAAC,EAAE,QAAQ,GAAG,OAAO,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAwBF,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,aAAa,CAEhE;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,sBAAsB,EAAE,qBAAqB,CAAC,aAAa,EAAE,cAAc,CA4DvF,CAAC;AAEF,eAAO,MAAM,wBAAwB,EAAE,kBA4BtC,CAAC"}
|