aura-code 0.3.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 (288) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +137 -0
  3. package/dist/agent/context.d.ts +13 -0
  4. package/dist/agent/context.js +183 -0
  5. package/dist/agent/context.js.map +1 -0
  6. package/dist/agent/loop.d.ts +60 -0
  7. package/dist/agent/loop.js +228 -0
  8. package/dist/agent/loop.js.map +1 -0
  9. package/dist/agent/session-store.d.ts +30 -0
  10. package/dist/agent/session-store.js +178 -0
  11. package/dist/agent/session-store.js.map +1 -0
  12. package/dist/agent/spawner.d.ts +57 -0
  13. package/dist/agent/spawner.js +112 -0
  14. package/dist/agent/spawner.js.map +1 -0
  15. package/dist/agent/system-prompt.d.ts +3 -0
  16. package/dist/agent/system-prompt.js +100 -0
  17. package/dist/agent/system-prompt.js.map +1 -0
  18. package/dist/architect/engine.d.ts +47 -0
  19. package/dist/architect/engine.js +217 -0
  20. package/dist/architect/engine.js.map +1 -0
  21. package/dist/architect/types.d.ts +61 -0
  22. package/dist/architect/types.js +6 -0
  23. package/dist/architect/types.js.map +1 -0
  24. package/dist/cli/diamond.d.ts +1 -0
  25. package/dist/cli/diamond.js +23 -0
  26. package/dist/cli/diamond.js.map +1 -0
  27. package/dist/cli/display.d.ts +44 -0
  28. package/dist/cli/display.js +234 -0
  29. package/dist/cli/display.js.map +1 -0
  30. package/dist/cli/index.d.ts +2 -0
  31. package/dist/cli/index.js +1734 -0
  32. package/dist/cli/index.js.map +1 -0
  33. package/dist/config/defaults.d.ts +46 -0
  34. package/dist/config/defaults.js +106 -0
  35. package/dist/config/defaults.js.map +1 -0
  36. package/dist/config/project-config.d.ts +90 -0
  37. package/dist/config/project-config.js +141 -0
  38. package/dist/config/project-config.js.map +1 -0
  39. package/dist/harness/proposer.d.ts +26 -0
  40. package/dist/harness/proposer.js +204 -0
  41. package/dist/harness/proposer.js.map +1 -0
  42. package/dist/harness/weakness-miner.d.ts +28 -0
  43. package/dist/harness/weakness-miner.js +359 -0
  44. package/dist/harness/weakness-miner.js.map +1 -0
  45. package/dist/integrations/harnesses.d.ts +23 -0
  46. package/dist/integrations/harnesses.js +161 -0
  47. package/dist/integrations/harnesses.js.map +1 -0
  48. package/dist/orchestration/competence.d.ts +53 -0
  49. package/dist/orchestration/competence.js +181 -0
  50. package/dist/orchestration/competence.js.map +1 -0
  51. package/dist/orchestration/executor.d.ts +42 -0
  52. package/dist/orchestration/executor.js +206 -0
  53. package/dist/orchestration/executor.js.map +1 -0
  54. package/dist/orchestration/index.d.ts +20 -0
  55. package/dist/orchestration/index.js +39 -0
  56. package/dist/orchestration/index.js.map +1 -0
  57. package/dist/orchestration/orchestrator-prompts.d.ts +11 -0
  58. package/dist/orchestration/orchestrator-prompts.js +153 -0
  59. package/dist/orchestration/orchestrator-prompts.js.map +1 -0
  60. package/dist/orchestration/orchestrator.d.ts +27 -0
  61. package/dist/orchestration/orchestrator.js +169 -0
  62. package/dist/orchestration/orchestrator.js.map +1 -0
  63. package/dist/orchestration/plan-store.d.ts +53 -0
  64. package/dist/orchestration/plan-store.js +176 -0
  65. package/dist/orchestration/plan-store.js.map +1 -0
  66. package/dist/orchestration/router-prompts.d.ts +6 -0
  67. package/dist/orchestration/router-prompts.js +55 -0
  68. package/dist/orchestration/router-prompts.js.map +1 -0
  69. package/dist/orchestration/router.d.ts +23 -0
  70. package/dist/orchestration/router.js +70 -0
  71. package/dist/orchestration/router.js.map +1 -0
  72. package/dist/orchestration/ruby-detect.d.ts +6 -0
  73. package/dist/orchestration/ruby-detect.js +130 -0
  74. package/dist/orchestration/ruby-detect.js.map +1 -0
  75. package/dist/orchestration/ruby-types.d.ts +44 -0
  76. package/dist/orchestration/ruby-types.js +6 -0
  77. package/dist/orchestration/ruby-types.js.map +1 -0
  78. package/dist/orchestration/specialist-prompts.d.ts +19 -0
  79. package/dist/orchestration/specialist-prompts.js +143 -0
  80. package/dist/orchestration/specialist-prompts.js.map +1 -0
  81. package/dist/orchestration/specialists.d.ts +66 -0
  82. package/dist/orchestration/specialists.js +175 -0
  83. package/dist/orchestration/specialists.js.map +1 -0
  84. package/dist/orchestration/types.d.ts +82 -0
  85. package/dist/orchestration/types.js +6 -0
  86. package/dist/orchestration/types.js.map +1 -0
  87. package/dist/perception/extractor.d.ts +7 -0
  88. package/dist/perception/extractor.js +521 -0
  89. package/dist/perception/extractor.js.map +1 -0
  90. package/dist/perception/graph-store.d.ts +25 -0
  91. package/dist/perception/graph-store.js +117 -0
  92. package/dist/perception/graph-store.js.map +1 -0
  93. package/dist/perception/index.d.ts +4 -0
  94. package/dist/perception/index.js +18 -0
  95. package/dist/perception/index.js.map +1 -0
  96. package/dist/perception/queries.d.ts +29 -0
  97. package/dist/perception/queries.js +354 -0
  98. package/dist/perception/queries.js.map +1 -0
  99. package/dist/perception/types.d.ts +103 -0
  100. package/dist/perception/types.js +6 -0
  101. package/dist/perception/types.js.map +1 -0
  102. package/dist/providers/anthropic.d.ts +11 -0
  103. package/dist/providers/anthropic.js +172 -0
  104. package/dist/providers/anthropic.js.map +1 -0
  105. package/dist/providers/factory.d.ts +58 -0
  106. package/dist/providers/factory.js +354 -0
  107. package/dist/providers/factory.js.map +1 -0
  108. package/dist/providers/fallback.d.ts +24 -0
  109. package/dist/providers/fallback.js +72 -0
  110. package/dist/providers/fallback.js.map +1 -0
  111. package/dist/providers/google.d.ts +11 -0
  112. package/dist/providers/google.js +129 -0
  113. package/dist/providers/google.js.map +1 -0
  114. package/dist/providers/openai-compatible.d.ts +24 -0
  115. package/dist/providers/openai-compatible.js +216 -0
  116. package/dist/providers/openai-compatible.js.map +1 -0
  117. package/dist/providers/resilient-factory.d.ts +24 -0
  118. package/dist/providers/resilient-factory.js +57 -0
  119. package/dist/providers/resilient-factory.js.map +1 -0
  120. package/dist/providers/resilient.d.ts +63 -0
  121. package/dist/providers/resilient.js +145 -0
  122. package/dist/providers/resilient.js.map +1 -0
  123. package/dist/providers/types.d.ts +84 -0
  124. package/dist/providers/types.js +6 -0
  125. package/dist/providers/types.js.map +1 -0
  126. package/dist/ruby/alternator.d.ts +40 -0
  127. package/dist/ruby/alternator.js +233 -0
  128. package/dist/ruby/alternator.js.map +1 -0
  129. package/dist/ruby/competence.d.ts +34 -0
  130. package/dist/ruby/competence.js +264 -0
  131. package/dist/ruby/competence.js.map +1 -0
  132. package/dist/ruby/episode-capture.d.ts +56 -0
  133. package/dist/ruby/episode-capture.js +193 -0
  134. package/dist/ruby/episode-capture.js.map +1 -0
  135. package/dist/ruby/fine-tune.d.ts +16 -0
  136. package/dist/ruby/fine-tune.js +253 -0
  137. package/dist/ruby/fine-tune.js.map +1 -0
  138. package/dist/ruby/index.d.ts +10 -0
  139. package/dist/ruby/index.js +26 -0
  140. package/dist/ruby/index.js.map +1 -0
  141. package/dist/ruby/ruby-model.d.ts +36 -0
  142. package/dist/ruby/ruby-model.js +81 -0
  143. package/dist/ruby/ruby-model.js.map +1 -0
  144. package/dist/ruby/training-data.d.ts +11 -0
  145. package/dist/ruby/training-data.js +107 -0
  146. package/dist/ruby/training-data.js.map +1 -0
  147. package/dist/ruby/types.d.ts +136 -0
  148. package/dist/ruby/types.js +20 -0
  149. package/dist/ruby/types.js.map +1 -0
  150. package/dist/safety/permissions.d.ts +32 -0
  151. package/dist/safety/permissions.js +304 -0
  152. package/dist/safety/permissions.js.map +1 -0
  153. package/dist/server/index.d.ts +9 -0
  154. package/dist/server/index.js +342 -0
  155. package/dist/server/index.js.map +1 -0
  156. package/dist/server/session.d.ts +22 -0
  157. package/dist/server/session.js +16 -0
  158. package/dist/server/session.js.map +1 -0
  159. package/dist/setup/first-run.d.ts +41 -0
  160. package/dist/setup/first-run.js +386 -0
  161. package/dist/setup/first-run.js.map +1 -0
  162. package/dist/setup/global-config.d.ts +19 -0
  163. package/dist/setup/global-config.js +97 -0
  164. package/dist/setup/global-config.js.map +1 -0
  165. package/dist/tools/audio-transcribe.d.ts +8 -0
  166. package/dist/tools/audio-transcribe.js +156 -0
  167. package/dist/tools/audio-transcribe.js.map +1 -0
  168. package/dist/tools/browser.d.ts +15 -0
  169. package/dist/tools/browser.js +241 -0
  170. package/dist/tools/browser.js.map +1 -0
  171. package/dist/tools/calendar.d.ts +12 -0
  172. package/dist/tools/calendar.js +196 -0
  173. package/dist/tools/calendar.js.map +1 -0
  174. package/dist/tools/clipboard.d.ts +7 -0
  175. package/dist/tools/clipboard.js +90 -0
  176. package/dist/tools/clipboard.js.map +1 -0
  177. package/dist/tools/cron.d.ts +10 -0
  178. package/dist/tools/cron.js +167 -0
  179. package/dist/tools/cron.js.map +1 -0
  180. package/dist/tools/edit-file.d.ts +6 -0
  181. package/dist/tools/edit-file.js +98 -0
  182. package/dist/tools/edit-file.js.map +1 -0
  183. package/dist/tools/email.d.ts +11 -0
  184. package/dist/tools/email.js +153 -0
  185. package/dist/tools/email.js.map +1 -0
  186. package/dist/tools/git.d.ts +1 -0
  187. package/dist/tools/git.js +7 -0
  188. package/dist/tools/git.js.map +1 -0
  189. package/dist/tools/http-request.d.ts +12 -0
  190. package/dist/tools/http-request.js +91 -0
  191. package/dist/tools/http-request.js.map +1 -0
  192. package/dist/tools/image-read.d.ts +7 -0
  193. package/dist/tools/image-read.js +125 -0
  194. package/dist/tools/image-read.js.map +1 -0
  195. package/dist/tools/index.d.ts +3 -0
  196. package/dist/tools/index.js +201 -0
  197. package/dist/tools/index.js.map +1 -0
  198. package/dist/tools/list-dir.d.ts +1 -0
  199. package/dist/tools/list-dir.js +6 -0
  200. package/dist/tools/list-dir.js.map +1 -0
  201. package/dist/tools/mcp.d.ts +11 -0
  202. package/dist/tools/mcp.js +356 -0
  203. package/dist/tools/mcp.js.map +1 -0
  204. package/dist/tools/memory.d.ts +9 -0
  205. package/dist/tools/memory.js +124 -0
  206. package/dist/tools/memory.js.map +1 -0
  207. package/dist/tools/notify.d.ts +9 -0
  208. package/dist/tools/notify.js +40 -0
  209. package/dist/tools/notify.js.map +1 -0
  210. package/dist/tools/read-file.d.ts +6 -0
  211. package/dist/tools/read-file.js +76 -0
  212. package/dist/tools/read-file.js.map +1 -0
  213. package/dist/tools/run-shell.d.ts +1 -0
  214. package/dist/tools/run-shell.js +6 -0
  215. package/dist/tools/run-shell.js.map +1 -0
  216. package/dist/tools/run-tests.d.ts +1 -0
  217. package/dist/tools/run-tests.js +6 -0
  218. package/dist/tools/run-tests.js.map +1 -0
  219. package/dist/tools/search-code.d.ts +1 -0
  220. package/dist/tools/search-code.js +6 -0
  221. package/dist/tools/search-code.js.map +1 -0
  222. package/dist/tools/telegram-bot.d.ts +2 -0
  223. package/dist/tools/telegram-bot.js +693 -0
  224. package/dist/tools/telegram-bot.js.map +1 -0
  225. package/dist/tools/telegram-safety.d.ts +52 -0
  226. package/dist/tools/telegram-safety.js +189 -0
  227. package/dist/tools/telegram-safety.js.map +1 -0
  228. package/dist/tools/telegram.d.ts +16 -0
  229. package/dist/tools/telegram.js +227 -0
  230. package/dist/tools/telegram.js.map +1 -0
  231. package/dist/tools/tools.d.ts +48 -0
  232. package/dist/tools/tools.js +328 -0
  233. package/dist/tools/tools.js.map +1 -0
  234. package/dist/tools/web-fetch.d.ts +11 -0
  235. package/dist/tools/web-fetch.js +119 -0
  236. package/dist/tools/web-fetch.js.map +1 -0
  237. package/dist/tools/web-search.d.ts +8 -0
  238. package/dist/tools/web-search.js +81 -0
  239. package/dist/tools/web-search.js.map +1 -0
  240. package/dist/tools/whatsapp.d.ts +10 -0
  241. package/dist/tools/whatsapp.js +222 -0
  242. package/dist/tools/whatsapp.js.map +1 -0
  243. package/dist/tools/write-file.d.ts +1 -0
  244. package/dist/tools/write-file.js +6 -0
  245. package/dist/tools/write-file.js.map +1 -0
  246. package/dist/tools/youtube-transcript.d.ts +9 -0
  247. package/dist/tools/youtube-transcript.js +200 -0
  248. package/dist/tools/youtube-transcript.js.map +1 -0
  249. package/dist/util/circuit-breaker.d.ts +44 -0
  250. package/dist/util/circuit-breaker.js +78 -0
  251. package/dist/util/circuit-breaker.js.map +1 -0
  252. package/dist/util/env.d.ts +18 -0
  253. package/dist/util/env.js +39 -0
  254. package/dist/util/env.js.map +1 -0
  255. package/dist/util/errors.d.ts +42 -0
  256. package/dist/util/errors.js +121 -0
  257. package/dist/util/errors.js.map +1 -0
  258. package/dist/util/rate-limiter.d.ts +71 -0
  259. package/dist/util/rate-limiter.js +141 -0
  260. package/dist/util/rate-limiter.js.map +1 -0
  261. package/dist/util/retry.d.ts +30 -0
  262. package/dist/util/retry.js +57 -0
  263. package/dist/util/retry.js.map +1 -0
  264. package/dist/util/sanitize.d.ts +16 -0
  265. package/dist/util/sanitize.js +255 -0
  266. package/dist/util/sanitize.js.map +1 -0
  267. package/dist/verify/checks.d.ts +21 -0
  268. package/dist/verify/checks.js +311 -0
  269. package/dist/verify/checks.js.map +1 -0
  270. package/dist/verify/index.d.ts +33 -0
  271. package/dist/verify/index.js +127 -0
  272. package/dist/verify/index.js.map +1 -0
  273. package/dist/verify/types.d.ts +20 -0
  274. package/dist/verify/types.js +3 -0
  275. package/dist/verify/types.js.map +1 -0
  276. package/dist/versioncheck.d.ts +22 -0
  277. package/dist/versioncheck.js +203 -0
  278. package/dist/versioncheck.js.map +1 -0
  279. package/dist/viz/index.d.ts +2 -0
  280. package/dist/viz/index.js +733 -0
  281. package/dist/viz/index.js.map +1 -0
  282. package/dist/workflows/engine.d.ts +46 -0
  283. package/dist/workflows/engine.js +320 -0
  284. package/dist/workflows/engine.js.map +1 -0
  285. package/dist/workflows/types.d.ts +92 -0
  286. package/dist/workflows/types.js +6 -0
  287. package/dist/workflows/types.js.map +1 -0
  288. package/package.json +86 -0
