@gmickel/gno 1.12.4 → 1.13.0

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 (61) hide show
  1. package/README.md +57 -30
  2. package/assets/skill/SKILL.md +5 -0
  3. package/assets/skill/cli-reference.md +16 -6
  4. package/assets/skill/mcp-reference.md +22 -3
  5. package/package.json +2 -1
  6. package/src/app/constants.ts +43 -10
  7. package/src/app/index-name.ts +127 -0
  8. package/src/cli/commands/doctor-activation.ts +151 -0
  9. package/src/cli/commands/doctor.ts +41 -16
  10. package/src/cli/commands/get.ts +18 -0
  11. package/src/cli/commands/mcp/atomic-config-write.ts +118 -0
  12. package/src/cli/commands/mcp/config-discovery.ts +42 -0
  13. package/src/cli/commands/mcp/config-editors.ts +432 -0
  14. package/src/cli/commands/mcp/config.ts +63 -160
  15. package/src/cli/commands/mcp/install.ts +75 -37
  16. package/src/cli/commands/mcp/paths.ts +141 -136
  17. package/src/cli/commands/mcp/server-entry.ts +66 -0
  18. package/src/cli/commands/mcp/status.ts +189 -57
  19. package/src/cli/commands/mcp/target-display.ts +30 -0
  20. package/src/cli/commands/mcp/uninstall.ts +29 -31
  21. package/src/cli/commands/mcp/yaml-config-editor.ts +257 -0
  22. package/src/cli/commands/mcp/yaml-layout-scanner.ts +447 -0
  23. package/src/cli/commands/multi-get.ts +31 -6
  24. package/src/cli/commands/status.ts +107 -11
  25. package/src/cli/program.ts +66 -20
  26. package/src/core/activation-connector-health.ts +19 -0
  27. package/src/core/activation-probe-plan.ts +321 -0
  28. package/src/core/activation-probe.ts +138 -0
  29. package/src/core/activation-receipt-store.ts +39 -0
  30. package/src/core/activation-status.ts +513 -0
  31. package/src/core/activation-verifier.ts +416 -0
  32. package/src/core/connector-environment.ts +68 -0
  33. package/src/core/connector-policy.ts +233 -0
  34. package/src/core/connector-verification-target.ts +150 -0
  35. package/src/core/connector-verifier.ts +497 -0
  36. package/src/core/indexed-reference.ts +33 -8
  37. package/src/core/runtime-entrypoint.ts +24 -0
  38. package/src/mcp/activation-verification-mode.ts +4 -0
  39. package/src/mcp/server.ts +9 -2
  40. package/src/sdk/client.ts +7 -0
  41. package/src/sdk/types.ts +1 -0
  42. package/src/serve/activation-health.ts +91 -0
  43. package/src/serve/background-runtime.ts +11 -1
  44. package/src/serve/connectors.ts +164 -19
  45. package/src/serve/public/components/BootstrapStatus.tsx +94 -1
  46. package/src/serve/public/components/FirstRunWizard.tsx +13 -51
  47. package/src/serve/public/components/HealthCenter.tsx +8 -2
  48. package/src/serve/public/globals.built.css +1 -1
  49. package/src/serve/public/pages/Connectors.tsx +216 -55
  50. package/src/serve/public/pages/Dashboard.tsx +1 -0
  51. package/src/serve/routes/api.ts +152 -8
  52. package/src/serve/server.ts +44 -9
  53. package/src/serve/status-model.ts +4 -0
  54. package/src/serve/status.ts +79 -35
  55. package/src/store/activation-receipts.ts +390 -0
  56. package/src/store/index.ts +8 -0
  57. package/src/store/migrations/012-activation-receipts.ts +38 -0
  58. package/src/store/migrations/013-fts-sync-marker.ts +39 -0
  59. package/src/store/migrations/index.ts +4 -0
  60. package/src/store/sqlite/adapter.ts +313 -53
  61. package/src/store/types.ts +118 -0
