@namzu/sdk 0.1.2 → 0.1.4-rc.1

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 (185) hide show
  1. package/README.md +19 -1
  2. package/dist/advisory/context.d.ts +23 -0
  3. package/dist/advisory/context.d.ts.map +1 -0
  4. package/dist/advisory/context.js +33 -0
  5. package/dist/advisory/context.js.map +1 -0
  6. package/dist/advisory/evaluator.d.ts +14 -0
  7. package/dist/advisory/evaluator.d.ts.map +1 -0
  8. package/dist/advisory/evaluator.js +87 -0
  9. package/dist/advisory/evaluator.js.map +1 -0
  10. package/dist/advisory/executor.d.ts +40 -0
  11. package/dist/advisory/executor.d.ts.map +1 -0
  12. package/dist/advisory/executor.js +132 -0
  13. package/dist/advisory/executor.js.map +1 -0
  14. package/dist/advisory/index.d.ts +6 -0
  15. package/dist/advisory/index.d.ts.map +1 -0
  16. package/dist/advisory/index.js +5 -0
  17. package/dist/advisory/index.js.map +1 -0
  18. package/dist/advisory/registry.d.ts +14 -0
  19. package/dist/advisory/registry.d.ts.map +1 -0
  20. package/dist/advisory/registry.js +36 -0
  21. package/dist/advisory/registry.js.map +1 -0
  22. package/dist/agents/SupervisorAgent.d.ts.map +1 -1
  23. package/dist/agents/SupervisorAgent.js +11 -1
  24. package/dist/agents/SupervisorAgent.js.map +1 -1
  25. package/dist/compaction/extractor.d.ts +7 -0
  26. package/dist/compaction/extractor.d.ts.map +1 -0
  27. package/dist/compaction/extractor.js +131 -0
  28. package/dist/compaction/extractor.js.map +1 -0
  29. package/dist/compaction/index.d.ts +6 -0
  30. package/dist/compaction/index.d.ts.map +1 -0
  31. package/dist/compaction/index.js +5 -0
  32. package/dist/compaction/index.js.map +1 -0
  33. package/dist/compaction/manager.d.ts +22 -0
  34. package/dist/compaction/manager.d.ts.map +1 -0
  35. package/dist/compaction/manager.js +91 -0
  36. package/dist/compaction/manager.js.map +1 -0
  37. package/dist/compaction/serializer.d.ts +3 -0
  38. package/dist/compaction/serializer.d.ts.map +1 -0
  39. package/dist/compaction/serializer.js +67 -0
  40. package/dist/compaction/serializer.js.map +1 -0
  41. package/dist/compaction/types.d.ts +40 -0
  42. package/dist/compaction/types.d.ts.map +1 -0
  43. package/dist/compaction/types.js +2 -0
  44. package/dist/compaction/types.js.map +1 -0
  45. package/dist/compaction/verifier.d.ts +6 -0
  46. package/dist/compaction/verifier.d.ts.map +1 -0
  47. package/dist/compaction/verifier.js +68 -0
  48. package/dist/compaction/verifier.js.map +1 -0
  49. package/dist/config/runtime.d.ts +193 -0
  50. package/dist/config/runtime.d.ts.map +1 -1
  51. package/dist/config/runtime.js +29 -0
  52. package/dist/config/runtime.js.map +1 -1
  53. package/dist/constants/advisory/index.d.ts +8 -0
  54. package/dist/constants/advisory/index.d.ts.map +1 -0
  55. package/dist/constants/advisory/index.js +8 -0
  56. package/dist/constants/advisory/index.js.map +1 -0
  57. package/dist/constants/compaction/index.d.ts +17 -0
  58. package/dist/constants/compaction/index.d.ts.map +1 -0
  59. package/dist/constants/compaction/index.js +17 -0
  60. package/dist/constants/compaction/index.js.map +1 -0
  61. package/dist/constants/index.d.ts +2 -0
  62. package/dist/constants/index.d.ts.map +1 -1
  63. package/dist/constants/index.js +2 -0
  64. package/dist/constants/index.js.map +1 -1
  65. package/dist/contracts/schemas.d.ts +20 -20
  66. package/dist/index.d.ts +13 -2
  67. package/dist/index.d.ts.map +1 -1
  68. package/dist/index.js +8 -1
  69. package/dist/index.js.map +1 -1
  70. package/dist/persona/assembler.d.ts +2 -1
  71. package/dist/persona/assembler.d.ts.map +1 -1
  72. package/dist/persona/assembler.js +23 -0
  73. package/dist/persona/assembler.js.map +1 -1
  74. package/dist/registry/tool/execute.d.ts +3 -0
  75. package/dist/registry/tool/execute.d.ts.map +1 -1
  76. package/dist/registry/tool/execute.js +45 -11
  77. package/dist/registry/tool/execute.js.map +1 -1
  78. package/dist/router/index.d.ts +2 -0
  79. package/dist/router/index.d.ts.map +1 -0
  80. package/dist/router/index.js +2 -0
  81. package/dist/router/index.js.map +1 -0
  82. package/dist/router/task-router.d.ts +8 -0
  83. package/dist/router/task-router.d.ts.map +1 -0
  84. package/dist/router/task-router.js +19 -0
  85. package/dist/router/task-router.js.map +1 -0
  86. package/dist/runtime/query/executor.d.ts +1 -0
  87. package/dist/runtime/query/executor.d.ts.map +1 -1
  88. package/dist/runtime/query/executor.js +19 -1
  89. package/dist/runtime/query/executor.js.map +1 -1
  90. package/dist/runtime/query/index.d.ts +2 -0
  91. package/dist/runtime/query/index.d.ts.map +1 -1
  92. package/dist/runtime/query/index.js.map +1 -1
  93. package/dist/runtime/query/prompt.d.ts.map +1 -1
  94. package/dist/runtime/query/prompt.js +4 -0
  95. package/dist/runtime/query/prompt.js.map +1 -1
  96. package/dist/tools/advisory/index.d.ts +7 -0
  97. package/dist/tools/advisory/index.d.ts.map +1 -0
  98. package/dist/tools/advisory/index.js +125 -0
  99. package/dist/tools/advisory/index.js.map +1 -0
  100. package/dist/tools/defineTool.d.ts +1 -0
  101. package/dist/tools/defineTool.d.ts.map +1 -1
  102. package/dist/tools/defineTool.js +1 -0
  103. package/dist/tools/defineTool.js.map +1 -1
  104. package/dist/types/advisory/config.d.ts +33 -0
  105. package/dist/types/advisory/config.d.ts.map +1 -0
  106. package/dist/types/advisory/config.js +2 -0
  107. package/dist/types/advisory/config.js.map +1 -0
  108. package/dist/types/advisory/index.d.ts +4 -0
  109. package/dist/types/advisory/index.d.ts.map +1 -0
  110. package/dist/types/advisory/index.js +2 -0
  111. package/dist/types/advisory/index.js.map +1 -0
  112. package/dist/types/advisory/result.d.ts +35 -0
  113. package/dist/types/advisory/result.d.ts.map +1 -0
  114. package/dist/types/advisory/result.js +2 -0
  115. package/dist/types/advisory/result.js.map +1 -0
  116. package/dist/types/advisory/trigger.d.ts +44 -0
  117. package/dist/types/advisory/trigger.d.ts.map +1 -0
  118. package/dist/types/advisory/trigger.js +2 -0
  119. package/dist/types/advisory/trigger.js.map +1 -0
  120. package/dist/types/agent/factory.d.ts +2 -0
  121. package/dist/types/agent/factory.d.ts.map +1 -1
  122. package/dist/types/agent/supervisor.d.ts +2 -0
  123. package/dist/types/agent/supervisor.d.ts.map +1 -1
  124. package/dist/types/ids/index.d.ts +2 -0
  125. package/dist/types/ids/index.d.ts.map +1 -1
  126. package/dist/types/persona/index.d.ts +9 -0
  127. package/dist/types/persona/index.d.ts.map +1 -1
  128. package/dist/types/router/index.d.ts +2 -0
  129. package/dist/types/router/index.d.ts.map +1 -0
  130. package/dist/types/router/index.js +2 -0
  131. package/dist/types/router/index.js.map +1 -0
  132. package/dist/types/router/task-router.d.ts +12 -0
  133. package/dist/types/router/task-router.d.ts.map +1 -0
  134. package/dist/types/router/task-router.js +2 -0
  135. package/dist/types/router/task-router.js.map +1 -0
  136. package/dist/types/tool/index.d.ts +13 -0
  137. package/dist/types/tool/index.d.ts.map +1 -1
  138. package/dist/utils/id.d.ts +3 -1
  139. package/dist/utils/id.d.ts.map +1 -1
  140. package/dist/utils/id.js +6 -0
  141. package/dist/utils/id.js.map +1 -1
  142. package/dist/utils/shell-compress.d.ts +13 -0
  143. package/dist/utils/shell-compress.d.ts.map +1 -0
  144. package/dist/utils/shell-compress.js +97 -0
  145. package/dist/utils/shell-compress.js.map +1 -0
  146. package/package.json +9 -5
  147. package/src/advisory/context.ts +47 -0
  148. package/src/advisory/evaluator.ts +98 -0
  149. package/src/advisory/executor.ts +187 -0
  150. package/src/advisory/index.ts +5 -0
  151. package/src/advisory/registry.ts +42 -0
  152. package/src/agents/SupervisorAgent.ts +12 -1
  153. package/src/compaction/extractor.ts +149 -0
  154. package/src/compaction/index.ts +21 -0
  155. package/src/compaction/manager.ts +107 -0
  156. package/src/compaction/serializer.ts +88 -0
  157. package/src/compaction/types.ts +37 -0
  158. package/src/compaction/verifier.ts +91 -0
  159. package/src/config/runtime.ts +33 -0
  160. package/src/constants/advisory/index.ts +7 -0
  161. package/src/constants/compaction/index.ts +20 -0
  162. package/src/constants/index.ts +2 -0
  163. package/src/index.ts +50 -2
  164. package/src/persona/assembler.ts +36 -1
  165. package/src/registry/tool/execute.ts +51 -11
  166. package/src/router/index.ts +1 -0
  167. package/src/router/task-router.ts +24 -0
  168. package/src/runtime/query/executor.ts +22 -1
  169. package/src/runtime/query/index.ts +3 -0
  170. package/src/runtime/query/prompt.ts +5 -0
  171. package/src/tools/advisory/index.ts +157 -0
  172. package/src/tools/defineTool.ts +2 -0
  173. package/src/types/advisory/config.ts +35 -0
  174. package/src/types/advisory/index.ts +18 -0
  175. package/src/types/advisory/result.ts +34 -0
  176. package/src/types/advisory/trigger.ts +39 -0
  177. package/src/types/agent/factory.ts +3 -0
  178. package/src/types/agent/supervisor.ts +3 -0
  179. package/src/types/ids/index.ts +2 -0
  180. package/src/types/persona/index.ts +11 -0
  181. package/src/types/router/index.ts +1 -0
  182. package/src/types/router/task-router.ts +20 -0
  183. package/src/types/tool/index.ts +15 -0
  184. package/src/utils/id.ts +10 -0
  185. package/src/utils/shell-compress.ts +137 -0
