@ellipsis-dev/sdk 0.38.0 → 0.44.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/README.md CHANGED
@@ -40,8 +40,8 @@ types and unknown `source`/`record_type`/`kind` values**.
40
40
  ## Shared chat work sections
41
41
 
42
42
  Web and CLI renderers can use `splitLedger(groupRecordsToChatTurns(records))`
43
- and `entryBody(entry, { live, now, liveText, liveSummary })` from `@ellipsis-dev/sdk/store`.
44
- `now` is epoch milliseconds. The returned `items` are the collapsed view:
43
+ and `entryBody(entry, { live, now, liveText, liveSummary, harness })` from `@ellipsis-dev/sdk/store`.
44
+ `now` is epoch milliseconds, and `harness` is `harnessName(session)`. The returned `items` are the collapsed view:
45
45
  one `isWorkFold(item)` section for progress, thinking and tools, with final
46
46
  replies, turn outcome and closing notices kept visible.
47
47
  `members.get(item.key)` contains
@@ -49,7 +49,8 @@ that section's rows; nested tool folds use the same map and `isToolFold`.
49
49
  Renderers own expansion state and can recursively display the members.
50
50
 
51
51
  The work key stays stable as records stream in and after replay. The live
52
- label advances from `Preparing environment` to `Starting agent` to `Working`
52
+ label advances from `Preparing environment` to `Starting Claude Code` (the
53
+ harness's name, or `Starting agent` without one) to `Working`
53
54
  as the platform and native turn events arrive. While the agent works, the heading
54
55
  from `store.getSnapshot().liveSummary` replaces `Working` when available.
55
56
  Pass the summary only to the entry being answered (`loading: true`, add a loading
package/dist/index.d.ts CHANGED
@@ -1,5 +1,5 @@
1
- import { c as components } from './types-D4cLMGUn.js';
2
- export { A as AgentConfig, a as AgentIdentity, b as AttributionType, B as BudgetConfig, C as CheckRunAction, d as CheckSuiteAction, e as ClaudeAssistantEvent, f as ClaudeAssistantMessage, g as ClaudeConfig, h as ClaudeConversationResetEvent, i as ClaudeNativeEvent, j as ClaudeNativeSessionRecord, k as ClaudeNativeUsage, l as ClaudeRateLimitEvent, m as ClaudeRateLimitInfo, n as ClaudeResultEvent, o as ClaudeSessionRecord, p as ClaudeSystemEvent, q as ClaudeUserEvent, r as ClaudeUserMessage, s as CodexAgentMessage, t as CodexAgentMessageItem, u as CodexAppServerError, v as CodexAppServerEvent, w as CodexAppServerItem, x as CodexAppServerNotification, y as CodexAppServerSessionRecord, z as CodexCollabAgentToolCall, D as CodexCommandExecution, E as CodexCommandExecutionItem, F as CodexConfig, G as CodexContextCompaction, H as CodexEffortLevel, I as CodexErrorEvent, J as CodexErrorItem, K as CodexErrorParams, L as CodexEvent, M as CodexFileChange, N as CodexFileChangeItem, O as CodexFileUpdate, P as CodexItem, Q as CodexItemCompleted, R as CodexItemCompletedEvent, S as CodexItemParams, T as CodexItemStarted, U as CodexItemStartedEvent, V as CodexItemUpdatedEvent, W as CodexLocalImageInput, X as CodexMcpToolCall, Y as CodexMcpToolCallAppContext, Z as CodexMcpToolCallError, _ as CodexMcpToolCallItem, $ as CodexMcpToolCallResult, a0 as CodexPlan, a1 as CodexReasoning, a2 as CodexReasoningItem, a3 as CodexSessionRecord, a4 as CodexSubAgentActivity, a5 as CodexTextInput, a6 as CodexThread, a7 as CodexThreadStarted, a8 as CodexThreadStartedEvent, a9 as CodexThreadStartedParams, aa as CodexThreadTokenUsage, ab as CodexTodoListItem, ac as CodexTokenUsageBreakdown, ad as CodexTokenUsageParams, ae as CodexTokenUsageUpdated, af as CodexTurn, ag as CodexTurnCompleted, ah as CodexTurnCompletedEvent, ai as CodexTurnError, aj as CodexTurnFailedEvent, ak as CodexTurnParams, al as CodexTurnStarted, am as CodexTurnStartedEvent, an as CodexUsage, ao as CodexUserInput, ap as CodexUserMessage, aq as CodexWebSearch, ar as CodexWebSearchItem, as as ComputeConfig, at as ComputeConfig1, au as ConfigMetadata, av as Cost, aw as Cost1, ax as CronTrigger, ay as DeltaFrame, az as Duration, aA as EffortLevel, aB as EllipsisGrant, aC as EllipsisPermissions, aD as EnvironmentBaseBuild, aE as EnvironmentConfig, aF as EnvironmentHooks, aG as EnvironmentHooks1, aH as EnvironmentOutputPayload, aI as EnvironmentOutputRecord, aJ as EnvironmentPhasePayload, aK as EnvironmentPhaseRecord, aL as EnvironmentReadyPayload, aM as EnvironmentReadyRecord, aN as EnvironmentScript, aO as EnvironmentSource, aP as EnvironmentVariable, aQ as ErrorFrame, aR as ErrorReason, aS as GeminiConfig, aT as GeminiErrorEvent, aU as GeminiInitEvent, aV as GeminiMessageEvent, aW as GeminiModelStats, aX as GeminiResultEvent, aY as GeminiSessionRecord, aZ as GeminiStreamEvent, a_ as GeminiStreamStats, a$ as GeminiToolError, b0 as GeminiToolResultEvent, b1 as GeminiToolUseEvent, b2 as GithubAccountFilter, b3 as GithubAccountSelector, b4 as GithubAccountSnippet, b5 as GithubAccountType, b6 as GithubCheckRunEvent, b7 as GithubCheckSuiteEvent, b8 as GithubIssueEvent, b9 as GithubPermissions, ba as GithubPullRequestEvent, bb as GithubPushEvent, bc as GithubReleaseEvent, bd as GithubStatusEvent, be as GithubWorkflowRunEvent, bf as HandlerService, bg as HeartbeatFrame, bh as InputContract, bi as IssueAction, bj as LegacyAssistantPayload, bk as LegacyNativeUsage, bl as LegacyResultPayload, bm as Level, bn as LifecycleSessionRecord, bo as LinearIssueAction, bp as LinearIssueChanged, bq as LinearIssueEvent, br as LinearLabelsChange, bs as LinearValueChange, bt as LinearValueFilter, bu as LlmCost, bv as LlmCostSplit, bw as McpRemoteServer, bx as McpServerRef, by as McpStdioServer, bz as MemorySize, bA as MessageEndedPayload, bB as MessageEndedRecord, bC as MessageQueuedPayload, bD as MessageQueuedRecord, bE as MessageRecord, bF as MessageRequeuedPayload, bG as MessageRequeuedRecord, bH as MessageStartedPayload, bI as MessageStartedRecord, bJ as ModelLlmCostSplit, bK as ModelTokenCounts, bL as OutputConfig, bM as PermissionsConfig, bN as PermissionsConfig1, bO as PlatformSessionRecord, bP as PromptBlockedReason, bQ as PullRequest, bR as PullRequestAction, bS as ReactCheckRun, bT as ReactCheckSuite, bU as ReactIssue, bV as ReactLinearIssue, bW as ReactPullRequest, bX as ReactPush, bY as ReactRelease, bZ as ReactSentry, b_ as ReactSlackChannel, b$ as ReactStatus, c0 as ReactTrigger, c1 as ReactWorkflowRun, c2 as RecordsFrame, c3 as ReleaseAction, c4 as RepositoryFilter, c5 as RepositoryRef, c6 as Review, c7 as ReviewComment, c8 as ReviewConfig, c9 as ReviewConfigsListResponse, ca as ReviewReviewer, cb as ReviewSummary, cc as ReviewsListResponse, cd as SdkAssistantRecord, ce as SdkCacheCreation, cf as SdkContentBlock, cg as SdkRateLimitRecord, ch as SdkRecord, ci as SdkResultRecord, cj as SdkServerToolResultBlock, ck as SdkServerToolUseBlock, cl as SdkSystemRecord, cm as SdkTextBlock, cn as SdkThinkingBlock, co as SdkToolResultBlock, cp as SdkToolUseBlock, cq as SdkUserRecord, cr as SendSessionMessageRequest, cs as SentryAction, ct as SentryAlertEvent, cu as Session, cv as SessionAgent, cw as SessionArchived, cx as SessionAttribution, cy as SessionClosedPayload, cz as SessionClosedRecord, cA as SessionConfig, cB as SessionConversation, cC as SessionConversationConfig, cD as SessionEnvironment, cE as SessionError, cF as SessionEventActor, cG as SessionFrame, cH as SessionGit, cI as SessionGitCommit, cJ as SessionGitFile, cK as SessionGitPr, cL as SessionGitRepo, cM as SessionHandler, cN as SessionMessage, cO as SessionMessageImage, cP as SessionMessageResponse, cQ as SessionOutput, cR as SessionParent, cS as SessionPrompting, cT as SessionRecord, cU as SessionRecordsListResponse, cV as SessionResponse, cW as SessionReview, cX as SessionSource, cY as SessionStatus, cZ as SessionStreamFrame, c_ as SessionSummary, c$ as SessionSummarySource, d0 as SessionsListResponse, d1 as SettingsRef, d2 as SkillRef, d3 as SlackChannelCreatedEvent, d4 as SlackMessageEvent, d5 as StatusAction, d6 as StreamFrame, d7 as TokenCounts, d8 as Tokens, d9 as Tokens1, da as TokensInfo, db as UnknownSessionRecord, dc as UpdateSessionRequest, dd as WorkflowRunAction, de as paths } from './types-D4cLMGUn.js';
1
+ import { c as components } from './types-Dwyd1Aud.js';
2
+ export { A as AgentConfig, a as AgentIdentity, b as AttributionType, B as BudgetConfig, C as CheckRunAction, d as CheckSuiteAction, e as ClaudeAssistantEvent, f as ClaudeAssistantMessage, g as ClaudeConfig, h as ClaudeConversationResetEvent, i as ClaudeNativeEvent, j as ClaudeNativeSessionRecord, k as ClaudeNativeUsage, l as ClaudeRateLimitEvent, m as ClaudeRateLimitInfo, n as ClaudeResultEvent, o as ClaudeSessionRecord, p as ClaudeSystemEvent, q as ClaudeUserEvent, r as ClaudeUserMessage, s as CodexAgentMessage, t as CodexAgentMessageItem, u as CodexAppServerError, v as CodexAppServerEvent, w as CodexAppServerItem, x as CodexAppServerNotification, y as CodexAppServerSessionRecord, z as CodexCollabAgentToolCall, D as CodexCommandExecution, E as CodexCommandExecutionItem, F as CodexConfig, G as CodexContextCompaction, H as CodexEffortLevel, I as CodexErrorEvent, J as CodexErrorItem, K as CodexErrorParams, L as CodexEvent, M as CodexFileChange, N as CodexFileChangeItem, O as CodexFileUpdate, P as CodexItem, Q as CodexItemCompleted, R as CodexItemCompletedEvent, S as CodexItemParams, T as CodexItemStarted, U as CodexItemStartedEvent, V as CodexItemUpdatedEvent, W as CodexLocalImageInput, X as CodexMcpToolCall, Y as CodexMcpToolCallAppContext, Z as CodexMcpToolCallError, _ as CodexMcpToolCallItem, $ as CodexMcpToolCallResult, a0 as CodexPlan, a1 as CodexReasoning, a2 as CodexReasoningItem, a3 as CodexSessionRecord, a4 as CodexSubAgentActivity, a5 as CodexTextInput, a6 as CodexThread, a7 as CodexThreadStarted, a8 as CodexThreadStartedEvent, a9 as CodexThreadStartedParams, aa as CodexThreadTokenUsage, ab as CodexTodoListItem, ac as CodexTokenUsageBreakdown, ad as CodexTokenUsageParams, ae as CodexTokenUsageUpdated, af as CodexTurn, ag as CodexTurnCompleted, ah as CodexTurnCompletedEvent, ai as CodexTurnError, aj as CodexTurnFailedEvent, ak as CodexTurnParams, al as CodexTurnStarted, am as CodexTurnStartedEvent, an as CodexUsage, ao as CodexUserInput, ap as CodexUserMessage, aq as CodexWebSearch, ar as CodexWebSearchItem, as as ComputeConfig, at as ComputeConfig1, au as ConfigMetadata, av as Cost, aw as Cost1, ax as CronTrigger, ay as DeltaFrame, az as EffortLevel, aA as EllipsisGrant, aB as EllipsisPermissions, aC as EnvironmentBaseBuild, aD as EnvironmentConfig, aE as EnvironmentHooks, aF as EnvironmentHooks1, aG as EnvironmentOutputPayload, aH as EnvironmentOutputRecord, aI as EnvironmentPhasePayload, aJ as EnvironmentPhaseRecord, aK as EnvironmentReadyPayload, aL as EnvironmentReadyRecord, aM as EnvironmentScript, aN as EnvironmentSource, aO as EnvironmentVariable, aP as ErrorFrame, aQ as ErrorReason, aR as GeminiConfig, aS as GeminiErrorEvent, aT as GeminiInitEvent, aU as GeminiMessageEvent, aV as GeminiModelStats, aW as GeminiResultEvent, aX as GeminiSessionRecord, aY as GeminiStreamEvent, aZ as GeminiStreamStats, a_ as GeminiToolError, a$ as GeminiToolResultEvent, b0 as GeminiToolUseEvent, b1 as GithubAccountFilter, b2 as GithubAccountSelector, b3 as GithubAccountSnippet, b4 as GithubAccountType, b5 as GithubCheckRunEvent, b6 as GithubCheckSuiteEvent, b7 as GithubIssueEvent, b8 as GithubPermissions, b9 as GithubPullRequestEvent, ba as GithubPushEvent, bb as GithubReleaseEvent, bc as GithubStatusEvent, bd as GithubWorkflowRunEvent, be as HandlerService, bf as HeartbeatFrame, bg as InputContract, bh as IssueAction, bi as LegacyAssistantPayload, bj as LegacyNativeUsage, bk as LegacyResultPayload, bl as Level, bm as LifecycleSessionRecord, bn as LinearIssueAction, bo as LinearIssueChanged, bp as LinearIssueEvent, bq as LinearLabelsChange, br as LinearValueChange, bs as LinearValueFilter, bt as LlmCost, bu as LlmCostSplit, bv as McpRemoteServer, bw as McpServerRef, bx as McpStdioServer, by as MemorySize, bz as MessageEndedPayload, bA as MessageEndedRecord, bB as MessageQueuedPayload, bC as MessageQueuedRecord, bD as MessageRecord, bE as MessageRequeuedPayload, bF as MessageRequeuedRecord, bG as MessageStartedPayload, bH as MessageStartedRecord, bI as ModelLlmCostSplit, bJ as ModelTokenCounts, bK as OutputConfig, bL as PermissionsConfig, bM as PermissionsConfig1, bN as PlatformSessionRecord, bO as PromptBlockedReason, bP as PullRequest, bQ as PullRequestAction, bR as ReactCheckRun, bS as ReactCheckSuite, bT as ReactIssue, bU as ReactLinearIssue, bV as ReactPullRequest, bW as ReactPush, bX as ReactRelease, bY as ReactSentry, bZ as ReactSlackChannel, b_ as ReactStatus, b$ as ReactTrigger, c0 as ReactWorkflowRun, c1 as RecordsFrame, c2 as ReleaseAction, c3 as RepositoryFilter, c4 as RepositoryRef, c5 as Review, c6 as ReviewComment, c7 as ReviewConfig, c8 as ReviewConfigsListResponse, c9 as ReviewReviewer, ca as ReviewSummary, cb as ReviewsListResponse, cc as SdkAssistantRecord, cd as SdkCacheCreation, ce as SdkContentBlock, cf as SdkRateLimitRecord, cg as SdkRecord, ch as SdkResultRecord, ci as SdkServerToolResultBlock, cj as SdkServerToolUseBlock, ck as SdkSystemRecord, cl as SdkTextBlock, cm as SdkThinkingBlock, cn as SdkToolResultBlock, co as SdkToolUseBlock, cp as SdkUserRecord, cq as SendSessionMessageRequest, cr as SentryAction, cs as SentryAlertEvent, ct as Session, cu as SessionAgent, cv as SessionArchived, cw as SessionAttribution, cx as SessionClosedPayload, cy as SessionClosedRecord, cz as SessionConfig, cA as SessionConversation, cB as SessionConversationConfig, cC as SessionEnvironment, cD as SessionError, cE as SessionEventActor, cF as SessionFrame, cG as SessionGit, cH as SessionGitCommit, cI as SessionGitFile, cJ as SessionGitPr, cK as SessionGitRepo, cL as SessionHandler, cM as SessionMessage, cN as SessionMessageImage, cO as SessionMessageResponse, cP as SessionOutput, cQ as SessionParent, cR as SessionPrompting, cS as SessionRecord, cT as SessionRecordsListResponse, cU as SessionResponse, cV as SessionReview, cW as SessionSource, cX as SessionStatus, cY as SessionStreamFrame, cZ as SessionSummary, c_ as SessionSummarySource, c$ as SessionsListResponse, d0 as SettingsRef, d1 as SkillRef, d2 as SlackChannelCreatedEvent, d3 as SlackMessageEvent, d4 as StatusAction, d5 as StreamFrame, d6 as TokenCounts, d7 as Tokens, d8 as Tokens1, d9 as TokensInfo, da as UnknownSessionRecord, db as UpdateSessionRequest, dc as WorkflowRunAction, dd as paths } from './types-Dwyd1Aud.js';
3
3
 
4
4
  /**
5
5
  * Frames on /v1/sessions/stream, /v1/agents/stream and /v1/vm-executions/{id}/stream. Ignore unknown frame types.
@@ -246,7 +246,7 @@ type EnvironmentSource = 'request' | 'agent' | 'repo_default' | 'account_default
246
246
  /**
247
247
  * What went wrong.
248
248
  */
249
- type ErrorReason = 'error' | 'tool_call_failed' | 'budget_hit' | 'payment_required' | 'blocked' | 'contact_email_required' | 'lifecycle_hook_failed' | 'missing_repo_access' | 'missing_token_permissions' | 'missing_environment_variables' | 'missing_github_integration' | 'agent_unavailable' | 'upstream_unavailable' | 'unsupported_configuration' | 'execution_disabled' | 'interrupted' | 'stopped';
249
+ type ErrorReason = 'error' | 'tool_call_failed' | 'budget_hit' | 'payment_required' | 'blocked' | 'contact_email_required' | 'lifecycle_hook_failed' | 'missing_repo_access' | 'missing_token_permissions' | 'missing_environment_variables' | 'missing_github_integration' | 'agent_unavailable' | 'upstream_unavailable' | 'unsupported_configuration' | 'execution_disabled' | 'interrupted' | 'stopped' | 'timeout';
250
250
  /**
251
251
  * The service the handler responds to.
252
252
  */
@@ -458,29 +458,27 @@ interface EnvironmentConfig {
458
458
  variables: EnvironmentVariable[];
459
459
  }
460
460
  /**
461
- * Environment compute sizing. Every field is optional; an omitted field
462
- * inherits the platform default (2 vCPU / 4096 MiB / 3600s). A resolved value
463
- * outside the platform bounds fails validation loudly (a sync error on the
464
- * config) rather than being clamped silently.
461
+ * The size and lifetime of the environment. Every field is optional. An
462
+ * omitted field takes the platform default (2 vCPUs, 4096 MiB, a 4h timeout,
463
+ * 10m idle). A value outside the platform bounds fails validation.
465
464
  *
466
- * `memory` and `timeout` each accept a shorthand string ("8GB", "30m") or an
467
- * explicit units object ({gb: 8}, {minutes: 30}); the `memory_mib` /
468
- * `timeout_seconds` properties resolve either form to the canonical integer
469
- * the environment is sized with.
465
+ * `memory` accepts a string such as `8GB` or an object such as `{gb: 8}`.
466
+ * `timeout` and `idle` accept a duration string such as `30m`, `8h`, or
467
+ * `1h30m`.
470
468
  *
471
- * `timeout` is the max wall-clock the agent may run in one environment before
472
- * it is stopped, capped at 1h (equal to the default, so today the knob only
473
- * shortens a session; the cap matches the 1-hour validity of the session's
474
- * GitHub token).
469
+ * `timeout` is the longest one message's work may run before it is stopped,
470
+ * 1m to 22h, default 4h. The message ends `stopped` with reason `timeout`.
475
471
  *
476
- * Compute currently uses a temporary flat one-cent amount each time an
477
- * environment is started for a session, subject to the account's existing
478
- * free-compute exemptions.
472
+ * `idle` is how long the environment stays awake after the agent finishes
473
+ * with no message waiting, 10s to 1h, default 10m. Then it pauses, and the
474
+ * next message resumes it. Only an interactive session pauses. A session
475
+ * that runs once ends when its message ends.
479
476
  */
480
477
  interface ComputeConfig {
481
478
  cpu: number | null;
479
+ idle: string | null;
482
480
  memory: string | MemorySize | null;
483
- timeout: string | Duration | null;
481
+ timeout: string | null;
484
482
  }
485
483
  /**
486
484
  * A memory size as explicit units, summed (binary: 1GB = 1024MB = 1024MiB).
@@ -491,16 +489,6 @@ interface MemorySize {
491
489
  gb: number | null;
492
490
  mb: number | null;
493
491
  }
494
- /**
495
- * A duration as explicit units, summed. Set any of `hours`/`minutes`/
496
- * `seconds` (at least one). The alternative to the `30m`-style shorthand
497
- * string wherever a duration is accepted.
498
- */
499
- interface Duration {
500
- hours: number | null;
501
- minutes: number | null;
502
- seconds: number | null;
503
- }
504
492
  /**
505
493
  * Environment lifecycle scripts, in order: build_base, after_checkout,
506
494
  * before_start, validate. The first two produce reusable snapshots;
@@ -1071,29 +1059,27 @@ interface SessionEnvironment {
1071
1059
  variables: EnvironmentVariable[];
1072
1060
  }
1073
1061
  /**
1074
- * Environment compute sizing. Every field is optional; an omitted field
1075
- * inherits the platform default (2 vCPU / 4096 MiB / 3600s). A resolved value
1076
- * outside the platform bounds fails validation loudly (a sync error on the
1077
- * config) rather than being clamped silently.
1062
+ * The size and lifetime of the environment. Every field is optional. An
1063
+ * omitted field takes the platform default (2 vCPUs, 4096 MiB, a 4h timeout,
1064
+ * 10m idle). A value outside the platform bounds fails validation.
1078
1065
  *
1079
- * `memory` and `timeout` each accept a shorthand string ("8GB", "30m") or an
1080
- * explicit units object ({gb: 8}, {minutes: 30}); the `memory_mib` /
1081
- * `timeout_seconds` properties resolve either form to the canonical integer
1082
- * the environment is sized with.
1066
+ * `memory` accepts a string such as `8GB` or an object such as `{gb: 8}`.
1067
+ * `timeout` and `idle` accept a duration string such as `30m`, `8h`, or
1068
+ * `1h30m`.
1083
1069
  *
1084
- * `timeout` is the max wall-clock the agent may run in one environment before
1085
- * it is stopped, capped at 1h (equal to the default, so today the knob only
1086
- * shortens a session; the cap matches the 1-hour validity of the session's
1087
- * GitHub token).
1070
+ * `timeout` is the longest one message's work may run before it is stopped,
1071
+ * 1m to 22h, default 4h. The message ends `stopped` with reason `timeout`.
1088
1072
  *
1089
- * Compute currently uses a temporary flat one-cent amount each time an
1090
- * environment is started for a session, subject to the account's existing
1091
- * free-compute exemptions.
1073
+ * `idle` is how long the environment stays awake after the agent finishes
1074
+ * with no message waiting, 10s to 1h, default 10m. Then it pauses, and the
1075
+ * next message resumes it. Only an interactive session pauses. A session
1076
+ * that runs once ends when its message ends.
1092
1077
  */
1093
1078
  interface ComputeConfig1 {
1094
1079
  cpu: number | null;
1080
+ idle: string | null;
1095
1081
  memory: string | MemorySize | null;
1096
- timeout: string | Duration | null;
1082
+ timeout: string | null;
1097
1083
  }
1098
1084
  /**
1099
1085
  * Environment lifecycle scripts, in order: build_base, after_checkout,
@@ -2895,6 +2881,21 @@ declare class EllipsisSessions {
2895
2881
  * Grant match patterns can further restrict access to individual resources.
2896
2882
  */
2897
2883
  git(id: string): Promise<S['SessionGitResponse']>;
2884
+ /**
2885
+ * Get Session Image
2886
+ *
2887
+ * Return an image sent with a message to the session.
2888
+ *
2889
+ * Each message lists its images, with their IDs, in `images`.
2890
+ *
2891
+ * Required permissions: read:sessions.
2892
+ * API key: Supported.
2893
+ * CLI user token: Supported.
2894
+ * Session token: Requires the ellipsis:api scope and the required grants in the token's permissions.ellipsis configuration.
2895
+ * Higher permission levels include lower levels: read < write < delete.
2896
+ * Grant match patterns can further restrict access to individual resources.
2897
+ */
2898
+ image(session_id: string, id: string): Promise<S['ImageAttachment']>;
2898
2899
  /**
2899
2900
  * List Sessions
2900
2901
  *
@@ -2940,6 +2941,23 @@ declare class EllipsisSessions {
2940
2941
  * Grant match patterns can further restrict access to individual resources.
2941
2942
  */
2942
2943
  metrics(id: string): Promise<S['VMMetricsResponse']>;
2944
+ /**
2945
+ * Get Session Proxy
2946
+ *
2947
+ * The requests the session's environment sent to GitHub through
2948
+ * Ellipsis, newest first. Each is one `proxy_requests` row as stored.
2949
+ *
2950
+ * Required permissions: read:sessions.
2951
+ * API key: Supported.
2952
+ * CLI user token: Supported.
2953
+ * Session token: Requires the ellipsis:api scope and the required grants in the token's permissions.ellipsis configuration. Only the token's own session.
2954
+ * Higher permission levels include lower levels: read < write < delete.
2955
+ * Grant match patterns can further restrict access to individual resources.
2956
+ */
2957
+ proxy(id: string, options?: {
2958
+ limit?: number;
2959
+ cursor?: string | null;
2960
+ }): Promise<Page<S['ProxyRequest'], S['SessionProxyResponse']>>;
2943
2961
  /**
2944
2962
  * Get Session Records
2945
2963
  *
@@ -3066,7 +3084,7 @@ declare class EllipsisSessions {
3066
3084
  /**
3067
3085
  * Update Session
3068
3086
  *
3069
- * Archive or unarchive a session and return it.
3087
+ * Archive or unarchive a session, or set its summary, and return it.
3070
3088
  *
3071
3089
  * Set archived to true to record the current server time and the
3072
3090
  * authenticated GitHub user. API-key requests record no user.
@@ -3084,6 +3102,11 @@ declare class EllipsisSessions {
3084
3102
  * take messages again. 409 `session_superseded` when a newer session
3085
3103
  * now answers the same thread.
3086
3104
  *
3105
+ * Set summary to name the session. The summary's source becomes
3106
+ * `user`, and Ellipsis never replaces it with a generated one. With
3107
+ * both fields, the archive change applies first, and a refused
3108
+ * archive change leaves the summary as it was.
3109
+ *
3087
3110
  * Changes are delivered to session and session-list streams.
3088
3111
  *
3089
3112
  * Required permissions: write:sessions.
@@ -3093,14 +3116,47 @@ declare class EllipsisSessions {
3093
3116
  * Higher permission levels include lower levels: read < write < delete.
3094
3117
  * Grant match patterns can further restrict access to individual resources.
3095
3118
  */
3096
- update(id: string, options: {
3097
- archived: boolean;
3119
+ update(id: string, options?: {
3120
+ archived?: boolean | null;
3121
+ summary?: string | null;
3098
3122
  }): Promise<S['SessionResponse']>;
3099
3123
  /** Start a session and return a handle over it. */
3100
3124
  run(options: Parameters<EllipsisSessions['start']>[0]): Promise<SessionHandle>;
3101
3125
  /** A handle over an existing session. */
3102
3126
  handle(sessionId: string): Promise<SessionHandle>;
3103
3127
  }
3128
+ declare class EllipsisUserSettings {
3129
+ private readonly transport;
3130
+ constructor(transport: Transport);
3131
+ /**
3132
+ * Get User Settings
3133
+ *
3134
+ * Get the signed in user's own settings.
3135
+ *
3136
+ * Required permissions: read:user.
3137
+ * API key: Requires a CLI user token.
3138
+ * CLI user token: Supported.
3139
+ * Session token: Not supported by session tokens, even with permissions.ellipsis enabled.
3140
+ * Higher permission levels include lower levels: read < write < delete.
3141
+ */
3142
+ get(): Promise<S['UserSettings']>;
3143
+ /**
3144
+ * Patch User Settings
3145
+ *
3146
+ * Change the signed in user's own settings.
3147
+ *
3148
+ * Only the keys sent change, and the response is every setting.
3149
+ *
3150
+ * Required permissions: write:user.
3151
+ * API key: Requires a CLI user token.
3152
+ * CLI user token: Supported.
3153
+ * Session token: Not supported by session tokens, even with permissions.ellipsis enabled.
3154
+ * Higher permission levels include lower levels: read < write < delete.
3155
+ */
3156
+ update(options?: {
3157
+ web?: S['PatchUserSettingsWeb'] | null;
3158
+ }): Promise<S['UserSettings']>;
3159
+ }
3104
3160
  declare class EllipsisUserTokens {
3105
3161
  private readonly transport;
3106
3162
  constructor(transport: Transport);
@@ -3127,6 +3183,7 @@ declare class EllipsisUserTokens {
3127
3183
  }
3128
3184
  declare class EllipsisUser {
3129
3185
  private readonly transport;
3186
+ readonly settings: EllipsisUserSettings;
3130
3187
  readonly tokens: EllipsisUserTokens;
3131
3188
  constructor(transport: Transport);
3132
3189
  }
package/dist/index.js CHANGED
@@ -1626,6 +1626,24 @@ var EllipsisSessions = class {
1626
1626
  const path = `/v1/sessions/${enc(id)}/git`;
1627
1627
  return await this.transport.request("GET", path);
1628
1628
  }
1629
+ /**
1630
+ * Get Session Image
1631
+ *
1632
+ * Return an image sent with a message to the session.
1633
+ *
1634
+ * Each message lists its images, with their IDs, in `images`.
1635
+ *
1636
+ * Required permissions: read:sessions.
1637
+ * API key: Supported.
1638
+ * CLI user token: Supported.
1639
+ * Session token: Requires the ellipsis:api scope and the required grants in the token's permissions.ellipsis configuration.
1640
+ * Higher permission levels include lower levels: read < write < delete.
1641
+ * Grant match patterns can further restrict access to individual resources.
1642
+ */
1643
+ async image(session_id, id) {
1644
+ const path = `/v1/sessions/${enc(session_id)}/images/${enc(id)}`;
1645
+ return await this.transport.request("GET", path);
1646
+ }
1629
1647
  /**
1630
1648
  * List Sessions
1631
1649
  *
@@ -1670,6 +1688,29 @@ var EllipsisSessions = class {
1670
1688
  const path = `/v1/sessions/${enc(id)}/metrics`;
1671
1689
  return await this.transport.request("GET", path);
1672
1690
  }
1691
+ /**
1692
+ * Get Session Proxy
1693
+ *
1694
+ * The requests the session's environment sent to GitHub through
1695
+ * Ellipsis, newest first. Each is one `proxy_requests` row as stored.
1696
+ *
1697
+ * Required permissions: read:sessions.
1698
+ * API key: Supported.
1699
+ * CLI user token: Supported.
1700
+ * Session token: Requires the ellipsis:api scope and the required grants in the token's permissions.ellipsis configuration. Only the token's own session.
1701
+ * Higher permission levels include lower levels: read < write < delete.
1702
+ * Grant match patterns can further restrict access to individual resources.
1703
+ */
1704
+ async proxy(id, options = {}) {
1705
+ const path = `/v1/sessions/${enc(id)}/proxy`;
1706
+ const query = buildQuery({ limit: options.limit, cursor: options.cursor });
1707
+ const response = await this.transport.request("GET", path, { query });
1708
+ return new Page(
1709
+ response,
1710
+ "proxy_requests",
1711
+ (cursor) => this.proxy(id, { ...options, cursor })
1712
+ );
1713
+ }
1673
1714
  /**
1674
1715
  * Get Session Records
1675
1716
  *
@@ -1801,7 +1842,7 @@ var EllipsisSessions = class {
1801
1842
  /**
1802
1843
  * Update Session
1803
1844
  *
1804
- * Archive or unarchive a session and return it.
1845
+ * Archive or unarchive a session, or set its summary, and return it.
1805
1846
  *
1806
1847
  * Set archived to true to record the current server time and the
1807
1848
  * authenticated GitHub user. API-key requests record no user.
@@ -1819,6 +1860,11 @@ var EllipsisSessions = class {
1819
1860
  * take messages again. 409 `session_superseded` when a newer session
1820
1861
  * now answers the same thread.
1821
1862
  *
1863
+ * Set summary to name the session. The summary's source becomes
1864
+ * `user`, and Ellipsis never replaces it with a generated one. With
1865
+ * both fields, the archive change applies first, and a refused
1866
+ * archive change leaves the summary as it was.
1867
+ *
1822
1868
  * Changes are delivered to session and session-list streams.
1823
1869
  *
1824
1870
  * Required permissions: write:sessions.
@@ -1828,9 +1874,9 @@ var EllipsisSessions = class {
1828
1874
  * Higher permission levels include lower levels: read < write < delete.
1829
1875
  * Grant match patterns can further restrict access to individual resources.
1830
1876
  */
1831
- async update(id, options) {
1877
+ async update(id, options = {}) {
1832
1878
  const path = `/v1/sessions/${enc(id)}`;
1833
- const body = buildBody({ archived: options.archived });
1879
+ const body = buildBody({ archived: options.archived, summary: options.summary });
1834
1880
  return await this.transport.request("PUT", path, { body });
1835
1881
  }
1836
1882
  // ---- lifecycle sugar (hand-written layer over the generated core) ----
@@ -1845,6 +1891,45 @@ var EllipsisSessions = class {
1845
1891
  return new SessionHandle(this, response.session);
1846
1892
  }
1847
1893
  };
1894
+ var EllipsisUserSettings = class {
1895
+ constructor(transport) {
1896
+ this.transport = transport;
1897
+ }
1898
+ transport;
1899
+ /**
1900
+ * Get User Settings
1901
+ *
1902
+ * Get the signed in user's own settings.
1903
+ *
1904
+ * Required permissions: read:user.
1905
+ * API key: Requires a CLI user token.
1906
+ * CLI user token: Supported.
1907
+ * Session token: Not supported by session tokens, even with permissions.ellipsis enabled.
1908
+ * Higher permission levels include lower levels: read < write < delete.
1909
+ */
1910
+ async get() {
1911
+ const path = "/v1/user/settings";
1912
+ return await this.transport.request("GET", path);
1913
+ }
1914
+ /**
1915
+ * Patch User Settings
1916
+ *
1917
+ * Change the signed in user's own settings.
1918
+ *
1919
+ * Only the keys sent change, and the response is every setting.
1920
+ *
1921
+ * Required permissions: write:user.
1922
+ * API key: Requires a CLI user token.
1923
+ * CLI user token: Supported.
1924
+ * Session token: Not supported by session tokens, even with permissions.ellipsis enabled.
1925
+ * Higher permission levels include lower levels: read < write < delete.
1926
+ */
1927
+ async update(options = {}) {
1928
+ const path = "/v1/user/settings";
1929
+ const body = buildBody({ web: options.web });
1930
+ return await this.transport.request("PATCH", path, { body });
1931
+ }
1932
+ };
1848
1933
  var EllipsisUserTokens = class {
1849
1934
  constructor(transport) {
1850
1935
  this.transport = transport;
@@ -1880,9 +1965,11 @@ var EllipsisUserTokens = class {
1880
1965
  var EllipsisUser = class {
1881
1966
  constructor(transport) {
1882
1967
  this.transport = transport;
1968
+ this.settings = new EllipsisUserSettings(transport);
1883
1969
  this.tokens = new EllipsisUserTokens(transport);
1884
1970
  }
1885
1971
  transport;
1972
+ settings;
1886
1973
  tokens;
1887
1974
  };
1888
1975
  var EllipsisVmExecutions = class {
@@ -1,4 +1,4 @@
1
- import { s as CodexAgentMessage, cT as SessionRecord, N as CodexFileChangeItem, L as CodexEvent, _ as CodexMcpToolCallItem, ch as SdkRecord, cu as Session, d6 as StreamFrame } from '../types-D4cLMGUn.js';
1
+ import { s as CodexAgentMessage, cS as SessionRecord, N as CodexFileChangeItem, L as CodexEvent, _ as CodexMcpToolCallItem, cg as SdkRecord, ct as Session, d5 as StreamFrame } from '../types-Dwyd1Aud.js';
2
2
 
3
3
  type WorkPhase = 'queued' | 'preparing' | 'starting' | 'working';
4
4
  interface MessageTiming {
@@ -192,11 +192,17 @@ type EntryBody = {
192
192
  };
193
193
  declare function isWorkFold(item: TranscriptItem): boolean;
194
194
  declare function reasoningSummaryTitle(summary: string): string;
195
- declare function entryBody(entry: LedgerEntry, { live, now, liveText, liveSummary, }: {
195
+ declare function harnessName(session: {
196
+ claude_code?: unknown;
197
+ codex?: unknown;
198
+ gemini?: unknown;
199
+ }): string | null;
200
+ declare function entryBody(entry: LedgerEntry, { live, now, liveText, liveSummary, harness, }: {
196
201
  live: boolean;
197
202
  now: number;
198
203
  liveText?: string;
199
204
  liveSummary?: string;
205
+ harness?: string | null;
200
206
  }): EntryBody;
201
207
 
202
208
  interface ToolActivity {
@@ -252,4 +258,4 @@ declare class SessionTranscriptStore {
252
258
  ingest: (rawFrame: StreamFrame) => void;
253
259
  }
254
260
 
255
- export { BRANCH_GLYPH, type ChatNode, type ChatToolNode, type ChatTurn, type EntryBody, type EnvironmentLogKind, type EnvironmentLogLine, type EnvironmentState, type EventToItemsOptions, type ItemKind, LIVE_GLYPH, type LedgerEntry, type MessageProgress, type MessageTiming, type PlacedItem, type RecordSlice, type SessionTranscriptSnapshot, SessionTranscriptStore, StreamFrame, type ToolActivity, type TranscriptItem, USER_BAR, type WorkPhase, activitySummary, awaitingAgentPhase, cacheTierLabel, chatTurnsToItems, clampLines, claudePayload, codexChangedPaths, codexEventToItems, codexMcpToolName, codexSubagentThreads, collapseToolRuns, deliveredUnechoedSends, deriveEnvironmentState, emptySessionTranscriptSnapshot, entryBody, entrySeconds, environmentOutputLine, environmentOutputLines, environmentOutputStep, environmentPhaseLabel, environmentSummary, eventToItems, foldCosts, foldGutter, foldRun, formatDuration, groupRecordsToChatTurns, gutterFor, hookPhrase, humanDuration, isCodexSubagentRecord, isConnectVisibleRecord, isConversationOver, isFoldable, isToolActivity, isToolFold, isWorkFold, lastLines, layOutItems, lifecycleText, messageEndedText, oneLine, pendingToolCalls, reasoningSummaryTitle, recordSlice, recordToItems, resultCostUsd, seedTranscriptStore, sessionLogText, splitLedger, startupHeadline, startupSettled, statusActivityText, summarizeToolInput, tailLines, toolActivities, toolResultText, toolRunMembers };
261
+ export { BRANCH_GLYPH, type ChatNode, type ChatToolNode, type ChatTurn, type EntryBody, type EnvironmentLogKind, type EnvironmentLogLine, type EnvironmentState, type EventToItemsOptions, type ItemKind, LIVE_GLYPH, type LedgerEntry, type MessageProgress, type MessageTiming, type PlacedItem, type RecordSlice, type SessionTranscriptSnapshot, SessionTranscriptStore, StreamFrame, type ToolActivity, type TranscriptItem, USER_BAR, type WorkPhase, activitySummary, awaitingAgentPhase, cacheTierLabel, chatTurnsToItems, clampLines, claudePayload, codexChangedPaths, codexEventToItems, codexMcpToolName, codexSubagentThreads, collapseToolRuns, deliveredUnechoedSends, deriveEnvironmentState, emptySessionTranscriptSnapshot, entryBody, entrySeconds, environmentOutputLine, environmentOutputLines, environmentOutputStep, environmentPhaseLabel, environmentSummary, eventToItems, foldCosts, foldGutter, foldRun, formatDuration, groupRecordsToChatTurns, gutterFor, harnessName, hookPhrase, humanDuration, isCodexSubagentRecord, isConnectVisibleRecord, isConversationOver, isFoldable, isToolActivity, isToolFold, isWorkFold, lastLines, layOutItems, lifecycleText, messageEndedText, oneLine, pendingToolCalls, reasoningSummaryTitle, recordSlice, recordToItems, resultCostUsd, seedTranscriptStore, sessionLogText, splitLedger, startupHeadline, startupSettled, statusActivityText, summarizeToolInput, tailLines, toolActivities, toolResultText, toolRunMembers };
@@ -1829,11 +1829,18 @@ function reasoningSummaryTitle(summary) {
1829
1829
  const title = line.replace(/^#{1,6}\s+/, "").replace(/^[*_`]+|[*_`]+$/g, "").replace(/\[([^\]]+)\]\([^)]+\)/g, "$1").trim();
1830
1830
  return title.length > 120 ? `${title.slice(0, 119).trimEnd()}\u2026` : title;
1831
1831
  }
1832
+ function harnessName(session) {
1833
+ if (session.claude_code) return "Claude Code";
1834
+ if (session.codex) return "Codex";
1835
+ if (session.gemini) return "Gemini CLI";
1836
+ return null;
1837
+ }
1832
1838
  function entryBody(entry, {
1833
1839
  live,
1834
1840
  now,
1835
1841
  liveText = "",
1836
- liveSummary = ""
1842
+ liveSummary = "",
1843
+ harness = null
1837
1844
  }) {
1838
1845
  live = live && (entry.progress === void 0 || entry.progress.phase !== null);
1839
1846
  const raw = chatTurnsToItems(entry.turns);
@@ -1847,7 +1854,7 @@ function entryBody(entry, {
1847
1854
  const header = {
1848
1855
  key,
1849
1856
  kind: "summary",
1850
- text: live ? phase === "preparing" ? "Preparing environment" : phase === "starting" ? "Starting agent" : phase === "queued" ? "Queued" : reasoningSummaryTitle(liveSummary) || "Working" : seconds == null ? "Session startup" : `Worked for ${humanDuration(seconds)}`,
1857
+ text: live ? phase === "preparing" ? "Preparing environment" : phase === "starting" ? `Starting ${harness ?? "agent"}` : phase === "queued" ? "Queued" : reasoningSummaryTitle(liveSummary) || "Working" : seconds == null ? "Session startup" : `Worked for ${humanDuration(seconds)}`,
1851
1858
  spaceBefore: true,
1852
1859
  ...entry.cancelled || entry.turns.some((turn) => turn.isError) ? { isError: true } : {},
1853
1860
  ...live ? { loading: true } : {}
@@ -2173,6 +2180,7 @@ export {
2173
2180
  formatDuration,
2174
2181
  groupRecordsToChatTurns,
2175
2182
  gutterFor,
2183
+ harnessName,
2176
2184
  hookPhrase,
2177
2185
  humanDuration,
2178
2186
  isCodexSubagentRecord,
@@ -1,4 +1,4 @@
1
- import { cu as Session, d6 as StreamFrame } from '../types-D4cLMGUn.js';
1
+ import { ct as Session, d5 as StreamFrame } from '../types-Dwyd1Aud.js';
2
2
 
3
3
  declare const WS_CLOSE_NORMAL = 1000;
4
4
  declare const WS_CLOSE_GOING_AWAY = 1001;