acp-chat 0.2.6 → 0.2.7

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.
@@ -89,4 +89,3 @@ export interface ACPClientOptions {
89
89
  clientSessionId?: string;
90
90
  }
91
91
  export declare function createACPClient(ndjsonClient: NDJSONClient, opts: ACPClientOptions): ACPClient;
92
- //# sourceMappingURL=acp-client.d.ts.map
package/dist/cli.d.ts CHANGED
@@ -1,3 +1,2 @@
1
1
  #!/usr/bin/env node
2
2
  export {};
3
- //# sourceMappingURL=cli.d.ts.map
package/dist/cli.js CHANGED
@@ -1,92 +1,6 @@
1
1
  #!/usr/bin/env node
2
- // Copyright 2026 Raman Marozau <raman@worktif.com>
3
- // SPDX-License-Identifier: Apache-2.0
4
- //
5
- // Licensed under the Apache License, Version 2.0 (the "License");
6
- // you may not use this file except in compliance with the License.
7
- // You may obtain a copy of the License at
8
- //
9
- // http://www.apache.org/licenses/LICENSE-2.0
10
- //
11
- // Unless required by applicable law or agreed to in writing, software
12
- // distributed under the License is distributed on an "AS IS" BASIS,
13
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
- // See the License for the specific language governing permissions and
15
- // limitations under the License.
16
- // ============================================================================
17
- // ACP Chat CLI — single-turn tool for agent-to-agent dialogue
18
- // ============================================================================
19
- // Usage:
20
- // acp-chat new "Hello" — create session + send
21
- // acp-chat <clientSessionId> <sessionId> "Hello" — continue session
22
- import { NDJSONClient } from './ndjson-client.js';
23
- import { createACPClient } from './acp-client.js';
24
- const BUS_ADDRESS = process.env['ACP_BUS_ADDRESS'] ?? '127.0.0.1:9800';
25
- const AGENT_ID = process.env['ACP_AGENT_ID'] ?? 'codex-acp';
26
- async function main() {
27
- const args = process.argv.slice(2);
28
- let clientSessionId;
29
- let sessionId;
30
- let message;
31
- if (args[0] === 'new') {
32
- // acp-chat new "message"
33
- if (args.length < 2) {
34
- console.error('Usage: acp-chat new "<message>"');
35
- process.exit(1);
36
- }
37
- message = args[1];
38
- }
39
- else {
40
- // acp-chat <clientSessionId> <sessionId> "message"
41
- if (args.length < 3) {
42
- console.error('Usage: acp-chat <clientSessionId> <sessionId> "<message>"');
43
- process.exit(1);
44
- }
45
- clientSessionId = args[0];
46
- sessionId = args[1];
47
- message = args[2];
48
- }
49
- const ndjsonClient = new NDJSONClient({
50
- address: BUS_ADDRESS,
51
- connectionType: 'tcp',
52
- maxReconnectAttempts: 3,
53
- baseReconnectDelayMs: 500,
54
- maxReconnectDelayMs: 5000,
55
- });
56
- try {
57
- await ndjsonClient.connect();
58
- const client = createACPClient(ndjsonClient, {
59
- agentId: AGENT_ID,
60
- requestTimeoutMs: 5 * 60 * 1000,
61
- clientInfo: { name: 'acp-chat-cli', version: '1.0.0' },
62
- clientSessionId,
63
- });
64
- client.on('update', (_sid, update) => {
65
- if (update.sessionUpdate === 'agent_message_chunk') {
66
- process.stdout.write(update.content.text);
67
- }
68
- });
69
- await client.initialize();
70
- if (!sessionId) {
71
- const session = await client.sessionNew();
72
- sessionId = session.sessionId;
73
- console.error(`CLIENT_SESSION_ID=${session.clientSessionId}`);
74
- console.error(`SESSION_ID=${sessionId}`);
75
- }
76
- else {
77
- console.error(`CLIENT_SESSION_ID=${clientSessionId}`);
78
- console.error(`SESSION_ID=${sessionId} (continued)`);
79
- }
80
- const result = await client.sessionPrompt(sessionId, message);
81
- process.stdout.write('\n');
82
- console.error(`STOP=${result.stopReason} UPDATES=${result.updates.length}`);
83
- }
84
- finally {
85
- await ndjsonClient.close();
86
- }
87
- }
88
- main().catch((err) => {
89
- console.error('ERROR:', err.message);
90
- process.exit(1);
91
- });
92
- //# sourceMappingURL=cli.js.map
2
+ #!/usr/bin/env node
3
+ import{EventEmitter as J}from"node:events";import*as P from"node:net";function O(n){let e=JSON.stringify(n);if(e===void 0)throw new TypeError("Value is not JSON-serializable");return e+`
4
+ `}function N(n){return JSON.parse(n)}var y={CAPACITY_EXCEEDED:-32e3,REQUEST_TIMEOUT:-32001,DISCONNECTED:-32004},C=class extends Error{code;data;constructor(e,t,s){super(t),this.name="ACPError",this.code=e,this.data=s}},S=class extends C{constructor(e="Capacity exceeded",t){super(y.CAPACITY_EXCEEDED,e,t),this.name="CapacityExceededError"}},x=class extends C{constructor(e="Request timeout",t){super(y.REQUEST_TIMEOUT,e,t),this.name="RequestTimeoutError"}},T=class extends C{constructor(e="Disconnected",t){super(y.DISCONNECTED,e,t),this.name="DisconnectedError"}};var v=class extends J{opts;socket=null;state="disconnected";reconnectAttempt=0;reconnectTimer=null;lineBuffer="";closedByUser=!1;constructor(e){super(),this.opts=e}connect(){return this.state==="connected"||this.state==="connecting"?Promise.resolve():this.state==="closed"?Promise.reject(new Error("Client has been closed")):(this.closedByUser=!1,this.reconnectAttempt=0,this.createConnection())}send(e){if(this.state!=="connected"||!this.socket)throw new T("Cannot send: not connected to stdio Bus");this.socket.write(O(e))}close(){this.closedByUser=!0,this.clearReconnectTimer();let e=this.state;return this.state="closed",e==="closed"||e==="disconnected"?Promise.resolve():new Promise(t=>{if(this.socket){let s=this.socket;if(this.socket=null,s.destroyed){t();return}s.once("close",()=>t()),s.destroy()}else t()})}isConnected(){return this.state==="connected"}getState(){return this.state}createConnection(){return new Promise((e,t)=>{this.state=this.reconnectAttempt===0?"connecting":"reconnecting",this.lineBuffer="";let s=this.buildConnectOptions(),c=P.createConnection(s);this.socket=c;let l=()=>{a(),this.state="connected",this.reconnectAttempt=0,this.wireSocketEvents(c),e()},o=d=>{a(),this.reconnectAttempt===0&&this.state==="connecting"&&(this.state="disconnected",t(d))},a=()=>{c.removeListener("connect",l),c.removeListener("error",o)};c.once("connect",l),c.once("error",o)})}buildConnectOptions(){if(this.opts.connectionType==="unix")return{path:this.opts.address};let e=this.opts.address.lastIndexOf(":");if(e===-1)throw new Error(`Invalid TCP address: expected "host:port", got "${this.opts.address}"`);let t=this.opts.address.slice(0,e),s=parseInt(this.opts.address.slice(e+1),10);if(isNaN(s))throw new Error(`Invalid TCP port in address "${this.opts.address}"`);return{host:t,port:s}}wireSocketEvents(e){e.on("data",t=>this.handleData(t.toString("utf-8"))),e.on("error",t=>this.emit("error",t)),e.on("close",()=>{this.closedByUser||this.state==="closed"||(this.state="disconnected",this.emit("disconnect"),this.scheduleReconnect())})}handleData(e){this.lineBuffer+=e;let t;for(;(t=this.lineBuffer.indexOf(`
5
+ `))!==-1;){let s=this.lineBuffer.slice(0,t);if(this.lineBuffer=this.lineBuffer.slice(t+1),s.length!==0)try{this.emit("message",N(s))}catch(c){this.emit("framingError",s,c instanceof Error?c:new Error(String(c)))}}}scheduleReconnect(){if(this.closedByUser||this.state==="closed")return;if(this.reconnectAttempt>=this.opts.maxReconnectAttempts){this.state="disconnected",this.emit("disconnect");return}this.state="reconnecting";let e=this.reconnectAttempt++,t=Math.random()*this.opts.baseReconnectDelayMs,s=Math.min(this.opts.baseReconnectDelayMs*Math.pow(2,e)+t,this.opts.maxReconnectDelayMs);this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=null,this.emit("reconnect",this.reconnectAttempt),this.attemptReconnect()},s)}attemptReconnect(){if(this.closedByUser||this.state==="closed")return;this.lineBuffer="";let e=P.createConnection(this.buildConnectOptions());this.socket=e,e.once("connect",()=>{e.removeAllListeners("error"),this.state="connected",this.reconnectAttempt=0,this.wireSocketEvents(e)}),e.once("error",()=>{e.destroy(),this.scheduleReconnect()})}clearReconnectTimer(){this.reconnectTimer!==null&&(clearTimeout(this.reconnectTimer),this.reconnectTimer=null)}};var $={maxPending:4096,defaultTimeoutMs:3e4},I=1e3;function A(n){let e={...$,...n};e.defaultTimeoutMs<I&&(e.defaultTimeoutMs=I);let t=new Map;function s(o,a){if(t.size>=e.maxPending)return Promise.reject(new S(`Maximum pending requests (${e.maxPending}) exceeded`));let d=a??e.defaultTimeoutMs;return d<I&&(d=I),new Promise((h,f)=>{let R=setTimeout(()=>{t.delete(o),f(new x(`Request ${String(o)} timed out after ${d}ms`,{id:o,timeoutMs:d}))},d);R.unref&&R.unref(),t.set(o,{id:o,registeredAt:Date.now(),timeoutMs:d,timeoutHandle:R,resolve:h,reject:f})})}function c(o){let a=t.get(o.id);return a?(clearTimeout(a.timeoutHandle),t.delete(o.id),a.resolve(o),!0):!1}function l(o){for(let[,a]of t)clearTimeout(a.timeoutHandle),a.reject(o);t.clear()}return{register:s,resolve:c,cancelAll:l,pendingCount:()=>t.size,hasPending:o=>t.has(o)}}import{EventEmitter as q}from"node:events";function D(n,e){let{agentId:t,requestTimeoutMs:s=12e4,clientInfo:c}=e,l=new q,o=A({defaultTimeoutMs:s}),a=1,d=e.clientSessionId??`client-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,h=new Map;n.on("message",r=>{let i=r;if(!(!i||i.jsonrpc!=="2.0")){if("id"in i&&("result"in i||"error"in i)){o.resolve(i);return}if("method"in i&&!("id"in i)){let p=i.method,u=i.params;if(p==="session/update"&&u){let g=u.sessionId,E=u.update,w=h.get(g);w&&w.push(E),l.emit("update",g,E)}l.emit("notification",p,u)}}});function f(r,i){let p=a++,u={jsonrpc:"2.0",id:p,method:r,agentId:t,sessionId:d,params:i},g=o.register(p);return n.send(u),g}async function R(){let r=await f("initialize",{protocolVersion:1,clientCapabilities:{},clientInfo:c??{name:"acp-chat",version:"1.0.0"}});if(r.error)throw new Error(`initialize: [${r.error.code}] ${r.error.message}`);return r.result}async function U(r){let i={cwd:process.cwd(),mcpServers:[]};r?.length&&(i.configOptions=r);let p=await f("session/new",i);if(p.error)throw new Error(`session/new: [${p.error.code}] ${p.error.message}`);return{...p.result,clientSessionId:d}}async function M(r,i,p="user"){h.set(r,[]);let u=await f("session/prompt",{sessionId:r,prompt:[{type:"text",role:p,text:i}]});await new Promise(m=>setTimeout(m,200));let g=h.get(r)??[];if(h.delete(r),u.error)throw new Error(`session/prompt: [${u.error.code}] ${u.error.message}`);let E=u.result,w=[];for(let m of g)if(m.sessionUpdate==="agent_message_chunk"&&m.content?.text&&w.push(m.content.text),m.sessionUpdate==="tool_call_update"&&m.content)for(let k of m.content)k.content?.text&&w.push(k.content.text);return{stopReason:E.stopReason,updates:g,text:w.join("")}}async function _(r,i){let p=await f("session/configure",{sessionId:r,options:i});if(p.error)throw new Error(`session/configure: [${p.error.code}] ${p.error.message}`)}function b(r){n.send({jsonrpc:"2.0",method:"session/cancel",params:{sessionId:r},agentId:t,sessionId:d})}return Object.assign(l,{initialize:R,sessionNew:U,sessionPrompt:M,sessionConfigure:_,sessionCancel:b,requestTracker:o})}var B=process.env.ACP_BUS_ADDRESS??"127.0.0.1:9800",j=process.env.ACP_AGENT_ID??"codex-acp";async function z(){let n=process.argv.slice(2),e,t,s;n[0]==="new"?(n.length<2&&(console.error('Usage: acp-chat new "<message>"'),process.exit(1)),s=n[1]):(n.length<3&&(console.error('Usage: acp-chat <clientSessionId> <sessionId> "<message>"'),process.exit(1)),e=n[0],t=n[1],s=n[2]);let c=new v({address:B,connectionType:"tcp",maxReconnectAttempts:3,baseReconnectDelayMs:500,maxReconnectDelayMs:5e3});try{await c.connect();let l=D(c,{agentId:j,requestTimeoutMs:300*1e3,clientInfo:{name:"acp-chat-cli",version:"1.0.0"},clientSessionId:e});if(l.on("update",(a,d)=>{d.sessionUpdate==="agent_message_chunk"&&process.stdout.write(d.content.text)}),await l.initialize(),t)console.error(`CLIENT_SESSION_ID=${e}`),console.error(`SESSION_ID=${t} (continued)`);else{let a=await l.sessionNew();t=a.sessionId,console.error(`CLIENT_SESSION_ID=${a.clientSessionId}`),console.error(`SESSION_ID=${t}`)}let o=await l.sessionPrompt(t,s);process.stdout.write(`
6
+ `),console.error(`STOP=${o.stopReason} UPDATES=${o.updates.length}`)}finally{await c.close()}}z().catch(n=>{console.error("ERROR:",n.message),process.exit(1)});
package/dist/errors.d.ts CHANGED
@@ -18,4 +18,3 @@ export declare class RequestTimeoutError extends ACPError {
18
18
  export declare class DisconnectedError extends ACPError {
19
19
  constructor(message?: string, data?: unknown);
20
20
  }
21
- //# sourceMappingURL=errors.d.ts.map
package/dist/index.d.ts CHANGED
@@ -3,4 +3,3 @@ export { createACPClient, type ACPClient, type ACPClientOptions, type SessionUpd
3
3
  export { createRequestTracker, type RequestTracker, type RequestTrackerOptions } from './request-tracker.js';
4
4
  export { DisconnectedError, CapacityExceededError, RequestTimeoutError, ACPError, ErrorCodes } from './errors.js';
5
5
  export type { JsonRpcId, JsonRpcResponse, JsonRpcError, ConnectionState } from './types.js';
6
- //# sourceMappingURL=index.d.ts.map
package/dist/index.js CHANGED
@@ -1,22 +1,3 @@
1
- // Copyright 2026 Raman Marozau <raman@worktif.com>
2
- // SPDX-License-Identifier: Apache-2.0
3
- //
4
- // Licensed under the Apache License, Version 2.0 (the "License");
5
- // you may not use this file except in compliance with the License.
6
- // You may obtain a copy of the License at
7
- //
8
- // http://www.apache.org/licenses/LICENSE-2.0
9
- //
10
- // Unless required by applicable law or agreed to in writing, software
11
- // distributed under the License is distributed on an "AS IS" BASIS,
12
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- // See the License for the specific language governing permissions and
14
- // limitations under the License.
15
- // ============================================================================
16
- // ACP Chat — Public API
17
- // ============================================================================
18
- export { NDJSONClient } from './ndjson-client.js';
19
- export { createACPClient } from './acp-client.js';
20
- export { createRequestTracker } from './request-tracker.js';
21
- export { DisconnectedError, CapacityExceededError, RequestTimeoutError, ACPError, ErrorCodes } from './errors.js';
22
- //# sourceMappingURL=index.js.map
1
+ import{EventEmitter as J}from"node:events";import*as P from"node:net";function N(c){let e=JSON.stringify(c);if(e===void 0)throw new TypeError("Value is not JSON-serializable");return e+`
2
+ `}function A(c){return JSON.parse(c)}var v={CAPACITY_EXCEEDED:-32e3,REQUEST_TIMEOUT:-32001,DISCONNECTED:-32004},R=class extends Error{code;data;constructor(e,t,n){super(t),this.name="ACPError",this.code=e,this.data=n}},y=class extends R{constructor(e="Capacity exceeded",t){super(v.CAPACITY_EXCEEDED,e,t),this.name="CapacityExceededError"}},E=class extends R{constructor(e="Request timeout",t){super(v.REQUEST_TIMEOUT,e,t),this.name="RequestTimeoutError"}},x=class extends R{constructor(e="Disconnected",t){super(v.DISCONNECTED,e,t),this.name="DisconnectedError"}};var S=class extends J{opts;socket=null;state="disconnected";reconnectAttempt=0;reconnectTimer=null;lineBuffer="";closedByUser=!1;constructor(e){super(),this.opts=e}connect(){return this.state==="connected"||this.state==="connecting"?Promise.resolve():this.state==="closed"?Promise.reject(new Error("Client has been closed")):(this.closedByUser=!1,this.reconnectAttempt=0,this.createConnection())}send(e){if(this.state!=="connected"||!this.socket)throw new x("Cannot send: not connected to stdio Bus");this.socket.write(N(e))}close(){this.closedByUser=!0,this.clearReconnectTimer();let e=this.state;return this.state="closed",e==="closed"||e==="disconnected"?Promise.resolve():new Promise(t=>{if(this.socket){let n=this.socket;if(this.socket=null,n.destroyed){t();return}n.once("close",()=>t()),n.destroy()}else t()})}isConnected(){return this.state==="connected"}getState(){return this.state}createConnection(){return new Promise((e,t)=>{this.state=this.reconnectAttempt===0?"connecting":"reconnecting",this.lineBuffer="";let n=this.buildConnectOptions(),a=P.createConnection(n);this.socket=a;let u=()=>{p(),this.state="connected",this.reconnectAttempt=0,this.wireSocketEvents(a),e()},s=d=>{p(),this.reconnectAttempt===0&&this.state==="connecting"&&(this.state="disconnected",t(d))},p=()=>{a.removeListener("connect",u),a.removeListener("error",s)};a.once("connect",u),a.once("error",s)})}buildConnectOptions(){if(this.opts.connectionType==="unix")return{path:this.opts.address};let e=this.opts.address.lastIndexOf(":");if(e===-1)throw new Error(`Invalid TCP address: expected "host:port", got "${this.opts.address}"`);let t=this.opts.address.slice(0,e),n=parseInt(this.opts.address.slice(e+1),10);if(isNaN(n))throw new Error(`Invalid TCP port in address "${this.opts.address}"`);return{host:t,port:n}}wireSocketEvents(e){e.on("data",t=>this.handleData(t.toString("utf-8"))),e.on("error",t=>this.emit("error",t)),e.on("close",()=>{this.closedByUser||this.state==="closed"||(this.state="disconnected",this.emit("disconnect"),this.scheduleReconnect())})}handleData(e){this.lineBuffer+=e;let t;for(;(t=this.lineBuffer.indexOf(`
3
+ `))!==-1;){let n=this.lineBuffer.slice(0,t);if(this.lineBuffer=this.lineBuffer.slice(t+1),n.length!==0)try{this.emit("message",A(n))}catch(a){this.emit("framingError",n,a instanceof Error?a:new Error(String(a)))}}}scheduleReconnect(){if(this.closedByUser||this.state==="closed")return;if(this.reconnectAttempt>=this.opts.maxReconnectAttempts){this.state="disconnected",this.emit("disconnect");return}this.state="reconnecting";let e=this.reconnectAttempt++,t=Math.random()*this.opts.baseReconnectDelayMs,n=Math.min(this.opts.baseReconnectDelayMs*Math.pow(2,e)+t,this.opts.maxReconnectDelayMs);this.reconnectTimer=setTimeout(()=>{this.reconnectTimer=null,this.emit("reconnect",this.reconnectAttempt),this.attemptReconnect()},n)}attemptReconnect(){if(this.closedByUser||this.state==="closed")return;this.lineBuffer="";let e=P.createConnection(this.buildConnectOptions());this.socket=e,e.once("connect",()=>{e.removeAllListeners("error"),this.state="connected",this.reconnectAttempt=0,this.wireSocketEvents(e)}),e.once("error",()=>{e.destroy(),this.scheduleReconnect()})}clearReconnectTimer(){this.reconnectTimer!==null&&(clearTimeout(this.reconnectTimer),this.reconnectTimer=null)}};var q={maxPending:4096,defaultTimeoutMs:3e4},k=1e3;function O(c){let e={...q,...c};e.defaultTimeoutMs<k&&(e.defaultTimeoutMs=k);let t=new Map;function n(s,p){if(t.size>=e.maxPending)return Promise.reject(new y(`Maximum pending requests (${e.maxPending}) exceeded`));let d=p??e.defaultTimeoutMs;return d<k&&(d=k),new Promise((g,f)=>{let w=setTimeout(()=>{t.delete(s),f(new E(`Request ${String(s)} timed out after ${d}ms`,{id:s,timeoutMs:d}))},d);w.unref&&w.unref(),t.set(s,{id:s,registeredAt:Date.now(),timeoutMs:d,timeoutHandle:w,resolve:g,reject:f})})}function a(s){let p=t.get(s.id);return p?(clearTimeout(p.timeoutHandle),t.delete(s.id),p.resolve(s),!0):!1}function u(s){for(let[,p]of t)clearTimeout(p.timeoutHandle),p.reject(s);t.clear()}return{register:n,resolve:a,cancelAll:u,pendingCount:()=>t.size,hasPending:s=>t.has(s)}}import{EventEmitter as _}from"node:events";function j(c,e){let{agentId:t,requestTimeoutMs:n=12e4,clientInfo:a}=e,u=new _,s=O({defaultTimeoutMs:n}),p=1,d=e.clientSessionId??`client-${Date.now()}-${Math.random().toString(36).slice(2,8)}`,g=new Map;c.on("message",o=>{let r=o;if(!(!r||r.jsonrpc!=="2.0")){if("id"in r&&("result"in r||"error"in r)){s.resolve(r);return}if("method"in r&&!("id"in r)){let i=r.method,l=r.params;if(i==="session/update"&&l){let h=l.sessionId,T=l.update,C=g.get(h);C&&C.push(T),u.emit("update",h,T)}u.emit("notification",i,l)}}});function f(o,r){let i=p++,l={jsonrpc:"2.0",id:i,method:o,agentId:t,sessionId:d,params:r},h=s.register(i);return c.send(l),h}async function w(){let o=await f("initialize",{protocolVersion:1,clientCapabilities:{},clientInfo:a??{name:"acp-chat",version:"1.0.0"}});if(o.error)throw new Error(`initialize: [${o.error.code}] ${o.error.message}`);return o.result}async function U(o){let r={cwd:process.cwd(),mcpServers:[]};o?.length&&(r.configOptions=o);let i=await f("session/new",r);if(i.error)throw new Error(`session/new: [${i.error.code}] ${i.error.message}`);return{...i.result,clientSessionId:d}}async function M(o,r,i="user"){g.set(o,[]);let l=await f("session/prompt",{sessionId:o,prompt:[{type:"text",role:i,text:r}]});await new Promise(m=>setTimeout(m,200));let h=g.get(o)??[];if(g.delete(o),l.error)throw new Error(`session/prompt: [${l.error.code}] ${l.error.message}`);let T=l.result,C=[];for(let m of h)if(m.sessionUpdate==="agent_message_chunk"&&m.content?.text&&C.push(m.content.text),m.sessionUpdate==="tool_call_update"&&m.content)for(let I of m.content)I.content?.text&&C.push(I.content.text);return{stopReason:T.stopReason,updates:h,text:C.join("")}}async function b(o,r){let i=await f("session/configure",{sessionId:o,options:r});if(i.error)throw new Error(`session/configure: [${i.error.code}] ${i.error.message}`)}function D(o){c.send({jsonrpc:"2.0",method:"session/cancel",params:{sessionId:o},agentId:t,sessionId:d})}return Object.assign(u,{initialize:w,sessionNew:U,sessionPrompt:M,sessionConfigure:b,sessionCancel:D,requestTracker:s})}export{R as ACPError,y as CapacityExceededError,x as DisconnectedError,v as ErrorCodes,S as NDJSONClient,E as RequestTimeoutError,j as createACPClient,O as createRequestTracker};
@@ -67,4 +67,3 @@ export declare class NDJSONClient extends EventEmitter {
67
67
  private attemptReconnect;
68
68
  private clearReconnectTimer;
69
69
  }
70
- //# sourceMappingURL=ndjson-client.d.ts.map
package/dist/ndjson.d.ts CHANGED
@@ -1,3 +1,2 @@
1
1
  export declare function serializeNdjson(obj: unknown): string;
2
2
  export declare function deserializeNdjsonLine(line: string): unknown;
3
- //# sourceMappingURL=ndjson.d.ts.map
@@ -11,4 +11,3 @@ export interface RequestTracker {
11
11
  hasPending(id: JsonRpcId): boolean;
12
12
  }
13
13
  export declare function createRequestTracker(opts?: Partial<RequestTrackerOptions>): RequestTracker;
14
- //# sourceMappingURL=request-tracker.d.ts.map
package/dist/types.d.ts CHANGED
@@ -19,4 +19,3 @@ export interface PendingEntry {
19
19
  reject: (error: Error) => void;
20
20
  }
21
21
  export type ConnectionState = 'disconnected' | 'connecting' | 'connected' | 'reconnecting' | 'closed';
22
- //# sourceMappingURL=types.d.ts.map
package/package.json CHANGED
@@ -1,10 +1,16 @@
1
1
  {
2
2
  "name": "acp-chat",
3
- "version": "0.2.6",
3
+ "version": "0.2.7",
4
4
  "description": "ACP Chat — agent-to-agent dialogue over TCP/Unix socket using the ACP protocol.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
7
7
  "types": "dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.js"
12
+ }
13
+ },
8
14
  "repository": {
9
15
  "url": "https://github.com/morozow/acp-chat",
10
16
  "type": "git"
@@ -13,9 +19,10 @@
13
19
  "acp-chat": "dist/cli.js"
14
20
  },
15
21
  "scripts": {
16
- "build": "tsc",
22
+ "build": "node scripts/build.js",
23
+ "build:dev": "tsc",
17
24
  "clean": "rm -rf dist",
18
- "prepublishOnly": "npm run build"
25
+ "prepublishOnly": "npm run clean && npm run build"
19
26
  },
20
27
  "files": [
21
28
  "dist",
@@ -34,7 +41,8 @@
34
41
  "node": ">=18"
35
42
  },
36
43
  "devDependencies": {
37
- "typescript": "^5.0.0",
38
- "@types/node": "^20.0.0"
44
+ "@types/node": "^20.0.0",
45
+ "esbuild": "^0.27.4",
46
+ "typescript": "^5.0.0"
39
47
  }
40
48
  }
@@ -1 +0,0 @@
1
- {"version":3,"file":"acp-client.d.ts","sourceRoot":"","sources":["../src/acp-client.ts"],"names":[],"mappings":"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"}
@@ -1,114 +0,0 @@
1
- // Copyright 2026 Raman Marozau <raman@worktif.com>
2
- // SPDX-License-Identifier: Apache-2.0
3
- //
4
- // Licensed under the Apache License, Version 2.0 (the "License");
5
- // you may not use this file except in compliance with the License.
6
- // You may obtain a copy of the License at
7
- //
8
- // http://www.apache.org/licenses/LICENSE-2.0
9
- //
10
- // Unless required by applicable law or agreed to in writing, software
11
- // distributed under the License is distributed on an "AS IS" BASIS,
12
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- // See the License for the specific language governing permissions and
14
- // limitations under the License.
15
- import { createRequestTracker } from './request-tracker.js';
16
- import { EventEmitter } from 'node:events';
17
- // ---------------------------------------------------------------------------
18
- // Factory
19
- // ---------------------------------------------------------------------------
20
- export function createACPClient(ndjsonClient, opts) {
21
- const { agentId, requestTimeoutMs = 120_000, clientInfo } = opts;
22
- const emitter = new EventEmitter();
23
- const requestTracker = createRequestTracker({ defaultTimeoutMs: requestTimeoutMs });
24
- let nextId = 1;
25
- const clientSessionId = opts.clientSessionId ?? `client-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
26
- const pendingUpdates = new Map();
27
- ndjsonClient.on('message', (msg) => {
28
- const obj = msg;
29
- if (!obj || obj['jsonrpc'] !== '2.0')
30
- return;
31
- if ('id' in obj && ('result' in obj || 'error' in obj)) {
32
- requestTracker.resolve(obj);
33
- return;
34
- }
35
- if ('method' in obj && !('id' in obj)) {
36
- const method = obj['method'];
37
- const params = obj['params'];
38
- if (method === 'session/update' && params) {
39
- const sessionId = params['sessionId'];
40
- const update = params['update'];
41
- const updates = pendingUpdates.get(sessionId);
42
- if (updates)
43
- updates.push(update);
44
- emitter.emit('update', sessionId, update);
45
- }
46
- emitter.emit('notification', method, params);
47
- }
48
- });
49
- function send(method, params) {
50
- const id = nextId++;
51
- const request = { jsonrpc: '2.0', id, method, agentId, sessionId: clientSessionId, params };
52
- const promise = requestTracker.register(id);
53
- ndjsonClient.send(request);
54
- return promise;
55
- }
56
- async function initialize() {
57
- const resp = await send('initialize', {
58
- protocolVersion: 1,
59
- clientCapabilities: {},
60
- clientInfo: clientInfo ?? { name: 'acp-chat', version: '1.0.0' },
61
- });
62
- if (resp.error)
63
- throw new Error(`initialize: [${resp.error.code}] ${resp.error.message}`);
64
- return resp.result;
65
- }
66
- async function sessionNew(configOptions) {
67
- const params = { cwd: process.cwd(), mcpServers: [] };
68
- if (configOptions?.length)
69
- params['configOptions'] = configOptions;
70
- const resp = await send('session/new', params);
71
- if (resp.error)
72
- throw new Error(`session/new: [${resp.error.code}] ${resp.error.message}`);
73
- return { ...resp.result, clientSessionId };
74
- }
75
- async function sessionPrompt(sessionId, text, role = 'user') {
76
- pendingUpdates.set(sessionId, []);
77
- const resp = await send('session/prompt', { sessionId, prompt: [{ type: 'text', role, text }] });
78
- await new Promise(resolve => setTimeout(resolve, 200));
79
- const updates = pendingUpdates.get(sessionId) ?? [];
80
- pendingUpdates.delete(sessionId);
81
- if (resp.error)
82
- throw new Error(`session/prompt: [${resp.error.code}] ${resp.error.message}`);
83
- const result = resp.result;
84
- const textParts = [];
85
- for (const u of updates) {
86
- if (u.sessionUpdate === 'agent_message_chunk' && u.content?.text) {
87
- textParts.push(u.content.text);
88
- }
89
- if (u.sessionUpdate === 'tool_call_update' && u.content) {
90
- for (const c of u.content) {
91
- if (c.content?.text)
92
- textParts.push(c.content.text);
93
- }
94
- }
95
- }
96
- return { stopReason: result.stopReason, updates, text: textParts.join('') };
97
- }
98
- async function sessionConfigure(sessionId, options) {
99
- const resp = await send('session/configure', { sessionId, options });
100
- if (resp.error)
101
- throw new Error(`session/configure: [${resp.error.code}] ${resp.error.message}`);
102
- }
103
- function sessionCancel(sessionId) {
104
- ndjsonClient.send({
105
- jsonrpc: '2.0',
106
- method: 'session/cancel',
107
- params: { sessionId },
108
- agentId,
109
- sessionId: clientSessionId,
110
- });
111
- }
112
- return Object.assign(emitter, { initialize, sessionNew, sessionPrompt, sessionConfigure, sessionCancel, requestTracker });
113
- }
114
- //# sourceMappingURL=acp-client.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"acp-client.js","sourceRoot":"","sources":["../src/acp-client.ts"],"names":[],"mappings":"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"}
package/dist/cli.d.ts.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
package/dist/cli.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAmBA,eAAO,MAAM,UAAU;;;;CAIb,CAAC;AAEX,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,UAAU,CAAC,CAAC,MAAM,OAAO,UAAU,CAAC,CAAC;AAErE,qBAAa,QAAS,SAAQ,KAAK;IACjC,SAAgB,IAAI,EAAE,SAAS,CAAC;IAChC,SAAgB,IAAI,CAAC,EAAE,OAAO,CAAC;gBAEnB,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO;CAM7D;AAED,qBAAa,qBAAsB,SAAQ,QAAQ;gBACrC,OAAO,SAAsB,EAAE,IAAI,CAAC,EAAE,OAAO;CAI1D;AAED,qBAAa,mBAAoB,SAAQ,QAAQ;gBACnC,OAAO,SAAoB,EAAE,IAAI,CAAC,EAAE,OAAO;CAIxD;AAED,qBAAa,iBAAkB,SAAQ,QAAQ;gBACjC,OAAO,SAAiB,EAAE,IAAI,CAAC,EAAE,OAAO;CAIrD"}
package/dist/errors.js DELETED
@@ -1,51 +0,0 @@
1
- // Copyright 2026 Raman Marozau <raman@worktif.com>
2
- // SPDX-License-Identifier: Apache-2.0
3
- //
4
- // Licensed under the Apache License, Version 2.0 (the "License");
5
- // you may not use this file except in compliance with the License.
6
- // You may obtain a copy of the License at
7
- //
8
- // http://www.apache.org/licenses/LICENSE-2.0
9
- //
10
- // Unless required by applicable law or agreed to in writing, software
11
- // distributed under the License is distributed on an "AS IS" BASIS,
12
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- // See the License for the specific language governing permissions and
14
- // limitations under the License.
15
- // ============================================================================
16
- // ACP Chat — Error Classes
17
- // ============================================================================
18
- export const ErrorCodes = {
19
- CAPACITY_EXCEEDED: -32000,
20
- REQUEST_TIMEOUT: -32001,
21
- DISCONNECTED: -32004,
22
- };
23
- export class ACPError extends Error {
24
- code;
25
- data;
26
- constructor(code, message, data) {
27
- super(message);
28
- this.name = 'ACPError';
29
- this.code = code;
30
- this.data = data;
31
- }
32
- }
33
- export class CapacityExceededError extends ACPError {
34
- constructor(message = 'Capacity exceeded', data) {
35
- super(ErrorCodes.CAPACITY_EXCEEDED, message, data);
36
- this.name = 'CapacityExceededError';
37
- }
38
- }
39
- export class RequestTimeoutError extends ACPError {
40
- constructor(message = 'Request timeout', data) {
41
- super(ErrorCodes.REQUEST_TIMEOUT, message, data);
42
- this.name = 'RequestTimeoutError';
43
- }
44
- }
45
- export class DisconnectedError extends ACPError {
46
- constructor(message = 'Disconnected', data) {
47
- super(ErrorCodes.DISCONNECTED, message, data);
48
- this.name = 'DisconnectedError';
49
- }
50
- }
51
- //# sourceMappingURL=errors.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,mDAAmD;AACnD,sCAAsC;AACtC,EAAE;AACF,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,iDAAiD;AACjD,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AAEjC,+EAA+E;AAC/E,2BAA2B;AAC3B,+EAA+E;AAE/E,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,iBAAiB,EAAE,CAAC,KAAK;IACzB,eAAe,EAAE,CAAC,KAAK;IACvB,YAAY,EAAE,CAAC,KAAK;CACZ,CAAC;AAIX,MAAM,OAAO,QAAS,SAAQ,KAAK;IACjB,IAAI,CAAY;IAChB,IAAI,CAAW;IAE/B,YAAY,IAAe,EAAE,OAAe,EAAE,IAAc;QAC1D,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;QACvB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF;AAED,MAAM,OAAO,qBAAsB,SAAQ,QAAQ;IACjD,YAAY,OAAO,GAAG,mBAAmB,EAAE,IAAc;QACvD,KAAK,CAAC,UAAU,CAAC,iBAAiB,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QACnD,IAAI,CAAC,IAAI,GAAG,uBAAuB,CAAC;IACtC,CAAC;CACF;AAED,MAAM,OAAO,mBAAoB,SAAQ,QAAQ;IAC/C,YAAY,OAAO,GAAG,iBAAiB,EAAE,IAAc;QACrD,KAAK,CAAC,UAAU,CAAC,eAAe,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QACjD,IAAI,CAAC,IAAI,GAAG,qBAAqB,CAAC;IACpC,CAAC;CACF;AAED,MAAM,OAAO,iBAAkB,SAAQ,QAAQ;IAC7C,YAAY,OAAO,GAAG,cAAc,EAAE,IAAc;QAClD,KAAK,CAAC,UAAU,CAAC,YAAY,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;QAC9C,IAAI,CAAC,IAAI,GAAG,mBAAmB,CAAC;IAClC,CAAC;CACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAE,YAAY,EAAE,KAAK,mBAAmB,EAAE,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACrG,OAAO,EAAE,eAAe,EAAE,KAAK,SAAS,EAAE,KAAK,gBAAgB,EAAE,KAAK,aAAa,EAAE,KAAK,gBAAgB,EAAE,KAAK,YAAY,EAAE,KAAK,gBAAgB,EAAE,KAAK,YAAY,EAAE,KAAK,iBAAiB,EAAE,KAAK,UAAU,EAAE,KAAK,cAAc,EAAE,KAAK,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAC1R,OAAO,EAAE,oBAAoB,EAAE,KAAK,cAAc,EAAE,KAAK,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7G,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAClH,YAAY,EAAE,SAAS,EAAE,eAAe,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC"}
package/dist/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,mDAAmD;AACnD,sCAAsC;AACtC,EAAE;AACF,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,iDAAiD;AACjD,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AAEjC,+EAA+E;AAC/E,wBAAwB;AACxB,+EAA+E;AAE/E,OAAO,EAAE,YAAY,EAAqD,MAAM,oBAAoB,CAAC;AACrG,OAAO,EAAE,eAAe,EAA0O,MAAM,iBAAiB,CAAC;AAC1R,OAAO,EAAE,oBAAoB,EAAmD,MAAM,sBAAsB,CAAC;AAC7G,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ndjson-client.d.ts","sourceRoot":"","sources":["../src/ndjson-client.ts"],"names":[],"mappings":"AAmBA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAI3C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAElC;;;OAGG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;;;;;OAMG;IACH,cAAc,EAAE,KAAK,GAAG,MAAM,CAAC;IAE/B;;;;OAIG;IACH,oBAAoB,EAAE,MAAM,CAAC;IAE7B;;;;OAIG;IACH,oBAAoB,EAAE,MAAM,CAAC;IAE7B;;;;;;OAMG;IACH,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,IAAI,CAAC;IAChC,KAAK,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,CAAC;IAC5B,UAAU,EAAE,MAAM,IAAI,CAAC;IACvB,SAAS,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACrC,YAAY,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,KAAK,KAAK,IAAI,CAAC;CAClD;AAED,qBAAa,YAAa,SAAQ,YAAY;IAC5C,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAsB;IAC3C,OAAO,CAAC,MAAM,CAA2B;IACzC,OAAO,CAAC,KAAK,CAAmC;IAChD,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,cAAc,CAA+B;IACrD,OAAO,CAAC,UAAU,CAAM;IACxB,OAAO,CAAC,YAAY,CAAS;gBAEjB,IAAI,EAAE,mBAAmB;IAKrC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IASxB,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IAO5B,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAqBtB,WAAW,IAAI,OAAO;IACtB,QAAQ,IAAI,eAAe;IAE3B,OAAO,CAAC,gBAAgB;IAmCxB,OAAO,CAAC,mBAAmB;IAU3B,OAAO,CAAC,gBAAgB;IAWxB,OAAO,CAAC,UAAU;IAelB,OAAO,CAAC,iBAAiB;IAoBzB,OAAO,CAAC,gBAAgB;IAmBxB,OAAO,CAAC,mBAAmB;CAM5B"}
@@ -1,184 +0,0 @@
1
- // Copyright 2026 Raman Marozau <raman@worktif.com>
2
- // SPDX-License-Identifier: Apache-2.0
3
- //
4
- // Licensed under the Apache License, Version 2.0 (the "License");
5
- // you may not use this file except in compliance with the License.
6
- // You may obtain a copy of the License at
7
- //
8
- // http://www.apache.org/licenses/LICENSE-2.0
9
- //
10
- // Unless required by applicable law or agreed to in writing, software
11
- // distributed under the License is distributed on an "AS IS" BASIS,
12
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- // See the License for the specific language governing permissions and
14
- // limitations under the License.
15
- // ============================================================================
16
- // ACP Chat — NDJSON Client (TCP/Unix Socket Transport)
17
- // ============================================================================
18
- import { EventEmitter } from 'node:events';
19
- import * as net from 'node:net';
20
- import { serializeNdjson, deserializeNdjsonLine } from './ndjson.js';
21
- import { DisconnectedError } from './errors.js';
22
- export class NDJSONClient extends EventEmitter {
23
- opts;
24
- socket = null;
25
- state = 'disconnected';
26
- reconnectAttempt = 0;
27
- reconnectTimer = null;
28
- lineBuffer = '';
29
- closedByUser = false;
30
- constructor(opts) {
31
- super();
32
- this.opts = opts;
33
- }
34
- connect() {
35
- if (this.state === 'connected' || this.state === 'connecting')
36
- return Promise.resolve();
37
- if (this.state === 'closed')
38
- return Promise.reject(new Error('Client has been closed'));
39
- this.closedByUser = false;
40
- this.reconnectAttempt = 0;
41
- return this.createConnection();
42
- }
43
- send(message) {
44
- if (this.state !== 'connected' || !this.socket) {
45
- throw new DisconnectedError('Cannot send: not connected to stdio Bus');
46
- }
47
- this.socket.write(serializeNdjson(message));
48
- }
49
- close() {
50
- this.closedByUser = true;
51
- this.clearReconnectTimer();
52
- const prevState = this.state;
53
- this.state = 'closed';
54
- if (prevState === 'closed' || prevState === 'disconnected')
55
- return Promise.resolve();
56
- return new Promise((resolve) => {
57
- if (this.socket) {
58
- const sock = this.socket;
59
- this.socket = null;
60
- if (sock.destroyed) {
61
- resolve();
62
- return;
63
- }
64
- sock.once('close', () => resolve());
65
- sock.destroy();
66
- }
67
- else {
68
- resolve();
69
- }
70
- });
71
- }
72
- isConnected() { return this.state === 'connected'; }
73
- getState() { return this.state; }
74
- createConnection() {
75
- return new Promise((resolve, reject) => {
76
- this.state = this.reconnectAttempt === 0 ? 'connecting' : 'reconnecting';
77
- this.lineBuffer = '';
78
- const connectOpts = this.buildConnectOptions();
79
- const socket = net.createConnection(connectOpts);
80
- this.socket = socket;
81
- const onConnect = () => {
82
- cleanup();
83
- this.state = 'connected';
84
- this.reconnectAttempt = 0;
85
- this.wireSocketEvents(socket);
86
- resolve();
87
- };
88
- const onError = (err) => {
89
- cleanup();
90
- if (this.reconnectAttempt === 0 && this.state === 'connecting') {
91
- this.state = 'disconnected';
92
- reject(err);
93
- }
94
- };
95
- const cleanup = () => {
96
- socket.removeListener('connect', onConnect);
97
- socket.removeListener('error', onError);
98
- };
99
- socket.once('connect', onConnect);
100
- socket.once('error', onError);
101
- });
102
- }
103
- buildConnectOptions() {
104
- if (this.opts.connectionType === 'unix')
105
- return { path: this.opts.address };
106
- const lastColon = this.opts.address.lastIndexOf(':');
107
- if (lastColon === -1)
108
- throw new Error(`Invalid TCP address: expected "host:port", got "${this.opts.address}"`);
109
- const host = this.opts.address.slice(0, lastColon);
110
- const port = parseInt(this.opts.address.slice(lastColon + 1), 10);
111
- if (isNaN(port))
112
- throw new Error(`Invalid TCP port in address "${this.opts.address}"`);
113
- return { host, port };
114
- }
115
- wireSocketEvents(socket) {
116
- socket.on('data', (chunk) => this.handleData(chunk.toString('utf-8')));
117
- socket.on('error', (err) => this.emit('error', err));
118
- socket.on('close', () => {
119
- if (this.closedByUser || this.state === 'closed')
120
- return;
121
- this.state = 'disconnected';
122
- this.emit('disconnect');
123
- this.scheduleReconnect();
124
- });
125
- }
126
- handleData(data) {
127
- this.lineBuffer += data;
128
- let newlineIdx;
129
- while ((newlineIdx = this.lineBuffer.indexOf('\n')) !== -1) {
130
- const line = this.lineBuffer.slice(0, newlineIdx);
131
- this.lineBuffer = this.lineBuffer.slice(newlineIdx + 1);
132
- if (line.length === 0)
133
- continue;
134
- try {
135
- this.emit('message', deserializeNdjsonLine(line));
136
- }
137
- catch (err) {
138
- this.emit('framingError', line, err instanceof Error ? err : new Error(String(err)));
139
- }
140
- }
141
- }
142
- scheduleReconnect() {
143
- if (this.closedByUser || this.state === 'closed')
144
- return;
145
- if (this.reconnectAttempt >= this.opts.maxReconnectAttempts) {
146
- this.state = 'disconnected';
147
- this.emit('disconnect');
148
- return;
149
- }
150
- this.state = 'reconnecting';
151
- const attempt = this.reconnectAttempt++;
152
- const jitter = Math.random() * this.opts.baseReconnectDelayMs;
153
- const delay = Math.min(this.opts.baseReconnectDelayMs * Math.pow(2, attempt) + jitter, this.opts.maxReconnectDelayMs);
154
- this.reconnectTimer = setTimeout(() => {
155
- this.reconnectTimer = null;
156
- this.emit('reconnect', this.reconnectAttempt);
157
- this.attemptReconnect();
158
- }, delay);
159
- }
160
- attemptReconnect() {
161
- if (this.closedByUser || this.state === 'closed')
162
- return;
163
- this.lineBuffer = '';
164
- const socket = net.createConnection(this.buildConnectOptions());
165
- this.socket = socket;
166
- socket.once('connect', () => {
167
- socket.removeAllListeners('error');
168
- this.state = 'connected';
169
- this.reconnectAttempt = 0;
170
- this.wireSocketEvents(socket);
171
- });
172
- socket.once('error', () => {
173
- socket.destroy();
174
- this.scheduleReconnect();
175
- });
176
- }
177
- clearReconnectTimer() {
178
- if (this.reconnectTimer !== null) {
179
- clearTimeout(this.reconnectTimer);
180
- this.reconnectTimer = null;
181
- }
182
- }
183
- }
184
- //# sourceMappingURL=ndjson-client.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ndjson-client.js","sourceRoot":"","sources":["../src/ndjson-client.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ndjson.d.ts","sourceRoot":"","sources":["../src/ndjson.ts"],"names":[],"mappings":"AAmBA,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,MAAM,CAMpD;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE3D"}
package/dist/ndjson.js DELETED
@@ -1,28 +0,0 @@
1
- // Copyright 2026 Raman Marozau <raman@worktif.com>
2
- // SPDX-License-Identifier: Apache-2.0
3
- //
4
- // Licensed under the Apache License, Version 2.0 (the "License");
5
- // you may not use this file except in compliance with the License.
6
- // You may obtain a copy of the License at
7
- //
8
- // http://www.apache.org/licenses/LICENSE-2.0
9
- //
10
- // Unless required by applicable law or agreed to in writing, software
11
- // distributed under the License is distributed on an "AS IS" BASIS,
12
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- // See the License for the specific language governing permissions and
14
- // limitations under the License.
15
- // ============================================================================
16
- // ACP Chat — NDJSON Framing
17
- // ============================================================================
18
- export function serializeNdjson(obj) {
19
- const json = JSON.stringify(obj);
20
- if (json === undefined) {
21
- throw new TypeError('Value is not JSON-serializable');
22
- }
23
- return json + '\n';
24
- }
25
- export function deserializeNdjsonLine(line) {
26
- return JSON.parse(line);
27
- }
28
- //# sourceMappingURL=ndjson.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ndjson.js","sourceRoot":"","sources":["../src/ndjson.ts"],"names":[],"mappings":"AAAA,mDAAmD;AACnD,sCAAsC;AACtC,EAAE;AACF,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,iDAAiD;AACjD,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC;AAEjC,+EAA+E;AAC/E,4BAA4B;AAC5B,+EAA+E;AAE/E,MAAM,UAAU,eAAe,CAAC,GAAY;IAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IACjC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,MAAM,IAAI,SAAS,CAAC,gCAAgC,CAAC,CAAC;IACxD,CAAC;IACD,OAAO,IAAI,GAAG,IAAI,CAAC;AACrB,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,IAAY;IAChD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"request-tracker.d.ts","sourceRoot":"","sources":["../src/request-tracker.ts"],"names":[],"mappings":"AAmBA,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAgB,MAAM,YAAY,CAAC;AAG3E,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AASD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAAC;IACtE,OAAO,CAAC,QAAQ,EAAE,eAAe,GAAG,OAAO,CAAC;IAC5C,SAAS,CAAC,MAAM,EAAE,KAAK,GAAG,IAAI,CAAC;IAC/B,YAAY,IAAI,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,EAAE,SAAS,GAAG,OAAO,CAAC;CACpC;AAED,wBAAgB,oBAAoB,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC,GAAG,cAAc,CAqD1F"}
@@ -1,64 +0,0 @@
1
- // Copyright 2026 Raman Marozau <raman@worktif.com>
2
- // SPDX-License-Identifier: Apache-2.0
3
- //
4
- // Licensed under the Apache License, Version 2.0 (the "License");
5
- // you may not use this file except in compliance with the License.
6
- // You may obtain a copy of the License at
7
- //
8
- // http://www.apache.org/licenses/LICENSE-2.0
9
- //
10
- // Unless required by applicable law or agreed to in writing, software
11
- // distributed under the License is distributed on an "AS IS" BASIS,
12
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- // See the License for the specific language governing permissions and
14
- // limitations under the License.
15
- import { CapacityExceededError, RequestTimeoutError } from './errors.js';
16
- const DEFAULT_OPTIONS = {
17
- maxPending: 4096,
18
- defaultTimeoutMs: 30_000,
19
- };
20
- const MIN_TIMEOUT_MS = 1000;
21
- export function createRequestTracker(opts) {
22
- const options = { ...DEFAULT_OPTIONS, ...opts };
23
- if (options.defaultTimeoutMs < MIN_TIMEOUT_MS) {
24
- options.defaultTimeoutMs = MIN_TIMEOUT_MS;
25
- }
26
- const pending = new Map();
27
- function register(id, timeoutMs) {
28
- if (pending.size >= options.maxPending) {
29
- return Promise.reject(new CapacityExceededError(`Maximum pending requests (${options.maxPending}) exceeded`));
30
- }
31
- let effectiveTimeout = timeoutMs ?? options.defaultTimeoutMs;
32
- if (effectiveTimeout < MIN_TIMEOUT_MS) {
33
- effectiveTimeout = MIN_TIMEOUT_MS;
34
- }
35
- return new Promise((resolve, reject) => {
36
- const timeoutHandle = setTimeout(() => {
37
- pending.delete(id);
38
- reject(new RequestTimeoutError(`Request ${String(id)} timed out after ${effectiveTimeout}ms`, { id, timeoutMs: effectiveTimeout }));
39
- }, effectiveTimeout);
40
- if (timeoutHandle.unref) {
41
- timeoutHandle.unref();
42
- }
43
- pending.set(id, { id, registeredAt: Date.now(), timeoutMs: effectiveTimeout, timeoutHandle, resolve, reject });
44
- });
45
- }
46
- function resolve(response) {
47
- const entry = pending.get(response.id);
48
- if (!entry)
49
- return false;
50
- clearTimeout(entry.timeoutHandle);
51
- pending.delete(response.id);
52
- entry.resolve(response);
53
- return true;
54
- }
55
- function cancelAll(reason) {
56
- for (const [, entry] of pending) {
57
- clearTimeout(entry.timeoutHandle);
58
- entry.reject(reason);
59
- }
60
- pending.clear();
61
- }
62
- return { register, resolve, cancelAll, pendingCount: () => pending.size, hasPending: (id) => pending.has(id) };
63
- }
64
- //# sourceMappingURL=request-tracker.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"request-tracker.js","sourceRoot":"","sources":["../src/request-tracker.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAmBA,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,MAAM,CAAC;AAExC,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,KAAK,CAAC;IACf,EAAE,EAAE,SAAS,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,YAAY,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,SAAS,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC,OAAO,CAAC;IAC9B,OAAO,EAAE,CAAC,QAAQ,EAAE,eAAe,KAAK,IAAI,CAAC;IAC7C,MAAM,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;CAChC;AAED,MAAM,MAAM,eAAe,GAAG,cAAc,GAAG,YAAY,GAAG,WAAW,GAAG,cAAc,GAAG,QAAQ,CAAC"}
package/dist/types.js DELETED
@@ -1,16 +0,0 @@
1
- // Copyright 2026 Raman Marozau <raman@worktif.com>
2
- // SPDX-License-Identifier: Apache-2.0
3
- //
4
- // Licensed under the Apache License, Version 2.0 (the "License");
5
- // you may not use this file except in compliance with the License.
6
- // You may obtain a copy of the License at
7
- //
8
- // http://www.apache.org/licenses/LICENSE-2.0
9
- //
10
- // Unless required by applicable law or agreed to in writing, software
11
- // distributed under the License is distributed on an "AS IS" BASIS,
12
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
- // See the License for the specific language governing permissions and
14
- // limitations under the License.
15
- export {};
16
- //# sourceMappingURL=types.js.map
package/dist/types.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,mDAAmD;AACnD,sCAAsC;AACtC,EAAE;AACF,kEAAkE;AAClE,mEAAmE;AACnE,0CAA0C;AAC1C,EAAE;AACF,iDAAiD;AACjD,EAAE;AACF,sEAAsE;AACtE,oEAAoE;AACpE,2EAA2E;AAC3E,sEAAsE;AACtE,iCAAiC"}