@kynetic-ai/spec 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (278) hide show
  1. package/README.md +263 -0
  2. package/dist/acp/client.d.ts +159 -0
  3. package/dist/acp/client.d.ts.map +1 -0
  4. package/dist/acp/client.js +255 -0
  5. package/dist/acp/client.js.map +1 -0
  6. package/dist/acp/framing.d.ts +119 -0
  7. package/dist/acp/framing.d.ts.map +1 -0
  8. package/dist/acp/framing.js +302 -0
  9. package/dist/acp/framing.js.map +1 -0
  10. package/dist/acp/index.d.ts +14 -0
  11. package/dist/acp/index.d.ts.map +1 -0
  12. package/dist/acp/index.js +13 -0
  13. package/dist/acp/index.js.map +1 -0
  14. package/dist/acp/types.d.ts +89 -0
  15. package/dist/acp/types.d.ts.map +1 -0
  16. package/dist/acp/types.js +99 -0
  17. package/dist/acp/types.js.map +1 -0
  18. package/dist/agents/adapters.d.ts +55 -0
  19. package/dist/agents/adapters.d.ts.map +1 -0
  20. package/dist/agents/adapters.js +84 -0
  21. package/dist/agents/adapters.js.map +1 -0
  22. package/dist/agents/index.d.ts +8 -0
  23. package/dist/agents/index.d.ts.map +1 -0
  24. package/dist/agents/index.js +10 -0
  25. package/dist/agents/index.js.map +1 -0
  26. package/dist/agents/spawner.d.ts +53 -0
  27. package/dist/agents/spawner.d.ts.map +1 -0
  28. package/dist/agents/spawner.js +83 -0
  29. package/dist/agents/spawner.js.map +1 -0
  30. package/dist/cli/batch.d.ts +82 -0
  31. package/dist/cli/batch.d.ts.map +1 -0
  32. package/dist/cli/batch.js +162 -0
  33. package/dist/cli/batch.js.map +1 -0
  34. package/dist/cli/commands/clone-for-testing.d.ts +6 -0
  35. package/dist/cli/commands/clone-for-testing.d.ts.map +1 -0
  36. package/dist/cli/commands/clone-for-testing.js +176 -0
  37. package/dist/cli/commands/clone-for-testing.js.map +1 -0
  38. package/dist/cli/commands/derive.d.ts +6 -0
  39. package/dist/cli/commands/derive.d.ts.map +1 -0
  40. package/dist/cli/commands/derive.js +450 -0
  41. package/dist/cli/commands/derive.js.map +1 -0
  42. package/dist/cli/commands/help.d.ts +6 -0
  43. package/dist/cli/commands/help.d.ts.map +1 -0
  44. package/dist/cli/commands/help.js +196 -0
  45. package/dist/cli/commands/help.js.map +1 -0
  46. package/dist/cli/commands/inbox.d.ts +6 -0
  47. package/dist/cli/commands/inbox.d.ts.map +1 -0
  48. package/dist/cli/commands/inbox.js +235 -0
  49. package/dist/cli/commands/inbox.js.map +1 -0
  50. package/dist/cli/commands/index.d.ts +20 -0
  51. package/dist/cli/commands/index.d.ts.map +1 -0
  52. package/dist/cli/commands/index.js +21 -0
  53. package/dist/cli/commands/index.js.map +1 -0
  54. package/dist/cli/commands/init.d.ts +6 -0
  55. package/dist/cli/commands/init.d.ts.map +1 -0
  56. package/dist/cli/commands/init.js +245 -0
  57. package/dist/cli/commands/init.js.map +1 -0
  58. package/dist/cli/commands/item.d.ts +6 -0
  59. package/dist/cli/commands/item.d.ts.map +1 -0
  60. package/dist/cli/commands/item.js +1311 -0
  61. package/dist/cli/commands/item.js.map +1 -0
  62. package/dist/cli/commands/link.d.ts +6 -0
  63. package/dist/cli/commands/link.d.ts.map +1 -0
  64. package/dist/cli/commands/link.js +288 -0
  65. package/dist/cli/commands/link.js.map +1 -0
  66. package/dist/cli/commands/log.d.ts +16 -0
  67. package/dist/cli/commands/log.d.ts.map +1 -0
  68. package/dist/cli/commands/log.js +291 -0
  69. package/dist/cli/commands/log.js.map +1 -0
  70. package/dist/cli/commands/meta.d.ts +15 -0
  71. package/dist/cli/commands/meta.d.ts.map +1 -0
  72. package/dist/cli/commands/meta.js +1378 -0
  73. package/dist/cli/commands/meta.js.map +1 -0
  74. package/dist/cli/commands/module.d.ts +6 -0
  75. package/dist/cli/commands/module.d.ts.map +1 -0
  76. package/dist/cli/commands/module.js +102 -0
  77. package/dist/cli/commands/module.js.map +1 -0
  78. package/dist/cli/commands/ralph.d.ts +9 -0
  79. package/dist/cli/commands/ralph.d.ts.map +1 -0
  80. package/dist/cli/commands/ralph.js +465 -0
  81. package/dist/cli/commands/ralph.js.map +1 -0
  82. package/dist/cli/commands/search.d.ts +6 -0
  83. package/dist/cli/commands/search.d.ts.map +1 -0
  84. package/dist/cli/commands/search.js +134 -0
  85. package/dist/cli/commands/search.js.map +1 -0
  86. package/dist/cli/commands/session.d.ts +164 -0
  87. package/dist/cli/commands/session.d.ts.map +1 -0
  88. package/dist/cli/commands/session.js +745 -0
  89. package/dist/cli/commands/session.js.map +1 -0
  90. package/dist/cli/commands/setup.d.ts +26 -0
  91. package/dist/cli/commands/setup.d.ts.map +1 -0
  92. package/dist/cli/commands/setup.js +586 -0
  93. package/dist/cli/commands/setup.js.map +1 -0
  94. package/dist/cli/commands/shadow.d.ts +6 -0
  95. package/dist/cli/commands/shadow.d.ts.map +1 -0
  96. package/dist/cli/commands/shadow.js +299 -0
  97. package/dist/cli/commands/shadow.js.map +1 -0
  98. package/dist/cli/commands/task.d.ts +6 -0
  99. package/dist/cli/commands/task.d.ts.map +1 -0
  100. package/dist/cli/commands/task.js +1514 -0
  101. package/dist/cli/commands/task.js.map +1 -0
  102. package/dist/cli/commands/tasks.d.ts +6 -0
  103. package/dist/cli/commands/tasks.d.ts.map +1 -0
  104. package/dist/cli/commands/tasks.js +347 -0
  105. package/dist/cli/commands/tasks.js.map +1 -0
  106. package/dist/cli/commands/trait.d.ts +10 -0
  107. package/dist/cli/commands/trait.d.ts.map +1 -0
  108. package/dist/cli/commands/trait.js +295 -0
  109. package/dist/cli/commands/trait.js.map +1 -0
  110. package/dist/cli/commands/validate.d.ts +6 -0
  111. package/dist/cli/commands/validate.d.ts.map +1 -0
  112. package/dist/cli/commands/validate.js +626 -0
  113. package/dist/cli/commands/validate.js.map +1 -0
  114. package/dist/cli/exit-codes.d.ts +62 -0
  115. package/dist/cli/exit-codes.d.ts.map +1 -0
  116. package/dist/cli/exit-codes.js +65 -0
  117. package/dist/cli/exit-codes.js.map +1 -0
  118. package/dist/cli/help/content.d.ts +35 -0
  119. package/dist/cli/help/content.d.ts.map +1 -0
  120. package/dist/cli/help/content.js +312 -0
  121. package/dist/cli/help/content.js.map +1 -0
  122. package/dist/cli/index.d.ts +5 -0
  123. package/dist/cli/index.d.ts.map +1 -0
  124. package/dist/cli/index.js +85 -0
  125. package/dist/cli/index.js.map +1 -0
  126. package/dist/cli/introspection.d.ts +87 -0
  127. package/dist/cli/introspection.d.ts.map +1 -0
  128. package/dist/cli/introspection.js +127 -0
  129. package/dist/cli/introspection.js.map +1 -0
  130. package/dist/cli/output.d.ts +56 -0
  131. package/dist/cli/output.d.ts.map +1 -0
  132. package/dist/cli/output.js +467 -0
  133. package/dist/cli/output.js.map +1 -0
  134. package/dist/cli/suggest.d.ts +16 -0
  135. package/dist/cli/suggest.d.ts.map +1 -0
  136. package/dist/cli/suggest.js +72 -0
  137. package/dist/cli/suggest.js.map +1 -0
  138. package/dist/index.d.ts +3 -0
  139. package/dist/index.d.ts.map +1 -0
  140. package/dist/index.js +5 -0
  141. package/dist/index.js.map +1 -0
  142. package/dist/parser/alignment.d.ts +113 -0
  143. package/dist/parser/alignment.d.ts.map +1 -0
  144. package/dist/parser/alignment.js +261 -0
  145. package/dist/parser/alignment.js.map +1 -0
  146. package/dist/parser/assess.d.ts +81 -0
  147. package/dist/parser/assess.d.ts.map +1 -0
  148. package/dist/parser/assess.js +197 -0
  149. package/dist/parser/assess.js.map +1 -0
  150. package/dist/parser/convention-validation.d.ts +48 -0
  151. package/dist/parser/convention-validation.d.ts.map +1 -0
  152. package/dist/parser/convention-validation.js +167 -0
  153. package/dist/parser/convention-validation.js.map +1 -0
  154. package/dist/parser/fix.d.ts +38 -0
  155. package/dist/parser/fix.d.ts.map +1 -0
  156. package/dist/parser/fix.js +185 -0
  157. package/dist/parser/fix.js.map +1 -0
  158. package/dist/parser/index.d.ts +12 -0
  159. package/dist/parser/index.d.ts.map +1 -0
  160. package/dist/parser/index.js +13 -0
  161. package/dist/parser/index.js.map +1 -0
  162. package/dist/parser/items.d.ts +138 -0
  163. package/dist/parser/items.d.ts.map +1 -0
  164. package/dist/parser/items.js +321 -0
  165. package/dist/parser/items.js.map +1 -0
  166. package/dist/parser/meta.d.ts +120 -0
  167. package/dist/parser/meta.d.ts.map +1 -0
  168. package/dist/parser/meta.js +441 -0
  169. package/dist/parser/meta.js.map +1 -0
  170. package/dist/parser/refs.d.ts +185 -0
  171. package/dist/parser/refs.d.ts.map +1 -0
  172. package/dist/parser/refs.js +404 -0
  173. package/dist/parser/refs.js.map +1 -0
  174. package/dist/parser/shadow.d.ts +253 -0
  175. package/dist/parser/shadow.d.ts.map +1 -0
  176. package/dist/parser/shadow.js +1053 -0
  177. package/dist/parser/shadow.js.map +1 -0
  178. package/dist/parser/traits.d.ts +72 -0
  179. package/dist/parser/traits.d.ts.map +1 -0
  180. package/dist/parser/traits.js +120 -0
  181. package/dist/parser/traits.js.map +1 -0
  182. package/dist/parser/validate.d.ts +89 -0
  183. package/dist/parser/validate.d.ts.map +1 -0
  184. package/dist/parser/validate.js +817 -0
  185. package/dist/parser/validate.js.map +1 -0
  186. package/dist/parser/yaml.d.ts +326 -0
  187. package/dist/parser/yaml.d.ts.map +1 -0
  188. package/dist/parser/yaml.js +1383 -0
  189. package/dist/parser/yaml.js.map +1 -0
  190. package/dist/ralph/cli-renderer.d.ts +20 -0
  191. package/dist/ralph/cli-renderer.d.ts.map +1 -0
  192. package/dist/ralph/cli-renderer.js +179 -0
  193. package/dist/ralph/cli-renderer.js.map +1 -0
  194. package/dist/ralph/events.d.ts +65 -0
  195. package/dist/ralph/events.d.ts.map +1 -0
  196. package/dist/ralph/events.js +397 -0
  197. package/dist/ralph/events.js.map +1 -0
  198. package/dist/ralph/index.d.ts +8 -0
  199. package/dist/ralph/index.d.ts.map +1 -0
  200. package/dist/ralph/index.js +10 -0
  201. package/dist/ralph/index.js.map +1 -0
  202. package/dist/schema/common.d.ts +46 -0
  203. package/dist/schema/common.d.ts.map +1 -0
  204. package/dist/schema/common.js +71 -0
  205. package/dist/schema/common.js.map +1 -0
  206. package/dist/schema/inbox.d.ts +90 -0
  207. package/dist/schema/inbox.d.ts.map +1 -0
  208. package/dist/schema/inbox.js +30 -0
  209. package/dist/schema/inbox.js.map +1 -0
  210. package/dist/schema/index.d.ts +6 -0
  211. package/dist/schema/index.d.ts.map +1 -0
  212. package/dist/schema/index.js +7 -0
  213. package/dist/schema/index.js.map +1 -0
  214. package/dist/schema/meta.d.ts +762 -0
  215. package/dist/schema/meta.d.ts.map +1 -0
  216. package/dist/schema/meta.js +144 -0
  217. package/dist/schema/meta.js.map +1 -0
  218. package/dist/schema/spec.d.ts +912 -0
  219. package/dist/schema/spec.d.ts.map +1 -0
  220. package/dist/schema/spec.js +104 -0
  221. package/dist/schema/spec.js.map +1 -0
  222. package/dist/schema/task.d.ts +664 -0
  223. package/dist/schema/task.d.ts.map +1 -0
  224. package/dist/schema/task.js +130 -0
  225. package/dist/schema/task.js.map +1 -0
  226. package/dist/sessions/index.d.ts +11 -0
  227. package/dist/sessions/index.d.ts.map +1 -0
  228. package/dist/sessions/index.js +13 -0
  229. package/dist/sessions/index.js.map +1 -0
  230. package/dist/sessions/store.d.ts +144 -0
  231. package/dist/sessions/store.d.ts.map +1 -0
  232. package/dist/sessions/store.js +325 -0
  233. package/dist/sessions/store.js.map +1 -0
  234. package/dist/sessions/types.d.ts +157 -0
  235. package/dist/sessions/types.d.ts.map +1 -0
  236. package/dist/sessions/types.js +90 -0
  237. package/dist/sessions/types.js.map +1 -0
  238. package/dist/strings/errors.d.ts +420 -0
  239. package/dist/strings/errors.d.ts.map +1 -0
  240. package/dist/strings/errors.js +282 -0
  241. package/dist/strings/errors.js.map +1 -0
  242. package/dist/strings/guidance.d.ts +65 -0
  243. package/dist/strings/guidance.d.ts.map +1 -0
  244. package/dist/strings/guidance.js +66 -0
  245. package/dist/strings/guidance.js.map +1 -0
  246. package/dist/strings/index.d.ts +12 -0
  247. package/dist/strings/index.d.ts.map +1 -0
  248. package/dist/strings/index.js +12 -0
  249. package/dist/strings/index.js.map +1 -0
  250. package/dist/strings/labels.d.ts +74 -0
  251. package/dist/strings/labels.d.ts.map +1 -0
  252. package/dist/strings/labels.js +75 -0
  253. package/dist/strings/labels.js.map +1 -0
  254. package/dist/strings/validation.d.ts +126 -0
  255. package/dist/strings/validation.d.ts.map +1 -0
  256. package/dist/strings/validation.js +135 -0
  257. package/dist/strings/validation.js.map +1 -0
  258. package/dist/utils/commit.d.ts +23 -0
  259. package/dist/utils/commit.d.ts.map +1 -0
  260. package/dist/utils/commit.js +67 -0
  261. package/dist/utils/commit.js.map +1 -0
  262. package/dist/utils/git.d.ts +57 -0
  263. package/dist/utils/git.d.ts.map +1 -0
  264. package/dist/utils/git.js +192 -0
  265. package/dist/utils/git.js.map +1 -0
  266. package/dist/utils/grep.d.ts +28 -0
  267. package/dist/utils/grep.d.ts.map +1 -0
  268. package/dist/utils/grep.js +86 -0
  269. package/dist/utils/grep.js.map +1 -0
  270. package/dist/utils/index.d.ts +8 -0
  271. package/dist/utils/index.d.ts.map +1 -0
  272. package/dist/utils/index.js +6 -0
  273. package/dist/utils/index.js.map +1 -0
  274. package/dist/utils/time.d.ts +18 -0
  275. package/dist/utils/time.d.ts.map +1 -0
  276. package/dist/utils/time.js +61 -0
  277. package/dist/utils/time.js.map +1 -0
  278. package/package.json +62 -0
