@mclawnet/agent 0.6.21 → 0.6.23

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.
Files changed (52) hide show
  1. package/cli.js +63 -0
  2. package/dist/__tests__/checkpoint.test.d.ts +2 -0
  3. package/dist/__tests__/checkpoint.test.d.ts.map +1 -0
  4. package/dist/__tests__/fs-handler-decode.test.d.ts +2 -0
  5. package/dist/__tests__/fs-handler-decode.test.d.ts.map +1 -0
  6. package/dist/__tests__/idle-sweeper.test.d.ts +2 -0
  7. package/dist/__tests__/idle-sweeper.test.d.ts.map +1 -0
  8. package/dist/__tests__/mcp-config.test.d.ts +2 -0
  9. package/dist/__tests__/mcp-config.test.d.ts.map +1 -0
  10. package/dist/__tests__/schedule-runtime-spawn.test.d.ts +2 -0
  11. package/dist/__tests__/schedule-runtime-spawn.test.d.ts.map +1 -0
  12. package/dist/__tests__/schedule-runtime.test.d.ts +2 -0
  13. package/dist/__tests__/schedule-runtime.test.d.ts.map +1 -0
  14. package/dist/__tests__/session-limit.test.d.ts +2 -0
  15. package/dist/__tests__/session-limit.test.d.ts.map +1 -0
  16. package/dist/__tests__/swarm-cli-client.test.d.ts +2 -0
  17. package/dist/__tests__/swarm-cli-client.test.d.ts.map +1 -0
  18. package/dist/__tests__/swarm-control-dispatch.test.d.ts +2 -0
  19. package/dist/__tests__/swarm-control-dispatch.test.d.ts.map +1 -0
  20. package/dist/__tests__/swarm-session-bridge.test.d.ts +2 -0
  21. package/dist/__tests__/swarm-session-bridge.test.d.ts.map +1 -0
  22. package/dist/backend-adapter.d.ts +43 -0
  23. package/dist/backend-adapter.d.ts.map +1 -1
  24. package/dist/checkpoint.d.ts +67 -0
  25. package/dist/checkpoint.d.ts.map +1 -0
  26. package/dist/{chunk-RIK7IXSW.js → chunk-WJWCYGLQ.js} +1130 -147
  27. package/dist/chunk-WJWCYGLQ.js.map +1 -0
  28. package/dist/errors.d.ts +40 -0
  29. package/dist/errors.d.ts.map +1 -0
  30. package/dist/fs-handler.d.ts.map +1 -1
  31. package/dist/hub-connection.d.ts +13 -0
  32. package/dist/hub-connection.d.ts.map +1 -1
  33. package/dist/index.js +1 -1
  34. package/dist/schedule-runtime.d.ts +125 -0
  35. package/dist/schedule-runtime.d.ts.map +1 -0
  36. package/dist/session-manager.d.ts +102 -0
  37. package/dist/session-manager.d.ts.map +1 -1
  38. package/dist/skill-loader.d.ts +20 -0
  39. package/dist/skill-loader.d.ts.map +1 -1
  40. package/dist/start.d.ts +2 -0
  41. package/dist/start.d.ts.map +1 -1
  42. package/dist/start.js +1 -1
  43. package/dist/swarm-cli-client.d.ts +24 -0
  44. package/dist/swarm-cli-client.d.ts.map +1 -0
  45. package/dist/swarm-cli-client.js +83 -0
  46. package/dist/swarm-cli-client.js.map +1 -0
  47. package/dist/swarm-control-dispatch.d.ts +47 -0
  48. package/dist/swarm-control-dispatch.d.ts.map +1 -0
  49. package/dist/swarm-session-bridge.d.ts +22 -0
  50. package/dist/swarm-session-bridge.d.ts.map +1 -0
  51. package/package.json +7 -5
  52. package/dist/chunk-RIK7IXSW.js.map +0 -1
@@ -1,6 +1,15 @@
1
1
  import type { AgentClientMessage, AgentGenericRequest } from "@mclawnet/shared";
2
2
  import type { SessionManager } from "./session-manager.js";
3
3
  import type { SwarmCoordinator } from "@mclawnet/swarm";
