@gmickel/gno 2.5.1 → 2.7.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 (160) hide show
  1. package/README.md +60 -5
  2. package/assets/skill/README.md +5 -1
  3. package/assets/skill/SKILL.md +80 -4
  4. package/assets/skill/cli-reference.md +132 -2
  5. package/assets/skill/examples.md +30 -0
  6. package/assets/skill/mcp-reference.md +54 -1
  7. package/assets/skill/recipes/capture-and-file.md +6 -0
  8. package/assets/skill/recipes/memory-file-decision.md +6 -0
  9. package/assets/skill/recipes/memory-supersede-fact.md +5 -0
  10. package/assets/skill/recipes/session-evidence-lookup.md +98 -0
  11. package/assets/spa-production.json.gz +0 -0
  12. package/browser-extension/artifacts/{gno-browser-clipper-v2.5.1.zip → gno-browser-clipper-v2.7.0.zip} +0 -0
  13. package/browser-extension/artifacts/gno-browser-clipper-v2.7.0.zip.sha256 +1 -0
  14. package/browser-extension/dist/manifest.json +1 -1
  15. package/package.json +2 -1
  16. package/spec/cli.md +449 -35
  17. package/spec/mcp.md +234 -4
  18. package/spec/output-schemas/ask.schema.json +1 -1
  19. package/spec/output-schemas/capture-receipt.schema.json +4 -1
  20. package/spec/output-schemas/doctor.schema.json +88 -0
  21. package/spec/output-schemas/error.schema.json +11 -2
  22. package/spec/output-schemas/get.schema.json +1 -1
  23. package/spec/output-schemas/mcp-capture-result.schema.json +4 -2
  24. package/spec/output-schemas/memory-remember.schema.json +10 -4
  25. package/spec/output-schemas/multi-get.schema.json +4 -1
  26. package/spec/output-schemas/peek.schema.json +2 -9
  27. package/spec/output-schemas/request-status.schema.json +113 -0
  28. package/spec/output-schemas/resident-status.schema.json +22 -0
  29. package/spec/output-schemas/search-result.schema.json +1 -1
  30. package/spec/output-schemas/search-results.schema.json +1 -1
  31. package/spec/output-schemas/sessions-automation-run.schema.json +46 -0
  32. package/spec/output-schemas/sessions-discovery.schema.json +38 -0
  33. package/spec/output-schemas/sessions-import-receipt.schema.json +156 -0
  34. package/spec/output-schemas/sessions-status.schema.json +432 -0
  35. package/spec/output-schemas/status.schema.json +98 -0
  36. package/src/cli/commands/ask.ts +14 -2
  37. package/src/cli/commands/capture.ts +55 -96
  38. package/src/cli/commands/daemon.ts +41 -0
  39. package/src/cli/commands/doctor.ts +54 -20
  40. package/src/cli/commands/embed.ts +41 -3
  41. package/src/cli/commands/ls.ts +3 -0
  42. package/src/cli/commands/memory.ts +12 -3
  43. package/src/cli/commands/query.ts +5 -0
  44. package/src/cli/commands/request-status.ts +59 -0
  45. package/src/cli/commands/reset.ts +39 -5
  46. package/src/cli/commands/sessions.ts +713 -0
  47. package/src/cli/commands/shared.ts +14 -1
  48. package/src/cli/commands/status.ts +63 -5
  49. package/src/cli/commands/vec.ts +54 -0
  50. package/src/cli/detach.ts +29 -1
  51. package/src/cli/errors.ts +13 -9
  52. package/src/cli/program.ts +441 -2
  53. package/src/cli/session-binding.ts +49 -0
  54. package/src/config/types.ts +8 -0
  55. package/src/core/capture-publish.ts +239 -0
  56. package/src/core/capture-sync.ts +12 -2
  57. package/src/core/host-paths.ts +31 -0
  58. package/src/core/memory-remember.ts +234 -122
  59. package/src/core/memory-types.ts +11 -0
  60. package/src/core/network-boundary-inventory.ts +8 -0
  61. package/src/core/request-receipts.ts +671 -0
  62. package/src/core/shutdown-budget.ts +6 -0
  63. package/src/core/vector-partition-status.ts +52 -0
  64. package/src/embed/backlog.ts +124 -18
  65. package/src/embed/fingerprint.ts +6 -3
  66. package/src/embed/retry.ts +66 -27
  67. package/src/embed/variant-backlog.ts +15 -10
  68. package/src/embed/variant-retry.ts +31 -22
  69. package/src/index.ts +30 -2
  70. package/src/llm/native-worker/dispatcher.ts +2 -0
  71. package/src/llm/native-worker/embedding-identity.ts +42 -0
  72. package/src/llm/native-worker/protocol.ts +1 -0
  73. package/src/llm/types.ts +3 -0
  74. package/src/mcp/context.ts +17 -0
  75. package/src/mcp/http-egress.ts +4 -0
  76. package/src/mcp/http-transport.ts +2 -0
  77. package/src/mcp/resources/index.ts +6 -5
  78. package/src/mcp/tool-descriptions-core.ts +1 -1
  79. package/src/mcp/tools/capture.ts +87 -85
  80. package/src/mcp/tools/index.ts +77 -4
  81. package/src/mcp/tools/memory-remember.ts +8 -1
  82. package/src/mcp/tools/memory-shared.ts +7 -1
  83. package/src/mcp/tools/request-status.ts +73 -0
  84. package/src/mcp/tools/sessions.ts +208 -0
  85. package/src/mcp/tools/status.ts +4 -0
  86. package/src/pipeline/hybrid.ts +37 -7
  87. package/src/pipeline/vsearch.ts +14 -2
  88. package/src/sdk/client.ts +180 -84
  89. package/src/sdk/index.ts +6 -0
  90. package/src/sdk/types.ts +54 -2
  91. package/src/serve/capture-service.ts +98 -32
  92. package/src/serve/config-sync.ts +3 -2
  93. package/src/serve/embed-scheduler.ts +133 -19
  94. package/src/serve/host-path-redaction.ts +79 -0
  95. package/src/serve/public/app.tsx +4 -1
  96. package/src/serve/public/components/CaptureModal.tsx +26 -8
  97. package/src/serve/public/components/sessions/AutomationPanel.tsx +800 -0
  98. package/src/serve/public/components/sessions/ImportReceipt.tsx +238 -0
  99. package/src/serve/public/components/sessions/SessionSearch.tsx +286 -0
  100. package/src/serve/public/components/sessions/SourcesPanel.tsx +541 -0
  101. package/src/serve/public/components/sessions/api.ts +40 -0
  102. package/src/serve/public/globals.built.css +1 -1
  103. package/src/serve/public/hooks/use-api.ts +26 -3
  104. package/src/serve/public/lib/request-intent.ts +77 -0
  105. package/src/serve/public/lib/snippet.tsx +52 -0
  106. package/src/serve/public/lib/workspace-actions.ts +12 -1
  107. package/src/serve/public/lib/workspace-tabs.ts +2 -0
  108. package/src/serve/public/pages/Dashboard.tsx +22 -9
  109. package/src/serve/public/pages/DocView.tsx +25 -6
  110. package/src/serve/public/pages/DocumentEditor.tsx +224 -104
  111. package/src/serve/public/pages/Search.tsx +1 -41
  112. package/src/serve/public/pages/Sessions.tsx +350 -0
  113. package/src/serve/resident-runtime.ts +69 -4
  114. package/src/serve/resident-status.ts +13 -1
  115. package/src/serve/routes/api.ts +476 -147
  116. package/src/serve/routes/sessions.ts +766 -0
  117. package/src/serve/security.ts +9 -0
  118. package/src/serve/server.ts +215 -10
  119. package/src/serve/session-automation.ts +146 -0
  120. package/src/serve/status-model.ts +16 -0
  121. package/src/serve/status.ts +2 -0
  122. package/src/serve/watch-reconciliation-shared.ts +3 -0
  123. package/src/serve/watch-service-events.ts +3 -2
  124. package/src/serve/watch-service-run-flush.ts +35 -2
  125. package/src/serve/watch-service.ts +5 -0
  126. package/src/sessions/archive.ts +348 -0
  127. package/src/sessions/automation-state.ts +444 -0
  128. package/src/sessions/automation-status.ts +239 -0
  129. package/src/sessions/automation.ts +1169 -0
  130. package/src/sessions/binding.ts +105 -0
  131. package/src/sessions/claude-hook.ts +240 -0
  132. package/src/sessions/config.ts +176 -0
  133. package/src/sessions/format.ts +191 -0
  134. package/src/sessions/import-child-env.ts +8 -0
  135. package/src/sessions/import-child.ts +152 -0
  136. package/src/sessions/parsers/claude-code.ts +259 -0
  137. package/src/sessions/parsers/codex.ts +303 -0
  138. package/src/sessions/parsers/hermes.ts +248 -0
  139. package/src/sessions/parsers/openclaw.ts +496 -0
  140. package/src/sessions/parsers/shared.ts +184 -0
  141. package/src/sessions/sanitize.ts +222 -0
  142. package/src/sessions/service.ts +1533 -0
  143. package/src/sessions/setup.ts +477 -0
  144. package/src/sessions/sources.ts +518 -0
  145. package/src/sessions/state.ts +118 -0
  146. package/src/sessions/types.ts +457 -0
  147. package/src/store/migrations/031-runtime-independent-vectors.ts +29 -0
  148. package/src/store/migrations/032-vector-runtime-callers.ts +17 -0
  149. package/src/store/migrations/index.ts +4 -0
  150. package/src/store/sqlite/adapter.ts +76 -16
  151. package/src/store/sqlite/scoped-index.ts +9 -0
  152. package/src/store/types.ts +11 -1
  153. package/src/store/vector/lazy.ts +46 -43
  154. package/src/store/vector/runtime-compat.ts +651 -0
  155. package/src/store/vector/sqlite-vec.ts +20 -2
  156. package/src/store/vector/status.ts +276 -35
  157. package/src/store/vector/types.ts +2 -0
  158. package/src/store/vector/variant-search.ts +71 -23
  159. package/src/store/vector/variants.ts +49 -14
  160. package/browser-extension/artifacts/gno-browser-clipper-v2.5.1.zip.sha256 +0 -1
