@camstack/addon-pipeline 1.2.12 → 1.2.14

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.
Files changed (31) hide show
  1. package/dist/audio-analyzer/index.js +1 -1
  2. package/dist/audio-analyzer/index.mjs +1 -1
  3. package/dist/detection-pipeline/index.js +2 -2
  4. package/dist/detection-pipeline/index.mjs +2 -2
  5. package/dist/{dist-B89zyHyl.js → dist-DDTAur0R.js} +109 -30
  6. package/dist/{dist-DMiEnBkk.mjs → dist-OjOsoSZG.mjs} +110 -31
  7. package/dist/{fmp4-keyframes-BzTPoPVn.js → fmp4-keyframes-5s8T9Mng.js} +42 -7
  8. package/dist/{fmp4-keyframes-qOgJBjMO.mjs → fmp4-keyframes-CV0X1mGy.mjs} +37 -12
  9. package/dist/motion-wasm/index.js +1 -1
  10. package/dist/motion-wasm/index.mjs +1 -1
  11. package/dist/pipeline-runner/index.js +2 -2
  12. package/dist/pipeline-runner/index.mjs +2 -2
  13. package/dist/recorder/index.js +36 -8
  14. package/dist/recorder/index.mjs +36 -8
  15. package/dist/{step-definitions-NeFJ6mFi.mjs → step-definitions-B9vyUNYR.mjs} +1 -1
  16. package/dist/{step-definitions-DLgHGq8f.js → step-definitions-DGCuoeCj.js} +1 -1
  17. package/dist/stream-broker/_stub.js +2 -2
  18. package/dist/stream-broker/{_virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-CAvWbzaf.mjs → _virtual_mf-localSharedImportMap___mfe_internal__addon_stream_broker_widgets-S2nRs43G.mjs} +2 -2
  19. package/dist/stream-broker/{_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-DbC3MMjB.mjs → _virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_types__loadShare__.js-BDeEvhV5.mjs} +1 -1
  20. package/dist/stream-broker/{_virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js--zEZtV2N.mjs → _virtual_mf___mfe_internal__addon_stream_broker_widgets__loadShare___mf_0_camstack_mf_1_ui_mf_2_library__loadShare__.js-BGtpZkgz.mjs} +1 -1
  21. package/dist/stream-broker/{hostInit-Do62nL9c.mjs → hostInit-p_rpDGqr.mjs} +2 -2
  22. package/dist/stream-broker/index.js +1186 -337
  23. package/dist/stream-broker/index.mjs +1187 -338
  24. package/dist/stream-broker/remoteEntry.js +1 -1
  25. package/embed-dist/assets/{MaskShapeCanvas-DI4BY7W2-CNyCTsIC.js → MaskShapeCanvas-DI4BY7W2-CaRFwVIZ.js} +1 -1
  26. package/embed-dist/assets/{MotionZonesSettings-NcxxQN8r-DOdX9Yp1.js → MotionZonesSettings-NcxxQN8r-o7HcwAxC.js} +1 -1
  27. package/embed-dist/assets/{PrivacyMaskSettings-APgPLF7p-9huXsgpT.js → PrivacyMaskSettings-APgPLF7p-B2TnFjvh.js} +1 -1
  28. package/embed-dist/assets/index-D4RNu5XI.js +116 -0
  29. package/embed-dist/index.html +1 -1
  30. package/package.json +1 -1
  31. package/embed-dist/assets/index-BxOCtm8E.js +0 -116
@@ -3,7 +3,7 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../chunk-emK7D4bc.js");
6
- const require_dist = require("../dist-B89zyHyl.js");
6
+ const require_dist = require("../dist-DDTAur0R.js");
7
7
  const require_node_topology_platform = require("../node-topology-platform-CFZ7F4xW.js");
8
8
  const require_model_download_service_Cp9f4dk6 = require("../model-download-service-Cp9f4dk6-fsdDExML.js");
9
9
  let node_fs = require("node:fs");
@@ -1,5 +1,5 @@
1
1
  import { i as downloadFile, l as __require } from "../model-download-service-Cp9f4dk6-WO-foD7W.mjs";
2
- import { D as mapAudioLabelToMacro, H as BaseAddon, V as errMsg, _ as audioAnalysisCapability, d as HF_BASE_URL, n as AUDIO_BACKEND_CHOICES, o as DEFAULT_AUDIO_ANALYZER_CONFIG, q as hydrateSchema, v as audioAnalyzerCapability } from "../dist-DMiEnBkk.mjs";
2
+ import { B as errMsg, D as mapAudioLabelToMacro, K as hydrateSchema, V as BaseAddon, _ as audioAnalysisCapability, d as HF_BASE_URL, n as AUDIO_BACKEND_CHOICES, o as DEFAULT_AUDIO_ANALYZER_CONFIG, v as audioAnalyzerCapability } from "../dist-OjOsoSZG.mjs";
3
3
  import { t as pickNodePlatformArch } from "../node-topology-platform-BkR_k6WT.mjs";
4
4
  import * as fs from "node:fs";
5
5
  import * as path$1 from "node:path";
