@plebeiantech/lat.md 0.12.3-fork.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (144) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +97 -0
  3. package/dist/src/cli/check-frontmatter.d.ts +12 -0
  4. package/dist/src/cli/check-frontmatter.js +44 -0
  5. package/dist/src/cli/check-mode.d.ts +6 -0
  6. package/dist/src/cli/check-mode.js +303 -0
  7. package/dist/src/cli/check-status.d.ts +74 -0
  8. package/dist/src/cli/check-status.js +217 -0
  9. package/dist/src/cli/check.d.ts +45 -0
  10. package/dist/src/cli/check.js +777 -0
  11. package/dist/src/cli/checklist-menu.d.ts +12 -0
  12. package/dist/src/cli/checklist-menu.js +111 -0
  13. package/dist/src/cli/comment-guard.d.ts +16 -0
  14. package/dist/src/cli/comment-guard.js +111 -0
  15. package/dist/src/cli/comment-reminder.d.ts +62 -0
  16. package/dist/src/cli/comment-reminder.js +210 -0
  17. package/dist/src/cli/context.d.ts +11 -0
  18. package/dist/src/cli/context.js +58 -0
  19. package/dist/src/cli/expand.d.ts +8 -0
  20. package/dist/src/cli/expand.js +94 -0
  21. package/dist/src/cli/gen-index.d.ts +45 -0
  22. package/dist/src/cli/gen-index.js +235 -0
  23. package/dist/src/cli/gen.d.ts +6 -0
  24. package/dist/src/cli/gen.js +42 -0
  25. package/dist/src/cli/graph.d.ts +7 -0
  26. package/dist/src/cli/graph.js +47 -0
  27. package/dist/src/cli/hook.d.ts +1 -0
  28. package/dist/src/cli/hook.js +432 -0
  29. package/dist/src/cli/index.d.ts +2 -0
  30. package/dist/src/cli/index.js +307 -0
  31. package/dist/src/cli/init.d.ts +9 -0
  32. package/dist/src/cli/init.js +1031 -0
  33. package/dist/src/cli/link-scheme.d.ts +54 -0
  34. package/dist/src/cli/link-scheme.js +101 -0
  35. package/dist/src/cli/locate.d.ts +2 -0
  36. package/dist/src/cli/locate.js +17 -0
  37. package/dist/src/cli/refs.d.ts +22 -0
  38. package/dist/src/cli/refs.js +229 -0
  39. package/dist/src/cli/reindex.d.ts +13 -0
  40. package/dist/src/cli/reindex.js +136 -0
  41. package/dist/src/cli/search.d.ts +36 -0
  42. package/dist/src/cli/search.js +217 -0
  43. package/dist/src/cli/section.d.ts +43 -0
  44. package/dist/src/cli/section.js +252 -0
  45. package/dist/src/cli/select-menu.d.ts +13 -0
  46. package/dist/src/cli/select-menu.js +100 -0
  47. package/dist/src/cli/templates.d.ts +1 -0
  48. package/dist/src/cli/templates.js +15 -0
  49. package/dist/src/cli/ui.d.ts +11 -0
  50. package/dist/src/cli/ui.js +34 -0
  51. package/dist/src/code-refs.d.ts +17 -0
  52. package/dist/src/code-refs.js +277 -0
  53. package/dist/src/config.d.ts +29 -0
  54. package/dist/src/config.js +83 -0
  55. package/dist/src/context.d.ts +23 -0
  56. package/dist/src/context.js +11 -0
  57. package/dist/src/extensions/wiki-link/from-markdown.d.ts +5 -0
  58. package/dist/src/extensions/wiki-link/from-markdown.js +34 -0
  59. package/dist/src/extensions/wiki-link/index.d.ts +4 -0
  60. package/dist/src/extensions/wiki-link/index.js +3 -0
  61. package/dist/src/extensions/wiki-link/syntax.d.ts +14 -0
  62. package/dist/src/extensions/wiki-link/syntax.js +121 -0
  63. package/dist/src/extensions/wiki-link/to-markdown.d.ts +5 -0
  64. package/dist/src/extensions/wiki-link/to-markdown.js +28 -0
  65. package/dist/src/extensions/wiki-link/types.d.ts +34 -0
  66. package/dist/src/extensions/wiki-link/types.js +1 -0
  67. package/dist/src/format.d.ts +8 -0
  68. package/dist/src/format.js +43 -0
  69. package/dist/src/graph-export.d.ts +60 -0
  70. package/dist/src/graph-export.js +309 -0
  71. package/dist/src/init-version.d.ts +10 -0
  72. package/dist/src/init-version.js +49 -0
  73. package/dist/src/knowledge/bd.d.ts +2 -0
  74. package/dist/src/knowledge/bd.js +107 -0
  75. package/dist/src/knowledge/claude-memory.d.ts +13 -0
  76. package/dist/src/knowledge/claude-memory.js +204 -0
  77. package/dist/src/knowledge/cq.d.ts +2 -0
  78. package/dist/src/knowledge/cq.js +74 -0
  79. package/dist/src/knowledge/index.d.ts +49 -0
  80. package/dist/src/knowledge/index.js +271 -0
  81. package/dist/src/knowledge/ranking.d.ts +17 -0
  82. package/dist/src/knowledge/ranking.js +62 -0
  83. package/dist/src/knowledge/session.d.ts +46 -0
  84. package/dist/src/knowledge/session.js +203 -0
  85. package/dist/src/knowledge/types.d.ts +47 -0
  86. package/dist/src/knowledge/types.js +10 -0
  87. package/dist/src/lattice.d.ts +108 -0
  88. package/dist/src/lattice.js +816 -0
  89. package/dist/src/mcp/server.d.ts +1 -0
  90. package/dist/src/mcp/server.js +58 -0
  91. package/dist/src/parser.d.ts +3 -0
  92. package/dist/src/parser.js +18 -0
  93. package/dist/src/search/db.d.ts +16 -0
  94. package/dist/src/search/db.js +54 -0
  95. package/dist/src/search/embedder.d.ts +25 -0
  96. package/dist/src/search/embedder.js +58 -0
  97. package/dist/src/search/index.d.ts +9 -0
  98. package/dist/src/search/index.js +66 -0
  99. package/dist/src/search/search.d.ts +9 -0
  100. package/dist/src/search/search.js +16 -0
  101. package/dist/src/source-parser.d.ts +27 -0
  102. package/dist/src/source-parser.js +916 -0
  103. package/dist/src/untrusted.d.ts +24 -0
  104. package/dist/src/untrusted.js +97 -0
  105. package/dist/src/version.d.ts +7 -0
  106. package/dist/src/version.js +39 -0
  107. package/dist/src/view/client/assets/index-B0n0u03y.css +1 -0
  108. package/dist/src/view/client/assets/index-xm2_px4q.js +23 -0
  109. package/dist/src/view/client/index.html +14 -0
  110. package/dist/src/view/diagnostics.d.ts +5 -0
  111. package/dist/src/view/diagnostics.js +171 -0
  112. package/dist/src/view/git-diff.d.ts +3 -0
  113. package/dist/src/view/git-diff.js +255 -0
  114. package/dist/src/view/git.d.ts +22 -0
  115. package/dist/src/view/git.js +193 -0
  116. package/dist/src/view/highlight.d.ts +2 -0
  117. package/dist/src/view/highlight.js +3767 -0
  118. package/dist/src/view/markdown.d.ts +22 -0
  119. package/dist/src/view/markdown.js +322 -0
  120. package/dist/src/view/protocol.d.ts +89 -0
  121. package/dist/src/view/protocol.js +1 -0
  122. package/dist/src/view/references.d.ts +62 -0
  123. package/dist/src/view/references.js +345 -0
  124. package/dist/src/view/repository.d.ts +12 -0
  125. package/dist/src/view/repository.js +167 -0
  126. package/dist/src/view/search.d.ts +14 -0
  127. package/dist/src/view/search.js +64 -0
  128. package/dist/src/view/server.d.ts +20 -0
  129. package/dist/src/view/server.js +233 -0
  130. package/dist/src/view/store.d.ts +57 -0
  131. package/dist/src/view/store.js +404 -0
  132. package/dist/src/walk.d.ts +18 -0
  133. package/dist/src/walk.js +27 -0
  134. package/package.json +85 -0
  135. package/templates/AGENTS.md +118 -0
  136. package/templates/README +1 -0
  137. package/templates/cursor-rules.md +77 -0
  138. package/templates/init/lat.md +1 -0
  139. package/templates/logo-dark.svg +182 -0
  140. package/templates/logo-light.svg +182 -0
  141. package/templates/logo.txt +7 -0
  142. package/templates/opencode-plugin.ts +180 -0
  143. package/templates/pi-extension.ts +364 -0
  144. package/templates/skill/SKILL.md +189 -0
