instar 1.3.788 → 1.3.790
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 +17 -7
- package/dist/commands/server.d.ts.map +1 -1
- package/dist/commands/server.js +9 -1
- package/dist/commands/server.js.map +1 -1
- package/dist/core/SingleInstanceLock.d.ts +15 -0
- package/dist/core/SingleInstanceLock.d.ts.map +1 -1
- package/dist/core/SingleInstanceLock.js +38 -9
- package/dist/core/SingleInstanceLock.js.map +1 -1
- package/dist/core/types.d.ts +17 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js.map +1 -1
- package/package.json +1 -1
- package/src/data/builtin-manifest.json +2 -2
- package/upgrades/1.3.789.md +44 -0
- package/upgrades/1.3.790.md +41 -0
- package/upgrades/side-effects/dashboard-f5-f8.md +22 -0
- package/upgrades/side-effects/single-instance-lock-flap-heal.md +41 -0
package/dashboard/index.html
CHANGED
|
@@ -562,7 +562,17 @@
|
|
|
562
562
|
/* F3 — Dashboard UX Standard: every tab's plain-language purpose line.
|
|
563
563
|
One muted, readable sentence directly under the tab header telling a
|
|
564
564
|
non-expert what the tab is for and what they can do here. Enforced by
|
|
565
|
-
tests/unit/dashboard-tab-purpose.test.ts.
|
|
565
|
+
tests/unit/dashboard-tab-purpose.test.ts.
|
|
566
|
+
|
|
567
|
+
F7 — CANONICAL purpose-line class. `.tab-purpose` is the shared vocabulary
|
|
568
|
+
every NEW tab should use for its purpose line. Three legacy variants still
|
|
569
|
+
exist and carry their own deliberately-distinct sizing — `.ph-intro`
|
|
570
|
+
(Process-Health design-system intro, larger), `.features-subtitle`, and
|
|
571
|
+
`.dropzone-subtitle` — all recognized by the F3 floor test. Per the spec
|
|
572
|
+
(docs/specs/dashboard-ux-standard.md, FD-3) F7 is soft-first: consolidating
|
|
573
|
+
those three into `.tab-purpose` is a tracked migration (it changes their
|
|
574
|
+
visual size, so it is done deliberately, not big-bang). Until then: reach
|
|
575
|
+
for `.tab-purpose`; do not add a fifth variant or an inline-styled line. */
|
|
566
576
|
.tab-purpose {
|
|
567
577
|
font-size: 13px;
|
|
568
578
|
color: var(--text-dim);
|
|
@@ -2950,7 +2960,7 @@
|
|
|
2950
2960
|
</div>
|
|
2951
2961
|
<div class="file-content-panel" id="fileContentPanel">
|
|
2952
2962
|
<div class="file-content-header" id="fileContentHeader" style="display:none">
|
|
2953
|
-
<button class="files-back-btn" onclick="filesGoBack()">←</button>
|
|
2963
|
+
<button class="files-back-btn" onclick="filesGoBack()" title="Back" aria-label="Back">←</button>
|
|
2954
2964
|
<div class="breadcrumbs" id="fileBreadcrumbs"></div>
|
|
2955
2965
|
<div class="file-badges" id="fileBadges"></div>
|
|
2956
2966
|
</div>
|
|
@@ -3229,7 +3239,7 @@
|
|
|
3229
3239
|
Multi-spec project plans. Each project groups related pieces of work and only advances to its next round once its required checks pass.
|
|
3230
3240
|
</div>
|
|
3231
3241
|
<div id="projectsEmpty" style="padding:40px;text-align:center;color:var(--text-dim);display:none">
|
|
3232
|
-
No active projects.
|
|
3242
|
+
No active projects yet. Ask your agent to start one from a plan document, and it'll appear here.
|
|
3233
3243
|
</div>
|
|
3234
3244
|
<div id="projectsList" style="display:flex;flex-direction:column;gap:12px"></div>
|
|
3235
3245
|
</div>
|
|
@@ -3260,7 +3270,7 @@
|
|
|
3260
3270
|
</div>
|
|
3261
3271
|
<div id="initiativesDigest" style="display:none;padding:12px;border:1px solid var(--border);border-radius:6px;background:var(--bg-dim)"></div>
|
|
3262
3272
|
<div id="initiativesEmpty" style="padding:40px;text-align:center;color:var(--text-dim);display:none">
|
|
3263
|
-
No initiatives to
|
|
3273
|
+
No initiatives yet. Ask your agent to create one, and it'll appear here.
|
|
3264
3274
|
</div>
|
|
3265
3275
|
<div id="initiativesList" style="display:flex;flex-direction:column;gap:12px"></div>
|
|
3266
3276
|
</div>
|
|
@@ -3945,7 +3955,7 @@
|
|
|
3945
3955
|
<!-- WhatsApp QR panel (hidden by default) -->
|
|
3946
3956
|
<div class="wa-qr-backdrop" id="waQrBackdrop" style="display:none" onclick="closeQrPanel()"></div>
|
|
3947
3957
|
<div class="wa-qr-panel" id="waQrPanel" style="display:none">
|
|
3948
|
-
<button class="wa-close" onclick="closeQrPanel()">×</button>
|
|
3958
|
+
<button class="wa-close" onclick="closeQrPanel()" title="Close" aria-label="Close">×</button>
|
|
3949
3959
|
<h3>WhatsApp Connection</h3>
|
|
3950
3960
|
<p id="waQrMsg">Scan this QR code with WhatsApp to connect</p>
|
|
3951
3961
|
<div id="waQrContainer"></div>
|
|
@@ -7649,7 +7659,7 @@
|
|
|
7649
7659
|
|
|
7650
7660
|
detail.innerHTML = '<div class="job-detail-header">'
|
|
7651
7661
|
+ '<div>'
|
|
7652
|
-
+ '<button class="back-btn" onclick="jobsGoBack()" style="display:none;margin-right:8px">←</button>'
|
|
7662
|
+
+ '<button class="back-btn" onclick="jobsGoBack()" style="display:none;margin-right:8px" title="Back" aria-label="Back">←</button>'
|
|
7653
7663
|
+ '<h3>' + esc(displayName) + '</h3>'
|
|
7654
7664
|
+ '<div class="job-desc">' + esc(job.description || '') + '</div>'
|
|
7655
7665
|
+ '</div>'
|
|
@@ -9420,7 +9430,7 @@
|
|
|
9420
9430
|
try {
|
|
9421
9431
|
const data = await apiFetch(info.endpoint);
|
|
9422
9432
|
panel.innerHTML = '<div class="cap-content-panel">' +
|
|
9423
|
-
'<div class="cap-content-header"><span>' + esc(info.label) + '</span><button onclick="document.getElementById(\'capContentBrowser\').innerHTML=\'\'" style="border:none;background:none;color:var(--text-dim);cursor:pointer;font-size:14px">×</button></div>' +
|
|
9433
|
+
'<div class="cap-content-header"><span>' + esc(info.label) + '</span><button onclick="document.getElementById(\'capContentBrowser\').innerHTML=\'\'" style="border:none;background:none;color:var(--text-dim);cursor:pointer;font-size:14px" title="Close" aria-label="Close">×</button></div>' +
|
|
9424
9434
|
'<div class="cap-content-body">' + renderBrowsableContent(info.renderer, data) + '</div></div>';
|
|
9425
9435
|
} catch (e) {
|
|
9426
9436
|
panel.innerHTML = '<div style="padding:12px;color:var(--red);font-size:12px">Failed to load: ' + esc(e.message) + '</div>';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/commands/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAwDH,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAU3D,OAAO,EAAE,eAAe,EAAiC,MAAM,iCAAiC,CAAC;AAyBjG,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAGvD,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AA6H7D,OAAO,KAAK,EAAW,oBAAoB,EAAe,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACjG,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAgFtD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,gBAAgB,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAC1C,OAAO,CAUT;AAyID,UAAU,YAAY;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;2DACuD;IACvD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAgmDD;;;;;;;;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,CAonBN;AA2lBD,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":"AAAA;;;;;;;;GAQG;AAwDH,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAU3D,OAAO,EAAE,eAAe,EAAiC,MAAM,iCAAiC,CAAC;AAyBjG,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAGvD,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AA6H7D,OAAO,KAAK,EAAW,oBAAoB,EAAe,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACjG,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAgFtD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,gBAAgB,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAC1C,OAAO,CAUT;AAyID,UAAU,YAAY;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;2DACuD;IACvD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAgmDD;;;;;;;;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,CAonBN;AA2lBD,wBAAsB,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA8tmBtE;AAED,wBAAsB,UAAU,CAAC,OAAO,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAsDzE;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,aAAa,CAAC,OAAO,EAAE;IAAE,GAAG,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAuD5E"}
|
package/dist/commands/server.js
CHANGED
|
@@ -3304,7 +3304,15 @@ export async function startServer(options) {
|
|
|
3304
3304
|
// handler frees the lock within a bounded grace); only a genuine duplicate
|
|
3305
3305
|
// is refused. A standby on a DIFFERENT host with its own state dir boots
|
|
3306
3306
|
// freely. Override with INSTAR_ALLOW_SECOND_INSTANCE=1.
|
|
3307
|
-
const
|
|
3307
|
+
const silCfg = config.monitoring?.singleInstanceLock;
|
|
3308
|
+
const singleInstanceLock = new SingleInstanceLock({
|
|
3309
|
+
stateDir: config.stateDir,
|
|
3310
|
+
// Hostname-flap auto-heal (2026-07-08 wedge). Operator override wins; else
|
|
3311
|
+
// the dev-agent gate flips it LIVE on a development agent, DARK on the fleet
|
|
3312
|
+
// (mirrors resumeQueue.autoHealStaleHostLock). Fail-closed inside acquire().
|
|
3313
|
+
autoHealStaleHostRename: silCfg?.autoHealStaleHostRename ?? resolveDevAgentGate(undefined, config),
|
|
3314
|
+
staleHostRenameMs: silCfg?.staleHostRenameMs,
|
|
3315
|
+
});
|
|
3308
3316
|
const lockResult = await singleInstanceLock.acquire();
|
|
3309
3317
|
if (!lockResult.acquired) {
|
|
3310
3318
|
console.error(pc.red(`Refusing to start: another instance of this agent is already running ` +
|