package/spec/mcp.md CHANGED
@@ -153,7 +153,7 @@ the resident gateway applies one profile to every connected client.
153
153
 
154
154
  | Profile | Without `--enable-write` | With `--enable-write` |
155
155
  | ---------------- | ----------------------------------------------------------------------------------------------------- | ------------------------------------------------------- |
156
- | `full` (default) | Every read tool below (34) | Every read tool plus every write tool (53) |
156
+ | `full` (default) | Every read tool below (37) | Every read tool plus every write tool (59) |
157
157
  | `core` | `gno_query`, `gno_search`, `gno_get`, `gno_multi_get`, `gno_context`, `gno_changes`, `gno_recall` (7) | The 7 read tools plus `gno_capture`, `gno_remember` (9) |
158
158
 
159
159
  Both lists are exact: `core` advertises nothing else, and `full` is byte-for-byte
@@ -232,6 +232,10 @@ the core memory service acquires the same `.mcp-write.lock` lease for every
232
232
  memory write, so an MCP remember and a CLI writer serialise on one lease. A
233
233
  lease that stays busy past the wait window returns `MEMORY_WRITE_LEASE_BUSY`.
234
234
 
235
+ With a `requestId`, `gno_capture` and `gno_remember` admit the request under
236
+ this same lease; there is no second lock. A request whose earlier attempt
237
+ still holds the lease past the wait window returns `REQUEST_PENDING`.
238
+
235
239
  ### Resident Streamable HTTP boundary
