@agentstep/agent-sdk 0.4.35 → 0.4.37

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 (73) hide show
  1. package/dist/backends/claude/index.js +2 -2
  2. package/dist/backends/claude/tool-bridge.js +1 -3
  3. package/dist/backends/registry.js +3 -3
  4. package/dist/{chunk-BKBXVNVR.js → chunk-23UY2MFV.js} +4 -4
  5. package/dist/{chunk-O2A3SMM4.js → chunk-34I6YX5C.js} +1 -1
  6. package/dist/{chunk-5DGYWZS6.js → chunk-357WBREV.js} +1 -1
  7. package/dist/{chunk-LJHIA7JZ.js → chunk-44TEDXNS.js} +1 -1
  8. package/dist/{chunk-3B7RM3M3.js → chunk-4INK5J6G.js} +1 -1
  9. package/dist/{chunk-ERCX52RV.js → chunk-4JUTGYO3.js} +1 -1
  10. package/dist/{chunk-WUA4SR4W.js → chunk-55KYCJKN.js} +2 -2
  11. package/dist/{chunk-X672A67L.js → chunk-6KZYAWWM.js} +1 -1
  12. package/dist/{chunk-VUECON2Y.js → chunk-BRWTFPLQ.js} +1 -1
  13. package/dist/{chunk-THBICEP4.js → chunk-DQ6YEMHQ.js} +1 -1
  14. package/dist/{chunk-YX2TSJKF.js → chunk-DTVP52TJ.js} +1 -1
  15. package/dist/{chunk-JT5QW4ZC.js → chunk-ELHUYR6X.js} +1 -1
  16. package/dist/{chunk-GJ7XWTHD.js → chunk-ESSEO2YM.js} +1 -1
  17. package/dist/{chunk-DSDWHGY5.js → chunk-F6LIUFEF.js} +1 -1
  18. package/dist/{chunk-EUIR2ADY.js → chunk-FDBR634Z.js} +1 -1
  19. package/dist/{chunk-ZUDE3PBV.js → chunk-FUWIQERE.js} +1 -1
  20. package/dist/{chunk-5JYBDVYS.js → chunk-FWMY2LTE.js} +2 -2
  21. package/dist/{chunk-3CAXZ5EJ.js → chunk-GM3ATEBU.js} +1 -1
  22. package/dist/{chunk-YUXYLXDH.js → chunk-IOEDE6TY.js} +13 -12
  23. package/dist/{chunk-MDBZAKVG.js → chunk-KADCPOTC.js} +1 -1
  24. package/dist/{chunk-S6YIUX5D.js → chunk-KJ32UB3K.js} +1 -1
  25. package/dist/{chunk-XEJ4SDE6.js → chunk-NIOX2KED.js} +2 -2
  26. package/dist/{chunk-LRV3BZR3.js → chunk-OSNSJOAA.js} +2 -2
  27. package/dist/{chunk-BQKDLRLF.js → chunk-PLDPJV73.js} +1 -1
  28. package/dist/{chunk-HXHJNOIN.js → chunk-QP3DVGIC.js} +1 -1
  29. package/dist/{chunk-XZCXELYT.js → chunk-RE3DVLEA.js} +1 -1
  30. package/dist/{chunk-4FDEJHH7.js → chunk-SJ7WZEVY.js} +0 -2
  31. package/dist/{chunk-62KI4EKC.js → chunk-W65Y33D5.js} +1 -1
  32. package/dist/{chunk-HRFQYA7B.js → chunk-WOOMYOM5.js} +1 -1
  33. package/dist/{chunk-L3ABBEUO.js → chunk-Y6YLISBC.js} +2 -2
  34. package/dist/{chunk-RMMP42W4.js → chunk-ZCBO6BDF.js} +1 -1
  35. package/dist/{chunk-7CD4QT5R.js → chunk-ZMNQ2YJ6.js} +6 -4
  36. package/dist/{chunk-NOXY423I.js → chunk-ZQ5HR6TZ.js} +1 -1
  37. package/dist/{chunk-AN645X3T.js → chunk-ZQGSZDXD.js} +1 -1
  38. package/dist/containers/lifecycle.js +4 -4
  39. package/dist/handlers/agents.js +10 -10
  40. package/dist/handlers/api_keys.js +10 -10
  41. package/dist/handlers/audit.js +10 -10
  42. package/dist/handlers/batch.js +10 -10
  43. package/dist/handlers/credentials.js +11 -11
  44. package/dist/handlers/environments.js +10 -10
  45. package/dist/handlers/events.js +10 -10
  46. package/dist/handlers/files.js +10 -10
  47. package/dist/handlers/index.js +34 -34
  48. package/dist/handlers/license.js +10 -10
  49. package/dist/handlers/memory.js +10 -10
  50. package/dist/handlers/metrics.js +10 -10
  51. package/dist/handlers/models.js +10 -10
  52. package/dist/handlers/providers.js +10 -10
  53. package/dist/handlers/resources.js +10 -10
  54. package/dist/handlers/sessions.js +10 -10
  55. package/dist/handlers/settings.js +10 -10
  56. package/dist/handlers/skills-write.js +10 -10
  57. package/dist/handlers/skills.js +10 -10
  58. package/dist/handlers/stream.js +9 -9
  59. package/dist/handlers/tenants.js +10 -10
  60. package/dist/handlers/threads.js +10 -10
  61. package/dist/handlers/traces.js +10 -10
  62. package/dist/handlers/upstream_keys.js +10 -10
  63. package/dist/handlers/vaults.js +10 -10
  64. package/dist/handlers/whoami.js +10 -10
  65. package/dist/http.js +9 -9
  66. package/dist/index.js +9 -9
  67. package/dist/init.js +8 -8
  68. package/dist/sessions/driver.js +5 -5
  69. package/dist/sessions/sweeper.js +5 -5
  70. package/dist/sessions/threads.js +5 -5
  71. package/dist/shutdown.js +6 -6
  72. package/dist/sync/container-file-sync.js +64 -28
  73. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -46,7 +46,7 @@ import {
46
46
  import {
47
47
  jsonOk,
48
48
  routeWrap
49
- } from "./chunk-3CAXZ5EJ.js";
49
+ } from "./chunk-GM3ATEBU.js";
50
50
  import "./chunk-D2XITRN6.js";
