instar 1.3.1619 → 1.3.1621

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 (100) hide show
  1. package/dist/commands/server.d.ts +6 -0
  2. package/dist/commands/server.d.ts.map +1 -1
  3. package/dist/commands/server.js +115 -9
  4. package/dist/commands/server.js.map +1 -1
  5. package/dist/core/PostUpdateMigrator.d.ts +6 -0
  6. package/dist/core/PostUpdateMigrator.d.ts.map +1 -1
  7. package/dist/core/PostUpdateMigrator.js +24 -0
  8. package/dist/core/PostUpdateMigrator.js.map +1 -1
  9. package/dist/core/TopicProfileOrchestrator.d.ts +4 -0
  10. package/dist/core/TopicProfileOrchestrator.d.ts.map +1 -1
  11. package/dist/core/TopicProfileOrchestrator.js +14 -1
  12. package/dist/core/TopicProfileOrchestrator.js.map +1 -1
  13. package/dist/core/TopicSpawnBriefStore.d.ts +48 -0
  14. package/dist/core/TopicSpawnBriefStore.d.ts.map +1 -0
  15. package/dist/core/TopicSpawnBriefStore.js +107 -0
  16. package/dist/core/TopicSpawnBriefStore.js.map +1 -0
  17. package/dist/core/componentCategories.d.ts.map +1 -1
  18. package/dist/core/componentCategories.js +1 -0
  19. package/dist/core/componentCategories.js.map +1 -1
  20. package/dist/core/devGatedFeatures.js +1 -1
  21. package/dist/core/devGatedFeatures.js.map +1 -1
  22. package/dist/data/llmBenchCoverage.d.ts.map +1 -1
  23. package/dist/data/llmBenchCoverage.js +5 -0
  24. package/dist/data/llmBenchCoverage.js.map +1 -1
  25. package/dist/data/provenanceCoverage.d.ts +2 -0
  26. package/dist/data/provenanceCoverage.d.ts.map +1 -1
  27. package/dist/data/provenanceCoverage.js +15 -0
  28. package/dist/data/provenanceCoverage.js.map +1 -1
  29. package/dist/data/standards-guard-index.json +1 -1
  30. package/dist/data/standards-guard-index.meta.json +2 -2
  31. package/dist/data/standards-registry.meta.json +1 -1
  32. package/dist/monitoring/MachineWedgeJudge.d.ts +28 -0
  33. package/dist/monitoring/MachineWedgeJudge.d.ts.map +1 -0
  34. package/dist/monitoring/MachineWedgeJudge.js +114 -0
  35. package/dist/monitoring/MachineWedgeJudge.js.map +1 -0
  36. package/dist/monitoring/MachineWedgeNotice.d.ts +38 -0
  37. package/dist/monitoring/MachineWedgeNotice.d.ts.map +1 -0
  38. package/dist/monitoring/MachineWedgeNotice.js +71 -0
  39. package/dist/monitoring/MachineWedgeNotice.js.map +1 -0
  40. package/dist/monitoring/guardManifest.d.ts.map +1 -1
  41. package/dist/monitoring/guardManifest.js +1 -0
  42. package/dist/monitoring/guardManifest.js.map +1 -1
  43. package/dist/monitoring/machineMaintenance/DrainRehearsal.d.ts +6 -0
  44. package/dist/monitoring/machineMaintenance/DrainRehearsal.d.ts.map +1 -1
  45. package/dist/monitoring/machineMaintenance/DrainRehearsal.js +7 -2
  46. package/dist/monitoring/machineMaintenance/DrainRehearsal.js.map +1 -1
  47. package/dist/monitoring/machineMaintenance/HostMaintenanceStore.d.ts +36 -0
  48. package/dist/monitoring/machineMaintenance/HostMaintenanceStore.d.ts.map +1 -1
  49. package/dist/monitoring/machineMaintenance/HostMaintenanceStore.js +54 -0
  50. package/dist/monitoring/machineMaintenance/HostMaintenanceStore.js.map +1 -1
  51. package/dist/monitoring/machineMaintenance/WedgeMonitor.d.ts +191 -0
  52. package/dist/monitoring/machineMaintenance/WedgeMonitor.d.ts.map +1 -0
  53. package/dist/monitoring/machineMaintenance/WedgeMonitor.js +489 -0
  54. package/dist/monitoring/machineMaintenance/WedgeMonitor.js.map +1 -0
  55. package/dist/monitoring/machineMaintenance/readings.d.ts +46 -0
  56. package/dist/monitoring/machineMaintenance/readings.d.ts.map +1 -1
  57. package/dist/monitoring/machineMaintenance/readings.js +71 -8
  58. package/dist/monitoring/machineMaintenance/readings.js.map +1 -1
  59. package/dist/monitoring/machineMaintenance/wedgeEvidence.d.ts +73 -0
  60. package/dist/monitoring/machineMaintenance/wedgeEvidence.d.ts.map +1 -0
  61. package/dist/monitoring/machineMaintenance/wedgeEvidence.js +111 -0
  62. package/dist/monitoring/machineMaintenance/wedgeEvidence.js.map +1 -0
  63. package/dist/monitoring/machineMaintenance/wedgeWindow.d.ts +94 -0
  64. package/dist/monitoring/machineMaintenance/wedgeWindow.d.ts.map +1 -0
  65. package/dist/monitoring/machineMaintenance/wedgeWindow.js +126 -0
  66. package/dist/monitoring/machineMaintenance/wedgeWindow.js.map +1 -0
  67. package/dist/monitoring/selfaction/policies.d.ts.map +1 -1
  68. package/dist/monitoring/selfaction/policies.js +15 -0
  69. package/dist/monitoring/selfaction/policies.js.map +1 -1
  70. package/dist/native/instar-desktop-host +0 -0
  71. package/dist/scaffold/templates.d.ts.map +1 -1
  72. package/dist/scaffold/templates.js +2 -1
  73. package/dist/scaffold/templates.js.map +1 -1
  74. package/dist/server/CapabilityIndex.js +1 -1
  75. package/dist/server/CapabilityIndex.js.map +1 -1
  76. package/dist/server/routes.d.ts +3 -0
  77. package/dist/server/routes.d.ts.map +1 -1
  78. package/dist/server/routes.js +56 -12
  79. package/dist/server/routes.js.map +1 -1
  80. package/dist/server/sessionSpawnTopicBinding.d.ts +26 -0
  81. package/dist/server/sessionSpawnTopicBinding.d.ts.map +1 -1
  82. package/dist/server/sessionSpawnTopicBinding.js +50 -0
  83. package/dist/server/sessionSpawnTopicBinding.js.map +1 -1
  84. package/dist/testing/selfActionRegistry.d.ts.map +1 -1
  85. package/dist/testing/selfActionRegistry.js +63 -0
  86. package/dist/testing/selfActionRegistry.js.map +1 -1
  87. package/package.json +1 -1
  88. package/src/data/builtin-manifest.json +63 -63
  89. package/src/data/llmBenchCoverage.ts +7 -0
  90. package/src/data/provenanceCoverage.ts +18 -0
  91. package/src/data/standards-guard-index.json +1 -1
  92. package/src/data/standards-guard-index.meta.json +2 -2
  93. package/src/data/standards-registry.meta.json +1 -1
  94. package/src/scaffold/templates.ts +2 -1
  95. package/upgrades/1.3.1620.md +26 -0
  96. package/upgrades/1.3.1621.md +27 -0
  97. package/upgrades/eli16/profile-restart-keeps-spawn-brief.md +24 -0
  98. package/upgrades/side-effects/machine-wedge-dryrun.eli16.md +15 -0
  99. package/upgrades/side-effects/machine-wedge-dryrun.md +146 -0
  100. package/upgrades/side-effects/profile-restart-keeps-spawn-brief.md +91 -0
