wechat-bridge-opencode 0.1.6 → 0.1.8

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.
@@ -1,27 +1,35 @@
1
1
  /**
2
2
  * Per-user ACP session manager.
3
3
  *
4
- * Each WeChat user has at most ONE active agent subprocess at a time.
5
- * Switching workspace kills the old agent and spawns a new one with the new cwd.
6
- * Restarting session kills the agent and spawns a new one with the same cwd.
4
+ * New architecture: ONE agent process per user, MULTIPLE ACP sessions within it.
5
+ * Session/workspace switching uses ACP protocol methods (newSession/loadSession)
6
+ * instead of kill+respawn.
7
7
  */
8
+ import type { ChildProcess } from "node:child_process";
8
9
  import type * as acp from "@agentclientprotocol/sdk";
9
10
  import { WeChatAcpClient, type MediaContent } from "./client.js";
10
- import { type AgentProcessInfo } from "./agent-manager.js";
11
+ import { type AgentCapabilities } from "./agent-manager.js";
11
12
  export interface PendingMessage {
12
13
  prompt: acp.ContentBlock[];
13
14
  contextToken: string;
15
+ hint?: string;
14
16
  }
15
17
  export interface UserSession {
16
18
  userId: string;
17
19
  contextToken: string;
18
20
  client: WeChatAcpClient;
19
- agentInfo: AgentProcessInfo;
21
+ process: ChildProcess;
22
+ connection: acp.ClientSideConnection;
23
+ capabilities: AgentCapabilities;
24
+ activeSessionId: string;
25
+ sessions: Map<string, {
26
+ cwd: string;
27
+ title?: string;
28
+ }>;
20
29
  queue: PendingMessage[];
21
30
  processing: boolean;
22
31
  lastActivity: number;
23
32
  createdAt: number;
24
- /** Set to true when agent is fully initialized */
25
33
  ready: boolean;
26
34
  }
