psadk 1.4.8 → 1.5.0

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 (205) hide show
  1. package/build/main/index.d.ts +1 -0
  2. package/build/main/lib/PSAI.js +1 -2
  3. package/build/main/lib/PSAgent.d.ts +46 -44
  4. package/build/main/lib/PSAgent.js +176 -961
  5. package/build/main/lib/PSAgentConfig.d.ts +110 -26
  6. package/build/main/lib/PSAgentLogger.js +1 -2
  7. package/build/main/lib/PSAgentTool.d.ts +8 -3
  8. package/build/main/lib/PSAgentTool.js +3 -3
  9. package/build/main/lib/agent-core/{agent-loop.d.ts → src/agent-loop.d.ts} +1 -1
  10. package/build/main/lib/agent-core/src/agent-loop.js +514 -0
  11. package/build/{module/lib/agent-core → main/lib/agent-core/src}/agent.d.ts +2 -2
  12. package/build/main/lib/agent-core/src/agent.js +419 -0
  13. package/build/main/lib/agent-core/{harness → src/harness}/agent-harness.d.ts +36 -26
  14. package/build/main/lib/agent-core/src/harness/agent-harness.js +1028 -0
  15. package/build/main/lib/agent-core/src/harness/compaction/branch-summarization.d.ts +52 -0
  16. package/build/main/lib/agent-core/src/harness/compaction/branch-summarization.js +182 -0
  17. package/build/main/lib/agent-core/src/harness/compaction/compaction.d.ts +94 -0
  18. package/build/main/lib/agent-core/src/harness/compaction/compaction.js +550 -0
  19. package/build/main/lib/agent-core/src/harness/compaction/utils.d.ts +24 -0
  20. package/build/main/lib/agent-core/src/harness/compaction/utils.js +131 -0
  21. package/build/main/lib/agent-core/src/harness/env/nodejs.d.ts +50 -0
  22. package/build/main/lib/agent-core/src/harness/env/nodejs.js +494 -0
  23. package/build/main/lib/agent-core/{harness → src/harness}/messages.d.ts +2 -2
  24. package/build/{module/lib/agent-core → main/lib/agent-core/src}/harness/messages.js +1 -1
  25. package/build/main/lib/agent-core/{harness → src/harness}/prompt-templates.d.ts +4 -1
  26. package/build/main/lib/agent-core/src/harness/prompt-templates.js +235 -0
  27. package/build/{module/lib/agent-core/harness/session/repo/jsonl.d.ts → main/lib/agent-core/src/harness/session/jsonl-repo.d.ts} +7 -1
  28. package/build/main/lib/agent-core/src/harness/session/jsonl-repo.js +106 -0
  29. package/build/{module/lib/agent-core/harness/session/storage/jsonl.d.ts → main/lib/agent-core/src/harness/session/jsonl-storage.d.ts} +7 -4
  30. package/build/main/lib/agent-core/src/harness/session/jsonl-storage.js +234 -0
  31. package/build/main/lib/agent-core/{harness/session/repo/memory.d.ts → src/harness/session/memory-repo.d.ts} +1 -1
  32. package/build/main/lib/agent-core/src/harness/session/memory-repo.js +45 -0
  33. package/build/main/lib/agent-core/{harness/session/storage/memory.d.ts → src/harness/session/memory-storage.d.ts} +4 -5
  34. package/build/main/lib/agent-core/src/harness/session/memory-storage.js +116 -0
  35. package/build/main/lib/agent-core/{harness/session/repo/shared.d.ts → src/harness/session/repo-utils.d.ts} +3 -2
  36. package/build/main/lib/agent-core/src/harness/session/repo-utils.js +39 -0
  37. package/build/{module/lib/agent-core → main/lib/agent-core/src}/harness/session/session.d.ts +3 -2
  38. package/build/main/lib/agent-core/src/harness/session/session.js +213 -0
  39. package/build/main/lib/agent-core/src/harness/session/uuid.d.ts +1 -0
  40. package/build/main/lib/agent-core/src/harness/session/uuid.js +54 -0
  41. package/build/main/lib/agent-core/{harness → src/harness}/skills.d.ts +4 -1
  42. package/build/main/lib/agent-core/src/harness/skills.js +353 -0
  43. package/build/main/lib/agent-core/{harness → src/harness}/system-prompt.d.ts +1 -1
  44. package/build/main/lib/agent-core/src/harness/system-prompt.js +30 -0
  45. package/build/{module/lib/agent-core → main/lib/agent-core/src}/harness/types.d.ts +160 -70
  46. package/build/main/lib/agent-core/src/harness/types.js +94 -0
  47. package/build/main/lib/agent-core/{harness → src/harness}/utils/shell-output.d.ts +2 -2
  48. package/build/main/lib/agent-core/src/harness/utils/shell-output.js +134 -0
  49. package/build/main/lib/agent-core/src/harness/utils/truncate.js +294 -0
  50. package/build/main/lib/agent-core/src/index.d.ts +19 -0
  51. package/build/main/lib/agent-core/src/index.js +25 -0
  52. package/build/main/lib/agent-core/src/node.d.ts +2 -0
  53. package/build/main/lib/agent-core/src/node.js +3 -0
  54. package/build/main/lib/agent-core/{proxy.js → src/proxy.js} +3 -2
  55. package/build/{module/lib/agent-core → main/lib/agent-core/src}/types.d.ts +13 -1
  56. package/build/{module/lib/agent-core → main/lib/agent-core/src}/types.js +1 -1
  57. package/build/main/lib/localAgent.d.ts +35 -0
  58. package/build/main/lib/localAgent.js +329 -0
  59. package/build/main/lib/remoteAgent.d.ts +25 -0
  60. package/build/main/lib/remoteAgent.js +311 -0
  61. package/build/main/lib/tools/BraveWebSearchTool.js +1 -2
  62. package/build/main/lib/tools/PSArtifactTool.js +1 -2
  63. package/build/main/lib/tools/PSClarifyTool.js +1 -2
  64. package/build/main/lib/tools/PSCommandLineTool.js +1 -2
  65. package/build/main/lib/tools/PSMemoryTool.js +1 -2
  66. package/build/main/lib/tools/PSReadFileTool.js +1 -2
  67. package/build/main/lib/tools/PSRetrievalTool.js +1 -2
  68. package/build/main/lib/tools/PSSkillTool.js +1 -2
  69. package/build/main/lib/tools/PSSubAgentTool.js +1 -1
  70. package/build/main/lib/tools/PSWriteFileTool.js +1 -2
  71. package/build/main/lib/tools/TodoTool.js +1 -2
  72. package/build/main/lib/utils/debuglogger.js +1 -2
  73. package/build/main/lib/utils/helpers.js +1 -6
  74. package/build/module/index.d.ts +1 -0
  75. package/build/module/lib/PSAI.js +1 -2
  76. package/build/module/lib/PSAgent.d.ts +46 -44
  77. package/build/module/lib/PSAgent.js +176 -961
  78. package/build/module/lib/PSAgentConfig.d.ts +110 -26
  79. package/build/module/lib/PSAgentLogger.js +1 -2
  80. package/build/module/lib/PSAgentTool.d.ts +8 -3
  81. package/build/module/lib/PSAgentTool.js +3 -3
  82. package/build/module/lib/agent-core/{agent-loop.d.ts → src/agent-loop.d.ts} +1 -1
  83. package/build/module/lib/agent-core/src/agent-loop.js +514 -0
  84. package/build/{main/lib/agent-core → module/lib/agent-core/src}/agent.d.ts +2 -2
  85. package/build/module/lib/agent-core/src/agent.js +419 -0
  86. package/build/module/lib/agent-core/{harness → src/harness}/agent-harness.d.ts +36 -26
  87. package/build/module/lib/agent-core/src/harness/agent-harness.js +1028 -0
  88. package/build/module/lib/agent-core/src/harness/compaction/branch-summarization.d.ts +52 -0
  89. package/build/module/lib/agent-core/src/harness/compaction/branch-summarization.js +182 -0
  90. package/build/module/lib/agent-core/src/harness/compaction/compaction.d.ts +94 -0
  91. package/build/module/lib/agent-core/src/harness/compaction/compaction.js +550 -0
  92. package/build/module/lib/agent-core/src/harness/compaction/utils.d.ts +24 -0
  93. package/build/module/lib/agent-core/src/harness/compaction/utils.js +131 -0
  94. package/build/module/lib/agent-core/src/harness/env/nodejs.d.ts +50 -0
  95. package/build/module/lib/agent-core/src/harness/env/nodejs.js +494 -0
  96. package/build/module/lib/agent-core/{harness → src/harness}/messages.d.ts +2 -2
  97. package/build/{main/lib/agent-core → module/lib/agent-core/src}/harness/messages.js +1 -1
  98. package/build/module/lib/agent-core/{harness → src/harness}/prompt-templates.d.ts +4 -1
  99. package/build/module/lib/agent-core/src/harness/prompt-templates.js +235 -0
  100. package/build/{main/lib/agent-core/harness/session/repo/jsonl.d.ts → module/lib/agent-core/src/harness/session/jsonl-repo.d.ts} +7 -1
  101. package/build/module/lib/agent-core/src/harness/session/jsonl-repo.js +106 -0
  102. package/build/{main/lib/agent-core/harness/session/storage/jsonl.d.ts → module/lib/agent-core/src/harness/session/jsonl-storage.d.ts} +7 -4
  103. package/build/module/lib/agent-core/src/harness/session/jsonl-storage.js +234 -0
  104. package/build/module/lib/agent-core/{harness/session/repo/memory.d.ts → src/harness/session/memory-repo.d.ts} +1 -1
  105. package/build/module/lib/agent-core/src/harness/session/memory-repo.js +45 -0
  106. package/build/module/lib/agent-core/{harness/session/storage/memory.d.ts → src/harness/session/memory-storage.d.ts} +4 -5
  107. package/build/module/lib/agent-core/src/harness/session/memory-storage.js +116 -0
  108. package/build/module/lib/agent-core/{harness/session/repo/shared.d.ts → src/harness/session/repo-utils.d.ts} +3 -2
  109. package/build/module/lib/agent-core/src/harness/session/repo-utils.js +39 -0
  110. package/build/{main/lib/agent-core → module/lib/agent-core/src}/harness/session/session.d.ts +3 -2
  111. package/build/module/lib/agent-core/src/harness/session/session.js +213 -0
  112. package/build/module/lib/agent-core/src/harness/session/uuid.d.ts +1 -0
  113. package/build/module/lib/agent-core/src/harness/session/uuid.js +54 -0
  114. package/build/module/lib/agent-core/{harness → src/harness}/skills.d.ts +4 -1
  115. package/build/module/lib/agent-core/src/harness/skills.js +353 -0
  116. package/build/module/lib/agent-core/{harness → src/harness}/system-prompt.d.ts +1 -1
  117. package/build/module/lib/agent-core/src/harness/system-prompt.js +30 -0
  118. package/build/{main/lib/agent-core → module/lib/agent-core/src}/harness/types.d.ts +160 -70
  119. package/build/module/lib/agent-core/src/harness/types.js +94 -0
  120. package/build/module/lib/agent-core/{harness → src/harness}/utils/shell-output.d.ts +2 -2
  121. package/build/module/lib/agent-core/src/harness/utils/shell-output.js +134 -0
  122. package/build/module/lib/agent-core/src/harness/utils/truncate.js +294 -0
  123. package/build/module/lib/agent-core/src/index.d.ts +19 -0
  124. package/build/module/lib/agent-core/src/index.js +25 -0
  125. package/build/module/lib/agent-core/src/node.d.ts +2 -0
  126. package/build/module/lib/agent-core/src/node.js +3 -0
  127. package/build/module/lib/agent-core/{proxy.js → src/proxy.js} +3 -2
  128. package/build/{main/lib/agent-core → module/lib/agent-core/src}/types.d.ts +13 -1
  129. package/build/{main/lib/agent-core → module/lib/agent-core/src}/types.js +1 -1
  130. package/build/module/lib/localAgent.d.ts +35 -0
  131. package/build/module/lib/localAgent.js +329 -0
  132. package/build/module/lib/remoteAgent.d.ts +25 -0
  133. package/build/module/lib/remoteAgent.js +311 -0
  134. package/build/module/lib/tools/BraveWebSearchTool.js +1 -2
  135. package/build/module/lib/tools/PSArtifactTool.js +1 -2
  136. package/build/module/lib/tools/PSClarifyTool.js +1 -2
  137. package/build/module/lib/tools/PSCommandLineTool.js +1 -2
  138. package/build/module/lib/tools/PSMemoryTool.js +1 -2
  139. package/build/module/lib/tools/PSReadFileTool.js +1 -2
  140. package/build/module/lib/tools/PSRetrievalTool.js +1 -2
  141. package/build/module/lib/tools/PSSkillTool.js +1 -2
  142. package/build/module/lib/tools/PSSubAgentTool.js +1 -1
  143. package/build/module/lib/tools/PSWriteFileTool.js +1 -2
  144. package/build/module/lib/tools/TodoTool.js +1 -2
  145. package/build/module/lib/utils/debuglogger.js +1 -2
  146. package/build/module/lib/utils/helpers.js +1 -6
  147. package/package.json +2 -1
  148. package/build/main/lib/agent-core/agent-loop.js +0 -483
  149. package/build/main/lib/agent-core/agent.js +0 -419
  150. package/build/main/lib/agent-core/harness/agent-harness.js +0 -772
  151. package/build/main/lib/agent-core/harness/compaction/branch-summarization.d.ts +0 -87
  152. package/build/main/lib/agent-core/harness/compaction/branch-summarization.js +0 -246
  153. package/build/main/lib/agent-core/harness/compaction/compaction.d.ts +0 -121
  154. package/build/main/lib/agent-core/harness/compaction/compaction.js +0 -637
  155. package/build/main/lib/agent-core/harness/compaction/utils.d.ts +0 -37
  156. package/build/main/lib/agent-core/harness/compaction/utils.js +0 -153
  157. package/build/main/lib/agent-core/harness/env/nodejs.d.ts +0 -43
  158. package/build/main/lib/agent-core/harness/env/nodejs.js +0 -353
  159. package/build/main/lib/agent-core/harness/execution-env.d.ts +0 -3
  160. package/build/main/lib/agent-core/harness/execution-env.js +0 -3
  161. package/build/main/lib/agent-core/harness/prompt-templates.js +0 -204
  162. package/build/main/lib/agent-core/harness/session/repo/jsonl.js +0 -98
  163. package/build/main/lib/agent-core/harness/session/repo/memory.js +0 -46
  164. package/build/main/lib/agent-core/harness/session/repo/shared.js +0 -31
  165. package/build/main/lib/agent-core/harness/session/session.js +0 -199
  166. package/build/main/lib/agent-core/harness/session/storage/jsonl.js +0 -170
  167. package/build/main/lib/agent-core/harness/session/storage/memory.js +0 -94
  168. package/build/main/lib/agent-core/harness/skills.js +0 -266
  169. package/build/main/lib/agent-core/harness/system-prompt.js +0 -30
  170. package/build/main/lib/agent-core/harness/types.js +0 -16
  171. package/build/main/lib/agent-core/harness/utils/shell-output.js +0 -101
  172. package/build/main/lib/agent-core/harness/utils/truncate.js +0 -208
  173. package/build/main/lib/agent-core/index.d.ts +0 -19
  174. package/build/main/lib/agent-core/index.js +0 -25
  175. package/build/module/lib/agent-core/agent-loop.js +0 -483
  176. package/build/module/lib/agent-core/agent.js +0 -419
  177. package/build/module/lib/agent-core/harness/agent-harness.js +0 -772
  178. package/build/module/lib/agent-core/harness/compaction/branch-summarization.d.ts +0 -87
  179. package/build/module/lib/agent-core/harness/compaction/branch-summarization.js +0 -246
  180. package/build/module/lib/agent-core/harness/compaction/compaction.d.ts +0 -121
  181. package/build/module/lib/agent-core/harness/compaction/compaction.js +0 -637
  182. package/build/module/lib/agent-core/harness/compaction/utils.d.ts +0 -37
  183. package/build/module/lib/agent-core/harness/compaction/utils.js +0 -153
  184. package/build/module/lib/agent-core/harness/env/nodejs.d.ts +0 -43
  185. package/build/module/lib/agent-core/harness/env/nodejs.js +0 -353
  186. package/build/module/lib/agent-core/harness/execution-env.d.ts +0 -3
  187. package/build/module/lib/agent-core/harness/execution-env.js +0 -3
  188. package/build/module/lib/agent-core/harness/prompt-templates.js +0 -204
  189. package/build/module/lib/agent-core/harness/session/repo/jsonl.js +0 -98
  190. package/build/module/lib/agent-core/harness/session/repo/memory.js +0 -46
  191. package/build/module/lib/agent-core/harness/session/repo/shared.js +0 -31
  192. package/build/module/lib/agent-core/harness/session/session.js +0 -199
  193. package/build/module/lib/agent-core/harness/session/storage/jsonl.js +0 -170
  194. package/build/module/lib/agent-core/harness/session/storage/memory.js +0 -94
  195. package/build/module/lib/agent-core/harness/skills.js +0 -266
  196. package/build/module/lib/agent-core/harness/system-prompt.js +0 -30
  197. package/build/module/lib/agent-core/harness/types.js +0 -16
  198. package/build/module/lib/agent-core/harness/utils/shell-output.js +0 -101
  199. package/build/module/lib/agent-core/harness/utils/truncate.js +0 -208
  200. package/build/module/lib/agent-core/index.d.ts +0 -19
  201. package/build/module/lib/agent-core/index.js +0 -25
  202. /package/build/main/lib/agent-core/{harness → src/harness}/utils/truncate.d.ts +0 -0
  203. /package/build/main/lib/agent-core/{proxy.d.ts → src/proxy.d.ts} +0 -0
  204. /package/build/module/lib/agent-core/{harness → src/harness}/utils/truncate.d.ts +0 -0
  205. /package/build/module/lib/agent-core/{proxy.d.ts → src/proxy.d.ts} +0 -0