@@ -7,6 +7,7 @@ import { getActiveWorkAdmission } from '../core/workAdmission.js';
7
7
  import { getActiveOverloadShedPlanner } from '../core/OverloadShedPlanner.js';
8
8
  import { getActiveDrainRehearsal } from '../monitoring/machineMaintenance/DrainRehearsal.js';
9
9
  import { getActiveBrowserCare } from '../monitoring/machineMaintenance/BrowserCare.js';
10
+ import { getActiveWedgeMonitor } from '../monitoring/machineMaintenance/WedgeMonitor.js';
10
11
  import { getActiveMachineLockStateReader } from '../core/MachineLockStateReader.js';
11
12
  import { fetchMaintenancePool, mergeMaintenancePool, } from './machineMaintenancePool.js';
12
13
  import { getActiveSessionPriorityLowerer } from '../core/sessionPriority.js';
@@ -194,7 +195,7 @@ import { GUARD_MANIFEST } from '../monitoring/guardManifest.js';
194
195
  import { GuardRegistry } from '../monitoring/GuardRegistry.js';
195
196
  import { isPeerUrlAllowedForCredentials } from './peerUrlGuard.js';
196
197
  import { poolPeerFetch } from './poolPeerFetch.js';
197
- import { persistDiskTopicSessionBinding, resolveSessionSpawnTopicBinding } from './sessionSpawnTopicBinding.js';
198
+ import { persistDiskTopicSessionBinding, resolveSessionSpawnTopicBinding, resolveTopicSpawnProfile } from './sessionSpawnTopicBinding.js';
198
199
  import { classifyMachineEmptyState } from './poolEmptyState.js';
