dino-spec 17.4.2 → 17.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 (195) hide show
  1. package/dist/commands/init.d.ts.map +1 -1
  2. package/dist/commands/init.js +10 -0
  3. package/dist/commands/init.js.map +1 -1
  4. package/dist/core/agents/__tests__/confidence-gate.test.d.ts +5 -0
  5. package/dist/core/agents/__tests__/confidence-gate.test.d.ts.map +1 -0
  6. package/dist/core/agents/__tests__/confidence-gate.test.js +329 -0
  7. package/dist/core/agents/__tests__/confidence-gate.test.js.map +1 -0
  8. package/dist/core/agents/__tests__/gap-detector.test.d.ts +5 -0
  9. package/dist/core/agents/__tests__/gap-detector.test.d.ts.map +1 -0
  10. package/dist/core/agents/__tests__/gap-detector.test.js +609 -0
  11. package/dist/core/agents/__tests__/gap-detector.test.js.map +1 -0
  12. package/dist/core/agents/__tests__/learning-loop.test.d.ts +5 -0
  13. package/dist/core/agents/__tests__/learning-loop.test.d.ts.map +1 -0
  14. package/dist/core/agents/__tests__/learning-loop.test.js +663 -0
  15. package/dist/core/agents/__tests__/learning-loop.test.js.map +1 -0
  16. package/dist/core/agents/__tests__/parallel-executor.test.d.ts +5 -0
  17. package/dist/core/agents/__tests__/parallel-executor.test.d.ts.map +1 -0
  18. package/dist/core/agents/__tests__/parallel-executor.test.js +610 -0
  19. package/dist/core/agents/__tests__/parallel-executor.test.js.map +1 -0
  20. package/dist/core/agents/__tests__/research-validator.test.js +5 -5
  21. package/dist/core/agents/__tests__/research-validator.test.js.map +1 -1
  22. package/dist/core/agents/__tests__/skill-creator.test.d.ts +5 -0
  23. package/dist/core/agents/__tests__/skill-creator.test.d.ts.map +1 -0
  24. package/dist/core/agents/__tests__/skill-creator.test.js +443 -0
  25. package/dist/core/agents/__tests__/skill-creator.test.js.map +1 -0
  26. package/dist/core/agents/__tests__/state-persistence.test.d.ts +2 -0
  27. package/dist/core/agents/__tests__/state-persistence.test.d.ts.map +1 -0
  28. package/dist/core/agents/__tests__/state-persistence.test.js +270 -0
  29. package/dist/core/agents/__tests__/state-persistence.test.js.map +1 -0
  30. package/dist/core/agents/__tests__/validation-cache.test.d.ts +2 -0
  31. package/dist/core/agents/__tests__/validation-cache.test.d.ts.map +1 -0
  32. package/dist/core/agents/__tests__/validation-cache.test.js +181 -0
  33. package/dist/core/agents/__tests__/validation-cache.test.js.map +1 -0
  34. package/dist/core/agents/blackboard.d.ts +22 -3
  35. package/dist/core/agents/blackboard.d.ts.map +1 -1
  36. package/dist/core/agents/blackboard.js +52 -2
  37. package/dist/core/agents/blackboard.js.map +1 -1
  38. package/dist/core/agents/circuit-breaker.d.ts +79 -1
  39. package/dist/core/agents/circuit-breaker.d.ts.map +1 -1
  40. package/dist/core/agents/circuit-breaker.js +175 -1
  41. package/dist/core/agents/circuit-breaker.js.map +1 -1
  42. package/dist/core/agents/clarification-phase.d.ts +128 -0
  43. package/dist/core/agents/clarification-phase.d.ts.map +1 -0
  44. package/dist/core/agents/clarification-phase.js +375 -0
  45. package/dist/core/agents/clarification-phase.js.map +1 -0
  46. package/dist/core/agents/confidence-gate.d.ts +116 -3
  47. package/dist/core/agents/confidence-gate.d.ts.map +1 -1
  48. package/dist/core/agents/confidence-gate.js +363 -3
  49. package/dist/core/agents/confidence-gate.js.map +1 -1
  50. package/dist/core/agents/correction-tracker.d.ts +197 -0
  51. package/dist/core/agents/correction-tracker.d.ts.map +1 -0
  52. package/dist/core/agents/correction-tracker.js +366 -0
  53. package/dist/core/agents/correction-tracker.js.map +1 -0
  54. package/dist/core/agents/dependency-graph.d.ts +193 -0
  55. package/dist/core/agents/dependency-graph.d.ts.map +1 -0
  56. package/dist/core/agents/dependency-graph.js +462 -0
  57. package/dist/core/agents/dependency-graph.js.map +1 -0
  58. package/dist/core/agents/gap-detector.d.ts +277 -0
  59. package/dist/core/agents/gap-detector.d.ts.map +1 -0
  60. package/dist/core/agents/gap-detector.js +540 -0
  61. package/dist/core/agents/gap-detector.js.map +1 -0
  62. package/dist/core/agents/index.d.ts +14 -1
  63. package/dist/core/agents/index.d.ts.map +1 -1
  64. package/dist/core/agents/index.js +26 -1
  65. package/dist/core/agents/index.js.map +1 -1
  66. package/dist/core/agents/message-protocol.d.ts +13 -2
  67. package/dist/core/agents/message-protocol.d.ts.map +1 -1
  68. package/dist/core/agents/message-protocol.js +20 -1
  69. package/dist/core/agents/message-protocol.js.map +1 -1
  70. package/dist/core/agents/parallel-executor.d.ts +182 -0
  71. package/dist/core/agents/parallel-executor.d.ts.map +1 -0
  72. package/dist/core/agents/parallel-executor.js +474 -0
  73. package/dist/core/agents/parallel-executor.js.map +1 -0
  74. package/dist/core/agents/pattern-detector.d.ts +157 -0
  75. package/dist/core/agents/pattern-detector.d.ts.map +1 -0
  76. package/dist/core/agents/pattern-detector.js +370 -0
  77. package/dist/core/agents/pattern-detector.js.map +1 -0
  78. package/dist/core/agents/registry-client.d.ts +6 -0
  79. package/dist/core/agents/registry-client.d.ts.map +1 -1
  80. package/dist/core/agents/registry-client.js +3 -0
  81. package/dist/core/agents/registry-client.js.map +1 -1
  82. package/dist/core/agents/research-phase.d.ts +114 -0
  83. package/dist/core/agents/research-phase.d.ts.map +1 -0
  84. package/dist/core/agents/research-phase.js +355 -0
  85. package/dist/core/agents/research-phase.js.map +1 -0
  86. package/dist/core/agents/research-validator.d.ts +13 -2
  87. package/dist/core/agents/research-validator.d.ts.map +1 -1
  88. package/dist/core/agents/research-validator.js +63 -31
  89. package/dist/core/agents/research-validator.js.map +1 -1
  90. package/dist/core/agents/skill-creator.d.ts +174 -0
  91. package/dist/core/agents/skill-creator.d.ts.map +1 -0
  92. package/dist/core/agents/skill-creator.js +570 -0
  93. package/dist/core/agents/skill-creator.js.map +1 -0
  94. package/dist/core/agents/state-persistence.d.ts +184 -0
  95. package/dist/core/agents/state-persistence.d.ts.map +1 -0
  96. package/dist/core/agents/state-persistence.js +394 -0
  97. package/dist/core/agents/state-persistence.js.map +1 -0
  98. package/dist/core/agents/validation-cache.d.ts +122 -0
  99. package/dist/core/agents/validation-cache.d.ts.map +1 -0
  100. package/dist/core/agents/validation-cache.js +280 -0
  101. package/dist/core/agents/validation-cache.js.map +1 -0
  102. package/dist/core/agents/validators/__tests__/validators.test.d.ts +5 -0
  103. package/dist/core/agents/validators/__tests__/validators.test.d.ts.map +1 -0
  104. package/dist/core/agents/validators/__tests__/validators.test.js +321 -0
  105. package/dist/core/agents/validators/__tests__/validators.test.js.map +1 -0
  106. package/dist/core/agents/validators/base-validator.d.ts +191 -0
  107. package/dist/core/agents/validators/base-validator.d.ts.map +1 -0
  108. package/dist/core/agents/validators/base-validator.js +192 -0
  109. package/dist/core/agents/validators/base-validator.js.map +1 -0
  110. package/dist/core/agents/validators/index.d.ts +7 -0
  111. package/dist/core/agents/validators/index.d.ts.map +1 -0
  112. package/dist/core/agents/validators/index.js +7 -0
  113. package/dist/core/agents/validators/index.js.map +1 -0
  114. package/dist/core/agents/validators/npm-validator.d.ts +50 -0
  115. package/dist/core/agents/validators/npm-validator.d.ts.map +1 -0
  116. package/dist/core/agents/validators/npm-validator.js +211 -0
  117. package/dist/core/agents/validators/npm-validator.js.map +1 -0
  118. package/dist/core/agents/validators/pip-validator.d.ts +49 -0
  119. package/dist/core/agents/validators/pip-validator.d.ts.map +1 -0
  120. package/dist/core/agents/validators/pip-validator.js +191 -0
  121. package/dist/core/agents/validators/pip-validator.js.map +1 -0
  122. package/dist/core/agents/validators/validator-registry.d.ts +122 -0
  123. package/dist/core/agents/validators/validator-registry.d.ts.map +1 -0
  124. package/dist/core/agents/validators/validator-registry.js +321 -0
  125. package/dist/core/agents/validators/validator-registry.js.map +1 -0
  126. package/dist/core/context-repl/types.d.ts +4 -4
  127. package/dist/core/memory/index.d.ts +1 -0
  128. package/dist/core/memory/index.d.ts.map +1 -1
  129. package/dist/core/memory/index.js +2 -0
  130. package/dist/core/memory/index.js.map +1 -1
  131. package/dist/core/memory/learning-store.d.ts +222 -0
  132. package/dist/core/memory/learning-store.d.ts.map +1 -0
  133. package/dist/core/memory/learning-store.js +477 -0
  134. package/dist/core/memory/learning-store.js.map +1 -0
  135. package/dist/core/spec-analyzer/__tests__/ambiguity-detector.test.d.ts +5 -0
  136. package/dist/core/spec-analyzer/__tests__/ambiguity-detector.test.d.ts.map +1 -0
  137. package/dist/core/spec-analyzer/__tests__/ambiguity-detector.test.js +401 -0
  138. package/dist/core/spec-analyzer/__tests__/ambiguity-detector.test.js.map +1 -0
  139. package/dist/core/spec-analyzer/ambiguity-detector.d.ts +99 -0
  140. package/dist/core/spec-analyzer/ambiguity-detector.d.ts.map +1 -0
  141. package/dist/core/spec-analyzer/ambiguity-detector.js +250 -0
  142. package/dist/core/spec-analyzer/ambiguity-detector.js.map +1 -0
  143. package/dist/core/spec-analyzer/clarification-generator.d.ts +76 -0
  144. package/dist/core/spec-analyzer/clarification-generator.d.ts.map +1 -0
  145. package/dist/core/spec-analyzer/clarification-generator.js +257 -0
  146. package/dist/core/spec-analyzer/clarification-generator.js.map +1 -0
  147. package/dist/core/spec-analyzer/index.d.ts +10 -1
  148. package/dist/core/spec-analyzer/index.d.ts.map +1 -1
  149. package/dist/core/spec-analyzer/index.js +13 -1
  150. package/dist/core/spec-analyzer/index.js.map +1 -1
  151. package/dist/core/spec-analyzer/patterns.d.ts +73 -0
  152. package/dist/core/spec-analyzer/patterns.d.ts.map +1 -0
  153. package/dist/core/spec-analyzer/patterns.js +412 -0
  154. package/dist/core/spec-analyzer/patterns.js.map +1 -0
  155. package/dist/hooks/__tests__/dynamic-generator.test.d.ts +5 -0
  156. package/dist/hooks/__tests__/dynamic-generator.test.d.ts.map +1 -0
  157. package/dist/hooks/__tests__/dynamic-generator.test.js +425 -0
  158. package/dist/hooks/__tests__/dynamic-generator.test.js.map +1 -0
  159. package/dist/hooks/__tests__/hook-agent-bridge.test.d.ts +5 -0
  160. package/dist/hooks/__tests__/hook-agent-bridge.test.d.ts.map +1 -0
  161. package/dist/hooks/__tests__/hook-agent-bridge.test.js +315 -0
  162. package/dist/hooks/__tests__/hook-agent-bridge.test.js.map +1 -0
  163. package/dist/hooks/dynamic-generator.d.ts +158 -0
  164. package/dist/hooks/dynamic-generator.d.ts.map +1 -0
  165. package/dist/hooks/dynamic-generator.js +448 -0
  166. package/dist/hooks/dynamic-generator.js.map +1 -0
  167. package/dist/hooks/hook-agent-bridge.d.ts +252 -0
  168. package/dist/hooks/hook-agent-bridge.d.ts.map +1 -0
  169. package/dist/hooks/hook-agent-bridge.js +489 -0
  170. package/dist/hooks/hook-agent-bridge.js.map +1 -0
  171. package/dist/hooks/index.d.ts +3 -1
  172. package/dist/hooks/index.d.ts.map +1 -1
  173. package/dist/hooks/index.js +5 -1
  174. package/dist/hooks/index.js.map +1 -1
  175. package/dist/mcp/tool-catalog.d.ts.map +1 -1
  176. package/dist/mcp/tool-catalog.js +47 -0
  177. package/dist/mcp/tool-catalog.js.map +1 -1
  178. package/dist/mcp/tool-tiers.d.ts.map +1 -1
  179. package/dist/mcp/tool-tiers.js +4 -0
  180. package/dist/mcp/tool-tiers.js.map +1 -1
  181. package/dist/mcp/tools/index.d.ts +2 -1
  182. package/dist/mcp/tools/index.d.ts.map +1 -1
  183. package/dist/mcp/tools/index.js +15 -1
  184. package/dist/mcp/tools/index.js.map +1 -1
  185. package/dist/mcp/tools/learning-store.d.ts +30 -0
  186. package/dist/mcp/tools/learning-store.d.ts.map +1 -0
  187. package/dist/mcp/tools/learning-store.js +286 -0
  188. package/dist/mcp/tools/learning-store.js.map +1 -0
  189. package/dist/rules/index.d.ts.map +1 -1
  190. package/dist/rules/index.js +2 -47
  191. package/dist/rules/index.js.map +1 -1
  192. package/dist/skills/index.d.ts.map +1 -1
  193. package/dist/skills/index.js +159 -38
  194. package/dist/skills/index.js.map +1 -1
  195. package/package.json +1 -1
