@threadbase-sh/streamer 1.63.0 → 1.65.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/dist/agent/agent-client.d.ts +14 -0
- package/dist/agent/agent-client.d.ts.map +1 -0
- package/dist/agent/agent-config.d.ts +24 -0
- package/dist/agent/agent-config.d.ts.map +1 -0
- package/dist/agent/conversation-writer.d.ts +13 -0
- package/dist/agent/conversation-writer.d.ts.map +1 -0
- package/dist/agent/dedupe.d.ts +6 -0
- package/dist/agent/dedupe.d.ts.map +1 -0
- package/dist/agent/errors.d.ts +23 -0
- package/dist/agent/errors.d.ts.map +1 -0
- package/dist/agent/handle-send-agent-input.d.ts +21 -0
- package/dist/agent/handle-send-agent-input.d.ts.map +1 -0
- package/dist/agent/handle-start-agent-session.d.ts +21 -0
- package/dist/agent/handle-start-agent-session.d.ts.map +1 -0
- package/dist/agent/history-mapper.d.ts +4 -0
- package/dist/agent/history-mapper.d.ts.map +1 -0
- package/dist/agent/payload-guard.d.ts +29 -0
- package/dist/agent/payload-guard.d.ts.map +1 -0
- package/dist/api/app.d.ts +28 -0
- package/dist/api/app.d.ts.map +1 -0
- package/dist/api/handlers/conversations.handlers.d.ts +69 -0
- package/dist/api/handlers/conversations.handlers.d.ts.map +1 -0
- package/dist/api/handlers/http-helpers.d.ts +50 -0
- package/dist/api/handlers/http-helpers.d.ts.map +1 -0
- package/dist/api/handlers/sessions.handlers.d.ts +236 -0
- package/dist/api/handlers/sessions.handlers.d.ts.map +1 -0
- package/dist/api/middleware/auth.middleware.d.ts +5 -0
- package/dist/api/middleware/auth.middleware.d.ts.map +1 -0
- package/dist/api/middleware/cors.middleware.d.ts +5 -0
- package/dist/api/middleware/cors.middleware.d.ts.map +1 -0
- package/dist/api/middleware/error.middleware.d.ts +4 -0
- package/dist/api/middleware/error.middleware.d.ts.map +1 -0
- package/dist/api/routes/backup.routes.d.ts +5 -0
- package/dist/api/routes/backup.routes.d.ts.map +1 -0
- package/dist/api/routes/browse.routes.d.ts +5 -0
- package/dist/api/routes/browse.routes.d.ts.map +1 -0
- package/dist/api/routes/cacheAlert.routes.d.ts +5 -0
- package/dist/api/routes/cacheAlert.routes.d.ts.map +1 -0
- package/dist/api/routes/config.routes.d.ts +5 -0
- package/dist/api/routes/config.routes.d.ts.map +1 -0
- package/dist/api/routes/conversations.routes.d.ts +5 -0
- package/dist/api/routes/conversations.routes.d.ts.map +1 -0
- package/dist/api/routes/devices.routes.d.ts +17 -0
- package/dist/api/routes/devices.routes.d.ts.map +1 -0
- package/dist/api/routes/diagnostics.routes.d.ts +5 -0
- package/dist/api/routes/diagnostics.routes.d.ts.map +1 -0
- package/dist/api/routes/health.routes.d.ts +5 -0
- package/dist/api/routes/health.routes.d.ts.map +1 -0
- package/dist/api/routes/logs.routes.d.ts +3 -0
- package/dist/api/routes/logs.routes.d.ts.map +1 -0
- package/dist/api/routes/misc.routes.d.ts +77 -0
- package/dist/api/routes/misc.routes.d.ts.map +1 -0
- package/dist/api/routes/pair.routes.d.ts +5 -0
- package/dist/api/routes/pair.routes.d.ts.map +1 -0
- package/dist/api/routes/progress.routes.d.ts +39 -0
- package/dist/api/routes/progress.routes.d.ts.map +1 -0
- package/dist/api/routes/projects.routes.d.ts +5 -0
- package/dist/api/routes/projects.routes.d.ts.map +1 -0
- package/dist/api/routes/providers.routes.d.ts +19 -0
- package/dist/api/routes/providers.routes.d.ts.map +1 -0
- package/dist/api/routes/scanner.routes.d.ts +5 -0
- package/dist/api/routes/scanner.routes.d.ts.map +1 -0
- package/dist/api/routes/sessions.routes.d.ts +6 -0
- package/dist/api/routes/sessions.routes.d.ts.map +1 -0
- package/dist/api/routes/ws.routes.d.ts +7 -0
- package/dist/api/routes/ws.routes.d.ts.map +1 -0
- package/dist/api/types/api-deps.d.ts +114 -0
- package/dist/api/types/api-deps.d.ts.map +1 -0
- package/dist/auth.d.ts +81 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/browse.d.ts +17 -0
- package/dist/browse.d.ts.map +1 -0
- package/dist/claude-flags.d.ts +76 -0
- package/dist/claude-flags.d.ts.map +1 -0
- package/dist/cli.cjs +121 -7
- package/dist/cli.cjs.map +1 -1
- package/dist/codex-pty-runner.d.ts +90 -0
- package/dist/codex-pty-runner.d.ts.map +1 -0
- package/dist/config/update-config.d.ts +13 -0
- package/dist/config/update-config.d.ts.map +1 -0
- package/dist/conversation-cache.d.ts +336 -0
- package/dist/conversation-cache.d.ts.map +1 -0
- package/dist/db/config.d.ts +11 -0
- package/dist/db/config.d.ts.map +1 -0
- package/dist/db/index.d.ts +5 -0
- package/dist/db/index.d.ts.map +1 -0
- package/dist/db/migrations.d.ts +3 -0
- package/dist/db/migrations.d.ts.map +1 -0
- package/dist/db/pool.d.ts +5 -0
- package/dist/db/pool.d.ts.map +1 -0
- package/dist/db/query-timing.d.ts +52 -0
- package/dist/db/query-timing.d.ts.map +1 -0
- package/dist/db/repositories/cacheMetadata.repository.d.ts +12 -0
- package/dist/db/repositories/cacheMetadata.repository.d.ts.map +1 -0
- package/dist/db/repositories/conversations.repository.d.ts +27 -0
- package/dist/db/repositories/conversations.repository.d.ts.map +1 -0
- package/dist/db/repositories/devices.repository.d.ts +137 -0
- package/dist/db/repositories/devices.repository.d.ts.map +1 -0
- package/dist/db/repositories/managed-sessions.repository.d.ts +127 -0
- package/dist/db/repositories/managed-sessions.repository.d.ts.map +1 -0
- package/dist/db/repositories/projects.repository.d.ts +28 -0
- package/dist/db/repositories/projects.repository.d.ts.map +1 -0
- package/dist/db/repositories/push.repository.d.ts +186 -0
- package/dist/db/repositories/push.repository.d.ts.map +1 -0
- package/dist/db/repositories/sessions.repository.d.ts +16 -0
- package/dist/db/repositories/sessions.repository.d.ts.map +1 -0
- package/dist/db/runtime-store.d.ts +80 -0
- package/dist/db/runtime-store.d.ts.map +1 -0
- package/dist/db/sqlite-migrate.d.ts +13 -0
- package/dist/db/sqlite-migrate.d.ts.map +1 -0
- package/dist/db/upload-records.d.ts +11 -0
- package/dist/db/upload-records.d.ts.map +1 -0
- package/dist/e2ee/noise.d.ts +261 -0
- package/dist/e2ee/noise.d.ts.map +1 -0
- package/dist/e2ee/pair-payload.d.ts +60 -0
- package/dist/e2ee/pair-payload.d.ts.map +1 -0
- package/dist/e2ee/pair-request.d.ts +24 -0
- package/dist/e2ee/pair-request.d.ts.map +1 -0
- package/dist/external-tails.d.ts +91 -0
- package/dist/external-tails.d.ts.map +1 -0
- package/dist/feature-flags.d.ts +212 -0
- package/dist/feature-flags.d.ts.map +1 -0
- package/dist/handlers/handleListProjects.d.ts +3 -0
- package/dist/handlers/handleListProjects.d.ts.map +1 -0
- package/dist/index.cjs +101 -2
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +18 -2571
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +101 -2
- package/dist/index.js.map +1 -1
- package/dist/lifecycle/constants.d.ts +21 -0
- package/dist/lifecycle/constants.d.ts.map +1 -0
- package/dist/lifecycle/process-liveness.d.ts +7 -0
- package/dist/lifecycle/process-liveness.d.ts.map +1 -0
- package/dist/live-session-manager.d.ts +59 -0
- package/dist/live-session-manager.d.ts.map +1 -0
- package/dist/logger.d.ts +14 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/pair-store.d.ts +60 -0
- package/dist/pair-store.d.ts.map +1 -0
- package/dist/platform.d.ts +25 -0
- package/dist/platform.d.ts.map +1 -0
- package/dist/process-discovery.d.ts +35 -0
- package/dist/process-discovery.d.ts.map +1 -0
- package/dist/providers.d.ts +7 -0
- package/dist/providers.d.ts.map +1 -0
- package/dist/pty-host/protocol.d.ts +270 -0
- package/dist/pty-host/protocol.d.ts.map +1 -0
- package/dist/pty-host/remote-session-runner.d.ts +133 -0
- package/dist/pty-host/remote-session-runner.d.ts.map +1 -0
- package/dist/pty-host/socket.d.ts +54 -0
- package/dist/pty-host/socket.d.ts.map +1 -0
- package/dist/pty-host/spawn-host.d.ts +30 -0
- package/dist/pty-host/spawn-host.d.ts.map +1 -0
- package/dist/pty-manager.d.ts +65 -0
- package/dist/pty-manager.d.ts.map +1 -0
- package/dist/pty-shared.d.ts +27 -0
- package/dist/pty-shared.d.ts.map +1 -0
- package/dist/scanner-manager.d.ts +126 -0
- package/dist/scanner-manager.d.ts.map +1 -0
- package/dist/schemas/cacheAlert.schema.d.ts +14 -0
- package/dist/schemas/cacheAlert.schema.d.ts.map +1 -0
- package/dist/schemas/claudeFlags.schema.d.ts +7 -0
- package/dist/schemas/claudeFlags.schema.d.ts.map +1 -0
- package/dist/schemas/project.schema.d.ts +18 -0
- package/dist/schemas/project.schema.d.ts.map +1 -0
- package/dist/schemas/updateConfig.schema.d.ts +19 -0
- package/dist/schemas/updateConfig.schema.d.ts.map +1 -0
- package/dist/seal.d.ts +14 -0
- package/dist/seal.d.ts.map +1 -0
- package/dist/server-identity.d.ts +43 -0
- package/dist/server-identity.d.ts.map +1 -0
- package/dist/server-wiring.d.ts +189 -0
- package/dist/server-wiring.d.ts.map +1 -0
- package/dist/server.d.ts +404 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/services/backup/backup.d.ts +103 -0
- package/dist/services/backup/backup.d.ts.map +1 -0
- package/dist/services/cache/cacheMetadata.d.ts +8 -0
- package/dist/services/cache/cacheMetadata.d.ts.map +1 -0
- package/dist/services/cache-integrity/alertStore.d.ts +24 -0
- package/dist/services/cache-integrity/alertStore.d.ts.map +1 -0
- package/dist/services/cache-integrity/backup.d.ts +8 -0
- package/dist/services/cache-integrity/backup.d.ts.map +1 -0
- package/dist/services/cache-integrity/cacheIntegrityMonitor.d.ts +71 -0
- package/dist/services/cache-integrity/cacheIntegrityMonitor.d.ts.map +1 -0
- package/dist/services/conversations/conversationWatcher.d.ts +99 -0
- package/dist/services/conversations/conversationWatcher.d.ts.map +1 -0
- package/dist/services/conversations/findSearchTarget.d.ts +30 -0
- package/dist/services/conversations/findSearchTarget.d.ts.map +1 -0
- package/dist/services/conversations/isAgentConversation.d.ts +8 -0
- package/dist/services/conversations/isAgentConversation.d.ts.map +1 -0
- package/dist/services/conversations/pruneAgentConversations.d.ts +8 -0
- package/dist/services/conversations/pruneAgentConversations.d.ts.map +1 -0
- package/dist/services/conversations/refreshConversationCache.d.ts +27 -0
- package/dist/services/conversations/refreshConversationCache.d.ts.map +1 -0
- package/dist/services/conversations/shouldRefreshProjectsFromHdd.d.ts +33 -0
- package/dist/services/conversations/shouldRefreshProjectsFromHdd.d.ts.map +1 -0
- package/dist/services/diagnostics/diagnostics.d.ts +66 -0
- package/dist/services/diagnostics/diagnostics.d.ts.map +1 -0
- package/dist/services/projectChats/deriveProjectChatTitle.d.ts +15 -0
- package/dist/services/projectChats/deriveProjectChatTitle.d.ts.map +1 -0
- package/dist/services/projects/ensureProjectsForConversations.d.ts +15 -0
- package/dist/services/projects/ensureProjectsForConversations.d.ts.map +1 -0
- package/dist/services/providers/capabilities.d.ts +105 -0
- package/dist/services/providers/capabilities.d.ts.map +1 -0
- package/dist/services/providers/providerHealth.d.ts +72 -0
- package/dist/services/providers/providerHealth.d.ts.map +1 -0
- package/dist/services/push/apnsClient.d.ts +105 -0
- package/dist/services/push/apnsClient.d.ts.map +1 -0
- package/dist/services/push/expoPushSender.d.ts +37 -0
- package/dist/services/push/expoPushSender.d.ts.map +1 -0
- package/dist/services/push/liveActivityContentState.d.ts +60 -0
- package/dist/services/push/liveActivityContentState.d.ts.map +1 -0
- package/dist/services/push/liveActivityNotifier.d.ts +49 -0
- package/dist/services/push/liveActivityNotifier.d.ts.map +1 -0
- package/dist/services/push/liveActivityRenewal.d.ts +63 -0
- package/dist/services/push/liveActivityRenewal.d.ts.map +1 -0
- package/dist/services/push/liveActivitySender.d.ts +88 -0
- package/dist/services/push/liveActivitySender.d.ts.map +1 -0
- package/dist/services/push/waitingInputNotifier.d.ts +41 -0
- package/dist/services/push/waitingInputNotifier.d.ts.map +1 -0
- package/dist/services/questions/answersToKeystrokes.d.ts +8 -0
- package/dist/services/questions/answersToKeystrokes.d.ts.map +1 -0
- package/dist/services/questions/codexGateAnswers.d.ts +14 -0
- package/dist/services/questions/codexGateAnswers.d.ts.map +1 -0
- package/dist/services/questions/codexScreen.d.ts +74 -0
- package/dist/services/questions/codexScreen.d.ts.map +1 -0
- package/dist/services/questions/detectAskUserQuestion.d.ts +6 -0
- package/dist/services/questions/detectAskUserQuestion.d.ts.map +1 -0
- package/dist/services/questions/detectPermissionGate.d.ts +62 -0
- package/dist/services/questions/detectPermissionGate.d.ts.map +1 -0
- package/dist/services/questions/detectQuestionFromScreen.d.ts +30 -0
- package/dist/services/questions/detectQuestionFromScreen.d.ts.map +1 -0
- package/dist/services/questions/detectShellPrompt.d.ts +18 -0
- package/dist/services/questions/detectShellPrompt.d.ts.map +1 -0
- package/dist/services/questions/parseAgentPhase.d.ts +12 -0
- package/dist/services/questions/parseAgentPhase.d.ts.map +1 -0
- package/dist/services/questions/parseStatusLine.d.ts +19 -0
- package/dist/services/questions/parseStatusLine.d.ts.map +1 -0
- package/dist/services/questions/questionBroadcast.d.ts +18 -0
- package/dist/services/questions/questionBroadcast.d.ts.map +1 -0
- package/dist/services/questions/resolveAnswer.d.ts +16 -0
- package/dist/services/questions/resolveAnswer.d.ts.map +1 -0
- package/dist/services/search/searchQuery.d.ts +78 -0
- package/dist/services/search/searchQuery.d.ts.map +1 -0
- package/dist/services/security/capabilities.d.ts +50 -0
- package/dist/services/security/capabilities.d.ts.map +1 -0
- package/dist/services/sessions/autoResumeOnBoot.d.ts +28 -0
- package/dist/services/sessions/autoResumeOnBoot.d.ts.map +1 -0
- package/dist/services/sessions/codexRolloutOwner.d.ts +55 -0
- package/dist/services/sessions/codexRolloutOwner.d.ts.map +1 -0
- package/dist/services/sessions/conversationBusy.d.ts +32 -0
- package/dist/services/sessions/conversationBusy.d.ts.map +1 -0
- package/dist/services/sessions/idempotency.d.ts +67 -0
- package/dist/services/sessions/idempotency.d.ts.map +1 -0
- package/dist/services/sessions/reconcileSessions.d.ts +63 -0
- package/dist/services/sessions/reconcileSessions.d.ts.map +1 -0
- package/dist/services/sessions/rehydrateSessions.d.ts +68 -0
- package/dist/services/sessions/rehydrateSessions.d.ts.map +1 -0
- package/dist/services/sessions/resumeIdentity.d.ts +16 -0
- package/dist/services/sessions/resumeIdentity.d.ts.map +1 -0
- package/dist/session-registry-boot.d.ts +142 -0
- package/dist/session-registry-boot.d.ts.map +1 -0
- package/dist/session-store.d.ts +32 -0
- package/dist/session-store.d.ts.map +1 -0
- package/dist/session-watchers.d.ts +60 -0
- package/dist/session-watchers.d.ts.map +1 -0
- package/dist/types.d.ts +616 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/uploads.d.ts +16 -0
- package/dist/uploads.d.ts.map +1 -0
- package/dist/utils/bootToken.d.ts +3 -0
- package/dist/utils/bootToken.d.ts.map +1 -0
- package/dist/utils/canonicalizeFilePath.d.ts +75 -0
- package/dist/utils/canonicalizeFilePath.d.ts.map +1 -0
- package/dist/utils/canonicalizeProjectPath.d.ts +13 -0
- package/dist/utils/canonicalizeProjectPath.d.ts.map +1 -0
- package/dist/utils/codexConversationLine.d.ts +38 -0
- package/dist/utils/codexConversationLine.d.ts.map +1 -0
- package/dist/utils/conversationEtag.d.ts +19 -0
- package/dist/utils/conversationEtag.d.ts.map +1 -0
- package/dist/utils/dates.d.ts +12 -0
- package/dist/utils/dates.d.ts.map +1 -0
- package/dist/utils/debounce.d.ts +15 -0
- package/dist/utils/debounce.d.ts.map +1 -0
- package/dist/utils/deriveSessionName.d.ts +10 -0
- package/dist/utils/deriveSessionName.d.ts.map +1 -0
- package/dist/utils/fileIdentity.d.ts +36 -0
- package/dist/utils/fileIdentity.d.ts.map +1 -0
- package/dist/utils/isScannedSnapshotStale.d.ts +16 -0
- package/dist/utils/isScannedSnapshotStale.d.ts.map +1 -0
- package/dist/utils/scanProgressThrottle.d.ts +12 -0
- package/dist/utils/scanProgressThrottle.d.ts.map +1 -0
- package/dist/version.d.ts +3 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/ws-hub.d.ts +15 -0
- package/dist/ws-hub.d.ts.map +1 -0
- package/package.json +3 -4
- package/dist/index.d.cts +0 -2571
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/** Claude Code `--permission-mode` values, as accepted by CLI v2.1.x. */
|
|
2
|
+
export declare const PERMISSION_MODES: readonly ["acceptEdits", "auto", "bypassPermissions", "manual", "dontAsk", "plan"];
|
|
3
|
+
export type PermissionMode = (typeof PERMISSION_MODES)[number];
|
|
4
|
+
export declare function isPermissionMode(value: unknown): value is PermissionMode;
|
|
5
|
+
export declare const DANGEROUS_PERMISSION_MODES: readonly PermissionMode[];
|
|
6
|
+
export declare function isDangerousPermissionMode(mode: PermissionMode): boolean;
|
|
7
|
+
/**
|
|
8
|
+
* The mode sessions will actually spawn with, for callers that need to know
|
|
9
|
+
* before any spawn happens (the boot warning). Mirrors the precedence
|
|
10
|
+
* `StreamerServer.spawnFlagOverrides()` applies — `claudeFlags.permissionMode`
|
|
11
|
+
* wins over the `--default-permission-mode` fallback — so the two must not
|
|
12
|
+
* drift: a warning that reads the fallback would stay silent while a
|
|
13
|
+
* `claude_flags:` bypass is what actually reaches argv.
|
|
14
|
+
*/
|
|
15
|
+
export declare function effectivePermissionMode(flags: ClaudeFlagValues | undefined, fallback: string | undefined): PermissionMode | undefined;
|
|
16
|
+
/** Claude Code `--effort` levels, as accepted by CLI v2.1.x. */
|
|
17
|
+
export declare const EFFORT_LEVELS: readonly ["low", "medium", "high", "xhigh", "max"];
|
|
18
|
+
export type EffortLevel = (typeof EFFORT_LEVELS)[number];
|
|
19
|
+
export declare function isEffortLevel(value: unknown): value is EffortLevel;
|
|
20
|
+
export type FlagValueType = "boolean" | "string" | "enum" | "list";
|
|
21
|
+
/** How risky enabling a flag is. Drives the client's confirmation UX. */
|
|
22
|
+
export type FlagRisk = "low" | "elevated" | "dangerous";
|
|
23
|
+
export interface FlagDefinition {
|
|
24
|
+
/** Stable config/wire key. Never the CLI spelling. */
|
|
25
|
+
id: string;
|
|
26
|
+
/** The literal CLI token, e.g. "--add-dir". */
|
|
27
|
+
flag: string;
|
|
28
|
+
valueType: FlagValueType;
|
|
29
|
+
/** Allowed values when valueType === "enum". */
|
|
30
|
+
enumValues?: readonly string[];
|
|
31
|
+
/**
|
|
32
|
+
* Baseline risk. `permissionMode` is the exception: it is only dangerous for
|
|
33
|
+
* the values in DANGEROUS_PERMISSION_MODES, so clients must call
|
|
34
|
+
* `flagValueRisk()` rather than reading this field directly.
|
|
35
|
+
*/
|
|
36
|
+
risk: FlagRisk;
|
|
37
|
+
}
|
|
38
|
+
export type ClaudeFlagValue = string | string[] | boolean;
|
|
39
|
+
export type ClaudeFlagValues = Record<string, ClaudeFlagValue>;
|
|
40
|
+
export declare const CLAUDE_FLAGS: readonly FlagDefinition[];
|
|
41
|
+
export declare function findFlag(id: string): FlagDefinition | undefined;
|
|
42
|
+
/**
|
|
43
|
+
* Effective risk of a specific value. Only `permissionMode` is value-dependent
|
|
44
|
+
* (`acceptEdits` is routine; `bypassPermissions` is not).
|
|
45
|
+
*/
|
|
46
|
+
export declare function flagValueRisk(id: string, value: ClaudeFlagValue): FlagRisk;
|
|
47
|
+
/**
|
|
48
|
+
* Drop everything that isn't a known id carrying a well-typed value.
|
|
49
|
+
*
|
|
50
|
+
* This is a TRUST BOUNDARY, not a convenience: values arrive from a
|
|
51
|
+
* user-editable server.yaml and from HTTP, and they become process argv. Never
|
|
52
|
+
* skip it. Unknown/invalid entries are dropped rather than throwing so one bad
|
|
53
|
+
* key can't prevent the server from booting.
|
|
54
|
+
*/
|
|
55
|
+
export declare function validateFlagValues(raw: unknown): ClaudeFlagValues;
|
|
56
|
+
/**
|
|
57
|
+
* Split a free-text extra-args string into argv tokens, honouring single and
|
|
58
|
+
* double quotes so a path with spaces survives. Deliberately not a full shell
|
|
59
|
+
* parser — no variable expansion, no globbing, no escapes beyond the quotes.
|
|
60
|
+
*/
|
|
61
|
+
export declare function tokenizeExtraArgs(input: string | undefined): string[];
|
|
62
|
+
/**
|
|
63
|
+
* Turn validated flag values + extra args into argv tokens.
|
|
64
|
+
*
|
|
65
|
+
* The SPAWN_POSITIONAL_FLAG_IDS are intentionally NOT emitted here: both PTY
|
|
66
|
+
* spawn paths already pass them as explicit positionals, and emitting them
|
|
67
|
+
* twice would put a duplicate flag on the command line. They flow through
|
|
68
|
+
* `options.permissionMode` / `options.model` / `options.effort` instead, which
|
|
69
|
+
* StreamerServer.spawnFlagOverrides() sources from these same flag values.
|
|
70
|
+
*
|
|
71
|
+
* Extra args land LAST so the escape hatch can override anything the allowlist
|
|
72
|
+
* set.
|
|
73
|
+
*/
|
|
74
|
+
export declare function buildFlagArgs(values: ClaudeFlagValues | undefined, extraArgs?: string): string[];
|
|
75
|
+
export declare function buildSettingsJson(permissionMode: PermissionMode): string;
|
|
76
|
+
//# sourceMappingURL=claude-flags.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-flags.d.ts","sourceRoot":"","sources":["../src/claude-flags.ts"],"names":[],"mappings":"AAcA,yEAAyE;AACzE,eAAO,MAAM,gBAAgB,YAC3B,aAAa,EACb,MAAM,EACN,mBAAmB,EACnB,QAAQ,EACR,SAAS,EACT,MAAM,CACE,CAAC;AAEX,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC;AAE/D,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,cAAc,CAExE;AAOD,eAAO,MAAM,0BAA0B,EAAE,SAAS,cAAc,EAG/D,CAAC;AAEF,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAEvE;AAED;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,gBAAgB,GAAG,SAAS,EACnC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAC3B,cAAc,GAAG,SAAS,CAG5B;AAED,gEAAgE;AAChE,eAAO,MAAM,aAAa,YAAI,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,CAAU,CAAC;AAEhF,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAEzD,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,WAAW,CAElE;AAED,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC;AAEnE,yEAAyE;AACzE,MAAM,MAAM,QAAQ,GAAG,KAAK,GAAG,UAAU,GAAG,WAAW,CAAC;AAExD,MAAM,WAAW,cAAc;IAC7B,sDAAsD;IACtD,EAAE,EAAE,MAAM,CAAC;IACX,+CAA+C;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,aAAa,CAAC;IACzB,gDAAgD;IAChD,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/B;;;;OAIG;IACH,IAAI,EAAE,QAAQ,CAAC;CAChB;AAED,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,MAAM,EAAE,GAAG,OAAO,CAAC;AAC1D,MAAM,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;AAyB/D,eAAO,MAAM,YAAY,EAAE,SAAS,cAAc,EAajD,CAAC;AAQF,wBAAgB,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS,CAE/D;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,GAAG,QAAQ,CAO1E;AAED;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,OAAO,GAAG,gBAAgB,CA2BjE;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,EAAE,CA+BrE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,gBAAgB,GAAG,SAAS,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAsBhG;AAUD,wBAAgB,iBAAiB,CAAC,cAAc,EAAE,cAAc,GAAG,MAAM,CAMxE"}
|
package/dist/cli.cjs
CHANGED
|
@@ -28235,7 +28235,7 @@ var require_permessage_deflate = __commonJS({
|
|
|
28235
28235
|
acceptAsServer(offers) {
|
|
28236
28236
|
const opts = this._options;
|
|
28237
28237
|
const accepted = offers.find((params) => {
|
|
28238
|
-
if (opts.serverNoContextTakeover === false && params.server_no_context_takeover || params.server_max_window_bits && (opts.serverMaxWindowBits === false || typeof opts.serverMaxWindowBits === "number" && opts.serverMaxWindowBits > params.server_max_window_bits) || typeof opts.clientMaxWindowBits === "number" && !params.client_max_window_bits) {
|
|
28238
|
+
if (opts.serverNoContextTakeover === false && params.server_no_context_takeover || params.server_max_window_bits && (opts.serverMaxWindowBits === false || typeof opts.serverMaxWindowBits === "number" && opts.serverMaxWindowBits > params.server_max_window_bits) || typeof opts.clientMaxWindowBits === "number" && (typeof params.client_max_window_bits === "number" ? opts.clientMaxWindowBits > params.client_max_window_bits : !params.client_max_window_bits)) {
|
|
28239
28239
|
return false;
|
|
28240
28240
|
}
|
|
28241
28241
|
return true;
|
|
@@ -128383,7 +128383,7 @@ function formatIdentityBanner(fingerprint2, keyPath) {
|
|
|
128383
128383
|
"",
|
|
128384
128384
|
` ${fingerprint2}`,
|
|
128385
128385
|
"",
|
|
128386
|
-
"Compare this with the
|
|
128386
|
+
"Compare this with the identity code your phone shows when you add this server."
|
|
128387
128387
|
].join("\n");
|
|
128388
128388
|
}
|
|
128389
128389
|
var init_identity = __esm({
|
|
@@ -148735,6 +148735,19 @@ var SessionHandlers = class {
|
|
|
148735
148735
|
sessions: this.sessionStore.list(this.deps.ptyAttachedIds())
|
|
148736
148736
|
});
|
|
148737
148737
|
}
|
|
148738
|
+
/**
|
|
148739
|
+
* Same empty-unused check stop uses (promptCount === 0 and no cache row,
|
|
148740
|
+
* including boundConversationId / resumedFromConversationId). Safe after
|
|
148741
|
+
* putOnHold: the runner may already have dropped the live session.
|
|
148742
|
+
*/
|
|
148743
|
+
forgetIfEmptyUnused(sessionId) {
|
|
148744
|
+
const live = this.ptyManager.getSession(sessionId);
|
|
148745
|
+
const stored = this.sessionStore.getManaged(sessionId);
|
|
148746
|
+
const session = live ?? stored;
|
|
148747
|
+
if (!session) return;
|
|
148748
|
+
if (!this.shouldForgetEmptySession(session)) return;
|
|
148749
|
+
this.forgetEmptyStoppedSession(sessionId);
|
|
148750
|
+
}
|
|
148738
148751
|
async handleAdopt(sessionId, res) {
|
|
148739
148752
|
const discovered = await discoverClaudeProcesses();
|
|
148740
148753
|
this.sessionStore.setDiscovered(discovered);
|
|
@@ -151118,6 +151131,7 @@ function createLiveSessionOptions(deps) {
|
|
|
151118
151131
|
void deps.liveActivityNotifier()?.onStatusChange(session, previousStatus);
|
|
151119
151132
|
void deps.waitingInputNotifier()?.onStatusChange(session, previousStatus);
|
|
151120
151133
|
deps.sessionStatusBus.emit(`status:${session.id}`, session.status, session);
|
|
151134
|
+
deps.maybeFireHoldWhenIdle?.(session);
|
|
151121
151135
|
}
|
|
151122
151136
|
};
|
|
151123
151137
|
}
|
|
@@ -151266,7 +151280,20 @@ function createApiDeps(deps) {
|
|
|
151266
151280
|
deny(msg.type, "session:control");
|
|
151267
151281
|
return;
|
|
151268
151282
|
}
|
|
151269
|
-
|
|
151283
|
+
const when = msg.when;
|
|
151284
|
+
if (when === void 0 || when === "grace") {
|
|
151285
|
+
deps.startGraceTimer(msg.sessionId, deps.ptyGracePeriodMs);
|
|
151286
|
+
return;
|
|
151287
|
+
}
|
|
151288
|
+
if (when === "waiting_input") {
|
|
151289
|
+
deps.armHoldWhenIdle(msg.sessionId);
|
|
151290
|
+
return;
|
|
151291
|
+
}
|
|
151292
|
+
deps.log().warn(`[pty.hold_when_unknown] hold_session when=${String(when)}`, {
|
|
151293
|
+
event: "pty.hold_when_unknown",
|
|
151294
|
+
sessionId: msg.sessionId,
|
|
151295
|
+
when
|
|
151296
|
+
});
|
|
151270
151297
|
}
|
|
151271
151298
|
} catch {
|
|
151272
151299
|
}
|
|
@@ -153866,6 +153893,10 @@ var StreamerServer = class {
|
|
|
153866
153893
|
// Consecutive grace-timer defers for a still-`running` session (see
|
|
153867
153894
|
// GRACE_MAX_DEFERS). Reset when a subscriber reconnects or the PTY settles.
|
|
153868
153895
|
ptyGraceDeferCounts = /* @__PURE__ */ new Map();
|
|
153896
|
+
// Session ids that should be putOnHold at the next waiting_input/idle.
|
|
153897
|
+
// Same lifetime as ptyGraceTimers: in-memory, dropped on close/restart.
|
|
153898
|
+
// Last writer wins against the grace timer — never both armed.
|
|
153899
|
+
holdWhenIdle = /* @__PURE__ */ new Set();
|
|
153869
153900
|
// Map of sessionId → set of subscribed WS clients
|
|
153870
153901
|
sessionSubscribers = /* @__PURE__ */ new Map();
|
|
153871
153902
|
// sessionId → wall-clock ms of the last PTY chunk. Written from onOutput for
|
|
@@ -154093,7 +154124,8 @@ var StreamerServer = class {
|
|
|
154093
154124
|
waitingInputNotifier: () => this.waitingInputNotifier,
|
|
154094
154125
|
ptyAttachedIds: () => this.ptyAttachedIds(),
|
|
154095
154126
|
cancelPendingQuestion: (sessionId) => this.cancelPendingQuestion(sessionId),
|
|
154096
|
-
rememberSelfPtyEnded: (conversationId) => this.rememberSelfPtyEnded(conversationId)
|
|
154127
|
+
rememberSelfPtyEnded: (conversationId) => this.rememberSelfPtyEnded(conversationId),
|
|
154128
|
+
maybeFireHoldWhenIdle: (session) => this.maybeFireHoldWhenIdle(session)
|
|
154097
154129
|
})
|
|
154098
154130
|
);
|
|
154099
154131
|
this.sessionWatchers = new SessionWatchers({
|
|
@@ -154256,6 +154288,7 @@ var StreamerServer = class {
|
|
|
154256
154288
|
currentWarmupState: () => this.currentWarmupState(),
|
|
154257
154289
|
addSessionSubscriber: (sessionId, ws2) => this.addSessionSubscriber(sessionId, ws2),
|
|
154258
154290
|
startGraceTimer: (sessionId, delayMs) => this.startGraceTimer(sessionId, delayMs),
|
|
154291
|
+
armHoldWhenIdle: (sessionId) => this.armHoldWhenIdle(sessionId),
|
|
154259
154292
|
handleSessionsCount: (res) => this.handleSessionsCount(res),
|
|
154260
154293
|
applyLiveSessionSetting: (id, req, res, setting) => this.applyLiveSessionSetting(id, req, res, setting),
|
|
154261
154294
|
handlePairStart: (res) => this.handlePairStart(res),
|
|
@@ -154375,6 +154408,13 @@ var StreamerServer = class {
|
|
|
154375
154408
|
this.ptyGraceTimers.delete(sessionId);
|
|
154376
154409
|
}
|
|
154377
154410
|
this.ptyGraceDeferCounts.delete(sessionId);
|
|
154411
|
+
if (this.holdWhenIdle.delete(sessionId)) {
|
|
154412
|
+
this.log.info(
|
|
154413
|
+
`[hold-when-idle] cancelled ${sessionId} (subscribe)`,
|
|
154414
|
+
{ sessionId, event: "pty.hold_when_idle_cancel", reason: "subscribe" },
|
|
154415
|
+
"pino"
|
|
154416
|
+
);
|
|
154417
|
+
}
|
|
154378
154418
|
}
|
|
154379
154419
|
/**
|
|
154380
154420
|
* Bring up Live Activity push, if credentials are present (Feature 12).
|
|
@@ -154482,6 +154522,7 @@ var StreamerServer = class {
|
|
|
154482
154522
|
return reaped;
|
|
154483
154523
|
}
|
|
154484
154524
|
startGraceTimer(sessionId, delayMs) {
|
|
154525
|
+
this.holdWhenIdle.delete(sessionId);
|
|
154485
154526
|
const existing = this.ptyGraceTimers.get(sessionId);
|
|
154486
154527
|
if (existing) clearTimeout(existing);
|
|
154487
154528
|
const timer = setTimeout(() => {
|
|
@@ -154523,6 +154564,63 @@ var StreamerServer = class {
|
|
|
154523
154564
|
}, delayMs);
|
|
154524
154565
|
this.ptyGraceTimers.set(sessionId, timer);
|
|
154525
154566
|
}
|
|
154567
|
+
clearGrace(sessionId) {
|
|
154568
|
+
const existing = this.ptyGraceTimers.get(sessionId);
|
|
154569
|
+
if (existing) {
|
|
154570
|
+
clearTimeout(existing);
|
|
154571
|
+
this.ptyGraceTimers.delete(sessionId);
|
|
154572
|
+
}
|
|
154573
|
+
this.ptyGraceDeferCounts.delete(sessionId);
|
|
154574
|
+
}
|
|
154575
|
+
/**
|
|
154576
|
+
* Arm the in-app "Kill on idle" latch: hold now if already settled, otherwise
|
|
154577
|
+
* on the next running → waiting_input (or idle). No grace delay, no defer cap.
|
|
154578
|
+
* A subscribed leaving socket must not block an immediate hold.
|
|
154579
|
+
*/
|
|
154580
|
+
armHoldWhenIdle(sessionId) {
|
|
154581
|
+
if (!this.ptyManager.hasSession(sessionId)) return;
|
|
154582
|
+
this.clearGrace(sessionId);
|
|
154583
|
+
const status = this.ptyManager.getSession(sessionId)?.status ?? this.sessionStore.getManaged(sessionId)?.status;
|
|
154584
|
+
if (status === "waiting_input" || status === "idle") {
|
|
154585
|
+
this.holdWhenIdle.delete(sessionId);
|
|
154586
|
+
this.ptyManager.putOnHold(sessionId);
|
|
154587
|
+
this.forgetIfEmptyUnused(sessionId);
|
|
154588
|
+
return;
|
|
154589
|
+
}
|
|
154590
|
+
this.holdWhenIdle.add(sessionId);
|
|
154591
|
+
this.log.info(
|
|
154592
|
+
`[hold-when-idle] armed ${sessionId}`,
|
|
154593
|
+
{ sessionId, event: "pty.hold_when_idle_armed" },
|
|
154594
|
+
"pino"
|
|
154595
|
+
);
|
|
154596
|
+
}
|
|
154597
|
+
/**
|
|
154598
|
+
* Fire the Kill-on-idle latch from the shared onStatusChange funnel.
|
|
154599
|
+
* Delete first so the ensuing idle transition cannot re-enter.
|
|
154600
|
+
*/
|
|
154601
|
+
maybeFireHoldWhenIdle(session) {
|
|
154602
|
+
if (session.status !== "waiting_input" && session.status !== "idle") return;
|
|
154603
|
+
if (!this.holdWhenIdle.has(session.id)) return;
|
|
154604
|
+
this.holdWhenIdle.delete(session.id);
|
|
154605
|
+
if (this.hasSessionSubscriber(session.id)) {
|
|
154606
|
+
this.log.info(
|
|
154607
|
+
`[hold-when-idle] cancelled ${session.id} (subscriber)`,
|
|
154608
|
+
{ sessionId: session.id, event: "pty.hold_when_idle_cancel", reason: "subscriber" },
|
|
154609
|
+
"pino"
|
|
154610
|
+
);
|
|
154611
|
+
return;
|
|
154612
|
+
}
|
|
154613
|
+
this.log.info(
|
|
154614
|
+
`[hold-when-idle] holding ${session.id}`,
|
|
154615
|
+
{ sessionId: session.id, event: "pty.hold_when_idle_fire" },
|
|
154616
|
+
"pino"
|
|
154617
|
+
);
|
|
154618
|
+
this.ptyManager.putOnHold(session.id);
|
|
154619
|
+
this.forgetIfEmptyUnused(session.id);
|
|
154620
|
+
}
|
|
154621
|
+
forgetIfEmptyUnused(sessionId) {
|
|
154622
|
+
this.sessionHandlers.forgetIfEmptyUnused(sessionId);
|
|
154623
|
+
}
|
|
154526
154624
|
get port() {
|
|
154527
154625
|
const addr = this.httpServer.address();
|
|
154528
154626
|
return typeof addr === "object" && addr ? addr.port : 0;
|
|
@@ -154955,6 +155053,7 @@ var StreamerServer = class {
|
|
|
154955
155053
|
async close() {
|
|
154956
155054
|
for (const timer of this.ptyGraceTimers.values()) clearTimeout(timer);
|
|
154957
155055
|
this.ptyGraceTimers.clear();
|
|
155056
|
+
this.holdWhenIdle.clear();
|
|
154958
155057
|
if (this.idleReaperTimer) {
|
|
154959
155058
|
clearInterval(this.idleReaperTimer);
|
|
154960
155059
|
this.idleReaperTimer = null;
|
|
@@ -159375,7 +159474,8 @@ function generateQr(payload) {
|
|
|
159375
159474
|
function printUrlBanner({
|
|
159376
159475
|
url: url2,
|
|
159377
159476
|
qr: qr2,
|
|
159378
|
-
expiresAt
|
|
159477
|
+
expiresAt,
|
|
159478
|
+
fingerprint: fingerprint2
|
|
159379
159479
|
}) {
|
|
159380
159480
|
const contentLines = ["Threadbase Streamer \u2014 server address", "", url2];
|
|
159381
159481
|
if (qr2) {
|
|
@@ -159389,6 +159489,14 @@ function printUrlBanner({
|
|
|
159389
159489
|
contentLines.push("", "Scan to pair a mobile client");
|
|
159390
159490
|
}
|
|
159391
159491
|
}
|
|
159492
|
+
if (fingerprint2) {
|
|
159493
|
+
contentLines.push(
|
|
159494
|
+
"",
|
|
159495
|
+
"Identity code",
|
|
159496
|
+
fingerprint2,
|
|
159497
|
+
"This should match the code your phone shows after you scan."
|
|
159498
|
+
);
|
|
159499
|
+
}
|
|
159392
159500
|
const width = Math.max(...contentLines.map((l) => l.length));
|
|
159393
159501
|
const pad = (l) => `\u2551 ${l}${" ".repeat(width - l.length)} \u2551`;
|
|
159394
159502
|
const top = `\u2554${"\u2550".repeat(width + 2)}\u2557`;
|
|
@@ -159452,9 +159560,15 @@ async function printServerBanner({
|
|
|
159452
159560
|
}
|
|
159453
159561
|
const { token, expiresAt, expiresInSeconds } = await res.json();
|
|
159454
159562
|
const expSeconds = Math.floor(expiresAt / 1e3);
|
|
159455
|
-
|
|
159563
|
+
let fingerprint2;
|
|
159564
|
+
let payload = `threadbase://pair?url=${encodeURIComponent(url2)}&token=${token}&exp=${expSeconds}`;
|
|
159565
|
+
if (e2eeOffered) {
|
|
159566
|
+
const spk = identityKey();
|
|
159567
|
+
payload += `&spk=${spk}&v=1`;
|
|
159568
|
+
fingerprint2 = serverIdentityFingerprint(spk);
|
|
159569
|
+
}
|
|
159456
159570
|
const qr2 = await generateQr(payload);
|
|
159457
|
-
log15.info(printUrlBanner({ url: url2, qr: qr2, expiresAt }));
|
|
159571
|
+
log15.info(printUrlBanner({ url: url2, qr: qr2, expiresAt, fingerprint: fingerprint2 }));
|
|
159458
159572
|
log15.info(`Pair URL: ${payload}`);
|
|
159459
159573
|
log15.info(`Expires in ${expiresInSeconds}s`);
|
|
159460
159574
|
}
|