@xrkseek/harness 0.6.13 → 0.6.15

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.
Files changed (144) hide show
  1. package/node_modules/@xrkseek/core-agent-loop/dist/index.d.ts +1 -1
  2. package/node_modules/@xrkseek/core-agent-loop/dist/index.d.ts.map +1 -1
  3. package/node_modules/@xrkseek/core-agent-loop/dist/index.js +4 -1
  4. package/node_modules/@xrkseek/core-agent-loop/dist/index.js.map +1 -1
  5. package/node_modules/@xrkseek/core-agent-loop/dist/request-header-log.d.ts +11 -1
  6. package/node_modules/@xrkseek/core-agent-loop/dist/request-header-log.d.ts.map +1 -1
  7. package/node_modules/@xrkseek/core-agent-loop/dist/request-header-log.js +66 -0
  8. package/node_modules/@xrkseek/core-agent-loop/dist/request-header-log.js.map +1 -1
  9. package/node_modules/@xrkseek/core-session/dist/compaction.d.ts +6 -1
  10. package/node_modules/@xrkseek/core-session/dist/compaction.d.ts.map +1 -1
  11. package/node_modules/@xrkseek/core-session/dist/compaction.js +25 -17
  12. package/node_modules/@xrkseek/core-session/dist/compaction.js.map +1 -1
  13. package/node_modules/@xrkseek/core-session/dist/index.d.ts +2 -2
  14. package/node_modules/@xrkseek/core-session/dist/index.d.ts.map +1 -1
  15. package/node_modules/@xrkseek/core-session/dist/index.js +2 -2
  16. package/node_modules/@xrkseek/core-session/dist/index.js.map +1 -1
  17. package/node_modules/@xrkseek/core-session/dist/sqlite-journal.d.ts +20 -0
  18. package/node_modules/@xrkseek/core-session/dist/sqlite-journal.d.ts.map +1 -0
  19. package/node_modules/@xrkseek/core-session/dist/sqlite-journal.js +41 -0
  20. package/node_modules/@xrkseek/core-session/dist/sqlite-journal.js.map +1 -0
  21. package/node_modules/@xrkseek/core-session/dist/sqlite-store.d.ts +1 -0
  22. package/node_modules/@xrkseek/core-session/dist/sqlite-store.d.ts.map +1 -1
  23. package/node_modules/@xrkseek/core-session/dist/sqlite-store.js +10 -4
  24. package/node_modules/@xrkseek/core-session/dist/sqlite-store.js.map +1 -1
  25. package/node_modules/@xrkseek/core-session/dist/store-lock.d.ts +2 -4
  26. package/node_modules/@xrkseek/core-session/dist/store-lock.d.ts.map +1 -1
  27. package/node_modules/@xrkseek/core-session/dist/store-lock.js +36 -133
  28. package/node_modules/@xrkseek/core-session/dist/store-lock.js.map +1 -1
  29. package/node_modules/@xrkseek/core-session/dist/surface-estimate.d.ts +35 -2
  30. package/node_modules/@xrkseek/core-session/dist/surface-estimate.d.ts.map +1 -1
  31. package/node_modules/@xrkseek/core-session/dist/surface-estimate.js +91 -3
  32. package/node_modules/@xrkseek/core-session/dist/surface-estimate.js.map +1 -1
  33. package/node_modules/@xrkseek/core-tools/dist/std-tools.d.ts.map +1 -1
  34. package/node_modules/@xrkseek/core-tools/dist/std-tools.js +9 -0
  35. package/node_modules/@xrkseek/core-tools/dist/std-tools.js.map +1 -1
  36. package/node_modules/@xrkseek/exec-pty/dist/config.d.ts +7 -1
  37. package/node_modules/@xrkseek/exec-pty/dist/config.d.ts.map +1 -1
  38. package/node_modules/@xrkseek/exec-pty/dist/config.js +11 -2
  39. package/node_modules/@xrkseek/exec-pty/dist/config.js.map +1 -1
  40. package/node_modules/@xrkseek/exec-pty/dist/session.d.ts.map +1 -1
  41. package/node_modules/@xrkseek/exec-pty/dist/session.js +7 -1
  42. package/node_modules/@xrkseek/exec-pty/dist/session.js.map +1 -1
  43. package/node_modules/@xrkseek/exec-pty/dist/windows-pty.d.ts +5 -1
  44. package/node_modules/@xrkseek/exec-pty/dist/windows-pty.d.ts.map +1 -1
  45. package/node_modules/@xrkseek/exec-pty/dist/windows-pty.js +5 -1
  46. package/node_modules/@xrkseek/exec-pty/dist/windows-pty.js.map +1 -1
  47. package/node_modules/@xrkseek/exec-sandbox/dist/resolve.d.ts +4 -1
  48. package/node_modules/@xrkseek/exec-sandbox/dist/resolve.d.ts.map +1 -1
  49. package/node_modules/@xrkseek/exec-sandbox/dist/resolve.js.map +1 -1
  50. package/node_modules/@xrkseek/exec-shell/dist/index.d.ts +10 -0
  51. package/node_modules/@xrkseek/exec-shell/dist/index.d.ts.map +1 -1
  52. package/node_modules/@xrkseek/exec-shell/dist/index.js +8 -0
  53. package/node_modules/@xrkseek/exec-shell/dist/index.js.map +1 -1
  54. package/node_modules/@xrkseek/mcp/dist/client.d.ts.map +1 -1
  55. package/node_modules/@xrkseek/mcp/dist/client.js +19 -4
  56. package/node_modules/@xrkseek/mcp/dist/client.js.map +1 -1
  57. package/node_modules/@xrkseek/preset-harness/dist/tsconfig.tsbuildinfo +1 -1
  58. package/node_modules/@xrkseek/preset-minimal/dist/tsconfig.tsbuildinfo +1 -1
  59. package/node_modules/@xrkseek/preset-server/dist/tsconfig.tsbuildinfo +1 -1
  60. package/node_modules/@xrkseek/protocol/dist/index.d.ts +1 -1
  61. package/node_modules/@xrkseek/protocol/dist/index.d.ts.map +1 -1
  62. package/node_modules/@xrkseek/protocol/dist/index.js.map +1 -1
  63. package/node_modules/@xrkseek/protocol/dist/session-events.d.ts +49 -1
  64. package/node_modules/@xrkseek/protocol/dist/session-events.d.ts.map +1 -1
  65. package/node_modules/@xrkseek/protocol/dist/session-events.js +2 -0
  66. package/node_modules/@xrkseek/protocol/dist/session-events.js.map +1 -1
  67. package/node_modules/@xrkseek/protocol/dist/validate.d.ts.map +1 -1
  68. package/node_modules/@xrkseek/protocol/dist/validate.js +93 -0
  69. package/node_modules/@xrkseek/protocol/dist/validate.js.map +1 -1
  70. package/node_modules/@xrkseek/server-face/dist/adapt/wire-event.d.ts +2 -0
  71. package/node_modules/@xrkseek/server-face/dist/adapt/wire-event.d.ts.map +1 -1
  72. package/node_modules/@xrkseek/server-face/dist/adapt/wire-event.js +6 -2
  73. package/node_modules/@xrkseek/server-face/dist/adapt/wire-event.js.map +1 -1
  74. package/node_modules/@xrkseek/server-face/dist/agent-roster-store.d.ts.map +1 -1
  75. package/node_modules/@xrkseek/server-face/dist/agent-roster-store.js +24 -8
  76. package/node_modules/@xrkseek/server-face/dist/agent-roster-store.js.map +1 -1
  77. package/node_modules/@xrkseek/server-face/dist/agent-team-graph.d.ts +7 -1
  78. package/node_modules/@xrkseek/server-face/dist/agent-team-graph.d.ts.map +1 -1
  79. package/node_modules/@xrkseek/server-face/dist/agent-team-graph.js +28 -1
  80. package/node_modules/@xrkseek/server-face/dist/agent-team-graph.js.map +1 -1
  81. package/node_modules/@xrkseek/server-face/dist/context.d.ts +5 -0
  82. package/node_modules/@xrkseek/server-face/dist/context.d.ts.map +1 -1
  83. package/node_modules/@xrkseek/server-face/dist/handlers/session.d.ts.map +1 -1
  84. package/node_modules/@xrkseek/server-face/dist/handlers/session.js +13 -4
  85. package/node_modules/@xrkseek/server-face/dist/handlers/session.js.map +1 -1
  86. package/node_modules/@xrkseek/server-face/dist/index.d.ts +1 -1
  87. package/node_modules/@xrkseek/server-face/dist/index.d.ts.map +1 -1
  88. package/node_modules/@xrkseek/server-face/dist/index.js +1 -1
  89. package/node_modules/@xrkseek/server-face/dist/index.js.map +1 -1
  90. package/node_modules/@xrkseek/server-face/dist/job-session-journal.d.ts +11 -0
  91. package/node_modules/@xrkseek/server-face/dist/job-session-journal.d.ts.map +1 -0
  92. package/node_modules/@xrkseek/server-face/dist/job-session-journal.js +78 -0
  93. package/node_modules/@xrkseek/server-face/dist/job-session-journal.js.map +1 -0
  94. package/node_modules/@xrkseek/server-face/dist/list-work-slice.d.ts +27 -0
  95. package/node_modules/@xrkseek/server-face/dist/list-work-slice.d.ts.map +1 -0
  96. package/node_modules/@xrkseek/server-face/dist/list-work-slice.js +39 -0
  97. package/node_modules/@xrkseek/server-face/dist/list-work-slice.js.map +1 -0
  98. package/node_modules/@xrkseek/server-face/dist/peer-session-wait.d.ts.map +1 -1
  99. package/node_modules/@xrkseek/server-face/dist/peer-session-wait.js +5 -2
  100. package/node_modules/@xrkseek/server-face/dist/peer-session-wait.js.map +1 -1
  101. package/node_modules/@xrkseek/server-face/dist/questions.d.ts +48 -7
  102. package/node_modules/@xrkseek/server-face/dist/questions.d.ts.map +1 -1
  103. package/node_modules/@xrkseek/server-face/dist/questions.js +176 -17
  104. package/node_modules/@xrkseek/server-face/dist/questions.js.map +1 -1
  105. package/node_modules/@xrkseek/server-face/dist/runtime.d.ts.map +1 -1
  106. package/node_modules/@xrkseek/server-face/dist/runtime.js +23 -3
  107. package/node_modules/@xrkseek/server-face/dist/runtime.js.map +1 -1
  108. package/node_modules/@xrkseek/server-face/dist/session-archive-activity.d.ts +9 -0
  109. package/node_modules/@xrkseek/server-face/dist/session-archive-activity.d.ts.map +1 -0
  110. package/node_modules/@xrkseek/server-face/dist/session-archive-activity.js +47 -0
  111. package/node_modules/@xrkseek/server-face/dist/session-archive-activity.js.map +1 -0
  112. package/node_modules/@xrkseek/server-face/dist/session-status.d.ts.map +1 -1
  113. package/node_modules/@xrkseek/server-face/dist/session-status.js +17 -2
  114. package/node_modules/@xrkseek/server-face/dist/session-status.js.map +1 -1
  115. package/node_modules/@xrkseek/server-face/dist/subagent-tools.d.ts.map +1 -1
  116. package/node_modules/@xrkseek/server-face/dist/subagent-tools.js +5 -2
  117. package/node_modules/@xrkseek/server-face/dist/subagent-tools.js.map +1 -1
  118. package/node_modules/@xrkseek/server-face/dist/types.d.ts +6 -0
  119. package/node_modules/@xrkseek/server-face/dist/types.d.ts.map +1 -1
  120. package/node_modules/@xrkseek/server-face/dist/wait-drain-idle.d.ts +9 -0
  121. package/node_modules/@xrkseek/server-face/dist/wait-drain-idle.d.ts.map +1 -1
  122. package/node_modules/@xrkseek/server-face/dist/wait-drain-idle.js +38 -4
  123. package/node_modules/@xrkseek/server-face/dist/wait-drain-idle.js.map +1 -1
  124. package/node_modules/@xrkseek/server-face/dist/wire/rpc-error.d.ts +1 -1
  125. package/node_modules/@xrkseek/server-face/dist/wire/rpc-error.d.ts.map +1 -1
  126. package/node_modules/@xrkseek/server-face/dist/wire/rpc-error.js +2 -0
  127. package/node_modules/@xrkseek/server-face/dist/wire/rpc-error.js.map +1 -1
  128. package/node_modules/@xrkseek/server-face/dist/workspace-face.d.ts.map +1 -1
  129. package/node_modules/@xrkseek/server-face/dist/workspace-face.js +20 -0
  130. package/node_modules/@xrkseek/server-face/dist/workspace-face.js.map +1 -1
  131. package/node_modules/@xrkseek/server-host/dist/index.d.ts.map +1 -1
  132. package/node_modules/@xrkseek/server-host/dist/index.js +1 -1
  133. package/node_modules/@xrkseek/server-host/dist/index.js.map +1 -1
  134. package/node_modules/@xrkseek/server-host/dist/sidebar-agent-pty.d.ts.map +1 -1
  135. package/node_modules/@xrkseek/server-host/dist/sidebar-agent-pty.js +3 -7
  136. package/node_modules/@xrkseek/server-host/dist/sidebar-agent-pty.js.map +1 -1
  137. package/node_modules/@xrkseek/server-host/dist/sidebar-pty.d.ts.map +1 -1
  138. package/node_modules/@xrkseek/server-host/dist/sidebar-pty.js +8 -4
  139. package/node_modules/@xrkseek/server-host/dist/sidebar-pty.js.map +1 -1
  140. package/node_modules/@xrkseek/server-http/dist/boot-inject.d.ts +2 -2
  141. package/node_modules/@xrkseek/server-http/dist/boot-inject.d.ts.map +1 -1
  142. package/node_modules/@xrkseek/server-http/dist/boot-inject.js +8 -4
  143. package/node_modules/@xrkseek/server-http/dist/boot-inject.js.map +1 -1
  144. package/package.json +1 -1
