@camstack/addon-post-analysis 1.2.373 → 1.2.374
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/{clip-model-registry-jeFu3pma.mjs → clip-model-registry-BIJ0ZD7t.mjs} +696 -110
- package/dist/{clip-model-registry-Cy2RokDO.js → clip-model-registry-BRzN2GzR.js} +696 -110
- package/dist/embedding-encoder/index.js +1 -1
- package/dist/embedding-encoder/index.mjs +1 -1
- package/dist/pipeline-analytics/_stub.js +2 -2
- package/dist/pipeline-analytics/{_virtual_mf-localSharedImportMap___mfe_internal__addon_pipeline_analytics_widgets-ujfvEENv.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_pipeline_analytics_widgets-BYu-s1rf.mjs} +2 -2
- package/dist/pipeline-analytics/_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-Ds_wGoAi.mjs +26 -0
- package/dist/pipeline-analytics/_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-BjCURGur.mjs +26 -0
- package/dist/pipeline-analytics/{hostInit-Ddz0CyLk.mjs → hostInit-DEl2xA0o.mjs} +2 -2
- package/dist/pipeline-analytics/index.js +39 -206
- package/dist/pipeline-analytics/index.mjs +39 -206
- package/dist/pipeline-analytics/remoteEntry.js +1 -1
- package/package.json +1 -1
- package/dist/pipeline-analytics/_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-CyYkqCmx.mjs +0 -26
- package/dist/pipeline-analytics/_virtual_mf___mfe_internal__addon_pipeline_analytics_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-Kh1uHJki.mjs +0 -26
|
@@ -5477,7 +5477,7 @@ var ZodIssueCode = {
|
|
|
5477
5477
|
var ZodFirstPartyTypeKind;
|
|
5478
5478
|
ZodFirstPartyTypeKind || (ZodFirstPartyTypeKind = {});
|
|
5479
5479
|
//#endregion
|
|
5480
|
-
//#region ../types/dist/sleep-
|
|
5480
|
+
//#region ../types/dist/sleep-WsrozGDL.mjs
|
|
5481
5481
|
/**
|
|
5482
5482
|
* The audio chunk plane's byte format, and the ONE expansion from a coded
|
|
5483
5483
|
* window to float samples (D455).
|
|
@@ -5594,7 +5594,7 @@ function isKeychainStoredField(field) {
|
|
|
5594
5594
|
var SECRET_CLEAR = { $secretClear: true };
|
|
5595
5595
|
/** The `'***'` token D634 redaction writes for non-admins. */
|
|
5596
5596
|
var LEGACY_DEVICE_REDACTION = "***";
|
|
5597
|
-
function isRecord$
|
|
5597
|
+
function isRecord$4(value) {
|
|
5598
5598
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
5599
5599
|
}
|
|
5600
5600
|
function makeSecretMarker(ref) {
|
|
@@ -5605,12 +5605,12 @@ function makeSecretMarker(ref) {
|
|
|
5605
5605
|
}
|
|
5606
5606
|
/** A stored marker: an object whose `$secret` is a non-empty string. */
|
|
5607
5607
|
function isSecretMarker(value) {
|
|
5608
|
-
if (!isRecord$
|
|
5608
|
+
if (!isRecord$4(value)) return false;
|
|
5609
5609
|
const ref = value["$secret"];
|
|
5610
5610
|
return typeof ref === "string" && ref.length > 0;
|
|
5611
5611
|
}
|
|
5612
5612
|
function isSecretClear(value) {
|
|
5613
|
-
return isRecord$
|
|
5613
|
+
return isRecord$4(value) && value["$secretClear"] === true;
|
|
5614
5614
|
}
|
|
5615
5615
|
/**
|
|
5616
5616
|
* The UI view of a stored secret field value: a marker becomes "set", inline
|
|
@@ -6220,7 +6220,7 @@ var KeychainWriteRefusedError = class extends Error {
|
|
|
6220
6220
|
}
|
|
6221
6221
|
};
|
|
6222
6222
|
var KEEP = { kind: "keep" };
|
|
6223
|
-
function isRecord$
|
|
6223
|
+
function isRecord$3(value) {
|
|
6224
6224
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
6225
6225
|
}
|
|
6226
6226
|
function defaultMintId() {
|
|
@@ -6233,7 +6233,7 @@ function collectSecretMarkerRefs(value, out = []) {
|
|
|
6233
6233
|
return out;
|
|
6234
6234
|
}
|
|
6235
6235
|
if (Array.isArray(value)) for (const item of value) collectSecretMarkerRefs(item, out);
|
|
6236
|
-
else if (isRecord$
|
|
6236
|
+
else if (isRecord$3(value)) for (const child of Object.values(value)) collectSecretMarkerRefs(child, out);
|
|
6237
6237
|
return out;
|
|
6238
6238
|
}
|
|
6239
6239
|
async function storedValueEquals(secrets, marker, candidate) {
|
|
@@ -6288,7 +6288,7 @@ function rowId(row, idKey) {
|
|
|
6288
6288
|
return null;
|
|
6289
6289
|
}
|
|
6290
6290
|
async function writeArray(ctx, node, incoming, stored, fieldPath) {
|
|
6291
|
-
const storedRows = Array.isArray(stored) ? stored.filter(isRecord$
|
|
6291
|
+
const storedRows = Array.isArray(stored) ? stored.filter(isRecord$3) : [];
|
|
6292
6292
|
if (!Array.isArray(incoming)) {
|
|
6293
6293
|
ctx.deletes.push(...collectSecretMarkerRefs(storedRows));
|
|
6294
6294
|
return {
|
|
@@ -6304,7 +6304,7 @@ async function writeArray(ctx, node, incoming, stored, fieldPath) {
|
|
|
6304
6304
|
const kept = /* @__PURE__ */ new Set();
|
|
6305
6305
|
const rows = [];
|
|
6306
6306
|
for (const row of incoming) {
|
|
6307
|
-
if (!isRecord$
|
|
6307
|
+
if (!isRecord$3(row)) {
|
|
6308
6308
|
rows.push(row);
|
|
6309
6309
|
continue;
|
|
6310
6310
|
}
|
|
@@ -6329,7 +6329,7 @@ async function writeNode(ctx, node, incoming, stored, fieldPath) {
|
|
|
6329
6329
|
case "leaf": return writeLeaf(ctx, incoming, stored, fieldPath);
|
|
6330
6330
|
case "array": return writeArray(ctx, node, incoming, stored, fieldPath);
|
|
6331
6331
|
case "object": {
|
|
6332
|
-
if (!isRecord$
|
|
6332
|
+
if (!isRecord$3(incoming)) {
|
|
6333
6333
|
if (incoming === void 0) return KEEP;
|
|
6334
6334
|
ctx.deletes.push(...collectSecretMarkerRefs(stored));
|
|
6335
6335
|
return {
|
|
@@ -6337,7 +6337,7 @@ async function writeNode(ctx, node, incoming, stored, fieldPath) {
|
|
|
6337
6337
|
value: incoming
|
|
6338
6338
|
};
|
|
6339
6339
|
}
|
|
6340
|
-
const storedObj = isRecord$
|
|
6340
|
+
const storedObj = isRecord$3(stored) ? stored : {};
|
|
6341
6341
|
return {
|
|
6342
6342
|
kind: "value",
|
|
6343
6343
|
value: await writeMembers(ctx, node.children, incoming, storedObj, (m) => `${fieldPath}.${m}`)
|
|
@@ -6460,7 +6460,7 @@ async function resolveSecretMarkers(value, secrets, options = {}) {
|
|
|
6460
6460
|
value: items
|
|
6461
6461
|
};
|
|
6462
6462
|
}
|
|
6463
|
-
if (isRecord$
|
|
6463
|
+
if (isRecord$3(v)) {
|
|
6464
6464
|
const out = {};
|
|
6465
6465
|
for (const [k, child] of Object.entries(v)) {
|
|
6466
6466
|
const s = substitute(child);
|
|
@@ -6492,7 +6492,7 @@ var SecretOverwriteRefusedError = class extends Error {
|
|
|
6492
6492
|
this.name = "SecretOverwriteRefusedError";
|
|
6493
6493
|
}
|
|
6494
6494
|
};
|
|
6495
|
-
function isRecord(value) {
|
|
6495
|
+
function isRecord$2(value) {
|
|
6496
6496
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
6497
6497
|
}
|
|
6498
6498
|
function resolvedValue(pass, marker) {
|
|
@@ -6521,7 +6521,7 @@ function inArray(pass, incoming, stored) {
|
|
|
6521
6521
|
return incoming.map((item, index) => {
|
|
6522
6522
|
const twin = stored[index];
|
|
6523
6523
|
if (isSecretMarker(twin)) return typeof item === "string" && item === resolvedValue(pass, twin) ? twin : item;
|
|
6524
|
-
if (isRecord(item) && isRecord(twin)) return inArrayRow(pass, item, twin);
|
|
6524
|
+
if (isRecord$2(item) && isRecord$2(twin)) return inArrayRow(pass, item, twin);
|
|
6525
6525
|
if (Array.isArray(item) && Array.isArray(twin)) return inArray(pass, item, twin);
|
|
6526
6526
|
return item;
|
|
6527
6527
|
});
|
|
@@ -6532,7 +6532,7 @@ function inArrayRow(pass, incoming, stored) {
|
|
|
6532
6532
|
const twin = stored[key];
|
|
6533
6533
|
if (isSecretMarker(twin)) {
|
|
6534
6534
|
if (typeof value === "string" && value === resolvedValue(pass, twin)) out[key] = twin;
|
|
6535
|
-
} else if (isRecord(value) && isRecord(twin)) out[key] = inArrayRow(pass, value, twin);
|
|
6535
|
+
} else if (isRecord$2(value) && isRecord$2(twin)) out[key] = inArrayRow(pass, value, twin);
|
|
6536
6536
|
else if (Array.isArray(value) && Array.isArray(twin)) out[key] = inArray(pass, value, twin);
|
|
6537
6537
|
}
|
|
6538
6538
|
return out;
|
|
@@ -6540,7 +6540,7 @@ function inArrayRow(pass, incoming, stored) {
|
|
|
6540
6540
|
async function walk(pass, incoming, stored) {
|
|
6541
6541
|
if (isSecretMarker(stored)) return atMarker(pass, incoming, stored);
|
|
6542
6542
|
if (Array.isArray(incoming) && Array.isArray(stored)) return inArray(pass, incoming, stored);
|
|
6543
|
-
if (!isRecord(incoming) || !isRecord(stored)) return incoming;
|
|
6543
|
+
if (!isRecord$2(incoming) || !isRecord$2(stored)) return incoming;
|
|
6544
6544
|
const out = { ...incoming };
|
|
6545
6545
|
for (const [key, value] of Object.entries(incoming)) out[key] = await walk(pass, value, stored[key]);
|
|
6546
6546
|
return out;
|
|
@@ -6571,7 +6571,7 @@ async function restoreUnchangedSecrets(input) {
|
|
|
6571
6571
|
function isJsonEqual(a, b) {
|
|
6572
6572
|
if (Object.is(a, b)) return true;
|
|
6573
6573
|
if (Array.isArray(a)) return Array.isArray(b) && a.length === b.length && a.every((v, i) => isJsonEqual(v, b[i]));
|
|
6574
|
-
if (isRecord(a) && isRecord(b)) {
|
|
6574
|
+
if (isRecord$2(a) && isRecord$2(b)) {
|
|
6575
6575
|
const keys = Object.keys(a);
|
|
6576
6576
|
if (keys.length !== Object.keys(b).length) return false;
|
|
6577
6577
|
return keys.every((k) => Object.prototype.hasOwnProperty.call(b, k) && isJsonEqual(a[k], b[k]));
|
|
@@ -6595,7 +6595,7 @@ function markerKeysOf(blob, owner) {
|
|
|
6595
6595
|
}
|
|
6596
6596
|
function nodeFromStored(value, owner) {
|
|
6597
6597
|
if (isSecretMarker(value)) return isSecretRefOwnedBy(value.$secret, owner) ? { kind: "leaf" } : null;
|
|
6598
|
-
if (!isRecord(value)) return null;
|
|
6598
|
+
if (!isRecord$2(value)) return null;
|
|
6599
6599
|
const children = /* @__PURE__ */ new Map();
|
|
6600
6600
|
for (const [key, child] of Object.entries(value)) {
|
|
6601
6601
|
const node = nodeFromStored(child, owner);
|
|
@@ -7877,6 +7877,152 @@ var PeerBytesTicketSchema = object({
|
|
|
7877
7877
|
*/
|
|
7878
7878
|
declaredBytes: number().int().nonnegative().nullable()
|
|
7879
7879
|
});
|
|
7880
|
+
/** Limits and names of `ctx.records` (D881). One authority; the engine and the facade read it. */
|
|
7881
|
+
/** The files a kind may live in. `history` is device-history's (D850), never records. */
|
|
7882
|
+
var RECORD_DATABASES = ["settings", "events"];
|
|
7883
|
+
/** The classes of a kind: the `@durable` vocabulary, one authority (replaces the annotation). */
|
|
7884
|
+
var RECORD_CLASSES = [
|
|
7885
|
+
"config",
|
|
7886
|
+
"ledger",
|
|
7887
|
+
"audit",
|
|
7888
|
+
"mirror",
|
|
7889
|
+
"ephemeral"
|
|
7890
|
+
];
|
|
7891
|
+
var RECORD_DEFAULT_MAX_DATA_BYTES = 64 * 1024;
|
|
7892
|
+
var RECORD_MAX_DATA_BYTES = 1024 * 1024;
|
|
7893
|
+
var RECORD_BATCH_MAX = 1e3;
|
|
7894
|
+
var RECORD_QUERY_MAX = 1e3;
|
|
7895
|
+
function defOf(schema) {
|
|
7896
|
+
return schema._zod?.def ?? {};
|
|
7897
|
+
}
|
|
7898
|
+
function declaredHere(schema) {
|
|
7899
|
+
return globalRegistry.get(schema)?.secret === true;
|
|
7900
|
+
}
|
|
7901
|
+
/** Wrapper kinds whose `innerType` is the field itself. */
|
|
7902
|
+
var WRAPPERS = new Set([
|
|
7903
|
+
"optional",
|
|
7904
|
+
"nullable",
|
|
7905
|
+
"default",
|
|
7906
|
+
"prefault",
|
|
7907
|
+
"catch",
|
|
7908
|
+
"readonly",
|
|
7909
|
+
"nonoptional"
|
|
7910
|
+
]);
|
|
7911
|
+
/**
|
|
7912
|
+
* The schema layers that make up ONE field: the schema itself and every
|
|
7913
|
+
* wrapper below it (optional / default / nullable / readonly / catch), plus
|
|
7914
|
+
* both sides of a pipe (`z.preprocess` puts the real schema on `out`,
|
|
7915
|
+
* `.transform` on `in`).
|
|
7916
|
+
*/
|
|
7917
|
+
function layersOf(schema) {
|
|
7918
|
+
const out = [];
|
|
7919
|
+
const queue = [schema];
|
|
7920
|
+
while (queue.length > 0) {
|
|
7921
|
+
const s = queue.shift();
|
|
7922
|
+
if (!s || out.includes(s)) continue;
|
|
7923
|
+
out.push(s);
|
|
7924
|
+
const def = defOf(s);
|
|
7925
|
+
if (def.type !== void 0 && WRAPPERS.has(def.type) && def.innerType) queue.push(def.innerType);
|
|
7926
|
+
if (def.type === "pipe") {
|
|
7927
|
+
if (def.in) queue.push(def.in);
|
|
7928
|
+
if (def.out) queue.push(def.out);
|
|
7929
|
+
}
|
|
7930
|
+
}
|
|
7931
|
+
return out;
|
|
7932
|
+
}
|
|
7933
|
+
/** True when any layer of this field declares `.meta({ secret: true })`. */
|
|
7934
|
+
function isZodSecret(schema) {
|
|
7935
|
+
return layersOf(schema).some(declaredHere);
|
|
7936
|
+
}
|
|
7937
|
+
/**
|
|
7938
|
+
* Every declared secret path in a config schema: dotted keys, `[]` for "each
|
|
7939
|
+
* element of this array" (`connection.password`, `rows[].token`). A declared
|
|
7940
|
+
* object or array is reported as one path and not descended into — everything
|
|
7941
|
+
* under it is secret.
|
|
7942
|
+
*/
|
|
7943
|
+
function collectZodSecretPaths(schema, prefix = "") {
|
|
7944
|
+
if (isZodSecret(schema)) return prefix.length > 0 ? [prefix] : [];
|
|
7945
|
+
const paths = [];
|
|
7946
|
+
for (const layer of layersOf(schema)) {
|
|
7947
|
+
const def = defOf(layer);
|
|
7948
|
+
if (def.type === "object" && def.shape) for (const [key, child] of Object.entries(def.shape)) paths.push(...collectZodSecretPaths(child, prefix ? `${prefix}.${key}` : key));
|
|
7949
|
+
else if (def.type === "array" && def.element) paths.push(...collectZodSecretPaths(def.element, `${prefix}[]`));
|
|
7950
|
+
else if (def.type === "union" && def.options) for (const option of def.options) paths.push(...collectZodSecretPaths(option, prefix));
|
|
7951
|
+
else if (def.type === "intersection") {
|
|
7952
|
+
if (def.left) paths.push(...collectZodSecretPaths(def.left, prefix));
|
|
7953
|
+
if (def.right) paths.push(...collectZodSecretPaths(def.right, prefix));
|
|
7954
|
+
}
|
|
7955
|
+
}
|
|
7956
|
+
return [...new Set(paths)];
|
|
7957
|
+
}
|
|
7958
|
+
/**
|
|
7959
|
+
* Record kinds (D881): the declaration an addon makes of one kind of fact, the
|
|
7960
|
+
* Zod row schema that describes it, and the helper that turns the two into the
|
|
7961
|
+
* JSON the engine stores.
|
|
7962
|
+
*
|
|
7963
|
+
* A kind is declared ONCE, next to the code that owns it, and the engine's
|
|
7964
|
+
* reconciler creates its indexes - nothing creates DDL at runtime from a write.
|
|
7965
|
+
* Everything the generic machinery needs (secret fields, the entry descriptor)
|
|
7966
|
+
* is DERIVED from the Zod schema: `.meta({ secret: true })` marks a credential,
|
|
7967
|
+
* never a field name (D879).
|
|
7968
|
+
*/
|
|
7969
|
+
/** A JSON field path: `trackId`, `auth.accessToken`. Charset-restricted: it is rendered into DDL. */
|
|
7970
|
+
var RecordFieldPathSchema = string().regex(/^[A-Za-z_][A-Za-z0-9_]{0,63}(\.[A-Za-z_][A-Za-z0-9_]{0,63}){0,3}$/);
|
|
7971
|
+
var RecordIndexSchema = object({
|
|
7972
|
+
name: string().regex(/^[a-z][a-z0-9_]{0,31}$/),
|
|
7973
|
+
fields: array(RecordFieldPathSchema).min(1).max(4),
|
|
7974
|
+
unique: boolean().optional()
|
|
7975
|
+
}).strict();
|
|
7976
|
+
var RecordRetentionSchema = union([
|
|
7977
|
+
object({
|
|
7978
|
+
ttlMs: number().int().positive(),
|
|
7979
|
+
from: _enum(["at", "write"])
|
|
7980
|
+
}).strict(),
|
|
7981
|
+
object({
|
|
7982
|
+
maxRows: number().int().positive().optional(),
|
|
7983
|
+
maxRowsPerDevice: number().int().positive().optional()
|
|
7984
|
+
}).strict().refine((r) => r.maxRows !== void 0 || r.maxRowsPerDevice !== void 0, { message: "name maxRows, maxRowsPerDevice or both" }),
|
|
7985
|
+
object({
|
|
7986
|
+
owner: string().min(1),
|
|
7987
|
+
reason: string().min(1)
|
|
7988
|
+
}).strict(),
|
|
7989
|
+
object({ none: string().min(1) }).strict()
|
|
7990
|
+
]);
|
|
7991
|
+
/** The descriptor a generic entries UI reads (D881 "generic entries"). */
|
|
7992
|
+
var EntryDescriptorSchema = object({
|
|
7993
|
+
title: string().min(1),
|
|
7994
|
+
/** The record body field shown as the entry's name. */
|
|
7995
|
+
nameField: string().min(1),
|
|
7996
|
+
/** JSON Schema of the entry body; `secret: true` marks a password field. */
|
|
7997
|
+
fields: record(string(), unknown())
|
|
7998
|
+
}).strict();
|
|
7999
|
+
/** What crosses the wire and sits in the engine's catalog: JSON only, no Zod. */
|
|
8000
|
+
var RecordKindDeclarationSchema = object({
|
|
8001
|
+
database: _enum(RECORD_DATABASES).default("settings"),
|
|
8002
|
+
class: _enum(RECORD_CLASSES),
|
|
8003
|
+
writeTrigger: string().min(1),
|
|
8004
|
+
device: _enum([
|
|
8005
|
+
"required",
|
|
8006
|
+
"optional",
|
|
8007
|
+
"none"
|
|
8008
|
+
]).default("none"),
|
|
8009
|
+
at: _enum(["required", "none"]).default("none"),
|
|
8010
|
+
indexes: array(RecordIndexSchema).max(8).default([]),
|
|
8011
|
+
retention: RecordRetentionSchema,
|
|
8012
|
+
deviceRemoval: _enum(["delete", "none"]).default("none"),
|
|
8013
|
+
maxDataBytes: number().int().positive().max(RECORD_MAX_DATA_BYTES).default(RECORD_DEFAULT_MAX_DATA_BYTES),
|
|
8014
|
+
/** Derived from the Zod schema; never written by hand. */
|
|
8015
|
+
secretPaths: array(string().min(1)).default([]),
|
|
8016
|
+
/** The id key of each array that carries a secret (`{ headers: 'name' }`). */
|
|
8017
|
+
secretArrayKeys: record(string(), string()).default({}),
|
|
8018
|
+
/** The legacy table this kind adopts from; the boot guard reads it (D853: no migration code). */
|
|
8019
|
+
adoptsFrom: string().min(1).optional(),
|
|
8020
|
+
/** Kinds that must agree through `transact` sit in one file under one family name. */
|
|
8021
|
+
transactFamily: string().min(1).optional(),
|
|
8022
|
+
entry: EntryDescriptorSchema.optional()
|
|
8023
|
+
}).strict();
|
|
8024
|
+
/** The kind names: lower-case, dash separated, short enough for an index name. */
|
|
8025
|
+
var RecordKindNameSchema = string().regex(/^[a-z][a-z0-9-]{0,47}$/);
|
|
7880
8026
|
/** Shared Zod schemas used across streaming capabilities. */
|
|
7881
8027
|
var CamProfileSchema = _enum([
|
|
7882
8028
|
"high",
|
|
@@ -8422,69 +8568,6 @@ method(object({ deviceId: number() }), array(StreamSourceEntrySchema)), method(o
|
|
|
8422
8568
|
kind: "mutation",
|
|
8423
8569
|
auth: "admin"
|
|
8424
8570
|
}), method(object({ deviceId: number() }), unknown().nullable()), method(object({ deviceId: number() }), RawStateResultSchema.nullable(), { auth: "protected" });
|
|
8425
|
-
function defOf(schema) {
|
|
8426
|
-
return schema._zod?.def ?? {};
|
|
8427
|
-
}
|
|
8428
|
-
function declaredHere(schema) {
|
|
8429
|
-
return globalRegistry.get(schema)?.secret === true;
|
|
8430
|
-
}
|
|
8431
|
-
/** Wrapper kinds whose `innerType` is the field itself. */
|
|
8432
|
-
var WRAPPERS = new Set([
|
|
8433
|
-
"optional",
|
|
8434
|
-
"nullable",
|
|
8435
|
-
"default",
|
|
8436
|
-
"prefault",
|
|
8437
|
-
"catch",
|
|
8438
|
-
"readonly",
|
|
8439
|
-
"nonoptional"
|
|
8440
|
-
]);
|
|
8441
|
-
/**
|
|
8442
|
-
* The schema layers that make up ONE field: the schema itself and every
|
|
8443
|
-
* wrapper below it (optional / default / nullable / readonly / catch), plus
|
|
8444
|
-
* both sides of a pipe (`z.preprocess` puts the real schema on `out`,
|
|
8445
|
-
* `.transform` on `in`).
|
|
8446
|
-
*/
|
|
8447
|
-
function layersOf(schema) {
|
|
8448
|
-
const out = [];
|
|
8449
|
-
const queue = [schema];
|
|
8450
|
-
while (queue.length > 0) {
|
|
8451
|
-
const s = queue.shift();
|
|
8452
|
-
if (!s || out.includes(s)) continue;
|
|
8453
|
-
out.push(s);
|
|
8454
|
-
const def = defOf(s);
|
|
8455
|
-
if (def.type !== void 0 && WRAPPERS.has(def.type) && def.innerType) queue.push(def.innerType);
|
|
8456
|
-
if (def.type === "pipe") {
|
|
8457
|
-
if (def.in) queue.push(def.in);
|
|
8458
|
-
if (def.out) queue.push(def.out);
|
|
8459
|
-
}
|
|
8460
|
-
}
|
|
8461
|
-
return out;
|
|
8462
|
-
}
|
|
8463
|
-
/** True when any layer of this field declares `.meta({ secret: true })`. */
|
|
8464
|
-
function isZodSecret(schema) {
|
|
8465
|
-
return layersOf(schema).some(declaredHere);
|
|
8466
|
-
}
|
|
8467
|
-
/**
|
|
8468
|
-
* Every declared secret path in a config schema: dotted keys, `[]` for "each
|
|
8469
|
-
* element of this array" (`connection.password`, `rows[].token`). A declared
|
|
8470
|
-
* object or array is reported as one path and not descended into — everything
|
|
8471
|
-
* under it is secret.
|
|
8472
|
-
*/
|
|
8473
|
-
function collectZodSecretPaths(schema, prefix = "") {
|
|
8474
|
-
if (isZodSecret(schema)) return prefix.length > 0 ? [prefix] : [];
|
|
8475
|
-
const paths = [];
|
|
8476
|
-
for (const layer of layersOf(schema)) {
|
|
8477
|
-
const def = defOf(layer);
|
|
8478
|
-
if (def.type === "object" && def.shape) for (const [key, child] of Object.entries(def.shape)) paths.push(...collectZodSecretPaths(child, prefix ? `${prefix}.${key}` : key));
|
|
8479
|
-
else if (def.type === "array" && def.element) paths.push(...collectZodSecretPaths(def.element, `${prefix}[]`));
|
|
8480
|
-
else if (def.type === "union" && def.options) for (const option of def.options) paths.push(...collectZodSecretPaths(option, prefix));
|
|
8481
|
-
else if (def.type === "intersection") {
|
|
8482
|
-
if (def.left) paths.push(...collectZodSecretPaths(def.left, prefix));
|
|
8483
|
-
if (def.right) paths.push(...collectZodSecretPaths(def.right, prefix));
|
|
8484
|
-
}
|
|
8485
|
-
}
|
|
8486
|
-
return [...new Set(paths)];
|
|
8487
|
-
}
|
|
8488
8571
|
/**
|
|
8489
8572
|
* AUTO-GENERATED by scripts/generate-device-scoped-caps.ts — DO NOT EDIT.
|
|
8490
8573
|
*
|
|
@@ -16825,6 +16908,41 @@ var ComposableCapabilitiesSchema = object({ caps: array(object({
|
|
|
16825
16908
|
keyField: string()
|
|
16826
16909
|
}).optional()
|
|
16827
16910
|
})) });
|
|
16911
|
+
/**
|
|
16912
|
+
* The report of a one-shot "move this owner's plaintext secrets into the
|
|
16913
|
+
* keychain" run (D878). COUNTS only - never a value, never a ref.
|
|
16914
|
+
*
|
|
16915
|
+
* The owner runs it on its own rows, through its own write path; an operator
|
|
16916
|
+
* script (`scripts/hub/migrate-raw-secrets.ts`) calls the owner's cap method.
|
|
16917
|
+
* Dry run (`apply: false`) reports what WOULD move and changes nothing.
|
|
16918
|
+
*/
|
|
16919
|
+
var RawSecretMigrationInputSchema = object({
|
|
16920
|
+
/** `false` (the default of the script) = report only. */
|
|
16921
|
+
apply: boolean() });
|
|
16922
|
+
var RawSecretMigrationReportSchema = object({
|
|
16923
|
+
apply: boolean(),
|
|
16924
|
+
/** Rows that can carry a secret (a profile, an enrolment). */
|
|
16925
|
+
rows: number().int(),
|
|
16926
|
+
/** Rows whose secret was plaintext when the run started. */
|
|
16927
|
+
raw: number().int(),
|
|
16928
|
+
/** Rows that already held a keychain marker when the run started. */
|
|
16929
|
+
markers: number().int(),
|
|
16930
|
+
/** Plaintext rows moved by THIS run (always 0 on a dry run). */
|
|
16931
|
+
migrated: number().int(),
|
|
16932
|
+
/** Plaintext rows left in place because the move or its read-back failed. */
|
|
16933
|
+
failed: number().int(),
|
|
16934
|
+
/** After the run: rows still holding plaintext. */
|
|
16935
|
+
remainingRaw: number().int(),
|
|
16936
|
+
/** After the run: markers the keychain could not resolve right now. */
|
|
16937
|
+
unresolvedMarkers: number().int(),
|
|
16938
|
+
/**
|
|
16939
|
+
* A second, redundant copy of the secrets' rows that the run found (and, on
|
|
16940
|
+
* `apply`, deleted after verifying the first). Owners with a single copy omit it.
|
|
16941
|
+
*/
|
|
16942
|
+
redundantCopies: number().int().optional(),
|
|
16943
|
+
/** True when nothing is raw and every marker resolves. */
|
|
16944
|
+
verified: boolean()
|
|
16945
|
+
});
|
|
16828
16946
|
/** The block id behind a generated addon/runner id, or null when the id belongs
|
|
16829
16947
|
* to something else. The inverse of {@link coreBlockAddonId}. */
|
|
16830
16948
|
function coreBlockIdFromAddonId(addonId) {
|
|
@@ -17058,6 +17176,9 @@ method(object({}), object({ blocks: array(CoreBlockSchema) }), { auth: "admin" }
|
|
|
17058
17176
|
}), SettingsUpdateResultSchema, {
|
|
17059
17177
|
kind: "mutation",
|
|
17060
17178
|
auth: "admin"
|
|
17179
|
+
}), method(RawSecretMigrationInputSchema, RawSecretMigrationReportSchema, {
|
|
17180
|
+
kind: "mutation",
|
|
17181
|
+
auth: "admin"
|
|
17061
17182
|
}), method(object({}), object({ libs: array(object({
|
|
17062
17183
|
filePath: string(),
|
|
17063
17184
|
content: string()
|
|
@@ -17320,6 +17441,222 @@ id: union([string(), number()]) }), {
|
|
|
17320
17441
|
kind: "mutation",
|
|
17321
17442
|
auth: "admin"
|
|
17322
17443
|
});
|
|
17444
|
+
/**
|
|
17445
|
+
* records - an addon's own facts and documents (D881): ledgers, audit rows,
|
|
17446
|
+
* config documents, mirrors. The third storage API next to `ctx.settings`
|
|
17447
|
+
* (operator intent, D870) and device-history (numbers over time, D850).
|
|
17448
|
+
*
|
|
17449
|
+
* Who the OWNER is: `callerAddonId`, stamped by the transport on a call that
|
|
17450
|
+
* crossed a process and stated by a hub in-process caller (`ctx.records` does
|
|
17451
|
+
* that with the addon id closed over). It is deliberately NOT in any input
|
|
17452
|
+
* schema, so a session can never supply it, and a call with no stamp is refused
|
|
17453
|
+
* `records/no-caller`. A kind is readable and writable only by its owner; other
|
|
17454
|
+
* addons go through the owner's capability.
|
|
17455
|
+
*
|
|
17456
|
+
* Every read is three-way: a row, `null`, or the call THROWS. A failed read is
|
|
17457
|
+
* never `[]`. Secret fields are never on the wire: a read shows the
|
|
17458
|
+
* redaction token, `secretRefs` hands the owner's `ctx.secrets` the refs it
|
|
17459
|
+
* resolves itself, and a write may carry only a keychain marker bound to the
|
|
17460
|
+
* row's own ref.
|
|
17461
|
+
*
|
|
17462
|
+
* Internal: addons reach it through `ctx.records`, never directly.
|
|
17463
|
+
*/
|
|
17464
|
+
var RecordIdSchema = string().min(1).max(256);
|
|
17465
|
+
/** A JSON object body. Size is the engine's check (`maxDataBytes`), not a schema's. */
|
|
17466
|
+
var RecordBodySchema = record(string(), unknown());
|
|
17467
|
+
var RecordInputSchema = object({
|
|
17468
|
+
id: RecordIdSchema,
|
|
17469
|
+
/** The device this row belongs to (D865 removal, per-device reads). */
|
|
17470
|
+
deviceId: number().int().optional(),
|
|
17471
|
+
/** The domain clock, ms: observed / created / opened. */
|
|
17472
|
+
at: number().int().optional(),
|
|
17473
|
+
/** Producer-set expiry, ms. Refused on a kind whose retention is an engine TTL. */
|
|
17474
|
+
expiresAt: number().int().optional(),
|
|
17475
|
+
data: RecordBodySchema
|
|
17476
|
+
});
|
|
17477
|
+
var RecordViewSchema = object({
|
|
17478
|
+
id: string(),
|
|
17479
|
+
deviceId: number().int().nullable(),
|
|
17480
|
+
at: number().nullable(),
|
|
17481
|
+
expiresAt: number().nullable(),
|
|
17482
|
+
rev: number().int(),
|
|
17483
|
+
updatedAt: number(),
|
|
17484
|
+
data: RecordBodySchema
|
|
17485
|
+
});
|
|
17486
|
+
/** Declared index fields only. Anything else does not compile, by design. */
|
|
17487
|
+
var RecordWhereSchema = record(RecordFieldPathSchema, union([
|
|
17488
|
+
string(),
|
|
17489
|
+
number(),
|
|
17490
|
+
boolean(),
|
|
17491
|
+
object({ in: array(union([
|
|
17492
|
+
string(),
|
|
17493
|
+
number(),
|
|
17494
|
+
boolean()
|
|
17495
|
+
])).min(1).max(RECORD_BATCH_MAX) }),
|
|
17496
|
+
object({
|
|
17497
|
+
gt: union([string(), number()]).optional(),
|
|
17498
|
+
gte: union([string(), number()]).optional(),
|
|
17499
|
+
lt: union([string(), number()]).optional(),
|
|
17500
|
+
lte: union([string(), number()]).optional()
|
|
17501
|
+
}).refine((r) => Object.keys(r).length > 0, { message: "name at least one bound" })
|
|
17502
|
+
]));
|
|
17503
|
+
var KindShape = { kind: RecordKindNameSchema };
|
|
17504
|
+
var TimeWindowShape = {
|
|
17505
|
+
deviceId: number().int().optional(),
|
|
17506
|
+
atFrom: number().optional(),
|
|
17507
|
+
atTo: number().optional()
|
|
17508
|
+
};
|
|
17509
|
+
var RecordQueryInputSchema = object({
|
|
17510
|
+
...KindShape,
|
|
17511
|
+
...TimeWindowShape,
|
|
17512
|
+
where: RecordWhereSchema.optional(),
|
|
17513
|
+
/** Without `where`: `at` (default for a kind with a clock) or `id`. With `where` the order is the index's. */
|
|
17514
|
+
order: _enum(["at", "id"]).optional(),
|
|
17515
|
+
desc: boolean().optional(),
|
|
17516
|
+
limit: number().int().min(1).max(RECORD_QUERY_MAX).default(100),
|
|
17517
|
+
/** Opaque keyset cursor from a previous answer. There is no offset. */
|
|
17518
|
+
cursor: string().min(1).optional()
|
|
17519
|
+
});
|
|
17520
|
+
var RecordQueryResultSchema = object({
|
|
17521
|
+
records: array(RecordViewSchema),
|
|
17522
|
+
nextCursor: string().nullable()
|
|
17523
|
+
});
|
|
17524
|
+
var RecordKindStateSchema = _enum([
|
|
17525
|
+
"created",
|
|
17526
|
+
"unchanged",
|
|
17527
|
+
"updated"
|
|
17528
|
+
]);
|
|
17529
|
+
var DeclareKindResultSchema = object({
|
|
17530
|
+
kindId: number().int(),
|
|
17531
|
+
state: RecordKindStateSchema,
|
|
17532
|
+
createdIndexes: array(string()),
|
|
17533
|
+
/** The boot guard: the kind is empty while its legacy table still holds rows. */
|
|
17534
|
+
adoptionPending: object({
|
|
17535
|
+
legacyTable: string(),
|
|
17536
|
+
legacyRows: number().int()
|
|
17537
|
+
}).nullable()
|
|
17538
|
+
});
|
|
17539
|
+
/** Keychain refs a write released (the old marker is gone from the row): the owner deletes the values. */
|
|
17540
|
+
var SecretRefsList = array(string());
|
|
17541
|
+
var RecordSecretRefsSchema = record(string(), record(string(), string()));
|
|
17542
|
+
method(object({ kinds: record(RecordKindNameSchema, RecordKindDeclarationSchema) }), object({ kinds: record(string(), DeclareKindResultSchema) }), {
|
|
17543
|
+
kind: "mutation",
|
|
17544
|
+
auth: "admin"
|
|
17545
|
+
}), method(object({
|
|
17546
|
+
...KindShape,
|
|
17547
|
+
id: RecordIdSchema
|
|
17548
|
+
}), RecordViewSchema.nullable(), { auth: "admin" }), method(object({
|
|
17549
|
+
...KindShape,
|
|
17550
|
+
ids: array(RecordIdSchema).min(1).max(RECORD_BATCH_MAX)
|
|
17551
|
+
}), array(RecordViewSchema), { auth: "admin" }), method(object({
|
|
17552
|
+
...KindShape,
|
|
17553
|
+
ids: array(RecordIdSchema).min(1).max(RECORD_BATCH_MAX)
|
|
17554
|
+
}), RecordSecretRefsSchema, { auth: "admin" }), method(object({
|
|
17555
|
+
...KindShape,
|
|
17556
|
+
record: RecordInputSchema,
|
|
17557
|
+
/** Compare-and-set. `0` means "the row must not exist". */
|
|
17558
|
+
ifRev: number().int().min(0).optional()
|
|
17559
|
+
}), object({
|
|
17560
|
+
rev: number().int(),
|
|
17561
|
+
releasedRefs: SecretRefsList
|
|
17562
|
+
}), {
|
|
17563
|
+
kind: "mutation",
|
|
17564
|
+
auth: "admin"
|
|
17565
|
+
}), method(object({
|
|
17566
|
+
...KindShape,
|
|
17567
|
+
records: array(RecordInputSchema).min(1).max(RECORD_BATCH_MAX)
|
|
17568
|
+
}), object({
|
|
17569
|
+
count: number().int(),
|
|
17570
|
+
releasedRefs: SecretRefsList
|
|
17571
|
+
}), {
|
|
17572
|
+
kind: "mutation",
|
|
17573
|
+
auth: "admin"
|
|
17574
|
+
}), method(object({
|
|
17575
|
+
...KindShape,
|
|
17576
|
+
id: RecordIdSchema,
|
|
17577
|
+
data: RecordBodySchema,
|
|
17578
|
+
at: number().int().nullable().optional(),
|
|
17579
|
+
expiresAt: number().int().nullable().optional(),
|
|
17580
|
+
ifRev: number().int().min(1).optional()
|
|
17581
|
+
}), object({
|
|
17582
|
+
rev: number().int(),
|
|
17583
|
+
releasedRefs: SecretRefsList
|
|
17584
|
+
}), {
|
|
17585
|
+
kind: "mutation",
|
|
17586
|
+
auth: "admin"
|
|
17587
|
+
}), method(object({
|
|
17588
|
+
...KindShape,
|
|
17589
|
+
id: RecordIdSchema
|
|
17590
|
+
}), object({
|
|
17591
|
+
deleted: boolean(),
|
|
17592
|
+
secretRefs: SecretRefsList
|
|
17593
|
+
}), {
|
|
17594
|
+
kind: "mutation",
|
|
17595
|
+
auth: "admin"
|
|
17596
|
+
}), method(object({
|
|
17597
|
+
...KindShape,
|
|
17598
|
+
ids: array(RecordIdSchema).min(1).max(RECORD_BATCH_MAX)
|
|
17599
|
+
}), object({
|
|
17600
|
+
deleted: number().int(),
|
|
17601
|
+
secretRefs: SecretRefsList
|
|
17602
|
+
}), {
|
|
17603
|
+
kind: "mutation",
|
|
17604
|
+
auth: "admin"
|
|
17605
|
+
}), method(RecordQueryInputSchema, RecordQueryResultSchema, { auth: "admin" }), method(object({
|
|
17606
|
+
...KindShape,
|
|
17607
|
+
...TimeWindowShape,
|
|
17608
|
+
where: RecordWhereSchema.optional()
|
|
17609
|
+
}), object({ count: number().int() }), { auth: "admin" }), method(object({
|
|
17610
|
+
...KindShape,
|
|
17611
|
+
deviceId: number().int().optional(),
|
|
17612
|
+
from: number(),
|
|
17613
|
+
to: number(),
|
|
17614
|
+
bucketMs: number().int().positive()
|
|
17615
|
+
}), object({ buckets: array(object({
|
|
17616
|
+
bucketStart: number(),
|
|
17617
|
+
count: number().int()
|
|
17618
|
+
})) }), { auth: "admin" }), method(object({
|
|
17619
|
+
...KindShape,
|
|
17620
|
+
op: _enum([
|
|
17621
|
+
"sum",
|
|
17622
|
+
"min",
|
|
17623
|
+
"max",
|
|
17624
|
+
"count"
|
|
17625
|
+
]),
|
|
17626
|
+
field: RecordFieldPathSchema.optional(),
|
|
17627
|
+
groupBy: RecordFieldPathSchema.optional(),
|
|
17628
|
+
where: RecordWhereSchema.optional()
|
|
17629
|
+
}), object({ rows: array(object({
|
|
17630
|
+
group: union([
|
|
17631
|
+
string(),
|
|
17632
|
+
number(),
|
|
17633
|
+
_null()
|
|
17634
|
+
]),
|
|
17635
|
+
value: number().nullable()
|
|
17636
|
+
})) }), { auth: "admin" }), method(object({
|
|
17637
|
+
...KindShape,
|
|
17638
|
+
deviceId: number().int().optional(),
|
|
17639
|
+
atBefore: number().optional(),
|
|
17640
|
+
where: RecordWhereSchema.optional()
|
|
17641
|
+
}), object({
|
|
17642
|
+
deleted: number().int(),
|
|
17643
|
+
secretRefs: SecretRefsList
|
|
17644
|
+
}), {
|
|
17645
|
+
kind: "mutation",
|
|
17646
|
+
auth: "admin"
|
|
17647
|
+
}), method(object({
|
|
17648
|
+
deviceId: number().int(),
|
|
17649
|
+
kinds: array(RecordKindNameSchema).optional()
|
|
17650
|
+
}), object({
|
|
17651
|
+
deleted: record(string(), number().int()),
|
|
17652
|
+
secretRefs: SecretRefsList
|
|
17653
|
+
}), {
|
|
17654
|
+
kind: "mutation",
|
|
17655
|
+
auth: "admin"
|
|
17656
|
+
}), method(object(KindShape), object({ id: number().int() }), {
|
|
17657
|
+
kind: "mutation",
|
|
17658
|
+
auth: "admin"
|
|
17659
|
+
});
|
|
17323
17660
|
/** One table of the settings database. */
|
|
17324
17661
|
var StorageTableSchema = object({
|
|
17325
17662
|
/** The table's full name, e.g. `recorder:addon-settings` or `addon-device-settings`. */
|
|
@@ -17332,6 +17669,28 @@ var StorageTableSchema = object({
|
|
|
17332
17669
|
/** Declared by an addon since this engine process started (a running addon claims it). */
|
|
17333
17670
|
declaredThisBoot: boolean()
|
|
17334
17671
|
});
|
|
17672
|
+
/** One declared record kind (D881) as System -> Data shows it. */
|
|
17673
|
+
var StorageKindSchema = object({
|
|
17674
|
+
owner: string(),
|
|
17675
|
+
kind: string(),
|
|
17676
|
+
database: _enum(["settings", "events"]),
|
|
17677
|
+
class: string(),
|
|
17678
|
+
state: _enum([
|
|
17679
|
+
"declared",
|
|
17680
|
+
"orphaned",
|
|
17681
|
+
"dropped"
|
|
17682
|
+
]),
|
|
17683
|
+
/** `null` when the caller asked for no counts (`counts: false`). */
|
|
17684
|
+
rows: number().int().nonnegative().nullable(),
|
|
17685
|
+
/** Rows x the average size of a sample; null for an empty kind. */
|
|
17686
|
+
bytesEstimate: number().int().nonnegative().nullable(),
|
|
17687
|
+
writeTrigger: string(),
|
|
17688
|
+
retention: RecordRetentionSchema,
|
|
17689
|
+
/** `true` when the kind is an entry kind (the generic entries UI lists it). */
|
|
17690
|
+
entry: boolean(),
|
|
17691
|
+
/** The whole declaration, secret paths and entry descriptor included (the entries service builds its handle from it). */
|
|
17692
|
+
declaration: RecordKindDeclarationSchema
|
|
17693
|
+
});
|
|
17335
17694
|
method(object({ ownerPrefix: string().min(1).optional() }), object({ tables: array(StorageTableSchema) }), { auth: "admin" }), method(object({
|
|
17336
17695
|
collection: string().min(1),
|
|
17337
17696
|
expectRows: number().int().nonnegative()
|
|
@@ -17341,6 +17700,77 @@ method(object({ ownerPrefix: string().min(1).optional() }), object({ tables: arr
|
|
|
17341
17700
|
}), {
|
|
17342
17701
|
kind: "mutation",
|
|
17343
17702
|
auth: "admin"
|
|
17703
|
+
}), method(object({
|
|
17704
|
+
owner: string().min(1).optional(),
|
|
17705
|
+
/** `false` skips the per-kind row count (a catalog read only). Default true. */
|
|
17706
|
+
counts: boolean().optional()
|
|
17707
|
+
}), object({ kinds: array(StorageKindSchema) }), { auth: "admin" }), method(RecordQueryInputSchema.extend({
|
|
17708
|
+
owner: string().min(1),
|
|
17709
|
+
kind: RecordKindNameSchema
|
|
17710
|
+
}), RecordQueryResultSchema, { auth: "admin" }), method(object({
|
|
17711
|
+
owner: string().min(1),
|
|
17712
|
+
kind: RecordKindNameSchema,
|
|
17713
|
+
records: array(RecordInputSchema).min(1).max(RECORD_BATCH_MAX),
|
|
17714
|
+
/** The LAST batch: the copy is complete, the boot guard stops asking. */
|
|
17715
|
+
complete: boolean().optional()
|
|
17716
|
+
}), object({ adopted: number().int() }), {
|
|
17717
|
+
kind: "mutation",
|
|
17718
|
+
auth: "admin"
|
|
17719
|
+
});
|
|
17720
|
+
/**
|
|
17721
|
+
* record-entries - the ONE admin surface for every list of user-created entries
|
|
17722
|
+
* (D881): notification targets, brokers, LLM profiles, anything an addon
|
|
17723
|
+
* declares as an ENTRY kind (`entry: { title }` in `defineRecordKinds`).
|
|
17724
|
+
*
|
|
17725
|
+
* The UI is generic. `listEntryKinds` hands it, per kind, the JSON Schema of
|
|
17726
|
+
* the entry body with `secret: true` on every credential field, so a password
|
|
17727
|
+
* field is derived from the schema and never from a name. `putEntry` takes the
|
|
17728
|
+
* redaction token for an untouched secret (the stored value is kept), a string
|
|
17729
|
+
* for a new one, and the clear instruction to remove one. A read never carries
|
|
17730
|
+
* a secret value, and a locked keychain refuses the write with
|
|
17731
|
+
* `records/secret-unavailable` instead of storing plaintext.
|
|
17732
|
+
*
|
|
17733
|
+
* Hub-only, served in-process (it acts for each entry's owner on the keychain).
|
|
17734
|
+
*/
|
|
17735
|
+
var EntryKindInfoSchema = object({
|
|
17736
|
+
owner: string(),
|
|
17737
|
+
kind: RecordKindNameSchema,
|
|
17738
|
+
title: string(),
|
|
17739
|
+
nameField: string(),
|
|
17740
|
+
/** JSON Schema of the body; `secret: true` marks a password field. */
|
|
17741
|
+
fields: record(string(), unknown()),
|
|
17742
|
+
secretPaths: array(string()),
|
|
17743
|
+
rows: number().int().nonnegative()
|
|
17744
|
+
});
|
|
17745
|
+
var EntryViewSchema = object({
|
|
17746
|
+
id: RecordIdSchema,
|
|
17747
|
+
name: string(),
|
|
17748
|
+
rev: number().int(),
|
|
17749
|
+
updatedAt: number(),
|
|
17750
|
+
/** Secret fields hold the redaction token. */
|
|
17751
|
+
data: RecordBodySchema
|
|
17752
|
+
});
|
|
17753
|
+
var EntryAddress = {
|
|
17754
|
+
owner: string().min(1),
|
|
17755
|
+
kind: RecordKindNameSchema
|
|
17756
|
+
};
|
|
17757
|
+
method(object({}), object({ kinds: array(EntryKindInfoSchema) }), { auth: "admin" }), method(object({ ...EntryAddress }), object({ entries: array(EntryViewSchema) }), { auth: "admin" }), method(object({
|
|
17758
|
+
...EntryAddress,
|
|
17759
|
+
id: RecordIdSchema.optional(),
|
|
17760
|
+
data: RecordBodySchema,
|
|
17761
|
+
ifRev: number().int().min(1).optional()
|
|
17762
|
+
}), object({
|
|
17763
|
+
id: string(),
|
|
17764
|
+
rev: number().int()
|
|
17765
|
+
}), {
|
|
17766
|
+
kind: "mutation",
|
|
17767
|
+
auth: "admin"
|
|
17768
|
+
}), method(object({
|
|
17769
|
+
...EntryAddress,
|
|
17770
|
+
id: RecordIdSchema
|
|
17771
|
+
}), object({ deleted: boolean() }), {
|
|
17772
|
+
kind: "mutation",
|
|
17773
|
+
auth: "admin"
|
|
17344
17774
|
});
|
|
17345
17775
|
/**
|
|
17346
17776
|
* `keychain` — the hub's encrypted store of secret values (D787).
|
|
@@ -40486,36 +40916,6 @@ method(LlmRuntimeCompleteInputSchema, LlmGenerateResultSchema, {
|
|
|
40486
40916
|
timeoutMs: AI_CAP_TRANSPORT_TIMEOUT_MS
|
|
40487
40917
|
});
|
|
40488
40918
|
/**
|
|
40489
|
-
* The report of a one-shot "move this owner's plaintext secrets into the
|
|
40490
|
-
* keychain" run (D878). COUNTS only - never a value, never a ref.
|
|
40491
|
-
*
|
|
40492
|
-
* The owner runs it on its own rows, through its own write path; an operator
|
|
40493
|
-
* script (`scripts/hub/migrate-raw-secrets.ts`) calls the owner's cap method.
|
|
40494
|
-
* Dry run (`apply: false`) reports what WOULD move and changes nothing.
|
|
40495
|
-
*/
|
|
40496
|
-
var RawSecretMigrationInputSchema = object({
|
|
40497
|
-
/** `false` (the default of the script) = report only. */
|
|
40498
|
-
apply: boolean() });
|
|
40499
|
-
var RawSecretMigrationReportSchema = object({
|
|
40500
|
-
apply: boolean(),
|
|
40501
|
-
/** Rows that can carry a secret (a profile, an enrolment). */
|
|
40502
|
-
rows: number().int(),
|
|
40503
|
-
/** Rows whose secret was plaintext when the run started. */
|
|
40504
|
-
raw: number().int(),
|
|
40505
|
-
/** Rows that already held a keychain marker when the run started. */
|
|
40506
|
-
markers: number().int(),
|
|
40507
|
-
/** Plaintext rows moved by THIS run (always 0 on a dry run). */
|
|
40508
|
-
migrated: number().int(),
|
|
40509
|
-
/** Plaintext rows left in place because the move or its read-back failed. */
|
|
40510
|
-
failed: number().int(),
|
|
40511
|
-
/** After the run: rows still holding plaintext. */
|
|
40512
|
-
remainingRaw: number().int(),
|
|
40513
|
-
/** After the run: markers the keychain could not resolve right now. */
|
|
40514
|
-
unresolvedMarkers: number().int(),
|
|
40515
|
-
/** True when nothing is raw and every marker resolves. */
|
|
40516
|
-
verified: boolean()
|
|
40517
|
-
});
|
|
40518
|
-
/**
|
|
40519
40919
|
* `llm` — consumer-facing LLM surface (spec §1-§3). Collection-mode: array
|
|
40520
40920
|
* methods concat-fan across providers; single-row methods route to ONE
|
|
40521
40921
|
* provider by the `addonId` in the call input (the notification-output
|
|
@@ -70378,6 +70778,12 @@ Object.freeze({
|
|
|
70378
70778
|
addonId: null,
|
|
70379
70779
|
access: "view"
|
|
70380
70780
|
},
|
|
70781
|
+
"coreBlocks.migrateRawSecrets": {
|
|
70782
|
+
capName: "core-blocks",
|
|
70783
|
+
capScope: "system",
|
|
70784
|
+
addonId: null,
|
|
70785
|
+
access: "create"
|
|
70786
|
+
},
|
|
70381
70787
|
"coreBlocks.restart": {
|
|
70382
70788
|
capName: "core-blocks",
|
|
70383
70789
|
capScope: "system",
|
|
@@ -75130,6 +75536,30 @@ Object.freeze({
|
|
|
75130
75536
|
addonId: null,
|
|
75131
75537
|
access: "create"
|
|
75132
75538
|
},
|
|
75539
|
+
"recordEntries.deleteEntry": {
|
|
75540
|
+
capName: "record-entries",
|
|
75541
|
+
capScope: "system",
|
|
75542
|
+
addonId: null,
|
|
75543
|
+
access: "delete"
|
|
75544
|
+
},
|
|
75545
|
+
"recordEntries.listEntries": {
|
|
75546
|
+
capName: "record-entries",
|
|
75547
|
+
capScope: "system",
|
|
75548
|
+
addonId: null,
|
|
75549
|
+
access: "view"
|
|
75550
|
+
},
|
|
75551
|
+
"recordEntries.listEntryKinds": {
|
|
75552
|
+
capName: "record-entries",
|
|
75553
|
+
capScope: "system",
|
|
75554
|
+
addonId: null,
|
|
75555
|
+
access: "view"
|
|
75556
|
+
},
|
|
75557
|
+
"recordEntries.putEntry": {
|
|
75558
|
+
capName: "record-entries",
|
|
75559
|
+
capScope: "system",
|
|
75560
|
+
addonId: null,
|
|
75561
|
+
access: "create"
|
|
75562
|
+
},
|
|
75133
75563
|
"recording.getAvailability": {
|
|
75134
75564
|
capName: "recording",
|
|
75135
75565
|
capScope: "device",
|
|
@@ -75430,6 +75860,102 @@ Object.freeze({
|
|
|
75430
75860
|
addonId: null,
|
|
75431
75861
|
access: "view"
|
|
75432
75862
|
},
|
|
75863
|
+
"records.aggregate": {
|
|
75864
|
+
capName: "records",
|
|
75865
|
+
capScope: "system",
|
|
75866
|
+
addonId: null,
|
|
75867
|
+
access: "view"
|
|
75868
|
+
},
|
|
75869
|
+
"records.allocateId": {
|
|
75870
|
+
capName: "records",
|
|
75871
|
+
capScope: "system",
|
|
75872
|
+
addonId: null,
|
|
75873
|
+
access: "create"
|
|
75874
|
+
},
|
|
75875
|
+
"records.count": {
|
|
75876
|
+
capName: "records",
|
|
75877
|
+
capScope: "system",
|
|
75878
|
+
addonId: null,
|
|
75879
|
+
access: "view"
|
|
75880
|
+
},
|
|
75881
|
+
"records.declareKinds": {
|
|
75882
|
+
capName: "records",
|
|
75883
|
+
capScope: "system",
|
|
75884
|
+
addonId: null,
|
|
75885
|
+
access: "create"
|
|
75886
|
+
},
|
|
75887
|
+
"records.delete": {
|
|
75888
|
+
capName: "records",
|
|
75889
|
+
capScope: "system",
|
|
75890
|
+
addonId: null,
|
|
75891
|
+
access: "delete"
|
|
75892
|
+
},
|
|
75893
|
+
"records.deleteDevice": {
|
|
75894
|
+
capName: "records",
|
|
75895
|
+
capScope: "system",
|
|
75896
|
+
addonId: null,
|
|
75897
|
+
access: "delete"
|
|
75898
|
+
},
|
|
75899
|
+
"records.deleteMany": {
|
|
75900
|
+
capName: "records",
|
|
75901
|
+
capScope: "system",
|
|
75902
|
+
addonId: null,
|
|
75903
|
+
access: "delete"
|
|
75904
|
+
},
|
|
75905
|
+
"records.deleteWhere": {
|
|
75906
|
+
capName: "records",
|
|
75907
|
+
capScope: "system",
|
|
75908
|
+
addonId: null,
|
|
75909
|
+
access: "delete"
|
|
75910
|
+
},
|
|
75911
|
+
"records.get": {
|
|
75912
|
+
capName: "records",
|
|
75913
|
+
capScope: "system",
|
|
75914
|
+
addonId: null,
|
|
75915
|
+
access: "view"
|
|
75916
|
+
},
|
|
75917
|
+
"records.getMany": {
|
|
75918
|
+
capName: "records",
|
|
75919
|
+
capScope: "system",
|
|
75920
|
+
addonId: null,
|
|
75921
|
+
access: "view"
|
|
75922
|
+
},
|
|
75923
|
+
"records.histogram": {
|
|
75924
|
+
capName: "records",
|
|
75925
|
+
capScope: "system",
|
|
75926
|
+
addonId: null,
|
|
75927
|
+
access: "view"
|
|
75928
|
+
},
|
|
75929
|
+
"records.patch": {
|
|
75930
|
+
capName: "records",
|
|
75931
|
+
capScope: "system",
|
|
75932
|
+
addonId: null,
|
|
75933
|
+
access: "create"
|
|
75934
|
+
},
|
|
75935
|
+
"records.put": {
|
|
75936
|
+
capName: "records",
|
|
75937
|
+
capScope: "system",
|
|
75938
|
+
addonId: null,
|
|
75939
|
+
access: "create"
|
|
75940
|
+
},
|
|
75941
|
+
"records.putMany": {
|
|
75942
|
+
capName: "records",
|
|
75943
|
+
capScope: "system",
|
|
75944
|
+
addonId: null,
|
|
75945
|
+
access: "create"
|
|
75946
|
+
},
|
|
75947
|
+
"records.query": {
|
|
75948
|
+
capName: "records",
|
|
75949
|
+
capScope: "system",
|
|
75950
|
+
addonId: null,
|
|
75951
|
+
access: "view"
|
|
75952
|
+
},
|
|
75953
|
+
"records.secretRefs": {
|
|
75954
|
+
capName: "records",
|
|
75955
|
+
capScope: "system",
|
|
75956
|
+
addonId: null,
|
|
75957
|
+
access: "view"
|
|
75958
|
+
},
|
|
75433
75959
|
"sceneMonitor.captureReference": {
|
|
75434
75960
|
capName: "scene-monitor",
|
|
75435
75961
|
capScope: "device",
|
|
@@ -75862,18 +76388,36 @@ Object.freeze({
|
|
|
75862
76388
|
addonId: null,
|
|
75863
76389
|
access: "create"
|
|
75864
76390
|
},
|
|
76391
|
+
"storageAdmin.adoptRecords": {
|
|
76392
|
+
capName: "storage-admin",
|
|
76393
|
+
capScope: "system",
|
|
76394
|
+
addonId: null,
|
|
76395
|
+
access: "create"
|
|
76396
|
+
},
|
|
75865
76397
|
"storageAdmin.dropCollection": {
|
|
75866
76398
|
capName: "storage-admin",
|
|
75867
76399
|
capScope: "system",
|
|
75868
76400
|
addonId: null,
|
|
75869
76401
|
access: "delete"
|
|
75870
76402
|
},
|
|
76403
|
+
"storageAdmin.listKinds": {
|
|
76404
|
+
capName: "storage-admin",
|
|
76405
|
+
capScope: "system",
|
|
76406
|
+
addonId: null,
|
|
76407
|
+
access: "view"
|
|
76408
|
+
},
|
|
75871
76409
|
"storageAdmin.listTables": {
|
|
75872
76410
|
capName: "storage-admin",
|
|
75873
76411
|
capScope: "system",
|
|
75874
76412
|
addonId: null,
|
|
75875
76413
|
access: "view"
|
|
75876
76414
|
},
|
|
76415
|
+
"storageAdmin.readRecords": {
|
|
76416
|
+
capName: "storage-admin",
|
|
76417
|
+
capScope: "system",
|
|
76418
|
+
addonId: null,
|
|
76419
|
+
access: "view"
|
|
76420
|
+
},
|
|
75877
76421
|
"storageEvictable.evict": {
|
|
75878
76422
|
capName: "storage-evictable",
|
|
75879
76423
|
capScope: "system",
|
|
@@ -79468,6 +80012,37 @@ Object.freeze({
|
|
|
79468
80012
|
form: "single",
|
|
79469
80013
|
optional: false
|
|
79470
80014
|
}],
|
|
80015
|
+
"records.count": [{
|
|
80016
|
+
name: "deviceId",
|
|
80017
|
+
form: "single",
|
|
80018
|
+
optional: true
|
|
80019
|
+
}],
|
|
80020
|
+
"records.deleteDevice": [{
|
|
80021
|
+
name: "deviceId",
|
|
80022
|
+
form: "single",
|
|
80023
|
+
optional: false
|
|
80024
|
+
}],
|
|
80025
|
+
"records.deleteWhere": [{
|
|
80026
|
+
name: "deviceId",
|
|
80027
|
+
form: "single",
|
|
80028
|
+
optional: true
|
|
80029
|
+
}],
|
|
80030
|
+
"records.histogram": [{
|
|
80031
|
+
name: "deviceId",
|
|
80032
|
+
form: "single",
|
|
80033
|
+
optional: true
|
|
80034
|
+
}],
|
|
80035
|
+
"records.putMany": [{
|
|
80036
|
+
name: "records",
|
|
80037
|
+
form: "object-array",
|
|
80038
|
+
optional: false,
|
|
80039
|
+
itemField: "deviceId"
|
|
80040
|
+
}],
|
|
80041
|
+
"records.query": [{
|
|
80042
|
+
name: "deviceId",
|
|
80043
|
+
form: "single",
|
|
80044
|
+
optional: true
|
|
80045
|
+
}],
|
|
79471
80046
|
"sceneMonitor.captureReference": [{
|
|
79472
80047
|
name: "deviceId",
|
|
79473
80048
|
form: "single",
|
|
@@ -79584,6 +80159,17 @@ Object.freeze({
|
|
|
79584
80159
|
form: "single",
|
|
79585
80160
|
optional: false
|
|
79586
80161
|
}],
|
|
80162
|
+
"storageAdmin.adoptRecords": [{
|
|
80163
|
+
name: "records",
|
|
80164
|
+
form: "object-array",
|
|
80165
|
+
optional: false,
|
|
80166
|
+
itemField: "deviceId"
|
|
80167
|
+
}],
|
|
80168
|
+
"storageAdmin.readRecords": [{
|
|
80169
|
+
name: "deviceId",
|
|
80170
|
+
form: "single",
|
|
80171
|
+
optional: true
|
|
80172
|
+
}],
|
|
79587
80173
|
"streamBroker.acquireEgressTranscode": [{
|
|
79588
80174
|
name: "deviceId",
|
|
79589
80175
|
form: "single",
|