@axiom-lattice/protocols 4.7.0 → 4.7.1

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.
@@ -1,5 +1,5 @@
1
1
 
2
- > @axiom-lattice/protocols@4.7.0 build /home/runner/work/agentic/agentic/packages/protocols
2
+ > @axiom-lattice/protocols@4.7.1 build /home/runner/work/agentic/agentic/packages/protocols
3
3
  > tsup src/index.ts --format cjs,esm --dts --sourcemap
4
4
 
5
5
  CLI Building entry: src/index.ts
@@ -8,13 +8,13 @@
8
8
  CLI Target: es2020
9
9
  CJS Build start
10
10
  ESM Build start
11
- ESM dist/index.mjs 42.99 KB
12
- ESM dist/index.mjs.map 189.15 KB
13
- ESM ⚡️ Build success in 817ms
14
11
  CJS dist/index.js 48.09 KB
15
12
  CJS dist/index.js.map 193.07 KB
16
- CJS ⚡️ Build success in 819ms
13
+ CJS ⚡️ Build success in 508ms
14
+ ESM dist/index.mjs 42.99 KB
15
+ ESM dist/index.mjs.map 189.15 KB
16
+ ESM ⚡️ Build success in 504ms
17
17
  DTS Build start
18
- DTS ⚡️ Build success in 15444ms
19
- DTS dist/index.d.ts 249.89 KB
20
- DTS dist/index.d.mts 249.89 KB
18
+ DTS ⚡️ Build success in 14202ms
19
+ DTS dist/index.d.ts 251.25 KB
20
+ DTS dist/index.d.mts 251.25 KB
package/CHANGELOG.md CHANGED
@@ -1,5 +1,18 @@
1
1
  # @axiom-lattice/protocols
2
2
 
3
+ ## 4.7.1
4
+
5
+ ### Patch Changes
6
+
7
+ - bb2614f: Chating composer height, plugin connection-secret encryption, and manage_task compact cards.
8
+
9
+ - react-sdk: keep the Chating composer input from collapsing after a run. In slot mode (Chating always passes an array `slotConfig`) the Sender input is a `contentEditable` whose height comes from `autoSize`; without a `minRows` the empty editor lost its placeholder-driven line box once streaming ended and collapsed to zero height on some platforms (e.g. Windows Chrome), leaving the input unreachable while the footer stayed visible. Pass `autoSize={{ minRows: 1, maxRows: 8 }}` like `ProjectRoomComposer`.
10
+ - protocols/core: add `ConnectionEntry.secretFields`, plus `connectionSecretFields` / `encryptConfigFields` / `decryptConfigFields`.
11
+ - local-stores/pg-stores: encrypt the declared secret fields on save and decrypt on read, so the API and runtime consumers always receive real values. Existing plaintext rows read unchanged and convert on their next save (PG migration v188).
12
+ - gateway: plugin builder self-test discovery + secret redaction.
13
+ - core: `manage_task` `add_activity` now returns the target task alongside the activity (`{ success, data, task }`), so UIs can show which task an activity was written to.
14
+ - react-sdk: every `manage_task` action renders a compact chip in the chat stream and reveals its full card on hover. Fixes `get` and `add_activity`, which previously rendered no UI at all.
15
+
3
16
  ## 4.7.0
4
17
 
5
18
  ### Minor Changes
package/dist/index.d.mts CHANGED
@@ -2409,14 +2409,50 @@ interface ConnectionEntry {
2409
2409
  name: string;
2410
2410
  description?: string;
2411
2411
  config: Record<string, unknown>;
2412
+ /**
2413
+ * Names of config fields that hold secrets (API keys, passwords, tokens).
2414
+ *
2415
+ * Stores persist this list alongside the entry and use it to encrypt those
2416
+ * config values at rest on write and transparently decrypt them on read.
2417
+ * `config` in a returned entry is always the decrypted, real value — callers
2418
+ * (gateway API, runtime plugin resolution) never see ciphertext.
2419
+ *
2420
+ * Absent/empty means the entry has no encrypted fields (e.g. legacy rows or
2421
+ * connection types whose schema defines no password fields).
2422
+ */
2423
+ secretFields?: string[];
2412
2424
  createdAt: string;
2413
2425
  updatedAt: string;
2414
2426
  }
2415
2427
  interface ConnectionStore {
2416
2428
  listByTenant(tenantId: string): Promise<ConnectionEntry[]>;
2429
+ /**
2430
+ * List a tenant's connections of one plugin type.
2431
+ *
2432
+ * `config` in the returned entries is decrypted — implementations decrypt the
2433
+ * fields named by each entry's `secretFields` before returning.
2434
+ */
2417
2435
  listByType(tenantId: string, type: string): Promise<ConnectionEntry[]>;
2436
+ /**
2437
+ * Read one connection by key.
2438
+ *
2439
+ * `config` in the returned entry is decrypted (see `listByType`).
2440
+ */
2418
2441
  getByKey(tenantId: string, type: string, key: string): Promise<ConnectionEntry | null>;
2442
+ /**
2443
+ * Create a connection.
2444
+ *
2445
+ * Implementations encrypt the `secretFields` of `config` at rest; the
2446
+ * returned entry carries the plaintext `config` the caller supplied.
2447
+ */
2419
2448
  create(entry: Omit<ConnectionEntry, "id" | "createdAt" | "updatedAt">): Promise<ConnectionEntry>;
2449
+ /**
2450
+ * Update a connection.
2451
+ *
2452
+ * When `updates.config` is present, the effective secret fields are
2453
+ * `updates.secretFields ?? existing.secretFields`; those fields are
2454
+ * re-encrypted before persistence.
2455
+ */
2420
2456
  update(tenantId: string, type: string, key: string, updates: Partial<ConnectionEntry>): Promise<ConnectionEntry | null>;
2421
2457
  delete(tenantId: string, type: string, key: string): Promise<boolean>;
2422
2458
  }