@@ -0,0 +1,182 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 73224 16688" fill="#ddd">
2
+ <defs>
3
+ <path id="g2588" d="M-20 -512V1576H1253V-512Z"/>
4
+ <path id="g2591" d="M934 -512V-251H1094V-512ZM298 -512V-251H457V-512ZM616 -147V114H775V-147ZM-20 -147V114H138V-147ZM934 219V480H1094V219ZM298 219V480H457V219ZM616 584V845H775V584ZM-20 584V845H138V584ZM934 950V1211H1094V950ZM298 950V1211H457V950ZM616 1315V1576H775V1315ZM-20 1315V1576H138V1315Z"/>
5
+ </defs>
6
+ <use href="#g2591" transform="translate(0,0) scale(1,-1) translate(0,-1901)"/>
7
+ <use href="#g2588" transform="translate(1356,0) scale(1,-1) translate(0,-1901)"/>
8
+ <use href="#g2588" transform="translate(2712,0) scale(1,-1) translate(0,-1901)"/>
9
+ <use href="#g2591" transform="translate(21696,0) scale(1,-1) translate(0,-1901)"/>
10
+ <use href="#g2588" transform="translate(23052,0) scale(1,-1) translate(0,-1901)"/>
11
+ <use href="#g2588" transform="translate(24408,0) scale(1,-1) translate(0,-1901)"/>
12
+ <use href="#g2591" transform="translate(69156,0) scale(1,-1) translate(0,-1901)"/>
13
+ <use href="#g2588" transform="translate(70512,0) scale(1,-1) translate(0,-1901)"/>
14
+ <use href="#g2588" transform="translate(71868,0) scale(1,-1) translate(0,-1901)"/>
15
+ <use href="#g2591" transform="translate(0,2384) scale(1,-1) translate(0,-1901)"/>
16
+ <use href="#g2588" transform="translate(1356,2384) scale(1,-1) translate(0,-1901)"/>
17
+ <use href="#g2588" transform="translate(2712,2384) scale(1,-1) translate(0,-1901)"/>
18
+ <use href="#g2591" transform="translate(21696,2384) scale(1,-1) translate(0,-1901)"/>
19
+ <use href="#g2588" transform="translate(23052,2384) scale(1,-1) translate(0,-1901)"/>
20
+ <use href="#g2588" transform="translate(24408,2384) scale(1,-1) translate(0,-1901)"/>
21
+ <use href="#g2591" transform="translate(69156,2384) scale(1,-1) translate(0,-1901)"/>
22
+ <use href="#g2588" transform="translate(70512,2384) scale(1,-1) translate(0,-1901)"/>
23
+ <use href="#g2588" transform="translate(71868,2384) scale(1,-1) translate(0,-1901)"/>
24
+ <use href="#g2591" transform="translate(0,4768) scale(1,-1) translate(0,-1901)"/>
25
+ <use href="#g2588" transform="translate(1356,4768) scale(1,-1) translate(0,-1901)"/>
26
+ <use href="#g2588" transform="translate(2712,4768) scale(1,-1) translate(0,-1901)"/>
27
+ <use href="#g2591" transform="translate(6780,4768) scale(1,-1) translate(0,-1901)"/>
28
+ <use href="#g2588" transform="translate(8136,4768) scale(1,-1) translate(0,-1901)"/>
29
+ <use href="#g2588" transform="translate(9492,4768) scale(1,-1) translate(0,-1901)"/>
30
+ <use href="#g2588" transform="translate(10848,4768) scale(1,-1) translate(0,-1901)"/>
31
+ <use href="#g2588" transform="translate(12204,4768) scale(1,-1) translate(0,-1901)"/>
32
+ <use href="#g2588" transform="translate(13560,4768) scale(1,-1) translate(0,-1901)"/>
33
+ <use href="#g2588" transform="translate(14916,4768) scale(1,-1) translate(0,-1901)"/>
34
+ <use href="#g2591" transform="translate(18984,4768) scale(1,-1) translate(0,-1901)"/>
35
+ <use href="#g2588" transform="translate(20340,4768) scale(1,-1) translate(0,-1901)"/>
36
+ <use href="#g2588" transform="translate(21696,4768) scale(1,-1) translate(0,-1901)"/>
37
+ <use href="#g2588" transform="translate(23052,4768) scale(1,-1) translate(0,-1901)"/>
38
+ <use href="#g2588" transform="translate(24408,4768) scale(1,-1) translate(0,-1901)"/>
39
+ <use href="#g2588" transform="translate(25764,4768) scale(1,-1) translate(0,-1901)"/>
40
+ <use href="#g2588" transform="translate(27120,4768) scale(1,-1) translate(0,-1901)"/>
41
+ <use href="#g2591" transform="translate(37968,4768) scale(1,-1) translate(0,-1901)"/>
42
+ <use href="#g2588" transform="translate(39324,4768) scale(1,-1) translate(0,-1901)"/>
43
+ <use href="#g2588" transform="translate(40680,4768) scale(1,-1) translate(0,-1901)"/>
44
+ <use href="#g2588" transform="translate(42036,4768) scale(1,-1) translate(0,-1901)"/>
45
+ <use href="#g2588" transform="translate(43392,4768) scale(1,-1) translate(0,-1901)"/>
46
+ <use href="#g2588" transform="translate(44748,4768) scale(1,-1) translate(0,-1901)"/>
47
+ <use href="#g2588" transform="translate(46104,4768) scale(1,-1) translate(0,-1901)"/>
48
+ <use href="#g2588" transform="translate(47460,4768) scale(1,-1) translate(0,-1901)"/>
49
+ <use href="#g2588" transform="translate(48816,4768) scale(1,-1) translate(0,-1901)"/>
50
+ <use href="#g2588" transform="translate(50172,4768) scale(1,-1) translate(0,-1901)"/>
51
+ <use href="#g2588" transform="translate(51528,4768) scale(1,-1) translate(0,-1901)"/>
52
+ <use href="#g2588" transform="translate(52884,4768) scale(1,-1) translate(0,-1901)"/>
53
+ <use href="#g2588" transform="translate(54240,4768) scale(1,-1) translate(0,-1901)"/>
54
+ <use href="#g2588" transform="translate(55596,4768) scale(1,-1) translate(0,-1901)"/>
55
+ <use href="#g2591" transform="translate(61020,4768) scale(1,-1) translate(0,-1901)"/>
56
+ <use href="#g2588" transform="translate(62376,4768) scale(1,-1) translate(0,-1901)"/>
57
+ <use href="#g2588" transform="translate(63732,4768) scale(1,-1) translate(0,-1901)"/>
58
+ <use href="#g2588" transform="translate(65088,4768) scale(1,-1) translate(0,-1901)"/>
59
+ <use href="#g2588" transform="translate(66444,4768) scale(1,-1) translate(0,-1901)"/>
60
+ <use href="#g2588" transform="translate(67800,4768) scale(1,-1) translate(0,-1901)"/>
61
+ <use href="#g2588" transform="translate(69156,4768) scale(1,-1) translate(0,-1901)"/>
62
+ <use href="#g2588" transform="translate(70512,4768) scale(1,-1) translate(0,-1901)"/>
63
+ <use href="#g2588" transform="translate(71868,4768) scale(1,-1) translate(0,-1901)"/>
64
+ <use href="#g2591" transform="translate(0,7152) scale(1,-1) translate(0,-1901)"/>
65
+ <use href="#g2588" transform="translate(1356,7152) scale(1,-1) translate(0,-1901)"/>
66
+ <use href="#g2588" transform="translate(2712,7152) scale(1,-1) translate(0,-1901)"/>
67
+ <use href="#g2591" transform="translate(13560,7152) scale(1,-1) translate(0,-1901)"/>
68
+ <use href="#g2588" transform="translate(14916,7152) scale(1,-1) translate(0,-1901)"/>
69
+ <use href="#g2588" transform="translate(16272,7152) scale(1,-1) translate(0,-1901)"/>
70
+ <use href="#g2591" transform="translate(21696,7152) scale(1,-1) translate(0,-1901)"/>
71
+ <use href="#g2588" transform="translate(23052,7152) scale(1,-1) translate(0,-1901)"/>
72
+ <use href="#g2588" transform="translate(24408,7152) scale(1,-1) translate(0,-1901)"/>
73
+ <use href="#g2591" transform="translate(37968,7152) scale(1,-1) translate(0,-1901)"/>
74
+ <use href="#g2588" transform="translate(39324,7152) scale(1,-1) translate(0,-1901)"/>
75
+ <use href="#g2588" transform="translate(40680,7152) scale(1,-1) translate(0,-1901)"/>
76
+ <use href="#g2591" transform="translate(46104,7152) scale(1,-1) translate(0,-1901)"/>
77
+ <use href="#g2588" transform="translate(47460,7152) scale(1,-1) translate(0,-1901)"/>
78
+ <use href="#g2588" transform="translate(48816,7152) scale(1,-1) translate(0,-1901)"/>
79
+ <use href="#g2591" transform="translate(54240,7152) scale(1,-1) translate(0,-1901)"/>
80
+ <use href="#g2588" transform="translate(55596,7152) scale(1,-1) translate(0,-1901)"/>
81
+ <use href="#g2588" transform="translate(56952,7152) scale(1,-1) translate(0,-1901)"/>
82
+ <use href="#g2591" transform="translate(59664,7152) scale(1,-1) translate(0,-1901)"/>
83
+ <use href="#g2588" transform="translate(61020,7152) scale(1,-1) translate(0,-1901)"/>
84
+ <use href="#g2588" transform="translate(62376,7152) scale(1,-1) translate(0,-1901)"/>
85
+ <use href="#g2591" transform="translate(69156,7152) scale(1,-1) translate(0,-1901)"/>
86
+ <use href="#g2588" transform="translate(70512,7152) scale(1,-1) translate(0,-1901)"/>
87
+ <use href="#g2588" transform="translate(71868,7152) scale(1,-1) translate(0,-1901)"/>
88
+ <use href="#g2591" transform="translate(0,9536) scale(1,-1) translate(0,-1901)"/>
89
+ <use href="#g2588" transform="translate(1356,9536) scale(1,-1) translate(0,-1901)"/>
90
+ <use href="#g2588" transform="translate(2712,9536) scale(1,-1) translate(0,-1901)"/>
91
+ <use href="#g2591" transform="translate(6780,9536) scale(1,-1) translate(0,-1901)"/>
92
+ <use href="#g2588" transform="translate(8136,9536) scale(1,-1) translate(0,-1901)"/>
93
+ <use href="#g2588" transform="translate(9492,9536) scale(1,-1) translate(0,-1901)"/>
94
+ <use href="#g2588" transform="translate(10848,9536) scale(1,-1) translate(0,-1901)"/>
95
+ <use href="#g2588" transform="translate(12204,9536) scale(1,-1) translate(0,-1901)"/>
96
+ <use href="#g2588" transform="translate(13560,9536) scale(1,-1) translate(0,-1901)"/>
97
+ <use href="#g2588" transform="translate(14916,9536) scale(1,-1) translate(0,-1901)"/>
98
+ <use href="#g2588" transform="translate(16272,9536) scale(1,-1) translate(0,-1901)"/>
99
+ <use href="#g2591" transform="translate(21696,9536) scale(1,-1) translate(0,-1901)"/>
100
+ <use href="#g2588" transform="translate(23052,9536) scale(1,-1) translate(0,-1901)"/>
101
+ <use href="#g2588" transform="translate(24408,9536) scale(1,-1) translate(0,-1901)"/>
102
+ <use href="#g2591" transform="translate(37968,9536) scale(1,-1) translate(0,-1901)"/>
103
+ <use href="#g2588" transform="translate(39324,9536) scale(1,-1) translate(0,-1901)"/>
104
+ <use href="#g2588" transform="translate(40680,9536) scale(1,-1) translate(0,-1901)"/>
105
+ <use href="#g2591" transform="translate(46104,9536) scale(1,-1) translate(0,-1901)"/>
106
+ <use href="#g2588" transform="translate(47460,9536) scale(1,-1) translate(0,-1901)"/>
107
+ <use href="#g2588" transform="translate(48816,9536) scale(1,-1) translate(0,-1901)"/>
108
+ <use href="#g2591" transform="translate(54240,9536) scale(1,-1) translate(0,-1901)"/>
109
+ <use href="#g2588" transform="translate(55596,9536) scale(1,-1) translate(0,-1901)"/>
110
+ <use href="#g2588" transform="translate(56952,9536) scale(1,-1) translate(0,-1901)"/>
111
+ <use href="#g2591" transform="translate(59664,9536) scale(1,-1) translate(0,-1901)"/>
112
+ <use href="#g2588" transform="translate(61020,9536) scale(1,-1) translate(0,-1901)"/>
113
+ <use href="#g2588" transform="translate(62376,9536) scale(1,-1) translate(0,-1901)"/>
114
+ <use href="#g2591" transform="translate(69156,9536) scale(1,-1) translate(0,-1901)"/>
115
+ <use href="#g2588" transform="translate(70512,9536) scale(1,-1) translate(0,-1901)"/>
116
+ <use href="#g2588" transform="translate(71868,9536) scale(1,-1) translate(0,-1901)"/>
117
+ <use href="#g2591" transform="translate(0,11920) scale(1,-1) translate(0,-1901)"/>
118
+ <use href="#g2588" transform="translate(1356,11920) scale(1,-1) translate(0,-1901)"/>
119
+ <use href="#g2588" transform="translate(2712,11920) scale(1,-1) translate(0,-1901)"/>
120
+ <use href="#g2591" transform="translate(5424,11920) scale(1,-1) translate(0,-1901)"/>
121
+ <use href="#g2588" transform="translate(6780,11920) scale(1,-1) translate(0,-1901)"/>
122
+ <use href="#g2588" transform="translate(8136,11920) scale(1,-1) translate(0,-1901)"/>
123
+ <use href="#g2591" transform="translate(13560,11920) scale(1,-1) translate(0,-1901)"/>
124
+ <use href="#g2588" transform="translate(14916,11920) scale(1,-1) translate(0,-1901)"/>
125
+ <use href="#g2588" transform="translate(16272,11920) scale(1,-1) translate(0,-1901)"/>
126
+ <use href="#g2591" transform="translate(21696,11920) scale(1,-1) translate(0,-1901)"/>
127
+ <use href="#g2588" transform="translate(23052,11920) scale(1,-1) translate(0,-1901)"/>
128
+ <use href="#g2588" transform="translate(24408,11920) scale(1,-1) translate(0,-1901)"/>
129
+ <use href="#g2591" transform="translate(37968,11920) scale(1,-1) translate(0,-1901)"/>
130
+ <use href="#g2588" transform="translate(39324,11920) scale(1,-1) translate(0,-1901)"/>
131
+ <use href="#g2588" transform="translate(40680,11920) scale(1,-1) translate(0,-1901)"/>
132
+ <use href="#g2591" transform="translate(46104,11920) scale(1,-1) translate(0,-1901)"/>
133
+ <use href="#g2588" transform="translate(47460,11920) scale(1,-1) translate(0,-1901)"/>
134
+ <use href="#g2588" transform="translate(48816,11920) scale(1,-1) translate(0,-1901)"/>
135
+ <use href="#g2591" transform="translate(54240,11920) scale(1,-1) translate(0,-1901)"/>
136
+ <use href="#g2588" transform="translate(55596,11920) scale(1,-1) translate(0,-1901)"/>
137
+ <use href="#g2588" transform="translate(56952,11920) scale(1,-1) translate(0,-1901)"/>
138
+ <use href="#g2591" transform="translate(59664,11920) scale(1,-1) translate(0,-1901)"/>
139
+ <use href="#g2588" transform="translate(61020,11920) scale(1,-1) translate(0,-1901)"/>
140
+ <use href="#g2588" transform="translate(62376,11920) scale(1,-1) translate(0,-1901)"/>
141
+ <use href="#g2591" transform="translate(67800,11920) scale(1,-1) translate(0,-1901)"/>
142
+ <use href="#g2588" transform="translate(69156,11920) scale(1,-1) translate(0,-1901)"/>
143
+ <use href="#g2588" transform="translate(70512,11920) scale(1,-1) translate(0,-1901)"/>
144
+ <use href="#g2588" transform="translate(71868,11920) scale(1,-1) translate(0,-1901)"/>
145
+ <use href="#g2591" transform="translate(0,14304) scale(1,-1) translate(0,-1901)"/>
146
+ <use href="#g2588" transform="translate(1356,14304) scale(1,-1) translate(0,-1901)"/>
147
+ <use href="#g2588" transform="translate(2712,14304) scale(1,-1) translate(0,-1901)"/>
148
+ <use href="#g2591" transform="translate(6780,14304) scale(1,-1) translate(0,-1901)"/>
149
+ <use href="#g2588" transform="translate(8136,14304) scale(1,-1) translate(0,-1901)"/>
150
+ <use href="#g2588" transform="translate(9492,14304) scale(1,-1) translate(0,-1901)"/>
151
+ <use href="#g2588" transform="translate(10848,14304) scale(1,-1) translate(0,-1901)"/>
152
+ <use href="#g2588" transform="translate(12204,14304) scale(1,-1) translate(0,-1901)"/>
153
+ <use href="#g2588" transform="translate(13560,14304) scale(1,-1) translate(0,-1901)"/>
154
+ <use href="#g2591" transform="translate(14916,14304) scale(1,-1) translate(0,-1901)"/>
155
+ <use href="#g2588" transform="translate(16272,14304) scale(1,-1) translate(0,-1901)"/>
156
+ <use href="#g2588" transform="translate(17628,14304) scale(1,-1) translate(0,-1901)"/>
157
+ <use href="#g2591" transform="translate(23052,14304) scale(1,-1) translate(0,-1901)"/>
158
+ <use href="#g2588" transform="translate(24408,14304) scale(1,-1) translate(0,-1901)"/>
159
+ <use href="#g2588" transform="translate(25764,14304) scale(1,-1) translate(0,-1901)"/>
160
+ <use href="#g2588" transform="translate(27120,14304) scale(1,-1) translate(0,-1901)"/>
161
+ <use href="#g2591" transform="translate(31188,14304) scale(1,-1) translate(0,-1901)"/>
162
+ <use href="#g2588" transform="translate(32544,14304) scale(1,-1) translate(0,-1901)"/>
163
+ <use href="#g2588" transform="translate(33900,14304) scale(1,-1) translate(0,-1901)"/>
164
+ <use href="#g2591" transform="translate(37968,14304) scale(1,-1) translate(0,-1901)"/>
165
+ <use href="#g2588" transform="translate(39324,14304) scale(1,-1) translate(0,-1901)"/>
166
+ <use href="#g2588" transform="translate(40680,14304) scale(1,-1) translate(0,-1901)"/>
167
+ <use href="#g2591" transform="translate(46104,14304) scale(1,-1) translate(0,-1901)"/>
168
+ <use href="#g2588" transform="translate(47460,14304) scale(1,-1) translate(0,-1901)"/>
169
+ <use href="#g2588" transform="translate(48816,14304) scale(1,-1) translate(0,-1901)"/>
170
+ <use href="#g2591" transform="translate(54240,14304) scale(1,-1) translate(0,-1901)"/>
171
+ <use href="#g2588" transform="translate(55596,14304) scale(1,-1) translate(0,-1901)"/>
172
+ <use href="#g2588" transform="translate(56952,14304) scale(1,-1) translate(0,-1901)"/>
173
+ <use href="#g2591" transform="translate(61020,14304) scale(1,-1) translate(0,-1901)"/>
174
+ <use href="#g2588" transform="translate(62376,14304) scale(1,-1) translate(0,-1901)"/>
175
+ <use href="#g2588" transform="translate(63732,14304) scale(1,-1) translate(0,-1901)"/>
176
+ <use href="#g2588" transform="translate(65088,14304) scale(1,-1) translate(0,-1901)"/>
177
+ <use href="#g2588" transform="translate(66444,14304) scale(1,-1) translate(0,-1901)"/>
178
+ <use href="#g2588" transform="translate(67800,14304) scale(1,-1) translate(0,-1901)"/>
179
+ <use href="#g2591" transform="translate(69156,14304) scale(1,-1) translate(0,-1901)"/>
180
+ <use href="#g2588" transform="translate(70512,14304) scale(1,-1) translate(0,-1901)"/>
181
+ <use href="#g2588" transform="translate(71868,14304) scale(1,-1) translate(0,-1901)"/>
182
+ </svg>
@@ -0,0 +1,7 @@
1
+ ░██ ░██ ░██
2
+ ░██ ░██ ░██
3
+ ░██ ░██████ ░██████ ░█████████████ ░████████
4
+ ░██ ░██ ░██ ░██ ░██ ░██ ░██ ░██
5
+ ░██ ░███████ ░██ ░██ ░██ ░██ ░██ ░██
6
+ ░██ ░██ ░██ ░██ ░██ ░██ ░██ ░██ ░███
7
+ ░██ ░█████░██ ░███ ░██ ░██ ░██ ░██ ░█████░██
@@ -0,0 +1,180 @@
1
+ import { type Plugin, tool } from "@opencode-ai/plugin"
2
+ import { execSync } from "child_process"
3
+
4
+ /** Absolute path to the lat binary, injected by `lat init`. */
5
+ const LAT = "__LAT_BIN__"
6
+
7
+ function run(args: string[]): string {
8
+ return execSync(`${LAT} ${args.join(" ")}`, {
9
+ cwd: process.cwd(),
10
+ encoding: "utf-8",
11
+ timeout: 30_000,
12
+ })
13
+ }
14
+
15
+ function tryRun(args: string[]): string {
16
+ try {
17
+ return run(args)
18
+ } catch {
19
+ return ""
20
+ }
21
+ }
22
+
23
+ export const LatPlugin: Plugin = async (ctx) => {
24
+ return {
25
+ tool: {
26
+ lat_search: tool({
27
+ description:
28
+ "Semantic search across lat.md sections using embeddings. Use before starting any task to find relevant design context.",
29
+ args: {
30
+ query: tool.schema.string("Search query in natural language"),
31
+ limit: tool.schema.optional(
32
+ tool.schema.number("Max results (default 5)"),
33
+ ),
34
+ },
35
+ async execute(args) {
36
+ const cliArgs = ["search", JSON.stringify(args.query)]
37
+ if (args.limit) cliArgs.push("--limit", String(args.limit))
38
+ const output = tryRun(cliArgs)
39
+ return output || "No results found."
40
+ },
41
+ }),
42
+
43
+ lat_section: tool({
44
+ description:
45
+ "Show full content of a lat.md section with outgoing/incoming refs",
46
+ args: {
47
+ query: tool.schema.string(
48
+ 'Section ID or name (e.g. "cli#init", "Tests#User login")',
49
+ ),
50
+ },
51
+ async execute(args) {
52
+ const output = tryRun(["section", JSON.stringify(args.query)])
53
+ return output || "Section not found."
54
+ },
55
+ }),
56
+
57
+ lat_locate: tool({
58
+ description:
59
+ "Find a section by name (exact, subsection tail, or fuzzy match)",
60
+ args: {
61
+ query: tool.schema.string("Section name to locate"),
62
+ },
63
+ async execute(args) {
64
+ const output = tryRun(["locate", JSON.stringify(args.query)])
65
+ return output || "No sections matching query."
66
+ },
67
+ }),
68
+
69
+ lat_check: tool({
70
+ description:
71
+ "Run full lat.md validation. Returns errors or 'All checks passed'",
72
+ args: {},
73
+ async execute() {
74
+ try {
75
+ return run(["check"])
76
+ } catch (err: unknown) {
77
+ const e = err as { stdout?: string; stderr?: string }
78
+ return e.stdout || e.stderr || "Check failed"
79
+ }
80
+ },
81
+ }),
82
+
83
+ lat_expand: tool({
84
+ description:
85
+ "Expand [[refs]] in text to resolved file locations and context",
86
+ args: {
87
+ text: tool.schema.string("Text containing [[refs]] to expand"),
88
+ },
89
+ async execute(args) {
90
+ const output = tryRun(["expand", JSON.stringify(args.text)])
91
+ return output || args.text
92
+ },
93
+ }),
94
+
95
+ lat_refs: tool({
96
+ description:
97
+ "Find what references a given section via wiki links or @lat code comments",
98
+ args: {
99
+ query: tool.schema.string(
100
+ 'Section ID (e.g. "cli#init", "file#Section")',
101
+ ),
102
+ },
103
+ async execute(args) {
104
+ const output = tryRun(["refs", JSON.stringify(args.query)])
105
+ return output || "No references found."
106
+ },
107
+ }),
108
+ },
109
+
110
+ hooks: {
111
+ // Convention, not automated here: a code comment that explains WHY
112
+ // (a reason, trade-off, rejected alternative, or invariant) belongs in
113
+ // a lat.md/ section, with an `@lat:` pointer (comment-prefixed per
114
+ // language, naming the section in double brackets) left behind in the
115
+ // code. `lat hook claude PostToolUse` enforces this as a reminder after
116
+ // every Edit/Write in Claude Code and Codex; OpenCode has no per-edit
117
+ // hook wired up yet.
118
+ "session.idle": async () => {
119
+ let checkFailed = false
120
+ let checkOutput = ""
121
+ try {
122
+ checkOutput = run(["check"])
123
+ } catch (err: unknown) {
124
+ checkFailed = true
125
+ checkOutput = (err as { stdout?: string }).stdout || ""
126
+ }
127
+
128
+ // Check git diff for lat.md/ sync status
129
+ let needsSync = false
130
+ let codeLines = 0
131
+ try {
132
+ const numstat = execSync("git diff HEAD --numstat", {
133
+ encoding: "utf-8",
134
+ cwd: process.cwd(),
135
+ })
136
+
137
+ let latMdLines = 0
138
+ for (const line of numstat.split("\n")) {
139
+ const parts = line.split("\t")
140
+ if (parts.length < 3) continue
141
+ const added = parseInt(parts[0], 10) || 0
142
+ const removed = parseInt(parts[1], 10) || 0
143
+ const file = parts[2]
144
+ const changed = added + removed
145
+ if (file.startsWith("lat.md/")) {
146
+ latMdLines += changed
147
+ } else if (/\.(ts|tsx|js|jsx|py|rs|go|c|h)$/.test(file)) {
148
+ codeLines += changed
149
+ }
150
+ }
151
+
152
+ if (codeLines >= 5) {
153
+ const effectiveLatMd =
154
+ latMdLines === 0 ? 0 : Math.max(latMdLines, 1)
155
+ needsSync = effectiveLatMd < codeLines * 0.05
156
+ }
157
+ } catch {
158
+ // git not available or no HEAD — skip diff check
159
+ }
160
+
161
+ if (!checkFailed && !needsSync) return
162
+
163
+ const message =
164
+ checkFailed && needsSync
165
+ ? `lat check failed and lat.md/ may be out of sync (${codeLines} code lines changed). Run lat_check, fix errors, and update only relevant current-state lat.md/ sections. Do not add journal/changelog notes.`
166
+ : checkFailed
167
+ ? `lat check failed. Run lat_check and fix the errors.`
168
+ : `lat.md/ may be out of sync — ${codeLines} code lines changed but lat.md/ was not updated. Review whether current-state lat.md/ sections need updates; do not add journal/changelog notes. Run lat_check.`
169
+
170
+ await ctx.client.app.log({
171
+ body: {
172
+ service: "lat.md",
173
+ level: "warn",
174
+ message,
175
+ },
176
+ })
177
+ },
178
+ },
179
+ }
180
+ }