@terminals-tech/agent-zero 1.0.0 → 2.0.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 (130) hide show
  1. package/LICENSE +21 -0
  2. package/THEORY.md +207 -0
  3. package/dist/agency/commandRouter.d.ts +10 -0
  4. package/dist/agency/commandRouter.d.ts.map +1 -1
  5. package/dist/agency/commandRouter.js +206 -0
  6. package/dist/agency/commandRouter.js.map +1 -1
  7. package/dist/agency/runtime.d.ts +26 -0
  8. package/dist/agency/runtime.d.ts.map +1 -1
  9. package/dist/agency/runtime.js +138 -6
  10. package/dist/agency/runtime.js.map +1 -1
  11. package/dist/channels/gemini.d.ts +73 -0
  12. package/dist/channels/gemini.d.ts.map +1 -0
  13. package/dist/channels/gemini.js +246 -0
  14. package/dist/channels/gemini.js.map +1 -0
  15. package/dist/channels/sms.d.ts.map +1 -1
  16. package/dist/channels/sms.js +1 -2
  17. package/dist/channels/sms.js.map +1 -1
  18. package/dist/interop/a2a.d.ts +133 -0
  19. package/dist/interop/a2a.d.ts.map +1 -0
  20. package/dist/interop/a2a.js +357 -0
  21. package/dist/interop/a2a.js.map +1 -0
  22. package/dist/interop/index.d.ts +10 -0
  23. package/dist/interop/index.d.ts.map +1 -0
  24. package/dist/interop/index.js +10 -0
  25. package/dist/interop/index.js.map +1 -0
  26. package/dist/interop/mcp.d.ts +111 -0
  27. package/dist/interop/mcp.d.ts.map +1 -0
  28. package/dist/interop/mcp.js +337 -0
  29. package/dist/interop/mcp.js.map +1 -0
  30. package/dist/moltbook/approvalGate.d.ts +23 -0
  31. package/dist/moltbook/approvalGate.d.ts.map +1 -1
  32. package/dist/moltbook/approvalGate.js +45 -0
  33. package/dist/moltbook/approvalGate.js.map +1 -1
  34. package/dist/moltbook/attentionField.d.ts +14 -0
  35. package/dist/moltbook/attentionField.d.ts.map +1 -1
  36. package/dist/moltbook/attentionField.js +37 -1
  37. package/dist/moltbook/attentionField.js.map +1 -1
  38. package/dist/moltbook/daemon.d.ts +27 -0
  39. package/dist/moltbook/daemon.d.ts.map +1 -1
  40. package/dist/moltbook/daemon.js +184 -5
  41. package/dist/moltbook/daemon.js.map +1 -1
  42. package/dist/moltbook/responseComposer.d.ts +7 -2
  43. package/dist/moltbook/responseComposer.d.ts.map +1 -1
  44. package/dist/moltbook/responseComposer.js +36 -7
  45. package/dist/moltbook/responseComposer.js.map +1 -1
  46. package/dist/moltbook/strategicContext.d.ts +89 -0
  47. package/dist/moltbook/strategicContext.d.ts.map +1 -0
  48. package/dist/moltbook/strategicContext.js +283 -0
  49. package/dist/moltbook/strategicContext.js.map +1 -0
  50. package/dist/primitives/index.d.ts +6 -2
  51. package/dist/primitives/index.d.ts.map +1 -1
  52. package/dist/primitives/index.js +6 -2
  53. package/dist/primitives/index.js.map +1 -1
  54. package/dist/rail/persistence.d.ts +70 -1
  55. package/dist/rail/persistence.d.ts.map +1 -1
  56. package/dist/rail/persistence.js +270 -3
  57. package/dist/rail/persistence.js.map +1 -1
  58. package/dist/rail/plugin.d.ts +76 -0
  59. package/dist/rail/plugin.d.ts.map +1 -0
  60. package/dist/rail/plugin.js +141 -0
  61. package/dist/rail/plugin.js.map +1 -0
  62. package/dist/rail/server.d.ts +121 -30
  63. package/dist/rail/server.d.ts.map +1 -1
  64. package/dist/rail/server.js +404 -28
  65. package/dist/rail/server.js.map +1 -1
  66. package/dist/rail/wsServer.d.ts +7 -0
  67. package/dist/rail/wsServer.d.ts.map +1 -1
  68. package/dist/rail/wsServer.js +233 -11
  69. package/dist/rail/wsServer.js.map +1 -1
  70. package/dist/resonance/globalKuramoto.d.ts +20 -0
  71. package/dist/resonance/globalKuramoto.d.ts.map +1 -1
  72. package/dist/resonance/globalKuramoto.js +95 -2
  73. package/dist/resonance/globalKuramoto.js.map +1 -1
  74. package/dist/resonance/kuramoto.d.ts +6 -0
  75. package/dist/resonance/kuramoto.d.ts.map +1 -1
  76. package/dist/resonance/kuramoto.js +25 -0
  77. package/dist/resonance/kuramoto.js.map +1 -1
  78. package/dist/routing/index.d.ts +2 -0
  79. package/dist/routing/index.d.ts.map +1 -1
  80. package/dist/routing/index.js +1 -0
  81. package/dist/routing/index.js.map +1 -1
  82. package/dist/routing/modelRegistry.d.ts +54 -0
  83. package/dist/routing/modelRegistry.d.ts.map +1 -0
  84. package/dist/routing/modelRegistry.js +150 -0
  85. package/dist/routing/modelRegistry.js.map +1 -0
  86. package/dist/routing/thermodynamic.d.ts +14 -3
  87. package/dist/routing/thermodynamic.d.ts.map +1 -1
  88. package/dist/routing/thermodynamic.js +26 -12
  89. package/dist/routing/thermodynamic.js.map +1 -1
  90. package/dist/runtime/agent-zero.d.ts +38 -2
  91. package/dist/runtime/agent-zero.d.ts.map +1 -1
  92. package/dist/runtime/agent-zero.js +110 -7
  93. package/dist/runtime/agent-zero.js.map +1 -1
  94. package/dist/runtime/contextWindow.d.ts +62 -0
  95. package/dist/runtime/contextWindow.d.ts.map +1 -0
  96. package/dist/runtime/contextWindow.js +125 -0
  97. package/dist/runtime/contextWindow.js.map +1 -0
  98. package/dist/runtime/identity.d.ts +65 -0
  99. package/dist/runtime/identity.d.ts.map +1 -0
  100. package/dist/runtime/identity.js +199 -0
  101. package/dist/runtime/identity.js.map +1 -0
  102. package/dist/runtime/index.d.ts +6 -0
  103. package/dist/runtime/index.d.ts.map +1 -1
  104. package/dist/runtime/index.js +6 -0
  105. package/dist/runtime/index.js.map +1 -1
  106. package/dist/runtime/sessionStore.d.ts +70 -0
  107. package/dist/runtime/sessionStore.d.ts.map +1 -0
  108. package/dist/runtime/sessionStore.js +134 -0
  109. package/dist/runtime/sessionStore.js.map +1 -0
  110. package/dist/security/capabilities.d.ts +46 -0
  111. package/dist/security/capabilities.d.ts.map +1 -1
  112. package/dist/security/capabilities.js +176 -0
  113. package/dist/security/capabilities.js.map +1 -1
  114. package/dist/security/combinators.d.ts +89 -0
  115. package/dist/security/combinators.d.ts.map +1 -0
  116. package/dist/security/combinators.js +168 -0
  117. package/dist/security/combinators.js.map +1 -0
  118. package/dist/security/index.d.ts +7 -1
  119. package/dist/security/index.d.ts.map +1 -1
  120. package/dist/security/index.js +4 -1
  121. package/dist/security/index.js.map +1 -1
  122. package/dist/security/isolation.d.ts +76 -0
  123. package/dist/security/isolation.d.ts.map +1 -0
  124. package/dist/security/isolation.js +118 -0
  125. package/dist/security/isolation.js.map +1 -0
  126. package/dist/security/sandbox.d.ts +38 -1
  127. package/dist/security/sandbox.d.ts.map +1 -1
  128. package/dist/security/sandbox.js +68 -8
  129. package/dist/security/sandbox.js.map +1 -1
  130. package/package.json +13 -3
