instar 1.3.622 → 1.3.623
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/subscriptions.js +46 -14
- package/dist/commands/server.d.ts.map +1 -1
- package/dist/commands/server.js +14 -1
- package/dist/commands/server.js.map +1 -1
- package/dist/core/FrameworkLoginDriver.d.ts.map +1 -1
- package/dist/core/FrameworkLoginDriver.js +36 -1
- package/dist/core/FrameworkLoginDriver.js.map +1 -1
- package/package.json +1 -1
- package/src/data/builtin-manifest.json +2 -2
- package/upgrades/1.3.623.md +21 -0
- package/upgrades/side-effects/ws52-code-t-fix.md +37 -0
- package/upgrades/side-effects/ws52-enroll-seams.md +4 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FrameworkLoginDriver.d.ts","sourceRoot":"","sources":["../../src/core/FrameworkLoginDriver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACxE,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAE3E,mDAAmD;AACnD,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,aAAa,CAAC;IACxB,SAAS,EAAE,aAAa,GAAG,WAAW,GAAG,YAAY,GAAG,QAAQ,CAAC;IACjE,IAAI,EAAE,aAAa,CAAC;IACpB,6EAA6E;IAC7E,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,uEAAuE;AACvE,MAAM,WAAW,wBAAwB;IACvC;;;OAGG;IACH,KAAK,EAAE,CAAC,GAAG,EAAE,qBAAqB,KAAK,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpE,gDAAgD;IAChD,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9C,sDAAsD;IACtD,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE;QAAE,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;QAAC,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;KAAE,CAAC;IACjE,iFAAiF;IACjF,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,0EAA0E;IAC1E,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AASD,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA2B;IAChD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgC;IACtD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;IACnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA0D;IACjF,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;gBAE5B,IAAI,EAAE,wBAAwB;IAS1C;;;;OAIG;IACH,MAAM,CAAC,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,aAAa,GAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"FrameworkLoginDriver.d.ts","sourceRoot":"","sources":["../../src/core/FrameworkLoginDriver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACxE,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAE3E,mDAAmD;AACnD,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,aAAa,CAAC;IACxB,SAAS,EAAE,aAAa,GAAG,WAAW,GAAG,YAAY,GAAG,QAAQ,CAAC;IACjE,IAAI,EAAE,aAAa,CAAC;IACpB,6EAA6E;IAC7E,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,uEAAuE;AACvE,MAAM,WAAW,wBAAwB;IACvC;;;OAGG;IACH,KAAK,EAAE,CAAC,GAAG,EAAE,qBAAqB,KAAK,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpE,gDAAgD;IAChD,OAAO,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC9C,sDAAsD;IACtD,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE;QAAE,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;QAAC,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;KAAE,CAAC;IACjE,iFAAiF;IACjF,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,0EAA0E;IAC1E,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AASD,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,IAAI,CAA2B;IAChD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAgC;IACtD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;IACnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA0D;IACjF,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAS;IACzC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAS;gBAE5B,IAAI,EAAE,wBAAwB;IAS1C;;;;OAIG;IACH,MAAM,CAAC,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,aAAa,GAAG,IAAI;IAwBjF;;;;;;;;;;OAUG;IACG,KAAK,CAAC,GAAG,EAAE;QACf,QAAQ,EAAE,aAAa,CAAC;QACxB,SAAS,EAAE,qBAAqB,CAAC,WAAW,CAAC,CAAC;QAC9C,IAAI,EAAE,aAAa,CAAC;QACpB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B,GAAG,OAAO,CAAC,aAAa,CAAC;IAgC1B,6DAA6D;IAC7D,aAAa,IAAI,WAAW;CAG7B"}
|
|
@@ -50,7 +50,14 @@ export class FrameworkLoginDriver {
|
|
|
50
50
|
static parseArtifact(paneText, kind) {
|
|
51
51
|
if (!paneText)
|
|
52
52
|
return null;
|
|
53
|
-
|
|
53
|
+
// A long verification URL HARD-WRAPS across tmux pane lines with no inserted
|
|
54
|
+
// space (e.g. "...authorize?code=t\nrue&client_id=...\nri=https%3A..."). A naive
|
|
55
|
+
// single-line URL_RE truncates at the first wrap (the 2026-06-18 "code=t" bug:
|
|
56
|
+
// the real URL was "...?code=true&client_id=..."). De-wrap first so the FULL URL
|
|
57
|
+
// is matched. (The capture is ALSO switched to `tmux capture-pane -J`; this is the
|
|
58
|
+
// pure, unit-tested defense so a wrapped capture still parses correctly.)
|
|
59
|
+
const dewrapped = dewrapWrappedUrls(paneText);
|
|
60
|
+
const urlMatch = dewrapped.match(URL_RE);
|
|
54
61
|
if (!urlMatch)
|
|
55
62
|
return null;
|
|
56
63
|
const verificationUrl = stripTrailingPunctuation(urlMatch[1]);
|
|
@@ -107,6 +114,34 @@ export class FrameworkLoginDriver {
|
|
|
107
114
|
function stripTrailingPunctuation(url) {
|
|
108
115
|
return url.replace(/[.,;:'")\]]+$/, '');
|
|
109
116
|
}
|
|
117
|
+
/**
|
|
118
|
+
* Re-join a verification URL that a terminal HARD-WRAPPED across pane lines. tmux
|
|
119
|
+
* wraps a long line at the pane width by inserting a newline with NO space — so a
|
|
120
|
+
* URL becomes "...?code=t\nrue&client_id=...\nri=...". We reassemble it: find the
|
|
121
|
+
* line bearing the first http(s) URL, then append each following line that is a pure
|
|
122
|
+
* URL-continuation fragment (non-empty and containing NO whitespace), stopping at the
|
|
123
|
+
* first blank line or a line with internal whitespace (real output, e.g. a prompt).
|
|
124
|
+
* Only that one URL region is joined; the rest of the text is left untouched so the
|
|
125
|
+
* code/TTL parses stay line-accurate. Idempotent on already-unwrapped text.
|
|
126
|
+
*/
|
|
127
|
+
function dewrapWrappedUrls(text) {
|
|
128
|
+
const lines = text.split('\n');
|
|
129
|
+
const i = lines.findIndex((l) => /https?:\/\//i.test(l));
|
|
130
|
+
if (i === -1)
|
|
131
|
+
return text;
|
|
132
|
+
let joined = lines[i].replace(/\s+$/, '');
|
|
133
|
+
let j = i + 1;
|
|
134
|
+
for (; j < lines.length; j++) {
|
|
135
|
+
const ln = lines[j];
|
|
136
|
+
if (ln.trim() === '')
|
|
137
|
+
break; // blank line ends the URL
|
|
138
|
+
if (/\s/.test(ln.trim()))
|
|
139
|
+
break; // internal whitespace ⇒ real output, not a wrap fragment
|
|
140
|
+
joined += ln.replace(/\s+$/, '');
|
|
141
|
+
}
|
|
142
|
+
// Rebuild: lines before the URL, the rejoined URL line, then the remaining lines.
|
|
143
|
+
return [...lines.slice(0, i), joined, ...lines.slice(j)].join('\n');
|
|
144
|
+
}
|
|
110
145
|
function parseTtlMs(text) {
|
|
111
146
|
const min = text.match(TTL_MIN_RE);
|
|
112
147
|
if (min)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FrameworkLoginDriver.js","sourceRoot":"","sources":["../../src/core/FrameworkLoginDriver.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAiCH,MAAM,MAAM,GAAG,6BAA6B,CAAC;AAC7C,qFAAqF;AACrF,MAAM,cAAc,GAAG,iCAAiC,CAAC;AACzD,yEAAyE;AACzE,MAAM,UAAU,GAAG,oEAAoE,CAAC;AACxF,MAAM,UAAU,GAAG,oEAAoE,CAAC;AAExF,MAAM,OAAO,oBAAoB;IACd,IAAI,CAA2B;IAC/B,KAAK,CAAgC;IACrC,GAAG,CAAe;IAClB,MAAM,CAA0D;IAChE,eAAe,CAAS;IACxB,cAAc,CAAS;IAExC,YAAY,IAA8B;QACxC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;QAC3E,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QAC1C,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,GAAE,CAAC,EAAE,CAAC;QAC/D,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,eAAe,IAAI,MAAM,CAAC;QACtD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,IAAI,KAAK,CAAC;IACrD,CAAC;IAED;;;;OAIG;IACH,MAAM,CAAC,aAAa,CAAC,QAAgB,EAAE,IAAmB;QACxD,IAAI,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAC;QAC3B,MAAM,
|
|
1
|
+
{"version":3,"file":"FrameworkLoginDriver.js","sourceRoot":"","sources":["../../src/core/FrameworkLoginDriver.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "./builtin-manifest.schema.json",
|
|
3
3
|
"schemaVersion": 1,
|
|
4
|
-
"generatedAt": "2026-06-
|
|
5
|
-
"instarVersion": "1.3.
|
|
4
|
+
"generatedAt": "2026-06-19T00:47:21.118Z",
|
|
5
|
+
"instarVersion": "1.3.623",
|
|
6
6
|
"entryCount": 201,
|
|
7
7
|
"entries": {
|
|
8
8
|
"hook:session-start": {
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# Upgrade Guide — vNEXT
|
|
2
|
+
|
|
3
|
+
<!-- assembled-by: assemble-next-md -->
|
|
4
|
+
<!-- bump: patch -->
|
|
5
|
+
|
|
6
|
+
## What Changed
|
|
7
|
+
|
|
8
|
+
Fixes the account-follow-me login link showing a placeholder (a URL ending in `code=t`) instead of a working Claude sign-in link. The long verification URL from `claude auth login` hard-wraps across tmux pane lines with no inserted space; the scrape that reads it stopped at the first wrap and kept only the head fragment. The login was always real — the scrape cut it short. Now `FrameworkLoginDriver.parseArtifact` re-joins wrapped URL fragments before matching, and the capture uses `tmux capture-pane -J` to join wraps at the source.
|
|
9
|
+
|
|
10
|
+
## What to Tell Your User
|
|
11
|
+
|
|
12
|
+
The "let another machine use this subscription" login link now comes through complete and usable, instead of a broken placeholder.
|
|
13
|
+
|
|
14
|
+
## Summary of New Capabilities
|
|
15
|
+
|
|
16
|
+
- No new capability — a correctness fix so the follow-me device-code login link is the full, usable URL.
|
|
17
|
+
|
|
18
|
+
## Evidence
|
|
19
|
+
|
|
20
|
+
- `tests/unit/framework-login-driver.test.ts` — NEW test re-joins the REAL captured (wrapped) Mac Mini login pane into the full URL and asserts it is NOT the `code=t` head fragment; 14 driver tests green.
|
|
21
|
+
- `tsc --noEmit` clean.
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Side-Effects Review — WS5.2: re-join line-wrapped verification URL (code=t fix)
|
|
2
|
+
|
|
3
|
+
**Version / slug:** `ws52-code-t-fix`
|
|
4
|
+
**Date:** `2026-06-18`
|
|
5
|
+
**Author:** `Echo (instar-dev agent)`
|
|
6
|
+
**Second-pass reviewer:** `not required (pure scrape-parse fix + a source-side capture flag; no decision/auth surface)`
|
|
7
|
+
|
|
8
|
+
## Summary
|
|
9
|
+
The follow-me device-code login link surfaced as a placeholder ending in `code=t`. Root cause: the long Claude OAuth URL from `claude auth login` hard-wraps across tmux pane lines with no inserted space (`...?code=t` then `rue&client_id=...`); `FrameworkLoginDriver`'s `URL_RE` stopped at the first wrap. Fix: `parseArtifact` re-joins wrapped URL fragments before matching (pure, unit-tested against the real captured pane); the injected `capture` now uses `tmux capture-pane -J` to join wraps at the source. Files: `src/core/FrameworkLoginDriver.ts`, `src/commands/server.ts`, `tests/unit/framework-login-driver.test.ts`.
|
|
10
|
+
|
|
11
|
+
## 1. Over-block / 2. Under-block
|
|
12
|
+
No block/allow surface. The de-wrap only affects which characters of a verification URL are captured. Under-block: a URL containing internal whitespace would not be a single wrapped token, but real URLs have none; the join stops at the first whitespace/blank line, so non-URL output is never absorbed.
|
|
13
|
+
|
|
14
|
+
## 3. Level-of-abstraction fit
|
|
15
|
+
Correct — the fix is in the pure scrape parser (where the bug is) + the source capture flag. No higher layer involved.
|
|
16
|
+
|
|
17
|
+
## 4. Signal vs authority compliance
|
|
18
|
+
No authority. Pure text parsing; reads only the PUBLIC verification URL (never a token). Strictly a correctness improvement.
|
|
19
|
+
|
|
20
|
+
## 5. Interactions
|
|
21
|
+
`parseArtifact` is also used for Codex device-code + already-unwrapped URLs — covered by existing + new idempotency tests (an unwrapped URL is unchanged). The `-J` capture is scoped to the enrollment login driver only; generic captures are untouched.
|
|
22
|
+
|
|
23
|
+
## 6. External surfaces
|
|
24
|
+
The operator now receives the full, usable login URL instead of a placeholder. No token exposure (unchanged). No new endpoint.
|
|
25
|
+
|
|
26
|
+
## 7. Multi-machine posture
|
|
27
|
+
Machine-local: each target machine scrapes its own login pane. No cross-machine state. Both machines get the fix via the normal deploy.
|
|
28
|
+
|
|
29
|
+
## 8. Rollback cost
|
|
30
|
+
Revert; ship a patch. Pure code, no persistent state.
|
|
31
|
+
|
|
32
|
+
## Conclusion
|
|
33
|
+
Small, pure, well-tested fix to the actual blocker that made the surfaced login link unusable. 14 driver tests green incl. the real wrapped-pane fixture; tsc clean.
|
|
34
|
+
|
|
35
|
+
## Follow-up — Pending-logins card UX redesign (operator feedback, 2026-06-18)
|
|
36
|
+
|
|
37
|
+
Justin: the Pending Logins card was "extremely hard to understand." Redesigned `renderPendingLogins` to be tap-simple: (1) a plain-language headline ("Sign in to finish setting up <account> on <machine>"); (2) the PRIMARY action is a single tappable "Sign in" link — but ONLY when the URL is https AND on a trusted provider host (claude.com/anthropic/openai/google); an untrusted or `javascript:` URL still renders as inert text with NO anchor (safety invariant preserved + unit-tested); (3) removed the confusing "re-issued N times" noise; (4) TTL shown as one short line. Tests updated: subscriptions-render (26), subscriptions-tab (5), subscriptions-tab-lifecycle e2e (2), pending-logins-pool-merge (3) — all green; the javascript:-URL-stays-inert safety test retained.
|
|
@@ -69,3 +69,7 @@ CI surfaced two real issues from seam #3, both fixed: (1) the `?scope=pool` bran
|
|
|
69
69
|
## Follow-up (CI hang fix, 2026-06-18)
|
|
70
70
|
|
|
71
71
|
CI shard 4/4 hung ~1h46m — root cause in this change: the seam #1 consumer's `setTimeout` (boot-sweep) + `setInterval` (60s tick) in AgentServer were NOT `.unref()`'d, so a test that boots AgentServer kept the event loop alive (vitest hangs on the open handle). Fixed: `.unref()` both timers (matches the sibling pollers), and added `AbortSignal.timeout` to the consumer's self-fetches (5s on the idempotency reads, 200s on the enroll-start drive) so a wedged fetch can't hold the loop either. tsc clean.
|
|
72
|
+
|
|
73
|
+
## Follow-up (the real "code=t" login bug, 2026-06-18)
|
|
74
|
+
|
|
75
|
+
Driving the proof to completion (Justin tapped Approve) exposed the actual remaining bug: the device-code login link surfaced as a placeholder ending in code=t. Root cause: the verification URL from `claude auth login` is long and HARD-WRAPS across tmux pane lines with no inserted space (`...?code=t` then `rue&client_id=...` on the next line); FrameworkLoginDriver's URL scrape stopped at the first wrap and kept only the head fragment. The login was always real; the SCRAPE cut it short. Fix: (1) `parseArtifact` now re-joins wrapped URL fragments before matching (pure + unit-tested against the REAL captured Mini pane); (2) the capture switched to `tmux capture-pane -J` (joins wraps at the source). 14 FrameworkLoginDriver tests green incl. the wrapped-URL fixture. This makes the surfaced login link actually usable.
|