Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
108 commits
Select commit Hold shift + click to select a range
ddf106e
fix(ai-native): localize ACP chat input placeholder
lulusir May 19, 2026
570be42
docs: update ACP refactor design to use @agentclientprotocol/sdk
lulusir May 20, 2026
89997e5
docs: add ACP Node layer refactor implementation plan
lulusir May 20, 2026
8b4023c
fix(plan): address code review findings for ACP Node SDK refactor plan
lulusir May 20, 2026
660fde1
fix(plan): correct OpenSumi RPC architecture description — single WS,…
lulusir May 20, 2026
d20cf71
fix(plan): rework AcpThread to use DI factory instead of manual new
lulusir May 20, 2026
9532dd8
feat(ai-native): add AcpThread entity with process lifecycle, SDK con…
lulusir May 20, 2026
e945ddc
fix(ai-native): align AcpThread with spec — entry types, events, and API
lulusir May 20, 2026
17caef2
feat(ai-native): add AcpThreadFactory DI provider for creating thread…
lulusir May 20, 2026
4386921
refactor(ai-native): align handler interfaces with ACP Node SDK refac…
lulusir May 20, 2026
00263d9
feat(ai-native): restructure permission system for multi-session ACP …
lulusir May 20, 2026
faabcad
feat(ai-native): rewrite AcpAgentService with thread pool pattern
lulusir May 20, 2026
d0f025d
fix(acp): pass sessionId to requestPermission in agent-request handler
lulusir May 20, 2026
6b26af2
refactor(ai-native): wire PermissionRoutingService into AcpThread and…
lulusir May 20, 2026
99b81db
fix(ai-native): use agent-generated sessionId in AcpAgentService.crea…
lulusir May 20, 2026
aba8fd4
feat(ai-native): add missing session methods to AcpThread
lulusir May 21, 2026
8be6197
refactor(ai-native): remove AcpCliClientService and CliAgentProcessMa…
lulusir May 21, 2026
79e62c9
refactor(ai-native): move notification-to-AgentUpdate mapping from Ac…
lulusir May 21, 2026
54bd6d8
docs: add implementation plan for AcpThread full delegation
lulusir May 21, 2026
8cb4248
fix(ai-native): delegate setSessionMode to AcpThread instead of log-only
lulusir May 21, 2026
7cff924
fix(ai-native): add error handling to setSessionMode delegation
lulusir May 21, 2026
c50ca9b
feat(ai-native): add loadSessionOrNew with fallback to new session
lulusir May 21, 2026
55980c7
fix(ai-native): proper cleanup on loadSessionOrNew failure
lulusir May 21, 2026
efe6bf6
feat(ai-native): add setSessionConfigOption delegation to AcpThread
lulusir May 21, 2026
7366fa9
fix(ai-native): add error handling to setSessionConfigOption delegation
lulusir May 21, 2026
b90b459
feat(ai-native): add fork/resume/close/setSessionModel delegation to …
lulusir May 21, 2026
240783b
fix(ai-native): add error handling to unstable session methods
lulusir May 21, 2026
007f25e
feat(ai-native): add proxy methods for new AcpAgentService session op…
lulusir May 21, 2026
8ffb241
fix(ai-native): delegate listSessions to all active threads and dedup…
lulusir May 21, 2026
7f9336c
refactor(ai-native): remove as any from listSessions, use proper Sess…
lulusir May 21, 2026
65804f2
fix(ai-native): preserve nextCursor in listSessions for single-thread…
lulusir May 21, 2026
0767130
feat(ai-native): add cwd getter to AcpThread and include cwd in log s…
lulusir May 21, 2026
c94804c
fix(ai-native): pass cwd to listSessions in AcpCliBackService
lulusir May 21, 2026
a1e0947
fix(ai-native): show loaded session messages instead of welcome page
lulusir May 21, 2026
e1629c0
fix(ai-native): only trigger slash dropdown when / is first non-white…
lulusir May 21, 2026
5ea8c23
fix(ai-native): fix type mismatches in resumeSession and setSessionCo…
lulusir May 21, 2026
dc2f0d4
fix(ai-native): register sessions in PermissionRoutingService and uni…
lulusir May 22, 2026
5e4eda4
docs: add design spec for session-bound permission dialogs
lulusir May 22, 2026
fde5050
docs: add implementation plan for session-bound permission dialogs
lulusir May 22, 2026
3842be1
feat(ai-native): add active session tracking to AcpPermissionBridgeSe…
lulusir May 22, 2026
b7ebaf8
feat(ai-native): add session-scoped dialog retrieval to PermissionDia…
lulusir May 22, 2026
39237f0
feat(ai-native): filter permission dialogs by active session
lulusir May 22, 2026
fba2c57
feat(ai-native): notify permission bridge on session switch
lulusir May 22, 2026
fc1913e
fix(ai-native): extract prefix helper and notify bridge in clearSessi…
lulusir May 22, 2026
6031c43
test(ai-native): add session-bound permission dialog tests
lulusir May 22, 2026
bf7af9c
fix(ai-native): address review feedback for session-bound permission …
lulusir May 22, 2026
af08b17
feat(ai-native): add ThreadStatus and IChatThreadStatus types
lulusir May 22, 2026
0f3b422
fix(ai-native): clear session dialogs when session is deleted
lulusir May 22, 2026
3c65dcf
feat(ai-native): inject threadStatus into AgentUpdate stream
lulusir May 22, 2026
43cc145
feat(ai-native): emit IChatThreadStatus in RPC response stream
lulusir May 22, 2026
56b534e
feat(ai-native): add threadStatus state and onThreadStatusChange even…
lulusir May 22, 2026
51de1ca
feat(ai-native): render thread status icons in ACP chat history
lulusir May 22, 2026
cc5c56f
feat(ai-native): handle IChatThreadStatus in AcpChatAgent
lulusir May 22, 2026
7f0131e
feat(ai-native): subscribe to threadStatus changes in chat history
lulusir May 22, 2026
8b9c24f
docs: add acceptance test cases for session-bound permission dialogs
lulusir May 22, 2026
77d7155
fix(ai-native): lazy-resolve RPC client to fix 'No active RPC client'…
lulusir May 22, 2026
550a7fb
fix(ai-native): move PermissionRoutingService to backServices to fix …
lulusir May 22, 2026
38e3354
fix(ai-native): bridge RPC client across parent/child injector scopes…
lulusir May 22, 2026
2d3cae4
fix(ai-native): fix compilation errors and add WebMCP test mock fix
lulusir May 22, 2026
503df7b
fix(ai-native): fix thread status not showing in chat history and per…
lulusir May 24, 2026
e38e658
docs(superpowers): add dev-loop skill design spec
lulusir May 25, 2026
5bb362c
docs(superpowers): add dev-loop skill implementation plan
lulusir May 25, 2026
3d90b63
test(bdd): migrate CDP/WebMCP scenarios from specs to test/bdd
lulusir May 25, 2026
55c2b91
refactor(skills): merge cdp-webmcp-bridge into verification-scenarios
lulusir May 25, 2026
ae6d4fa
feat(skills): add dev-loop orchestrator skill
lulusir May 25, 2026
ff87beb
fix(skills): address code review findings for dev-loop skill
lulusir May 25, 2026
8e9b9b7
fix(skills): address final review blocking issues
lulusir May 25, 2026
4ce6474
fix(acp): unify thread status icons with spinning animation for worki…
lulusir May 25, 2026
68595e1
docs(superpowers): add background permission notification design spec
lulusir May 26, 2026
8f69431
feat(acp): add pending permission index to bridge service
lulusir May 26, 2026
d20791d
feat(acp): register nodePath and agents preference schema entries
lulusir May 26, 2026
9b09063
fix(acp): extract cleanupPendingIndex and add defensive event fire
lulusir May 26, 2026
4baa4f0
style(acp): add pending permission badge styles
lulusir May 26, 2026
4a70eb3
feat(acp): add agentId and nodePath to thread interfaces, remove debu…
lulusir May 26, 2026
f7a1790
feat(acp): render pending permission icon and badge in AcpChatHistory
lulusir May 26, 2026
d4461f7
fix(acp): use correct CSS variable for pending permission key icon
lulusir May 26, 2026
9918289
feat(acp): implement buildAcpAgentProcessConfig browser pure function
lulusir May 26, 2026
e1f7fac
feat(acp): sync pending permission icon/badge to ChatHistory.acp
lulusir May 26, 2026
a3525d9
feat(acp): implement resolveAgentSpawnConfig node pure function
lulusir May 26, 2026
e35c76b
feat(acp): wire pending permission badge into chat view header
lulusir May 26, 2026
f77ddf6
fix(acp): replace startProcess with resolveAgentSpawnConfig, clean de…
lulusir May 26, 2026
4fdc89f
feat(acp): pass agentId and nodePath through AcpThreadRuntimeConfig
lulusir May 26, 2026
050eeaf
fix(acp): remove unused pendingPermissionBadge from base ChatHistory …
lulusir May 26, 2026
7ee51b2
feat(acp): wire buildAcpAgentProcessConfig into DefaultACPConfigProvider
lulusir May 26, 2026
2cdc4a9
feat(acp): complete pending permission badge on base ChatHistory
lulusir May 26, 2026
8de6865
feat(acp): complete ACP v2 implementation - path config, test fixes, …
lulusir May 26, 2026
eeaeb4e
docs: add ACP WebMCP groups design spec
lulusir May 26, 2026
43b402f
docs: address review feedback on ACP WebMCP groups design
lulusir May 26, 2026
ba1035e
docs: add ACP WebMCP groups implementation plan
lulusir May 26, 2026
ffee9cc
feat(acp): background session permission notification in history list
lulusir May 26, 2026
9b82ab0
feat(acp): add WebMCP group types and RPC interface definitions
lulusir May 27, 2026
4009e79
feat(acp): add shared WebMCP utility helpers
lulusir May 27, 2026
29abb9b
feat(acp): add browser-side WebMCP group registry
lulusir May 27, 2026
ab70145
feat(acp): add WebMCP RPC bridge services (browser + node)
lulusir May 27, 2026
b7309db
feat(acp): add Node-side WebMCP extension method handler
lulusir May 27, 2026
076b7b1
feat(acp): hook WebMCP handler into AcpThread extMethod and add capab…
lulusir May 27, 2026
45e4bd0
feat(acp): wire up DI registration for WebMCP group services
lulusir May 27, 2026
4151d96
feat(acp): add file WebMCP group definition
lulusir May 27, 2026
551bd4c
feat(acp): add terminal WebMCP group definition
lulusir May 27, 2026
9e0455a
feat(acp): add editor WebMCP group definition
lulusir May 27, 2026
837ad7b
feat(acp): register file, terminal, editor WebMCP groups in contribution
lulusir May 27, 2026
252a930
test(acp): add AcpWebMcpHandler unit tests
lulusir May 27, 2026
81d407a
fix(acp): resolve compilation errors in WebMCP groups implementation
lulusir May 27, 2026
afea8a7
fix(ai-native): preserve ACP error messages
lulusir May 27, 2026
9f018d9
fix(acp): use lazy initialization for WebMCP handler to fix RPC timin…
lulusir May 27, 2026
87d4141
feat: pass MCP servers into ACP sessions
lulusir May 27, 2026
97c61d4
feat(acp): enhance WebMCP handler with tool details and improve RPC r…
lulusir May 27, 2026
3e0ee6e
chore: remove outdated superpowers plans/specs and refine WebMCP handler
lulusir May 27, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -99,4 +99,8 @@ tools/workspace
.ipynb_checkpoints

