agent-relay 1.0.21 → 1.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.
- package/dist/bridge/shadow-cli.d.ts +17 -0
- package/dist/bridge/shadow-cli.d.ts.map +1 -0
- package/dist/bridge/shadow-cli.js +75 -0
- package/dist/bridge/shadow-cli.js.map +1 -0
- package/dist/bridge/shadow-config.d.ts +87 -0
- package/dist/bridge/shadow-config.d.ts.map +1 -0
- package/dist/bridge/shadow-config.js +134 -0
- package/dist/bridge/shadow-config.js.map +1 -0
- package/dist/bridge/spawner.d.ts +15 -1
- package/dist/bridge/spawner.d.ts.map +1 -1
- package/dist/bridge/spawner.js +164 -4
- package/dist/bridge/spawner.js.map +1 -1
- package/dist/bridge/types.d.ts +55 -0
- package/dist/bridge/types.d.ts.map +1 -1
- package/dist/cli/index.js +796 -11
- package/dist/cli/index.js.map +1 -1
- package/dist/cloud/api/auth.d.ts +19 -0
- package/dist/cloud/api/auth.d.ts.map +1 -0
- package/dist/cloud/api/auth.js +216 -0
- package/dist/cloud/api/auth.js.map +1 -0
- package/dist/cloud/api/billing.d.ts +17 -0
- package/dist/cloud/api/billing.d.ts.map +1 -0
- package/dist/cloud/api/billing.js +353 -0
- package/dist/cloud/api/billing.js.map +1 -0
- package/dist/cloud/api/coordinators.d.ts +8 -0
- package/dist/cloud/api/coordinators.d.ts.map +1 -0
- package/dist/cloud/api/coordinators.js +347 -0
- package/dist/cloud/api/coordinators.js.map +1 -0
- package/dist/cloud/api/daemons.d.ts +12 -0
- package/dist/cloud/api/daemons.d.ts.map +1 -0
- package/dist/cloud/api/daemons.js +320 -0
- package/dist/cloud/api/daemons.js.map +1 -0
- package/dist/cloud/api/middleware/planLimits.d.ts +36 -0
- package/dist/cloud/api/middleware/planLimits.d.ts.map +1 -0
- package/dist/cloud/api/middleware/planLimits.js +164 -0
- package/dist/cloud/api/middleware/planLimits.js.map +1 -0
- package/dist/cloud/api/onboarding.d.ts +8 -0
- package/dist/cloud/api/onboarding.d.ts.map +1 -0
- package/dist/cloud/api/onboarding.js +407 -0
- package/dist/cloud/api/onboarding.js.map +1 -0
- package/dist/cloud/api/providers.d.ts +7 -0
- package/dist/cloud/api/providers.d.ts.map +1 -0
- package/dist/cloud/api/providers.js +435 -0
- package/dist/cloud/api/providers.js.map +1 -0
- package/dist/cloud/api/repos.d.ts +7 -0
- package/dist/cloud/api/repos.d.ts.map +1 -0
- package/dist/cloud/api/repos.js +314 -0
- package/dist/cloud/api/repos.js.map +1 -0
- package/dist/cloud/api/teams.d.ts +7 -0
- package/dist/cloud/api/teams.d.ts.map +1 -0
- package/dist/cloud/api/teams.js +279 -0
- package/dist/cloud/api/teams.js.map +1 -0
- package/dist/cloud/api/usage.d.ts +7 -0
- package/dist/cloud/api/usage.d.ts.map +1 -0
- package/dist/cloud/api/usage.js +98 -0
- package/dist/cloud/api/usage.js.map +1 -0
- package/dist/cloud/api/workspaces.d.ts +7 -0
- package/dist/cloud/api/workspaces.d.ts.map +1 -0
- package/dist/cloud/api/workspaces.js +510 -0
- package/dist/cloud/api/workspaces.js.map +1 -0
- package/dist/cloud/billing/index.d.ts +9 -0
- package/dist/cloud/billing/index.d.ts.map +1 -0
- package/dist/cloud/billing/index.js +9 -0
- package/dist/cloud/billing/index.js.map +1 -0
- package/dist/cloud/billing/plans.d.ts +39 -0
- package/dist/cloud/billing/plans.d.ts.map +1 -0
- package/dist/cloud/billing/plans.js +232 -0
- package/dist/cloud/billing/plans.js.map +1 -0
- package/dist/cloud/billing/service.d.ts +80 -0
- package/dist/cloud/billing/service.d.ts.map +1 -0
- package/dist/cloud/billing/service.js +388 -0
- package/dist/cloud/billing/service.js.map +1 -0
- package/dist/cloud/billing/types.d.ts +135 -0
- package/dist/cloud/billing/types.d.ts.map +1 -0
- package/dist/cloud/billing/types.js +7 -0
- package/dist/cloud/billing/types.js.map +1 -0
- package/dist/cloud/config.d.ts +59 -0
- package/dist/cloud/config.d.ts.map +1 -0
- package/dist/cloud/config.js +83 -0
- package/dist/cloud/config.js.map +1 -0
- package/dist/cloud/db/drizzle.d.ts +132 -0
- package/dist/cloud/db/drizzle.d.ts.map +1 -0
- package/dist/cloud/db/drizzle.js +613 -0
- package/dist/cloud/db/drizzle.js.map +1 -0
- package/dist/cloud/db/index.d.ts +30 -0
- package/dist/cloud/db/index.d.ts.map +1 -0
- package/dist/cloud/db/index.js +44 -0
- package/dist/cloud/db/index.js.map +1 -0
- package/dist/cloud/db/schema.d.ts +1792 -0
- package/dist/cloud/db/schema.d.ts.map +1 -0
- package/dist/cloud/db/schema.js +234 -0
- package/dist/cloud/db/schema.js.map +1 -0
- package/dist/cloud/index.d.ts +11 -0
- package/dist/cloud/index.d.ts.map +1 -0
- package/dist/cloud/index.js +37 -0
- package/dist/cloud/index.js.map +1 -0
- package/dist/cloud/provisioner/index.d.ts +51 -0
- package/dist/cloud/provisioner/index.d.ts.map +1 -0
- package/dist/cloud/provisioner/index.js +676 -0
- package/dist/cloud/provisioner/index.js.map +1 -0
- package/dist/cloud/server.d.ts +16 -0
- package/dist/cloud/server.d.ts.map +1 -0
- package/dist/cloud/server.js +190 -0
- package/dist/cloud/server.js.map +1 -0
- package/dist/cloud/services/coordinator.d.ts +62 -0
- package/dist/cloud/services/coordinator.d.ts.map +1 -0
- package/dist/cloud/services/coordinator.js +389 -0
- package/dist/cloud/services/coordinator.js.map +1 -0
- package/dist/cloud/services/planLimits.d.ts +110 -0
- package/dist/cloud/services/planLimits.d.ts.map +1 -0
- package/dist/cloud/services/planLimits.js +254 -0
- package/dist/cloud/services/planLimits.js.map +1 -0
- package/dist/cloud/vault/index.d.ts +76 -0
- package/dist/cloud/vault/index.d.ts.map +1 -0
- package/dist/cloud/vault/index.js +219 -0
- package/dist/cloud/vault/index.js.map +1 -0
- package/dist/daemon/agent-manager.d.ts +87 -0
- package/dist/daemon/agent-manager.d.ts.map +1 -0
- package/dist/daemon/agent-manager.js +412 -0
- package/dist/daemon/agent-manager.js.map +1 -0
- package/dist/daemon/agent-registry.d.ts +2 -0
- package/dist/daemon/agent-registry.d.ts.map +1 -1
- package/dist/daemon/agent-registry.js +3 -0
- package/dist/daemon/agent-registry.js.map +1 -1
- package/dist/daemon/api.d.ts +69 -0
- package/dist/daemon/api.d.ts.map +1 -0
- package/dist/daemon/api.js +425 -0
- package/dist/daemon/api.js.map +1 -0
- package/dist/daemon/cloud-sync.d.ts +101 -0
- package/dist/daemon/cloud-sync.d.ts.map +1 -0
- package/dist/daemon/cloud-sync.js +261 -0
- package/dist/daemon/cloud-sync.js.map +1 -0
- package/dist/daemon/index.d.ts +4 -0
- package/dist/daemon/index.d.ts.map +1 -1
- package/dist/daemon/index.js +6 -0
- package/dist/daemon/index.js.map +1 -1
- package/dist/daemon/orchestrator.d.ts +155 -0
- package/dist/daemon/orchestrator.d.ts.map +1 -0
- package/dist/daemon/orchestrator.js +736 -0
- package/dist/daemon/orchestrator.js.map +1 -0
- package/dist/daemon/router.d.ts +24 -0
- package/dist/daemon/router.d.ts.map +1 -1
- package/dist/daemon/router.js +71 -1
- package/dist/daemon/router.js.map +1 -1
- package/dist/daemon/server.d.ts +37 -0
- package/dist/daemon/server.d.ts.map +1 -1
- package/dist/daemon/server.js +191 -16
- package/dist/daemon/server.js.map +1 -1
- package/dist/daemon/types.d.ts +127 -0
- package/dist/daemon/types.d.ts.map +1 -0
- package/dist/daemon/types.js +6 -0
- package/dist/daemon/types.js.map +1 -0
- package/dist/daemon/workspace-manager.d.ts +75 -0
- package/dist/daemon/workspace-manager.d.ts.map +1 -0
- package/dist/daemon/workspace-manager.js +289 -0
- package/dist/daemon/workspace-manager.js.map +1 -0
- package/dist/dashboard/out/404.html +1 -1
- package/dist/dashboard/out/_next/static/chunks/693-7b3301d8f6bc5014.js +1 -0
- package/dist/dashboard/out/_next/static/chunks/713-f78477eb185f1f4d.js +1 -0
- package/dist/dashboard/out/_next/static/chunks/766-e53e1cfe39b0b5b5.js +1 -0
- package/dist/dashboard/out/_next/static/chunks/900-037c64bfd797fb2a.js +1 -0
- package/dist/dashboard/out/_next/static/chunks/app/app/page-e3d9e1f4466b9bae.js +1 -0
- package/dist/dashboard/out/_next/static/chunks/app/history/page-b6edd4dde8d08194.js +1 -0
- package/dist/dashboard/out/_next/static/chunks/app/layout-2433bb48965f4333.js +1 -0
- package/dist/dashboard/out/_next/static/chunks/app/metrics/page-e68825a81db67ba1.js +1 -0
- package/dist/dashboard/out/_next/static/chunks/app/page-cc108bf68c8a657f.js +1 -0
- package/dist/dashboard/out/_next/static/chunks/app/pricing/page-d80e03a5297f95b6.js +1 -0
- package/dist/dashboard/out/_next/static/chunks/main-app-5d692157a8eb1fd9.js +1 -0
- package/dist/dashboard/out/_next/static/chunks/{main-e0a1f53fe0617a63.js → main-c2f423b9c9f4591b.js} +1 -1
- package/dist/dashboard/out/_next/static/chunks/{webpack-c81f7fd28659d64f.js → webpack-a5acc2831d094776.js} +1 -1
- package/dist/dashboard/out/_next/static/css/79b80143647a07d7.css +1 -0
- package/dist/dashboard/out/_next/static/css/8cf277370ad48cfe.css +1 -0
- package/dist/dashboard/out/alt-logos/agent-relay-logo-128.png +0 -0
- package/dist/dashboard/out/alt-logos/agent-relay-logo-256.png +0 -0
- package/dist/dashboard/out/alt-logos/agent-relay-logo-32.png +0 -0
- package/dist/dashboard/out/alt-logos/agent-relay-logo-512.png +0 -0
- package/dist/dashboard/out/alt-logos/agent-relay-logo-64.png +0 -0
- package/dist/dashboard/out/alt-logos/agent-relay-logo.svg +45 -0
- package/dist/dashboard/out/alt-logos/logo.svg +38 -0
- package/dist/dashboard/out/alt-logos/monogram-logo-128.png +0 -0
- package/dist/dashboard/out/alt-logos/monogram-logo-256.png +0 -0
- package/dist/dashboard/out/alt-logos/monogram-logo-32.png +0 -0
- package/dist/dashboard/out/alt-logos/monogram-logo-512.png +0 -0
- package/dist/dashboard/out/alt-logos/monogram-logo-64.png +0 -0
- package/dist/dashboard/out/alt-logos/monogram-logo.svg +38 -0
- package/dist/dashboard/out/app.html +14 -0
- package/dist/dashboard/out/app.txt +7 -0
- package/dist/dashboard/out/history.html +1 -0
- package/dist/dashboard/out/history.txt +7 -0
- package/dist/dashboard/out/index.html +1 -1
- package/dist/dashboard/out/index.txt +2 -2
- package/dist/dashboard/out/metrics.html +1 -515
- package/dist/dashboard/out/metrics.txt +2 -2
- package/dist/dashboard/out/pricing.html +13 -0
- package/dist/dashboard/out/pricing.txt +7 -0
- package/dist/dashboard-server/metrics.d.ts.map +1 -1
- package/dist/dashboard-server/metrics.js +3 -2
- package/dist/dashboard-server/metrics.js.map +1 -1
- package/dist/dashboard-server/server.d.ts.map +1 -1
- package/dist/dashboard-server/server.js +1279 -56
- package/dist/dashboard-server/server.js.map +1 -1
- package/dist/protocol/types.d.ts +10 -1
- package/dist/protocol/types.d.ts.map +1 -1
- package/dist/resiliency/context-persistence.d.ts +140 -0
- package/dist/resiliency/context-persistence.d.ts.map +1 -0
- package/dist/resiliency/context-persistence.js +397 -0
- package/dist/resiliency/context-persistence.js.map +1 -0
- package/dist/resiliency/health-monitor.d.ts +97 -0
- package/dist/resiliency/health-monitor.d.ts.map +1 -0
- package/dist/resiliency/health-monitor.js +291 -0
- package/dist/resiliency/health-monitor.js.map +1 -0
- package/dist/resiliency/index.d.ts +63 -0
- package/dist/resiliency/index.d.ts.map +1 -0
- package/dist/resiliency/index.js +63 -0
- package/dist/resiliency/index.js.map +1 -0
- package/dist/resiliency/logger.d.ts +114 -0
- package/dist/resiliency/logger.d.ts.map +1 -0
- package/dist/resiliency/logger.js +250 -0
- package/dist/resiliency/logger.js.map +1 -0
- package/dist/resiliency/metrics.d.ts +115 -0
- package/dist/resiliency/metrics.d.ts.map +1 -0
- package/dist/resiliency/metrics.js +239 -0
- package/dist/resiliency/metrics.js.map +1 -0
- package/dist/resiliency/provider-context.d.ts +100 -0
- package/dist/resiliency/provider-context.d.ts.map +1 -0
- package/dist/resiliency/provider-context.js +360 -0
- package/dist/resiliency/provider-context.js.map +1 -0
- package/dist/resiliency/supervisor.d.ts +109 -0
- package/dist/resiliency/supervisor.d.ts.map +1 -0
- package/dist/resiliency/supervisor.js +337 -0
- package/dist/resiliency/supervisor.js.map +1 -0
- package/dist/storage/adapter.d.ts +2 -0
- package/dist/storage/adapter.d.ts.map +1 -1
- package/dist/storage/adapter.js +12 -2
- package/dist/storage/adapter.js.map +1 -1
- package/dist/storage/sqlite-adapter.d.ts.map +1 -1
- package/dist/storage/sqlite-adapter.js +18 -14
- package/dist/storage/sqlite-adapter.js.map +1 -1
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -0
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/logger.d.ts +40 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +84 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/wrapper/client.d.ts +16 -1
- package/dist/wrapper/client.d.ts.map +1 -1
- package/dist/wrapper/client.js +32 -1
- package/dist/wrapper/client.js.map +1 -1
- package/dist/wrapper/parser.d.ts +3 -0
- package/dist/wrapper/parser.d.ts.map +1 -1
- package/dist/wrapper/parser.js +121 -18
- package/dist/wrapper/parser.js.map +1 -1
- package/dist/wrapper/pty-wrapper.d.ts +28 -1
- package/dist/wrapper/pty-wrapper.d.ts.map +1 -1
- package/dist/wrapper/pty-wrapper.js +166 -30
- package/dist/wrapper/pty-wrapper.js.map +1 -1
- package/dist/wrapper/tmux-wrapper.d.ts +5 -0
- package/dist/wrapper/tmux-wrapper.d.ts.map +1 -1
- package/dist/wrapper/tmux-wrapper.js +58 -18
- package/dist/wrapper/tmux-wrapper.js.map +1 -1
- package/docs/CLOUD-ARCHITECTURE.md +652 -0
- package/docs/CLOUD-ONBOARDING-DESIGN.md +1983 -0
- package/docs/TESTING_PRESENCE_FEATURES.md +327 -0
- package/docs/agent-relay-snippet.md +107 -4
- package/docs/guides/CLOUD.md +236 -0
- package/docs/guides/LOCAL.md +535 -0
- package/docs/guides/SELF-HOSTED.md +494 -0
- package/docs/proposals/shadow-as-subagent.md +765 -0
- package/docs/proposals/slack-bot-integration.md +1457 -0
- package/package.json +33 -4
- package/dist/dashboard/out/_next/static/chunks/app/layout-c9d8c5d95e48c6bf.js +0 -1
- package/dist/dashboard/out/_next/static/chunks/app/metrics/page-8aa9936bc6c771ab.js +0 -1
- package/dist/dashboard/out/_next/static/chunks/app/page-49055e5d2b5e34ec.js +0 -1
- package/dist/dashboard/out/_next/static/chunks/main-app-bae2e535de00de50.js +0 -1
- package/dist/dashboard/out/_next/static/css/50ed6996e3df7bdd.css +0 -1
- /package/dist/dashboard/out/_next/static/{gZXwjIKGDKJ0hiTH-HMeJ → 6HHWb2ZmnJ4OSm0zUP7h4}/_buildManifest.js +0 -0
- /package/dist/dashboard/out/_next/static/{gZXwjIKGDKJ0hiTH-HMeJ → 6HHWb2ZmnJ4OSm0zUP7h4}/_ssgManifest.js +0 -0
- /package/dist/dashboard/out/_next/static/chunks/{117-3bef7b19f3e60751.js → 117-b2cd8d6485aacf2b.js} +0 -0
- /package/dist/dashboard/out/_next/static/chunks/{648-6cf686106c891ad3.js → 648-8f3f26864ce515e5.js} +0 -0
- /package/dist/dashboard/out/_next/static/chunks/app/_not-found/{page-8ff6572bc7c9bc61.js → page-0b990dbb71d72a98.js} +0 -0
- /package/dist/dashboard/out/_next/static/chunks/{fd9d1056-26bd8d656b496dba.js → fd9d1056-bf46c09eb57e019c.js} +0 -0
|
@@ -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' | '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/resiliency/provider-context.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,360 @@
|
|
|
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 * as fs from 'fs';
|
|
10
|
+
import * as path from 'path';
|
|
11
|
+
import { createLogger } from './logger.js';
|
|
12
|
+
import { getContextPersistence } from './context-persistence.js';
|
|
13
|
+
const logger = createLogger('provider-context');
|
|
14
|
+
/**
|
|
15
|
+
* Base class for provider-specific context handling
|
|
16
|
+
*/
|
|
17
|
+
class ProviderContextHandler {
|
|
18
|
+
persistence;
|
|
19
|
+
config;
|
|
20
|
+
constructor(config) {
|
|
21
|
+
this.config = config;
|
|
22
|
+
this.persistence = getContextPersistence(path.join(config.workingDir, '.agent-relay', 'context'));
|
|
23
|
+
}
|
|
24
|
+
getState() {
|
|
25
|
+
return this.persistence.getState(this.config.agentName);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Claude Context Handler using Hooks
|
|
30
|
+
*
|
|
31
|
+
* Creates hooks that:
|
|
32
|
+
* - Pre-tool: Inject resumption context before critical operations
|
|
33
|
+
* - Stop: Save state to ledger on session end
|
|
34
|
+
*/
|
|
35
|
+
export class ClaudeContextHandler extends ProviderContextHandler {
|
|
36
|
+
hooksConfig;
|
|
37
|
+
constructor(config, hooksConfig) {
|
|
38
|
+
super(config);
|
|
39
|
+
this.hooksConfig = {
|
|
40
|
+
hooksDir: path.join(config.workingDir, '.claude', 'hooks'),
|
|
41
|
+
onPreToolUse: true,
|
|
42
|
+
onStop: true,
|
|
43
|
+
contextFile: path.join(config.workingDir, 'CLAUDE.md'),
|
|
44
|
+
...hooksConfig,
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
async setup() {
|
|
48
|
+
// Ensure hooks directory exists
|
|
49
|
+
if (!fs.existsSync(this.hooksConfig.hooksDir)) {
|
|
50
|
+
fs.mkdirSync(this.hooksConfig.hooksDir, { recursive: true });
|
|
51
|
+
}
|
|
52
|
+
// Create or update settings.json with hook configuration
|
|
53
|
+
const settingsPath = path.join(this.config.workingDir, '.claude', 'settings.json');
|
|
54
|
+
let settings = {};
|
|
55
|
+
if (fs.existsSync(settingsPath)) {
|
|
56
|
+
try {
|
|
57
|
+
settings = JSON.parse(fs.readFileSync(settingsPath, 'utf8'));
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
// Start fresh if invalid
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
// Configure hooks
|
|
64
|
+
const hooks = settings.hooks || {};
|
|
65
|
+
if (this.hooksConfig.onStop) {
|
|
66
|
+
// Stop hook to save context
|
|
67
|
+
const stopHookScript = this.createStopHookScript();
|
|
68
|
+
const stopHookPath = path.join(this.hooksConfig.hooksDir, 'save-context.sh');
|
|
69
|
+
fs.writeFileSync(stopHookPath, stopHookScript, { mode: 0o755 });
|
|
70
|
+
hooks.Stop = hooks.Stop || [];
|
|
71
|
+
const stopHookEntry = {
|
|
72
|
+
matcher: '',
|
|
73
|
+
hooks: [{ type: 'command', command: stopHookPath }],
|
|
74
|
+
};
|
|
75
|
+
// Only add if not already present
|
|
76
|
+
if (!hooks.Stop.some((h) => {
|
|
77
|
+
const entry = h;
|
|
78
|
+
return entry.hooks?.[0]?.command === stopHookPath;
|
|
79
|
+
})) {
|
|
80
|
+
hooks.Stop.push(stopHookEntry);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
settings.hooks = hooks;
|
|
84
|
+
// Write updated settings
|
|
85
|
+
const settingsDir = path.dirname(settingsPath);
|
|
86
|
+
if (!fs.existsSync(settingsDir)) {
|
|
87
|
+
fs.mkdirSync(settingsDir, { recursive: true });
|
|
88
|
+
}
|
|
89
|
+
fs.writeFileSync(settingsPath, JSON.stringify(settings, null, 2));
|
|
90
|
+
logger.info('Claude hooks configured', {
|
|
91
|
+
hooksDir: this.hooksConfig.hooksDir,
|
|
92
|
+
onStop: this.hooksConfig.onStop,
|
|
93
|
+
});
|
|
94
|
+
}
|
|
95
|
+
async injectContext(handoff) {
|
|
96
|
+
if (!this.hooksConfig.contextFile)
|
|
97
|
+
return;
|
|
98
|
+
// Read existing CLAUDE.md
|
|
99
|
+
let existingContent = '';
|
|
100
|
+
if (fs.existsSync(this.hooksConfig.contextFile)) {
|
|
101
|
+
existingContent = fs.readFileSync(this.hooksConfig.contextFile, 'utf8');
|
|
102
|
+
}
|
|
103
|
+
// Generate resumption context
|
|
104
|
+
const resumptionContext = this.persistence.generateResumptionContext(this.config.agentName);
|
|
105
|
+
if (!resumptionContext)
|
|
106
|
+
return;
|
|
107
|
+
// Check if we already have resumption context
|
|
108
|
+
const marker = '<!-- AGENT_RESUMPTION_CONTEXT -->';
|
|
109
|
+
const endMarker = '<!-- END_AGENT_RESUMPTION_CONTEXT -->';
|
|
110
|
+
let newContent;
|
|
111
|
+
if (existingContent.includes(marker)) {
|
|
112
|
+
// Replace existing context
|
|
113
|
+
const regex = new RegExp(`${marker}[\\s\\S]*?${endMarker}`, 'g');
|
|
114
|
+
newContent = existingContent.replace(regex, `${marker}\n${resumptionContext}\n${endMarker}`);
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
// Prepend context
|
|
118
|
+
newContent = `${marker}\n${resumptionContext}\n${endMarker}\n\n${existingContent}`;
|
|
119
|
+
}
|
|
120
|
+
fs.writeFileSync(this.hooksConfig.contextFile, newContent);
|
|
121
|
+
logger.info('Injected resumption context into CLAUDE.md', {
|
|
122
|
+
agent: this.config.agentName,
|
|
123
|
+
handoffId: handoff.fromAgent,
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
async saveContext() {
|
|
127
|
+
this.persistence.checkpoint(this.config.agentName);
|
|
128
|
+
logger.info('Saved Claude context checkpoint', { agent: this.config.agentName });
|
|
129
|
+
}
|
|
130
|
+
async cleanup() {
|
|
131
|
+
// Optionally remove the resumption context from CLAUDE.md
|
|
132
|
+
if (this.hooksConfig.contextFile && fs.existsSync(this.hooksConfig.contextFile)) {
|
|
133
|
+
const content = fs.readFileSync(this.hooksConfig.contextFile, 'utf8');
|
|
134
|
+
const marker = '<!-- AGENT_RESUMPTION_CONTEXT -->';
|
|
135
|
+
const endMarker = '<!-- END_AGENT_RESUMPTION_CONTEXT -->';
|
|
136
|
+
const regex = new RegExp(`${marker}[\\s\\S]*?${endMarker}\\n*`, 'g');
|
|
137
|
+
const cleaned = content.replace(regex, '');
|
|
138
|
+
fs.writeFileSync(this.hooksConfig.contextFile, cleaned);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
createStopHookScript() {
|
|
142
|
+
const contextDir = path.join(this.config.workingDir, '.agent-relay', 'context');
|
|
143
|
+
return `#!/bin/bash
|
|
144
|
+
# Claude Code Stop Hook - Save agent context
|
|
145
|
+
# Generated by agent-relay
|
|
146
|
+
|
|
147
|
+
AGENT_NAME="${this.config.agentName}"
|
|
148
|
+
CONTEXT_DIR="${contextDir}"
|
|
149
|
+
|
|
150
|
+
# Read hook input from stdin
|
|
151
|
+
read -r INPUT
|
|
152
|
+
|
|
153
|
+
# Save checkpoint marker
|
|
154
|
+
mkdir -p "$CONTEXT_DIR/ledgers"
|
|
155
|
+
echo '{"event":"stop","timestamp":"'$(date -Iseconds)'","agent":"'$AGENT_NAME'"}' >> "$CONTEXT_DIR/ledgers/events.jsonl"
|
|
156
|
+
|
|
157
|
+
# Exit successfully (don't block stop)
|
|
158
|
+
exit 0
|
|
159
|
+
`;
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Codex Context Handler using Config
|
|
164
|
+
*
|
|
165
|
+
* Uses Codex's configuration for:
|
|
166
|
+
* - Periodic context refresh via system prompt updates
|
|
167
|
+
* - History file for context continuity
|
|
168
|
+
*/
|
|
169
|
+
export class CodexContextHandler extends ProviderContextHandler {
|
|
170
|
+
codexConfig;
|
|
171
|
+
refreshInterval;
|
|
172
|
+
constructor(config, codexConfig) {
|
|
173
|
+
super(config);
|
|
174
|
+
this.codexConfig = {
|
|
175
|
+
configPath: path.join(config.workingDir, '.codex', 'config.json'),
|
|
176
|
+
contextRefreshInterval: 60000, // 1 minute default
|
|
177
|
+
systemPromptPath: path.join(config.workingDir, '.codex', 'system-prompt.md'),
|
|
178
|
+
...codexConfig,
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
async setup() {
|
|
182
|
+
const configDir = path.dirname(this.codexConfig.configPath);
|
|
183
|
+
if (!fs.existsSync(configDir)) {
|
|
184
|
+
fs.mkdirSync(configDir, { recursive: true });
|
|
185
|
+
}
|
|
186
|
+
// Read or create config
|
|
187
|
+
let config = {};
|
|
188
|
+
if (fs.existsSync(this.codexConfig.configPath)) {
|
|
189
|
+
try {
|
|
190
|
+
config = JSON.parse(fs.readFileSync(this.codexConfig.configPath, 'utf8'));
|
|
191
|
+
}
|
|
192
|
+
catch {
|
|
193
|
+
// Start fresh
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
// Set up context-aware configuration
|
|
197
|
+
config.history = config.history || {};
|
|
198
|
+
config.history.save_history = true;
|
|
199
|
+
config.history.max_history_size = 1000;
|
|
200
|
+
// Point to our system prompt if using custom context
|
|
201
|
+
if (this.codexConfig.systemPromptPath) {
|
|
202
|
+
config.system_prompt_file = this.codexConfig.systemPromptPath;
|
|
203
|
+
}
|
|
204
|
+
fs.writeFileSync(this.codexConfig.configPath, JSON.stringify(config, null, 2));
|
|
205
|
+
logger.info('Codex config configured', {
|
|
206
|
+
configPath: this.codexConfig.configPath,
|
|
207
|
+
refreshInterval: this.codexConfig.contextRefreshInterval,
|
|
208
|
+
});
|
|
209
|
+
}
|
|
210
|
+
async injectContext(_handoff) {
|
|
211
|
+
if (!this.codexConfig.systemPromptPath)
|
|
212
|
+
return;
|
|
213
|
+
// Generate resumption context
|
|
214
|
+
const resumptionContext = this.persistence.generateResumptionContext(this.config.agentName);
|
|
215
|
+
if (!resumptionContext)
|
|
216
|
+
return;
|
|
217
|
+
// Read existing system prompt
|
|
218
|
+
let existingPrompt = '';
|
|
219
|
+
if (fs.existsSync(this.codexConfig.systemPromptPath)) {
|
|
220
|
+
existingPrompt = fs.readFileSync(this.codexConfig.systemPromptPath, 'utf8');
|
|
221
|
+
}
|
|
222
|
+
// Add/update resumption context
|
|
223
|
+
const marker = '<!-- AGENT_RESUMPTION_CONTEXT -->';
|
|
224
|
+
const endMarker = '<!-- END_AGENT_RESUMPTION_CONTEXT -->';
|
|
225
|
+
let newPrompt;
|
|
226
|
+
if (existingPrompt.includes(marker)) {
|
|
227
|
+
const regex = new RegExp(`${marker}[\\s\\S]*?${endMarker}`, 'g');
|
|
228
|
+
newPrompt = existingPrompt.replace(regex, `${marker}\n${resumptionContext}\n${endMarker}`);
|
|
229
|
+
}
|
|
230
|
+
else {
|
|
231
|
+
newPrompt = `${marker}\n${resumptionContext}\n${endMarker}\n\n${existingPrompt}`;
|
|
232
|
+
}
|
|
233
|
+
fs.writeFileSync(this.codexConfig.systemPromptPath, newPrompt);
|
|
234
|
+
logger.info('Injected resumption context into Codex system prompt', {
|
|
235
|
+
agent: this.config.agentName,
|
|
236
|
+
});
|
|
237
|
+
}
|
|
238
|
+
async saveContext() {
|
|
239
|
+
this.persistence.checkpoint(this.config.agentName);
|
|
240
|
+
logger.info('Saved Codex context checkpoint', { agent: this.config.agentName });
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Start periodic context refresh
|
|
244
|
+
*/
|
|
245
|
+
startPeriodicRefresh() {
|
|
246
|
+
if (this.refreshInterval)
|
|
247
|
+
return;
|
|
248
|
+
this.refreshInterval = setInterval(async () => {
|
|
249
|
+
const handoff = this.persistence.createHandoff(this.config.agentName);
|
|
250
|
+
await this.injectContext(handoff);
|
|
251
|
+
}, this.codexConfig.contextRefreshInterval);
|
|
252
|
+
logger.info('Started periodic context refresh for Codex', {
|
|
253
|
+
interval: this.codexConfig.contextRefreshInterval,
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
stopPeriodicRefresh() {
|
|
257
|
+
if (this.refreshInterval) {
|
|
258
|
+
clearInterval(this.refreshInterval);
|
|
259
|
+
this.refreshInterval = undefined;
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
async cleanup() {
|
|
263
|
+
this.stopPeriodicRefresh();
|
|
264
|
+
if (this.codexConfig.systemPromptPath && fs.existsSync(this.codexConfig.systemPromptPath)) {
|
|
265
|
+
const content = fs.readFileSync(this.codexConfig.systemPromptPath, 'utf8');
|
|
266
|
+
const marker = '<!-- AGENT_RESUMPTION_CONTEXT -->';
|
|
267
|
+
const endMarker = '<!-- END_AGENT_RESUMPTION_CONTEXT -->';
|
|
268
|
+
const regex = new RegExp(`${marker}[\\s\\S]*?${endMarker}\\n*`, 'g');
|
|
269
|
+
const cleaned = content.replace(regex, '');
|
|
270
|
+
fs.writeFileSync(this.codexConfig.systemPromptPath, cleaned);
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
/**
|
|
275
|
+
* Gemini Context Handler
|
|
276
|
+
*
|
|
277
|
+
* Uses system instruction file for context injection
|
|
278
|
+
*/
|
|
279
|
+
export class GeminiContextHandler extends ProviderContextHandler {
|
|
280
|
+
systemInstructionPath;
|
|
281
|
+
constructor(config) {
|
|
282
|
+
super(config);
|
|
283
|
+
this.systemInstructionPath = path.join(config.workingDir, '.gemini', 'system-instruction.md');
|
|
284
|
+
}
|
|
285
|
+
async setup() {
|
|
286
|
+
const dir = path.dirname(this.systemInstructionPath);
|
|
287
|
+
if (!fs.existsSync(dir)) {
|
|
288
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
289
|
+
}
|
|
290
|
+
logger.info('Gemini context handler configured', {
|
|
291
|
+
systemInstructionPath: this.systemInstructionPath,
|
|
292
|
+
});
|
|
293
|
+
}
|
|
294
|
+
async injectContext(_handoff) {
|
|
295
|
+
const resumptionContext = this.persistence.generateResumptionContext(this.config.agentName);
|
|
296
|
+
if (!resumptionContext)
|
|
297
|
+
return;
|
|
298
|
+
let existingContent = '';
|
|
299
|
+
if (fs.existsSync(this.systemInstructionPath)) {
|
|
300
|
+
existingContent = fs.readFileSync(this.systemInstructionPath, 'utf8');
|
|
301
|
+
}
|
|
302
|
+
const marker = '<!-- AGENT_RESUMPTION_CONTEXT -->';
|
|
303
|
+
const endMarker = '<!-- END_AGENT_RESUMPTION_CONTEXT -->';
|
|
304
|
+
let newContent;
|
|
305
|
+
if (existingContent.includes(marker)) {
|
|
306
|
+
const regex = new RegExp(`${marker}[\\s\\S]*?${endMarker}`, 'g');
|
|
307
|
+
newContent = existingContent.replace(regex, `${marker}\n${resumptionContext}\n${endMarker}`);
|
|
308
|
+
}
|
|
309
|
+
else {
|
|
310
|
+
newContent = `${marker}\n${resumptionContext}\n${endMarker}\n\n${existingContent}`;
|
|
311
|
+
}
|
|
312
|
+
fs.writeFileSync(this.systemInstructionPath, newContent);
|
|
313
|
+
logger.info('Injected resumption context for Gemini', { agent: this.config.agentName });
|
|
314
|
+
}
|
|
315
|
+
async saveContext() {
|
|
316
|
+
this.persistence.checkpoint(this.config.agentName);
|
|
317
|
+
}
|
|
318
|
+
async cleanup() {
|
|
319
|
+
if (fs.existsSync(this.systemInstructionPath)) {
|
|
320
|
+
const content = fs.readFileSync(this.systemInstructionPath, 'utf8');
|
|
321
|
+
const marker = '<!-- AGENT_RESUMPTION_CONTEXT -->';
|
|
322
|
+
const endMarker = '<!-- END_AGENT_RESUMPTION_CONTEXT -->';
|
|
323
|
+
const regex = new RegExp(`${marker}[\\s\\S]*?${endMarker}\\n*`, 'g');
|
|
324
|
+
const cleaned = content.replace(regex, '');
|
|
325
|
+
fs.writeFileSync(this.systemInstructionPath, cleaned);
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
/**
|
|
330
|
+
* Factory function to create the appropriate context handler
|
|
331
|
+
*/
|
|
332
|
+
export function createContextHandler(config, providerOptions) {
|
|
333
|
+
switch (config.provider) {
|
|
334
|
+
case 'claude':
|
|
335
|
+
return new ClaudeContextHandler(config, providerOptions);
|
|
336
|
+
case 'codex':
|
|
337
|
+
return new CodexContextHandler(config, providerOptions);
|
|
338
|
+
case 'gemini':
|
|
339
|
+
return new GeminiContextHandler(config);
|
|
340
|
+
default:
|
|
341
|
+
// Generic handler - use Claude-style CLAUDE.md injection
|
|
342
|
+
return new ClaudeContextHandler(config, {
|
|
343
|
+
contextFile: path.join(config.workingDir, 'AGENT_CONTEXT.md'),
|
|
344
|
+
});
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
/**
|
|
348
|
+
* Detect provider from CLI command
|
|
349
|
+
*/
|
|
350
|
+
export function detectProvider(cli) {
|
|
351
|
+
const cmd = cli.toLowerCase();
|
|
352
|
+
if (cmd.includes('claude'))
|
|
353
|
+
return 'claude';
|
|
354
|
+
if (cmd.includes('codex'))
|
|
355
|
+
return 'codex';
|
|
356
|
+
if (cmd.includes('gemini'))
|
|
357
|
+
return 'gemini';
|
|
358
|
+
return 'generic';
|
|
359
|
+
}
|
|
360
|
+
//# sourceMappingURL=provider-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-context.js","sourceRoot":"","sources":["../../src/resiliency/provider-context.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agent Supervisor
|
|
3
|
+
*
|
|
4
|
+
* High-level supervisor that combines health monitoring, logging, and metrics
|
|
5
|
+
* to provide comprehensive agent resiliency.
|
|
6
|
+
*/
|
|
7
|
+
import { EventEmitter } from 'events';
|
|
8
|
+
import { AgentHealthMonitor, HealthMonitorConfig } from './health-monitor.js';
|
|
9
|
+
import { LogLevel } from './logger.js';
|
|
10
|
+
import { metrics } from './metrics.js';
|
|
11
|
+
import { ProviderType } from './provider-context.js';
|
|
12
|
+
export interface SupervisedAgent {
|
|
13
|
+
name: string;
|
|
14
|
+
cli: string;
|
|
15
|
+
task?: string;
|
|
16
|
+
pid: number;
|
|
17
|
+
logFile?: string;
|
|
18
|
+
spawnedAt: Date;
|
|
19
|
+
workingDir?: string;
|
|
20
|
+
provider?: ProviderType;
|
|
21
|
+
}
|
|
22
|
+
export interface SupervisorConfig {
|
|
23
|
+
healthCheck: Partial<HealthMonitorConfig>;
|
|
24
|
+
logging: {
|
|
25
|
+
level: LogLevel;
|
|
26
|
+
file?: string;
|
|
27
|
+
};
|
|
28
|
+
autoRestart: boolean;
|
|
29
|
+
maxRestarts: number;
|
|
30
|
+
notifyOnCrash: boolean;
|
|
31
|
+
contextPersistence: {
|
|
32
|
+
enabled: boolean;
|
|
33
|
+
baseDir?: string;
|
|
34
|
+
autoInjectOnRestart: boolean;
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
export declare class AgentSupervisor extends EventEmitter {
|
|
38
|
+
private config;
|
|
39
|
+
private healthMonitor;
|
|
40
|
+
private logger;
|
|
41
|
+
private agents;
|
|
42
|
+
private restarters;
|
|
43
|
+
private contextPersistence?;
|
|
44
|
+
private contextHandlers;
|
|
45
|
+
constructor(config?: Partial<SupervisorConfig>);
|
|
46
|
+
/**
|
|
47
|
+
* Start supervising agents
|
|
48
|
+
*/
|
|
49
|
+
start(): void;
|
|
50
|
+
/**
|
|
51
|
+
* Stop supervising agents
|
|
52
|
+
*/
|
|
53
|
+
stop(): void;
|
|
54
|
+
/**
|
|
55
|
+
* Add an agent to supervision
|
|
56
|
+
*/
|
|
57
|
+
supervise(agent: SupervisedAgent, options: {
|
|
58
|
+
isAlive: () => boolean;
|
|
59
|
+
kill: (signal?: string) => void;
|
|
60
|
+
restart: () => Promise<void>;
|
|
61
|
+
sendHealthCheck?: () => Promise<boolean>;
|
|
62
|
+
}): void;
|
|
63
|
+
/**
|
|
64
|
+
* Remove an agent from supervision
|
|
65
|
+
*/
|
|
66
|
+
unsupervise(name: string): void;
|
|
67
|
+
/**
|
|
68
|
+
* Update agent info (e.g., after restart)
|
|
69
|
+
*/
|
|
70
|
+
updateAgent(name: string, updates: Partial<SupervisedAgent>): void;
|
|
71
|
+
/**
|
|
72
|
+
* Get all supervised agents
|
|
73
|
+
*/
|
|
74
|
+
getAgents(): SupervisedAgent[];
|
|
75
|
+
/**
|
|
76
|
+
* Get agent status
|
|
77
|
+
*/
|
|
78
|
+
getStatus(name: string): {
|
|
79
|
+
agent?: SupervisedAgent;
|
|
80
|
+
health?: ReturnType<AgentHealthMonitor['get']>;
|
|
81
|
+
metrics?: ReturnType<typeof metrics.getAgentMetrics>;
|
|
82
|
+
};
|
|
83
|
+
/**
|
|
84
|
+
* Get overall supervisor status
|
|
85
|
+
*/
|
|
86
|
+
getOverallStatus(): {
|
|
87
|
+
agents: SupervisedAgent[];
|
|
88
|
+
health: ReturnType<AgentHealthMonitor['getAll']>;
|
|
89
|
+
systemMetrics: ReturnType<typeof metrics.getSystemMetrics>;
|
|
90
|
+
};
|
|
91
|
+
/**
|
|
92
|
+
* Force restart an agent
|
|
93
|
+
*/
|
|
94
|
+
forceRestart(name: string): Promise<void>;
|
|
95
|
+
/**
|
|
96
|
+
* Setup event handlers for health monitor
|
|
97
|
+
*/
|
|
98
|
+
private setupHealthMonitorEvents;
|
|
99
|
+
/**
|
|
100
|
+
* Send notification about agent crash
|
|
101
|
+
*/
|
|
102
|
+
private notifyCrash;
|
|
103
|
+
/**
|
|
104
|
+
* Send notification about permanently dead agent
|
|
105
|
+
*/
|
|
106
|
+
private notifyDead;
|
|
107
|
+
}
|
|
108
|
+
export declare function getSupervisor(config?: Partial<SupervisorConfig>): AgentSupervisor;
|
|
109
|
+
//# sourceMappingURL=supervisor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"supervisor.d.ts","sourceRoot":"","sources":["../../src/resiliency/supervisor.ts"],"names":[],"mappings":"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"}
|