@agent-relay/resiliency 0.1.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 (49) hide show
  1. package/dist/context-persistence.d.ts +140 -0
  2. package/dist/context-persistence.d.ts.map +1 -0
  3. package/dist/context-persistence.js +397 -0
  4. package/dist/context-persistence.js.map +1 -0
  5. package/dist/crash-insights.d.ts +156 -0
  6. package/dist/crash-insights.d.ts.map +1 -0
  7. package/dist/crash-insights.js +492 -0
  8. package/dist/crash-insights.js.map +1 -0
  9. package/dist/gossip-health.d.ts +137 -0
  10. package/dist/gossip-health.d.ts.map +1 -0
  11. package/dist/gossip-health.js +241 -0
  12. package/dist/gossip-health.js.map +1 -0
  13. package/dist/health-monitor.d.ts +97 -0
  14. package/dist/health-monitor.d.ts.map +1 -0
  15. package/dist/health-monitor.js +291 -0
  16. package/dist/health-monitor.js.map +1 -0
  17. package/dist/index.d.ts +68 -0
  18. package/dist/index.d.ts.map +1 -0
  19. package/dist/index.js +68 -0
  20. package/dist/index.js.map +1 -0
  21. package/dist/leader-watchdog.d.ts +109 -0
  22. package/dist/leader-watchdog.d.ts.map +1 -0
  23. package/dist/leader-watchdog.js +189 -0
  24. package/dist/leader-watchdog.js.map +1 -0
  25. package/dist/logger.d.ts +114 -0
  26. package/dist/logger.d.ts.map +1 -0
  27. package/dist/logger.js +250 -0
  28. package/dist/logger.js.map +1 -0
  29. package/dist/memory-monitor.d.ts +172 -0
  30. package/dist/memory-monitor.d.ts.map +1 -0
  31. package/dist/memory-monitor.js +599 -0
  32. package/dist/memory-monitor.js.map +1 -0
  33. package/dist/metrics.d.ts +115 -0
  34. package/dist/metrics.d.ts.map +1 -0
  35. package/dist/metrics.js +239 -0
  36. package/dist/metrics.js.map +1 -0
  37. package/dist/provider-context.d.ts +100 -0
  38. package/dist/provider-context.d.ts.map +1 -0
  39. package/dist/provider-context.js +362 -0
  40. package/dist/provider-context.js.map +1 -0
  41. package/dist/stateless-lead.d.ts +149 -0
  42. package/dist/stateless-lead.d.ts.map +1 -0
  43. package/dist/stateless-lead.js +308 -0
  44. package/dist/stateless-lead.js.map +1 -0
  45. package/dist/supervisor.d.ts +147 -0
  46. package/dist/supervisor.d.ts.map +1 -0
  47. package/dist/supervisor.js +459 -0
  48. package/dist/supervisor.js.map +1 -0
  49. package/package.json +28 -0