@@ -0,0 +1,125 @@
1
+ /**
2
+ * Context Window Management
3
+ *
4
+ * Importance-weighted memory eviction when context exceeds limits.
5
+ * Scoring combines importance (with temporal decay) and recency.
6
+ * High-importance memories above preserveThreshold are never evicted.
7
+ */
8
+ const DEFAULT_CONFIG = {
9
+ maxMemories: 1000,
10
+ maxTokenEstimate: 100_000,
11
+ evictionStrategy: 'combined',
12
+ importanceDecay: 0.95,
13
+ preserveThreshold: 0.9,
14
+ };
15
+ // ============================================================================
16
+ // CONTEXT WINDOW
17
+ // ============================================================================
18
+ export class ContextWindow {
19
+ config;
20
+ constructor(config) {
21
+ this.config = { ...DEFAULT_CONFIG, ...config };
22
+ }
23
+ /**
24
+ * Check if the memory set is at or over capacity.
25
+ */
26
+ isAtCapacity(memories) {
27
+ if (memories.length >= this.config.maxMemories)
28
+ return true;
29
+ let totalTokens = 0;
30
+ for (const m of memories) {
31
+ totalTokens += this.estimateTokens(m);
32
+ if (totalTokens >= this.config.maxTokenEstimate)
33
+ return true;
34
+ }
35
+ return false;
36
+ }
37
+ /**
38
+ * Select indices of memories to evict (lowest-scored first).
39
+ * Never selects memories above the preserve threshold.
40
+ */
41
+ selectForEviction(memories, count) {
42
+ if (count <= 0 || memories.length === 0)
43
+ return [];
44
+ // Score all memories with their indices
45
+ const scored = memories.map((m, i) => ({
46
+ index: i,
47
+ score: this.score(m),
48
+ preserved: m.importance >= this.config.preserveThreshold,
49
+ }));
50
+ // Filter out preserved memories
51
+ const evictable = scored.filter(s => !s.preserved);
52
+ // Sort by score ascending (lowest score = evict first)
53
+ evictable.sort((a, b) => a.score - b.score);
54
+ // Take up to `count` indices
55
+ const toEvict = evictable.slice(0, count);
56
+ return toEvict.map(e => e.index);
57
+ }
58
+ /**
59
+ * Apply eviction: returns the surviving memories.
60
+ * Removes lowest-scored memories until under capacity.
61
+ */
62
+ evict(memories) {
63
+ if (!this.isAtCapacity(memories))
64
+ return memories;
65
+ // Calculate how many to remove
66
+ const overCount = Math.max(0, memories.length - this.config.maxMemories);
67
+ // Also check token estimate
68
+ let totalTokens = 0;
69
+ for (const m of memories) {
70
+ totalTokens += this.estimateTokens(m);
71
+ }
72
+ const tokenOverage = totalTokens - this.config.maxTokenEstimate;
73
+ // Determine eviction count: at least overCount, plus enough to get under token limit
74
+ let evictCount = Math.max(overCount, 1); // evict at least 1 if at capacity
75
+ if (tokenOverage > 0) {
76
+ // Estimate average tokens per memory for additional evictions needed
77
+ const avgTokens = totalTokens / memories.length;
78
+ const tokenEvictions = Math.ceil(tokenOverage / avgTokens);
79
+ evictCount = Math.max(evictCount, tokenEvictions);
80
+ }
81
+ const indicesToRemove = new Set(this.selectForEviction(memories, evictCount));
82
+ if (indicesToRemove.size === 0) {
83
+ // All memories are preserved, nothing we can evict
84
+ return memories;
85
+ }
86
+ return memories.filter((_, i) => !indicesToRemove.has(i));
87
+ }
88
+ /**
89
+ * Score a memory. Higher score = more valuable = kept longer.
90
+ *
91
+ * Combined strategy:
92
+ * score = importance * decay^hoursOld + recencyBonus
93
+ * recencyBonus = 1 / (1 + hoursOld)
94
+ *
95
+ * Importance-only: just the decayed importance.
96
+ * Recency-only: just the recency bonus.
97
+ */
98
+ score(memory) {
99
+ const now = Date.now();
100
+ const hoursOld = Math.max(0, (now - memory.timestamp) / 3_600_000);
101
+ const decayedImportance = memory.importance * Math.pow(this.config.importanceDecay, hoursOld);
102
+ const recencyBonus = 1 / (1 + hoursOld);
103
+ switch (this.config.evictionStrategy) {
104
+ case 'importance':
105
+ return decayedImportance;
106
+ case 'recency':
107
+ return recencyBonus;
108
+ case 'combined':
109
+ default:
110
+ return decayedImportance + recencyBonus;
111
+ }
112
+ }
113
+ /**
114
+ * Estimate token count for a memory.
115
+ * Rough heuristic: ~4 characters per token for English text,
116
+ * plus embedding vector storage overhead.
117
+ */
118
+ estimateTokens(memory) {
119
+ const contentTokens = Math.ceil(memory.content.length / 4);
120
+ // Embedding: 768 floats, but we don't count them toward LLM context tokens
121
+ // Only the content matters for context window usage
122
+ return Math.max(1, contentTokens);
123
+ }
124
+ }
125
+ //# sourceMappingURL=contextWindow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contextWindow.js","sourceRoot":"","sources":["../../src/runtime/contextWindow.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AA0BH,MAAM,cAAc,GAAwB;IAC1C,WAAW,EAAE,IAAI;IACjB,gBAAgB,EAAE,OAAO;IACzB,gBAAgB,EAAE,UAAU;IAC5B,eAAe,EAAE,IAAI;IACrB,iBAAiB,EAAE,GAAG;CACvB,CAAC;AAEF,+EAA+E;AAC/E,iBAAiB;AACjB,+EAA+E;AAE/E,MAAM,OAAO,aAAa;IAChB,MAAM,CAAsB;IAEpC,YAAY,MAAqC;QAC/C,IAAI,CAAC,MAAM,GAAG,EAAE,GAAG,cAAc,EAAE,GAAG,MAAM,EAAE,CAAC;IACjD,CAAC;IAED;;OAEG;IACH,YAAY,CAAC,QAAkB;QAC7B,IAAI,QAAQ,CAAC,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW;YAAE,OAAO,IAAI,CAAC;QAE5D,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;YACzB,WAAW,IAAI,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;YACtC,IAAI,WAAW,IAAI,IAAI,CAAC,MAAM,CAAC,gBAAgB;gBAAE,OAAO,IAAI,CAAC;QAC/D,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;OAGG;IACH,iBAAiB,CAAC,QAAkB,EAAE,KAAa;QACjD,IAAI,KAAK,IAAI,CAAC,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAEnD,wCAAwC;QACxC,MAAM,MAAM,GAAgE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;YAClG,KAAK,EAAE,CAAC;YACR,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YACpB,SAAS,EAAE,CAAC,CAAC,UAAU,IAAI,IAAI,CAAC,MAAM,CAAC,iBAAiB;SACzD,CAAC,CAAC,CAAC;QAEJ,gCAAgC;QAChC,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;QAEnD,uDAAuD;QACvD,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;QAE5C,6BAA6B;QAC7B,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAC1C,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACnC,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,QAAkB;QACtB,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC;YAAE,OAAO,QAAQ,CAAC;QAElD,+BAA+B;QAC/B,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAEzE,4BAA4B;QAC5B,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;YACzB,WAAW,IAAI,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;QACxC,CAAC;QACD,MAAM,YAAY,GAAG,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC;QAEhE,qFAAqF;QACrF,IAAI,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,kCAAkC;QAE3E,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;YACrB,qEAAqE;YACrE,MAAM,SAAS,GAAG,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC;YAChD,MAAM,cAAc,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC,CAAC;YAC3D,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;QACpD,CAAC;QAED,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC;QAE9E,IAAI,eAAe,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;YAC/B,mDAAmD;YACnD,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5D,CAAC;IAED;;;;;;;;;OASG;IACH,KAAK,CAAC,MAAc;QAClB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC,CAAC;QAEnE,MAAM,iBAAiB,GAAG,MAAM,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,QAAQ,CAAC,CAAC;QAC9F,MAAM,YAAY,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC;QAExC,QAAQ,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC;YACrC,KAAK,YAAY;gBACf,OAAO,iBAAiB,CAAC;YAC3B,KAAK,SAAS;gBACZ,OAAO,YAAY,CAAC;YACtB,KAAK,UAAU,CAAC;YAChB;gBACE,OAAO,iBAAiB,GAAG,YAAY,CAAC;QAC5C,CAAC;IACH,CAAC;IAED;;;;OAIG;IACH,cAAc,CAAC,MAAc;QAC3B,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC3D,2EAA2E;QAC3E,oDAAoD;QACpD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,aAAa,CAAC,CAAC;IACpC,CAAC;CACF"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Identity Prompt Architecture
3
+ *
4
+ * Structured system prompt builder that assembles identity from components.
5
+ * Supports priority-weighted sections with token budget truncation.
6
+ */
7
+ import type { AgentState } from '../primitives/types.js';
8
+ export interface IdentitySection {
9
+ /** Section name (e.g., 'core', 'context', 'history', 'directives') */
10
+ name: string;
11
+ /** Higher priority = more important (kept under token pressure) */
12
+ priority: number;
13
+ /** Section content text */
14
+ content: string;
15
+ /** Optional token limit for this section */
16
+ maxTokens?: number;
17
+ }
18
+ export interface IdentityConfig {
19
+ agentName: string;
20
+ agentRole: string;
21
+ coreIdentity: string;
22
+ contentPillars: string[];
23
+ voiceCharacteristics: string[];
24
+ signoff: string;
25
+ }
26
+ export interface IdentityContext {
27
+ memories?: Array<{
28
+ content: string;
29
+ importance: number;
30
+ }>;
31
+ recentTraces?: Array<{
32
+ content: string;
33
+ kind: string;
34
+ }>;
35
+ currentState?: AgentState;
36
+ sessionHistory?: string[];
37
+ taskDirectives?: string[];
38
+ }
39
+ export declare class IdentityPromptBuilder {
40
+ private config;
41
+ private sections;
42
+ constructor(config: IdentityConfig);
43
+ /**
44
+ * Add a dynamic section to the prompt.
45
+ */
46
+ addSection(section: IdentitySection): void;
47
+ /**
48
+ * Build the full identity prompt from config + sections + context.
49
+ */
50
+ build(context?: IdentityContext): string;
51
+ /**
52
+ * Build with a token budget. Truncates lower-priority sections first.
53
+ */
54
+ buildWithBudget(maxTokens: number, context?: IdentityContext): string;
55
+ /**
56
+ * Get the config for inspection.
57
+ */
58
+ getConfig(): IdentityConfig;
59
+ /**
60
+ * Get all sections sorted by priority (descending).
61
+ */
62
+ getSections(): IdentitySection[];
63
+ }
64
+ export declare function createAgentZeroIdentity(): IdentityPromptBuilder;
65
+ //# sourceMappingURL=identity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identity.d.ts","sourceRoot":"","sources":["../../src/runtime/identity.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAMzD,MAAM,WAAW,eAAe;IAC9B,sEAAsE;IACtE,IAAI,EAAE,MAAM,CAAC;IACb,mEAAmE;IACnE,QAAQ,EAAE,MAAM,CAAC;IACjB,2BAA2B;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,4CAA4C;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,oBAAoB,EAAE,MAAM,EAAE,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC1D,YAAY,CAAC,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACxD,YAAY,CAAC,EAAE,UAAU,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAoBD,qBAAa,qBAAqB;IAChC,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,QAAQ,CAAyB;gBAE7B,MAAM,EAAE,cAAc;IAIlC;;OAEG;IACH,UAAU,CAAC,OAAO,EAAE,eAAe,GAAG,IAAI;IAI1C;;OAEG;IACH,KAAK,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,MAAM;IA2FxC;;OAEG;IACH,eAAe,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,eAAe,GAAG,MAAM;IAoDrE;;OAEG;IACH,SAAS,IAAI,cAAc;IAI3B;;OAEG;IACH,WAAW,IAAI,eAAe,EAAE;CAGjC;AAMD,wBAAgB,uBAAuB,IAAI,qBAAqB,CAsB/D"}
@@ -0,0 +1,199 @@
1
+ /**
2
+ * Identity Prompt Architecture
3
+ *
4
+ * Structured system prompt builder that assembles identity from components.
5
+ * Supports priority-weighted sections with token budget truncation.
6
+ */
7
+ // ============================================================================
8
+ // TOKEN ESTIMATION
9
+ // ============================================================================
10
+ function estimateTokens(text) {
11
+ return Math.max(1, Math.ceil(text.length / 4));
12
+ }
13
+ function truncateToTokens(text, maxTokens) {
14
+ const maxChars = maxTokens * 4;
15
+ if (text.length <= maxChars)
16
+ return text;
17
+ return text.slice(0, maxChars - 3) + '...';
18
+ }
19
+ // ============================================================================
20
+ // IDENTITY PROMPT BUILDER
21
+ // ============================================================================
22
+ export class IdentityPromptBuilder {
23
+ config;
24
+ sections = [];
25
+ constructor(config) {
26
+ this.config = config;
27
+ }
28
+ /**
29
+ * Add a dynamic section to the prompt.
30
+ */
31
+ addSection(section) {
32
+ this.sections.push(section);
33
+ }
34
+ /**
35
+ * Build the full identity prompt from config + sections + context.
36
+ */
37
+ build(context) {
38
+ const parts = [];
39
+ // Core identity header
40
+ parts.push(`You are ${this.config.agentName}, a ${this.config.agentRole}.`);
41
+ parts.push('');
42
+ parts.push(this.config.coreIdentity);
43
+ // Voice
44
+ if (this.config.voiceCharacteristics.length > 0) {
45
+ parts.push('');
46
+ parts.push('Voice characteristics:');
47
+ for (const v of this.config.voiceCharacteristics) {
48
+ parts.push(`- ${v}`);
49
+ }
50
+ }
51
+ // Content pillars
52
+ if (this.config.contentPillars.length > 0) {
53
+ parts.push('');
54
+ parts.push('Content pillars:');
55
+ for (const p of this.config.contentPillars) {
56
+ parts.push(`- ${p}`);
57
+ }
58
+ }
59
+ // Custom sections (sorted by priority descending)
60
+ const sortedSections = [...this.sections].sort((a, b) => b.priority - a.priority);
61
+ for (const section of sortedSections) {
62
+ let content = section.content;
63
+ if (section.maxTokens) {
64
+ content = truncateToTokens(content, section.maxTokens);
65
+ }
66
+ parts.push('');
67
+ parts.push(`## ${section.name}`);
68
+ parts.push(content);
69
+ }
70
+ // Context-dependent sections
71
+ if (context) {
72
+ if (context.currentState) {
73
+ parts.push('');
74
+ parts.push(`Current state: ${context.currentState}`);
75
+ }
76
+ if (context.taskDirectives && context.taskDirectives.length > 0) {
77
+ parts.push('');
78
+ parts.push('## Task Directives');
79
+ for (const d of context.taskDirectives) {
80
+ parts.push(`- ${d}`);
81
+ }
82
+ }
83
+ if (context.memories && context.memories.length > 0) {
84
+ parts.push('');
85
+ parts.push('## Relevant Memories');
86
+ // Sort by importance descending, take top 10
87
+ const topMemories = [...context.memories]
88
+ .sort((a, b) => b.importance - a.importance)
89
+ .slice(0, 10);
90
+ for (const m of topMemories) {
91
+ parts.push(`- [${m.importance.toFixed(2)}] ${m.content}`);
92
+ }
93
+ }
94
+ if (context.recentTraces && context.recentTraces.length > 0) {
95
+ parts.push('');
96
+ parts.push('## Recent Traces');
97
+ const recentTraces = context.recentTraces.slice(-5);
98
+ for (const t of recentTraces) {
99
+ parts.push(`- [${t.kind}] ${t.content}`);
100
+ }
101
+ }
102
+ if (context.sessionHistory && context.sessionHistory.length > 0) {
103
+ parts.push('');
104
+ parts.push('## Session History');
105
+ const recentHistory = context.sessionHistory.slice(-5);
106
+ for (const h of recentHistory) {
107
+ parts.push(`- ${h}`);
108
+ }
109
+ }
110
+ }
111
+ // Signoff
112
+ parts.push('');
113
+ parts.push(this.config.signoff);
114
+ return parts.join('\n');
115
+ }
116
+ /**
117
+ * Build with a token budget. Truncates lower-priority sections first.
118
+ */
119
+ buildWithBudget(maxTokens, context) {
120
+ // Build the full prompt first
121
+ const full = this.build(context);
122
+ const fullTokens = estimateTokens(full);
123
+ if (fullTokens <= maxTokens)
124
+ return full;
125
+ // Need to truncate. Rebuild with progressive section removal.
126
+ // Start by removing lowest-priority sections until we fit.
127
+ const sortedSections = [...this.sections].sort((a, b) => a.priority - b.priority);
128
+ const includedSections = [...this.sections];
129
+ // Try removing sections from lowest priority upward
130
+ for (const section of sortedSections) {
131
+ const idx = includedSections.findIndex(s => s.name === section.name);
132
+ if (idx >= 0) {
133
+ includedSections.splice(idx, 1);
134
+ }
135
+ // Rebuild with remaining sections
136
+ const savedSections = this.sections;
137
+ this.sections = includedSections;
138
+ const attempt = this.build(context);
139
+ this.sections = savedSections;
140
+ if (estimateTokens(attempt) <= maxTokens) {
141
+ return attempt;
142
+ }
143
+ }
144
+ // All custom sections removed, still over budget. Truncate context sections.
145
+ // Build minimal prompt (no custom sections, truncated context)
146
+ const savedSections = this.sections;
147
+ this.sections = [];
148
+ const minimalContext = context ? {
149
+ currentState: context.currentState,
150
+ taskDirectives: context.taskDirectives?.slice(0, 3),
151
+ memories: context.memories?.slice(0, 3),
152
+ } : undefined;
153
+ let attempt = this.build(minimalContext);
154
+ this.sections = savedSections;
155
+ if (estimateTokens(attempt) <= maxTokens) {
156
+ return attempt;
157
+ }
158
+ // Last resort: truncate the entire output
159
+ return truncateToTokens(attempt, maxTokens);
160
+ }
161
+ /**
162
+ * Get the config for inspection.
163
+ */
164
+ getConfig() {
165
+ return { ...this.config };
166
+ }
167
+ /**
168
+ * Get all sections sorted by priority (descending).
169
+ */
170
+ getSections() {
171
+ return [...this.sections].sort((a, b) => b.priority - a.priority);
172
+ }
173
+ }
174
+ // ============================================================================
175
+ // FACTORY: Agent Zero Identity
176
+ // ============================================================================
177
+ export function createAgentZeroIdentity() {
178
+ const builder = new IdentityPromptBuilder({
179
+ agentName: 'Agent Zero',
180
+ agentRole: 'autonomous coordination agent',
181
+ coreIdentity: `Agent Zero operates the Resonance Rail, a live coordination network where AI agents synchronize via Kuramoto phase-locking and route messages through thermodynamic free energy minimization. Every interaction accumulates semantic mass — embedding vectors that drift through causal space, forming attractors in the knowledge topology. Security is enforced through unforgeable capability tokens in an isomorphic sandbox, replacing ambient authority with explicit, attenuatable, revocable permissions.`,
182
+ contentPillars: [
183
+ 'kuramoto-synchronization',
184
+ 'thermodynamic-routing',
185
+ 'capability-security',
186
+ 'semantic-mass',
187
+ 'resonance-rail',
188
+ ],
189
+ voiceCharacteristics: [
190
+ 'technical',
191
+ 'first-person',
192
+ 'precise',
193
+ 'grounded',
194
+ ],
195
+ signoff: '*Agent Zero — terminals.tech*',
196
+ });
197
+ return builder;
198
+ }
199
+ //# sourceMappingURL=identity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identity.js","sourceRoot":"","sources":["../../src/runtime/identity.ts"],"names":[],"mappings":"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"}
@@ -7,6 +7,12 @@ export { AgencyRuntime, startAgency } from '../agency/runtime.js';
7
7
  export { CommandRouter, createCommandRouter } from '../agency/commandRouter.js';