236
240
 
237
241
  `gno serve` and `gno daemon` mount the same stateful MCP surface at `/mcp`.
@@ -263,6 +267,15 @@ Because `gno serve` shares this listener with its Web UI and REST API, it
263
267
  remains loopback-only. Use the headless `gno daemon` command for an explicitly
264
268
  authenticated non-loopback MCP listener.
265
269
 
270
+ HTTP MCP results never carry a host absolute path, whatever the peer zone:
271
+ every `absPath` field (`source.absPath` on search/query/ask/get/multi-get
272
+ results, top-level `absPath` on `gno_capture` and `gno_remember` receipts,
273
+ `similar[].absPath`, peek `recent[].absPath`) is removed from both
274
+ `structuredContent` and the text content, and a resource header's `source:`
275
+ line names the collection-relative path. Callers address documents by `uri`
276
+ and `relPath`. Stdio callers keep host paths. The field inventory lives in
277
+ [docs/API.md](../docs/API.md#host-paths-and-remote-callers).
278
+
266
279
  HTTP MCP remains read-only unless `gateway.enableWrite: true` or
267
280
  `--mcp-enable-write` is explicitly set. Bearer authentication alone does not
268
281
  authorize mutation. Unauthorized calls to write tools fail with HTTP 403 before
@@ -1339,6 +1352,21 @@ counters; it never claims attachment to another process.
1339
1352
  "totalDocuments": 150,
1340
1353
  "totalChunks": 800,
1341
1354
  "embeddingBacklog": 0,
1355
+ "vectorPartitions": [
1356
+ {
1357
+ "id": "3f2a9c1b2d4e...",
1358
+ "model": "hf:Qwen/Qwen3-Embedding-0.6B-GGUF/Qwen3-Embedding-0.6B-Q8_0.gguf",
1359
+ "dimensions": 1024,
1360
+ "state": "active",
1361
+ "legacy": false,
1362
+ "retrieval": true,
1363
+ "droppable": false,
1364
+ "owners": 500,
1365
+ "provenance": "CUDA, Bun 1.4.2",
1366
+ "compatibleRuntimes": ["CUDA, Bun 1.4.2", "CPU, Bun 1.3.14"],
1367
+ "incompatibleRuntimes": []
1368
+ }
1369
+ ],
1342
1370
  "contentTypeBoost": {
1343
1371
  "rulesFingerprint": "<sha256>",
1344
1372
  "rules": [{ "id": "decision", "searchBoost": 2 }]
@@ -1348,6 +1376,16 @@ counters; it never claims attachment to another process.
1348
1376
  }
1349
1377
  ```
1350
1378
 
1379
+ `vectorPartitions` (omitted when none exist) lists the embedding model's
1380
+ vector partitions; `embeddingBacklog` and per-collection embedded counts use
1381
+ the one with `retrieval: true`, the partition this server process's queries
1382
+ read under the same selection rule as retrieval (`vectorRuntime` reports
1383
+ `vectors`, `unavailable` with a reason, or `unresolved` before its first query
1384
+ or embed). `droppable` marks what `gno vec drop` accepts. Other partitions carry `state`, `owners` and a
1385
+ readable `provenance`; `compatibleRuntimes` names the runtimes that read a
1386
+ partition and `incompatibleRuntimes` names runtimes measured unable to
1387
+ reproduce the stored vectors, whose queries use lexical retrieval only.
1388
+
1351
1389
  `contentTypeBoost` is a redacted ranking-status projection. It exposes only
1352
1390
  normalized IDs/factors plus the rules fingerprint; path prefixes are never
1353
1391
  returned.
@@ -1531,6 +1569,10 @@ Create a new document in a collection (write-enabled).
1531
1569
  "capturedAt": { "type": "string", "format": "date-time" },
1532
1570
  "externalId": { "type": "string" }
1533
1571
  }
1572
+ },
1573
+ "requestId": {
1574
+ "type": "string",
1575
+ "description": "Optional caller request ID (1-128 of A-Z a-z 0-9 . _ : -). Reuse the same ID when retrying the same write after a lost response; a new intent needs a new ID"
1534
1576
  }
1535
1577
  },
1536
1578
  "required": ["collection"]
@@ -1585,6 +1627,13 @@ Create a new document in a collection (write-enabled).
1585
1627
  writing
1586
1628
  - Writes run under the MCP write lock and are only registered when the server
1587
1629
  starts with `--enable-write` or `GNO_MCP_ENABLE_WRITE=1`
1630
+ - `requestId` (optional) makes a retry of the same call safe; look it up with
1631
+ [`gno_request_status`](#gno_request_status). Semantics:
1632
+ `docs/guides/retries-and-request-ids.md`
1633
+ - With a `requestId`, the result adds
1634
+ `request: { requestId, status: "committed", replayed, committedAt }` and the
1635
+ text output adds `Request: <id> committed` (`(replayed)` on a replay). The
1636
+ field is absent when no `requestId` was sent
1588
1637
 
1589
1638
  **Output Schema:** `gno://schemas/mcp-capture-result@1.0`, compatible with the
1590
1639
  shared `gno://schemas/capture-receipt@1.0` contract.
@@ -1651,6 +1700,10 @@ file edits update existing notes, `gno_remember` upserts a fact.
1651
1700
  "source": {
1652
1701
  "type": "string",
1653
1702
  "description": "Free-text evidence for the fact"
1703
+ },
1704
+ "requestId": {
1705
+ "type": "string",
1706
+ "description": "Optional caller request ID (1-128 of A-Z a-z 0-9 . _ : -). Reuse the same ID when retrying the same write after a lost response; a new intent needs a new ID"
1654
1707
  }
1655
1708
  },