@@ -0,0 +1,117 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.savePerception = savePerception;
37
+ exports.loadPerception = loadPerception;
38
+ exports.isStale = isStale;
39
+ exports.clearPerception = clearPerception;
40
+ const fs = __importStar(require("fs"));
41
+ const path = __importStar(require("path"));
42
+ // ─────────────────────────────────────────────────────────────────────────────
43
+ // Graph store — persistence layer for ProjectPerception snapshots
44
+ // ─────────────────────────────────────────────────────────────────────────────
45
+ const DEFAULT_MAX_AGE_MS = 60 * 60 * 1000; // 1 hour
46
+ // ─────────────────────────────────────────────────────────────────────────────
47
+ /**
48
+ * Serialise and persist a perception snapshot to disk.
49
+ * If `filePath` is provided it writes to that exact path; otherwise it
50
+ * derives `{projectRoot}/.aura/perception.json`.
51
+ *
52
+ * Writes atomically (tmp file + rename) so a crash never leaves a partial file.
53
+ * Creates parent directories if they do not already exist.
54
+ */
55
+ async function savePerception(perception, filePath) {
56
+ const target = filePath ?? defaultPath(perception.projectRoot);
57
+ const dir = path.dirname(target);
58
+ if (!fs.existsSync(dir))
59
+ fs.mkdirSync(dir, { recursive: true });
60
+ const tmp = target + '.tmp';
61
+ await fs.promises.writeFile(tmp, JSON.stringify(perception, null, 2), 'utf8');
62
+ await fs.promises.rename(tmp, target);
63
+ }
64
+ /**
65
+ * Load a previously saved perception snapshot from `filePath`.
66
+ * Returns `null` when the file does not exist or cannot be parsed.
67
+ */
68
+ async function loadPerception(filePath) {
69
+ if (!fs.existsSync(filePath))
70
+ return null;
71
+ let raw;
72
+ try {
73
+ raw = await fs.promises.readFile(filePath, 'utf8');
74
+ }
75
+ catch {
76
+ return null;
77
+ }
78
+ try {
79
+ const parsed = JSON.parse(raw);
80
+ if (!parsed || typeof parsed !== 'object' || !Array.isArray(parsed.nodes) || !Array.isArray(parsed.edges))
81
+ return null;
82
+ return parsed;
83
+ }
84
+ catch {
85
+ return null;
86
+ }
87
+ }
88
+ /**
89
+ * Return `true` when the perception's extractedAt timestamp is older than
90
+ * `maxAgeMs` (default: 1 hour).
91
+ */
92
+ function isStale(perception, maxAgeMs) {
93
+ const threshold = maxAgeMs ?? DEFAULT_MAX_AGE_MS;
94
+ // Guard: missing or non-numeric extractedAt should be treated as stale
95
+ if (typeof perception.extractedAt !== 'number' || !Number.isFinite(perception.extractedAt))
96
+ return true;
97
+ return Date.now() - perception.extractedAt >= threshold;
98
+ }
99
+ /**
100
+ * Remove the on-disk perception file.
101
+ * Silently succeeds when the file does not exist.
102
+ */
103
+ async function clearPerception(filePath) {
104
+ try {
105
+ if (fs.existsSync(filePath))
106
+ fs.unlinkSync(filePath);
107
+ }
108
+ catch {
109
+ // Already gone — no-op
110
+ }
111
+ }
112
+ // ─────────────────────────────────────────────────────────────────────────────
113
+ function defaultPath(projectRoot) {
114
+ const dir = path.join(projectRoot, '.aura');
115
+ return path.join(dir, 'perception.json');
116
+ }
117
+ //# sourceMappingURL=graph-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"graph-store.js","sourceRoot":"","sources":["../../src/perception/graph-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export { extractPerception } from './extractor.js';
2
+ export { savePerception, loadPerception, isStale, clearPerception } from './graph-store.js';
3
+ export { getDependencies, getImpact, getConstraints, getRiskAreas, getTrajectory, findRelated } from './queries.js';
4
+ export type { ProjectPerception, ArchitectureNode, ArchitectureEdge, PerceptionQuery, PerceptionQueryResult } from './types.js';
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.findRelated = exports.getTrajectory = exports.getRiskAreas = exports.getConstraints = exports.getImpact = exports.getDependencies = exports.clearPerception = exports.isStale = exports.loadPerception = exports.savePerception = exports.extractPerception = void 0;
4
+ var extractor_js_1 = require("./extractor.js");
5
+ Object.defineProperty(exports, "extractPerception", { enumerable: true, get: function () { return extractor_js_1.extractPerception; } });
6
+ var graph_store_js_1 = require("./graph-store.js");
7
+ Object.defineProperty(exports, "savePerception", { enumerable: true, get: function () { return graph_store_js_1.savePerception; } });
8
+ Object.defineProperty(exports, "loadPerception", { enumerable: true, get: function () { return graph_store_js_1.loadPerception; } });
9
+ Object.defineProperty(exports, "isStale", { enumerable: true, get: function () { return graph_store_js_1.isStale; } });
10
+ Object.defineProperty(exports, "clearPerception", { enumerable: true, get: function () { return graph_store_js_1.clearPerception; } });
11
+ var queries_js_1 = require("./queries.js");
12
+ Object.defineProperty(exports, "getDependencies", { enumerable: true, get: function () { return queries_js_1.getDependencies; } });
13
+ Object.defineProperty(exports, "getImpact", { enumerable: true, get: function () { return queries_js_1.getImpact; } });
14
+ Object.defineProperty(exports, "getConstraints", { enumerable: true, get: function () { return queries_js_1.getConstraints; } });
15
+ Object.defineProperty(exports, "getRiskAreas", { enumerable: true, get: function () { return queries_js_1.getRiskAreas; } });
16
+ Object.defineProperty(exports, "getTrajectory", { enumerable: true, get: function () { return queries_js_1.getTrajectory; } });
17
+ Object.defineProperty(exports, "findRelated", { enumerable: true, get: function () { return queries_js_1.findRelated; } });
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/perception/index.ts"],"names":[],"mappings":";;;AAAA,+CAAmD;AAA1C,iHAAA,iBAAiB,OAAA;AAC1B,mDAA4F;AAAnF,gHAAA,cAAc,OAAA;AAAE,gHAAA,cAAc,OAAA;AAAE,yGAAA,OAAO,OAAA;AAAE,iHAAA,eAAe,OAAA;AACjE,2CAAoH;AAA3G,6GAAA,eAAe,OAAA;AAAE,uGAAA,SAAS,OAAA;AAAE,4GAAA,cAAc,OAAA;AAAE,0GAAA,YAAY,OAAA;AAAE,2GAAA,aAAa,OAAA;AAAE,yGAAA,WAAW,OAAA"}
@@ -0,0 +1,29 @@
1
+ import type { ProjectPerception, PerceptionQueryResult } from './types.js';
2
+ /**
3
+ * What does `fileOrModule` depend on?
4
+ * Performs a BFS following `depends_on` edges to the specified depth (default 1).
5
+ */
6
+ export declare function getDependencies(perception: ProjectPerception, fileOrModule: string, depth?: number): PerceptionQueryResult;
7
+ /**
8
+ * If I change `fileOrModule`, what else is affected?
9
+ * Finds all nodes that depend on this target (reverse `depends_on` lookup).
10
+ */
11
+ export declare function getImpact(perception: ProjectPerception, fileOrModule: string): PerceptionQueryResult;
12
+ /**
13
+ * What rules, constraints, or risk areas apply to `fileOrModule`?
14
+ * Searches constraint nodes, risk areas, and read-only lists for matches.
15
+ */
16
+ export declare function getConstraints(perception: ProjectPerception, fileOrModule: string): PerceptionQueryResult;
17
+ /**
18
+ * Return all known high-risk or fragile areas in the codebase.
19
+ */
20
+ export declare function getRiskAreas(perception: ProjectPerception): PerceptionQueryResult;
21
+ /**
22
+ * Where is the project heading? What's deprecated, in-progress, or planned?
23
+ */
24
+ export declare function getTrajectory(perception: ProjectPerception): PerceptionQueryResult;
25
+ /**
26
+ * Semantic search: find nodes related to `concept` by matching against
27
+ * labels and descriptions (case-insensitive substring match).
28
+ */
29
+ export declare function findRelated(perception: ProjectPerception, concept: string): PerceptionQueryResult;
@@ -0,0 +1,354 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getDependencies = getDependencies;
4
+ exports.getImpact = getImpact;
5
+ exports.getConstraints = getConstraints;
6
+ exports.getRiskAreas = getRiskAreas;
7
+ exports.getTrajectory = getTrajectory;
8
+ exports.findRelated = findRelated;
9
+ // ─────────────────────────────────────────────────────────────────────────────
10
+ // Internal helpers
11
+ // ─────────────────────────────────────────────────────────────────────────────
12
+ function emptyResult(queryType, target, reason) {
13
+ return {
14
+ query: { type: queryType, target },
15
+ nodes: [],
16
+ edges: [],
17
+ summary: reason,
18
+ };
19
+ }
20
+ /** Find a node by its id (exact match) or by label (partial match). */
21
+ function resolveTarget(perception, target) {
22
+ // exact id
23
+ const exact = perception.nodes.find(n => n.id === target);
24
+ if (exact)
25
+ return exact;
26
+ // exact label
27
+ const labelMatch = perception.nodes.find(n => n.label === target);
28
+ if (labelMatch)
29
+ return labelMatch;
30
+ // id ends with target
31
+ const suffix = perception.nodes.find(n => n.id.endsWith(target) || n.id.endsWith('/' + target));
32
+ if (suffix)
33
+ return suffix;
34
+ // label contains target
35
+ const contains = perception.nodes.find(n => n.label.includes(target));
36
+ if (contains)
37
+ return contains;
38
+ return null;
39
+ }
40
+ function bfsTraverse(perception, startId, direction, relationships, maxDepth) {
41
+ const relSet = new Set(Array.isArray(relationships) ? relationships : [relationships]);
42
+ const visited = new Set();
43
+ const nodeIds = new Set();
44
+ const edgeKeys = new Set();
45
+ const queue = [{ id: startId, depth: 0 }];
46
+ visited.add(startId);
47
+ while (queue.length > 0) {
48
+ const { id, depth } = queue.shift();
49
+ nodeIds.add(id);
50
+ if (depth >= maxDepth)
51
+ continue;
52
+ for (const e of perception.edges) {
53
+ if (!relSet.has(e.relationship))
54
+ continue;
55
+ const matchId = direction === 'forward' ? e.from : e.to;
56
+ if (matchId !== id)
57
+ continue;
58
+ const nextId = direction === 'forward' ? e.to : e.from;
59
+ const key = `${e.from}\0${e.to}\0${e.relationship}`;
60
+ edgeKeys.add(key);
61
+ if (!visited.has(nextId)) {
62
+ visited.add(nextId);
63
+ queue.push({ id: nextId, depth: depth + 1 });
64
+ }
65
+ }
66
+ }
67
+ return { nodeIds, edgeKeys };
68
+ }
69
+ // ─────────────────────────────────────────────────────────────────────────────
70
+ // Public query functions
71
+ // ─────────────────────────────────────────────────────────────────────────────
72
+ /**
73
+ * What does `fileOrModule` depend on?
74
+ * Performs a BFS following `depends_on` edges to the specified depth (default 1).
75
+ */
76
+ function getDependencies(perception, fileOrModule, depth = 1) {
77
+ const target = resolveTarget(perception, fileOrModule);
78
+ if (!target) {
79
+ return emptyResult('dependencies', fileOrModule, `No node found matching "${fileOrModule}".`);
80
+ }
81
+ const { nodeIds, edgeKeys } = bfsTraverse(perception, target.id, 'forward', ['depends_on', 'deprecated_by'], depth);
82
+ const existingNodes = perception.nodes.filter(n => nodeIds.has(n.id));
83
+ const existingIds = new Set(existingNodes.map(n => n.id));
84
+ // Create lightweight placeholder nodes for edge targets that don't have
85
+ // full node entries (e.g. a deprecated_by edge pointing to a future file).
86
+ for (const id of nodeIds) {
87
+ if (!existingIds.has(id)) {
88
+ existingNodes.push({
89
+ id,
90
+ type: 'file',
91
+ label: id,
92
+ description: `Referenced by an edge: ${id}`,
93
+ metadata: {},
94
+ });
95
+ }
96
+ }
97
+ const edges = perception.edges.filter(e => edgeKeys.has(`${e.from}\0${e.to}\0${e.relationship}`));
98
+ // don't count the target itself in the dependency list for summary
99
+ const depCount = nodeIds.size - (nodeIds.has(target.id) ? 1 : 0);
100
+ const depNames = existingNodes.filter(n => n.id !== target.id).map(n => n.label).join(', ');
101
+ let summary;
102
+ if (depCount === 0) {
103
+ summary = `"${target.label}" has no recorded dependencies at depth ${depth}.`;
104
+ }
105
+ else {
106
+ summary = `"${target.label}" depends on ${depCount} node${depCount === 1 ? '' : 's'} at depth ${depth}: ${depNames || '(external or unresolved)'}.`;
107
+ }
108
+ return {
109
+ query: { type: 'dependencies', target: target.id },
110
+ nodes: existingNodes,
111
+ edges,
112
+ summary,
113
+ };
114
+ }
115
+ /**
116
+ * If I change `fileOrModule`, what else is affected?
117
+ * Finds all nodes that depend on this target (reverse `depends_on` lookup).
118
+ */
119
+ function getImpact(perception, fileOrModule) {
120
+ const target = resolveTarget(perception, fileOrModule);
121
+ if (!target) {
122
+ return emptyResult('impact', fileOrModule, `No node found matching "${fileOrModule}".`);
123
+ }
124
+ const { nodeIds, edgeKeys } = bfsTraverse(perception, target.id, 'reverse', ['depends_on', 'extends', 'implements', 'tests'], 3);
125
+ const nodes = perception.nodes.filter(n => nodeIds.has(n.id));
126
+ const edges = perception.edges.filter(e => edgeKeys.has(`${e.from}\0${e.to}\0${e.relationship}`));
127
+ const impactCount = nodeIds.size - (nodeIds.has(target.id) ? 1 : 0);
128
+ const impactNames = nodes.filter(n => n.id !== target.id).map(n => n.label).join(', ');
129
+ let summary;
130
+ if (impactCount === 0) {
131
+ summary = `Changing "${target.label}" is unlikely to impact other nodes — nothing currently depends on it.`;
132
+ }
133
+ else {
134
+ summary = `Changing "${target.label}" may impact ${impactCount} node${impactCount === 1 ? '' : 's'}: ${impactNames}. Review these before making changes.`;
135
+ }
136
+ return {
137
+ query: { type: 'impact', target: target.id },
138
+ nodes,
139
+ edges,
140
+ summary,
141
+ };
142
+ }
143
+ /**
144
+ * What rules, constraints, or risk areas apply to `fileOrModule`?
145
+ * Searches constraint nodes, risk areas, and read-only lists for matches.
146
+ */
147
+ function getConstraints(perception, fileOrModule) {
148
+ const target = resolveTarget(perception, fileOrModule);
149
+ const matchId = target?.id ?? fileOrModule;
150
+ const matchLabel = target?.label ?? fileOrModule;
151
+ const relevantNodes = [];
152
+ const relevantEdges = [];
153
+ // Check readOnly paths
154
+ for (const ro of perception.constraints.readOnly) {
155
+ if (matchId.startsWith(ro) || matchId === ro) {
156
+ const roNode = perception.nodes.find(n => n.id === `constraint:readonly:${ro}`);
157
+ if (roNode) {
158
+ relevantNodes.push(roNode);
159
+ const edge = perception.edges.find(e => e.from === roNode.id);
160
+ if (edge)
161
+ relevantEdges.push(edge);
162
+ }
163
+ }
164
+ }
165
+ // Check risk areas
166
+ for (const ra of perception.constraints.riskAreas) {
167
+ if (matchId.startsWith(ra) || matchId === ra) {
168
+ const raNode = perception.nodes.find(n => n.id === ra || n.id === 'constraint:risk-areas');
169
+ if (raNode && !relevantNodes.includes(raNode)) {
170
+ relevantNodes.push(raNode);
171
+ }
172
+ const edge = perception.edges.find(e => (e.from === ra || e.from === matchId) && e.to === 'constraint:risk-areas');
173
+ if (edge)
174
+ relevantEdges.push(edge);
175
+ }
176
+ }
177
+ // Check constraint / decision nodes related via edges
178
+ for (const e of perception.edges) {
179
+ const isConstraint = ['aligns_with', 'violates', 'implements'].includes(e.relationship);
180
+ if (!isConstraint)
181
+ continue;
182
+ if (e.from === matchId || e.to === matchId) {
183
+ const otherId = e.from === matchId ? e.to : e.from;
184
+ const node = perception.nodes.find(n => n.id === otherId);
185
+ if (node && (node.type === 'constraint' || node.type === 'decision')) {
186
+ if (!relevantNodes.includes(node))
187
+ relevantNodes.push(node);
188
+ if (!relevantEdges.includes(e))
189
+ relevantEdges.push(e);
190
+ }
191
+ }
192
+ }
193
+ // Check test coverage for this module
194
+ const moduleDir = pathDir(matchId);
195
+ const tc = perception.constraints.testCoverage.find(t => t.module === moduleDir);
196
+ const readOnlyMatch = perception.constraints.readOnly.some(ro => matchId.startsWith(ro) || matchId === ro);
197
+ const riskMatch = perception.constraints.riskAreas.some(ra => matchId.startsWith(ra) || matchId === ra);
198
+ let summary;
199
+ if (relevantNodes.length === 0) {
200
+ summary = `No specific constraints or risk markers apply to "${matchLabel}".`;
201
+ }
202
+ else {
203
+ const parts = [];
204
+ if (readOnlyMatch)
205
+ parts.push('it is marked read-only');
206
+ if (riskMatch)
207
+ parts.push('it is flagged as a risk area');
208
+ if (tc)
209
+ parts.push(`test coverage is ${tc.coverage}`);
210
+ if (parts.length === 0)
211
+ parts.push(`${relevantNodes.length} constraint/decision node(s) relate to this area`);
212
+ summary = `"${matchLabel}" has relevant constraints: ${parts.join('; ')}.`;
213
+ }
214
+ return {
215
+ query: { type: 'constraints', target: matchId },
216
+ nodes: relevantNodes,
217
+ edges: relevantEdges,
218
+ summary,
219
+ };
220
+ }
221
+ /**
222
+ * Return all known high-risk or fragile areas in the codebase.
223
+ */
224
+ function getRiskAreas(perception) {
225
+ const riskIds = new Set(perception.constraints.riskAreas);
226
+ const relevantNodes = [];
227
+ const relevantEdges = [];
228
+ // The constraint node itself
229
+ const raConstraint = perception.nodes.find(n => n.id === 'constraint:risk-areas');
230
+ if (raConstraint)
231
+ relevantNodes.push(raConstraint);
232
+ // Individual risk area file/module nodes
233
+ for (const raId of riskIds) {
234
+ const node = perception.nodes.find(n => n.id === raId);
235
+ if (node)
236
+ relevantNodes.push(node);
237
+ const edge = perception.edges.find(e => (e.from === raId || e.to === raId) && e.relationship === 'violates');
238
+ if (edge)
239
+ relevantEdges.push(edge);
240
+ }
241
+ let summary;
242
+ if (riskIds.size === 0) {
243
+ summary = 'No risk areas have been identified in this project.';
244
+ }
245
+ else {
246
+ const names = [...riskIds].join(', ');
247
+ summary = `${riskIds.size} risk area${riskIds.size === 1 ? '' : 's'} identified: ${names}. These files have TODOs, FIXMEs, or are imported by many other files. Exercise caution when modifying them.`;
248
+ }
249
+ return {
250
+ query: { type: 'risk', target: 'all' },
251
+ nodes: relevantNodes,
252
+ edges: relevantEdges,
253
+ summary,
254
+ };
255
+ }
256
+ /**
257
+ * Where is the project heading? What's deprecated, in-progress, or planned?
258
+ */
259
+ function getTrajectory(perception) {
260
+ const relevantNodes = [];
261
+ const relevantEdges = [];
262
+ const seen = new Set();
263
+ // Deprecated nodes — only return nodes that exist in the perception
264
+ for (const depId of perception.trajectory.deprecated) {
265
+ const node = perception.nodes.find(n => n.id === depId);
266
+ if (node && !seen.has(node.id)) {
267
+ seen.add(node.id);
268
+ relevantNodes.push(node);
269
+ }
270
+ const depEdge = perception.edges.find(e => e.from === depId && e.relationship === 'deprecated_by');
271
+ if (depEdge && !relevantEdges.includes(depEdge))
272
+ relevantEdges.push(depEdge);
273
+ }
274
+ // In-progress nodes
275
+ for (const ipId of perception.trajectory.inProgress) {
276
+ const node = perception.nodes.find(n => n.id === ipId);
277
+ if (node && !seen.has(node.id)) {
278
+ seen.add(node.id);
279
+ relevantNodes.push(node);
280
+ }
281
+ }
282
+ // Planned nodes — only include if they exist as real nodes
283
+ for (const pId of perception.trajectory.planned) {
284
+ const node = perception.nodes.find(n => n.id === pId);
285
+ if (node && !seen.has(node.id)) {
286
+ seen.add(node.id);
287
+ relevantNodes.push(node);
288
+ }
289
+ }
290
+ const parts = [];
291
+ if (perception.trajectory.vision)
292
+ parts.push(`vision: "${perception.trajectory.vision}"`);
293
+ if (perception.trajectory.deprecated.length)
294
+ parts.push(`${perception.trajectory.deprecated.length} item(s) deprecated`);
295
+ if (perception.trajectory.inProgress.length)
296
+ parts.push(`${perception.trajectory.inProgress.length} item(s) in progress`);
297
+ if (perception.trajectory.planned.length)
298
+ parts.push(`${perception.trajectory.planned.length} item(s) planned`);
299
+ const summary = parts.length > 0
300
+ ? `Project trajectory: ${parts.join('; ')}.`
301
+ : 'No trajectory information has been extracted yet.';
302
+ return {
303
+ query: { type: 'trajectory', target: 'all' },
304
+ nodes: relevantNodes,
305
+ edges: relevantEdges,
306
+ summary,
307
+ };
308
+ }
309
+ /**
310
+ * Semantic search: find nodes related to `concept` by matching against
311
+ * labels and descriptions (case-insensitive substring match).
312
+ */
313
+ function findRelated(perception, concept) {
314
+ const lower = concept.toLowerCase();
315
+ const matched = perception.nodes.filter(n => n.label.toLowerCase().includes(lower) ||
316
+ n.description.toLowerCase().includes(lower) ||
317
+ n.id.toLowerCase().includes(lower));
318
+ if (matched.length === 0) {
319
+ return {
320
+ query: { type: 'related', target: concept },
321
+ nodes: [],
322
+ edges: [],
323
+ summary: `No nodes found related to "${concept}". Try a different search term.`,
324
+ };
325
+ }
326
+ const matchIds = new Set(matched.map(n => n.id));
327
+ const relatedEdges = perception.edges.filter(e => matchIds.has(e.from) || matchIds.has(e.to));
328
+ // Also pull in nodes connected to matched nodes by a single edge
329
+ const extraNodeIds = new Set();
330
+ for (const e of relatedEdges) {
331
+ if (!matchIds.has(e.from))
332
+ extraNodeIds.add(e.from);
333
+ if (!matchIds.has(e.to))
334
+ extraNodeIds.add(e.to);
335
+ }
336
+ const extraNodes = perception.nodes.filter(n => extraNodeIds.has(n.id));
337
+ const allNodes = [...matched, ...extraNodes];
338
+ const names = matched.map(n => n.label).join(', ');
339
+ const summary = `Found ${matched.length} node${matched.length === 1 ? '' : 's'} related to "${concept}": ${names}.`;
340
+ return {
341
+ query: { type: 'related', target: concept },
342
+ nodes: allNodes,
343
+ edges: relatedEdges,
344
+ summary,
345
+ };
346
+ }
347
+ // ─────────────────────────────────────────────────────────────────────────────
348
+ // Browser-compatible path.dirname (avoid import for CommonJS interop)
349
+ // ─────────────────────────────────────────────────────────────────────────────
350
+ function pathDir(p) {
351
+ const i = p.lastIndexOf('/');
352
+ return i === -1 ? '.' : p.slice(0, i);
353
+ }
354
+ //# sourceMappingURL=queries.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"queries.js","sourceRoot":"","sources":["../../src/perception/queries.ts"],"names":[],"mappings":"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"}