autohand-cli 0.7.8 → 0.7.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/CommunitySkillsCache-N2RWBCY2.cjs +7 -0
- package/dist/{CommunitySkillsCache-Q22FUAR5.js → CommunitySkillsCache-YWDFZBKP.js} +2 -2
- package/dist/MemoryManager-J7APSLZ7.js +7 -0
- package/dist/MemoryManager-RLLYVIDY.cjs +7 -0
- package/dist/PermissionManager-ISI5OAJK.cjs +10 -0
- package/dist/{PermissionManager-HATZKTRC.js → PermissionManager-WYP5JPCQ.js} +3 -3
- package/dist/SessionManager-7MF76Q3Q.cjs +9 -0
- package/dist/{SessionManager-S5R6O3NU.js → SessionManager-SFBDIBGA.js} +2 -2
- package/dist/{SkillsRegistry-R5WDM6T3.js → SkillsRegistry-E437FFJV.js} +2 -2
- package/dist/SkillsRegistry-UTK2YT4M.cjs +8 -0
- package/dist/{SyncApiClient-FAOMIZAP.js → SyncApiClient-AYXYSOJM.js} +1 -1
- package/dist/SyncApiClient-ID3KXEMA.cjs +10 -0
- package/dist/agents-N2ZB4O2A.cjs +9 -0
- package/dist/{agents-ICAC3KD3.js → agents-ZMT7HBRT.js} +2 -2
- package/dist/agents-new-3EWS2NR3.cjs +11 -0
- package/dist/agents-new-TCGUYK5I.js +11 -0
- package/dist/cc-2W6M7J45.cjs +8 -0
- package/dist/cc-UTTLESTY.js +8 -0
- package/dist/{chunk-XFPITUFJ.cjs → chunk-32R47CAQ.cjs} +50 -8
- package/dist/{chunk-2JPUEN44.cjs → chunk-3DGR4GNN.cjs} +57 -84
- package/dist/{chunk-WIUGUR5T.js → chunk-3DVEGFBZ.js} +8 -8
- package/dist/{chunk-YWKZF2SA.js → chunk-3SDEZTZD.js} +46 -46
- package/dist/{chunk-KH7BCZJN.js → chunk-4BZ65NIH.js} +1 -1
- package/dist/{chunk-52MLYK5P.js → chunk-4YQ2OJAL.js} +1 -1
- package/dist/{chunk-54GVL2SE.cjs → chunk-5UC3VAJ2.cjs} +2 -2
- package/dist/{chunk-YDOR2OCA.cjs → chunk-6DSJ7XST.cjs} +16 -11
- package/dist/chunk-6SM6N7DJ.js +2828 -0
- package/dist/{chunk-MDWULS57.js → chunk-6UJMCWRY.js} +56 -33
- package/dist/{chunk-6KMAJTU3.js → chunk-7GJR65DQ.js} +2 -2
- package/dist/{chunk-B5N5UAMO.cjs → chunk-7WKEDH3E.cjs} +5 -5
- package/dist/{chunk-B4ZPNXZE.cjs → chunk-A5KU3JZW.cjs} +1 -1
- package/dist/{chunk-PMMSDR44.cjs → chunk-AQNY2M6Q.cjs} +3 -1
- package/dist/{chunk-AVL4DKQO.js → chunk-BTVNRLSE.js} +1 -1
- package/dist/{chunk-PU534KPO.cjs → chunk-CHVXUA3O.cjs} +4 -4
- package/dist/{chunk-DPJ3IIBB.js → chunk-CMNQAF6C.js} +7 -2
- package/dist/{chunk-7TOHYAUF.cjs → chunk-CPO5KEQS.cjs} +2 -2
- package/dist/{chunk-5MDDOGTD.cjs → chunk-DRXFJR7F.cjs} +22 -30
- package/dist/{chunk-JBKP2CLA.cjs → chunk-FN5S5OE7.cjs} +47 -47
- package/dist/{chunk-SFGJQPGC.cjs → chunk-FPHU2ES6.cjs} +56 -33
- package/dist/{chunk-3L76MLO5.cjs → chunk-FSTLJIR5.cjs} +21 -28
- package/dist/chunk-HF65HHDU.cjs +83 -0
- package/dist/{chunk-A552JHUJ.cjs → chunk-HUA44A35.cjs} +21 -18
- package/dist/{chunk-B7EUETGY.cjs → chunk-HWDP4HQO.cjs} +4 -4
- package/dist/{chunk-OC5YDNFC.js → chunk-IYZBLUEJ.js} +35 -52
- package/dist/chunk-J2RUI7GJ.js +83 -0
- package/dist/{chunk-WH3D42BQ.js → chunk-J7VV7JAB.js} +55 -82
- package/dist/{chunk-VEDIYPWY.cjs → chunk-JRV4SOJU.cjs} +9 -9
- package/dist/{chunk-GWIAMKKF.js → chunk-K6CZ2AGI.js} +6 -3
- package/dist/{chunk-SYJLMBLP.cjs → chunk-KJAZ4YAR.cjs} +17 -17
- package/dist/{chunk-BAFJQUWR.js → chunk-KS45GREN.js} +12 -19
- package/dist/chunk-KXNAGJE6.cjs +589 -0
- package/dist/chunk-L5QWMGLV.cjs +2828 -0
- package/dist/{chunk-U5WIP4HS.js → chunk-LCBOOA7S.js} +47 -5
- package/dist/chunk-LJCSSR5V.cjs +63 -0
- package/dist/chunk-LKIKNRUP.js +219 -0
- package/dist/{chunk-WQSWU2QA.cjs → chunk-LY5VN3B3.cjs} +9 -6
- package/dist/{chunk-YAGD43KA.cjs → chunk-LYMZDJX5.cjs} +36 -37
- package/dist/{chunk-SLISYSP4.cjs → chunk-MRDZHNCF.cjs} +4 -4
- package/dist/chunk-NCC6ETZS.js +362 -0
- package/dist/chunk-NCLCL7JK.js +63 -0
- package/dist/chunk-NTFNUTY2.js +589 -0
- package/dist/{chunk-GDTZQSJ6.cjs → chunk-O3EX3SAD.cjs} +2 -2
- package/dist/chunk-OO7EKEJH.cjs +219 -0
- package/dist/{chunk-P2Z6GDEN.js → chunk-OXJCLU3X.js} +1 -1
- package/dist/{chunk-23JQSCTO.js → chunk-P6EGMTK4.js} +1 -1
- package/dist/{chunk-VPAN5H7Q.js → chunk-PFS5ZOCO.js} +30 -31
- package/dist/{chunk-EKY5PKQI.js → chunk-PGH3MHPP.js} +3 -1
- package/dist/{chunk-EDGV5BNH.js → chunk-PVSYZXS7.js} +18 -26
- package/dist/{chunk-NI3BQXKU.js → chunk-QAJM6VG5.js} +2 -2
- package/dist/{chunk-OBV3UUIL.js → chunk-R5PZPF55.js} +1 -1
- package/dist/{chunk-MJFBVQHB.js → chunk-RDGYHJ52.js} +5 -5
- package/dist/{chunk-YDH2BMEN.js → chunk-RX4KPL6H.js} +1 -1
- package/dist/{chunk-GFJ6AETU.cjs → chunk-T7HQBZZB.cjs} +6 -6
- package/dist/chunk-TSV4LVHK.js +35 -0
- package/dist/{chunk-7VW3A7DO.cjs → chunk-TUO5SZRD.cjs} +2 -2
- package/dist/{chunk-C3IFF3EH.cjs → chunk-UL5T2XIY.cjs} +36 -53
- package/dist/chunk-ULQ6MDSJ.cjs +362 -0
- package/dist/{chunk-UL7YPRCU.js → chunk-UP6YRP44.js} +1 -1
- package/dist/{chunk-G77ZY4QG.js → chunk-VQDWNDP5.js} +1 -1
- package/dist/chunk-VXCMGBXY.cjs +35 -0
- package/dist/{chunk-JHFH3N4U.cjs → chunk-WCN5WDOI.cjs} +2 -2
- package/dist/{chunk-53BR4MUW.cjs → chunk-WGO4ACS7.cjs} +3 -3
- package/dist/{chunk-4M2GX7RH.cjs → chunk-WJICM4SK.cjs} +2 -2
- package/dist/{chunk-4RWTUT2Z.js → chunk-WT367RVU.js} +19 -16
- package/dist/{chunk-A6QBABQ7.js → chunk-XOSFZHSS.js} +2 -2
- package/dist/{chunk-3YEDXG6S.js → chunk-YDJA5ETO.js} +1 -1
- package/dist/completion-NCSTSKTL.cjs +11 -0
- package/dist/{completion-Y42FKDT3.js → completion-NTZERPAZ.js} +2 -1
- package/dist/constants-B2X7KDIH.cjs +20 -0
- package/dist/{constants-ZLG6M5SI.js → constants-OFIAR4E5.js} +1 -1
- package/dist/export-5AJNVX4O.cjs +9 -0
- package/dist/{export-WJ5P6E5Z.js → export-ZQHTLV4W.js} +2 -1
- package/dist/feedback-F7BMGSV6.cjs +12 -0
- package/dist/feedback-NL7CWTRY.js +12 -0
- package/dist/hooks-AX5VPCZ3.cjs +10 -0
- package/dist/hooks-V22HVLQT.js +10 -0
- package/dist/index.cjs +5306 -3582
- package/dist/index.js +3780 -2056
- package/dist/language-IEKARNQH.js +13 -0
- package/dist/language-ULQCKXAD.cjs +13 -0
- package/dist/localProjectPermissions-7FI3XF4K.cjs +17 -0
- package/dist/{localProjectPermissions-YFFAKLUZ.js → localProjectPermissions-FD5AK5FB.js} +2 -2
- package/dist/login-PD3DFJLM.js +15 -0
- package/dist/login-VHGT4YKT.cjs +15 -0
- package/dist/logout-2QXNFGDT.js +13 -0
- package/dist/logout-A4SMKEFO.cjs +13 -0
- package/dist/permissions-S7433NQJ.js +10 -0
- package/dist/permissions-YZ6WCDBL.cjs +10 -0
- package/dist/plan-B3CW5DXJ.cjs +10 -0
- package/dist/plan-JFGNRL2S.js +10 -0
- package/dist/resume-54ERVSFM.cjs +10 -0
- package/dist/resume-YJ5CVKAP.js +10 -0
- package/dist/search-4TEQMUPU.js +11 -0
- package/dist/search-QGLS4SV7.cjs +11 -0
- package/dist/share-2B2T3AUU.cjs +11 -0
- package/dist/share-SZMXZIA3.js +11 -0
- package/dist/skills-HVQNCTGK.cjs +12 -0
- package/dist/{skills-3YEEODHK.js → skills-PB4HXV4R.js} +1 -1
- package/dist/{skills-install-FTGOHOZ4.cjs → skills-install-7SFS24HY.cjs} +10 -9
- package/dist/{skills-install-KAXAQSN6.js → skills-install-UBBNXWD5.js} +4 -3
- package/dist/skills-new-5FSDAJWE.js +12 -0
- package/dist/skills-new-IOTZYE6F.cjs +12 -0
- package/dist/{status-PBFFUC4Q.js → status-AGPSKXSW.js} +2 -2
- package/dist/status-WOINF556.cjs +9 -0
- package/dist/{sync-3B7SNBYC.js → sync-64MZDWGG.js} +3 -3
- package/dist/sync-F5ECJW25.cjs +39 -0
- package/dist/{sync-H4UHHLKU.js → sync-LYKDHRFM.js} +3 -3
- package/dist/sync-W5UR7BEP.cjs +14 -0
- package/dist/theme-CWG3ZLHB.cjs +13 -0
- package/dist/theme-HQKV7YAP.js +13 -0
- package/package.json +2 -2
- package/dist/CommunitySkillsCache-2BITCEAA.cjs +0 -7
- package/dist/MemoryManager-2ATHG7BH.js +0 -7
- package/dist/MemoryManager-AENCGCEW.cjs +0 -7
- package/dist/PermissionManager-6HZGTK2N.cjs +0 -10
- package/dist/SessionManager-AG4WT3DP.cjs +0 -9
- package/dist/SkillsRegistry-ZXU6YDRP.cjs +0 -8
- package/dist/SyncApiClient-UOA4VLLD.cjs +0 -10
- package/dist/agents-YONWPKFS.cjs +0 -9
- package/dist/agents-new-NV557UVG.cjs +0 -10
- package/dist/agents-new-QHM3CO4B.js +0 -10
- package/dist/chunk-3HPUOQJN.cjs +0 -23
- package/dist/chunk-5DN5KNXU.js +0 -81
- package/dist/chunk-7BYSXAKS.js +0 -23
- package/dist/chunk-ARVFUZOB.js +0 -736
- package/dist/chunk-GWXXFQ3F.cjs +0 -81
- package/dist/chunk-XFQS2VGT.cjs +0 -736
- package/dist/completion-WVFWX7XQ.cjs +0 -10
- package/dist/constants-G2PLP5HH.cjs +0 -20
- package/dist/export-BKBJ7PB2.cjs +0 -8
- package/dist/feedback-HZBCTSFG.js +0 -10
- package/dist/feedback-JBQ3UPGZ.cjs +0 -10
- package/dist/hooks-G4VLYMLX.cjs +0 -9
- package/dist/hooks-LN4A6NQL.js +0 -9
- package/dist/language-KODBDE5R.js +0 -12
- package/dist/language-SJT475NW.cjs +0 -12
- package/dist/localProjectPermissions-AYQYGTOE.cjs +0 -17
- package/dist/login-TC2KROQI.js +0 -14
- package/dist/login-TYMR2ZD3.cjs +0 -14
- package/dist/logout-2ECV365P.js +0 -12
- package/dist/logout-CO3CPYZJ.cjs +0 -12
- package/dist/permissions-5MTH22EF.js +0 -9
- package/dist/permissions-IP5SITPI.cjs +0 -9
- package/dist/resume-EPOEF3WV.cjs +0 -9
- package/dist/resume-LOYD5MMP.js +0 -9
- package/dist/share-APR5S2CS.cjs +0 -10
- package/dist/share-VLJFDZKR.js +0 -10
- package/dist/skills-CRM55MKM.cjs +0 -12
- package/dist/skills-new-JF4FKNUT.cjs +0 -11
- package/dist/skills-new-JYX2GBKM.js +0 -11
- package/dist/status-DAEFE7ZC.cjs +0 -9
- package/dist/sync-4RARBQIH.cjs +0 -39
- package/dist/sync-YZ6YZ42H.cjs +0 -14
- package/dist/theme-3XV5BWUB.js +0 -12
- package/dist/theme-Z2WS5XWZ.cjs +0 -12
|
@@ -5,6 +5,7 @@ var DEFAULT_MAX_FILE_SIZE = 10 * 1024 * 1024;
|
|
|
5
5
|
var DEFAULT_MAX_TOTAL_SIZE = 100 * 1024 * 1024;
|
|
6
6
|
var DEFAULT_MAX_RETRIES = 3;
|
|
7
7
|
var DEFAULT_RETRY_DELAY = 1e3;
|
|
8
|
+
var MAX_FILES_PER_REQUEST = 100;
|
|
8
9
|
var SyncApiClient = class {
|
|
9
10
|
constructor(config) {
|
|
10
11
|
this.baseUrl = config?.baseUrl || DEFAULT_BASE_URL;
|
|
@@ -89,29 +90,41 @@ var SyncApiClient = class {
|
|
|
89
90
|
}
|
|
90
91
|
/**
|
|
91
92
|
* Upload sync manifest and request pre-signed URLs for file uploads
|
|
93
|
+
* Batches requests to stay within API limits (max 100 files per request)
|
|
92
94
|
*/
|
|
93
95
|
async initiateUpload(token, manifest, filePaths) {
|
|
94
|
-
const
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
96
|
+
const batches = [];
|
|
97
|
+
for (let i = 0; i < filePaths.length; i += MAX_FILES_PER_REQUEST) {
|
|
98
|
+
batches.push(filePaths.slice(i, i + MAX_FILES_PER_REQUEST));
|
|
99
|
+
}
|
|
100
|
+
const allUploadUrls = {};
|
|
101
|
+
for (let batchIndex = 0; batchIndex < batches.length; batchIndex++) {
|
|
102
|
+
const batch = batches[batchIndex];
|
|
103
|
+
const response = await this.fetchWithRetry(
|
|
104
|
+
`${this.baseUrl}/v1/sync/upload`,
|
|
105
|
+
{
|
|
106
|
+
method: "POST",
|
|
107
|
+
headers: {
|
|
108
|
+
Authorization: `Bearer ${token}`,
|
|
109
|
+
"Content-Type": "application/json"
|
|
110
|
+
},
|
|
111
|
+
body: JSON.stringify({
|
|
112
|
+
// Only include manifest on first batch
|
|
113
|
+
...batchIndex === 0 ? { manifest } : {},
|
|
114
|
+
files: batch
|
|
115
|
+
})
|
|
116
|
+
}
|
|
117
|
+
);
|
|
118
|
+
if (!response.ok) {
|
|
119
|
+
const error = await response.text().catch(() => "Unknown error");
|
|
120
|
+
throw new Error(`API error: ${response.status} ${error}`);
|
|
106
121
|
}
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
throw new Error(`API error: ${response.status} ${error}`);
|
|
122
|
+
const data = await response.json();
|
|
123
|
+
const batchUrls = data.uploadUrls || {};
|
|
124
|
+
Object.assign(allUploadUrls, batchUrls);
|
|
111
125
|
}
|
|
112
|
-
const data = await response.json();
|
|
113
126
|
return {
|
|
114
|
-
uploadUrls:
|
|
127
|
+
uploadUrls: allUploadUrls
|
|
115
128
|
};
|
|
116
129
|
}
|
|
117
130
|
/**
|
|
@@ -180,26 +193,36 @@ var SyncApiClient = class {
|
|
|
180
193
|
}
|
|
181
194
|
/**
|
|
182
195
|
* Request pre-signed URLs for file downloads
|
|
196
|
+
* Batches requests to stay within API limits (max 100 files per request)
|
|
183
197
|
*/
|
|
184
198
|
async initiateDownload(token, filePaths) {
|
|
185
|
-
const
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
}
|
|
193
|
-
|
|
199
|
+
const batches = [];
|
|
200
|
+
for (let i = 0; i < filePaths.length; i += MAX_FILES_PER_REQUEST) {
|
|
201
|
+
batches.push(filePaths.slice(i, i + MAX_FILES_PER_REQUEST));
|
|
202
|
+
}
|
|
203
|
+
const allDownloadUrls = {};
|
|
204
|
+
for (const batch of batches) {
|
|
205
|
+
const response = await this.fetchWithRetry(
|
|
206
|
+
`${this.baseUrl}/v1/sync/download`,
|
|
207
|
+
{
|
|
208
|
+
method: "POST",
|
|
209
|
+
headers: {
|
|
210
|
+
Authorization: `Bearer ${token}`,
|
|
211
|
+
"Content-Type": "application/json"
|
|
212
|
+
},
|
|
213
|
+
body: JSON.stringify({ files: batch })
|
|
214
|
+
}
|
|
215
|
+
);
|
|
216
|
+
if (!response.ok) {
|
|
217
|
+
const error = await response.text().catch(() => "Unknown error");
|
|
218
|
+
throw new Error(`API error: ${response.status} ${error}`);
|
|
194
219
|
}
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
throw new Error(`API error: ${response.status} ${error}`);
|
|
220
|
+
const data = await response.json();
|
|
221
|
+
const batchUrls = data.downloadUrls || {};
|
|
222
|
+
Object.assign(allDownloadUrls, batchUrls);
|
|
199
223
|
}
|
|
200
|
-
const data = await response.json();
|
|
201
224
|
return {
|
|
202
|
-
downloadUrls:
|
|
225
|
+
downloadUrls: allDownloadUrls
|
|
203
226
|
};
|
|
204
227
|
}
|
|
205
228
|
/**
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// package.json
|
|
2
2
|
var package_default = {
|
|
3
3
|
name: "autohand-cli",
|
|
4
|
-
version: "0.7.
|
|
4
|
+
version: "0.7.9",
|
|
5
5
|
license: "Apache-2.0",
|
|
6
6
|
description: "Autohand interactive coding agent CLI powered by LLMs.",
|
|
7
7
|
repository: {
|
|
@@ -21,6 +21,7 @@ var package_default = {
|
|
|
21
21
|
"dist"
|
|
22
22
|
],
|
|
23
23
|
scripts: {
|
|
24
|
+
postinstall: "node scripts/fix-ansi-styles.js || true",
|
|
24
25
|
go: 'bun run build && ./install-local.sh && echo "COMPLETED"',
|
|
25
26
|
build: "tsup",
|
|
26
27
|
dev: "bun src/index.ts",
|
|
@@ -51,7 +52,6 @@ var package_default = {
|
|
|
51
52
|
commander: "^14.0.2",
|
|
52
53
|
diff: "^8.0.2",
|
|
53
54
|
dotenv: "^17.2.3",
|
|
54
|
-
enquirer: "^2.4.1",
|
|
55
55
|
"fs-extra": "^11.3.2",
|
|
56
56
|
i18next: "^25.7.4",
|
|
57
57
|
ignore: "^5.3.1",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var _chunkLJCSSR5Vcjs = require('./chunk-LJCSSR5V.cjs');
|
|
4
4
|
|
|
5
5
|
// src/commands/permissions.ts
|
|
6
6
|
var _chalk = require('chalk'); var _chalk2 = _interopRequireDefault(_chalk);
|
|
@@ -39,7 +39,7 @@ async function permissions(ctx) {
|
|
|
39
39
|
console.log(_chalk2.default.gray("\u2500".repeat(50)));
|
|
40
40
|
console.log(_chalk2.default.gray(`Total: ${whitelist.length} approved, ${blacklist.length} denied`));
|
|
41
41
|
console.log();
|
|
42
|
-
const actionResult = await
|
|
42
|
+
const actionResult = await _chunkLJCSSR5Vcjs.safePrompt.call(void 0, {
|
|
43
43
|
type: "select",
|
|
44
44
|
name: "action",
|
|
45
45
|
message: "What would you like to do?",
|
|
@@ -55,7 +55,7 @@ async function permissions(ctx) {
|
|
|
55
55
|
}
|
|
56
56
|
const { action } = actionResult;
|
|
57
57
|
if (action === "remove_approved" && whitelist.length > 0) {
|
|
58
|
-
const result = await
|
|
58
|
+
const result = await _chunkLJCSSR5Vcjs.safePrompt.call(void 0, {
|
|
59
59
|
type: "select",
|
|
60
60
|
name: "pattern",
|
|
61
61
|
message: "Select item to remove from approved list:",
|
|
@@ -66,7 +66,7 @@ async function permissions(ctx) {
|
|
|
66
66
|
console.log(_chalk2.default.yellow(`Removed "${result.pattern}" from approved list.`));
|
|
67
67
|
}
|
|
68
68
|
} else if (action === "remove_denied" && blacklist.length > 0) {
|
|
69
|
-
const result = await
|
|
69
|
+
const result = await _chunkLJCSSR5Vcjs.safePrompt.call(void 0, {
|
|
70
70
|
type: "select",
|
|
71
71
|
name: "pattern",
|
|
72
72
|
message: "Select item to remove from denied list:",
|
|
@@ -77,7 +77,7 @@ async function permissions(ctx) {
|
|
|
77
77
|
console.log(_chalk2.default.yellow(`Removed "${result.pattern}" from denied list.`));
|
|
78
78
|
}
|
|
79
79
|
} else if (action === "clear_all") {
|
|
80
|
-
const result = await
|
|
80
|
+
const result = await _chunkLJCSSR5Vcjs.safePrompt.call(void 0, {
|
|
81
81
|
type: "confirm",
|
|
82
82
|
name: "confirm",
|
|
83
83
|
message: "Clear all saved permissions? This cannot be undone.",
|
|
@@ -226,7 +226,7 @@ async function handleSkillsInstall(ctx, skillName) {
|
|
|
226
226
|
if (!workspaceRoot) {
|
|
227
227
|
return "Workspace root not available.";
|
|
228
228
|
}
|
|
229
|
-
const { skillsInstall } = await Promise.resolve().then(() => _interopRequireWildcard(require("./skills-install-
|
|
229
|
+
const { skillsInstall } = await Promise.resolve().then(() => _interopRequireWildcard(require("./skills-install-7SFS24HY.cjs")));
|
|
230
230
|
const result = await skillsInstall(
|
|
231
231
|
{
|
|
232
232
|
skillsRegistry,
|
|
@@ -22,7 +22,9 @@ var AUTOHAND_PATHS = {
|
|
|
22
22
|
/** Custom tools */
|
|
23
23
|
tools: _path2.default.join(AUTOHAND_HOME, "tools"),
|
|
24
24
|
/** Skills (instruction packages) */
|
|
25
|
-
skills: _path2.default.join(AUTOHAND_HOME, "skills")
|
|
25
|
+
skills: _path2.default.join(AUTOHAND_HOME, "skills"),
|
|
26
|
+
/** Plan files for plan mode */
|
|
27
|
+
plans: _path2.default.join(AUTOHAND_HOME, "plans")
|
|
26
28
|
};
|
|
27
29
|
var AUTOHAND_FILES = {
|
|
28
30
|
/** Main config file */
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
|
|
2
2
|
|
|
3
3
|
|
|
4
|
-
var
|
|
4
|
+
var _chunkAQNY2M6Qcjs = require('./chunk-AQNY2M6Q.cjs');
|
|
5
5
|
|
|
6
6
|
// src/memory/MemoryManager.ts
|
|
7
7
|
var _fsextra = require('fs-extra'); var _fsextra2 = _interopRequireDefault(_fsextra);
|
|
@@ -11,13 +11,13 @@ var SIMILARITY_THRESHOLD = 0.6;
|
|
|
11
11
|
var MemoryManager = class {
|
|
12
12
|
constructor(workspaceRoot) {
|
|
13
13
|
this.projectMemoryDir = null;
|
|
14
|
-
this.userMemoryDir =
|
|
14
|
+
this.userMemoryDir = _chunkAQNY2M6Qcjs.AUTOHAND_PATHS.memory;
|
|
15
15
|
if (workspaceRoot) {
|
|
16
|
-
this.projectMemoryDir = _path2.default.join(workspaceRoot,
|
|
16
|
+
this.projectMemoryDir = _path2.default.join(workspaceRoot, _chunkAQNY2M6Qcjs.PROJECT_DIR_NAME, "memory");
|
|
17
17
|
}
|
|
18
18
|
}
|
|
19
19
|
setWorkspace(workspaceRoot) {
|
|
20
|
-
this.projectMemoryDir = _path2.default.join(workspaceRoot,
|
|
20
|
+
this.projectMemoryDir = _path2.default.join(workspaceRoot, _chunkAQNY2M6Qcjs.PROJECT_DIR_NAME, "memory");
|
|
21
21
|
}
|
|
22
22
|
async initialize() {
|
|
23
23
|
await _fsextra2.default.ensureDir(this.userMemoryDir);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
package_default
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-7GJR65DQ.js";
|
|
4
4
|
|
|
5
5
|
// src/commands/status.ts
|
|
6
6
|
import chalk from "chalk";
|
|
@@ -34,7 +34,8 @@ async function gatherStatusData(ctx) {
|
|
|
34
34
|
sessionsCount: allSessions.length,
|
|
35
35
|
contextPercentLeft: ctx.getContextPercentLeft?.() ?? 100,
|
|
36
36
|
totalTokensUsed: ctx.getTotalTokensUsed?.() ?? 0,
|
|
37
|
-
config: ctx.config
|
|
37
|
+
config: ctx.config,
|
|
38
|
+
contextCompactionEnabled: ctx.isContextCompactionEnabled?.() ?? true
|
|
38
39
|
};
|
|
39
40
|
}
|
|
40
41
|
function renderStatusUI(data) {
|
|
@@ -159,6 +160,10 @@ function renderStatusTab(data) {
|
|
|
159
160
|
console.log(chalk.bold("cwd:"), data.cwd);
|
|
160
161
|
console.log(chalk.bold("Provider:"), data.provider);
|
|
161
162
|
console.log(chalk.bold("Model:"), data.model);
|
|
163
|
+
console.log(
|
|
164
|
+
chalk.bold("Context Compaction:"),
|
|
165
|
+
data.contextCompactionEnabled ? chalk.green("ON") : chalk.yellow("OFF")
|
|
166
|
+
);
|
|
162
167
|
console.log();
|
|
163
168
|
console.log(
|
|
164
169
|
chalk.bold("API Status:"),
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } }
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var _chunkAQNY2M6Qcjs = require('./chunk-AQNY2M6Q.cjs');
|
|
4
4
|
|
|
5
5
|
// src/permissions/localProjectPermissions.ts
|
|
6
6
|
var _fsextra = require('fs-extra'); var _fsextra2 = _interopRequireDefault(_fsextra);
|
|
7
7
|
var _path = require('path'); var _path2 = _interopRequireDefault(_path);
|
|
8
8
|
var LOCAL_SETTINGS_FILE = "settings.local.json";
|
|
9
9
|
function getLocalSettingsPath(workspaceRoot) {
|
|
10
|
-
return _path2.default.join(workspaceRoot,
|
|
10
|
+
return _path2.default.join(workspaceRoot, _chunkAQNY2M6Qcjs.PROJECT_DIR_NAME, LOCAL_SETTINGS_FILE);
|
|
11
11
|
}
|
|
12
12
|
async function loadLocalProjectSettings(workspaceRoot) {
|
|
13
13
|
const settingsPath = getLocalSettingsPath(workspaceRoot);
|
|
@@ -1,13 +1,16 @@
|
|
|
1
1
|
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var _chunk5UC3VAJ2cjs = require('./chunk-5UC3VAJ2.cjs');
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
|
|
7
|
+
var _chunkL5QWMGLVcjs = require('./chunk-L5QWMGLV.cjs');
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
var _chunkAQNY2M6Qcjs = require('./chunk-AQNY2M6Q.cjs');
|
|
7
11
|
|
|
8
12
|
// src/commands/share.ts
|
|
9
13
|
var _chalk = require('chalk'); var _chalk2 = _interopRequireDefault(_chalk);
|
|
10
|
-
var _enquirer = require('enquirer'); var _enquirer2 = _interopRequireDefault(_enquirer);
|
|
11
14
|
var _ora = require('ora'); var _ora2 = _interopRequireDefault(_ora);
|
|
12
15
|
|
|
13
16
|
// src/share/costEstimator.ts
|
|
@@ -173,7 +176,7 @@ function serializeSession(session, options) {
|
|
|
173
176
|
const toolUsage = extractToolUsage(messages);
|
|
174
177
|
const gitDiff = options.gitDiff ? parseGitDiff(options.gitDiff) : void 0;
|
|
175
178
|
const client = {
|
|
176
|
-
cliVersion:
|
|
179
|
+
cliVersion: _chunk5UC3VAJ2cjs.package_default.version,
|
|
177
180
|
platform: process.platform,
|
|
178
181
|
deviceId: options.deviceId
|
|
179
182
|
};
|
|
@@ -209,15 +212,15 @@ var DEFAULT_CONFIG = {
|
|
|
209
212
|
// 30s for large payloads
|
|
210
213
|
maxRetries: 3,
|
|
211
214
|
offlineQueue: true,
|
|
212
|
-
cliVersion:
|
|
215
|
+
cliVersion: _chunk5UC3VAJ2cjs.package_default.version
|
|
213
216
|
};
|
|
214
217
|
var ShareApiClient = class {
|
|
215
218
|
constructor(configOverrides) {
|
|
216
219
|
this.deviceId = null;
|
|
217
220
|
this.config = { ...DEFAULT_CONFIG, ...configOverrides };
|
|
218
|
-
const dataDir = _path2.default.join(
|
|
221
|
+
const dataDir = _path2.default.join(_chunkAQNY2M6Qcjs.AUTOHAND_PATHS.config, "share");
|
|
219
222
|
this.queuePath = _path2.default.join(dataDir, "queue.json");
|
|
220
|
-
this.deviceIdPath = _path2.default.join(
|
|
223
|
+
this.deviceIdPath = _path2.default.join(_chunkAQNY2M6Qcjs.AUTOHAND_PATHS.feedback, ".device-id");
|
|
221
224
|
}
|
|
222
225
|
// ============ Device ID ============
|
|
223
226
|
/**
|
|
@@ -488,34 +491,23 @@ async function execute(_args, context) {
|
|
|
488
491
|
);
|
|
489
492
|
console.log(` Duration: ${_chalk2.default.cyan(formatDuration(duration))}`);
|
|
490
493
|
console.log();
|
|
491
|
-
const
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
]
|
|
494
|
+
const visibilityOptions = [
|
|
495
|
+
{ label: "Public - Anyone with the link can view", value: "public" },
|
|
496
|
+
{ label: "Private - Requires one-time passcode", value: "private" }
|
|
497
|
+
];
|
|
498
|
+
const visibilityResult = await _chunkL5QWMGLVcjs.showModal.call(void 0, {
|
|
499
|
+
title: "Share visibility:",
|
|
500
|
+
options: visibilityOptions
|
|
499
501
|
});
|
|
500
|
-
|
|
501
|
-
try {
|
|
502
|
-
visibility = await visibilityPrompt.run();
|
|
503
|
-
} catch (e8) {
|
|
502
|
+
if (!visibilityResult) {
|
|
504
503
|
console.log(_chalk2.default.gray("Cancelled."));
|
|
505
504
|
return;
|
|
506
505
|
}
|
|
507
|
-
const
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
506
|
+
const visibility = visibilityResult.value;
|
|
507
|
+
const confirmed = await _chunkL5QWMGLVcjs.showConfirm.call(void 0, {
|
|
508
|
+
title: `Share this session as ${visibility}?`,
|
|
509
|
+
defaultValue: true
|
|
511
510
|
});
|
|
512
|
-
let confirmed;
|
|
513
|
-
try {
|
|
514
|
-
confirmed = await confirmPrompt.run();
|
|
515
|
-
} catch (e9) {
|
|
516
|
-
console.log(_chalk2.default.gray("Cancelled."));
|
|
517
|
-
return;
|
|
518
|
-
}
|
|
519
511
|
if (!confirmed) {
|
|
520
512
|
console.log(_chalk2.default.gray("Cancelled."));
|
|
521
513
|
return;
|
|
@@ -1,6 +1,9 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
2
|
+
|
|
3
|
+
var _chunkL5QWMGLVcjs = require('./chunk-L5QWMGLV.cjs');
|
|
4
|
+
|
|
5
|
+
// src/commands/completion.ts
|
|
2
6
|
var _chalk = require('chalk'); var _chalk2 = _interopRequireDefault(_chalk);
|
|
3
|
-
var _enquirer = require('enquirer'); var _enquirer2 = _interopRequireDefault(_enquirer);
|
|
4
7
|
|
|
5
8
|
// src/completions/index.ts
|
|
6
9
|
var _fsextra = require('fs-extra'); var _fsextra2 = _interopRequireDefault(_fsextra);
|
|
@@ -276,58 +279,55 @@ async function execute(args) {
|
|
|
276
279
|
if (detected) {
|
|
277
280
|
console.log(_chalk2.default.gray(`Detected shell: ${detected}`));
|
|
278
281
|
}
|
|
279
|
-
const
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
initial: detected || "bash"
|
|
282
|
+
const shellOptions = [
|
|
283
|
+
{ label: "Bash", value: "bash" },
|
|
284
|
+
{ label: "Zsh", value: "zsh" },
|
|
285
|
+
{ label: "Fish", value: "fish" }
|
|
286
|
+
];
|
|
287
|
+
const shellResult = await _chunkL5QWMGLVcjs.showModal.call(void 0, {
|
|
288
|
+
title: "Select your shell:",
|
|
289
|
+
options: shellOptions,
|
|
290
|
+
initialIndex: shellOptions.findIndex((o) => o.value === (detected || "bash"))
|
|
289
291
|
});
|
|
290
|
-
|
|
291
|
-
shell = await prompt.run();
|
|
292
|
-
} catch (e) {
|
|
292
|
+
if (!shellResult) {
|
|
293
293
|
console.log(_chalk2.default.gray("Cancelled."));
|
|
294
294
|
return;
|
|
295
295
|
}
|
|
296
|
+
shell = shellResult.value;
|
|
296
297
|
}
|
|
297
|
-
const
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
]
|
|
298
|
+
const actionOptions = [
|
|
299
|
+
{ label: "Print completion script to terminal", value: "print" },
|
|
300
|
+
{ label: "Install completion to default location", value: "install" },
|
|
301
|
+
{ label: "Show installation instructions", value: "instructions" }
|
|
302
|
+
];
|
|
303
|
+
const actionResult = await _chunkL5QWMGLVcjs.showModal.call(void 0, {
|
|
304
|
+
title: "What would you like to do?",
|
|
305
|
+
options: actionOptions
|
|
306
306
|
});
|
|
307
|
-
|
|
308
|
-
const action = await actionPrompt.run();
|
|
309
|
-
switch (action) {
|
|
310
|
-
case "print":
|
|
311
|
-
console.log();
|
|
312
|
-
console.log(_chalk2.default.cyan(`# ${shell} completion script for autohand`));
|
|
313
|
-
console.log(_chalk2.default.cyan("# Copy and save to appropriate location"));
|
|
314
|
-
console.log();
|
|
315
|
-
console.log(generateCompletion(shell));
|
|
316
|
-
break;
|
|
317
|
-
case "install":
|
|
318
|
-
const installPath = await installCompletion(shell);
|
|
319
|
-
console.log();
|
|
320
|
-
console.log(_chalk2.default.green("Completion script installed to:"));
|
|
321
|
-
console.log(_chalk2.default.cyan(` ${installPath}`));
|
|
322
|
-
console.log();
|
|
323
|
-
console.log(getInstallInstructions(shell));
|
|
324
|
-
break;
|
|
325
|
-
case "instructions":
|
|
326
|
-
console.log(getInstallInstructions(shell));
|
|
327
|
-
break;
|
|
328
|
-
}
|
|
329
|
-
} catch (e2) {
|
|
307
|
+
if (!actionResult) {
|
|
330
308
|
console.log(_chalk2.default.gray("Cancelled."));
|
|
309
|
+
return;
|
|
310
|
+
}
|
|
311
|
+
const action = actionResult.value;
|
|
312
|
+
switch (action) {
|
|
313
|
+
case "print":
|
|
314
|
+
console.log();
|
|
315
|
+
console.log(_chalk2.default.cyan(`# ${shell} completion script for autohand`));
|
|
316
|
+
console.log(_chalk2.default.cyan("# Copy and save to appropriate location"));
|
|
317
|
+
console.log();
|
|
318
|
+
console.log(generateCompletion(shell));
|
|
319
|
+
break;
|
|
320
|
+
case "install":
|
|
321
|
+
const installPath = await installCompletion(shell);
|
|
322
|
+
console.log();
|
|
323
|
+
console.log(_chalk2.default.green("Completion script installed to:"));
|
|
324
|
+
console.log(_chalk2.default.cyan(` ${installPath}`));
|
|
325
|
+
console.log();
|
|
326
|
+
console.log(getInstallInstructions(shell));
|
|
327
|
+
break;
|
|
328
|
+
case "instructions":
|
|
329
|
+
console.log(getInstallInstructions(shell));
|
|
330
|
+
break;
|
|
331
331
|
}
|
|
332
332
|
}
|
|
333
333
|
async function runCompletionCommand(shell) {
|
|
@@ -5,6 +5,7 @@ var DEFAULT_MAX_FILE_SIZE = 10 * 1024 * 1024;
|
|
|
5
5
|
var DEFAULT_MAX_TOTAL_SIZE = 100 * 1024 * 1024;
|
|
6
6
|
var DEFAULT_MAX_RETRIES = 3;
|
|
7
7
|
var DEFAULT_RETRY_DELAY = 1e3;
|
|
8
|
+
var MAX_FILES_PER_REQUEST = 100;
|
|
8
9
|
var SyncApiClient = class {
|
|
9
10
|
constructor(config) {
|
|
10
11
|
this.baseUrl = _optionalChain([config, 'optionalAccess', _ => _.baseUrl]) || DEFAULT_BASE_URL;
|
|
@@ -89,29 +90,41 @@ var SyncApiClient = class {
|
|
|
89
90
|
}
|
|
90
91
|
/**
|
|
91
92
|
* Upload sync manifest and request pre-signed URLs for file uploads
|
|
93
|
+
* Batches requests to stay within API limits (max 100 files per request)
|
|
92
94
|
*/
|
|
93
95
|
async initiateUpload(token, manifest, filePaths) {
|
|
94
|
-
const
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
96
|
+
const batches = [];
|
|
97
|
+
for (let i = 0; i < filePaths.length; i += MAX_FILES_PER_REQUEST) {
|
|
98
|
+
batches.push(filePaths.slice(i, i + MAX_FILES_PER_REQUEST));
|
|
99
|
+
}
|
|
100
|
+
const allUploadUrls = {};
|
|
101
|
+
for (let batchIndex = 0; batchIndex < batches.length; batchIndex++) {
|
|
102
|
+
const batch = batches[batchIndex];
|
|
103
|
+
const response = await this.fetchWithRetry(
|
|
104
|
+
`${this.baseUrl}/v1/sync/upload`,
|
|
105
|
+
{
|
|
106
|
+
method: "POST",
|
|
107
|
+
headers: {
|
|
108
|
+
Authorization: `Bearer ${token}`,
|
|
109
|
+
"Content-Type": "application/json"
|
|
110
|
+
},
|
|
111
|
+
body: JSON.stringify({
|
|
112
|
+
// Only include manifest on first batch
|
|
113
|
+
...batchIndex === 0 ? { manifest } : {},
|
|
114
|
+
files: batch
|
|
115
|
+
})
|
|
116
|
+
}
|
|
117
|
+
);
|
|
118
|
+
if (!response.ok) {
|
|
119
|
+
const error = await response.text().catch(() => "Unknown error");
|
|
120
|
+
throw new Error(`API error: ${response.status} ${error}`);
|
|
106
121
|
}
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
throw new Error(`API error: ${response.status} ${error}`);
|
|
122
|
+
const data = await response.json();
|
|
123
|
+
const batchUrls = data.uploadUrls || {};
|
|
124
|
+
Object.assign(allUploadUrls, batchUrls);
|
|
111
125
|
}
|
|
112
|
-
const data = await response.json();
|
|
113
126
|
return {
|
|
114
|
-
uploadUrls:
|
|
127
|
+
uploadUrls: allUploadUrls
|
|
115
128
|
};
|
|
116
129
|
}
|
|
117
130
|
/**
|
|
@@ -180,26 +193,36 @@ var SyncApiClient = class {
|
|
|
180
193
|
}
|
|
181
194
|
/**
|
|
182
195
|
* Request pre-signed URLs for file downloads
|
|
196
|
+
* Batches requests to stay within API limits (max 100 files per request)
|
|
183
197
|
*/
|
|
184
198
|
async initiateDownload(token, filePaths) {
|
|
185
|
-
const
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
}
|
|
193
|
-
|
|
199
|
+
const batches = [];
|
|
200
|
+
for (let i = 0; i < filePaths.length; i += MAX_FILES_PER_REQUEST) {
|
|
201
|
+
batches.push(filePaths.slice(i, i + MAX_FILES_PER_REQUEST));
|
|
202
|
+
}
|
|
203
|
+
const allDownloadUrls = {};
|
|
204
|
+
for (const batch of batches) {
|
|
205
|
+
const response = await this.fetchWithRetry(
|
|
206
|
+
`${this.baseUrl}/v1/sync/download`,
|
|
207
|
+
{
|
|
208
|
+
method: "POST",
|
|
209
|
+
headers: {
|
|
210
|
+
Authorization: `Bearer ${token}`,
|
|
211
|
+
"Content-Type": "application/json"
|
|
212
|
+
},
|
|
213
|
+
body: JSON.stringify({ files: batch })
|
|
214
|
+
}
|
|
215
|
+
);
|
|
216
|
+
if (!response.ok) {
|
|
217
|
+
const error = await response.text().catch(() => "Unknown error");
|
|
218
|
+
throw new Error(`API error: ${response.status} ${error}`);
|
|
194
219
|
}
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
throw new Error(`API error: ${response.status} ${error}`);
|
|
220
|
+
const data = await response.json();
|
|
221
|
+
const batchUrls = data.downloadUrls || {};
|
|
222
|
+
Object.assign(allDownloadUrls, batchUrls);
|
|
199
223
|
}
|
|
200
|
-
const data = await response.json();
|
|
201
224
|
return {
|
|
202
|
-
downloadUrls:
|
|
225
|
+
downloadUrls: allDownloadUrls
|
|
203
226
|
};
|
|
204
227
|
}
|
|
205
228
|
/**
|