@@ -3,8 +3,8 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../chunk-emK7D4bc.js");
6
- const require_dist = require("../dist-B89zyHyl.js");
7
- const require_step_definitions = require("../step-definitions-DLgHGq8f.js");
6
+ const require_dist = require("../dist-DDTAur0R.js");
7
+ const require_step_definitions = require("../step-definitions-DGCuoeCj.js");
8
8
  const require_node_topology_platform = require("../node-topology-platform-CFZ7F4xW.js");
9
9
  const require_model_download_service_Cp9f4dk6 = require("../model-download-service-Cp9f4dk6-fsdDExML.js");
10
10
  let node_child_process = require("node:child_process");
@@ -1,6 +1,6 @@
1
1
  import { a as ensureModel, l as __require, o as isModelDownloaded, r as deleteModelFromDisk } from "../model-download-service-Cp9f4dk6-WO-foD7W.mjs";
2
- import { C as detectionPipelineCapability, H as BaseAddon, I as runtimeDevices$1, K as createEvent, M as pipelineExecutorCapability, T as evaluateZoneRules, V as errMsg, Z as parseJsonUnknown, ct as object, dt as union, et as sleep, ft as EventCategory, h as YAMNET_TO_MACRO, j as nodePin, nt as array, q as hydrateSchema, s as DEVICE_BACKEND_TO_FORMAT, t as APPLE_SA_TO_MACRO, ut as string, w as enumerateInferenceDevices, x as defaultDeviceFor$1, z as supportedRuntimes$1 } from "../dist-DMiEnBkk.mjs";
3
- import { a as getStepDefinition, i as getStep, n as ALL_STEPS, o as resolveModelForFormat, r as getDefaultModelForFormat, t as ALL_PIPELINE_STEPS } from "../step-definitions-NeFJ6mFi.mjs";
2
+ import { B as errMsg, C as detectionPipelineCapability, F as runtimeDevices$1, G as createEvent, K as hydrateSchema, R as supportedRuntimes$1, T as evaluateZoneRules, V as BaseAddon, X as nodePin, Z as parseJsonUnknown, ct as object, dt as union, et as sleep, ft as EventCategory, h as YAMNET_TO_MACRO, j as pipelineExecutorCapability, nt as array, s as DEVICE_BACKEND_TO_FORMAT, t as APPLE_SA_TO_MACRO, ut as string, w as enumerateInferenceDevices, x as defaultDeviceFor$1 } from "../dist-OjOsoSZG.mjs";
3
+ import { a as getStepDefinition, i as getStep, n as ALL_STEPS, o as resolveModelForFormat, r as getDefaultModelForFormat, t as ALL_PIPELINE_STEPS } from "../step-definitions-B9vyUNYR.mjs";
4
4
  import { t as pickNodePlatformArch } from "../node-topology-platform-BkR_k6WT.mjs";
5
5
  import { spawn } from "node:child_process";
6
6
  import sharp from "sharp";
@@ -6531,6 +6531,36 @@ var ProfileRtspEntrySchema = object({
6531
6531
  resolution: CamStreamResolutionSchema.optional()
6532
6532
  });
6533
6533
  /**
6534
+ * Per-call node pinning for `ctx.api` capability calls.
6535
+ *
6536
+ * A capability call normally resolves to its DEFAULT provider — a `singleton`
6537
+ * cap resolves to the hub, a device-scoped cap to the device's owning node. To
6538
+ * query a SPECIFIC node's provider instead (e.g. a remote agent's own
6539
+ * in-process `platform-probe` hardware, which the hub cannot probe), pin the
6540
+ * call to that node.
6541
+ *
6542
+ * The nodeId rides OUT-OF-BAND in the tRPC call context (NOT in the validated
6543
+ * method args), so capability method signatures stay `nodeId`-free — node
6544
+ * targeting is a property of the CALL, not of the method. The transport lifts
6545
+ * it from `op.context` onto the `CapCallInput.nodeId` field (`ipcParentLink`),
6546
+ * and the hub parent's `onUnownedCall` passes it to the `CapRouteResolver`,
6547
+ * which classifies a pinned agent node as `agent-child-forward`
6548
+ * (`$agent-cap-fwd.forward` → the agent's in-process provider).
6549
+ *
6550
+ * Usage at a call site:
6551
+ *
6552
+ * await api.platformProbe.getCapabilities.query(undefined, nodePin(nodeId))
6553
+ */
6554
+ /** tRPC `op.context` key carrying a per-call node pin. */
6555
+ var CAP_NODE_PIN_CONTEXT_KEY = "__camstackNodePin";
6556
+ /**
6557
+ * Build the tRPC request options that pin a single capability call to `nodeId`.
6558
+ * Pass as the second argument to `.query(input, …)` / `.mutate(input, …)`.
6559
+ */
6560
+ function nodePin(nodeId) {
6561
+ return { context: { [CAP_NODE_PIN_CONTEXT_KEY]: nodeId } };
6562
+ }
6563
+ /**
6534
6564
  * Type-safe JSON parsing helpers.
6535
6565
  *
6536
6566
  * `JSON.parse` is typed as `any` in lib.es5.d.ts, which triggers
@@ -7847,36 +7877,6 @@ var EncodeProfileSchema = object({
7847
7877
  outputArgs: array(string()).optional()
7848
7878
  });
7849
7879
  var HF_BASE_URL = `https://huggingface.co/camstack/camstack-models/resolve/main`;
7850
- /**
7851
- * Per-call node pinning for `ctx.api` capability calls.
7852
- *
7853
- * A capability call normally resolves to its DEFAULT provider — a `singleton`
7854
- * cap resolves to the hub, a device-scoped cap to the device's owning node. To
7855
- * query a SPECIFIC node's provider instead (e.g. a remote agent's own
7856
- * in-process `platform-probe` hardware, which the hub cannot probe), pin the
7857
- * call to that node.
7858
- *
7859
- * The nodeId rides OUT-OF-BAND in the tRPC call context (NOT in the validated
7860
- * method args), so capability method signatures stay `nodeId`-free — node
7861
- * targeting is a property of the CALL, not of the method. The transport lifts
7862
- * it from `op.context` onto the `CapCallInput.nodeId` field (`ipcParentLink`),
7863
- * and the hub parent's `onUnownedCall` passes it to the `CapRouteResolver`,
7864
- * which classifies a pinned agent node as `agent-child-forward`
7865
- * (`$agent-cap-fwd.forward` → the agent's in-process provider).
7866
- *
7867
- * Usage at a call site:
7868
- *
7869
- * await api.platformProbe.getCapabilities.query(undefined, nodePin(nodeId))
7870
- */
7871
- /** tRPC `op.context` key carrying a per-call node pin. */
7872
- var CAP_NODE_PIN_CONTEXT_KEY = "__camstackNodePin";
7873
- /**
7874
- * Build the tRPC request options that pin a single capability call to `nodeId`.
7875
- * Pass as the second argument to `.query(input, …)` / `.mutate(input, …)`.
7876
- */
7877
- function nodePin(nodeId) {
7878
- return { context: { [CAP_NODE_PIN_CONTEXT_KEY]: nodeId } };
7879
- }
7880
7880
  function hfModelUrl(repo, path) {
7881
7881
  return `https://huggingface.co/${repo}/resolve/main/${path}`;
7882
7882
  }
