@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,48 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Wall-clock + timing utilities shared by the hot-path verbs. Pulled
|
|
3
|
+
* out so a future `EngineContext.now()` plumb-through has a single
|
|
4
|
+
* adapter point (Phase 2a-2 keeps the direct `Date.now()`).
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
/** Resolve after `ms` milliseconds — `tm`'s `sleep` analog. */
|
|
8
|
+
export function sleepMs(ms: number): Promise<void> {
|
|
9
|
+
return new Promise((resolve) => setTimeout(resolve, ms))
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
/** Epoch seconds, sampled once — `tm`'s `$(date +%s)`. */
|
|
13
|
+
export function nowSec(): number {
|
|
14
|
+
return Math.floor(Date.now() / 1000)
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Whether `value` is a valid non-negative integer string (the shape
|
|
19
|
+
* `tm`'s `[[ "$timeout" =~ ^[0-9]+$ ]]` accepts). The native verbs guard
|
|
20
|
+
* `--timeout` with this so a malformed value does not become a NaN loop.
|
|
21
|
+
*/
|
|
22
|
+
export function isNonNegativeInteger(value: string): boolean {
|
|
23
|
+
return /^[0-9]+$/.test(value)
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Format an epoch-seconds value as `YYYY-MM-DD HH:MM:SS` in local time
|
|
28
|
+
* — the `tm` `history_detail` `last_seen` field. `tm` does this with
|
|
29
|
+
* BSD `date -r`, so this rendering matches `tm` on macOS; `date -r
|
|
30
|
+
* <epoch>` is not portable to GNU, which is why `history`'s detail-
|
|
31
|
+
* mode conformance is macOS-gated.
|
|
32
|
+
*/
|
|
33
|
+
export function fmtLocalDateTime(epochSec: number): string {
|
|
34
|
+
const d = new Date(epochSec * 1000)
|
|
35
|
+
const p = (n: number): string => String(n).padStart(2, '0')
|
|
36
|
+
return (
|
|
37
|
+
`${d.getFullYear()}-${p(d.getMonth() + 1)}-${p(d.getDate())} ` +
|
|
38
|
+
`${p(d.getHours())}:${p(d.getMinutes())}:${p(d.getSeconds())}`
|
|
39
|
+
)
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/** Format a second-count as a short relative age — `tm`'s `fmt_age`. */
|
|
43
|
+
export function fmtAge(age: number): string {
|
|
44
|
+
if (age < 60) return `${age}s`
|
|
45
|
+
if (age < 3600) return `${Math.floor(age / 60)}m`
|
|
46
|
+
if (age < 86400) return `${Math.floor(age / 3600)}h`
|
|
47
|
+
return `${Math.floor(age / 86400)}d`
|
|
48
|
+
}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `tm compact` — send `/compact` and verify PostCompact fired. Reports
|
|
3
|
+
* the one-line `compacted` on stdout when it did. Two non-success modes
|
|
4
|
+
* with different exit codes:
|
|
5
|
+
*
|
|
6
|
+
* - Claude Code refuses with the "Not enough messages to compact"
|
|
7
|
+
* tool-result block. That path fires no Stop/PostCompact hook, so
|
|
8
|
+
* the visible pane is scanned alongside the idle-marker poll to
|
|
9
|
+
* detect it. Exit 1 — `/compact` rejected and won't proceed.
|
|
10
|
+
* - PostCompact never fires within `--timeout` — compaction may still
|
|
11
|
+
* be running. Exit `EXIT_SYNC_WAIT_EXPIRED` (124) to mark this as
|
|
12
|
+
* "sync wait expired, teammate still running", distinct from a true
|
|
13
|
+
* failure (no session, sid missing) which keeps exit 1.
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
import { existsSync } from 'node:fs'
|
|
17
|
+
|
|
18
|
+
import { sendKeys } from './keys'
|
|
19
|
+
import { resolveSidOrDie } from './idle'
|
|
20
|
+
import { idleMarkerFor } from '../../persistence/paths'
|
|
21
|
+
import { die, requireSession, resolvePaneTarget } from './tmux'
|
|
22
|
+
import { isNonNegativeInteger, nowSec, sleepMs } from './clock'
|
|
23
|
+
import { probeStillAlive } from './wait-signals'
|
|
24
|
+
import { parseCompactArgs } from '../../shared/verb-args'
|
|
25
|
+
import type { ClaudeVerbEnv } from './env'
|
|
26
|
+
import { EXIT_SYNC_WAIT_EXPIRED, type TmResult } from '../../tm'
|
|
27
|
+
|
|
28
|
+
/** The bracketed-paste refusal `Claude Code` emits for a too-short transcript. */
|
|
29
|
+
export const COMPACT_REFUSAL_MARK = '⎿ Error: Not enough messages to compact'
|
|
30
|
+
|
|
31
|
+
export async function claudeCompact(args: readonly string[], env: ClaudeVerbEnv): Promise<TmResult> {
|
|
32
|
+
const parsed = parseCompactArgs(args)
|
|
33
|
+
if ('error' in parsed) return parsed.error
|
|
34
|
+
const { name, timeout } = parsed
|
|
35
|
+
if (name === '') return die('usage: tm compact <name> [timeout=1800] [--timeout N]')
|
|
36
|
+
if (!isNonNegativeInteger(timeout)) {
|
|
37
|
+
return die(`tm compact: --timeout must be a non-negative integer (got: '${timeout}')`)
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
const sessionMissing = await requireSession(name, env.runTmux)
|
|
41
|
+
if (sessionMissing !== null) return sessionMissing
|
|
42
|
+
const sidR = resolveSidOrDie(name)
|
|
43
|
+
if ('error' in sidR) return sidR.error
|
|
44
|
+
const sid = sidR.sid
|
|
45
|
+
const pane = await resolvePaneTarget(name, env.runTmux)
|
|
46
|
+
if (pane === '') return die(`could not resolve pane target for ${name}`)
|
|
47
|
+
|
|
48
|
+
let stderr = `tm compact: sending /compact to ${name} (sid=${sid}, timeout=${timeout}s)\n`
|
|
49
|
+
|
|
50
|
+
const sent = await sendKeys(name, '/compact', env.runTmux, process.env)
|
|
51
|
+
// `bin/tm:1139` runs `_send_keys >/dev/null`, redirecting *stdout* only;
|
|
52
|
+
// the `sent to ...` / `sid=...` lines `_send_keys` writes to stderr reach
|
|
53
|
+
// the user. Preserve them by carrying `sent.stderr` on every return path.
|
|
54
|
+
stderr += sent.stderr
|
|
55
|
+
if (sent.code !== 0) {
|
|
56
|
+
return { code: sent.code, stdout: sent.stdout, stderr }
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
const timeoutSec = Number(timeout)
|
|
60
|
+
const end = nowSec() + timeoutSec
|
|
61
|
+
const marker = idleMarkerFor(sid)
|
|
62
|
+
while (nowSec() < end) {
|
|
63
|
+
if (existsSync(marker)) {
|
|
64
|
+
return { code: 0, stdout: 'compacted\n', stderr }
|
|
65
|
+
}
|
|
66
|
+
// `bin/tm`'s refusal scan is `[[ -n "$pane" ]] && tmux capture-pane ...`
|
|
67
|
+
// — if the pane is gone the verb silently disables refusal detection
|
|
68
|
+
// and keeps polling the idle marker. Mirror that.
|
|
69
|
+
if (pane.length > 0) {
|
|
70
|
+
try {
|
|
71
|
+
const captured = await env.runTmux(['capture-pane', '-t', pane, '-p'])
|
|
72
|
+
if (captured.code === 0 && captured.stdout.includes(COMPACT_REFUSAL_MARK)) {
|
|
73
|
+
return {
|
|
74
|
+
code: 1,
|
|
75
|
+
stdout: '',
|
|
76
|
+
stderr:
|
|
77
|
+
stderr +
|
|
78
|
+
`tm compact: ${name} refused /compact — Claude Code reported ` +
|
|
79
|
+
"'Not enough messages to compact' (transcript too short).\n",
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
} catch {
|
|
83
|
+
// A capture failure is a transient tmux error; the idle marker is
|
|
84
|
+
// the primary signal — keep polling.
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
await sleepMs(3000)
|
|
88
|
+
}
|
|
89
|
+
// Same re-probe pattern as `send.ts` / `wait.ts`: 124 means "still
|
|
90
|
+
// running, compact may yet finish — re-collect with `tm wait`." If the
|
|
91
|
+
// tmux session or sid file vanished mid-wait, that promise is false and
|
|
92
|
+
// returning 124 would deadlock the dispatcher into never respawning.
|
|
93
|
+
const dead = await probeStillAlive(name, env.runTmux)
|
|
94
|
+
if (dead !== null) {
|
|
95
|
+
return { ...dead, stderr: stderr + dead.stderr }
|
|
96
|
+
}
|
|
97
|
+
return {
|
|
98
|
+
code: EXIT_SYNC_WAIT_EXPIRED,
|
|
99
|
+
stdout: '',
|
|
100
|
+
stderr:
|
|
101
|
+
stderr +
|
|
102
|
+
`tm compact: sync wait expired after ${timeout}s on ${name} ` +
|
|
103
|
+
'(PostCompact never fired; compaction may still be running, or the ' +
|
|
104
|
+
`Stop hook is misconfigured). Check 'tm status ${name}' and ${marker}. ` +
|
|
105
|
+
`exit ${EXIT_SYNC_WAIT_EXPIRED}.\n`,
|
|
106
|
+
}
|
|
107
|
+
}
|
|
@@ -0,0 +1,239 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Claude-engine `tm ctx` body — report a teammate's transcript context
|
|
3
|
+
* window usage.
|
|
4
|
+
*
|
|
5
|
+
* Two entry points keep the strangler clean:
|
|
6
|
+
*
|
|
7
|
+
* - `claudeCtxLine(name, windowOverride, env)` is the byte-exact text
|
|
8
|
+
* the legacy `tm ctx` printed per teammate (including the
|
|
9
|
+
* `? (no sid / no transcript / no usage)` soft-fails so a `--all`
|
|
10
|
+
* fan-out keeps going across teammates with no readable transcript).
|
|
11
|
+
* The CLI fan-out wrapper still emits this verbatim.
|
|
12
|
+
* - `claudeCtxUsage(name, env)` is the structured `ContextResult` the
|
|
13
|
+
* Engine interface speaks in — same numbers, no formatting.
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
import { readFileSync, statSync } from 'node:fs'
|
|
17
|
+
import { join } from 'node:path'
|
|
18
|
+
|
|
19
|
+
import { encodeProjectDir } from '../../persistence/paths'
|
|
20
|
+
import { cwdFile } from '../../persistence/paths'
|
|
21
|
+
import { readSid } from './state'
|
|
22
|
+
import type { ContextResult, TeammateName } from '../types'
|
|
23
|
+
|
|
24
|
+
export interface ClaudeCtxEnv {
|
|
25
|
+
readonly dispatcherDir: string
|
|
26
|
+
readonly projectsDir: string
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
/** A teammate's context-window usage, summed from its transcript. */
|
|
30
|
+
export interface CtxUsage {
|
|
31
|
+
/** Tokens in the last assistant turn — input plus both cache reads. */
|
|
32
|
+
used: number
|
|
33
|
+
/** Output tokens of the last assistant turn. */
|
|
34
|
+
out: number
|
|
35
|
+
/** The largest `used`-style total across every assistant turn. */
|
|
36
|
+
peak: number
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
function isPlainObject(value: unknown): value is Record<string, unknown> {
|
|
40
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value)
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/** Sum the cache-inclusive input tokens of one `message.usage` object. */
|
|
44
|
+
function usageInput(usage: Record<string, unknown>): number {
|
|
45
|
+
const num = (v: unknown): number => (typeof v === 'number' ? v : 0)
|
|
46
|
+
return (
|
|
47
|
+
num(usage['input_tokens']) +
|
|
48
|
+
num(usage['cache_creation_input_tokens']) +
|
|
49
|
+
num(usage['cache_read_input_tokens'])
|
|
50
|
+
)
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
function readIfNonEmpty(file: string): string | null {
|
|
54
|
+
try {
|
|
55
|
+
if (statSync(file).size === 0) return null
|
|
56
|
+
return readFileSync(file, 'utf8')
|
|
57
|
+
} catch {
|
|
58
|
+
return null
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
function isRegularFile(path: string): boolean {
|
|
63
|
+
try {
|
|
64
|
+
return statSync(path).isFile()
|
|
65
|
+
} catch {
|
|
66
|
+
return false
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/** The Claude Code transcript file for a teammate session under `projectsDir`. */
|
|
71
|
+
export function transcriptFile(projectsDir: string, cwd: string, sid: string): string {
|
|
72
|
+
return join(projectsDir, encodeProjectDir(cwd), `${sid}.jsonl`)
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/**
|
|
76
|
+
* The most recent assistant turn's joined text from a Claude Code
|
|
77
|
+
* transcript jsonl, or `''` when no text-bearing assistant entry exists
|
|
78
|
+
* (unreadable file, malformed entries, tool-only/thinking-only turns).
|
|
79
|
+
*
|
|
80
|
+
* Walks the parsed entries from end to start, picks the first assistant
|
|
81
|
+
* entry whose `message.content` carries at least one non-empty `text`
|
|
82
|
+
* block, and returns those text blocks joined with `''` — the on-stop
|
|
83
|
+
* hook's `extract_last_turn` shape for a single assistant entry.
|
|
84
|
+
*
|
|
85
|
+
* Used by `tm spawn --resume` to seed `<sid>.last` with the prior turn's
|
|
86
|
+
* deliverable so the dispatcher has something to re-read after the
|
|
87
|
+
* relaunch, even before the next turn fires.
|
|
88
|
+
*/
|
|
89
|
+
export function readLastAssistantText(jsonlPath: string): string {
|
|
90
|
+
let content: string
|
|
91
|
+
try {
|
|
92
|
+
content = readFileSync(jsonlPath, 'utf8')
|
|
93
|
+
} catch {
|
|
94
|
+
return ''
|
|
95
|
+
}
|
|
96
|
+
const lines = content.split('\n')
|
|
97
|
+
for (let i = lines.length - 1; i >= 0; i--) {
|
|
98
|
+
const line = lines[i]!
|
|
99
|
+
if (line.trim() === '') continue
|
|
100
|
+
let entry: unknown
|
|
101
|
+
try {
|
|
102
|
+
entry = JSON.parse(line)
|
|
103
|
+
} catch {
|
|
104
|
+
continue
|
|
105
|
+
}
|
|
106
|
+
if (!isPlainObject(entry)) continue
|
|
107
|
+
if (entry['type'] !== 'assistant') continue
|
|
108
|
+
const message = entry['message']
|
|
109
|
+
if (!isPlainObject(message)) continue
|
|
110
|
+
const arr = message['content']
|
|
111
|
+
if (!Array.isArray(arr)) continue
|
|
112
|
+
const texts: string[] = []
|
|
113
|
+
for (const item of arr) {
|
|
114
|
+
if (!isPlainObject(item)) continue
|
|
115
|
+
if (item['type'] !== 'text') continue
|
|
116
|
+
const t = item['text']
|
|
117
|
+
if (typeof t === 'string') texts.push(t)
|
|
118
|
+
}
|
|
119
|
+
const joined = texts.join('')
|
|
120
|
+
if (joined.length > 0) return joined
|
|
121
|
+
}
|
|
122
|
+
return ''
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Read a teammate's ctx usage from its transcript jsonl — the native
|
|
127
|
+
* form of the `jq -s` pass `tm`'s `_ctx_format_line` ran. Collects
|
|
128
|
+
* every assistant entry's `message.usage`: `used` / `out` come from the
|
|
129
|
+
* last one, `peak` is the max input across all. Returns `null` when
|
|
130
|
+
* there is no usable usage; that includes the cases where `jq -s`
|
|
131
|
+
* itself would have failed (a non-object entry, a non-object
|
|
132
|
+
* `.message` / `.message.usage`).
|
|
133
|
+
*/
|
|
134
|
+
export function readCtxUsage(jsonl: string): CtxUsage | null {
|
|
135
|
+
let content: string
|
|
136
|
+
try {
|
|
137
|
+
content = readFileSync(jsonl, 'utf8')
|
|
138
|
+
} catch {
|
|
139
|
+
return null
|
|
140
|
+
}
|
|
141
|
+
const inputs: number[] = []
|
|
142
|
+
let lastOut = 0
|
|
143
|
+
for (const line of content.split('\n')) {
|
|
144
|
+
if (line.trim() === '') continue
|
|
145
|
+
let entry: unknown
|
|
146
|
+
try {
|
|
147
|
+
entry = JSON.parse(line)
|
|
148
|
+
} catch {
|
|
149
|
+
return null
|
|
150
|
+
}
|
|
151
|
+
if (entry === null) continue
|
|
152
|
+
if (!isPlainObject(entry)) return null
|
|
153
|
+
if (entry['type'] !== 'assistant') continue
|
|
154
|
+
const message = entry['message']
|
|
155
|
+
if (message === null || message === undefined) continue
|
|
156
|
+
if (!isPlainObject(message)) return null
|
|
157
|
+
const usage = message['usage']
|
|
158
|
+
if (usage === null || usage === undefined) continue
|
|
159
|
+
if (!isPlainObject(usage)) return null
|
|
160
|
+
inputs.push(usageInput(usage))
|
|
161
|
+
lastOut = typeof usage['output_tokens'] === 'number' ? usage['output_tokens'] : 0
|
|
162
|
+
}
|
|
163
|
+
if (inputs.length === 0) return null
|
|
164
|
+
let peak = inputs[0]!
|
|
165
|
+
for (const value of inputs) if (value > peak) peak = value
|
|
166
|
+
return { used: inputs[inputs.length - 1]!, out: lastOut, peak }
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
/**
|
|
170
|
+
* The byte-exact per-teammate `tm ctx` line. `windowOverride` is `''`,
|
|
171
|
+
* `'200k'`, or `'1m'`. Soft-fails to a `? (...)` diagnostic so a
|
|
172
|
+
* `--all` fan-out keeps going.
|
|
173
|
+
*/
|
|
174
|
+
export function claudeCtxLine(
|
|
175
|
+
name: TeammateName,
|
|
176
|
+
windowOverride: string,
|
|
177
|
+
env: ClaudeCtxEnv,
|
|
178
|
+
): string {
|
|
179
|
+
const sid = readSid(name)
|
|
180
|
+
if (sid === null) return `${name}: ? (no sid file)`
|
|
181
|
+
|
|
182
|
+
const recordedCwd = readIfNonEmpty(cwdFile(name))
|
|
183
|
+
const cwd =
|
|
184
|
+
recordedCwd !== null ? recordedCwd.replace(/\n+$/, '') : `${env.dispatcherDir}/${name}`
|
|
185
|
+
const jsonl = transcriptFile(env.projectsDir, cwd, sid)
|
|
186
|
+
if (!isRegularFile(jsonl)) return `${name}: ? (no transcript at ${jsonl})`
|
|
187
|
+
|
|
188
|
+
const usage = readCtxUsage(jsonl)
|
|
189
|
+
if (usage === null) return `${name}: ? (no assistant usage in transcript)`
|
|
190
|
+
|
|
191
|
+
const next = usage.used + usage.out
|
|
192
|
+
let window: number
|
|
193
|
+
let note: string
|
|
194
|
+
if (windowOverride === '1m') {
|
|
195
|
+
window = 1000000
|
|
196
|
+
note = 'flag'
|
|
197
|
+
} else if (windowOverride === '200k') {
|
|
198
|
+
window = 200000
|
|
199
|
+
note = 'flag'
|
|
200
|
+
} else if (usage.peak > 210000) {
|
|
201
|
+
window = 1000000
|
|
202
|
+
note = 'detected 1M'
|
|
203
|
+
} else {
|
|
204
|
+
window = 200000
|
|
205
|
+
note = 'assumed 200k'
|
|
206
|
+
}
|
|
207
|
+
const pct = Math.floor((usage.used * 100) / window)
|
|
208
|
+
const wlabel = window >= 1000000 ? '1M' : '200k'
|
|
209
|
+
return `${name}: ${usage.used} tokens · ~${next} next turn · ${pct}% of ${wlabel} (${note})`
|
|
210
|
+
}
|
|
211
|
+
|
|
212
|
+
/**
|
|
213
|
+
* Structured `ContextResult` for `ClaudeEngine.ctx`. Returns `kind:
|
|
214
|
+
* 'not-supported'` when the transcript or usage is unreadable — the
|
|
215
|
+
* verb-layer formatter renders the same `? (...)` line a future
|
|
216
|
+
* EngineRegistry dispatch would emit.
|
|
217
|
+
*/
|
|
218
|
+
export function claudeCtxUsage(name: TeammateName, env: ClaudeCtxEnv): ContextResult {
|
|
219
|
+
const sid = readSid(name)
|
|
220
|
+
if (sid === null) return { kind: 'not-supported', reason: `no sid file for ${name}` }
|
|
221
|
+
const recordedCwd = readIfNonEmpty(cwdFile(name))
|
|
222
|
+
const cwd =
|
|
223
|
+
recordedCwd !== null ? recordedCwd.replace(/\n+$/, '') : `${env.dispatcherDir}/${name}`
|
|
224
|
+
const jsonl = transcriptFile(env.projectsDir, cwd, sid)
|
|
225
|
+
if (!isRegularFile(jsonl)) {
|
|
226
|
+
return { kind: 'not-supported', reason: `no transcript at ${jsonl}` }
|
|
227
|
+
}
|
|
228
|
+
const usage = readCtxUsage(jsonl)
|
|
229
|
+
if (usage === null) {
|
|
230
|
+
return { kind: 'not-supported', reason: `no assistant usage in transcript for ${name}` }
|
|
231
|
+
}
|
|
232
|
+
const window = usage.peak > 210000 ? 1000000 : 200000
|
|
233
|
+
return {
|
|
234
|
+
kind: 'usage',
|
|
235
|
+
tokensUsed: usage.used,
|
|
236
|
+
tokensTotal: window,
|
|
237
|
+
pct: Math.floor((usage.used * 100) / window),
|
|
238
|
+
}
|
|
239
|
+
}
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `tm doctor` — a read-only environment self-check. Sections fire
|
|
3
|
+
* top-down: the `tm` executable, the dispatcher dir, tmux, the idle
|
|
4
|
+
* dir, the active teammate list, and the codex teammates. Soft-fails
|
|
5
|
+
* throughout (every probe is guarded) and always exits 0; output is
|
|
6
|
+
* meant to be eyeballed, not parsed.
|
|
7
|
+
*
|
|
8
|
+
* The path the "tm executable" section reports is the
|
|
9
|
+
* `<plugin-root>/bin/tm` launcher. The caller passes the resolved
|
|
10
|
+
* paths in (`tmWrapper`, `pluginJson`) because the relative-`../..`
|
|
11
|
+
* computation has to be done from a `src/*.ts` file at depth one
|
|
12
|
+
* inside the plugin root — engines/claude/doctor.ts sits three
|
|
13
|
+
* directories deeper, so the math does not work from here.
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
import { readdirSync, readFileSync, statSync } from 'node:fs'
|
|
17
|
+
|
|
18
|
+
import { isDirectory } from './idle'
|
|
19
|
+
import { iterTeammates } from './tmux'
|
|
20
|
+
import { die } from './tmux'
|
|
21
|
+
import { fmtLocalDateTime } from './clock'
|
|
22
|
+
import { idleDir, TMUX_SESSION_PREFIX } from '../../persistence/paths'
|
|
23
|
+
import {
|
|
24
|
+
isProcessAlive as codexProcessAlive,
|
|
25
|
+
listDaemons as listCodexDaemons,
|
|
26
|
+
readDaemonState as readCodexState,
|
|
27
|
+
reapDaemon as reapCodexDaemon,
|
|
28
|
+
} from '../codex/supervisor'
|
|
29
|
+
import { removeBaseRecord as removeCodexBaseRecord } from '../codex/persistence'
|
|
30
|
+
import type { ClaudeVerbEnv } from './env'
|
|
31
|
+
import type { TmResult } from '../../tm'
|
|
32
|
+
|
|
33
|
+
export interface DoctorPaths {
|
|
34
|
+
/** Absolute path to the `<plugin-root>/bin/tm` launcher. */
|
|
35
|
+
tmWrapper: string
|
|
36
|
+
/** Absolute path to `<plugin-root>/.claude-plugin/plugin.json`. */
|
|
37
|
+
pluginJson: string
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export async function claudeDoctor(
|
|
41
|
+
args: readonly string[],
|
|
42
|
+
env: ClaudeVerbEnv,
|
|
43
|
+
paths: DoctorPaths,
|
|
44
|
+
): Promise<TmResult> {
|
|
45
|
+
if (args.length > 0) {
|
|
46
|
+
return die(`tm doctor: takes no arguments (got: ${args.join(' ')})`)
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
// The kv row: a 20-character padded label, then the value — matches
|
|
50
|
+
// `cmd_doctor`'s `printf ' %-20s%s\n'`. One source of truth here
|
|
51
|
+
// keeps alignment immune to label renames.
|
|
52
|
+
const kv = (label: string, value: string): string => {
|
|
53
|
+
const padded = `${label}:`.padEnd(20, ' ')
|
|
54
|
+
return ` ${padded}${value}\n`
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
let out = ''
|
|
58
|
+
|
|
59
|
+
// --- tm executable ---
|
|
60
|
+
const { tmWrapper, pluginJson } = paths
|
|
61
|
+
let version = 'unknown'
|
|
62
|
+
let pluginJsonPresent = false
|
|
63
|
+
try {
|
|
64
|
+
if (statSync(pluginJson).isFile()) {
|
|
65
|
+
pluginJsonPresent = true
|
|
66
|
+
const parsed = JSON.parse(readFileSync(pluginJson, 'utf8')) as { version?: unknown }
|
|
67
|
+
if (typeof parsed.version === 'string' && parsed.version.length > 0) {
|
|
68
|
+
version = parsed.version
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
} catch {
|
|
72
|
+
pluginJsonPresent = false
|
|
73
|
+
}
|
|
74
|
+
out += 'tm executable:\n'
|
|
75
|
+
out += kv('path', tmWrapper)
|
|
76
|
+
out += kv('version', version)
|
|
77
|
+
if (!pluginJsonPresent) out += kv('note', `plugin.json not found at ${pluginJson}`)
|
|
78
|
+
out += '\n'
|
|
79
|
+
|
|
80
|
+
// --- dispatcher dir ---
|
|
81
|
+
out += 'dispatcher dir:\n'
|
|
82
|
+
out += kv('resolved', env.dispatcherDir)
|
|
83
|
+
const envSet = process.env.TM_DISPATCHER_DIR
|
|
84
|
+
if (envSet !== undefined && envSet.length > 0) {
|
|
85
|
+
out += kv('TM_DISPATCHER_DIR', `set (= ${envSet})`)
|
|
86
|
+
} else {
|
|
87
|
+
out += kv(
|
|
88
|
+
'TM_DISPATCHER_DIR',
|
|
89
|
+
'unset — falling back to $PWD (run /claudemux:setup to inoculate against cwd drift)',
|
|
90
|
+
)
|
|
91
|
+
}
|
|
92
|
+
const pwd = process.cwd()
|
|
93
|
+
out += kv('$PWD', pwd)
|
|
94
|
+
if (env.dispatcherDir !== pwd) {
|
|
95
|
+
out += kv(
|
|
96
|
+
'status',
|
|
97
|
+
'DIVERGED — dispatcher dir != $PWD; env override is currently keeping tm correct despite the drifted PWD',
|
|
98
|
+
)
|
|
99
|
+
} else {
|
|
100
|
+
out += kv('status', 'matched')
|
|
101
|
+
}
|
|
102
|
+
if (!isDirectory(env.dispatcherDir)) {
|
|
103
|
+
out += kv('warning', `${env.dispatcherDir} does not exist as a directory`)
|
|
104
|
+
}
|
|
105
|
+
out += '\n'
|
|
106
|
+
|
|
107
|
+
// --- tmux ---
|
|
108
|
+
out += 'tmux:\n'
|
|
109
|
+
let tmuxVersionOk = false
|
|
110
|
+
let tmuxVersionLine = ''
|
|
111
|
+
try {
|
|
112
|
+
const versionResult = await env.runTmux(['-V'])
|
|
113
|
+
if (versionResult.code === 0) {
|
|
114
|
+
tmuxVersionOk = true
|
|
115
|
+
tmuxVersionLine = versionResult.stdout.split('\n')[0] ?? '?'
|
|
116
|
+
}
|
|
117
|
+
} catch {
|
|
118
|
+
tmuxVersionOk = false
|
|
119
|
+
}
|
|
120
|
+
if (!tmuxVersionOk) {
|
|
121
|
+
out += kv('installed', 'no (tmux not on PATH — claudemux teammate workflow needs it)')
|
|
122
|
+
} else {
|
|
123
|
+
out += kv('installed', `yes (${tmuxVersionLine})`)
|
|
124
|
+
let serverRunning = false
|
|
125
|
+
try {
|
|
126
|
+
serverRunning = (await env.runTmux(['info'])).code === 0
|
|
127
|
+
} catch {
|
|
128
|
+
serverRunning = false
|
|
129
|
+
}
|
|
130
|
+
if (serverRunning) out += kv('server', 'running')
|
|
131
|
+
else out += kv('server', "not running (no sessions exist yet — that's fine pre-spawn)")
|
|
132
|
+
const insideTmux = process.env.TMUX ?? ''
|
|
133
|
+
if (insideTmux.length > 0) out += kv('in tmux', `yes (TMUX=${insideTmux})`)
|
|
134
|
+
else out += kv('in tmux', 'no — tm is being run from outside a tmux session')
|
|
135
|
+
}
|
|
136
|
+
out += '\n'
|
|
137
|
+
|
|
138
|
+
// --- idle dir ---
|
|
139
|
+
out += `idle dir (${idleDir()}):\n`
|
|
140
|
+
if (isDirectory(idleDir())) {
|
|
141
|
+
let count = 0
|
|
142
|
+
try {
|
|
143
|
+
count = readdirSync(idleDir()).length
|
|
144
|
+
} catch {
|
|
145
|
+
count = 0
|
|
146
|
+
}
|
|
147
|
+
out += kv('exists', `yes (${count} file(s))`)
|
|
148
|
+
} else {
|
|
149
|
+
out += kv('exists', 'no — gets created on first tm spawn / scripts/setup.sh')
|
|
150
|
+
}
|
|
151
|
+
out += '\n'
|
|
152
|
+
|
|
153
|
+
// --- active teammates ---
|
|
154
|
+
// `cmd_doctor` projects each `tmux ls` row to its session field and
|
|
155
|
+
// prints it with a two-space indent — bare session name, not the
|
|
156
|
+
// full row.
|
|
157
|
+
out += 'active teammates:\n'
|
|
158
|
+
const sessionRows = (await iterTeammates(env.runTmux)).map(
|
|
159
|
+
(name) => `${TMUX_SESSION_PREFIX}${name}`,
|
|
160
|
+
)
|
|
161
|
+
if (sessionRows.length === 0) {
|
|
162
|
+
out += " (none — use 'tm spawn <repo>' to launch one)\n"
|
|
163
|
+
} else {
|
|
164
|
+
out += kv('count', String(sessionRows.length))
|
|
165
|
+
for (const name of sessionRows) out += ` ${name}\n`
|
|
166
|
+
}
|
|
167
|
+
out += '\n'
|
|
168
|
+
|
|
169
|
+
// --- codex teammates ---
|
|
170
|
+
out += 'codex teammates:\n'
|
|
171
|
+
const codexNames = listCodexDaemons()
|
|
172
|
+
if (codexNames.length === 0) {
|
|
173
|
+
out += " (none — use 'tm spawn <name> --engine codex' to launch one)\n"
|
|
174
|
+
} else {
|
|
175
|
+
const reaped: string[] = []
|
|
176
|
+
const live: { name: string; pid: number; startedAt: number }[] = []
|
|
177
|
+
for (const name of codexNames) {
|
|
178
|
+
const state = readCodexState(name)
|
|
179
|
+
if (state === null) {
|
|
180
|
+
reaped.push(name)
|
|
181
|
+
await reapCodexDaemon(name)
|
|
182
|
+
removeCodexBaseRecord(name)
|
|
183
|
+
} else if (!codexProcessAlive(state.pid)) {
|
|
184
|
+
reaped.push(name)
|
|
185
|
+
await reapCodexDaemon(name)
|
|
186
|
+
removeCodexBaseRecord(name)
|
|
187
|
+
} else {
|
|
188
|
+
live.push({ name, pid: state.pid, startedAt: state.startedAt })
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
out += kv('count', String(live.length))
|
|
192
|
+
for (const t of live) {
|
|
193
|
+
out += ` ${t.name} (pid=${t.pid}, started ${fmtLocalDateTime(t.startedAt)})\n`
|
|
194
|
+
}
|
|
195
|
+
if (reaped.length > 0) {
|
|
196
|
+
out += kv('reaped orphans', String(reaped.length))
|
|
197
|
+
for (const name of reaped) out += ` ${name}\n`
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
return { code: 0, stdout: out, stderr: '' }
|
|
202
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The environment a Claude-engine verb body needs at runtime. A subset
|
|
3
|
+
* of `NativeEnv` — only the fields the Claude bodies touch — so a
|
|
4
|
+
* future codex teammate registry change does not ripple through every
|
|
5
|
+
* verb module.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
import type { ColumnRunner } from '../../column'
|
|
9
|
+
import type { TmuxRunner } from '../../tmux'
|
|
10
|
+
|
|
11
|
+
export interface ClaudeVerbEnv {
|
|
12
|
+
readonly runTmux: TmuxRunner
|
|
13
|
+
readonly runColumn: ColumnRunner
|
|
14
|
+
readonly dispatcherDir: string
|
|
15
|
+
readonly projectsDir: string
|
|
16
|
+
}
|