@@ -1,204 +0,0 @@
1
- import { parse } from 'yaml';
2
- /**
3
- * Load prompt templates from one or more paths.
4
- *
5
- * Directory inputs load direct `.md` children non-recursively. File inputs load explicit `.md` files. Missing paths and
6
- * non-markdown files are skipped. Read and parse failures are returned as diagnostics.
7
- */
8
- export async function loadPromptTemplates(env, paths) {
9
- const promptTemplates = [];
10
- const diagnostics = [];
11
- for (const path of Array.isArray(paths) ? paths : [paths]) {
12
- const info = await safeFileInfo(env, path);
13
- if (!info)
14
- continue;
15
- const kind = await resolveKind(env, info);
16
- if (kind === 'directory') {
17
- const result = await loadTemplatesFromDir(env, info.path);
18
- promptTemplates.push(...result.promptTemplates);
19
- diagnostics.push(...result.diagnostics);
20
- }
21
- else if (kind === 'file' && info.name.endsWith('.md')) {
22
- const result = await loadTemplateFromFile(env, info.path);
23
- if (result.promptTemplate)
24
- promptTemplates.push(result.promptTemplate);
25
- diagnostics.push(...result.diagnostics);
26
- }
27
- }
28
- return { promptTemplates, diagnostics };
29
- }
30
- /**
31
- * Load prompt templates from source-tagged paths.
32
- *
33
- * Source values are preserved exactly and attached to every loaded prompt template and diagnostic. The agent package does
34
- * not interpret source values; applications define their own provenance shape.
35
- */
36
- export async function loadSourcedPromptTemplates(env, inputs, mapPromptTemplate) {
37
- const promptTemplates = [];
38
- const diagnostics = [];
39
- for (const input of inputs) {
40
- const result = await loadPromptTemplates(env, input.path);
41
- for (const promptTemplate of result.promptTemplates) {
42
- promptTemplates.push({
43
- promptTemplate: mapPromptTemplate
44
- ? mapPromptTemplate(promptTemplate, input.source)
45
- : promptTemplate,
46
- source: input.source,
47
- });
48
- }
49
- for (const diagnostic of result.diagnostics)
50
- diagnostics.push({ ...diagnostic, source: input.source });
51
- }
52
- return { promptTemplates, diagnostics };
53
- }
54
- async function loadTemplatesFromDir(env, dir) {
55
- const promptTemplates = [];
56
- const diagnostics = [];
57
- let entries;
58
- try {
59
- entries = await env.listDir(dir);
60
- }
61
- catch (error) {
62
- diagnostics.push({
63
- type: 'warning',
64
- message: errorMessage(error, 'failed to list prompt template directory'),
65
- path: dir,
66
- });
67
- return { promptTemplates, diagnostics };
68
- }
69
- for (const entry of entries.sort((a, b) => a.name.localeCompare(b.name))) {
70
- const kind = await resolveKind(env, entry);
71
- if (kind !== 'file' || !entry.name.endsWith('.md'))
72
- continue;
73
- const result = await loadTemplateFromFile(env, entry.path);
74
- if (result.promptTemplate)
75
- promptTemplates.push(result.promptTemplate);
76
- diagnostics.push(...result.diagnostics);
77
- }
78
- return { promptTemplates, diagnostics };
79
- }
80
- async function loadTemplateFromFile(env, filePath) {
81
- const diagnostics = [];
82
- try {
83
- const rawContent = await env.readTextFile(filePath);
84
- const { frontmatter, body } = parseFrontmatter(rawContent);
85
- const firstLine = body.split('\n').find((line) => line.trim());
86
- let description = typeof frontmatter.description === 'string'
87
- ? frontmatter.description
88
- : '';
89
- if (!description && firstLine) {
90
- description = firstLine.slice(0, 60);
91
- if (firstLine.length > 60)
92
- description += '...';
93
- }
94
- return {
95
- promptTemplate: {
96
- name: basenameEnvPath(filePath).replace(/\.md$/i, ''),
97
- description,
98
- content: body,
99
- },
100
- diagnostics,
101
- };
102
- }
103
- catch (error) {
104
- diagnostics.push({
105
- type: 'warning',
106
- message: errorMessage(error, 'failed to load prompt template'),
107
- path: filePath,
108
- });
109
- return { promptTemplate: null, diagnostics };
110
- }
111
- }
112
- async function safeFileInfo(env, path) {
113
- try {
114
- return await env.fileInfo(path);
115
- }
116
- catch {
117
- return undefined;
118
- }
119
- }
120
- async function resolveKind(env, info) {
121
- if (info.kind === 'file' || info.kind === 'directory')
122
- return info.kind;
123
- try {
124
- const realPath = await env.realPath(info.path);
125
- const target = await env.fileInfo(realPath);
126
- return target.kind === 'file' || target.kind === 'directory'
127
- ? target.kind
128
- : undefined;
129
- }
130
- catch {
131
- return undefined;
132
- }
133
- }
134
- function parseFrontmatter(content) {
135
- const normalized = content.replace(/\r\n/g, '\n').replace(/\r/g, '\n');
136
- if (!normalized.startsWith('---'))
137
- return { frontmatter: {}, body: normalized };
138
- const endIndex = normalized.indexOf('\n---', 3);
139
- if (endIndex === -1)
140
- return { frontmatter: {}, body: normalized };
141
- const yamlString = normalized.slice(4, endIndex);
142
- const body = normalized.slice(endIndex + 4).trim();
143
- return { frontmatter: (parse(yamlString) ?? {}), body };
144
- }
145
- function basenameEnvPath(path) {
146
- const normalized = path.replace(/\/+$/, '');
147
- const slashIndex = normalized.lastIndexOf('/');
148
- return slashIndex === -1 ? normalized : normalized.slice(slashIndex + 1);
149
- }
150
- function errorMessage(error, fallback) {
151
- return error instanceof Error ? error.message : fallback;
152
- }
153
- /** Parse an argument string using simple shell-style single and double quotes. */
154
- export function parseCommandArgs(argsString) {
155
- const args = [];
156
- let current = '';
157
- let inQuote = null;
158
- for (let i = 0; i < argsString.length; i++) {
159
- const char = argsString[i];
160
- if (inQuote) {
161
- if (char === inQuote)
162
- inQuote = null;
163
- else
164
- current += char;
165
- }
166
- else if (char === '"' || char === "'") {
167
- inQuote = char;
168
- }
169
- else if (char === ' ' || char === '\t') {
170
- if (current) {
171
- args.push(current);
172
- current = '';
173
- }
174
- }
175
- else {
176
- current += char;
177
- }
178
- }
179
- if (current)
180
- args.push(current);
181
- return args;
182
- }
183
- /** Substitute prompt template placeholders (`$1`, `$@`, `$ARGUMENTS`, `${@:N}`, `${@:N:L}`) with command arguments. */
184
- export function substituteArgs(content, args) {
185
- let result = content;
186
- result = result.replace(/\$(\d+)/g, (_, num) => args[parseInt(num, 10) - 1] ?? '');
187
- result = result.replace(/\$\{@:(\d+)(?::(\d+))?\}/g, (_, startStr, lengthStr) => {
188
- let start = parseInt(startStr, 10) - 1;
189
- if (start < 0)
190
- start = 0;
191
- if (lengthStr)
192
- return args.slice(start, start + parseInt(lengthStr, 10)).join(' ');
193
- return args.slice(start).join(' ');
194
- });
195
- const allArgs = args.join(' ');
196
- result = result.replace(/\$ARGUMENTS/g, allArgs);
197
- result = result.replace(/\$@/g, allArgs);
198
- return result;
199
- }
200
- /** Format a prompt template invocation with positional arguments. */
201
- export function formatPromptTemplateInvocation(template, args = []) {
202
- return substituteArgs(template.content, args);
203
- }
204
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvbXB0LXRlbXBsYXRlcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9saWIvYWdlbnQtY29yZS9oYXJuZXNzL3Byb21wdC10ZW1wbGF0ZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLE1BQU0sQ0FBQztBQW9CN0I7Ozs7O0dBS0c7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLG1CQUFtQixDQUN2QyxHQUFpQixFQUNqQixLQUF3QjtJQUt4QixNQUFNLGVBQWUsR0FBcUIsRUFBRSxDQUFDO0lBQzdDLE1BQU0sV0FBVyxHQUErQixFQUFFLENBQUM7SUFDbkQsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUMxRCxNQUFNLElBQUksR0FBRyxNQUFNLFlBQVksQ0FBQyxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDM0MsSUFBSSxDQUFDLElBQUk7WUFBRSxTQUFTO1FBQ3BCLE1BQU0sSUFBSSxHQUFHLE1BQU0sV0FBVyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUMxQyxJQUFJLElBQUksS0FBSyxXQUFXLEVBQUUsQ0FBQztZQUN6QixNQUFNLE1BQU0sR0FBRyxNQUFNLG9CQUFvQixDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDMUQsZUFBZSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUNoRCxXQUFXLENBQUMsSUFBSSxDQUFDLEdBQUcsTUFBTSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQzFDLENBQUM7YUFBTSxJQUFJLElBQUksS0FBSyxNQUFNLElBQUksSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxD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
@@ -1,98 +0,0 @@
1
- import { constants } from 'node:fs';
2
- import { access, mkdir, readdir, rm } from 'node:fs/promises';
3
- import { join, resolve } from 'node:path';
4
- import { JsonlSessionStorage, loadJsonlSessionMetadata, } from '../storage/jsonl.js';
5
- import { createSessionId, createTimestamp, getEntriesToFork, toSession, } from './shared.js';
6
- async function exists(path) {
7
- try {
8
- await access(path, constants.F_OK);
9
- return true;
10
- }
11
- catch {
12
- return false;
13
- }
14
- }
15
- function encodeCwd(cwd) {
16
- return `--${cwd.replace(/^[/\\]/, '').replace(/[/\\:]/g, '-')}--`;
17
- }
18
- export class JsonlSessionRepo {
19
- sessionsRoot;
20
- constructor(options) {
21
- this.sessionsRoot = resolve(options.sessionsRoot);
22
- }
23
- getSessionDir(cwd) {
24
- return join(this.sessionsRoot, encodeCwd(cwd));
25
- }
26
- createSessionFilePath(cwd, sessionId, timestamp) {
27
- return join(this.getSessionDir(cwd), `${timestamp.replace(/[:.]/g, '-')}_${sessionId}.jsonl`);
28
- }
29
- async create(options) {
30
- await mkdir(this.sessionsRoot, { recursive: true });
31
- const id = options.id ?? createSessionId();
32
- const createdAt = createTimestamp();
33
- const filePath = this.createSessionFilePath(options.cwd, id, createdAt);
34
- const storage = await JsonlSessionStorage.create(filePath, {
35
- cwd: options.cwd,
36
- sessionId: id,
37
- parentSessionPath: options.parentSessionPath,
38
- });
39
- return toSession(storage);
40
- }
41
- async open(metadata) {
42
- if (!(await exists(metadata.path))) {
43
- throw new Error(`Session not found: ${metadata.path}`);
44
- }
45
- const storage = await JsonlSessionStorage.open(metadata.path);
46
- return toSession(storage);
47
- }
48
- async list(options = {}) {
49
- const dirs = options.cwd
50
- ? [this.getSessionDir(options.cwd)]
51
- : await this.listSessionDirs();
52
- const sessions = [];
53
- for (const dir of dirs) {
54
- if (!(await exists(dir)))
55
- continue;
56
- const files = (await readdir(dir))
57
- .filter((file) => file.endsWith('.jsonl'))
58
- .map((file) => join(dir, file));
59
- for (const filePath of files) {
60
- try {
61
- sessions.push(await loadJsonlSessionMetadata(filePath));
62
- }
63
- catch {
64
- // Ignore invalid session files when listing a directory.
65
- }
66
- }
67
- }
68
- sessions.sort((a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime());
69
- return sessions;
70
- }
71
- async delete(metadata) {
72
- await rm(metadata.path, { force: true });
73
- }
74
- async fork(sourceMetadata, options) {
75
- const source = await this.open(sourceMetadata);
76
- const forkedEntries = await getEntriesToFork(source.getStorage(), options);
77
- const id = options.id ?? createSessionId();
78
- const createdAt = createTimestamp();
79
- const storage = await JsonlSessionStorage.create(this.createSessionFilePath(options.cwd, id, createdAt), {
80
- cwd: options.cwd,
81
- sessionId: id,
82
- parentSessionPath: options.parentSessionPath ?? sourceMetadata.path,
83
- });
84
- for (const entry of forkedEntries) {
85
- await storage.appendEntry(entry);
86
- }
87
- return toSession(storage);
88
- }
89
- async listSessionDirs() {
90
- if (!(await exists(this.sessionsRoot)))
91
- return [];
92
- const entries = await readdir(this.sessionsRoot, { withFileTypes: true });
93
- return entries
94
- .filter((entry) => entry.isDirectory())
95
- .map((entry) => join(this.sessionsRoot, entry.name));
96
- }
97
- }
98
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoianNvbmwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvbGliL2FnZW50LWNvcmUvaGFybmVzcy9zZXNzaW9uL3JlcG8vanNvbmwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUNwQyxPQUFPLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBRSxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDOUQsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFTMUMsT0FBTyxFQUNMLG1CQUFtQixFQUNuQix3QkFBd0IsR0FDekIsTUFBTSxxQkFBcUIsQ0FBQztBQUU3QixPQUFPLEVBQ0wsZUFBZSxFQUNmLGVBQWUsRUFDZixnQkFBZ0IsRUFDaEIsU0FBUyxHQUNWLE1BQU0sYUFBYSxDQUFDO0FBRXJCLEtBQUssVUFBVSxNQUFNLENBQUMsSUFBWTtJQUNoQyxJQUFJLENBQUM7UUFDSCxNQUFNLE1BQU0sQ0FBQyxJQUFJLEVBQUUsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ25DLE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUFDLE1BQU0sQ0FBQztRQUNQLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztBQUNILENBQUM7QUFFRCxTQUFTLFNBQVMsQ0FBQyxHQUFXO0lBQzVCLE9BQU8sS0FBSyxHQUFHLENBQUMsT0FBTyxDQUFDLFFBQVEsRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxJQUFJLENBQUM7QUFDcEUsQ0FBQztBQUVELE1BQU0sT0FBTyxnQkFBZ0I7SUFDbkIsWUFBWSxDQUFTO0lBRTdCLFlBQVksT0FBaUM7UUFDM0MsSUFBSSxDQUFDLFlBQVksR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ3BELENB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
@@ -1,46 +0,0 @@
1
- import { InMemorySessionStorage } from '../storage/memory.js';
2
- import { createSessionId, createTimestamp, getEntriesToFork, toSession, } from './shared.js';
3
- export class InMemorySessionRepo {
4
- sessions = new Map();
5
- async create(options = {}) {
6
- const metadata = {
7
- id: options.id ?? createSessionId(),
8
- createdAt: createTimestamp(),
9
- };
10
- const storage = new InMemorySessionStorage({ metadata });
11
- const session = toSession(storage);
12
- this.sessions.set(metadata.id, session);
13
- return session;
14
- }
15
- async open(metadata) {
16
- const session = this.sessions.get(metadata.id);
17
- if (!session) {
18
- throw new Error(`Session not found: ${metadata.id}`);
19
- }
20
- return session;
21
- }
22
- async list() {
23
- return Promise.all([...this.sessions.values()].map((session) => session.getMetadata()));
24
- }
25
- async delete(metadata) {
26
- this.sessions.delete(metadata.id);
27
- }
28
- async fork(sourceMetadata, options) {
29
- const source = await this.open(sourceMetadata);
30
- const forkedEntries = await getEntriesToFork(source.getStorage(), options);
31
- const metadata = {
32
- id: options.id ?? createSessionId(),
33
- createdAt: createTimestamp(),
34
- };
35
- const leafId = forkedEntries[forkedEntries.length - 1]?.id ?? null;
36
- const storage = new InMemorySessionStorage({
37
- metadata,
38
- entries: forkedEntries,
39
- leafId,
40
- });
41
- const session = toSession(storage);
42
- this.sessions.set(metadata.id, session);
43
- return session;
44
- }
45
- }
46
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVtb3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9hZ2VudC1jb3JlL2hhcm5lc3Mvc2Vzc2lvbi9yZXBvL21lbW9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQztBQUU5RCxPQUFPLEVBQ0wsZUFBZSxFQUNmLGVBQWUsRUFDZixnQkFBZ0IsRUFDaEIsU0FBUyxHQUNWLE1BQU0sYUFBYSxDQUFDO0FBRXJCLE1BQU0sT0FBTyxtQkFBbUI7SUFLdEIsUUFBUSxHQUFHLElBQUksR0FBRyxFQUFvQyxDQUFDO0lBRS9ELEtBQUssQ0FBQyxNQUFNLENBQ1YsVUFBMkIsRUFBRTtRQUU3QixNQUFNLFFBQVEsR0FBb0I7WUFDaEMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxFQUFFLElBQUksZUFBZSxFQUFFO1lBQ25DLFNBQVMsRUFBRSxlQUFlLEVBQUU7U0FDN0IsQ0FBQztRQUNGLE1BQU0sT0FBTyxHQUFHLElBQUksc0JBQXNCLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ3pELE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNuQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3hDLE9BQU8sT0FBTyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQXlCO1FBQ2xDLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUMvQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDYixNQUFNLElBQUksS0FBSyxDQUFDLHNCQUFzQixRQUFRLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN2RCxDQUFDO1FBQ0QsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFJO1FBQ1IsT0FBTyxPQUFPLENBQUMsR0FBRyxDQUNoQixDQUFDLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLFdBQVcsRUFBRSxDQUFDLENBQ3BFLENBQUM7SUFDSixDQUFDO0lBRUQsS0FBSyxDQUFDLE1BQU0sQ0FBQyxRQUF5QjtRQUNwQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDcEMsQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFJLENBQ1IsY0FBK0IsRUFDL0IsT0FBc0U7UUFFdEUsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQy9DLE1BQU0sYUFBYSxHQUFHLE1BQU0sZ0JBQWdCLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzNFLE1BQU0sUUFBUSxHQUFvQjtZQUNoQyxFQUFFLEVBQUUsT0FBTyxDQUFDLEVBQUUsSUFBSSxlQUFlLEVBQUU7WUFDbkMsU0FBUyxFQUFFLGVBQWUsRUFBRTtTQUM3QixDQUFDO1FBQ0YsTUFBTSxNQUFNLEdBQUcsYUFBYSxDQUFDLGFBQWEsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQUUsRUFBRSxJQUFJLElBQUksQ0FBQztRQUNuRSxNQUFNLE9BQU8sR0FBRyxJQUFJLHNCQUFzQixDQUFDO1lBQ3pDLFFBQVE7WUFDUixPQUFPLEVBQUUsYUFBYTtZQUN0QixNQUFNO1NBQ1AsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ25DLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDeEMsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztDQUNGIn0=
@@ -1,31 +0,0 @@
1
- import { v7 as uuidv7 } from 'uuid';
2
- import { Session } from '../session.js';
3
- export function createSessionId() {
4
- return uuidv7();
5
- }
6
- export function createTimestamp() {
7
- return new Date().toISOString();
8
- }
9
- export function toSession(storage) {
10
- return new Session(storage);
11
- }
12
- export async function getEntriesToFork(storage, options) {
13
- if (!options.entryId)
14
- return storage.getEntries();
15
- const target = await storage.getEntry(options.entryId);
16
- if (!target) {
17
- throw new Error(`Entry ${options.entryId} not found`);
18
- }
19
- let effectiveLeafId;
20
- if ((options.position ?? 'before') === 'at') {
21
- effectiveLeafId = target.id;
22
- }
23
- else {
24
- if (target.type !== 'message' || target.message.role !== 'user') {
25
- throw new Error(`Entry ${options.entryId} is not a user message`);
26
- }
27
- effectiveLeafId = target.parentId;
28
- }
29
- return storage.getPathToRoot(effectiveLeafId);
30
- }
31
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2hhcmVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2xpYi9hZ2VudC1jb3JlL2hhcm5lc3Mvc2Vzc2lvbi9yZXBvL3NoYXJlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsRUFBRSxJQUFJLE1BQU0sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQU9wQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXhDLE1BQU0sVUFBVSxlQUFlO0lBQzdCLE9BQU8sTUFBTSxFQUFFLENBQUM7QUFDbEIsQ0FBQztBQUVELE1BQU0sVUFBVSxlQUFlO0lBQzdCLE9BQU8sSUFBSSxJQUFJLEVBQUUsQ0FBQyxXQUFXLEVBQUUsQ0FBQztBQUNsQyxDQUFDO0FBRUQsTUFBTSxVQUFVLFNBQVMsQ0FDdkIsT0FBa0M7SUFFbEMsT0FBTyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUM5QixDQUFDO0FBRUQsTUFBTSxDQUFDLEtBQUssVUFBVSxnQkFBZ0IsQ0FDcEMsT0FBdUIsRUFDdkIsT0FBeUQ7SUFFekQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPO1FBQUUsT0FBTyxPQUFPLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDbEQsTUFBTSxNQUFNLEdBQUcsTUFBTSxPQUFPLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN2RCxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7UUFDWixNQUFNLElBQUksS0FBSyxDQUFDLFNBQVMsT0FBTyxDQUFDLE9BQU8sWUFBWSxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUNELElBQUksZUFBOEIsQ0FBQztJQUNuQyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsSUFBSSxRQUFRLENBQUMsS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUM1QyxlQUFlLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQztJQUM5QixDQUFDO1NBQU0sQ0FBQztRQUNOLElBQUksTUFBTSxDQUFDLElBQUksS0FBSyxTQUFTLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEtBQUssTUFBTSxFQUFFLENBQUM7WUFDaEUsTUFBTSxJQUFJLEtBQUssQ0FBQyxTQUFTLE9BQU8sQ0FBQyxPQUFPLHdCQUF3QixDQUFDLENBQUM7UUFDcEUsQ0FBQztRQUNELGVBQWUsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDO0lBQ3BDLENBQUM7SUFDRCxPQUFPLE9BQU8sQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLENBQUM7QUFDaEQsQ0FBQyJ9
@@ -1,199 +0,0 @@
1
- import { createBranchSummaryMessage, createCompactionSummaryMessage, createCustomMessage, } from '../messages.js';
2
- export function buildSessionContext(pathEntries) {
3
- let thinkingLevel = 'off';
4
- let model = null;
5
- let compaction = null;
6
- for (const entry of pathEntries) {
7
- if (entry.type === 'thinking_level_change') {
8
- thinkingLevel = entry.thinkingLevel;
9
- }
10
- else if (entry.type === 'model_change') {
11
- model = { provider: entry.provider, modelId: entry.modelId };
12
- }
13
- else if (entry.type === 'message' && entry.message.role === 'assistant') {
14
- model = {
15
- provider: entry.message.provider,
16
- modelId: entry.message.model,
17
- };
18
- }
19
- else if (entry.type === 'compaction') {
20
- compaction = entry;
21
- }
22
- }
23
- const messages = [];
24
- const appendMessage = (entry) => {
25
- if (entry.type === 'message') {
26
- messages.push(entry.message);
27
- }
28
- else if (entry.type === 'custom_message') {
29
- messages.push(createCustomMessage(entry.customType, entry.content, entry.display, entry.details, entry.timestamp));
30
- }
31
- else if (entry.type === 'branch_summary' && entry.summary) {
32
- messages.push(createBranchSummaryMessage(entry.summary, entry.fromId, entry.timestamp));
33
- }
34
- };
35
- if (compaction) {
36
- messages.push(createCompactionSummaryMessage(compaction.summary, compaction.tokensBefore, compaction.timestamp));
37
- const compactionIdx = pathEntries.findIndex((e) => e.type === 'compaction' && e.id === compaction.id);
38
- let foundFirstKept = false;
39
- for (let i = 0; i < compactionIdx; i++) {
40
- const entry = pathEntries[i];
41
- if (entry.id === compaction.firstKeptEntryId)
42
- foundFirstKept = true;
43
- if (foundFirstKept)
44
- appendMessage(entry);
45
- }
46
- for (let i = compactionIdx + 1; i < pathEntries.length; i++) {
47
- appendMessage(pathEntries[i]);
48
- }
49
- }
50
- else {
51
- for (const entry of pathEntries) {
52
- appendMessage(entry);
53
- }
54
- }
55
- return { messages, thinkingLevel, model };
56
- }
57
- export class Session {
58
- storage;
59
- constructor(storage) {
60
- this.storage = storage;
61
- }
62
- getMetadata() {
63
- return this.storage.getMetadata();
64
- }
65
- getStorage() {
66
- return this.storage;
67
- }
68
- getLeafId() {
69
- return this.storage.getLeafId();
70
- }
71
- getEntry(id) {
72
- return this.storage.getEntry(id);
73
- }
74
- getEntries() {
75
- return this.storage.getEntries();
76
- }
77
- async getBranch(fromId) {
78
- const leafId = fromId ?? (await this.storage.getLeafId());
79
- return this.storage.getPathToRoot(leafId);
80
- }
81
- async buildContext() {
82
- return buildSessionContext(await this.getBranch());
83
- }
84
- getLabel(id) {
85
- return this.storage.getLabel(id);
86
- }
87
- async getSessionName() {
88
- const entries = await this.storage.findEntries('session_info');
89
- return entries[entries.length - 1]?.name?.trim() || undefined;
90
- }
91
- async appendTypedEntry(entry) {
92
- await this.storage.appendEntry(entry);
93
- return entry.id;
94
- }
95
- async appendMessage(message) {
96
- return this.appendTypedEntry({
97
- type: 'message',
98
- id: await this.storage.createEntryId(),
99
- parentId: await this.storage.getLeafId(),
100
- timestamp: new Date().toISOString(),
101
- message,
102
- });
103
- }
104
- async appendThinkingLevelChange(thinkingLevel) {
105
- return this.appendTypedEntry({
106
- type: 'thinking_level_change',
107
- id: await this.storage.createEntryId(),
108
- parentId: await this.storage.getLeafId(),
109
- timestamp: new Date().toISOString(),
110
- thinkingLevel,
111
- });
112
- }
113
- async appendModelChange(provider, modelId) {
114
- return this.appendTypedEntry({
115
- type: 'model_change',
116
- id: await this.storage.createEntryId(),
117
- parentId: await this.storage.getLeafId(),
118
- timestamp: new Date().toISOString(),
119
- provider,
120
- modelId,
121
- });
122
- }
123
- async appendCompaction(summary, firstKeptEntryId, tokensBefore, details, fromHook) {
124
- return this.appendTypedEntry({
125
- type: 'compaction',
126
- id: await this.storage.createEntryId(),
127
- parentId: await this.storage.getLeafId(),
128
- timestamp: new Date().toISOString(),
129
- summary,
130
- firstKeptEntryId,
131
- tokensBefore,
132
- details,
133
- fromHook,
134
- });
135
- }
136
- async appendCustomEntry(customType, data) {
137
- return this.appendTypedEntry({
138
- type: 'custom',
139
- id: await this.storage.createEntryId(),
140
- parentId: await this.storage.getLeafId(),
141
- timestamp: new Date().toISOString(),
142
- customType,
143
- data,
144
- });
145
- }
146
- async appendCustomMessageEntry(customType, content, display, details) {
147
- return this.appendTypedEntry({
148
- type: 'custom_message',
149
- id: await this.storage.createEntryId(),
150
- parentId: await this.storage.getLeafId(),
151
- timestamp: new Date().toISOString(),
152
- customType,
153
- content,
154
- display,
155
- details,
156
- });
157
- }
158
- async appendLabel(targetId, label) {
159
- if (!(await this.storage.getEntry(targetId))) {
160
- throw new Error(`Entry ${targetId} not found`);
161
- }
162
- return this.appendTypedEntry({
163
- type: 'label',
164
- id: await this.storage.createEntryId(),
165
- parentId: await this.storage.getLeafId(),
166
- timestamp: new Date().toISOString(),
167
- targetId,
168
- label,
169
- });
170
- }
171
- async appendSessionName(name) {
172
- return this.appendTypedEntry({
173
- type: 'session_info',
174
- id: await this.storage.createEntryId(),
175
- parentId: await this.storage.getLeafId(),
176
- timestamp: new Date().toISOString(),
177
- name: name.trim(),
178
- });
179
- }
180
- async moveTo(entryId, summary) {
181
- if (entryId !== null && !(await this.storage.getEntry(entryId))) {
182
- throw new Error(`Entry ${entryId} not found`);
183
- }
184
- await this.storage.setLeafId(entryId);
185
- if (!summary)
186
- return undefined;
187
- return this.appendTypedEntry({
188
- type: 'branch_summary',
189
- id: await this.storage.createEntryId(),
190
- parentId: entryId,
191
- timestamp: new Date().toISOString(),
192
- fromId: entryId ?? 'root',
193
- summary: summary.summary,
194
- details: summary.details,
195
- fromHook: summary.fromHook,
196
- });
197
- }
198
- }
199
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9saWIvYWdlbnQtY29yZS9oYXJuZXNzL3Nlc3Npb24vc2Vzc2lvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQ0wsMEJBQTBCLEVBQzFCLDhCQUE4QixFQUM5QixtQkFBbUIsR0FDcEIsTUFBTSxnQkFBZ0IsQ0FBQztBQWlCeEIsTUFBTSxVQUFVLG1CQUFtQixDQUNqQyxXQUErQjtJQUUvQixJQUFJLGFBQWEsR0FBRyxLQUFLLENBQUM7SUFDMUIsSUFBSSxLQUFLLEdBQWlELElBQUksQ0FBQztJQUMvRCxJQUFJLFVBQVUsR0FBMkIsSUFBSSxDQUFDO0lBRTlDLEtBQUssTUFBTSxLQUFLLElBQUksV0FBVyxFQUFFLENBQUM7UUFDaEMsSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLHVCQUF1QixFQUFFLENBQUM7WUFDM0MsYUFBYSxHQUFHLEtBQUssQ0FBQyxhQUFhLENBQUM7UUFDdEMsQ0FBQzthQUFNLElBQUksS0FBSyxDQUFDLElBQUksS0FBSyxjQUFjLEVBQUUsQ0FBQztZQUN6QyxLQUFLLEdBQUcsRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLFFBQVEsRUFBRSxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQy9ELENBQUM7YUFBTSxJQUFJLEtBQUssQ0FBQyxJQUFJLEtBQUssU0FBUyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxLQUFLLFdBQVcsRUFBRSxDQUFDO1lBQzFFLEtBQUssR0FBRztnQkFDTixRQUFRLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRO2dCQUNoQyxPQUFPLEVBQUUsS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLO2FBQzdCLENBQUM7UUFDSixDQUFDO2FBQU0sSUFBSSxLQUFLLENBQUMsSUFBSSxLQUFLLFlBQVksRUFBRSxDQUFDO1lBQ3ZDLFVBQVUsR0FBRyxLQUFL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