@@ -0,0 +1,321 @@
1
+ /**
2
+ * Item index for efficient queries across spec items and tasks.
3
+ *
4
+ * Provides filtering by type, tags, status, and field presence.
5
+ * Complements ReferenceIndex which handles @reference resolution.
6
+ */
7
+ import { grepItem } from '../utils/grep.js';
8
+ // ============================================================
9
+ // ITEM INDEX
10
+ // ============================================================
11
+ /**
12
+ * Index for efficient item queries.
13
+ * Build once when loading the spec, then query many times.
14
+ */
15
+ export class ItemIndex {
16
+ /** All items (tasks + spec items) */
17
+ allItems = [];
18
+ /** Tasks only */
19
+ tasks = [];
20
+ /** Spec items only (non-tasks) */
21
+ specItems = [];
22
+ /** Index by type */
23
+ typeIndex = new Map();
24
+ /** Index by tag */
25
+ tagIndex = new Map();
26
+ /** Index by task status */
27
+ statusIndex = new Map();
28
+ /** Index by maturity */
29
+ maturityIndex = new Map();
30
+ /** Index by implementation status */
31
+ implementationIndex = new Map();
32
+ /**
33
+ * Build index from loaded items
34
+ */
35
+ constructor(tasks, items) {
36
+ this.tasks = tasks;
37
+ this.specItems = items;
38
+ this.allItems = [...tasks, ...items];
39
+ // Build indexes
40
+ for (const item of this.allItems) {
41
+ this.indexItem(item);
42
+ }
43
+ }
44
+ indexItem(item) {
45
+ // Index by type
46
+ const type = item.type || 'unknown';
47
+ const typeList = this.typeIndex.get(type) || [];
48
+ typeList.push(item);
49
+ this.typeIndex.set(type, typeList);
50
+ // Index by tags
51
+ const tags = 'tags' in item ? item.tags : [];
52
+ for (const tag of tags) {
53
+ const tagList = this.tagIndex.get(tag) || [];
54
+ tagList.push(item);
55
+ this.tagIndex.set(tag, tagList);
56
+ }
57
+ // Index tasks by status
58
+ if ('status' in item && typeof item.status === 'string') {
59
+ const task = item;
60
+ const statusList = this.statusIndex.get(task.status) || [];
61
+ statusList.push(task);
62
+ this.statusIndex.set(task.status, statusList);
63
+ }
64
+ // Index spec items by maturity/implementation
65
+ if ('status' in item && typeof item.status === 'object' && item.status !== null) {
66
+ const specItem = item;
67
+ const status = specItem.status;
68
+ if (status.maturity) {
69
+ const maturityList = this.maturityIndex.get(status.maturity) || [];
70
+ maturityList.push(specItem);
71
+ this.maturityIndex.set(status.maturity, maturityList);
72
+ }
73
+ if (status.implementation) {
74
+ const implList = this.implementationIndex.get(status.implementation) || [];
75
+ implList.push(specItem);
76
+ this.implementationIndex.set(status.implementation, implList);
77
+ }
78
+ }
79
+ }
80
+ /**
81
+ * Query items with filters
82
+ */
83
+ query(filter = {}) {
84
+ let results;
85
+ // Start with appropriate base set
86
+ if (filter.tasksOnly) {
87
+ results = [...this.tasks];
88
+ }
89
+ else if (filter.specItemsOnly) {
90
+ results = [...this.specItems];
91
+ }
92
+ else {
93
+ results = [...this.allItems];
94
+ }
95
+ // Apply type filter
96
+ if (filter.type) {
97
+ const types = Array.isArray(filter.type) ? filter.type : [filter.type];
98
+ results = results.filter(item => types.includes(item.type));
99
+ }
100
+ // Apply tag filter (ANY)
101
+ if (filter.tags && filter.tags.length > 0) {
102
+ results = results.filter(item => {
103
+ const itemTags = 'tags' in item ? item.tags : [];
104
+ return filter.tags.some(tag => itemTags.includes(tag));
105
+ });
106
+ }
107
+ // Apply tag filter (ALL)
108
+ if (filter.allTags && filter.allTags.length > 0) {
109
+ results = results.filter(item => {
110
+ const itemTags = 'tags' in item ? item.tags : [];
111
+ return filter.allTags.every(tag => itemTags.includes(tag));
112
+ });
113
+ }
114
+ // Apply task status filter
115
+ if (filter.status) {
116
+ const statuses = Array.isArray(filter.status) ? filter.status : [filter.status];
117
+ results = results.filter(item => {
118
+ if (!('status' in item) || typeof item.status !== 'string')
119
+ return false;
120
+ return statuses.includes(item.status);
121
+ });
122
+ }
123
+ // Apply maturity filter
124
+ if (filter.maturity) {
125
+ const maturities = Array.isArray(filter.maturity) ? filter.maturity : [filter.maturity];
126
+ results = results.filter(item => {
127
+ if (!('status' in item) || typeof item.status !== 'object' || !item.status)
128
+ return false;
129
+ const status = item.status;
130
+ return status.maturity && maturities.includes(status.maturity);
131
+ });
132
+ }
133
+ // Apply implementation filter
134
+ if (filter.implementation) {
135
+ const impls = Array.isArray(filter.implementation) ? filter.implementation : [filter.implementation];
136
+ results = results.filter(item => {
137
+ if (!('status' in item) || typeof item.status !== 'object' || !item.status)
138
+ return false;
139
+ const status = item.status;
140
+ return status.implementation && impls.includes(status.implementation);
141
+ });
142
+ }
143
+ // Apply has-fields filter
144
+ if (filter.hasFields && filter.hasFields.length > 0) {
145
+ results = results.filter(item => {
146
+ const obj = item;
147
+ return filter.hasFields.every(field => {
148
+ const value = getNestedField(obj, field);
149
+ return value !== undefined && value !== null;
150
+ });
151
+ });
152
+ }
153
+ // Apply field-equals filter
154
+ if (filter.fieldEquals && filter.fieldEquals.length > 0) {
155
+ results = results.filter(item => {
156
+ const obj = item;
157
+ return filter.fieldEquals.every(({ field, value }) => {
158
+ const itemValue = getNestedField(obj, field);
159
+ return itemValue === value;
160
+ });
161
+ });
162
+ }
163
+ // Apply title search
164
+ if (filter.titleContains) {
165
+ const search = filter.titleContains.toLowerCase();
166
+ results = results.filter(item => item.title.toLowerCase().includes(search));
167
+ }
168
+ // Apply grep search (regex across all text content)
169
+ if (filter.grepSearch) {
170
+ results = results.filter(item => {
171
+ const match = grepItem(item, filter.grepSearch);
172
+ return match !== null;
173
+ });
174
+ }
175
+ return results;
176
+ }
177
+ /**
178
+ * Query with pagination
179
+ */
180
+ queryPaginated(filter = {}, offset = 0, limit = 50) {
181
+ const allResults = this.query(filter);
182
+ const items = allResults.slice(offset, offset + limit);
183
+ return {
184
+ items,
185
+ total: allResults.length,
186
+ offset,
187
+ limit,
188
+ };
189
+ }
190
+ /**
191
+ * Get items by type
192
+ */
193
+ getByType(type) {
194
+ return this.typeIndex.get(type) || [];
195
+ }
196
+ /**
197
+ * Get items by tag
198
+ */
199
+ getByTag(tag) {
200
+ return this.tagIndex.get(tag) || [];
201
+ }
202
+ /**
203
+ * Get tasks by status
204
+ */
205
+ getTasksByStatus(status) {
206
+ return this.statusIndex.get(status) || [];
207
+ }
208
+ /**
209
+ * Get spec items by maturity
210
+ */
211
+ getByMaturity(maturity) {
212
+ return this.maturityIndex.get(maturity) || [];
213
+ }
214
+ /**
215
+ * Get spec items by implementation status
216
+ */
217
+ getByImplementation(impl) {
218
+ return this.implementationIndex.get(impl) || [];
219
+ }
220
+ /**
221
+ * Get all unique types in the index
222
+ */
223
+ getTypes() {
224
+ return [...this.typeIndex.keys()].sort();
225
+ }
226
+ /**
227
+ * Get all unique tags in the index
228
+ */
229
+ getTags() {
230
+ return [...this.tagIndex.keys()].sort();
231
+ }
232
+ /**
233
+ * Get count by type
234
+ */
235
+ getTypeCounts() {
236
+ const counts = new Map();
237
+ for (const [type, items] of this.typeIndex) {
238
+ counts.set(type, items.length);
239
+ }
240
+ return counts;
241
+ }
242
+ /**
243
+ * Get count by tag
244
+ */
245
+ getTagCounts() {
246
+ const counts = new Map();
247
+ for (const [tag, items] of this.tagIndex) {
248
+ counts.set(tag, items.length);
249
+ }
250
+ return counts;
251
+ }
252
+ /**
253
+ * Get total item count
254
+ */
255
+ get size() {
256
+ return this.allItems.length;
257
+ }
258
+ /**
259
+ * Get task count
260
+ */
261
+ get taskCount() {
262
+ return this.tasks.length;
263
+ }
264
+ /**
265
+ * Get spec item count
266
+ */
267
+ get specItemCount() {
268
+ return this.specItems.length;
269
+ }
270
+ }
271
+ // ============================================================
272
+ // HELPERS
273
+ // ============================================================
274
+ /**
275
+ * Get a nested field value using dot notation
276
+ * e.g., "status.maturity" -> item.status.maturity
277
+ */
278
+ function getNestedField(obj, path) {
279
+ const parts = path.split('.');
280
+ let current = obj;
281
+ for (const part of parts) {
282
+ if (current === null || current === undefined)
283
+ return undefined;
284
+ if (typeof current !== 'object')
285
+ return undefined;
286
+ current = current[part];
287
+ }
288
+ return current;
289
+ }
290
+ /**
291
+ * Find direct child items of a parent item based on _path
292
+ * Children have paths like "parent_path.field[N]"
293
+ */
294
+ export function findChildItems(parent, allItems) {
295
+ // Handle both cases: parent at root and nested parent
296
+ const parentPath = parent._path || '';
297
+ // Look for items whose path starts with parent's path
298
+ return allItems.filter(item => {
299
+ if (!item._path)
300
+ return false;
301
+ if (item._ulid === parent._ulid)
302
+ return false; // Skip self
303
+ // Child path should be: parentPath.field[N]
304
+ // Examples:
305
+ // - Parent: "features[0]", Child: "features[0].requirements[0]"
306
+ // - Parent: "", Child: "features[0]"
307
+ if (parentPath === '') {
308
+ // Root level parent - children are top-level items like "features[0]"
309
+ return !item._path.includes('.');
310
+ }
311
+ // Nested parent - children start with parent path + dot
312
+ if (!item._path.startsWith(parentPath + '.')) {
313
+ return false;
314
+ }
315
+ // Must be direct child (no additional nesting)
316
+ // Remove parent prefix and check for no more dots
317
+ const remainder = item._path.slice(parentPath.length + 1);
318
+ return !remainder.includes('.');
319
+ });
320
+ }
321
+ //# sourceMappingURL=items.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"items.js","sourceRoot":"","sources":["../../src/parser/items.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,120 @@
1
+ /**
2
+ * Meta manifest loading and operations.
3
+ *
4
+ * The meta manifest (kynetic.meta.yaml) contains process definitions:
5
+ * - Agents: roles, capabilities, conventions
6
+ * - Workflows: structured processes with steps
7
+ * - Conventions: project rules and standards
8
+ * - Observations: feedback about processes
9
+ */
10
+ import { type MetaManifest, type Agent, type Workflow, type Convention, type Observation, type MetaItem, type ObservationType, type SessionContext, getMetaItemType } from '../schema/index.js';
11
+ import type { KspecContext } from './yaml.js';
12
+ /**
13
+ * Loaded agent with runtime metadata
14
+ */
15
+ export interface LoadedAgent extends Agent {
16
+ _sourceFile?: string;
17
+ }
18
+ /**
19
+ * Loaded workflow with runtime metadata
20
+ */
21
+ export interface LoadedWorkflow extends Workflow {
22
+ _sourceFile?: string;
23
+ }
24
+ /**
25
+ * Loaded convention with runtime metadata
26
+ */
27
+ export interface LoadedConvention extends Convention {
28
+ _sourceFile?: string;
29
+ }
30
+ /**
31
+ * Loaded observation with runtime metadata
32
+ */
33
+ export interface LoadedObservation extends Observation {
34
+ _sourceFile?: string;
35
+ }
36
+ /**
37
+ * Any loaded meta item
38
+ */
39
+ export type LoadedMetaItem = LoadedAgent | LoadedWorkflow | LoadedConvention | LoadedObservation;
40
+ /**
41
+ * Meta context containing all loaded meta items
42
+ */
43
+ export interface MetaContext {
44
+ manifest: MetaManifest | null;
45
+ manifestPath: string | null;
46
+ agents: LoadedAgent[];
47
+ workflows: LoadedWorkflow[];
48
+ conventions: LoadedConvention[];
49
+ observations: LoadedObservation[];
50
+ }
51
+ /**
52
+ * Find the meta manifest file (kynetic.meta.yaml)
53
+ */
54
+ export declare function findMetaManifest(specDir: string): Promise<string | null>;
55
+ /**
56
+ * Get the meta manifest file path.
57
+ * Returns path even if file doesn't exist yet.
58
+ */
59
+ export declare function getMetaManifestPath(ctx: KspecContext): string;
60
+ /**
61
+ * Load the meta context from a kspec context.
62
+ * Loads meta manifest and follows includes.
63
+ */
64
+ export declare function loadMetaContext(ctx: KspecContext): Promise<MetaContext>;
65
+ /**
66
+ * Get meta stats summary
67
+ */
68
+ export declare function getMetaStats(meta: MetaContext): {
69
+ agents: number;
70
+ workflows: number;
71
+ conventions: number;
72
+ observations: number;
73
+ unresolvedObservations: number;
74
+ };
75
+ /**
76
+ * Find a meta item by reference (ULID, short ULID, or id)
77
+ */
78
+ export declare function findMetaItemByRef(meta: MetaContext, ref: string): LoadedMetaItem | undefined;
79
+ /**
80
+ * Determine if an item is a meta item type
81
+ */
82
+ export declare function isMetaItemType(type: string): boolean;
83
+ /**
84
+ * Create a new observation
85
+ */
86
+ export declare function createObservation(type: ObservationType, content: string, options?: {
87
+ workflow_ref?: string;
88
+ author?: string;
89
+ }): Observation;
90
+ /**
91
+ * Save an observation to the meta manifest
92
+ */
93
+ export declare function saveObservation(ctx: KspecContext, observation: LoadedObservation): Promise<void>;
94
+ /**
95
+ * Delete an observation from the meta manifest
96
+ */
97
+ export declare function deleteObservation(ctx: KspecContext, ulid: string): Promise<boolean>;
98
+ export { getMetaItemType };
99
+ export type { Agent, Workflow, Convention, Observation, MetaItem };
100
+ /**
101
+ * Save any meta item (agent, workflow, convention) to the manifest
102
+ */
103
+ export declare function saveMetaItem(ctx: KspecContext, item: LoadedMetaItem, itemType: 'agent' | 'workflow' | 'convention'): Promise<void>;
104
+ /**
105
+ * Delete any meta item from the manifest
106
+ */
107
+ export declare function deleteMetaItem(ctx: KspecContext, itemUlid: string, itemType: 'agent' | 'workflow' | 'convention' | 'observation'): Promise<boolean>;
108
+ /**
109
+ * Get the session context file path
110
+ */
111
+ export declare function getSessionContextPath(ctx: KspecContext): string;
112
+ /**
113
+ * Load session context (or return empty context if not exists)
114
+ */
115
+ export declare function loadSessionContext(ctx: KspecContext): Promise<SessionContext>;
116
+ /**
117
+ * Save session context
118
+ */
119
+ export declare function saveSessionContext(ctx: KspecContext, context: SessionContext): Promise<void>;
120
+ //# sourceMappingURL=meta.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"meta.d.ts","sourceRoot":"","sources":["../../src/parser/meta.ts"],"names":[],"mappings":"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"}