camstack 1.2.181 → 1.2.183
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/{chunk-4MQR56VQ.js → chunk-RBYTYOMU.js} +1470 -152
- package/dist/cli.js +227 -54
- package/dist/{discover-LW74552N.js → discover-YKSDGTPX.js} +1 -1
- package/dist/{launcher-TUOJ3PCS.js → launcher-TTEJZCJA.js} +152249 -131679
- package/package.json +1 -1
|
@@ -14681,7 +14681,7 @@ function date4(params) {
|
|
|
14681
14681
|
// ../../node_modules/zod/v4/classic/external.js
|
|
14682
14682
|
config(en_default());
|
|
14683
14683
|
|
|
14684
|
-
// ../types/dist/sleep-
|
|
14684
|
+
// ../types/dist/sleep-DwAQ9sqX.mjs
|
|
14685
14685
|
var AUDIO_CHUNK_FORMATS = [
|
|
14686
14686
|
"f32le",
|
|
14687
14687
|
"pcmu",
|
|
@@ -16264,6 +16264,19 @@ var CompositionSchema = external_exports.object({
|
|
|
16264
16264
|
});
|
|
16265
16265
|
});
|
|
16266
16266
|
|
|
16267
|
+
// ../types/dist/node-color.mjs
|
|
16268
|
+
var NODE_COLOR_IDS = [
|
|
16269
|
+
"node-a",
|
|
16270
|
+
"node-b",
|
|
16271
|
+
"node-c",
|
|
16272
|
+
"node-d",
|
|
16273
|
+
"node-e",
|
|
16274
|
+
"node-f",
|
|
16275
|
+
"node-g",
|
|
16276
|
+
"node-h"
|
|
16277
|
+
];
|
|
16278
|
+
var NodeColorIdSchema = external_exports.enum(NODE_COLOR_IDS);
|
|
16279
|
+
|
|
16267
16280
|
// ../types/dist/index.mjs
|
|
16268
16281
|
var MEDIA_OWNER_TYPES = [
|
|
16269
16282
|
"track",
|
|
@@ -16554,6 +16567,254 @@ var CameraSwitchGroupSchema = external_exports.object({
|
|
|
16554
16567
|
/** Unix ms when the group was composed server-side. */
|
|
16555
16568
|
fetchedAt: external_exports.number()
|
|
16556
16569
|
});
|
|
16570
|
+
var TRAINING_JOB_SCHEMA = "camstack.training/v1";
|
|
16571
|
+
var TRAINING_RESULT_SCHEMA = "camstack.training-result/v1";
|
|
16572
|
+
var TrainingExportSchema = external_exports.enum([
|
|
16573
|
+
"onnx",
|
|
16574
|
+
"openvino-fp16",
|
|
16575
|
+
"openvino-int8",
|
|
16576
|
+
"coreml-fp16"
|
|
16577
|
+
]);
|
|
16578
|
+
var FloorsSchema = external_exports.record(external_exports.string(), external_exports.number().min(0).max(1));
|
|
16579
|
+
var TrainingJobSpecSchema = external_exports.object({
|
|
16580
|
+
schema: external_exports.literal(TRAINING_JOB_SCHEMA),
|
|
16581
|
+
jobKey: external_exports.string().uuid(),
|
|
16582
|
+
target: external_exports.object({
|
|
16583
|
+
kind: external_exports.literal("detector"),
|
|
16584
|
+
step: external_exports.literal("object-detection")
|
|
16585
|
+
}),
|
|
16586
|
+
base: external_exports.object({
|
|
16587
|
+
modelId: external_exports.string().min(1),
|
|
16588
|
+
/** Ultralytics weights id, e.g. `yolov9m.pt`. */
|
|
16589
|
+
weights: external_exports.string().min(1),
|
|
16590
|
+
imgsz: external_exports.number().int().positive()
|
|
16591
|
+
}),
|
|
16592
|
+
baseline: external_exports.object({
|
|
16593
|
+
modelId: external_exports.string().min(1),
|
|
16594
|
+
/** The baseline ONNX the holdout comparison runs; public mirror URL. */
|
|
16595
|
+
onnxUrl: external_exports.string().url(),
|
|
16596
|
+
imgsz: external_exports.number().int().positive(),
|
|
16597
|
+
floors: FloorsSchema
|
|
16598
|
+
}),
|
|
16599
|
+
dataset: external_exports.object({
|
|
16600
|
+
versionId: external_exports.string().min(1),
|
|
16601
|
+
annotationHash: external_exports.string(),
|
|
16602
|
+
/** sha256 of the uploaded archive; the trainer refuses a mismatch (exit 65). */
|
|
16603
|
+
sha256: external_exports.string().regex(/^[0-9a-f]{64}$/)
|
|
16604
|
+
}),
|
|
16605
|
+
split: external_exports.object({
|
|
16606
|
+
holdoutCameras: external_exports.array(external_exports.number().int()),
|
|
16607
|
+
/** When no camera is held out: the last N days of every camera. */
|
|
16608
|
+
holdoutLastDays: external_exports.number().int().nonnegative(),
|
|
16609
|
+
valFraction: external_exports.number().min(0).max(0.5),
|
|
16610
|
+
seed: external_exports.number().int()
|
|
16611
|
+
}),
|
|
16612
|
+
hyper: external_exports.object({
|
|
16613
|
+
epochs: external_exports.number().int().positive(),
|
|
16614
|
+
batch: external_exports.number().int().positive(),
|
|
16615
|
+
lr0: external_exports.number().positive(),
|
|
16616
|
+
/** Layers frozen from the start of the backbone; 0 = none. */
|
|
16617
|
+
freeze: external_exports.number().int().nonnegative(),
|
|
16618
|
+
patience: external_exports.number().int().nonnegative(),
|
|
16619
|
+
seed: external_exports.number().int()
|
|
16620
|
+
}),
|
|
16621
|
+
replay: external_exports.object({
|
|
16622
|
+
source: external_exports.literal("coco2017"),
|
|
16623
|
+
count: external_exports.number().int().nonnegative()
|
|
16624
|
+
}),
|
|
16625
|
+
exports: external_exports.array(TrainingExportSchema).min(1),
|
|
16626
|
+
calibration: external_exports.object({ maxFrames: external_exports.number().int().positive() }),
|
|
16627
|
+
floors: external_exports.object({
|
|
16628
|
+
minSupport: external_exports.number().int().positive(),
|
|
16629
|
+
clamp: external_exports.number().min(0).max(1)
|
|
16630
|
+
}),
|
|
16631
|
+
int8Gate: external_exports.object({ maxMap50Drop: external_exports.number().min(0).max(1) }),
|
|
16632
|
+
catalog: external_exports.object({
|
|
16633
|
+
id: external_exports.string().regex(/^[a-z0-9][a-z0-9-]{2,80}$/),
|
|
16634
|
+
name: external_exports.string().min(1).max(160)
|
|
16635
|
+
})
|
|
16636
|
+
});
|
|
16637
|
+
var TrainingResultFileSchema = external_exports.object({
|
|
16638
|
+
path: external_exports.string().min(1),
|
|
16639
|
+
bytes: external_exports.number().int().nonnegative(),
|
|
16640
|
+
sha256: external_exports.string().regex(/^[0-9a-f]{64}$/),
|
|
16641
|
+
format: external_exports.enum([
|
|
16642
|
+
"onnx",
|
|
16643
|
+
"openvino",
|
|
16644
|
+
"coreml",
|
|
16645
|
+
"pt"
|
|
16646
|
+
]),
|
|
16647
|
+
variant: external_exports.enum(["base", "int8"])
|
|
16648
|
+
});
|
|
16649
|
+
var DraftFormatSchema = external_exports.object({
|
|
16650
|
+
/** RELATIVE path inside the bundle; the hub rewrites it to `camstack-local://`. */
|
|
16651
|
+
url: external_exports.string().min(1),
|
|
16652
|
+
sizeMB: external_exports.number().nonnegative(),
|
|
16653
|
+
isDirectory: external_exports.boolean().optional(),
|
|
16654
|
+
files: external_exports.array(external_exports.string()).optional(),
|
|
16655
|
+
runtimes: external_exports.array(external_exports.literal("python")).optional(),
|
|
16656
|
+
revision: external_exports.string().min(1)
|
|
16657
|
+
});
|
|
16658
|
+
var TrainingCatalogDraftSchema = external_exports.object({
|
|
16659
|
+
id: external_exports.string().min(1),
|
|
16660
|
+
name: external_exports.string().min(1),
|
|
16661
|
+
description: external_exports.string(),
|
|
16662
|
+
labels: external_exports.array(external_exports.unknown()),
|
|
16663
|
+
inputSize: external_exports.object({
|
|
16664
|
+
width: external_exports.number().int().positive(),
|
|
16665
|
+
height: external_exports.number().int().positive()
|
|
16666
|
+
}),
|
|
16667
|
+
preprocessMode: external_exports.literal("letterbox"),
|
|
16668
|
+
defaultClassFloors: FloorsSchema,
|
|
16669
|
+
formats: external_exports.object({
|
|
16670
|
+
onnx: DraftFormatSchema.optional(),
|
|
16671
|
+
openvino: DraftFormatSchema.optional(),
|
|
16672
|
+
coreml: DraftFormatSchema.optional()
|
|
16673
|
+
})
|
|
16674
|
+
});
|
|
16675
|
+
var TrainingEvalClassSchema = external_exports.object({
|
|
16676
|
+
positives: external_exports.number().int(),
|
|
16677
|
+
floor: external_exports.number().nullable(),
|
|
16678
|
+
tp: external_exports.number().int(),
|
|
16679
|
+
fp: external_exports.number().int(),
|
|
16680
|
+
fn: external_exports.number().int(),
|
|
16681
|
+
precision: external_exports.number().nullable(),
|
|
16682
|
+
recall: external_exports.number().nullable(),
|
|
16683
|
+
ap50: external_exports.number().nullable(),
|
|
16684
|
+
recallByCamera: external_exports.record(external_exports.string(), external_exports.number().nullable()).optional(),
|
|
16685
|
+
recallByLight: external_exports.record(external_exports.string(), external_exports.number().nullable()).optional(),
|
|
16686
|
+
fpByCamera: external_exports.record(external_exports.string(), external_exports.number()).optional(),
|
|
16687
|
+
smallFound: external_exports.number().int().optional(),
|
|
16688
|
+
smallTotal: external_exports.number().int().optional()
|
|
16689
|
+
}).passthrough();
|
|
16690
|
+
var TrainingEvalReportSchema = external_exports.object({
|
|
16691
|
+
frames: external_exports.number().int(),
|
|
16692
|
+
classes: external_exports.record(external_exports.string(), TrainingEvalClassSchema)
|
|
16693
|
+
}).passthrough();
|
|
16694
|
+
var TrainingResultSchema = external_exports.object({
|
|
16695
|
+
schema: external_exports.literal(TRAINING_RESULT_SCHEMA),
|
|
16696
|
+
jobKey: external_exports.string(),
|
|
16697
|
+
status: external_exports.enum(["succeeded", "failed"]),
|
|
16698
|
+
error: external_exports.object({
|
|
16699
|
+
stage: external_exports.string(),
|
|
16700
|
+
code: external_exports.string(),
|
|
16701
|
+
message: external_exports.string()
|
|
16702
|
+
}).nullable(),
|
|
16703
|
+
trainer: external_exports.object({
|
|
16704
|
+
version: external_exports.string(),
|
|
16705
|
+
revision: external_exports.string()
|
|
16706
|
+
}),
|
|
16707
|
+
toolchain: external_exports.record(external_exports.string(), external_exports.string().nullable()),
|
|
16708
|
+
dataset: external_exports.object({
|
|
16709
|
+
versionId: external_exports.string(),
|
|
16710
|
+
annotationHash: external_exports.string(),
|
|
16711
|
+
sha256: external_exports.string(),
|
|
16712
|
+
frames: external_exports.object({
|
|
16713
|
+
train: external_exports.number().int(),
|
|
16714
|
+
val: external_exports.number().int(),
|
|
16715
|
+
holdout: external_exports.number().int()
|
|
16716
|
+
}),
|
|
16717
|
+
holdoutCameras: external_exports.array(external_exports.number().int()),
|
|
16718
|
+
replayImages: external_exports.number().int()
|
|
16719
|
+
}).optional(),
|
|
16720
|
+
training: external_exports.object({
|
|
16721
|
+
epochsRun: external_exports.number().int(),
|
|
16722
|
+
bestEpoch: external_exports.number().int(),
|
|
16723
|
+
bestMap50: external_exports.number(),
|
|
16724
|
+
bestMap50_95: external_exports.number(),
|
|
16725
|
+
seconds: external_exports.number()
|
|
16726
|
+
}).optional(),
|
|
16727
|
+
evaluation: external_exports.object({
|
|
16728
|
+
holdoutFrames: external_exports.number().int(),
|
|
16729
|
+
baseline: TrainingEvalReportSchema.nullable(),
|
|
16730
|
+
candidate: TrainingEvalReportSchema.nullable(),
|
|
16731
|
+
candidateInt8: TrainingEvalReportSchema.nullable(),
|
|
16732
|
+
recallDeltaByCamera: external_exports.record(external_exports.string(), external_exports.record(external_exports.string(), external_exports.number())).nullable(),
|
|
16733
|
+
map50: external_exports.record(external_exports.string(), external_exports.number().nullable())
|
|
16734
|
+
}).optional(),
|
|
16735
|
+
floors: external_exports.object({
|
|
16736
|
+
baseline: FloorsSchema,
|
|
16737
|
+
candidate: FloorsSchema,
|
|
16738
|
+
candidateInt8: FloorsSchema.nullable(),
|
|
16739
|
+
notes: external_exports.array(external_exports.string())
|
|
16740
|
+
}).optional(),
|
|
16741
|
+
int8: external_exports.object({
|
|
16742
|
+
kept: external_exports.boolean(),
|
|
16743
|
+
map50Fp16: external_exports.number().nullable(),
|
|
16744
|
+
map50Int8: external_exports.number().nullable(),
|
|
16745
|
+
reason: external_exports.string().nullable()
|
|
16746
|
+
}).optional(),
|
|
16747
|
+
exportsDropped: external_exports.array(external_exports.object({
|
|
16748
|
+
export: external_exports.string(),
|
|
16749
|
+
reason: external_exports.string()
|
|
16750
|
+
})).optional(),
|
|
16751
|
+
files: external_exports.array(TrainingResultFileSchema).optional(),
|
|
16752
|
+
bundle: external_exports.object({
|
|
16753
|
+
path: external_exports.literal("bundle.tar"),
|
|
16754
|
+
bytes: external_exports.number().int().nonnegative(),
|
|
16755
|
+
sha256: external_exports.string().regex(/^[0-9a-f]{64}$/)
|
|
16756
|
+
}).nullable().optional(),
|
|
16757
|
+
catalogDraft: external_exports.object({
|
|
16758
|
+
base: TrainingCatalogDraftSchema,
|
|
16759
|
+
int8: TrainingCatalogDraftSchema.nullable()
|
|
16760
|
+
}).nullable().optional(),
|
|
16761
|
+
licence: external_exports.string()
|
|
16762
|
+
});
|
|
16763
|
+
var TrainingStageSchema = external_exports.enum([
|
|
16764
|
+
"prepare",
|
|
16765
|
+
"replay",
|
|
16766
|
+
"train",
|
|
16767
|
+
"eval",
|
|
16768
|
+
"export",
|
|
16769
|
+
"package"
|
|
16770
|
+
]);
|
|
16771
|
+
var EventBase = {
|
|
16772
|
+
v: external_exports.literal(1),
|
|
16773
|
+
ts: external_exports.number()
|
|
16774
|
+
};
|
|
16775
|
+
var TrainingEventSchema = external_exports.discriminatedUnion("type", [
|
|
16776
|
+
external_exports.object({
|
|
16777
|
+
...EventBase,
|
|
16778
|
+
type: external_exports.literal("stage"),
|
|
16779
|
+
stage: TrainingStageSchema
|
|
16780
|
+
}),
|
|
16781
|
+
external_exports.object({
|
|
16782
|
+
...EventBase,
|
|
16783
|
+
type: external_exports.literal("epoch"),
|
|
16784
|
+
epoch: external_exports.number().int(),
|
|
16785
|
+
epochs: external_exports.number().int(),
|
|
16786
|
+
boxLoss: external_exports.number().nullable().optional(),
|
|
16787
|
+
map50: external_exports.number().nullable().optional(),
|
|
16788
|
+
map50_95: external_exports.number().nullable().optional(),
|
|
16789
|
+
etaSec: external_exports.number().nullable().optional()
|
|
16790
|
+
}),
|
|
16791
|
+
external_exports.object({
|
|
16792
|
+
...EventBase,
|
|
16793
|
+
type: external_exports.literal("metric"),
|
|
16794
|
+
name: external_exports.string(),
|
|
16795
|
+
value: external_exports.number()
|
|
16796
|
+
}),
|
|
16797
|
+
external_exports.object({
|
|
16798
|
+
...EventBase,
|
|
16799
|
+
type: external_exports.literal("artifact"),
|
|
16800
|
+
path: external_exports.string(),
|
|
16801
|
+
bytes: external_exports.number(),
|
|
16802
|
+
sha256: external_exports.string()
|
|
16803
|
+
}),
|
|
16804
|
+
external_exports.object({
|
|
16805
|
+
...EventBase,
|
|
16806
|
+
type: external_exports.literal("done"),
|
|
16807
|
+
status: external_exports.enum(["succeeded", "failed"]),
|
|
16808
|
+
resultSha256: external_exports.string().nullable().optional()
|
|
16809
|
+
}),
|
|
16810
|
+
external_exports.object({
|
|
16811
|
+
...EventBase,
|
|
16812
|
+
type: external_exports.literal("error"),
|
|
16813
|
+
stage: external_exports.string(),
|
|
16814
|
+
code: external_exports.string(),
|
|
16815
|
+
message: external_exports.string()
|
|
16816
|
+
})
|
|
16817
|
+
]);
|
|
16557
16818
|
var BirthDecisionVerdictSchema = external_exports.enum([
|
|
16558
16819
|
"confirmed",
|
|
16559
16820
|
"suppressed",
|
|
@@ -18230,7 +18491,9 @@ var AddonHttpRouteSchema = external_exports.object({
|
|
|
18230
18491
|
"authenticated",
|
|
18231
18492
|
"admin"
|
|
18232
18493
|
]).optional(),
|
|
18233
|
-
description: external_exports.string().optional()
|
|
18494
|
+
description: external_exports.string().optional(),
|
|
18495
|
+
/** The hub limits this route per client address before the handler runs. */
|
|
18496
|
+
rateLimit: external_exports.enum(["auth"]).optional()
|
|
18234
18497
|
});
|
|
18235
18498
|
var InvokeRequestSchema = external_exports.object({
|
|
18236
18499
|
method: external_exports.string(),
|
|
@@ -18940,6 +19203,26 @@ var BackupDestinationInfoSchema = external_exports.object({
|
|
|
18940
19203
|
*/
|
|
18941
19204
|
lastError: external_exports.string().optional()
|
|
18942
19205
|
});
|
|
19206
|
+
var BackupArchiveEncryptionSchema = external_exports.object({
|
|
19207
|
+
/** `x25519-hkdf-aes256gcm-stream-v1`. */
|
|
19208
|
+
scheme: external_exports.string(),
|
|
19209
|
+
/** 16 hex — the backup key whose secret restores this archive. */
|
|
19210
|
+
keyId: external_exports.string()
|
|
19211
|
+
});
|
|
19212
|
+
var BackupEncryptionStatusSchema = external_exports.object({
|
|
19213
|
+
enabled: external_exports.boolean(),
|
|
19214
|
+
active: external_exports.object({
|
|
19215
|
+
keyId: external_exports.string(),
|
|
19216
|
+
publicKey: external_exports.string(),
|
|
19217
|
+
createdAt: external_exports.number()
|
|
19218
|
+
}).nullable(),
|
|
19219
|
+
/** Every key ever set up, newest first. */
|
|
19220
|
+
keys: external_exports.array(external_exports.object({
|
|
19221
|
+
keyId: external_exports.string(),
|
|
19222
|
+
createdAt: external_exports.number(),
|
|
19223
|
+
retiredAt: external_exports.number().nullable()
|
|
19224
|
+
})).readonly()
|
|
19225
|
+
});
|
|
18943
19226
|
var BackupArchiveEntrySchema = external_exports.object({
|
|
18944
19227
|
id: external_exports.string(),
|
|
18945
19228
|
filename: external_exports.string(),
|
|
@@ -18947,7 +19230,9 @@ var BackupArchiveEntrySchema = external_exports.object({
|
|
|
18947
19230
|
sizeBytes: external_exports.number(),
|
|
18948
19231
|
label: external_exports.string().optional(),
|
|
18949
19232
|
/** Top-level locations included in the archive (db, addons, tls, …). */
|
|
18950
|
-
locations: external_exports.array(external_exports.string()).readonly()
|
|
19233
|
+
locations: external_exports.array(external_exports.string()).readonly(),
|
|
19234
|
+
/** Present when the archive is encrypted; restore then needs that key. */
|
|
19235
|
+
encryption: BackupArchiveEncryptionSchema.optional()
|
|
18951
19236
|
});
|
|
18952
19237
|
var BackupEntrySchema = external_exports.object({
|
|
18953
19238
|
id: external_exports.string(),
|
|
@@ -18956,7 +19241,8 @@ var BackupEntrySchema = external_exports.object({
|
|
|
18956
19241
|
label: external_exports.string().optional(),
|
|
18957
19242
|
createdAt: external_exports.number(),
|
|
18958
19243
|
sizeBytes: external_exports.number(),
|
|
18959
|
-
locations: external_exports.array(external_exports.string()).optional()
|
|
19244
|
+
locations: external_exports.array(external_exports.string()).optional(),
|
|
19245
|
+
encryption: BackupArchiveEncryptionSchema.optional()
|
|
18960
19246
|
});
|
|
18961
19247
|
var ArchiveEntrySchema = external_exports.object({
|
|
18962
19248
|
path: external_exports.string(),
|
|
@@ -19169,11 +19455,58 @@ var backupCapability = {
|
|
|
19169
19455
|
* this list and skips entries whose path doesn't start with
|
|
19170
19456
|
* any of them.
|
|
19171
19457
|
*/
|
|
19172
|
-
locations: external_exports.array(external_exports.string()).optional()
|
|
19458
|
+
locations: external_exports.array(external_exports.string()).optional(),
|
|
19459
|
+
/**
|
|
19460
|
+
* The backup SECRET key, for an encrypted archive (ignored for a plain
|
|
19461
|
+
* one). The archive is decrypted into the hub's private staging
|
|
19462
|
+
* before the restart; the key is not stored. A wrong or missing key
|
|
19463
|
+
* is refused before the archive is downloaded.
|
|
19464
|
+
*/
|
|
19465
|
+
backupSecretKey: external_exports.string().optional()
|
|
19173
19466
|
}), external_exports.void(), {
|
|
19174
19467
|
kind: "mutation",
|
|
19175
19468
|
auth: "admin"
|
|
19176
19469
|
}),
|
|
19470
|
+
/** The encryption setting — public keys only. */
|
|
19471
|
+
getEncryption: method(external_exports.void(), BackupEncryptionStatusSchema, { auth: "admin" }),
|
|
19472
|
+
/**
|
|
19473
|
+
* Turn encryption on, or replace the key: generates a new key pair, keeps
|
|
19474
|
+
* the PUBLIC key, and returns the SECRET key — once. It is never stored
|
|
19475
|
+
* on the hub and cannot be shown again; archives made from now on need
|
|
19476
|
+
* it to be restored. A previous key is retired: archives made with it
|
|
19477
|
+
* still need IT.
|
|
19478
|
+
*/
|
|
19479
|
+
setupEncryption: method(external_exports.object({}), external_exports.object({
|
|
19480
|
+
keyId: external_exports.string(),
|
|
19481
|
+
secretKey: external_exports.string(),
|
|
19482
|
+
publicKey: external_exports.string(),
|
|
19483
|
+
createdAt: external_exports.number(),
|
|
19484
|
+
replacedKeyId: external_exports.string().nullable()
|
|
19485
|
+
}), {
|
|
19486
|
+
kind: "mutation",
|
|
19487
|
+
auth: "admin"
|
|
19488
|
+
}),
|
|
19489
|
+
/** New archives are plain again. Existing encrypted archives keep needing their key. */
|
|
19490
|
+
disableEncryption: method(external_exports.object({}), external_exports.object({ disabledKeyId: external_exports.string().nullable() }), {
|
|
19491
|
+
kind: "mutation",
|
|
19492
|
+
auth: "admin"
|
|
19493
|
+
}),
|
|
19494
|
+
/**
|
|
19495
|
+
* Does this secret key parse, and which backup key is it? A mutation so
|
|
19496
|
+
* the key never travels in a URL. Nothing is stored.
|
|
19497
|
+
*/
|
|
19498
|
+
checkBackupKey: method(external_exports.object({ backupSecretKey: external_exports.string() }), external_exports.object({
|
|
19499
|
+
valid: external_exports.boolean(),
|
|
19500
|
+
keyId: external_exports.string().nullable(),
|
|
19501
|
+
/** The hub knows this key (active or retired). */
|
|
19502
|
+
known: external_exports.boolean(),
|
|
19503
|
+
/** It is the key new archives are encrypted to. */
|
|
19504
|
+
active: external_exports.boolean(),
|
|
19505
|
+
error: external_exports.string().optional()
|
|
19506
|
+
}), {
|
|
19507
|
+
kind: "mutation",
|
|
19508
|
+
auth: "admin"
|
|
19509
|
+
}),
|
|
19177
19510
|
delete: method(external_exports.object({
|
|
19178
19511
|
destinationId: external_exports.string(),
|
|
19179
19512
|
backupId: external_exports.string()
|
|
@@ -21121,6 +21454,54 @@ var CustomModelDescriptorSchema = external_exports.object({
|
|
|
21121
21454
|
stepId: external_exports.string(),
|
|
21122
21455
|
entry: ModelCatalogEntrySchema
|
|
21123
21456
|
});
|
|
21457
|
+
var ModelBundleFileSchema = external_exports.object({
|
|
21458
|
+
/** Relative path inside the bundle tar; an mlpackage member is `<x>.mlpackage/<member>`. */
|
|
21459
|
+
path: external_exports.string().min(1),
|
|
21460
|
+
bytes: external_exports.number().int().nonnegative(),
|
|
21461
|
+
sha256: external_exports.string().regex(/^[0-9a-f]{64}$/)
|
|
21462
|
+
});
|
|
21463
|
+
var ImportModelBundleInputSchema = external_exports.object({
|
|
21464
|
+
/** The registry provider that keeps the model (Model Studio). */
|
|
21465
|
+
addonId: external_exports.string(),
|
|
21466
|
+
stepId: external_exports.string().min(1),
|
|
21467
|
+
/**
|
|
21468
|
+
* The catalog rows to register, complete, every format URL already
|
|
21469
|
+
* `camstack-local://<modelId>/<file>` naming a file of the bundle. One
|
|
21470
|
+
* bundle may carry several rows (a base and its INT8 variant).
|
|
21471
|
+
*/
|
|
21472
|
+
entries: external_exports.array(ModelCatalogEntrySchema).min(1).max(4),
|
|
21473
|
+
/** The bundle tar, offered by the producer over `ctx.peerBytes` (same host). */
|
|
21474
|
+
bundle: external_exports.object({
|
|
21475
|
+
ticket: PeerBytesTicketSchema,
|
|
21476
|
+
bytes: external_exports.number().int().positive(),
|
|
21477
|
+
sha256: external_exports.string().regex(/^[0-9a-f]{64}$/)
|
|
21478
|
+
}),
|
|
21479
|
+
/** Every file the tar must hold; anything missing, extra or different is refused. */
|
|
21480
|
+
files: external_exports.array(ModelBundleFileSchema).min(1).max(64),
|
|
21481
|
+
/** Convert missing engine formats and push the model to every agent afterwards. */
|
|
21482
|
+
distribute: external_exports.boolean()
|
|
21483
|
+
});
|
|
21484
|
+
var ImportModelBundleResultSchema = external_exports.discriminatedUnion("kind", [external_exports.object({
|
|
21485
|
+
kind: external_exports.literal("imported"),
|
|
21486
|
+
modelIds: external_exports.array(external_exports.string()).readonly(),
|
|
21487
|
+
distributed: external_exports.array(external_exports.object({
|
|
21488
|
+
modelId: external_exports.string(),
|
|
21489
|
+
nodeId: external_exports.string(),
|
|
21490
|
+
format: external_exports.enum(MODEL_FORMATS),
|
|
21491
|
+
ok: external_exports.boolean(),
|
|
21492
|
+
error: external_exports.string().optional()
|
|
21493
|
+
})).readonly()
|
|
21494
|
+
}), external_exports.object({
|
|
21495
|
+
kind: external_exports.literal("refused"),
|
|
21496
|
+
reason: external_exports.enum([
|
|
21497
|
+
"transfer-failed",
|
|
21498
|
+
"checksum-mismatch",
|
|
21499
|
+
"bundle-mismatch",
|
|
21500
|
+
"invalid-entry",
|
|
21501
|
+
"id-taken"
|
|
21502
|
+
]),
|
|
21503
|
+
detail: external_exports.string()
|
|
21504
|
+
})]);
|
|
21124
21505
|
var customModelRegistryCapability = {
|
|
21125
21506
|
name: "custom-model-registry",
|
|
21126
21507
|
scope: "system",
|
|
@@ -21136,7 +21517,22 @@ var customModelRegistryCapability = {
|
|
|
21136
21517
|
* `ctx.api.customModelRegistry.listModels.query()` — UDS/Moleculer,
|
|
21137
21518
|
* never tRPC — so `auth: 'admin'` costs it nothing.
|
|
21138
21519
|
*/
|
|
21139
|
-
listModels: method(external_exports.void(), external_exports.array(CustomModelDescriptorSchema).readonly(), { auth: "admin" })
|
|
21520
|
+
listModels: method(external_exports.void(), external_exports.array(CustomModelDescriptorSchema).readonly(), { auth: "admin" }),
|
|
21521
|
+
/**
|
|
21522
|
+
* Register a model whose files arrive as ONE bundle tar (D806): the tar
|
|
21523
|
+
* is taken over `ctx.peerBytes`, checked against `bundle.sha256` and
|
|
21524
|
+
* every row of `files`, unpacked into the hub's flat modelsDir (directory
|
|
21525
|
+
* formats included), each format's `.revision` record written, the rows
|
|
21526
|
+
* upserted under the operator's name, the hub marked available and —
|
|
21527
|
+
* when asked — engine formats converted and the model distributed. A
|
|
21528
|
+
* model id already registered by another source is refused, never
|
|
21529
|
+
* overwritten.
|
|
21530
|
+
*/
|
|
21531
|
+
importModelBundle: method(ImportModelBundleInputSchema, ImportModelBundleResultSchema, {
|
|
21532
|
+
kind: "mutation",
|
|
21533
|
+
auth: "admin",
|
|
21534
|
+
timeoutMs: 30 * 6e4
|
|
21535
|
+
})
|
|
21140
21536
|
}
|
|
21141
21537
|
};
|
|
21142
21538
|
var QueryFilterSchema = external_exports.object({
|
|
@@ -21772,6 +22168,31 @@ var KeychainKeySourceSchema = external_exports.object({
|
|
|
21772
22168
|
*/
|
|
21773
22169
|
sharesBackupWithDatabase: external_exports.boolean()
|
|
21774
22170
|
});
|
|
22171
|
+
var KeychainResetRecordSchema = external_exports.object({
|
|
22172
|
+
id: external_exports.string(),
|
|
22173
|
+
at: external_exports.number(),
|
|
22174
|
+
/** `user:<id>` or {@link KEYCHAIN_RESET_TRIGGER_ACTOR}. */
|
|
22175
|
+
actor: external_exports.string(),
|
|
22176
|
+
/** Why the keychain was locked when it was reset; `null` when it was not locked. */
|
|
22177
|
+
lockedReason: external_exports.string().nullable(),
|
|
22178
|
+
/** Values moved into the archive table (ciphertext under the lost key). */
|
|
22179
|
+
archived: external_exports.number().int(),
|
|
22180
|
+
/** `keychain:secrets-orphaned-<ts>`, or `null` when nothing was stored. */
|
|
22181
|
+
archivedCollection: external_exports.string().nullable(),
|
|
22182
|
+
/**
|
|
22183
|
+
* `keychain:keys-orphaned-<ts>`: the wrapped data keys of the archive, kept
|
|
22184
|
+
* so the archive can still be opened if the lost master key turns up.
|
|
22185
|
+
*/
|
|
22186
|
+
archivedKeysCollection: external_exports.string().nullable(),
|
|
22187
|
+
/**
|
|
22188
|
+
* `system-settings` keys whose marker the reset cleared — the cluster
|
|
22189
|
+
* secret's: a marker left pointing at an archived value would refuse every
|
|
22190
|
+
* agent forever (D797).
|
|
22191
|
+
*/
|
|
22192
|
+
clearedSettingsKeys: external_exports.array(external_exports.string()).readonly(),
|
|
22193
|
+
/** When an operator dismissed the notice on the Secrets page; `null` until then. */
|
|
22194
|
+
acknowledgedAt: external_exports.number().nullable()
|
|
22195
|
+
});
|
|
21775
22196
|
var KeychainStatusSchema = external_exports.object({
|
|
21776
22197
|
keychain: KeychainStateSchema,
|
|
21777
22198
|
/** The source of the master key in use; `null` while locked. */
|
|
@@ -21789,7 +22210,9 @@ var KeychainStatusSchema = external_exports.object({
|
|
|
21789
22210
|
/** Wrapped copies of the data key under a previous master key, kept until purged. */
|
|
21790
22211
|
retiredWraps: external_exports.number().int(),
|
|
21791
22212
|
recoveryKeyDownloadedAt: external_exports.number().nullable(),
|
|
21792
|
-
secretCount: external_exports.number().int()
|
|
22213
|
+
secretCount: external_exports.number().int(),
|
|
22214
|
+
/** The most recent reset, acknowledged or not; `null` when the keychain was never reset. */
|
|
22215
|
+
lastReset: KeychainResetRecordSchema.nullable()
|
|
21793
22216
|
});
|
|
21794
22217
|
var KeychainSecretUsageSchema = external_exports.enum([
|
|
21795
22218
|
"in-use",
|
|
@@ -21806,13 +22229,14 @@ var KeychainAuditActionSchema = external_exports.enum([
|
|
|
21806
22229
|
"download-recovery-key",
|
|
21807
22230
|
"delete-orphans",
|
|
21808
22231
|
"reset",
|
|
22232
|
+
"acknowledge-reset",
|
|
21809
22233
|
"initialize"
|
|
21810
22234
|
]);
|
|
21811
22235
|
var KeychainAuditEntrySchema = external_exports.object({
|
|
21812
22236
|
id: external_exports.string(),
|
|
21813
22237
|
at: external_exports.number(),
|
|
21814
22238
|
action: KeychainAuditActionSchema,
|
|
21815
|
-
/** `addon:<id>` | `user:<id>` | `system`. */
|
|
22239
|
+
/** `addon:<id>` | `user:<id>` | `system` | `trigger-file`. */
|
|
21816
22240
|
actor: external_exports.string(),
|
|
21817
22241
|
ref: external_exports.string().nullable(),
|
|
21818
22242
|
detail: external_exports.string().nullable()
|
|
@@ -21916,6 +22340,21 @@ var keychainAdminCapability = {
|
|
|
21916
22340
|
kind: "mutation",
|
|
21917
22341
|
auth: "admin",
|
|
21918
22342
|
caller: "required"
|
|
22343
|
+
}),
|
|
22344
|
+
/**
|
|
22345
|
+
* What the last reset left to re-enter: the archived refs (owner, scope,
|
|
22346
|
+
* field — never a value) that hold no value again yet. Process-held refs
|
|
22347
|
+
* the hub regenerates itself (the session signing key) are not listed.
|
|
22348
|
+
*/
|
|
22349
|
+
resetReport: method(external_exports.object({}), external_exports.object({
|
|
22350
|
+
reset: KeychainResetRecordSchema.nullable(),
|
|
22351
|
+
pendingReentry: external_exports.array(KeychainSecretMetaSchema).readonly()
|
|
22352
|
+
}), { auth: "admin" }),
|
|
22353
|
+
/** Dismiss the "keychain was reset" notice. Audited. */
|
|
22354
|
+
acknowledgeReset: method(external_exports.object({}), external_exports.object({ acknowledged: external_exports.boolean() }), {
|
|
22355
|
+
kind: "mutation",
|
|
22356
|
+
auth: "admin",
|
|
22357
|
+
caller: "required"
|
|
21919
22358
|
})
|
|
21920
22359
|
}
|
|
21921
22360
|
};
|
|
@@ -24725,14 +25164,14 @@ var LlmProfileSchema = external_exports.object({
|
|
|
24725
25164
|
*/
|
|
24726
25165
|
appleFoundation: external_exports.object({ nodeId: external_exports.string() }).optional()
|
|
24727
25166
|
});
|
|
24728
|
-
var ConfigSchemaPassthrough$
|
|
25167
|
+
var ConfigSchemaPassthrough$2 = external_exports.unknown();
|
|
24729
25168
|
var LlmProfileKindDescriptorSchema = external_exports.object({
|
|
24730
25169
|
kind: LlmProfileKindSchema,
|
|
24731
25170
|
label: external_exports.string(),
|
|
24732
25171
|
icon: external_exports.string(),
|
|
24733
25172
|
/** Stamped by each provider so the concat-fanned catalog stays routable. */
|
|
24734
25173
|
addonId: external_exports.string(),
|
|
24735
|
-
configSchema: ConfigSchemaPassthrough$
|
|
25174
|
+
configSchema: ConfigSchemaPassthrough$2
|
|
24736
25175
|
});
|
|
24737
25176
|
var LlmDefaultSelectorSchema = external_exports.union([external_exports.object({ consumer: external_exports.string() }), external_exports.object({ purpose: external_exports.enum(["text", "vision"]) })]);
|
|
24738
25177
|
var LlmDefaultSchema = external_exports.object({
|
|
@@ -25066,7 +25505,7 @@ var RedirectLoginMethodSchema = external_exports.object({
|
|
|
25066
25505
|
* The provider names an external identity a signed-in user can link to
|
|
25067
25506
|
* their own account (D782): `auth.listLinkableProviders` /
|
|
25068
25507
|
* `beginExternalLink` offer exactly the redirect methods that set this,
|
|
25069
|
-
* whatever their id. Absent / false — a login button only
|
|
25508
|
+
* whatever their id. Absent / false — a login button only.
|
|
25070
25509
|
*/
|
|
25071
25510
|
linkable: external_exports.boolean().optional()
|
|
25072
25511
|
});
|
|
@@ -25835,7 +26274,7 @@ var TargetKindCapsSchema = external_exports.object({
|
|
|
25835
26274
|
ttl: external_exports.boolean(),
|
|
25836
26275
|
bodyMaxLen: external_exports.number().int().positive()
|
|
25837
26276
|
});
|
|
25838
|
-
var ConfigSchemaPassthrough = external_exports.unknown();
|
|
26277
|
+
var ConfigSchemaPassthrough$1 = external_exports.unknown();
|
|
25839
26278
|
var TargetKindSchema = external_exports.object({
|
|
25840
26279
|
kind: external_exports.string(),
|
|
25841
26280
|
label: external_exports.string(),
|
|
@@ -25872,7 +26311,7 @@ var TargetKindSchema = external_exports.object({
|
|
|
25872
26311
|
* its raster path, which is the safe default for an unknown image.
|
|
25873
26312
|
*/
|
|
25874
26313
|
iconMediaType: external_exports.string().optional(),
|
|
25875
|
-
configSchema: ConfigSchemaPassthrough,
|
|
26314
|
+
configSchema: ConfigSchemaPassthrough$1,
|
|
25876
26315
|
/**
|
|
25877
26316
|
* The config keys that decide WHERE this kind's secrets are sent (server,
|
|
25878
26317
|
* base URL, instance, chat, recipient). A save that changes any of them
|
|
@@ -29576,17 +30015,58 @@ var RetrainFrameListSchema = external_exports.object({
|
|
|
29576
30015
|
/** What the page pre-selects — the native key frame when one survives. */
|
|
29577
30016
|
autoPickMediaId: external_exports.number().int().optional()
|
|
29578
30017
|
});
|
|
30018
|
+
var RetrainFrameWorkStateSchema = external_exports.enum([
|
|
30019
|
+
"unannotated",
|
|
30020
|
+
"annotated",
|
|
30021
|
+
"complete"
|
|
30022
|
+
]);
|
|
30023
|
+
var RetrainCorpusFilterSchema = external_exports.object({
|
|
30024
|
+
workState: RetrainFrameWorkStateSchema.optional(),
|
|
30025
|
+
deviceIds: external_exports.array(external_exports.number()).max(500).optional(),
|
|
30026
|
+
/** When set, only frames in this named collection. */
|
|
30027
|
+
collectionId: external_exports.string().optional(),
|
|
30028
|
+
/** Frames that carry at least one saved annotation in one of these classes. */
|
|
30029
|
+
classes: external_exports.array(RetrainMacroClassSchema).optional(),
|
|
30030
|
+
page: external_exports.number().int().positive().default(1),
|
|
30031
|
+
pageSize: external_exports.number().int().positive().max(100).default(50)
|
|
30032
|
+
});
|
|
30033
|
+
var RetrainCorpusPageFrameSchema = RetrainFrameSchema.extend({ workState: RetrainFrameWorkStateSchema });
|
|
30034
|
+
var RetrainCorpusPageSchema = external_exports.object({
|
|
30035
|
+
frames: external_exports.array(RetrainCorpusPageFrameSchema).readonly(),
|
|
30036
|
+
total: external_exports.number().int().nonnegative(),
|
|
30037
|
+
page: external_exports.number().int().positive(),
|
|
30038
|
+
pageSize: external_exports.number().int().positive()
|
|
30039
|
+
});
|
|
30040
|
+
var RetrainCorpusKpiCameraRowSchema = external_exports.object({
|
|
30041
|
+
deviceId: external_exports.number(),
|
|
30042
|
+
unannotated: external_exports.number().int().nonnegative(),
|
|
30043
|
+
annotated: external_exports.number().int().nonnegative(),
|
|
30044
|
+
complete: external_exports.number().int().nonnegative(),
|
|
30045
|
+
/** This camera's `complete` count divided by corpus `total`, in `[0,1]`.
|
|
30046
|
+
* `null` when the corpus is empty (no ratio). */
|
|
30047
|
+
pctOfCorpus: external_exports.number().min(0).max(1).nullable()
|
|
30048
|
+
});
|
|
30049
|
+
var RetrainCorpusKpiSchema = external_exports.object({
|
|
30050
|
+
total: external_exports.number().int().nonnegative(),
|
|
30051
|
+
unannotated: external_exports.number().int().nonnegative(),
|
|
30052
|
+
annotated: external_exports.number().int().nonnegative(),
|
|
30053
|
+
complete: external_exports.number().int().nonnegative(),
|
|
30054
|
+
cameras: external_exports.array(RetrainCorpusKpiCameraRowSchema).readonly()
|
|
30055
|
+
});
|
|
29579
30056
|
var RetrainExportFilterSchema = external_exports.object({
|
|
29580
30057
|
deviceIds: external_exports.array(external_exports.number()).optional(),
|
|
29581
30058
|
frameIds: external_exports.array(external_exports.string()).max(2e4).optional(),
|
|
29582
30059
|
/** Only frames in at least one of these named collections. */
|
|
29583
30060
|
collectionIds: external_exports.array(external_exports.string()).max(200).optional(),
|
|
29584
|
-
/**
|
|
29585
|
-
|
|
29586
|
-
datasetVersionId: external_exports.string().optional(),
|
|
30061
|
+
/** Single collection (Frames filter bar). ANDed with `collectionIds` when both set. */
|
|
30062
|
+
collectionId: external_exports.string().optional(),
|
|
29587
30063
|
batchId: external_exports.string().optional(),
|
|
29588
30064
|
/** Only frames the operator marked complete (all subjects boxed). */
|
|
29589
|
-
completeOnly: external_exports.boolean().optional()
|
|
30065
|
+
completeOnly: external_exports.boolean().optional(),
|
|
30066
|
+
/** Exclusive work-state partition (`workStateOf`); same as the corpus list. */
|
|
30067
|
+
workState: RetrainFrameWorkStateSchema.optional(),
|
|
30068
|
+
/** Frames with at least one saved annotation in one of these classes. */
|
|
30069
|
+
classes: external_exports.array(RetrainMacroClassSchema).optional()
|
|
29590
30070
|
});
|
|
29591
30071
|
var RetrainExportLayoutSchema = external_exports.enum(["frames", "crops"]);
|
|
29592
30072
|
var RetrainArchiveTargetSchema = external_exports.object({
|
|
@@ -29759,22 +30239,28 @@ var RetrainDatasetVersionSchema = external_exports.object({
|
|
|
29759
30239
|
layout: RetrainExportLayoutSchema,
|
|
29760
30240
|
completeOnly: external_exports.boolean(),
|
|
29761
30241
|
frameCount: external_exports.number().int(),
|
|
29762
|
-
/** sha256 of what the frames taught when the version was frozen. */
|
|
29763
30242
|
annotationHash: external_exports.string(),
|
|
29764
|
-
/** The export manifest schema the version was cut under. */
|
|
29765
30243
|
manifestSchema: external_exports.string(),
|
|
29766
30244
|
stats: RetrainDatasetStatsSchema
|
|
29767
30245
|
});
|
|
29768
|
-
var
|
|
29769
|
-
|
|
29770
|
-
|
|
30246
|
+
var RetrainTrainingCorpusSelectionSchema = external_exports.object({
|
|
30247
|
+
collectionIds: external_exports.array(external_exports.string()).min(1),
|
|
30248
|
+
workState: external_exports.enum([
|
|
30249
|
+
"complete",
|
|
30250
|
+
"annotated_or_complete",
|
|
30251
|
+
"any_annotated"
|
|
30252
|
+
]).default("complete")
|
|
30253
|
+
});
|
|
30254
|
+
var RetrainTrainingCorpusResolveResultSchema = external_exports.discriminatedUnion("kind", [external_exports.object({
|
|
30255
|
+
kind: external_exports.literal("resolved"),
|
|
30256
|
+
frameIds: external_exports.array(external_exports.string()).max(2e4).readonly(),
|
|
30257
|
+
stats: RetrainDatasetStatsSchema,
|
|
30258
|
+
annotationHash: external_exports.string(),
|
|
30259
|
+
layout: RetrainExportLayoutSchema
|
|
29771
30260
|
}), external_exports.object({
|
|
29772
30261
|
kind: external_exports.literal("refused"),
|
|
29773
|
-
reason: external_exports.enum([
|
|
29774
|
-
|
|
29775
|
-
"duplicate-name",
|
|
29776
|
-
"no-frames"
|
|
29777
|
-
])
|
|
30262
|
+
reason: external_exports.enum(["unknown-collection", "no-frames"]),
|
|
30263
|
+
detail: external_exports.string()
|
|
29778
30264
|
})]);
|
|
29779
30265
|
var RetrainTransitionResultSchema = external_exports.object({
|
|
29780
30266
|
trackId: external_exports.string(),
|
|
@@ -30795,6 +31281,26 @@ var pipelineAnalyticsCapability = {
|
|
|
30795
31281
|
auth: "admin"
|
|
30796
31282
|
}),
|
|
30797
31283
|
/**
|
|
31284
|
+
* Paginated corpus copies for the Frames grid — index reads only.
|
|
31285
|
+
*
|
|
31286
|
+
* Filters AND (`workState`, cameras, one collection, annotated classes).
|
|
31287
|
+
* An answered empty match is `{ frames: [], total: 0, … }` (D315), never a
|
|
31288
|
+
* pending masquerade. Classification uses `workStateOf` (annotation count
|
|
31289
|
+
* wins over a stray `complete` flag).
|
|
31290
|
+
*/
|
|
31291
|
+
listRetrainCorpusPage: method(RetrainCorpusFilterSchema, RetrainCorpusPageSchema, {
|
|
31292
|
+
kind: "query",
|
|
31293
|
+
auth: "admin"
|
|
31294
|
+
}),
|
|
31295
|
+
/**
|
|
31296
|
+
* Global + per-camera corpus KPI. Unfiltered totals; `%` on a camera row is
|
|
31297
|
+
* `complete(camera) / corpus total`, or `null` when the corpus is empty.
|
|
31298
|
+
*/
|
|
31299
|
+
getRetrainCorpusKpi: method(external_exports.object({}), RetrainCorpusKpiSchema, {
|
|
31300
|
+
kind: "query",
|
|
31301
|
+
auth: "admin"
|
|
31302
|
+
}),
|
|
31303
|
+
/**
|
|
30798
31304
|
* What a track can contribute, and what it already has.
|
|
30799
31305
|
*
|
|
30800
31306
|
* `candidates` are the track's whole, unannotated frames — index rows only,
|
|
@@ -31001,50 +31507,23 @@ var pipelineAnalyticsCapability = {
|
|
|
31001
31507
|
auth: "admin",
|
|
31002
31508
|
timeoutMs: 60 * 6e4
|
|
31003
31509
|
}),
|
|
31004
|
-
/** The counts a selection would freeze — class × camera × day/night,
|
|
31005
|
-
* completeness — without freezing anything. Index reads only. */
|
|
31006
|
-
previewRetrainDataset: method(external_exports.object({
|
|
31007
|
-
selection: RetrainDatasetSelectionSchema,
|
|
31008
|
-
completeOnly: external_exports.boolean().optional()
|
|
31009
|
-
}), RetrainDatasetStatsSchema, {
|
|
31010
|
-
kind: "query",
|
|
31011
|
-
auth: "admin"
|
|
31012
|
-
}),
|
|
31013
31510
|
/**
|
|
31014
|
-
*
|
|
31015
|
-
*
|
|
31016
|
-
*
|
|
31017
|
-
*
|
|
31511
|
+
* OFFER the annotated archive instead of pushing it (D805): the same tar
|
|
31512
|
+
* `writeRetrainArchive` streams, behind a one-shot `ctx.peerBytes` ticket
|
|
31513
|
+
* the caller dials at once (same host). For a consumer that cannot expose
|
|
31514
|
+
* an upload URL — a training provider streaming straight into its cloud.
|
|
31515
|
+
* The answer is the plan; the bytes and their sha256 are the consumer's
|
|
31516
|
+
* to measure as they arrive.
|
|
31018
31517
|
*/
|
|
31019
|
-
|
|
31020
|
-
|
|
31021
|
-
|
|
31022
|
-
|
|
31023
|
-
|
|
31024
|
-
|
|
31025
|
-
|
|
31026
|
-
auth: "admin",
|
|
31027
|
-
timeoutMs: 12e4
|
|
31028
|
-
}),
|
|
31029
|
-
/** Every dataset version, newest first. */
|
|
31030
|
-
listRetrainDatasetVersions: method(external_exports.object({}), external_exports.array(RetrainDatasetVersionSchema).readonly(), {
|
|
31031
|
-
kind: "query",
|
|
31032
|
-
auth: "admin"
|
|
31033
|
-
}),
|
|
31034
|
-
/** Delete a version. Its frames stay in the dataset. */
|
|
31035
|
-
deleteRetrainDatasetVersion: method(external_exports.object({ id: external_exports.string() }), external_exports.object({ deleted: external_exports.boolean() }), {
|
|
31036
|
-
kind: "mutation",
|
|
31037
|
-
auth: "admin"
|
|
31038
|
-
}),
|
|
31039
|
-
/** Does the corpus still teach what the version froze? `missingFrames`
|
|
31040
|
-
* counts frames that left the dataset (or lost every box and tick). */
|
|
31041
|
-
verifyRetrainDatasetVersion: method(external_exports.object({ id: external_exports.string() }), external_exports.object({
|
|
31042
|
-
found: external_exports.boolean(),
|
|
31043
|
-
annotationHash: external_exports.string(),
|
|
31044
|
-
matches: external_exports.boolean(),
|
|
31045
|
-
missingFrames: external_exports.number().int()
|
|
31518
|
+
offerRetrainArchive: method(external_exports.object({
|
|
31519
|
+
filter: RetrainExportFilterSchema,
|
|
31520
|
+
layout: RetrainExportLayoutSchema
|
|
31521
|
+
}), external_exports.object({
|
|
31522
|
+
ticket: PeerBytesTicketSchema,
|
|
31523
|
+
frames: external_exports.number().int(),
|
|
31524
|
+
annotations: external_exports.number().int()
|
|
31046
31525
|
}), {
|
|
31047
|
-
kind: "
|
|
31526
|
+
kind: "mutation",
|
|
31048
31527
|
auth: "admin",
|
|
31049
31528
|
timeoutMs: 12e4
|
|
31050
31529
|
}),
|
|
@@ -31094,6 +31573,16 @@ var pipelineAnalyticsCapability = {
|
|
|
31094
31573
|
kind: "query",
|
|
31095
31574
|
auth: "admin"
|
|
31096
31575
|
}),
|
|
31576
|
+
/**
|
|
31577
|
+
* Resolve a live training corpus selection to frame ids + stats (index
|
|
31578
|
+
* reads only). Same plan the annotated export builds — training plan/start
|
|
31579
|
+
* calls this instead of a frozen dataset version.
|
|
31580
|
+
*/
|
|
31581
|
+
resolveRetrainTrainingCorpus: method(RetrainTrainingCorpusSelectionSchema, RetrainTrainingCorpusResolveResultSchema, {
|
|
31582
|
+
kind: "query",
|
|
31583
|
+
auth: "admin",
|
|
31584
|
+
timeoutMs: 6e4
|
|
31585
|
+
}),
|
|
31097
31586
|
renameRetrainCollection: method(external_exports.object({
|
|
31098
31587
|
id: external_exports.string(),
|
|
31099
31588
|
name: external_exports.string().max(120)
|
|
@@ -31999,11 +32488,14 @@ var HardwareClassIdSchema = external_exports.enum([
|
|
|
31999
32488
|
"intel-n-series",
|
|
32000
32489
|
"apple-m-base",
|
|
32001
32490
|
"apple-m-pro",
|
|
32491
|
+
"amd-phoenix",
|
|
32002
32492
|
"unknown"
|
|
32003
32493
|
]);
|
|
32004
32494
|
var AcceleratorKindSchema = external_exports.enum([
|
|
32005
32495
|
"intel-npu",
|
|
32006
32496
|
"intel-igpu",
|
|
32497
|
+
"amd-igpu",
|
|
32498
|
+
"amd-npu",
|
|
32007
32499
|
"x86-cpu",
|
|
32008
32500
|
"arm-cpu",
|
|
32009
32501
|
"apple-ane",
|
|
@@ -33929,6 +34421,8 @@ var AgentPipelineSettingsSchema = external_exports.object({
|
|
|
33929
34421
|
* address is wrong (multi-homed host, NAT, custom interface).
|
|
33930
34422
|
*/
|
|
33931
34423
|
reachableHost: external_exports.string().optional(),
|
|
34424
|
+
/** Hub-persisted UI colour (`--color-node-*` theme tokens). */
|
|
34425
|
+
color: NodeColorIdSchema.optional(),
|
|
33932
34426
|
/**
|
|
33933
34427
|
* Multi-device inference opt-in (Phase 4). Per-node map deviceKey → {enabled,
|
|
33934
34428
|
* weight, steps}. Absent / all-disabled ⇒ the node's single default
|
|
@@ -34565,8 +35059,9 @@ var pipelineOrchestratorCapability = {
|
|
|
34565
35059
|
*/
|
|
34566
35060
|
setAgentReachableHost: method(external_exports.object({
|
|
34567
35061
|
agentNodeId: external_exports.string(),
|
|
34568
|
-
reachableHost: external_exports.string().nullable()
|
|
34569
|
-
|
|
35062
|
+
reachableHost: external_exports.string().nullable().optional(),
|
|
35063
|
+
color: NodeColorIdSchema.nullable().optional()
|
|
35064
|
+
}).refine((v) => v.reachableHost !== void 0 || v.color !== void 0, { message: "reachableHost or color required" }), external_exports.object({ success: external_exports.literal(true) }), {
|
|
34570
35065
|
kind: "mutation",
|
|
34571
35066
|
auth: "admin"
|
|
34572
35067
|
}),
|
|
@@ -35510,7 +36005,14 @@ var SsoBridgeClaimsSchema = external_exports.object({
|
|
|
35510
36005
|
* Verified `iss` of the id_token behind an OIDC login bridge (D782). A
|
|
35511
36006
|
* subject is unique only per issuer, so a link is bound to it.
|
|
35512
36007
|
*/
|
|
35513
|
-
issuer: external_exports.string().optional()
|
|
36008
|
+
issuer: external_exports.string().optional(),
|
|
36009
|
+
/**
|
|
36010
|
+
* SHA-256 (hex) of the `camstack_sso_state` cookie the IdP `/start` set in
|
|
36011
|
+
* the browser that began this sign-in. `/api/auth/sso/finish` requires the
|
|
36012
|
+
* request to present the matching cookie — a login bridge is useless in
|
|
36013
|
+
* any other browser.
|
|
36014
|
+
*/
|
|
36015
|
+
browserBinding: external_exports.string().optional()
|
|
35514
36016
|
});
|
|
35515
36017
|
var ssoBridgeCapability = {
|
|
35516
36018
|
name: "sso-bridge",
|
|
@@ -35528,7 +36030,7 @@ var ssoBridgeCapability = {
|
|
|
35528
36030
|
* `/api/auth/sso/finish` to become admin — a full privilege escalation
|
|
35529
36031
|
* through the exact surface this cap exists to close (see the module
|
|
35530
36032
|
* docblock). Every real caller (`oauth-grants.ts`, `main.ts`
|
|
35531
|
-
* registration, the OIDC
|
|
36033
|
+
* registration, the OIDC addon) reaches this through
|
|
35532
36034
|
* `ctx.api` / the in-process registry — never through tRPC — so
|
|
35533
36035
|
* `auth: 'admin'` costs those callers nothing.
|
|
35534
36036
|
*/
|
|
@@ -38054,7 +38556,13 @@ var addonsCapability = {
|
|
|
38054
38556
|
mode: "singleton",
|
|
38055
38557
|
nodeIdMode: "data",
|
|
38056
38558
|
methods: {
|
|
38057
|
-
|
|
38559
|
+
/**
|
|
38560
|
+
* Installed addon roster for a node. `nodeId` omitted (or `'hub'`)
|
|
38561
|
+
* is the hub's own registry; an agent `nodeId` overlays that agent's
|
|
38562
|
+
* installed package versions (via `$agent.status`) onto hub manifests
|
|
38563
|
+
* and drops packages the agent does not have.
|
|
38564
|
+
*/
|
|
38565
|
+
list: method(external_exports.object({ nodeId: external_exports.string().optional() }).optional(), external_exports.array(AddonListItemSchema).readonly()),
|
|
38058
38566
|
getLogs: method(external_exports.object({
|
|
38059
38567
|
addonId: external_exports.string(),
|
|
38060
38568
|
limit: external_exports.number().min(1).max(500).default(100),
|
|
@@ -38846,6 +39354,7 @@ var calendarSourceCapability = {
|
|
|
38846
39354
|
scope: "system",
|
|
38847
39355
|
mode: "collection",
|
|
38848
39356
|
internal: true,
|
|
39357
|
+
providerKind: "calendar",
|
|
38849
39358
|
methods: {
|
|
38850
39359
|
listCalendars: method(external_exports.void(), external_exports.array(CalendarInfoSchema).readonly(), { auth: "admin" }),
|
|
38851
39360
|
listEvents: method(CalendarListEventsInputSchema, external_exports.array(CalendarEventSchema).readonly(), { auth: "admin" })
|
|
@@ -42681,7 +43190,13 @@ var TopologyNodeSchema = external_exports.object({
|
|
|
42681
43190
|
})).readonly(),
|
|
42682
43191
|
processes: external_exports.array(TopologyProcessSchema).readonly(),
|
|
42683
43192
|
categories: external_exports.array(TopologyCategorySchema).readonly(),
|
|
42684
|
-
rootPackage: TopologyRootPackageSchema.nullable()
|
|
43193
|
+
rootPackage: TopologyRootPackageSchema.nullable(),
|
|
43194
|
+
/**
|
|
43195
|
+
* How an online AGENT reaches the hub (mesh mTLS Release A): `tls` once it has
|
|
43196
|
+
* completed a mutual-TLS handshake, `clear` otherwise. Absent for the hub,
|
|
43197
|
+
* for offline rows and when the hub cannot tell.
|
|
43198
|
+
*/
|
|
43199
|
+
meshTransport: external_exports.enum(["tls", "clear"]).optional()
|
|
42685
43200
|
});
|
|
42686
43201
|
var CapUsageEdgeSchema = external_exports.object({
|
|
42687
43202
|
callerAddonId: external_exports.string(),
|
|
@@ -43106,6 +43621,7 @@ var OsdNamedTemplateSchema = external_exports.object({
|
|
|
43106
43621
|
parser: external_exports.string().max(256).default("")
|
|
43107
43622
|
});
|
|
43108
43623
|
var OsdSourceSchema = external_exports.discriminatedUnion("kind", [
|
|
43624
|
+
external_exports.object({ kind: external_exports.literal("none") }),
|
|
43109
43625
|
external_exports.object({
|
|
43110
43626
|
kind: external_exports.literal("static"),
|
|
43111
43627
|
text: external_exports.string().max(64)
|
|
@@ -43253,6 +43769,19 @@ var osdManagerCapability = {
|
|
|
43253
43769
|
auth: "admin"
|
|
43254
43770
|
}),
|
|
43255
43771
|
/**
|
|
43772
|
+
* Toggle the camera firmware overlay on/off (`osd.setOverlay` `enabled`).
|
|
43773
|
+
* Distinct from the binding's own `enabled` flag — this is what the
|
|
43774
|
+
* operator sees on the live picture (e.g. Reolink camera name layer).
|
|
43775
|
+
*/
|
|
43776
|
+
setSlotCameraEnabled: method(external_exports.object({
|
|
43777
|
+
deviceId: external_exports.number().int(),
|
|
43778
|
+
slotId: external_exports.string().min(1),
|
|
43779
|
+
enabled: external_exports.boolean()
|
|
43780
|
+
}), external_exports.object({ success: external_exports.literal(true) }), {
|
|
43781
|
+
kind: "mutation",
|
|
43782
|
+
auth: "admin"
|
|
43783
|
+
}),
|
|
43784
|
+
/**
|
|
43256
43785
|
* Replace one camera's binding configuration from another. Writable source
|
|
43257
43786
|
* slots are mapped by ordinal onto writable target slots so different
|
|
43258
43787
|
* provider slot ids do not make the copied configuration disappear.
|
|
@@ -43715,7 +44244,15 @@ var GpuInfoSchema = external_exports.object({
|
|
|
43715
44244
|
name: external_exports.string(),
|
|
43716
44245
|
memoryMB: external_exports.number().optional()
|
|
43717
44246
|
});
|
|
43718
|
-
var NpuInfoSchema = external_exports.object({
|
|
44247
|
+
var NpuInfoSchema = external_exports.object({
|
|
44248
|
+
type: external_exports.enum([
|
|
44249
|
+
"apple-ane",
|
|
44250
|
+
"intel-npu",
|
|
44251
|
+
"amd-xdna"
|
|
44252
|
+
]),
|
|
44253
|
+
name: external_exports.string().optional(),
|
|
44254
|
+
generation: external_exports.enum(["xdna1", "xdna2"]).optional()
|
|
44255
|
+
});
|
|
43719
44256
|
var CoralInfoSchema = external_exports.object({
|
|
43720
44257
|
type: external_exports.literal("coral-edgetpu"),
|
|
43721
44258
|
bus: external_exports.string().optional()
|
|
@@ -47057,16 +47594,6 @@ var ApiKeySummarySchema = external_exports.object({
|
|
|
47057
47594
|
createdAt: external_exports.number(),
|
|
47058
47595
|
lastUsedAt: external_exports.number().optional()
|
|
47059
47596
|
});
|
|
47060
|
-
var CreateApiKeyInputSchema = external_exports.object({
|
|
47061
|
-
label: external_exports.string(),
|
|
47062
|
-
isAdmin: external_exports.boolean().default(false),
|
|
47063
|
-
allowedProviders: external_exports.union([external_exports.array(external_exports.string()), external_exports.literal("*")]).optional(),
|
|
47064
|
-
allowedDevices: external_exports.record(external_exports.string(), external_exports.union([external_exports.array(external_exports.string()), external_exports.literal("*")])).optional()
|
|
47065
|
-
});
|
|
47066
|
-
var CreateApiKeyResultSchema = external_exports.object({
|
|
47067
|
-
token: external_exports.string(),
|
|
47068
|
-
record: ApiKeySummarySchema
|
|
47069
|
-
});
|
|
47070
47597
|
var ScopedTokenSummarySchema = external_exports.object({
|
|
47071
47598
|
id: external_exports.string(),
|
|
47072
47599
|
userId: external_exports.string(),
|
|
@@ -47168,20 +47695,11 @@ var userManagementCapability = {
|
|
|
47168
47695
|
access: "view"
|
|
47169
47696
|
}),
|
|
47170
47697
|
listApiKeys: method(external_exports.void(), external_exports.array(ApiKeySummarySchema), { auth: "admin" }),
|
|
47171
|
-
createApiKey: method(CreateApiKeyInputSchema, CreateApiKeyResultSchema, {
|
|
47172
|
-
kind: "mutation",
|
|
47173
|
-
auth: "admin",
|
|
47174
|
-
access: "create"
|
|
47175
|
-
}),
|
|
47176
47698
|
revokeApiKey: method(external_exports.object({ id: external_exports.string() }), external_exports.object({ success: external_exports.literal(true) }), {
|
|
47177
47699
|
kind: "mutation",
|
|
47178
47700
|
auth: "admin",
|
|
47179
47701
|
access: "delete"
|
|
47180
47702
|
}),
|
|
47181
|
-
validateApiKey: method(external_exports.object({ token: external_exports.string() }), ApiKeySummarySchema.nullable(), {
|
|
47182
|
-
kind: "mutation",
|
|
47183
|
-
access: "view"
|
|
47184
|
-
}),
|
|
47185
47703
|
createScopedToken: method(CreateScopedTokenInputSchema, CreateScopedTokenResultSchema, {
|
|
47186
47704
|
kind: "mutation",
|
|
47187
47705
|
auth: "admin",
|
|
@@ -47271,20 +47789,6 @@ var userManagementCapability = {
|
|
|
47271
47789
|
userId: external_exports.string(),
|
|
47272
47790
|
issuer: external_exports.string()
|
|
47273
47791
|
}).nullable(), { auth: "admin" }),
|
|
47274
|
-
/**
|
|
47275
|
-
* Link `(provider, subject)` to `userId`. Idempotent for the same user;
|
|
47276
|
-
* REFUSES (throws) an identity already linked to another user, and a
|
|
47277
|
-
* user that does not exist.
|
|
47278
|
-
*/
|
|
47279
|
-
linkExternalIdentity: method(ExternalIdentityKeySchema.extend({
|
|
47280
|
-
userId: external_exports.string(),
|
|
47281
|
-
issuer: external_exports.string().min(1),
|
|
47282
|
-
label: external_exports.string().optional()
|
|
47283
|
-
}), external_exports.object({ success: external_exports.literal(true) }), {
|
|
47284
|
-
kind: "mutation",
|
|
47285
|
-
auth: "admin",
|
|
47286
|
-
access: "create"
|
|
47287
|
-
}),
|
|
47288
47792
|
/** Remove one link of `userId`. `success: false` when it was not linked to that user. */
|
|
47289
47793
|
unlinkExternalIdentity: method(ExternalIdentityKeySchema.extend({ userId: external_exports.string() }), external_exports.object({ success: external_exports.boolean() }), {
|
|
47290
47794
|
kind: "mutation",
|
|
@@ -47815,6 +48319,586 @@ var zoneRulesCapability = {
|
|
|
47815
48319
|
*/
|
|
47816
48320
|
durability: "restored"
|
|
47817
48321
|
};
|
|
48322
|
+
var TrainingGpuOptionSchema = external_exports.object({
|
|
48323
|
+
id: external_exports.string(),
|
|
48324
|
+
label: external_exports.string(),
|
|
48325
|
+
/** List price, USD per GPU-hour, before any region multiplier. */
|
|
48326
|
+
usdPerHour: external_exports.number().nonnegative(),
|
|
48327
|
+
vramGb: external_exports.number().nonnegative()
|
|
48328
|
+
});
|
|
48329
|
+
var TrainingRegionOptionSchema = external_exports.object({
|
|
48330
|
+
/** `''` = any region (the provider's choice). */
|
|
48331
|
+
id: external_exports.string(),
|
|
48332
|
+
label: external_exports.string(),
|
|
48333
|
+
priceMultiplier: external_exports.number().positive()
|
|
48334
|
+
});
|
|
48335
|
+
var TrainingProviderDefaultsSchema = external_exports.object({
|
|
48336
|
+
gpuType: external_exports.string(),
|
|
48337
|
+
region: external_exports.string(),
|
|
48338
|
+
costCapUsd: external_exports.number().nonnegative(),
|
|
48339
|
+
maxRuntimeSec: external_exports.number().int().positive(),
|
|
48340
|
+
/** Hours a FAILED job's cloud dataset is kept for debugging; 0 = delete at once. */
|
|
48341
|
+
failedDatasetGraceHours: external_exports.number().nonnegative()
|
|
48342
|
+
});
|
|
48343
|
+
var ConfigSchemaPassthrough = external_exports.unknown();
|
|
48344
|
+
var TrainingProviderTypeSchema = external_exports.object({
|
|
48345
|
+
typeId: external_exports.string(),
|
|
48346
|
+
label: external_exports.string(),
|
|
48347
|
+
/** Path under the addon package (e.g. `assets/training-modal/icon.svg`). */
|
|
48348
|
+
iconAsset: external_exports.string(),
|
|
48349
|
+
/** Owning `training-provider` addon — collection selector for createEntry. */
|
|
48350
|
+
addonId: external_exports.string(),
|
|
48351
|
+
/**
|
|
48352
|
+
* Fields for one entry of this type (credentials + defaults). Absent on a
|
|
48353
|
+
* type that only needs a name. Password fields are keychain-backed on the
|
|
48354
|
+
* provider addon (`secretStatePaths`), not D634 plaintext.
|
|
48355
|
+
*/
|
|
48356
|
+
configSchema: ConfigSchemaPassthrough.optional()
|
|
48357
|
+
});
|
|
48358
|
+
var TrainingProviderEntrySchema = external_exports.object({
|
|
48359
|
+
entryId: external_exports.string(),
|
|
48360
|
+
typeId: external_exports.string(),
|
|
48361
|
+
name: external_exports.string(),
|
|
48362
|
+
addonId: external_exports.string(),
|
|
48363
|
+
/** Credentials are present — never the values. */
|
|
48364
|
+
configured: external_exports.boolean()
|
|
48365
|
+
});
|
|
48366
|
+
var TrainingProviderDescriptorSchema = external_exports.object({
|
|
48367
|
+
addonId: external_exports.string(),
|
|
48368
|
+
entryId: external_exports.string(),
|
|
48369
|
+
typeId: external_exports.string(),
|
|
48370
|
+
/** Operator-chosen entry name. */
|
|
48371
|
+
name: external_exports.string(),
|
|
48372
|
+
iconAsset: external_exports.string(),
|
|
48373
|
+
/** `modal`, `runpod`, `fake`, … — same as typeId for current providers. */
|
|
48374
|
+
kind: external_exports.string(),
|
|
48375
|
+
label: external_exports.string(),
|
|
48376
|
+
gpuTypes: external_exports.array(TrainingGpuOptionSchema).readonly(),
|
|
48377
|
+
regions: external_exports.array(TrainingRegionOptionSchema).readonly(),
|
|
48378
|
+
maxDatasetBytes: external_exports.number().int().positive(),
|
|
48379
|
+
maxRuntimeSec: external_exports.number().int().positive(),
|
|
48380
|
+
freeTierNote: external_exports.string().optional(),
|
|
48381
|
+
/** Where the data goes, in one sentence the confirm dialog repeats. */
|
|
48382
|
+
dataResidencyNote: external_exports.string(),
|
|
48383
|
+
/** Credentials are present — never the values. */
|
|
48384
|
+
configured: external_exports.boolean(),
|
|
48385
|
+
defaults: TrainingProviderDefaultsSchema,
|
|
48386
|
+
/**
|
|
48387
|
+
* Values for {@link TrainingProviderTypeSchema}'s `configSchema` — password
|
|
48388
|
+
* fields are keychain {@link SecretFieldView} or `null` / `''` (create),
|
|
48389
|
+
* never plaintext. Same hydrate contract as settings forms (D789).
|
|
48390
|
+
*/
|
|
48391
|
+
formValues: external_exports.record(external_exports.string(), external_exports.unknown()).optional()
|
|
48392
|
+
});
|
|
48393
|
+
var TrainingProviderUpdateEntryInputSchema = external_exports.object({
|
|
48394
|
+
entryId: external_exports.string().min(1),
|
|
48395
|
+
name: external_exports.string().min(1),
|
|
48396
|
+
tokenId: external_exports.string().optional(),
|
|
48397
|
+
tokenSecret: external_exports.union([external_exports.string(), external_exports.object({ $secretClear: external_exports.literal(true) })]).optional(),
|
|
48398
|
+
environment: external_exports.string().optional(),
|
|
48399
|
+
gpuType: external_exports.string().optional(),
|
|
48400
|
+
region: external_exports.string().optional(),
|
|
48401
|
+
costCapUsd: external_exports.number().nonnegative().optional(),
|
|
48402
|
+
maxRuntimeSec: external_exports.number().int().positive().optional(),
|
|
48403
|
+
failedDatasetGraceHours: external_exports.number().nonnegative().optional()
|
|
48404
|
+
});
|
|
48405
|
+
var TrainingCredentialCheckSchema = external_exports.object({
|
|
48406
|
+
ok: external_exports.boolean(),
|
|
48407
|
+
/** Workspace / account name, when the provider says. */
|
|
48408
|
+
account: external_exports.string().optional(),
|
|
48409
|
+
reason: external_exports.enum([
|
|
48410
|
+
"missing",
|
|
48411
|
+
"invalid",
|
|
48412
|
+
"forbidden",
|
|
48413
|
+
"network",
|
|
48414
|
+
"quota"
|
|
48415
|
+
]).optional(),
|
|
48416
|
+
detail: external_exports.string().optional()
|
|
48417
|
+
});
|
|
48418
|
+
var ProviderJobStateSchema = external_exports.enum([
|
|
48419
|
+
"pending",
|
|
48420
|
+
"starting",
|
|
48421
|
+
"running",
|
|
48422
|
+
"succeeded",
|
|
48423
|
+
"failed",
|
|
48424
|
+
"cancelled",
|
|
48425
|
+
"lost"
|
|
48426
|
+
]);
|
|
48427
|
+
var ProviderJobStatusSchema = external_exports.object({
|
|
48428
|
+
jobKey: external_exports.string(),
|
|
48429
|
+
providerJobId: external_exports.string().optional(),
|
|
48430
|
+
state: ProviderJobStateSchema,
|
|
48431
|
+
startedAt: external_exports.number().optional(),
|
|
48432
|
+
endedAt: external_exports.number().optional(),
|
|
48433
|
+
exitCode: external_exports.number().int().optional(),
|
|
48434
|
+
failureReason: external_exports.string().optional(),
|
|
48435
|
+
gpuType: external_exports.string(),
|
|
48436
|
+
region: external_exports.string().optional(),
|
|
48437
|
+
billedSeconds: external_exports.number().nonnegative(),
|
|
48438
|
+
costUsd: external_exports.number().nonnegative(),
|
|
48439
|
+
/** True when `costUsd` is runtime × list price, not a billing answer. */
|
|
48440
|
+
costIsEstimate: external_exports.boolean(),
|
|
48441
|
+
lastFetchedAt: external_exports.number()
|
|
48442
|
+
});
|
|
48443
|
+
var TrainerSourceRefSchema = external_exports.object({
|
|
48444
|
+
/** Hugging Face repo id, e.g. `camstack/camstack-trainer`. */
|
|
48445
|
+
repo: external_exports.string().min(1),
|
|
48446
|
+
/** A commit sha (never a branch) — the job must be reproducible. */
|
|
48447
|
+
revision: external_exports.string().regex(/^[0-9a-f]{7,64}$/)
|
|
48448
|
+
});
|
|
48449
|
+
var JobRef = {
|
|
48450
|
+
entryId: external_exports.string().min(1),
|
|
48451
|
+
jobKey: external_exports.string().uuid()
|
|
48452
|
+
};
|
|
48453
|
+
var TrainingLogLineSchema = external_exports.object({
|
|
48454
|
+
ts: external_exports.number(),
|
|
48455
|
+
text: external_exports.string()
|
|
48456
|
+
});
|
|
48457
|
+
var trainingProviderCapability = {
|
|
48458
|
+
name: "training-provider",
|
|
48459
|
+
scope: "system",
|
|
48460
|
+
mode: "collection",
|
|
48461
|
+
internal: true,
|
|
48462
|
+
methods: {
|
|
48463
|
+
/** Every entry's offer and settings. Concat-fans across providers. */
|
|
48464
|
+
describe: method(external_exports.object({}), external_exports.array(TrainingProviderDescriptorSchema).readonly(), { auth: "admin" }),
|
|
48465
|
+
/** Creatable types for the Add-entry dialog. Concat-fans. */
|
|
48466
|
+
describeTypes: method(external_exports.object({}), external_exports.array(TrainingProviderTypeSchema).readonly(), { auth: "admin" }),
|
|
48467
|
+
/** Configured entries (pills). Concat-fans. */
|
|
48468
|
+
listEntries: method(external_exports.object({}), external_exports.array(TrainingProviderEntrySchema).readonly(), { auth: "admin" }),
|
|
48469
|
+
/**
|
|
48470
|
+
* Create an entry under this provider type. Pin with `{ addonId }` of the
|
|
48471
|
+
* type's owning addon (from describeTypes).
|
|
48472
|
+
*/
|
|
48473
|
+
createEntry: method(external_exports.object({
|
|
48474
|
+
typeId: external_exports.string().min(1),
|
|
48475
|
+
name: external_exports.string().min(1)
|
|
48476
|
+
}), external_exports.object({ entryId: external_exports.string() }), {
|
|
48477
|
+
kind: "mutation",
|
|
48478
|
+
auth: "admin"
|
|
48479
|
+
}),
|
|
48480
|
+
/** Delete an entry. Pin with the owning `{ addonId }`. */
|
|
48481
|
+
deleteEntry: method(external_exports.object({ entryId: external_exports.string().min(1) }), external_exports.object({ ok: external_exports.literal(true) }), {
|
|
48482
|
+
kind: "mutation",
|
|
48483
|
+
auth: "admin"
|
|
48484
|
+
}),
|
|
48485
|
+
/**
|
|
48486
|
+
* Update one entry (name, credentials, defaults). Pin with owning
|
|
48487
|
+
* `{ addonId }`. Empty/omitted `tokenSecret` keeps the stored secret.
|
|
48488
|
+
*/
|
|
48489
|
+
updateEntry: method(TrainingProviderUpdateEntryInputSchema, external_exports.object({ ok: external_exports.literal(true) }), {
|
|
48490
|
+
kind: "mutation",
|
|
48491
|
+
auth: "admin"
|
|
48492
|
+
}),
|
|
48493
|
+
/** Call the provider with the entry's stored credentials. Never returns them. */
|
|
48494
|
+
validateCredentials: method(external_exports.object({ entryId: external_exports.string().min(1) }), TrainingCredentialCheckSchema, {
|
|
48495
|
+
kind: "mutation",
|
|
48496
|
+
auth: "admin",
|
|
48497
|
+
timeoutMs: 3e4
|
|
48498
|
+
}),
|
|
48499
|
+
/** USD range for a run of `gpuSeconds` on `gpuType` in `region`. */
|
|
48500
|
+
estimateJob: method(external_exports.object({
|
|
48501
|
+
entryId: external_exports.string().min(1),
|
|
48502
|
+
gpuType: external_exports.string(),
|
|
48503
|
+
region: external_exports.string(),
|
|
48504
|
+
datasetBytes: external_exports.number().int().nonnegative(),
|
|
48505
|
+
gpuSecondsLow: external_exports.number().nonnegative(),
|
|
48506
|
+
gpuSecondsHigh: external_exports.number().nonnegative()
|
|
48507
|
+
}), external_exports.object({
|
|
48508
|
+
usdLow: external_exports.number().nonnegative(),
|
|
48509
|
+
usdHigh: external_exports.number().nonnegative(),
|
|
48510
|
+
notes: external_exports.array(external_exports.string()).readonly()
|
|
48511
|
+
}), { auth: "admin" }),
|
|
48512
|
+
/**
|
|
48513
|
+
* Take the dataset archive behind `ticket` (minted by pipeline-analytics,
|
|
48514
|
+
* same host) and land it as the job's dataset in the cloud, streamed —
|
|
48515
|
+
* nothing is staged on the hub's disk. Idempotent per `jobKey`: a second
|
|
48516
|
+
* call replaces a partial upload. Answers what actually landed.
|
|
48517
|
+
*/
|
|
48518
|
+
uploadDataset: method(external_exports.object({
|
|
48519
|
+
...JobRef,
|
|
48520
|
+
ticket: PeerBytesTicketSchema
|
|
48521
|
+
}), external_exports.object({
|
|
48522
|
+
bytes: external_exports.number().int().nonnegative(),
|
|
48523
|
+
sha256: external_exports.string()
|
|
48524
|
+
}), {
|
|
48525
|
+
kind: "mutation",
|
|
48526
|
+
auth: "admin",
|
|
48527
|
+
timeoutMs: 120 * 6e4
|
|
48528
|
+
}),
|
|
48529
|
+
/**
|
|
48530
|
+
* Start the trainer on a GPU. Looks the job up by `jobKey` first, so a
|
|
48531
|
+
* retried submit never starts a second GPU. `jobSpecJson` is written next
|
|
48532
|
+
* to the dataset as `job.json`; `maxRuntimeSec` is enforced by the
|
|
48533
|
+
* provider (a hard timeout), not by the hub.
|
|
48534
|
+
*/
|
|
48535
|
+
submitJob: method(external_exports.object({
|
|
48536
|
+
...JobRef,
|
|
48537
|
+
trainer: TrainerSourceRefSchema,
|
|
48538
|
+
jobSpecJson: external_exports.string().min(2).max(64e3),
|
|
48539
|
+
gpuType: external_exports.string(),
|
|
48540
|
+
region: external_exports.string(),
|
|
48541
|
+
maxRuntimeSec: external_exports.number().int().positive()
|
|
48542
|
+
}), ProviderJobStatusSchema, {
|
|
48543
|
+
kind: "mutation",
|
|
48544
|
+
auth: "admin",
|
|
48545
|
+
timeoutMs: 30 * 6e4
|
|
48546
|
+
}),
|
|
48547
|
+
getJob: method(external_exports.object(JobRef), ProviderJobStatusSchema, {
|
|
48548
|
+
auth: "admin",
|
|
48549
|
+
timeoutMs: 6e4
|
|
48550
|
+
}),
|
|
48551
|
+
/** Stdout/stderr since `cursor` (opaque), oldest first, at most `max` lines. */
|
|
48552
|
+
listJobEvents: method(external_exports.object({
|
|
48553
|
+
...JobRef,
|
|
48554
|
+
cursor: external_exports.string().optional(),
|
|
48555
|
+
max: external_exports.number().int().min(1).max(500)
|
|
48556
|
+
}), external_exports.object({
|
|
48557
|
+
lines: external_exports.array(TrainingLogLineSchema).readonly(),
|
|
48558
|
+
cursor: external_exports.string()
|
|
48559
|
+
}), {
|
|
48560
|
+
auth: "admin",
|
|
48561
|
+
timeoutMs: 6e4
|
|
48562
|
+
}),
|
|
48563
|
+
/** Stop the job. Idempotent: an unknown or finished job is a no-op. */
|
|
48564
|
+
cancelJob: method(external_exports.object(JobRef), external_exports.object({ ok: external_exports.literal(true) }), {
|
|
48565
|
+
kind: "mutation",
|
|
48566
|
+
auth: "admin",
|
|
48567
|
+
timeoutMs: 6e4
|
|
48568
|
+
}),
|
|
48569
|
+
/** The job's `result.json`, as text (small, JSON). `found: false` before it exists. */
|
|
48570
|
+
readResult: method(external_exports.object(JobRef), external_exports.object({
|
|
48571
|
+
found: external_exports.boolean(),
|
|
48572
|
+
text: external_exports.string().optional()
|
|
48573
|
+
}), {
|
|
48574
|
+
kind: "mutation",
|
|
48575
|
+
auth: "admin",
|
|
48576
|
+
timeoutMs: 5 * 6e4
|
|
48577
|
+
}),
|
|
48578
|
+
/**
|
|
48579
|
+
* Offer one output file of the job (`bundle.tar`) to the caller as a
|
|
48580
|
+
* one-shot `ctx.peerBytes` ticket, streamed from the cloud — the provider
|
|
48581
|
+
* stages nothing on disk. The caller dials it at once.
|
|
48582
|
+
*/
|
|
48583
|
+
offerArtifact: method(external_exports.object({
|
|
48584
|
+
...JobRef,
|
|
48585
|
+
path: external_exports.enum(["bundle.tar"])
|
|
48586
|
+
}), external_exports.object({ ticket: PeerBytesTicketSchema }), {
|
|
48587
|
+
kind: "mutation",
|
|
48588
|
+
auth: "admin",
|
|
48589
|
+
timeoutMs: 5 * 6e4
|
|
48590
|
+
}),
|
|
48591
|
+
/** Delete every cloud object tagged with `jobKey` (the dataset first). Idempotent. */
|
|
48592
|
+
cleanupJob: method(external_exports.object(JobRef), external_exports.object({ deleted: external_exports.array(external_exports.string()).readonly() }), {
|
|
48593
|
+
kind: "mutation",
|
|
48594
|
+
auth: "admin",
|
|
48595
|
+
timeoutMs: 5 * 6e4
|
|
48596
|
+
}),
|
|
48597
|
+
/**
|
|
48598
|
+
* Jobs this provider can still see. Optional `entryId` filters; omit to
|
|
48599
|
+
* list every entry (orphan sweep). Pin with `{ addonId }`.
|
|
48600
|
+
*/
|
|
48601
|
+
listJobs: method(external_exports.object({ entryId: external_exports.string().min(1).optional() }), external_exports.array(ProviderJobStatusSchema).readonly(), {
|
|
48602
|
+
auth: "admin",
|
|
48603
|
+
timeoutMs: 2 * 6e4
|
|
48604
|
+
})
|
|
48605
|
+
}
|
|
48606
|
+
};
|
|
48607
|
+
var TrainingCorpusSelectionSchema = external_exports.object({
|
|
48608
|
+
collectionIds: external_exports.array(external_exports.string()).min(1),
|
|
48609
|
+
/** Default complete-only for v1 */
|
|
48610
|
+
workState: external_exports.enum([
|
|
48611
|
+
"complete",
|
|
48612
|
+
"annotated_or_complete",
|
|
48613
|
+
"any_annotated"
|
|
48614
|
+
]).default("complete")
|
|
48615
|
+
});
|
|
48616
|
+
var TrainingBaseModelSchema = external_exports.object({
|
|
48617
|
+
modelId: external_exports.string(),
|
|
48618
|
+
label: external_exports.string(),
|
|
48619
|
+
weights: external_exports.string(),
|
|
48620
|
+
imgsz: external_exports.number().int(),
|
|
48621
|
+
baselineOnnxUrl: external_exports.string(),
|
|
48622
|
+
baselineFloors: external_exports.record(external_exports.string(), external_exports.number()),
|
|
48623
|
+
/** The base the fleet runs most — the UI's default. */
|
|
48624
|
+
recommended: external_exports.boolean()
|
|
48625
|
+
});
|
|
48626
|
+
var TrainingPresetSchema = external_exports.enum([
|
|
48627
|
+
"quick",
|
|
48628
|
+
"standard",
|
|
48629
|
+
"thorough"
|
|
48630
|
+
]);
|
|
48631
|
+
var TrainingJobRequestSchema = external_exports.object({
|
|
48632
|
+
/** Live collection + work-state criteria; resolved at plan/start. */
|
|
48633
|
+
selection: TrainingCorpusSelectionSchema,
|
|
48634
|
+
/**
|
|
48635
|
+
* The provider **entry** that runs it (credentials + defaults).
|
|
48636
|
+
* Resolve to an owning addon via `training-provider.describe` / `listEntries`.
|
|
48637
|
+
*/
|
|
48638
|
+
entryId: external_exports.string().min(1),
|
|
48639
|
+
gpuType: external_exports.string().min(1),
|
|
48640
|
+
region: external_exports.string(),
|
|
48641
|
+
baseModelId: external_exports.string().min(1),
|
|
48642
|
+
preset: TrainingPresetSchema,
|
|
48643
|
+
/** Freeze the backbone's first N layers; `null` = the preset's choice. */
|
|
48644
|
+
freeze: external_exports.number().int().nonnegative().nullable(),
|
|
48645
|
+
/** Cameras held out whole for evaluation; `null` = the orchestrator's default. */
|
|
48646
|
+
holdoutCameras: external_exports.array(external_exports.number().int()).nullable()
|
|
48647
|
+
});
|
|
48648
|
+
var TrainingSplitPlanSchema = external_exports.object({
|
|
48649
|
+
holdoutCameras: external_exports.array(external_exports.number().int()).readonly(),
|
|
48650
|
+
/** Used when no camera is held out: the last N days of every camera. */
|
|
48651
|
+
holdoutLastDays: external_exports.number().int().nonnegative(),
|
|
48652
|
+
/** Holdout subjects per class (camera holdout only; `null` = known only after the split). */
|
|
48653
|
+
holdoutSupport: external_exports.record(external_exports.string(), external_exports.number().int()).nullable(),
|
|
48654
|
+
trainSubjects: external_exports.number().int()
|
|
48655
|
+
});
|
|
48656
|
+
var TrainingRefusalReasonSchema = external_exports.enum([
|
|
48657
|
+
"unknown-dataset",
|
|
48658
|
+
"unknown-provider",
|
|
48659
|
+
"provider-not-configured",
|
|
48660
|
+
"unknown-base-model",
|
|
48661
|
+
"unknown-gpu",
|
|
48662
|
+
"dataset-too-large",
|
|
48663
|
+
"no-training-subjects",
|
|
48664
|
+
"job-already-running"
|
|
48665
|
+
]);
|
|
48666
|
+
var TrainingJobPlanSchema = external_exports.object({
|
|
48667
|
+
refusal: external_exports.object({
|
|
48668
|
+
reason: TrainingRefusalReasonSchema,
|
|
48669
|
+
detail: external_exports.string()
|
|
48670
|
+
}).nullable(),
|
|
48671
|
+
warnings: external_exports.array(external_exports.string()).readonly(),
|
|
48672
|
+
split: TrainingSplitPlanSchema.nullable(),
|
|
48673
|
+
estimate: external_exports.object({
|
|
48674
|
+
datasetBytes: external_exports.number().int(),
|
|
48675
|
+
uploadMinutesAt20Mbps: external_exports.number(),
|
|
48676
|
+
gpuSecondsLow: external_exports.number(),
|
|
48677
|
+
gpuSecondsHigh: external_exports.number(),
|
|
48678
|
+
usdLow: external_exports.number(),
|
|
48679
|
+
usdHigh: external_exports.number(),
|
|
48680
|
+
notes: external_exports.array(external_exports.string()).readonly()
|
|
48681
|
+
}).nullable(),
|
|
48682
|
+
/** Pre-filled from the provider's settings; the operator may lower or raise them. */
|
|
48683
|
+
defaults: external_exports.object({
|
|
48684
|
+
maxCostUsd: external_exports.number(),
|
|
48685
|
+
maxRuntimeSec: external_exports.number().int()
|
|
48686
|
+
}).nullable(),
|
|
48687
|
+
/** The sentence the confirm dialog repeats: where the frames go and when they are deleted. */
|
|
48688
|
+
dataNotice: external_exports.string()
|
|
48689
|
+
});
|
|
48690
|
+
var TrainingJobStateSchema = external_exports.enum([
|
|
48691
|
+
"queued",
|
|
48692
|
+
"uploading",
|
|
48693
|
+
"submitted",
|
|
48694
|
+
"starting",
|
|
48695
|
+
"running",
|
|
48696
|
+
"collecting",
|
|
48697
|
+
"ready",
|
|
48698
|
+
"registered",
|
|
48699
|
+
"canary",
|
|
48700
|
+
"failed",
|
|
48701
|
+
"cancelling",
|
|
48702
|
+
"cancelled",
|
|
48703
|
+
"lost",
|
|
48704
|
+
"expired",
|
|
48705
|
+
"discarded"
|
|
48706
|
+
]);
|
|
48707
|
+
var TrainingFailureReasonSchema = external_exports.enum([
|
|
48708
|
+
"cost-cap",
|
|
48709
|
+
"runtime-cap",
|
|
48710
|
+
"upload-failed",
|
|
48711
|
+
"submit-failed",
|
|
48712
|
+
"trainer-failed",
|
|
48713
|
+
"result-invalid",
|
|
48714
|
+
"checksum-mismatch",
|
|
48715
|
+
"fetch-failed",
|
|
48716
|
+
"provider-error",
|
|
48717
|
+
"hub-restart-during-upload"
|
|
48718
|
+
]);
|
|
48719
|
+
var TrainingProgressPointSchema = external_exports.object({
|
|
48720
|
+
epoch: external_exports.number().int(),
|
|
48721
|
+
map50: external_exports.number().nullable(),
|
|
48722
|
+
map50_95: external_exports.number().nullable()
|
|
48723
|
+
});
|
|
48724
|
+
var TrainingCanarySchema = external_exports.object({
|
|
48725
|
+
deviceIds: external_exports.array(external_exports.number().int()).readonly(),
|
|
48726
|
+
since: external_exports.number(),
|
|
48727
|
+
/** Every override the canary replaced, exactly, so rollback restores it. */
|
|
48728
|
+
previous: external_exports.array(external_exports.object({
|
|
48729
|
+
deviceId: external_exports.number().int(),
|
|
48730
|
+
nodeId: external_exports.string(),
|
|
48731
|
+
deviceKey: external_exports.string(),
|
|
48732
|
+
patch: external_exports.object({
|
|
48733
|
+
modelId: external_exports.string().optional(),
|
|
48734
|
+
settings: external_exports.record(external_exports.string(), external_exports.unknown()).readonly().optional()
|
|
48735
|
+
}).nullable()
|
|
48736
|
+
})).readonly()
|
|
48737
|
+
});
|
|
48738
|
+
var TrainingJobSchema = external_exports.object({
|
|
48739
|
+
id: external_exports.string(),
|
|
48740
|
+
idempotencyKey: external_exports.string(),
|
|
48741
|
+
name: external_exports.string(),
|
|
48742
|
+
createdAt: external_exports.number(),
|
|
48743
|
+
updatedAt: external_exports.number(),
|
|
48744
|
+
state: TrainingJobStateSchema,
|
|
48745
|
+
/**
|
|
48746
|
+
* Shared by every job enqueued together via `startJobBatch`.
|
|
48747
|
+
* `null` for a lone `startJob`. The engine advances queued siblings by this id.
|
|
48748
|
+
*/
|
|
48749
|
+
batchId: external_exports.string().nullable().default(null),
|
|
48750
|
+
stage: TrainingStageSchema.nullable(),
|
|
48751
|
+
failure: external_exports.object({
|
|
48752
|
+
reason: TrainingFailureReasonSchema,
|
|
48753
|
+
stage: external_exports.string().nullable(),
|
|
48754
|
+
detail: external_exports.string()
|
|
48755
|
+
}).nullable(),
|
|
48756
|
+
request: TrainingJobRequestSchema,
|
|
48757
|
+
maxCostUsd: external_exports.number().nonnegative(),
|
|
48758
|
+
maxRuntimeSec: external_exports.number().int().positive(),
|
|
48759
|
+
trainer: TrainerSourceRefSchema,
|
|
48760
|
+
datasetLayout: RetrainExportLayoutSchema,
|
|
48761
|
+
/** Frame count snapshotted when the job started (audit; equals `frameIds.length`). */
|
|
48762
|
+
frameCount: external_exports.number().int().nonnegative(),
|
|
48763
|
+
/** Resolved frame ids at start — the archive ships exactly these. */
|
|
48764
|
+
frameIds: external_exports.array(external_exports.string()).max(2e4).readonly(),
|
|
48765
|
+
/** Hash of what those frames taught at start (trainer `dataset.annotationHash`). */
|
|
48766
|
+
annotationHash: external_exports.string(),
|
|
48767
|
+
dataset: external_exports.object({
|
|
48768
|
+
bytes: external_exports.number().int(),
|
|
48769
|
+
sha256: external_exports.string(),
|
|
48770
|
+
uploadedAt: external_exports.number()
|
|
48771
|
+
}).nullable(),
|
|
48772
|
+
split: TrainingSplitPlanSchema,
|
|
48773
|
+
provider: external_exports.object({
|
|
48774
|
+
state: ProviderJobStateSchema.nullable(),
|
|
48775
|
+
providerJobId: external_exports.string().nullable(),
|
|
48776
|
+
startedAt: external_exports.number().nullable(),
|
|
48777
|
+
endedAt: external_exports.number().nullable(),
|
|
48778
|
+
billedSeconds: external_exports.number(),
|
|
48779
|
+
costUsd: external_exports.number(),
|
|
48780
|
+
costIsEstimate: external_exports.boolean(),
|
|
48781
|
+
lastPolledAt: external_exports.number().nullable()
|
|
48782
|
+
}),
|
|
48783
|
+
progress: external_exports.object({
|
|
48784
|
+
epoch: external_exports.number().int().nullable(),
|
|
48785
|
+
epochs: external_exports.number().int().nullable(),
|
|
48786
|
+
etaSec: external_exports.number().nullable(),
|
|
48787
|
+
series: external_exports.array(TrainingProgressPointSchema).readonly()
|
|
48788
|
+
}),
|
|
48789
|
+
/** The last lines of the job's output (≤ 200), newest last. Never frame paths. */
|
|
48790
|
+
logTail: external_exports.array(external_exports.string()).readonly(),
|
|
48791
|
+
logCursor: external_exports.string().nullable(),
|
|
48792
|
+
artifacts: external_exports.object({
|
|
48793
|
+
bundleBytes: external_exports.number().int(),
|
|
48794
|
+
bundleSha256: external_exports.string(),
|
|
48795
|
+
fetchedAt: external_exports.number(),
|
|
48796
|
+
/** When the staged artefacts are deleted from the hub. */
|
|
48797
|
+
expiresAt: external_exports.number()
|
|
48798
|
+
}).nullable(),
|
|
48799
|
+
/** When the provider-side copy of the frames was deleted; null while it exists. */
|
|
48800
|
+
cloudDatasetDeletedAt: external_exports.number().nullable(),
|
|
48801
|
+
/** A failed job's dataset is kept until then (the provider's grace), then deleted. */
|
|
48802
|
+
cloudCleanupDueAt: external_exports.number().nullable(),
|
|
48803
|
+
/** Model ids registered from this job (base, and int8 when kept). */
|
|
48804
|
+
registeredModelIds: external_exports.array(external_exports.string()).readonly(),
|
|
48805
|
+
canary: TrainingCanarySchema.nullable()
|
|
48806
|
+
});
|
|
48807
|
+
var IdInput = external_exports.object({ id: external_exports.string().min(1) });
|
|
48808
|
+
var trainingCapability = {
|
|
48809
|
+
name: "training",
|
|
48810
|
+
scope: "system",
|
|
48811
|
+
mode: "singleton",
|
|
48812
|
+
mount: { kind: "hub-only" },
|
|
48813
|
+
methods: {
|
|
48814
|
+
listBaseModels: method(external_exports.object({}), external_exports.array(TrainingBaseModelSchema).readonly(), { auth: "admin" }),
|
|
48815
|
+
/** Split, estimate, defaults and any named refusal — nothing is started. */
|
|
48816
|
+
planJob: method(TrainingJobRequestSchema, TrainingJobPlanSchema, {
|
|
48817
|
+
auth: "admin",
|
|
48818
|
+
timeoutMs: 6e4
|
|
48819
|
+
}),
|
|
48820
|
+
/**
|
|
48821
|
+
* Start a job. The same `idempotencyKey` returns the job it already
|
|
48822
|
+
* started. Answers at once (`uploading`); the upload and the submit run in
|
|
48823
|
+
* the background and the job record says how far they got.
|
|
48824
|
+
*/
|
|
48825
|
+
startJob: method(TrainingJobRequestSchema.extend({
|
|
48826
|
+
name: external_exports.string().min(1).max(120),
|
|
48827
|
+
maxCostUsd: external_exports.number().positive(),
|
|
48828
|
+
maxRuntimeSec: external_exports.number().int().positive(),
|
|
48829
|
+
idempotencyKey: external_exports.string().min(8).max(80)
|
|
48830
|
+
}), external_exports.discriminatedUnion("kind", [external_exports.object({
|
|
48831
|
+
kind: external_exports.literal("started"),
|
|
48832
|
+
job: TrainingJobSchema
|
|
48833
|
+
}), external_exports.object({
|
|
48834
|
+
kind: external_exports.literal("refused"),
|
|
48835
|
+
reason: TrainingRefusalReasonSchema,
|
|
48836
|
+
detail: external_exports.string()
|
|
48837
|
+
})]), {
|
|
48838
|
+
kind: "mutation",
|
|
48839
|
+
auth: "admin",
|
|
48840
|
+
timeoutMs: 12e4
|
|
48841
|
+
}),
|
|
48842
|
+
/**
|
|
48843
|
+
* Enqueue one job per base model (same selection, entry, caps). The first
|
|
48844
|
+
* becomes `uploading`; the rest stay `queued` until the prior job settles.
|
|
48845
|
+
* One ACTIVE job at a time — a parallel `startJob` still gets
|
|
48846
|
+
* `job-already-running`. The same `idempotencyKey` returns the batch it
|
|
48847
|
+
* already started.
|
|
48848
|
+
*/
|
|
48849
|
+
startJobBatch: method(TrainingJobRequestSchema.omit({ baseModelId: true }).extend({
|
|
48850
|
+
baseModelIds: external_exports.array(external_exports.string().min(1)).min(1),
|
|
48851
|
+
name: external_exports.string().min(1).max(120),
|
|
48852
|
+
maxCostUsd: external_exports.number().positive(),
|
|
48853
|
+
maxRuntimeSec: external_exports.number().int().positive(),
|
|
48854
|
+
idempotencyKey: external_exports.string().min(8).max(80)
|
|
48855
|
+
}), external_exports.discriminatedUnion("kind", [external_exports.object({
|
|
48856
|
+
kind: external_exports.literal("started"),
|
|
48857
|
+
batchId: external_exports.string(),
|
|
48858
|
+
jobs: external_exports.array(TrainingJobSchema).min(1).readonly()
|
|
48859
|
+
}), external_exports.object({
|
|
48860
|
+
kind: external_exports.literal("refused"),
|
|
48861
|
+
reason: TrainingRefusalReasonSchema,
|
|
48862
|
+
detail: external_exports.string()
|
|
48863
|
+
})]), {
|
|
48864
|
+
kind: "mutation",
|
|
48865
|
+
auth: "admin",
|
|
48866
|
+
timeoutMs: 12e4
|
|
48867
|
+
}),
|
|
48868
|
+
listJobs: method(external_exports.object({}), external_exports.array(TrainingJobSchema).readonly(), { auth: "admin" }),
|
|
48869
|
+
getJob: method(IdInput, TrainingJobSchema.nullable(), { auth: "admin" }),
|
|
48870
|
+
cancelJob: method(IdInput, TrainingJobSchema, {
|
|
48871
|
+
kind: "mutation",
|
|
48872
|
+
auth: "admin",
|
|
48873
|
+
timeoutMs: 12e4
|
|
48874
|
+
}),
|
|
48875
|
+
/** The verified `result.json` of a job in `ready` or later; null before. */
|
|
48876
|
+
getJobResult: method(IdInput, TrainingResultSchema.nullable(), { auth: "admin" }),
|
|
48877
|
+
/** Hand the verified bundle to Model Studio; optionally canary right after. */
|
|
48878
|
+
registerResult: method(IdInput.extend({ canaryDeviceIds: external_exports.array(external_exports.number().int()).readonly() }), TrainingJobSchema, {
|
|
48879
|
+
kind: "mutation",
|
|
48880
|
+
auth: "admin",
|
|
48881
|
+
timeoutMs: 30 * 6e4
|
|
48882
|
+
}),
|
|
48883
|
+
/** Pin the registered model on these cameras, remembering what it replaced. */
|
|
48884
|
+
canaryResult: method(IdInput.extend({ deviceIds: external_exports.array(external_exports.number().int()).min(1).readonly() }), TrainingJobSchema, {
|
|
48885
|
+
kind: "mutation",
|
|
48886
|
+
auth: "admin",
|
|
48887
|
+
timeoutMs: 12e4
|
|
48888
|
+
}),
|
|
48889
|
+
/** Put every canary camera back exactly as it was. */
|
|
48890
|
+
rollbackCanary: method(IdInput, TrainingJobSchema, {
|
|
48891
|
+
kind: "mutation",
|
|
48892
|
+
auth: "admin",
|
|
48893
|
+
timeoutMs: 12e4
|
|
48894
|
+
}),
|
|
48895
|
+
/** Delete the staged artefacts of an unregistered result. */
|
|
48896
|
+
discardResult: method(IdInput, TrainingJobSchema, {
|
|
48897
|
+
kind: "mutation",
|
|
48898
|
+
auth: "admin"
|
|
48899
|
+
})
|
|
48900
|
+
}
|
|
48901
|
+
};
|
|
47818
48902
|
var PIPELINE_FLOW_CAPABILITY_NAMES = [
|
|
47819
48903
|
"decoder",
|
|
47820
48904
|
"motion-detection",
|
|
@@ -48694,6 +49778,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
48694
49778
|
addonId: null,
|
|
48695
49779
|
access: "create"
|
|
48696
49780
|
},
|
|
49781
|
+
"backup.checkBackupKey": {
|
|
49782
|
+
capName: "backup",
|
|
49783
|
+
capScope: "system",
|
|
49784
|
+
addonId: null,
|
|
49785
|
+
access: "create"
|
|
49786
|
+
},
|
|
48697
49787
|
"backup.delete": {
|
|
48698
49788
|
capName: "backup",
|
|
48699
49789
|
capScope: "system",
|
|
@@ -48706,6 +49796,18 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
48706
49796
|
addonId: null,
|
|
48707
49797
|
access: "delete"
|
|
48708
49798
|
},
|
|
49799
|
+
"backup.disableEncryption": {
|
|
49800
|
+
capName: "backup",
|
|
49801
|
+
capScope: "system",
|
|
49802
|
+
addonId: null,
|
|
49803
|
+
access: "create"
|
|
49804
|
+
},
|
|
49805
|
+
"backup.getEncryption": {
|
|
49806
|
+
capName: "backup",
|
|
49807
|
+
capScope: "system",
|
|
49808
|
+
addonId: null,
|
|
49809
|
+
access: "view"
|
|
49810
|
+
},
|
|
48709
49811
|
"backup.getEntries": {
|
|
48710
49812
|
capName: "backup",
|
|
48711
49813
|
capScope: "system",
|
|
@@ -48760,6 +49862,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
48760
49862
|
addonId: null,
|
|
48761
49863
|
access: "create"
|
|
48762
49864
|
},
|
|
49865
|
+
"backup.setupEncryption": {
|
|
49866
|
+
capName: "backup",
|
|
49867
|
+
capScope: "system",
|
|
49868
|
+
addonId: null,
|
|
49869
|
+
access: "create"
|
|
49870
|
+
},
|
|
48763
49871
|
"backup.trigger": {
|
|
48764
49872
|
capName: "backup",
|
|
48765
49873
|
capScope: "system",
|
|
@@ -49312,6 +50420,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
49312
50420
|
addonId: null,
|
|
49313
50421
|
access: "create"
|
|
49314
50422
|
},
|
|
50423
|
+
"customModelRegistry.importModelBundle": {
|
|
50424
|
+
capName: "custom-model-registry",
|
|
50425
|
+
capScope: "system",
|
|
50426
|
+
addonId: null,
|
|
50427
|
+
access: "create"
|
|
50428
|
+
},
|
|
49315
50429
|
"customModelRegistry.listModels": {
|
|
49316
50430
|
capName: "custom-model-registry",
|
|
49317
50431
|
capScope: "system",
|
|
@@ -50752,6 +51866,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
50752
51866
|
addonId: null,
|
|
50753
51867
|
access: "view"
|
|
50754
51868
|
},
|
|
51869
|
+
"keychainAdmin.acknowledgeReset": {
|
|
51870
|
+
capName: "keychain-admin",
|
|
51871
|
+
capScope: "system",
|
|
51872
|
+
addonId: null,
|
|
51873
|
+
access: "create"
|
|
51874
|
+
},
|
|
50755
51875
|
"keychainAdmin.deleteOrphans": {
|
|
50756
51876
|
capName: "keychain-admin",
|
|
50757
51877
|
capScope: "system",
|
|
@@ -50788,6 +51908,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
50788
51908
|
addonId: null,
|
|
50789
51909
|
access: "delete"
|
|
50790
51910
|
},
|
|
51911
|
+
"keychainAdmin.resetReport": {
|
|
51912
|
+
capName: "keychain-admin",
|
|
51913
|
+
capScope: "system",
|
|
51914
|
+
addonId: null,
|
|
51915
|
+
access: "delete"
|
|
51916
|
+
},
|
|
50791
51917
|
"keychainAdmin.reveal": {
|
|
50792
51918
|
capName: "keychain-admin",
|
|
50793
51919
|
capScope: "system",
|
|
@@ -52114,6 +53240,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
52114
53240
|
addonId: null,
|
|
52115
53241
|
access: "create"
|
|
52116
53242
|
},
|
|
53243
|
+
"osdManager.setSlotCameraEnabled": {
|
|
53244
|
+
capName: "osd-manager",
|
|
53245
|
+
capScope: "system",
|
|
53246
|
+
addonId: null,
|
|
53247
|
+
access: "create"
|
|
53248
|
+
},
|
|
52117
53249
|
"osdManager.upsertTemplate": {
|
|
52118
53250
|
capName: "osd-manager",
|
|
52119
53251
|
capScope: "system",
|
|
@@ -52252,12 +53384,6 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
52252
53384
|
addonId: null,
|
|
52253
53385
|
access: "create"
|
|
52254
53386
|
},
|
|
52255
|
-
"pipelineAnalytics.createRetrainDatasetVersion": {
|
|
52256
|
-
capName: "pipeline-analytics",
|
|
52257
|
-
capScope: "device",
|
|
52258
|
-
addonId: null,
|
|
52259
|
-
access: "create"
|
|
52260
|
-
},
|
|
52261
53387
|
"pipelineAnalytics.deleteDeviceEvents": {
|
|
52262
53388
|
capName: "pipeline-analytics",
|
|
52263
53389
|
capScope: "device",
|
|
@@ -52270,12 +53396,6 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
52270
53396
|
addonId: null,
|
|
52271
53397
|
access: "delete"
|
|
52272
53398
|
},
|
|
52273
|
-
"pipelineAnalytics.deleteRetrainDatasetVersion": {
|
|
52274
|
-
capName: "pipeline-analytics",
|
|
52275
|
-
capScope: "device",
|
|
52276
|
-
addonId: null,
|
|
52277
|
-
access: "delete"
|
|
52278
|
-
},
|
|
52279
53399
|
"pipelineAnalytics.deleteTracks": {
|
|
52280
53400
|
capName: "pipeline-analytics",
|
|
52281
53401
|
capScope: "device",
|
|
@@ -52378,6 +53498,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
52378
53498
|
addonId: null,
|
|
52379
53499
|
access: "view"
|
|
52380
53500
|
},
|
|
53501
|
+
"pipelineAnalytics.getRetrainCorpusKpi": {
|
|
53502
|
+
capName: "pipeline-analytics",
|
|
53503
|
+
capScope: "device",
|
|
53504
|
+
addonId: null,
|
|
53505
|
+
access: "view"
|
|
53506
|
+
},
|
|
52381
53507
|
"pipelineAnalytics.getRetrainExportUrl": {
|
|
52382
53508
|
capName: "pipeline-analytics",
|
|
52383
53509
|
capScope: "device",
|
|
@@ -52498,7 +53624,7 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
52498
53624
|
addonId: null,
|
|
52499
53625
|
access: "view"
|
|
52500
53626
|
},
|
|
52501
|
-
"pipelineAnalytics.
|
|
53627
|
+
"pipelineAnalytics.listRetrainCorpusPage": {
|
|
52502
53628
|
capName: "pipeline-analytics",
|
|
52503
53629
|
capScope: "device",
|
|
52504
53630
|
addonId: null,
|
|
@@ -52534,23 +53660,23 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
52534
53660
|
addonId: null,
|
|
52535
53661
|
access: "view"
|
|
52536
53662
|
},
|
|
52537
|
-
"pipelineAnalytics.
|
|
53663
|
+
"pipelineAnalytics.offerRetrainArchive": {
|
|
52538
53664
|
capName: "pipeline-analytics",
|
|
52539
53665
|
capScope: "device",
|
|
52540
53666
|
addonId: null,
|
|
52541
|
-
access: "
|
|
53667
|
+
access: "create"
|
|
52542
53668
|
},
|
|
52543
|
-
"pipelineAnalytics.
|
|
53669
|
+
"pipelineAnalytics.ownersWithMedia": {
|
|
52544
53670
|
capName: "pipeline-analytics",
|
|
52545
53671
|
capScope: "device",
|
|
52546
53672
|
addonId: null,
|
|
52547
|
-
access: "
|
|
53673
|
+
access: "view"
|
|
52548
53674
|
},
|
|
52549
|
-
"pipelineAnalytics.
|
|
53675
|
+
"pipelineAnalytics.pauseForStorageMigration": {
|
|
52550
53676
|
capName: "pipeline-analytics",
|
|
52551
53677
|
capScope: "device",
|
|
52552
53678
|
addonId: null,
|
|
52553
|
-
access: "
|
|
53679
|
+
access: "create"
|
|
52554
53680
|
},
|
|
52555
53681
|
"pipelineAnalytics.proposeRetrainAnnotations": {
|
|
52556
53682
|
capName: "pipeline-analytics",
|
|
@@ -52630,6 +53756,12 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
52630
53756
|
addonId: null,
|
|
52631
53757
|
access: "create"
|
|
52632
53758
|
},
|
|
53759
|
+
"pipelineAnalytics.resolveRetrainTrainingCorpus": {
|
|
53760
|
+
capName: "pipeline-analytics",
|
|
53761
|
+
capScope: "device",
|
|
53762
|
+
addonId: null,
|
|
53763
|
+
access: "view"
|
|
53764
|
+
},
|
|
52633
53765
|
"pipelineAnalytics.restageRetrainTrack": {
|
|
52634
53766
|
capName: "pipeline-analytics",
|
|
52635
53767
|
capScope: "device",
|
|
@@ -52690,12 +53822,6 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
52690
53822
|
addonId: null,
|
|
52691
53823
|
access: "create"
|
|
52692
53824
|
},
|
|
52693
|
-
"pipelineAnalytics.verifyRetrainDatasetVersion": {
|
|
52694
|
-
capName: "pipeline-analytics",
|
|
52695
|
-
capScope: "device",
|
|
52696
|
-
addonId: null,
|
|
52697
|
-
access: "view"
|
|
52698
|
-
},
|
|
52699
53825
|
"pipelineAnalytics.wipeAllAnalytics": {
|
|
52700
53826
|
capName: "pipeline-analytics",
|
|
52701
53827
|
capScope: "device",
|
|
@@ -55072,6 +56198,180 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
55072
56198
|
addonId: null,
|
|
55073
56199
|
access: "view"
|
|
55074
56200
|
},
|
|
56201
|
+
"training.canaryResult": {
|
|
56202
|
+
capName: "training",
|
|
56203
|
+
capScope: "system",
|
|
56204
|
+
addonId: null,
|
|
56205
|
+
access: "create"
|
|
56206
|
+
},
|
|
56207
|
+
"training.cancelJob": {
|
|
56208
|
+
capName: "training",
|
|
56209
|
+
capScope: "system",
|
|
56210
|
+
addonId: null,
|
|
56211
|
+
access: "create"
|
|
56212
|
+
},
|
|
56213
|
+
"training.discardResult": {
|
|
56214
|
+
capName: "training",
|
|
56215
|
+
capScope: "system",
|
|
56216
|
+
addonId: null,
|
|
56217
|
+
access: "create"
|
|
56218
|
+
},
|
|
56219
|
+
"training.getJob": {
|
|
56220
|
+
capName: "training",
|
|
56221
|
+
capScope: "system",
|
|
56222
|
+
addonId: null,
|
|
56223
|
+
access: "view"
|
|
56224
|
+
},
|
|
56225
|
+
"training.getJobResult": {
|
|
56226
|
+
capName: "training",
|
|
56227
|
+
capScope: "system",
|
|
56228
|
+
addonId: null,
|
|
56229
|
+
access: "view"
|
|
56230
|
+
},
|
|
56231
|
+
"training.listBaseModels": {
|
|
56232
|
+
capName: "training",
|
|
56233
|
+
capScope: "system",
|
|
56234
|
+
addonId: null,
|
|
56235
|
+
access: "view"
|
|
56236
|
+
},
|
|
56237
|
+
"training.listJobs": {
|
|
56238
|
+
capName: "training",
|
|
56239
|
+
capScope: "system",
|
|
56240
|
+
addonId: null,
|
|
56241
|
+
access: "view"
|
|
56242
|
+
},
|
|
56243
|
+
"training.planJob": {
|
|
56244
|
+
capName: "training",
|
|
56245
|
+
capScope: "system",
|
|
56246
|
+
addonId: null,
|
|
56247
|
+
access: "view"
|
|
56248
|
+
},
|
|
56249
|
+
"training.registerResult": {
|
|
56250
|
+
capName: "training",
|
|
56251
|
+
capScope: "system",
|
|
56252
|
+
addonId: null,
|
|
56253
|
+
access: "create"
|
|
56254
|
+
},
|
|
56255
|
+
"training.rollbackCanary": {
|
|
56256
|
+
capName: "training",
|
|
56257
|
+
capScope: "system",
|
|
56258
|
+
addonId: null,
|
|
56259
|
+
access: "create"
|
|
56260
|
+
},
|
|
56261
|
+
"training.startJob": {
|
|
56262
|
+
capName: "training",
|
|
56263
|
+
capScope: "system",
|
|
56264
|
+
addonId: null,
|
|
56265
|
+
access: "create"
|
|
56266
|
+
},
|
|
56267
|
+
"training.startJobBatch": {
|
|
56268
|
+
capName: "training",
|
|
56269
|
+
capScope: "system",
|
|
56270
|
+
addonId: null,
|
|
56271
|
+
access: "create"
|
|
56272
|
+
},
|
|
56273
|
+
"trainingProvider.cancelJob": {
|
|
56274
|
+
capName: "training-provider",
|
|
56275
|
+
capScope: "system",
|
|
56276
|
+
addonId: null,
|
|
56277
|
+
access: "create"
|
|
56278
|
+
},
|
|
56279
|
+
"trainingProvider.cleanupJob": {
|
|
56280
|
+
capName: "training-provider",
|
|
56281
|
+
capScope: "system",
|
|
56282
|
+
addonId: null,
|
|
56283
|
+
access: "create"
|
|
56284
|
+
},
|
|
56285
|
+
"trainingProvider.createEntry": {
|
|
56286
|
+
capName: "training-provider",
|
|
56287
|
+
capScope: "system",
|
|
56288
|
+
addonId: null,
|
|
56289
|
+
access: "create"
|
|
56290
|
+
},
|
|
56291
|
+
"trainingProvider.deleteEntry": {
|
|
56292
|
+
capName: "training-provider",
|
|
56293
|
+
capScope: "system",
|
|
56294
|
+
addonId: null,
|
|
56295
|
+
access: "delete"
|
|
56296
|
+
},
|
|
56297
|
+
"trainingProvider.describe": {
|
|
56298
|
+
capName: "training-provider",
|
|
56299
|
+
capScope: "system",
|
|
56300
|
+
addonId: null,
|
|
56301
|
+
access: "view"
|
|
56302
|
+
},
|
|
56303
|
+
"trainingProvider.describeTypes": {
|
|
56304
|
+
capName: "training-provider",
|
|
56305
|
+
capScope: "system",
|
|
56306
|
+
addonId: null,
|
|
56307
|
+
access: "view"
|
|
56308
|
+
},
|
|
56309
|
+
"trainingProvider.estimateJob": {
|
|
56310
|
+
capName: "training-provider",
|
|
56311
|
+
capScope: "system",
|
|
56312
|
+
addonId: null,
|
|
56313
|
+
access: "view"
|
|
56314
|
+
},
|
|
56315
|
+
"trainingProvider.getJob": {
|
|
56316
|
+
capName: "training-provider",
|
|
56317
|
+
capScope: "system",
|
|
56318
|
+
addonId: null,
|
|
56319
|
+
access: "view"
|
|
56320
|
+
},
|
|
56321
|
+
"trainingProvider.listEntries": {
|
|
56322
|
+
capName: "training-provider",
|
|
56323
|
+
capScope: "system",
|
|
56324
|
+
addonId: null,
|
|
56325
|
+
access: "view"
|
|
56326
|
+
},
|
|
56327
|
+
"trainingProvider.listJobEvents": {
|
|
56328
|
+
capName: "training-provider",
|
|
56329
|
+
capScope: "system",
|
|
56330
|
+
addonId: null,
|
|
56331
|
+
access: "view"
|
|
56332
|
+
},
|
|
56333
|
+
"trainingProvider.listJobs": {
|
|
56334
|
+
capName: "training-provider",
|
|
56335
|
+
capScope: "system",
|
|
56336
|
+
addonId: null,
|
|
56337
|
+
access: "view"
|
|
56338
|
+
},
|
|
56339
|
+
"trainingProvider.offerArtifact": {
|
|
56340
|
+
capName: "training-provider",
|
|
56341
|
+
capScope: "system",
|
|
56342
|
+
addonId: null,
|
|
56343
|
+
access: "create"
|
|
56344
|
+
},
|
|
56345
|
+
"trainingProvider.readResult": {
|
|
56346
|
+
capName: "training-provider",
|
|
56347
|
+
capScope: "system",
|
|
56348
|
+
addonId: null,
|
|
56349
|
+
access: "create"
|
|
56350
|
+
},
|
|
56351
|
+
"trainingProvider.submitJob": {
|
|
56352
|
+
capName: "training-provider",
|
|
56353
|
+
capScope: "system",
|
|
56354
|
+
addonId: null,
|
|
56355
|
+
access: "create"
|
|
56356
|
+
},
|
|
56357
|
+
"trainingProvider.updateEntry": {
|
|
56358
|
+
capName: "training-provider",
|
|
56359
|
+
capScope: "system",
|
|
56360
|
+
addonId: null,
|
|
56361
|
+
access: "create"
|
|
56362
|
+
},
|
|
56363
|
+
"trainingProvider.uploadDataset": {
|
|
56364
|
+
capName: "training-provider",
|
|
56365
|
+
capScope: "system",
|
|
56366
|
+
addonId: null,
|
|
56367
|
+
access: "create"
|
|
56368
|
+
},
|
|
56369
|
+
"trainingProvider.validateCredentials": {
|
|
56370
|
+
capName: "training-provider",
|
|
56371
|
+
capScope: "system",
|
|
56372
|
+
addonId: null,
|
|
56373
|
+
access: "create"
|
|
56374
|
+
},
|
|
55075
56375
|
"turnProvider.getTurnServers": {
|
|
55076
56376
|
capName: "turn-provider",
|
|
55077
56377
|
capScope: "system",
|
|
@@ -55096,12 +56396,6 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
55096
56396
|
addonId: null,
|
|
55097
56397
|
access: "create"
|
|
55098
56398
|
},
|
|
55099
|
-
"userManagement.createApiKey": {
|
|
55100
|
-
capName: "user-management",
|
|
55101
|
-
capScope: "system",
|
|
55102
|
-
addonId: null,
|
|
55103
|
-
access: "create"
|
|
55104
|
-
},
|
|
55105
56399
|
"userManagement.createScopedToken": {
|
|
55106
56400
|
capName: "user-management",
|
|
55107
56401
|
capScope: "system",
|
|
@@ -55138,12 +56432,6 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
55138
56432
|
addonId: null,
|
|
55139
56433
|
access: "view"
|
|
55140
56434
|
},
|
|
55141
|
-
"userManagement.linkExternalIdentity": {
|
|
55142
|
-
capName: "user-management",
|
|
55143
|
-
capScope: "system",
|
|
55144
|
-
addonId: null,
|
|
55145
|
-
access: "create"
|
|
55146
|
-
},
|
|
55147
56435
|
"userManagement.listApiKeys": {
|
|
55148
56436
|
capName: "user-management",
|
|
55149
56437
|
capScope: "system",
|
|
@@ -55246,12 +56534,6 @@ var METHOD_ACCESS_MAP = Object.freeze({
|
|
|
55246
56534
|
addonId: null,
|
|
55247
56535
|
access: "create"
|
|
55248
56536
|
},
|
|
55249
|
-
"userManagement.validateApiKey": {
|
|
55250
|
-
capName: "user-management",
|
|
55251
|
-
capScope: "system",
|
|
55252
|
-
addonId: null,
|
|
55253
|
-
access: "view"
|
|
55254
|
-
},
|
|
55255
56537
|
"userManagement.validateCredentials": {
|
|
55256
56538
|
capName: "user-management",
|
|
55257
56539
|
capScope: "system",
|
|
@@ -58326,6 +59608,11 @@ var METHOD_DEVICE_SELECTORS = Object.freeze({
|
|
|
58326
59608
|
form: "single",
|
|
58327
59609
|
optional: false
|
|
58328
59610
|
}],
|
|
59611
|
+
"osdManager.setSlotCameraEnabled": [{
|
|
59612
|
+
name: "deviceId",
|
|
59613
|
+
form: "single",
|
|
59614
|
+
optional: false
|
|
59615
|
+
}],
|
|
58329
59616
|
"petFeeder.callPet": [{
|
|
58330
59617
|
name: "deviceId",
|
|
58331
59618
|
form: "single",
|
|
@@ -58546,6 +59833,11 @@ var METHOD_DEVICE_SELECTORS = Object.freeze({
|
|
|
58546
59833
|
form: "array",
|
|
58547
59834
|
optional: false
|
|
58548
59835
|
}],
|
|
59836
|
+
"pipelineAnalytics.listRetrainCorpusPage": [{
|
|
59837
|
+
name: "deviceIds",
|
|
59838
|
+
form: "array",
|
|
59839
|
+
optional: true
|
|
59840
|
+
}],
|
|
58549
59841
|
"pipelineAnalytics.listRetrainStaging": [{
|
|
58550
59842
|
name: "deviceIds",
|
|
58551
59843
|
form: "array",
|
|
@@ -59407,6 +60699,11 @@ var METHOD_DEVICE_SELECTORS = Object.freeze({
|
|
|
59407
60699
|
form: "single",
|
|
59408
60700
|
optional: false
|
|
59409
60701
|
}],
|
|
60702
|
+
"training.canaryResult": [{
|
|
60703
|
+
name: "deviceIds",
|
|
60704
|
+
form: "array",
|
|
60705
|
+
optional: false
|
|
60706
|
+
}],
|
|
59410
60707
|
"update.getStatus": [{
|
|
59411
60708
|
name: "deviceId",
|
|
59412
60709
|
form: "single",
|
|
@@ -59650,6 +60947,7 @@ var METHOD_DEVICE_SELECTORS = Object.freeze({
|
|
|
59650
60947
|
});
|
|
59651
60948
|
var CAP_PROVIDER_KIND_MAP = Object.freeze({
|
|
59652
60949
|
"broker": "broker",
|
|
60950
|
+
"calendar-source": "calendar",
|
|
59653
60951
|
"device-export": "device-export",
|
|
59654
60952
|
"llm": "ai",
|
|
59655
60953
|
"mesh-network": "mesh",
|
|
@@ -60377,6 +61675,26 @@ var NC_TEMPLATE_VARS = [
|
|
|
60377
61675
|
"server-updated"
|
|
60378
61676
|
]
|
|
60379
61677
|
},
|
|
61678
|
+
{
|
|
61679
|
+
name: "nodeName",
|
|
61680
|
+
label: "Node name",
|
|
61681
|
+
example: "little-unraid",
|
|
61682
|
+
group: "system",
|
|
61683
|
+
families: ["rule"],
|
|
61684
|
+
fields: [...RULE_TEXT],
|
|
61685
|
+
kinds: ["system"],
|
|
61686
|
+
systemEventKinds: ["node-online", "node-offline"]
|
|
61687
|
+
},
|
|
61688
|
+
{
|
|
61689
|
+
name: "offlineFor",
|
|
61690
|
+
label: "Offline for",
|
|
61691
|
+
example: "44 min",
|
|
61692
|
+
group: "system",
|
|
61693
|
+
families: ["rule"],
|
|
61694
|
+
fields: [...RULE_TEXT],
|
|
61695
|
+
kinds: ["system"],
|
|
61696
|
+
systemEventKinds: ["node-online"]
|
|
61697
|
+
},
|
|
60380
61698
|
{
|
|
60381
61699
|
name: "devices",
|
|
60382
61700
|
label: "Devices",
|
|
@@ -60663,7 +61981,7 @@ var NC_TEMPLATE_VARS = [
|
|
|
60663
61981
|
{
|
|
60664
61982
|
name: "skipped",
|
|
60665
61983
|
label: "Skipped count",
|
|
60666
|
-
description: "How many named devices the mode cannot arm \u2014 muted, detection off, offline (title: m saltati).",
|
|
61984
|
+
description: "How many named devices the mode cannot arm \u2014 muted, detection off, offline, or Arm-anyway exclusions (title: m saltati).",
|
|
60667
61985
|
example: "1",
|
|
60668
61986
|
group: "system",
|
|
60669
61987
|
families: ["rule"],
|