open-agents-ai 0.187.431 → 0.187.432
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 +230 -157
- package/npm-shrinkwrap.json +11 -11
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -355,105 +355,6 @@ var init_typed_node_events = __esm({
|
|
|
355
355
|
}
|
|
356
356
|
});
|
|
357
357
|
|
|
358
|
-
// packages/cli/src/ui/spinner.ts
|
|
359
|
-
var FRAMES, INTERVAL_MS, Spinner;
|
|
360
|
-
var init_spinner = __esm({
|
|
361
|
-
"packages/cli/src/ui/spinner.ts"() {
|
|
362
|
-
"use strict";
|
|
363
|
-
FRAMES = ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"];
|
|
364
|
-
INTERVAL_MS = 80;
|
|
365
|
-
Spinner = class {
|
|
366
|
-
_text;
|
|
367
|
-
_frameIndex = 0;
|
|
368
|
-
_timer = null;
|
|
369
|
-
_isSpinning = false;
|
|
370
|
-
constructor(text) {
|
|
371
|
-
this._text = text;
|
|
372
|
-
}
|
|
373
|
-
// --------------------------------------------------------------------------
|
|
374
|
-
// Public API
|
|
375
|
-
// --------------------------------------------------------------------------
|
|
376
|
-
get text() {
|
|
377
|
-
return this._text;
|
|
378
|
-
}
|
|
379
|
-
set text(value2) {
|
|
380
|
-
this._text = value2;
|
|
381
|
-
if (this._isSpinning && process.stdout.isTTY) {
|
|
382
|
-
this._render();
|
|
383
|
-
}
|
|
384
|
-
}
|
|
385
|
-
get isSpinning() {
|
|
386
|
-
return this._isSpinning;
|
|
387
|
-
}
|
|
388
|
-
start() {
|
|
389
|
-
if (this._isSpinning) return this;
|
|
390
|
-
this._isSpinning = true;
|
|
391
|
-
this._frameIndex = 0;
|
|
392
|
-
if (process.stdout.isTTY) {
|
|
393
|
-
process.stdout.write("\x1B[?25l");
|
|
394
|
-
this._render();
|
|
395
|
-
this._timer = setInterval(() => {
|
|
396
|
-
this._frameIndex = (this._frameIndex + 1) % FRAMES.length;
|
|
397
|
-
this._render();
|
|
398
|
-
}, INTERVAL_MS);
|
|
399
|
-
} else {
|
|
400
|
-
process.stdout.write(`${this._text}
|
|
401
|
-
`);
|
|
402
|
-
}
|
|
403
|
-
return this;
|
|
404
|
-
}
|
|
405
|
-
stop() {
|
|
406
|
-
if (!this._isSpinning) return this;
|
|
407
|
-
this._isSpinning = false;
|
|
408
|
-
if (this._timer !== null) {
|
|
409
|
-
clearInterval(this._timer);
|
|
410
|
-
this._timer = null;
|
|
411
|
-
}
|
|
412
|
-
if (process.stdout.isTTY) {
|
|
413
|
-
process.stdout.write("\r\x1B[K");
|
|
414
|
-
process.stdout.write("\x1B[?25h");
|
|
415
|
-
}
|
|
416
|
-
return this;
|
|
417
|
-
}
|
|
418
|
-
succeed(message2) {
|
|
419
|
-
this.stop();
|
|
420
|
-
const msg = message2 ?? this._text;
|
|
421
|
-
process.stdout.write(`\x1B[32m✔\x1B[0m ${msg}
|
|
422
|
-
`);
|
|
423
|
-
return this;
|
|
424
|
-
}
|
|
425
|
-
fail(message2) {
|
|
426
|
-
this.stop();
|
|
427
|
-
const msg = message2 ?? this._text;
|
|
428
|
-
process.stdout.write(`\x1B[31m✖\x1B[0m ${msg}
|
|
429
|
-
`);
|
|
430
|
-
return this;
|
|
431
|
-
}
|
|
432
|
-
warn(message2) {
|
|
433
|
-
this.stop();
|
|
434
|
-
const msg = message2 ?? this._text;
|
|
435
|
-
process.stdout.write(`\x1B[33m⚠\x1B[0m ${msg}
|
|
436
|
-
`);
|
|
437
|
-
return this;
|
|
438
|
-
}
|
|
439
|
-
info(message2) {
|
|
440
|
-
this.stop();
|
|
441
|
-
const msg = message2 ?? this._text;
|
|
442
|
-
process.stdout.write(`\x1B[36mℹ\x1B[0m ${msg}
|
|
443
|
-
`);
|
|
444
|
-
return this;
|
|
445
|
-
}
|
|
446
|
-
// --------------------------------------------------------------------------
|
|
447
|
-
// Private
|
|
448
|
-
// --------------------------------------------------------------------------
|
|
449
|
-
_render() {
|
|
450
|
-
const frame = FRAMES[this._frameIndex] ?? FRAMES[0];
|
|
451
|
-
process.stdout.write(`\r\x1B[36m${frame}\x1B[0m ${this._text}`);
|
|
452
|
-
}
|
|
453
|
-
};
|
|
454
|
-
}
|
|
455
|
-
});
|
|
456
|
-
|
|
457
358
|
// packages/backend-vllm/dist/sleep.js
|
|
458
359
|
var SleepManager;
|
|
459
360
|
var init_sleep = __esm({
|
|
@@ -88633,7 +88534,7 @@ var require_auto = __commonJS({
|
|
|
88633
88534
|
// ../../../node_modules/acme-client/src/client.js
|
|
88634
88535
|
var require_client = __commonJS({
|
|
88635
88536
|
"../../../node_modules/acme-client/src/client.js"(exports, module) {
|
|
88636
|
-
var { createHash:
|
|
88537
|
+
var { createHash: createHash14 } = __require("crypto");
|
|
88637
88538
|
var { getPemBodyAsB64u } = require_crypto();
|
|
88638
88539
|
var { log: log22 } = require_logger();
|
|
88639
88540
|
var HttpClient = require_http();
|
|
@@ -88944,14 +88845,14 @@ var require_client = __commonJS({
|
|
|
88944
88845
|
*/
|
|
88945
88846
|
async getChallengeKeyAuthorization(challenge) {
|
|
88946
88847
|
const jwk = this.http.getJwk();
|
|
88947
|
-
const keysum =
|
|
88848
|
+
const keysum = createHash14("sha256").update(JSON.stringify(jwk));
|
|
88948
88849
|
const thumbprint = keysum.digest("base64url");
|
|
88949
88850
|
const result = `${challenge.token}.${thumbprint}`;
|
|
88950
88851
|
if (challenge.type === "http-01") {
|
|
88951
88852
|
return result;
|
|
88952
88853
|
}
|
|
88953
88854
|
if (challenge.type === "dns-01") {
|
|
88954
|
-
return
|
|
88855
|
+
return createHash14("sha256").update(result).digest("base64url");
|
|
88955
88856
|
}
|
|
88956
88857
|
if (challenge.type === "tls-alpn-01") {
|
|
88957
88858
|
return result;
|
|
@@ -231549,7 +231450,7 @@ var require_websocket2 = __commonJS({
|
|
|
231549
231450
|
var http6 = __require("http");
|
|
231550
231451
|
var net5 = __require("net");
|
|
231551
231452
|
var tls2 = __require("tls");
|
|
231552
|
-
var { randomBytes: randomBytes23, createHash:
|
|
231453
|
+
var { randomBytes: randomBytes23, createHash: createHash14 } = __require("crypto");
|
|
231553
231454
|
var { Duplex: Duplex3, Readable } = __require("stream");
|
|
231554
231455
|
var { URL: URL3 } = __require("url");
|
|
231555
231456
|
var PerMessageDeflate2 = require_permessage_deflate2();
|
|
@@ -232209,7 +232110,7 @@ var require_websocket2 = __commonJS({
|
|
|
232209
232110
|
abortHandshake(websocket, socket, "Invalid Upgrade header");
|
|
232210
232111
|
return;
|
|
232211
232112
|
}
|
|
232212
|
-
const digest3 =
|
|
232113
|
+
const digest3 = createHash14("sha1").update(key + GUID).digest("base64");
|
|
232213
232114
|
if (res.headers["sec-websocket-accept"] !== digest3) {
|
|
232214
232115
|
abortHandshake(websocket, socket, "Invalid Sec-WebSocket-Accept header");
|
|
232215
232116
|
return;
|
|
@@ -232576,7 +232477,7 @@ var require_websocket_server = __commonJS({
|
|
|
232576
232477
|
var EventEmitter12 = __require("events");
|
|
232577
232478
|
var http6 = __require("http");
|
|
232578
232479
|
var { Duplex: Duplex3 } = __require("stream");
|
|
232579
|
-
var { createHash:
|
|
232480
|
+
var { createHash: createHash14 } = __require("crypto");
|
|
232580
232481
|
var extension2 = require_extension2();
|
|
232581
232482
|
var PerMessageDeflate2 = require_permessage_deflate2();
|
|
232582
232483
|
var subprotocol2 = require_subprotocol();
|
|
@@ -232877,7 +232778,7 @@ var require_websocket_server = __commonJS({
|
|
|
232877
232778
|
);
|
|
232878
232779
|
}
|
|
232879
232780
|
if (this._state > RUNNING) return abortHandshake(socket, 503);
|
|
232880
|
-
const digest3 =
|
|
232781
|
+
const digest3 = createHash14("sha1").update(key + GUID).digest("base64");
|
|
232881
232782
|
const headers = [
|
|
232882
232783
|
"HTTP/1.1 101 Switching Protocols",
|
|
232883
232784
|
"Upgrade: websocket",
|
|
@@ -245684,13 +245585,13 @@ Justification: ${justification || "(none provided)"}`,
|
|
|
245684
245585
|
}
|
|
245685
245586
|
const snapshot = JSON.stringify(this.selfState, null, 2);
|
|
245686
245587
|
try {
|
|
245687
|
-
const { createHash:
|
|
245588
|
+
const { createHash: createHash14 } = await import("node:crypto");
|
|
245688
245589
|
const snapshotDir = join24(this.cwd, ".oa", "identity", "snapshots");
|
|
245689
245590
|
await mkdir6(snapshotDir, { recursive: true });
|
|
245690
245591
|
const version4 = this.selfState.version;
|
|
245691
245592
|
const snapshotPath = join24(snapshotDir, `v${version4}.json`);
|
|
245692
245593
|
await writeFile11(snapshotPath, snapshot, "utf8");
|
|
245693
|
-
const hash =
|
|
245594
|
+
const hash = createHash14("sha256").update(snapshot).digest("hex");
|
|
245694
245595
|
await writeFile11(join24(this.cwd, ".oa", "identity", "latest-hash.txt"), hash, "utf8");
|
|
245695
245596
|
let ipfsCid = "";
|
|
245696
245597
|
try {
|
|
@@ -245823,8 +245724,8 @@ New: ${newNarrative.slice(0, 200)}...`,
|
|
|
245823
245724
|
}
|
|
245824
245725
|
// ── Helpers ──────────────────────────────────────────────────────────────
|
|
245825
245726
|
createDefaultState() {
|
|
245826
|
-
const { createHash:
|
|
245827
|
-
const machineId =
|
|
245727
|
+
const { createHash: createHash14 } = __require("node:crypto");
|
|
245728
|
+
const machineId = createHash14("sha256").update(this.cwd).digest("hex").slice(0, 12);
|
|
245828
245729
|
return {
|
|
245829
245730
|
self_id: `oa-${machineId}`,
|
|
245830
245731
|
version: 1,
|
|
@@ -245906,9 +245807,9 @@ New: ${newNarrative.slice(0, 200)}...`,
|
|
|
245906
245807
|
let cid;
|
|
245907
245808
|
if (this.selfState.version > prevVersion) {
|
|
245908
245809
|
try {
|
|
245909
|
-
const { createHash:
|
|
245810
|
+
const { createHash: createHash14 } = await import("node:crypto");
|
|
245910
245811
|
const stateJson = JSON.stringify(this.selfState);
|
|
245911
|
-
const hash =
|
|
245812
|
+
const hash = createHash14("sha256").update(stateJson).digest("hex").slice(0, 32);
|
|
245912
245813
|
const cidsPath = join24(this.cwd, ".oa", "identity", "cids.json");
|
|
245913
245814
|
const cidsData = { latest: "", hash, version: this.selfState.version };
|
|
245914
245815
|
try {
|
|
@@ -524187,6 +524088,105 @@ var init_dist8 = __esm({
|
|
|
524187
524088
|
}
|
|
524188
524089
|
});
|
|
524189
524090
|
|
|
524091
|
+
// packages/cli/src/ui/spinner.ts
|
|
524092
|
+
var FRAMES, INTERVAL_MS, Spinner;
|
|
524093
|
+
var init_spinner = __esm({
|
|
524094
|
+
"packages/cli/src/ui/spinner.ts"() {
|
|
524095
|
+
"use strict";
|
|
524096
|
+
FRAMES = ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"];
|
|
524097
|
+
INTERVAL_MS = 80;
|
|
524098
|
+
Spinner = class {
|
|
524099
|
+
_text;
|
|
524100
|
+
_frameIndex = 0;
|
|
524101
|
+
_timer = null;
|
|
524102
|
+
_isSpinning = false;
|
|
524103
|
+
constructor(text) {
|
|
524104
|
+
this._text = text;
|
|
524105
|
+
}
|
|
524106
|
+
// --------------------------------------------------------------------------
|
|
524107
|
+
// Public API
|
|
524108
|
+
// --------------------------------------------------------------------------
|
|
524109
|
+
get text() {
|
|
524110
|
+
return this._text;
|
|
524111
|
+
}
|
|
524112
|
+
set text(value2) {
|
|
524113
|
+
this._text = value2;
|
|
524114
|
+
if (this._isSpinning && process.stdout.isTTY) {
|
|
524115
|
+
this._render();
|
|
524116
|
+
}
|
|
524117
|
+
}
|
|
524118
|
+
get isSpinning() {
|
|
524119
|
+
return this._isSpinning;
|
|
524120
|
+
}
|
|
524121
|
+
start() {
|
|
524122
|
+
if (this._isSpinning) return this;
|
|
524123
|
+
this._isSpinning = true;
|
|
524124
|
+
this._frameIndex = 0;
|
|
524125
|
+
if (process.stdout.isTTY) {
|
|
524126
|
+
process.stdout.write("\x1B[?25l");
|
|
524127
|
+
this._render();
|
|
524128
|
+
this._timer = setInterval(() => {
|
|
524129
|
+
this._frameIndex = (this._frameIndex + 1) % FRAMES.length;
|
|
524130
|
+
this._render();
|
|
524131
|
+
}, INTERVAL_MS);
|
|
524132
|
+
} else {
|
|
524133
|
+
process.stdout.write(`${this._text}
|
|
524134
|
+
`);
|
|
524135
|
+
}
|
|
524136
|
+
return this;
|
|
524137
|
+
}
|
|
524138
|
+
stop() {
|
|
524139
|
+
if (!this._isSpinning) return this;
|
|
524140
|
+
this._isSpinning = false;
|
|
524141
|
+
if (this._timer !== null) {
|
|
524142
|
+
clearInterval(this._timer);
|
|
524143
|
+
this._timer = null;
|
|
524144
|
+
}
|
|
524145
|
+
if (process.stdout.isTTY) {
|
|
524146
|
+
process.stdout.write("\r\x1B[K");
|
|
524147
|
+
process.stdout.write("\x1B[?25h");
|
|
524148
|
+
}
|
|
524149
|
+
return this;
|
|
524150
|
+
}
|
|
524151
|
+
succeed(message2) {
|
|
524152
|
+
this.stop();
|
|
524153
|
+
const msg = message2 ?? this._text;
|
|
524154
|
+
process.stdout.write(`\x1B[32m✔\x1B[0m ${msg}
|
|
524155
|
+
`);
|
|
524156
|
+
return this;
|
|
524157
|
+
}
|
|
524158
|
+
fail(message2) {
|
|
524159
|
+
this.stop();
|
|
524160
|
+
const msg = message2 ?? this._text;
|
|
524161
|
+
process.stdout.write(`\x1B[31m✖\x1B[0m ${msg}
|
|
524162
|
+
`);
|
|
524163
|
+
return this;
|
|
524164
|
+
}
|
|
524165
|
+
warn(message2) {
|
|
524166
|
+
this.stop();
|
|
524167
|
+
const msg = message2 ?? this._text;
|
|
524168
|
+
process.stdout.write(`\x1B[33m⚠\x1B[0m ${msg}
|
|
524169
|
+
`);
|
|
524170
|
+
return this;
|
|
524171
|
+
}
|
|
524172
|
+
info(message2) {
|
|
524173
|
+
this.stop();
|
|
524174
|
+
const msg = message2 ?? this._text;
|
|
524175
|
+
process.stdout.write(`\x1B[36mℹ\x1B[0m ${msg}
|
|
524176
|
+
`);
|
|
524177
|
+
return this;
|
|
524178
|
+
}
|
|
524179
|
+
// --------------------------------------------------------------------------
|
|
524180
|
+
// Private
|
|
524181
|
+
// --------------------------------------------------------------------------
|
|
524182
|
+
_render() {
|
|
524183
|
+
const frame = FRAMES[this._frameIndex] ?? FRAMES[0];
|
|
524184
|
+
process.stdout.write(`\r\x1B[36m${frame}\x1B[0m ${this._text}`);
|
|
524185
|
+
}
|
|
524186
|
+
};
|
|
524187
|
+
}
|
|
524188
|
+
});
|
|
524189
|
+
|
|
524190
524190
|
// packages/cli/src/api/py-embed.ts
|
|
524191
524191
|
var py_embed_exports = {};
|
|
524192
524192
|
__export(py_embed_exports, {
|
|
@@ -527292,7 +527292,7 @@ var require_websocket3 = __commonJS({
|
|
|
527292
527292
|
var http6 = __require("http");
|
|
527293
527293
|
var net5 = __require("net");
|
|
527294
527294
|
var tls2 = __require("tls");
|
|
527295
|
-
var { randomBytes: randomBytes23, createHash:
|
|
527295
|
+
var { randomBytes: randomBytes23, createHash: createHash14 } = __require("crypto");
|
|
527296
527296
|
var { Duplex: Duplex3, Readable } = __require("stream");
|
|
527297
527297
|
var { URL: URL3 } = __require("url");
|
|
527298
527298
|
var PerMessageDeflate2 = require_permessage_deflate3();
|
|
@@ -527952,7 +527952,7 @@ var require_websocket3 = __commonJS({
|
|
|
527952
527952
|
abortHandshake(websocket, socket, "Invalid Upgrade header");
|
|
527953
527953
|
return;
|
|
527954
527954
|
}
|
|
527955
|
-
const digest3 =
|
|
527955
|
+
const digest3 = createHash14("sha1").update(key + GUID).digest("base64");
|
|
527956
527956
|
if (res.headers["sec-websocket-accept"] !== digest3) {
|
|
527957
527957
|
abortHandshake(websocket, socket, "Invalid Sec-WebSocket-Accept header");
|
|
527958
527958
|
return;
|
|
@@ -528319,7 +528319,7 @@ var require_websocket_server2 = __commonJS({
|
|
|
528319
528319
|
var EventEmitter12 = __require("events");
|
|
528320
528320
|
var http6 = __require("http");
|
|
528321
528321
|
var { Duplex: Duplex3 } = __require("stream");
|
|
528322
|
-
var { createHash:
|
|
528322
|
+
var { createHash: createHash14 } = __require("crypto");
|
|
528323
528323
|
var extension2 = require_extension3();
|
|
528324
528324
|
var PerMessageDeflate2 = require_permessage_deflate3();
|
|
528325
528325
|
var subprotocol2 = require_subprotocol2();
|
|
@@ -528620,7 +528620,7 @@ var require_websocket_server2 = __commonJS({
|
|
|
528620
528620
|
);
|
|
528621
528621
|
}
|
|
528622
528622
|
if (this._state > RUNNING) return abortHandshake(socket, 503);
|
|
528623
|
-
const digest3 =
|
|
528623
|
+
const digest3 = createHash14("sha1").update(key + GUID).digest("base64");
|
|
528624
528624
|
const headers = [
|
|
528625
528625
|
"HTTP/1.1 101 Switching Protocols",
|
|
528626
528626
|
"Upgrade: websocket",
|
|
@@ -529663,9 +529663,10 @@ __export(oa_directory_exports, {
|
|
|
529663
529663
|
writeIndexData: () => writeIndexData,
|
|
529664
529664
|
writeIndexMeta: () => writeIndexMeta
|
|
529665
529665
|
});
|
|
529666
|
-
import { existsSync as existsSync57, mkdirSync as mkdirSync32, readFileSync as readFileSync44, writeFileSync as writeFileSync29, readdirSync as readdirSync14, statSync as statSync17, unlinkSync as unlinkSync14, openSync as openSync2, closeSync as closeSync2 } from "node:fs";
|
|
529666
|
+
import { existsSync as existsSync57, mkdirSync as mkdirSync32, readFileSync as readFileSync44, writeFileSync as writeFileSync29, readdirSync as readdirSync14, statSync as statSync17, unlinkSync as unlinkSync14, openSync as openSync2, closeSync as closeSync2, renameSync as renameSync3 } from "node:fs";
|
|
529667
529667
|
import { join as join75, relative as relative6, basename as basename13, dirname as dirname22 } from "node:path";
|
|
529668
529668
|
import { homedir as homedir25 } from "node:os";
|
|
529669
|
+
import { createHash as createHash8 } from "node:crypto";
|
|
529669
529670
|
function findGitRoot(startDir) {
|
|
529670
529671
|
let dir = startDir;
|
|
529671
529672
|
const visited = /* @__PURE__ */ new Set();
|
|
@@ -529944,6 +529945,14 @@ function loadPendingTask(repoRoot) {
|
|
|
529944
529945
|
return null;
|
|
529945
529946
|
}
|
|
529946
529947
|
}
|
|
529948
|
+
function computeDedupeHash(task, savedAt) {
|
|
529949
|
+
return createHash8("sha256").update(`${task}|${savedAt}`).digest("hex").slice(0, 16);
|
|
529950
|
+
}
|
|
529951
|
+
function generateSessionId() {
|
|
529952
|
+
const timestamp = Date.now().toString(36);
|
|
529953
|
+
const random = Math.random().toString(36).slice(2, 8);
|
|
529954
|
+
return `${timestamp}-${random}`;
|
|
529955
|
+
}
|
|
529947
529956
|
function acquireLock(lockPath) {
|
|
529948
529957
|
const startTime = Date.now();
|
|
529949
529958
|
const pid = process.pid;
|
|
@@ -530027,16 +530036,11 @@ function normalizeSessionContextEntry(entry) {
|
|
|
530027
530036
|
const assistantResponse = normalizeSessionText(entry.assistantResponse, 1200);
|
|
530028
530037
|
if (assistantResponse) normalized.assistantResponse = assistantResponse;
|
|
530029
530038
|
if (entry.source) normalized.source = entry.source;
|
|
530030
|
-
|
|
530031
|
-
|
|
530032
|
-
|
|
530033
|
-
const left = a2 ?? [];
|
|
530034
|
-
const right = b ?? [];
|
|
530035
|
-
if (left.length !== right.length) return false;
|
|
530036
|
-
for (let i2 = 0; i2 < left.length; i2++) {
|
|
530037
|
-
if (left[i2] !== right[i2]) return false;
|
|
530039
|
+
normalized._dedupeHash = computeDedupeHash(normalized.task, normalized.savedAt);
|
|
530040
|
+
if (!normalized.sessionId) {
|
|
530041
|
+
normalized.sessionId = generateSessionId();
|
|
530038
530042
|
}
|
|
530039
|
-
return
|
|
530043
|
+
return normalized;
|
|
530040
530044
|
}
|
|
530041
530045
|
function lastMatchingIndex(items, predicate) {
|
|
530042
530046
|
for (let i2 = items.length - 1; i2 >= 0; i2--) {
|
|
@@ -530058,9 +530062,6 @@ function isWithinReplaceWindow(a2, b) {
|
|
|
530058
530062
|
if (left == null || right == null) return true;
|
|
530059
530063
|
return Math.abs(right - left) <= SAME_TASK_REPLACE_WINDOW_MS;
|
|
530060
530064
|
}
|
|
530061
|
-
function isExactSessionDuplicate(a2, b) {
|
|
530062
|
-
return sameTask(a2, b) && a2.summary === b.summary && (a2.assistantResponse ?? "") === (b.assistantResponse ?? "") && sameStringArray(a2.filesModified, b.filesModified) && sameStringArray(a2.toolsUsed, b.toolsUsed) && (a2.provenance ?? "") === (b.provenance ?? "") && a2.toolCalls === b.toolCalls && a2.completed === b.completed && a2.model === b.model;
|
|
530063
|
-
}
|
|
530064
530065
|
function mergeSessionContextEntry(previous, incoming) {
|
|
530065
530066
|
return {
|
|
530066
530067
|
...previous,
|
|
@@ -530099,12 +530100,19 @@ function saveSessionContext(repoRoot, entry) {
|
|
|
530099
530100
|
ctx3 = { entries: [], maxEntries: MAX_CONTEXT_ENTRIES, updatedAt: "" };
|
|
530100
530101
|
}
|
|
530101
530102
|
const normalizedEntry = normalizeSessionContextEntry(entry);
|
|
530102
|
-
const
|
|
530103
|
-
|
|
530104
|
-
|
|
530105
|
-
|
|
530106
|
-
|
|
530107
|
-
|
|
530103
|
+
const hashToIndex = /* @__PURE__ */ new Map();
|
|
530104
|
+
for (let i2 = 0; i2 < ctx3.entries.length; i2++) {
|
|
530105
|
+
const existing = ctx3.entries[i2];
|
|
530106
|
+
const hash = existing._dedupeHash || computeDedupeHash(
|
|
530107
|
+
cleanPromptForDiary(existing.task),
|
|
530108
|
+
existing.savedAt
|
|
530109
|
+
);
|
|
530110
|
+
hashToIndex.set(hash, i2);
|
|
530111
|
+
}
|
|
530112
|
+
const incomingHash = normalizedEntry._dedupeHash;
|
|
530113
|
+
const hashMatchIndex = hashToIndex.get(incomingHash);
|
|
530114
|
+
if (hashMatchIndex !== void 0) {
|
|
530115
|
+
ctx3.entries[hashMatchIndex] = mergeSessionContextEntry(ctx3.entries[hashMatchIndex], normalizedEntry);
|
|
530108
530116
|
} else {
|
|
530109
530117
|
const relatedIndex = lastMatchingIndex(ctx3.entries, (existing) => {
|
|
530110
530118
|
const normalizedExisting = normalizeSessionContextEntry(existing);
|
|
@@ -530129,7 +530137,17 @@ function saveSessionContext(repoRoot, entry) {
|
|
|
530129
530137
|
ctx3.entries = ctx3.entries.slice(-ctx3.maxEntries);
|
|
530130
530138
|
}
|
|
530131
530139
|
ctx3.updatedAt = (/* @__PURE__ */ new Date()).toISOString();
|
|
530132
|
-
|
|
530140
|
+
const tempFilePath = filePath + ".tmp";
|
|
530141
|
+
writeFileSync29(tempFilePath, JSON.stringify(ctx3, null, 2) + "\n", "utf-8");
|
|
530142
|
+
try {
|
|
530143
|
+
renameSync3(tempFilePath, filePath);
|
|
530144
|
+
} catch {
|
|
530145
|
+
writeFileSync29(filePath, JSON.stringify(ctx3, null, 2) + "\n", "utf-8");
|
|
530146
|
+
try {
|
|
530147
|
+
unlinkSync14(tempFilePath);
|
|
530148
|
+
} catch {
|
|
530149
|
+
}
|
|
530150
|
+
}
|
|
530133
530151
|
try {
|
|
530134
530152
|
writeFileSync29(
|
|
530135
530153
|
join75(contextDir, "session-diary.md"),
|
|
@@ -534227,6 +534245,7 @@ ${CONTENT_BG_SEQ}`);
|
|
|
534227
534245
|
process.stdout.write(RESET2);
|
|
534228
534246
|
this._brailleSpinner.setMetrics({ isStreaming: false });
|
|
534229
534247
|
this.renderFooterAndPositionInput();
|
|
534248
|
+
this.parkCursorInInput();
|
|
534230
534249
|
this.scheduleMouseIdle();
|
|
534231
534250
|
}
|
|
534232
534251
|
}
|
|
@@ -534905,6 +534924,27 @@ ${CONTENT_BG_SEQ}`);
|
|
|
534905
534924
|
this.termWrite(
|
|
534906
534925
|
`\x1B[${this.scrollRegionTop};${pos.scrollEnd}r\x1B[${pos.scrollEnd};1H` + (clearScrollback ? "\x1B[3J" : "")
|
|
534907
534926
|
);
|
|
534927
|
+
if (this.writeDepth === 0) {
|
|
534928
|
+
this.parkCursorInInput();
|
|
534929
|
+
}
|
|
534930
|
+
}
|
|
534931
|
+
/**
|
|
534932
|
+
* Park cursor in the input row — ensures cursor is always in the input area
|
|
534933
|
+
* after scroll region changes or other operations that may leave it elsewhere.
|
|
534934
|
+
* Called after applyScrollRegion() and in endContentWrite() for safety.
|
|
534935
|
+
*/
|
|
534936
|
+
parkCursorInInput() {
|
|
534937
|
+
if (!this.active) return;
|
|
534938
|
+
const rows = termRows();
|
|
534939
|
+
const w = getTermWidth();
|
|
534940
|
+
const pos = this.rowPositions(rows);
|
|
534941
|
+
const inputWrap = this.wrapInput(w);
|
|
534942
|
+
const cursorRow = pos.inputStartRow + inputWrap.cursorRow;
|
|
534943
|
+
const cursorCol = inputWrap.cursorCol;
|
|
534944
|
+
if (process.env.OA_DEBUG_CURSOR === "1") {
|
|
534945
|
+
console.error(`[CURSOR DEBUG] parkCursorInInput: row=${cursorRow}, col=${cursorCol}, inputStartRow=${pos.inputStartRow}, cursorRow=${inputWrap.cursorRow}, writeDepth=${this.writeDepth}`);
|
|
534946
|
+
}
|
|
534947
|
+
this.termWrite(`\x1B[${cursorRow};${cursorCol}H\x1B[?25h`);
|
|
534908
534948
|
}
|
|
534909
534949
|
/**
|
|
534910
534950
|
* WO-TASK-02 — Public hook for the TUI tasks renderer. When the tasks
|
|
@@ -557973,7 +558013,7 @@ var init_types = __esm({
|
|
|
557973
558013
|
});
|
|
557974
558014
|
|
|
557975
558015
|
// packages/cli/src/tui/p2p/secret-vault.ts
|
|
557976
|
-
import { createCipheriv as createCipheriv3, createDecipheriv as createDecipheriv3, randomBytes as randomBytes18, scryptSync as scryptSync2, createHash as
|
|
558016
|
+
import { createCipheriv as createCipheriv3, createDecipheriv as createDecipheriv3, randomBytes as randomBytes18, scryptSync as scryptSync2, createHash as createHash9 } from "node:crypto";
|
|
557977
558017
|
import { readFileSync as readFileSync54, writeFileSync as writeFileSync37, existsSync as existsSync69, mkdirSync as mkdirSync40 } from "node:fs";
|
|
557978
558018
|
import { dirname as dirname26 } from "node:path";
|
|
557979
558019
|
var PLACEHOLDER_PREFIX, PLACEHOLDER_SUFFIX, CIPHER_ALGO, SALT_LEN, IV_LEN, KEY_LEN, SecretVault;
|
|
@@ -558218,7 +558258,7 @@ var init_secret_vault = __esm({
|
|
|
558218
558258
|
/** Generate a deterministic fingerprint of vault contents (for sync verification) */
|
|
558219
558259
|
fingerprint() {
|
|
558220
558260
|
const names = Array.from(this.secrets.keys()).sort();
|
|
558221
|
-
const hash =
|
|
558261
|
+
const hash = createHash9("sha256");
|
|
558222
558262
|
for (const name10 of names) {
|
|
558223
558263
|
hash.update(name10 + ":");
|
|
558224
558264
|
hash.update(this.secrets.get(name10).value);
|
|
@@ -558233,7 +558273,7 @@ var init_secret_vault = __esm({
|
|
|
558233
558273
|
// packages/cli/src/tui/p2p/peer-mesh.ts
|
|
558234
558274
|
import { EventEmitter as EventEmitter7 } from "node:events";
|
|
558235
558275
|
import { createServer as createServer5 } from "node:http";
|
|
558236
|
-
import { randomBytes as randomBytes19, createHash as
|
|
558276
|
+
import { randomBytes as randomBytes19, createHash as createHash10, generateKeyPairSync } from "node:crypto";
|
|
558237
558277
|
var PING_INTERVAL_MS, PEER_TIMEOUT_MS, GOSSIP_INTERVAL_MS, MAX_PEERS, PeerMesh;
|
|
558238
558278
|
var init_peer_mesh = __esm({
|
|
558239
558279
|
"packages/cli/src/tui/p2p/peer-mesh.ts"() {
|
|
@@ -558250,7 +558290,7 @@ var init_peer_mesh = __esm({
|
|
|
558250
558290
|
const { publicKey: publicKey2, privateKey } = generateKeyPairSync("ed25519");
|
|
558251
558291
|
this.publicKey = publicKey2.export({ type: "spki", format: "der" });
|
|
558252
558292
|
this.privateKey = privateKey.export({ type: "pkcs8", format: "der" });
|
|
558253
|
-
this.peerId =
|
|
558293
|
+
this.peerId = createHash10("sha256").update(this.publicKey).digest("base64url").slice(0, 22);
|
|
558254
558294
|
this.capabilities = options2.capabilities;
|
|
558255
558295
|
this.displayName = options2.displayName;
|
|
558256
558296
|
this._authKey = options2.authKey ?? randomBytes19(24).toString("base64url");
|
|
@@ -566114,7 +566154,7 @@ import {
|
|
|
566114
566154
|
readFileSync as readFileSync62,
|
|
566115
566155
|
readdirSync as readdirSync25,
|
|
566116
566156
|
writeFileSync as writeFileSync42,
|
|
566117
|
-
renameSync as
|
|
566157
|
+
renameSync as renameSync5,
|
|
566118
566158
|
mkdirSync as mkdirSync47,
|
|
566119
566159
|
unlinkSync as unlinkSync21
|
|
566120
566160
|
} from "node:fs";
|
|
@@ -566137,7 +566177,7 @@ function persistSession(s2) {
|
|
|
566137
566177
|
const final2 = sessionPath(s2.id);
|
|
566138
566178
|
const tmp = `${final2}.tmp.${process.pid}.${Date.now()}`;
|
|
566139
566179
|
writeFileSync42(tmp, JSON.stringify(s2, null, 2), "utf-8");
|
|
566140
|
-
|
|
566180
|
+
renameSync5(tmp, final2);
|
|
566141
566181
|
} catch {
|
|
566142
566182
|
}
|
|
566143
566183
|
}
|
|
@@ -566147,7 +566187,7 @@ function persistInFlight(j) {
|
|
|
566147
566187
|
const final2 = inFlightPath(j.sessionId);
|
|
566148
566188
|
const tmp = `${final2}.tmp.${process.pid}.${Date.now()}`;
|
|
566149
566189
|
writeFileSync42(tmp, JSON.stringify(j, null, 2), "utf-8");
|
|
566150
|
-
|
|
566190
|
+
renameSync5(tmp, final2);
|
|
566151
566191
|
} catch {
|
|
566152
566192
|
}
|
|
566153
566193
|
}
|
|
@@ -566529,7 +566569,7 @@ __export(projects_exports, {
|
|
|
566529
566569
|
setCurrentProject: () => setCurrentProject,
|
|
566530
566570
|
unregisterProject: () => unregisterProject
|
|
566531
566571
|
});
|
|
566532
|
-
import { readFileSync as readFileSync63, writeFileSync as writeFileSync43, mkdirSync as mkdirSync48, existsSync as existsSync79, statSync as statSync23, renameSync as
|
|
566572
|
+
import { readFileSync as readFileSync63, writeFileSync as writeFileSync43, mkdirSync as mkdirSync48, existsSync as existsSync79, statSync as statSync23, renameSync as renameSync6 } from "node:fs";
|
|
566533
566573
|
import { homedir as homedir34 } from "node:os";
|
|
566534
566574
|
import { basename as basename19, join as join97, resolve as resolve34 } from "node:path";
|
|
566535
566575
|
import { randomUUID as randomUUID12 } from "node:crypto";
|
|
@@ -566548,7 +566588,7 @@ function writeAll(file) {
|
|
|
566548
566588
|
mkdirSync48(OA_DIR3, { recursive: true });
|
|
566549
566589
|
const tmp = `${PROJECTS_FILE}.${randomUUID12().slice(0, 8)}.tmp`;
|
|
566550
566590
|
writeFileSync43(tmp, JSON.stringify(file, null, 2), "utf8");
|
|
566551
|
-
|
|
566591
|
+
renameSync6(tmp, PROJECTS_FILE);
|
|
566552
566592
|
}
|
|
566553
566593
|
function listProjects() {
|
|
566554
566594
|
const { projects } = readAll();
|
|
@@ -567542,7 +567582,7 @@ var init_disk_task_output = __esm({
|
|
|
567542
567582
|
});
|
|
567543
567583
|
|
|
567544
567584
|
// packages/cli/src/api/http.ts
|
|
567545
|
-
import { createHash as
|
|
567585
|
+
import { createHash as createHash11 } from "node:crypto";
|
|
567546
567586
|
function problemDetails(opts) {
|
|
567547
567587
|
const p2 = {
|
|
567548
567588
|
type: opts.type ?? "about:blank",
|
|
@@ -567605,7 +567645,7 @@ function paginated(items, page2, total) {
|
|
|
567605
567645
|
}
|
|
567606
567646
|
function computeEtag(payload) {
|
|
567607
567647
|
const json = typeof payload === "string" ? payload : JSON.stringify(payload);
|
|
567608
|
-
const hash =
|
|
567648
|
+
const hash = createHash11("sha1").update(json).digest("hex").slice(0, 16);
|
|
567609
567649
|
return `W/"${hash}"`;
|
|
567610
567650
|
}
|
|
567611
567651
|
function checkNotModified(req2, res, etag) {
|
|
@@ -575384,7 +575424,7 @@ import { homedir as homedir39 } from "node:os";
|
|
|
575384
575424
|
import { spawn as spawn25, execSync as execSync55 } from "node:child_process";
|
|
575385
575425
|
import { mkdirSync as mkdirSync54, writeFileSync as writeFileSync47, readFileSync as readFileSync69, readdirSync as readdirSync29, existsSync as existsSync87, watch as fsWatch3 } from "node:fs";
|
|
575386
575426
|
import { randomBytes as randomBytes21, randomUUID as randomUUID13 } from "node:crypto";
|
|
575387
|
-
import { createHash as
|
|
575427
|
+
import { createHash as createHash13 } from "node:crypto";
|
|
575388
575428
|
function getVersion3() {
|
|
575389
575429
|
try {
|
|
575390
575430
|
const require3 = createRequire4(import.meta.url);
|
|
@@ -576131,8 +576171,9 @@ function checkAuth(req2, res, requiredScope = "read") {
|
|
|
576131
576171
|
});
|
|
576132
576172
|
return false;
|
|
576133
576173
|
}
|
|
576134
|
-
|
|
576135
|
-
|
|
576174
|
+
const reqWithAuth = req2;
|
|
576175
|
+
reqWithAuth._authUser = auth.user;
|
|
576176
|
+
reqWithAuth._authScope = auth.scope;
|
|
576136
576177
|
return true;
|
|
576137
576178
|
}
|
|
576138
576179
|
function handleHealth(res) {
|
|
@@ -579410,7 +579451,7 @@ function listScheduledTasks() {
|
|
|
579410
579451
|
const schedule = String(t2?.schedule || t2?.cron || t2?.when || "");
|
|
579411
579452
|
const enabled2 = typeof t2?.enabled === "boolean" ? t2.enabled : true;
|
|
579412
579453
|
const realId = typeof t2?.id === "string" && t2.id ? t2.id : null;
|
|
579413
|
-
const fallbackId =
|
|
579454
|
+
const fallbackId = createHash13("sha1").update(`${file}#${i2}`).digest("hex").slice(0, 16);
|
|
579414
579455
|
const uid = realId || fallbackId;
|
|
579415
579456
|
const key = `${uid}`;
|
|
579416
579457
|
if (seen.has(key)) return;
|
|
@@ -579527,8 +579568,8 @@ function deleteScheduledById(id) {
|
|
|
579527
579568
|
if (id) candidates.push(id);
|
|
579528
579569
|
if (typeof entry?.id === "string" && entry.id && !candidates.includes(entry.id)) candidates.push(entry.id);
|
|
579529
579570
|
try {
|
|
579530
|
-
const { createHash:
|
|
579531
|
-
const fallback =
|
|
579571
|
+
const { createHash: createHash14 } = __require("node:crypto");
|
|
579572
|
+
const fallback = createHash14("sha1").update(`${target.file}#${target.index}`).digest("hex").slice(0, 16);
|
|
579532
579573
|
if (!candidates.includes(fallback)) candidates.push(fallback);
|
|
579533
579574
|
} catch {
|
|
579534
579575
|
}
|
|
@@ -587107,13 +587148,13 @@ ${fullInput}`;
|
|
|
587107
587148
|
writeContent(() => renderError2(errMsg));
|
|
587108
587149
|
if (failureStore) {
|
|
587109
587150
|
try {
|
|
587110
|
-
const { createHash:
|
|
587151
|
+
const { createHash: createHash14 } = await import("node:crypto");
|
|
587111
587152
|
failureStore.insert({
|
|
587112
587153
|
taskId: "",
|
|
587113
587154
|
sessionId: `${Date.now()}`,
|
|
587114
587155
|
repoRoot,
|
|
587115
587156
|
failureType: "runtime-error",
|
|
587116
|
-
fingerprint:
|
|
587157
|
+
fingerprint: createHash14("sha256").update(errMsg.slice(0, 200)).digest("hex").slice(0, 16),
|
|
587117
587158
|
filePath: null,
|
|
587118
587159
|
errorMessage: errMsg.slice(0, 500),
|
|
587119
587160
|
context: null,
|
|
@@ -588716,6 +588757,7 @@ import { dirname as dirname33, join as join109 } from "node:path";
|
|
|
588716
588757
|
|
|
588717
588758
|
// packages/cli/src/cli.ts
|
|
588718
588759
|
init_typed_node_events();
|
|
588760
|
+
init_dist8();
|
|
588719
588761
|
import { createInterface } from "node:readline";
|
|
588720
588762
|
function createCli(options2) {
|
|
588721
588763
|
return {
|
|
@@ -588725,6 +588767,29 @@ function createCli(options2) {
|
|
|
588725
588767
|
console.log(`Backend: ${options2.backendUrl}`);
|
|
588726
588768
|
console.log(`Project: ${options2.projectRoot}`);
|
|
588727
588769
|
console.log("");
|
|
588770
|
+
const backend = new OllamaAgenticBackend(options2.backendUrl, options2.model);
|
|
588771
|
+
const runner = new AgenticRunner(backend, {
|
|
588772
|
+
maxTurns: 50
|
|
588773
|
+
});
|
|
588774
|
+
runner.onEvent((event) => {
|
|
588775
|
+
switch (event.type) {
|
|
588776
|
+
case "tool_call":
|
|
588777
|
+
if (event.toolName) console.log(`[tool] ${event.toolName}`);
|
|
588778
|
+
break;
|
|
588779
|
+
case "tool_result":
|
|
588780
|
+
if (event.toolName) console.log(`[tool] ${event.toolName} ${event.success ? "✓" : "✗"}`);
|
|
588781
|
+
break;
|
|
588782
|
+
case "status":
|
|
588783
|
+
if (event.content) console.log(`[status] ${event.content.slice(0, 100)}`);
|
|
588784
|
+
break;
|
|
588785
|
+
case "assistant_text":
|
|
588786
|
+
if (event.content) process.stdout.write(event.content);
|
|
588787
|
+
break;
|
|
588788
|
+
case "error":
|
|
588789
|
+
if (event.content) console.error(`[error] ${event.content}`);
|
|
588790
|
+
break;
|
|
588791
|
+
}
|
|
588792
|
+
});
|
|
588728
588793
|
const rl = createInterface({
|
|
588729
588794
|
input: process.stdin,
|
|
588730
588795
|
output: process.stdout,
|
|
@@ -588742,8 +588807,16 @@ function createCli(options2) {
|
|
|
588742
588807
|
rl.close();
|
|
588743
588808
|
return;
|
|
588744
588809
|
}
|
|
588745
|
-
|
|
588746
|
-
|
|
588810
|
+
try {
|
|
588811
|
+
const result = await runner.run(input);
|
|
588812
|
+
console.log("");
|
|
588813
|
+
console.log(`[agent] Task completed: ${result.completed ? "success" : "incomplete"}`);
|
|
588814
|
+
if (result.summary) {
|
|
588815
|
+
console.log(`[agent] Summary: ${result.summary.slice(0, 200)}`);
|
|
588816
|
+
}
|
|
588817
|
+
} catch (err) {
|
|
588818
|
+
console.error("[agent] Error:", err instanceof Error ? err.message : String(err));
|
|
588819
|
+
}
|
|
588747
588820
|
console.log("");
|
|
588748
588821
|
rl.prompt();
|
|
588749
588822
|
});
|
package/npm-shrinkwrap.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "open-agents-ai",
|
|
3
|
-
"version": "0.187.
|
|
3
|
+
"version": "0.187.432",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "open-agents-ai",
|
|
9
|
-
"version": "0.187.
|
|
9
|
+
"version": "0.187.432",
|
|
10
10
|
"hasInstallScript": true,
|
|
11
11
|
"license": "CC-BY-NC-4.0",
|
|
12
12
|
"dependencies": {
|
|
@@ -3229,9 +3229,9 @@
|
|
|
3229
3229
|
}
|
|
3230
3230
|
},
|
|
3231
3231
|
"node_modules/caniuse-lite": {
|
|
3232
|
-
"version": "1.0.
|
|
3233
|
-
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.
|
|
3234
|
-
"integrity": "sha512-
|
|
3232
|
+
"version": "1.0.30001790",
|
|
3233
|
+
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001790.tgz",
|
|
3234
|
+
"integrity": "sha512-bOoxfJPyYo+ds6W0YfptaCWbFnJYjh2Y1Eow5lRv+vI2u8ganPZqNm1JwNh0t2ELQCqIWg4B3dWEusgAmsoyOw==",
|
|
3235
3235
|
"funding": [
|
|
3236
3236
|
{
|
|
3237
3237
|
"type": "opencollective",
|
|
@@ -3944,9 +3944,9 @@
|
|
|
3944
3944
|
"license": "MIT"
|
|
3945
3945
|
},
|
|
3946
3946
|
"node_modules/electron-to-chromium": {
|
|
3947
|
-
"version": "1.5.
|
|
3948
|
-
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.
|
|
3949
|
-
"integrity": "sha512-
|
|
3947
|
+
"version": "1.5.343",
|
|
3948
|
+
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.343.tgz",
|
|
3949
|
+
"integrity": "sha512-YHnQ3MXI08icvL9ZKnEBy05F2EQ8ob01UaMOuMbM8l+4UcAq6MPPbBTJBbsBUg3H8JeZNt+O4fjsoWth3p6IFg==",
|
|
3950
3950
|
"license": "ISC",
|
|
3951
3951
|
"peer": true
|
|
3952
3952
|
},
|
|
@@ -6822,9 +6822,9 @@
|
|
|
6822
6822
|
}
|
|
6823
6823
|
},
|
|
6824
6824
|
"node_modules/node-releases": {
|
|
6825
|
-
"version": "2.0.
|
|
6826
|
-
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.
|
|
6827
|
-
"integrity": "sha512-
|
|
6825
|
+
"version": "2.0.38",
|
|
6826
|
+
"resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.38.tgz",
|
|
6827
|
+
"integrity": "sha512-3qT/88Y3FbH/Kx4szpQQ4HzUbVrHPKTLVpVocKiLfoYvw9XSGOX2FmD2d6DrXbVYyAQTF2HeF6My8jmzx7/CRw==",
|
|
6828
6828
|
"license": "MIT",
|
|
6829
6829
|
"peer": true
|
|
6830
6830
|
},
|
package/package.json
CHANGED