zora-agent 0.9.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/CHANGELOG.md +145 -0
- package/LICENSE +21 -0
- package/README.md +159 -0
- package/dist/cli/audit-commands.d.ts +8 -0
- package/dist/cli/audit-commands.d.ts.map +1 -0
- package/dist/cli/audit-commands.js +67 -0
- package/dist/cli/audit-commands.js.map +1 -0
- package/dist/cli/daemon.d.ts +9 -0
- package/dist/cli/daemon.d.ts.map +1 -0
- package/dist/cli/daemon.js +107 -0
- package/dist/cli/daemon.js.map +1 -0
- package/dist/cli/doctor.d.ts +21 -0
- package/dist/cli/doctor.d.ts.map +1 -0
- package/dist/cli/doctor.js +31 -0
- package/dist/cli/doctor.js.map +1 -0
- package/dist/cli/edit-commands.d.ts +8 -0
- package/dist/cli/edit-commands.d.ts.map +1 -0
- package/dist/cli/edit-commands.js +46 -0
- package/dist/cli/edit-commands.js.map +1 -0
- package/dist/cli/index.d.ts +11 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +319 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/init-command.d.ts +30 -0
- package/dist/cli/init-command.d.ts.map +1 -0
- package/dist/cli/init-command.js +425 -0
- package/dist/cli/init-command.js.map +1 -0
- package/dist/cli/memory-commands.d.ts +11 -0
- package/dist/cli/memory-commands.d.ts.map +1 -0
- package/dist/cli/memory-commands.js +57 -0
- package/dist/cli/memory-commands.js.map +1 -0
- package/dist/cli/presets.d.ts +12 -0
- package/dist/cli/presets.d.ts.map +1 -0
- package/dist/cli/presets.js +169 -0
- package/dist/cli/presets.js.map +1 -0
- package/dist/cli/skill-commands.d.ts +10 -0
- package/dist/cli/skill-commands.d.ts.map +1 -0
- package/dist/cli/skill-commands.js +73 -0
- package/dist/cli/skill-commands.js.map +1 -0
- package/dist/cli/steer-commands.d.ts +10 -0
- package/dist/cli/steer-commands.d.ts.map +1 -0
- package/dist/cli/steer-commands.js +92 -0
- package/dist/cli/steer-commands.js.map +1 -0
- package/dist/cli/team-commands.d.ts +8 -0
- package/dist/cli/team-commands.d.ts.map +1 -0
- package/dist/cli/team-commands.js +93 -0
- package/dist/cli/team-commands.js.map +1 -0
- package/dist/config/defaults.d.ts +26 -0
- package/dist/config/defaults.d.ts.map +1 -0
- package/dist/config/defaults.js +173 -0
- package/dist/config/defaults.js.map +1 -0
- package/dist/config/index.d.ts +3 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +3 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/loader.d.ts +30 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +130 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/policy-loader.d.ts +18 -0
- package/dist/config/policy-loader.d.ts.map +1 -0
- package/dist/config/policy-loader.js +72 -0
- package/dist/config/policy-loader.js.map +1 -0
- package/dist/dashboard/auth-middleware.d.ts +15 -0
- package/dist/dashboard/auth-middleware.d.ts.map +1 -0
- package/dist/dashboard/auth-middleware.js +44 -0
- package/dist/dashboard/auth-middleware.js.map +1 -0
- package/dist/dashboard/frontend/vite.config.d.ts +3 -0
- package/dist/dashboard/frontend/vite.config.d.ts.map +1 -0
- package/dist/dashboard/frontend/vite.config.js +11 -0
- package/dist/dashboard/frontend/vite.config.js.map +1 -0
- package/dist/dashboard/server.d.ts +55 -0
- package/dist/dashboard/server.d.ts.map +1 -0
- package/dist/dashboard/server.js +254 -0
- package/dist/dashboard/server.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +19 -0
- package/dist/index.js.map +1 -0
- package/dist/memory/category-organizer.d.ts +33 -0
- package/dist/memory/category-organizer.d.ts.map +1 -0
- package/dist/memory/category-organizer.js +137 -0
- package/dist/memory/category-organizer.js.map +1 -0
- package/dist/memory/extraction-pipeline.d.ts +22 -0
- package/dist/memory/extraction-pipeline.d.ts.map +1 -0
- package/dist/memory/extraction-pipeline.js +156 -0
- package/dist/memory/extraction-pipeline.js.map +1 -0
- package/dist/memory/index.d.ts +7 -0
- package/dist/memory/index.d.ts.map +1 -0
- package/dist/memory/index.js +7 -0
- package/dist/memory/index.js.map +1 -0
- package/dist/memory/memory-manager.d.ts +56 -0
- package/dist/memory/memory-manager.d.ts.map +1 -0
- package/dist/memory/memory-manager.js +198 -0
- package/dist/memory/memory-manager.js.map +1 -0
- package/dist/memory/memory-types.d.ts +44 -0
- package/dist/memory/memory-types.d.ts.map +1 -0
- package/dist/memory/memory-types.js +8 -0
- package/dist/memory/memory-types.js.map +1 -0
- package/dist/memory/salience-scorer.d.ts +19 -0
- package/dist/memory/salience-scorer.d.ts.map +1 -0
- package/dist/memory/salience-scorer.js +72 -0
- package/dist/memory/salience-scorer.js.map +1 -0
- package/dist/memory/structured-memory.d.ts +28 -0
- package/dist/memory/structured-memory.d.ts.map +1 -0
- package/dist/memory/structured-memory.js +140 -0
- package/dist/memory/structured-memory.js.map +1 -0
- package/dist/orchestrator/auth-monitor.d.ts +28 -0
- package/dist/orchestrator/auth-monitor.d.ts.map +1 -0
- package/dist/orchestrator/auth-monitor.js +49 -0
- package/dist/orchestrator/auth-monitor.js.map +1 -0
- package/dist/orchestrator/execution-loop.d.ts +59 -0
- package/dist/orchestrator/execution-loop.d.ts.map +1 -0
- package/dist/orchestrator/execution-loop.js +94 -0
- package/dist/orchestrator/execution-loop.js.map +1 -0
- package/dist/orchestrator/failover-controller.d.ts +32 -0
- package/dist/orchestrator/failover-controller.d.ts.map +1 -0
- package/dist/orchestrator/failover-controller.js +111 -0
- package/dist/orchestrator/failover-controller.js.map +1 -0
- package/dist/orchestrator/index.d.ts +11 -0
- package/dist/orchestrator/index.d.ts.map +1 -0
- package/dist/orchestrator/index.js +11 -0
- package/dist/orchestrator/index.js.map +1 -0
- package/dist/orchestrator/orchestrator.d.ts +99 -0
- package/dist/orchestrator/orchestrator.d.ts.map +1 -0
- package/dist/orchestrator/orchestrator.js +456 -0
- package/dist/orchestrator/orchestrator.js.map +1 -0
- package/dist/orchestrator/retry-queue.d.ts +39 -0
- package/dist/orchestrator/retry-queue.d.ts.map +1 -0
- package/dist/orchestrator/retry-queue.js +99 -0
- package/dist/orchestrator/retry-queue.js.map +1 -0
- package/dist/orchestrator/router.d.ts +49 -0
- package/dist/orchestrator/router.d.ts.map +1 -0
- package/dist/orchestrator/router.js +167 -0
- package/dist/orchestrator/router.js.map +1 -0
- package/dist/orchestrator/session-manager.d.ts +39 -0
- package/dist/orchestrator/session-manager.d.ts.map +1 -0
- package/dist/orchestrator/session-manager.js +117 -0
- package/dist/orchestrator/session-manager.js.map +1 -0
- package/dist/providers/claude-provider.d.ts +182 -0
- package/dist/providers/claude-provider.d.ts.map +1 -0
- package/dist/providers/claude-provider.js +443 -0
- package/dist/providers/claude-provider.js.map +1 -0
- package/dist/providers/gemini-provider.d.ts +46 -0
- package/dist/providers/gemini-provider.d.ts.map +1 -0
- package/dist/providers/gemini-provider.js +336 -0
- package/dist/providers/gemini-provider.js.map +1 -0
- package/dist/providers/index.d.ts +10 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +10 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/ollama-provider.d.ts +61 -0
- package/dist/providers/ollama-provider.d.ts.map +1 -0
- package/dist/providers/ollama-provider.js +319 -0
- package/dist/providers/ollama-provider.js.map +1 -0
- package/dist/routines/event-triggers.d.ts +34 -0
- package/dist/routines/event-triggers.d.ts.map +1 -0
- package/dist/routines/event-triggers.js +104 -0
- package/dist/routines/event-triggers.js.map +1 -0
- package/dist/routines/heartbeat.d.ts +35 -0
- package/dist/routines/heartbeat.d.ts.map +1 -0
- package/dist/routines/heartbeat.js +93 -0
- package/dist/routines/heartbeat.js.map +1 -0
- package/dist/routines/index.d.ts +7 -0
- package/dist/routines/index.d.ts.map +1 -0
- package/dist/routines/index.js +7 -0
- package/dist/routines/index.js.map +1 -0
- package/dist/routines/routine-manager.d.ts +62 -0
- package/dist/routines/routine-manager.d.ts.map +1 -0
- package/dist/routines/routine-manager.js +148 -0
- package/dist/routines/routine-manager.js.map +1 -0
- package/dist/security/audit-logger.d.ts +55 -0
- package/dist/security/audit-logger.d.ts.map +1 -0
- package/dist/security/audit-logger.js +252 -0
- package/dist/security/audit-logger.js.map +1 -0
- package/dist/security/capability-tokens.d.ts +30 -0
- package/dist/security/capability-tokens.d.ts.map +1 -0
- package/dist/security/capability-tokens.js +110 -0
- package/dist/security/capability-tokens.js.map +1 -0
- package/dist/security/index.d.ts +18 -0
- package/dist/security/index.d.ts.map +1 -0
- package/dist/security/index.js +12 -0
- package/dist/security/index.js.map +1 -0
- package/dist/security/integrity-guardian.d.ts +43 -0
- package/dist/security/integrity-guardian.d.ts.map +1 -0
- package/dist/security/integrity-guardian.js +103 -0
- package/dist/security/integrity-guardian.js.map +1 -0
- package/dist/security/intent-capsule.d.ts +52 -0
- package/dist/security/intent-capsule.d.ts.map +1 -0
- package/dist/security/intent-capsule.js +157 -0
- package/dist/security/intent-capsule.js.map +1 -0
- package/dist/security/leak-detector.d.ts +26 -0
- package/dist/security/leak-detector.d.ts.map +1 -0
- package/dist/security/leak-detector.js +75 -0
- package/dist/security/leak-detector.js.map +1 -0
- package/dist/security/policy-engine.d.ts +188 -0
- package/dist/security/policy-engine.d.ts.map +1 -0
- package/dist/security/policy-engine.js +799 -0
- package/dist/security/policy-engine.js.map +1 -0
- package/dist/security/prompt-defense.d.ts +30 -0
- package/dist/security/prompt-defense.d.ts.map +1 -0
- package/dist/security/prompt-defense.js +164 -0
- package/dist/security/prompt-defense.js.map +1 -0
- package/dist/security/secrets-manager.d.ts +47 -0
- package/dist/security/secrets-manager.d.ts.map +1 -0
- package/dist/security/secrets-manager.js +132 -0
- package/dist/security/secrets-manager.js.map +1 -0
- package/dist/security/security-types.d.ts +84 -0
- package/dist/security/security-types.d.ts.map +1 -0
- package/dist/security/security-types.js +8 -0
- package/dist/security/security-types.js.map +1 -0
- package/dist/skills/index.d.ts +5 -0
- package/dist/skills/index.d.ts.map +1 -0
- package/dist/skills/index.js +5 -0
- package/dist/skills/index.js.map +1 -0
- package/dist/skills/skill-loader.d.ts +25 -0
- package/dist/skills/skill-loader.d.ts.map +1 -0
- package/dist/skills/skill-loader.js +64 -0
- package/dist/skills/skill-loader.js.map +1 -0
- package/dist/steering/flag-manager.d.ts +52 -0
- package/dist/steering/flag-manager.d.ts.map +1 -0
- package/dist/steering/flag-manager.js +160 -0
- package/dist/steering/flag-manager.js.map +1 -0
- package/dist/steering/index.d.ts +8 -0
- package/dist/steering/index.d.ts.map +1 -0
- package/dist/steering/index.js +8 -0
- package/dist/steering/index.js.map +1 -0
- package/dist/steering/steer-injector.d.ts +15 -0
- package/dist/steering/steer-injector.d.ts.map +1 -0
- package/dist/steering/steer-injector.js +41 -0
- package/dist/steering/steer-injector.js.map +1 -0
- package/dist/steering/steering-manager.d.ts +33 -0
- package/dist/steering/steering-manager.d.ts.map +1 -0
- package/dist/steering/steering-manager.js +79 -0
- package/dist/steering/steering-manager.js.map +1 -0
- package/dist/steering/telegram-gateway.d.ts +27 -0
- package/dist/steering/telegram-gateway.d.ts.map +1 -0
- package/dist/steering/telegram-gateway.js +89 -0
- package/dist/steering/telegram-gateway.js.map +1 -0
- package/dist/steering/types.d.ts +54 -0
- package/dist/steering/types.d.ts.map +1 -0
- package/dist/steering/types.js +11 -0
- package/dist/steering/types.js.map +1 -0
- package/dist/teams/agent-loader.d.ts +38 -0
- package/dist/teams/agent-loader.d.ts.map +1 -0
- package/dist/teams/agent-loader.js +85 -0
- package/dist/teams/agent-loader.js.map +1 -0
- package/dist/teams/bridge-watchdog.d.ts +44 -0
- package/dist/teams/bridge-watchdog.d.ts.map +1 -0
- package/dist/teams/bridge-watchdog.js +118 -0
- package/dist/teams/bridge-watchdog.js.map +1 -0
- package/dist/teams/gemini-bridge.d.ts +43 -0
- package/dist/teams/gemini-bridge.d.ts.map +1 -0
- package/dist/teams/gemini-bridge.js +132 -0
- package/dist/teams/gemini-bridge.js.map +1 -0
- package/dist/teams/index.d.ts +11 -0
- package/dist/teams/index.d.ts.map +1 -0
- package/dist/teams/index.js +11 -0
- package/dist/teams/index.js.map +1 -0
- package/dist/teams/mailbox.d.ts +33 -0
- package/dist/teams/mailbox.d.ts.map +1 -0
- package/dist/teams/mailbox.js +97 -0
- package/dist/teams/mailbox.js.map +1 -0
- package/dist/teams/pr-lifecycle.d.ts +47 -0
- package/dist/teams/pr-lifecycle.d.ts.map +1 -0
- package/dist/teams/pr-lifecycle.js +83 -0
- package/dist/teams/pr-lifecycle.js.map +1 -0
- package/dist/teams/team-manager.d.ts +57 -0
- package/dist/teams/team-manager.d.ts.map +1 -0
- package/dist/teams/team-manager.js +170 -0
- package/dist/teams/team-manager.js.map +1 -0
- package/dist/teams/team-types.d.ts +35 -0
- package/dist/teams/team-types.d.ts.map +1 -0
- package/dist/teams/team-types.js +9 -0
- package/dist/teams/team-types.js.map +1 -0
- package/dist/tools/index.d.ts +8 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +8 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/notifications.d.ts +13 -0
- package/dist/tools/notifications.d.ts.map +1 -0
- package/dist/tools/notifications.js +30 -0
- package/dist/tools/notifications.js.map +1 -0
- package/dist/types.d.ts +311 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +8 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/fs.d.ts +9 -0
- package/dist/utils/fs.d.ts.map +1 -0
- package/dist/utils/fs.js +31 -0
- package/dist/utils/fs.js.map +1 -0
- package/dist/utils/logger.d.ts +43 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +139 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/wasm/wasmtime-spike.d.ts +19 -0
- package/dist/wasm/wasmtime-spike.d.ts.map +1 -0
- package/dist/wasm/wasmtime-spike.js +39 -0
- package/dist/wasm/wasmtime-spike.js.map +1 -0
- package/examples/routines/content-pipeline.toml +20 -0
- package/examples/routines/job-search.toml +19 -0
- package/examples/routines/repo-cleanup.toml +14 -0
- package/package.json +66 -0
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ClaudeProvider — LLMProvider implementation backed by the Claude Agent SDK.
|
|
3
|
+
*
|
|
4
|
+
* Spec §4.2 "Claude Provider" (type: "claude-sdk"):
|
|
5
|
+
* - SDK: @anthropic-ai/claude-agent-sdk
|
|
6
|
+
* - Authentication: Mac session token (no API key required)
|
|
7
|
+
* - Execution mode: Embedded agent with streaming events
|
|
8
|
+
* - Max turns: configurable (default 200)
|
|
9
|
+
*
|
|
10
|
+
* Design decisions:
|
|
11
|
+
* - query function is dependency-injected (queryFn) so tests never spawn real processes
|
|
12
|
+
* - SDKMessage → AgentEvent mapping is explicit and exhaustive
|
|
13
|
+
* - AbortController wired through for clean cancellation
|
|
14
|
+
* - Auth/quota checks use accountInfo() probe on the Query object
|
|
15
|
+
*/
|
|
16
|
+
import type { LLMProvider, AuthStatus, QuotaStatus, ProviderUsage, AgentEvent, TaskContext, ProviderCapability, CostTier, ProviderConfig } from '../types.js';
|
|
17
|
+
/**
|
|
18
|
+
* Minimal subset of SDK message types we consume.
|
|
19
|
+
* Using structural types rather than importing SDK internals directly
|
|
20
|
+
* to keep the boundary clean and testable.
|
|
21
|
+
*/
|
|
22
|
+
export interface SDKAssistantMessage {
|
|
23
|
+
type: 'assistant';
|
|
24
|
+
uuid: string;
|
|
25
|
+
session_id: string;
|
|
26
|
+
message: {
|
|
27
|
+
role: 'assistant';
|
|
28
|
+
content: Array<{
|
|
29
|
+
type: 'text';
|
|
30
|
+
text: string;
|
|
31
|
+
} | {
|
|
32
|
+
type: 'thinking';
|
|
33
|
+
thinking: string;
|
|
34
|
+
} | {
|
|
35
|
+
type: 'tool_use';
|
|
36
|
+
id: string;
|
|
37
|
+
name: string;
|
|
38
|
+
input: Record<string, unknown>;
|
|
39
|
+
} | {
|
|
40
|
+
type: 'tool_result';
|
|
41
|
+
tool_use_id: string;
|
|
42
|
+
content: unknown;
|
|
43
|
+
}>;
|
|
44
|
+
};
|
|
45
|
+
parent_tool_use_id: string | null;
|
|
46
|
+
}
|
|
47
|
+
export interface SDKResultMessage {
|
|
48
|
+
type: 'result';
|
|
49
|
+
subtype: 'success' | 'error_max_turns' | 'error_during_execution' | 'error_max_budget_usd' | 'error_max_structured_output_retries';
|
|
50
|
+
uuid: string;
|
|
51
|
+
session_id: string;
|
|
52
|
+
duration_ms: number;
|
|
53
|
+
is_error: boolean;
|
|
54
|
+
num_turns: number;
|
|
55
|
+
result?: string;
|
|
56
|
+
total_cost_usd: number;
|
|
57
|
+
errors?: string[];
|
|
58
|
+
}
|
|
59
|
+
export interface SDKSystemMessage {
|
|
60
|
+
type: 'system';
|
|
61
|
+
subtype: string;
|
|
62
|
+
uuid: string;
|
|
63
|
+
session_id: string;
|
|
64
|
+
model?: string;
|
|
65
|
+
tools?: string[];
|
|
66
|
+
}
|
|
67
|
+
export interface SDKUserMessage {
|
|
68
|
+
type: 'user';
|
|
69
|
+
uuid?: string;
|
|
70
|
+
session_id: string;
|
|
71
|
+
message: unknown;
|
|
72
|
+
parent_tool_use_id: string | null;
|
|
73
|
+
}
|
|
74
|
+
export type SDKMessage = SDKAssistantMessage | SDKResultMessage | SDKSystemMessage | SDKUserMessage | {
|
|
75
|
+
type: string;
|
|
76
|
+
[key: string]: unknown;
|
|
77
|
+
};
|
|
78
|
+
/**
|
|
79
|
+
* Minimal Query interface matching what the SDK returns.
|
|
80
|
+
* We only depend on the AsyncGenerator behavior + abort.
|
|
81
|
+
*/
|
|
82
|
+
export interface SDKQuery extends AsyncGenerator<SDKMessage, void> {
|
|
83
|
+
abort?: () => void;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* The injectable query function type.
|
|
87
|
+
* Matches the SDK's `query({ prompt, options })` signature.
|
|
88
|
+
*/
|
|
89
|
+
export type QueryFn = (params: {
|
|
90
|
+
prompt: string;
|
|
91
|
+
options?: Record<string, unknown>;
|
|
92
|
+
}) => SDKQuery;
|
|
93
|
+
export interface ClaudeProviderOptions {
|
|
94
|
+
/** Provider config from config.toml */
|
|
95
|
+
config: ProviderConfig;
|
|
96
|
+
/** Injected query function. Defaults to the real SDK's query(). */
|
|
97
|
+
queryFn?: QueryFn;
|
|
98
|
+
/** Working directory for the agent. Defaults to process.cwd(). */
|
|
99
|
+
cwd?: string;
|
|
100
|
+
/** System prompt prefix. */
|
|
101
|
+
systemPrompt?: string;
|
|
102
|
+
/** Allowed tools list for the SDK. */
|
|
103
|
+
allowedTools?: string[];
|
|
104
|
+
/** Permission mode. Defaults to 'bypassPermissions' for autonomous operation. */
|
|
105
|
+
permissionMode?: 'default' | 'acceptEdits' | 'bypassPermissions' | 'plan';
|
|
106
|
+
}
|
|
107
|
+
export declare class ClaudeProvider implements LLMProvider {
|
|
108
|
+
readonly name: string;
|
|
109
|
+
readonly rank: number;
|
|
110
|
+
readonly capabilities: ProviderCapability[];
|
|
111
|
+
readonly costTier: CostTier;
|
|
112
|
+
private readonly _config;
|
|
113
|
+
private readonly _queryFn;
|
|
114
|
+
private readonly _cwd;
|
|
115
|
+
private readonly _systemPrompt;
|
|
116
|
+
private readonly _allowedTools;
|
|
117
|
+
private readonly _permissionMode;
|
|
118
|
+
/** Active queries indexed by jobId for abort support */
|
|
119
|
+
private readonly _activeQueries;
|
|
120
|
+
/** Cached auth status from last check */
|
|
121
|
+
private _lastAuthStatus;
|
|
122
|
+
/** Cached quota status from last check */
|
|
123
|
+
private _lastQuotaStatus;
|
|
124
|
+
/** Track cumulative cost */
|
|
125
|
+
private _totalCostUsd;
|
|
126
|
+
/** Track cumulative token usage */
|
|
127
|
+
private _totalInputTokens;
|
|
128
|
+
private _totalOutputTokens;
|
|
129
|
+
private _requestCount;
|
|
130
|
+
private _lastRequestAt;
|
|
131
|
+
constructor(options: ClaudeProviderOptions);
|
|
132
|
+
/**
|
|
133
|
+
* Resolve the query function — lazy-loads the real SDK if no mock was injected.
|
|
134
|
+
*/
|
|
135
|
+
private _resolveQueryFn;
|
|
136
|
+
isAvailable(): Promise<boolean>;
|
|
137
|
+
checkAuth(): Promise<AuthStatus>;
|
|
138
|
+
getQuotaStatus(): Promise<QuotaStatus>;
|
|
139
|
+
execute(task: TaskContext): AsyncGenerator<AgentEvent>;
|
|
140
|
+
abort(jobId: string): Promise<void>;
|
|
141
|
+
/**
|
|
142
|
+
* Map an SDK message to zero or more AgentEvents.
|
|
143
|
+
* One SDK message can produce multiple events (e.g., an assistant message
|
|
144
|
+
* with both thinking and text content blocks).
|
|
145
|
+
*/
|
|
146
|
+
private _mapSDKMessage;
|
|
147
|
+
/**
|
|
148
|
+
* Build a prompt string from task context.
|
|
149
|
+
* Includes memory context, history, and system prompt elements.
|
|
150
|
+
*/
|
|
151
|
+
private _buildPrompt;
|
|
152
|
+
/**
|
|
153
|
+
* Update internal state based on SDK result message.
|
|
154
|
+
*/
|
|
155
|
+
private _handleResultMessage;
|
|
156
|
+
/**
|
|
157
|
+
* Heuristic to detect auth errors from error messages.
|
|
158
|
+
*/
|
|
159
|
+
private _isAuthError;
|
|
160
|
+
/**
|
|
161
|
+
* Heuristic to detect quota/rate-limit errors from error messages.
|
|
162
|
+
*/
|
|
163
|
+
private _isQuotaError;
|
|
164
|
+
get totalCostUsd(): number;
|
|
165
|
+
get activeJobCount(): number;
|
|
166
|
+
get lastAuthStatus(): AuthStatus | null;
|
|
167
|
+
get lastQuotaStatus(): QuotaStatus | null;
|
|
168
|
+
getUsage(): ProviderUsage;
|
|
169
|
+
/**
|
|
170
|
+
* Force-set auth status (used by orchestrator on external auth events).
|
|
171
|
+
*/
|
|
172
|
+
setAuthStatus(status: AuthStatus): void;
|
|
173
|
+
/**
|
|
174
|
+
* Force-set quota status (used by orchestrator on external quota events).
|
|
175
|
+
*/
|
|
176
|
+
setQuotaStatus(status: QuotaStatus): void;
|
|
177
|
+
/**
|
|
178
|
+
* Reset cached status (used after auth recovery).
|
|
179
|
+
*/
|
|
180
|
+
resetStatus(): void;
|
|
181
|
+
}
|
|
182
|
+
//# sourceMappingURL=claude-provider.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-provider.d.ts","sourceRoot":"","sources":["../../src/providers/claude-provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,443 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ClaudeProvider — LLMProvider implementation backed by the Claude Agent SDK.
|
|
3
|
+
*
|
|
4
|
+
* Spec §4.2 "Claude Provider" (type: "claude-sdk"):
|
|
5
|
+
* - SDK: @anthropic-ai/claude-agent-sdk
|
|
6
|
+
* - Authentication: Mac session token (no API key required)
|
|
7
|
+
* - Execution mode: Embedded agent with streaming events
|
|
8
|
+
* - Max turns: configurable (default 200)
|
|
9
|
+
*
|
|
10
|
+
* Design decisions:
|
|
11
|
+
* - query function is dependency-injected (queryFn) so tests never spawn real processes
|
|
12
|
+
* - SDKMessage → AgentEvent mapping is explicit and exhaustive
|
|
13
|
+
* - AbortController wired through for clean cancellation
|
|
14
|
+
* - Auth/quota checks use accountInfo() probe on the Query object
|
|
15
|
+
*/
|
|
16
|
+
// ─── Claude Provider ────────────────────────────────────────────────
|
|
17
|
+
export class ClaudeProvider {
|
|
18
|
+
name;
|
|
19
|
+
rank;
|
|
20
|
+
capabilities;
|
|
21
|
+
costTier;
|
|
22
|
+
_config;
|
|
23
|
+
_queryFn;
|
|
24
|
+
_cwd;
|
|
25
|
+
_systemPrompt;
|
|
26
|
+
_allowedTools;
|
|
27
|
+
_permissionMode;
|
|
28
|
+
/** Active queries indexed by jobId for abort support */
|
|
29
|
+
_activeQueries = new Map();
|
|
30
|
+
/** Cached auth status from last check */
|
|
31
|
+
_lastAuthStatus = null;
|
|
32
|
+
/** Cached quota status from last check */
|
|
33
|
+
_lastQuotaStatus = null;
|
|
34
|
+
/** Track cumulative cost */
|
|
35
|
+
_totalCostUsd = 0;
|
|
36
|
+
/** Track cumulative token usage */
|
|
37
|
+
_totalInputTokens = 0;
|
|
38
|
+
_totalOutputTokens = 0;
|
|
39
|
+
_requestCount = 0;
|
|
40
|
+
_lastRequestAt = null;
|
|
41
|
+
constructor(options) {
|
|
42
|
+
const { config } = options;
|
|
43
|
+
this.name = config.name;
|
|
44
|
+
this.rank = config.rank;
|
|
45
|
+
this.capabilities = config.capabilities;
|
|
46
|
+
this.costTier = config.cost_tier;
|
|
47
|
+
this._config = config;
|
|
48
|
+
this._cwd = options.cwd ?? process.cwd();
|
|
49
|
+
this._systemPrompt = options.systemPrompt ?? '';
|
|
50
|
+
this._allowedTools = options.allowedTools ?? [];
|
|
51
|
+
this._permissionMode = options.permissionMode ?? 'bypassPermissions';
|
|
52
|
+
// Dependency injection: use provided queryFn or lazy-load the real SDK
|
|
53
|
+
if (options.queryFn) {
|
|
54
|
+
this._queryFn = options.queryFn;
|
|
55
|
+
}
|
|
56
|
+
else {
|
|
57
|
+
// Lazy import to avoid requiring the SDK at construction time
|
|
58
|
+
// This will be resolved at first execute() call
|
|
59
|
+
this._queryFn = null;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Resolve the query function — lazy-loads the real SDK if no mock was injected.
|
|
64
|
+
*/
|
|
65
|
+
async _resolveQueryFn() {
|
|
66
|
+
if (this._queryFn)
|
|
67
|
+
return this._queryFn;
|
|
68
|
+
// Dynamic import of the real SDK
|
|
69
|
+
const sdk = await import('@anthropic-ai/claude-agent-sdk');
|
|
70
|
+
const realQuery = sdk.query;
|
|
71
|
+
// Cache it so we don't re-import
|
|
72
|
+
this._queryFn = realQuery;
|
|
73
|
+
return realQuery;
|
|
74
|
+
}
|
|
75
|
+
// ─── LLMProvider interface ──────────────────────────────────────
|
|
76
|
+
async isAvailable() {
|
|
77
|
+
// Claude is available if:
|
|
78
|
+
// 1. Provider is enabled in config
|
|
79
|
+
// 2. Auth is valid (or we haven't checked yet — optimistic)
|
|
80
|
+
if (!this._config.enabled)
|
|
81
|
+
return false;
|
|
82
|
+
if (this._lastAuthStatus && !this._lastAuthStatus.valid)
|
|
83
|
+
return false;
|
|
84
|
+
if (this._lastQuotaStatus?.isExhausted)
|
|
85
|
+
return false;
|
|
86
|
+
return true;
|
|
87
|
+
}
|
|
88
|
+
async checkAuth() {
|
|
89
|
+
// For the injected mock path, we can't probe the real SDK.
|
|
90
|
+
// Return optimistic auth if we have no cached status.
|
|
91
|
+
// In production, the orchestrator's heartbeat loop calls this periodically
|
|
92
|
+
// and the real SDK will surface auth errors during execute().
|
|
93
|
+
if (this._lastAuthStatus) {
|
|
94
|
+
return this._lastAuthStatus;
|
|
95
|
+
}
|
|
96
|
+
// Default to optimistic — auth will be validated on first execute()
|
|
97
|
+
const status = {
|
|
98
|
+
valid: true,
|
|
99
|
+
expiresAt: null,
|
|
100
|
+
canAutoRefresh: true,
|
|
101
|
+
requiresInteraction: false,
|
|
102
|
+
};
|
|
103
|
+
this._lastAuthStatus = status;
|
|
104
|
+
return status;
|
|
105
|
+
}
|
|
106
|
+
async getQuotaStatus() {
|
|
107
|
+
if (this._lastQuotaStatus) {
|
|
108
|
+
return this._lastQuotaStatus;
|
|
109
|
+
}
|
|
110
|
+
// Default to healthy
|
|
111
|
+
const status = {
|
|
112
|
+
isExhausted: false,
|
|
113
|
+
remainingRequests: null,
|
|
114
|
+
cooldownUntil: null,
|
|
115
|
+
healthScore: 1.0,
|
|
116
|
+
};
|
|
117
|
+
this._lastQuotaStatus = status;
|
|
118
|
+
return status;
|
|
119
|
+
}
|
|
120
|
+
async *execute(task) {
|
|
121
|
+
const queryFn = await this._resolveQueryFn();
|
|
122
|
+
const abortController = new AbortController();
|
|
123
|
+
// Build SDK options
|
|
124
|
+
const sdkOptions = {
|
|
125
|
+
abortController,
|
|
126
|
+
model: this._config.model ?? 'claude-sonnet-4-5',
|
|
127
|
+
cwd: this._cwd,
|
|
128
|
+
permissionMode: this._permissionMode,
|
|
129
|
+
maxTurns: task.maxTurns ?? this._config.max_turns ?? 200,
|
|
130
|
+
// Prefer the per-task system prompt, falling back to the provider default.
|
|
131
|
+
systemPrompt: task.systemPrompt || this._systemPrompt,
|
|
132
|
+
};
|
|
133
|
+
if (this._allowedTools.length > 0) {
|
|
134
|
+
sdkOptions['allowedTools'] = this._allowedTools;
|
|
135
|
+
}
|
|
136
|
+
// Build the prompt from task context
|
|
137
|
+
const prompt = this._buildPrompt(task);
|
|
138
|
+
try {
|
|
139
|
+
// Create the SDK query
|
|
140
|
+
const sdkQuery = queryFn({ prompt, options: sdkOptions });
|
|
141
|
+
// Register for abort support
|
|
142
|
+
this._activeQueries.set(task.jobId, { abort: abortController, query: sdkQuery });
|
|
143
|
+
for await (const message of sdkQuery) {
|
|
144
|
+
const events = this._mapSDKMessage(message);
|
|
145
|
+
for (const event of events) {
|
|
146
|
+
yield event;
|
|
147
|
+
// If we got a result message, update internal state
|
|
148
|
+
if (message.type === 'result') {
|
|
149
|
+
this._handleResultMessage(message);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
// If we consumed all messages without a 'done' event,
|
|
154
|
+
// yield one to signal completion
|
|
155
|
+
yield {
|
|
156
|
+
type: 'done',
|
|
157
|
+
timestamp: new Date(),
|
|
158
|
+
content: { text: 'Query completed' },
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
catch (err) {
|
|
162
|
+
const errorMessage = err instanceof Error ? err.message : String(err);
|
|
163
|
+
// Check for specific error types that indicate auth/quota issues
|
|
164
|
+
if (this._isAuthError(errorMessage)) {
|
|
165
|
+
this._lastAuthStatus = {
|
|
166
|
+
valid: false,
|
|
167
|
+
expiresAt: null,
|
|
168
|
+
canAutoRefresh: false,
|
|
169
|
+
requiresInteraction: true,
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
else if (this._isQuotaError(errorMessage)) {
|
|
173
|
+
this._lastQuotaStatus = {
|
|
174
|
+
isExhausted: true,
|
|
175
|
+
remainingRequests: 0,
|
|
176
|
+
cooldownUntil: new Date(Date.now() + 60_000), // 1 min default cooldown
|
|
177
|
+
healthScore: 0,
|
|
178
|
+
};
|
|
179
|
+
}
|
|
180
|
+
yield {
|
|
181
|
+
type: 'error',
|
|
182
|
+
timestamp: new Date(),
|
|
183
|
+
content: {
|
|
184
|
+
message: errorMessage,
|
|
185
|
+
isAuthError: this._isAuthError(errorMessage),
|
|
186
|
+
isQuotaError: this._isQuotaError(errorMessage),
|
|
187
|
+
},
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
finally {
|
|
191
|
+
this._activeQueries.delete(task.jobId);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
async abort(jobId) {
|
|
195
|
+
const entry = this._activeQueries.get(jobId);
|
|
196
|
+
if (entry) {
|
|
197
|
+
entry.abort.abort();
|
|
198
|
+
this._activeQueries.delete(jobId);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
// ─── SDK Message Mapping ──────────────────────────────────────────
|
|
202
|
+
/**
|
|
203
|
+
* Map an SDK message to zero or more AgentEvents.
|
|
204
|
+
* One SDK message can produce multiple events (e.g., an assistant message
|
|
205
|
+
* with both thinking and text content blocks).
|
|
206
|
+
*/
|
|
207
|
+
_mapSDKMessage(message) {
|
|
208
|
+
const events = [];
|
|
209
|
+
switch (message.type) {
|
|
210
|
+
case 'assistant': {
|
|
211
|
+
const msg = message;
|
|
212
|
+
for (const block of msg.message.content) {
|
|
213
|
+
switch (block.type) {
|
|
214
|
+
case 'thinking':
|
|
215
|
+
events.push({
|
|
216
|
+
type: 'thinking',
|
|
217
|
+
timestamp: new Date(),
|
|
218
|
+
content: { text: block.thinking },
|
|
219
|
+
});
|
|
220
|
+
break;
|
|
221
|
+
case 'text':
|
|
222
|
+
events.push({
|
|
223
|
+
type: 'text',
|
|
224
|
+
timestamp: new Date(),
|
|
225
|
+
content: { text: block.text },
|
|
226
|
+
});
|
|
227
|
+
break;
|
|
228
|
+
case 'tool_use':
|
|
229
|
+
events.push({
|
|
230
|
+
type: 'tool_call',
|
|
231
|
+
timestamp: new Date(),
|
|
232
|
+
content: {
|
|
233
|
+
toolCallId: block.id,
|
|
234
|
+
tool: block.name,
|
|
235
|
+
arguments: block.input,
|
|
236
|
+
},
|
|
237
|
+
});
|
|
238
|
+
break;
|
|
239
|
+
case 'tool_result':
|
|
240
|
+
events.push({
|
|
241
|
+
type: 'tool_result',
|
|
242
|
+
timestamp: new Date(),
|
|
243
|
+
content: {
|
|
244
|
+
toolCallId: block.tool_use_id,
|
|
245
|
+
result: block.content,
|
|
246
|
+
},
|
|
247
|
+
});
|
|
248
|
+
break;
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
break;
|
|
252
|
+
}
|
|
253
|
+
case 'result': {
|
|
254
|
+
const msg = message;
|
|
255
|
+
if (msg.is_error) {
|
|
256
|
+
events.push({
|
|
257
|
+
type: 'error',
|
|
258
|
+
timestamp: new Date(),
|
|
259
|
+
content: {
|
|
260
|
+
message: msg.errors?.join('; ') ?? `SDK error: ${msg.subtype}`,
|
|
261
|
+
subtype: msg.subtype,
|
|
262
|
+
duration_ms: msg.duration_ms,
|
|
263
|
+
num_turns: msg.num_turns,
|
|
264
|
+
total_cost_usd: msg.total_cost_usd,
|
|
265
|
+
},
|
|
266
|
+
});
|
|
267
|
+
}
|
|
268
|
+
else {
|
|
269
|
+
events.push({
|
|
270
|
+
type: 'done',
|
|
271
|
+
timestamp: new Date(),
|
|
272
|
+
content: {
|
|
273
|
+
text: msg.result ?? '',
|
|
274
|
+
duration_ms: msg.duration_ms,
|
|
275
|
+
num_turns: msg.num_turns,
|
|
276
|
+
total_cost_usd: msg.total_cost_usd,
|
|
277
|
+
},
|
|
278
|
+
});
|
|
279
|
+
}
|
|
280
|
+
break;
|
|
281
|
+
}
|
|
282
|
+
case 'system': {
|
|
283
|
+
// System messages are informational — we don't emit them as AgentEvents
|
|
284
|
+
// but we could log them for debugging
|
|
285
|
+
break;
|
|
286
|
+
}
|
|
287
|
+
case 'user': {
|
|
288
|
+
// User message replays — skip
|
|
289
|
+
break;
|
|
290
|
+
}
|
|
291
|
+
default: {
|
|
292
|
+
// Unknown message type — ignore gracefully
|
|
293
|
+
break;
|
|
294
|
+
}
|
|
295
|
+
}
|
|
296
|
+
return events;
|
|
297
|
+
}
|
|
298
|
+
// ─── Internal helpers ─────────────────────────────────────────────
|
|
299
|
+
/**
|
|
300
|
+
* Build a prompt string from task context.
|
|
301
|
+
* Includes memory context, history, and system prompt elements.
|
|
302
|
+
*/
|
|
303
|
+
_buildPrompt(task) {
|
|
304
|
+
const parts = [];
|
|
305
|
+
// Memory context (if any)
|
|
306
|
+
if (task.memoryContext.length > 0) {
|
|
307
|
+
parts.push('<memory_context>');
|
|
308
|
+
parts.push(task.memoryContext.join('\n'));
|
|
309
|
+
parts.push('</memory_context>');
|
|
310
|
+
parts.push('');
|
|
311
|
+
}
|
|
312
|
+
// History (if any) — helps with restarts and steering
|
|
313
|
+
if (task.history.length > 0) {
|
|
314
|
+
parts.push('<execution_history>');
|
|
315
|
+
for (const event of task.history) {
|
|
316
|
+
if (event.type === 'text') {
|
|
317
|
+
parts.push(' <assistant_response>');
|
|
318
|
+
parts.push(event.content.text);
|
|
319
|
+
parts.push(' </assistant_response>');
|
|
320
|
+
}
|
|
321
|
+
else if (event.type === 'tool_call') {
|
|
322
|
+
const c = event.content;
|
|
323
|
+
parts.push(` <tool_call name="${c.tool}" id="${c.toolCallId}">`);
|
|
324
|
+
parts.push(JSON.stringify(c.arguments, null, 2));
|
|
325
|
+
parts.push(' </tool_call>');
|
|
326
|
+
}
|
|
327
|
+
else if (event.type === 'tool_result') {
|
|
328
|
+
const c = event.content;
|
|
329
|
+
parts.push(` <tool_result id="${c.toolCallId}">`);
|
|
330
|
+
parts.push(JSON.stringify(c.result, null, 2));
|
|
331
|
+
parts.push(' </tool_result>');
|
|
332
|
+
}
|
|
333
|
+
else if (event.type === 'steering') {
|
|
334
|
+
const c = event.content;
|
|
335
|
+
parts.push(` <human_steering source="${c.source}" author="${c.author}">`);
|
|
336
|
+
parts.push(c.text);
|
|
337
|
+
parts.push(' </human_steering>');
|
|
338
|
+
}
|
|
339
|
+
}
|
|
340
|
+
parts.push('</execution_history>');
|
|
341
|
+
parts.push('');
|
|
342
|
+
}
|
|
343
|
+
// The actual task
|
|
344
|
+
parts.push(`Current Task: ${task.task}`);
|
|
345
|
+
return parts.join('\n');
|
|
346
|
+
}
|
|
347
|
+
/**
|
|
348
|
+
* Update internal state based on SDK result message.
|
|
349
|
+
*/
|
|
350
|
+
_handleResultMessage(msg) {
|
|
351
|
+
this._totalCostUsd += msg.total_cost_usd;
|
|
352
|
+
this._requestCount++;
|
|
353
|
+
this._lastRequestAt = new Date();
|
|
354
|
+
// Aggregate token usage from modelUsage if the SDK exposes it
|
|
355
|
+
const raw = msg;
|
|
356
|
+
if (raw.modelUsage && typeof raw.modelUsage === 'object') {
|
|
357
|
+
for (const usage of Object.values(raw.modelUsage)) {
|
|
358
|
+
this._totalInputTokens += usage.inputTokens ?? 0;
|
|
359
|
+
this._totalOutputTokens += usage.outputTokens ?? 0;
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
// If result was an error, check if it's auth/quota related
|
|
363
|
+
if (msg.is_error && msg.subtype === 'error_max_turns') {
|
|
364
|
+
// Not an auth/quota issue — just hit max turns
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
/**
|
|
368
|
+
* Heuristic to detect auth errors from error messages.
|
|
369
|
+
*/
|
|
370
|
+
_isAuthError(message) {
|
|
371
|
+
const authPatterns = [
|
|
372
|
+
'authentication',
|
|
373
|
+
'auth_error',
|
|
374
|
+
'unauthorized',
|
|
375
|
+
'session expired',
|
|
376
|
+
'session_expired',
|
|
377
|
+
'token expired',
|
|
378
|
+
'invalid_token',
|
|
379
|
+
'not authenticated',
|
|
380
|
+
'login required',
|
|
381
|
+
];
|
|
382
|
+
const lower = message.toLowerCase();
|
|
383
|
+
return authPatterns.some((p) => lower.includes(p));
|
|
384
|
+
}
|
|
385
|
+
/**
|
|
386
|
+
* Heuristic to detect quota/rate-limit errors from error messages.
|
|
387
|
+
*/
|
|
388
|
+
_isQuotaError(message) {
|
|
389
|
+
const quotaPatterns = [
|
|
390
|
+
'rate_limit',
|
|
391
|
+
'rate limit',
|
|
392
|
+
'quota',
|
|
393
|
+
'too many requests',
|
|
394
|
+
'capacity',
|
|
395
|
+
'overloaded',
|
|
396
|
+
'429',
|
|
397
|
+
];
|
|
398
|
+
const lower = message.toLowerCase();
|
|
399
|
+
return quotaPatterns.some((p) => lower.includes(p));
|
|
400
|
+
}
|
|
401
|
+
// ─── Public getters for observability ─────────────────────────────
|
|
402
|
+
get totalCostUsd() {
|
|
403
|
+
return this._totalCostUsd;
|
|
404
|
+
}
|
|
405
|
+
get activeJobCount() {
|
|
406
|
+
return this._activeQueries.size;
|
|
407
|
+
}
|
|
408
|
+
get lastAuthStatus() {
|
|
409
|
+
return this._lastAuthStatus;
|
|
410
|
+
}
|
|
411
|
+
get lastQuotaStatus() {
|
|
412
|
+
return this._lastQuotaStatus;
|
|
413
|
+
}
|
|
414
|
+
getUsage() {
|
|
415
|
+
return {
|
|
416
|
+
totalCostUsd: this._totalCostUsd,
|
|
417
|
+
totalInputTokens: this._totalInputTokens,
|
|
418
|
+
totalOutputTokens: this._totalOutputTokens,
|
|
419
|
+
requestCount: this._requestCount,
|
|
420
|
+
lastRequestAt: this._lastRequestAt,
|
|
421
|
+
};
|
|
422
|
+
}
|
|
423
|
+
/**
|
|
424
|
+
* Force-set auth status (used by orchestrator on external auth events).
|
|
425
|
+
*/
|
|
426
|
+
setAuthStatus(status) {
|
|
427
|
+
this._lastAuthStatus = status;
|
|
428
|
+
}
|
|
429
|
+
/**
|
|
430
|
+
* Force-set quota status (used by orchestrator on external quota events).
|
|
431
|
+
*/
|
|
432
|
+
setQuotaStatus(status) {
|
|
433
|
+
this._lastQuotaStatus = status;
|
|
434
|
+
}
|
|
435
|
+
/**
|
|
436
|
+
* Reset cached status (used after auth recovery).
|
|
437
|
+
*/
|
|
438
|
+
resetStatus() {
|
|
439
|
+
this._lastAuthStatus = null;
|
|
440
|
+
this._lastQuotaStatus = null;
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
//# sourceMappingURL=claude-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-provider.js","sourceRoot":"","sources":["../../src/providers/claude-provider.ts"],"names":[],"mappings":"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"}
|