4
+ /**
5
+ * Structural type for the schedule runtime; declared locally so hub-connection
6
+ * does not import from `./schedule-runtime.js` (which itself imports
7
+ * `./session-manager.js`) — keeps this module's import graph stable and avoids
8
+ * accidental cycles.
9
+ */
10
+ interface ScheduleRuntimeBridge {
11
+ handleHubMessage(msg: unknown): void;
12
+ }
4
13
  export interface HubConnectionOptions {
5
14
  hubUrl: string;
6
15
  token: string;
@@ -37,6 +46,8 @@ export declare class HubConnection {
37
46
  private sessionManager;
38
47
  /** Swarm coordinator — set after construction via setSwarmCoordinator() */
39
48
  private swarmCoordinator;
49
+ /** Schedule runtime — set after construction via setScheduleRuntime() */
50
+ private scheduleRuntime;
40
51
  /** Namespace-based generic message handlers */
41
52
  private namespaceHandlers;
42
53
  private onMessage?;
@@ -46,6 +57,7 @@ export declare class HubConnection {
46
57
  constructor(opts: HubConnectionOptions);
47
58
  setSessionManager(manager: SessionManager): void;
48
59
  setSwarmCoordinator(coordinator: SwarmCoordinator): void;
60
+ setScheduleRuntime(runtime: ScheduleRuntimeBridge): void;
49
61
  registerNamespace(namespace: string, handler: (msg: AgentGenericRequest) => Promise<Record<string, unknown>>): void;
50
62
  sendPush(namespace: string, event: string, data: Record<string, unknown>): void;
51
63
  sendSkillList(skills: Array<{
@@ -67,4 +79,5 @@ export declare class HubConnection {
67
79
  private cleanup;
68
80
  private cleanupConnection;
69
81
  }
82
+ export {};
70
83
  //# sourceMappingURL=hub-connection.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"hub-connection.d.ts","sourceRoot":"","sources":["../src/hub-connection.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hub-connection.d.ts","sourceRoot":"","sources":["../src/hub-connection.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -4,7 +4,7 @@ import {
4
4
  HubConnection,
5
5
  SessionManager,
6
6
  startAgent
7
- } from "./chunk-RIK7IXSW.js";
7
+ } from "./chunk-WJWCYGLQ.js";
8
8
  import {
9
9
  loadConfig,
10
10
  saveConfig
@@ -0,0 +1,125 @@
1
+ import { JsonScheduleRepository, type Schedule, type ScheduleRun, type ScheduleExecutor, type SpawnFn, type SwarmStarter, type TypedEventEmitter, type SchedulerEvents } from "@mclawnet/scheduler";
2
+ import type { SessionManager } from "./session-manager.js";
3
+ import type { SwarmCoordinator } from "@mclawnet/swarm";
4
+ /**
5
+ * Minimal hub send surface; mirrors HubConnection.send() but kept structural so
6
+ * the runtime is unit-testable without spinning up a real WebSocket.
7
+ */
8
+ export interface ScheduleHubSink {
9
+ send(msg: unknown): boolean;
10
+ }
11
+ /**
12
+ * Optional repo surface used by ScheduleRuntime — kept structural so tests can
13
+ * inject a vi.fn-backed fake without subclassing JsonScheduleRepository.
14
+ */
15
+ export interface ScheduleRepoLike {
16
+ create: JsonScheduleRepository["create"];
17
+ update: JsonScheduleRepository["update"];
18
+ delete: JsonScheduleRepository["delete"];
19
+ getById: JsonScheduleRepository["getById"];
20
+ listAll: JsonScheduleRepository["listAll"];
21
+ listByCwd: JsonScheduleRepository["listByCwd"];
22
+ listRuns: JsonScheduleRepository["listRuns"];
23
+ readRunLogs: JsonScheduleRepository["readRunLogs"];
24
+ }
25
+ /**
26
+ * Optional scheduler surface — same rationale as ScheduleRepoLike. The real
27
+ * SchedulerService satisfies this implicitly.
28
+ */
29
+ export interface SchedulerLike {
30
+ start(): Promise<void>;
31
+ stop(): Promise<void>;
32
+ register(s: Schedule): void;
33
+ unregister(id: string): void;
34
+ triggerNow(id: string): Promise<ScheduleRun>;
35
+ cancel(runId: string): boolean;
36
+ events: TypedEventEmitter<SchedulerEvents>;
37
+ }
38
+ export interface ScheduleRuntimeOptions {
39
+ hub: ScheduleHubSink;
40
+ /** Real swarm bootstrap deps; only needed when wiring real executors. */
41
+ sessionManager?: SessionManager;
42
+ swarmCoordinator?: SwarmCoordinator;
43
+ /** DI overrides for tests. */
44
+ repo?: ScheduleRepoLike;
45
+ scheduler?: SchedulerLike;
46
+ executors?: {
47
+ oneshot?: ScheduleExecutor;
48
+ swarm?: ScheduleExecutor;
49
+ };
50
+ }
51
+ /**
52
+ * Bridges Hub WS schedule:* messages to a local SchedulerService + repository,
53
+ * and lifts SchedulerService events back to the Hub. Construction is fully
54
+ * dependency-injected so unit tests can run without the real cron/fs layers.
55
+ *
56
+ * NOTE (Phase 7+): the hub-side broadcast handler currently routes only the
57
+ * three push events ({@link Schedule}/{@link ScheduleRun} / `schedule:removed`).
58
+ * The `:result` and `:error` envelopes sent here are correct on the wire but
59
+ * will be dropped at the hub until PR-B teaches `schedule-broadcast.ts` to
60
+ * route them back to the originating user. See plan Task 6.x notes.
61
+ */
62
+ export declare class ScheduleRuntime {
63
+ private readonly hub;
64
+ private readonly repo;
65
+ private readonly scheduler;
66
+ private started;
67
+ private readonly inflight;
68
+ private readonly onChange;
69
+ private readonly onRun;
70
+ constructor(opts: ScheduleRuntimeOptions);
71
+ start(): Promise<void>;
72
+ stop(): Promise<void>;
73
+ /**
74
+ * Wraps `hub.send` with a started-flag guard so handlers that race against
75
+ * `stop()` can't emit phantom messages after the runtime has shut down.
76
+ */
77
+ private safeSend;
78
+ /**
79
+ * Records `p` in the in-flight set so `stop()` can wait for it, and removes
80
+ * it on settle. Returns the same promise so callers can `void track(...)`.
81
+ */
82
+ private track;
83
+ /**
84
+ * Entry point for any `schedule:*` message arriving from the Hub. Always
85
+ * returns synchronously; per-branch async work runs on its own microtask
86
+ * chain and reports results back to the hub.
87
+ */
88
+ handleHubMessage(msg: unknown): void;
89
+ private handleCreate;
90
+ private handleUpdate;
91
+ private handleDelete;
92
+ private handlePauseResume;
93
+ private handleTrigger;
94
+ private handleList;
95
+ private handleRuns;
96
+ private handleLog;
97
+ private sendError;
98
+ }
99
+ /**
100
+ * Best-effort SpawnFn for the OneShot executor. Streams stdout/stderr into
101
+ * bounded buffers, parses stream-json lines (with chunk-boundary safety) to
102
+ * extract the last assistant text, and honours an external AbortSignal.
103
+ *
104
+ * NOTE: tests do NOT exercise the spawn path itself (the binary lookup +
105
+ * child_process invocation); chunk-boundary parsing and byte-cap behaviour
106
+ * ARE covered via __tests__/schedule-runtime-spawn.test.ts which mocks
107
+ * node:child_process.spawn.
108
+ */
109
+ export declare function makeRealOneShotSpawn(): SpawnFn;
110
+ /**
111
+ * Placeholder swarm starter. Wiring this to the real swarm runtime requires
112
+ * piping a one-shot prompt through SwarmCoordinator + SessionManager and
113
+ * extracting a final summary, which has no precedent yet — left for Phase 7+
114
+ * once the UI surfaces a "trigger swarm schedule now" affordance.
115
+ *
116
+ * TODO(plan Task 6.x follow-up): wire to SwarmCoordinator.create() + listen
117
+ * for queen completion to resolve { swarmId, sessionId, summary, exitCode }.
118
+ * See packages/@clawnet/agent/src/schedule-runtime.ts:makeRealSwarmStarter
119
+ * (this function).
120
+ */
121
+ export declare function makeRealSwarmStarter(_deps: {
122
+ sessionManager?: SessionManager;
123
+ swarmCoordinator?: SwarmCoordinator;
124
+ }): SwarmStarter;
125
+ //# sourceMappingURL=schedule-runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schedule-runtime.d.ts","sourceRoot":"","sources":["../src/schedule-runtime.ts"],"names":[],"mappings":"AACA,OAAO,EACL,sBAAsB,EAMtB,KAAK,QAAQ,EACb,KAAK,WAAW,EAChB,KAAK,gBAAgB,EACrB,KAAK,OAAO,EACZ,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACrB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAwBxD;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC;CAC7B;AAED;;;GAGG;AACH,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,sBAAsB,CAAC,QAAQ,CAAC,CAAC;IACzC,MAAM,EAAE,sBAAsB,CAAC,QAAQ,CAAC,CAAC;IACzC,MAAM,EAAE,sBAAsB,CAAC,QAAQ,CAAC,CAAC;IACzC,OAAO,EAAE,sBAAsB,CAAC,SAAS,CAAC,CAAC;IAC3C,OAAO,EAAE,sBAAsB,CAAC,SAAS,CAAC,CAAC;IAC3C,SAAS,EAAE,sBAAsB,CAAC,WAAW,CAAC,CAAC;IAC/C,QAAQ,EAAE,sBAAsB,CAAC,UAAU,CAAC,CAAC;IAC7C,WAAW,EAAE,sBAAsB,CAAC,aAAa,CAAC,CAAC;CACpD;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,QAAQ,CAAC,CAAC,EAAE,QAAQ,GAAG,IAAI,CAAC;IAC5B,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAC7C,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC;IAC/B,MAAM,EAAE,iBAAiB,CAAC,eAAe,CAAC,CAAC;CAC5C;AAED,MAAM,WAAW,sBAAsB;IACrC,GAAG,EAAE,eAAe,CAAC;IACrB,yEAAyE;IACzE,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;IACpC,8BAA8B;IAC9B,IAAI,CAAC,EAAE,gBAAgB,CAAC;IACxB,SAAS,CAAC,EAAE,aAAa,CAAC;IAC1B,SAAS,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,gBAAgB,CAAC;QAAC,KAAK,CAAC,EAAE,gBAAgB,CAAA;KAAE,CAAC;CACtE;AAED;;;;;;;;;;GAUG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAkB;IACtC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAmB;IACxC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAgB;IAC1C,OAAO,CAAC,OAAO,CAAS;IAIxB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAA4B;IAGrD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAwB;IACjD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA2B;gBAErC,IAAI,EAAE,sBAAsB;IA8BlC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAQtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAkB3B;;;OAGG;IACH,OAAO,CAAC,QAAQ;IAKhB;;;OAGG;IACH,OAAO,CAAC,KAAK;IAOb;;;;OAIG;IACH,gBAAgB,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI;YAqDtB,YAAY;YAsBZ,YAAY;YA0BZ,YAAY;YAeZ,iBAAiB;YAwBjB,aAAa;YAoBb,UAAU;YAoBV,UAAU;YAaV,SAAS;IAoBvB,OAAO,CAAC,SAAS;CASlB;AA8HD;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,IAAI,OAAO,CAsF9C;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE;IAC1C,cAAc,CAAC,EAAE,cAAc,CAAC;IAChC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;CACrC,GAAG,YAAY,CAIf"}
@@ -1,4 +1,6 @@
1
1
  import type { BackendAdapter, SpawnOptions } from "./backend-adapter.js";
2
+ import { type SessionKind } from "./errors.js";
3
+ import { type RecoveryReport } from "./checkpoint.js";
2
4
  /**
3
5
  * Manages active sessions, mapping ClawNet session IDs to BackendProcess instances.
4
6
  *
@@ -11,13 +13,31 @@ import type { BackendAdapter, SpawnOptions } from "./backend-adapter.js";
11
13
  export declare class SessionManager {
12
14
  private sessions;
13
15
  private conversationBuffer;
16
+ private sessionMeta;
17
+ private activelyExecuting;
14
18
  private aborting;
19
+ private idleSweepTimer;
20
+ private idleTtlMs;
21
+ private idleSweepIntervalMs;
22
+ private checkpointPath;
23
+ private checkpointDebounceMs;
24
+ private checkpointDebouncer;
25
+ private agentStartedAt;
26
+ private hasRecovered;
27
+ /**
28
+ * Carry-over ladder indices from the previous run's checkpoint. Populated by
29
+ * `recoverFromCheckpoint`, drained one-shot by `createSession`. Without this
30
+ * a SIGTERM right after escalating to 16k would silently revert the next
31
+ * spawn back to 32k and re-hit the 168k wall on its first turn.
32
+ */
33
+ private recoveredLadderIndex;
15
34
  private adapter;
16
35
  private onOutput;
17
36
  private onTurnComplete;
18
37
  private onSessionError;
19
38
  private onSessionStarted?;
20
39
  private onBeforeClose?;
40
+ private classify;
21
41
  constructor(options: {
22
42
  adapter: BackendAdapter;
23
43
  onOutput: (sessionId: string, data: unknown) => void;
@@ -38,6 +58,16 @@ export declare class SessionManager {
38
58
  role: string;
39
59
  content: string;
40
60
  }>) => Promise<void>;
61
+ classify?: (sessionId: string) => SessionKind;
62
+ /**
63
+ * (PR-C) Where to write the agent-sessions.json checkpoint. Pass `null`
64
+ * (or omit) to disable checkpointing entirely — useful for tests and for
65
+ * the rare embedded use case where there's no writable directory. When
66
+ * set, the file is written via temp+rename on debounced structural events.
67
+ */
68
+ checkpointPath?: string | null;
69
+ /** (PR-C) Override the 5s debounce window. Tests use ~50ms. */
70
+ checkpointDebounceMs?: number;
41
71
  });
42
72
  createSession(options: SpawnOptions): Promise<string>;
43
73
  sendInput(sessionId: string, input: string): void;
@@ -54,5 +84,77 @@ export declare class SessionManager {
54
84
  isHealthy(sessionId: string): boolean;
55
85
  get activeSessionCount(): number;
56
86
  getActiveSessionIds(): string[];
87
+ /**
88
+ * Recommended `CLAUDE_CODE_MAX_OUTPUT_TOKENS` for the *next* spawn of this
89
+ * session. Returns `undefined` for unknown sessions OR sessions still at
90
+ * ladder index 0 — callers omit the env override in that case so the CLI
91
+ * picks its own default. Returning `undefined` (instead of `32_000`) keeps
92
+ * env composition free of redundant overrides for the common path.
93
+ *
94
+ * Used by hub-connection.spawnAndSend on every reuse / fresh-resume
95
+ * branch — without that wiring the ladder change in meta would be inert.
96
+ */
97
+ getRecommendedMaxOutputTokens(sessionId: string): number | undefined;
98
+ /**
99
+ * Start the periodic idle sweeper. Idempotent: a second call is a no-op.
100
+ * Disabled (no-op) when effective TTL is `<= 0` — set via env
101
+ * `CLAWNET_CHAT_IDLE_TTL_MS=0` or via the `ttlMs` override.
102
+ *
103
+ * The timer is `unref()`-ed so it never blocks process exit.
104
+ *
105
+ * @param overrides - test/ops hook to override env-derived defaults.
106
+ */
107
+ startIdleSweeper(overrides?: {
108
+ ttlMs?: number;
109
+ intervalMs?: number;
110
+ }): void;
111
+ stopIdleSweeper(): void;
112
+ /**
113
+ * One sweep tick. Exposed for tests (so they can drive sweeps deterministically
114
+ * without faking interval timers) and for ops scripts. Safe to call concurrently
115
+ * with normal traffic — the sweeper only ever calls closeSession, which itself
116
+ * is idempotent on missing IDs.
117
+ */
118
+ sweepIdleSessions(): Promise<void>;
119
+ /**
120
+ * Build the SessionPoolSnapshot attached to a SessionLimitReachedError.
121
+ *
122
+ * "Idle" here means "not currently executing a turn". A session whose
123
+ * lastActivityAt is hours old but is mid-turn (long-running deep-research)
124
+ * is intentionally NOT a candidate — pointing the user at it would be
125
+ * misleading. The selection mirrors `sweepIdleSessions` filters minus the
126
+ * TTL gate (since at saturation we report the LRU regardless of TTL).
127
+ */
128
+ private snapshotPoolForError;
129
+ /**
130
+ * Schedule a debounced flush of the in-memory pool to the checkpoint file.
131
+ *
132
+ * Burst protection: if a debounce timer is already pending, this is a no-op
133
+ * — the flush captures the pool state at firing time, so all events in the
134
+ * 5s window are observable in the eventual snapshot. This collapses the
135
+ * "create + onSessionStarted + close" 3-event sequence into one disk write.
136
+ */
137
+ scheduleCheckpoint(): void;
138
+ /**
139
+ * Flush the current pool to the checkpoint file via temp+rename. Public
140
+ * for tests and for the graceful-shutdown final-flush in `closeAll`.
141
+ *
142
+ * Sessions whose underlying BackendProcess has no `pid` (e.g., in-process
143
+ * mock backends) are skipped — without a pid the recovery probe can't
144
+ * distinguish dead from alive, and writing them in would just generate
145
+ * spurious session.died notifications on restart.
146
+ */
147
+ flushCheckpoint(): Promise<void>;
148
+ /**
149
+ * Read the previous-run checkpoint, classify each entry as `dead` or
150
+ * `orphan` via pid probe, then reset the file to the current (empty)
151
+ * truth. Caller (start.ts) is expected to forward `dead` entries to hub
152
+ * via `session.died` so db's processState clears.
153
+ *
154
+ * Returns `{dead: [], orphan: []}` on first boot (no file). Throws on
155
+ * file-system error or JSON parse failure — start.ts catches and logs so a
156
+ * corrupt checkpoint does not block agent startup.
157
+ */
158
+ recoverFromCheckpoint(): Promise<RecoveryReport>;
57
159
  }
58
160
  //# sourceMappingURL=session-manager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"session-manager.d.ts","sourceRoot":"","sources":["../src/session-manager.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAkB,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAOzF;;;;;;;;GAQG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAqC;IACrD,OAAO,CAAC,kBAAkB,CAA+D;IAKzF,OAAO,CAAC,QAAQ,CAAqB;IACrC,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,QAAQ,CAA6C;IAC7D,OAAO,CAAC,cAAc,CAQZ;IACV,OAAO,CAAC,cAAc,CAA6C;IACnE,OAAO,CAAC,gBAAgB,CAAC,CAAiE;IAC1F,OAAO,CAAC,aAAa,CAAC,CAA2F;gBAErG,OAAO,EAAE;QACnB,OAAO,EAAE,cAAc,CAAC;QACxB,QAAQ,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,KAAK,IAAI,CAAC;QACrD,cAAc,EAAE,CACd,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE;YACJ,eAAe,CAAC,EAAE,MAAM,CAAC;YACzB,IAAI,CAAC,EAAE,MAAM,CAAC;YACd,QAAQ,CAAC,EAAE,MAAM,CAAC;YAClB,YAAY,CAAC,EAAE;gBAAE,IAAI,EAAE,MAAM,CAAC;gBAAC,KAAK,EAAE,MAAM,CAAA;aAAE,CAAC;SAChD,KACE,IAAI,CAAC;QACV,cAAc,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;QAC3D,gBAAgB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE;YAAE,eAAe,EAAE,MAAM,CAAA;SAAE,KAAK,IAAI,CAAC;QAClF,aAAa,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;KAC1G;IASK,aAAa,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;IAwH3D,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAa3C,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgB9C,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAe9C,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAgB/B,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAItC;;;;;OAKG;IACH,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAMrC,IAAI,kBAAkB,IAAI,MAAM,CAE/B;IAED,mBAAmB,IAAI,MAAM,EAAE;CAGhC"}
1
+ {"version":3,"file":"session-manager.d.ts","sourceRoot":"","sources":["../src/session-manager.ts"],"names":[],"mappings":"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"}
@@ -35,4 +35,24 @@ export interface PendingNotification {
35
35
  * Returns null if there are no pending proposals or the file is unreadable.
36
36
  */
37
37
  export declare function getPendingNotification(): PendingNotification | null;
38
+ /**
39
+ * Ensure ~/.clawnet/mcp.json registers the unified `clawnet-mcp` server.
40
+ *
41
+ * Behaviour matrix (designed to safely upgrade pre-existing installs):
42
+ * - File missing → write fresh config with clawnet-mcp.
43
+ * - File present, no clawnet-mcp entry → add clawnet-mcp; preserve other servers.
44
+ * - File present, clawnet-mcp at stale path → rewrite args to current server.js.
45
+ * - File present, clawnet-mcp already correct → no-op (no disk write).
46
+ * - File present, malformed JSON → leave alone, warn (do not destroy user state).
47
+ * - File present, missing `mcpServers` field → inject mcpServers without dropping siblings.
48
+ *
49
+ * We also drop a legacy `clawnet-memory` entry IF (and only if) it points at
50
+ * the auto-generated path inside `@mclawnet/agent/node_modules/@mclawnet/memory`.
51
+ * That path is what older agent versions used to write; the unified clawnet-mcp
52
+ * supersedes it. A `clawnet-memory` entry pointing elsewhere is treated as
53
+ * user customization and preserved.
54
+ *
55
+ * Exported for testability — tests drive the function directly with mocked fs.
56
+ */
57
+ export declare function ensureMcpConfig(): void;
38
58
  //# sourceMappingURL=skill-loader.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"skill-loader.d.ts","sourceRoot":"","sources":["../src/skill-loader.ts"],"names":[],"mappings":"AAkBA;;;;;GAKG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAKhD;AAkBD;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAkJvE;AA6CD,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB;AAKD;;GAEG;AACH,wBAAgB,UAAU,IAAI,SAAS,EAAE,CAmCxC;AAED,2DAA2D;AAC3D,wBAAgB,YAAY,IAAI,SAAS,EAAE,CAE1C;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,IAAI,mBAAmB,GAAG,IAAI,CAmBnE"}
1
+ {"version":3,"file":"skill-loader.d.ts","sourceRoot":"","sources":["../src/skill-loader.ts"],"names":[],"mappings":"AAkBA;;;;;GAKG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAKhD;AAkBD;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAkJvE;AA6CD,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACrB;AAKD;;GAEG;AACH,wBAAgB,UAAU,IAAI,SAAS,EAAE,CAmCxC;AAED,2DAA2D;AAC3D,wBAAgB,YAAY,IAAI,SAAS,EAAE,CAE1C;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,IAAI,mBAAmB,GAAG,IAAI,CAmBnE;AAiBD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,eAAe,IAAI,IAAI,CAiFtC"}
package/dist/start.d.ts CHANGED
@@ -1,5 +1,6 @@
1
1
  import { type AgentConfig } from "./config.js";
2
2
  import { HubConnection } from "./hub-connection.js";
3
+ import { ScheduleRuntime } from "./schedule-runtime.js";
3
4
  import { SessionManager } from "./session-manager.js";
4
5
  import { SwarmCoordinator } from "@mclawnet/swarm";
5
6
  import { BrainBridge } from "./brain-bridge.js";
@@ -16,6 +17,7 @@ export declare function startAgent(options: StartOptions): Promise<{
16
17
  hub: HubConnection;
17
18
  sessionManager: SessionManager;
18
19
  swarmCoordinator: SwarmCoordinator;
20
+ scheduleRuntime: ScheduleRuntime;
19
21
  brainBridge: BrainBridge;
20
22
  fsBridge: FsBridge;
21
23
  }>;
@@ -1 +1 @@
1
- {"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../src/start.ts"],"names":[],"mappings":"AAEA,OAAO,EAAc,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAa,MAAM,iBAAiB,CAAC;AAE9D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAmB3D,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IAC9B,OAAO,EAAE,cAAc,CAAC;CACzB;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC;IAC/D,GAAG,EAAE,aAAa,CAAC;IACnB,cAAc,EAAE,cAAc,CAAC;IAC/B,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,WAAW,EAAE,WAAW,CAAC;IACzB,QAAQ,EAAE,QAAQ,CAAC;CACpB,CAAC,CAyLD"}
1
+ {"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../src/start.ts"],"names":[],"mappings":"AAEA,OAAO,EAAc,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAa,MAAM,iBAAiB,CAAC;AAG9D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE1C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAmB3D,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC;IAC9B,OAAO,EAAE,cAAc,CAAC;CACzB;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC;IAC/D,GAAG,EAAE,aAAa,CAAC;IACnB,cAAc,EAAE,cAAc,CAAC;IAC/B,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,eAAe,EAAE,eAAe,CAAC;IACjC,WAAW,EAAE,WAAW,CAAC;IACzB,QAAQ,EAAE,QAAQ,CAAC;CACpB,CAAC,CA4PD"}
package/dist/start.js CHANGED
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  startAgent
3
- } from "./chunk-RIK7IXSW.js";
3
+ } from "./chunk-WJWCYGLQ.js";
4
4
  import "./chunk-PJ5M6Q36.js";
