@gmickel/gno 1.30.7 → 1.31.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 (32) hide show
  1. package/README.md +2 -2
  2. package/assets/skill/SKILL.md +2 -0
  3. package/assets/skill/mcp-reference.md +6 -0
  4. package/browser-extension/artifacts/{gno-browser-clipper-v1.30.7.zip → gno-browser-clipper-v1.31.0.zip} +0 -0
  5. package/browser-extension/artifacts/gno-browser-clipper-v1.31.0.zip.sha256 +1 -0
  6. package/browser-extension/dist/manifest.json +1 -1
  7. package/package.json +1 -1
  8. package/spec/mcp.md +62 -0
  9. package/spec/output-schemas/section-target-create-result.schema.json +20 -0
  10. package/spec/output-schemas/section-target-resolve-result.schema.json +194 -0
  11. package/spec/output-schemas/section-target.schema.json +118 -0
  12. package/spec/output-schemas/section.schema.json +113 -0
  13. package/src/core/section-parse.ts +187 -0
  14. package/src/core/section-target-link.ts +154 -0
  15. package/src/core/section-target-resolve.ts +351 -0
  16. package/src/core/section-target-transport.ts +519 -0
  17. package/src/core/section-target.ts +263 -0
  18. package/src/core/sections.ts +60 -115
  19. package/src/mcp/AGENTS.md +1 -0
  20. package/src/mcp/CLAUDE.md +1 -0
  21. package/src/mcp/http-egress.ts +1 -0
  22. package/src/mcp/tools/index.ts +19 -0
  23. package/src/mcp/tools/sections.ts +512 -0
  24. package/src/sdk/client.ts +71 -1
  25. package/src/sdk/index.ts +5 -0
  26. package/src/sdk/types.ts +29 -1
  27. package/src/serve/public/globals.built.css +1 -1
  28. package/src/serve/public/lib/section-links.ts +189 -0
  29. package/src/serve/public/pages/DocView.tsx +219 -36
  30. package/src/serve/routes/section-targets.ts +221 -0
  31. package/src/serve/server.ts +34 -0
  32. package/browser-extension/artifacts/gno-browser-clipper-v1.30.7.zip.sha256 +0 -1
package/README.md CHANGED
@@ -117,7 +117,7 @@ gno daemon --detach # headless indexing + resident MCP gateway
117
117
 
118
118
  <!-- public-truth:current-version -->
119
119
 
120
- > Current release: **v1.30.7** — see [CHANGELOG.md](./CHANGELOG.md)
120
+ > Current release: **v1.31.0** — see [CHANGELOG.md](./CHANGELOG.md)
121
121
 
122
122
  <!-- /public-truth -->
123
123
 
@@ -723,7 +723,7 @@ Full-featured markdown editor with:
723
723
 
724
724
  ![GNO Document Viewer](./assets/screenshots/webui-doc-view.jpg)
725
725
 
726
- View documents with full context: outgoing links, backlinks, section outline, and AI-powered related notes sidebar.
726
+ View documents with full context: outgoing links, backlinks, section outline, and AI-powered related notes sidebar. Outline copy-link stays human-readable (`#anchor`); an optional citation link adds a bounded durable selector for conservative recovery after edits.
727
727
 
728
728
  ### Browse Workspace
729
729
 
@@ -329,6 +329,7 @@ When using GNO through MCP, prefer this retrieval order:
329
329
  5. Use graph/link expansion for relationship context: `gno_graph_query` for typed relationship traversal, `gno_graph_neighbors` for nearby documents, `gno_graph_path` for "how are X and Y connected?", `gno_links`/`gno_backlinks` for one-document link expansion, and `gno_similar` for semantic neighbors. Prefer explicit or typed edges over inferred, ambiguous, or similarity edges when confidence matters.
330
330
  6. Use `gno_query_diagnose` when a known target document should have appeared but did not; it reports BM25/vector/fusion/graph/rerank stage presence and filter state.
331
331
  7. Use `gno_get` with `fromLine`/`lineCount` for targeted reads, or `gno_multi_get` to batch top refs.