51
51
  import {
52
52
  authenticate,
@@ -60,11 +60,11 @@ import "./chunk-W6WKXFHN.js";
60
60
  import "./chunk-HVUWXUUI.js";
61
61
  import {
62
62
  ensureInitialized
63
- } from "./chunk-BKBXVNVR.js";
63
+ } from "./chunk-23UY2MFV.js";
64
64
  import {
65
65
  runTurn,
66
66
  writePermissionResponse
67
- } from "./chunk-YUXYLXDH.js";
67
+ } from "./chunk-IOEDE6TY.js";
68
68
  import "./chunk-PJZ5TQYW.js";
69
69
  import "./chunk-AU4NAQGA.js";
70
70
  import "./chunk-H6TQGV4L.js";
@@ -93,15 +93,15 @@ import {
93
93
  import "./chunk-3MQ2FWXS.js";
94
94
  import {
95
95
  installShutdownHandlers
96
- } from "./chunk-BQKDLRLF.js";
97
- import "./chunk-GJ7XWTHD.js";
96
+ } from "./chunk-PLDPJV73.js";
97
+ import "./chunk-ESSEO2YM.js";
98
98
  import {
99
99
  dropActor,
100
100
  getActor
101
101
  } from "./chunk-LAWTTG2E.js";
102
102
  import {
103
103
  releaseSession
104
- } from "./chunk-WUA4SR4W.js";
104
+ } from "./chunk-55KYCJKN.js";
105
105
  import "./chunk-4XXQAVKE.js";
106
106
  import "./chunk-5IGBMS2U.js";
107
107
  import "./chunk-5ZFOKZGR.js";
@@ -171,7 +171,7 @@ import {
171
171
  } from "./chunk-AR2TM7CR.js";
172
172
  import {
173
173
  resolveBackend
174
- } from "./chunk-EUIR2ADY.js";
174
+ } from "./chunk-FDBR634Z.js";
175
175
  import "./chunk-5EQJOUWM.js";
176
176
  import "./chunk-T5VRE77P.js";
177
177
  import "./chunk-RVR6C22M.js";
@@ -203,11 +203,11 @@ import "./chunk-CULYZ3VA.js";
203
203
  import "./chunk-E4FQRMHV.js";
204
204
  import "./chunk-IAF6VMPO.js";
205
205
  import "./chunk-CREPPDHX.js";
