@gmickel/gno 2.6.0 → 2.7.1

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 (106) hide show
  1. package/README.md +25 -30
  2. package/assets/skill/SKILL.md +5 -3
  3. package/assets/skill/cli-reference.md +9 -2
  4. package/assets/skill/mcp-reference.md +2 -1
  5. package/assets/spa-production.json.gz +0 -0
  6. package/browser-extension/artifacts/{gno-browser-clipper-v2.6.0.zip → gno-browser-clipper-v2.7.1.zip} +0 -0
  7. package/browser-extension/artifacts/gno-browser-clipper-v2.7.1.zip.sha256 +1 -0
  8. package/browser-extension/dist/manifest.json +1 -1
  9. package/package.json +2 -1
  10. package/spec/cli.md +109 -18
  11. package/spec/mcp.md +36 -2
  12. package/spec/output-schemas/ask.schema.json +1 -1
  13. package/spec/output-schemas/capture-receipt.schema.json +1 -1
  14. package/spec/output-schemas/collection-list.schema.json +2 -2
  15. package/spec/output-schemas/doctor.schema.json +88 -0
  16. package/spec/output-schemas/error.schema.json +11 -2
  17. package/spec/output-schemas/get.schema.json +1 -1
  18. package/spec/output-schemas/mcp-capture-result.schema.json +1 -2
  19. package/spec/output-schemas/memory-remember.schema.json +2 -2
  20. package/spec/output-schemas/multi-get.schema.json +4 -1
  21. package/spec/output-schemas/peek.schema.json +2 -9
  22. package/spec/output-schemas/resident-status.schema.json +22 -0
  23. package/spec/output-schemas/search-result.schema.json +1 -1
  24. package/spec/output-schemas/search-results.schema.json +1 -1
  25. package/spec/output-schemas/status.schema.json +110 -16
  26. package/src/cli/commands/ask.ts +31 -12
  27. package/src/cli/commands/doctor.ts +54 -20
  28. package/src/cli/commands/embed.ts +41 -3
  29. package/src/cli/commands/ls.ts +6 -1
  30. package/src/cli/commands/query.ts +5 -0
  31. package/src/cli/commands/status.ts +63 -5
  32. package/src/cli/commands/vec.ts +54 -0
  33. package/src/cli/detach.ts +29 -1
  34. package/src/cli/errors.ts +13 -9
  35. package/src/cli/program.ts +53 -1
  36. package/src/core/capture-sync.ts +9 -2
  37. package/src/core/host-paths.ts +49 -0
  38. package/src/core/memory-remember.ts +4 -3
  39. package/src/core/request-receipts.ts +63 -9
  40. package/src/core/shutdown-budget.ts +6 -0
  41. package/src/core/vector-partition-status.ts +52 -0
  42. package/src/core/windows-private-path.ts +136 -1
  43. package/src/embed/backlog.ts +145 -27
  44. package/src/embed/fingerprint.ts +6 -3
  45. package/src/embed/retry.ts +66 -27
  46. package/src/embed/variant-backlog.ts +48 -18
  47. package/src/embed/variant-retry.ts +31 -22
  48. package/src/index.ts +21 -2
  49. package/src/llm/inference-scope.ts +18 -0
  50. package/src/llm/native-worker/dispatcher.ts +2 -0
  51. package/src/llm/native-worker/embedding-identity.ts +42 -0
  52. package/src/llm/native-worker/protocol.ts +1 -0
  53. package/src/llm/types.ts +3 -0
  54. package/src/mcp/context.ts +9 -0
  55. package/src/mcp/resources/index.ts +6 -5
  56. package/src/mcp/tool-descriptions-core.ts +1 -1
  57. package/src/mcp/tools/capture.ts +1 -3
  58. package/src/mcp/tools/index.ts +11 -4
  59. package/src/mcp/tools/memory-remember.ts +1 -1
  60. package/src/mcp/tools/status.ts +23 -6
  61. package/src/pipeline/hybrid.ts +37 -7
  62. package/src/pipeline/vsearch.ts +14 -2
  63. package/src/serve/embed-scheduler.ts +133 -19
  64. package/src/serve/host-path-redaction.ts +116 -0
  65. package/src/serve/public/components/BootstrapStatus.tsx +5 -3
  66. package/src/serve/public/components/CaptureModal.tsx +1 -1
  67. package/src/serve/public/components/CollectionModelDialog.tsx +16 -13
  68. package/src/serve/public/components/CollectionsEmptyState.tsx +5 -3
  69. package/src/serve/public/components/FirstRunWizard.tsx +4 -2
  70. package/src/serve/public/components/sessions/SessionSearch.tsx +2 -2
  71. package/src/serve/public/components/sessions/SourcesPanel.tsx +77 -60
  72. package/src/serve/public/globals.built.css +1 -1
  73. package/src/serve/public/hooks/use-api.ts +17 -2
  74. package/src/serve/public/lib/request-intent.ts +8 -0
  75. package/src/serve/public/{components/sessions → lib}/snippet.tsx +2 -3
  76. package/src/serve/public/pages/Collections.tsx +16 -13
  77. package/src/serve/public/pages/Connectors.tsx +7 -4
  78. package/src/serve/public/pages/Dashboard.tsx +16 -11
  79. package/src/serve/public/pages/DocView.tsx +10 -5
  80. package/src/serve/public/pages/DocumentEditor.tsx +91 -14
  81. package/src/serve/public/pages/Search.tsx +1 -41
  82. package/src/serve/resident-runtime.ts +33 -1
  83. package/src/serve/resident-status.ts +13 -1
  84. package/src/serve/routes/sessions.ts +61 -5
  85. package/src/serve/server.ts +15 -12
  86. package/src/serve/status-model.ts +26 -6
  87. package/src/serve/status.ts +4 -7
  88. package/src/serve/watch-reconciliation-shared.ts +3 -0
  89. package/src/serve/watch-service-events.ts +3 -2
  90. package/src/serve/watch-service-run-flush.ts +35 -2
  91. package/src/serve/watch-service.ts +5 -0
  92. package/src/store/migrations/031-runtime-independent-vectors.ts +29 -0
  93. package/src/store/migrations/032-vector-runtime-callers.ts +17 -0
  94. package/src/store/migrations/index.ts +4 -0
  95. package/src/store/sqlite/adapter.ts +24 -3
  96. package/src/store/sqlite/change-journal-store.ts +1 -1
  97. package/src/store/sqlite/legacy-vector-ownership.ts +2 -1
  98. package/src/store/types.ts +11 -1
  99. package/src/store/vector/lazy.ts +46 -43
  100. package/src/store/vector/runtime-compat.ts +651 -0
  101. package/src/store/vector/sqlite-vec.ts +20 -2
  102. package/src/store/vector/status.ts +276 -35
  103. package/src/store/vector/types.ts +2 -0
  104. package/src/store/vector/variant-search.ts +71 -23
  105. package/src/store/vector/variants.ts +49 -14
  106. package/browser-extension/artifacts/gno-browser-clipper-v2.6.0.zip.sha256 +0 -1