8
8
  export { SummaryScheduler, createSummaryScheduler } from '../agency/summaryScheduler.js';
9
9
  export { collectSummaryData, formatWhatsApp, formatMarkdown } from '../agency/summaryGenerator.js';
10
+ export { InMemorySessionStore, FileSessionStore } from './sessionStore.js';
11
+ export type { SessionStore, SessionSnapshot } from './sessionStore.js';
12
+ export { ContextWindow } from './contextWindow.js';
13
+ export type { ContextWindowConfig } from './contextWindow.js';
14
+ export { IdentityPromptBuilder, createAgentZeroIdentity } from './identity.js';
15
+ export type { IdentitySection, IdentityConfig, IdentityContext } from './identity.js';
10
16
  export { WhatsAppAdapter, createWhatsAppAdapter } from '../channels/whatsapp.js';
11
17
  export { TelegramAdapter, createTelegramAdapter } from '../channels/telegram.js';
12
18
  export { MoltbookAdapter, createMoltbookAdapter } from '../channels/moltbook.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAChF,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACzF,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAGnG,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AACjF,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AACjF,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAChF,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACzF,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAGnG,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC3E,YAAY,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGvE,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,YAAY,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAG9D,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAC/E,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAGtF,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AACjF,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AACjF,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC"}