206
- import "./chunk-7CD4QT5R.js";
206
+ import "./chunk-ZMNQ2YJ6.js";
207
207
  import "./chunk-S7W3KJYH.js";
208
208
  import "./chunk-FVBDEOTZ.js";
209
209
  import "./chunk-CY6AWCC6.js";
210
- import "./chunk-4FDEJHH7.js";
210
+ import "./chunk-SJ7WZEVY.js";
211
211
  import "./chunk-JFYE5BFI.js";
212
212
  import "./chunk-XBHDQK4Z.js";
213
213
  import "./chunk-IU457W7Q.js";
package/dist/init.js CHANGED
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  ensureInitialized,
3
3
  recoverStaleSessions
4
- } from "./chunk-BKBXVNVR.js";
5
- import "./chunk-YUXYLXDH.js";
4
+ } from "./chunk-23UY2MFV.js";
5
+ import "./chunk-IOEDE6TY.js";
6
6
  import "./chunk-PJZ5TQYW.js";
7
7
  import "./chunk-AU4NAQGA.js";
8
8
  import "./chunk-H6TQGV4L.js";
@@ -16,10 +16,10 @@ import "./chunk-E7DD7F7J.js";
16
16
  import "./chunk-L5RW66H5.js";
17
17
  import "./chunk-USYY3L7G.js";
18
18
  import "./chunk-3MQ2FWXS.js";
19
- import "./chunk-BQKDLRLF.js";
20
- import "./chunk-GJ7XWTHD.js";
19
+ import "./chunk-PLDPJV73.js";
20
+ import "./chunk-ESSEO2YM.js";
21
21
  import "./chunk-LAWTTG2E.js";
22
- import "./chunk-WUA4SR4W.js";
22
+ import "./chunk-55KYCJKN.js";
23
23
  import "./chunk-4XXQAVKE.js";
24
24
  import "./chunk-5IGBMS2U.js";
25
25
  import "./chunk-5ZFOKZGR.js";
@@ -37,7 +37,7 @@ import "./chunk-X6IQ57SC.js";
37
37
  import "./chunk-G7KUVNDY.js";
38
38
  import "./chunk-ZTH5JRZG.js";
39
39
  import "./chunk-AR2TM7CR.js";
40
- import "./chunk-EUIR2ADY.js";
40
+ import "./chunk-FDBR634Z.js";
41
41
  import "./chunk-5EQJOUWM.js";
42
42
  import "./chunk-T5VRE77P.js";
43
43
  import "./chunk-RVR6C22M.js";
@@ -69,11 +69,11 @@ import "./chunk-CULYZ3VA.js";
69
69
  import "./chunk-E4FQRMHV.js";
70
70
  import "./chunk-IAF6VMPO.js";
71
71
  import "./chunk-CREPPDHX.js";
72
- import "./chunk-7CD4QT5R.js";
72
+ import "./chunk-ZMNQ2YJ6.js";
73
73
  import "./chunk-S7W3KJYH.js";
74
74
  import "./chunk-FVBDEOTZ.js";
75
75
  import "./chunk-CY6AWCC6.js";
76
- import "./chunk-4FDEJHH7.js";
76
+ import "./chunk-SJ7WZEVY.js";
77
77
  import "./chunk-JFYE5BFI.js";
78
78
  import "./chunk-XBHDQK4Z.js";
79
79
  import "./chunk-IU457W7Q.js";
@@ -3,7 +3,7 @@ import {
3
3
  runTurn,
4
4
  writePermissionResponse,
5
5
  writeToolBridgeResponse
6
- } from "../chunk-YUXYLXDH.js";
6
+ } from "../chunk-IOEDE6TY.js";
7
7
  import "../chunk-PJZ5TQYW.js";
8
8
  import "../chunk-AU4NAQGA.js";
9
9
  import "../chunk-H6TQGV4L.js";
@@ -12,7 +12,7 @@ import "../chunk-72BKGVBE.js";
12
12
  import "../chunk-TPPLYCJF.js";
13
13
  import "../chunk-E7DD7F7J.js";
14
14
  import "../chunk-L5RW66H5.js";
15
- import "../chunk-WUA4SR4W.js";
15
+ import "../chunk-55KYCJKN.js";
16
16
  import "../chunk-4XXQAVKE.js";
17
17
  import "../chunk-5IGBMS2U.js";
18
18
  import "../chunk-5ZFOKZGR.js";
