@skaile/workspaces 0.10.1 → 0.11.1

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 (80) hide show
  1. package/CHANGELOG.md +63 -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 +42 -1
  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 +2 -2
  34. package/dist/bridge/src/drivers/claude-sdk.d.ts +22 -0
  35. package/dist/bridge/src/drivers/claude-sdk.d.ts.map +1 -1
  36. package/dist/{chunk-OVM36NYF.js → chunk-34333Z5H.js} +199 -85
  37. package/dist/chunk-34333Z5H.js.map +1 -0
  38. package/dist/{chunk-EBMFCF4P.js → chunk-6MB7CRME.js} +17 -6
  39. package/dist/chunk-6MB7CRME.js.map +1 -0
  40. package/dist/{chunk-UHSC75L7.js → chunk-EAJKY27M.js} +9 -9
  41. package/dist/chunk-EAJKY27M.js.map +1 -0
  42. package/dist/{chunk-FEBLE7QX.js → chunk-EARKGKKB.js} +2 -2
  43. package/dist/{chunk-FEBLE7QX.js.map → chunk-EARKGKKB.js.map} +1 -1
  44. package/dist/{chunk-OSJH4SPO.js → chunk-VMU2WEN7.js} +3 -3
  45. package/dist/{chunk-OSJH4SPO.js.map → chunk-VMU2WEN7.js.map} +1 -1
  46. package/dist/{chunk-IFRUVHOQ.js → chunk-XYEFV7XN.js} +3 -3
  47. package/dist/{chunk-IFRUVHOQ.js.map → chunk-XYEFV7XN.js.map} +1 -1
  48. package/dist/{chunk-OQIBHB4F.js → chunk-YHXBQLXX.js} +2 -2
  49. package/dist/{chunk-OQIBHB4F.js.map → chunk-YHXBQLXX.js.map} +1 -1
  50. package/dist/{chunk-S7RACIZI.js → chunk-YOFKTALB.js} +2 -2
  51. package/dist/{chunk-S7RACIZI.js.map → chunk-YOFKTALB.js.map} +1 -1
  52. package/dist/{chunk-BTKNSMLK.js → chunk-Z5PO7ZVP.js} +2 -2
  53. package/dist/{chunk-BTKNSMLK.js.map → chunk-Z5PO7ZVP.js.map} +1 -1
  54. package/dist/cli/index.js +10 -10
  55. package/dist/connectors/index.js +2 -2
  56. package/dist/connectors/rclone.js +1 -1
  57. package/dist/connectors/src/fs-utils.d.ts +33 -0
  58. package/dist/connectors/src/fs-utils.d.ts.map +1 -0
  59. package/dist/connectors/src/index.d.ts +1 -0
  60. package/dist/connectors/src/index.d.ts.map +1 -1
  61. package/dist/connectors/src/rclone-process-manager.d.ts.map +1 -1
  62. package/dist/runner/index.js +6 -6
  63. package/dist/runner/src/ai-credential-refresh.d.ts +74 -0
  64. package/dist/runner/src/ai-credential-refresh.d.ts.map +1 -0
  65. package/dist/runner/src/serve-credentials.d.ts +21 -0
  66. package/dist/runner/src/serve-credentials.d.ts.map +1 -1
  67. package/dist/runner/src/serve.d.ts +2 -2
  68. package/dist/runner/src/serve.d.ts.map +1 -1
  69. package/dist/sdk/asset-manager.js +2 -2
  70. package/dist/sdk/bridge.js +2 -2
  71. package/dist/sdk/index.js +6 -6
  72. package/dist/sdk/runner.js +6 -6
  73. package/dist/{setup-QIEPIYH2.js → setup-QAOUBECX.js} +4 -4
  74. package/dist/{setup-QIEPIYH2.js.map → setup-QAOUBECX.js.map} +1 -1
  75. package/dist/tui/index.js +6 -6
  76. package/dist/workspace-plugin/index.js +1 -1
  77. package/package.json +1 -1
  78. package/dist/chunk-EBMFCF4P.js.map +0 -1
  79. package/dist/chunk-OVM36NYF.js.map +0 -1
  80. package/dist/chunk-UHSC75L7.js.map +0 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,68 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.11.1