package/dist/index.d.ts CHANGED
@@ -2409,14 +2409,50 @@ interface ConnectionEntry {
2409
2409
  name: string;
2410
2410
  description?: string;
2411
2411
  config: Record<string, unknown>;
2412
+ /**
2413
+ * Names of config fields that hold secrets (API keys, passwords, tokens).
2414
+ *
2415
+ * Stores persist this list alongside the entry and use it to encrypt those
2416
+ * config values at rest on write and transparently decrypt them on read.
2417
+ * `config` in a returned entry is always the decrypted, real value — callers
2418
+ * (gateway API, runtime plugin resolution) never see ciphertext.
2419
+ *
2420
+ * Absent/empty means the entry has no encrypted fields (e.g. legacy rows or
2421
+ * connection types whose schema defines no password fields).
2422
+ */
2423
+ secretFields?: string[];
2412
2424
  createdAt: string;
2413
2425
  updatedAt: string;
2414
2426
  }
2415
2427
  interface ConnectionStore {
2416
2428
  listByTenant(tenantId: string): Promise<ConnectionEntry[]>;
2429
+ /**
2430
+ * List a tenant's connections of one plugin type.
2431
+ *
2432
+ * `config` in the returned entries is decrypted — implementations decrypt the
2433
+ * fields named by each entry's `secretFields` before returning.
2434
+ */
2417
2435
  listByType(tenantId: string, type: string): Promise<ConnectionEntry[]>;
2436
+ /**
2437
+ * Read one connection by key.
2438
+ *
2439
+ * `config` in the returned entry is decrypted (see `listByType`).
2440
+ */
2418
2441
  getByKey(tenantId: string, type: string, key: string): Promise<ConnectionEntry | null>;
2442
+ /**
2443
+ * Create a connection.
2444
+ *
2445
+ * Implementations encrypt the `secretFields` of `config` at rest; the
2446
+ * returned entry carries the plaintext `config` the caller supplied.
2447
+ */
2419
2448
  create(entry: Omit<ConnectionEntry, "id" | "createdAt" | "updatedAt">): Promise<ConnectionEntry>;
2449
+ /**
2450
+ * Update a connection.
2451
+ *
2452
+ * When `updates.config` is present, the effective secret fields are
2453
+ * `updates.secretFields ?? existing.secretFields`; those fields are
2454
+ * re-encrypted before persistence.
2455
+ */
2420
2456
  update(tenantId: string, type: string, key: string, updates: Partial<ConnectionEntry>): Promise<ConnectionEntry | null>;
2421
2457
  delete(tenantId: string, type: string, key: string): Promise<boolean>;
2422
2458
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@axiom-lattice/protocols",
3
- "version": "4.7.0",
3
+ "version": "4.7.1",
4
4
  "description": "Unified protocol type definitions for Axiom Lattice framework",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.mjs",
@@ -15,15 +15,51 @@ export interface ConnectionEntry {
15
15
  name: string;
16
16
  description?: string;
17
17
  config: Record<string, unknown>;
18
+ /**
19
+ * Names of config fields that hold secrets (API keys, passwords, tokens).
20
+ *
21
+ * Stores persist this list alongside the entry and use it to encrypt those
22
+ * config values at rest on write and transparently decrypt them on read.
23
+ * `config` in a returned entry is always the decrypted, real value — callers
24
+ * (gateway API, runtime plugin resolution) never see ciphertext.
25
+ *
26
+ * Absent/empty means the entry has no encrypted fields (e.g. legacy rows or
27
+ * connection types whose schema defines no password fields).
28
+ */
29
+ secretFields?: string[];
18
30
  createdAt: string;
19
31
  updatedAt: string;
20
32
  }
21
33
 
22
34
  export interface ConnectionStore {
23
35
  listByTenant(tenantId: string): Promise<ConnectionEntry[]>;
36
+ /**
37
+ * List a tenant's connections of one plugin type.
38
+ *
39
+ * `config` in the returned entries is decrypted — implementations decrypt the
40
+ * fields named by each entry's `secretFields` before returning.
41
+ */
24
42
  listByType(tenantId: string, type: string): Promise<ConnectionEntry[]>;
43
+ /**
44
+ * Read one connection by key.
45
+ *
46
+ * `config` in the returned entry is decrypted (see `listByType`).
47
+ */
25
48
  getByKey(tenantId: string, type: string, key: string): Promise<ConnectionEntry | null>;
49
+ /**
50
+ * Create a connection.
51
+ *
52
+ * Implementations encrypt the `secretFields` of `config` at rest; the
53
+ * returned entry carries the plaintext `config` the caller supplied.
54
+ */
26
55
  create(entry: Omit<ConnectionEntry, "id" | "createdAt" | "updatedAt">): Promise<ConnectionEntry>;
56
+ /**
57
+ * Update a connection.
58
+ *
59
+ * When `updates.config` is present, the effective secret fields are
60
+ * `updates.secretFields ?? existing.secretFields`; those fields are
61
+ * re-encrypted before persistence.
62
+ */
27
63
  update(tenantId: string, type: string, key: string, updates: Partial<ConnectionEntry>): Promise<ConnectionEntry | null>;
28
64
  delete(tenantId: string, type: string, key: string): Promise<boolean>;
29
65
  }