@@ -204,10 +204,8 @@ export function FirstRunWizard({
204
204
  onboarding,
205
205
  onAddCollection,
206
206
  onDownloadModels,
207
- onEmbed,
208
207
  onSync,
209
208
  onSyncComplete,
210
- embedding = false,
211
209
  syncJobId = null,
212
210
  syncing = false,
213
211
  }: FirstRunWizardProps) {
@@ -238,27 +236,19 @@ export function FirstRunWizard({
238
236
  : null;
239
237
  const progressValue = getStepProgress(onboarding);
240
238
  const isShowingRecommended = activeStep?.id === recommendedStepId;
241
- const indexingNeedsEmbeddings =
242
- onboarding.stage === "indexing" &&
243
- onboarding.detail.toLowerCase().includes("embedding");
244
-
245
239
  const runRecommendedAction = () => {
246
240
  if (!activeStep) {
247
241
  return;
248
242
  }
249
- if (activeStep.id === "folders") {
243
+ if (activeStep.action === "add-collection") {
250
244
  onAddCollection();
251
245
  return;
252
246
  }
253
- if (activeStep.id === "models") {
247
+ if (activeStep.action === "download-models") {
254
248
  onDownloadModels();
255
249
  return;
256
250
  }
257
- if (activeStep.id === "indexing" && indexingNeedsEmbeddings && !embedding) {
258
- onEmbed();
259
- return;
260
- }
261
- if (activeStep.id === "indexing" && !syncing) {
251
+ if (activeStep.action === "sync" && !syncing) {
262
252
  onSync();
263
253
  }
264
254
  };
@@ -403,7 +393,7 @@ export function FirstRunWizard({
403
393
  <WizardPanel>
404
394
  <WizardPanelHeader
405
395
  badge={<Badge variant="outline">Safe to rerun</Badge>}
406
- title="Finish first indexing"
396
+ title="Prove lexical retrieval"
407
397
  >
408
398
  <p className="max-w-2xl text-muted-foreground text-sm leading-6">
409
399
  {activeStep.detail}
@@ -419,31 +409,13 @@ export function FirstRunWizard({
419
409
 
420
410
  <WizardActionPanel
421
411
  action={
422
- <Button
423
- disabled={indexingNeedsEmbeddings ? embedding : syncing}
424
- onClick={indexingNeedsEmbeddings ? onEmbed : onSync}
425
- size="lg"
426
- >
412
+ <Button disabled={syncing} onClick={onSync} size="lg">
427
413
  <RefreshCwIcon className="mr-2 size-4" />
428
- {indexingNeedsEmbeddings
429
- ? embedding
430
- ? "Embedding..."
431
- : "Finish embeddings"
432
- : syncing
433
- ? "Syncing..."
434
- : "Run first sync"}
414
+ {syncing ? "Syncing..." : "Run first sync"}
435
415
  </Button>
436
416
  }
437
- body={
438
- indexingNeedsEmbeddings
439
- ? "Your files are indexed. One more embedding pass will unlock semantic search and local answers."
440
- : "Good last step before you move into normal use."
441
- }
442
- title={
443
- indexingNeedsEmbeddings
444
- ? "Finish semantic indexing"
445
- : "Index the current workspace"
446
- }
417
+ body="Builds the local lexical index and proves that this exact folder can return corpus-derived evidence."
418
+ title="Index and verify the current workspace"
447
419
  />
448
420
 
449
421
  {syncJobId && (
@@ -451,7 +423,7 @@ export function FirstRunWizard({
451
423
  <WizardPanelHeader title="Sync progress">
452
424
  <p className="max-w-2xl text-muted-foreground text-sm leading-6">
453
425
  Your first indexing run is in progress. The wizard will advance
454
- once the job finishes and embeddings catch up.
426
+ once the job finishes and lexical retrieval is proven.
455
427
  </p>
456
428
  </WizardPanelHeader>
457
429
  <div style={{ padding: "24px 28px" }}>
@@ -568,24 +540,14 @@ export function FirstRunWizard({
568
540
  </div>
569
541
  {activeStep && activeStep.id !== "preset" && (
570
542
  <Button
571
- disabled={
572
- activeStep.id === "indexing"
573
- ? indexingNeedsEmbeddings
574
- ? embedding
575
- : syncing
576
- : false
577
- }
543
+ disabled={activeStep.action === "sync" ? syncing : false}
578
544
  onClick={runRecommendedAction}
579
545
  size="sm"
580
546
  variant={isShowingRecommended ? "default" : "outline"}
581
547
  >
582
- {activeStep.id === "indexing" && indexingNeedsEmbeddings
583
- ? embedding
584
- ? "Embedding..."
585
- : "Finish embeddings"
586
- : activeStep.id === "indexing" && syncing
587
- ? "Syncing..."
588
- : getStepActionLabel(activeStep.id)}
548
+ {activeStep.action === "sync" && syncing
549
+ ? "Syncing..."
550
+ : getStepActionLabel(activeStep.id)}
589
551
  </Button>
590
552
  )}
591
553
  </div>
@@ -66,7 +66,13 @@ export function HealthCenter({
66
66
  <p className="max-w-3xl text-muted-foreground">{health.summary}</p>
67
67
  </div>
68
68
  <Badge
69
- className="border-primary/20 bg-primary/10 text-primary"
69
+ className={
70
+ health.state === "healthy"
71
+ ? "border-emerald-500/25 bg-emerald-500/10 text-emerald-500"
72
+ : health.state === "setup-required"
73
+ ? "border-destructive/25 bg-destructive/10 text-destructive"
74
+ : "border-amber-500/25 bg-amber-500/10 text-amber-500"
75
+ }
70
76
  variant="outline"
71
77
  >
72
78
  {health.state === "healthy"
@@ -77,7 +83,7 @@ export function HealthCenter({
77
83
  </Badge>
78
84
  </div>
79
85
 
80
- <div className="grid gap-4 md:grid-cols-2 xl:grid-cols-4">
86
+ <div className="grid gap-4 md:grid-cols-2 xl:grid-cols-3">
81
87
  {health.checks.map((check) => {
82
88
  const isBusy = busyAction === check.actionKind;
83
89