opentasks 0.1.3 → 0.2.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/LICENSE +21 -0
- package/README.md +174 -49
- package/dist/cli.d.ts +20 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +451 -15
- package/dist/cli.js.map +1 -1
- package/dist/client/client.d.ts +54 -0
- package/dist/client/client.d.ts.map +1 -1
- package/dist/client/client.js +148 -4
- package/dist/client/client.js.map +1 -1
- package/dist/client/index.d.ts +1 -1
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +1 -1
- package/dist/client/index.js.map +1 -1
- package/dist/core/discover.d.ts.map +1 -1
- package/dist/core/discover.js +7 -2
- package/dist/core/discover.js.map +1 -1
- package/dist/core/hash.d.ts.map +1 -1
- package/dist/core/hash.js +7 -0
- package/dist/core/hash.js.map +1 -1
- package/dist/core/id.d.ts +1 -1
- package/dist/core/id.d.ts.map +1 -1
- package/dist/core/id.js +2 -0
- package/dist/core/id.js.map +1 -1
- package/dist/core/worktree.js +4 -4
- package/dist/core/worktree.js.map +1 -1
- package/dist/daemon/events.d.ts +82 -0
- package/dist/daemon/events.d.ts.map +1 -0
- package/dist/daemon/events.js +71 -0
- package/dist/daemon/events.js.map +1 -0
- package/dist/daemon/flush.d.ts.map +1 -1
- package/dist/daemon/flush.js +12 -2
- package/dist/daemon/flush.js.map +1 -1
- package/dist/daemon/health-counters.d.ts +38 -0
- package/dist/daemon/health-counters.d.ts.map +1 -0
- package/dist/daemon/health-counters.js +42 -0
- package/dist/daemon/health-counters.js.map +1 -0
- package/dist/daemon/idempotency.d.ts +50 -0
- package/dist/daemon/idempotency.d.ts.map +1 -0
- package/dist/daemon/idempotency.js +104 -0
- package/dist/daemon/idempotency.js.map +1 -0
- package/dist/daemon/ipc.d.ts +32 -2
- package/dist/daemon/ipc.d.ts.map +1 -1
- package/dist/daemon/ipc.js +54 -3
- package/dist/daemon/ipc.js.map +1 -1
- package/dist/daemon/lifecycle.d.ts.map +1 -1
- package/dist/daemon/lifecycle.js +145 -9
- package/dist/daemon/lifecycle.js.map +1 -1
- package/dist/daemon/location-state.d.ts +60 -1
- package/dist/daemon/location-state.d.ts.map +1 -1
- package/dist/daemon/location-state.js +136 -31
- package/dist/daemon/location-state.js.map +1 -1
- package/dist/daemon/methods/context-files.d.ts.map +1 -1
- package/dist/daemon/methods/context-files.js +4 -3
- package/dist/daemon/methods/context-files.js.map +1 -1
- package/dist/daemon/methods/events.d.ts +22 -0
- package/dist/daemon/methods/events.d.ts.map +1 -0
- package/dist/daemon/methods/events.js +30 -0
- package/dist/daemon/methods/events.js.map +1 -0
- package/dist/daemon/methods/graph.d.ts +7 -0
- package/dist/daemon/methods/graph.d.ts.map +1 -1
- package/dist/daemon/methods/graph.js +24 -14
- package/dist/daemon/methods/graph.js.map +1 -1
- package/dist/daemon/methods/lifecycle.d.ts +16 -0
- package/dist/daemon/methods/lifecycle.d.ts.map +1 -1
- package/dist/daemon/methods/lifecycle.js +3 -1
- package/dist/daemon/methods/lifecycle.js.map +1 -1
- package/dist/daemon/methods/location.js.map +1 -1
- package/dist/daemon/methods/sync.d.ts +48 -2
- package/dist/daemon/methods/sync.d.ts.map +1 -1
- package/dist/daemon/methods/sync.js +106 -3
- package/dist/daemon/methods/sync.js.map +1 -1
- package/dist/daemon/methods/tools.d.ts.map +1 -1
- package/dist/daemon/methods/tools.js +42 -8
- package/dist/daemon/methods/tools.js.map +1 -1
- package/dist/daemon/methods/watch.d.ts +24 -0
- package/dist/daemon/methods/watch.d.ts.map +1 -1
- package/dist/daemon/methods/watch.js +178 -88
- package/dist/daemon/methods/watch.js.map +1 -1
- package/dist/graph/EdgeTypeRegistry.d.ts.map +1 -1
- package/dist/graph/EdgeTypeRegistry.js +32 -0
- package/dist/graph/EdgeTypeRegistry.js.map +1 -1
- package/dist/graph/FederatedGraph.d.ts.map +1 -1
- package/dist/graph/GraphologyAdapter.d.ts.map +1 -1
- package/dist/graph/GraphologyAdapter.js.map +1 -1
- package/dist/graph/HydratingFederatedGraph.d.ts.map +1 -1
- package/dist/graph/HydratingFederatedGraph.js +1 -1
- package/dist/graph/HydratingFederatedGraph.js.map +1 -1
- package/dist/graph/attempts.d.ts +50 -0
- package/dist/graph/attempts.d.ts.map +1 -0
- package/dist/graph/attempts.js +51 -0
- package/dist/graph/attempts.js.map +1 -0
- package/dist/graph/coordination.d.ts +4 -2
- package/dist/graph/coordination.d.ts.map +1 -1
- package/dist/graph/coordination.js +77 -85
- package/dist/graph/coordination.js.map +1 -1
- package/dist/graph/expansion.d.ts.map +1 -1
- package/dist/graph/expansion.js +1 -1
- package/dist/graph/expansion.js.map +1 -1
- package/dist/graph/git-graph-syncer.d.ts +24 -0
- package/dist/graph/git-graph-syncer.d.ts.map +1 -1
- package/dist/graph/git-graph-syncer.js +95 -28
- package/dist/graph/git-graph-syncer.js.map +1 -1
- package/dist/graph/provider-store.d.ts +12 -1
- package/dist/graph/provider-store.d.ts.map +1 -1
- package/dist/graph/provider-store.js +35 -8
- package/dist/graph/provider-store.js.map +1 -1
- package/dist/graph/query.d.ts.map +1 -1
- package/dist/graph/query.js +18 -2
- package/dist/graph/query.js.map +1 -1
- package/dist/graph/store.d.ts +18 -2
- package/dist/graph/store.d.ts.map +1 -1
- package/dist/graph/store.js +43 -0
- package/dist/graph/store.js.map +1 -1
- package/dist/graph/sync.js +1 -1
- package/dist/graph/sync.js.map +1 -1
- package/dist/graph/types.d.ts +9 -1
- package/dist/graph/types.d.ts.map +1 -1
- package/dist/graph/types.js.map +1 -1
- package/dist/graph/validation.d.ts.map +1 -1
- package/dist/graph/validation.js +20 -2
- package/dist/graph/validation.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/materialization/archiver.d.ts.map +1 -1
- package/dist/materialization/archiver.js.map +1 -1
- package/dist/materialization/snapshot.d.ts.map +1 -1
- package/dist/materialization/snapshot.js +1 -1
- package/dist/materialization/snapshot.js.map +1 -1
- package/dist/materialization/types.d.ts +7 -5
- package/dist/materialization/types.d.ts.map +1 -1
- package/dist/materialization/types.js.map +1 -1
- package/dist/mcp/server.d.ts +2 -1
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +308 -11
- package/dist/mcp/server.js.map +1 -1
- package/dist/providers/beads.d.ts.map +1 -1
- package/dist/providers/beads.js +2 -0
- package/dist/providers/beads.js.map +1 -1
- package/dist/providers/claude-tasks.d.ts.map +1 -1
- package/dist/providers/claude-tasks.js.map +1 -1
- package/dist/providers/global.js +1 -1
- package/dist/providers/global.js.map +1 -1
- package/dist/providers/location.d.ts.map +1 -1
- package/dist/providers/location.js.map +1 -1
- package/dist/providers/map-client-factory.d.ts.map +1 -1
- package/dist/providers/map-client-factory.js +1 -1
- package/dist/providers/map-client-factory.js.map +1 -1
- package/dist/providers/map-connector.js +1 -1
- package/dist/providers/map-connector.js.map +1 -1
- package/dist/providers/map-event-bridge.d.ts.map +1 -1
- package/dist/providers/map-event-bridge.js +1 -0
- package/dist/providers/map-event-bridge.js.map +1 -1
- package/dist/providers/map.d.ts.map +1 -1
- package/dist/providers/map.js +5 -2
- package/dist/providers/map.js.map +1 -1
- package/dist/providers/native.d.ts.map +1 -1
- package/dist/providers/native.js +21 -8
- package/dist/providers/native.js.map +1 -1
- package/dist/providers/registry.js +1 -1
- package/dist/providers/registry.js.map +1 -1
- package/dist/providers/sudocode.d.ts.map +1 -1
- package/dist/providers/sudocode.js +5 -11
- package/dist/providers/sudocode.js.map +1 -1
- package/dist/providers/traits/Reconcilable.d.ts.map +1 -1
- package/dist/providers/traits/TaskManageable.d.ts +15 -1
- package/dist/providers/traits/TaskManageable.d.ts.map +1 -1
- package/dist/providers/traits/TaskManageable.js +26 -0
- package/dist/providers/traits/TaskManageable.js.map +1 -1
- package/dist/providers/traits/Watchable.d.ts +6 -0
- package/dist/providers/traits/Watchable.d.ts.map +1 -1
- package/dist/providers/traits/Watchable.js.map +1 -1
- package/dist/providers/types.d.ts +1 -1
- package/dist/providers/types.d.ts.map +1 -1
- package/dist/schema/edges.d.ts +5 -1
- package/dist/schema/edges.d.ts.map +1 -1
- package/dist/schema/index.d.ts +2 -2
- package/dist/schema/index.d.ts.map +1 -1
- package/dist/schema/index.js +1 -1
- package/dist/schema/index.js.map +1 -1
- package/dist/schema/nodes.d.ts +55 -2
- package/dist/schema/nodes.d.ts.map +1 -1
- package/dist/schema/storage.d.ts +2 -0
- package/dist/schema/storage.d.ts.map +1 -1
- package/dist/schema/validation.d.ts +6 -2
- package/dist/schema/validation.d.ts.map +1 -1
- package/dist/schema/validation.js +18 -1
- package/dist/schema/validation.js.map +1 -1
- package/dist/sessionlog/agent/registry.js.map +1 -1
- package/dist/sessionlog/agent/session-types.d.ts.map +1 -1
- package/dist/sessionlog/agent/types.d.ts.map +1 -1
- package/dist/sessionlog/commands/clean.js +1 -1
- package/dist/sessionlog/commands/clean.js.map +1 -1
- package/dist/sessionlog/commands/disable.d.ts.map +1 -1
- package/dist/sessionlog/commands/disable.js.map +1 -1
- package/dist/sessionlog/commands/doctor.js +1 -1
- package/dist/sessionlog/commands/doctor.js.map +1 -1
- package/dist/sessionlog/commands/enable.js +1 -1
- package/dist/sessionlog/commands/enable.js.map +1 -1
- package/dist/sessionlog/commands/resume.js +1 -1
- package/dist/sessionlog/commands/resume.js.map +1 -1
- package/dist/sessionlog/commands/rewind.d.ts.map +1 -1
- package/dist/sessionlog/commands/rewind.js +1 -1
- package/dist/sessionlog/commands/rewind.js.map +1 -1
- package/dist/sessionlog/commands/status.d.ts.map +1 -1
- package/dist/sessionlog/commands/status.js.map +1 -1
- package/dist/sessionlog/hooks/lifecycle.d.ts.map +1 -1
- package/dist/sessionlog/hooks/lifecycle.js +3 -3
- package/dist/sessionlog/hooks/lifecycle.js.map +1 -1
- package/dist/sessionlog/security/redaction.js +1 -1
- package/dist/sessionlog/security/redaction.js.map +1 -1
- package/dist/sessionlog/store/checkpoint-store.d.ts.map +1 -1
- package/dist/sessionlog/store/checkpoint-store.js +2 -2
- package/dist/sessionlog/store/checkpoint-store.js.map +1 -1
- package/dist/sessionlog/store/native-store.d.ts.map +1 -1
- package/dist/sessionlog/store/native-store.js.map +1 -1
- package/dist/sessionlog/store/session-store.d.ts.map +1 -1
- package/dist/sessionlog/store/session-store.js +1 -1
- package/dist/sessionlog/store/session-store.js.map +1 -1
- package/dist/sessionlog/strategy/attribution.js +2 -2
- package/dist/sessionlog/strategy/attribution.js.map +1 -1
- package/dist/sessionlog/strategy/common.d.ts +1 -1
- package/dist/sessionlog/strategy/common.d.ts.map +1 -1
- package/dist/sessionlog/strategy/common.js +3 -3
- package/dist/sessionlog/strategy/common.js.map +1 -1
- package/dist/sessionlog/strategy/content-overlap.d.ts.map +1 -1
- package/dist/sessionlog/strategy/content-overlap.js +1 -1
- package/dist/sessionlog/strategy/content-overlap.js.map +1 -1
- package/dist/sessionlog/strategy/manual-commit.d.ts.map +1 -1
- package/dist/sessionlog/strategy/manual-commit.js +6 -16
- package/dist/sessionlog/strategy/manual-commit.js.map +1 -1
- package/dist/sessionlog/utils/preview-rewind.d.ts.map +1 -1
- package/dist/sessionlog/utils/preview-rewind.js +1 -1
- package/dist/sessionlog/utils/preview-rewind.js.map +1 -1
- package/dist/sessionlog/utils/trailers.d.ts.map +1 -1
- package/dist/sessionlog/utils/trailers.js +0 -1
- package/dist/sessionlog/utils/trailers.js.map +1 -1
- package/dist/storage/interface.d.ts +64 -0
- package/dist/storage/interface.d.ts.map +1 -1
- package/dist/storage/interface.js.map +1 -1
- package/dist/storage/jsonl.js +2 -2
- package/dist/storage/jsonl.js.map +1 -1
- package/dist/storage/sqlite-schema.d.ts +8 -2
- package/dist/storage/sqlite-schema.d.ts.map +1 -1
- package/dist/storage/sqlite-schema.js +10 -1
- package/dist/storage/sqlite-schema.js.map +1 -1
- package/dist/storage/sqlite.d.ts +16 -1
- package/dist/storage/sqlite.d.ts.map +1 -1
- package/dist/storage/sqlite.js +134 -2
- package/dist/storage/sqlite.js.map +1 -1
- package/dist/tools/link.js +1 -1
- package/dist/tools/link.js.map +1 -1
- package/dist/tools/query.d.ts.map +1 -1
- package/dist/tools/query.js +8 -29
- package/dist/tools/query.js.map +1 -1
- package/dist/tools/task.d.ts.map +1 -1
- package/dist/tools/task.js +115 -5
- package/dist/tools/task.js.map +1 -1
- package/dist/tools/types.d.ts +84 -3
- package/dist/tools/types.d.ts.map +1 -1
- package/dist/tools/types.js.map +1 -1
- package/dist/version.d.ts +14 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +44 -0
- package/dist/version.js.map +1 -0
- package/package.json +32 -7
- package/skills/opentasks/SKILL.md +226 -0
- package/skills/opentasks/dependency-management.md +119 -0
- package/skills/opentasks/feedback-and-review.md +100 -0
- package/skills/opentasks/linking-external-data.md +103 -0
- package/skills/opentasks/spec-to-implementation.md +171 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"idempotency.js","sourceRoot":"","sources":["../../src/daemon/idempotency.ts"],"names":[],"mappings":"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"}
|
package/dist/daemon/ipc.d.ts
CHANGED
|
@@ -31,9 +31,21 @@ export interface IPCError {
|
|
|
31
31
|
data?: unknown;
|
|
32
32
|
}
|
|
33
33
|
/**
|
|
34
|
-
*
|
|
34
|
+
* Per-connection context passed to method handlers. Lets a handler register a
|
|
35
|
+
* subscription filter bound to the requesting connection, so the server can do
|
|
36
|
+
* filtered per-subscriber broadcasts (see `broadcastToSubscribers`).
|
|
35
37
|
*/
|
|
36
|
-
export
|
|
38
|
+
export interface ConnectionContext {
|
|
39
|
+
/** Register/replace this connection's subscription filter. */
|
|
40
|
+
subscribe(filter: unknown): void;
|
|
41
|
+
/** Clear this connection's subscription. */
|
|
42
|
+
unsubscribe(): void;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Method handler function. The optional `ctx` carries per-connection state;
|
|
46
|
+
* handlers that don't need it simply ignore the second argument.
|
|
47
|
+
*/
|
|
48
|
+
export type MethodHandler<P = unknown, R = unknown> = (params: P, ctx: ConnectionContext) => Promise<R>;
|
|
37
49
|
/**
|
|
38
50
|
* Handler for server-push notifications (messages with id: null and a method field)
|
|
39
51
|
*/
|
|
@@ -50,6 +62,11 @@ export interface IPCServer {
|
|
|
50
62
|
handle<P = unknown, R = unknown>(method: string, handler: MethodHandler<P, R>): void;
|
|
51
63
|
/** Send a JSON-RPC notification to all connected clients */
|
|
52
64
|
broadcastNotification(method: string, params: unknown): void;
|
|
65
|
+
/**
|
|
66
|
+
* Send a notification only to subscriber connections whose registered filter
|
|
67
|
+
* satisfies `matches`. Connections without a subscription receive nothing.
|
|
68
|
+
*/
|
|
69
|
+
broadcastToSubscribers(method: string, params: unknown, matches: (filter: unknown) => boolean): void;
|
|
53
70
|
/** Get current connection count */
|
|
54
71
|
getConnectionCount(): number;
|
|
55
72
|
/** Socket path */
|
|
@@ -77,6 +94,19 @@ export declare const JSON_RPC_ERRORS: {
|
|
|
77
94
|
readonly message: "Internal error";
|
|
78
95
|
};
|
|
79
96
|
};
|
|
97
|
+
/**
|
|
98
|
+
* Usable byte length of a Unix-domain socket path on this platform. The kernel's
|
|
99
|
+
* `sockaddr_un.sun_path` is a fixed-size buffer and the path must be
|
|
100
|
+
* NUL-terminated, so the usable length is one byte less than the buffer:
|
|
101
|
+
* - macOS / *BSD: 104-byte buffer → 103 usable
|
|
102
|
+
* - Linux: 108-byte buffer → 107 usable
|
|
103
|
+
* - Windows: named pipes, not sun_path → no comparable limit
|
|
104
|
+
*
|
|
105
|
+
* A path over the limit is silently truncated by the kernel on bind(), which
|
|
106
|
+
* collides otherwise-distinct daemons onto one socket file and surfaces as a
|
|
107
|
+
* bogus EADDRINUSE. Deeply-nested checkouts hit this on macOS in particular.
|
|
108
|
+
*/
|
|
109
|
+
export declare function maxSocketPathBytes(platform?: NodeJS.Platform): number;
|
|
80
110
|
/**
|
|
81
111
|
* Create an IPC server
|
|
82
112
|
*
|
package/dist/daemon/ipc.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ipc.d.ts","sourceRoot":"","sources":["../../src/daemon/ipc.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAUH;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,KAAK,CAAC;IACf,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,KAAK,CAAC;IACf,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC3B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,QAAQ,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED
|
|
1
|
+
{"version":3,"file":"ipc.d.ts","sourceRoot":"","sources":["../../src/daemon/ipc.ts"],"names":[],"mappings":"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"}
|
package/dist/daemon/ipc.js
CHANGED
|
@@ -20,6 +20,25 @@ export const JSON_RPC_ERRORS = {
|
|
|
20
20
|
// ============================================================================
|
|
21
21
|
// Implementation
|
|
22
22
|
// ============================================================================
|
|
23
|
+
/**
|
|
24
|
+
* Usable byte length of a Unix-domain socket path on this platform. The kernel's
|
|
25
|
+
* `sockaddr_un.sun_path` is a fixed-size buffer and the path must be
|
|
26
|
+
* NUL-terminated, so the usable length is one byte less than the buffer:
|
|
27
|
+
* - macOS / *BSD: 104-byte buffer → 103 usable
|
|
28
|
+
* - Linux: 108-byte buffer → 107 usable
|
|
29
|
+
* - Windows: named pipes, not sun_path → no comparable limit
|
|
30
|
+
*
|
|
31
|
+
* A path over the limit is silently truncated by the kernel on bind(), which
|
|
32
|
+
* collides otherwise-distinct daemons onto one socket file and surfaces as a
|
|
33
|
+
* bogus EADDRINUSE. Deeply-nested checkouts hit this on macOS in particular.
|
|
34
|
+
*/
|
|
35
|
+
export function maxSocketPathBytes(platform = process.platform) {
|
|
36
|
+
if (platform === 'win32')
|
|
37
|
+
return Number.POSITIVE_INFINITY;
|
|
38
|
+
if (platform === 'linux')
|
|
39
|
+
return 107;
|
|
40
|
+
return 103;
|
|
41
|
+
}
|
|
23
42
|
/**
|
|
24
43
|
* Create an IPC server
|
|
25
44
|
*
|
|
@@ -28,6 +47,8 @@ export const JSON_RPC_ERRORS = {
|
|
|
28
47
|
export function createIPCServer(socketPath) {
|
|
29
48
|
const handlers = new Map();
|
|
30
49
|
const connections = new Set();
|
|
50
|
+
/** Per-connection subscription filters, for filtered broadcasts. */
|
|
51
|
+
const subscriptions = new Map();
|
|
31
52
|
let server = null;
|
|
32
53
|
/**
|
|
33
54
|
* Create error response
|
|
@@ -80,7 +101,7 @@ export function createIPCServer(socketPath) {
|
|
|
80
101
|
/**
|
|
81
102
|
* Handle a single request
|
|
82
103
|
*/
|
|
83
|
-
async function handleRequest(request) {
|
|
104
|
+
async function handleRequest(request, ctx) {
|
|
84
105
|
// Notifications (id is null) don't get responses
|
|
85
106
|
const isNotification = request.id === null;
|
|
86
107
|
const handler = handlers.get(request.method);
|
|
@@ -90,7 +111,7 @@ export function createIPCServer(socketPath) {
|
|
|
90
111
|
return errorResponse(request.id, JSON_RPC_ERRORS.METHOD_NOT_FOUND);
|
|
91
112
|
}
|
|
92
113
|
try {
|
|
93
|
-
const result = await handler(request.params);
|
|
114
|
+
const result = await handler(request.params, ctx);
|
|
94
115
|
if (isNotification)
|
|
95
116
|
return null;
|
|
96
117
|
return successResponse(request.id, result);
|
|
@@ -113,6 +134,11 @@ export function createIPCServer(socketPath) {
|
|
|
113
134
|
*/
|
|
114
135
|
function handleConnection(socket) {
|
|
115
136
|
connections.add(socket);
|
|
137
|
+
// Per-connection context — lets watch.subscribe bind a filter to this socket.
|
|
138
|
+
const ctx = {
|
|
139
|
+
subscribe: (filter) => subscriptions.set(socket, filter),
|
|
140
|
+
unsubscribe: () => subscriptions.delete(socket),
|
|
141
|
+
};
|
|
116
142
|
let buffer = '';
|
|
117
143
|
socket.on('data', async (data) => {
|
|
118
144
|
buffer += data.toString();
|
|
@@ -141,7 +167,7 @@ export function createIPCServer(socketPath) {
|
|
|
141
167
|
continue;
|
|
142
168
|
}
|
|
143
169
|
// Handle request
|
|
144
|
-
const response = await handleRequest(requestOrError);
|
|
170
|
+
const response = await handleRequest(requestOrError, ctx);
|
|
145
171
|
if (response) {
|
|
146
172
|
socket.write(JSON.stringify(response) + '\n');
|
|
147
173
|
}
|
|
@@ -149,9 +175,11 @@ export function createIPCServer(socketPath) {
|
|
|
149
175
|
});
|
|
150
176
|
socket.on('close', () => {
|
|
151
177
|
connections.delete(socket);
|
|
178
|
+
subscriptions.delete(socket);
|
|
152
179
|
});
|
|
153
180
|
socket.on('error', () => {
|
|
154
181
|
connections.delete(socket);
|
|
182
|
+
subscriptions.delete(socket);
|
|
155
183
|
});
|
|
156
184
|
}
|
|
157
185
|
return {
|
|
@@ -160,6 +188,16 @@ export function createIPCServer(socketPath) {
|
|
|
160
188
|
if (server) {
|
|
161
189
|
throw new DaemonError('IPC_ERROR', 'Server already started');
|
|
162
190
|
}
|
|
191
|
+
// Reject an unbindable socket path up front. Longer than the platform's
|
|
192
|
+
// sun_path buffer, the kernel truncates it on bind() — colliding daemons
|
|
193
|
+
// and raising a bogus EADDRINUSE. A clear error beats that mystery.
|
|
194
|
+
const socketPathBytes = Buffer.byteLength(socketPath, 'utf8');
|
|
195
|
+
const socketPathLimit = maxSocketPathBytes();
|
|
196
|
+
if (socketPathBytes > socketPathLimit) {
|
|
197
|
+
throw new DaemonError('IPC_ERROR', `Daemon socket path is ${socketPathBytes} bytes but ${process.platform} allows at most ` +
|
|
198
|
+
`${socketPathLimit}; the OS truncates longer paths on bind() (a bogus EADDRINUSE). Use a ` +
|
|
199
|
+
`shorter task-graph or data-dir path. Path: ${socketPath}`);
|
|
200
|
+
}
|
|
163
201
|
// Remove existing socket file
|
|
164
202
|
try {
|
|
165
203
|
await fs.unlink(socketPath);
|
|
@@ -188,6 +226,7 @@ export function createIPCServer(socketPath) {
|
|
|
188
226
|
socket.destroy();
|
|
189
227
|
}
|
|
190
228
|
connections.clear();
|
|
229
|
+
subscriptions.clear();
|
|
191
230
|
// Close server
|
|
192
231
|
return new Promise((resolve) => {
|
|
193
232
|
server.close(() => {
|
|
@@ -215,6 +254,18 @@ export function createIPCServer(socketPath) {
|
|
|
215
254
|
}
|
|
216
255
|
}
|
|
217
256
|
},
|
|
257
|
+
broadcastToSubscribers(method, params, matches) {
|
|
258
|
+
const notification = JSON.stringify({ jsonrpc: '2.0', id: null, method, params }) + '\n';
|
|
259
|
+
for (const [socket, filter] of subscriptions) {
|
|
260
|
+
try {
|
|
261
|
+
if (matches(filter))
|
|
262
|
+
socket.write(notification);
|
|
263
|
+
}
|
|
264
|
+
catch {
|
|
265
|
+
// Connection may be dead — ignore
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
},
|
|
218
269
|
getConnectionCount() {
|
|
219
270
|
return connections.size;
|
|
220
271
|
},
|
package/dist/daemon/ipc.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ipc.js","sourceRoot":"","sources":["../../src/daemon/ipc.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAChC,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAoEzC,+EAA+E;AAC/E,uBAAuB;AACvB,+EAA+E;AAE/E,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,WAAW,EAAE,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE;IACrD,eAAe,EAAE,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,iBAAiB,EAAE;IAC7D,gBAAgB,EAAE,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,kBAAkB,EAAE;IAC/D,cAAc,EAAE,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,gBAAgB,EAAE;IAC3D,cAAc,EAAE,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,gBAAgB,EAAE;CACnD,CAAC;AAEX,+EAA+E;AAC/E,iBAAiB;AACjB,+EAA+E;AAE/E;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,UAAkB;IAChD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAyB,CAAC;IAClD,MAAM,WAAW,GAAG,IAAI,GAAG,EAAc,CAAC;IAC1C,IAAI,MAAM,GAAsB,IAAI,CAAC;IAErC;;OAEG;IACH,SAAS,aAAa,CACpB,EAA0B,EAC1B,KAAwC,EACxC,IAAc;QAEd,OAAO;YACL,OAAO,EAAE,KAAK;YACd,EAAE;YACF,KAAK,EAAE,EAAE,GAAG,KAAK,EAAE,IAAI,EAAE;SAC1B,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,SAAS,eAAe,CAAC,EAA0B,EAAE,MAAe;QAClE,OAAO;YACL,OAAO,EAAE,KAAK;YACd,EAAE;YACF,MAAM;SACP,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,SAAS,eAAe,CAAC,IAAa;QACpC,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;YAC9C,OAAO,eAAe,CAAC,eAAe,CAAC;QACzC,CAAC;QAED,MAAM,GAAG,GAAG,IAA+B,CAAC;QAE5C,IAAI,GAAG,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;YAC1B,OAAO,eAAe,CAAC,eAAe,CAAC;QACzC,CAAC;QAED,IAAI,OAAO,GAAG,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;YACnC,OAAO,eAAe,CAAC,eAAe,CAAC;QACzC,CAAC;QAED,wDAAwD;QACxD,IACE,GAAG,CAAC,EAAE,KAAK,SAAS;YACpB,GAAG,CAAC,EAAE,KAAK,IAAI;YACf,OAAO,GAAG,CAAC,EAAE,KAAK,QAAQ;YAC1B,OAAO,GAAG,CAAC,EAAE,KAAK,QAAQ,EAC1B,CAAC;YACD,OAAO,eAAe,CAAC,eAAe,CAAC;QACzC,CAAC;QAED,OAAO;YACL,OAAO,EAAE,KAAK;YACd,EAAE,EAAG,GAAG,CAAC,EAA6B,IAAI,IAAI;YAC9C,MAAM,EAAE,GAAG,CAAC,MAAM;YAClB,MAAM,EAAE,GAAG,CAAC,MAAM;SACnB,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,UAAU,aAAa,CAAC,OAAmB;QAC9C,iDAAiD;QACjD,MAAM,cAAc,GAAG,OAAO,CAAC,EAAE,KAAK,IAAI,CAAC;QAE3C,MAAM,OAAO,GAAG,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC7C,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,IAAI,cAAc;gBAAE,OAAO,IAAI,CAAC;YAChC,OAAO,aAAa,CAAC,OAAO,CAAC,EAAE,EAAE,eAAe,CAAC,gBAAgB,CAAC,CAAC;QACrE,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAC7C,IAAI,cAAc;gBAAE,OAAO,IAAI,CAAC;YAChC,OAAO,eAAe,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QAC7C,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,cAAc;gBAAE,OAAO,IAAI,CAAC;YAEhC,sBAAsB;YACtB,IAAI,KAAK,YAAY,WAAW,EAAE,CAAC;gBACjC,OAAO,aAAa,CAAC,OAAO,CAAC,EAAE,EAAE,eAAe,CAAC,cAAc,EAAE;oBAC/D,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,OAAO,EAAE,KAAK,CAAC,OAAO;iBACvB,CAAC,CAAC;YACL,CAAC;YAED,OAAO,aAAa,CAAC,OAAO,CAAC,EAAE,EAAE,eAAe,CAAC,cAAc,EAAG,KAAe,CAAC,OAAO,CAAC,CAAC;QAC7F,CAAC;IACH,CAAC;IAED;;OAEG;IACH,SAAS,gBAAgB,CAAC,MAAkB;QAC1C,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAExB,IAAI,MAAM,GAAG,EAAE,CAAC;QAEhB,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;YAC/B,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAE1B,yBAAyB;YACzB,IAAI,YAAoB,CAAC;YACzB,OAAO,CAAC,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;gBACpD,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;gBAC3C,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;gBAExC,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE;oBAAE,SAAS;gBAEjC,aAAa;gBACb,IAAI,MAAe,CAAC;gBACpB,IAAI,CAAC;oBACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC5B,CAAC;gBAAC,MAAM,CAAC;oBACP,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,EAAE,eAAe,CAAC,WAAW,CAAC,CAAC;oBAClE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAC;oBAC9C,SAAS;gBACX,CAAC;gBAED,mBAAmB;gBACnB,MAAM,cAAc,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;gBAC/C,IAAI,MAAM,IAAI,cAAc,EAAE,CAAC;oBAC7B,MAAM,QAAQ,GAAG,aAAa,CAAC,IAAI,EAAE,cAAc,CAAC,CAAC;oBACrD,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAC;oBAC9C,SAAS;gBACX,CAAC;gBAED,iBAAiB;gBACjB,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,cAAc,CAAC,CAAC;gBACrD,IAAI,QAAQ,EAAE,CAAC;oBACb,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAC;gBAChD,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YACtB,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YACtB,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;IACL,CAAC;IAED,OAAO;QACL,UAAU;QAEV,KAAK,CAAC,KAAK;YACT,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,IAAI,WAAW,CAAC,WAAW,EAAE,wBAAwB,CAAC,CAAC;YAC/D,CAAC;YAED,8BAA8B;YAC9B,IAAI,CAAC;gBACH,MAAM,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YAC9B,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;oBACvD,MAAM,KAAK,CAAC;gBACd,CAAC;YACH,CAAC;YAED,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBACrC,MAAM,GAAG,GAAG,CAAC,YAAY,CAAC,gBAAgB,CAAC,CAAC;gBAE5C,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;oBAC3B,MAAM,CAAC,IAAI,WAAW,CAAC,WAAW,EAAE,iBAAiB,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC;gBAChF,CAAC,CAAC,CAAC;gBAEH,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,GAAG,EAAE;oBAC7B,OAAO,EAAE,CAAC;gBACZ,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC;QAED,KAAK,CAAC,IAAI;YACR,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,OAAO;YACT,CAAC;YAED,wBAAwB;YACxB,KAAK,MAAM,MAAM,IAAI,WAAW,EAAE,CAAC;gBACjC,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,CAAC;YACD,WAAW,CAAC,KAAK,EAAE,CAAC;YAEpB,eAAe;YACf,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;gBAC7B,MAAO,CAAC,KAAK,CAAC,GAAG,EAAE;oBACjB,MAAM,GAAG,IAAI,CAAC;oBACd,OAAO,EAAE,CAAC;gBACZ,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC;QAED,MAAM,CAA2B,MAAc,EAAE,OAA4B;YAC3E,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,OAAwB,CAAC,CAAC;QACjD,CAAC;QAED,qBAAqB,CAAC,MAAc,EAAE,MAAe;YACnD,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC;gBAClC,OAAO,EAAE,KAAK;gBACd,EAAE,EAAE,IAAI;gBACR,MAAM;gBACN,MAAM;aACP,CAAC,CAAC;YACH,KAAK,MAAM,MAAM,IAAI,WAAW,EAAE,CAAC;gBACjC,IAAI,CAAC;oBACH,MAAM,CAAC,KAAK,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;gBACpC,CAAC;gBAAC,MAAM,CAAC;oBACP,kCAAkC;gBACpC,CAAC;YACH,CAAC;QACH,CAAC;QAED,kBAAkB;YAChB,OAAO,WAAW,CAAC,IAAI,CAAC;QAC1B,CAAC;KACF,CAAC;AACJ,CAAC;AA0BD;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,UAAkB;IAChD,IAAI,MAAM,GAAsB,IAAI,CAAC;IACrC,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,MAAM,eAAe,GAAG,IAAI,GAAG,EAG5B,CAAC;IACJ,MAAM,oBAAoB,GAA0B,EAAE,CAAC;IACvD,IAAI,MAAM,GAAG,EAAE,CAAC;IAEhB,SAAS,aAAa;QACpB,IAAI,YAAoB,CAAC;QACzB,OAAO,CAAC,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;YACpD,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC;YAC3C,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;YAExC,IAAI,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE;gBAAE,SAAS;YAEjC,IAAI,CAAC;gBACH,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAA4B,CAAC;gBAE5D,gEAAgE;gBAChE,IACE,OAAO,OAAO,CAAC,MAAM,KAAK,QAAQ;oBAClC,CAAC,OAAO,CAAC,EAAE,KAAK,IAAI,IAAI,OAAO,CAAC,EAAE,KAAK,SAAS,CAAC,EACjD,CAAC;oBACD,KAAK,MAAM,OAAO,IAAI,oBAAoB,EAAE,CAAC;wBAC3C,IAAI,CAAC;4BACH,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;wBAC1C,CAAC;wBAAC,MAAM,CAAC;4BACP,qDAAqD;wBACvD,CAAC;oBACH,CAAC;oBACD,SAAS;gBACX,CAAC;gBAED,oBAAoB;gBACpB,MAAM,QAAQ,GAAG,OAAiC,CAAC;gBACnD,MAAM,OAAO,GAAG,eAAe,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAG,CAAC,CAAC;gBAClD,IAAI,OAAO,EAAE,CAAC;oBACZ,eAAe,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAG,CAAC,CAAC;oBACrC,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;wBACnB,qEAAqE;wBACrE,MAAM,SAAS,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC;wBACtC,MAAM,MAAM,GACV,OAAO,SAAS,KAAK,QAAQ;4BAC3B,CAAC,CAAC,SAAS;4BACX,CAAC,CAAC,SAAS,IAAI,OAAO,SAAS,KAAK,QAAQ,IAAI,SAAS,IAAI,SAAS;gCACpE,CAAC,CAAE,SAAiC,CAAC,OAAO;gCAC5C,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC;wBAC/B,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;oBACpC,CAAC;yBAAM,CAAC;wBACN,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;oBACnC,CAAC;gBACH,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,kCAAkC;YACpC,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO;QACL,IAAI,SAAS;YACX,OAAO,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;QAC9C,CAAC;QAED,KAAK,CAAC,OAAO;YACX,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;YACvC,CAAC;YAED,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBACrC,MAAM,GAAG,GAAG,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;gBAE1C,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;oBACxB,OAAO,EAAE,CAAC;gBACZ,CAAC,CAAC,CAAC;gBAEH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;oBAC3B,MAAM,CAAC,KAAK,CAAC,CAAC;gBAChB,CAAC,CAAC,CAAC;gBAEH,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;oBACzB,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;oBAC1B,aAAa,EAAE,CAAC;gBAClB,CAAC,CAAC,CAAC;gBAEH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;oBACtB,8BAA8B;oBAC9B,KAAK,MAAM,CAAC,EAAE,OAAO,CAAC,IAAI,eAAe,EAAE,CAAC;wBAC1C,OAAO,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC,CAAC;oBACjD,CAAC;oBACD,eAAe,CAAC,KAAK,EAAE,CAAC;oBACxB,MAAM,GAAG,IAAI,CAAC;gBAChB,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC;QAED,UAAU;YACR,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,CAAC,KAAK,EAAE,CAAC;gBACf,MAAM,CAAC,OAAO,EAAE,CAAC;gBACjB,MAAM,GAAG,IAAI,CAAC;YAChB,CAAC;QACH,CAAC;QAED,cAAc,CAAC,OAA4B;YACzC,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACnC,OAAO,GAAG,EAAE;gBACV,MAAM,GAAG,GAAG,oBAAoB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBAClD,IAAI,GAAG,IAAI,CAAC;oBAAE,oBAAoB,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YACpD,CAAC,CAAC;QACJ,CAAC;QAED,KAAK,CAAC,OAAO,CAAc,MAAc,EAAE,MAAgB;YACzD,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;gBAChC,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;YACnC,CAAC;YAED,MAAM,EAAE,GAAG,EAAE,SAAS,CAAC;YACvB,MAAM,OAAO,GAAe;gBAC1B,OAAO,EAAE,KAAK;gBACd,EAAE;gBACF,MAAM;gBACN,MAAM;aACP,CAAC;YAEF,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBACrC,eAAe,CAAC,GAAG,CAAC,EAAE,EAAE;oBACtB,OAAO,EAAE,OAAmC;oBAC5C,MAAM;iBACP,CAAC,CAAC;gBAEH,MAAO,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;gBAE9C,2BAA2B;gBAC3B,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE;oBAC5B,IAAI,eAAe,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;wBAC5B,eAAe,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;wBAC3B,MAAM,CAAC,IAAI,KAAK,CAAC,iBAAiB,CAAC,CAAC,CAAC;oBACvC,CAAC;gBACH,CAAC,EAAE,KAAK,CAAC,CAAC;gBACV,+DAA+D;gBAC/D,KAAK,CAAC,KAAK,EAAE,CAAC;YAChB,CAAC,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"ipc.js","sourceRoot":"","sources":["../../src/daemon/ipc.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../../src/daemon/lifecycle.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAOH,OAAO,EAAiC,KAAK,YAAY,EAAoB,MAAM,YAAY,CAAC;AAUhG,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../../src/daemon/lifecycle.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAOH,OAAO,EAAiC,KAAK,YAAY,EAAoB,MAAM,YAAY,CAAC;AAUhG,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAqBpD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,oBAAoB,CAAC;AAajE;;GAEG;AACH,UAAU,gBAAgB;IACxB,wBAAwB;IACxB,OAAO,EAAE,MAAM,CAAC;IAEhB,uDAAuD;IACvD,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAE3B,yCAAyC;IACzC,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,0BAA2B,SAAQ,gBAAgB;IAClE,oCAAoC;IACpC,YAAY,EAAE,MAAM,CAAC;IAErB,uEAAuE;IACvE,KAAK,EAAE,UAAU,CAAC;IAElB,mDAAmD;IACnD,eAAe,CAAC,EAAE,sBAAsB,CAAC;CAC1C;AAED;;GAEG;AACH,MAAM,WAAW,yBAA0B,SAAQ,gBAAgB;IACjE,gDAAgD;IAChD,YAAY,EAAE,MAAM,CAAC;IAErB,gFAAgF;IAChF,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,MAAM,YAAY,GAAG,0BAA0B,GAAG,yBAAyB,CAAC;AAElF;;GAEG;AACH,MAAM,WAAW,MAAM;IACrB,uBAAuB;IACvB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEvB,iCAAiC;IACjC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtB,wBAAwB;IACxB,SAAS,IAAI,YAAY,CAAC;IAE1B,0BAA0B;IAC1B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAE5B,4CAA4C;IAC5C,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;CAC/B;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,0CAA0C;IAC1C,OAAO,EAAE,OAAO,CAAC;IAEjB,6BAA6B;IAC7B,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,qBAAqB;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AA2ID;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAkB7F;AAMD;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAKzD"}
|
package/dist/daemon/lifecycle.js
CHANGED
|
@@ -28,14 +28,18 @@ import { registerProviderMethods } from './methods/provider.js';
|
|
|
28
28
|
import { registerArchiveMethods } from './methods/archive.js';
|
|
29
29
|
import { registerContextFilesMethods } from './methods/context-files.js';
|
|
30
30
|
import { registerWatchMethods } from './methods/watch.js';
|
|
31
|
-
import { registerSyncMethods } from './methods/sync.js';
|
|
31
|
+
import { registerSyncMethods, registerMultiLocationSyncMethods } from './methods/sync.js';
|
|
32
|
+
import { registerEventMethods } from './methods/events.js';
|
|
33
|
+
import { createEventManager } from './events.js';
|
|
34
|
+
import { createIdempotencyStore } from './idempotency.js';
|
|
35
|
+
import { createHealthCounters } from './health-counters.js';
|
|
32
36
|
import { createGitGraphSyncer, } from '../graph/git-graph-syncer.js';
|
|
33
37
|
import { loadConfigFile } from '../config/loader.js';
|
|
34
38
|
import { createBeadsProvider } from '../providers/beads.js';
|
|
35
39
|
import { createSudocodeProvider } from '../providers/sudocode.js';
|
|
36
40
|
import { createClaudeTasksProvider } from '../providers/claude-tasks.js';
|
|
37
41
|
import { createGlobalProvider } from '../providers/global.js';
|
|
38
|
-
import { createLocationState, createSingleLocationResolver, createMultiLocationResolver
|
|
42
|
+
import { createLocationState, reloadLocationGitSyncer, createSingleLocationResolver, createMultiLocationResolver } from './location-state.js';
|
|
39
43
|
import { readWorktreeRegistry } from '../core/worktree.js';
|
|
40
44
|
// ============================================================================
|
|
41
45
|
// Constants
|
|
@@ -202,6 +206,7 @@ function createSingleLocationDaemon(config) {
|
|
|
202
206
|
let sessionlogLinker = null;
|
|
203
207
|
let reconciliationIntervalHandle = null;
|
|
204
208
|
let providerIntervalHandles = null;
|
|
209
|
+
let claimSweepIntervalHandle = null;
|
|
205
210
|
// Git graph syncer — null when `sync.git.enabled` is false (default).
|
|
206
211
|
// When enabled: installed merge driver + optional pull-on-startup + optional
|
|
207
212
|
// auto-commit/push timer managed internally by the syncer.
|
|
@@ -329,6 +334,10 @@ function createSingleLocationDaemon(config) {
|
|
|
329
334
|
healthy: true,
|
|
330
335
|
};
|
|
331
336
|
const locationResolver = createSingleLocationResolver(locationState);
|
|
337
|
+
// Tracks otherwise-silent watcher/reconcile failures so `health` can
|
|
338
|
+
// surface them (P3 M3 / F10). Git sync failures come from the syncer's
|
|
339
|
+
// own SyncerHealth, exposed alongside via getSyncHealth below.
|
|
340
|
+
const healthCounters = createHealthCounters();
|
|
332
341
|
// 9. Register method handlers
|
|
333
342
|
registerLifecycleMethods({
|
|
334
343
|
server: ipcServer,
|
|
@@ -336,10 +345,16 @@ function createSingleLocationDaemon(config) {
|
|
|
336
345
|
shutdown: () => daemon.stop(),
|
|
337
346
|
version,
|
|
338
347
|
startedAt: new Date(startedAt),
|
|
348
|
+
getHealthCounters: () => healthCounters.snapshot(),
|
|
349
|
+
getSyncHealth: () => gitSyncer?.getHealth() ?? null,
|
|
339
350
|
});
|
|
351
|
+
// One idempotency store per daemon: dedupes retried creates carrying an
|
|
352
|
+
// idempotency_key within a TTL window (P3 M3 / F9).
|
|
353
|
+
const idempotencyStore = createIdempotencyStore();
|
|
340
354
|
registerGraphMethods({
|
|
341
355
|
server: ipcServer,
|
|
342
356
|
locationResolver,
|
|
357
|
+
idempotencyStore,
|
|
343
358
|
});
|
|
344
359
|
// Create shared skill tracker registry (only if enabled in config)
|
|
345
360
|
const skillTrackingEnabled = openTasksConfig?.tracking?.skillTracking !== false;
|
|
@@ -363,10 +378,25 @@ function createSingleLocationDaemon(config) {
|
|
|
363
378
|
server: ipcServer,
|
|
364
379
|
locationResolver,
|
|
365
380
|
});
|
|
381
|
+
// One event manager per daemon process: the watch broadcaster stamps
|
|
382
|
+
// each event through it (seq + epoch + ring buffer), and events.since
|
|
383
|
+
// replays from the same buffer (P3 M2).
|
|
384
|
+
const eventManager = createEventManager();
|
|
366
385
|
registerWatchMethods({
|
|
367
386
|
server: ipcServer,
|
|
368
387
|
locationResolver,
|
|
388
|
+
eventManager,
|
|
389
|
+
onWatcherError: () => healthCounters.recordWatcherError(),
|
|
369
390
|
});
|
|
391
|
+
registerEventMethods({
|
|
392
|
+
server: ipcServer,
|
|
393
|
+
eventManager,
|
|
394
|
+
});
|
|
395
|
+
// Record reconcile outcomes for `health` (F10) while preserving the
|
|
396
|
+
// existing swallow-errors behavior (a reconcile failure is non-fatal).
|
|
397
|
+
const trackReconcile = (p) => {
|
|
398
|
+
void p.then(() => healthCounters.recordReconcileRun(), () => healthCounters.recordReconcileError());
|
|
399
|
+
};
|
|
370
400
|
const disabledSync = {
|
|
371
401
|
enabled: false,
|
|
372
402
|
autoCommit: false,
|
|
@@ -423,7 +453,16 @@ function createSingleLocationDaemon(config) {
|
|
|
423
453
|
}
|
|
424
454
|
if (options.doInitialPull && gitSyncConfig.pullOnStartup) {
|
|
425
455
|
try {
|
|
426
|
-
await gitSyncer.pull();
|
|
456
|
+
const pullResult = await gitSyncer.pull();
|
|
457
|
+
// The startup pull mutates graph.jsonl on disk, but the file
|
|
458
|
+
// watcher isn't started yet and SQLite still holds the
|
|
459
|
+
// pre-pull snapshot. Reload so queries see the pulled peer
|
|
460
|
+
// data — and, critically, so the next local flush (a
|
|
461
|
+
// full-file overwrite from SQLite) can't clobber the pulled
|
|
462
|
+
// nodes back off disk.
|
|
463
|
+
if (pullResult.hasChanges) {
|
|
464
|
+
await store.reload();
|
|
465
|
+
}
|
|
427
466
|
}
|
|
428
467
|
catch {
|
|
429
468
|
/* initial pull failure is non-fatal */
|
|
@@ -447,6 +486,12 @@ function createSingleLocationDaemon(config) {
|
|
|
447
486
|
registerSyncMethods({
|
|
448
487
|
server: ipcServer,
|
|
449
488
|
getSyncer: () => gitSyncer,
|
|
489
|
+
// Serialize manual sync/pull with the flush so a pending flush can't
|
|
490
|
+
// clobber a freshly-pulled graph.jsonl (F2 race); reload SQLite after.
|
|
491
|
+
flushManager: flushManager ?? undefined,
|
|
492
|
+
reloadStore: async () => {
|
|
493
|
+
await store.reload();
|
|
494
|
+
},
|
|
450
495
|
getSyncStatus: () => ({
|
|
451
496
|
enabled: gitSyncConfig.enabled,
|
|
452
497
|
remote: gitSyncConfig.remote,
|
|
@@ -454,6 +499,7 @@ function createSingleLocationDaemon(config) {
|
|
|
454
499
|
autoPush: gitSyncConfig.autoPush,
|
|
455
500
|
pullOnStartup: gitSyncConfig.pullOnStartup,
|
|
456
501
|
autoSyncRunning: gitSyncer?.isAutoSyncRunning() ?? false,
|
|
502
|
+
health: gitSyncer?.getHealth(),
|
|
457
503
|
}),
|
|
458
504
|
reloadSyncer: async () => {
|
|
459
505
|
// Re-read `.opentasks/config.json` from disk — the whole
|
|
@@ -482,6 +528,7 @@ function createSingleLocationDaemon(config) {
|
|
|
482
528
|
autoPush: gitSyncConfig.autoPush,
|
|
483
529
|
pullOnStartup: gitSyncConfig.pullOnStartup,
|
|
484
530
|
autoSyncRunning: gitSyncer?.isAutoSyncRunning() ?? false,
|
|
531
|
+
health: gitSyncer?.getHealth(),
|
|
485
532
|
};
|
|
486
533
|
},
|
|
487
534
|
});
|
|
@@ -494,7 +541,7 @@ function createSingleLocationDaemon(config) {
|
|
|
494
541
|
fileWatcher.onchange((event) => {
|
|
495
542
|
if (event.category === 'graph' && onReload !== 'none' && activeProviderStore) {
|
|
496
543
|
// After external graph changes, reconcile provider-backed nodes
|
|
497
|
-
|
|
544
|
+
trackReconcile(activeProviderStore.reconcileProviders());
|
|
498
545
|
}
|
|
499
546
|
});
|
|
500
547
|
await fileWatcher.start();
|
|
@@ -510,10 +557,30 @@ function createSingleLocationDaemon(config) {
|
|
|
510
557
|
if (bgInterval > 0) {
|
|
511
558
|
reconciliationIntervalHandle = setInterval(() => {
|
|
512
559
|
if (activeProviderStore) {
|
|
513
|
-
|
|
560
|
+
trackReconcile(activeProviderStore.reconcileProviders());
|
|
514
561
|
}
|
|
515
562
|
}, bgInterval);
|
|
516
563
|
}
|
|
564
|
+
// 12c-bis. Background lease reaper — atomically clears expired claims so
|
|
565
|
+
// a crashed/AFK agent's tasks become claimable again and the change
|
|
566
|
+
// flushes (reaching watchers). Steal-on-expiry already makes them
|
|
567
|
+
// reclaimable; this actively cleans up the stale claim fields + notifies.
|
|
568
|
+
const LEASE_SWEEP_INTERVAL_MS = 60_000;
|
|
569
|
+
claimSweepIntervalHandle = setInterval(() => {
|
|
570
|
+
if (!activeProviderStore || !flushManager)
|
|
571
|
+
return;
|
|
572
|
+
const fm = flushManager;
|
|
573
|
+
void activeProviderStore
|
|
574
|
+
.sweepExpiredClaims()
|
|
575
|
+
.then((cleared) => {
|
|
576
|
+
if (cleared.length === 0)
|
|
577
|
+
return;
|
|
578
|
+
for (const id of cleared)
|
|
579
|
+
fm.markDirty(id);
|
|
580
|
+
fm.schedule();
|
|
581
|
+
})
|
|
582
|
+
.catch(() => { });
|
|
583
|
+
}, LEASE_SWEEP_INTERVAL_MS);
|
|
517
584
|
// 12d. Start per-provider reconciliation intervals
|
|
518
585
|
const providerIntervals = reconciliationConfig?.providerIntervals;
|
|
519
586
|
if (providerIntervals && Object.keys(providerIntervals).length > 0) {
|
|
@@ -522,7 +589,7 @@ function createSingleLocationDaemon(config) {
|
|
|
522
589
|
if (interval > 0) {
|
|
523
590
|
providerIntervalHandles.set(providerName, setInterval(() => {
|
|
524
591
|
if (activeProviderStore) {
|
|
525
|
-
|
|
592
|
+
trackReconcile(activeProviderStore.reconcileProviders({ providers: [providerName] }));
|
|
526
593
|
}
|
|
527
594
|
}, interval));
|
|
528
595
|
}
|
|
@@ -578,6 +645,10 @@ function createSingleLocationDaemon(config) {
|
|
|
578
645
|
clearInterval(handle);
|
|
579
646
|
providerIntervalHandles = null;
|
|
580
647
|
}
|
|
648
|
+
if (claimSweepIntervalHandle) {
|
|
649
|
+
clearInterval(claimSweepIntervalHandle);
|
|
650
|
+
claimSweepIntervalHandle = null;
|
|
651
|
+
}
|
|
581
652
|
if (gitSyncer) {
|
|
582
653
|
try {
|
|
583
654
|
gitSyncer.stopAutoSync();
|
|
@@ -657,6 +728,10 @@ function createSingleLocationDaemon(config) {
|
|
|
657
728
|
clearInterval(handle);
|
|
658
729
|
providerIntervalHandles = null;
|
|
659
730
|
}
|
|
731
|
+
if (claimSweepIntervalHandle) {
|
|
732
|
+
clearInterval(claimSweepIntervalHandle);
|
|
733
|
+
claimSweepIntervalHandle = null;
|
|
734
|
+
}
|
|
660
735
|
// Stop provider watching before tearing down file watcher and store
|
|
661
736
|
if (activeProviderStore) {
|
|
662
737
|
activeProviderStore.stopProviderWatching();
|
|
@@ -748,6 +823,13 @@ function createMultiLocationDaemon(config) {
|
|
|
748
823
|
// Managers
|
|
749
824
|
const lockManager = createLockManager(daemonHomePath);
|
|
750
825
|
const registryManager = createRegistryManager(registryPath);
|
|
826
|
+
// Tracks otherwise-silent watcher/reconcile failures so `health` can surface
|
|
827
|
+
// them (P3 M3 / F10). Factory-scoped so the per-location watcher setup and the
|
|
828
|
+
// IPC method registration share one tracker.
|
|
829
|
+
const healthCounters = createHealthCounters();
|
|
830
|
+
const trackReconcile = (p) => {
|
|
831
|
+
void p.then(() => healthCounters.recordReconcileRun(), () => healthCounters.recordReconcileError());
|
|
832
|
+
};
|
|
751
833
|
// Components
|
|
752
834
|
let ipcServer = null;
|
|
753
835
|
let locationResolver = null;
|
|
@@ -792,7 +874,14 @@ function createMultiLocationDaemon(config) {
|
|
|
792
874
|
sharedSkillTrackerRegistry = createSkillTrackerRegistry();
|
|
793
875
|
}
|
|
794
876
|
const locReconciliationConfig = locationConfig?.reconciliation;
|
|
795
|
-
const locState = await createLocationState(opentasksPath, hash, isPrimary, sharedSkillTrackerRegistry
|
|
877
|
+
const locState = await createLocationState(opentasksPath, hash, isPrimary, sharedSkillTrackerRegistry, {
|
|
878
|
+
// Count this location's reload-reconcile runs/errors + reload failures
|
|
879
|
+
// in the daemon's shared health counters (F10). Without this, a
|
|
880
|
+
// multi-location location's reload-path activity is invisible.
|
|
881
|
+
recordReconcileRun: () => healthCounters.recordReconcileRun(),
|
|
882
|
+
recordReconcileError: () => healthCounters.recordReconcileError(),
|
|
883
|
+
recordWatcherError: () => healthCounters.recordWatcherError(),
|
|
884
|
+
});
|
|
796
885
|
// Wrap store with provider-aware dispatch
|
|
797
886
|
const defaultProvider = locationConfig?.defaultProvider ?? 'native';
|
|
798
887
|
locState.providerStore = createProviderAwareStore(locState.store, {
|
|
@@ -834,7 +923,7 @@ function createMultiLocationDaemon(config) {
|
|
|
834
923
|
if (bgInterval > 0) {
|
|
835
924
|
locState.reconciliationInterval = setInterval(() => {
|
|
836
925
|
if (locState.providerStore) {
|
|
837
|
-
|
|
926
|
+
trackReconcile(locState.providerStore.reconcileProviders());
|
|
838
927
|
}
|
|
839
928
|
}, bgInterval);
|
|
840
929
|
}
|
|
@@ -846,12 +935,31 @@ function createMultiLocationDaemon(config) {
|
|
|
846
935
|
if (interval > 0) {
|
|
847
936
|
locState.providerReconciliationIntervals.set(providerName, setInterval(() => {
|
|
848
937
|
if (locState.providerStore) {
|
|
849
|
-
|
|
938
|
+
trackReconcile(locState.providerStore.reconcileProviders({ providers: [providerName] }));
|
|
850
939
|
}
|
|
851
940
|
}, interval));
|
|
852
941
|
}
|
|
853
942
|
}
|
|
854
943
|
}
|
|
944
|
+
// Background lease reaper — clears expired claims so a crashed/AFK agent's
|
|
945
|
+
// tasks become claimable again, per location (mirrors the single-location
|
|
946
|
+
// daemon). Steal-on-expiry already makes them reclaimable; this is active
|
|
947
|
+
// cleanup + watcher notification.
|
|
948
|
+
locState.claimSweepInterval = setInterval(() => {
|
|
949
|
+
const fm = locState.flushManager;
|
|
950
|
+
if (!locState.providerStore || !fm)
|
|
951
|
+
return;
|
|
952
|
+
void locState.providerStore
|
|
953
|
+
.sweepExpiredClaims()
|
|
954
|
+
.then((cleared) => {
|
|
955
|
+
if (cleared.length === 0)
|
|
956
|
+
return;
|
|
957
|
+
for (const id of cleared)
|
|
958
|
+
fm.markDirty(id);
|
|
959
|
+
fm.schedule();
|
|
960
|
+
})
|
|
961
|
+
.catch(() => { });
|
|
962
|
+
}, 60_000);
|
|
855
963
|
return locState;
|
|
856
964
|
}
|
|
857
965
|
catch {
|
|
@@ -979,10 +1087,16 @@ function createMultiLocationDaemon(config) {
|
|
|
979
1087
|
return 'degraded';
|
|
980
1088
|
return 'healthy';
|
|
981
1089
|
},
|
|
1090
|
+
getHealthCounters: () => healthCounters.snapshot(),
|
|
1091
|
+
// Multi-location daemons don't own a single git syncer; sync health is
|
|
1092
|
+
// not surfaced here.
|
|
982
1093
|
});
|
|
1094
|
+
// One idempotency store per daemon (P3 M3 / F9) — see single-location path.
|
|
1095
|
+
const idempotencyStore = createIdempotencyStore();
|
|
983
1096
|
registerGraphMethods({
|
|
984
1097
|
server: ipcServer,
|
|
985
1098
|
locationResolver,
|
|
1099
|
+
idempotencyStore,
|
|
986
1100
|
});
|
|
987
1101
|
registerToolsMethods({
|
|
988
1102
|
server: ipcServer,
|
|
@@ -1002,9 +1116,31 @@ function createMultiLocationDaemon(config) {
|
|
|
1002
1116
|
locationResolver,
|
|
1003
1117
|
gitCommonDir,
|
|
1004
1118
|
});
|
|
1119
|
+
// Archive methods are location-aware (resolve per `location` param), so
|
|
1120
|
+
// they wire identically to single-location. Previously absent here.
|
|
1121
|
+
registerArchiveMethods({
|
|
1122
|
+
server: ipcServer,
|
|
1123
|
+
locationResolver,
|
|
1124
|
+
});
|
|
1125
|
+
// Location-aware git sync — each worktree's sync runs through the SAME
|
|
1126
|
+
// coordinated flush-freeze-reload as single-location, resolved per
|
|
1127
|
+
// `location` param. Closes the C2 gap (uncoordinated per-location sync).
|
|
1128
|
+
registerMultiLocationSyncMethods({
|
|
1129
|
+
server: ipcServer,
|
|
1130
|
+
locationResolver,
|
|
1131
|
+
reloadLocationSyncer: (state) => reloadLocationGitSyncer(state),
|
|
1132
|
+
});
|
|
1133
|
+
// One event manager per daemon process (P3 M2) — see single-location path.
|
|
1134
|
+
const eventManager = createEventManager();
|
|
1005
1135
|
registerWatchMethods({
|
|
1006
1136
|
server: ipcServer,
|
|
1007
1137
|
locationResolver,
|
|
1138
|
+
eventManager,
|
|
1139
|
+
onWatcherError: () => healthCounters.recordWatcherError(),
|
|
1140
|
+
});
|
|
1141
|
+
registerEventMethods({
|
|
1142
|
+
server: ipcServer,
|
|
1143
|
+
eventManager,
|
|
1008
1144
|
});
|
|
1009
1145
|
// 14. Start IPC server
|
|
1010
1146
|
await ipcServer.start();
|