@coralai/sps-cli 0.49.15 → 0.50.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/dist/commands/cardAdd.d.ts.map +1 -1
- package/dist/commands/cardAdd.js +47 -67
- package/dist/commands/cardAdd.js.map +1 -1
- package/dist/commands/cardMarkComplete.js +1 -1
- package/dist/commands/cardMarkComplete.js.map +1 -1
- package/dist/commands/cardMarkStarted.js +1 -1
- package/dist/commands/cardMarkStarted.js.map +1 -1
- package/dist/commands/consoleCommand.js +3 -3
- package/dist/commands/consoleCommand.js.map +1 -1
- package/dist/commands/hookCommand.d.ts +25 -0
- package/dist/commands/hookCommand.d.ts.map +1 -1
- package/dist/commands/hookCommand.js +2 -2
- package/dist/commands/hookCommand.js.map +1 -1
- package/dist/console/index.d.ts +15 -0
- package/dist/console/index.d.ts.map +1 -0
- package/dist/console/index.js +177 -0
- package/dist/console/index.js.map +1 -0
- package/dist/console/lib/lockFile.d.ts +17 -0
- package/dist/console/lib/lockFile.d.ts.map +1 -0
- package/dist/console/lib/lockFile.js +61 -0
- package/dist/console/lib/lockFile.js.map +1 -0
- package/dist/console/lib/portPicker.d.ts +3 -0
- package/dist/console/lib/portPicker.d.ts.map +1 -0
- package/dist/console/lib/portPicker.js +25 -0
- package/dist/console/lib/portPicker.js.map +1 -0
- package/dist/console/lib/resultToJson.d.ts +18 -0
- package/dist/console/lib/resultToJson.d.ts.map +1 -0
- package/dist/console/lib/resultToJson.js +19 -0
- package/dist/console/lib/resultToJson.js.map +1 -0
- package/dist/console/routes/cards.d.ts +26 -0
- package/dist/console/routes/cards.d.ts.map +1 -0
- package/dist/console/routes/cards.js +85 -0
- package/dist/console/routes/cards.js.map +1 -0
- package/dist/console/routes/chat.d.ts +36 -0
- package/dist/console/routes/chat.d.ts.map +1 -0
- package/dist/console/routes/chat.js +458 -0
- package/dist/console/routes/chat.js.map +1 -0
- package/dist/console/routes/logs.d.ts +17 -0
- package/dist/console/routes/logs.d.ts.map +1 -0
- package/dist/console/routes/logs.js +159 -0
- package/dist/console/routes/logs.js.map +1 -0
- package/dist/console/routes/pipeline.d.ts +10 -0
- package/dist/console/routes/pipeline.d.ts.map +1 -0
- package/dist/console/routes/pipeline.js +39 -0
- package/dist/console/routes/pipeline.js.map +1 -0
- package/dist/console/routes/projects.d.ts +15 -0
- package/dist/console/routes/projects.d.ts.map +1 -0
- package/dist/console/routes/projects.js +132 -0
- package/dist/console/routes/projects.js.map +1 -0
- package/dist/console/routes/skills.d.ts +4 -0
- package/dist/console/routes/skills.d.ts.map +1 -0
- package/dist/console/routes/skills.js +91 -0
- package/dist/console/routes/skills.js.map +1 -0
- package/dist/console/routes/system.d.ts +7 -0
- package/dist/console/routes/system.d.ts.map +1 -0
- package/dist/console/routes/system.js +288 -0
- package/dist/console/routes/system.js.map +1 -0
- package/dist/console/routes/workers.d.ts +5 -0
- package/dist/console/routes/workers.d.ts.map +1 -0
- package/dist/console/routes/workers.js +149 -0
- package/dist/console/routes/workers.js.map +1 -0
- package/dist/console/sse/eventBus.d.ts +25 -0
- package/dist/console/sse/eventBus.d.ts.map +1 -0
- package/dist/console/sse/eventBus.js +32 -0
- package/dist/console/sse/eventBus.js.map +1 -0
- package/dist/console/sse/projectStream.d.ts +13 -0
- package/dist/console/sse/projectStream.d.ts.map +1 -0
- package/dist/console/sse/projectStream.js +84 -0
- package/dist/console/sse/projectStream.js.map +1 -0
- package/dist/console-server/routes/projects.d.ts.map +1 -1
- package/dist/console-server/routes/projects.js +2 -1
- package/dist/console-server/routes/projects.js.map +1 -1
- package/dist/console-server/routes/system.js +1 -1
- package/dist/console-server/routes/system.js.map +1 -1
- package/dist/console-server/routes/workers.d.ts.map +1 -1
- package/dist/console-server/routes/workers.js +14 -5
- package/dist/console-server/routes/workers.js.map +1 -1
- package/dist/console-server/watchers/markerWatcher.d.ts.map +1 -1
- package/dist/console-server/watchers/markerWatcher.js +4 -2
- package/dist/console-server/watchers/markerWatcher.js.map +1 -1
- package/dist/infra/chokidarWatchers.d.ts +38 -0
- package/dist/infra/chokidarWatchers.d.ts.map +1 -0
- package/dist/infra/chokidarWatchers.js +213 -0
- package/dist/infra/chokidarWatchers.js.map +1 -0
- package/dist/infra/clock.d.ts +35 -0
- package/dist/infra/clock.d.ts.map +1 -0
- package/dist/infra/clock.js +45 -0
- package/dist/infra/clock.js.map +1 -0
- package/dist/infra/filesystem.d.ts +89 -0
- package/dist/infra/filesystem.d.ts.map +1 -0
- package/dist/infra/filesystem.js +247 -0
- package/dist/infra/filesystem.js.map +1 -0
- package/dist/infra/spawn.d.ts +67 -0
- package/dist/infra/spawn.d.ts.map +1 -0
- package/dist/infra/spawn.js +116 -0
- package/dist/infra/spawn.js.map +1 -0
- package/dist/infra/sseBus.d.ts +36 -0
- package/dist/infra/sseBus.d.ts.map +1 -0
- package/dist/infra/sseBus.js +72 -0
- package/dist/infra/sseBus.js.map +1 -0
- package/dist/interfaces/ACPClient.d.ts +1 -1
- package/dist/interfaces/ACPClient.d.ts.map +1 -1
- package/dist/main.js +1 -1
- package/dist/main.js.map +1 -1
- package/dist/providers/LocalACPClient.d.ts +1 -1
- package/dist/providers/LocalACPClient.d.ts.map +1 -1
- package/dist/services/CardService.d.ts +86 -0
- package/dist/services/CardService.d.ts.map +1 -0
- package/dist/services/CardService.js +313 -0
- package/dist/services/CardService.js.map +1 -0
- package/dist/services/ChatService.d.ts +62 -0
- package/dist/services/ChatService.d.ts.map +1 -0
- package/dist/services/ChatService.js +157 -0
- package/dist/services/ChatService.js.map +1 -0
- package/dist/services/LogService.d.ts +46 -0
- package/dist/services/LogService.d.ts.map +1 -0
- package/dist/services/LogService.js +185 -0
- package/dist/services/LogService.js.map +1 -0
- package/dist/services/PipelineService.d.ts +71 -0
- package/dist/services/PipelineService.d.ts.map +1 -0
- package/dist/services/PipelineService.js +349 -0
- package/dist/services/PipelineService.js.map +1 -0
- package/dist/services/ProjectService.d.ts +105 -0
- package/dist/services/ProjectService.d.ts.map +1 -0
- package/dist/services/ProjectService.js +346 -0
- package/dist/services/ProjectService.js.map +1 -0
- package/dist/services/SkillService.d.ts +38 -0
- package/dist/services/SkillService.d.ts.map +1 -0
- package/dist/services/SkillService.js +301 -0
- package/dist/services/SkillService.js.map +1 -0
- package/dist/services/WorkerService.d.ts +83 -0
- package/dist/services/WorkerService.d.ts.map +1 -0
- package/dist/services/WorkerService.js +262 -0
- package/dist/services/WorkerService.js.map +1 -0
- package/dist/services/container.d.ts +47 -0
- package/dist/services/container.d.ts.map +1 -0
- package/dist/services/container.js +77 -0
- package/dist/services/container.js.map +1 -0
- package/dist/services/defaults.d.ts +15 -0
- package/dist/services/defaults.d.ts.map +1 -0
- package/dist/services/defaults.js +11 -0
- package/dist/services/defaults.js.map +1 -0
- package/dist/services/executors.d.ts +38 -0
- package/dist/services/executors.d.ts.map +1 -0
- package/dist/services/executors.js +157 -0
- package/dist/services/executors.js.map +1 -0
- package/dist/services/ports.d.ts +17 -0
- package/dist/services/ports.d.ts.map +1 -0
- package/dist/services/ports.js +2 -0
- package/dist/services/ports.js.map +1 -0
- package/dist/shared/domainEvents.d.ts +118 -0
- package/dist/shared/domainEvents.d.ts.map +1 -0
- package/dist/shared/domainEvents.js +40 -0
- package/dist/shared/domainEvents.js.map +1 -0
- package/dist/shared/errors.d.ts +59 -0
- package/dist/shared/errors.d.ts.map +1 -0
- package/dist/shared/errors.js +79 -0
- package/dist/shared/errors.js.map +1 -0
- package/dist/shared/result.d.ts +51 -0
- package/dist/shared/result.d.ts.map +1 -0
- package/dist/shared/result.js +48 -0
- package/dist/shared/result.js.map +1 -0
- package/dist/shared/runtimePaths.d.ts +78 -0
- package/dist/shared/runtimePaths.d.ts.map +1 -0
- package/dist/shared/runtimePaths.js +179 -0
- package/dist/shared/runtimePaths.js.map +1 -0
- package/dist/shared/runtimeSchemas.d.ts +324 -0
- package/dist/shared/runtimeSchemas.d.ts.map +1 -0
- package/dist/shared/runtimeSchemas.js +124 -0
- package/dist/shared/runtimeSchemas.js.map +1 -0
- package/dist/shared/types.d.ts +12 -0
- package/dist/shared/types.d.ts.map +1 -0
- package/dist/shared/types.js +2 -0
- package/dist/shared/types.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"WorkerService.js","sourceRoot":"","sources":["../../src/services/WorkerService.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,OAAO,EAAoB,WAAW,EAAE,MAAM,qBAAqB,CAAC;AACpE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAe,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EACL,UAAU,EACV,WAAW,EACX,UAAU,EACV,sBAAsB,EACtB,sBAAsB,EACtB,gBAAgB,GACjB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAmCjE,MAAM,kBAAkB,GAAG,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC;AACzC,MAAM,cAAc,GAAG,EAAE,GAAG,IAAI,CAAC;AAWjC,MAAM,OAAO,aAAa;IACK;IAA7B,YAA6B,IAAuB;QAAvB,SAAI,GAAJ,IAAI,CAAmB;IAAG,CAAC;IAExD,uCAAuC;IACvC,KAAK,CAAC,aAAa,CAAC,OAAe;QACjC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;YAAE,OAAO,GAAG,CAAC,cAAc,EAAE,CAAC,CAAC;QAC3D,MAAM,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;QAChC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC;YAAE,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC;QAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QAC5C,MAAM,KAAK,GAAiB,EAAE,CAAC;QAC/B,KAAK,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,KAAK,EAAE,CAAC;YACnC,KAAK,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;QACxD,CAAC;QACD,OAAO,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACnD,CAAC;IAED,qBAAqB;IACrB,KAAK,CAAC,SAAS,CACb,OAAe,EACf,IAAY;QAEZ,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;YAAE,OAAO,GAAG,CAAC,cAAc,EAAE,CAAC,CAAC;QAC3D,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,CAAC;YACzC,OAAO,GAAG,CAAC,WAAW,CAAC,YAAY,EAAE,cAAc,EAAE,aAAa,CAAC,CAAC,CAAC;QACvE,CAAC;QACD,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACzD,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO,GAAG,CACR,WAAW,CAAC,WAAW,EAAE,yBAAyB,EAAE,UAAU,IAAI,aAAa,CAAC,CACjF,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,CAAC,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC;IAC7D,CAAC;IAED,2BAA2B;IAC3B,KAAK,CAAC,SAAS;QACb,MAAM,IAAI,GAAG,WAAW,EAAE,CAAC;QAC3B,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/B,OAAO,EAAE,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;QACtD,CAAC;QACD,IAAI,QAAkB,CAAC;QACvB,IAAI,CAAC;YACH,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QACxF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,GAAG,CAAC,WAAW,CAAC,UAAU,EAAE,oBAAoB,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;QACnF,CAAC;QACD,QAAQ,CAAC,IAAI,EAAE,CAAC;QAChB,MAAM,MAAM,GAAoB,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;QACzE,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;YAC5C,MAAM,KAAK,GAAG;gBACZ,OAAO;gBACP,KAAK,EAAE,KAAK,CAAC,MAAM;gBACnB,OAAO,EAAE,CAAC;gBACV,QAAQ,EAAE,CAAC;gBACX,KAAK,EAAE,CAAC;gBACR,OAAO,EAAE,CAAC;gBACV,IAAI,EAAE,CAAC;aACR,CAAC;YACF,KAAK,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,KAAK,EAAE,CAAC;gBACnC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;gBACvD,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;gBACpB,IAAI,IAAI,CAAC,KAAK,KAAK,OAAO,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;oBACvD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;gBAC3C,CAAC;qBAAM,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,KAAK,UAAU,EAAE,CAAC;oBACjE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;gBAC3C,CAAC;YACH,CAAC;YACD,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9B,CAAC;QACD,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YAC1B,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK;gBAAE,OAAO,CAAC,CAAC,KAAK,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7D,OAAO,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,CAAC;QACtE,OAAO,EAAE,CAAC,MAAM,CAAC,CAAC;IACpB,CAAC;IAED,4CAA4C;IAC5C,KAAK,CAAC,MAAM,CAAC,OAAe,EAAE,GAAW;QACvC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;YAAE,OAAO,GAAG,CAAC,cAAc,EAAE,CAAC,CAAC;QAC3D,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;YACvC,OAAO,GAAG,CAAC,WAAW,CAAC,YAAY,EAAE,aAAa,EAAE,YAAY,CAAC,CAAC,CAAC;QACrE,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACxB,OAAO,GAAG,CACR,WAAW,CACT,UAAU,EACV,yBAAyB,EACzB,mCAAmC,CACpC,CACF,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;YAC9C,OAAO,GAAG,CACR,WAAW,CAAC,WAAW,EAAE,mBAAmB,EAAE,MAAM,OAAO,MAAM,CAAC,CACnE,CAAC;QACJ,CAAC;QACD,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QAChD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,GAAG,CACR,WAAW,CAAC,UAAU,EAAE,oBAAoB,EAAE,kBAAkB,EAAE;gBAChE,KAAK;gBACL,OAAO,EAAE,EAAE,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;aAC7E,CAAC,CACH,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC;IACvB,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,OAAe,EAAE,IAAY;QACtC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;YAAE,OAAO,GAAG,CAAC,cAAc,EAAE,CAAC,CAAC;QAC3D,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,CAAC;YACzC,OAAO,GAAG,CAAC,WAAW,CAAC,YAAY,EAAE,cAAc,EAAE,aAAa,CAAC,CAAC,CAAC;QACvE,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC;YACxB,OAAO,GAAG,CACR,WAAW,CAAC,UAAU,EAAE,yBAAyB,EAAE,qBAAqB,CAAC,CAC1E,CAAC;QACJ,CAAC;QACD,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAC/C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,GAAG,CACR,WAAW,CAAC,UAAU,EAAE,kBAAkB,EAAE,gBAAgB,EAAE;gBAC5D,KAAK;gBACL,OAAO,EAAE,EAAE,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;aAC7E,CAAC,CACH,CAAC;QACJ,CAAC;QACD,OAAO,EAAE,CAAC,SAAS,CAAC,CAAC;IACvB,CAAC;IAED,mEAAmE;IAEnE,0DAA0D;IAClD,eAAe,CAAC,OAAe;QACrC,MAAM,GAAG,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;QAChC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC;YAAE,OAAO,EAAE,CAAC;QACzC,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE;iBAChB,OAAO,CAAC,GAAG,CAAC;iBACZ,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;iBAC9D,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;gBACT,MAAM,IAAI,GAAG,sBAAsB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;gBAC5C,OAAO,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;YACzD,CAAC,CAAC;iBACD,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;QAC/B,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAC;QACZ,CAAC;IACH,CAAC;IAED,mBAAmB;IACX,iBAAiB,CAAC,OAAe,EAAE,IAAY;QACrD,MAAM,YAAY,GAAG,gBAAgB,CAAC,OAAO,EAAE,UAAU,IAAI,EAAE,CAAC,CAAC;QACjE,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC;YAAE,OAAO,YAAY,CAAC;QAC3D,mCAAmC;QACnC,MAAM,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,UAAU,IAAI,eAAe,CAAC,CAAC;QAC3E,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC;YAAE,OAAO,MAAM,CAAC;QAC/C,OAAO,IAAI,CAAC;IACd,CAAC;IAEO,KAAK,CAAC,SAAS,CACrB,OAAe,EACf,IAAY,EACZ,UAAkB;QAElB,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QAClC,IAAI,GAAG,GAAkB,IAAI,CAAC;QAC9B,IAAI,IAAI,GAAuB,IAAI,CAAC;QACpC,IAAI,KAAK,GAAkB,IAAI,CAAC;QAChC,IAAI,SAAS,GAAkB,IAAI,CAAC;QACpC,IAAI,eAAe,GAAkB,IAAI,CAAC;QAE1C,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;YAC9C,MAAM,MAAM,GAAG,kBAAkB,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;YAC7D,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACnB,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC;gBACtB,GAAG,GAAG,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC;gBACpB,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;gBAChB,SAAS,GAAG,CAAC,CAAC,YAAY,CAAC;gBAC3B,MAAM,GAAG,GAAG,kBAAkB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;gBACzC,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;oBACjB,IAAI,KAAK,GAAG,IAAI,GAAG,EAAE,CAAC;oBACtB,IAAI,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;wBAC9B,IAAI,CAAC;4BACH,MAAM,CAAC,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;4BACxD,IAAI,CAAC;gCAAE,KAAK,GAAG,CAAC,CAAC;wBACnB,CAAC;wBAAC,MAAM,CAAC;4BACP,yBAAyB;wBAC3B,CAAC;oBACH,CAAC;oBACD,IAAI,GAAG,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;gBACxB,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,uBAAuB;QACzB,CAAC;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC3C,IAAI,IAAI;YAAE,eAAe,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;QAEjE,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;QAC9B,MAAM,KAAK,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC,eAAe,CAAC,CAAC,OAAO,EAAE,GAAG,kBAAkB,CAAC,CAAC,CAAC,KAAK,CAAC;QACvG,MAAM,KAAK,GAAG,eAAe,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC,eAAe,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAEjF,IAAI,KAAkB,CAAC;QACvB,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,KAAK,GAAG,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC;QAC7C,CAAC;aAAM,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YACzB,KAAK,GAAG,MAAM,CAAC;QACjB,CAAC;aAAM,CAAC;YACN,MAAM,QAAQ,GAAG,KAAK,KAAK,IAAI,IAAI,KAAK,IAAI,cAAc,CAAC;YAC3D,IAAI,QAAQ;gBAAE,KAAK,GAAG,UAAU,CAAC;iBAC5B,IAAI,CAAC,KAAK;gBAAE,KAAK,GAAG,OAAO,CAAC;;gBAC5B,KAAK,GAAG,SAAS,CAAC;QACzB,CAAC;QAED,MAAM,SAAS,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QACzE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,eAAe,EAAE,CAAC;IAClF,CAAC;CACF;AAED,qEAAqE;AAErE,SAAS,kBAAkB,CAAC,MAAc;IACxC,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IAC1C,IAAI,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACpB,MAAM,CAAC,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC;IAC1C,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAChD,CAAC;AAED,SAAS,UAAU,CAAC,GAAkB;IACpC,IAAI,CAAC,GAAG;QAAE,OAAO,KAAK,CAAC;IACvB,IAAI,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACrB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,cAAc,CAAC,OAAe;IACrC,OAAO,OAAO,OAAO,KAAK,QAAQ,IAAI,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACzE,CAAC;AAED,SAAS,cAAc;IACrB,OAAO,WAAW,CAAC,YAAY,EAAE,sBAAsB,EAAE,OAAO,CAAC,CAAC;AACpE,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module services/container
|
|
3
|
+
* @description Service DI 容器 —— 一次构造,Delivery 层取用
|
|
4
|
+
*
|
|
5
|
+
* @layer services
|
|
6
|
+
*
|
|
7
|
+
* 使用:
|
|
8
|
+
* CLI: const c = createContainer();
|
|
9
|
+
* Console: const c = createContainer({ events }); // 注入 SseEventBus
|
|
10
|
+
* Tests: const c = createContainer({ fs, clock, events, spawner });
|
|
11
|
+
*/
|
|
12
|
+
import { type Clock } from '../infra/clock.js';
|
|
13
|
+
import { type FileSystem } from '../infra/filesystem.js';
|
|
14
|
+
import { type ProcessSpawner } from '../infra/spawn.js';
|
|
15
|
+
import { type DomainEventBus } from '../shared/domainEvents.js';
|
|
16
|
+
import { CardService } from './CardService.js';
|
|
17
|
+
import { type ChatExecutor, ChatService } from './ChatService.js';
|
|
18
|
+
import { LogService } from './LogService.js';
|
|
19
|
+
import { type PipelineExecutor, PipelineService } from './PipelineService.js';
|
|
20
|
+
import { type ProjectInitExecutor, ProjectService } from './ProjectService.js';
|
|
21
|
+
import type { TaskBackendFactory } from './ports.js';
|
|
22
|
+
import { SkillService } from './SkillService.js';
|
|
23
|
+
import { type WorkerExecutor, WorkerService } from './WorkerService.js';
|
|
24
|
+
export interface ServiceContainer {
|
|
25
|
+
readonly projects: ProjectService;
|
|
26
|
+
readonly cards: CardService;
|
|
27
|
+
readonly workers: WorkerService;
|
|
28
|
+
readonly pipelines: PipelineService;
|
|
29
|
+
readonly skills: SkillService;
|
|
30
|
+
readonly logs: LogService;
|
|
31
|
+
readonly chat: ChatService;
|
|
32
|
+
}
|
|
33
|
+
export interface ContainerOptions {
|
|
34
|
+
/** 基础 infra —— 不传用 Node 默认 */
|
|
35
|
+
fs?: FileSystem;
|
|
36
|
+
clock?: Clock;
|
|
37
|
+
events?: DomainEventBus;
|
|
38
|
+
spawner?: ProcessSpawner;
|
|
39
|
+
/** Phase 3 注入的 CLI 适配器(未注入时相关 Service 方法返 internal 错误) */
|
|
40
|
+
taskBackendFactory?: TaskBackendFactory;
|
|
41
|
+
projectInitExecutor?: ProjectInitExecutor;
|
|
42
|
+
workerExecutor?: WorkerExecutor;
|
|
43
|
+
pipelineExecutor?: PipelineExecutor;
|
|
44
|
+
chatExecutor?: ChatExecutor;
|
|
45
|
+
}
|
|
46
|
+
export declare function createContainer(opts?: ContainerOptions): ServiceContainer;
|
|
47
|
+
//# sourceMappingURL=container.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"container.d.ts","sourceRoot":"","sources":["../../src/services/container.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,KAAK,KAAK,EAAe,MAAM,mBAAmB,CAAC;AAC5D,OAAO,EAAE,KAAK,UAAU,EAAkB,MAAM,wBAAwB,CAAC;AACzE,OAAO,EAAsB,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAC5E,OAAO,EAAE,KAAK,cAAc,EAAgB,MAAM,2BAA2B,CAAC;AAC9E,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,KAAK,YAAY,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAQlE,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,KAAK,gBAAgB,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC9E,OAAO,EAAE,KAAK,mBAAmB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAC/E,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,KAAK,cAAc,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAExE,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAC;IAClC,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,aAAa,CAAC;IAChC,QAAQ,CAAC,SAAS,EAAE,eAAe,CAAC;IACpC,QAAQ,CAAC,MAAM,EAAE,YAAY,CAAC;IAC9B,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;CAC5B;AAED,MAAM,WAAW,gBAAgB;IAC/B,8BAA8B;IAC9B,EAAE,CAAC,EAAE,UAAU,CAAC;IAChB,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,0DAA0D;IAC1D,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;IACxC,mBAAmB,CAAC,EAAE,mBAAmB,CAAC;IAC1C,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B;AAED,wBAAgB,eAAe,CAAC,IAAI,GAAE,gBAAqB,GAAG,gBAAgB,CAsD7E"}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module services/container
|
|
3
|
+
* @description Service DI 容器 —— 一次构造,Delivery 层取用
|
|
4
|
+
*
|
|
5
|
+
* @layer services
|
|
6
|
+
*
|
|
7
|
+
* 使用:
|
|
8
|
+
* CLI: const c = createContainer();
|
|
9
|
+
* Console: const c = createContainer({ events }); // 注入 SseEventBus
|
|
10
|
+
* Tests: const c = createContainer({ fs, clock, events, spawner });
|
|
11
|
+
*/
|
|
12
|
+
import { SystemClock } from '../infra/clock.js';
|
|
13
|
+
import { NodeFileSystem } from '../infra/filesystem.js';
|
|
14
|
+
import { NodeProcessSpawner } from '../infra/spawn.js';
|
|
15
|
+
import { NoopEventBus } from '../shared/domainEvents.js';
|
|
16
|
+
import { CardService } from './CardService.js';
|
|
17
|
+
import { ChatService } from './ChatService.js';
|
|
18
|
+
import { DefaultTaskBackendFactory } from './defaults.js';
|
|
19
|
+
import { DefaultChatExecutor, DefaultPipelineExecutor, DefaultProjectInitExecutor, DefaultWorkerExecutor, } from './executors.js';
|
|
20
|
+
import { LogService } from './LogService.js';
|
|
21
|
+
import { PipelineService } from './PipelineService.js';
|
|
22
|
+
import { ProjectService } from './ProjectService.js';
|
|
23
|
+
import { SkillService } from './SkillService.js';
|
|
24
|
+
import { WorkerService } from './WorkerService.js';
|
|
25
|
+
export function createContainer(opts = {}) {
|
|
26
|
+
const fs = opts.fs ?? new NodeFileSystem();
|
|
27
|
+
const clock = opts.clock ?? new SystemClock();
|
|
28
|
+
const events = opts.events ?? new NoopEventBus();
|
|
29
|
+
const spawner = opts.spawner ?? new NodeProcessSpawner();
|
|
30
|
+
const taskBackendFactory = opts.taskBackendFactory ?? new DefaultTaskBackendFactory();
|
|
31
|
+
// 默认 executor 注入 —— 测试可以覆盖
|
|
32
|
+
const workerExecutor = opts.workerExecutor ?? new DefaultWorkerExecutor();
|
|
33
|
+
const pipelineExecutor = opts.pipelineExecutor ?? new DefaultPipelineExecutor(spawner);
|
|
34
|
+
const chatExecutor = opts.chatExecutor ?? new DefaultChatExecutor();
|
|
35
|
+
const projectInitExecutor = opts.projectInitExecutor ?? new DefaultProjectInitExecutor();
|
|
36
|
+
const cards = new CardService({
|
|
37
|
+
backendFactory: taskBackendFactory,
|
|
38
|
+
events,
|
|
39
|
+
clock,
|
|
40
|
+
});
|
|
41
|
+
return {
|
|
42
|
+
projects: new ProjectService({
|
|
43
|
+
fs,
|
|
44
|
+
clock,
|
|
45
|
+
events,
|
|
46
|
+
initExecutor: projectInitExecutor,
|
|
47
|
+
}),
|
|
48
|
+
cards,
|
|
49
|
+
workers: new WorkerService({
|
|
50
|
+
fs,
|
|
51
|
+
clock,
|
|
52
|
+
events,
|
|
53
|
+
executor: workerExecutor,
|
|
54
|
+
// 给 Worker 反查 card title 用 —— 避免只返 #seq fallback
|
|
55
|
+
cardTitleLookup: async (project, seq) => {
|
|
56
|
+
const r = await cards.get(project, seq);
|
|
57
|
+
return r.ok ? r.value.title : null;
|
|
58
|
+
},
|
|
59
|
+
}),
|
|
60
|
+
pipelines: new PipelineService({
|
|
61
|
+
fs,
|
|
62
|
+
clock,
|
|
63
|
+
events,
|
|
64
|
+
spawner,
|
|
65
|
+
executor: pipelineExecutor,
|
|
66
|
+
}),
|
|
67
|
+
skills: new SkillService({ events }),
|
|
68
|
+
logs: new LogService({ fs }),
|
|
69
|
+
chat: new ChatService({
|
|
70
|
+
fs,
|
|
71
|
+
clock,
|
|
72
|
+
events,
|
|
73
|
+
executor: chatExecutor,
|
|
74
|
+
}),
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
//# sourceMappingURL=container.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"container.js","sourceRoot":"","sources":["../../src/services/container.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module services/defaults
|
|
3
|
+
* @description Service port 的默认 production 实现(glue layer,绑 Domain 具体类)
|
|
4
|
+
*
|
|
5
|
+
* @layer services
|
|
6
|
+
*
|
|
7
|
+
* 本文件是 Service 层允许"伸入"Domain concrete 类的地方 —— 所有 new MarkdownTaskBackend /
|
|
8
|
+
* ProjectContext.load 集中在这,其它 service 文件禁止直接 import 具体实现。
|
|
9
|
+
*/
|
|
10
|
+
import type { TaskBackend } from '../interfaces/TaskBackend.js';
|
|
11
|
+
import type { TaskBackendFactory } from './ports.js';
|
|
12
|
+
export declare class DefaultTaskBackendFactory implements TaskBackendFactory {
|
|
13
|
+
for(project: string): Promise<TaskBackend>;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=defaults.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/services/defaults.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAErD,qBAAa,yBAA0B,YAAW,kBAAkB;IAC5D,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;CAQjD"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export class DefaultTaskBackendFactory {
|
|
2
|
+
async for(project) {
|
|
3
|
+
const { ProjectContext } = await import('../core/context.js');
|
|
4
|
+
const { createTaskBackend } = await import('../providers/registry.js');
|
|
5
|
+
const ctx = ProjectContext.load(project);
|
|
6
|
+
const backend = createTaskBackend(ctx.config);
|
|
7
|
+
await backend.bootstrap();
|
|
8
|
+
return backend;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=defaults.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/services/defaults.ts"],"names":[],"mappings":"AAYA,MAAM,OAAO,yBAAyB;IACpC,KAAK,CAAC,GAAG,CAAC,OAAe;QACvB,MAAM,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;QAC9D,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAC;QACvE,MAAM,GAAG,GAAG,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACzC,MAAM,OAAO,GAAG,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC9C,MAAM,OAAO,CAAC,SAAS,EAAE,CAAC;QAC1B,OAAO,OAAO,CAAC;IACjB,CAAC;CACF"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module services/executors
|
|
3
|
+
* @description Service port 的 Production executor 实现(Phase 3)
|
|
4
|
+
*
|
|
5
|
+
* @layer services
|
|
6
|
+
*
|
|
7
|
+
* 和 defaults.ts 同属"glue layer"——集中 Service 层伸进 Domain 的调用点。
|
|
8
|
+
* 这些 executor 让 Console 和 CLI 两条 Delivery 走同一份业务逻辑:
|
|
9
|
+
* - WorkerExecutor → 直接调 StageEngine.launchSingle / WorkerManager.kill
|
|
10
|
+
* - PipelineExecutor → 直接调 executeStop / executeReset(绕过 CLI spawn)
|
|
11
|
+
* - ChatExecutor → 直接用 DaemonClient
|
|
12
|
+
* - ProjectInitExecutor→ 直接调 executeProjectInit
|
|
13
|
+
*
|
|
14
|
+
* 这样 Console 路由再也不需要 spawn 子 CLI 进程。
|
|
15
|
+
*/
|
|
16
|
+
import type { ProcessSpawner } from '../infra/spawn.js';
|
|
17
|
+
import type { ChatExecutor } from './ChatService.js';
|
|
18
|
+
import type { PipelineExecutor, ResetPipelineOpts } from './PipelineService.js';
|
|
19
|
+
import type { ProjectInitExecutor, ProjectInitOpts } from './ProjectService.js';
|
|
20
|
+
import type { WorkerExecutor } from './WorkerService.js';
|
|
21
|
+
export declare class DefaultWorkerExecutor implements WorkerExecutor {
|
|
22
|
+
launch(project: string, seq: number): Promise<void>;
|
|
23
|
+
kill(project: string, slot: number): Promise<void>;
|
|
24
|
+
}
|
|
25
|
+
export declare class DefaultPipelineExecutor implements PipelineExecutor {
|
|
26
|
+
private readonly spawner;
|
|
27
|
+
constructor(spawner: ProcessSpawner);
|
|
28
|
+
stop(project: string): Promise<void>;
|
|
29
|
+
reset(project: string, opts: ResetPipelineOpts): Promise<void>;
|
|
30
|
+
}
|
|
31
|
+
export declare class DefaultChatExecutor implements ChatExecutor {
|
|
32
|
+
stopSession(sessionId: string): Promise<void>;
|
|
33
|
+
cancelRun(sessionId: string): Promise<void>;
|
|
34
|
+
}
|
|
35
|
+
export declare class DefaultProjectInitExecutor implements ProjectInitExecutor {
|
|
36
|
+
init(project: string, opts: ProjectInitOpts): Promise<void>;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=executors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executors.d.ts","sourceRoot":"","sources":["../../src/services/executors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAChF,OAAO,KAAK,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAChF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAIzD,qBAAa,qBAAsB,YAAW,cAAc;IACpD,MAAM,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IA2EnD,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAgCzD;AAQD,qBAAa,uBAAwB,YAAW,gBAAgB;IAClD,OAAO,CAAC,QAAQ,CAAC,OAAO;gBAAP,OAAO,EAAE,cAAc;IAE9C,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAUpC,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;CAWrE;AAMD,qBAAa,mBAAoB,YAAW,YAAY;IAChD,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAO7C,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAQlD;AAID,qBAAa,0BAA2B,YAAW,mBAAmB;IAC9D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;CAIlE"}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
// ─── WorkerExecutor —— 直接调 StageEngine 启卡 / RuntimeStore kill ─────
|
|
2
|
+
export class DefaultWorkerExecutor {
|
|
3
|
+
async launch(project, seq) {
|
|
4
|
+
const { ProjectContext } = await import('../core/context.js');
|
|
5
|
+
const { ProjectPipelineAdapter } = await import('../core/projectPipelineAdapter.js');
|
|
6
|
+
const { RuntimeStore } = await import('../core/runtimeStore.js');
|
|
7
|
+
const { SPSEventHandler } = await import('../engines/EventHandler.js');
|
|
8
|
+
const { StageEngine } = await import('../engines/StageEngine.js');
|
|
9
|
+
const { CompletionJudge } = await import('../manager/completion-judge.js');
|
|
10
|
+
const { ProcessSupervisor } = await import('../manager/supervisor.js');
|
|
11
|
+
const { WorkerManagerImpl } = await import('../manager/worker-manager-impl.js');
|
|
12
|
+
const { createAgentRuntime, createNotifier, createRepoBackend, createTaskBackend } = await import('../providers/registry.js');
|
|
13
|
+
const ctx = ProjectContext.load(project);
|
|
14
|
+
const pipelineAdapter = new ProjectPipelineAdapter(ctx.config, ctx.paths.repoDir);
|
|
15
|
+
const allStateNames = [
|
|
16
|
+
...new Set([
|
|
17
|
+
pipelineAdapter.states.planning,
|
|
18
|
+
pipelineAdapter.states.backlog,
|
|
19
|
+
pipelineAdapter.states.ready,
|
|
20
|
+
pipelineAdapter.states.done,
|
|
21
|
+
...pipelineAdapter.stages.flatMap((s) => [s.triggerState, s.activeState, s.onCompleteState]),
|
|
22
|
+
].filter(Boolean)),
|
|
23
|
+
];
|
|
24
|
+
const taskBackend = createTaskBackend(ctx.config, allStateNames);
|
|
25
|
+
const repoBackend = createRepoBackend(ctx.config);
|
|
26
|
+
const notifier = createNotifier(ctx.config);
|
|
27
|
+
const supervisor = new ProcessSupervisor();
|
|
28
|
+
const completionJudge = new CompletionJudge();
|
|
29
|
+
const agentRuntime = createAgentRuntime(ctx);
|
|
30
|
+
const workerManager = new WorkerManagerImpl({
|
|
31
|
+
supervisor,
|
|
32
|
+
completionJudge,
|
|
33
|
+
agentRuntime: agentRuntime ?? null,
|
|
34
|
+
stateFile: ctx.paths.stateFile,
|
|
35
|
+
maxWorkers: ctx.maxWorkers,
|
|
36
|
+
});
|
|
37
|
+
const runtimeStore = new RuntimeStore({
|
|
38
|
+
paths: { stateFile: ctx.paths.stateFile },
|
|
39
|
+
maxWorkers: ctx.maxWorkers,
|
|
40
|
+
});
|
|
41
|
+
const eventHandler = new SPSEventHandler({
|
|
42
|
+
taskBackend,
|
|
43
|
+
notifier,
|
|
44
|
+
runtimeStore,
|
|
45
|
+
project,
|
|
46
|
+
pipelineAdapter,
|
|
47
|
+
});
|
|
48
|
+
workerManager.onEvent((event) => eventHandler.handle(event));
|
|
49
|
+
const firstStage = pipelineAdapter.stages[0];
|
|
50
|
+
if (!firstStage) {
|
|
51
|
+
throw new Error(`Project ${project} has no pipeline stages`);
|
|
52
|
+
}
|
|
53
|
+
const engine = new StageEngine(ctx, firstStage, 0, pipelineAdapter.stages.length, taskBackend, repoBackend, workerManager, pipelineAdapter, notifier);
|
|
54
|
+
const result = await engine.launchSingle(String(seq), { dryRun: false });
|
|
55
|
+
if (result.status !== 'ok') {
|
|
56
|
+
const detail = typeof result.details === 'object' && result.details
|
|
57
|
+
? JSON.stringify(result.details)
|
|
58
|
+
: String(result.details ?? 'unknown');
|
|
59
|
+
throw new Error(detail);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
async kill(project, slot) {
|
|
63
|
+
const { ProjectContext } = await import('../core/context.js');
|
|
64
|
+
const { RuntimeStore } = await import('../core/runtimeStore.js');
|
|
65
|
+
const ctx = ProjectContext.load(project);
|
|
66
|
+
const store = new RuntimeStore({
|
|
67
|
+
paths: { stateFile: ctx.paths.stateFile },
|
|
68
|
+
maxWorkers: ctx.maxWorkers,
|
|
69
|
+
});
|
|
70
|
+
const slotName = `worker-${slot}`;
|
|
71
|
+
const state = store.readState();
|
|
72
|
+
const worker = state.workers[slotName];
|
|
73
|
+
if (worker?.pid && worker.pid > 0) {
|
|
74
|
+
try {
|
|
75
|
+
process.kill(worker.pid, 'SIGTERM');
|
|
76
|
+
}
|
|
77
|
+
catch {
|
|
78
|
+
/* pid 已死 */
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
// 清 slot 状态 —— mutator 重置为 idle
|
|
82
|
+
store.updateState(`console-worker-kill-${slot}`, (s) => {
|
|
83
|
+
const w = s.workers[slotName];
|
|
84
|
+
if (!w)
|
|
85
|
+
return;
|
|
86
|
+
w.status = 'idle';
|
|
87
|
+
w.seq = null;
|
|
88
|
+
w.branch = null;
|
|
89
|
+
w.worktree = null;
|
|
90
|
+
w.claimedAt = null;
|
|
91
|
+
w.lastHeartbeat = null;
|
|
92
|
+
if ('pid' in w)
|
|
93
|
+
w.pid = null;
|
|
94
|
+
if ('sessionId' in w)
|
|
95
|
+
w.sessionId = null;
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
// ─── PipelineExecutor —— 通过 ProcessSpawner 走子进程(避开 process.exit 污染)─────
|
|
100
|
+
//
|
|
101
|
+
// 细节:executeStop / executeReset 都直接调 process.exit() 做错误退出,不能在 Console
|
|
102
|
+
// server 内联调——会把服务器也杀了。用子进程隔离最干净。这是 Delivery 层不允许 spawn
|
|
103
|
+
// 但 executor glue 层允许的典型场景。
|
|
104
|
+
export class DefaultPipelineExecutor {
|
|
105
|
+
spawner;
|
|
106
|
+
constructor(spawner) {
|
|
107
|
+
this.spawner = spawner;
|
|
108
|
+
}
|
|
109
|
+
async stop(project) {
|
|
110
|
+
const result = await this.spawner.runCliSync({
|
|
111
|
+
args: ['stop', project],
|
|
112
|
+
timeoutMs: 20_000,
|
|
113
|
+
});
|
|
114
|
+
if (result.exitCode !== 0) {
|
|
115
|
+
throw new Error(result.stderr || `sps stop exited ${result.exitCode}`);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
async reset(project, opts) {
|
|
119
|
+
const args = ['reset', project];
|
|
120
|
+
if (opts.all)
|
|
121
|
+
args.push('--all');
|
|
122
|
+
else if (Array.isArray(opts.cards) && opts.cards.length > 0) {
|
|
123
|
+
args.push('--card', opts.cards.join(','));
|
|
124
|
+
}
|
|
125
|
+
const result = await this.spawner.runCliSync({ args, timeoutMs: 60_000 });
|
|
126
|
+
if (result.exitCode !== 0) {
|
|
127
|
+
throw new Error(result.stderr || `sps reset exited ${result.exitCode}`);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
// ─── ChatExecutor —— 直接用 DaemonClient ─────────────────────────────
|
|
132
|
+
const CHAT_SLOT_PREFIX = 'chat-';
|
|
133
|
+
export class DefaultChatExecutor {
|
|
134
|
+
async stopSession(sessionId) {
|
|
135
|
+
const { DaemonClient } = await import('../daemon/daemonClient.js');
|
|
136
|
+
const client = new DaemonClient();
|
|
137
|
+
if (!(await client.isRunning()))
|
|
138
|
+
return;
|
|
139
|
+
await client.stopSession(`${CHAT_SLOT_PREFIX}${sessionId}`).catch(() => undefined);
|
|
140
|
+
}
|
|
141
|
+
async cancelRun(sessionId) {
|
|
142
|
+
const { DaemonClient } = await import('../daemon/daemonClient.js');
|
|
143
|
+
const client = new DaemonClient();
|
|
144
|
+
if (!(await client.isRunning())) {
|
|
145
|
+
throw new Error('daemon not running');
|
|
146
|
+
}
|
|
147
|
+
await client.cancelRun(`${CHAT_SLOT_PREFIX}${sessionId}`);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
// ─── ProjectInitExecutor —— 直接调 executeProjectInit ─────────────────
|
|
151
|
+
export class DefaultProjectInitExecutor {
|
|
152
|
+
async init(project, opts) {
|
|
153
|
+
const { executeProjectInit } = await import('../commands/projectInit.js');
|
|
154
|
+
await executeProjectInit(project, {}, opts);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
//# sourceMappingURL=executors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executors.js","sourceRoot":"","sources":["../../src/services/executors.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module services/ports
|
|
3
|
+
* @description Service 层抽象依赖端口 —— concrete 实现在 services/defaults.ts
|
|
4
|
+
*
|
|
5
|
+
* @layer services
|
|
6
|
+
*
|
|
7
|
+
* 为什么不直接 import Domain 具体类:
|
|
8
|
+
* - 单测能用 fake 替换
|
|
9
|
+
* - delivery 层不会被迫加载整个 Domain 图
|
|
10
|
+
* - 将来想换 TaskBackend 实现(gitlab/github backend)只改 factory
|
|
11
|
+
*/
|
|
12
|
+
import type { TaskBackend } from '../interfaces/TaskBackend.js';
|
|
13
|
+
/** 按 project 名拿 TaskBackend 实例 */
|
|
14
|
+
export interface TaskBackendFactory {
|
|
15
|
+
for(project: string): Promise<TaskBackend>;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=ports.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ports.d.ts","sourceRoot":"","sources":["../../src/services/ports.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,8BAA8B,CAAC;AAEhE,kCAAkC;AAClC,MAAM,WAAW,kBAAkB;IACjC,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;CAC5C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ports.js","sourceRoot":"","sources":["../../src/services/ports.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module shared/domainEvents
|
|
3
|
+
* @description 领域事件类型 + DomainEventBus port(抽象)
|
|
4
|
+
*
|
|
5
|
+
* @layer shared
|
|
6
|
+
*
|
|
7
|
+
* Service 层发布事件,Delivery 层订阅并推给客户端:
|
|
8
|
+
* - Console 侧订阅推到 SSE /stream/projects/*
|
|
9
|
+
* - CLI 侧可注入 NoOp 实现(或 journal)
|
|
10
|
+
*
|
|
11
|
+
* 事件类型是 **领域事件**(过去时,已经发生的事实),不是 UI 事件也不是命令。
|
|
12
|
+
*/
|
|
13
|
+
import type { Card } from './types.js';
|
|
14
|
+
export interface CardCreatedEvent {
|
|
15
|
+
readonly type: 'card.created';
|
|
16
|
+
readonly project: string;
|
|
17
|
+
readonly seq: number;
|
|
18
|
+
readonly card: Card;
|
|
19
|
+
readonly ts: number;
|
|
20
|
+
}
|
|
21
|
+
export interface CardUpdatedEvent {
|
|
22
|
+
readonly type: 'card.updated';
|
|
23
|
+
readonly project: string;
|
|
24
|
+
readonly seq: number;
|
|
25
|
+
readonly patch: Readonly<Partial<Card>>;
|
|
26
|
+
readonly ts: number;
|
|
27
|
+
}
|
|
28
|
+
export interface CardMovedEvent {
|
|
29
|
+
readonly type: 'card.moved';
|
|
30
|
+
readonly project: string;
|
|
31
|
+
readonly seq: number;
|
|
32
|
+
readonly from: string;
|
|
33
|
+
readonly to: string;
|
|
34
|
+
readonly ts: number;
|
|
35
|
+
}
|
|
36
|
+
export interface CardDeletedEvent {
|
|
37
|
+
readonly type: 'card.deleted';
|
|
38
|
+
readonly project: string;
|
|
39
|
+
readonly seq: number;
|
|
40
|
+
readonly ts: number;
|
|
41
|
+
}
|
|
42
|
+
export interface WorkerDispatchedEvent {
|
|
43
|
+
readonly type: 'worker.dispatched';
|
|
44
|
+
readonly project: string;
|
|
45
|
+
readonly slot: string;
|
|
46
|
+
readonly seq: number;
|
|
47
|
+
readonly stage: string;
|
|
48
|
+
readonly ts: number;
|
|
49
|
+
}
|
|
50
|
+
export interface WorkerUpdatedEvent {
|
|
51
|
+
readonly type: 'worker.updated';
|
|
52
|
+
readonly project: string;
|
|
53
|
+
readonly slot: string;
|
|
54
|
+
readonly ts: number;
|
|
55
|
+
}
|
|
56
|
+
export interface WorkerDeletedEvent {
|
|
57
|
+
readonly type: 'worker.deleted';
|
|
58
|
+
readonly project: string;
|
|
59
|
+
readonly slot: string;
|
|
60
|
+
readonly ts: number;
|
|
61
|
+
}
|
|
62
|
+
export interface PipelineStartedEvent {
|
|
63
|
+
readonly type: 'pipeline.started';
|
|
64
|
+
readonly project: string;
|
|
65
|
+
readonly pid: number;
|
|
66
|
+
readonly ts: number;
|
|
67
|
+
}
|
|
68
|
+
export interface PipelineStoppedEvent {
|
|
69
|
+
readonly type: 'pipeline.stopped';
|
|
70
|
+
readonly project: string;
|
|
71
|
+
readonly ts: number;
|
|
72
|
+
}
|
|
73
|
+
export interface SkillLinkedEvent {
|
|
74
|
+
readonly type: 'skill.linked';
|
|
75
|
+
readonly project: string;
|
|
76
|
+
readonly skill: string;
|
|
77
|
+
readonly ts: number;
|
|
78
|
+
}
|
|
79
|
+
export interface SkillUnlinkedEvent {
|
|
80
|
+
readonly type: 'skill.unlinked';
|
|
81
|
+
readonly project: string;
|
|
82
|
+
readonly skill: string;
|
|
83
|
+
readonly ts: number;
|
|
84
|
+
}
|
|
85
|
+
/** Union of all领域 events. */
|
|
86
|
+
export type DomainEvent = CardCreatedEvent | CardUpdatedEvent | CardMovedEvent | CardDeletedEvent | WorkerDispatchedEvent | WorkerUpdatedEvent | WorkerDeletedEvent | PipelineStartedEvent | PipelineStoppedEvent | SkillLinkedEvent | SkillUnlinkedEvent;
|
|
87
|
+
export type DomainEventType = DomainEvent['type'];
|
|
88
|
+
/**
|
|
89
|
+
* DomainEventBus —— 事件总线抽象。
|
|
90
|
+
* Service 层只依赖这个接口,不知道底层是 SSE / noop / journal。
|
|
91
|
+
*/
|
|
92
|
+
export interface DomainEventBus {
|
|
93
|
+
/** 发布一个事件(同步返回) */
|
|
94
|
+
emit(event: DomainEvent): void;
|
|
95
|
+
/**
|
|
96
|
+
* 订阅所有事件。返回取消订阅函数。
|
|
97
|
+
* 订阅者里抛出的异常不会影响 publisher。
|
|
98
|
+
*/
|
|
99
|
+
subscribe(handler: (event: DomainEvent) => void): () => void;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* 什么都不做的实现 —— 用于 CLI / 单元测试。
|
|
103
|
+
* 保证 Service 层即使没接 real bus 也能跑。
|
|
104
|
+
*/
|
|
105
|
+
export declare class NoopEventBus implements DomainEventBus {
|
|
106
|
+
emit(_event: DomainEvent): void;
|
|
107
|
+
subscribe(_handler: (event: DomainEvent) => void): () => void;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* 进程内同步广播 —— 用于测试和 CLI 的 journal 用途。
|
|
111
|
+
* 订阅者顺序执行,handler 内抛错被吞只记 console.warn(不阻塞 publisher)。
|
|
112
|
+
*/
|
|
113
|
+
export declare class InMemoryEventBus implements DomainEventBus {
|
|
114
|
+
private handlers;
|
|
115
|
+
emit(event: DomainEvent): void;
|
|
116
|
+
subscribe(handler: (event: DomainEvent) => void): () => void;
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=domainEvents.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"domainEvents.d.ts","sourceRoot":"","sources":["../../src/shared/domainEvents.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
// ─── NoopEventBus ─────────────────────────────────────────────────
|
|
2
|
+
/**
|
|
3
|
+
* 什么都不做的实现 —— 用于 CLI / 单元测试。
|
|
4
|
+
* 保证 Service 层即使没接 real bus 也能跑。
|
|
5
|
+
*/
|
|
6
|
+
export class NoopEventBus {
|
|
7
|
+
emit(_event) {
|
|
8
|
+
/* swallow */
|
|
9
|
+
}
|
|
10
|
+
subscribe(_handler) {
|
|
11
|
+
return () => {
|
|
12
|
+
/* no-op */
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
// ─── InMemoryEventBus ─────────────────────────────────────────────
|
|
17
|
+
/**
|
|
18
|
+
* 进程内同步广播 —— 用于测试和 CLI 的 journal 用途。
|
|
19
|
+
* 订阅者顺序执行,handler 内抛错被吞只记 console.warn(不阻塞 publisher)。
|
|
20
|
+
*/
|
|
21
|
+
export class InMemoryEventBus {
|
|
22
|
+
handlers = new Set();
|
|
23
|
+
emit(event) {
|
|
24
|
+
for (const h of this.handlers) {
|
|
25
|
+
try {
|
|
26
|
+
h(event);
|
|
27
|
+
}
|
|
28
|
+
catch (err) {
|
|
29
|
+
console.warn('[DomainEventBus] handler threw:', err);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
subscribe(handler) {
|
|
34
|
+
this.handlers.add(handler);
|
|
35
|
+
return () => {
|
|
36
|
+
this.handlers.delete(handler);
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=domainEvents.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"domainEvents.js","sourceRoot":"","sources":["../../src/shared/domainEvents.ts"],"names":[],"mappings":"AAmIA,qEAAqE;AAErE;;;GAGG;AACH,MAAM,OAAO,YAAY;IACvB,IAAI,CAAC,MAAmB;QACtB,aAAa;IACf,CAAC;IACD,SAAS,CAAC,QAAsC;QAC9C,OAAO,GAAG,EAAE;YACV,WAAW;QACb,CAAC,CAAC;IACJ,CAAC;CACF;AAED,qEAAqE;AAErE;;;GAGG;AACH,MAAM,OAAO,gBAAgB;IACnB,QAAQ,GAAsC,IAAI,GAAG,EAAE,CAAC;IAEhE,IAAI,CAAC,KAAkB;QACrB,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAC9B,IAAI,CAAC;gBACH,CAAC,CAAC,KAAK,CAAC,CAAC;YACX,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,CAAC,IAAI,CAAC,iCAAiC,EAAE,GAAG,CAAC,CAAC;YACvD,CAAC;QACH,CAAC;IACH,CAAC;IAED,SAAS,CAAC,OAAqC;QAC7C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAC3B,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAChC,CAAC,CAAC;IACJ,CAAC;CACF"}
|