@skaile/workspaces 0.11.0 → 0.11.2

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.
Files changed (77) hide show
  1. package/CHANGELOG.md +43 -0
  2. package/dist/asset-manager/index.js +2 -2
  3. package/dist/asset-manager/scaffold.js +1 -1
  4. package/dist/base-assets/connectors/deploy.js +2 -2
  5. package/dist/base-assets/connectors/devserver.js +2 -2
  6. package/dist/base-assets/connectors/flow/adapter.js +2 -2
  7. package/dist/base-assets/connectors/flow/run-flow.js +3 -3
  8. package/dist/base-assets/connectors/flow.js +2 -2
  9. package/dist/base-assets/connectors/git.js +2 -2
  10. package/dist/base-assets/connectors/gmail.js +2 -2
  11. package/dist/base-assets/connectors/local.js +2 -2
  12. package/dist/base-assets/connectors/mattermost.js +2 -2
  13. package/dist/base-assets/connectors/memory.js +2 -2
  14. package/dist/base-assets/connectors/minio.js +2 -2
  15. package/dist/base-assets/connectors/postgres.js +2 -2
  16. package/dist/base-assets/connectors/redis.js +2 -2
  17. package/dist/base-assets/connectors/s3.js +2 -2
  18. package/dist/base-assets/connectors/sharepoint/driver.d.ts.map +1 -1
  19. package/dist/base-assets/connectors/sharepoint.js +2 -2
  20. package/dist/base-assets/connectors/sqlite.js +2 -2
  21. package/dist/base-assets/connectors/static-server.js +2 -2
  22. package/dist/base-assets/connectors/tunnel.js +2 -2
  23. package/dist/base-assets/connectors/webdav/driver.d.ts.map +1 -1
  24. package/dist/base-assets/connectors/webdav.js +2 -2
  25. package/dist/base-assets/connectors/xstate-store.js +2 -2
  26. package/dist/base-assets/connectors/xstate.js +2 -2
  27. package/dist/base-assets/connectors/yjs.js +2 -2
  28. package/dist/bridge/drivers/claude-sdk.js +31 -28
  29. package/dist/bridge/drivers/claude-sdk.js.map +1 -1
  30. package/dist/bridge/drivers/codex.js +1 -1
  31. package/dist/bridge/drivers/echo.js +1 -1
  32. package/dist/bridge/drivers/omp.js +1 -1
  33. package/dist/bridge/index.js +3 -3
  34. package/dist/bridge/src/drivers/claude-sdk.d.ts +33 -17
  35. package/dist/bridge/src/drivers/claude-sdk.d.ts.map +1 -1
  36. package/dist/bridge/src/error-classifier.d.ts.map +1 -1
  37. package/dist/{chunk-YOFKTALB.js → chunk-4ACWI5YT.js} +2 -2
  38. package/dist/{chunk-YOFKTALB.js.map → chunk-4ACWI5YT.js.map} +1 -1
  39. package/dist/{chunk-EBMFCF4P.js → chunk-6MB7CRME.js} +17 -6
  40. package/dist/chunk-6MB7CRME.js.map +1 -0
  41. package/dist/{chunk-ZLLUIIZR.js → chunk-DDVKNST3.js} +3 -3
  42. package/dist/{chunk-ZLLUIIZR.js.map → chunk-DDVKNST3.js.map} +1 -1
  43. package/dist/{chunk-EWP5HZBV.js → chunk-DQWREFRQ.js} +11 -2
  44. package/dist/chunk-DQWREFRQ.js.map +1 -0
  45. package/dist/{chunk-UHSC75L7.js → chunk-EAJKY27M.js} +9 -9
  46. package/dist/chunk-EAJKY27M.js.map +1 -0
  47. package/dist/{chunk-FEBLE7QX.js → chunk-EARKGKKB.js} +2 -2
  48. package/dist/{chunk-FEBLE7QX.js.map → chunk-EARKGKKB.js.map} +1 -1
  49. package/dist/{chunk-VMU2WEN7.js → chunk-S2OVTCAL.js} +4 -4
  50. package/dist/{chunk-VMU2WEN7.js.map → chunk-S2OVTCAL.js.map} +1 -1
  51. package/dist/{chunk-L6PKR6YY.js → chunk-UTKGPNLV.js} +7 -7
  52. package/dist/{chunk-L6PKR6YY.js.map → chunk-UTKGPNLV.js.map} +1 -1
  53. package/dist/{chunk-OQIBHB4F.js → chunk-YHXBQLXX.js} +2 -2
  54. package/dist/{chunk-OQIBHB4F.js.map → chunk-YHXBQLXX.js.map} +1 -1
  55. package/dist/{chunk-BTKNSMLK.js → chunk-Z5PO7ZVP.js} +2 -2
  56. package/dist/{chunk-BTKNSMLK.js.map → chunk-Z5PO7ZVP.js.map} +1 -1
  57. package/dist/cli/index.js +11 -11
  58. package/dist/connectors/index.js +2 -2
  59. package/dist/connectors/rclone.js +1 -1
  60. package/dist/connectors/src/fs-utils.d.ts +33 -0
  61. package/dist/connectors/src/fs-utils.d.ts.map +1 -0
  62. package/dist/connectors/src/index.d.ts +1 -0
  63. package/dist/connectors/src/index.d.ts.map +1 -1
  64. package/dist/connectors/src/rclone-process-manager.d.ts.map +1 -1
  65. package/dist/runner/index.js +7 -7
  66. package/dist/sdk/asset-manager.js +2 -2
  67. package/dist/sdk/bridge.js +3 -3
  68. package/dist/sdk/index.js +7 -7
  69. package/dist/sdk/runner.js +7 -7
  70. package/dist/{setup-QAOUBECX.js → setup-WZFCLQ2J.js} +5 -5
  71. package/dist/{setup-QAOUBECX.js.map → setup-WZFCLQ2J.js.map} +1 -1
  72. package/dist/tui/index.js +7 -7
  73. package/dist/workspace-plugin/index.js +1 -1
  74. package/package.json +1 -1
  75. package/dist/chunk-EBMFCF4P.js.map +0 -1
  76. package/dist/chunk-EWP5HZBV.js.map +0 -1
  77. package/dist/chunk-UHSC75L7.js.map +0 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,48 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.11.2