199
200
  import { formatLivenessLine } from '../core/machineLiveness.js';
200
201
  import { decorateWithRopeCondition } from './poolRopeCondition.js';
@@ -10859,10 +10860,30 @@ export function createRoutes(ctx) {
10859
10860
  res.status(400).json({ error: '"ultracode" must be a boolean' });
10860
10861
  return;
10861
10862
  }
10863
+ const topicBindingResult = resolveSessionSpawnTopicBinding({ name, topicId, topicName, requireTopicBinding, spawnRole });
10864
+ if (!topicBindingResult.ok) {
10865
+ res.status(400).json({ error: topicBindingResult.error });
10866
+ return;
10867
+ }
10868
+ const parsedTopicId = topicBindingResult.binding.topicId;
10869
+ const cleanTopicName = topicBindingResult.binding.topicName;
10870
+ // A topic-bound spawn honours the topic's profile AT SPAWN TIME (the same
10871
+ // single resolution point spawnSessionForTopic uses) for every axis the
10872
+ // request leaves unset, then records what it launched with. Before this,
10873
+ // the route ignored the profile and recorded nothing, so the profile
10874
+ // orchestrator later restarted the fresh session to "apply" the pin — and
10875
+ // the restart rebuilt context from chat history, which never held this
10876
+ // prompt, so the task was lost.
10877
+ const topicSpawnProfile = resolveTopicSpawnProfile({
10878
+ resolver: parsedTopicId !== undefined ? ctx.topicProfile?.resolver : undefined,
10879
+ topicId: parsedTopicId,
10880
+ requestedFramework: framework,
10881
+ requestedModel: model,
10882
+ });
10862
10883
  // Match SessionManager's omitted-framework resolution. A Codex-default
10863
10884
  // agent must not pass this guard merely because the request omitted the
10864
10885
  // explicit framework and then receive a cosmetic keyword on a Codex turn.
10865
- const effectiveSpawnFramework = framework
10886
+ const effectiveSpawnFramework = topicSpawnProfile.framework
10866
10887
  ?? ctx.config.sessions?.framework
10867
10888
  ?? ctx.config.enabledFrameworks?.[0]
10868
10889
  ?? 'claude-code';
@@ -10870,13 +10891,6 @@ export function createRoutes(ctx) {
10870
10891
  res.status(400).json({ error: '"ultracode" is supported only for framework "claude-code"' });
10871
10892
  return;
10872
10893
  }
