@signetai/connector-hermes-agent 0.206.7 → 0.207.2
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 +270 -10
- package/package.json +3 -3
package/dist/index.js
CHANGED
|
@@ -15621,6 +15621,92 @@ function up132(db) {
|
|
|
15621
15621
|
ON epistemic_assertions(agent_id, subject_entity_id, status, asserted_at DESC, created_at DESC);
|
|
15622
15622
|
`);
|
|
15623
15623
|
}
|
|
15624
|
+
function up133(db) {
|
|
15625
|
+
db.exec(`
|
|
15626
|
+
CREATE TABLE IF NOT EXISTS memory_head_revisions (
|
|
15627
|
+
id TEXT PRIMARY KEY,
|
|
15628
|
+
agent_id TEXT NOT NULL,
|
|
15629
|
+
revision INTEGER NOT NULL,
|
|
15630
|
+
content TEXT NOT NULL,
|
|
15631
|
+
content_hash TEXT NOT NULL,
|
|
15632
|
+
rendered_token_count INTEGER NOT NULL,
|
|
15633
|
+
pass_id TEXT NOT NULL,
|
|
15634
|
+
base_revision INTEGER NOT NULL,
|
|
15635
|
+
base_hash TEXT NOT NULL,
|
|
15636
|
+
created_at TEXT NOT NULL,
|
|
15637
|
+
UNIQUE(agent_id, revision)
|
|
15638
|
+
);
|
|
15639
|
+
CREATE INDEX IF NOT EXISTS idx_memory_head_revisions_agent
|
|
15640
|
+
ON memory_head_revisions(agent_id, revision DESC);
|
|
15641
|
+
CREATE TABLE IF NOT EXISTS memory_head_entries (
|
|
15642
|
+
entry_id TEXT PRIMARY KEY,
|
|
15643
|
+
agent_id TEXT NOT NULL,
|
|
15644
|
+
canonical_text TEXT NOT NULL,
|
|
15645
|
+
entry_hash TEXT NOT NULL,
|
|
15646
|
+
status TEXT NOT NULL CHECK(status IN ('active','removed','superseded')),
|
|
15647
|
+
first_revision INTEGER NOT NULL,
|
|
15648
|
+
last_revision INTEGER NOT NULL,
|
|
15649
|
+
created_at TEXT NOT NULL,
|
|
15650
|
+
updated_at TEXT NOT NULL
|
|
15651
|
+
);
|
|
15652
|
+
CREATE INDEX IF NOT EXISTS idx_memory_head_entries_agent
|
|
15653
|
+
ON memory_head_entries(agent_id, entry_id, last_revision DESC);
|
|
15654
|
+
CREATE TABLE IF NOT EXISTS memory_head_revision_entries (
|
|
15655
|
+
agent_id TEXT NOT NULL,
|
|
15656
|
+
revision INTEGER NOT NULL,
|
|
15657
|
+
entry_id TEXT NOT NULL,
|
|
15658
|
+
ordinal INTEGER NOT NULL,
|
|
15659
|
+
operation TEXT NOT NULL CHECK(operation IN ('add','update','remove','retain')),
|
|
15660
|
+
provenance_json TEXT NOT NULL,
|
|
15661
|
+
PRIMARY KEY(agent_id, revision, entry_id),
|
|
15662
|
+
UNIQUE(agent_id, revision, ordinal)
|
|
15663
|
+
);
|
|
15664
|
+
CREATE INDEX IF NOT EXISTS idx_memory_head_revision_entries_entry
|
|
15665
|
+
ON memory_head_revision_entries(agent_id, entry_id, revision DESC);
|
|
15666
|
+
`);
|
|
15667
|
+
const columns = db.prepare("PRAGMA table_info(memory_md_heads)").all();
|
|
15668
|
+
const names = new Set(columns.map((column) => String(column.name)));
|
|
15669
|
+
if (!names.has("revision_id"))
|
|
15670
|
+
db.exec("ALTER TABLE memory_md_heads ADD COLUMN revision_id TEXT");
|
|
15671
|
+
if (!names.has("pass_id"))
|
|
15672
|
+
db.exec("ALTER TABLE memory_md_heads ADD COLUMN pass_id TEXT");
|
|
15673
|
+
if (!names.has("format_version"))
|
|
15674
|
+
db.exec("ALTER TABLE memory_md_heads ADD COLUMN format_version INTEGER NOT NULL DEFAULT 1");
|
|
15675
|
+
}
|
|
15676
|
+
function up134(db) {
|
|
15677
|
+
db.exec(`
|
|
15678
|
+
CREATE TABLE memory_head_entries_v134 (
|
|
15679
|
+
entry_id TEXT NOT NULL, agent_id TEXT NOT NULL, canonical_text TEXT NOT NULL,
|
|
15680
|
+
entry_hash TEXT NOT NULL, status TEXT NOT NULL CHECK(status IN ('active','removed','superseded')),
|
|
15681
|
+
first_revision INTEGER NOT NULL, last_revision INTEGER NOT NULL,
|
|
15682
|
+
created_at TEXT NOT NULL, updated_at TEXT NOT NULL,
|
|
15683
|
+
PRIMARY KEY(agent_id, entry_id)
|
|
15684
|
+
);
|
|
15685
|
+
INSERT INTO memory_head_entries_v134
|
|
15686
|
+
SELECT entry_id, agent_id, canonical_text, entry_hash, status, first_revision, last_revision, created_at, updated_at
|
|
15687
|
+
FROM memory_head_entries;
|
|
15688
|
+
DROP TABLE memory_head_entries;
|
|
15689
|
+
ALTER TABLE memory_head_entries_v134 RENAME TO memory_head_entries;
|
|
15690
|
+
CREATE INDEX idx_memory_head_entries_agent
|
|
15691
|
+
ON memory_head_entries(agent_id, entry_id, last_revision DESC);
|
|
15692
|
+
`);
|
|
15693
|
+
}
|
|
15694
|
+
function up135(db) {
|
|
15695
|
+
db.exec(`
|
|
15696
|
+
CREATE TABLE IF NOT EXISTS memory_head_publications (
|
|
15697
|
+
agent_id TEXT NOT NULL,
|
|
15698
|
+
revision INTEGER NOT NULL,
|
|
15699
|
+
revision_id TEXT NOT NULL,
|
|
15700
|
+
status TEXT NOT NULL CHECK(status IN ('pending', 'completed')),
|
|
15701
|
+
created_at TEXT NOT NULL,
|
|
15702
|
+
completed_at TEXT,
|
|
15703
|
+
PRIMARY KEY(agent_id, revision),
|
|
15704
|
+
UNIQUE(agent_id, revision_id)
|
|
15705
|
+
);
|
|
15706
|
+
CREATE INDEX IF NOT EXISTS idx_memory_head_publications_pending
|
|
15707
|
+
ON memory_head_publications(agent_id, status, revision DESC);
|
|
15708
|
+
`);
|
|
15709
|
+
}
|
|
15624
15710
|
var MIGRATIONS = [
|
|
15625
15711
|
{
|
|
15626
15712
|
version: 1,
|
|
@@ -16675,6 +16761,24 @@ var MIGRATIONS = [
|
|
|
16675
16761
|
name: "observer-scoped-epistemic-assertions",
|
|
16676
16762
|
up: up132,
|
|
16677
16763
|
artifacts: { tables: ["epistemic_assertions"] }
|
|
16764
|
+
},
|
|
16765
|
+
{
|
|
16766
|
+
version: 133,
|
|
16767
|
+
name: "dreaming-memory-head",
|
|
16768
|
+
up: up133,
|
|
16769
|
+
artifacts: { tables: ["memory_head_revisions", "memory_head_entries", "memory_head_revision_entries"] }
|
|
16770
|
+
},
|
|
16771
|
+
{
|
|
16772
|
+
version: 134,
|
|
16773
|
+
name: "scope-memory-head-entries",
|
|
16774
|
+
up: up134,
|
|
16775
|
+
artifacts: { tables: ["memory_head_entries"] }
|
|
16776
|
+
},
|
|
16777
|
+
{
|
|
16778
|
+
version: 135,
|
|
16779
|
+
name: "memory-head-publication",
|
|
16780
|
+
up: up135,
|
|
16781
|
+
artifacts: { tables: ["memory_head_publications"] }
|
|
16678
16782
|
}
|
|
16679
16783
|
];
|
|
16680
16784
|
var LATEST_SCHEMA_VERSION = MIGRATIONS[MIGRATIONS.length - 1]?.version ?? 0;
|
|
@@ -16710,16 +16814,42 @@ function classifyError(error) {
|
|
|
16710
16814
|
}
|
|
16711
16815
|
return { state: "corrupt", message };
|
|
16712
16816
|
}
|
|
16817
|
+
function tryRequireOverride() {
|
|
16818
|
+
const override = process.env.SIGNET_KEYRING_NATIVE_MODULE_PATH?.trim();
|
|
16819
|
+
if (!override)
|
|
16820
|
+
return null;
|
|
16821
|
+
const isAbsolute2 = override.startsWith("/") || /^\\\\[^\\]+\\[^\\]+/.test(override) || /^[A-Za-z]:[\\/]/.test(override);
|
|
16822
|
+
if (!isAbsolute2)
|
|
16823
|
+
return null;
|
|
16824
|
+
try {
|
|
16825
|
+
return require2(override);
|
|
16826
|
+
} catch {
|
|
16827
|
+
return null;
|
|
16828
|
+
}
|
|
16829
|
+
}
|
|
16713
16830
|
async function loadModule() {
|
|
16714
|
-
modulePromise ??=
|
|
16831
|
+
modulePromise ??= (async () => {
|
|
16832
|
+
const override = process.env.SIGNET_KEYRING_NATIVE_MODULE_PATH?.trim();
|
|
16833
|
+
if (override)
|
|
16834
|
+
return tryRequireOverride();
|
|
16835
|
+
return await Promise.resolve().then(() => __toESM2(require_keyring(), 1)).catch(() => null);
|
|
16836
|
+
})();
|
|
16715
16837
|
return modulePromise;
|
|
16716
16838
|
}
|
|
16717
16839
|
function loadModuleSync() {
|
|
16718
16840
|
if (syncModule !== undefined)
|
|
16719
16841
|
return syncModule;
|
|
16842
|
+
if (process.env.SIGNET_KEYRING_NATIVE_MODULE_PATH?.trim()) {
|
|
16843
|
+
syncModule = tryRequireOverride();
|
|
16844
|
+
return syncModule;
|
|
16845
|
+
}
|
|
16846
|
+
const override = tryRequireOverride();
|
|
16847
|
+
if (override) {
|
|
16848
|
+
syncModule = override;
|
|
16849
|
+
return syncModule;
|
|
16850
|
+
}
|
|
16720
16851
|
try {
|
|
16721
|
-
|
|
16722
|
-
syncModule = mod;
|
|
16852
|
+
syncModule = require2("@napi-rs/keyring");
|
|
16723
16853
|
} catch {
|
|
16724
16854
|
syncModule = null;
|
|
16725
16855
|
}
|
|
@@ -28484,7 +28614,7 @@ function memoriesFtsNeedsTokenizerRepair2(sql) {
|
|
|
28484
28614
|
return true;
|
|
28485
28615
|
return !normalized.includes(`tokenize='${MEMORIES_FTS_TOKENIZER2}'`);
|
|
28486
28616
|
}
|
|
28487
|
-
function
|
|
28617
|
+
function up136(db) {
|
|
28488
28618
|
db.exec(`
|
|
28489
28619
|
CREATE TABLE IF NOT EXISTS schema_migrations (
|
|
28490
28620
|
version INTEGER PRIMARY KEY,
|
|
@@ -28968,7 +29098,7 @@ function addColumnIfMissing52(db, table, column, definition) {
|
|
|
28968
29098
|
db.exec(`ALTER TABLE ${table} ADD COLUMN ${column} ${definition}`);
|
|
28969
29099
|
}
|
|
28970
29100
|
}
|
|
28971
|
-
function
|
|
29101
|
+
function up137(db) {
|
|
28972
29102
|
db.exec(`
|
|
28973
29103
|
CREATE TABLE IF NOT EXISTS ingestion_jobs (
|
|
28974
29104
|
id TEXT PRIMARY KEY,
|
|
@@ -32723,11 +32853,97 @@ function up1322(db) {
|
|
|
32723
32853
|
ON epistemic_assertions(agent_id, subject_entity_id, status, asserted_at DESC, created_at DESC);
|
|
32724
32854
|
`);
|
|
32725
32855
|
}
|
|
32856
|
+
function up1332(db) {
|
|
32857
|
+
db.exec(`
|
|
32858
|
+
CREATE TABLE IF NOT EXISTS memory_head_revisions (
|
|
32859
|
+
id TEXT PRIMARY KEY,
|
|
32860
|
+
agent_id TEXT NOT NULL,
|
|
32861
|
+
revision INTEGER NOT NULL,
|
|
32862
|
+
content TEXT NOT NULL,
|
|
32863
|
+
content_hash TEXT NOT NULL,
|
|
32864
|
+
rendered_token_count INTEGER NOT NULL,
|
|
32865
|
+
pass_id TEXT NOT NULL,
|
|
32866
|
+
base_revision INTEGER NOT NULL,
|
|
32867
|
+
base_hash TEXT NOT NULL,
|
|
32868
|
+
created_at TEXT NOT NULL,
|
|
32869
|
+
UNIQUE(agent_id, revision)
|
|
32870
|
+
);
|
|
32871
|
+
CREATE INDEX IF NOT EXISTS idx_memory_head_revisions_agent
|
|
32872
|
+
ON memory_head_revisions(agent_id, revision DESC);
|
|
32873
|
+
CREATE TABLE IF NOT EXISTS memory_head_entries (
|
|
32874
|
+
entry_id TEXT PRIMARY KEY,
|
|
32875
|
+
agent_id TEXT NOT NULL,
|
|
32876
|
+
canonical_text TEXT NOT NULL,
|
|
32877
|
+
entry_hash TEXT NOT NULL,
|
|
32878
|
+
status TEXT NOT NULL CHECK(status IN ('active','removed','superseded')),
|
|
32879
|
+
first_revision INTEGER NOT NULL,
|
|
32880
|
+
last_revision INTEGER NOT NULL,
|
|
32881
|
+
created_at TEXT NOT NULL,
|
|
32882
|
+
updated_at TEXT NOT NULL
|
|
32883
|
+
);
|
|
32884
|
+
CREATE INDEX IF NOT EXISTS idx_memory_head_entries_agent
|
|
32885
|
+
ON memory_head_entries(agent_id, entry_id, last_revision DESC);
|
|
32886
|
+
CREATE TABLE IF NOT EXISTS memory_head_revision_entries (
|
|
32887
|
+
agent_id TEXT NOT NULL,
|
|
32888
|
+
revision INTEGER NOT NULL,
|
|
32889
|
+
entry_id TEXT NOT NULL,
|
|
32890
|
+
ordinal INTEGER NOT NULL,
|
|
32891
|
+
operation TEXT NOT NULL CHECK(operation IN ('add','update','remove','retain')),
|
|
32892
|
+
provenance_json TEXT NOT NULL,
|
|
32893
|
+
PRIMARY KEY(agent_id, revision, entry_id),
|
|
32894
|
+
UNIQUE(agent_id, revision, ordinal)
|
|
32895
|
+
);
|
|
32896
|
+
CREATE INDEX IF NOT EXISTS idx_memory_head_revision_entries_entry
|
|
32897
|
+
ON memory_head_revision_entries(agent_id, entry_id, revision DESC);
|
|
32898
|
+
`);
|
|
32899
|
+
const columns = db.prepare("PRAGMA table_info(memory_md_heads)").all();
|
|
32900
|
+
const names = new Set(columns.map((column) => String(column.name)));
|
|
32901
|
+
if (!names.has("revision_id"))
|
|
32902
|
+
db.exec("ALTER TABLE memory_md_heads ADD COLUMN revision_id TEXT");
|
|
32903
|
+
if (!names.has("pass_id"))
|
|
32904
|
+
db.exec("ALTER TABLE memory_md_heads ADD COLUMN pass_id TEXT");
|
|
32905
|
+
if (!names.has("format_version"))
|
|
32906
|
+
db.exec("ALTER TABLE memory_md_heads ADD COLUMN format_version INTEGER NOT NULL DEFAULT 1");
|
|
32907
|
+
}
|
|
32908
|
+
function up1342(db) {
|
|
32909
|
+
db.exec(`
|
|
32910
|
+
CREATE TABLE memory_head_entries_v134 (
|
|
32911
|
+
entry_id TEXT NOT NULL, agent_id TEXT NOT NULL, canonical_text TEXT NOT NULL,
|
|
32912
|
+
entry_hash TEXT NOT NULL, status TEXT NOT NULL CHECK(status IN ('active','removed','superseded')),
|
|
32913
|
+
first_revision INTEGER NOT NULL, last_revision INTEGER NOT NULL,
|
|
32914
|
+
created_at TEXT NOT NULL, updated_at TEXT NOT NULL,
|
|
32915
|
+
PRIMARY KEY(agent_id, entry_id)
|
|
32916
|
+
);
|
|
32917
|
+
INSERT INTO memory_head_entries_v134
|
|
32918
|
+
SELECT entry_id, agent_id, canonical_text, entry_hash, status, first_revision, last_revision, created_at, updated_at
|
|
32919
|
+
FROM memory_head_entries;
|
|
32920
|
+
DROP TABLE memory_head_entries;
|
|
32921
|
+
ALTER TABLE memory_head_entries_v134 RENAME TO memory_head_entries;
|
|
32922
|
+
CREATE INDEX idx_memory_head_entries_agent
|
|
32923
|
+
ON memory_head_entries(agent_id, entry_id, last_revision DESC);
|
|
32924
|
+
`);
|
|
32925
|
+
}
|
|
32926
|
+
function up1352(db) {
|
|
32927
|
+
db.exec(`
|
|
32928
|
+
CREATE TABLE IF NOT EXISTS memory_head_publications (
|
|
32929
|
+
agent_id TEXT NOT NULL,
|
|
32930
|
+
revision INTEGER NOT NULL,
|
|
32931
|
+
revision_id TEXT NOT NULL,
|
|
32932
|
+
status TEXT NOT NULL CHECK(status IN ('pending', 'completed')),
|
|
32933
|
+
created_at TEXT NOT NULL,
|
|
32934
|
+
completed_at TEXT,
|
|
32935
|
+
PRIMARY KEY(agent_id, revision),
|
|
32936
|
+
UNIQUE(agent_id, revision_id)
|
|
32937
|
+
);
|
|
32938
|
+
CREATE INDEX IF NOT EXISTS idx_memory_head_publications_pending
|
|
32939
|
+
ON memory_head_publications(agent_id, status, revision DESC);
|
|
32940
|
+
`);
|
|
32941
|
+
}
|
|
32726
32942
|
var MIGRATIONS2 = [
|
|
32727
32943
|
{
|
|
32728
32944
|
version: 1,
|
|
32729
32945
|
name: "baseline",
|
|
32730
|
-
up:
|
|
32946
|
+
up: up136,
|
|
32731
32947
|
artifacts: { tables: ["memories", "conversations", "embeddings"] }
|
|
32732
32948
|
},
|
|
32733
32949
|
{
|
|
@@ -32805,7 +33021,7 @@ var MIGRATIONS2 = [
|
|
|
32805
33021
|
{
|
|
32806
33022
|
version: 13,
|
|
32807
33023
|
name: "ingestion-tracking",
|
|
32808
|
-
up:
|
|
33024
|
+
up: up137,
|
|
32809
33025
|
artifacts: {
|
|
32810
33026
|
columns: [
|
|
32811
33027
|
{ table: "memories", column: "source_path" },
|
|
@@ -33777,6 +33993,24 @@ var MIGRATIONS2 = [
|
|
|
33777
33993
|
name: "observer-scoped-epistemic-assertions",
|
|
33778
33994
|
up: up1322,
|
|
33779
33995
|
artifacts: { tables: ["epistemic_assertions"] }
|
|
33996
|
+
},
|
|
33997
|
+
{
|
|
33998
|
+
version: 133,
|
|
33999
|
+
name: "dreaming-memory-head",
|
|
34000
|
+
up: up1332,
|
|
34001
|
+
artifacts: { tables: ["memory_head_revisions", "memory_head_entries", "memory_head_revision_entries"] }
|
|
34002
|
+
},
|
|
34003
|
+
{
|
|
34004
|
+
version: 134,
|
|
34005
|
+
name: "scope-memory-head-entries",
|
|
34006
|
+
up: up1342,
|
|
34007
|
+
artifacts: { tables: ["memory_head_entries"] }
|
|
34008
|
+
},
|
|
34009
|
+
{
|
|
34010
|
+
version: 135,
|
|
34011
|
+
name: "memory-head-publication",
|
|
34012
|
+
up: up1352,
|
|
34013
|
+
artifacts: { tables: ["memory_head_publications"] }
|
|
33780
34014
|
}
|
|
33781
34015
|
];
|
|
33782
34016
|
var LATEST_SCHEMA_VERSION2 = MIGRATIONS2[MIGRATIONS2.length - 1]?.version ?? 0;
|
|
@@ -33819,16 +34053,42 @@ function classifyError2(error) {
|
|
|
33819
34053
|
}
|
|
33820
34054
|
return { state: "corrupt", message };
|
|
33821
34055
|
}
|
|
34056
|
+
function tryRequireOverride2() {
|
|
34057
|
+
const override = process.env.SIGNET_KEYRING_NATIVE_MODULE_PATH?.trim();
|
|
34058
|
+
if (!override)
|
|
34059
|
+
return null;
|
|
34060
|
+
const isAbsolute2 = override.startsWith("/") || /^\\\\[^\\]+\\[^\\]+/.test(override) || /^[A-Za-z]:[\\/]/.test(override);
|
|
34061
|
+
if (!isAbsolute2)
|
|
34062
|
+
return null;
|
|
34063
|
+
try {
|
|
34064
|
+
return require22(override);
|
|
34065
|
+
} catch {
|
|
34066
|
+
return null;
|
|
34067
|
+
}
|
|
34068
|
+
}
|
|
33822
34069
|
async function loadModule2() {
|
|
33823
|
-
modulePromise2 ??=
|
|
34070
|
+
modulePromise2 ??= (async () => {
|
|
34071
|
+
const override = process.env.SIGNET_KEYRING_NATIVE_MODULE_PATH?.trim();
|
|
34072
|
+
if (override)
|
|
34073
|
+
return tryRequireOverride2();
|
|
34074
|
+
return await Promise.resolve().then(() => __toESM(require_keyring2(), 1)).catch(() => null);
|
|
34075
|
+
})();
|
|
33824
34076
|
return modulePromise2;
|
|
33825
34077
|
}
|
|
33826
34078
|
function loadModuleSync2() {
|
|
33827
34079
|
if (syncModule2 !== undefined)
|
|
33828
34080
|
return syncModule2;
|
|
34081
|
+
if (process.env.SIGNET_KEYRING_NATIVE_MODULE_PATH?.trim()) {
|
|
34082
|
+
syncModule2 = tryRequireOverride2();
|
|
34083
|
+
return syncModule2;
|
|
34084
|
+
}
|
|
34085
|
+
const override = tryRequireOverride2();
|
|
34086
|
+
if (override) {
|
|
34087
|
+
syncModule2 = override;
|
|
34088
|
+
return syncModule2;
|
|
34089
|
+
}
|
|
33829
34090
|
try {
|
|
33830
|
-
|
|
33831
|
-
syncModule2 = mod;
|
|
34091
|
+
syncModule2 = require22("@napi-rs/keyring");
|
|
33832
34092
|
} catch {
|
|
33833
34093
|
syncModule2 = null;
|
|
33834
34094
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@signetai/connector-hermes-agent",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.207.2",
|
|
4
4
|
"description": "Signet connector for Hermes Agent — installs Signet as a pluggable memory provider",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -25,8 +25,8 @@
|
|
|
25
25
|
"typecheck": "tsc --noEmit"
|
|
26
26
|
},
|
|
27
27
|
"dependencies": {
|
|
28
|
-
"@signetai/connector-base": "0.
|
|
29
|
-
"@signetai/core": "0.
|
|
28
|
+
"@signetai/connector-base": "0.207.2",
|
|
29
|
+
"@signetai/core": "0.207.2"
|
|
30
30
|
},
|
|
31
31
|
"devDependencies": {
|
|
32
32
|
"@types/node": "^22.0.0",
|