crewly 1.5.22 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (112) hide show
  1. package/config/roles/orchestrator/prompt.md +182 -25
  2. package/config/skills/agent/core/cancel-followup/SKILL.md +38 -0
  3. package/config/skills/agent/core/cancel-followup/execute.sh +111 -0
  4. package/config/skills/agent/core/cancel-followup/execute.test.sh +42 -0
  5. package/config/skills/agent/core/list-my-followups/SKILL.md +36 -0
  6. package/config/skills/agent/core/list-my-followups/execute.sh +93 -0
  7. package/config/skills/agent/core/list-my-followups/execute.test.sh +41 -0
  8. package/config/skills/agent/core/schedule-followup/SKILL.md +53 -0
  9. package/config/skills/agent/core/schedule-followup/execute.sh +195 -0
  10. package/config/skills/agent/core/schedule-followup/execute.test.sh +48 -0
  11. package/config/skills/agent/core/watch-for-event/SKILL.md +60 -0
  12. package/config/skills/agent/core/watch-for-event/execute.sh +177 -0
  13. package/config/skills/agent/core/watch-for-event/execute.test.sh +43 -0
  14. package/config/skills/orchestrator/credential-manager/SKILL.md +218 -0
  15. package/config/skills/orchestrator/credential-manager/execute.sh +166 -0
  16. package/dist/backend/backend/src/controllers/credentials/credentials.controller.d.ts +80 -0
  17. package/dist/backend/backend/src/controllers/credentials/credentials.controller.d.ts.map +1 -0
  18. package/dist/backend/backend/src/controllers/credentials/credentials.controller.js +365 -0
  19. package/dist/backend/backend/src/controllers/credentials/credentials.controller.js.map +1 -0
  20. package/dist/backend/backend/src/controllers/credentials/credentials.routes.d.ts +26 -0
  21. package/dist/backend/backend/src/controllers/credentials/credentials.routes.d.ts.map +1 -0
  22. package/dist/backend/backend/src/controllers/credentials/credentials.routes.js +40 -0
  23. package/dist/backend/backend/src/controllers/credentials/credentials.routes.js.map +1 -0
  24. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.js +23 -14
  25. package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.js.map +1 -1
  26. package/dist/backend/backend/src/scripts/backfill-mission-priority.d.ts +3 -1
  27. package/dist/backend/backend/src/scripts/backfill-mission-priority.d.ts.map +1 -1
  28. package/dist/backend/backend/src/scripts/backfill-mission-priority.js +16 -4
  29. package/dist/backend/backend/src/scripts/backfill-mission-priority.js.map +1 -1
  30. package/dist/backend/backend/src/services/browser/browser-proxy.service.js +1 -1
  31. package/dist/backend/backend/src/services/browser/browser-proxy.service.js.map +1 -1
  32. package/dist/backend/backend/src/services/credential/credential-store.service.d.ts +161 -0
  33. package/dist/backend/backend/src/services/credential/credential-store.service.d.ts.map +1 -0
  34. package/dist/backend/backend/src/services/credential/credential-store.service.js +298 -0
  35. package/dist/backend/backend/src/services/credential/credential-store.service.js.map +1 -0
  36. package/dist/backend/backend/src/services/credential/helpers/gemini-cli-workspace.helper.d.ts +117 -0
  37. package/dist/backend/backend/src/services/credential/helpers/gemini-cli-workspace.helper.d.ts.map +1 -0
  38. package/dist/backend/backend/src/services/credential/helpers/gemini-cli-workspace.helper.js +293 -0
  39. package/dist/backend/backend/src/services/credential/helpers/gemini-cli-workspace.helper.js.map +1 -0
  40. package/dist/backend/backend/src/services/project/task.service.d.ts +18 -2
  41. package/dist/backend/backend/src/services/project/task.service.d.ts.map +1 -1
  42. package/dist/backend/backend/src/services/project/task.service.js +69 -53
  43. package/dist/backend/backend/src/services/project/task.service.js.map +1 -1
  44. package/dist/backend/backend/src/services/v3/contract-matcher.d.ts +20 -0
  45. package/dist/backend/backend/src/services/v3/contract-matcher.d.ts.map +1 -0
  46. package/dist/backend/backend/src/services/v3/contract-matcher.js +33 -0
  47. package/dist/backend/backend/src/services/v3/contract-matcher.js.map +1 -0
  48. package/dist/backend/backend/src/services/v3/escalation.service.d.ts +20 -1
  49. package/dist/backend/backend/src/services/v3/escalation.service.d.ts.map +1 -1
  50. package/dist/backend/backend/src/services/v3/escalation.service.js +97 -28
  51. package/dist/backend/backend/src/services/v3/escalation.service.js.map +1 -1
  52. package/dist/backend/backend/src/services/v3/service-contract-gate.service.d.ts +6 -4
  53. package/dist/backend/backend/src/services/v3/service-contract-gate.service.d.ts.map +1 -1
  54. package/dist/backend/backend/src/services/v3/service-contract-gate.service.js +18 -28
  55. package/dist/backend/backend/src/services/v3/service-contract-gate.service.js.map +1 -1
  56. package/dist/backend/backend/src/services/v3/team-trigger-reconciler.service.d.ts.map +1 -1
  57. package/dist/backend/backend/src/services/v3/team-trigger-reconciler.service.js +14 -9
  58. package/dist/backend/backend/src/services/v3/team-trigger-reconciler.service.js.map +1 -1
  59. package/dist/backend/backend/src/services/v3/trigger-engine.service.d.ts +34 -1
  60. package/dist/backend/backend/src/services/v3/trigger-engine.service.d.ts.map +1 -1
  61. package/dist/backend/backend/src/services/v3/trigger-engine.service.js +115 -5
  62. package/dist/backend/backend/src/services/v3/trigger-engine.service.js.map +1 -1
  63. package/dist/backend/backend/src/types/credential.types.d.ts +185 -0
  64. package/dist/backend/backend/src/types/credential.types.d.ts.map +1 -0
  65. package/dist/backend/backend/src/types/credential.types.js +76 -0
  66. package/dist/backend/backend/src/types/credential.types.js.map +1 -0
  67. package/dist/backend/backend/src/utils/encryption.utils.d.ts +57 -0
  68. package/dist/backend/backend/src/utils/encryption.utils.d.ts.map +1 -0
  69. package/dist/backend/backend/src/utils/encryption.utils.js +162 -0
  70. package/dist/backend/backend/src/utils/encryption.utils.js.map +1 -0
  71. package/dist/cli/backend/src/services/credential/credential-store.service.d.ts +161 -0
  72. package/dist/cli/backend/src/services/credential/credential-store.service.d.ts.map +1 -0
  73. package/dist/cli/backend/src/services/credential/credential-store.service.js +298 -0
  74. package/dist/cli/backend/src/services/credential/credential-store.service.js.map +1 -0
  75. package/dist/cli/backend/src/services/credential/helpers/gemini-cli-workspace.helper.d.ts +117 -0
  76. package/dist/cli/backend/src/services/credential/helpers/gemini-cli-workspace.helper.d.ts.map +1 -0
  77. package/dist/cli/backend/src/services/credential/helpers/gemini-cli-workspace.helper.js +293 -0
  78. package/dist/cli/backend/src/services/credential/helpers/gemini-cli-workspace.helper.js.map +1 -0
  79. package/dist/cli/backend/src/services/settings/settings.service.d.ts +168 -0
  80. package/dist/cli/backend/src/services/settings/settings.service.d.ts.map +1 -0
  81. package/dist/cli/backend/src/services/settings/settings.service.js +312 -0
  82. package/dist/cli/backend/src/services/settings/settings.service.js.map +1 -0
  83. package/dist/cli/backend/src/services/skill/skill-executor.service.d.ts +159 -0
  84. package/dist/cli/backend/src/services/skill/skill-executor.service.d.ts.map +1 -0
  85. package/dist/cli/backend/src/services/skill/skill-executor.service.js +626 -0
  86. package/dist/cli/backend/src/services/skill/skill-executor.service.js.map +1 -0
  87. package/dist/cli/backend/src/services/skill/skill.service.d.ts +273 -0
  88. package/dist/cli/backend/src/services/skill/skill.service.d.ts.map +1 -0
  89. package/dist/cli/backend/src/services/skill/skill.service.js +655 -0
  90. package/dist/cli/backend/src/services/skill/skill.service.js.map +1 -0
  91. package/dist/cli/backend/src/types/credential.types.d.ts +185 -0
  92. package/dist/cli/backend/src/types/credential.types.d.ts.map +1 -0
  93. package/dist/cli/backend/src/types/credential.types.js +76 -0
  94. package/dist/cli/backend/src/types/credential.types.js.map +1 -0
  95. package/dist/cli/backend/src/utils/encryption.utils.d.ts +57 -0
  96. package/dist/cli/backend/src/utils/encryption.utils.d.ts.map +1 -0
  97. package/dist/cli/backend/src/utils/encryption.utils.js +162 -0
  98. package/dist/cli/backend/src/utils/encryption.utils.js.map +1 -0
  99. package/dist/cli/backend/src/utils/skill-md-parser.d.ts +38 -0
  100. package/dist/cli/backend/src/utils/skill-md-parser.d.ts.map +1 -0
  101. package/dist/cli/backend/src/utils/skill-md-parser.js +47 -0
  102. package/dist/cli/backend/src/utils/skill-md-parser.js.map +1 -0
  103. package/frontend/dist/assets/{index-dc92ab64.css → index-6aaa0630.css} +1 -1
  104. package/frontend/dist/assets/{index-76d76633.js → index-9e6d97d1.js} +334 -328
  105. package/frontend/dist/index.html +2 -2
  106. package/package.json +1 -1
  107. package/config/experts/empathetic-resolver/expert.json +0 -11
  108. package/config/experts/empathetic-resolver.md +0 -32
  109. package/config/experts/pragmatic-architect/expert.json +0 -11
  110. package/config/experts/pragmatic-architect.md +0 -32
  111. package/config/experts/viral-alchemist/expert.json +0 -11
  112. package/config/experts/viral-alchemist.md +0 -32