@@ -0,0 +1,115 @@
1
+ /**
2
+ * Agent Resiliency Metrics
3
+ *
4
+ * Collects and exposes metrics about agent health, crashes, and restarts.
5
+ * - Prometheus-compatible format
6
+ * - In-memory aggregation
7
+ * - Real-time stats
8
+ */
9
+ export interface AgentMetrics {
10
+ name: string;
11
+ spawns: number;
12
+ crashes: number;
13
+ restarts: number;
14
+ successfulRestarts: number;
15
+ failedRestarts: number;
16
+ currentStatus: 'healthy' | 'unhealthy' | 'dead' | 'unknown';
17
+ uptimeMs: number;
18
+ lastCrashAt?: Date;
19
+ lastCrashReason?: string;
20
+ avgUptimeMs: number;
21
+ memoryUsageBytes?: number;
22
+ cpuUsagePercent?: number;
23
+ }
24
+ export interface SystemMetrics {
25
+ totalAgents: number;
26
+ healthyAgents: number;
27
+ unhealthyAgents: number;
28
+ deadAgents: number;
29
+ totalCrashes: number;
30
+ totalRestarts: number;
31
+ uptimeSeconds: number;
32
+ memoryUsageMb: number;
33
+ }
34
+ export interface MetricPoint {
35
+ name: string;
36
+ value: number;
37
+ labels: Record<string, string>;
38
+ timestamp: number;
39
+ }
40
+ declare class MetricsCollector {
41
+ private agents;
42
+ private startTime;
43
+ private history;
44
+ private maxHistorySize;
45
+ /**
46
+ * Record an agent spawn
47
+ */
48
+ recordSpawn(name: string): void;
49
+ /**
50
+ * Record an agent crash
51
+ */
52
+ recordCrash(name: string, reason: string): void;
53
+ /**
54
+ * Record a restart attempt
55
+ */
56
+ recordRestartAttempt(name: string): void;
57
+ /**
58
+ * Record a successful restart
59
+ */
60
+ recordRestartSuccess(name: string): void;
61
+ /**
62
+ * Record a failed restart
63
+ */
64
+ recordRestartFailure(name: string, reason: string): void;
65
+ /**
66
+ * Mark agent as dead (exceeded max restarts)
67
+ */
68
+ recordDead(name: string): void;
69
+ /**
70
+ * Update resource usage
71
+ */
72
+ updateResourceUsage(name: string, memoryBytes: number, cpuPercent: number): void;
73
+ /**
74
+ * Get metrics for a specific agent
75
+ */
76
+ getAgentMetrics(name: string): AgentMetrics | undefined;
77
+ /**
78
+ * Get metrics for all agents
79
+ */
80
+ getAllAgentMetrics(): AgentMetrics[];
81
+ /**
82
+ * Get system-wide metrics
83
+ */
84
+ getSystemMetrics(): SystemMetrics;
85
+ /**
86
+ * Export metrics in Prometheus format
87
+ */
88
+ toPrometheus(): string;
89
+ /**
90
+ * Export metrics as JSON
91
+ */
92
+ toJSON(): {
93
+ system: SystemMetrics;
94
+ agents: AgentMetrics[];
95
+ };
96
+ /**
97
+ * Get recent metric history
98
+ */
99
+ getHistory(name?: string, since?: Date): MetricPoint[];
100
+ /**
101
+ * Reset all metrics
102
+ */
103
+ reset(): void;
104
+ /**
105
+ * Get or create agent metrics
106
+ */
107
+ private getOrCreate;
108
+ /**
109
+ * Record a metric point
110
+ */
111
+ private record;
112
+ }
113
+ export declare const metrics: MetricsCollector;
114
+ export {};
115
+ //# sourceMappingURL=metrics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../src/metrics.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,SAAS,GAAG,WAAW,GAAG,MAAM,GAAG,SAAS,CAAC;IAC5D,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,IAAI,CAAC;IACnB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,cAAM,gBAAgB;IACpB,OAAO,CAAC,MAAM,CAAmC;IACjD,OAAO,CAAC,SAAS,CAAc;IAC/B,OAAO,CAAC,OAAO,CAAqB;IACpC,OAAO,CAAC,cAAc,CAAS;IAE/B;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAO/B;;OAEG;IACH,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAiB/C;;OAEG;IACH,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAOxC;;OAEG;IACH,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAOxC;;OAEG;IACH,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAMxD;;OAEG;IACH,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAM9B;;OAEG;IACH,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAQhF;;OAEG;IACH,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAIvD;;OAEG;IACH,kBAAkB,IAAI,YAAY,EAAE;IAIpC;;OAEG;IACH,gBAAgB,IAAI,aAAa;IAejC;;OAEG;IACH,YAAY,IAAI,MAAM;IAmEtB;;OAEG;IACH,MAAM,IAAI;QAAE,MAAM,EAAE,aAAa,CAAC;QAAC,MAAM,EAAE,YAAY,EAAE,CAAA;KAAE;IAO3D;;OAEG;IACH,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,IAAI,GAAG,WAAW,EAAE;IAetD;;OAEG;IACH,KAAK,IAAI,IAAI;IAMb;;OAEG;IACH,OAAO,CAAC,WAAW;IAmBnB;;OAEG;IACH,OAAO,CAAC,MAAM;CAef;AAGD,eAAO,MAAM,OAAO,kBAAyB,CAAC"}
@@ -0,0 +1,239 @@
1
+ /**
2
+ * Agent Resiliency Metrics
3
+ *
4
+ * Collects and exposes metrics about agent health, crashes, and restarts.
5
+ * - Prometheus-compatible format
6
+ * - In-memory aggregation
7
+ * - Real-time stats
8
+ */
9
+ class MetricsCollector {
10
+ agents = new Map();
11
+ startTime = Date.now();
12
+ history = [];
13
+ maxHistorySize = 10000;
14
+ /**
15
+ * Record an agent spawn
16
+ */
17
+ recordSpawn(name) {
18
+ const metrics = this.getOrCreate(name);
19
+ metrics.spawns++;
20
+ metrics.currentStatus = 'healthy';
21
+ this.record('agent_spawns_total', 1, { agent: name });
22
+ }
23
+ /**
24
+ * Record an agent crash
25
+ */
26
+ recordCrash(name, reason) {
27
+ const metrics = this.getOrCreate(name);
28
+ metrics.crashes++;
29
+ metrics.lastCrashAt = new Date();
30
+ metrics.lastCrashReason = reason;
31
+ metrics.currentStatus = 'unhealthy';
32
+ // Update average uptime
33
+ if (metrics.spawns > 0) {
34
+ const currentUptime = Date.now() - (this.startTime + metrics.uptimeMs);
35
+ metrics.avgUptimeMs =
36
+ (metrics.avgUptimeMs * (metrics.spawns - 1) + currentUptime) / metrics.spawns;
37
+ }
38
+ this.record('agent_crashes_total', 1, { agent: name, reason });
39
+ }
40
+ /**
41
+ * Record a restart attempt
42
+ */
43
+ recordRestartAttempt(name) {
44
+ const metrics = this.getOrCreate(name);
45
+ metrics.restarts++;
46
+ metrics.currentStatus = 'unhealthy';
47
+ this.record('agent_restart_attempts_total', 1, { agent: name });
48
+ }
49
+ /**
50
+ * Record a successful restart
51
+ */
52
+ recordRestartSuccess(name) {
53
+ const metrics = this.getOrCreate(name);
54
+ metrics.successfulRestarts++;
55
+ metrics.currentStatus = 'healthy';
56
+ this.record('agent_restart_success_total', 1, { agent: name });
57
+ }
58
+ /**
59
+ * Record a failed restart
60
+ */
61
+ recordRestartFailure(name, reason) {
62
+ const metrics = this.getOrCreate(name);
63
+ metrics.failedRestarts++;
64
+ this.record('agent_restart_failures_total', 1, { agent: name, reason });
65
+ }
66
+ /**
67
+ * Mark agent as dead (exceeded max restarts)
68
+ */
69
+ recordDead(name) {
70
+ const metrics = this.getOrCreate(name);
71
+ metrics.currentStatus = 'dead';
72
+ this.record('agent_dead_total', 1, { agent: name });
73
+ }
74
+ /**
75
+ * Update resource usage
76
+ */
77
+ updateResourceUsage(name, memoryBytes, cpuPercent) {
78
+ const metrics = this.getOrCreate(name);
79
+ metrics.memoryUsageBytes = memoryBytes;
80
+ metrics.cpuUsagePercent = cpuPercent;
81
+ this.record('agent_memory_bytes', memoryBytes, { agent: name });
82
+ this.record('agent_cpu_percent', cpuPercent, { agent: name });
83
+ }
84
+ /**
85
+ * Get metrics for a specific agent
86
+ */
87
+ getAgentMetrics(name) {
88
+ return this.agents.get(name);
89
+ }
90
+ /**
91
+ * Get metrics for all agents
92
+ */
93
+ getAllAgentMetrics() {
94
+ return Array.from(this.agents.values());
95
+ }
96
+ /**
97
+ * Get system-wide metrics
98
+ */
99
+ getSystemMetrics() {
100
+ const allMetrics = this.getAllAgentMetrics();
101
+ return {
102
+ totalAgents: allMetrics.length,
103
+ healthyAgents: allMetrics.filter((m) => m.currentStatus === 'healthy').length,
104
+ unhealthyAgents: allMetrics.filter((m) => m.currentStatus === 'unhealthy').length,
105
+ deadAgents: allMetrics.filter((m) => m.currentStatus === 'dead').length,
106
+ totalCrashes: allMetrics.reduce((sum, m) => sum + m.crashes, 0),
107
+ totalRestarts: allMetrics.reduce((sum, m) => sum + m.restarts, 0),
108
+ uptimeSeconds: Math.floor((Date.now() - this.startTime) / 1000),
109
+ memoryUsageMb: Math.round(process.memoryUsage().heapUsed / 1024 / 1024),
110
+ };
111
+ }
112
+ /**
113
+ * Export metrics in Prometheus format
114
+ */
115
+ toPrometheus() {
116
+ const lines = [];
117
+ const system = this.getSystemMetrics();
118
+ // System metrics
119
+ lines.push('# HELP agent_relay_uptime_seconds Total uptime in seconds');
120
+ lines.push('# TYPE agent_relay_uptime_seconds gauge');
121
+ lines.push(`agent_relay_uptime_seconds ${system.uptimeSeconds}`);
122
+ lines.push('# HELP agent_relay_agents_total Total number of agents');
123
+ lines.push('# TYPE agent_relay_agents_total gauge');
124
+ lines.push(`agent_relay_agents_total ${system.totalAgents}`);
125
+ lines.push('# HELP agent_relay_agents_healthy Number of healthy agents');
126
+ lines.push('# TYPE agent_relay_agents_healthy gauge');
127
+ lines.push(`agent_relay_agents_healthy ${system.healthyAgents}`);
128
+ lines.push('# HELP agent_relay_agents_unhealthy Number of unhealthy agents');
129
+ lines.push('# TYPE agent_relay_agents_unhealthy gauge');
130
+ lines.push(`agent_relay_agents_unhealthy ${system.unhealthyAgents}`);
131
+ lines.push('# HELP agent_relay_agents_dead Number of dead agents');
132
+ lines.push('# TYPE agent_relay_agents_dead gauge');
133
+ lines.push(`agent_relay_agents_dead ${system.deadAgents}`);
134
+ lines.push('# HELP agent_relay_crashes_total Total number of crashes');
135
+ lines.push('# TYPE agent_relay_crashes_total counter');
136
+ lines.push(`agent_relay_crashes_total ${system.totalCrashes}`);
137
+ lines.push('# HELP agent_relay_restarts_total Total number of restart attempts');
138
+ lines.push('# TYPE agent_relay_restarts_total counter');
139
+ lines.push(`agent_relay_restarts_total ${system.totalRestarts}`);
140
+ lines.push('# HELP agent_relay_memory_bytes Memory usage in bytes');
141
+ lines.push('# TYPE agent_relay_memory_bytes gauge');
142
+ lines.push(`agent_relay_memory_bytes ${system.memoryUsageMb * 1024 * 1024}`);
143
+ // Per-agent metrics
144
+ lines.push('# HELP agent_crashes_total Crashes per agent');
145
+ lines.push('# TYPE agent_crashes_total counter');
146
+ for (const m of this.getAllAgentMetrics()) {
147
+ lines.push(`agent_crashes_total{agent="${m.name}"} ${m.crashes}`);
148
+ }
149
+ lines.push('# HELP agent_restarts_total Restart attempts per agent');
150
+ lines.push('# TYPE agent_restarts_total counter');
151
+ for (const m of this.getAllAgentMetrics()) {
152
+ lines.push(`agent_restarts_total{agent="${m.name}"} ${m.restarts}`);
153
+ }
154
+ lines.push('# HELP agent_status Current agent status (0=unknown, 1=healthy, 2=unhealthy, 3=dead)');
155
+ lines.push('# TYPE agent_status gauge');
156
+ for (const m of this.getAllAgentMetrics()) {
157
+ const statusValue = m.currentStatus === 'healthy'
158
+ ? 1
159
+ : m.currentStatus === 'unhealthy'
160
+ ? 2
161
+ : m.currentStatus === 'dead'
162
+ ? 3
163
+ : 0;
164
+ lines.push(`agent_status{agent="${m.name}"} ${statusValue}`);
165
+ }
166
+ return lines.join('\n');
167
+ }
168
+ /**
169
+ * Export metrics as JSON
170
+ */
171
+ toJSON() {
172
+ return {
173
+ system: this.getSystemMetrics(),
174
+ agents: this.getAllAgentMetrics(),
175
+ };
176
+ }
177
+ /**
178
+ * Get recent metric history
179
+ */
180
+ getHistory(name, since) {
181
+ let points = this.history;
182
+ if (since) {
183
+ const sinceTs = since.getTime();
184
+ points = points.filter((p) => p.timestamp >= sinceTs);
185
+ }
186
+ if (name) {
187
+ points = points.filter((p) => p.labels.agent === name);
188
+ }
189
+ return points;
190
+ }
191
+ /**
192
+ * Reset all metrics
193
+ */
194
+ reset() {
195
+ this.agents.clear();
196
+ this.history = [];
197
+ this.startTime = Date.now();
198
+ }
199
+ /**
200
+ * Get or create agent metrics
201
+ */
202
+ getOrCreate(name) {
203
+ let metrics = this.agents.get(name);
204
+ if (!metrics) {
205
+ metrics = {
206
+ name,
207
+ spawns: 0,
208
+ crashes: 0,
209
+ restarts: 0,
210
+ successfulRestarts: 0,
211
+ failedRestarts: 0,
212
+ currentStatus: 'unknown',
213
+ uptimeMs: 0,
214
+ avgUptimeMs: 0,
215
+ };
216
+ this.agents.set(name, metrics);
217
+ }
218
+ return metrics;
219
+ }
220
+ /**
221
+ * Record a metric point
222
+ */
223
+ record(name, value, labels) {
224
+ const point = {
225
+ name,
226
+ value,
227
+ labels,
228
+ timestamp: Date.now(),
229
+ };
230
+ this.history.push(point);
231
+ // Trim history if too large
232
+ if (this.history.length > this.maxHistorySize) {
233
+ this.history = this.history.slice(-this.maxHistorySize / 2);
234
+ }
235
+ }
236
+ }
237
+ // Singleton instance
238
+ export const metrics = new MetricsCollector();
239
+ //# sourceMappingURL=metrics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics.js","sourceRoot":"","sources":["../src/metrics.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,100 @@
1
+ /**
2
+ * Provider-Specific Context Injection
3
+ *
4
+ * Handles context persistence differently based on the AI provider:
5
+ * - Claude: Uses hooks (PreToolUse, PostToolUse, Stop) to inject/save context
6
+ * - Codex: Uses config settings for periodic context refresh
7
+ * - Gemini: Uses system instruction updates
8
+ */
9
+ import { ContextPersistence, Handoff } from './context-persistence.js';
10
+ export type ProviderType = 'claude' | 'codex' | 'gemini' | 'cursor' | 'generic';
11
+ export interface ProviderContextConfig {
12
+ provider: ProviderType;
13
+ workingDir: string;
14
+ agentName: string;
15
+ task?: string;
16
+ }
17
+ export interface ClaudeHooksConfig {
18
+ hooksDir: string;
19
+ onPreToolUse?: boolean;
20
+ onStop?: boolean;
21
+ contextFile?: string;
22
+ }
23
+ export interface CodexContextConfig {
24
+ configPath: string;
25
+ contextRefreshInterval?: number;
26
+ systemPromptPath?: string;
27
+ }
28
+ /**
29
+ * Base class for provider-specific context handling
30
+ */
31
+ declare abstract class ProviderContextHandler {
32
+ protected persistence: ContextPersistence;
33
+ protected config: ProviderContextConfig;
34
+ constructor(config: ProviderContextConfig);
35
+ abstract setup(): Promise<void>;
36
+ abstract injectContext(handoff: Handoff): Promise<void>;
37
+ abstract saveContext(): Promise<void>;
38
+ abstract cleanup(): Promise<void>;
39
+ protected getState(): import("./context-persistence.js").AgentState | undefined;
40
+ }
41
+ /**
42
+ * Claude Context Handler using Hooks
43
+ *
44
+ * Creates hooks that:
45
+ * - Pre-tool: Inject resumption context before critical operations
46
+ * - Stop: Save state to ledger on session end
47
+ */
48
+ export declare class ClaudeContextHandler extends ProviderContextHandler {
49
+ private hooksConfig;
50
+ constructor(config: ProviderContextConfig, hooksConfig?: Partial<ClaudeHooksConfig>);
51
+ setup(): Promise<void>;
52
+ injectContext(handoff: Handoff): Promise<void>;
53
+ saveContext(): Promise<void>;
54
+ cleanup(): Promise<void>;
55
+ private createStopHookScript;
56
+ }
57
+ /**
58
+ * Codex Context Handler using Config
59
+ *
60
+ * Uses Codex's configuration for:
61
+ * - Periodic context refresh via system prompt updates
62
+ * - History file for context continuity
63
+ */
64
+ export declare class CodexContextHandler extends ProviderContextHandler {
65
+ private codexConfig;
66
+ private refreshInterval?;
67
+ constructor(config: ProviderContextConfig, codexConfig?: Partial<CodexContextConfig>);
68
+ setup(): Promise<void>;
69
+ injectContext(_handoff: Handoff): Promise<void>;
70
+ saveContext(): Promise<void>;
71
+ /**
72
+ * Start periodic context refresh
73
+ */
74
+ startPeriodicRefresh(): void;
75
+ stopPeriodicRefresh(): void;
76
+ cleanup(): Promise<void>;
77
+ }
78
+ /**
79
+ * Gemini Context Handler
80
+ *
81
+ * Uses system instruction file for context injection
82
+ */
83
+ export declare class GeminiContextHandler extends ProviderContextHandler {
84
+ private systemInstructionPath;
85
+ constructor(config: ProviderContextConfig);
86
+ setup(): Promise<void>;
87
+ injectContext(_handoff: Handoff): Promise<void>;
88
+ saveContext(): Promise<void>;
89
+ cleanup(): Promise<void>;
90
+ }
91
+ /**
92
+ * Factory function to create the appropriate context handler
93
+ */
94
+ export declare function createContextHandler(config: ProviderContextConfig, providerOptions?: Record<string, unknown>): ProviderContextHandler;
95
+ /**
96
+ * Detect provider from CLI command
97
+ */
98
+ export declare function detectProvider(cli: string): ProviderType;
99
+ export {};
100
+ //# sourceMappingURL=provider-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-context.d.ts","sourceRoot":"","sources":["../src/provider-context.ts"],"names":[],"mappings":"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"}