5
5
  export {
6
6
  startAgent
@@ -0,0 +1,24 @@
1
+ export interface SendControlMessageOptions {
2
+ hubUrl: string;
3
+ token: string;
4
+ hostname?: string;
5
+ version?: string;
6
+ capabilities?: string[];
7
+ /** Total budget for connect+auth+send. Default 5000ms. */
8
+ timeoutMs?: number;
9
+ /** How long to wait after sending the post-auth msg before closing. Default 200ms. */
10
+ postSendDelayMs?: number;
11
+ }
12
+ /**
13
+ * Open a short-lived authenticated WS to the hub, send a single post-auth
14
+ * control message, then close. Used by `clawnet-agent swarm new/resume`.
15
+ *
16
+ * The connection lifecycle:
17
+ * 1. Connect → wait for {type:"auth_required"}
18
+ * 2. Reply with {type:"auth", token, hostname, ...}
19
+ * 3. Wait for {type:"registered"} — auth confirmed
20
+ * 4. Send the user-supplied post-auth message
21
+ * 5. Wait postSendDelayMs (default 200ms) so hub can route, then close
22
+ */
23
+ export declare function sendControlMessage(msg: object, opts: SendControlMessageOptions): Promise<void>;
24
+ //# sourceMappingURL=swarm-cli-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"swarm-cli-client.d.ts","sourceRoot":"","sources":["../src/swarm-cli-client.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,yBAAyB;IACxC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,0DAA0D;IAC1D,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,sFAAsF;IACtF,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,yBAAyB,GAC9B,OAAO,CAAC,IAAI,CAAC,CA4Ff"}
@@ -0,0 +1,83 @@
1
+ // src/swarm-cli-client.ts
2
+ import { hostname as osHostname } from "os";
3
+ import WebSocket from "ws";
4
+ import { createLogger } from "@mclawnet/logger";
5
+ var log = createLogger({ module: "swarm-cli-client" });
6
+ function sendControlMessage(msg, opts) {
7
+ const timeoutMs = opts.timeoutMs ?? 5e3;
8
+ const postSendDelayMs = opts.postSendDelayMs ?? 200;
9
+ return new Promise((resolve, reject) => {
10
+ let settled = false;
11
+ let authState = "pending";
12
+ const ws = new WebSocket(opts.hubUrl);
13
+ const timer = setTimeout(() => {
14
+ if (settled) return;
15
+ settled = true;
16
+ log.warn({ hubUrl: opts.hubUrl, authState }, "control message timed out");
17
+ try {
18
+ ws.close();
19
+ } catch {
20
+ }
21
+ reject(new Error(`Timed out after ${timeoutMs}ms (state: ${authState})`));
22
+ }, timeoutMs);
23
+ const finish = (err) => {
24
+ if (settled) return;
25
+ settled = true;
26
+ clearTimeout(timer);
27
+ try {
28
+ ws.close();
29
+ } catch {
30
+ }
31
+ if (err) reject(err);
32
+ else resolve();
33
+ };
34
+ ws.on("open", () => {
35
+ log.debug({ hubUrl: opts.hubUrl }, "ws opened");
36
+ });
37
+ ws.on("message", (raw) => {
38
+ let data;
39
+ try {
40
+ data = JSON.parse(raw.toString());
41
+ } catch {
42
+ return;
43
+ }
44
+ if (authState === "pending" && data?.type === "auth_required") {
45
+ authState = "authenticating";
46
+ const authMsg = {
47
+ type: "auth",
48
+ token: opts.token,
49
+ hostname: opts.hostname ?? osHostname()
50
+ };
51
+ if (opts.version !== void 0) authMsg.version = opts.version;
52
+ if (opts.capabilities !== void 0) authMsg.capabilities = opts.capabilities;
53
+ ws.send(JSON.stringify(authMsg));
54
+ return;
55
+ }
56
+ if (authState === "authenticating" && data?.type === "registered") {
57
+ authState = "authenticated";
58
+ log.info({ agentId: data.agentId }, "registered, sending control message");
59
+ ws.send(JSON.stringify(msg));
60
+ setTimeout(() => finish(), postSendDelayMs);
61
+ return;
62
+ }
63
+ });
64
+ ws.on("close", (code) => {
65
+ if (settled) return;
66
+ if (authState !== "authenticated") {
67
+ finish(new Error(`Hub closed connection during auth (code ${code})`));
68
+ } else {
69
+ finish();
70
+ }
71
+ });
72
+ ws.on("error", (err) => {
73
+ log.error({ err: err.message, authState }, "ws error");
74
+ if (authState !== "authenticated") {
75
+ finish(new Error(err.message || "ws connection error"));
76
+ }
77
+ });
78
+ });
79
+ }
80
+ export {
81
+ sendControlMessage
82
+ };
83
+ //# sourceMappingURL=swarm-cli-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/swarm-cli-client.ts"],"sourcesContent":["import { hostname as osHostname } from \"node:os\";\nimport WebSocket from \"ws\";\nimport { createLogger } from \"@mclawnet/logger\";\n\nconst log = createLogger({ module: \"swarm-cli-client\" });\n\nexport interface SendControlMessageOptions {\n hubUrl: string;\n token: string;\n hostname?: string;\n version?: string;\n capabilities?: string[];\n /** Total budget for connect+auth+send. Default 5000ms. */\n timeoutMs?: number;\n /** How long to wait after sending the post-auth msg before closing. Default 200ms. */\n postSendDelayMs?: number;\n}\n\n/**\n * Open a short-lived authenticated WS to the hub, send a single post-auth\n * control message, then close. Used by `clawnet-agent swarm new/resume`.\n *\n * The connection lifecycle:\n * 1. Connect → wait for {type:\"auth_required\"}\n * 2. Reply with {type:\"auth\", token, hostname, ...}\n * 3. Wait for {type:\"registered\"} — auth confirmed\n * 4. Send the user-supplied post-auth message\n * 5. Wait postSendDelayMs (default 200ms) so hub can route, then close\n */\nexport function sendControlMessage(\n msg: object,\n opts: SendControlMessageOptions,\n): Promise<void> {\n const timeoutMs = opts.timeoutMs ?? 5000;\n const postSendDelayMs = opts.postSendDelayMs ?? 200;\n\n return new Promise<void>((resolve, reject) => {\n let settled = false;\n let authState: \"pending\" | \"authenticating\" | \"authenticated\" = \"pending\";\n\n const ws = new WebSocket(opts.hubUrl);\n\n const timer = setTimeout(() => {\n if (settled) return;\n settled = true;\n log.warn({ hubUrl: opts.hubUrl, authState }, \"control message timed out\");\n try {\n ws.close();\n } catch {\n // ignore\n }\n reject(new Error(`Timed out after ${timeoutMs}ms (state: ${authState})`));\n }, timeoutMs);\n\n const finish = (err?: Error) => {\n if (settled) return;\n settled = true;\n clearTimeout(timer);\n try {\n ws.close();\n } catch {\n // ignore\n }\n if (err) reject(err);\n else resolve();\n };\n\n ws.on(\"open\", () => {\n log.debug({ hubUrl: opts.hubUrl }, \"ws opened\");\n });\n\n ws.on(\"message\", (raw) => {\n let data: any;\n try {\n data = JSON.parse(raw.toString());\n } catch {\n return;\n }\n\n if (authState === \"pending\" && data?.type === \"auth_required\") {\n authState = \"authenticating\";\n const authMsg: Record<string, unknown> = {\n type: \"auth\",\n token: opts.token,\n hostname: opts.hostname ?? osHostname(),\n };\n if (opts.version !== undefined) authMsg.version = opts.version;\n if (opts.capabilities !== undefined) authMsg.capabilities = opts.capabilities;\n ws.send(JSON.stringify(authMsg));\n return;\n }\n\n if (authState === \"authenticating\" && data?.type === \"registered\") {\n authState = \"authenticated\";\n log.info({ agentId: data.agentId }, \"registered, sending control message\");\n ws.send(JSON.stringify(msg));\n // Give hub a brief moment to route before we close.\n setTimeout(() => finish(), postSendDelayMs);\n return;\n }\n });\n\n ws.on(\"close\", (code: number) => {\n if (settled) return;\n if (authState !== \"authenticated\") {\n finish(new Error(`Hub closed connection during auth (code ${code})`));\n } else {\n // Closed after success — treat as resolved.\n finish();\n }\n });\n\n ws.on(\"error\", (err: Error) => {\n log.error({ err: err.message, authState }, \"ws error\");\n // Pre-auth errors reject immediately. Once authenticated, defer to the\n // close handler so the resolution path stays single-source: either the\n // post-send delay timer resolves first (settled=true makes us idempotent)\n // or close fires with the final code/reason. The settled flag inside\n // finish() makes the two paths safe to interleave.\n if (authState !== \"authenticated\") {\n finish(new Error(err.message || \"ws connection error\"));\n }\n });\n });\n}\n"],"mappings":";AAAA,SAAS,YAAY,kBAAkB;AACvC,OAAO,eAAe;AACtB,SAAS,oBAAoB;AAE7B,IAAM,MAAM,aAAa,EAAE,QAAQ,mBAAmB,CAAC;AAyBhD,SAAS,mBACd,KACA,MACe;AACf,QAAM,YAAY,KAAK,aAAa;AACpC,QAAM,kBAAkB,KAAK,mBAAmB;AAEhD,SAAO,IAAI,QAAc,CAAC,SAAS,WAAW;AAC5C,QAAI,UAAU;AACd,QAAI,YAA4D;AAEhE,UAAM,KAAK,IAAI,UAAU,KAAK,MAAM;AAEpC,UAAM,QAAQ,WAAW,MAAM;AAC7B,UAAI,QAAS;AACb,gBAAU;AACV,UAAI,KAAK,EAAE,QAAQ,KAAK,QAAQ,UAAU,GAAG,2BAA2B;AACxE,UAAI;AACF,WAAG,MAAM;AAAA,MACX,QAAQ;AAAA,MAER;AACA,aAAO,IAAI,MAAM,mBAAmB,SAAS,cAAc,SAAS,GAAG,CAAC;AAAA,IAC1E,GAAG,SAAS;AAEZ,UAAM,SAAS,CAAC,QAAgB;AAC9B,UAAI,QAAS;AACb,gBAAU;AACV,mBAAa,KAAK;AAClB,UAAI;AACF,WAAG,MAAM;AAAA,MACX,QAAQ;AAAA,MAER;AACA,UAAI,IAAK,QAAO,GAAG;AAAA,UACd,SAAQ;AAAA,IACf;AAEA,OAAG,GAAG,QAAQ,MAAM;AAClB,UAAI,MAAM,EAAE,QAAQ,KAAK,OAAO,GAAG,WAAW;AAAA,IAChD,CAAC;AAED,OAAG,GAAG,WAAW,CAAC,QAAQ;AACxB,UAAI;AACJ,UAAI;AACF,eAAO,KAAK,MAAM,IAAI,SAAS,CAAC;AAAA,MAClC,QAAQ;AACN;AAAA,MACF;AAEA,UAAI,cAAc,aAAa,MAAM,SAAS,iBAAiB;AAC7D,oBAAY;AACZ,cAAM,UAAmC;AAAA,UACvC,MAAM;AAAA,UACN,OAAO,KAAK;AAAA,UACZ,UAAU,KAAK,YAAY,WAAW;AAAA,QACxC;AACA,YAAI,KAAK,YAAY,OAAW,SAAQ,UAAU,KAAK;AACvD,YAAI,KAAK,iBAAiB,OAAW,SAAQ,eAAe,KAAK;AACjE,WAAG,KAAK,KAAK,UAAU,OAAO,CAAC;AAC/B;AAAA,MACF;AAEA,UAAI,cAAc,oBAAoB,MAAM,SAAS,cAAc;AACjE,oBAAY;AACZ,YAAI,KAAK,EAAE,SAAS,KAAK,QAAQ,GAAG,qCAAqC;AACzE,WAAG,KAAK,KAAK,UAAU,GAAG,CAAC;AAE3B,mBAAW,MAAM,OAAO,GAAG,eAAe;AAC1C;AAAA,MACF;AAAA,IACF,CAAC;AAED,OAAG,GAAG,SAAS,CAAC,SAAiB;AAC/B,UAAI,QAAS;AACb,UAAI,cAAc,iBAAiB;AACjC,eAAO,IAAI,MAAM,2CAA2C,IAAI,GAAG,CAAC;AAAA,MACtE,OAAO;AAEL,eAAO;AAAA,MACT;AAAA,IACF,CAAC;AAED,OAAG,GAAG,SAAS,CAAC,QAAe;AAC7B,UAAI,MAAM,EAAE,KAAK,IAAI,SAAS,UAAU,GAAG,UAAU;AAMrD,UAAI,cAAc,iBAAiB;AACjC,eAAO,IAAI,MAAM,IAAI,WAAW,qBAAqB,CAAC;AAAA,MACxD;AAAA,IACF,CAAC;AAAA,EACH,CAAC;AACH;","names":[]}
@@ -0,0 +1,47 @@
1
+ import type { SwarmCoordinator } from "@mclawnet/swarm";
2
+ export interface SwarmSpawnMsg {
3
+ type: "swarm_spawn";
4
+ teamName: string;
5
+ msg?: string;
6
+ workDir?: string;
7
+ /** Optional caller-provided id; falls back to randomUUID when absent. */
8
+ swarmId?: string;
9
+ }
10
+ export interface SwarmResumeMsg {
11
+ type: "swarm_resume";
12
+ swarmId: string;
13
+ }
14
+ export type SwarmControlMsg = SwarmSpawnMsg | SwarmResumeMsg;
15
+ export interface DispatchOptions {
16
+ /** Fallback workDir when CLI omits one. */
17
+ defaultWorkDir: string;
18
+ /**
19
+ * Optional override for the user-home root (no `.clawnet` suffix). Threaded
20
+ * to InboxStore so process-launched inbox seeds land in the same tree the
21
+ * coordinator watches. When omitted, falls back to `CLAWNET_HOME` env var
22
+ * then `homedir()` inside InboxStore.
23
+ */
24
+ home?: string;
25
+ }
26
+ export interface DispatchResult {
27
+ ok: boolean;
28
+ swarmId?: string;
29
+ error?: string;
30
+ }
31
+ /**
32
+ * Coordinator surface used by this dispatcher. The real SwarmCoordinator
33
+ * implements all of these (getSwarm is a thin lookup over its private map;
34
+ * findQueenInstance identifies the queen by `definition.type === "queen"`
35
+ * so custom queen roles with non-default names are also recognised).
36
+ */
37
+ type CoordLike = Pick<SwarmCoordinator, "create" | "recover" | "inboxRelay"> & {
38
+ getSwarm?: (id: string) => {
39
+ workDir?: string;
40
+ } | undefined;
41
+ findQueenInstance?: (id: string) => {
42
+ instanceId: string;
43
+ } | undefined;
44
+ };
45
+ export declare function handleSwarmControl(coord: CoordLike, msg: SwarmControlMsg, opts: DispatchOptions): Promise<DispatchResult>;
46
+ export {};
47
+ //# sourceMappingURL=swarm-control-dispatch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"swarm-control-dispatch.d.ts","sourceRoot":"","sources":["../src/swarm-control-dispatch.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAIxD,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,aAAa,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yEAAyE;IACzE,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,cAAc,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,MAAM,eAAe,GAAG,aAAa,GAAG,cAAc,CAAC;AAE7D,MAAM,WAAW,eAAe;IAC9B,2CAA2C;IAC3C,cAAc,EAAE,MAAM,CAAC;IACvB;;;;;OAKG;IACH,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,OAAO,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;GAKG;AACH,KAAK,SAAS,GAAG,IAAI,CAAC,gBAAgB,EAAE,QAAQ,GAAG,SAAS,GAAG,YAAY,CAAC,GAAG;IAC7E,QAAQ,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK;QAAE,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC;IAC5D,iBAAiB,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC;CACxE,CAAC;AAEF,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,SAAS,EAChB,GAAG,EAAE,eAAe,EACpB,IAAI,EAAE,eAAe,GACpB,OAAO,CAAC,cAAc,CAAC,CAqDzB"}
@@ -0,0 +1,22 @@
1
+ import type { SwarmCoordinator } from "@mclawnet/swarm";
2
+ /**
3
+ * Build the SessionManager.onSessionStarted handler used by start.ts.
4
+ *
5
+ * Two responsibilities:
6
+ * 1. Forward the early `claude.session_started` frame to the hub so the
7
+ * central db can backfill `claude_session_id` (existing behavior).
8
+ * 2. If the sessionId belongs to an in-process swarm role (convention
9
+ * `${swarmId}::${instanceId}`), also push the claudeSessionId into the
10
+ * local SwarmCoordinator so it's captured in the snapshot — without
11
+ * having to wait for the hub round-trip. This is what lets a restarted
12
+ * agent `--resume` the right per-role conversation (Task 4).
13
+ */
14
+ export declare function createSwarmAwareSessionStartedHandler(deps: {
15
+ hub: {
16
+ send: (msg: any) => unknown;
17
+ };
18
+ swarmCoordinator: Pick<SwarmCoordinator, "setRoleClaudeSessionIdBySession" | "isSwarmSession">;
19
+ }): (sessionId: string, info: {
20
+ claudeSessionId: string;
21
+ }) => void;
22
+ //# sourceMappingURL=swarm-session-bridge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"swarm-session-bridge.d.ts","sourceRoot":"","sources":["../src/swarm-session-bridge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAKxD;;;;;;;;;;;GAWG;AACH,wBAAgB,qCAAqC,CAAC,IAAI,EAAE;IAC1D,GAAG,EAAE;QAAE,IAAI,EAAE,CAAC,GAAG,EAAE,GAAG,KAAK,OAAO,CAAA;KAAE,CAAC;IACrC,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,EAAE,iCAAiC,GAAG,gBAAgB,CAAC,CAAC;CAChG,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE;IAAE,eAAe,EAAE,MAAM,CAAA;CAAE,KAAK,IAAI,CAyBjE"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mclawnet/agent",
3
- "version": "0.6.21",
3
+ "version": "0.6.23",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
@@ -22,13 +22,15 @@
22
22
  "dependencies": {
23
23
  "commander": "^14.0.3",
24
24
  "ws": "^8.19.0",
25
- "@mclawnet/claude-adapter": "0.1.14",
26
- "@mclawnet/logger": "0.1.5",
27
- "@mclawnet/memory": "0.1.4",
25
+ "@mclawnet/scheduler": "0.1.1",
26
+ "@mclawnet/claude-adapter": "0.1.15",
28
27
  "@mclawnet/shared": "0.1.2",
28
+ "@mclawnet/skill-manager": "0.1.3",
29
+ "@mclawnet/logger": "0.1.5",
29
30
  "@mclawnet/mcp-server": "0.1.3",
31
+ "@mclawnet/task": "0.1.1",
30
32
  "@mclawnet/swarm": "0.1.4",
31
- "@mclawnet/skill-manager": "0.1.3"
33
+ "@mclawnet/memory": "0.1.4"
32
34
  },
33
35
  "devDependencies": {
34
36
  "@types/node": "^22",