monday-cli 0.2.0 → 0.3.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/CHANGELOG.md +324 -2
- package/README.md +128 -30
- package/dist/api/board-favorites.d.ts +329 -0
- package/dist/api/board-favorites.d.ts.map +1 -0
- package/dist/api/board-favorites.js +353 -0
- package/dist/api/board-favorites.js.map +1 -0
- package/dist/api/board-mutation-result.d.ts +9 -5
- package/dist/api/board-mutation-result.d.ts.map +1 -1
- package/dist/api/board-mutation-result.js +9 -5
- package/dist/api/board-mutation-result.js.map +1 -1
- package/dist/api/board-relation-validation.d.ts +161 -0
- package/dist/api/board-relation-validation.d.ts.map +1 -0
- package/dist/api/board-relation-validation.js +317 -0
- package/dist/api/board-relation-validation.js.map +1 -0
- package/dist/api/cache.d.ts +14 -5
- package/dist/api/cache.d.ts.map +1 -1
- package/dist/api/cache.js +8 -10
- package/dist/api/cache.js.map +1 -1
- package/dist/api/column-mapping.js +2 -2
- package/dist/api/column-mapping.js.map +1 -1
- package/dist/api/column-mutation-result.d.ts +9 -5
- package/dist/api/column-mutation-result.d.ts.map +1 -1
- package/dist/api/column-mutation-result.js +9 -5
- package/dist/api/column-mutation-result.js.map +1 -1
- package/dist/api/column-types.d.ts +26 -7
- package/dist/api/column-types.d.ts.map +1 -1
- package/dist/api/column-types.js +42 -3
- package/dist/api/column-types.js.map +1 -1
- package/dist/api/column-values.d.ts +228 -31
- package/dist/api/column-values.d.ts.map +1 -1
- package/dist/api/column-values.js +551 -124
- package/dist/api/column-values.js.map +1 -1
- package/dist/api/cross-board-search.d.ts +501 -0
- package/dist/api/cross-board-search.d.ts.map +1 -0
- package/dist/api/cross-board-search.js +547 -0
- package/dist/api/cross-board-search.js.map +1 -0
- package/dist/api/dev-conventions.d.ts +1038 -0
- package/dist/api/dev-conventions.d.ts.map +1 -0
- package/dist/api/dev-conventions.js +1556 -0
- package/dist/api/dev-conventions.js.map +1 -0
- package/dist/api/dry-run.d.ts +32 -5
- package/dist/api/dry-run.d.ts.map +1 -1
- package/dist/api/dry-run.js +149 -32
- package/dist/api/dry-run.js.map +1 -1
- package/dist/api/errors.d.ts.map +1 -1
- package/dist/api/errors.js +28 -7
- package/dist/api/errors.js.map +1 -1
- package/dist/api/group-mutation-result.d.ts +9 -5
- package/dist/api/group-mutation-result.d.ts.map +1 -1
- package/dist/api/group-mutation-result.js +9 -5
- package/dist/api/group-mutation-result.js.map +1 -1
- package/dist/api/item-history-projection.d.ts +919 -0
- package/dist/api/item-history-projection.d.ts.map +1 -0
- package/dist/api/item-history-projection.js +1104 -0
- package/dist/api/item-history-projection.js.map +1 -0
- package/dist/api/item-mutation-execute.d.ts +82 -0
- package/dist/api/item-mutation-execute.d.ts.map +1 -0
- package/dist/api/item-mutation-execute.js +199 -0
- package/dist/api/item-mutation-execute.js.map +1 -0
- package/dist/api/notifications.d.ts +156 -0
- package/dist/api/notifications.d.ts.map +1 -0
- package/dist/api/notifications.js +215 -0
- package/dist/api/notifications.js.map +1 -0
- package/dist/api/oauth-test-helper.d.ts +64 -0
- package/dist/api/oauth-test-helper.d.ts.map +1 -0
- package/dist/api/oauth-test-helper.js +179 -0
- package/dist/api/oauth-test-helper.js.map +1 -0
- package/dist/api/oauth.d.ts +198 -0
- package/dist/api/oauth.d.ts.map +1 -0
- package/dist/api/oauth.js +471 -0
- package/dist/api/oauth.js.map +1 -0
- package/dist/api/partial-success-bulk.d.ts +422 -0
- package/dist/api/partial-success-bulk.d.ts.map +1 -0
- package/dist/api/partial-success-bulk.js +378 -0
- package/dist/api/partial-success-bulk.js.map +1 -0
- package/dist/api/people.d.ts +54 -1
- package/dist/api/people.d.ts.map +1 -1
- package/dist/api/people.js +27 -3
- package/dist/api/people.js.map +1 -1
- package/dist/api/probes.d.ts +487 -0
- package/dist/api/probes.d.ts.map +1 -0
- package/dist/api/probes.js +881 -0
- package/dist/api/probes.js.map +1 -0
- package/dist/api/raw-document.d.ts.map +1 -1
- package/dist/api/raw-document.js +2 -2
- package/dist/api/raw-document.js.map +1 -1
- package/dist/api/raw-write.d.ts.map +1 -1
- package/dist/api/raw-write.js +11 -3
- package/dist/api/raw-write.js.map +1 -1
- package/dist/api/resolution-context.d.ts +23 -11
- package/dist/api/resolution-context.d.ts.map +1 -1
- package/dist/api/resolution-context.js +53 -12
- package/dist/api/resolution-context.js.map +1 -1
- package/dist/api/resolution-pass.d.ts +30 -1
- package/dist/api/resolution-pass.d.ts.map +1 -1
- package/dist/api/resolution-pass.js +36 -1
- package/dist/api/resolution-pass.js.map +1 -1
- package/dist/api/resolve-client.d.ts +11 -0
- package/dist/api/resolve-client.d.ts.map +1 -1
- package/dist/api/resolve-client.js +1 -1
- package/dist/api/resolve-client.js.map +1 -1
- package/dist/api/response-root.d.ts +92 -46
- package/dist/api/response-root.d.ts.map +1 -1
- package/dist/api/response-root.js +93 -41
- package/dist/api/response-root.js.map +1 -1
- package/dist/api/tag-directory.d.ts +154 -0
- package/dist/api/tag-directory.d.ts.map +1 -0
- package/dist/api/tag-directory.js +325 -0
- package/dist/api/tag-directory.js.map +1 -0
- package/dist/api/time-tracking.d.ts +165 -0
- package/dist/api/time-tracking.d.ts.map +1 -0
- package/dist/api/time-tracking.js +135 -0
- package/dist/api/time-tracking.js.map +1 -0
- package/dist/api/transport.js +3 -3
- package/dist/api/transport.js.map +1 -1
- package/dist/api/usage.d.ts +190 -0
- package/dist/api/usage.d.ts.map +1 -0
- package/dist/api/usage.js +194 -0
- package/dist/api/usage.js.map +1 -0
- package/dist/api/users-fan-out-mutation.d.ts.map +1 -1
- package/dist/api/users-fan-out-mutation.js +10 -5
- package/dist/api/users-fan-out-mutation.js.map +1 -1
- package/dist/api/webhooks.d.ts +357 -0
- package/dist/api/webhooks.d.ts.map +1 -0
- package/dist/api/webhooks.js +333 -0
- package/dist/api/webhooks.js.map +1 -0
- package/dist/cli/envelope-out.d.ts +18 -1
- package/dist/cli/envelope-out.d.ts.map +1 -1
- package/dist/cli/envelope-out.js +16 -2
- package/dist/cli/envelope-out.js.map +1 -1
- package/dist/cli/program.d.ts.map +1 -1
- package/dist/cli/program.js +120 -1
- package/dist/cli/program.js.map +1 -1
- package/dist/cli/run.d.ts +12 -0
- package/dist/cli/run.d.ts.map +1 -1
- package/dist/cli/run.js +2 -0
- package/dist/cli/run.js.map +1 -1
- package/dist/commands/account/tags.d.ts +37 -0
- package/dist/commands/account/tags.d.ts.map +1 -0
- package/dist/commands/account/tags.js +84 -0
- package/dist/commands/account/tags.js.map +1 -0
- package/dist/commands/auth/login.d.ts +14 -0
- package/dist/commands/auth/login.d.ts.map +1 -0
- package/dist/commands/auth/login.js +314 -0
- package/dist/commands/auth/login.js.map +1 -0
- package/dist/commands/auth/logout.d.ts +28 -0
- package/dist/commands/auth/logout.d.ts.map +1 -0
- package/dist/commands/auth/logout.js +94 -0
- package/dist/commands/auth/logout.js.map +1 -0
- package/dist/commands/board/archive.d.ts.map +1 -1
- package/dist/commands/board/archive.js +14 -14
- package/dist/commands/board/archive.js.map +1 -1
- package/dist/commands/board/column-create.d.ts +3 -3
- package/dist/commands/board/column-create.d.ts.map +1 -1
- package/dist/commands/board/column-create.js +52 -45
- package/dist/commands/board/column-create.js.map +1 -1
- package/dist/commands/board/column-delete.d.ts.map +1 -1
- package/dist/commands/board/column-delete.js +15 -16
- package/dist/commands/board/column-delete.js.map +1 -1
- package/dist/commands/board/column-update.d.ts.map +1 -1
- package/dist/commands/board/column-update.js +23 -22
- package/dist/commands/board/column-update.js.map +1 -1
- package/dist/commands/board/create.d.ts.map +1 -1
- package/dist/commands/board/create.js +14 -17
- package/dist/commands/board/create.js.map +1 -1
- package/dist/commands/board/delete.d.ts.map +1 -1
- package/dist/commands/board/delete.js +12 -15
- package/dist/commands/board/delete.js.map +1 -1
- package/dist/commands/board/describe.d.ts.map +1 -1
- package/dist/commands/board/describe.js +30 -0
- package/dist/commands/board/describe.js.map +1 -1
- package/dist/commands/board/duplicate.d.ts.map +1 -1
- package/dist/commands/board/duplicate.js +12 -13
- package/dist/commands/board/duplicate.js.map +1 -1
- package/dist/commands/board/favorites.d.ts +33 -0
- package/dist/commands/board/favorites.d.ts.map +1 -0
- package/dist/commands/board/favorites.js +74 -0
- package/dist/commands/board/favorites.js.map +1 -0
- package/dist/commands/board/find.d.ts +1 -1
- package/dist/commands/board/group-archive.d.ts.map +1 -1
- package/dist/commands/board/group-archive.js +12 -16
- package/dist/commands/board/group-archive.js.map +1 -1
- package/dist/commands/board/group-create.d.ts.map +1 -1
- package/dist/commands/board/group-create.js +9 -19
- package/dist/commands/board/group-create.js.map +1 -1
- package/dist/commands/board/group-delete.d.ts.map +1 -1
- package/dist/commands/board/group-delete.js +12 -16
- package/dist/commands/board/group-delete.js.map +1 -1
- package/dist/commands/board/group-duplicate.d.ts.map +1 -1
- package/dist/commands/board/group-duplicate.js +12 -16
- package/dist/commands/board/group-duplicate.js.map +1 -1
- package/dist/commands/board/group-update.d.ts.map +1 -1
- package/dist/commands/board/group-update.js +12 -11
- package/dist/commands/board/group-update.js.map +1 -1
- package/dist/commands/board/list.d.ts +1 -1
- package/dist/commands/board/update.d.ts.map +1 -1
- package/dist/commands/board/update.js +16 -11
- package/dist/commands/board/update.js.map +1 -1
- package/dist/commands/cache/list.d.ts +2 -0
- package/dist/commands/cache/list.d.ts.map +1 -1
- package/dist/commands/cache/list.js +2 -2
- package/dist/commands/cache/list.js.map +1 -1
- package/dist/commands/dev/_shared.d.ts +40 -0
- package/dist/commands/dev/_shared.d.ts.map +1 -0
- package/dist/commands/dev/_shared.js +104 -0
- package/dist/commands/dev/_shared.js.map +1 -0
- package/dist/commands/dev/configure.d.ts +36 -0
- package/dist/commands/dev/configure.d.ts.map +1 -0
- package/dist/commands/dev/configure.js +145 -0
- package/dist/commands/dev/configure.js.map +1 -0
- package/dist/commands/dev/discover.d.ts +34 -0
- package/dist/commands/dev/discover.d.ts.map +1 -0
- package/dist/commands/dev/discover.js +117 -0
- package/dist/commands/dev/discover.js.map +1 -0
- package/dist/commands/dev/doctor.d.ts +39 -0
- package/dist/commands/dev/doctor.d.ts.map +1 -0
- package/dist/commands/dev/doctor.js +91 -0
- package/dist/commands/dev/doctor.js.map +1 -0
- package/dist/commands/dev/epic/items.d.ts +24 -0
- package/dist/commands/dev/epic/items.d.ts.map +1 -0
- package/dist/commands/dev/epic/items.js +103 -0
- package/dist/commands/dev/epic/items.js.map +1 -0
- package/dist/commands/dev/epic/list.d.ts +36 -0
- package/dist/commands/dev/epic/list.d.ts.map +1 -0
- package/dist/commands/dev/epic/list.js +120 -0
- package/dist/commands/dev/epic/list.js.map +1 -0
- package/dist/commands/dev/release/list.d.ts +21 -0
- package/dist/commands/dev/release/list.d.ts.map +1 -0
- package/dist/commands/dev/release/list.js +73 -0
- package/dist/commands/dev/release/list.js.map +1 -0
- package/dist/commands/dev/sprint/current.d.ts +24 -0
- package/dist/commands/dev/sprint/current.d.ts.map +1 -0
- package/dist/commands/dev/sprint/current.js +90 -0
- package/dist/commands/dev/sprint/current.js.map +1 -0
- package/dist/commands/dev/sprint/items.d.ts +34 -0
- package/dist/commands/dev/sprint/items.d.ts.map +1 -0
- package/dist/commands/dev/sprint/items.js +118 -0
- package/dist/commands/dev/sprint/items.js.map +1 -0
- package/dist/commands/dev/sprint/list.d.ts +41 -0
- package/dist/commands/dev/sprint/list.d.ts.map +1 -0
- package/dist/commands/dev/sprint/list.js +104 -0
- package/dist/commands/dev/sprint/list.js.map +1 -0
- package/dist/commands/dev/task/block.d.ts +29 -0
- package/dist/commands/dev/task/block.d.ts.map +1 -0
- package/dist/commands/dev/task/block.js +106 -0
- package/dist/commands/dev/task/block.js.map +1 -0
- package/dist/commands/dev/task/done.d.ts +30 -0
- package/dist/commands/dev/task/done.d.ts.map +1 -0
- package/dist/commands/dev/task/done.js +113 -0
- package/dist/commands/dev/task/done.js.map +1 -0
- package/dist/commands/dev/task/list.d.ts +42 -0
- package/dist/commands/dev/task/list.d.ts.map +1 -0
- package/dist/commands/dev/task/list.js +227 -0
- package/dist/commands/dev/task/list.js.map +1 -0
- package/dist/commands/dev/task/start.d.ts +29 -0
- package/dist/commands/dev/task/start.d.ts.map +1 -0
- package/dist/commands/dev/task/start.js +90 -0
- package/dist/commands/dev/task/start.js.map +1 -0
- package/dist/commands/emit.d.ts.map +1 -1
- package/dist/commands/emit.js +5 -3
- package/dist/commands/emit.js.map +1 -1
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +95 -0
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/item/archive.d.ts.map +1 -1
- package/dist/commands/item/archive.js +11 -0
- package/dist/commands/item/archive.js.map +1 -1
- package/dist/commands/item/clear.d.ts.map +1 -1
- package/dist/commands/item/clear.js +15 -0
- package/dist/commands/item/clear.js.map +1 -1
- package/dist/commands/item/create.d.ts.map +1 -1
- package/dist/commands/item/create.js +41 -8
- package/dist/commands/item/create.js.map +1 -1
- package/dist/commands/item/delete.d.ts.map +1 -1
- package/dist/commands/item/delete.js +11 -0
- package/dist/commands/item/delete.js.map +1 -1
- package/dist/commands/item/duplicate.d.ts.map +1 -1
- package/dist/commands/item/duplicate.js +12 -0
- package/dist/commands/item/duplicate.js.map +1 -1
- package/dist/commands/item/history.d.ts +60 -0
- package/dist/commands/item/history.d.ts.map +1 -0
- package/dist/commands/item/history.js +309 -0
- package/dist/commands/item/history.js.map +1 -0
- package/dist/commands/item/list.d.ts.map +1 -1
- package/dist/commands/item/list.js +16 -13
- package/dist/commands/item/list.js.map +1 -1
- package/dist/commands/item/move.d.ts.map +1 -1
- package/dist/commands/item/move.js +41 -7
- package/dist/commands/item/move.js.map +1 -1
- package/dist/commands/item/search.d.ts +99 -15
- package/dist/commands/item/search.d.ts.map +1 -1
- package/dist/commands/item/search.js +480 -36
- package/dist/commands/item/search.js.map +1 -1
- package/dist/commands/item/set.d.ts.map +1 -1
- package/dist/commands/item/set.js +52 -8
- package/dist/commands/item/set.js.map +1 -1
- package/dist/commands/item/time-track/start.d.ts +61 -0
- package/dist/commands/item/time-track/start.d.ts.map +1 -0
- package/dist/commands/item/time-track/start.js +138 -0
- package/dist/commands/item/time-track/start.js.map +1 -0
- package/dist/commands/item/time-track/stop.d.ts +32 -0
- package/dist/commands/item/time-track/stop.d.ts.map +1 -0
- package/dist/commands/item/time-track/stop.js +97 -0
- package/dist/commands/item/time-track/stop.js.map +1 -0
- package/dist/commands/item/update.d.ts +1 -0
- package/dist/commands/item/update.d.ts.map +1 -1
- package/dist/commands/item/update.js +103 -113
- package/dist/commands/item/update.js.map +1 -1
- package/dist/commands/item/upsert.d.ts.map +1 -1
- package/dist/commands/item/upsert.js +48 -1
- package/dist/commands/item/upsert.js.map +1 -1
- package/dist/commands/notification/send.d.ts +60 -0
- package/dist/commands/notification/send.d.ts.map +1 -0
- package/dist/commands/notification/send.js +147 -0
- package/dist/commands/notification/send.js.map +1 -0
- package/dist/commands/parse-argv.d.ts.map +1 -1
- package/dist/commands/parse-argv.js +14 -4
- package/dist/commands/parse-argv.js.map +1 -1
- package/dist/commands/raw/index.d.ts.map +1 -1
- package/dist/commands/raw/index.js +13 -15
- package/dist/commands/raw/index.js.map +1 -1
- package/dist/commands/run-by-id-lookup.d.ts.map +1 -1
- package/dist/commands/run-by-id-lookup.js +2 -2
- package/dist/commands/run-by-id-lookup.js.map +1 -1
- package/dist/commands/schema/index.d.ts +2 -0
- package/dist/commands/schema/index.d.ts.map +1 -1
- package/dist/commands/status.d.ts +120 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +365 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/update/body-source.d.ts.map +1 -1
- package/dist/commands/update/body-source.js +2 -2
- package/dist/commands/update/body-source.js.map +1 -1
- package/dist/commands/update/create.d.ts +2 -3
- package/dist/commands/update/create.d.ts.map +1 -1
- package/dist/commands/update/create.js +15 -3
- package/dist/commands/update/create.js.map +1 -1
- package/dist/commands/update/delete.d.ts.map +1 -1
- package/dist/commands/update/delete.js +11 -0
- package/dist/commands/update/delete.js.map +1 -1
- package/dist/commands/update/edit.d.ts.map +1 -1
- package/dist/commands/update/edit.js +11 -0
- package/dist/commands/update/edit.js.map +1 -1
- package/dist/commands/update/list.d.ts.map +1 -1
- package/dist/commands/update/list.js +15 -12
- package/dist/commands/update/list.js.map +1 -1
- package/dist/commands/update/reply.d.ts.map +1 -1
- package/dist/commands/update/reply.js +11 -0
- package/dist/commands/update/reply.js.map +1 -1
- package/dist/commands/update/toggle.d.ts.map +1 -1
- package/dist/commands/update/toggle.js +13 -0
- package/dist/commands/update/toggle.js.map +1 -1
- package/dist/commands/usage.d.ts +58 -0
- package/dist/commands/usage.d.ts.map +1 -0
- package/dist/commands/usage.js +94 -0
- package/dist/commands/usage.js.map +1 -0
- package/dist/commands/webhook/create.d.ts +74 -0
- package/dist/commands/webhook/create.d.ts.map +1 -0
- package/dist/commands/webhook/create.js +150 -0
- package/dist/commands/webhook/create.js.map +1 -0
- package/dist/commands/webhook/delete.d.ts +46 -0
- package/dist/commands/webhook/delete.d.ts.map +1 -0
- package/dist/commands/webhook/delete.js +141 -0
- package/dist/commands/webhook/delete.js.map +1 -0
- package/dist/commands/webhook/list.d.ts +23 -0
- package/dist/commands/webhook/list.d.ts.map +1 -0
- package/dist/commands/webhook/list.js +68 -0
- package/dist/commands/webhook/list.js.map +1 -0
- package/dist/commands/workspace/create.d.ts.map +1 -1
- package/dist/commands/workspace/create.js +16 -0
- package/dist/commands/workspace/create.js.map +1 -1
- package/dist/commands/workspace/delete.d.ts.map +1 -1
- package/dist/commands/workspace/delete.js +13 -13
- package/dist/commands/workspace/delete.js.map +1 -1
- package/dist/commands/workspace/list.d.ts +1 -1
- package/dist/commands/workspace/update.d.ts.map +1 -1
- package/dist/commands/workspace/update.js +15 -15
- package/dist/commands/workspace/update.js.map +1 -1
- package/dist/config/credentials.d.ts +189 -0
- package/dist/config/credentials.d.ts.map +1 -0
- package/dist/config/credentials.js +300 -0
- package/dist/config/credentials.js.map +1 -0
- package/dist/config/profiles.d.ts +125 -0
- package/dist/config/profiles.d.ts.map +1 -0
- package/dist/config/profiles.js +227 -0
- package/dist/config/profiles.js.map +1 -0
- package/dist/types/global-flags.d.ts +1 -1
- package/dist/types/global-flags.d.ts.map +1 -1
- package/dist/types/global-flags.js +28 -16
- package/dist/types/global-flags.js.map +1 -1
- package/dist/types/ids.d.ts +2 -0
- package/dist/types/ids.d.ts.map +1 -1
- package/dist/types/ids.js +5 -3
- package/dist/types/ids.js.map +1 -1
- package/dist/utils/errors.d.ts +57 -3
- package/dist/utils/errors.d.ts.map +1 -1
- package/dist/utils/errors.js +69 -2
- package/dist/utils/errors.js.map +1 -1
- package/dist/utils/fs.d.ts +35 -0
- package/dist/utils/fs.d.ts.map +1 -0
- package/dist/utils/fs.js +36 -0
- package/dist/utils/fs.js.map +1 -0
- package/dist/utils/json.d.ts +60 -0
- package/dist/utils/json.d.ts.map +1 -0
- package/dist/utils/json.js +86 -0
- package/dist/utils/json.js.map +1 -0
- package/dist/utils/output/ndjson.d.ts +65 -3
- package/dist/utils/output/ndjson.d.ts.map +1 -1
- package/dist/utils/output/ndjson.js +21 -0
- package/dist/utils/output/ndjson.js.map +1 -1
- package/dist/utils/redact.d.ts.map +1 -1
- package/dist/utils/redact.js +31 -0
- package/dist/utils/redact.js.map +1 -1
- package/package.json +2 -1
- package/dist/commands/account/client-helper.d.ts +0 -37
- package/dist/commands/account/client-helper.d.ts.map +0 -1
- package/dist/commands/account/client-helper.js +0 -55
- package/dist/commands/account/client-helper.js.map +0 -1
|
@@ -0,0 +1,919 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-item activity-log + comment-thread projection for the v0.3-M24
|
|
3
|
+
* `monday item history <iid>` verb (`cli-design.md` §13 v0.3 entry).
|
|
4
|
+
*
|
|
5
|
+
* **What `monday item history` answers:** "show me every change +
|
|
6
|
+
* comment on this item, chronologically, in one stream" — without
|
|
7
|
+
* the agent walking `activity_logs` AND `updates` separately and
|
|
8
|
+
* folding by `created_at` by hand. Two Monday surfaces feed the
|
|
9
|
+
* stream:
|
|
10
|
+
*
|
|
11
|
+
* 1. `boards(ids:) { activity_logs(item_ids:, from:, to:,
|
|
12
|
+
* page:, limit:) }` — Monday's per-board activity log,
|
|
13
|
+
* filtered to the target item via `item_ids` AND additionally
|
|
14
|
+
* filtered WALKER-SIDE (post-fetch, before projection) to
|
|
15
|
+
* `entity = 'pulse'` (the `item_ids` arg ALONE does NOT
|
|
16
|
+
* exclude board-scoped events; empirical-probe finding
|
|
17
|
+
* 2026-05-11). Page-numbered pagination (Monday's native
|
|
18
|
+
* shape; `--activity-logs-page <n>` / `--limit <n>` flags
|
|
19
|
+
* surface it).
|
|
20
|
+
* 2. `items(ids:) { updates(limit:, page:) { ... replies { ...
|
|
21
|
+
* } } }` — Monday's comment thread (top-level updates +
|
|
22
|
+
* nested replies). Projected into synthesized
|
|
23
|
+
* `update_posted` + `update_replied` event-objects so the
|
|
24
|
+
* merged stream is uniform.
|
|
25
|
+
*
|
|
26
|
+
* The merge projector orders the unified stream by `created_at`
|
|
27
|
+
* ascending; ties break by `id` for deterministic output across
|
|
28
|
+
* runs.
|
|
29
|
+
*
|
|
30
|
+
* **Decision 2 closure** (`a1f3025`, M24-prep empirical probe pass
|
|
31
|
+
* 2026-05-11; full findings at v0.3-plan §8 Decision 2 closure).
|
|
32
|
+
* Three load-bearing findings from the live probe against a real
|
|
33
|
+
* workspace + 19 captured `activity_logs` rows on a production
|
|
34
|
+
* board:
|
|
35
|
+
*
|
|
36
|
+
* - **Schema field name is `event`, NOT `kind`.** Monday's
|
|
37
|
+
* `ActivityLogType` exposes 7 fields per the introspection
|
|
38
|
+
* probe (all NON_NULL String): `account_id`, `created_at`,
|
|
39
|
+
* `data`, `entity`, `event`, `id`, `user_id`. The v0.3-plan
|
|
40
|
+
* §3 M24 description used "kind" as the synonym; the projector
|
|
41
|
+
* keeps `kind` as the CLI agent-facing discriminator (domain-
|
|
42
|
+
* neutral) but maps it 1:1 from the wire's `event` slot.
|
|
43
|
+
* - **Observed event taxonomy (production data; 19 rows on one
|
|
44
|
+
* board over 30 days; NOT exhaustive):** `create_column`
|
|
45
|
+
* (10×), `update_column_value` (4×; the dominant ITEM-SCOPED
|
|
46
|
+
* event), `create_group` (2×), `board_workspace_id_changed`
|
|
47
|
+
* (1×), `update_board_name` (1×), `update_board_nickname`
|
|
48
|
+
* (1×). The `update_column_value` payload carries `column_id`
|
|
49
|
+
* + `column_type` + `value` + `previous_value` + `textual_value`
|
|
50
|
+
* + `pulse_id` + `pulse_name`; `previous_value` is sometimes
|
|
51
|
+
* `{}` for first-set events (decoded defensively as
|
|
52
|
+
* "previously-unset" — preserved as `{}` on the projected
|
|
53
|
+
* event so agents distinguish "first set" from "no prior
|
|
54
|
+
* value tracked"). The runtime projector applies one level
|
|
55
|
+
* of nested-JSON unwrap on `value` / `previous_value` so the
|
|
56
|
+
* before/after slots carry structured payloads (e.g.
|
|
57
|
+
* `{label, index}` for status, ISO string for date) rather
|
|
58
|
+
* than opaque JSON-string scalars.
|
|
59
|
+
* - **`entity` field discriminates item-scoped from board-scoped
|
|
60
|
+
* events.** Observed values: `pulse` (4×; item-scoped) and
|
|
61
|
+
* `board` (15×; board-scoped). The walker filters
|
|
62
|
+
* `entity = 'pulse'` to drop board-level noise (column
|
|
63
|
+
* additions, group creation, board renames) that aren't part
|
|
64
|
+
* of the item's history. **The `item_ids` filter alone is
|
|
65
|
+
* INSUFFICIENT** — passing it does NOT exclude board-scoped
|
|
66
|
+
* events from the response.
|
|
67
|
+
*
|
|
68
|
+
* **Eventual-consistency caveat (carry to cli-design §13 v0.3
|
|
69
|
+
* entry).** Monday's `activity_logs` has an empirically-measured
|
|
70
|
+
* propagation lag **>30s** on freshly-edited boards. The verb's
|
|
71
|
+
* help text MUST NOT promise immediate-history for newly-modified
|
|
72
|
+
* items; agents polling `monday item history` after a write should
|
|
73
|
+
* wait at least 30s before expecting their write to surface.
|
|
74
|
+
*
|
|
75
|
+
* **Update + Reply shapes (also pinned by the probe).** `Update`
|
|
76
|
+
* carries 16 fields per introspection; the projector projects only
|
|
77
|
+
* the load-bearing ones: `id` (NON_NULL ID), `body` (NON_NULL
|
|
78
|
+
* String), `text_body` (nullable String), `created_at` (nullable
|
|
79
|
+
* `Date`), `creator_id` (nullable String), `replies` (LIST[Reply!]
|
|
80
|
+
* with the list itself nullable; items non-null). `Reply` carries
|
|
81
|
+
* its OWN `kind: String!` field — separate taxonomy from
|
|
82
|
+
* `activity_logs.event` — and the projector surfaces it under the
|
|
83
|
+
* synthesized `update_replied` event's `reply_kind` slot.
|
|
84
|
+
*
|
|
85
|
+
* **Runtime composition.** {@link fetchItemHistory} drives the
|
|
86
|
+
* two-source walker; {@link projectActivityLogRow},
|
|
87
|
+
* {@link projectUpdateRow}, and {@link projectReplyRow} are the
|
|
88
|
+
* per-row projectors (the activity-log projector reads the wire
|
|
89
|
+
* `data` JSON, dispatches on `event`, and applies a one-level
|
|
90
|
+
* nested-JSON unwrap on `update_column_value`'s `value` /
|
|
91
|
+
* `previous_value` so agents see the structured payload — e.g.
|
|
92
|
+
* `{label, index}` for status, ISO string for date — rather than
|
|
93
|
+
* an opaque JSON-string). The walker filters
|
|
94
|
+
* `entity === ITEM_SCOPED_ENTITY` walker-side (single source of
|
|
95
|
+
* truth per Decision 2 closure; projector does NOT re-filter).
|
|
96
|
+
*
|
|
97
|
+
* **Streaming reuse.** Per the v0.3-plan §3 M24 deliverable, the
|
|
98
|
+
* verb reuses `startNdjsonStream` (R52) when `--stream` is on; the
|
|
99
|
+
* trailer meta carries `{has_more, total_returned, complexity,
|
|
100
|
+
* source}` per cli-design §6.3 + the symmetric page-numbered
|
|
101
|
+
* per-source `activity_logs.last_page` + `updates.last_page` slots
|
|
102
|
+
* (both 1-indexed; `null` when the walker exhausted that source) so
|
|
103
|
+
* agents resuming a partial walk re-issue with the per-source
|
|
104
|
+
* `last_page + 1`. No cursor surface at v0.3 — both sources
|
|
105
|
+
* paginate page-numbered.
|
|
106
|
+
*/
|
|
107
|
+
import { z } from 'zod';
|
|
108
|
+
import type { MondayClient } from './client.js';
|
|
109
|
+
import type { Complexity, Warning } from '../utils/output/envelope.js';
|
|
110
|
+
import type { ItemId } from '../types/ids.js';
|
|
111
|
+
/**
|
|
112
|
+
* Wire field name on `ActivityLogType` that discriminates
|
|
113
|
+
* item-scoped (`pulse`) from board-scoped (`board`) events per the
|
|
114
|
+
* Decision 2 closure entity-filter finding. The walker filters on
|
|
115
|
+
* this constant before handing rows to the projector; the projector
|
|
116
|
+
* itself does NOT re-filter (single source of truth at the walker
|
|
117
|
+
* layer).
|
|
118
|
+
*/
|
|
119
|
+
export declare const ITEM_SCOPED_ENTITY: "pulse";
|
|
120
|
+
/**
|
|
121
|
+
* Default per-page slice for `activity_logs(limit: <n>, page: <n>)`.
|
|
122
|
+
* Monday's `activity_logs` resolver caps the per-call slice at 10000;
|
|
123
|
+
* the CLI default of 100 keeps the per-call latency below the per-
|
|
124
|
+
* page budget while letting `--limit <n>` cap the aggregate. Mirrors
|
|
125
|
+
* the v0.1 `DEFAULT_PAGE_SIZE` of 100.
|
|
126
|
+
*/
|
|
127
|
+
export declare const DEFAULT_HISTORY_PAGE_SIZE = 100;
|
|
128
|
+
/**
|
|
129
|
+
* Hard cap on `--limit` for `activity_logs` per-call slice. Monday's
|
|
130
|
+
* documented ceiling is 10000; the CLI mirrors it so the parse
|
|
131
|
+
* boundary rejects over-large requests with `usage_error` rather
|
|
132
|
+
* than letting Monday's server-side rejection surface as
|
|
133
|
+
* `validation_failed` mid-walk.
|
|
134
|
+
*/
|
|
135
|
+
export declare const HARD_CAP_HISTORY_PAGE_SIZE = 10000;
|
|
136
|
+
/**
|
|
137
|
+
* Stage-1 GraphQL document — `activity_logs` per-page slice.
|
|
138
|
+
*
|
|
139
|
+
* Per the Decision 2 closure introspection finding,
|
|
140
|
+
* `ActivityLogType` has 7 NON_NULL String fields. The projector
|
|
141
|
+
* reads all 6 non-`account_id` slots (`account_id` carries no
|
|
142
|
+
* item-history signal — every row in a single-account CLI session
|
|
143
|
+
* shares it).
|
|
144
|
+
*
|
|
145
|
+
* **`item_ids` filter is necessary BUT NOT SUFFICIENT.** Per the
|
|
146
|
+
* probe finding, board-scoped events (entity = 'board') leak
|
|
147
|
+
* through even with `item_ids` set. The WALKER
|
|
148
|
+
* ({@link fetchItemHistory}) filters `row.entity ===
|
|
149
|
+
* ITEM_SCOPED_ENTITY` immediately after the page parses and
|
|
150
|
+
* BEFORE handing rows to {@link projectActivityLogRow}. The
|
|
151
|
+
* projector itself does NOT re-filter — single source of truth at
|
|
152
|
+
* the walker layer per Decision 2 closure. Server-side filtering
|
|
153
|
+
* would require a custom GraphQL middleware Monday doesn't expose;
|
|
154
|
+
* filtering later than the walker would force row-shaping code to
|
|
155
|
+
* know about the entity discriminator, which belongs to the
|
|
156
|
+
* walker's "which rows are part of THIS item's history" question,
|
|
157
|
+
* not the projector's "how do I shape this row's payload" question.
|
|
158
|
+
*
|
|
159
|
+
* Monday's `activity_logs(item_ids:, from:, to:, page:, limit:)`
|
|
160
|
+
* signature accepts ISO-8601 timestamps for `from` / `to` per the
|
|
161
|
+
* sibling `created_at` ISO8601DateTime scalar; nullable on both
|
|
162
|
+
* sides so a partial range (`--since` only / `--until` only) maps
|
|
163
|
+
* cleanly to omitting the absent slot.
|
|
164
|
+
*/
|
|
165
|
+
export declare const ACTIVITY_LOGS_QUERY = "\n query ItemHistoryActivityLogs(\n $bid: [ID!]!,\n $iid: [ID!]!,\n $from: ISO8601DateTime,\n $to: ISO8601DateTime,\n $page: Int!,\n $limit: Int!\n ) {\n boards(ids: $bid) {\n id\n activity_logs(\n item_ids: $iid,\n from: $from,\n to: $to,\n page: $page,\n limit: $limit\n ) {\n id\n event\n entity\n user_id\n created_at\n data\n }\n }\n }\n";
|
|
166
|
+
/**
|
|
167
|
+
* Stage-2 GraphQL document — `items(ids:) { updates(...) }` for
|
|
168
|
+
* the comment-thread source.
|
|
169
|
+
*
|
|
170
|
+
* Per the Decision 2 closure introspection finding, `Update` has
|
|
171
|
+
* 16 fields; the projector selects only the load-bearing slots
|
|
172
|
+
* (id / body / text_body / created_at / creator_id / replies +
|
|
173
|
+
* the Reply sub-selection). Other fields (`likes`, `pinned_to_top`,
|
|
174
|
+
* `viewers`, `assets`) are not part of the item-history surface in
|
|
175
|
+
* v0.3; a v0.4 follow-up may extend the projection under the
|
|
176
|
+
* `update_posted` event's `after` slot if those fields become
|
|
177
|
+
* agent-useful (envelope-additive per §6.1).
|
|
178
|
+
*
|
|
179
|
+
* **Update.created_at + Reply.created_at are nullable** per the
|
|
180
|
+
* probe introspection (both fields are `SCALAR/Date`, nullable).
|
|
181
|
+
* The projector substitutes `Update.edited_at` (NON_NULL Date) as
|
|
182
|
+
* the chronological key when `created_at` is null — silent
|
|
183
|
+
* projection behaviour (NOT a warning surface; the substitution is
|
|
184
|
+
* deterministic + agents observing a null-`created_at` Update on
|
|
185
|
+
* the wire reproduce the same merge order on a re-walk). v0.3's
|
|
186
|
+
* `warnings[]` shape is `unknown_event_kind` only; adding a
|
|
187
|
+
* `synthesized_created_at` warning is a v0.4 envelope-additive
|
|
188
|
+
* extension if the substitution turns out to be agent-visible in
|
|
189
|
+
* practice.
|
|
190
|
+
*
|
|
191
|
+
* Monday's `updates(limit:, page:)` signature is page-numbered;
|
|
192
|
+
* the projector exposes `--updates-page <n>` so the two sources
|
|
193
|
+
* paginate independently (activity_logs and updates have their own
|
|
194
|
+
* page counters; merging them onto a single `--page <n>` flag would
|
|
195
|
+
* conflate two different denominators).
|
|
196
|
+
*/
|
|
197
|
+
export declare const UPDATES_QUERY = "\n query ItemHistoryUpdates(\n $iid: [ID!]!,\n $page: Int!,\n $limit: Int!\n ) {\n items(ids: $iid) {\n id\n updates(limit: $limit, page: $page) {\n id\n body\n text_body\n created_at\n edited_at\n creator_id\n replies {\n id\n kind\n body\n text_body\n created_at\n updated_at\n creator_id\n }\n }\n }\n }\n";
|
|
198
|
+
/**
|
|
199
|
+
* Wire-shape schema for an `ActivityLogType` row (Decision 2 closure
|
|
200
|
+
* introspection finding — 7 NON_NULL String fields). `.loose()` so
|
|
201
|
+
* future Monday surface extensions don't break the parse — the
|
|
202
|
+
* projector reads only the fields it knows about and forward-compat
|
|
203
|
+
* fields pass through to no consumer.
|
|
204
|
+
*/
|
|
205
|
+
export declare const rawActivityLogRowSchema: z.ZodObject<{
|
|
206
|
+
id: z.ZodString;
|
|
207
|
+
event: z.ZodString;
|
|
208
|
+
entity: z.ZodString;
|
|
209
|
+
user_id: z.ZodString;
|
|
210
|
+
created_at: z.ZodString;
|
|
211
|
+
data: z.ZodString;
|
|
212
|
+
}, z.core.$loose>;
|
|
213
|
+
export type RawActivityLogRow = z.infer<typeof rawActivityLogRowSchema>;
|
|
214
|
+
/**
|
|
215
|
+
* Wire-shape schema for one `Reply` row inside `Update.replies`.
|
|
216
|
+
* Per the Decision 2 closure introspection finding, `Reply.id` +
|
|
217
|
+
* `Reply.body` + `Reply.kind` are NON_NULL; `Reply.created_at` is
|
|
218
|
+
* nullable Date; `Reply.creator_id` is nullable String.
|
|
219
|
+
*
|
|
220
|
+
* **`Reply.kind` is a separate taxonomy from
|
|
221
|
+
* `activity_logs.event`.** Reply's kind discriminates comment-thread
|
|
222
|
+
* reply types (e.g., a regular reply vs a system-generated reply);
|
|
223
|
+
* activity_logs's event discriminates board-level change types. The
|
|
224
|
+
* projector surfaces `Reply.kind` under the synthesized
|
|
225
|
+
* `update_replied` event's `reply_kind` slot so agents can
|
|
226
|
+
* introspect it without confusion.
|
|
227
|
+
*/
|
|
228
|
+
export declare const rawReplyRowSchema: z.ZodObject<{
|
|
229
|
+
id: z.ZodString;
|
|
230
|
+
body: z.ZodString;
|
|
231
|
+
kind: z.ZodString;
|
|
232
|
+
text_body: z.ZodNullable<z.ZodString>;
|
|
233
|
+
created_at: z.ZodNullable<z.ZodString>;
|
|
234
|
+
updated_at: z.ZodNullable<z.ZodString>;
|
|
235
|
+
creator_id: z.ZodNullable<z.ZodString>;
|
|
236
|
+
}, z.core.$loose>;
|
|
237
|
+
export type RawReplyRow = z.infer<typeof rawReplyRowSchema>;
|
|
238
|
+
/**
|
|
239
|
+
* Wire-shape schema for one `Update` row. `created_at` is nullable
|
|
240
|
+
* per the probe introspection (Date scalar, optional); the
|
|
241
|
+
* projector substitutes `edited_at` (NON_NULL Date) when
|
|
242
|
+
* `created_at` is absent.
|
|
243
|
+
*/
|
|
244
|
+
export declare const rawUpdateRowSchema: z.ZodObject<{
|
|
245
|
+
id: z.ZodString;
|
|
246
|
+
body: z.ZodString;
|
|
247
|
+
text_body: z.ZodNullable<z.ZodString>;
|
|
248
|
+
created_at: z.ZodNullable<z.ZodString>;
|
|
249
|
+
edited_at: z.ZodString;
|
|
250
|
+
creator_id: z.ZodNullable<z.ZodString>;
|
|
251
|
+
replies: z.ZodNullable<z.ZodArray<z.ZodObject<{
|
|
252
|
+
id: z.ZodString;
|
|
253
|
+
body: z.ZodString;
|
|
254
|
+
kind: z.ZodString;
|
|
255
|
+
text_body: z.ZodNullable<z.ZodString>;
|
|
256
|
+
created_at: z.ZodNullable<z.ZodString>;
|
|
257
|
+
updated_at: z.ZodNullable<z.ZodString>;
|
|
258
|
+
creator_id: z.ZodNullable<z.ZodString>;
|
|
259
|
+
}, z.core.$loose>>>;
|
|
260
|
+
}, z.core.$loose>;
|
|
261
|
+
export type RawUpdateRow = z.infer<typeof rawUpdateRowSchema>;
|
|
262
|
+
/**
|
|
263
|
+
* **`update_column_value`** — the dominant ITEM-SCOPED activity-log
|
|
264
|
+
* event per the Decision 2 closure observed-events list (4× of 19
|
|
265
|
+
* rows; the only item-scoped kind in the sample). Carries the
|
|
266
|
+
* column-edit before / after payload.
|
|
267
|
+
*
|
|
268
|
+
* Schema slots:
|
|
269
|
+
* - `column_id` + `column_type` from the wire `data` payload
|
|
270
|
+
* (always present per the probe).
|
|
271
|
+
* - `before` + `after` as `z.unknown()` slots carrying the
|
|
272
|
+
* parsed `previous_value` / `value` JSON. The runtime
|
|
273
|
+
* projector applies one level of nested-JSON unwrap so
|
|
274
|
+
* agents see structured payloads (e.g. `{label, index}` for
|
|
275
|
+
* status, ISO string for date) rather than opaque JSON-
|
|
276
|
+
* string scalars. `z.unknown()` keeps the schema permissive
|
|
277
|
+
* so future Monday column types don't break the parse —
|
|
278
|
+
* agents introspect via `column_type` and the runtime
|
|
279
|
+
* payload.
|
|
280
|
+
* - `textual_value` — Monday's human-readable rendering of the
|
|
281
|
+
* new value (always present per the probe; nullable for
|
|
282
|
+
* defensive forward-compat with future column types Monday
|
|
283
|
+
* may not provide a textual rendering for).
|
|
284
|
+
* - `pulse_id` + `pulse_name` — item identity for cross-board
|
|
285
|
+
* consumers; nullable for subitem variants where the parent
|
|
286
|
+
* identification carries the load. `pulse_id` ships as an
|
|
287
|
+
* unquoted JSON number on the wire (probe-confirmed); the
|
|
288
|
+
* runtime projector stringifies it via
|
|
289
|
+
* `readNullableIdField` (Codex impl round-2 P2-1).
|
|
290
|
+
*/
|
|
291
|
+
export declare const updateColumnValueEventSchema: z.ZodObject<{
|
|
292
|
+
kind: z.ZodLiteral<"update_column_value">;
|
|
293
|
+
column_id: z.ZodString;
|
|
294
|
+
column_type: z.ZodString;
|
|
295
|
+
before: z.ZodUnknown;
|
|
296
|
+
after: z.ZodUnknown;
|
|
297
|
+
textual_value: z.ZodNullable<z.ZodString>;
|
|
298
|
+
pulse_id: z.ZodNullable<z.ZodString>;
|
|
299
|
+
pulse_name: z.ZodNullable<z.ZodString>;
|
|
300
|
+
id: z.ZodString;
|
|
301
|
+
created_at: z.ZodString;
|
|
302
|
+
actor_id: z.ZodNullable<z.ZodString>;
|
|
303
|
+
}, z.core.$strict>;
|
|
304
|
+
export declare const createColumnEventSchema: z.ZodObject<{
|
|
305
|
+
id: z.ZodString;
|
|
306
|
+
created_at: z.ZodString;
|
|
307
|
+
actor_id: z.ZodNullable<z.ZodString>;
|
|
308
|
+
kind: z.ZodLiteral<"create_column">;
|
|
309
|
+
before: z.ZodUnknown;
|
|
310
|
+
after: z.ZodUnknown;
|
|
311
|
+
}, z.core.$strip>;
|
|
312
|
+
export declare const createGroupEventSchema: z.ZodObject<{
|
|
313
|
+
id: z.ZodString;
|
|
314
|
+
created_at: z.ZodString;
|
|
315
|
+
actor_id: z.ZodNullable<z.ZodString>;
|
|
316
|
+
kind: z.ZodLiteral<"create_group">;
|
|
317
|
+
before: z.ZodUnknown;
|
|
318
|
+
after: z.ZodUnknown;
|
|
319
|
+
}, z.core.$strip>;
|
|
320
|
+
export declare const updateBoardNameEventSchema: z.ZodObject<{
|
|
321
|
+
id: z.ZodString;
|
|
322
|
+
created_at: z.ZodString;
|
|
323
|
+
actor_id: z.ZodNullable<z.ZodString>;
|
|
324
|
+
kind: z.ZodLiteral<"update_board_name">;
|
|
325
|
+
before: z.ZodUnknown;
|
|
326
|
+
after: z.ZodUnknown;
|
|
327
|
+
}, z.core.$strip>;
|
|
328
|
+
export declare const updateBoardNicknameEventSchema: z.ZodObject<{
|
|
329
|
+
id: z.ZodString;
|
|
330
|
+
created_at: z.ZodString;
|
|
331
|
+
actor_id: z.ZodNullable<z.ZodString>;
|
|
332
|
+
kind: z.ZodLiteral<"update_board_nickname">;
|
|
333
|
+
before: z.ZodUnknown;
|
|
334
|
+
after: z.ZodUnknown;
|
|
335
|
+
}, z.core.$strip>;
|
|
336
|
+
export declare const boardWorkspaceIdChangedEventSchema: z.ZodObject<{
|
|
337
|
+
id: z.ZodString;
|
|
338
|
+
created_at: z.ZodString;
|
|
339
|
+
actor_id: z.ZodNullable<z.ZodString>;
|
|
340
|
+
kind: z.ZodLiteral<"board_workspace_id_changed">;
|
|
341
|
+
before: z.ZodUnknown;
|
|
342
|
+
after: z.ZodUnknown;
|
|
343
|
+
}, z.core.$strip>;
|
|
344
|
+
/**
|
|
345
|
+
* **`update_posted`** — synthesized event for a top-level comment
|
|
346
|
+
* on the item. The projector maps `Update` rows from the
|
|
347
|
+
* comment-thread source into this shape; activity_logs does NOT
|
|
348
|
+
* surface comments as its own events, so the cross-source merge
|
|
349
|
+
* is what unifies them.
|
|
350
|
+
*
|
|
351
|
+
* - `before: null` — comments are append-only events (no prior
|
|
352
|
+
* state).
|
|
353
|
+
* - `after.body` — `Update.body` (NON_NULL String per the probe).
|
|
354
|
+
* - `after.text_body` — `Update.text_body` (nullable; Monday's
|
|
355
|
+
* plain-text rendering of the rich-text body).
|
|
356
|
+
* - `after.reply_count` — count of `Update.replies` after the
|
|
357
|
+
* wire-side null-coalesce (Monday returns `null` for "no
|
|
358
|
+
* replies known"; the projector folds to `0` for agent
|
|
359
|
+
* ergonomics — see `mergeByCreatedAt` semantics).
|
|
360
|
+
*/
|
|
361
|
+
export declare const updatePostedEventSchema: z.ZodObject<{
|
|
362
|
+
kind: z.ZodLiteral<"update_posted">;
|
|
363
|
+
before: z.ZodNull;
|
|
364
|
+
after: z.ZodObject<{
|
|
365
|
+
body: z.ZodString;
|
|
366
|
+
text_body: z.ZodNullable<z.ZodString>;
|
|
367
|
+
reply_count: z.ZodNumber;
|
|
368
|
+
}, z.core.$strict>;
|
|
369
|
+
id: z.ZodString;
|
|
370
|
+
created_at: z.ZodString;
|
|
371
|
+
actor_id: z.ZodNullable<z.ZodString>;
|
|
372
|
+
}, z.core.$strict>;
|
|
373
|
+
/**
|
|
374
|
+
* **`update_replied`** — synthesized event for one reply within a
|
|
375
|
+
* comment thread. The projector emits ONE event per `Reply` row;
|
|
376
|
+
* the parent `Update.id` lands on `parent_update_id` so agents can
|
|
377
|
+
* reconstruct thread context without a second round-trip.
|
|
378
|
+
*
|
|
379
|
+
* `reply_kind` carries `Reply.kind` (NON_NULL String per the
|
|
380
|
+
* probe — a SEPARATE taxonomy from `activity_logs.event`). Pre-
|
|
381
|
+
* flight pins this as `z.string()` (open enum) per the same
|
|
382
|
+
* forward-compat policy as M23 favorites' `object.type` field —
|
|
383
|
+
* Monday may extend Reply.kind with new variants without breaking
|
|
384
|
+
* the parse.
|
|
385
|
+
*/
|
|
386
|
+
export declare const updateRepliedEventSchema: z.ZodObject<{
|
|
387
|
+
kind: z.ZodLiteral<"update_replied">;
|
|
388
|
+
parent_update_id: z.ZodString;
|
|
389
|
+
reply_kind: z.ZodString;
|
|
390
|
+
before: z.ZodNull;
|
|
391
|
+
after: z.ZodObject<{
|
|
392
|
+
body: z.ZodString;
|
|
393
|
+
text_body: z.ZodNullable<z.ZodString>;
|
|
394
|
+
}, z.core.$strict>;
|
|
395
|
+
id: z.ZodString;
|
|
396
|
+
created_at: z.ZodString;
|
|
397
|
+
actor_id: z.ZodNullable<z.ZodString>;
|
|
398
|
+
}, z.core.$strict>;
|
|
399
|
+
/**
|
|
400
|
+
* **`unknown`** — fallback variant for an `activity_logs.event`
|
|
401
|
+
* value the projector doesn't recognise. Carries the raw wire
|
|
402
|
+
* `event` slot (so agents see the unrecognised string) + the raw
|
|
403
|
+
* `entity` slot (so the walker filter discrepancy is visible) +
|
|
404
|
+
* the raw parsed `data` JSON under `after` (so a future-extension
|
|
405
|
+
* consumer can reproject without a second wire call). `before` is
|
|
406
|
+
* `null` for uniform shape with the synthesized comment-event
|
|
407
|
+
* variants (`update_posted` / `update_replied`) which also pin
|
|
408
|
+
* `before: null` for their append-only-events semantics — the
|
|
409
|
+
* `unknown` variant similarly has no meaningful "before" since the
|
|
410
|
+
* projector by definition doesn't know how to extract the prior
|
|
411
|
+
* state from the wire payload (the typed variants are the place
|
|
412
|
+
* that knowledge lives). Agents wanting to introspect the raw
|
|
413
|
+
* payload read `after` (the full parsed `data` JSON) alongside
|
|
414
|
+
* `event` + `entity` for routing.
|
|
415
|
+
*
|
|
416
|
+
* Surfaces alongside a `warnings[]` entry of code
|
|
417
|
+
* `unknown_event_kind` (per {@link buildUnknownEventKindWarning})
|
|
418
|
+
* so agents introspect the projector's coverage gap without parsing
|
|
419
|
+
* the events list for `kind === 'unknown'` themselves.
|
|
420
|
+
*
|
|
421
|
+
* Per Decision 2 closure: this variant is the registry-stable
|
|
422
|
+
* surface for forward-compat with Monday's expanding event
|
|
423
|
+
* taxonomy. The 29-error-code registry stays AT 29 — the unknown-
|
|
424
|
+
* event-kind surface is a `warnings[]` shape, NOT a new
|
|
425
|
+
* `error.code` entry.
|
|
426
|
+
*/
|
|
427
|
+
export declare const unknownEventSchema: z.ZodObject<{
|
|
428
|
+
kind: z.ZodLiteral<"unknown">;
|
|
429
|
+
event: z.ZodString;
|
|
430
|
+
entity: z.ZodString;
|
|
431
|
+
before: z.ZodNull;
|
|
432
|
+
after: z.ZodUnknown;
|
|
433
|
+
id: z.ZodString;
|
|
434
|
+
created_at: z.ZodString;
|
|
435
|
+
actor_id: z.ZodNullable<z.ZodString>;
|
|
436
|
+
}, z.core.$strict>;
|
|
437
|
+
/**
|
|
438
|
+
* The projected per-event discriminated union — the contract surface
|
|
439
|
+
* for `monday item history`. Agents read `kind` to route per-variant
|
|
440
|
+
* handling. Adding a new variant is non-breaking (envelope-additive
|
|
441
|
+
* per §6.1); renaming or removing one is the SemVer-major boundary.
|
|
442
|
+
*
|
|
443
|
+
* **Variant count: 9** (1 item-scoped activity-log + 5 board-scoped
|
|
444
|
+
* activity-log variants kept for parser-roundtrip + 2 synthesized
|
|
445
|
+
* comment-thread variants + 1 unknown fallback). The Decision 2
|
|
446
|
+
* closure observed-events list capped the activity-log variants at
|
|
447
|
+
* 6; the synthesized + fallback variants are the projector's own
|
|
448
|
+
* contract.
|
|
449
|
+
*
|
|
450
|
+
* **Decision 2 ratification.** The discriminator field name `kind`
|
|
451
|
+
* maps 1:1 from Monday's wire `ActivityLogType.event` field
|
|
452
|
+
* (schema field-name drift); the variants enumerate the observed
|
|
453
|
+
* production taxonomy + the `unknown` fallback for forward-compat.
|
|
454
|
+
*/
|
|
455
|
+
export declare const historyEventSchema: z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
456
|
+
kind: z.ZodLiteral<"update_column_value">;
|
|
457
|
+
column_id: z.ZodString;
|
|
458
|
+
column_type: z.ZodString;
|
|
459
|
+
before: z.ZodUnknown;
|
|
460
|
+
after: z.ZodUnknown;
|
|
461
|
+
textual_value: z.ZodNullable<z.ZodString>;
|
|
462
|
+
pulse_id: z.ZodNullable<z.ZodString>;
|
|
463
|
+
pulse_name: z.ZodNullable<z.ZodString>;
|
|
464
|
+
id: z.ZodString;
|
|
465
|
+
created_at: z.ZodString;
|
|
466
|
+
actor_id: z.ZodNullable<z.ZodString>;
|
|
467
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
468
|
+
id: z.ZodString;
|
|
469
|
+
created_at: z.ZodString;
|
|
470
|
+
actor_id: z.ZodNullable<z.ZodString>;
|
|
471
|
+
kind: z.ZodLiteral<"create_column">;
|
|
472
|
+
before: z.ZodUnknown;
|
|
473
|
+
after: z.ZodUnknown;
|
|
474
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
475
|
+
id: z.ZodString;
|
|
476
|
+
created_at: z.ZodString;
|
|
477
|
+
actor_id: z.ZodNullable<z.ZodString>;
|
|
478
|
+
kind: z.ZodLiteral<"create_group">;
|
|
479
|
+
before: z.ZodUnknown;
|
|
480
|
+
after: z.ZodUnknown;
|
|
481
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
482
|
+
id: z.ZodString;
|
|
483
|
+
created_at: z.ZodString;
|
|
484
|
+
actor_id: z.ZodNullable<z.ZodString>;
|
|
485
|
+
kind: z.ZodLiteral<"update_board_name">;
|
|
486
|
+
before: z.ZodUnknown;
|
|
487
|
+
after: z.ZodUnknown;
|
|
488
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
489
|
+
id: z.ZodString;
|
|
490
|
+
created_at: z.ZodString;
|
|
491
|
+
actor_id: z.ZodNullable<z.ZodString>;
|
|
492
|
+
kind: z.ZodLiteral<"update_board_nickname">;
|
|
493
|
+
before: z.ZodUnknown;
|
|
494
|
+
after: z.ZodUnknown;
|
|
495
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
496
|
+
id: z.ZodString;
|
|
497
|
+
created_at: z.ZodString;
|
|
498
|
+
actor_id: z.ZodNullable<z.ZodString>;
|
|
499
|
+
kind: z.ZodLiteral<"board_workspace_id_changed">;
|
|
500
|
+
before: z.ZodUnknown;
|
|
501
|
+
after: z.ZodUnknown;
|
|
502
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
503
|
+
kind: z.ZodLiteral<"update_posted">;
|
|
504
|
+
before: z.ZodNull;
|
|
505
|
+
after: z.ZodObject<{
|
|
506
|
+
body: z.ZodString;
|
|
507
|
+
text_body: z.ZodNullable<z.ZodString>;
|
|
508
|
+
reply_count: z.ZodNumber;
|
|
509
|
+
}, z.core.$strict>;
|
|
510
|
+
id: z.ZodString;
|
|
511
|
+
created_at: z.ZodString;
|
|
512
|
+
actor_id: z.ZodNullable<z.ZodString>;
|
|
513
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
514
|
+
kind: z.ZodLiteral<"update_replied">;
|
|
515
|
+
parent_update_id: z.ZodString;
|
|
516
|
+
reply_kind: z.ZodString;
|
|
517
|
+
before: z.ZodNull;
|
|
518
|
+
after: z.ZodObject<{
|
|
519
|
+
body: z.ZodString;
|
|
520
|
+
text_body: z.ZodNullable<z.ZodString>;
|
|
521
|
+
}, z.core.$strict>;
|
|
522
|
+
id: z.ZodString;
|
|
523
|
+
created_at: z.ZodString;
|
|
524
|
+
actor_id: z.ZodNullable<z.ZodString>;
|
|
525
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
526
|
+
kind: z.ZodLiteral<"unknown">;
|
|
527
|
+
event: z.ZodString;
|
|
528
|
+
entity: z.ZodString;
|
|
529
|
+
before: z.ZodNull;
|
|
530
|
+
after: z.ZodUnknown;
|
|
531
|
+
id: z.ZodString;
|
|
532
|
+
created_at: z.ZodString;
|
|
533
|
+
actor_id: z.ZodNullable<z.ZodString>;
|
|
534
|
+
}, z.core.$strict>], "kind">;
|
|
535
|
+
export type HistoryEvent = z.infer<typeof historyEventSchema>;
|
|
536
|
+
/**
|
|
537
|
+
* The top-level command output schema — `data` is the chronologically-
|
|
538
|
+
* merged event array. Mirrors M23's `crossBoardSearchOutputSchema`
|
|
539
|
+
* (a flat array of typed rows; no top-level metadata in `data`).
|
|
540
|
+
*/
|
|
541
|
+
export declare const historyEventOutputSchema: z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
|
|
542
|
+
kind: z.ZodLiteral<"update_column_value">;
|
|
543
|
+
column_id: z.ZodString;
|
|
544
|
+
column_type: z.ZodString;
|
|
545
|
+
before: z.ZodUnknown;
|
|
546
|
+
after: z.ZodUnknown;
|
|
547
|
+
textual_value: z.ZodNullable<z.ZodString>;
|
|
548
|
+
pulse_id: z.ZodNullable<z.ZodString>;
|
|
549
|
+
pulse_name: z.ZodNullable<z.ZodString>;
|
|
550
|
+
id: z.ZodString;
|
|
551
|
+
created_at: z.ZodString;
|
|
552
|
+
actor_id: z.ZodNullable<z.ZodString>;
|
|
553
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
554
|
+
id: z.ZodString;
|
|
555
|
+
created_at: z.ZodString;
|
|
556
|
+
actor_id: z.ZodNullable<z.ZodString>;
|
|
557
|
+
kind: z.ZodLiteral<"create_column">;
|
|
558
|
+
before: z.ZodUnknown;
|
|
559
|
+
after: z.ZodUnknown;
|
|
560
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
561
|
+
id: z.ZodString;
|
|
562
|
+
created_at: z.ZodString;
|
|
563
|
+
actor_id: z.ZodNullable<z.ZodString>;
|
|
564
|
+
kind: z.ZodLiteral<"create_group">;
|
|
565
|
+
before: z.ZodUnknown;
|
|
566
|
+
after: z.ZodUnknown;
|
|
567
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
568
|
+
id: z.ZodString;
|
|
569
|
+
created_at: z.ZodString;
|
|
570
|
+
actor_id: z.ZodNullable<z.ZodString>;
|
|
571
|
+
kind: z.ZodLiteral<"update_board_name">;
|
|
572
|
+
before: z.ZodUnknown;
|
|
573
|
+
after: z.ZodUnknown;
|
|
574
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
575
|
+
id: z.ZodString;
|
|
576
|
+
created_at: z.ZodString;
|
|
577
|
+
actor_id: z.ZodNullable<z.ZodString>;
|
|
578
|
+
kind: z.ZodLiteral<"update_board_nickname">;
|
|
579
|
+
before: z.ZodUnknown;
|
|
580
|
+
after: z.ZodUnknown;
|
|
581
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
582
|
+
id: z.ZodString;
|
|
583
|
+
created_at: z.ZodString;
|
|
584
|
+
actor_id: z.ZodNullable<z.ZodString>;
|
|
585
|
+
kind: z.ZodLiteral<"board_workspace_id_changed">;
|
|
586
|
+
before: z.ZodUnknown;
|
|
587
|
+
after: z.ZodUnknown;
|
|
588
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
589
|
+
kind: z.ZodLiteral<"update_posted">;
|
|
590
|
+
before: z.ZodNull;
|
|
591
|
+
after: z.ZodObject<{
|
|
592
|
+
body: z.ZodString;
|
|
593
|
+
text_body: z.ZodNullable<z.ZodString>;
|
|
594
|
+
reply_count: z.ZodNumber;
|
|
595
|
+
}, z.core.$strict>;
|
|
596
|
+
id: z.ZodString;
|
|
597
|
+
created_at: z.ZodString;
|
|
598
|
+
actor_id: z.ZodNullable<z.ZodString>;
|
|
599
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
600
|
+
kind: z.ZodLiteral<"update_replied">;
|
|
601
|
+
parent_update_id: z.ZodString;
|
|
602
|
+
reply_kind: z.ZodString;
|
|
603
|
+
before: z.ZodNull;
|
|
604
|
+
after: z.ZodObject<{
|
|
605
|
+
body: z.ZodString;
|
|
606
|
+
text_body: z.ZodNullable<z.ZodString>;
|
|
607
|
+
}, z.core.$strict>;
|
|
608
|
+
id: z.ZodString;
|
|
609
|
+
created_at: z.ZodString;
|
|
610
|
+
actor_id: z.ZodNullable<z.ZodString>;
|
|
611
|
+
}, z.core.$strict>, z.ZodObject<{
|
|
612
|
+
kind: z.ZodLiteral<"unknown">;
|
|
613
|
+
event: z.ZodString;
|
|
614
|
+
entity: z.ZodString;
|
|
615
|
+
before: z.ZodNull;
|
|
616
|
+
after: z.ZodUnknown;
|
|
617
|
+
id: z.ZodString;
|
|
618
|
+
created_at: z.ZodString;
|
|
619
|
+
actor_id: z.ZodNullable<z.ZodString>;
|
|
620
|
+
}, z.core.$strict>], "kind">>;
|
|
621
|
+
export type HistoryEventOutput = z.infer<typeof historyEventOutputSchema>;
|
|
622
|
+
/**
|
|
623
|
+
* Warning surfaced when the projector encountered an
|
|
624
|
+
* `activity_logs.event` value not in the typed-variant set
|
|
625
|
+
* (`event` mapped to the `kind: 'unknown'` fallback). `details`
|
|
626
|
+
* carries the raw event + entity values so agents can extend the
|
|
627
|
+
* projector or file a follow-up.
|
|
628
|
+
*
|
|
629
|
+
* **NOT an `error.code` registry entry** per Decision 2 closure —
|
|
630
|
+
* §6.1 `warnings[]` shape only. The 29-stable-error-code registry
|
|
631
|
+
* stays at 29.
|
|
632
|
+
*
|
|
633
|
+
* **Aggregation semantics.** The projector emits ONE warning per
|
|
634
|
+
* unique `event` value observed in the merged stream (not per
|
|
635
|
+
* occurrence) — repeated `unknown` events of the same wire kind
|
|
636
|
+
* surface a single warning carrying `details.occurrence_count` so
|
|
637
|
+
* the warnings array stays bounded even on degenerate inputs.
|
|
638
|
+
*/
|
|
639
|
+
export interface UnknownEventKindWarning {
|
|
640
|
+
readonly code: 'unknown_event_kind';
|
|
641
|
+
readonly message: string;
|
|
642
|
+
readonly details: {
|
|
643
|
+
readonly event: string;
|
|
644
|
+
readonly entity: string;
|
|
645
|
+
readonly occurrence_count: number;
|
|
646
|
+
readonly hint: string;
|
|
647
|
+
};
|
|
648
|
+
}
|
|
649
|
+
export declare const unknownEventKindWarningSchema: z.ZodObject<{
|
|
650
|
+
code: z.ZodLiteral<"unknown_event_kind">;
|
|
651
|
+
message: z.ZodString;
|
|
652
|
+
details: z.ZodObject<{
|
|
653
|
+
event: z.ZodString;
|
|
654
|
+
entity: z.ZodString;
|
|
655
|
+
occurrence_count: z.ZodNumber;
|
|
656
|
+
hint: z.ZodString;
|
|
657
|
+
}, z.core.$strict>;
|
|
658
|
+
}, z.core.$strict>;
|
|
659
|
+
/**
|
|
660
|
+
* Builds an {@link UnknownEventKindWarning} from one observed
|
|
661
|
+
* unknown event + its occurrence count across the merged stream.
|
|
662
|
+
* **Real implementation** at pre-flight (pure helper; the warning
|
|
663
|
+
* shape is the contract surface).
|
|
664
|
+
*
|
|
665
|
+
* The hint forward-references the projector's extensibility point
|
|
666
|
+
* so agents have a concrete next step (vs a generic "unknown"
|
|
667
|
+
* message that requires reading the source).
|
|
668
|
+
*/
|
|
669
|
+
export declare const buildUnknownEventKindWarning: (event: string, entity: string, occurrenceCount: number) => UnknownEventKindWarning;
|
|
670
|
+
/**
|
|
671
|
+
* Merges two pre-projected event streams (activity-log + comment-
|
|
672
|
+
* thread) into a single chronologically-ordered stream. **Real
|
|
673
|
+
* implementation** at pre-flight (pure helper).
|
|
674
|
+
*
|
|
675
|
+
* Ordering rules:
|
|
676
|
+
* - Primary: `created_at` ascending (oldest first; matches
|
|
677
|
+
* Monday's UI activity log + comment thread chronological
|
|
678
|
+
* reading order).
|
|
679
|
+
* - Tie-break: `id` (lexicographic) — deterministic across runs
|
|
680
|
+
* even when two events share the exact same `created_at`
|
|
681
|
+
* timestamp (Monday's resolver issues IDs in monotonic order
|
|
682
|
+
* per source, so the tie-break preserves intra-source order).
|
|
683
|
+
*
|
|
684
|
+
* **Why merge here, not at the walker.** The two source walkers
|
|
685
|
+
* paginate independently (activity_logs page-numbered;
|
|
686
|
+
* updates page-numbered with a different denominator); merging at
|
|
687
|
+
* the walker would force coupled pagination on the streaming
|
|
688
|
+
* path. The projector merges the FULLY-DRAINED-PER-WALL-CLOCK-CAP
|
|
689
|
+
* lists — `fetchItemHistory` walks both sources to the `--since`
|
|
690
|
+
* / `--until` cap independently, then this helper merges.
|
|
691
|
+
*
|
|
692
|
+
* **Streaming semantics.** When `--stream` is on, the merge is
|
|
693
|
+
* NOT incremental — the entire `--since`-bounded slice must be
|
|
694
|
+
* resident to order it. The NDJSON stream emits the merged array
|
|
695
|
+
* per-item via the walker's `onItem` hook AFTER the merge
|
|
696
|
+
* completes; the trailer carries the per-source pagination state
|
|
697
|
+
* for resumption.
|
|
698
|
+
*/
|
|
699
|
+
export declare const mergeByCreatedAt: (activityEvents: readonly HistoryEvent[], commentEvents: readonly HistoryEvent[]) => readonly HistoryEvent[];
|
|
700
|
+
/**
|
|
701
|
+
* Inputs to {@link projectActivityLogRow}.
|
|
702
|
+
*/
|
|
703
|
+
export interface ProjectActivityLogRowInputs {
|
|
704
|
+
readonly row: RawActivityLogRow;
|
|
705
|
+
}
|
|
706
|
+
/**
|
|
707
|
+
* Projects one wire `ActivityLogType` row into a typed
|
|
708
|
+
* {@link HistoryEvent}. Parses the wire `data` JSON, dispatches
|
|
709
|
+
* on `row.event`, and emits the matching typed variant. Unknown
|
|
710
|
+
* event kinds fall back to the `unknown` variant carrying the raw
|
|
711
|
+
* parsed `data` under `after`.
|
|
712
|
+
*
|
|
713
|
+
* The projector is the SINGLE per-row dispatch point; the walker
|
|
714
|
+
* delegates to it after the `entity === 'pulse'` filter (single
|
|
715
|
+
* source of truth at the walker layer per Decision 2 closure;
|
|
716
|
+
* projector does NOT re-filter).
|
|
717
|
+
*
|
|
718
|
+
* Per-`column_type` typed before/after for `update_column_value`:
|
|
719
|
+
* `value` and `previous_value` are passed through with one level
|
|
720
|
+
* of nested-JSON unwrap (Monday encodes nested values as JSON
|
|
721
|
+
* strings inside the outer `data` payload); each column type's
|
|
722
|
+
* concrete payload shape (e.g. status `{label, index}`, date ISO
|
|
723
|
+
* string, text raw string) flows through unchanged. Per Decision
|
|
724
|
+
* 2 closure: `previous_value: {}` is preserved as "previously-
|
|
725
|
+
* unset" rather than collapsed to `null` — agents distinguish
|
|
726
|
+
* the empty-object shape.
|
|
727
|
+
*/
|
|
728
|
+
export declare const projectActivityLogRow: (inputs: ProjectActivityLogRowInputs) => HistoryEvent;
|
|
729
|
+
/**
|
|
730
|
+
* Inputs to {@link projectUpdateRow}.
|
|
731
|
+
*/
|
|
732
|
+
export interface ProjectUpdateRowInputs {
|
|
733
|
+
readonly row: RawUpdateRow;
|
|
734
|
+
}
|
|
735
|
+
/**
|
|
736
|
+
* Projects one wire `Update` row into a synthesized
|
|
737
|
+
* {@link HistoryEvent} of kind `update_posted` plus one
|
|
738
|
+
* `update_replied` event per `row.replies` entry (via
|
|
739
|
+
* {@link projectReplyRow}). Returns a flat array suitable for
|
|
740
|
+
* the merger.
|
|
741
|
+
*
|
|
742
|
+
* `Update.created_at` is nullable per Decision 2 closure probe
|
|
743
|
+
* findings; the projector substitutes `Update.edited_at`
|
|
744
|
+
* (NON_NULL) as the chronological key — silent projection
|
|
745
|
+
* behaviour, deterministic across re-walks.
|
|
746
|
+
*
|
|
747
|
+
* Replies are flat-mapped here (not at the walker) so the
|
|
748
|
+
* walker stays surface-symmetric with the activity_logs source
|
|
749
|
+
* (both project per-row → events). The merge projector orders
|
|
750
|
+
* the combined stream.
|
|
751
|
+
*/
|
|
752
|
+
export declare const projectUpdateRow: (inputs: ProjectUpdateRowInputs) => readonly HistoryEvent[];
|
|
753
|
+
/**
|
|
754
|
+
* Inputs to {@link projectReplyRow}. The `parentUpdateId` slot
|
|
755
|
+
* wires the synthesized event's `parent_update_id` so agents
|
|
756
|
+
* reconstruct thread context; the `parentCreatedAt` slot supplies
|
|
757
|
+
* the timestamp fallback when both reply timestamps are null
|
|
758
|
+
* (defensive against Monday's nullable Reply.created_at +
|
|
759
|
+
* Reply.updated_at combination).
|
|
760
|
+
*/
|
|
761
|
+
export interface ProjectReplyRowInputs {
|
|
762
|
+
readonly row: RawReplyRow;
|
|
763
|
+
readonly parentUpdateId: string;
|
|
764
|
+
readonly parentCreatedAt: string;
|
|
765
|
+
}
|
|
766
|
+
/**
|
|
767
|
+
* Projects one wire `Reply` row into a synthesized
|
|
768
|
+
* {@link HistoryEvent} of kind `update_replied`. The parent
|
|
769
|
+
* `Update.id` lands on `parent_update_id`; `Reply.kind` lands on
|
|
770
|
+
* `reply_kind` (separate from `activity_logs.event` taxonomy per
|
|
771
|
+
* the Decision 2 closure probe finding).
|
|
772
|
+
*
|
|
773
|
+
* `Reply.created_at` is nullable per the probe introspection;
|
|
774
|
+
* fallback chain: `Reply.created_at` → `Reply.updated_at` →
|
|
775
|
+
* the parent Update's projected timestamp. The final fallback
|
|
776
|
+
* is load-bearing: the event schema requires `created_at` to be
|
|
777
|
+
* non-empty (`min(1)`) and the parent's timestamp is guaranteed
|
|
778
|
+
* non-empty by `projectUpdateRow`'s `created_at ?? edited_at`
|
|
779
|
+
* resolution (Codex impl review round 1 P2-2). A Reply with both
|
|
780
|
+
* timestamps null then merges right next to its parent on the
|
|
781
|
+
* chronological stream.
|
|
782
|
+
*/
|
|
783
|
+
export declare const projectReplyRow: (inputs: ProjectReplyRowInputs) => HistoryEvent;
|
|
784
|
+
/**
|
|
785
|
+
* Per-source pagination state surfaced on the
|
|
786
|
+
* {@link FetchItemHistoryResult} so the NDJSON trailer carries
|
|
787
|
+
* resumption hints. Two sources paginate independently; the
|
|
788
|
+
* trailer's `meta` carries both denominators so an agent
|
|
789
|
+
* resuming a walk knows which page to re-issue per source.
|
|
790
|
+
*
|
|
791
|
+
* - `activity_logs.last_page` — the last activity-log page the
|
|
792
|
+
* walker drained. `null` when the walker exhausted the source
|
|
793
|
+
* (no more pages); a number when stopped mid-walk
|
|
794
|
+
* (`--limit` or wall-clock cap fired).
|
|
795
|
+
* - `updates.last_page` — same semantics for the updates source.
|
|
796
|
+
*/
|
|
797
|
+
export interface PerSourcePaginationState {
|
|
798
|
+
readonly activity_logs: {
|
|
799
|
+
readonly last_page: number | null;
|
|
800
|
+
};
|
|
801
|
+
readonly updates: {
|
|
802
|
+
readonly last_page: number | null;
|
|
803
|
+
};
|
|
804
|
+
}
|
|
805
|
+
/**
|
|
806
|
+
* Inputs to {@link fetchItemHistory}.
|
|
807
|
+
*
|
|
808
|
+
* - `client` — resolved {@link MondayClient} so the fetch inherits
|
|
809
|
+
* `--retry` + `--verbose`-complexity injection (mirrors M22's
|
|
810
|
+
* `fetchUsage` + M23's `fetchBoardFavorites` shape).
|
|
811
|
+
* - `itemId` — the target item. Branded {@link ItemId} (numeric-
|
|
812
|
+
* string; parsed at the command argv boundary).
|
|
813
|
+
* - `boardId` — Monday's `activity_logs` resolver lives under
|
|
814
|
+
* `boards(ids:)`, so the walker needs the item's parent board
|
|
815
|
+
* ID. The command-action looks this up via `lookupItemBoard`
|
|
816
|
+
* before constructing inputs.
|
|
817
|
+
* - `since` / `until` — wall-clock filters (ISO-8601). Both
|
|
818
|
+
* optional; absent → unbounded on that side. Threaded through
|
|
819
|
+
* to `activity_logs(from:, to:)`; the updates source filters
|
|
820
|
+
* client-side against `Update.created_at` (Monday's `updates`
|
|
821
|
+
* resolver doesn't expose a wall-clock filter as of API
|
|
822
|
+
* `2026-01`).
|
|
823
|
+
* - `activityLogsPage` — 1-indexed page number for the
|
|
824
|
+
* `activity_logs` source. Maps to Monday's `page:` arg.
|
|
825
|
+
* - `updatesPage` — 1-indexed page number for the `updates`
|
|
826
|
+
* source. Independent of `activityLogsPage`.
|
|
827
|
+
* - `limit` — per-source per-call slice size (Monday's `limit:`
|
|
828
|
+
* arg on both `activity_logs` and `updates`). Default
|
|
829
|
+
* {@link DEFAULT_HISTORY_PAGE_SIZE}; hard cap
|
|
830
|
+
* {@link HARD_CAP_HISTORY_PAGE_SIZE}.
|
|
831
|
+
* - `kinds` — optional projection filter; only events whose
|
|
832
|
+
* `kind` is in the set are returned. Applied AFTER projection
|
|
833
|
+
* (so unknown-event-kind warnings still surface for filtered
|
|
834
|
+
* events; the filter narrows the returned `data` array, not
|
|
835
|
+
* the merge denominator). The walker drains every page either
|
|
836
|
+
* way; the filter is purely projection-side.
|
|
837
|
+
* - `onItem` — streaming hook per the `--stream` path. Called
|
|
838
|
+
* per merged event per the ordered output (NOT per arrival —
|
|
839
|
+
* merging requires the full slice resident; see
|
|
840
|
+
* `mergeByCreatedAt` semantics).
|
|
841
|
+
*/
|
|
842
|
+
export interface FetchItemHistoryInputs {
|
|
843
|
+
readonly client: MondayClient;
|
|
844
|
+
readonly itemId: ItemId;
|
|
845
|
+
readonly boardId: string;
|
|
846
|
+
readonly since?: string;
|
|
847
|
+
readonly until?: string;
|
|
848
|
+
readonly activityLogsPage?: number;
|
|
849
|
+
readonly updatesPage?: number;
|
|
850
|
+
readonly limit?: number;
|
|
851
|
+
readonly kinds?: readonly HistoryEvent['kind'][];
|
|
852
|
+
readonly onItem?: (event: HistoryEvent) => void | Promise<void>;
|
|
853
|
+
}
|
|
854
|
+
/**
|
|
855
|
+
* Result of the two-source merged-history walker. Carries:
|
|
856
|
+
*
|
|
857
|
+
* - `events` — chronologically-merged event array (or the
|
|
858
|
+
* `--kinds`-filtered subset).
|
|
859
|
+
* - `pagination` — per-source pagination state for NDJSON
|
|
860
|
+
* trailer / agent-resumption.
|
|
861
|
+
* - `warnings` — `unknown_event_kind` warnings (one per unique
|
|
862
|
+
* unrecognised event observed; see
|
|
863
|
+
* {@link buildUnknownEventKindWarning}).
|
|
864
|
+
* - `complexity` — last-call `meta.complexity` (under
|
|
865
|
+
* `--verbose` only); two-source merge picks the larger of
|
|
866
|
+
* the per-source values (or `null` outside `--verbose`).
|
|
867
|
+
* - `source` — always `'live'` for v0.3. activity_logs + updates
|
|
868
|
+
* are pure reads with no per-call cache; the action-layer
|
|
869
|
+
* wrapping aggregates this with the item-board lookup's cache
|
|
870
|
+
* state (which may be cache-hit) via `SourceAggregator` at M24
|
|
871
|
+
* impl, mirroring the M23 cross-board-search source shape.
|
|
872
|
+
*/
|
|
873
|
+
export interface FetchItemHistoryResult {
|
|
874
|
+
readonly events: readonly HistoryEvent[];
|
|
875
|
+
readonly pagination: PerSourcePaginationState;
|
|
876
|
+
readonly warnings: readonly UnknownEventKindWarning[];
|
|
877
|
+
readonly complexity: Complexity | null;
|
|
878
|
+
readonly source: 'live';
|
|
879
|
+
}
|
|
880
|
+
/**
|
|
881
|
+
* Two-source merged-history walker. Issues two independent
|
|
882
|
+
* GraphQL calls (activity_logs + updates), filters + projects
|
|
883
|
+
* each per Decision 2 closure ratified shape, merges
|
|
884
|
+
* chronologically, aggregates `unknown_event_kind` warnings,
|
|
885
|
+
* applies optional `--kinds` projection filter, and streams via
|
|
886
|
+
* `inputs.onItem` (per-merged-event AFTER the merge — merging
|
|
887
|
+
* requires full slice resident per the `mergeByCreatedAt`
|
|
888
|
+
* docstring).
|
|
889
|
+
*
|
|
890
|
+
* **`source: 'live'` constant.** activity_logs + updates are
|
|
891
|
+
* pure reads with no per-call cache; the action layer aggregates
|
|
892
|
+
* this with the item-board lookup's `'live'` source via
|
|
893
|
+
* `SourceAggregator` and resolves the envelope's `meta.source`
|
|
894
|
+
* from the aggregator's resolved state (mirrors M23
|
|
895
|
+
* cross-board-search).
|
|
896
|
+
*
|
|
897
|
+
* **`complexity`** is the larger of the two stages' per-call
|
|
898
|
+
* complexity values (under `--verbose` only; null outside). Two
|
|
899
|
+
* independent calls → take the worst-case stage so agents see
|
|
900
|
+
* the more conservative budget snapshot rather than averaging.
|
|
901
|
+
*
|
|
902
|
+
* **Per-source pagination state.** Each source's `last_page` is
|
|
903
|
+
* the page number the walker DRAINED if the response returned a
|
|
904
|
+
* full slice (`response.length === limit` → more pages likely);
|
|
905
|
+
* `null` when the response returned less than `limit` rows
|
|
906
|
+
* (source exhausted). Monday's page-numbered surfaces have no
|
|
907
|
+
* "next" sentinel; the heuristic mirrors the v0.2 page-walker
|
|
908
|
+
* shape.
|
|
909
|
+
*/
|
|
910
|
+
export declare const fetchItemHistory: (inputs: FetchItemHistoryInputs) => Promise<FetchItemHistoryResult>;
|
|
911
|
+
/**
|
|
912
|
+
* Adapter from a {@link FetchItemHistoryResult}'s `warnings`
|
|
913
|
+
* array to the envelope-shaped {@link Warning} array consumed by
|
|
914
|
+
* `emitSuccess`. Pre-flight pure helper — type-narrows the
|
|
915
|
+
* `code` discriminator so the envelope's `warnings[]` slot
|
|
916
|
+
* carries the precise shape rather than a generic `Warning`.
|
|
917
|
+
*/
|
|
918
|
+
export declare const toEnvelopeWarnings: (warnings: readonly UnknownEventKindWarning[]) => readonly Warning[];
|
|
919
|
+
//# sourceMappingURL=item-history-projection.d.ts.map
|