@vybestack/llxprt-code-core 0.10.0 → 0.11.0-nightly.260728.ffaa8d5d7

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 (168) hide show
  1. package/dist/src/config/config.d.ts +20 -0
  2. package/dist/src/config/config.js +143 -23
  3. package/dist/src/config/config.js.map +1 -1
  4. package/dist/src/config/configBaseCore.d.ts +6 -2
  5. package/dist/src/config/configBaseCore.js +8 -0
  6. package/dist/src/config/configBaseCore.js.map +1 -1
  7. package/dist/src/config/configConstructor.d.ts +2 -0
  8. package/dist/src/config/configConstructor.js +9 -1
  9. package/dist/src/config/configConstructor.js.map +1 -1
  10. package/dist/src/config/configTestHarness.d.ts +8 -6
  11. package/dist/src/config/configTestHarness.js +10 -4
  12. package/dist/src/config/configTestHarness.js.map +1 -1
  13. package/dist/src/config/configTypes.d.ts +7 -2
  14. package/dist/src/config/configTypes.js +2 -0
  15. package/dist/src/config/configTypes.js.map +1 -1
  16. package/dist/src/config/liveTrustTransitionLifecycle.d.ts +35 -0
  17. package/dist/src/config/liveTrustTransitionLifecycle.js +180 -0
  18. package/dist/src/config/liveTrustTransitionLifecycle.js.map +1 -0
  19. package/dist/src/config/schedulerSingleton.d.ts +2 -2
  20. package/dist/src/config/schedulerSingleton.js.map +1 -1
  21. package/dist/src/core/compression/types.d.ts +48 -1
  22. package/dist/src/core/compression/types.js +41 -0
  23. package/dist/src/core/compression/types.js.map +1 -1
  24. package/dist/src/core/model-limits.json +96 -0
  25. package/dist/src/core/model-limits.schema.d.ts +123 -0
  26. package/dist/src/core/model-limits.schema.js +75 -0
  27. package/dist/src/core/model-limits.schema.js.map +1 -0
  28. package/dist/src/core/tokenLimits.d.ts +6 -8
  29. package/dist/src/core/tokenLimits.js +56 -132
  30. package/dist/src/core/tokenLimits.js.map +1 -1
  31. package/dist/src/core/turn.d.ts +20 -3
  32. package/dist/src/core/turn.js +20 -3
  33. package/dist/src/core/turn.js.map +1 -1
  34. package/dist/src/hooks/hookRegistry.d.ts +1 -1
  35. package/dist/src/hooks/hookRegistry.js +3 -1
  36. package/dist/src/hooks/hookRegistry.js.map +1 -1
  37. package/dist/src/hooks/hookRunner.d.ts +6 -0
  38. package/dist/src/hooks/hookRunner.js +22 -6
  39. package/dist/src/hooks/hookRunner.js.map +1 -1
  40. package/dist/src/hooks/hookSystem.d.ts +10 -1
  41. package/dist/src/hooks/hookSystem.js +69 -12
  42. package/dist/src/hooks/hookSystem.js.map +1 -1
  43. package/dist/src/index.d.ts +1 -0
  44. package/dist/src/index.js +1 -0
  45. package/dist/src/index.js.map +1 -1
  46. package/dist/src/llm-types/geminiContent.d.ts +3 -0
  47. package/dist/src/policy/config.d.ts +4 -2
  48. package/dist/src/policy/config.js +22 -18
  49. package/dist/src/policy/config.js.map +1 -1
  50. package/dist/src/recording/ReplayEngine.js +39 -2
  51. package/dist/src/recording/ReplayEngine.js.map +1 -1
  52. package/dist/src/recording/SessionDiscovery.d.ts +8 -0
  53. package/dist/src/recording/SessionDiscovery.js +88 -3
  54. package/dist/src/recording/SessionDiscovery.js.map +1 -1
  55. package/dist/src/recording/SessionLockManager.d.ts +3 -0
  56. package/dist/src/recording/SessionLockManager.js +9 -3
  57. package/dist/src/recording/SessionLockManager.js.map +1 -1
  58. package/dist/src/recording/SessionRecordingService.d.ts +14 -1
  59. package/dist/src/recording/SessionRecordingService.js +27 -3
  60. package/dist/src/recording/SessionRecordingService.js.map +1 -1
  61. package/dist/src/recording/index.d.ts +4 -3
  62. package/dist/src/recording/index.js +4 -3
  63. package/dist/src/recording/index.js.map +1 -1
  64. package/dist/src/recording/replay-test-helpers.d.ts +5 -0
  65. package/dist/src/recording/replay-test-helpers.js +13 -0
  66. package/dist/src/recording/replay-test-helpers.js.map +1 -1
  67. package/dist/src/recording/resumeNotFoundMessages.d.ts +56 -0
  68. package/dist/src/recording/resumeNotFoundMessages.js +64 -0
  69. package/dist/src/recording/resumeNotFoundMessages.js.map +1 -0
  70. package/dist/src/recording/resumeSession.js +3 -2
  71. package/dist/src/recording/resumeSession.js.map +1 -1
  72. package/dist/src/recording/sessionManagement.d.ts +3 -0
  73. package/dist/src/recording/sessionManagement.js +38 -19
  74. package/dist/src/recording/sessionManagement.js.map +1 -1
  75. package/dist/src/recording/types.d.ts +42 -3
  76. package/dist/src/recording/types.js +1 -1
  77. package/dist/src/recording/types.js.map +1 -1
  78. package/dist/src/runtime/AgentRuntimeLoader.js +2 -1
  79. package/dist/src/runtime/AgentRuntimeLoader.js.map +1 -1
  80. package/dist/src/scheduler/liveOutput.d.ts +10 -19
  81. package/dist/src/scheduler/liveOutput.js +21 -21
  82. package/dist/src/scheduler/liveOutput.js.map +1 -1
  83. package/dist/src/scheduler/types.d.ts +2 -2
  84. package/dist/src/services/history/ContentConverters.d.ts +4 -0
  85. package/dist/src/services/history/ContentConverters.js +77 -59
  86. package/dist/src/services/history/ContentConverters.js.map +1 -1
  87. package/dist/src/services/history/HistoryService.d.ts +13 -1
  88. package/dist/src/services/history/HistoryService.js +71 -0
  89. package/dist/src/services/history/HistoryService.js.map +1 -1
  90. package/dist/src/services/history/IContent.d.ts +10 -0
  91. package/dist/src/services/history/IContent.js.map +1 -1
  92. package/dist/src/skills/skillManager.d.ts +11 -1
  93. package/dist/src/skills/skillManager.js +21 -1
  94. package/dist/src/skills/skillManager.js.map +1 -1
  95. package/dist/src/test-utils/mock-tool.d.ts +3 -3
  96. package/dist/src/test-utils/mock-tool.js.map +1 -1
  97. package/dist/src/test-utils/tools.d.ts +2 -2
  98. package/dist/src/test-utils/tools.js.map +1 -1
  99. package/dist/src/tools-adapters/CoreShellToolHostAdapter.js +1 -6
  100. package/dist/src/tools-adapters/CoreShellToolHostAdapter.js.map +1 -1
  101. package/dist/src/utils/browser-profile-discovery.d.ts +40 -0
  102. package/dist/src/utils/browser-profile-discovery.js +251 -0
  103. package/dist/src/utils/browser-profile-discovery.js.map +1 -0
  104. package/dist/src/utils/env.d.ts +12 -0
  105. package/dist/src/utils/env.js +15 -0
  106. package/dist/src/utils/env.js.map +1 -0
  107. package/dist/src/utils/events.d.ts +10 -1
  108. package/dist/src/utils/events.js +22 -0
  109. package/dist/src/utils/events.js.map +1 -1
  110. package/dist/src/utils/fileUtils.js +8 -1
  111. package/dist/src/utils/fileUtils.js.map +1 -1
  112. package/dist/src/utils/retry.js +3 -4
  113. package/dist/src/utils/retry.js.map +1 -1
  114. package/dist/src/utils/secure-browser-launcher.d.ts +35 -1
  115. package/dist/src/utils/secure-browser-launcher.js +341 -1
  116. package/dist/src/utils/secure-browser-launcher.js.map +1 -1
  117. package/dist/src/utils/terminalSerializer.d.ts +12 -0
  118. package/dist/src/utils/terminalSerializer.js.map +1 -1
  119. package/dist/src/utils/thoughtUtils.d.ts +2 -0
  120. package/dist/src/utils/thoughtUtils.js.map +1 -1
  121. package/package.json +13 -9
  122. package/src/config/config.ts +161 -22
  123. package/src/config/configBaseCore.ts +10 -2
  124. package/src/config/configConstructor.ts +11 -0
  125. package/src/config/configTestHarness.ts +10 -4
  126. package/src/config/configTypes.ts +6 -1
  127. package/src/config/liveTrustTransitionLifecycle.ts +250 -0
  128. package/src/config/schedulerSingleton.ts +2 -5
  129. package/src/core/compression/types.ts +81 -1
  130. package/src/core/legacy-model-limits.expected.txt +96 -0
  131. package/src/core/model-limits.json +96 -0
  132. package/src/core/model-limits.schema.ts +87 -0
  133. package/src/core/tokenLimits.ts +73 -147
  134. package/src/core/turn.ts +20 -3
  135. package/src/hooks/hookRegistry.ts +3 -1
  136. package/src/hooks/hookRunner.ts +24 -7
  137. package/src/hooks/hookSystem.ts +73 -13
  138. package/src/index.ts +1 -0
  139. package/src/llm-types/geminiContent.ts +3 -0
  140. package/src/policy/config.ts +32 -19
  141. package/src/recording/ReplayEngine.ts +51 -2
  142. package/src/recording/SessionDiscovery.ts +99 -4
  143. package/src/recording/SessionLockManager.ts +10 -3
  144. package/src/recording/SessionRecordingService.ts +36 -3
  145. package/src/recording/index.ts +19 -2
  146. package/src/recording/replay-test-helpers.ts +14 -0
  147. package/src/recording/resumeNotFoundMessages.ts +75 -0
  148. package/src/recording/resumeSession.ts +3 -1
  149. package/src/recording/sessionManagement.ts +51 -21
  150. package/src/recording/types.ts +44 -2
  151. package/src/runtime/AgentRuntimeLoader.ts +3 -1
  152. package/src/scheduler/liveOutput.ts +25 -22
  153. package/src/scheduler/types.ts +5 -2
  154. package/src/services/history/ContentConverters.ts +91 -68
  155. package/src/services/history/HistoryService.ts +92 -1
  156. package/src/services/history/IContent.ts +13 -0
  157. package/src/skills/skillManager.ts +26 -1
  158. package/src/test-utils/mock-tool.ts +4 -3
  159. package/src/test-utils/tools.ts +4 -3
  160. package/src/tools-adapters/CoreShellToolHostAdapter.ts +1 -7
  161. package/src/utils/browser-profile-discovery.ts +358 -0
  162. package/src/utils/env.ts +15 -0
  163. package/src/utils/events.ts +31 -0
  164. package/src/utils/fileUtils.ts +11 -1
  165. package/src/utils/retry.ts +3 -4
  166. package/src/utils/secure-browser-launcher.ts +500 -2
  167. package/src/utils/terminalSerializer.ts +9 -0
  168. package/src/utils/thoughtUtils.ts +2 -0