@@ -0,0 +1,184 @@
1
+ /**
2
+ * State Persistence - Agent State Persistence Module
3
+ *
4
+ * Provides persistence for agent state across sessions:
5
+ * - Message history persisted to `.dino/agent-state/messages.jsonl`
6
+ * - Blackboard claims persisted to `.dino/agent-state/claims.json`
7
+ * - Automatic loading on session start
8
+ * - Stale claim cleanup (> 1 hour)
9
+ * - Compression for message history (keep last 1000, archive older)
10
+ */
11
+ import type { CachedContent, ResourceClaim } from './blackboard.js';
12
+ import type { AgentMessage } from './message-protocol.js';
13
+ /**
14
+ * Persisted state structure
15
+ */
16
+ export interface PersistedState {
17
+ /** Version for migration support */
18
+ version: number;
19
+ /** Last persisted timestamp */
20
+ lastSaved: string;
21
+ /** Blackboard claims */
22
+ claims: ResourceClaim[];
23
+ /** Shared state key-value pairs */
24
+ sharedState: Record<string, unknown>;
25
+ /** Cached content entries */
26
+ cachedContent: CachedContent[];
27
+ }
28
+ /**
29
+ * Message history entry (JSONL format)
30
+ */
31
+ export interface MessageHistoryEntry {
32
+ /** Message data */
33
+ message: AgentMessage;
34
+ /** When it was persisted */
35
+ persistedAt: string;
36
+ }
37
+ /**
38
+ * Persistence configuration
39
+ */
40
+ export interface PersistenceConfig {
41
+ /** Base directory for state files */
42
+ baseDir: string;
43
+ /** Max messages to keep in active history */
44
+ maxActiveMessages: number;
45
+ /** Max age for claims in milliseconds (default: 1 hour) */
46
+ maxClaimAgeMs: number;
47
+ /** Auto-save interval in milliseconds (0 = disabled) */
48
+ autoSaveIntervalMs: number;
49
+ /** Enable compression for archived messages */
50
+ enableArchiveCompression: boolean;
51
+ }
52
+ /**
53
+ * Default persistence configuration
54
+ */
55
+ export declare const DEFAULT_PERSISTENCE_CONFIG: PersistenceConfig;
56
+ /**
57
+ * State persistence manager for agent coordination
58
+ */
59
+ export declare class StatePersistence {
60
+ private config;
61
+ private autoSaveTimer;
62
+ private isDirty;
63
+ private messageBuffer;
64
+ constructor(config?: Partial<PersistenceConfig>);
65
+ /**
66
+ * Get path to claims file
67
+ */
68
+ get claimsPath(): string;
69
+ /**
70
+ * Get path to messages file
71
+ */
72
+ get messagesPath(): string;
73
+ /**
74
+ * Get path to archived messages
75
+ */
76
+ get archivePath(): string;
77
+ /**
78
+ * Get path to shared state file
79
+ */
80
+ get statePath(): string;
81
+ /**
82
+ * Ensure state directory exists
83
+ */
84
+ private ensureDirectoryExists;
85
+ /**
86
+ * Load claims from disk
87
+ */
88
+ loadClaims(): ResourceClaim[];
89
+ /**
90
+ * Save claims to disk
91
+ */
92
+ saveClaims(claims: ResourceClaim[]): void;
93
+ /**
94
+ * Clean up stale claims (> 1 hour old)
95
+ */
96
+ cleanupStaleClaims(claims: ResourceClaim[]): ResourceClaim[];
97
+ /**
98
+ * Load message history from disk
99
+ */
100
+ loadMessageHistory(): AgentMessage[];
101
+ /**
102
+ * Append message to history
103
+ */
104
+ appendMessage(message: AgentMessage): void;
105
+ /**
106
+ * Flush message buffer to disk
107
+ */
108
+ flushMessages(): void;
109
+ /**
110
+ * Compress message history if it exceeds max size
111
+ */
112
+ private compressHistoryIfNeeded;
113
+ /**
114
+ * Save full message history (for bulk operations)
115
+ */
116
+ saveMessageHistory(messages: AgentMessage[]): void;
117
+ /**
118
+ * Load shared state from disk
119
+ */
120
+ loadSharedState(): Map<string, unknown>;
121
+ /**
122
+ * Save shared state to disk
123
+ */
124
+ saveSharedState(state: Map<string, unknown>): void;
125
+ /**
126
+ * Load all persisted state
127
+ */
128
+ loadAll(): {
129
+ claims: ResourceClaim[];
130
+ messages: AgentMessage[];
131
+ sharedState: Map<string, unknown>;
132
+ };
133
+ /**
134
+ * Save all state to disk
135
+ */
136
+ saveAll(claims: ResourceClaim[], messages: AgentMessage[], sharedState: Map<string, unknown>): void;
137
+ /**
138
+ * Start auto-save timer
139
+ */
140
+ startAutoSave(getClaimsCallback: () => ResourceClaim[], _getMessagesCallback: () => AgentMessage[], getStateCallback: () => Map<string, unknown>): void;
141
+ /**
142
+ * Stop auto-save timer
143
+ */
144
+ stopAutoSave(): void;
145
+ /**
146
+ * Mark state as dirty (needs saving)
147
+ */
148
+ markDirty(): void;
149
+ /**
150
+ * Clean up resources
151
+ */
152
+ dispose(): void;
153
+ /**
154
+ * Reset all persisted state (for testing)
155
+ */
156
+ reset(): void;
157
+ }
158
+ /**
159
+ * Global state persistence instance
160
+ */
161
+ export declare const statePersistence: StatePersistence;
162
+ /**
163
+ * Initialize persistence and load state into blackboard and message bus
164
+ */
165
+ export declare function initializePersistence(blackboard: {
166
+ claims: Map<string, ResourceClaim>;
167
+ state: Map<string, unknown>;
168
+ }, messageBus: {
169
+ messageHistory: AgentMessage[];
170
+ }, persistence?: StatePersistence): Promise<void>;
171
+ /**
172
+ * Create persistence hooks for automatic state saving
173
+ */
174
+ export declare function createPersistenceHooks(_blackboard: {
175
+ claims: Map<string, ResourceClaim>;
176
+ state: Map<string, unknown>;
177
+ }, _messageBus: {
178
+ messageHistory: AgentMessage[];
179
+ }, persistence?: StatePersistence): {
180
+ onMessage: (message: AgentMessage) => void;
181
+ onClaimChange: () => void;
182
+ onStateChange: () => void;
183
+ };
184
+ //# sourceMappingURL=state-persistence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state-persistence.d.ts","sourceRoot":"","sources":["../../../src/core/agents/state-persistence.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,394 @@
1
+ /**
2
+ * State Persistence - Agent State Persistence Module
3
+ *
4
+ * Provides persistence for agent state across sessions:
5
+ * - Message history persisted to `.dino/agent-state/messages.jsonl`
6
+ * - Blackboard claims persisted to `.dino/agent-state/claims.json`
7
+ * - Automatic loading on session start
8
+ * - Stale claim cleanup (> 1 hour)
9
+ * - Compression for message history (keep last 1000, archive older)
10
+ */
11
+ import { appendFileSync, existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
12
+ import { join } from 'node:path';
13
+ /**
14
+ * Default persistence configuration
15
+ */
16
+ export const DEFAULT_PERSISTENCE_CONFIG = {
17
+ baseDir: '.dino/agent-state',
18
+ maxActiveMessages: 1000,
19
+ maxClaimAgeMs: 60 * 60 * 1000, // 1 hour
20
+ autoSaveIntervalMs: 30000, // 30 seconds
21
+ enableArchiveCompression: true,
22
+ };
23
+ // =============================================================================
24
+ // State Persistence Class
25
+ // =============================================================================
26
+ /**
27
+ * State persistence manager for agent coordination
28
+ */
29
+ export class StatePersistence {
30
+ config;
31
+ autoSaveTimer = null;
32
+ isDirty = false;
33
+ messageBuffer = [];
34
+ constructor(config = {}) {
35
+ this.config = { ...DEFAULT_PERSISTENCE_CONFIG, ...config };
36
+ this.ensureDirectoryExists();
37
+ }
38
+ // ===========================================================================
39
+ // File Paths
40
+ // ===========================================================================
41
+ /**
42
+ * Get path to claims file
43
+ */
44
+ get claimsPath() {
45
+ return join(this.config.baseDir, 'claims.json');
46
+ }
47
+ /**
48
+ * Get path to messages file
49
+ */
50
+ get messagesPath() {
51
+ return join(this.config.baseDir, 'messages.jsonl');
52
+ }
53
+ /**
54
+ * Get path to archived messages
55
+ */
56
+ get archivePath() {
57
+ return join(this.config.baseDir, 'messages-archive.jsonl');
58
+ }
59
+ /**
60
+ * Get path to shared state file
61
+ */
62
+ get statePath() {
63
+ return join(this.config.baseDir, 'shared-state.json');
64
+ }
65
+ // ===========================================================================
66
+ // Directory Management
67
+ // ===========================================================================
68
+ /**
69
+ * Ensure state directory exists
70
+ */
71
+ ensureDirectoryExists() {
72
+ if (!existsSync(this.config.baseDir)) {
73
+ mkdirSync(this.config.baseDir, { recursive: true });
74
+ }
75
+ }
76
+ // ===========================================================================
77
+ // Claims Persistence
78
+ // ===========================================================================
79
+ /**
80
+ * Load claims from disk
81
+ */
82
+ loadClaims() {
83
+ try {
84
+ if (!existsSync(this.claimsPath)) {
85
+ return [];
86
+ }
87
+ const content = readFileSync(this.claimsPath, 'utf-8');
88
+ const data = JSON.parse(content);
89
+ // Filter out stale claims
90
+ const now = Date.now();
91
+ const validClaims = data.claims.filter((claim) => {
92
+ const claimedAt = new Date(claim.claimedAt).getTime();
93
+ const age = now - claimedAt;
94
+ return age < this.config.maxClaimAgeMs;
95
+ });
96
+ return validClaims;
97
+ }
98
+ catch {
99
+ return [];
100
+ }
101
+ }
102
+ /**
103
+ * Save claims to disk
104
+ */
105
+ saveClaims(claims) {
106
+ try {
107
+ // Filter stale claims before saving
108
+ const now = Date.now();
109
+ const validClaims = claims.filter((claim) => {
110
+ const claimedAt = new Date(claim.claimedAt).getTime();
111
+ const age = now - claimedAt;
112
+ return age < this.config.maxClaimAgeMs;
113
+ });
114
+ const data = {
115
+ version: 1,
116
+ savedAt: new Date().toISOString(),
117
+ claims: validClaims,
118
+ };
119
+ writeFileSync(this.claimsPath, JSON.stringify(data, null, 2));
120
+ }
121
+ catch (_error) { }
122
+ }
123
+ /**
124
+ * Clean up stale claims (> 1 hour old)
125
+ */
126
+ cleanupStaleClaims(claims) {
127
+ const now = Date.now();
128
+ return claims.filter((claim) => {
129
+ const claimedAt = new Date(claim.claimedAt).getTime();
130
+ const age = now - claimedAt;
131
+ return age < this.config.maxClaimAgeMs;
132
+ });
133
+ }
134
+ // ===========================================================================
135
+ // Message History Persistence
136
+ // ===========================================================================
137
+ /**
138
+ * Load message history from disk
139
+ */
140
+ loadMessageHistory() {
141
+ try {
142
+ if (!existsSync(this.messagesPath)) {
143
+ return [];
144
+ }
145
+ const content = readFileSync(this.messagesPath, 'utf-8');
146
+ const lines = content.trim().split('\n').filter(Boolean);
147
+ const messages = [];
148
+ for (const line of lines) {
149
+ try {
150
+ const entry = JSON.parse(line);
151
+ messages.push(entry.message);
152
+ }
153
+ catch {
154
+ // Skip malformed lines
155
+ }
156
+ }
157
+ return messages;
158
+ }
159
+ catch {
160
+ return [];
161
+ }
162
+ }
163
+ /**
164
+ * Append message to history
165
+ */
166
+ appendMessage(message) {
167
+ this.messageBuffer.push(message);
168
+ this.isDirty = true;
169
+ }
170
+ /**
171
+ * Flush message buffer to disk
172
+ */
173
+ flushMessages() {
174
+ if (this.messageBuffer.length === 0) {
175
+ return;
176
+ }
177
+ try {
178
+ const entries = this.messageBuffer.map((message) => ({
179
+ message,
180
+ persistedAt: new Date().toISOString(),
181
+ }));
182
+ const lines = `${entries.map((e) => JSON.stringify(e)).join('\n')}\n`;
183
+ appendFileSync(this.messagesPath, lines);
184
+ this.messageBuffer = [];
185
+ // Check if compression is needed
186
+ this.compressHistoryIfNeeded();
187
+ }
188
+ catch (_error) { }
189
+ }
190
+ /**
191
+ * Compress message history if it exceeds max size
192
+ */
193
+ compressHistoryIfNeeded() {
194
+ try {
195
+ if (!existsSync(this.messagesPath)) {
196
+ return;
197
+ }
198
+ const content = readFileSync(this.messagesPath, 'utf-8');
199
+ const lines = content.trim().split('\n').filter(Boolean);
200
+ if (lines.length <= this.config.maxActiveMessages) {
201
+ return;
202
+ }
203
+ // Split into archive and active
204
+ const archiveCount = lines.length - this.config.maxActiveMessages;
205
+ const archiveLines = lines.slice(0, archiveCount);
206
+ const activeLines = lines.slice(archiveCount);
207
+ // Append to archive
208
+ if (this.config.enableArchiveCompression && archiveLines.length > 0) {
209
+ appendFileSync(this.archivePath, `${archiveLines.join('\n')}\n`);
210
+ }
211
+ // Rewrite active messages
212
+ writeFileSync(this.messagesPath, `${activeLines.join('\n')}\n`);
213
+ }
214
+ catch (_error) { }
215
+ }
216
+ /**
217
+ * Save full message history (for bulk operations)
218
+ */
219
+ saveMessageHistory(messages) {
220
+ try {
221
+ // Keep only the last maxActiveMessages
222
+ const activeMessages = messages.slice(-this.config.maxActiveMessages);
223
+ const archiveMessages = messages.slice(0, -this.config.maxActiveMessages);
224
+ // Archive older messages
225
+ if (archiveMessages.length > 0 && this.config.enableArchiveCompression) {
226
+ const archiveEntries = archiveMessages.map((message) => ({
227
+ message,
228
+ persistedAt: new Date().toISOString(),
229
+ }));
230
+ const archiveLines = `${archiveEntries.map((e) => JSON.stringify(e)).join('\n')}\n`;
231
+ appendFileSync(this.archivePath, archiveLines);
232
+ }
233
+ // Write active messages
234
+ const entries = activeMessages.map((message) => ({
235
+ message,
236
+ persistedAt: new Date().toISOString(),
237
+ }));
238
+ const lines = `${entries.map((e) => JSON.stringify(e)).join('\n')}\n`;
239
+ writeFileSync(this.messagesPath, lines);
240
+ }
241
+ catch (_error) { }
242
+ }
243
+ // ===========================================================================
244
+ // Shared State Persistence
245
+ // ===========================================================================
246
+ /**
247
+ * Load shared state from disk
248
+ */
249
+ loadSharedState() {
250
+ try {
251
+ if (!existsSync(this.statePath)) {
252
+ return new Map();
253
+ }
254
+ const content = readFileSync(this.statePath, 'utf-8');
255
+ const data = JSON.parse(content);
256
+ return new Map(Object.entries(data.state));
257
+ }
258
+ catch {
259
+ return new Map();
260
+ }
261
+ }
262
+ /**
263
+ * Save shared state to disk
264
+ */
265
+ saveSharedState(state) {
266
+ try {
267
+ const data = {
268
+ version: 1,
269
+ savedAt: new Date().toISOString(),
270
+ state: Object.fromEntries(state),
271
+ };
272
+ writeFileSync(this.statePath, JSON.stringify(data, null, 2));
273
+ }
274
+ catch (_error) { }
275
+ }
276
+ // ===========================================================================
277
+ // Full State Management
278
+ // ===========================================================================
279
+ /**
280
+ * Load all persisted state
281
+ */
282
+ loadAll() {
283
+ return {
284
+ claims: this.loadClaims(),
285
+ messages: this.loadMessageHistory(),
286
+ sharedState: this.loadSharedState(),
287
+ };
288
+ }
289
+ /**
290
+ * Save all state to disk
291
+ */
292
+ saveAll(claims, messages, sharedState) {
293
+ this.saveClaims(claims);
294
+ this.saveMessageHistory(messages);
295
+ this.saveSharedState(sharedState);
296
+ this.isDirty = false;
297
+ }
298
+ // ===========================================================================
299
+ // Auto-Save Management
300
+ // ===========================================================================
301
+ /**
302
+ * Start auto-save timer
303
+ */
304
+ startAutoSave(getClaimsCallback, _getMessagesCallback, getStateCallback) {
305
+ if (this.config.autoSaveIntervalMs <= 0) {
306
+ return;
307
+ }
308
+ this.stopAutoSave();
309
+ this.autoSaveTimer = setInterval(() => {
310
+ if (this.isDirty || this.messageBuffer.length > 0) {
311
+ this.flushMessages();
312
+ this.saveClaims(getClaimsCallback());
313
+ this.saveSharedState(getStateCallback());
314
+ this.isDirty = false;
315
+ }
316
+ }, this.config.autoSaveIntervalMs);
317
+ }
318
+ /**
319
+ * Stop auto-save timer
320
+ */
321
+ stopAutoSave() {
322
+ if (this.autoSaveTimer) {
323
+ clearInterval(this.autoSaveTimer);
324
+ this.autoSaveTimer = null;
325
+ }
326
+ }
327
+ /**
328
+ * Mark state as dirty (needs saving)
329
+ */
330
+ markDirty() {
331
+ this.isDirty = true;
332
+ }
333
+ // ===========================================================================
334
+ // Cleanup
335
+ // ===========================================================================
336
+ /**
337
+ * Clean up resources
338
+ */
339
+ dispose() {
340
+ this.stopAutoSave();
341
+ this.flushMessages();
342
+ }
343
+ /**
344
+ * Reset all persisted state (for testing)
345
+ */
346
+ reset() {
347
+ this.stopAutoSave();
348
+ this.messageBuffer = [];
349
+ this.isDirty = false;
350
+ }
351
+ }
352
+ // =============================================================================
353
+ // Singleton Instance
354
+ // =============================================================================
355
+ /**
356
+ * Global state persistence instance
357
+ */
358
+ export const statePersistence = new StatePersistence();
359
+ // =============================================================================
360
+ // Integration Helpers
361
+ // =============================================================================
362
+ /**
363
+ * Initialize persistence and load state into blackboard and message bus
364
+ */
365
+ export async function initializePersistence(blackboard, messageBus, persistence = statePersistence) {
366
+ const { claims, messages, sharedState } = persistence.loadAll();
367
+ // Restore claims
368
+ for (const claim of claims) {
369
+ blackboard.claims.set(claim.resource, claim);
370
+ }
371
+ // Restore shared state
372
+ for (const [key, value] of sharedState) {
373
+ blackboard.state.set(key, value);
374
+ }
375
+ // Restore message history
376
+ messageBus.messageHistory.push(...messages);
377
+ }
378
+ /**
379
+ * Create persistence hooks for automatic state saving
380
+ */
381
+ export function createPersistenceHooks(_blackboard, _messageBus, persistence = statePersistence) {
382
+ return {
383
+ onMessage: (message) => {
384
+ persistence.appendMessage(message);
385
+ },
386
+ onClaimChange: () => {
387
+ persistence.markDirty();
388
+ },
389
+ onStateChange: () => {
390
+ persistence.markDirty();
391
+ },
392
+ };
393
+ }
394
+ //# sourceMappingURL=state-persistence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state-persistence.js","sourceRoot":"","sources":["../../../src/core/agents/state-persistence.ts"],"names":[],"mappings":"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"}