@@ -0,0 +1,131 @@
1
+ import { EDIT_TOOLS, READ_TOOLS, SEARCH_TOOLS, SHELL_TOOLS } from '../constants/compaction/index.js';
2
+ function tryParseJson(raw) {
3
+ try {
4
+ return JSON.parse(raw);
5
+ }
6
+ catch {
7
+ return null;
8
+ }
9
+ }
10
+ function extractFilePath(args) {
11
+ if (typeof args.path === 'string')
12
+ return args.path;
13
+ if (typeof args.file_path === 'string')
14
+ return args.file_path;
15
+ if (typeof args.filePath === 'string')
16
+ return args.filePath;
17
+ return null;
18
+ }
19
+ function splitSentences(text) {
20
+ return text
21
+ .split(/(?<=[.!?])\s+/)
22
+ .map((s) => s.trim())
23
+ .filter((s) => s.length > 0);
24
+ }
25
+ function isSubstantive(sentence) {
26
+ const fillerPatterns = [
27
+ /^(ok|okay|sure|alright|got it|understood|i see|let me|i'll|i will|now i|here)/i,
28
+ /^(great|perfect|excellent|good|nice|cool|right|yes|no|thanks)/i,
29
+ /^(let's|we can|we should|i can|i should)/i,
30
+ ];
31
+ return !fillerPatterns.some((pattern) => pattern.test(sentence));
32
+ }
33
+ function truncateResult(result, maxLen) {
34
+ if (result.length <= maxLen)
35
+ return result;
36
+ return `${result.slice(0, maxLen)}...`;
37
+ }
38
+ export function extractFromToolCall(manager, toolName, args) {
39
+ const parsed = tryParseJson(args);
40
+ if (!parsed)
41
+ return;
42
+ const filePath = extractFilePath(parsed);
43
+ if (READ_TOOLS.has(toolName) && filePath) {
44
+ manager.trackFile(filePath, { type: 'read', summary: 'read' });
45
+ }
46
+ else if (EDIT_TOOLS.has(toolName) && filePath) {
47
+ const detail = typeof parsed.content === 'string' ? truncateResult(parsed.content, 100) : 'modified';
48
+ manager.trackFile(filePath, { type: 'edit', detail });
49
+ }
50
+ else if (SEARCH_TOOLS.has(toolName)) {
51
+ const pattern = typeof parsed.pattern === 'string' ? parsed.pattern : '';
52
+ const path = typeof parsed.path === 'string' ? parsed.path : '';
53
+ if (pattern || path) {
54
+ manager.addDiscovery(`Searched: ${pattern}${path ? ` in ${path}` : ''}`);
55
+ }
56
+ }
57
+ else if (SHELL_TOOLS.has(toolName)) {
58
+ const command = typeof parsed.command === 'string' ? parsed.command : '';
59
+ if (command) {
60
+ manager.addToolResult({
61
+ tool: toolName,
62
+ summary: `Ran: ${truncateResult(command, 120)}`,
63
+ timestamp: Date.now(),
64
+ });
65
+ }
66
+ }
67
+ }
68
+ export function extractFromToolResult(manager, toolName, result, isError) {
69
+ if (isError) {
70
+ manager.addFailure(`${toolName}: ${truncateResult(result, 200)}`);
71
+ return;
72
+ }
73
+ if (READ_TOOLS.has(toolName)) {
74
+ const lineCount = result.split('\n').length;
75
+ manager.addToolResult({
76
+ tool: toolName,
77
+ summary: `${lineCount} lines`,
78
+ timestamp: Date.now(),
79
+ });
80
+ }
81
+ else if (SEARCH_TOOLS.has(toolName)) {
82
+ const matches = result.split('\n').filter((l) => l.trim().length > 0);
83
+ manager.addToolResult({
84
+ tool: toolName,
85
+ summary: `${matches.length} results`,
86
+ timestamp: Date.now(),
87
+ });
88
+ }
89
+ else if (EDIT_TOOLS.has(toolName)) {
90
+ manager.addToolResult({
91
+ tool: toolName,
92
+ summary: truncateResult(result, 100),
93
+ timestamp: Date.now(),
94
+ });
95
+ }
96
+ else if (SHELL_TOOLS.has(toolName)) {
97
+ manager.addToolResult({
98
+ tool: toolName,
99
+ summary: truncateResult(result, 150),
100
+ timestamp: Date.now(),
101
+ });
102
+ }
103
+ else {
104
+ manager.addToolResult({
105
+ tool: toolName,
106
+ summary: truncateResult(result, 120),
107
+ timestamp: Date.now(),
108
+ });
109
+ }
110
+ }
111
+ export function extractFromUserMessage(manager, content, isFirst) {
112
+ if (!content.trim())
113
+ return;
114
+ if (isFirst) {
115
+ manager.setTask(content.trim());
116
+ }
117
+ else {
118
+ manager.addUserRequirement(content.trim());
119
+ }
120
+ }
121
+ export function extractFromAssistantMessage(manager, content, config) {
122
+ if (!content || !content.trim())
123
+ return;
124
+ const sentences = splitSentences(content);
125
+ const substantive = sentences.filter(isSubstantive);
126
+ const selected = substantive.slice(0, config.maxSentencesPerTurn);
127
+ for (const sentence of selected) {
128
+ manager.addAssistantNote(sentence);
129
+ }
130
+ }
131
+ //# sourceMappingURL=extractor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extractor.js","sourceRoot":"","sources":["../../src/compaction/extractor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ export type { WorkingState, PlanSlot, FileSlot, FileAction, ToolResultSlot, CompactionStrategy, } from './types.js';
2
+ export { WorkingStateManager } from './manager.js';
3
+ export { serializeState } from './serializer.js';
4
+ export { extractFromToolCall, extractFromToolResult, extractFromUserMessage, extractFromAssistantMessage, } from './extractor.js';
5
+ export { buildVerifiedSummary } from './verifier.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/compaction/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACX,YAAY,EACZ,QAAQ,EACR,QAAQ,EACR,UAAU,EACV,cAAc,EACd,kBAAkB,GAClB,MAAM,YAAY,CAAA;AAEnB,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAElD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAEhD,OAAO,EACN,mBAAmB,EACnB,qBAAqB,EACrB,sBAAsB,EACtB,2BAA2B,GAC3B,MAAM,gBAAgB,CAAA;AAEvB,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAA"}
@@ -0,0 +1,5 @@
1
+ export { WorkingStateManager } from './manager.js';
2
+ export { serializeState } from './serializer.js';
3
+ export { extractFromToolCall, extractFromToolResult, extractFromUserMessage, extractFromAssistantMessage, } from './extractor.js';
4
+ export { buildVerifiedSummary } from './verifier.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/compaction/index.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAElD,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAEhD,OAAO,EACN,mBAAmB,EACnB,qBAAqB,EACrB,sBAAsB,EACtB,2BAA2B,GAC3B,MAAM,gBAAgB,CAAA;AAEvB,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAA"}
@@ -0,0 +1,22 @@
1
+ import type { CompactionConfig } from '../config/runtime.js';
2
+ import type { FileAction, PlanSlot, ToolResultSlot, WorkingState } from './types.js';
3
+ export declare class WorkingStateManager {
4
+ private state;
5
+ private readonly config;
6
+ constructor(config: CompactionConfig);
7
+ setTask(task: string): void;
8
+ setPlan(plan: PlanSlot[]): void;
9
+ trackFile(path: string, action: FileAction): void;
10
+ addDecision(decision: string): void;
11
+ addFailure(failure: string): void;
12
+ addDiscovery(discovery: string): void;
13
+ addEnvironment(env: string): void;
14
+ addToolResult(result: ToolResultSlot): void;
15
+ addUserRequirement(requirement: string): void;
16
+ addAssistantNote(note: string): void;
17
+ slotCount(): number;
18
+ getState(): WorkingState;
19
+ reset(): void;
20
+ private pushWithEviction;
21
+ }
22
+ //# sourceMappingURL=manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.d.ts","sourceRoot":"","sources":["../../src/compaction/manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAC5D,OAAO,KAAK,EAAE,UAAU,EAAY,QAAQ,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAiB9F,qBAAa,mBAAmB;IAC/B,OAAO,CAAC,KAAK,CAAc;IAC3B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;gBAE7B,MAAM,EAAE,gBAAgB;IAKpC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAI3B,OAAO,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,IAAI;IAI/B,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,IAAI;IASjD,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAInC,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAIjC,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAIrC,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAIjC,aAAa,CAAC,MAAM,EAAE,cAAc,GAAG,IAAI;IAO3C,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAK7C,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAKpC,SAAS,IAAI,MAAM;IAenB,QAAQ,IAAI,YAAY;IAIxB,KAAK,IAAI,IAAI;IAIb,OAAO,CAAC,gBAAgB;CAMxB"}
@@ -0,0 +1,91 @@
1
+ function createEmptyState() {
2
+ return {
3
+ task: '',
4
+ plan: [],
5
+ files: new Map(),
6
+ decisions: [],
7
+ failures: [],
8
+ discoveries: [],
9
+ environment: [],
10
+ toolResults: [],
11
+ userRequirements: [],
12
+ assistantNotes: [],
13
+ };
14
+ }
15
+ export class WorkingStateManager {
16
+ state;
17
+ config;
18
+ constructor(config) {
19
+ this.config = config;
20
+ this.state = createEmptyState();
21
+ }
22
+ setTask(task) {
23
+ this.state.task = task.slice(0, this.config.maxCharsPerTask);
24
+ }
25
+ setPlan(plan) {
26
+ this.state.plan = plan;
27
+ }
28
+ trackFile(path, action) {
29
+ const existing = this.state.files.get(path);
30
+ if (existing) {
31
+ existing.actions.push(action);
32
+ }
33
+ else {
34
+ this.state.files.set(path, { path, actions: [action] });
35
+ }
36
+ }
37
+ addDecision(decision) {
38
+ this.pushWithEviction(this.state.decisions, decision, this.config.maxListSize);
39
+ }
40
+ addFailure(failure) {
41
+ this.pushWithEviction(this.state.failures, failure, this.config.maxListSize);
42
+ }
43
+ addDiscovery(discovery) {
44
+ this.pushWithEviction(this.state.discoveries, discovery, this.config.maxListSize);
45
+ }
46
+ addEnvironment(env) {
47
+ this.pushWithEviction(this.state.environment, env, this.config.maxListSize);
48
+ }
49
+ addToolResult(result) {
50
+ this.state.toolResults.push(result);
51
+ while (this.state.toolResults.length > this.config.maxToolResults) {
52
+ this.state.toolResults.shift();
53
+ }
54
+ }
55
+ addUserRequirement(requirement) {
56
+ const truncated = requirement.slice(0, this.config.maxCharsPerRequirement);
57
+ this.pushWithEviction(this.state.userRequirements, truncated, this.config.maxListSize);
58
+ }
59
+ addAssistantNote(note) {
60
+ const truncated = note.slice(0, this.config.maxCharsPerNote);
61
+ this.pushWithEviction(this.state.assistantNotes, truncated, this.config.maxListSize);
62
+ }
63
+ slotCount() {
64
+ let count = 0;
65
+ if (this.state.task)
66
+ count++;
67
+ count += this.state.plan.length;
68
+ count += this.state.files.size;
69
+ count += this.state.decisions.length;
70
+ count += this.state.failures.length;
71
+ count += this.state.discoveries.length;
72
+ count += this.state.environment.length;
73
+ count += this.state.toolResults.length;
74
+ count += this.state.userRequirements.length;
75
+ count += this.state.assistantNotes.length;
76
+ return count;
77
+ }
78
+ getState() {
79
+ return this.state;
80
+ }
81
+ reset() {
82
+ this.state = createEmptyState();
83
+ }
84
+ pushWithEviction(list, item, max) {
85
+ list.push(item);
86
+ while (list.length > max) {
87
+ list.shift();
88
+ }
89
+ }
90
+ }
91
+ //# sourceMappingURL=manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manager.js","sourceRoot":"","sources":["../../src/compaction/manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { WorkingState } from './types.js';
2
+ export declare function serializeState(state: WorkingState): string;
3
+ //# sourceMappingURL=serializer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serializer.d.ts","sourceRoot":"","sources":["../../src/compaction/serializer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAY,YAAY,EAAE,MAAM,YAAY,CAAA;AA0CxD,wBAAgB,cAAc,CAAC,KAAK,EAAE,YAAY,GAAG,MAAM,CA4C1D"}
@@ -0,0 +1,67 @@
1
+ import { SECTION_HEADERS } from '../constants/compaction/index.js';
2
+ const PLAN_STATUS_ICONS = {
3
+ pending: '\u25CB',
4
+ active: '\u25C9',
5
+ done: '\u2713',
6
+ skipped: '\u2717',
7
+ };
8
+ function renderPlan(plan) {
9
+ return plan.map((slot) => `- ${PLAN_STATUS_ICONS[slot.status]} ${slot.label}`).join('\n');
10
+ }
11
+ function renderFiles(files) {
12
+ const lines = [];
13
+ for (const [, slot] of files) {
14
+ lines.push(`- \`${slot.path}\``);
15
+ for (const action of slot.actions) {
16
+ if (action.type === 'delete') {
17
+ lines.push(' - deleted');
18
+ }
19
+ else {
20
+ const desc = 'detail' in action ? action.detail : action.summary;
21
+ lines.push(` - ${action.type}: ${desc ?? ''}`);
22
+ }
23
+ }
24
+ }
25
+ return lines.join('\n');
26
+ }
27
+ function renderList(items) {
28
+ return items.map((item) => `- ${item}`).join('\n');
29
+ }
30
+ function renderToolResults(results) {
31
+ return results.map((r) => `- **${r.tool}**: ${r.summary}`).join('\n');
32
+ }
33
+ export function serializeState(state) {
34
+ const sections = [];
35
+ if (state.task) {
36
+ sections.push(`${SECTION_HEADERS.task}\n\n${state.task}`);
37
+ }
38
+ if (state.userRequirements.length > 0) {
39
+ sections.push(`${SECTION_HEADERS.userRequirements}\n\n${renderList(state.userRequirements)}`);
40
+ }
41
+ if (state.plan.length > 0) {
42
+ sections.push(`${SECTION_HEADERS.plan}\n\n${renderPlan(state.plan)}`);
43
+ }
44
+ if (state.environment.length > 0) {
45
+ sections.push(`${SECTION_HEADERS.environment}\n\n${renderList(state.environment)}`);
46
+ }
47
+ if (state.files.size > 0) {
48
+ sections.push(`${SECTION_HEADERS.files}\n\n${renderFiles(state.files)}`);
49
+ }
50
+ if (state.decisions.length > 0) {
51
+ sections.push(`${SECTION_HEADERS.decisions}\n\n${renderList(state.decisions)}`);
52
+ }
53
+ if (state.assistantNotes.length > 0) {
54
+ sections.push(`${SECTION_HEADERS.assistantNotes}\n\n${renderList(state.assistantNotes)}`);
55
+ }
56
+ if (state.toolResults.length > 0) {
57
+ sections.push(`${SECTION_HEADERS.toolResults}\n\n${renderToolResults(state.toolResults)}`);
58
+ }
59
+ if (state.failures.length > 0) {
60
+ sections.push(`${SECTION_HEADERS.failures}\n\n${renderList(state.failures)}`);
61
+ }
62
+ if (state.discoveries.length > 0) {
63
+ sections.push(`${SECTION_HEADERS.discoveries}\n\n${renderList(state.discoveries)}`);
64
+ }
65
+ return sections.join('\n\n');
66
+ }
67
+ //# sourceMappingURL=serializer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serializer.js","sourceRoot":"","sources":["../../src/compaction/serializer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ export interface WorkingState {
2
+ task: string;
3
+ plan: PlanSlot[];
4
+ files: Map<string, FileSlot>;
5
+ decisions: string[];
6
+ failures: string[];
7
+ discoveries: string[];
8
+ environment: string[];
9
+ toolResults: ToolResultSlot[];
10
+ userRequirements: string[];
11
+ assistantNotes: string[];
12
+ }
13
+ export interface PlanSlot {
14
+ id: string;
15
+ label: string;
16
+ status: 'pending' | 'active' | 'done' | 'skipped';
17
+ }
18
+ export interface FileSlot {
19
+ path: string;
20
+ actions: FileAction[];
21
+ }
22
+ export type FileAction = {
23
+ type: 'read';
24
+ summary: string;
25
+ } | {
26
+ type: 'edit';
27
+ detail: string;
28
+ } | {
29
+ type: 'create';
30
+ detail: string;
31
+ } | {
32
+ type: 'delete';
33
+ };
34
+ export interface ToolResultSlot {
35
+ tool: string;
36
+ summary: string;
37
+ timestamp: number;
38
+ }
39
+ export type CompactionStrategy = 'structured' | 'disabled';
40
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/compaction/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,YAAY;IAC5B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,QAAQ,EAAE,CAAA;IAChB,KAAK,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;IAC5B,SAAS,EAAE,MAAM,EAAE,CAAA;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,WAAW,EAAE,MAAM,EAAE,CAAA;IACrB,WAAW,EAAE,MAAM,EAAE,CAAA;IACrB,WAAW,EAAE,cAAc,EAAE,CAAA;IAC7B,gBAAgB,EAAE,MAAM,EAAE,CAAA;IAC1B,cAAc,EAAE,MAAM,EAAE,CAAA;CACxB;AAED,MAAM,WAAW,QAAQ;IACxB,EAAE,EAAE,MAAM,CAAA;IACV,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,SAAS,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,CAAA;CACjD;AAED,MAAM,WAAW,QAAQ;IACxB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,UAAU,EAAE,CAAA;CACrB;AAED,MAAM,MAAM,UAAU,GACnB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACjC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAChC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAClC;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,CAAA;AAErB,MAAM,WAAW,cAAc;IAC9B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,CAAA;CACjB;AAED,MAAM,MAAM,kBAAkB,GAAG,YAAY,GAAG,UAAU,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/compaction/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,6 @@
1
+ import type { CompactionConfig } from '../config/runtime.js';
2
+ import type { Message } from '../types/message/index.js';
3
+ import type { LLMProvider } from '../types/provider/interface.js';
4
+ import type { WorkingStateManager } from './manager.js';
5
+ export declare function buildVerifiedSummary(manager: WorkingStateManager, olderMessages: Message[], provider: LLMProvider, config: CompactionConfig): Promise<string>;
6
+ //# sourceMappingURL=verifier.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verifier.d.ts","sourceRoot":"","sources":["../../src/compaction/verifier.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAA;AAC5D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,2BAA2B,CAAA;AACxD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAA;AACjE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAA;AAwCvD,wBAAsB,oBAAoB,CACzC,OAAO,EAAE,mBAAmB,EAC5B,aAAa,EAAE,OAAO,EAAE,EACxB,QAAQ,EAAE,WAAW,EACrB,MAAM,EAAE,gBAAgB,GACtB,OAAO,CAAC,MAAM,CAAC,CA0CjB"}
@@ -0,0 +1,68 @@
1
+ import { serializeState } from './serializer.js';
2
+ const VERIFICATION_PROMPT = `You are a context compaction verifier. You are given a structured state summary extracted from a conversation, plus a truncated excerpt of the older conversation that was summarized.
3
+
4
+ Your job: determine if the structured state captures all important information from the conversation excerpt. Important information includes:
5
+ - The user's original task and any follow-up requirements
6
+ - Key decisions made during the conversation
7
+ - Errors encountered and how they were resolved
8
+ - Files that were read, created, or modified
9
+ - Important discoveries or constraints
10
+
11
+ If the structured state is complete, respond with exactly: COMPLETE
12
+
13
+ If something important is missing, respond with a brief bullet list of the missing items (no preamble, just the bullets). Each bullet should be a single concise sentence.`;
14
+ function truncateMessages(messages, budget) {
15
+ const lines = [];
16
+ let charCount = 0;
17
+ for (const msg of messages) {
18
+ if (!msg.content)
19
+ continue;
20
+ const prefix = `[${msg.role}]: `;
21
+ const content = msg.content;
22
+ if (charCount + prefix.length + content.length > budget) {
23
+ const remaining = budget - charCount - prefix.length;
24
+ if (remaining > 0) {
25
+ lines.push(`${prefix}${content.slice(0, remaining)}...`);
26
+ }
27
+ break;
28
+ }
29
+ lines.push(`${prefix}${content}`);
30
+ charCount += prefix.length + content.length;
31
+ }
32
+ return lines.join('\n\n');
33
+ }
34
+ export async function buildVerifiedSummary(manager, olderMessages, provider, config) {
35
+ const serialized = serializeState(manager.getState());
36
+ if (manager.slotCount() >= config.richStateThreshold) {
37
+ return serialized;
38
+ }
39
+ if (!config.llmVerification) {
40
+ return serialized;
41
+ }
42
+ const conversationExcerpt = truncateMessages(olderMessages, config.convoTextBudget);
43
+ if (!conversationExcerpt.trim()) {
44
+ return serialized;
45
+ }
46
+ const verificationMessages = [
47
+ {
48
+ role: 'system',
49
+ content: VERIFICATION_PROMPT,
50
+ },
51
+ {
52
+ role: 'user',
53
+ content: `## Structured State\n\n${serialized}\n\n## Conversation Excerpt\n\n${conversationExcerpt}`,
54
+ },
55
+ ];
56
+ const response = await provider.chat({
57
+ model: '',
58
+ messages: verificationMessages,
59
+ maxTokens: config.llmVerificationMaxTokens,
60
+ temperature: 0,
61
+ });
62
+ const responseText = response.message.content?.trim() ?? '';
63
+ if (responseText === 'COMPLETE') {
64
+ return serialized;
65
+ }
66
+ return `${serialized}\n\n## LLM Verification Additions\n\n${responseText}`;
67
+ }
68
+ //# sourceMappingURL=verifier.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"verifier.js","sourceRoot":"","sources":["../../src/compaction/verifier.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAEhD,MAAM,mBAAmB,GAAG;;;;;;;;;;;2KAW+I,CAAA;AAE3K,SAAS,gBAAgB,CAAC,QAAmB,EAAE,MAAc;IAC5D,MAAM,KAAK,GAAa,EAAE,CAAA;IAC1B,IAAI,SAAS,GAAG,CAAC,CAAA;IAEjB,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC5B,IAAI,CAAC,GAAG,CAAC,OAAO;YAAE,SAAQ;QAC1B,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,CAAA;QAChC,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAA;QAE3B,IAAI,SAAS,GAAG,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,MAAM,EAAE,CAAC;YACzD,MAAM,SAAS,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC,MAAM,CAAA;YACpD,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;gBACnB,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,KAAK,CAAC,CAAA;YACzD,CAAC;YACD,MAAK;QACN,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,GAAG,OAAO,EAAE,CAAC,CAAA;QACjC,SAAS,IAAI,MAAM,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAA;IAC5C,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;AAC1B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACzC,OAA4B,EAC5B,aAAwB,EACxB,QAAqB,EACrB,MAAwB;IAExB,MAAM,UAAU,GAAG,cAAc,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAA;IAErD,IAAI,OAAO,CAAC,SAAS,EAAE,IAAI,MAAM,CAAC,kBAAkB,EAAE,CAAC;QACtD,OAAO,UAAU,CAAA;IAClB,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;QAC7B,OAAO,UAAU,CAAA;IAClB,CAAC;IAED,MAAM,mBAAmB,GAAG,gBAAgB,CAAC,aAAa,EAAE,MAAM,CAAC,eAAe,CAAC,CAAA;IAEnF,IAAI,CAAC,mBAAmB,CAAC,IAAI,EAAE,EAAE,CAAC;QACjC,OAAO,UAAU,CAAA;IAClB,CAAC;IAED,MAAM,oBAAoB,GAAc;QACvC;YACC,IAAI,EAAE,QAAiB;YACvB,OAAO,EAAE,mBAAmB;SAC5B;QACD;YACC,IAAI,EAAE,MAAe;YACrB,OAAO,EAAE,0BAA0B,UAAU,kCAAkC,mBAAmB,EAAE;SACpG;KACD,CAAA;IAED,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC;QACpC,KAAK,EAAE,EAAE;QACT,QAAQ,EAAE,oBAAoB;QAC9B,SAAS,EAAE,MAAM,CAAC,wBAAwB;QAC1C,WAAW,EAAE,CAAC;KACd,CAAC,CAAA;IAEF,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,CAAA;IAE3D,IAAI,YAAY,KAAK,UAAU,EAAE,CAAC;QACjC,OAAO,UAAU,CAAA;IAClB,CAAC;IAED,OAAO,GAAG,UAAU,wCAAwC,YAAY,EAAE,CAAA;AAC3E,CAAC"}