@k1e1n04/mav 0.1.33 → 0.1.35
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/package.json +1 -1
- package/dist/src/agent.d.ts +2 -0
- package/dist/src/agent.js +26 -19
- package/dist/src/agent.js.map +1 -1
- package/dist/src/process-cwd.d.ts +2 -2
- package/dist/src/process-cwd.js +32 -17
- package/dist/src/process-cwd.js.map +1 -1
- package/dist/src/ui/app.js +6 -0
- package/dist/src/ui/app.js.map +1 -1
- package/package.json +1 -1
- package/src/agent.ts +29 -20
- package/src/process-cwd.ts +32 -22
- package/src/ui/app.ts +4 -0
package/dist/package.json
CHANGED
package/dist/src/agent.d.ts
CHANGED
|
@@ -42,6 +42,8 @@ export declare class AgentSession extends EventEmitter {
|
|
|
42
42
|
private scheduleIdleTimer;
|
|
43
43
|
private clearIdleTimer;
|
|
44
44
|
private startCwdPolling;
|
|
45
|
+
private scheduleCwdPoll;
|
|
46
|
+
private runCwdPoll;
|
|
45
47
|
private clearCwdPollTimer;
|
|
46
48
|
private updateDisplayNameFromInput;
|
|
47
49
|
private updateCwdFromOutput;
|
package/dist/src/agent.js
CHANGED
|
@@ -152,36 +152,43 @@ export class AgentSession extends EventEmitter {
|
|
|
152
152
|
this.idleTimer = null;
|
|
153
153
|
}
|
|
154
154
|
startCwdPolling() {
|
|
155
|
-
if (this.cwdPollTimer || !this.ptyProcess) {
|
|
155
|
+
if (this.cwdPollTimer !== null || !this.ptyProcess) {
|
|
156
156
|
return;
|
|
157
157
|
}
|
|
158
|
-
this.
|
|
159
|
-
|
|
160
|
-
|
|
158
|
+
this.scheduleCwdPoll();
|
|
159
|
+
}
|
|
160
|
+
scheduleCwdPoll() {
|
|
161
|
+
this.cwdPollTimer = setTimeout(() => { void this.runCwdPoll(); }, AgentSession.CWD_POLL_INTERVAL_MS);
|
|
162
|
+
}
|
|
163
|
+
async runCwdPoll() {
|
|
164
|
+
this.cwdPollTimer = null;
|
|
165
|
+
if (this.exited || !this.ptyProcess)
|
|
166
|
+
return;
|
|
167
|
+
if (this.type === 'claude-code') {
|
|
168
|
+
if (this.claudeChildPid === null) {
|
|
169
|
+
this.claudeChildPid = await getClaudeChildPid(this.ptyProcess.pid);
|
|
161
170
|
}
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
const targetPid = this.claudeChildPid ?? this.ptyProcess.pid;
|
|
167
|
-
const cwd = getProcessCwd(targetPid);
|
|
168
|
-
if (cwd === null && this.claudeChildPid !== null) {
|
|
169
|
-
this.claudeChildPid = null;
|
|
170
|
-
}
|
|
171
|
-
else {
|
|
172
|
-
this.updateCwd(cwd);
|
|
173
|
-
}
|
|
171
|
+
const targetPid = this.claudeChildPid ?? this.ptyProcess.pid;
|
|
172
|
+
const cwd = await getProcessCwd(targetPid);
|
|
173
|
+
if (cwd === null && this.claudeChildPid !== null) {
|
|
174
|
+
this.claudeChildPid = null;
|
|
174
175
|
}
|
|
175
176
|
else {
|
|
176
|
-
this.updateCwd(
|
|
177
|
+
this.updateCwd(cwd);
|
|
177
178
|
}
|
|
178
|
-
}
|
|
179
|
+
}
|
|
180
|
+
else {
|
|
181
|
+
this.updateCwd(await getProcessCwd(this.ptyProcess.pid));
|
|
182
|
+
}
|
|
183
|
+
if (!this.exited) {
|
|
184
|
+
this.scheduleCwdPoll();
|
|
185
|
+
}
|
|
179
186
|
}
|
|
180
187
|
clearCwdPollTimer() {
|
|
181
188
|
if (!this.cwdPollTimer) {
|
|
182
189
|
return;
|
|
183
190
|
}
|
|
184
|
-
|
|
191
|
+
clearTimeout(this.cwdPollTimer);
|
|
185
192
|
this.cwdPollTimer = null;
|
|
186
193
|
}
|
|
187
194
|
updateDisplayNameFromInput(data) {
|
package/dist/src/agent.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,KAAK,GAAG,MAAM,UAAU,CAAA;AAE/B,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AASrD,MAAM,QAAQ,GAA2B,EAAE,CAAA;AAE3C,MAAM,OAAO,YAAa,SAAQ,YAAY;IACpC,MAAM,CAAU,eAAe,GAAG,IAAI,CAAA;IACtC,MAAM,CAAU,uBAAuB,GAAG,EAAE,CAAA;IAC5C,MAAM,CAAU,uBAAuB,GAAG,CAAC,CAAA;IAC3C,MAAM,CAAU,oBAAoB,GAAG,IAAI,CAAA;IAE1C,EAAE,CAAQ;IACV,IAAI,CAAQ;IACZ,GAAG,CAAQ;IACpB,GAAG,CAAQ;IACX,WAAW,CAAQ;IACnB,QAAQ,GAAa,EAAE,CAAA;IACvB,MAAM,GAAkB,SAAS,CAAA;IACjC,SAAS,GAAa,EAAE,CAAA;IACxB,UAAU,GAAW,EAAE,CAAA;IACvB,SAAS,CAAS;IAEV,UAAU,CAAsB;IAChC,MAAM,GAAG,KAAK,CAAA;IACd,SAAS,GAAyC,IAAI,CAAA;IACtD,YAAY,
|
|
1
|
+
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,KAAK,GAAG,MAAM,UAAU,CAAA;AAE/B,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AACnE,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AASrD,MAAM,QAAQ,GAA2B,EAAE,CAAA;AAE3C,MAAM,OAAO,YAAa,SAAQ,YAAY;IACpC,MAAM,CAAU,eAAe,GAAG,IAAI,CAAA;IACtC,MAAM,CAAU,uBAAuB,GAAG,EAAE,CAAA;IAC5C,MAAM,CAAU,uBAAuB,GAAG,CAAC,CAAA;IAC3C,MAAM,CAAU,oBAAoB,GAAG,IAAI,CAAA;IAE1C,EAAE,CAAQ;IACV,IAAI,CAAQ;IACZ,GAAG,CAAQ;IACpB,GAAG,CAAQ;IACX,WAAW,CAAQ;IACnB,QAAQ,GAAa,EAAE,CAAA;IACvB,MAAM,GAAkB,SAAS,CAAA;IACjC,SAAS,GAAa,EAAE,CAAA;IACxB,UAAU,GAAW,EAAE,CAAA;IACvB,SAAS,CAAS;IAEV,UAAU,CAAsB;IAChC,MAAM,GAAG,KAAK,CAAA;IACd,SAAS,GAAyC,IAAI,CAAA;IACtD,YAAY,GAAyC,IAAI,CAAA;IACzD,cAAc,GAAkB,IAAI,CAAA;IACpC,iBAAiB,GAAG,KAAK,CAAA;IACzB,kBAAkB,GAAG,EAAE,CAAA;IACvB,SAAS,GAAa,EAAE,CAAA;IAEhC,YAAY,MAAmB,EAAE,IAAY,EAAE,IAAY,EAAE,UAAuB;QAClF,KAAK,EAAE,CAAA;QACP,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAA;QACxD,IAAI,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC,IAAI,IAAI,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAA;QACnD,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAA;QACvB,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,CAAA;QACrB,IAAI,CAAC,GAAG,GAAG,MAAM,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAA;QACtC,IAAI,CAAC,WAAW,GAAG,GAAG,MAAM,CAAC,IAAI,IAAI,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAA;QAE5D,IAAI,IAAc,CAAA;QAClB,IAAI,CAAC;YACH,MAAM,GAAG,GAA2B,EAAE,GAAI,OAAO,CAAC,GAA8B,EAAE,CAAA;YAClF,IAAI,UAAU,EAAE,CAAC;gBACf,GAAG,CAAC,UAAU,GAAG,UAAU,CAAC,UAAU,CAAA;gBACtC,GAAG,CAAC,cAAc,GAAG,IAAI,CAAC,EAAE,CAAA;gBAC5B,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,SAAS,CAAA;YACvC,CAAC;iBAAM,CAAC;gBACN,0EAA0E;gBAC1E,OAAO,GAAG,CAAC,UAAU,CAAA;gBACrB,OAAO,GAAG,CAAC,cAAc,CAAA;YAC3B,CAAC;YACD,IAAI,GAAG,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,EAAE;gBACxC,IAAI,EAAE,gBAAgB;gBACtB,IAAI;gBACJ,IAAI;gBACJ,GAAG,EAAE,IAAI,CAAC,GAAG;gBACb,GAAG;aACJ,CAAC,CAAA;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;YAC5D,IAAI,CAAC,MAAM,GAAG,IAAI,CAAA;YAClB,IAAI,CAAC,MAAM,GAAG,OAAO,CAAA;YACrB,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,2BAA2B,MAAM,CAAC,GAAG,MAAM,GAAG,MAAM,CAAC,CAAA;YACzE,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;YAChC,OAAO,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,CAAA;YAC5C,OAAM;QACR,CAAC;QAED,IAAI,CAAC,UAAU,GAAG,IAAI,CAAA;QAEtB,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;YAC9B,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAA;YAC9B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAA;YACpB,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAA;YACzB,IAAI,CAAC,iBAAiB,EAAE,CAAA;YACxB,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;QACzB,CAAC,CAAC,CAAA;QAEF,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE;YACtC,IAAI,CAAC,cAAc,EAAE,CAAA;YACrB,IAAI,CAAC,iBAAiB,EAAE,CAAA;YACxB,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;YAChC,IAAI,CAAC,SAAS,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAA;YACjD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAA;YAClB,IAAI,CAAC,UAAU,GAAG,SAAS,CAAA;YAC3B,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;QAC7B,CAAC,CAAC,CAAA;QAEF,IAAI,CAAC,eAAe,EAAE,CAAA;IACxB,CAAC;IAED,iDAAiD;IACjD,kBAAkB,CAAC,IAAY;QAC7B,IAAI,CAAC,WAAW,GAAG,IAAI,CAAA;QACvB,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAA;QAC7B,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAA;IACzB,CAAC;IAED,cAAc,CAAC,IAAY;QACzB,MAAM,UAAU,GAAG,YAAY,CAAC,oBAAoB,CAAC,IAAI,CAAC,CAAA;QAC1D,IAAI,UAAU,CAAC,MAAM,GAAG,YAAY,CAAC,uBAAuB,EAAE,CAAC;YAC7D,OAAM;QACR,CAAC;QAED,IAAI,CAAC,WAAW,GAAG,UAAU,CAAA;QAC7B,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAA;QAC7B,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;IAC/B,CAAC;IAED,KAAK,CAAC,IAAY;QAChB,IAAI,IAAI,CAAC,MAAM;YAAE,OAAM;QACvB,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,CAAA;QACrC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,IAAI,CAAC,CAAA;IAC9B,CAAC;IAED,IAAI;QACF,IAAI,IAAI,CAAC,MAAM;YAAE,OAAM;QACvB,IAAI,CAAC,cAAc,EAAE,CAAA;QACrB,IAAI,CAAC,iBAAiB,EAAE,CAAA;QACxB,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,CAAA;IACzB,CAAC;IAED,MAAM,CAAC,IAAY,EAAE,IAAY;QAC/B,IAAI,IAAI,CAAC,MAAM;YAAE,OAAM;QACvB,IAAI,CAAC,UAAU,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;IACrC,CAAC;IAED,sCAAsC;IACtC,SAAS,CAAC,MAAc;QACtB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;IACxB,CAAC;IAEO,SAAS,CAAC,KAAa;QAC7B,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAC1B,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,GAAG,EAAE,CAAC;YAChC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,GAAG,CAAC,CAAA;QACvD,CAAC;IACH,CAAC;IAEO,SAAS,CAAC,UAAyB;QACzC,IAAI,IAAI,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;YAC/B,OAAM;QACR,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,UAAU,CAAA;QACxB,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAA;IACjC,CAAC;IAEO,iBAAiB;QACvB,IAAI,IAAI,CAAC,MAAM;YAAE,OAAM;QACvB,IAAI,CAAC,cAAc,EAAE,CAAA;QACrB,IAAI,CAAC,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;YAC/B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAA;YACrB,IAAI,IAAI,CAAC,MAAM;gBAAE,OAAM;YACvB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAA;QACxB,CAAC,EAAE,YAAY,CAAC,eAAe,CAAC,CAAA;IAClC,CAAC;IAEO,cAAc;QACpB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpB,OAAM;QACR,CAAC;QACD,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;QAC5B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAA;IACvB,CAAC;IAEO,eAAe;QACrB,IAAI,IAAI,CAAC,YAAY,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC;YACnD,OAAM;QACR,CAAC;QAED,IAAI,CAAC,eAAe,EAAE,CAAA;IACxB,CAAC;IAEO,eAAe;QACrB,IAAI,CAAC,YAAY,GAAG,UAAU,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,CAAC,UAAU,EAAE,CAAA,CAAC,CAAC,EAAE,YAAY,CAAC,oBAAoB,CAAC,CAAA;IACrG,CAAC;IAEO,KAAK,CAAC,UAAU;QACtB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAA;QACxB,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE,OAAM;QAE3C,IAAI,IAAI,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;YAChC,IAAI,IAAI,CAAC,cAAc,KAAK,IAAI,EAAE,CAAC;gBACjC,IAAI,CAAC,cAAc,GAAG,MAAM,iBAAiB,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;YACpE,CAAC;YACD,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAA;YAC5D,MAAM,GAAG,GAAG,MAAM,aAAa,CAAC,SAAS,CAAC,CAAA;YAC1C,IAAI,GAAG,KAAK,IAAI,IAAI,IAAI,CAAC,cAAc,KAAK,IAAI,EAAE,CAAC;gBACjD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAA;YAC5B,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAA;YACrB,CAAC;QACH,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,SAAS,CAAC,MAAM,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAA;QAC1D,CAAC;QAED,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,IAAI,CAAC,eAAe,EAAE,CAAA;QACxB,CAAC;IACH,CAAC;IAEO,iBAAiB;QACvB,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACvB,OAAM;QACR,CAAC;QAED,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;QAC/B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAA;IAC1B,CAAC;IAEO,0BAA0B,CAAC,IAAY;QAC7C,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC3B,OAAM;QACR,CAAC;QAED,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAA;QAE/B,uDAAuD;QACvD,0CAA0C;QAC1C,kCAAkC;QAClC,MAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC,gCAAgC,EAAE,EAAE,CAAC,CAAA;QAErF,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;QAC5C,IAAI,YAAY,KAAK,CAAC,CAAC,EAAE,CAAC;YACxB,OAAM;QACR,CAAC;QAED,MAAM,SAAS,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,CAAA;QAChD,IAAI,CAAC,kBAAkB,GAAG,EAAE,CAAA;QAE5B,MAAM,UAAU,GAAG,YAAY,CAAC,oBAAoB,CAAC,SAAS,CAAC,CAAA;QAC/D,IAAI,UAAU,CAAC,MAAM,GAAG,YAAY,CAAC,uBAAuB,EAAE,CAAC;YAC7D,OAAM;QACR,CAAC;QAED,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAA;QAC7B,IAAI,CAAC,WAAW,GAAG,UAAU,CAAA;QAC7B,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;IAC/B,CAAC;IAEO,mBAAmB,CAAC,IAAY;QACtC,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAA;IACnD,CAAC;IAEO,SAAS,CAAC,OAAsB;QACtC,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,IAAI,CAAC,GAAG,EAAE,CAAC;YACrC,OAAM;QACR,CAAC;QAED,IAAI,CAAC,GAAG,GAAG,OAAO,CAAA;QAClB,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;IAC3B,CAAC;IAEO,MAAM,CAAC,cAAc,CAAC,IAAY;QACxC,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,wCAAwC,CAAC,CAAC,CAAA;QAC5E,MAAM,MAAM,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;QAClC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,IAAI,CAAA;QACb,CAAC;QAED,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,CAAA;YAC3B,IAAI,GAAG,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;gBAC7B,OAAO,IAAI,CAAA;YACb,CAAC;YAED,OAAO,kBAAkB,CAAC,GAAG,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAA;QAC/C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAA;QACb,CAAC;IACH,CAAC;IAEO,MAAM,CAAC,oBAAoB,CAAC,KAAa;QAC/C,MAAM,WAAW,GAAG,KAAK;aACtB,OAAO,CAAC,gCAAgC,EAAE,EAAE,CAAC,CAAE,+BAA+B;aAC9E,OAAO,CAAC,gCAAgC,EAAE,EAAE,CAAC;aAC7C,OAAO,CAAC,0BAA0B,EAAE,EAAE,CAAC;aACvC,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC,CAAA;QAChC,MAAM,SAAS,GAAG,WAAW;aAC1B,OAAO,CAAC,mBAAmB,EAAE,GAAG,CAAC;aACjC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;aACpB,IAAI,EAAE,CAAA;QAET,IAAI,SAAS,CAAC,MAAM,IAAI,YAAY,CAAC,uBAAuB,EAAE,CAAC;YAC7D,OAAO,SAAS,CAAA;QAClB,CAAC;QAED,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,uBAAuB,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,KAAK,CAAA;IACvF,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare function getProcessCwd(pid: number, platform?: NodeJS.Platform): string | null
|
|
2
|
-
export declare function getClaudeChildPid(shellPid: number, platform?: NodeJS.Platform): number | null
|
|
1
|
+
export declare function getProcessCwd(pid: number, platform?: NodeJS.Platform): Promise<string | null>;
|
|
2
|
+
export declare function getClaudeChildPid(shellPid: number, platform?: NodeJS.Platform): Promise<number | null>;
|
package/dist/src/process-cwd.js
CHANGED
|
@@ -1,15 +1,25 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
1
|
+
import { execFile } from 'node:child_process';
|
|
2
|
+
import { readlink, readFile } from 'node:fs/promises';
|
|
3
|
+
function runCommand(cmd, args) {
|
|
4
|
+
return new Promise((resolve, reject) => {
|
|
5
|
+
execFile(cmd, args, { encoding: 'utf8' }, (err, stdout) => {
|
|
6
|
+
if (err)
|
|
7
|
+
reject(err);
|
|
8
|
+
else
|
|
9
|
+
resolve(stdout);
|
|
10
|
+
});
|
|
11
|
+
});
|
|
12
|
+
}
|
|
13
|
+
export async function getProcessCwd(pid, platform = process.platform) {
|
|
4
14
|
if (!Number.isInteger(pid) || pid <= 0) {
|
|
5
15
|
return null;
|
|
6
16
|
}
|
|
7
17
|
try {
|
|
8
18
|
if (platform === 'linux') {
|
|
9
|
-
return
|
|
19
|
+
return await readlink(`/proc/${pid}/cwd`);
|
|
10
20
|
}
|
|
11
21
|
if (platform === 'darwin') {
|
|
12
|
-
const output =
|
|
22
|
+
const output = await runCommand('lsof', ['-a', '-d', 'cwd', '-p', String(pid), '-Fn']);
|
|
13
23
|
const cwdLine = output
|
|
14
24
|
.split('\n')
|
|
15
25
|
.find((line) => line.startsWith('n/') || line === 'n/');
|
|
@@ -22,7 +32,7 @@ export function getProcessCwd(pid, platform = process.platform) {
|
|
|
22
32
|
return null;
|
|
23
33
|
}
|
|
24
34
|
const CLAUDE_CHILD_MAX_DEPTH = 5;
|
|
25
|
-
export function getClaudeChildPid(shellPid, platform = process.platform) {
|
|
35
|
+
export async function getClaudeChildPid(shellPid, platform = process.platform) {
|
|
26
36
|
if (!Number.isInteger(shellPid) || shellPid <= 0) {
|
|
27
37
|
return null;
|
|
28
38
|
}
|
|
@@ -34,10 +44,11 @@ export function getClaudeChildPid(shellPid, platform = process.platform) {
|
|
|
34
44
|
}
|
|
35
45
|
return null;
|
|
36
46
|
}
|
|
37
|
-
function findClaudeChildDarwin(shellPid) {
|
|
47
|
+
async function findClaudeChildDarwin(shellPid) {
|
|
38
48
|
let initialChildren;
|
|
39
49
|
try {
|
|
40
|
-
|
|
50
|
+
const output = await runCommand('pgrep', ['-P', String(shellPid)]);
|
|
51
|
+
initialChildren = output
|
|
41
52
|
.split('\n')
|
|
42
53
|
.map((s) => s.trim())
|
|
43
54
|
.filter(Boolean);
|
|
@@ -51,11 +62,12 @@ function findClaudeChildDarwin(shellPid) {
|
|
|
51
62
|
if (item.depth >= CLAUDE_CHILD_MAX_DEPTH)
|
|
52
63
|
continue;
|
|
53
64
|
try {
|
|
54
|
-
const line =
|
|
55
|
-
|
|
56
|
-
|
|
65
|
+
const line = await runCommand('ps', ['-o', 'pid=,args=', '-p', item.pidStr]);
|
|
66
|
+
const trimmed = line.trim();
|
|
67
|
+
if (trimmed) {
|
|
68
|
+
const spaceIdx = trimmed.search(/\s/);
|
|
57
69
|
if (spaceIdx !== -1) {
|
|
58
|
-
const args =
|
|
70
|
+
const args = trimmed.slice(spaceIdx).trim();
|
|
59
71
|
const binary = args.split(' ')[0] ?? '';
|
|
60
72
|
if (((binary === 'node' || binary.endsWith('/node')) && args.includes('claude')) ||
|
|
61
73
|
binary === 'claude' || binary.endsWith('/claude')) {
|
|
@@ -69,7 +81,8 @@ function findClaudeChildDarwin(shellPid) {
|
|
|
69
81
|
}
|
|
70
82
|
// Not claude — enqueue children for next level
|
|
71
83
|
try {
|
|
72
|
-
const
|
|
84
|
+
const childOutput = await runCommand('pgrep', ['-P', item.pidStr]);
|
|
85
|
+
const children = childOutput
|
|
73
86
|
.split('\n')
|
|
74
87
|
.map((s) => s.trim())
|
|
75
88
|
.filter(Boolean);
|
|
@@ -83,10 +96,11 @@ function findClaudeChildDarwin(shellPid) {
|
|
|
83
96
|
}
|
|
84
97
|
return null;
|
|
85
98
|
}
|
|
86
|
-
function findClaudeChildLinux(shellPid) {
|
|
99
|
+
async function findClaudeChildLinux(shellPid) {
|
|
87
100
|
let initialChildren;
|
|
88
101
|
try {
|
|
89
|
-
|
|
102
|
+
const content = await readFile(`/proc/${shellPid}/task/${shellPid}/children`, 'utf8');
|
|
103
|
+
initialChildren = content
|
|
90
104
|
.split(' ')
|
|
91
105
|
.map((s) => s.trim())
|
|
92
106
|
.filter(Boolean);
|
|
@@ -100,7 +114,7 @@ function findClaudeChildLinux(shellPid) {
|
|
|
100
114
|
if (item.depth >= CLAUDE_CHILD_MAX_DEPTH)
|
|
101
115
|
continue;
|
|
102
116
|
try {
|
|
103
|
-
const cmdline =
|
|
117
|
+
const cmdline = await readFile(`/proc/${item.pidStr}/cmdline`, 'utf8');
|
|
104
118
|
const parts = cmdline.split('\0').filter(Boolean);
|
|
105
119
|
const binary = parts[0] ?? '';
|
|
106
120
|
if (((binary === 'node' || binary.endsWith('/node')) && cmdline.includes('claude')) ||
|
|
@@ -113,7 +127,8 @@ function findClaudeChildLinux(shellPid) {
|
|
|
113
127
|
}
|
|
114
128
|
// Not claude — enqueue children for next level
|
|
115
129
|
try {
|
|
116
|
-
const
|
|
130
|
+
const content = await readFile(`/proc/${item.pidStr}/task/${item.pidStr}/children`, 'utf8');
|
|
131
|
+
const children = content
|
|
117
132
|
.split(' ')
|
|
118
133
|
.map((s) => s.trim())
|
|
119
134
|
.filter(Boolean);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"process-cwd.js","sourceRoot":"","sources":["../../src/process-cwd.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"process-cwd.js","sourceRoot":"","sources":["../../src/process-cwd.ts"],"names":[],"mappings":"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"}
|
package/dist/src/ui/app.js
CHANGED
|
@@ -24,6 +24,12 @@ export class App {
|
|
|
24
24
|
}
|
|
25
25
|
});
|
|
26
26
|
this.bindGlobalKeys();
|
|
27
|
+
this.manager.on('name', () => {
|
|
28
|
+
try {
|
|
29
|
+
saveState(this.statePath, this.manager);
|
|
30
|
+
}
|
|
31
|
+
catch { /* ignore */ }
|
|
32
|
+
});
|
|
27
33
|
this.terminal.onResize(() => {
|
|
28
34
|
const cols = this.terminal.cols;
|
|
29
35
|
const rows = this.terminal.rows;
|
package/dist/src/ui/app.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.js","sourceRoot":"","sources":["../../../src/ui/app.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"app.js","sourceRoot":"","sources":["../../../src/ui/app.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/agent.ts
CHANGED
|
@@ -33,7 +33,7 @@ export class AgentSession extends EventEmitter {
|
|
|
33
33
|
private ptyProcess: pty.IPty | undefined
|
|
34
34
|
private exited = false
|
|
35
35
|
private idleTimer: ReturnType<typeof setTimeout> | null = null
|
|
36
|
-
private cwdPollTimer: ReturnType<typeof
|
|
36
|
+
private cwdPollTimer: ReturnType<typeof setTimeout> | null = null
|
|
37
37
|
private claudeChildPid: number | null = null
|
|
38
38
|
private displayNameLocked = false
|
|
39
39
|
private initialInputBuffer = ''
|
|
@@ -175,30 +175,39 @@ export class AgentSession extends EventEmitter {
|
|
|
175
175
|
}
|
|
176
176
|
|
|
177
177
|
private startCwdPolling(): void {
|
|
178
|
-
if (this.cwdPollTimer || !this.ptyProcess) {
|
|
178
|
+
if (this.cwdPollTimer !== null || !this.ptyProcess) {
|
|
179
179
|
return
|
|
180
180
|
}
|
|
181
181
|
|
|
182
|
-
this.
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
182
|
+
this.scheduleCwdPoll()
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
private scheduleCwdPoll(): void {
|
|
186
|
+
this.cwdPollTimer = setTimeout(() => { void this.runCwdPoll() }, AgentSession.CWD_POLL_INTERVAL_MS)
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
private async runCwdPoll(): Promise<void> {
|
|
190
|
+
this.cwdPollTimer = null
|
|
191
|
+
if (this.exited || !this.ptyProcess) return
|
|
186
192
|
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
} else {
|
|
196
|
-
this.updateCwd(cwd)
|
|
197
|
-
}
|
|
193
|
+
if (this.type === 'claude-code') {
|
|
194
|
+
if (this.claudeChildPid === null) {
|
|
195
|
+
this.claudeChildPid = await getClaudeChildPid(this.ptyProcess.pid)
|
|
196
|
+
}
|
|
197
|
+
const targetPid = this.claudeChildPid ?? this.ptyProcess.pid
|
|
198
|
+
const cwd = await getProcessCwd(targetPid)
|
|
199
|
+
if (cwd === null && this.claudeChildPid !== null) {
|
|
200
|
+
this.claudeChildPid = null
|
|
198
201
|
} else {
|
|
199
|
-
this.updateCwd(
|
|
202
|
+
this.updateCwd(cwd)
|
|
200
203
|
}
|
|
201
|
-
}
|
|
204
|
+
} else {
|
|
205
|
+
this.updateCwd(await getProcessCwd(this.ptyProcess.pid))
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
if (!this.exited) {
|
|
209
|
+
this.scheduleCwdPoll()
|
|
210
|
+
}
|
|
202
211
|
}
|
|
203
212
|
|
|
204
213
|
private clearCwdPollTimer(): void {
|
|
@@ -206,7 +215,7 @@ export class AgentSession extends EventEmitter {
|
|
|
206
215
|
return
|
|
207
216
|
}
|
|
208
217
|
|
|
209
|
-
|
|
218
|
+
clearTimeout(this.cwdPollTimer)
|
|
210
219
|
this.cwdPollTimer = null
|
|
211
220
|
}
|
|
212
221
|
|
package/src/process-cwd.ts
CHANGED
|
@@ -1,22 +1,27 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { execFile } from 'node:child_process'
|
|
2
|
+
import { readlink, readFile } from 'node:fs/promises'
|
|
3
|
+
|
|
4
|
+
function runCommand(cmd: string, args: string[]): Promise<string> {
|
|
5
|
+
return new Promise((resolve, reject) => {
|
|
6
|
+
execFile(cmd, args, { encoding: 'utf8' }, (err, stdout) => {
|
|
7
|
+
if (err) reject(err)
|
|
8
|
+
else resolve(stdout as string)
|
|
9
|
+
})
|
|
10
|
+
})
|
|
11
|
+
}
|
|
3
12
|
|
|
4
|
-
export function getProcessCwd(pid: number, platform: NodeJS.Platform = process.platform): string | null {
|
|
13
|
+
export async function getProcessCwd(pid: number, platform: NodeJS.Platform = process.platform): Promise<string | null> {
|
|
5
14
|
if (!Number.isInteger(pid) || pid <= 0) {
|
|
6
15
|
return null
|
|
7
16
|
}
|
|
8
17
|
|
|
9
18
|
try {
|
|
10
19
|
if (platform === 'linux') {
|
|
11
|
-
return
|
|
20
|
+
return await readlink(`/proc/${pid}/cwd`)
|
|
12
21
|
}
|
|
13
22
|
|
|
14
23
|
if (platform === 'darwin') {
|
|
15
|
-
const output =
|
|
16
|
-
'lsof',
|
|
17
|
-
['-a', '-d', 'cwd', '-p', String(pid), '-Fn'],
|
|
18
|
-
{ encoding: 'utf8' },
|
|
19
|
-
)
|
|
24
|
+
const output = await runCommand('lsof', ['-a', '-d', 'cwd', '-p', String(pid), '-Fn'])
|
|
20
25
|
const cwdLine = output
|
|
21
26
|
.split('\n')
|
|
22
27
|
.find((line) => line.startsWith('n/') || line === 'n/')
|
|
@@ -32,10 +37,10 @@ export function getProcessCwd(pid: number, platform: NodeJS.Platform = process.p
|
|
|
32
37
|
|
|
33
38
|
const CLAUDE_CHILD_MAX_DEPTH = 5
|
|
34
39
|
|
|
35
|
-
export function getClaudeChildPid(
|
|
40
|
+
export async function getClaudeChildPid(
|
|
36
41
|
shellPid: number,
|
|
37
42
|
platform: NodeJS.Platform = process.platform,
|
|
38
|
-
): number | null {
|
|
43
|
+
): Promise<number | null> {
|
|
39
44
|
if (!Number.isInteger(shellPid) || shellPid <= 0) {
|
|
40
45
|
return null
|
|
41
46
|
}
|
|
@@ -51,10 +56,11 @@ export function getClaudeChildPid(
|
|
|
51
56
|
return null
|
|
52
57
|
}
|
|
53
58
|
|
|
54
|
-
function findClaudeChildDarwin(shellPid: number): number | null {
|
|
59
|
+
async function findClaudeChildDarwin(shellPid: number): Promise<number | null> {
|
|
55
60
|
let initialChildren: string[]
|
|
56
61
|
try {
|
|
57
|
-
|
|
62
|
+
const output = await runCommand('pgrep', ['-P', String(shellPid)])
|
|
63
|
+
initialChildren = output
|
|
58
64
|
.split('\n')
|
|
59
65
|
.map((s) => s.trim())
|
|
60
66
|
.filter(Boolean)
|
|
@@ -69,11 +75,12 @@ function findClaudeChildDarwin(shellPid: number): number | null {
|
|
|
69
75
|
if (item.depth >= CLAUDE_CHILD_MAX_DEPTH) continue
|
|
70
76
|
|
|
71
77
|
try {
|
|
72
|
-
const line =
|
|
73
|
-
|
|
74
|
-
|
|
78
|
+
const line = await runCommand('ps', ['-o', 'pid=,args=', '-p', item.pidStr])
|
|
79
|
+
const trimmed = line.trim()
|
|
80
|
+
if (trimmed) {
|
|
81
|
+
const spaceIdx = trimmed.search(/\s/)
|
|
75
82
|
if (spaceIdx !== -1) {
|
|
76
|
-
const args =
|
|
83
|
+
const args = trimmed.slice(spaceIdx).trim()
|
|
77
84
|
const binary = args.split(' ')[0] ?? ''
|
|
78
85
|
if (
|
|
79
86
|
((binary === 'node' || binary.endsWith('/node')) && args.includes('claude')) ||
|
|
@@ -89,7 +96,8 @@ function findClaudeChildDarwin(shellPid: number): number | null {
|
|
|
89
96
|
|
|
90
97
|
// Not claude — enqueue children for next level
|
|
91
98
|
try {
|
|
92
|
-
const
|
|
99
|
+
const childOutput = await runCommand('pgrep', ['-P', item.pidStr])
|
|
100
|
+
const children = childOutput
|
|
93
101
|
.split('\n')
|
|
94
102
|
.map((s) => s.trim())
|
|
95
103
|
.filter(Boolean)
|
|
@@ -104,10 +112,11 @@ function findClaudeChildDarwin(shellPid: number): number | null {
|
|
|
104
112
|
return null
|
|
105
113
|
}
|
|
106
114
|
|
|
107
|
-
function findClaudeChildLinux(shellPid: number): number | null {
|
|
115
|
+
async function findClaudeChildLinux(shellPid: number): Promise<number | null> {
|
|
108
116
|
let initialChildren: string[]
|
|
109
117
|
try {
|
|
110
|
-
|
|
118
|
+
const content = await readFile(`/proc/${shellPid}/task/${shellPid}/children`, 'utf8')
|
|
119
|
+
initialChildren = content
|
|
111
120
|
.split(' ')
|
|
112
121
|
.map((s) => s.trim())
|
|
113
122
|
.filter(Boolean)
|
|
@@ -122,7 +131,7 @@ function findClaudeChildLinux(shellPid: number): number | null {
|
|
|
122
131
|
if (item.depth >= CLAUDE_CHILD_MAX_DEPTH) continue
|
|
123
132
|
|
|
124
133
|
try {
|
|
125
|
-
const cmdline =
|
|
134
|
+
const cmdline = await readFile(`/proc/${item.pidStr}/cmdline`, 'utf8')
|
|
126
135
|
const parts = cmdline.split('\0').filter(Boolean)
|
|
127
136
|
const binary = parts[0] ?? ''
|
|
128
137
|
if (
|
|
@@ -137,7 +146,8 @@ function findClaudeChildLinux(shellPid: number): number | null {
|
|
|
137
146
|
|
|
138
147
|
// Not claude — enqueue children for next level
|
|
139
148
|
try {
|
|
140
|
-
const
|
|
149
|
+
const content = await readFile(`/proc/${item.pidStr}/task/${item.pidStr}/children`, 'utf8')
|
|
150
|
+
const children = content
|
|
141
151
|
.split(' ')
|
|
142
152
|
.map((s) => s.trim())
|
|
143
153
|
.filter(Boolean)
|
package/src/ui/app.ts
CHANGED
|
@@ -41,6 +41,10 @@ export class App {
|
|
|
41
41
|
|
|
42
42
|
this.bindGlobalKeys()
|
|
43
43
|
|
|
44
|
+
this.manager.on('name', () => {
|
|
45
|
+
try { saveState(this.statePath, this.manager) } catch { /* ignore */ }
|
|
46
|
+
})
|
|
47
|
+
|
|
44
48
|
this.terminal.onResize(() => {
|
|
45
49
|
const cols = this.terminal.cols
|
|
46
50
|
const rows = this.terminal.rows
|