@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.
- package/README.md +263 -0
- package/dist/acp/client.d.ts +159 -0
- package/dist/acp/client.d.ts.map +1 -0
- package/dist/acp/client.js +255 -0
- package/dist/acp/client.js.map +1 -0
- package/dist/acp/framing.d.ts +119 -0
- package/dist/acp/framing.d.ts.map +1 -0
- package/dist/acp/framing.js +302 -0
- package/dist/acp/framing.js.map +1 -0
- package/dist/acp/index.d.ts +14 -0
- package/dist/acp/index.d.ts.map +1 -0
- package/dist/acp/index.js +13 -0
- package/dist/acp/index.js.map +1 -0
- package/dist/acp/types.d.ts +89 -0
- package/dist/acp/types.d.ts.map +1 -0
- package/dist/acp/types.js +99 -0
- package/dist/acp/types.js.map +1 -0
- package/dist/agents/adapters.d.ts +55 -0
- package/dist/agents/adapters.d.ts.map +1 -0
- package/dist/agents/adapters.js +84 -0
- package/dist/agents/adapters.js.map +1 -0
- package/dist/agents/index.d.ts +8 -0
- package/dist/agents/index.d.ts.map +1 -0
- package/dist/agents/index.js +10 -0
- package/dist/agents/index.js.map +1 -0
- package/dist/agents/spawner.d.ts +53 -0
- package/dist/agents/spawner.d.ts.map +1 -0
- package/dist/agents/spawner.js +83 -0
- package/dist/agents/spawner.js.map +1 -0
- package/dist/cli/batch.d.ts +82 -0
- package/dist/cli/batch.d.ts.map +1 -0
- package/dist/cli/batch.js +162 -0
- package/dist/cli/batch.js.map +1 -0
- package/dist/cli/commands/clone-for-testing.d.ts +6 -0
- package/dist/cli/commands/clone-for-testing.d.ts.map +1 -0
- package/dist/cli/commands/clone-for-testing.js +176 -0
- package/dist/cli/commands/clone-for-testing.js.map +1 -0
- package/dist/cli/commands/derive.d.ts +6 -0
- package/dist/cli/commands/derive.d.ts.map +1 -0
- package/dist/cli/commands/derive.js +450 -0
- package/dist/cli/commands/derive.js.map +1 -0
- package/dist/cli/commands/help.d.ts +6 -0
- package/dist/cli/commands/help.d.ts.map +1 -0
- package/dist/cli/commands/help.js +196 -0
- package/dist/cli/commands/help.js.map +1 -0
- package/dist/cli/commands/inbox.d.ts +6 -0
- package/dist/cli/commands/inbox.d.ts.map +1 -0
- package/dist/cli/commands/inbox.js +235 -0
- package/dist/cli/commands/inbox.js.map +1 -0
- package/dist/cli/commands/index.d.ts +20 -0
- package/dist/cli/commands/index.d.ts.map +1 -0
- package/dist/cli/commands/index.js +21 -0
- package/dist/cli/commands/index.js.map +1 -0
- package/dist/cli/commands/init.d.ts +6 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +245 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/item.d.ts +6 -0
- package/dist/cli/commands/item.d.ts.map +1 -0
- package/dist/cli/commands/item.js +1311 -0
- package/dist/cli/commands/item.js.map +1 -0
- package/dist/cli/commands/link.d.ts +6 -0
- package/dist/cli/commands/link.d.ts.map +1 -0
- package/dist/cli/commands/link.js +288 -0
- package/dist/cli/commands/link.js.map +1 -0
- package/dist/cli/commands/log.d.ts +16 -0
- package/dist/cli/commands/log.d.ts.map +1 -0
- package/dist/cli/commands/log.js +291 -0
- package/dist/cli/commands/log.js.map +1 -0
- package/dist/cli/commands/meta.d.ts +15 -0
- package/dist/cli/commands/meta.d.ts.map +1 -0
- package/dist/cli/commands/meta.js +1378 -0
- package/dist/cli/commands/meta.js.map +1 -0
- package/dist/cli/commands/module.d.ts +6 -0
- package/dist/cli/commands/module.d.ts.map +1 -0
- package/dist/cli/commands/module.js +102 -0
- package/dist/cli/commands/module.js.map +1 -0
- package/dist/cli/commands/ralph.d.ts +9 -0
- package/dist/cli/commands/ralph.d.ts.map +1 -0
- package/dist/cli/commands/ralph.js +465 -0
- package/dist/cli/commands/ralph.js.map +1 -0
- package/dist/cli/commands/search.d.ts +6 -0
- package/dist/cli/commands/search.d.ts.map +1 -0
- package/dist/cli/commands/search.js +134 -0
- package/dist/cli/commands/search.js.map +1 -0
- package/dist/cli/commands/session.d.ts +164 -0
- package/dist/cli/commands/session.d.ts.map +1 -0
- package/dist/cli/commands/session.js +745 -0
- package/dist/cli/commands/session.js.map +1 -0
- package/dist/cli/commands/setup.d.ts +26 -0
- package/dist/cli/commands/setup.d.ts.map +1 -0
- package/dist/cli/commands/setup.js +586 -0
- package/dist/cli/commands/setup.js.map +1 -0
- package/dist/cli/commands/shadow.d.ts +6 -0
- package/dist/cli/commands/shadow.d.ts.map +1 -0
- package/dist/cli/commands/shadow.js +299 -0
- package/dist/cli/commands/shadow.js.map +1 -0
- package/dist/cli/commands/task.d.ts +6 -0
- package/dist/cli/commands/task.d.ts.map +1 -0
- package/dist/cli/commands/task.js +1514 -0
- package/dist/cli/commands/task.js.map +1 -0
- package/dist/cli/commands/tasks.d.ts +6 -0
- package/dist/cli/commands/tasks.d.ts.map +1 -0
- package/dist/cli/commands/tasks.js +347 -0
- package/dist/cli/commands/tasks.js.map +1 -0
- package/dist/cli/commands/trait.d.ts +10 -0
- package/dist/cli/commands/trait.d.ts.map +1 -0
- package/dist/cli/commands/trait.js +295 -0
- package/dist/cli/commands/trait.js.map +1 -0
- package/dist/cli/commands/validate.d.ts +6 -0
- package/dist/cli/commands/validate.d.ts.map +1 -0
- package/dist/cli/commands/validate.js +626 -0
- package/dist/cli/commands/validate.js.map +1 -0
- package/dist/cli/exit-codes.d.ts +62 -0
- package/dist/cli/exit-codes.d.ts.map +1 -0
- package/dist/cli/exit-codes.js +65 -0
- package/dist/cli/exit-codes.js.map +1 -0
- package/dist/cli/help/content.d.ts +35 -0
- package/dist/cli/help/content.d.ts.map +1 -0
- package/dist/cli/help/content.js +312 -0
- package/dist/cli/help/content.js.map +1 -0
- package/dist/cli/index.d.ts +5 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +85 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/introspection.d.ts +87 -0
- package/dist/cli/introspection.d.ts.map +1 -0
- package/dist/cli/introspection.js +127 -0
- package/dist/cli/introspection.js.map +1 -0
- package/dist/cli/output.d.ts +56 -0
- package/dist/cli/output.d.ts.map +1 -0
- package/dist/cli/output.js +467 -0
- package/dist/cli/output.js.map +1 -0
- package/dist/cli/suggest.d.ts +16 -0
- package/dist/cli/suggest.d.ts.map +1 -0
- package/dist/cli/suggest.js +72 -0
- package/dist/cli/suggest.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/dist/parser/alignment.d.ts +113 -0
- package/dist/parser/alignment.d.ts.map +1 -0
- package/dist/parser/alignment.js +261 -0
- package/dist/parser/alignment.js.map +1 -0
- package/dist/parser/assess.d.ts +81 -0
- package/dist/parser/assess.d.ts.map +1 -0
- package/dist/parser/assess.js +197 -0
- package/dist/parser/assess.js.map +1 -0
- package/dist/parser/convention-validation.d.ts +48 -0
- package/dist/parser/convention-validation.d.ts.map +1 -0
- package/dist/parser/convention-validation.js +167 -0
- package/dist/parser/convention-validation.js.map +1 -0
- package/dist/parser/fix.d.ts +38 -0
- package/dist/parser/fix.d.ts.map +1 -0
- package/dist/parser/fix.js +185 -0
- package/dist/parser/fix.js.map +1 -0
- package/dist/parser/index.d.ts +12 -0
- package/dist/parser/index.d.ts.map +1 -0
- package/dist/parser/index.js +13 -0
- package/dist/parser/index.js.map +1 -0
- package/dist/parser/items.d.ts +138 -0
- package/dist/parser/items.d.ts.map +1 -0
- package/dist/parser/items.js +321 -0
- package/dist/parser/items.js.map +1 -0
- package/dist/parser/meta.d.ts +120 -0
- package/dist/parser/meta.d.ts.map +1 -0
- package/dist/parser/meta.js +441 -0
- package/dist/parser/meta.js.map +1 -0
- package/dist/parser/refs.d.ts +185 -0
- package/dist/parser/refs.d.ts.map +1 -0
- package/dist/parser/refs.js +404 -0
- package/dist/parser/refs.js.map +1 -0
- package/dist/parser/shadow.d.ts +253 -0
- package/dist/parser/shadow.d.ts.map +1 -0
- package/dist/parser/shadow.js +1053 -0
- package/dist/parser/shadow.js.map +1 -0
- package/dist/parser/traits.d.ts +72 -0
- package/dist/parser/traits.d.ts.map +1 -0
- package/dist/parser/traits.js +120 -0
- package/dist/parser/traits.js.map +1 -0
- package/dist/parser/validate.d.ts +89 -0
- package/dist/parser/validate.d.ts.map +1 -0
- package/dist/parser/validate.js +817 -0
- package/dist/parser/validate.js.map +1 -0
- package/dist/parser/yaml.d.ts +326 -0
- package/dist/parser/yaml.d.ts.map +1 -0
- package/dist/parser/yaml.js +1383 -0
- package/dist/parser/yaml.js.map +1 -0
- package/dist/ralph/cli-renderer.d.ts +20 -0
- package/dist/ralph/cli-renderer.d.ts.map +1 -0
- package/dist/ralph/cli-renderer.js +179 -0
- package/dist/ralph/cli-renderer.js.map +1 -0
- package/dist/ralph/events.d.ts +65 -0
- package/dist/ralph/events.d.ts.map +1 -0
- package/dist/ralph/events.js +397 -0
- package/dist/ralph/events.js.map +1 -0
- package/dist/ralph/index.d.ts +8 -0
- package/dist/ralph/index.d.ts.map +1 -0
- package/dist/ralph/index.js +10 -0
- package/dist/ralph/index.js.map +1 -0
- package/dist/schema/common.d.ts +46 -0
- package/dist/schema/common.d.ts.map +1 -0
- package/dist/schema/common.js +71 -0
- package/dist/schema/common.js.map +1 -0
- package/dist/schema/inbox.d.ts +90 -0
- package/dist/schema/inbox.d.ts.map +1 -0
- package/dist/schema/inbox.js +30 -0
- package/dist/schema/inbox.js.map +1 -0
- package/dist/schema/index.d.ts +6 -0
- package/dist/schema/index.d.ts.map +1 -0
- package/dist/schema/index.js +7 -0
- package/dist/schema/index.js.map +1 -0
- package/dist/schema/meta.d.ts +762 -0
- package/dist/schema/meta.d.ts.map +1 -0
- package/dist/schema/meta.js +144 -0
- package/dist/schema/meta.js.map +1 -0
- package/dist/schema/spec.d.ts +912 -0
- package/dist/schema/spec.d.ts.map +1 -0
- package/dist/schema/spec.js +104 -0
- package/dist/schema/spec.js.map +1 -0
- package/dist/schema/task.d.ts +664 -0
- package/dist/schema/task.d.ts.map +1 -0
- package/dist/schema/task.js +130 -0
- package/dist/schema/task.js.map +1 -0
- package/dist/sessions/index.d.ts +11 -0
- package/dist/sessions/index.d.ts.map +1 -0
- package/dist/sessions/index.js +13 -0
- package/dist/sessions/index.js.map +1 -0
- package/dist/sessions/store.d.ts +144 -0
- package/dist/sessions/store.d.ts.map +1 -0
- package/dist/sessions/store.js +325 -0
- package/dist/sessions/store.js.map +1 -0
- package/dist/sessions/types.d.ts +157 -0
- package/dist/sessions/types.d.ts.map +1 -0
- package/dist/sessions/types.js +90 -0
- package/dist/sessions/types.js.map +1 -0
- package/dist/strings/errors.d.ts +420 -0
- package/dist/strings/errors.d.ts.map +1 -0
- package/dist/strings/errors.js +282 -0
- package/dist/strings/errors.js.map +1 -0
- package/dist/strings/guidance.d.ts +65 -0
- package/dist/strings/guidance.d.ts.map +1 -0
- package/dist/strings/guidance.js +66 -0
- package/dist/strings/guidance.js.map +1 -0
- package/dist/strings/index.d.ts +12 -0
- package/dist/strings/index.d.ts.map +1 -0
- package/dist/strings/index.js +12 -0
- package/dist/strings/index.js.map +1 -0
- package/dist/strings/labels.d.ts +74 -0
- package/dist/strings/labels.d.ts.map +1 -0
- package/dist/strings/labels.js +75 -0
- package/dist/strings/labels.js.map +1 -0
- package/dist/strings/validation.d.ts +126 -0
- package/dist/strings/validation.d.ts.map +1 -0
- package/dist/strings/validation.js +135 -0
- package/dist/strings/validation.js.map +1 -0
- package/dist/utils/commit.d.ts +23 -0
- package/dist/utils/commit.d.ts.map +1 -0
- package/dist/utils/commit.js +67 -0
- package/dist/utils/commit.js.map +1 -0
- package/dist/utils/git.d.ts +57 -0
- package/dist/utils/git.d.ts.map +1 -0
- package/dist/utils/git.js +192 -0
- package/dist/utils/git.js.map +1 -0
- package/dist/utils/grep.d.ts +28 -0
- package/dist/utils/grep.d.ts.map +1 -0
- package/dist/utils/grep.js +86 -0
- package/dist/utils/grep.js.map +1 -0
- package/dist/utils/index.d.ts +8 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +6 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/time.d.ts +18 -0
- package/dist/utils/time.d.ts.map +1 -0
- package/dist/utils/time.js +61 -0
- package/dist/utils/time.js.map +1 -0
- 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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"}
|