@townco/agent 0.1.19 → 0.1.21
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/dist/acp-server/adapter.js +77 -73
- package/dist/acp-server/http.js +412 -173
- package/dist/definition/index.d.ts +3 -0
- package/dist/definition/index.js +11 -1
- package/dist/dev-agent/index.d.ts +2 -0
- package/dist/dev-agent/index.js +18 -0
- package/dist/index.js +14 -14
- package/dist/runner/agent-runner.d.ts +20 -3
- package/dist/runner/agent-runner.js +4 -4
- package/dist/runner/langchain/index.d.ts +6 -5
- package/dist/runner/langchain/index.js +58 -17
- package/dist/runner/langchain/tools/filesystem.d.ts +66 -0
- package/dist/runner/langchain/tools/filesystem.js +261 -0
- package/dist/runner/tools.d.ts +5 -2
- package/dist/runner/tools.js +11 -1
- package/dist/templates/index.d.ts +3 -0
- package/dist/templates/index.js +11 -2
- package/dist/test-script.js +12 -12
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.js +1 -0
- package/dist/utils/logger.d.ts +39 -0
- package/dist/utils/logger.js +175 -0
- package/index.ts +7 -6
- package/package.json +10 -5
- package/templates/index.ts +14 -3
|
@@ -1,77 +1,81 @@
|
|
|
1
1
|
import * as acp from "@agentclientprotocol/sdk";
|
|
2
2
|
/** Adapts an Agent to speak the ACP protocol */
|
|
3
3
|
export class AgentAcpAdapter {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
4
|
+
connection;
|
|
5
|
+
sessions;
|
|
6
|
+
agent;
|
|
7
|
+
constructor(agent, connection) {
|
|
8
|
+
this.connection = connection;
|
|
9
|
+
this.sessions = new Map();
|
|
10
|
+
this.agent = agent;
|
|
11
|
+
}
|
|
12
|
+
async initialize(_params) {
|
|
13
|
+
return {
|
|
14
|
+
protocolVersion: acp.PROTOCOL_VERSION,
|
|
15
|
+
agentCapabilities: {
|
|
16
|
+
loadSession: false,
|
|
17
|
+
},
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
async newSession(_params) {
|
|
21
|
+
const sessionId = Math.random().toString(36).substring(2);
|
|
22
|
+
this.sessions.set(sessionId, {
|
|
23
|
+
pendingPrompt: null,
|
|
24
|
+
messages: [],
|
|
25
|
+
});
|
|
26
|
+
return {
|
|
27
|
+
sessionId,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
async authenticate(_params) {
|
|
31
|
+
// No auth needed - return empty response
|
|
32
|
+
return {};
|
|
33
|
+
}
|
|
34
|
+
async setSessionMode(_params) {
|
|
35
|
+
// Session mode changes are no-op for us (not related to coding)
|
|
36
|
+
return {};
|
|
37
|
+
}
|
|
38
|
+
async prompt(params) {
|
|
39
|
+
let session = this.sessions.get(params.sessionId);
|
|
40
|
+
// If session not found (e.g., after server restart), create a new one
|
|
41
|
+
if (!session) {
|
|
42
|
+
console.log(`Session ${params.sessionId} not found, creating new session`);
|
|
43
|
+
session = {
|
|
44
|
+
pendingPrompt: null,
|
|
45
|
+
messages: [],
|
|
46
|
+
};
|
|
47
|
+
this.sessions.set(params.sessionId, session);
|
|
48
|
+
}
|
|
49
|
+
session.pendingPrompt?.abort();
|
|
50
|
+
session.pendingPrompt = new AbortController();
|
|
51
|
+
// Generate a unique messageId for this assistant response
|
|
52
|
+
const messageId = Math.random().toString(36).substring(2);
|
|
53
|
+
try {
|
|
54
|
+
for await (const msg of this.agent.invoke({
|
|
55
|
+
prompt: params.prompt,
|
|
56
|
+
sessionId: params.sessionId,
|
|
57
|
+
messageId,
|
|
58
|
+
})) {
|
|
59
|
+
// The agent may emit extended types (like tool_output) that aren't in ACP SDK yet
|
|
60
|
+
// The http transport will handle routing these appropriately
|
|
61
|
+
this.connection.sessionUpdate({
|
|
62
|
+
sessionId: params.sessionId,
|
|
63
|
+
update: msg,
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
catch (err) {
|
|
68
|
+
if (session.pendingPrompt.signal.aborted) {
|
|
69
|
+
return { stopReason: "cancelled" };
|
|
70
|
+
}
|
|
71
|
+
throw err;
|
|
72
|
+
}
|
|
73
|
+
session.pendingPrompt = null;
|
|
74
|
+
return {
|
|
75
|
+
stopReason: "end_turn",
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
async cancel(params) {
|
|
79
|
+
this.sessions.get(params.sessionId)?.pendingPrompt?.abort();
|
|
80
|
+
}
|
|
77
81
|
}
|