*.tsbuildinfo
.env
.env

# Claude Code
.claude/
.claudebak
Original file line number Diff line number Diff line change
@@ -0,0 +1,130 @@
import { EnvVariable, McpServer } from '@opensumi/ide-core-common/lib/types/ai-native/acp-types';

import { buildAcpAgentProcessConfig } from '../../../lib/browser/acp/build-agent-process-config';

describe('buildAcpAgentProcessConfig', () => {
const defaultRegistration = {
command: '/usr/local/bin/agent',
args: ['--stdio'],
env: [{ name: 'API_KEY', value: 'default' }] as EnvVariable[],
cwd: '/workspace',
};

const defaultPrefs = {
nodePath: '',
agents: {},
};

it('returns registration values when user has no overrides', () => {
const result = buildAcpAgentProcessConfig({
agentId: 'test-agent',
registration: defaultRegistration,
userPreferences: defaultPrefs,
});
expect(result).toEqual({
agentId: 'test-agent',
command: '/usr/local/bin/agent',
args: ['--stdio'],
env: [{ name: 'API_KEY', value: 'default' }],
cwd: '/workspace',
nodePath: undefined,
});
});

it('overrides command when user provides it', () => {
const result = buildAcpAgentProcessConfig({
agentId: 'test-agent',
registration: defaultRegistration,
userPreferences: {
...defaultPrefs,
agents: { 'test-agent': { command: '/custom/bin/agent' } },
},
});
expect(result.command).toBe('/custom/bin/agent');
expect(result.args).toEqual(['--stdio']);
});

it('REPLACES args when user provides them', () => {
const result = buildAcpAgentProcessConfig({
agentId: 'test-agent',
registration: defaultRegistration,
userPreferences: {
...defaultPrefs,
agents: { 'test-agent': { args: ['--debug', '--verbose'] } },
},
});
expect(result.args).toEqual(['--debug', '--verbose']);
});

it('MERGE env: user keys override registration defaults', () => {
const result = buildAcpAgentProcessConfig({
agentId: 'test-agent',
registration: {
...defaultRegistration,
env: [
{ name: 'API_KEY', value: 'default' },
{ name: 'KEEP', value: 'yes' },
],
},
userPreferences: {
...defaultPrefs,
agents: {
'test-agent': { env: { API_KEY: 'user-value', NEW_KEY: 'new' } },
},
},
});
const envMap = new Map(result.env!.map((v) => [v.name, v.value]));
expect(envMap.get('API_KEY')).toBe('user-value');
expect(envMap.get('KEEP')).toBe('yes');
expect(envMap.get('NEW_KEY')).toBe('new');
});

it('uses registration defaults when agentId not in user map', () => {
const result = buildAcpAgentProcessConfig({
agentId: 'unknown-agent',
registration: defaultRegistration,
userPreferences: {
...defaultPrefs,
agents: { 'other-agent': { command: '/x' } },
},
});
expect(result.command).toBe('/usr/local/bin/agent');
expect(result.args).toEqual(['--stdio']);
});

it('sets nodePath when user provides it', () => {
const result = buildAcpAgentProcessConfig({
agentId: 'test-agent',
registration: defaultRegistration,
userPreferences: { nodePath: '/usr/local/bin/node', agents: {} },
});
expect(result.nodePath).toBe('/usr/local/bin/node');
});

it('sets nodePath to undefined when user preference is empty string', () => {
const result = buildAcpAgentProcessConfig({
agentId: 'test-agent',
registration: defaultRegistration,
userPreferences: { nodePath: '', agents: {} },
});
expect(result.nodePath).toBeUndefined();
});

it('includes ACP MCP servers when provided', () => {
const mcpServers: McpServer[] = [
{
name: 'filesystem',
command: 'npx',
args: ['-y', '@modelcontextprotocol/server-filesystem', '/workspace'],
env: [],
},
];
const result = buildAcpAgentProcessConfig({
agentId: 'test-agent',
registration: defaultRegistration,
userPreferences: defaultPrefs,
mcpServers,
});
expect(result.mcpServers).toBe(mcpServers);
});
});
Loading
Loading