1656
1709
  "required": ["text", "collection", "scopes"]
@@ -1663,11 +1716,14 @@ file edits update existing notes, `gno_remember` upserts a fact.
1663
1716
  fact, nothing written
1664
1717
  - `outcome: "candidates"` — likely matches and no `decision`; `candidates[]`
1665
1718
  carry `similarity` and `match` (`exact` | `likely` | `weak`), nothing written
1666
- - `outcome: "added" | "superseded"` — `record`, `absPath`, and
1719
+ - `outcome: "added" | "superseded"` — `record`, `absPath` (stdio only), and
1667
1720
  `sync.status` (`completed` before the call returns; the fact is lexically
1668
1721
  searchable)
1669
1722
  - `matching` — `mode` (`semantic` | `lexical`), `threshold`, and
1670
1723
  `semanticUnavailable` when lexical matching was used
1724
+ - `request` — present on `existing`, `added`, and `superseded` results when a
1725
+ `requestId` was sent: `{ requestId, status: "committed", replayed,
1726
+ committedAt }`
1671
1727
 
1672
1728
  **Notes:**
1673
1729
 
@@ -1682,6 +1738,10 @@ file edits update existing notes, `gno_remember` upserts a fact.
1682
1738
  - The core service holds the shared write lease for the write and lexical
1683
1739
  sync; the MCP adapter takes no lock of its own
1684
1740
  - Identity mapping is the same as `gno_recall`
1741
+ - `requestId` requires `decision` (`add` or `supersede`); a candidates-only
1742
+ call with a `requestId` returns `REQUEST_ID_INVALID`. `caller`, `session`,
1743
+ and the MCP session are not part of the request identity. Semantics:
1744
+ `docs/guides/retries-and-request-ids.md`
1685
1745
  - Annotations: `readOnlyHint: false`, `destructiveHint: false`,
1686
1746
  `idempotentHint: false`
1687
1747
 
