instar 1.3.91 → 1.3.92
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/.claude/skills/autonomous/hooks/autonomous-stop-hook.sh +17 -0
- package/dashboard/index.html +108 -0
- package/dist/commands/server.d.ts.map +1 -1
- package/dist/commands/server.js +207 -1
- package/dist/commands/server.js.map +1 -1
- package/dist/config/ConfigDefaults.d.ts.map +1 -1
- package/dist/config/ConfigDefaults.js +30 -0
- package/dist/config/ConfigDefaults.js.map +1 -1
- package/dist/config/LiveConfig.d.ts +3 -1
- package/dist/config/LiveConfig.d.ts.map +1 -1
- package/dist/config/LiveConfig.js +4 -1
- package/dist/config/LiveConfig.js.map +1 -1
- package/dist/config/stageWriteGuard.d.ts +23 -0
- package/dist/config/stageWriteGuard.d.ts.map +1 -0
- package/dist/config/stageWriteGuard.js +33 -0
- package/dist/config/stageWriteGuard.js.map +1 -0
- package/dist/core/DeliverMessageHandler.d.ts +33 -0
- package/dist/core/DeliverMessageHandler.d.ts.map +1 -0
- package/dist/core/DeliverMessageHandler.js +34 -0
- package/dist/core/DeliverMessageHandler.js.map +1 -0
- package/dist/core/LeaseCoordinator.d.ts +39 -2
- package/dist/core/LeaseCoordinator.d.ts.map +1 -1
- package/dist/core/LeaseCoordinator.js +45 -9
- package/dist/core/LeaseCoordinator.js.map +1 -1
- package/dist/core/MachineIdentity.d.ts +28 -1
- package/dist/core/MachineIdentity.d.ts.map +1 -1
- package/dist/core/MachineIdentity.js +81 -1
- package/dist/core/MachineIdentity.js.map +1 -1
- package/dist/core/MachineLoadBroker.d.ts +94 -0
- package/dist/core/MachineLoadBroker.d.ts.map +1 -0
- package/dist/core/MachineLoadBroker.js +87 -0
- package/dist/core/MachineLoadBroker.js.map +1 -0
- package/dist/core/MachinePoolRegistry.d.ts +94 -0
- package/dist/core/MachinePoolRegistry.d.ts.map +1 -0
- package/dist/core/MachinePoolRegistry.js +150 -0
- package/dist/core/MachinePoolRegistry.js.map +1 -0
- package/dist/core/MeshRpc.d.ts +165 -0
- package/dist/core/MeshRpc.d.ts.map +1 -0
- package/dist/core/MeshRpc.js +156 -0
- package/dist/core/MeshRpc.js.map +1 -0
- package/dist/core/MeshRpcClient.d.ts +59 -0
- package/dist/core/MeshRpcClient.d.ts.map +1 -0
- package/dist/core/MeshRpcClient.js +58 -0
- package/dist/core/MeshRpcClient.js.map +1 -0
- package/dist/core/MultiMachineCoordinator.d.ts +11 -0
- package/dist/core/MultiMachineCoordinator.d.ts.map +1 -1
- package/dist/core/MultiMachineCoordinator.js +13 -0
- package/dist/core/MultiMachineCoordinator.js.map +1 -1
- package/dist/core/NicknameAssigner.d.ts +51 -0
- package/dist/core/NicknameAssigner.d.ts.map +1 -0
- package/dist/core/NicknameAssigner.js +91 -0
- package/dist/core/NicknameAssigner.js.map +1 -0
- package/dist/core/NicknameCommand.d.ts +28 -0
- package/dist/core/NicknameCommand.d.ts.map +1 -0
- package/dist/core/NicknameCommand.js +69 -0
- package/dist/core/NicknameCommand.js.map +1 -0
- package/dist/core/PlacementExecutor.d.ts +71 -0
- package/dist/core/PlacementExecutor.d.ts.map +1 -0
- package/dist/core/PlacementExecutor.js +156 -0
- package/dist/core/PlacementExecutor.js.map +1 -0
- package/dist/core/PostUpdateMigrator.d.ts.map +1 -1
- package/dist/core/PostUpdateMigrator.js +21 -0
- package/dist/core/PostUpdateMigrator.js.map +1 -1
- package/dist/core/RebalancePlanner.d.ts +48 -0
- package/dist/core/RebalancePlanner.d.ts.map +1 -0
- package/dist/core/RebalancePlanner.js +71 -0
- package/dist/core/RebalancePlanner.js.map +1 -0
- package/dist/core/SessionOwnership.d.ts +103 -0
- package/dist/core/SessionOwnership.d.ts.map +1 -0
- package/dist/core/SessionOwnership.js +0 -0
- package/dist/core/SessionOwnership.js.map +1 -0
- package/dist/core/SessionOwnershipRegistry.d.ts +115 -0
- package/dist/core/SessionOwnershipRegistry.d.ts.map +1 -0
- package/dist/core/SessionOwnershipRegistry.js +128 -0
- package/dist/core/SessionOwnershipRegistry.js.map +1 -0
- package/dist/core/SessionPoolE2EResultStore.d.ts +45 -0
- package/dist/core/SessionPoolE2EResultStore.d.ts.map +1 -0
- package/dist/core/SessionPoolE2EResultStore.js +66 -0
- package/dist/core/SessionPoolE2EResultStore.js.map +1 -0
- package/dist/core/SessionRouter.d.ts +95 -0
- package/dist/core/SessionRouter.d.ts.map +1 -0
- package/dist/core/SessionRouter.js +151 -0
- package/dist/core/SessionRouter.js.map +1 -0
- package/dist/core/StageAdvancer.d.ts +47 -0
- package/dist/core/StageAdvancer.d.ts.map +1 -0
- package/dist/core/StageAdvancer.js +70 -0
- package/dist/core/StageAdvancer.js.map +1 -0
- package/dist/core/TransferByNickname.d.ts +51 -0
- package/dist/core/TransferByNickname.d.ts.map +1 -0
- package/dist/core/TransferByNickname.js +50 -0
- package/dist/core/TransferByNickname.js.map +1 -0
- package/dist/core/TransferOrchestrator.d.ts +113 -0
- package/dist/core/TransferOrchestrator.d.ts.map +1 -0
- package/dist/core/TransferOrchestrator.js +79 -0
- package/dist/core/TransferOrchestrator.js.map +1 -0
- package/dist/core/types.d.ts +177 -1
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js.map +1 -1
- package/dist/scaffold/templates.d.ts.map +1 -1
- package/dist/scaffold/templates.js +5 -0
- package/dist/scaffold/templates.js.map +1 -1
- package/dist/server/AgentServer.d.ts +8 -0
- package/dist/server/AgentServer.d.ts.map +1 -1
- package/dist/server/AgentServer.js +4 -0
- package/dist/server/AgentServer.js.map +1 -1
- package/dist/server/CapabilityIndex.d.ts.map +1 -1
- package/dist/server/CapabilityIndex.js +14 -0
- package/dist/server/CapabilityIndex.js.map +1 -1
- package/dist/server/routes.d.ts +12 -0
- package/dist/server/routes.d.ts.map +1 -1
- package/dist/server/routes.js +91 -0
- package/dist/server/routes.js.map +1 -1
- package/package.json +1 -1
- package/src/data/builtin-manifest.json +64 -64
- package/src/scaffold/templates.ts +5 -0
- package/upgrades/1.3.92.md +63 -0
- package/upgrades/side-effects/session-pool-capability-classification.md +16 -0
- package/upgrades/side-effects/session-pool-review-fixes.md +23 -0
- package/upgrades/side-effects/session-pool-track-a-router-lease.md +29 -0
- package/upgrades/side-effects/session-pool-track-b-agent-awareness.md +29 -0
- package/upgrades/side-effects/session-pool-track-b-nicknames.md +35 -0
- package/upgrades/side-effects/session-pool-track-b-pool-api.md +36 -0
- package/upgrades/side-effects/session-pool-track-b-registry.md +31 -0
- package/upgrades/side-effects/session-pool-track-b-wiring.md +39 -0
- package/upgrades/side-effects/session-pool-track-c-dispatcher.md +24 -0
- package/upgrades/side-effects/session-pool-track-c-meshrpc.md +35 -0
- package/upgrades/side-effects/session-pool-track-c-route-wiring.md +31 -0
- package/upgrades/side-effects/session-pool-track-d-ownership-fsm.md +31 -0
- package/upgrades/side-effects/session-pool-track-d-registry.md +27 -0
- package/upgrades/side-effects/session-pool-track-d-wiring.md +30 -0
- package/upgrades/side-effects/session-pool-track-e-boot-wiring.md +20 -0
- package/upgrades/side-effects/session-pool-track-e-placement-core.md +17 -0
- package/upgrades/side-effects/session-pool-track-e-router.md +23 -0
- package/upgrades/side-effects/session-pool-track-f-config.md +12 -0
- package/upgrades/side-effects/session-pool-track-f-handoff-core.md +17 -0
- package/upgrades/side-effects/session-pool-track-g-load-broker.md +16 -0
- package/upgrades/side-effects/session-pool-track-h-gate-wiring.md +17 -0
- package/upgrades/side-effects/session-pool-track-h-mesh-client.md +15 -0
- package/upgrades/side-effects/session-pool-track-h-rebalance.md +13 -0
- package/upgrades/side-effects/session-pool-track-h-rollout-gate.md +17 -0
- package/upgrades/side-effects/session-pool-track-h-stage-guard.md +16 -0
package/dist/server/routes.js
CHANGED
|
@@ -6241,6 +6241,97 @@ export function createRoutes(ctx) {
|
|
|
6241
6241
|
res.status(400).json({ error: err instanceof Error ? err.message : String(err) });
|
|
6242
6242
|
}
|
|
6243
6243
|
});
|
|
6244
|
+
// ── Multi-Machine Session Pool (§L2): the live machine-pool view ──────
|
|
6245
|
+
//
|
|
6246
|
+
// GET /pool — router holder + every machine's capacity (nickname, hardware,
|
|
6247
|
+
// liveness, load, clock-skew status). Backs the Machines dashboard tab. Always
|
|
6248
|
+
// 200 (Bearer-auth via the global middleware); `enabled:false` + an empty/
|
|
6249
|
+
// single-machine view on installs where the pool registry isn't wired (dark).
|
|
6250
|
+
router.get('/pool', (_req, res) => {
|
|
6251
|
+
const sync = ctx.coordinator ? ctx.coordinator.getSyncStatus() : null;
|
|
6252
|
+
const machines = ctx.machinePoolRegistry ? ctx.machinePoolRegistry.getCapacities() : [];
|
|
6253
|
+
res.json({
|
|
6254
|
+
enabled: !!ctx.machinePoolRegistry,
|
|
6255
|
+
router: sync
|
|
6256
|
+
? {
|
|
6257
|
+
holder: sync.leaseHolder,
|
|
6258
|
+
epoch: sync.leaseEpoch,
|
|
6259
|
+
holdsLease: sync.holdsLease,
|
|
6260
|
+
awakeMachineCount: sync.awakeMachineCount,
|
|
6261
|
+
splitBrainState: sync.splitBrainState,
|
|
6262
|
+
}
|
|
6263
|
+
: null,
|
|
6264
|
+
machines,
|
|
6265
|
+
});
|
|
6266
|
+
});
|
|
6267
|
+
// GET /session-pool/e2e-results — the rollout gate's observable state (§Rollout).
|
|
6268
|
+
// Read-only; returns the latest E2E result per stage + whether each verifies. The
|
|
6269
|
+
// StageAdvancer gates activation on these; this surfaces them (no mutation here).
|
|
6270
|
+
router.get('/session-pool/e2e-results', (_req, res) => {
|
|
6271
|
+
const store = ctx.sessionPoolE2EResultStore;
|
|
6272
|
+
if (!store) {
|
|
6273
|
+
res.status(503).json({ error: 'session-pool rollout gate not available (dark / single-machine install)' });
|
|
6274
|
+
return;
|
|
6275
|
+
}
|
|
6276
|
+
const stages = [0, 1, 2, 3];
|
|
6277
|
+
const latestPerStage = stages.map((stage) => {
|
|
6278
|
+
const row = store.getLatestForStage(stage);
|
|
6279
|
+
return { stage, result: row?.result ?? null, commitSha: row?.commitSha ?? null, ranAt: row?.ranAt ?? null, verified: row ? store.verify(row) : null };
|
|
6280
|
+
});
|
|
6281
|
+
res.json({ latestPerStage, total: store.all().length });
|
|
6282
|
+
});
|
|
6283
|
+
// PATCH /pool/machines/:id — rename a machine (§L2 user-editable nickname).
|
|
6284
|
+
// Body: { nickname: string }. Validates format + pool-uniqueness; a collision
|
|
6285
|
+
// is rejected (400), an unknown machine is 404, a malformed nickname is 400.
|
|
6286
|
+
// Metadata-only — renaming NEVER moves a session or touches lease/ownership.
|
|
6287
|
+
router.patch('/pool/machines/:id', (req, res) => {
|
|
6288
|
+
const idMgr = ctx.coordinator?.managers?.identityManager ?? null;
|
|
6289
|
+
if (!idMgr) {
|
|
6290
|
+
res.status(503).json({ error: 'machine registry not available (single-machine install)' });
|
|
6291
|
+
return;
|
|
6292
|
+
}
|
|
6293
|
+
const nickname = (req.body ?? {}).nickname;
|
|
6294
|
+
if (typeof nickname !== 'string') {
|
|
6295
|
+
res.status(400).json({ error: 'nickname (string) is required' });
|
|
6296
|
+
return;
|
|
6297
|
+
}
|
|
6298
|
+
try {
|
|
6299
|
+
idMgr.updateNickname(req.params.id, nickname);
|
|
6300
|
+
res.json({ ok: true, machineId: req.params.id, nickname: nickname.trim() });
|
|
6301
|
+
}
|
|
6302
|
+
catch (err) {
|
|
6303
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
6304
|
+
res.status(/not found/i.test(msg) ? 404 : 400).json({ error: msg });
|
|
6305
|
+
}
|
|
6306
|
+
});
|
|
6307
|
+
// POST /mesh/rpc — the MeshRpc receive endpoint (§L0). Body = a signed,
|
|
6308
|
+
// recipient-bound MeshEnvelope. The dispatcher runs verify→RBAC→nonce-burn→
|
|
6309
|
+
// handler and returns a typed reason + HTTP status (401/403 auth, 409 freshness,
|
|
6310
|
+
// 501 unimplemented). NOTE: m2m authenticity is the ENVELOPE's own Ed25519
|
|
6311
|
+
// signature (verified by the dispatcher), independent of the Bearer middleware.
|
|
6312
|
+
router.post('/mesh/rpc', async (req, res) => {
|
|
6313
|
+
if (!ctx.meshRpcDispatcher) {
|
|
6314
|
+
res.status(503).json({ error: 'mesh-rpc not configured (single-machine install)' });
|
|
6315
|
+
return;
|
|
6316
|
+
}
|
|
6317
|
+
const env = req.body;
|
|
6318
|
+
if (!env || typeof env !== 'object' || typeof env.sender !== 'string') {
|
|
6319
|
+
res.status(400).json({ error: 'a signed MeshEnvelope is required' });
|
|
6320
|
+
return;
|
|
6321
|
+
}
|
|
6322
|
+
try {
|
|
6323
|
+
const r = await ctx.meshRpcDispatcher.dispatch(env);
|
|
6324
|
+
if (r.ok) {
|
|
6325
|
+
res.json({ ok: true, result: r.result });
|
|
6326
|
+
}
|
|
6327
|
+
else {
|
|
6328
|
+
res.status(r.status).json({ ok: false, reason: r.reason });
|
|
6329
|
+
}
|
|
6330
|
+
}
|
|
6331
|
+
catch (err) {
|
|
6332
|
+
res.status(500).json({ error: err instanceof Error ? err.message : String(err) });
|
|
6333
|
+
}
|
|
6334
|
+
});
|
|
6244
6335
|
// POST /projects/:id/drift-check — run the drift checker for a given
|
|
6245
6336
|
// round and return the verdict. Wraps ProjectDriftChecker.run().
|
|
6246
6337
|
//
|