crewly 1.20.192 → 1.20.194
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/experiment-card/SKILL.md +96 -0
- package/config/skills/agent/core/experiment-card/execute.sh +147 -0
- package/config/skills/agent/core/experiment-card/execute.test.sh +91 -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/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/registry.json +6 -5
- 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 +192 -2
- package/dist/backend/backend/src/constants.d.ts.map +1 -1
- package/dist/backend/backend/src/constants.js +196 -1
- 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 +13 -2
- 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.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/experiments/experiments.routes.d.ts +27 -0
- package/dist/backend/backend/src/controllers/experiments/experiments.routes.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/experiments/experiments.routes.js +96 -0
- package/dist/backend/backend/src/controllers/experiments/experiments.routes.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 +19 -0
- 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 +37 -4
- 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 +26 -0
- 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/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/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 +82 -3
- 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 +6 -0
- package/dist/backend/backend/src/routes/api.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/auditor-scheduler.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/auditor-scheduler.service.js +3 -0
- package/dist/backend/backend/src/services/agent/auditor-scheduler.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/ai/prompt-modules/skills-reference.module.d.ts.map +1 -1
- package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.js +1 -0
- package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.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 +54 -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 +35 -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 +77 -1
- package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.js.map +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/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/experiments/experiment-verdict.d.ts +88 -0
- package/dist/backend/backend/src/services/experiments/experiment-verdict.d.ts.map +1 -0
- package/dist/backend/backend/src/services/experiments/experiment-verdict.js +226 -0
- package/dist/backend/backend/src/services/experiments/experiment-verdict.js.map +1 -0
- package/dist/backend/backend/src/services/experiments/experiment.service.d.ts +301 -0
- package/dist/backend/backend/src/services/experiments/experiment.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/experiments/experiment.service.js +754 -0
- package/dist/backend/backend/src/services/experiments/experiment.service.js.map +1 -0
- package/dist/backend/backend/src/services/experiments/experiment.wiring.d.ts +73 -0
- package/dist/backend/backend/src/services/experiments/experiment.wiring.d.ts.map +1 -0
- package/dist/backend/backend/src/services/experiments/experiment.wiring.js +142 -0
- package/dist/backend/backend/src/services/experiments/experiment.wiring.js.map +1 -0
- package/dist/backend/backend/src/services/experiments/seo-ops-metric.fetcher.d.ts +60 -0
- package/dist/backend/backend/src/services/experiments/seo-ops-metric.fetcher.d.ts.map +1 -0
- package/dist/backend/backend/src/services/experiments/seo-ops-metric.fetcher.js +113 -0
- package/dist/backend/backend/src/services/experiments/seo-ops-metric.fetcher.js.map +1 -0
- 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 +53 -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 +19 -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 +46 -0
- package/dist/backend/backend/src/services/messaging/queue-processor.service.js.map +1 -1
- 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 +50 -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 +53 -7
- 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 +77 -14
- 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 +130 -29
- package/dist/backend/backend/src/services/monitoring/claude-transcript-sync.service.js.map +1 -1
- package/dist/backend/backend/src/services/orc/orc-status-router.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/orc/orc-status-router.service.js +3 -2
- package/dist/backend/backend/src/services/orc/orc-status-router.service.js.map +1 -1
- package/dist/backend/backend/src/services/people/acting-for.service.d.ts +188 -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 +299 -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 +80 -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 +143 -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 +239 -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 +454 -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/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-bot-ids.d.ts +33 -0
- package/dist/backend/backend/src/services/slack/slack-bot-ids.d.ts.map +1 -0
- package/dist/backend/backend/src/services/slack/slack-bot-ids.js +56 -0
- package/dist/backend/backend/src/services/slack/slack-bot-ids.js.map +1 -0
- package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.d.ts +22 -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 +70 -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 +9 -0
- 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 +46 -0
- package/dist/backend/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack.service.d.ts +6 -0
- package/dist/backend/backend/src/services/slack/slack.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack.service.js +8 -0
- package/dist/backend/backend/src/services/slack/slack.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 +39 -12
- 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 +61 -20
- 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/services/wiki/wiki-ingest.service.d.ts +3 -1
- package/dist/backend/backend/src/services/wiki/wiki-ingest.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-ingest.service.js.map +1 -1
- package/dist/backend/backend/src/services/workflow/message-scheduler.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/workflow/message-scheduler.service.js +3 -0
- package/dist/backend/backend/src/services/workflow/message-scheduler.service.js.map +1 -1
- package/dist/backend/backend/src/services/workflow/scheduler.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/workflow/scheduler.service.js +3 -0
- package/dist/backend/backend/src/services/workflow/scheduler.service.js.map +1 -1
- package/dist/backend/backend/src/types/experiment.types.d.ts +153 -0
- package/dist/backend/backend/src/types/experiment.types.d.ts.map +1 -0
- package/dist/backend/backend/src/types/experiment.types.js +32 -0
- package/dist/backend/backend/src/types/experiment.types.js.map +1 -0
- 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 +11 -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 +192 -2
- package/dist/cli/backend/src/constants.d.ts.map +1 -1
- package/dist/cli/backend/src/constants.js +196 -1
- 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/auditor-scheduler.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/auditor-scheduler.service.js +3 -0
- package/dist/cli/backend/src/services/agent/auditor-scheduler.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/ai/prompt-modules/skills-reference.module.d.ts.map +1 -1
- package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.js +1 -0
- package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.js.map +1 -1
- package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts +35 -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 +77 -1
- package/dist/cli/backend/src/services/chat-v2/chat-v2.dispatcher.service.js.map +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/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 +19 -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 +46 -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/people/acting-for.service.d.ts +188 -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 +299 -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 +239 -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 +454 -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/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-orchestrator-bridge.d.ts +22 -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 +70 -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 +9 -0
- 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 +46 -0
- package/dist/cli/backend/src/services/slack/slack-team-channel.service.js.map +1 -1
- package/dist/cli/backend/src/services/slack/slack.service.d.ts +6 -0
- package/dist/cli/backend/src/services/slack/slack.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/slack/slack.service.js +8 -0
- package/dist/cli/backend/src/services/slack/slack.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/services/wiki/wiki-ingest.service.d.ts +3 -1
- package/dist/cli/backend/src/services/wiki/wiki-ingest.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/wiki/wiki-ingest.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 +11 -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-fc715ec3.css → index-5e967795.css} +1 -1
- package/frontend/dist/assets/{index-5b7af029.js → index-800118ca.js} +296 -296
- 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
|
@@ -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
|
|
|
@@ -118,10 +118,10 @@ export const SKILL_FILE_EXCLUDES: ReadonlyArray<RegExp> = [/\.test\./, /^mock-/,
|
|
|
118
118
|
* never installed.
|
|
119
119
|
*
|
|
120
120
|
* Deliberately FLAT: files in subdirectories (e.g. remotion-video/templates/)
|
|
121
|
-
* are not listed.
|
|
122
|
-
* parent directories, so a nested path
|
|
123
|
-
*
|
|
124
|
-
* the older CLIs are no longer in use.
|
|
121
|
+
* are not listed. CLIs released before #800 write each listed file without
|
|
122
|
+
* creating parent directories, so a nested path fails the whole install on
|
|
123
|
+
* them. The installers create parent dirs since #800; list nested files only
|
|
124
|
+
* once the older CLIs are no longer in use.
|
|
125
125
|
*
|
|
126
126
|
* @param skillDir - Absolute skill directory
|
|
127
127
|
* @returns File names relative to the skill directory
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: Complete Task
|
|
3
|
-
description: Mark a
|
|
4
|
-
version: 1.
|
|
3
|
+
description: Mark a WorkItem complete in the V3 task pool, with evidence.
|
|
4
|
+
version: 1.1.0
|
|
5
5
|
category: management
|
|
6
6
|
skillType: claude-skill
|
|
7
7
|
assignableRoles:
|
|
@@ -24,18 +24,25 @@ execution:
|
|
|
24
24
|
|
|
25
25
|
# Complete Task
|
|
26
26
|
|
|
27
|
-
Mark a
|
|
27
|
+
Mark a WorkItem complete via `POST /api/task-pool/complete/:id`.
|
|
28
28
|
|
|
29
29
|
## Usage
|
|
30
30
|
|
|
31
31
|
```bash
|
|
32
|
-
bash config/skills/orchestrator/complete-task/execute.sh '{"
|
|
32
|
+
bash config/skills/orchestrator/complete-task/execute.sh '{"workItemId":"wi-123","summary":"Shipped the report","evidence":[{"type":"artifact","path":"/abs/path/report.md"},{"type":"command","command":"npm test","exitCode":0}]}'
|
|
33
33
|
```
|
|
34
34
|
|
|
35
35
|
## Parameters
|
|
36
36
|
|
|
37
|
-
|
|
37
|
+
| Parameter | Required | Description |
|
|
38
|
+
|-----------|----------|-------------|
|
|
39
|
+
| `workItemId` (alias `taskId`) | Yes | The WorkItem to complete |
|
|
40
|
+
| `summary` (alias `result`) | Yes | What was produced |
|
|
41
|
+
| `evidence` | Yes* | Evidence array (#873): `{"type":"artifact","path":…}` (must exist, or an https URL), `{"type":"command","command":…,"exitCode":0,"outputTail":…}`, or `{"type":"blocked","step":…,"reason":…}` (records the item as blocked, not done). *Accepted without it this release with a `warning`; required from the next |
|
|
42
|
+
| `output` | No | Structured output stored on the WorkItem before completion |
|
|
43
|
+
| `agentId` / `sessionName` | No | Who completed it (defaults to `crewly-orc`) |
|
|
38
44
|
|
|
39
45
|
## Output
|
|
40
46
|
|
|
41
|
-
JSON
|
|
47
|
+
The server's JSON response. A `warning` from the server (completion without
|
|
48
|
+
evidence) is repeated on stderr.
|
|
@@ -6,7 +6,15 @@
|
|
|
6
6
|
# on the WorkItem (replaces `<taskId>.output.json`) before completion.
|
|
7
7
|
#
|
|
8
8
|
# Input shape:
|
|
9
|
-
# { "workItemId": "abc-123", "summary": "...", "output"?: { ... }
|
|
9
|
+
# { "workItemId": "abc-123", "summary": "...", "output"?: { ... },
|
|
10
|
+
# "evidence"?: [ {"type":"artifact","path":"..."} |
|
|
11
|
+
# {"type":"command","command":"...","exitCode":0,"outputTail":"..."} |
|
|
12
|
+
# {"type":"blocked","step":"...","reason":"..."} ] }
|
|
13
|
+
#
|
|
14
|
+
# `evidence` (#873) is sent as result.evidence. The server checks it: missing
|
|
15
|
+
# artifacts and non-zero exit codes are refused, a `blocked` entry records the
|
|
16
|
+
# item as blocked instead of done, and no evidence at all is accepted this
|
|
17
|
+
# release with a `warning` (refused from the next).
|
|
10
18
|
#
|
|
11
19
|
# Backwards-compat: a `taskId` field is accepted as alias for `workItemId`.
|
|
12
20
|
|
|
@@ -26,6 +34,11 @@ OUTPUT=$(printf '%s' "$INPUT" | jq -c '.output // empty')
|
|
|
26
34
|
# work — pass that session name instead).
|
|
27
35
|
AGENT_ID=$(printf '%s' "$INPUT" | jq -r '.agentId // .sessionName // "crewly-orc"')
|
|
28
36
|
|
|
37
|
+
EVIDENCE=$(printf '%s' "$INPUT" | jq -c '.evidence // empty')
|
|
38
|
+
if [ -n "$EVIDENCE" ] && [ "$(printf '%s' "$EVIDENCE" | jq -r 'type')" != "array" ]; then
|
|
39
|
+
error_exit "evidence must be a JSON array, e.g. [{\"type\":\"artifact\",\"path\":\"/abs/file\"}]"
|
|
40
|
+
fi
|
|
41
|
+
|
|
29
42
|
require_param "workItemId" "$WORK_ITEM_ID"
|
|
30
43
|
|
|
31
44
|
# Persist structured output on the WorkItem before completing, so that
|
|
@@ -47,6 +60,12 @@ fi
|
|
|
47
60
|
COMPLETE_BODY=$(jq -n \
|
|
48
61
|
--arg agentId "$AGENT_ID" \
|
|
49
62
|
--arg summary "$SUMMARY" \
|
|
50
|
-
|
|
63
|
+
--argjson evidence "${EVIDENCE:-null}" \
|
|
64
|
+
'{agentId: $agentId, result: ({summary: $summary} + (if $evidence != null then {evidence: $evidence} else {} end))}')
|
|
51
65
|
|
|
52
|
-
api_call POST "/task-pool/complete/${WORK_ITEM_ID}" "$COMPLETE_BODY"
|
|
66
|
+
COMPLETE_RESPONSE=$(api_call POST "/task-pool/complete/${WORK_ITEM_ID}" "$COMPLETE_BODY")
|
|
67
|
+
printf '%s\n' "$COMPLETE_RESPONSE"
|
|
68
|
+
EVIDENCE_WARNING=$(printf '%s' "$COMPLETE_RESPONSE" | jq -r '.warning // empty' 2>/dev/null || true)
|
|
69
|
+
if [ -n "$EVIDENCE_WARNING" ]; then
|
|
70
|
+
jq -n --arg w "$EVIDENCE_WARNING" '{warning: $w}' >&2
|
|
71
|
+
fi
|
|
@@ -255,13 +255,13 @@ if [ "$USE_STRUCTURED" = "true" ] && [ -n "$TITLE" ]; then
|
|
|
255
255
|
|
|
256
256
|
[ -n "$CONTEXT" ] && TASK_MESSAGE="${TASK_MESSAGE}\n\nAdditional context: ${CONTEXT}"
|
|
257
257
|
[ -n "$DEADLINE_HINT" ] && TASK_MESSAGE="${TASK_MESSAGE}\n\n**Deadline hint**: ${DEADLINE_HINT}"
|
|
258
|
-
TASK_MESSAGE="${TASK_MESSAGE}\n\n---\nWhen done, report back with report-status, passing the workItemId from your [CREWLY-DISPATCH] notice (or from get-my-tasks) so the right WorkItem is closed: bash ${CREWLY_ROOT}/config/skills/agent/core/report-status/execute.sh '{\"sessionName\":\"${TO}\",\"workItemId\":\"<your WorkItem id>\",\"status\":\"done\",\"summary\":\"<brief summary>\",\"projectPath\":\"${PROJECT_PATH}\"}'"
|
|
258
|
+
TASK_MESSAGE="${TASK_MESSAGE}\n\n---\nWhen done, report back with report-status, passing the workItemId from your [CREWLY-DISPATCH] notice (or from get-my-tasks) so the right WorkItem is closed: bash ${CREWLY_ROOT}/config/skills/agent/core/report-status/execute.sh '{\"sessionName\":\"${TO}\",\"workItemId\":\"<your WorkItem id>\",\"status\":\"done\",\"summary\":\"<brief summary>\",\"evidence\":[{\"type\":\"artifact\",\"path\":\"<file you produced>\"},{\"type\":\"command\",\"command\":\"<check you ran>\",\"exitCode\":0}],\"projectPath\":\"${PROJECT_PATH}\"}' — done needs evidence (files that exist, checks with exit code 0); if a step failed, send [{\"type\":\"blocked\",\"step\":\"<step>\",\"reason\":\"<why>\"}] instead, never done."
|
|
259
259
|
TASK_MESSAGE="${TASK_MESSAGE}\n\nBefore reporting done, persist key findings using: bash ${CREWLY_ROOT}/config/skills/agent/core/remember/execute.sh '{\"agentId\":\"${TO}\",\"content\":\"<key findings>\",\"category\":\"pattern\",\"scope\":\"project\",\"projectPath\":\"${PROJECT_PATH}\"}'"
|
|
260
260
|
else
|
|
261
261
|
# Legacy free-text format (backwards compatible)
|
|
262
262
|
TASK_MESSAGE="New task from orchestrator (priority: ${PRIORITY}):\n\n${TASK}"
|
|
263
263
|
[ -n "$CONTEXT" ] && TASK_MESSAGE="${TASK_MESSAGE}\n\nContext: ${CONTEXT}"
|
|
264
|
-
TASK_MESSAGE="${TASK_MESSAGE}\n\nWhen done, report back with report-status, passing the workItemId from your [CREWLY-DISPATCH] notice (or from get-my-tasks) so the right WorkItem is closed: bash ${CREWLY_ROOT}/config/skills/agent/core/report-status/execute.sh '{\"sessionName\":\"${TO}\",\"workItemId\":\"<your WorkItem id>\",\"status\":\"done\",\"summary\":\"<brief summary>\",\"projectPath\":\"${PROJECT_PATH}\"}'"
|
|
264
|
+
TASK_MESSAGE="${TASK_MESSAGE}\n\nWhen done, report back with report-status, passing the workItemId from your [CREWLY-DISPATCH] notice (or from get-my-tasks) so the right WorkItem is closed: bash ${CREWLY_ROOT}/config/skills/agent/core/report-status/execute.sh '{\"sessionName\":\"${TO}\",\"workItemId\":\"<your WorkItem id>\",\"status\":\"done\",\"summary\":\"<brief summary>\",\"evidence\":[{\"type\":\"artifact\",\"path\":\"<file you produced>\"},{\"type\":\"command\",\"command\":\"<check you ran>\",\"exitCode\":0}],\"projectPath\":\"${PROJECT_PATH}\"}' — done needs evidence (files that exist, checks with exit code 0); if a step failed, send [{\"type\":\"blocked\",\"step\":\"<step>\",\"reason\":\"<why>\"}] instead, never done."
|
|
265
265
|
TASK_MESSAGE="${TASK_MESSAGE}\n\nBefore reporting done, persist key findings using: bash ${CREWLY_ROOT}/config/skills/agent/core/remember/execute.sh '{\"agentId\":\"${TO}\",\"content\":\"<key findings>\",\"category\":\"pattern\",\"scope\":\"project\",\"projectPath\":\"${PROJECT_PATH}\"}'"
|
|
266
266
|
fi
|
|
267
267
|
|
|
@@ -38,8 +38,15 @@ account ("帮我重新登陆 claude code", "换个账号", "send me the login li
|
|
|
38
38
|
```bash
|
|
39
39
|
bash config/skills/orchestrator/harness-login/execute.sh --harness claude
|
|
40
40
|
bash config/skills/orchestrator/harness-login/execute.sh --harness codex --switch-account
|
|
41
|
+
bash config/skills/orchestrator/harness-login/execute.sh --harness claude --account work
|
|
41
42
|
```
|
|
42
43
|
|
|
44
|
+
`--account <name>` signs in another of the owner's **own** Claude Code accounts
|
|
45
|
+
("login claude work"): it gets its own config dir and login, and agents move to
|
|
46
|
+
it when an earlier runtime in their fallback order runs out (chain entry
|
|
47
|
+
`claude-code@work`). Nothing is restarted. Add only Claude Code accounts that
|
|
48
|
+
the owner owns; never use it for another person's account.
|
|
49
|
+
|
|
43
50
|
## What happens
|
|
44
51
|
|
|
45
52
|
1. Crewly starts the harness's own login command in a terminal it keeps alive
|
|
@@ -75,7 +82,7 @@ in one line to finish it in Setup).
|
|
|
75
82
|
- `antigravity` answers `no_link_login` (it uses a Gemini API key, entered in
|
|
76
83
|
Setup); Gemini CLI is enterprise-only. Pass the message on in one line.
|
|
77
84
|
- The owner can also just write 「重新登录 claude」 / 「换个账号登录 codex」 /
|
|
78
|
-
`relogin claude` in your DM — Crewly handles that without you.
|
|
85
|
+
`relogin claude` / `login claude@work` in your DM — Crewly handles that without you.
|
|
79
86
|
|
|
80
87
|
## Errors
|
|
81
88
|
|
|
@@ -86,3 +93,4 @@ in one line to finish it in Setup).
|
|
|
86
93
|
| `owner_request_unverifiable` | The owner's chat history could not be read |
|
|
87
94
|
| `unknown_harness` | Use claude, codex or antigravity |
|
|
88
95
|
| `no_link_login` | The harness has no link login (Antigravity, Gemini) |
|
|
96
|
+
| `invalid_account` | Account names are 1–32 lower-case letters, digits, `-` or `_` |
|
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
# Usage:
|
|
20
20
|
# bash execute.sh --harness claude
|
|
21
21
|
# bash execute.sh --harness codex --switch-account
|
|
22
|
+
# bash execute.sh --harness claude --account work # another of the owner's Claude accounts
|
|
22
23
|
# bash execute.sh '{"harness":"claude","switchAccount":true}'
|
|
23
24
|
# =============================================================================
|
|
24
25
|
set -euo pipefail
|
|
@@ -28,22 +29,25 @@ source "${SCRIPT_DIR}/../_common/lib.sh"
|
|
|
28
29
|
print_usage() {
|
|
29
30
|
cat <<'EOF_USAGE'
|
|
30
31
|
Usage:
|
|
31
|
-
bash execute.sh --harness <claude|codex|antigravity> [--switch-account]
|
|
32
|
-
bash execute.sh '{"harness":"claude","switchAccount":false}'
|
|
32
|
+
bash execute.sh --harness <claude|codex|antigravity> [--switch-account] [--account <name>]
|
|
33
|
+
bash execute.sh '{"harness":"claude","switchAccount":false,"account":"work"}'
|
|
33
34
|
|
|
34
35
|
Options:
|
|
35
36
|
--harness claude (Claude Code), codex (Codex CLI) or antigravity (agy) — required
|
|
36
37
|
--switch-account The owner wants a different account (changes the wording of the DM)
|
|
38
|
+
--account Sign in another of the owner's own Claude Code accounts (used as a
|
|
39
|
+
runtime fallback, chain entry claude-code@<name>) instead of the default login
|
|
37
40
|
--help | -h Show this help
|
|
38
41
|
EOF_USAGE
|
|
39
42
|
}
|
|
40
43
|
|
|
41
|
-
INPUT_JSON=""; HARNESS=""; SWITCH=false
|
|
44
|
+
INPUT_JSON=""; HARNESS=""; SWITCH=false; ACCOUNT=""
|
|
42
45
|
if [[ $# -gt 0 && ${1:0:1} == '{' ]]; then INPUT_JSON="$1"; shift || true; fi
|
|
43
46
|
while [[ $# -gt 0 ]]; do
|
|
44
47
|
case "$1" in
|
|
45
48
|
--harness) [ $# -ge 2 ] || error_exit "--harness requires a value"; HARNESS="$2"; shift 2 ;;
|
|
46
49
|
--switch-account) SWITCH=true; shift ;;
|
|
50
|
+
--account) [ $# -ge 2 ] || error_exit "--account requires a value"; ACCOUNT="$2"; shift 2 ;;
|
|
47
51
|
--help|-h) print_usage; exit 0 ;;
|
|
48
52
|
*) error_exit "Unknown option: $1" ;;
|
|
49
53
|
esac
|
|
@@ -52,6 +56,7 @@ if [ -n "$INPUT_JSON" ]; then
|
|
|
52
56
|
INPUT=$(read_json_input "$INPUT_JSON")
|
|
53
57
|
[ -z "$HARNESS" ] && HARNESS=$(printf '%s' "$INPUT" | jq -r '.harness // .harnessId // empty')
|
|
54
58
|
[ "$(printf '%s' "$INPUT" | jq -r '.switchAccount // false')" = "true" ] && SWITCH=true
|
|
59
|
+
[ -z "$ACCOUNT" ] && ACCOUNT=$(printf '%s' "$INPUT" | jq -r '.account // empty')
|
|
55
60
|
fi
|
|
56
61
|
require_param "harness (--harness)" "$HARNESS"
|
|
57
62
|
|
|
@@ -59,7 +64,10 @@ require_param "harness (--harness)" "$HARNESS"
|
|
|
59
64
|
HARNESS_ID=$(printf '%s' "$HARNESS" | tr '[:upper:]' '[:lower:]' | sed -E 's/[[:space:]_]+/-/g')
|
|
60
65
|
[[ "$HARNESS_ID" =~ ^[a-z0-9-]+$ ]] || error_exit "Invalid harness: $HARNESS (use claude, codex or antigravity)"
|
|
61
66
|
|
|
62
|
-
|
|
67
|
+
ACCOUNT=$(printf '%s' "$ACCOUNT" | tr '[:upper:]' '[:lower:]')
|
|
68
|
+
[ -z "$ACCOUNT" ] || [[ "$ACCOUNT" =~ ^[a-z0-9][a-z0-9_-]{0,31}$ ]] || error_exit "Invalid account: $ACCOUNT (lower-case letters, digits, - or _)"
|
|
69
|
+
|
|
70
|
+
BODY=$(jq -cn --argjson sw "$SWITCH" --arg acct "$ACCOUNT" '{switchAccount: $sw} + (if $acct != "" then {account: $acct} else {} end)')
|
|
63
71
|
|
|
64
72
|
ERR_FILE=$(mktemp); trap 'rm -f "$ERR_FILE"' EXIT
|
|
65
73
|
RESPONSE=$(api_call POST "/harness/${HARNESS_ID}/owner-login" "$BODY" 2>"$ERR_FILE") || {
|
|
@@ -54,6 +54,12 @@ check "display name → id, switch flag" "$(jq -c '{path, body}' "$STUB_LOG")" '
|
|
|
54
54
|
OUT=$(run '{"harness":"claude","switchAccount":true}')
|
|
55
55
|
check "json input" "$(jq -c .body "$STUB_LOG")" '{"switchAccount":true}'
|
|
56
56
|
|
|
57
|
+
OUT=$(run --harness claude --account Work)
|
|
58
|
+
check "account (lower-cased)" "$(jq -c .body "$STUB_LOG")" '{"switchAccount":false,"account":"work"}'
|
|
59
|
+
|
|
60
|
+
OUT=$(run '{"harness":"claude","account":"b"}')
|
|
61
|
+
check "json account" "$(jq -c .body "$STUB_LOG")" '{"switchAccount":false,"account":"b"}'
|
|
62
|
+
|
|
57
63
|
OUT=$(run --harness codex); RC=$?
|
|
58
64
|
check "no owner request: exit 1" "$RC" "1"
|
|
59
65
|
check "no owner request: reason" "$(printf '%s' "$OUT" | jq -r .reason)" "owner_request_not_found"
|
|
@@ -67,6 +73,7 @@ check "other agents refused" "$(printf '%s' "$OUT" | jq -r .reason)" "orchestrat
|
|
|
67
73
|
check "missing harness" "$(run_err)" "Missing required parameter: harness (--harness)"
|
|
68
74
|
check "path injection refused" "$(run_err --harness '../orc')" "Invalid harness: ../orc (use claude, codex or antigravity)"
|
|
69
75
|
check "unknown option" "$(run_err --yes)" "Unknown option: --yes"
|
|
76
|
+
check "invalid account" "$(run_err --harness claude --account '../x')" "Invalid account: ../x (lower-case letters, digits, - or _)"
|
|
70
77
|
|
|
71
78
|
echo "=== Results: $PASS passed, $FAIL failed ==="
|
|
72
79
|
[ "$FAIL" -eq 0 ]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 2,
|
|
3
|
-
"lastUpdated": "2026-
|
|
3
|
+
"lastUpdated": "2026-10-02T23:58:51.779Z",
|
|
4
4
|
"cdnBaseUrl": "https://raw.githubusercontent.com/stevehuang0115/crewly/main",
|
|
5
5
|
"source": "github",
|
|
6
6
|
"items": [
|
|
@@ -1412,7 +1412,7 @@
|
|
|
1412
1412
|
"name": "SEO Ops",
|
|
1413
1413
|
"description": "Search Console-driven SEO operations for any site: query patterns (low-CTR top-3, near-miss 4-20, rising queries, keyword cannibalization), per-URL report cards, pre-publish SEO/AEO checks, a gated programmatic-page queue, and a live-diff gate that stops agents from removing things from live pages. Use when auditing organic search, deciding what to rewrite, or before changing a live page. For writing posts use seo-blog-writer instead.",
|
|
1414
1414
|
"author": "Crewly",
|
|
1415
|
-
"version": "1.
|
|
1415
|
+
"version": "1.1.0",
|
|
1416
1416
|
"category": "development",
|
|
1417
1417
|
"tags": [
|
|
1418
1418
|
"seo",
|
|
@@ -1425,12 +1425,12 @@
|
|
|
1425
1425
|
"downloads": 0,
|
|
1426
1426
|
"rating": 0,
|
|
1427
1427
|
"createdAt": "2026-09-29T01:43:29.904Z",
|
|
1428
|
-
"updatedAt": "2026-
|
|
1428
|
+
"updatedAt": "2026-10-02T23:58:51.779Z",
|
|
1429
1429
|
"source": "config/skills/agent/marketplace/seo-ops",
|
|
1430
1430
|
"assets": {
|
|
1431
1431
|
"archive": "config/skills/agent/marketplace/seo-ops",
|
|
1432
1432
|
"checksum": "",
|
|
1433
|
-
"sizeBytes":
|
|
1433
|
+
"sizeBytes": 122232
|
|
1434
1434
|
},
|
|
1435
1435
|
"metadata": {
|
|
1436
1436
|
"skillType": "claude-skill",
|
|
@@ -1447,7 +1447,8 @@
|
|
|
1447
1447
|
"keyword cannibalization",
|
|
1448
1448
|
"pre-publish seo check",
|
|
1449
1449
|
"programmatic seo pages",
|
|
1450
|
-
"live page diff"
|
|
1450
|
+
"live page diff",
|
|
1451
|
+
"experiment metric"
|
|
1451
1452
|
],
|
|
1452
1453
|
"files": [
|
|
1453
1454
|
"execute.sh",
|
|
@@ -170,7 +170,7 @@ if [ -n "$CONTEXT" ]; then
|
|
|
170
170
|
fi
|
|
171
171
|
|
|
172
172
|
# Build a structured task message from Team Leader
|
|
173
|
-
TASK_MESSAGE="New task from Team Leader (priority: ${PRIORITY}):\n\n**[REQUIRED] When done, you MUST:** (1) Output a text summary of your work, findings, and any issues. (2) Call report-status, passing the workItemId from your [CREWLY-DISPATCH] notice (or from get-my-tasks) so the right WorkItem is closed:\nbash ${CREWLY_ROOT}/config/skills/agent/core/report-status/execute.sh '{\"sessionName\":\"${TO}\",\"workItemId\":\"<your WorkItem id>\",\"status\":\"done\",\"summary\":\"<brief summary>\",\"projectPath\":\"${PROJECT_PATH}\"}'\n\n---\n\n${TASK}"
|
|
173
|
+
TASK_MESSAGE="New task from Team Leader (priority: ${PRIORITY}):\n\n**[REQUIRED] When done, you MUST:** (1) Output a text summary of your work, findings, and any issues. (2) Call report-status, passing the workItemId from your [CREWLY-DISPATCH] notice (or from get-my-tasks) so the right WorkItem is closed:\nbash ${CREWLY_ROOT}/config/skills/agent/core/report-status/execute.sh '{\"sessionName\":\"${TO}\",\"workItemId\":\"<your WorkItem id>\",\"status\":\"done\",\"summary\":\"<brief summary>\",\"evidence\":[{\"type\":\"artifact\",\"path\":\"<file you produced>\"},{\"type\":\"command\",\"command\":\"<check you ran>\",\"exitCode\":0}],\"projectPath\":\"${PROJECT_PATH}\"}' — done needs evidence (files that exist, checks with exit code 0); if a step failed, send [{\"type\":\"blocked\",\"step\":\"<step>\",\"reason\":\"<why>\"}] instead, never done.\n\n---\n\n${TASK}"
|
|
174
174
|
[ -n "$CONTEXT" ] && TASK_MESSAGE="${TASK_MESSAGE}\n\nContext: ${CONTEXT}"
|
|
175
175
|
|
|
176
176
|
# V3-only producer (spec 2026-05-06-task-management-v1-deprecation.md):
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: Verify Output
|
|
3
3
|
description: "Execute the team's verification pipeline against a completed task. Reads verificationPipeline configuration from the team template and runs each verification step sequentially."
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.1.0
|
|
5
5
|
category: quality
|
|
6
6
|
skillType: claude-skill
|
|
7
7
|
assignableRoles:
|
|
@@ -33,6 +33,18 @@ Supports two modes:
|
|
|
33
33
|
1. **Explicit checks**: Pass `checks[]` array directly with specific verification steps
|
|
34
34
|
2. **Template pipeline**: Pass `templateId` to automatically load verification steps from the team template's `verificationPipeline`
|
|
35
35
|
|
|
36
|
+
## Evidence first (#873)
|
|
37
|
+
|
|
38
|
+
The skill reads the worker's **evidence block** (`output.evidence` on the
|
|
39
|
+
WorkItem: artifacts that exist, commands with exit codes, blocked steps) before
|
|
40
|
+
running any check, and returns it as the first field of the verdict.
|
|
41
|
+
|
|
42
|
+
- `evidenceWarning` is set when the item was marked done **without evidence**
|
|
43
|
+
(accepted only while the server is in evidence warn mode) — do not verify it
|
|
44
|
+
on its summary alone: check the work directly or send it back asking for
|
|
45
|
+
evidence. It is also set when the worker reported `blocked` steps.
|
|
46
|
+
- The warning, when present, leads `feedback`.
|
|
47
|
+
|
|
36
48
|
## When to Use
|
|
37
49
|
|
|
38
50
|
- When a worker reports a task as `done`
|
|
@@ -118,6 +130,11 @@ The template's `passPolicy` controls the overall pass/fail determination:
|
|
|
118
130
|
|
|
119
131
|
```json
|
|
120
132
|
{
|
|
133
|
+
"evidence": [
|
|
134
|
+
{ "type": "artifact", "path": "src/auth.ts" },
|
|
135
|
+
{ "type": "command", "command": "npm test", "exitCode": 0, "outputTail": "42 passed" }
|
|
136
|
+
],
|
|
137
|
+
"evidenceWarning": null,
|
|
121
138
|
"passed": false,
|
|
122
139
|
"score": 67,
|
|
123
140
|
"feedback": "Verification failed: 1/3 checks failed (policy: critical_only).",
|
|
@@ -36,6 +36,25 @@ WI_DATA=$(api_call GET "/task-pool/items/${WORK_ITEM_ID}" 2>/dev/null || echo '{
|
|
|
36
36
|
WI_BRIEF=$(echo "$WI_DATA" | jq -r '.data.briefMarkdown // empty' 2>/dev/null || true)
|
|
37
37
|
WI_OUTPUT_RAW=$(echo "$WI_DATA" | jq -c '.data.output // empty' 2>/dev/null || true)
|
|
38
38
|
|
|
39
|
+
# Evidence first (#873). The worker's completion carries an evidence block
|
|
40
|
+
# (artifacts that exist, commands with exit codes, or blocked steps), stored
|
|
41
|
+
# at output.evidence. Read it before anything else, and flag an item that was
|
|
42
|
+
# marked done WITHOUT evidence — accepted only because the server is in warn
|
|
43
|
+
# mode this release — so it is not verified on its summary alone.
|
|
44
|
+
WI_FOUND=$(echo "$WI_DATA" | jq -r 'if (.data // null) != null then "yes" else "no" end' 2>/dev/null || echo "no")
|
|
45
|
+
WI_EVIDENCE=$(echo "$WI_DATA" | jq -c 'if (.data.output.evidence | type) == "array" then .data.output.evidence else [] end' 2>/dev/null || echo '[]')
|
|
46
|
+
EVIDENCE_WARNING=""
|
|
47
|
+
if [ "$WI_FOUND" = "yes" ]; then
|
|
48
|
+
if [ "$(printf '%s' "$WI_EVIDENCE" | jq 'length')" = "0" ]; then
|
|
49
|
+
EVIDENCE_WARNING="No completion evidence: this WorkItem was marked done without artifacts or commands (accepted only in evidence warn mode). Do not verify on the summary alone — check the work directly, or send it back asking for evidence."
|
|
50
|
+
else
|
|
51
|
+
BLOCKED_STEPS=$(printf '%s' "$WI_EVIDENCE" | jq -r '[.[] | select(.type == "blocked") | "\(.step): \(.reason)"] | join("; ")')
|
|
52
|
+
if [ -n "$BLOCKED_STEPS" ]; then
|
|
53
|
+
EVIDENCE_WARNING="The worker reported blocked steps (the item is blocked, not done): ${BLOCKED_STEPS}"
|
|
54
|
+
fi
|
|
55
|
+
fi
|
|
56
|
+
fi
|
|
57
|
+
|
|
39
58
|
# Compose `TASK_OUTPUT` for content-scan checks. Prefer worker-supplied
|
|
40
59
|
# structured output, falling back to the brief if no output was set.
|
|
41
60
|
if [ -n "$WI_OUTPUT_RAW" ] && [ "$WI_OUTPUT_RAW" != "null" ] && [ "$WI_OUTPUT_RAW" != "" ]; then
|
|
@@ -316,6 +335,11 @@ else
|
|
|
316
335
|
FEEDBACK="Verification failed: ${TOTAL_FAILED}/${TOTAL_CHECKS} checks failed (policy: ${PASS_POLICY})."
|
|
317
336
|
fi
|
|
318
337
|
|
|
338
|
+
# The evidence finding leads the feedback.
|
|
339
|
+
if [ -n "$EVIDENCE_WARNING" ]; then
|
|
340
|
+
FEEDBACK="${EVIDENCE_WARNING} ${FEEDBACK}"
|
|
341
|
+
fi
|
|
342
|
+
|
|
319
343
|
# Check if any results require manual TL review
|
|
320
344
|
REQUIRES_REVIEW=$(echo "$RESULTS" | jq '[.[] | select(.requiresReview == true)] | length')
|
|
321
345
|
if [ "$REQUIRES_REVIEW" -gt 0 ]; then
|
|
@@ -323,6 +347,8 @@ if [ "$REQUIRES_REVIEW" -gt 0 ]; then
|
|
|
323
347
|
fi
|
|
324
348
|
|
|
325
349
|
jq -n \
|
|
350
|
+
--argjson evidence "$WI_EVIDENCE" \
|
|
351
|
+
--arg evidenceWarning "$EVIDENCE_WARNING" \
|
|
326
352
|
--arg passed "$PASSED" \
|
|
327
353
|
--arg score "$SCORE" \
|
|
328
354
|
--arg feedback "$FEEDBACK" \
|
|
@@ -333,6 +359,8 @@ jq -n \
|
|
|
333
359
|
--arg workerId "$WORKER_ID" \
|
|
334
360
|
--arg templateId "$TEMPLATE_ID" \
|
|
335
361
|
'{
|
|
362
|
+
evidence: $evidence,
|
|
363
|
+
evidenceWarning: (if $evidenceWarning != "" then $evidenceWarning else null end),
|
|
336
364
|
passed: ($passed == "true"),
|
|
337
365
|
score: ($score | tonumber),
|
|
338
366
|
feedback: $feedback,
|