@@ -30,7 +30,7 @@ import "../chunk-X6IQ57SC.js";
30
30
  import "../chunk-G7KUVNDY.js";
31
31
  import "../chunk-ZTH5JRZG.js";
32
32
  import "../chunk-AR2TM7CR.js";
33
- import "../chunk-EUIR2ADY.js";
33
+ import "../chunk-FDBR634Z.js";
34
34
  import "../chunk-5EQJOUWM.js";
35
35
  import "../chunk-T5VRE77P.js";
36
36
  import "../chunk-RVR6C22M.js";
@@ -62,11 +62,11 @@ import "../chunk-CULYZ3VA.js";
62
62
  import "../chunk-E4FQRMHV.js";
63
63
  import "../chunk-IAF6VMPO.js";
64
64
  import "../chunk-CREPPDHX.js";
65
- import "../chunk-7CD4QT5R.js";
65
+ import "../chunk-ZMNQ2YJ6.js";
66
66
  import "../chunk-S7W3KJYH.js";
67
67
  import "../chunk-FVBDEOTZ.js";
68
68
  import "../chunk-CY6AWCC6.js";
69
- import "../chunk-4FDEJHH7.js";
69
+ import "../chunk-SJ7WZEVY.js";
70
70
  import "../chunk-JFYE5BFI.js";
71
71
  import "../chunk-XBHDQK4Z.js";
72
72
  import "../chunk-IU457W7Q.js";
@@ -2,9 +2,9 @@ import {
2
2
  __resetSweeperState,
3
3
  markStopping,
4
4
  runSweep
5
- } from "../chunk-GJ7XWTHD.js";
5
+ } from "../chunk-ESSEO2YM.js";
6
6
  import "../chunk-LAWTTG2E.js";
7
- import "../chunk-WUA4SR4W.js";
7
+ import "../chunk-55KYCJKN.js";
8
8
  import "../chunk-4XXQAVKE.js";
9
9
  import "../chunk-5IGBMS2U.js";
10
10
  import "../chunk-5ZFOKZGR.js";
@@ -22,7 +22,7 @@ import "../chunk-X6IQ57SC.js";
22
22
  import "../chunk-G7KUVNDY.js";
23
23
  import "../chunk-ZTH5JRZG.js";
24
24
  import "../chunk-AR2TM7CR.js";
25
- import "../chunk-EUIR2ADY.js";
25
+ import "../chunk-FDBR634Z.js";
26
26
  import "../chunk-5EQJOUWM.js";
27
27
  import "../chunk-T5VRE77P.js";
28
28
  import "../chunk-RVR6C22M.js";
@@ -54,11 +54,11 @@ import "../chunk-CULYZ3VA.js";
54
54
  import "../chunk-E4FQRMHV.js";
55
55
  import "../chunk-IAF6VMPO.js";
56
56
  import "../chunk-CREPPDHX.js";
57
- import "../chunk-7CD4QT5R.js";
57
+ import "../chunk-ZMNQ2YJ6.js";
58
58
  import "../chunk-S7W3KJYH.js";
59
59
  import "../chunk-FVBDEOTZ.js";
60
60
  import "../chunk-CY6AWCC6.js";
61
- import "../chunk-4FDEJHH7.js";
61
+ import "../chunk-SJ7WZEVY.js";
62
62
  import "../chunk-JFYE5BFI.js";
63
63
  import "../chunk-XBHDQK4Z.js";
64
64
  import "../chunk-IU457W7Q.js";
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  runTurn
3
- } from "../chunk-YUXYLXDH.js";
3
+ } from "../chunk-IOEDE6TY.js";
4
4
  import "../chunk-PJZ5TQYW.js";
5
5
  import "../chunk-AU4NAQGA.js";
6
6
  import "../chunk-H6TQGV4L.js";
@@ -12,7 +12,7 @@ import "../chunk-L5RW66H5.js";
12
12
  import {
13
13
  getActor
14
14
  } from "../chunk-LAWTTG2E.js";
15
- import "../chunk-WUA4SR4W.js";
15
+ import "../chunk-55KYCJKN.js";
16
16
  import "../chunk-4XXQAVKE.js";
17
17
  import "../chunk-5IGBMS2U.js";
18
18
  import "../chunk-5ZFOKZGR.js";
