@soleri/core 2.1.0 → 2.4.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 (207) hide show
  1. package/dist/brain/brain.d.ts +3 -1
  2. package/dist/brain/brain.d.ts.map +1 -1
  3. package/dist/brain/brain.js +60 -4
  4. package/dist/brain/brain.js.map +1 -1
  5. package/dist/brain/intelligence.d.ts +36 -1
  6. package/dist/brain/intelligence.d.ts.map +1 -1
  7. package/dist/brain/intelligence.js +119 -14
  8. package/dist/brain/intelligence.js.map +1 -1
  9. package/dist/brain/types.d.ts +32 -0
  10. package/dist/brain/types.d.ts.map +1 -1
  11. package/dist/control/identity-manager.d.ts +22 -0
  12. package/dist/control/identity-manager.d.ts.map +1 -0
  13. package/dist/control/identity-manager.js +233 -0
  14. package/dist/control/identity-manager.js.map +1 -0
  15. package/dist/control/intent-router.d.ts +32 -0
  16. package/dist/control/intent-router.d.ts.map +1 -0
  17. package/dist/control/intent-router.js +242 -0
  18. package/dist/control/intent-router.js.map +1 -0
  19. package/dist/control/types.d.ts +68 -0
  20. package/dist/control/types.d.ts.map +1 -0
  21. package/dist/control/types.js +9 -0
  22. package/dist/control/types.js.map +1 -0
  23. package/dist/curator/curator.d.ts +29 -0
  24. package/dist/curator/curator.d.ts.map +1 -1
  25. package/dist/curator/curator.js +135 -0
  26. package/dist/curator/curator.js.map +1 -1
  27. package/dist/facades/types.d.ts +1 -1
  28. package/dist/governance/governance.d.ts +42 -0
  29. package/dist/governance/governance.d.ts.map +1 -0
  30. package/dist/governance/governance.js +488 -0
  31. package/dist/governance/governance.js.map +1 -0
  32. package/dist/governance/index.d.ts +3 -0
  33. package/dist/governance/index.d.ts.map +1 -0
  34. package/dist/governance/index.js +2 -0
  35. package/dist/governance/index.js.map +1 -0
  36. package/dist/governance/types.d.ts +102 -0
  37. package/dist/governance/types.d.ts.map +1 -0
  38. package/dist/governance/types.js +3 -0
  39. package/dist/governance/types.js.map +1 -0
  40. package/dist/index.d.ts +32 -3
  41. package/dist/index.d.ts.map +1 -1
  42. package/dist/index.js +29 -1
  43. package/dist/index.js.map +1 -1
  44. package/dist/logging/logger.d.ts +37 -0
  45. package/dist/logging/logger.d.ts.map +1 -0
  46. package/dist/logging/logger.js +145 -0
  47. package/dist/logging/logger.js.map +1 -0
  48. package/dist/logging/types.d.ts +19 -0
  49. package/dist/logging/types.d.ts.map +1 -0
  50. package/dist/logging/types.js +2 -0
  51. package/dist/logging/types.js.map +1 -0
  52. package/dist/loop/loop-manager.d.ts +49 -0
  53. package/dist/loop/loop-manager.d.ts.map +1 -0
  54. package/dist/loop/loop-manager.js +105 -0
  55. package/dist/loop/loop-manager.js.map +1 -0
  56. package/dist/loop/types.d.ts +35 -0
  57. package/dist/loop/types.d.ts.map +1 -0
  58. package/dist/loop/types.js +8 -0
  59. package/dist/loop/types.js.map +1 -0
  60. package/dist/planning/gap-analysis.d.ts +29 -0
  61. package/dist/planning/gap-analysis.d.ts.map +1 -0
  62. package/dist/planning/gap-analysis.js +265 -0
  63. package/dist/planning/gap-analysis.js.map +1 -0
  64. package/dist/planning/gap-types.d.ts +29 -0
  65. package/dist/planning/gap-types.d.ts.map +1 -0
  66. package/dist/planning/gap-types.js +28 -0
  67. package/dist/planning/gap-types.js.map +1 -0
  68. package/dist/planning/planner.d.ts +150 -1
  69. package/dist/planning/planner.d.ts.map +1 -1
  70. package/dist/planning/planner.js +365 -2
  71. package/dist/planning/planner.js.map +1 -1
  72. package/dist/project/project-registry.d.ts +79 -0
  73. package/dist/project/project-registry.d.ts.map +1 -0
  74. package/dist/project/project-registry.js +276 -0
  75. package/dist/project/project-registry.js.map +1 -0
  76. package/dist/project/types.d.ts +28 -0
  77. package/dist/project/types.d.ts.map +1 -0
  78. package/dist/project/types.js +5 -0
  79. package/dist/project/types.js.map +1 -0
  80. package/dist/runtime/admin-extra-ops.d.ts +13 -0
  81. package/dist/runtime/admin-extra-ops.d.ts.map +1 -0
  82. package/dist/runtime/admin-extra-ops.js +284 -0
  83. package/dist/runtime/admin-extra-ops.js.map +1 -0
  84. package/dist/runtime/admin-ops.d.ts +15 -0
  85. package/dist/runtime/admin-ops.d.ts.map +1 -0
  86. package/dist/runtime/admin-ops.js +322 -0
  87. package/dist/runtime/admin-ops.js.map +1 -0
  88. package/dist/runtime/capture-ops.d.ts +15 -0
  89. package/dist/runtime/capture-ops.d.ts.map +1 -0
  90. package/dist/runtime/capture-ops.js +345 -0
  91. package/dist/runtime/capture-ops.js.map +1 -0
  92. package/dist/runtime/core-ops.d.ts +7 -3
  93. package/dist/runtime/core-ops.d.ts.map +1 -1
  94. package/dist/runtime/core-ops.js +474 -8
  95. package/dist/runtime/core-ops.js.map +1 -1
  96. package/dist/runtime/curator-extra-ops.d.ts +9 -0
  97. package/dist/runtime/curator-extra-ops.d.ts.map +1 -0
  98. package/dist/runtime/curator-extra-ops.js +59 -0
  99. package/dist/runtime/curator-extra-ops.js.map +1 -0
  100. package/dist/runtime/domain-ops.d.ts.map +1 -1
  101. package/dist/runtime/domain-ops.js +59 -13
  102. package/dist/runtime/domain-ops.js.map +1 -1
  103. package/dist/runtime/grading-ops.d.ts +14 -0
  104. package/dist/runtime/grading-ops.d.ts.map +1 -0
  105. package/dist/runtime/grading-ops.js +105 -0
  106. package/dist/runtime/grading-ops.js.map +1 -0
  107. package/dist/runtime/loop-ops.d.ts +13 -0
  108. package/dist/runtime/loop-ops.d.ts.map +1 -0
  109. package/dist/runtime/loop-ops.js +179 -0
  110. package/dist/runtime/loop-ops.js.map +1 -0
  111. package/dist/runtime/memory-cross-project-ops.d.ts +12 -0
  112. package/dist/runtime/memory-cross-project-ops.d.ts.map +1 -0
  113. package/dist/runtime/memory-cross-project-ops.js +165 -0
  114. package/dist/runtime/memory-cross-project-ops.js.map +1 -0
  115. package/dist/runtime/memory-extra-ops.d.ts +13 -0
  116. package/dist/runtime/memory-extra-ops.d.ts.map +1 -0
  117. package/dist/runtime/memory-extra-ops.js +173 -0
  118. package/dist/runtime/memory-extra-ops.js.map +1 -0
  119. package/dist/runtime/orchestrate-ops.d.ts +17 -0
  120. package/dist/runtime/orchestrate-ops.d.ts.map +1 -0
  121. package/dist/runtime/orchestrate-ops.js +240 -0
  122. package/dist/runtime/orchestrate-ops.js.map +1 -0
  123. package/dist/runtime/planning-extra-ops.d.ts +17 -0
  124. package/dist/runtime/planning-extra-ops.d.ts.map +1 -0
  125. package/dist/runtime/planning-extra-ops.js +300 -0
  126. package/dist/runtime/planning-extra-ops.js.map +1 -0
  127. package/dist/runtime/project-ops.d.ts +15 -0
  128. package/dist/runtime/project-ops.d.ts.map +1 -0
  129. package/dist/runtime/project-ops.js +181 -0
  130. package/dist/runtime/project-ops.js.map +1 -0
  131. package/dist/runtime/runtime.d.ts.map +1 -1
  132. package/dist/runtime/runtime.js +44 -1
  133. package/dist/runtime/runtime.js.map +1 -1
  134. package/dist/runtime/types.d.ts +21 -0
  135. package/dist/runtime/types.d.ts.map +1 -1
  136. package/dist/runtime/vault-extra-ops.d.ts +9 -0
  137. package/dist/runtime/vault-extra-ops.d.ts.map +1 -0
  138. package/dist/runtime/vault-extra-ops.js +195 -0
  139. package/dist/runtime/vault-extra-ops.js.map +1 -0
  140. package/dist/telemetry/telemetry.d.ts +48 -0
  141. package/dist/telemetry/telemetry.d.ts.map +1 -0
  142. package/dist/telemetry/telemetry.js +87 -0
  143. package/dist/telemetry/telemetry.js.map +1 -0
  144. package/dist/vault/vault.d.ts +94 -0
  145. package/dist/vault/vault.d.ts.map +1 -1
  146. package/dist/vault/vault.js +340 -1
  147. package/dist/vault/vault.js.map +1 -1
  148. package/package.json +1 -1
  149. package/src/__tests__/admin-extra-ops.test.ts +420 -0
  150. package/src/__tests__/admin-ops.test.ts +271 -0
  151. package/src/__tests__/brain-intelligence.test.ts +205 -0
  152. package/src/__tests__/brain.test.ts +131 -0
  153. package/src/__tests__/capture-ops.test.ts +509 -0
  154. package/src/__tests__/core-ops.test.ts +266 -2
  155. package/src/__tests__/curator-extra-ops.test.ts +359 -0
  156. package/src/__tests__/domain-ops.test.ts +66 -0
  157. package/src/__tests__/governance.test.ts +522 -0
  158. package/src/__tests__/grading-ops.test.ts +340 -0
  159. package/src/__tests__/identity-manager.test.ts +243 -0
  160. package/src/__tests__/intent-router.test.ts +222 -0
  161. package/src/__tests__/logger.test.ts +200 -0
  162. package/src/__tests__/loop-ops.test.ts +398 -0
  163. package/src/__tests__/memory-cross-project-ops.test.ts +246 -0
  164. package/src/__tests__/memory-extra-ops.test.ts +352 -0
  165. package/src/__tests__/orchestrate-ops.test.ts +284 -0
  166. package/src/__tests__/planner.test.ts +331 -0
  167. package/src/__tests__/planning-extra-ops.test.ts +548 -0
  168. package/src/__tests__/project-ops.test.ts +367 -0
  169. package/src/__tests__/vault-extra-ops.test.ts +407 -0
  170. package/src/brain/brain.ts +114 -7
  171. package/src/brain/intelligence.ts +179 -10
  172. package/src/brain/types.ts +38 -0
  173. package/src/control/identity-manager.ts +354 -0
  174. package/src/control/intent-router.ts +326 -0
  175. package/src/control/types.ts +102 -0
  176. package/src/curator/curator.ts +213 -0
  177. package/src/governance/governance.ts +698 -0
  178. package/src/governance/index.ts +18 -0
  179. package/src/governance/types.ts +111 -0
  180. package/src/index.ts +102 -2
  181. package/src/logging/logger.ts +154 -0
  182. package/src/logging/types.ts +21 -0
  183. package/src/loop/loop-manager.ts +130 -0
  184. package/src/loop/types.ts +44 -0
  185. package/src/planning/gap-analysis.ts +506 -0
  186. package/src/planning/gap-types.ts +58 -0
  187. package/src/planning/planner.ts +478 -2
  188. package/src/project/project-registry.ts +358 -0
  189. package/src/project/types.ts +31 -0
  190. package/src/runtime/admin-extra-ops.ts +307 -0
  191. package/src/runtime/admin-ops.ts +329 -0
  192. package/src/runtime/capture-ops.ts +385 -0
  193. package/src/runtime/core-ops.ts +535 -7
  194. package/src/runtime/curator-extra-ops.ts +71 -0
  195. package/src/runtime/domain-ops.ts +65 -13
  196. package/src/runtime/grading-ops.ts +121 -0
  197. package/src/runtime/loop-ops.ts +194 -0
  198. package/src/runtime/memory-cross-project-ops.ts +192 -0
  199. package/src/runtime/memory-extra-ops.ts +186 -0
  200. package/src/runtime/orchestrate-ops.ts +272 -0
  201. package/src/runtime/planning-extra-ops.ts +327 -0
  202. package/src/runtime/project-ops.ts +196 -0
  203. package/src/runtime/runtime.ts +49 -1
  204. package/src/runtime/types.ts +21 -0
  205. package/src/runtime/vault-extra-ops.ts +225 -0
  206. package/src/telemetry/telemetry.ts +118 -0
  207. package/src/vault/vault.ts +412 -1