@@ -15542,6 +15542,55 @@ method(object({
15542
15542
  password: string()
15543
15543
  }), AuthResultSchema.nullable(), { kind: "mutation" }), method(object({ state: string() }), string()), method(record(string(), string()), AuthResultSchema, { kind: "mutation" }), method(object({ token: string() }), AuthResultSchema.nullable());
15544
15544
  /**
15545
+ * A live terminal session hosted by the provider addon. Output and input do
15546
+ * NOT flow through the capability — they use the addon data plane
15547
+ * (`GET /addon/terminal/<id>/out` SSE, `POST /addon/terminal/<id>/in`) because
15548
+ * terminal output must be ordered and lossless. The event bus is telemetry and
15549
+ * may drop chunks ([D8]), and a dropped chunk desynchronises the vt parser
15550
+ * permanently until a full repaint. The capability owns only lifecycle.
15551
+ */
15552
+ var TerminalSessionInfoSchema = object({
15553
+ /** Opaque session id minted by the provider on `openSession`. */
15554
+ sessionId: string(),
15555
+ /** The pre-declared profile this session runs (never a free-form command). */
15556
+ profileId: string(),
15557
+ /** Human-readable profile label for the UI session list. */
15558
+ label: string(),
15559
+ cols: number().int().positive(),
15560
+ rows: number().int().positive(),
15561
+ /** ms-epoch the session's pty was spawned. */
15562
+ startedAt: number()
15563
+ });
15564
+ /**
15565
+ * A profile the operator may open — a pre-declared, allowlisted program
15566
+ * (`monitor` → `btm`). The capability accepts only these ids; a free-form
15567
+ * command string would be remote code execution as the server's user, so it is
15568
+ * deliberately not part of the contract.
15569
+ */
15570
+ var TerminalProfileInfoSchema = object({
15571
+ profileId: string(),
15572
+ label: string(),
15573
+ description: string().optional()
15574
+ });
15575
+ method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }), method(_void(), array(TerminalSessionInfoSchema).readonly(), { auth: "admin" }), method(object({
15576
+ profileId: string(),
15577
+ cols: number().int().positive(),
15578
+ rows: number().int().positive()
15579
+ }), TerminalSessionInfoSchema, {
15580
+ kind: "mutation",
15581
+ auth: "admin"
15582
+ }), method(object({
15583
+ sessionId: string(),
15584
+ cols: number().int().positive(),
15585
+ rows: number().int().positive()
15586
+ }), _void(), {
15587
+ kind: "mutation",
15588
+ auth: "admin"
15589
+ }), method(object({ sessionId: string() }), _void(), {
15590
+ kind: "mutation",
15591
+ auth: "admin"
15592
+ });
15593
+ /**
15545
15594
  * Orchestrator-side destination metadata. The orchestrator computes
15546
15595
  * `id = <addonId>:<subId>` from its provider lookup so consumers
15547
15596
  * (admin UI, restore flow) see one canonical key.
@@ -26916,6 +26965,36 @@ Object.freeze({
26916
26965
  addonId: null,
26917
26966
  access: "create"
26918
26967
  },
26968
+ "terminalSession.close": {
26969
+ capName: "terminal-session",
26970
+ capScope: "system",
26971
+ addonId: null,
26972
+ access: "create"
26973
+ },
26974
+ "terminalSession.listProfiles": {
26975
+ capName: "terminal-session",
26976
+ capScope: "system",
26977
+ addonId: null,
26978
+ access: "view"
26979
+ },
26980
+ "terminalSession.listSessions": {
26981
+ capName: "terminal-session",
26982
+ capScope: "system",
26983
+ addonId: null,
26984
+ access: "view"
26985
+ },
26986
+ "terminalSession.openSession": {
26987
+ capName: "terminal-session",
26988
+ capScope: "system",
26989
+ addonId: null,
26990
+ access: "create"
26991
+ },
26992
+ "terminalSession.resize": {
26993
+ capName: "terminal-session",
26994
+ capScope: "system",
26995
+ addonId: null,
26996
+ access: "create"
26997
+ },
26919
26998
  "toast.onToast": {
26920
26999
  capName: "toast",
26921
27000
  capScope: "system",
@@ -6531,6 +6531,36 @@ var ProfileRtspEntrySchema = object({
6531
6531
  resolution: CamStreamResolutionSchema.optional()
6532
6532
  });
6533
6533
  /**
6534
+ * Per-call node pinning for `ctx.api` capability calls.
6535
+ *
6536
+ * A capability call normally resolves to its DEFAULT provider — a `singleton`
6537
+ * cap resolves to the hub, a device-scoped cap to the device's owning node. To
6538
+ * query a SPECIFIC node's provider instead (e.g. a remote agent's own
6539
+ * in-process `platform-probe` hardware, which the hub cannot probe), pin the
6540
+ * call to that node.
6541
+ *
6542
+ * The nodeId rides OUT-OF-BAND in the tRPC call context (NOT in the validated
6543
+ * method args), so capability method signatures stay `nodeId`-free — node
6544
+ * targeting is a property of the CALL, not of the method. The transport lifts
6545
+ * it from `op.context` onto the `CapCallInput.nodeId` field (`ipcParentLink`),
6546
+ * and the hub parent's `onUnownedCall` passes it to the `CapRouteResolver`,
6547
+ * which classifies a pinned agent node as `agent-child-forward`
6548
+ * (`$agent-cap-fwd.forward` → the agent's in-process provider).
6549
+ *
6550
+ * Usage at a call site:
6551
+ *
6552
+ * await api.platformProbe.getCapabilities.query(undefined, nodePin(nodeId))
6553
+ */
6554
+ /** tRPC `op.context` key carrying a per-call node pin. */
6555
+ var CAP_NODE_PIN_CONTEXT_KEY = "__camstackNodePin";
6556
+ /**
6557
+ * Build the tRPC request options that pin a single capability call to `nodeId`.
6558
+ * Pass as the second argument to `.query(input, …)` / `.mutate(input, …)`.
6559
+ */
6560
+ function nodePin(nodeId) {
6561
+ return { context: { [CAP_NODE_PIN_CONTEXT_KEY]: nodeId } };
6562
+ }
6563
+ /**
6534
6564
  * Type-safe JSON parsing helpers.
6535
6565
  *
6536
6566
  * `JSON.parse` is typed as `any` in lib.es5.d.ts, which triggers
@@ -7847,36 +7877,6 @@ var EncodeProfileSchema = object({
7847
7877
  outputArgs: array(string()).optional()
7848
7878
  });
7849
7879
  var HF_BASE_URL = `https://huggingface.co/camstack/camstack-models/resolve/main`;
7850
- /**
7851
- * Per-call node pinning for `ctx.api` capability calls.
7852
- *
7853
- * A capability call normally resolves to its DEFAULT provider — a `singleton`
7854
- * cap resolves to the hub, a device-scoped cap to the device's owning node. To
7855
- * query a SPECIFIC node's provider instead (e.g. a remote agent's own
7856
- * in-process `platform-probe` hardware, which the hub cannot probe), pin the
7857
- * call to that node.
7858
- *
7859
- * The nodeId rides OUT-OF-BAND in the tRPC call context (NOT in the validated
7860
- * method args), so capability method signatures stay `nodeId`-free — node
7861
- * targeting is a property of the CALL, not of the method. The transport lifts
7862
- * it from `op.context` onto the `CapCallInput.nodeId` field (`ipcParentLink`),
7863
- * and the hub parent's `onUnownedCall` passes it to the `CapRouteResolver`,
7864
- * which classifies a pinned agent node as `agent-child-forward`
7865
- * (`$agent-cap-fwd.forward` → the agent's in-process provider).
7866
- *
7867
- * Usage at a call site:
7868
- *
7869
- * await api.platformProbe.getCapabilities.query(undefined, nodePin(nodeId))
7870
- */
7871
- /** tRPC `op.context` key carrying a per-call node pin. */
7872
- var CAP_NODE_PIN_CONTEXT_KEY = "__camstackNodePin";
7873
- /**
7874
- * Build the tRPC request options that pin a single capability call to `nodeId`.
7875
- * Pass as the second argument to `.query(input, …)` / `.mutate(input, …)`.
7876
- */
7877
- function nodePin(nodeId) {
7878
- return { context: { [CAP_NODE_PIN_CONTEXT_KEY]: nodeId } };
7879
- }
7880
7880
  function hfModelUrl(repo, path) {
7881
7881
  return `https://huggingface.co/${repo}/resolve/main/${path}`;
7882
7882
  }
