forkit-connect 0.1.13 → 0.1.15

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/cli.js CHANGED
@@ -90,7 +90,7 @@ const PUBLIC_COMMANDS = [
90
90
  ['workspace', 'List, select, or inspect optional governed workspace/project scope'],
91
91
  ['runtime', 'Register or review governed runtimes for the current repo/worktree'],
92
92
  ['register', 'Register ready local models into the current scope'],
93
- ['ignore', 'Ignore one detected local model'],
93
+ ['ignore', 'Deny one detected local model on this device'],
94
94
  ['doctor', 'Run local environment diagnostics'],
95
95
  ];
96
96
  const ADVANCED_COMMAND_GROUPS = [
@@ -139,7 +139,7 @@ function usage() {
139
139
  console.log(' --no-api-key Skip automatic runtime API key creation');
140
140
  console.log(' --dry-run Show the inferred runtime payload without creating it');
141
141
  console.log(' --all-ready Register every ready local model in the current scope');
142
- console.log(' --ignore-model <name> Ignore detected model by name with --ignore-digest');
142
+ console.log(' --ignore-model <name> Deny a detected model on this device with --ignore-digest');
143
143
  console.log(' --ignore-digest <sha> Digest used with --ignore-model');
144
144
  console.log(' --digest <sha> Digest used by ignore when the model name is ambiguous');
145
145
  console.log(' --interval-seconds <n> Override daemon scan interval');
@@ -1022,7 +1022,7 @@ function buildInteractiveInboxSections(inbox) {
1022
1022
  shellLine('Ready to connect', inbox.groups.ready_to_connect.length),
1023
1023
  shellLine('Needs confirmation', inbox.groups.needs_confirmation.length),
1024
1024
  shellLine('Connected', inbox.groups.connected.length),
1025
- shellLine('Ignored', inbox.groups.ignored.length),
1025
+ shellLine('Denied on this device', inbox.groups.ignored.length),
1026
1026
  ...(inbox.summary.next_recommended_action ? [shellLine('Next action', formatSmartInboxActionValue(inbox.summary.next_recommended_action))] : []),
1027
1027
  ],
1028
1028
  },
@@ -1044,7 +1044,7 @@ function buildInteractiveInboxItemSections(item, group) {
1044
1044
  : group === 'connected'
1045
1045
  ? 'Connected'
1046
1046
  : group === 'ignored'
1047
- ? 'Ignored'
1047
+ ? 'Denied on this device'
1048
1048
  : group.replaceAll('_', ' ');
1049
1049
  const detailKeys = [
1050
1050
  'verification_summary',
@@ -1424,7 +1424,7 @@ function formatSmartInboxActionValue(action, itemType, connectableModelName) {
1424
1424
  case 'defer':
1425
1425
  return 'Ask Later';
1426
1426
  case 'ignore':
1427
- return 'Do Not Register';
1427
+ return 'Deny on This Device';
1428
1428
  default:
1429
1429
  return action.replaceAll('_', ' ');
1430
1430
  }
@@ -1451,7 +1451,7 @@ function printSmartInbox(inbox) {
1451
1451
  printInboxGroup('Ready to Connect', inbox.groups.ready_to_connect);
1452
1452
  printInboxGroup('Needs Confirmation', inbox.groups.needs_confirmation);
1453
1453
  printInboxGroup('Connected', inbox.groups.connected);
1454
- printInboxGroup('Ignored', inbox.groups.ignored);
1454
+ printInboxGroup('Denied on This Device', inbox.groups.ignored);
1455
1455
  if (inbox.summary.next_recommended_action) {
1456
1456
  console.log(`Next recommended action: ${formatSmartInboxActionValue(inbox.summary.next_recommended_action)}`);
1457
1457
  }
@@ -1881,11 +1881,11 @@ async function run() {
1881
1881
  if (ignoreModel && ignoreDigest) {
1882
1882
  const ignored = service.markModelIgnored(ignoreModel, ignoreDigest);
1883
1883
  if (!ignored) {
1884
- console.error(`[forkit-connect] Model not found for ignore: ${ignoreModel} ${ignoreDigest}`);
1884
+ console.error(`[forkit-connect] Model not found for deny-on-this-device: ${ignoreModel} ${ignoreDigest}`);
1885
1885
  process.exitCode = 2;
1886
1886
  return;
1887
1887
  }
1888
- console.log(`[forkit-connect] Ignored model: ${ignoreModel} (${ignoreDigest})`);
1888
+ console.log(`[forkit-connect] Denied model on this device: ${ignoreModel} (${ignoreDigest})`);
1889
1889
  return;
1890
1890
  }
1891
1891
  const result = await service.runDiscoveryCycle();
@@ -2840,7 +2840,7 @@ async function run() {
2840
2840
  case 'connected':
2841
2841
  return 'Connected';
2842
2842
  case 'ignored':
2843
- return 'Ignored';
2843
+ return 'Denied on this device';
2844
2844
  default:
2845
2845
  return group.replaceAll('_', ' ');
2846
2846
  }
@@ -2907,21 +2907,21 @@ async function run() {
2907
2907
  }
2908
2908
  const ignored = service.markModelIgnored(model.model, model.digest);
2909
2909
  if (!ignored) {
2910
- console.error('Ignore failed.');
2910
+ console.error('Deny on this device failed.');
2911
2911
  process.exitCode = 2;
2912
2912
  return;
2913
2913
  }
2914
- console.log(`[forkit-connect] Ignored model: ${model.model} (${model.digest})`);
2914
+ console.log(`[forkit-connect] Denied model on this device: ${model.model} (${model.digest})`);
2915
2915
  process.exitCode = 0;
2916
2916
  return;
2917
2917
  }
2918
2918
  if (item.item_type === 'runtime') {
2919
2919
  service.markRuntimeIgnored(selector);
2920
- console.log(`[forkit-connect] Ignored runtime: ${item.display_name}`);
2920
+ console.log(`[forkit-connect] Denied runtime on this device: ${item.display_name}`);
2921
2921
  process.exitCode = 0;
2922
2922
  return;
2923
2923
  }
2924
- console.log('[forkit-connect] Ignore is not available for this inbox item type from the public menu yet.');
2924
+ console.log('[forkit-connect] Deny on this device is not available for this inbox item type from the public menu yet.');
2925
2925
  };
2926
2926
  const runInteractiveDeferInboxItem = (item) => {
2927
2927
  const selector = extractInboxItemSelector(item);
@@ -4060,7 +4060,7 @@ async function run() {
4060
4060
  }
4061
4061
  const ignored = service.markModelIgnored(resolvedModel.model, resolvedModel.digest);
4062
4062
  if (!ignored) {
4063
- console.error('Ignore failed.');
4063
+ console.error('Deny on this device failed.');
4064
4064
  process.exitCode = 2;
4065
4065
  return;
4066
4066
  }
package/dist/launcher.js CHANGED
@@ -687,8 +687,8 @@ function buildDiscovery(service) {
687
687
  let actionLabel = 'Register';
688
688
  let actionTone = 'primary';
689
689
  if (group === 'ignored') {
690
- statusLabel = 'Ignored';
691
- statusMeta = 'Held back locally until you review it again.';
690
+ statusLabel = 'Denied on this device';
691
+ statusMeta = 'This device will keep it out of the active review queue until you reopen it.';
692
692
  statusTone = 'muted';
693
693
  actionLabel = 'Review';
694
694
  actionTone = 'muted';
@@ -777,7 +777,14 @@ function buildDiscovery(service) {
777
777
  let statusTone = 'ok';
778
778
  let actionLabel = 'Register';
779
779
  let actionTone = 'primary';
780
- if (agent.status === 'inactive' || group === 'ignored') {
780
+ if (group === 'ignored') {
781
+ statusLabel = 'Denied on this device';
782
+ statusMeta = 'This device will keep it out of the active review queue until you reopen it.';
783
+ statusTone = 'muted';
784
+ actionLabel = 'Review';
785
+ actionTone = 'muted';
786
+ }
787
+ else if (agent.status === 'inactive') {
781
788
  statusLabel = 'Inactive';
782
789
  statusMeta = 'Paused locally until the agent is seen again.';
783
790
  statusTone = 'muted';
@@ -861,8 +868,8 @@ function buildDiscovery(service) {
861
868
  statusTone = 'ok';
862
869
  }
863
870
  else if (group === 'ignored') {
864
- statusLabel = 'Ignored';
865
- statusMeta = 'Runtime review is deferred locally.';
871
+ statusLabel = 'Denied on this device';
872
+ statusMeta = 'This device will keep runtime review out of the active queue until you reopen it.';
866
873
  statusTone = 'muted';
867
874
  }
868
875
  else if (group === 'needs_confirmation') {
@@ -1800,11 +1807,12 @@ function renderLauncherHtml(launcherToken) {
1800
1807
 
1801
1808
  .quick-review-chip:focus-visible,
1802
1809
  .quick-review-primary:focus-visible,
1803
- .quick-review-options-button:focus-visible,
1810
+ .quick-review-secondary:focus-visible,
1811
+ .quick-review-danger:focus-visible,
1812
+ .quick-review-tertiary:focus-visible,
1804
1813
  .review-mode-button:focus-visible,
1805
1814
  .quick-review-field select:focus-visible,
1806
- .discovery-review-field select:focus-visible,
1807
- .quick-review-options-menu button:focus-visible {
1815
+ .discovery-review-field select:focus-visible {
1808
1816
  outline: 2px solid rgba(157, 238, 245, 0.72);
1809
1817
  outline-offset: 2px;
1810
1818
  }
@@ -2083,9 +2091,8 @@ function renderLauncherHtml(launcherToken) {
2083
2091
 
2084
2092
  .quick-review-actions {
2085
2093
  display: grid;
2086
- grid-template-columns: minmax(0, 1fr) auto;
2087
2094
  gap: 10px;
2088
- align-items: start;
2095
+ align-items: stretch;
2089
2096
  }
2090
2097
 
2091
2098
  .review-resolution-actions {
@@ -2130,94 +2137,66 @@ function renderLauncherHtml(launcherToken) {
2130
2137
  }
2131
2138
 
2132
2139
  .quick-review-primary:disabled,
2133
- .quick-review-options-button:disabled {
2140
+ .quick-review-secondary:disabled,
2141
+ .quick-review-danger:disabled,
2142
+ .quick-review-tertiary:disabled {
2134
2143
  opacity: 0.45;
2135
2144
  cursor: not-allowed;
2136
2145
  }
2137
2146
 
2138
- .quick-review-options-wrap {
2139
- position: relative;
2140
- }
2141
-
2142
- .quick-review-options-button {
2143
- min-height: 52px;
2144
- padding: 0 16px;
2145
- border-radius: 16px;
2146
- border: 1px solid rgba(241, 235, 223, 0.14);
2147
- background: rgba(255,255,255,0.05);
2148
- color: #fff7ea;
2149
- font-size: 0.92rem;
2150
- font-weight: 600;
2151
- cursor: pointer;
2152
- min-width: 122px;
2153
- transition: background 160ms ease, border-color 160ms ease;
2154
- }
2155
-
2156
- .quick-review-options-button:hover {
2157
- background: rgba(255,255,255,0.08);
2158
- border-color: rgba(157, 238, 245, 0.22);
2159
- }
2160
-
2161
- .quick-review-options-menu {
2162
- position: absolute;
2163
- top: calc(100% + 8px);
2164
- right: 0;
2165
- min-width: 214px;
2147
+ .quick-review-secondary-actions {
2166
2148
  display: grid;
2167
- gap: 6px;
2168
- padding: 10px;
2169
- border-radius: 18px;
2170
- border: 1px solid rgba(241, 235, 223, 0.12);
2171
- background: rgba(19, 20, 31, 0.98);
2172
- box-shadow: 0 22px 44px rgba(7, 10, 24, 0.38);
2149
+ grid-template-columns: repeat(2, minmax(0, 1fr));
2150
+ gap: 10px;
2173
2151
  }
2174
2152
 
2175
- .quick-review-options-menu button {
2153
+ .quick-review-secondary,
2154
+ .quick-review-danger,
2155
+ .quick-review-tertiary {
2176
2156
  min-height: 46px;
2177
- border-radius: 12px;
2178
- border: 1px solid transparent;
2179
- background: rgba(255,255,255,0.04);
2180
- color: #f7efe4;
2181
- text-align: left;
2182
- padding: 10px 12px;
2157
+ border-radius: 14px;
2183
2158
  font-size: 0.9rem;
2184
2159
  font-weight: 600;
2185
2160
  cursor: pointer;
2161
+ transition: background 160ms ease, border-color 160ms ease, color 160ms ease;
2186
2162
  }
2187
2163
 
2188
- .quick-review-options-menu button[hidden] {
2189
- display: none;
2190
- }
2191
-
2192
- .quick-review-menu-copy {
2193
- display: grid;
2194
- gap: 2px;
2164
+ .quick-review-secondary {
2165
+ border: 1px solid rgba(241, 235, 223, 0.14);
2166
+ background: rgba(255,255,255,0.05);
2167
+ color: #fff7ea;
2168
+ padding: 0 14px;
2195
2169
  }
2196
2170
 
2197
- .quick-review-menu-label {
2198
- font-size: 0.9rem;
2199
- line-height: 1.25;
2200
- color: #fff7ea;
2201
- font-weight: 600;
2171
+ .quick-review-secondary:hover {
2172
+ background: rgba(255,255,255,0.08);
2173
+ border-color: rgba(157, 238, 245, 0.22);
2202
2174
  }
2203
2175
 
2204
- .quick-review-menu-meta {
2205
- font-size: 0.76rem;
2206
- line-height: 1.3;
2207
- color: rgba(241, 235, 223, 0.58);
2176
+ .quick-review-danger {
2177
+ border: 1px solid rgba(255, 125, 149, 0.22);
2178
+ background: rgba(109, 29, 46, 0.24);
2179
+ color: #ffd4da;
2180
+ padding: 0 14px;
2208
2181
  }
2209
2182
 
2210
- .quick-review-options-menu button:hover {
2211
- background: rgba(106, 167, 171, 0.14);
2212
- border-color: rgba(106, 167, 171, 0.26);
2183
+ .quick-review-danger:hover {
2184
+ background: rgba(124, 33, 52, 0.34);
2185
+ border-color: rgba(255, 160, 180, 0.32);
2213
2186
  }
2214
2187
 
2215
- .quick-review-options-menu button.danger {
2216
- color: #ffd4da;
2188
+ .quick-review-tertiary {
2189
+ min-height: 0;
2190
+ border: none;
2191
+ background: transparent;
2192
+ color: rgba(157, 238, 245, 0.92);
2193
+ justify-self: start;
2194
+ padding: 0;
2217
2195
  }
2218
2196
 
2219
- .quick-review-options-menu button.danger .quick-review-menu-label {
2220
- color: #ffd4da;
2197
+ .quick-review-tertiary:hover {
2198
+ color: #bdf6fb;
2199
+ text-decoration: underline;
2221
2200
  }
2222
2201
 
2223
2202
  .status-chip {
@@ -6541,29 +6520,11 @@ function renderLauncherHtml(launcherToken) {
6541
6520
  </div>
6542
6521
  <div class="quick-review-actions">
6543
6522
  <button class="quick-review-primary" id="quick-review-primary" type="button" disabled>Approve and register</button>
6544
- <div class="quick-review-options-wrap">
6545
- <button class="quick-review-options-button" id="quick-review-options" type="button" aria-expanded="false" aria-controls="quick-review-options-menu" disabled>Options ▾</button>
6546
- <div class="quick-review-options-menu" id="quick-review-options-menu" hidden>
6547
- <button id="quick-review-open-discovery" type="button">
6548
- <span class="quick-review-menu-copy">
6549
- <span class="quick-review-menu-label">Open full review</span>
6550
- <span class="quick-review-menu-meta">See the full local discovery context.</span>
6551
- </span>
6552
- </button>
6553
- <button id="quick-review-defer" type="button">
6554
- <span class="quick-review-menu-copy">
6555
- <span class="quick-review-menu-label">Not now (24h)</span>
6556
- <span class="quick-review-menu-meta">Hide this prompt until tomorrow.</span>
6557
- </span>
6558
- </button>
6559
- <button id="quick-review-ignore" class="danger" type="button">
6560
- <span class="quick-review-menu-copy">
6561
- <span class="quick-review-menu-label">Ignore locally</span>
6562
- <span class="quick-review-menu-meta">Keep it out of this device review queue.</span>
6563
- </span>
6564
- </button>
6565
- </div>
6523
+ <div class="quick-review-secondary-actions">
6524
+ <button class="quick-review-secondary" id="quick-review-defer" type="button" disabled>Not now</button>
6525
+ <button class="quick-review-danger" id="quick-review-ignore" type="button" disabled>Deny on this device</button>
6566
6526
  </div>
6527
+ <button class="quick-review-tertiary" id="quick-review-open-discovery" type="button" disabled>Open full review</button>
6567
6528
  </div>
6568
6529
  <div class="review-resolution-actions" id="quick-review-resolution" hidden>
6569
6530
  <button class="review-resolution-button" id="quick-review-resolution-primary" type="button" hidden></button>
@@ -6952,8 +6913,8 @@ function renderLauncherHtml(launcherToken) {
6952
6913
  </div>
6953
6914
  <div class="discovery-review-actions">
6954
6915
  <button class="primary" id="discovery-review-primary" type="button" disabled>Review</button>
6955
- <button class="secondary" id="discovery-review-defer" type="button" disabled>Defer 24h</button>
6956
- <button class="danger" id="discovery-review-ignore" type="button" disabled>Ignore</button>
6916
+ <button class="secondary" id="discovery-review-defer" type="button" disabled>Not now</button>
6917
+ <button class="danger" id="discovery-review-ignore" type="button" disabled>Deny on this device</button>
6957
6918
  </div>
6958
6919
  <div class="review-resolution-actions" id="discovery-review-resolution" hidden>
6959
6920
  <button class="review-resolution-button" id="discovery-review-resolution-primary" type="button" hidden></button>
@@ -7878,14 +7839,6 @@ function renderLauncherHtml(launcherToken) {
7878
7839
  }
7879
7840
  }
7880
7841
 
7881
- function setQuickReviewOptionsOpen(open) {
7882
- const button = document.getElementById('quick-review-options');
7883
- const menu = document.getElementById('quick-review-options-menu');
7884
- if (!button || !menu) return;
7885
- menu.hidden = !open;
7886
- button.setAttribute('aria-expanded', open ? 'true' : 'false');
7887
- }
7888
-
7889
7842
  function setQuickReviewPanelOpen(open) {
7890
7843
  const toggle = document.getElementById('quick-review-toggle');
7891
7844
  const panel = document.getElementById('quick-review-panel');
@@ -7901,9 +7854,6 @@ function renderLauncherHtml(launcherToken) {
7901
7854
  }
7902
7855
  : {});
7903
7856
  }
7904
- if (!open) {
7905
- setQuickReviewOptionsOpen(false);
7906
- }
7907
7857
  }
7908
7858
 
7909
7859
  function updateQuickReviewScopeSummary(scopeMode) {
@@ -8001,7 +7951,6 @@ function renderLauncherHtml(launcherToken) {
8001
7951
  const workspaceSelect = document.getElementById('quick-review-workspace');
8002
7952
  const projectSelect = document.getElementById('quick-review-project');
8003
7953
  const primaryButton = document.getElementById('quick-review-primary');
8004
- const optionsButton = document.getElementById('quick-review-options');
8005
7954
  const openDiscoveryButton = document.getElementById('quick-review-open-discovery');
8006
7955
  const deferButton = document.getElementById('quick-review-defer');
8007
7956
  const ignoreButton = document.getElementById('quick-review-ignore');
@@ -8036,17 +7985,16 @@ function renderLauncherHtml(launcherToken) {
8036
7985
  primaryButton.textContent = primaryLabel;
8037
7986
  primaryButton.disabled = item.inboxGroup === 'ignored';
8038
7987
  }
8039
- if (optionsButton) {
8040
- optionsButton.disabled = false;
8041
- }
8042
7988
  if (openDiscoveryButton) {
8043
- openDiscoveryButton.hidden = false;
7989
+ openDiscoveryButton.disabled = false;
8044
7990
  }
8045
7991
  if (deferButton) {
8046
7992
  deferButton.hidden = !canReviewDefer(item);
7993
+ deferButton.disabled = !canReviewDefer(item);
8047
7994
  }
8048
7995
  if (ignoreButton) {
8049
7996
  ignoreButton.hidden = !canReviewIgnore(item);
7997
+ ignoreButton.disabled = !canReviewIgnore(item);
8050
7998
  }
8051
7999
 
8052
8000
  const showScopeChoice = canChooseReviewScope(item);
@@ -8177,24 +8125,22 @@ function renderLauncherHtml(launcherToken) {
8177
8125
  setActivityMessage(result.message || 'Review deferred.', result.ok ? 'ok' : 'warn');
8178
8126
  await refreshAll();
8179
8127
  resetReviewResolutionActions('quick-review');
8180
- setQuickReviewOptionsOpen(false);
8181
8128
  }
8182
8129
 
8183
8130
  async function submitQuickReviewIgnore() {
8184
8131
  const item = getQuickReviewItem();
8185
8132
  if (!item || !canReviewIgnore(item)) {
8186
- setQuickReviewStatus('Ignore is not available for this item.', 'warn');
8133
+ setQuickReviewStatus('Deny on this device is not available for this item.', 'warn');
8187
8134
  return;
8188
8135
  }
8189
8136
  const result = await postAction('/api/discovery/review/ignore', 'Ignoring this review item...', {
8190
8137
  method: 'POST',
8191
8138
  body: JSON.stringify({ kind: item.kind, selector: item.selector }),
8192
8139
  });
8193
- setQuickReviewStatus(result.message || 'Item ignored locally.', result.ok ? 'ok' : 'warn');
8194
- setActivityMessage(result.message || 'Item ignored locally.', result.ok ? 'ok' : 'warn');
8140
+ setQuickReviewStatus(result.message || 'Item denied on this device.', result.ok ? 'ok' : 'warn');
8141
+ setActivityMessage(result.message || 'Item denied on this device.', result.ok ? 'ok' : 'warn');
8195
8142
  await refreshAll();
8196
8143
  resetReviewResolutionActions('quick-review');
8197
- setQuickReviewOptionsOpen(false);
8198
8144
  }
8199
8145
 
8200
8146
  function setDiscoveryReviewButtons(config) {
@@ -8417,7 +8363,7 @@ function renderLauncherHtml(launcherToken) {
8417
8363
  async function submitDiscoveryReviewDefer() {
8418
8364
  const item = getSelectedDiscoveryItem();
8419
8365
  if (!item || !canReviewDefer(item)) {
8420
- setDiscoveryReviewStatus('Defer is not available for this item.', 'warn');
8366
+ setDiscoveryReviewStatus('Not now is not available for this item.', 'warn');
8421
8367
  return;
8422
8368
  }
8423
8369
  const result = await postAction('/api/discovery/review/defer', 'Deferring this review...', {
@@ -8433,15 +8379,15 @@ function renderLauncherHtml(launcherToken) {
8433
8379
  async function submitDiscoveryReviewIgnore() {
8434
8380
  const item = getSelectedDiscoveryItem();
8435
8381
  if (!item || !canReviewIgnore(item)) {
8436
- setDiscoveryReviewStatus('Ignore is not available for this item.', 'warn');
8382
+ setDiscoveryReviewStatus('Deny on this device is not available for this item.', 'warn');
8437
8383
  return;
8438
8384
  }
8439
8385
  const result = await postAction('/api/discovery/review/ignore', 'Ignoring this review item...', {
8440
8386
  method: 'POST',
8441
8387
  body: JSON.stringify({ kind: item.kind, selector: item.selector }),
8442
8388
  });
8443
- setDiscoveryReviewStatus(result.message || 'Item ignored locally.', result.ok ? 'ok' : 'warn');
8444
- setActivityMessage(result.message || 'Item ignored locally.', result.ok ? 'ok' : 'warn');
8389
+ setDiscoveryReviewStatus(result.message || 'Item denied on this device.', result.ok ? 'ok' : 'warn');
8390
+ setActivityMessage(result.message || 'Item denied on this device.', result.ok ? 'ok' : 'warn');
8445
8391
  await refreshAll();
8446
8392
  resetReviewResolutionActions('discovery-review');
8447
8393
  }
@@ -9689,14 +9635,14 @@ function renderLauncherHtml(launcherToken) {
9689
9635
  selectedDiscoveryId = item.id;
9690
9636
  if (item.kind === 'runtime') {
9691
9637
  if (item.inboxGroup === 'ignored') {
9692
- setActivityMessage(item.detailSummary || item.statusMeta || (item.name + ' is currently ignored locally.'), 'warn');
9638
+ setActivityMessage(item.detailSummary || item.statusMeta || (item.name + ' is currently denied on this device.'), 'warn');
9693
9639
  return;
9694
9640
  }
9695
9641
  setView('runtime');
9696
9642
  return;
9697
9643
  }
9698
9644
  if (item.inboxGroup === 'ignored') {
9699
- setActivityMessage(item.detailSummary || item.statusMeta || (item.name + ' is currently ignored locally.'), 'warn');
9645
+ setActivityMessage(item.detailSummary || item.statusMeta || (item.name + ' is currently denied on this device.'), 'warn');
9700
9646
  return;
9701
9647
  }
9702
9648
  if (item.kind === 'model' && (item.actionLabel === 'Open' || item.actionLabel === 'Review')) {
@@ -9704,7 +9650,7 @@ function renderLauncherHtml(launcherToken) {
9704
9650
  return;
9705
9651
  }
9706
9652
  if (item.kind === 'model' && item.actionLabel === 'Undo') {
9707
- setActivityMessage('Ignored model restore is not available from the launcher yet.', 'warn');
9653
+ setActivityMessage('Restore from denied-on-this-device state is not available from the launcher yet.', 'warn');
9708
9654
  return;
9709
9655
  }
9710
9656
  if (item.kind === 'model') {
@@ -9726,14 +9672,14 @@ function renderLauncherHtml(launcherToken) {
9726
9672
  selectedDiscoveryId = item.id;
9727
9673
  if (item.kind === 'runtime') {
9728
9674
  if (item.inboxGroup === 'ignored') {
9729
- setActivityMessage(item.detailSummary || item.statusMeta || (item.name + ' is currently ignored locally.'), 'warn');
9675
+ setActivityMessage(item.detailSummary || item.statusMeta || (item.name + ' is currently denied on this device.'), 'warn');
9730
9676
  return;
9731
9677
  }
9732
9678
  setView('runtime');
9733
9679
  return;
9734
9680
  }
9735
9681
  if (item.inboxGroup === 'ignored') {
9736
- setActivityMessage(item.detailSummary || item.statusMeta || (item.name + ' is currently ignored locally.'), 'warn');
9682
+ setActivityMessage(item.detailSummary || item.statusMeta || (item.name + ' is currently denied on this device.'), 'warn');
9737
9683
  return;
9738
9684
  }
9739
9685
  if (item.actionLabel === 'Open' || item.actionLabel === 'Review') {
@@ -9742,7 +9688,7 @@ function renderLauncherHtml(launcherToken) {
9742
9688
  }
9743
9689
  if (item.kind === 'model') {
9744
9690
  if (item.actionLabel === 'Undo') {
9745
- setActivityMessage('Ignored model restore is not available from the launcher yet.', 'warn');
9691
+ setActivityMessage('Restore from denied-on-this-device state is not available from the launcher yet.', 'warn');
9746
9692
  return;
9747
9693
  }
9748
9694
  await openRegistrationScopeDialog(item);
@@ -10296,18 +10242,9 @@ function renderLauncherHtml(launcherToken) {
10296
10242
  void handleReviewResolutionAction('quick-review', String(quickReviewResolutionSecondary.dataset.action || '').trim());
10297
10243
  });
10298
10244
  }
10299
- const quickReviewOptionsButton = document.getElementById('quick-review-options');
10300
- if (quickReviewOptionsButton) {
10301
- quickReviewOptionsButton.addEventListener('click', (event) => {
10302
- event.stopPropagation();
10303
- const menu = document.getElementById('quick-review-options-menu');
10304
- setQuickReviewOptionsOpen(Boolean(menu && menu.hidden));
10305
- });
10306
- }
10307
10245
  const quickReviewOpenDiscovery = document.getElementById('quick-review-open-discovery');
10308
10246
  if (quickReviewOpenDiscovery) {
10309
10247
  quickReviewOpenDiscovery.addEventListener('click', () => {
10310
- setQuickReviewOptionsOpen(false);
10311
10248
  setQuickReviewPanelOpen(false);
10312
10249
  setView('discovery');
10313
10250
  renderDiscoveryRows();
@@ -11260,17 +11197,17 @@ function createLauncherApp(options) {
11260
11197
  }
11261
11198
  if (kind === 'model') {
11262
11199
  options.service.ignoreDetectedModel(selector);
11263
- response.json({ ok: true, message: 'Model review ignored locally.' });
11200
+ response.json({ ok: true, message: 'Model review denied on this device.' });
11264
11201
  return;
11265
11202
  }
11266
11203
  if (kind === 'runtime') {
11267
11204
  options.service.ignoreRuntimeSuggestion(selector);
11268
- response.json({ ok: true, message: 'Runtime review ignored locally.' });
11205
+ response.json({ ok: true, message: 'Runtime review denied on this device.' });
11269
11206
  return;
11270
11207
  }
11271
11208
  if (kind === 'agent') {
11272
11209
  options.service.ignoreDetectedAgent(selector);
11273
- response.json({ ok: true, message: 'Agent review ignored locally.' });
11210
+ response.json({ ok: true, message: 'Agent review denied on this device.' });
11274
11211
  return;
11275
11212
  }
11276
11213
  response.status(400).json({ ok: false, message: 'Unsupported review kind.' });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "forkit-connect",
3
- "version": "0.1.13",
3
+ "version": "0.1.15",
4
4
  "description": "Forkit Connect Local Engine - The Global AI Governance Fabric",
5
5
  "license": "MIT",
6
6
  "main": "dist/index.js",