memorysync-sdk 1.9.0 → 1.9.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.
package/dist/index.d.mts CHANGED
@@ -1317,13 +1317,33 @@ declare class MemorySyncClient {
1317
1317
  }): Promise<Record<string, unknown>>;
1318
1318
  /** Counts and coverage for the knowledge base. */
1319
1319
  knowledgeStats(): Promise<Record<string, unknown>>;
1320
- /** Add a conversation turn and extract memories from it. */
1320
+ /**
1321
+ * Store one conversational turn VERBATIM (episodic ingestion).
1322
+ *
1323
+ * The sibling of the extraction-gated fact store: nothing is rewritten,
1324
+ * deduped by meaning, or judged for value — the text is stored exactly as
1325
+ * supplied and embedded so it is retrievable. Empty text is the only
1326
+ * refusal. `speaker` and `occurredAt` join the server's idempotency seed,
1327
+ * so resending an identical payload is recognised (`already_exists: true`)
1328
+ * rather than stored twice. `syncEmbed: true` embeds inline so the row is
1329
+ * immediately queryable. `sessionId` is recorded into `metadata` under
1330
+ * `"session_id"`.
1331
+ *
1332
+ * A `messages` array is not accepted: this endpoint stores exactly one
1333
+ * turn. Earlier releases sent `messages`, which the server has not
1334
+ * accepted since the episodic rewrite — every such call failed with a
1335
+ * 422, so the mistake is now caught client-side with a real explanation.
1336
+ */
1321
1337
  addTurn(req: {
1322
1338
  tenantId: string;
1323
1339
  userId: string;
1324
- messages: Array<Record<string, unknown>>;
1325
- sessionId?: string;
1340
+ text: string;
1341
+ speaker?: string;
1342
+ occurredAt?: string;
1326
1343
  metadata?: Record<string, unknown>;
1344
+ source?: string;
1345
+ syncEmbed?: boolean;
1346
+ sessionId?: string;
1327
1347
  }): Promise<Record<string, unknown>>;
1328
1348
  /**
1329
1349
  * Build a prompt-ready context block for an LLM call.
package/dist/index.d.ts CHANGED
@@ -1317,13 +1317,33 @@ declare class MemorySyncClient {
1317
1317
  }): Promise<Record<string, unknown>>;
1318
1318
  /** Counts and coverage for the knowledge base. */
1319
1319
  knowledgeStats(): Promise<Record<string, unknown>>;
1320
- /** Add a conversation turn and extract memories from it. */
1320
+ /**
1321
+ * Store one conversational turn VERBATIM (episodic ingestion).
1322
+ *
1323
+ * The sibling of the extraction-gated fact store: nothing is rewritten,
1324
+ * deduped by meaning, or judged for value — the text is stored exactly as
1325
+ * supplied and embedded so it is retrievable. Empty text is the only
1326
+ * refusal. `speaker` and `occurredAt` join the server's idempotency seed,
1327
+ * so resending an identical payload is recognised (`already_exists: true`)
1328
+ * rather than stored twice. `syncEmbed: true` embeds inline so the row is
1329
+ * immediately queryable. `sessionId` is recorded into `metadata` under
1330
+ * `"session_id"`.
1331
+ *
1332
+ * A `messages` array is not accepted: this endpoint stores exactly one
1333
+ * turn. Earlier releases sent `messages`, which the server has not
1334
+ * accepted since the episodic rewrite — every such call failed with a
1335
+ * 422, so the mistake is now caught client-side with a real explanation.
1336
+ */
1321
1337
  addTurn(req: {
1322
1338
  tenantId: string;
1323
1339
  userId: string;
1324
- messages: Array<Record<string, unknown>>;
1325
- sessionId?: string;
1340
+ text: string;
1341
+ speaker?: string;
1342
+ occurredAt?: string;
1326
1343
  metadata?: Record<string, unknown>;
1344
+ source?: string;
1345
+ syncEmbed?: boolean;
1346
+ sessionId?: string;
1327
1347
  }): Promise<Record<string, unknown>>;
