@skaile/workspaces 3.0.0 → 3.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/CHANGELOG.md +6 -0
- package/dist/{asset-feeds-XKPJZ6QT.js → asset-feeds-3XCKB542.js} +4 -4
- package/dist/{asset-feeds-XKPJZ6QT.js.map → asset-feeds-3XCKB542.js.map} +1 -1
- package/dist/asset-manager/index.js +1 -1
- package/dist/bridge/drivers/claude-sdk.js +5 -205
- package/dist/bridge/drivers/claude-sdk.js.map +1 -1
- package/dist/bridge/drivers/codex.js +1 -1
- package/dist/bridge/drivers/continue.js +2 -2
- package/dist/bridge/drivers/echo.js +1 -1
- package/dist/bridge/drivers/gemini.js +3 -3
- package/dist/bridge/drivers/goose.js +2 -2
- package/dist/bridge/drivers/omp.js +1 -1
- package/dist/bridge/drivers/opencode.js +2 -2
- package/dist/bridge/drivers/qwen.js +3 -3
- package/dist/bridge/index.js +13 -3
- package/dist/bridge/src/drivers/claude-sdk.d.ts.map +1 -1
- package/dist/bridge/src/drivers/resume-probe.d.ts +54 -0
- package/dist/bridge/src/drivers/resume-probe.d.ts.map +1 -0
- package/dist/bridge/src/drivers/scrub-transcript.d.ts +17 -0
- package/dist/bridge/src/drivers/scrub-transcript.d.ts.map +1 -1
- package/dist/bridge/src/index.d.ts +1 -0
- package/dist/bridge/src/index.d.ts.map +1 -1
- package/dist/{chunk-KXWUCKP5.js → chunk-2U4ISGE2.js} +4 -4
- package/dist/{chunk-KXWUCKP5.js.map → chunk-2U4ISGE2.js.map} +1 -1
- package/dist/chunk-46LE3GNY.js +296 -0
- package/dist/chunk-46LE3GNY.js.map +1 -0
- package/dist/{chunk-QGDQHNYC.js → chunk-BENN6MO4.js} +3 -3
- package/dist/{chunk-QGDQHNYC.js.map → chunk-BENN6MO4.js.map} +1 -1
- package/dist/{chunk-BJDACPWZ.js → chunk-FP7DNGX6.js} +3 -3
- package/dist/{chunk-BJDACPWZ.js.map → chunk-FP7DNGX6.js.map} +1 -1
- package/dist/{chunk-ZO7KL7GN.js → chunk-H26KDA7J.js} +4 -4
- package/dist/{chunk-ZO7KL7GN.js.map → chunk-H26KDA7J.js.map} +1 -1
- package/dist/{chunk-P5W6JVD4.js → chunk-HA2H3FLE.js} +3 -3
- package/dist/{chunk-P5W6JVD4.js.map → chunk-HA2H3FLE.js.map} +1 -1
- package/dist/{chunk-JQMULHO6.js → chunk-HNR2IT34.js} +11 -9
- package/dist/chunk-HNR2IT34.js.map +1 -0
- package/dist/{chunk-TXTCW7V6.js → chunk-MJ6EME7A.js} +6 -6
- package/dist/{chunk-TXTCW7V6.js.map → chunk-MJ6EME7A.js.map} +1 -1
- package/dist/{chunk-NMKTM55X.js → chunk-PT2ZUW2E.js} +2 -2
- package/dist/{chunk-NMKTM55X.js.map → chunk-PT2ZUW2E.js.map} +1 -1
- package/dist/{chunk-WECBTWWZ.js → chunk-PUEHYNBT.js} +3 -3
- package/dist/{chunk-WECBTWWZ.js.map → chunk-PUEHYNBT.js.map} +1 -1
- package/dist/{chunk-SR6NBBWT.js → chunk-QFO4IYBZ.js} +2 -2
- package/dist/{chunk-SR6NBBWT.js.map → chunk-QFO4IYBZ.js.map} +1 -1
- package/dist/{chunk-EH7BCJF4.js → chunk-TARN55L3.js} +6 -6
- package/dist/{chunk-EH7BCJF4.js.map → chunk-TARN55L3.js.map} +1 -1
- package/dist/{chunk-P2J3MLTW.js → chunk-VBMY3VCW.js} +3 -3
- package/dist/{chunk-P2J3MLTW.js.map → chunk-VBMY3VCW.js.map} +1 -1
- package/dist/{chunk-XJECOBCO.js → chunk-X73AMPOT.js} +3 -3
- package/dist/{chunk-XJECOBCO.js.map → chunk-X73AMPOT.js.map} +1 -1
- package/dist/{chunk-Q6O53D5Q.js → chunk-ZGTM4BOU.js} +2 -2
- package/dist/{chunk-Q6O53D5Q.js.map → chunk-ZGTM4BOU.js.map} +1 -1
- package/dist/cli/index.js +30 -30
- package/dist/connectors/index.js +4 -4
- package/dist/{ensure-sources-D6R57GAP.js → ensure-sources-AST427RF.js} +4 -4
- package/dist/{ensure-sources-D6R57GAP.js.map → ensure-sources-AST427RF.js.map} +1 -1
- package/dist/factory-assets/connectors/box.js +4 -4
- package/dist/factory-assets/connectors/deploy.js +4 -4
- package/dist/factory-assets/connectors/devserver.js +4 -4
- package/dist/factory-assets/connectors/flow/adapter.js +4 -4
- package/dist/factory-assets/connectors/flow/run-flow.js +5 -5
- package/dist/factory-assets/connectors/flow.js +4 -4
- package/dist/factory-assets/connectors/git.js +4 -4
- package/dist/factory-assets/connectors/gmail.js +4 -4
- package/dist/factory-assets/connectors/googledrive.js +4 -4
- package/dist/factory-assets/connectors/local.js +4 -4
- package/dist/factory-assets/connectors/mattermost.js +4 -4
- package/dist/factory-assets/connectors/memory.js +4 -4
- package/dist/factory-assets/connectors/minio.js +4 -4
- package/dist/factory-assets/connectors/postgres.js +4 -4
- package/dist/factory-assets/connectors/s3.js +4 -4
- package/dist/factory-assets/connectors/sharepoint.js +4 -4
- package/dist/factory-assets/connectors/sqlite.js +4 -4
- package/dist/factory-assets/connectors/static-server.js +4 -4
- package/dist/factory-assets/connectors/tunnel.js +4 -4
- package/dist/factory-assets/connectors/webdav.js +4 -4
- package/dist/factory-assets/connectors/xstate-store.js +4 -4
- package/dist/factory-assets/connectors/xstate.js +4 -4
- package/dist/{helpers-IS4MSEOQ.js → helpers-IZDG57TR.js} +4 -4
- package/dist/{helpers-IS4MSEOQ.js.map → helpers-IZDG57TR.js.map} +1 -1
- package/dist/{library-publish-QJACP6FW.js → library-publish-XGJ7IOU2.js} +6 -6
- package/dist/{library-publish-QJACP6FW.js.map → library-publish-XGJ7IOU2.js.map} +1 -1
- package/dist/{open-library-3FMLAU3F.js → open-library-YDS66KLH.js} +5 -5
- package/dist/{open-library-3FMLAU3F.js.map → open-library-YDS66KLH.js.map} +1 -1
- package/dist/{project-KEAAGHSX.js → project-NR53RZOT.js} +5 -5
- package/dist/{project-KEAAGHSX.js.map → project-NR53RZOT.js.map} +1 -1
- package/dist/runner/index.js +7 -7
- package/dist/runner/src/serve.d.ts.map +1 -1
- package/dist/sdk/asset-manager.js +1 -1
- package/dist/sdk/bridge.js +13 -3
- package/dist/sdk/index.js +7 -7
- package/dist/sdk/runner.js +7 -7
- package/dist/{setup-VX6EPF5P.js → setup-I5SLLHRA.js} +5 -5
- package/dist/{setup-VX6EPF5P.js.map → setup-I5SLLHRA.js.map} +1 -1
- package/dist/{source-45XHQSBF.js → source-DDZKKQH2.js} +6 -6
- package/dist/{source-45XHQSBF.js.map → source-DDZKKQH2.js.map} +1 -1
- package/dist/{source-manifest-publish-M34SKD46.js → source-manifest-publish-OTVKHRX3.js} +7 -7
- package/dist/{source-manifest-publish-M34SKD46.js.map → source-manifest-publish-OTVKHRX3.js.map} +1 -1
- package/dist/tui/index.js +7 -7
- package/dist/types/src/lifecycle.d.ts +12 -0
- package/dist/types/src/lifecycle.d.ts.map +1 -1
- package/dist/workspace-plugin/index.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-ISQWMBKD.js +0 -74
- package/dist/chunk-ISQWMBKD.js.map +0 -1
- package/dist/chunk-JQMULHO6.js.map +0 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { fetchProviderModels } from '../../chunk-V34ZEXSE.js';
|
|
2
2
|
import { classifyGenericErrorMessage } from '../../chunk-GAH4YRCI.js';
|
|
3
|
-
import { BUILTIN_DRIVER_CATALOG, AgentDriver, getBridgeLogger } from '../../chunk-
|
|
3
|
+
import { BUILTIN_DRIVER_CATALOG, AgentDriver, getBridgeLogger } from '../../chunk-QFO4IYBZ.js';
|
|
4
4
|
import '../../chunk-6E6PKKAD.js';
|
|
5
5
|
import '../../chunk-U5POE4BA.js';
|
|
6
6
|
import '../../chunk-7GOCNYUV.js';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { SubprocessCliDriver, mapApiKeysToEnv, extractText, extractCost, extractTokens } from '../../chunk-
|
|
1
|
+
import { SubprocessCliDriver, mapApiKeysToEnv, extractText, extractCost, extractTokens } from '../../chunk-FP7DNGX6.js';
|
|
2
2
|
import '../../chunk-GAH4YRCI.js';
|
|
3
|
-
import { BUILTIN_DRIVER_CATALOG, getBridgeLogger } from '../../chunk-
|
|
3
|
+
import { BUILTIN_DRIVER_CATALOG, getBridgeLogger } from '../../chunk-QFO4IYBZ.js';
|
|
4
4
|
import '../../chunk-6E6PKKAD.js';
|
|
5
5
|
import '../../chunk-U5POE4BA.js';
|
|
6
6
|
import '../../chunk-7GOCNYUV.js';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { dispatchCapability } from '../../chunk-RRVQAE5D.js';
|
|
2
|
-
import { BUILTIN_DRIVER_CATALOG, AgentDriver, getBridgeLogger } from '../../chunk-
|
|
2
|
+
import { BUILTIN_DRIVER_CATALOG, AgentDriver, getBridgeLogger } from '../../chunk-QFO4IYBZ.js';
|
|
3
3
|
import '../../chunk-6E6PKKAD.js';
|
|
4
4
|
import '../../chunk-U5POE4BA.js';
|
|
5
5
|
import '../../chunk-7GOCNYUV.js';
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
export { GeminiDriver, GeminiFamilyDriver, geminiDriverTarget } from '../../chunk-
|
|
2
|
-
import '../../chunk-
|
|
1
|
+
export { GeminiDriver, GeminiFamilyDriver, geminiDriverTarget } from '../../chunk-2U4ISGE2.js';
|
|
2
|
+
import '../../chunk-FP7DNGX6.js';
|
|
3
3
|
import '../../chunk-V34ZEXSE.js';
|
|
4
4
|
import '../../chunk-GAH4YRCI.js';
|
|
5
|
-
import '../../chunk-
|
|
5
|
+
import '../../chunk-QFO4IYBZ.js';
|
|
6
6
|
import '../../chunk-6E6PKKAD.js';
|
|
7
7
|
import '../../chunk-U5POE4BA.js';
|
|
8
8
|
import '../../chunk-7GOCNYUV.js';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { SubprocessCliDriver, mapApiKeysToEnv, extractText, extractCost, extractTokens } from '../../chunk-
|
|
1
|
+
import { SubprocessCliDriver, mapApiKeysToEnv, extractText, extractCost, extractTokens } from '../../chunk-FP7DNGX6.js';
|
|
2
2
|
import '../../chunk-GAH4YRCI.js';
|
|
3
|
-
import { BUILTIN_DRIVER_CATALOG, getBridgeLogger } from '../../chunk-
|
|
3
|
+
import { BUILTIN_DRIVER_CATALOG, getBridgeLogger } from '../../chunk-QFO4IYBZ.js';
|
|
4
4
|
import '../../chunk-6E6PKKAD.js';
|
|
5
5
|
import '../../chunk-U5POE4BA.js';
|
|
6
6
|
import '../../chunk-7GOCNYUV.js';
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { classifyGenericErrorMessage } from '../../chunk-GAH4YRCI.js';
|
|
2
|
-
import { BUILTIN_DRIVER_CATALOG, AgentDriver, getBridgeLogger } from '../../chunk-
|
|
2
|
+
import { BUILTIN_DRIVER_CATALOG, AgentDriver, getBridgeLogger } from '../../chunk-QFO4IYBZ.js';
|
|
3
3
|
import '../../chunk-6E6PKKAD.js';
|
|
4
4
|
import '../../chunk-U5POE4BA.js';
|
|
5
5
|
import '../../chunk-7GOCNYUV.js';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { SubprocessCliDriver, mapApiKeysToEnv, extractText, extractCost, extractTokens } from '../../chunk-
|
|
1
|
+
import { SubprocessCliDriver, mapApiKeysToEnv, extractText, extractCost, extractTokens } from '../../chunk-FP7DNGX6.js';
|
|
2
2
|
import '../../chunk-GAH4YRCI.js';
|
|
3
|
-
import { BUILTIN_DRIVER_CATALOG, getBridgeLogger } from '../../chunk-
|
|
3
|
+
import { BUILTIN_DRIVER_CATALOG, getBridgeLogger } from '../../chunk-QFO4IYBZ.js';
|
|
4
4
|
import '../../chunk-6E6PKKAD.js';
|
|
5
5
|
import '../../chunk-U5POE4BA.js';
|
|
6
6
|
import '../../chunk-7GOCNYUV.js';
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { GeminiFamilyDriver } from '../../chunk-
|
|
2
|
-
import '../../chunk-
|
|
1
|
+
import { GeminiFamilyDriver } from '../../chunk-2U4ISGE2.js';
|
|
2
|
+
import '../../chunk-FP7DNGX6.js';
|
|
3
3
|
import { fetchProviderModels } from '../../chunk-V34ZEXSE.js';
|
|
4
4
|
import '../../chunk-GAH4YRCI.js';
|
|
5
|
-
import { BUILTIN_DRIVER_CATALOG, getBridgeLogger } from '../../chunk-
|
|
5
|
+
import { BUILTIN_DRIVER_CATALOG, getBridgeLogger } from '../../chunk-QFO4IYBZ.js';
|
|
6
6
|
import '../../chunk-6E6PKKAD.js';
|
|
7
7
|
import '../../chunk-U5POE4BA.js';
|
|
8
8
|
import '../../chunk-7GOCNYUV.js';
|
package/dist/bridge/index.js
CHANGED
|
@@ -1,10 +1,20 @@
|
|
|
1
|
-
export { BridgeRuntime, EventNormalizer, createRuntime, detectFileChange, detectFileChanges, summarizeToolCall, summarizeToolResult, validateApiKey } from '../chunk-
|
|
2
|
-
export { CLOUD_SECRET_ENV_KEYS, SUPPORTED_CLOUDS, buildClaudeCloudEnv } from '../chunk-
|
|
1
|
+
export { BridgeRuntime, EventNormalizer, createRuntime, detectFileChange, detectFileChanges, summarizeToolCall, summarizeToolResult, validateApiKey } from '../chunk-HA2H3FLE.js';
|
|
2
|
+
export { CLOUD_SECRET_ENV_KEYS, SUPPORTED_CLOUDS, buildClaudeCloudEnv, probeResumeTranscript, resolveClaudeConfigDir } from '../chunk-46LE3GNY.js';
|
|
3
3
|
export { dispatchCapability, filterRenderCapabilities, renderFallback } from '../chunk-RRVQAE5D.js';
|
|
4
4
|
export { ModelTierResolutionError, PROVIDER_MODEL_TIERS, STATIC_MODELS, fetchProviderModels, getModels, getStaticModels, resolveModelTier } from '../chunk-V34ZEXSE.js';
|
|
5
5
|
export { AccountUnavailableError, AuthError, classifyClaudeSdkError, reclassifyAuthAsAccountUnavailable } from '../chunk-GAH4YRCI.js';
|
|
6
|
-
export { AgentDriver, BUILTIN_DRIVER_CATALOG, DRIVER_CATALOG, createDriver, getBridgeLogger, listDrivers, listModelsForDriver, registerBuiltinDrivers } from '../chunk-
|
|
6
|
+
export { AgentDriver, BUILTIN_DRIVER_CATALOG, DRIVER_CATALOG, createDriver, getBridgeLogger, listDrivers, listModelsForDriver, registerBuiltinDrivers } from '../chunk-QFO4IYBZ.js';
|
|
7
7
|
import '../chunk-6E6PKKAD.js';
|
|
8
|
+
import '../chunk-P43HBWKK.js';
|
|
9
|
+
import '../chunk-F3HNW354.js';
|
|
10
|
+
import '../chunk-K5GBV4SA.js';
|
|
11
|
+
import '../chunk-ZAP2BDHG.js';
|
|
12
|
+
import '../chunk-UFY2HFLO.js';
|
|
13
|
+
import '../chunk-Q26C5GLO.js';
|
|
14
|
+
import '../chunk-MENCWIHW.js';
|
|
15
|
+
import '../chunk-P4VHQA4N.js';
|
|
16
|
+
import '../chunk-DYMWJAL4.js';
|
|
17
|
+
import '../chunk-GEEW6SY2.js';
|
|
8
18
|
import '../chunk-U5POE4BA.js';
|
|
9
19
|
import '../chunk-7GOCNYUV.js';
|
|
10
20
|
import '../chunk-NSBPE2FW.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"claude-sdk.d.ts","sourceRoot":"","sources":["../../../../bridge/src/drivers/claude-sdk.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"claude-sdk.d.ts","sourceRoot":"","sources":["../../../../bridge/src/drivers/claude-sdk.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pre-first-turn resume probe for the Claude Agent SDK driver.
|
|
3
|
+
*
|
|
4
|
+
* A tier-1 native resume only hands its session id to the SDK inside the first
|
|
5
|
+
* real turn, so the `jsonl_lost` outcome ("No conversation found") is invisible
|
|
6
|
+
* until a turn is consumed. The runner shares the container filesystem with the
|
|
7
|
+
* SDK, so a cheap `stat` of the on-disk JSONL transcript is an authoritative,
|
|
8
|
+
* side-effect-free signal of whether the resume will find its history — no
|
|
9
|
+
* probe query, no spurious model turn.
|
|
10
|
+
*
|
|
11
|
+
* @module
|
|
12
|
+
*/
|
|
13
|
+
/**
|
|
14
|
+
* Outcome of {@link probeResumeTranscript}: whether the SDK transcript for a
|
|
15
|
+
* requested tier-1 resume exists on disk.
|
|
16
|
+
*
|
|
17
|
+
* @category Resume probe
|
|
18
|
+
*/
|
|
19
|
+
export type ResumeProbeOutcome = "transcript_found" | "jsonl_lost";
|
|
20
|
+
/**
|
|
21
|
+
* Resolve the Claude Code config directory — the parent of `projects/` — from
|
|
22
|
+
* an explicit env map, the process environment, or the `~/.claude` default.
|
|
23
|
+
*
|
|
24
|
+
* The runner's probe and the claude-sdk driver share this one resolver, so they
|
|
25
|
+
* agree as long as they see the same `CLAUDE_CONFIG_DIR`. Today they do:
|
|
26
|
+
* `CLAUDE_CONFIG_DIR` is container-scoped and neither side threads a per-session
|
|
27
|
+
* override through `config.env`, so both fall through to `process.env`. If a
|
|
28
|
+
* future change ever set the driver's `config.env.CLAUDE_CONFIG_DIR` to a
|
|
29
|
+
* divergent path, the reactive `resume_failed { jsonl_lost }` turn remains the
|
|
30
|
+
* safety net.
|
|
31
|
+
*
|
|
32
|
+
* @category Resume probe
|
|
33
|
+
*/
|
|
34
|
+
export declare function resolveClaudeConfigDir(env?: Record<string, string | undefined>): string;
|
|
35
|
+
/**
|
|
36
|
+
* Probe whether the SDK JSONL transcript for `sessionId` exists on disk.
|
|
37
|
+
*
|
|
38
|
+
* Non-null locator result → `transcript_found`; null → `jsonl_lost`;
|
|
39
|
+
* `undefined` → outcome unknown (the probe exceeded its budget or errored). The
|
|
40
|
+
* caller leaves the ack field ABSENT on `undefined` so the reactive
|
|
41
|
+
* `resume_failed { jsonl_lost }` turn stays the safety net — a timed-out probe
|
|
42
|
+
* must never masquerade as a genuine `jsonl_lost` and force a needless downgrade.
|
|
43
|
+
*
|
|
44
|
+
* `opts.timeoutMs` overrides {@link RESUME_PROBE_TIMEOUT_MS}; `opts.locate`
|
|
45
|
+
* overrides the transcript locator (used by tests / alternate stores).
|
|
46
|
+
*
|
|
47
|
+
* @category Resume probe
|
|
48
|
+
*/
|
|
49
|
+
export declare function probeResumeTranscript(sessionId: string, opts?: {
|
|
50
|
+
env?: Record<string, string | undefined>;
|
|
51
|
+
timeoutMs?: number;
|
|
52
|
+
locate?: (configDir: string, sessionId: string) => Promise<string | null>;
|
|
53
|
+
}): Promise<ResumeProbeOutcome | undefined>;
|
|
54
|
+
//# sourceMappingURL=resume-probe.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resume-probe.d.ts","sourceRoot":"","sources":["../../../../bridge/src/drivers/resume-probe.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAeH;;;;;GAKG;AACH,MAAM,MAAM,kBAAkB,GAAG,kBAAkB,GAAG,YAAY,CAAC;AAEnE;;;;;;;;;;;;;GAaG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GAAG,MAAM,CAEvF;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,qBAAqB,CACzC,SAAS,EAAE,MAAM,EACjB,IAAI,CAAC,EAAE;IACL,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;CAC3E,GACA,OAAO,CAAC,kBAAkB,GAAG,SAAS,CAAC,CAiBzC"}
|
|
@@ -110,6 +110,23 @@ export interface ScrubTranscriptResult {
|
|
|
110
110
|
* @category Transcript repair
|
|
111
111
|
*/
|
|
112
112
|
export declare function sniffImageMediaType(base64: string): string | null;
|
|
113
|
+
/**
|
|
114
|
+
* Locate the JSONL transcript for `sessionId` under `<configDir>/projects/`.
|
|
115
|
+
*
|
|
116
|
+
* Claude Code encodes the project directory into the `projects/` subfolder
|
|
117
|
+
* name; rather than reproduce that encoding, this scans every subfolder for
|
|
118
|
+
* `<sessionId>.jsonl` (the session id is a UUID — globally unique).
|
|
119
|
+
*
|
|
120
|
+
* Async and deadline-bounded since #454. The `existsSync(projectsDir)` probe is
|
|
121
|
+
* gone: `readdir` already fails on a missing directory, so the probe was a
|
|
122
|
+
* second stat on the same path for no information.
|
|
123
|
+
*
|
|
124
|
+
* `timeoutMs` defaults to {@link fsDeadlineMs} so callers that only need the
|
|
125
|
+
* path (the resume probe) can omit it.
|
|
126
|
+
*
|
|
127
|
+
* @category Transcript repair
|
|
128
|
+
*/
|
|
129
|
+
export declare function locateTranscriptPath(configDir: string, sessionId: string, timeoutMs?: number): Promise<string | null>;
|
|
113
130
|
/**
|
|
114
131
|
* Scan a Claude Code SDK transcript for image content blocks whose declared
|
|
115
132
|
* `media_type` does not match the actual bytes, repair them, and atomically
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scrub-transcript.d.ts","sourceRoot":"","sources":["../../../../bridge/src/drivers/scrub-transcript.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AAQH;;;;;;GAMG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC5D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CAC7D;AAED;;;;GAIG;AACH,MAAM,WAAW,sBAAsB;IACrC;;;OAGG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB,gEAAgE;IAChE,SAAS,EAAE,MAAM,CAAC;IAClB,uCAAuC;IACvC,GAAG,CAAC,EAAE,WAAW,CAAC;CACnB;AAED;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IACpC,mEAAmE;IACnE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,uFAAuF;IACvF,SAAS,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB,mFAAmF;IACnF,aAAa,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,OAAO,EAAE,OAAO,CAAC;CAClB;AAeD;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAwCjE;
|
|
1
|
+
{"version":3,"file":"scrub-transcript.d.ts","sourceRoot":"","sources":["../../../../bridge/src/drivers/scrub-transcript.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgDG;AAQH;;;;;;GAMG;AACH,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAC5D,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;CAC7D;AAED;;;;GAIG;AACH,MAAM,WAAW,sBAAsB;IACrC;;;OAGG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB,gEAAgE;IAChE,SAAS,EAAE,MAAM,CAAC;IAClB,uCAAuC;IACvC,GAAG,CAAC,EAAE,WAAW,CAAC;CACnB;AAED;;;;GAIG;AACH,MAAM,WAAW,qBAAqB;IACpC,mEAAmE;IACnE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,uFAAuF;IACvF,SAAS,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB,mFAAmF;IACnF,aAAa,EAAE,MAAM,CAAC;IACtB;;;;OAIG;IACH,OAAO,EAAE,OAAO,CAAC;CAClB;AAeD;;;;;;;;;;GAUG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAwCjE;AA6FD;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,oBAAoB,CACxC,SAAS,EAAE,MAAM,EACjB,SAAS,EAAE,MAAM,EACjB,SAAS,GAAE,MAAuB,GACjC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAoBxB;AAgED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,uBAAuB,CAC3C,IAAI,EAAE,sBAAsB,GAC3B,OAAO,CAAC,qBAAqB,CAAC,CAsFhC"}
|
|
@@ -5,6 +5,7 @@ export * from "./logger.js";
|
|
|
5
5
|
export * from "./models.js";
|
|
6
6
|
export * from "./normalizer.js";
|
|
7
7
|
export * from "./registry.js";
|
|
8
|
+
export { probeResumeTranscript, type ResumeProbeOutcome, resolveClaudeConfigDir, } from "./drivers/resume-probe.js";
|
|
8
9
|
export * from "./runtime.js";
|
|
9
10
|
export * from "./types.js";
|
|
10
11
|
export * from "./validation.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../bridge/src/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC;AACzC,cAAc,YAAY,CAAC;AAC3B,OAAO,EACL,uBAAuB,EACvB,SAAS,EACT,KAAK,yBAAyB,EAC9B,sBAAsB,EACtB,kCAAkC,GACnC,MAAM,uBAAuB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../bridge/src/index.ts"],"names":[],"mappings":"AAAA,cAAc,0BAA0B,CAAC;AACzC,cAAc,YAAY,CAAC;AAC3B,OAAO,EACL,uBAAuB,EACvB,SAAS,EACT,KAAK,yBAAyB,EAC9B,sBAAsB,EACtB,kCAAkC,GACnC,MAAM,uBAAuB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,OAAO,EACL,qBAAqB,EACrB,KAAK,kBAAkB,EACvB,sBAAsB,GACvB,MAAM,2BAA2B,CAAC;AACnC,cAAc,cAAc,CAAC;AAC7B,cAAc,YAAY,CAAC;AAC3B,cAAc,iBAAiB,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { SubprocessCliDriver, extractText, extractCost, extractTokens } from './chunk-
|
|
1
|
+
import { SubprocessCliDriver, extractText, extractCost, extractTokens } from './chunk-FP7DNGX6.js';
|
|
2
2
|
import { getStaticModels, fetchProviderModels } from './chunk-V34ZEXSE.js';
|
|
3
|
-
import { BUILTIN_DRIVER_CATALOG, getBridgeLogger } from './chunk-
|
|
3
|
+
import { BUILTIN_DRIVER_CATALOG, getBridgeLogger } from './chunk-QFO4IYBZ.js';
|
|
4
4
|
import * as z from 'zod';
|
|
5
5
|
|
|
6
6
|
var GeminiFamilyDriver = class extends SubprocessCliDriver {
|
|
@@ -106,5 +106,5 @@ var geminiDriverTarget = {
|
|
|
106
106
|
};
|
|
107
107
|
|
|
108
108
|
export { GeminiDriver, GeminiFamilyDriver, geminiDriverTarget };
|
|
109
|
-
//# sourceMappingURL=chunk-
|
|
110
|
-
//# sourceMappingURL=chunk-
|
|
109
|
+
//# sourceMappingURL=chunk-2U4ISGE2.js.map
|
|
110
|
+
//# sourceMappingURL=chunk-2U4ISGE2.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../bridge/src/drivers/gemini.ts"],"names":[],"mappings":"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","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../bridge/src/drivers/gemini.ts"],"names":[],"mappings":"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","file":"chunk-2U4ISGE2.js","sourcesContent":["import type { DriverTarget } from \"@skaile/workspaces/plugin-registry\";\nimport type { Logger } from \"@skaile/workspaces/types\";\nimport * as z from \"zod\";\nimport { getBridgeLogger } from \"../logger.js\";\nimport { fetchProviderModels, getStaticModels, type ModelEntry } from \"../models.js\";\nimport { BUILTIN_DRIVER_CATALOG } from \"../registry.js\";\nimport type { AgentConfig, DriverInfo } from \"../types.js\";\nimport { extractCost, extractText, extractTokens, SubprocessCliDriver } from \"./_subprocess-cli.js\";\n\n/**\n * Shared base for the Gemini-CLI event family. Gemini CLI and Qwen Code (a fork\n * of Gemini CLI) emit the same `stream-json` event shape, so both dispatch the\n * same {@link handleJson}: `init`/`system` → session capture, `message`/\n * `assistant` → streamed assistant text, `tool_use` / `tool_result` → tool\n * events, `result` → tokens + cost.\n *\n * @docLink packages/bridge/drivers#gemini-driver\n */\nexport abstract class GeminiFamilyDriver extends SubprocessCliDriver {\n protected handleJson(json: any): void {\n switch (json?.type) {\n case \"init\":\n case \"system\":\n this.captureSession(json.sessionId ?? json.session_id ?? json.id);\n break;\n\n case \"message\":\n case \"assistant\": {\n const role = json.role ?? json.message?.role ?? \"assistant\";\n if (role !== \"assistant\") break;\n const text = extractText(json);\n if (json.done === true || json.final === true || json.finished === true) {\n this.pushAssistantEnd(text);\n } else {\n this.pushAssistantDelta(text);\n }\n break;\n }\n\n case \"tool_use\":\n case \"tool_call\":\n this.pushToolCall(json.name ?? json.tool ?? \"tool\", json.input ?? json.args ?? {});\n break;\n\n case \"tool_result\":\n this.pushToolResult(\n json.name ?? json.tool ?? \"tool\",\n json.result ?? json.output ?? json.content,\n Boolean(json.is_error ?? json.isError ?? json.error),\n );\n break;\n\n case \"error\":\n this.pushError(this.classifyMessage(String(json.message ?? json.error ?? \"error\")));\n break;\n\n case \"result\":\n this.captureSession(json.sessionId ?? json.session_id);\n this.pushResult({\n tokens: extractTokens(json),\n costUsd: extractCost(json),\n summary: extractText(json) || \"Task completed\",\n });\n break;\n }\n }\n}\n\n/**\n * Agent driver for the Google **Gemini CLI** (`gemini`).\n *\n * Spawns `gemini -p \"<prompt>\" --output-format stream-json` per turn and maps\n * the stream-json events to the unified {@link AgentEvent} stream. Google /\n * Vertex models only — uses `GEMINI_API_KEY` from `apiKeys.google` /\n * `apiKeys.gemini` / env.\n *\n * @remarks\n * - **Requires Gemini CLI ≥ v0.6.1** — earlier versions reject\n * `--output-format`. A too-old CLI surfaces as a `process`-category exit error.\n * - **Session resume is not available in headless (`-p`) mode** — the CLI errors\n * if asked to resume non-interactively, so this driver runs single-turn per\n * process and logs a warning when a resume id is present.\n * - Exit codes: `42` → input/validation error, `53` → turn-limit (treated as a\n * completed turn).\n *\n * @see https://github.com/google-gemini/gemini-cli\n * @docLink packages/bridge/drivers#gemini-driver\n */\nexport class GeminiDriver extends GeminiFamilyDriver {\n readonly driverInfo: DriverInfo = {\n id: \"gemini\",\n name: \"Gemini CLI\",\n modelAgnostic: false,\n supportsInBandAbort: false,\n };\n\n protected readonly log: Logger = getBridgeLogger(\"gemini\");\n protected readonly defaultBin = \"gemini\";\n protected readonly productName = \"Gemini CLI\";\n protected readonly envPrefix = \"GEMINI\";\n\n protected buildArgs(message: string, resumeId: string | undefined): string[] {\n if (resumeId) {\n this.log.warn(\"Gemini CLI cannot resume in headless mode; starting a fresh turn\", {\n resumeId,\n });\n }\n const args = [\"-p\", message, \"--output-format\", \"stream-json\"];\n if (this.config.model) args.push(\"-m\", this.config.model);\n return args;\n }\n\n protected buildEnv(): Record<string, string> {\n const env = this.baseEnv([\"GEMINI_API_KEY\", \"GOOGLE_API_KEY\"]);\n const key =\n this.config.apiKeys?.google ??\n this.config.apiKeys?.gemini ??\n this.config.env?.GEMINI_API_KEY ??\n process.env.GEMINI_API_KEY;\n if (key) env.GEMINI_API_KEY = key;\n return env;\n }\n\n protected installHint(): string {\n return \"Gemini CLI is not installed or not on your PATH. Install it with `npm i -g @google/gemini-cli` (≥ v0.6.1).\";\n }\n\n protected override classifyExit(code: number | null, signal: NodeJS.Signals | null) {\n if (code === 42) {\n return {\n message: \"Gemini CLI reported an input error (exit 42)\",\n category: \"validation\" as const,\n retryable: false,\n hint: \"The prompt or flags were rejected by Gemini CLI. Check the model name and arguments.\",\n };\n }\n if (code === 53) return null; // turn-limit — the result was already emitted.\n return super.classifyExit(code, signal);\n }\n\n override async listModels(): Promise<ModelEntry[]> {\n const key =\n this.config.apiKeys?.google ?? this.config.apiKeys?.gemini ?? process.env.GEMINI_API_KEY;\n if (!key) return getStaticModels(\"google\");\n const result = await fetchProviderModels(\"google\", key);\n return result.ok && result.models.length > 0 ? result.models : getStaticModels(\"google\");\n }\n}\n\n/**\n * `DriverTarget` wrapper for the gemini driver. Registered into the plugin\n * registry by `registerBuiltinDrivers()`.\n */\nexport const geminiDriverTarget: DriverTarget<AgentConfig> = {\n id: \"gemini\",\n displayName: BUILTIN_DRIVER_CATALOG.gemini?.name ?? \"Gemini CLI\",\n apiVersion: 1,\n configSchema: z.custom<AgentConfig>(() => true),\n create: async (config, _ctx) => new GeminiDriver(config),\n listModels: async (apiKeys) =>\n new GeminiDriver({ cwd: process.cwd(), sessionId: \"model-list\", apiKeys }).listModels(),\n};\n"]}
|
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
import { fsDeadlineMs, withFsDeadline, tryWithFsDeadline } from './chunk-DYMWJAL4.js';
|
|
2
|
+
import { createReadStream, createWriteStream } from 'fs';
|
|
3
|
+
import { readdir, stat, rename, unlink } from 'fs/promises';
|
|
4
|
+
import { join } from 'path';
|
|
5
|
+
import { pipeline } from 'stream/promises';
|
|
6
|
+
import { homedir } from 'os';
|
|
7
|
+
|
|
8
|
+
// bridge/src/cloud.ts
|
|
9
|
+
var SUPPORTED_CLOUDS = ["default", "bedrock", "vertex", "azure", "gateway"];
|
|
10
|
+
var CLOUD_SECRET_ENV_KEYS = {
|
|
11
|
+
bedrock: [
|
|
12
|
+
"AWS_ACCESS_KEY_ID",
|
|
13
|
+
"AWS_SECRET_ACCESS_KEY",
|
|
14
|
+
"AWS_SESSION_TOKEN",
|
|
15
|
+
"AWS_BEARER_TOKEN_BEDROCK"
|
|
16
|
+
],
|
|
17
|
+
vertex: ["GOOGLE_APPLICATION_CREDENTIALS_JSON"],
|
|
18
|
+
azure: ["ANTHROPIC_FOUNDRY_API_KEY"],
|
|
19
|
+
gateway: ["ANTHROPIC_AUTH_TOKEN", "ANTHROPIC_API_KEY"]
|
|
20
|
+
};
|
|
21
|
+
var SCRUBBED_ENV_KEYS = ["ANTHROPIC_API_KEY", "ANTHROPIC_AUTH_TOKEN", "ANTHROPIC_BASE_URL"];
|
|
22
|
+
function buildClaudeCloudEnv(args) {
|
|
23
|
+
const { cloud, cloudConfig, cloudSecrets, baseEnv, configEnv, fallbackApiKey } = args;
|
|
24
|
+
const env = { ...baseEnv, ...configEnv ?? {} };
|
|
25
|
+
const ambient = {
|
|
26
|
+
authToken: env.ANTHROPIC_AUTH_TOKEN,
|
|
27
|
+
apiKey: env.ANTHROPIC_API_KEY,
|
|
28
|
+
baseUrl: env.ANTHROPIC_BASE_URL
|
|
29
|
+
};
|
|
30
|
+
for (const key of Object.keys(env)) {
|
|
31
|
+
if (SCRUBBED_ENV_KEYS.includes(key) || key.startsWith("CLAUDE_CODE_USE_")) {
|
|
32
|
+
delete env[key];
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
const set = (key, value) => {
|
|
36
|
+
if (value) env[key] = value;
|
|
37
|
+
};
|
|
38
|
+
switch (cloud) {
|
|
39
|
+
case "bedrock": {
|
|
40
|
+
env.CLAUDE_CODE_USE_BEDROCK = "1";
|
|
41
|
+
for (const key of CLOUD_SECRET_ENV_KEYS.bedrock) set(key, cloudSecrets?.[key]);
|
|
42
|
+
set("AWS_REGION", cloudConfig?.region);
|
|
43
|
+
break;
|
|
44
|
+
}
|
|
45
|
+
case "vertex": {
|
|
46
|
+
env.CLAUDE_CODE_USE_VERTEX = "1";
|
|
47
|
+
set("GOOGLE_APPLICATION_CREDENTIALS", cloudSecrets?.GOOGLE_APPLICATION_CREDENTIALS);
|
|
48
|
+
set("ANTHROPIC_VERTEX_PROJECT_ID", cloudConfig?.projectId);
|
|
49
|
+
set("CLOUD_ML_REGION", cloudConfig?.region);
|
|
50
|
+
break;
|
|
51
|
+
}
|
|
52
|
+
case "azure": {
|
|
53
|
+
env.CLAUDE_CODE_USE_FOUNDRY = "1";
|
|
54
|
+
set("ANTHROPIC_FOUNDRY_API_KEY", cloudSecrets?.ANTHROPIC_FOUNDRY_API_KEY);
|
|
55
|
+
if (cloudConfig?.resource) {
|
|
56
|
+
env.ANTHROPIC_FOUNDRY_RESOURCE = cloudConfig.resource;
|
|
57
|
+
} else {
|
|
58
|
+
set("ANTHROPIC_FOUNDRY_BASE_URL", cloudConfig?.baseUrl);
|
|
59
|
+
}
|
|
60
|
+
break;
|
|
61
|
+
}
|
|
62
|
+
case "gateway": {
|
|
63
|
+
set("ANTHROPIC_BASE_URL", cloudConfig?.baseUrl ?? ambient.baseUrl);
|
|
64
|
+
const authToken = cloudSecrets?.ANTHROPIC_AUTH_TOKEN ?? ambient.authToken;
|
|
65
|
+
if (authToken) {
|
|
66
|
+
env.ANTHROPIC_AUTH_TOKEN = authToken;
|
|
67
|
+
} else {
|
|
68
|
+
set(
|
|
69
|
+
"ANTHROPIC_API_KEY",
|
|
70
|
+
cloudSecrets?.ANTHROPIC_API_KEY ?? fallbackApiKey ?? ambient.apiKey
|
|
71
|
+
);
|
|
72
|
+
}
|
|
73
|
+
break;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
return env;
|
|
77
|
+
}
|
|
78
|
+
var STUB_TEXT = "[image removed: unprocessable image data]";
|
|
79
|
+
var STUB_TEXT_OVERSIZED = "[image removed: image too large]";
|
|
80
|
+
var MAX_IMAGE_BYTES = 5 * 1024 * 1024;
|
|
81
|
+
function sniffImageMediaType(base64) {
|
|
82
|
+
let buf;
|
|
83
|
+
try {
|
|
84
|
+
buf = Buffer.from(base64.slice(0, 32), "base64");
|
|
85
|
+
} catch {
|
|
86
|
+
return null;
|
|
87
|
+
}
|
|
88
|
+
if (buf.length < 4) {
|
|
89
|
+
return null;
|
|
90
|
+
}
|
|
91
|
+
if (buf[0] === 255 && buf[1] === 216) {
|
|
92
|
+
return "image/jpeg";
|
|
93
|
+
}
|
|
94
|
+
if (buf[0] === 137 && buf[1] === 80 && buf[2] === 78 && buf[3] === 71) {
|
|
95
|
+
return "image/png";
|
|
96
|
+
}
|
|
97
|
+
if (buf[0] === 71 && buf[1] === 73 && buf[2] === 70 && buf[3] === 56) {
|
|
98
|
+
return "image/gif";
|
|
99
|
+
}
|
|
100
|
+
if (buf.length >= 12 && buf[0] === 82 && buf[1] === 73 && buf[2] === 70 && buf[3] === 70 && buf[8] === 87 && buf[9] === 69 && buf[10] === 66 && buf[11] === 80) {
|
|
101
|
+
return "image/webp";
|
|
102
|
+
}
|
|
103
|
+
return null;
|
|
104
|
+
}
|
|
105
|
+
function totalChanges(c) {
|
|
106
|
+
return c.corrected + c.stubbed + c.cacheStripped;
|
|
107
|
+
}
|
|
108
|
+
function scrubBlock(block, counters) {
|
|
109
|
+
if (block.type === "tool_result" && Array.isArray(block.content)) {
|
|
110
|
+
return {
|
|
111
|
+
...block,
|
|
112
|
+
content: block.content.map((inner) => scrubBlock(inner, counters))
|
|
113
|
+
};
|
|
114
|
+
}
|
|
115
|
+
if (block.type === "text" && block.cache_control != null) {
|
|
116
|
+
const text = typeof block.text === "string" ? block.text : "";
|
|
117
|
+
if (text.trim() === "") {
|
|
118
|
+
counters.cacheStripped++;
|
|
119
|
+
const clone = { ...block };
|
|
120
|
+
delete clone.cache_control;
|
|
121
|
+
return clone;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
if (block.type === "image" && block.source?.type === "base64" && typeof block.source.data === "string") {
|
|
125
|
+
const data = block.source.data;
|
|
126
|
+
if (Math.floor(data.length * 3 / 4) > MAX_IMAGE_BYTES) {
|
|
127
|
+
counters.stubbed++;
|
|
128
|
+
return { type: "text", text: STUB_TEXT_OVERSIZED };
|
|
129
|
+
}
|
|
130
|
+
const sniffed = sniffImageMediaType(data);
|
|
131
|
+
if (sniffed === null) {
|
|
132
|
+
counters.stubbed++;
|
|
133
|
+
return { type: "text", text: STUB_TEXT };
|
|
134
|
+
}
|
|
135
|
+
if (sniffed !== block.source.media_type) {
|
|
136
|
+
counters.corrected++;
|
|
137
|
+
return { ...block, source: { ...block.source, media_type: sniffed } };
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
return block;
|
|
141
|
+
}
|
|
142
|
+
async function locateTranscriptPath(configDir, sessionId, timeoutMs = fsDeadlineMs()) {
|
|
143
|
+
const projectsDir = join(configDir, "projects");
|
|
144
|
+
const entries = await tryWithFsDeadline(
|
|
145
|
+
`readdir ${projectsDir}`,
|
|
146
|
+
() => readdir(projectsDir),
|
|
147
|
+
null,
|
|
148
|
+
timeoutMs
|
|
149
|
+
);
|
|
150
|
+
if (!entries) return null;
|
|
151
|
+
for (const entry of entries) {
|
|
152
|
+
const candidate = join(projectsDir, entry, `${sessionId}.jsonl`);
|
|
153
|
+
const found = await tryWithFsDeadline(
|
|
154
|
+
`stat ${candidate}`,
|
|
155
|
+
async () => (await stat(candidate)).isFile(),
|
|
156
|
+
false,
|
|
157
|
+
timeoutMs
|
|
158
|
+
);
|
|
159
|
+
if (found) return candidate;
|
|
160
|
+
}
|
|
161
|
+
return null;
|
|
162
|
+
}
|
|
163
|
+
async function* streamLines(filePath) {
|
|
164
|
+
const stream = createReadStream(filePath, { encoding: "utf8" });
|
|
165
|
+
let pending = "";
|
|
166
|
+
try {
|
|
167
|
+
for await (const chunk of stream) {
|
|
168
|
+
pending += chunk;
|
|
169
|
+
let idx = pending.indexOf("\n");
|
|
170
|
+
while (idx !== -1) {
|
|
171
|
+
yield pending.slice(0, idx);
|
|
172
|
+
pending = pending.slice(idx + 1);
|
|
173
|
+
idx = pending.indexOf("\n");
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
yield pending;
|
|
177
|
+
} finally {
|
|
178
|
+
stream.destroy();
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
function repairLine(line, counters) {
|
|
182
|
+
if (line.trim() === "") return line;
|
|
183
|
+
const eol = line.endsWith("\r") ? "\r" : "";
|
|
184
|
+
const body = eol === "" ? line : line.slice(0, -1);
|
|
185
|
+
let entry;
|
|
186
|
+
try {
|
|
187
|
+
entry = JSON.parse(body);
|
|
188
|
+
} catch {
|
|
189
|
+
return line;
|
|
190
|
+
}
|
|
191
|
+
const content = entry.message?.content;
|
|
192
|
+
if (!Array.isArray(content)) return line;
|
|
193
|
+
const before = totalChanges(counters);
|
|
194
|
+
const scrubbed = content.map((block) => scrubBlock(block, counters));
|
|
195
|
+
if (totalChanges(counters) === before) return line;
|
|
196
|
+
return `${JSON.stringify({ ...entry, message: { ...entry.message, content: scrubbed } })}${eol}`;
|
|
197
|
+
}
|
|
198
|
+
async function scrubPoisonedTranscript(opts) {
|
|
199
|
+
const { configDir, sessionId, log } = opts;
|
|
200
|
+
const timeoutMs = fsDeadlineMs();
|
|
201
|
+
const result = {
|
|
202
|
+
filePath: null,
|
|
203
|
+
corrected: 0,
|
|
204
|
+
stubbed: 0,
|
|
205
|
+
cacheStripped: 0,
|
|
206
|
+
changed: false
|
|
207
|
+
};
|
|
208
|
+
const filePath = await locateTranscriptPath(configDir, sessionId, timeoutMs);
|
|
209
|
+
if (!filePath) {
|
|
210
|
+
log?.warn("scrub-transcript: no transcript found", { configDir, sessionId });
|
|
211
|
+
return result;
|
|
212
|
+
}
|
|
213
|
+
result.filePath = filePath;
|
|
214
|
+
const counters = { corrected: 0, stubbed: 0, cacheStripped: 0 };
|
|
215
|
+
try {
|
|
216
|
+
await withFsDeadline(
|
|
217
|
+
`scan transcript ${filePath}`,
|
|
218
|
+
async () => {
|
|
219
|
+
for await (const line of streamLines(filePath)) repairLine(line, counters);
|
|
220
|
+
},
|
|
221
|
+
timeoutMs
|
|
222
|
+
);
|
|
223
|
+
} catch (err) {
|
|
224
|
+
log?.warn("scrub-transcript: failed to read transcript", {
|
|
225
|
+
filePath,
|
|
226
|
+
error: err instanceof Error ? err.message : String(err)
|
|
227
|
+
});
|
|
228
|
+
return result;
|
|
229
|
+
}
|
|
230
|
+
result.corrected = counters.corrected;
|
|
231
|
+
result.stubbed = counters.stubbed;
|
|
232
|
+
result.cacheStripped = counters.cacheStripped;
|
|
233
|
+
if (totalChanges(counters) === 0) {
|
|
234
|
+
return result;
|
|
235
|
+
}
|
|
236
|
+
const tmpPath = `${filePath}.scrub-tmp`;
|
|
237
|
+
try {
|
|
238
|
+
await withFsDeadline(
|
|
239
|
+
`rewrite transcript ${filePath}`,
|
|
240
|
+
async () => {
|
|
241
|
+
const discard = { corrected: 0, stubbed: 0, cacheStripped: 0 };
|
|
242
|
+
await pipeline(
|
|
243
|
+
(async function* () {
|
|
244
|
+
let first = true;
|
|
245
|
+
for await (const line of streamLines(filePath)) {
|
|
246
|
+
yield first ? repairLine(line, discard) : `
|
|
247
|
+
${repairLine(line, discard)}`;
|
|
248
|
+
first = false;
|
|
249
|
+
}
|
|
250
|
+
})(),
|
|
251
|
+
createWriteStream(tmpPath, { encoding: "utf8" })
|
|
252
|
+
);
|
|
253
|
+
await rename(tmpPath, filePath);
|
|
254
|
+
},
|
|
255
|
+
timeoutMs
|
|
256
|
+
);
|
|
257
|
+
} catch (err) {
|
|
258
|
+
log?.warn("scrub-transcript: failed to rewrite transcript", {
|
|
259
|
+
filePath,
|
|
260
|
+
error: err instanceof Error ? err.message : String(err)
|
|
261
|
+
});
|
|
262
|
+
await tryWithFsDeadline(`unlink ${tmpPath}`, () => unlink(tmpPath), void 0, timeoutMs);
|
|
263
|
+
return result;
|
|
264
|
+
}
|
|
265
|
+
result.changed = true;
|
|
266
|
+
log?.info("scrub-transcript: repaired poisoned transcript", {
|
|
267
|
+
filePath,
|
|
268
|
+
corrected: result.corrected,
|
|
269
|
+
stubbed: result.stubbed,
|
|
270
|
+
cacheStripped: result.cacheStripped
|
|
271
|
+
});
|
|
272
|
+
return result;
|
|
273
|
+
}
|
|
274
|
+
var RESUME_PROBE_TIMEOUT_MS = 2e3;
|
|
275
|
+
function resolveClaudeConfigDir(env) {
|
|
276
|
+
return env?.CLAUDE_CONFIG_DIR || process.env.CLAUDE_CONFIG_DIR || join(homedir(), ".claude");
|
|
277
|
+
}
|
|
278
|
+
async function probeResumeTranscript(sessionId, opts) {
|
|
279
|
+
const configDir = resolveClaudeConfigDir(opts?.env);
|
|
280
|
+
const timeoutMs = opts?.timeoutMs ?? RESUME_PROBE_TIMEOUT_MS;
|
|
281
|
+
const locate = opts?.locate ?? locateTranscriptPath;
|
|
282
|
+
try {
|
|
283
|
+
const filePath = await withFsDeadline(
|
|
284
|
+
`resume-probe ${sessionId}`,
|
|
285
|
+
() => locate(configDir, sessionId),
|
|
286
|
+
timeoutMs
|
|
287
|
+
);
|
|
288
|
+
return filePath ? "transcript_found" : "jsonl_lost";
|
|
289
|
+
} catch {
|
|
290
|
+
return void 0;
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
export { CLOUD_SECRET_ENV_KEYS, SUPPORTED_CLOUDS, buildClaudeCloudEnv, probeResumeTranscript, resolveClaudeConfigDir, scrubPoisonedTranscript };
|
|
295
|
+
//# sourceMappingURL=chunk-46LE3GNY.js.map
|
|
296
|
+
//# sourceMappingURL=chunk-46LE3GNY.js.map
|