instar 1.3.1295 → 1.3.1297

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 (46) hide show
  1. package/dashboard/index.html +0 -15
  2. package/dashboard/subscriptions.js +1 -97
  3. package/dist/commands/server.d.ts.map +1 -1
  4. package/dist/commands/server.js +1 -0
  5. package/dist/commands/server.js.map +1 -1
  6. package/dist/core/PostUpdateMigrator.d.ts +23 -0
  7. package/dist/core/PostUpdateMigrator.d.ts.map +1 -1
  8. package/dist/core/PostUpdateMigrator.js +85 -4
  9. package/dist/core/PostUpdateMigrator.js.map +1 -1
  10. package/dist/core/SessionManager.d.ts +17 -0
  11. package/dist/core/SessionManager.d.ts.map +1 -1
  12. package/dist/core/SessionManager.js +58 -2
  13. package/dist/core/SessionManager.js.map +1 -1
  14. package/dist/core/WorkEvidence.d.ts +1 -1
  15. package/dist/core/WorkEvidence.d.ts.map +1 -1
  16. package/dist/core/WorkEvidence.js +5 -0
  17. package/dist/core/WorkEvidence.js.map +1 -1
  18. package/dist/core/baselineProcessPatterns.d.ts +9 -0
  19. package/dist/core/baselineProcessPatterns.d.ts.map +1 -1
  20. package/dist/core/baselineProcessPatterns.js +9 -0
  21. package/dist/core/baselineProcessPatterns.js.map +1 -1
  22. package/dist/data/builtinSkillContent.d.ts +1 -1
  23. package/dist/data/builtinSkillContent.d.ts.map +1 -1
  24. package/dist/data/builtinSkillContent.js +1 -1
  25. package/dist/data/standards-guard-index.json +1 -1
  26. package/dist/data/standards-guard-index.meta.json +2 -2
  27. package/dist/data/standards-registry.meta.json +1 -1
  28. package/dist/monitoring/SessionReaper.d.ts +12 -0
  29. package/dist/monitoring/SessionReaper.d.ts.map +1 -1
  30. package/dist/monitoring/SessionReaper.js +47 -4
  31. package/dist/monitoring/SessionReaper.js.map +1 -1
  32. package/dist/scaffold/templates.d.ts +5 -0
  33. package/dist/scaffold/templates.d.ts.map +1 -1
  34. package/dist/scaffold/templates.js +8 -2
  35. package/dist/scaffold/templates.js.map +1 -1
  36. package/package.json +1 -1
  37. package/src/data/builtin-manifest.json +20 -20
  38. package/src/data/builtinSkillContent.ts +1 -1
  39. package/src/data/standards-guard-index.json +1 -1
  40. package/src/data/standards-guard-index.meta.json +2 -2
  41. package/src/data/standards-registry.meta.json +1 -1
  42. package/src/scaffold/templates.ts +10 -2
  43. package/upgrades/1.3.1296.md +64 -0
  44. package/upgrades/1.3.1297.md +55 -0
  45. package/upgrades/side-effects/reaper-idle-coordinator.md +261 -0
  46. package/upgrades/side-effects/remove-profile-provision-form.md +109 -0
@@ -3744,15 +3744,6 @@
3744
3744
  .sub-account-email { font-size:12px; opacity:.5; margin:0 0 10px; }
3745
3745
  .sub-account-noquota { font-size:12px; opacity:.6; }
3746
3746
  .sub-account-quota-age { font-size:11px; opacity:.5; margin-top:4px; }
