@rei-standard/amsg-server 2.6.0-next.17 → 2.6.0-next.18
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.
|
@@ -3270,6 +3270,10 @@ var SQLITE_REQUIRED_SCHEMA = Object.freeze({
|
|
|
3270
3270
|
function escapeLikePrefix(prefix) {
|
|
3271
3271
|
return prefix.replace(/[\\%_]/g, (ch) => `\\${ch}`);
|
|
3272
3272
|
}
|
|
3273
|
+
var INTERNAL_TABLE_PREFIXES = ["sqlite_", "_cf_"];
|
|
3274
|
+
function isInternalTableName(name) {
|
|
3275
|
+
return INTERNAL_TABLE_PREFIXES.some((prefix) => name.startsWith(prefix));
|
|
3276
|
+
}
|
|
3273
3277
|
var D1Adapter = class {
|
|
3274
3278
|
/** @param {{ prepare: (sql: string) => any }} db - Cloudflare D1 binding */
|
|
3275
3279
|
constructor(db) {
|
|
@@ -3337,13 +3341,15 @@ var D1Adapter = class {
|
|
|
3337
3341
|
*/
|
|
3338
3342
|
async describeSchema() {
|
|
3339
3343
|
const tableRes = await this._db.prepare(
|
|
3340
|
-
`SELECT name FROM sqlite_master WHERE type = 'table'
|
|
3344
|
+
`SELECT name FROM sqlite_master WHERE type = 'table'`
|
|
3341
3345
|
).all();
|
|
3342
3346
|
const tables = {};
|
|
3343
3347
|
for (const row of tableRes.results || []) {
|
|
3344
|
-
|
|
3345
|
-
|
|
3346
|
-
|
|
3348
|
+
const name = String(row.name ?? "");
|
|
3349
|
+
if (isInternalTableName(name)) continue;
|
|
3350
|
+
if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(name)) continue;
|
|
3351
|
+
const columnRes = await this._db.prepare(`PRAGMA table_info(${name})`).all();
|
|
3352
|
+
tables[name] = (columnRes.results || []).map((column) => column.name);
|
|
3347
3353
|
}
|
|
3348
3354
|
const indexRes = await this._db.prepare(
|
|
3349
3355
|
`SELECT name FROM sqlite_master WHERE type = 'index' AND name IS NOT NULL`
|
|
@@ -4224,7 +4230,7 @@ function createClientStateHandler(ctx) {
|
|
|
4224
4230
|
}
|
|
4225
4231
|
|
|
4226
4232
|
// src/server/lib/version.js
|
|
4227
|
-
var SERVER_VERSION = true ? "2.6.0-next.
|
|
4233
|
+
var SERVER_VERSION = true ? "2.6.0-next.18" : "0.0.0-dev";
|
|
4228
4234
|
|
|
4229
4235
|
// src/server/handlers/capabilities.js
|
|
4230
4236
|
var SERVER_FEATURES = Object.freeze([
|
|
@@ -3270,6 +3270,10 @@ var SQLITE_REQUIRED_SCHEMA = Object.freeze({
|
|
|
3270
3270
|
function escapeLikePrefix(prefix) {
|
|
3271
3271
|
return prefix.replace(/[\\%_]/g, (ch) => `\\${ch}`);
|
|
3272
3272
|
}
|
|
3273
|
+
var INTERNAL_TABLE_PREFIXES = ["sqlite_", "_cf_"];
|
|
3274
|
+
function isInternalTableName(name) {
|
|
3275
|
+
return INTERNAL_TABLE_PREFIXES.some((prefix) => name.startsWith(prefix));
|
|
3276
|
+
}
|
|
3273
3277
|
var D1Adapter = class {
|
|
3274
3278
|
/** @param {{ prepare: (sql: string) => any }} db - Cloudflare D1 binding */
|
|
3275
3279
|
constructor(db) {
|
|
@@ -3337,13 +3341,15 @@ var D1Adapter = class {
|
|
|
3337
3341
|
*/
|
|
3338
3342
|
async describeSchema() {
|
|
3339
3343
|
const tableRes = await this._db.prepare(
|
|
3340
|
-
`SELECT name FROM sqlite_master WHERE type = 'table'
|
|
3344
|
+
`SELECT name FROM sqlite_master WHERE type = 'table'`
|
|
3341
3345
|
).all();
|
|
3342
3346
|
const tables = {};
|
|
3343
3347
|
for (const row of tableRes.results || []) {
|
|
3344
|
-
|
|
3345
|
-
|
|
3346
|
-
|
|
3348
|
+
const name = String(_nullishCoalesce(row.name, () => ( "")));
|
|
3349
|
+
if (isInternalTableName(name)) continue;
|
|
3350
|
+
if (!/^[A-Za-z_][A-Za-z0-9_]*$/.test(name)) continue;
|
|
3351
|
+
const columnRes = await this._db.prepare(`PRAGMA table_info(${name})`).all();
|
|
3352
|
+
tables[name] = (columnRes.results || []).map((column) => column.name);
|
|
3347
3353
|
}
|
|
3348
3354
|
const indexRes = await this._db.prepare(
|
|
3349
3355
|
`SELECT name FROM sqlite_master WHERE type = 'index' AND name IS NOT NULL`
|
|
@@ -4224,7 +4230,7 @@ function createClientStateHandler(ctx) {
|
|
|
4224
4230
|
}
|
|
4225
4231
|
|
|
4226
4232
|
// src/server/lib/version.js
|
|
4227
|
-
var SERVER_VERSION = true ? "2.6.0-next.
|
|
4233
|
+
var SERVER_VERSION = true ? "2.6.0-next.18" : "0.0.0-dev";
|
|
4228
4234
|
|
|
4229
4235
|
// src/server/handlers/capabilities.js
|
|
4230
4236
|
var SERVER_FEATURES = Object.freeze([
|
package/dist/cloudflare.cjs
CHANGED
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
|
|
25
25
|
|
|
26
26
|
|
|
27
|
-
var
|
|
27
|
+
var _chunkI35BFATZcjs = require('./chunk-I35BFATZ.cjs');
|
|
28
28
|
require('./chunk-V6NZQ22S.cjs');
|
|
29
29
|
|
|
30
30
|
|
|
@@ -52,4 +52,4 @@ require('./chunk-V6NZQ22S.cjs');
|
|
|
52
52
|
|
|
53
53
|
|
|
54
54
|
|
|
55
|
-
exports.MAX_PUSH_PAYLOAD_BYTES =
|
|
55
|
+
exports.MAX_PUSH_PAYLOAD_BYTES = _chunkI35BFATZcjs.MAX_PUSH_PAYLOAD_BYTES; exports.NonRetryableError = _chunkI35BFATZcjs.NonRetryableError; exports.PUSH_ENVELOPE_RESERVED_BYTES = _chunkI35BFATZcjs.PUSH_ENVELOPE_RESERVED_BYTES; exports.SCHEMA_VERSION = _chunkI35BFATZcjs.SCHEMA_VERSION; exports.WEB_PUSH_ENCRYPTION_OVERHEAD_BYTES = _chunkI35BFATZcjs.WEB_PUSH_ENCRYPTION_OVERHEAD_BYTES; exports.WEB_PUSH_MAX_BODY_BYTES = _chunkI35BFATZcjs.WEB_PUSH_MAX_BODY_BYTES; exports.advanceOccurrence = _chunkI35BFATZcjs.advanceOccurrence; exports.createD1Adapter = _chunkI35BFATZcjs.createD1Adapter; exports.createSingleUserCloudflareWorker = _chunkI35BFATZcjs.createSingleUserCloudflareWorker; exports.createSingleUserServer = _chunkI35BFATZcjs.createSingleUserServer; exports.createWebCryptoWebPush = _chunkI35BFATZcjs.createWebCryptoWebPush; exports.decryptFromStorage = _chunkI35BFATZcjs.decryptFromStorage; exports.decryptPayload = _chunkI35BFATZcjs.decryptPayload; exports.deriveUserEncryptionKey = _chunkI35BFATZcjs.deriveUserEncryptionKey; exports.encryptForStorage = _chunkI35BFATZcjs.encryptForStorage; exports.ensureSchema = _chunkI35BFATZcjs.ensureSchema; exports.getSchemaVersion = _chunkI35BFATZcjs.getSchemaVersion; exports.isNonRetryableError = _chunkI35BFATZcjs.isNonRetryableError; exports.isValidTimeZoneId = _chunkI35BFATZcjs.isValidTimeZoneId; exports.measurePushPayload = _chunkI35BFATZcjs.measurePushPayload; exports.nextFutureOccurrence = _chunkI35BFATZcjs.nextFutureOccurrence; exports.planNextOccurrence = _chunkI35BFATZcjs.planNextOccurrence; exports.runScheduledTick = _chunkI35BFATZcjs.runScheduledTick; exports.runTask = _chunkI35BFATZcjs.runTask; exports.summarizeErrorCause = _chunkI35BFATZcjs.summarizeErrorCause;
|
package/dist/cloudflare.mjs
CHANGED
package/dist/index.cjs
CHANGED
|
@@ -67,7 +67,7 @@
|
|
|
67
67
|
|
|
68
68
|
|
|
69
69
|
|
|
70
|
-
var
|
|
70
|
+
var _chunkI35BFATZcjs = require('./chunk-I35BFATZ.cjs');
|
|
71
71
|
require('./chunk-V6NZQ22S.cjs');
|
|
72
72
|
|
|
73
73
|
// src/server/adapters/factory.js
|
|
@@ -101,7 +101,7 @@ async function createAdapter(config) {
|
|
|
101
101
|
// src/server/handlers/init-tenant.js
|
|
102
102
|
function createInitTenantHandler(ctx) {
|
|
103
103
|
async function POST(headers, body) {
|
|
104
|
-
const initSecret =
|
|
104
|
+
const initSecret = _chunkI35BFATZcjs.getHeader.call(void 0, headers, "x-init-secret");
|
|
105
105
|
if (ctx.tenant.initSecret && initSecret !== ctx.tenant.initSecret) {
|
|
106
106
|
return {
|
|
107
107
|
status: 401,
|
|
@@ -114,7 +114,7 @@ function createInitTenantHandler(ctx) {
|
|
|
114
114
|
}
|
|
115
115
|
};
|
|
116
116
|
}
|
|
117
|
-
const parsed =
|
|
117
|
+
const parsed = _chunkI35BFATZcjs.parseJsonBody.call(void 0, body);
|
|
118
118
|
if (!parsed.ok) {
|
|
119
119
|
return {
|
|
120
120
|
status: 400,
|
|
@@ -128,7 +128,7 @@ function createInitTenantHandler(ctx) {
|
|
|
128
128
|
const tenantId = payload.tenantId || void 0;
|
|
129
129
|
const driver = payload.driver;
|
|
130
130
|
const databaseUrl = payload.databaseUrl || payload.connectionString;
|
|
131
|
-
if (tenantId && !
|
|
131
|
+
if (tenantId && !_chunkI35BFATZcjs.isValidUUIDv4.call(void 0, tenantId)) {
|
|
132
132
|
return {
|
|
133
133
|
status: 400,
|
|
134
134
|
body: {
|
|
@@ -248,7 +248,7 @@ function createSendNotificationsHandler(ctx) {
|
|
|
248
248
|
}
|
|
249
249
|
};
|
|
250
250
|
}
|
|
251
|
-
const data = await
|
|
251
|
+
const data = await _chunkI35BFATZcjs.runScheduledTick.call(void 0, { ...ctx, db, masterKey });
|
|
252
252
|
return { status: 200, body: { success: true, data } };
|
|
253
253
|
}
|
|
254
254
|
return { POST };
|
|
@@ -270,16 +270,16 @@ function encryptConfig(config, kekBuffer) {
|
|
|
270
270
|
const plaintext = Buffer.from(JSON.stringify(config), "utf8");
|
|
271
271
|
const ciphertext = Buffer.concat([cipher.update(plaintext), cipher.final()]);
|
|
272
272
|
const authTag = cipher.getAuthTag();
|
|
273
|
-
return `v1.${
|
|
273
|
+
return `v1.${_chunkI35BFATZcjs.bytesToBase64Url.call(void 0, iv)}.${_chunkI35BFATZcjs.bytesToBase64Url.call(void 0, authTag)}.${_chunkI35BFATZcjs.bytesToBase64Url.call(void 0, ciphertext)}`;
|
|
274
274
|
}
|
|
275
275
|
function decryptConfig(encrypted, kekBuffer) {
|
|
276
276
|
const parts = String(encrypted || "").split(".");
|
|
277
277
|
if (parts.length !== 4 || parts[0] !== "v1") {
|
|
278
278
|
throw new Error("INVALID_TENANT_CONFIG");
|
|
279
279
|
}
|
|
280
|
-
const iv =
|
|
281
|
-
const authTag =
|
|
282
|
-
const ciphertext =
|
|
280
|
+
const iv = _chunkI35BFATZcjs.base64UrlToBytes.call(void 0, parts[1]);
|
|
281
|
+
const authTag = _chunkI35BFATZcjs.base64UrlToBytes.call(void 0, parts[2]);
|
|
282
|
+
const ciphertext = _chunkI35BFATZcjs.base64UrlToBytes.call(void 0, parts[3]);
|
|
283
283
|
const decipher = _crypto.createDecipheriv.call(void 0, "aes-256-gcm", kekBuffer, iv);
|
|
284
284
|
decipher.setAuthTag(authTag);
|
|
285
285
|
const plaintext = Buffer.concat([decipher.update(ciphertext), decipher.final()]).toString("utf8");
|
|
@@ -347,7 +347,7 @@ function createTenantBlobStore(options) {
|
|
|
347
347
|
// src/server/tenant/token.js
|
|
348
348
|
|
|
349
349
|
function sign(input, secret) {
|
|
350
|
-
return
|
|
350
|
+
return _chunkI35BFATZcjs.bytesToBase64Url.call(void 0, _crypto.createHmac.call(void 0, "sha256", secret).update(input).digest());
|
|
351
351
|
}
|
|
352
352
|
function nowEpochSeconds() {
|
|
353
353
|
return Math.floor(Date.now() / 1e3);
|
|
@@ -363,8 +363,8 @@ function createTenantToken(params, secret) {
|
|
|
363
363
|
v: 1
|
|
364
364
|
};
|
|
365
365
|
const header = { alg: "HS256", typ: "JWT" };
|
|
366
|
-
const encodedHeader =
|
|
367
|
-
const encodedPayload =
|
|
366
|
+
const encodedHeader = _chunkI35BFATZcjs.bytesToBase64Url.call(void 0, _chunkI35BFATZcjs.utf8.call(void 0, JSON.stringify(header)));
|
|
367
|
+
const encodedPayload = _chunkI35BFATZcjs.bytesToBase64Url.call(void 0, _chunkI35BFATZcjs.utf8.call(void 0, JSON.stringify(payload)));
|
|
368
368
|
const signingInput = `${encodedHeader}.${encodedPayload}`;
|
|
369
369
|
const signature = sign(signingInput, secret);
|
|
370
370
|
return `${signingInput}.${signature}`;
|
|
@@ -383,17 +383,17 @@ function verifyTenantToken(token, secret, options = {}) {
|
|
|
383
383
|
let receivedBytes;
|
|
384
384
|
let expectedBytes;
|
|
385
385
|
try {
|
|
386
|
-
receivedBytes =
|
|
387
|
-
expectedBytes =
|
|
386
|
+
receivedBytes = _chunkI35BFATZcjs.base64UrlToBytes.call(void 0, receivedSignature);
|
|
387
|
+
expectedBytes = _chunkI35BFATZcjs.base64UrlToBytes.call(void 0, expectedSignature);
|
|
388
388
|
} catch (e) {
|
|
389
389
|
throw new Error("INVALID_TENANT_AUTH");
|
|
390
390
|
}
|
|
391
|
-
if (!
|
|
391
|
+
if (!_chunkI35BFATZcjs.timingSafeEqualBytes.call(void 0, receivedBytes, expectedBytes)) {
|
|
392
392
|
throw new Error("INVALID_TENANT_AUTH");
|
|
393
393
|
}
|
|
394
394
|
let payload;
|
|
395
395
|
try {
|
|
396
|
-
payload = JSON.parse(
|
|
396
|
+
payload = JSON.parse(_chunkI35BFATZcjs.utf8Decode.call(void 0, _chunkI35BFATZcjs.base64UrlToBytes.call(void 0, encodedPayload)));
|
|
397
397
|
} catch (e2) {
|
|
398
398
|
throw new Error("INVALID_TENANT_AUTH");
|
|
399
399
|
}
|
|
@@ -613,15 +613,15 @@ async function createReiServer(config) {
|
|
|
613
613
|
return {
|
|
614
614
|
handlers: {
|
|
615
615
|
initTenant: createInitTenantHandler(ctx),
|
|
616
|
-
getUserKey:
|
|
617
|
-
scheduleMessage:
|
|
616
|
+
getUserKey: _chunkI35BFATZcjs.createGetUserKeyHandler.call(void 0, ctx),
|
|
617
|
+
scheduleMessage: _chunkI35BFATZcjs.createScheduleMessageHandler.call(void 0, ctx),
|
|
618
618
|
sendNotifications: createSendNotificationsHandler(ctx),
|
|
619
|
-
updateMessage:
|
|
620
|
-
cancelMessage:
|
|
621
|
-
messages:
|
|
622
|
-
getMessage:
|
|
623
|
-
pushSubscription:
|
|
624
|
-
llmCredentials:
|
|
619
|
+
updateMessage: _chunkI35BFATZcjs.createUpdateMessageHandler.call(void 0, ctx),
|
|
620
|
+
cancelMessage: _chunkI35BFATZcjs.createCancelMessageHandler.call(void 0, ctx),
|
|
621
|
+
messages: _chunkI35BFATZcjs.createMessagesHandler.call(void 0, ctx),
|
|
622
|
+
getMessage: _chunkI35BFATZcjs.createGetMessageHandler.call(void 0, ctx),
|
|
623
|
+
pushSubscription: _chunkI35BFATZcjs.createPushSubscriptionHandler.call(void 0, ctx),
|
|
624
|
+
llmCredentials: _chunkI35BFATZcjs.createLlmCredentialsHandler.call(void 0, ctx)
|
|
625
625
|
}
|
|
626
626
|
};
|
|
627
627
|
}
|
|
@@ -683,4 +683,4 @@ async function createReiServer(config) {
|
|
|
683
683
|
|
|
684
684
|
|
|
685
685
|
|
|
686
|
-
exports.CORS_ALLOW_HEADERS =
|
|
686
|
+
exports.CORS_ALLOW_HEADERS = _chunkI35BFATZcjs.CORS_ALLOW_HEADERS; exports.CORS_ALLOW_METHODS = _chunkI35BFATZcjs.CORS_ALLOW_METHODS; exports.CRED_ID_MAX_LENGTH = _chunkI35BFATZcjs.CRED_ID_MAX_LENGTH; exports.CRED_PUT_BATCH_MAX = _chunkI35BFATZcjs.CRED_PUT_BATCH_MAX; exports.CRED_REFS_MAX_ENTRIES = _chunkI35BFATZcjs.CRED_REFS_MAX_ENTRIES; exports.CRED_ROWS_PER_USER_MAX = _chunkI35BFATZcjs.CRED_ROWS_PER_USER_MAX; exports.DEFAULT_CLAIM_LEASE_MS = _chunkI35BFATZcjs.DEFAULT_CLAIM_LEASE_MS; exports.DEFAULT_HEARTBEAT_LEASE_TTL_MS = _chunkI35BFATZcjs.DEFAULT_HEARTBEAT_LEASE_TTL_MS; exports.DEFAULT_LEASE_HEARTBEAT_MS = _chunkI35BFATZcjs.DEFAULT_LEASE_HEARTBEAT_MS; exports.DEFAULT_MAX_SCHEDULED_TASKS_PER_FIRE = _chunkI35BFATZcjs.DEFAULT_MAX_SCHEDULED_TASKS_PER_FIRE; exports.DEFAULT_MAX_TOOL_ITERATIONS = _chunkI35BFATZcjs.DEFAULT_MAX_TOOL_ITERATIONS; exports.DEFAULT_TOTAL_TIMEOUT_MS = _chunkI35BFATZcjs.DEFAULT_TOTAL_TIMEOUT_MS; exports.MAX_PUSH_PAYLOAD_BYTES = _chunkI35BFATZcjs.MAX_PUSH_PAYLOAD_BYTES; exports.MIN_SCHEDULE_LEAD_MS = _chunkI35BFATZcjs.MIN_SCHEDULE_LEAD_MS; exports.NonRetryableError = _chunkI35BFATZcjs.NonRetryableError; exports.PUSH_ENVELOPE_RESERVED_BYTES = _chunkI35BFATZcjs.PUSH_ENVELOPE_RESERVED_BYTES; exports.SCHEMA_VERSION = _chunkI35BFATZcjs.SCHEMA_VERSION; exports.WEB_PUSH_ENCRYPTION_OVERHEAD_BYTES = _chunkI35BFATZcjs.WEB_PUSH_ENCRYPTION_OVERHEAD_BYTES; exports.WEB_PUSH_MAX_BODY_BYTES = _chunkI35BFATZcjs.WEB_PUSH_MAX_BODY_BYTES; exports.advanceOccurrence = _chunkI35BFATZcjs.advanceOccurrence; exports.createAdapter = createAdapter; exports.createD1Adapter = _chunkI35BFATZcjs.createD1Adapter; exports.createReiServer = createReiServer; exports.createSingleUserCloudflareWorker = _chunkI35BFATZcjs.createSingleUserCloudflareWorker; exports.createSingleUserServer = _chunkI35BFATZcjs.createSingleUserServer; exports.createTenantToken = createTenantToken; exports.createWebCryptoWebPush = _chunkI35BFATZcjs.createWebCryptoWebPush; exports.decryptFromStorage = _chunkI35BFATZcjs.decryptFromStorage; exports.decryptPayload = _chunkI35BFATZcjs.decryptPayload; exports.deriveUserEncryptionKey = _chunkI35BFATZcjs.deriveUserEncryptionKey; exports.encryptForStorage = _chunkI35BFATZcjs.encryptForStorage; exports.ensureSchema = _chunkI35BFATZcjs.ensureSchema; exports.getSchemaVersion = _chunkI35BFATZcjs.getSchemaVersion; exports.hasChatCredRef = _chunkI35BFATZcjs.hasChatCredRef; exports.isNonRetryableError = _chunkI35BFATZcjs.isNonRetryableError; exports.isValidCredId = _chunkI35BFATZcjs.isValidCredId; exports.isValidISO8601 = _chunkI35BFATZcjs.isValidISO8601; exports.isValidTimeZoneId = _chunkI35BFATZcjs.isValidTimeZoneId; exports.isValidUUID = _chunkI35BFATZcjs.isValidUUID; exports.isValidUUIDv4 = _chunkI35BFATZcjs.isValidUUIDv4; exports.isValidUrl = _chunkI35BFATZcjs.isValidUrl; exports.measurePushPayload = _chunkI35BFATZcjs.measurePushPayload; exports.nextFutureOccurrence = _chunkI35BFATZcjs.nextFutureOccurrence; exports.planNextOccurrence = _chunkI35BFATZcjs.planNextOccurrence; exports.resolveLlmCredential = _chunkI35BFATZcjs.resolveLlmCredential; exports.runScheduledTick = _chunkI35BFATZcjs.runScheduledTick; exports.runTask = _chunkI35BFATZcjs.runTask; exports.sanitizeErrorSummary = _chunkI35BFATZcjs.sanitizeErrorSummary; exports.summarizeErrorCause = _chunkI35BFATZcjs.summarizeErrorCause; exports.supportsLlmCredentialsStore = _chunkI35BFATZcjs.supportsLlmCredentialsStore; exports.validateAvatarUrl = _chunkI35BFATZcjs.validateAvatarUrl; exports.validateCredRefs = _chunkI35BFATZcjs.validateCredRefs; exports.validateCredValue = _chunkI35BFATZcjs.validateCredValue; exports.validateLlmMessagesArray = _chunkI35BFATZcjs.validateLlmMessagesArray; exports.validateScheduleMessagePayload = _chunkI35BFATZcjs.validateScheduleMessagePayload; exports.validateSplitPattern = _chunkI35BFATZcjs.validateSplitPattern; exports.verifyTenantToken = verifyTenantToken;
|
package/dist/index.mjs
CHANGED
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rei-standard/amsg-server",
|
|
3
|
-
"version": "2.6.0-next.
|
|
3
|
+
"version": "2.6.0-next.18",
|
|
4
4
|
"description": "ReiStandard Active Messaging server SDK with pluggable database adapters. Three-axis push schema (messageKind / messageType / messageSubtype) from @rei-standard/amsg-shared. Auto-emits ReasoningPush when the LLM response carries reasoning_content.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|