@excitedjs/dreamux 0.13.0 → 0.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.json +41 -0
- package/CHANGELOG.md +16 -1
- package/README.md +7 -4
- package/dist/admin/methods.js +86 -61
- package/dist/admin/methods.js.map +1 -1
- package/dist/admin/socket.js +31 -0
- package/dist/admin/socket.js.map +1 -1
- package/dist/agent-runtime/builtin/claude-code/runtime.js +8 -3
- package/dist/agent-runtime/builtin/claude-code/runtime.js.map +1 -1
- package/dist/agent-runtime/builtin/claude-code/supervisor.js +5 -0
- package/dist/agent-runtime/builtin/claude-code/supervisor.js.map +1 -1
- package/dist/agent-runtime/builtin/codex/codex-home.js +2 -3
- package/dist/agent-runtime/builtin/codex/codex-home.js.map +1 -1
- package/dist/agent-runtime/builtin/codex/paths.js +16 -62
- package/dist/agent-runtime/builtin/codex/paths.js.map +1 -1
- package/dist/agent-runtime/builtin/codex/runtime-support.js +4 -3
- package/dist/agent-runtime/builtin/codex/runtime-support.js.map +1 -1
- package/dist/agent-runtime/builtin/codex/runtime.js +5 -6
- package/dist/agent-runtime/builtin/codex/runtime.js.map +1 -1
- package/dist/agent-runtime/builtin/codex/supervisor.js +11 -1
- package/dist/agent-runtime/builtin/codex/supervisor.js.map +1 -1
- package/dist/agent-runtime/completion-body.js +14 -9
- package/dist/agent-runtime/completion-body.js.map +1 -1
- package/dist/channel/feishu/bot.js +0 -18
- package/dist/channel/feishu/bot.js.map +1 -1
- package/dist/channel/feishu/feishu-message.js +9 -2
- package/dist/channel/feishu/feishu-message.js.map +1 -1
- package/dist/cli/doctor.js +23 -0
- package/dist/cli/doctor.js.map +1 -1
- package/dist/cli/dreamux.js +1 -1
- package/dist/cli/dreamux.js.map +1 -1
- package/dist/cli/server-ctl.js +2 -2
- package/dist/cli/server.js +9 -4
- package/dist/cli/server.js.map +1 -1
- package/dist/daemon/restart-intent.js +7 -2
- package/dist/daemon/restart-intent.js.map +1 -1
- package/dist/dispatcher-service/dispatcher/base-prompt.js +4 -4
- package/dist/dispatcher-service/dispatcher/base-prompt.js.map +1 -1
- package/dist/dispatcher-service/dispatcher/service.js +7 -10
- package/dist/dispatcher-service/dispatcher/service.js.map +1 -1
- package/dist/dispatcher-service/dispatcher-workspace.js +108 -0
- package/dist/dispatcher-service/dispatcher-workspace.js.map +1 -0
- package/dist/dispatcher-service/service.js +5 -12
- package/dist/dispatcher-service/service.js.map +1 -1
- package/dist/dispatcher-service/team/service.js +214 -65
- package/dist/dispatcher-service/team/service.js.map +1 -1
- package/dist/dispatcher-service/team/store.js +6 -0
- package/dist/dispatcher-service/team/store.js.map +1 -1
- package/dist/dispatcher-service/team/types.js.map +1 -1
- package/dist/dispatcher-service/teammate/identity-store.js +11 -77
- package/dist/dispatcher-service/teammate/identity-store.js.map +1 -1
- package/dist/dispatcher-service/teammate/name-allocator.js +86 -0
- package/dist/dispatcher-service/teammate/name-allocator.js.map +1 -0
- package/dist/dispatcher-service/teammate/runtime-state.js +26 -8
- package/dist/dispatcher-service/teammate/runtime-state.js.map +1 -1
- package/dist/dispatcher-service/teammate/service.js +365 -113
- package/dist/dispatcher-service/teammate/service.js.map +1 -1
- package/dist/dispatcher-service/teammate/session-ledger.js +306 -0
- package/dist/dispatcher-service/teammate/session-ledger.js.map +1 -0
- package/dist/dispatcher-service/teammate/types.js +14 -0
- package/dist/dispatcher-service/teammate/types.js.map +1 -1
- package/dist/dispatcher-service/teammate/worktree-manager.js +74 -4
- package/dist/dispatcher-service/teammate/worktree-manager.js.map +1 -1
- package/dist/dispatcher-service/teammate/worktree-paths.js +53 -0
- package/dist/dispatcher-service/teammate/worktree-paths.js.map +1 -0
- package/dist/mcp/team-mcp.js +86 -75
- package/dist/mcp/team-mcp.js.map +1 -1
- package/dist/mcp/teammate-mcp.js +32 -25
- package/dist/mcp/teammate-mcp.js.map +1 -1
- package/dist/onboard/run.js +3 -3
- package/dist/onboard/run.js.map +1 -1
- package/dist/onboard/uninstall.js +7 -1
- package/dist/onboard/uninstall.js.map +1 -1
- package/dist/platform/logs.js +32 -0
- package/dist/platform/logs.js.map +1 -0
- package/dist/platform/owner-only-dir.js +37 -0
- package/dist/platform/owner-only-dir.js.map +1 -0
- package/dist/platform/paths.js +130 -33
- package/dist/platform/paths.js.map +1 -1
- package/dist/platform/runtime-sockets.js +127 -0
- package/dist/platform/runtime-sockets.js.map +1 -0
- package/dist/server.js +47 -1
- package/dist/server.js.map +1 -1
- package/package.json +1 -1
- package/skills/dispatcher/SKILL.md +62 -38
- package/skills/dispatcher/references/dispatch-task.md +3 -3
- package/skills/dispatcher/references/inspect-and-resume.md +5 -3
- package/skills/dreamux-maintenance/SKILL.md +21 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../../src/dispatcher-service/dispatcher/service.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../../src/dispatcher-service/dispatcher/service.ts"],"names":[],"mappings":"AAOA,OAAO,EACL,oBAAoB,EAEpB,wBAAwB,GAEzB,MAAM,wCAAwC,CAAC;AAEhD,OAAO,EACL,0BAA0B,EAC1B,2BAA2B,GAE5B,MAAM,wBAAwB,CAAC;AAMhC,OAAO,EAAE,eAAe,IAAI,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACpF,OAAO,EAAE,yBAAyB,EAAE,MAAM,4BAA4B,CAAC;AACvE,OAAO,EACL,eAAe,GAEhB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,2BAA2B,EAAE,MAAM,2BAA2B,CAAC;AACxE,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EACL,sCAAsC,EACtC,oCAAoC,GACrC,MAAM,kBAAkB,CAAC;AAyC1B,MAAM,+BAA+B,GAAG,GAAG,CAAC;AAE5C;;;;;;GAMG;AACH,MAAM,OAAO,sBAAsB;IAQJ;IAPZ,KAAK,GAAG,IAAI,GAAG,EAA+B,CAAC;IAC/C,QAAQ,GAAG,IAAI,GAAG,EAAyB,CAAC;IAC5C,4BAA4B,GAAG,IAAI,GAAG,EAAyB,CAAC;IAChE,sBAAsB,GAAG,IAAI,GAAG,EAAU,CAAC;IAC3C,wBAAwB,GAAa,EAAE,CAAC;IACjD,aAAa,GAAiC,IAAI,CAAC;IAE3D,YAA6B,IAAmC;QAAnC,SAAI,GAAJ,IAAI,CAA+B;IAAG,CAAC;IAEpE,gBAAgB,CAAC,QAAsC;QACrD,IAAI,CAAC,aAAa,GAAG,QAAQ,CAAC;IAChC,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,EAAU;QAC9B,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE,OAAO;QAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACvC,IAAI,QAAQ,KAAK,SAAS;YAAE,OAAO,QAAQ,CAAC;QAE5C,MAAM,OAAO,GAAG,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE;YACtD,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC3B,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QAC/B,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,EAAU;QAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChC,IAAI,IAAI,KAAK,SAAS;YAAE,OAAO;QAC/B,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QAC7B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,EAAE,mBAAmB,CAAC,CAAC;QAChF,CAAC;QACD,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QAC5B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,GAAG,CAAC,KAAK,CACZ,EAAE,aAAa,EAAE,EAAE,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,EACxC,2BAA2B,CAC5B,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IACxB,CAAC;IAED,UAAU,CAAC,EAAU;QACnB,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,OAAO,IAAI,IAAI,CAAC;IAC7C,CAAC;IAED;;;;;;;;;OASG;IACH,KAAK,CAAC,iBAAiB,CACrB,YAAoB,EACpB,UAA8B;QAE9B,MAAM,aAAa,GAAG,qBAAqB,CAAC,YAAY,EAAE,UAAU,CAAC,EAAE,CAAC,CAAC;QACzE,IAAI,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,aAAa,CAAC;YAAE,OAAO;QAC3D,MAAM,QAAQ,GAAG,IAAI,CAAC,4BAA4B,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QACtE,IAAI,QAAQ,KAAK,SAAS;YAAE,OAAO,QAAQ,CAAC;QAE5C,MAAM,QAAQ,GAAG,IAAI,CAAC,mBAAmB,CAAC,YAAY,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC;QACnF,IAAI,CAAC,4BAA4B,CAAC,GAAG,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;QAC/D,IAAI,CAAC;YACH,MAAM,QAAQ,CAAC;QACjB,CAAC;gBAAS,CAAC;YACT,IAAI,CAAC,4BAA4B,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,mBAAmB,CAC/B,YAAoB,EACpB,UAA8B,EAC9B,aAAqB;QAErB,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAC1C,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAChB,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,EAC1D,sDAAsD,CACvD,CAAC;YACF,OAAO;QACT,CAAC;QACD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC;QAC7C,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;YAC1B,IAAI,CAAC,GAAG,CAAC,IAAI,CACX,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,EAC1D,kEAAkE,CACnE,CAAC;YACF,OAAO;QACT,CAAC;QACD,MAAM,WAAW,GAAG,CAAC,CAAC;QACtB,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,WAAW,EAAE,OAAO,IAAI,CAAC,EAAE,CAAC;YAC3D,IAAI,OAAO,CAAC;YACZ,IAAI,CAAC;gBACH,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;YACzD,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,IAAI,CAAC,GAAG,CAAC,IAAI,CACX,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,EAC7E,oCAAoC,CACrC,CAAC;gBACF,OAAO;YACT,CAAC;YACD,IAAI,OAAO,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;gBAClC,IAAI,CAAC,2BAA2B,CAAC,aAAa,CAAC,CAAC;gBAChD,OAAO;YACT,CAAC;YACD,IAAI,OAAO,CAAC,MAAM,KAAK,aAAa,EAAE,CAAC;gBACrC,IAAI,CAAC,GAAG,CAAC,IAAI,CACX,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,EAClF,4DAA4D,CAC7D,CAAC;gBACF,OAAO;YACT,CAAC;YACD,IAAI,CAAC,GAAG,CAAC,IAAI,CACX;gBACE,aAAa,EAAE,YAAY;gBAC3B,MAAM,EAAE,UAAU,CAAC,MAAM;gBACzB,OAAO;gBACP,YAAY,EAAE,WAAW;gBACzB,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC;aAC5B,EACD,qCAAqC,CACtC,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,IAAI,CACX,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,EACrF,0DAA0D,CAC3D,CAAC;IACJ,CAAC;IAED,SAAS;QACP,OAAO,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;YAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;YAC3D,OAAO;gBACL,aAAa,EAAE,GAAG,CAAC,aAAa;gBAChC,UAAU,EAAE,GAAG,CAAC,UAAU;gBAC1B,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,GAAG,CAAC,MAAM;gBAC1C,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,IAAI,GAAG,CAAC,SAAS;gBAClD,OAAO,EAAE,GAAG,CAAC,OAAO,KAAK,CAAC;aAC3B,CAAC;QACJ,CAAC,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,iBAAiB,CACrB,KAA4B;QAE5B,IAAI,KAAK,CAAC,QAAQ,KAAK,gBAAgB,EAAE,CAAC;YACxC,OAAO,wBAAwB,CAAC,KAAK,CAAC,YAAY,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;QACvE,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QACtD,OAAO,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAC,CAAC;IACrE,CAAC;IAED,0BAA0B,CACxB,YAAoB,EACpB,SAAiB,EACjB,MAAc;QAEd,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAC1C,OAAO,IAAI,EAAE,OAAO,CAAC,oBAAoB,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,KAAK,CAAC;IACxE,CAAC;IAED,KAAK,CAAC,QAAQ;QACZ,KAAK,MAAM,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC;YAC/C,MAAM,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,iBAAiB,CAAC,EAAU;QACxC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC1C,IAAI,GAAG,KAAK,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC;QAC3D,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE,OAAO;QAE/B,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,CACxD,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE,KAAK,EAAE,CACrC,CAAC;QACF,MAAM,UAAU,GACd,gBAAgB,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,IAAI,2BAA2B,CAAC;QACzE,IAAI,UAAU,KAAK,2BAA2B,EAAE,CAAC;YAC/C,MAAM,IAAI,KAAK,CACb,eAAe,EAAE,aAAa,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,uBAAuB,2BAA2B,yBAAyB,CACpI,CAAC;QACJ,CAAC;QAED,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAC7D,gBAAgB,EAAE,OAAO,CAAC,QAAQ,IAAI,0BAA0B,CACjE,CAAC;QACF,0EAA0E;QAC1E,4EAA4E;QAC5E,6EAA6E;QAC7E,6CAA6C;QAC7C,MAAM,GAAG,GAAG,MAAM,yBAAyB,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAClE,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,oBAAoB,CAAC,EAAE,CAAC,CAAC;QACtD,MAAM,OAAO,GAAG,IAAI,oBAAoB,CAAC;YACvC,YAAY,EAAE,EAAE;YAChB,GAAG;YACH,MAAM,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM;YACxB,eAAe,EAAE,IAAI,CAAC,IAAI,CAAC,eAAe,IAAI,sBAAsB,EAAE;YACtE,GAAG,EAAE,UAAU;YACf,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,KAAK,SAAS;gBACpC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;gBACtC,CAAC,CAAC,EAAE,CAAC;YACP,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,aAAa,KAAK,SAAS;gBACvC,CAAC,CAAC,EAAE,aAAa,EAAE,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE;gBAC5C,CAAC,CAAC,EAAE,CAAC;SACR,CAAC,CAAC;QACH,2EAA2E;QAC3E,0EAA0E;QAC1E,uEAAuE;QACvE,mEAAmE;QACnE,MAAM,mBAAmB,GACvB,eAAe,CAAC,eAAe,EAAE,CAAC,YAAY,CAAC,IAAI,KAAK,SAAS;YAC/D,CAAC,CAAC,oCAAoC;YACtC,CAAC,CAAC,sCAAsC,CAAC;QAC7C,MAAM,OAAO,GAAG,eAAe,CAAC,aAAa,CAAC;YAC5C,GAAG;YACH,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW;YAClC,UAAU,EAAE,gBAAgB,IAAI,IAAI;YACpC,GAAG;YACH,mBAAmB;YACnB,UAAU,EAAE,IAAI,CAAC,2BAA2B,CAAC,OAAO,EAAE,EAAE,CAAC;YACzD,GAAG,EAAE,eAAe,CAAC,UAAU,CAAC;SACjC,CAAC,CAAC;QAEH,IAAI,CAAC;YACH,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;YACtB,MAAM,OAAO,CAAC,KAAK,CAAC;gBAClB,UAAU,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,CACpC,IAAI,CAAC,IAAI,CAAC,iBAAiB,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,CAAC;oBACxD,OAAO,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,CAAC;aACpC,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC;gBACH,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;YACxB,CAAC;YAAC,MAAM,CAAC;gBACP,iBAAiB;YACnB,CAAC;YACD,IAAI,CAAC;gBACH,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;YACvB,CAAC;YAAC,MAAM,CAAC;gBACP,iBAAiB;YACnB,CAAC;YACD,MAAM,GAAG,CAAC;QACZ,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE;YACjB,GAAG;YACH,OAAO;YACP,OAAO;YACP,GAAG,EAAE,UAAU;SAChB,CAAC,CAAC;QACH,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAChB;YACE,aAAa,EAAE,EAAE;YACjB,UAAU,EAAE,GAAG,CAAC,UAAU;YAC1B,GAAG;SACJ,EACD,kBAAkB,CACnB,CAAC;QACF,MAAM,IAAI,CAAC,2BAA2B,CAAC,EAAE,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;IAClE,CAAC;IAEO,2BAA2B,CACjC,OAA6B,EAC7B,YAAoB;QAEpB,MAAM,OAAO,GAAG;YACd,YAAY;YACZ,eAAe,EAAE,IAAI,CAAC,IAAI,CAAC,eAAe,IAAI,sBAAsB,EAAE;SACvE,CAAC;QACF,OAAO;YACL,GAAG,OAAO,CAAC,oBAAoB,EAAE;YACjC,uBAAuB,CAAC,OAAO,CAAC;YAChC,2BAA2B,CAAC;gBAC1B,GAAG,OAAO;gBACV,UAAU,EAAE,YAAY;aACzB,CAAC;SACH,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,2BAA2B,CACvC,YAAoB,EACpB,OAAqB,EACrB,GAAkB;QAElB,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE;YAAE,OAAO;QACxC,MAAM,MAAM,GAAG,IAAI,CAAC,aAAa,EAAE,KAAK,CAAC,YAAY,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,IAAI,CAAC;QAC3E,IAAI,MAAM,KAAK,IAAI;YAAE,OAAO;QAC5B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC;gBACvC,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,MAAM;gBACZ,MAAM,EAAE,gBAAgB;aACzB,CAAC,CAAC;YACH,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;gBAC/B,GAAG,CAAC,IAAI,CACN,EAAE,aAAa,EAAE,YAAY,EAAE,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAC3D,iCAAiC,CAClC,CAAC;YACJ,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,GAAG,CAAC,IAAI,CACN,EAAE,aAAa,EAAE,YAAY,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,EAAE,EAClD,kCAAkC,CACnC,CAAC;QACJ,CAAC;IACH,CAAC;IAEO,eAAe,CAAC,EAAU;QAChC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YACvB,MAAM,IAAI,KAAK,CAAC,eAAe,EAAE,kBAAkB,CAAC,CAAC;QACvD,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,2BAA2B,CAAC,GAAW;QAC7C,IAAI,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,GAAG,CAAC;YAAE,OAAO;QACjD,IAAI,CAAC,sBAAsB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACrC,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACxC,OAAO,IAAI,CAAC,wBAAwB,CAAC,MAAM,GAAG,+BAA+B,EAAE,CAAC;YAC9E,MAAM,OAAO,GAAG,IAAI,CAAC,wBAAwB,CAAC,KAAK,EAAE,CAAC;YACtD,IAAI,OAAO,KAAK,SAAS;gBAAE,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACzE,CAAC;IACH,CAAC;CACF;AAED,SAAS,qBAAqB,CAAC,YAAoB,EAAE,YAAoB;IACvE,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC;AACtD,CAAC;AAED,SAAS,OAAO,CAAC,GAAY;IAC3B,IAAI,GAAG,YAAY,KAAK,EAAE,CAAC;QACzB,OAAO,GAAG,CAAC,KAAK,KAAK,SAAS;YAC5B,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,EAAE;YAC5C,CAAC,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC;IAC/B,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;AAClC,CAAC"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { constants } from 'node:fs';
|
|
2
|
+
import { access, mkdir, stat } from 'node:fs/promises';
|
|
3
|
+
import { resolve } from 'node:path';
|
|
4
|
+
/**
|
|
5
|
+
* Dispatcher workspace cwd policy (issue #182 PR-4).
|
|
6
|
+
*
|
|
7
|
+
* Every configured dispatcher MUST declare an explicit `cwd`: there is no
|
|
8
|
+
* fallback to a Dreamux state directory (`~/.dreamux/state/<id>/cwd`). The
|
|
9
|
+
* workspace is the dispatcher agent's working directory AND the root under
|
|
10
|
+
* which Dreamux-managed TeamMate/Team worktrees live
|
|
11
|
+
* (`<workspace>/.workspace/worktree/...`), so it must be a real, operator-owned
|
|
12
|
+
* project directory — never inside Dreamux's own state tree.
|
|
13
|
+
*
|
|
14
|
+
* The policy is enforced loud at server startup and the dispatcher launch path,
|
|
15
|
+
* and diagnosed (non-throwing) by `dreamux doctor`.
|
|
16
|
+
*/
|
|
17
|
+
/**
|
|
18
|
+
* The configured, absolute dispatcher workspace cwd, or `null` when the
|
|
19
|
+
* dispatcher declares no `cwd`. Pure: it resolves the configured value to an
|
|
20
|
+
* absolute path but touches no filesystem.
|
|
21
|
+
*/
|
|
22
|
+
export function configuredDispatcherCwd(config, dispatcherId) {
|
|
23
|
+
const entry = config.dispatchers.find((dispatcher) => dispatcher.id === dispatcherId);
|
|
24
|
+
const cwd = entry?.cwd ?? null;
|
|
25
|
+
if (cwd === null || cwd.trim() === '')
|
|
26
|
+
return null;
|
|
27
|
+
return resolve(cwd);
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Resolve and validate a dispatcher's workspace cwd, failing loud when the
|
|
31
|
+
* contract is broken (issue #182 PR-4):
|
|
32
|
+
*
|
|
33
|
+
* - no explicit `cwd` configured → throw (no state-dir fallback);
|
|
34
|
+
* - cwd configured but missing → created with `mkdir -p` semantics;
|
|
35
|
+
* - cwd not a directory, or not read/write/exec accessible → throw.
|
|
36
|
+
*
|
|
37
|
+
* Returns the absolute, validated workspace path. Idempotent: safe to call at
|
|
38
|
+
* startup pre-flight and again per dispatcher launch / teammate spawn.
|
|
39
|
+
*/
|
|
40
|
+
export async function ensureDispatcherWorkspace(config, dispatcherId) {
|
|
41
|
+
const cwd = configuredDispatcherCwd(config, dispatcherId);
|
|
42
|
+
if (cwd === null) {
|
|
43
|
+
throw new Error(`dispatcher ${JSON.stringify(dispatcherId)} has no configured \`cwd\`; ` +
|
|
44
|
+
'set an explicit workspace directory in ~/.dreamux/config.json — dreamux ' +
|
|
45
|
+
'no longer falls back to a state directory (issue #182)');
|
|
46
|
+
}
|
|
47
|
+
try {
|
|
48
|
+
await mkdir(cwd, { recursive: true });
|
|
49
|
+
}
|
|
50
|
+
catch (err) {
|
|
51
|
+
throw new Error(`dispatcher ${JSON.stringify(dispatcherId)} workspace cwd could not be ` +
|
|
52
|
+
`created: ${cwd}: ${err instanceof Error ? err.message : String(err)}`);
|
|
53
|
+
}
|
|
54
|
+
let info;
|
|
55
|
+
try {
|
|
56
|
+
info = await stat(cwd);
|
|
57
|
+
}
|
|
58
|
+
catch (err) {
|
|
59
|
+
throw new Error(`dispatcher ${JSON.stringify(dispatcherId)} workspace cwd is not ` +
|
|
60
|
+
`accessible: ${cwd}: ${err instanceof Error ? err.message : String(err)}`);
|
|
61
|
+
}
|
|
62
|
+
if (!info.isDirectory()) {
|
|
63
|
+
throw new Error(`dispatcher ${JSON.stringify(dispatcherId)} workspace cwd is not a ` +
|
|
64
|
+
`directory: ${cwd}`);
|
|
65
|
+
}
|
|
66
|
+
try {
|
|
67
|
+
await access(cwd, constants.R_OK | constants.W_OK | constants.X_OK);
|
|
68
|
+
}
|
|
69
|
+
catch (err) {
|
|
70
|
+
throw new Error(`dispatcher ${JSON.stringify(dispatcherId)} workspace cwd is not ` +
|
|
71
|
+
`read/write accessible: ${cwd}: ${err instanceof Error ? err.message : String(err)}`);
|
|
72
|
+
}
|
|
73
|
+
return cwd;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Non-throwing variant for `dreamux doctor`: reports the cwd contract state
|
|
77
|
+
* without creating or mutating anything. A configured-but-missing directory is
|
|
78
|
+
* not an error — server startup creates it — but a missing/empty `cwd`, a
|
|
79
|
+
* non-directory, or an inaccessible directory is.
|
|
80
|
+
*/
|
|
81
|
+
export async function diagnoseDispatcherWorkspace(config, dispatcherId) {
|
|
82
|
+
const cwd = configuredDispatcherCwd(config, dispatcherId);
|
|
83
|
+
if (cwd === null) {
|
|
84
|
+
return {
|
|
85
|
+
ok: false,
|
|
86
|
+
detail: 'no configured `cwd`; set an explicit workspace directory in config.json ' +
|
|
87
|
+
'(dreamux no longer falls back to a state directory)',
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
let info;
|
|
91
|
+
try {
|
|
92
|
+
info = await stat(cwd);
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
return { ok: true, detail: `${cwd} (missing; created at server startup)` };
|
|
96
|
+
}
|
|
97
|
+
if (!info.isDirectory()) {
|
|
98
|
+
return { ok: false, detail: `${cwd} exists but is not a directory` };
|
|
99
|
+
}
|
|
100
|
+
try {
|
|
101
|
+
await access(cwd, constants.R_OK | constants.W_OK | constants.X_OK);
|
|
102
|
+
}
|
|
103
|
+
catch {
|
|
104
|
+
return { ok: false, detail: `${cwd} is not read/write accessible` };
|
|
105
|
+
}
|
|
106
|
+
return { ok: true, detail: cwd };
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=dispatcher-workspace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dispatcher-workspace.js","sourceRoot":"","sources":["../../src/dispatcher-service/dispatcher-workspace.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC;;;;;;;;;;;;GAYG;AAEH;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CACrC,MAAqB,EACrB,YAAoB;IAEpB,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,UAAU,CAAC,EAAE,KAAK,YAAY,CAAC,CAAC;IACtF,MAAM,GAAG,GAAG,KAAK,EAAE,GAAG,IAAI,IAAI,CAAC;IAC/B,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE;QAAE,OAAO,IAAI,CAAC;IACnD,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC;AACtB,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,MAAqB,EACrB,YAAoB;IAEpB,MAAM,GAAG,GAAG,uBAAuB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC1D,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CACb,cAAc,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,8BAA8B;YACtE,0EAA0E;YAC1E,wDAAwD,CAC3D,CAAC;IACJ,CAAC;IACD,IAAI,CAAC;QACH,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACxC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACb,cAAc,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,8BAA8B;YACtE,YAAY,GAAG,KAAK,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CACzE,CAAC;IACJ,CAAC;IACD,IAAI,IAAI,CAAC;IACT,IAAI,CAAC;QACH,IAAI,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACb,cAAc,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,wBAAwB;YAChE,eAAe,GAAG,KAAK,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAC5E,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CACb,cAAc,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,0BAA0B;YAClE,cAAc,GAAG,EAAE,CACtB,CAAC;IACJ,CAAC;IACD,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,GAAG,EAAE,SAAS,CAAC,IAAI,GAAG,SAAS,CAAC,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IACtE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACb,cAAc,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,wBAAwB;YAChE,0BAA0B,GAAG,KAAK,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CACvF,CAAC;IACJ,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAOD;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAC/C,MAAqB,EACrB,YAAoB;IAEpB,MAAM,GAAG,GAAG,uBAAuB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IAC1D,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QACjB,OAAO;YACL,EAAE,EAAE,KAAK;YACT,MAAM,EACJ,0EAA0E;gBAC1E,qDAAqD;SACxD,CAAC;IACJ,CAAC;IACD,IAAI,IAAI,CAAC;IACT,IAAI,CAAC;QACH,IAAI,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,CAAC;IACzB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,GAAG,uCAAuC,EAAE,CAAC;IAC7E,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;QACxB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,GAAG,gCAAgC,EAAE,CAAC;IACvE,CAAC;IACD,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,GAAG,EAAE,SAAS,CAAC,IAAI,GAAG,SAAS,CAAC,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;IACtE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,GAAG,+BAA+B,EAAE,CAAC;IACtE,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AACnC,CAAC"}
|
|
@@ -61,7 +61,6 @@ export class DispatcherService {
|
|
|
61
61
|
});
|
|
62
62
|
this.teams = new TeamService({
|
|
63
63
|
teammates: this.teammates,
|
|
64
|
-
createFeishuGroup: (input) => this.dispatchers.createFeishuGroup(input),
|
|
65
64
|
});
|
|
66
65
|
}
|
|
67
66
|
setRestartIntent(consumer) {
|
|
@@ -150,14 +149,8 @@ export class DispatcherService {
|
|
|
150
149
|
getTeamMateHistory(input) {
|
|
151
150
|
return this.teammates.history(input);
|
|
152
151
|
}
|
|
153
|
-
|
|
154
|
-
return this.teammates.
|
|
155
|
-
}
|
|
156
|
-
getTeamMateLast(dispatcherId, name) {
|
|
157
|
-
return this.teammates.last(dispatcherId, name);
|
|
158
|
-
}
|
|
159
|
-
getTeamMateContext(dispatcherId, name) {
|
|
160
|
-
return this.teammates.context(dispatcherId, name);
|
|
152
|
+
getTeamMateLast(dispatcherId, name, turns) {
|
|
153
|
+
return this.teammates.last(dispatcherId, name, turns);
|
|
161
154
|
}
|
|
162
155
|
getTeamMateCapabilities() {
|
|
163
156
|
return this.teammates.getCapabilities();
|
|
@@ -165,15 +158,15 @@ export class DispatcherService {
|
|
|
165
158
|
createTeam(input) {
|
|
166
159
|
return this.teams.create(input);
|
|
167
160
|
}
|
|
168
|
-
createTeamGroup(input) {
|
|
169
|
-
return this.teams.createGroup(input);
|
|
170
|
-
}
|
|
171
161
|
listTeams(dispatcherId) {
|
|
172
162
|
return this.teams.list(dispatcherId);
|
|
173
163
|
}
|
|
174
164
|
getTeamStatus(dispatcherId, teamId) {
|
|
175
165
|
return this.teams.status(dispatcherId, teamId);
|
|
176
166
|
}
|
|
167
|
+
getTeamHistory(input) {
|
|
168
|
+
return this.teams.history(input);
|
|
169
|
+
}
|
|
177
170
|
getTeamLedger(dispatcherId, teamId) {
|
|
178
171
|
return this.teams.ledger(dispatcherId, teamId);
|
|
179
172
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/dispatcher-service/service.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,eAAe,IAAI,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AACjF,OAAO,EACL,sBAAsB,GAGvB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;AACvE,OAAO,EAAE,yBAAyB,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"service.js","sourceRoot":"","sources":["../../src/dispatcher-service/service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import { Buffer } from 'node:buffer';
|
|
1
2
|
import { WorktreeManager } from '../teammate/worktree-manager.js';
|
|
2
|
-
import { dispatcherPrincipal, teamLeaderPrincipal } from '../teammate/types.js';
|
|
3
|
+
import { dispatcherPrincipal, requireLifecycleText, teamLeaderPrincipal, } from '../teammate/types.js';
|
|
3
4
|
import { ChannelBindingStore } from '../channel-binding/store.js';
|
|
4
5
|
import { TeamStore } from './store.js';
|
|
5
6
|
import { validateTeamId } from './types.js';
|
|
@@ -12,6 +13,9 @@ export class TeamService {
|
|
|
12
13
|
this.opts = opts;
|
|
13
14
|
}
|
|
14
15
|
async create(input) {
|
|
16
|
+
// Required recovery subject — enforced for in-process callers too
|
|
17
|
+
// (issue #182 PR-3).
|
|
18
|
+
requireLifecycleText(input.intent, 'Team create intent');
|
|
15
19
|
const teamId = validateTeamId(input.name);
|
|
16
20
|
const existing = await this.store.get(input.dispatcherId, teamId);
|
|
17
21
|
if (existing !== null && existing.status !== 'closed') {
|
|
@@ -21,13 +25,23 @@ export class TeamService {
|
|
|
21
25
|
dispatcherId: input.dispatcherId,
|
|
22
26
|
teammateName: `team-${teamId}`,
|
|
23
27
|
cwd: input.repoCwd,
|
|
28
|
+
dispatcherWorkspace: await this.opts.teammates.dispatcherWorkspace(input.dispatcherId),
|
|
24
29
|
request: input.worktree ?? {
|
|
25
30
|
mode: 'managed',
|
|
26
31
|
slug: `team-${teamId}`,
|
|
27
32
|
cleanup: 'keep',
|
|
28
33
|
},
|
|
29
34
|
});
|
|
30
|
-
|
|
35
|
+
// The TeamLeader address is a concrete, never-reused name (issue #188), not
|
|
36
|
+
// a reconstructed `${teamId}-leader`. ALWAYS allocate a fresh one — including
|
|
37
|
+
// when recreating a closed Team: `createTeamLeader` mints a new session and
|
|
38
|
+
// clears the checkpoint (it does not truly resume the old leader), so reusing
|
|
39
|
+
// the old closed `tl-` name would map one concrete name to multiple sessions
|
|
40
|
+
// and break the name↔session invariant. The old closed leader identity stays
|
|
41
|
+
// untouched. Routing/status/dissolve read the stored leader_name, never
|
|
42
|
+
// recompute it. `${teamId}-leader` survives only as the display label.
|
|
43
|
+
const leaderName = await this.opts.teammates.allocateLeaderName(input.dispatcherId, teamId);
|
|
44
|
+
const leaderDisplayName = `${teamId}-leader`;
|
|
31
45
|
let team = existing ??
|
|
32
46
|
(await this.store.create({
|
|
33
47
|
dispatcher_id: input.dispatcherId,
|
|
@@ -40,7 +54,7 @@ export class TeamService {
|
|
|
40
54
|
runtime_cwd: workspace.runtimeCwd,
|
|
41
55
|
worktree: workspace.worktree,
|
|
42
56
|
status: 'starting',
|
|
43
|
-
intent: input.intent
|
|
57
|
+
intent: input.intent,
|
|
44
58
|
closed_at: null,
|
|
45
59
|
close_note: null,
|
|
46
60
|
}));
|
|
@@ -49,29 +63,64 @@ export class TeamService {
|
|
|
49
63
|
closedAt: null,
|
|
50
64
|
closeNote: null,
|
|
51
65
|
worktree: workspace.worktree,
|
|
66
|
+
// Always write the required intent, so a reused closed Team record adopts
|
|
67
|
+
// the new create.intent instead of keeping its old value (issue #182 PR-3).
|
|
68
|
+
intent: input.intent,
|
|
69
|
+
// Adopt the freshly allocated concrete leader name (#188) so a recreated
|
|
70
|
+
// closed Team routes/statuses/dissolves on the new leader, not the old one.
|
|
71
|
+
leaderName,
|
|
52
72
|
});
|
|
53
73
|
const prompt = input.prompt ?? teamLeaderPrompt(team);
|
|
54
74
|
const leader = await this.opts.teammates.createTeamLeader({
|
|
55
75
|
dispatcherId: input.dispatcherId,
|
|
56
76
|
teamId,
|
|
57
77
|
name: leaderName,
|
|
78
|
+
displayName: leaderDisplayName,
|
|
58
79
|
prompt,
|
|
59
80
|
agentRuntime: input.leaderAgentRuntime,
|
|
60
81
|
sourceCwd: workspace.sourceCwd,
|
|
61
82
|
sourceRepo: workspace.sourceRepo,
|
|
62
83
|
runtimeCwd: workspace.runtimeCwd,
|
|
63
84
|
worktree: workspace.worktree,
|
|
64
|
-
intent: input.intent
|
|
85
|
+
intent: input.intent,
|
|
65
86
|
});
|
|
66
87
|
team = await this.store.update(team, { status: 'running' });
|
|
67
88
|
await this.store.appendLedger(team, {
|
|
68
89
|
type: 'create',
|
|
69
90
|
summary: `created team ${teamId} with leader ${leaderName}`,
|
|
70
91
|
});
|
|
92
|
+
// Optionally bind an existing Feishu group at create time (issue #182 PR-8,
|
|
93
|
+
// the settled replacement for the retired create_group flow). Bind is the
|
|
94
|
+
// last step; if it fails the Team is already persisted, so roll back by
|
|
95
|
+
// dissolving the just-created Team rather than leaving a half-created one a
|
|
96
|
+
// retry would then collide with as "already exists" (mirrors the rollback
|
|
97
|
+
// the old create_group flow did on Feishu setup failure).
|
|
98
|
+
let binding = null;
|
|
99
|
+
if (input.bindGroup !== undefined) {
|
|
100
|
+
try {
|
|
101
|
+
const bound = await this.bindChannel({
|
|
102
|
+
dispatcherId: input.dispatcherId,
|
|
103
|
+
teamId,
|
|
104
|
+
provider: 'builtin:feishu',
|
|
105
|
+
chatId: input.bindGroup.chatId,
|
|
106
|
+
chatType: 'group',
|
|
107
|
+
});
|
|
108
|
+
binding = { provider: bound.provider, chat_id: bound.chat_id };
|
|
109
|
+
}
|
|
110
|
+
catch (err) {
|
|
111
|
+
await this.dissolve({
|
|
112
|
+
dispatcherId: input.dispatcherId,
|
|
113
|
+
teamId,
|
|
114
|
+
note: 'Team group binding failed at create time',
|
|
115
|
+
});
|
|
116
|
+
throw err;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
71
119
|
return {
|
|
72
120
|
team,
|
|
73
121
|
leader: leader.teammate,
|
|
74
122
|
member_count: await this.memberCount(team),
|
|
123
|
+
binding,
|
|
75
124
|
turn: leader.turn,
|
|
76
125
|
};
|
|
77
126
|
}
|
|
@@ -79,13 +128,39 @@ export class TeamService {
|
|
|
79
128
|
const teams = await this.store.list(dispatcherId);
|
|
80
129
|
const out = [];
|
|
81
130
|
for (const team of teams)
|
|
82
|
-
out.push(await this.
|
|
131
|
+
out.push(await this.listRow(team));
|
|
83
132
|
return out;
|
|
84
133
|
}
|
|
85
134
|
async status(dispatcherId, teamId) {
|
|
86
135
|
const team = await this.mustTeam(dispatcherId, teamId);
|
|
87
136
|
return this.summary(team);
|
|
88
137
|
}
|
|
138
|
+
/**
|
|
139
|
+
* Filterable Team recovery search (issue #182 PR-7) — the Team-side mirror of
|
|
140
|
+
* the TeamMate `history` surface. Finds Teams (closed included) by
|
|
141
|
+
* name/status/repo/intent/time, sorted most-recent first, with a cursor. The
|
|
142
|
+
* raw per-team lifecycle event timeline stays internal (`ledger`), not here.
|
|
143
|
+
*/
|
|
144
|
+
async history(input) {
|
|
145
|
+
const teams = await this.store.list(input.dispatcherId);
|
|
146
|
+
const rows = [];
|
|
147
|
+
for (const team of teams) {
|
|
148
|
+
const row = await this.historyRow(team);
|
|
149
|
+
if (matchesTeamHistoryQuery(row, input))
|
|
150
|
+
rows.push(row);
|
|
151
|
+
}
|
|
152
|
+
rows.sort((a, b) => b.updated_at - a.updated_at ||
|
|
153
|
+
b.created_at - a.created_at ||
|
|
154
|
+
a.name.localeCompare(b.name));
|
|
155
|
+
const start = input.cursor !== undefined ? decodeTeamCursor(input.cursor) : 0;
|
|
156
|
+
const limit = clampTeamHistoryLimit(input.limit);
|
|
157
|
+
const items = rows.slice(start, start + limit);
|
|
158
|
+
const next = start + items.length;
|
|
159
|
+
return {
|
|
160
|
+
items,
|
|
161
|
+
next_cursor: next < rows.length ? encodeTeamCursor(next) : null,
|
|
162
|
+
};
|
|
163
|
+
}
|
|
89
164
|
async ledger(dispatcherId, teamId) {
|
|
90
165
|
const team = await this.store.get(dispatcherId, validateTeamId(teamId));
|
|
91
166
|
return {
|
|
@@ -94,6 +169,9 @@ export class TeamService {
|
|
|
94
169
|
};
|
|
95
170
|
}
|
|
96
171
|
async dissolve(input) {
|
|
172
|
+
// Required dissolve reason — enforced for in-process callers too (issue
|
|
173
|
+
// #182 PR-3); it also feeds the member/leader closes and the ledger.
|
|
174
|
+
requireLifecycleText(input.note, 'Team dissolve note');
|
|
97
175
|
const team = await this.mustTeam(input.dispatcherId, input.teamId);
|
|
98
176
|
for (const binding of await this.bindings.list(input.dispatcherId)) {
|
|
99
177
|
if (binding.active && binding.team_id === team.team_id) {
|
|
@@ -110,6 +188,10 @@ export class TeamService {
|
|
|
110
188
|
teamId: team.team_id,
|
|
111
189
|
leaderName: team.leader_name,
|
|
112
190
|
}));
|
|
191
|
+
// dissolve note is required (issue #182 PR-3), so the member/leader close
|
|
192
|
+
// calls and the ledger carry the operator's real reason — no synthetic
|
|
193
|
+
// 'team dissolved' fallback. Internal/system dissolves pass an explicit
|
|
194
|
+
// system-authored note instead.
|
|
113
195
|
for (const member of members) {
|
|
114
196
|
await this.opts.teammates.closeScoped({
|
|
115
197
|
principal: teamLeaderPrincipal({
|
|
@@ -118,18 +200,18 @@ export class TeamService {
|
|
|
118
200
|
leaderName: team.leader_name,
|
|
119
201
|
}),
|
|
120
202
|
name: member.name,
|
|
121
|
-
note: input.note
|
|
203
|
+
note: input.note,
|
|
122
204
|
});
|
|
123
205
|
}
|
|
124
206
|
await this.opts.teammates.close({
|
|
125
207
|
dispatcherId: input.dispatcherId,
|
|
126
208
|
name: team.leader_name,
|
|
127
|
-
note: input.note
|
|
209
|
+
note: input.note,
|
|
128
210
|
});
|
|
129
211
|
const closed = await this.store.update(team, {
|
|
130
212
|
status: 'closed',
|
|
131
213
|
closedAt: Date.now(),
|
|
132
|
-
closeNote: input.note
|
|
214
|
+
closeNote: input.note,
|
|
133
215
|
worktree: await this.worktrees.cleanup({
|
|
134
216
|
source_cwd: team.repo_cwd,
|
|
135
217
|
source_repo: team.source_repo,
|
|
@@ -138,7 +220,7 @@ export class TeamService {
|
|
|
138
220
|
});
|
|
139
221
|
await this.store.appendLedger(closed, {
|
|
140
222
|
type: 'dissolve',
|
|
141
|
-
summary: input.note
|
|
223
|
+
summary: input.note,
|
|
142
224
|
});
|
|
143
225
|
return this.summary(closed);
|
|
144
226
|
}
|
|
@@ -174,60 +256,6 @@ export class TeamService {
|
|
|
174
256
|
}
|
|
175
257
|
return binding;
|
|
176
258
|
}
|
|
177
|
-
async createGroup(input) {
|
|
178
|
-
if (input.sourceChatType !== 'p2p') {
|
|
179
|
-
throw new Error('create_team_group must be requested from a P2P control channel');
|
|
180
|
-
}
|
|
181
|
-
if (this.opts.createFeishuGroup === undefined) {
|
|
182
|
-
throw new Error('Feishu group creation is not available for this dispatcher');
|
|
183
|
-
}
|
|
184
|
-
const created = await this.create(input);
|
|
185
|
-
let group;
|
|
186
|
-
let binding = null;
|
|
187
|
-
try {
|
|
188
|
-
group = await this.opts.createFeishuGroup({
|
|
189
|
-
dispatcherId: input.dispatcherId,
|
|
190
|
-
name: input.groupName ?? input.name,
|
|
191
|
-
userOpenIds: uniqueOpenIds([
|
|
192
|
-
input.requesterOpenId,
|
|
193
|
-
...(input.inviteOpenIds ?? []),
|
|
194
|
-
]),
|
|
195
|
-
});
|
|
196
|
-
binding = await this.bindChannel({
|
|
197
|
-
dispatcherId: input.dispatcherId,
|
|
198
|
-
teamId: created.team.team_id,
|
|
199
|
-
provider: 'builtin:feishu',
|
|
200
|
-
chatId: group.chatId,
|
|
201
|
-
chatType: 'group',
|
|
202
|
-
});
|
|
203
|
-
await this.store.appendLedger(created.team, {
|
|
204
|
-
type: 'create_group',
|
|
205
|
-
summary: `created Feishu group ${group.chatId} for team ${created.team.team_id}`,
|
|
206
|
-
});
|
|
207
|
-
}
|
|
208
|
-
catch (err) {
|
|
209
|
-
await this.dissolve({
|
|
210
|
-
dispatcherId: input.dispatcherId,
|
|
211
|
-
teamId: created.team.team_id,
|
|
212
|
-
note: 'Feishu group setup failed',
|
|
213
|
-
});
|
|
214
|
-
throw err;
|
|
215
|
-
}
|
|
216
|
-
return {
|
|
217
|
-
...created,
|
|
218
|
-
binding: {
|
|
219
|
-
provider: binding.provider,
|
|
220
|
-
chat_id: binding.chat_id,
|
|
221
|
-
chat_type: binding.chat_type,
|
|
222
|
-
team_id: binding.team_id,
|
|
223
|
-
leader_name: binding.leader_name,
|
|
224
|
-
},
|
|
225
|
-
invited_open_ids: uniqueOpenIds([
|
|
226
|
-
input.requesterOpenId,
|
|
227
|
-
...(input.inviteOpenIds ?? []),
|
|
228
|
-
]),
|
|
229
|
-
};
|
|
230
|
-
}
|
|
231
259
|
async resolveChannel(input) {
|
|
232
260
|
const binding = await this.bindings.resolve(input);
|
|
233
261
|
if (binding === null)
|
|
@@ -285,8 +313,68 @@ export class TeamService {
|
|
|
285
313
|
team,
|
|
286
314
|
leader,
|
|
287
315
|
member_count: await this.memberCount(team),
|
|
316
|
+
binding: await this.activeGroupBinding(team),
|
|
288
317
|
};
|
|
289
318
|
}
|
|
319
|
+
async listRow(team) {
|
|
320
|
+
return {
|
|
321
|
+
name: team.team_id,
|
|
322
|
+
team_id: team.team_id,
|
|
323
|
+
status: team.status,
|
|
324
|
+
intent: team.intent,
|
|
325
|
+
source_repo: team.source_repo,
|
|
326
|
+
repo_cwd: team.repo_cwd,
|
|
327
|
+
worktree_mode: team.worktree.mode,
|
|
328
|
+
leader_name: team.leader_name,
|
|
329
|
+
leader_state: await this.leaderState(team),
|
|
330
|
+
member_count: await this.memberCount(team),
|
|
331
|
+
bound_group: await this.activeGroupBinding(team),
|
|
332
|
+
created_at: team.created_at,
|
|
333
|
+
updated_at: team.updated_at,
|
|
334
|
+
closed_at: team.closed_at,
|
|
335
|
+
};
|
|
336
|
+
}
|
|
337
|
+
async historyRow(team) {
|
|
338
|
+
return {
|
|
339
|
+
name: team.team_id,
|
|
340
|
+
team_id: team.team_id,
|
|
341
|
+
status: team.status,
|
|
342
|
+
close_status: team.closed_at === null ? 'open' : 'closed',
|
|
343
|
+
intent: team.intent,
|
|
344
|
+
source_repo: team.source_repo,
|
|
345
|
+
repo_cwd: team.repo_cwd,
|
|
346
|
+
runtime_cwd: team.runtime_cwd,
|
|
347
|
+
worktree: team.worktree,
|
|
348
|
+
leader_name: team.leader_name,
|
|
349
|
+
leader_agent_runtime: team.leader_agent_runtime,
|
|
350
|
+
leader_state: await this.leaderState(team),
|
|
351
|
+
member_count: await this.memberCount(team),
|
|
352
|
+
bound_group: await this.activeGroupBinding(team),
|
|
353
|
+
created_at: team.created_at,
|
|
354
|
+
updated_at: team.updated_at,
|
|
355
|
+
closed_at: team.closed_at,
|
|
356
|
+
close_note: team.close_note,
|
|
357
|
+
close_note_preview: team.close_note !== null ? previewTeamText(team.close_note) : null,
|
|
358
|
+
};
|
|
359
|
+
}
|
|
360
|
+
/** The leader's current identity state (cheap read), or null if unreadable. */
|
|
361
|
+
async leaderState(team) {
|
|
362
|
+
try {
|
|
363
|
+
return (await this.opts.teammates.status(team.dispatcher_id, team.leader_name))
|
|
364
|
+
.status;
|
|
365
|
+
}
|
|
366
|
+
catch {
|
|
367
|
+
return null;
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
/** The active bound Feishu group for a Team, or null when none is bound. */
|
|
371
|
+
async activeGroupBinding(team) {
|
|
372
|
+
const bindings = await this.bindings.list(team.dispatcher_id);
|
|
373
|
+
const active = bindings.find((binding) => binding.active && binding.team_id === team.team_id);
|
|
374
|
+
return active === undefined
|
|
375
|
+
? null
|
|
376
|
+
: { provider: active.provider, chat_id: active.chat_id };
|
|
377
|
+
}
|
|
290
378
|
async memberCount(team) {
|
|
291
379
|
return (await this.opts.teammates.listScoped(teamLeaderPrincipal({
|
|
292
380
|
dispatcherId: team.dispatcher_id,
|
|
@@ -309,7 +397,68 @@ function teamLeaderPrompt(team) {
|
|
|
309
397
|
team.intent !== null ? `Intent: ${team.intent}` : '',
|
|
310
398
|
].filter((line) => line !== '').join('\n');
|
|
311
399
|
}
|
|
312
|
-
function
|
|
313
|
-
|
|
400
|
+
function matchesTeamHistoryQuery(row, input) {
|
|
401
|
+
if (input.name !== undefined && row.name !== validateTeamId(input.name)) {
|
|
402
|
+
return false;
|
|
403
|
+
}
|
|
404
|
+
if (input.status !== undefined && row.status !== input.status)
|
|
405
|
+
return false;
|
|
406
|
+
if (input.closeStatus !== undefined && row.close_status !== input.closeStatus) {
|
|
407
|
+
return false;
|
|
408
|
+
}
|
|
409
|
+
if (input.repo !== undefined) {
|
|
410
|
+
const needle = input.repo.toLowerCase();
|
|
411
|
+
const hit = [row.source_repo, row.repo_cwd].some((value) => value !== null && value.toLowerCase().includes(needle));
|
|
412
|
+
if (!hit)
|
|
413
|
+
return false;
|
|
414
|
+
}
|
|
415
|
+
if (input.grep !== undefined && !teamRowMatchesText(row, input.grep)) {
|
|
416
|
+
return false;
|
|
417
|
+
}
|
|
418
|
+
if (input.since !== undefined && row.updated_at < input.since)
|
|
419
|
+
return false;
|
|
420
|
+
if (input.until !== undefined && row.updated_at > input.until)
|
|
421
|
+
return false;
|
|
422
|
+
return true;
|
|
423
|
+
}
|
|
424
|
+
function teamRowMatchesText(row, grep) {
|
|
425
|
+
const needle = grep.toLowerCase();
|
|
426
|
+
if (needle === '')
|
|
427
|
+
return true;
|
|
428
|
+
return [
|
|
429
|
+
row.name,
|
|
430
|
+
row.intent,
|
|
431
|
+
row.source_repo,
|
|
432
|
+
row.repo_cwd,
|
|
433
|
+
row.leader_name,
|
|
434
|
+
row.close_note,
|
|
435
|
+
].some((value) => value !== null && value.toLowerCase().includes(needle));
|
|
436
|
+
}
|
|
437
|
+
function clampTeamHistoryLimit(input) {
|
|
438
|
+
if (input === undefined)
|
|
439
|
+
return 20;
|
|
440
|
+
if (!Number.isInteger(input) || input < 1) {
|
|
441
|
+
throw new Error('history limit must be a positive integer');
|
|
442
|
+
}
|
|
443
|
+
return Math.min(input, 100);
|
|
444
|
+
}
|
|
445
|
+
function encodeTeamCursor(offset) {
|
|
446
|
+
return Buffer.from(JSON.stringify({ offset }), 'utf8').toString('base64url');
|
|
447
|
+
}
|
|
448
|
+
function decodeTeamCursor(cursor) {
|
|
449
|
+
try {
|
|
450
|
+
const parsed = JSON.parse(Buffer.from(cursor, 'base64url').toString('utf8'));
|
|
451
|
+
if (typeof parsed.offset === 'number' && Number.isInteger(parsed.offset) && parsed.offset >= 0) {
|
|
452
|
+
return parsed.offset;
|
|
453
|
+
}
|
|
454
|
+
}
|
|
455
|
+
catch {
|
|
456
|
+
// fall through to the loud error below
|
|
457
|
+
}
|
|
458
|
+
throw new Error('invalid history cursor');
|
|
459
|
+
}
|
|
460
|
+
function previewTeamText(text) {
|
|
461
|
+
const collapsed = text.replace(/\s+/g, ' ').trim();
|
|
462
|
+
return collapsed.length <= 500 ? collapsed : `${collapsed.slice(0, 497)}...`;
|
|
314
463
|
}
|
|
315
464
|
//# sourceMappingURL=service.js.map
|