macro-agent 0.1.0 → 0.1.1
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/.claude/settings.local.json +3 -1
- package/.sudocode/specs.jsonl +4 -0
- package/CLAUDE.md +16 -14
- package/README.md +11 -29
- package/dist/acp/macro-agent.d.ts +15 -0
- package/dist/acp/macro-agent.d.ts.map +1 -1
- package/dist/acp/macro-agent.js +131 -35
- package/dist/acp/macro-agent.js.map +1 -1
- package/dist/acp/types.d.ts +32 -1
- package/dist/acp/types.d.ts.map +1 -1
- package/dist/acp/types.js.map +1 -1
- package/dist/agent/agent-manager.d.ts +65 -1
- package/dist/agent/agent-manager.d.ts.map +1 -1
- package/dist/agent/agent-manager.js +464 -183
- package/dist/agent/agent-manager.js.map +1 -1
- package/dist/agent/types.d.ts +1 -1
- package/dist/agent/types.d.ts.map +1 -1
- package/dist/api/server.d.ts +3 -0
- package/dist/api/server.d.ts.map +1 -1
- package/dist/api/server.js +37 -6
- package/dist/api/server.js.map +1 -1
- package/dist/auth/index.d.ts +2 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +2 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/token.d.ts +41 -0
- package/dist/auth/token.d.ts.map +1 -0
- package/dist/auth/token.js +73 -0
- package/dist/auth/token.js.map +1 -0
- package/dist/cli/acp.d.ts +2 -23
- package/dist/cli/acp.d.ts.map +1 -1
- package/dist/cli/acp.js +127 -61
- package/dist/cli/acp.js.map +1 -1
- package/dist/cli/index.js +147 -15
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/mcp.d.ts +6 -0
- package/dist/cli/mcp.d.ts.map +1 -1
- package/dist/cli/mcp.js +268 -181
- package/dist/cli/mcp.js.map +1 -1
- package/dist/cli/parse-args.d.ts +20 -0
- package/dist/cli/parse-args.d.ts.map +1 -0
- package/dist/cli/parse-args.js +43 -0
- package/dist/cli/parse-args.js.map +1 -0
- package/dist/cli/stable-instance-id.d.ts +8 -0
- package/dist/cli/stable-instance-id.d.ts.map +1 -0
- package/dist/cli/stable-instance-id.js +14 -0
- package/dist/cli/stable-instance-id.js.map +1 -0
- package/dist/config/project-config.d.ts +74 -7
- package/dist/config/project-config.d.ts.map +1 -1
- package/dist/config/project-config.js +123 -20
- package/dist/config/project-config.js.map +1 -1
- package/dist/map/adapter/acp-over-map.d.ts +17 -0
- package/dist/map/adapter/acp-over-map.d.ts.map +1 -1
- package/dist/map/adapter/acp-over-map.js +384 -23
- package/dist/map/adapter/acp-over-map.js.map +1 -1
- package/dist/map/adapter/connection-manager.d.ts.map +1 -1
- package/dist/map/adapter/connection-manager.js +3 -0
- package/dist/map/adapter/connection-manager.js.map +1 -1
- package/dist/map/adapter/event-log.d.ts +87 -0
- package/dist/map/adapter/event-log.d.ts.map +1 -0
- package/dist/map/adapter/event-log.js +122 -0
- package/dist/map/adapter/event-log.js.map +1 -0
- package/dist/map/adapter/event-translator.js +6 -6
- package/dist/map/adapter/event-translator.js.map +1 -1
- package/dist/map/adapter/extensions/agent-lifecycle.d.ts +82 -0
- package/dist/map/adapter/extensions/agent-lifecycle.d.ts.map +1 -0
- package/dist/map/adapter/extensions/agent-lifecycle.js +164 -0
- package/dist/map/adapter/extensions/agent-lifecycle.js.map +1 -0
- package/dist/map/adapter/extensions/index.d.ts +10 -1
- package/dist/map/adapter/extensions/index.d.ts.map +1 -1
- package/dist/map/adapter/extensions/index.js +34 -0
- package/dist/map/adapter/extensions/index.js.map +1 -1
- package/dist/map/adapter/extensions/mcp-bridge.d.ts +57 -0
- package/dist/map/adapter/extensions/mcp-bridge.d.ts.map +1 -0
- package/dist/map/adapter/extensions/mcp-bridge.js +745 -0
- package/dist/map/adapter/extensions/mcp-bridge.js.map +1 -0
- package/dist/map/adapter/extensions/rename.d.ts +29 -0
- package/dist/map/adapter/extensions/rename.d.ts.map +1 -0
- package/dist/map/adapter/extensions/rename.js +49 -0
- package/dist/map/adapter/extensions/rename.js.map +1 -0
- package/dist/map/adapter/extensions/task.d.ts.map +1 -1
- package/dist/map/adapter/extensions/task.js +10 -0
- package/dist/map/adapter/extensions/task.js.map +1 -1
- package/dist/map/adapter/extensions/update-metadata.d.ts +29 -0
- package/dist/map/adapter/extensions/update-metadata.d.ts.map +1 -0
- package/dist/map/adapter/extensions/update-metadata.js +67 -0
- package/dist/map/adapter/extensions/update-metadata.js.map +1 -0
- package/dist/map/adapter/index.d.ts +2 -1
- package/dist/map/adapter/index.d.ts.map +1 -1
- package/dist/map/adapter/index.js +8 -2
- package/dist/map/adapter/index.js.map +1 -1
- package/dist/map/adapter/interface.d.ts +2 -0
- package/dist/map/adapter/interface.d.ts.map +1 -1
- package/dist/map/adapter/map-adapter.d.ts +3 -0
- package/dist/map/adapter/map-adapter.d.ts.map +1 -1
- package/dist/map/adapter/map-adapter.js +258 -35
- package/dist/map/adapter/map-adapter.js.map +1 -1
- package/dist/map/adapter/subscription-manager.d.ts.map +1 -1
- package/dist/map/adapter/subscription-manager.js +5 -1
- package/dist/map/adapter/subscription-manager.js.map +1 -1
- package/dist/map/adapter/types.d.ts +2 -0
- package/dist/map/adapter/types.d.ts.map +1 -1
- package/dist/mcp/map-client.d.ts +39 -0
- package/dist/mcp/map-client.d.ts.map +1 -0
- package/dist/mcp/map-client.js +129 -0
- package/dist/mcp/map-client.js.map +1 -0
- package/dist/mcp/mcp-server.d.ts +14 -0
- package/dist/mcp/mcp-server.d.ts.map +1 -1
- package/dist/mcp/mcp-server.js +113 -85
- package/dist/mcp/mcp-server.js.map +1 -1
- package/dist/mcp/types.d.ts +9 -1
- package/dist/mcp/types.d.ts.map +1 -1
- package/dist/mcp/types.js.map +1 -1
- package/dist/metrics/metrics.js +1 -1
- package/dist/metrics/metrics.js.map +1 -1
- package/dist/roles/capabilities.d.ts +3 -1
- package/dist/roles/capabilities.d.ts.map +1 -1
- package/dist/roles/capabilities.js +17 -7
- package/dist/roles/capabilities.js.map +1 -1
- package/dist/roles/config-loader.d.ts +6 -6
- package/dist/roles/config-loader.d.ts.map +1 -1
- package/dist/roles/config-loader.js +6 -6
- package/dist/roles/config-loader.js.map +1 -1
- package/dist/roles/registry.d.ts +2 -2
- package/dist/roles/registry.js +2 -2
- package/dist/server/combined-server.d.ts +20 -0
- package/dist/server/combined-server.d.ts.map +1 -1
- package/dist/server/combined-server.js +107 -8
- package/dist/server/combined-server.js.map +1 -1
- package/dist/store/event-store.d.ts +2 -1
- package/dist/store/event-store.d.ts.map +1 -1
- package/dist/store/event-store.js +69 -20
- package/dist/store/event-store.js.map +1 -1
- package/dist/store/types/agents.d.ts +18 -0
- package/dist/store/types/agents.d.ts.map +1 -1
- package/dist/store/types/events.d.ts +1 -1
- package/dist/store/types/events.d.ts.map +1 -1
- package/dist/task/backend/index.d.ts +47 -29
- package/dist/task/backend/index.d.ts.map +1 -1
- package/dist/task/backend/index.js +109 -71
- package/dist/task/backend/index.js.map +1 -1
- package/dist/task/backend/memory.d.ts +1 -0
- package/dist/task/backend/memory.d.ts.map +1 -1
- package/dist/task/backend/memory.js +3 -0
- package/dist/task/backend/memory.js.map +1 -1
- package/dist/task/backend/opentasks/backend.d.ts +140 -0
- package/dist/task/backend/opentasks/backend.d.ts.map +1 -0
- package/dist/task/backend/opentasks/backend.js +1023 -0
- package/dist/task/backend/opentasks/backend.js.map +1 -0
- package/dist/task/backend/opentasks/client.d.ts +337 -0
- package/dist/task/backend/opentasks/client.d.ts.map +1 -0
- package/dist/task/backend/opentasks/client.js +225 -0
- package/dist/task/backend/opentasks/client.js.map +1 -0
- package/dist/task/backend/opentasks/daemon-manager.d.ts +89 -0
- package/dist/task/backend/opentasks/daemon-manager.d.ts.map +1 -0
- package/dist/task/backend/opentasks/daemon-manager.js +195 -0
- package/dist/task/backend/opentasks/daemon-manager.js.map +1 -0
- package/dist/task/backend/opentasks/index.d.ts +21 -0
- package/dist/task/backend/opentasks/index.d.ts.map +1 -0
- package/dist/task/backend/opentasks/index.js +21 -0
- package/dist/task/backend/opentasks/index.js.map +1 -0
- package/dist/task/backend/opentasks/mapping.d.ts +48 -0
- package/dist/task/backend/opentasks/mapping.d.ts.map +1 -0
- package/dist/task/backend/opentasks/mapping.js +77 -0
- package/dist/task/backend/opentasks/mapping.js.map +1 -0
- package/dist/task/backend/types.d.ts +33 -53
- package/dist/task/backend/types.d.ts.map +1 -1
- package/dist/task/backend/types.js +7 -11
- package/dist/task/backend/types.js.map +1 -1
- package/dist/task/backend/unified-tool-provider.d.ts +57 -0
- package/dist/task/backend/unified-tool-provider.d.ts.map +1 -0
- package/dist/task/backend/unified-tool-provider.js +623 -0
- package/dist/task/backend/unified-tool-provider.js.map +1 -0
- package/dist/teams/team-loader.d.ts +2 -2
- package/dist/teams/team-loader.js +3 -3
- package/dist/teams/team-loader.js.map +1 -1
- package/dist/teams/team-runtime.d.ts.map +1 -1
- package/dist/teams/team-runtime.js +2 -0
- package/dist/teams/team-runtime.js.map +1 -1
- package/docs/architecture.md +7 -6
- package/docs/configuration.md +26 -62
- package/docs/implementation-details.md +5 -5
- package/docs/implementation-summary.md +17 -17
- package/docs/plan-self-driving-support.md +4 -4
- package/docs/spec-self-driving-support.md +10 -10
- package/docs/team-templates.md +2 -2
- package/docs/teams.md +3 -3
- package/docs/troubleshooting.md +10 -11
- package/package.json +6 -4
- package/src/__tests__/e2e/agent-spawn-visibility.e2e.test.ts +761 -0
- package/src/__tests__/e2e/full-agent-conflict-resolution.e2e.test.ts +2 -2
- package/src/__tests__/e2e/mcp-thin-client-bridge.e2e.test.ts +304 -0
- package/src/__tests__/e2e/mcp-tools-available.e2e.test.ts +324 -0
- package/src/__tests__/e2e/multi-agent.e2e.test.ts +5 -5
- package/src/__tests__/e2e/spawn-session-streaming.e2e.test.ts +563 -0
- package/src/acp/__tests__/integration.test.ts +56 -31
- package/src/acp/__tests__/macro-agent.test.ts +16 -7
- package/src/acp/macro-agent.ts +170 -36
- package/src/acp/types.ts +46 -1
- package/src/agent/__tests__/agent-manager.test.ts +228 -2
- package/src/agent/agent-manager.ts +714 -261
- package/src/agent/types.ts +3 -1
- package/src/api/server.ts +41 -7
- package/src/auth/__tests__/token.test.ts +100 -0
- package/src/auth/index.ts +1 -0
- package/src/auth/token.ts +82 -0
- package/src/cli/__tests__/acp.test.ts +1 -1
- package/src/cli/__tests__/stable-instance-id.test.ts +1 -1
- package/src/cli/acp.ts +130 -72
- package/src/cli/index.ts +120 -14
- package/src/cli/mcp.ts +311 -207
- package/src/cli/parse-args.ts +54 -0
- package/src/cli/stable-instance-id.ts +14 -0
- package/src/config/project-config.ts +190 -27
- package/src/lifecycle/__tests__/cascade-termination.test.ts +1 -1
- package/src/map/adapter/__tests__/acp-over-map-cancel.test.ts +22 -4
- package/src/map/adapter/__tests__/acp-over-map-getmodels.test.ts +355 -0
- package/src/map/adapter/__tests__/acp-over-map-history.test.ts +263 -0
- package/src/map/adapter/__tests__/acp-over-map-persistence.e2e.test.ts +1 -1
- package/src/map/adapter/__tests__/event-broadcast.test.ts +420 -0
- package/src/map/adapter/__tests__/event-log.test.ts +527 -0
- package/src/map/adapter/__tests__/event-translator.test.ts +3 -3
- package/src/map/adapter/__tests__/extensions.test.ts +408 -0
- package/src/map/adapter/__tests__/map-adapter.test.ts +99 -0
- package/src/map/adapter/__tests__/mcp-bridge.test.ts +1187 -0
- package/src/map/adapter/__tests__/multi-client-broadcast.test.ts +711 -0
- package/src/map/adapter/__tests__/websocket-integration.test.ts +218 -0
- package/src/map/adapter/acp-over-map.ts +678 -66
- package/src/map/adapter/connection-manager.ts +3 -0
- package/src/map/adapter/event-log.ts +208 -0
- package/src/map/adapter/event-translator.ts +6 -6
- package/src/map/adapter/extensions/agent-lifecycle.ts +267 -0
- package/src/map/adapter/extensions/index.ts +60 -0
- package/src/map/adapter/extensions/mcp-bridge.ts +995 -0
- package/src/map/adapter/extensions/task.ts +11 -0
- package/src/map/adapter/extensions/update-metadata.ts +126 -0
- package/src/map/adapter/index.ts +28 -0
- package/src/map/adapter/interface.ts +2 -0
- package/src/map/adapter/map-adapter.ts +312 -47
- package/src/map/adapter/subscription-manager.ts +5 -1
- package/src/map/adapter/types.ts +2 -0
- package/src/mcp/__tests__/map-client.test.ts +386 -0
- package/src/mcp/__tests__/mcp-server-thin-client.test.ts +368 -0
- package/src/mcp/__tests__/mcp-server.test.ts +100 -1
- package/src/mcp/map-client.ts +177 -0
- package/src/mcp/mcp-server.ts +191 -100
- package/src/mcp/types.ts +6 -1
- package/src/metrics/metrics.ts +1 -1
- package/src/monitor/__tests__/stale-agent-flow.integration.test.ts +1 -1
- package/src/roles/__tests__/config-loader.test.ts +7 -7
- package/src/roles/capabilities.ts +17 -7
- package/src/roles/config-loader.ts +6 -6
- package/src/roles/registry.ts +2 -2
- package/src/server/__tests__/combined-server.test.ts +94 -21
- package/src/server/combined-server.ts +189 -33
- package/src/steering/__tests__/steering-integration.test.ts +1 -1
- package/src/store/__tests__/event-store.test.ts +196 -1
- package/src/store/__tests__/instance.test.ts +3 -3
- package/src/store/event-store.ts +80 -21
- package/src/store/types/agents.ts +15 -0
- package/src/store/types/events.ts +1 -1
- package/src/task/backend/__tests__/create-task-backend.test.ts +225 -0
- package/src/task/backend/__tests__/e2e/unified-tool-provider-opentasks.e2e.test.ts +524 -0
- package/src/task/backend/__tests__/unified-tool-provider.test.ts +579 -0
- package/src/task/backend/index.ts +156 -106
- package/src/task/backend/memory.ts +4 -0
- package/src/task/backend/opentasks/__tests__/backend.test.ts +968 -0
- package/src/task/backend/opentasks/__tests__/daemon-manager.test.ts +406 -0
- package/src/task/backend/opentasks/__tests__/mapping.test.ts +84 -0
- package/src/task/backend/opentasks/__tests__/opentasks-backend.e2e.test.ts +1338 -0
- package/src/task/backend/opentasks/backend.ts +1323 -0
- package/src/task/backend/opentasks/client.ts +652 -0
- package/src/task/backend/opentasks/daemon-manager.ts +253 -0
- package/src/task/backend/opentasks/index.ts +69 -0
- package/src/task/backend/opentasks/mapping.ts +94 -0
- package/src/task/backend/types.ts +42 -66
- package/src/task/backend/unified-tool-provider.ts +779 -0
- package/src/teams/__tests__/cross-subsystem.integration.test.ts +1 -1
- package/src/teams/team-loader.ts +3 -3
- package/src/teams/team-runtime.ts +2 -0
- package/test_fixtures/README.md +2 -3
- package/test_fixtures/fixtures/index.ts +0 -3
- package/test_fixtures/fixtures/projects/project-with-specs.ts +7 -149
- package/test_fixtures/fixtures/repos/index.ts +1 -3
- package/test_fixtures/fixtures/repos/temp-repo-factory.ts +0 -116
- package/test_fixtures/fixtures/repos/types.ts +0 -11
- package/test_fixtures/harness/__tests__/fixtures.test.ts +10 -102
- package/test_fixtures/harness/__tests__/temp-repo-and-simulator.test.ts +0 -33
- package/test_fixtures/harness/simulator/agent-simulator.ts +4 -4
- package/vitest.config.ts +1 -1
- package/vitest.e2e.config.ts +1 -1
- package/vitest.setup.ts +1 -30
- package/.macro-agent/teams/self-driving/prompts/grinder.md +0 -27
- package/.macro-agent/teams/self-driving/prompts/judge.md +0 -27
- package/.macro-agent/teams/self-driving/prompts/planner.md +0 -33
- package/.macro-agent/teams/self-driving/roles/grinder.yaml +0 -17
- package/.macro-agent/teams/self-driving/roles/judge.yaml +0 -24
- package/.macro-agent/teams/self-driving/roles/planner.yaml +0 -18
- package/.macro-agent/teams/self-driving/team.yaml +0 -103
- package/.macro-agent/teams/structured/prompts/developer.md +0 -26
- package/.macro-agent/teams/structured/prompts/lead.md +0 -25
- package/.macro-agent/teams/structured/prompts/reviewer.md +0 -24
- package/.macro-agent/teams/structured/roles/developer.yaml +0 -12
- package/.macro-agent/teams/structured/roles/lead.yaml +0 -11
- package/.macro-agent/teams/structured/roles/reviewer.yaml +0 -19
- package/.macro-agent/teams/structured/team.yaml +0 -89
- package/docs/sudocode-integration.md +0 -383
- package/src/task/backend/__tests__/backend-parity.test.ts +0 -451
- package/src/task/backend/__tests__/tool-provider-edge-cases.test.ts +0 -430
- package/src/task/backend/__tests__/tool-provider.test.ts +0 -983
- package/src/task/backend/sudocode/__tests__/backend-edge-cases.test.ts +0 -575
- package/src/task/backend/sudocode/__tests__/backend.test.ts +0 -1194
- package/src/task/backend/sudocode/__tests__/client-integration.test.ts +0 -418
- package/src/task/backend/sudocode/__tests__/client.test.ts +0 -345
- package/src/task/backend/sudocode/__tests__/e2e/backend.e2e.test.ts +0 -753
- package/src/task/backend/sudocode/__tests__/e2e/server-client.e2e.test.ts +0 -680
- package/src/task/backend/sudocode/__tests__/e2e-workflow.test.ts +0 -666
- package/src/task/backend/sudocode/__tests__/integration/standalone-client.integration.test.ts +0 -396
- package/src/task/backend/sudocode/__tests__/integration/sudocode-cli.integration.test.ts +0 -328
- package/src/task/backend/sudocode/__tests__/integration/test-utils.ts +0 -175
- package/src/task/backend/sudocode/__tests__/mapping-edge-cases.test.ts +0 -265
- package/src/task/backend/sudocode/__tests__/server-client.test.ts +0 -675
- package/src/task/backend/sudocode/__tests__/sync-policy-edge-cases.test.ts +0 -521
- package/src/task/backend/sudocode/__tests__/sync-policy.test.ts +0 -519
- package/src/task/backend/sudocode/__tests__/tools.test.ts +0 -471
- package/src/task/backend/sudocode/backend.ts +0 -1237
- package/src/task/backend/sudocode/client.ts +0 -515
- package/src/task/backend/sudocode/index.ts +0 -120
- package/src/task/backend/sudocode/mapping.ts +0 -93
- package/src/task/backend/sudocode/server-client.ts +0 -522
- package/src/task/backend/sudocode/standalone-client.ts +0 -623
- package/src/task/backend/sudocode/sync-policy.ts +0 -387
- package/src/task/backend/sudocode/tools.ts +0 -896
- package/src/task/backend/tool-provider.ts +0 -506
- package/test_fixtures/fixtures/sudocode/index.ts +0 -29
- package/test_fixtures/fixtures/sudocode/issues.ts +0 -185
- package/test_fixtures/fixtures/sudocode/specs.ts +0 -159
package/src/cli/index.ts
CHANGED
|
@@ -16,8 +16,9 @@ import { createAgentManager } from "../agent/agent-manager.js";
|
|
|
16
16
|
import { createTaskManager } from "../task/task-manager.js";
|
|
17
17
|
import { createMessageRouter } from "../router/message-router.js";
|
|
18
18
|
import { createAPIServer } from "../api/server.js";
|
|
19
|
-
import {
|
|
19
|
+
import { loadMergedConfig } from "../config/project-config.js";
|
|
20
20
|
import { loadTeam, TeamRuntime } from "../teams/index.js";
|
|
21
|
+
import { createTaskBackend, loadTaskConfigFromMerged } from "../task/backend/index.js";
|
|
21
22
|
import type { Agent, Task } from "../store/types/index.js";
|
|
22
23
|
|
|
23
24
|
// ─────────────────────────────────────────────────────────────────
|
|
@@ -127,15 +128,49 @@ program
|
|
|
127
128
|
console.log(chalk.blue("Starting multi-agent server..."));
|
|
128
129
|
|
|
129
130
|
try {
|
|
131
|
+
// Load merged config (global → project → env vars)
|
|
132
|
+
const mergedConfig = loadMergedConfig(options.cwd);
|
|
133
|
+
|
|
130
134
|
// Initialize services
|
|
131
135
|
const eventStore = await createEventStore({ inMemory: false });
|
|
132
136
|
const messageRouter = createMessageRouter(eventStore);
|
|
133
|
-
const
|
|
137
|
+
const serverUrl = `http://${options.host}:${options.port}`;
|
|
138
|
+
const agentManager = createAgentManager(eventStore, messageRouter, {
|
|
139
|
+
serverUrl,
|
|
140
|
+
taskBackend: mergedConfig.task?.backend,
|
|
141
|
+
openTasksSocketPath: mergedConfig.task?.opentasks?.socket_path,
|
|
142
|
+
});
|
|
134
143
|
const taskManager = createTaskManager(eventStore);
|
|
135
144
|
|
|
136
|
-
//
|
|
137
|
-
const
|
|
138
|
-
|
|
145
|
+
// Create task backend from merged config
|
|
146
|
+
const taskConfig = loadTaskConfigFromMerged(mergedConfig);
|
|
147
|
+
let taskBackendShutdown: (() => Promise<void>) | undefined;
|
|
148
|
+
let connectProject: ((projectPath: string) => Promise<void>) | undefined;
|
|
149
|
+
try {
|
|
150
|
+
const result = await createTaskBackend(taskConfig, eventStore);
|
|
151
|
+
taskBackendShutdown = result.shutdown;
|
|
152
|
+
connectProject = result.connectProject;
|
|
153
|
+
console.log(chalk.blue(`Task backend: ${taskConfig.backend.type}`));
|
|
154
|
+
|
|
155
|
+
// Propagate runtime socket path to child agents so they skip daemon discovery
|
|
156
|
+
if (result.socketPath) {
|
|
157
|
+
agentManager.setOpenTasksSocketPath(result.socketPath);
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
// Auto-connect the server's own project directory on startup
|
|
161
|
+
if (connectProject) {
|
|
162
|
+
connectProject(options.cwd ?? process.cwd()).catch(() => {});
|
|
163
|
+
}
|
|
164
|
+
} catch (err) {
|
|
165
|
+
// Fall back to in-memory backend if opentasks connection fails
|
|
166
|
+
console.log(chalk.yellow(`Task backend creation failed (${err}), falling back to memory`));
|
|
167
|
+
try {
|
|
168
|
+
await createTaskBackend({ backend: { type: "memory" } }, eventStore);
|
|
169
|
+
} catch { /* non-critical */ }
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
// Determine team name: CLI flag > merged config
|
|
173
|
+
const teamName = options.team ?? mergedConfig.team;
|
|
139
174
|
|
|
140
175
|
// Load and initialize team if specified
|
|
141
176
|
let teamRuntime: TeamRuntime | null = null;
|
|
@@ -159,10 +194,14 @@ program
|
|
|
159
194
|
);
|
|
160
195
|
}
|
|
161
196
|
|
|
197
|
+
// Resolve auth from merged config
|
|
198
|
+
const noAuth = mergedConfig.auth?.disabled ?? false;
|
|
199
|
+
const serverToken = noAuth ? undefined : (mergedConfig.auth?.secret ?? undefined);
|
|
200
|
+
|
|
162
201
|
// Create API server
|
|
163
202
|
const server = createAPIServer(
|
|
164
203
|
{ eventStore, agentManager, taskManager, messageRouter },
|
|
165
|
-
{ port: parseInt(options.port), host: options.host }
|
|
204
|
+
{ port: parseInt(options.port), host: options.host, serverToken }
|
|
166
205
|
);
|
|
167
206
|
|
|
168
207
|
// Start server
|
|
@@ -171,6 +210,11 @@ program
|
|
|
171
210
|
console.log(
|
|
172
211
|
chalk.green(`Server running at http://${options.host}:${options.port}`)
|
|
173
212
|
);
|
|
213
|
+
if (serverToken) {
|
|
214
|
+
console.log(chalk.gray(`Server token: ${serverToken.substring(0, 8)}...`));
|
|
215
|
+
} else {
|
|
216
|
+
console.log(chalk.yellow(`Auth: disabled (MACRO_NO_AUTH)`));
|
|
217
|
+
}
|
|
174
218
|
|
|
175
219
|
// Bootstrap team agents after server is running
|
|
176
220
|
if (teamRuntime) {
|
|
@@ -185,15 +229,39 @@ program
|
|
|
185
229
|
);
|
|
186
230
|
}
|
|
187
231
|
|
|
232
|
+
// Connect-on-spawn: auto-connect project .opentasks/ dirs when agents spawn
|
|
233
|
+
if (connectProject) {
|
|
234
|
+
agentManager.onLifecycleEvent((event) => {
|
|
235
|
+
if (event.type === "spawned" && event.agent.cwd && connectProject) {
|
|
236
|
+
connectProject(event.agent.cwd).catch(() => {});
|
|
237
|
+
}
|
|
238
|
+
});
|
|
239
|
+
}
|
|
240
|
+
|
|
188
241
|
console.log(chalk.gray("Press Ctrl+C to stop"));
|
|
189
242
|
|
|
190
|
-
// Handle shutdown
|
|
243
|
+
// Handle shutdown — best-effort, each step isolated
|
|
191
244
|
process.on("SIGINT", async () => {
|
|
192
245
|
console.log(chalk.yellow("\nShutting down..."));
|
|
193
|
-
if (teamRuntime)
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
246
|
+
if (teamRuntime) {
|
|
247
|
+
try { await teamRuntime.teardown(); } catch (err) {
|
|
248
|
+
console.error(`[cleanup] Team teardown failed: ${err}`);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
try { await server.stop(); } catch (err) {
|
|
252
|
+
console.error(`[cleanup] Server stop failed: ${err}`);
|
|
253
|
+
}
|
|
254
|
+
try { await agentManager.close(); } catch (err) {
|
|
255
|
+
console.error(`[cleanup] AgentManager close failed: ${err}`);
|
|
256
|
+
}
|
|
257
|
+
if (taskBackendShutdown) {
|
|
258
|
+
try { await taskBackendShutdown(); } catch (err) {
|
|
259
|
+
console.error(`[cleanup] Task backend shutdown failed: ${err}`);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
try { await eventStore.close(); } catch (err) {
|
|
263
|
+
console.error(`[cleanup] EventStore close failed: ${err}`);
|
|
264
|
+
}
|
|
197
265
|
process.exit(0);
|
|
198
266
|
});
|
|
199
267
|
} catch (error) {
|
|
@@ -237,6 +305,21 @@ program
|
|
|
237
305
|
output: process.stdout,
|
|
238
306
|
});
|
|
239
307
|
|
|
308
|
+
// Handle Ctrl+C and SIGTERM to clean up child processes
|
|
309
|
+
const cleanup = async () => {
|
|
310
|
+
console.log(chalk.yellow("\nShutting down..."));
|
|
311
|
+
try { await agentManager.close(); } catch (err) {
|
|
312
|
+
console.error(`[cleanup] AgentManager close failed: ${err}`);
|
|
313
|
+
}
|
|
314
|
+
try { await eventStore.close(); } catch (err) {
|
|
315
|
+
console.error(`[cleanup] EventStore close failed: ${err}`);
|
|
316
|
+
}
|
|
317
|
+
rl.close();
|
|
318
|
+
process.exit(0);
|
|
319
|
+
};
|
|
320
|
+
process.on("SIGINT", cleanup);
|
|
321
|
+
process.on("SIGTERM", cleanup);
|
|
322
|
+
|
|
240
323
|
const prompt = () => {
|
|
241
324
|
rl.question(chalk.cyan("You: "), async (input) => {
|
|
242
325
|
const trimmed = input.trim();
|
|
@@ -723,6 +806,20 @@ program
|
|
|
723
806
|
agentManager = createAgentManager(eventStore, messageRouter);
|
|
724
807
|
const taskManager = createTaskManager(eventStore);
|
|
725
808
|
|
|
809
|
+
// Create task backend from merged config
|
|
810
|
+
const acpMergedConfig = loadMergedConfig(defaultCwd);
|
|
811
|
+
const taskConfig = loadTaskConfigFromMerged(acpMergedConfig);
|
|
812
|
+
let acpTaskBackendShutdown: (() => Promise<void>) | undefined;
|
|
813
|
+
try {
|
|
814
|
+
const result = await createTaskBackend(taskConfig, eventStore);
|
|
815
|
+
acpTaskBackendShutdown = result.shutdown;
|
|
816
|
+
} catch {
|
|
817
|
+
// Fall back to memory if opentasks connection fails
|
|
818
|
+
try {
|
|
819
|
+
await createTaskBackend({ backend: { type: "memory" } }, eventStore);
|
|
820
|
+
} catch { /* non-critical */ }
|
|
821
|
+
}
|
|
822
|
+
|
|
726
823
|
// Create stdio streams for ACP communication
|
|
727
824
|
const input = Readable.toWeb(process.stdin) as ReadableStream<Uint8Array>;
|
|
728
825
|
const output = new WritableStream<Uint8Array>({
|
|
@@ -753,13 +850,22 @@ program
|
|
|
753
850
|
stream
|
|
754
851
|
);
|
|
755
852
|
|
|
756
|
-
// Handle graceful shutdown
|
|
853
|
+
// Handle graceful shutdown — best-effort, each step isolated
|
|
757
854
|
const cleanup = async () => {
|
|
758
855
|
if (agentManager) {
|
|
759
|
-
await agentManager.close();
|
|
856
|
+
try { await agentManager.close(); } catch (err) {
|
|
857
|
+
console.error(`[cleanup] AgentManager close failed: ${err}`);
|
|
858
|
+
}
|
|
859
|
+
}
|
|
860
|
+
if (acpTaskBackendShutdown) {
|
|
861
|
+
try { await acpTaskBackendShutdown(); } catch (err) {
|
|
862
|
+
console.error(`[cleanup] Task backend shutdown failed: ${err}`);
|
|
863
|
+
}
|
|
760
864
|
}
|
|
761
865
|
if (eventStore) {
|
|
762
|
-
await eventStore.close();
|
|
866
|
+
try { await eventStore.close(); } catch (err) {
|
|
867
|
+
console.error(`[cleanup] EventStore close failed: ${err}`);
|
|
868
|
+
}
|
|
763
869
|
}
|
|
764
870
|
process.exit(0);
|
|
765
871
|
};
|