@@ -143,6 +143,19 @@ export function _directoriesChangedLine(seq, directories) {
143
143
  payload: { directories },
144
144
  });
145
145
  }
146
+ /**
147
+ * Build a valid JSONL line for a session_metadata event (issue #1611).
148
+ * The title is either a concrete string or explicit null.
149
+ */
150
+ export function sessionMetadataLine(seq, title) {
151
+ return JSON.stringify({
152
+ v: 1,
153
+ seq,
154
+ ts: new Date().toISOString(),
155
+ type: 'session_metadata',
156
+ payload: { title },
157
+ });
158
+ }
146
159
  /**
147
160
  * Write raw JSONL lines to a file.
148
161
  */
@@ -1 +1 @@
1
- {"version":3,"file":"replay-test-helpers.js","sourceRoot":"","sources":["../../../src/recording/replay-test-helpers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"replay-test-helpers.js","sourceRoot":"","sources":["../../../src/recording/replay-test-helpers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Copyright 2025 Vybestack LLC
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
+ /**
17
+ * The "session not found"-style messages the resume/discovery flow emits, as
18
+ * shared constants so downstream classifiers (e.g. the Zed ACP loadSession
19
+ * error mapper) can match them WITHOUT string-literal coupling that would
20
+ * silently break if the wording changed. The emitting sites
21
+ * (resumeSession.ts, SessionDiscovery.ts) and every matcher must reference
22
+ * these — never inline copies of the sentences.
23
+ */
24
+ /** Emitted by resumeSession when the project has no recorded sessions at all. */
25
+ export declare const RESUME_NO_SESSIONS_FOUND = "No sessions found for this project";
26
+ /**
27
+ * Prefix (including the trailing colon) of the
28
+ * SessionDiscovery.resolveSessionRef message for an unknown session reference;
29
+ * the full message appends ` <ref>` (space + ref) after it — see
30
+ * {@link resumeSessionNotFoundMessage}.
31
+ */
32
+ export declare const RESUME_SESSION_NOT_FOUND_PREFIX = "Session not found for this project:";
33
+ /**
34
+ * Builds the full SessionDiscovery.resolveSessionRef not-found message for a
35
+ * specific reference.
36
+ */
37
+ export declare function resumeSessionNotFoundMessage(ref: string): string;
38
+ /**
39
+ * Prefix of the SessionDiscovery.resolveSessionRef message for a numeric
40
+ * session index outside the listing range; the full message is
41
+ * `Session index <n> out of range (1-<m>)`.
42
+ */
43
+ export declare const RESUME_SESSION_INDEX_OUT_OF_RANGE_PREFIX = "Session index ";
44
+ /**
45
+ * Builds the full SessionDiscovery.resolveSessionRef out-of-range message for
46
+ * a specific index and session count. `ref` must render as digits (a number,
47
+ * or the digit-only string the caller already validated with /^\d+$/) so the
48
+ * produced message stays matchable by
49
+ * {@link RESUME_SESSION_INDEX_OUT_OF_RANGE_RE}.
50
+ */
51
+ export declare function resumeSessionIndexOutOfRangeMessage(ref: number | `${number}`, count: number): string;
52
+ /**
53
+ * Matches the out-of-range message shape for classifiers that only have the
54
+ * final (envelope-wrapped) detail string to inspect.
55
+ */
56
+ export declare const RESUME_SESSION_INDEX_OUT_OF_RANGE_RE: RegExp;
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Copyright 2025 Vybestack LLC
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
+ /**
17
+ * The "session not found"-style messages the resume/discovery flow emits, as
18
+ * shared constants so downstream classifiers (e.g. the Zed ACP loadSession
19
+ * error mapper) can match them WITHOUT string-literal coupling that would
20
+ * silently break if the wording changed. The emitting sites
21
+ * (resumeSession.ts, SessionDiscovery.ts) and every matcher must reference
22
+ * these — never inline copies of the sentences.
23
+ */
24
+ /** Emitted by resumeSession when the project has no recorded sessions at all. */
25
+ export const RESUME_NO_SESSIONS_FOUND = 'No sessions found for this project';
26
+ /**
27
+ * Prefix (including the trailing colon) of the
28
+ * SessionDiscovery.resolveSessionRef message for an unknown session reference;
29
+ * the full message appends ` <ref>` (space + ref) after it — see
30
+ * {@link resumeSessionNotFoundMessage}.
31
+ */
32
+ export const RESUME_SESSION_NOT_FOUND_PREFIX = 'Session not found for this project:';
33
+ /**
34
+ * Builds the full SessionDiscovery.resolveSessionRef not-found message for a
35
+ * specific reference.
36
+ */
37
+ export function resumeSessionNotFoundMessage(ref) {
38
+ return `${RESUME_SESSION_NOT_FOUND_PREFIX} ${ref}`;
39
+ }
40
+ /**
41
+ * Prefix of the SessionDiscovery.resolveSessionRef message for a numeric
42
+ * session index outside the listing range; the full message is
43
+ * `Session index <n> out of range (1-<m>)`.
44
+ */
45
+ export const RESUME_SESSION_INDEX_OUT_OF_RANGE_PREFIX = 'Session index ';
46
+ /**
47
+ * Builds the full SessionDiscovery.resolveSessionRef out-of-range message for
48
+ * a specific index and session count. `ref` must render as digits (a number,
49
+ * or the digit-only string the caller already validated with /^\d+$/) so the
50
+ * produced message stays matchable by
51
+ * {@link RESUME_SESSION_INDEX_OUT_OF_RANGE_RE}.
52
+ */
53
+ export function resumeSessionIndexOutOfRangeMessage(ref, count) {
54
+ if (count <= 0) {
55
+ return RESUME_NO_SESSIONS_FOUND;
56
+ }
57
+ return `${RESUME_SESSION_INDEX_OUT_OF_RANGE_PREFIX}${ref} out of range (1-${count})`;
58
+ }
59
+ /**
60
+ * Matches the out-of-range message shape for classifiers that only have the
61
+ * final (envelope-wrapped) detail string to inspect.
62
+ */
63
+ export const RESUME_SESSION_INDEX_OUT_OF_RANGE_RE = /^(?:Failed to resume session: )?Session index \d+ out of range \(1-\d+\)$/;
64
+ //# sourceMappingURL=resumeNotFoundMessages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resumeNotFoundMessages.js","sourceRoot":"","sources":["../../../src/recording/resumeNotFoundMessages.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH;;;;;;;GAOG;AAEH,iFAAiF;AACjF,MAAM,CAAC,MAAM,wBAAwB,GAAG,oCAAoC,CAAC;AAE7E;;;;;GAKG;AACH,MAAM,CAAC,MAAM,+BAA+B,GAC1C,qCAAqC,CAAC;AAExC;;;GAGG;AACH,MAAM,UAAU,4BAA4B,CAAC,GAAW;IACtD,OAAO,GAAG,+BAA+B,IAAI,GAAG,EAAE,CAAC;AACrD,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,wCAAwC,GAAG,gBAAgB,CAAC;AAEzE;;;;;;GAMG;AACH,MAAM,UAAU,mCAAmC,CACjD,GAAyB,EACzB,KAAa;IAEb,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC;QACf,OAAO,wBAAwB,CAAC;IAClC,CAAC;IACD,OAAO,GAAG,wCAAwC,GAAG,GAAG,oBAAoB,KAAK,GAAG,CAAC;AACvF,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,oCAAoC,GAC/C,2EAA2E,CAAC"}
@@ -26,6 +26,7 @@ import { SessionRecordingService } from './SessionRecordingService.js';
26
26
  import { SessionDiscovery } from './SessionDiscovery.js';
27
27
  import { SessionLockManager } from './SessionLockManager.js';
28
28
  import { replaySession } from './ReplayEngine.js';
29
+ import { RESUME_NO_SESSIONS_FOUND } from './resumeNotFoundMessages.js';
29
30
  /**
30
31
  * Sentinel constant for "resume most recent session".
31
32
  */
@@ -74,7 +75,7 @@ function initializeRecordingForResume(lockedSession, request, replayResult) {
74
75
  provider: request.currentProvider,
75
76
  model: request.currentModel,
76
77
  });
77
- recording.initializeForResume(lockedSession.targetFilePath, replayResult.lastSeq);
78
+ recording.initializeForResume(lockedSession.targetFilePath, replayResult.lastSeq, replayResult.metadata.title);
78
79
  if (request.currentProvider !== replayResult.metadata.provider ||
79
80
  request.currentModel !== replayResult.metadata.model) {
80
81
  recording.recordSessionEvent('warning', `Provider/model changed from ${replayResult.metadata.provider}/${replayResult.metadata.model} to ${request.currentProvider}/${request.currentModel}`);
@@ -95,7 +96,7 @@ export async function resumeSession(request) {
95
96
  // Step 1: Discover sessions
96
97
  const sessions = await SessionDiscovery.listSessions(request.chatsDir, request.projectHash);
97
98
  if (sessions.length === 0) {
98
- return { ok: false, error: 'No sessions found for this project' };
99
+ return { ok: false, error: RESUME_NO_SESSIONS_FOUND };
99
100
  }
100
101
  // Step 2: Resolve which session to resume
101
102
  let lockedSession = null;
@@ -1 +1 @@
1
- {"version":3,"file":"resumeSession.js","sourceRoot":"","sources":["../../../src/recording/resumeSession.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resumeSession.js","sourceRoot":"","sources":["../../../src/recording/resumeSession.ts"],"names":[],"mappings":"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"}
@@ -55,3 +55,6 @@ export declare function listSessions(chatsDir: string, projectHash: string): Pro
55
55
  * @pseudocode session-management.md lines 105-150
56
56
  */
57
57
  export declare function deleteSession(ref: string, chatsDir: string, projectHash: string): Promise<DeleteSessionResult | DeleteSessionError>;
58
+ export declare const SESSION_NOT_FOUND_PREFIX = "Session not found:";
59
+ /** Delete a session only when the supplied identifier is an exact match. */
60
+ export declare function deleteSessionById(sessionId: string, chatsDir: string, projectHash: string): Promise<DeleteSessionResult | DeleteSessionError>;
@@ -14,7 +14,8 @@
14
14
  * limitations under the License.
15
15
  */
16
16
  import { SessionDiscovery } from './SessionDiscovery.js';
17
- import { SessionLockManager } from './SessionLockManager.js';
17
+ import { SessionLockManager, SessionLockedError, } from './SessionLockManager.js';
18
+ import { RESUME_NO_SESSIONS_FOUND } from './resumeNotFoundMessages.js';
18
19
  /**
19
20
  * List all sessions matching the given project hash, sorted newest-first.
20
21
  *
@@ -33,43 +34,61 @@ export async function listSessions(chatsDir, projectHash) {
33
34
  export async function deleteSession(ref, chatsDir, projectHash) {
34
35
  const sessions = await SessionDiscovery.listSessions(chatsDir, projectHash);
35
36
  if (sessions.length === 0) {
36
- return { ok: false, error: 'No sessions found for this project' };
37
+ return { ok: false, error: RESUME_NO_SESSIONS_FOUND };
37
38
  }
38
39
  const resolved = SessionDiscovery.resolveSessionRef(ref, sessions);
39
40
  if ('error' in resolved) {
40
41
  return { ok: false, error: resolved.error };
41
42
  }
42
- const target = resolved.session;
43
- const locked = await SessionLockManager.isLocked(chatsDir, target.sessionId);
44
- if (locked) {
45
- const stale = await SessionLockManager.isStale(chatsDir, target.sessionId);
46
- if (stale) {
47
- await SessionLockManager.removeStaleLock(chatsDir, target.sessionId);
48
- }
49
- else {
43
+ return deleteResolvedSession(resolved.session, chatsDir);
44
+ }
45
+ export const SESSION_NOT_FOUND_PREFIX = 'Session not found:';
46
+ /** Delete a session only when the supplied identifier is an exact match. */
47
+ export async function deleteSessionById(sessionId, chatsDir, projectHash) {
48
+ const sessions = await SessionDiscovery.listSessions(chatsDir, projectHash);
49
+ const target = sessions.find((session) => session.sessionId === sessionId);
50
+ if (target === undefined) {
51
+ return {
52
+ ok: false,
53
+ error: `${SESSION_NOT_FOUND_PREFIX} ${sessionId}`,
54
+ };
55
+ }
56
+ return deleteResolvedSession(target, chatsDir);
57
+ }
58
+ async function deleteResolvedSession(target, chatsDir) {
59
+ let lock;
60
+ try {
61
+ lock = await SessionLockManager.acquire(chatsDir, target.sessionId);
62
+ }
63
+ catch (error) {
64
+ if (error instanceof SessionLockedError) {
50
65
  return {
51
66
  ok: false,
52
67
  error: 'Cannot delete: session is in use by another process',
53
68
  };
54
69
  }
70
+ const detail = error instanceof Error ? error.message : String(error);
71
+ return {
72
+ ok: false,
73
+ error: `Failed to lock session for deletion: ${detail}`,
74
+ };
55
75
  }
56
76
  const { unlink } = await import('node:fs/promises');
77
+ let result;
57
78
  try {
58
79
  await unlink(target.filePath);
80
+ result = { ok: true, deletedSessionId: target.sessionId };
59
81
  }
60
82
  catch (error) {
61
- return {
83
+ const detail = error instanceof Error ? error.message : String(error);
84
+ result = {
62
85
  ok: false,
63
- error: `Failed to delete session: ${error.message}`,
86
+ error: `Failed to delete session: ${detail}`,
64
87
  };
65
88
  }
66
- const lockPath = SessionLockManager.getLockPath(chatsDir, target.sessionId);
67
- try {
68
- await unlink(lockPath);
69
- }
70
- catch {
71
- // Lock file may not exist
89
+ finally {
90
+ await lock.release().catch(() => undefined);
72
91
  }
73
- return { ok: true, deletedSessionId: target.sessionId };
92
+ return result;
74
93
  }
75
94
  //# sourceMappingURL=sessionManagement.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sessionManagement.js","sourceRoot":"","sources":["../../../src/recording/sessionManagement.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAYH,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAyB7D;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,QAAgB,EAChB,WAAmB;IAEnB,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC,YAAY,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IAC5E,OAAO,EAAE,QAAQ,EAAE,CAAC;AACtB,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,GAAW,EACX,QAAgB,EAChB,WAAmB;IAEnB,MAAM,QAAQ,GAAG,MAAM,gBAAgB,CAAC,YAAY,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;IAE5E,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC1B,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,oCAAoC,EAAE,CAAC;IACpE,CAAC;IAED,MAAM,QAAQ,GAAG,gBAAgB,CAAC,iBAAiB,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IACnE,IAAI,OAAO,IAAI,QAAQ,EAAE,CAAC;QACxB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC;IAC9C,CAAC;IAED,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC;IAEhC,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;IAC7E,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,KAAK,GAAG,MAAM,kBAAkB,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;QAC3E,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,kBAAkB,CAAC,eAAe,CAAC,QAAQ,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;QACvE,CAAC;aAAM,CAAC;YACN,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,KAAK,EAAE,qDAAqD;aAC7D,CAAC;QACJ,CAAC;IACH,CAAC;IAED,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;IAEpD,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC;IAAC,OAAO,KAAc,EAAE,CAAC;QACxB,OAAO;YACL,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,6BAA8B,KAAe,CAAC,OAAO,EAAE;SAC/D,CAAC;IACJ,CAAC;IAED,MAAM,QAAQ,GAAG,kBAAkB,CAAC,WAAW,CAAC,QAAQ,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;IAC5E,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,QAAQ,CAAC,CAAC;IACzB,CAAC;IAAC,MAAM,CAAC;QACP,0BAA0B;IAC5B,CAAC;IAED,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,gBAAgB,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC;AAC1D,CAAC"}
1
+ {"version":3,"file":"sessionManagement.js","sourceRoot":"","sources":["../../../src/recording/sessionManagement.ts"],"names":[],"mappings":"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"}
@@ -22,10 +22,11 @@
22
22
  * management.
23
23
  */
24
24
  import { type IContent } from '../services/history/IContent.js';
25
+ export declare const SESSION_TITLE_MAX_LENGTH = 120;
25
26
  /**
26
- * The seven event types that can appear in a session JSONL file.
27
+ * The event types that can appear in a session JSONL file.
27
28
  */
28
- export type SessionEventType = 'session_start' | 'content' | 'compressed' | 'rewind' | 'provider_switch' | 'session_event' | 'directories_changed';
29
+ export type SessionEventType = 'session_start' | 'content' | 'compressed' | 'rewind' | 'provider_switch' | 'session_event' | 'session_metadata' | 'directories_changed';
29
30
  /**
30
31
  * Every line in a session JSONL file follows this envelope format.
31
32
  * The `v` field is the sole schema version indicator.
@@ -50,6 +51,8 @@ export interface SessionStartPayload {
50
51
  sessionId: string;
51
52
  projectHash: string;
52
53
  workspaceDirs: string[];
54
+ /** Effective absolute working directory, when recorded by newer clients. */
55
+ cwd?: string;
53
56
  provider: string;
54
57
  model: string;
55
58
  /** ISO-8601 timestamp of when the session started. */
@@ -92,6 +95,18 @@ export interface SessionEventPayload {
92
95
  severity: 'info' | 'warning' | 'error';
93
96
  message: string;
94
97
  }
98
+ /**
99
+ * Payload for the `session_metadata` event — session-level metadata updates
100
+ * (currently only the human-readable title). The title is tri-state:
101
+ * - `undefined` (field absent): legacy event, no title assertion.
102
+ * - `null`: explicit untitled (the caller asserts there is no meaningful title).
103
+ * - `string`: a concrete title.
104
+ *
105
+ * This is a typed first-class recording event, NOT a `session_event` sentinel.
106
+ */
107
+ export interface SessionMetadataPayload {
108
+ readonly title?: string | null;
109
+ }
95
110
  /**
96
111
  * Payload for the `directories_changed` event.
97
112
  */
@@ -106,12 +121,21 @@ export interface SessionRecordingServiceConfig {
106
121
  projectHash: string;
107
122
  chatsDir: string;
108
123
  workspaceDirs: string[];
124
+ /** Effective absolute working directory for lifecycle discovery. */
125
+ cwd?: string;
109
126
  provider: string;
110
127
  model: string;
111
128
  }
112
129
  /**
113
130
  * Metadata extracted from a session's `session_start` event and updated
114
- * by subsequent `provider_switch` / `directories_changed` events.
131
+ * by subsequent `provider_switch` / `directories_changed` / `session_metadata`
132
+ * events.
133
+ *
134
+ * The title is tri-state:
135
+ * - `undefined`: no `session_metadata` event seen (legacy file). Callers fall
136
+ * back to first-human-text heuristics.
137
+ * - `null`: explicit untitled (`session_metadata` asserted no title).
138
+ * - `string`: a concrete title.
115
139
  */
116
140
  export interface SessionMetadata {
117
141
  sessionId: string;
@@ -119,7 +143,9 @@ export interface SessionMetadata {
119
143
  provider: string;
120
144
  model: string;
121
145
  workspaceDirs: string[];
146
+ cwd?: string;
122
147
  startTime: string;
148
+ title?: string | null;
123
149
  }
124
150
  /**
125
151
  * Discriminated union result from the replay engine.
@@ -151,4 +177,17 @@ export interface SessionSummary {
151
177
  fileSize: number;
152
178
  provider: string;
153
179
  model: string;
180
+ cwd?: string;
181
+ /**
182
+ * Tri-state title from a persisted `session_metadata` event:
183
+ * - `undefined`: no `session_metadata` event seen (legacy fallback).
184
+ * - `null`: explicit untitled.
185
+ * - `string`: a concrete title.
186
+ */
187
+ title?: string | null;
188
+ /**
189
+ * Immutable creation timestamp extracted from `session_start.startTime`.
190
+ * Used for stable ordering independent of file `lastModified` mutations.
191
+ */
192
+ createdAt?: string;
154
193
  }
@@ -13,5 +13,5 @@
13
13
  * See the License for the specific language governing permissions and
14
14
  * limitations under the License.
15
15
  */
16
- export {};
16
+ export const SESSION_TITLE_MAX_LENGTH = 120;
17
17
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/recording/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/recording/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAaH,MAAM,CAAC,MAAM,wBAAwB,GAAG,GAAG,CAAC"}
@@ -36,6 +36,7 @@ function buildToolGovernance(profile) {
36
36
  const excludedRaw = profile.config.getExcludeTools() ?? [];
37
37
  return {
38
38
  allowed: new Set((allowedRaw ?? []).map((tool) => normalizeToolName(tool) ?? tool)),
39
+ allowedExplicit: allowedRaw !== undefined,
39
40
  disabled: new Set((disabledRaw ?? []).map((tool) => normalizeToolName(tool) ?? tool)),
40
41
  excluded: new Set(excludedRaw.map((tool) => normalizeToolName(tool) ?? tool)),
41
42
  };
@@ -48,7 +49,7 @@ function isToolPermitted(toolName, governance) {
48
49
  if (governance.disabled.has(canonical)) {
49
50
  return false;
50
51
  }
51
- if (governance.allowed.size > 0 && !governance.allowed.has(canonical)) {
52
+ if (governance.allowedExplicit && !governance.allowed.has(canonical)) {
52
53
  return false;
53
54
  }
54
55
  return true;
@@ -1 +1 @@
1
- {"version":3,"file":"AgentRuntimeLoader.js","sourceRoot":"","sources":["../../../src/runtime/AgentRuntimeLoader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"AgentRuntimeLoader.js","sourceRoot":"","sources":["../../../src/runtime/AgentRuntimeLoader.ts"],"names":[],"mappings":"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"}
@@ -3,28 +3,19 @@
3
3
  * Copyright 2025 Vybestack LLC
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
- import type { AnsiOutput } from '../utils/terminalSerializer.js';
6
+ import type { AnsiOutput, LiveOutputUpdate } from '../utils/terminalSerializer.js';
7
7
  /**
8
- * Accumulates a live-output chunk onto an existing value.
8
+ * Accumulates a live-output update onto an existing accumulated value using
9
+ * the explicit tagged {@link LiveOutputUpdate} protocol.
9
10
  *
10
- * Tools that stream via `canUpdateOutput` deliver chunks in one of two
11
- * semantics:
12
- *
13
- * - **`AnsiOutput`** (e.g. the shell tool) — a full terminal-buffer snapshot.
14
- * Each chunk supersedes the previous one, so the latest snapshot replaces
15
- * the old value.
16
- * - **`string`** (e.g. the task tool streaming subagent text) — an incremental
17
- * delta. Each chunk must be appended to the existing text so the display
18
- * grows rather than showing only the latest token.
11
+ * - **`append`** (text deltas) concatenated onto the existing value when it
12
+ * is a string; otherwise the prior non-string value is dropped and the
13
+ * delta starts a fresh string.
14
+ * - **`replace`** (terminal-buffer snapshots) — supersedes any prior value.
19
15
  *
20
16
  * The `existing` parameter is typed `unknown` because callers may pass values
21
17
  * drawn from a broader display union (e.g. `ToolResultDisplay`, which also
22
- * includes `FileDiff` / `FileRead`). The function only ever appends when both
23
- * values are strings; any other combination replaces with the incoming chunk.
24
- *
25
- * Note: the append-vs-replace distinction is currently inferred from the
26
- * payload type. Migrating to an explicit tagged update protocol (e.g.
27
- * `{ mode: 'append'; data: string } | { mode: 'replace'; data: AnsiOutput }`)
28
- * is tracked in follow-up #2586.
18
+ * includes `FileDiff` / `FileRead`). The returned type is the narrow
19
+ * `string | AnsiOutput` union the live-output channel actually produces.
29
20
  */
30
- export declare function accumulateLiveOutput(existing: unknown, chunk: string | AnsiOutput): string | AnsiOutput;
21
+ export declare function accumulateLiveOutput(existing: unknown, update: LiveOutputUpdate): string | AnsiOutput;
@@ -4,31 +4,31 @@
4
4
  * SPDX-License-Identifier: Apache-2.0
5
5
  */
6
6
  /**
7
- * Accumulates a live-output chunk onto an existing value.
7
+ * Accumulates a live-output update onto an existing accumulated value using
8
+ * the explicit tagged {@link LiveOutputUpdate} protocol.
8
9
  *
9
- * Tools that stream via `canUpdateOutput` deliver chunks in one of two
10
- * semantics:
11
- *
12
- * - **`AnsiOutput`** (e.g. the shell tool) — a full terminal-buffer snapshot.
13
- * Each chunk supersedes the previous one, so the latest snapshot replaces
14
- * the old value.
15
- * - **`string`** (e.g. the task tool streaming subagent text) — an incremental
16
- * delta. Each chunk must be appended to the existing text so the display
17
- * grows rather than showing only the latest token.
10
+ * - **`append`** (text deltas) concatenated onto the existing value when it
11
+ * is a string; otherwise the prior non-string value is dropped and the
12
+ * delta starts a fresh string.
13
+ * - **`replace`** (terminal-buffer snapshots) — supersedes any prior value.
18
14
  *
19
15
  * The `existing` parameter is typed `unknown` because callers may pass values
20
16
  * drawn from a broader display union (e.g. `ToolResultDisplay`, which also
21
- * includes `FileDiff` / `FileRead`). The function only ever appends when both
22
- * values are strings; any other combination replaces with the incoming chunk.
23
- *
24
- * Note: the append-vs-replace distinction is currently inferred from the
25
- * payload type. Migrating to an explicit tagged update protocol (e.g.
26
- * `{ mode: 'append'; data: string } | { mode: 'replace'; data: AnsiOutput }`)
27
- * is tracked in follow-up #2586.
17
+ * includes `FileDiff` / `FileRead`). The returned type is the narrow
18
+ * `string | AnsiOutput` union the live-output channel actually produces.
28
19
  */
29
- export function accumulateLiveOutput(existing, chunk) {
30
- return typeof chunk === 'string' && typeof existing === 'string'
31
- ? existing + chunk
32
- : chunk;
20
+ export function accumulateLiveOutput(existing, update) {
21
+ switch (update.mode) {
22
+ case 'append':
23
+ return typeof existing === 'string'
24
+ ? existing + update.data
25
+ : update.data;
26
+ case 'replace':
27
+ return update.data;
28
+ default: {
29
+ const _exhaustive = update;
30
+ return _exhaustive;
31
+ }
32
+ }
33
33
  }
34
34
  //# sourceMappingURL=liveOutput.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"liveOutput.js","sourceRoot":"","sources":["../../../src/scheduler/liveOutput.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,UAAU,oBAAoB,CAClC,QAAiB,EACjB,KAA0B;IAE1B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ;QAC9D,CAAC,CAAC,QAAQ,GAAG,KAAK;QAClB,CAAC,CAAC,KAAK,CAAC;AACZ,CAAC"}
1
+ {"version":3,"file":"liveOutput.js","sourceRoot":"","sources":["../../../src/scheduler/liveOutput.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,oBAAoB,CAClC,QAAiB,EACjB,MAAwB;IAExB,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,QAAQ;YACX,OAAO,OAAO,QAAQ,KAAK,QAAQ;gBACjC,CAAC,CAAC,QAAQ,GAAG,MAAM,CAAC,IAAI;gBACxB,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;QAClB,KAAK,SAAS;YACZ,OAAO,MAAM,CAAC,IAAI,CAAC;QACrB,OAAO,CAAC,CAAC,CAAC;YACR,MAAM,WAAW,GAAU,MAAM,CAAC;YAClC,OAAO,WAAW,CAAC;QACrB,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -13,7 +13,7 @@
13
13
  import type { AnyDeclarativeTool, AnyToolInvocation, ToolCallConfirmationDetails } from '@vybestack/llxprt-code-tools';
14
14
  import type { ToolCallRequestInfo, ToolCallResponseInfo } from '../core/turn.js';
15
15
  import type { ToolConfirmationOutcome } from '@vybestack/llxprt-code-tools';
16
- import type { AnsiOutput } from '../utils/terminalSerializer.js';
16
+ import type { AnsiOutput, LiveOutputUpdate } from '../utils/terminalSerializer.js';
17
17
  import type { SerializableConfirmationDetails } from '../confirmation-bus/types.js';
18
18
  /**
19
19
  * @requirement TS-TYPE-001
@@ -101,7 +101,7 @@ export type Status = ToolCall['status'];
101
101
  * Handler Types - Callback function signatures for tool execution events
102
102
  */
103
103
  export type ConfirmHandler = (toolCall: WaitingToolCall) => Promise<ToolConfirmationOutcome>;
104
- export type OutputUpdateHandler = (toolCallId: string, outputChunk: string | AnsiOutput) => void;
104
+ export type OutputUpdateHandler = (toolCallId: string, update: LiveOutputUpdate) => void;
105
105
  export type AllToolCallsCompleteHandler = (completedToolCalls: CompletedToolCall[]) => Promise<void>;
106
106
  export type ToolCallsUpdateHandler = (toolCalls: ToolCall[]) => void;
107
107
  /**
@@ -24,6 +24,10 @@ export declare class ContentConverters {
24
24
  private static hasLegacyTruthyValue;
25
25
  /** Resolve the Gemini role from an IContent speaker. */
26
26
  private static resolveRole;
27
+ private static toolCallBlockToPart;
28
+ private static toolResponseBlockToPart;
29
+ private static thinkingBlockToPart;
30
+ private static codeBlockToPart;
27
31
  /** Convert a single IContent block to a Gemini Part. */
28
32
  private static blockToPart;
29
33
  /**