@@ -1693,10 +1753,178 @@ file edits update existing notes, `gno_remember` upserts a fact.
1693
1753
  `MEMORY_PREDECESSOR_NOT_FOUND`, `MEMORY_PREDECESSOR_HASH_MISMATCH`,
1694
1754
  `MEMORY_SUPERSEDE_CONFLICT`, `MEMORY_FENCED_REPLAY`, `MEMORY_FENCED_DERIVED`,
1695
1755
  `MEMORY_WRITE_LEASE_BUSY`, `MEMORY_SYNC_FAILED`,
1696
- `MEMORY_SUPERSEDE_PROJECTION_FAILED`, `MEMORY_QUERY_FAILED`.
1756
+ `MEMORY_SUPERSEDE_PROJECTION_FAILED`, `MEMORY_QUERY_FAILED`, and the
1757
+ `REQUEST_*` codes listed under [`gno_request_status`](#gno_request_status).
1697
1758
 
1698
1759
  ---
1699
1760
 
1761
+ ### gno_request_status
1762
+
1763
+ Look up a `requestId` sent with `gno_capture` or `gno_remember` before retrying
1764
+ the write (write-enabled server).
1765
+
1766
+ The tool is read-only but registered only when the server starts with
1767
+ `--enable-write` (or `GNO_MCP_ENABLE_WRITE=1`), and only on the `full` tool
1768
+ profile; `core` does not advertise it.
1769
+
1770
+ **Input Schema:**
1771
+
1772
+ ```json
1773
+ {
1774
+ "type": "object",
1775
+ "properties": {
1776
+ "requestId": {
1777
+ "type": "string",
1778
+ "description": "Request ID previously sent with gno_capture or gno_remember"
1779
+ }
1780
+ },
1781
+ "required": ["requestId"]
1782
+ }
1783
+ ```
1784
+
1785
+ **Response (`structuredContent`):** `gno://schemas/request-status@1.0`
1786
+
1787
+ ```json
1788
+ {
1789
+ "requestId": "0f8e5c1a-3c1e-4d0b-9a57-2f4f3b8f2c11",
1790
+ "status": "committed",
1791
+ "operation": "capture",
1792
+ "createdAt": "2026-09-24T08:00:00.000Z",
1793
+ "updatedAt": "2026-09-24T08:00:00.120Z",
1794
+ "result": {
1795
+ "uri": "gno://notes/inbox/2026-09-24/capture-3f9c.md",
1796
+ "docid": "#a1b2c3",
1797
+ "contentHash": "<sha256>"
1798
+ }
1799
+ }
1800
+ ```
1801
+
1802
+ - `status`: `pending` | `committed` | `expired` | `not_found`.
1803
+ - `operation`: `capture` | `remember` | `document.update`. `result` appears
1804
+ only for `committed` and carries `uri`, `docid`, and `contentHash` (or
1805
+ `sourceHash` for a document update). Never note or fact content. A
1806
+ `not_found` result has only `requestId` and `status`.
1807
+ - Text output: `Request:`, `Status:`, and, when present, `Operation:`,
1808
+ `Updated:`, `URI:` lines.
1809
+
1810
+ **Namespaces:** stdio uses the local-owner namespace shared with the CLI, SDK,
1811
+ and `gno serve` REST; resident Streamable HTTP uses the authorized identity
1812
+ (loopback, or the configured bearer token), not the MCP session. Visibility
1813
+ and token-rotation rules: `docs/guides/retries-and-request-ids.md`.
1814
+
1815
+ **Annotations:** `readOnlyHint: true`, `destructiveHint: false`,
1816
+ `idempotentHint: true`, `openWorldHint: false`.
1817
+
1818
+ **Request error codes** (on `gno_capture`, `gno_remember`, and this tool; tool
1819
+ error text `CODE: message`, `structuredContent.error` = `CODE`):
1820
+ `REQUEST_ID_INVALID`, `REQUEST_ID_CONFLICT`, `REQUEST_EXPIRED`,
1821
+ `REQUEST_PENDING`, `REQUEST_RECOVERY_CONFLICT`, `REQUEST_CAPACITY_EXHAUSTED`,
1822
+ `REQUEST_LEDGER_UNAVAILABLE`. Meanings:
1823
+ `docs/guides/retries-and-request-ids.md#errors`.
1824
+
1825
+ ---
1826
+
1827
+ ### gno_sessions_status
1828
+
1829
+ Read-only status of a session-archive server (a server started with the
1830
+ dedicated archive `--config` and `--index`). Registered with the `full`
1831
+ profile only; not part of `core`.
1832
+
1833
+ **Input Schema:** `{}` (no arguments).
1834
+
1835
+ **Output:** the shared `sessions-status` schema
1836
+ (`spec/output-schemas/sessions-status.schema.json`): archive collections with
1837
+ thread counts and, per owner-registered source, its ID, harness, destination
1838
+ collection, availability, unit counts (complete, incomplete, failed,
1839
+ pending), `sourceUnavailable`, `staleParser` and last import time, and the
1840
+ `automation` block (daemon state, per-profile state, hook and schedule
1841
+ switches, pending and running work, last run, last success, next due time,
1842
+ recovery action). The result contains no host paths.
1843
+
1844
+ **Errors:** `SESSIONS_NOT_CONFIGURED` when the server's config has no
1845
+ `sessions` block.
1846
+
1847
+ ### gno_sessions_import
1848
+
1849
+ Manually import one owner-registered session source into the archive and sync
1850
+ the changed archive files (write-enabled; `full` profile only). There is no
1851
+ MCP discovery tool: remote clients never learn host directories.
1852
+
1853
+ **Input Schema:**
1854
+
1855
+ ```json
1856
+ {
1857
+ "type": "object",
1858
+ "additionalProperties": false,
1859
+ "required": ["sourceId"],
1860
+ "properties": {
1861
+ "sourceId": {
1862
+ "type": "string",
1863
+ "description": "ID of an owner-registered session source (see gno_sessions_status)"
1864
+ },
1865
+ "dryRun": {
1866
+ "type": "boolean",
1867
+ "description": "Parse and report without writing archive or index state"
1868
+ },
1869
+ "limit": {
1870
+ "type": "integer",
1871
+ "minimum": 1,
1872
+ "maximum": 100000,
1873
+ "description": "Maximum changed units processed this call; the rest are deferred"
1874
+ }
1875
+ }
1876
+ }
1877
+ ```
1878
+
1879
+ Unknown keys (for example `paths`) are rejected: MCP imports name a
1880
+ registered source ID only.
1881
+
1882
+ **Output:** the shared `sessions-import-receipt` schema. Partial imports
1883
+ (`status: "partial"`) stay visible and are retried by the next call; the
1884
+ receipt carries no host paths or session content.
1885
+
1886
+ Registered only with `--enable-write` (like `gno_capture` and
1887
+ `gno_remember`); without it the tool is not advertised. A dispatch while
1888
+ writes are disabled returns `WRITE_DISABLED`.
1889
+
1890
+ ### gno_sessions_automation_run
1891
+
1892
+ Run one owner-configured automation profile now through the manual importer
1893
+ and record the outcome in automation status (write-enabled; `full` profile
1894
+ only). It cannot enable hooks or schedules, add sources, or change
1895
+ destinations; those stay local-owner operations.
1896
+
1897
+ **Input Schema:**
1898
+
1899
+ ```json
1900
+ {
1901
+ "type": "object",
1902
+ "additionalProperties": false,
1903
+ "required": ["profileId"],
1904
+ "properties": {
1905
+ "profileId": {
1906
+ "type": "string",
1907
+ "description": "ID of an owner-configured automation profile (see gno_sessions_status)"
1908
+ }
1909
+ }
1910
+ }
1911
+ ```
1912
+
1913
+ **Output:** the shared `sessions-automation-run` schema
1914
+ (`spec/output-schemas/sessions-automation-run.schema.json`): `ran`,
1915
+ `outcome` (`complete`, `up_to_date`, `partial`, `failed`, or `not_started`),
1916
+ `reason`, `pending`, and one `sessions-import-receipt` per source. No host
1917
+ paths or session content.
1918
+
1919
+ **Errors:** `SESSIONS_UNKNOWN_PROFILE`, `SESSIONS_NOT_CONFIGURED`,
1920
+ `WRITE_DISABLED`; unknown keys are rejected.
1921
+
1922
+ **Errors:** `SESSIONS_UNKNOWN_SOURCE`, `SESSIONS_SOURCE_UNAVAILABLE`,
1923
+ `SESSIONS_UNKNOWN_COLLECTION`, `SESSIONS_INVALID_INPUT`,
1924
+ `SESSIONS_NOT_CONFIGURED`; `SESSIONS_BUSY` when another import holds the
1925
+ archive lock; `SESSIONS_RUNTIME_FAILURE` (fixed, path-free message) for filesystem or
1926
+ index failures.
1927
+
1700
1928
  ### gno_list_tags
1701
1929
 
1702
1930
  List all tags with document counts.
@@ -2721,7 +2949,7 @@ Content includes optional header comment:
2721
2949
  |-------|-------------|
2722
2950
  | URI | Full gno:// URI |
2723
2951
  | docid | Document ID |
2724
- | source | Absolute path to source file |
2952
+ | source | Absolute path to source file (stdio); collection-relative path over HTTP |
2725
2953
  | mime | Source file MIME type |
2726
2954
  | language | Document language hint (if available) |
2727
2955
 
@@ -2793,6 +3021,8 @@ Resource errors use standard MCP error responses.
2793
3021
  - `MEMORY_*` — Memory contract errors from `gno_recall` / `gno_remember`;
2794
3022
  the stable code set is `MemoryErrorCode` in `src/core/memory.ts` and each
2795
3023
  tool section above lists the codes it returns
3024
+ - `REQUEST_*` — Request ID errors from `gno_capture`, `gno_remember`, and
3025
+ `gno_request_status`; see [`gno_request_status`](#gno_request_status)
2796
3026
 
2797
3027
  ---
2798
3028
 
@@ -322,7 +322,7 @@
322
322
  "properties": {
323
323
  "absPath": {
324
324
  "type": "string",
325
- "description": "Absolute path (included with --source or in MCP)"
325
+ "description": "Absolute source path. Host path: local callers only (CLI, stdio MCP, same-host Web UI/REST); omitted for remote REST and HTTP MCP callers, which identify the document by uri + relPath."
326
326
  },
327
327
  "relPath": {
328
328
  "type": "string",
@@ -43,7 +43,7 @@
43
43
  },
44
44
  "absPath": {
45
45
  "type": "string",
46
- "description": "Absolute path when the local surface exposes it."
46
+ "description": "Absolute path of the written file. Host path: local callers only (CLI, stdio MCP, same-host Web UI/REST); omitted for remote REST and HTTP MCP callers, which identify the document by uri + relPath."
47
47
  },
48
48
  "serverInstanceId": {
49
49
  "type": "string"
@@ -129,6 +129,9 @@
129
129
  "overwritten",
130
130
  "conflict"
131
131
  ]
132
+ },
133
+ "request": {
134
+ "$ref": "gno://schemas/request-status@1.0#/$defs/requestReceipt"
132
135
  }
133
136
  },
134
137
  "definitions": {
@@ -243,6 +243,94 @@
243
243
  "type": "string"
244
244
  }
245
245
  },