@@ -0,0 +1,276 @@
1
+ /**
2
+ * Project Registry — SQLite-backed registry for tracking projects,
3
+ * rules, and cross-project links.
4
+ *
5
+ * Uses the Vault's underlying SQLite database via `vault.getDb()`.
6
+ * Tables are created lazily on first access.
7
+ */
8
+ /**
9
+ * Generate a deterministic project ID from a filesystem path.
10
+ */
11
+ function pathToId(path) {
12
+ return path.replace(/[^a-z0-9]/gi, '-').toLowerCase().replace(/-+/g, '-').replace(/^-|-$/g, '');
13
+ }
14
+ function rowToProject(row) {
15
+ return {
16
+ id: row.id,
17
+ path: row.path,
18
+ name: row.name ?? undefined,
19
+ registeredAt: row.registered_at,
20
+ lastAccessedAt: row.last_accessed_at,
21
+ metadata: JSON.parse(row.metadata || '{}'),
22
+ };
23
+ }
24
+ function rowToRule(row) {
25
+ return {
26
+ id: row.id,
27
+ projectId: row.project_id,
28
+ category: row.category,
29
+ text: row.text,
30
+ priority: row.priority,
31
+ createdAt: row.created_at,
32
+ };
33
+ }
34
+ function rowToLink(row) {
35
+ return {
36
+ id: row.id,
37
+ sourceProjectId: row.source_project_id,
38
+ targetProjectId: row.target_project_id,
39
+ linkType: row.link_type,
40
+ createdAt: row.created_at,
41
+ };
42
+ }
43
+ export class ProjectRegistry {
44
+ db;
45
+ constructor(db) {
46
+ this.db = db;
47
+ this.initTables();
48
+ }
49
+ initTables() {
50
+ this.db.exec(`
51
+ CREATE TABLE IF NOT EXISTS registered_projects (
52
+ id TEXT PRIMARY KEY,
53
+ path TEXT UNIQUE NOT NULL,
54
+ name TEXT,
55
+ registered_at INTEGER NOT NULL,
56
+ last_accessed_at INTEGER NOT NULL,
57
+ metadata TEXT DEFAULT '{}'
58
+ );
59
+
60
+ CREATE TABLE IF NOT EXISTS project_rules (
61
+ id TEXT PRIMARY KEY,
62
+ project_id TEXT NOT NULL,
63
+ category TEXT NOT NULL,
64
+ text TEXT NOT NULL,
65
+ priority INTEGER DEFAULT 0,
66
+ created_at INTEGER NOT NULL,
67
+ FOREIGN KEY (project_id) REFERENCES registered_projects(id)
68
+ );
69
+
70
+ CREATE TABLE IF NOT EXISTS project_links (
71
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
72
+ source_project_id TEXT NOT NULL,
73
+ target_project_id TEXT NOT NULL,
74
+ link_type TEXT NOT NULL,
75
+ created_at INTEGER NOT NULL,
76
+ UNIQUE(source_project_id, target_project_id, link_type)
77
+ );
78
+ `);
79
+ }
80
+ /**
81
+ * Register (upsert) a project. Updates lastAccessedAt on re-register.
82
+ */
83
+ register(path, name, metadata) {
84
+ const id = pathToId(path);
85
+ const now = Date.now();
86
+ const existing = this.db
87
+ .prepare('SELECT * FROM registered_projects WHERE id = ?')
88
+ .get(id);
89
+ if (existing) {
90
+ // Update lastAccessedAt, and optionally name/metadata if provided
91
+ const newName = name ?? existing.name;
92
+ const newMetadata = metadata ? JSON.stringify(metadata) : existing.metadata;
93
+ this.db
94
+ .prepare('UPDATE registered_projects SET last_accessed_at = ?, name = ?, metadata = ? WHERE id = ?')
95
+ .run(now, newName, newMetadata, id);
96
+ return rowToProject({
97
+ ...existing,
98
+ last_accessed_at: now,
99
+ name: newName,
100
+ metadata: newMetadata,
101
+ });
102
+ }
103
+ const row = {
104
+ id,
105
+ path,
106
+ name: name ?? null,
107
+ registered_at: now,
108
+ last_accessed_at: now,
109
+ metadata: JSON.stringify(metadata ?? {}),
110
+ };
111
+ this.db
112
+ .prepare('INSERT INTO registered_projects (id, path, name, registered_at, last_accessed_at, metadata) VALUES (?, ?, ?, ?, ?, ?)')
113
+ .run(row.id, row.path, row.name, row.registered_at, row.last_accessed_at, row.metadata);
114
+ return rowToProject(row);
115
+ }
116
+ /**
117
+ * Get a project by ID.
118
+ */
119
+ get(projectId) {
120
+ const row = this.db
121
+ .prepare('SELECT * FROM registered_projects WHERE id = ?')
122
+ .get(projectId);
123
+ return row ? rowToProject(row) : null;
124
+ }
125
+ /**
126
+ * Get a project by its filesystem path.
127
+ */
128
+ getByPath(path) {
129
+ const row = this.db
130
+ .prepare('SELECT * FROM registered_projects WHERE path = ?')
131
+ .get(path);
132
+ return row ? rowToProject(row) : null;
133
+ }
134
+ /**
135
+ * List all registered projects.
136
+ */
137
+ list() {
138
+ const rows = this.db
139
+ .prepare('SELECT * FROM registered_projects ORDER BY last_accessed_at DESC')
140
+ .all();
141
+ return rows.map(rowToProject);
142
+ }
143
+ /**
144
+ * Unregister a project by ID. Also removes associated rules and links.
145
+ */
146
+ unregister(projectId) {
147
+ const result = this.db.transaction(() => {
148
+ this.db.prepare('DELETE FROM project_rules WHERE project_id = ?').run(projectId);
149
+ this.db
150
+ .prepare('DELETE FROM project_links WHERE source_project_id = ? OR target_project_id = ?')
151
+ .run(projectId, projectId);
152
+ return this.db.prepare('DELETE FROM registered_projects WHERE id = ?').run(projectId).changes > 0;
153
+ })();
154
+ return result;
155
+ }
156
+ /**
157
+ * Update the lastAccessedAt timestamp for a project.
158
+ */
159
+ touch(projectId) {
160
+ this.db
161
+ .prepare('UPDATE registered_projects SET last_accessed_at = ? WHERE id = ?')
162
+ .run(Date.now(), projectId);
163
+ }
164
+ // ─── Rules ──────────────────────────────────────────────────────────
165
+ /**
166
+ * Add a rule to a project.
167
+ */
168
+ addRule(projectId, rule) {
169
+ const id = `rule-${projectId}-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
170
+ const now = Date.now();
171
+ this.db
172
+ .prepare('INSERT INTO project_rules (id, project_id, category, text, priority, created_at) VALUES (?, ?, ?, ?, ?, ?)')
173
+ .run(id, projectId, rule.category, rule.text, rule.priority, now);
174
+ return {
175
+ id,
176
+ projectId,
177
+ category: rule.category,
178
+ text: rule.text,
179
+ priority: rule.priority,
180
+ createdAt: now,
181
+ };
182
+ }
183
+ /**
184
+ * Get all rules for a project.
185
+ */
186
+ getRules(projectId) {
187
+ const rows = this.db
188
+ .prepare('SELECT * FROM project_rules WHERE project_id = ? ORDER BY priority DESC, created_at ASC')
189
+ .all(projectId);
190
+ return rows.map(rowToRule);
191
+ }
192
+ /**
193
+ * Remove a rule by ID.
194
+ */
195
+ removeRule(ruleId) {
196
+ return this.db.prepare('DELETE FROM project_rules WHERE id = ?').run(ruleId).changes > 0;
197
+ }
198
+ /**
199
+ * List all projects with their rules.
200
+ */
201
+ listRulesAll() {
202
+ const projects = this.list();
203
+ return projects.map((project) => ({
204
+ project,
205
+ rules: this.getRules(project.id),
206
+ }));
207
+ }
208
+ // ─── Links ──────────────────────────────────────────────────────────
209
+ /**
210
+ * Link two projects.
211
+ */
212
+ link(sourceId, targetId, linkType) {
213
+ const now = Date.now();
214
+ const info = this.db
215
+ .prepare('INSERT OR IGNORE INTO project_links (source_project_id, target_project_id, link_type, created_at) VALUES (?, ?, ?, ?)')
216
+ .run(sourceId, targetId, linkType, now);
217
+ // If insert was ignored (duplicate), fetch existing
218
+ if (info.changes === 0) {
219
+ const existing = this.db
220
+ .prepare('SELECT * FROM project_links WHERE source_project_id = ? AND target_project_id = ? AND link_type = ?')
221
+ .get(sourceId, targetId, linkType);
222
+ return rowToLink(existing);
223
+ }
224
+ return {
225
+ id: Number(info.lastInsertRowid),
226
+ sourceProjectId: sourceId,
227
+ targetProjectId: targetId,
228
+ linkType,
229
+ createdAt: now,
230
+ };
231
+ }
232
+ /**
233
+ * Unlink two projects. If linkType is omitted, removes all links between them.
234
+ * Returns count of links removed.
235
+ */
236
+ unlink(sourceId, targetId, linkType) {
237
+ if (linkType) {
238
+ return this.db
239
+ .prepare('DELETE FROM project_links WHERE source_project_id = ? AND target_project_id = ? AND link_type = ?')
240
+ .run(sourceId, targetId, linkType).changes;
241
+ }
242
+ return this.db
243
+ .prepare('DELETE FROM project_links WHERE source_project_id = ? AND target_project_id = ?')
244
+ .run(sourceId, targetId).changes;
245
+ }
246
+ /**
247
+ * Get all links for a project (both outgoing and incoming).
248
+ */
249
+ getLinks(projectId) {
250
+ const rows = this.db
251
+ .prepare('SELECT * FROM project_links WHERE source_project_id = ? OR target_project_id = ? ORDER BY created_at DESC')
252
+ .all(projectId, projectId);
253
+ return rows.map(rowToLink);
254
+ }
255
+ /**
256
+ * Get linked projects with details — returns project info, link type, and direction.
257
+ */
258
+ getLinkedProjects(projectId) {
259
+ const links = this.getLinks(projectId);
260
+ const results = [];
261
+ for (const link of links) {
262
+ const isOutgoing = link.sourceProjectId === projectId;
263
+ const otherProjectId = isOutgoing ? link.targetProjectId : link.sourceProjectId;
264
+ const project = this.get(otherProjectId);
265
+ if (project) {
266
+ results.push({
267
+ project,
268
+ linkType: link.linkType,
269
+ direction: isOutgoing ? 'outgoing' : 'incoming',
270
+ });
271
+ }
272
+ }
273
+ return results;
274
+ }
275
+ }
276
+ //# sourceMappingURL=project-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project-registry.js","sourceRoot":"","sources":["../../src/project/project-registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ /**
2
+ * Project registry types — tracks projects, rules, and cross-project links.
3
+ */
4
+ export interface RegisteredProject {
5
+ id: string;
6
+ path: string;
7
+ name?: string;
8
+ registeredAt: number;
9
+ lastAccessedAt: number;
10
+ metadata?: Record<string, unknown>;
11
+ }
12
+ export interface ProjectRule {
13
+ id: string;
14
+ projectId: string;
15
+ category: 'behavior' | 'preference' | 'restriction' | 'convention';
16
+ text: string;
17
+ priority: number;
18
+ createdAt: number;
19
+ }
20
+ export type LinkType = 'related' | 'parent' | 'child' | 'fork';
21
+ export interface ProjectLink {
22
+ id: number;
23
+ sourceProjectId: string;
24
+ targetProjectId: string;
25
+ linkType: LinkType;
26
+ createdAt: number;
27
+ }
28
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/project/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,UAAU,GAAG,YAAY,GAAG,aAAa,GAAG,YAAY,CAAC;IACnE,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,CAAC;AAE/D,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,eAAe,EAAE,MAAM,CAAC;IACxB,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,QAAQ,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Project registry types — tracks projects, rules, and cross-project links.
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/project/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Extended admin operations — 10 ops for production readiness.
3
+ *
4
+ * Groups: telemetry (3), permissions (1), vault analytics (1),
5
+ * search insights (1), module status (1), env (1), gc (1), export config (1).
6
+ */
7
+ import type { OpDefinition } from '../facades/types.js';
8
+ import type { AgentRuntime } from './types.js';
9
+ /**
10
+ * Create 10 extended admin operations for production observability.
11
+ */
12
+ export declare function createAdminExtraOps(runtime: AgentRuntime): OpDefinition[];
13
+ //# sourceMappingURL=admin-extra-ops.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-extra-ops.d.ts","sourceRoot":"","sources":["../../src/runtime/admin-extra-ops.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAI/C;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,YAAY,GAAG,YAAY,EAAE,CAkSzE"}
@@ -0,0 +1,284 @@
1
+ /**
2
+ * Extended admin operations — 10 ops for production readiness.
3
+ *
4
+ * Groups: telemetry (3), permissions (1), vault analytics (1),
5
+ * search insights (1), module status (1), env (1), gc (1), export config (1).
6
+ */
7
+ import { z } from 'zod';
8
+ /**
9
+ * Create 10 extended admin operations for production observability.
10
+ */
11
+ export function createAdminExtraOps(runtime) {
12
+ const { vault, brain, cognee, telemetry } = runtime;
13
+ // In-memory permission level — default 'moderate'
14
+ let permissionLevel = 'moderate';
15
+ return [
16
+ // ─── Telemetry ──────────────────────────────────────────────────
17
+ {
18
+ name: 'admin_telemetry',
19
+ description: 'Get telemetry stats — call counts, success rate, durations, slowest ops.',
20
+ auth: 'read',
21
+ handler: async () => {
22
+ return telemetry.getStats();
23
+ },
24
+ },
25
+ {
26
+ name: 'admin_telemetry_recent',
27
+ description: 'Get recent facade calls — newest first.',
28
+ auth: 'read',
29
+ schema: z.object({
30
+ limit: z.number().optional().default(50),
31
+ }),
32
+ handler: async (params) => {
33
+ const limit = params.limit ?? 50;
34
+ return telemetry.getRecent(limit);
35
+ },
36
+ },
37
+ {
38
+ name: 'admin_telemetry_reset',
39
+ description: 'Reset telemetry counters — clears all recorded calls.',
40
+ auth: 'write',
41
+ handler: async () => {
42
+ telemetry.reset();
43
+ return { reset: true, message: 'Telemetry counters cleared.' };
44
+ },
45
+ },
46
+ // ─── Permissions ────────────────────────────────────────────────
47
+ {
48
+ name: 'admin_permissions',
49
+ description: 'Get or set auth enforcement policy (strict, moderate, permissive).',
50
+ auth: 'write',
51
+ schema: z.object({
52
+ action: z.enum(['get', 'set']),
53
+ level: z.enum(['strict', 'moderate', 'permissive']).optional(),
54
+ }),
55
+ handler: async (params) => {
56
+ const action = params.action;
57
+ if (action === 'set') {
58
+ const level = params.level;
59
+ if (level) {
60
+ permissionLevel = level;
61
+ }
62
+ }
63
+ return { level: permissionLevel };
64
+ },
65
+ },
66
+ // ─── Vault Analytics ────────────────────────────────────────────
67
+ {
68
+ name: 'admin_vault_analytics',
69
+ description: 'Vault usage analytics — entries by domain, type, age, tag coverage.',
70
+ auth: 'read',
71
+ handler: async () => {
72
+ try {
73
+ const db = vault.getDb();
74
+ const now = Math.floor(Date.now() / 1000);
75
+ const DAY = 86400;
76
+ // Entries by domain
77
+ const byDomain = db
78
+ .prepare('SELECT domain, COUNT(*) as count FROM entries GROUP BY domain')
79
+ .all();
80
+ // Entries by type
81
+ const byType = db
82
+ .prepare('SELECT type, COUNT(*) as count FROM entries GROUP BY type')
83
+ .all();
84
+ // Entries by age bucket
85
+ const ageBuckets = {
86
+ '0-7d': 0,
87
+ '7-30d': 0,
88
+ '30-90d': 0,
89
+ '90d+': 0,
90
+ };
91
+ const rows = db
92
+ .prepare('SELECT created_at FROM entries')
93
+ .all();
94
+ for (const row of rows) {
95
+ const ageSeconds = now - row.created_at;
96
+ if (ageSeconds <= 7 * DAY)
97
+ ageBuckets['0-7d']++;
98
+ else if (ageSeconds <= 30 * DAY)
99
+ ageBuckets['7-30d']++;
100
+ else if (ageSeconds <= 90 * DAY)
101
+ ageBuckets['30-90d']++;
102
+ else
103
+ ageBuckets['90d+']++;
104
+ }
105
+ // Average tags per entry
106
+ const tagRows = db
107
+ .prepare('SELECT tags FROM entries')
108
+ .all();
109
+ let totalTags = 0;
110
+ let noTags = 0;
111
+ let noDescription = 0;
112
+ for (const row of tagRows) {
113
+ try {
114
+ const tags = JSON.parse(row.tags);
115
+ totalTags += tags.length;
116
+ if (tags.length === 0)
117
+ noTags++;
118
+ }
119
+ catch {
120
+ noTags++;
121
+ }
122
+ }
123
+ // Entries without descriptions
124
+ const noDescResult = db
125
+ .prepare("SELECT COUNT(*) as count FROM entries WHERE description IS NULL OR description = ''")
126
+ .get();
127
+ noDescription = noDescResult?.count ?? 0;
128
+ const totalEntries = tagRows.length;
129
+ return {
130
+ totalEntries,
131
+ byDomain: Object.fromEntries(byDomain.map((r) => [r.domain, r.count])),
132
+ byType: Object.fromEntries(byType.map((r) => [r.type, r.count])),
133
+ byAge: ageBuckets,
134
+ avgTagsPerEntry: totalEntries > 0 ? Math.round((totalTags / totalEntries) * 10) / 10 : 0,
135
+ entriesWithoutTags: noTags,
136
+ entriesWithoutDescription: noDescription,
137
+ };
138
+ }
139
+ catch (err) {
140
+ return { error: 'Failed to compute vault analytics', detail: err instanceof Error ? err.message : String(err) };
141
+ }
142
+ },
143
+ },
144
+ // ─── Search Insights ────────────────────────────────────────────
145
+ {
146
+ name: 'admin_search_insights',
147
+ description: 'Search miss tracking — feedback stats, miss rate, top missed queries.',
148
+ auth: 'read',
149
+ handler: async () => {
150
+ try {
151
+ const feedbackStats = brain.getFeedbackStats();
152
+ const total = feedbackStats.total;
153
+ const rejected = feedbackStats.byAction.dismissed ?? 0;
154
+ const failed = feedbackStats.byAction.failed ?? 0;
155
+ const missCount = rejected + failed;
156
+ const missRate = total > 0 ? Math.round((missCount / total) * 1000) / 1000 : 0;
157
+ // Top missed queries — get recent feedback with 'dismissed' or 'failed' action
158
+ const db = vault.getDb();
159
+ const missedQueries = db
160
+ .prepare("SELECT query, COUNT(*) as count FROM brain_feedback WHERE action IN ('dismissed', 'failed') GROUP BY query ORDER BY count DESC LIMIT 10")
161
+ .all();
162
+ return {
163
+ totalFeedback: total,
164
+ missRate,
165
+ missCount,
166
+ topMissedQueries: missedQueries,
167
+ byAction: feedbackStats.byAction,
168
+ };
169
+ }
170
+ catch (err) {
171
+ return {
172
+ totalFeedback: 0,
173
+ missRate: 0,
174
+ missCount: 0,
175
+ topMissedQueries: [],
176
+ byAction: {},
177
+ note: 'No feedback data available',
178
+ };
179
+ }
180
+ },
181
+ },
182
+ // ─── Module Status ──────────────────────────────────────────────
183
+ {
184
+ name: 'admin_module_status',
185
+ description: 'Status of all runtime modules — check each is initialized.',
186
+ auth: 'read',
187
+ handler: async () => {
188
+ const cogneeStatus = cognee.getStatus();
189
+ const llmAvailable = runtime.llmClient.isAvailable();
190
+ const loopStatus = runtime.loop.getStatus();
191
+ return {
192
+ vault: true,
193
+ brain: true,
194
+ planner: true,
195
+ curator: runtime.curator.getStatus().initialized,
196
+ governance: true,
197
+ cognee: { available: cogneeStatus?.available ?? false },
198
+ loop: { active: loopStatus !== null },
199
+ llm: {
200
+ openai: llmAvailable.openai,
201
+ anthropic: llmAvailable.anthropic,
202
+ },
203
+ };
204
+ },
205
+ },
206
+ // ─── Environment ────────────────────────────────────────────────
207
+ {
208
+ name: 'admin_env',
209
+ description: 'Safe environment info — node version, platform, memory usage. No secrets.',
210
+ auth: 'read',
211
+ handler: async () => {
212
+ return {
213
+ nodeVersion: process.version,
214
+ platform: process.platform,
215
+ arch: process.arch,
216
+ pid: process.pid,
217
+ memoryUsage: process.memoryUsage(),
218
+ cwd: process.cwd(),
219
+ };
220
+ },
221
+ },
222
+ // ─── Garbage Collection ─────────────────────────────────────────
223
+ {
224
+ name: 'admin_gc',
225
+ description: 'Trigger garbage collection on in-memory caches — brain, cognee, telemetry.',
226
+ auth: 'write',
227
+ handler: async () => {
228
+ const cleared = [];
229
+ try {
230
+ brain.rebuildVocabulary();
231
+ cleared.push('brain');
232
+ }
233
+ catch {
234
+ // Brain rebuild failed — graceful degradation
235
+ }
236
+ try {
237
+ cognee.resetPendingCognify();
238
+ cleared.push('cognee');
239
+ }
240
+ catch {
241
+ // Cognee reset failed — graceful degradation
242
+ }
243
+ try {
244
+ telemetry.reset();
245
+ cleared.push('telemetry');
246
+ }
247
+ catch {
248
+ // Telemetry reset failed — graceful degradation
249
+ }
250
+ return { cleared };
251
+ },
252
+ },
253
+ // ─── Export Config ──────────────────────────────────────────────
254
+ {
255
+ name: 'admin_export_config',
256
+ description: 'Export full runtime config — agent ID, paths, log level. No secrets.',
257
+ auth: 'read',
258
+ handler: async () => {
259
+ const { agentId, vaultPath, plansPath, logLevel } = runtime.config;
260
+ return {
261
+ agentId,
262
+ vaultPath: vaultPath ?? null,
263
+ plansPath: plansPath ?? null,
264
+ logLevel: logLevel ?? 'info',
265
+ modules: [
266
+ 'vault',
267
+ 'brain',
268
+ 'brainIntelligence',
269
+ 'planner',
270
+ 'curator',
271
+ 'governance',
272
+ 'cognee',
273
+ 'loop',
274
+ 'identityManager',
275
+ 'intentRouter',
276
+ 'llmClient',
277
+ 'telemetry',
278
+ ],
279
+ };
280
+ },
281
+ },
282
+ ];
283
+ }
284
+ //# sourceMappingURL=admin-extra-ops.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-extra-ops.js","sourceRoot":"","sources":["../../src/runtime/admin-extra-ops.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Admin / infrastructure operations — 8 ops for agent self-management.
3
+ *
4
+ * These ops let agents introspect their own health, configuration, and
5
+ * runtime state. No new modules needed — uses existing runtime parts.
6
+ */
7
+ import type { OpDefinition } from '../facades/types.js';
8
+ import type { AgentRuntime } from './types.js';
9
+ /**
10
+ * Create the 8 admin/infrastructure operations for an agent runtime.
11
+ *
12
+ * Groups: health (1), introspection (4), diagnostics (2), mutation (1).
13
+ */
14
+ export declare function createAdminOps(runtime: AgentRuntime): OpDefinition[];
15
+ //# sourceMappingURL=admin-ops.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin-ops.d.ts","sourceRoot":"","sources":["../../src/runtime/admin-ops.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AA0B/C;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,YAAY,GAAG,YAAY,EAAE,CAwQpE"}