dino-spec 17.4.3 → 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.
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +10 -0
- package/dist/commands/init.js.map +1 -1
- package/dist/core/agents/__tests__/confidence-gate.test.d.ts +5 -0
- package/dist/core/agents/__tests__/confidence-gate.test.d.ts.map +1 -0
- package/dist/core/agents/__tests__/confidence-gate.test.js +329 -0
- package/dist/core/agents/__tests__/confidence-gate.test.js.map +1 -0
- package/dist/core/agents/__tests__/gap-detector.test.d.ts +5 -0
- package/dist/core/agents/__tests__/gap-detector.test.d.ts.map +1 -0
- package/dist/core/agents/__tests__/gap-detector.test.js +609 -0
- package/dist/core/agents/__tests__/gap-detector.test.js.map +1 -0
- package/dist/core/agents/__tests__/learning-loop.test.d.ts +5 -0
- package/dist/core/agents/__tests__/learning-loop.test.d.ts.map +1 -0
- package/dist/core/agents/__tests__/learning-loop.test.js +663 -0
- package/dist/core/agents/__tests__/learning-loop.test.js.map +1 -0
- package/dist/core/agents/__tests__/parallel-executor.test.d.ts +5 -0
- package/dist/core/agents/__tests__/parallel-executor.test.d.ts.map +1 -0
- package/dist/core/agents/__tests__/parallel-executor.test.js +610 -0
- package/dist/core/agents/__tests__/parallel-executor.test.js.map +1 -0
- package/dist/core/agents/__tests__/research-validator.test.js +5 -5
- package/dist/core/agents/__tests__/research-validator.test.js.map +1 -1
- package/dist/core/agents/__tests__/skill-creator.test.d.ts +5 -0
- package/dist/core/agents/__tests__/skill-creator.test.d.ts.map +1 -0
- package/dist/core/agents/__tests__/skill-creator.test.js +443 -0
- package/dist/core/agents/__tests__/skill-creator.test.js.map +1 -0
- package/dist/core/agents/__tests__/state-persistence.test.d.ts +2 -0
- package/dist/core/agents/__tests__/state-persistence.test.d.ts.map +1 -0
- package/dist/core/agents/__tests__/state-persistence.test.js +270 -0
- package/dist/core/agents/__tests__/state-persistence.test.js.map +1 -0
- package/dist/core/agents/__tests__/validation-cache.test.d.ts +2 -0
- package/dist/core/agents/__tests__/validation-cache.test.d.ts.map +1 -0
- package/dist/core/agents/__tests__/validation-cache.test.js +181 -0
- package/dist/core/agents/__tests__/validation-cache.test.js.map +1 -0
- package/dist/core/agents/blackboard.d.ts +22 -3
- package/dist/core/agents/blackboard.d.ts.map +1 -1
- package/dist/core/agents/blackboard.js +52 -2
- package/dist/core/agents/blackboard.js.map +1 -1
- package/dist/core/agents/circuit-breaker.d.ts +79 -1
- package/dist/core/agents/circuit-breaker.d.ts.map +1 -1
- package/dist/core/agents/circuit-breaker.js +175 -1
- package/dist/core/agents/circuit-breaker.js.map +1 -1
- package/dist/core/agents/clarification-phase.d.ts +128 -0
- package/dist/core/agents/clarification-phase.d.ts.map +1 -0
- package/dist/core/agents/clarification-phase.js +375 -0
- package/dist/core/agents/clarification-phase.js.map +1 -0
- package/dist/core/agents/confidence-gate.d.ts +116 -3
- package/dist/core/agents/confidence-gate.d.ts.map +1 -1
- package/dist/core/agents/confidence-gate.js +363 -3
- package/dist/core/agents/confidence-gate.js.map +1 -1
- package/dist/core/agents/correction-tracker.d.ts +197 -0
- package/dist/core/agents/correction-tracker.d.ts.map +1 -0
- package/dist/core/agents/correction-tracker.js +366 -0
- package/dist/core/agents/correction-tracker.js.map +1 -0
- package/dist/core/agents/dependency-graph.d.ts +193 -0
- package/dist/core/agents/dependency-graph.d.ts.map +1 -0
- package/dist/core/agents/dependency-graph.js +462 -0
- package/dist/core/agents/dependency-graph.js.map +1 -0
- package/dist/core/agents/gap-detector.d.ts +277 -0
- package/dist/core/agents/gap-detector.d.ts.map +1 -0
- package/dist/core/agents/gap-detector.js +540 -0
- package/dist/core/agents/gap-detector.js.map +1 -0
- package/dist/core/agents/index.d.ts +14 -1
- package/dist/core/agents/index.d.ts.map +1 -1
- package/dist/core/agents/index.js +26 -1
- package/dist/core/agents/index.js.map +1 -1
- package/dist/core/agents/message-protocol.d.ts +13 -2
- package/dist/core/agents/message-protocol.d.ts.map +1 -1
- package/dist/core/agents/message-protocol.js +20 -1
- package/dist/core/agents/message-protocol.js.map +1 -1
- package/dist/core/agents/parallel-executor.d.ts +182 -0
- package/dist/core/agents/parallel-executor.d.ts.map +1 -0
- package/dist/core/agents/parallel-executor.js +474 -0
- package/dist/core/agents/parallel-executor.js.map +1 -0
- package/dist/core/agents/pattern-detector.d.ts +157 -0
- package/dist/core/agents/pattern-detector.d.ts.map +1 -0
- package/dist/core/agents/pattern-detector.js +370 -0
- package/dist/core/agents/pattern-detector.js.map +1 -0
- package/dist/core/agents/registry-client.d.ts +6 -0
- package/dist/core/agents/registry-client.d.ts.map +1 -1
- package/dist/core/agents/registry-client.js +3 -0
- package/dist/core/agents/registry-client.js.map +1 -1
- package/dist/core/agents/research-phase.d.ts +114 -0
- package/dist/core/agents/research-phase.d.ts.map +1 -0
- package/dist/core/agents/research-phase.js +355 -0
- package/dist/core/agents/research-phase.js.map +1 -0
- package/dist/core/agents/research-validator.d.ts +13 -2
- package/dist/core/agents/research-validator.d.ts.map +1 -1
- package/dist/core/agents/research-validator.js +63 -31
- package/dist/core/agents/research-validator.js.map +1 -1
- package/dist/core/agents/skill-creator.d.ts +174 -0
- package/dist/core/agents/skill-creator.d.ts.map +1 -0
- package/dist/core/agents/skill-creator.js +570 -0
- package/dist/core/agents/skill-creator.js.map +1 -0
- package/dist/core/agents/state-persistence.d.ts +184 -0
- package/dist/core/agents/state-persistence.d.ts.map +1 -0
- package/dist/core/agents/state-persistence.js +394 -0
- package/dist/core/agents/state-persistence.js.map +1 -0
- package/dist/core/agents/validation-cache.d.ts +122 -0
- package/dist/core/agents/validation-cache.d.ts.map +1 -0
- package/dist/core/agents/validation-cache.js +280 -0
- package/dist/core/agents/validation-cache.js.map +1 -0
- package/dist/core/agents/validators/__tests__/validators.test.d.ts +5 -0
- package/dist/core/agents/validators/__tests__/validators.test.d.ts.map +1 -0
- package/dist/core/agents/validators/__tests__/validators.test.js +321 -0
- package/dist/core/agents/validators/__tests__/validators.test.js.map +1 -0
- package/dist/core/agents/validators/base-validator.d.ts +191 -0
- package/dist/core/agents/validators/base-validator.d.ts.map +1 -0
- package/dist/core/agents/validators/base-validator.js +192 -0
- package/dist/core/agents/validators/base-validator.js.map +1 -0
- package/dist/core/agents/validators/index.d.ts +7 -0
- package/dist/core/agents/validators/index.d.ts.map +1 -0
- package/dist/core/agents/validators/index.js +7 -0
- package/dist/core/agents/validators/index.js.map +1 -0
- package/dist/core/agents/validators/npm-validator.d.ts +50 -0
- package/dist/core/agents/validators/npm-validator.d.ts.map +1 -0
- package/dist/core/agents/validators/npm-validator.js +211 -0
- package/dist/core/agents/validators/npm-validator.js.map +1 -0
- package/dist/core/agents/validators/pip-validator.d.ts +49 -0
- package/dist/core/agents/validators/pip-validator.d.ts.map +1 -0
- package/dist/core/agents/validators/pip-validator.js +191 -0
- package/dist/core/agents/validators/pip-validator.js.map +1 -0
- package/dist/core/agents/validators/validator-registry.d.ts +122 -0
- package/dist/core/agents/validators/validator-registry.d.ts.map +1 -0
- package/dist/core/agents/validators/validator-registry.js +321 -0
- package/dist/core/agents/validators/validator-registry.js.map +1 -0
- package/dist/core/context-repl/types.d.ts +4 -4
- package/dist/core/memory/index.d.ts +1 -0
- package/dist/core/memory/index.d.ts.map +1 -1
- package/dist/core/memory/index.js +2 -0
- package/dist/core/memory/index.js.map +1 -1
- package/dist/core/memory/learning-store.d.ts +222 -0
- package/dist/core/memory/learning-store.d.ts.map +1 -0
- package/dist/core/memory/learning-store.js +477 -0
- package/dist/core/memory/learning-store.js.map +1 -0
- package/dist/core/spec-analyzer/__tests__/ambiguity-detector.test.d.ts +5 -0
- package/dist/core/spec-analyzer/__tests__/ambiguity-detector.test.d.ts.map +1 -0
- package/dist/core/spec-analyzer/__tests__/ambiguity-detector.test.js +401 -0
- package/dist/core/spec-analyzer/__tests__/ambiguity-detector.test.js.map +1 -0
- package/dist/core/spec-analyzer/ambiguity-detector.d.ts +99 -0
- package/dist/core/spec-analyzer/ambiguity-detector.d.ts.map +1 -0
- package/dist/core/spec-analyzer/ambiguity-detector.js +250 -0
- package/dist/core/spec-analyzer/ambiguity-detector.js.map +1 -0
- package/dist/core/spec-analyzer/clarification-generator.d.ts +76 -0
- package/dist/core/spec-analyzer/clarification-generator.d.ts.map +1 -0
- package/dist/core/spec-analyzer/clarification-generator.js +257 -0
- package/dist/core/spec-analyzer/clarification-generator.js.map +1 -0
- package/dist/core/spec-analyzer/index.d.ts +10 -1
- package/dist/core/spec-analyzer/index.d.ts.map +1 -1
- package/dist/core/spec-analyzer/index.js +13 -1
- package/dist/core/spec-analyzer/index.js.map +1 -1
- package/dist/core/spec-analyzer/patterns.d.ts +73 -0
- package/dist/core/spec-analyzer/patterns.d.ts.map +1 -0
- package/dist/core/spec-analyzer/patterns.js +412 -0
- package/dist/core/spec-analyzer/patterns.js.map +1 -0
- package/dist/hooks/__tests__/dynamic-generator.test.d.ts +5 -0
- package/dist/hooks/__tests__/dynamic-generator.test.d.ts.map +1 -0
- package/dist/hooks/__tests__/dynamic-generator.test.js +425 -0
- package/dist/hooks/__tests__/dynamic-generator.test.js.map +1 -0
- package/dist/hooks/__tests__/hook-agent-bridge.test.d.ts +5 -0
- package/dist/hooks/__tests__/hook-agent-bridge.test.d.ts.map +1 -0
- package/dist/hooks/__tests__/hook-agent-bridge.test.js +315 -0
- package/dist/hooks/__tests__/hook-agent-bridge.test.js.map +1 -0
- package/dist/hooks/dynamic-generator.d.ts +158 -0
- package/dist/hooks/dynamic-generator.d.ts.map +1 -0
- package/dist/hooks/dynamic-generator.js +448 -0
- package/dist/hooks/dynamic-generator.js.map +1 -0
- package/dist/hooks/hook-agent-bridge.d.ts +252 -0
- package/dist/hooks/hook-agent-bridge.d.ts.map +1 -0
- package/dist/hooks/hook-agent-bridge.js +489 -0
- package/dist/hooks/hook-agent-bridge.js.map +1 -0
- package/dist/hooks/index.d.ts +3 -1
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +5 -1
- package/dist/hooks/index.js.map +1 -1
- package/dist/mcp/tool-catalog.d.ts.map +1 -1
- package/dist/mcp/tool-catalog.js +47 -0
- package/dist/mcp/tool-catalog.js.map +1 -1
- package/dist/mcp/tool-tiers.d.ts.map +1 -1
- package/dist/mcp/tool-tiers.js +4 -0
- package/dist/mcp/tool-tiers.js.map +1 -1
- package/dist/mcp/tools/index.d.ts +2 -1
- package/dist/mcp/tools/index.d.ts.map +1 -1
- package/dist/mcp/tools/index.js +15 -1
- package/dist/mcp/tools/index.js.map +1 -1
- package/dist/mcp/tools/learning-store.d.ts +30 -0
- package/dist/mcp/tools/learning-store.d.ts.map +1 -0
- package/dist/mcp/tools/learning-store.js +286 -0
- package/dist/mcp/tools/learning-store.js.map +1 -0
- 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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"}
|