@signetai/connector-claude-code 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
|
@@ -15619,6 +15619,92 @@ function up132(db) {
|
|
|
15619
15619
|
ON epistemic_assertions(agent_id, subject_entity_id, status, asserted_at DESC, created_at DESC);
|
|
15620
15620
|
`);
|
|
15621
15621
|
}
|
|
15622
|
+
function up133(db) {
|
|
15623
|
+
db.exec(`
|
|
15624
|
+
CREATE TABLE IF NOT EXISTS memory_head_revisions (
|
|
15625
|
+
id TEXT PRIMARY KEY,
|
|
15626
|
+
agent_id TEXT NOT NULL,
|
|
15627
|
+
revision INTEGER NOT NULL,
|
|
15628
|
+
content TEXT NOT NULL,
|
|
15629
|
+
content_hash TEXT NOT NULL,
|
|
15630
|
+
rendered_token_count INTEGER NOT NULL,
|
|
15631
|
+
pass_id TEXT NOT NULL,
|
|
15632
|
+
base_revision INTEGER NOT NULL,
|
|
15633
|
+
base_hash TEXT NOT NULL,
|
|
15634
|
+
created_at TEXT NOT NULL,
|
|
15635
|
+
UNIQUE(agent_id, revision)
|
|
15636
|
+
);
|
|
15637
|
+
CREATE INDEX IF NOT EXISTS idx_memory_head_revisions_agent
|
|
15638
|
+
ON memory_head_revisions(agent_id, revision DESC);
|
|
15639
|
+
CREATE TABLE IF NOT EXISTS memory_head_entries (
|
|
15640
|
+
entry_id TEXT PRIMARY KEY,
|
|
15641
|
+
agent_id TEXT NOT NULL,
|
|
15642
|
+
canonical_text TEXT NOT NULL,
|
|
15643
|
+
entry_hash TEXT NOT NULL,
|
|
15644
|
+
status TEXT NOT NULL CHECK(status IN ('active','removed','superseded')),
|
|
15645
|
+
first_revision INTEGER NOT NULL,
|
|
15646
|
+
last_revision INTEGER NOT NULL,
|
|
15647
|
+
created_at TEXT NOT NULL,
|
|
15648
|
+
updated_at TEXT NOT NULL
|
|
15649
|
+
);
|
|
15650
|
+
CREATE INDEX IF NOT EXISTS idx_memory_head_entries_agent
|
|
15651
|
+
ON memory_head_entries(agent_id, entry_id, last_revision DESC);
|
|
15652
|
+
CREATE TABLE IF NOT EXISTS memory_head_revision_entries (
|
|
15653
|
+
agent_id TEXT NOT NULL,
|
|
15654
|
+
revision INTEGER NOT NULL,
|
|
15655
|
+
entry_id TEXT NOT NULL,
|
|
15656
|
+
ordinal INTEGER NOT NULL,
|
|
15657
|
+
operation TEXT NOT NULL CHECK(operation IN ('add','update','remove','retain')),
|
|
15658
|
+
provenance_json TEXT NOT NULL,
|
|
15659
|
+
PRIMARY KEY(agent_id, revision, entry_id),
|
|
15660
|
+
UNIQUE(agent_id, revision, ordinal)
|
|
15661
|
+
);
|
|
15662
|
+
CREATE INDEX IF NOT EXISTS idx_memory_head_revision_entries_entry
|
|
15663
|
+
ON memory_head_revision_entries(agent_id, entry_id, revision DESC);
|
|
15664
|
+
`);
|
|
15665
|
+
const columns = db.prepare("PRAGMA table_info(memory_md_heads)").all();
|
|
15666
|
+
const names = new Set(columns.map((column) => String(column.name)));
|
|
15667
|
+
if (!names.has("revision_id"))
|
|
15668
|
+
db.exec("ALTER TABLE memory_md_heads ADD COLUMN revision_id TEXT");
|
|
15669
|
+
if (!names.has("pass_id"))
|
|
15670
|
+
db.exec("ALTER TABLE memory_md_heads ADD COLUMN pass_id TEXT");
|
|
15671
|
+
if (!names.has("format_version"))
|
|
15672
|
+
db.exec("ALTER TABLE memory_md_heads ADD COLUMN format_version INTEGER NOT NULL DEFAULT 1");
|
|
15673
|
+
}
|
|
15674
|
+
function up134(db) {
|
|
15675
|
+
db.exec(`
|
|
15676
|
+
CREATE TABLE memory_head_entries_v134 (
|
|
15677
|
+
entry_id TEXT NOT NULL, agent_id TEXT NOT NULL, canonical_text TEXT NOT NULL,
|
|
15678
|
+
entry_hash TEXT NOT NULL, status TEXT NOT NULL CHECK(status IN ('active','removed','superseded')),
|
|
15679
|
+
first_revision INTEGER NOT NULL, last_revision INTEGER NOT NULL,
|
|
15680
|
+
created_at TEXT NOT NULL, updated_at TEXT NOT NULL,
|
|
15681
|
+
PRIMARY KEY(agent_id, entry_id)
|
|
15682
|
+
);
|
|
15683
|
+
INSERT INTO memory_head_entries_v134
|
|
15684
|
+
SELECT entry_id, agent_id, canonical_text, entry_hash, status, first_revision, last_revision, created_at, updated_at
|
|
15685
|
+
FROM memory_head_entries;
|
|
15686
|
+
DROP TABLE memory_head_entries;
|
|
15687
|
+
ALTER TABLE memory_head_entries_v134 RENAME TO memory_head_entries;
|
|
15688
|
+
CREATE INDEX idx_memory_head_entries_agent
|
|
15689
|
+
ON memory_head_entries(agent_id, entry_id, last_revision DESC);
|
|
15690
|
+
`);
|
|
15691
|
+
}
|
|
15692
|
+
function up135(db) {
|
|
15693
|
+
db.exec(`
|
|
15694
|
+
CREATE TABLE IF NOT EXISTS memory_head_publications (
|
|
15695
|
+
agent_id TEXT NOT NULL,
|
|
15696
|
+
revision INTEGER NOT NULL,
|
|
15697
|
+
revision_id TEXT NOT NULL,
|
|
15698
|
+
status TEXT NOT NULL CHECK(status IN ('pending', 'completed')),
|
|
15699
|
+
created_at TEXT NOT NULL,
|
|
15700
|
+
completed_at TEXT,
|
|
15701
|
+
PRIMARY KEY(agent_id, revision),
|
|
15702
|
+
UNIQUE(agent_id, revision_id)
|
|
15703
|
+
);
|
|
15704
|
+
CREATE INDEX IF NOT EXISTS idx_memory_head_publications_pending
|
|
15705
|
+
ON memory_head_publications(agent_id, status, revision DESC);
|
|
15706
|
+
`);
|
|
15707
|
+
}
|
|
15622
15708
|
var MIGRATIONS = [
|
|
15623
15709
|
{
|
|
15624
15710
|
version: 1,
|
|
@@ -16673,6 +16759,24 @@ var MIGRATIONS = [
|
|
|
16673
16759
|
name: "observer-scoped-epistemic-assertions",
|
|
16674
16760
|
up: up132,
|
|
16675
16761
|
artifacts: { tables: ["epistemic_assertions"] }
|
|
16762
|
+
},
|
|
16763
|
+
{
|
|
16764
|
+
version: 133,
|
|
16765
|
+
name: "dreaming-memory-head",
|
|
16766
|
+
up: up133,
|
|
16767
|
+
artifacts: { tables: ["memory_head_revisions", "memory_head_entries", "memory_head_revision_entries"] }
|
|
16768
|
+
},
|
|
16769
|
+
{
|
|
16770
|
+
version: 134,
|
|
16771
|
+
name: "scope-memory-head-entries",
|
|
16772
|
+
up: up134,
|
|
16773
|
+
artifacts: { tables: ["memory_head_entries"] }
|
|
16774
|
+
},
|
|
16775
|
+
{
|
|
16776
|
+
version: 135,
|
|
16777
|
+
name: "memory-head-publication",
|
|
16778
|
+
up: up135,
|
|
16779
|
+
artifacts: { tables: ["memory_head_publications"] }
|
|
16676
16780
|
}
|
|
16677
16781
|
];
|
|
16678
16782
|
var LATEST_SCHEMA_VERSION = MIGRATIONS[MIGRATIONS.length - 1]?.version ?? 0;
|
|
@@ -16708,16 +16812,42 @@ function classifyError(error) {
|
|
|
16708
16812
|
}
|
|
16709
16813
|
return { state: "corrupt", message };
|
|
16710
16814
|
}
|
|
16815
|
+
function tryRequireOverride() {
|
|
16816
|
+
const override = process.env.SIGNET_KEYRING_NATIVE_MODULE_PATH?.trim();
|
|
16817
|
+
if (!override)
|
|
16818
|
+
return null;
|
|
16819
|
+
const isAbsolute2 = override.startsWith("/") || /^\\\\[^\\]+\\[^\\]+/.test(override) || /^[A-Za-z]:[\\/]/.test(override);
|
|
16820
|
+
if (!isAbsolute2)
|
|
16821
|
+
return null;
|
|
16822
|
+
try {
|
|
16823
|
+
return require2(override);
|
|
16824
|
+
} catch {
|
|
16825
|
+
return null;
|
|
16826
|
+
}
|
|
16827
|
+
}
|
|
16711
16828
|
async function loadModule() {
|
|
16712
|
-
modulePromise ??=
|
|
16829
|
+
modulePromise ??= (async () => {
|
|
16830
|
+
const override = process.env.SIGNET_KEYRING_NATIVE_MODULE_PATH?.trim();
|
|
16831
|
+
if (override)
|
|
16832
|
+
return tryRequireOverride();
|
|
16833
|
+
return await Promise.resolve().then(() => __toESM2(require_keyring(), 1)).catch(() => null);
|
|
16834
|
+
})();
|
|
16713
16835
|
return modulePromise;
|
|
16714
16836
|
}
|
|
16715
16837
|
function loadModuleSync() {
|
|
16716
16838
|
if (syncModule !== undefined)
|
|
16717
16839
|
return syncModule;
|
|
16840
|
+
if (process.env.SIGNET_KEYRING_NATIVE_MODULE_PATH?.trim()) {
|
|
16841
|
+
syncModule = tryRequireOverride();
|
|
16842
|
+
return syncModule;
|
|
16843
|
+
}
|
|
16844
|
+
const override = tryRequireOverride();
|
|
16845
|
+
if (override) {
|
|
16846
|
+
syncModule = override;
|
|
16847
|
+
return syncModule;
|
|
16848
|
+
}
|
|
16718
16849
|
try {
|
|
16719
|
-
|
|
16720
|
-
syncModule = mod;
|
|
16850
|
+
syncModule = require2("@napi-rs/keyring");
|
|
16721
16851
|
} catch {
|
|
16722
16852
|
syncModule = null;
|
|
16723
16853
|
}
|
|
@@ -28510,7 +28640,7 @@ function memoriesFtsNeedsTokenizerRepair2(sql) {
|
|
|
28510
28640
|
return true;
|
|
28511
28641
|
return !normalized.includes(`tokenize='${MEMORIES_FTS_TOKENIZER2}'`);
|
|
28512
28642
|
}
|
|
28513
|
-
function
|
|
28643
|
+
function up136(db) {
|
|
28514
28644
|
db.exec(`
|
|
28515
28645
|
CREATE TABLE IF NOT EXISTS schema_migrations (
|
|
28516
28646
|
version INTEGER PRIMARY KEY,
|
|
@@ -28994,7 +29124,7 @@ function addColumnIfMissing52(db, table, column, definition) {
|
|
|
28994
29124
|
db.exec(`ALTER TABLE ${table} ADD COLUMN ${column} ${definition}`);
|
|
28995
29125
|
}
|
|
28996
29126
|
}
|
|
28997
|
-
function
|
|
29127
|
+
function up137(db) {
|
|
28998
29128
|
db.exec(`
|
|
28999
29129
|
CREATE TABLE IF NOT EXISTS ingestion_jobs (
|
|
29000
29130
|
id TEXT PRIMARY KEY,
|
|
@@ -32749,11 +32879,97 @@ function up1322(db) {
|
|
|
32749
32879
|
ON epistemic_assertions(agent_id, subject_entity_id, status, asserted_at DESC, created_at DESC);
|
|
32750
32880
|
`);
|
|
32751
32881
|
}
|
|
32882
|
+
function up1332(db) {
|
|
32883
|
+
db.exec(`
|
|
32884
|
+
CREATE TABLE IF NOT EXISTS memory_head_revisions (
|
|
32885
|
+
id TEXT PRIMARY KEY,
|
|
32886
|
+
agent_id TEXT NOT NULL,
|
|
32887
|
+
revision INTEGER NOT NULL,
|
|
32888
|
+
content TEXT NOT NULL,
|
|
32889
|
+
content_hash TEXT NOT NULL,
|
|
32890
|
+
rendered_token_count INTEGER NOT NULL,
|
|
32891
|
+
pass_id TEXT NOT NULL,
|
|
32892
|
+
base_revision INTEGER NOT NULL,
|
|
32893
|
+
base_hash TEXT NOT NULL,
|
|
32894
|
+
created_at TEXT NOT NULL,
|
|
32895
|
+
UNIQUE(agent_id, revision)
|
|
32896
|
+
);
|
|
32897
|
+
CREATE INDEX IF NOT EXISTS idx_memory_head_revisions_agent
|
|
32898
|
+
ON memory_head_revisions(agent_id, revision DESC);
|
|
32899
|
+
CREATE TABLE IF NOT EXISTS memory_head_entries (
|
|
32900
|
+
entry_id TEXT PRIMARY KEY,
|
|
32901
|
+
agent_id TEXT NOT NULL,
|
|
32902
|
+
canonical_text TEXT NOT NULL,
|
|
32903
|
+
entry_hash TEXT NOT NULL,
|
|
32904
|
+
status TEXT NOT NULL CHECK(status IN ('active','removed','superseded')),
|
|
32905
|
+
first_revision INTEGER NOT NULL,
|
|
32906
|
+
last_revision INTEGER NOT NULL,
|
|
32907
|
+
created_at TEXT NOT NULL,
|
|
32908
|
+
updated_at TEXT NOT NULL
|
|
32909
|
+
);
|
|
32910
|
+
CREATE INDEX IF NOT EXISTS idx_memory_head_entries_agent
|
|
32911
|
+
ON memory_head_entries(agent_id, entry_id, last_revision DESC);
|
|
32912
|
+
CREATE TABLE IF NOT EXISTS memory_head_revision_entries (
|
|
32913
|
+
agent_id TEXT NOT NULL,
|
|
32914
|
+
revision INTEGER NOT NULL,
|
|
32915
|
+
entry_id TEXT NOT NULL,
|
|
32916
|
+
ordinal INTEGER NOT NULL,
|
|
32917
|
+
operation TEXT NOT NULL CHECK(operation IN ('add','update','remove','retain')),
|
|
32918
|
+
provenance_json TEXT NOT NULL,
|
|
32919
|
+
PRIMARY KEY(agent_id, revision, entry_id),
|
|
32920
|
+
UNIQUE(agent_id, revision, ordinal)
|
|
32921
|
+
);
|
|
32922
|
+
CREATE INDEX IF NOT EXISTS idx_memory_head_revision_entries_entry
|
|
32923
|
+
ON memory_head_revision_entries(agent_id, entry_id, revision DESC);
|
|
32924
|
+
`);
|
|
32925
|
+
const columns = db.prepare("PRAGMA table_info(memory_md_heads)").all();
|
|
32926
|
+
const names = new Set(columns.map((column) => String(column.name)));
|
|
32927
|
+
if (!names.has("revision_id"))
|
|
32928
|
+
db.exec("ALTER TABLE memory_md_heads ADD COLUMN revision_id TEXT");
|
|
32929
|
+
if (!names.has("pass_id"))
|
|
32930
|
+
db.exec("ALTER TABLE memory_md_heads ADD COLUMN pass_id TEXT");
|
|
32931
|
+
if (!names.has("format_version"))
|
|
32932
|
+
db.exec("ALTER TABLE memory_md_heads ADD COLUMN format_version INTEGER NOT NULL DEFAULT 1");
|
|
32933
|
+
}
|
|
32934
|
+
function up1342(db) {
|
|
32935
|
+
db.exec(`
|
|
32936
|
+
CREATE TABLE memory_head_entries_v134 (
|
|
32937
|
+
entry_id TEXT NOT NULL, agent_id TEXT NOT NULL, canonical_text TEXT NOT NULL,
|
|
32938
|
+
entry_hash TEXT NOT NULL, status TEXT NOT NULL CHECK(status IN ('active','removed','superseded')),
|
|
32939
|
+
first_revision INTEGER NOT NULL, last_revision INTEGER NOT NULL,
|
|
32940
|
+
created_at TEXT NOT NULL, updated_at TEXT NOT NULL,
|
|
32941
|
+
PRIMARY KEY(agent_id, entry_id)
|
|
32942
|
+
);
|
|
32943
|
+
INSERT INTO memory_head_entries_v134
|
|
32944
|
+
SELECT entry_id, agent_id, canonical_text, entry_hash, status, first_revision, last_revision, created_at, updated_at
|
|
32945
|
+
FROM memory_head_entries;
|
|
32946
|
+
DROP TABLE memory_head_entries;
|
|
32947
|
+
ALTER TABLE memory_head_entries_v134 RENAME TO memory_head_entries;
|
|
32948
|
+
CREATE INDEX idx_memory_head_entries_agent
|
|
32949
|
+
ON memory_head_entries(agent_id, entry_id, last_revision DESC);
|
|
32950
|
+
`);
|
|
32951
|
+
}
|
|
32952
|
+
function up1352(db) {
|
|
32953
|
+
db.exec(`
|
|
32954
|
+
CREATE TABLE IF NOT EXISTS memory_head_publications (
|
|
32955
|
+
agent_id TEXT NOT NULL,
|
|
32956
|
+
revision INTEGER NOT NULL,
|
|
32957
|
+
revision_id TEXT NOT NULL,
|
|
32958
|
+
status TEXT NOT NULL CHECK(status IN ('pending', 'completed')),
|
|
32959
|
+
created_at TEXT NOT NULL,
|
|
32960
|
+
completed_at TEXT,
|
|
32961
|
+
PRIMARY KEY(agent_id, revision),
|
|
32962
|
+
UNIQUE(agent_id, revision_id)
|
|
32963
|
+
);
|
|
32964
|
+
CREATE INDEX IF NOT EXISTS idx_memory_head_publications_pending
|
|
32965
|
+
ON memory_head_publications(agent_id, status, revision DESC);
|
|
32966
|
+
`);
|
|
32967
|
+
}
|
|
32752
32968
|
var MIGRATIONS2 = [
|
|
32753
32969
|
{
|
|
32754
32970
|
version: 1,
|
|
32755
32971
|
name: "baseline",
|
|
32756
|
-
up:
|
|
32972
|
+
up: up136,
|
|
32757
32973
|
artifacts: { tables: ["memories", "conversations", "embeddings"] }
|
|
32758
32974
|
},
|
|
32759
32975
|
{
|
|
@@ -32831,7 +33047,7 @@ var MIGRATIONS2 = [
|
|
|
32831
33047
|
{
|
|
32832
33048
|
version: 13,
|
|
32833
33049
|
name: "ingestion-tracking",
|
|
32834
|
-
up:
|
|
33050
|
+
up: up137,
|
|
32835
33051
|
artifacts: {
|
|
32836
33052
|
columns: [
|
|
32837
33053
|
{ table: "memories", column: "source_path" },
|
|
@@ -33803,6 +34019,24 @@ var MIGRATIONS2 = [
|
|
|
33803
34019
|
name: "observer-scoped-epistemic-assertions",
|
|
33804
34020
|
up: up1322,
|
|
33805
34021
|
artifacts: { tables: ["epistemic_assertions"] }
|
|
34022
|
+
},
|
|
34023
|
+
{
|
|
34024
|
+
version: 133,
|
|
34025
|
+
name: "dreaming-memory-head",
|
|
34026
|
+
up: up1332,
|
|
34027
|
+
artifacts: { tables: ["memory_head_revisions", "memory_head_entries", "memory_head_revision_entries"] }
|
|
34028
|
+
},
|
|
34029
|
+
{
|
|
34030
|
+
version: 134,
|
|
34031
|
+
name: "scope-memory-head-entries",
|
|
34032
|
+
up: up1342,
|
|
34033
|
+
artifacts: { tables: ["memory_head_entries"] }
|
|
34034
|
+
},
|
|
34035
|
+
{
|
|
34036
|
+
version: 135,
|
|
34037
|
+
name: "memory-head-publication",
|
|
34038
|
+
up: up1352,
|
|
34039
|
+
artifacts: { tables: ["memory_head_publications"] }
|
|
33806
34040
|
}
|
|
33807
34041
|
];
|
|
33808
34042
|
var LATEST_SCHEMA_VERSION2 = MIGRATIONS2[MIGRATIONS2.length - 1]?.version ?? 0;
|
|
@@ -33845,16 +34079,42 @@ function classifyError2(error) {
|
|
|
33845
34079
|
}
|
|
33846
34080
|
return { state: "corrupt", message };
|
|
33847
34081
|
}
|
|
34082
|
+
function tryRequireOverride2() {
|
|
34083
|
+
const override = process.env.SIGNET_KEYRING_NATIVE_MODULE_PATH?.trim();
|
|
34084
|
+
if (!override)
|
|
34085
|
+
return null;
|
|
34086
|
+
const isAbsolute2 = override.startsWith("/") || /^\\\\[^\\]+\\[^\\]+/.test(override) || /^[A-Za-z]:[\\/]/.test(override);
|
|
34087
|
+
if (!isAbsolute2)
|
|
34088
|
+
return null;
|
|
34089
|
+
try {
|
|
34090
|
+
return require22(override);
|
|
34091
|
+
} catch {
|
|
34092
|
+
return null;
|
|
34093
|
+
}
|
|
34094
|
+
}
|
|
33848
34095
|
async function loadModule2() {
|
|
33849
|
-
modulePromise2 ??=
|
|
34096
|
+
modulePromise2 ??= (async () => {
|
|
34097
|
+
const override = process.env.SIGNET_KEYRING_NATIVE_MODULE_PATH?.trim();
|
|
34098
|
+
if (override)
|
|
34099
|
+
return tryRequireOverride2();
|
|
34100
|
+
return await Promise.resolve().then(() => __toESM(require_keyring2(), 1)).catch(() => null);
|
|
34101
|
+
})();
|
|
33850
34102
|
return modulePromise2;
|
|
33851
34103
|
}
|
|
33852
34104
|
function loadModuleSync2() {
|
|
33853
34105
|
if (syncModule2 !== undefined)
|
|
33854
34106
|
return syncModule2;
|
|
34107
|
+
if (process.env.SIGNET_KEYRING_NATIVE_MODULE_PATH?.trim()) {
|
|
34108
|
+
syncModule2 = tryRequireOverride2();
|
|
34109
|
+
return syncModule2;
|
|
34110
|
+
}
|
|
34111
|
+
const override = tryRequireOverride2();
|
|
34112
|
+
if (override) {
|
|
34113
|
+
syncModule2 = override;
|
|
34114
|
+
return syncModule2;
|
|
34115
|
+
}
|
|
33855
34116
|
try {
|
|
33856
|
-
|
|
33857
|
-
syncModule2 = mod;
|
|
34117
|
+
syncModule2 = require22("@napi-rs/keyring");
|
|
33858
34118
|
} catch {
|
|
33859
34119
|
syncModule2 = null;
|
|
33860
34120
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@signetai/connector-claude-code",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.207.2",
|
|
4
4
|
"description": "Signet connector for Claude Code (Anthropic CLI)",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -24,8 +24,8 @@
|
|
|
24
24
|
"typecheck": "tsc --noEmit"
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"@signetai/connector-base": "0.
|
|
28
|
-
"@signetai/core": "0.
|
|
27
|
+
"@signetai/connector-base": "0.207.2",
|
|
28
|
+
"@signetai/core": "0.207.2"
|
|
29
29
|
},
|
|
30
30
|
"devDependencies": {
|
|
31
31
|
"@types/node": "^22.0.0",
|