instar 1.3.234 → 1.3.236

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 (69) hide show
  1. package/dashboard/index.html +140 -0
  2. package/dist/commands/reflect.d.ts.map +1 -1
  3. package/dist/commands/reflect.js +5 -0
  4. package/dist/commands/reflect.js.map +1 -1
  5. package/dist/commands/server.d.ts.map +1 -1
  6. package/dist/commands/server.js +41 -0
  7. package/dist/commands/server.js.map +1 -1
  8. package/dist/config/ConfigDefaults.d.ts.map +1 -1
  9. package/dist/config/ConfigDefaults.js +14 -4
  10. package/dist/config/ConfigDefaults.js.map +1 -1
  11. package/dist/core/CircuitBreakingIntelligenceProvider.d.ts +1 -1
  12. package/dist/core/CircuitBreakingIntelligenceProvider.d.ts.map +1 -1
  13. package/dist/core/CircuitBreakingIntelligenceProvider.js +5 -2
  14. package/dist/core/CircuitBreakingIntelligenceProvider.js.map +1 -1
  15. package/dist/core/IntelligenceRouter.d.ts +82 -0
  16. package/dist/core/IntelligenceRouter.d.ts.map +1 -0
  17. package/dist/core/IntelligenceRouter.js +108 -0
  18. package/dist/core/IntelligenceRouter.js.map +1 -0
  19. package/dist/core/PostUpdateMigrator.d.ts.map +1 -1
  20. package/dist/core/PostUpdateMigrator.js +40 -2
  21. package/dist/core/PostUpdateMigrator.js.map +1 -1
  22. package/dist/core/SessionManager.d.ts +12 -0
  23. package/dist/core/SessionManager.d.ts.map +1 -1
  24. package/dist/core/SessionManager.js +30 -0
  25. package/dist/core/SessionManager.js.map +1 -1
  26. package/dist/core/componentCategories.d.ts +37 -0
  27. package/dist/core/componentCategories.d.ts.map +1 -0
  28. package/dist/core/componentCategories.js +84 -0
  29. package/dist/core/componentCategories.js.map +1 -0
  30. package/dist/core/intelligenceProviderFactory.d.ts +8 -0
  31. package/dist/core/intelligenceProviderFactory.d.ts.map +1 -1
  32. package/dist/core/intelligenceProviderFactory.js +3 -3
  33. package/dist/core/intelligenceProviderFactory.js.map +1 -1
  34. package/dist/core/types.d.ts +48 -0
  35. package/dist/core/types.d.ts.map +1 -1
  36. package/dist/core/types.js.map +1 -1
  37. package/dist/monitoring/ResourceLedger.d.ts +62 -0
  38. package/dist/monitoring/ResourceLedger.d.ts.map +1 -1
  39. package/dist/monitoring/ResourceLedger.js +152 -2
  40. package/dist/monitoring/ResourceLedger.js.map +1 -1
  41. package/dist/monitoring/ResourceSampler.d.ts +63 -0
  42. package/dist/monitoring/ResourceSampler.d.ts.map +1 -0
  43. package/dist/monitoring/ResourceSampler.js +277 -0
  44. package/dist/monitoring/ResourceSampler.js.map +1 -0
  45. package/dist/monitoring/SessionWatchdog.d.ts.map +1 -1
  46. package/dist/monitoring/SessionWatchdog.js +5 -0
  47. package/dist/monitoring/SessionWatchdog.js.map +1 -1
  48. package/dist/scaffold/templates.d.ts.map +1 -1
  49. package/dist/scaffold/templates.js +10 -4
  50. package/dist/scaffold/templates.js.map +1 -1
  51. package/dist/server/AgentServer.d.ts +1 -0
  52. package/dist/server/AgentServer.d.ts.map +1 -1
  53. package/dist/server/AgentServer.js +51 -5
  54. package/dist/server/AgentServer.js.map +1 -1
  55. package/dist/server/CapabilityIndex.d.ts.map +1 -1
  56. package/dist/server/CapabilityIndex.js +5 -2
  57. package/dist/server/CapabilityIndex.js.map +1 -1
  58. package/dist/server/routes.d.ts +2 -0
  59. package/dist/server/routes.d.ts.map +1 -1
  60. package/dist/server/routes.js +70 -0
  61. package/dist/server/routes.js.map +1 -1
  62. package/package.json +1 -1
  63. package/src/data/builtin-manifest.json +65 -65
  64. package/src/scaffold/templates.ts +10 -4
  65. package/upgrades/1.3.235.md +110 -0
  66. package/upgrades/1.3.236.md +53 -0
  67. package/upgrades/side-effects/esm-require-fixes-gate-rearm.md +110 -0
  68. package/upgrades/side-effects/per-component-framework-routing.md +88 -0
  69. package/upgrades/side-effects/resource-ledger.md +110 -0