3747
- .sub-profile-provision { border:1px solid var(--border,#2a2a2a); border-left:4px solid #16a34a;
3748
- border-radius:10px; padding:14px 16px; display:flex; flex-direction:column; gap:10px; }
3749
- .sub-profile-title { font-size:16px; font-weight:650; }
3750
- .sub-profile-copy { margin:0; font-size:13px; line-height:1.5; opacity:.78; }
3751
- .sub-profile-input { width:100%; box-sizing:border-box; min-height:44px; padding:10px 12px;
3752
- font-size:16px; border:1px solid var(--border,#2a2a2a); border-radius:8px; background:transparent; color:inherit; }
3753
- .sub-profile-create { min-height:44px; padding:10px 14px; font-size:14px; font-weight:600;
3754
- border-radius:8px; border:1px solid #16a34a; background:rgba(22,163,74,.12); color:inherit; cursor:pointer; }
3755
- .sub-profile-status { min-height:18px; font-size:12px; line-height:1.45; opacity:.8; }
3756
3747
  .sub-quota { margin:8px 0; }
3757
3748
  .sub-quota-head { display:flex; justify-content:space-between; font-size:12px; margin-bottom:4px; }
3758
3749
  .sub-quota-label { opacity:.8; }
@@ -3825,11 +3816,6 @@
3825
3816
  your subscriptions (ws52-operator-tap-not-text Part A). Leads the panel as the primary
3826
3817
  action when present; silent otherwise. -->
3827
3818
  <div id="subFollowMe"></div>
3828
- <section class="ph-section">
3829
- <h3 class="ph-h">Dedicated browser profiles</h3>
3830
- <p class="ph-h-sub">Prepare a private Chrome profile for one Google account. The agent handles the machine; you only respond to a secure password, verification, or approval link when the provider truly requires it.</p>
3831
- <div id="subProfileProvision"></div>
3832
- </section>
3833
3819
  <!-- Account × Machine matrix (account-machine-matrix) — at-a-glance "which account is set up
3834
3820
  on which machine," with a one-tap "Set up" per empty cell that runs the whole sign-in in
3835
3821
  the dashboard (PIN → sign-in link → paste the code). Hidden when there's nothing to show. -->
@@ -9866,7 +9852,6 @@
9866
9852
  accounts: document.getElementById('subAccounts'),
9867
9853
  followMe: document.getElementById('subFollowMe'),
9868
9854
  matrix: document.getElementById('subMatrix'),
9869
- profileProvision: document.getElementById('subProfileProvision'),
9870
9855
  };
9871
9856
  // Pass opts through (method/body/signal) so the controller can POST the follow-me
9872
9857
  // scan + the PIN-gated issue-for-machine, not just GET.
@@ -1092,53 +1092,8 @@ const URLS = {
1092
1092
  relogin: '/subscription-relogin?scope=pool',
1093
1093
  reloginAction: '/subscription-relogin',
1094
1094
  repairCell: '/subscription-relogin/repair-cell',
1095
- provisionProfile: '/playwright-profiles/provision',
1096
1095
  };
1097
1096
 
1098
- export function renderProfileProvisioner(doc, target) {
1099
- if (!target) return;
1100
- const card = el(doc, 'div', 'sub-profile-provision');
1101
- card.setAttribute('data-interaction-open', '1');
1102
- card.appendChild(el(doc, 'div', 'sub-profile-title', 'Create a dedicated sign-in profile'));
1103
- card.appendChild(el(doc, 'p', 'sub-profile-copy',
1104
- 'Instar prepares the private Chrome profile on this machine. If a password or verification step is needed, your agent will send a secure link — you never need to access this machine.'));
1105
-
1106
- const identity = el(doc, 'input', 'sub-profile-input');
1107
- identity.setAttribute('type', 'email');
1108
- identity.setAttribute('inputmode', 'email');
1109
- identity.setAttribute('autocomplete', 'email');
1110
- identity.setAttribute('placeholder', 'Google account email');
1111
- identity.setAttribute('aria-label', 'Google account email');
1112
- card.appendChild(identity);
1113
-
1114
- const profileId = el(doc, 'input', 'sub-profile-input');
1115
- profileId.setAttribute('type', 'text');
1116
- profileId.setAttribute('placeholder', 'Profile name, for example work-google');
1117
- profileId.setAttribute('aria-label', 'Profile name');
1118
- card.appendChild(profileId);
1119
-
1120
- const method = el(doc, 'select', 'sub-profile-input');
1121
- method.setAttribute('aria-label', 'Sign-in method');
1122
- for (const [value, label] of [
1123
- ['session-cookie', 'Already signed in / provider approval'],
1124
- ['password', 'Password'],
1125
- ['password+totp', 'Password + authenticator'],
1126
- ]) {
1127
- const option = el(doc, 'option', '', label);
1128
- option.setAttribute('value', value);
1129
- method.appendChild(option);
1130
- }
1131
- card.appendChild(method);
1132
-
1133
- const button = el(doc, 'button', 'sub-profile-create', 'Create dedicated profile');
1134
- button.setAttribute('type', 'button');
1135
- card.appendChild(button);
1136
- const status = el(doc, 'div', 'sub-profile-status', '');
1137
- status.setAttribute('aria-live', 'polite');
1138
- card.appendChild(status);
1139
- target.replaceChildren(card);
1140
- }
1141
-
1142
1097
  export function createController(opts) {
1143
1098
  const {
1144
1099
  doc,
@@ -1160,7 +1115,7 @@ export function createController(opts) {
1160
1115
  // add the D4 ceremony when the episode lands. recentOutcomes: client-observed terminal
1161
1116
  // outcomes rendered as explicit cards in the pending panel (D4 — never a vanishing line).
1162
1117
  const state = { timerId: null, active: false, inFlight: null, offers: [], approveWired: false,
1163
- reloginWired: false, reloginEpisodes: [], reloginFailures: [], profileProvisionWired: false,
1118
+ reloginWired: false, reloginEpisodes: [], reloginFailures: [],
1164
1119
  matrixWired: false, matrixTransient: {}, lastPoolBody: null, lastPendingBody: null,
1165
1120
  matrixEpisodes: {}, recentOutcomes: [] };
1166
1121
 
@@ -1225,61 +1180,10 @@ export function createController(opts) {
1225
1180
  state.reloginEpisodes = reloginBody && Array.isArray(reloginBody.episodes) ? reloginBody.episodes : [];
1226
1181
  state.reloginFailures = reloginBody && reloginBody.pool && Array.isArray(reloginBody.pool.failed)
1227
1182
  ? reloginBody.pool.failed : [];
1228
- if (els.profileProvision && !state.profileProvisionWired) {
1229
- renderProfileProvisioner(doc, els.profileProvision);
1230
- wireProfileProvisioner();
1231
- }
1232
1183
  render(accountsBody, pendingBody, inUseBody, poolBody);
1233
1184
  reschedule();
1234
1185
  }
1235
1186
 
1236
- function wireProfileProvisioner() {
1237
- if (!els.profileProvision || state.profileProvisionWired) return;
1238
- state.profileProvisionWired = true;
1239
- els.profileProvision.addEventListener('click', (event) => {
1240
- const button = event.target && event.target.closest ? event.target.closest('.sub-profile-create') : null;
1241
- if (!button) return;
1242
- const proof = getOperatorSessionToken();
1243
- const identity = els.profileProvision.querySelector('[aria-label="Google account email"]')?.value?.trim() || '';
1244
- const profileId = els.profileProvision.querySelector('[aria-label="Profile name"]')?.value?.trim() || '';
1245
- const loginMethod = els.profileProvision.querySelector('[aria-label="Sign-in method"]')?.value || 'session-cookie';
1246
- const status = els.profileProvision.querySelector('.sub-profile-status');
1247
- if (!proof) {
1248
- requestUnlock();
1249
- status.textContent = 'Enter your dashboard PIN, then retry.';
1250
- return;
1251
- }
1252
- if (!identity || !profileId) { status.textContent = 'Enter the Google account and a profile name.'; return; }
1253
- button.setAttribute('disabled', 'disabled');
1254
- status.textContent = 'Preparing the private profile…';
1255
- void (async () => {
1256
- try {
1257
- const response = await fetchImpl(URLS.provisionProfile, {
1258
- method: 'POST',
1259
- headers: { 'Content-Type': 'application/json', 'X-Instar-Operator-Session': proof },
1260
- body: JSON.stringify({ profileId, identity, loginMethod }),
1261
- });
1262
- const body = await response.json().catch(() => ({}));
1263
- if (!response.ok) {
1264
- if (response.status === 401) requestUnlock();
1265
- status.textContent = response.status === 401
1266
- ? 'Enter your dashboard PIN, then retry.'
1267
- : `Couldn’t create the profile: ${body.error || 'try again'}`;
1268
- button.removeAttribute('disabled');
1269
- return;
1270
- }
1271
- status.textContent = loginMethod === 'session-cookie'
1272
- ? 'Profile ready. Your agent can now open the provider sign-in and send you any required approval link.'
1273
- : 'Profile ready. Your agent will send a secure credential link before the first sign-in.';
1274
- button.textContent = 'Profile created';
1275
- } catch {
1276
- status.textContent = 'Couldn’t reach the server — try again.';
1277
- button.removeAttribute('disabled');
1278
- }
1279
- })();
1280
- });
1281
- }
1282
-
1283
1187
  // ── Episode + outcome bookkeeping (D1/D4/D5) ───────────────────────────────
1284
1188
  function purgeTransients() {
1285
1189
  const t = now();
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/commands/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/commands/server.ts"],"names":[],"mappings":"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"}
@@ -18922,6 +18922,7 @@ export async function startServer(options) {
18922
18922
  const sessionReaper = new SessionReaper({
18923
18923
  ...reapGuardDeps,
18924
18924
  dirtyCheck: _yieldSafetyDirtyCheck,
18925
+ hasLiveToolShell: (s) => sessionManager.hasLiveToolShell(s),
18925
18926
  listRunningSessions: () => sessionManager.listRunningSessions(),
18926
18927
  captureOutput: (s, n) => sessionManager.captureOutput(s, n) ?? '',
18927
18928
  frameworkForSession: (s) => sessionManager.frameworkForSession(s),