1328
1348
  /**
1329
1349
  * Build a prompt-ready context block for an LLM call.
package/dist/index.js CHANGED
@@ -576,7 +576,7 @@ var IntegrationsNamespace = class extends Namespace {
576
576
  };
577
577
 
578
578
  // src/control-plane.ts
579
- var SDK_VERSION = "1.9.0";
579
+ var SDK_VERSION = "1.9.1";
580
580
  function safeJson(text) {
581
581
  try {
582
582
  return JSON.parse(text);
@@ -1148,7 +1148,7 @@ function asSkipped(raw, defaultReason) {
1148
1148
  }
1149
1149
  return null;
1150
1150
  }
1151
- var SDK_VERSION2 = "1.9.0";
1151
+ var SDK_VERSION2 = "1.9.1";
1152
1152
  function camelToSnakeKey(key) {
1153
1153
  return key.replace(/([A-Z])/g, "_$1").toLowerCase();
1154
1154
  }
@@ -1866,15 +1866,46 @@ var MemorySyncClient = class {
1866
1866
  return await this.request("GET", "/memory/knowledge/stats") ?? {};
1867
1867
  }
1868
1868
  // ── v1 data plane ──────────────────────────────────────────────────
1869
- /** Add a conversation turn and extract memories from it. */
1869
+ /**
1870
+ * Store one conversational turn VERBATIM (episodic ingestion).
1871
+ *
1872
+ * The sibling of the extraction-gated fact store: nothing is rewritten,
1873
+ * deduped by meaning, or judged for value — the text is stored exactly as
1874
+ * supplied and embedded so it is retrievable. Empty text is the only
1875
+ * refusal. `speaker` and `occurredAt` join the server's idempotency seed,
1876
+ * so resending an identical payload is recognised (`already_exists: true`)
1877
+ * rather than stored twice. `syncEmbed: true` embeds inline so the row is
1878
+ * immediately queryable. `sessionId` is recorded into `metadata` under
1879
+ * `"session_id"`.
1880
+ *
1881
+ * A `messages` array is not accepted: this endpoint stores exactly one
1882
+ * turn. Earlier releases sent `messages`, which the server has not
1883
+ * accepted since the episodic rewrite — every such call failed with a
1884
+ * 422, so the mistake is now caught client-side with a real explanation.
1885
+ */
1870
1886
  async addTurn(req) {
1887
+ if (req.messages !== void 0) {
1888
+ throw new ValidationError(
1889
+ "addTurn() stores exactly one verbatim turn and takes text, not messages. Format the turn as a string (e.g. 'user: I always fly with the window seat.') and pass it as text, with the author in speaker."
1890
+ );
1891
+ }
1892
+ if (!req.text?.trim()) {
1893
+ throw new ValidationError("addTurn() requires non-empty text");
1894
+ }
1895
+ let metadata = req.metadata;
1896
+ if (req.sessionId !== void 0) {
1897
+ metadata = { ...req.metadata ?? {}, session_id: req.sessionId };
1898
+ }
1871
1899
  const body = {
1872
1900
  tenant_id: req.tenantId,
1873
1901
  user_id: req.userId,
1874
- messages: req.messages
1902
+ source: req.source ?? "chat",
1903
+ text: req.text
1875
1904
  };
1876
- if (req.sessionId !== void 0) body.session_id = req.sessionId;
1877
- if (req.metadata !== void 0) body.metadata = req.metadata;
1905
+ if (req.speaker !== void 0) body.speaker = req.speaker;
1906
+ if (req.occurredAt !== void 0) body.occurred_at = req.occurredAt;
1907
+ if (metadata !== void 0) body.metadata = metadata;
1908
+ if (req.syncEmbed) body.sync_embed = true;
1878
1909
  return await this.request("POST", "/v1/memory/add_turn", { body }) ?? {};
1879
1910
  }
1880
1911
  /**