@camstack/server 1.2.631 → 1.2.633
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/THIRD_PARTY_MODELS.md +1 -1
- package/dist/agent/addon-scan.js +1 -1
- package/dist/agent/agent-infra-capabilities.js +1 -1
- package/dist/agent/infra-boot-guard.js +2 -2
- package/dist/agent/main.js +1 -1
- package/dist/api/addon-upload.js +2 -2
- package/dist/api/agent-addon-delivery.js +2 -2
- package/dist/api/trpc/device-collection-dispatch.js +3 -3
- package/dist/closure-patches/patch-reach.json +2 -2
- package/dist/core/addon/addon-package.service.js +1 -1
- package/dist/core/agent/agent-addon-backfill.js +1 -1
- package/dist/core/agent/agent-delivery-ledger.js +2 -2
- package/dist/core/agent/agent-registry.service.js +1 -1
- package/dist/core/moleculer/agent-registration-request.js +1 -1
- package/dist/core/moleculer/moleculer.service.js +1 -1
- package/dist/core/server-update/system-apply-closure-patches.js +1 -1
- package/dist/core/update-availability-emitter.js +2 -2
- package/dist/manual-boot.js +1 -1
- package/package.json +24 -15
package/THIRD_PARTY_MODELS.md
CHANGED
|
@@ -218,6 +218,6 @@ object-detection catalogs) on request. They are downloaded from their
|
|
|
218
218
|
publishers, are not hosted or redistributed by CamStack, and keep their
|
|
219
219
|
publishers' licences; Model Studio shows the licence where the source declares
|
|
220
220
|
one. A model you upload or convert
|
|
221
|
-
yourself, or pull from your own
|
|
221
|
+
yourself, or pull from your own plus catalog account, likewise keeps whatever
|
|
222
222
|
licence its author published. CamStack does not change it and does not record
|
|
223
223
|
it.
|
package/dist/agent/addon-scan.js
CHANGED
|
@@ -48,7 +48,7 @@ exports.planAgentAddonScan = planAgentAddonScan;
|
|
|
48
48
|
* drifted because no update channel refreshed it"*.
|
|
49
49
|
*
|
|
50
50
|
* The agent never got the change, and drifted exactly as predicted. Measured
|
|
51
|
-
* 2026-08-11:
|
|
51
|
+
* 2026-08-11: agent-a carried `@camstack/system@1.2.61` and macmini
|
|
52
52
|
* `1.2.62` in their addon roots while both ran a `1.2.78` closure. Nothing
|
|
53
53
|
* refreshed them, because `seedBuiltinsFromClosure` (now deleted) only wrote
|
|
54
54
|
* the copy when it was ABSENT — a self-heal that guaranteed a copy existed and
|
|
@@ -22,7 +22,7 @@ exports.resolveAgentInfraCapabilities = resolveAgentInfraCapabilities;
|
|
|
22
22
|
* The commit before this one gave that door the hub as its remote, so dropping
|
|
23
23
|
* the engine leaves nothing stranded.
|
|
24
24
|
*
|
|
25
|
-
* Measured on `
|
|
25
|
+
* Measured on `agent-a` before the change: 17 tables, 33 objects, one
|
|
26
26
|
* page each. Every `*:addon-settings` table — `hub-forwarder`,
|
|
27
27
|
* `metrics-native`, `platform-probe`, `storage-orchestrator`, and the shared
|
|
28
28
|
* `addon-settings` — held **0 rows**. The only non-empty tables were
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
* - the addon was NOT FOUND at all → `console.error`, continue.
|
|
11
11
|
*
|
|
12
12
|
* The second branch is strictly worse than the first and it was the quiet one.
|
|
13
|
-
* On `
|
|
13
|
+
* On `agent-a` the whole `@camstack/system` package was renamed out of
|
|
14
14
|
* `/data/addons/@camstack/` at 16:40 on 2026-08-07 (a builtin-shadow cleanup).
|
|
15
15
|
* On an AGENT that directory is the SOLE source of the builtins — there is no
|
|
16
16
|
* seed fallback — so the next boot came up with ZERO infra addons: no storage,
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
*
|
|
32
32
|
* It reports EVERY missing required capability in one throw, not just the
|
|
33
33
|
* first — an operator staring at a crash-loop needs the whole list, and the
|
|
34
|
-
* four that vanished together on
|
|
34
|
+
* four that vanished together on agent-a vanished for one single reason.
|
|
35
35
|
*/
|
|
36
36
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
37
37
|
exports.assertRequiredInfraResolved = assertRequiredInfraResolved;
|
package/dist/agent/main.js
CHANGED
|
@@ -508,7 +508,7 @@ async function startAgent(configPath) {
|
|
|
508
508
|
// ONE COPY PER NODE — the same sweep the hub runs, at this role's own
|
|
509
509
|
// healthy-boot moment (D45, task 32). Operator, 2026-08-13: "l'agente deve
|
|
510
510
|
// essere identico all'hub" [the agent must be identical to the hub]. An agent is where the redundant copies actually
|
|
511
|
-
// are: `
|
|
511
|
+
// are: `agent-a` still holds `<dataDir>/addons/@camstack/system@1.2.78`
|
|
512
512
|
// — a copy nothing loads (both roles pass `['@camstack/system']` as the
|
|
513
513
|
// loader's skip list) and that WINS over the closure for anything resolving
|
|
514
514
|
// through it.
|
package/dist/api/addon-upload.js
CHANGED
|
@@ -156,8 +156,8 @@ deliveryLedger) {
|
|
|
156
156
|
// returned `undefined` for a large one.
|
|
157
157
|
//
|
|
158
158
|
// Cost, 2026-08-07: every `camstack deploy packages/addon-pipeline -n
|
|
159
|
-
//
|
|
160
|
-
// branch. The CLI printed `✓
|
|
159
|
+
// agent-a` — a 4.9 MB tarball — read `nodeId = null` and took the HUB
|
|
160
|
+
// branch. The CLI printed `✓ agent-a: @camstack/addon-pipeline@1.2.43`
|
|
161
161
|
// (the label it INTENDED, never the target the hub used) and the named agent
|
|
162
162
|
// was never addressed at all. It reproduced 4× and was diagnosed as a stale
|
|
163
163
|
// dist. Reading the fields after the drain is the fix here; the CLI also
|
|
@@ -14,7 +14,7 @@ exports.deliverAddonToAgent = deliverAddonToAgent;
|
|
|
14
14
|
* every runner on that node keeps executing the PREVIOUS dist until something
|
|
15
15
|
* else happens to restart it.
|
|
16
16
|
*
|
|
17
|
-
* Reproduced on
|
|
17
|
+
* Reproduced on agent-a 2026-08-07 with a marker file inside `dist/`: the
|
|
18
18
|
* marker was on disk 2 seconds after the `✓`, and not one of the 12 addon-runner
|
|
19
19
|
* pids had been recycled. Four operators-hours were spent that day looking for a
|
|
20
20
|
* stale tarball cache that does not exist — the bytes were always correct, they
|
|
@@ -31,7 +31,7 @@ exports.deliverAddonToAgent = deliverAddonToAgent;
|
|
|
31
31
|
* `$agent.deploy` is the INSTALL, not a control call.
|
|
32
32
|
*
|
|
33
33
|
* This constant used to be 30 s and said "install work is bounded well inside
|
|
34
|
-
* this". On 2026-09-11 that claim cost `
|
|
34
|
+
* this". On 2026-09-11 that claim cost `agent-a` an evening of running a
|
|
35
35
|
* previous `addon-pipeline` dist: three deploys, three
|
|
36
36
|
* `Request is timed out when call '$agent.deploy'` at exactly 30 s, while the
|
|
37
37
|
* CLI printed `✓ Deployed to 1 target(s)` each time — true of the hub, silent
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
* dispatcher has no notion of a DEFAULT provider and never had one: a
|
|
35
35
|
* collection cap's binding set is derived and plural, so an absent pin
|
|
36
36
|
* left the fan-out un-narrowed and bought a union. The cap's docblock
|
|
37
|
-
* said otherwise for a day, and device
|
|
37
|
+
* said otherwise for a day, and device 107 answered a `limit: 3` call
|
|
38
38
|
* with six rows because of it.
|
|
39
39
|
* 2. **One failing source never empties the others.** Every source is called
|
|
40
40
|
* independently and a rejection removes only its own rows — and says so,
|
|
@@ -96,9 +96,9 @@ const DEVICE_MANAGER_CAP = 'device-manager';
|
|
|
96
96
|
* framework's answer to "which providers does this device have".
|
|
97
97
|
*
|
|
98
98
|
* It used to enumerate REGISTRATIONS, and that is what put `analytics` in the
|
|
99
|
-
* picker three times on the first live run (device
|
|
99
|
+
* picker three times on the first live run (device 107, 2026-09-20): one addon
|
|
100
100
|
* reached here as the device's native provider, as the hub-local registration
|
|
101
|
-
* and again as `pipeline-analytics@
|
|
101
|
+
* and again as `pipeline-analytics@agent-a`, with a fourth on the Mac
|
|
102
102
|
* node that `resolveCollectionForDevice` had already dropped. Three tick-boxes
|
|
103
103
|
* for one thing, and `listClips` triplicating every row underneath them.
|
|
104
104
|
*
|
|
@@ -33,7 +33,7 @@
|
|
|
33
33
|
"its whole tree — parser included — into `@camstack/system/dist`, and the",
|
|
34
34
|
"patch travels inside the published tarball. Verified 2026-09-12 in the",
|
|
35
35
|
"`@camstack/system@1.2.224` tarball and in the live closure on both the",
|
|
36
|
-
"hub and the
|
|
36
|
+
"hub and the agent-a agent.",
|
|
37
37
|
"",
|
|
38
38
|
"The closure ALSO carries an unpatched `node_modules/moleculer` — npm",
|
|
39
39
|
"installs it for `@camstack/system`'s dependency entry — and exactly one",
|
|
@@ -88,7 +88,7 @@
|
|
|
88
88
|
"installer's closure-dedupe (D343) links all three at ONE copy. That copy",
|
|
89
89
|
"is a plain npm tarball. The closure has no `patches/` directory and had",
|
|
90
90
|
"no lifecycle step that could apply one, so production ran werift 0.22.9",
|
|
91
|
-
"UNPATCHED — verified 2026-09-12 on the hub, the
|
|
91
|
+
"UNPATCHED — verified 2026-09-12 on the hub, the agent-a agent and",
|
|
92
92
|
"the Mac-mini Electron agent, all three showing `RTP_HISTORY_SIZE = 128`",
|
|
93
93
|
"and no forceTurn guard.",
|
|
94
94
|
"",
|
|
@@ -714,7 +714,7 @@ class AddonPackageService {
|
|
|
714
714
|
* version string is not a build. `@camstack/addon-pipeline@1.2.43` deployed
|
|
715
715
|
* from the workspace and `@camstack/addon-pipeline@1.2.43` on npm were two
|
|
716
716
|
* different bundles all of 2026-08-07, and every `camstack deploy` to
|
|
717
|
-
*
|
|
717
|
+
* agent-a was silently reverted ~1.5s later: the deploy's own
|
|
718
718
|
* `$agent.reload` briefly emptied the node's reported addon list, the hub's
|
|
719
719
|
* reconcile read it as "package missing", and the back-fill repaired the node
|
|
720
720
|
* by installing the PUBLISHED 1.2.43 over the one just delivered. Nothing
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* "installed on the hub but missing on the node". A node whose `<dataDir>/addons`
|
|
10
10
|
* had been wiped therefore came back with only its bootstrap packages
|
|
11
11
|
* (`@camstack/system` + `camstack.agentBootstrapAddons`) and the hub never sent
|
|
12
|
-
* the rest — measured live as 4 of 14 packages on `
|
|
12
|
+
* the rest — measured live as 4 of 14 packages on `agent-a`. Under the
|
|
13
13
|
* volume-only image (no addons baked in) an empty addons dir is the ORDINARY
|
|
14
14
|
* first-boot state of every new or rebuilt node, so that gap becomes the normal
|
|
15
15
|
* case rather than an anomaly.
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
* 1. `$agent.deploy`'s `onApplied` evicts the package's declaration ids from
|
|
11
11
|
* the node's `loadedAddons`, so `$agent.status` stops reporting it;
|
|
12
12
|
* 2. `$agent.reload` re-instantiates every runner, and a status read landing
|
|
13
|
-
* mid-reload sees a PARTIAL roster — measured on `
|
|
13
|
+
* mid-reload sees a PARTIAL roster — measured on `agent-a`
|
|
14
14
|
* 2026-08-07 as the same reconcile reporting "14 checked" and, seconds
|
|
15
15
|
* later, "20 checked";
|
|
16
16
|
* 3. the reload re-registers the node, which fires the reconcile, which reads
|
|
@@ -41,7 +41,7 @@ exports.AgentDeliveryLedger = exports.DELIVERY_GRACE_MS = void 0;
|
|
|
41
41
|
*
|
|
42
42
|
* Sized for the re-registration storm: `$agent.reload` returns when the runners
|
|
43
43
|
* have been asked to restart, and their `$hub.registerNode` calls (one per
|
|
44
|
-
* group runner — 12 on `
|
|
44
|
+
* group runner — 12 on `agent-a`) land over the following seconds. Each
|
|
45
45
|
* one fires a reconcile.
|
|
46
46
|
*/
|
|
47
47
|
exports.DELIVERY_GRACE_MS = 60_000;
|
|
@@ -626,7 +626,7 @@ class AgentRegistryService {
|
|
|
626
626
|
* declared (`ClusterNodeHistoryStore.getPackages`), delivering whatever is
|
|
627
627
|
* missing. Without it a node whose addons dir was wiped came back with only
|
|
628
628
|
* its bootstrap packages and the hub never sent the rest — 4 of 14 on
|
|
629
|
-
* `
|
|
629
|
+
* `agent-a`, measured. Under the volume-only image that empty state is
|
|
630
630
|
* the ordinary first boot of every rebuilt node. See `agent-addon-backfill.ts`
|
|
631
631
|
* for what defines the intended set and how retries are bounded.
|
|
632
632
|
*
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
* agent's own view of the hub never breaks, so nothing on the agent says "send
|
|
10
10
|
* your manifest again". When the hub then sees the agent again
|
|
11
11
|
* (`$node.connected`), it holds an online node with NO capabilities. On
|
|
12
|
-
* 2026-10-14
|
|
12
|
+
* 2026-10-14 agent-a and the Mac sat that way for 50 minutes.
|
|
13
13
|
*
|
|
14
14
|
* So on every `$node.connected` of an agent the hub calls
|
|
15
15
|
* `$agent.requestRegistration`: one RPC, on the event, no timer (D3). The
|
|
@@ -624,7 +624,7 @@ class MoleculerService {
|
|
|
624
624
|
// agent is authoritative for. Cross-node `system.ready-state` deltas
|
|
625
625
|
// are telemetry (lossy) — a lost post-restart `ready` used to leave
|
|
626
626
|
// this registry stuck on the synthesized `down` forever (2026-07-17:
|
|
627
|
-
// pipeline-executor@
|
|
627
|
+
// pipeline-executor@agent-a, 3.5h dispatch outage). The
|
|
628
628
|
// periodic sweep below repairs deltas lost while CONNECTED.
|
|
629
629
|
this.broker.localBus.on('$node.connected', ({ node }) => {
|
|
630
630
|
const nodeId = node.id;
|
|
@@ -47,7 +47,7 @@ exports.buildSystemApplyClosurePatches = buildSystemApplyClosurePatches;
|
|
|
47
47
|
* thing that notices is `findUnappliedClosurePatches` refusing the swap.
|
|
48
48
|
*
|
|
49
49
|
* Measured 2026-09-13 on the Mac-mini agent, which had bootstrapped npm 12.0.1
|
|
50
|
-
* while hub and
|
|
50
|
+
* while hub and agent-a still ran npm 11. That node sat two versions
|
|
51
51
|
* behind with no other symptom, and the applier — run by hand in the very same
|
|
52
52
|
* staging closure — reported `APPLIED werift@0.22.9` on three files. The code
|
|
53
53
|
* was never wrong; it was never called.
|
|
@@ -9,12 +9,12 @@ const types_1 = require("@camstack/types");
|
|
|
9
9
|
*
|
|
10
10
|
* One event carries the entire currently-available list **of one node** — the
|
|
11
11
|
* scope that changed, never the union across nodes. The Notification Center
|
|
12
|
-
* turns that into "2 aggiornamenti addon disponibili su
|
|
12
|
+
* turns that into "2 aggiornamenti addon disponibili su agent-a" with
|
|
13
13
|
* that node's packages under it.
|
|
14
14
|
*
|
|
15
15
|
* The union was the shape until 2026-08-19, and on a three-node cluster one
|
|
16
16
|
* 6-hourly sweep sent the operator THREE pushes that each listed hub +
|
|
17
|
-
* MacMiniAgent +
|
|
17
|
+
* MacMiniAgent + agent-a and named no node: every scope's change
|
|
18
18
|
* re-emitted the whole held map, so the notifications differed by one line and
|
|
19
19
|
* read as identical. A list is only actionable if it belongs to somebody.
|
|
20
20
|
*
|
package/dist/manual-boot.js
CHANGED
|
@@ -184,7 +184,7 @@ async function bootManual(opts) {
|
|
|
184
184
|
// calling `packPackage` — `npm pack <name>@<version>` — so the back-fill
|
|
185
185
|
// repaired a node by installing the REGISTRY's build of a version over the
|
|
186
186
|
// one an operator had just deployed. Same name, same version, different
|
|
187
|
-
// bundle: every `camstack deploy … -n
|
|
187
|
+
// bundle: every `camstack deploy … -n agent-a` on 2026-08-07 was
|
|
188
188
|
// reverted ~1.5s later and read as a stale dist. See `packInstalledPackage`.
|
|
189
189
|
// Delivery is an RPC pair, never an event (D8/D11).
|
|
190
190
|
const backfillLogger = loggingService.createLogger('agent-backfill');
|
package/package.json
CHANGED
|
@@ -1,7 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@camstack/server",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.633",
|
|
4
4
|
"license": "MIT",
|
|
5
|
+
"repository": {
|
|
6
|
+
"type": "git",
|
|
7
|
+
"url": "https://github.com/camstack/server.git",
|
|
8
|
+
"directory": "server/backend"
|
|
9
|
+
},
|
|
10
|
+
"homepage": "https://camstack-docs.zentik.app",
|
|
11
|
+
"bugs": {
|
|
12
|
+
"url": "https://github.com/camstack/server/issues"
|
|
13
|
+
},
|
|
5
14
|
"private": false,
|
|
6
15
|
"files": [
|
|
7
16
|
"dist",
|
|
@@ -38,20 +47,20 @@
|
|
|
38
47
|
]
|
|
39
48
|
},
|
|
40
49
|
"dependencies": {
|
|
41
|
-
"@camstack/addon-admin-ui": "1.2.
|
|
42
|
-
"@camstack/addon-agent-ui": "1.2.
|
|
43
|
-
"@camstack/addon-auth": "1.2.
|
|
44
|
-
"@camstack/addon-benchmark": "1.2.
|
|
45
|
-
"@camstack/addon-decoder-nodeav": "1.2.
|
|
46
|
-
"@camstack/addon-notifiers": "1.2.
|
|
47
|
-
"@camstack/addon-pipeline": "1.2.
|
|
48
|
-
"@camstack/addon-pipeline-orchestrator": "1.2.
|
|
49
|
-
"@camstack/addon-post-analysis": "1.2.
|
|
50
|
-
"@camstack/develop": "0.1.
|
|
51
|
-
"@camstack/sdk": "1.2.
|
|
52
|
-
"@camstack/system": "1.2.
|
|
53
|
-
"@camstack/types": "1.2.
|
|
54
|
-
"@camstack/ui-library": "1.2.
|
|
50
|
+
"@camstack/addon-admin-ui": "1.2.470",
|
|
51
|
+
"@camstack/addon-agent-ui": "1.2.269",
|
|
52
|
+
"@camstack/addon-auth": "1.2.168",
|
|
53
|
+
"@camstack/addon-benchmark": "1.2.268",
|
|
54
|
+
"@camstack/addon-decoder-nodeav": "1.2.142",
|
|
55
|
+
"@camstack/addon-notifiers": "1.2.621",
|
|
56
|
+
"@camstack/addon-pipeline": "1.2.627",
|
|
57
|
+
"@camstack/addon-pipeline-orchestrator": "1.2.629",
|
|
58
|
+
"@camstack/addon-post-analysis": "1.2.636",
|
|
59
|
+
"@camstack/develop": "0.1.36",
|
|
60
|
+
"@camstack/sdk": "1.2.153",
|
|
61
|
+
"@camstack/system": "1.2.484",
|
|
62
|
+
"@camstack/types": "1.2.416",
|
|
63
|
+
"@camstack/ui-library": "1.2.325",
|
|
55
64
|
"@fastify/compress": "^9.0.0",
|
|
56
65
|
"@fastify/cookie": "^11.0.2",
|
|
57
66
|
"@fastify/cors": "^11.2.0",
|