@@ -1 +1 @@
1
- {"version":3,"file":"task.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/project/task.service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAyBhC,MAAM,OAAO,WAAW;IACd,QAAQ,CAAS;IAEzB,YAAY,WAAoB;QAC9B,IAAI,CAAC,QAAQ,GAAG,WAAW;YACzB,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC;YAC1D,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;IACnD,CAAC;IAEO,oBAAoB,CAAC,OAAe;QAU1C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,KAAK,GAAG,EAAE,CAAC;QACf,IAAI,MAAM,GAAG,SAAS,CAAC;QACvB,IAAI,QAAQ,GAAG,QAAQ,CAAC;QACxB,IAAI,QAAQ,GAAG,EAAE,CAAC;QAClB,IAAI,SAAS,GAAG,EAAE,CAAC;QACnB,IAAI,WAAW,GAAG,EAAE,CAAC;QACrB,IAAI,KAAK,GAAa,EAAE,CAAC;QACzB,IAAI,kBAAkB,GAAa,EAAE,CAAC;QAEtC,IAAI,cAAc,GAAG,EAAE,CAAC;QAExB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAEhC,8BAA8B;YAC9B,IAAI,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;gBAC3C,KAAK,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBACxC,SAAS;YACX,CAAC;YAED,mBAAmB;YACnB,IAAI,WAAW,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;gBAC1C,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;gBACvD,SAAS;YACX,CAAC;YACD,IAAI,WAAW,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;gBAC5C,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC3D,SAAS;YACX,CAAC;YACD,IAAI,WAAW,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;gBAC5C,QAAQ,GAAG,WAAW,CAAC,OAAO,CAAC,eAAe,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC3D,SAAS;YACX,CAAC;YACD,IAAI,WAAW,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;gBAC7C,SAAS,GAAG,WAAW,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC7D,SAAS;YACX,CAAC;YAED,iBAAiB;YACjB,IAAI,WAAW,CAAC,UAAU,CAAC,gBAAgB,CAAC,EAAE,CAAC;gBAC7C,cAAc,GAAG,aAAa,CAAC;gBAC/B,SAAS;YACX,CAAC;YACD,IAAI,WAAW,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;gBACvC,cAAc,GAAG,OAAO,CAAC;gBACzB,SAAS;YACX,CAAC;YACD,IAAI,WAAW,CAAC,UAAU,CAAC,wBAAwB,CAAC,EAAE,CAAC;gBACrD,cAAc,GAAG,oBAAoB,CAAC;gBACtC,SAAS;YACX,CAAC;YACD,IAAI,WAAW,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;gBAClC,cAAc,GAAG,EAAE,CAAC;gBACpB,SAAS;YACX,CAAC;YAED,2CAA2C;YAC3C,IAAI,cAAc,KAAK,aAAa,IAAI,WAAW,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACpF,WAAW,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC;YACzD,CAAC;YACD,IAAI,cAAc,KAAK,OAAO,IAAI,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC/D,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YAC9C,CAAC;YACD,IAAI,cAAc,KAAK,oBAAoB,IAAI,WAAW,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC5E,kBAAkB,CAAC,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YAC3D,CAAC;QACH,CAAC;QAED,OAAO;YACL,KAAK;YACL,MAAM,EAAE,MAAM,CAAC,WAAW,EAAE;YAC5B,QAAQ,EAAE,QAAQ,CAAC,WAAW,EAAE;YAChC,QAAQ,EAAE,QAAQ,IAAI,SAAS;YAC/B,SAAS;YACT,WAAW;YACX,KAAK;YACL,kBAAkB;SACnB,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,WAAW;QACf,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC/B,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,KAAK,GAAW,EAAE,CAAC;QACzB,IAAI,UAAoB,CAAC;QACzB,IAAI,CAAC;YACH,UAAU,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC/C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACnC,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;YAC1D,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;gBAC1C,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;oBAAE,SAAS;YACpC,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;YAED,0FAA0F;YAC1F,IAAI,KAAe,CAAC;YACpB,IAAI,CAAC;gBACH,KAAK,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;YAC1C,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;YACD,MAAM,aAAa,GAAG,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;YACjE,MAAM,gBAAgB,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,aAAa,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;YAE1E,IAAI,gBAAgB,EAAE,CAAC;gBACrB,mDAAmD;gBACnD,KAAK,MAAM,YAAY,IAAI,aAAa,EAAE,CAAC;oBACzC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;oBAC1D,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;wBAAE,SAAS;oBACtC,IAAI,CAAC;wBACH,MAAM,UAAU,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;wBAC7C,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE;4BAAE,SAAS;oBAC1C,CAAC;oBAAC,MAAM,CAAC;wBACP,SAAS;oBACX,CAAC;oBAED,IAAI,WAAqB,CAAC;oBAC1B,IAAI,CAAC;wBACH,WAAW,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;oBAC7C,CAAC;oBAAC,MAAM,CAAC;wBACP,SAAS;oBACX,CAAC;oBACD,MAAM,aAAa,GAAG,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;oBAEvE,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;wBACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;wBAC7C,IAAI,CAAC;4BACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;4BACrD,MAAM,MAAM,GAAG,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;4BAElD,MAAM,IAAI,GAAS;gCACjB,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;gCAC9B,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC;gCACpE,WAAW,EAAE,MAAM,CAAC,WAAW;gCAC/B,MAAM,EAAE,YAAmB,EAAE,4BAA4B;gCACzD,QAAQ,EAAE,MAAM,CAAC,QAAe;gCAChC,QAAQ,EAAE,MAAM,CAAC,QAAQ;gCACzB,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,SAAS;gCACxC,WAAW,EAAE,SAAS;gCACtB,KAAK,EAAE,MAAM,CAAC,KAAK;gCACnB,kBAAkB,EAAE,MAAM,CAAC,kBAAkB;gCAC7C,QAAQ;gCACR,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;gCACnC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;6BACpC,CAAC;4BAEF,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;wBACnB,CAAC;wBAAC,MAAM,CAAC;4BACP,oEAAoE;4BACpE,SAAS;wBACX,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,sCAAsC;gBACtC,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;gBAEjE,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;oBACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;oBAChD,IAAI,CAAC;wBACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;wBACrD,MAAM,MAAM,GAAG,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;wBAElD,MAAM,IAAI,GAAS;4BACjB,EAAE,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;4BAC9B,KAAK,EAAE,MAAM,CAAC,KAAK;4BACnB,WAAW,EAAE,MAAM,CAAC,WAAW;4BAC/B,MAAM,EAAE,MAAM,CAAC,MAAa;4BAC5B,QAAQ,EAAE,MAAM,CAAC,QAAe;4BAChC,QAAQ,EAAE,MAAM,CAAC,QAAQ;4BACzB,SAAS,EAAE,MAAM,CAAC,SAAS;4BAC3B,WAAW,EAAE,SAAS;4BACtB,KAAK,EAAE,MAAM,CAAC,KAAK;4BACnB,kBAAkB,EAAE,MAAM,CAAC,kBAAkB;4BAC7C,QAAQ;4BACR,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;4BACnC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;yBACpC,CAAC;wBAEF,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACnB,CAAC;oBAAC,MAAM,CAAC;wBACP,iCAAiC;wBACjC,SAAS;oBACX,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YACzB,2CAA2C;YAC3C,IAAI,CAAC,CAAC,WAAW,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;gBACpC,OAAO,CAAC,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC;YACpD,CAAC;YACD,OAAO,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,aAAa;QACjB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QACvC,MAAM,YAAY,GAAG,IAAI,GAAG,EAAqB,CAAC;QAElD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC;gBACxC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE;oBACjC,EAAE,EAAE,IAAI,CAAC,WAAW;oBACpB,IAAI,EAAE,IAAI,CAAC,WAAW;oBACtB,KAAK,EAAE,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;oBACvG,KAAK,EAAE,EAAE;iBACV,CAAC,CAAC;YACL,CAAC;YACD,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,CAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvD,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACpF,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,MAAc;QACnC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QACvC,OAAO,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;IACtD,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,WAAmB;QAC3C,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;QACvC,OAAO,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,KAAK,WAAW,CAAC,CAAC;IAChE,CAAC;CACF"}
1
+ {"version":3,"file":"task.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/project/task.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Contract-rule matching predicate shared by the service contract gate and
3
+ * any caller that wants to pre-filter requests against a team's accepts /
4
+ * avoids list.
5
+ *
6
+ * Keeping the predicate in one module guarantees gate decisions and skill-side
7
+ * filtering can't drift — both paths call the same `matchRule`.
8
+ */
9
+ /**
10
+ * Case-insensitive substring match. Accepts either direction — a rule
11
+ * matches if either string contains the other. This tolerates both tightly
12
+ * scoped rules (`"bugfix"`) and verbose request phrasing (`"urgent frontend
13
+ * bugfix in checkout"`).
14
+ *
15
+ * @param requestType - The incoming request phrase to classify.
16
+ * @param rules - The team's accepts/avoids list.
17
+ * @returns The first rule that matched, or `null` when no rule applies.
18
+ */
19
+ export declare function matchRule(requestType: string, rules: readonly string[]): string | null;
20
+ //# sourceMappingURL=contract-matcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contract-matcher.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/v3/contract-matcher.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;;;;;;;;GASG;AACH,wBAAgB,SAAS,CACvB,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,SAAS,MAAM,EAAE,GACvB,MAAM,GAAG,IAAI,CAWf"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Contract-rule matching predicate shared by the service contract gate and
3
+ * any caller that wants to pre-filter requests against a team's accepts /
4
+ * avoids list.
5
+ *
6
+ * Keeping the predicate in one module guarantees gate decisions and skill-side
7
+ * filtering can't drift — both paths call the same `matchRule`.
8
+ */
9
+ /**
10
+ * Case-insensitive substring match. Accepts either direction — a rule
11
+ * matches if either string contains the other. This tolerates both tightly
12
+ * scoped rules (`"bugfix"`) and verbose request phrasing (`"urgent frontend
13
+ * bugfix in checkout"`).
14
+ *
15
+ * @param requestType - The incoming request phrase to classify.
16
+ * @param rules - The team's accepts/avoids list.
17
+ * @returns The first rule that matched, or `null` when no rule applies.
18
+ */
19
+ export function matchRule(requestType, rules) {
20
+ const needle = requestType.trim().toLowerCase();
21
+ if (!needle)
22
+ return null;
23
+ for (const rule of rules) {
24
+ const hay = rule.trim().toLowerCase();
25
+ if (!hay)
26
+ continue;
27
+ if (needle.includes(hay) || hay.includes(needle)) {
28
+ return rule;
29
+ }
30
+ }
31
+ return null;
32
+ }
33
+ //# sourceMappingURL=contract-matcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contract-matcher.js","sourceRoot":"","sources":["../../../../../../backend/src/services/v3/contract-matcher.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;;;;;;;;GASG;AACH,MAAM,UAAU,SAAS,CACvB,WAAmB,EACnB,KAAwB;IAExB,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAChD,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACzB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACtC,IAAI,CAAC,GAAG;YAAE,SAAS;QACnB,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACjD,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -18,6 +18,7 @@
18
18
  * @module services/v3/escalation.service
19
19
  */
20
20
  import { PolicyEnforcementService, type EscalationResult } from '../policy/policy-enforcement.service.js';
21
+ import type { WorkItem } from '../../types/v2/work-item.types.js';
21
22
  import type { Mission, EscalationContext, EscalationRule } from '../../types/v2/index.js';
22
23
  /**
23
24
  * Result of a single Mission's escalation evaluation.
@@ -72,6 +73,15 @@ export declare class EscalationService {
72
73
  private actionHandler;
73
74
  private triggerId;
74
75
  private started;
76
+ /**
77
+ * The wrapper function this service installed on the TriggerEngine via
78
+ * `setActionHandler`. Kept so we can detect "was I already installed?"
79
+ * on re-entry and avoid building a growing delegation chain. Each
80
+ * restart that skipped `stop()` (crash, test teardown gaps) would
81
+ * otherwise wrap the previous wrapper as its "originalHandler",
82
+ * stacking closures forever.
83
+ */
84
+ private installedHandler;
75
85
  /**
76
86
  * Creates a new EscalationService.
77
87
  *
@@ -108,6 +118,12 @@ export declare class EscalationService {
108
118
  * @returns Summary of the evaluation cycle
109
119
  */
110
120
  evaluate(): Promise<EscalationCycleSummary>;
121
+ /**
122
+ * Loads the task pool once per evaluation cycle. Extracted so `evaluate`
123
+ * can bucket items by missionId before calling
124
+ * {@link buildEscalationContext} for each mission.
125
+ */
126
+ private loadMissionWorkItems;
111
127
  /**
112
128
  * Builds an EscalationContext for a Mission by aggregating runtime data.
113
129
  *
@@ -117,9 +133,12 @@ export declare class EscalationService {
117
133
  * - Failures: count of failed WorkItems linked to this mission
118
134
  *
119
135
  * @param mission - The Mission to build context for
136
+ * @param missionItems - Pre-filtered WorkItems belonging to the mission.
137
+ * Pass an empty array when the mission has no items or the pool
138
+ * could not be loaded — the function does not re-fetch.
120
139
  * @returns Populated EscalationContext
121
140
  */
122
- buildEscalationContext(mission: Mission): Promise<EscalationContext>;
141
+ buildEscalationContext(mission: Mission, missionItems: WorkItem[]): EscalationContext;
123
142
  /**
124
143
  * Executes the required actions from an escalation result.
125
144
  *
@@ -1 +1 @@
1
- {"version":3,"file":"escalation.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/v3/escalation.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAKH,OAAO,EAAE,wBAAwB,EAAE,KAAK,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAI1G,OAAO,KAAK,EACV,OAAO,EACP,iBAAiB,EACjB,cAAc,EACf,MAAM,yBAAyB,CAAC;AAmBjC;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,iBAAiB;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,sCAAsC;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,0DAA0D;IAC1D,UAAU,EAAE,gBAAgB,CAAC;IAC7B,gCAAgC;IAChC,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,0CAA0C;IAC1C,iBAAiB,EAAE,MAAM,CAAC;IAC1B,wDAAwD;IACxD,oBAAoB,EAAE,MAAM,CAAC;IAC7B,6DAA6D;IAC7D,OAAO,EAAE,uBAAuB,EAAE,CAAC;IACnC,sCAAsC;IACtC,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,MAAM,MAAM,uBAAuB,GAAG,CACpC,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,cAAc,EACpB,MAAM,EAAE,QAAQ,GAAG,OAAO,GAAG,OAAO,KACjC,OAAO,CAAC,IAAI,CAAC,CAAC;AAMnB;;;;;;;;;;;;;GAaG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IACzC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA2B;IACzD,OAAO,CAAC,aAAa,CAAwC;IAC7D,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,OAAO,CAAS;IAExB;;;;;OAKG;gBAED,WAAW,EAAE,MAAM,EACnB,aAAa,CAAC,EAAE,wBAAwB;IAQ1C;;;;;OAKG;IACH,gBAAgB,CAAC,OAAO,EAAE,uBAAuB,GAAG,IAAI;IAIxD;;;;;OAKG;IACG,KAAK,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqDnD;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAc3B;;OAEG;IACH,SAAS,IAAI,OAAO;IAQpB;;;;;OAKG;IACG,QAAQ,IAAI,OAAO,CAAC,sBAAsB,CAAC;IAqEjD;;;;;;;;;;OAUG;IACG,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,iBAAiB,CAAC;IAoC1E;;;;;;;;;OASG;YACW,wBAAwB;IAyCtC;;;;;OAKG;YACW,qBAAqB;IAmCnC;;;;OAIG;IACG,kBAAkB,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;CA6B/C"}
1
+ {"version":3,"file":"escalation.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/v3/escalation.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAKH,OAAO,EAAE,wBAAwB,EAAE,KAAK,gBAAgB,EAAE,MAAM,yCAAyC,CAAC;AAI1G,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,mCAAmC,CAAC;AAElE,OAAO,KAAK,EACV,OAAO,EACP,iBAAiB,EACjB,cAAc,EACf,MAAM,yBAAyB,CAAC;AAmBjC;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,iBAAiB;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,sCAAsC;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,0DAA0D;IAC1D,UAAU,EAAE,gBAAgB,CAAC;IAC7B,gCAAgC;IAChC,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,0CAA0C;IAC1C,iBAAiB,EAAE,MAAM,CAAC;IAC1B,wDAAwD;IACxD,oBAAoB,EAAE,MAAM,CAAC;IAC7B,6DAA6D;IAC7D,OAAO,EAAE,uBAAuB,EAAE,CAAC;IACnC,sCAAsC;IACtC,WAAW,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,MAAM,MAAM,uBAAuB,GAAG,CACpC,OAAO,EAAE,OAAO,EAChB,IAAI,EAAE,cAAc,EACpB,MAAM,EAAE,QAAQ,GAAG,OAAO,GAAG,OAAO,KACjC,OAAO,CAAC,IAAI,CAAC,CAAC;AAMnB;;;;;;;;;;;;;GAaG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IACzC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA2B;IACzD,OAAO,CAAC,aAAa,CAAwC;IAC7D,OAAO,CAAC,SAAS,CAAuB;IACxC,OAAO,CAAC,OAAO,CAAS;IACxB;;;;;;;OAOG;IACH,OAAO,CAAC,gBAAgB,CAAuE;IAE/F;;;;;OAKG;gBAED,WAAW,EAAE,MAAM,EACnB,aAAa,CAAC,EAAE,wBAAwB;IAQ1C;;;;;OAKG;IACH,gBAAgB,CAAC,OAAO,EAAE,uBAAuB,GAAG,IAAI;IAIxD;;;;;OAKG;IACG,KAAK,CAAC,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkEnD;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAc3B;;OAEG;IACH,SAAS,IAAI,OAAO;IAQpB;;;;;OAKG;IACG,QAAQ,IAAI,OAAO,CAAC,sBAAsB,CAAC;IAsFjD;;;;OAIG;YACW,oBAAoB;IAWlC;;;;;;;;;;;;;OAaG;IACH,sBAAsB,CAAC,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,GAAG,iBAAiB;IA0BrF;;;;;;;;;OASG;YACW,wBAAwB;IAyCtC;;;;;OAKG;YACW,qBAAqB;IAiDnC;;;;OAIG;IACG,kBAAkB,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;CA6B/C"}
@@ -58,6 +58,15 @@ export class EscalationService {
58
58
  actionHandler = null;
59
59
  triggerId = null;
60
60
  started = false;
61
+ /**
62
+ * The wrapper function this service installed on the TriggerEngine via
63
+ * `setActionHandler`. Kept so we can detect "was I already installed?"
64
+ * on re-entry and avoid building a growing delegation chain. Each
65
+ * restart that skipped `stop()` (crash, test teardown gaps) would
66
+ * otherwise wrap the previous wrapper as its "originalHandler",
67
+ * stacking closures forever.
68
+ */
69
+ installedHandler = null;
61
70
  /**
62
71
  * Creates a new EscalationService.
63
72
  *
@@ -104,22 +113,33 @@ export class EscalationService {
104
113
  runReconciler: true, // Re-used as a "run escalation" signal
105
114
  },
106
115
  createdBy: 'system',
116
+ // Stable name makes create() idempotent — repeated boots reuse the
117
+ // same trigger instead of stacking duplicates. See TriggerEngine.create.
118
+ name: 'system:escalation',
107
119
  maxIdleFires: 50, // Allow many idle fires since not all cycles trigger
108
120
  });
109
121
  this.triggerId = trigger.id;
110
122
  // Register a custom action handler on the TriggerEngine that intercepts
111
- // our trigger and runs the evaluation loop.
112
- const originalHandler = triggerEngine['actionHandler'];
113
- triggerEngine.setActionHandler(async (t, action) => {
114
- if (t.id === this.triggerId) {
115
- await this.evaluate();
116
- return;
117
- }
118
- // Delegate to original handler for other triggers
119
- if (originalHandler) {
120
- await originalHandler(t, action);
121
- }
122
- });
123
+ // our trigger and runs the evaluation loop. If a second `start()` runs
124
+ // without a matching `stop()` (crash recovery, test singleton reuse),
125
+ // `currentHandler` could already be OUR previous wrapper — wrapping it
126
+ // again would build a delegation chain that grows by one closure per
127
+ // restart. Detect that and reuse the prior install instead of stacking.
128
+ const currentHandler = triggerEngine['actionHandler'];
129
+ if (currentHandler !== this.installedHandler) {
130
+ const originalHandler = currentHandler;
131
+ this.installedHandler = async (trigger, action) => {
132
+ if (trigger.id === this.triggerId) {
133
+ await this.evaluate();
134
+ return;
135
+ }
136
+ // Delegate to original handler for other triggers
137
+ if (originalHandler) {
138
+ await originalHandler(trigger, action);
139
+ }
140
+ };
141
+ triggerEngine.setActionHandler(this.installedHandler);
142
+ }
123
143
  this.started = true;
124
144
  this.logger.info('EscalationService started', {
125
145
  triggerId: this.triggerId,
@@ -169,9 +189,27 @@ export class EscalationService {
169
189
  const results = [];
170
190
  try {
171
191
  const missions = await this.loadActiveMissions();
192
+ // Fetch the task pool once per cycle and bucket by missionId so each
193
+ // mission's context build is a simple Map lookup instead of a full
194
+ // scan of the (potentially thousands of items) pool. Previously N
195
+ // missions × O(pool) made the cycle quadratic on large workspaces.
196
+ const allItems = await this.loadMissionWorkItems();
197
+ const itemsByMission = new Map();
198
+ for (const wi of allItems) {
199
+ if (!wi.missionId)
200
+ continue;
201
+ const bucket = itemsByMission.get(wi.missionId);
202
+ if (bucket) {
203
+ bucket.push(wi);
204
+ }
205
+ else {
206
+ itemsByMission.set(wi.missionId, [wi]);
207
+ }
208
+ }
172
209
  for (const mission of missions) {
173
210
  try {
174
- const context = await this.buildEscalationContext(mission);
211
+ const missionItems = itemsByMission.get(mission.id) ?? [];
212
+ const context = this.buildEscalationContext(mission, missionItems);
175
213
  const escalation = this.policyService.evaluateEscalationRules(mission.policy.escalationRules, context);
176
214
  if (escalation.triggered) {
177
215
  const actionsExecuted = await this.executeEscalationActions(mission, escalation);
@@ -222,6 +260,22 @@ export class EscalationService {
222
260
  // ---------------------------------------------------------------------------
223
261
  // Context Building
224
262
  // ---------------------------------------------------------------------------
263
+ /**
264
+ * Loads the task pool once per evaluation cycle. Extracted so `evaluate`
265
+ * can bucket items by missionId before calling
266
+ * {@link buildEscalationContext} for each mission.
267
+ */
268
+ async loadMissionWorkItems() {
269
+ try {
270
+ return await TaskPoolService.getInstance().getAllItems();
271
+ }
272
+ catch (err) {
273
+ this.logger.warn('Failed to load task pool for escalation (treating as empty)', {
274
+ error: err instanceof Error ? err.message : String(err),
275
+ });
276
+ return [];
277
+ }
278
+ }
225
279
  /**
226
280
  * Builds an EscalationContext for a Mission by aggregating runtime data.
227
281
  *
@@ -231,21 +285,23 @@ export class EscalationService {
231
285
  * - Failures: count of failed WorkItems linked to this mission
232
286
  *
233
287
  * @param mission - The Mission to build context for
288
+ * @param missionItems - Pre-filtered WorkItems belonging to the mission.
289
+ * Pass an empty array when the mission has no items or the pool
290
+ * could not be loaded — the function does not re-fetch.
234
291
  * @returns Populated EscalationContext
235
292
  */
236
- async buildEscalationContext(mission) {
237
- const taskPool = TaskPoolService.getInstance();
238
- const allItems = await taskPool.getAllItems();
239
- // Filter WorkItems belonging to this mission
240
- const missionItems = allItems.filter((wi) => wi.missionId === mission.id);
241
- // Calculate cost
242
- const currentCost = missionItems.reduce((sum, wi) => sum + (wi.cost ?? 0), 0);
243
- // Calculate hours elapsed since mission creation
293
+ buildEscalationContext(mission, missionItems) {
294
+ // Single pass over the pre-filtered slice gives us both the cost sum
295
+ // and the failure count without double-iterating.
296
+ let currentCost = 0;
297
+ let failureCount = 0;
298
+ for (const wi of missionItems) {
299
+ currentCost += wi.cost ?? 0;
300
+ if (wi.status === 'failed')
301
+ failureCount += 1;
302
+ }
244
303
  const createdAt = new Date(mission.createdAt).getTime();
245
- const now = Date.now();
246
- const hoursElapsed = (now - createdAt) / (1000 * 60 * 60);
247
- // Count failures
248
- const failureCount = missionItems.filter((wi) => wi.status === 'failed').length;
304
+ const hoursElapsed = (Date.now() - createdAt) / (1000 * 60 * 60);
249
305
  return {
250
306
  currentCost,
251
307
  hoursElapsed,
@@ -310,19 +366,32 @@ export class EscalationService {
310
366
  const allItems = await taskPool.getAllItems();
311
367
  const activeItems = allItems.filter((wi) => wi.missionId === missionId &&
312
368
  (wi.status === 'queued' || wi.status === 'running'));
369
+ let succeeded = 0;
370
+ const failures = [];
313
371
  for (const item of activeItems) {
314
372
  try {
315
373
  // queued → blocked requires queued→running→blocked or direct update
316
374
  await taskPool.updateItemStatus(item.id, 'blocked');
375
+ succeeded += 1;
317
376
  }
318
- catch {
319
- // Some transitions may not be valid — skip
377
+ catch (err) {
378
+ // Some transitions may not be valid — track so we don't report
379
+ // a falsely optimistic `pausedCount`.
380
+ failures.push({
381
+ itemId: item.id,
382
+ error: err instanceof Error ? err.message : String(err),
383
+ });
320
384
  }
321
385
  }
322
386
  this.logger.info('Paused mission WorkItems', {
323
387
  missionId,
324
- pausedCount: activeItems.length,
388
+ attempted: activeItems.length,
389
+ succeeded,
390
+ failed: failures.length,
325
391
  });
392
+ if (failures.length > 0) {
393
+ this.logger.debug('Work-item pause failures', { missionId, failures });
394
+ }
326
395
  }
327
396
  catch (err) {
328
397
  this.logger.warn('Failed to pause mission WorkItems (non-fatal)', {
@@ -1 +1 @@
1
- {"version":3,"file":"escalation.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/v3/escalation.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"escalation.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/v3/escalation.service.ts"],"names":[],"mappings":"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"}
@@ -19,19 +19,21 @@
19
19
  * - **Same-team requests skip the gate.** Teams don't contract with
20
20
  * themselves; internal work flows normally.
21
21
  *
22
- * Wiring this into the Request / delegate-task path is a separate step
23
- * (see follow-up). This service is standalone and stateless so it can
24
- * be called from controllers, skills, or future ServiceGateway layers.
22
+ * Wired into the task-pool `addItem` flow via `maybeEnforceContract` in
23
+ * `controllers/task-pool/task-pool.controller.ts`. The service itself is
24
+ * stateless and standalone so it can also be called from skills or a
25
+ * future ServiceGateway layer.
25
26
  *
26
27
  * @module services/v3/service-contract-gate.service
27
28
  */
28
29
  import type { Team } from '../../types/index.js';
30
+ export { matchRule } from './contract-matcher.js';
29
31
  /**
30
32
  * Reason codes for a rejected request. Callers use these to produce a
31
33
  * targeted error message (e.g. "out of scope" vs "ambiguous, please
32
34
  * specify a supported service type").
33
35
  */
34
- export type GateRejectionReason = 'missing_target' | 'no_contract' | 'empty_contract' | 'in_avoids' | 'no_match';
36
+ export type GateRejectionReason = 'missing_target' | 'missing_request_type' | 'no_contract' | 'empty_contract' | 'in_avoids' | 'no_match';
35
37
  /**
36
38
  * The decision returned by the gate.
37
39
  */
@@ -1 +1 @@
1
- {"version":3,"file":"service-contract-gate.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/v3/service-contract-gate.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAOjD;;;;GAIG;AACH,MAAM,MAAM,mBAAmB,GAC3B,gBAAgB,GAChB,aAAa,GACb,gBAAgB,GAChB,WAAW,GACX,UAAU,CAAC;AAEf;;GAEG;AACH,MAAM,MAAM,YAAY,GACpB;IACE,OAAO,EAAE,QAAQ,CAAC;IAClB,qDAAqD;IACrD,WAAW,EAAE,MAAM,CAAC;CACrB,GACD;IACE,OAAO,EAAE,QAAQ,CAAC;IAClB,MAAM,EAAE,mBAAmB,CAAC;IAC5B,2DAA2D;IAC3D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0EAA0E;IAC1E,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEN;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,2EAA2E;IAC3E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,wCAAwC;IACxC,MAAM,EAAE,IAAI,GAAG,SAAS,CAAC;IACzB,0EAA0E;IAC1E,WAAW,EAAE,MAAM,CAAC;CACrB;AAMD;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,mBAAmB;IAC9B;;;;;OAKG;IACH,KAAK,CAAC,GAAG,EAAE,WAAW,GAAG,YAAY;CAsDtC"}
1
+ {"version":3,"file":"service-contract-gate.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/v3/service-contract-gate.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAIjD,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAMlD;;;;GAIG;AACH,MAAM,MAAM,mBAAmB,GAC3B,gBAAgB,GAChB,sBAAsB,GACtB,aAAa,GACb,gBAAgB,GAChB,WAAW,GACX,UAAU,CAAC;AAEf;;GAEG;AACH,MAAM,MAAM,YAAY,GACpB;IACE,OAAO,EAAE,QAAQ,CAAC;IAClB,qDAAqD;IACrD,WAAW,EAAE,MAAM,CAAC;CACrB,GACD;IACE,OAAO,EAAE,QAAQ,CAAC;IAClB,MAAM,EAAE,mBAAmB,CAAC;IAC5B,2DAA2D;IAC3D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,0EAA0E;IAC1E,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEN;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,2EAA2E;IAC3E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,wCAAwC;IACxC,MAAM,EAAE,IAAI,GAAG,SAAS,CAAC;IACzB,0EAA0E;IAC1E,WAAW,EAAE,MAAM,CAAC;CACrB;AAMD;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,mBAAmB;IAC9B;;;;;OAKG;IACH,KAAK,CAAC,GAAG,EAAE,WAAW,GAAG,YAAY;CAiEtC"}
@@ -19,12 +19,15 @@
19
19
  * - **Same-team requests skip the gate.** Teams don't contract with
20
20
  * themselves; internal work flows normally.
21
21
  *
22
- * Wiring this into the Request / delegate-task path is a separate step
23
- * (see follow-up). This service is standalone and stateless so it can
24
- * be called from controllers, skills, or future ServiceGateway layers.
22
+ * Wired into the task-pool `addItem` flow via `maybeEnforceContract` in
23
+ * `controllers/task-pool/task-pool.controller.ts`. The service itself is
24
+ * stateless and standalone so it can also be called from skills or a
25
+ * future ServiceGateway layer.
25
26
  *
26
27
  * @module services/v3/service-contract-gate.service
27
28
  */
29
+ import { matchRule } from './contract-matcher.js';
30
+ export { matchRule } from './contract-matcher.js';
28
31
  // ---------------------------------------------------------------------------
29
32
  // Service
30
33
  // ---------------------------------------------------------------------------
@@ -65,6 +68,16 @@ export class ServiceContractGate {
65
68
  message: 'Target team could not be resolved.',
66
69
  };
67
70
  }
71
+ // A missing requestType is a caller bug (no metadata in the WorkItem),
72
+ // not a policy decision. Surface it explicitly so the caller doesn't
73
+ // misread "no_match" as "the target team rejected my work".
74
+ if (!req.requestType || !req.requestType.trim()) {
75
+ return {
76
+ outcome: 'reject',
77
+ reason: 'missing_request_type',
78
+ message: 'Cross-team requests must supply a non-empty `requestType` (or a title/description fallback).',
79
+ };
80
+ }
68
81
  const contract = req.toTeam.serviceContract;
69
82
  if (!contract) {
70
83
  return {
@@ -74,7 +87,7 @@ export class ServiceContractGate {
74
87
  };
75
88
  }
76
89
  // `avoids` wins over `accepts` — fail closed on negative signal.
77
- const avoidHit = matchAny(req.requestType, contract.avoids ?? []);
90
+ const avoidHit = matchRule(req.requestType, contract.avoids ?? []);
78
91
  if (avoidHit) {
79
92
  return {
80
93
  outcome: 'reject',
@@ -91,7 +104,7 @@ export class ServiceContractGate {
91
104
  message: `Team "${req.toTeam.name}" has a service contract with no accepted task types.`,
92
105
  };
93
106
  }
94
- const acceptHit = matchAny(req.requestType, accepts);
107
+ const acceptHit = matchRule(req.requestType, accepts);
95
108
  if (acceptHit) {
96
109
  return { outcome: 'accept', matchedRule: acceptHit };
97
110
  }
@@ -102,29 +115,6 @@ export class ServiceContractGate {
102
115
  };
103
116
  }
104
117
  }
105
- // ---------------------------------------------------------------------------
106
- // Matching helpers
107
- // ---------------------------------------------------------------------------
108
- /**
109
- * Case-insensitive substring match. Accepts either direction — a rule
110
- * matches if either string contains the other. This tolerates both tightly
111
- * scoped rules ("bugfix") and verbose request phrasing ("urgent frontend
112
- * bugfix in checkout").
113
- */
114
- function matchAny(requestType, rules) {
115
- const needle = requestType.trim().toLowerCase();
116
- if (!needle)
117
- return null;
118
- for (const rule of rules) {
119
- const hay = rule.trim().toLowerCase();
120
- if (!hay)
121
- continue;
122
- if (needle.includes(hay) || hay.includes(needle)) {
123
- return rule;
124
- }
125
- }
126
- return null;
127
- }
128
118
  /**
129
119
  * Build a helpful rejection message that lists what the team does accept,
130
120
  * so the caller can reframe or re-route.
@@ -1 +1 @@
1
- {"version":3,"file":"service-contract-gate.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/v3/service-contract-gate.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"service-contract-gate.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/v3/service-contract-gate.service.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"team-trigger-reconciler.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/v3/team-trigger-reconciler.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAmB,MAAM,sBAAsB,CAAC;AAElE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAOjE;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,+BAA+B;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,4CAA4C;IAC5C,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,2DAA2D;IAC3D,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,4EAA4E;IAC5E,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,8EAA8E;IAC9E,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,qDAAqD;IACrD,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAMD;;;;;;;;;;GAUG;AACH,qBAAa,qBAAqB;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;IACvC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;gBAE7B,MAAM,EAAE,aAAa;IAOjC;;;;;;OAMG;IACG,SAAS,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,gBAAgB,CAAC;IA+EtD;;;;;;OAMG;IACG,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAkBpD,OAAO,CAAC,aAAa;IAarB;;;;OAIG;IACH,OAAO,CAAC,QAAQ;CAiBjB"}
1
+ {"version":3,"file":"team-trigger-reconciler.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/v3/team-trigger-reconciler.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,IAAI,EAAmB,MAAM,sBAAsB,CAAC;AAGlE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAOjE;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,+BAA+B;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,4CAA4C;IAC5C,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,2DAA2D;IAC3D,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,4EAA4E;IAC5E,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,8EAA8E;IAC9E,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,qDAAqD;IACrD,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAMD;;;;;;;;;;GAUG;AACH,qBAAa,qBAAqB;IAChC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgB;IACvC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;gBAE7B,MAAM,EAAE,aAAa;IAOjC;;;;;;OAMG;IACG,SAAS,CAAC,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,gBAAgB,CAAC;IA+EtD;;;;;;OAMG;IACG,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAkBpD,OAAO,CAAC,aAAa;IAarB;;;;OAIG;IACH,OAAO,CAAC,QAAQ;CAqBjB"}
@@ -16,6 +16,7 @@
16
16
  *
17
17
  * @module services/v3/team-trigger-reconciler.service
18
18
  */
19
+ import { DEFAULT_MAX_IDLE_FIRES } from '../../types/v2/trigger.types.js';
19
20
  import { LoggerService } from '../core/logger.service.js';
20
21
  // ---------------------------------------------------------------------------
21
22
  // Service
@@ -66,9 +67,9 @@ export class TeamTriggerReconciler {
66
67
  }
67
68
  // Pull current engine-side triggers for this team.
68
69
  const currentByName = new Map();
69
- for (const t of this.engine.list()) {
70
- if (t.teamId === team.id && t.name) {
71
- currentByName.set(t.name, t);
70
+ for (const trigger of this.engine.list()) {
71
+ if (trigger.teamId === team.id && trigger.name) {
72
+ currentByName.set(trigger.name, trigger);
72
73
  }
73
74
  }
74
75
  // 1) Delete engine triggers whose name disappeared from the spec.
@@ -125,9 +126,9 @@ export class TeamTriggerReconciler {
125
126
  */
126
127
  async unregisterAll(teamId) {
127
128
  let removed = 0;
128
- for (const t of this.engine.list()) {
129
- if (t.teamId === teamId) {
130
- await this.engine.delete(t.id);
129
+ for (const trigger of this.engine.list()) {
130
+ if (trigger.teamId === teamId) {
131
+ await this.engine.delete(trigger.id);
131
132
  removed += 1;
132
133
  }
133
134
  }
@@ -167,9 +168,13 @@ export class TeamTriggerReconciler {
167
168
  config: spec.config,
168
169
  action: spec.action,
169
170
  maxFires: spec.maxFires,
170
- // When undefined, the factory applies DEFAULT_MAX_IDLE_FIRES mirror
171
- // that so an unchanged spec isn't falsely flagged as drift.
172
- maxIdleFires: spec.maxIdleFires ?? trigger.maxIdleFires,
171
+ // When the spec omits `maxIdleFires`, compare against the factory
172
+ // default NOT the running trigger's current value. Mirroring the
173
+ // running value silently hides convergence bugs: if the operator
174
+ // authored the spec with `maxIdleFires: 50`, then later dropped the
175
+ // field intending to fall back to the default, the old value would
176
+ // stick forever because runtime == desired.
177
+ maxIdleFires: spec.maxIdleFires ?? DEFAULT_MAX_IDLE_FIRES,
173
178
  };
174
179
  return JSON.stringify(runtime) !== JSON.stringify(desired);
175
180
  }