@@ -41,7 +41,7 @@ import {
41
41
  getAgent
42
42
  } from "../chunk-ZTH5JRZG.js";
43
43
  import "../chunk-AR2TM7CR.js";
44
- import "../chunk-EUIR2ADY.js";
44
+ import "../chunk-FDBR634Z.js";
45
45
  import "../chunk-5EQJOUWM.js";
46
46
  import "../chunk-T5VRE77P.js";
47
47
  import "../chunk-RVR6C22M.js";
@@ -73,11 +73,11 @@ import "../chunk-CULYZ3VA.js";
73
73
  import "../chunk-E4FQRMHV.js";
74
74
  import "../chunk-IAF6VMPO.js";
75
75
  import "../chunk-CREPPDHX.js";
76
- import "../chunk-7CD4QT5R.js";
76
+ import "../chunk-ZMNQ2YJ6.js";
77
77
  import "../chunk-S7W3KJYH.js";
78
78
  import "../chunk-FVBDEOTZ.js";
79
79
  import "../chunk-CY6AWCC6.js";
80
- import "../chunk-4FDEJHH7.js";
80
+ import "../chunk-SJ7WZEVY.js";
81
81
  import "../chunk-JFYE5BFI.js";
82
82
  import "../chunk-XBHDQK4Z.js";
83
83
  import "../chunk-IU457W7Q.js";
package/dist/shutdown.js CHANGED
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  installShutdownHandlers
3
- } from "./chunk-BQKDLRLF.js";
4
- import "./chunk-GJ7XWTHD.js";
3
+ } from "./chunk-PLDPJV73.js";
4
+ import "./chunk-ESSEO2YM.js";
5
5
  import "./chunk-LAWTTG2E.js";
6
- import "./chunk-WUA4SR4W.js";
6
+ import "./chunk-55KYCJKN.js";
7
7
  import "./chunk-4XXQAVKE.js";
8
8
  import "./chunk-5IGBMS2U.js";
9
9
  import "./chunk-5ZFOKZGR.js";
@@ -21,7 +21,7 @@ import "./chunk-X6IQ57SC.js";
21
21
  import "./chunk-G7KUVNDY.js";
22
22
  import "./chunk-ZTH5JRZG.js";
23
23
  import "./chunk-AR2TM7CR.js";
24
- import "./chunk-EUIR2ADY.js";
24
+ import "./chunk-FDBR634Z.js";
25
25
  import "./chunk-5EQJOUWM.js";
26
26
  import "./chunk-T5VRE77P.js";
27
27
  import "./chunk-RVR6C22M.js";
@@ -53,11 +53,11 @@ import "./chunk-CULYZ3VA.js";
53
53
  import "./chunk-E4FQRMHV.js";
54
54
  import "./chunk-IAF6VMPO.js";
55
55
  import "./chunk-CREPPDHX.js";
56
- import "./chunk-7CD4QT5R.js";
56
+ import "./chunk-ZMNQ2YJ6.js";
57
57
  import "./chunk-S7W3KJYH.js";
58
58
  import "./chunk-FVBDEOTZ.js";
59
59
  import "./chunk-CY6AWCC6.js";
60
- import "./chunk-4FDEJHH7.js";
60
+ import "./chunk-SJ7WZEVY.js";
61
61
  import "./chunk-JFYE5BFI.js";
62
62
  import "./chunk-XBHDQK4Z.js";
63
63
  import "./chunk-IU457W7Q.js";
@@ -30,18 +30,8 @@ var BINARY_EXTENSIONS = /* @__PURE__ */ new Set([
30
30
  ".dylib",
31
31
  ".bin",
32
32
  ".wasm",
33
- ".png",
34
- ".jpg",
35
- ".jpeg",
36
- ".gif",
37
- ".ico",
38
- ".svg",
39
33
  ".mp3",
40
- ".mp4",
41
- ".zip",
42
- ".tar",
43
- ".gz",
44
- ".pdf"
34
+ ".mp4"
45
35
  ]);