332
+ 8. Use `gno_section` only when you need a durable section locator or must re-resolve one after edits. Prefer search → `gno_get` for ordinary retrieval. `action=create` needs `ref` plus exactly one of `anchor`|`line`; `action=resolve` needs `ref` plus `target`. Cite or open content only for `exact`/`recovered` results, then follow the tool's ready-to-use `gno_get` guidance (`fromLine = lineStart`; `lineCount = lineEnd - lineStart + 1`). Never navigate or cite `ambiguous`/`stale`/`missing`.
332
333
 
333
334
  For a caller-owned canonical Capsule that should stay fresh locally:
334
335
 
@@ -370,6 +371,7 @@ Use narrower tools when the request tells you to:
370
371
  - `gno_graph_neighbors`: relationship/corpus-navigation questions around a known document
371
372
  - `gno_graph_path`: "how are X and Y connected?" questions
372
373
  - `gno_query_diagnose`: why a named target did or did not surface for a query
374
+ - `gno_section`: create/resolve a durable section target when citation identity matters after edits; follow navigable citations with `gno_get`. Not the default retrieval path.
373
375
 
374
376
  For ambiguous terms, pass `intent` instead of bloating the query text. For typed retrieval, use `queryModes`: `term` for lexical anchors, `intent` for disambiguation, one `hyde` for a hypothetical answer/document.
375
377
 
@@ -107,6 +107,12 @@ Check `gno_status` first when freshness or
107
107
  embeddings may be stale. Use `gno_query_diagnose` when a known target document
108
108
  should have appeared but did not.
109
109
 
110
+ Use `gno_section` only when durable section identity matters (create/resolve a
111
+ `SectionTargetV1`). Prefer ordinary `gno_query` → `gno_get` retrieval first.
112
+ Exact/recovered results include citation lines and ready-to-use `gno_get`
113
+ guidance (`fromLine = lineStart`; `lineCount = lineEnd - lineStart + 1`). Never
114
+ cite or navigate ambiguous/stale/missing results.
115
+
110
116
  Use graph tools for relationship context: `gno_graph` for corpus report/stats,
111
117
  community summaries,
112
118
  `gno_graph_query` for bounded typed-edge traversal,
@@ -0,0 +1 @@
1
+ 01281ef03fe26195c824909c53eed8d04ede0f9a2da72f3c4c19d7e1564e0a0c gno-browser-clipper-v1.31.0.zip
@@ -21,5 +21,5 @@
21
21
  "content_security_policy": {
22
22
  "extension_pages": "script-src 'self'; object-src 'none'; connect-src http://127.0.0.1:*"
23
23
  },
24
- "version": "1.30.7"
24
+ "version": "1.31.0"
25
25
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gmickel/gno",
3
- "version": "1.30.7",
3
+ "version": "1.31.0",
4
4
  "description": "Local semantic search for your documents. Index Markdown, PDF, and Office files with hybrid BM25 + vector search.",