4
+
5
+ ### Patch Changes
6
+
7
+ - 4d91d69: fix(bridge): self-heal expired Claude OAuth credentials that surface as "Not logged in"
8
+
9
+ The claude-sdk driver's credential self-heal (`onAuthError`) failed to fire in two
10
+ cases, leaving sessions stuck on a misleading `Not logged in · Please run /login`
11
+ error after the OAuth access token expired:
12
+ - **Classification**: the bare `Not logged in · Please run /login` string the
13
+ Claude Code CLI emits (no JSON body) fell through to `category: "unknown"`, so it
14
+ was never promoted to `AuthError` and the self-heal never triggered. It is now
15
+ classified as `auth`.
16
+ - **Retry budget**: a stale-resume retry ("No conversation found with session ID")
17
+ consumed the single shared retry slot, so a subsequent auth failure on the
18
+ fresh-session retry could not reach the self-heal branch. Each recovery path
19
+ (stale-resume, poisoned-transcript, auth) now owns an independent one-shot budget.
20
+
21
+ Together these let the runner re-mint the credential and continue the turn instead
22
+ of dead-ending. Surfaced by a prod cloud session (2026-05-21).
23
+
24
+ ## 0.11.1
25
+
26
+ ### Patch Changes
27
+
28
+ - ae93713: `webdav` and `sharepoint` connectors now `chmod 0o770` on every directory
29
+ they `mkdir` (mount target, vfs cache, cache root) via a new local
30
+ `ensureDirMode()` helper. `RcloneProcessManager.spawn()` does the same on
31
+ the mountPoint and cacheDir it creates.
32
+
33
+ `mkdirSync(mode:)` is masked by the process umask — default 022 yields
34
+ mode 0750 and strips the group-write bit `fusermount3` requires on the
35
+ mountpoint and rclone needs on the vfs cache. Explicit `chmod` is
36
+ umask-immune. EPERM on chmod is swallowed: a foreign-uid pre-create is
37
+ recovered by the platform's agent container entrypoint (see
38
+ skaile-ai/platform#139), so the runner staying quiet here is intentional
39
+ defence in depth rather than a swallowed failure.
40
+
41
+ Fixes the production symptom where a Nextcloud-backed session failed
42
+ after a platform restart with `fusermount3: user has no write access to
43
+ mountpoint /skaile/.mounts/workspace` and
44
+ `mkdir /var/cache/skaile/.../vfs/skaile-workspace: permission denied`.
45
+
3
46
  ## 0.11.0
4
47
 
5
48
  ### Minor Changes
@@ -1,8 +1,8 @@
1
- export { AssetManager } from '../chunk-FEBLE7QX.js';
1
+ export { AssetManager } from '../chunk-EARKGKKB.js';
2
2
  export { createScaffold, deployAll, removeAsset } from '../chunk-M2NLRGIX.js';
3
3
  export { appendHistory, clearHistory, getRecentHistory, loadHistory } from '../chunk-KTBKW2FI.js';
4
4
  import '../chunk-UQ6LFBPZ.js';
