crewly 1.9.0 → 1.11.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/config/roles/orchestrator/prompt.md +53 -2
- package/config/skills/agent/core/get-sops/SKILL.md +6 -2
- package/config/skills/agent/core/get-sops/execute.sh +26 -1
- package/config/skills/agent/core/get-team-norms/SKILL.md +69 -0
- package/config/skills/agent/core/list-my-crons/SKILL.md +67 -0
- package/config/skills/agent/core/list-my-crons/execute.sh +77 -0
- package/config/skills/agent/core/schedule-followup/SKILL.md +13 -0
- package/config/skills/agent/core/update-sop/SKILL.md +73 -0
- package/config/skills/agent/core/update-sop/execute.sh +115 -0
- package/config/skills/agent/core/update-team-norm/SKILL.md +67 -0
- package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.d.ts +2 -0
- package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.js +50 -1
- package/dist/backend/backend/src/controllers/chat-v2/chat-v2.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/chat-v2/chat-v2.routes.d.ts +2 -0
- package/dist/backend/backend/src/controllers/chat-v2/chat-v2.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/chat-v2/chat-v2.routes.js +6 -2
- package/dist/backend/backend/src/controllers/chat-v2/chat-v2.routes.js.map +1 -1
- package/dist/backend/backend/src/controllers/slack/slack.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/slack/slack.controller.js +10 -0
- package/dist/backend/backend/src/controllers/slack/slack.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/system/system.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/system/system.controller.js +2 -1
- package/dist/backend/backend/src/controllers/system/system.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/task-pool/task-pool.controller.d.ts +29 -5
- 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 +106 -9
- 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 +17 -0
- package/dist/backend/backend/src/controllers/team/team.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/team/team.controller.js +32 -0
- package/dist/backend/backend/src/controllers/team/team.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/wiki/wiki.controller.d.ts +45 -0
- package/dist/backend/backend/src/controllers/wiki/wiki.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/wiki/wiki.controller.js +364 -46
- package/dist/backend/backend/src/controllers/wiki/wiki.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/wiki/wiki.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/wiki/wiki.routes.js +9 -1
- package/dist/backend/backend/src/controllers/wiki/wiki.routes.js.map +1 -1
- package/dist/backend/backend/src/index.d.ts.map +1 -1
- package/dist/backend/backend/src/index.js +80 -73
- 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 +12 -6
- package/dist/backend/backend/src/routes/api.routes.js.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.d.ts +13 -4
- 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 +47 -11
- package/dist/backend/backend/src/services/chat-v2/chat-v2.dispatcher.service.js.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/chat-v2.providers.d.ts +28 -0
- package/dist/backend/backend/src/services/chat-v2/chat-v2.providers.d.ts.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/chat-v2.providers.js +49 -0
- package/dist/backend/backend/src/services/chat-v2/chat-v2.providers.js.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/chat-v2.service.d.ts +60 -2
- package/dist/backend/backend/src/services/chat-v2/chat-v2.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/chat-v2.service.js +93 -3
- package/dist/backend/backend/src/services/chat-v2/chat-v2.service.js.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/legacy-dto.utils.d.ts +25 -0
- package/dist/backend/backend/src/services/chat-v2/legacy-dto.utils.d.ts.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/legacy-dto.utils.js +33 -0
- package/dist/backend/backend/src/services/chat-v2/legacy-dto.utils.js.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/sqlite/channel.store.d.ts +28 -0
- package/dist/backend/backend/src/services/chat-v2/sqlite/channel.store.d.ts.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/sqlite/channel.store.js +48 -0
- package/dist/backend/backend/src/services/chat-v2/sqlite/channel.store.js.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.d.ts +21 -0
- package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.d.ts.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.js +30 -0
- package/dist/backend/backend/src/services/chat-v2/sqlite/message.store.js.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/types.d.ts +14 -0
- package/dist/backend/backend/src/services/chat-v2/types.d.ts.map +1 -1
- package/dist/backend/backend/src/services/chat-v2/types.js.map +1 -1
- package/dist/backend/backend/src/services/core/retry.util.d.ts +67 -0
- package/dist/backend/backend/src/services/core/retry.util.d.ts.map +1 -0
- package/dist/backend/backend/src/services/core/retry.util.js +62 -0
- package/dist/backend/backend/src/services/core/retry.util.js.map +1 -0
- package/dist/backend/backend/src/services/index.d.ts +0 -1
- package/dist/backend/backend/src/services/index.d.ts.map +1 -1
- package/dist/backend/backend/src/services/index.js +0 -1
- package/dist/backend/backend/src/services/index.js.map +1 -1
- package/dist/backend/backend/src/services/intent-task/intent-task-follow-up.service.d.ts +26 -108
- package/dist/backend/backend/src/services/intent-task/intent-task-follow-up.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/intent-task/intent-task-follow-up.service.js +26 -214
- package/dist/backend/backend/src/services/intent-task/intent-task-follow-up.service.js.map +1 -1
- package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.d.ts +11 -0
- package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.d.ts.map +1 -1
- package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.js +69 -12
- package/dist/backend/backend/src/services/reconciler/reconciler-data-provider.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.d.ts +10 -0
- package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.d.ts.map +1 -1
- package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js +21 -0
- package/dist/backend/backend/src/services/slack/slack-orchestrator-bridge.js.map +1 -1
- package/dist/backend/backend/src/services/slack/slack.service.d.ts +12 -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 +53 -1
- package/dist/backend/backend/src/services/slack/slack.service.js.map +1 -1
- package/dist/backend/backend/src/services/sop/sop.service.d.ts +10 -0
- package/dist/backend/backend/src/services/sop/sop.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/sop/sop.service.js +71 -10
- package/dist/backend/backend/src/services/sop/sop.service.js.map +1 -1
- package/dist/backend/backend/src/services/wiki/sop-catalog.service.d.ts +83 -0
- package/dist/backend/backend/src/services/wiki/sop-catalog.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/wiki/sop-catalog.service.js +185 -0
- package/dist/backend/backend/src/services/wiki/sop-catalog.service.js.map +1 -0
- package/dist/backend/backend/src/services/wiki/wiki-cleanup.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-cleanup.service.js +12 -0
- package/dist/backend/backend/src/services/wiki/wiki-cleanup.service.js.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-overlay.resolver.d.ts +43 -0
- package/dist/backend/backend/src/services/wiki/wiki-overlay.resolver.d.ts.map +1 -0
- package/dist/backend/backend/src/services/wiki/wiki-overlay.resolver.js +67 -0
- package/dist/backend/backend/src/services/wiki/wiki-overlay.resolver.js.map +1 -0
- package/dist/backend/backend/src/services/wiki/wiki-search.service.d.ts +79 -19
- package/dist/backend/backend/src/services/wiki/wiki-search.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-search.service.js +275 -106
- package/dist/backend/backend/src/services/wiki/wiki-search.service.js.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-workitem-bridge.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/wiki/wiki-workitem-bridge.service.js +13 -0
- package/dist/backend/backend/src/services/wiki/wiki-workitem-bridge.service.js.map +1 -1
- package/dist/backend/backend/src/services/workflow/cron-task.service.d.ts +13 -0
- package/dist/backend/backend/src/services/workflow/cron-task.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/workflow/cron-task.service.js +77 -8
- package/dist/backend/backend/src/services/workflow/cron-task.service.js.map +1 -1
- package/dist/backend/backend/src/types/sop.types.d.ts +7 -0
- package/dist/backend/backend/src/types/sop.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/sop.types.js.map +1 -1
- package/dist/backend/backend/src/types/v2/work-item.types.d.ts +7 -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 +1 -1
- package/dist/backend/backend/src/types/v2/work-item.types.js.map +1 -1
- package/dist/cli/backend/src/types/sop.types.d.ts +7 -0
- package/dist/cli/backend/src/types/sop.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/sop.types.js.map +1 -1
- package/dist/cli/backend/src/types/v2/work-item.types.d.ts +7 -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 +1 -1
- package/dist/cli/backend/src/types/v2/work-item.types.js.map +1 -1
- package/frontend/dist/assets/index-4099a91c.js +4961 -0
- package/frontend/dist/assets/index-44266b5d.css +42 -0
- package/frontend/dist/index.html +2 -2
- package/package.json +1 -1
- package/frontend/dist/assets/index-068bb4f6.css +0 -42
- package/frontend/dist/assets/index-c24ceb15.js +0 -4960
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wiki.routes.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/controllers/wiki/wiki.routes.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"wiki.routes.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/controllers/wiki/wiki.routes.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAkCjC;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CAqCzC"}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* @module controllers/wiki/wiki.routes
|
|
5
5
|
*/
|
|
6
6
|
import { Router } from 'express';
|
|
7
|
-
import { ingest, queryVault, queueAdd, queueList, queueClaim, queueClaimNext, queueProcess, queueSkip, queueStats, bookkeep, bookkeepTriggerNow, listVaults, getVaultTree, getPage, searchVault, getBacklinks, lintVault, getRecent, reflectTriggerNow, migrateScan, migrateApply, migrateOssSops, cleanupScan, cleanupApply, } from './wiki.controller.js';
|
|
7
|
+
import { ingest, queryVault, queueAdd, queueList, queueClaim, queueClaimNext, queueProcess, queueSkip, queueStats, bookkeep, bookkeepTriggerNow, listVaults, getVaultTree, getPage, searchVault, searchAllVaults, listSopCatalog, installSop, uninstallSop, writeOverlayPage, deleteOverlayPage, getBacklinks, lintVault, getRecent, reflectTriggerNow, migrateScan, migrateApply, migrateOssSops, cleanupScan, cleanupApply, } from './wiki.controller.js';
|
|
8
8
|
/**
|
|
9
9
|
* Creates the wiki router.
|
|
10
10
|
*
|
|
@@ -41,6 +41,14 @@ export function createWikiRouter() {
|
|
|
41
41
|
router.get('/tree', getVaultTree);
|
|
42
42
|
router.get('/page', getPage);
|
|
43
43
|
router.get('/search', searchVault);
|
|
44
|
+
router.get('/search-all', searchAllVaults);
|
|
45
|
+
// SOP catalog (marketplace): browse config/sops + install/uninstall per team.
|
|
46
|
+
router.get('/sop-catalog', listSopCatalog);
|
|
47
|
+
router.post('/sop-catalog/install', installSop);
|
|
48
|
+
router.post('/sop-catalog/uninstall', uninstallSop);
|
|
49
|
+
// Owner-authored overlay pages (team norms + custom SOPs).
|
|
50
|
+
router.post('/overlay-page', writeOverlayPage);
|
|
51
|
+
router.delete('/overlay-page', deleteOverlayPage);
|
|
44
52
|
router.get('/backlinks', getBacklinks);
|
|
45
53
|
router.get('/recent', getRecent);
|
|
46
54
|
router.post('/migrate/scan', migrateScan);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wiki.routes.js","sourceRoot":"","sources":["../../../../../../backend/src/controllers/wiki/wiki.routes.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EACL,MAAM,EACN,UAAU,EACV,QAAQ,EACR,SAAS,EACT,UAAU,EACV,cAAc,EACd,YAAY,EACZ,SAAS,EACT,UAAU,EACV,QAAQ,EACR,kBAAkB,EAClB,UAAU,EACV,YAAY,EACZ,OAAO,EACP,WAAW,EACX,YAAY,EACZ,SAAS,EACT,SAAS,EACT,iBAAiB,EACjB,WAAW,EACX,YAAY,EACZ,cAAc,EACd,WAAW,EACX,YAAY,GACb,MAAM,sBAAsB,CAAC;AAE9B;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,gBAAgB;IAC9B,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC;IACxB,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;IAC/B,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IAClC,yEAAyE;IACzE,MAAM,CAAC,GAAG,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;IACvC,MAAM,CAAC,IAAI,CAAC,mBAAmB,EAAE,cAAc,CAAC,CAAC;IACjD,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;IAChC,MAAM,CAAC,GAAG,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IAChC,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,UAAU,CAAC,CAAC;IAC5C,MAAM,CAAC,IAAI,CAAC,oBAAoB,EAAE,YAAY,CAAC,CAAC;IAChD,MAAM,CAAC,IAAI,CAAC,iBAAiB,EAAE,SAAS,CAAC,CAAC;IAC1C,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IACnC,MAAM,CAAC,IAAI,CAAC,uBAAuB,EAAE,kBAAkB,CAAC,CAAC;IACzD,MAAM,CAAC,IAAI,CAAC,sBAAsB,EAAE,iBAAiB,CAAC,CAAC;IACvD,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;IAChC,yCAAyC;IACzC,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IAClC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;IAClC,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC7B,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IACnC,MAAM,CAAC,GAAG,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;IACvC,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IACjC,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC;IAC1C,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,YAAY,CAAC,CAAC;IAC5C,MAAM,CAAC,IAAI,CAAC,mBAAmB,EAAE,cAAc,CAAC,CAAC;IACjD,MAAM,CAAC,IAAI,CAAC,eAAe,EAAE,WAAW,CAAC,CAAC;IAC1C,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAAE,YAAY,CAAC,CAAC;IAC5C,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
|
1
|
+
{"version":3,"file":"wiki.routes.js","sourceRoot":"","sources":["../../../../../../backend/src/controllers/wiki/wiki.routes.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../backend/src/index.ts"],"names":[],"mappings":";AAwCA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAuIjD,qBAAa,YAAY;IACxB,OAAO,CAAC,GAAG,CAAsB;IACjC,OAAO,CAAC,UAAU,CAAkC;IACpD,OAAO,CAAC,EAAE,CAAiB;IAC3B,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,MAAM,CAAqE;IAEnF,OAAO,CAAC,cAAc,CAAkB;IACxC,OAAO,CAAC,WAAW,CAAe;IAClC,OAAO,CAAC,gBAAgB,CAAoB;IAC5C,OAAO,CAAC,uBAAuB,CAA2B;IAC1D,OAAO,CAAC,sBAAsB,CAA0B;IACxD,OAAO,CAAC,4BAA4B,CAAgC;IACpE,OAAO,CAAC,uBAAuB,CAA2B;IAC1D,OAAO,CAAC,aAAa,CAAiB;IACtC,OAAO,CAAC,eAAe,CAAmB;IAC1C,OAAO,CAAC,mBAAmB,CAAuB;IAClD,OAAO,CAAC,qBAAqB,CAAyB;IACtD,OAAO,CAAC,wBAAwB,CAA4B;IAC5D,OAAO,CAAC,eAAe,CAAmB;IAC1C,qEAAqE;IACrE,OAAO,CAAC,qBAAqB,CAAsC;IACnE,kGAAkG;IAClG,OAAO,CAAC,sBAAsB,CAAuC;IAGrE,OAAO,CAAC,+BAA+B,CAAgD;IACvF,+FAA+F;IAC/F,OAAO,CAAC,oBAAoB,CAAqC;IACjE,8HAA8H;IAC9H,OAAO,CAAC,0BAA0B,CAA2C;IAC7E,OAAO,CAAC,6BAA6B,CAA8C;IACnF,OAAO,CAAC,wBAAwB,CAAyC;IACzE,OAAO,CAAC,2BAA2B,CAA+B;IAClE,OAAO,CAAC,0BAA0B,CAA8B;IAChE,OAAO,CAAC,iBAAiB,CAAkC;IAC3D,OAAO,CAAC,kBAAkB,CAA0C;IAKpE,OAAO,CAAC,aAAa,CAAuE;IAC5F,OAAO,CAAC,gBAAgB,CAET;IAGf,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,wBAAwB,CAA+B;gBAEnD,MAAM,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC;IA2D3C,OAAO,CAAC,kBAAkB;IA6qB1B,OAAO,CAAC,mBAAmB;IAmD3B,OAAO,CAAC,eAAe;IA6HvB,OAAO,CAAC,kBAAkB;IAwBpB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../backend/src/index.ts"],"names":[],"mappings":";AAwCA,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAuIjD,qBAAa,YAAY;IACxB,OAAO,CAAC,GAAG,CAAsB;IACjC,OAAO,CAAC,UAAU,CAAkC;IACpD,OAAO,CAAC,EAAE,CAAiB;IAC3B,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,MAAM,CAAqE;IAEnF,OAAO,CAAC,cAAc,CAAkB;IACxC,OAAO,CAAC,WAAW,CAAe;IAClC,OAAO,CAAC,gBAAgB,CAAoB;IAC5C,OAAO,CAAC,uBAAuB,CAA2B;IAC1D,OAAO,CAAC,sBAAsB,CAA0B;IACxD,OAAO,CAAC,4BAA4B,CAAgC;IACpE,OAAO,CAAC,uBAAuB,CAA2B;IAC1D,OAAO,CAAC,aAAa,CAAiB;IACtC,OAAO,CAAC,eAAe,CAAmB;IAC1C,OAAO,CAAC,mBAAmB,CAAuB;IAClD,OAAO,CAAC,qBAAqB,CAAyB;IACtD,OAAO,CAAC,wBAAwB,CAA4B;IAC5D,OAAO,CAAC,eAAe,CAAmB;IAC1C,qEAAqE;IACrE,OAAO,CAAC,qBAAqB,CAAsC;IACnE,kGAAkG;IAClG,OAAO,CAAC,sBAAsB,CAAuC;IAGrE,OAAO,CAAC,+BAA+B,CAAgD;IACvF,+FAA+F;IAC/F,OAAO,CAAC,oBAAoB,CAAqC;IACjE,8HAA8H;IAC9H,OAAO,CAAC,0BAA0B,CAA2C;IAC7E,OAAO,CAAC,6BAA6B,CAA8C;IACnF,OAAO,CAAC,wBAAwB,CAAyC;IACzE,OAAO,CAAC,2BAA2B,CAA+B;IAClE,OAAO,CAAC,0BAA0B,CAA8B;IAChE,OAAO,CAAC,iBAAiB,CAAkC;IAC3D,OAAO,CAAC,kBAAkB,CAA0C;IAKpE,OAAO,CAAC,aAAa,CAAuE;IAC5F,OAAO,CAAC,gBAAgB,CAET;IAGf,OAAO,CAAC,cAAc,CAAS;IAC/B,OAAO,CAAC,wBAAwB,CAA+B;gBAEnD,MAAM,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC;IA2D3C,OAAO,CAAC,kBAAkB;IA6qB1B,OAAO,CAAC,mBAAmB;IAmD3B,OAAO,CAAC,eAAe;IA6HvB,OAAO,CAAC,kBAAkB;IAwBpB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IA2pC5B;;;OAGG;YACW,2BAA2B;IA8BzC;;;OAGG;YACW,8BAA8B;IAsB5C;;;OAGG;YACW,gCAAgC;IAsB9C;;;OAGG;YACW,8BAA8B;IAsB5C;;;;OAIG;YACW,8BAA8B;IA+H5C;;;;;OAKG;YACW,iCAAiC;IAyJ/C;;;;OAIG;YACW,2BAA2B;YA0B3B,qBAAqB;YAsBrB,eAAe;YA4Ef,kBAAkB;IAgBhC,OAAO,CAAC,WAAW,CAAK;IAExB,OAAO,CAAC,sBAAsB;IAqD9B,OAAO,CAAC,qBAAqB;IAsC7B;;;;OAIG;IACH,OAAO,CAAC,kBAAkB;IA0D1B;;;;;;;;;OASG;IACH,OAAO,CAAC,qBAAqB;IAqH7B,OAAO,CAAC,cAAc;IAchB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAiT/B,SAAS,IAAI,aAAa;CAG1B;AAeD,eAAe,YAAY,CAAC"}
|
|
@@ -20,12 +20,12 @@ import { createApiRoutes } from './routes/api.routes.js';
|
|
|
20
20
|
import { TerminalGateway, setTerminalGateway } from './websocket/terminal.gateway.js';
|
|
21
21
|
import { initializeChatGateway } from './websocket/chat.gateway.js';
|
|
22
22
|
import { LoggerService } from './services/core/logger.service.js';
|
|
23
|
+
import { retryWithBackoff } from './services/core/retry.util.js';
|
|
23
24
|
import { CREWLY_CONSTANTS, ORCHESTRATOR_SESSION_NAME, ORCHESTRATOR_ROLE, ORCHESTRATOR_WINDOW_NAME, MESSAGE_QUEUE_CONSTANTS, RUNTIME_TYPES, AUDITOR_CONSTANTS, AUDITOR_SCHEDULER_CONSTANTS, } from './constants.js';
|
|
24
25
|
import { getSettingsService } from './services/settings/index.js';
|
|
25
26
|
import { MemoryService } from './services/memory/memory.service.js';
|
|
26
27
|
import { getImprovementStartupService } from './services/orchestrator/improvement-startup.service.js';
|
|
27
28
|
import { initializeSlackIfConfigured, shutdownSlack } from './services/slack/index.js';
|
|
28
|
-
import { resolveTeamByIdOrSlug, slugifyTeamName } from './services/workflow/team-identifier-resolver.js';
|
|
29
29
|
import { initializeWhatsAppIfConfigured, shutdownWhatsApp } from './services/whatsapp/index.js';
|
|
30
30
|
import { initializeGoogleChatIfConfigured } from './services/messaging/google-chat-initializer.js';
|
|
31
31
|
import { initializeTelegramIfConfigured, shutdownTelegram } from './services/telegram/index.js';
|
|
@@ -1283,6 +1283,14 @@ export class CrewlyServer {
|
|
|
1283
1283
|
// needs the list of session names for a given channel
|
|
1284
1284
|
// to fan-out a user message to every huddle member.
|
|
1285
1285
|
huddleMembersFor: (channelId) => chatService.queryHuddleMembersForDispatch(channelId),
|
|
1286
|
+
// Activate-on-send: messaging an offline agent wakes it, then
|
|
1287
|
+
// the dispatcher retries delivery. User-initiated, so it uses
|
|
1288
|
+
// the wake-gate-free activation path.
|
|
1289
|
+
activateAgent: async (agentSession) => {
|
|
1290
|
+
const { activateAgentBySession } = await import('./controllers/team/team.controller.js');
|
|
1291
|
+
const res = await activateAgentBySession(this.apiController, agentSession);
|
|
1292
|
+
return res.success;
|
|
1293
|
+
},
|
|
1286
1294
|
});
|
|
1287
1295
|
this.chatV2Gateway = chatGateway;
|
|
1288
1296
|
this.chatV2Dispatcher = chatDispatcher;
|
|
@@ -1552,82 +1560,49 @@ export class CrewlyServer {
|
|
|
1552
1560
|
error: err instanceof Error ? err.message : String(err),
|
|
1553
1561
|
});
|
|
1554
1562
|
}
|
|
1555
|
-
// #286:
|
|
1563
|
+
// #286/#678: Cron fires ENQUEUE a WorkItem into the task pool instead
|
|
1564
|
+
// of writing straight to the agent's terminal. The pool's wake-mesh
|
|
1565
|
+
// (WorkItemDispatchSubscriber push + AgentAutoClaim pull + reconciler
|
|
1566
|
+
// self-heal) then assigns + delivers it — so a cron firing for an
|
|
1567
|
+
// OFFLINE agent becomes a durable queued item that gets woken, instead
|
|
1568
|
+
// of being silently dropped (#678). No agent-status/auto-start callbacks
|
|
1569
|
+
// are wired: the cron now ALWAYS enqueues regardless of liveness, and
|
|
1570
|
+
// the pool owns online/offline delivery + recovery.
|
|
1556
1571
|
try {
|
|
1557
1572
|
const cronTaskService = CronTaskService.getInstance();
|
|
1558
|
-
const
|
|
1559
|
-
const
|
|
1573
|
+
const { TaskPoolService } = await import('./services/task-pool/task-pool.service.js');
|
|
1574
|
+
const { createWorkItem } = await import('./types/v2/work-item.types.js');
|
|
1560
1575
|
cronTaskService.setExecutionCallback(async (task) => {
|
|
1561
|
-
|
|
1562
|
-
|
|
1563
|
-
|
|
1564
|
-
|
|
1565
|
-
|
|
1566
|
-
|
|
1567
|
-
|
|
1568
|
-
|
|
1569
|
-
|
|
1570
|
-
|
|
1571
|
-
|
|
1572
|
-
|
|
1573
|
-
|
|
1574
|
-
|
|
1575
|
-
|
|
1576
|
-
|
|
1577
|
-
|
|
1578
|
-
|
|
1579
|
-
}
|
|
1580
|
-
|
|
1581
|
-
|
|
1582
|
-
|
|
1583
|
-
|
|
1584
|
-
|
|
1585
|
-
|
|
1586
|
-
availableSlugs: teams.slice(0, 10).map((t) => slugifyTeamName(t.name)),
|
|
1587
|
-
hint: 'Set targetTeamId to either the team UUID or one of availableSlugs (lowercase, spaces→-)',
|
|
1588
|
-
});
|
|
1589
|
-
return false;
|
|
1590
|
-
}
|
|
1591
|
-
const member = team.members.find((m) => m.sessionName === sessionName);
|
|
1592
|
-
if (!member)
|
|
1593
|
-
return false;
|
|
1594
|
-
// #286 Root Cause C: treat both 'active' and 'started' as online
|
|
1595
|
-
return member.agentStatus === 'active' || member.agentStatus === 'started';
|
|
1596
|
-
});
|
|
1597
|
-
cronTaskService.setAgentStartCallback(async (sessionName, teamId) => {
|
|
1598
|
-
try {
|
|
1599
|
-
const teams = await storageRef.getTeams();
|
|
1600
|
-
const team = resolveTeamByIdOrSlug(teams, teamId);
|
|
1601
|
-
if (!team) {
|
|
1602
|
-
this.logger.warn('CronTask auto-start: targetTeamId resolves to no team', {
|
|
1603
|
-
sessionName,
|
|
1604
|
-
targetTeamId: teamId,
|
|
1605
|
-
availableSlugs: teams.slice(0, 10).map((t) => slugifyTeamName(t.name)),
|
|
1606
|
-
hint: 'Set targetTeamId to either the team UUID or one of availableSlugs (lowercase, spaces→-)',
|
|
1607
|
-
});
|
|
1608
|
-
return false;
|
|
1609
|
-
}
|
|
1610
|
-
const member = team.members.find((m) => m.sessionName === sessionName);
|
|
1611
|
-
if (!member)
|
|
1612
|
-
return false;
|
|
1613
|
-
await registrationRef.createAgentSession({
|
|
1614
|
-
sessionName: member.sessionName,
|
|
1615
|
-
role: member.role,
|
|
1616
|
-
// Use the resolved team's UUID — not the user-supplied identifier
|
|
1617
|
-
// — so downstream agent-registration always sees the canonical id.
|
|
1618
|
-
teamId: team.id,
|
|
1619
|
-
memberId: member.id,
|
|
1620
|
-
});
|
|
1621
|
-
return true;
|
|
1622
|
-
}
|
|
1623
|
-
catch {
|
|
1624
|
-
return false;
|
|
1625
|
-
}
|
|
1576
|
+
// Deterministic id per fire slot: re-evaluating the same due slot
|
|
1577
|
+
// is a no-op (addToPool dedups by id), but each scheduled
|
|
1578
|
+
// occurrence is a fresh WorkItem. `task.nextRunAt` is still the
|
|
1579
|
+
// firing slot here — the service advances it AFTER this returns.
|
|
1580
|
+
const slot = task.nextRunAt ?? new Date().toISOString();
|
|
1581
|
+
const workItem = createWorkItem({
|
|
1582
|
+
id: `cron-${task.id}-${slot}`,
|
|
1583
|
+
type: 'cron_run',
|
|
1584
|
+
owner: 'orchestrator',
|
|
1585
|
+
target: task.targetAgent,
|
|
1586
|
+
title: `Cron: ${task.taskDescription.slice(0, 80)}`,
|
|
1587
|
+
description: task.taskDescription,
|
|
1588
|
+
metadata: {
|
|
1589
|
+
source: 'cron',
|
|
1590
|
+
cronTaskId: task.id,
|
|
1591
|
+
targetTeamId: task.targetTeamId,
|
|
1592
|
+
firedSlot: slot,
|
|
1593
|
+
},
|
|
1594
|
+
});
|
|
1595
|
+
await TaskPoolService.getInstance().addToPool(workItem);
|
|
1596
|
+
this.logger.info('Cron task enqueued as WorkItem', {
|
|
1597
|
+
id: task.id,
|
|
1598
|
+
workItemId: workItem.id,
|
|
1599
|
+
target: task.targetAgent,
|
|
1600
|
+
});
|
|
1626
1601
|
});
|
|
1627
1602
|
// Self-heal stale nextRunAt values from pre-timezone-fix versions
|
|
1628
1603
|
await cronTaskService.recalculateAllNextRunTimes();
|
|
1629
1604
|
cronTaskService.start();
|
|
1630
|
-
this.logger.info('CronTaskService started');
|
|
1605
|
+
this.logger.info('CronTaskService started (cron fires → task pool WorkItems)');
|
|
1631
1606
|
}
|
|
1632
1607
|
catch (cronErr) {
|
|
1633
1608
|
this.logger.warn('CronTaskService initialization failed (non-critical)', {
|
|
@@ -2265,18 +2240,50 @@ export class CrewlyServer {
|
|
|
2265
2240
|
}
|
|
2266
2241
|
}
|
|
2267
2242
|
}
|
|
2268
|
-
// Create orchestrator agent session
|
|
2269
|
-
|
|
2243
|
+
// Create orchestrator agent session, with bounded retry + backoff.
|
|
2244
|
+
//
|
|
2245
|
+
// #686: a single `createAgentSession` failure here used to be a
|
|
2246
|
+
// one-shot WARN + return — the orchestrator then stayed inactive
|
|
2247
|
+
// with NO retry and NO health signal, leaving the system in a
|
|
2248
|
+
// silent "假死" state (inbound messages queue forever, /health still
|
|
2249
|
+
// reports healthy). Transient failures are common at boot (e.g. a
|
|
2250
|
+
// momentary PTY spawn-slot exhaustion like #611, or a downstream
|
|
2251
|
+
// dependency still warming up after a process restart), so we retry
|
|
2252
|
+
// with a linear backoff before giving up. The reconciler's
|
|
2253
|
+
// hybrid-wake is the longer-term self-heal (it now restarts the orc
|
|
2254
|
+
// via /orchestrator/setup, #679), but boot-time retry avoids leaving
|
|
2255
|
+
// the orc dead until the next inbound message arrives.
|
|
2256
|
+
const MAX_AUTOSTART_ATTEMPTS = 5;
|
|
2257
|
+
const AUTOSTART_BACKOFF_MS = 3_000;
|
|
2258
|
+
const result = await retryWithBackoff(() => this.apiController.agentRegistrationService.createAgentSession({
|
|
2270
2259
|
sessionName: ORCHESTRATOR_SESSION_NAME,
|
|
2271
2260
|
role: ORCHESTRATOR_ROLE,
|
|
2272
2261
|
projectPath: this.config.crewlyHome,
|
|
2273
2262
|
windowName: ORCHESTRATOR_WINDOW_NAME,
|
|
2274
2263
|
runtimeType,
|
|
2275
2264
|
forceRecreate: true,
|
|
2265
|
+
}), {
|
|
2266
|
+
maxAttempts: MAX_AUTOSTART_ATTEMPTS,
|
|
2267
|
+
backoffMs: AUTOSTART_BACKOFF_MS,
|
|
2268
|
+
isSuccess: r => r.success,
|
|
2269
|
+
onRetry: ({ attempt, maxAttempts, retryInMs, result: r }) => {
|
|
2270
|
+
this.logger.warn('Auto-start orchestrator failed to create session — retrying', {
|
|
2271
|
+
error: r.error,
|
|
2272
|
+
attempt,
|
|
2273
|
+
maxAttempts,
|
|
2274
|
+
retryInMs,
|
|
2275
|
+
});
|
|
2276
|
+
},
|
|
2276
2277
|
});
|
|
2277
2278
|
if (!result.success) {
|
|
2278
|
-
|
|
2279
|
+
// Exhausted all retries. Log loudly at ERROR (not WARN) so the
|
|
2280
|
+
// failure is greppable in pm2/console output and not mistaken for
|
|
2281
|
+
// a benign skip. The orchestrator stays inactive; recovery now
|
|
2282
|
+
// falls to the reconciler's hybrid-wake on the next queued
|
|
2283
|
+
// inbound WorkItem (#679 routing fix).
|
|
2284
|
+
this.logger.error('Auto-start orchestrator FAILED after all retries — orchestrator is INACTIVE', {
|
|
2279
2285
|
error: result.error,
|
|
2286
|
+
attempts: MAX_AUTOSTART_ATTEMPTS,
|
|
2280
2287
|
});
|
|
2281
2288
|
return;
|
|
2282
2289
|
}
|