246
+ "vectorPartitions": {
247
+ "type": "array",
248
+ "description": "Vector partitions (vector-partitions check); `retrieval` marks the one status and search use",
249
+ "items": {
250
+ "type": "object",
251
+ "additionalProperties": false,
252
+ "required": [
253
+ "id",
254
+ "model",
255
+ "dimensions",
256
+ "state",
257
+ "legacy",
258
+ "retrieval",
259
+ "droppable",
260
+ "owners",
261
+ "provenance",
262
+ "compatibleRuntimes",
263
+ "incompatibleRuntimes"
264
+ ],
265
+ "properties": {
266
+ "id": {
267
+ "type": "string"
268
+ },
269
+ "model": {
270
+ "type": "string"
271
+ },
272
+ "dimensions": {
273
+ "type": "integer",
274
+ "minimum": 1
275
+ },
276
+ "state": {
277
+ "type": "string",
278
+ "enum": ["active", "shadow"]
279
+ },
280
+ "legacy": {
281
+ "type": "boolean"
282
+ },
283
+ "retrieval": {
284
+ "type": "boolean"
285
+ },
286
+ "droppable": {
287
+ "type": "boolean"
288
+ },
289
+ "owners": {
290
+ "type": "integer",
291
+ "minimum": 0
292
+ },
293
+ "provenance": {
294
+ "type": "string"
295
+ },
296
+ "compatibleRuntimes": {
297
+ "type": "array",
298
+ "items": {
299
+ "type": "string"
300
+ }
301
+ },
302
+ "incompatibleRuntimes": {
303
+ "type": "array",
304
+ "items": {
305
+ "type": "string"
306
+ }
307
+ }
308
+ }
309
+ }
310
+ },
311
+ "vectorRuntime": {
312
+ "type": "object",
313
+ "additionalProperties": false,
314
+ "required": ["label", "state", "partition"],
315
+ "description": "This process's runtime, resolved by the same selection rule its queries use",
316
+ "properties": {
317
+ "label": {
318
+ "type": ["string", "null"],
319
+ "description": "Runtime recorded by this caller's last query or embed"
320
+ },
321
+ "state": {
322
+ "type": "string",
323
+ "enum": ["vectors", "unavailable", "unresolved"],
324
+ "description": "vectors: queries read `partition`; unavailable: lexical retrieval only; unresolved: no query or embed has resolved this caller yet"
325
+ },
326
+ "partition": {
327
+ "type": ["string", "null"]
328
+ },
329
+ "reason": {
330
+ "type": "string"
331
+ }
332
+ }
333
+ },
246
334
  "embeddingFingerprint": {
247
335
  "type": "object",
248
336
  "description": "Embedding freshness fingerprint diagnostics",
@@ -12,8 +12,17 @@
12
12
  "properties": {
13
13
  "code": {
14
14
  "type": "string",
15
- "description": "Error code matching exit code",
16
- "enum": ["VALIDATION", "RUNTIME"]
15
+ "description": "CLI error code; each maps to one exit code (see spec/cli.md Error Output)",
16
+ "enum": [
17
+ "VALIDATION",
18
+ "RUNTIME",
19
+ "NOT_RUNNING",
20
+ "BUSY",
21
+ "AUDIT_FINDINGS",
22
+ "AUDIT_PARTIAL",
23
+ "CONTEXT_STALE",
24
+ "CONTEXT_CONFLICT"
25
+ ]
17
26
  },
18
27
  "message": {
19
28
  "type": "string",
@@ -62,7 +62,7 @@
62
62
  "properties": {
63
63
  "absPath": {
64
64
  "type": "string",
65
- "description": "Absolute path to source file"
65
+ "description": "Absolute path to source file. Host path: local callers only (CLI, stdio MCP, same-host Web UI/REST); omitted for remote REST and HTTP MCP callers, which identify the document by uri + relPath."
66
66
  },
67
67
  "relPath": {
68
68
  "type": "string",
@@ -7,7 +7,6 @@
7
7
  "required": [
8
8
  "docid",
9
9
  "uri",
10
- "absPath",
11
10
  "collection",
12
11
  "relPath",
13
12
  "created",
@@ -34,7 +33,7 @@
34
33
  },
35
34
  "absPath": {
36
35
  "type": "string",
37
- "description": "Absolute path to the created file"
36
+ "description": "Absolute path to the created file. Stdio callers only; omitted for HTTP MCP callers, which identify the file by uri + relPath."
38
37
  },
39
38
  "collection": {
40
39
  "type": "string",
@@ -129,6 +128,9 @@
129
128
  "type": "string",
130
129
  "description": "Server instance UUID",
131
130
  "format": "uuid"
131
+ },
132
+ "request": {
133
+ "$ref": "gno://schemas/request-status@1.0#/$defs/requestReceipt"
132
134
  }
133
135
  },
134
136
  "definitions": {
@@ -12,7 +12,10 @@
12
12
  "properties": {
13
13
  "outcome": { "const": "existing" },
14
14
  "record": { "$ref": "#/$defs/fact" },
15
- "matching": { "$ref": "#/$defs/matching" }
15
+ "matching": { "$ref": "#/$defs/matching" },
16
+ "request": {
17
+ "$ref": "gno://schemas/request-status@1.0#/$defs/requestReceipt"
18
+ }
16
19
  }
17
20
  },
18
21
  {
@@ -31,16 +34,19 @@
31
34
  {
32
35
  "type": "object",
33
36
  "additionalProperties": false,
34
- "required": ["outcome", "record", "absPath", "sync", "matching"],
37
+ "required": ["outcome", "record", "sync", "matching"],
35
38
  "properties": {
36
39
  "outcome": { "enum": ["added", "superseded"] },
37
40
  "record": { "$ref": "#/$defs/fact" },
38
41
  "absPath": {
39
42
  "type": "string",
40
- "description": "Absolute path of the fact file that was written."
43
+ "description": "Absolute path of the fact file that was written. Host path: local callers only (CLI, stdio MCP, same-host Web UI/REST); omitted for remote REST and HTTP MCP callers, which identify the document by uri + relPath."
41
44
  },
42
45
  "sync": { "$ref": "#/$defs/sync" },
43
- "matching": { "$ref": "#/$defs/matching" }
46
+ "matching": { "$ref": "#/$defs/matching" },
47
+ "request": {
48
+ "$ref": "gno://schemas/request-status@1.0#/$defs/requestReceipt"
49
+ }
44
50
  }
45
51
  }
46
52
  ],
@@ -40,7 +40,10 @@
40
40
  "type": "object",
41
41
  "required": ["relPath", "mime", "ext"],
42
42
  "properties": {
43
- "absPath": { "type": "string" },
43
+ "absPath": {
44
+ "type": "string",
45
+ "description": "Absolute path to source file. Host path: local callers only (CLI, stdio MCP, same-host Web UI/REST); omitted for remote REST and HTTP MCP callers, which identify the document by uri + relPath."
46
+ },
44
47
  "relPath": { "type": "string" },
45
48
  "mime": { "type": "string" },
46
49
  "ext": { "type": "string", "pattern": "^\\.[a-zA-Z0-9]+$" }
@@ -99,14 +99,7 @@
99
99
  "items": {
100
100
  "type": "object",
101
101
  "additionalProperties": false,
102
- "required": [
103
- "docid",
104
- "uri",
105
- "title",
106
- "collection",
107
- "absPath",
108
- "modifiedAt"
109
- ],
102
+ "required": ["docid", "uri", "title", "collection", "modifiedAt"],
110
103
  "properties": {
111
104
  "docid": {
112
105
  "type": "string",
@@ -129,7 +122,7 @@
129
122
  "absPath": {
130
123
  "type": "string",
131
124
  "minLength": 1,
132
- "description": "Absolute source path (collection root + relative path)"
125
+ "description": "Absolute source path (collection root + relative path). CLI and stdio MCP only; omitted for HTTP MCP callers."
133
126
  },
134
127
  "modifiedAt": {
135
128
  "type": "string",