crewly 1.20.191 → 1.20.193
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/config/constants.ts +11 -0
- package/config/hooks/subagent-guard/subagent.sh +113 -0
- package/config/roles/architect/prompt.md +1 -1
- package/config/roles/auditor/prompt.md +1 -1
- package/config/roles/backend-developer/prompt.md +1 -1
- package/config/roles/content-strategist/prompt.md +2 -2
- package/config/roles/designer/prompt.md +1 -1
- package/config/roles/developer/prompt.md +2 -2
- package/config/roles/frontend-developer/prompt.md +1 -1
- package/config/roles/fullstack-dev/prompt.md +1 -1
- package/config/roles/generalist/prompt.md +1 -1
- package/config/roles/ops/prompt.md +1 -1
- package/config/roles/orchestrator/prompt.md +2 -2
- package/config/roles/product-manager/prompt.md +1 -1
- package/config/roles/qa/prompt.md +1 -1
- package/config/roles/qa-engineer/prompt.md +1 -1
- package/config/roles/researcher/prompt.md +1 -1
- package/config/roles/sales/prompt.md +1 -1
- package/config/roles/support/prompt.md +1 -1
- package/config/roles/team-leader/prompt.md +1 -1
- package/config/roles/tpm/prompt.md +1 -1
- package/config/roles/ux-designer/prompt.md +1 -1
- package/config/skills/_common/complete-body-shape.test.sh +17 -0
- package/config/skills/agent/core/complete-task/SKILL.md +27 -4
- package/config/skills/agent/core/complete-task/execute.sh +23 -3
- package/config/skills/agent/core/complete-task/execute.test.sh +34 -0
- package/config/skills/agent/core/handoff-task/execute.sh +1 -1
- package/config/skills/agent/core/report-status/SKILL.md +27 -4
- package/config/skills/agent/core/report-status/execute.sh +104 -4
- package/config/skills/agent/core/send-message/SKILL.md +6 -0
- package/config/skills/agent/core/send-message/execute.sh +17 -1
- package/config/skills/agent/core/send-message/execute.test.sh +81 -0
- package/config/skills/agent/core/todo-add/SKILL.md +16 -2
- package/config/skills/agent/core/todo-add/execute.sh +21 -5
- package/config/skills/agent/core/todo-add/execute.test.sh +14 -0
- package/config/skills/agent/core/todo-tasks/SKILL.md +4 -3
- package/config/skills/agent/core/todo-update/SKILL.md +13 -2
- package/config/skills/agent/core/todo-update/execute.sh +41 -3
- package/config/skills/agent/core/todo-update/execute.test.sh +7 -0
- package/config/skills/marketplace-registry.ts +4 -4
- package/config/skills/orchestrator/complete-task/SKILL.md +13 -6
- package/config/skills/orchestrator/complete-task/execute.sh +22 -3
- package/config/skills/orchestrator/delegate-task/execute.sh +2 -2
- package/config/skills/orchestrator/harness-login/SKILL.md +9 -1
- package/config/skills/orchestrator/harness-login/execute.sh +12 -4
- package/config/skills/orchestrator/harness-login/execute.test.sh +7 -0
- package/config/skills/team-leader/delegate-task/execute.sh +1 -1
- package/config/skills/team-leader/verify-output/SKILL.md +18 -1
- package/config/skills/team-leader/verify-output/execute.sh +28 -0
- package/config/skills/team-leader/verify-output/execute.test.sh +27 -0
- package/dist/backend/backend/src/constants.d.ts +181 -2
- package/dist/backend/backend/src/constants.d.ts.map +1 -1
- package/dist/backend/backend/src/constants.js +183 -2
- package/dist/backend/backend/src/constants.js.map +1 -1
- package/dist/backend/backend/src/controllers/canva/canva.controller.d.ts +6 -0
- package/dist/backend/backend/src/controllers/canva/canva.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/canva/canva.controller.js +15 -4
- package/dist/backend/backend/src/controllers/canva/canva.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/canva/canva.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/canva/canva.routes.js +3 -1
- package/dist/backend/backend/src/controllers/canva/canva.routes.js.map +1 -1
- package/dist/backend/backend/src/controllers/cloud/cloud-device-pairing.controller.d.ts +1 -1
- package/dist/backend/backend/src/controllers/cloud/cloud-device-pairing.controller.js +1 -1
- package/dist/backend/backend/src/controllers/cloud/cloud.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/cloud/cloud.controller.js +4 -1
- package/dist/backend/backend/src/controllers/cloud/cloud.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/connector/connector.controller.d.ts +4 -0
- package/dist/backend/backend/src/controllers/connector/connector.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/connector/connector.controller.js +32 -3
- package/dist/backend/backend/src/controllers/connector/connector.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/connector/grant-sharing.handler.d.ts +41 -0
- package/dist/backend/backend/src/controllers/connector/grant-sharing.handler.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/connector/grant-sharing.handler.js +75 -0
- package/dist/backend/backend/src/controllers/connector/grant-sharing.handler.js.map +1 -0
- package/dist/backend/backend/src/controllers/google/google.controller.d.ts +6 -0
- package/dist/backend/backend/src/controllers/google/google.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/google/google.controller.js +21 -2
- package/dist/backend/backend/src/controllers/google/google.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/google/google.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/google/google.routes.js +3 -1
- package/dist/backend/backend/src/controllers/google/google.routes.js.map +1 -1
- package/dist/backend/backend/src/controllers/harness/owner-login.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/harness/owner-login.controller.js +22 -3
- package/dist/backend/backend/src/controllers/harness/owner-login.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/microsoft/microsoft-todo.controller.d.ts +19 -2
- package/dist/backend/backend/src/controllers/microsoft/microsoft-todo.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/microsoft/microsoft-todo.controller.js +39 -6
- package/dist/backend/backend/src/controllers/microsoft/microsoft-todo.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/microsoft/microsoft-todo.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/microsoft/microsoft-todo.routes.js +3 -1
- package/dist/backend/backend/src/controllers/microsoft/microsoft-todo.routes.js.map +1 -1
- package/dist/backend/backend/src/controllers/monitoring/terminal.controller.d.ts +9 -0
- package/dist/backend/backend/src/controllers/monitoring/terminal.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js +71 -2
- package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/people/people.routes.d.ts +25 -0
- package/dist/backend/backend/src/controllers/people/people.routes.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/people/people.routes.js +90 -0
- package/dist/backend/backend/src/controllers/people/people.routes.js.map +1 -0
- package/dist/backend/backend/src/controllers/request-types.d.ts +2 -0
- package/dist/backend/backend/src/controllers/request-types.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/security/approvals.controller.d.ts +26 -0
- package/dist/backend/backend/src/controllers/security/approvals.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/security/approvals.controller.js +73 -0
- package/dist/backend/backend/src/controllers/security/approvals.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/session/session.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/session/session.controller.js +9 -0
- package/dist/backend/backend/src/controllers/session/session.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/slack/slack.controller.js +1 -1
- package/dist/backend/backend/src/controllers/slack/slack.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/system/runtime-fallback.controller.d.ts +22 -1
- package/dist/backend/backend/src/controllers/system/runtime-fallback.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/system/runtime-fallback.controller.js +143 -3
- package/dist/backend/backend/src/controllers/system/runtime-fallback.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/system/usage.controller.d.ts +3 -3
- package/dist/backend/backend/src/controllers/system/usage.controller.js +3 -3
- package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.d.ts +25 -3
- package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.js +125 -19
- package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/team/team.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/team/team.controller.js +14 -0
- package/dist/backend/backend/src/controllers/team/team.controller.js.map +1 -1
- package/dist/backend/backend/src/index.d.ts.map +1 -1
- package/dist/backend/backend/src/index.js +44 -1
- package/dist/backend/backend/src/index.js.map +1 -1
- package/dist/backend/backend/src/routes/api.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/routes/api.routes.js +3 -0
- package/dist/backend/backend/src/routes/api.routes.js.map +1 -1
- package/dist/backend/backend/src/routes/modules/system.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/routes/modules/system.routes.js +3 -0
- package/dist/backend/backend/src/routes/modules/system.routes.js.map +1 -1
- package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts +13 -0
- package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/agent-registration.service.js +28 -3
- package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/control-plane-guard.service.d.ts +3 -2
- package/dist/backend/backend/src/services/agent/control-plane-guard.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/control-plane-guard.service.js +14 -3
- package/dist/backend/backend/src/services/agent/control-plane-guard.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/fresh-task-conversation.service.d.ts +28 -1
- package/dist/backend/backend/src/services/agent/fresh-task-conversation.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/fresh-task-conversation.service.js +48 -4
- package/dist/backend/backend/src/services/agent/fresh-task-conversation.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/idle-detection.service.js +1 -1
- package/dist/backend/backend/src/services/agent/idle-detection.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/oauth-relogin-monitor.service.d.ts +2 -1
- package/dist/backend/backend/src/services/agent/oauth-relogin-monitor.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/oauth-relogin-monitor.service.js +17 -4
- package/dist/backend/backend/src/services/agent/oauth-relogin-monitor.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.d.ts +14 -0
- package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.js +38 -0
- package/dist/backend/backend/src/services/agent/runtime-exit-monitor.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/runtime-session-recovery.d.ts +34 -0
- package/dist/backend/backend/src/services/agent/runtime-session-recovery.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/runtime-session-recovery.js +49 -5
- package/dist/backend/backend/src/services/agent/runtime-session-recovery.js.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/communication.module.d.ts.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/communication.module.js +8 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/communication.module.js.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/lazy-anti-patterns.module.js +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/lazy-anti-patterns.module.js.map +1 -1
- package/dist/backend/backend/src/services/browser/browser-approval.service.d.ts +8 -0
- package/dist/backend/backend/src/services/browser/browser-approval.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/browser/browser-approval.service.js +10 -0
- package/dist/backend/backend/src/services/browser/browser-approval.service.js.map +1 -1
- package/dist/backend/backend/src/services/canva/canva-token.service.d.ts +17 -4
- package/dist/backend/backend/src/services/canva/canva-token.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/canva/canva-token.service.js +49 -17
- package/dist/backend/backend/src/services/canva/canva-token.service.js.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts +55 -0
- package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.js +80 -0
- package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.js.map +1 -1
- package/dist/backend/backend/src/services/cloud/cloud-device-pairing.client.d.ts +1 -1
- package/dist/backend/backend/src/services/cloud/cloud-device-pairing.client.js +1 -1
- package/dist/backend/backend/src/services/cloud/cloud-device-pairing.service.d.ts +1 -1
- package/dist/backend/backend/src/services/cloud/cloud-device-pairing.service.js +1 -1
- package/dist/backend/backend/src/services/cloud/cloud-disconnect-notice.service.d.ts +17 -2
- package/dist/backend/backend/src/services/cloud/cloud-disconnect-notice.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/cloud/cloud-disconnect-notice.service.js +30 -6
- package/dist/backend/backend/src/services/cloud/cloud-disconnect-notice.service.js.map +1 -1
- package/dist/backend/backend/src/services/cloud/cloud-disconnect-notice.utils.d.ts +38 -2
- package/dist/backend/backend/src/services/cloud/cloud-disconnect-notice.utils.d.ts.map +1 -1
- package/dist/backend/backend/src/services/cloud/cloud-disconnect-notice.utils.js +63 -1
- package/dist/backend/backend/src/services/cloud/cloud-disconnect-notice.utils.js.map +1 -1
- package/dist/backend/backend/src/services/cloud/cloud-sync.service.d.ts +74 -4
- package/dist/backend/backend/src/services/cloud/cloud-sync.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/cloud/cloud-sync.service.js +204 -56
- package/dist/backend/backend/src/services/cloud/cloud-sync.service.js.map +1 -1
- package/dist/backend/backend/src/services/cloud/cloud-sync.types.d.ts +19 -0
- package/dist/backend/backend/src/services/cloud/cloud-sync.types.d.ts.map +1 -1
- package/dist/backend/backend/src/services/cloud/cloud-sync.types.js.map +1 -1
- package/dist/backend/backend/src/services/decisions/decision.service.d.ts +9 -0
- package/dist/backend/backend/src/services/decisions/decision.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/decisions/decision.service.js +11 -0
- package/dist/backend/backend/src/services/decisions/decision.service.js.map +1 -1
- package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.js +3 -0
- package/dist/backend/backend/src/services/event-bus/event-to-workitem-bridge.service.js.map +1 -1
- package/dist/backend/backend/src/services/google/google-workspace-token.service.d.ts +25 -2
- package/dist/backend/backend/src/services/google/google-workspace-token.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/google/google-workspace-token.service.js +48 -7
- package/dist/backend/backend/src/services/google/google-workspace-token.service.js.map +1 -1
- package/dist/backend/backend/src/services/harness/claude-accounts.d.ts +207 -0
- package/dist/backend/backend/src/services/harness/claude-accounts.d.ts.map +1 -0
- package/dist/backend/backend/src/services/harness/claude-accounts.js +306 -0
- package/dist/backend/backend/src/services/harness/claude-accounts.js.map +1 -0
- package/dist/backend/backend/src/services/harness/harness-credentials.store.d.ts +35 -0
- package/dist/backend/backend/src/services/harness/harness-credentials.store.d.ts.map +1 -1
- package/dist/backend/backend/src/services/harness/harness-credentials.store.js +48 -0
- package/dist/backend/backend/src/services/harness/harness-credentials.store.js.map +1 -1
- package/dist/backend/backend/src/services/harness/harness-relogin.service.d.ts +70 -1
- package/dist/backend/backend/src/services/harness/harness-relogin.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/harness/harness-relogin.service.js +156 -19
- package/dist/backend/backend/src/services/harness/harness-relogin.service.js.map +1 -1
- package/dist/backend/backend/src/services/harness/harness.types.d.ts +2 -0
- package/dist/backend/backend/src/services/harness/harness.types.d.ts.map +1 -1
- package/dist/backend/backend/src/services/harness/harness.types.js.map +1 -1
- package/dist/backend/backend/src/services/harness/login-broker.service.d.ts +19 -4
- package/dist/backend/backend/src/services/harness/login-broker.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/harness/login-broker.service.js +46 -7
- package/dist/backend/backend/src/services/harness/login-broker.service.js.map +1 -1
- package/dist/backend/backend/src/services/harness/owner-login-request.d.ts +18 -2
- package/dist/backend/backend/src/services/harness/owner-login-request.d.ts.map +1 -1
- package/dist/backend/backend/src/services/harness/owner-login-request.js +31 -7
- package/dist/backend/backend/src/services/harness/owner-login-request.js.map +1 -1
- package/dist/backend/backend/src/services/marketplace/marketplace-installer.service.d.ts +21 -0
- package/dist/backend/backend/src/services/marketplace/marketplace-installer.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/marketplace/marketplace-installer.service.js +39 -1
- package/dist/backend/backend/src/services/marketplace/marketplace-installer.service.js.map +1 -1
- package/dist/backend/backend/src/services/messaging/queue-processor.service.d.ts +11 -0
- package/dist/backend/backend/src/services/messaging/queue-processor.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/messaging/queue-processor.service.js +29 -0
- package/dist/backend/backend/src/services/messaging/queue-processor.service.js.map +1 -1
- package/dist/backend/backend/src/services/messaging/spend-capped-delivery.d.ts +54 -0
- package/dist/backend/backend/src/services/messaging/spend-capped-delivery.d.ts.map +1 -0
- package/dist/backend/backend/src/services/messaging/spend-capped-delivery.js +65 -0
- package/dist/backend/backend/src/services/messaging/spend-capped-delivery.js.map +1 -0
- package/dist/backend/backend/src/services/messaging/sub-agent-message-queue.service.d.ts +5 -0
- package/dist/backend/backend/src/services/messaging/sub-agent-message-queue.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/messaging/sub-agent-message-queue.service.js +13 -0
- package/dist/backend/backend/src/services/messaging/sub-agent-message-queue.service.js.map +1 -1
- package/dist/backend/backend/src/services/microsoft/microsoft-todo.service.d.ts +87 -5
- package/dist/backend/backend/src/services/microsoft/microsoft-todo.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/microsoft/microsoft-todo.service.js +151 -12
- package/dist/backend/backend/src/services/microsoft/microsoft-todo.service.js.map +1 -1
- package/dist/backend/backend/src/services/microsoft/microsoft-token.service.d.ts +17 -4
- package/dist/backend/backend/src/services/microsoft/microsoft-token.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/microsoft/microsoft-token.service.js +45 -17
- package/dist/backend/backend/src/services/microsoft/microsoft-token.service.js.map +1 -1
- package/dist/backend/backend/src/services/monitoring/claude-session-tokens.service.d.ts +118 -2
- package/dist/backend/backend/src/services/monitoring/claude-session-tokens.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/monitoring/claude-session-tokens.service.js +213 -45
- package/dist/backend/backend/src/services/monitoring/claude-session-tokens.service.js.map +1 -1
- package/dist/backend/backend/src/services/monitoring/claude-transcript-sync.service.d.ts +53 -1
- package/dist/backend/backend/src/services/monitoring/claude-transcript-sync.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/monitoring/claude-transcript-sync.service.js +137 -60
- package/dist/backend/backend/src/services/monitoring/claude-transcript-sync.service.js.map +1 -1
- package/dist/backend/backend/src/services/monitoring/model-pricing.d.ts +2 -1
- package/dist/backend/backend/src/services/monitoring/model-pricing.d.ts.map +1 -1
- package/dist/backend/backend/src/services/monitoring/model-pricing.js +13 -0
- package/dist/backend/backend/src/services/monitoring/model-pricing.js.map +1 -1
- package/dist/backend/backend/src/services/monitoring/token-usage.service.d.ts +9 -0
- package/dist/backend/backend/src/services/monitoring/token-usage.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/monitoring/token-usage.service.js +32 -3
- package/dist/backend/backend/src/services/monitoring/token-usage.service.js.map +1 -1
- package/dist/backend/backend/src/services/people/acting-for.service.d.ts +151 -0
- package/dist/backend/backend/src/services/people/acting-for.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/people/acting-for.service.js +224 -0
- package/dist/backend/backend/src/services/people/acting-for.service.js.map +1 -0
- package/dist/backend/backend/src/services/people/dedicated-agent.d.ts +89 -0
- package/dist/backend/backend/src/services/people/dedicated-agent.d.ts.map +1 -0
- package/dist/backend/backend/src/services/people/dedicated-agent.js +113 -0
- package/dist/backend/backend/src/services/people/dedicated-agent.js.map +1 -0
- package/dist/backend/backend/src/services/people/grant-sharing.d.ts +79 -0
- package/dist/backend/backend/src/services/people/grant-sharing.d.ts.map +1 -0
- package/dist/backend/backend/src/services/people/grant-sharing.js +135 -0
- package/dist/backend/backend/src/services/people/grant-sharing.js.map +1 -0
- package/dist/backend/backend/src/services/people/people-directory.service.d.ts +181 -0
- package/dist/backend/backend/src/services/people/people-directory.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/people/people-directory.service.js +317 -0
- package/dist/backend/backend/src/services/people/people-directory.service.js.map +1 -0
- package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.js.map +1 -1
- package/dist/backend/backend/src/services/runtime-fallback/effective-runtime.d.ts +29 -1
- package/dist/backend/backend/src/services/runtime-fallback/effective-runtime.d.ts.map +1 -1
- package/dist/backend/backend/src/services/runtime-fallback/effective-runtime.js +40 -0
- package/dist/backend/backend/src/services/runtime-fallback/effective-runtime.js.map +1 -1
- package/dist/backend/backend/src/services/runtime-fallback/runtime-availability.d.ts +8 -1
- package/dist/backend/backend/src/services/runtime-fallback/runtime-availability.d.ts.map +1 -1
- package/dist/backend/backend/src/services/runtime-fallback/runtime-availability.js +16 -2
- package/dist/backend/backend/src/services/runtime-fallback/runtime-availability.js.map +1 -1
- package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.service.d.ts +60 -1
- package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.service.js +140 -8
- package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.service.js.map +1 -1
- package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.store.js +1 -1
- package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.store.js.map +1 -1
- package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.types.d.ts +20 -7
- package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.types.d.ts.map +1 -1
- package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.types.js +24 -7
- package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.types.js.map +1 -1
- package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.wiring.d.ts.map +1 -1
- package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.wiring.js +12 -2
- package/dist/backend/backend/src/services/runtime-fallback/runtime-fallback.wiring.js.map +1 -1
- package/dist/backend/backend/src/services/runtime-fallback/runtime-usage-probe.d.ts +7 -1
- package/dist/backend/backend/src/services/runtime-fallback/runtime-usage-probe.d.ts.map +1 -1
- package/dist/backend/backend/src/services/runtime-fallback/runtime-usage-probe.js +18 -3
- package/dist/backend/backend/src/services/runtime-fallback/runtime-usage-probe.js.map +1 -1
- package/dist/backend/backend/src/services/security/approval-activity.service.d.ts +203 -0
- package/dist/backend/backend/src/services/security/approval-activity.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/security/approval-activity.service.js +279 -0
- package/dist/backend/backend/src/services/security/approval-activity.service.js.map +1 -0
- package/dist/backend/backend/src/services/skill/skill.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/skill/skill.service.js +14 -3
- package/dist/backend/backend/src/services/skill/skill.service.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-agent-dm.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-agent-dm.service.js +3 -0
- package/dist/backend/backend/src/services/slack/slack-agent-dm.service.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-mention-resolver.d.ts +22 -0
- package/dist/backend/backend/src/services/slack/slack-mention-resolver.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-mention-resolver.js +50 -0
- package/dist/backend/backend/src/services/slack/slack-mention-resolver.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.d.ts +10 -0
- package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js +51 -0
- package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts +54 -1
- package/dist/backend/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-team-channel.service.js +260 -20
- package/dist/backend/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
- package/dist/backend/backend/src/services/spend/spend-cap-command.js +1 -1
- package/dist/backend/backend/src/services/spend/spend-cap-command.js.map +1 -1
- package/dist/backend/backend/src/services/spend/spend-cap.service.d.ts +48 -1
- package/dist/backend/backend/src/services/spend/spend-cap.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/spend/spend-cap.service.js +85 -2
- package/dist/backend/backend/src/services/spend/spend-cap.service.js.map +1 -1
- package/dist/backend/backend/src/services/task-pool/completion-evidence.service.d.ts +105 -0
- package/dist/backend/backend/src/services/task-pool/completion-evidence.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/task-pool/completion-evidence.service.js +238 -0
- package/dist/backend/backend/src/services/task-pool/completion-evidence.service.js.map +1 -0
- package/dist/backend/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/task-pool/task-pool.service.js +4 -0
- package/dist/backend/backend/src/services/task-pool/task-pool.service.js.map +1 -1
- package/dist/backend/backend/src/services/usage/usage-stats.service.d.ts +101 -14
- package/dist/backend/backend/src/services/usage/usage-stats.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/usage/usage-stats.service.js +183 -61
- package/dist/backend/backend/src/services/usage/usage-stats.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/agent-auto-claim.service.d.ts +2 -0
- package/dist/backend/backend/src/services/v3/agent-auto-claim.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/agent-auto-claim.service.js +9 -0
- package/dist/backend/backend/src/services/v3/agent-auto-claim.service.js.map +1 -1
- package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.d.ts +10 -0
- package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.d.ts.map +1 -1
- package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.js +45 -2
- package/dist/backend/backend/src/services/v3/workitem-dispatch.subscriber.js.map +1 -1
- package/dist/backend/backend/src/types/index.d.ts +12 -1
- package/dist/backend/backend/src/types/index.d.ts.map +1 -1
- package/dist/backend/backend/src/types/index.js.map +1 -1
- package/dist/backend/backend/src/types/messaging.types.d.ts +5 -0
- package/dist/backend/backend/src/types/messaging.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/messaging.types.js.map +1 -1
- package/dist/backend/backend/src/types/v2/completion-evidence.types.d.ts +77 -0
- package/dist/backend/backend/src/types/v2/completion-evidence.types.d.ts.map +1 -0
- package/dist/backend/backend/src/types/v2/completion-evidence.types.js +119 -0
- package/dist/backend/backend/src/types/v2/completion-evidence.types.js.map +1 -0
- package/dist/backend/backend/src/types/v2/work-item.types.d.ts +13 -0
- package/dist/backend/backend/src/types/v2/work-item.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/v2/work-item.types.js.map +1 -1
- package/dist/backend/build-info.json +2 -2
- package/dist/backend/config/constants.d.ts +11 -0
- package/dist/backend/config/constants.d.ts.map +1 -1
- package/dist/backend/config/constants.js +11 -0
- package/dist/backend/config/constants.js.map +1 -1
- package/dist/cli/backend/src/constants.d.ts +181 -2
- package/dist/cli/backend/src/constants.d.ts.map +1 -1
- package/dist/cli/backend/src/constants.js +183 -2
- package/dist/cli/backend/src/constants.js.map +1 -1
- package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts +13 -0
- package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/agent-registration.service.js +28 -3
- package/dist/cli/backend/src/services/agent/agent-registration.service.js.map +1 -1
- package/dist/cli/backend/src/services/agent/control-plane-guard.service.d.ts +3 -2
- package/dist/cli/backend/src/services/agent/control-plane-guard.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/control-plane-guard.service.js +14 -3
- package/dist/cli/backend/src/services/agent/control-plane-guard.service.js.map +1 -1
- package/dist/cli/backend/src/services/agent/fresh-task-conversation.service.d.ts +28 -1
- package/dist/cli/backend/src/services/agent/fresh-task-conversation.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/fresh-task-conversation.service.js +48 -4
- package/dist/cli/backend/src/services/agent/fresh-task-conversation.service.js.map +1 -1
- package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.d.ts +2 -1
- package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.js +17 -4
- package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.js.map +1 -1
- package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.d.ts +14 -0
- package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.js +38 -0
- package/dist/cli/backend/src/services/agent/runtime-exit-monitor.service.js.map +1 -1
- package/dist/cli/backend/src/services/agent/runtime-session-recovery.d.ts +34 -0
- package/dist/cli/backend/src/services/agent/runtime-session-recovery.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/runtime-session-recovery.js +49 -5
- package/dist/cli/backend/src/services/agent/runtime-session-recovery.js.map +1 -1
- package/dist/cli/backend/src/services/ai/prompt-modules/communication.module.d.ts.map +1 -1
- package/dist/cli/backend/src/services/ai/prompt-modules/communication.module.js +8 -1
- package/dist/cli/backend/src/services/ai/prompt-modules/communication.module.js.map +1 -1
- package/dist/cli/backend/src/services/ai/prompt-modules/lazy-anti-patterns.module.js +1 -1
- package/dist/cli/backend/src/services/ai/prompt-modules/lazy-anti-patterns.module.js.map +1 -1
- package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts +55 -0
- package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.js +80 -0
- package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.js.map +1 -1
- package/dist/cli/backend/src/services/cloud/cloud-device-pairing.client.d.ts +1 -1
- package/dist/cli/backend/src/services/cloud/cloud-device-pairing.client.js +1 -1
- package/dist/cli/backend/src/services/cloud/cloud-sync.service.d.ts +74 -4
- package/dist/cli/backend/src/services/cloud/cloud-sync.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/cloud/cloud-sync.service.js +204 -56
- package/dist/cli/backend/src/services/cloud/cloud-sync.service.js.map +1 -1
- package/dist/cli/backend/src/services/cloud/cloud-sync.types.d.ts +19 -0
- package/dist/cli/backend/src/services/cloud/cloud-sync.types.d.ts.map +1 -1
- package/dist/cli/backend/src/services/cloud/cloud-sync.types.js.map +1 -1
- package/dist/cli/backend/src/services/decisions/decision.service.d.ts +9 -0
- package/dist/cli/backend/src/services/decisions/decision.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/decisions/decision.service.js +11 -0
- package/dist/cli/backend/src/services/decisions/decision.service.js.map +1 -1
- package/dist/cli/backend/src/services/harness/claude-accounts.d.ts +207 -0
- package/dist/cli/backend/src/services/harness/claude-accounts.d.ts.map +1 -0
- package/dist/cli/backend/src/services/harness/claude-accounts.js +306 -0
- package/dist/cli/backend/src/services/harness/claude-accounts.js.map +1 -0
- package/dist/cli/backend/src/services/harness/harness-credentials.store.d.ts +35 -0
- package/dist/cli/backend/src/services/harness/harness-credentials.store.d.ts.map +1 -1
- package/dist/cli/backend/src/services/harness/harness-credentials.store.js +48 -0
- package/dist/cli/backend/src/services/harness/harness-credentials.store.js.map +1 -1
- package/dist/cli/backend/src/services/harness/harness-relogin.service.d.ts +70 -1
- package/dist/cli/backend/src/services/harness/harness-relogin.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/harness/harness-relogin.service.js +156 -19
- package/dist/cli/backend/src/services/harness/harness-relogin.service.js.map +1 -1
- package/dist/cli/backend/src/services/harness/harness.types.d.ts +2 -0
- package/dist/cli/backend/src/services/harness/harness.types.d.ts.map +1 -1
- package/dist/cli/backend/src/services/harness/harness.types.js.map +1 -1
- package/dist/cli/backend/src/services/harness/login-broker.service.d.ts +19 -4
- package/dist/cli/backend/src/services/harness/login-broker.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/harness/login-broker.service.js +46 -7
- package/dist/cli/backend/src/services/harness/login-broker.service.js.map +1 -1
- package/dist/cli/backend/src/services/harness/owner-login-request.d.ts +18 -2
- package/dist/cli/backend/src/services/harness/owner-login-request.d.ts.map +1 -1
- package/dist/cli/backend/src/services/harness/owner-login-request.js +31 -7
- package/dist/cli/backend/src/services/harness/owner-login-request.js.map +1 -1
- package/dist/cli/backend/src/services/marketplace/marketplace-installer.service.d.ts +21 -0
- package/dist/cli/backend/src/services/marketplace/marketplace-installer.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/marketplace/marketplace-installer.service.js +39 -1
- package/dist/cli/backend/src/services/marketplace/marketplace-installer.service.js.map +1 -1
- package/dist/cli/backend/src/services/messaging/queue-processor.service.d.ts +11 -0
- package/dist/cli/backend/src/services/messaging/queue-processor.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/messaging/queue-processor.service.js +29 -0
- package/dist/cli/backend/src/services/messaging/queue-processor.service.js.map +1 -1
- package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.d.ts +5 -0
- package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.js +13 -0
- package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.js.map +1 -1
- package/dist/cli/backend/src/services/monitoring/claude-session-tokens.service.d.ts +197 -0
- package/dist/cli/backend/src/services/monitoring/claude-session-tokens.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/monitoring/claude-session-tokens.service.js +455 -0
- package/dist/cli/backend/src/services/monitoring/claude-session-tokens.service.js.map +1 -0
- package/dist/cli/backend/src/services/monitoring/model-pricing.d.ts +2 -1
- package/dist/cli/backend/src/services/monitoring/model-pricing.d.ts.map +1 -1
- package/dist/cli/backend/src/services/monitoring/model-pricing.js +13 -0
- package/dist/cli/backend/src/services/monitoring/model-pricing.js.map +1 -1
- package/dist/cli/backend/src/services/monitoring/token-usage.service.d.ts +9 -0
- package/dist/cli/backend/src/services/monitoring/token-usage.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/monitoring/token-usage.service.js +32 -3
- package/dist/cli/backend/src/services/monitoring/token-usage.service.js.map +1 -1
- package/dist/cli/backend/src/services/people/acting-for.service.d.ts +151 -0
- package/dist/cli/backend/src/services/people/acting-for.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/people/acting-for.service.js +224 -0
- package/dist/cli/backend/src/services/people/acting-for.service.js.map +1 -0
- package/dist/cli/backend/src/services/people/dedicated-agent.d.ts +89 -0
- package/dist/cli/backend/src/services/people/dedicated-agent.d.ts.map +1 -0
- package/dist/cli/backend/src/services/people/dedicated-agent.js +113 -0
- package/dist/cli/backend/src/services/people/dedicated-agent.js.map +1 -0
- package/dist/cli/backend/src/services/people/people-directory.service.d.ts +181 -0
- package/dist/cli/backend/src/services/people/people-directory.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/people/people-directory.service.js +317 -0
- package/dist/cli/backend/src/services/people/people-directory.service.js.map +1 -0
- package/dist/cli/backend/src/services/runtime-fallback/effective-runtime.d.ts +29 -1
- package/dist/cli/backend/src/services/runtime-fallback/effective-runtime.d.ts.map +1 -1
- package/dist/cli/backend/src/services/runtime-fallback/effective-runtime.js +40 -0
- package/dist/cli/backend/src/services/runtime-fallback/effective-runtime.js.map +1 -1
- package/dist/cli/backend/src/services/runtime-fallback/runtime-fallback.types.d.ts +20 -7
- package/dist/cli/backend/src/services/runtime-fallback/runtime-fallback.types.d.ts.map +1 -1
- package/dist/cli/backend/src/services/runtime-fallback/runtime-fallback.types.js +24 -7
- package/dist/cli/backend/src/services/runtime-fallback/runtime-fallback.types.js.map +1 -1
- package/dist/cli/backend/src/services/skill/skill.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/skill/skill.service.js +14 -3
- package/dist/cli/backend/src/services/skill/skill.service.js.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-agent-dm.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-agent-dm.service.js +3 -0
- package/dist/cli/backend/src/services/slack/slack-agent-dm.service.js.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-mention-resolver.d.ts +22 -0
- package/dist/cli/backend/src/services/slack/slack-mention-resolver.d.ts.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-mention-resolver.js +50 -0
- package/dist/cli/backend/src/services/slack/slack-mention-resolver.js.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.d.ts +10 -0
- package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.d.ts.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.js +51 -0
- package/dist/cli/backend/src/services/slack/slack-orchestrator-bridge.js.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts +54 -1
- package/dist/cli/backend/src/services/slack/slack-team-channel.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/slack/slack-team-channel.service.js +260 -20
- package/dist/cli/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
- package/dist/cli/backend/src/services/task-pool/task-pool.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/task-pool/task-pool.service.js +4 -0
- package/dist/cli/backend/src/services/task-pool/task-pool.service.js.map +1 -1
- package/dist/cli/backend/src/types/index.d.ts +12 -1
- package/dist/cli/backend/src/types/index.d.ts.map +1 -1
- package/dist/cli/backend/src/types/index.js.map +1 -1
- package/dist/cli/backend/src/types/messaging.types.d.ts +5 -0
- package/dist/cli/backend/src/types/messaging.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/messaging.types.js.map +1 -1
- package/dist/cli/backend/src/types/v2/work-item.types.d.ts +13 -0
- package/dist/cli/backend/src/types/v2/work-item.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/v2/work-item.types.js.map +1 -1
- package/dist/cli/cli/src/utils/marketplace.d.ts +21 -0
- package/dist/cli/cli/src/utils/marketplace.d.ts.map +1 -1
- package/dist/cli/cli/src/utils/marketplace.js +35 -1
- package/dist/cli/cli/src/utils/marketplace.js.map +1 -1
- package/dist/cli/config/constants.d.ts +11 -0
- package/dist/cli/config/constants.d.ts.map +1 -1
- package/dist/cli/config/constants.js +11 -0
- package/dist/cli/config/constants.js.map +1 -1
- package/dist/cli/config/skills/marketplace-registry.d.ts +4 -4
- package/dist/cli/config/skills/marketplace-registry.js +4 -4
- package/frontend/dist/assets/index-465d1f8f.js +4955 -0
- package/frontend/dist/assets/index-5e967795.css +42 -0
- package/frontend/dist/index.html +2 -2
- package/package.json +1 -1
- package/packages/crewly-agent/src/runtime/tool-registry.test.ts +45 -0
- package/packages/crewly-agent/src/runtime/tool-registry.ts +40 -5
- package/packages/crewly-agent/src/test/isolated-home.test.ts +24 -0
- package/frontend/dist/assets/index-20a67829.css +0 -42
- package/frontend/dist/assets/index-49f50b45.js +0 -4952
|
@@ -9,7 +9,12 @@ print_usage() {
|
|
|
9
9
|
cat <<'EOF_USAGE'
|
|
10
10
|
Usage:
|
|
11
11
|
# CLI flags (preferred — avoids shell escaping issues)
|
|
12
|
-
bash execute.sh --session dev-1 --status done --summary "Fixed the bug" --project /path/to/project
|
|
12
|
+
bash execute.sh --session dev-1 --status done --summary "Fixed the bug" --project /path/to/project \
|
|
13
|
+
--artifact src/fix.ts --command "npm test" --exit-code 0 --output-tail "42 passed"
|
|
14
|
+
|
|
15
|
+
# Could not finish: done with a blocked step is recorded as BLOCKED, not done
|
|
16
|
+
bash execute.sh --session dev-1 --status done --summary "Fix written, tests blocked" \
|
|
17
|
+
--blocked-step "npm test" --blocked-reason "test DB unreachable"
|
|
13
18
|
|
|
14
19
|
# Summary from stdin (for multi-line or special characters)
|
|
15
20
|
echo "Fixed the bug — it's working" | bash execute.sh --session dev-1 --status done --project /path
|
|
@@ -37,6 +42,18 @@ Options:
|
|
|
37
42
|
--progress Progress percentage (0-100, for structured format)
|
|
38
43
|
--structured Use structured StatusReport format (true/false)
|
|
39
44
|
--json | -j Raw JSON payload (same as legacy)
|
|
45
|
+
|
|
46
|
+
Evidence (status done — #873: "done" needs evidence):
|
|
47
|
+
--artifact <path> A file the work produced (absolute, relative to the
|
|
48
|
+
project/worktree, or an https URL). Must exist. Repeatable.
|
|
49
|
+
--command <cmd> A command you ran. Follow it with --exit-code (required)
|
|
50
|
+
--exit-code <n> and optionally --output-tail. Repeatable as a group.
|
|
51
|
+
--output-tail <text> Last lines of that command's output.
|
|
52
|
+
--blocked-step <step> You could not finish: the step that failed ...
|
|
53
|
+
--blocked-reason <why> ... and why. The WorkItem is recorded as BLOCKED, not done.
|
|
54
|
+
--evidence <json> Raw evidence array, e.g. '[{"type":"artifact","path":"/abs/f"}]'
|
|
55
|
+
A non-zero --exit-code or a missing artifact is rejected by the server. Without
|
|
56
|
+
any evidence, done is accepted this release with a warning; next release it is refused.
|
|
40
57
|
--help | -h Show this help
|
|
41
58
|
EOF_USAGE
|
|
42
59
|
}
|
|
@@ -52,6 +69,28 @@ TASK_ID=""
|
|
|
52
69
|
WORK_ITEM_ID=""
|
|
53
70
|
PROGRESS=""
|
|
54
71
|
STRUCTURED="false"
|
|
72
|
+
# Evidence entries built from flags (#873), as a JSON array.
|
|
73
|
+
FLAG_EVIDENCE='[]'
|
|
74
|
+
BLOCKED_STEP=""
|
|
75
|
+
BLOCKED_REASON=""
|
|
76
|
+
EVIDENCE_ARG=""
|
|
77
|
+
|
|
78
|
+
# add_evidence <jq-object-expression> [jq --arg pairs...]
|
|
79
|
+
# Appends one entry to FLAG_EVIDENCE.
|
|
80
|
+
add_evidence() {
|
|
81
|
+
local expr="$1"; shift
|
|
82
|
+
FLAG_EVIDENCE=$(printf '%s' "$FLAG_EVIDENCE" | jq -c "$@" ". + [${expr}]")
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
# set_last_command_field <field> <jq value expression> [jq --arg/--argjson pairs...]
|
|
86
|
+
# Sets a field on the most recent --command entry; refuses when there is none.
|
|
87
|
+
set_last_command_field() {
|
|
88
|
+
local field="$1" valexpr="$2" flag="$3"; shift 3
|
|
89
|
+
if [ "$(printf '%s' "$FLAG_EVIDENCE" | jq -r 'if length > 0 and .[-1].type == "command" then "yes" else "no" end')" != "yes" ]; then
|
|
90
|
+
error_exit "${flag} must follow --command <cmd>"
|
|
91
|
+
fi
|
|
92
|
+
FLAG_EVIDENCE=$(printf '%s' "$FLAG_EVIDENCE" | jq -c "$@" ".[-1].${field} = ${valexpr}")
|
|
93
|
+
}
|
|
55
94
|
|
|
56
95
|
# Detect legacy JSON argument as the first parameter
|
|
57
96
|
if [[ $# -gt 0 && ${1:0:1} == '{' ]]; then
|
|
@@ -109,6 +148,35 @@ while [[ $# -gt 0 ]]; do
|
|
|
109
148
|
INPUT_JSON="$2"
|
|
110
149
|
shift 2
|
|
111
150
|
;;
|
|
151
|
+
--artifact)
|
|
152
|
+
add_evidence '{type: "artifact", path: $p}' --arg p "$2"
|
|
153
|
+
shift 2
|
|
154
|
+
;;
|
|
155
|
+
--command)
|
|
156
|
+
add_evidence '{type: "command", command: $c}' --arg c "$2"
|
|
157
|
+
shift 2
|
|
158
|
+
;;
|
|
159
|
+
--exit-code)
|
|
160
|
+
[[ "$2" =~ ^-?[0-9]+$ ]] || error_exit "--exit-code must be an integer (got \"$2\")"
|
|
161
|
+
set_last_command_field exitCode '($n | tonumber)' --exit-code --arg n "$2"
|
|
162
|
+
shift 2
|
|
163
|
+
;;
|
|
164
|
+
--output-tail)
|
|
165
|
+
set_last_command_field outputTail '$t' --output-tail --arg t "$2"
|
|
166
|
+
shift 2
|
|
167
|
+
;;
|
|
168
|
+
--blocked-step)
|
|
169
|
+
BLOCKED_STEP="$2"
|
|
170
|
+
shift 2
|
|
171
|
+
;;
|
|
172
|
+
--blocked-reason)
|
|
173
|
+
BLOCKED_REASON="$2"
|
|
174
|
+
shift 2
|
|
175
|
+
;;
|
|
176
|
+
--evidence)
|
|
177
|
+
EVIDENCE_ARG="$2"
|
|
178
|
+
shift 2
|
|
179
|
+
;;
|
|
112
180
|
--help|-h)
|
|
113
181
|
print_usage
|
|
114
182
|
exit 0
|
|
@@ -152,6 +220,7 @@ if [ -n "$INPUT_JSON" ]; then
|
|
|
152
220
|
[ -z "$AGENT_ROLE" ] && AGENT_ROLE=$(printf '%s' "$INPUT" | jq -r '.role // .agentRole // empty')
|
|
153
221
|
ARTIFACTS=$(printf '%s' "$INPUT" | jq -c '.artifacts // empty')
|
|
154
222
|
BLOCKERS=$(printf '%s' "$INPUT" | jq -c '.blockers // empty')
|
|
223
|
+
[ -z "$EVIDENCE_ARG" ] && EVIDENCE_ARG=$(printf '%s' "$INPUT" | jq -c '.evidence // empty')
|
|
155
224
|
USE_STRUCTURED=$(printf '%s' "$INPUT" | jq -r '.structured // "false"')
|
|
156
225
|
[ "$USE_STRUCTURED" = "true" ] && STRUCTURED="true"
|
|
157
226
|
else
|
|
@@ -159,6 +228,24 @@ else
|
|
|
159
228
|
BLOCKERS=""
|
|
160
229
|
fi
|
|
161
230
|
|
|
231
|
+
# Assemble the evidence block (#873): --evidence / JSON `evidence` first, then
|
|
232
|
+
# the entries from --artifact / --command / --blocked-step flags.
|
|
233
|
+
if [ -n "$EVIDENCE_ARG" ]; then
|
|
234
|
+
if ! printf '%s' "$EVIDENCE_ARG" | jq -e 'type == "array"' >/dev/null 2>&1; then
|
|
235
|
+
error_exit "evidence must be a JSON array, e.g. '[{\"type\":\"artifact\",\"path\":\"/abs/file\"}]'"
|
|
236
|
+
fi
|
|
237
|
+
else
|
|
238
|
+
EVIDENCE_ARG='[]'
|
|
239
|
+
fi
|
|
240
|
+
if [ -n "$BLOCKED_STEP" ] || [ -n "$BLOCKED_REASON" ]; then
|
|
241
|
+
[ -n "$BLOCKED_STEP" ] && [ -n "$BLOCKED_REASON" ] || error_exit "--blocked-step and --blocked-reason go together: name the step that failed and why"
|
|
242
|
+
add_evidence '{type: "blocked", step: $s, reason: $r}' --arg s "$BLOCKED_STEP" --arg r "$BLOCKED_REASON"
|
|
243
|
+
fi
|
|
244
|
+
if [ "$(printf '%s' "$FLAG_EVIDENCE" | jq '[.[] | select(.type == "command" and (has("exitCode") | not))] | length')" != "0" ]; then
|
|
245
|
+
error_exit "every --command needs --exit-code <n> after it: the exit code is the evidence"
|
|
246
|
+
fi
|
|
247
|
+
EVIDENCE=$(jq -cn --argjson a "$EVIDENCE_ARG" --argjson b "$FLAG_EVIDENCE" '$a + $b')
|
|
248
|
+
|
|
162
249
|
require_param "sessionName (--session)" "$SESSION_NAME"
|
|
163
250
|
require_param "status (--status)" "$STATUS"
|
|
164
251
|
require_param "summary (--summary)" "$SUMMARY"
|
|
@@ -297,18 +384,31 @@ if [ "$STATUS" = "done" ]; then
|
|
|
297
384
|
# `completeItem`). Prior shape `{summary}` 400'd with
|
|
298
385
|
# `agentId is required` + `summary required in body.result`,
|
|
299
386
|
# forcing every worker into a direct-curl workaround.
|
|
387
|
+
#
|
|
388
|
+
# #873: the evidence block goes in result.evidence. Omitted when empty
|
|
389
|
+
# (the server then warns this release, refuses the next).
|
|
300
390
|
COMPLETE_BODY=$(jq -n \
|
|
301
391
|
--arg agentId "$SESSION_NAME" \
|
|
302
392
|
--arg summary "$SUMMARY" \
|
|
303
|
-
|
|
393
|
+
--argjson evidence "$EVIDENCE" \
|
|
394
|
+
'{agentId: $agentId, result: ({summary: $summary} + (if ($evidence | length) > 0 then {evidence: $evidence} else {} end))}')
|
|
304
395
|
# No `|| true`. A swallowed failure here is the inverse of the bug above:
|
|
305
396
|
# report-status would announce success while the WorkItem stayed open, and
|
|
306
397
|
# that is equally invisible. Report what actually happened either way.
|
|
307
398
|
if COMPLETE_RESULT=$(api_call POST "/task-pool/complete/${TARGET_WI_ID}" "$COMPLETE_BODY" 2>&1); then
|
|
308
399
|
# Echo the resolved id even on the happy path. Silent-but-correct is how
|
|
309
400
|
# this class hides — the caller must be able to see WHICH item closed.
|
|
310
|
-
|
|
311
|
-
|
|
401
|
+
# A `blocked` evidence entry is recorded as blocked, not done (#873);
|
|
402
|
+
# a completion without evidence carries the server's warning.
|
|
403
|
+
COMPLETE_WARNING=$(printf '%s' "$COMPLETE_RESULT" | jq -rs '(map(select(type == "object" and has("success"))) | last // {}) | .warning // empty' 2>/dev/null || true)
|
|
404
|
+
COMPLETE_RECORDED=$(printf '%s' "$COMPLETE_RESULT" | jq -rs '(map(select(type == "object" and has("success"))) | last // {}) | .recordedAs // empty' 2>/dev/null || true)
|
|
405
|
+
if [ "$COMPLETE_RECORDED" = "blocked" ]; then
|
|
406
|
+
jq -n --arg id "$TARGET_WI_ID" --arg how "$WI_RESOLUTION" \
|
|
407
|
+
'{workItem: $id, markedAs: "blocked", resolvedBy: $how, note: "blocked evidence: recorded as blocked, not done"}' >&2
|
|
408
|
+
else
|
|
409
|
+
jq -n --arg id "$TARGET_WI_ID" --arg how "$WI_RESOLUTION" --arg w "$COMPLETE_WARNING" \
|
|
410
|
+
'{completedWorkItem: $id, resolvedBy: $how} + (if $w != "" then {warning: $w} else {} end)' >&2
|
|
411
|
+
fi
|
|
312
412
|
else
|
|
313
413
|
jq -n --arg id "$TARGET_WI_ID" --arg err "$COMPLETE_RESULT" \
|
|
314
414
|
'{warning: "status reported, but completing the WorkItem FAILED — it is still open", workItemId: $id, error: $err}' >&2
|
|
@@ -76,3 +76,9 @@ bash execute.sh '{"to":"qa-1","message":"PR #42 is ready for review."}'
|
|
|
76
76
|
## Output
|
|
77
77
|
|
|
78
78
|
JSON confirmation of message delivery.
|
|
79
|
+
|
|
80
|
+
If the recipient cannot take the message now, the output has `"queued": true`
|
|
81
|
+
and `"delivered": false` with a `note`. With `"spendCapped": true` the
|
|
82
|
+
recipient has hit its daily token cap: the message waits and is delivered
|
|
83
|
+
automatically when the cap resets at midnight or the owner boosts it. Do not
|
|
84
|
+
resend a queued message.
|
|
@@ -98,4 +98,20 @@ require_param "message (--message)" "$MESSAGE"
|
|
|
98
98
|
|
|
99
99
|
BODY=$(jq -n --arg data "$MESSAGE" --arg mode "message" '{data: $data, mode: $mode}')
|
|
100
100
|
|
|
101
|
-
api_call POST "/terminal/${TO}/write" "$BODY"
|
|
101
|
+
RESP=$(api_call POST "/terminal/${TO}/write" "$BODY")
|
|
102
|
+
|
|
103
|
+
# A 202 `queued` answer means the message was NOT typed into the recipient's
|
|
104
|
+
# session yet: it is held on its queue (daily token cap `spendCapped`, agent
|
|
105
|
+
# still starting, session down, …) and delivered automatically later (#937).
|
|
106
|
+
# Say so plainly so the sender neither treats it as read nor resends it.
|
|
107
|
+
if printf '%s' "$RESP" | jq -e 'type == "object" and .queued == true' >/dev/null 2>&1; then
|
|
108
|
+
printf '%s' "$RESP" | jq -c --arg to "$TO" '. + {
|
|
109
|
+
delivered: false,
|
|
110
|
+
note: (if .spendCapped == true
|
|
111
|
+
then "Not delivered yet: \($to) has hit its daily token cap and takes no new turns. Your message is queued and is delivered automatically when the cap resets at midnight or the owner boosts it. Do not resend; do not wait on a reply today."
|
|
112
|
+
else "Not delivered yet: your message to \($to) is queued and is delivered automatically. Do not resend."
|
|
113
|
+
end)
|
|
114
|
+
}'
|
|
115
|
+
else
|
|
116
|
+
printf '%s\n' "$RESP"
|
|
117
|
+
fi
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Tests for agent send-message execute.sh
|
|
3
|
+
#
|
|
4
|
+
# Runs a COPY of the real execute.sh under a stubbed api_call (the
|
|
5
|
+
# set-team-lead / delegate-task pattern), so the script logic is exercised
|
|
6
|
+
# verbatim without a backend.
|
|
7
|
+
#
|
|
8
|
+
# Coverage:
|
|
9
|
+
# 1. POSTs to /terminal/<to>/write with mode=message
|
|
10
|
+
# 2. a normal write is printed unchanged
|
|
11
|
+
# 3. a daily-token-cap hold (202 queued, spendCapped) is reported as
|
|
12
|
+
# queued, not delivered, with a do-not-resend note (#937)
|
|
13
|
+
# 4. another queued answer is reported as queued, not delivered
|
|
14
|
+
# 5. an HTTP error still fails the skill
|
|
15
|
+
|
|
16
|
+
set -euo pipefail
|
|
17
|
+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
18
|
+
PASS=0
|
|
19
|
+
FAIL=0
|
|
20
|
+
|
|
21
|
+
CALL_LOG=$(mktemp)
|
|
22
|
+
RESP_FILE=$(mktemp)
|
|
23
|
+
SKILL_PARENT=$(mktemp -d)
|
|
24
|
+
trap 'rm -rf "$SKILL_PARENT" "$CALL_LOG" "$RESP_FILE"' EXIT
|
|
25
|
+
|
|
26
|
+
mkdir -p "$SKILL_PARENT/_common" "$SKILL_PARENT/core/send-message"
|
|
27
|
+
REAL_LIB="$(cd "$SCRIPT_DIR/../../.." && pwd)/_common/lib.sh"
|
|
28
|
+
cat > "$SKILL_PARENT/_common/lib.sh" <<STUB
|
|
29
|
+
source "$REAL_LIB"
|
|
30
|
+
api_call() {
|
|
31
|
+
local method="\$1" path="\$2" body="\${3:-}"
|
|
32
|
+
echo "\${method} \${path} \$(printf '%s' "\$body" | jq -c .)" >> "${CALL_LOG}"
|
|
33
|
+
if [ "\$(cat "${RESP_FILE}")" = "FAIL" ]; then
|
|
34
|
+
echo '{"error":true,"status":404,"details":"not found"}' >&2
|
|
35
|
+
return 1
|
|
36
|
+
fi
|
|
37
|
+
cat "${RESP_FILE}"
|
|
38
|
+
}
|
|
39
|
+
STUB
|
|
40
|
+
cp "$SCRIPT_DIR/execute.sh" "$SKILL_PARENT/core/send-message/execute.sh"
|
|
41
|
+
RUN="$SKILL_PARENT/core/send-message/execute.sh"
|
|
42
|
+
|
|
43
|
+
check() {
|
|
44
|
+
local desc="$1" haystack="$2" pattern="$3"
|
|
45
|
+
if printf '%s' "$haystack" | grep -qF -- "$pattern"; then
|
|
46
|
+
echo " PASS: $desc"; PASS=$((PASS + 1))
|
|
47
|
+
else
|
|
48
|
+
echo " FAIL: $desc (expected '$pattern' in: $haystack)"; FAIL=$((FAIL + 1))
|
|
49
|
+
fi
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
echo "=== agent send-message ==="
|
|
53
|
+
|
|
54
|
+
> "$CALL_LOG"
|
|
55
|
+
echo '{"success":true,"message":"Data written successfully"}' > "$RESP_FILE"
|
|
56
|
+
OUT=$(bash "$RUN" --to qa-1 --message "PR #42 is ready" 2>/dev/null)
|
|
57
|
+
check "posts to /write in message mode" "$(cat "$CALL_LOG")" 'POST /terminal/qa-1/write {"data":"PR #42 is ready","mode":"message"}'
|
|
58
|
+
check "a written message is printed unchanged" "$OUT" '"message":"Data written successfully"'
|
|
59
|
+
|
|
60
|
+
echo '{"success":true,"queued":true,"spendCapped":true,"message":"[SPEND_CAP] Ella hit its daily token cap (5M tokens); message queued"}' > "$RESP_FILE"
|
|
61
|
+
OUT=$(bash "$RUN" --to ella-1 --message "hi" 2>/dev/null)
|
|
62
|
+
check "cap hold: reported as not delivered" "$OUT" '"delivered":false'
|
|
63
|
+
check "cap hold: keeps queued + spendCapped" "$OUT" '"spendCapped":true'
|
|
64
|
+
check "cap hold: names the cap and says not to resend" "$OUT" 'ella-1 has hit its daily token cap'
|
|
65
|
+
check "cap hold: do-not-resend" "$OUT" 'Do not resend'
|
|
66
|
+
|
|
67
|
+
echo '{"success":true,"queued":true,"message":"Message queued until agent is ready"}' > "$RESP_FILE"
|
|
68
|
+
OUT=$(bash "$RUN" --to dana-1 --message "hi" 2>/dev/null)
|
|
69
|
+
check "other queue: reported as not delivered" "$OUT" '"delivered":false'
|
|
70
|
+
check "other queue: generic note" "$OUT" 'your message to dana-1 is queued'
|
|
71
|
+
|
|
72
|
+
echo 'FAIL' > "$RESP_FILE"
|
|
73
|
+
if bash "$RUN" --to ghost --message "hi" >/dev/null 2>&1; then
|
|
74
|
+
echo " FAIL: an HTTP error must fail the skill"; FAIL=$((FAIL + 1))
|
|
75
|
+
else
|
|
76
|
+
echo " PASS: an HTTP error fails the skill"; PASS=$((PASS + 1))
|
|
77
|
+
fi
|
|
78
|
+
|
|
79
|
+
echo ""
|
|
80
|
+
echo "Results: $PASS passed, $FAIL failed"
|
|
81
|
+
[ "$FAIL" -eq 0 ]
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: To Do Add
|
|
3
|
-
description: Add a task to one of the owner's Microsoft To Do lists — title, optional due date, note and
|
|
4
|
-
version: 1.
|
|
3
|
+
description: Add a task to one of the owner's Microsoft To Do lists — title, optional due date, note, importance and steps (checklist items) (via the Microsoft grant held by Crewly Cloud).
|
|
4
|
+
version: 1.1.0
|
|
5
5
|
category: productivity
|
|
6
6
|
skillType: claude-skill
|
|
7
7
|
assignableRoles:
|
|
@@ -18,6 +18,7 @@ triggers:
|
|
|
18
18
|
- add a microsoft to do task
|
|
19
19
|
- remind me in to do
|
|
20
20
|
- create an outlook task
|
|
21
|
+
- add a task with steps
|
|
21
22
|
tags:
|
|
22
23
|
- microsoft
|
|
23
24
|
- todo
|
|
@@ -35,8 +36,13 @@ execution:
|
|
|
35
36
|
```bash
|
|
36
37
|
bash execute.sh --title "Buy milk" # default list ("Tasks")
|
|
37
38
|
bash execute.sh --list Work --title "Send deck to Ann" --due 2026-10-01 --importance high --note "v3 is in Drive"
|
|
39
|
+
bash execute.sh --list Groceries --title "Costco" --steps "Eggs,Milk,Bread" # ONE task with three steps
|
|
38
40
|
```
|
|
39
41
|
|
|
42
|
+
When the owner asks for items as **steps of one task** (a shopping run, a
|
|
43
|
+
packing list), use `--steps` — do not put them in the note, and do not make
|
|
44
|
+
one task per item unless he asked for separate tasks.
|
|
45
|
+
|
|
40
46
|
| Flag | Meaning |
|
|
41
47
|
|---|---|
|
|
42
48
|
| `--title` | Task title (required) |
|
|
@@ -44,13 +50,21 @@ bash execute.sh --list Work --title "Send deck to Ann" --due 2026-10-01 --import
|
|
|
44
50
|
| `--due` | Due date `YYYY-MM-DD` |
|
|
45
51
|
| `--note` | Note shown under the task |
|
|
46
52
|
| `--importance` | `low` \| `normal` \| `high` |
|
|
53
|
+
| `--steps` | Comma-separated steps (checklist items), in order |
|
|
54
|
+
| `--step` | One step; repeat it for more (for a step that contains a comma) |
|
|
47
55
|
|
|
48
56
|
## Output
|
|
49
57
|
|
|
50
58
|
```json
|
|
51
59
|
{"success":true,"list":"Work","task":{"id":"AAMk…","title":"Send deck to Ann","status":"notStarted","importance":"high","due":"2026-10-01","note":"v3 is in Drive"}}
|
|
60
|
+
{"success":true,"list":"Groceries","task":{"id":"AAMk…","title":"Costco","status":"notStarted","steps":[{"id":"…","title":"Eggs","checked":false},{"id":"…","title":"Milk","checked":false}]}}
|
|
52
61
|
```
|
|
53
62
|
|
|
63
|
+
Steps are created after the task. If one fails, the task still exists and
|
|
64
|
+
the answer lists it in `failedSteps` (`[{"step":"Milk","error":"…"}]`):
|
|
65
|
+
add it with todo-update `--add-steps` — do **not** run todo-add again, that
|
|
66
|
+
would make a second task.
|
|
67
|
+
|
|
54
68
|
A list that does not exist is not created — make it with todo-lists
|
|
55
69
|
`--create` first.
|
|
56
70
|
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
# Usage:
|
|
8
8
|
# bash execute.sh --title "Buy milk" # default list
|
|
9
9
|
# bash execute.sh --list Work --title "Send deck to Ann" --due 2026-10-01 --importance high --note "v3 in Drive"
|
|
10
|
+
# bash execute.sh --list Groceries --title "Costco" --steps "Eggs,Milk,Bread" # one task, three steps
|
|
10
11
|
# bash execute.sh '{"list":"Groceries","title":"Eggs"}'
|
|
11
12
|
# =============================================================================
|
|
12
13
|
set -euo pipefail
|
|
@@ -18,7 +19,8 @@ print_usage() {
|
|
|
18
19
|
Usage:
|
|
19
20
|
bash execute.sh --title "Buy milk" # default list
|
|
20
21
|
bash execute.sh --list Work --title "Send deck to Ann" --due 2026-10-01 --importance high --note "v3 in Drive"
|
|
21
|
-
bash execute.sh
|
|
22
|
+
bash execute.sh --list Groceries --title "Costco" --steps "Eggs,Milk,Bread" # one task, three steps
|
|
23
|
+
bash execute.sh '{"list":"Groceries","title":"Costco","steps":["Eggs","Milk"]}'
|
|
22
24
|
|
|
23
25
|
Options:
|
|
24
26
|
--title, -t Task title (required)
|
|
@@ -26,6 +28,8 @@ Options:
|
|
|
26
28
|
--due Due date, YYYY-MM-DD
|
|
27
29
|
--note Note text shown under the task
|
|
28
30
|
--importance low | normal | high
|
|
31
|
+
--steps Comma-separated steps (checklist items) to create on the task
|
|
32
|
+
--step One step; repeat for more (use when a step contains a comma)
|
|
29
33
|
--help | -h Show this help
|
|
30
34
|
EOF_USAGE
|
|
31
35
|
}
|
|
@@ -38,6 +42,12 @@ fail_from() {
|
|
|
38
42
|
|
|
39
43
|
uri() { jq -rn --arg v "$1" '$v|@uri'; }
|
|
40
44
|
|
|
45
|
+
# Append step titles to a JSON array: $1 = array, $2 = text, $3 = "split" to
|
|
46
|
+
# split the text on commas. Titles are trimmed; empty ones are dropped.
|
|
47
|
+
add_steps() {
|
|
48
|
+
jq -c --arg v "$2" --arg mode "${3:-}" '. + (if $mode == "split" then ($v | split(",")) else [$v] end | map(gsub("^\\s+|\\s+$"; "")) | map(select(length > 0)))' <<<"$1"
|
|
49
|
+
}
|
|
50
|
+
|
|
41
51
|
# api_call may print a one-line warning to stderr (no CREWLY_SESSION_NAME);
|
|
42
52
|
# the backend answer is always the last line. On failure print the mapped
|
|
43
53
|
# failure JSON (fail_from) and return 1.
|
|
@@ -52,7 +62,7 @@ if [[ $# -gt 0 && ${1:0:1} == '{' ]]; then
|
|
|
52
62
|
INPUT_JSON="$1"
|
|
53
63
|
shift || true
|
|
54
64
|
fi
|
|
55
|
-
TITLE=""; LIST=""; DUE=""; NOTE=""; IMPORTANCE=""
|
|
65
|
+
TITLE=""; LIST=""; DUE=""; NOTE=""; IMPORTANCE=""; STEPS='[]'
|
|
56
66
|
while [[ $# -gt 0 ]]; do
|
|
57
67
|
case "$1" in
|
|
58
68
|
--title|-t) [ $# -ge 2 ] || error_exit "--title requires a value"; TITLE="$2"; shift 2 ;;
|
|
@@ -60,6 +70,8 @@ while [[ $# -gt 0 ]]; do
|
|
|
60
70
|
--due) [ $# -ge 2 ] || error_exit "--due requires a value"; DUE="$2"; shift 2 ;;
|
|
61
71
|
--note) [ $# -ge 2 ] || error_exit "--note requires a value"; NOTE="$2"; shift 2 ;;
|
|
62
72
|
--importance) [ $# -ge 2 ] || error_exit "--importance requires a value"; IMPORTANCE="$2"; shift 2 ;;
|
|
73
|
+
--steps) [ $# -ge 2 ] || error_exit "--steps requires a value"; STEPS=$(add_steps "$STEPS" "$2" split); shift 2 ;;
|
|
74
|
+
--step) [ $# -ge 2 ] || error_exit "--step requires a value"; STEPS=$(add_steps "$STEPS" "$2"); shift 2 ;;
|
|
63
75
|
--help|-h) print_usage; exit 0 ;;
|
|
64
76
|
*) error_exit "Unknown option: $1" ;;
|
|
65
77
|
esac
|
|
@@ -71,14 +83,18 @@ if [ -n "$INPUT_JSON" ]; then
|
|
|
71
83
|
[ -z "$DUE" ] && DUE=$(printf '%s' "$INPUT" | jq -r '.due // empty')
|
|
72
84
|
[ -z "$NOTE" ] && NOTE=$(printf '%s' "$INPUT" | jq -r '.note // empty')
|
|
73
85
|
[ -z "$IMPORTANCE" ] && IMPORTANCE=$(printf '%s' "$INPUT" | jq -r '.importance // empty')
|
|
86
|
+
if [ "$STEPS" = '[]' ]; then
|
|
87
|
+
STEPS=$(printf '%s' "$INPUT" | jq -c '.steps // [] | if type == "string" then split(",") else map(tostring) end | map(gsub("^\\s+|\\s+$"; "")) | map(select(length > 0))')
|
|
88
|
+
fi
|
|
74
89
|
fi
|
|
75
90
|
[ -n "$TITLE" ] || error_exit "--title is required"
|
|
76
91
|
if [ -n "$DUE" ] && ! [[ "$DUE" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]; then error_exit "--due must look like 2026-10-01"; fi
|
|
77
|
-
BODY=$(jq -cn --arg title "$TITLE" --arg list "$LIST" --arg due "$DUE" --arg note "$NOTE" --arg imp "$IMPORTANCE" \
|
|
92
|
+
BODY=$(jq -cn --arg title "$TITLE" --arg list "$LIST" --arg due "$DUE" --arg note "$NOTE" --arg imp "$IMPORTANCE" --argjson steps "$STEPS" \
|
|
78
93
|
'{title: $title}
|
|
79
94
|
+ (if $list != "" then {list: $list} else {} end)
|
|
80
95
|
+ (if $due != "" then {due: $due} else {} end)
|
|
81
96
|
+ (if $note != "" then {note: $note} else {} end)
|
|
82
|
-
+ (if $imp != "" then {importance: $imp} else {} end)
|
|
97
|
+
+ (if $imp != "" then {importance: $imp} else {} end)
|
|
98
|
+
+ (if ($steps | length) > 0 then {steps: $steps} else {} end)')
|
|
83
99
|
RESPONSE=$(call POST "/microsoft-todo/tasks" "$BODY") || { printf '%s\n' "$RESPONSE"; exit 1; }
|
|
84
|
-
printf '%s' "$RESPONSE" | jq -c '{success: true, list: .data.list.name, task: .data.task}'
|
|
100
|
+
printf '%s' "$RESPONSE" | jq -c '{success: true, list: .data.list.name, task: .data.task} + (if .data.failedSteps then {failedSteps: .data.failedSteps} else {} end)'
|
|
@@ -33,6 +33,8 @@ class H(BaseHTTPRequestHandler):
|
|
|
33
33
|
out = {'list': LIST, 'count': 1, 'tasks': [{'id': 'T1', 'title': 'Milk', 'status': 'notStarted', 'due': '2026-10-01'}]}
|
|
34
34
|
elif path == '/api/microsoft-todo/tasks':
|
|
35
35
|
out = {'list': LIST, 'task': {'id': 'T2', 'title': (data or {}).get('title'), 'status': 'notStarted'}}
|
|
36
|
+
if (data or {}).get('title') == 'partial':
|
|
37
|
+
out['failedSteps'] = [{'step': 'Milk', 'error': 'Forbidden: no'}]
|
|
36
38
|
elif method == 'PATCH':
|
|
37
39
|
out = {'list': LIST, 'task': {'id': path.rsplit('/', 1)[1], 'title': 'Milk', 'status': 'completed'}}
|
|
38
40
|
elif method == 'DELETE':
|
|
@@ -69,6 +71,18 @@ run '{"list":"Groceries","title":"Eggs"}' >/dev/null
|
|
|
69
71
|
check "json input" "$(last '.body')" '{"title":"Eggs","list":"Groceries"}'
|
|
70
72
|
check "title required" "$(run_err --list Work | jq -r .error)" "--title is required"
|
|
71
73
|
check "bad due" "$(run_err --title x --due tomorrow | jq -r .error)" "--due must look like 2026-10-01"
|
|
74
|
+
run --title "Costco" --steps "Eggs, Milk,,Bread " >/dev/null
|
|
75
|
+
check "steps: comma list, trimmed, empties dropped" "$(last '.body')" '{"title":"Costco","steps":["Eggs","Milk","Bread"]}'
|
|
76
|
+
run --title "Costco" --step "Eggs, large" --step Milk >/dev/null
|
|
77
|
+
check "steps: repeated --step keeps commas" "$(last '.body.steps')" '["Eggs, large","Milk"]'
|
|
78
|
+
run '{"title":"Costco","steps":["Eggs","Milk"]}' >/dev/null
|
|
79
|
+
check "steps: json array" "$(last '.body.steps')" '["Eggs","Milk"]'
|
|
80
|
+
run '{"title":"Costco","steps":"Eggs,Milk"}' >/dev/null
|
|
81
|
+
check "steps: json string" "$(last '.body.steps')" '["Eggs","Milk"]'
|
|
82
|
+
run --title "Plain" --steps " , " >/dev/null
|
|
83
|
+
check "steps: none left means no steps field" "$(last '.body')" '{"title":"Plain"}'
|
|
84
|
+
OUT=$(run --title partial --steps "Eggs,Milk")
|
|
85
|
+
check "steps: failed steps are reported" "$(printf '%s' "$OUT" | jq -c '[.success,.failedSteps]')" '[true,[{"step":"Milk","error":"Forbidden: no"}]]'
|
|
72
86
|
OUT=$(run --title no-grant || true)
|
|
73
87
|
check "not connected" "$(printf '%s' "$OUT" | jq -r .reason)" "not_connected"
|
|
74
88
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: To Do Tasks
|
|
3
|
-
description: List the tasks in one of the owner's Microsoft To Do lists — open tasks by default, --all to include completed ones (via the Microsoft grant held by Crewly Cloud). Read-only.
|
|
4
|
-
version: 1.
|
|
3
|
+
description: List the tasks in one of the owner's Microsoft To Do lists — open tasks by default, --all to include completed ones, with each task's steps (via the Microsoft grant held by Crewly Cloud). Read-only.
|
|
4
|
+
version: 1.1.0
|
|
5
5
|
category: productivity
|
|
6
6
|
skillType: claude-skill
|
|
7
7
|
assignableRoles:
|
|
@@ -46,7 +46,8 @@ bash execute.sh --list Work --limit 20 # default 50, max 100
|
|
|
46
46
|
```
|
|
47
47
|
|
|
48
48
|
`importance` appears only when not normal; `note` is plain text, cut at
|
|
49
|
-
200 characters. `
|
|
49
|
+
200 characters. `steps` (checklist items, in To Do order, each with `id`,
|
|
50
|
+
`title` and `checked`) appears only on tasks that have steps. `hasMore: true` means the list has more tasks than the
|
|
50
51
|
limit. Use the task `id` with todo-update.
|
|
51
52
|
|
|
52
53
|
## Failures
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: To Do Update
|
|
3
|
-
description: Complete, reopen, retitle, re-date or delete a task in one of the owner's Microsoft To Do lists (via the Microsoft grant held by Crewly Cloud).
|
|
4
|
-
version: 1.
|
|
3
|
+
description: Complete, reopen, retitle, re-date or delete a task — and add, tick, untick or remove its steps — in one of the owner's Microsoft To Do lists (via the Microsoft grant held by Crewly Cloud).
|
|
4
|
+
version: 1.1.0
|
|
5
5
|
category: productivity
|
|
6
6
|
skillType: claude-skill
|
|
7
7
|
assignableRoles:
|
|
@@ -38,8 +38,18 @@ bash execute.sh --list Work --task <id> --title "Send v4 deck" --due 2026-10-03
|
|
|
38
38
|
bash execute.sh --list Work --task <id> --due none # clear the due date
|
|
39
39
|
bash execute.sh --list Work --task <id> --reopen
|
|
40
40
|
bash execute.sh --list Work --task <id> --delete # cannot be undone
|
|
41
|
+
bash execute.sh --list Groceries --task <id> --add-steps "Butter,Ham"
|
|
42
|
+
bash execute.sh --list Groceries --task <id> --check-steps "Eggs,Milk" # tick steps
|
|
43
|
+
bash execute.sh --list Groceries --task <id> --uncheck-steps Eggs # untick
|
|
44
|
+
bash execute.sh --list Groceries --task <id> --remove-steps Bread # delete a step
|
|
41
45
|
```
|
|
42
46
|
|
|
47
|
+
Steps are named by title (case-insensitive) or by step id from todo-tasks.
|
|
48
|
+
`--add-step` / `--check-step` / `--uncheck-step` / `--remove-step` take one
|
|
49
|
+
step each and can be repeated, for a step whose title contains a comma.
|
|
50
|
+
Adding steps changes the existing task; it never creates a new one. A step
|
|
51
|
+
name that matches nothing (or two steps) fails before anything is changed.
|
|
52
|
+
|
|
43
53
|
`--task` is the id from todo-tasks. `--list` is the list the task is in
|
|
44
54
|
(name or id; the default list when omitted). Changes can be combined in one
|
|
45
55
|
call; `--delete` ignores the others.
|
|
@@ -48,6 +58,7 @@ call; `--delete` ignores the others.
|
|
|
48
58
|
|
|
49
59
|
```json
|
|
50
60
|
{"success":true,"list":"Groceries","task":{"id":"AAMk…","title":"Milk","status":"completed","completedAt":"2026-09-23"}}
|
|
61
|
+
{"success":true,"list":"Groceries","task":{"id":"AAMk…","title":"Costco","status":"notStarted","steps":[{"id":"…","title":"Eggs","checked":true},{"id":"…","title":"Butter","checked":false}]}}
|
|
51
62
|
{"success":true,"deleted":true,"list":"Work","taskId":"AAMk…"}
|
|
52
63
|
```
|
|
53
64
|
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
# bash execute.sh --list Work --task <taskId> --due none # clear the due date
|
|
11
11
|
# bash execute.sh --list Work --task <taskId> --reopen
|
|
12
12
|
# bash execute.sh --list Work --task <taskId> --delete
|
|
13
|
+
# bash execute.sh --list Groceries --task <taskId> --add-steps "Butter,Ham" --check-steps "Eggs"
|
|
13
14
|
# bash execute.sh '{"list":"Work","task":"AAMk…","complete":true}'
|
|
14
15
|
# =============================================================================
|
|
15
16
|
set -euo pipefail
|
|
@@ -24,6 +25,7 @@ Usage:
|
|
|
24
25
|
bash execute.sh --list Work --task <taskId> --due none # clear the due date
|
|
25
26
|
bash execute.sh --list Work --task <taskId> --reopen
|
|
26
27
|
bash execute.sh --list Work --task <taskId> --delete
|
|
28
|
+
bash execute.sh --list Groceries --task <taskId> --add-steps "Butter,Ham" --check-steps "Eggs"
|
|
27
29
|
bash execute.sh '{"list":"Work","task":"AAMk…","complete":true}'
|
|
28
30
|
|
|
29
31
|
Options:
|
|
@@ -36,6 +38,12 @@ Options:
|
|
|
36
38
|
--note Replace the note
|
|
37
39
|
--importance low | normal | high
|
|
38
40
|
--delete Delete the task (cannot be undone)
|
|
41
|
+
--add-steps Comma-separated steps to append to the task
|
|
42
|
+
--check-steps Comma-separated steps to tick, by title (case-insensitive) or step id
|
|
43
|
+
--uncheck-steps Comma-separated steps to untick, by title or id
|
|
44
|
+
--remove-steps Comma-separated steps to delete, by title or id
|
|
45
|
+
--add-step, --check-step, --uncheck-step, --remove-step
|
|
46
|
+
One step each; repeat for more (use when a step contains a comma)
|
|
39
47
|
--help | -h Show this help
|
|
40
48
|
EOF_USAGE
|
|
41
49
|
}
|
|
@@ -48,6 +56,17 @@ fail_from() {
|
|
|
48
56
|
|
|
49
57
|
uri() { jq -rn --arg v "$1" '$v|@uri'; }
|
|
50
58
|
|
|
59
|
+
# Append step titles / ids to a JSON array: $1 = array, $2 = text, $3 =
|
|
60
|
+
# "split" to split the text on commas. Trimmed; empty ones are dropped.
|
|
61
|
+
add_steps() {
|
|
62
|
+
jq -c --arg v "$2" --arg mode "${3:-}" '. + (if $mode == "split" then ($v | split(",")) else [$v] end | map(gsub("^\\s+|\\s+$"; "")) | map(select(length > 0)))' <<<"$1"
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
# Step list from the JSON input: $1 = key; an array or a comma string.
|
|
66
|
+
input_steps() {
|
|
67
|
+
printf '%s' "$INPUT" | jq -c --arg k "$1" '.[$k] // [] | if type == "string" then split(",") else map(tostring) end | map(gsub("^\\s+|\\s+$"; "")) | map(select(length > 0))'
|
|
68
|
+
}
|
|
69
|
+
|
|
51
70
|
# api_call may print a one-line warning to stderr (no CREWLY_SESSION_NAME);
|
|
52
71
|
# the backend answer is always the last line. On failure print the mapped
|
|
53
72
|
# failure JSON (fail_from) and return 1.
|
|
@@ -63,6 +82,7 @@ if [[ $# -gt 0 && ${1:0:1} == '{' ]]; then
|
|
|
63
82
|
shift || true
|
|
64
83
|
fi
|
|
65
84
|
TASK=""; LIST=""; COMPLETE=""; TITLE=""; DUE=""; NOTE=""; IMPORTANCE=""; DELETE=""
|
|
85
|
+
ADD_STEPS='[]'; CHECK_STEPS='[]'; UNCHECK_STEPS='[]'; REMOVE_STEPS='[]'
|
|
66
86
|
while [[ $# -gt 0 ]]; do
|
|
67
87
|
case "$1" in
|
|
68
88
|
--task) [ $# -ge 2 ] || error_exit "--task requires a value"; TASK="$2"; shift 2 ;;
|
|
@@ -74,6 +94,14 @@ while [[ $# -gt 0 ]]; do
|
|
|
74
94
|
--note) [ $# -ge 2 ] || error_exit "--note requires a value"; NOTE="$2"; shift 2 ;;
|
|
75
95
|
--importance) [ $# -ge 2 ] || error_exit "--importance requires a value"; IMPORTANCE="$2"; shift 2 ;;
|
|
76
96
|
--delete) DELETE="1"; shift ;;
|
|
97
|
+
--add-steps) [ $# -ge 2 ] || error_exit "--add-steps requires a value"; ADD_STEPS=$(add_steps "$ADD_STEPS" "$2" split); shift 2 ;;
|
|
98
|
+
--add-step) [ $# -ge 2 ] || error_exit "--add-step requires a value"; ADD_STEPS=$(add_steps "$ADD_STEPS" "$2"); shift 2 ;;
|
|
99
|
+
--check-steps) [ $# -ge 2 ] || error_exit "--check-steps requires a value"; CHECK_STEPS=$(add_steps "$CHECK_STEPS" "$2" split); shift 2 ;;
|
|
100
|
+
--check-step) [ $# -ge 2 ] || error_exit "--check-step requires a value"; CHECK_STEPS=$(add_steps "$CHECK_STEPS" "$2"); shift 2 ;;
|
|
101
|
+
--uncheck-steps) [ $# -ge 2 ] || error_exit "--uncheck-steps requires a value"; UNCHECK_STEPS=$(add_steps "$UNCHECK_STEPS" "$2" split); shift 2 ;;
|
|
102
|
+
--uncheck-step) [ $# -ge 2 ] || error_exit "--uncheck-step requires a value"; UNCHECK_STEPS=$(add_steps "$UNCHECK_STEPS" "$2"); shift 2 ;;
|
|
103
|
+
--remove-steps) [ $# -ge 2 ] || error_exit "--remove-steps requires a value"; REMOVE_STEPS=$(add_steps "$REMOVE_STEPS" "$2" split); shift 2 ;;
|
|
104
|
+
--remove-step) [ $# -ge 2 ] || error_exit "--remove-step requires a value"; REMOVE_STEPS=$(add_steps "$REMOVE_STEPS" "$2"); shift 2 ;;
|
|
77
105
|
--help|-h) print_usage; exit 0 ;;
|
|
78
106
|
*) error_exit "Unknown option: $1" ;;
|
|
79
107
|
esac
|
|
@@ -88,6 +116,10 @@ if [ -n "$INPUT_JSON" ]; then
|
|
|
88
116
|
[ -z "$NOTE" ] && NOTE=$(printf '%s' "$INPUT" | jq -r '.note // empty')
|
|
89
117
|
[ -z "$IMPORTANCE" ] && IMPORTANCE=$(printf '%s' "$INPUT" | jq -r '.importance // empty')
|
|
90
118
|
[ -z "$DELETE" ] && DELETE=$(printf '%s' "$INPUT" | jq -r 'if .delete == true then "1" else empty end')
|
|
119
|
+
[ "$ADD_STEPS" = '[]' ] && ADD_STEPS=$(input_steps addSteps)
|
|
120
|
+
[ "$CHECK_STEPS" = '[]' ] && CHECK_STEPS=$(input_steps checkSteps)
|
|
121
|
+
[ "$UNCHECK_STEPS" = '[]' ] && UNCHECK_STEPS=$(input_steps uncheckSteps)
|
|
122
|
+
[ "$REMOVE_STEPS" = '[]' ] && REMOVE_STEPS=$(input_steps removeSteps)
|
|
91
123
|
fi
|
|
92
124
|
[ -n "$TASK" ] || error_exit "--task is required (ids come from todo-tasks)"
|
|
93
125
|
if [ -n "$DELETE" ]; then
|
|
@@ -100,16 +132,22 @@ fi
|
|
|
100
132
|
if [ -n "$DUE" ] && [ "$DUE" != "none" ] && ! [[ "$DUE" =~ ^[0-9]{4}-[0-9]{2}-[0-9]{2}$ ]]; then
|
|
101
133
|
error_exit "--due must look like 2026-10-01, or none to clear it"
|
|
102
134
|
fi
|
|
103
|
-
|
|
104
|
-
|
|
135
|
+
STEP_CHANGES="${ADD_STEPS}${CHECK_STEPS}${UNCHECK_STEPS}${REMOVE_STEPS}"
|
|
136
|
+
if [ -z "$COMPLETE" ] && [ -z "$TITLE" ] && [ -z "$DUE" ] && [ -z "$NOTE" ] && [ -z "$IMPORTANCE" ] && [ "$STEP_CHANGES" = '[][][][]' ]; then
|
|
137
|
+
error_exit "nothing to change: give --complete, --reopen, --title, --due, --note, --importance, a step change or --delete"
|
|
105
138
|
fi
|
|
106
139
|
BODY=$(jq -cn --arg list "$LIST" --arg complete "$COMPLETE" --arg title "$TITLE" --arg due "$DUE" --arg note "$NOTE" --arg imp "$IMPORTANCE" \
|
|
140
|
+
--argjson add "$ADD_STEPS" --argjson check "$CHECK_STEPS" --argjson uncheck "$UNCHECK_STEPS" --argjson remove "$REMOVE_STEPS" \
|
|
107
141
|
'{}
|
|
108
142
|
+ (if $list != "" then {list: $list} else {} end)
|
|
109
143
|
+ (if $complete != "" then {complete: ($complete == "true")} else {} end)
|
|
110
144
|
+ (if $title != "" then {title: $title} else {} end)
|
|
111
145
|
+ (if $due == "none" then {due: null} elif $due != "" then {due: $due} else {} end)
|
|
112
146
|
+ (if $note != "" then {note: $note} else {} end)
|
|
113
|
-
+ (if $imp != "" then {importance: $imp} else {} end)
|
|
147
|
+
+ (if $imp != "" then {importance: $imp} else {} end)
|
|
148
|
+
+ (if ($add | length) > 0 then {addSteps: $add} else {} end)
|
|
149
|
+
+ (if ($check | length) > 0 then {checkSteps: $check} else {} end)
|
|
150
|
+
+ (if ($uncheck | length) > 0 then {uncheckSteps: $uncheck} else {} end)
|
|
151
|
+
+ (if ($remove | length) > 0 then {removeSteps: $remove} else {} end)')
|
|
114
152
|
RESPONSE=$(call PATCH "/microsoft-todo/tasks/$(uri "$TASK")" "$BODY") || { printf '%s\n' "$RESPONSE"; exit 1; }
|
|
115
153
|
printf '%s' "$RESPONSE" | jq -c '{success: true, list: .data.list.name, task: .data.task}'
|
|
@@ -75,6 +75,13 @@ check "json input" "$(last '[.path,.body]')" '["/api/microsoft-todo/tasks/T7",{"
|
|
|
75
75
|
check "task required" "$(run_err --complete | jq -r .error)" "--task is required (ids come from todo-tasks)"
|
|
76
76
|
check "nothing to change" "$(run_err --task T1 | jq -r .error | cut -c1-17)" "nothing to change"
|
|
77
77
|
check "bad due" "$(run_err --task T1 --due 1/10 | jq -r .error)" "--due must look like 2026-10-01, or none to clear it"
|
|
78
|
+
run --list Groceries --task T1 --add-steps "Butter, Ham" --check-steps Eggs --uncheck-step "Milk, oat" --remove-steps Bread >/dev/null
|
|
79
|
+
check "steps: body" "$(last '[.method,.path,.body]')" '["PATCH","/api/microsoft-todo/tasks/T1",{"list":"Groceries","addSteps":["Butter","Ham"],"checkSteps":["Eggs"],"uncheckSteps":["Milk, oat"],"removeSteps":["Bread"]}]'
|
|
80
|
+
run --task T1 --add-step Butter >/dev/null
|
|
81
|
+
check "steps: a step change alone is a change" "$(last '.body')" '{"addSteps":["Butter"]}'
|
|
82
|
+
run '{"task":"T1","checkSteps":["Eggs"],"removeSteps":"Bread,Ham"}' >/dev/null
|
|
83
|
+
check "steps: json input" "$(last '.body')" '{"checkSteps":["Eggs"],"removeSteps":["Bread","Ham"]}'
|
|
84
|
+
check "steps: blank is still nothing to change" "$(run_err --task T1 --add-steps ' , ' | jq -r .error | cut -c1-17)" "nothing to change"
|
|
78
85
|
OUT=$(run --list no-grant --task T1 --complete || true)
|
|
79
86
|
check "not connected" "$(printf '%s' "$OUT" | jq -r .reason)" "not_connected"
|
|
80
87
|
|