@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.
- package/README.md +2 -2
- package/assets/skill/SKILL.md +2 -0
- package/assets/skill/mcp-reference.md +6 -0
- package/browser-extension/artifacts/{gno-browser-clipper-v1.30.7.zip → gno-browser-clipper-v1.31.0.zip} +0 -0
- package/browser-extension/artifacts/gno-browser-clipper-v1.31.0.zip.sha256 +1 -0
- package/browser-extension/dist/manifest.json +1 -1
- package/package.json +1 -1
- package/spec/mcp.md +62 -0
- package/spec/output-schemas/section-target-create-result.schema.json +20 -0
- package/spec/output-schemas/section-target-resolve-result.schema.json +194 -0
- package/spec/output-schemas/section-target.schema.json +118 -0
- package/spec/output-schemas/section.schema.json +113 -0
- package/src/core/section-parse.ts +187 -0
- package/src/core/section-target-link.ts +154 -0
- package/src/core/section-target-resolve.ts +351 -0
- package/src/core/section-target-transport.ts +519 -0
- package/src/core/section-target.ts +263 -0
- package/src/core/sections.ts +60 -115
- package/src/mcp/AGENTS.md +1 -0
- package/src/mcp/CLAUDE.md +1 -0
- package/src/mcp/http-egress.ts +1 -0
- package/src/mcp/tools/index.ts +19 -0
- package/src/mcp/tools/sections.ts +512 -0
- package/src/sdk/client.ts +71 -1
- package/src/sdk/index.ts +5 -0
- package/src/sdk/types.ts +29 -1
- package/src/serve/public/globals.built.css +1 -1
- package/src/serve/public/lib/section-links.ts +189 -0
- package/src/serve/public/pages/DocView.tsx +219 -36
- package/src/serve/routes/section-targets.ts +221 -0
- package/src/serve/server.ts +34 -0
- 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.
|
|
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
|

|
|
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
|
|
package/assets/skill/SKILL.md
CHANGED
|
@@ -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,
|
|
Binary file
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
01281ef03fe26195c824909c53eed8d04ede0f9a2da72f3c4c19d7e1564e0a0c gno-browser-clipper-v1.31.0.zip
|
package/package.json
CHANGED
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
|
+
}
|