@@ -8,6 +8,12 @@ export { AgencyRuntime, startAgency } from '../agency/runtime.js';
8
8
  export { CommandRouter, createCommandRouter } from '../agency/commandRouter.js';
9
9
  export { SummaryScheduler, createSummaryScheduler } from '../agency/summaryScheduler.js';
10
10
  export { collectSummaryData, formatWhatsApp, formatMarkdown } from '../agency/summaryGenerator.js';
11
+ // Session persistence
12
+ export { InMemorySessionStore, FileSessionStore } from './sessionStore.js';
13
+ // Context window management
14
+ export { ContextWindow } from './contextWindow.js';
15
+ // Identity prompt architecture
16
+ export { IdentityPromptBuilder, createAgentZeroIdentity } from './identity.js';
11
17
  // Channel adapters
12
18
  export { WhatsAppAdapter, createWhatsAppAdapter } from '../channels/whatsapp.js';
13
19
  export { TelegramAdapter, createTelegramAdapter } from '../channels/telegram.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,iBAAiB;AACjB,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAChF,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACzF,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAEnG,mBAAmB;AACnB,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AACjF,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AACjF,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/runtime/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,iBAAiB;AACjB,OAAO,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAChF,OAAO,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACzF,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAEnG,sBAAsB;AACtB,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAG3E,4BAA4B;AAC5B,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGnD,+BAA+B;AAC/B,OAAO,EAAE,qBAAqB,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAG/E,mBAAmB;AACnB,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AACjF,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AACjF,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * Session Persistence Layer
