Various AT Protocol integrations with obsidian

Revert "remove lex generated code (#21)" (#23)

This reverts commit 1418f94d77704dfae4594a680804fa400e87d987.

authored by

treethought and committed by
GitHub
72eba588 d640f14a

+932 -2
+25
lex.config.js
··· 1 + // file: lex.config.js 2 + import { defineLexiconConfig } from '@atcute/lex-cli'; 3 + 4 + export default defineLexiconConfig({ 5 + files: ['lexicons/**/*.json'], 6 + outdir: 'src/lexicons/', 7 + pull: { 8 + outdir: 'lexicons/', 9 + clean: false, 10 + sources: [ 11 + { 12 + type: 'git', 13 + remote: 'https://github.com/cosmik-network/semble.git', 14 + ref: 'main', 15 + pattern: ['src/modules/atproto/infrastructure/lexicons/**/*.json'], 16 + }, 17 + { 18 + type: 'git', 19 + remote: 'https://tangled.org/margin.at/margin.git', 20 + ref: 'main', 21 + pattern: ['lexicons/**/*.json'], 22 + }, 23 + ], 24 + }, 25 + });
+8
lexicons/README.md
··· 1 + # lexicon sources 2 + 3 + this directory contains lexicon documents pulled from the following sources: 4 + 5 + - https://github.com/cosmik-network/semble.git (ref: main) 6 + - commit: 0c1ee36649c20c0713a0ad0fd20209c0154b8550 7 + - https://tangled.org/margin.at/margin.git (ref: main) 8 + - commit: ac7f76cb2ce7d27087825178d95e8d267b524d88
+273
lexicons/at/margin/annotation.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "at.margin.annotation", 4 + "revision": 2, 5 + "description": "W3C Web Annotation Data Model compliant annotation record for ATProto", 6 + "defs": { 7 + "main": { 8 + "type": "record", 9 + "description": "A W3C-compliant web annotation stored on the AT Protocol", 10 + "key": "tid", 11 + "record": { 12 + "type": "object", 13 + "required": ["target", "createdAt"], 14 + "properties": { 15 + "motivation": { 16 + "type": "string", 17 + "description": "W3C motivation for the annotation", 18 + "knownValues": [ 19 + "commenting", 20 + "highlighting", 21 + "bookmarking", 22 + "tagging", 23 + "describing", 24 + "linking", 25 + "replying", 26 + "editing", 27 + "questioning", 28 + "assessing" 29 + ] 30 + }, 31 + "body": { 32 + "type": "ref", 33 + "ref": "#body", 34 + "description": "The annotation content (text or reference)" 35 + }, 36 + "target": { 37 + "type": "ref", 38 + "ref": "#target", 39 + "description": "The resource being annotated with optional selector" 40 + }, 41 + "tags": { 42 + "type": "array", 43 + "description": "Tags for categorization", 44 + "items": { 45 + "type": "string", 46 + "maxLength": 64, 47 + "maxGraphemes": 32 48 + }, 49 + "maxLength": 10 50 + }, 51 + "createdAt": { 52 + "type": "string", 53 + "format": "datetime" 54 + } 55 + } 56 + } 57 + }, 58 + "body": { 59 + "type": "object", 60 + "description": "Annotation body - the content of the annotation", 61 + "properties": { 62 + "value": { 63 + "type": "string", 64 + "maxLength": 10000, 65 + "maxGraphemes": 3000, 66 + "description": "Text content of the annotation" 67 + }, 68 + "format": { 69 + "type": "string", 70 + "description": "MIME type of the body content", 71 + "default": "text/plain" 72 + }, 73 + "language": { 74 + "type": "string", 75 + "description": "BCP47 language tag" 76 + }, 77 + "uri": { 78 + "type": "string", 79 + "format": "uri", 80 + "description": "Reference to external body content" 81 + } 82 + } 83 + }, 84 + "target": { 85 + "type": "object", 86 + "description": "W3C SpecificResource - the target with optional selector", 87 + "required": ["source"], 88 + "properties": { 89 + "source": { 90 + "type": "string", 91 + "format": "uri", 92 + "description": "The URL being annotated" 93 + }, 94 + "sourceHash": { 95 + "type": "string", 96 + "description": "SHA256 hash of normalized URL for indexing" 97 + }, 98 + "title": { 99 + "type": "string", 100 + "maxLength": 500, 101 + "description": "Page title at time of annotation" 102 + }, 103 + "selector": { 104 + "type": "union", 105 + "description": "Selector to identify the specific segment", 106 + "refs": [ 107 + "#textQuoteSelector", 108 + "#textPositionSelector", 109 + "#cssSelector", 110 + "#xpathSelector", 111 + "#fragmentSelector", 112 + "#rangeSelector" 113 + ] 114 + }, 115 + "state": { 116 + "type": "ref", 117 + "ref": "#timeState", 118 + "description": "State of the resource at annotation time" 119 + } 120 + } 121 + }, 122 + "textQuoteSelector": { 123 + "type": "object", 124 + "description": "W3C TextQuoteSelector - select text by quoting it with context", 125 + "required": ["exact"], 126 + "properties": { 127 + "type": { 128 + "type": "string", 129 + "const": "TextQuoteSelector" 130 + }, 131 + "exact": { 132 + "type": "string", 133 + "maxLength": 5000, 134 + "maxGraphemes": 1500, 135 + "description": "The exact text to match" 136 + }, 137 + "prefix": { 138 + "type": "string", 139 + "maxLength": 500, 140 + "maxGraphemes": 150, 141 + "description": "Text immediately before the selection" 142 + }, 143 + "suffix": { 144 + "type": "string", 145 + "maxLength": 500, 146 + "maxGraphemes": 150, 147 + "description": "Text immediately after the selection" 148 + } 149 + } 150 + }, 151 + "textPositionSelector": { 152 + "type": "object", 153 + "description": "W3C TextPositionSelector - select by character offsets", 154 + "required": ["start", "end"], 155 + "properties": { 156 + "type": { 157 + "type": "string", 158 + "const": "TextPositionSelector" 159 + }, 160 + "start": { 161 + "type": "integer", 162 + "minimum": 0, 163 + "description": "Starting character position (0-indexed, inclusive)" 164 + }, 165 + "end": { 166 + "type": "integer", 167 + "minimum": 0, 168 + "description": "Ending character position (exclusive)" 169 + } 170 + } 171 + }, 172 + "cssSelector": { 173 + "type": "object", 174 + "description": "W3C CssSelector - select DOM elements by CSS selector", 175 + "required": ["value"], 176 + "properties": { 177 + "type": { 178 + "type": "string", 179 + "const": "CssSelector" 180 + }, 181 + "value": { 182 + "type": "string", 183 + "maxLength": 2000, 184 + "description": "CSS selector string" 185 + } 186 + } 187 + }, 188 + "xpathSelector": { 189 + "type": "object", 190 + "description": "W3C XPathSelector - select by XPath expression", 191 + "required": ["value"], 192 + "properties": { 193 + "type": { 194 + "type": "string", 195 + "const": "XPathSelector" 196 + }, 197 + "value": { 198 + "type": "string", 199 + "maxLength": 2000, 200 + "description": "XPath expression" 201 + } 202 + } 203 + }, 204 + "fragmentSelector": { 205 + "type": "object", 206 + "description": "W3C FragmentSelector - select by URI fragment", 207 + "required": ["value"], 208 + "properties": { 209 + "type": { 210 + "type": "string", 211 + "const": "FragmentSelector" 212 + }, 213 + "value": { 214 + "type": "string", 215 + "maxLength": 1000, 216 + "description": "Fragment identifier value" 217 + }, 218 + "conformsTo": { 219 + "type": "string", 220 + "format": "uri", 221 + "description": "Specification the fragment conforms to" 222 + } 223 + } 224 + }, 225 + "rangeSelector": { 226 + "type": "object", 227 + "description": "W3C RangeSelector - select range between two selectors", 228 + "required": ["startSelector", "endSelector"], 229 + "properties": { 230 + "type": { 231 + "type": "string", 232 + "const": "RangeSelector" 233 + }, 234 + "startSelector": { 235 + "type": "union", 236 + "description": "Selector for range start", 237 + "refs": [ 238 + "#textQuoteSelector", 239 + "#textPositionSelector", 240 + "#cssSelector", 241 + "#xpathSelector" 242 + ] 243 + }, 244 + "endSelector": { 245 + "type": "union", 246 + "description": "Selector for range end", 247 + "refs": [ 248 + "#textQuoteSelector", 249 + "#textPositionSelector", 250 + "#cssSelector", 251 + "#xpathSelector" 252 + ] 253 + } 254 + } 255 + }, 256 + "timeState": { 257 + "type": "object", 258 + "description": "W3C TimeState - record when content was captured", 259 + "properties": { 260 + "sourceDate": { 261 + "type": "string", 262 + "format": "datetime", 263 + "description": "When the source was accessed" 264 + }, 265 + "cached": { 266 + "type": "string", 267 + "format": "uri", 268 + "description": "URL to cached/archived version" 269 + } 270 + } 271 + } 272 + } 273 + }
+30
lexicons/at/margin/authFull.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "at.margin.authFull", 4 + "defs": { 5 + "main": { 6 + "type": "permission-set", 7 + "title": "Margin", 8 + "title:langs": {}, 9 + "detail": "Full access to Margin features including annotations, highlights, bookmarks, and collections.", 10 + "detail:langs": {}, 11 + "permissions": [ 12 + { 13 + "type": "permission", 14 + "resource": "repo", 15 + "action": ["create", "update", "delete"], 16 + "collection": [ 17 + "at.margin.annotation", 18 + "at.margin.highlight", 19 + "at.margin.bookmark", 20 + "at.margin.reply", 21 + "at.margin.like", 22 + "at.margin.collection", 23 + "at.margin.collectionItem", 24 + "at.margin.profile" 25 + ] 26 + } 27 + ] 28 + } 29 + } 30 + }
+52
lexicons/at/margin/bookmark.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "at.margin.bookmark", 4 + "description": "A bookmark record - save URL for later", 5 + "defs": { 6 + "main": { 7 + "type": "record", 8 + "description": "A bookmarked URL (motivation: bookmarking)", 9 + "key": "tid", 10 + "record": { 11 + "type": "object", 12 + "required": ["source", "createdAt"], 13 + "properties": { 14 + "source": { 15 + "type": "string", 16 + "format": "uri", 17 + "description": "The bookmarked URL" 18 + }, 19 + "sourceHash": { 20 + "type": "string", 21 + "description": "SHA256 hash of normalized URL for indexing" 22 + }, 23 + "title": { 24 + "type": "string", 25 + "maxLength": 500, 26 + "description": "Page title" 27 + }, 28 + "description": { 29 + "type": "string", 30 + "maxLength": 1000, 31 + "maxGraphemes": 300, 32 + "description": "Optional description/note" 33 + }, 34 + "tags": { 35 + "type": "array", 36 + "description": "Tags for categorization", 37 + "items": { 38 + "type": "string", 39 + "maxLength": 64, 40 + "maxGraphemes": 32 41 + }, 42 + "maxLength": 10 43 + }, 44 + "createdAt": { 45 + "type": "string", 46 + "format": "datetime" 47 + } 48 + } 49 + } 50 + } 51 + } 52 + }
+40
lexicons/at/margin/collection.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "at.margin.collection", 4 + "description": "A collection of annotations (like a folder or notebook)", 5 + "defs": { 6 + "main": { 7 + "type": "record", 8 + "description": "A named collection for organizing annotations", 9 + "key": "tid", 10 + "record": { 11 + "type": "object", 12 + "required": ["name", "createdAt"], 13 + "properties": { 14 + "name": { 15 + "type": "string", 16 + "maxLength": 100, 17 + "maxGraphemes": 50, 18 + "description": "Collection name" 19 + }, 20 + "description": { 21 + "type": "string", 22 + "maxLength": 500, 23 + "maxGraphemes": 150, 24 + "description": "Collection description" 25 + }, 26 + "icon": { 27 + "type": "string", 28 + "maxLength": 100, 29 + "maxGraphemes": 100, 30 + "description": "Emoji icon or icon identifier for the collection" 31 + }, 32 + "createdAt": { 33 + "type": "string", 34 + "format": "datetime" 35 + } 36 + } 37 + } 38 + } 39 + } 40 + }
+37
lexicons/at/margin/collectionItem.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "at.margin.collectionItem", 4 + "description": "An item in a collection (links annotation to collection)", 5 + "defs": { 6 + "main": { 7 + "type": "record", 8 + "description": "Associates an annotation with a collection", 9 + "key": "tid", 10 + "record": { 11 + "type": "object", 12 + "required": ["collection", "annotation", "createdAt"], 13 + "properties": { 14 + "collection": { 15 + "type": "string", 16 + "format": "at-uri", 17 + "description": "AT URI of the collection" 18 + }, 19 + "annotation": { 20 + "type": "string", 21 + "format": "at-uri", 22 + "description": "AT URI of the annotation, highlight, or bookmark" 23 + }, 24 + "position": { 25 + "type": "integer", 26 + "minimum": 0, 27 + "description": "Sort order within the collection" 28 + }, 29 + "createdAt": { 30 + "type": "string", 31 + "format": "datetime" 32 + } 33 + } 34 + } 35 + } 36 + } 37 + }
+42
lexicons/at/margin/highlight.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "at.margin.highlight", 4 + "description": "A lightweight highlight record - annotation without body text", 5 + "defs": { 6 + "main": { 7 + "type": "record", 8 + "description": "A highlight on a web page (motivation: highlighting)", 9 + "key": "tid", 10 + "record": { 11 + "type": "object", 12 + "required": ["target", "createdAt"], 13 + "properties": { 14 + "target": { 15 + "type": "ref", 16 + "ref": "at.margin.annotation#target", 17 + "description": "The resource and segment being highlighted" 18 + }, 19 + "color": { 20 + "type": "string", 21 + "description": "Highlight color (hex or named)", 22 + "maxLength": 20 23 + }, 24 + "tags": { 25 + "type": "array", 26 + "description": "Tags for categorization", 27 + "items": { 28 + "type": "string", 29 + "maxLength": 64, 30 + "maxGraphemes": 32 31 + }, 32 + "maxLength": 10 33 + }, 34 + "createdAt": { 35 + "type": "string", 36 + "format": "datetime" 37 + } 38 + } 39 + } 40 + } 41 + } 42 + }
+40
lexicons/at/margin/like.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "at.margin.like", 4 + "defs": { 5 + "main": { 6 + "type": "record", 7 + "description": "A like on an annotation or reply", 8 + "key": "tid", 9 + "record": { 10 + "type": "object", 11 + "required": ["subject", "createdAt"], 12 + "properties": { 13 + "subject": { 14 + "type": "ref", 15 + "ref": "#subjectRef", 16 + "description": "Reference to the annotation or reply being liked" 17 + }, 18 + "createdAt": { 19 + "type": "string", 20 + "format": "datetime" 21 + } 22 + } 23 + } 24 + }, 25 + "subjectRef": { 26 + "type": "object", 27 + "required": ["uri", "cid"], 28 + "properties": { 29 + "uri": { 30 + "type": "string", 31 + "format": "at-uri" 32 + }, 33 + "cid": { 34 + "type": "string", 35 + "format": "cid" 36 + } 37 + } 38 + } 39 + } 40 + }
+51
lexicons/at/margin/profile.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "at.margin.profile", 4 + "defs": { 5 + "main": { 6 + "type": "record", 7 + "description": "A profile for a user on the Margin network.", 8 + "key": "literal:self", 9 + "record": { 10 + "type": "object", 11 + "required": ["createdAt"], 12 + "properties": { 13 + "displayName": { 14 + "type": "string", 15 + "maxLength": 640, 16 + "description": "Display name for the user." 17 + }, 18 + "avatar": { 19 + "type": "blob", 20 + "accept": ["image/png", "image/jpeg"], 21 + "maxSize": 1000000, 22 + "description": "User avatar image." 23 + }, 24 + "bio": { 25 + "type": "string", 26 + "maxLength": 5000, 27 + "description": "User biography or description." 28 + }, 29 + "website": { 30 + "type": "string", 31 + "maxLength": 1000, 32 + "description": "User website URL." 33 + }, 34 + "links": { 35 + "type": "array", 36 + "description": "List of other relevant links (e.g. GitHub, Bluesky, etc).", 37 + "items": { 38 + "type": "string", 39 + "maxLength": 1000 40 + }, 41 + "maxLength": 20 42 + }, 43 + "createdAt": { 44 + "type": "string", 45 + "format": "datetime" 46 + } 47 + } 48 + } 49 + } 50 + } 51 + }
+59
lexicons/at/margin/reply.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "at.margin.reply", 4 + "revision": 2, 5 + "description": "A reply to an annotation or another reply", 6 + "defs": { 7 + "main": { 8 + "type": "record", 9 + "description": "A reply to an annotation (motivation: replying)", 10 + "key": "tid", 11 + "record": { 12 + "type": "object", 13 + "required": ["parent", "root", "text", "createdAt"], 14 + "properties": { 15 + "parent": { 16 + "type": "ref", 17 + "ref": "#replyRef", 18 + "description": "Reference to the parent annotation or reply" 19 + }, 20 + "root": { 21 + "type": "ref", 22 + "ref": "#replyRef", 23 + "description": "Reference to the root annotation of the thread" 24 + }, 25 + "text": { 26 + "type": "string", 27 + "maxLength": 10000, 28 + "maxGraphemes": 3000, 29 + "description": "Reply text content" 30 + }, 31 + "format": { 32 + "type": "string", 33 + "description": "MIME type of the text content", 34 + "default": "text/plain" 35 + }, 36 + "createdAt": { 37 + "type": "string", 38 + "format": "datetime" 39 + } 40 + } 41 + } 42 + }, 43 + "replyRef": { 44 + "type": "object", 45 + "description": "Strong reference to an annotation or reply", 46 + "required": ["uri", "cid"], 47 + "properties": { 48 + "uri": { 49 + "type": "string", 50 + "format": "at-uri" 51 + }, 52 + "cid": { 53 + "type": "string", 54 + "format": "cid" 55 + } 56 + } 57 + } 58 + } 59 + }
+21
lexicons/com/atproto/repo/strongRef.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "com.atproto.repo.strongRef", 4 + "description": "A URI with a content-hash fingerprint.", 5 + "defs": { 6 + "main": { 7 + "type": "object", 8 + "required": ["uri", "cid"], 9 + "properties": { 10 + "cid": { 11 + "type": "string", 12 + "format": "cid" 13 + }, 14 + "uri": { 15 + "type": "string", 16 + "format": "at-uri" 17 + } 18 + } 19 + } 20 + } 21 + }
+131
lexicons/network/cosmik/card.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "network.cosmik.card", 4 + "description": "A single record type for all cards.", 5 + "defs": { 6 + "main": { 7 + "type": "record", 8 + "description": "A record representing a card with content.", 9 + "key": "tid", 10 + "record": { 11 + "type": "object", 12 + "required": ["type", "content"], 13 + "properties": { 14 + "type": { 15 + "type": "string", 16 + "description": "The type of card", 17 + "knownValues": ["URL", "NOTE"] 18 + }, 19 + "content": { 20 + "type": "union", 21 + "description": "The specific content of the card, determined by the card type.", 22 + "refs": ["#urlContent", "#noteContent"] 23 + }, 24 + "url": { 25 + "type": "string", 26 + "format": "uri", 27 + "description": "Optional URL associated with the card. Required for URL cards, optional for NOTE cards." 28 + }, 29 + "parentCard": { 30 + "type": "ref", 31 + "description": "Optional strong reference to a parent card (for NOTE cards).", 32 + "ref": "com.atproto.repo.strongRef" 33 + }, 34 + "createdAt": { 35 + "type": "string", 36 + "format": "datetime", 37 + "description": "Timestamp when this card was created (usually set by PDS)." 38 + }, 39 + "originalCard": { 40 + "type": "ref", 41 + "description": "Optional strong reference to the original card (for NOTE cards).", 42 + "ref": "com.atproto.repo.strongRef" 43 + }, 44 + "provenance": { 45 + "type": "ref", 46 + "description": "Optional provenance information for this card.", 47 + "ref": "network.cosmik.defs#provenance" 48 + } 49 + } 50 + } 51 + }, 52 + "urlContent": { 53 + "type": "object", 54 + "description": "Content structure for a URL card.", 55 + "required": ["url"], 56 + "properties": { 57 + "url": { 58 + "type": "string", 59 + "format": "uri", 60 + "description": "The URL being saved" 61 + }, 62 + "metadata": { 63 + "type": "ref", 64 + "ref": "#urlMetadata", 65 + "description": "Optional metadata about the URL" 66 + } 67 + } 68 + }, 69 + "noteContent": { 70 + "type": "object", 71 + "description": "Content structure for a note card.", 72 + "required": ["text"], 73 + "properties": { 74 + "text": { 75 + "type": "string", 76 + "description": "The note text content", 77 + "maxLength": 10000 78 + } 79 + } 80 + }, 81 + "urlMetadata": { 82 + "type": "object", 83 + "description": "Metadata about a URL.", 84 + "properties": { 85 + "title": { 86 + "type": "string", 87 + "description": "Title of the page" 88 + }, 89 + "description": { 90 + "type": "string", 91 + "description": "Description of the page" 92 + }, 93 + "author": { 94 + "type": "string", 95 + "description": "Author of the content" 96 + }, 97 + "publishedDate": { 98 + "type": "string", 99 + "format": "datetime", 100 + "description": "When the content was published" 101 + }, 102 + "siteName": { 103 + "type": "string", 104 + "description": "Name of the site" 105 + }, 106 + "imageUrl": { 107 + "type": "string", 108 + "format": "uri", 109 + "description": "URL of a representative image" 110 + }, 111 + "type": { 112 + "type": "string", 113 + "description": "Type of content (e.g., 'video', 'article')" 114 + }, 115 + "retrievedAt": { 116 + "type": "string", 117 + "format": "datetime", 118 + "description": "When the metadata was retrieved" 119 + }, 120 + "doi": { 121 + "type": "string", 122 + "description": "Digital Object Identifier (DOI) for academic content" 123 + }, 124 + "isbn": { 125 + "type": "string", 126 + "description": "International Standard Book Number (ISBN) for books" 127 + } 128 + } 129 + } 130 + } 131 + }
+51
lexicons/network/cosmik/collection.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "network.cosmik.collection", 4 + "description": "A single record type for collections of cards.", 5 + "defs": { 6 + "main": { 7 + "type": "record", 8 + "description": "A record representing a collection of cards.", 9 + "key": "tid", 10 + "record": { 11 + "type": "object", 12 + "required": ["name", "accessType"], 13 + "properties": { 14 + "name": { 15 + "type": "string", 16 + "description": "Name of the collection", 17 + "maxLength": 100 18 + }, 19 + "description": { 20 + "type": "string", 21 + "description": "Description of the collection", 22 + "maxLength": 500 23 + }, 24 + "accessType": { 25 + "type": "string", 26 + "description": "Access control for the collection", 27 + "knownValues": ["OPEN", "CLOSED"] 28 + }, 29 + "collaborators": { 30 + "type": "array", 31 + "description": "List of collaborator DIDs who can add cards to closed collections", 32 + "items": { 33 + "type": "string", 34 + "description": "DID of a collaborator" 35 + } 36 + }, 37 + "createdAt": { 38 + "type": "string", 39 + "format": "datetime", 40 + "description": "Timestamp when this collection was created (usually set by PDS)." 41 + }, 42 + "updatedAt": { 43 + "type": "string", 44 + "format": "datetime", 45 + "description": "Timestamp when this collection was last updated." 46 + } 47 + } 48 + } 49 + } 50 + } 51 + }
+52
lexicons/network/cosmik/collectionLink.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "network.cosmik.collectionLink", 4 + "description": "A record that links a card to a collection.", 5 + "defs": { 6 + "main": { 7 + "type": "record", 8 + "description": "A record representing the relationship between a card and a collection.", 9 + "key": "tid", 10 + "record": { 11 + "type": "object", 12 + "required": ["collection", "card", "addedBy", "addedAt"], 13 + "properties": { 14 + "collection": { 15 + "type": "ref", 16 + "description": "Strong reference to the collection record.", 17 + "ref": "com.atproto.repo.strongRef" 18 + }, 19 + "card": { 20 + "type": "ref", 21 + "description": "Strong reference to the card record in the users library.", 22 + "ref": "com.atproto.repo.strongRef" 23 + }, 24 + "originalCard": { 25 + "type": "ref", 26 + "description": "Strong reference to the original card record (may be in another library).", 27 + "ref": "com.atproto.repo.strongRef" 28 + }, 29 + "addedBy": { 30 + "type": "string", 31 + "description": "DID of the user who added the card to the collection" 32 + }, 33 + "addedAt": { 34 + "type": "string", 35 + "format": "datetime", 36 + "description": "Timestamp when the card was added to the collection." 37 + }, 38 + "createdAt": { 39 + "type": "string", 40 + "format": "datetime", 41 + "description": "Timestamp when this link record was created (usually set by PDS)." 42 + }, 43 + "provenance": { 44 + "type": "ref", 45 + "description": "Optional provenance information for this link.", 46 + "ref": "network.cosmik.defs#provenance" 47 + } 48 + } 49 + } 50 + } 51 + } 52 + }
+18
lexicons/network/cosmik/defs.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "network.cosmik.defs", 4 + "description": "Common definitions for annotation types and references", 5 + "defs": { 6 + "provenance": { 7 + "type": "object", 8 + "description": "Represents the provenance or source of a record.", 9 + "properties": { 10 + "via": { 11 + "type": "ref", 12 + "description": "Strong reference to the card that led to this record.", 13 + "ref": "com.atproto.repo.strongRef" 14 + } 15 + } 16 + } 17 + } 18 + }
+1 -1
manifest.json
··· 1 1 { 2 2 "id": "atmosphere", 3 3 "name": "Atmosphere", 4 - "version": "0.1.14", 4 + "version": "0.1.13", 5 5 "minAppVersion": "0.15.0", 6 6 "description": "Various integrations with AT Protocol.", 7 7 "author": "treethought",
+1 -1
package.json
··· 1 1 { 2 2 "name": "obsidian-atmosphere", 3 - "version": "0.1.14", 3 + "version": "0.1.13", 4 4 "description": "Various integrations with AT Protocol.", 5 5 "main": "main.js", 6 6 "type": "module",