5
- export { listTemplates, scaffoldWorkspace, setTemplatesDir } from '../chunk-OQIBHB4F.js';
5
+ export { listTemplates, scaffoldWorkspace, setTemplatesDir } from '../chunk-YHXBQLXX.js';
6
6
  import '../chunk-DIKFRNCS.js';
7
7
  import '../chunk-4RUVG5GX.js';
8
8
  import '../chunk-JKNWJ64A.js';
@@ -1,4 +1,4 @@
1
- export { applyBaseLayer, applyConnectorsLayer, applyContainerLayer, applyDriverTargetLayer, applyHooksLayer, applySkillsLayer, applyTemplateLayer, listTemplates, loadTemplate, resolveTemplatePath, scaffoldWorkspace, setTemplatesDir } from '../chunk-OQIBHB4F.js';
1
+ export { applyBaseLayer, applyConnectorsLayer, applyContainerLayer, applyDriverTargetLayer, applyHooksLayer, applySkillsLayer, applyTemplateLayer, listTemplates, loadTemplate, resolveTemplatePath, scaffoldWorkspace, setTemplatesDir } from '../chunk-YHXBQLXX.js';
2
2
  export { applyAgentsLayer } from '../chunk-DIKFRNCS.js';
3
3
  import '../chunk-4RUVG5GX.js';
4
4
  import '../chunk-JKNWJ64A.js';
@@ -1,6 +1,6 @@
1
- export { DeployConnector, createConnector20 as createConnector } from '../../chunk-UHSC75L7.js';
1
+ export { DeployConnector, createConnector20 as createConnector } from '../../chunk-EAJKY27M.js';
2
2
  import '../../chunk-W75ASXH4.js';
3
- import '../../chunk-EBMFCF4P.js';
3
+ import '../../chunk-6MB7CRME.js';
4
4
  import '../../chunk-GCRKAFH7.js';
5
5
  import '../../chunk-ICS76R4T.js';
6
6
  import '../../chunk-GZWJGNNN.js';
@@ -1,6 +1,6 @@
1
- export { DevServerConnector, createConnector17 as createConnector } from '../../chunk-UHSC75L7.js';
1
+ export { DevServerConnector, createConnector17 as createConnector } from '../../chunk-EAJKY27M.js';
2
2
  import '../../chunk-W75ASXH4.js';
3
- import '../../chunk-EBMFCF4P.js';
3
+ import '../../chunk-6MB7CRME.js';
4
4
  import '../../chunk-GCRKAFH7.js';
5
5
  import '../../chunk-ICS76R4T.js';
6
6
  import '../../chunk-GZWJGNNN.js';
@@ -1,6 +1,6 @@
1
- export { FlowAdapter, createConnector } from '../../../chunk-UHSC75L7.js';
1
+ export { FlowAdapter, createConnector } from '../../../chunk-EAJKY27M.js';
2
2
  import '../../../chunk-W75ASXH4.js';
3
- import '../../../chunk-EBMFCF4P.js';
3
+ import '../../../chunk-6MB7CRME.js';
4
4
  import '../../../chunk-GCRKAFH7.js';
5
5
  export { isBlocking } from '../../../chunk-ICS76R4T.js';
6
6
  import '../../../chunk-GZWJGNNN.js';
@@ -1,9 +1,9 @@
1
- export { resumeFlow, runFlow } from '../../../chunk-ZLLUIIZR.js';
1
+ export { resumeFlow, runFlow } from '../../../chunk-DDVKNST3.js';
2
2
  import '../../../chunk-GCJXPUHG.js';
3
3
  import '../../../chunk-IPUYL6TD.js';
4
- import '../../../chunk-UHSC75L7.js';
4
+ import '../../../chunk-EAJKY27M.js';
5
5
  import '../../../chunk-W75ASXH4.js';
6
- import '../../../chunk-EBMFCF4P.js';
6
+ import '../../../chunk-6MB7CRME.js';
7
7
  import '../../../chunk-GCRKAFH7.js';
8
8
  import '../../../chunk-ICS76R4T.js';
9
9
  import '../../../chunk-GZWJGNNN.js';
@@ -1,6 +1,6 @@
1
- export { FlowAdapter, createConnector } from '../../chunk-UHSC75L7.js';
1
+ export { FlowAdapter, createConnector } from '../../chunk-EAJKY27M.js';
2
2
  import '../../chunk-W75ASXH4.js';
3
- import '../../chunk-EBMFCF4P.js';
3
+ import '../../chunk-6MB7CRME.js';
4
4
  import '../../chunk-GCRKAFH7.js';
5
5
  import '../../chunk-ICS76R4T.js';
6
6
  import '../../chunk-GZWJGNNN.js';