4
+
5
+ ### Patch Changes
6
+
7
+ - ae93713: `webdav` and `sharepoint` connectors now `chmod 0o770` on every directory
8
+ they `mkdir` (mount target, vfs cache, cache root) via a new local
9
+ `ensureDirMode()` helper. `RcloneProcessManager.spawn()` does the same on
10
+ the mountPoint and cacheDir it creates.
11
+
12
+ `mkdirSync(mode:)` is masked by the process umask — default 022 yields
13
+ mode 0750 and strips the group-write bit `fusermount3` requires on the
14
+ mountpoint and rclone needs on the vfs cache. Explicit `chmod` is
15
+ umask-immune. EPERM on chmod is swallowed: a foreign-uid pre-create is
16
+ recovered by the platform's agent container entrypoint (see
17
+ skaile-ai/platform#139), so the runner staying quiet here is intentional
18
+ defence in depth rather than a swallowed failure.
19
+
20
+ Fixes the production symptom where a Nextcloud-backed session failed
21
+ after a platform restart with `fusermount3: user has no write access to
22
+ mountpoint /skaile/.mounts/workspace` and
23
+ `mkdir /var/cache/skaile/.../vfs/skaile-workspace: permission denied`.
24
+
25
+ ## 0.11.0
26
+
27
+ ### Minor Changes
28
+
29
+ - c0f3b15: Two-part hardening of the AI-credential 401 path:
30
+
31
+ **Bridge: defer the auth-error event when self-heal is pending.** The
32
+ `claude-sdk` driver used to emit a `{ type: "error" }` agent-event from
33
+ `failTurn()` _before_ its `onAuthError` self-heal callback decided
34
+ whether the credential could be refreshed. The runner forwarded every
35
+ such event to the platform, so users saw a flash of `Failed to
36
+ authenticate. API Error: 401` even on every successful self-heal.
37
+ `failTurn()` now suppresses the downstream emission when the failure
38
+ is an `AuthError` on the first attempt AND an `onAuthError` callback is
39
+ configured; the event is emitted only if the self-heal callback returns
40
+ failure (or throws), or if the retry's own `failTurn` runs. Every auth
41
+ failure still produces exactly one downstream `error` event — none on
42
+ silent recovery, one on terminal failure.
43
+
44
+ **Runner: proactive AI-credential refresh.** New
45
+ `createAiCredentialRefreshScheduler` factory in
46
+ `runner/src/ai-credential-refresh.ts`. After the initial Claude Code
47
+ credentials blob lands at `session_init`, the runner parses
48
+ `claudeAiOauth.expiresAt`, schedules a single `setTimeout` to fire 5
49
+ minutes before expiry, and on fire calls
50
+ `host.refresh_credential { reason: 'refresh' }` via the existing
51
+ mediator path. Successful mints (proactive or reactive retry-401) chain
52
+ the next fire. Static tokens (`expiresAt: null`) and standalone CLI
53
+ sessions short-circuit to no-op. The reactive retry-401 path stays as
54
+ the safety net. Cancelled in `cleanup()` so SIGTERM / hibernate does
55
+ not leak the timer.
56
+
57
+ The new helper `extractClaudeAiOauthExpiresAt(json)` is exported from
58
+ the runner for callers that need to inspect the credentials blob
59
+ without persisting it.
60
+
61
+ Pair with the platform-side enablement of `SKAILE_AIP_AUTO_REFRESH` to
62
+ also pre-warm the platform's credential cache every 15 minutes; the
63
+ runner's proactive timer is the primary defence against in-container
64
+ 401s and is independent of that flag.
65
+
3
66
  ## 0.10.1
4
67
 
5
68
  ### Patch 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-IFRUVHOQ.js';
1
+ export { resumeFlow, runFlow } from '../../../chunk-XYEFV7XN.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
1
  import { classifyClaudeSdkError, AuthError } from '../../chunk-EWP5HZBV.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-S7RACIZI.js';
4
+ import { registerDriver, DRIVER_CATALOG, AgentDriver, getBridgeLogger } from '../../chunk-YOFKTALB.js';
5
5
  import '../../chunk-24UIWON4.js';
6
6
  import '../../chunk-NSBPE2FW.js';
7
7
  import { spawnSync } from 'child_process';
@@ -237,6 +237,17 @@ var ClaudeSdkDriver = class extends AgentDriver {
237
237
  turnReject = null;
238
238
  /** Guards against duplicate agent_end emissions per turn. */
239
239
  turnCompleted = false;
240
+ /**
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.
246
+ *
247
+ * Set unconditionally at the top of every {@link prompt} invocation; never
248
+ * reset elsewhere — the next call's set is the only legitimate transition.
249
+ */
250
+ currentRetryCount = 0;
240
251
  /** Tracks whether a session has been started (for continue: true). */
241
252
  hasSession = false;
242
253
  /** Session ID from the SDK — used for streamInput messages. */
@@ -313,6 +324,7 @@ var ClaudeSdkDriver = class extends AgentDriver {
313
324
  * occurs after a container crash that prevented the SDK from flushing its session file.
314
325
  */
315
326
  async prompt(message, _retryCount = 0) {
327
+ this.currentRetryCount = _retryCount;
316
328
  if (!this.sdk) await this.start();
317
329
  let retrying = false;
318
330
  if (_retryCount === 0) this._lastTokens = null;
@@ -439,6 +451,18 @@ var ClaudeSdkDriver = class extends AgentDriver {
439
451
  retrying = true;
440
452
  return this.prompt(message, _retryCount + 1);
441
453
  }
454
+ try {
455
+ this.emit("agent-event", {
456
+ type: "error",
457
+ error: err.message,
458
+ detail: err.detail
459
+ });
460
+ } catch (emitErr) {
461
+ this.log.warn(
462
+ "agent-event listener threw during deferred auth-error surfacing; suppressing",
463
+ { error: emitErr instanceof Error ? emitErr.message : String(emitErr) }
464
+ );
465
+ }
442
466
  }
443
467
  throw err;
444
468
  } finally {
@@ -761,6 +785,17 @@ var ClaudeSdkDriver = class extends AgentDriver {
761
785
  * caller transitions even if the listener chain misbehaves; the emit is
762
786
  * wrapped in try/catch so a listener failure cannot leak out.
763
787
  *
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.
798
+ *
764
799
  * Spec: `_devlog/specs/2026-05-07-unified-credential-mediation.md`
765
800
  * § "Runner-side handling on 401" (the AI 401 mediation path that
766
801
  * exposed this hang).
@@ -771,6 +806,12 @@ var ClaudeSdkDriver = class extends AgentDriver {
771
806
  this.turnResolve = null;
772
807
  this.turnReject = null;
773
808
  }
809
+ this.turnCompleted = true;
810
+ const willSelfHeal = err instanceof AuthError && this.currentRetryCount === 0 && this.config.onAuthError != null;
811
+ if (willSelfHeal) {
812
+ this.log.info("deferring auth-error event; self-heal will attempt refresh");
813
+ return;
814
+ }
774
815
  try {
775
816
  this.emit("agent-event", {
776
817
  type: "error",