@@ -15542,6 +15542,55 @@ method(object({
15542
15542
  password: string()
15543
15543
  }), AuthResultSchema.nullable(), { kind: "mutation" }), method(object({ state: string() }), string()), method(record(string(), string()), AuthResultSchema, { kind: "mutation" }), method(object({ token: string() }), AuthResultSchema.nullable());
15544
15544
  /**
15545
+ * A live terminal session hosted by the provider addon. Output and input do
15546
+ * NOT flow through the capability — they use the addon data plane
15547
+ * (`GET /addon/terminal/<id>/out` SSE, `POST /addon/terminal/<id>/in`) because
15548
+ * terminal output must be ordered and lossless. The event bus is telemetry and
15549
+ * may drop chunks ([D8]), and a dropped chunk desynchronises the vt parser
15550
+ * permanently until a full repaint. The capability owns only lifecycle.
15551
+ */
15552
+ var TerminalSessionInfoSchema = object({
15553
+ /** Opaque session id minted by the provider on `openSession`. */
15554
+ sessionId: string(),
15555
+ /** The pre-declared profile this session runs (never a free-form command). */
15556
+ profileId: string(),
15557
+ /** Human-readable profile label for the UI session list. */
15558
+ label: string(),
15559
+ cols: number().int().positive(),
15560
+ rows: number().int().positive(),
15561
+ /** ms-epoch the session's pty was spawned. */
15562
+ startedAt: number()
15563
+ });
15564
+ /**
15565
+ * A profile the operator may open — a pre-declared, allowlisted program
15566
+ * (`monitor` → `btm`). The capability accepts only these ids; a free-form
15567
+ * command string would be remote code execution as the server's user, so it is
15568
+ * deliberately not part of the contract.
15569
+ */
15570
+ var TerminalProfileInfoSchema = object({
15571
+ profileId: string(),
15572
+ label: string(),
15573
+ description: string().optional()
15574
+ });
15575
+ method(_void(), array(TerminalProfileInfoSchema).readonly(), { auth: "admin" }), method(_void(), array(TerminalSessionInfoSchema).readonly(), { auth: "admin" }), method(object({
15576
+ profileId: string(),
15577
+ cols: number().int().positive(),
15578
+ rows: number().int().positive()
15579
+ }), TerminalSessionInfoSchema, {
15580
+ kind: "mutation",
15581
+ auth: "admin"
15582
+ }), method(object({
15583
+ sessionId: string(),
15584
+ cols: number().int().positive(),
15585
+ rows: number().int().positive()
15586
+ }), _void(), {
15587
+ kind: "mutation",
15588
+ auth: "admin"
15589
+ }), method(object({ sessionId: string() }), _void(), {
15590
+ kind: "mutation",
15591
+ auth: "admin"
15592
+ });
15593
+ /**
15545
15594
  * Orchestrator-side destination metadata. The orchestrator computes
15546
15595
  * `id = <addonId>:<subId>` from its provider lookup so consumers
15547
15596
  * (admin UI, restore flow) see one canonical key.
@@ -26916,6 +26965,36 @@ Object.freeze({
26916
26965
  addonId: null,
26917
26966
  access: "create"
26918
26967
  },
26968
+ "terminalSession.close": {
26969
+ capName: "terminal-session",
26970
+ capScope: "system",
26971
+ addonId: null,
26972
+ access: "create"
26973
+ },
26974
+ "terminalSession.listProfiles": {
26975
+ capName: "terminal-session",
26976
+ capScope: "system",
26977
+ addonId: null,
26978
+ access: "view"
26979
+ },
26980
+ "terminalSession.listSessions": {
26981
+ capName: "terminal-session",
26982
+ capScope: "system",
26983
+ addonId: null,
26984
+ access: "view"
26985
+ },
26986
+ "terminalSession.openSession": {
26987
+ capName: "terminal-session",
26988
+ capScope: "system",
26989
+ addonId: null,
26990
+ access: "create"
26991
+ },
26992
+ "terminalSession.resize": {
26993
+ capName: "terminal-session",
26994
+ capScope: "system",
26995
+ addonId: null,
26996
+ access: "create"
26997
+ },
26919
26998
  "toast.onToast": {
26920
26999
  capName: "toast",
26921
27000
  capScope: "system",
@@ -27692,4 +27771,4 @@ function enumerateInferenceDevices(hw) {
27692
27771
  return out;
27693
27772
  }
27694
27773
  //#endregion
27695
- export { selectAssignedProfileSlots as $, motionDetectionCapability as A, webrtcSessionCapability as B, detectionPipelineCapability as C, mapAudioLabelToMacro as D, hfModelUrl as E, recordingExportCapability as F, DeviceType as G, BaseAddon as H, runtimeDevices as I, isEvent as J, createEvent as K, storageEvictableCapability as L, pipelineExecutorCapability as M, pipelineRunnerCapability as N, maskUrlCredentials as O, recordingCapability as P, parseProfileBrokerId as Q, streamBrokerCapability as R, defineCustomActions as S, evaluateZoneRules as T, CAM_PROFILE_ORDER as U, errMsg as V, DeviceFeature as W, makeSourceBrokerId as X, makeProfileBrokerId as Y, parseJsonUnknown as Z, audioAnalysisCapability as _, COCO_TO_MACRO as a, lazy as at, customAction as b, EVENT_PAD_MS as c, object as ct, HF_BASE_URL as d, union as dt, sleep as et, OpsLogEntrySchema as f, EventCategory as ft, addonWidgetsSourceCapability as g, YAMNET_TO_MACRO as h, COCO_80_LABELS as i, discriminatedUnion as it, nodePin as j, migrateConfigToBands as k, EncodeProfileSchema as l, record as lt, RingBuffer as m, AUDIO_BACKEND_CHOICES as n, array as nt, DEFAULT_AUDIO_ANALYZER_CONFIG as o, literal as ot, RecordingConfigSchema as p, hydrateSchema as q, AUDIO_MACRO_LABELS as r, boolean as rt, DEVICE_BACKEND_TO_FORMAT as s, number as st, APPLE_SA_TO_MACRO as t, _enum as tt, ExportRecordSchema as u, string as ut, audioAnalyzerCapability as v, enumerateInferenceDevices as w, defaultDeviceFor as x, cameraStreamsCapability as y, supportedRuntimes as z };
27774
+ export { selectAssignedProfileSlots as $, motionDetectionCapability as A, errMsg as B, detectionPipelineCapability as C, mapAudioLabelToMacro as D, hfModelUrl as E, runtimeDevices as F, createEvent as G, CAM_PROFILE_ORDER as H, storageEvictableCapability as I, makeProfileBrokerId as J, hydrateSchema as K, streamBrokerCapability as L, pipelineRunnerCapability as M, recordingCapability as N, maskUrlCredentials as O, recordingExportCapability as P, parseProfileBrokerId as Q, supportedRuntimes as R, defineCustomActions as S, evaluateZoneRules as T, DeviceFeature as U, BaseAddon as V, DeviceType as W, nodePin as X, makeSourceBrokerId as Y, parseJsonUnknown as Z, audioAnalysisCapability as _, COCO_TO_MACRO as a, lazy as at, customAction as b, EVENT_PAD_MS as c, object as ct, HF_BASE_URL as d, union as dt, sleep as et, OpsLogEntrySchema as f, EventCategory as ft, addonWidgetsSourceCapability as g, YAMNET_TO_MACRO as h, COCO_80_LABELS as i, discriminatedUnion as it, pipelineExecutorCapability as j, migrateConfigToBands as k, EncodeProfileSchema as l, record as lt, RingBuffer as m, AUDIO_BACKEND_CHOICES as n, array as nt, DEFAULT_AUDIO_ANALYZER_CONFIG as o, literal as ot, RecordingConfigSchema as p, isEvent as q, AUDIO_MACRO_LABELS as r, boolean as rt, DEVICE_BACKEND_TO_FORMAT as s, number as st, APPLE_SA_TO_MACRO as t, _enum as tt, ExportRecordSchema as u, string as ut, audioAnalyzerCapability as v, enumerateInferenceDevices as w, defaultDeviceFor as x, cameraStreamsCapability as y, webrtcSessionCapability as z };
@@ -6631,12 +6631,16 @@ function readTrack(file, segment) {
6631
6631
  });
6632
6632
  }
6633
6633
  /**
6634
- * Demux a recorded LOW `.m4s` segment and return its sync samples plus the
6635
- * WebCodecs decoder config, or null if the segment carries no video / no
6636
- * decodable keyframe. `segmentStartMs` anchors keyframe timestamps to absolute
6637
- * epoch ms; the first sample's cts is the zero reference.
6634
+ * Demux a recorded `.m4s` fragment and return ALL its samples (sync + delta) in
6635
+ * decode order plus the WebCodecs decoder config, or null if the segment
6636
+ * carries no video / no decodable sample. `segmentStartMs` anchors each sample's
6637
+ * `ts` to absolute epoch ms; the first sample's cts is the zero reference.
6638
+ *
6639
+ * No decode, no ffmpeg — byte copies only. This is the general form used by the
6640
+ * recorded-playback demux; {@link extractKeyframes} filters its output to sync
6641
+ * samples for the scrub-pack service.
6638
6642
  */
