camstack 1.2.58 → 1.2.60

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.
@@ -22053,6 +22053,38 @@ var NodeProcessSchema = external_exports.object({
22053
22053
  /** Wall-clock uptime (seconds). Parsed from `ps etime`. */
22054
22054
  uptimeSec: external_exports.number()
22055
22055
  });
22056
+ var ContainerMemoryPointSchema = external_exports.object({
22057
+ /** Which hierarchy answered, so a reading is never ambiguous. */
22058
+ source: external_exports.enum(["cgroup-v2", "cgroup-v1"]),
22059
+ /** `memory.current` (v2) / `memory.usage_in_bytes` (v1). Always known. */
22060
+ currentBytes: external_exports.number(),
22061
+ /** The cgroup's ceiling. `null` = NO LIMIT — never a sentinel, never zero. */
22062
+ limitBytes: external_exports.number().nullable(),
22063
+ /** Anonymous pages: the closest thing to "what the processes allocated". */
22064
+ anonBytes: external_exports.number().nullable(),
22065
+ /** Page cache. Charged to the cgroup, owned by no process. */
22066
+ fileBytes: external_exports.number().nullable(),
22067
+ /**
22068
+ * Shared memory — and the field that explained the largest single surprise.
22069
+ * The i915 driver backs GPU buffers with shmem, so an inference pool or a
22070
+ * hardware-decode session holding DRM objects is charged HERE and appears
22071
+ * nowhere in a `ps` scan.
22072
+ */
22073
+ shmemBytes: external_exports.number().nullable(),
22074
+ /** Kernel slab charged to this cgroup. `null` on v1, which never publishes it. */
22075
+ slabBytes: external_exports.number().nullable(),
22076
+ /**
22077
+ * Shrinkable i915 GEM object bytes, from debugfs.
22078
+ *
22079
+ * **Host-wide across every DRM client, NOT cgroup-scoped.** It is not a
22080
+ * component of `currentBytes` and must not be subtracted from it; it says
22081
+ * what put the shmem there, where `shmemBytes` only says how much.
22082
+ *
22083
+ * `null` wherever debugfs is not mounted — which is inside every camstack
22084
+ * container today — and on any node with no Intel GPU.
22085
+ */
22086
+ gpuShmemBytes: external_exports.number().nullable()
22087
+ }).extend({ atMs: external_exports.number() });
22056
22088
  var DumpHeapSnapshotInputSchema = external_exports.object({
22057
22089
  /** The addon whose runner should dump a heap snapshot. */
22058
22090
  addonId: external_exports.string()
@@ -22102,6 +22134,21 @@ var NodeLoadSeriesSchema = external_exports.object({
22102
22134
  /** One entry per function seen in the window, heaviest-first. */
22103
22135
  series: external_exports.array(LoadFunctionSeriesSchema).readonly(),
22104
22136
  /**
22137
+ * The CONTAINER's memory over the same window, oldest-first.
22138
+ *
22139
+ * Sits next to `series` rather than in a method of its own because the whole
22140
+ * question is a subtraction: the per-process rows in `series` sum to one
22141
+ * number and this one is another, and an operator who has to issue two calls
22142
+ * to compare them will compare two different instants. Same reader, same
22143
+ * `sinceMs`, same `bucketMs`, same timestamps.
22144
+ *
22145
+ * **EMPTY means ABSENT, never zero.** A node with no cgroup — a developer
22146
+ * Mac, a bare-metal host, a container with the hierarchy hidden — reports no
22147
+ * points at all. A zero here would be indistinguishable from a healthy
22148
+ * container and is precisely the lie this field exists to avoid.
22149
+ */
22150
+ containerMemory: external_exports.array(ContainerMemoryPointSchema).readonly(),
22151
+ /**
22105
22152
  * Width of one returned bucket, in ms. Equals the sampling cadence when no
22106
22153
  * reduction was needed — so a caller can always say what one point covers
22107
22154
  * without having to know whether it was reduced.
@@ -33082,6 +33129,33 @@ var intercomCapability = {
33082
33129
  deviceNative: true,
33083
33130
  mode: "singleton",
33084
33131
  deviceTypes: [DeviceType.Camera],
33132
+ /**
33133
+ * **Auth tier: `protected` on every method — deliberate, and load-bearing.**
33134
+ *
33135
+ * Talking through a camera is an OPERATE action, not a CONFIGURE one. This
33136
+ * cap has no configuration surface at all: all six methods open, feed and
33137
+ * close one live audio session against one `deviceId`. That is the same
33138
+ * authority as `ptz.move` or `snapshot.getSnapshot`, both `protected` — and
33139
+ * the opposite of `ptz.savePreset` / `snapshot.invalidateCache`, which are
33140
+ * `admin` because they change what the device IS.
33141
+ *
33142
+ * `protected` does not mean ungated: `protectedProcedure` runs the
33143
+ * `METHOD_ACCESS_MAP` scope check, and every method here is `scope: 'device'`
33144
+ * with `access: 'create'` and a `deviceId` in its input. So a caller needs a
33145
+ * grant that covers THAT camera at `create` — a `camera-viewer` (`view`
33146
+ * only) still cannot talk, and a grant on camera 5 cannot talk through
33147
+ * camera 7.
33148
+ *
33149
+ * Every method was `auth: 'admin'` from the initial commit, which made the
33150
+ * cap unreachable by every non-admin principal — `adminProcedure` throws
33151
+ * `FORBIDDEN: Admin required` BEFORE the scope check runs, so the scope
33152
+ * machinery generated for this cap (`METHOD_ACCESS_MAP`,
33153
+ * `DEVICE_SCOPED_CAPS`, `METHOD_DEVICE_SELECTORS`) was complete and dead. The
33154
+ * `camera-operator` scope preset has promised "PTZ control, intercom,
33155
+ * snapshots" since that same commit; the promise could not be kept. Recorded
33156
+ * as D289; `scripts/check-scope-preset-promises.ts` now fails the build if a
33157
+ * preset promises a cap no row of that preset can reach.
33158
+ */
33085
33159
  methods: {
33086
33160
  /**
33087
33161
  * Open a server-side WebRTC audio-only session. Returns an SDP
@@ -33094,7 +33168,7 @@ var intercomCapability = {
33094
33168
  sdpOffer: external_exports.string()
33095
33169
  }), {
33096
33170
  kind: "mutation",
33097
- auth: "admin"
33171
+ auth: "protected"
33098
33172
  }),
33099
33173
  handleAnswer: method(external_exports.object({
33100
33174
  deviceId: external_exports.number(),
@@ -33102,7 +33176,7 @@ var intercomCapability = {
33102
33176
  sdpAnswer: external_exports.string()
33103
33177
  }), external_exports.void(), {
33104
33178
  kind: "mutation",
33105
- auth: "admin"
33179
+ auth: "protected"
33106
33180
  }),
33107
33181
  /** Close explicitly. Server also auto-closes on 30s idle. */
33108
33182
  stopSession: method(external_exports.object({
@@ -33110,7 +33184,7 @@ var intercomCapability = {
33110
33184
  sessionId: external_exports.string()
33111
33185
  }), external_exports.void(), {
33112
33186
  kind: "mutation",
33113
- auth: "admin"
33187
+ auth: "protected"
33114
33188
  }),
33115
33189
  /**
33116
33190
  * Open a raw-PCM talk session (no WebRTC SDP plumbing). Used by
@@ -33123,7 +33197,7 @@ var intercomCapability = {
33123
33197
  */
33124
33198
  startTalkSession: method(external_exports.object({ deviceId: external_exports.number() }), external_exports.object({ sessionId: external_exports.string() }), {
33125
33199
  kind: "mutation",
33126
- auth: "admin"
33200
+ auth: "protected"
33127
33201
  }),
33128
33202
  /**
33129
33203
  * Push one chunk of talk-back audio onto the active talk session.
@@ -33158,12 +33232,12 @@ var intercomCapability = {
33158
33232
  sequenceNumber: external_exports.number().int()
33159
33233
  }), external_exports.object({ accepted: external_exports.boolean() }), {
33160
33234
  kind: "mutation",
33161
- auth: "admin"
33235
+ auth: "protected"
33162
33236
  }),
33163
33237
  /** Close the raw-PCM talk session. Idempotent. */
33164
33238
  endTalkSession: method(external_exports.object({ deviceId: external_exports.number() }), external_exports.void(), {
33165
33239
  kind: "mutation",
33166
- auth: "admin"
33240
+ auth: "protected"
33167
33241
  })
33168
33242
  },
33169
33243
  events: { onStatusChanged: { data: external_exports.object({
package/dist/cli.js CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  runDiscover
4
- } from "./chunk-NEA5DJLZ.js";
4
+ } from "./chunk-ARTM5NDU.js";
5
5
  import "./chunk-LMMQX4CK.js";
6
6
 
7
7
  // src/cli.ts
@@ -38,7 +38,7 @@ async function runServe(args) {
38
38
  ...typeof values.data === "string" ? { data: values.data } : {}
39
39
  };
40
40
  Object.assign(process.env, buildServeEnv(opts));
41
- await import("./launcher-AL5IQ6H2.js");
41
+ await import("./launcher-CL4LHR6D.js");
42
42
  }
43
43
 
44
44
  // src/commands/agent.ts
@@ -83,7 +83,7 @@ async function runAgent(args) {
83
83
  ...typeof values.port === "string" ? { port: values.port } : {}
84
84
  };
85
85
  Object.assign(process.env, buildAgentEnv(opts));
86
- await import("./launcher-AL5IQ6H2.js");
86
+ await import("./launcher-CL4LHR6D.js");
87
87
  }
88
88
 
89
89
  // src/commands/setup.ts
@@ -1130,7 +1130,7 @@ function isUnknown(_value) {
1130
1130
  return true;
1131
1131
  }
1132
1132
  async function resolveServerInteractive(presetNamespace) {
1133
- const { discoverNodes, resolveHubFromDiscovered, filterHubNodes, DEFAULT_HUB_HTTPS_PORT } = await import("./discover-2O7WGGRD.js");
1133
+ const { discoverNodes, resolveHubFromDiscovered, filterHubNodes, DEFAULT_HUB_HTTPS_PORT } = await import("./discover-UFN2BYNO.js");
1134
1134
  if (presetNamespace) {
1135
1135
  const spinner4 = clack.spinner();
1136
1136
  spinner4.start(`Discovering hub on LAN (namespace "${presetNamespace}")`);
@@ -5,7 +5,7 @@ import {
5
5
  filterHubNodes,
6
6
  resolveHubFromDiscovered,
7
7
  runDiscover
8
- } from "./chunk-NEA5DJLZ.js";
8
+ } from "./chunk-ARTM5NDU.js";
9
9
  import "./chunk-LMMQX4CK.js";
10
10
  export {
11
11
  DEFAULT_HUB_HTTPS_PORT,