10873
- const topicBindingResult = resolveSessionSpawnTopicBinding({ name, topicId, topicName, requireTopicBinding, spawnRole });
10874
- if (!topicBindingResult.ok) {
10875
- res.status(400).json({ error: topicBindingResult.error });
10876
- return;
10877
- }
10878
- const parsedTopicId = topicBindingResult.binding.topicId;
10879
- const cleanTopicName = topicBindingResult.binding.topicName;
10880
10894
  const persistTopicBinding = (boundTopicId, tmuxSession) => {
10881
10895
  if (ctx.telegram?.registerTopicSession) {
10882
10896
  ctx.telegram.registerTopicSession(boundTopicId, tmuxSession, cleanTopicName);
@@ -10890,9 +10904,38 @@ export function createRoutes(ctx) {
10890
10904
  });
10891
10905
  };
10892
10906
  try {
10893
- const session = await ctx.sessionManager.spawnSession({ name, prompt, model, jobSlug, framework, ultracode, topicId: parsedTopicId });
10907
+ const session = await ctx.sessionManager.spawnSession({
10908
+ name,
10909
+ prompt,
10910
+ model: topicSpawnProfile.model,
10911
+ jobSlug,
10912
+ framework: topicSpawnProfile.framework,
10913
+ ultracode,
10914
+ topicId: parsedTopicId,
10915
+ });
10894
10916
  if (parsedTopicId !== undefined) {
10895
10917
  persistTopicBinding(parsedTopicId, session.tmuxSession);
10918
+ try {
10919
+ ctx.topicProfile?.spawnBriefs?.record(parsedTopicId, session.tmuxSession, prompt);
10920
+ }
10921
+ catch (err) {
10922
+ // @silent-fallback-ok: the brief only feeds a later profile respawn's
10923
+ // continuation; the spawn itself already succeeded.
10924
+ console.warn(`[sessions/spawn] could not record spawn brief for topic ${parsedTopicId}: ${err instanceof Error ? err.message : String(err)}`);
10925
+ }
10926
+ if (topicSpawnProfile.applied) {
10927
+ try {
10928
+ ctx.topicProfile?.orchestrator?.recordSpawnSuccess(parsedTopicId, {
10929
+ ...topicSpawnProfile.applied,
10930
+ framework: (session.framework ?? topicSpawnProfile.applied.framework),
10931
+ });
10932
+ }
10933
+ catch (err) {
10934
+ // @silent-fallback-ok: without the record the boot sweep leaves the
10935
+ // session alone (unknown launch profile is not divergence).
10936
+ console.warn(`[sessions/spawn] could not record launched profile for topic ${parsedTopicId}: ${err instanceof Error ? err.message : String(err)}`);
10937
+ }
10938
+ }
10896
10939
  }
10897
10940
  res.status(201).json({
10898
10941
  ...session,
@@ -12924,7 +12967,7 @@ export function createRoutes(ctx) {
12924
12967
  res.json(await maintenancePoolView('status', async () => {
12925
12968
  const local = getActiveDrainRehearsal();
12926
12969
  return local
12927
- ? { body: { ...local.status(), browserCare: getActiveBrowserCare()?.status() ?? null } }
12970
+ ? { body: { ...local.status(), browserCare: getActiveBrowserCare()?.status() ?? null, wedge: getActiveWedgeMonitor()?.status() ?? null } }
12928
12971
  : { reason: 'not-enabled' };
12929
12972
  }));
12930
12973
  return;
@@ -12935,7 +12978,8 @@ export function createRoutes(ctx) {
12935
12978
  return;
12936
12979
  }
12937
12980
  // Browser care (Part B) rides the same status, watch-only: null where it does not run (off macOS).
12938
- res.json({ ...r.status(), browserCare: getActiveBrowserCare()?.status() ?? null });
12981
+ // Wedge detection (Part E) rides it too, dry-run: null where the sampler is not wired, never a guessed value.
12982
+ res.json({ ...r.status(), browserCare: getActiveBrowserCare()?.status() ?? null, wedge: getActiveWedgeMonitor()?.status() ?? null });
12939
12983
  });
12940
12984
  // Honest lock reading (Part A): the verdict from the spec's table with every input beside
12941
12985
  // it. `unknown` means unknown, never locked. Reads the session on demand (cached 5 s).