6639
- async function extractKeyframes(segment, segmentStartMs) {
6643
+ async function extractSamples(segment, segmentStartMs) {
6640
6644
  const file = import_mp4box_all.createFile();
6641
6645
  const ready = await readTrack(file, segment);
6642
6646
  if (!ready) return null;
@@ -6647,10 +6651,10 @@ async function extractKeyframes(segment, segmentStartMs) {
6647
6651
  file.onSamples = (_id, _user, samples) => {
6648
6652
  for (const s of samples) {
6649
6653
  if (firstCts === null) firstCts = s.cts;
6650
- if (!s.is_sync) continue;
6651
6654
  const ts = segmentStartMs + Math.round((s.cts - firstCts) / s.timescale * 1e3);
6652
6655
  collected.push({
6653
6656
  ts,
6657
+ isSync: s.is_sync,
6654
6658
  data: new Uint8Array(s.data)
6655
6659
  });
6656
6660
  }
@@ -6664,7 +6668,26 @@ async function extractKeyframes(segment, segmentStartMs) {
6664
6668
  return collected.length > 0 ? {
6665
6669
  codec,
6666
6670
  description,
6667
- keyframes: collected
6671
+ samples: collected
6672
+ } : null;
6673
+ }
6674
+ /**
6675
+ * Demux a recorded LOW `.m4s` segment and return its sync samples plus the
6676
+ * WebCodecs decoder config, or null if the segment carries no video / no
6677
+ * decodable keyframe. `segmentStartMs` anchors keyframe timestamps to absolute
6678
+ * epoch ms; the first sample's cts is the zero reference.
6679
+ */
6680
+ async function extractKeyframes(segment, segmentStartMs) {
6681
+ const extracted = await extractSamples(segment, segmentStartMs);
6682
+ if (!extracted) return null;
6683
+ const keyframes = extracted.samples.filter((s) => s.isSync).map((s) => ({
6684
+ ts: s.ts,
6685
+ data: s.data
6686
+ }));
6687
+ return keyframes.length > 0 ? {
6688
+ codec: extracted.codec,
6689
+ description: extracted.description,
6690
+ keyframes
6668
6691
  } : null;
6669
6692
  }
6670
6693
  //#endregion
@@ -6674,3 +6697,15 @@ Object.defineProperty(exports, "extractKeyframes", {
6674
6697
  return extractKeyframes;
6675
6698
  }
6676
6699
  });
6700
+ Object.defineProperty(exports, "extractSamples", {
6701
+ enumerable: true,
6702
+ get: function() {
6703
+ return extractSamples;
6704
+ }
6705
+ });
6706
+ Object.defineProperty(exports, "require_mp4box_all", {
6707
+ enumerable: true,
6708
+ get: function() {
6709
+ return require_mp4box_all;
6710
+ }
6711
+ });
@@ -1,7 +1,6 @@
1
1
  import { c as __commonJSMin, u as __toESM } from "./model-download-service-Cp9f4dk6-WO-foD7W.mjs";
2
- //#endregion
3
- //#region src/recorder/scrub/fmp4-keyframes.ts
4
- var import_mp4box_all = /* @__PURE__ */ __toESM((/* @__PURE__ */ __commonJSMin(((exports) => {
2
+ //#region ../../node_modules/mp4box/dist/mp4box.all.js
3
+ var require_mp4box_all = /* @__PURE__ */ __commonJSMin(((exports) => {
5
4
  var Log = (function() {
6
5
  var start = /* @__PURE__ */ new Date();
7
6
  var LOG_LEVEL_ERROR = 4;
@@ -6566,7 +6565,10 @@ var import_mp4box_all = /* @__PURE__ */ __toESM((/* @__PURE__ */ __commonJSMin((
6566
6565
  return file;
6567
6566
  };
6568
6567
  if (typeof exports !== "undefined") exports.createFile = MP4Box.createFile;
6569
- })))());
6568
+ }));
6569
+ //#endregion
6570
+ //#region src/recorder/scrub/fmp4-keyframes.ts
6571
+ var import_mp4box_all = /* @__PURE__ */ __toESM(require_mp4box_all());
6570
6572
  /**
6571
6573
  * Normalize an RFC 6381 codec string for WebCodecs HEVC. Apple/WebKit
6572
6574
  * WebCodecs only accepts the `hvc1.*` fourcc — a `hev1.*` string (what mp4box
@@ -6629,12 +6631,16 @@ function readTrack(file, segment) {
6629
6631
  });
6630
6632
  }
6631
6633
  /**
6632
- * Demux a recorded LOW `.m4s` segment and return its sync samples plus the
6633
- * WebCodecs decoder config, or null if the segment carries no video / no
6634
- * decodable keyframe. `segmentStartMs` anchors keyframe timestamps to absolute
6635
- * epoch ms; the first sample's cts is the zero reference.
6634
+ * Demux a recorded `.m4s` fragment and return ALL its samples (sync + delta) in
6635
+ * decode order plus the WebCodecs decoder config, or null if the segment
6636
+ * carries no video / no decodable sample. `segmentStartMs` anchors each sample's
6637
+ * `ts` to absolute epoch ms; the first sample's cts is the zero reference.
6638
+ *
6639
+ * No decode, no ffmpeg — byte copies only. This is the general form used by the
6640
+ * recorded-playback demux; {@link extractKeyframes} filters its output to sync
6641
+ * samples for the scrub-pack service.
6636
6642
  */
6637
- async function extractKeyframes(segment, segmentStartMs) {
6643
+ async function extractSamples(segment, segmentStartMs) {
6638
6644
  const file = import_mp4box_all.createFile();
6639
6645
  const ready = await readTrack(file, segment);
6640
6646
  if (!ready) return null;
@@ -6645,10 +6651,10 @@ async function extractKeyframes(segment, segmentStartMs) {
6645
6651
  file.onSamples = (_id, _user, samples) => {
6646
6652
  for (const s of samples) {
6647
6653
  if (firstCts === null) firstCts = s.cts;
6648
- if (!s.is_sync) continue;
6649
6654
  const ts = segmentStartMs + Math.round((s.cts - firstCts) / s.timescale * 1e3);
6650
6655
  collected.push({
6651
6656
  ts,
6657
+ isSync: s.is_sync,
6652
6658
  data: new Uint8Array(s.data)
6653
6659
  });
6654
6660
  }
@@ -6662,8 +6668,27 @@ async function extractKeyframes(segment, segmentStartMs) {
6662
6668
  return collected.length > 0 ? {
6663
6669
  codec,
6664
6670
  description,
6665
- keyframes: collected
6671
+ samples: collected
6672
+ } : null;
6673
+ }
6674
+ /**
6675
+ * Demux a recorded LOW `.m4s` segment and return its sync samples plus the
6676
+ * WebCodecs decoder config, or null if the segment carries no video / no
6677
+ * decodable keyframe. `segmentStartMs` anchors keyframe timestamps to absolute
6678
+ * epoch ms; the first sample's cts is the zero reference.
6679
+ */
6680
+ async function extractKeyframes(segment, segmentStartMs) {
6681
+ const extracted = await extractSamples(segment, segmentStartMs);
6682
+ if (!extracted) return null;
6683
+ const keyframes = extracted.samples.filter((s) => s.isSync).map((s) => ({
6684
+ ts: s.ts,
6685
+ data: s.data
6686
+ }));
6687
+ return keyframes.length > 0 ? {
6688
+ codec: extracted.codec,
6689
+ description: extracted.description,
6690
+ keyframes
6666
6691
  } : null;
6667
6692
  }
6668
6693
  //#endregion
6669
- export { extractKeyframes as t };
6694
+ export { extractSamples as n, require_mp4box_all as r, extractKeyframes as t };
@@ -2,7 +2,7 @@ Object.defineProperties(exports, {
2
2
  __esModule: { value: true },
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
- const require_dist = require("../dist-B89zyHyl.js");
5
+ const require_dist = require("../dist-DDTAur0R.js");
6
6
  let node_fs = require("node:fs");
7
7
  let node_path = require("node:path");
8
8
  //#region src/motion-wasm/wasm-motion-detector.ts
@@ -1,4 +1,4 @@
1
- import { A as motionDetectionCapability, G as DeviceType, H as BaseAddon, T as evaluateZoneRules, q as hydrateSchema } from "../dist-DMiEnBkk.mjs";
1
+ import { A as motionDetectionCapability, K as hydrateSchema, T as evaluateZoneRules, V as BaseAddon, W as DeviceType } from "../dist-OjOsoSZG.mjs";
2
2
  import { readFileSync } from "node:fs";
3
3
  import { join } from "node:path";
4
4
  //#region src/motion-wasm/wasm-motion-detector.ts
@@ -3,11 +3,11 @@ Object.defineProperties(exports, {
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
5
  const require_chunk = require("../chunk-emK7D4bc.js");
6
- const require_dist = require("../dist-B89zyHyl.js");
6
+ const require_dist = require("../dist-DDTAur0R.js");
7
7
  const require_remote_restream = require("../remote-restream-CO36Sr30.js");
8
8
  const require_hub_hostname = require("../hub-hostname-DAJXlOgV.js");
9
9
  const require_worker_protocol = require("../worker-protocol-DextwlTX.js");
10
- const require_step_definitions = require("../step-definitions-DLgHGq8f.js");
10
+ const require_step_definitions = require("../step-definitions-DGCuoeCj.js");
11
11
  let node_child_process = require("node:child_process");
12
12
  let node_url = require("node:url");
13
13
  let sharp = require("sharp");
@@ -1,8 +1,8 @@
1
- import { H as BaseAddon, K as createEvent, N as pipelineRunnerCapability, S as defineCustomActions, V as errMsg, at as lazy, b as customAction, ct as object, ft as EventCategory, j as nodePin, nt as array, rt as boolean, s as DEVICE_BACKEND_TO_FORMAT, st as number, tt as _enum, ut as string } from "../dist-DMiEnBkk.mjs";
1
+ import { B as errMsg, G as createEvent, M as pipelineRunnerCapability, S as defineCustomActions, V as BaseAddon, X as nodePin, at as lazy, b as customAction, ct as object, ft as EventCategory, nt as array, rt as boolean, s as DEVICE_BACKEND_TO_FORMAT, st as number, tt as _enum, ut as string } from "../dist-OjOsoSZG.mjs";
2
2
  import { n as profileForStreamId, t as isRemoteRestream } from "../remote-restream-BeHi78PZ.mjs";
3
3
  import { t as resolveHubHostname } from "../hub-hostname-cCknRYKj.mjs";
4
4
  import { t as isWorkerReply } from "../worker-protocol-D7RzZIla.mjs";
5
- import { a as getStepDefinition } from "../step-definitions-NeFJ6mFi.mjs";
5
+ import { a as getStepDefinition } from "../step-definitions-B9vyUNYR.mjs";
6
6
  import { fork } from "node:child_process";
7
7
  import { fileURLToPath } from "node:url";
8
8
  import sharp from "sharp";