@@ -1,6 +1,6 @@
1
- export { GitConnector, createConnector2 as createConnector } from '../../chunk-UHSC75L7.js';
1
+ export { GitConnector, createConnector2 as createConnector } from '../../chunk-EAJKY27M.js';
2
2
  import '../../chunk-W75ASXH4.js';
3
- import '../../chunk-EBMFCF4P.js';
3
+ import '../../chunk-6MB7CRME.js';
4
4
  import '../../chunk-GCRKAFH7.js';
5
5
  import '../../chunk-ICS76R4T.js';
6
6
  import '../../chunk-GZWJGNNN.js';
@@ -1,6 +1,6 @@
1
- export { GmailConnector, createConnector15 as createConnector } from '../../chunk-UHSC75L7.js';
1
+ export { GmailConnector, createConnector15 as createConnector } from '../../chunk-EAJKY27M.js';
2
2
  import '../../chunk-W75ASXH4.js';
3
- import '../../chunk-EBMFCF4P.js';
3
+ import '../../chunk-6MB7CRME.js';
4
4
  import '../../chunk-GCRKAFH7.js';
5
5
  import '../../chunk-ICS76R4T.js';
6
6
  import '../../chunk-GZWJGNNN.js';
@@ -1,6 +1,6 @@
1
- export { LocalConnector, createConnector3 as createConnector } from '../../chunk-UHSC75L7.js';
1
+ export { LocalConnector, createConnector3 as createConnector } from '../../chunk-EAJKY27M.js';
2
2
  import '../../chunk-W75ASXH4.js';
3
- import '../../chunk-EBMFCF4P.js';
3
+ import '../../chunk-6MB7CRME.js';
4
4
  import '../../chunk-GCRKAFH7.js';
5
5
  import '../../chunk-ICS76R4T.js';
6
6
  import '../../chunk-GZWJGNNN.js';
@@ -1,6 +1,6 @@
1
- export { MattermostConnector, createConnector16 as createConnector } from '../../chunk-UHSC75L7.js';
1
+ export { MattermostConnector, createConnector16 as createConnector } from '../../chunk-EAJKY27M.js';
2
2
  import '../../chunk-W75ASXH4.js';
3
- import '../../chunk-EBMFCF4P.js';
3
+ import '../../chunk-6MB7CRME.js';
4
4
  import '../../chunk-GCRKAFH7.js';
5
5
  import '../../chunk-ICS76R4T.js';
6
6
  import '../../chunk-GZWJGNNN.js';
@@ -1,6 +1,6 @@
1
- export { MemoryConnector, createConnector7 as createConnector } from '../../chunk-UHSC75L7.js';
1
+ export { MemoryConnector, createConnector7 as createConnector } from '../../chunk-EAJKY27M.js';
2
2
  import '../../chunk-W75ASXH4.js';
3
- import '../../chunk-EBMFCF4P.js';
3
+ import '../../chunk-6MB7CRME.js';
4
4
  import '../../chunk-GCRKAFH7.js';
5
5
  import '../../chunk-ICS76R4T.js';
6
6
  import '../../chunk-GZWJGNNN.js';
@@ -1,6 +1,6 @@
1
- export { MinIOConnector, createConnector11 as createConnector } from '../../chunk-UHSC75L7.js';
1
+ export { MinIOConnector, createConnector11 as createConnector } from '../../chunk-EAJKY27M.js';
2
2
  import '../../chunk-W75ASXH4.js';
3
- import '../../chunk-EBMFCF4P.js';
3
+ import '../../chunk-6MB7CRME.js';
4
4
  import '../../chunk-GCRKAFH7.js';
5
5
  import '../../chunk-ICS76R4T.js';
6
6
  import '../../chunk-GZWJGNNN.js';
@@ -1,6 +1,6 @@
1
- export { PostgresConnector, createConnector8 as createConnector } from '../../chunk-UHSC75L7.js';
1
+ export { PostgresConnector, createConnector8 as createConnector } from '../../chunk-EAJKY27M.js';
2
2
  import '../../chunk-W75ASXH4.js';
3
- import '../../chunk-EBMFCF4P.js';
3
+ import '../../chunk-6MB7CRME.js';
4
4
  import '../../chunk-GCRKAFH7.js';
5
5
  import '../../chunk-ICS76R4T.js';
6
6
  import '../../chunk-GZWJGNNN.js';
@@ -1,6 +1,6 @@
1
- export { RedisConnector, createConnector9 as createConnector } from '../../chunk-UHSC75L7.js';
1
+ export { RedisConnector, createConnector9 as createConnector } from '../../chunk-EAJKY27M.js';
2
2
  import '../../chunk-W75ASXH4.js';
3
- import '../../chunk-EBMFCF4P.js';
3
+ import '../../chunk-6MB7CRME.js';
4
4
  import '../../chunk-GCRKAFH7.js';
