forkit-connect 0.1.15 → 0.1.17
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/dist/launcher.js +215 -51
- package/package.json +1 -1
package/dist/launcher.js
CHANGED
|
@@ -1318,7 +1318,7 @@ function renderLauncherHtml(launcherToken) {
|
|
|
1318
1318
|
<head>
|
|
1319
1319
|
<meta charset="UTF-8" />
|
|
1320
1320
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
1321
|
-
<title>Forkit Connect
|
|
1321
|
+
<title>Forkit Connect Status</title>
|
|
1322
1322
|
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
1323
1323
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
1324
1324
|
<link href="https://fonts.googleapis.com/css2?family=Sora:wght@400;500;600;700&family=IBM+Plex+Sans:wght@400;500;600&display=swap" rel="stylesheet">
|
|
@@ -1889,13 +1889,13 @@ function renderLauncherHtml(launcherToken) {
|
|
|
1889
1889
|
color: #f7efe4;
|
|
1890
1890
|
}
|
|
1891
1891
|
|
|
1892
|
-
.
|
|
1892
|
+
.review-summary-grid {
|
|
1893
1893
|
display: grid;
|
|
1894
1894
|
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
1895
1895
|
gap: 10px;
|
|
1896
1896
|
}
|
|
1897
1897
|
|
|
1898
|
-
.
|
|
1898
|
+
.review-summary-pill {
|
|
1899
1899
|
display: grid;
|
|
1900
1900
|
gap: 4px;
|
|
1901
1901
|
padding: 11px 12px;
|
|
@@ -1904,7 +1904,7 @@ function renderLauncherHtml(launcherToken) {
|
|
|
1904
1904
|
background: rgba(255,255,255,0.045);
|
|
1905
1905
|
}
|
|
1906
1906
|
|
|
1907
|
-
.
|
|
1907
|
+
.review-summary-label {
|
|
1908
1908
|
font-size: 0.68rem;
|
|
1909
1909
|
text-transform: uppercase;
|
|
1910
1910
|
letter-spacing: 0.12em;
|
|
@@ -1912,13 +1912,50 @@ function renderLauncherHtml(launcherToken) {
|
|
|
1912
1912
|
color: rgba(241, 235, 223, 0.55);
|
|
1913
1913
|
}
|
|
1914
1914
|
|
|
1915
|
-
.
|
|
1915
|
+
.review-summary-value {
|
|
1916
1916
|
font-size: 0.86rem;
|
|
1917
1917
|
line-height: 1.35;
|
|
1918
1918
|
color: #fff7ea;
|
|
1919
1919
|
font-weight: 600;
|
|
1920
1920
|
}
|
|
1921
1921
|
|
|
1922
|
+
.review-recommendation-card {
|
|
1923
|
+
display: grid;
|
|
1924
|
+
gap: 6px;
|
|
1925
|
+
padding: 14px 15px;
|
|
1926
|
+
border-radius: 18px;
|
|
1927
|
+
border: 1px solid rgba(157, 238, 245, 0.14);
|
|
1928
|
+
background:
|
|
1929
|
+
linear-gradient(180deg, rgba(39, 51, 69, 0.52), rgba(22, 18, 47, 0.72)),
|
|
1930
|
+
radial-gradient(circle at top right, rgba(244, 147, 85, 0.12), transparent 52%);
|
|
1931
|
+
box-shadow: inset 0 1px 0 rgba(255,255,255,0.06);
|
|
1932
|
+
}
|
|
1933
|
+
|
|
1934
|
+
.review-recommendation-kicker {
|
|
1935
|
+
margin: 0;
|
|
1936
|
+
font-size: 0.68rem;
|
|
1937
|
+
text-transform: uppercase;
|
|
1938
|
+
letter-spacing: 0.13em;
|
|
1939
|
+
font-weight: 700;
|
|
1940
|
+
color: rgba(157, 238, 245, 0.82);
|
|
1941
|
+
}
|
|
1942
|
+
|
|
1943
|
+
.review-recommendation-title {
|
|
1944
|
+
margin: 0;
|
|
1945
|
+
font-family: "Sora", sans-serif;
|
|
1946
|
+
font-size: 1rem;
|
|
1947
|
+
line-height: 1.2;
|
|
1948
|
+
color: #fff8ef;
|
|
1949
|
+
font-weight: 700;
|
|
1950
|
+
}
|
|
1951
|
+
|
|
1952
|
+
.review-recommendation-detail {
|
|
1953
|
+
margin: 0;
|
|
1954
|
+
font-size: 0.86rem;
|
|
1955
|
+
line-height: 1.5;
|
|
1956
|
+
color: rgba(241, 235, 223, 0.74);
|
|
1957
|
+
}
|
|
1958
|
+
|
|
1922
1959
|
.quick-review-topline {
|
|
1923
1960
|
display: flex;
|
|
1924
1961
|
align-items: flex-start;
|
|
@@ -2101,6 +2138,35 @@ function renderLauncherHtml(launcherToken) {
|
|
|
2101
2138
|
gap: 10px;
|
|
2102
2139
|
}
|
|
2103
2140
|
|
|
2141
|
+
.review-resolution-shell {
|
|
2142
|
+
display: grid;
|
|
2143
|
+
gap: 10px;
|
|
2144
|
+
padding: 12px 13px;
|
|
2145
|
+
border-radius: 16px;
|
|
2146
|
+
border: 1px solid rgba(244, 147, 85, 0.16);
|
|
2147
|
+
background: rgba(255,255,255,0.038);
|
|
2148
|
+
}
|
|
2149
|
+
|
|
2150
|
+
.review-resolution-shell[hidden] {
|
|
2151
|
+
display: none;
|
|
2152
|
+
}
|
|
2153
|
+
|
|
2154
|
+
.review-resolution-kicker {
|
|
2155
|
+
margin: 0;
|
|
2156
|
+
font-size: 0.68rem;
|
|
2157
|
+
text-transform: uppercase;
|
|
2158
|
+
letter-spacing: 0.12em;
|
|
2159
|
+
font-weight: 700;
|
|
2160
|
+
color: rgba(255, 211, 178, 0.82);
|
|
2161
|
+
}
|
|
2162
|
+
|
|
2163
|
+
.review-resolution-copy {
|
|
2164
|
+
margin: 0;
|
|
2165
|
+
font-size: 0.84rem;
|
|
2166
|
+
line-height: 1.45;
|
|
2167
|
+
color: rgba(241, 235, 223, 0.72);
|
|
2168
|
+
}
|
|
2169
|
+
|
|
2104
2170
|
.review-resolution-actions[hidden] {
|
|
2105
2171
|
display: none;
|
|
2106
2172
|
}
|
|
@@ -6394,11 +6460,11 @@ function renderLauncherHtml(launcherToken) {
|
|
|
6394
6460
|
<nav class="sidebar-nav" id="sidebar-nav">
|
|
6395
6461
|
<button class="sidebar-nav-item active" id="nav-command" data-view="command" type="button">
|
|
6396
6462
|
<svg class="sidebar-nav-icon" viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="1.6"><path d="M3 5h14M3 10h14M3 15h7"/></svg>
|
|
6397
|
-
|
|
6463
|
+
Status
|
|
6398
6464
|
</button>
|
|
6399
6465
|
<button class="sidebar-nav-item" id="nav-discovery" data-view="discovery" type="button">
|
|
6400
6466
|
<svg class="sidebar-nav-icon" viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="1.6"><circle cx="10" cy="10" r="7"/><circle cx="10" cy="10" r="3"/></svg>
|
|
6401
|
-
|
|
6467
|
+
Inbox
|
|
6402
6468
|
</button>
|
|
6403
6469
|
<button class="sidebar-nav-item" id="nav-passports" data-view="passports" type="button">
|
|
6404
6470
|
<svg class="sidebar-nav-icon" viewBox="0 0 20 20" fill="none" stroke="currentColor" stroke-width="1.6"><rect x="4" y="2" width="12" height="16" rx="2"/><path d="M7 7h6M7 11h4"/></svg>
|
|
@@ -6438,8 +6504,8 @@ function renderLauncherHtml(launcherToken) {
|
|
|
6438
6504
|
<div class="main-area">
|
|
6439
6505
|
<div class="page-header command-header">
|
|
6440
6506
|
<div class="page-title-block">
|
|
6441
|
-
<div class="page-title" id="page-title">
|
|
6442
|
-
<div class="page-subtitle" id="activity-message">
|
|
6507
|
+
<div class="page-title" id="page-title">Status</div>
|
|
6508
|
+
<div class="page-subtitle" id="activity-message">Review account, scope, daemon, inbox, and runtime health for this device.</div>
|
|
6443
6509
|
</div>
|
|
6444
6510
|
<div class="page-header-controls">
|
|
6445
6511
|
<div class="status-chip" id="connection-pill">
|
|
@@ -6488,16 +6554,21 @@ function renderLauncherHtml(launcherToken) {
|
|
|
6488
6554
|
</div>
|
|
6489
6555
|
<p class="quick-review-meta" id="quick-review-meta">Open Connect to approve or defer this item.</p>
|
|
6490
6556
|
<p class="quick-review-detail" id="quick-review-detail">Nothing is registered automatically.</p>
|
|
6491
|
-
<div class="
|
|
6492
|
-
<div class="
|
|
6493
|
-
<span class="
|
|
6494
|
-
<span class="
|
|
6557
|
+
<div class="review-summary-grid">
|
|
6558
|
+
<div class="review-summary-pill">
|
|
6559
|
+
<span class="review-summary-label">Action</span>
|
|
6560
|
+
<span class="review-summary-value" id="quick-review-action-summary">Register on this account now</span>
|
|
6495
6561
|
</div>
|
|
6496
|
-
<div class="
|
|
6497
|
-
<span class="
|
|
6498
|
-
<span class="
|
|
6562
|
+
<div class="review-summary-pill">
|
|
6563
|
+
<span class="review-summary-label">Scope</span>
|
|
6564
|
+
<span class="review-summary-value" id="quick-review-scope-summary">Account scope</span>
|
|
6499
6565
|
</div>
|
|
6500
6566
|
</div>
|
|
6567
|
+
<div class="review-recommendation-card">
|
|
6568
|
+
<p class="review-recommendation-kicker">Recommended next step</p>
|
|
6569
|
+
<h4 class="review-recommendation-title" id="quick-review-recommendation-title">Register solo</h4>
|
|
6570
|
+
<p class="review-recommendation-detail" id="quick-review-recommendation-detail">Register this item on your account now.</p>
|
|
6571
|
+
</div>
|
|
6501
6572
|
<div class="quick-review-status" id="quick-review-status">Waiting for review.</div>
|
|
6502
6573
|
<div class="quick-review-scope" id="quick-review-scope" hidden>
|
|
6503
6574
|
<div class="review-mode-group" id="quick-review-mode">
|
|
@@ -6526,9 +6597,13 @@ function renderLauncherHtml(launcherToken) {
|
|
|
6526
6597
|
</div>
|
|
6527
6598
|
<button class="quick-review-tertiary" id="quick-review-open-discovery" type="button" disabled>Open full review</button>
|
|
6528
6599
|
</div>
|
|
6529
|
-
<div class="review-resolution-
|
|
6530
|
-
<
|
|
6531
|
-
<
|
|
6600
|
+
<div class="review-resolution-shell" id="quick-review-resolution-shell" hidden>
|
|
6601
|
+
<p class="review-resolution-kicker">Recovery path</p>
|
|
6602
|
+
<p class="review-resolution-copy" id="quick-review-resolution-copy">Choose the safest next step when registration cannot finish here.</p>
|
|
6603
|
+
<div class="review-resolution-actions" id="quick-review-resolution" hidden>
|
|
6604
|
+
<button class="review-resolution-button" id="quick-review-resolution-primary" type="button" hidden></button>
|
|
6605
|
+
<button class="review-resolution-button" id="quick-review-resolution-secondary" type="button" hidden></button>
|
|
6606
|
+
</div>
|
|
6532
6607
|
</div>
|
|
6533
6608
|
</section>
|
|
6534
6609
|
</div>
|
|
@@ -6653,7 +6728,7 @@ function renderLauncherHtml(launcherToken) {
|
|
|
6653
6728
|
|
|
6654
6729
|
<p class="login-alt">Don't have an account? <button type="button" id="login-create-account">Create account</button></p>
|
|
6655
6730
|
|
|
6656
|
-
<div class="login-note">Global-ready auth is currently powered by secure device-code sign in. After sign in is approved on Forkit.dev, this screen switches to
|
|
6731
|
+
<div class="login-note">Global-ready auth is currently powered by secure device-code sign in. After sign in is approved on Forkit.dev, this screen switches to Status automatically.</div>
|
|
6657
6732
|
</form>
|
|
6658
6733
|
</section>
|
|
6659
6734
|
</section>
|
|
@@ -6733,11 +6808,11 @@ function renderLauncherHtml(launcherToken) {
|
|
|
6733
6808
|
</svg>
|
|
6734
6809
|
</div>
|
|
6735
6810
|
<div class="command-hero-content">
|
|
6736
|
-
<h2>
|
|
6737
|
-
<p>
|
|
6811
|
+
<h2>Connect status</h2>
|
|
6812
|
+
<p>Account, scope, daemon, inbox, and runtime health for this device.</p>
|
|
6738
6813
|
<div class="command-hero-actions">
|
|
6739
|
-
<button class="primary" id="cmd-open-passports">Open
|
|
6740
|
-
<button class="secondary" id="cmd-check-status">
|
|
6814
|
+
<button class="primary" id="cmd-open-passports">Open Inbox</button>
|
|
6815
|
+
<button class="secondary" id="cmd-check-status">Open Runtime</button>
|
|
6741
6816
|
</div>
|
|
6742
6817
|
</div>
|
|
6743
6818
|
</div>
|
|
@@ -6756,8 +6831,8 @@ function renderLauncherHtml(launcherToken) {
|
|
|
6756
6831
|
<div class="command-card-icon" aria-hidden="true">
|
|
6757
6832
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.7"><path d="M17.5 18H8a5 5 0 1 1 .9-9.9 6 6 0 0 1 11.5 2.6A3.8 3.8 0 0 1 17.5 18Z"/><path d="M9 13l2.2 2.2L16 10.5"/></svg>
|
|
6758
6833
|
</div>
|
|
6759
|
-
<h3>
|
|
6760
|
-
<div class="command-card-stat">
|
|
6834
|
+
<h3>Active Scope</h3>
|
|
6835
|
+
<div class="command-card-stat">Solo or governed scope</div>
|
|
6761
6836
|
<div class="command-card-items">
|
|
6762
6837
|
<div class="command-card-item">
|
|
6763
6838
|
<span class="command-card-item-label">Workspace</span>
|
|
@@ -6807,10 +6882,10 @@ function renderLauncherHtml(launcherToken) {
|
|
|
6807
6882
|
<div id="view-discovery" class="view-hidden discovery-shell">
|
|
6808
6883
|
<div class="discovery-page-intro">
|
|
6809
6884
|
<div class="discovery-page-title-row">
|
|
6810
|
-
<h2>
|
|
6885
|
+
<h2>Inbox</h2>
|
|
6811
6886
|
<span class="discovery-page-count" id="discovery-page-count">0</span>
|
|
6812
6887
|
</div>
|
|
6813
|
-
<p>
|
|
6888
|
+
<p>Models, agents, and runtimes waiting for action on this device. Review them to continue registration, reuse an existing passport, or open runtime work.</p>
|
|
6814
6889
|
</div>
|
|
6815
6890
|
<div class="discovery-feedback" id="discovery-feedback" hidden></div>
|
|
6816
6891
|
|
|
@@ -6883,14 +6958,29 @@ function renderLauncherHtml(launcherToken) {
|
|
|
6883
6958
|
</div>
|
|
6884
6959
|
|
|
6885
6960
|
<div class="status-line" id="discovery-last-scan">Last scan: -</div>
|
|
6886
|
-
<h3 class="discovery-side-title">
|
|
6887
|
-
<p class="discovery-side-copy">
|
|
6961
|
+
<h3 class="discovery-side-title">Inbox review</h3>
|
|
6962
|
+
<p class="discovery-side-copy">Select an inbox item and continue the exact next step Forkit Connect recommends.</p>
|
|
6888
6963
|
|
|
6889
6964
|
<section class="discovery-review-panel" id="discovery-review-panel">
|
|
6890
6965
|
<p class="discovery-review-kicker" id="discovery-review-kicker">Review item</p>
|
|
6891
6966
|
<h4 class="discovery-review-title" id="discovery-review-title">Select a discovery item</h4>
|
|
6892
6967
|
<p class="discovery-review-meta" id="discovery-review-meta">Choose a model, agent, or runtime to review it here.</p>
|
|
6893
6968
|
<p class="discovery-review-detail" id="discovery-review-detail">Registering creates or updates a Forkit Passport. Nothing is published automatically.</p>
|
|
6969
|
+
<div class="review-summary-grid">
|
|
6970
|
+
<div class="review-summary-pill">
|
|
6971
|
+
<span class="review-summary-label">Action</span>
|
|
6972
|
+
<span class="review-summary-value" id="discovery-review-action-summary">Select an item</span>
|
|
6973
|
+
</div>
|
|
6974
|
+
<div class="review-summary-pill">
|
|
6975
|
+
<span class="review-summary-label">Scope</span>
|
|
6976
|
+
<span class="review-summary-value" id="discovery-review-scope-summary">Review</span>
|
|
6977
|
+
</div>
|
|
6978
|
+
</div>
|
|
6979
|
+
<div class="review-recommendation-card">
|
|
6980
|
+
<p class="review-recommendation-kicker">Recommended next step</p>
|
|
6981
|
+
<h4 class="review-recommendation-title" id="discovery-review-recommendation-title">Select an item</h4>
|
|
6982
|
+
<p class="review-recommendation-detail" id="discovery-review-recommendation-detail">Connect will show the best next step after you choose a model, agent, or runtime.</p>
|
|
6983
|
+
</div>
|
|
6894
6984
|
<div class="discovery-review-status" id="discovery-review-status">Select an item to continue.</div>
|
|
6895
6985
|
<div class="discovery-review-scope" id="discovery-review-scope" hidden>
|
|
6896
6986
|
<div class="review-mode-group" id="discovery-review-mode">
|
|
@@ -6916,9 +7006,13 @@ function renderLauncherHtml(launcherToken) {
|
|
|
6916
7006
|
<button class="secondary" id="discovery-review-defer" type="button" disabled>Not now</button>
|
|
6917
7007
|
<button class="danger" id="discovery-review-ignore" type="button" disabled>Deny on this device</button>
|
|
6918
7008
|
</div>
|
|
6919
|
-
<div class="review-resolution-
|
|
6920
|
-
<
|
|
6921
|
-
<
|
|
7009
|
+
<div class="review-resolution-shell" id="discovery-review-resolution-shell" hidden>
|
|
7010
|
+
<p class="review-resolution-kicker">Recovery path</p>
|
|
7011
|
+
<p class="review-resolution-copy" id="discovery-review-resolution-copy">Choose the safest next step when registration cannot finish here.</p>
|
|
7012
|
+
<div class="review-resolution-actions" id="discovery-review-resolution" hidden>
|
|
7013
|
+
<button class="review-resolution-button" id="discovery-review-resolution-primary" type="button" hidden></button>
|
|
7014
|
+
<button class="review-resolution-button" id="discovery-review-resolution-secondary" type="button" hidden></button>
|
|
7015
|
+
</div>
|
|
6922
7016
|
</div>
|
|
6923
7017
|
</section>
|
|
6924
7018
|
|
|
@@ -6929,7 +7023,7 @@ function renderLauncherHtml(launcherToken) {
|
|
|
6929
7023
|
<li><span class="discovery-note-label"><span class="discovery-note-icon info">i</span>Passport readiness</span><span class="discovery-note-value" id="disc-check-passport">-</span></li>
|
|
6930
7024
|
</ul>
|
|
6931
7025
|
|
|
6932
|
-
<button id="discovery-review-all" class="discovery-review-button" type="button">
|
|
7026
|
+
<button id="discovery-review-all" class="discovery-review-button" type="button">Open full inbox ↗</button>
|
|
6933
7027
|
</aside>
|
|
6934
7028
|
</div>
|
|
6935
7029
|
|
|
@@ -7633,7 +7727,7 @@ function renderLauncherHtml(launcherToken) {
|
|
|
7633
7727
|
}
|
|
7634
7728
|
|
|
7635
7729
|
function resetReviewResolutionActions(prefix) {
|
|
7636
|
-
setReviewResolutionActions(prefix, []);
|
|
7730
|
+
setReviewResolutionActions(prefix, [], '');
|
|
7637
7731
|
}
|
|
7638
7732
|
|
|
7639
7733
|
function derivePassportResolutionQuery(item) {
|
|
@@ -7696,6 +7790,15 @@ function renderLauncherHtml(launcherToken) {
|
|
|
7696
7790
|
: 'Register this item on your account now';
|
|
7697
7791
|
}
|
|
7698
7792
|
|
|
7793
|
+
function updateReviewRecommendation(prefix, item, scopeMode) {
|
|
7794
|
+
const title = document.getElementById(prefix + '-recommendation-title');
|
|
7795
|
+
const detail = document.getElementById(prefix + '-recommendation-detail');
|
|
7796
|
+
if (!title || !detail) return;
|
|
7797
|
+
const effectiveScopeMode = scopeMode === 'workspace' ? 'workspace' : 'solo';
|
|
7798
|
+
title.textContent = getReviewPrimaryLabel(item, effectiveScopeMode);
|
|
7799
|
+
detail.textContent = getReviewActionSummary(item, effectiveScopeMode) + '.';
|
|
7800
|
+
}
|
|
7801
|
+
|
|
7699
7802
|
function getReviewDetailText(item) {
|
|
7700
7803
|
if (!item) return 'Review local metadata, then decide what happens next.';
|
|
7701
7804
|
if (item.kind === 'runtime') {
|
|
@@ -7751,16 +7854,32 @@ function renderLauncherHtml(launcherToken) {
|
|
|
7751
7854
|
: result && (result.code === 'WORKSPACE_PROJECT_BINDING_REQUIRED' || result.code === 'DRAFT_CREATION_NOT_ALLOWED_BY_BINDING')
|
|
7752
7855
|
? 'Scope required · choose workspace and project'
|
|
7753
7856
|
: null,
|
|
7857
|
+
resolutionCopy: nextActions.length
|
|
7858
|
+
? nextActions[0]
|
|
7859
|
+
: result && result.code === 'GOVERNED_PASSPORT_CAPACITY_REACHED'
|
|
7860
|
+
? 'Reuse an existing passport before creating another governed record.'
|
|
7861
|
+
: result && result.code === 'DRAFT_LIMIT_REACHED'
|
|
7862
|
+
? 'Use an existing passport or clear an older draft before continuing.'
|
|
7863
|
+
: result && result.code === 'SIMILAR_PASSPORT_EXISTS'
|
|
7864
|
+
? 'Open the matching passport instead of creating another record.'
|
|
7865
|
+
: result && (result.code === 'WORKSPACE_PROJECT_BINDING_REQUIRED' || result.code === 'DRAFT_CREATION_NOT_ALLOWED_BY_BINDING')
|
|
7866
|
+
? 'Set workspace and project scope before governed registration continues.'
|
|
7867
|
+
: null,
|
|
7754
7868
|
resolutionActions,
|
|
7755
7869
|
};
|
|
7756
7870
|
}
|
|
7757
7871
|
|
|
7758
|
-
function setReviewResolutionActions(prefix, actions) {
|
|
7872
|
+
function setReviewResolutionActions(prefix, actions, copy) {
|
|
7873
|
+
const shell = document.getElementById(prefix + '-resolution-shell');
|
|
7759
7874
|
const wrapper = document.getElementById(prefix + '-resolution');
|
|
7875
|
+
const detail = document.getElementById(prefix + '-resolution-copy');
|
|
7760
7876
|
const primary = document.getElementById(prefix + '-resolution-primary');
|
|
7761
7877
|
const secondary = document.getElementById(prefix + '-resolution-secondary');
|
|
7762
7878
|
if (!wrapper || !primary || !secondary) return;
|
|
7763
7879
|
const normalized = Array.isArray(actions) ? actions.slice(0, 2) : [];
|
|
7880
|
+
if (detail) {
|
|
7881
|
+
detail.textContent = copy || 'Choose the safest next step when registration cannot finish here.';
|
|
7882
|
+
}
|
|
7764
7883
|
[primary, secondary].forEach((button, index) => {
|
|
7765
7884
|
const action = normalized[index];
|
|
7766
7885
|
if (!action) {
|
|
@@ -7774,6 +7893,9 @@ function renderLauncherHtml(launcherToken) {
|
|
|
7774
7893
|
button.textContent = String(action.label || '').trim();
|
|
7775
7894
|
});
|
|
7776
7895
|
wrapper.hidden = normalized.length === 0;
|
|
7896
|
+
if (shell) {
|
|
7897
|
+
shell.hidden = normalized.length === 0;
|
|
7898
|
+
}
|
|
7777
7899
|
}
|
|
7778
7900
|
|
|
7779
7901
|
async function handleReviewResolutionAction(prefix, action) {
|
|
@@ -7895,6 +8017,7 @@ function renderLauncherHtml(launcherToken) {
|
|
|
7895
8017
|
}
|
|
7896
8018
|
if (item) {
|
|
7897
8019
|
setText('quick-review-action-summary', getReviewActionSummary(item, reviewScopeMode));
|
|
8020
|
+
updateReviewRecommendation('quick-review', item, reviewScopeMode);
|
|
7898
8021
|
}
|
|
7899
8022
|
updateQuickReviewScopeSummary(reviewScopeMode);
|
|
7900
8023
|
return reviewScopeMode;
|
|
@@ -7967,7 +8090,12 @@ function renderLauncherHtml(launcherToken) {
|
|
|
7967
8090
|
anchor.hidden = false;
|
|
7968
8091
|
setText('quick-review-count', String(total));
|
|
7969
8092
|
setText('quick-review-chip-title', item.name);
|
|
7970
|
-
setText(
|
|
8093
|
+
setText(
|
|
8094
|
+
'quick-review-chip-meta',
|
|
8095
|
+
total > 1
|
|
8096
|
+
? (getReviewPrimaryLabel(item, 'solo') + ' · ' + String(total) + ' items need review')
|
|
8097
|
+
: getReviewActionSummary(item, 'solo'),
|
|
8098
|
+
);
|
|
7971
8099
|
setText('quick-review-kicker', item.typeLabel || item.kind);
|
|
7972
8100
|
setText('quick-review-title', item.name);
|
|
7973
8101
|
setText('quick-review-badge', item.kind === 'runtime' ? 'Runtime' : item.kind === 'agent' ? 'Agent' : 'Model');
|
|
@@ -7981,6 +8109,7 @@ function renderLauncherHtml(launcherToken) {
|
|
|
7981
8109
|
'quick-review-action-summary',
|
|
7982
8110
|
getReviewActionSummary(item, 'solo'),
|
|
7983
8111
|
);
|
|
8112
|
+
updateReviewRecommendation('quick-review', item, 'solo');
|
|
7984
8113
|
if (primaryButton) {
|
|
7985
8114
|
primaryButton.textContent = primaryLabel;
|
|
7986
8115
|
primaryButton.disabled = item.inboxGroup === 'ignored';
|
|
@@ -8003,6 +8132,7 @@ function renderLauncherHtml(launcherToken) {
|
|
|
8003
8132
|
setReviewRegistrationMode('quick-review', 'solo');
|
|
8004
8133
|
quickReviewScopeCacheKey = null;
|
|
8005
8134
|
setText('quick-review-scope-summary', getPassiveReviewScopeSummary(item));
|
|
8135
|
+
updateReviewRecommendation('quick-review', item, 'solo');
|
|
8006
8136
|
return;
|
|
8007
8137
|
}
|
|
8008
8138
|
|
|
@@ -8102,7 +8232,7 @@ function renderLauncherHtml(launcherToken) {
|
|
|
8102
8232
|
if (feedback.actionSummary) {
|
|
8103
8233
|
setText('quick-review-action-summary', feedback.actionSummary);
|
|
8104
8234
|
}
|
|
8105
|
-
setReviewResolutionActions('quick-review', feedback.resolutionActions || []);
|
|
8235
|
+
setReviewResolutionActions('quick-review', feedback.resolutionActions || [], feedback.resolutionCopy || feedback.actionSummary || feedback.message);
|
|
8106
8236
|
return;
|
|
8107
8237
|
}
|
|
8108
8238
|
resetReviewResolutionActions('quick-review');
|
|
@@ -8159,6 +8289,28 @@ function renderLauncherHtml(launcherToken) {
|
|
|
8159
8289
|
}
|
|
8160
8290
|
}
|
|
8161
8291
|
|
|
8292
|
+
function updateDiscoveryReviewScopeSummary(scopeMode) {
|
|
8293
|
+
const workspaceSelect = document.getElementById('discovery-review-workspace');
|
|
8294
|
+
const projectSelect = document.getElementById('discovery-review-project');
|
|
8295
|
+
const workspaceId = workspaceSelect ? String(workspaceSelect.value || '').trim() : '';
|
|
8296
|
+
const projectId = projectSelect ? String(projectSelect.value || '').trim() : '';
|
|
8297
|
+
const workspaceLabel = readSelectedOptionLabel(workspaceSelect);
|
|
8298
|
+
const projectLabel = readSelectedOptionLabel(projectSelect);
|
|
8299
|
+
if (scopeMode !== 'workspace') {
|
|
8300
|
+
setText('discovery-review-scope-summary', 'Account scope');
|
|
8301
|
+
return;
|
|
8302
|
+
}
|
|
8303
|
+
if (!workspaceId) {
|
|
8304
|
+
setText('discovery-review-scope-summary', 'Choose governed workspace');
|
|
8305
|
+
return;
|
|
8306
|
+
}
|
|
8307
|
+
if (!projectId) {
|
|
8308
|
+
setText('discovery-review-scope-summary', workspaceLabel ? (workspaceLabel + ' · choose project') : 'Choose project');
|
|
8309
|
+
return;
|
|
8310
|
+
}
|
|
8311
|
+
setText('discovery-review-scope-summary', [workspaceLabel, projectLabel].filter(Boolean).join(' · ') || 'Governed project');
|
|
8312
|
+
}
|
|
8313
|
+
|
|
8162
8314
|
function syncDiscoveryReviewRegistrationMode(item, mode) {
|
|
8163
8315
|
const reviewScopeMode = setReviewRegistrationMode('discovery-review', mode);
|
|
8164
8316
|
const workspaceSelect = document.getElementById('discovery-review-workspace');
|
|
@@ -8176,7 +8328,10 @@ function renderLauncherHtml(launcherToken) {
|
|
|
8176
8328
|
deferEnabled: canReviewDefer(item),
|
|
8177
8329
|
ignoreEnabled: canReviewIgnore(item),
|
|
8178
8330
|
});
|
|
8331
|
+
setText('discovery-review-action-summary', getReviewActionSummary(item, reviewScopeMode));
|
|
8332
|
+
updateReviewRecommendation('discovery-review', item, reviewScopeMode);
|
|
8179
8333
|
}
|
|
8334
|
+
updateDiscoveryReviewScopeSummary(reviewScopeMode);
|
|
8180
8335
|
return reviewScopeMode;
|
|
8181
8336
|
}
|
|
8182
8337
|
|
|
@@ -8192,6 +8347,7 @@ function renderLauncherHtml(launcherToken) {
|
|
|
8192
8347
|
setScopeOptions(projectSelect, [{ id: '', label: 'Solo registration / no project' }], '');
|
|
8193
8348
|
if (primaryButton) primaryButton.disabled = false;
|
|
8194
8349
|
}
|
|
8350
|
+
updateDiscoveryReviewScopeSummary(scopeMode);
|
|
8195
8351
|
return;
|
|
8196
8352
|
}
|
|
8197
8353
|
setScopeOptions(projectSelect, [{ id: '', label: 'Loading projects...' }], '');
|
|
@@ -8211,12 +8367,14 @@ function renderLauncherHtml(launcherToken) {
|
|
|
8211
8367
|
if (primaryButton) {
|
|
8212
8368
|
primaryButton.disabled = !projects.length;
|
|
8213
8369
|
}
|
|
8370
|
+
updateDiscoveryReviewScopeSummary(scopeMode);
|
|
8214
8371
|
} catch {
|
|
8215
8372
|
setScopeOptions(projectSelect, [{ id: '', label: 'Project list unavailable' }], '');
|
|
8216
8373
|
setDiscoveryReviewStatus('Project list is unavailable right now.', 'warn');
|
|
8217
8374
|
if (primaryButton) {
|
|
8218
8375
|
primaryButton.disabled = true;
|
|
8219
8376
|
}
|
|
8377
|
+
updateDiscoveryReviewScopeSummary(scopeMode);
|
|
8220
8378
|
}
|
|
8221
8379
|
}
|
|
8222
8380
|
|
|
@@ -8231,6 +8389,10 @@ function renderLauncherHtml(launcherToken) {
|
|
|
8231
8389
|
setText('discovery-review-title', 'Select a discovery item');
|
|
8232
8390
|
setText('discovery-review-meta', 'Choose a model, agent, or runtime to review it here.');
|
|
8233
8391
|
setText('discovery-review-detail', 'Registering creates or updates a Forkit Passport. Nothing is published automatically.');
|
|
8392
|
+
setText('discovery-review-action-summary', 'Select an item');
|
|
8393
|
+
setText('discovery-review-scope-summary', 'Review');
|
|
8394
|
+
setText('discovery-review-recommendation-title', 'Select an item');
|
|
8395
|
+
setText('discovery-review-recommendation-detail', 'Connect will show the best next step after you choose a model, agent, or runtime.');
|
|
8234
8396
|
if (scopeWrap) scopeWrap.hidden = true;
|
|
8235
8397
|
setReviewRegistrationMode('discovery-review', 'solo');
|
|
8236
8398
|
setDiscoveryReviewStatus('Select an item to continue.', '');
|
|
@@ -8246,6 +8408,8 @@ function renderLauncherHtml(launcherToken) {
|
|
|
8246
8408
|
setText('discovery-review-title', item.name);
|
|
8247
8409
|
setText('discovery-review-meta', item.subtitle + ' · ' + item.source);
|
|
8248
8410
|
setText('discovery-review-detail', getReviewDetailText(item));
|
|
8411
|
+
setText('discovery-review-action-summary', getReviewActionSummary(item, 'solo'));
|
|
8412
|
+
updateReviewRecommendation('discovery-review', item, 'solo');
|
|
8249
8413
|
setDiscoveryReviewStatus(item.statusLabel + (item.statusMeta ? ' · ' + item.statusMeta : ''), item.statusTone === 'muted' ? '' : item.statusTone);
|
|
8250
8414
|
resetReviewResolutionActions('discovery-review');
|
|
8251
8415
|
setDiscoveryReviewButtons({
|
|
@@ -8259,6 +8423,8 @@ function renderLauncherHtml(launcherToken) {
|
|
|
8259
8423
|
if (scopeWrap) scopeWrap.hidden = true;
|
|
8260
8424
|
setReviewRegistrationMode('discovery-review', 'solo');
|
|
8261
8425
|
reviewScopeCacheKey = null;
|
|
8426
|
+
setText('discovery-review-scope-summary', getPassiveReviewScopeSummary(item));
|
|
8427
|
+
updateReviewRecommendation('discovery-review', item, 'solo');
|
|
8262
8428
|
return;
|
|
8263
8429
|
}
|
|
8264
8430
|
|
|
@@ -8352,7 +8518,7 @@ function renderLauncherHtml(launcherToken) {
|
|
|
8352
8518
|
const feedback = formatLauncherActionFeedback(result, 'Registration failed.');
|
|
8353
8519
|
setDiscoveryReviewStatus(feedback.message, 'warn');
|
|
8354
8520
|
setActivityMessage(feedback.activity, 'warn');
|
|
8355
|
-
setReviewResolutionActions('discovery-review', feedback.resolutionActions || []);
|
|
8521
|
+
setReviewResolutionActions('discovery-review', feedback.resolutionActions || [], feedback.resolutionCopy || feedback.actionSummary || feedback.message);
|
|
8356
8522
|
return;
|
|
8357
8523
|
}
|
|
8358
8524
|
resetReviewResolutionActions('discovery-review');
|
|
@@ -8778,18 +8944,16 @@ function renderLauncherHtml(launcherToken) {
|
|
|
8778
8944
|
const boundCount = scopedPassports.filter((item) => String(item.bindingStatus || '').toLowerCase() === 'bound').length;
|
|
8779
8945
|
const subtitle = boundCount > 0
|
|
8780
8946
|
? boundCount === 1
|
|
8781
|
-
? '1 registration is already linked to the current scope.'
|
|
8782
|
-
: boundCount + ' registrations are already linked to the current scope.'
|
|
8783
|
-
: '
|
|
8947
|
+
? 'Status is healthy. 1 registration is already linked to the current scope.'
|
|
8948
|
+
: 'Status is healthy. ' + boundCount + ' registrations are already linked to the current scope.'
|
|
8949
|
+
: 'Status is healthy. Account, scope, daemon, and inbox are ready for new registrations.';
|
|
8784
8950
|
if (currentView === 'command') {
|
|
8785
8951
|
setText('activity-message', subtitle, '');
|
|
8786
8952
|
}
|
|
8787
8953
|
|
|
8788
|
-
const accountName = toDisplayName(workspaceLabel, 'Operator');
|
|
8789
|
-
const greeting = getGreetingLabel() + ', ' + accountName + '!';
|
|
8790
8954
|
if (currentView === 'command') {
|
|
8791
8955
|
const title = document.getElementById('page-title');
|
|
8792
|
-
if (title) title.textContent =
|
|
8956
|
+
if (title) title.textContent = 'Status';
|
|
8793
8957
|
}
|
|
8794
8958
|
}
|
|
8795
8959
|
|
|
@@ -9384,8 +9548,8 @@ function renderLauncherHtml(launcherToken) {
|
|
|
9384
9548
|
const VIEW_TITLES = {
|
|
9385
9549
|
login: 'Sign in',
|
|
9386
9550
|
'signed-out': 'Signed out',
|
|
9387
|
-
command: '
|
|
9388
|
-
discovery: '
|
|
9551
|
+
command: 'Status',
|
|
9552
|
+
discovery: 'Inbox',
|
|
9389
9553
|
passports: 'Passports',
|
|
9390
9554
|
runtime: 'Runtime',
|
|
9391
9555
|
diagnostics: 'Diagnostics',
|
|
@@ -9396,8 +9560,8 @@ function renderLauncherHtml(launcherToken) {
|
|
|
9396
9560
|
const VIEW_SUBTITLES = {
|
|
9397
9561
|
login: 'Authenticate with Forkit.dev to continue.',
|
|
9398
9562
|
'signed-out': 'Sign in again to restore registration sync and connected workflows.',
|
|
9399
|
-
command: '
|
|
9400
|
-
discovery: '
|
|
9563
|
+
command: 'Review account, scope, daemon, inbox, and runtime health for this device.',
|
|
9564
|
+
discovery: 'Review detected models, agents, and runtimes waiting in the local inbox.',
|
|
9401
9565
|
passports: 'Review published, draft and linked Passports from the local device state.',
|
|
9402
9566
|
runtime: 'Inspect connected runtime environments and metrics.',
|
|
9403
9567
|
diagnostics: 'Run health checks and review system diagnostics.',
|
|
@@ -10415,8 +10579,8 @@ function renderLauncherHtml(launcherToken) {
|
|
|
10415
10579
|
document.getElementById('diag-action-heartbeat').addEventListener('click', handleHeartbeat);
|
|
10416
10580
|
document.getElementById('diag-action-update').addEventListener('click', handleUpdate);
|
|
10417
10581
|
document.getElementById('activity-export-csv').addEventListener('click', handleExportActivityCsv);
|
|
10418
|
-
document.getElementById('cmd-open-passports').addEventListener('click', () => setView('
|
|
10419
|
-
document.getElementById('cmd-check-status').addEventListener('click', () => setView('
|
|
10582
|
+
document.getElementById('cmd-open-passports').addEventListener('click', () => setView('discovery'));
|
|
10583
|
+
document.getElementById('cmd-check-status').addEventListener('click', () => setView('runtime'));
|
|
10420
10584
|
|
|
10421
10585
|
function wireScopeDropdown(selectId) {
|
|
10422
10586
|
const button = document.getElementById(selectId);
|