@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,504 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `tm history` — inspect a teammate name's past Claude Code sessions.
|
|
3
|
+
*
|
|
4
|
+
* Two modes: a list view (every transcript jsonl, newest first) and a
|
|
5
|
+
* detail view (one chosen transcript's headers + first prompt + last
|
|
6
|
+
* assistant text). Both modes parse the transcript jsonl natively,
|
|
7
|
+
* mirroring the `jq -s` / `jq` passes `bin/tm`'s `cmd_history` ran.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import { readdirSync, readFileSync, statSync } from 'node:fs'
|
|
11
|
+
import { join } from 'node:path'
|
|
12
|
+
|
|
13
|
+
import { encodeProjectDir } from '../../persistence/paths'
|
|
14
|
+
import { fmtAge, fmtLocalDateTime } from './clock'
|
|
15
|
+
import { isDirectory, isRegularFile, resolveSid } from './idle'
|
|
16
|
+
import { dieRepoNotFound, projectDirForCwd } from './repo-fs'
|
|
17
|
+
import { die } from './tmux'
|
|
18
|
+
import type { ClaudeVerbEnv } from './env'
|
|
19
|
+
import type { TmResult } from '../../tm'
|
|
20
|
+
import type { HistoryListEntry } from '../types'
|
|
21
|
+
|
|
22
|
+
function isPlainObject(value: unknown): value is Record<string, unknown> {
|
|
23
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value)
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* One-decimal string of `value`, rounding a `.x5` tie to even — C
|
|
28
|
+
* `printf`'s `%.1f`, which `fmt_size`'s `awk` uses. `Number.toFixed`
|
|
29
|
+
* rounds half away from zero, so it would print `1.3M` where `awk`
|
|
30
|
+
* prints `1.2M` for a file of exactly 1.25 MiB; this keeps the size
|
|
31
|
+
* cells byte-identical to `tm`.
|
|
32
|
+
*/
|
|
33
|
+
function toFixed1HalfEven(value: number): string {
|
|
34
|
+
const tenths = value * 10
|
|
35
|
+
const floor = Math.floor(tenths)
|
|
36
|
+
const frac = tenths - floor
|
|
37
|
+
let rounded: number
|
|
38
|
+
if (frac < 0.5) rounded = floor
|
|
39
|
+
else if (frac > 0.5) rounded = floor + 1
|
|
40
|
+
else rounded = floor % 2 === 0 ? floor : floor + 1
|
|
41
|
+
return (rounded / 10).toFixed(1)
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/** Format a byte count as a short human size — `tm`'s `fmt_size`. */
|
|
45
|
+
function fmtSize(bytes: number): string {
|
|
46
|
+
if (bytes < 1024) return `${bytes}B`
|
|
47
|
+
if (bytes < 1048576) return `${Math.trunc(bytes / 1024)}K`
|
|
48
|
+
if (bytes < 1073741824) return `${toFixed1HalfEven(bytes / 1048576)}M`
|
|
49
|
+
return `${toFixed1HalfEven(bytes / 1073741824)}G`
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/** `tm`'s `sed -E 's/T/ /; s/\.[0-9]+Z?$//; s/Z$//'` on a transcript timestamp. */
|
|
53
|
+
function mungeCreated(ts: string): string {
|
|
54
|
+
return ts.replace('T', ' ').replace(/\.[0-9]+Z?$/, '').replace(/Z$/, '')
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/** Prefix every line of `text` with two spaces — `tm`'s `sed 's/^/ /'`. */
|
|
58
|
+
function indent(text: string): string {
|
|
59
|
+
return text
|
|
60
|
+
.split('\n')
|
|
61
|
+
.map((line) => ` ${line}`)
|
|
62
|
+
.join('\n')
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
/** A bare-integer string's numeric value, as bash arithmetic reads it (`null` → 0). */
|
|
66
|
+
function bashNum(value: string): number {
|
|
67
|
+
const n = Number(value)
|
|
68
|
+
return Number.isInteger(n) ? n : 0
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* The `text`-typed items of a transcript entry's `content` array.
|
|
73
|
+
* Returns the list of their `.text` values when the array has at least
|
|
74
|
+
* one text item, or `null` when it has none. Throws on a shape `jq`
|
|
75
|
+
* errors on — a non-object array item, or a non-string non-null
|
|
76
|
+
* `.text`.
|
|
77
|
+
*/
|
|
78
|
+
function contentTextItems(content: readonly unknown[]): string[] | null {
|
|
79
|
+
let hasText = false
|
|
80
|
+
const texts: string[] = []
|
|
81
|
+
for (const item of content) {
|
|
82
|
+
if (!isPlainObject(item)) throw new Error('jq-fail')
|
|
83
|
+
if (item.type === 'text') {
|
|
84
|
+
hasText = true
|
|
85
|
+
const t = item.text
|
|
86
|
+
if (t === null || t === undefined) texts.push('')
|
|
87
|
+
else if (typeof t === 'string') texts.push(t)
|
|
88
|
+
else throw new Error('jq-fail')
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
return hasText ? texts : null
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
/**
|
|
95
|
+
* The prompt text of a `user` transcript entry — `tm`'s shared filter:
|
|
96
|
+
* a string `content` is the text itself; an array `content` joins its
|
|
97
|
+
* `text` items with a space. Returns `null` when the entry is not a
|
|
98
|
+
* selectable user prompt.
|
|
99
|
+
*/
|
|
100
|
+
function userPromptText(entry: Record<string, unknown>): string | null {
|
|
101
|
+
const message = entry.message
|
|
102
|
+
if (message === null || message === undefined) return null
|
|
103
|
+
if (!isPlainObject(message)) throw new Error('jq-fail')
|
|
104
|
+
if (message.role !== 'user') return null
|
|
105
|
+
const content = message.content
|
|
106
|
+
if (typeof content === 'string') return content
|
|
107
|
+
if (Array.isArray(content)) {
|
|
108
|
+
const texts = contentTextItems(content)
|
|
109
|
+
return texts === null ? null : texts.join(' ')
|
|
110
|
+
}
|
|
111
|
+
return null
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/** A `message.usage` object's cache-inclusive input total — `null` when every field is absent. */
|
|
115
|
+
function historyUsageSum(usage: unknown): number | null {
|
|
116
|
+
if (!isPlainObject(usage)) throw new Error('jq-fail')
|
|
117
|
+
let sum: number | null = null
|
|
118
|
+
for (const key of [
|
|
119
|
+
'input_tokens',
|
|
120
|
+
'cache_creation_input_tokens',
|
|
121
|
+
'cache_read_input_tokens',
|
|
122
|
+
] as const) {
|
|
123
|
+
const value = usage[key]
|
|
124
|
+
if (value === null || value === undefined) continue
|
|
125
|
+
if (typeof value !== 'number') throw new Error('jq-fail')
|
|
126
|
+
sum = (sum ?? 0) + value
|
|
127
|
+
}
|
|
128
|
+
return sum
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/** `jq`'s `tostring` on a usage sum: a number, or the literal `null`. */
|
|
132
|
+
function historyUsageStr(sum: number | null): string {
|
|
133
|
+
return sum === null ? 'null' : String(sum)
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
/** First-line-of-first-user-prompt — `tm`'s `history_first_prompt`. */
|
|
137
|
+
function historyFirstPrompt(content: string): string {
|
|
138
|
+
// `head -200`: a human first prompt sits near the file head, so the
|
|
139
|
+
// scan is capped there. `jq` without `-s` reports a bad line and
|
|
140
|
+
// moves on, so a parse error or a filter error skips that line
|
|
141
|
+
// rather than failing.
|
|
142
|
+
for (const line of content.split('\n').slice(0, 200)) {
|
|
143
|
+
if (line.trim() === '') continue
|
|
144
|
+
let entry: unknown
|
|
145
|
+
try {
|
|
146
|
+
entry = JSON.parse(line)
|
|
147
|
+
} catch {
|
|
148
|
+
continue
|
|
149
|
+
}
|
|
150
|
+
if (!isPlainObject(entry) || entry.type !== 'user') continue
|
|
151
|
+
let text: string | null
|
|
152
|
+
try {
|
|
153
|
+
text = userPromptText(entry)
|
|
154
|
+
} catch {
|
|
155
|
+
continue
|
|
156
|
+
}
|
|
157
|
+
if (text === null) continue
|
|
158
|
+
return text.split('\n')[0] ?? ''
|
|
159
|
+
}
|
|
160
|
+
return ''
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
/** The `TOPIC` cell — first prompt, control chars stripped, 60 chars. */
|
|
164
|
+
function historyTopic(content: string): string {
|
|
165
|
+
const stripped = [...historyFirstPrompt(content)].filter(
|
|
166
|
+
(ch) => (ch.codePointAt(0) ?? 0) > 0x1f,
|
|
167
|
+
)
|
|
168
|
+
const topic = stripped.slice(0, 60).join('')
|
|
169
|
+
return topic.length > 0 ? topic : '(no user prompt)'
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
interface HistoryData {
|
|
173
|
+
firstPrompt: string
|
|
174
|
+
lastAssistant: string
|
|
175
|
+
createdTs: string
|
|
176
|
+
used: string
|
|
177
|
+
peak: string
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
const EMPTY_HISTORY: HistoryData = {
|
|
181
|
+
firstPrompt: '',
|
|
182
|
+
lastAssistant: '',
|
|
183
|
+
createdTs: '',
|
|
184
|
+
used: '',
|
|
185
|
+
peak: '',
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
/**
|
|
189
|
+
* Read a transcript's `history_detail` data — the native form of `tm`'s
|
|
190
|
+
* `jq -r -s` pass. `jq -s` slurps the whole file: one unparseable line,
|
|
191
|
+
* or any line `jq` errors while indexing, fails the entire pass — `tm`
|
|
192
|
+
* catches that with `|| echo $'\t\t\t\t\t'`. So any such failure here
|
|
193
|
+
* returns `EMPTY_HISTORY`, which renders identically to a transcript
|
|
194
|
+
* that simply has no prompts, assistant text, or usage.
|
|
195
|
+
*/
|
|
196
|
+
function readHistoryData(content: string): HistoryData {
|
|
197
|
+
try {
|
|
198
|
+
const uPrompts: string[] = []
|
|
199
|
+
const aTexts: string[] = []
|
|
200
|
+
const usages: unknown[] = []
|
|
201
|
+
const timestamps: unknown[] = []
|
|
202
|
+
for (const line of content.split('\n')) {
|
|
203
|
+
if (line.trim() === '') continue
|
|
204
|
+
const entry: unknown = JSON.parse(line)
|
|
205
|
+
if (entry === null) continue
|
|
206
|
+
if (!isPlainObject(entry)) throw new Error('jq-fail')
|
|
207
|
+
if (entry.type === 'user') {
|
|
208
|
+
const text = userPromptText(entry)
|
|
209
|
+
if (text !== null) uPrompts.push(text)
|
|
210
|
+
} else if (entry.type === 'assistant') {
|
|
211
|
+
const message = entry.message
|
|
212
|
+
if (message !== null && message !== undefined) {
|
|
213
|
+
if (!isPlainObject(message)) throw new Error('jq-fail')
|
|
214
|
+
if (Array.isArray(message.content)) {
|
|
215
|
+
const texts = contentTextItems(message.content)
|
|
216
|
+
if (texts !== null) aTexts.push(texts.join('\n'))
|
|
217
|
+
}
|
|
218
|
+
if (message.usage !== null && message.usage !== undefined) {
|
|
219
|
+
usages.push(message.usage)
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
const ts = entry.timestamp
|
|
224
|
+
if (ts !== null && ts !== undefined) timestamps.push(ts)
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
let createdTs = ''
|
|
228
|
+
if (timestamps.length > 0) {
|
|
229
|
+
const first = timestamps[0]
|
|
230
|
+
if (first === false) createdTs = ''
|
|
231
|
+
else if (typeof first === 'string') createdTs = first
|
|
232
|
+
else throw new Error('jq-fail')
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
let used = ''
|
|
236
|
+
let peak = ''
|
|
237
|
+
if (usages.length > 0) {
|
|
238
|
+
const sums = usages.map(historyUsageSum)
|
|
239
|
+
used = historyUsageStr(sums[sums.length - 1] ?? null)
|
|
240
|
+
let peakNum: number | null = null
|
|
241
|
+
for (const sum of sums) {
|
|
242
|
+
if (sum !== null && (peakNum === null || sum > peakNum)) peakNum = sum
|
|
243
|
+
}
|
|
244
|
+
peak = historyUsageStr(peakNum)
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
return {
|
|
248
|
+
firstPrompt: (uPrompts[0] ?? '').replace(/\n+$/, ''),
|
|
249
|
+
lastAssistant: (aTexts[aTexts.length - 1] ?? '').replace(/\n+$/, ''),
|
|
250
|
+
createdTs,
|
|
251
|
+
used,
|
|
252
|
+
peak,
|
|
253
|
+
}
|
|
254
|
+
} catch {
|
|
255
|
+
return EMPTY_HISTORY
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
/**
|
|
260
|
+
* Read list-mode rows for Claude Code sessions. `null` means the Claude
|
|
261
|
+
* project directory does not exist; an empty array means it exists but has
|
|
262
|
+
* no transcript files.
|
|
263
|
+
*/
|
|
264
|
+
function claudeHistoryListEntries(
|
|
265
|
+
name: string,
|
|
266
|
+
projectDir: string,
|
|
267
|
+
): readonly HistoryListEntry[] | null {
|
|
268
|
+
if (!isDirectory(projectDir)) {
|
|
269
|
+
return null
|
|
270
|
+
}
|
|
271
|
+
let names: string[]
|
|
272
|
+
try {
|
|
273
|
+
names = readdirSync(projectDir).filter((name) => name.endsWith('.jsonl'))
|
|
274
|
+
} catch {
|
|
275
|
+
names = []
|
|
276
|
+
}
|
|
277
|
+
if (names.length === 0) {
|
|
278
|
+
return []
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
const liveSid = resolveSid(name) ?? ''
|
|
282
|
+
const entries = names.map((name) => {
|
|
283
|
+
const full = join(projectDir, name)
|
|
284
|
+
const sidFull = name.replace(/\.jsonl$/, '')
|
|
285
|
+
let mtimeMs = 0
|
|
286
|
+
let size = 0
|
|
287
|
+
try {
|
|
288
|
+
const stat = statSync(full)
|
|
289
|
+
mtimeMs = stat.mtimeMs
|
|
290
|
+
size = stat.size
|
|
291
|
+
} catch {
|
|
292
|
+
mtimeMs = 0
|
|
293
|
+
size = 0
|
|
294
|
+
}
|
|
295
|
+
let content = ''
|
|
296
|
+
try {
|
|
297
|
+
content = readFileSync(full, 'utf8')
|
|
298
|
+
} catch {
|
|
299
|
+
content = ''
|
|
300
|
+
}
|
|
301
|
+
return {
|
|
302
|
+
engine: 'claude',
|
|
303
|
+
id: sidFull,
|
|
304
|
+
mtimeMs,
|
|
305
|
+
size,
|
|
306
|
+
topic: historyTopic(content),
|
|
307
|
+
active: liveSid !== '' && sidFull === liveSid,
|
|
308
|
+
} satisfies HistoryListEntry
|
|
309
|
+
})
|
|
310
|
+
// `ls -t` — newest first; equal mtimes break by name (a `<`/`>`
|
|
311
|
+
// compare, not `localeCompare`, so the tie order is the same on
|
|
312
|
+
// every CI runner).
|
|
313
|
+
entries.sort((a, b) => b.mtimeMs - a.mtimeMs || (a.id < b.id ? -1 : a.id > b.id ? 1 : 0))
|
|
314
|
+
return entries
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
/**
|
|
318
|
+
* Both the formatted `TmResult` and the structured entries from one
|
|
319
|
+
* project-dir scan. The engine adapter consumes both halves; the bash-
|
|
320
|
+
* compatible `claudeHistory` entry point drops the entries and returns
|
|
321
|
+
* the `TmResult` only.
|
|
322
|
+
*/
|
|
323
|
+
export interface ClaudeHistoryListResult {
|
|
324
|
+
readonly tmResult: TmResult
|
|
325
|
+
readonly entries: readonly HistoryListEntry[]
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
/**
|
|
329
|
+
* `tm history <name>` — list a teammate name's past Claude Code
|
|
330
|
+
* sessions, one per transcript jsonl, newest first. One project-dir
|
|
331
|
+
* walk produces both the structured entries (returned for engine-level
|
|
332
|
+
* consumers like `Engine.history`'s `HistoryResult.entries`) and the
|
|
333
|
+
* `column -t`-aligned text rows. Repo-missing surfaces as `{ tmResult:
|
|
334
|
+
* die..., entries: [] }`.
|
|
335
|
+
*/
|
|
336
|
+
export async function claudeHistoryList(name: string, cwd: string | null, env: ClaudeVerbEnv): Promise<ClaudeHistoryListResult> {
|
|
337
|
+
const target = cwd ?? join(env.dispatcherDir, name)
|
|
338
|
+
if (!isDirectory(target)) {
|
|
339
|
+
return { tmResult: dieRepoNotFound('history', name, target, env.dispatcherDir), entries: [] }
|
|
340
|
+
}
|
|
341
|
+
const projectDir = projectDirForCwd(target, env)
|
|
342
|
+
const entries = claudeHistoryListEntries(name, projectDir)
|
|
343
|
+
if (entries === null || entries.length === 0) {
|
|
344
|
+
return {
|
|
345
|
+
tmResult: { code: 0, stdout: `(no past sessions for ${name})\n`, stderr: '' },
|
|
346
|
+
entries: entries ?? [],
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
const now = Math.floor(Date.now() / 1000)
|
|
350
|
+
// Full id, not an 8-char prefix — keeps this engine-raw fallback render
|
|
351
|
+
// (used when verbs/history.ts can't take its cross-engine merge path)
|
|
352
|
+
// byte-consistent with the merged renderer, so a single-engine call site
|
|
353
|
+
// never silently emits a different ID column shape than the dispatcher one.
|
|
354
|
+
const rows: string[][] = [[' ', 'ENGINE', 'ID', 'AGE', 'SIZE', 'TOPIC']]
|
|
355
|
+
for (const entry of entries) {
|
|
356
|
+
rows.push([
|
|
357
|
+
entry.active ? '*' : ' ',
|
|
358
|
+
entry.engine,
|
|
359
|
+
entry.id,
|
|
360
|
+
fmtAge(Math.max(0, now - Math.floor(entry.mtimeMs / 1000))),
|
|
361
|
+
fmtSize(entry.size),
|
|
362
|
+
entry.topic,
|
|
363
|
+
])
|
|
364
|
+
}
|
|
365
|
+
const tmResult = await env.runColumn(`${rows.map((row) => row.join('\t')).join('\n')}\n`)
|
|
366
|
+
return { tmResult, entries }
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
/**
|
|
370
|
+
* `tm history <name> <sid-or-prefix>` — the detail view of one past
|
|
371
|
+
* session. Resolves the prefix to a unique transcript, then prints
|
|
372
|
+
* the history-detail block.
|
|
373
|
+
*/
|
|
374
|
+
function historyDetail(teammateName: string, projectDir: string, prefix: string): TmResult {
|
|
375
|
+
if (!/^[0-9a-f-]{1,36}$/.test(prefix)) {
|
|
376
|
+
return die(`tm history: invalid sid prefix '${prefix}' — must match ^[0-9a-f-]{1,36}$`)
|
|
377
|
+
}
|
|
378
|
+
if (!isDirectory(projectDir)) {
|
|
379
|
+
return die(`tm history: no project dir at ${projectDir} for ${teammateName} (no sessions yet)`)
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
let files: string[]
|
|
383
|
+
try {
|
|
384
|
+
files = readdirSync(projectDir).filter(
|
|
385
|
+
(file) =>
|
|
386
|
+
file.startsWith(prefix) &&
|
|
387
|
+
file.endsWith('.jsonl') &&
|
|
388
|
+
isRegularFile(join(projectDir, file)),
|
|
389
|
+
)
|
|
390
|
+
} catch {
|
|
391
|
+
files = []
|
|
392
|
+
}
|
|
393
|
+
files.sort()
|
|
394
|
+
if (files.length === 0) {
|
|
395
|
+
return die(`tm history: no session matching '${prefix}' in ${teammateName}`)
|
|
396
|
+
}
|
|
397
|
+
if (files.length > 1) {
|
|
398
|
+
const cands = `${files.map((f) => f.replace(/\.jsonl$/, '')).join(' ')} `
|
|
399
|
+
return die(
|
|
400
|
+
`tm history: prefix '${prefix}' matches ${files.length} sessions — ` +
|
|
401
|
+
`be more specific: ${cands}`,
|
|
402
|
+
)
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
const fname = files[0]!
|
|
406
|
+
const file = join(projectDir, fname)
|
|
407
|
+
const sidFull = fname.replace(/\.jsonl$/, '')
|
|
408
|
+
let size = 0
|
|
409
|
+
let mtime = 0
|
|
410
|
+
try {
|
|
411
|
+
const stat = statSync(file)
|
|
412
|
+
size = stat.size
|
|
413
|
+
mtime = Math.floor(stat.mtimeMs / 1000)
|
|
414
|
+
} catch {
|
|
415
|
+
size = 0
|
|
416
|
+
mtime = 0
|
|
417
|
+
}
|
|
418
|
+
let content = ''
|
|
419
|
+
try {
|
|
420
|
+
content = readFileSync(file, 'utf8')
|
|
421
|
+
} catch {
|
|
422
|
+
content = ''
|
|
423
|
+
}
|
|
424
|
+
const lineCount = (content.match(/\n/g) ?? []).length
|
|
425
|
+
const now = Math.floor(Date.now() / 1000)
|
|
426
|
+
const data = readHistoryData(content)
|
|
427
|
+
|
|
428
|
+
const createdStr = data.createdTs !== '' ? mungeCreated(data.createdTs) : ''
|
|
429
|
+
let ctxStr = '(no usage data)'
|
|
430
|
+
if (data.used !== '' && data.peak !== '') {
|
|
431
|
+
const window = bashNum(data.peak) > 210000 ? 1000000 : 200000
|
|
432
|
+
const pct = Math.trunc((bashNum(data.used) * 100) / window)
|
|
433
|
+
const wlabel = window >= 1000000 ? '1M' : '200k'
|
|
434
|
+
const note = window >= 1000000 ? 'detected 1M' : 'assumed 200k'
|
|
435
|
+
ctxStr = `${data.used} tokens · ${pct}% of ${wlabel} (${note})`
|
|
436
|
+
}
|
|
437
|
+
|
|
438
|
+
let laDisplay = data.lastAssistant !== '' ? data.lastAssistant : '(no assistant text)'
|
|
439
|
+
if (data.lastAssistant !== '') {
|
|
440
|
+
const cps = [...data.lastAssistant]
|
|
441
|
+
if (cps.length > 1500) {
|
|
442
|
+
laDisplay =
|
|
443
|
+
`${cps.slice(0, 1500).join('')}\n` +
|
|
444
|
+
`... (${cps.length - 1500} chars truncated; full text in jsonl)`
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
const fpDisplay = data.firstPrompt !== '' ? data.firstPrompt : '(no user prompt)'
|
|
448
|
+
|
|
449
|
+
const stdout =
|
|
450
|
+
`sid: ${sidFull}\n` +
|
|
451
|
+
`file: ${file}\n` +
|
|
452
|
+
` (${fmtSize(size)} · ${lineCount} lines)\n` +
|
|
453
|
+
`created: ${createdStr !== '' ? createdStr : '(unknown)'}\n` +
|
|
454
|
+
`last_seen: ${fmtLocalDateTime(mtime)} (${fmtAge(now - mtime)} ago)\n` +
|
|
455
|
+
`ctx: ${ctxStr}\n` +
|
|
456
|
+
'\n' +
|
|
457
|
+
'first prompt:\n' +
|
|
458
|
+
`${indent(fpDisplay)}\n` +
|
|
459
|
+
'\n' +
|
|
460
|
+
'last assistant:\n' +
|
|
461
|
+
`${indent(laDisplay)}\n` +
|
|
462
|
+
'\n' +
|
|
463
|
+
`resume: tm resume ${teammateName} ${sidFull}\n`
|
|
464
|
+
return { code: 0, stdout, stderr: '' }
|
|
465
|
+
}
|
|
466
|
+
|
|
467
|
+
/**
|
|
468
|
+
* Existence-only check: does the Claude Code project dir for `cwd`
|
|
469
|
+
* hold any transcript jsonl? Mirrors `hasCodexHistoryForCwd` — both
|
|
470
|
+
* resume-probing callers ask the same question of each engine and
|
|
471
|
+
* branch on the answer, so the two helpers must agree on what
|
|
472
|
+
* "has candidate" means (any file present; depth-read is intentionally
|
|
473
|
+
* absent, since `claude --continue` will itself pick the latest).
|
|
474
|
+
*
|
|
475
|
+
* `projectsDir` is plumbed in by the caller (cli/context.ts owns env wiring
|
|
476
|
+
* via `NativeEnv.projectsDir`); deriving from `$HOME` here would
|
|
477
|
+
* diverge from tests that inject a tmpdir `projectsDir`.
|
|
478
|
+
*/
|
|
479
|
+
export function hasClaudeHistoryForCwd(cwd: string, projectsDir: string): boolean {
|
|
480
|
+
const projectDir = join(projectsDir, encodeProjectDir(cwd))
|
|
481
|
+
if (!isDirectory(projectDir)) return false
|
|
482
|
+
try {
|
|
483
|
+
for (const name of readdirSync(projectDir)) {
|
|
484
|
+
if (name.endsWith('.jsonl')) return true
|
|
485
|
+
}
|
|
486
|
+
} catch {
|
|
487
|
+
return false
|
|
488
|
+
}
|
|
489
|
+
return false
|
|
490
|
+
}
|
|
491
|
+
|
|
492
|
+
export async function claudeHistory(args: readonly string[], env: ClaudeVerbEnv): Promise<TmResult> {
|
|
493
|
+
const name = args[0] ?? ''
|
|
494
|
+
if (name.length === 0) return die('usage: tm history <name> [<sid-or-prefix>]')
|
|
495
|
+
|
|
496
|
+
const sidArg = args[1] ?? ''
|
|
497
|
+
const cwdArg = args[2] && args[2].length > 0 ? args[2] : null
|
|
498
|
+
if (sidArg === '') return (await claudeHistoryList(name, cwdArg, env)).tmResult
|
|
499
|
+
|
|
500
|
+
const cwd = cwdArg ?? join(env.dispatcherDir, name)
|
|
501
|
+
if (!isDirectory(cwd)) return dieRepoNotFound('history', name, cwd, env.dispatcherDir)
|
|
502
|
+
const projectDir = projectDirForCwd(cwd, env)
|
|
503
|
+
return historyDetail(name, projectDir, sidArg)
|
|
504
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Claude-engine identifier helpers — the random sid + suffix + slug
|
|
3
|
+
* minting `tm spawn` and `tm resume` reach for. Centralised so a future
|
|
4
|
+
* change to the alphabet, length, or slug allowlist is a one-site edit.
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { randomBytes, randomUUID } from 'node:crypto'
|
|
8
|
+
|
|
9
|
+
/** `tm`'s `new_sid`: a lowercase UUID. Claude Code normalizes sids to lower. */
|
|
10
|
+
export function newSid(): string {
|
|
11
|
+
return randomUUID().toLowerCase()
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
/** `tm`'s `rand_suffix`: 4 chars drawn from `[a-z0-9]`. */
|
|
15
|
+
export function randSuffix(): string {
|
|
16
|
+
const alphabet = 'abcdefghijklmnopqrstuvwxyz0123456789'
|
|
17
|
+
const bytes = randomBytes(4)
|
|
18
|
+
let out = ''
|
|
19
|
+
for (let i = 0; i < 4; i++) out += alphabet[bytes[i]! % alphabet.length]
|
|
20
|
+
return out
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
/** A UUID — the format `tm resume` requires for a resolved sid. */
|
|
24
|
+
export const UUID_RE =
|
|
25
|
+
/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Identity migration for Claude teammates was a one-shot helper that
|
|
3
|
+
* materialised `/tmp/teammate-<name>.json` from a live tmux session
|
|
4
|
+
* or pre-JSON `.cwd` / `.sid` markers (schema 1). The schema 2 cut
|
|
5
|
+
* removed that path: any live teammate predating the new layout no
|
|
6
|
+
* longer has a recordable `repo` field, so the migrator returns a
|
|
7
|
+
* no-op. The verb layer reports the record as missing and the user
|
|
8
|
+
* `tm kill`s + `tm spawn`s to recover.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import type { NativeEnv } from '../../env'
|
|
12
|
+
import type { IdentityMigrator } from '../../identity/router'
|
|
13
|
+
|
|
14
|
+
export function createClaudeIdentityMigrator(_env: NativeEnv): IdentityMigrator {
|
|
15
|
+
return async () => {}
|
|
16
|
+
}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Claude-engine idle / sid utilities. The on-busy and on-stop hooks
|
|
3
|
+
* write `/tmp/claude-idle/<sid>{,.busy,.last}` markers, and several
|
|
4
|
+
* hot-path verbs need to clear or wait on those markers around a turn.
|
|
5
|
+
*
|
|
6
|
+
* Decision cross-process-cross-platform-invariants (path-builder discipline) keeps the marker paths in
|
|
7
|
+
* `persistence/paths.ts`; this module composes them into the runtime
|
|
8
|
+
* operations the verb bodies use.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
import { rmSync, statSync, readFileSync } from 'node:fs'
|
|
12
|
+
|
|
13
|
+
import {
|
|
14
|
+
busyMarkerFor,
|
|
15
|
+
idleMarkerFor,
|
|
16
|
+
lastFileFor,
|
|
17
|
+
sidFile,
|
|
18
|
+
} from '../../persistence/paths'
|
|
19
|
+
import { die } from './tmux'
|
|
20
|
+
import type { TeammateName } from '../types'
|
|
21
|
+
import type { TmResult } from '../../tm'
|
|
22
|
+
|
|
23
|
+
/** Read a file only if it exists and is non-empty (`tm`'s `[[ -s file ]]`). */
|
|
24
|
+
export function readIfNonEmpty(file: string): string | null {
|
|
25
|
+
try {
|
|
26
|
+
if (statSync(file).size === 0) return null
|
|
27
|
+
return readFileSync(file, 'utf8')
|
|
28
|
+
} catch {
|
|
29
|
+
return null
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/** Whether a path is a regular file (`tm`'s `[[ -f file ]]`). */
|
|
34
|
+
export function isRegularFile(path: string): boolean {
|
|
35
|
+
try {
|
|
36
|
+
return statSync(path).isFile()
|
|
37
|
+
} catch {
|
|
38
|
+
return false
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
/** Whether a path is a directory (`tm`'s `[[ -d path ]]`). */
|
|
43
|
+
export function isDirectory(path: string): boolean {
|
|
44
|
+
try {
|
|
45
|
+
return statSync(path).isDirectory()
|
|
46
|
+
} catch {
|
|
47
|
+
return false
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
/** Strip trailing newlines (the effect of bash `$(cat ...)`). */
|
|
52
|
+
export function rstrip(text: string): string {
|
|
53
|
+
return text.replace(/\n+$/, '')
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/** Read the recorded sid for a teammate — `tm`'s `resolve_sid`. */
|
|
57
|
+
export function resolveSid(name: TeammateName): string | null {
|
|
58
|
+
const raw = readIfNonEmpty(sidFile(name))
|
|
59
|
+
return raw === null ? null : rstrip(raw)
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* `resolveSid` that dies with `tm`'s shared error when the sid is
|
|
64
|
+
* missing. Returned in a discriminated shape the caller branches on.
|
|
65
|
+
*/
|
|
66
|
+
export function resolveSidOrDie(
|
|
67
|
+
name: TeammateName,
|
|
68
|
+
): { sid: string } | { error: TmResult } {
|
|
69
|
+
const sid = resolveSid(name)
|
|
70
|
+
if (sid === null) {
|
|
71
|
+
return {
|
|
72
|
+
error: die(
|
|
73
|
+
`no sid file for ${name} at ${sidFile(name)} — was this teammate ` +
|
|
74
|
+
"spawned via 'tm spawn'? (raw 'tmux new-session' won't seed the sid)",
|
|
75
|
+
),
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
return { sid }
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
/**
|
|
82
|
+
* `tm`'s `clear_idle`: drop a sid's three hook artifacts together —
|
|
83
|
+
* the idle marker, the `.last` text, and the `.busy` marker — so a later
|
|
84
|
+
* wait/last sees the next turn, not a stale one. No-op for an empty sid.
|
|
85
|
+
*/
|
|
86
|
+
export function clearIdle(sid: string): void {
|
|
87
|
+
if (sid === '') return
|
|
88
|
+
for (const file of [idleMarkerFor(sid), lastFileFor(sid), busyMarkerFor(sid)]) {
|
|
89
|
+
rmSync(file, { force: true })
|
|
90
|
+
}
|
|
91
|
+
}
|