@excitedjs/tm 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/bin/tm +76 -0
- package/package.json +39 -0
- package/resolver-register.mjs +7 -0
- package/resolver.mjs +86 -0
- package/src/cli/context.ts +63 -0
- package/src/cli/dispatch.ts +444 -0
- package/src/cli/errors.ts +45 -0
- package/src/cli/parse.ts +265 -0
- package/src/cli.ts +12 -0
- package/src/codex-protocol/AbsolutePathBuf.ts +14 -0
- package/src/codex-protocol/AgentPath.ts +5 -0
- package/src/codex-protocol/ApplyPatchApprovalParams.ts +21 -0
- package/src/codex-protocol/ApplyPatchApprovalResponse.ts +6 -0
- package/src/codex-protocol/AuthMode.ts +8 -0
- package/src/codex-protocol/AutoCompactTokenLimitScope.ts +9 -0
- package/src/codex-protocol/ClientInfo.ts +5 -0
- package/src/codex-protocol/ClientNotification.ts +5 -0
- package/src/codex-protocol/ClientRequest.ts +110 -0
- package/src/codex-protocol/CollaborationMode.ts +10 -0
- package/src/codex-protocol/ContentItem.ts +6 -0
- package/src/codex-protocol/ConversationGitInfo.ts +5 -0
- package/src/codex-protocol/ConversationSummary.ts +8 -0
- package/src/codex-protocol/ExecCommandApprovalParams.ts +16 -0
- package/src/codex-protocol/ExecCommandApprovalResponse.ts +6 -0
- package/src/codex-protocol/ExecPolicyAmendment.ts +12 -0
- package/src/codex-protocol/FileChange.ts +5 -0
- package/src/codex-protocol/ForcedLoginMethod.ts +5 -0
- package/src/codex-protocol/FunctionCallOutputBody.ts +6 -0
- package/src/codex-protocol/FunctionCallOutputContentItem.ts +10 -0
- package/src/codex-protocol/FuzzyFileSearchMatchType.ts +5 -0
- package/src/codex-protocol/FuzzyFileSearchParams.ts +5 -0
- package/src/codex-protocol/FuzzyFileSearchResponse.ts +6 -0
- package/src/codex-protocol/FuzzyFileSearchResult.ts +9 -0
- package/src/codex-protocol/FuzzyFileSearchSessionCompletedNotification.ts +5 -0
- package/src/codex-protocol/FuzzyFileSearchSessionStartParams.ts +5 -0
- package/src/codex-protocol/FuzzyFileSearchSessionStartResponse.ts +5 -0
- package/src/codex-protocol/FuzzyFileSearchSessionStopParams.ts +5 -0
- package/src/codex-protocol/FuzzyFileSearchSessionStopResponse.ts +5 -0
- package/src/codex-protocol/FuzzyFileSearchSessionUpdateParams.ts +5 -0
- package/src/codex-protocol/FuzzyFileSearchSessionUpdateResponse.ts +5 -0
- package/src/codex-protocol/FuzzyFileSearchSessionUpdatedNotification.ts +6 -0
- package/src/codex-protocol/GetAuthStatusParams.ts +5 -0
- package/src/codex-protocol/GetAuthStatusResponse.ts +6 -0
- package/src/codex-protocol/GetConversationSummaryParams.ts +6 -0
- package/src/codex-protocol/GetConversationSummaryResponse.ts +6 -0
- package/src/codex-protocol/GitDiffToRemoteParams.ts +5 -0
- package/src/codex-protocol/GitDiffToRemoteResponse.ts +6 -0
- package/src/codex-protocol/GitSha.ts +5 -0
- package/src/codex-protocol/ImageDetail.ts +5 -0
- package/src/codex-protocol/InitializeCapabilities.ts +21 -0
- package/src/codex-protocol/InitializeParams.ts +7 -0
- package/src/codex-protocol/InitializeResponse.ts +20 -0
- package/src/codex-protocol/InputModality.ts +8 -0
- package/src/codex-protocol/InternalSessionSource.ts +5 -0
- package/src/codex-protocol/LocalShellAction.ts +6 -0
- package/src/codex-protocol/LocalShellExecAction.ts +5 -0
- package/src/codex-protocol/LocalShellStatus.ts +5 -0
- package/src/codex-protocol/MessagePhase.ts +11 -0
- package/src/codex-protocol/ModeKind.ts +8 -0
- package/src/codex-protocol/NetworkPolicyAmendment.ts +6 -0
- package/src/codex-protocol/NetworkPolicyRuleAction.ts +5 -0
- package/src/codex-protocol/ParsedCommand.ts +12 -0
- package/src/codex-protocol/Personality.ts +5 -0
- package/src/codex-protocol/PlanType.ts +5 -0
- package/src/codex-protocol/RealtimeConversationVersion.ts +5 -0
- package/src/codex-protocol/RealtimeOutputModality.ts +5 -0
- package/src/codex-protocol/RealtimeVoice.ts +5 -0
- package/src/codex-protocol/RealtimeVoicesList.ts +6 -0
- package/src/codex-protocol/ReasoningEffort.ts +8 -0
- package/src/codex-protocol/ReasoningItemContent.ts +5 -0
- package/src/codex-protocol/ReasoningItemReasoningSummary.ts +5 -0
- package/src/codex-protocol/ReasoningSummary.ts +10 -0
- package/src/codex-protocol/RequestId.ts +5 -0
- package/src/codex-protocol/Resource.ts +9 -0
- package/src/codex-protocol/ResourceContent.ts +17 -0
- package/src/codex-protocol/ResourceTemplate.ts +9 -0
- package/src/codex-protocol/ResponseItem.ts +17 -0
- package/src/codex-protocol/ReviewDecision.ts +10 -0
- package/src/codex-protocol/ServerNotification.ts +73 -0
- package/src/codex-protocol/ServerRequest.ts +19 -0
- package/src/codex-protocol/SessionSource.ts +7 -0
- package/src/codex-protocol/Settings.ts +9 -0
- package/src/codex-protocol/SubAgentSource.ts +7 -0
- package/src/codex-protocol/ThreadId.ts +5 -0
- package/src/codex-protocol/ThreadMemoryMode.ts +5 -0
- package/src/codex-protocol/Tool.ts +9 -0
- package/src/codex-protocol/Verbosity.ts +9 -0
- package/src/codex-protocol/WebSearchAction.ts +5 -0
- package/src/codex-protocol/WebSearchContextSize.ts +5 -0
- package/src/codex-protocol/WebSearchLocation.ts +5 -0
- package/src/codex-protocol/WebSearchMode.ts +5 -0
- package/src/codex-protocol/WebSearchToolConfig.ts +7 -0
- package/src/codex-protocol/index.ts +86 -0
- package/src/codex-protocol/serde_json/JsonValue.ts +5 -0
- package/src/codex-protocol/v2/Account.ts +6 -0
- package/src/codex-protocol/v2/AccountLoginCompletedNotification.ts +5 -0
- package/src/codex-protocol/v2/AccountRateLimitsUpdatedNotification.ts +6 -0
- package/src/codex-protocol/v2/AccountUpdatedNotification.ts +7 -0
- package/src/codex-protocol/v2/ActivePermissionProfile.ts +15 -0
- package/src/codex-protocol/v2/AddCreditsNudgeCreditType.ts +5 -0
- package/src/codex-protocol/v2/AddCreditsNudgeEmailStatus.ts +5 -0
- package/src/codex-protocol/v2/AdditionalFileSystemPermissions.ts +15 -0
- package/src/codex-protocol/v2/AdditionalNetworkPermissions.ts +5 -0
- package/src/codex-protocol/v2/AdditionalPermissionProfile.ts +11 -0
- package/src/codex-protocol/v2/AgentMessageDeltaNotification.ts +5 -0
- package/src/codex-protocol/v2/AnalyticsConfig.ts +6 -0
- package/src/codex-protocol/v2/AppBranding.ts +8 -0
- package/src/codex-protocol/v2/AppInfo.ts +19 -0
- package/src/codex-protocol/v2/AppListUpdatedNotification.ts +9 -0
- package/src/codex-protocol/v2/AppMetadata.ts +7 -0
- package/src/codex-protocol/v2/AppReview.ts +5 -0
- package/src/codex-protocol/v2/AppScreenshot.ts +5 -0
- package/src/codex-protocol/v2/AppSummary.ts +8 -0
- package/src/codex-protocol/v2/AppToolApproval.ts +5 -0
- package/src/codex-protocol/v2/AppToolsConfig.ts +6 -0
- package/src/codex-protocol/v2/ApprovalsReviewer.ts +12 -0
- package/src/codex-protocol/v2/AppsConfig.ts +8 -0
- package/src/codex-protocol/v2/AppsDefaultConfig.ts +5 -0
- package/src/codex-protocol/v2/AppsListParams.ts +24 -0
- package/src/codex-protocol/v2/AppsListResponse.ts +14 -0
- package/src/codex-protocol/v2/AskForApproval.ts +5 -0
- package/src/codex-protocol/v2/AttestationGenerateParams.ts +5 -0
- package/src/codex-protocol/v2/AttestationGenerateResponse.ts +9 -0
- package/src/codex-protocol/v2/AutoReviewDecisionSource.ts +8 -0
- package/src/codex-protocol/v2/ByteRange.ts +5 -0
- package/src/codex-protocol/v2/CancelLoginAccountParams.ts +5 -0
- package/src/codex-protocol/v2/CancelLoginAccountResponse.ts +6 -0
- package/src/codex-protocol/v2/CancelLoginAccountStatus.ts +5 -0
- package/src/codex-protocol/v2/ChatgptAuthTokensRefreshParams.ts +16 -0
- package/src/codex-protocol/v2/ChatgptAuthTokensRefreshReason.ts +5 -0
- package/src/codex-protocol/v2/ChatgptAuthTokensRefreshResponse.ts +5 -0
- package/src/codex-protocol/v2/CodexErrorInfo.ts +12 -0
- package/src/codex-protocol/v2/CollabAgentState.ts +6 -0
- package/src/codex-protocol/v2/CollabAgentStatus.ts +5 -0
- package/src/codex-protocol/v2/CollabAgentTool.ts +5 -0
- package/src/codex-protocol/v2/CollabAgentToolCallStatus.ts +5 -0
- package/src/codex-protocol/v2/CollaborationModeListParams.ts +8 -0
- package/src/codex-protocol/v2/CollaborationModeListResponse.ts +9 -0
- package/src/codex-protocol/v2/CollaborationModeMask.ts +10 -0
- package/src/codex-protocol/v2/CommandAction.ts +6 -0
- package/src/codex-protocol/v2/CommandExecOutputDeltaNotification.ts +30 -0
- package/src/codex-protocol/v2/CommandExecOutputStream.ts +8 -0
- package/src/codex-protocol/v2/CommandExecParams.ts +105 -0
- package/src/codex-protocol/v2/CommandExecResizeParams.ts +18 -0
- package/src/codex-protocol/v2/CommandExecResizeResponse.ts +8 -0
- package/src/codex-protocol/v2/CommandExecResponse.ts +24 -0
- package/src/codex-protocol/v2/CommandExecTerminalSize.ts +16 -0
- package/src/codex-protocol/v2/CommandExecTerminateParams.ts +13 -0
- package/src/codex-protocol/v2/CommandExecTerminateResponse.ts +8 -0
- package/src/codex-protocol/v2/CommandExecWriteParams.ts +22 -0
- package/src/codex-protocol/v2/CommandExecWriteResponse.ts +8 -0
- package/src/codex-protocol/v2/CommandExecutionApprovalDecision.ts +7 -0
- package/src/codex-protocol/v2/CommandExecutionOutputDeltaNotification.ts +5 -0
- package/src/codex-protocol/v2/CommandExecutionRequestApprovalParams.ts +62 -0
- package/src/codex-protocol/v2/CommandExecutionRequestApprovalResponse.ts +6 -0
- package/src/codex-protocol/v2/CommandExecutionSource.ts +5 -0
- package/src/codex-protocol/v2/CommandExecutionStatus.ts +5 -0
- package/src/codex-protocol/v2/CommandMigration.ts +5 -0
- package/src/codex-protocol/v2/ComputerUseRequirements.ts +5 -0
- package/src/codex-protocol/v2/Config.ts +26 -0
- package/src/codex-protocol/v2/ConfigBatchWriteParams.ts +14 -0
- package/src/codex-protocol/v2/ConfigEdit.ts +7 -0
- package/src/codex-protocol/v2/ConfigLayer.ts +7 -0
- package/src/codex-protocol/v2/ConfigLayerMetadata.ts +6 -0
- package/src/codex-protocol/v2/ConfigLayerSource.ts +21 -0
- package/src/codex-protocol/v2/ConfigReadParams.ts +11 -0
- package/src/codex-protocol/v2/ConfigReadResponse.ts +8 -0
- package/src/codex-protocol/v2/ConfigRequirements.ts +13 -0
- package/src/codex-protocol/v2/ConfigRequirementsReadResponse.ts +10 -0
- package/src/codex-protocol/v2/ConfigValueWriteParams.ts +11 -0
- package/src/codex-protocol/v2/ConfigWarningNotification.ts +22 -0
- package/src/codex-protocol/v2/ConfigWriteResponse.ts +12 -0
- package/src/codex-protocol/v2/ConfiguredHookHandler.ts +5 -0
- package/src/codex-protocol/v2/ConfiguredHookMatcherGroup.ts +6 -0
- package/src/codex-protocol/v2/ContextCompactedNotification.ts +8 -0
- package/src/codex-protocol/v2/CreditsSnapshot.ts +5 -0
- package/src/codex-protocol/v2/DeprecationNoticeNotification.ts +13 -0
- package/src/codex-protocol/v2/DynamicToolCallOutputContentItem.ts +5 -0
- package/src/codex-protocol/v2/DynamicToolCallParams.ts +6 -0
- package/src/codex-protocol/v2/DynamicToolCallResponse.ts +6 -0
- package/src/codex-protocol/v2/DynamicToolCallStatus.ts +5 -0
- package/src/codex-protocol/v2/DynamicToolSpec.ts +6 -0
- package/src/codex-protocol/v2/EnvironmentAddParams.ts +5 -0
- package/src/codex-protocol/v2/EnvironmentAddResponse.ts +5 -0
- package/src/codex-protocol/v2/ErrorNotification.ts +6 -0
- package/src/codex-protocol/v2/ExecPolicyAmendment.ts +5 -0
- package/src/codex-protocol/v2/ExperimentalFeature.ts +37 -0
- package/src/codex-protocol/v2/ExperimentalFeatureEnablementSetParams.ts +12 -0
- package/src/codex-protocol/v2/ExperimentalFeatureEnablementSetResponse.ts +9 -0
- package/src/codex-protocol/v2/ExperimentalFeatureListParams.ts +19 -0
- package/src/codex-protocol/v2/ExperimentalFeatureListResponse.ts +11 -0
- package/src/codex-protocol/v2/ExperimentalFeatureStage.ts +5 -0
- package/src/codex-protocol/v2/ExternalAgentConfigDetectParams.ts +13 -0
- package/src/codex-protocol/v2/ExternalAgentConfigDetectResponse.ts +6 -0
- package/src/codex-protocol/v2/ExternalAgentConfigImportCompletedNotification.ts +5 -0
- package/src/codex-protocol/v2/ExternalAgentConfigImportParams.ts +6 -0
- package/src/codex-protocol/v2/ExternalAgentConfigImportResponse.ts +5 -0
- package/src/codex-protocol/v2/ExternalAgentConfigMigrationItem.ts +11 -0
- package/src/codex-protocol/v2/ExternalAgentConfigMigrationItemType.ts +5 -0
- package/src/codex-protocol/v2/FeedbackUploadParams.ts +5 -0
- package/src/codex-protocol/v2/FeedbackUploadResponse.ts +5 -0
- package/src/codex-protocol/v2/FileChangeApprovalDecision.ts +5 -0
- package/src/codex-protocol/v2/FileChangeOutputDeltaNotification.ts +10 -0
- package/src/codex-protocol/v2/FileChangePatchUpdatedNotification.ts +6 -0
- package/src/codex-protocol/v2/FileChangeRequestApprovalParams.ts +18 -0
- package/src/codex-protocol/v2/FileChangeRequestApprovalResponse.ts +6 -0
- package/src/codex-protocol/v2/FileSystemAccessMode.ts +5 -0
- package/src/codex-protocol/v2/FileSystemPath.ts +7 -0
- package/src/codex-protocol/v2/FileSystemSandboxEntry.ts +7 -0
- package/src/codex-protocol/v2/FileSystemSpecialPath.ts +5 -0
- package/src/codex-protocol/v2/FileUpdateChange.ts +6 -0
- package/src/codex-protocol/v2/ForcedChatgptWorkspaceIds.ts +8 -0
- package/src/codex-protocol/v2/FsChangedNotification.ts +17 -0
- package/src/codex-protocol/v2/FsCopyParams.ts +21 -0
- package/src/codex-protocol/v2/FsCopyResponse.ts +8 -0
- package/src/codex-protocol/v2/FsCreateDirectoryParams.ts +17 -0
- package/src/codex-protocol/v2/FsCreateDirectoryResponse.ts +8 -0
- package/src/codex-protocol/v2/FsGetMetadataParams.ts +13 -0
- package/src/codex-protocol/v2/FsGetMetadataResponse.ts +28 -0
- package/src/codex-protocol/v2/FsReadDirectoryEntry.ts +20 -0
- package/src/codex-protocol/v2/FsReadDirectoryParams.ts +13 -0
- package/src/codex-protocol/v2/FsReadDirectoryResponse.ts +13 -0
- package/src/codex-protocol/v2/FsReadFileParams.ts +13 -0
- package/src/codex-protocol/v2/FsReadFileResponse.ts +12 -0
- package/src/codex-protocol/v2/FsRemoveParams.ts +21 -0
- package/src/codex-protocol/v2/FsRemoveResponse.ts +8 -0
- package/src/codex-protocol/v2/FsUnwatchParams.ts +12 -0
- package/src/codex-protocol/v2/FsUnwatchResponse.ts +8 -0
- package/src/codex-protocol/v2/FsWatchParams.ts +17 -0
- package/src/codex-protocol/v2/FsWatchResponse.ts +13 -0
- package/src/codex-protocol/v2/FsWriteFileParams.ts +17 -0
- package/src/codex-protocol/v2/FsWriteFileResponse.ts +8 -0
- package/src/codex-protocol/v2/GetAccountParams.ts +13 -0
- package/src/codex-protocol/v2/GetAccountRateLimitsResponse.ts +14 -0
- package/src/codex-protocol/v2/GetAccountResponse.ts +6 -0
- package/src/codex-protocol/v2/GitInfo.ts +5 -0
- package/src/codex-protocol/v2/GrantedPermissionProfile.ts +7 -0
- package/src/codex-protocol/v2/GuardianApprovalReview.ts +13 -0
- package/src/codex-protocol/v2/GuardianApprovalReviewAction.ts +9 -0
- package/src/codex-protocol/v2/GuardianApprovalReviewStatus.ts +8 -0
- package/src/codex-protocol/v2/GuardianCommandSource.ts +5 -0
- package/src/codex-protocol/v2/GuardianRiskLevel.ts +8 -0
- package/src/codex-protocol/v2/GuardianUserAuthorization.ts +8 -0
- package/src/codex-protocol/v2/GuardianWarningNotification.ts +13 -0
- package/src/codex-protocol/v2/HookCompletedNotification.ts +6 -0
- package/src/codex-protocol/v2/HookErrorInfo.ts +5 -0
- package/src/codex-protocol/v2/HookEventName.ts +5 -0
- package/src/codex-protocol/v2/HookExecutionMode.ts +5 -0
- package/src/codex-protocol/v2/HookHandlerType.ts +5 -0
- package/src/codex-protocol/v2/HookMetadata.ts +10 -0
- package/src/codex-protocol/v2/HookMigration.ts +5 -0
- package/src/codex-protocol/v2/HookOutputEntry.ts +6 -0
- package/src/codex-protocol/v2/HookOutputEntryKind.ts +5 -0
- package/src/codex-protocol/v2/HookPromptFragment.ts +5 -0
- package/src/codex-protocol/v2/HookRunStatus.ts +5 -0
- package/src/codex-protocol/v2/HookRunSummary.ts +13 -0
- package/src/codex-protocol/v2/HookScope.ts +5 -0
- package/src/codex-protocol/v2/HookSource.ts +5 -0
- package/src/codex-protocol/v2/HookStartedNotification.ts +6 -0
- package/src/codex-protocol/v2/HookTrustStatus.ts +5 -0
- package/src/codex-protocol/v2/HooksListEntry.ts +7 -0
- package/src/codex-protocol/v2/HooksListParams.ts +9 -0
- package/src/codex-protocol/v2/HooksListResponse.ts +6 -0
- package/src/codex-protocol/v2/ItemCompletedNotification.ts +10 -0
- package/src/codex-protocol/v2/ItemGuardianApprovalReviewCompletedNotification.ts +38 -0
- package/src/codex-protocol/v2/ItemGuardianApprovalReviewStartedNotification.ts +33 -0
- package/src/codex-protocol/v2/ItemStartedNotification.ts +10 -0
- package/src/codex-protocol/v2/ListMcpServerStatusParams.ts +19 -0
- package/src/codex-protocol/v2/ListMcpServerStatusResponse.ts +11 -0
- package/src/codex-protocol/v2/LoginAccountParams.ts +21 -0
- package/src/codex-protocol/v2/LoginAccountResponse.ts +17 -0
- package/src/codex-protocol/v2/LogoutAccountResponse.ts +5 -0
- package/src/codex-protocol/v2/ManagedHooksRequirements.ts +6 -0
- package/src/codex-protocol/v2/MarketplaceAddParams.ts +5 -0
- package/src/codex-protocol/v2/MarketplaceAddResponse.ts +6 -0
- package/src/codex-protocol/v2/MarketplaceInterface.ts +5 -0
- package/src/codex-protocol/v2/MarketplaceLoadErrorInfo.ts +6 -0
- package/src/codex-protocol/v2/MarketplaceRemoveParams.ts +5 -0
- package/src/codex-protocol/v2/MarketplaceRemoveResponse.ts +6 -0
- package/src/codex-protocol/v2/MarketplaceUpgradeErrorInfo.ts +5 -0
- package/src/codex-protocol/v2/MarketplaceUpgradeParams.ts +5 -0
- package/src/codex-protocol/v2/MarketplaceUpgradeResponse.ts +7 -0
- package/src/codex-protocol/v2/McpAuthStatus.ts +5 -0
- package/src/codex-protocol/v2/McpElicitationArrayType.ts +5 -0
- package/src/codex-protocol/v2/McpElicitationBooleanSchema.ts +6 -0
- package/src/codex-protocol/v2/McpElicitationBooleanType.ts +5 -0
- package/src/codex-protocol/v2/McpElicitationConstOption.ts +5 -0
- package/src/codex-protocol/v2/McpElicitationEnumSchema.ts +8 -0
- package/src/codex-protocol/v2/McpElicitationLegacyTitledEnumSchema.ts +6 -0
- package/src/codex-protocol/v2/McpElicitationMultiSelectEnumSchema.ts +7 -0
- package/src/codex-protocol/v2/McpElicitationNumberSchema.ts +6 -0
- package/src/codex-protocol/v2/McpElicitationNumberType.ts +5 -0
- package/src/codex-protocol/v2/McpElicitationObjectType.ts +5 -0
- package/src/codex-protocol/v2/McpElicitationPrimitiveSchema.ts +9 -0
- package/src/codex-protocol/v2/McpElicitationSchema.ts +13 -0
- package/src/codex-protocol/v2/McpElicitationSingleSelectEnumSchema.ts +7 -0
- package/src/codex-protocol/v2/McpElicitationStringFormat.ts +5 -0
- package/src/codex-protocol/v2/McpElicitationStringSchema.ts +7 -0
- package/src/codex-protocol/v2/McpElicitationStringType.ts +5 -0
- package/src/codex-protocol/v2/McpElicitationTitledEnumItems.ts +6 -0
- package/src/codex-protocol/v2/McpElicitationTitledMultiSelectEnumSchema.ts +7 -0
- package/src/codex-protocol/v2/McpElicitationTitledSingleSelectEnumSchema.ts +7 -0
- package/src/codex-protocol/v2/McpElicitationUntitledEnumItems.ts +6 -0
- package/src/codex-protocol/v2/McpElicitationUntitledMultiSelectEnumSchema.ts +7 -0
- package/src/codex-protocol/v2/McpElicitationUntitledSingleSelectEnumSchema.ts +6 -0
- package/src/codex-protocol/v2/McpResourceReadParams.ts +5 -0
- package/src/codex-protocol/v2/McpResourceReadResponse.ts +6 -0
- package/src/codex-protocol/v2/McpServerElicitationAction.ts +5 -0
- package/src/codex-protocol/v2/McpServerElicitationRequestParams.ts +16 -0
- package/src/codex-protocol/v2/McpServerElicitationRequestResponse.ts +17 -0
- package/src/codex-protocol/v2/McpServerMigration.ts +5 -0
- package/src/codex-protocol/v2/McpServerOauthLoginCompletedNotification.ts +5 -0
- package/src/codex-protocol/v2/McpServerOauthLoginParams.ts +5 -0
- package/src/codex-protocol/v2/McpServerOauthLoginResponse.ts +5 -0
- package/src/codex-protocol/v2/McpServerRefreshResponse.ts +5 -0
- package/src/codex-protocol/v2/McpServerStartupState.ts +5 -0
- package/src/codex-protocol/v2/McpServerStatus.ts +9 -0
- package/src/codex-protocol/v2/McpServerStatusDetail.ts +5 -0
- package/src/codex-protocol/v2/McpServerStatusUpdatedNotification.ts +6 -0
- package/src/codex-protocol/v2/McpServerToolCallParams.ts +6 -0
- package/src/codex-protocol/v2/McpServerToolCallResponse.ts +6 -0
- package/src/codex-protocol/v2/McpToolCallError.ts +5 -0
- package/src/codex-protocol/v2/McpToolCallProgressNotification.ts +5 -0
- package/src/codex-protocol/v2/McpToolCallResult.ts +6 -0
- package/src/codex-protocol/v2/McpToolCallStatus.ts +5 -0
- package/src/codex-protocol/v2/MemoryCitation.ts +6 -0
- package/src/codex-protocol/v2/MemoryCitationEntry.ts +5 -0
- package/src/codex-protocol/v2/MemoryResetResponse.ts +5 -0
- package/src/codex-protocol/v2/MergeStrategy.ts +5 -0
- package/src/codex-protocol/v2/MigrationDetails.ts +11 -0
- package/src/codex-protocol/v2/MockExperimentalMethodParams.ts +9 -0
- package/src/codex-protocol/v2/MockExperimentalMethodResponse.ts +9 -0
- package/src/codex-protocol/v2/Model.ts +19 -0
- package/src/codex-protocol/v2/ModelAvailabilityNux.ts +5 -0
- package/src/codex-protocol/v2/ModelListParams.ts +17 -0
- package/src/codex-protocol/v2/ModelListResponse.ts +11 -0
- package/src/codex-protocol/v2/ModelProviderCapabilitiesReadParams.ts +5 -0
- package/src/codex-protocol/v2/ModelProviderCapabilitiesReadResponse.ts +5 -0
- package/src/codex-protocol/v2/ModelRerouteReason.ts +5 -0
- package/src/codex-protocol/v2/ModelReroutedNotification.ts +6 -0
- package/src/codex-protocol/v2/ModelServiceTier.ts +5 -0
- package/src/codex-protocol/v2/ModelUpgradeInfo.ts +5 -0
- package/src/codex-protocol/v2/ModelVerification.ts +5 -0
- package/src/codex-protocol/v2/ModelVerificationNotification.ts +6 -0
- package/src/codex-protocol/v2/NetworkAccess.ts +5 -0
- package/src/codex-protocol/v2/NetworkApprovalContext.ts +6 -0
- package/src/codex-protocol/v2/NetworkApprovalProtocol.ts +5 -0
- package/src/codex-protocol/v2/NetworkDomainPermission.ts +5 -0
- package/src/codex-protocol/v2/NetworkPolicyAmendment.ts +6 -0
- package/src/codex-protocol/v2/NetworkPolicyRuleAction.ts +5 -0
- package/src/codex-protocol/v2/NetworkRequirements.ts +32 -0
- package/src/codex-protocol/v2/NetworkUnixSocketPermission.ts +5 -0
- package/src/codex-protocol/v2/NonSteerableTurnKind.ts +5 -0
- package/src/codex-protocol/v2/OverriddenMetadata.ts +7 -0
- package/src/codex-protocol/v2/PatchApplyStatus.ts +5 -0
- package/src/codex-protocol/v2/PatchChangeKind.ts +5 -0
- package/src/codex-protocol/v2/PermissionGrantScope.ts +5 -0
- package/src/codex-protocol/v2/PermissionProfileListParams.ts +17 -0
- package/src/codex-protocol/v2/PermissionProfileListResponse.ts +11 -0
- package/src/codex-protocol/v2/PermissionProfileSummary.ts +13 -0
- package/src/codex-protocol/v2/PermissionsRequestApprovalParams.ts +11 -0
- package/src/codex-protocol/v2/PermissionsRequestApprovalResponse.ts +11 -0
- package/src/codex-protocol/v2/PlanDeltaNotification.ts +9 -0
- package/src/codex-protocol/v2/PluginAuthPolicy.ts +5 -0
- package/src/codex-protocol/v2/PluginAvailability.ts +5 -0
- package/src/codex-protocol/v2/PluginDetail.ts +10 -0
- package/src/codex-protocol/v2/PluginHookSummary.ts +6 -0
- package/src/codex-protocol/v2/PluginInstallParams.ts +6 -0
- package/src/codex-protocol/v2/PluginInstallPolicy.ts +5 -0
- package/src/codex-protocol/v2/PluginInstallResponse.ts +7 -0
- package/src/codex-protocol/v2/PluginInstalledParams.ts +15 -0
- package/src/codex-protocol/v2/PluginInstalledResponse.ts +7 -0
- package/src/codex-protocol/v2/PluginInterface.ts +35 -0
- package/src/codex-protocol/v2/PluginListMarketplaceKind.ts +5 -0
- package/src/codex-protocol/v2/PluginListParams.ts +17 -0
- package/src/codex-protocol/v2/PluginListResponse.ts +7 -0
- package/src/codex-protocol/v2/PluginMarketplaceEntry.ts +13 -0
- package/src/codex-protocol/v2/PluginReadParams.ts +6 -0
- package/src/codex-protocol/v2/PluginReadResponse.ts +6 -0
- package/src/codex-protocol/v2/PluginShareCheckoutParams.ts +5 -0
- package/src/codex-protocol/v2/PluginShareCheckoutResponse.ts +6 -0
- package/src/codex-protocol/v2/PluginShareContext.ts +11 -0
- package/src/codex-protocol/v2/PluginShareDeleteParams.ts +5 -0
- package/src/codex-protocol/v2/PluginShareDeleteResponse.ts +5 -0
- package/src/codex-protocol/v2/PluginShareDiscoverability.ts +5 -0
- package/src/codex-protocol/v2/PluginShareListItem.ts +7 -0
- package/src/codex-protocol/v2/PluginShareListParams.ts +5 -0
- package/src/codex-protocol/v2/PluginShareListResponse.ts +6 -0
- package/src/codex-protocol/v2/PluginSharePrincipal.ts +7 -0
- package/src/codex-protocol/v2/PluginSharePrincipalRole.ts +5 -0
- package/src/codex-protocol/v2/PluginSharePrincipalType.ts +5 -0
- package/src/codex-protocol/v2/PluginShareSaveParams.ts +8 -0
- package/src/codex-protocol/v2/PluginShareSaveResponse.ts +5 -0
- package/src/codex-protocol/v2/PluginShareTarget.ts +7 -0
- package/src/codex-protocol/v2/PluginShareTargetRole.ts +5 -0
- package/src/codex-protocol/v2/PluginShareUpdateDiscoverability.ts +5 -0
- package/src/codex-protocol/v2/PluginShareUpdateTargetsParams.ts +7 -0
- package/src/codex-protocol/v2/PluginShareUpdateTargetsResponse.ts +7 -0
- package/src/codex-protocol/v2/PluginSkillReadParams.ts +5 -0
- package/src/codex-protocol/v2/PluginSkillReadResponse.ts +5 -0
- package/src/codex-protocol/v2/PluginSource.ts +6 -0
- package/src/codex-protocol/v2/PluginSummary.ts +27 -0
- package/src/codex-protocol/v2/PluginUninstallParams.ts +5 -0
- package/src/codex-protocol/v2/PluginUninstallResponse.ts +5 -0
- package/src/codex-protocol/v2/PluginsMigration.ts +5 -0
- package/src/codex-protocol/v2/ProcessExitedNotification.ts +42 -0
- package/src/codex-protocol/v2/ProcessKillParams.ts +12 -0
- package/src/codex-protocol/v2/ProcessKillResponse.ts +8 -0
- package/src/codex-protocol/v2/ProcessOutputDeltaNotification.ts +26 -0
- package/src/codex-protocol/v2/ProcessOutputStream.ts +8 -0
- package/src/codex-protocol/v2/ProcessResizePtyParams.ts +17 -0
- package/src/codex-protocol/v2/ProcessResizePtyResponse.ts +8 -0
- package/src/codex-protocol/v2/ProcessSpawnParams.ts +73 -0
- package/src/codex-protocol/v2/ProcessSpawnResponse.ts +8 -0
- package/src/codex-protocol/v2/ProcessTerminalSize.ts +16 -0
- package/src/codex-protocol/v2/ProcessWriteStdinParams.ts +21 -0
- package/src/codex-protocol/v2/ProcessWriteStdinResponse.ts +8 -0
- package/src/codex-protocol/v2/ProfileV2.ts +19 -0
- package/src/codex-protocol/v2/RateLimitReachedType.ts +5 -0
- package/src/codex-protocol/v2/RateLimitSnapshot.ts +9 -0
- package/src/codex-protocol/v2/RateLimitWindow.ts +5 -0
- package/src/codex-protocol/v2/RawResponseItemCompletedNotification.ts +6 -0
- package/src/codex-protocol/v2/ReasoningEffortOption.ts +6 -0
- package/src/codex-protocol/v2/ReasoningSummaryPartAddedNotification.ts +5 -0
- package/src/codex-protocol/v2/ReasoningSummaryTextDeltaNotification.ts +5 -0
- package/src/codex-protocol/v2/ReasoningTextDeltaNotification.ts +5 -0
- package/src/codex-protocol/v2/RemoteControlConnectionStatus.ts +5 -0
- package/src/codex-protocol/v2/RemoteControlDisableResponse.ts +6 -0
- package/src/codex-protocol/v2/RemoteControlEnableResponse.ts +6 -0
- package/src/codex-protocol/v2/RemoteControlStatusChangedNotification.ts +9 -0
- package/src/codex-protocol/v2/RemoteControlStatusReadResponse.ts +6 -0
- package/src/codex-protocol/v2/RequestPermissionProfile.ts +7 -0
- package/src/codex-protocol/v2/ResidencyRequirement.ts +5 -0
- package/src/codex-protocol/v2/ReviewDelivery.ts +5 -0
- package/src/codex-protocol/v2/ReviewStartParams.ts +12 -0
- package/src/codex-protocol/v2/ReviewStartResponse.ts +13 -0
- package/src/codex-protocol/v2/ReviewTarget.ts +9 -0
- package/src/codex-protocol/v2/SandboxMode.ts +5 -0
- package/src/codex-protocol/v2/SandboxPolicy.ts +7 -0
- package/src/codex-protocol/v2/SandboxWorkspaceWrite.ts +5 -0
- package/src/codex-protocol/v2/SendAddCreditsNudgeEmailParams.ts +6 -0
- package/src/codex-protocol/v2/SendAddCreditsNudgeEmailResponse.ts +6 -0
- package/src/codex-protocol/v2/ServerRequestResolvedNotification.ts +6 -0
- package/src/codex-protocol/v2/SessionMigration.ts +5 -0
- package/src/codex-protocol/v2/SessionSource.ts +6 -0
- package/src/codex-protocol/v2/SkillDependencies.ts +6 -0
- package/src/codex-protocol/v2/SkillErrorInfo.ts +5 -0
- package/src/codex-protocol/v2/SkillInterface.ts +6 -0
- package/src/codex-protocol/v2/SkillMetadata.ts +13 -0
- package/src/codex-protocol/v2/SkillScope.ts +5 -0
- package/src/codex-protocol/v2/SkillSummary.ts +7 -0
- package/src/codex-protocol/v2/SkillToolDependency.ts +5 -0
- package/src/codex-protocol/v2/SkillsChangedNotification.ts +11 -0
- package/src/codex-protocol/v2/SkillsConfigWriteParams.ts +14 -0
- package/src/codex-protocol/v2/SkillsConfigWriteResponse.ts +5 -0
- package/src/codex-protocol/v2/SkillsListEntry.ts +7 -0
- package/src/codex-protocol/v2/SkillsListParams.ts +13 -0
- package/src/codex-protocol/v2/SkillsListResponse.ts +6 -0
- package/src/codex-protocol/v2/SortDirection.ts +5 -0
- package/src/codex-protocol/v2/SubagentMigration.ts +5 -0
- package/src/codex-protocol/v2/TerminalInteractionNotification.ts +5 -0
- package/src/codex-protocol/v2/TextElement.ts +14 -0
- package/src/codex-protocol/v2/TextPosition.ts +13 -0
- package/src/codex-protocol/v2/TextRange.ts +6 -0
- package/src/codex-protocol/v2/Thread.ts +86 -0
- package/src/codex-protocol/v2/ThreadActiveFlag.ts +5 -0
- package/src/codex-protocol/v2/ThreadApproveGuardianDeniedActionParams.ts +10 -0
- package/src/codex-protocol/v2/ThreadApproveGuardianDeniedActionResponse.ts +5 -0
- package/src/codex-protocol/v2/ThreadArchiveParams.ts +5 -0
- package/src/codex-protocol/v2/ThreadArchiveResponse.ts +5 -0
- package/src/codex-protocol/v2/ThreadArchivedNotification.ts +5 -0
- package/src/codex-protocol/v2/ThreadBackgroundTerminalsCleanParams.ts +5 -0
- package/src/codex-protocol/v2/ThreadBackgroundTerminalsCleanResponse.ts +5 -0
- package/src/codex-protocol/v2/ThreadClosedNotification.ts +5 -0
- package/src/codex-protocol/v2/ThreadCompactStartParams.ts +5 -0
- package/src/codex-protocol/v2/ThreadCompactStartResponse.ts +5 -0
- package/src/codex-protocol/v2/ThreadDecrementElicitationParams.ts +12 -0
- package/src/codex-protocol/v2/ThreadDecrementElicitationResponse.ts +16 -0
- package/src/codex-protocol/v2/ThreadForkParams.ts +60 -0
- package/src/codex-protocol/v2/ThreadForkResponse.ts +35 -0
- package/src/codex-protocol/v2/ThreadGoal.ts +6 -0
- package/src/codex-protocol/v2/ThreadGoalClearParams.ts +5 -0
- package/src/codex-protocol/v2/ThreadGoalClearResponse.ts +5 -0
- package/src/codex-protocol/v2/ThreadGoalClearedNotification.ts +5 -0
- package/src/codex-protocol/v2/ThreadGoalGetParams.ts +5 -0
- package/src/codex-protocol/v2/ThreadGoalGetResponse.ts +6 -0
- package/src/codex-protocol/v2/ThreadGoalSetParams.ts +6 -0
- package/src/codex-protocol/v2/ThreadGoalSetResponse.ts +6 -0
- package/src/codex-protocol/v2/ThreadGoalStatus.ts +5 -0
- package/src/codex-protocol/v2/ThreadGoalUpdatedNotification.ts +6 -0
- package/src/codex-protocol/v2/ThreadIncrementElicitationParams.ts +12 -0
- package/src/codex-protocol/v2/ThreadIncrementElicitationResponse.ts +16 -0
- package/src/codex-protocol/v2/ThreadInjectItemsParams.ts +10 -0
- package/src/codex-protocol/v2/ThreadInjectItemsResponse.ts +5 -0
- package/src/codex-protocol/v2/ThreadItem.ts +101 -0
- package/src/codex-protocol/v2/ThreadListParams.ts +54 -0
- package/src/codex-protocol/v2/ThreadListResponse.ts +18 -0
- package/src/codex-protocol/v2/ThreadLoadedListParams.ts +13 -0
- package/src/codex-protocol/v2/ThreadLoadedListResponse.ts +14 -0
- package/src/codex-protocol/v2/ThreadMemoryModeSetParams.ts +6 -0
- package/src/codex-protocol/v2/ThreadMemoryModeSetResponse.ts +5 -0
- package/src/codex-protocol/v2/ThreadMetadataGitInfoUpdateParams.ts +20 -0
- package/src/codex-protocol/v2/ThreadMetadataUpdateParams.ts +12 -0
- package/src/codex-protocol/v2/ThreadMetadataUpdateResponse.ts +6 -0
- package/src/codex-protocol/v2/ThreadNameUpdatedNotification.ts +5 -0
- package/src/codex-protocol/v2/ThreadReadParams.ts +9 -0
- package/src/codex-protocol/v2/ThreadReadResponse.ts +6 -0
- package/src/codex-protocol/v2/ThreadRealtimeAppendAudioParams.ts +9 -0
- package/src/codex-protocol/v2/ThreadRealtimeAppendAudioResponse.ts +8 -0
- package/src/codex-protocol/v2/ThreadRealtimeAppendTextParams.ts +8 -0
- package/src/codex-protocol/v2/ThreadRealtimeAppendTextResponse.ts +8 -0
- package/src/codex-protocol/v2/ThreadRealtimeAudioChunk.ts +8 -0
- package/src/codex-protocol/v2/ThreadRealtimeClosedNotification.ts +8 -0
- package/src/codex-protocol/v2/ThreadRealtimeErrorNotification.ts +8 -0
- package/src/codex-protocol/v2/ThreadRealtimeItemAddedNotification.ts +9 -0
- package/src/codex-protocol/v2/ThreadRealtimeListVoicesParams.ts +8 -0
- package/src/codex-protocol/v2/ThreadRealtimeListVoicesResponse.ts +9 -0
- package/src/codex-protocol/v2/ThreadRealtimeOutputAudioDeltaNotification.ts +9 -0
- package/src/codex-protocol/v2/ThreadRealtimeSdpNotification.ts +8 -0
- package/src/codex-protocol/v2/ThreadRealtimeStartParams.ts +16 -0
- package/src/codex-protocol/v2/ThreadRealtimeStartResponse.ts +8 -0
- package/src/codex-protocol/v2/ThreadRealtimeStartTransport.ts +13 -0
- package/src/codex-protocol/v2/ThreadRealtimeStartedNotification.ts +9 -0
- package/src/codex-protocol/v2/ThreadRealtimeStopParams.ts +8 -0
- package/src/codex-protocol/v2/ThreadRealtimeStopResponse.ts +8 -0
- package/src/codex-protocol/v2/ThreadRealtimeTranscriptDeltaNotification.ts +13 -0
- package/src/codex-protocol/v2/ThreadRealtimeTranscriptDoneNotification.ts +13 -0
- package/src/codex-protocol/v2/ThreadResumeParams.ts +71 -0
- package/src/codex-protocol/v2/ThreadResumeResponse.ts +35 -0
- package/src/codex-protocol/v2/ThreadRollbackParams.ts +12 -0
- package/src/codex-protocol/v2/ThreadRollbackResponse.ts +14 -0
- package/src/codex-protocol/v2/ThreadSetNameParams.ts +5 -0
- package/src/codex-protocol/v2/ThreadSetNameResponse.ts +5 -0
- package/src/codex-protocol/v2/ThreadSettings.ts +14 -0
- package/src/codex-protocol/v2/ThreadSettingsUpdateParams.ts +61 -0
- package/src/codex-protocol/v2/ThreadSettingsUpdateResponse.ts +5 -0
- package/src/codex-protocol/v2/ThreadSettingsUpdatedNotification.ts +6 -0
- package/src/codex-protocol/v2/ThreadShellCommandParams.ts +12 -0
- package/src/codex-protocol/v2/ThreadShellCommandResponse.ts +5 -0
- package/src/codex-protocol/v2/ThreadSortKey.ts +5 -0
- package/src/codex-protocol/v2/ThreadSource.ts +5 -0
- package/src/codex-protocol/v2/ThreadSourceKind.ts +5 -0
- package/src/codex-protocol/v2/ThreadStartParams.ts +57 -0
- package/src/codex-protocol/v2/ThreadStartResponse.ts +35 -0
- package/src/codex-protocol/v2/ThreadStartSource.ts +5 -0
- package/src/codex-protocol/v2/ThreadStartedNotification.ts +6 -0
- package/src/codex-protocol/v2/ThreadStatus.ts +6 -0
- package/src/codex-protocol/v2/ThreadStatusChangedNotification.ts +6 -0
- package/src/codex-protocol/v2/ThreadTokenUsage.ts +6 -0
- package/src/codex-protocol/v2/ThreadTokenUsageUpdatedNotification.ts +6 -0
- package/src/codex-protocol/v2/ThreadTurnsItemsListParams.ts +18 -0
- package/src/codex-protocol/v2/ThreadTurnsItemsListResponse.ts +16 -0
- package/src/codex-protocol/v2/ThreadTurnsListParams.ts +23 -0
- package/src/codex-protocol/v2/ThreadTurnsListResponse.ts +18 -0
- package/src/codex-protocol/v2/ThreadUnarchiveParams.ts +5 -0
- package/src/codex-protocol/v2/ThreadUnarchiveResponse.ts +6 -0
- package/src/codex-protocol/v2/ThreadUnarchivedNotification.ts +5 -0
- package/src/codex-protocol/v2/ThreadUnsubscribeParams.ts +5 -0
- package/src/codex-protocol/v2/ThreadUnsubscribeResponse.ts +6 -0
- package/src/codex-protocol/v2/ThreadUnsubscribeStatus.ts +5 -0
- package/src/codex-protocol/v2/TokenUsageBreakdown.ts +5 -0
- package/src/codex-protocol/v2/ToolRequestUserInputAnswer.ts +8 -0
- package/src/codex-protocol/v2/ToolRequestUserInputOption.ts +8 -0
- package/src/codex-protocol/v2/ToolRequestUserInputParams.ts +9 -0
- package/src/codex-protocol/v2/ToolRequestUserInputQuestion.ts +9 -0
- package/src/codex-protocol/v2/ToolRequestUserInputResponse.ts +9 -0
- package/src/codex-protocol/v2/ToolsV2.ts +6 -0
- package/src/codex-protocol/v2/Turn.ts +33 -0
- package/src/codex-protocol/v2/TurnCompletedNotification.ts +6 -0
- package/src/codex-protocol/v2/TurnDiffUpdatedNotification.ts +9 -0
- package/src/codex-protocol/v2/TurnEnvironmentParams.ts +6 -0
- package/src/codex-protocol/v2/TurnError.ts +6 -0
- package/src/codex-protocol/v2/TurnInterruptParams.ts +5 -0
- package/src/codex-protocol/v2/TurnInterruptResponse.ts +5 -0
- package/src/codex-protocol/v2/TurnItemsView.ts +5 -0
- package/src/codex-protocol/v2/TurnPlanStep.ts +6 -0
- package/src/codex-protocol/v2/TurnPlanStepStatus.ts +5 -0
- package/src/codex-protocol/v2/TurnPlanUpdatedNotification.ts +6 -0
- package/src/codex-protocol/v2/TurnStartParams.ts +88 -0
- package/src/codex-protocol/v2/TurnStartResponse.ts +6 -0
- package/src/codex-protocol/v2/TurnStartedNotification.ts +6 -0
- package/src/codex-protocol/v2/TurnStatus.ts +5 -0
- package/src/codex-protocol/v2/TurnSteerParams.ts +15 -0
- package/src/codex-protocol/v2/TurnSteerResponse.ts +5 -0
- package/src/codex-protocol/v2/UserInput.ts +11 -0
- package/src/codex-protocol/v2/WarningNotification.ts +13 -0
- package/src/codex-protocol/v2/WebSearchAction.ts +5 -0
- package/src/codex-protocol/v2/WindowsSandboxReadiness.ts +5 -0
- package/src/codex-protocol/v2/WindowsSandboxReadinessResponse.ts +6 -0
- package/src/codex-protocol/v2/WindowsSandboxSetupCompletedNotification.ts +6 -0
- package/src/codex-protocol/v2/WindowsSandboxSetupMode.ts +5 -0
- package/src/codex-protocol/v2/WindowsSandboxSetupStartParams.ts +7 -0
- package/src/codex-protocol/v2/WindowsSandboxSetupStartResponse.ts +5 -0
- package/src/codex-protocol/v2/WindowsWorldWritableWarningNotification.ts +5 -0
- package/src/codex-protocol/v2/WriteStatus.ts +5 -0
- package/src/codex-protocol/v2/index.ts +503 -0
- package/src/column.ts +44 -0
- package/src/engines/claude/claude-engine.ts +769 -0
- package/src/engines/claude/clock.ts +48 -0
- package/src/engines/claude/compact.ts +107 -0
- package/src/engines/claude/ctx.ts +239 -0
- package/src/engines/claude/doctor.ts +202 -0
- package/src/engines/claude/env.ts +16 -0
- package/src/engines/claude/history.ts +504 -0
- package/src/engines/claude/identifiers.ts +25 -0
- package/src/engines/claude/identity-migration.ts +16 -0
- package/src/engines/claude/idle.ts +91 -0
- package/src/engines/claude/keys.ts +163 -0
- package/src/engines/claude/last.ts +52 -0
- package/src/engines/claude/mem.ts +124 -0
- package/src/engines/claude/persistence.ts +41 -0
- package/src/engines/claude/post-turn.ts +45 -0
- package/src/engines/claude/reload.ts +53 -0
- package/src/engines/claude/repo-fs.ts +63 -0
- package/src/engines/claude/resume.ts +145 -0
- package/src/engines/claude/send.ts +86 -0
- package/src/engines/claude/spawn.ts +435 -0
- package/src/engines/claude/state.ts +124 -0
- package/src/engines/claude/tmux.ts +99 -0
- package/src/engines/claude/wait-signals.ts +128 -0
- package/src/engines/claude/wait.ts +59 -0
- package/src/engines/codex/ask.ts +69 -0
- package/src/engines/codex/engine.ts +1261 -0
- package/src/engines/codex/events.ts +106 -0
- package/src/engines/codex/history.ts +385 -0
- package/src/engines/codex/identity-migration.ts +14 -0
- package/src/engines/codex/ipc-bridge-process.ts +14 -0
- package/src/engines/codex/ipc-bridge.ts +844 -0
- package/src/engines/codex/persistence.ts +236 -0
- package/src/engines/codex/rollout.ts +384 -0
- package/src/engines/codex/rpc.ts +311 -0
- package/src/engines/codex/supervisor.ts +648 -0
- package/src/engines/codex/ui-ipc.ts +374 -0
- package/src/engines/codex/verb-common.ts +34 -0
- package/src/engines/codex/verb-lifecycle.ts +94 -0
- package/src/engines/codex/verb-state.ts +19 -0
- package/src/engines/codex/verb-turns.ts +49 -0
- package/src/engines/codex/verbs.ts +15 -0
- package/src/engines/engine.ts +91 -0
- package/src/engines/git-worktree.ts +137 -0
- package/src/engines/production.ts +19 -0
- package/src/engines/registry.ts +70 -0
- package/src/engines/teammate-record.ts +113 -0
- package/src/engines/types.ts +334 -0
- package/src/env.ts +29 -0
- package/src/grep.ts +39 -0
- package/src/help.ts +433 -0
- package/src/identity/name.ts +58 -0
- package/src/identity/router.ts +80 -0
- package/src/identity/uuid-prefix.ts +40 -0
- package/src/main.ts +39 -0
- package/src/persistence/atomic-file.ts +74 -0
- package/src/persistence/identity-store.ts +294 -0
- package/src/persistence/identity-writer.ts +28 -0
- package/src/persistence/paths.ts +138 -0
- package/src/plugin-root.ts +26 -0
- package/src/proc.ts +66 -0
- package/src/shared/verb-args.ts +331 -0
- package/src/tm.ts +54 -0
- package/src/tmux.ts +57 -0
- package/src/verbs/archive.ts +211 -0
- package/src/verbs/ask.ts +29 -0
- package/src/verbs/compact.ts +25 -0
- package/src/verbs/context.ts +68 -0
- package/src/verbs/ctx.ts +21 -0
- package/src/verbs/format.ts +213 -0
- package/src/verbs/history.ts +190 -0
- package/src/verbs/kill.ts +61 -0
- package/src/verbs/last.ts +34 -0
- package/src/verbs/ls.ts +27 -0
- package/src/verbs/mem.ts +40 -0
- package/src/verbs/poll.ts +61 -0
- package/src/verbs/reload.ts +17 -0
- package/src/verbs/resolve.ts +14 -0
- package/src/verbs/resume.ts +170 -0
- package/src/verbs/send.ts +36 -0
- package/src/verbs/spawn.ts +81 -0
- package/src/verbs/states.ts +74 -0
- package/src/verbs/status.ts +26 -0
- package/src/verbs/wait.ts +40 -0
- package/src/verbs.ts +56 -0
- package/src/ws-types.d.ts +9 -0
- package/third_party/ws/LICENSE +20 -0
- package/third_party/ws/README.md +548 -0
- package/third_party/ws/UPSTREAM.md +55 -0
- package/third_party/ws/browser.js +8 -0
- package/third_party/ws/index.js +22 -0
- package/third_party/ws/lib/buffer-util.js +131 -0
- package/third_party/ws/lib/constants.js +19 -0
- package/third_party/ws/lib/event-target.js +292 -0
- package/third_party/ws/lib/extension.js +203 -0
- package/third_party/ws/lib/limiter.js +55 -0
- package/third_party/ws/lib/permessage-deflate.js +528 -0
- package/third_party/ws/lib/receiver.js +760 -0
- package/third_party/ws/lib/sender.js +607 -0
- package/third_party/ws/lib/stream.js +161 -0
- package/third_party/ws/lib/subprotocol.js +62 -0
- package/third_party/ws/lib/validation.js +152 -0
- package/third_party/ws/lib/websocket-server.js +562 -0
- package/third_party/ws/lib/websocket.js +1407 -0
- package/third_party/ws/package.json +13 -0
- package/third_party/ws/wrapper.mjs +21 -0
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `tm send` — atomic round-trip by default: send a prompt, block on the
|
|
3
|
+
* Stop hook (or pane-quiet fallback), print the reply to stdout.
|
|
4
|
+
*
|
|
5
|
+
* The stdout/stderr split is load-bearing for piping: status lines
|
|
6
|
+
* (the "sent to ..." preamble, the post-turn ctx echo) ride stderr
|
|
7
|
+
* exclusively.
|
|
8
|
+
*
|
|
9
|
+
* Two exported entry points keep the strangler clean:
|
|
10
|
+
* - `claudeSend(args, env)` — byte-exact `TmResult`, the cli dispatch
|
|
11
|
+
* and the conformance harness both pin to this shape.
|
|
12
|
+
* - the shared parser in `shared/verb-args.ts` is reused by `claudeReload`
|
|
13
|
+
* (which fans out by calling `claudeSend` directly).
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
import { sendKeys } from './keys'
|
|
17
|
+
import { probeStillAlive, waitIdleSignal, waitPaneQuiet } from './wait-signals'
|
|
18
|
+
import { echoCtxToStderr, printLastOrEmpty } from './post-turn'
|
|
19
|
+
import { die } from './tmux'
|
|
20
|
+
import { isNonNegativeInteger } from './clock'
|
|
21
|
+
import { parseSendArgs } from '../../shared/verb-args'
|
|
22
|
+
import type { ClaudeVerbEnv } from './env'
|
|
23
|
+
import { EXIT_SYNC_WAIT_EXPIRED, type TmResult } from '../../tm'
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* The Claude-side `tm send` body. The wrapper at the CLI layer handles
|
|
27
|
+
* the codex fork; this function is Claude-only.
|
|
28
|
+
*/
|
|
29
|
+
export async function claudeSend(args: readonly string[], env: ClaudeVerbEnv): Promise<TmResult> {
|
|
30
|
+
const parsed = parseSendArgs(args)
|
|
31
|
+
if ('error' in parsed) return parsed.error
|
|
32
|
+
const { name, prompt, hasPrompt, paneQuiet, timeout } = parsed
|
|
33
|
+
if (name === '') {
|
|
34
|
+
return die(
|
|
35
|
+
'tm send: missing <name>. Usage: tm send <name> --prompt "..." ' +
|
|
36
|
+
'[--pane-quiet] [--timeout N]',
|
|
37
|
+
)
|
|
38
|
+
}
|
|
39
|
+
if (!hasPrompt) {
|
|
40
|
+
return die(
|
|
41
|
+
'tm send: missing --prompt. Usage: tm send <name> --prompt "..." ' +
|
|
42
|
+
'[--pane-quiet] [--timeout N]',
|
|
43
|
+
)
|
|
44
|
+
}
|
|
45
|
+
if (timeout !== null && !isNonNegativeInteger(timeout)) {
|
|
46
|
+
return die(`tm send: --timeout must be a non-negative integer (got: '${timeout}')`)
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
const sentResult = await sendKeys(name, prompt, env.runTmux, process.env)
|
|
50
|
+
if (sentResult.code !== 0) return sentResult
|
|
51
|
+
|
|
52
|
+
const timeoutSec = timeout === null ? 1800 : Number(timeout)
|
|
53
|
+
const verdict = paneQuiet
|
|
54
|
+
? await waitPaneQuiet(name, timeoutSec, env.runTmux)
|
|
55
|
+
: await waitIdleSignal(name, timeoutSec, false, env.runTmux)
|
|
56
|
+
if ('code' in verdict) return verdict
|
|
57
|
+
if (!verdict.ok) {
|
|
58
|
+
// Re-probe at the timeout moment: a teammate that died mid-wait must
|
|
59
|
+
// NOT be reported as "still running" with code 124, or the dispatcher's
|
|
60
|
+
// bg classifier will (correctly per the documented 124 contract)
|
|
61
|
+
// decide not to respawn and silently wait forever on a corpse. Only
|
|
62
|
+
// promise 124 ("still running") when the session + sid are still there.
|
|
63
|
+
const dead = await probeStillAlive(name, env.runTmux)
|
|
64
|
+
if (dead !== null) {
|
|
65
|
+
return { ...dead, stderr: sentResult.stderr + dead.stderr }
|
|
66
|
+
}
|
|
67
|
+
const kind = paneQuiet ? 'pane-quiet' : 'Stop hook'
|
|
68
|
+
return {
|
|
69
|
+
code: EXIT_SYNC_WAIT_EXPIRED,
|
|
70
|
+
stdout: printLastOrEmpty(name),
|
|
71
|
+
stderr:
|
|
72
|
+
sentResult.stderr +
|
|
73
|
+
`tm send: sync wait expired after ${timeoutSec}s on ${name} ` +
|
|
74
|
+
`(no ${kind} fired; the teammate is still running — tail with ` +
|
|
75
|
+
`'tm wait ${name}' or check 'tm status ${name}'). exit ${EXIT_SYNC_WAIT_EXPIRED}.\n`,
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
let trailingStderr = ''
|
|
80
|
+
if (!paneQuiet) trailingStderr = echoCtxToStderr(name, env)
|
|
81
|
+
return {
|
|
82
|
+
code: 0,
|
|
83
|
+
stdout: printLastOrEmpty(name),
|
|
84
|
+
stderr: sentResult.stderr + trailingStderr,
|
|
85
|
+
}
|
|
86
|
+
}
|
|
@@ -0,0 +1,435 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `tm spawn` — launch a Claude teammate (optionally inside a git
|
|
3
|
+
* worktree), record its sid + cwd, and either return as soon as
|
|
4
|
+
* `SessionStart` fires or hand off to a sync `tm send` when
|
|
5
|
+
* `--prompt` is set.
|
|
6
|
+
*
|
|
7
|
+
* Worktree integration: when `--worktree-slug <slug>` is passed,
|
|
8
|
+
* `claude` itself receives `--worktree <slug>` and creates
|
|
9
|
+
* `<repo>/.claude/worktrees/<slug>` (a real `git worktree add` under
|
|
10
|
+
* the hood, branch `worktree-<slug>`, baseRef `head` per the engine
|
|
11
|
+
* `--settings` block). claudemux predicts the worktree path before
|
|
12
|
+
* launch, writes it to `/tmp/teammate-<name>.cwd` so the
|
|
13
|
+
* SessionStart hook's byte-match succeeds when Claude reports its
|
|
14
|
+
* runtime cwd, and points the tmux pane at the parent repo so
|
|
15
|
+
* Claude can perform the chdir itself.
|
|
16
|
+
*
|
|
17
|
+
* Repository discipline: this verb writes the `<name>.cwd` /
|
|
18
|
+
* `<name>.sid` markers and the empty `<sid>.last` sentinel; the
|
|
19
|
+
* SessionStart hook separately produces the `<name>.ready` marker
|
|
20
|
+
* the poll below blocks on. Tearing those apart is what makes
|
|
21
|
+
* `tm spawn --prompt` atomic — the pre-send sleep happens against a
|
|
22
|
+
* REPL that has already booted.
|
|
23
|
+
*
|
|
24
|
+
* This module is Claude-only. The engine router owns cross-engine
|
|
25
|
+
* dispatch.
|
|
26
|
+
*/
|
|
27
|
+
|
|
28
|
+
import { existsSync, mkdirSync, rmSync, writeFileSync } from 'node:fs'
|
|
29
|
+
import { dirname } from 'node:path'
|
|
30
|
+
|
|
31
|
+
import { claudeSend } from './send'
|
|
32
|
+
import { readLastAssistantText, transcriptFile } from './ctx'
|
|
33
|
+
import { clearIdle, isDirectory } from './idle'
|
|
34
|
+
import { newSid } from './identifiers'
|
|
35
|
+
import { sleepMs } from './clock'
|
|
36
|
+
import { dieRepoNotFound } from './repo-fs'
|
|
37
|
+
import { die, sessionExists } from './tmux'
|
|
38
|
+
import {
|
|
39
|
+
cwdFile,
|
|
40
|
+
idleDir,
|
|
41
|
+
lastFileFor,
|
|
42
|
+
readyFile,
|
|
43
|
+
sidFile,
|
|
44
|
+
tmuxSessionName,
|
|
45
|
+
worktreePathFor,
|
|
46
|
+
} from '../../persistence/paths'
|
|
47
|
+
import type { ClaudeVerbEnv } from './env'
|
|
48
|
+
import { EXIT_SYNC_WAIT_EXPIRED, type TmResult } from '../../tm'
|
|
49
|
+
|
|
50
|
+
interface ClaudeLaunchArgs {
|
|
51
|
+
/** Physical repo path (the parent of the worktree, or the cwd itself). */
|
|
52
|
+
readonly repo: string
|
|
53
|
+
/** Runtime cwd — equals `worktreePathFor(repo, worktreeSlug)` when set, else `repo`. */
|
|
54
|
+
readonly cwd: string
|
|
55
|
+
/** Worktree slug; `null` for `--no-worktree`. */
|
|
56
|
+
readonly worktreeSlug: string | null
|
|
57
|
+
readonly resumeSid: string
|
|
58
|
+
readonly continueLatest: boolean
|
|
59
|
+
readonly displayName: string
|
|
60
|
+
readonly prompt: string
|
|
61
|
+
readonly hasPrompt: boolean
|
|
62
|
+
/**
|
|
63
|
+
* Caller-supplied `--timeout` (seconds, decimal string) for the inner
|
|
64
|
+
* `tm send` handoff on the `--prompt` sync path. `null` means "use the
|
|
65
|
+
* `tm send` default" (1800s). MUST be honored or `tm spawn --prompt
|
|
66
|
+
* --timeout N` silently waits 1800s and the dispatcher's 124 classifier
|
|
67
|
+
* never fires inside the window it was scheduled against.
|
|
68
|
+
*/
|
|
69
|
+
readonly timeout: string | null
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* Single-quote-escape a string for safe embedding in a bash command
|
|
74
|
+
* line. `tm`'s shell-out builds the `claude --session-id ... -n '...'`
|
|
75
|
+
* string and passes it to `tmux send-keys`; the native form constructs
|
|
76
|
+
* the same string so the running REPL's argv is byte-equal to bash's.
|
|
77
|
+
*/
|
|
78
|
+
function shellSingleQuote(value: string): string {
|
|
79
|
+
return `'${value.replace(/'/g, `'\\''`)}'`
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* `tm`'s `teammate_launch_flags`: the flag string between
|
|
84
|
+
* `claude --session-id|--resume <sid>` and the optional `-n '<name>'`
|
|
85
|
+
* / `--worktree <slug>` extras. A bare tool name in
|
|
86
|
+
* `--disallowedTools` drops it from the model's context entirely.
|
|
87
|
+
*/
|
|
88
|
+
function teammateLaunchFlags(mdExcludes: string): string {
|
|
89
|
+
return `--settings ${shellSingleQuote(mdExcludes)} --disallowedTools AskUserQuestion`
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/**
|
|
93
|
+
* The settings JSON merged into every teammate launch. Two
|
|
94
|
+
* behaviours live here:
|
|
95
|
+
*
|
|
96
|
+
* - `claudeMdExcludes` keeps the dispatcher's CLAUDE.md /
|
|
97
|
+
* CLAUDE.local.md out of the teammate's context (a teammate
|
|
98
|
+
* inherits its own repo's CLAUDE.md, not the dispatcher's).
|
|
99
|
+
*
|
|
100
|
+
* - `worktree.baseRef = "head"` pins the worktree's base to local
|
|
101
|
+
* HEAD, not `origin/<default>`. Dispatchers often spawn teammates
|
|
102
|
+
* on top of branches with local commits not yet pushed; `fresh`
|
|
103
|
+
* would silently rewind that work. The block is only emitted when
|
|
104
|
+
* a worktree is actually requested — `--no-worktree` runs leave
|
|
105
|
+
* the user's global `worktree.*` settings undisturbed.
|
|
106
|
+
*/
|
|
107
|
+
function teammateSettingsJson(
|
|
108
|
+
dispatcherDir: string,
|
|
109
|
+
worktreeSlug: string | null,
|
|
110
|
+
): string {
|
|
111
|
+
const settings: Record<string, unknown> = {
|
|
112
|
+
claudeMdExcludes: [
|
|
113
|
+
`${dispatcherDir}/CLAUDE.md`,
|
|
114
|
+
`${dispatcherDir}/CLAUDE.local.md`,
|
|
115
|
+
],
|
|
116
|
+
}
|
|
117
|
+
if (worktreeSlug !== null) {
|
|
118
|
+
settings['worktree'] = { baseRef: 'head' }
|
|
119
|
+
}
|
|
120
|
+
return JSON.stringify(settings)
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
/**
|
|
124
|
+
* Run `tm spawn`'s readiness poll: block until `<name>.ready` appears
|
|
125
|
+
* or 18s (60 × 0.3s) elapse. Returns the ms it took to fire, or `null`
|
|
126
|
+
* on timeout — the caller prints the verb's stderr accordingly.
|
|
127
|
+
*/
|
|
128
|
+
async function pollReady(name: string): Promise<number | null> {
|
|
129
|
+
const rf = readyFile(name)
|
|
130
|
+
for (let i = 1; i <= 60; i++) {
|
|
131
|
+
if (existsSync(rf)) return i * 300
|
|
132
|
+
await sleepMs(300)
|
|
133
|
+
}
|
|
134
|
+
return null
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* Public Claude spawn entrypoint. Argument shape matches the engine
|
|
139
|
+
* router's `argv = [name, --repo R, --cwd C, --worktree-slug S,
|
|
140
|
+
* --resume SID, --display-name DN, --prompt P, --timeout N]`.
|
|
141
|
+
*/
|
|
142
|
+
export async function claudeSpawn(
|
|
143
|
+
args: readonly string[],
|
|
144
|
+
env: ClaudeVerbEnv,
|
|
145
|
+
): Promise<TmResult> {
|
|
146
|
+
const name = args[0] ?? ''
|
|
147
|
+
if (name.length === 0) {
|
|
148
|
+
return die('usage: tm spawn <path> [--name <id>] [--prompt "..."]')
|
|
149
|
+
}
|
|
150
|
+
const launch = parseClaudeLaunchArgs(args.slice(1))
|
|
151
|
+
if ('error' in launch) return launch.error
|
|
152
|
+
return claudeLaunch({
|
|
153
|
+
repo: launch.repo,
|
|
154
|
+
cwd: launch.cwd,
|
|
155
|
+
worktreeSlug: launch.worktreeSlug,
|
|
156
|
+
resumeSid: launch.resumeSid,
|
|
157
|
+
continueLatest: false,
|
|
158
|
+
displayName: launch.displayName,
|
|
159
|
+
prompt: launch.prompt,
|
|
160
|
+
hasPrompt: launch.hasPrompt,
|
|
161
|
+
timeout: launch.timeout,
|
|
162
|
+
}, env, name)
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
/**
|
|
166
|
+
* Equivalent of `claudeSpawn` for the `--continue` flavour. The
|
|
167
|
+
* engine router calls this from the resume verb on the Claude
|
|
168
|
+
* continue-latest path.
|
|
169
|
+
*/
|
|
170
|
+
export async function claudeContinue(
|
|
171
|
+
name: string,
|
|
172
|
+
args: readonly string[],
|
|
173
|
+
env: ClaudeVerbEnv,
|
|
174
|
+
): Promise<TmResult> {
|
|
175
|
+
const launch = parseClaudeLaunchArgs(args)
|
|
176
|
+
if ('error' in launch) return launch.error
|
|
177
|
+
return claudeLaunch({
|
|
178
|
+
repo: launch.repo,
|
|
179
|
+
cwd: launch.cwd,
|
|
180
|
+
worktreeSlug: launch.worktreeSlug,
|
|
181
|
+
resumeSid: '',
|
|
182
|
+
continueLatest: true,
|
|
183
|
+
displayName: launch.displayName,
|
|
184
|
+
prompt: launch.prompt,
|
|
185
|
+
hasPrompt: launch.hasPrompt,
|
|
186
|
+
timeout: launch.timeout,
|
|
187
|
+
}, env, name)
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
interface ParsedClaudeLaunch {
|
|
191
|
+
repo: string
|
|
192
|
+
cwd: string
|
|
193
|
+
worktreeSlug: string | null
|
|
194
|
+
resumeSid: string
|
|
195
|
+
displayName: string
|
|
196
|
+
prompt: string
|
|
197
|
+
hasPrompt: boolean
|
|
198
|
+
timeout: string | null
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
/**
|
|
202
|
+
* Decode the engine-router argv into a `ParsedClaudeLaunch`. The
|
|
203
|
+
* Claude engine's `spawn()` builds these args from the SpawnRequest
|
|
204
|
+
* fields the CLI dispatcher resolved; this is the matching unpack.
|
|
205
|
+
*
|
|
206
|
+
* Any flag the router does not currently emit (e.g. legacy
|
|
207
|
+
* `--repo-relative`) is rejected, surfaced via `parseSpawnArgs` for
|
|
208
|
+
* the legacy paths still exercised by `claudeSpawn` consumers.
|
|
209
|
+
*/
|
|
210
|
+
function parseClaudeLaunchArgs(
|
|
211
|
+
args: readonly string[],
|
|
212
|
+
): ParsedClaudeLaunch | { error: TmResult } {
|
|
213
|
+
let repo = ''
|
|
214
|
+
let cwd = ''
|
|
215
|
+
let worktreeSlug: string | null = null
|
|
216
|
+
let displayName = ''
|
|
217
|
+
let resumeSid = ''
|
|
218
|
+
let prompt = ''
|
|
219
|
+
let hasPrompt = false
|
|
220
|
+
let timeout: string | null = null
|
|
221
|
+
for (let i = 0; i < args.length; i++) {
|
|
222
|
+
const arg = args[i]!
|
|
223
|
+
const consumeValue = (): string | null => {
|
|
224
|
+
const next = args[i + 1]
|
|
225
|
+
if (next === undefined) return null
|
|
226
|
+
i++
|
|
227
|
+
return next
|
|
228
|
+
}
|
|
229
|
+
if (arg === '--repo') {
|
|
230
|
+
const v = consumeValue()
|
|
231
|
+
if (v === null) return { error: die('claude spawn: --repo requires a value') }
|
|
232
|
+
repo = v
|
|
233
|
+
} else if (arg === '--cwd') {
|
|
234
|
+
const v = consumeValue()
|
|
235
|
+
if (v === null) return { error: die('claude spawn: --cwd requires a value') }
|
|
236
|
+
cwd = v
|
|
237
|
+
} else if (arg === '--worktree-slug') {
|
|
238
|
+
const v = consumeValue()
|
|
239
|
+
if (v === null) return { error: die('claude spawn: --worktree-slug requires a value') }
|
|
240
|
+
worktreeSlug = v
|
|
241
|
+
} else if (arg === '--display-name') {
|
|
242
|
+
const v = consumeValue()
|
|
243
|
+
if (v === null) return { error: die('claude spawn: --display-name requires a value') }
|
|
244
|
+
displayName = v
|
|
245
|
+
} else if (arg === '--resume') {
|
|
246
|
+
const v = consumeValue()
|
|
247
|
+
if (v === null) return { error: die('claude spawn: --resume requires a value') }
|
|
248
|
+
resumeSid = v
|
|
249
|
+
} else if (arg === '--prompt') {
|
|
250
|
+
const v = consumeValue()
|
|
251
|
+
if (v === null) return { error: die('claude spawn: --prompt requires a value') }
|
|
252
|
+
prompt = v
|
|
253
|
+
hasPrompt = true
|
|
254
|
+
} else if (arg === '--timeout') {
|
|
255
|
+
const v = consumeValue()
|
|
256
|
+
if (v === null) return { error: die('claude spawn: --timeout requires a value') }
|
|
257
|
+
timeout = v
|
|
258
|
+
} else {
|
|
259
|
+
return { error: die(`claude spawn: unknown flag: ${arg}`) }
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
if (repo.length === 0) return { error: die('claude spawn: missing --repo') }
|
|
263
|
+
if (cwd.length === 0) cwd = repo
|
|
264
|
+
return { repo, cwd, worktreeSlug, resumeSid, displayName, prompt, hasPrompt, timeout }
|
|
265
|
+
}
|
|
266
|
+
|
|
267
|
+
async function claudeLaunch(
|
|
268
|
+
req: ClaudeLaunchArgs,
|
|
269
|
+
env: ClaudeVerbEnv,
|
|
270
|
+
name: string,
|
|
271
|
+
): Promise<TmResult> {
|
|
272
|
+
const { repo, cwd, worktreeSlug, resumeSid, continueLatest, displayName, prompt, hasPrompt, timeout } = req
|
|
273
|
+
if (!isDirectory(repo)) return dieRepoNotFound('spawn', name, repo, env.dispatcherDir)
|
|
274
|
+
|
|
275
|
+
// The tmux pane is anchored at the repo root. When a worktree is
|
|
276
|
+
// requested, `claude --worktree <slug>` performs the chdir into
|
|
277
|
+
// `<repo>/.claude/worktrees/<slug>` itself; the recorded `.cwd`
|
|
278
|
+
// matches that final runtime path so the SessionStart hook's
|
|
279
|
+
// byte-match against the hook payload succeeds.
|
|
280
|
+
const paneCwd = repo
|
|
281
|
+
const mdExcludes = teammateSettingsJson(env.dispatcherDir, worktreeSlug)
|
|
282
|
+
|
|
283
|
+
const session = tmuxSessionName(name)
|
|
284
|
+
if (await sessionExists(session, env.runTmux)) {
|
|
285
|
+
if (hasPrompt) {
|
|
286
|
+
return die(
|
|
287
|
+
`${name} already exists (tmux=${session}) — atomic bootstrap rejected ` +
|
|
288
|
+
'because the teammate is already running. Use ' +
|
|
289
|
+
`'tm send ${name} --prompt "…"' to drive an existing teammate, or ` +
|
|
290
|
+
`'tm kill ${name}' first to start over.`,
|
|
291
|
+
)
|
|
292
|
+
}
|
|
293
|
+
return {
|
|
294
|
+
code: 0,
|
|
295
|
+
stdout:
|
|
296
|
+
`${name} already exists (tmux=${session}; use 'tm status ${name}' to view, ` +
|
|
297
|
+
`or 'tm kill ${name}' first)\n`,
|
|
298
|
+
stderr: '',
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
|
|
302
|
+
// Clear the readiness signal BEFORE launching `claude`. The
|
|
303
|
+
// SessionStart hook re-touches the file once the REPL is up; the
|
|
304
|
+
// poll below blocks on it.
|
|
305
|
+
const rf = readyFile(name)
|
|
306
|
+
rmSync(rf, { force: true })
|
|
307
|
+
|
|
308
|
+
// Record the teammate's runtime cwd in place *before* spawning so
|
|
309
|
+
// the SessionStart hook finds it on its first attempt. The runtime
|
|
310
|
+
// cwd already reflects the worktree path (Claude's `--worktree`
|
|
311
|
+
// chdir target) when one is in use.
|
|
312
|
+
const cf = cwdFile(name)
|
|
313
|
+
mkdirSync(dirname(cf), { recursive: true })
|
|
314
|
+
writeFileSync(cf, `${cwd}\n`)
|
|
315
|
+
|
|
316
|
+
// `-P -F '#{session_id}'` returns the new session's internal id;
|
|
317
|
+
// use it as the subsequent `send-keys` target so prefix-match
|
|
318
|
+
// cannot wrong-route. `-e CLAUDEMUX_TEAMMATE_NAME=...` is the
|
|
319
|
+
// positive identity gate the on-session-start hook reads to
|
|
320
|
+
// discriminate "this teammate" from "the dispatcher happens to
|
|
321
|
+
// share the cwd".
|
|
322
|
+
let paneId = ''
|
|
323
|
+
try {
|
|
324
|
+
const newSession = await env.runTmux([
|
|
325
|
+
'new-session',
|
|
326
|
+
'-d',
|
|
327
|
+
'-s',
|
|
328
|
+
session,
|
|
329
|
+
'-c',
|
|
330
|
+
paneCwd,
|
|
331
|
+
'-e',
|
|
332
|
+
`CLAUDEMUX_TEAMMATE_NAME=${name}`,
|
|
333
|
+
'-P',
|
|
334
|
+
'-F',
|
|
335
|
+
'#{session_id}',
|
|
336
|
+
])
|
|
337
|
+
if (newSession.code !== 0) {
|
|
338
|
+
return die(`tmux new-session failed: ${newSession.stderr.trim() || newSession.stdout.trim()}`)
|
|
339
|
+
}
|
|
340
|
+
paneId = newSession.stdout.split('\n')[0] ?? ''
|
|
341
|
+
} catch (err) {
|
|
342
|
+
return die(`tmux new-session failed: ${err instanceof Error ? err.message : String(err)}`)
|
|
343
|
+
}
|
|
344
|
+
if (paneId.length === 0) return die(`tmux new-session returned no session id for ${name}`)
|
|
345
|
+
|
|
346
|
+
const sid = resumeSid.length > 0 ? resumeSid : continueLatest ? '' : newSid()
|
|
347
|
+
const launchFlags = teammateLaunchFlags(mdExcludes)
|
|
348
|
+
const nameArg =
|
|
349
|
+
displayName.length > 0 ? ` -n ${shellSingleQuote(displayName)}` : ` -n ${shellSingleQuote(name)}`
|
|
350
|
+
const worktreeArg = worktreeSlug !== null ? ` --worktree ${shellSingleQuote(worktreeSlug)}` : ''
|
|
351
|
+
const launchCmd =
|
|
352
|
+
continueLatest
|
|
353
|
+
? `claude --continue ${launchFlags}${nameArg}${worktreeArg}`
|
|
354
|
+
: resumeSid.length > 0
|
|
355
|
+
? `claude --resume ${sid} ${launchFlags}${nameArg}${worktreeArg}`
|
|
356
|
+
: `claude --session-id ${sid} ${launchFlags}${nameArg}${worktreeArg}`
|
|
357
|
+
await env.runTmux(['send-keys', '-t', paneId, launchCmd, 'Enter'])
|
|
358
|
+
|
|
359
|
+
let stderr = ''
|
|
360
|
+
const worktreeNote = worktreeSlug !== null ? `, worktree=${worktreePathFor(repo, worktreeSlug)}` : ''
|
|
361
|
+
if (continueLatest) {
|
|
362
|
+
stderr +=
|
|
363
|
+
`spawned: ${name} (tmux=${session}, cwd=${cwd}${worktreeNote}, continued latest sid=pending)\n`
|
|
364
|
+
} else if (resumeSid.length > 0) {
|
|
365
|
+
stderr += `spawned: ${name} (tmux=${session}, cwd=${cwd}${worktreeNote}, resumed sid=${sid})\n`
|
|
366
|
+
} else {
|
|
367
|
+
stderr += `spawned: ${name} (tmux=${session}, cwd=${cwd}${worktreeNote}, sid=${sid})\n`
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
if (!continueLatest) {
|
|
371
|
+
const sf = sidFile(name)
|
|
372
|
+
mkdirSync(dirname(sf), { recursive: true })
|
|
373
|
+
writeFileSync(sf, `${sid}\n`)
|
|
374
|
+
clearIdle(sid)
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
// `.last` seed. `clearIdle` above just removed the prior file;
|
|
378
|
+
// without a re-seed here, `tm last` / `tm send`'s "(no text
|
|
379
|
+
// reply…)" sentinel is the only thing the dispatcher can observe
|
|
380
|
+
// until the on-stop hook writes a fresh extraction — and that
|
|
381
|
+
// hook can return empty (tool-only turn, transcript-walk halting
|
|
382
|
+
// on a meta user entry) and `rm` the file, leaving the
|
|
383
|
+
// dispatcher with nothing.
|
|
384
|
+
//
|
|
385
|
+
// - Fresh spawn: write the empty sentinel. `tm last` reports the
|
|
386
|
+
// "no reply yet" state until the first real Stop.
|
|
387
|
+
// - Resume: extract the prior turn's assistant text from the
|
|
388
|
+
// existing transcript and seed `.last` with it (or the empty
|
|
389
|
+
// sentinel when no such text exists). The dispatcher can read the
|
|
390
|
+
// pre-relaunch deliverable immediately, and a hook miss on the
|
|
391
|
+
// next turn leaves that prior text in place rather than a
|
|
392
|
+
// missing file.
|
|
393
|
+
// - Continue-latest: sid is unknown until SessionStart fires and
|
|
394
|
+
// writes `.sid`, so there is nothing to key the marker by yet.
|
|
395
|
+
// The on-stop hook will create `.last` once it has a sid.
|
|
396
|
+
if (!continueLatest) {
|
|
397
|
+
mkdirSync(idleDir(), { recursive: true })
|
|
398
|
+
if (resumeSid.length === 0) {
|
|
399
|
+
writeFileSync(lastFileFor(sid), '')
|
|
400
|
+
} else {
|
|
401
|
+
const jsonl = transcriptFile(env.projectsDir, cwd, sid)
|
|
402
|
+
const prior = readLastAssistantText(jsonl)
|
|
403
|
+
writeFileSync(lastFileFor(sid), prior.length > 0 ? `${prior}\n` : '')
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
const readyAfter = await pollReady(name)
|
|
408
|
+
if (readyAfter !== null) {
|
|
409
|
+
stderr += `ready: ${name} (tmux=${session}, SessionStart fired after ~${readyAfter} ms)\n`
|
|
410
|
+
} else {
|
|
411
|
+
stderr +=
|
|
412
|
+
`WARN: ${name} (tmux=${session}) did not signal ready within 18s ` +
|
|
413
|
+
"(no SessionStart hook fire — the plugin's on-session-start.sh may not " +
|
|
414
|
+
'be loaded, or claude failed to boot). Continuing, but if the REPL is ' +
|
|
415
|
+
"actually dead, a subsequent sync 'tm send' / 'tm spawn --prompt' / " +
|
|
416
|
+
"'tm compact' will block until its --timeout expires (default 1800s) " +
|
|
417
|
+
`and then exit ${EXIT_SYNC_WAIT_EXPIRED} (sync wait expired). ` +
|
|
418
|
+
`'tm status ${name}' shows the live pane if you need to verify.\n`
|
|
419
|
+
}
|
|
420
|
+
|
|
421
|
+
if (!hasPrompt) {
|
|
422
|
+
return { code: 0, stdout: '', stderr }
|
|
423
|
+
}
|
|
424
|
+
|
|
425
|
+
// Atomic bootstrap: settle, then hand off to `tm send`.
|
|
426
|
+
await sleepMs(3000)
|
|
427
|
+
const sendArgs: string[] = [name, '--prompt', prompt]
|
|
428
|
+
if (timeout !== null) sendArgs.push('--timeout', timeout)
|
|
429
|
+
const sendResult = await claudeSend(sendArgs, env)
|
|
430
|
+
return {
|
|
431
|
+
code: sendResult.code,
|
|
432
|
+
stdout: sendResult.stdout,
|
|
433
|
+
stderr: stderr + sendResult.stderr,
|
|
434
|
+
}
|
|
435
|
+
}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Claude-engine state helpers — derive the per-teammate `extras` row the
|
|
3
|
+
* verb layer ingests for the `tm states` table.
|
|
4
|
+
*
|
|
5
|
+
* Decision multi-engine-tui-architecture §"Engines extend row shape, not the verb" puts the
|
|
6
|
+
* engine-private state fields on `TeammateListing.extras`. The verb
|
|
7
|
+
* formatter reads keys it knows; an engine that does not fill a key
|
|
8
|
+
* surfaces the `"-"` placeholder the legacy `tm states` produced.
|
|
9
|
+
*
|
|
10
|
+
* The keys this module writes:
|
|
11
|
+
*
|
|
12
|
+
* - `sidShort` — the 8-character prefix of the current Claude session
|
|
13
|
+
* id, or `"?"` when no sid file is on disk. Matches `cmd_states`'s
|
|
14
|
+
* `${sid:0:8}` and its `?` fallback.
|
|
15
|
+
* - `busy` — `"yes"` when the `<sid>.busy` marker exists, `"no"`
|
|
16
|
+
* otherwise. Tracks the on-busy / on-stop hook ping-pong.
|
|
17
|
+
* - `last` — `${size}B/${age}` when the `<sid>.last` file is present
|
|
18
|
+
* and non-empty, `"-"` otherwise.
|
|
19
|
+
* - `preview` — first non-control character line of `<sid>.last`,
|
|
20
|
+
* truncated to 50 code points (matching `perl -CSD substr 0 50`),
|
|
21
|
+
* or `"(no first line)"` when empty, or `"-"` when no `.last` file.
|
|
22
|
+
*/
|
|
23
|
+
|
|
24
|
+
import { readFileSync, statSync, type Stats } from 'node:fs'
|
|
25
|
+
|
|
26
|
+
import { busyMarkerFor, lastFileFor, sidFile } from '../../persistence/paths'
|
|
27
|
+
import type { TeammateName } from '../types'
|
|
28
|
+
|
|
29
|
+
/** Trim trailing newlines without touching the rest of the string. */
|
|
30
|
+
function rstrip(text: string): string {
|
|
31
|
+
return text.replace(/\n+$/, '')
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/** Read a file only if it exists and is non-empty (`tm`'s `[[ -s file ]]`). */
|
|
35
|
+
function readIfNonEmpty(path: string): string | null {
|
|
36
|
+
try {
|
|
37
|
+
if (statSync(path).size === 0) return null
|
|
38
|
+
return readFileSync(path, 'utf8')
|
|
39
|
+
} catch {
|
|
40
|
+
return null
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/** Lookup a teammate's session id, or `null` when the marker is missing. */
|
|
45
|
+
export function readSid(name: TeammateName): string | null {
|
|
46
|
+
const raw = readIfNonEmpty(sidFile(name))
|
|
47
|
+
return raw === null ? null : rstrip(raw)
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/** Whether a path is a regular file (mirrors `[[ -f file ]]`). */
|
|
51
|
+
function isRegularFile(path: string): boolean {
|
|
52
|
+
try {
|
|
53
|
+
return statSync(path).isFile()
|
|
54
|
+
} catch {
|
|
55
|
+
return false
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Format a second-count as a short relative age — `tm`'s `fmt_age`.
|
|
61
|
+
* Boundaries are exclusive on the upper end, matching the bash arithmetic
|
|
62
|
+
* (`(( age < 60 ))`).
|
|
63
|
+
*/
|
|
64
|
+
export function fmtAge(age: number): string {
|
|
65
|
+
if (age < 60) return `${age}s`
|
|
66
|
+
if (age < 3600) return `${Math.floor(age / 60)}m`
|
|
67
|
+
if (age < 86400) return `${Math.floor(age / 3600)}h`
|
|
68
|
+
return `${Math.floor(age / 86400)}d`
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* The PREVIEW cell for one teammate — the first line of its `.last`,
|
|
73
|
+
* with control characters stripped, truncated to 50 characters (code
|
|
74
|
+
* points, as `tm`'s `perl -CSD substr` counts them). Empty after
|
|
75
|
+
* stripping, or the file unreadable, → `(no first line)`.
|
|
76
|
+
*/
|
|
77
|
+
export function lastPreview(lastPath: string): string {
|
|
78
|
+
let content: string
|
|
79
|
+
try {
|
|
80
|
+
content = readFileSync(lastPath, 'utf8')
|
|
81
|
+
} catch {
|
|
82
|
+
return '(no first line)'
|
|
83
|
+
}
|
|
84
|
+
const preview = [...(content.split('\n')[0] ?? '')]
|
|
85
|
+
.filter((ch) => (ch.codePointAt(0) ?? 0) > 0x1f)
|
|
86
|
+
.slice(0, 50)
|
|
87
|
+
.join('')
|
|
88
|
+
return preview.length > 0 ? preview : '(no first line)'
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/** The five `tm states` cells for one teammate: derived from the on-disk markers. */
|
|
92
|
+
export interface ClaudeListingExtras {
|
|
93
|
+
readonly sidShort: string
|
|
94
|
+
readonly busy: 'yes' | 'no'
|
|
95
|
+
readonly last: string
|
|
96
|
+
readonly preview: string
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Compute the `states`-table cells for one teammate, sampling `now` once
|
|
101
|
+
* so a multi-row scan keeps a single clock reading (matching `cmd_states`).
|
|
102
|
+
*/
|
|
103
|
+
export function listingExtras(name: TeammateName, now: number): ClaudeListingExtras {
|
|
104
|
+
const sid = readSid(name)
|
|
105
|
+
const sidShort = sid === null ? '?' : sid.slice(0, 8)
|
|
106
|
+
const busy: 'yes' | 'no' = sid !== null && isRegularFile(busyMarkerFor(sid)) ? 'yes' : 'no'
|
|
107
|
+
let last = '-'
|
|
108
|
+
let preview = '-'
|
|
109
|
+
if (sid !== null && sid.length > 0) {
|
|
110
|
+
const lf = lastFileFor(sid)
|
|
111
|
+
let stat: Stats | null
|
|
112
|
+
try {
|
|
113
|
+
stat = statSync(lf)
|
|
114
|
+
} catch {
|
|
115
|
+
stat = null
|
|
116
|
+
}
|
|
117
|
+
if (stat !== null && stat.size > 0) {
|
|
118
|
+
const age = now - Math.floor(stat.mtimeMs / 1000)
|
|
119
|
+
last = `${stat.size}B/${fmtAge(age)}`
|
|
120
|
+
preview = lastPreview(lf)
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
return { sidShort, busy, last, preview }
|
|
124
|
+
}
|