@signetai/connector-claude-code 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 +376 -100
  2. package/package.json +3 -3
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  // ../../../platform/core/dist/index.js
2
2
  import { createRequire } from "node:module";
3
- import { dirname, join } from "node:path";
3
+ import { dirname, join, resolve } from "node:path";
4
4
  import { fileURLToPath } from "node:url";
5
5
  import {
6
6
  execFile as nodeExecFile,
@@ -12,12 +12,13 @@ import {
12
12
  import { promisify } from "node:util";
13
13
  import { createHash } from "node:crypto";
14
14
  import { homedir as homedir2 } from "node:os";
15
- import { join as join2, resolve } from "node:path";
15
+ import { join as join2, resolve as resolve2 } from "node:path";
16
+ import { constants as fsConstants } from "node:fs";
16
17
  import { createRequire as createRequire2 } from "node:module";
17
18
  import { homedir as homedir5 } from "node:os";
18
- import { dirname as dirname5, join as join9, resolve as resolve3 } from "node:path";
19
+ import { dirname as dirname6, join as join14, resolve as resolve8 } from "node:path";
19
20
  import { homedir as homedir6, platform as platform2 } from "node:os";
20
- import { basename, dirname as dirname6, resolve as resolve5 } from "node:path";
21
+ import { basename, dirname as dirname7, resolve as resolve9 } from "node:path";
21
22
  import { homedir as homedir8 } from "node:os";
22
23
  var __create = Object.create;
23
24
  var __getProtoOf = Object.getPrototypeOf;
@@ -15899,6 +15900,102 @@ function up159(db) {
15899
15900
  ON memories(agent_id, memory_kind);
15900
15901
  `);
15901
15902
  }
15903
+ var ledgerColumns = [
15904
+ "key",
15905
+ "agent_id",
15906
+ "workspace_id",
15907
+ "file_name",
15908
+ "status",
15909
+ "original_path",
15910
+ "sha256",
15911
+ "size_bytes",
15912
+ "request_fingerprint",
15913
+ "source_id",
15914
+ "lease_token",
15915
+ "lease_expires_at",
15916
+ "attempt_count",
15917
+ "error",
15918
+ "created_at",
15919
+ "updated_at"
15920
+ ];
15921
+ function columns(db, table) {
15922
+ return new Set(db.prepare(`PRAGMA table_info(${table})`).all().map((row) => String(row.name)));
15923
+ }
15924
+ function addMissingColumns(db, table, definitions) {
15925
+ const present = columns(db, table);
15926
+ for (const definition of definitions) {
15927
+ const name = definition.split(" ", 1)[0];
15928
+ if (!present.has(name))
15929
+ db.exec(`ALTER TABLE ${table} ADD COLUMN ${definition}`);
15930
+ }
15931
+ }
15932
+ function rebuildLedgerWithoutGlobalKeyPrimaryKey(db) {
15933
+ const keyInfo = db.prepare("PRAGMA table_info(import_admission_ledger)").all().find((row) => row.name === "key");
15934
+ if (!keyInfo || Number(keyInfo.pk) === 0)
15935
+ return;
15936
+ const savepoint = "migration_158_rebuild_ledger";
15937
+ db.exec(`SAVEPOINT ${savepoint}`);
15938
+ try {
15939
+ db.exec(`
15940
+ CREATE TABLE import_admission_ledger_v158 (
15941
+ key TEXT NOT NULL, agent_id TEXT NOT NULL DEFAULT '', workspace_id TEXT NOT NULL DEFAULT '',
15942
+ file_name TEXT NOT NULL, status TEXT NOT NULL CHECK (status IN ('pending','processing','imported','duplicate','failed','quarantined','original_unavailable')),
15943
+ original_path TEXT NOT NULL, sha256 TEXT NOT NULL, size_bytes INTEGER NOT NULL,
15944
+ request_fingerprint TEXT NOT NULL DEFAULT '', source_id TEXT, lease_token TEXT, lease_expires_at TEXT,
15945
+ attempt_count INTEGER NOT NULL DEFAULT 0, error TEXT, created_at TEXT NOT NULL, updated_at TEXT NOT NULL
15946
+ );
15947
+ INSERT INTO import_admission_ledger_v158 (${ledgerColumns.join(",")})
15948
+ SELECT ${ledgerColumns.join(",")} FROM import_admission_ledger;
15949
+ DROP TABLE import_admission_ledger;
15950
+ ALTER TABLE import_admission_ledger_v158 RENAME TO import_admission_ledger;
15951
+ `);
15952
+ db.exec(`RELEASE ${savepoint}`);
15953
+ } catch (error) {
15954
+ try {
15955
+ db.exec(`ROLLBACK TO SAVEPOINT ${savepoint}`);
15956
+ } finally {
15957
+ try {
15958
+ db.exec(`RELEASE ${savepoint}`);
15959
+ } catch {}
15960
+ }
15961
+ throw error;
15962
+ }
15963
+ }
15964
+ function up160(db) {
15965
+ db.exec(`
15966
+ CREATE TABLE IF NOT EXISTS import_admission_ledger (
15967
+ key TEXT NOT NULL, agent_id TEXT NOT NULL, workspace_id TEXT NOT NULL DEFAULT '', file_name TEXT NOT NULL,
15968
+ status TEXT NOT NULL CHECK (status IN ('pending','processing','imported','duplicate','failed','quarantined','original_unavailable')),
15969
+ original_path TEXT NOT NULL, sha256 TEXT NOT NULL, size_bytes INTEGER NOT NULL,
15970
+ request_fingerprint TEXT NOT NULL DEFAULT '', source_id TEXT, lease_token TEXT, lease_expires_at TEXT,
15971
+ attempt_count INTEGER NOT NULL DEFAULT 0, error TEXT, created_at TEXT NOT NULL, updated_at TEXT NOT NULL
15972
+ );
15973
+ CREATE TABLE IF NOT EXISTS import_admission_events (
15974
+ id INTEGER PRIMARY KEY AUTOINCREMENT, admission_key TEXT NOT NULL, agent_id TEXT NOT NULL DEFAULT '',
15975
+ workspace_id TEXT NOT NULL DEFAULT '', event TEXT NOT NULL, created_at TEXT NOT NULL
15976
+ );
15977
+ `);
15978
+ addMissingColumns(db, "import_admission_ledger", [
15979
+ "agent_id TEXT NOT NULL DEFAULT ''",
15980
+ "workspace_id TEXT NOT NULL DEFAULT ''",
15981
+ "request_fingerprint TEXT NOT NULL DEFAULT ''",
15982
+ "source_id TEXT",
15983
+ "lease_token TEXT",
15984
+ "lease_expires_at TEXT",
15985
+ "attempt_count INTEGER NOT NULL DEFAULT 0",
15986
+ "error TEXT"
15987
+ ]);
15988
+ addMissingColumns(db, "import_admission_events", [
15989
+ "agent_id TEXT NOT NULL DEFAULT ''",
15990
+ "workspace_id TEXT NOT NULL DEFAULT ''"
15991
+ ]);
15992
+ rebuildLedgerWithoutGlobalKeyPrimaryKey(db);
15993
+ db.exec(`
15994
+ CREATE UNIQUE INDEX IF NOT EXISTS uq_import_admission_scope_key ON import_admission_ledger(key, agent_id, workspace_id);
15995
+ CREATE INDEX IF NOT EXISTS idx_import_admission_status ON import_admission_ledger(agent_id, workspace_id, status, updated_at);
15996
+ CREATE INDEX IF NOT EXISTS idx_import_admission_events_key ON import_admission_events(admission_key, agent_id, workspace_id, id);
15997
+ `);
15998
+ }
15902
15999
  var MIGRATIONS = [
15903
16000
  {
15904
16001
  version: 1,
@@ -17187,6 +17284,18 @@ var MIGRATIONS = [
17187
17284
  version: 159,
17188
17285
  name: "retire-obsolete-invocation-ledger",
17189
17286
  up: up5
17287
+ },
17288
+ {
17289
+ version: 160,
17290
+ name: "import-admission-ledger",
17291
+ up: up160,
17292
+ artifacts: {
17293
+ tables: ["import_admission_ledger", "import_admission_events"],
17294
+ indexes: ["idx_import_admission_status", "idx_import_admission_events_key"],
17295
+ columns: [
17296
+ ...["workspace_id", "request_fingerprint", "source_id", "lease_token", "lease_expires_at", "attempt_count"].map((column) => ({ table: "import_admission_ledger", column }))
17297
+ ]
17298
+ }
17190
17299
  }
17191
17300
  ];
17192
17301
  var LATEST_SCHEMA_VERSION = MIGRATIONS[MIGRATIONS.length - 1]?.version ?? 0;
@@ -17201,30 +17310,17 @@ function expandHome(p2, home = homedir2()) {
17201
17310
  return join2(home, p2.slice(2));
17202
17311
  return p2;
17203
17312
  }
17204
- var STATES = new Set([
17205
- "found",
17206
- "missing",
17207
- "locked",
17208
- "unavailable",
17209
- "permission-denied",
17210
- "corrupt",
17211
- "unsupported"
17212
- ]);
17213
- var mutation = Promise.resolve();
17214
- var LOOPBACK_HOST = "127.0.0.1";
17215
- var LOCAL_BINDS = new Set([LOOPBACK_HOST, "localhost", "::1", "::ffff:127.0.0.1"]);
17216
- var import_yaml2 = __toESM(require_dist(), 1);
17217
- var native = null;
17218
- try {
17219
- const esmRequire = createRequire2(import.meta.url);
17220
- native = esmRequire("@signet/native");
17221
- } catch {}
17222
- var GRAPHIQ_DEFAULT_INSTALL_DIR = join9(homedir5(), ".local", "bin");
17223
17313
  var SIGNET_SOURCE_CHECKOUT_DIRNAME = "signetai";
17224
17314
  var SIGNET_GIT_ALLOWED_DIRECTORIES = ["skills", "tools", "dreaming"];
17225
17315
  var SIGNET_GIT_PROTECTED_PATHS = [
17226
17316
  ".daemon",
17317
+ ".secrets",
17227
17318
  ".shadow",
17319
+ "cache",
17320
+ "data",
17321
+ "files",
17322
+ "runtime",
17323
+ "workspace-layout.json",
17228
17324
  "node_modules",
17229
17325
  ":(glob)**/node_modules/**",
17230
17326
  `${SIGNET_SOURCE_CHECKOUT_DIRNAME}`,
@@ -17263,7 +17359,13 @@ var SIGNET_GIT_TRACKED_PATHS = [
17263
17359
  ];
17264
17360
  var SIGNET_GITIGNORE_PROTECTED_PATTERNS = [
17265
17361
  ".daemon/",
17362
+ ".secrets/",
17266
17363
  ".shadow/",
17364
+ "cache/",
17365
+ "data/",
17366
+ "files/",
17367
+ "runtime/",
17368
+ "workspace-layout.json",
17267
17369
  "node_modules/",
17268
17370
  `${SIGNET_SOURCE_CHECKOUT_DIRNAME}/`,
17269
17371
  "memory/memories.db*",
@@ -17283,17 +17385,53 @@ var SIGNET_GITIGNORE_PROTECTED_PATTERNS = [
17283
17385
  "*.sqlite",
17284
17386
  "*.sqlite3"
17285
17387
  ];
17388
+ var DESCRIPTOR_ROOT = process.platform === "linux" ? "/proc/self/fd" : process.platform === "darwin" ? "/dev/fd" : undefined;
17389
+ var DIRECTORY_FLAGS = fsConstants.O_RDONLY | (fsConstants.O_DIRECTORY ?? 0) | (fsConstants.O_NOFOLLOW ?? 0);
17390
+ var FILE_FLAGS = fsConstants.O_RDONLY | (fsConstants.O_NOFOLLOW ?? 0) | (fsConstants.O_NONBLOCK ?? 0);
17391
+ var NOFOLLOW = fsConstants.O_NOFOLLOW ?? 0;
17392
+ var PROTECTION_COMPONENT_IDS = [
17393
+ "root-authored",
17394
+ "skills",
17395
+ "managed-originals",
17396
+ "sqlite",
17397
+ "transcripts",
17398
+ "external-sources",
17399
+ "runtime",
17400
+ "filesystem-cache",
17401
+ "secrets"
17402
+ ];
17403
+ var ORDER = new Map(PROTECTION_COMPONENT_IDS.map((id, index) => [id, index]));
17404
+ var BLOCKING = new Set(["missing", "stale", "degraded"]);
17405
+ var STATES = new Set([
17406
+ "found",
17407
+ "missing",
17408
+ "locked",
17409
+ "unavailable",
17410
+ "permission-denied",
17411
+ "corrupt",
17412
+ "unsupported"
17413
+ ]);
17414
+ var mutation = Promise.resolve();
17415
+ var LOOPBACK_HOST = "127.0.0.1";
17416
+ var LOCAL_BINDS = new Set([LOOPBACK_HOST, "localhost", "::1", "::ffff:127.0.0.1"]);
17417
+ var import_yaml2 = __toESM(require_dist(), 1);
17418
+ var native = null;
17419
+ try {
17420
+ const esmRequire = createRequire2(import.meta.url);
17421
+ native = esmRequire("@signet/native");
17422
+ } catch {}
17423
+ var GRAPHIQ_DEFAULT_INSTALL_DIR = join14(homedir5(), ".local", "bin");
17286
17424
  var DEFAULT_DISCORD_DESKTOP_CACHE_PATH = defaultDiscordDesktopCachePath();
17287
17425
  var DEFAULT_GITHUB_RESOURCE_TYPES = ["issues", "pulls", "discussions", "docs"];
17288
17426
  var VALID_GITHUB_RESOURCE_TYPES = new Set(DEFAULT_GITHUB_RESOURCE_TYPES);
17289
17427
  function defaultDiscordDesktopCachePath() {
17290
17428
  switch (platform2()) {
17291
17429
  case "darwin":
17292
- return resolve5(homedir6(), "Library", "Application Support", "discord");
17430
+ return resolve9(homedir6(), "Library", "Application Support", "discord");
17293
17431
  case "win32":
17294
- return resolve5(process.env.APPDATA || resolve5(homedir6(), "AppData", "Roaming"), "discord");
17432
+ return resolve9(process.env.APPDATA || resolve9(homedir6(), "AppData", "Roaming"), "discord");
17295
17433
  default:
17296
- return resolve5(process.env.XDG_CONFIG_HOME || resolve5(homedir6(), ".config"), "discord");
17434
+ return resolve9(process.env.XDG_CONFIG_HOME || resolve9(homedir6(), ".config"), "discord");
17297
17435
  }
17298
17436
  }
17299
17437
  var IDENTITY_FILES = {
@@ -17383,7 +17521,7 @@ import { randomBytes } from "node:crypto";
17383
17521
  import { existsSync, readFileSync, realpathSync, renameSync, statSync, unlinkSync, writeFileSync } from "node:fs";
17384
17522
  import { dirname as dirname2, isAbsolute, join as join3, relative, sep } from "node:path";
17385
17523
  import { createRequire as createRequire3 } from "node:module";
17386
- import { dirname as dirname3, join as join4 } from "node:path";
17524
+ import { dirname as dirname3, join as join4, resolve as resolve3 } from "node:path";
17387
17525
  import { fileURLToPath as fileURLToPath2 } from "node:url";
17388
17526
  import {
17389
17527
  execFile as nodeExecFile2,
@@ -17394,14 +17532,15 @@ import {
17394
17532
  } from "node:child_process";
17395
17533
  import { promisify as promisify2 } from "node:util";
17396
17534
  import { createHash as createHash2 } from "node:crypto";
17535
+ import { constants as fsConstants2 } from "node:fs";
17397
17536
  import { createRequire as createRequire22 } from "node:module";
17398
17537
  import { homedir as homedir52 } from "node:os";
17399
- import { dirname as dirname52, join as join92, resolve as resolve32 } from "node:path";
17538
+ import { dirname as dirname62, join as join142, resolve as resolve82 } from "node:path";
17400
17539
  import { homedir as homedir62, platform as platform22 } from "node:os";
17401
- import { basename as basename2, dirname as dirname62, resolve as resolve52 } from "node:path";
17540
+ import { basename as basename2, dirname as dirname72, resolve as resolve92 } from "node:path";
17402
17541
  import { homedir as homedir82 } from "node:os";
17403
- import { existsSync as existsSync14, lstatSync, mkdirSync as mkdirSync8, readdirSync as readdirSync6, symlinkSync, unlinkSync as unlinkSync2 } from "node:fs";
17404
- import { join as join14 } from "node:path";
17542
+ import { existsSync as existsSync18, lstatSync as lstatSync3, mkdirSync as mkdirSync10, readdirSync as readdirSync9, symlinkSync as symlinkSync2, unlinkSync as unlinkSync2 } from "node:fs";
17543
+ import { join as join18 } from "node:path";
17405
17544
  var __create2 = Object.create;
17406
17545
  var __getProtoOf2 = Object.getPrototypeOf;
17407
17546
  var __defProp2 = Object.defineProperty;
@@ -27967,7 +28106,7 @@ var DAEMON_DERIVED_MEMORY_SOURCE_TYPES2 = [
27967
28106
  "checkpoint",
27968
28107
  "dreaming"
27969
28108
  ];
27970
- function up160(db) {
28109
+ function up161(db) {
27971
28110
  const hasColumn26 = (table, column) => {
27972
28111
  const statement = db.prepare(`SELECT 1 FROM pragma_table_info('${table}') WHERE name = ?`);
27973
28112
  try {
@@ -28034,8 +28173,8 @@ function up210(db) {
28034
28173
  `);
28035
28174
  }
28036
28175
  function addColumnIfMissing30(db, column, definition) {
28037
- const columns = db.prepare("PRAGMA table_info(transcript_capture_jobs)").all();
28038
- if (columns.some((row) => row.name === column))
28176
+ const columns2 = db.prepare("PRAGMA table_info(transcript_capture_jobs)").all();
28177
+ if (columns2.some((row) => row.name === column))
28039
28178
  return;
28040
28179
  db.exec(`ALTER TABLE transcript_capture_jobs ADD COLUMN ${column} ${definition}`);
28041
28180
  }
@@ -28916,8 +29055,8 @@ function up252(db) {
28916
29055
  addColumnIfMissing82(db, "session_memories", "structural_density", "INTEGER");
28917
29056
  }
28918
29057
  function up262(db) {
28919
- const columns = db.prepare("PRAGMA table_info(session_checkpoints)").all();
28920
- const columnNames = new Set(columns.flatMap((column) => typeof column.name === "string" ? [column.name] : []));
29058
+ const columns2 = db.prepare("PRAGMA table_info(session_checkpoints)").all();
29059
+ const columnNames = new Set(columns2.flatMap((column) => typeof column.name === "string" ? [column.name] : []));
28921
29060
  if (!columnNames.has("focal_entity_ids")) {
28922
29061
  db.exec("ALTER TABLE session_checkpoints ADD COLUMN focal_entity_ids TEXT");
28923
29062
  }
@@ -31229,8 +31368,8 @@ function up972(db) {
31229
31368
  `);
31230
31369
  }
31231
31370
  function up982(db) {
31232
- const columns = db.prepare("PRAGMA table_info(dreaming_state)").all();
31233
- if (!columns.some((column) => column.name === "evidence_cursor")) {
31371
+ const columns2 = db.prepare("PRAGMA table_info(dreaming_state)").all();
31372
+ if (!columns2.some((column) => column.name === "evidence_cursor")) {
31234
31373
  db.exec("ALTER TABLE dreaming_state ADD COLUMN evidence_cursor TEXT");
31235
31374
  }
31236
31375
  }
@@ -31274,8 +31413,8 @@ function up1012(db) {
31274
31413
  db.exec("DROP TABLE IF EXISTS ingestion_jobs");
31275
31414
  }
31276
31415
  function up1022(db) {
31277
- const columns = db.prepare("PRAGMA table_info(dreaming_state)").all();
31278
- if (!columns.some((column) => column.name === "last_failure_at")) {
31416
+ const columns2 = db.prepare("PRAGMA table_info(dreaming_state)").all();
31417
+ if (!columns2.some((column) => column.name === "last_failure_at")) {
31279
31418
  db.exec("ALTER TABLE dreaming_state ADD COLUMN last_failure_at TEXT");
31280
31419
  }
31281
31420
  db.exec("UPDATE dreaming_state SET last_failure_at = updated_at WHERE consecutive_failures > 0 AND last_failure_at IS NULL");
@@ -31318,11 +31457,11 @@ function up1042(db) {
31318
31457
  `);
31319
31458
  }
31320
31459
  function up1052(db) {
31321
- const columns = db.prepare("PRAGMA table_info(dreaming_passes)").all();
31322
- if (!columns.some((column) => column.name === "evidence_window_json")) {
31460
+ const columns2 = db.prepare("PRAGMA table_info(dreaming_passes)").all();
31461
+ if (!columns2.some((column) => column.name === "evidence_window_json")) {
31323
31462
  db.exec("ALTER TABLE dreaming_passes ADD COLUMN evidence_window_json TEXT");
31324
31463
  }
31325
- if (!columns.some((column) => column.name === "runbook_json")) {
31464
+ if (!columns2.some((column) => column.name === "runbook_json")) {
31326
31465
  db.exec("ALTER TABLE dreaming_passes ADD COLUMN runbook_json TEXT");
31327
31466
  }
31328
31467
  }
@@ -31761,8 +31900,8 @@ function hasTable42(db, table) {
31761
31900
  return db.prepare("SELECT 1 AS present FROM sqlite_master WHERE type = 'table' AND name = ?").get(table) != null;
31762
31901
  }
31763
31902
  function addColumnIfMissing262(db, table, column, definition) {
31764
- const columns = db.prepare(`PRAGMA table_info(${table})`).all();
31765
- if (columns.some((row) => row.name === column))
31903
+ const columns2 = db.prepare(`PRAGMA table_info(${table})`).all();
31904
+ if (columns2.some((row) => row.name === column))
31766
31905
  return;
31767
31906
  db.exec(`ALTER TABLE ${table} ADD COLUMN ${column} ${definition}`);
31768
31907
  }
@@ -31774,8 +31913,8 @@ function hashTranscript2(content) {
31774
31913
  return createHash2("sha256").update(content, "utf8").digest("hex");
31775
31914
  }
31776
31915
  function backfillTranscriptHashes2(db) {
31777
- const columns = tableColumns2(db, "session_transcripts");
31778
- if (!columns.has("content_hash") || !columns.has("content"))
31916
+ const columns2 = tableColumns2(db, "session_transcripts");
31917
+ if (!columns2.has("content_hash") || !columns2.has("content"))
31779
31918
  return;
31780
31919
  const rows = db.prepare("SELECT session_key, agent_id, content FROM session_transcripts WHERE content_hash IS NULL").all();
31781
31920
  const update = db.prepare("UPDATE session_transcripts SET content_hash = ? WHERE agent_id = ? AND session_key = ? AND content_hash IS NULL");
@@ -31801,8 +31940,8 @@ function laterTimestamp2(current, candidate) {
31801
31940
  }
31802
31941
  return candidate > current ? candidate : current;
31803
31942
  }
31804
- function isCompletionBoundary2(job, columns) {
31805
- return columns.has("trigger") && job.trigger === "session_end" || columns.has("boundary_reason") && COMPLETION_BOUNDARY_REASONS2.has(job.boundary_reason ?? "");
31943
+ function isCompletionBoundary2(job, columns2) {
31944
+ return columns2.has("trigger") && job.trigger === "session_end" || columns2.has("boundary_reason") && COMPLETION_BOUNDARY_REASONS2.has(job.boundary_reason ?? "");
31806
31945
  }
31807
31946
  function mergeTranscriptContent2(current, next) {
31808
31947
  if (current.length === 0)
@@ -32050,8 +32189,8 @@ function up1262(db) {
32050
32189
  `);
32051
32190
  }
32052
32191
  function up1272(db) {
32053
- const columns = db.prepare("PRAGMA table_info(dreaming_evidence_exclusions)").all();
32054
- const names = new Set(columns.map((column) => column.name));
32192
+ const columns2 = db.prepare("PRAGMA table_info(dreaming_evidence_exclusions)").all();
32193
+ const names = new Set(columns2.map((column) => column.name));
32055
32194
  if (!names.has("failure_class")) {
32056
32195
  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'))");
32057
32196
  }
@@ -32463,8 +32602,8 @@ function up1382(db) {
32463
32602
  CREATE INDEX IF NOT EXISTS idx_memory_head_revision_entries_entry
32464
32603
  ON memory_head_revision_entries(agent_id, entry_id, revision DESC);
32465
32604
  `);
32466
- const columns = db.prepare("PRAGMA table_info(memory_md_heads)").all();
32467
- const names = new Set(columns.map((column) => String(column.name)));
32605
+ const columns2 = db.prepare("PRAGMA table_info(memory_md_heads)").all();
32606
+ const names = new Set(columns2.map((column) => String(column.name)));
32468
32607
  if (!names.has("revision_id"))
32469
32608
  db.exec("ALTER TABLE memory_md_heads ADD COLUMN revision_id TEXT");
32470
32609
  if (!names.has("pass_id"))
@@ -32890,13 +33029,13 @@ function up1462(db) {
32890
33029
  `);
32891
33030
  }
32892
33031
  function up1472(db) {
32893
- const columns = db.prepare("PRAGMA table_info(source_sync_checkpoints)").all();
32894
- if (!columns.some((column) => column.name === "frontier")) {
33032
+ const columns2 = db.prepare("PRAGMA table_info(source_sync_checkpoints)").all();
33033
+ if (!columns2.some((column) => column.name === "frontier")) {
32895
33034
  db.exec("ALTER TABLE source_sync_checkpoints ADD COLUMN frontier TEXT");
32896
33035
  }
32897
33036
  }
32898
33037
  function up1482(db) {
32899
- const columns = new Set(db.prepare("PRAGMA table_info(embedding_index_state)").all().map((row) => row.name).filter((name) => typeof name === "string"));
33038
+ const columns2 = new Set(db.prepare("PRAGMA table_info(embedding_index_state)").all().map((row) => row.name).filter((name) => typeof name === "string"));
32900
33039
  const additions = [
32901
33040
  ["migration_phase", "TEXT"],
32902
33041
  ["progress_staged", "INTEGER NOT NULL DEFAULT 0"],
@@ -32907,7 +33046,7 @@ function up1482(db) {
32907
33046
  ["provider_endpoint", "TEXT"]
32908
33047
  ];
32909
33048
  for (const [name, definition] of additions) {
32910
- if (!columns.has(name))
33049
+ if (!columns2.has(name))
32911
33050
  db.exec(`ALTER TABLE embedding_index_state ADD COLUMN ${name} ${definition}`);
32912
33051
  }
32913
33052
  db.exec(`
@@ -32931,8 +33070,8 @@ function up1482(db) {
32931
33070
  }
32932
33071
  }
32933
33072
  function up1492(db) {
32934
- const columns = new Set(db.prepare("PRAGMA table_info(memory_jobs)").all().map((row) => row.name).filter((name) => typeof name === "string"));
32935
- if (!columns.has("lease_token")) {
33073
+ const columns2 = new Set(db.prepare("PRAGMA table_info(memory_jobs)").all().map((row) => row.name).filter((name) => typeof name === "string"));
33074
+ if (!columns2.has("lease_token")) {
32936
33075
  db.exec("ALTER TABLE memory_jobs ADD COLUMN lease_token TEXT");
32937
33076
  }
32938
33077
  }
@@ -33025,8 +33164,8 @@ function up1522(db) {
33025
33164
  db.exec("CREATE INDEX IF NOT EXISTS idx_source_import_files_job_state ON source_import_files(job_id, state)");
33026
33165
  }
33027
33166
  function up1532(db) {
33028
- const columns = db.prepare("PRAGMA table_info(source_import_record_attempts)").all();
33029
- if (!columns.some((column) => column.name === "source_id")) {
33167
+ const columns2 = db.prepare("PRAGMA table_info(source_import_record_attempts)").all();
33168
+ if (!columns2.some((column) => column.name === "source_id")) {
33030
33169
  db.exec("ALTER TABLE source_import_record_attempts ADD COLUMN source_id TEXT");
33031
33170
  }
33032
33171
  }
@@ -33047,8 +33186,8 @@ function up1542(db) {
33047
33186
  addColumn("source_import_files", "error", "TEXT");
33048
33187
  }
33049
33188
  function addColumnIfMissing292(db, table, column, definition) {
33050
- const columns = db.prepare(`PRAGMA table_info(${table})`).all();
33051
- if (!columns.some((row) => row.name === column))
33189
+ const columns2 = db.prepare(`PRAGMA table_info(${table})`).all();
33190
+ if (!columns2.some((row) => row.name === column))
33052
33191
  db.exec(`ALTER TABLE ${table} ADD COLUMN ${column} ${definition}`);
33053
33192
  }
33054
33193
  function up1552(db) {
@@ -33248,8 +33387,8 @@ function up1572(db) {
33248
33387
  `);
33249
33388
  }
33250
33389
  function up1582(db) {
33251
- const columns = new Set(db.prepare("PRAGMA table_info(embedding_repair_checkpoints)").all().map((row) => row.name));
33252
- if (!columns.has("profile_fingerprint")) {
33390
+ const columns2 = new Set(db.prepare("PRAGMA table_info(embedding_repair_checkpoints)").all().map((row) => row.name));
33391
+ if (!columns2.has("profile_fingerprint")) {
33253
33392
  db.exec("ALTER TABLE embedding_repair_checkpoints ADD COLUMN profile_fingerprint TEXT");
33254
33393
  }
33255
33394
  db.exec(`
@@ -33268,6 +33407,102 @@ function up1592(db) {
33268
33407
  ON memories(agent_id, memory_kind);
33269
33408
  `);
33270
33409
  }
33410
+ var ledgerColumns2 = [
33411
+ "key",
33412
+ "agent_id",
33413
+ "workspace_id",
33414
+ "file_name",
33415
+ "status",
33416
+ "original_path",
33417
+ "sha256",
33418
+ "size_bytes",
33419
+ "request_fingerprint",
33420
+ "source_id",
33421
+ "lease_token",
33422
+ "lease_expires_at",
33423
+ "attempt_count",
33424
+ "error",
33425
+ "created_at",
33426
+ "updated_at"
33427
+ ];
33428
+ function columns2(db, table) {
33429
+ return new Set(db.prepare(`PRAGMA table_info(${table})`).all().map((row) => String(row.name)));
33430
+ }
33431
+ function addMissingColumns2(db, table, definitions) {
33432
+ const present = columns2(db, table);
33433
+ for (const definition of definitions) {
33434
+ const name = definition.split(" ", 1)[0];
33435
+ if (!present.has(name))
33436
+ db.exec(`ALTER TABLE ${table} ADD COLUMN ${definition}`);
33437
+ }
33438
+ }
33439
+ function rebuildLedgerWithoutGlobalKeyPrimaryKey2(db) {
33440
+ const keyInfo = db.prepare("PRAGMA table_info(import_admission_ledger)").all().find((row) => row.name === "key");
33441
+ if (!keyInfo || Number(keyInfo.pk) === 0)
33442
+ return;
33443
+ const savepoint = "migration_158_rebuild_ledger";
33444
+ db.exec(`SAVEPOINT ${savepoint}`);
33445
+ try {
33446
+ db.exec(`
33447
+ CREATE TABLE import_admission_ledger_v158 (
33448
+ key TEXT NOT NULL, agent_id TEXT NOT NULL DEFAULT '', workspace_id TEXT NOT NULL DEFAULT '',
33449
+ file_name TEXT NOT NULL, status TEXT NOT NULL CHECK (status IN ('pending','processing','imported','duplicate','failed','quarantined','original_unavailable')),
33450
+ original_path TEXT NOT NULL, sha256 TEXT NOT NULL, size_bytes INTEGER NOT NULL,
33451
+ request_fingerprint TEXT NOT NULL DEFAULT '', source_id TEXT, lease_token TEXT, lease_expires_at TEXT,
33452
+ attempt_count INTEGER NOT NULL DEFAULT 0, error TEXT, created_at TEXT NOT NULL, updated_at TEXT NOT NULL
33453
+ );
33454
+ INSERT INTO import_admission_ledger_v158 (${ledgerColumns2.join(",")})
33455
+ SELECT ${ledgerColumns2.join(",")} FROM import_admission_ledger;
33456
+ DROP TABLE import_admission_ledger;
33457
+ ALTER TABLE import_admission_ledger_v158 RENAME TO import_admission_ledger;
33458
+ `);
33459
+ db.exec(`RELEASE ${savepoint}`);
33460
+ } catch (error) {
33461
+ try {
33462
+ db.exec(`ROLLBACK TO SAVEPOINT ${savepoint}`);
33463
+ } finally {
33464
+ try {
33465
+ db.exec(`RELEASE ${savepoint}`);
33466
+ } catch {}
33467
+ }
33468
+ throw error;
33469
+ }
33470
+ }
33471
+ function up1602(db) {
33472
+ db.exec(`
33473
+ CREATE TABLE IF NOT EXISTS import_admission_ledger (
33474
+ key TEXT NOT NULL, agent_id TEXT NOT NULL, workspace_id TEXT NOT NULL DEFAULT '', file_name TEXT NOT NULL,
33475
+ status TEXT NOT NULL CHECK (status IN ('pending','processing','imported','duplicate','failed','quarantined','original_unavailable')),
33476
+ original_path TEXT NOT NULL, sha256 TEXT NOT NULL, size_bytes INTEGER NOT NULL,
33477
+ request_fingerprint TEXT NOT NULL DEFAULT '', source_id TEXT, lease_token TEXT, lease_expires_at TEXT,
33478
+ attempt_count INTEGER NOT NULL DEFAULT 0, error TEXT, created_at TEXT NOT NULL, updated_at TEXT NOT NULL
33479
+ );
33480
+ CREATE TABLE IF NOT EXISTS import_admission_events (
33481
+ id INTEGER PRIMARY KEY AUTOINCREMENT, admission_key TEXT NOT NULL, agent_id TEXT NOT NULL DEFAULT '',
33482
+ workspace_id TEXT NOT NULL DEFAULT '', event TEXT NOT NULL, created_at TEXT NOT NULL
33483
+ );
33484
+ `);
33485
+ addMissingColumns2(db, "import_admission_ledger", [
33486
+ "agent_id TEXT NOT NULL DEFAULT ''",
33487
+ "workspace_id TEXT NOT NULL DEFAULT ''",
33488
+ "request_fingerprint TEXT NOT NULL DEFAULT ''",
33489
+ "source_id TEXT",
33490
+ "lease_token TEXT",
33491
+ "lease_expires_at TEXT",
33492
+ "attempt_count INTEGER NOT NULL DEFAULT 0",
33493
+ "error TEXT"
33494
+ ]);
33495
+ addMissingColumns2(db, "import_admission_events", [
33496
+ "agent_id TEXT NOT NULL DEFAULT ''",
33497
+ "workspace_id TEXT NOT NULL DEFAULT ''"
33498
+ ]);
33499
+ rebuildLedgerWithoutGlobalKeyPrimaryKey2(db);
33500
+ db.exec(`
33501
+ CREATE UNIQUE INDEX IF NOT EXISTS uq_import_admission_scope_key ON import_admission_ledger(key, agent_id, workspace_id);
33502
+ CREATE INDEX IF NOT EXISTS idx_import_admission_status ON import_admission_ledger(agent_id, workspace_id, status, updated_at);
33503
+ CREATE INDEX IF NOT EXISTS idx_import_admission_events_key ON import_admission_events(admission_key, agent_id, workspace_id, id);
33504
+ `);
33505
+ }
33271
33506
  var MIGRATIONS2 = [
33272
33507
  {
33273
33508
  version: 1,
@@ -34472,7 +34707,7 @@ var MIGRATIONS2 = [
34472
34707
  {
34473
34708
  version: 151,
34474
34709
  name: "transcript-import-bytes",
34475
- up: up160,
34710
+ up: up161,
34476
34711
  artifacts: {
34477
34712
  tables: [
34478
34713
  "source_import_chunks",
@@ -34556,6 +34791,18 @@ var MIGRATIONS2 = [
34556
34791
  version: 159,
34557
34792
  name: "retire-obsolete-invocation-ledger",
34558
34793
  up: up510
34794
+ },
34795
+ {
34796
+ version: 160,
34797
+ name: "import-admission-ledger",
34798
+ up: up1602,
34799
+ artifacts: {
34800
+ tables: ["import_admission_ledger", "import_admission_events"],
34801
+ indexes: ["idx_import_admission_status", "idx_import_admission_events_key"],
34802
+ columns: [
34803
+ ...["workspace_id", "request_fingerprint", "source_id", "lease_token", "lease_expires_at", "attempt_count"].map((column) => ({ table: "import_admission_ledger", column }))
34804
+ ]
34805
+ }
34559
34806
  }
34560
34807
  ];
34561
34808
  var LATEST_SCHEMA_VERSION2 = MIGRATIONS2[MIGRATIONS2.length - 1]?.version ?? 0;
@@ -34563,30 +34810,17 @@ var NETWORK_FILESYSTEM_TYPES2 = new Set(["afpfs", "nfs", "smbfs", "webdav"]);
34563
34810
  var __filename22 = fileURLToPath2(import.meta.url);
34564
34811
  var __dirname22 = dirname3(__filename22);
34565
34812
  var import_yaml3 = __toESM2(require_dist2(), 1);
34566
- var STATES2 = new Set([
34567
- "found",
34568
- "missing",
34569
- "locked",
34570
- "unavailable",
34571
- "permission-denied",
34572
- "corrupt",
34573
- "unsupported"
34574
- ]);
34575
- var mutation2 = Promise.resolve();
34576
- var LOOPBACK_HOST2 = "127.0.0.1";
34577
- var LOCAL_BINDS2 = new Set([LOOPBACK_HOST2, "localhost", "::1", "::ffff:127.0.0.1"]);
34578
- var import_yaml22 = __toESM2(require_dist2(), 1);
34579
- var native2 = null;
34580
- try {
34581
- const esmRequire = createRequire22(import.meta.url);
34582
- native2 = esmRequire("@signet/native");
34583
- } catch {}
34584
- var GRAPHIQ_DEFAULT_INSTALL_DIR2 = join92(homedir52(), ".local", "bin");
34585
34813
  var SIGNET_SOURCE_CHECKOUT_DIRNAME2 = "signetai";
34586
34814
  var SIGNET_GIT_ALLOWED_DIRECTORIES2 = ["skills", "tools", "dreaming"];
34587
34815
  var SIGNET_GIT_PROTECTED_PATHS2 = [
34588
34816
  ".daemon",
34817
+ ".secrets",
34589
34818
  ".shadow",
34819
+ "cache",
34820
+ "data",
34821
+ "files",
34822
+ "runtime",
34823
+ "workspace-layout.json",
34590
34824
  "node_modules",
34591
34825
  ":(glob)**/node_modules/**",
34592
34826
  `${SIGNET_SOURCE_CHECKOUT_DIRNAME2}`,
@@ -34625,7 +34859,13 @@ var SIGNET_GIT_TRACKED_PATHS2 = [
34625
34859
  ];
34626
34860
  var SIGNET_GITIGNORE_PROTECTED_PATTERNS2 = [
34627
34861
  ".daemon/",
34862
+ ".secrets/",
34628
34863
  ".shadow/",
34864
+ "cache/",
34865
+ "data/",
34866
+ "files/",
34867
+ "runtime/",
34868
+ "workspace-layout.json",
34629
34869
  "node_modules/",
34630
34870
  `${SIGNET_SOURCE_CHECKOUT_DIRNAME2}/`,
34631
34871
  "memory/memories.db*",
@@ -34645,17 +34885,53 @@ var SIGNET_GITIGNORE_PROTECTED_PATTERNS2 = [
34645
34885
  "*.sqlite",
34646
34886
  "*.sqlite3"
34647
34887
  ];
34888
+ var DESCRIPTOR_ROOT2 = process.platform === "linux" ? "/proc/self/fd" : process.platform === "darwin" ? "/dev/fd" : undefined;
34889
+ var DIRECTORY_FLAGS2 = fsConstants2.O_RDONLY | (fsConstants2.O_DIRECTORY ?? 0) | (fsConstants2.O_NOFOLLOW ?? 0);
34890
+ var FILE_FLAGS2 = fsConstants2.O_RDONLY | (fsConstants2.O_NOFOLLOW ?? 0) | (fsConstants2.O_NONBLOCK ?? 0);
34891
+ var NOFOLLOW2 = fsConstants2.O_NOFOLLOW ?? 0;
34892
+ var PROTECTION_COMPONENT_IDS2 = [
34893
+ "root-authored",
34894
+ "skills",
34895
+ "managed-originals",
34896
+ "sqlite",
34897
+ "transcripts",
34898
+ "external-sources",
34899
+ "runtime",
34900
+ "filesystem-cache",
34901
+ "secrets"
34902
+ ];
34903
+ var ORDER2 = new Map(PROTECTION_COMPONENT_IDS2.map((id, index) => [id, index]));
34904
+ var BLOCKING2 = new Set(["missing", "stale", "degraded"]);
34905
+ var STATES2 = new Set([
34906
+ "found",
34907
+ "missing",
34908
+ "locked",
34909
+ "unavailable",
34910
+ "permission-denied",
34911
+ "corrupt",
34912
+ "unsupported"
34913
+ ]);
34914
+ var mutation2 = Promise.resolve();
34915
+ var LOOPBACK_HOST2 = "127.0.0.1";
34916
+ var LOCAL_BINDS2 = new Set([LOOPBACK_HOST2, "localhost", "::1", "::ffff:127.0.0.1"]);
34917
+ var import_yaml22 = __toESM2(require_dist2(), 1);
34918
+ var native2 = null;
34919
+ try {
34920
+ const esmRequire = createRequire22(import.meta.url);
34921
+ native2 = esmRequire("@signet/native");
34922
+ } catch {}
34923
+ var GRAPHIQ_DEFAULT_INSTALL_DIR2 = join142(homedir52(), ".local", "bin");
34648
34924
  var DEFAULT_DISCORD_DESKTOP_CACHE_PATH2 = defaultDiscordDesktopCachePath2();
34649
34925
  var DEFAULT_GITHUB_RESOURCE_TYPES2 = ["issues", "pulls", "discussions", "docs"];
34650
34926
  var VALID_GITHUB_RESOURCE_TYPES2 = new Set(DEFAULT_GITHUB_RESOURCE_TYPES2);
34651
34927
  function defaultDiscordDesktopCachePath2() {
34652
34928
  switch (platform22()) {
34653
34929
  case "darwin":
34654
- return resolve52(homedir62(), "Library", "Application Support", "discord");
34930
+ return resolve92(homedir62(), "Library", "Application Support", "discord");
34655
34931
  case "win32":
34656
- return resolve52(process.env.APPDATA || resolve52(homedir62(), "AppData", "Roaming"), "discord");
34932
+ return resolve92(process.env.APPDATA || resolve92(homedir62(), "AppData", "Roaming"), "discord");
34657
34933
  default:
34658
- return resolve52(process.env.XDG_CONFIG_HOME || resolve52(homedir62(), ".config"), "discord");
34934
+ return resolve92(process.env.XDG_CONFIG_HOME || resolve92(homedir62(), ".config"), "discord");
34659
34935
  }
34660
34936
  }
34661
34937
  var IDENTITY_FILES2 = {
@@ -34715,7 +34991,7 @@ var REQUIRED_IDENTITY_KEYS2 = Object.entries(IDENTITY_FILES2).filter(([, spec])
34715
34991
  var OPTIONAL_IDENTITY_KEYS2 = Object.entries(IDENTITY_FILES2).filter(([, spec]) => spec.optional).map(([key]) => key);
34716
34992
  function linkDirSync(target, path) {
34717
34993
  const type = process.platform === "win32" ? "junction" : "dir";
34718
- symlinkSync(target, path, type);
34994
+ symlinkSync2(target, path, type);
34719
34995
  }
34720
34996
  function symlinkSkills(sourceDir, targetDir, options = {}) {
34721
34997
  const result = {
@@ -34723,19 +34999,19 @@ function symlinkSkills(sourceDir, targetDir, options = {}) {
34723
34999
  skipped: [],
34724
35000
  errors: []
34725
35001
  };
34726
- if (!existsSync14(sourceDir)) {
35002
+ if (!existsSync18(sourceDir)) {
34727
35003
  return result;
34728
35004
  }
34729
- const targetParent = join14(targetDir, "..");
34730
- if (!existsSync14(targetParent)) {
34731
- mkdirSync8(targetParent, { recursive: true });
35005
+ const targetParent = join18(targetDir, "..");
35006
+ if (!existsSync18(targetParent)) {
35007
+ mkdirSync10(targetParent, { recursive: true });
34732
35008
  }
34733
- if (!existsSync14(targetDir)) {
34734
- mkdirSync8(targetDir, { recursive: true });
35009
+ if (!existsSync18(targetDir)) {
35010
+ mkdirSync10(targetDir, { recursive: true });
34735
35011
  }
34736
35012
  let entries;
34737
35013
  try {
34738
- entries = readdirSync6(sourceDir);
35014
+ entries = readdirSync9(sourceDir);
34739
35015
  } catch (e) {
34740
35016
  result.errors.push({
34741
35017
  path: sourceDir,
@@ -34744,10 +35020,10 @@ function symlinkSkills(sourceDir, targetDir, options = {}) {
34744
35020
  return result;
34745
35021
  }
34746
35022
  for (const entry of entries) {
34747
- const srcPath = join14(sourceDir, entry);
34748
- const destPath = join14(targetDir, entry);
35023
+ const srcPath = join18(sourceDir, entry);
35024
+ const destPath = join18(targetDir, entry);
34749
35025
  try {
34750
- const src = lstatSync(srcPath);
35026
+ const src = lstatSync3(srcPath);
34751
35027
  if (src.isSymbolicLink() || !src.isDirectory()) {
34752
35028
  result.skipped.push(srcPath);
34753
35029
  continue;
@@ -34760,7 +35036,7 @@ function symlinkSkills(sourceDir, targetDir, options = {}) {
34760
35036
  continue;
34761
35037
  }
34762
35038
  try {
34763
- const destStat = lstatSync(destPath);
35039
+ const destStat = lstatSync3(destPath);
34764
35040
  if (destStat.isSymbolicLink()) {
34765
35041
  if (!options.dryRun) {
34766
35042
  unlinkSync2(destPath);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@signetai/connector-claude-code",
3
- "version": "0.227.1",
3
+ "version": "0.228.0",
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.227.1",
28
- "@signetai/core": "0.227.1"
27
+ "@signetai/connector-base": "0.228.0",
28
+ "@signetai/core": "0.228.0"
29
29
  },
30
30
  "devDependencies": {
31
31
  "@types/node": "^22.0.0",