@intrect/openswarm 0.4.4 → 0.8.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/README.md +46 -26
- package/config.example.yaml +22 -10
- package/dist/adapters/agenticLoop.d.ts +45 -2
- package/dist/adapters/agenticLoop.d.ts.map +1 -1
- package/dist/adapters/agenticLoop.js +209 -61
- package/dist/adapters/agenticLoop.js.map +1 -1
- package/dist/adapters/chatStream.d.ts +55 -0
- package/dist/adapters/chatStream.d.ts.map +1 -0
- package/dist/adapters/chatStream.js +116 -0
- package/dist/adapters/chatStream.js.map +1 -0
- package/dist/adapters/codex.d.ts +7 -0
- package/dist/adapters/codex.d.ts.map +1 -1
- package/dist/adapters/codex.js +67 -6
- package/dist/adapters/codex.js.map +1 -1
- package/dist/adapters/codexModels.d.ts +20 -0
- package/dist/adapters/codexModels.d.ts.map +1 -0
- package/dist/adapters/codexModels.js +195 -0
- package/dist/adapters/codexModels.js.map +1 -0
- package/dist/adapters/codexResponses.d.ts +97 -0
- package/dist/adapters/codexResponses.d.ts.map +1 -0
- package/dist/adapters/codexResponses.js +302 -0
- package/dist/adapters/codexResponses.js.map +1 -0
- package/dist/adapters/gpt.d.ts.map +1 -1
- package/dist/adapters/gpt.js +20 -120
- package/dist/adapters/gpt.js.map +1 -1
- package/dist/adapters/index.d.ts +10 -2
- package/dist/adapters/index.d.ts.map +1 -1
- package/dist/adapters/index.js +19 -5
- package/dist/adapters/index.js.map +1 -1
- package/dist/adapters/lmstudio.d.ts +8 -0
- package/dist/adapters/lmstudio.d.ts.map +1 -0
- package/dist/adapters/lmstudio.js +41 -0
- package/dist/adapters/lmstudio.js.map +1 -0
- package/dist/adapters/local.d.ts +16 -1
- package/dist/adapters/local.d.ts.map +1 -1
- package/dist/adapters/local.js +51 -127
- package/dist/adapters/local.js.map +1 -1
- package/dist/adapters/openrouter.d.ts +37 -0
- package/dist/adapters/openrouter.d.ts.map +1 -0
- package/dist/adapters/openrouter.js +193 -0
- package/dist/adapters/openrouter.js.map +1 -0
- package/dist/adapters/resultParsing.d.ts +6 -0
- package/dist/adapters/resultParsing.d.ts.map +1 -0
- package/dist/adapters/resultParsing.js +139 -0
- package/dist/adapters/resultParsing.js.map +1 -0
- package/dist/adapters/tools.d.ts +21 -2
- package/dist/adapters/tools.d.ts.map +1 -1
- package/dist/adapters/tools.js +153 -12
- package/dist/adapters/tools.js.map +1 -1
- package/dist/adapters/types.d.ts +40 -1
- package/dist/adapters/types.d.ts.map +1 -1
- package/dist/adapters/webTools.d.ts +9 -0
- package/dist/adapters/webTools.d.ts.map +1 -0
- package/dist/adapters/webTools.js +195 -0
- package/dist/adapters/webTools.js.map +1 -0
- package/dist/agents/draftAnalyzer.d.ts +1 -1
- package/dist/agents/draftAnalyzer.d.ts.map +1 -1
- package/dist/agents/draftAnalyzer.js +3 -3
- package/dist/agents/draftAnalyzer.js.map +1 -1
- package/dist/agents/pairPipeline.d.ts +26 -1
- package/dist/agents/pairPipeline.d.ts.map +1 -1
- package/dist/agents/pairPipeline.js +184 -17
- package/dist/agents/pairPipeline.js.map +1 -1
- package/dist/agents/reflection.d.ts +56 -0
- package/dist/agents/reflection.d.ts.map +1 -0
- package/dist/agents/reflection.js +120 -0
- package/dist/agents/reflection.js.map +1 -0
- package/dist/agents/worker.d.ts +8 -0
- package/dist/agents/worker.d.ts.map +1 -1
- package/dist/agents/worker.js +23 -2
- package/dist/agents/worker.js.map +1 -1
- package/dist/auth/index.d.ts +3 -1
- package/dist/auth/index.d.ts.map +1 -1
- package/dist/auth/index.js +3 -1
- package/dist/auth/index.js.map +1 -1
- package/dist/auth/linearPkce.d.ts +22 -0
- package/dist/auth/linearPkce.d.ts.map +1 -0
- package/dist/auth/linearPkce.js +208 -0
- package/dist/auth/linearPkce.js.map +1 -0
- package/dist/auth/oauthPkce.d.ts +4 -3
- package/dist/auth/oauthPkce.d.ts.map +1 -1
- package/dist/auth/oauthPkce.js +39 -12
- package/dist/auth/oauthPkce.js.map +1 -1
- package/dist/auth/oauthStore.d.ts +11 -1
- package/dist/auth/oauthStore.d.ts.map +1 -1
- package/dist/auth/oauthStore.js +14 -2
- package/dist/auth/oauthStore.js.map +1 -1
- package/dist/auth/openrouterPkce.d.ts +29 -0
- package/dist/auth/openrouterPkce.d.ts.map +1 -0
- package/dist/auth/openrouterPkce.js +222 -0
- package/dist/auth/openrouterPkce.js.map +1 -0
- package/dist/automation/autonomousRunner.d.ts +17 -7
- package/dist/automation/autonomousRunner.d.ts.map +1 -1
- package/dist/automation/autonomousRunner.js +69 -70
- package/dist/automation/autonomousRunner.js.map +1 -1
- package/dist/automation/backlogGrooming.d.ts +21 -0
- package/dist/automation/backlogGrooming.d.ts.map +1 -0
- package/dist/automation/backlogGrooming.js +80 -0
- package/dist/automation/backlogGrooming.js.map +1 -0
- package/dist/automation/localCI.d.ts +24 -0
- package/dist/automation/localCI.d.ts.map +1 -0
- package/dist/automation/localCI.js +84 -0
- package/dist/automation/localCI.js.map +1 -0
- package/dist/automation/runnerExecution.d.ts +33 -7
- package/dist/automation/runnerExecution.d.ts.map +1 -1
- package/dist/automation/runnerExecution.js +202 -154
- package/dist/automation/runnerExecution.js.map +1 -1
- package/dist/automation/runnerTypes.d.ts +5 -1
- package/dist/automation/runnerTypes.d.ts.map +1 -1
- package/dist/automation/taskSource.d.ts +101 -0
- package/dist/automation/taskSource.d.ts.map +1 -0
- package/dist/automation/taskSource.js +136 -0
- package/dist/automation/taskSource.js.map +1 -0
- package/dist/automation/workerAuditLog.d.ts +29 -0
- package/dist/automation/workerAuditLog.d.ts.map +1 -0
- package/dist/automation/workerAuditLog.js +82 -0
- package/dist/automation/workerAuditLog.js.map +1 -0
- package/dist/cli/authHandler.d.ts +14 -5
- package/dist/cli/authHandler.d.ts.map +1 -1
- package/dist/cli/authHandler.js +131 -36
- package/dist/cli/authHandler.js.map +1 -1
- package/dist/cli/daemon.d.ts +5 -0
- package/dist/cli/daemon.d.ts.map +1 -1
- package/dist/cli/daemon.js +13 -0
- package/dist/cli/daemon.js.map +1 -1
- package/dist/cli/doctorHandler.d.ts +2 -0
- package/dist/cli/doctorHandler.d.ts.map +1 -0
- package/dist/cli/doctorHandler.js +114 -0
- package/dist/cli/doctorHandler.js.map +1 -0
- package/dist/cli/initWizard.d.ts +13 -0
- package/dist/cli/initWizard.d.ts.map +1 -0
- package/dist/cli/initWizard.js +314 -0
- package/dist/cli/initWizard.js.map +1 -0
- package/dist/cli.js +112 -38
- package/dist/cli.js.map +1 -1
- package/dist/core/config.d.ts +89 -15
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +100 -23
- package/dist/core/config.js.map +1 -1
- package/dist/core/envFile.d.ts +6 -0
- package/dist/core/envFile.d.ts.map +1 -1
- package/dist/core/envFile.js +39 -1
- package/dist/core/envFile.js.map +1 -1
- package/dist/core/eventHub.d.ts +22 -0
- package/dist/core/eventHub.d.ts.map +1 -1
- package/dist/core/eventHub.js.map +1 -1
- package/dist/core/providerOverride.d.ts +6 -0
- package/dist/core/providerOverride.d.ts.map +1 -0
- package/dist/core/providerOverride.js +37 -0
- package/dist/core/providerOverride.js.map +1 -0
- package/dist/core/service.d.ts.map +1 -1
- package/dist/core/service.js +43 -20
- package/dist/core/service.js.map +1 -1
- package/dist/core/types.d.ts +16 -2
- package/dist/core/types.d.ts.map +1 -1
- package/dist/discord/discordCore.d.ts.map +1 -1
- package/dist/discord/discordCore.js +16 -103
- package/dist/discord/discordCore.js.map +1 -1
- package/dist/discord/discordHandlers.d.ts.map +1 -1
- package/dist/discord/discordHandlers.js +15 -12
- package/dist/discord/discordHandlers.js.map +1 -1
- package/dist/index.js +12 -1
- package/dist/index.js.map +1 -1
- package/dist/issues/sqliteStore.d.ts.map +1 -1
- package/dist/issues/sqliteStore.js +7 -2
- package/dist/issues/sqliteStore.js.map +1 -1
- package/dist/knowledge/scanner.d.ts.map +1 -1
- package/dist/knowledge/scanner.js +5 -0
- package/dist/knowledge/scanner.js.map +1 -1
- package/dist/linear/linear.d.ts +45 -2
- package/dist/linear/linear.d.ts.map +1 -1
- package/dist/linear/linear.js +154 -3
- package/dist/linear/linear.js.map +1 -1
- package/dist/locale/prompts/en.d.ts.map +1 -1
- package/dist/locale/prompts/en.js +40 -20
- package/dist/locale/prompts/en.js.map +1 -1
- package/dist/locale/prompts/ko.d.ts.map +1 -1
- package/dist/locale/prompts/ko.js +39 -20
- package/dist/locale/prompts/ko.js.map +1 -1
- package/dist/locale/types.d.ts +6 -0
- package/dist/locale/types.d.ts.map +1 -1
- package/dist/mcp/mcpClient.d.ts +27 -0
- package/dist/mcp/mcpClient.d.ts.map +1 -0
- package/dist/mcp/mcpClient.js +145 -0
- package/dist/mcp/mcpClient.js.map +1 -0
- package/dist/memory/memoryCore.d.ts.map +1 -1
- package/dist/memory/memoryCore.js +8 -2
- package/dist/memory/memoryCore.js.map +1 -1
- package/dist/memory/repoKnowledge.d.ts +33 -0
- package/dist/memory/repoKnowledge.d.ts.map +1 -0
- package/dist/memory/repoKnowledge.js +97 -0
- package/dist/memory/repoKnowledge.js.map +1 -0
- package/dist/notify/notifier.d.ts +26 -0
- package/dist/notify/notifier.d.ts.map +1 -0
- package/dist/notify/notifier.js +131 -0
- package/dist/notify/notifier.js.map +1 -0
- package/dist/orchestration/conflictDetector.d.ts +5 -2
- package/dist/orchestration/conflictDetector.d.ts.map +1 -1
- package/dist/orchestration/conflictDetector.js +35 -6
- package/dist/orchestration/conflictDetector.js.map +1 -1
- package/dist/orchestration/decisionEngine.d.ts +20 -0
- package/dist/orchestration/decisionEngine.d.ts.map +1 -1
- package/dist/orchestration/decisionEngine.js +45 -0
- package/dist/orchestration/decisionEngine.js.map +1 -1
- package/dist/support/banner.d.ts +7 -0
- package/dist/support/banner.d.ts.map +1 -0
- package/dist/support/banner.js +32 -0
- package/dist/support/banner.js.map +1 -0
- package/dist/support/chat.js +36 -27
- package/dist/support/chat.js.map +1 -1
- package/dist/support/chatBackend.d.ts +6 -0
- package/dist/support/chatBackend.d.ts.map +1 -1
- package/dist/support/chatBackend.js +105 -83
- package/dist/support/chatBackend.js.map +1 -1
- package/dist/support/chatTui.d.ts.map +1 -1
- package/dist/support/chatTui.js +217 -27
- package/dist/support/chatTui.js.map +1 -1
- package/dist/support/colors.d.ts +15 -0
- package/dist/support/colors.d.ts.map +1 -0
- package/dist/support/colors.js +23 -0
- package/dist/support/colors.js.map +1 -0
- package/dist/support/dashboardHtml.d.ts +1 -1
- package/dist/support/dashboardHtml.d.ts.map +1 -1
- package/dist/support/dashboardHtml.js +318 -65
- package/dist/support/dashboardHtml.js.map +1 -1
- package/dist/support/planCommand.d.ts +17 -0
- package/dist/support/planCommand.d.ts.map +1 -0
- package/dist/support/planCommand.js +114 -0
- package/dist/support/planCommand.js.map +1 -0
- package/dist/support/planner.d.ts +9 -2
- package/dist/support/planner.d.ts.map +1 -1
- package/dist/support/planner.js +43 -111
- package/dist/support/planner.js.map +1 -1
- package/dist/support/projectMapper.d.ts.map +1 -1
- package/dist/support/projectMapper.js +29 -1
- package/dist/support/projectMapper.js.map +1 -1
- package/dist/support/promptHelper.d.ts +24 -0
- package/dist/support/promptHelper.d.ts.map +1 -0
- package/dist/support/promptHelper.js +94 -0
- package/dist/support/promptHelper.js.map +1 -0
- package/dist/support/rateLimiter.d.ts.map +1 -1
- package/dist/support/rateLimiter.js +6 -0
- package/dist/support/rateLimiter.js.map +1 -1
- package/dist/support/repoMetadata.d.ts +51 -0
- package/dist/support/repoMetadata.d.ts.map +1 -0
- package/dist/support/repoMetadata.js +91 -0
- package/dist/support/repoMetadata.js.map +1 -0
- package/dist/support/web.d.ts.map +1 -1
- package/dist/support/web.js +196 -71
- package/dist/support/web.js.map +1 -1
- package/dist/support/worktreeManager.d.ts +6 -1
- package/dist/support/worktreeManager.d.ts.map +1 -1
- package/dist/support/worktreeManager.js +23 -1
- package/dist/support/worktreeManager.js.map +1 -1
- package/dist/taskState/store.d.ts +1 -0
- package/dist/taskState/store.d.ts.map +1 -1
- package/dist/taskState/store.js +22 -1
- package/dist/taskState/store.js.map +1 -1
- package/package.json +3 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rateLimiter.d.ts","sourceRoot":"","sources":["../../src/support/rateLimiter.ts"],"names":[],"mappings":"AAKA;;;;;;;;GAQG;AAEH,UAAU,iBAAiB;IACzB,kCAAkC;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,kCAAkC;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,wCAAwC;IACxC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oCAAoC;IACpC,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAQD,UAAU,kBAAkB;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,cAAM,WAAW;IAQb,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,MAAM;IARzB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,KAAK,CAAuB;IACpC,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,cAAc,CAAiB;gBAGpB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,iBAAiB;IAmB5C;;OAEG;IACH,OAAO,CAAC,MAAM;IAUd;;OAEG;IACH,OAAO,CAAC,YAAY;IA0BpB;;OAEG;IACH,OAAO,CAAC,UAAU;IAalB;;;;OAIG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAqB9B;;OAEG;IACH,UAAU,IAAI,kBAAkB;IAKhC;;OAEG;IACH,YAAY,IAAI,IAAI;IAMpB;;OAEG;IACH,OAAO,IAAI,IAAI;CAQhB;AAMD;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CA2BvC;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,WAAW,CAMnF;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAG7F;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAM1E;AAED;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,IAAI,CAK9C;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAM1C;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CAAC,CAAC,EACnC,OAAO,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,EACvC,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAC1B,OAAO,CAAC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"rateLimiter.d.ts","sourceRoot":"","sources":["../../src/support/rateLimiter.ts"],"names":[],"mappings":"AAKA;;;;;;;;GAQG;AAEH,UAAU,iBAAiB;IACzB,kCAAkC;IAClC,WAAW,EAAE,MAAM,CAAC;IACpB,kCAAkC;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,wCAAwC;IACxC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,oCAAoC;IACpC,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAQD,UAAU,kBAAkB;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,cAAM,WAAW;IAQb,OAAO,CAAC,QAAQ,CAAC,IAAI;IACrB,OAAO,CAAC,QAAQ,CAAC,MAAM;IARzB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,KAAK,CAAuB;IACpC,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,cAAc,CAAiB;gBAGpB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,iBAAiB;IAmB5C;;OAEG;IACH,OAAO,CAAC,MAAM;IAUd;;OAEG;IACH,OAAO,CAAC,YAAY;IA0BpB;;OAEG;IACH,OAAO,CAAC,UAAU;IAalB;;;;OAIG;IACG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAqB9B;;OAEG;IACH,UAAU,IAAI,kBAAkB;IAKhC;;OAEG;IACH,YAAY,IAAI,IAAI;IAMpB;;OAEG;IACH,OAAO,IAAI,IAAI;CAQhB;AAMD;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CA2BvC;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,WAAW,CAMnF;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAG7F;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAM1E;AAED;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,IAAI,CAK9C;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAM1C;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CAAC,CAAC,EACnC,OAAO,EAAE,QAAQ,GAAG,QAAQ,GAAG,QAAQ,EACvC,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAC1B,OAAO,CAAC,CAAC,CAAC,CASZ"}
|
|
@@ -213,6 +213,12 @@ export function destroyRateLimiters() {
|
|
|
213
213
|
* @returns Result of the operation
|
|
214
214
|
*/
|
|
215
215
|
export async function withRateLimit(service, operation) {
|
|
216
|
+
// Limiters are set up by the daemon (initRateLimiters). One-off CLI commands
|
|
217
|
+
// (init, auth) never call that, so fall back to running the operation directly
|
|
218
|
+
// instead of throwing "No limiter configured".
|
|
219
|
+
if (!limiters.has(service)) {
|
|
220
|
+
return operation();
|
|
221
|
+
}
|
|
216
222
|
await acquireRateLimit(service);
|
|
217
223
|
return operation();
|
|
218
224
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"rateLimiter.js","sourceRoot":"","sources":["../../src/support/rateLimiter.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"rateLimiter.js","sourceRoot":"","sources":["../../src/support/rateLimiter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
declare const LinearMappingSchema: z.ZodObject<{
|
|
3
|
+
teamId: z.ZodOptional<z.ZodString>;
|
|
4
|
+
teamKey: z.ZodOptional<z.ZodString>;
|
|
5
|
+
projectId: z.ZodString;
|
|
6
|
+
projectName: z.ZodOptional<z.ZodString>;
|
|
7
|
+
}, z.core.$strip>;
|
|
8
|
+
declare const RepoMetadataSchema: z.ZodObject<{
|
|
9
|
+
schemaVersion: z.ZodLiteral<1>;
|
|
10
|
+
projectName: z.ZodOptional<z.ZodString>;
|
|
11
|
+
description: z.ZodOptional<z.ZodString>;
|
|
12
|
+
linear: z.ZodOptional<z.ZodObject<{
|
|
13
|
+
teamId: z.ZodOptional<z.ZodString>;
|
|
14
|
+
teamKey: z.ZodOptional<z.ZodString>;
|
|
15
|
+
projectId: z.ZodString;
|
|
16
|
+
projectName: z.ZodOptional<z.ZodString>;
|
|
17
|
+
}, z.core.$strip>>;
|
|
18
|
+
github: z.ZodOptional<z.ZodObject<{
|
|
19
|
+
repo: z.ZodString;
|
|
20
|
+
}, z.core.$strip>>;
|
|
21
|
+
notes: z.ZodOptional<z.ZodString>;
|
|
22
|
+
}, z.core.$strip>;
|
|
23
|
+
export type RepoMetadata = z.infer<typeof RepoMetadataSchema>;
|
|
24
|
+
export type LinearRepoMapping = z.infer<typeof LinearMappingSchema>;
|
|
25
|
+
export declare const REPO_METADATA_FILENAME = "openswarm.json";
|
|
26
|
+
/**
|
|
27
|
+
* Load `${repoPath}/openswarm.json` if it exists.
|
|
28
|
+
*
|
|
29
|
+
* Returns:
|
|
30
|
+
* - parsed metadata when the file is present and valid
|
|
31
|
+
* - `null` when the file does not exist
|
|
32
|
+
* - throws `RepoMetadataError` when the file exists but is malformed
|
|
33
|
+
*
|
|
34
|
+
* The caller is expected to treat a `null` return as "no explicit mapping" —
|
|
35
|
+
* downstream code may then fall back to fuzzy matching or whatever default it
|
|
36
|
+
* already had.
|
|
37
|
+
*/
|
|
38
|
+
export declare function loadRepoMetadata(repoPath: string): Promise<RepoMetadata | null>;
|
|
39
|
+
/**
|
|
40
|
+
* Write `${repoPath}/openswarm.json`. Validates against the schema first so we
|
|
41
|
+
* never persist a malformed mapping. Returns the written file path.
|
|
42
|
+
* Used by `openswarm init` to record the repo ↔ Linear team/project mapping the
|
|
43
|
+
* user picked, so the daemon resolves this repo without fuzzy name matching.
|
|
44
|
+
*/
|
|
45
|
+
export declare function saveRepoMetadata(repoPath: string, meta: RepoMetadata): Promise<string>;
|
|
46
|
+
export declare class RepoMetadataError extends Error {
|
|
47
|
+
readonly filePath: string;
|
|
48
|
+
constructor(message: string, filePath: string);
|
|
49
|
+
}
|
|
50
|
+
export {};
|
|
51
|
+
//# sourceMappingURL=repoMetadata.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repoMetadata.d.ts","sourceRoot":"","sources":["../../src/support/repoMetadata.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,QAAA,MAAM,mBAAmB;;;;;iBAKvB,CAAC;AAMH,QAAA,MAAM,kBAAkB;;;;;;;;;;;;;;iBAStB,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAC9D,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAEpE,eAAO,MAAM,sBAAsB,mBAAmB,CAAC;AAEvD;;;;;;;;;;;GAWG;AACH,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAgCrF;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAK5F;AAED,qBAAa,iBAAkB,SAAQ,KAAK;aACG,QAAQ,EAAE,MAAM;gBAAjD,OAAO,EAAE,MAAM,EAAkB,QAAQ,EAAE,MAAM;CAI9D"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
// ============================================
|
|
2
|
+
// OpenSwarm - Per-repo metadata (`openswarm.json`)
|
|
3
|
+
// ============================================
|
|
4
|
+
//
|
|
5
|
+
// Each managed repository may ship an `openswarm.json` at its root.
|
|
6
|
+
// The file is the source of truth for repo ↔ external-tracker mapping
|
|
7
|
+
// (Linear today, GitHub/etc later) and removes the need for fuzzy
|
|
8
|
+
// name matching, which silently breaks on renames or ambiguous names.
|
|
9
|
+
import { readFile, writeFile } from 'node:fs/promises';
|
|
10
|
+
import { join } from 'node:path';
|
|
11
|
+
import { z } from 'zod';
|
|
12
|
+
const LinearMappingSchema = z.object({
|
|
13
|
+
teamId: z.string().uuid().optional(),
|
|
14
|
+
teamKey: z.string().optional(),
|
|
15
|
+
projectId: z.string().uuid(),
|
|
16
|
+
projectName: z.string().optional(),
|
|
17
|
+
});
|
|
18
|
+
const GithubMappingSchema = z.object({
|
|
19
|
+
repo: z.string(),
|
|
20
|
+
});
|
|
21
|
+
const RepoMetadataSchema = z.object({
|
|
22
|
+
schemaVersion: z.literal(1),
|
|
23
|
+
/** Human-friendly project name. Falls back to the directory basename if absent. */
|
|
24
|
+
projectName: z.string().optional(),
|
|
25
|
+
description: z.string().optional(),
|
|
26
|
+
linear: LinearMappingSchema.optional(),
|
|
27
|
+
github: GithubMappingSchema.optional(),
|
|
28
|
+
/** Free-form notes the swarm should keep in mind. */
|
|
29
|
+
notes: z.string().optional(),
|
|
30
|
+
});
|
|
31
|
+
export const REPO_METADATA_FILENAME = 'openswarm.json';
|
|
32
|
+
/**
|
|
33
|
+
* Load `${repoPath}/openswarm.json` if it exists.
|
|
34
|
+
*
|
|
35
|
+
* Returns:
|
|
36
|
+
* - parsed metadata when the file is present and valid
|
|
37
|
+
* - `null` when the file does not exist
|
|
38
|
+
* - throws `RepoMetadataError` when the file exists but is malformed
|
|
39
|
+
*
|
|
40
|
+
* The caller is expected to treat a `null` return as "no explicit mapping" —
|
|
41
|
+
* downstream code may then fall back to fuzzy matching or whatever default it
|
|
42
|
+
* already had.
|
|
43
|
+
*/
|
|
44
|
+
export async function loadRepoMetadata(repoPath) {
|
|
45
|
+
const filePath = join(repoPath, REPO_METADATA_FILENAME);
|
|
46
|
+
let raw;
|
|
47
|
+
try {
|
|
48
|
+
raw = await readFile(filePath, 'utf-8');
|
|
49
|
+
}
|
|
50
|
+
catch (err) {
|
|
51
|
+
if (err.code === 'ENOENT') {
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
throw new RepoMetadataError(`Failed to read ${filePath}: ${err.message}`, filePath);
|
|
55
|
+
}
|
|
56
|
+
let parsed;
|
|
57
|
+
try {
|
|
58
|
+
parsed = JSON.parse(raw);
|
|
59
|
+
}
|
|
60
|
+
catch (err) {
|
|
61
|
+
throw new RepoMetadataError(`Invalid JSON in ${filePath}: ${err.message}`, filePath);
|
|
62
|
+
}
|
|
63
|
+
const result = RepoMetadataSchema.safeParse(parsed);
|
|
64
|
+
if (!result.success) {
|
|
65
|
+
throw new RepoMetadataError(`Invalid schema in ${filePath}: ${result.error.issues
|
|
66
|
+
.map((i) => `${i.path.join('.')}: ${i.message}`)
|
|
67
|
+
.join('; ')}`, filePath);
|
|
68
|
+
}
|
|
69
|
+
return result.data;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Write `${repoPath}/openswarm.json`. Validates against the schema first so we
|
|
73
|
+
* never persist a malformed mapping. Returns the written file path.
|
|
74
|
+
* Used by `openswarm init` to record the repo ↔ Linear team/project mapping the
|
|
75
|
+
* user picked, so the daemon resolves this repo without fuzzy name matching.
|
|
76
|
+
*/
|
|
77
|
+
export async function saveRepoMetadata(repoPath, meta) {
|
|
78
|
+
const validated = RepoMetadataSchema.parse(meta);
|
|
79
|
+
const filePath = join(repoPath, REPO_METADATA_FILENAME);
|
|
80
|
+
await writeFile(filePath, `${JSON.stringify(validated, null, 2)}\n`, 'utf-8');
|
|
81
|
+
return filePath;
|
|
82
|
+
}
|
|
83
|
+
export class RepoMetadataError extends Error {
|
|
84
|
+
filePath;
|
|
85
|
+
constructor(message, filePath) {
|
|
86
|
+
super(message);
|
|
87
|
+
this.filePath = filePath;
|
|
88
|
+
this.name = 'RepoMetadataError';
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=repoMetadata.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"repoMetadata.js","sourceRoot":"","sources":["../../src/support/repoMetadata.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web.d.ts","sourceRoot":"","sources":["../../src/support/web.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"web.d.ts","sourceRoot":"","sources":["../../src/support/web.ts"],"names":[],"mappings":"AAeA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAgM1E;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAuB3D;AAYD,wBAAsB,cAAc,CAAC,IAAI,GAAE,MAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAi6BvE;AAED;;GAEG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC,CAKnD"}
|
package/dist/support/web.js
CHANGED
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
// ============================================
|
|
4
4
|
import { createServer } from 'node:http';
|
|
5
5
|
import { writeFileSync, readFileSync, existsSync } from 'node:fs';
|
|
6
|
-
import {
|
|
6
|
+
import { readdir, stat } from 'node:fs/promises';
|
|
7
|
+
import { join, resolve as resolvePath, dirname, basename } from 'node:path';
|
|
7
8
|
import { homedir } from 'node:os';
|
|
8
9
|
import { execFile } from 'node:child_process';
|
|
9
10
|
import { getChatHistory } from '../discord/index.js';
|
|
@@ -24,6 +25,7 @@ import { initLocale } from '../locale/index.js';
|
|
|
24
25
|
import { runChatCompletion, getDefaultChatModel } from './chatBackend.js';
|
|
25
26
|
import { handleGraphQL, isGraphQLRequest } from '../issues/graphql/server.js';
|
|
26
27
|
import { ISSUE_BOARD_HTML } from '../issues/issueBoardHtml.js';
|
|
28
|
+
import { createSubIssuesWithDependencies, getTaskSource } from '../automation/runnerExecution.js';
|
|
27
29
|
let server = null;
|
|
28
30
|
let runnerRef;
|
|
29
31
|
// CORS origin allowlist — hostname-strict match (no substring/prefix pitfalls)
|
|
@@ -64,6 +66,71 @@ const execTasks = new Map();
|
|
|
64
66
|
function cleanupExecTask(taskId) {
|
|
65
67
|
setTimeout(() => { execTasks.delete(taskId); }, 3600000); // 1 hour
|
|
66
68
|
}
|
|
69
|
+
/**
|
|
70
|
+
* Create an in-memory exec task and run it through PairPipeline asynchronously.
|
|
71
|
+
* Shared by `POST /api/exec` and the `/api/plan/dispatch` fallback (Path B) so a
|
|
72
|
+
* fix to the exec lifecycle applies to both. Returns the taskId immediately;
|
|
73
|
+
* status is pollable via GET /api/exec/:taskId.
|
|
74
|
+
*/
|
|
75
|
+
function startExecTask(prompt, opts = {}) {
|
|
76
|
+
const taskId = `exec-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
|
|
77
|
+
const resolvedPath = opts.projectPath ?? process.cwd();
|
|
78
|
+
const entry = { taskId, status: 'queued', createdAt: Date.now() };
|
|
79
|
+
execTasks.set(taskId, entry);
|
|
80
|
+
// Run pipeline asynchronously
|
|
81
|
+
(async () => {
|
|
82
|
+
try {
|
|
83
|
+
initLocale('en');
|
|
84
|
+
entry.status = 'running';
|
|
85
|
+
let stages;
|
|
86
|
+
if (opts.workerOnly) {
|
|
87
|
+
stages = ['worker'];
|
|
88
|
+
}
|
|
89
|
+
else if (opts.pipeline) {
|
|
90
|
+
stages = ['worker', 'reviewer', 'tester', 'documenter'];
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
stages = ['worker', 'reviewer'];
|
|
94
|
+
}
|
|
95
|
+
const roles = {};
|
|
96
|
+
if (opts.model) {
|
|
97
|
+
roles.worker = { enabled: true, model: opts.model, timeoutMs: 0 };
|
|
98
|
+
}
|
|
99
|
+
const task = {
|
|
100
|
+
id: taskId,
|
|
101
|
+
source: 'local',
|
|
102
|
+
title: prompt,
|
|
103
|
+
description: prompt,
|
|
104
|
+
priority: 3,
|
|
105
|
+
projectPath: resolvedPath,
|
|
106
|
+
createdAt: Date.now(),
|
|
107
|
+
};
|
|
108
|
+
const pipelineInstance = new PairPipeline({
|
|
109
|
+
stages,
|
|
110
|
+
maxIterations: 3,
|
|
111
|
+
roles: Object.keys(roles).length > 0 ? roles : undefined,
|
|
112
|
+
});
|
|
113
|
+
pipelineInstance.on('stage:start', ({ stage }) => {
|
|
114
|
+
entry.currentStage = stage;
|
|
115
|
+
});
|
|
116
|
+
const result = await pipelineInstance.run(task, resolvedPath);
|
|
117
|
+
entry.status = 'completed';
|
|
118
|
+
entry.result = {
|
|
119
|
+
success: result.success,
|
|
120
|
+
summary: result.workerResult?.summary,
|
|
121
|
+
finalStatus: result.finalStatus,
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
catch (err) {
|
|
125
|
+
entry.status = 'failed';
|
|
126
|
+
entry.error = err instanceof Error ? err.message : String(err);
|
|
127
|
+
}
|
|
128
|
+
finally {
|
|
129
|
+
cleanupExecTask(taskId);
|
|
130
|
+
}
|
|
131
|
+
})();
|
|
132
|
+
return taskId;
|
|
133
|
+
}
|
|
67
134
|
// Pinned + enabled repos persistence
|
|
68
135
|
const REPOS_FILE = join(homedir(), '.claude', 'openswarm-repos.json');
|
|
69
136
|
function loadReposConfig() {
|
|
@@ -100,8 +167,12 @@ const removedConfigPaths = new Set(_reposCfg.removedConfigPaths ?? []);
|
|
|
100
167
|
*/
|
|
101
168
|
export function setWebRunner(runner) {
|
|
102
169
|
runnerRef = runner;
|
|
103
|
-
// Restore persisted enabled state
|
|
170
|
+
// Restore persisted enabled state. INT-1810 R6: removedConfigPaths is a HARD denylist —
|
|
171
|
+
// never re-enable a removed/isolated repo, even if it lingers in the persisted enabled list
|
|
172
|
+
// (auto-rediscovery used to re-add isolated repos and silently un-isolate them).
|
|
104
173
|
for (const path of _reposCfg.enabled) {
|
|
174
|
+
if (removedConfigPaths.has(path))
|
|
175
|
+
continue;
|
|
105
176
|
runner.enableProject(path);
|
|
106
177
|
}
|
|
107
178
|
// 대시보드에서 제거된 config 경로를 runner의 allowedProjects에서도 제거
|
|
@@ -272,6 +343,9 @@ export async function startWebServer(port = 3847) {
|
|
|
272
343
|
const { projectPath } = JSON.parse(body);
|
|
273
344
|
if (typeof projectPath === 'string' && projectPath) {
|
|
274
345
|
pinnedProjects.add(projectPath);
|
|
346
|
+
// R6: an explicit pin is a deliberate re-enable — clear the denylist so it isn't
|
|
347
|
+
// skipped again by setWebRunner on the next restart.
|
|
348
|
+
removedConfigPaths.delete(projectPath);
|
|
275
349
|
saveReposConfig();
|
|
276
350
|
// Seed path cache so Linear project name matches immediately
|
|
277
351
|
const name = projectPath.split('/').pop();
|
|
@@ -309,10 +383,13 @@ export async function startWebServer(port = 3847) {
|
|
|
309
383
|
try {
|
|
310
384
|
const { projectPath, enabled } = JSON.parse(body);
|
|
311
385
|
if (typeof projectPath === 'string' && typeof enabled === 'boolean') {
|
|
312
|
-
if (enabled)
|
|
386
|
+
if (enabled) {
|
|
387
|
+
removedConfigPaths.delete(projectPath); // R6: explicit enable clears the denylist
|
|
313
388
|
runnerRef?.enableProject(projectPath);
|
|
314
|
-
|
|
389
|
+
}
|
|
390
|
+
else {
|
|
315
391
|
runnerRef?.disableProject(projectPath);
|
|
392
|
+
}
|
|
316
393
|
saveReposConfig();
|
|
317
394
|
broadcastEvent({ type: 'project:toggled', data: { projectPath, enabled } });
|
|
318
395
|
}
|
|
@@ -358,13 +435,15 @@ export async function startWebServer(port = 3847) {
|
|
|
358
435
|
const body = await readBody(req);
|
|
359
436
|
try {
|
|
360
437
|
const { provider } = JSON.parse(body);
|
|
361
|
-
|
|
438
|
+
const VALID_PROVIDERS = ['codex', 'gpt', 'local', 'lmstudio', 'openrouter'];
|
|
439
|
+
if (!VALID_PROVIDERS.includes(provider)) {
|
|
362
440
|
res.writeHead(400, { 'Content-Type': 'application/json' });
|
|
363
|
-
res.end(JSON.stringify({ error:
|
|
441
|
+
res.end(JSON.stringify({ error: `Invalid provider. Valid: ${VALID_PROVIDERS.join(', ')}` }));
|
|
364
442
|
return;
|
|
365
443
|
}
|
|
366
|
-
|
|
367
|
-
|
|
444
|
+
const validProvider = provider;
|
|
445
|
+
setDefaultAdapter(validProvider);
|
|
446
|
+
runnerRef?.switchProvider(validProvider);
|
|
368
447
|
broadcastEvent({
|
|
369
448
|
type: 'log',
|
|
370
449
|
data: { taskId: 'system', stage: 'provider', line: `Provider switched to ${provider}` },
|
|
@@ -528,7 +607,7 @@ export async function startWebServer(port = 3847) {
|
|
|
528
607
|
const memoryContext = memories.length > 0
|
|
529
608
|
? '## Relevant Past Discussions\n' + memories.map(m => `- ${m.content.replace(/^Q: |^A: /g, '')}`).join('\n')
|
|
530
609
|
: '';
|
|
531
|
-
const provider = runnerRef?.getAdapterSummary().defaultAdapter ?? '
|
|
610
|
+
const provider = runnerRef?.getAdapterSummary().defaultAdapter ?? 'codex';
|
|
532
611
|
const model = runnerRef?.getAdapterSummary().worker?.model ?? getDefaultChatModel(provider);
|
|
533
612
|
const contextPrompt = [
|
|
534
613
|
'You are OpenSwarm, an autonomous code development supervisor.',
|
|
@@ -838,6 +917,50 @@ export async function startWebServer(port = 3847) {
|
|
|
838
917
|
saveReposConfig();
|
|
839
918
|
res.writeHead(200, { 'Content-Type': 'application/json' });
|
|
840
919
|
res.end(JSON.stringify({ ok: true }));
|
|
920
|
+
// ---- Filesystem browse (folder picker) ----
|
|
921
|
+
// GET /api/fs/list?path=<absolute or ~/...>
|
|
922
|
+
// Returns: { path, parent, entries: [{name, isDir}] } — dotfiles excluded, dirs first.
|
|
923
|
+
}
|
|
924
|
+
else if (url.startsWith('/api/fs/list') && req.method === 'GET') {
|
|
925
|
+
try {
|
|
926
|
+
const qs = url.split('?')[1] ?? '';
|
|
927
|
+
const params = new URLSearchParams(qs);
|
|
928
|
+
const requested = params.get('path')?.trim();
|
|
929
|
+
const startPath = requested && requested.length > 0
|
|
930
|
+
? requested
|
|
931
|
+
: homedir();
|
|
932
|
+
const expanded = startPath.startsWith('~')
|
|
933
|
+
? join(homedir(), startPath.slice(1))
|
|
934
|
+
: startPath;
|
|
935
|
+
const absolute = resolvePath(expanded);
|
|
936
|
+
const st = await stat(absolute);
|
|
937
|
+
if (!st.isDirectory()) {
|
|
938
|
+
res.writeHead(400, { 'Content-Type': 'application/json' });
|
|
939
|
+
res.end(JSON.stringify({ error: 'Not a directory', path: absolute }));
|
|
940
|
+
return;
|
|
941
|
+
}
|
|
942
|
+
const raw = await readdir(absolute, { withFileTypes: true });
|
|
943
|
+
const entries = raw
|
|
944
|
+
.filter((d) => !d.name.startsWith('.'))
|
|
945
|
+
.map((d) => ({ name: d.name, isDir: d.isDirectory() }))
|
|
946
|
+
.sort((a, b) => {
|
|
947
|
+
if (a.isDir !== b.isDir)
|
|
948
|
+
return a.isDir ? -1 : 1;
|
|
949
|
+
return a.name.localeCompare(b.name);
|
|
950
|
+
});
|
|
951
|
+
const parent = dirname(absolute);
|
|
952
|
+
res.writeHead(200, { 'Content-Type': 'application/json' });
|
|
953
|
+
res.end(JSON.stringify({
|
|
954
|
+
path: absolute,
|
|
955
|
+
parent: parent === absolute ? null : parent,
|
|
956
|
+
name: basename(absolute) || absolute,
|
|
957
|
+
entries,
|
|
958
|
+
}));
|
|
959
|
+
}
|
|
960
|
+
catch (e) {
|
|
961
|
+
res.writeHead(500, { 'Content-Type': 'application/json' });
|
|
962
|
+
res.end(JSON.stringify({ error: safeErrorMessage(e) }));
|
|
963
|
+
}
|
|
841
964
|
// ---- Claude Code Quota ----
|
|
842
965
|
}
|
|
843
966
|
else if (url === '/api/quota' && req.method === 'GET') {
|
|
@@ -861,75 +984,77 @@ export async function startWebServer(port = 3847) {
|
|
|
861
984
|
res.end(JSON.stringify({ error: 'Missing prompt' }));
|
|
862
985
|
return;
|
|
863
986
|
}
|
|
864
|
-
const taskId =
|
|
865
|
-
const resolvedPath = projectPath ?? process.cwd();
|
|
866
|
-
const entry = {
|
|
867
|
-
taskId,
|
|
868
|
-
status: 'queued',
|
|
869
|
-
createdAt: Date.now(),
|
|
870
|
-
};
|
|
871
|
-
execTasks.set(taskId, entry);
|
|
987
|
+
const taskId = startExecTask(prompt, { projectPath, pipeline, workerOnly, model });
|
|
872
988
|
res.writeHead(202, { 'Content-Type': 'application/json' });
|
|
873
989
|
res.end(JSON.stringify({ taskId, status: 'queued' }));
|
|
874
|
-
// Run pipeline asynchronously
|
|
875
|
-
(async () => {
|
|
876
|
-
try {
|
|
877
|
-
initLocale('en');
|
|
878
|
-
entry.status = 'running';
|
|
879
|
-
// Determine stages
|
|
880
|
-
let stages;
|
|
881
|
-
if (workerOnly) {
|
|
882
|
-
stages = ['worker'];
|
|
883
|
-
}
|
|
884
|
-
else if (pipeline) {
|
|
885
|
-
stages = ['worker', 'reviewer', 'tester', 'documenter'];
|
|
886
|
-
}
|
|
887
|
-
else {
|
|
888
|
-
stages = ['worker', 'reviewer'];
|
|
889
|
-
}
|
|
890
|
-
// Build role config
|
|
891
|
-
const roles = {};
|
|
892
|
-
if (model) {
|
|
893
|
-
roles.worker = { enabled: true, model, timeoutMs: 0 };
|
|
894
|
-
}
|
|
895
|
-
const task = {
|
|
896
|
-
id: taskId,
|
|
897
|
-
source: 'local',
|
|
898
|
-
title: prompt,
|
|
899
|
-
description: prompt,
|
|
900
|
-
priority: 3,
|
|
901
|
-
projectPath: resolvedPath,
|
|
902
|
-
createdAt: Date.now(),
|
|
903
|
-
};
|
|
904
|
-
const pipelineInstance = new PairPipeline({
|
|
905
|
-
stages,
|
|
906
|
-
maxIterations: 3,
|
|
907
|
-
roles: Object.keys(roles).length > 0 ? roles : undefined,
|
|
908
|
-
});
|
|
909
|
-
pipelineInstance.on('stage:start', ({ stage }) => {
|
|
910
|
-
entry.currentStage = stage;
|
|
911
|
-
});
|
|
912
|
-
const result = await pipelineInstance.run(task, resolvedPath);
|
|
913
|
-
entry.status = 'completed';
|
|
914
|
-
entry.result = {
|
|
915
|
-
success: result.success,
|
|
916
|
-
summary: result.workerResult?.summary,
|
|
917
|
-
finalStatus: result.finalStatus,
|
|
918
|
-
};
|
|
919
|
-
}
|
|
920
|
-
catch (err) {
|
|
921
|
-
entry.status = 'failed';
|
|
922
|
-
entry.error = err instanceof Error ? err.message : String(err);
|
|
923
|
-
}
|
|
924
|
-
finally {
|
|
925
|
-
cleanupExecTask(taskId);
|
|
926
|
-
}
|
|
927
|
-
})();
|
|
928
990
|
}
|
|
929
991
|
catch {
|
|
930
992
|
res.writeHead(400, { 'Content-Type': 'application/json' });
|
|
931
993
|
res.end(JSON.stringify({ error: 'Invalid JSON' }));
|
|
932
994
|
}
|
|
995
|
+
// ---- Plan dispatch: TUI /plan cockpit → daemon loop ----
|
|
996
|
+
}
|
|
997
|
+
else if (url === '/api/plan/dispatch' && req.method === 'POST') {
|
|
998
|
+
const body = await readBody(req);
|
|
999
|
+
try {
|
|
1000
|
+
const { goal, projectPath, subTasks } = JSON.parse(body);
|
|
1001
|
+
if (!goal?.trim()) {
|
|
1002
|
+
res.writeHead(400, { 'Content-Type': 'application/json' });
|
|
1003
|
+
res.end(JSON.stringify({ error: 'Missing goal' }));
|
|
1004
|
+
return;
|
|
1005
|
+
}
|
|
1006
|
+
const resolvedPath = projectPath ?? process.cwd();
|
|
1007
|
+
const tasks = Array.isArray(subTasks) ? subTasks : [];
|
|
1008
|
+
const triggerHeartbeat = () => {
|
|
1009
|
+
runnerRef?.heartbeat().catch((e) => console.error('[Web] plan heartbeat error:', e));
|
|
1010
|
+
};
|
|
1011
|
+
// Path A — a task source is registered (Linear OR local SQLite): create a
|
|
1012
|
+
// parent issue + dependency-wired sub-issues (reusing the autonomous
|
|
1013
|
+
// engine, which routes through the same source), then heartbeat.
|
|
1014
|
+
const source = getTaskSource();
|
|
1015
|
+
if (source) {
|
|
1016
|
+
const parent = await source.createTask(goal, `Planned via the \`/plan\` cockpit.\n\n${tasks.length} sub-task(s) dispatched.`);
|
|
1017
|
+
if ('error' in parent) {
|
|
1018
|
+
res.writeHead(502, { 'Content-Type': 'application/json' });
|
|
1019
|
+
res.end(JSON.stringify({ error: `Task source: ${parent.error}` }));
|
|
1020
|
+
return;
|
|
1021
|
+
}
|
|
1022
|
+
if (tasks.length === 0) {
|
|
1023
|
+
// Planner saw no decomposition — run the goal itself as one task.
|
|
1024
|
+
await source.updateState(parent.id, 'Todo').catch(() => { });
|
|
1025
|
+
triggerHeartbeat();
|
|
1026
|
+
res.writeHead(200, { 'Content-Type': 'application/json' });
|
|
1027
|
+
res.end(JSON.stringify({
|
|
1028
|
+
mode: source.kind,
|
|
1029
|
+
parentIssue: { id: parent.id, identifier: parent.identifier },
|
|
1030
|
+
subIssues: [],
|
|
1031
|
+
}));
|
|
1032
|
+
return;
|
|
1033
|
+
}
|
|
1034
|
+
const totalMinutes = tasks.reduce((sum, t) => sum + (t.estimatedMinutes || 0), 0);
|
|
1035
|
+
await createSubIssuesWithDependencies(parent.id, { title: goal }, tasks, totalMinutes, { reportToDiscord: () => { }, scheduleNextHeartbeat: triggerHeartbeat }, parent.id, 20);
|
|
1036
|
+
res.writeHead(200, { 'Content-Type': 'application/json' });
|
|
1037
|
+
res.end(JSON.stringify({
|
|
1038
|
+
mode: source.kind,
|
|
1039
|
+
parentIssue: { id: parent.id, identifier: parent.identifier },
|
|
1040
|
+
}));
|
|
1041
|
+
return;
|
|
1042
|
+
}
|
|
1043
|
+
// Path B (fallback) — no Linear: run each sub-task via the exec pipeline.
|
|
1044
|
+
const items = tasks.length > 0
|
|
1045
|
+
? tasks
|
|
1046
|
+
: [{ title: goal, description: goal, estimatedMinutes: 0, priority: 3 }];
|
|
1047
|
+
const taskIds = items.map((st) => startExecTask(`${st.title}\n\n${st.description ?? ''}`.trim(), {
|
|
1048
|
+
projectPath: resolvedPath,
|
|
1049
|
+
pipeline: true,
|
|
1050
|
+
}));
|
|
1051
|
+
res.writeHead(202, { 'Content-Type': 'application/json' });
|
|
1052
|
+
res.end(JSON.stringify({ mode: 'exec', taskIds }));
|
|
1053
|
+
}
|
|
1054
|
+
catch (err) {
|
|
1055
|
+
res.writeHead(400, { 'Content-Type': 'application/json' });
|
|
1056
|
+
res.end(JSON.stringify({ error: err instanceof Error ? err.message : 'Invalid JSON' }));
|
|
1057
|
+
}
|
|
933
1058
|
// ---- Exec: task status ----
|
|
934
1059
|
}
|
|
935
1060
|
else if (url.startsWith('/api/exec/') && req.method === 'GET') {
|