46
36
  var BLOCKED_PREFIXES = [
47
37
  "/proc/",
@@ -63,6 +53,7 @@ function extractFilePaths(sessionId) {
63
53
  const seen = /* @__PURE__ */ new Set();
64
54
  const paths = [];
65
55
  let sawFileTools = false;
56
+ let sawBash = false;
66
57
  for (const evt of events) {
67
58
  if (evt.type !== "agent.tool_use") continue;
68
59
  let payload;
@@ -77,6 +68,8 @@ function extractFilePaths(sessionId) {
77
68
  if (FILE_TOOLS.has(toolName ?? "") && payload.input) {
78
69
  sawFileTools = true;
79
70
  filePath = payload.input.file_path ?? payload.input.filePath ?? payload.input.path;
71
+ } else if (toolName === "Bash" || toolName === "bash") {
72
+ sawBash = true;
80
73
  } else if (toolName === "apply_patch" && payload.input) {
81
74
  sawFileTools = true;
82
75
  const patch = payload.input.patchText;
@@ -89,7 +82,7 @@ function extractFilePaths(sessionId) {
89
82
  seen.add(resolved);
90
83
  paths.push(resolved);
91
84
  }
92
- return { paths, sawFileTools };
85
+ return { paths, sawFileTools, sawBash };
93
86
  }
94
87
  function isPathSafe(p) {
95
88
  if (!p.startsWith("/")) return false;
@@ -105,11 +98,12 @@ async function discoverChangedFiles(sandboxName, provider, secrets) {
105
98
  const result = await provider.exec(
106
99
  sandboxName,
107
100
  ["sh", "-c", [
108
- "find /home /root /workspace /mnt",
101
+ "find /home /root /workspace /mnt /tmp",
109
102
  "-maxdepth 4 -type f -mmin -30 -size +0c",
110
103
  "! -path '*/.git/*' ! -path '*/node_modules/*' ! -path '*/.npm/*'",
111
104
  "! -path '*/.config/*' ! -path '*/.local/*' ! -path '*/.cache/*'",
112
105
  "! -path '*/cache/*' ! -path '*-debug-*.log'",
106
+ "! -path '*/tool-bridge/*' ! -path '*/permission-bridge/*' ! -path '*/v8-cache/*'",
113
107
  "! -name '.*' ! -name '*.sqlite' ! -name '*.sqlite-*'",
114
108
  "! -name 'installation_id' ! -name 'plugins.sha'",
115
109
  "2>/dev/null | head -30"
@@ -126,23 +120,37 @@ async function syncContainerFiles(opts) {
126
120
  const { sessionId, sandboxName, provider, secrets } = opts;
127
121
  const extracted = extractFilePaths(sessionId);
128
122
  let allPaths = extracted.paths;
129
- if (allPaths.length === 0 && extracted.sawFileTools) {
130
- allPaths = await discoverChangedFiles(sandboxName, provider, secrets);
123
+ console.log(`[container-file-sync] ${sessionId}: extracted ${allPaths.length} paths, sawFileTools=${extracted.sawFileTools}, sawBash=${extracted.sawBash}`);
124
+ if (allPaths.length > 0) {
125
+ console.log(`[container-file-sync] ${sessionId}: tracked paths: ${allPaths.join(", ")}`);
126
+ }
127
+ if (extracted.sawFileTools || extracted.sawBash) {
128
+ const discovered = await discoverChangedFiles(sandboxName, provider, secrets);
129
+ console.log(`[container-file-sync] ${sessionId}: discovered ${discovered.length} files on container: ${discovered.join(", ")}`);
130
+ for (const p of discovered) {
131
+ if (!allPaths.includes(p)) allPaths.push(p);
132
+ }
133
+ }
134
+ if (allPaths.length === 0) {
135
+ console.log(`[container-file-sync] ${sessionId}: no paths to sync`);
136
+ return { synced: 0, skipped: 0 };
131
137
  }
132
- if (allPaths.length === 0) return { synced: 0, skipped: 0 };
133
138
  const validPaths = [];
134
139
  let skipped = 0;
135
140
  for (const p of allPaths) {
136
141
  if (!isPathSafe(p)) {
142
+ console.log(`[container-file-sync] ${sessionId}: skip unsafe: ${p}`);
137
143
  skipped++;
138
144
  continue;
139
145
  }
140
146
  if (isBinaryExtension(p)) {
147
+ console.log(`[container-file-sync] ${sessionId}: skip binary ext: ${p}`);
141
148
  skipped++;
142
149
  continue;
143
150
  }
144
151
  validPaths.push(p);
145
152
  }
153
+ console.log(`[container-file-sync] ${sessionId}: ${validPaths.length} valid paths, ${skipped} skipped`);
146
154
  if (validPaths.length === 0) return { synced: 0, skipped };
147
155
  if (validPaths.length > MAX_FILES_PER_SYNC) {
148
156
  console.warn(
@@ -152,24 +160,42 @@ async function syncContainerFiles(opts) {
152
160
  validPaths.length = MAX_FILES_PER_SYNC;
153
161
  }
154
162
  let synced = 0;
163
+ const BINARY_READ_EXTS = /* @__PURE__ */ new Set([
164
+ ".docx",
165
+ ".xlsx",
166
+ ".pptx",
167
+ ".pdf",
168
+ ".zip",
169
+ ".tar",
170
+ ".gz",
171
+ ".png",
172
+ ".jpg",
173
+ ".jpeg",
174
+ ".gif",
175
+ ".ico",
176
+ ".webp",
177
+ ".woff",
178
+ ".woff2",
179
+ ".ttf",
180
+ ".otf",
181
+ ".eot"
182
+ ]);
155
183
  for (const filePath of validPaths) {
156
184
  try {
157
- const result = await provider.exec(
158
- sandboxName,
159
- ["cat", "--", filePath],
160
- { secrets, timeoutMs: 15e3 }
161
- );
185
+ const ext = path.extname(filePath).toLowerCase();
186
+ const isBinary = BINARY_READ_EXTS.has(ext);
187
+ const result = isBinary ? await provider.exec(sandboxName, ["base64", "-w", "0", "--", filePath], { secrets, timeoutMs: 15e3 }) : await provider.exec(sandboxName, ["cat", "--", filePath], { secrets, timeoutMs: 15e3 });
162
188
  if (result.exit_code !== 0 || !result.stdout) {
163
189
  skipped++;
164
190
  continue;
165
191
  }
166
- const content = result.stdout;
167
- const byteLength = Buffer.byteLength(content, "utf8");
168
- if (byteLength > MAX_FILE_SIZE) {
192
+ const raw = result.stdout.replace(/[\x00-\x08\x0B\x0C\x0E-\x1F]/g, "");
193
+ const data = isBinary ? Buffer.from(raw.trim(), "base64") : Buffer.from(raw, "utf8");
194
+ if (data.length > MAX_FILE_SIZE) {
169
195
  skipped++;
170
196
  continue;
171
197
  }
172
- const hash = createHash("sha256").update(content).digest("hex");
198
+ const hash = createHash("sha256").update(data).digest("hex");
173
199
  const existing = findFileByContainerPath(sessionId, filePath, hash);
174
200
  if (existing) {
175
201
  skipped++;
@@ -177,10 +203,9 @@ async function syncContainerFiles(opts) {
177
203
  }
178
204
  const fileId = newId("file");
179
205
  const filename = path.basename(filePath);
180
- const data = Buffer.from(content, "utf8");
181
206
  const storagePath = storeFile(fileId, filename, data);
182
- const ext = path.extname(filename).toLowerCase();
183
- const contentType = MIME_MAP[ext] ?? "text/plain";
207
+ const fileExt = path.extname(filename).toLowerCase();
208
+ const contentType = MIME_MAP[fileExt] ?? "text/plain";
184
209
  createFile({
185
210
  filename,
186
211
  size: data.length,
@@ -219,6 +244,17 @@ var MIME_MAP = {
219
244
  ".xml": "text/xml",
220
245
  ".sql": "text/x-sql",
221
246
  ".txt": "text/plain",
247
+ ".docx": "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
248
+ ".xlsx": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
249
+ ".pptx": "application/vnd.openxmlformats-officedocument.presentationml.presentation",
250
+ ".pdf": "application/pdf",
251
+ ".zip": "application/zip",
252
+ ".png": "image/png",
253
+ ".jpg": "image/jpeg",
254
+ ".jpeg": "image/jpeg",
255
+ ".gif": "image/gif",
256
+ ".svg": "image/svg+xml",
257
+ ".csv": "text/csv",
222
258
  ".c": "text/x-c",
223
259
  ".cpp": "text/x-c++",
224
260
  ".h": "text/x-c",
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "license": "Apache-2.0",
3
3
  "name": "@agentstep/agent-sdk",
4
- "version": "0.4.35",
4
+ "version": "0.4.37",
5
5
  "description": "Core engine for AgentStep Gateway \u2014 backends, sandbox providers, session orchestration, and vault encryption.",
6
6
  "keywords": [
7
7
  "anthropic",