Publish Claude Code Binaries / Stage and publish binaries (push) Canceled after 0s
Publish Tutti App Runtime / Build darwin-arm64 (push) Canceled after 0s
Publish Tutti App Runtime / Build darwin-amd64 (push) Canceled after 0s
Publish Tutti App Runtime / Build linux-amd64 (push) Canceled after 0s
Publish Tutti App Runtime / Build windows-amd64 (push) Canceled after 0s
Sync Tutti Agent Skills / sync (push) Canceled after 0s
Windows Agent Adapters / Test Windows agent adapters (push) Canceled after 0s
Windows Daemon Adapters / Test Windows daemon adapters (push) Canceled after 0s
Publish Tutti App Runtime / Publish runtime catalog (push) Canceled after 0s
174 lines
6.8 KiB
Go
174 lines
6.8 KiB
Go
package providerregistry
|
|
|
|
import canonical "github.com/tutti-os/tutti/packages/agent/store-sqlite/canonical"
|
|
|
|
const (
|
|
ClaudeCodeProviderID = canonical.ClaudeCodeProviderID
|
|
ClaudeCodeTargetID = "local:claude-code"
|
|
)
|
|
|
|
func claudeCodeDescriptor() ProviderDescriptor {
|
|
return ProviderDescriptor{
|
|
Identity: canonicalProviderIdentity(ClaudeCodeProviderID),
|
|
Runtime: RuntimeDescriptor{
|
|
Kind: RuntimeKindClaudeSDK,
|
|
Name: "claude-agent-sdk",
|
|
NativeSessionFork: true,
|
|
Endpoint: RuntimeEndpointDescriptor{
|
|
BaseURLEnvVars: []string{
|
|
"ANTHROPIC_BASE_URL",
|
|
"ANTHROPIC_API_BASE_URL",
|
|
},
|
|
ConfigKind: EndpointConfigKindClaudeSettings,
|
|
ModelPlanProtocol: ModelPlanProtocolAnthropic,
|
|
NativeSubscription: true,
|
|
},
|
|
},
|
|
Status: StatusDescriptor{
|
|
Kind: StatusKindClaudeCLI,
|
|
AuthOutputParserKind: AuthOutputParserKindClaude,
|
|
AuthMarkerParserKind: AuthMarkerParserKindClaude,
|
|
AuthCommandRunnerKind: AuthCommandRunnerKindClaudeGate,
|
|
StaticSpecResolverKind: StaticSpecResolverKindGeneric,
|
|
BinaryNames: []string{"claude"},
|
|
AuthStatusCommand: []string{"auth", "status"},
|
|
AuthStatusCommandTimeoutSeconds: 600,
|
|
RemoteAuthProbe: RemoteAuthProbeDescriptor{
|
|
Kind: RemoteAuthProbeKindHTTPBearer,
|
|
CredentialKind: RemoteAuthCredentialKindClaudeOAuth,
|
|
Endpoint: "https://api.anthropic.com/api/oauth/usage",
|
|
Method: "GET",
|
|
Headers: map[string]string{
|
|
"Accept": "application/json",
|
|
"anthropic-beta": "oauth-2025-04-20",
|
|
"User-Agent": "claude-code/2.1.0",
|
|
},
|
|
TimeoutSeconds: 10,
|
|
},
|
|
AuthMarkerPaths: []string{"~/.claude.json", "~/.claude/auth.json"},
|
|
APIEndpoints: []string{"https://api.anthropic.com/v1/messages"},
|
|
CustomConfigEnvVars: []string{
|
|
"ANTHROPIC_API_KEY",
|
|
"ANTHROPIC_AUTH_TOKEN",
|
|
"ANTHROPIC_BASE_URL",
|
|
"ANTHROPIC_API_BASE_URL",
|
|
},
|
|
CredentialEnvVars: []string{"ANTHROPIC_API_KEY", "ANTHROPIC_AUTH_TOKEN"},
|
|
Install: InstallerDescriptor{
|
|
Kind: InstallerKindOfficialScript,
|
|
DisplayCommand: "curl -fsSL https://claude.ai/install.sh | bash",
|
|
ScriptURL: "https://claude.ai/install.sh",
|
|
ScriptShell: "bash",
|
|
WindowsFallback: InstallerWindowsFallbackManagedRuntime,
|
|
FailureReasonMarkers: map[string][]string{
|
|
"install_unavailable_in_region": {"app-unavailable-in-region", "app unavailable in region", "claude isn't available here", "claude isn't available here", "claude isn't available here"},
|
|
},
|
|
},
|
|
Update: UpdateDescriptor{
|
|
Capability: UpdateCapabilityUnsupported,
|
|
UnsupportedReason: UpdateUnsupportedReasonOfficialScript,
|
|
},
|
|
LoginArgs: []string{"auth", "login"},
|
|
AuthWatch: AuthWatchDescriptor{
|
|
Sources: []AuthWatchSourceDescriptor{
|
|
{
|
|
RootCandidates: []AuthWatchRootCandidateDescriptor{{EnvVar: "CLAUDE_CONFIG_DIR"}},
|
|
DefaultRoot: "~/.claude",
|
|
Paths: []string{"settings.json", "auth.json", ".credentials.json"},
|
|
},
|
|
{DefaultRoot: "~", Paths: []string{".claude.json"}},
|
|
},
|
|
ContentFingerprint: AuthWatchContentFingerprintClaudeState,
|
|
},
|
|
},
|
|
ComposerProfile: ComposerProfileDescriptor{
|
|
ModelSelection: true,
|
|
LiveModelDiscovery: LiveModelDiscoveryDescriptor{
|
|
Kind: LiveModelDiscoveryKindClaudeSDK,
|
|
HiddenProbe: true,
|
|
AccountScoped: true,
|
|
},
|
|
ReasoningEffort: true,
|
|
ReasoningEffortValues: []string{"low", "medium", "high", "xhigh"},
|
|
ReasoningEffortOptions: ReasoningEffortOptionsStatic,
|
|
DefaultReasoningEffort: "high",
|
|
Speed: true,
|
|
SpeedValues: []string{"standard", "fast"},
|
|
DefaultSpeed: "standard",
|
|
Capabilities: []string{
|
|
"imageInput",
|
|
"skills",
|
|
"compact",
|
|
"tokenUsage",
|
|
"rateLimits",
|
|
"planMode",
|
|
CapabilityInterrupt,
|
|
CapabilityActiveTurnGuidance,
|
|
CapabilityModelSwitch,
|
|
CapabilityModelPlanBinding,
|
|
"permissionModeChangeDuringTurn",
|
|
},
|
|
PermissionConfigurable: true,
|
|
DefaultPermissionModeID: "default",
|
|
PermissionModes: []PermissionModeDescriptor{
|
|
{ID: "default", Semantic: "ask-before-write"},
|
|
{ID: "acceptEdits", Semantic: "accept-edits"},
|
|
{ID: "dontAsk", Semantic: "locked-down"},
|
|
{ID: "bypassPermissions", Semantic: "full-access"},
|
|
},
|
|
ConfigOptionIDs: ComposerConfigOptionIDs{
|
|
Model: "model",
|
|
Reasoning: "effort",
|
|
Speed: "fast",
|
|
Permission: "permission_mode",
|
|
},
|
|
Skills: SkillDescriptor{
|
|
Kind: SkillKindClaudeCode,
|
|
Invocation: SkillInvocationTextTrigger,
|
|
},
|
|
SlashCommandPolicy: SlashCommandPolicyDescriptor{
|
|
FallbackCommands: []string{"compact", "status", "fast", "goal", "review"},
|
|
CommandCatalogAuthoritative: true,
|
|
CommandEffects: []SlashCommandEffectDescriptor{
|
|
{Command: "compact", Effect: SlashCommandEffectSubmitImmediate},
|
|
{Command: "context", Effect: SlashCommandEffectSubmitImmediate},
|
|
{Command: "usage", Effect: SlashCommandEffectSubmitImmediate},
|
|
{Command: "review", Effect: SlashCommandEffectShowReviewPicker},
|
|
{Command: "goal", Effect: SlashCommandEffectActivateGoalMode},
|
|
{Command: "plan", Effect: SlashCommandEffectTogglePlanMode},
|
|
{Command: "status", Effect: SlashCommandEffectShowStatus},
|
|
{Command: "fast", Effect: SlashCommandEffectToggleSpeed},
|
|
},
|
|
},
|
|
Behavior: ComposerBehaviorDescriptor{
|
|
ModelOptionsAuthoritative: true,
|
|
RefreshModelOptionsAfterSettings: true,
|
|
PrewarmDraftSession: true,
|
|
PlanModeExclusiveWithPermissionMode: true,
|
|
},
|
|
},
|
|
Target: TargetDescriptor{
|
|
ID: ClaudeCodeTargetID,
|
|
LaunchRefType: TargetLaunchRefTypeLocalCLI,
|
|
Enabled: true,
|
|
SortOrder: 20,
|
|
},
|
|
Events: EventsDescriptor{
|
|
Enabled: true,
|
|
Aliases: []string{"claude", "claude_code"},
|
|
TurnLifecycleProjection: TurnLifecycleProjectionExplicit,
|
|
},
|
|
Sidecar: SidecarDescriptor{MentionRouting: SidecarMentionRoutingClaudeNamespaced, ExecutionEnvironment: SidecarExecutionEnvironmentClaudeIPC},
|
|
Desktop: DesktopIntegrationDescriptor{Managed: true, ManagedOrder: 1, StatusProbePriority: 2, UsageProbeKind: DesktopUsageProbeClaudeCode, AuthProbeAfterCredentialSync: true, DeveloperLogs: true, DefaultProviderEligible: true, DefaultProviderPriority: 3},
|
|
ExternalImport: ExternalImportDescriptor{
|
|
Enabled: true,
|
|
RootEnvVar: "CLAUDE_CONFIG_DIR",
|
|
DefaultRoot: "~/.claude",
|
|
ScanDirectories: []string{"projects"},
|
|
SkipDirectoryPrefixes: []string{"agent-"},
|
|
ParserKind: ExternalImportParserKindClaudeJSONL,
|
|
UserTextCleanerKind: ExternalImportUserTextCleanerKindClaude,
|
|
},
|
|
}
|
|
}
|