27
35
  export interface SessionManagerOpts {
@@ -52,23 +60,38 @@ export declare class SessionManager {
52
60
  stop(): Promise<void>;
53
61
  enqueue(userId: string, message: PendingMessage): Promise<void>;
54
62
  /**
55
- * Restart session for a user: kill old agent, spawn new one with current cwd.
56
- * Clears ACP conversation context.
63
+ * Switch workspace: loads the most recent session for the given cwd,
64
+ * or creates a new one if none exists.
65
+ * NO kill/respawn of the agent process.
57
66
  */
58
- restartSession(userId: string, contextToken: string): Promise<UserSession | null>;
67
+ switchWorkspace(userId: string, contextToken: string, cwd: string, existingSessionId?: string): Promise<void>;
59
68
  /**
60
- * Switch workspace: kill old agent and start new one immediately.
61
- * Returns a promise that resolves when the new agent is fully ready.
69
+ * Switch to an existing ACP session, replaying its conversation history.
62
70
  */
63
- switchWorkspace(userId: string, contextToken: string): Promise<void>;
64
- private spawnAndReplace;
71
+ switchSession(userId: string, contextToken: string, sessionId: string, cwd: string): Promise<void>;
72
+ /**
73
+ * Create a new ACP session, returns the new session ID.
74
+ */
75
+ createNewSession(userId: string, contextToken: string, cwd: string): Promise<string>;
76
+ /**
77
+ * List sessions for the current agent.
78
+ */
79
+ listAgentSessions(userId: string, cwd?: string): Promise<acp.ListSessionsResponse>;
80
+ /**
81
+ * Close an ACP session.
82
+ */
83
+ closeSession(userId: string, sessionId: string): Promise<void>;
65
84
  getSession(userId: string): UserSession | undefined;
85
+ /**
86
+ * Get available slash commands advertised by the agent.
87
+ */
88
+ getAvailableCommands(userId: string): acp.AvailableCommand[];
66
89
  getUserBySessionId(acpSessionId: string): {
67
90
  userId: string;
68
91
  contextToken: string;
69
92
  } | null;
70
93
  get activeCount(): number;
71
- private createSession;
94
+ private createInitialSession;
72
95
  private processQueue;
73
96
  private cleanupIdleSessions;
74
97
  private evictOldest;
@@ -1 +1 @@
1
- {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../src/acp/session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../src/acp/session.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,9 @@
1
1
  /**
2
2
  * Per-user ACP session manager.
3
3
  *
4
- * Each WeChat user has at most ONE active agent subprocess at a time.
5
- * Switching workspace kills the old agent and spawns a new one with the new cwd.
6
- * Restarting session kills the agent and spawns a new one with the same cwd.
4
+ * New architecture: ONE agent process per user, MULTIPLE ACP sessions within it.
5
+ * Session/workspace switching uses ACP protocol methods (newSession/loadSession)
6
+ * instead of kill+respawn.
7
7
  */
8
8
  import { WeChatAcpClient } from "./client.js";
9
9
  import { spawnAgent, killAgent } from "./agent-manager.js";
@@ -26,7 +26,7 @@ export class SessionManager {
26
26
  this.cleanupTimer = null;
27
27
  }
28
28
  for (const session of this.sessions.values()) {
29
- killAgent(session.agentInfo.process);
29
+ killAgent(session.process);
30
30
  }
31
31
  this.sessions.clear();
32
32
  }
@@ -36,7 +36,7 @@ export class SessionManager {
36
36
  if (this.sessions.size >= this.opts.maxConcurrentUsers) {
37
37
  this.evictOldest();
38
38
  }
39
- session = await this.createSession(userId, message.contextToken, this.opts.getExistingSessionId?.(userId));
39
+ session = await this.createInitialSession(userId, message.contextToken);
40
40
  this.sessions.set(userId, session);
41
41
  }
42
42
  session.contextToken = message.contextToken;
@@ -50,105 +50,161 @@ export class SessionManager {
50
50
  }
51
51
  }
52
52
  /**
53
- * Restart session for a user: kill old agent, spawn new one with current cwd.
54
- * Clears ACP conversation context.
53
+ * Switch workspace: loads the most recent session for the given cwd,
54
+ * or creates a new one if none exists.
55
+ * NO kill/respawn of the agent process.
55
56
  */
56
- async restartSession(userId, contextToken) {
57
- const oldSession = this.sessions.get(userId);
58
- if (oldSession) {
59
- this.opts.log(`[${userId}] Restarting session`);
60
- killAgent(oldSession.agentInfo.process);
61
- this.sessions.delete(userId);
57
+ async switchWorkspace(userId, contextToken, cwd, existingSessionId) {
58
+ let session = this.sessions.get(userId);
59
+ if (!session) {
60
+ // No process yet — create initial session first
61
+ session = await this.createInitialSession(userId, contextToken);
62
+ this.sessions.set(userId, session);
63
+ }
64
+ if (existingSessionId) {
65
+ // Load existing session for this cwd
66
+ this.opts.log(`[${userId}] Loading session ${existingSessionId} for workspace switch (cwd: ${cwd})`);
67
+ session.client.setReplaying(true);
68
+ try {
69
+ await session.connection.loadSession({
70
+ sessionId: existingSessionId,
71
+ cwd,
72
+ mcpServers: [],
73
+ });
74
+ session.activeSessionId = existingSessionId;
75
+ if (!session.sessions.has(existingSessionId)) {
76
+ session.sessions.set(existingSessionId, { cwd });
77
+ }
78
+ }
79
+ finally {
80
+ session.client.setReplaying(false);
81
+ }
82
+ }
83
+ else {
84
+ // No existing session — create new one
85
+ this.opts.log(`[${userId}] Creating new session for workspace switch (cwd: ${cwd})`);
86
+ const result = await session.connection.newSession({
87
+ cwd,
88
+ mcpServers: [],
89
+ });
90
+ session.activeSessionId = result.sessionId;
91
+ session.sessions.set(result.sessionId, { cwd });
62
92
  }
63
- const newSession = await this.createSession(userId, contextToken);
64
- this.sessions.set(userId, newSession);
65
- return newSession;
93
+ session.contextToken = contextToken;
94
+ session.lastActivity = Date.now();
95
+ this.opts.onSessionReady?.(userId, session.activeSessionId);
66
96
  }
67
97
  /**
68
- * Switch workspace: kill old agent and start new one immediately.
69
- * Returns a promise that resolves when the new agent is fully ready.
98
+ * Switch to an existing ACP session, replaying its conversation history.
70
99
  */
71
- switchWorkspace(userId, contextToken) {
72
- const oldSession = this.sessions.get(userId);
73
- if (oldSession) {
74
- this.opts.log(`[${userId}] Switching workspace: killing agent`);
75
- killAgent(oldSession.agentInfo.process);
76
- this.sessions.delete(userId);
100
+ async switchSession(userId, contextToken, sessionId, cwd) {
101
+ let session = this.sessions.get(userId);
102
+ if (!session) {
103
+ // No process yet — create initial session first
104
+ session = await this.createInitialSession(userId, contextToken);
105
+ this.sessions.set(userId, session);
77
106
  }
78
- const cwd = this.opts.resolveCwd(userId);
79
- this.opts.log(`Starting new session for ${userId} (cwd: ${cwd})`);
80
- // Create a promise that resolves when spawnAndReplace completes
81
- let resolveReady;
82
- const readyPromise = new Promise((resolve) => { resolveReady = resolve; });
83
- const client = new WeChatAcpClient({
84
- sendTyping: () => this.opts.sendTyping(userId, contextToken),
85
- onThoughtFlush: (text) => this.opts.onReply(userId, contextToken, text),
86
- onMediaFlush: (blocks) => this.opts.onMediaReply(userId, contextToken, blocks),
87
- log: (msg) => this.opts.log(`[${userId}] ${msg}`),
88
- showThoughts: this.opts.showThoughts,
89
- });
90
- const placeholder = {
91
- userId,
92
- contextToken,
93
- client,
94
- agentInfo: {
95
- process: null,
96
- connection: null,
97
- sessionId: "",
98
- },
99
- queue: [],
100
- processing: false,
101
- lastActivity: Date.now(),
102
- createdAt: Date.now(),
103
- ready: false,
104
- };
105
- this.sessions.set(userId, placeholder);
106
- // Now spawn the agent in background
107
- this.spawnAndReplace(userId, contextToken, cwd, client, resolveReady).catch((err) => {
108
- this.opts.log(`[${userId}] Failed to spawn agent: ${String(err)}`);
109
- this.sessions.delete(userId);
110
- });
111
- return readyPromise;
107
+ this.opts.log(`[${userId}] Loading session ${sessionId} (cwd: ${cwd})`);
108
+ // Suppress replayed content
109
+ session.client.setReplaying(true);
110
+ try {
111
+ await session.connection.loadSession({
112
+ sessionId,
113
+ cwd,
114
+ mcpServers: [],
115
+ });
116
+ session.activeSessionId = sessionId;
117
+ if (!session.sessions.has(sessionId)) {
118
+ session.sessions.set(sessionId, { cwd });
119
+ }
120
+ }
121
+ finally {
122
+ session.client.setReplaying(false);
123
+ }
124
+ session.contextToken = contextToken;
125
+ session.lastActivity = Date.now();
126
+ this.opts.onSessionReady?.(userId, sessionId);
112
127
  }
113
- async spawnAndReplace(userId, contextToken, cwd, client, onReady) {
114
- const existingSessionId = this.opts.getExistingSessionId?.(userId);
115
- const agentInfo = await spawnAgent({
116
- command: this.opts.agentCommand,
117
- args: this.opts.agentArgs,
128
+ /**
129
+ * Create a new ACP session, returns the new session ID.
130
+ */
131
+ async createNewSession(userId, contextToken, cwd) {
132
+ let session = this.sessions.get(userId);
133
+ if (!session) {
134
+ // No process yet — create initial session first
135
+ session = await this.createInitialSession(userId, contextToken);
136
+ this.sessions.set(userId, session);
137
+ }
138
+ this.opts.log(`[${userId}] Creating new ACP session (cwd: ${cwd})`);
139
+ const result = await session.connection.newSession({
118
140
  cwd,
119
- env: this.opts.agentEnv,
120
- client,
121
- log: (msg) => this.opts.log(`[${userId}] ${msg}`),
122
- existingSessionId,
141
+ mcpServers: [],
123
142
  });
124
- const session = {
125
- userId,
126
- contextToken,
127
- client,
128
- agentInfo,
129
- queue: [],
130
- processing: false,
131
- lastActivity: Date.now(),
132
- createdAt: Date.now(),
133
- ready: true,
134
- };
135
- agentInfo.process.on("exit", () => {
136
- const s = this.sessions.get(userId);
137
- if (s && s.agentInfo.process === agentInfo.process) {
138
- this.opts.log(`Agent process for ${userId} exited, removing session`);
139
- this.sessions.delete(userId);
143
+ session.sessions.set(result.sessionId, { cwd });
144
+ session.activeSessionId = result.sessionId;
145
+ session.contextToken = contextToken;
146
+ session.lastActivity = Date.now();
147
+ return result.sessionId;
148
+ }
149
+ /**
150
+ * List sessions for the current agent.
151
+ */
152
+ async listAgentSessions(userId, cwd) {
153
+ const session = this.sessions.get(userId);
154
+ if (!session) {
155
+ return { sessions: [] };
156
+ }
157
+ if (!session.capabilities.sessionCapabilities?.list) {
158
+ this.opts.log(`[${userId}] Agent does not support listSessions`);
159
+ return { sessions: [] };
160
+ }
161
+ return session.connection.listSessions({ cwd });
162
+ }
163
+ /**
164
+ * Close an ACP session.
165
+ */
166
+ async closeSession(userId, sessionId) {
167
+ const session = this.sessions.get(userId);
168
+ if (!session) {
169
+ return;
170
+ }
171
+ if (!session.capabilities.sessionCapabilities?.close) {
172
+ this.opts.log(`[${userId}] Agent does not support closeSession`);
173
+ return;
174
+ }
175
+ this.opts.log(`[${userId}] Closing session ${sessionId}`);
176
+ await session.connection.unstable_closeSession({ sessionId });
177
+ session.sessions.delete(sessionId);
178
+ // If we closed the active session, switch to another or create a new one
179
+ if (session.activeSessionId === sessionId) {
180
+ const remaining = Array.from(session.sessions.keys());
181
+ if (remaining.length > 0) {
182
+ session.activeSessionId = remaining[0];
140
183
  }
141
- });
142
- this.opts.onSessionReady?.(userId, agentInfo.sessionId);
143
- this.sessions.set(userId, session);
144
- onReady?.();
184
+ else {
185
+ // Create a new session
186
+ const cwd = this.opts.resolveCwd(userId);
187
+ const result = await session.connection.newSession({ cwd, mcpServers: [] });
188
+ session.activeSessionId = result.sessionId;
189
+ session.sessions.set(result.sessionId, { cwd });
190
+ }
191
+ }
145
192
  }
146
193
  getSession(userId) {
147
194
  return this.sessions.get(userId);
148
195
  }
196
+ /**
197
+ * Get available slash commands advertised by the agent.
198
+ */
199
+ getAvailableCommands(userId) {
200
+ const session = this.sessions.get(userId);
201
+ if (!session)
202
+ return [];
203
+ return session.client.getAvailableCommands();
204
+ }
149
205
  getUserBySessionId(acpSessionId) {
150
206
  for (const [userId, session] of this.sessions) {
151
- if (session.agentInfo.sessionId === acpSessionId) {
207
+ if (session.activeSessionId === acpSessionId) {
152
208
  return { userId, contextToken: session.contextToken };
153
209
  }
154
210
  }
@@ -157,9 +213,10 @@ export class SessionManager {
157
213
  get activeCount() {
158
214
  return this.sessions.size;
159
215
  }
160
- async createSession(userId, contextToken, existingSessionId) {
216
+ async createInitialSession(userId, contextToken) {
161
217
  const cwd = this.opts.resolveCwd(userId);
162
- this.opts.log(`Creating new session for ${userId} (cwd: ${cwd}${existingSessionId ? `, resume: ${existingSessionId}` : ""})`);
218
+ const existingSessionId = this.opts.getExistingSessionId?.(userId);
219
+ this.opts.log(`Creating initial session for ${userId} (cwd: ${cwd}${existingSessionId ? `, resume: ${existingSessionId}` : ""})`);
163
220
  const client = new WeChatAcpClient({
164
221
  sendTyping: () => this.opts.sendTyping(userId, contextToken),
165
222
  onThoughtFlush: (text) => this.opts.onReply(userId, contextToken, text),
@@ -176,9 +233,10 @@ export class SessionManager {
176
233
  log: (msg) => this.opts.log(`[${userId}] ${msg}`),
177
234
  existingSessionId,
178
235
  });
236
+ // Set up process exit handler
179
237
  agentInfo.process.on("exit", () => {
180
238
  const s = this.sessions.get(userId);
181
- if (s && s.agentInfo.process === agentInfo.process) {
239
+ if (s && s.process === agentInfo.process) {
182
240
  this.opts.log(`Agent process for ${userId} exited, removing session`);
183
241
  this.sessions.delete(userId);
184
242
  }
@@ -189,7 +247,11 @@ export class SessionManager {
189
247
  userId,
190
248
  contextToken,
191
249
  client,
192
- agentInfo,
250
+ process: agentInfo.process,
251
+ connection: agentInfo.connection,
252
+ capabilities: agentInfo.capabilities,
253
+ activeSessionId: agentInfo.sessionId,
254
+ sessions: new Map([[agentInfo.sessionId, { cwd }]]),
193
255
  queue: [],
194
256
  processing: false,
195
257
  lastActivity: Date.now(),
@@ -210,8 +272,8 @@ export class SessionManager {
210
272
  try {
211
273
  this.opts.sendTyping(session.userId, pending.contextToken).catch(() => { });
212
274
  this.opts.log(`[${session.userId}] Sending prompt to agent...`);
213
- const result = await session.agentInfo.connection.prompt({
214
- sessionId: session.agentInfo.sessionId,
275
+ const result = await session.connection.prompt({
276
+ sessionId: session.activeSessionId,
215
277
  prompt: pending.prompt,
216
278
  });
217
279
  let replyText = await session.client.flush();
@@ -222,13 +284,17 @@ export class SessionManager {
222
284
  replyText += "\n[agent refused to continue]";
223
285
  }
224
286
  this.opts.log(`[${session.userId}] Agent done (${result.stopReason}), reply ${replyText.length} chars`);
287
+ // Append hint if present
288
+ if (pending.hint && replyText.trim()) {
289
+ replyText += `\n\n${pending.hint}`;
290
+ }
225
291
  if (replyText.trim()) {
226
292
  await this.opts.onReply(session.userId, pending.contextToken, replyText);
227
293
  }
228
294
  }
229
295
  catch (err) {
230
296
  this.opts.log(`[${session.userId}] Agent prompt error: ${String(err)}`);
231
- if (session.agentInfo.process.killed || session.agentInfo.process.exitCode !== null) {
297
+ if (session.process.killed || session.process.exitCode !== null) {
232
298
  this.opts.log(`[${session.userId}] Agent process died, removing session`);
233
299
  this.sessions.delete(session.userId);
234
300
  return;
@@ -254,7 +320,7 @@ export class SessionManager {
254
320
  for (const [userId, session] of this.sessions) {
255
321
  if (now - session.lastActivity > this.opts.idleTimeoutMs && !session.processing) {
256
322
  this.opts.log(`Session for ${userId} idle for ${Math.round((now - session.lastActivity) / 60_000)}min, removing`);
257
- killAgent(session.agentInfo.process);
323
+ killAgent(session.process);
258
324
  this.sessions.delete(userId);
259
325
  }
260
326
  }
@@ -270,7 +336,7 @@ export class SessionManager {
270
336
  this.opts.log(`Evicting oldest idle session: ${oldest.userId}`);
271
337
  const session = this.sessions.get(oldest.userId);
272
338
  if (session)
273
- killAgent(session.agentInfo.process);
339
+ killAgent(session.process);
274
340
  this.sessions.delete(oldest.userId);
275
341
  }
276
342
  }
@@ -1 +1 @@
1
- {"version":3,"file":"session.js","sourceRoot":"","sources":["../../../src/acp/session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../../src/acp/session.ts"],"names":[],"mappings":"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"}
@@ -23,6 +23,7 @@ export interface WorkspaceCommand {
23
23
  export interface SessionCommand {
24
24
  kind: "new" | "switch" | "remove" | "list" | "status";
25
25
  name?: string;
26
+ cwdFilter?: string;
26
27
  }
27
28
  export declare function parseWorkspaceCommand(text: string): WorkspaceCommand | null;
28
29
  export declare function parseSessionCommand(text: string): SessionCommand | null;
@@ -50,4 +51,11 @@ export declare function parseHelpCommand(text: string): boolean;
50
51
  * Format the help message listing all available commands.
51
52
  */
52
53
  export declare function formatHelp(): string;
54
+ /**
55
+ * Format help message including OpenCode native slash commands from available_commands_update.
56
+ */
57
+ export declare function formatHelpWithNativeCommands(nativeCommands: Array<{
58
+ name: string;
59
+ description: string;
60
+ }>): string;
53
61
  //# sourceMappingURL=workspace-cmd.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"workspace-cmd.d.ts","sourceRoot":"","sources":["../../../src/adapter/workspace-cmd.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACtD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,KAAK,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,CAAC;IACtD,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CA2C3E;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CA0CvE;AAED,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC,EAC5D,QAAQ,EAAE,MAAM,GAAG,IAAI,GACtB,MAAM,CAUR;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAEnF;AAED,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,EAC1F,QAAQ,EAAE,MAAM,GAAG,IAAI,EACvB,UAAU,GAAE,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAM,GACnD,MAAM,CAuBR;AAED,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,MAAM,GAClB,MAAM,CAER;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAGtD;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAuBnC"}
1
+ {"version":3,"file":"workspace-cmd.d.ts","sourceRoot":"","sources":["../../../src/adapter/workspace-cmd.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACtD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,KAAK,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,CAAC;IACtD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CA2C3E;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CAwDvE;AAED,wBAAgB,mBAAmB,CACjC,UAAU,EAAE,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC,EAC5D,QAAQ,EAAE,MAAM,GAAG,IAAI,GACtB,MAAM,CAUR;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAEnF;AAED,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,EAC1F,QAAQ,EAAE,MAAM,GAAG,IAAI,EACvB,UAAU,GAAE,KAAK,CAAC;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAM,GACnD,MAAM,CAuBR;AAED,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,MAAM,EACrB,WAAW,EAAE,MAAM,GAClB,MAAM,CAER;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAGtD;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAyBnC;AAED;;GAEG;AACH,wBAAgB,4BAA4B,CAAC,cAAc,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,MAAM,CA+BjH"}
@@ -85,8 +85,24 @@ export function parseSessionCommand(text) {
85
85
  return { kind: "remove", name: target };
86
86
  }
87
87
  case "list":
88
- case "ls":
89
- return { kind: "list" };
88
+ case "ls": {
89
+ // /s list no filter
90
+ // /s list --cwd → filter by current workspace
91
+ // /s list /path/to/cwd → filter by specific cwd
92
+ // /s list N → filter by workspace at index N (resolved by bridge)
93
+ const hasCwdFlag = args.includes("--cwd");
94
+ let cwdFilter;
95
+ if (hasCwdFlag) {
96
+ cwdFilter = "__current__";
97
+ }
98
+ else if (args.length > 1) {
99
+ // Take everything after "list" as the filter value
100
+ const filterValue = args.slice(1).join(" ");
101
+ if (filterValue)
102
+ cwdFilter = filterValue;
103
+ }
104
+ return { kind: "list", cwdFilter };
105
+ }
90
106
  case "status":
91
107
  case "current":
92
108
  case "info":
@@ -152,16 +168,18 @@ export function formatHelp() {
152
168
  "── Workspaces ──",
153
169
  " /workspace list List all workspaces",
154
170
  " /workspace add /path [name] Add a workspace",
155
- " /workspace switch <name> Switch to a workspace",
171
+ " /workspace switch <n|path> Switch to workspace by index or path (loads most recent session)",
156
172
  " /workspace remove <name> Remove a workspace",
157
173
  " /workspace status Show current workspace",
158
174
  " (shorthand: /ws ...)",
159
175
  "",
160
176
  "── Sessions ──",
161
177
  " /session new [name] Create a new session",
162
- " /session switch <name> Switch to an existing session",
178
+ " /session switch <n|slug> Switch to session by index or slug/title",
163
179
  " /session remove <name> Remove a session",
164
180
  " /session list List all sessions",
181
+ " /session list --cwd List sessions in current workspace",
182
+ " /session list <path|n> List sessions by workspace path or index",
165
183
  " /session status Show current session",
166
184
  " (shorthand: /s ...)",
167
185
  "",
@@ -169,4 +187,37 @@ export function formatHelp() {
169
187
  " /help Show this help message",
170
188
  ].join("\n");
171
189
  }
190
+ /**
191
+ * Format help message including OpenCode native slash commands from available_commands_update.
192
+ */
193
+ export function formatHelpWithNativeCommands(nativeCommands) {
194
+ const lines = [
195
+ "📖 Available Commands:",
196
+ "",
197
+ "── Bridge Commands ──",
198
+ " /workspace list List all workspaces",
199
+ " /workspace add /path [name] Add a workspace",
200
+ " /workspace switch <n|path> Switch to workspace by index or path",
201
+ " /workspace status Show current workspace",
202
+ " (shorthand: /ws ...)",
203
+ "",
204
+ " /session new Create a new session",
205
+ " /session switch <n|slug> Switch to session by index or slug/title",
206
+ " /session list List all sessions",
207
+ " /session list --cwd List sessions in current workspace",
208
+ " /session list <path|n> List sessions by workspace path or index",
209
+ " /session status Show current session",
210
+ " (shorthand: /s ...)",
211
+ "",
212
+ " /help Show this help message",
213
+ ];
214
+ if (nativeCommands.length > 0) {
215
+ lines.push("");
216
+ lines.push("── OpenCode Agent Commands ──");
217
+ for (const cmd of nativeCommands) {
218
+ lines.push(` /${cmd.name}`);
219
+ }
220
+ }
221
+ return lines.join("\n");
222
+ }
172
223
  //# sourceMappingURL=workspace-cmd.js.map