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.
Files changed (2) hide show
  1. package/dist/launcher.js +215 -51
  2. 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 Command Center</title>
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
- .quick-review-summary-grid {
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
- .quick-review-summary-pill {
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
- .quick-review-summary-label {
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
- .quick-review-summary-value {
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
- Command Center
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
- Discovery
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">Good morning!</div>
6442
- <div class="page-subtitle" id="activity-message">Forkit Connect keeps your AI environment in sync with Forkit.dev.</div>
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="quick-review-summary-grid">
6492
- <div class="quick-review-summary-pill">
6493
- <span class="quick-review-summary-label">Action</span>
6494
- <span class="quick-review-summary-value" id="quick-review-action-summary">Register on this account now</span>
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="quick-review-summary-pill">
6497
- <span class="quick-review-summary-label">Scope</span>
6498
- <span class="quick-review-summary-value" id="quick-review-scope-summary">Account scope</span>
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-actions" id="quick-review-resolution" hidden>
6530
- <button class="review-resolution-button" id="quick-review-resolution-primary" type="button" hidden></button>
6531
- <button class="review-resolution-button" id="quick-review-resolution-secondary" type="button" hidden></button>
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 Command Center automatically.</div>
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>Everything is in sync</h2>
6737
- <p>Your local AI environment is healthy and all systems are up to date.</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 Passports</button>
6740
- <button class="secondary" id="cmd-check-status">Check Status</button>
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>Workspace Sync</h3>
6760
- <div class="command-card-stat">Synced with Forkit.dev</div>
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>Discovery</h2>
6885
+ <h2>Inbox</h2>
6811
6886
  <span class="discovery-page-count" id="discovery-page-count">0</span>
6812
6887
  </div>
6813
- <p>Detected models, agents and runtimes on your machine. Review and register them to create <strong>Passports on Forkit.dev</strong>.</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">Discovery intelligence</h3>
6887
- <p class="discovery-side-copy">We automatically scan your environment and understand the systems running locally.</p>
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-actions" id="discovery-review-resolution" hidden>
6920
- <button class="review-resolution-button" id="discovery-review-resolution-primary" type="button" hidden></button>
6921
- <button class="review-resolution-button" id="discovery-review-resolution-secondary" type="button" hidden></button>
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">Review all ↗</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('quick-review-chip-meta', total > 1 ? (String(total) + ' items need review') : (item.statusMeta || item.statusLabel));
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
- : 'Current scope is ready for new registrations.';
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 = greeting;
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: 'Command Center',
9388
- discovery: '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: 'Monitor local environment, passports, and runtime health.',
9400
- discovery: 'Scan and review detected models, agents, and runtimes.',
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('passports'));
10419
- document.getElementById('cmd-check-status').addEventListener('click', () => setView('diagnostics'));
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);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "forkit-connect",
3
- "version": "0.1.15",
3
+ "version": "0.1.17",
4
4
  "description": "Forkit Connect Local Engine - The Global AI Governance Fabric",
5
5
  "license": "MIT",
6
6
  "main": "dist/index.js",