@@ -394,8 +394,12 @@ export function SourcesPanel({
394
394
  const [notice, setNotice] = useState<{ text: string } | null>(null);
395
395
  const noticeRef = useRef<HTMLParagraphElement>(null);
396
396
  useFocusOnChange(notice, noticeRef);
397
+ // Bumped when the Discover button's run finishes: focus moves to its outcome.
398
+ const [discoveredCount, setDiscoveredCount] = useState(0);
399
+ const discoveryRef = useRef<HTMLDivElement>(null);
400
+ useFocusOnChange(discoveredCount, discoveryRef);
397
401
 
398
- const discover = async () => {
402
+ const discover = async (focusOutcome = false) => {
399
403
  setDiscovering(true);
400
404
  const result = await sessionsApi<SessionsDiscovery>(
401
405
  "/api/sessions/discover"
@@ -403,6 +407,7 @@ export function SourcesPanel({
403
407
  setDiscovering(false);
404
408
  setDiscoverError(result.error);
405
409
  setDiscovery(result.data);
410
+ if (focusOutcome) setDiscoveredCount((count) => count + 1);
406
411
  };
407
412
 
408
413
  const registered = async (sourceId: string, collection: string) => {
@@ -425,7 +430,7 @@ export function SourcesPanel({
425
430
  {localClient && (
426
431
  <Button
427
432
  disabled={discovering}
428
- onClick={() => void discover()}
433
+ onClick={() => void discover(true)}
429
434
  size="sm"
430
435
  variant="outline"
431
436
  >
@@ -473,67 +478,79 @@ export function SourcesPanel({
473
478
  </p>
474
479
  )}
475
480
 
476
- {discoverError && (
477
- <p className="break-words text-destructive text-sm" role="alert">
478
- {discoverError}
479
- </p>
480
- )}
481
- {discovery && (
482
- <div className="space-y-3 rounded-lg border border-dashed border-border/70 p-4">
483
- <h3 className="font-medium">Discovered on this machine</h3>
484
- <p className="text-muted-foreground text-xs">
485
- Preview only: discovery reads nothing into the archive. Register a
486
- source to permit manual imports from it.
487
- </p>
488
- {discovery.candidates.length === 0 && (
489
- <p className="text-muted-foreground text-sm">
490
- No supported session stores were found.
481
+ {(discoverError || discovery) && (
482
+ <div
483
+ aria-label="Discovery results"
484
+ className={`space-y-3 ${FOCUS_RING}`}
485
+ ref={discoveryRef}
486
+ role="region"
487
+ tabIndex={-1}
488
+ >
489
+ {discoverError && (
490
+ <p className="break-words text-destructive text-sm" role="alert">
491
+ {discoverError}
491
492
  </p>
492
493
  )}
493
- <ul className="space-y-4">
494
- {discovery.candidates.map((candidate) => (
495
- <li
496
- className="min-w-0 space-y-2"
497
- key={`${candidate.harness}:${candidate.path}`}
498
- >
499
- <div className="flex flex-wrap items-center gap-2">
500
- <Badge variant="secondary">
501
- {SESSION_HARNESS_LABELS[candidate.harness]}
502
- </Badge>
503
- <span className="min-w-0 break-all font-mono text-xs">
504
- {candidate.path}
505
- </span>
506
- </div>
507
- <p className="text-muted-foreground text-xs">
508
- {candidate.units}
509
- {candidate.truncated ? "+" : ""} units ·{" "}
510
- {formatBytes(candidate.bytes)}
511
- {candidate.formatVersions.length > 0 &&
512
- ` · format ${candidate.formatVersions.join(", ")}`}
494
+ {discovery && (
495
+ <div className="space-y-3 rounded-lg border border-dashed border-border/70 p-4">
496
+ <h3 className="font-medium">Discovered on this machine</h3>
497
+ <p className="text-muted-foreground text-xs">
498
+ Preview only: discovery reads nothing into the archive. Register
499
+ a source to permit manual imports from it.
500
+ </p>
501
+ {discovery.candidates.length === 0 && (
502
+ <p className="text-muted-foreground text-sm">
503
+ No supported session stores were found.
513
504
  </p>
514
- {candidate.registeredAs ? (
515
- <p className="text-sm">
516
- Registered as{" "}
517
- <span className="font-mono">{candidate.registeredAs}</span>
518
- </p>
519
- ) : (
520
- <RegisterForm
521
- candidate={candidate}
522
- archiveCollections={archiveCollections}
523
- onRegistered={registered}
524
- />
525
- )}
526
- </li>
527
- ))}
528
- </ul>
529
- {discovery.warnings.map((warning) => (
530
- <p
531
- className="text-amber-800 text-xs dark:text-amber-200"
532
- key={warning}
533
- >
534
- {warning}
535
- </p>
536
- ))}
505
+ )}
506
+ <ul className="space-y-4">
507
+ {discovery.candidates.map((candidate) => (
508
+ <li
509
+ className="min-w-0 space-y-2"
510
+ key={`${candidate.harness}:${candidate.path}`}
511
+ >
512
+ <div className="flex flex-wrap items-center gap-2">
513
+ <Badge variant="secondary">
514
+ {SESSION_HARNESS_LABELS[candidate.harness]}
515
+ </Badge>
516
+ <span className="min-w-0 break-all font-mono text-xs">
517
+ {candidate.path}
518
+ </span>
519
+ </div>
520
+ <p className="text-muted-foreground text-xs">
521
+ {candidate.units}
522
+ {candidate.truncated ? "+" : ""} units ·{" "}
523
+ {formatBytes(candidate.bytes)}
524
+ {candidate.formatVersions.length > 0 &&
525
+ ` · format ${candidate.formatVersions.join(", ")}`}
526
+ </p>
527
+ {candidate.registeredAs ? (
528
+ <p className="text-sm">
529
+ Registered as{" "}
530
+ <span className="font-mono">
531
+ {candidate.registeredAs}
532
+ </span>
533
+ </p>
534
+ ) : (
535
+ <RegisterForm
536
+ candidate={candidate}
537
+ archiveCollections={archiveCollections}
538
+ onRegistered={registered}
539
+ />
540
+ )}
541
+ </li>
542
+ ))}
543
+ </ul>
544
+ {discovery.warnings.map((warning) => (
545
+ <p
546
+ className="text-amber-800 text-xs dark:text-amber-200"
547
+ key={warning}
548
+ >
549
+ {warning}
550
+ </p>
551
+ ))}
552
+ </div>
553
+ )}
537
554
  </div>
538
555
  )}
539
556
  </section>