5
5
  "keywords": [
6
6
  "embeddings",
package/spec/mcp.md CHANGED
@@ -166,6 +166,7 @@ Collection names are case-insensitive on input and normalized to lowercase in re
166
166
  - Use `gno_query_diagnose` when a specific important document is missing from results or when you need per-stage retrieval evidence before changing query strategy.
167
167
  - Use `gno_graph_query` for bounded typed-edge traversal over `doc_edges`; keep `gno_graph_neighbors`/`gno_graph_path` for the legacy graph projection.
168
168
  - After search/query returns a `line`, call `gno_get` with `fromLine` and `lineCount` before fetching whole documents.
169
+ - Use `gno_section` to create or resolve durable section targets; only cite/navigate on exact/recovered citations, then follow with `gno_get` line ranges.
169
170
  - Use `gno_multi_get` to batch the top result refs. Keep `maxBytes` bounded to avoid flooding client context.
170
171
  - Check `gno_status` when results look stale, vector search is unavailable, or embedding backlog may explain missing results.
171
172
 
@@ -900,6 +901,67 @@ limited to 242 UTF-8 bytes so `index-<identity>.sqlite` stays within the portabl
900
901
 
901
902
  ---
902
903
 
904
+ ### gno_section
905
+
906
+ Read-only create/resolve for durable `SectionTargetV1` locators against one
907
+ indexed document. Always registered (independent of `enableWrite`). Does not
908
+ write documents, persist targets, or fork the shared parser/resolver.
909
+
910
+ Uses the active indexed store content and the shared core
911
+ create/resolve/transport projection (same bounds, closed validation, and
912
+ fail-closed citation semantics as REST/SDK). Canonical document URI always
913
+ comes from the stored document — never from the caller.
914
+
915
+ **Annotations (descriptive only):**
916
+ `readOnlyHint: true`, `destructiveHint: false`, `idempotentHint: true`,
917
+ `openWorldHint: false`. Authorization remains server-side; annotations do not
918
+ grant or deny writes. `gno_section` is not in `MCP_WRITE_TOOL_NAMES`.
919
+
920
+ **Input Schema (closed, action-discriminated):**
921
+
922
+ ```json
923
+ {
924
+ "type": "object",
925
+ "additionalProperties": false,
926
+ "required": ["action", "ref"],
927
+ "properties": {
928
+ "action": { "enum": ["create", "resolve"] },
929
+ "ref": { "type": "string", "minLength": 1, "maxLength": 2048 },
930
+ "anchor": { "type": "string", "minLength": 1, "maxLength": 512 },
931
+ "line": { "type": "integer", "minimum": 1 },
932
+ "target": { "$ref": "gno://schemas/section-target@1.0" }
933
+ }
934
+ }
935
+ ```
936
+
937
+ The published MCP discovery schema is one closed object because the SDK cannot
938
+ reliably publish/validate Zod unions for tool schemas. Server-side refinements
939
+ enforce the action branches: create requires exactly one of `anchor` or `line`
940
+ (1-based heading line) and forbids `target`; resolve requires a closed
941
+ `SectionTargetV1` and forbids `anchor`/`line`. Unknown fields, unknown actions,
942
+ inverted offsets, and oversized values fail closed before core resolution or
943
+ document reads.
944
+
945
+ **Output Schema:** `gno://schemas/section@1.0`
946
+
947
+ Action-discriminated structured output wrapping the shared create/resolve
948
+ result semantics:
949
+
950
+ - `action: "create"` → `{ schemaVersion:"1.0", action, uri, target }`
951
+ - `action: "resolve"` + `exact`/`recovered` → includes `citation` with
952
+ canonical `uri`, current `anchor`/`title`, inclusive `lineStart`/`lineEnd`,
953
+ and `sourceFingerprint`
954
+ - `action: "resolve"` + `ambiguous`/`stale`/`missing` → omits `citation`;
955
+ model-visible text states the result is not safe to navigate or cite
956
+
957
+ Model-visible `content[0].text` includes the serialized structured JSON for
958
+ MCP 2025-11-25 hosts that ignore `structuredContent`, plus concise `gno_get`
959
+ `fromLine`/`lineCount` follow-up guidance when a navigable citation is present.
960
+
961
+ Existing `gno_get` input/output and line-range behavior are unchanged.
962
+
963
+ ---
964
+
903
965
  ### gno_multi_get
904
966
 
905
967
  Retrieve multiple documents by pattern or list.
@@ -0,0 +1,20 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "gno://schemas/section-target-create-result@1.0",
4
+ "title": "GNO Section Target Create Result",
5
+ "description": "Response from creating a durable SectionTargetV1 against a stored document. Canonical uri always comes from the resolved document.",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "required": ["uri", "target"],
9
+ "properties": {
10
+ "uri": {
11
+ "type": "string",
12
+ "minLength": 1,
13
+ "maxLength": 1024,
14
+ "description": "Canonical stored document URI"
15
+ },
16
+ "target": {
17
+ "$ref": "gno://schemas/section-target@1.0"
18
+ }
19
+ }
20
+ }
@@ -0,0 +1,194 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "gno://schemas/section-target-resolve-result@1.0",
4
+ "title": "GNO Section Target Resolve Result",
5
+ "description": "Conservative section-target resolution result shared by REST and SDK. Citation is present only for navigable exact/recovered statuses. Diagnostics candidates are filtered/capped without truncating identity strings.",
6
+ "oneOf": [
7
+ {
8
+ "type": "object",
9
+ "additionalProperties": false,
10
+ "required": [
11
+ "uri",
12
+ "status",
13
+ "currentFingerprint",
14
+ "target",
15
+ "diagnostics",
16
+ "citation"
17
+ ],
18
+ "properties": {
19
+ "uri": {
20
+ "type": "string",
21
+ "minLength": 1,
22
+ "maxLength": 1024
23
+ },
24
+ "status": {
25
+ "type": "string",
26
+ "enum": ["exact", "recovered"]
27
+ },
28
+ "currentFingerprint": {
29
+ "type": "string",
30
+ "pattern": "^[a-f0-9]{64}$"
31
+ },
32
+ "target": {
33
+ "$ref": "gno://schemas/section-target@1.0"
34
+ },
35
+ "diagnostics": {
36
+ "$ref": "#/definitions/diagnostics"
37
+ },
38
+ "citation": {
39
+ "$ref": "#/definitions/citation"
40
+ }
41
+ }
42
+ },
43
+ {
44
+ "type": "object",
45
+ "additionalProperties": false,
46
+ "required": [
47
+ "uri",
48
+ "status",
49
+ "currentFingerprint",
50
+ "target",
51
+ "diagnostics"
52
+ ],
53
+ "properties": {
54
+ "uri": {
55
+ "type": "string",
56
+ "minLength": 1,
57
+ "maxLength": 1024
58
+ },
59
+ "status": {
60
+ "type": "string",
61
+ "enum": ["ambiguous", "stale", "missing"]
62
+ },
63
+ "currentFingerprint": {
64
+ "type": "string",
65
+ "pattern": "^[a-f0-9]{64}$"
66
+ },
67
+ "target": {
68
+ "$ref": "gno://schemas/section-target@1.0"
69
+ },
70
+ "diagnostics": {
71
+ "$ref": "#/definitions/diagnostics"
72
+ }
73
+ }
74
+ }
75
+ ],
76
+ "definitions": {
77
+ "safePositiveInteger": {
78
+ "type": "integer",
79
+ "minimum": 1,
80
+ "maximum": 9007199254740991
81
+ },
82
+ "safeNonNegativeInteger": {
83
+ "type": "integer",
84
+ "minimum": 0,
85
+ "maximum": 9007199254740991
86
+ },
87
+ "diagnostics": {
88
+ "type": "object",
89
+ "additionalProperties": false,
90
+ "properties": {
91
+ "reason": {
92
+ "type": "string",
93
+ "minLength": 1,
94
+ "maxLength": 256
95
+ },
96
+ "candidates": {
97
+ "type": "array",
98
+ "maxItems": 32,
99
+ "items": {
100
+ "type": "object",
101
+ "additionalProperties": false,
102
+ "required": [
103
+ "anchor",
104
+ "line",
105
+ "title",
106
+ "headingPath",
107
+ "occurrence"
108
+ ],
109
+ "properties": {
110
+ "anchor": {
111
+ "type": "string",
112
+ "minLength": 1,
113
+ "maxLength": 512
114
+ },
115
+ "line": {
116
+ "$ref": "#/definitions/safePositiveInteger"
117
+ },
118
+ "title": {
119
+ "type": "string",
120
+ "minLength": 1,
121
+ "maxLength": 512
122
+ },
123
+ "headingPath": {
124
+ "type": "array",
125
+ "minItems": 1,
126
+ "maxItems": 6,
127
+ "items": {
128
+ "type": "string",
129
+ "minLength": 1,
130
+ "maxLength": 512
131
+ }
132
+ },
133
+ "occurrence": {
134
+ "$ref": "#/definitions/safePositiveInteger"
135
+ }
136
+ }
137
+ }
138
+ },
139
+ "candidateCount": {
140
+ "$ref": "#/definitions/safeNonNegativeInteger",
141
+ "description": "Total candidate count before transport filtering/capping"
142
+ },
143
+ "candidatesTruncated": {
144
+ "type": "boolean",
145
+ "description": "True when any candidate was omitted by bounds filtering or the 32-item cap"
146
+ }
147
+ },
148
+ "dependencies": {
149
+ "candidates": ["candidateCount", "candidatesTruncated"],
150
+ "candidateCount": ["candidatesTruncated", "candidates"],
151
+ "candidatesTruncated": ["candidateCount", "candidates"]
152
+ }
153
+ },
154
+ "citation": {
155
+ "type": "object",
156
+ "additionalProperties": false,
157
+ "required": [
158
+ "uri",
159
+ "anchor",
160
+ "title",
161
+ "lineStart",
162
+ "lineEnd",
163
+ "sourceFingerprint"
164
+ ],
165
+ "properties": {
166
+ "uri": {
167
+ "type": "string",
168
+ "minLength": 1,
169
+ "maxLength": 1024
170
+ },
171
+ "anchor": {
172
+ "type": "string",
173
+ "minLength": 1,
174
+ "maxLength": 512
175
+ },
176
+ "title": {
177
+ "type": "string",
178
+ "minLength": 1,
179
+ "maxLength": 512
180
+ },
181
+ "lineStart": {
182
+ "$ref": "#/definitions/safePositiveInteger"
183
+ },
184
+ "lineEnd": {
185
+ "$ref": "#/definitions/safePositiveInteger"
186
+ },
187
+ "sourceFingerprint": {
188
+ "type": "string",
189
+ "pattern": "^[a-f0-9]{64}$"
190
+ }
191
+ }
192
+ }
193
+ }
194
+ }
@@ -0,0 +1,118 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "gno://schemas/section-target@1.0",
4
+ "title": "GNO Section Target V1",
5
+ "description": "Bounded, versioned, content-derived section locator for conservative citation recovery. Does not embed full section bodies.",
6
+ "type": "object",
7
+ "additionalProperties": false,
8
+ "required": [
9
+ "schemaVersion",
10
+ "document",
11
+ "anchor",
12
+ "headingPath",
13
+ "occurrence",
14
+ "quote",
15
+ "sourceFingerprint",
16
+ "hints"
17
+ ],
18
+ "properties": {
19
+ "schemaVersion": {
20
+ "const": "1",
21
+ "description": "Section target schema version"
22
+ },
23
+ "document": {
24
+ "type": "object",
25
+ "additionalProperties": false,
26
+ "required": ["uri"],
27
+ "properties": {
28
+ "uri": {
29
+ "type": "string",
30
+ "minLength": 1,
31
+ "maxLength": 1024,
32
+ "description": "Canonical document URI"
33
+ }
34
+ }
35
+ },
36
+ "anchor": {
37
+ "type": "string",
38
+ "minLength": 1,
39
+ "maxLength": 512,
40
+ "description": "Human-readable heading anchor at capture time"
41
+ },
42
+ "headingPath": {
43
+ "type": "array",
44
+ "description": "NFC-normalized heading ancestry including the section title",
45
+ "minItems": 1,
46
+ "maxItems": 6,
47
+ "items": {
48
+ "type": "string",
49
+ "minLength": 1,
50
+ "maxLength": 512
51
+ }
52
+ },
53
+ "occurrence": {
54
+ "type": "integer",
55
+ "minimum": 1,
56
+ "maximum": 9007199254740991,
57
+ "description": "1-based occurrence among sections with the same headingPath"
58
+ },
59
+ "quote": {
60
+ "type": "object",
61
+ "additionalProperties": false,
62
+ "required": ["exact", "prefix", "suffix"],
63
+ "properties": {
64
+ "exact": {
65
+ "type": "string",
66
+ "maxLength": 96,
67
+ "description": "Bounded exact quote (section body preferred, else heading title)"
68
+ },
69
+ "prefix": {
70
+ "type": "string",
71
+ "maxLength": 32,
72
+ "description": "Bounded prefix context immediately before exact"
73
+ },
74
+ "suffix": {
75
+ "type": "string",
76
+ "maxLength": 32,
77
+ "description": "Bounded suffix context immediately after exact"
78
+ }
79
+ }
80
+ },
81
+ "sourceFingerprint": {
82
+ "$ref": "#/definitions/sha256",
83
+ "description": "SHA-256 hex fingerprint of the full source document content at capture"
84
+ },
85
+ "hints": {
86
+ "type": "object",
87
+ "additionalProperties": false,
88
+ "required": ["line", "startOffset", "endOffset"],
89
+ "description": "Line and code-unit offset hints only; never identity",
90
+ "properties": {
91
+ "line": {
92
+ "type": "integer",
93
+ "minimum": 1,
94
+ "maximum": 9007199254740991,
95
+ "description": "1-based heading line at capture"
96
+ },
97
+ "startOffset": {
98
+ "type": "integer",
99
+ "minimum": 0,
100
+ "maximum": 9007199254740991,
101
+ "description": "UTF-16 code-unit start offset of the exact quote at capture"
102
+ },
103
+ "endOffset": {
104
+ "type": "integer",
105
+ "minimum": 0,
106
+ "maximum": 9007199254740991,
107
+ "description": "UTF-16 code-unit end offset of the exact quote at capture"
108
+ }
109
+ }
110
+ }
111
+ },
112
+ "definitions": {
113
+ "sha256": {
114
+ "type": "string",
115
+ "pattern": "^[a-f0-9]{64}$"
116
+ }
117
+ }
118
+ }
@@ -0,0 +1,113 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-07/schema#",
3
+ "$id": "gno://schemas/section@1.0",
4
+ "title": "GNO MCP Section Tool Result",
5
+ "description": "Action-discriminated MCP gno_section structured output. Create returns the shared create-result semantics; resolve returns the shared resolve-result semantics (citation only for exact/recovered).",
6
+ "oneOf": [
7
+ {
8
+ "type": "object",
9
+ "additionalProperties": false,
10
+ "required": ["schemaVersion", "action", "uri", "target"],
11
+ "properties": {
12
+ "schemaVersion": {
13
+ "const": "1.0"
14
+ },
15
+ "action": {
16
+ "const": "create"
17
+ },
18
+ "uri": {
19
+ "type": "string",
20
+ "minLength": 1,
21
+ "maxLength": 1024
22
+ },
23
+ "target": {
24
+ "$ref": "gno://schemas/section-target@1.0"
25
+ }
26
+ }
27
+ },
28
+ {
29
+ "type": "object",
30
+ "additionalProperties": false,
31
+ "required": [
32
+ "schemaVersion",
33
+ "action",
34
+ "uri",
35
+ "status",
36
+ "currentFingerprint",
37
+ "target",
38
+ "diagnostics",
39
+ "citation"
40
+ ],
41
+ "properties": {
42
+ "schemaVersion": {
43
+ "const": "1.0"
44
+ },
45
+ "action": {
46
+ "const": "resolve"
47
+ },
48
+ "uri": {
49
+ "type": "string",
50
+ "minLength": 1,
51
+ "maxLength": 1024
52
+ },
53
+ "status": {
54
+ "type": "string",
55
+ "enum": ["exact", "recovered"]
56
+ },
57
+ "currentFingerprint": {
58
+ "type": "string",
59
+ "pattern": "^[a-f0-9]{64}$"
60
+ },
61
+ "target": {
62
+ "$ref": "gno://schemas/section-target@1.0"
63
+ },
64
+ "diagnostics": {
65
+ "$ref": "gno://schemas/section-target-resolve-result@1.0#/definitions/diagnostics"
66
+ },
67
+ "citation": {
68
+ "$ref": "gno://schemas/section-target-resolve-result@1.0#/definitions/citation"
69
+ }
70
+ }
71
+ },
72
+ {
73
+ "type": "object",
74
+ "additionalProperties": false,
75
+ "required": [
76
+ "schemaVersion",
77
+ "action",
78
+ "uri",
79
+ "status",
80
+ "currentFingerprint",
81
+ "target",
82
+ "diagnostics"
83
+ ],
84
+ "properties": {
85
+ "schemaVersion": {
86
+ "const": "1.0"
87
+ },
88
+ "action": {
89
+ "const": "resolve"
90
+ },
91
+ "uri": {
92
+ "type": "string",
93
+ "minLength": 1,
94
+ "maxLength": 1024
95
+ },
96
+ "status": {
97
+ "type": "string",
98
+ "enum": ["ambiguous", "stale", "missing"]
99
+ },
100
+ "currentFingerprint": {
101
+ "type": "string",
102
+ "pattern": "^[a-f0-9]{64}$"
103
+ },
104
+ "target": {
105
+ "$ref": "gno://schemas/section-target@1.0"
106
+ },
107
+ "diagnostics": {
108
+ "$ref": "gno://schemas/section-target-resolve-result@1.0#/definitions/diagnostics"
109
+ }
110
+ }
111
+ }
112
+ ]
113
+ }