5
5
  import '../../chunk-ICS76R4T.js';
6
6
  import '../../chunk-GZWJGNNN.js';
@@ -1,6 +1,6 @@
1
- export { S3Connector, createConnector4 as createConnector } from '../../chunk-UHSC75L7.js';
1
+ export { S3Connector, createConnector4 as createConnector } from '../../chunk-EAJKY27M.js';
2
2
  import '../../chunk-W75ASXH4.js';
3
- import '../../chunk-EBMFCF4P.js';
3
+ import '../../chunk-6MB7CRME.js';
4
4
  import '../../chunk-GCRKAFH7.js';
5
5
  import '../../chunk-ICS76R4T.js';
6
6
  import '../../chunk-GZWJGNNN.js';
@@ -1 +1 @@
1
- {"version":3,"file":"driver.d.ts","sourceRoot":"","sources":["../../../../base-assets/connectors/sharepoint/driver.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EACV,cAAc,EACd,oBAAoB,EACpB,eAAe,EACf,cAAc,EAIf,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,iBAAiB,EAIlB,MAAM,+BAA+B,CAAC;AAyEvC;;;;;;GAMG;AACH,qBAAa,mBAAoB,SAAQ,iBAAiB;IACxD,QAAQ,CAAC,IAAI,gBAAgB;IAE7B,OAAO,CAAC,MAAM,CAA8B;IAE5C,QAAQ,CAAC,UAAU,EAAE,cAAc,CAIjC;IAEI,OAAO,CAAC,WAAW,EAAE,oBAAoB,EAAE,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC;IAkGzF,UAAU,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;YAM1C,KAAK;IAwBJ,WAAW,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAOjE,cAAc,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;CAMpF;AAED;;;;GAIG;AACH,wBAAgB,eAAe,IAAI,mBAAmB,CAErD"}
1
+ {"version":3,"file":"driver.d.ts","sourceRoot":"","sources":["../../../../base-assets/connectors/sharepoint/driver.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EACV,cAAc,EACd,oBAAoB,EACpB,eAAe,EACf,cAAc,EAIf,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,iBAAiB,EAKlB,MAAM,+BAA+B,CAAC;AAyEvC;;;;;;GAMG;AACH,qBAAa,mBAAoB,SAAQ,iBAAiB;IACxD,QAAQ,CAAC,IAAI,gBAAgB;IAE7B,OAAO,CAAC,MAAM,CAA8B;IAE5C,QAAQ,CAAC,UAAU,EAAE,cAAc,CAIjC;IAEI,OAAO,CAAC,WAAW,EAAE,oBAAoB,EAAE,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC;IAoGzF,UAAU,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;YAM1C,KAAK;IAwBJ,WAAW,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAOjE,cAAc,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;CAMpF;AAED;;;;GAIG;AACH,wBAAgB,eAAe,IAAI,mBAAmB,CAErD"}
@@ -1,6 +1,6 @@
1
- export { SharePointConnector, createConnector6 as createConnector } from '../../chunk-UHSC75L7.js';
1
+ export { SharePointConnector, createConnector6 as createConnector } from '../../chunk-EAJKY27M.js';
2
2
  import '../../chunk-W75ASXH4.js';
3
- import '../../chunk-EBMFCF4P.js';
3
+ import '../../chunk-6MB7CRME.js';
4
4
  import '../../chunk-GCRKAFH7.js';
5
5
  import '../../chunk-ICS76R4T.js';
6
6
  import '../../chunk-GZWJGNNN.js';
@@ -1,6 +1,6 @@
1
- export { SQLiteConnector, createConnector10 as createConnector } from '../../chunk-UHSC75L7.js';
1
+ export { SQLiteConnector, createConnector10 as createConnector } from '../../chunk-EAJKY27M.js';
2
2
  import '../../chunk-W75ASXH4.js';
3
- import '../../chunk-EBMFCF4P.js';
3
+ import '../../chunk-6MB7CRME.js';
4
4
  import '../../chunk-GCRKAFH7.js';
5
5
  import '../../chunk-ICS76R4T.js';
6
6
  import '../../chunk-GZWJGNNN.js';
@@ -1,6 +1,6 @@
1
- export { StaticServerConnector, createConnector18 as createConnector } from '../../chunk-UHSC75L7.js';
1
+ export { StaticServerConnector, createConnector18 as createConnector } from '../../chunk-EAJKY27M.js';
2
2
  import '../../chunk-W75ASXH4.js';
3
- import '../../chunk-EBMFCF4P.js';
3
+ import '../../chunk-6MB7CRME.js';
4
4
  import '../../chunk-GCRKAFH7.js';
5
5
  import '../../chunk-ICS76R4T.js';
6
6
  import '../../chunk-GZWJGNNN.js';
@@ -1,6 +1,6 @@
1
- export { TunnelConnector, createConnector19 as createConnector } from '../../chunk-UHSC75L7.js';
1
+ export { TunnelConnector, createConnector19 as createConnector } from '../../chunk-EAJKY27M.js';
2
2
  import '../../chunk-W75ASXH4.js';
3
- import '../../chunk-EBMFCF4P.js';
3
+ import '../../chunk-6MB7CRME.js';
4
4
  import '../../chunk-GCRKAFH7.js';
5
5
  import '../../chunk-ICS76R4T.js';
6
6
  import '../../chunk-GZWJGNNN.js';
@@ -1 +1 @@
1
- {"version":3,"file":"driver.d.ts","sourceRoot":"","sources":["../../../../base-assets/connectors/webdav/driver.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAMH,OAAO,KAAK,EACV,cAAc,EACd,oBAAoB,EACpB,eAAe,EACf,cAAc,EAIf,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,iBAAiB,EAKlB,MAAM,+BAA+B,CAAC;AA6EvC;;;;;;GAMG;AACH,qBAAa,eAAgB,SAAQ,iBAAiB;IACpD,QAAQ,CAAC,IAAI,YAAY;IAEzB,OAAO,CAAC,MAAM,CAA8B;IAE5C,QAAQ,CAAC,UAAU,EAAE,cAAc,CAIjC;IAEI,OAAO,CAAC,WAAW,EAAE,oBAAoB,EAAE,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC;IAkGzF,UAAU,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;YAM1C,KAAK;IAwBJ,WAAW,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAOjE,cAAc,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;CAMpF;AAED;;;;GAIG;AACH,wBAAgB,eAAe,IAAI,eAAe,CAEjD"}
1
+ {"version":3,"file":"driver.d.ts","sourceRoot":"","sources":["../../../../base-assets/connectors/webdav/driver.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,KAAK,EACV,cAAc,EACd,oBAAoB,EACpB,eAAe,EACf,cAAc,EAIf,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,iBAAiB,EAMlB,MAAM,+BAA+B,CAAC;AA6EvC;;;;;;GAMG;AACH,qBAAa,eAAgB,SAAQ,iBAAiB;IACpD,QAAQ,CAAC,IAAI,YAAY;IAEzB,OAAO,CAAC,MAAM,CAA8B;IAE5C,QAAQ,CAAC,UAAU,EAAE,cAAc,CAIjC;IAEI,OAAO,CAAC,WAAW,EAAE,oBAAoB,EAAE,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC;IAoGzF,UAAU,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;YAM1C,KAAK;IAwBJ,WAAW,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAOjE,cAAc,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;CAMpF;AAED;;;;GAIG;AACH,wBAAgB,eAAe,IAAI,eAAe,CAEjD"}
@@ -1,6 +1,6 @@
1
- export { WebDAVConnector, createConnector5 as createConnector } from '../../chunk-UHSC75L7.js';
1
+ export { WebDAVConnector, createConnector5 as createConnector } from '../../chunk-EAJKY27M.js';
2
2
  import '../../chunk-W75ASXH4.js';
3
- import '../../chunk-EBMFCF4P.js';
3
+ import '../../chunk-6MB7CRME.js';
4
4
  import '../../chunk-GCRKAFH7.js';
5
5
  import '../../chunk-ICS76R4T.js';
6
6
  import '../../chunk-GZWJGNNN.js';
@@ -1,6 +1,6 @@
1
- export { XStateStoreConnector, createConnector13 as createConnector } from '../../chunk-UHSC75L7.js';
1
+ export { XStateStoreConnector, createConnector13 as createConnector } from '../../chunk-EAJKY27M.js';
2
2
  import '../../chunk-W75ASXH4.js';
3
- import '../../chunk-EBMFCF4P.js';
3
+ import '../../chunk-6MB7CRME.js';
4
4
  import '../../chunk-GCRKAFH7.js';
5
5
  import '../../chunk-ICS76R4T.js';
6
6
  import '../../chunk-GZWJGNNN.js';
@@ -1,6 +1,6 @@
1
- export { XStateConnector, createConnector12 as createConnector } from '../../chunk-UHSC75L7.js';
1
+ export { XStateConnector, createConnector12 as createConnector } from '../../chunk-EAJKY27M.js';
2
2
  import '../../chunk-W75ASXH4.js';
3
- import '../../chunk-EBMFCF4P.js';
3
+ import '../../chunk-6MB7CRME.js';
4
4
  import '../../chunk-GCRKAFH7.js';
5
5
  import '../../chunk-ICS76R4T.js';
6
6
  import '../../chunk-GZWJGNNN.js';
@@ -1,6 +1,6 @@
1
- export { YjsConnector, createConnector14 as createConnector } from '../../chunk-UHSC75L7.js';
1
+ export { YjsConnector, createConnector14 as createConnector } from '../../chunk-EAJKY27M.js';
2
2
  import '../../chunk-W75ASXH4.js';
3
- import '../../chunk-EBMFCF4P.js';
3
+ import '../../chunk-6MB7CRME.js';
4
4
  import '../../chunk-GCRKAFH7.js';
5
5
  import '../../chunk-ICS76R4T.js';
6
6
  import '../../chunk-GZWJGNNN.js';
@@ -1,7 +1,7 @@
1
- import { classifyClaudeSdkError, AuthError } from '../../chunk-EWP5HZBV.js';
1
+ import { AuthError, classifyClaudeSdkError } from '../../chunk-DQWREFRQ.js';
2
2
  import { fetchProviderModels } from '../../chunk-KOVLSBXK.js';
3
3
  import { dispatchCapability } from '../../chunk-RRVQAE5D.js';
4
- import { registerDriver, DRIVER_CATALOG, AgentDriver, getBridgeLogger } from '../../chunk-YOFKTALB.js';
4
+ import { registerDriver, DRIVER_CATALOG, AgentDriver, getBridgeLogger } from '../../chunk-4ACWI5YT.js';
5
5
  import '../../chunk-24UIWON4.js';
6
6
  import '../../chunk-NSBPE2FW.js';
7
7
  import { spawnSync } from 'child_process';
@@ -215,6 +215,9 @@ if (typeof globalThis.require === "undefined") {
215
215
  } catch {
216
216
  }
217
217
  }
218
+ function freshRetryBudget() {
219
+ return { staleResume: false, poison: false, auth: false };
220
+ }
218
221
  var ClaudeSdkDriver = class extends AgentDriver {
219
222
  driverInfo = {
220
223
  id: "claude-sdk",
@@ -238,16 +241,15 @@ var ClaudeSdkDriver = class extends AgentDriver {
238
241
  /** Guards against duplicate agent_end emissions per turn. */
239
242
  turnCompleted = false;
240
243
  /**
241
- * Mirror of the `_retryCount` argument of the in-flight {@link prompt} call.
242
- * Read by {@link failTurn} to decide whether to defer the `agent-event:
243
- * error` emission for a self-healable auth error. `0` means "first
244
- * attempt"; `prompt()` increments to `1` before recursing on its
245
- * `onAuthError` self-heal branch.
244
+ * Mirror of the in-flight {@link prompt} call's auth retry budget: `false`
245
+ * while the `onAuthError` self-heal is still available, `true` once it has
246
+ * been spent. Read by {@link failTurn} to decide whether to defer the
247
+ * `agent-event: error` emission for a self-healable auth error.
246
248
  *
247
249
  * Set unconditionally at the top of every {@link prompt} invocation; never
248
250
  * reset elsewhere — the next call's set is the only legitimate transition.
249
251
  */
250
- currentRetryCount = 0;
252
+ authSelfHealUsed = false;
251
253
  /** Tracks whether a session has been started (for continue: true). */
252
254
  hasSession = false;
253
255
  /** Session ID from the SDK — used for streamInput messages. */
@@ -323,11 +325,12 @@ var ClaudeSdkDriver = class extends AgentDriver {
323
325
  * "No conversation found with session ID …" — a recoverable stale-resume error that
324
326
  * occurs after a container crash that prevented the SDK from flushing its session file.
325
327
  */
326
- async prompt(message, _retryCount = 0) {
327
- this.currentRetryCount = _retryCount;
328
+ async prompt(message, _budget = freshRetryBudget()) {
329
+ this.authSelfHealUsed = _budget.auth;
328
330
  if (!this.sdk) await this.start();
329
331
  let retrying = false;
330
- if (_retryCount === 0) this._lastTokens = null;
332
+ const isFirstAttempt = !_budget.staleResume && !_budget.poison && !_budget.auth;
333
+ if (isFirstAttempt) this._lastTokens = null;
331
334
  this.running = true;
332
335
  this.prevText = "";
333
336
  this.turnCompleted = false;
@@ -352,7 +355,7 @@ var ClaudeSdkDriver = class extends AgentDriver {
352
355
  await turnPromise;
353
356
  } catch (err) {
354
357
  const errMsg = err instanceof Error ? err.message : String(err);
355
- const isStaleResume = _retryCount === 0 && /No conversation found with session ID/i.test(errMsg);
358
+ const isStaleResume = !_budget.staleResume && /No conversation found with session ID/i.test(errMsg);
356
359
  if (isStaleResume) {
357
360
  const staleId = this.config.resumeSessionId || this.sessionId || "unknown";
358
361
  this.log.warn("stale Claude Code session, retrying with a fresh session", { staleId });
@@ -374,9 +377,9 @@ var ClaudeSdkDriver = class extends AgentDriver {
374
377
  this.turnReject = null;
375
378
  this.running = false;
376
379
  retrying = true;
377
- return this.prompt(message, _retryCount + 1);
380
+ return this.prompt(message, { ..._budget, staleResume: true });
378
381
  }
379
- const isPoisonedHistory = _retryCount === 0 && /invalid_request_error/i.test(errMsg) && /media[_ ]?type|could not process image|image exceeds|cache_control/i.test(errMsg);
382
+ const isPoisonedHistory = !_budget.poison && /invalid_request_error/i.test(errMsg) && /media[_ ]?type|could not process image|image exceeds|cache_control/i.test(errMsg);
380
383
  const poisonSessionId = this.config.resumeSessionId || this.sessionId;
381
384
  if (isPoisonedHistory && poisonSessionId) {
382
385
  const scrub = scrubPoisonedTranscript({
@@ -416,14 +419,14 @@ var ClaudeSdkDriver = class extends AgentDriver {
416
419
  this.turnReject = null;
417
420
  this.running = false;
418
421
  retrying = true;
419
- return this.prompt(message, _retryCount + 1);
422
+ return this.prompt(message, { ..._budget, poison: true });
420
423
  }
421
424
  this.log.warn("poisoned-transcript error but scrub found nothing to repair", {
422
425
  sessionId: poisonSessionId,
423
426
  filePath: scrub.filePath
424
427
  });
425
428
  }
426
- const isAuthError = err instanceof AuthError && _retryCount === 0;
429
+ const isAuthError = err instanceof AuthError && !_budget.auth;
427
430
  if (isAuthError && this.config.onAuthError) {
428
431
  this.log.info("auth error caught; invoking onAuthError refresh callback");
429
432
  let refreshed = false;
@@ -449,7 +452,7 @@ var ClaudeSdkDriver = class extends AgentDriver {
449
452
  this.turnReject = null;
450
453
  this.running = false;
451
454
  retrying = true;
452
- return this.prompt(message, _retryCount + 1);
455
+ return this.prompt(message, { ..._budget, auth: true });
453
456
  }
454
457
  try {
455
458
  this.emit("agent-event", {
@@ -785,16 +788,16 @@ var ClaudeSdkDriver = class extends AgentDriver {
785
788
  * caller transitions even if the listener chain misbehaves; the emit is
786
789
  * wrapped in try/catch so a listener failure cannot leak out.
787
790
  *
788
- * Self-heal deferral: when the failure is an {@link AuthError} on the
789
- * first attempt (`currentRetryCount === 0`) AND the caller wired an
790
- * `onAuthError` callback, the downstream `agent-event: error` emission
791
- * is deferred. The rejected turn promise still travels to {@link prompt}'s
792
- * catch block where the self-heal runs; if the retry succeeds the user
793
- * never sees a 401, if the retry fails the second `failTurn` call (now
794
- * with `currentRetryCount === 1`) emits the error normally. This stops
795
- * the historical "401 flashes in the UI even though self-heal worked"
796
- * misbehaviour where the bridge emitted the error event before the
797
- * retry decision was known.
791
+ * Self-heal deferral: when the failure is an {@link AuthError} and the auth
792
+ * self-heal budget is still available (`!authSelfHealUsed`) AND the caller
793
+ * wired an `onAuthError` callback, the downstream `agent-event: error`
794
+ * emission is deferred. The rejected turn promise still travels to
795
+ * {@link prompt}'s catch block where the self-heal runs; if the retry
796
+ * succeeds the user never sees a 401, if the retry fails the second
797
+ * `failTurn` call (now with `authSelfHealUsed === true`) emits the error
798
+ * normally. This stops the historical "401 flashes in the UI even though
799
+ * self-heal worked" misbehaviour where the bridge emitted the error event
800
+ * before the retry decision was known.
798
801
  *
799
802
  * Spec: `_devlog/specs/2026-05-07-unified-credential-mediation.md`
800
803
  * § "Runner-side handling on 401" (the AI 401 mediation path that
@@ -807,7 +810,7 @@ var ClaudeSdkDriver = class extends AgentDriver {
807
810
  this.turnReject = null;
808
811
  }
809
812
  this.turnCompleted = true;
810
- const willSelfHeal = err instanceof AuthError && this.currentRetryCount === 0 && this.config.onAuthError != null;
813
+ const willSelfHeal = err instanceof AuthError && !this.authSelfHealUsed && this.config.onAuthError != null;
811
814
  if (willSelfHeal) {
812
815
  this.log.info("deferring auth-error event; self-heal will attempt refresh");
813
816
  return;