@hasna/assistants 0.6.25 → 0.6.27
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/index.js +261 -187
- package/dist/index.js.map +12 -12
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -18167,6 +18167,40 @@ var require_tiktoken_bg = __commonJS((exports, module) => {
|
|
|
18167
18167
|
};
|
|
18168
18168
|
});
|
|
18169
18169
|
|
|
18170
|
+
// node_modules/.pnpm/tiktoken@1.0.22/node_modules/tiktoken/tiktoken.cjs
|
|
18171
|
+
var require_tiktoken = __commonJS((exports) => {
|
|
18172
|
+
var __dirname = "/Users/hasna/Workspace/dev/hasna/opensource/opensourcedev/opensource-oldpal/node_modules/.pnpm/tiktoken@1.0.22/node_modules/tiktoken";
|
|
18173
|
+
var wasm = require_tiktoken_bg();
|
|
18174
|
+
var imports = {};
|
|
18175
|
+
imports["./tiktoken_bg.js"] = wasm;
|
|
18176
|
+
var path = __require("path");
|
|
18177
|
+
var fs2 = __require("fs");
|
|
18178
|
+
var candidates = __dirname.split(path.sep).reduce((memo, _, index, array) => {
|
|
18179
|
+
const prefix = array.slice(0, index + 1).join(path.sep) + path.sep;
|
|
18180
|
+
if (!prefix.includes("node_modules" + path.sep)) {
|
|
18181
|
+
memo.unshift(path.join(prefix, "node_modules", "tiktoken", "", "./tiktoken_bg.wasm"));
|
|
18182
|
+
}
|
|
18183
|
+
return memo;
|
|
18184
|
+
}, []);
|
|
18185
|
+
candidates.unshift(path.join(__dirname, "./tiktoken_bg.wasm"));
|
|
18186
|
+
var bytes = null;
|
|
18187
|
+
for (const candidate of candidates) {
|
|
18188
|
+
try {
|
|
18189
|
+
bytes = fs2.readFileSync(candidate);
|
|
18190
|
+
break;
|
|
18191
|
+
} catch {}
|
|
18192
|
+
}
|
|
18193
|
+
if (bytes == null)
|
|
18194
|
+
throw new Error("Missing tiktoken_bg.wasm");
|
|
18195
|
+
var wasmModule = new WebAssembly.Module(bytes);
|
|
18196
|
+
var wasmInstance = new WebAssembly.Instance(wasmModule, imports);
|
|
18197
|
+
wasm.__wbg_set_wasm(wasmInstance.exports);
|
|
18198
|
+
exports.get_encoding = wasm["get_encoding"];
|
|
18199
|
+
exports.encoding_for_model = wasm["encoding_for_model"];
|
|
18200
|
+
exports.get_encoding_name_for_model = wasm["get_encoding_name_for_model"];
|
|
18201
|
+
exports.Tiktoken = wasm["Tiktoken"];
|
|
18202
|
+
});
|
|
18203
|
+
|
|
18170
18204
|
// packages/core/src/errors/codes.ts
|
|
18171
18205
|
var ErrorCodes;
|
|
18172
18206
|
var init_codes = __esm(() => {
|
|
@@ -21456,8 +21490,8 @@ var require_utils = __commonJS((exports, module) => {
|
|
|
21456
21490
|
}
|
|
21457
21491
|
return ind;
|
|
21458
21492
|
}
|
|
21459
|
-
function removeDotSegments(
|
|
21460
|
-
let input =
|
|
21493
|
+
function removeDotSegments(path) {
|
|
21494
|
+
let input = path;
|
|
21461
21495
|
const output = [];
|
|
21462
21496
|
let nextSlash = -1;
|
|
21463
21497
|
let len = 0;
|
|
@@ -21647,8 +21681,8 @@ var require_schemes = __commonJS((exports, module) => {
|
|
|
21647
21681
|
wsComponent.secure = undefined;
|
|
21648
21682
|
}
|
|
21649
21683
|
if (wsComponent.resourceName) {
|
|
21650
|
-
const [
|
|
21651
|
-
wsComponent.path =
|
|
21684
|
+
const [path, query] = wsComponent.resourceName.split("?");
|
|
21685
|
+
wsComponent.path = path && path !== "/" ? path : undefined;
|
|
21652
21686
|
wsComponent.query = query;
|
|
21653
21687
|
wsComponent.resourceName = undefined;
|
|
21654
21688
|
}
|
|
@@ -24931,9 +24965,9 @@ function encodeUTF8(str) {
|
|
|
24931
24965
|
let encoder;
|
|
24932
24966
|
return (encodeUTF8_ ?? (encoder = new globalThis.TextEncoder, encodeUTF8_ = encoder.encode.bind(encoder)))(str);
|
|
24933
24967
|
}
|
|
24934
|
-
function decodeUTF8(
|
|
24968
|
+
function decodeUTF8(bytes) {
|
|
24935
24969
|
let decoder;
|
|
24936
|
-
return (decodeUTF8_ ?? (decoder = new globalThis.TextDecoder, decodeUTF8_ = decoder.decode.bind(decoder)))(
|
|
24970
|
+
return (decodeUTF8_ ?? (decoder = new globalThis.TextDecoder, decodeUTF8_ = decoder.decode.bind(decoder)))(bytes);
|
|
24937
24971
|
}
|
|
24938
24972
|
var encodeUTF8_, decodeUTF8_;
|
|
24939
24973
|
|
|
@@ -25324,9 +25358,9 @@ var init_streaming = __esm(() => {
|
|
|
25324
25358
|
const { value, done } = await iter.next();
|
|
25325
25359
|
if (done)
|
|
25326
25360
|
return ctrl.close();
|
|
25327
|
-
const
|
|
25361
|
+
const bytes = encodeUTF8(JSON.stringify(value) + `
|
|
25328
25362
|
`);
|
|
25329
|
-
ctrl.enqueue(
|
|
25363
|
+
ctrl.enqueue(bytes);
|
|
25330
25364
|
} catch (err) {
|
|
25331
25365
|
ctrl.error(err);
|
|
25332
25366
|
}
|
|
@@ -25833,7 +25867,7 @@ var EMPTY, createPathTagFunction = (pathEncoder = encodeURIPath) => function pat
|
|
|
25833
25867
|
return statics[0];
|
|
25834
25868
|
let postPath = false;
|
|
25835
25869
|
const invalidSegments = [];
|
|
25836
|
-
const
|
|
25870
|
+
const path = statics.reduce((previousValue, currentValue, index) => {
|
|
25837
25871
|
if (/[?#]/.test(currentValue)) {
|
|
25838
25872
|
postPath = true;
|
|
25839
25873
|
}
|
|
@@ -25849,7 +25883,7 @@ var EMPTY, createPathTagFunction = (pathEncoder = encodeURIPath) => function pat
|
|
|
25849
25883
|
}
|
|
25850
25884
|
return previousValue + currentValue + (index === params.length ? "" : encoded);
|
|
25851
25885
|
}, "");
|
|
25852
|
-
const pathOnly =
|
|
25886
|
+
const pathOnly = path.split(/[?#]/, 1)[0];
|
|
25853
25887
|
const invalidSegmentPattern = /(?<=^|\/)(?:\.|%2e){1,2}(?=\/|$)/gi;
|
|
25854
25888
|
let match;
|
|
25855
25889
|
while ((match = invalidSegmentPattern.exec(pathOnly)) !== null) {
|
|
@@ -25871,15 +25905,15 @@ var EMPTY, createPathTagFunction = (pathEncoder = encodeURIPath) => function pat
|
|
|
25871
25905
|
throw new AnthropicError(`Path parameters result in path with invalid segments:
|
|
25872
25906
|
${invalidSegments.map((e) => e.error).join(`
|
|
25873
25907
|
`)}
|
|
25874
|
-
${
|
|
25908
|
+
${path}
|
|
25875
25909
|
${underline}`);
|
|
25876
25910
|
}
|
|
25877
|
-
return
|
|
25878
|
-
},
|
|
25911
|
+
return path;
|
|
25912
|
+
}, path;
|
|
25879
25913
|
var init_path = __esm(() => {
|
|
25880
25914
|
init_error();
|
|
25881
25915
|
EMPTY = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.create(null));
|
|
25882
|
-
|
|
25916
|
+
path = /* @__PURE__ */ createPathTagFunction(encodeURIPath);
|
|
25883
25917
|
});
|
|
25884
25918
|
|
|
25885
25919
|
// node_modules/.pnpm/@anthropic-ai+sdk@0.72.1/node_modules/@anthropic-ai/sdk/resources/beta/files.mjs
|
|
@@ -25904,7 +25938,7 @@ var init_files = __esm(() => {
|
|
|
25904
25938
|
}
|
|
25905
25939
|
delete(fileID, params = {}, options) {
|
|
25906
25940
|
const { betas } = params ?? {};
|
|
25907
|
-
return this._client.delete(
|
|
25941
|
+
return this._client.delete(path`/v1/files/${fileID}`, {
|
|
25908
25942
|
...options,
|
|
25909
25943
|
headers: buildHeaders([
|
|
25910
25944
|
{ "anthropic-beta": [...betas ?? [], "files-api-2025-04-14"].toString() },
|
|
@@ -25914,7 +25948,7 @@ var init_files = __esm(() => {
|
|
|
25914
25948
|
}
|
|
25915
25949
|
download(fileID, params = {}, options) {
|
|
25916
25950
|
const { betas } = params ?? {};
|
|
25917
|
-
return this._client.get(
|
|
25951
|
+
return this._client.get(path`/v1/files/${fileID}/content`, {
|
|
25918
25952
|
...options,
|
|
25919
25953
|
headers: buildHeaders([
|
|
25920
25954
|
{
|
|
@@ -25928,7 +25962,7 @@ var init_files = __esm(() => {
|
|
|
25928
25962
|
}
|
|
25929
25963
|
retrieveMetadata(fileID, params = {}, options) {
|
|
25930
25964
|
const { betas } = params ?? {};
|
|
25931
|
-
return this._client.get(
|
|
25965
|
+
return this._client.get(path`/v1/files/${fileID}`, {
|
|
25932
25966
|
...options,
|
|
25933
25967
|
headers: buildHeaders([
|
|
25934
25968
|
{ "anthropic-beta": [...betas ?? [], "files-api-2025-04-14"].toString() },
|
|
@@ -25960,7 +25994,7 @@ var init_models = __esm(() => {
|
|
|
25960
25994
|
Models = class Models extends APIResource {
|
|
25961
25995
|
retrieve(modelID, params = {}, options) {
|
|
25962
25996
|
const { betas } = params ?? {};
|
|
25963
|
-
return this._client.get(
|
|
25997
|
+
return this._client.get(path`/v1/models/${modelID}?beta=true`, {
|
|
25964
25998
|
...options,
|
|
25965
25999
|
headers: buildHeaders([
|
|
25966
26000
|
{ ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : undefined },
|
|
@@ -27171,7 +27205,7 @@ var init_batches = __esm(() => {
|
|
|
27171
27205
|
}
|
|
27172
27206
|
retrieve(messageBatchID, params = {}, options) {
|
|
27173
27207
|
const { betas } = params ?? {};
|
|
27174
|
-
return this._client.get(
|
|
27208
|
+
return this._client.get(path`/v1/messages/batches/${messageBatchID}?beta=true`, {
|
|
27175
27209
|
...options,
|
|
27176
27210
|
headers: buildHeaders([
|
|
27177
27211
|
{ "anthropic-beta": [...betas ?? [], "message-batches-2024-09-24"].toString() },
|
|
@@ -27192,7 +27226,7 @@ var init_batches = __esm(() => {
|
|
|
27192
27226
|
}
|
|
27193
27227
|
delete(messageBatchID, params = {}, options) {
|
|
27194
27228
|
const { betas } = params ?? {};
|
|
27195
|
-
return this._client.delete(
|
|
27229
|
+
return this._client.delete(path`/v1/messages/batches/${messageBatchID}?beta=true`, {
|
|
27196
27230
|
...options,
|
|
27197
27231
|
headers: buildHeaders([
|
|
27198
27232
|
{ "anthropic-beta": [...betas ?? [], "message-batches-2024-09-24"].toString() },
|
|
@@ -27202,7 +27236,7 @@ var init_batches = __esm(() => {
|
|
|
27202
27236
|
}
|
|
27203
27237
|
cancel(messageBatchID, params = {}, options) {
|
|
27204
27238
|
const { betas } = params ?? {};
|
|
27205
|
-
return this._client.post(
|
|
27239
|
+
return this._client.post(path`/v1/messages/batches/${messageBatchID}/cancel?beta=true`, {
|
|
27206
27240
|
...options,
|
|
27207
27241
|
headers: buildHeaders([
|
|
27208
27242
|
{ "anthropic-beta": [...betas ?? [], "message-batches-2024-09-24"].toString() },
|
|
@@ -27350,7 +27384,7 @@ var init_versions = __esm(() => {
|
|
|
27350
27384
|
Versions = class Versions extends APIResource {
|
|
27351
27385
|
create(skillID, params = {}, options) {
|
|
27352
27386
|
const { betas, ...body } = params ?? {};
|
|
27353
|
-
return this._client.post(
|
|
27387
|
+
return this._client.post(path`/v1/skills/${skillID}/versions?beta=true`, multipartFormRequestOptions({
|
|
27354
27388
|
body,
|
|
27355
27389
|
...options,
|
|
27356
27390
|
headers: buildHeaders([
|
|
@@ -27361,7 +27395,7 @@ var init_versions = __esm(() => {
|
|
|
27361
27395
|
}
|
|
27362
27396
|
retrieve(version, params, options) {
|
|
27363
27397
|
const { skill_id, betas } = params;
|
|
27364
|
-
return this._client.get(
|
|
27398
|
+
return this._client.get(path`/v1/skills/${skill_id}/versions/${version}?beta=true`, {
|
|
27365
27399
|
...options,
|
|
27366
27400
|
headers: buildHeaders([
|
|
27367
27401
|
{ "anthropic-beta": [...betas ?? [], "skills-2025-10-02"].toString() },
|
|
@@ -27371,7 +27405,7 @@ var init_versions = __esm(() => {
|
|
|
27371
27405
|
}
|
|
27372
27406
|
list(skillID, params = {}, options) {
|
|
27373
27407
|
const { betas, ...query } = params ?? {};
|
|
27374
|
-
return this._client.getAPIList(
|
|
27408
|
+
return this._client.getAPIList(path`/v1/skills/${skillID}/versions?beta=true`, PageCursor, {
|
|
27375
27409
|
query,
|
|
27376
27410
|
...options,
|
|
27377
27411
|
headers: buildHeaders([
|
|
@@ -27382,7 +27416,7 @@ var init_versions = __esm(() => {
|
|
|
27382
27416
|
}
|
|
27383
27417
|
delete(version, params, options) {
|
|
27384
27418
|
const { skill_id, betas } = params;
|
|
27385
|
-
return this._client.delete(
|
|
27419
|
+
return this._client.delete(path`/v1/skills/${skill_id}/versions/${version}?beta=true`, {
|
|
27386
27420
|
...options,
|
|
27387
27421
|
headers: buildHeaders([
|
|
27388
27422
|
{ "anthropic-beta": [...betas ?? [], "skills-2025-10-02"].toString() },
|
|
@@ -27420,7 +27454,7 @@ var init_skills = __esm(() => {
|
|
|
27420
27454
|
}
|
|
27421
27455
|
retrieve(skillID, params = {}, options) {
|
|
27422
27456
|
const { betas } = params ?? {};
|
|
27423
|
-
return this._client.get(
|
|
27457
|
+
return this._client.get(path`/v1/skills/${skillID}?beta=true`, {
|
|
27424
27458
|
...options,
|
|
27425
27459
|
headers: buildHeaders([
|
|
27426
27460
|
{ "anthropic-beta": [...betas ?? [], "skills-2025-10-02"].toString() },
|
|
@@ -27441,7 +27475,7 @@ var init_skills = __esm(() => {
|
|
|
27441
27475
|
}
|
|
27442
27476
|
delete(skillID, params = {}, options) {
|
|
27443
27477
|
const { betas } = params ?? {};
|
|
27444
|
-
return this._client.delete(
|
|
27478
|
+
return this._client.delete(path`/v1/skills/${skillID}?beta=true`, {
|
|
27445
27479
|
...options,
|
|
27446
27480
|
headers: buildHeaders([
|
|
27447
27481
|
{ "anthropic-beta": [...betas ?? [], "skills-2025-10-02"].toString() },
|
|
@@ -28086,16 +28120,16 @@ var init_batches2 = __esm(() => {
|
|
|
28086
28120
|
return this._client.post("/v1/messages/batches", { body, ...options });
|
|
28087
28121
|
}
|
|
28088
28122
|
retrieve(messageBatchID, options) {
|
|
28089
|
-
return this._client.get(
|
|
28123
|
+
return this._client.get(path`/v1/messages/batches/${messageBatchID}`, options);
|
|
28090
28124
|
}
|
|
28091
28125
|
list(query = {}, options) {
|
|
28092
28126
|
return this._client.getAPIList("/v1/messages/batches", Page, { query, ...options });
|
|
28093
28127
|
}
|
|
28094
28128
|
delete(messageBatchID, options) {
|
|
28095
|
-
return this._client.delete(
|
|
28129
|
+
return this._client.delete(path`/v1/messages/batches/${messageBatchID}`, options);
|
|
28096
28130
|
}
|
|
28097
28131
|
cancel(messageBatchID, options) {
|
|
28098
|
-
return this._client.post(
|
|
28132
|
+
return this._client.post(path`/v1/messages/batches/${messageBatchID}/cancel`, options);
|
|
28099
28133
|
}
|
|
28100
28134
|
async results(messageBatchID, options) {
|
|
28101
28135
|
const batch = await this.retrieve(messageBatchID);
|
|
@@ -28183,7 +28217,7 @@ var init_models2 = __esm(() => {
|
|
|
28183
28217
|
Models2 = class Models2 extends APIResource {
|
|
28184
28218
|
retrieve(modelID, params = {}, options) {
|
|
28185
28219
|
const { betas } = params ?? {};
|
|
28186
|
-
return this._client.get(
|
|
28220
|
+
return this._client.get(path`/v1/models/${modelID}`, {
|
|
28187
28221
|
...options,
|
|
28188
28222
|
headers: buildHeaders([
|
|
28189
28223
|
{ ...betas?.toString() != null ? { "anthropic-beta": betas?.toString() } : undefined },
|
|
@@ -28332,9 +28366,9 @@ new Anthropic({ apiKey, dangerouslyAllowBrowser: true });
|
|
|
28332
28366
|
makeStatusError(status, error2, message, headers) {
|
|
28333
28367
|
return APIError.generate(status, error2, message, headers);
|
|
28334
28368
|
}
|
|
28335
|
-
buildURL(
|
|
28369
|
+
buildURL(path2, query, defaultBaseURL) {
|
|
28336
28370
|
const baseURL = !__classPrivateFieldGet(this, _BaseAnthropic_instances, "m", _BaseAnthropic_baseURLOverridden).call(this) && defaultBaseURL || this.baseURL;
|
|
28337
|
-
const url = isAbsoluteURL(
|
|
28371
|
+
const url = isAbsoluteURL(path2) ? new URL(path2) : new URL(baseURL + (baseURL.endsWith("/") && path2.startsWith("/") ? path2.slice(1) : path2));
|
|
28338
28372
|
const defaultQuery = this.defaultQuery();
|
|
28339
28373
|
if (!isEmptyObj(defaultQuery)) {
|
|
28340
28374
|
query = { ...defaultQuery, ...query };
|
|
@@ -28354,24 +28388,24 @@ new Anthropic({ apiKey, dangerouslyAllowBrowser: true });
|
|
|
28354
28388
|
}
|
|
28355
28389
|
async prepareOptions(options) {}
|
|
28356
28390
|
async prepareRequest(request, { url, options }) {}
|
|
28357
|
-
get(
|
|
28358
|
-
return this.methodRequest("get",
|
|
28391
|
+
get(path2, opts) {
|
|
28392
|
+
return this.methodRequest("get", path2, opts);
|
|
28359
28393
|
}
|
|
28360
|
-
post(
|
|
28361
|
-
return this.methodRequest("post",
|
|
28394
|
+
post(path2, opts) {
|
|
28395
|
+
return this.methodRequest("post", path2, opts);
|
|
28362
28396
|
}
|
|
28363
|
-
patch(
|
|
28364
|
-
return this.methodRequest("patch",
|
|
28397
|
+
patch(path2, opts) {
|
|
28398
|
+
return this.methodRequest("patch", path2, opts);
|
|
28365
28399
|
}
|
|
28366
|
-
put(
|
|
28367
|
-
return this.methodRequest("put",
|
|
28400
|
+
put(path2, opts) {
|
|
28401
|
+
return this.methodRequest("put", path2, opts);
|
|
28368
28402
|
}
|
|
28369
|
-
delete(
|
|
28370
|
-
return this.methodRequest("delete",
|
|
28403
|
+
delete(path2, opts) {
|
|
28404
|
+
return this.methodRequest("delete", path2, opts);
|
|
28371
28405
|
}
|
|
28372
|
-
methodRequest(method,
|
|
28406
|
+
methodRequest(method, path2, opts) {
|
|
28373
28407
|
return this.request(Promise.resolve(opts).then((opts2) => {
|
|
28374
|
-
return { method, path:
|
|
28408
|
+
return { method, path: path2, ...opts2 };
|
|
28375
28409
|
}));
|
|
28376
28410
|
}
|
|
28377
28411
|
request(options, remainingRetries = null) {
|
|
@@ -28475,8 +28509,8 @@ new Anthropic({ apiKey, dangerouslyAllowBrowser: true });
|
|
|
28475
28509
|
}));
|
|
28476
28510
|
return { response, options, controller, requestLogID, retryOfRequestLogID, startTime };
|
|
28477
28511
|
}
|
|
28478
|
-
getAPIList(
|
|
28479
|
-
return this.requestAPIList(Page2, { method: "get", path:
|
|
28512
|
+
getAPIList(path2, Page2, opts) {
|
|
28513
|
+
return this.requestAPIList(Page2, { method: "get", path: path2, ...opts });
|
|
28480
28514
|
}
|
|
28481
28515
|
requestAPIList(Page2, options) {
|
|
28482
28516
|
const request = this.makeRequest(options, null, undefined);
|
|
@@ -28563,8 +28597,8 @@ new Anthropic({ apiKey, dangerouslyAllowBrowser: true });
|
|
|
28563
28597
|
}
|
|
28564
28598
|
async buildRequest(inputOptions, { retryCount = 0 } = {}) {
|
|
28565
28599
|
const options = { ...inputOptions };
|
|
28566
|
-
const { method, path:
|
|
28567
|
-
const url = this.buildURL(
|
|
28600
|
+
const { method, path: path2, query, defaultBaseURL } = options;
|
|
28601
|
+
const url = this.buildURL(path2, query, defaultBaseURL);
|
|
28568
28602
|
if ("timeout" in options)
|
|
28569
28603
|
validatePositiveInteger("timeout", options.timeout);
|
|
28570
28604
|
options.timeout = options.timeout ?? this.timeout;
|
|
@@ -37129,52 +37163,34 @@ class AgentContext {
|
|
|
37129
37163
|
// packages/core/src/context/manager.ts
|
|
37130
37164
|
init_src();
|
|
37131
37165
|
|
|
37132
|
-
// node_modules/.pnpm/tiktoken@1.0.22/node_modules/tiktoken/tiktoken.cjs
|
|
37133
|
-
var __dirname = "/Users/hasna/Workspace/dev/hasna/opensource/opensourcedev/opensource-oldpal/node_modules/.pnpm/tiktoken@1.0.22/node_modules/tiktoken";
|
|
37134
|
-
var wasm = require_tiktoken_bg();
|
|
37135
|
-
var imports = {};
|
|
37136
|
-
imports["./tiktoken_bg.js"] = wasm;
|
|
37137
|
-
var path = __require("path");
|
|
37138
|
-
var fs2 = __require("fs");
|
|
37139
|
-
var candidates = __dirname.split(path.sep).reduce((memo, _, index, array) => {
|
|
37140
|
-
const prefix = array.slice(0, index + 1).join(path.sep) + path.sep;
|
|
37141
|
-
if (!prefix.includes("node_modules" + path.sep)) {
|
|
37142
|
-
memo.unshift(path.join(prefix, "node_modules", "tiktoken", "", "./tiktoken_bg.wasm"));
|
|
37143
|
-
}
|
|
37144
|
-
return memo;
|
|
37145
|
-
}, []);
|
|
37146
|
-
candidates.unshift(path.join(__dirname, "./tiktoken_bg.wasm"));
|
|
37147
|
-
var bytes = null;
|
|
37148
|
-
for (const candidate of candidates) {
|
|
37149
|
-
try {
|
|
37150
|
-
bytes = fs2.readFileSync(candidate);
|
|
37151
|
-
break;
|
|
37152
|
-
} catch {}
|
|
37153
|
-
}
|
|
37154
|
-
if (bytes == null)
|
|
37155
|
-
throw new Error("Missing tiktoken_bg.wasm");
|
|
37156
|
-
var wasmModule = new WebAssembly.Module(bytes);
|
|
37157
|
-
var wasmInstance = new WebAssembly.Instance(wasmModule, imports);
|
|
37158
|
-
wasm.__wbg_set_wasm(wasmInstance.exports);
|
|
37159
|
-
var $get_encoding = wasm["get_encoding"];
|
|
37160
|
-
var $encoding_for_model = wasm["encoding_for_model"];
|
|
37161
|
-
var $get_encoding_name_for_model = wasm["get_encoding_name_for_model"];
|
|
37162
|
-
var $Tiktoken = wasm["Tiktoken"];
|
|
37163
|
-
|
|
37164
37166
|
// packages/core/src/context/token-counter.ts
|
|
37165
|
-
var DEFAULT_MODEL = "gpt-4";
|
|
37166
37167
|
var MESSAGE_OVERHEAD_TOKENS = 4;
|
|
37168
|
+
var CHARS_PER_TOKEN = 4;
|
|
37169
|
+
var tiktokenEncoder = null;
|
|
37170
|
+
var tiktokenLoadAttempted = false;
|
|
37171
|
+
function loadTiktoken() {
|
|
37172
|
+
if (tiktokenLoadAttempted)
|
|
37173
|
+
return tiktokenEncoder;
|
|
37174
|
+
tiktokenLoadAttempted = true;
|
|
37175
|
+
try {
|
|
37176
|
+
const tiktoken = require_tiktoken();
|
|
37177
|
+
try {
|
|
37178
|
+
tiktokenEncoder = tiktoken.encoding_for_model("gpt-4");
|
|
37179
|
+
} catch {
|
|
37180
|
+
tiktokenEncoder = tiktoken.get_encoding("cl100k_base");
|
|
37181
|
+
}
|
|
37182
|
+
} catch (error) {
|
|
37183
|
+
console.warn("Token counting using estimation (tiktoken unavailable)");
|
|
37184
|
+
tiktokenEncoder = null;
|
|
37185
|
+
}
|
|
37186
|
+
return tiktokenEncoder;
|
|
37187
|
+
}
|
|
37167
37188
|
|
|
37168
37189
|
class TokenCounter {
|
|
37169
|
-
encoder;
|
|
37170
37190
|
cache = new Map;
|
|
37171
37191
|
maxCacheEntries = 1e4;
|
|
37172
|
-
constructor(
|
|
37173
|
-
|
|
37174
|
-
this.encoder = $encoding_for_model(model);
|
|
37175
|
-
} catch {
|
|
37176
|
-
this.encoder = $get_encoding("cl100k_base");
|
|
37177
|
-
}
|
|
37192
|
+
constructor(_model) {
|
|
37193
|
+
loadTiktoken();
|
|
37178
37194
|
}
|
|
37179
37195
|
count(text) {
|
|
37180
37196
|
if (!text)
|
|
@@ -37182,7 +37198,13 @@ class TokenCounter {
|
|
|
37182
37198
|
const cached = this.cache.get(text);
|
|
37183
37199
|
if (cached !== undefined)
|
|
37184
37200
|
return cached;
|
|
37185
|
-
|
|
37201
|
+
let tokens;
|
|
37202
|
+
const encoder = loadTiktoken();
|
|
37203
|
+
if (encoder) {
|
|
37204
|
+
tokens = encoder.encode(text).length;
|
|
37205
|
+
} else {
|
|
37206
|
+
tokens = Math.ceil(text.length / CHARS_PER_TOKEN);
|
|
37207
|
+
}
|
|
37186
37208
|
if (text.length < 1e4) {
|
|
37187
37209
|
this.cache.set(text, tokens);
|
|
37188
37210
|
if (this.cache.size > this.maxCacheEntries) {
|
|
@@ -37642,9 +37664,9 @@ function normalizeInput(input) {
|
|
|
37642
37664
|
return {};
|
|
37643
37665
|
}
|
|
37644
37666
|
function formatAjvError(error) {
|
|
37645
|
-
const
|
|
37667
|
+
const path = error.instancePath ? ` ${error.instancePath}` : "";
|
|
37646
37668
|
const message = error.message || "is invalid";
|
|
37647
|
-
return `${
|
|
37669
|
+
return `${path} ${message}`.trim();
|
|
37648
37670
|
}
|
|
37649
37671
|
|
|
37650
37672
|
// packages/core/src/security/logger.ts
|
|
@@ -37852,9 +37874,9 @@ function mergeHooks(target, source) {
|
|
|
37852
37874
|
target[event].push(...matchers);
|
|
37853
37875
|
}
|
|
37854
37876
|
}
|
|
37855
|
-
async function loadJsonFile(
|
|
37877
|
+
async function loadJsonFile(path) {
|
|
37856
37878
|
try {
|
|
37857
|
-
const file = Bun.file(
|
|
37879
|
+
const file = Bun.file(path);
|
|
37858
37880
|
if (!await file.exists()) {
|
|
37859
37881
|
return null;
|
|
37860
37882
|
}
|
|
@@ -37901,9 +37923,9 @@ async function loadSystemPrompt(cwd2 = process.cwd()) {
|
|
|
37901
37923
|
|
|
37902
37924
|
`);
|
|
37903
37925
|
}
|
|
37904
|
-
async function loadTextFile(
|
|
37926
|
+
async function loadTextFile(path) {
|
|
37905
37927
|
try {
|
|
37906
|
-
const file = Bun.file(
|
|
37928
|
+
const file = Bun.file(path);
|
|
37907
37929
|
if (!await file.exists()) {
|
|
37908
37930
|
return null;
|
|
37909
37931
|
}
|
|
@@ -37920,8 +37942,8 @@ class SecurityLogger {
|
|
|
37920
37942
|
constructor(logFile) {
|
|
37921
37943
|
this.logFile = logFile ?? join2(getConfigDir(), "security.log");
|
|
37922
37944
|
}
|
|
37923
|
-
setLogFile(
|
|
37924
|
-
this.logFile =
|
|
37945
|
+
setLogFile(path) {
|
|
37946
|
+
this.logFile = path;
|
|
37925
37947
|
}
|
|
37926
37948
|
log(event) {
|
|
37927
37949
|
const fullEvent = {
|
|
@@ -38921,10 +38943,10 @@ async function validatePath(inputPath, options = {}) {
|
|
|
38921
38943
|
}
|
|
38922
38944
|
return { valid: true, resolved };
|
|
38923
38945
|
}
|
|
38924
|
-
function isWithinAllowed(
|
|
38946
|
+
function isWithinAllowed(path, allowed) {
|
|
38925
38947
|
if (!allowed || allowed.length === 0)
|
|
38926
38948
|
return true;
|
|
38927
|
-
return allowed.some((allowedPath) =>
|
|
38949
|
+
return allowed.some((allowedPath) => path === allowedPath || path.startsWith(`${allowedPath}/`));
|
|
38928
38950
|
}
|
|
38929
38951
|
|
|
38930
38952
|
// packages/core/src/security/path-validator.ts
|
|
@@ -38976,9 +38998,9 @@ function getScriptsFolder(cwd2, sessionId) {
|
|
|
38976
38998
|
const resolvedSessionId = sessionId || currentSessionId;
|
|
38977
38999
|
return join4(getProjectConfigDir(cwd2), "scripts", resolvedSessionId);
|
|
38978
39000
|
}
|
|
38979
|
-
function isInScriptsFolder(
|
|
39001
|
+
function isInScriptsFolder(path, cwd2, sessionId) {
|
|
38980
39002
|
const scriptsFolder = resolve3(getScriptsFolder(cwd2, sessionId));
|
|
38981
|
-
const resolved = resolve3(
|
|
39003
|
+
const resolved = resolve3(path);
|
|
38982
39004
|
if (resolved === scriptsFolder)
|
|
38983
39005
|
return true;
|
|
38984
39006
|
return resolved.startsWith(`${scriptsFolder}${sep}`);
|
|
@@ -39026,18 +39048,18 @@ class FilesystemTools {
|
|
|
39026
39048
|
};
|
|
39027
39049
|
static readExecutor = async (input) => {
|
|
39028
39050
|
const baseCwd = input.cwd || process.cwd();
|
|
39029
|
-
const
|
|
39051
|
+
const path = resolve3(baseCwd, input.path);
|
|
39030
39052
|
const offset = (input.offset || 1) - 1;
|
|
39031
39053
|
const limit = input.limit;
|
|
39032
39054
|
try {
|
|
39033
|
-
const safety = await isPathSafe(
|
|
39055
|
+
const safety = await isPathSafe(path, "read", { cwd: baseCwd });
|
|
39034
39056
|
if (!safety.safe) {
|
|
39035
39057
|
getSecurityLogger().log({
|
|
39036
39058
|
eventType: "path_violation",
|
|
39037
39059
|
severity: "high",
|
|
39038
39060
|
details: {
|
|
39039
39061
|
tool: "read",
|
|
39040
|
-
path
|
|
39062
|
+
path,
|
|
39041
39063
|
reason: safety.reason || "Blocked path"
|
|
39042
39064
|
},
|
|
39043
39065
|
sessionId: input.sessionId || "unknown"
|
|
@@ -39050,7 +39072,7 @@ class FilesystemTools {
|
|
|
39050
39072
|
retryable: false
|
|
39051
39073
|
});
|
|
39052
39074
|
}
|
|
39053
|
-
const validated = await validatePath(
|
|
39075
|
+
const validated = await validatePath(path, { allowSymlinks: true });
|
|
39054
39076
|
if (!validated.valid) {
|
|
39055
39077
|
throw new ToolExecutionError(validated.error || "Invalid path", {
|
|
39056
39078
|
toolName: "read",
|
|
@@ -39063,7 +39085,7 @@ class FilesystemTools {
|
|
|
39063
39085
|
}
|
|
39064
39086
|
const file = Bun.file(validated.resolved);
|
|
39065
39087
|
if (!await file.exists()) {
|
|
39066
|
-
throw new ToolExecutionError(`File not found: ${
|
|
39088
|
+
throw new ToolExecutionError(`File not found: ${path}`, {
|
|
39067
39089
|
toolName: "read",
|
|
39068
39090
|
toolInput: input,
|
|
39069
39091
|
code: ErrorCodes.TOOL_EXECUTION_FAILED,
|
|
@@ -39146,8 +39168,8 @@ class FilesystemTools {
|
|
|
39146
39168
|
});
|
|
39147
39169
|
}
|
|
39148
39170
|
const sanitizedFilename = filename.replace(/\.\.[/\\]/g, "").replace(/\.\./g, "").replace(/^[/\\]+/, "");
|
|
39149
|
-
const
|
|
39150
|
-
if (!isInScriptsFolder(
|
|
39171
|
+
const path = join4(scriptsFolder, sanitizedFilename);
|
|
39172
|
+
if (!isInScriptsFolder(path, baseCwd, input.sessionId)) {
|
|
39151
39173
|
throw new ToolExecutionError(`Cannot write outside scripts folder. Files are saved to ${scriptsFolder}`, {
|
|
39152
39174
|
toolName: "write",
|
|
39153
39175
|
toolInput: input,
|
|
@@ -39158,7 +39180,7 @@ class FilesystemTools {
|
|
|
39158
39180
|
});
|
|
39159
39181
|
}
|
|
39160
39182
|
try {
|
|
39161
|
-
const validated = await validatePath(
|
|
39183
|
+
const validated = await validatePath(path, { allowSymlinks: false, allowedPaths: [scriptsFolder] });
|
|
39162
39184
|
if (!validated.valid) {
|
|
39163
39185
|
throw new ToolExecutionError(validated.error || "Invalid path", {
|
|
39164
39186
|
toolName: "write",
|
|
@@ -39351,16 +39373,16 @@ class FilesystemTools {
|
|
|
39351
39373
|
};
|
|
39352
39374
|
static readPdfExecutor = async (input) => {
|
|
39353
39375
|
const baseCwd = input.cwd || process.cwd();
|
|
39354
|
-
const
|
|
39376
|
+
const path = resolve3(baseCwd, input.path);
|
|
39355
39377
|
try {
|
|
39356
|
-
const safety = await isPathSafe(
|
|
39378
|
+
const safety = await isPathSafe(path, "read", { cwd: baseCwd });
|
|
39357
39379
|
if (!safety.safe) {
|
|
39358
39380
|
getSecurityLogger().log({
|
|
39359
39381
|
eventType: "path_violation",
|
|
39360
39382
|
severity: "high",
|
|
39361
39383
|
details: {
|
|
39362
39384
|
tool: "read_pdf",
|
|
39363
|
-
path
|
|
39385
|
+
path,
|
|
39364
39386
|
reason: safety.reason || "Blocked path"
|
|
39365
39387
|
},
|
|
39366
39388
|
sessionId: input.sessionId || "unknown"
|
|
@@ -39373,7 +39395,7 @@ class FilesystemTools {
|
|
|
39373
39395
|
retryable: false
|
|
39374
39396
|
});
|
|
39375
39397
|
}
|
|
39376
|
-
const validated = await validatePath(
|
|
39398
|
+
const validated = await validatePath(path, { allowSymlinks: true });
|
|
39377
39399
|
if (!validated.valid) {
|
|
39378
39400
|
throw new ToolExecutionError(validated.error || "Invalid path", {
|
|
39379
39401
|
toolName: "read_pdf",
|
|
@@ -39386,7 +39408,7 @@ class FilesystemTools {
|
|
|
39386
39408
|
}
|
|
39387
39409
|
const file = Bun.file(validated.resolved);
|
|
39388
39410
|
if (!await file.exists()) {
|
|
39389
|
-
throw new ToolExecutionError(`PDF file not found: ${
|
|
39411
|
+
throw new ToolExecutionError(`PDF file not found: ${path}`, {
|
|
39390
39412
|
toolName: "read_pdf",
|
|
39391
39413
|
toolInput: input,
|
|
39392
39414
|
code: ErrorCodes.TOOL_EXECUTION_FAILED,
|
|
@@ -39395,8 +39417,8 @@ class FilesystemTools {
|
|
|
39395
39417
|
suggestion: "Check the file path and try again."
|
|
39396
39418
|
});
|
|
39397
39419
|
}
|
|
39398
|
-
if (!
|
|
39399
|
-
throw new ToolExecutionError(`File is not a PDF: ${
|
|
39420
|
+
if (!path.toLowerCase().endsWith(".pdf")) {
|
|
39421
|
+
throw new ToolExecutionError(`File is not a PDF: ${path}`, {
|
|
39400
39422
|
toolName: "read_pdf",
|
|
39401
39423
|
toolInput: input,
|
|
39402
39424
|
code: ErrorCodes.VALIDATION_OUT_OF_RANGE,
|
|
@@ -39421,7 +39443,7 @@ class FilesystemTools {
|
|
|
39421
39443
|
return JSON.stringify({
|
|
39422
39444
|
__pdf_attachment__: true,
|
|
39423
39445
|
path: validated.resolved,
|
|
39424
|
-
name:
|
|
39446
|
+
name: path.split("/").pop() || "document.pdf",
|
|
39425
39447
|
mediaType: "application/pdf",
|
|
39426
39448
|
data: base64Data,
|
|
39427
39449
|
size: file.size
|
|
@@ -40039,9 +40061,9 @@ function resolveFeedbackDir(cwd2) {
|
|
|
40039
40061
|
function saveFeedbackEntry(entry, cwd2) {
|
|
40040
40062
|
const feedbackDir = resolveFeedbackDir(cwd2);
|
|
40041
40063
|
mkdirSync2(feedbackDir, { recursive: true });
|
|
40042
|
-
const
|
|
40043
|
-
writeFileSync2(
|
|
40044
|
-
return { path
|
|
40064
|
+
const path = join5(feedbackDir, `${entry.id}.json`);
|
|
40065
|
+
writeFileSync2(path, JSON.stringify(entry, null, 2));
|
|
40066
|
+
return { path };
|
|
40045
40067
|
}
|
|
40046
40068
|
function buildEntry(input, overrides) {
|
|
40047
40069
|
const typeValue = String(input.type || "feedback").toLowerCase();
|
|
@@ -40124,10 +40146,10 @@ class FeedbackTool {
|
|
|
40124
40146
|
static executor = async (input) => {
|
|
40125
40147
|
try {
|
|
40126
40148
|
const entry = buildEntry(input, { source: input.source || "tool" });
|
|
40127
|
-
const { path
|
|
40149
|
+
const { path } = saveFeedbackEntry(entry, typeof input.cwd === "string" ? input.cwd : undefined);
|
|
40128
40150
|
return `Feedback saved locally.
|
|
40129
40151
|
ID: ${entry.id}
|
|
40130
|
-
Path: ${
|
|
40152
|
+
Path: ${path}`;
|
|
40131
40153
|
} catch (error) {
|
|
40132
40154
|
return `Error: ${error instanceof Error ? error.message : String(error)}`;
|
|
40133
40155
|
}
|
|
@@ -40308,8 +40330,8 @@ async function listSchedules(cwd2) {
|
|
|
40308
40330
|
}
|
|
40309
40331
|
async function saveSchedule(cwd2, schedule) {
|
|
40310
40332
|
await ensureDirs(cwd2);
|
|
40311
|
-
const
|
|
40312
|
-
await writeFile(
|
|
40333
|
+
const path = schedulePath(cwd2, schedule.id);
|
|
40334
|
+
await writeFile(path, JSON.stringify(schedule, null, 2), "utf-8");
|
|
40313
40335
|
}
|
|
40314
40336
|
async function deleteSchedule(cwd2, id) {
|
|
40315
40337
|
try {
|
|
@@ -40357,27 +40379,27 @@ async function updateSchedule(cwd2, id, updater) {
|
|
|
40357
40379
|
}
|
|
40358
40380
|
async function acquireScheduleLock(cwd2, id, ownerId, ttlMs = DEFAULT_LOCK_TTL_MS, allowRetry = true) {
|
|
40359
40381
|
await ensureDirs(cwd2);
|
|
40360
|
-
const
|
|
40382
|
+
const path = lockPath(cwd2, id);
|
|
40361
40383
|
const now2 = Date.now();
|
|
40362
40384
|
try {
|
|
40363
|
-
const handle = await open(
|
|
40385
|
+
const handle = await open(path, "wx");
|
|
40364
40386
|
await handle.writeFile(JSON.stringify({ ownerId, createdAt: now2, updatedAt: now2, ttlMs }, null, 2), "utf-8");
|
|
40365
40387
|
await handle.close();
|
|
40366
40388
|
return true;
|
|
40367
40389
|
} catch {
|
|
40368
40390
|
try {
|
|
40369
|
-
const raw = await readFile(
|
|
40391
|
+
const raw = await readFile(path, "utf-8");
|
|
40370
40392
|
const lock = JSON.parse(raw);
|
|
40371
40393
|
const updatedAt = lock?.updatedAt || lock?.createdAt || 0;
|
|
40372
40394
|
const ttl = lock?.ttlMs ?? ttlMs;
|
|
40373
40395
|
if (now2 - updatedAt > ttl) {
|
|
40374
|
-
await unlink(
|
|
40396
|
+
await unlink(path);
|
|
40375
40397
|
return acquireScheduleLock(cwd2, id, ownerId, ttlMs, false);
|
|
40376
40398
|
}
|
|
40377
40399
|
} catch {
|
|
40378
40400
|
if (allowRetry) {
|
|
40379
40401
|
try {
|
|
40380
|
-
await unlink(
|
|
40402
|
+
await unlink(path);
|
|
40381
40403
|
return acquireScheduleLock(cwd2, id, ownerId, ttlMs, false);
|
|
40382
40404
|
} catch {
|
|
40383
40405
|
return false;
|
|
@@ -40388,23 +40410,23 @@ async function acquireScheduleLock(cwd2, id, ownerId, ttlMs = DEFAULT_LOCK_TTL_M
|
|
|
40388
40410
|
return false;
|
|
40389
40411
|
}
|
|
40390
40412
|
async function releaseScheduleLock(cwd2, id, ownerId) {
|
|
40391
|
-
const
|
|
40413
|
+
const path = lockPath(cwd2, id);
|
|
40392
40414
|
try {
|
|
40393
|
-
const raw = await readFile(
|
|
40415
|
+
const raw = await readFile(path, "utf-8");
|
|
40394
40416
|
const lock = JSON.parse(raw);
|
|
40395
40417
|
if (lock?.ownerId === ownerId) {
|
|
40396
|
-
await unlink(
|
|
40418
|
+
await unlink(path);
|
|
40397
40419
|
}
|
|
40398
40420
|
} catch {}
|
|
40399
40421
|
}
|
|
40400
40422
|
async function refreshScheduleLock(cwd2, id, ownerId) {
|
|
40401
|
-
const
|
|
40423
|
+
const path = lockPath(cwd2, id);
|
|
40402
40424
|
try {
|
|
40403
|
-
const raw = await readFile(
|
|
40425
|
+
const raw = await readFile(path, "utf-8");
|
|
40404
40426
|
const lock = JSON.parse(raw);
|
|
40405
40427
|
if (lock?.ownerId === ownerId) {
|
|
40406
40428
|
const updated = { ...lock, updatedAt: Date.now() };
|
|
40407
|
-
await writeFile(
|
|
40429
|
+
await writeFile(path, JSON.stringify(updated, null, 2), "utf-8");
|
|
40408
40430
|
}
|
|
40409
40431
|
} catch {}
|
|
40410
40432
|
}
|
|
@@ -40632,11 +40654,11 @@ async function getViuPath() {
|
|
|
40632
40654
|
"/usr/local/bin/viu",
|
|
40633
40655
|
"/opt/homebrew/bin/viu"
|
|
40634
40656
|
];
|
|
40635
|
-
for (const
|
|
40657
|
+
for (const path of locations) {
|
|
40636
40658
|
try {
|
|
40637
|
-
const result = await Bun.$`${
|
|
40659
|
+
const result = await Bun.$`${path} --version`.quiet().nothrow();
|
|
40638
40660
|
if (result.exitCode === 0) {
|
|
40639
|
-
return
|
|
40661
|
+
return path;
|
|
40640
40662
|
}
|
|
40641
40663
|
} catch {
|
|
40642
40664
|
continue;
|
|
@@ -43091,6 +43113,10 @@ No context entries for project "${project.name}".
|
|
|
43091
43113
|
context.emit("done");
|
|
43092
43114
|
return { handled: true };
|
|
43093
43115
|
}
|
|
43116
|
+
context.emit("text", `Failed to clear context entries for "${project.name}".
|
|
43117
|
+
`);
|
|
43118
|
+
context.emit("done");
|
|
43119
|
+
return { handled: true };
|
|
43094
43120
|
}
|
|
43095
43121
|
if (sub === "remove") {
|
|
43096
43122
|
const id = parts[1];
|
|
@@ -43118,6 +43144,10 @@ No context entries for project "${project.name}".
|
|
|
43118
43144
|
context.emit("done");
|
|
43119
43145
|
return { handled: true };
|
|
43120
43146
|
}
|
|
43147
|
+
context.emit("text", `Failed to remove context entry ${id} from "${project.name}".
|
|
43148
|
+
`);
|
|
43149
|
+
context.emit("done");
|
|
43150
|
+
return { handled: true };
|
|
43121
43151
|
}
|
|
43122
43152
|
if (sub === "add") {
|
|
43123
43153
|
const type = parts[1];
|
|
@@ -43155,6 +43185,10 @@ No context entries for project "${project.name}".
|
|
|
43155
43185
|
context.emit("done");
|
|
43156
43186
|
return { handled: true };
|
|
43157
43187
|
}
|
|
43188
|
+
context.emit("text", `Failed to add context entry to "${project.name}".
|
|
43189
|
+
`);
|
|
43190
|
+
context.emit("done");
|
|
43191
|
+
return { handled: true };
|
|
43158
43192
|
}
|
|
43159
43193
|
context.emit("text", `Unknown /context command. Use /context help.
|
|
43160
43194
|
`);
|
|
@@ -43313,6 +43347,10 @@ No projects found. Use /projects new <name>.
|
|
|
43313
43347
|
context.emit("done");
|
|
43314
43348
|
return { handled: true };
|
|
43315
43349
|
}
|
|
43350
|
+
context.emit("text", `Failed to update project "${project.name}".
|
|
43351
|
+
`);
|
|
43352
|
+
context.emit("done");
|
|
43353
|
+
return { handled: true };
|
|
43316
43354
|
}
|
|
43317
43355
|
if (sub === "delete" || sub === "rm") {
|
|
43318
43356
|
const target = parts.slice(1).join(" ").trim();
|
|
@@ -43340,6 +43378,10 @@ No projects found. Use /projects new <name>.
|
|
|
43340
43378
|
context.emit("done");
|
|
43341
43379
|
return { handled: true };
|
|
43342
43380
|
}
|
|
43381
|
+
context.emit("text", `Failed to delete project "${project.name}".
|
|
43382
|
+
`);
|
|
43383
|
+
context.emit("done");
|
|
43384
|
+
return { handled: true };
|
|
43343
43385
|
}
|
|
43344
43386
|
context.emit("text", `Unknown /projects command. Use /projects help.
|
|
43345
43387
|
`);
|
|
@@ -43883,9 +43925,9 @@ Format the summary as a brief bullet-point list. This summary will replace the c
|
|
|
43883
43925
|
`;
|
|
43884
43926
|
message += `**Config File Locations:**
|
|
43885
43927
|
`;
|
|
43886
|
-
for (const
|
|
43887
|
-
const exists = existsSync7(
|
|
43888
|
-
message += ` ${exists ? "\u2713" : "\u25CB"} ${
|
|
43928
|
+
for (const path of configPaths) {
|
|
43929
|
+
const exists = existsSync7(path);
|
|
43930
|
+
message += ` ${exists ? "\u2713" : "\u25CB"} ${path}
|
|
43889
43931
|
`;
|
|
43890
43932
|
}
|
|
43891
43933
|
const envHome = process.env.HOME || process.env.USERPROFILE;
|
|
@@ -44043,6 +44085,7 @@ Keep it concise but comprehensive.`
|
|
|
44043
44085
|
description: "Schedule a command (ISO time or cron)",
|
|
44044
44086
|
builtin: true,
|
|
44045
44087
|
selfHandled: true,
|
|
44088
|
+
content: "",
|
|
44046
44089
|
handler: async (args, context) => {
|
|
44047
44090
|
const parts = splitArgs(args);
|
|
44048
44091
|
if (parts.length < 2) {
|
|
@@ -44109,6 +44152,7 @@ Keep it concise but comprehensive.`
|
|
|
44109
44152
|
description: "List scheduled commands",
|
|
44110
44153
|
builtin: true,
|
|
44111
44154
|
selfHandled: true,
|
|
44155
|
+
content: "",
|
|
44112
44156
|
handler: async (_args, context) => {
|
|
44113
44157
|
const schedules = await listSchedules(context.cwd);
|
|
44114
44158
|
if (schedules.length === 0) {
|
|
@@ -44139,6 +44183,7 @@ Keep it concise but comprehensive.`
|
|
|
44139
44183
|
description: "Delete a scheduled command",
|
|
44140
44184
|
builtin: true,
|
|
44141
44185
|
selfHandled: true,
|
|
44186
|
+
content: "",
|
|
44142
44187
|
handler: async (args, context) => {
|
|
44143
44188
|
const id = args.trim();
|
|
44144
44189
|
if (!id) {
|
|
@@ -44162,6 +44207,7 @@ Keep it concise but comprehensive.`
|
|
|
44162
44207
|
description: "Pause a scheduled command",
|
|
44163
44208
|
builtin: true,
|
|
44164
44209
|
selfHandled: true,
|
|
44210
|
+
content: "",
|
|
44165
44211
|
handler: async (args, context) => {
|
|
44166
44212
|
const id = args.trim();
|
|
44167
44213
|
if (!id) {
|
|
@@ -44200,6 +44246,7 @@ ${lines.join(`
|
|
|
44200
44246
|
description: "Resume a scheduled command",
|
|
44201
44247
|
builtin: true,
|
|
44202
44248
|
selfHandled: true,
|
|
44249
|
+
content: "",
|
|
44203
44250
|
handler: async (args, context) => {
|
|
44204
44251
|
const id = args.trim();
|
|
44205
44252
|
if (!id) {
|
|
@@ -44506,10 +44553,10 @@ No security events recorded.
|
|
|
44506
44553
|
`;
|
|
44507
44554
|
let issueTitle = "";
|
|
44508
44555
|
let labels = "";
|
|
44509
|
-
if (feedbackType === "bug"
|
|
44556
|
+
if (feedbackType === "bug") {
|
|
44510
44557
|
issueTitle = "[Bug] ";
|
|
44511
44558
|
labels = "bug";
|
|
44512
|
-
} else if (feedbackType === "feature"
|
|
44559
|
+
} else if (feedbackType === "feature") {
|
|
44513
44560
|
issueTitle = "[Feature Request] ";
|
|
44514
44561
|
labels = "enhancement";
|
|
44515
44562
|
} else {
|
|
@@ -44733,9 +44780,9 @@ class HeartbeatManager {
|
|
|
44733
44780
|
await writeFile3(this.config.persistPath, JSON.stringify(heartbeat, null, 2));
|
|
44734
44781
|
} catch {}
|
|
44735
44782
|
}
|
|
44736
|
-
static async checkStale(
|
|
44783
|
+
static async checkStale(path2, thresholdMs) {
|
|
44737
44784
|
try {
|
|
44738
|
-
const content = await readFile4(
|
|
44785
|
+
const content = await readFile4(path2, "utf-8");
|
|
44739
44786
|
const heartbeat = JSON.parse(content);
|
|
44740
44787
|
const age = Date.now() - new Date(heartbeat.timestamp).getTime();
|
|
44741
44788
|
return { isStale: age > thresholdMs, lastHeartbeat: heartbeat };
|
|
@@ -44751,9 +44798,9 @@ import { readFile as readFile5, writeFile as writeFile4, unlink as unlink3 } fro
|
|
|
44751
44798
|
|
|
44752
44799
|
class StatePersistence {
|
|
44753
44800
|
path;
|
|
44754
|
-
constructor(
|
|
44755
|
-
this.path =
|
|
44756
|
-
mkdirSync6(dirname6(
|
|
44801
|
+
constructor(path2) {
|
|
44802
|
+
this.path = path2;
|
|
44803
|
+
mkdirSync6(dirname6(path2), { recursive: true });
|
|
44757
44804
|
}
|
|
44758
44805
|
async save(state) {
|
|
44759
44806
|
try {
|
|
@@ -44978,9 +45025,9 @@ import { readFile as readFile6, writeFile as writeFile5 } from "fs/promises";
|
|
|
44978
45025
|
|
|
44979
45026
|
class EnergyStorage {
|
|
44980
45027
|
path;
|
|
44981
|
-
constructor(
|
|
44982
|
-
this.path =
|
|
44983
|
-
mkdirSync7(dirname7(
|
|
45028
|
+
constructor(path2) {
|
|
45029
|
+
this.path = path2;
|
|
45030
|
+
mkdirSync7(dirname7(path2), { recursive: true });
|
|
44984
45031
|
}
|
|
44985
45032
|
async save(state) {
|
|
44986
45033
|
try {
|
|
@@ -45739,11 +45786,11 @@ class IdentityManager {
|
|
|
45739
45786
|
await writeFile6(this.indexPath, JSON.stringify(index, null, 2));
|
|
45740
45787
|
}
|
|
45741
45788
|
async readIdentity(id) {
|
|
45742
|
-
const
|
|
45743
|
-
if (!existsSync10(
|
|
45789
|
+
const path2 = this.identityPath(id);
|
|
45790
|
+
if (!existsSync10(path2))
|
|
45744
45791
|
return null;
|
|
45745
45792
|
try {
|
|
45746
|
-
const raw = await readFile7(
|
|
45793
|
+
const raw = await readFile7(path2, "utf-8");
|
|
45747
45794
|
return JSON.parse(raw);
|
|
45748
45795
|
} catch {
|
|
45749
45796
|
return null;
|
|
@@ -46208,7 +46255,6 @@ class AgentLoop {
|
|
|
46208
46255
|
const toolCall = {
|
|
46209
46256
|
id: generateId(),
|
|
46210
46257
|
name: "bash",
|
|
46211
|
-
type: "tool",
|
|
46212
46258
|
input: {
|
|
46213
46259
|
command,
|
|
46214
46260
|
cwd: this.cwd,
|
|
@@ -47712,9 +47758,6 @@ class SessionRegistry {
|
|
|
47712
47758
|
// packages/core/src/index.ts
|
|
47713
47759
|
init_errors();
|
|
47714
47760
|
init_retry();
|
|
47715
|
-
init_errors();
|
|
47716
|
-
init_src();
|
|
47717
|
-
|
|
47718
47761
|
// packages/terminal/src/components/App.tsx
|
|
47719
47762
|
init_src();
|
|
47720
47763
|
|
|
@@ -47940,11 +47983,9 @@ function Input({ onSubmit, isProcessing, queueLength = 0, commands, skills = []
|
|
|
47940
47983
|
setValue("");
|
|
47941
47984
|
setSelectedIndex(0);
|
|
47942
47985
|
};
|
|
47943
|
-
let prompt = "\u276F";
|
|
47944
47986
|
let placeholder = "Type a message...";
|
|
47945
47987
|
if (isProcessing) {
|
|
47946
|
-
|
|
47947
|
-
placeholder = queueLength > 0 ? "Type to send (Enter) or queue (Tab) \xB7 Shift+Enter to interrupt..." : "Type to send (Enter) or queue (Tab) \xB7 Shift+Enter to interrupt...";
|
|
47988
|
+
placeholder = queueLength > 0 ? "Type to queue (Tab) or interrupt (Shift+Enter)..." : "Type to interrupt (Shift+Enter)...";
|
|
47948
47989
|
}
|
|
47949
47990
|
const truncateDescription = (desc, maxLen = 60) => {
|
|
47950
47991
|
if (desc.length <= maxLen)
|
|
@@ -47965,29 +48006,56 @@ function Input({ onSubmit, isProcessing, queueLength = 0, commands, skills = []
|
|
|
47965
48006
|
};
|
|
47966
48007
|
const visibleSkills = getVisibleItems(filteredSkills);
|
|
47967
48008
|
const visibleCommands = getVisibleItems(filteredCommands);
|
|
48009
|
+
const lines = value.split(`
|
|
48010
|
+
`);
|
|
48011
|
+
const lineCount = lines.length;
|
|
47968
48012
|
return /* @__PURE__ */ jsx_dev_runtime.jsxDEV(Box_default, {
|
|
47969
48013
|
flexDirection: "column",
|
|
47970
48014
|
marginTop: 1,
|
|
47971
48015
|
children: [
|
|
47972
48016
|
/* @__PURE__ */ jsx_dev_runtime.jsxDEV(Box_default, {
|
|
48017
|
+
children: /* @__PURE__ */ jsx_dev_runtime.jsxDEV(Text, {
|
|
48018
|
+
dimColor: true,
|
|
48019
|
+
children: "\u2500".repeat(80)
|
|
48020
|
+
}, undefined, false, undefined, this)
|
|
48021
|
+
}, undefined, false, undefined, this),
|
|
48022
|
+
/* @__PURE__ */ jsx_dev_runtime.jsxDEV(Box_default, {
|
|
48023
|
+
paddingY: 0,
|
|
47973
48024
|
children: [
|
|
47974
48025
|
/* @__PURE__ */ jsx_dev_runtime.jsxDEV(Text, {
|
|
47975
48026
|
dimColor: isProcessing,
|
|
47976
|
-
|
|
47977
|
-
|
|
47978
|
-
|
|
47979
|
-
|
|
47980
|
-
|
|
47981
|
-
|
|
47982
|
-
|
|
47983
|
-
|
|
47984
|
-
|
|
47985
|
-
|
|
48027
|
+
color: isProcessing ? undefined : "cyan",
|
|
48028
|
+
children: "> "
|
|
48029
|
+
}, undefined, false, undefined, this),
|
|
48030
|
+
/* @__PURE__ */ jsx_dev_runtime.jsxDEV(Box_default, {
|
|
48031
|
+
flexGrow: 1,
|
|
48032
|
+
children: /* @__PURE__ */ jsx_dev_runtime.jsxDEV(build_default, {
|
|
48033
|
+
value,
|
|
48034
|
+
onChange: handleChange,
|
|
48035
|
+
onSubmit: handleSubmit,
|
|
48036
|
+
placeholder
|
|
48037
|
+
}, undefined, false, undefined, this)
|
|
47986
48038
|
}, undefined, false, undefined, this)
|
|
47987
48039
|
]
|
|
47988
48040
|
}, undefined, true, undefined, this),
|
|
48041
|
+
lineCount > 1 && /* @__PURE__ */ jsx_dev_runtime.jsxDEV(Box_default, {
|
|
48042
|
+
marginLeft: 2,
|
|
48043
|
+
children: /* @__PURE__ */ jsx_dev_runtime.jsxDEV(Text, {
|
|
48044
|
+
dimColor: true,
|
|
48045
|
+
children: [
|
|
48046
|
+
"(",
|
|
48047
|
+
lineCount,
|
|
48048
|
+
" lines)"
|
|
48049
|
+
]
|
|
48050
|
+
}, undefined, true, undefined, this)
|
|
48051
|
+
}, undefined, false, undefined, this),
|
|
48052
|
+
/* @__PURE__ */ jsx_dev_runtime.jsxDEV(Box_default, {
|
|
48053
|
+
children: /* @__PURE__ */ jsx_dev_runtime.jsxDEV(Text, {
|
|
48054
|
+
dimColor: true,
|
|
48055
|
+
children: "\u2500".repeat(80)
|
|
48056
|
+
}, undefined, false, undefined, this)
|
|
48057
|
+
}, undefined, false, undefined, this),
|
|
47989
48058
|
isProcessing && /* @__PURE__ */ jsx_dev_runtime.jsxDEV(Box_default, {
|
|
47990
|
-
marginTop: 1,
|
|
47991
48059
|
marginLeft: 2,
|
|
47992
48060
|
children: /* @__PURE__ */ jsx_dev_runtime.jsxDEV(Text, {
|
|
47993
48061
|
dimColor: true,
|
|
@@ -48091,8 +48159,9 @@ function Markdown({ content, preRendered = false }) {
|
|
|
48091
48159
|
children: content
|
|
48092
48160
|
}, undefined, false, undefined, this);
|
|
48093
48161
|
}
|
|
48094
|
-
const {
|
|
48095
|
-
const
|
|
48162
|
+
const { stdout } = use_stdout_default();
|
|
48163
|
+
const columns = stdout?.columns ?? 80;
|
|
48164
|
+
const maxWidth = Math.max(20, columns - 2);
|
|
48096
48165
|
const rendered = parseMarkdown(content, { maxWidth });
|
|
48097
48166
|
return /* @__PURE__ */ jsx_dev_runtime2.jsxDEV(Text, {
|
|
48098
48167
|
children: rendered
|
|
@@ -48353,7 +48422,8 @@ function renderBlockSection(section, maxWidth) {
|
|
|
48353
48422
|
if (section.kind === "grid") {
|
|
48354
48423
|
const adjustedWidth2 = maxWidth ? Math.max(20, maxWidth - section.indent.length) : undefined;
|
|
48355
48424
|
if (section.cards.length === 0) {
|
|
48356
|
-
return renderCard({ type: "note", title: "Grid", body: section.body }, adjustedWidth2, section.indent)
|
|
48425
|
+
return renderCard({ type: "note", title: "Grid", body: section.body }, adjustedWidth2, section.indent).join(`
|
|
48426
|
+
`);
|
|
48357
48427
|
}
|
|
48358
48428
|
return renderCardGrid(section.cards, section.columns, adjustedWidth2, section.indent);
|
|
48359
48429
|
}
|
|
@@ -48862,8 +48932,9 @@ function Messages3({
|
|
|
48862
48932
|
queuedMessageIds
|
|
48863
48933
|
}) {
|
|
48864
48934
|
const [now2, setNow] = import_react24.useState(Date.now());
|
|
48865
|
-
const {
|
|
48866
|
-
const
|
|
48935
|
+
const { stdout } = use_stdout_default();
|
|
48936
|
+
const columns = stdout?.columns ?? 80;
|
|
48937
|
+
const messageWidth = Math.max(10, columns - 2);
|
|
48867
48938
|
const combinedMessages = import_react24.useMemo(() => [...messages, ...streamingMessages], [messages, streamingMessages]);
|
|
48868
48939
|
const lineSpans = import_react24.useMemo(() => {
|
|
48869
48940
|
let cursor = 0;
|
|
@@ -49017,7 +49088,7 @@ function Messages3({
|
|
|
49017
49088
|
/* @__PURE__ */ jsx_dev_runtime3.jsxDEV(Box_default, {
|
|
49018
49089
|
flexGrow: 1,
|
|
49019
49090
|
children: /* @__PURE__ */ jsx_dev_runtime3.jsxDEV(Markdown, {
|
|
49020
|
-
content: currentResponse
|
|
49091
|
+
content: currentResponse ?? ""
|
|
49021
49092
|
}, undefined, false, undefined, this)
|
|
49022
49093
|
}, undefined, false, undefined, this)
|
|
49023
49094
|
]
|
|
@@ -49170,8 +49241,9 @@ function ToolCallPanel({
|
|
|
49170
49241
|
}) {
|
|
49171
49242
|
if (toolCalls.length === 0)
|
|
49172
49243
|
return null;
|
|
49173
|
-
const {
|
|
49174
|
-
const
|
|
49244
|
+
const { stdout } = use_stdout_default();
|
|
49245
|
+
const columns = stdout?.columns ?? 80;
|
|
49246
|
+
const panelWidth = Math.max(24, columns - 4);
|
|
49175
49247
|
const resultMap = new Map;
|
|
49176
49248
|
for (const result of toolResults || []) {
|
|
49177
49249
|
resultMap.set(result.toolCallId, result);
|
|
@@ -49265,8 +49337,8 @@ function getToolContext(toolCall) {
|
|
|
49265
49337
|
case "bash":
|
|
49266
49338
|
return truncate(String(input.command || ""), 20);
|
|
49267
49339
|
case "read":
|
|
49268
|
-
const
|
|
49269
|
-
return
|
|
49340
|
+
const path2 = String(input.path || input.file_path || "");
|
|
49341
|
+
return path2.split("/").pop() || "";
|
|
49270
49342
|
case "write":
|
|
49271
49343
|
const writePath = String(input.filename || input.path || input.file_path || "");
|
|
49272
49344
|
return writePath.split("/").pop() || "";
|
|
@@ -49923,7 +49995,7 @@ function SessionSelector({
|
|
|
49923
49995
|
const isSelected = index === selectedIndex;
|
|
49924
49996
|
const prefix = isActive ? "[*]" : " ";
|
|
49925
49997
|
const time = formatSessionTime(session.updatedAt);
|
|
49926
|
-
const
|
|
49998
|
+
const path2 = formatPath(session.cwd);
|
|
49927
49999
|
const processing = session.isProcessing ? " (processing)" : "";
|
|
49928
50000
|
return /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Box_default, {
|
|
49929
50001
|
children: /* @__PURE__ */ jsx_dev_runtime8.jsxDEV(Text, {
|
|
@@ -49937,7 +50009,7 @@ function SessionSelector({
|
|
|
49937
50009
|
". ",
|
|
49938
50010
|
time,
|
|
49939
50011
|
" ",
|
|
49940
|
-
|
|
50012
|
+
path2,
|
|
49941
50013
|
processing
|
|
49942
50014
|
]
|
|
49943
50015
|
}, undefined, true, undefined, this)
|
|
@@ -50115,7 +50187,9 @@ function buildDisplayMessages(messages, chunkLines, wrapChars, options) {
|
|
|
50115
50187
|
}
|
|
50116
50188
|
function App2({ cwd: cwd2, version }) {
|
|
50117
50189
|
const { exit } = use_app_default();
|
|
50118
|
-
const {
|
|
50190
|
+
const { stdout } = use_stdout_default();
|
|
50191
|
+
const rows = stdout?.rows ?? 24;
|
|
50192
|
+
const columns = stdout?.columns ?? 80;
|
|
50119
50193
|
const [registry] = import_react29.useState(() => new SessionRegistry);
|
|
50120
50194
|
const registryRef = import_react29.useRef(registry);
|
|
50121
50195
|
const [activeSessionId, setActiveSessionId] = import_react29.useState(null);
|
|
@@ -51341,4 +51415,4 @@ if (options.print !== null) {
|
|
|
51341
51415
|
});
|
|
51342
51416
|
}
|
|
51343
51417
|
|
|
51344
|
-
//# debugId=
|
|
51418
|
+
//# debugId=29930EA4036DA53D64756E2164756E21
|