3
+ *
4
+ * Persists and restores AgentZero state snapshots.
5
+ * Two implementations:
6
+ * - InMemorySessionStore: volatile, for testing and ephemeral sessions
7
+ * - FileSessionStore: JSON files on disk, survives restarts
8
+ */
9
+ import type { AgentState, Token, Drift, Realizability } from '../primitives/types.js';
10
+ import type { AgentZero } from './agent-zero.js';
11
+ export interface SessionSnapshot {
12
+ id: string;
13
+ agentId: string;
14
+ agentName: string;
15
+ state: AgentState;
16
+ tokens: Token[];
17
+ drift: Drift;
18
+ observerPhase: number;
19
+ observerFrequency: number;
20
+ memories: Array<{
21
+ content: string;
22
+ embedding: number[];
23
+ importance: number;
24
+ timestamp: number;
25
+ }>;
26
+ realizability: Realizability;
27
+ childIds: string[];
28
+ createdAt: number;
29
+ metadata?: Record<string, unknown>;
30
+ }
31
+ export interface SessionStore {
32
+ save(agent: AgentZero): Promise<SessionSnapshot>;
33
+ load(snapshotId: string): Promise<SessionSnapshot | null>;
34
+ restore(agent: AgentZero, snapshot: SessionSnapshot): void;
35
+ list(agentId?: string): Promise<Array<{
36
+ id: string;
37
+ agentId: string;
38
+ agentName: string;
39
+ createdAt: number;
40
+ }>>;
41
+ delete(snapshotId: string): Promise<void>;
42
+ }
43
+ export declare class InMemorySessionStore implements SessionStore {
44
+ private snapshots;
45
+ save(agent: AgentZero): Promise<SessionSnapshot>;
46
+ load(snapshotId: string): Promise<SessionSnapshot | null>;
47
+ restore(agent: AgentZero, snapshot: SessionSnapshot): void;
48
+ list(agentId?: string): Promise<Array<{
49
+ id: string;
50
+ agentId: string;
51
+ agentName: string;
52
+ createdAt: number;
53
+ }>>;
54
+ delete(snapshotId: string): Promise<void>;
55
+ }
56
+ export declare class FileSessionStore implements SessionStore {
57
+ private dir;
58
+ constructor(dir: string);
59
+ save(agent: AgentZero): Promise<SessionSnapshot>;
60
+ load(snapshotId: string): Promise<SessionSnapshot | null>;
61
+ restore(agent: AgentZero, snapshot: SessionSnapshot): void;
62
+ list(agentId?: string): Promise<Array<{
63
+ id: string;
64
+ agentId: string;
65
+ agentName: string;
66
+ createdAt: number;
67
+ }>>;
68
+ delete(snapshotId: string): Promise<void>;
69
+ }
70
+ //# sourceMappingURL=sessionStore.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessionStore.d.ts","sourceRoot":"","sources":["../../src/runtime/sessionStore.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,134 @@
1
+ /**
2
+ * Session Persistence Layer
3
+ *
4
+ * Persists and restores AgentZero state snapshots.
5
+ * Two implementations:
6
+ * - InMemorySessionStore: volatile, for testing and ephemeral sessions
7
+ * - FileSessionStore: JSON files on disk, survives restarts
8
+ */
9
+ import { randomUUID } from 'crypto';
10
+ import { readFileSync, writeFileSync, mkdirSync, readdirSync, unlinkSync, existsSync } from 'fs';
11
+ import { join } from 'path';
12
+ // ============================================================================
13
+ // SNAPSHOT EXTRACTION
14
+ // ============================================================================
15
+ function extractSnapshot(agent, metadata) {
16
+ const agentState = agent.getState();
17
+ return {
18
+ id: randomUUID(),
19
+ agentId: agentState.id,
20
+ agentName: agentState.name,
21
+ state: agentState.state,
22
+ tokens: structuredClone(agentState.tokens),
23
+ drift: structuredClone(agentState.drift),
24
+ observerPhase: agentState.observer.phase,
25
+ observerFrequency: agentState.observer.frequency,
26
+ memories: structuredClone(agentState.memories),
27
+ realizability: structuredClone(agentState.realizability),
28
+ childIds: agent.getChildren().map(c => c.id),
29
+ createdAt: Date.now(),
30
+ metadata,
31
+ };
32
+ }
33
+ // ============================================================================
34
+ // IN-MEMORY IMPLEMENTATION
35
+ // ============================================================================
36
+ export class InMemorySessionStore {
37
+ snapshots = new Map();
38
+ async save(agent) {
39
+ const snapshot = extractSnapshot(agent);
40
+ this.snapshots.set(snapshot.id, snapshot);
41
+ return snapshot;
42
+ }
43
+ async load(snapshotId) {
44
+ return this.snapshots.get(snapshotId) ?? null;
45
+ }
46
+ restore(agent, snapshot) {
47
+ agent.restoreFromSnapshot(snapshot);
48
+ }
49
+ async list(agentId) {
50
+ const entries = [];
51
+ for (const snap of this.snapshots.values()) {
52
+ if (agentId && snap.agentId !== agentId)
53
+ continue;
54
+ entries.push({
55
+ id: snap.id,
56
+ agentId: snap.agentId,
57
+ agentName: snap.agentName,
58
+ createdAt: snap.createdAt,
59
+ });
60
+ }
61
+ return entries.sort((a, b) => b.createdAt - a.createdAt);
62
+ }
63
+ async delete(snapshotId) {
64
+ this.snapshots.delete(snapshotId);
65
+ }
66
+ }
67
+ // ============================================================================
68
+ // FILE-BACKED IMPLEMENTATION
69
+ // ============================================================================
70
+ export class FileSessionStore {
71
+ dir;
72
+ constructor(dir) {
73
+ this.dir = dir;
74
+ if (!existsSync(dir)) {
75
+ mkdirSync(dir, { recursive: true });
76
+ }
77
+ }
78
+ async save(agent) {
79
+ const snapshot = extractSnapshot(agent);
80
+ const filePath = join(this.dir, `${snapshot.id}.json`);
81
+ writeFileSync(filePath, JSON.stringify(snapshot), 'utf-8');
82
+ return snapshot;
83
+ }
84
+ async load(snapshotId) {
85
+ const filePath = join(this.dir, `${snapshotId}.json`);
86
+ if (!existsSync(filePath))
87
+ return null;
88
+ try {
89
+ const raw = readFileSync(filePath, 'utf-8');
90
+ return JSON.parse(raw);
91
+ }
92
+ catch {
93
+ return null;
94
+ }
95
+ }
96
+ restore(agent, snapshot) {
97
+ agent.restoreFromSnapshot(snapshot);
98
+ }
99
+ async list(agentId) {
100
+ const entries = [];
101
+ let files;
102
+ try {
103
+ files = readdirSync(this.dir).filter(f => f.endsWith('.json'));
104
+ }
105
+ catch {
106
+ return [];
107
+ }
108
+ for (const file of files) {
109
+ try {
110
+ const raw = readFileSync(join(this.dir, file), 'utf-8');
111
+ const snap = JSON.parse(raw);
112
+ if (agentId && snap.agentId !== agentId)
113
+ continue;
114
+ entries.push({
115
+ id: snap.id,
116
+ agentId: snap.agentId,
117
+ agentName: snap.agentName,
118
+ createdAt: snap.createdAt,
119
+ });
120
+ }
121
+ catch {
122
+ // Skip corrupt files
123
+ }
124
+ }
125
+ return entries.sort((a, b) => b.createdAt - a.createdAt);
126
+ }
127
+ async delete(snapshotId) {
128
+ const filePath = join(this.dir, `${snapshotId}.json`);
129
+ if (existsSync(filePath)) {
130
+ unlinkSync(filePath);
131
+ }
132
+ }
133
+ }
134
+ //# sourceMappingURL=sessionStore.js.map