@signetai/connector-openclaw 0.227.1 → 0.228.0

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.
Files changed (2) hide show
  1. package/dist/index.js +379 -103
  2. package/package.json +3 -3
package/dist/index.js CHANGED
@@ -1,14 +1,14 @@
1
1
  // src/index.ts
2
2
  import { existsSync as existsSync2, mkdirSync, readFileSync as readFileSync2, rmSync, writeFileSync as writeFileSync2 } from "node:fs";
3
3
  import { homedir, tmpdir } from "node:os";
4
- import { delimiter, join as join4, resolve as resolve2 } from "node:path";
4
+ import { delimiter, join as join4, resolve as resolve3 } from "node:path";
5
5
 
6
6
  // ../../../libs/connector-base/dist/index.js
7
7
  import { randomBytes } from "node:crypto";
8
8
  import { existsSync, readFileSync, realpathSync, renameSync, statSync, unlinkSync, writeFileSync } from "node:fs";
9
9
  import { dirname as dirname2, isAbsolute, join as join3, relative, sep } from "node:path";
10
10
  import { createRequire } from "node:module";
11
- import { dirname, join } from "node:path";
11
+ import { dirname, join, resolve } from "node:path";
12
12
  import { fileURLToPath } from "node:url";
13
13
  import {
14
14
  execFile as nodeExecFile,
@@ -19,14 +19,15 @@ import {
19
19
  } from "node:child_process";
20
20
  import { promisify } from "node:util";
21
21
  import { createHash } from "node:crypto";
22
+ import { constants as fsConstants } from "node:fs";
22
23
  import { createRequire as createRequire2 } from "node:module";
23
24
  import { homedir as homedir5 } from "node:os";
24
- import { dirname as dirname5, join as join9, resolve as resolve3 } from "node:path";
25
+ import { dirname as dirname6, join as join14, resolve as resolve8 } from "node:path";
25
26
  import { homedir as homedir6, platform as platform2 } from "node:os";
26
- import { basename, dirname as dirname6, resolve as resolve5 } from "node:path";
27
+ import { basename, dirname as dirname7, resolve as resolve9 } from "node:path";
27
28
  import { homedir as homedir8 } from "node:os";
28
- import { existsSync as existsSync14, lstatSync, mkdirSync as mkdirSync8, readdirSync as readdirSync6, symlinkSync, unlinkSync as unlinkSync2 } from "node:fs";
29
- import { join as join14 } from "node:path";
29
+ import { existsSync as existsSync18, lstatSync as lstatSync3, mkdirSync as mkdirSync10, readdirSync as readdirSync9, symlinkSync as symlinkSync2, unlinkSync as unlinkSync2 } from "node:fs";
30
+ import { join as join18 } from "node:path";
30
31
  var __create2 = Object.create;
31
32
  var __getProtoOf2 = Object.getPrototypeOf;
32
33
  var __defProp2 = Object.defineProperty;
@@ -15893,6 +15894,102 @@ function up159(db) {
15893
15894
  ON memories(agent_id, memory_kind);
15894
15895
  `);
15895
15896
  }
15897
+ var ledgerColumns = [
15898
+ "key",
15899
+ "agent_id",
15900
+ "workspace_id",
15901
+ "file_name",
15902
+ "status",
15903
+ "original_path",
15904
+ "sha256",
15905
+ "size_bytes",
15906
+ "request_fingerprint",
15907
+ "source_id",
15908
+ "lease_token",
15909
+ "lease_expires_at",
15910
+ "attempt_count",
15911
+ "error",
15912
+ "created_at",
15913
+ "updated_at"
15914
+ ];
15915
+ function columns(db, table) {
15916
+ return new Set(db.prepare(`PRAGMA table_info(${table})`).all().map((row) => String(row.name)));
15917
+ }
15918
+ function addMissingColumns(db, table, definitions) {
15919
+ const present = columns(db, table);
15920
+ for (const definition of definitions) {
15921
+ const name = definition.split(" ", 1)[0];
15922
+ if (!present.has(name))
15923
+ db.exec(`ALTER TABLE ${table} ADD COLUMN ${definition}`);
15924
+ }
15925
+ }
15926
+ function rebuildLedgerWithoutGlobalKeyPrimaryKey(db) {
15927
+ const keyInfo = db.prepare("PRAGMA table_info(import_admission_ledger)").all().find((row) => row.name === "key");
15928
+ if (!keyInfo || Number(keyInfo.pk) === 0)
15929
+ return;
15930
+ const savepoint = "migration_158_rebuild_ledger";
15931
+ db.exec(`SAVEPOINT ${savepoint}`);
15932
+ try {
15933
+ db.exec(`
15934
+ CREATE TABLE import_admission_ledger_v158 (
15935
+ key TEXT NOT NULL, agent_id TEXT NOT NULL DEFAULT '', workspace_id TEXT NOT NULL DEFAULT '',
15936
+ file_name TEXT NOT NULL, status TEXT NOT NULL CHECK (status IN ('pending','processing','imported','duplicate','failed','quarantined','original_unavailable')),
15937
+ original_path TEXT NOT NULL, sha256 TEXT NOT NULL, size_bytes INTEGER NOT NULL,
15938
+ request_fingerprint TEXT NOT NULL DEFAULT '', source_id TEXT, lease_token TEXT, lease_expires_at TEXT,
15939
+ attempt_count INTEGER NOT NULL DEFAULT 0, error TEXT, created_at TEXT NOT NULL, updated_at TEXT NOT NULL
15940
+ );
15941
+ INSERT INTO import_admission_ledger_v158 (${ledgerColumns.join(",")})
15942
+ SELECT ${ledgerColumns.join(",")} FROM import_admission_ledger;
15943
+ DROP TABLE import_admission_ledger;
15944
+ ALTER TABLE import_admission_ledger_v158 RENAME TO import_admission_ledger;
15945
+ `);
15946
+ db.exec(`RELEASE ${savepoint}`);
15947
+ } catch (error) {
15948
+ try {
15949
+ db.exec(`ROLLBACK TO SAVEPOINT ${savepoint}`);
15950
+ } finally {
15951
+ try {
15952
+ db.exec(`RELEASE ${savepoint}`);
15953
+ } catch {}
15954
+ }
15955
+ throw error;
15956
+ }
15957
+ }
15958
+ function up160(db) {
15959
+ db.exec(`
15960
+ CREATE TABLE IF NOT EXISTS import_admission_ledger (
15961
+ key TEXT NOT NULL, agent_id TEXT NOT NULL, workspace_id TEXT NOT NULL DEFAULT '', file_name TEXT NOT NULL,
15962
+ status TEXT NOT NULL CHECK (status IN ('pending','processing','imported','duplicate','failed','quarantined','original_unavailable')),
15963
+ original_path TEXT NOT NULL, sha256 TEXT NOT NULL, size_bytes INTEGER NOT NULL,
15964
+ request_fingerprint TEXT NOT NULL DEFAULT '', source_id TEXT, lease_token TEXT, lease_expires_at TEXT,
15965
+ attempt_count INTEGER NOT NULL DEFAULT 0, error TEXT, created_at TEXT NOT NULL, updated_at TEXT NOT NULL
15966
+ );
15967
+ CREATE TABLE IF NOT EXISTS import_admission_events (
15968
+ id INTEGER PRIMARY KEY AUTOINCREMENT, admission_key TEXT NOT NULL, agent_id TEXT NOT NULL DEFAULT '',
15969
+ workspace_id TEXT NOT NULL DEFAULT '', event TEXT NOT NULL, created_at TEXT NOT NULL
15970
+ );
15971
+ `);
15972
+ addMissingColumns(db, "import_admission_ledger", [
15973
+ "agent_id TEXT NOT NULL DEFAULT ''",
15974
+ "workspace_id TEXT NOT NULL DEFAULT ''",
15975
+ "request_fingerprint TEXT NOT NULL DEFAULT ''",
15976
+ "source_id TEXT",
15977
+ "lease_token TEXT",
15978
+ "lease_expires_at TEXT",
15979
+ "attempt_count INTEGER NOT NULL DEFAULT 0",
15980
+ "error TEXT"
15981
+ ]);
15982
+ addMissingColumns(db, "import_admission_events", [
15983
+ "agent_id TEXT NOT NULL DEFAULT ''",
15984
+ "workspace_id TEXT NOT NULL DEFAULT ''"
15985
+ ]);
15986
+ rebuildLedgerWithoutGlobalKeyPrimaryKey(db);
15987
+ db.exec(`
15988
+ CREATE UNIQUE INDEX IF NOT EXISTS uq_import_admission_scope_key ON import_admission_ledger(key, agent_id, workspace_id);
15989
+ CREATE INDEX IF NOT EXISTS idx_import_admission_status ON import_admission_ledger(agent_id, workspace_id, status, updated_at);
15990
+ CREATE INDEX IF NOT EXISTS idx_import_admission_events_key ON import_admission_events(admission_key, agent_id, workspace_id, id);
15991
+ `);
15992
+ }
15896
15993
  var MIGRATIONS = [
15897
15994
  {
15898
15995
  version: 1,
@@ -17181,6 +17278,18 @@ var MIGRATIONS = [
17181
17278
  version: 159,
17182
17279
  name: "retire-obsolete-invocation-ledger",
17183
17280
  up: up5
17281
+ },
17282
+ {
17283
+ version: 160,
17284
+ name: "import-admission-ledger",
17285
+ up: up160,
17286
+ artifacts: {
17287
+ tables: ["import_admission_ledger", "import_admission_events"],
17288
+ indexes: ["idx_import_admission_status", "idx_import_admission_events_key"],
17289
+ columns: [
17290
+ ...["workspace_id", "request_fingerprint", "source_id", "lease_token", "lease_expires_at", "attempt_count"].map((column) => ({ table: "import_admission_ledger", column }))
17291
+ ]
17292
+ }
17184
17293
  }
17185
17294
  ];
17186
17295
  var LATEST_SCHEMA_VERSION = MIGRATIONS[MIGRATIONS.length - 1]?.version ?? 0;
@@ -17188,30 +17297,17 @@ var NETWORK_FILESYSTEM_TYPES = new Set(["afpfs", "nfs", "smbfs", "webdav"]);
17188
17297
  var __filename2 = fileURLToPath(import.meta.url);
17189
17298
  var __dirname2 = dirname(__filename2);
17190
17299
  var import_yaml = __toESM2(require_dist(), 1);
17191
- var STATES = new Set([
17192
- "found",
17193
- "missing",
17194
- "locked",
17195
- "unavailable",
17196
- "permission-denied",
17197
- "corrupt",
17198
- "unsupported"
17199
- ]);
17200
- var mutation = Promise.resolve();
17201
- var LOOPBACK_HOST = "127.0.0.1";
17202
- var LOCAL_BINDS = new Set([LOOPBACK_HOST, "localhost", "::1", "::ffff:127.0.0.1"]);
17203
- var import_yaml2 = __toESM2(require_dist(), 1);
17204
- var native = null;
17205
- try {
17206
- const esmRequire = createRequire2(import.meta.url);
17207
- native = esmRequire("@signet/native");
17208
- } catch {}
17209
- var GRAPHIQ_DEFAULT_INSTALL_DIR = join9(homedir5(), ".local", "bin");
17210
17300
  var SIGNET_SOURCE_CHECKOUT_DIRNAME = "signetai";
17211
17301
  var SIGNET_GIT_ALLOWED_DIRECTORIES = ["skills", "tools", "dreaming"];
17212
17302
  var SIGNET_GIT_PROTECTED_PATHS = [
17213
17303
  ".daemon",
17304
+ ".secrets",
17214
17305
  ".shadow",
17306
+ "cache",
17307
+ "data",
17308
+ "files",
17309
+ "runtime",
17310
+ "workspace-layout.json",
17215
17311
  "node_modules",
17216
17312
  ":(glob)**/node_modules/**",
17217
17313
  `${SIGNET_SOURCE_CHECKOUT_DIRNAME}`,
@@ -17250,7 +17346,13 @@ var SIGNET_GIT_TRACKED_PATHS = [
17250
17346
  ];
17251
17347
  var SIGNET_GITIGNORE_PROTECTED_PATTERNS = [
17252
17348
  ".daemon/",
17349
+ ".secrets/",
17253
17350
  ".shadow/",
17351
+ "cache/",
17352
+ "data/",
17353
+ "files/",
17354
+ "runtime/",
17355
+ "workspace-layout.json",
17254
17356
  "node_modules/",
17255
17357
  `${SIGNET_SOURCE_CHECKOUT_DIRNAME}/`,
17256
17358
  "memory/memories.db*",
@@ -17270,17 +17372,53 @@ var SIGNET_GITIGNORE_PROTECTED_PATTERNS = [
17270
17372
  "*.sqlite",
17271
17373
  "*.sqlite3"
17272
17374
  ];
17375
+ var DESCRIPTOR_ROOT = process.platform === "linux" ? "/proc/self/fd" : process.platform === "darwin" ? "/dev/fd" : undefined;
17376
+ var DIRECTORY_FLAGS = fsConstants.O_RDONLY | (fsConstants.O_DIRECTORY ?? 0) | (fsConstants.O_NOFOLLOW ?? 0);
17377
+ var FILE_FLAGS = fsConstants.O_RDONLY | (fsConstants.O_NOFOLLOW ?? 0) | (fsConstants.O_NONBLOCK ?? 0);
17378
+ var NOFOLLOW = fsConstants.O_NOFOLLOW ?? 0;
17379
+ var PROTECTION_COMPONENT_IDS = [
17380
+ "root-authored",
17381
+ "skills",
17382
+ "managed-originals",
17383
+ "sqlite",
17384
+ "transcripts",
17385
+ "external-sources",
17386
+ "runtime",
17387
+ "filesystem-cache",
17388
+ "secrets"
17389
+ ];
17390
+ var ORDER = new Map(PROTECTION_COMPONENT_IDS.map((id, index) => [id, index]));
17391
+ var BLOCKING = new Set(["missing", "stale", "degraded"]);
17392
+ var STATES = new Set([
17393
+ "found",
17394
+ "missing",
17395
+ "locked",
17396
+ "unavailable",
17397
+ "permission-denied",
17398
+ "corrupt",
17399
+ "unsupported"
17400
+ ]);
17401
+ var mutation = Promise.resolve();
17402
+ var LOOPBACK_HOST = "127.0.0.1";
17403
+ var LOCAL_BINDS = new Set([LOOPBACK_HOST, "localhost", "::1", "::ffff:127.0.0.1"]);
17404
+ var import_yaml2 = __toESM2(require_dist(), 1);
17405
+ var native = null;
17406
+ try {
17407
+ const esmRequire = createRequire2(import.meta.url);
17408
+ native = esmRequire("@signet/native");
17409
+ } catch {}
17410
+ var GRAPHIQ_DEFAULT_INSTALL_DIR = join14(homedir5(), ".local", "bin");
17273
17411
  var DEFAULT_DISCORD_DESKTOP_CACHE_PATH = defaultDiscordDesktopCachePath();
17274
17412
  var DEFAULT_GITHUB_RESOURCE_TYPES = ["issues", "pulls", "discussions", "docs"];
17275
17413
  var VALID_GITHUB_RESOURCE_TYPES = new Set(DEFAULT_GITHUB_RESOURCE_TYPES);
17276
17414
  function defaultDiscordDesktopCachePath() {
17277
17415
  switch (platform2()) {
17278
17416
  case "darwin":
17279
- return resolve5(homedir6(), "Library", "Application Support", "discord");
17417
+ return resolve9(homedir6(), "Library", "Application Support", "discord");
17280
17418
  case "win32":
17281
- return resolve5(process.env.APPDATA || resolve5(homedir6(), "AppData", "Roaming"), "discord");
17419
+ return resolve9(process.env.APPDATA || resolve9(homedir6(), "AppData", "Roaming"), "discord");
17282
17420
  default:
17283
- return resolve5(process.env.XDG_CONFIG_HOME || resolve5(homedir6(), ".config"), "discord");
17421
+ return resolve9(process.env.XDG_CONFIG_HOME || resolve9(homedir6(), ".config"), "discord");
17284
17422
  }
17285
17423
  }
17286
17424
  var IDENTITY_FILES = {
@@ -17340,7 +17478,7 @@ var REQUIRED_IDENTITY_KEYS = Object.entries(IDENTITY_FILES).filter(([, spec]) =>
17340
17478
  var OPTIONAL_IDENTITY_KEYS = Object.entries(IDENTITY_FILES).filter(([, spec]) => spec.optional).map(([key]) => key);
17341
17479
  function linkDirSync(target, path) {
17342
17480
  const type = process.platform === "win32" ? "junction" : "dir";
17343
- symlinkSync(target, path, type);
17481
+ symlinkSync2(target, path, type);
17344
17482
  }
17345
17483
  function symlinkSkills(sourceDir, targetDir, options = {}) {
17346
17484
  const result = {
@@ -17348,19 +17486,19 @@ function symlinkSkills(sourceDir, targetDir, options = {}) {
17348
17486
  skipped: [],
17349
17487
  errors: []
17350
17488
  };
17351
- if (!existsSync14(sourceDir)) {
17489
+ if (!existsSync18(sourceDir)) {
17352
17490
  return result;
17353
17491
  }
17354
- const targetParent = join14(targetDir, "..");
17355
- if (!existsSync14(targetParent)) {
17356
- mkdirSync8(targetParent, { recursive: true });
17492
+ const targetParent = join18(targetDir, "..");
17493
+ if (!existsSync18(targetParent)) {
17494
+ mkdirSync10(targetParent, { recursive: true });
17357
17495
  }
17358
- if (!existsSync14(targetDir)) {
17359
- mkdirSync8(targetDir, { recursive: true });
17496
+ if (!existsSync18(targetDir)) {
17497
+ mkdirSync10(targetDir, { recursive: true });
17360
17498
  }
17361
17499
  let entries;
17362
17500
  try {
17363
- entries = readdirSync6(sourceDir);
17501
+ entries = readdirSync9(sourceDir);
17364
17502
  } catch (e) {
17365
17503
  result.errors.push({
17366
17504
  path: sourceDir,
@@ -17369,10 +17507,10 @@ function symlinkSkills(sourceDir, targetDir, options = {}) {
17369
17507
  return result;
17370
17508
  }
17371
17509
  for (const entry of entries) {
17372
- const srcPath = join14(sourceDir, entry);
17373
- const destPath = join14(targetDir, entry);
17510
+ const srcPath = join18(sourceDir, entry);
17511
+ const destPath = join18(targetDir, entry);
17374
17512
  try {
17375
- const src = lstatSync(srcPath);
17513
+ const src = lstatSync3(srcPath);
17376
17514
  if (src.isSymbolicLink() || !src.isDirectory()) {
17377
17515
  result.skipped.push(srcPath);
17378
17516
  continue;
@@ -17385,7 +17523,7 @@ function symlinkSkills(sourceDir, targetDir, options = {}) {
17385
17523
  continue;
17386
17524
  }
17387
17525
  try {
17388
- const destStat = lstatSync(destPath);
17526
+ const destStat = lstatSync3(destPath);
17389
17527
  if (destStat.isSymbolicLink()) {
17390
17528
  if (!options.dryRun) {
17391
17529
  unlinkSync2(destPath);
@@ -19545,7 +19683,7 @@ function parseLenientJsonObject(raw, options) {
19545
19683
 
19546
19684
  // ../../../platform/core/dist/index.js
19547
19685
  import { createRequire as createRequire3 } from "node:module";
19548
- import { dirname as dirname3, join as join2 } from "node:path";
19686
+ import { dirname as dirname3, join as join2, resolve as resolve2 } from "node:path";
19549
19687
  import { fileURLToPath as fileURLToPath2 } from "node:url";
19550
19688
  import {
19551
19689
  execFile as nodeExecFile2,
@@ -19557,12 +19695,13 @@ import {
19557
19695
  import { promisify as promisify2 } from "node:util";
19558
19696
  import { createHash as createHash2 } from "node:crypto";
19559
19697
  import { homedir as homedir2 } from "node:os";
19560
- import { join as join22, resolve } from "node:path";
19698
+ import { join as join22, resolve as resolve22 } from "node:path";
19699
+ import { constants as fsConstants2 } from "node:fs";
19561
19700
  import { createRequire as createRequire22 } from "node:module";
19562
19701
  import { homedir as homedir52 } from "node:os";
19563
- import { dirname as dirname52, join as join92, resolve as resolve32 } from "node:path";
19702
+ import { dirname as dirname62, join as join142, resolve as resolve82 } from "node:path";
19564
19703
  import { homedir as homedir62, platform as platform22 } from "node:os";
19565
- import { basename as basename2, dirname as dirname62, resolve as resolve52 } from "node:path";
19704
+ import { basename as basename2, dirname as dirname72, resolve as resolve92 } from "node:path";
19566
19705
  import { homedir as homedir82 } from "node:os";
19567
19706
  var __create3 = Object.create;
19568
19707
  var __getProtoOf3 = Object.getPrototypeOf;
@@ -30129,7 +30268,7 @@ var DAEMON_DERIVED_MEMORY_SOURCE_TYPES2 = [
30129
30268
  "checkpoint",
30130
30269
  "dreaming"
30131
30270
  ];
30132
- function up160(db) {
30271
+ function up161(db) {
30133
30272
  const hasColumn26 = (table, column) => {
30134
30273
  const statement = db.prepare(`SELECT 1 FROM pragma_table_info('${table}') WHERE name = ?`);
30135
30274
  try {
@@ -30196,8 +30335,8 @@ function up210(db) {
30196
30335
  `);
30197
30336
  }
