@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,190 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `tm history <name> [index]` — turn-by-turn history. Decision multi-engine-tui-architecture
|
|
3
|
+
* §"`history` and `mem` stay" keeps the verb alive on both engines.
|
|
4
|
+
* The Claude engine reads `~/.claude/projects/<encoded>/*.jsonl`;
|
|
5
|
+
* the Codex engine reads rollout JSONL files from `~/.codex/sessions`.
|
|
6
|
+
* List mode merges both engines by mtime; detail mode accepts either a
|
|
7
|
+
* Claude sid prefix or a Codex thread-id prefix.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import { formatHistory } from './format'
|
|
11
|
+
import type { Engine } from '../engines/engine'
|
|
12
|
+
import type {
|
|
13
|
+
EngineKind,
|
|
14
|
+
HistoryListEntry,
|
|
15
|
+
HistoryRequest,
|
|
16
|
+
HistoryResult,
|
|
17
|
+
TeammateName,
|
|
18
|
+
} from '../engines/types'
|
|
19
|
+
import type { TmResult } from '../tm'
|
|
20
|
+
import type { VerbContext } from './context'
|
|
21
|
+
import { resolveTargetEngine } from './resolve'
|
|
22
|
+
import { hasCodexHistoryForCwd } from '../engines/codex/history'
|
|
23
|
+
import { fmtAge } from '../engines/claude/clock'
|
|
24
|
+
|
|
25
|
+
export interface HistoryArgs {
|
|
26
|
+
readonly name: TeammateName
|
|
27
|
+
readonly cwd: string | null
|
|
28
|
+
/** `null` = list view; non-null = engine-specific detail selector. */
|
|
29
|
+
readonly index: string | null
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
interface HistoryTarget {
|
|
33
|
+
readonly engine: Engine
|
|
34
|
+
readonly resolved: boolean
|
|
35
|
+
readonly codexFromHistory: boolean
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
async function resolveHistoryTarget(args: HistoryArgs, ctx: VerbContext): Promise<HistoryTarget | TmResult> {
|
|
39
|
+
const resolved = await ctx.router.resolve(args.name)
|
|
40
|
+
const codexFromHistory =
|
|
41
|
+
resolved === null &&
|
|
42
|
+
args.cwd !== null &&
|
|
43
|
+
ctx.engines.get('codex') !== undefined &&
|
|
44
|
+
hasCodexHistoryForCwd(args.cwd, ctx.engineContext.env)
|
|
45
|
+
const engine = codexFromHistory
|
|
46
|
+
? ctx.engines.get('codex')!
|
|
47
|
+
: resolved?.engine ?? await resolveTargetEngine(args.name, ctx)
|
|
48
|
+
if ('code' in engine) return engine
|
|
49
|
+
return { engine, resolved: resolved !== null, codexFromHistory }
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
function historyCandidateEngines(target: HistoryTarget, ctx: VerbContext): readonly Engine[] {
|
|
53
|
+
const engines: Engine[] = []
|
|
54
|
+
const add = (engine: Engine | undefined): void => {
|
|
55
|
+
if (engine === undefined) return
|
|
56
|
+
if (!engines.some((candidate) => candidate.kind === engine.kind)) engines.push(engine)
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
if (target.engine.kind === 'codex' && !target.codexFromHistory && !target.resolved) {
|
|
60
|
+
add(target.engine)
|
|
61
|
+
return engines
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
add(ctx.engines.get('claude'))
|
|
65
|
+
add(ctx.engines.get('codex'))
|
|
66
|
+
add(target.engine)
|
|
67
|
+
return engines
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Detail-mode prefix → engine, when the UUID version digit is reachable
|
|
72
|
+
* inside the prefix. Claude sids are random UUIDv4 (`xxxxxxxx-xxxx-4xxx-...`);
|
|
73
|
+
* Codex thread ids are UUIDv7 (`xxxxxxxx-xxxx-7xxx-...`). Stripping `-` and
|
|
74
|
+
* inspecting the 13th hex char (index 12) gives the version regardless of
|
|
75
|
+
* whether the caller pasted the canonical dashed form or a raw hex run.
|
|
76
|
+
* Returns `null` when the prefix is too short to reach the version digit,
|
|
77
|
+
* or when the version digit is neither `4` nor `7` — both cases fall back
|
|
78
|
+
* to the existing dual-engine probe rather than silently misroute.
|
|
79
|
+
*/
|
|
80
|
+
function detailEngineFromPrefix(prefix: string): EngineKind | null {
|
|
81
|
+
const stripped = prefix.replace(/-/g, '')
|
|
82
|
+
if (stripped.length < 13) return null
|
|
83
|
+
const versionChar = stripped[12]
|
|
84
|
+
if (versionChar === '4') return 'claude'
|
|
85
|
+
if (versionChar === '7') return 'codex'
|
|
86
|
+
return null
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
function fmtSize(bytes: number): string {
|
|
90
|
+
if (bytes < 1024) return `${bytes}B`
|
|
91
|
+
if (bytes < 1048576) return `${Math.trunc(bytes / 1024)}K`
|
|
92
|
+
if (bytes < 1073741824) return `${toFixed1HalfEven(bytes / 1048576)}M`
|
|
93
|
+
return `${toFixed1HalfEven(bytes / 1073741824)}G`
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
function toFixed1HalfEven(value: number): string {
|
|
97
|
+
const tenths = value * 10
|
|
98
|
+
const floor = Math.floor(tenths)
|
|
99
|
+
const frac = tenths - floor
|
|
100
|
+
let rounded: number
|
|
101
|
+
if (frac < 0.5) rounded = floor
|
|
102
|
+
else if (frac > 0.5) rounded = floor + 1
|
|
103
|
+
else rounded = floor % 2 === 0 ? floor : floor + 1
|
|
104
|
+
return (rounded / 10).toFixed(1)
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
function sortedHistoryEntries(entries: readonly HistoryListEntry[]): readonly HistoryListEntry[] {
|
|
108
|
+
return [...entries].sort((a, b) =>
|
|
109
|
+
b.mtimeMs - a.mtimeMs ||
|
|
110
|
+
(a.engine < b.engine ? -1 : a.engine > b.engine ? 1 : 0) ||
|
|
111
|
+
(a.id < b.id ? -1 : a.id > b.id ? 1 : 0),
|
|
112
|
+
)
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
async function formatHistoryEntries(
|
|
116
|
+
entries: readonly HistoryListEntry[],
|
|
117
|
+
ctx: VerbContext,
|
|
118
|
+
): Promise<TmResult> {
|
|
119
|
+
const nowMs = ctx.engineContext.now()
|
|
120
|
+
const rows: string[][] = [[' ', 'ENGINE', 'ID', 'AGE', 'SIZE', 'TOPIC']]
|
|
121
|
+
// Full id, not an 8-char prefix: `tm resume` requires the canonical UUID
|
|
122
|
+
// and silently rejects a prefix with a misleading "wrong repo" error.
|
|
123
|
+
// Listing the full id keeps history → resume copy-paste lossless.
|
|
124
|
+
for (const entry of sortedHistoryEntries(entries)) {
|
|
125
|
+
rows.push([
|
|
126
|
+
entry.active ? '*' : ' ',
|
|
127
|
+
entry.engine,
|
|
128
|
+
entry.id,
|
|
129
|
+
fmtAge(Math.max(0, Math.floor((nowMs - entry.mtimeMs) / 1000))),
|
|
130
|
+
fmtSize(entry.size),
|
|
131
|
+
entry.topic,
|
|
132
|
+
])
|
|
133
|
+
}
|
|
134
|
+
return ctx.runColumn(`${rows.map((row) => row.join('\t')).join('\n')}\n`)
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
function raw(result: HistoryResult): TmResult {
|
|
138
|
+
return formatHistory(result)
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
export async function historyVerb(args: HistoryArgs, ctx: VerbContext): Promise<TmResult> {
|
|
142
|
+
const target = await resolveHistoryTarget(args, ctx)
|
|
143
|
+
if ('code' in target) return target
|
|
144
|
+
const req: HistoryRequest = { name: args.name, cwd: args.cwd, index: args.index }
|
|
145
|
+
|
|
146
|
+
if (args.index !== null) {
|
|
147
|
+
// UUID-version short-circuit: when the prefix is long enough to expose
|
|
148
|
+
// the version digit (claude=v4, codex=v7), route to that one engine and
|
|
149
|
+
// skip the cross-engine probe. The other engine cannot hold a session
|
|
150
|
+
// whose id begins with the wrong version digit, so probing it would only
|
|
151
|
+
// walk a rollout tree that is guaranteed to miss.
|
|
152
|
+
const shortCircuit = detailEngineFromPrefix(args.index)
|
|
153
|
+
const shortCircuitEngine = shortCircuit !== null ? ctx.engines.get(shortCircuit) : undefined
|
|
154
|
+
if (shortCircuitEngine !== undefined) {
|
|
155
|
+
return raw(await shortCircuitEngine.history(req, ctx.engineContext))
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
const engines = historyCandidateEngines(target, ctx)
|
|
159
|
+
const results = await Promise.all(
|
|
160
|
+
engines.map(async (engine) => ({ engine, result: await engine.history(req, ctx.engineContext) })),
|
|
161
|
+
)
|
|
162
|
+
const successes = results
|
|
163
|
+
.map(({ result }) => raw(result))
|
|
164
|
+
.filter((result) => result.code === 0)
|
|
165
|
+
if (successes.length === 1) return successes[0]!
|
|
166
|
+
if (successes.length > 1) {
|
|
167
|
+
return {
|
|
168
|
+
code: 1,
|
|
169
|
+
stdout: '',
|
|
170
|
+
stderr: `tm: history: prefix '${args.index}' matches entries in multiple engines - be more specific\n`,
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
const targetResult = results.find(({ engine }) => engine.kind === target.engine.kind)?.result ??
|
|
174
|
+
await target.engine.history(req, ctx.engineContext)
|
|
175
|
+
return raw(targetResult)
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
const engines = historyCandidateEngines(target, ctx)
|
|
179
|
+
const results = await Promise.all(
|
|
180
|
+
engines.map(async (engine) => ({ engine, result: await engine.history(req, ctx.engineContext) })),
|
|
181
|
+
)
|
|
182
|
+
const entries = results.flatMap(({ result }) =>
|
|
183
|
+
result.kind === 'list' && result.entries !== undefined ? [...result.entries] : [],
|
|
184
|
+
)
|
|
185
|
+
if (entries.length > 0) return formatHistoryEntries(entries, ctx)
|
|
186
|
+
|
|
187
|
+
const targetResult = results.find(({ engine }) => engine.kind === target.engine.kind)?.result ??
|
|
188
|
+
await target.engine.history(req, ctx.engineContext)
|
|
189
|
+
return raw(targetResult)
|
|
190
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `tm kill <name>` — release the teammate. Decision multi-engine-tui-architecture amend lines
|
|
3
|
+
* 163-169 fix the default impl: resolve through the router, ask the
|
|
4
|
+
* engine to kill, remove the identity JSON on success. The "remove
|
|
5
|
+
* identity" step is what frees the name for a subsequent `tm spawn`.
|
|
6
|
+
*
|
|
7
|
+
* The engine's `kill` is the single place that decides what "stop the
|
|
8
|
+
* teammate" means for that engine (tmux session kill / Codex daemon
|
|
9
|
+
* SIGTERM / etc); the verb owns identity bookkeeping and exit code.
|
|
10
|
+
*/
|
|
11
|
+
|
|
12
|
+
import { existsSync } from 'node:fs'
|
|
13
|
+
|
|
14
|
+
import { formatKill } from './format'
|
|
15
|
+
import { identityFile } from '../persistence/identity-store'
|
|
16
|
+
import type { TeammateName } from '../engines/types'
|
|
17
|
+
import type { TmResult } from '../tm'
|
|
18
|
+
import type { VerbContext } from './context'
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* `tm kill` is idempotent: a missing teammate still has to clear stale
|
|
22
|
+
* markers and return "not running" with exit 0. When the router cannot
|
|
23
|
+
* resolve a name, the verb falls through to the Claude engine — its
|
|
24
|
+
* `kill` is the only one that knows the tmux + on-disk marker layout the
|
|
25
|
+
* legacy `cmd_kill` cleaned up unconditionally. A registered Codex
|
|
26
|
+
* teammate would have been resolved by the router on the JSON path; if
|
|
27
|
+
* neither router resolves a name, it cannot be a live Codex daemon.
|
|
28
|
+
*
|
|
29
|
+
* Schema-1 record recovery: a legacy identity JSON whose engine has
|
|
30
|
+
* long-since died (no tmux session, no Codex daemon) leaves
|
|
31
|
+
* `engine.kill()` returning `not-found`. The verb still has to clear
|
|
32
|
+
* the stale `/tmp/teammate-<name>.json` so the next `tm spawn` is not
|
|
33
|
+
* blocked by an `O_EXCL` collision — `tm kill` is the documented
|
|
34
|
+
* recovery action for the schema-1 → schema-2 migration. The
|
|
35
|
+
* existence probe runs against the raw on-disk file (independent of
|
|
36
|
+
* schema parse), so a record this build cannot parse still gets
|
|
37
|
+
* swept.
|
|
38
|
+
*/
|
|
39
|
+
export async function killVerb(name: TeammateName, ctx: VerbContext): Promise<TmResult> {
|
|
40
|
+
const resolved = await ctx.router.resolve(name)
|
|
41
|
+
const engine = resolved?.engine ?? ctx.engines.get('claude')
|
|
42
|
+
if (engine === undefined) return formatKill(name, { kind: 'not-found' })
|
|
43
|
+
const hadIdentityFile = existsSync(identityFile(name))
|
|
44
|
+
const result = await engine.kill({ name }, ctx.engineContext)
|
|
45
|
+
// Archive before remove: a later `tm resume <name> <sid>` /
|
|
46
|
+
// `tm history <name>` reads the snapshot to recover the killed
|
|
47
|
+
// teammate's cwd / repo / worktreeSlug / displayName, so the agent
|
|
48
|
+
// never has to scrape `/tmp` directly.
|
|
49
|
+
if (result.kind === 'killed' || (result.kind === 'not-found' && hadIdentityFile)) {
|
|
50
|
+
await ctx.identity.archive(name)
|
|
51
|
+
await ctx.identity.remove(name)
|
|
52
|
+
}
|
|
53
|
+
if (result.kind === 'not-found' && hadIdentityFile) {
|
|
54
|
+
return {
|
|
55
|
+
code: 0,
|
|
56
|
+
stdout: `killed: ${name}\n`,
|
|
57
|
+
stderr: `tm kill: ${name}: cleared stale identity record (engine had no live process)\n`,
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return formatKill(name, result)
|
|
61
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `tm last <name>` — reprint the last completed assistant reply.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import type { LastRequest, TeammateName, TextResult } from '../engines/types'
|
|
6
|
+
import type { TmResult } from '../tm'
|
|
7
|
+
import type { VerbContext } from './context'
|
|
8
|
+
import { resolveTargetEngine } from './resolve'
|
|
9
|
+
|
|
10
|
+
function formatLast(result: TextResult): TmResult {
|
|
11
|
+
if (result.tmResult !== undefined) return result.tmResult
|
|
12
|
+
switch (result.kind) {
|
|
13
|
+
case 'text':
|
|
14
|
+
return { code: 0, stdout: result.text, stderr: '' }
|
|
15
|
+
case 'not-found':
|
|
16
|
+
return { code: 1, stdout: '', stderr: `tm: last: ${result.reason}\n` }
|
|
17
|
+
case 'not-supported':
|
|
18
|
+
return { code: 0, stdout: '', stderr: ` not supported: ${result.reason}\n` }
|
|
19
|
+
case 'failed':
|
|
20
|
+
return { code: 1, stdout: '', stderr: `tm: ${result.message}\n` }
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export async function lastVerb(
|
|
25
|
+
name: TeammateName,
|
|
26
|
+
ctx: VerbContext,
|
|
27
|
+
options: { readonly verbose?: boolean } = {},
|
|
28
|
+
): Promise<TmResult> {
|
|
29
|
+
const engine = await resolveTargetEngine(name, ctx)
|
|
30
|
+
if ('code' in engine) return engine
|
|
31
|
+
|
|
32
|
+
const req: LastRequest = { name, verbose: options.verbose === true }
|
|
33
|
+
return formatLast(await engine.last(req, ctx.engineContext))
|
|
34
|
+
}
|
package/src/verbs/ls.ts
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `tm ls` — fleet-wide teammate listing. Decision multi-engine-tui-architecture amend
|
|
3
|
+
* §"Fleet-visibility verbs" makes this verb engine-agnostic: it
|
|
4
|
+
* iterates every registered engine, calls `Engine.list()` in parallel,
|
|
5
|
+
* and concatenates the rows. A Codex daemon teammate with no tmux
|
|
6
|
+
* session is therefore visible to `tm ls` for the first time.
|
|
7
|
+
*
|
|
8
|
+
* The default impl below is the one decision multi-engine-tui-architecture amend lines 150-155
|
|
9
|
+
* lock in. Engines do not override `tm ls` unless their listing output
|
|
10
|
+
* needs to differ from the shared format — and even then they extend
|
|
11
|
+
* the row shape, not the verb.
|
|
12
|
+
*/
|
|
13
|
+
|
|
14
|
+
import { formatListing, noEngineRegistered } from './format'
|
|
15
|
+
import type { VerbContext } from './context'
|
|
16
|
+
import type { TmResult } from '../tm'
|
|
17
|
+
|
|
18
|
+
export async function lsVerb(ctx: VerbContext): Promise<TmResult> {
|
|
19
|
+
// An empty registry means production wiring is incomplete — the verb must
|
|
20
|
+
// surface that loudly, not silently report "no teammates". A zero-engine
|
|
21
|
+
// process is a misconfiguration, not a fleet state.
|
|
22
|
+
const engines = ctx.engines.registered()
|
|
23
|
+
if (engines.length === 0) return noEngineRegistered()
|
|
24
|
+
|
|
25
|
+
const listings = await Promise.all(engines.map((engine) => engine.list(ctx.engineContext)))
|
|
26
|
+
return formatListing(listings.flat())
|
|
27
|
+
}
|
package/src/verbs/mem.ts
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `tm mem <name>` — project memory dump. Decision multi-engine-tui-architecture §"`history`
|
|
3
|
+
* and `mem` stay" keeps the verb alive across engines. The Claude
|
|
4
|
+
* engine reads `~/.claude/projects/<encoded>/memory/`; the Codex
|
|
5
|
+
* engine returns `not-supported`.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import type { MemoryRequest, TeammateName, TextResult } from '../engines/types'
|
|
9
|
+
import type { TmResult } from '../tm'
|
|
10
|
+
import type { VerbContext } from './context'
|
|
11
|
+
import { resolveTargetEngine } from './resolve'
|
|
12
|
+
|
|
13
|
+
function formatMem(engineKind: string, result: TextResult): TmResult {
|
|
14
|
+
if (result.tmResult !== undefined) return result.tmResult
|
|
15
|
+
switch (result.kind) {
|
|
16
|
+
case 'text':
|
|
17
|
+
return { code: 0, stdout: result.text, stderr: '' }
|
|
18
|
+
case 'not-supported':
|
|
19
|
+
return {
|
|
20
|
+
code: 0,
|
|
21
|
+
stdout: '',
|
|
22
|
+
stderr:
|
|
23
|
+
engineKind === 'claude'
|
|
24
|
+
? `${result.reason}\n`
|
|
25
|
+
: ` not supported: ${result.reason}\n`,
|
|
26
|
+
}
|
|
27
|
+
case 'not-found':
|
|
28
|
+
return { code: 1, stdout: '', stderr: `tm: mem: ${result.reason}\n` }
|
|
29
|
+
case 'failed':
|
|
30
|
+
return { code: 1, stdout: '', stderr: `tm: ${result.message}\n` }
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export async function memVerb(name: TeammateName, ctx: VerbContext): Promise<TmResult> {
|
|
35
|
+
const engine = await resolveTargetEngine(name, ctx)
|
|
36
|
+
if ('code' in engine) return engine
|
|
37
|
+
|
|
38
|
+
const req: MemoryRequest = { name }
|
|
39
|
+
return formatMem(engine.kind, await engine.mem(req, ctx.engineContext))
|
|
40
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `tm poll <repo> <regex> [timeout]` — block until a teammate's pane
|
|
3
|
+
* matches a regex, or a timeout elapses (a diagnostic verb).
|
|
4
|
+
*
|
|
5
|
+
* The poll loop is native; the match itself delegates to the real
|
|
6
|
+
* `grep -E`, the way `states` delegates alignment to `column`. `tm`'s
|
|
7
|
+
* `capture-pane | grep -qE` runs under `set -o pipefail`, so a match
|
|
8
|
+
* needs both the capture to succeed and `grep` to exit 0.
|
|
9
|
+
*
|
|
10
|
+
* Claude-only at the verb level: the codex driver does not run inside
|
|
11
|
+
* tmux, so a `tm poll codex-1 ...` falls through to the no-session
|
|
12
|
+
* error (which is the same shape tmux would emit anyway).
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
import { requireSession, resolvePaneTarget } from '../engines/claude/tmux'
|
|
16
|
+
import { isNonNegativeInteger, sleepMs } from '../engines/claude/clock'
|
|
17
|
+
import type { TmResult } from '../tm'
|
|
18
|
+
import type { GrepRunner } from '../grep'
|
|
19
|
+
import type { TmuxRunner } from '../tmux'
|
|
20
|
+
|
|
21
|
+
export interface PollEnv {
|
|
22
|
+
readonly runTmux: TmuxRunner
|
|
23
|
+
readonly runGrep: GrepRunner
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export async function pollVerb(args: readonly string[], env: PollEnv): Promise<TmResult> {
|
|
27
|
+
const repo = args[0] ?? ''
|
|
28
|
+
const pattern = args[1] ?? ''
|
|
29
|
+
if (repo === '' || pattern === '') {
|
|
30
|
+
return die('usage: tm poll <repo> <regex> [timeout=180]')
|
|
31
|
+
}
|
|
32
|
+
// `||`, not `??`: `tm`'s `${3:-180}` also defaults on an empty-string arg.
|
|
33
|
+
const timeoutArg = args[2] || '180'
|
|
34
|
+
|
|
35
|
+
const sessionMissing = await requireSession(repo, env.runTmux)
|
|
36
|
+
if (sessionMissing !== null) return sessionMissing
|
|
37
|
+
|
|
38
|
+
const pane = await resolvePaneTarget(repo, env.runTmux)
|
|
39
|
+
if (pane === '') return die(`could not resolve pane target for ${repo}`)
|
|
40
|
+
|
|
41
|
+
// Same `[[ ^[0-9]+$ ]]` guard `send` / `wait` / `compact` use for their
|
|
42
|
+
// `--timeout` — a malformed value would otherwise become a NaN loop.
|
|
43
|
+
if (!isNonNegativeInteger(timeoutArg)) return { code: 1, stdout: '', stderr: '' }
|
|
44
|
+
const end = Math.floor(Date.now() / 1000) + Number(timeoutArg)
|
|
45
|
+
while (Math.floor(Date.now() / 1000) < end) {
|
|
46
|
+
const capture = await env.runTmux(['capture-pane', '-t', pane, '-p', '-S', '-300'])
|
|
47
|
+
if (capture.code === 0 && (await env.runGrep(pattern, capture.stdout)) === 0) {
|
|
48
|
+
return { code: 0, stdout: `matched: ${pattern}\n`, stderr: '' }
|
|
49
|
+
}
|
|
50
|
+
await sleepMs(3000)
|
|
51
|
+
}
|
|
52
|
+
return {
|
|
53
|
+
code: 1,
|
|
54
|
+
stdout: '',
|
|
55
|
+
stderr: `tm: timeout after ${timeoutArg}s waiting for /${pattern}/ in ${repo}\n`,
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
function die(message: string): TmResult {
|
|
60
|
+
return { code: 1, stdout: '', stderr: `tm: ${message}\n` }
|
|
61
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `tm reload <name>` — ask one teammate to reload its plugin set.
|
|
3
|
+
*/
|
|
4
|
+
|
|
5
|
+
import { formatReload } from './format'
|
|
6
|
+
import type { ReloadRequest, TeammateName } from '../engines/types'
|
|
7
|
+
import type { TmResult } from '../tm'
|
|
8
|
+
import type { VerbContext } from './context'
|
|
9
|
+
import { resolveTargetEngine } from './resolve'
|
|
10
|
+
|
|
11
|
+
export async function reloadVerb(name: TeammateName, ctx: VerbContext): Promise<TmResult> {
|
|
12
|
+
const engine = await resolveTargetEngine(name, ctx)
|
|
13
|
+
if ('code' in engine) return engine
|
|
14
|
+
|
|
15
|
+
const req: ReloadRequest = { name }
|
|
16
|
+
return formatReload(await engine.reload(req, ctx.engineContext))
|
|
17
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { Engine } from '../engines/engine'
|
|
2
|
+
import type { TeammateName } from '../engines/types'
|
|
3
|
+
import type { TmResult } from '../tm'
|
|
4
|
+
import type { VerbContext } from './context'
|
|
5
|
+
import { noEngineRegistered } from './format'
|
|
6
|
+
|
|
7
|
+
export async function resolveTargetEngine(
|
|
8
|
+
name: TeammateName,
|
|
9
|
+
ctx: VerbContext,
|
|
10
|
+
): Promise<Engine | TmResult> {
|
|
11
|
+
const resolved = await ctx.router.resolve(name)
|
|
12
|
+
if (resolved !== null) return resolved.engine
|
|
13
|
+
return ctx.engines.get('claude') ?? noEngineRegistered()
|
|
14
|
+
}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `tm resume <name> [checkpoint]` — relaunch a previous teammate session.
|
|
3
|
+
*
|
|
4
|
+
* Engine selection priority (literal per the resume-probing design):
|
|
5
|
+
* 1. explicit `--engine` flag — caller's override, wins unconditionally
|
|
6
|
+
* 2. checkpoint-from-rollout — a Codex thread-id maps to a rollout
|
|
7
|
+
* (existing `codexFromRollout` logic — preserves `tm resume <name> <thread-id>`
|
|
8
|
+
* after `tm kill` has removed the base record)
|
|
9
|
+
* 3. router resolution — an existing teammate's recorded engine
|
|
10
|
+
* 4. cwd probing — both engines are asked whether they
|
|
11
|
+
* hold history for the teammate's cwd; single candidate auto-routes,
|
|
12
|
+
* double candidate is an ambiguity error, no candidate is "no resumable
|
|
13
|
+
* session" — see decision context in the PR.
|
|
14
|
+
* 5. not-found — when probing cannot run (cwd unknown)
|
|
15
|
+
* and the identity router cannot resolve the name.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
import { hasClaudeHistoryForCwd } from '../engines/claude/history'
|
|
19
|
+
import { hasCodexHistoryForCwd } from '../engines/codex/history'
|
|
20
|
+
import { formatResume } from './format'
|
|
21
|
+
import { findCodexRolloutFile, readRolloutSessionCwd } from '../engines/codex/rollout'
|
|
22
|
+
import { resolveTargetEngine } from './resolve'
|
|
23
|
+
import type { Engine } from '../engines/engine'
|
|
24
|
+
import type { EngineKind, ResumeRequest, TeammateName } from '../engines/types'
|
|
25
|
+
import type { TmResult } from '../tm'
|
|
26
|
+
import type { VerbContext } from './context'
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
* Recognise a worktree-shaped cwd
|
|
30
|
+
* (`<repo>/.claude/worktrees/<slug>`). The shape is the contract
|
|
31
|
+
* both engines launch worktree teammates under, so the same parser
|
|
32
|
+
* works whether the rollout was written by a Claude or a Codex
|
|
33
|
+
* teammate. Returns `null` when `cwd` does not have the suffix —
|
|
34
|
+
* the caller then falls back to "treat cwd as the repo itself"
|
|
35
|
+
* (`--no-worktree` mode).
|
|
36
|
+
*
|
|
37
|
+
* Exported so the unit test pinning the resume-after-clean-kill
|
|
38
|
+
* recovery shape can target this directly without standing up
|
|
39
|
+
* a real Codex daemon.
|
|
40
|
+
*/
|
|
41
|
+
export function parseWorktreeCwd(cwd: string): { repo: string; slug: string } | null {
|
|
42
|
+
const m = cwd.match(/^(.*?)\/\.claude\/worktrees\/([^/]+)\/?$/)
|
|
43
|
+
if (m === null) return null
|
|
44
|
+
const repo = m[1] ?? ''
|
|
45
|
+
const slug = m[2] ?? ''
|
|
46
|
+
if (repo.length === 0 || slug.length === 0) return null
|
|
47
|
+
return { repo, slug }
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
export interface ResumeArgs {
|
|
51
|
+
readonly name: TeammateName
|
|
52
|
+
readonly repo: string | null
|
|
53
|
+
readonly cwd: string | null
|
|
54
|
+
readonly worktreeSlug: string | null
|
|
55
|
+
readonly checkpoint: string | null
|
|
56
|
+
readonly prompt: string | null
|
|
57
|
+
readonly displayName: string | null
|
|
58
|
+
/** `tm resume --engine claude|codex` — overrides every other selector. */
|
|
59
|
+
readonly engineHint: EngineKind | null
|
|
60
|
+
/** `~/.claude/projects` (or test override) — needed for Claude-side probing. */
|
|
61
|
+
readonly projectsDir: string
|
|
62
|
+
/**
|
|
63
|
+
* Whether `cwd` was derived from a real source (an existing identity
|
|
64
|
+
* record, a Codex base record/meta, or a dispatcher subdirectory)
|
|
65
|
+
* rather than the last-resort fallback. Probing must skip itself
|
|
66
|
+
* when this is `false`, or it would match the dispatcher's own
|
|
67
|
+
* transcripts and false-route.
|
|
68
|
+
*/
|
|
69
|
+
readonly cwdProbeable: boolean
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
function die(message: string): TmResult {
|
|
73
|
+
return { code: 1, stdout: '', stderr: `tm: ${message}\n` }
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
async function dispatchResume(engine: Engine, args: ResumeArgs, ctx: VerbContext): Promise<TmResult> {
|
|
77
|
+
const req: ResumeRequest = {
|
|
78
|
+
name: args.name,
|
|
79
|
+
repo: args.repo,
|
|
80
|
+
cwd: args.cwd,
|
|
81
|
+
worktreeSlug: args.worktreeSlug,
|
|
82
|
+
checkpoint: args.checkpoint,
|
|
83
|
+
prompt: args.prompt,
|
|
84
|
+
displayName: args.displayName,
|
|
85
|
+
}
|
|
86
|
+
return formatResume(await engine.resume(req, ctx.engineContext))
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
export async function resumeVerb(args: ResumeArgs, ctx: VerbContext): Promise<TmResult> {
|
|
90
|
+
// 1. Explicit --engine wins unconditionally — caller's override.
|
|
91
|
+
if (args.engineHint !== null) {
|
|
92
|
+
const engine = ctx.engines.get(args.engineHint)
|
|
93
|
+
if (engine === undefined) {
|
|
94
|
+
return die(`resume: --engine ${args.engineHint} is not registered in this process`)
|
|
95
|
+
}
|
|
96
|
+
return dispatchResume(engine, args, ctx)
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
// 2. Checkpoint reverse-lookup — a passed thread-id that maps to a
|
|
100
|
+
// Codex rollout. Preserves `tm resume <name> <thread-id>` after
|
|
101
|
+
// `tm kill` has removed the live identity + Codex meta records.
|
|
102
|
+
//
|
|
103
|
+
// After a clean kill, `args.cwd` came from `cwdForName`'s last-resort
|
|
104
|
+
// fallback (no identity → no Codex meta → no `<dispatcherDir>/<name>`
|
|
105
|
+
// dir → dispatcher dir). Spawning the resumed daemon at the
|
|
106
|
+
// dispatcher dir would silently launch follow-up turns in the wrong
|
|
107
|
+
// workspace. The rollout's `session_meta.cwd` header records the
|
|
108
|
+
// daemon's original launch cwd verbatim; use it to override the
|
|
109
|
+
// fallback when the dispatcher would otherwise route blind. When
|
|
110
|
+
// the rollout cwd has the worktree shape
|
|
111
|
+
// (`.../.claude/worktrees/<slug>`), split out `repo` and
|
|
112
|
+
// `worktreeSlug` so the engine re-provisions the worktree if a
|
|
113
|
+
// prior `tm kill` removed it. The identity-known path (no kill, or
|
|
114
|
+
// `--name` matches a live record) already has the right cwd in
|
|
115
|
+
// `args.cwd`, so the override only fires when `cwdForName` could
|
|
116
|
+
// not produce a teammate-specific cwd.
|
|
117
|
+
const codex = ctx.engines.get('codex')
|
|
118
|
+
if (args.checkpoint !== null && codex !== undefined) {
|
|
119
|
+
const rollout = findCodexRolloutFile(args.checkpoint, ctx.engineContext.env)
|
|
120
|
+
if (rollout !== null) {
|
|
121
|
+
const rolloutCwd = readRolloutSessionCwd(rollout.path)
|
|
122
|
+
const shouldRecover = rolloutCwd !== null && (args.cwd === null || !args.cwdProbeable)
|
|
123
|
+
let recovered = args
|
|
124
|
+
if (shouldRecover && rolloutCwd !== null) {
|
|
125
|
+
const parts = parseWorktreeCwd(rolloutCwd)
|
|
126
|
+
recovered = parts === null
|
|
127
|
+
? { ...args, cwd: rolloutCwd, repo: rolloutCwd, worktreeSlug: null }
|
|
128
|
+
: { ...args, cwd: rolloutCwd, repo: parts.repo, worktreeSlug: parts.slug }
|
|
129
|
+
}
|
|
130
|
+
return dispatchResume(codex, recovered, ctx)
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
// 3. Router — an existing teammate's recorded engine.
|
|
135
|
+
const resolved = await ctx.router.resolve(args.name)
|
|
136
|
+
if (resolved !== null) {
|
|
137
|
+
return dispatchResume(resolved.engine, args, ctx)
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
// 4. cwd probing — single candidate auto-routes; double = ambiguity error.
|
|
141
|
+
// Probing is only meaningful when there is no checkpoint to disambiguate,
|
|
142
|
+
// and only safe when the cwd actually points at the teammate's repo.
|
|
143
|
+
if (args.checkpoint === null && args.cwd !== null && args.cwdProbeable) {
|
|
144
|
+
const claude = ctx.engines.get('claude')
|
|
145
|
+
const codexHas = codex !== undefined && hasCodexHistoryForCwd(args.cwd, ctx.engineContext.env)
|
|
146
|
+
const claudeHas = claude !== undefined && hasClaudeHistoryForCwd(args.cwd, args.projectsDir)
|
|
147
|
+
|
|
148
|
+
if (codexHas && claudeHas) {
|
|
149
|
+
return die(
|
|
150
|
+
`resume: ambiguous — both codex and claude have resumable history for ` +
|
|
151
|
+
`cwd ${args.cwd}. Pass --engine codex|claude, or give an explicit ` +
|
|
152
|
+
`<sid> (claude) / <thread-id> (codex).`,
|
|
153
|
+
)
|
|
154
|
+
}
|
|
155
|
+
if (codexHas) return dispatchResume(codex!, args, ctx)
|
|
156
|
+
if (claudeHas) return dispatchResume(claude!, args, ctx)
|
|
157
|
+
return die(
|
|
158
|
+
`resume: no resumable session for ${args.name} — no Claude transcript ` +
|
|
159
|
+
`under projectsDir and no Codex rollout for cwd ${args.cwd}. ` +
|
|
160
|
+
`To start a new session, use 'tm spawn ${args.name} [--engine codex|claude]'.`,
|
|
161
|
+
)
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
// 5. Not found — cwd is unknown (or checkpoint passed but unmatched). The
|
|
165
|
+
// production router may have migrated a live pre-identity teammate above;
|
|
166
|
+
// if resolution is still empty, there is no engine-safe target.
|
|
167
|
+
const engine = await resolveTargetEngine(args.name, ctx)
|
|
168
|
+
if ('code' in engine) return engine
|
|
169
|
+
return dispatchResume(engine, args, ctx)
|
|
170
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `tm send <name> --prompt p` — atomic round-trip. Decision multi-engine-tui-architecture
|
|
3
|
+
* §"Round-trips are atomic by default" makes wait the only path;
|
|
4
|
+
* `--no-wait` is removed. The verb resolves the teammate through the
|
|
5
|
+
* router and dispatches to `Engine.send`; the engine owns the
|
|
6
|
+
* transport.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
import { formatTurn } from './format'
|
|
10
|
+
import type { SendRequest, TeammateName } from '../engines/types'
|
|
11
|
+
import type { TmResult } from '../tm'
|
|
12
|
+
import type { VerbContext } from './context'
|
|
13
|
+
import { resolveTargetEngine } from './resolve'
|
|
14
|
+
|
|
15
|
+
export interface SendArgs {
|
|
16
|
+
readonly name: TeammateName
|
|
17
|
+
readonly prompt: string
|
|
18
|
+
readonly timeoutMs: number | null
|
|
19
|
+
readonly paneQuiet: boolean
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export async function sendVerb(args: SendArgs, ctx: VerbContext): Promise<TmResult> {
|
|
23
|
+
const engine = await resolveTargetEngine(args.name, ctx)
|
|
24
|
+
if ('code' in engine) return engine
|
|
25
|
+
if (args.paneQuiet && engine.kind !== 'claude') {
|
|
26
|
+
return { code: 1, stdout: '', stderr: 'tm: tm send: --pane-quiet is not supported for codex teammates\n' }
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
const req: SendRequest = {
|
|
30
|
+
name: args.name,
|
|
31
|
+
prompt: args.prompt,
|
|
32
|
+
timeoutMs: args.timeoutMs,
|
|
33
|
+
paneQuiet: args.paneQuiet,
|
|
34
|
+
}
|
|
35
|
+
return formatTurn(await engine.send(req, ctx.engineContext))
|
|
36
|
+
}
|