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.
- package/dashboard/index.html +0 -15
- package/dashboard/subscriptions.js +1 -97
- package/dist/commands/server.d.ts.map +1 -1
- package/dist/commands/server.js +1 -0
- package/dist/commands/server.js.map +1 -1
- package/dist/core/PostUpdateMigrator.d.ts +23 -0
- package/dist/core/PostUpdateMigrator.d.ts.map +1 -1
- package/dist/core/PostUpdateMigrator.js +85 -4
- package/dist/core/PostUpdateMigrator.js.map +1 -1
- package/dist/core/SessionManager.d.ts +17 -0
- package/dist/core/SessionManager.d.ts.map +1 -1
- package/dist/core/SessionManager.js +58 -2
- package/dist/core/SessionManager.js.map +1 -1
- package/dist/core/WorkEvidence.d.ts +1 -1
- package/dist/core/WorkEvidence.d.ts.map +1 -1
- package/dist/core/WorkEvidence.js +5 -0
- package/dist/core/WorkEvidence.js.map +1 -1
- package/dist/core/baselineProcessPatterns.d.ts +9 -0
- package/dist/core/baselineProcessPatterns.d.ts.map +1 -1
- package/dist/core/baselineProcessPatterns.js +9 -0
- package/dist/core/baselineProcessPatterns.js.map +1 -1
- package/dist/data/builtinSkillContent.d.ts +1 -1
- package/dist/data/builtinSkillContent.d.ts.map +1 -1
- package/dist/data/builtinSkillContent.js +1 -1
- package/dist/data/standards-guard-index.json +1 -1
- package/dist/data/standards-guard-index.meta.json +2 -2
- package/dist/data/standards-registry.meta.json +1 -1
- package/dist/monitoring/SessionReaper.d.ts +12 -0
- package/dist/monitoring/SessionReaper.d.ts.map +1 -1
- package/dist/monitoring/SessionReaper.js +47 -4
- package/dist/monitoring/SessionReaper.js.map +1 -1
- package/dist/scaffold/templates.d.ts +5 -0
- package/dist/scaffold/templates.d.ts.map +1 -1
- package/dist/scaffold/templates.js +8 -2
- package/dist/scaffold/templates.js.map +1 -1
- package/package.json +1 -1
- package/src/data/builtin-manifest.json +20 -20
- package/src/data/builtinSkillContent.ts +1 -1
- package/src/data/standards-guard-index.json +1 -1
- package/src/data/standards-guard-index.meta.json +2 -2
- package/src/data/standards-registry.meta.json +1 -1
- package/src/scaffold/templates.ts +10 -2
- package/upgrades/1.3.1296.md +64 -0
- package/upgrades/1.3.1297.md +55 -0
- package/upgrades/side-effects/reaper-idle-coordinator.md +261 -0
- package/upgrades/side-effects/remove-profile-provision-form.md +109 -0
package/dashboard/index.html
CHANGED
|
@@ -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: [],
|
|
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":"AAsGA,OAAO,EAAE,cAAc,EAAwD,MAAM,2BAA2B,CAAC;AAUjH,OAAO,EAAE,eAAe,EAAiC,MAAM,iCAAiC,CAAC;AA4BjG,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAGvD,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAmI7D,OAAO,KAAK,EAAW,oBAAoB,EAAe,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACjG,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAkFtD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,gBAAgB,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAC1C,OAAO,CAUT;AA0ID,UAAU,YAAY;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;2DACuD;IACvD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAoDD,+EAA+E;AAC/E,wBAAgB,qCAAqC,CACnD,SAAS,EAAE,IAAI,CAAC,OAAO,2BAA2B,EAAE,cAAc,EAAE,QAAQ,CAAC,GAAG,IAAI,EACpF,OAAO,EAAE,MAAM,GACd,IAAI,CAEN;AAsrDD;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,YAAY,EACpB,YAAY,EAAE,oBAAoB,GAAG,IAAI,GACxC;IACD,YAAY,EAAE,oBAAoB,GAAG,IAAI,CAAC;IAC1C,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAAC;IAC3C,QAAQ,EAAE,MAAM,CAAC;CAClB,CAqBA;AAED,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,eAAe,EACzB,cAAc,EAAE,cAAc,EAC9B,YAAY,CAAC,EAAE,YAAY,EAC3B,WAAW,CAAC,EAAE,WAAW,EACzB,WAAW,CAAC,EAAE,WAAW,EACzB,iBAAiB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,EAGvE,UAAU,CAAC,EAAE,MAAM,OAAO,8BAA8B,EAAE,WAAW,GAAG,IAAI,EAK5E,qBAAqB,CAAC,EAAE,MAAM,OAAO,gCAAgC,EAAE,kBAAkB,GAAG,IAAI,EAKhG,mBAAmB,CAAC,EAAE,MAAM,MAAM,GAAG,IAAI,GAAG,SAAS,EAQrD,oBAAoB,CAAC,EAAE,MAAM;IAC3B,YAAY,EAAE,OAAO,kBAAkB,EAAE,oBAAoB,GAAG,IAAI,CAAC;IACrE,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAAC;IAC3C,QAAQ,EAAE,MAAM,CAAC;CAClB,GAAG,IAAI,GACP,IAAI,CA8yBN;AAgmBD,wBAAsB,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/commands/server.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/server.js
CHANGED
|
@@ -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),
|