30198
30337
  function addColumnIfMissing30(db, column, definition) {
30199
- const columns = db.prepare("PRAGMA table_info(transcript_capture_jobs)").all();
30200
- if (columns.some((row) => row.name === column))
30338
+ const columns2 = db.prepare("PRAGMA table_info(transcript_capture_jobs)").all();
30339
+ if (columns2.some((row) => row.name === column))
30201
30340
  return;
30202
30341
  db.exec(`ALTER TABLE transcript_capture_jobs ADD COLUMN ${column} ${definition}`);
30203
30342
  }
@@ -31078,8 +31217,8 @@ function up252(db) {
31078
31217
  addColumnIfMissing82(db, "session_memories", "structural_density", "INTEGER");
31079
31218
  }
31080
31219
  function up262(db) {
31081
- const columns = db.prepare("PRAGMA table_info(session_checkpoints)").all();
31082
- const columnNames = new Set(columns.flatMap((column) => typeof column.name === "string" ? [column.name] : []));
31220
+ const columns2 = db.prepare("PRAGMA table_info(session_checkpoints)").all();
31221
+ const columnNames = new Set(columns2.flatMap((column) => typeof column.name === "string" ? [column.name] : []));
31083
31222
  if (!columnNames.has("focal_entity_ids")) {
31084
31223
  db.exec("ALTER TABLE session_checkpoints ADD COLUMN focal_entity_ids TEXT");
31085
31224
  }
@@ -33391,8 +33530,8 @@ function up972(db) {
33391
33530
  `);
33392
33531
  }
33393
33532
  function up982(db) {
33394
- const columns = db.prepare("PRAGMA table_info(dreaming_state)").all();
33395
- if (!columns.some((column) => column.name === "evidence_cursor")) {
33533
+ const columns2 = db.prepare("PRAGMA table_info(dreaming_state)").all();
33534
+ if (!columns2.some((column) => column.name === "evidence_cursor")) {
33396
33535
  db.exec("ALTER TABLE dreaming_state ADD COLUMN evidence_cursor TEXT");
33397
33536
  }
33398
33537
  }
@@ -33436,8 +33575,8 @@ function up1012(db) {
33436
33575
  db.exec("DROP TABLE IF EXISTS ingestion_jobs");
33437
33576
  }
33438
33577
  function up1022(db) {
33439
- const columns = db.prepare("PRAGMA table_info(dreaming_state)").all();
33440
- if (!columns.some((column) => column.name === "last_failure_at")) {
33578
+ const columns2 = db.prepare("PRAGMA table_info(dreaming_state)").all();
33579
+ if (!columns2.some((column) => column.name === "last_failure_at")) {
33441
33580
  db.exec("ALTER TABLE dreaming_state ADD COLUMN last_failure_at TEXT");
33442
33581
  }
33443
33582
  db.exec("UPDATE dreaming_state SET last_failure_at = updated_at WHERE consecutive_failures > 0 AND last_failure_at IS NULL");
@@ -33480,11 +33619,11 @@ function up1042(db) {
33480
33619
  `);
33481
33620
  }