@@ -3,11 +3,12 @@
3
3
  * (`sessions.db`). DSH uses per-session `session.lock`; XRK stores every
4
4
  * session in one SQLite file, so the lease guards the directory.
5
5
  *
6
- * Portable PID lockfile (no native flock addon): a live holder refuses a
7
- * second exclusive open; a crashed holder's stale file is stolen after the
8
- * PID check fails. Empty / unreadable lockfiles are treated as contended
9
- * (brief retry) — never stolen on first sight — to avoid dual writers during
10
- * the create window.
6
+ * Portable lockfile with **no PID steal**. A second writer that sees an
7
+ * existing lock always gets {@link SessionsDirInUseError} — even when the
8
+ * named PID looks dead. PID reuse on Windows would otherwise tear concurrent
9
+ * SQLite writers. Crash reclaim is operator-visible (delete the lock file /
10
+ * quit the other Host); a future kernel mutex can auto-reclaim without
11
+ * reintroducing steal-by-PID.
11
12
  */
12
13
  import { mkdirSync, readFileSync, unlinkSync, writeFileSync, } from "node:fs";
13
14
  import path from "node:path";
@@ -25,15 +26,11 @@ export class SessionsDirInUseError extends Error {
25
26
  constructor(dir, holderPid) {
26
27
  const root = path.resolve(dir);
27
28
  const lockPath = path.join(root, SESSIONS_WRITE_LOCK_FILENAME);
28
- const pidAlive = holderPid !== undefined ? isProcessAlive(holderPid) : false;
29
29
  const holderLine = holderPid !== undefined
30
- ? pidAlive
31
- ? ` Holder process PID ${String(holderPid)} is still running.`
32
- : ` Lock file names PID ${String(holderPid)}, but that process is gone.`
30
+ ? ` Lock file names PID ${String(holderPid)}.`
33
31
  : "";
34
- const tip = pidAlive
35
- ? " Quit other XRK Hosts (Desktop app, or `xrkh serve` / `xrkh web` in a terminal), then try again."
36
- : " No live holder was found — if this keeps happening, delete the lock file and start again.";
32
+ const tip = " Quit other XRK Hosts (Desktop app, or `xrkh serve` / `xrkh web` in a terminal)." +
33
+ " If that Host already exited, delete the lock file and try again.";
37
34
  super(`Session store lock: data folder already in use.${holderLine}${tip}\nLock file: ${lockPath}`);
38
35
  this.name = "SessionsDirInUseError";
39
36
  this.dir = root;
@@ -43,19 +40,6 @@ export class SessionsDirInUseError extends Error {
43
40
  }
44
41
  /** In-process exclusive holders keyed by resolved directory. */
45
42
  const localExclusive = new Map();
46
- function isProcessAlive(pid) {
47
- if (!Number.isInteger(pid) || pid <= 0)
48
- return false;
49
- try {
50
- process.kill(pid, 0);
51
- return true;
52
- }
53
- catch (err) {
54
- const code = err.code;
55
- // EPERM: process exists but we cannot signal it — treat as live.
56
- return code === "EPERM";
57
- }
58
- }
59
43
  function readHolderPid(lockPath) {
60
44
  try {
61
45
  const text = readFileSync(lockPath, "utf8").trim();
@@ -68,32 +52,10 @@ function readHolderPid(lockPath) {
68
52
  return undefined;
69
53
  }
70
54
  }
71
- /** Best-effort remove a lock whose holder is dead or missing. */
72
- function unlinkStaleLock(lockPath) {
73
- const holderPid = readHolderPid(lockPath);
74
- if (holderPid !== undefined && isProcessAlive(holderPid)) {
75
- return false;
76
- }
77
- try {
78
- unlinkSync(lockPath);
79
- return true;
80
- }
81
- catch {
82
- return false;
83
- }
84
- }
85
- /** Sync backoff without timers (lock acquire is sync). */
86
- function spinWaitMs(ms) {
87
- const sab = new SharedArrayBuffer(4);
88
- const view = new Int32Array(sab);
89
- Atomics.wait(view, 0, 0, ms);
90
- }
91
55
  /**
92
56
  * Acquire exclusive write ownership of `dir`.
93
- * Dead holder PIDs (crash / Cursor force-quit of a test Host) reclaim the
94
- * lock file automatically — no manual delete for the common case.
95
- * @throws {SessionsDirInUseError} when another live process (or this process)
96
- * already holds the lease.
57
+ * @throws {SessionsDirInUseError} when another process (or this process)
58
+ * already holds the lease — never steals a lockfile by PID liveness.
97
59
  */
98
60
  export function acquireSessionsDirLock(dir) {
99
61
  const root = path.resolve(dir);
@@ -103,97 +65,38 @@ export function acquireSessionsDirLock(dir) {
103
65
  throw new SessionsDirInUseError(root, process.pid);
104
66
  }
105
67
  const lockPath = path.join(root, SESSIONS_WRITE_LOCK_FILENAME);
106
- /** Attempts that saw an empty/unreadable lock before allowing a steal. */
107
- let emptySightings = 0;
108
- for (let attempt = 0; attempt < 10; attempt += 1) {
109
- try {
110
- // Create + write PID in one call to shrink the empty-file window.
111
- writeFileSync(lockPath, `${process.pid}\n`, { flag: "wx" });
112
- if (readHolderPid(lockPath) !== process.pid) {
113
- // Path was replaced under us — drop and retry.
114
- try {
115
- unlinkSync(lockPath);
116
- }
117
- catch {
118
- /* ignore */
119
- }
120
- continue;
121
- }
122
- let released = false;
123
- const lock = {
124
- release() {
125
- if (released)
126
- return;
127
- released = true;
128
- localExclusive.delete(root);
129
- try {
130
- // Never unlink another holder's lease if we were stolen.
131
- if (readHolderPid(lockPath) === process.pid) {
132
- unlinkSync(lockPath);
133
- }
134
- }
135
- catch {
136
- /* ignore */
137
- }
138
- },
139
- };
140
- localExclusive.set(root, lock);
141
- return lock;
142
- }
143
- catch (err) {
144
- const code = err.code;
145
- if (code !== "EEXIST")
146
- throw err;
147
- const holderPid = readHolderPid(lockPath);
148
- if (holderPid !== undefined && isProcessAlive(holderPid)) {
149
- throw new SessionsDirInUseError(root, holderPid);
150
- }
151
- if (holderPid === undefined) {
152
- // Contended create window or corrupt file — wait, do not steal yet.
153
- emptySightings += 1;
154
- if (emptySightings < 4) {
155
- spinWaitMs(15);
156
- continue;
157
- }
158
- }
159
- // Dead holder, or empty lock still after retries — remove and retry.
160
- unlinkStaleLock(lockPath);
161
- spinWaitMs(5);
68
+ try {
69
+ writeFileSync(lockPath, `${process.pid}\n`, { flag: "wx" });
70
+ }
71
+ catch (err) {
72
+ const code = err.code;
73
+ if (code === "EEXIST") {
74
+ throw new SessionsDirInUseError(root, readHolderPid(lockPath));
162
75
  }
76
+ throw err;
77
+ }
78
+ if (readHolderPid(lockPath) !== process.pid) {
79
+ // Replaced under us — do not steal; surface contention.
80
+ throw new SessionsDirInUseError(root, readHolderPid(lockPath));
163
81
  }
164
- // Last chance: if the named PID is gone, force-unlink once more.
165
- const finalPid = readHolderPid(lockPath);
166
- if (finalPid === undefined || !isProcessAlive(finalPid)) {
167
- if (unlinkStaleLock(lockPath)) {
82
+ let released = false;
83
+ const lock = {
84
+ release() {
85
+ if (released)
86
+ return;
87
+ released = true;
88
+ localExclusive.delete(root);
168
89
  try {
169
- writeFileSync(lockPath, `${process.pid}\n`, { flag: "wx" });
170
90
  if (readHolderPid(lockPath) === process.pid) {
171
- let released = false;
172
- const lock = {
173
- release() {
174
- if (released)
175
- return;
176
- released = true;
177
- localExclusive.delete(root);
178
- try {
179
- if (readHolderPid(lockPath) === process.pid) {
180
- unlinkSync(lockPath);
181
- }
182
- }
183
- catch {
184
- /* ignore */
185
- }
186
- },
187
- };
188
- localExclusive.set(root, lock);
189
- return lock;
91
+ unlinkSync(lockPath);
190
92
  }
191
93
  }
192
94
  catch {
193
- /* fall through to error */
95
+ /* ignore */
194
96
  }
195
- }
196
- }
197
- throw new SessionsDirInUseError(root, readHolderPid(lockPath));
97
+ },
98
+ };
99
+ localExclusive.set(root, lock);
100
+ return lock;
198
101
  }
199
102
  //# sourceMappingURL=store-lock.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"store-lock.js","sourceRoot":"","sources":["../src/store-lock.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"store-lock.js","sourceRoot":"","sources":["../src/store-lock.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,45 @@
1
1
  /**
2
2
  * Fixed-density heuristic token pricing (DSH token-meter estimate.ts).
3
3
  * Shared by Face meter fold and compaction shadow-price producers.
4
+ *
5
+ * Route-aware image pricing lives in {@link priceRouteImageTokens}.
6
+ * Surface fold has no live route → calls it without modalities (heuristic).
7
+ * Soft-budget / request estimate passes adapter `inputModalities`.
4
8
  */
5
9
  import type { MessageContent, ToolCall } from "@xrkseek/protocol";
6
10
  export declare const ROLE_OVERHEAD = 4;
7
11
  export declare function estimateText(text: string): number;
8
- export declare function estimateContent(content: MessageContent): number;
9
- export declare function estimateMessageContent(content: MessageContent): number;
12
+ export type InputModality = "text" | "image";
13
+ export type ImagePricingKind = "vision" | "text-placeholder" | "heuristic";
14
+ /**
15
+ * Price image occurrences for the active route (A6).
16
+ *
17
+ * - `inputModalities` includes `"image"` → DeepSeek V41 vision tokens
18
+ * - `inputModalities` text-only → placeholder text density
19
+ * - modalities omitted → chars/4 heuristic (annotated; surface fold path)
20
+ *
21
+ * Fail loud when `expectedCount` disagrees with `images.length`.
22
+ */
23
+ export declare function priceRouteImageTokens(images: readonly {
24
+ readonly width: number;
25
+ readonly height: number;
26
+ readonly attachmentId?: string;
27
+ readonly mediaType?: string;
28
+ readonly bytes?: number;
29
+ readonly name?: string;
30
+ }[], options?: {
31
+ readonly inputModalities?: readonly InputModality[];
32
+ readonly expectedCount?: number;
33
+ }): {
34
+ readonly tokens: number;
35
+ readonly pricing: ImagePricingKind;
36
+ };
37
+ export declare function estimateContent(content: MessageContent, options?: {
38
+ readonly inputModalities?: readonly InputModality[];
39
+ }): number;
40
+ export declare function estimateMessageContent(content: MessageContent, options?: {
41
+ readonly inputModalities?: readonly InputModality[];
42
+ }): number;
10
43
  export declare function estimateToolCall(call: ToolCall): number;
11
44
  export declare function estimateAssistantSurface(content: string, toolCalls?: readonly ToolCall[]): number;
12
45
  export declare function estimateSystemTokens(system: string | undefined): number;
@@ -1 +1 @@
1
- {"version":3,"file":"surface-estimate.d.ts","sourceRoot":"","sources":["../src/surface-estimate.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAIlE,eAAO,MAAM,aAAa,IAAI,CAAC;AAE/B,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGjD;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM,CAe/D;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM,CAEtE;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAMvD;AAED,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,MAAM,EACf,SAAS,CAAC,EAAE,SAAS,QAAQ,EAAE,GAC9B,MAAM,CAOR;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAGvE;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EACD,SAAS;IACP,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC9C,EAAE,GACH,SAAS,GACZ,MAAM,CAKR"}
1
+ {"version":3,"file":"surface-estimate.d.ts","sourceRoot":"","sources":["../src/surface-estimate.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAkB,cAAc,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAKlF,eAAO,MAAM,aAAa,IAAI,CAAC;AAE/B,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGjD;AAED,MAAM,MAAM,aAAa,GAAG,MAAM,GAAG,OAAO,CAAC;AAE7C,MAAM,MAAM,gBAAgB,GAAG,QAAQ,GAAG,kBAAkB,GAAG,WAAW,CAAC;AAE3E;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,SAAS;IACf,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB,EAAE,EACH,OAAO,CAAC,EAAE;IACR,QAAQ,CAAC,eAAe,CAAC,EAAE,SAAS,aAAa,EAAE,CAAC;IACpD,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;CACjC,GACA;IACD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,gBAAgB,CAAC;CACpC,CA6DA;AA+BD,wBAAgB,eAAe,CAC7B,OAAO,EAAE,cAAc,EACvB,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,eAAe,CAAC,EAAE,SAAS,aAAa,EAAE,CAAA;CAAE,GAChE,MAAM,CAqBR;AAED,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,cAAc,EACvB,OAAO,CAAC,EAAE;IAAE,QAAQ,CAAC,eAAe,CAAC,EAAE,SAAS,aAAa,EAAE,CAAA;CAAE,GAChE,MAAM,CAER;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAMvD;AAED,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,MAAM,EACf,SAAS,CAAC,EAAE,SAAS,QAAQ,EAAE,GAC9B,MAAM,CAOR;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAGvE;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EACD,SAAS;IACP,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC9C,EAAE,GACH,SAAS,GACZ,MAAM,CAKR"}
@@ -1,7 +1,13 @@
1
1
  /**
2
2
  * Fixed-density heuristic token pricing (DSH token-meter estimate.ts).
3
3
  * Shared by Face meter fold and compaction shadow-price producers.
4
+ *
5
+ * Route-aware image pricing lives in {@link priceRouteImageTokens}.
6
+ * Surface fold has no live route → calls it without modalities (heuristic).
7
+ * Soft-budget / request estimate passes adapter `inputModalities`.
4
8
  */
9
+ import { estimateImageTokens } from "@xrkseek/attachment";
10
+ import { isImageMediaType, textOnlyImageText } from "@xrkseek/protocol";
5
11
  const CHARS_PER_TOKEN = 4;
6
12
  const BLOCK_OVERHEAD = 4;
7
13
  export const ROLE_OVERHEAD = 4;
@@ -10,7 +16,81 @@ export function estimateText(text) {
10
16
  return 0;
11
17
  return Math.ceil(text.length / CHARS_PER_TOKEN);
12
18
  }
13
- export function estimateContent(content) {
19
+ /**
20
+ * Price image occurrences for the active route (A6).
21
+ *
22
+ * - `inputModalities` includes `"image"` → DeepSeek V41 vision tokens
23
+ * - `inputModalities` text-only → placeholder text density
24
+ * - modalities omitted → chars/4 heuristic (annotated; surface fold path)
25
+ *
26
+ * Fail loud when `expectedCount` disagrees with `images.length`.
27
+ */
28
+ export function priceRouteImageTokens(images, options) {
29
+ if (options?.expectedCount !== undefined &&
30
+ images.length !== options.expectedCount) {
31
+ throw new Error(`image pricing: occurrence count ${images.length} !== expected ${options.expectedCount}`);
32
+ }
33
+ const modalities = options?.inputModalities;
34
+ const pricing = modalities === undefined
35
+ ? "heuristic"
36
+ : modalities.includes("image")
37
+ ? "vision"
38
+ : "text-placeholder";
39
+ let tokens = 0;
40
+ for (const img of images) {
41
+ if (pricing === "text-placeholder") {
42
+ const mediaType = isImageMediaType(img.mediaType)
43
+ ? img.mediaType
44
+ : "image/png";
45
+ tokens += estimateText(textOnlyImageText({
46
+ attachmentId: img.attachmentId ?? "sha256:unknown",
47
+ mediaType,
48
+ bytes: img.bytes ?? 0,
49
+ width: img.width,
50
+ height: img.height,
51
+ ...(img.name !== undefined ? { name: img.name } : {}),
52
+ }));
53
+ continue;
54
+ }
55
+ if (pricing === "vision") {
56
+ if (Number.isSafeInteger(img.width) &&
57
+ Number.isSafeInteger(img.height) &&
58
+ img.width > 0 &&
59
+ img.height > 0) {
60
+ tokens += estimateImageTokens(img.width, img.height);
61
+ }
62
+ else {
63
+ // Dims unusable — still under the vision arm; fall back to density.
64
+ tokens += estimateText(JSON.stringify(img));
65
+ }
66
+ continue;
67
+ }
68
+ // heuristic: no route — chars/4 of a stable attachment summary
69
+ tokens += estimateText(JSON.stringify({
70
+ w: img.width,
71
+ h: img.height,
72
+ bytes: img.bytes ?? 0,
73
+ id: img.attachmentId ?? "",
74
+ }));
75
+ }
76
+ return { tokens, pricing };
77
+ }
78
+ function imageBlockTokens(attachment, inputModalities) {
79
+ return priceRouteImageTokens([
80
+ {
81
+ width: attachment.width,
82
+ height: attachment.height,
83
+ attachmentId: attachment.attachmentId,
84
+ mediaType: attachment.mediaType,
85
+ bytes: attachment.bytes,
86
+ ...(attachment.name !== undefined ? { name: attachment.name } : {}),
87
+ },
88
+ ], {
89
+ expectedCount: 1,
90
+ ...(inputModalities !== undefined ? { inputModalities } : {}),
91
+ }).tokens;
92
+ }
93
+ export function estimateContent(content, options) {
14
94
  if (typeof content === "string") {
15
95
  return estimateText(content) + BLOCK_OVERHEAD;
16
96
  }
@@ -19,6 +99,14 @@ export function estimateContent(content) {
19
99
  if (block.type === "text") {
20
100
  tokens += estimateText(block.text) + BLOCK_OVERHEAD;
21
101
  }
102
+ else if (block.type === "image") {
103
+ if (block.offloaded === true)
104
+ continue;
105
+ // ponytail: surface fold omits modalities → heuristic; soft-budget passes route.
106
+ tokens +=
107
+ imageBlockTokens(block.attachment, options?.inputModalities) +
108
+ BLOCK_OVERHEAD;
109
+ }
22
110
  else {
23
111
  tokens +=
24
112
  BLOCK_OVERHEAD +
@@ -27,8 +115,8 @@ export function estimateContent(content) {
27
115
  }
28
116
  return tokens;
29
117
  }
30
- export function estimateMessageContent(content) {
31
- return estimateContent(content) + ROLE_OVERHEAD;
118
+ export function estimateMessageContent(content, options) {
119
+ return estimateContent(content, options) + ROLE_OVERHEAD;
32
120
  }
33
121
  export function estimateToolCall(call) {
34
122
  const args = typeof call.arguments === "string"
@@ -1 +1 @@
1
- {"version":3,"file":"surface-estimate.js","sourceRoot":"","sources":["../src/surface-estimate.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,MAAM,eAAe,GAAG,CAAC,CAAC;AAC1B,MAAM,cAAc,GAAG,CAAC,CAAC;AACzB,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC;AAE/B,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,IAAI,CAAC,IAAI;QAAE,OAAO,CAAC,CAAC;IACpB,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,eAAe,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,OAAuB;IACrD,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChC,OAAO,YAAY,CAAC,OAAO,CAAC,GAAG,cAAc,CAAC;IAChD,CAAC;IACD,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC1B,MAAM,IAAI,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC;QACtD,CAAC;aAAM,CAAC;YACN,MAAM;gBACJ,cAAc;oBACd,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,eAAe,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,OAAuB;IAC5D,OAAO,eAAe,CAAC,OAAO,CAAC,GAAG,aAAa,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAc;IAC7C,MAAM,IAAI,GACR,OAAO,IAAI,CAAC,SAAS,KAAK,QAAQ;QAChC,CAAC,CAAC,IAAI,CAAC,SAAS;QAChB,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC;IAC3C,OAAO,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC;AACvE,CAAC;AAED,MAAM,UAAU,wBAAwB,CACtC,OAAe,EACf,SAA+B;IAE/B,IAAI,MAAM,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAC;IAC7C,IAAI,CAAC,SAAS,EAAE,MAAM;QAAE,OAAO,MAAM,CAAC;IACtC,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;QAC7B,MAAM,IAAI,gBAAgB,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,MAA0B;IAC7D,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE;QAAE,OAAO,CAAC,CAAC;IAC9B,OAAO,YAAY,CAAC,MAAM,CAAC,GAAG,aAAa,CAAC;AAC9C,CAAC;AAED,MAAM,UAAU,mBAAmB,CACjC,KAMa;IAEb,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IAC3C,OAAO,CACL,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,eAAe,CAAC,GAAG,cAAc,CAC3E,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"surface-estimate.js","sourceRoot":"","sources":["../src/surface-estimate.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"std-tools.d.ts","sourceRoot":"","sources":["../src/std-tools.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAqB,MAAM,iBAAiB,CAAC;AAGzE,eAAO,MAAM,cAAc,mBAAmB,CAAC;AAC/C,eAAO,MAAM,cAAc,gBAAgB,CAAC;AAC5C,eAAO,MAAM,kBAAkB,YAAY,CAAC;AAC5C,eAAO,MAAM,eAAe,kBAAkB,CAAC;AAE/C,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,MAAM,WAAW,eAAe;IAC9B,2DAA2D;IAC3D,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAChD,8DAA8D;IAC9D,gBAAgB,CAAC,EAAE,MAAM,OAAO,CAAC;IACjC,2CAA2C;IAC3C,aAAa,CAAC,EAAE,CACd,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,WAAW,KACjB,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC/B,4CAA4C;IAC5C,WAAW,CAAC,EAAE,OAAO,qBAAqB,EAAE,oBAAoB,CAAC,KAAK,CAAC,CAAC;IACxE,cAAc,CAAC,EAAE,OAAO,qBAAqB,EAAE,oBAAoB,CAAC,QAAQ,CAAC,CAAC;CAC/E;AAqBD,mFAAmF;AACnF,wBAAgB,cAAc,CAC5B,OAAO,GAAE,eAAoB,GAC5B,cAAc,EAAE,CAwNlB;AAMD,oFAAoF;AACpF,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAMjE;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE;IAC9C,QAAQ,EAAE,MAAM,OAAO,CAAC;IACxB,SAAS,CAAC,EAAE,CACV,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,WAAW,KACjB,OAAO,CAAC,gBAAgB,CAAC,CAAC;CAChC,GAAG,cAAc,CAiFjB"}
1
+ {"version":3,"file":"std-tools.d.ts","sourceRoot":"","sources":["../src/std-tools.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAqB,MAAM,iBAAiB,CAAC;AAGzE,eAAO,MAAM,cAAc,mBAAmB,CAAC;AAC/C,eAAO,MAAM,cAAc,gBAAgB,CAAC;AAC5C,eAAO,MAAM,kBAAkB,YAAY,CAAC;AAC5C,eAAO,MAAM,eAAe,kBAAkB,CAAC;AAE/C,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,MAAM,WAAW,eAAe;IAC9B,2DAA2D;IAC3D,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAChD,8DAA8D;IAC9D,gBAAgB,CAAC,EAAE,MAAM,OAAO,CAAC;IACjC,2CAA2C;IAC3C,aAAa,CAAC,EAAE,CACd,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,WAAW,KACjB,OAAO,CAAC,gBAAgB,CAAC,CAAC;IAC/B,4CAA4C;IAC5C,WAAW,CAAC,EAAE,OAAO,qBAAqB,EAAE,oBAAoB,CAAC,KAAK,CAAC,CAAC;IACxE,cAAc,CAAC,EAAE,OAAO,qBAAqB,EAAE,oBAAoB,CAAC,QAAQ,CAAC,CAAC;CAC/E;AAqBD,mFAAmF;AACnF,wBAAgB,cAAc,CAC5B,OAAO,GAAE,eAAoB,GAC5B,cAAc,EAAE,CAmOlB;AAMD,oFAAoF;AACpF,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAMjE;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE;IAC9C,QAAQ,EAAE,MAAM,OAAO,CAAC;IACxB,SAAS,CAAC,EAAE,CACV,IAAI,EAAE,MAAM,EACZ,MAAM,CAAC,EAAE,WAAW,KACjB,OAAO,CAAC,gBAAgB,CAAC,CAAC;CAChC,GAAG,cAAc,CAiFjB"}
@@ -160,6 +160,15 @@ export function createStdTools(options = {}) {
160
160
  required: ["id", "question"],
161
161
  },
162
162
  },
163
+ mode: {
164
+ type: "string",
165
+ description: 'Ask settlement mode. Omit or "legacy" = block until answered. ' +
166
+ '"timed" = Host deadline; timeout returns pending and a late answer may arrive as a user message.',
167
+ },
168
+ timeout_ms: {
169
+ type: "number",
170
+ description: 'When mode is "timed": deadline length in ms (Host default 120000). Pass -1 to force legacy blocking.',
171
+ },
163
172
  },
164
173
  },
165
174
  presentCall: (args) => {
@@ -1 +1 @@
1
- {"version":3,"file":"std-tools.js","sourceRoot":"","sources":["../src/std-tools.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"std-tools.js","sourceRoot":"","sources":["../src/std-tools.ts"],"names":[],"mappings":"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"}
@@ -11,12 +11,18 @@ export interface PtyBackendConfig {
11
11
  readonly exactProbeAfterMs: number;
12
12
  readonly idleSilenceMs: number;
13
13
  readonly handoffGraceMs: number;
14
+ /**
15
+ * Extra silence budget only while the prompt marker was seen but the
16
+ * printable tail has not arrived yet (late second pty chunk). Default `0`
17
+ * preserves pre-grace settle boundaries exactly; zero is a valid value.
18
+ */
19
+ readonly promptTailGraceMs: number;
14
20
  readonly timeoutMs: number;
15
21
  readonly disposeGraceMs: number;
16
22
  }
17
23
  /**
18
24
  * Assert every numeric config field is a positive safe integer and bounds compose
19
- * (CV DSH terminal-bash `validateConfig`).
25
+ * (CV DSH terminal-bash `validateConfig`). `promptTailGraceMs` uniquely allows 0.
20
26
  */
21
27
  export declare function validatePtyBackendConfig(config: PtyBackendConfig): asserts config is PtyBackendConfig;
22
28
  export declare function defaultPtyBackendConfig(overrides?: Partial<PtyBackendConfig>): PtyBackendConfig;
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;CACjC;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,gBAAgB,GACvB,OAAO,CAAC,MAAM,IAAI,gBAAgB,CAoBpC;AAED,wBAAgB,uBAAuB,CACrC,SAAS,GAAE,OAAO,CAAC,gBAAgB,CAAM,GACxC,gBAAgB,CAqBlB"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,EAAE,SAAS,MAAM,EAAE,CAAC;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC;;;;OAIG;IACH,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC;IACnC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;CACjC;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,gBAAgB,GACvB,OAAO,CAAC,MAAM,IAAI,gBAAgB,CA2BpC;AAED,wBAAgB,uBAAuB,CACrC,SAAS,GAAE,OAAO,CAAC,gBAAgB,CAAM,GACxC,gBAAgB,CAsBlB"}
@@ -1,7 +1,7 @@
1
1
  import { resolvePtyShell } from "./resolve-shell.js";
2
2
  /**
3
3
  * Assert every numeric config field is a positive safe integer and bounds compose
4
- * (CV DSH terminal-bash `validateConfig`).
4
+ * (CV DSH terminal-bash `validateConfig`). `promptTailGraceMs` uniquely allows 0.
5
5
  */
6
6
  export function validatePtyBackendConfig(config) {
7
7
  if (config.backendType.length === 0) {
@@ -11,7 +11,15 @@ export function validatePtyBackendConfig(config) {
11
11
  throw new Error("pty: shellPath must be non-empty");
12
12
  }
13
13
  for (const [name, value] of Object.entries(config)) {
14
- if (typeof value === "number" && (!Number.isSafeInteger(value) || value <= 0)) {
14
+ if (typeof value !== "number")
15
+ continue;
16
+ if (name === "promptTailGraceMs") {
17
+ if (!Number.isSafeInteger(value) || value < 0) {
18
+ throw new Error(`pty: ${name} must be a non-negative safe integer`);
19
+ }
20
+ continue;
21
+ }
22
+ if (!Number.isSafeInteger(value) || value <= 0) {
15
23
  throw new Error(`pty: ${name} must be a positive safe integer`);
16
24
  }
17
25
  }
@@ -37,6 +45,7 @@ export function defaultPtyBackendConfig(overrides = {}) {
37
45
  exactProbeAfterMs: 150,
38
46
  idleSilenceMs: 3_000,
39
47
  handoffGraceMs: 500,
48
+ promptTailGraceMs: 0,
40
49
  timeoutMs: 30_000,
41
50
  disposeGraceMs: 3_000,
42
51
  ...overrides,
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAmBrD;;;GAGG;AACH,MAAM,UAAU,wBAAwB,CACtC,MAAwB;IAExB,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACxD,CAAC;IACD,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IACtD,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACnD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC,EAAE,CAAC;YAC9E,MAAM,IAAI,KAAK,CAAC,QAAQ,IAAI,kCAAkC,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;IACD,IAAI,MAAM,CAAC,YAAY,GAAG,MAAM,CAAC,kBAAkB,EAAE,CAAC;QACpD,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;IAC1E,CAAC;IACD,IAAI,MAAM,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,EAAE,CAAC;QAClD,MAAM,IAAI,KAAK,CACb,wGAAwG,CACzG,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,YAAuC,EAAE;IAEzC,MAAM,KAAK,GAAG,eAAe,EAAE,CAAC;IAChC,MAAM,QAAQ,GAAqB;QACjC,WAAW,EAAE,OAAO;QACpB,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,SAAS,EAAE,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC;QAC/B,IAAI,EAAE,EAAE;QACR,IAAI,EAAE,GAAG;QACT,eAAe,EAAE,MAAM;QACvB,kBAAkB,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI;QACnC,YAAY,EAAE,GAAG,GAAG,IAAI;QACxB,cAAc,EAAE,EAAE;QAClB,iBAAiB,EAAE,GAAG;QACtB,aAAa,EAAE,KAAK;QACpB,cAAc,EAAE,GAAG;QACnB,SAAS,EAAE,MAAM;QACjB,cAAc,EAAE,KAAK;QACrB,GAAG,SAAS;KACb,CAAC;IACF,wBAAwB,CAAC,QAAQ,CAAC,CAAC;IACnC,OAAO,QAAQ,CAAC;AAClB,CAAC"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAyBrD;;;GAGG;AACH,MAAM,UAAU,wBAAwB,CACtC,MAAwB;IAExB,IAAI,MAAM,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpC,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;IACxD,CAAC;IACD,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClC,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IACtD,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACnD,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,SAAS;QACxC,IAAI,IAAI,KAAK,mBAAmB,EAAE,CAAC;YACjC,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;gBAC9C,MAAM,IAAI,KAAK,CAAC,QAAQ,IAAI,sCAAsC,CAAC,CAAC;YACtE,CAAC;YACD,SAAS;QACX,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;YAC/C,MAAM,IAAI,KAAK,CAAC,QAAQ,IAAI,kCAAkC,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;IACD,IAAI,MAAM,CAAC,YAAY,GAAG,MAAM,CAAC,kBAAkB,EAAE,CAAC;QACpD,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;IAC1E,CAAC;IACD,IAAI,MAAM,CAAC,cAAc,GAAG,MAAM,CAAC,cAAc,EAAE,CAAC;QAClD,MAAM,IAAI,KAAK,CACb,wGAAwG,CACzG,CAAC;IACJ,CAAC;AACH,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,YAAuC,EAAE;IAEzC,MAAM,KAAK,GAAG,eAAe,EAAE,CAAC;IAChC,MAAM,QAAQ,GAAqB;QACjC,WAAW,EAAE,OAAO;QACpB,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,SAAS,EAAE,CAAC,GAAG,KAAK,CAAC,SAAS,CAAC;QAC/B,IAAI,EAAE,EAAE;QACR,IAAI,EAAE,GAAG;QACT,eAAe,EAAE,MAAM;QACvB,kBAAkB,EAAE,CAAC,GAAG,IAAI,GAAG,IAAI;QACnC,YAAY,EAAE,GAAG,GAAG,IAAI;QACxB,cAAc,EAAE,EAAE;QAClB,iBAAiB,EAAE,GAAG;QACtB,aAAa,EAAE,KAAK;QACpB,cAAc,EAAE,GAAG;QACnB,iBAAiB,EAAE,CAAC;QACpB,SAAS,EAAE,MAAM;QACjB,cAAc,EAAE,KAAK;QACrB,GAAG,SAAS;KACb,CAAC;IACF,wBAAwB,CAAC,QAAQ,CAAC,CAAC;IACnC,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAKpD,OAAO,EAEL,KAAK,wBAAwB,EAC7B,KAAK,sBAAsB,EAG3B,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,qBAAqB,EAE1B,KAAK,mBAAmB,EAExB,KAAK,qBAAqB,EAC1B,KAAK,cAAc,EACnB,KAAK,oBAAoB,EAE1B,MAAM,YAAY,CAAC;AA+EpB,oEAAoE;AACpE,qBAAa,eAAgB,YAAW,sBAAsB;IAiC1D,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAjCzB,IAAI,SAAK;IACT,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoB;IAC5C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAmB;IAC7C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAmB;IAC9C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAwB;IACpD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAe;IAC1C,OAAO,CAAC,WAAW,CAA6C;IAMhE,OAAO,CAAC,MAAM,CAAgC;IAC9C,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,mBAAmB,CAA4B;IACvD,OAAO,CAAC,WAAW,CAA0B;IAC7C,OAAO,CAAC,YAAY,CAAgC;IACpD,OAAO,CAAC,WAAW,CAA8B;IACjD,OAAO,CAAC,YAAY,CAAgC;IACpD,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,UAAU,CAAQ;IAC1B,OAAO,CAAC,cAAc,CAAQ;IAC9B,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,SAAS,CAAoB;IACrC,OAAO,CAAC,YAAY,CAAQ;IAC5B,OAAO,CAAC,YAAY,CAAa;IACjC,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,YAAY,CAA2B;IAC/C,OAAO,CAAC,gBAAgB,CAAmB;gBAGxB,QAAQ,EAAE,wBAAwB,EAClC,MAAM,EAAE,gBAAgB;IAc3C;;;;OAIG;IACG,UAAU,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBrD,SAAS,CAAC,OAAO,EAAE,mBAAmB,GAAG,qBAAqB;YAmChD,SAAS;IAgDvB,OAAO,CAAC,sBAAsB;IAO9B,IAAI,CAAC,OAAO,EAAE,mBAAmB,GAAG,kBAAkB;IAyBhD,MAAM,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAMnE,MAAM,IAAI,qBAAqB;IAI/B,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAYpC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAG9B;IAED,OAAO,CAAC,QAAQ,CAAC,aAAa,CAI7B;IAED,OAAO,CAAC,QAAQ,CAAC,eAAe,CAG/B;IAED,OAAO,CAAC,MAAM;YAqBA,MAAM;IAOpB,OAAO,CAAC,kBAAkB;IAQ1B,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,YAAY;YASN,aAAa;IA4C3B,OAAO,CAAC,YAAY;IAcpB,OAAO,CAAC,WAAW;IAMnB,OAAO,CAAC,oBAAoB;IAM5B,OAAO,CAAC,WAAW;IAUnB,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,SAAS;YAOH,aAAa;YAmBb,SAAS;CAkBxB"}
1
+ {"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../src/session.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAKpD,OAAO,EAEL,KAAK,wBAAwB,EAC7B,KAAK,sBAAsB,EAG3B,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,qBAAqB,EAE1B,KAAK,mBAAmB,EAExB,KAAK,qBAAqB,EAC1B,KAAK,cAAc,EACnB,KAAK,oBAAoB,EAE1B,MAAM,YAAY,CAAC;AA+EpB,oEAAoE;AACpE,qBAAa,eAAgB,YAAW,sBAAsB;IAiC1D,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAjCzB,IAAI,SAAK;IACT,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;IACpB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAoB;IAC5C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAmB;IAC7C,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAmB;IAC9C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAwB;IACpD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAe;IAC1C,OAAO,CAAC,WAAW,CAA6C;IAMhE,OAAO,CAAC,MAAM,CAAgC;IAC9C,OAAO,CAAC,WAAW,CAA4B;IAC/C,OAAO,CAAC,mBAAmB,CAA4B;IACvD,OAAO,CAAC,WAAW,CAA0B;IAC7C,OAAO,CAAC,YAAY,CAAgC;IACpD,OAAO,CAAC,WAAW,CAA8B;IACjD,OAAO,CAAC,YAAY,CAAgC;IACpD,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,UAAU,CAAQ;IAC1B,OAAO,CAAC,cAAc,CAAQ;IAC9B,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,SAAS,CAAoB;IACrC,OAAO,CAAC,YAAY,CAAQ;IAC5B,OAAO,CAAC,YAAY,CAAa;IACjC,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,YAAY,CAA2B;IAC/C,OAAO,CAAC,gBAAgB,CAAmB;gBAGxB,QAAQ,EAAE,wBAAwB,EAClC,MAAM,EAAE,gBAAgB;IAc3C;;;;OAIG;IACG,UAAU,CAAC,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBrD,SAAS,CAAC,OAAO,EAAE,mBAAmB,GAAG,qBAAqB;YAmChD,SAAS;IAgDvB,OAAO,CAAC,sBAAsB;IAO9B,IAAI,CAAC,OAAO,EAAE,mBAAmB,GAAG,kBAAkB;IAyBhD,MAAM,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAMnE,MAAM,IAAI,qBAAqB;IAI/B,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAYpC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAG9B;IAED,OAAO,CAAC,QAAQ,CAAC,aAAa,CAI7B;IAED,OAAO,CAAC,QAAQ,CAAC,eAAe,CAG/B;IAED,OAAO,CAAC,MAAM;YAqBA,MAAM;IAOpB,OAAO,CAAC,kBAAkB;IAQ1B,OAAO,CAAC,YAAY;IAOpB,OAAO,CAAC,YAAY;YASN,aAAa;IAqD3B,OAAO,CAAC,YAAY;IAcpB,OAAO,CAAC,WAAW;IAMnB,OAAO,CAAC,oBAAoB;IAM5B,OAAO,CAAC,WAAW;IAUnB,OAAO,CAAC,UAAU;IAOlB,OAAO,CAAC,SAAS;YAOH,aAAa;YAmBb,SAAS;CAkBxB"}
@@ -381,7 +381,13 @@ export class LocalPtySession {
381
381
  // on waiting for shell ownership instead of letting a child marker suppress
382
382
  // readiness until the absolute timeout.
383
383
  const handoffGrace = this.promptSeen ? this.config.handoffGraceMs : 0;
384
- if (startupHasOutput && idleFor >= this.config.idleSilenceMs + handoffGrace) {
384
+ // Late printable prompt tail (marker in one chunk, tail in the next): only
385
+ // then extend silence. Malformed tails never arrive — G1 / useConptyDll.
386
+ const promptTailGrace = this.promptSeen && !this.promptTextSeen
387
+ ? this.config.promptTailGraceMs
388
+ : 0;
389
+ if (startupHasOutput
390
+ && idleFor >= this.config.idleSilenceMs + handoffGrace + promptTailGrace) {
385
391
  this.settleActive('inferred_idle');
386
392
  }
387
393
  }