@@ -10,6 +10,8 @@ import { createHash, timingSafeEqual, randomUUID } from 'node:crypto';
10
10
  import fs from 'node:fs';
11
11
  import os from 'node:os';
12
12
  import path from 'node:path';
13
+ import { IntelligenceRouter } from '../core/IntelligenceRouter.js';
14
+ import { knownComponents } from '../core/componentCategories.js';
13
15
  import { rateLimiter, signViewPath } from './middleware.js';
14
16
  import { writeLifelineRestartSignal } from '../core/version-skew.js';
15
17
  import { readSessionClocks } from '../core/SessionClockReader.js';
@@ -4025,6 +4027,74 @@ export function createRoutes(ctx) {
4025
4027
  events: ctx.resourceLedger.rateLimitEvents({ sinceMs: now - windowMs, limit: 200 }),
4026
4028
  });
4027
4029
  });
4030
+ // ── Per-agent ResourceLedger (Phase B: CPU + memory samples) ─────────
4031
+ // Read-only. Mirrors /tokens/summary: current + windowed CPU%/RSS per source
4032
+ // (agent-server, each session, aggregate) + the total sample count. 503 when
4033
+ // the ledger is unavailable (disabled / not initialized). Never gates.
4034
+ router.get('/resources/summary', (req, res) => {
4035
+ if (!ctx.resourceLedger) {
4036
+ res.status(503).json({ error: 'resource ledger unavailable (disabled or not initialized)' });
4037
+ return;
4038
+ }
4039
+ const sinceHours = req.query.sinceHours ? Number(req.query.sinceHours) : 1;
4040
+ const windowHours = sinceHours && sinceHours > 0 ? sinceHours : 1;
4041
+ const sinceMs = Date.now() - windowHours * 3_600_000;
4042
+ res.json({
4043
+ windowHours,
4044
+ sinceMs,
4045
+ sampleCount: ctx.resourceLedger.sampleCount(),
4046
+ sources: ctx.resourceLedger.summary(sinceMs),
4047
+ });
4048
+ });
4049
+ // Recent raw CPU/mem samples, newest first (paginated; ?limit= / ?source= /
4050
+ // ?sinceHours=). Read-only.
4051
+ router.get('/resources/samples', (req, res) => {
4052
+ if (!ctx.resourceLedger) {
4053
+ res.status(503).json({ error: 'resource ledger unavailable (disabled or not initialized)' });
4054
+ return;
4055
+ }
4056
+ const sinceHours = req.query.sinceHours ? Number(req.query.sinceHours) : 1;
4057
+ const windowHours = sinceHours && sinceHours > 0 ? sinceHours : 1;
4058
+ const sinceMs = Date.now() - windowHours * 3_600_000;
4059
+ let limit = 200;
4060
+ if (typeof req.query.limit === 'string' && /^\d+$/.test(req.query.limit)) {
4061
+ const n = Number(req.query.limit);
4062
+ if (n > 0 && n <= 2000)
4063
+ limit = n;
4064
+ }
4065
+ const source = typeof req.query.source === 'string' ? req.query.source : undefined;
4066
+ res.json({
4067
+ windowHours,
4068
+ sinceMs,
4069
+ limit,
4070
+ samples: ctx.resourceLedger.recentSamples({ sinceMs, limit, source }),
4071
+ });
4072
+ });
4073
+ // ── Per-component framework routing (docs/specs/per-component-framework-routing.md) ──
4074
+ // Read-only: what framework each known component resolves to right now (live config),
4075
+ // whether that framework is available, and the per-framework breaker isolation. 503
4076
+ // when no IntelligenceRouter is wired (e.g. no LLM CLI available).
4077
+ router.get('/intelligence/routing', (_req, res) => {
4078
+ const intel = ctx.intelligence;
4079
+ if (!intel || !(intel instanceof IntelligenceRouter)) {
4080
+ res.status(503).json({ error: 'intelligence router unavailable (no LLM provider configured)' });
4081
+ return;
4082
+ }
4083
+ // '__nonexistent__' is not in the registry, so it resolves to category 'other'
4084
+ // → the effective DEFAULT framework (what an unrouted call gets).
4085
+ const defaultFramework = intel.for('__nonexistent__').framework;
4086
+ const components = knownComponents().map((name) => intel.for(name));
4087
+ res.json({
4088
+ defaultFramework,
4089
+ components,
4090
+ coverage: {
4091
+ known: components.length,
4092
+ // how many known components are routed OFF the default framework right now
4093
+ routedOffDefault: components.filter((c) => c.framework !== defaultFramework).length,
4094
+ },
4095
+ note: 'Routes INTERNAL component LLM calls only; spawned interactive sessions use topicFrameworks.',
4096
+ });
4097
+ });
4028
4098
  // ── Release-readiness (Layer B of release-readiness-visibility) ──────
4029
4099
  // Null when there's no analyzable instar git repo or the feature is off.
4030
4100
  router.get('/release-readiness', (_req, res) => {