33482
33621
  function up1052(db) {
33483
- const columns = db.prepare("PRAGMA table_info(dreaming_passes)").all();
33484
- if (!columns.some((column) => column.name === "evidence_window_json")) {
33622
+ const columns2 = db.prepare("PRAGMA table_info(dreaming_passes)").all();
33623
+ if (!columns2.some((column) => column.name === "evidence_window_json")) {
33485
33624
  db.exec("ALTER TABLE dreaming_passes ADD COLUMN evidence_window_json TEXT");
33486
33625
  }
33487
- if (!columns.some((column) => column.name === "runbook_json")) {
33626
+ if (!columns2.some((column) => column.name === "runbook_json")) {
33488
33627
  db.exec("ALTER TABLE dreaming_passes ADD COLUMN runbook_json TEXT");
33489
33628
  }
33490
33629
  }
@@ -33923,8 +34062,8 @@ function hasTable42(db, table) {
33923
34062
  return db.prepare("SELECT 1 AS present FROM sqlite_master WHERE type = 'table' AND name = ?").get(table) != null;
33924
34063
  }
33925
34064
  function addColumnIfMissing262(db, table, column, definition) {
33926
- const columns = db.prepare(`PRAGMA table_info(${table})`).all();
33927
- if (columns.some((row) => row.name === column))
34065
+ const columns2 = db.prepare(`PRAGMA table_info(${table})`).all();
34066
+ if (columns2.some((row) => row.name === column))
33928
34067
  return;
33929
34068
  db.exec(`ALTER TABLE ${table} ADD COLUMN ${column} ${definition}`);
33930
34069
  }
@@ -33936,8 +34075,8 @@ function hashTranscript2(content) {
33936
34075
  return createHash2("sha256").update(content, "utf8").digest("hex");
33937
34076
  }
33938
34077
  function backfillTranscriptHashes2(db) {
33939
- const columns = tableColumns2(db, "session_transcripts");
33940
- if (!columns.has("content_hash") || !columns.has("content"))
34078
+ const columns2 = tableColumns2(db, "session_transcripts");
34079
+ if (!columns2.has("content_hash") || !columns2.has("content"))
33941
34080
  return;
33942
34081
  const rows = db.prepare("SELECT session_key, agent_id, content FROM session_transcripts WHERE content_hash IS NULL").all();
33943
34082
  const update = db.prepare("UPDATE session_transcripts SET content_hash = ? WHERE agent_id = ? AND session_key = ? AND content_hash IS NULL");
@@ -33963,8 +34102,8 @@ function laterTimestamp2(current, candidate) {
33963
34102
  }
33964
34103
  return candidate > current ? candidate : current;
33965
34104
  }
33966
- function isCompletionBoundary2(job, columns) {
33967
- return columns.has("trigger") && job.trigger === "session_end" || columns.has("boundary_reason") && COMPLETION_BOUNDARY_REASONS2.has(job.boundary_reason ?? "");
34105
+ function isCompletionBoundary2(job, columns2) {
34106
+ return columns2.has("trigger") && job.trigger === "session_end" || columns2.has("boundary_reason") && COMPLETION_BOUNDARY_REASONS2.has(job.boundary_reason ?? "");
33968
34107
  }
33969
34108
  function mergeTranscriptContent2(current, next) {
33970
34109
  if (current.length === 0)
@@ -34212,8 +34351,8 @@ function up1262(db) {
34212
34351
  `);
34213
34352
  }
34214
34353
  function up1272(db) {
34215
- const columns = db.prepare("PRAGMA table_info(dreaming_evidence_exclusions)").all();
34216
- const names = new Set(columns.map((column) => column.name));
34354
+ const columns2 = db.prepare("PRAGMA table_info(dreaming_evidence_exclusions)").all();
34355
+ const names = new Set(columns2.map((column) => column.name));
34217
34356
  if (!names.has("failure_class")) {
34218
34357
  db.exec("ALTER TABLE dreaming_evidence_exclusions ADD COLUMN failure_class TEXT NOT NULL DEFAULT 'unknown' CHECK (failure_class IN ('incomplete_transcript', 'source_projection', 'scope_mismatch', 'quote_mismatch', 'unknown'))");
34219
34358
  }
@@ -34625,8 +34764,8 @@ function up1382(db) {
34625
34764
  CREATE INDEX IF NOT EXISTS idx_memory_head_revision_entries_entry
34626
34765
  ON memory_head_revision_entries(agent_id, entry_id, revision DESC);
34627
34766
  `);
34628
- const columns = db.prepare("PRAGMA table_info(memory_md_heads)").all();
34629
- const names = new Set(columns.map((column) => String(column.name)));
34767
+ const columns2 = db.prepare("PRAGMA table_info(memory_md_heads)").all();
34768
+ const names = new Set(columns2.map((column) => String(column.name)));
34630
34769
  if (!names.has("revision_id"))
34631
34770
  db.exec("ALTER TABLE memory_md_heads ADD COLUMN revision_id TEXT");
34632
34771
  if (!names.has("pass_id"))
@@ -35052,13 +35191,13 @@ function up1462(db) {
35052
35191
  `);
35053
35192
  }
35054
35193
  function up1472(db) {
35055
- const columns = db.prepare("PRAGMA table_info(source_sync_checkpoints)").all();
35056
- if (!columns.some((column) => column.name === "frontier")) {
35194
+ const columns2 = db.prepare("PRAGMA table_info(source_sync_checkpoints)").all();
35195
+ if (!columns2.some((column) => column.name === "frontier")) {
35057
35196
  db.exec("ALTER TABLE source_sync_checkpoints ADD COLUMN frontier TEXT");
35058
35197
  }
35059
35198
  }
35060
35199
  function up1482(db) {
35061
- const columns = new Set(db.prepare("PRAGMA table_info(embedding_index_state)").all().map((row) => row.name).filter((name) => typeof name === "string"));
35200
+ const columns2 = new Set(db.prepare("PRAGMA table_info(embedding_index_state)").all().map((row) => row.name).filter((name) => typeof name === "string"));
35062
35201
  const additions = [
35063
35202
  ["migration_phase", "TEXT"],
35064
35203
  ["progress_staged", "INTEGER NOT NULL DEFAULT 0"],
@@ -35069,7 +35208,7 @@ function up1482(db) {
35069
35208
  ["provider_endpoint", "TEXT"]
35070
35209
  ];
35071
35210
  for (const [name, definition] of additions) {
35072
- if (!columns.has(name))
35211
+ if (!columns2.has(name))
35073
35212
  db.exec(`ALTER TABLE embedding_index_state ADD COLUMN ${name} ${definition}`);
35074
35213
  }
35075
35214
  db.exec(`
@@ -35093,8 +35232,8 @@ function up1482(db) {
35093
35232
  }
35094
35233
  }
35095
35234
  function up1492(db) {
35096
- const columns = new Set(db.prepare("PRAGMA table_info(memory_jobs)").all().map((row) => row.name).filter((name) => typeof name === "string"));
35097
- if (!columns.has("lease_token")) {
35235
+ const columns2 = new Set(db.prepare("PRAGMA table_info(memory_jobs)").all().map((row) => row.name).filter((name) => typeof name === "string"));
35236
+ if (!columns2.has("lease_token")) {
35098
35237
  db.exec("ALTER TABLE memory_jobs ADD COLUMN lease_token TEXT");
35099
35238
  }
35100
35239
  }
@@ -35187,8 +35326,8 @@ function up1522(db) {
35187
35326
  db.exec("CREATE INDEX IF NOT EXISTS idx_source_import_files_job_state ON source_import_files(job_id, state)");
35188
35327
  }
35189
35328
  function up1532(db) {
35190
- const columns = db.prepare("PRAGMA table_info(source_import_record_attempts)").all();
35191
- if (!columns.some((column) => column.name === "source_id")) {
35329
+ const columns2 = db.prepare("PRAGMA table_info(source_import_record_attempts)").all();
35330
+ if (!columns2.some((column) => column.name === "source_id")) {
35192
35331
  db.exec("ALTER TABLE source_import_record_attempts ADD COLUMN source_id TEXT");
35193
35332
  }
35194
35333
  }
@@ -35209,8 +35348,8 @@ function up1542(db) {
35209
35348
  addColumn("source_import_files", "error", "TEXT");
35210
35349
  }
35211
35350
  function addColumnIfMissing292(db, table, column, definition) {
35212
- const columns = db.prepare(`PRAGMA table_info(${table})`).all();
35213
- if (!columns.some((row) => row.name === column))
35351
+ const columns2 = db.prepare(`PRAGMA table_info(${table})`).all();
35352
+ if (!columns2.some((row) => row.name === column))
35214
35353
  db.exec(`ALTER TABLE ${table} ADD COLUMN ${column} ${definition}`);
35215
35354
  }
35216
35355
  function up1552(db) {
@@ -35410,8 +35549,8 @@ function up1572(db) {
35410
35549
  `);
35411
35550
  }
35412
35551
  function up1582(db) {
35413
- const columns = new Set(db.prepare("PRAGMA table_info(embedding_repair_checkpoints)").all().map((row) => row.name));
35414
- if (!columns.has("profile_fingerprint")) {
35552
+ const columns2 = new Set(db.prepare("PRAGMA table_info(embedding_repair_checkpoints)").all().map((row) => row.name));
35553
+ if (!columns2.has("profile_fingerprint")) {
35415
35554
  db.exec("ALTER TABLE embedding_repair_checkpoints ADD COLUMN profile_fingerprint TEXT");
35416
35555
  }
35417
35556
  db.exec(`
@@ -35430,6 +35569,102 @@ function up1592(db) {
35430
35569
  ON memories(agent_id, memory_kind);
35431
35570
  `);
35432
35571
  }
35572
+ var ledgerColumns2 = [
35573
+ "key",
35574
+ "agent_id",
35575
+ "workspace_id",
35576
+ "file_name",
35577
+ "status",
35578
+ "original_path",
35579
+ "sha256",
35580
+ "size_bytes",
35581
+ "request_fingerprint",
35582
+ "source_id",
35583
+ "lease_token",
35584
+ "lease_expires_at",
35585
+ "attempt_count",
35586
+ "error",
35587
+ "created_at",
35588
+ "updated_at"
35589
+ ];
35590
+ function columns2(db, table) {
35591
+ return new Set(db.prepare(`PRAGMA table_info(${table})`).all().map((row) => String(row.name)));
35592
+ }
35593
+ function addMissingColumns2(db, table, definitions) {
35594
+ const present = columns2(db, table);
35595
+ for (const definition of definitions) {
35596
+ const name = definition.split(" ", 1)[0];
35597
+ if (!present.has(name))
35598
+ db.exec(`ALTER TABLE ${table} ADD COLUMN ${definition}`);
35599
+ }
35600
+ }
35601
+ function rebuildLedgerWithoutGlobalKeyPrimaryKey2(db) {
35602
+ const keyInfo = db.prepare("PRAGMA table_info(import_admission_ledger)").all().find((row) => row.name === "key");
35603
+ if (!keyInfo || Number(keyInfo.pk) === 0)
35604
+ return;
35605
+ const savepoint = "migration_158_rebuild_ledger";
35606
+ db.exec(`SAVEPOINT ${savepoint}`);
35607
+ try {
35608
+ db.exec(`
35609
+ CREATE TABLE import_admission_ledger_v158 (
35610
+ key TEXT NOT NULL, agent_id TEXT NOT NULL DEFAULT '', workspace_id TEXT NOT NULL DEFAULT '',
35611
+ file_name TEXT NOT NULL, status TEXT NOT NULL CHECK (status IN ('pending','processing','imported','duplicate','failed','quarantined','original_unavailable')),
35612
+ original_path TEXT NOT NULL, sha256 TEXT NOT NULL, size_bytes INTEGER NOT NULL,
35613
+ request_fingerprint TEXT NOT NULL DEFAULT '', source_id TEXT, lease_token TEXT, lease_expires_at TEXT,
35614
+ attempt_count INTEGER NOT NULL DEFAULT 0, error TEXT, created_at TEXT NOT NULL, updated_at TEXT NOT NULL
35615
+ );
35616
+ INSERT INTO import_admission_ledger_v158 (${ledgerColumns2.join(",")})
35617
+ SELECT ${ledgerColumns2.join(",")} FROM import_admission_ledger;
35618
+ DROP TABLE import_admission_ledger;
35619
+ ALTER TABLE import_admission_ledger_v158 RENAME TO import_admission_ledger;
35620
+ `);
35621
+ db.exec(`RELEASE ${savepoint}`);
35622
+ } catch (error) {
35623
+ try {
35624
+ db.exec(`ROLLBACK TO SAVEPOINT ${savepoint}`);
35625
+ } finally {
35626
+ try {
35627
+ db.exec(`RELEASE ${savepoint}`);
35628
+ } catch {}
35629
+ }
35630
+ throw error;
35631
+ }
35632
+ }
35633
+ function up1602(db) {
35634
+ db.exec(`
35635
+ CREATE TABLE IF NOT EXISTS import_admission_ledger (
35636
+ key TEXT NOT NULL, agent_id TEXT NOT NULL, workspace_id TEXT NOT NULL DEFAULT '', file_name TEXT NOT NULL,
35637
+ status TEXT NOT NULL CHECK (status IN ('pending','processing','imported','duplicate','failed','quarantined','original_unavailable')),
35638
+ original_path TEXT NOT NULL, sha256 TEXT NOT NULL, size_bytes INTEGER NOT NULL,
35639
+ request_fingerprint TEXT NOT NULL DEFAULT '', source_id TEXT, lease_token TEXT, lease_expires_at TEXT,
35640
+ attempt_count INTEGER NOT NULL DEFAULT 0, error TEXT, created_at TEXT NOT NULL, updated_at TEXT NOT NULL
35641
+ );
35642
+ CREATE TABLE IF NOT EXISTS import_admission_events (
35643
+ id INTEGER PRIMARY KEY AUTOINCREMENT, admission_key TEXT NOT NULL, agent_id TEXT NOT NULL DEFAULT '',
35644
+ workspace_id TEXT NOT NULL DEFAULT '', event TEXT NOT NULL, created_at TEXT NOT NULL
35645
+ );
35646
+ `);
35647
+ addMissingColumns2(db, "import_admission_ledger", [
35648
+ "agent_id TEXT NOT NULL DEFAULT ''",
35649
+ "workspace_id TEXT NOT NULL DEFAULT ''",
35650
+ "request_fingerprint TEXT NOT NULL DEFAULT ''",
35651
+ "source_id TEXT",
35652
+ "lease_token TEXT",
35653
+ "lease_expires_at TEXT",
35654
+ "attempt_count INTEGER NOT NULL DEFAULT 0",
35655
+ "error TEXT"
35656
+ ]);
35657
+ addMissingColumns2(db, "import_admission_events", [
35658
+ "agent_id TEXT NOT NULL DEFAULT ''",
35659
+ "workspace_id TEXT NOT NULL DEFAULT ''"
35660
+ ]);
35661
+ rebuildLedgerWithoutGlobalKeyPrimaryKey2(db);
35662
+ db.exec(`
35663
+ CREATE UNIQUE INDEX IF NOT EXISTS uq_import_admission_scope_key ON import_admission_ledger(key, agent_id, workspace_id);
35664
+ CREATE INDEX IF NOT EXISTS idx_import_admission_status ON import_admission_ledger(agent_id, workspace_id, status, updated_at);
35665
+ CREATE INDEX IF NOT EXISTS idx_import_admission_events_key ON import_admission_events(admission_key, agent_id, workspace_id, id);
35666
+ `);
35667
+ }
35433
35668
  var MIGRATIONS2 = [
35434
35669
  {
35435
35670
  version: 1,
@@ -36634,7 +36869,7 @@ var MIGRATIONS2 = [
36634
36869
  {
36635
36870
  version: 151,
36636
36871
  name: "transcript-import-bytes",
36637
- up: up160,
36872
+ up: up161,
36638
36873
  artifacts: {
36639
36874
  tables: [
36640
36875
  "source_import_chunks",
@@ -36718,6 +36953,18 @@ var MIGRATIONS2 = [
36718
36953
  version: 159,
36719
36954
  name: "retire-obsolete-invocation-ledger",
36720
36955
  up: up510
36956
+ },
36957
+ {
36958
+ version: 160,
36959
+ name: "import-admission-ledger",
36960
+ up: up1602,
36961
+ artifacts: {
36962
+ tables: ["import_admission_ledger", "import_admission_events"],
36963
+ indexes: ["idx_import_admission_status", "idx_import_admission_events_key"],
36964
+ columns: [
36965
+ ...["workspace_id", "request_fingerprint", "source_id", "lease_token", "lease_expires_at", "attempt_count"].map((column) => ({ table: "import_admission_ledger", column }))
36966
+ ]
36967
+ }
36721
36968
  }
36722
36969
  ];
36723
36970
  var LATEST_SCHEMA_VERSION2 = MIGRATIONS2[MIGRATIONS2.length - 1]?.version ?? 0;
@@ -36732,30 +36979,17 @@ function expandHome(p3, home2 = homedir2()) {
36732
36979
  return join22(home2, p3.slice(2));
36733
36980
  return p3;
36734
36981
  }
36735
- var STATES2 = new Set([
36736
- "found",
36737
- "missing",
36738
- "locked",
36739
- "unavailable",
36740
- "permission-denied",
36741
- "corrupt",
36742
- "unsupported"
36743
- ]);
36744
- var mutation2 = Promise.resolve();
36745
- var LOOPBACK_HOST2 = "127.0.0.1";
36746
- var LOCAL_BINDS2 = new Set([LOOPBACK_HOST2, "localhost", "::1", "::ffff:127.0.0.1"]);
36747
- var import_yaml22 = __toESM3(require_dist2(), 1);
36748
- var native2 = null;
36749
- try {
36750
- const esmRequire = createRequire22(import.meta.url);
36751
- native2 = esmRequire("@signet/native");
36752
- } catch {}
36753
- var GRAPHIQ_DEFAULT_INSTALL_DIR2 = join92(homedir52(), ".local", "bin");
36754
36982
  var SIGNET_SOURCE_CHECKOUT_DIRNAME2 = "signetai";
36755
36983
  var SIGNET_GIT_ALLOWED_DIRECTORIES2 = ["skills", "tools", "dreaming"];
36756
36984
  var SIGNET_GIT_PROTECTED_PATHS2 = [
36757
36985
  ".daemon",
36986
+ ".secrets",
36758
36987
  ".shadow",
36988
+ "cache",
36989
+ "data",
36990
+ "files",
36991
+ "runtime",
36992
+ "workspace-layout.json",
36759
36993
  "node_modules",
36760
36994
  ":(glob)**/node_modules/**",
36761
36995
  `${SIGNET_SOURCE_CHECKOUT_DIRNAME2}`,
@@ -36794,7 +37028,13 @@ var SIGNET_GIT_TRACKED_PATHS2 = [
36794
37028
  ];
36795
37029
  var SIGNET_GITIGNORE_PROTECTED_PATTERNS2 = [
36796
37030
  ".daemon/",
37031
+ ".secrets/",
36797
37032
  ".shadow/",
37033
+ "cache/",
37034
+ "data/",
37035
+ "files/",
37036
+ "runtime/",
37037
+ "workspace-layout.json",
36798
37038
  "node_modules/",
36799
37039
  `${SIGNET_SOURCE_CHECKOUT_DIRNAME2}/`,
36800
37040
  "memory/memories.db*",
@@ -36814,17 +37054,53 @@ var SIGNET_GITIGNORE_PROTECTED_PATTERNS2 = [
36814
37054
  "*.sqlite",
36815
37055
  "*.sqlite3"
36816
37056
  ];
37057
+ var DESCRIPTOR_ROOT2 = process.platform === "linux" ? "/proc/self/fd" : process.platform === "darwin" ? "/dev/fd" : undefined;
37058
+ var DIRECTORY_FLAGS2 = fsConstants2.O_RDONLY | (fsConstants2.O_DIRECTORY ?? 0) | (fsConstants2.O_NOFOLLOW ?? 0);
37059
+ var FILE_FLAGS2 = fsConstants2.O_RDONLY | (fsConstants2.O_NOFOLLOW ?? 0) | (fsConstants2.O_NONBLOCK ?? 0);
37060
+ var NOFOLLOW2 = fsConstants2.O_NOFOLLOW ?? 0;
37061
+ var PROTECTION_COMPONENT_IDS2 = [
37062
+ "root-authored",
37063
+ "skills",
37064
+ "managed-originals",
37065
+ "sqlite",
37066
+ "transcripts",
37067
+ "external-sources",
37068
+ "runtime",
37069
+ "filesystem-cache",
37070
+ "secrets"
37071
+ ];
37072
+ var ORDER2 = new Map(PROTECTION_COMPONENT_IDS2.map((id, index) => [id, index]));
37073
+ var BLOCKING2 = new Set(["missing", "stale", "degraded"]);
37074
+ var STATES2 = new Set([
37075
+ "found",
37076
+ "missing",
37077
+ "locked",
37078
+ "unavailable",
37079
+ "permission-denied",
37080
+ "corrupt",
37081
+ "unsupported"
37082
+ ]);
37083
+ var mutation2 = Promise.resolve();
37084
+ var LOOPBACK_HOST2 = "127.0.0.1";
37085
+ var LOCAL_BINDS2 = new Set([LOOPBACK_HOST2, "localhost", "::1", "::ffff:127.0.0.1"]);
37086
+ var import_yaml22 = __toESM3(require_dist2(), 1);
37087
+ var native2 = null;
37088
+ try {
37089
+ const esmRequire = createRequire22(import.meta.url);
37090
+ native2 = esmRequire("@signet/native");
37091
+ } catch {}
37092
+ var GRAPHIQ_DEFAULT_INSTALL_DIR2 = join142(homedir52(), ".local", "bin");
36817
37093
  var DEFAULT_DISCORD_DESKTOP_CACHE_PATH2 = defaultDiscordDesktopCachePath2();
36818
37094
  var DEFAULT_GITHUB_RESOURCE_TYPES2 = ["issues", "pulls", "discussions", "docs"];
36819
37095
  var VALID_GITHUB_RESOURCE_TYPES2 = new Set(DEFAULT_GITHUB_RESOURCE_TYPES2);
36820
37096
  function defaultDiscordDesktopCachePath2() {
36821
37097
  switch (platform22()) {
36822
37098
  case "darwin":
36823
- return resolve52(homedir62(), "Library", "Application Support", "discord");
37099
+ return resolve92(homedir62(), "Library", "Application Support", "discord");
36824
37100
  case "win32":
36825
- return resolve52(process.env.APPDATA || resolve52(homedir62(), "AppData", "Roaming"), "discord");
37101
+ return resolve92(process.env.APPDATA || resolve92(homedir62(), "AppData", "Roaming"), "discord");
36826
37102
  default:
36827
- return resolve52(process.env.XDG_CONFIG_HOME || resolve52(homedir62(), ".config"), "discord");
37103
+ return resolve92(process.env.XDG_CONFIG_HOME || resolve92(homedir62(), ".config"), "discord");
36828
37104
  }
36829
37105
  }
36830
37106
  var IDENTITY_FILES2 = {
@@ -37115,7 +37391,7 @@ class OpenClawConnector extends BaseConnector {
37115
37391
  if (trimmed.length === 0) {
37116
37392
  continue;
37117
37393
  }
37118
- const expanded = resolve2(expandHome(trimmed, this.getHomeDir()));
37394
+ const expanded = resolve3(expandHome(trimmed, this.getHomeDir()));
37119
37395
  if (seen.has(expanded)) {
37120
37396
  continue;
37121
37397
  }
@@ -37263,7 +37539,7 @@ class OpenClawConnector extends BaseConnector {
37263
37539
  return candidates[0];
37264
37540
  }
37265
37541
  validateWorkspacePath(p3) {
37266
- const resolved = resolve2(expandHome(p3, this.getHomeDir()));
37542
+ const resolved = resolve3(expandHome(p3, this.getHomeDir()));
37267
37543
  const tmp = tmpdir();
37268
37544
  if (resolved.startsWith(tmp)) {
37269
37545
  throw new Error(`Refusing to set workspace to temp directory: ${resolved}`);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@signetai/connector-openclaw",
3
- "version": "0.227.1",
3
+ "version": "0.228.0",
4
4
  "description": "Signet connector for OpenClaw - configures workspace and memory hooks",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -25,8 +25,8 @@
25
25
  "test": "bun test"
26
26
  },
27
27
  "dependencies": {
28
- "@signetai/connector-base": "0.227.1",
29
- "@signetai/core": "0.227.1"
28
+ "@signetai/connector-base": "0.228.0",
29
+ "@signetai/core": "0.228.0"
30
30
  },
31
31
  "devDependencies": {
32
32
  "@types/node": "^22.0.0",