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,378 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Bulk per-item partial-success path for the v0.3-M25
|
|
3
|
+
* `item update --continue-on-error` flag (`cli-design.md` §6.4
|
|
4
|
+
* "Bulk per-item partial-success" sub-section).
|
|
5
|
+
*
|
|
6
|
+
* **What this module owns.** A thin wrapper around
|
|
7
|
+
* {@link dispatchSequential} from
|
|
8
|
+
* `src/api/partial-success-mutation.ts` that drives the matched-
|
|
9
|
+
* item-ID list through one wire call per item, capturing per-
|
|
10
|
+
* item failures into the result records rather than aborting
|
|
11
|
+
* the loop. The wrapper sits BETWEEN the bulk command-action
|
|
12
|
+
* orchestrator (`src/commands/item/update.ts:runBulk`) and the
|
|
13
|
+
* shared `dispatchSequential` helper — the action body owns the
|
|
14
|
+
* matched-item-walk + column-resolution pre-pass + confirmation
|
|
15
|
+
* gate, then hands the resolved `SelectedMutation` + matched-
|
|
16
|
+
* item IDs to this wrapper, which fans them out + projects the
|
|
17
|
+
* partial-success envelope's `data.results[]` records.
|
|
18
|
+
*
|
|
19
|
+
* **Why a separate module rather than folding into update.ts.**
|
|
20
|
+
* Three reasons:
|
|
21
|
+
*
|
|
22
|
+
* 1. **Single-source-of-truth for the partial-success contract
|
|
23
|
+
* surface.** M13 `update clear-all`, M14 `workspace
|
|
24
|
+
* add-users` / `remove-users`, M15 `board add-users`, and
|
|
25
|
+
* M25 `item update --continue-on-error` all share the
|
|
26
|
+
* `{<id_field>, ok, error?}` per-record shape backed by
|
|
27
|
+
* `dispatchSequential`. Keeping M25's wrapper next to its
|
|
28
|
+
* family in `src/api/` (rather than buried in a command
|
|
29
|
+
* file) keeps the family discoverable + makes future M27
|
|
30
|
+
* bulk-write extensions (notification fan-out?) lift
|
|
31
|
+
* cleanly into the same module.
|
|
32
|
+
*
|
|
33
|
+
* 2. **Action-body size budget.** `src/commands/item/update.ts`
|
|
34
|
+
* already runs ~1100 LOC carrying both single-item +
|
|
35
|
+
* v0.1 fail-fast bulk paths; adding the partial-success
|
|
36
|
+
* branch inline would push it past 1300 and bury the
|
|
37
|
+
* `dispatchSequential` integration. The action layer
|
|
38
|
+
* branches on `parsed.continueOnError` and dispatches into
|
|
39
|
+
* this module's `runPartialSuccessBulkUpdate` instead.
|
|
40
|
+
*
|
|
41
|
+
* 3. **Test surface ergonomics.** Per-item partial-success
|
|
42
|
+
* tests (mock `client.raw` with a routing predicate that
|
|
43
|
+
* flips success/failure per item-ID) read cleaner against
|
|
44
|
+
* the wrapper's seam than against the action body's
|
|
45
|
+
* branched control flow.
|
|
46
|
+
*
|
|
47
|
+
* **What stays at the action layer.** Argv-parse, column
|
|
48
|
+
* resolution, items_page walk, confirmation gate, dry-run path,
|
|
49
|
+
* source aggregation seed, and the universal-partial-success
|
|
50
|
+
* `ok: true` envelope assembly (via `emitMutation`). The
|
|
51
|
+
* wrapper returns the `data.results[]` array + the per-item
|
|
52
|
+
* source-leg fold; the action body wires that into the
|
|
53
|
+
* envelope it would have emitted on the v0.1 fail-fast bulk
|
|
54
|
+
* path's success branch.
|
|
55
|
+
*
|
|
56
|
+
* **Shipped at M25 IMPL (`fe15181`).** Pre-flight contract
|
|
57
|
+
* diff (`d5839a9`) pinned the module signatures + per-item
|
|
58
|
+
* result schema + pure-helper bodies; the M25 IMPL feat fills
|
|
59
|
+
* the runtime body of `runPartialSuccessBulkUpdate` + drops
|
|
60
|
+
* the `c8 ignore start/stop` block-wraps that surrounded both
|
|
61
|
+
* the wrapper body and the action-body routing branch at
|
|
62
|
+
* `src/commands/item/update.ts:runBulk`. The `executeMutation`
|
|
63
|
+
* lift to `src/api/item-mutation-execute.ts` (renamed
|
|
64
|
+
* `executeItemMutation`) shipped ahead at `78889df` (R-NEW-29
|
|
65
|
+
* 3-consumer trigger: single-item + fail-fast bulk + M25
|
|
66
|
+
* partial-success bulk).
|
|
67
|
+
*
|
|
68
|
+
* **Per-item dispatch wiring.** Runtime body loops
|
|
69
|
+
* {@link dispatchSequential} over `matchedItemIds` with
|
|
70
|
+
* id-field `'item_id'`. The per-item dispatch callback fires
|
|
71
|
+
* one `executeItemMutation` call. Successes populate
|
|
72
|
+
* `results[i].item` with the `ProjectedItem` via a side-map
|
|
73
|
+
* fold; failures land in `results[i].error: {code, message}`
|
|
74
|
+
* via `dispatchSequential`'s built-in error decoration.
|
|
75
|
+
* `internal_error` codes re-throw as whole-call (M14 round-2
|
|
76
|
+
* F1 precedent — schema-drift in the response MUST NOT be
|
|
77
|
+
* papered over as a per-item failure).
|
|
78
|
+
*
|
|
79
|
+
* **`data.summary.failed_count` invariant.** The action body
|
|
80
|
+
* derives `failed_count` from the result records
|
|
81
|
+
* (`results.filter((r) => !r.ok).length`); the wrapper does
|
|
82
|
+
* NOT compute it directly because the summary slot also
|
|
83
|
+
* carries `matched_count` + `applied_count` + `board_id` —
|
|
84
|
+
* shapes the action body already owns from the walker + the
|
|
85
|
+
* matched-item-walk + the argv. Keeping the summary
|
|
86
|
+
* assembly at the action layer prevents wrapper-vs-action
|
|
87
|
+
* drift on the partial-success contract's per-summary shape.
|
|
88
|
+
*/
|
|
89
|
+
import { z } from 'zod';
|
|
90
|
+
import { ApiError, MondayCliError } from '../utils/errors.js';
|
|
91
|
+
import { projectedItemSchema } from './item-projection.js';
|
|
92
|
+
import { dispatchSequential, } from './partial-success-mutation.js';
|
|
93
|
+
import { executeItemMutation } from './item-mutation-execute.js';
|
|
94
|
+
import { foldAndRemap } from './resolver-error-fold.js';
|
|
95
|
+
/**
|
|
96
|
+
* Per-item result schema for the partial-success bulk envelope's
|
|
97
|
+
* `data.results[]` slot. Each record carries `item_id` + `ok` +
|
|
98
|
+
* either `item` (on success) or `error` (on failure). The two
|
|
99
|
+
* branches share the discriminator `ok: boolean` — agents read
|
|
100
|
+
* `r.ok ? r.item : r.error` to dispatch on outcome.
|
|
101
|
+
*
|
|
102
|
+
* The `item` slot on success records is the §6.2 `ProjectedItem`
|
|
103
|
+
* shape (same projection single-item `item update` emits as
|
|
104
|
+
* `data`). The `error` slot on failure records carries
|
|
105
|
+
* `{code, message}` populated from
|
|
106
|
+
* `dispatchSequential`'s per-target error decoration.
|
|
107
|
+
*
|
|
108
|
+
* `z.discriminatedUnion` would be the natural shape but
|
|
109
|
+
* `dispatchSequential`'s result records carry a dynamic
|
|
110
|
+
* id-field key (`{item_id: ..., ok, error?}`) — modelling that
|
|
111
|
+
* as a per-record union complicates the schema and downstream
|
|
112
|
+
* consumers' type-narrowing. The flatter shape below carries
|
|
113
|
+
* `item` + `error` as optionals; the action body's projection
|
|
114
|
+
* + the wrapper's per-item dispatch enforce the
|
|
115
|
+
* mutual-exclusion invariant at runtime.
|
|
116
|
+
*/
|
|
117
|
+
export const partialSuccessBulkUpdateResultSchema = z.object({
|
|
118
|
+
item_id: z.string().min(1),
|
|
119
|
+
ok: z.boolean(),
|
|
120
|
+
item: projectedItemSchema.optional(),
|
|
121
|
+
error: z
|
|
122
|
+
.object({
|
|
123
|
+
code: z.string().min(1),
|
|
124
|
+
message: z.string().min(1),
|
|
125
|
+
})
|
|
126
|
+
.optional(),
|
|
127
|
+
});
|
|
128
|
+
/**
|
|
129
|
+
* Output `data` shape for the partial-success bulk envelope.
|
|
130
|
+
* `data.operation` is the literal `"item_update"` (mirrors M14's
|
|
131
|
+
* add-users / remove-users discriminator at `data.operation`;
|
|
132
|
+
* agents switch on it to confirm which verb produced the
|
|
133
|
+
* envelope).
|
|
134
|
+
*
|
|
135
|
+
* `data.summary` extends the v0.1 fail-fast bulk-summary with
|
|
136
|
+
* `failed_count` — items whose per-item dispatch failed under
|
|
137
|
+
* the `--continue-on-error` path. The invariant
|
|
138
|
+
* `matched_count === applied_count + failed_count` holds for
|
|
139
|
+
* every M25 success envelope.
|
|
140
|
+
*/
|
|
141
|
+
export const partialSuccessBulkUpdateDataSchema = z.object({
|
|
142
|
+
operation: z.literal('item_update'),
|
|
143
|
+
summary: z.object({
|
|
144
|
+
matched_count: z.number().int().nonnegative(),
|
|
145
|
+
applied_count: z.number().int().nonnegative(),
|
|
146
|
+
failed_count: z.number().int().nonnegative(),
|
|
147
|
+
board_id: z.string().min(1),
|
|
148
|
+
}),
|
|
149
|
+
results: z.array(partialSuccessBulkUpdateResultSchema),
|
|
150
|
+
});
|
|
151
|
+
/**
|
|
152
|
+
* Constant source signal the partial-success bulk dispatch
|
|
153
|
+
* contributes to the action layer's `SourceAggregator`. Always
|
|
154
|
+
* `'live'` post-dispatch — every Monday mutation counts as a
|
|
155
|
+
* `live` leg. Exported so the action layer's
|
|
156
|
+
* `sourceAgg.record(...)` call site reads against a named
|
|
157
|
+
* constant rather than a bare string literal.
|
|
158
|
+
*/
|
|
159
|
+
export const PARTIAL_SUCCESS_BULK_DISPATCH_SOURCE = 'live';
|
|
160
|
+
/**
|
|
161
|
+
* Drives the per-item dispatch loop under `--continue-on-error`.
|
|
162
|
+
*
|
|
163
|
+
* Implementation (M25 impl `78889df` refactor + this commit):
|
|
164
|
+
*
|
|
165
|
+
* 1. Loop {@link dispatchSequential} over `matchedItemIds`
|
|
166
|
+
* with id-field `'item_id'`.
|
|
167
|
+
* 2. Per-item dispatch callback fires
|
|
168
|
+
* {@link executeItemMutation} against the resolved
|
|
169
|
+
* `SelectedMutation`. On a {@link MondayCliError} catch,
|
|
170
|
+
* run {@link foldAndRemap} with `resolverWarnings` +
|
|
171
|
+
* `remapColumnIds` + `env` + `noCache` + `resolutionSource`
|
|
172
|
+
* from the inputs BEFORE re-throwing into
|
|
173
|
+
* `dispatchSequential`. This makes the per-record
|
|
174
|
+
* `error.code` in `data.results[]` carry the SAME stable
|
|
175
|
+
* code (`column_archived` after a stale-cache
|
|
176
|
+
* `validation_failed` remap) that the v0.1 fail-fast
|
|
177
|
+
* path would have surfaced at the top level — Codex
|
|
178
|
+
* round-1 P1-1 contract requirement (cli-design §6.5
|
|
179
|
+
* stable-code rule applies uniformly across the bulk
|
|
180
|
+
* fail-modes).
|
|
181
|
+
* 3. On success, capture the `ProjectedItem` into a side
|
|
182
|
+
* map keyed by `item_id`.
|
|
183
|
+
* 4. After the loop, walk the `dispatchSequential` results
|
|
184
|
+
* and fold the per-item `ProjectedItem` from the side
|
|
185
|
+
* map into each `results[i].item` slot via
|
|
186
|
+
* {@link foldPartialSuccessBulkResult}. Failure records
|
|
187
|
+
* already carry `error: {code, message}` (with the
|
|
188
|
+
* foldAndRemap-applied code) via
|
|
189
|
+
* `dispatchSequential`'s built-in error decoration.
|
|
190
|
+
* 5. Return `{results}` — the action layer folds the
|
|
191
|
+
* constant `'live'` dispatch source via
|
|
192
|
+
* `sourceAgg.record(PARTIAL_SUCCESS_BULK_DISPATCH_SOURCE,
|
|
193
|
+
* null)` and emits the envelope.
|
|
194
|
+
*
|
|
195
|
+
* **`internal_error` re-throw escape hatch.** Per M14 round-2
|
|
196
|
+
* F1 / round-3 F1, `dispatchSequential` re-throws
|
|
197
|
+
* `internal_error` so schema-drift in the response surfaces
|
|
198
|
+
* as whole-call (top-level `ok: false`) rather than per-record
|
|
199
|
+
* — papering over `internal_error` would hide the malformed-
|
|
200
|
+
* response signal agents need to know about. The M25 wrapper
|
|
201
|
+
* inherits this behaviour by NOT wrapping the
|
|
202
|
+
* `dispatchSequential` re-throw — `foldAndRemap` only ever
|
|
203
|
+
* runs against {@link MondayCliError} instances, and it
|
|
204
|
+
* NEVER converts a non-internal_error into internal_error,
|
|
205
|
+
* so the re-throw path through dispatchSequential remains
|
|
206
|
+
* the canonical schema-drift surface.
|
|
207
|
+
*
|
|
208
|
+
* **Non-`MondayCliError` re-throw.** Programmer-bug exceptions
|
|
209
|
+
* (TypeError, RangeError, etc.) raised by the executor or by
|
|
210
|
+
* `foldAndRemap`'s refresh probe propagate through
|
|
211
|
+
* `dispatchSequential`'s non-CliError re-throw branch unchanged,
|
|
212
|
+
* surfacing as whole-call `internal_error` via the runner's
|
|
213
|
+
* catch-all (mirrors M14's pattern at
|
|
214
|
+
* `users-fan-out-mutation.ts` and the documented behaviour at
|
|
215
|
+
* `partial-success-mutation.ts:93`).
|
|
216
|
+
*/
|
|
217
|
+
export const runPartialSuccessBulkUpdate = async (inputs) => {
|
|
218
|
+
const { client, boardId, matchedItemIds, mutation, createLabelsIfMissing, resolverWarnings, remapColumnIds, env, noCache, resolutionSource, } = inputs;
|
|
219
|
+
const projectedById = new Map();
|
|
220
|
+
const dispatchResults = await dispatchSequential(matchedItemIds, 'item_id', async ({ targetId }) => {
|
|
221
|
+
try {
|
|
222
|
+
const result = await executeItemMutation(client, {
|
|
223
|
+
mutation,
|
|
224
|
+
itemId: targetId,
|
|
225
|
+
boardId,
|
|
226
|
+
createLabelsIfMissing,
|
|
227
|
+
});
|
|
228
|
+
projectedById.set(targetId, result.projected);
|
|
229
|
+
}
|
|
230
|
+
catch (err) {
|
|
231
|
+
if (err instanceof MondayCliError) {
|
|
232
|
+
// Codex pre-flight round-1 P1-1: thread the remap
|
|
233
|
+
// context through so per-item failures inherit the
|
|
234
|
+
// SAME `validation_failed` → `column_archived`
|
|
235
|
+
// stale-cache remap the v0.1 fail-fast path applies.
|
|
236
|
+
// Without this, archived-column failures would
|
|
237
|
+
// surface as `validation_failed` in `data.results[]`
|
|
238
|
+
// even though the v0.1 path surfaces `column_archived`
|
|
239
|
+
// for the same root cause (cli-design §6.5 stable-
|
|
240
|
+
// code rule). foldAndRemap NEVER converts a non-
|
|
241
|
+
// internal_error into internal_error, so
|
|
242
|
+
// dispatchSequential's internal_error re-throw escape
|
|
243
|
+
// hatch (M14 round-2 F1) stays intact.
|
|
244
|
+
const remapped = await foldAndRemap({
|
|
245
|
+
err,
|
|
246
|
+
warnings: resolverWarnings,
|
|
247
|
+
client,
|
|
248
|
+
boardId,
|
|
249
|
+
columnIds: remapColumnIds,
|
|
250
|
+
env,
|
|
251
|
+
noCache,
|
|
252
|
+
resolutionSource,
|
|
253
|
+
});
|
|
254
|
+
throw remapped;
|
|
255
|
+
}
|
|
256
|
+
// Non-MondayCliError — programmer bug. Re-throw through
|
|
257
|
+
// dispatchSequential's non-CliError branch so the runner's
|
|
258
|
+
// catch-all surfaces it as internal_error (whole-call,
|
|
259
|
+
// not per-record). Mirrors users-fan-out-mutation.ts
|
|
260
|
+
// and is the documented dispatchSequential contract.
|
|
261
|
+
throw err;
|
|
262
|
+
}
|
|
263
|
+
});
|
|
264
|
+
const results = dispatchResults.map((row) => {
|
|
265
|
+
// Side-map lookup requires the item_id string from the row;
|
|
266
|
+
// foldPartialSuccessBulkResult also enforces the same
|
|
267
|
+
// invariant + throws internal_error if the id-field is
|
|
268
|
+
// missing or non-string (dispatchSequential contract).
|
|
269
|
+
const itemIdSlot = row.item_id;
|
|
270
|
+
const projected = typeof itemIdSlot === 'string'
|
|
271
|
+
? projectedById.get(itemIdSlot)
|
|
272
|
+
: undefined;
|
|
273
|
+
return foldPartialSuccessBulkResult(row, projected);
|
|
274
|
+
});
|
|
275
|
+
return { results };
|
|
276
|
+
};
|
|
277
|
+
/**
|
|
278
|
+
* Pure helper — folds a `dispatchSequential` result row + a
|
|
279
|
+
* `ProjectedItem` side-map entry into the partial-success-bulk
|
|
280
|
+
* per-item record shape this module emits to the action layer.
|
|
281
|
+
*
|
|
282
|
+
* The helper is **shipped as a real implementation** (not a
|
|
283
|
+
* stub) so the pre-flight Codex review can verify the
|
|
284
|
+
* projection shape against the contract pinned in cli-design
|
|
285
|
+
* §6.4 inline. M25 implementation reuses the helper unchanged.
|
|
286
|
+
*
|
|
287
|
+
* `record` is the row produced by `dispatchSequential` with
|
|
288
|
+
* id-field `'item_id'` — carries `{item_id, ok, error?}` per
|
|
289
|
+
* the partial-success contract. `projectedItem` is the
|
|
290
|
+
* `ProjectedItem` the per-item dispatch callback captured on
|
|
291
|
+
* success (`undefined` on failure).
|
|
292
|
+
*
|
|
293
|
+
* Returns the per-item shape with `item` populated only when
|
|
294
|
+
* the dispatch succeeded; `error` populated only when it
|
|
295
|
+
* failed. The mutual-exclusion invariant is enforced at the
|
|
296
|
+
* boundary: success records never carry `error`, failure
|
|
297
|
+
* records never carry `item`.
|
|
298
|
+
*/
|
|
299
|
+
export const foldPartialSuccessBulkResult = (record, projectedItem) => {
|
|
300
|
+
// Dot-access: `dispatchSequential` builds the record with
|
|
301
|
+
// the dynamic id-field key (`'item_id'`) carrying the target
|
|
302
|
+
// ID. The dot-access narrows the unknown index-signature
|
|
303
|
+
// value to a string via the runtime guard below; the helper
|
|
304
|
+
// throws `internal_error` if the shape doesn't match (which
|
|
305
|
+
// would be a programmer bug — `dispatchSequential`'s contract
|
|
306
|
+
// is to populate the id-field slot for every result row).
|
|
307
|
+
const itemIdSlot = record.item_id;
|
|
308
|
+
if (typeof itemIdSlot !== 'string' || itemIdSlot.length === 0) {
|
|
309
|
+
throw new ApiError('internal_error', 'partial-success bulk result row is missing the `item_id` field — dispatchSequential contract violation.', {
|
|
310
|
+
details: {
|
|
311
|
+
record_keys: Object.keys(record),
|
|
312
|
+
},
|
|
313
|
+
});
|
|
314
|
+
}
|
|
315
|
+
if (record.ok) {
|
|
316
|
+
if (projectedItem === undefined) {
|
|
317
|
+
throw new ApiError('internal_error', `partial-success bulk result row for item_id ${itemIdSlot} reported ok: true but no ProjectedItem was captured — wrapper-layer side-map miss.`, {
|
|
318
|
+
details: {
|
|
319
|
+
item_id: itemIdSlot,
|
|
320
|
+
},
|
|
321
|
+
});
|
|
322
|
+
}
|
|
323
|
+
return {
|
|
324
|
+
item_id: itemIdSlot,
|
|
325
|
+
ok: true,
|
|
326
|
+
item: projectedItem,
|
|
327
|
+
};
|
|
328
|
+
}
|
|
329
|
+
// Failure path — `dispatchSequential` populates `error` on
|
|
330
|
+
// every non-`ok` row; the schema's `.optional()` declarations
|
|
331
|
+
// narrow defensively here.
|
|
332
|
+
if (record.error === undefined) {
|
|
333
|
+
throw new ApiError('internal_error', `partial-success bulk result row for item_id ${itemIdSlot} reported ok: false but no error payload was captured — dispatchSequential contract violation.`, {
|
|
334
|
+
details: {
|
|
335
|
+
item_id: itemIdSlot,
|
|
336
|
+
},
|
|
337
|
+
});
|
|
338
|
+
}
|
|
339
|
+
return {
|
|
340
|
+
item_id: itemIdSlot,
|
|
341
|
+
ok: false,
|
|
342
|
+
error: {
|
|
343
|
+
code: record.error.code,
|
|
344
|
+
message: record.error.message,
|
|
345
|
+
},
|
|
346
|
+
};
|
|
347
|
+
};
|
|
348
|
+
/**
|
|
349
|
+
* Pure helper — derives the `data.summary` slot from the
|
|
350
|
+
* matched-item count + the per-item results array. The
|
|
351
|
+
* `matched_count === applied_count + failed_count` invariant
|
|
352
|
+
* is enforced here; a mismatch throws `internal_error` since
|
|
353
|
+
* it would indicate a wrapper-layer bug (some matched item
|
|
354
|
+
* neither succeeded nor failed). Shipped as a real
|
|
355
|
+
* implementation so the pre-flight Codex review can verify the
|
|
356
|
+
* shape against cli-design §6.4 inline.
|
|
357
|
+
*/
|
|
358
|
+
export const buildPartialSuccessBulkSummary = ({ matchedCount, boardId, results, }) => {
|
|
359
|
+
const appliedCount = results.filter((r) => r.ok).length;
|
|
360
|
+
const failedCount = results.filter((r) => !r.ok).length;
|
|
361
|
+
if (appliedCount + failedCount !== matchedCount) {
|
|
362
|
+
throw new ApiError('internal_error', `partial-success bulk summary invariant violated — matched_count (${String(matchedCount)}) !== applied_count (${String(appliedCount)}) + failed_count (${String(failedCount)}).`, {
|
|
363
|
+
details: {
|
|
364
|
+
matched_count: matchedCount,
|
|
365
|
+
applied_count: appliedCount,
|
|
366
|
+
failed_count: failedCount,
|
|
367
|
+
board_id: boardId,
|
|
368
|
+
},
|
|
369
|
+
});
|
|
370
|
+
}
|
|
371
|
+
return {
|
|
372
|
+
matched_count: matchedCount,
|
|
373
|
+
applied_count: appliedCount,
|
|
374
|
+
failed_count: failedCount,
|
|
375
|
+
board_id: boardId,
|
|
376
|
+
};
|
|
377
|
+
};
|
|
378
|
+
//# sourceMappingURL=partial-success-bulk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"partial-success-bulk.js","sourceRoot":"","sources":["../../src/api/partial-success-bulk.ts"],"names":[],"mappings":"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"}
|
package/dist/api/people.d.ts
CHANGED
|
@@ -56,6 +56,7 @@
|
|
|
56
56
|
* passes; consolidating the source of truth prevents the next
|
|
57
57
|
* drift outright.
|
|
58
58
|
*/
|
|
59
|
+
import { type EnvelopeSource } from './source-aggregator.js';
|
|
59
60
|
/**
|
|
60
61
|
* Wire payload shape for a `people` column. Matches Monday's
|
|
61
62
|
* `change_column_value(value: JSON!)` JSON scalar:
|
|
@@ -105,8 +106,34 @@ export interface PeopleResolutionContext {
|
|
|
105
106
|
* translator forwards the verbatim email so the unmatched-email
|
|
106
107
|
* detail in any thrown `user_not_found` echoes what the agent
|
|
107
108
|
* typed.
|
|
109
|
+
*
|
|
110
|
+
* **M19→M20 cleanup-window widening.** Pre-widening the callback
|
|
111
|
+
* returned just the `id` string and the people translator emitted
|
|
112
|
+
* `translatorResolution: null`, which meant `--set Owner=alice@x`
|
|
113
|
+
* against a cache-hit user-directory lookup surfaced
|
|
114
|
+
* `meta.source: "live"` because the email-resolution leg's source
|
|
115
|
+
* never reached the envelope-level aggregate. Post-widening, the
|
|
116
|
+
* callback returns the full `userByEmail` provenance (`source` +
|
|
117
|
+
* `cacheAgeSeconds`) and the translator threads it into
|
|
118
|
+
* `translatorResolution` for envelope-level merge — same shape the
|
|
119
|
+
* M19 tags translator uses for its `resolveTags` callback (see
|
|
120
|
+
* `TagResolutionContext.resolveTags` in `column-values.ts`).
|
|
108
121
|
*/
|
|
109
|
-
readonly resolveEmail: (email: string) => Promise<
|
|
122
|
+
readonly resolveEmail: (email: string) => Promise<ResolveEmailResult>;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Per-email resolution result returned by `PeopleResolutionContext.
|
|
126
|
+
* resolveEmail`. Mirrors `userByEmail`'s public shape one-for-one
|
|
127
|
+
* (same field names, same union for `source`) so the
|
|
128
|
+
* `buildResolutionContexts` closure is a transparent passthrough.
|
|
129
|
+
*/
|
|
130
|
+
export interface ResolveEmailResult {
|
|
131
|
+
/** Resolved Monday user ID (decimal non-negative integer string). */
|
|
132
|
+
readonly id: string;
|
|
133
|
+
/** `'cache'` when the directory cache served the email; `'live'` after a network refresh. */
|
|
134
|
+
readonly source: 'cache' | 'live';
|
|
135
|
+
/** Cache age in seconds for `source: 'cache'`; `null` after a live refresh. */
|
|
136
|
+
readonly cacheAgeSeconds: number | null;
|
|
110
137
|
}
|
|
111
138
|
/**
|
|
112
139
|
* Token-by-token resolution echo the dry-run engine renders as
|
|
@@ -144,6 +171,32 @@ export interface ParsedPeopleInput {
|
|
|
144
171
|
* a v0.1-plan §3 M5a spec gap for cli-design backfill.
|
|
145
172
|
*/
|
|
146
173
|
readonly resolution: PeopleResolution;
|
|
174
|
+
/**
|
|
175
|
+
* Aggregated source across every resolution leg this call fired —
|
|
176
|
+
* one leg per non-empty token. `me` tokens record `'live'` (the
|
|
177
|
+
* `me { id }` query is always a network call; the per-call
|
|
178
|
+
* `cachedMe` memo amortises N `me` tokens to one network round-
|
|
179
|
+
* trip but the leg itself is live). Email tokens record the
|
|
180
|
+
* `userByEmail` callback's `source` verbatim. `mergeSource`'s rule
|
|
181
|
+
* promotes `cache` + `live` → `mixed`. Always populated; empty
|
|
182
|
+
* input throws before this slot is built.
|
|
183
|
+
*
|
|
184
|
+
* Threaded into `translatorResolution.source` by `translatePeople`
|
|
185
|
+
* so the envelope-level `meta.source` aggregate reflects the
|
|
186
|
+
* email-resolution leg (M19→M20 cleanup-window parity fix per
|
|
187
|
+
* v0.3-plan §11 post-mortem).
|
|
188
|
+
*/
|
|
189
|
+
readonly source: EnvelopeSource;
|
|
190
|
+
/**
|
|
191
|
+
* Worst-case staleness across legs that hit cache (the OLDEST
|
|
192
|
+
* `cacheAgeSeconds` seen). `null` when no leg hit cache (every
|
|
193
|
+
* email resolved live AND no leg contributed an age). Threaded
|
|
194
|
+
* into `translatorResolution.cacheAgeSeconds` by `translatePeople`
|
|
195
|
+
* so the envelope-level `meta.cache_age_seconds` reflects the
|
|
196
|
+
* worst-case staleness across the column-resolution leg + the
|
|
197
|
+
* people-resolution leg.
|
|
198
|
+
*/
|
|
199
|
+
readonly cacheAgeSeconds: number | null;
|
|
147
200
|
}
|
|
148
201
|
/**
|
|
149
202
|
* Parses a `people` column input per cli-design.md §5.3 step 3.
|
package/dist/api/people.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"people.d.ts","sourceRoot":"","sources":["../../src/api/people.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyDG;
|
|
1
|
+
{"version":3,"file":"people.d.ts","sourceRoot":"","sources":["../../src/api/people.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyDG;AAKH,OAAO,EAAoB,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAE/E;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,eAAe,EAAE,SAAS,kBAAkB,EAAE,CAAC;CACzD;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;CACzB;AAED,MAAM,WAAW,uBAAuB;IACtC;;;;;;;;;;OAUG;IACH,QAAQ,CAAC,SAAS,EAAE,MAAM,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1C;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACH,QAAQ,CAAC,YAAY,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAAC;CACvE;AAED;;;;;GAKG;AACH,MAAM,WAAW,kBAAkB;IACjC,qEAAqE;IACrE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,6FAA6F;IAC7F,QAAQ,CAAC,MAAM,EAAE,OAAO,GAAG,MAAM,CAAC;IAClC,+EAA+E;IAC/E,QAAQ,CAAC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;CACzC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,MAAM,EAAE,SAAS,qBAAqB,EAAE,CAAC;CACnD;AAED,MAAM,WAAW,qBAAqB;IACpC,4DAA4D;IAC5D,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB;;;;;OAKG;IACH,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;IAChC;;;;;;OAMG;IACH,QAAQ,CAAC,UAAU,EAAE,gBAAgB,CAAC;IACtC;;;;;;;;;;;;;;OAcG;IACH,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC;;;;;;;;OAQG;IACH,QAAQ,CAAC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;CACzC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,eAAO,MAAM,gBAAgB,GAC3B,KAAK,MAAM,EACX,UAAU,MAAM,EAChB,KAAK,uBAAuB,KAC3B,OAAO,CAAC,iBAAiB,CA6D3B,CAAC"}
|
package/dist/api/people.js
CHANGED
|
@@ -59,6 +59,7 @@
|
|
|
59
59
|
import { ApiError, UsageError } from '../utils/errors.js';
|
|
60
60
|
import { DECIMAL_USER_ID_PATTERN } from '../types/ids.js';
|
|
61
61
|
import { isMeToken } from './me-token.js';
|
|
62
|
+
import { SourceAggregator } from './source-aggregator.js';
|
|
62
63
|
/**
|
|
63
64
|
* Parses a `people` column input per cli-design.md §5.3 step 3.
|
|
64
65
|
*
|
|
@@ -107,6 +108,15 @@ export const parsePeopleInput = async (raw, columnId, ctx) => {
|
|
|
107
108
|
cachedMe ??= await ctx.resolveMe();
|
|
108
109
|
return cachedMe;
|
|
109
110
|
};
|
|
111
|
+
// Source/cache-age aggregator for the envelope-level meta.source
|
|
112
|
+
// pathway (M19→M20 cleanup-window parity fix). Each token records
|
|
113
|
+
// one leg: `me` always 'live' (`me { id }` is a network call —
|
|
114
|
+
// the per-call cachedMe memo amortises duplicates but the leg is
|
|
115
|
+
// still live), email tokens forward the userByEmail callback's
|
|
116
|
+
// {source, cacheAgeSeconds} verbatim. Translated downstream by
|
|
117
|
+
// translatePeople into translatorResolution; the envelope-level
|
|
118
|
+
// mergeSource rule promotes cache + live → mixed.
|
|
119
|
+
const sourceAgg = new SourceAggregator();
|
|
110
120
|
const entries = [];
|
|
111
121
|
const resolutionTokens = [];
|
|
112
122
|
for (const token of tokens) {
|
|
@@ -117,15 +127,29 @@ export const parsePeopleInput = async (raw, columnId, ctx) => {
|
|
|
117
127
|
// gap in v0.1-plan.md §3 M5a.
|
|
118
128
|
throw numericPeopleTokenError(columnId, token, raw);
|
|
119
129
|
}
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
130
|
+
let id;
|
|
131
|
+
if (isMeToken(token)) {
|
|
132
|
+
id = await resolveMeOnce();
|
|
133
|
+
sourceAgg.record('live', null);
|
|
134
|
+
}
|
|
135
|
+
else {
|
|
136
|
+
const resolved = await ctx.resolveEmail(token);
|
|
137
|
+
id = resolved.id;
|
|
138
|
+
sourceAgg.record(resolved.source, resolved.cacheAgeSeconds);
|
|
139
|
+
}
|
|
123
140
|
entries.push({ id: idStringToNumber(id, columnId, token), kind: 'person' });
|
|
124
141
|
resolutionTokens.push({ input: token, resolved_id: id });
|
|
125
142
|
}
|
|
143
|
+
// tokens.length > 0 guaranteed (empty input throws above), so the
|
|
144
|
+
// aggregator always has at least one leg recorded; `result()`'s
|
|
145
|
+
// fallback is unreachable here but the default ('live') stays as
|
|
146
|
+
// a defensive seed for the type narrowing.
|
|
147
|
+
const aggregate = sourceAgg.result();
|
|
126
148
|
return {
|
|
127
149
|
payload: { personsAndTeams: entries },
|
|
128
150
|
resolution: { tokens: resolutionTokens },
|
|
151
|
+
source: aggregate.source,
|
|
152
|
+
cacheAgeSeconds: aggregate.cacheAgeSeconds,
|
|
129
153
|
};
|
|
130
154
|
};
|
|
131
155
|
/**
|
package/dist/api/people.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"people.js","sourceRoot":"","sources":["../../src/api/people.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyDG;AAEH,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"people.js","sourceRoot":"","sources":["../../src/api/people.ts"],"names":[],"mappings":"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"}
|