@athenaintel/react 0.40.3 → 0.41.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 +55 -0
- package/dist/chat/athena-citation-links.cjs +23 -2
- package/dist/chat/athena-citation-links.cjs.map +1 -1
- package/dist/chat/athena-citation-links.d.ts +5 -0
- package/dist/chat/athena-citation-links.js +23 -2
- package/dist/chat/athena-citation-links.js.map +1 -1
- package/dist/chat-ui/index.d.ts +1 -1
- package/dist/chat-ui/mentions/mention-chip.cjs +118 -7
- package/dist/chat-ui/mentions/mention-chip.cjs.map +1 -1
- package/dist/chat-ui/mentions/mention-chip.d.ts +29 -0
- package/dist/chat-ui/mentions/mention-chip.js +120 -9
- package/dist/chat-ui/mentions/mention-chip.js.map +1 -1
- package/dist/chat-ui/rich-text/chat-message-body.cjs +2 -1
- package/dist/chat-ui/rich-text/chat-message-body.cjs.map +1 -1
- package/dist/chat-ui/rich-text/chat-message-body.js +2 -1
- package/dist/chat-ui/rich-text/chat-message-body.js.map +1 -1
- package/dist/react/package.json.cjs +1 -1
- package/dist/react/package.json.js +1 -1
- package/dist/references/src/anchors/file-line-range.cjs +70 -0
- package/dist/references/src/anchors/file-line-range.cjs.map +1 -0
- package/dist/references/src/anchors/file-line-range.js +70 -0
- package/dist/references/src/anchors/file-line-range.js.map +1 -0
- package/dist/references/src/anchors/format.cjs +219 -0
- package/dist/references/src/anchors/format.cjs.map +1 -0
- package/dist/references/src/anchors/format.js +219 -0
- package/dist/references/src/anchors/format.js.map +1 -0
- package/dist/references/src/anchors/parse.cjs +408 -0
- package/dist/references/src/anchors/parse.cjs.map +1 -0
- package/dist/references/src/anchors/parse.js +408 -0
- package/dist/references/src/anchors/parse.js.map +1 -0
- package/dist/references/src/anchors/serialize.cjs +185 -0
- package/dist/references/src/anchors/serialize.cjs.map +1 -0
- package/dist/references/src/anchors/serialize.js +185 -0
- package/dist/references/src/anchors/serialize.js.map +1 -0
- package/dist/references/src/anchors/types.cjs +50 -0
- package/dist/references/src/anchors/types.cjs.map +1 -0
- package/dist/references/src/anchors/types.js +50 -0
- package/dist/references/src/anchors/types.js.map +1 -0
- package/dist/references/src/formats/uri/asset-mention-uri.cjs +29 -0
- package/dist/references/src/formats/uri/asset-mention-uri.cjs.map +1 -0
- package/dist/references/src/formats/uri/asset-mention-uri.js +29 -0
- package/dist/references/src/formats/uri/asset-mention-uri.js.map +1 -0
- package/dist/references/src/formats/uri/asset-spaces-url.cjs +64 -0
- package/dist/references/src/formats/uri/asset-spaces-url.cjs.map +1 -0
- package/dist/references/src/formats/uri/asset-spaces-url.js +64 -0
- package/dist/references/src/formats/uri/asset-spaces-url.js.map +1 -0
- package/dist/references/src/formats/uri/template-placeholder.cjs +9 -0
- package/dist/references/src/formats/uri/template-placeholder.cjs.map +1 -0
- package/dist/references/src/formats/uri/template-placeholder.js +9 -0
- package/dist/references/src/formats/uri/template-placeholder.js.map +1 -0
- package/dist/references/src/sheet-name.cjs +10 -0
- package/dist/references/src/sheet-name.cjs.map +1 -0
- package/dist/references/src/sheet-name.js +10 -0
- package/dist/references/src/sheet-name.js.map +1 -0
- package/dist/references/src/version-ref.cjs +61 -0
- package/dist/references/src/version-ref.cjs.map +1 -0
- package/dist/references/src/version-ref.js +61 -0
- package/dist/references/src/version-ref.js.map +1 -0
- package/dist/styles.css +1 -1
- package/package.json +3 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serialize.cjs","sources":["../../../../../references/src/anchors/serialize.ts"],"sourcesContent":["import type { Anchor } from './types';\n\n/**\n * Serialize an Anchor to snake_case URL query parameters.\n *\n * Returns a `URLSearchParams` containing `anchor=<type>` plus type-specific params.\n * The caller appends these to the asset URL.\n */\nexport function serializeAnchorToParams(anchor: Anchor): URLSearchParams {\n const params = new URLSearchParams();\n params.set('anchor', anchor.type);\n\n switch (anchor.type) {\n case 'cell':\n params.set('cell_id', anchor.cellId);\n break;\n case 'cell_range':\n params.set('start_cell_id', anchor.startCellId);\n params.set('end_cell_id', anchor.endCellId);\n break;\n case 'comment':\n params.set('thread_id', anchor.threadId);\n params.set('comment_id', anchor.commentId);\n break;\n case 'comment_thread':\n params.set('thread_id', anchor.threadId);\n break;\n case 'file_line_range':\n // Sorted parameters — Clio's canonical order (anchor, end_line, path,\n // start_line). URLSearchParams encodes `~` and `*` the other way round\n // from Python's urlencode, so equality with Clio's stored string is by\n // decoded value; see file-line-range.ts.\n params.set('end_line', String(anchor.endLine));\n params.set('path', anchor.path);\n params.set('start_line', String(anchor.startLine));\n break;\n case 'line':\n params.set('line', String(anchor.line));\n break;\n case 'line_range':\n params.set('start_line', String(anchor.startLine));\n params.set('end_line', String(anchor.endLine));\n break;\n case 'msg':\n params.set('msg_id', anchor.messageId);\n break;\n case 'msg_range':\n params.set('start_msg_id', anchor.startMessageId);\n params.set('end_msg_id', anchor.endMessageId);\n break;\n case 'msg_block':\n params.set('msg_id', anchor.messageId);\n params.set('block', String(anchor.block));\n if (anchor.hash) params.set('hash', anchor.hash);\n break;\n case 'msg_section':\n params.set('msg_id', anchor.messageId);\n params.set('heading', anchor.heading);\n if (anchor.nth != null) params.set('nth', String(anchor.nth));\n break;\n case 'msg_text':\n params.set('msg_id', anchor.messageId);\n params.set('text', anchor.text);\n if (anchor.block != null) params.set('block', String(anchor.block));\n if (anchor.prefix) params.set('prefix', anchor.prefix);\n if (anchor.suffix) params.set('suffix', anchor.suffix);\n break;\n case 'page':\n params.set('page', String(anchor.page));\n break;\n case 'page_range':\n params.set('start_page', String(anchor.startPage));\n params.set('end_page', String(anchor.endPage));\n break;\n case 'page_rect':\n params.set('page', String(anchor.page));\n params.set('x', String(anchor.x));\n params.set('y', String(anchor.y));\n params.set('width', String(anchor.width));\n params.set('height', String(anchor.height));\n if (anchor.unit != null) params.set('unit', anchor.unit);\n break;\n case 'page_text':\n params.set('page', String(anchor.page));\n params.set('text', anchor.text);\n if (anchor.prefix) params.set('prefix', anchor.prefix);\n if (anchor.suffix) params.set('suffix', anchor.suffix);\n if (anchor.hash) params.set('hash', anchor.hash);\n break;\n case 'path':\n params.set('path', anchor.path);\n if (anchor.line != null) {\n params.set('line', String(anchor.line));\n if (anchor.column != null) params.set('column', String(anchor.column));\n }\n break;\n case 'pixel_range':\n params.set('x', String(anchor.x));\n params.set('y', String(anchor.y));\n params.set('width', String(anchor.width));\n params.set('height', String(anchor.height));\n break;\n case 'pm_node':\n params.set('node_id', anchor.nodeId);\n break;\n case 'pm_node_range':\n params.set('start_node_id', anchor.startNodeId);\n params.set('end_node_id', anchor.endNodeId);\n break;\n case 'pm_mark':\n params.set('mark_id', anchor.markId);\n break;\n case 'rect':\n params.set('x', String(anchor.x));\n params.set('y', String(anchor.y));\n params.set('width', String(anchor.width));\n params.set('height', String(anchor.height));\n break;\n case 'section':\n params.set('section', anchor.section);\n if (anchor.topic != null) params.set('topic', String(anchor.topic));\n break;\n case 'semantic_query':\n params.set('query', JSON.stringify(anchor.query));\n if (anchor.field != null) params.set('field', anchor.field);\n if (anchor.rowKey != null) params.set('row_key', JSON.stringify(anchor.rowKey));\n if (anchor.rowIndex != null) params.set('row_index', String(anchor.rowIndex));\n if (anchor.relationship != null) params.set('relationship', anchor.relationship);\n if (anchor.schemaVersion != null) params.set('schema_version', String(anchor.schemaVersion));\n if (anchor.schemaHash != null) params.set('schema_hash', anchor.schemaHash);\n if (anchor.sourceSnapshots != null) {\n params.set('source_snapshots', JSON.stringify(anchor.sourceSnapshots));\n }\n if (anchor.dataAsOf != null) params.set('data_as_of', anchor.dataAsOf);\n break;\n case 'sql_query':\n if (anchor.sql != null) params.set('sql', anchor.sql);\n if (anchor.querySnippetAssetId != null) {\n params.set('query_snippet_asset_id', anchor.querySnippetAssetId);\n }\n if (anchor.dialect != null) params.set('dialect', anchor.dialect);\n if (anchor.field != null) params.set('field', anchor.field);\n if (anchor.rowKey != null) params.set('row_key', JSON.stringify(anchor.rowKey));\n if (anchor.rowIndex != null) params.set('row_index', String(anchor.rowIndex));\n if (anchor.relationship != null) params.set('relationship', anchor.relationship);\n break;\n case 'shape':\n if (anchor.slideId != null) params.set('slide_id', anchor.slideId);\n if (anchor.slideIndex != null) params.set('slide_index', String(anchor.slideIndex));\n params.set('shape_ids', anchor.shapeIds.join(','));\n break;\n case 'sheet_cell':\n params.set('sheet_id', String(anchor.sheetId));\n params.set('cell', anchor.cell);\n if (anchor.chartId != null) params.set('chart', anchor.chartId);\n break;\n case 'sheet_range':\n params.set('sheet_id', String(anchor.sheetId));\n params.set('range', anchor.range);\n // An empty frontier (a document with no structural edit journaled yet) still names a point\n // in the engine's log, so it is written, not dropped.\n if (anchor.frontier != null) params.set('frontier', JSON.stringify(anchor.frontier));\n break;\n case 'sheet_tab':\n params.set('sheet_id', String(anchor.sheetId));\n break;\n case 'sheet_table':\n params.set('sheet_id', String(anchor.sheetId));\n params.set('table_name', anchor.tableName);\n if (anchor.fallbackRange != null) {\n params.set('fallback_range', anchor.fallbackRange);\n }\n break;\n case 'lakehouse_table':\n params.set('table', anchor.table);\n if (anchor.tableUuid) params.set('table_uuid', anchor.tableUuid);\n if (anchor.snapshotId) params.set('snapshot_id', anchor.snapshotId);\n break;\n case 'slide':\n if (anchor.slideId != null) params.set('slide_id', anchor.slideId);\n if (anchor.slideIndex != null) params.set('slide_index', String(anchor.slideIndex));\n break;\n case 'time':\n params.set('time', anchor.time);\n break;\n case 'time_range':\n params.set('start_time', anchor.startTime);\n params.set('end_time', anchor.endTime);\n break;\n case 'tool_call':\n params.set('tool_call_id', anchor.toolCallId);\n if (anchor.messageId) params.set('msg_id', anchor.messageId);\n break;\n }\n\n return params;\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
function serializeAnchorToParams(anchor) {
|
|
2
|
+
const params = new URLSearchParams();
|
|
3
|
+
params.set("anchor", anchor.type);
|
|
4
|
+
switch (anchor.type) {
|
|
5
|
+
case "cell":
|
|
6
|
+
params.set("cell_id", anchor.cellId);
|
|
7
|
+
break;
|
|
8
|
+
case "cell_range":
|
|
9
|
+
params.set("start_cell_id", anchor.startCellId);
|
|
10
|
+
params.set("end_cell_id", anchor.endCellId);
|
|
11
|
+
break;
|
|
12
|
+
case "comment":
|
|
13
|
+
params.set("thread_id", anchor.threadId);
|
|
14
|
+
params.set("comment_id", anchor.commentId);
|
|
15
|
+
break;
|
|
16
|
+
case "comment_thread":
|
|
17
|
+
params.set("thread_id", anchor.threadId);
|
|
18
|
+
break;
|
|
19
|
+
case "file_line_range":
|
|
20
|
+
params.set("end_line", String(anchor.endLine));
|
|
21
|
+
params.set("path", anchor.path);
|
|
22
|
+
params.set("start_line", String(anchor.startLine));
|
|
23
|
+
break;
|
|
24
|
+
case "line":
|
|
25
|
+
params.set("line", String(anchor.line));
|
|
26
|
+
break;
|
|
27
|
+
case "line_range":
|
|
28
|
+
params.set("start_line", String(anchor.startLine));
|
|
29
|
+
params.set("end_line", String(anchor.endLine));
|
|
30
|
+
break;
|
|
31
|
+
case "msg":
|
|
32
|
+
params.set("msg_id", anchor.messageId);
|
|
33
|
+
break;
|
|
34
|
+
case "msg_range":
|
|
35
|
+
params.set("start_msg_id", anchor.startMessageId);
|
|
36
|
+
params.set("end_msg_id", anchor.endMessageId);
|
|
37
|
+
break;
|
|
38
|
+
case "msg_block":
|
|
39
|
+
params.set("msg_id", anchor.messageId);
|
|
40
|
+
params.set("block", String(anchor.block));
|
|
41
|
+
if (anchor.hash) params.set("hash", anchor.hash);
|
|
42
|
+
break;
|
|
43
|
+
case "msg_section":
|
|
44
|
+
params.set("msg_id", anchor.messageId);
|
|
45
|
+
params.set("heading", anchor.heading);
|
|
46
|
+
if (anchor.nth != null) params.set("nth", String(anchor.nth));
|
|
47
|
+
break;
|
|
48
|
+
case "msg_text":
|
|
49
|
+
params.set("msg_id", anchor.messageId);
|
|
50
|
+
params.set("text", anchor.text);
|
|
51
|
+
if (anchor.block != null) params.set("block", String(anchor.block));
|
|
52
|
+
if (anchor.prefix) params.set("prefix", anchor.prefix);
|
|
53
|
+
if (anchor.suffix) params.set("suffix", anchor.suffix);
|
|
54
|
+
break;
|
|
55
|
+
case "page":
|
|
56
|
+
params.set("page", String(anchor.page));
|
|
57
|
+
break;
|
|
58
|
+
case "page_range":
|
|
59
|
+
params.set("start_page", String(anchor.startPage));
|
|
60
|
+
params.set("end_page", String(anchor.endPage));
|
|
61
|
+
break;
|
|
62
|
+
case "page_rect":
|
|
63
|
+
params.set("page", String(anchor.page));
|
|
64
|
+
params.set("x", String(anchor.x));
|
|
65
|
+
params.set("y", String(anchor.y));
|
|
66
|
+
params.set("width", String(anchor.width));
|
|
67
|
+
params.set("height", String(anchor.height));
|
|
68
|
+
if (anchor.unit != null) params.set("unit", anchor.unit);
|
|
69
|
+
break;
|
|
70
|
+
case "page_text":
|
|
71
|
+
params.set("page", String(anchor.page));
|
|
72
|
+
params.set("text", anchor.text);
|
|
73
|
+
if (anchor.prefix) params.set("prefix", anchor.prefix);
|
|
74
|
+
if (anchor.suffix) params.set("suffix", anchor.suffix);
|
|
75
|
+
if (anchor.hash) params.set("hash", anchor.hash);
|
|
76
|
+
break;
|
|
77
|
+
case "path":
|
|
78
|
+
params.set("path", anchor.path);
|
|
79
|
+
if (anchor.line != null) {
|
|
80
|
+
params.set("line", String(anchor.line));
|
|
81
|
+
if (anchor.column != null) params.set("column", String(anchor.column));
|
|
82
|
+
}
|
|
83
|
+
break;
|
|
84
|
+
case "pixel_range":
|
|
85
|
+
params.set("x", String(anchor.x));
|
|
86
|
+
params.set("y", String(anchor.y));
|
|
87
|
+
params.set("width", String(anchor.width));
|
|
88
|
+
params.set("height", String(anchor.height));
|
|
89
|
+
break;
|
|
90
|
+
case "pm_node":
|
|
91
|
+
params.set("node_id", anchor.nodeId);
|
|
92
|
+
break;
|
|
93
|
+
case "pm_node_range":
|
|
94
|
+
params.set("start_node_id", anchor.startNodeId);
|
|
95
|
+
params.set("end_node_id", anchor.endNodeId);
|
|
96
|
+
break;
|
|
97
|
+
case "pm_mark":
|
|
98
|
+
params.set("mark_id", anchor.markId);
|
|
99
|
+
break;
|
|
100
|
+
case "rect":
|
|
101
|
+
params.set("x", String(anchor.x));
|
|
102
|
+
params.set("y", String(anchor.y));
|
|
103
|
+
params.set("width", String(anchor.width));
|
|
104
|
+
params.set("height", String(anchor.height));
|
|
105
|
+
break;
|
|
106
|
+
case "section":
|
|
107
|
+
params.set("section", anchor.section);
|
|
108
|
+
if (anchor.topic != null) params.set("topic", String(anchor.topic));
|
|
109
|
+
break;
|
|
110
|
+
case "semantic_query":
|
|
111
|
+
params.set("query", JSON.stringify(anchor.query));
|
|
112
|
+
if (anchor.field != null) params.set("field", anchor.field);
|
|
113
|
+
if (anchor.rowKey != null) params.set("row_key", JSON.stringify(anchor.rowKey));
|
|
114
|
+
if (anchor.rowIndex != null) params.set("row_index", String(anchor.rowIndex));
|
|
115
|
+
if (anchor.relationship != null) params.set("relationship", anchor.relationship);
|
|
116
|
+
if (anchor.schemaVersion != null) params.set("schema_version", String(anchor.schemaVersion));
|
|
117
|
+
if (anchor.schemaHash != null) params.set("schema_hash", anchor.schemaHash);
|
|
118
|
+
if (anchor.sourceSnapshots != null) {
|
|
119
|
+
params.set("source_snapshots", JSON.stringify(anchor.sourceSnapshots));
|
|
120
|
+
}
|
|
121
|
+
if (anchor.dataAsOf != null) params.set("data_as_of", anchor.dataAsOf);
|
|
122
|
+
break;
|
|
123
|
+
case "sql_query":
|
|
124
|
+
if (anchor.sql != null) params.set("sql", anchor.sql);
|
|
125
|
+
if (anchor.querySnippetAssetId != null) {
|
|
126
|
+
params.set("query_snippet_asset_id", anchor.querySnippetAssetId);
|
|
127
|
+
}
|
|
128
|
+
if (anchor.dialect != null) params.set("dialect", anchor.dialect);
|
|
129
|
+
if (anchor.field != null) params.set("field", anchor.field);
|
|
130
|
+
if (anchor.rowKey != null) params.set("row_key", JSON.stringify(anchor.rowKey));
|
|
131
|
+
if (anchor.rowIndex != null) params.set("row_index", String(anchor.rowIndex));
|
|
132
|
+
if (anchor.relationship != null) params.set("relationship", anchor.relationship);
|
|
133
|
+
break;
|
|
134
|
+
case "shape":
|
|
135
|
+
if (anchor.slideId != null) params.set("slide_id", anchor.slideId);
|
|
136
|
+
if (anchor.slideIndex != null) params.set("slide_index", String(anchor.slideIndex));
|
|
137
|
+
params.set("shape_ids", anchor.shapeIds.join(","));
|
|
138
|
+
break;
|
|
139
|
+
case "sheet_cell":
|
|
140
|
+
params.set("sheet_id", String(anchor.sheetId));
|
|
141
|
+
params.set("cell", anchor.cell);
|
|
142
|
+
if (anchor.chartId != null) params.set("chart", anchor.chartId);
|
|
143
|
+
break;
|
|
144
|
+
case "sheet_range":
|
|
145
|
+
params.set("sheet_id", String(anchor.sheetId));
|
|
146
|
+
params.set("range", anchor.range);
|
|
147
|
+
if (anchor.frontier != null) params.set("frontier", JSON.stringify(anchor.frontier));
|
|
148
|
+
break;
|
|
149
|
+
case "sheet_tab":
|
|
150
|
+
params.set("sheet_id", String(anchor.sheetId));
|
|
151
|
+
break;
|
|
152
|
+
case "sheet_table":
|
|
153
|
+
params.set("sheet_id", String(anchor.sheetId));
|
|
154
|
+
params.set("table_name", anchor.tableName);
|
|
155
|
+
if (anchor.fallbackRange != null) {
|
|
156
|
+
params.set("fallback_range", anchor.fallbackRange);
|
|
157
|
+
}
|
|
158
|
+
break;
|
|
159
|
+
case "lakehouse_table":
|
|
160
|
+
params.set("table", anchor.table);
|
|
161
|
+
if (anchor.tableUuid) params.set("table_uuid", anchor.tableUuid);
|
|
162
|
+
if (anchor.snapshotId) params.set("snapshot_id", anchor.snapshotId);
|
|
163
|
+
break;
|
|
164
|
+
case "slide":
|
|
165
|
+
if (anchor.slideId != null) params.set("slide_id", anchor.slideId);
|
|
166
|
+
if (anchor.slideIndex != null) params.set("slide_index", String(anchor.slideIndex));
|
|
167
|
+
break;
|
|
168
|
+
case "time":
|
|
169
|
+
params.set("time", anchor.time);
|
|
170
|
+
break;
|
|
171
|
+
case "time_range":
|
|
172
|
+
params.set("start_time", anchor.startTime);
|
|
173
|
+
params.set("end_time", anchor.endTime);
|
|
174
|
+
break;
|
|
175
|
+
case "tool_call":
|
|
176
|
+
params.set("tool_call_id", anchor.toolCallId);
|
|
177
|
+
if (anchor.messageId) params.set("msg_id", anchor.messageId);
|
|
178
|
+
break;
|
|
179
|
+
}
|
|
180
|
+
return params;
|
|
181
|
+
}
|
|
182
|
+
export {
|
|
183
|
+
serializeAnchorToParams
|
|
184
|
+
};
|
|
185
|
+
//# sourceMappingURL=serialize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serialize.js","sources":["../../../../../references/src/anchors/serialize.ts"],"sourcesContent":["import type { Anchor } from './types';\n\n/**\n * Serialize an Anchor to snake_case URL query parameters.\n *\n * Returns a `URLSearchParams` containing `anchor=<type>` plus type-specific params.\n * The caller appends these to the asset URL.\n */\nexport function serializeAnchorToParams(anchor: Anchor): URLSearchParams {\n const params = new URLSearchParams();\n params.set('anchor', anchor.type);\n\n switch (anchor.type) {\n case 'cell':\n params.set('cell_id', anchor.cellId);\n break;\n case 'cell_range':\n params.set('start_cell_id', anchor.startCellId);\n params.set('end_cell_id', anchor.endCellId);\n break;\n case 'comment':\n params.set('thread_id', anchor.threadId);\n params.set('comment_id', anchor.commentId);\n break;\n case 'comment_thread':\n params.set('thread_id', anchor.threadId);\n break;\n case 'file_line_range':\n // Sorted parameters — Clio's canonical order (anchor, end_line, path,\n // start_line). URLSearchParams encodes `~` and `*` the other way round\n // from Python's urlencode, so equality with Clio's stored string is by\n // decoded value; see file-line-range.ts.\n params.set('end_line', String(anchor.endLine));\n params.set('path', anchor.path);\n params.set('start_line', String(anchor.startLine));\n break;\n case 'line':\n params.set('line', String(anchor.line));\n break;\n case 'line_range':\n params.set('start_line', String(anchor.startLine));\n params.set('end_line', String(anchor.endLine));\n break;\n case 'msg':\n params.set('msg_id', anchor.messageId);\n break;\n case 'msg_range':\n params.set('start_msg_id', anchor.startMessageId);\n params.set('end_msg_id', anchor.endMessageId);\n break;\n case 'msg_block':\n params.set('msg_id', anchor.messageId);\n params.set('block', String(anchor.block));\n if (anchor.hash) params.set('hash', anchor.hash);\n break;\n case 'msg_section':\n params.set('msg_id', anchor.messageId);\n params.set('heading', anchor.heading);\n if (anchor.nth != null) params.set('nth', String(anchor.nth));\n break;\n case 'msg_text':\n params.set('msg_id', anchor.messageId);\n params.set('text', anchor.text);\n if (anchor.block != null) params.set('block', String(anchor.block));\n if (anchor.prefix) params.set('prefix', anchor.prefix);\n if (anchor.suffix) params.set('suffix', anchor.suffix);\n break;\n case 'page':\n params.set('page', String(anchor.page));\n break;\n case 'page_range':\n params.set('start_page', String(anchor.startPage));\n params.set('end_page', String(anchor.endPage));\n break;\n case 'page_rect':\n params.set('page', String(anchor.page));\n params.set('x', String(anchor.x));\n params.set('y', String(anchor.y));\n params.set('width', String(anchor.width));\n params.set('height', String(anchor.height));\n if (anchor.unit != null) params.set('unit', anchor.unit);\n break;\n case 'page_text':\n params.set('page', String(anchor.page));\n params.set('text', anchor.text);\n if (anchor.prefix) params.set('prefix', anchor.prefix);\n if (anchor.suffix) params.set('suffix', anchor.suffix);\n if (anchor.hash) params.set('hash', anchor.hash);\n break;\n case 'path':\n params.set('path', anchor.path);\n if (anchor.line != null) {\n params.set('line', String(anchor.line));\n if (anchor.column != null) params.set('column', String(anchor.column));\n }\n break;\n case 'pixel_range':\n params.set('x', String(anchor.x));\n params.set('y', String(anchor.y));\n params.set('width', String(anchor.width));\n params.set('height', String(anchor.height));\n break;\n case 'pm_node':\n params.set('node_id', anchor.nodeId);\n break;\n case 'pm_node_range':\n params.set('start_node_id', anchor.startNodeId);\n params.set('end_node_id', anchor.endNodeId);\n break;\n case 'pm_mark':\n params.set('mark_id', anchor.markId);\n break;\n case 'rect':\n params.set('x', String(anchor.x));\n params.set('y', String(anchor.y));\n params.set('width', String(anchor.width));\n params.set('height', String(anchor.height));\n break;\n case 'section':\n params.set('section', anchor.section);\n if (anchor.topic != null) params.set('topic', String(anchor.topic));\n break;\n case 'semantic_query':\n params.set('query', JSON.stringify(anchor.query));\n if (anchor.field != null) params.set('field', anchor.field);\n if (anchor.rowKey != null) params.set('row_key', JSON.stringify(anchor.rowKey));\n if (anchor.rowIndex != null) params.set('row_index', String(anchor.rowIndex));\n if (anchor.relationship != null) params.set('relationship', anchor.relationship);\n if (anchor.schemaVersion != null) params.set('schema_version', String(anchor.schemaVersion));\n if (anchor.schemaHash != null) params.set('schema_hash', anchor.schemaHash);\n if (anchor.sourceSnapshots != null) {\n params.set('source_snapshots', JSON.stringify(anchor.sourceSnapshots));\n }\n if (anchor.dataAsOf != null) params.set('data_as_of', anchor.dataAsOf);\n break;\n case 'sql_query':\n if (anchor.sql != null) params.set('sql', anchor.sql);\n if (anchor.querySnippetAssetId != null) {\n params.set('query_snippet_asset_id', anchor.querySnippetAssetId);\n }\n if (anchor.dialect != null) params.set('dialect', anchor.dialect);\n if (anchor.field != null) params.set('field', anchor.field);\n if (anchor.rowKey != null) params.set('row_key', JSON.stringify(anchor.rowKey));\n if (anchor.rowIndex != null) params.set('row_index', String(anchor.rowIndex));\n if (anchor.relationship != null) params.set('relationship', anchor.relationship);\n break;\n case 'shape':\n if (anchor.slideId != null) params.set('slide_id', anchor.slideId);\n if (anchor.slideIndex != null) params.set('slide_index', String(anchor.slideIndex));\n params.set('shape_ids', anchor.shapeIds.join(','));\n break;\n case 'sheet_cell':\n params.set('sheet_id', String(anchor.sheetId));\n params.set('cell', anchor.cell);\n if (anchor.chartId != null) params.set('chart', anchor.chartId);\n break;\n case 'sheet_range':\n params.set('sheet_id', String(anchor.sheetId));\n params.set('range', anchor.range);\n // An empty frontier (a document with no structural edit journaled yet) still names a point\n // in the engine's log, so it is written, not dropped.\n if (anchor.frontier != null) params.set('frontier', JSON.stringify(anchor.frontier));\n break;\n case 'sheet_tab':\n params.set('sheet_id', String(anchor.sheetId));\n break;\n case 'sheet_table':\n params.set('sheet_id', String(anchor.sheetId));\n params.set('table_name', anchor.tableName);\n if (anchor.fallbackRange != null) {\n params.set('fallback_range', anchor.fallbackRange);\n }\n break;\n case 'lakehouse_table':\n params.set('table', anchor.table);\n if (anchor.tableUuid) params.set('table_uuid', anchor.tableUuid);\n if (anchor.snapshotId) params.set('snapshot_id', anchor.snapshotId);\n break;\n case 'slide':\n if (anchor.slideId != null) params.set('slide_id', anchor.slideId);\n if (anchor.slideIndex != null) params.set('slide_index', String(anchor.slideIndex));\n break;\n case 'time':\n params.set('time', anchor.time);\n break;\n case 'time_range':\n params.set('start_time', anchor.startTime);\n params.set('end_time', anchor.endTime);\n break;\n case 'tool_call':\n params.set('tool_call_id', anchor.toolCallId);\n if (anchor.messageId) params.set('msg_id', anchor.messageId);\n break;\n }\n\n return params;\n}\n"],"names":[],"mappings":"AAQO,SAAS,wBAAwB,QAAiC;AACvE,QAAM,SAAS,IAAI,gBAAA;AACnB,SAAO,IAAI,UAAU,OAAO,IAAI;AAEhC,UAAQ,OAAO,MAAA;AAAA,IACb,KAAK;AACH,aAAO,IAAI,WAAW,OAAO,MAAM;AACnC;AAAA,IACF,KAAK;AACH,aAAO,IAAI,iBAAiB,OAAO,WAAW;AAC9C,aAAO,IAAI,eAAe,OAAO,SAAS;AAC1C;AAAA,IACF,KAAK;AACH,aAAO,IAAI,aAAa,OAAO,QAAQ;AACvC,aAAO,IAAI,cAAc,OAAO,SAAS;AACzC;AAAA,IACF,KAAK;AACH,aAAO,IAAI,aAAa,OAAO,QAAQ;AACvC;AAAA,IACF,KAAK;AAKH,aAAO,IAAI,YAAY,OAAO,OAAO,OAAO,CAAC;AAC7C,aAAO,IAAI,QAAQ,OAAO,IAAI;AAC9B,aAAO,IAAI,cAAc,OAAO,OAAO,SAAS,CAAC;AACjD;AAAA,IACF,KAAK;AACH,aAAO,IAAI,QAAQ,OAAO,OAAO,IAAI,CAAC;AACtC;AAAA,IACF,KAAK;AACH,aAAO,IAAI,cAAc,OAAO,OAAO,SAAS,CAAC;AACjD,aAAO,IAAI,YAAY,OAAO,OAAO,OAAO,CAAC;AAC7C;AAAA,IACF,KAAK;AACH,aAAO,IAAI,UAAU,OAAO,SAAS;AACrC;AAAA,IACF,KAAK;AACH,aAAO,IAAI,gBAAgB,OAAO,cAAc;AAChD,aAAO,IAAI,cAAc,OAAO,YAAY;AAC5C;AAAA,IACF,KAAK;AACH,aAAO,IAAI,UAAU,OAAO,SAAS;AACrC,aAAO,IAAI,SAAS,OAAO,OAAO,KAAK,CAAC;AACxC,UAAI,OAAO,KAAM,QAAO,IAAI,QAAQ,OAAO,IAAI;AAC/C;AAAA,IACF,KAAK;AACH,aAAO,IAAI,UAAU,OAAO,SAAS;AACrC,aAAO,IAAI,WAAW,OAAO,OAAO;AACpC,UAAI,OAAO,OAAO,KAAM,QAAO,IAAI,OAAO,OAAO,OAAO,GAAG,CAAC;AAC5D;AAAA,IACF,KAAK;AACH,aAAO,IAAI,UAAU,OAAO,SAAS;AACrC,aAAO,IAAI,QAAQ,OAAO,IAAI;AAC9B,UAAI,OAAO,SAAS,KAAM,QAAO,IAAI,SAAS,OAAO,OAAO,KAAK,CAAC;AAClE,UAAI,OAAO,OAAQ,QAAO,IAAI,UAAU,OAAO,MAAM;AACrD,UAAI,OAAO,OAAQ,QAAO,IAAI,UAAU,OAAO,MAAM;AACrD;AAAA,IACF,KAAK;AACH,aAAO,IAAI,QAAQ,OAAO,OAAO,IAAI,CAAC;AACtC;AAAA,IACF,KAAK;AACH,aAAO,IAAI,cAAc,OAAO,OAAO,SAAS,CAAC;AACjD,aAAO,IAAI,YAAY,OAAO,OAAO,OAAO,CAAC;AAC7C;AAAA,IACF,KAAK;AACH,aAAO,IAAI,QAAQ,OAAO,OAAO,IAAI,CAAC;AACtC,aAAO,IAAI,KAAK,OAAO,OAAO,CAAC,CAAC;AAChC,aAAO,IAAI,KAAK,OAAO,OAAO,CAAC,CAAC;AAChC,aAAO,IAAI,SAAS,OAAO,OAAO,KAAK,CAAC;AACxC,aAAO,IAAI,UAAU,OAAO,OAAO,MAAM,CAAC;AAC1C,UAAI,OAAO,QAAQ,aAAa,IAAI,QAAQ,OAAO,IAAI;AACvD;AAAA,IACF,KAAK;AACH,aAAO,IAAI,QAAQ,OAAO,OAAO,IAAI,CAAC;AACtC,aAAO,IAAI,QAAQ,OAAO,IAAI;AAC9B,UAAI,OAAO,OAAQ,QAAO,IAAI,UAAU,OAAO,MAAM;AACrD,UAAI,OAAO,OAAQ,QAAO,IAAI,UAAU,OAAO,MAAM;AACrD,UAAI,OAAO,KAAM,QAAO,IAAI,QAAQ,OAAO,IAAI;AAC/C;AAAA,IACF,KAAK;AACH,aAAO,IAAI,QAAQ,OAAO,IAAI;AAC9B,UAAI,OAAO,QAAQ,MAAM;AACvB,eAAO,IAAI,QAAQ,OAAO,OAAO,IAAI,CAAC;AACtC,YAAI,OAAO,UAAU,KAAM,QAAO,IAAI,UAAU,OAAO,OAAO,MAAM,CAAC;AAAA,MACvE;AACA;AAAA,IACF,KAAK;AACH,aAAO,IAAI,KAAK,OAAO,OAAO,CAAC,CAAC;AAChC,aAAO,IAAI,KAAK,OAAO,OAAO,CAAC,CAAC;AAChC,aAAO,IAAI,SAAS,OAAO,OAAO,KAAK,CAAC;AACxC,aAAO,IAAI,UAAU,OAAO,OAAO,MAAM,CAAC;AAC1C;AAAA,IACF,KAAK;AACH,aAAO,IAAI,WAAW,OAAO,MAAM;AACnC;AAAA,IACF,KAAK;AACH,aAAO,IAAI,iBAAiB,OAAO,WAAW;AAC9C,aAAO,IAAI,eAAe,OAAO,SAAS;AAC1C;AAAA,IACF,KAAK;AACH,aAAO,IAAI,WAAW,OAAO,MAAM;AACnC;AAAA,IACF,KAAK;AACH,aAAO,IAAI,KAAK,OAAO,OAAO,CAAC,CAAC;AAChC,aAAO,IAAI,KAAK,OAAO,OAAO,CAAC,CAAC;AAChC,aAAO,IAAI,SAAS,OAAO,OAAO,KAAK,CAAC;AACxC,aAAO,IAAI,UAAU,OAAO,OAAO,MAAM,CAAC;AAC1C;AAAA,IACF,KAAK;AACH,aAAO,IAAI,WAAW,OAAO,OAAO;AACpC,UAAI,OAAO,SAAS,KAAM,QAAO,IAAI,SAAS,OAAO,OAAO,KAAK,CAAC;AAClE;AAAA,IACF,KAAK;AACH,aAAO,IAAI,SAAS,KAAK,UAAU,OAAO,KAAK,CAAC;AAChD,UAAI,OAAO,SAAS,aAAa,IAAI,SAAS,OAAO,KAAK;AAC1D,UAAI,OAAO,UAAU,KAAM,QAAO,IAAI,WAAW,KAAK,UAAU,OAAO,MAAM,CAAC;AAC9E,UAAI,OAAO,YAAY,KAAM,QAAO,IAAI,aAAa,OAAO,OAAO,QAAQ,CAAC;AAC5E,UAAI,OAAO,gBAAgB,aAAa,IAAI,gBAAgB,OAAO,YAAY;AAC/E,UAAI,OAAO,iBAAiB,KAAM,QAAO,IAAI,kBAAkB,OAAO,OAAO,aAAa,CAAC;AAC3F,UAAI,OAAO,cAAc,aAAa,IAAI,eAAe,OAAO,UAAU;AAC1E,UAAI,OAAO,mBAAmB,MAAM;AAClC,eAAO,IAAI,oBAAoB,KAAK,UAAU,OAAO,eAAe,CAAC;AAAA,MACvE;AACA,UAAI,OAAO,YAAY,aAAa,IAAI,cAAc,OAAO,QAAQ;AACrE;AAAA,IACF,KAAK;AACH,UAAI,OAAO,OAAO,aAAa,IAAI,OAAO,OAAO,GAAG;AACpD,UAAI,OAAO,uBAAuB,MAAM;AACtC,eAAO,IAAI,0BAA0B,OAAO,mBAAmB;AAAA,MACjE;AACA,UAAI,OAAO,WAAW,aAAa,IAAI,WAAW,OAAO,OAAO;AAChE,UAAI,OAAO,SAAS,aAAa,IAAI,SAAS,OAAO,KAAK;AAC1D,UAAI,OAAO,UAAU,KAAM,QAAO,IAAI,WAAW,KAAK,UAAU,OAAO,MAAM,CAAC;AAC9E,UAAI,OAAO,YAAY,KAAM,QAAO,IAAI,aAAa,OAAO,OAAO,QAAQ,CAAC;AAC5E,UAAI,OAAO,gBAAgB,aAAa,IAAI,gBAAgB,OAAO,YAAY;AAC/E;AAAA,IACF,KAAK;AACH,UAAI,OAAO,WAAW,aAAa,IAAI,YAAY,OAAO,OAAO;AACjE,UAAI,OAAO,cAAc,KAAM,QAAO,IAAI,eAAe,OAAO,OAAO,UAAU,CAAC;AAClF,aAAO,IAAI,aAAa,OAAO,SAAS,KAAK,GAAG,CAAC;AACjD;AAAA,IACF,KAAK;AACH,aAAO,IAAI,YAAY,OAAO,OAAO,OAAO,CAAC;AAC7C,aAAO,IAAI,QAAQ,OAAO,IAAI;AAC9B,UAAI,OAAO,WAAW,aAAa,IAAI,SAAS,OAAO,OAAO;AAC9D;AAAA,IACF,KAAK;AACH,aAAO,IAAI,YAAY,OAAO,OAAO,OAAO,CAAC;AAC7C,aAAO,IAAI,SAAS,OAAO,KAAK;AAGhC,UAAI,OAAO,YAAY,KAAM,QAAO,IAAI,YAAY,KAAK,UAAU,OAAO,QAAQ,CAAC;AACnF;AAAA,IACF,KAAK;AACH,aAAO,IAAI,YAAY,OAAO,OAAO,OAAO,CAAC;AAC7C;AAAA,IACF,KAAK;AACH,aAAO,IAAI,YAAY,OAAO,OAAO,OAAO,CAAC;AAC7C,aAAO,IAAI,cAAc,OAAO,SAAS;AACzC,UAAI,OAAO,iBAAiB,MAAM;AAChC,eAAO,IAAI,kBAAkB,OAAO,aAAa;AAAA,MACnD;AACA;AAAA,IACF,KAAK;AACH,aAAO,IAAI,SAAS,OAAO,KAAK;AAChC,UAAI,OAAO,UAAW,QAAO,IAAI,cAAc,OAAO,SAAS;AAC/D,UAAI,OAAO,WAAY,QAAO,IAAI,eAAe,OAAO,UAAU;AAClE;AAAA,IACF,KAAK;AACH,UAAI,OAAO,WAAW,aAAa,IAAI,YAAY,OAAO,OAAO;AACjE,UAAI,OAAO,cAAc,KAAM,QAAO,IAAI,eAAe,OAAO,OAAO,UAAU,CAAC;AAClF;AAAA,IACF,KAAK;AACH,aAAO,IAAI,QAAQ,OAAO,IAAI;AAC9B;AAAA,IACF,KAAK;AACH,aAAO,IAAI,cAAc,OAAO,SAAS;AACzC,aAAO,IAAI,YAAY,OAAO,OAAO;AACrC;AAAA,IACF,KAAK;AACH,aAAO,IAAI,gBAAgB,OAAO,UAAU;AAC5C,UAAI,OAAO,UAAW,QAAO,IAAI,UAAU,OAAO,SAAS;AAC3D;AAAA,EAAA;AAGJ,SAAO;AACT;"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const AnchorType = {
|
|
4
|
+
Cell: "cell",
|
|
5
|
+
CellRange: "cell_range",
|
|
6
|
+
Comment: "comment",
|
|
7
|
+
CommentThread: "comment_thread",
|
|
8
|
+
FileLineRange: "file_line_range",
|
|
9
|
+
Line: "line",
|
|
10
|
+
LineRange: "line_range",
|
|
11
|
+
Message: "msg",
|
|
12
|
+
MessageRange: "msg_range",
|
|
13
|
+
MessageBlock: "msg_block",
|
|
14
|
+
MessageSection: "msg_section",
|
|
15
|
+
MessageText: "msg_text",
|
|
16
|
+
Page: "page",
|
|
17
|
+
PageRange: "page_range",
|
|
18
|
+
Path: "path",
|
|
19
|
+
PageRect: "page_rect",
|
|
20
|
+
PageText: "page_text",
|
|
21
|
+
PixelRange: "pixel_range",
|
|
22
|
+
PmMark: "pm_mark",
|
|
23
|
+
PmNode: "pm_node",
|
|
24
|
+
PmNodeRange: "pm_node_range",
|
|
25
|
+
Rect: "rect",
|
|
26
|
+
Section: "section",
|
|
27
|
+
SemanticQuery: "semantic_query",
|
|
28
|
+
Shape: "shape",
|
|
29
|
+
SheetCell: "sheet_cell",
|
|
30
|
+
SheetRange: "sheet_range",
|
|
31
|
+
SheetTab: "sheet_tab",
|
|
32
|
+
SheetTable: "sheet_table",
|
|
33
|
+
LakehouseTable: "lakehouse_table",
|
|
34
|
+
Slide: "slide",
|
|
35
|
+
SqlQuery: "sql_query",
|
|
36
|
+
Time: "time",
|
|
37
|
+
TimeRange: "time_range",
|
|
38
|
+
ToolCall: "tool_call"
|
|
39
|
+
};
|
|
40
|
+
const LEGACY_ANCHOR_TYPES = {
|
|
41
|
+
message: "msg",
|
|
42
|
+
message_range: "msg_range"
|
|
43
|
+
};
|
|
44
|
+
function isAnchorType(value) {
|
|
45
|
+
return typeof value === "string" && Object.values(AnchorType).includes(value);
|
|
46
|
+
}
|
|
47
|
+
exports.AnchorType = AnchorType;
|
|
48
|
+
exports.LEGACY_ANCHOR_TYPES = LEGACY_ANCHOR_TYPES;
|
|
49
|
+
exports.isAnchorType = isAnchorType;
|
|
50
|
+
//# sourceMappingURL=types.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.cjs","sources":["../../../../../references/src/anchors/types.ts"],"sourcesContent":["/**\n * Anchor types — Level 2 of the reference system.\n *\n * Each anchor describes a specific location within an asset.\n * Discriminated union on `type`. Ordered alphabetically.\n *\n * Property names use camelCase; the `type` discriminator string stays snake_case\n * (it's a version identifier, not a property name).\n */\n\n// ---------------------------------------------------------------------------\n// Individual anchor types (alphabetical by `type` discriminator)\n// ---------------------------------------------------------------------------\n\nexport type CellAnchor = { type: 'cell'; cellId: string };\nexport type CellRangeAnchor = {\n type: 'cell_range';\n startCellId: string;\n endCellId: string;\n};\nexport type CommentAnchor = {\n type: 'comment';\n threadId: string;\n commentId: string;\n};\nexport type CommentThreadAnchor = { type: 'comment_thread'; threadId: string };\n/**\n * An inclusive, 1-based line range of one file of a repository source — a\n * GitHub `catalog` asset whose files Clio indexes\n * (`docs/clio/21-repository-source.md`). `path` is the repo-relative,\n * `/`-separated file path: structure, not content. Distinct from the\n * path-less `line_range` so a reader that does not know the kind fails closed\n * instead of dropping the file. Bounds, path grammar and the byte cap are\n * shared with Clio's `LineRangeLocator` (`./file-line-range.ts`).\n *\n * Wire form (canonical — parameters sorted, as Clio writes it):\n * `anchor=file_line_range&end_line=<m>&path=<path>&start_line=<n>`.\n */\nexport type FileLineRangeAnchor = {\n type: 'file_line_range';\n path: string;\n startLine: number;\n endLine: number;\n};\nexport type LineAnchor = { type: 'line'; line: number };\nexport type LineRangeAnchor = {\n type: 'line_range';\n startLine: number;\n endLine: number;\n};\n/**\n * A single chat message in a session transcript.\n *\n * `messageId` is the **Athena message tracking id** — the same uuid4 that\n * appears as `user_message_tracking_id` / `ai_message_tracking_id` in Keryx\n * activity attributions (built by `build_agent_attributions`,\n * agora/services/keryx/client.py), as `trackingId` on session Y.Doc\n * liveMessages, as the `data-message-tracking-id` DOM attribute, and as the\n * existing `scroll_to_message` URL param in Olympus. It is NOT the LangChain\n * checkpoint `message.id`.\n *\n * Wire form: `anchor=msg&msg_id=…` (the pre-rename spellings\n * `anchor=message&message_id=…` are still parsed).\n */\nexport type MessageAnchor = { type: 'msg'; messageId: string };\n/**\n * Inclusive span of session messages in transcript order. Both ids are\n * Athena message tracking ids (see `MessageAnchor`).\n */\nexport type MessageRangeAnchor = {\n type: 'msg_range';\n startMessageId: string;\n endMessageId: string;\n};\n/**\n * One top-level block (paragraph, heading, list, table, code fence, …) of a\n * session message's markdown body. `messageId` is the Athena message tracking\n * id (see `MessageAnchor`); `block` is the 1-based position among the\n * message's top-level blocks. `hash` is an optional short fingerprint of the\n * block's normalized text (see `messageBlockHash`) so consumers can detect\n * that the block at that position no longer holds the linked content.\n *\n * URL params: `msg_id`, `block`, `hash`.\n */\nexport type MessageBlockAnchor = {\n type: 'msg_block';\n messageId: string;\n block: number;\n hash?: string;\n};\n/**\n * A heading-delimited section of a session message: the heading whose slug\n * (see `messageHeadingSlug`) equals `heading`, through the block before the\n * next heading of the same or a higher level. `nth` (1-based) disambiguates\n * repeated headings; absent ⇒ first.\n *\n * URL params: `msg_id`, `heading`, `nth`.\n */\nexport type MessageSectionAnchor = {\n type: 'msg_section';\n messageId: string;\n heading: string;\n nth?: number;\n};\n/**\n * An exact text span inside a session message. `text` is the quoted excerpt,\n * matched against the message's whitespace-normalized plain text (see\n * `normalizeMessageText`). Optional `block` narrows the search to one\n * top-level block (1-based); optional `prefix` / `suffix` are the normalized\n * text immediately before / after the span, used to pick between repeated\n * occurrences. Consumers fall back to the block, then the whole message, when\n * the span can't be found.\n *\n * URL params: `msg_id`, `text`, `block`, `prefix`, `suffix`.\n */\nexport type MessageTextAnchor = {\n type: 'msg_text';\n messageId: string;\n text: string;\n block?: number;\n prefix?: string;\n suffix?: string;\n};\nexport type PageAnchor = { type: 'page'; page: number };\n/**\n * A file path inside an asset, optionally narrowed to a 1-based source\n * location. `column` is only meaningful when `line` is present.\n */\nexport type PathAnchor = {\n type: 'path';\n path: string;\n line?: number;\n column?: number;\n};\nexport type PageRangeAnchor = {\n type: 'page_range';\n startPage: number;\n endPage: number;\n};\n/** Coordinate unit for a `page_rect` anchor. Absent ⇒ `percent`. */\nexport const PageRectUnit = {\n /** Percentages of the page dimensions (0-100). Resolution-independent. */\n Percent: 'percent',\n /**\n * PDF points (1/72\"), the unit of the legacy `bbox_left/bbox_top/...`\n * citation-URL params and of PDF viewer page coordinates.\n */\n Point: 'point',\n} as const;\n\nexport type PageRectUnit = (typeof PageRectUnit)[keyof typeof PageRectUnit];\n\n/**\n * Rectangular region on a specific page. `x`/`y`/`width`/`height` are in\n * `unit` coordinates — percentages of the page dimensions (0-100) when\n * `unit` is absent or `percent`, PDF points when `unit` is `point`.\n */\nexport type PageRectAnchor = {\n type: 'page_rect';\n page: number;\n x: number;\n y: number;\n width: number;\n height: number;\n unit?: PageRectUnit;\n};\n/**\n * A quoted text span on a specific page. `text` is the selected excerpt,\n * re-located by text search when the anchor is resolved. Optional `prefix` /\n * `suffix` are the normalized text immediately before / after the span, used\n * to pick between repeated occurrences of `text` on the page (the same\n * contract as `MessageTextAnchor`). Optional `hash` is a short fingerprint of\n * the cited unit's normalized text (the `MessageBlockAnchor` pattern:\n * `messageBlockHash`, 32-bit FNV-1a as 8 hex chars) so a consumer can tell a\n * stale citation from a live one and fall back to text search. The anchor\n * never stores geometry; rectangles are derived when it is resolved.\n *\n * URL params: `page`, `text`, `prefix`, `suffix`, `hash`.\n */\nexport type PageTextAnchor = {\n type: 'page_text';\n page: number;\n text: string;\n prefix?: string;\n suffix?: string;\n hash?: string;\n};\nexport type PmNodeAnchor = { type: 'pm_node'; nodeId: string };\nexport type PmNodeRangeAnchor = {\n type: 'pm_node_range';\n startNodeId: string;\n endNodeId: string;\n};\n/** Pixel-based region anchor for images. Coordinates relative to natural image dimensions. */\nexport type PixelRangeAnchor = {\n type: 'pixel_range';\n x: number;\n y: number;\n width: number;\n height: number;\n};\n/** ProseMirror mark pointer; composite `markType:instanceId` (e.g. CommentsKit `thread` + thread id). */\nexport type PmMarkAnchor = { type: 'pm_mark'; markId: string };\n/** Percentage-based region (0-100). Resolution-independent. */\nexport type RectAnchor = {\n type: 'rect';\n x: number;\n y: number;\n width: number;\n height: number;\n};\n/**\n * Named slice of an asset's persisted metadata (e.g. a computer asset's `status` / `ports`\n * section), or a section of a recording's generated notes (`decisions`, `action_items`,\n * `open_questions`, `notes`). `topic` is the 1-based `### topic` under a recording's Notes\n * (`section=notes&topic=2`), as Clio's notes hits name it; absent for every other section.\n */\nexport type SectionAnchor = { type: 'section'; section: string; topic?: number };\n/**\n * How a cited value relates to a generative (query) anchor's result.\n *\n * Absent ⇒ consumers MUST treat it as `supporting`. The (de)serializer never\n * defaults it, so round-trips stay exact.\n */\nexport const QueryResultRelationship = {\n /** The cell value IS (a cell of) the query result — a 1:1 extraction. */\n Exact: 'exact',\n /**\n * The cell value is authored (e.g. a narrative claim); the query result is\n * supporting evidence / justification, not the value itself. Re-running the\n * query is read-only verification and never replaces the cell value.\n */\n Supporting: 'supporting',\n} as const;\n\nexport type QueryResultRelationship =\n (typeof QueryResultRelationship)[keyof typeof QueryResultRelationship];\n\n/**\n * Generative anchor — a value derived from a semantic-model (Cube.js) query.\n *\n * Unlike positional anchors (page/cell/line), the \"location\" is the\n * transformation itself: the full Cube.js query spec that was run. Re-running\n * it is read-only verification; it never overwrites the cited value.\n */\nexport type SemanticQueryAnchor = {\n type: 'semantic_query';\n /** The full Cube.js query spec that produced the result (the codified transformation). */\n query: Record<string, unknown>;\n /** Cited measure/dimension id, e.g. `orders.total_revenue`. Omit ⇒ the whole result is the evidence. */\n field?: string;\n /** Dimension/key values identifying the cited row. Robust to re-ordering, unlike `rowIndex`. */\n rowKey?: Record<string, string>;\n /** Positional fallback row selector. */\n rowIndex?: number;\n /** Whether the cell value equals the result (`exact`) or is authored evidence (`supporting`). */\n relationship?: QueryResultRelationship;\n /** Provenance: semantic-model schema version at run time. */\n schemaVersion?: number;\n /** Provenance: sha256 of the deployed YAML at run time, for drift detection. */\n schemaHash?: string;\n /**\n * Provenance for lakehouse-backed models: each source table's Iceberg identity\n * and snapshot when the value was computed (`\"<namespace>.<table>\"` →\n * `\"<table_uuid>:<snapshot_id>\"`, the snapshot empty for a table never written).\n * Compared with the live tables by the freshness check.\n */\n sourceSnapshots?: Record<string, string>;\n /** Provenance: the result's \"data as of\" instant (ISO-8601 UTC) at capture. */\n dataAsOf?: string;\n};\n/**\n * One or more shapes on a presentation slide. `shapeIds` are stable Yjs\n * ElementIds (the SDK's `shape.shape_id`) and resolve the anchor on their\n * own; `slideId` / `slideIndex` (1-based) are optional refinements.\n */\nexport type ShapeAnchor = {\n type: 'shape';\n slideId?: string;\n slideIndex?: number;\n shapeIds: string[];\n};\n/**\n * A single cell. `chartId` (`chart=`) names the chart anchored at the cell\n * when the place is that chart, not the cell's value: a chart sits right of\n * and below its anchor cell, so a reader reveals it from that corner.\n */\nexport type SheetCellAnchor = {\n type: 'sheet_cell';\n sheetId: number;\n cell: string;\n chartId?: string;\n};\nexport type SheetRangeAnchor = {\n type: 'sheet_range';\n sheetId: number;\n range: string;\n /**\n * The spreadsheet engine's shift-log frontier (writer id → seq, `RncEngine.shiftLogFrontier`) the\n * moment `range` was taken, so a reader with the live engine can resolve the range to its current\n * coordinates after rows/columns were inserted or deleted since (`RncEngine.transformRange`).\n * Absent on an anchor taken without an engine, which resolves to `range` as stored.\n */\n frontier?: Record<string, number>;\n};\n/** A whole worksheet / sheet tab in a spreadsheet. */\nexport type SheetTabAnchor = {\n type: 'sheet_tab';\n sheetId: number;\n};\n/**\n * A named Excel table (ListObject) within a worksheet. Stable identity:\n * the table's name survives sorts, inserts, and row additions that would\n * break a raw `sheet_range`. Use this anchor in preference to\n * `sheet_range` whenever the user is binding to a structured table.\n *\n * `fallbackRange` is an optional A1-style range used by resolvers when\n * the table has been deleted or renamed — best-effort recovery.\n */\nexport type SheetTableAnchor = {\n type: 'sheet_table';\n sheetId: number;\n tableName: string;\n fallbackRange?: string;\n};\n/**\n * One table of an Orion lakehouse namespace, addressed on the namespace asset\n * (tables have no asset rows). `table` is the name within the namespace;\n * `tableUuid` is the Iceberg table UUID, the stable identity that detects a\n * drop-and-recreate or rename; `snapshotId` pins a read to one Iceberg\n * snapshot (an unsupported pinned read is rejected, never served from current\n * data).\n */\nexport type LakehouseTableAnchor = {\n type: 'lakehouse_table';\n table: string;\n tableUuid?: string;\n snapshotId?: string;\n};\n/**\n * A whole slide of a PPTX deck. `slideId` is the stable Yjs SlideId (the\n * SDK's `slide.slide_id`); `slideIndex` is the 1-based display position.\n * At least one must be present; producers should emit both when known.\n */\nexport type SlideAnchor = {\n type: 'slide';\n slideId?: string;\n slideIndex?: number;\n};\n/**\n * Generative anchor — a value derived from a SQL query.\n *\n * The transformation is the SQL text, carried inline or (preferred) as a\n * governed, re-runnable `query_snippet` asset. Re-running it is read-only\n * verification; it never overwrites the cited value.\n */\nexport type SqlQueryAnchor = {\n type: 'sql_query';\n /** The SQL that produced the result. Optional when `querySnippetAssetId` is set. */\n sql?: string;\n /** A re-runnable `query_snippet` asset that holds the SQL (preferred over inline `sql`). */\n querySnippetAssetId?: string;\n /** SQL dialect, e.g. `postgres`, `snowflake`. */\n dialect?: string;\n /** Cited result column name. Omit ⇒ the whole result is the evidence. */\n field?: string;\n /** Identifying column values for the cited row. Robust to re-ordering, unlike `rowIndex`. */\n rowKey?: Record<string, string>;\n /** Positional fallback row selector. */\n rowIndex?: number;\n /** Whether the cell value equals the result (`exact`) or is authored evidence (`supporting`). */\n relationship?: QueryResultRelationship;\n};\n/** Time string in \"H:MM:SS\" / \"MM:SS\" / \"M:SS\" format. No plain seconds. */\nexport type TimeAnchor = { type: 'time'; time: string };\nexport type TimeRangeAnchor = {\n type: 'time_range';\n startTime: string;\n endTime: string;\n};\n/**\n * A tool invocation in a session transcript. `toolCallId` is the\n * LangChain-native tool call id (the key used by session Y.Doc\n * liveToolCalls), NOT an Athena message tracking id. `messageId` is the\n * tracking id of the assistant message that issued the call, when the\n * producer knows it (Keryx activity carries both as `tool_call_id` and\n * `ai_message_tracking_id`); it lets a consumer still land on the owning\n * message when the call itself is not in view (e.g. an abandoned branch).\n */\nexport type ToolCallAnchor = { type: 'tool_call'; toolCallId: string; messageId?: string };\n\n// ---------------------------------------------------------------------------\n// Union\n// ---------------------------------------------------------------------------\n\nexport type Anchor =\n | CellAnchor\n | CellRangeAnchor\n | CommentAnchor\n | CommentThreadAnchor\n | FileLineRangeAnchor\n | LineAnchor\n | LineRangeAnchor\n | MessageAnchor\n | MessageRangeAnchor\n | MessageBlockAnchor\n | MessageSectionAnchor\n | MessageTextAnchor\n | PageAnchor\n | PageRangeAnchor\n | PathAnchor\n | PageRectAnchor\n | PageTextAnchor\n | PixelRangeAnchor\n | PmNodeAnchor\n | PmNodeRangeAnchor\n | PmMarkAnchor\n | RectAnchor\n | SectionAnchor\n | SemanticQueryAnchor\n | ShapeAnchor\n | SheetCellAnchor\n | SheetRangeAnchor\n | SheetTabAnchor\n | SheetTableAnchor\n | LakehouseTableAnchor\n | SlideAnchor\n | SqlQueryAnchor\n | TimeAnchor\n | TimeRangeAnchor\n | ToolCallAnchor;\n\n// ---------------------------------------------------------------------------\n// AnchorType — string literal union of all `type` discriminators\n// ---------------------------------------------------------------------------\n\nexport type AnchorType = Anchor['type'];\n\nexport const AnchorType = {\n Cell: 'cell',\n CellRange: 'cell_range',\n Comment: 'comment',\n CommentThread: 'comment_thread',\n FileLineRange: 'file_line_range',\n Line: 'line',\n LineRange: 'line_range',\n Message: 'msg',\n MessageRange: 'msg_range',\n MessageBlock: 'msg_block',\n MessageSection: 'msg_section',\n MessageText: 'msg_text',\n Page: 'page',\n PageRange: 'page_range',\n Path: 'path',\n PageRect: 'page_rect',\n PageText: 'page_text',\n PixelRange: 'pixel_range',\n PmMark: 'pm_mark',\n PmNode: 'pm_node',\n PmNodeRange: 'pm_node_range',\n Rect: 'rect',\n Section: 'section',\n SemanticQuery: 'semantic_query',\n Shape: 'shape',\n SheetCell: 'sheet_cell',\n SheetRange: 'sheet_range',\n SheetTab: 'sheet_tab',\n SheetTable: 'sheet_table',\n LakehouseTable: 'lakehouse_table',\n Slide: 'slide',\n SqlQuery: 'sql_query',\n Time: 'time',\n TimeRange: 'time_range',\n ToolCall: 'tool_call',\n} as const satisfies Record<string, AnchorType>;\n\n// ---------------------------------------------------------------------------\n// Type guards\n// ---------------------------------------------------------------------------\n\n/**\n * Pre-rename session anchor spellings that are still accepted on input so\n * links shared before the `msg*` rename keep resolving. Output always uses\n * the current names (see `serialize.ts`).\n */\nexport const LEGACY_ANCHOR_TYPES: Readonly<Record<string, AnchorType>> = {\n message: 'msg',\n message_range: 'msg_range',\n};\n\nexport function isAnchorType(value: unknown): value is AnchorType {\n return typeof value === 'string' && Object.values(AnchorType).includes(value as AnchorType);\n}\n\n/**\n * Quick check: validates only the `type` discriminator string.\n * For full structural validation, use `parseAnchor` from `./schemas`.\n */\nexport function isAnchor(value: unknown): value is Anchor {\n if (typeof value !== 'object' || value === null) return false;\n return isAnchorType((value as Record<string, unknown>).type);\n}\n\n// ---------------------------------------------------------------------------\n// Runtime-only types (not stored, produced by accessors)\n// ---------------------------------------------------------------------------\n\n/** Runtime form of TimeAnchor with pre-computed seconds. */\nexport type TimeAnchorSeconds = { type: 'time_seconds'; timeSeconds: number };\n/** Runtime form of TimeRangeAnchor with pre-computed seconds. */\nexport type TimeRangeAnchorSeconds = {\n type: 'time_range_seconds';\n startTimeSeconds: number;\n endTimeSeconds: number;\n};\n"],"names":[],"mappings":";;AAsbO,MAAM,aAAa;AAAA,EACxB,MAAM;AAAA,EACN,WAAW;AAAA,EACX,SAAS;AAAA,EACT,eAAe;AAAA,EACf,eAAe;AAAA,EACf,MAAM;AAAA,EACN,WAAW;AAAA,EACX,SAAS;AAAA,EACT,cAAc;AAAA,EACd,cAAc;AAAA,EACd,gBAAgB;AAAA,EAChB,aAAa;AAAA,EACb,MAAM;AAAA,EACN,WAAW;AAAA,EACX,MAAM;AAAA,EACN,UAAU;AAAA,EACV,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,aAAa;AAAA,EACb,MAAM;AAAA,EACN,SAAS;AAAA,EACT,eAAe;AAAA,EACf,OAAO;AAAA,EACP,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,gBAAgB;AAAA,EAChB,OAAO;AAAA,EACP,UAAU;AAAA,EACV,MAAM;AAAA,EACN,WAAW;AAAA,EACX,UAAU;AACZ;AAWO,MAAM,sBAA4D;AAAA,EACvE,SAAS;AAAA,EACT,eAAe;AACjB;AAEO,SAAS,aAAa,OAAqC;AAChE,SAAO,OAAO,UAAU,YAAY,OAAO,OAAO,UAAU,EAAE,SAAS,KAAmB;AAC5F;;;;"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
const AnchorType = {
|
|
2
|
+
Cell: "cell",
|
|
3
|
+
CellRange: "cell_range",
|
|
4
|
+
Comment: "comment",
|
|
5
|
+
CommentThread: "comment_thread",
|
|
6
|
+
FileLineRange: "file_line_range",
|
|
7
|
+
Line: "line",
|
|
8
|
+
LineRange: "line_range",
|
|
9
|
+
Message: "msg",
|
|
10
|
+
MessageRange: "msg_range",
|
|
11
|
+
MessageBlock: "msg_block",
|
|
12
|
+
MessageSection: "msg_section",
|
|
13
|
+
MessageText: "msg_text",
|
|
14
|
+
Page: "page",
|
|
15
|
+
PageRange: "page_range",
|
|
16
|
+
Path: "path",
|
|
17
|
+
PageRect: "page_rect",
|
|
18
|
+
PageText: "page_text",
|
|
19
|
+
PixelRange: "pixel_range",
|
|
20
|
+
PmMark: "pm_mark",
|
|
21
|
+
PmNode: "pm_node",
|
|
22
|
+
PmNodeRange: "pm_node_range",
|
|
23
|
+
Rect: "rect",
|
|
24
|
+
Section: "section",
|
|
25
|
+
SemanticQuery: "semantic_query",
|
|
26
|
+
Shape: "shape",
|
|
27
|
+
SheetCell: "sheet_cell",
|
|
28
|
+
SheetRange: "sheet_range",
|
|
29
|
+
SheetTab: "sheet_tab",
|
|
30
|
+
SheetTable: "sheet_table",
|
|
31
|
+
LakehouseTable: "lakehouse_table",
|
|
32
|
+
Slide: "slide",
|
|
33
|
+
SqlQuery: "sql_query",
|
|
34
|
+
Time: "time",
|
|
35
|
+
TimeRange: "time_range",
|
|
36
|
+
ToolCall: "tool_call"
|
|
37
|
+
};
|
|
38
|
+
const LEGACY_ANCHOR_TYPES = {
|
|
39
|
+
message: "msg",
|
|
40
|
+
message_range: "msg_range"
|
|
41
|
+
};
|
|
42
|
+
function isAnchorType(value) {
|
|
43
|
+
return typeof value === "string" && Object.values(AnchorType).includes(value);
|
|
44
|
+
}
|
|
45
|
+
export {
|
|
46
|
+
AnchorType,
|
|
47
|
+
LEGACY_ANCHOR_TYPES,
|
|
48
|
+
isAnchorType
|
|
49
|
+
};
|
|
50
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sources":["../../../../../references/src/anchors/types.ts"],"sourcesContent":["/**\n * Anchor types — Level 2 of the reference system.\n *\n * Each anchor describes a specific location within an asset.\n * Discriminated union on `type`. Ordered alphabetically.\n *\n * Property names use camelCase; the `type` discriminator string stays snake_case\n * (it's a version identifier, not a property name).\n */\n\n// ---------------------------------------------------------------------------\n// Individual anchor types (alphabetical by `type` discriminator)\n// ---------------------------------------------------------------------------\n\nexport type CellAnchor = { type: 'cell'; cellId: string };\nexport type CellRangeAnchor = {\n type: 'cell_range';\n startCellId: string;\n endCellId: string;\n};\nexport type CommentAnchor = {\n type: 'comment';\n threadId: string;\n commentId: string;\n};\nexport type CommentThreadAnchor = { type: 'comment_thread'; threadId: string };\n/**\n * An inclusive, 1-based line range of one file of a repository source — a\n * GitHub `catalog` asset whose files Clio indexes\n * (`docs/clio/21-repository-source.md`). `path` is the repo-relative,\n * `/`-separated file path: structure, not content. Distinct from the\n * path-less `line_range` so a reader that does not know the kind fails closed\n * instead of dropping the file. Bounds, path grammar and the byte cap are\n * shared with Clio's `LineRangeLocator` (`./file-line-range.ts`).\n *\n * Wire form (canonical — parameters sorted, as Clio writes it):\n * `anchor=file_line_range&end_line=<m>&path=<path>&start_line=<n>`.\n */\nexport type FileLineRangeAnchor = {\n type: 'file_line_range';\n path: string;\n startLine: number;\n endLine: number;\n};\nexport type LineAnchor = { type: 'line'; line: number };\nexport type LineRangeAnchor = {\n type: 'line_range';\n startLine: number;\n endLine: number;\n};\n/**\n * A single chat message in a session transcript.\n *\n * `messageId` is the **Athena message tracking id** — the same uuid4 that\n * appears as `user_message_tracking_id` / `ai_message_tracking_id` in Keryx\n * activity attributions (built by `build_agent_attributions`,\n * agora/services/keryx/client.py), as `trackingId` on session Y.Doc\n * liveMessages, as the `data-message-tracking-id` DOM attribute, and as the\n * existing `scroll_to_message` URL param in Olympus. It is NOT the LangChain\n * checkpoint `message.id`.\n *\n * Wire form: `anchor=msg&msg_id=…` (the pre-rename spellings\n * `anchor=message&message_id=…` are still parsed).\n */\nexport type MessageAnchor = { type: 'msg'; messageId: string };\n/**\n * Inclusive span of session messages in transcript order. Both ids are\n * Athena message tracking ids (see `MessageAnchor`).\n */\nexport type MessageRangeAnchor = {\n type: 'msg_range';\n startMessageId: string;\n endMessageId: string;\n};\n/**\n * One top-level block (paragraph, heading, list, table, code fence, …) of a\n * session message's markdown body. `messageId` is the Athena message tracking\n * id (see `MessageAnchor`); `block` is the 1-based position among the\n * message's top-level blocks. `hash` is an optional short fingerprint of the\n * block's normalized text (see `messageBlockHash`) so consumers can detect\n * that the block at that position no longer holds the linked content.\n *\n * URL params: `msg_id`, `block`, `hash`.\n */\nexport type MessageBlockAnchor = {\n type: 'msg_block';\n messageId: string;\n block: number;\n hash?: string;\n};\n/**\n * A heading-delimited section of a session message: the heading whose slug\n * (see `messageHeadingSlug`) equals `heading`, through the block before the\n * next heading of the same or a higher level. `nth` (1-based) disambiguates\n * repeated headings; absent ⇒ first.\n *\n * URL params: `msg_id`, `heading`, `nth`.\n */\nexport type MessageSectionAnchor = {\n type: 'msg_section';\n messageId: string;\n heading: string;\n nth?: number;\n};\n/**\n * An exact text span inside a session message. `text` is the quoted excerpt,\n * matched against the message's whitespace-normalized plain text (see\n * `normalizeMessageText`). Optional `block` narrows the search to one\n * top-level block (1-based); optional `prefix` / `suffix` are the normalized\n * text immediately before / after the span, used to pick between repeated\n * occurrences. Consumers fall back to the block, then the whole message, when\n * the span can't be found.\n *\n * URL params: `msg_id`, `text`, `block`, `prefix`, `suffix`.\n */\nexport type MessageTextAnchor = {\n type: 'msg_text';\n messageId: string;\n text: string;\n block?: number;\n prefix?: string;\n suffix?: string;\n};\nexport type PageAnchor = { type: 'page'; page: number };\n/**\n * A file path inside an asset, optionally narrowed to a 1-based source\n * location. `column` is only meaningful when `line` is present.\n */\nexport type PathAnchor = {\n type: 'path';\n path: string;\n line?: number;\n column?: number;\n};\nexport type PageRangeAnchor = {\n type: 'page_range';\n startPage: number;\n endPage: number;\n};\n/** Coordinate unit for a `page_rect` anchor. Absent ⇒ `percent`. */\nexport const PageRectUnit = {\n /** Percentages of the page dimensions (0-100). Resolution-independent. */\n Percent: 'percent',\n /**\n * PDF points (1/72\"), the unit of the legacy `bbox_left/bbox_top/...`\n * citation-URL params and of PDF viewer page coordinates.\n */\n Point: 'point',\n} as const;\n\nexport type PageRectUnit = (typeof PageRectUnit)[keyof typeof PageRectUnit];\n\n/**\n * Rectangular region on a specific page. `x`/`y`/`width`/`height` are in\n * `unit` coordinates — percentages of the page dimensions (0-100) when\n * `unit` is absent or `percent`, PDF points when `unit` is `point`.\n */\nexport type PageRectAnchor = {\n type: 'page_rect';\n page: number;\n x: number;\n y: number;\n width: number;\n height: number;\n unit?: PageRectUnit;\n};\n/**\n * A quoted text span on a specific page. `text` is the selected excerpt,\n * re-located by text search when the anchor is resolved. Optional `prefix` /\n * `suffix` are the normalized text immediately before / after the span, used\n * to pick between repeated occurrences of `text` on the page (the same\n * contract as `MessageTextAnchor`). Optional `hash` is a short fingerprint of\n * the cited unit's normalized text (the `MessageBlockAnchor` pattern:\n * `messageBlockHash`, 32-bit FNV-1a as 8 hex chars) so a consumer can tell a\n * stale citation from a live one and fall back to text search. The anchor\n * never stores geometry; rectangles are derived when it is resolved.\n *\n * URL params: `page`, `text`, `prefix`, `suffix`, `hash`.\n */\nexport type PageTextAnchor = {\n type: 'page_text';\n page: number;\n text: string;\n prefix?: string;\n suffix?: string;\n hash?: string;\n};\nexport type PmNodeAnchor = { type: 'pm_node'; nodeId: string };\nexport type PmNodeRangeAnchor = {\n type: 'pm_node_range';\n startNodeId: string;\n endNodeId: string;\n};\n/** Pixel-based region anchor for images. Coordinates relative to natural image dimensions. */\nexport type PixelRangeAnchor = {\n type: 'pixel_range';\n x: number;\n y: number;\n width: number;\n height: number;\n};\n/** ProseMirror mark pointer; composite `markType:instanceId` (e.g. CommentsKit `thread` + thread id). */\nexport type PmMarkAnchor = { type: 'pm_mark'; markId: string };\n/** Percentage-based region (0-100). Resolution-independent. */\nexport type RectAnchor = {\n type: 'rect';\n x: number;\n y: number;\n width: number;\n height: number;\n};\n/**\n * Named slice of an asset's persisted metadata (e.g. a computer asset's `status` / `ports`\n * section), or a section of a recording's generated notes (`decisions`, `action_items`,\n * `open_questions`, `notes`). `topic` is the 1-based `### topic` under a recording's Notes\n * (`section=notes&topic=2`), as Clio's notes hits name it; absent for every other section.\n */\nexport type SectionAnchor = { type: 'section'; section: string; topic?: number };\n/**\n * How a cited value relates to a generative (query) anchor's result.\n *\n * Absent ⇒ consumers MUST treat it as `supporting`. The (de)serializer never\n * defaults it, so round-trips stay exact.\n */\nexport const QueryResultRelationship = {\n /** The cell value IS (a cell of) the query result — a 1:1 extraction. */\n Exact: 'exact',\n /**\n * The cell value is authored (e.g. a narrative claim); the query result is\n * supporting evidence / justification, not the value itself. Re-running the\n * query is read-only verification and never replaces the cell value.\n */\n Supporting: 'supporting',\n} as const;\n\nexport type QueryResultRelationship =\n (typeof QueryResultRelationship)[keyof typeof QueryResultRelationship];\n\n/**\n * Generative anchor — a value derived from a semantic-model (Cube.js) query.\n *\n * Unlike positional anchors (page/cell/line), the \"location\" is the\n * transformation itself: the full Cube.js query spec that was run. Re-running\n * it is read-only verification; it never overwrites the cited value.\n */\nexport type SemanticQueryAnchor = {\n type: 'semantic_query';\n /** The full Cube.js query spec that produced the result (the codified transformation). */\n query: Record<string, unknown>;\n /** Cited measure/dimension id, e.g. `orders.total_revenue`. Omit ⇒ the whole result is the evidence. */\n field?: string;\n /** Dimension/key values identifying the cited row. Robust to re-ordering, unlike `rowIndex`. */\n rowKey?: Record<string, string>;\n /** Positional fallback row selector. */\n rowIndex?: number;\n /** Whether the cell value equals the result (`exact`) or is authored evidence (`supporting`). */\n relationship?: QueryResultRelationship;\n /** Provenance: semantic-model schema version at run time. */\n schemaVersion?: number;\n /** Provenance: sha256 of the deployed YAML at run time, for drift detection. */\n schemaHash?: string;\n /**\n * Provenance for lakehouse-backed models: each source table's Iceberg identity\n * and snapshot when the value was computed (`\"<namespace>.<table>\"` →\n * `\"<table_uuid>:<snapshot_id>\"`, the snapshot empty for a table never written).\n * Compared with the live tables by the freshness check.\n */\n sourceSnapshots?: Record<string, string>;\n /** Provenance: the result's \"data as of\" instant (ISO-8601 UTC) at capture. */\n dataAsOf?: string;\n};\n/**\n * One or more shapes on a presentation slide. `shapeIds` are stable Yjs\n * ElementIds (the SDK's `shape.shape_id`) and resolve the anchor on their\n * own; `slideId` / `slideIndex` (1-based) are optional refinements.\n */\nexport type ShapeAnchor = {\n type: 'shape';\n slideId?: string;\n slideIndex?: number;\n shapeIds: string[];\n};\n/**\n * A single cell. `chartId` (`chart=`) names the chart anchored at the cell\n * when the place is that chart, not the cell's value: a chart sits right of\n * and below its anchor cell, so a reader reveals it from that corner.\n */\nexport type SheetCellAnchor = {\n type: 'sheet_cell';\n sheetId: number;\n cell: string;\n chartId?: string;\n};\nexport type SheetRangeAnchor = {\n type: 'sheet_range';\n sheetId: number;\n range: string;\n /**\n * The spreadsheet engine's shift-log frontier (writer id → seq, `RncEngine.shiftLogFrontier`) the\n * moment `range` was taken, so a reader with the live engine can resolve the range to its current\n * coordinates after rows/columns were inserted or deleted since (`RncEngine.transformRange`).\n * Absent on an anchor taken without an engine, which resolves to `range` as stored.\n */\n frontier?: Record<string, number>;\n};\n/** A whole worksheet / sheet tab in a spreadsheet. */\nexport type SheetTabAnchor = {\n type: 'sheet_tab';\n sheetId: number;\n};\n/**\n * A named Excel table (ListObject) within a worksheet. Stable identity:\n * the table's name survives sorts, inserts, and row additions that would\n * break a raw `sheet_range`. Use this anchor in preference to\n * `sheet_range` whenever the user is binding to a structured table.\n *\n * `fallbackRange` is an optional A1-style range used by resolvers when\n * the table has been deleted or renamed — best-effort recovery.\n */\nexport type SheetTableAnchor = {\n type: 'sheet_table';\n sheetId: number;\n tableName: string;\n fallbackRange?: string;\n};\n/**\n * One table of an Orion lakehouse namespace, addressed on the namespace asset\n * (tables have no asset rows). `table` is the name within the namespace;\n * `tableUuid` is the Iceberg table UUID, the stable identity that detects a\n * drop-and-recreate or rename; `snapshotId` pins a read to one Iceberg\n * snapshot (an unsupported pinned read is rejected, never served from current\n * data).\n */\nexport type LakehouseTableAnchor = {\n type: 'lakehouse_table';\n table: string;\n tableUuid?: string;\n snapshotId?: string;\n};\n/**\n * A whole slide of a PPTX deck. `slideId` is the stable Yjs SlideId (the\n * SDK's `slide.slide_id`); `slideIndex` is the 1-based display position.\n * At least one must be present; producers should emit both when known.\n */\nexport type SlideAnchor = {\n type: 'slide';\n slideId?: string;\n slideIndex?: number;\n};\n/**\n * Generative anchor — a value derived from a SQL query.\n *\n * The transformation is the SQL text, carried inline or (preferred) as a\n * governed, re-runnable `query_snippet` asset. Re-running it is read-only\n * verification; it never overwrites the cited value.\n */\nexport type SqlQueryAnchor = {\n type: 'sql_query';\n /** The SQL that produced the result. Optional when `querySnippetAssetId` is set. */\n sql?: string;\n /** A re-runnable `query_snippet` asset that holds the SQL (preferred over inline `sql`). */\n querySnippetAssetId?: string;\n /** SQL dialect, e.g. `postgres`, `snowflake`. */\n dialect?: string;\n /** Cited result column name. Omit ⇒ the whole result is the evidence. */\n field?: string;\n /** Identifying column values for the cited row. Robust to re-ordering, unlike `rowIndex`. */\n rowKey?: Record<string, string>;\n /** Positional fallback row selector. */\n rowIndex?: number;\n /** Whether the cell value equals the result (`exact`) or is authored evidence (`supporting`). */\n relationship?: QueryResultRelationship;\n};\n/** Time string in \"H:MM:SS\" / \"MM:SS\" / \"M:SS\" format. No plain seconds. */\nexport type TimeAnchor = { type: 'time'; time: string };\nexport type TimeRangeAnchor = {\n type: 'time_range';\n startTime: string;\n endTime: string;\n};\n/**\n * A tool invocation in a session transcript. `toolCallId` is the\n * LangChain-native tool call id (the key used by session Y.Doc\n * liveToolCalls), NOT an Athena message tracking id. `messageId` is the\n * tracking id of the assistant message that issued the call, when the\n * producer knows it (Keryx activity carries both as `tool_call_id` and\n * `ai_message_tracking_id`); it lets a consumer still land on the owning\n * message when the call itself is not in view (e.g. an abandoned branch).\n */\nexport type ToolCallAnchor = { type: 'tool_call'; toolCallId: string; messageId?: string };\n\n// ---------------------------------------------------------------------------\n// Union\n// ---------------------------------------------------------------------------\n\nexport type Anchor =\n | CellAnchor\n | CellRangeAnchor\n | CommentAnchor\n | CommentThreadAnchor\n | FileLineRangeAnchor\n | LineAnchor\n | LineRangeAnchor\n | MessageAnchor\n | MessageRangeAnchor\n | MessageBlockAnchor\n | MessageSectionAnchor\n | MessageTextAnchor\n | PageAnchor\n | PageRangeAnchor\n | PathAnchor\n | PageRectAnchor\n | PageTextAnchor\n | PixelRangeAnchor\n | PmNodeAnchor\n | PmNodeRangeAnchor\n | PmMarkAnchor\n | RectAnchor\n | SectionAnchor\n | SemanticQueryAnchor\n | ShapeAnchor\n | SheetCellAnchor\n | SheetRangeAnchor\n | SheetTabAnchor\n | SheetTableAnchor\n | LakehouseTableAnchor\n | SlideAnchor\n | SqlQueryAnchor\n | TimeAnchor\n | TimeRangeAnchor\n | ToolCallAnchor;\n\n// ---------------------------------------------------------------------------\n// AnchorType — string literal union of all `type` discriminators\n// ---------------------------------------------------------------------------\n\nexport type AnchorType = Anchor['type'];\n\nexport const AnchorType = {\n Cell: 'cell',\n CellRange: 'cell_range',\n Comment: 'comment',\n CommentThread: 'comment_thread',\n FileLineRange: 'file_line_range',\n Line: 'line',\n LineRange: 'line_range',\n Message: 'msg',\n MessageRange: 'msg_range',\n MessageBlock: 'msg_block',\n MessageSection: 'msg_section',\n MessageText: 'msg_text',\n Page: 'page',\n PageRange: 'page_range',\n Path: 'path',\n PageRect: 'page_rect',\n PageText: 'page_text',\n PixelRange: 'pixel_range',\n PmMark: 'pm_mark',\n PmNode: 'pm_node',\n PmNodeRange: 'pm_node_range',\n Rect: 'rect',\n Section: 'section',\n SemanticQuery: 'semantic_query',\n Shape: 'shape',\n SheetCell: 'sheet_cell',\n SheetRange: 'sheet_range',\n SheetTab: 'sheet_tab',\n SheetTable: 'sheet_table',\n LakehouseTable: 'lakehouse_table',\n Slide: 'slide',\n SqlQuery: 'sql_query',\n Time: 'time',\n TimeRange: 'time_range',\n ToolCall: 'tool_call',\n} as const satisfies Record<string, AnchorType>;\n\n// ---------------------------------------------------------------------------\n// Type guards\n// ---------------------------------------------------------------------------\n\n/**\n * Pre-rename session anchor spellings that are still accepted on input so\n * links shared before the `msg*` rename keep resolving. Output always uses\n * the current names (see `serialize.ts`).\n */\nexport const LEGACY_ANCHOR_TYPES: Readonly<Record<string, AnchorType>> = {\n message: 'msg',\n message_range: 'msg_range',\n};\n\nexport function isAnchorType(value: unknown): value is AnchorType {\n return typeof value === 'string' && Object.values(AnchorType).includes(value as AnchorType);\n}\n\n/**\n * Quick check: validates only the `type` discriminator string.\n * For full structural validation, use `parseAnchor` from `./schemas`.\n */\nexport function isAnchor(value: unknown): value is Anchor {\n if (typeof value !== 'object' || value === null) return false;\n return isAnchorType((value as Record<string, unknown>).type);\n}\n\n// ---------------------------------------------------------------------------\n// Runtime-only types (not stored, produced by accessors)\n// ---------------------------------------------------------------------------\n\n/** Runtime form of TimeAnchor with pre-computed seconds. */\nexport type TimeAnchorSeconds = { type: 'time_seconds'; timeSeconds: number };\n/** Runtime form of TimeRangeAnchor with pre-computed seconds. */\nexport type TimeRangeAnchorSeconds = {\n type: 'time_range_seconds';\n startTimeSeconds: number;\n endTimeSeconds: number;\n};\n"],"names":[],"mappings":"AAsbO,MAAM,aAAa;AAAA,EACxB,MAAM;AAAA,EACN,WAAW;AAAA,EACX,SAAS;AAAA,EACT,eAAe;AAAA,EACf,eAAe;AAAA,EACf,MAAM;AAAA,EACN,WAAW;AAAA,EACX,SAAS;AAAA,EACT,cAAc;AAAA,EACd,cAAc;AAAA,EACd,gBAAgB;AAAA,EAChB,aAAa;AAAA,EACb,MAAM;AAAA,EACN,WAAW;AAAA,EACX,MAAM;AAAA,EACN,UAAU;AAAA,EACV,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,QAAQ;AAAA,EACR,QAAQ;AAAA,EACR,aAAa;AAAA,EACb,MAAM;AAAA,EACN,SAAS;AAAA,EACT,eAAe;AAAA,EACf,OAAO;AAAA,EACP,WAAW;AAAA,EACX,YAAY;AAAA,EACZ,UAAU;AAAA,EACV,YAAY;AAAA,EACZ,gBAAgB;AAAA,EAChB,OAAO;AAAA,EACP,UAAU;AAAA,EACV,MAAM;AAAA,EACN,WAAW;AAAA,EACX,UAAU;AACZ;AAWO,MAAM,sBAA4D;AAAA,EACvE,SAAS;AAAA,EACT,eAAe;AACjB;AAEO,SAAS,aAAa,OAAqC;AAChE,SAAO,OAAO,UAAU,YAAY,OAAO,OAAO,UAAU,EAAE,SAAS,KAAmB;AAC5F;"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const parse = require("../../anchors/parse.cjs");
|
|
4
|
+
const versionRef = require("../../version-ref.cjs");
|
|
5
|
+
const templatePlaceholder = require("./template-placeholder.cjs");
|
|
6
|
+
function decodeFromAssetMentionUri(url) {
|
|
7
|
+
const params = url.searchParams;
|
|
8
|
+
const id = templatePlaceholder.unwrapTemplatePlaceholder(params.get("id") ?? "");
|
|
9
|
+
const anchor = parse.parseAnchorFromParams(params);
|
|
10
|
+
const version = versionRef.parseVersionRefFromParams(params);
|
|
11
|
+
const meta = {};
|
|
12
|
+
const assetType = params.get("asset_type") ?? params.get("type");
|
|
13
|
+
if (assetType) meta.assetType = templatePlaceholder.unwrapTemplatePlaceholder(assetType);
|
|
14
|
+
const excerpt = params.get("excerpt");
|
|
15
|
+
if (excerpt) meta.excerpt = excerpt;
|
|
16
|
+
const sheetName = params.get("sheet_name");
|
|
17
|
+
if (sheetName) meta.sheetName = sheetName;
|
|
18
|
+
const provider = params.get("provider");
|
|
19
|
+
if (provider) meta.provider = provider;
|
|
20
|
+
const providerLocation = params.get("provider_location") || params.get("providerLocation");
|
|
21
|
+
if (providerLocation) meta.providerLocation = providerLocation;
|
|
22
|
+
const ref = { referenced: "asset", id };
|
|
23
|
+
if (anchor) ref.anchor = anchor;
|
|
24
|
+
if (version) ref.version = version;
|
|
25
|
+
if (Object.keys(meta).length > 0) ref.meta = meta;
|
|
26
|
+
return versionRef.normalizeAssetReference(ref);
|
|
27
|
+
}
|
|
28
|
+
exports.decodeFromAssetMentionUri = decodeFromAssetMentionUri;
|
|
29
|
+
//# sourceMappingURL=asset-mention-uri.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"asset-mention-uri.cjs","sources":["../../../../../../references/src/formats/uri/asset-mention-uri.ts"],"sourcesContent":["import { parseAnchorFromParams } from '../../anchors/parse';\nimport { serializeAnchorToParams } from '../../anchors/serialize';\nimport type { AssetMeta, AssetReference } from '../../types';\nimport {\n normalizeAssetReference,\n parseVersionRefFromParams,\n serializeVersionRefToParams,\n} from '../../version-ref';\nimport { unwrapTemplatePlaceholder } from './template-placeholder';\n\n/*\n * Transient asset mention URI — `mention://asset?id=X&...`\n *\n * This format is used in markdown when the full asset type / title is not yet\n * known (e.g. server-side markdown generation) and fetching the asset details\n * would be too expensive. It is NOT the format persisted by the TipTap editor.\n * The editor stores assets as dashboard-spaces URLs (the canonical format):\n * /dashboard/spaces?asset_ids=<id>&type=<type>\n * See sibling `asset-spaces-url.ts` for the stored dashboard-spaces format.\n *\n * Always prefer the stored dashboard-spaces format when possible.\n */\n\n/**\n * Decode: `mention://asset?id=X&anchor=page&page=5` → AssetReference\n */\nexport function decodeFromAssetMentionUri(url: URL): AssetReference {\n const params = url.searchParams;\n\n const id = unwrapTemplatePlaceholder(params.get('id') ?? '');\n const anchor = parseAnchorFromParams(params);\n const version = parseVersionRefFromParams(params);\n\n const meta: AssetMeta = {};\n const assetType = params.get('asset_type') ?? params.get('type');\n if (assetType) meta.assetType = unwrapTemplatePlaceholder(assetType);\n\n const excerpt = params.get('excerpt');\n if (excerpt) meta.excerpt = excerpt;\n\n const sheetName = params.get('sheet_name');\n if (sheetName) meta.sheetName = sheetName;\n\n const provider = params.get('provider');\n if (provider) meta.provider = provider;\n\n const providerLocation =\n params.get('provider_location') || params.get('providerLocation');\n if (providerLocation) meta.providerLocation = providerLocation;\n\n const ref: AssetReference = { referenced: 'asset', id };\n if (anchor) ref.anchor = anchor;\n if (version) ref.version = version;\n if (Object.keys(meta).length > 0) ref.meta = meta;\n\n return normalizeAssetReference(ref);\n}\n\n/**\n * Encode: AssetReference → `mention://asset?id=X&anchor=page&page=5`\n */\nexport function encodeToAssetMentionUri(reference: AssetReference): string {\n const ref = normalizeAssetReference(reference);\n const params = new URLSearchParams();\n params.set('id', ref.id);\n\n if (ref.meta?.assetType) {\n params.set('asset_type', ref.meta.assetType);\n }\n\n if (ref.version) {\n for (const [key, value] of serializeVersionRefToParams(ref.version)) {\n params.set(key, value);\n }\n }\n\n if (ref.meta?.sheetName) {\n params.set('sheet_name', ref.meta.sheetName);\n }\n\n if (ref.anchor) {\n const anchorParams = serializeAnchorToParams(ref.anchor);\n for (const [key, value] of anchorParams) {\n params.set(key, value);\n }\n }\n\n if (ref.meta?.excerpt) {\n params.set('excerpt', ref.meta.excerpt);\n }\n\n if (ref.meta?.provider) {\n params.set('provider', ref.meta.provider);\n }\n\n if (ref.meta?.providerLocation) {\n params.set('provider_location', ref.meta.providerLocation);\n }\n\n return `mention://asset?${params.toString()}`;\n}\n"],"names":["unwrapTemplatePlaceholder","parseAnchorFromParams","parseVersionRefFromParams","normalizeAssetReference"],"mappings":";;;;;AA0BO,SAAS,0BAA0B,KAA0B;AAClE,QAAM,SAAS,IAAI;AAEnB,QAAM,KAAKA,oBAAAA,0BAA0B,OAAO,IAAI,IAAI,KAAK,EAAE;AAC3D,QAAM,SAASC,MAAAA,sBAAsB,MAAM;AAC3C,QAAM,UAAUC,WAAAA,0BAA0B,MAAM;AAEhD,QAAM,OAAkB,CAAA;AACxB,QAAM,YAAY,OAAO,IAAI,YAAY,KAAK,OAAO,IAAI,MAAM;AAC/D,MAAI,UAAW,MAAK,YAAYF,oBAAAA,0BAA0B,SAAS;AAEnE,QAAM,UAAU,OAAO,IAAI,SAAS;AACpC,MAAI,cAAc,UAAU;AAE5B,QAAM,YAAY,OAAO,IAAI,YAAY;AACzC,MAAI,gBAAgB,YAAY;AAEhC,QAAM,WAAW,OAAO,IAAI,UAAU;AACtC,MAAI,eAAe,WAAW;AAE9B,QAAM,mBACJ,OAAO,IAAI,mBAAmB,KAAK,OAAO,IAAI,kBAAkB;AAClE,MAAI,uBAAuB,mBAAmB;AAE9C,QAAM,MAAsB,EAAE,YAAY,SAAS,GAAA;AACnD,MAAI,YAAY,SAAS;AACzB,MAAI,aAAa,UAAU;AAC3B,MAAI,OAAO,KAAK,IAAI,EAAE,SAAS,OAAO,OAAO;AAE7C,SAAOG,WAAAA,wBAAwB,GAAG;AACpC;;"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { parseAnchorFromParams } from "../../anchors/parse.js";
|
|
2
|
+
import { parseVersionRefFromParams, normalizeAssetReference } from "../../version-ref.js";
|
|
3
|
+
import { unwrapTemplatePlaceholder } from "./template-placeholder.js";
|
|
4
|
+
function decodeFromAssetMentionUri(url) {
|
|
5
|
+
const params = url.searchParams;
|
|
6
|
+
const id = unwrapTemplatePlaceholder(params.get("id") ?? "");
|
|
7
|
+
const anchor = parseAnchorFromParams(params);
|
|
8
|
+
const version = parseVersionRefFromParams(params);
|
|
9
|
+
const meta = {};
|
|
10
|
+
const assetType = params.get("asset_type") ?? params.get("type");
|
|
11
|
+
if (assetType) meta.assetType = unwrapTemplatePlaceholder(assetType);
|
|
12
|
+
const excerpt = params.get("excerpt");
|
|
13
|
+
if (excerpt) meta.excerpt = excerpt;
|
|
14
|
+
const sheetName = params.get("sheet_name");
|
|
15
|
+
if (sheetName) meta.sheetName = sheetName;
|
|
16
|
+
const provider = params.get("provider");
|
|
17
|
+
if (provider) meta.provider = provider;
|
|
18
|
+
const providerLocation = params.get("provider_location") || params.get("providerLocation");
|
|
19
|
+
if (providerLocation) meta.providerLocation = providerLocation;
|
|
20
|
+
const ref = { referenced: "asset", id };
|
|
21
|
+
if (anchor) ref.anchor = anchor;
|
|
22
|
+
if (version) ref.version = version;
|
|
23
|
+
if (Object.keys(meta).length > 0) ref.meta = meta;
|
|
24
|
+
return normalizeAssetReference(ref);
|
|
25
|
+
}
|
|
26
|
+
export {
|
|
27
|
+
decodeFromAssetMentionUri
|
|
28
|
+
};
|
|
29
|
+
//# sourceMappingURL=asset-mention-uri.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"asset-mention-uri.js","sources":["../../../../../../references/src/formats/uri/asset-mention-uri.ts"],"sourcesContent":["import { parseAnchorFromParams } from '../../anchors/parse';\nimport { serializeAnchorToParams } from '../../anchors/serialize';\nimport type { AssetMeta, AssetReference } from '../../types';\nimport {\n normalizeAssetReference,\n parseVersionRefFromParams,\n serializeVersionRefToParams,\n} from '../../version-ref';\nimport { unwrapTemplatePlaceholder } from './template-placeholder';\n\n/*\n * Transient asset mention URI — `mention://asset?id=X&...`\n *\n * This format is used in markdown when the full asset type / title is not yet\n * known (e.g. server-side markdown generation) and fetching the asset details\n * would be too expensive. It is NOT the format persisted by the TipTap editor.\n * The editor stores assets as dashboard-spaces URLs (the canonical format):\n * /dashboard/spaces?asset_ids=<id>&type=<type>\n * See sibling `asset-spaces-url.ts` for the stored dashboard-spaces format.\n *\n * Always prefer the stored dashboard-spaces format when possible.\n */\n\n/**\n * Decode: `mention://asset?id=X&anchor=page&page=5` → AssetReference\n */\nexport function decodeFromAssetMentionUri(url: URL): AssetReference {\n const params = url.searchParams;\n\n const id = unwrapTemplatePlaceholder(params.get('id') ?? '');\n const anchor = parseAnchorFromParams(params);\n const version = parseVersionRefFromParams(params);\n\n const meta: AssetMeta = {};\n const assetType = params.get('asset_type') ?? params.get('type');\n if (assetType) meta.assetType = unwrapTemplatePlaceholder(assetType);\n\n const excerpt = params.get('excerpt');\n if (excerpt) meta.excerpt = excerpt;\n\n const sheetName = params.get('sheet_name');\n if (sheetName) meta.sheetName = sheetName;\n\n const provider = params.get('provider');\n if (provider) meta.provider = provider;\n\n const providerLocation =\n params.get('provider_location') || params.get('providerLocation');\n if (providerLocation) meta.providerLocation = providerLocation;\n\n const ref: AssetReference = { referenced: 'asset', id };\n if (anchor) ref.anchor = anchor;\n if (version) ref.version = version;\n if (Object.keys(meta).length > 0) ref.meta = meta;\n\n return normalizeAssetReference(ref);\n}\n\n/**\n * Encode: AssetReference → `mention://asset?id=X&anchor=page&page=5`\n */\nexport function encodeToAssetMentionUri(reference: AssetReference): string {\n const ref = normalizeAssetReference(reference);\n const params = new URLSearchParams();\n params.set('id', ref.id);\n\n if (ref.meta?.assetType) {\n params.set('asset_type', ref.meta.assetType);\n }\n\n if (ref.version) {\n for (const [key, value] of serializeVersionRefToParams(ref.version)) {\n params.set(key, value);\n }\n }\n\n if (ref.meta?.sheetName) {\n params.set('sheet_name', ref.meta.sheetName);\n }\n\n if (ref.anchor) {\n const anchorParams = serializeAnchorToParams(ref.anchor);\n for (const [key, value] of anchorParams) {\n params.set(key, value);\n }\n }\n\n if (ref.meta?.excerpt) {\n params.set('excerpt', ref.meta.excerpt);\n }\n\n if (ref.meta?.provider) {\n params.set('provider', ref.meta.provider);\n }\n\n if (ref.meta?.providerLocation) {\n params.set('provider_location', ref.meta.providerLocation);\n }\n\n return `mention://asset?${params.toString()}`;\n}\n"],"names":[],"mappings":";;;AA0BO,SAAS,0BAA0B,KAA0B;AAClE,QAAM,SAAS,IAAI;AAEnB,QAAM,KAAK,0BAA0B,OAAO,IAAI,IAAI,KAAK,EAAE;AAC3D,QAAM,SAAS,sBAAsB,MAAM;AAC3C,QAAM,UAAU,0BAA0B,MAAM;AAEhD,QAAM,OAAkB,CAAA;AACxB,QAAM,YAAY,OAAO,IAAI,YAAY,KAAK,OAAO,IAAI,MAAM;AAC/D,MAAI,UAAW,MAAK,YAAY,0BAA0B,SAAS;AAEnE,QAAM,UAAU,OAAO,IAAI,SAAS;AACpC,MAAI,cAAc,UAAU;AAE5B,QAAM,YAAY,OAAO,IAAI,YAAY;AACzC,MAAI,gBAAgB,YAAY;AAEhC,QAAM,WAAW,OAAO,IAAI,UAAU;AACtC,MAAI,eAAe,WAAW;AAE9B,QAAM,mBACJ,OAAO,IAAI,mBAAmB,KAAK,OAAO,IAAI,kBAAkB;AAClE,MAAI,uBAAuB,mBAAmB;AAE9C,QAAM,MAAsB,EAAE,YAAY,SAAS,GAAA;AACnD,MAAI,YAAY,SAAS;AACzB,MAAI,aAAa,UAAU;AAC3B,MAAI,OAAO,KAAK,IAAI,EAAE,SAAS,OAAO,OAAO;AAE7C,SAAO,wBAAwB,GAAG;AACpC;"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
3
|
+
const parse = require("../../anchors/parse.cjs");
|
|
4
|
+
const serialize = require("../../anchors/serialize.cjs");
|
|
5
|
+
const versionRef = require("../../version-ref.cjs");
|
|
6
|
+
const templatePlaceholder = require("./template-placeholder.cjs");
|
|
7
|
+
function decodeFromAssetSpacesUrl(url) {
|
|
8
|
+
const params = url.searchParams;
|
|
9
|
+
const id = templatePlaceholder.unwrapTemplatePlaceholder(params.get("asset_ids") ?? "");
|
|
10
|
+
const anchor = parse.parseAnchorFromParams(params);
|
|
11
|
+
const version = versionRef.parseVersionRefFromParams(params);
|
|
12
|
+
const meta = {};
|
|
13
|
+
const assetType = params.get("type") ?? params.get("asset_type");
|
|
14
|
+
if (assetType) meta.assetType = templatePlaceholder.unwrapTemplatePlaceholder(assetType);
|
|
15
|
+
const excerpt = params.get("excerpt");
|
|
16
|
+
if (excerpt) meta.excerpt = excerpt;
|
|
17
|
+
const sheetName = params.get("sheet_name");
|
|
18
|
+
if (sheetName) meta.sheetName = sheetName;
|
|
19
|
+
const provider = params.get("provider");
|
|
20
|
+
if (provider) meta.provider = provider;
|
|
21
|
+
const providerLocation = params.get("provider_location") || params.get("providerLocation");
|
|
22
|
+
if (providerLocation) meta.providerLocation = providerLocation;
|
|
23
|
+
const ref = { referenced: "asset", id };
|
|
24
|
+
if (anchor) ref.anchor = anchor;
|
|
25
|
+
if (version) ref.version = version;
|
|
26
|
+
if (Object.keys(meta).length > 0) ref.meta = meta;
|
|
27
|
+
return versionRef.normalizeAssetReference(ref);
|
|
28
|
+
}
|
|
29
|
+
function encodeToAssetSpacesUrl(reference) {
|
|
30
|
+
var _a, _b, _c, _d, _e;
|
|
31
|
+
const ref = versionRef.normalizeAssetReference(reference);
|
|
32
|
+
const params = new URLSearchParams();
|
|
33
|
+
params.set("asset_ids", ref.id);
|
|
34
|
+
if ((_a = ref.meta) == null ? void 0 : _a.assetType) {
|
|
35
|
+
params.set("type", ref.meta.assetType);
|
|
36
|
+
}
|
|
37
|
+
if (ref.version) {
|
|
38
|
+
for (const [key, value] of versionRef.serializeVersionRefToParams(ref.version)) {
|
|
39
|
+
params.set(key, value);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
if (ref.anchor) {
|
|
43
|
+
const anchorParams = serialize.serializeAnchorToParams(ref.anchor);
|
|
44
|
+
for (const [key, value] of anchorParams) {
|
|
45
|
+
params.set(key, value);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
if ((_b = ref.meta) == null ? void 0 : _b.excerpt) {
|
|
49
|
+
params.set("excerpt", ref.meta.excerpt);
|
|
50
|
+
}
|
|
51
|
+
if ((_c = ref.meta) == null ? void 0 : _c.sheetName) {
|
|
52
|
+
params.set("sheet_name", ref.meta.sheetName);
|
|
53
|
+
}
|
|
54
|
+
if ((_d = ref.meta) == null ? void 0 : _d.provider) {
|
|
55
|
+
params.set("provider", ref.meta.provider);
|
|
56
|
+
}
|
|
57
|
+
if ((_e = ref.meta) == null ? void 0 : _e.providerLocation) {
|
|
58
|
+
params.set("provider_location", ref.meta.providerLocation);
|
|
59
|
+
}
|
|
60
|
+
return `/dashboard/spaces?${params.toString()}`;
|
|
61
|
+
}
|
|
62
|
+
exports.decodeFromAssetSpacesUrl = decodeFromAssetSpacesUrl;
|
|
63
|
+
exports.encodeToAssetSpacesUrl = encodeToAssetSpacesUrl;
|
|
64
|
+
//# sourceMappingURL=asset-spaces-url.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"asset-spaces-url.cjs","sources":["../../../../../../references/src/formats/uri/asset-spaces-url.ts"],"sourcesContent":["import { parseAnchorFromParams } from '../../anchors/parse';\nimport { serializeAnchorToParams } from '../../anchors/serialize';\nimport type { AssetMeta, AssetReference } from '../../types';\nimport {\n normalizeAssetReference,\n parseVersionRefFromParams,\n serializeVersionRefToParams,\n} from '../../version-ref';\nimport { unwrapTemplatePlaceholder } from './template-placeholder';\n\n/**\n * Decode: `/dashboard/spaces?asset_ids=X&...` → AssetReference\n */\nexport function decodeFromAssetSpacesUrl(url: URL): AssetReference {\n const params = url.searchParams;\n\n const id = unwrapTemplatePlaceholder(params.get('asset_ids') ?? '');\n const anchor = parseAnchorFromParams(params);\n const version = parseVersionRefFromParams(params);\n\n const meta: AssetMeta = {};\n const assetType = params.get('type') ?? params.get('asset_type');\n if (assetType) meta.assetType = unwrapTemplatePlaceholder(assetType);\n\n const excerpt = params.get('excerpt');\n if (excerpt) meta.excerpt = excerpt;\n\n const sheetName = params.get('sheet_name');\n if (sheetName) meta.sheetName = sheetName;\n\n const provider = params.get('provider');\n if (provider) meta.provider = provider;\n\n const providerLocation =\n params.get('provider_location') || params.get('providerLocation');\n if (providerLocation) meta.providerLocation = providerLocation;\n\n const ref: AssetReference = { referenced: 'asset', id };\n if (anchor) ref.anchor = anchor;\n if (version) ref.version = version;\n if (Object.keys(meta).length > 0) ref.meta = meta;\n\n // `asset_ids=asset_x@ver` is the legacy spelling of `&version=ver`.\n return normalizeAssetReference(ref);\n}\n\n/**\n * Encode: AssetReference → `/dashboard/spaces?asset_ids=X&...`\n */\nexport function encodeToAssetSpacesUrl(reference: AssetReference): string {\n const ref = normalizeAssetReference(reference);\n const params = new URLSearchParams();\n params.set('asset_ids', ref.id);\n\n if (ref.meta?.assetType) {\n params.set('type', ref.meta.assetType);\n }\n\n if (ref.version) {\n for (const [key, value] of serializeVersionRefToParams(ref.version)) {\n params.set(key, value);\n }\n }\n\n if (ref.anchor) {\n const anchorParams = serializeAnchorToParams(ref.anchor);\n for (const [key, value] of anchorParams) {\n params.set(key, value);\n }\n }\n\n if (ref.meta?.excerpt) {\n params.set('excerpt', ref.meta.excerpt);\n }\n\n if (ref.meta?.sheetName) {\n params.set('sheet_name', ref.meta.sheetName);\n }\n\n if (ref.meta?.provider) {\n params.set('provider', ref.meta.provider);\n }\n\n if (ref.meta?.providerLocation) {\n params.set('provider_location', ref.meta.providerLocation);\n }\n\n return `/dashboard/spaces?${params.toString()}`;\n}\n"],"names":["unwrapTemplatePlaceholder","parseAnchorFromParams","parseVersionRefFromParams","normalizeAssetReference","serializeVersionRefToParams","serializeAnchorToParams"],"mappings":";;;;;;AAaO,SAAS,yBAAyB,KAA0B;AACjE,QAAM,SAAS,IAAI;AAEnB,QAAM,KAAKA,oBAAAA,0BAA0B,OAAO,IAAI,WAAW,KAAK,EAAE;AAClE,QAAM,SAASC,MAAAA,sBAAsB,MAAM;AAC3C,QAAM,UAAUC,WAAAA,0BAA0B,MAAM;AAEhD,QAAM,OAAkB,CAAA;AACxB,QAAM,YAAY,OAAO,IAAI,MAAM,KAAK,OAAO,IAAI,YAAY;AAC/D,MAAI,UAAW,MAAK,YAAYF,oBAAAA,0BAA0B,SAAS;AAEnE,QAAM,UAAU,OAAO,IAAI,SAAS;AACpC,MAAI,cAAc,UAAU;AAE5B,QAAM,YAAY,OAAO,IAAI,YAAY;AACzC,MAAI,gBAAgB,YAAY;AAEhC,QAAM,WAAW,OAAO,IAAI,UAAU;AACtC,MAAI,eAAe,WAAW;AAE9B,QAAM,mBACJ,OAAO,IAAI,mBAAmB,KAAK,OAAO,IAAI,kBAAkB;AAClE,MAAI,uBAAuB,mBAAmB;AAE9C,QAAM,MAAsB,EAAE,YAAY,SAAS,GAAA;AACnD,MAAI,YAAY,SAAS;AACzB,MAAI,aAAa,UAAU;AAC3B,MAAI,OAAO,KAAK,IAAI,EAAE,SAAS,OAAO,OAAO;AAG7C,SAAOG,WAAAA,wBAAwB,GAAG;AACpC;AAKO,SAAS,uBAAuB,WAAmC;;AACxE,QAAM,MAAMA,WAAAA,wBAAwB,SAAS;AAC7C,QAAM,SAAS,IAAI,gBAAA;AACnB,SAAO,IAAI,aAAa,IAAI,EAAE;AAE9B,OAAI,SAAI,SAAJ,mBAAU,WAAW;AACvB,WAAO,IAAI,QAAQ,IAAI,KAAK,SAAS;AAAA,EACvC;AAEA,MAAI,IAAI,SAAS;AACf,eAAW,CAAC,KAAK,KAAK,KAAKC,WAAAA,4BAA4B,IAAI,OAAO,GAAG;AACnE,aAAO,IAAI,KAAK,KAAK;AAAA,IACvB;AAAA,EACF;AAEA,MAAI,IAAI,QAAQ;AACd,UAAM,eAAeC,UAAAA,wBAAwB,IAAI,MAAM;AACvD,eAAW,CAAC,KAAK,KAAK,KAAK,cAAc;AACvC,aAAO,IAAI,KAAK,KAAK;AAAA,IACvB;AAAA,EACF;AAEA,OAAI,SAAI,SAAJ,mBAAU,SAAS;AACrB,WAAO,IAAI,WAAW,IAAI,KAAK,OAAO;AAAA,EACxC;AAEA,OAAI,SAAI,SAAJ,mBAAU,WAAW;AACvB,WAAO,IAAI,cAAc,IAAI,KAAK,SAAS;AAAA,EAC7C;AAEA,OAAI,SAAI,SAAJ,mBAAU,UAAU;AACtB,WAAO,IAAI,YAAY,IAAI,KAAK,QAAQ;AAAA,EAC1C;AAEA,OAAI,SAAI,SAAJ,mBAAU,kBAAkB;AAC9B,WAAO,IAAI,qBAAqB,IAAI,KAAK,gBAAgB;AAAA,EAC3D;AAEA,SAAO,qBAAqB,OAAO,SAAA,CAAU;AAC/C;;;"}
|