aura-code 0.6.3 → 0.10.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (265) hide show
  1. package/README.md +47 -164
  2. package/dist/agent/affect.d.ts +13 -0
  3. package/dist/agent/affect.js +34 -0
  4. package/dist/agent/affect.js.map +1 -0
  5. package/dist/agent/compactor.d.ts +27 -4
  6. package/dist/agent/compactor.js +185 -54
  7. package/dist/agent/compactor.js.map +1 -1
  8. package/dist/agent/confess.d.ts +35 -0
  9. package/dist/agent/confess.js +296 -0
  10. package/dist/agent/confess.js.map +1 -0
  11. package/dist/agent/context.d.ts +0 -4
  12. package/dist/agent/context.js +0 -38
  13. package/dist/agent/context.js.map +1 -1
  14. package/dist/agent/domain-expertise.d.ts +22 -0
  15. package/dist/agent/domain-expertise.js +110 -0
  16. package/dist/agent/domain-expertise.js.map +1 -0
  17. package/dist/agent/executive-queue.d.ts +26 -0
  18. package/dist/agent/executive-queue.js +50 -0
  19. package/dist/agent/executive-queue.js.map +1 -0
  20. package/dist/agent/generational-flush.d.ts +28 -0
  21. package/dist/agent/generational-flush.js +48 -0
  22. package/dist/agent/generational-flush.js.map +1 -0
  23. package/dist/agent/loop-profile.d.ts +50 -0
  24. package/dist/agent/loop-profile.js +88 -0
  25. package/dist/agent/loop-profile.js.map +1 -0
  26. package/dist/agent/loop.d.ts +14 -5
  27. package/dist/agent/loop.js +167 -39
  28. package/dist/agent/loop.js.map +1 -1
  29. package/dist/agent/memory-consolidate.d.ts +14 -0
  30. package/dist/agent/memory-consolidate.js +141 -0
  31. package/dist/agent/memory-consolidate.js.map +1 -0
  32. package/dist/agent/mixture.d.ts +33 -0
  33. package/dist/agent/mixture.js +138 -0
  34. package/dist/agent/mixture.js.map +1 -0
  35. package/dist/agent/spawner.js +2 -2
  36. package/dist/agent/spawner.js.map +1 -1
  37. package/dist/agent/system-prompt.d.ts +1 -1
  38. package/dist/agent/system-prompt.js +50 -22
  39. package/dist/agent/system-prompt.js.map +1 -1
  40. package/dist/agent/unified-memory.d.ts +15 -0
  41. package/dist/agent/unified-memory.js +164 -0
  42. package/dist/agent/unified-memory.js.map +1 -0
  43. package/dist/checkpoints/engine.d.ts +44 -0
  44. package/dist/checkpoints/engine.js +324 -0
  45. package/dist/checkpoints/engine.js.map +1 -0
  46. package/dist/cli/command-palette.d.ts +26 -0
  47. package/dist/cli/command-palette.js +133 -0
  48. package/dist/cli/command-palette.js.map +1 -0
  49. package/dist/cli/context-health.d.ts +51 -0
  50. package/dist/cli/context-health.js +187 -0
  51. package/dist/cli/context-health.js.map +1 -0
  52. package/dist/cli/diamond.d.ts +67 -0
  53. package/dist/cli/diamond.js +222 -12
  54. package/dist/cli/diamond.js.map +1 -1
  55. package/dist/cli/dic.d.ts +2 -0
  56. package/dist/cli/dic.js +106 -0
  57. package/dist/cli/dic.js.map +1 -0
  58. package/dist/cli/diff-view.d.ts +18 -0
  59. package/dist/cli/diff-view.js +114 -0
  60. package/dist/cli/diff-view.js.map +1 -0
  61. package/dist/cli/display.d.ts +18 -4
  62. package/dist/cli/display.js +74 -151
  63. package/dist/cli/display.js.map +1 -1
  64. package/dist/cli/help-data.d.ts +7 -0
  65. package/dist/cli/help-data.js +80 -0
  66. package/dist/cli/help-data.js.map +1 -0
  67. package/dist/cli/index.js +1002 -852
  68. package/dist/cli/index.js.map +1 -1
  69. package/dist/cli/markdown.d.ts +5 -0
  70. package/dist/cli/markdown.js +128 -0
  71. package/dist/cli/markdown.js.map +1 -0
  72. package/dist/cli/model-select.d.ts +39 -0
  73. package/dist/cli/model-select.js +65 -0
  74. package/dist/cli/model-select.js.map +1 -0
  75. package/dist/cli/tui.d.ts +34 -0
  76. package/dist/cli/tui.js +1176 -0
  77. package/dist/cli/tui.js.map +1 -0
  78. package/dist/config/defaults.d.ts +6 -17
  79. package/dist/config/defaults.js +25 -46
  80. package/dist/config/defaults.js.map +1 -1
  81. package/dist/config/project-config.d.ts +2 -6
  82. package/dist/config/project-config.js +2 -2
  83. package/dist/config/project-config.js.map +1 -1
  84. package/dist/doctor/checks.d.ts +18 -0
  85. package/dist/doctor/checks.js +524 -0
  86. package/dist/doctor/checks.js.map +1 -0
  87. package/dist/doctor/index.d.ts +4 -0
  88. package/dist/doctor/index.js +229 -0
  89. package/dist/doctor/index.js.map +1 -0
  90. package/dist/doctor/repair.d.ts +19 -0
  91. package/dist/doctor/repair.js +126 -0
  92. package/dist/doctor/repair.js.map +1 -0
  93. package/dist/doctor/types.d.ts +38 -0
  94. package/dist/doctor/types.js +10 -0
  95. package/dist/doctor/types.js.map +1 -0
  96. package/dist/dream/dream.d.ts +79 -59
  97. package/dist/dream/dream.js +324 -144
  98. package/dist/dream/dream.js.map +1 -1
  99. package/dist/dream/episode.d.ts +17 -0
  100. package/dist/dream/episode.js +116 -0
  101. package/dist/dream/episode.js.map +1 -0
  102. package/dist/kanban/engine.d.ts +26 -0
  103. package/dist/kanban/engine.js +208 -0
  104. package/dist/kanban/engine.js.map +1 -0
  105. package/dist/kanban/types.d.ts +19 -0
  106. package/dist/kanban/types.js +9 -1
  107. package/dist/kanban/types.js.map +1 -1
  108. package/dist/machina/render-html.js +4 -2
  109. package/dist/machina/render-html.js.map +1 -1
  110. package/dist/machina/render-terminal.js +11 -4
  111. package/dist/machina/render-terminal.js.map +1 -1
  112. package/dist/machina/repair.d.ts +23 -0
  113. package/dist/machina/repair.js +98 -0
  114. package/dist/machina/repair.js.map +1 -0
  115. package/dist/machina/spec.js +12 -12
  116. package/dist/machina/spec.js.map +1 -1
  117. package/dist/machina/verify.d.ts +13 -1
  118. package/dist/machina/verify.js +12 -2
  119. package/dist/machina/verify.js.map +1 -1
  120. package/dist/mining/extract.d.ts +34 -0
  121. package/dist/mining/extract.js +229 -0
  122. package/dist/mining/extract.js.map +1 -0
  123. package/dist/mining/refine.d.ts +28 -0
  124. package/dist/mining/refine.js +256 -0
  125. package/dist/mining/refine.js.map +1 -0
  126. package/dist/perception/extractor.js +5 -3
  127. package/dist/perception/extractor.js.map +1 -1
  128. package/dist/perception/graph-store.d.ts +0 -11
  129. package/dist/perception/graph-store.js +0 -33
  130. package/dist/perception/graph-store.js.map +1 -1
  131. package/dist/perception/index.d.ts +1 -1
  132. package/dist/perception/index.js +1 -2
  133. package/dist/perception/index.js.map +1 -1
  134. package/dist/plugins/commands.d.ts +38 -0
  135. package/dist/plugins/commands.js +134 -0
  136. package/dist/plugins/commands.js.map +1 -0
  137. package/dist/plugins/frontmatter.d.ts +14 -0
  138. package/dist/plugins/frontmatter.js +78 -0
  139. package/dist/plugins/frontmatter.js.map +1 -0
  140. package/dist/plugins/hooks.d.ts +12 -0
  141. package/dist/plugins/hooks.js +148 -0
  142. package/dist/plugins/hooks.js.map +1 -0
  143. package/dist/plugins/loader.d.ts +7 -0
  144. package/dist/plugins/loader.js +255 -0
  145. package/dist/plugins/loader.js.map +1 -0
  146. package/dist/plugins/market.d.ts +23 -0
  147. package/dist/plugins/market.js +281 -0
  148. package/dist/plugins/market.js.map +1 -0
  149. package/dist/plugins/types.d.ts +90 -0
  150. package/dist/plugins/types.js +20 -0
  151. package/dist/plugins/types.js.map +1 -0
  152. package/dist/providers/anthropic-oauth-draft.d.ts +119 -0
  153. package/dist/providers/anthropic-oauth-draft.js +414 -0
  154. package/dist/providers/anthropic-oauth-draft.js.map +1 -0
  155. package/dist/providers/anthropic.d.ts +4 -1
  156. package/dist/providers/anthropic.js +35 -7
  157. package/dist/providers/anthropic.js.map +1 -1
  158. package/dist/providers/factory.d.ts +43 -19
  159. package/dist/providers/factory.js +183 -129
  160. package/dist/providers/factory.js.map +1 -1
  161. package/dist/providers/google.js +9 -22
  162. package/dist/providers/google.js.map +1 -1
  163. package/dist/providers/live-models.d.ts +23 -0
  164. package/dist/providers/live-models.js +145 -0
  165. package/dist/providers/live-models.js.map +1 -0
  166. package/dist/providers/openai-compatible.d.ts +1 -12
  167. package/dist/providers/openai-compatible.js +71 -108
  168. package/dist/providers/openai-compatible.js.map +1 -1
  169. package/dist/providers/resilient-factory.js +1 -1
  170. package/dist/providers/resilient-factory.js.map +1 -1
  171. package/dist/repl/queue.d.ts +22 -0
  172. package/dist/repl/queue.js +165 -0
  173. package/dist/repl/queue.js.map +1 -0
  174. package/dist/repl/side-channel.d.ts +23 -0
  175. package/dist/repl/side-channel.js +63 -0
  176. package/dist/repl/side-channel.js.map +1 -0
  177. package/dist/research/council.d.ts +2 -0
  178. package/dist/research/council.js +29 -4
  179. package/dist/research/council.js.map +1 -1
  180. package/dist/ruby/alternator.d.ts +11 -30
  181. package/dist/ruby/alternator.js +59 -38
  182. package/dist/ruby/alternator.js.map +1 -1
  183. package/dist/ruby/episode-capture.d.ts +0 -10
  184. package/dist/ruby/episode-capture.js +0 -33
  185. package/dist/ruby/episode-capture.js.map +1 -1
  186. package/dist/ruby/types.js +1 -1
  187. package/dist/ruby/types.js.map +1 -1
  188. package/dist/safety/path-jail.d.ts +17 -0
  189. package/dist/safety/path-jail.js +100 -0
  190. package/dist/safety/path-jail.js.map +1 -0
  191. package/dist/safety/permissions.d.ts +12 -21
  192. package/dist/safety/permissions.js +81 -216
  193. package/dist/safety/permissions.js.map +1 -1
  194. package/dist/safety/ssrf.d.ts +29 -0
  195. package/dist/safety/ssrf.js +185 -0
  196. package/dist/safety/ssrf.js.map +1 -0
  197. package/dist/server/index.js +64 -10
  198. package/dist/server/index.js.map +1 -1
  199. package/dist/setup/first-run.d.ts +0 -24
  200. package/dist/setup/first-run.js +10 -344
  201. package/dist/setup/first-run.js.map +1 -1
  202. package/dist/setup/key-store.d.ts +12 -0
  203. package/dist/setup/key-store.js +108 -0
  204. package/dist/setup/key-store.js.map +1 -0
  205. package/dist/setup/provider-registry.js +31 -18
  206. package/dist/setup/provider-registry.js.map +1 -1
  207. package/dist/setup/provider-test.d.ts +7 -0
  208. package/dist/setup/provider-test.js +73 -10
  209. package/dist/setup/provider-test.js.map +1 -1
  210. package/dist/setup/provider-wizard.d.ts +4 -1
  211. package/dist/setup/provider-wizard.js +92 -26
  212. package/dist/setup/provider-wizard.js.map +1 -1
  213. package/dist/setup/xiaomi.d.ts +1 -1
  214. package/dist/setup/xiaomi.js +3 -3
  215. package/dist/setup/xiaomi.js.map +1 -1
  216. package/dist/tools/browser.js +14 -10
  217. package/dist/tools/browser.js.map +1 -1
  218. package/dist/tools/clipboard.js +7 -1
  219. package/dist/tools/clipboard.js.map +1 -1
  220. package/dist/tools/dictate.d.ts +60 -0
  221. package/dist/tools/dictate.js +983 -0
  222. package/dist/tools/dictate.js.map +1 -0
  223. package/dist/tools/dictate_patched.js +1057 -0
  224. package/dist/tools/edit-file.js +10 -2
  225. package/dist/tools/edit-file.js.map +1 -1
  226. package/dist/tools/http-request.js +14 -4
  227. package/dist/tools/http-request.js.map +1 -1
  228. package/dist/tools/image-read.js +34 -2
  229. package/dist/tools/image-read.js.map +1 -1
  230. package/dist/tools/index.d.ts +16 -1
  231. package/dist/tools/index.js +59 -8
  232. package/dist/tools/index.js.map +1 -1
  233. package/dist/tools/mcp.js +12 -0
  234. package/dist/tools/mcp.js.map +1 -1
  235. package/dist/tools/read-file.js +10 -14
  236. package/dist/tools/read-file.js.map +1 -1
  237. package/dist/tools/telegram-audio-policy.d.ts +30 -0
  238. package/dist/tools/telegram-audio-policy.js +49 -0
  239. package/dist/tools/telegram-audio-policy.js.map +1 -0
  240. package/dist/tools/telegram-bot.js +1136 -537
  241. package/dist/tools/telegram-bot.js.map +1 -1
  242. package/dist/tools/telegram-voice.d.ts +18 -5
  243. package/dist/tools/telegram-voice.js +54 -12
  244. package/dist/tools/telegram-voice.js.map +1 -1
  245. package/dist/tools/telegram.d.ts +3 -3
  246. package/dist/tools/telegram.js +5 -84
  247. package/dist/tools/telegram.js.map +1 -1
  248. package/dist/tools/tools.d.ts +2 -14
  249. package/dist/tools/tools.js +79 -144
  250. package/dist/tools/tools.js.map +1 -1
  251. package/dist/tools/web-fetch.js +39 -7
  252. package/dist/tools/web-fetch.js.map +1 -1
  253. package/dist/tools/web-search.d.ts +0 -20
  254. package/dist/tools/web-search.js +40 -137
  255. package/dist/tools/web-search.js.map +1 -1
  256. package/dist/util/errors.js +1 -15
  257. package/dist/util/errors.js.map +1 -1
  258. package/dist/util/json-repair.d.ts +11 -0
  259. package/dist/util/json-repair.js +31 -0
  260. package/dist/util/json-repair.js.map +1 -0
  261. package/dist/util/rate-limiter.js +2 -8
  262. package/dist/util/rate-limiter.js.map +1 -1
  263. package/dist/viz/index.js +793 -792
  264. package/dist/viz/index.js.map +1 -1
  265. package/package.json +12 -32
@@ -0,0 +1,524 @@
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.ALL_CHECKS = void 0;
37
+ exports.checkBuild = checkBuild;
38
+ exports.checkConfig = checkConfig;
39
+ exports.checkSource = checkSource;
40
+ exports.checkAssets = checkAssets;
41
+ exports.checkSkills = checkSkills;
42
+ exports.checkDeps = checkDeps;
43
+ exports.checkGit = checkGit;
44
+ exports.checkEnv = checkEnv;
45
+ exports.checkVersion = checkVersion;
46
+ exports.checkLatestVersion = checkLatestVersion;
47
+ exports.checkMemory = checkMemory;
48
+ exports.checkHygiene = checkHygiene;
49
+ /**
50
+ * Aura Doctor — scanner. Each check function returns one or more Findings.
51
+ *
52
+ * All checks are pure reads — they never modify the filesystem. Repair
53
+ * logic lives in repair.ts and is only invoked when the caller passes
54
+ * fix:true to runDoctor().
55
+ */
56
+ const fs = __importStar(require("fs"));
57
+ const path = __importStar(require("path"));
58
+ const child_process_1 = require("child_process");
59
+ // ── helpers ──────────────────────────────────────────────────────────────────
60
+ function exists(p) {
61
+ try {
62
+ fs.accessSync(p);
63
+ return true;
64
+ }
65
+ catch {
66
+ return false;
67
+ }
68
+ }
69
+ function readJson(p) {
70
+ try {
71
+ return JSON.parse(fs.readFileSync(p, 'utf8'));
72
+ }
73
+ catch {
74
+ return null;
75
+ }
76
+ }
77
+ function mtime(p) {
78
+ try {
79
+ return fs.statSync(p).mtimeMs;
80
+ }
81
+ catch {
82
+ return 0;
83
+ }
84
+ }
85
+ function sh(cmd, cwd) {
86
+ try {
87
+ return (0, child_process_1.execSync)(cmd, { cwd, encoding: 'utf8', timeout: 15_000, stdio: ['pipe', 'pipe', 'pipe'] }).trim();
88
+ }
89
+ catch {
90
+ return '';
91
+ }
92
+ }
93
+ // ── 1. Build integrity ───────────────────────────────────────────────────────
94
+ function checkBuild(root) {
95
+ const dist = path.join(root, 'dist');
96
+ const entry = path.join(dist, 'cli', 'index.js');
97
+ const out = [];
98
+ if (!exists(dist)) {
99
+ out.push({ category: 'build', name: 'dist directory', severity: 'error', message: 'dist/ does not exist — the compiled output is missing.', fixable: true, fixDescription: 'Run npm run build to compile src/ → dist/.' });
100
+ return out;
101
+ }
102
+ out.push({ category: 'build', name: 'dist directory', severity: 'ok', message: 'dist/ exists.', fixable: false });
103
+ if (!exists(entry)) {
104
+ out.push({ category: 'build', name: 'entry point', severity: 'error', message: 'dist/cli/index.js is missing — the CLI entry point cannot run.', fixable: true, fixDescription: 'Run npm run build.' });
105
+ }
106
+ else {
107
+ out.push({ category: 'build', name: 'entry point', severity: 'ok', message: 'dist/cli/index.js exists.', fixable: false });
108
+ }
109
+ // Staleness: any src/*.ts newer than dist/cli/index.js?
110
+ const entryMtime = mtime(entry);
111
+ if (entryMtime > 0) {
112
+ const newer = findNewerSource(root, entryMtime);
113
+ if (newer.length > 0) {
114
+ out.push({
115
+ category: 'build', name: 'dist freshness', severity: 'fixable',
116
+ message: `dist/ is stale — ${newer.length} source file(s) newer than the build.`,
117
+ detail: newer.slice(0, 5).join('\n') + (newer.length > 5 ? `\n… and ${newer.length - 5} more` : ''),
118
+ fixable: true, fixDescription: 'Run npm run build to recompile.',
119
+ });
120
+ }
121
+ else {
122
+ out.push({ category: 'build', name: 'dist freshness', severity: 'ok', message: 'dist/ is up to date with src/.', fixable: false });
123
+ }
124
+ }
125
+ return out;
126
+ }
127
+ function findNewerSource(root, threshold) {
128
+ const srcDir = path.join(root, 'src');
129
+ const result = [];
130
+ function walk(dir) {
131
+ for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
132
+ const full = path.join(dir, entry.name);
133
+ if (entry.isDirectory())
134
+ walk(full);
135
+ else if (entry.name.endsWith('.ts') && mtime(full) > threshold) {
136
+ result.push(path.relative(root, full));
137
+ }
138
+ }
139
+ }
140
+ try {
141
+ walk(srcDir);
142
+ }
143
+ catch { /* src missing — handled elsewhere */ }
144
+ return result;
145
+ }
146
+ // ── 2. Config validity ───────────────────────────────────────────────────────
147
+ function checkConfig(root) {
148
+ const out = [];
149
+ // package.json
150
+ const pkgPath = path.join(root, 'package.json');
151
+ const pkg = readJson(pkgPath);
152
+ if (!pkg) {
153
+ out.push({ category: 'config', name: 'package.json', severity: 'error', message: 'package.json is missing or not valid JSON.', fixable: false });
154
+ }
155
+ else {
156
+ out.push({ category: 'config', name: 'package.json', severity: 'ok', message: `package.json valid — ${pkg.name ?? '?'} v${pkg.version ?? '?'}.`, fixable: false });
157
+ if (!pkg.bin || (typeof pkg.bin === 'object' && Object.keys(pkg.bin).length === 0)) {
158
+ out.push({ category: 'config', name: 'package.json bin', severity: 'warn', message: 'package.json has no "bin" field — the CLI may not be installed globally.', fixable: false });
159
+ }
160
+ }
161
+ // tsconfig.json
162
+ const tsconfigPath = path.join(root, 'tsconfig.json');
163
+ if (!exists(tsconfigPath)) {
164
+ out.push({ category: 'config', name: 'tsconfig.json', severity: 'error', message: 'tsconfig.json is missing — cannot build.', fixable: false });
165
+ }
166
+ else if (!readJson(tsconfigPath)) {
167
+ out.push({ category: 'config', name: 'tsconfig.json', severity: 'error', message: 'tsconfig.json is not valid JSON.', fixable: false });
168
+ }
169
+ else {
170
+ out.push({ category: 'config', name: 'tsconfig.json', severity: 'ok', message: 'tsconfig.json valid.', fixable: false });
171
+ }
172
+ // .aura.json
173
+ const auraPath = path.join(root, '.aura.json');
174
+ if (exists(auraPath)) {
175
+ const aura = readJson(auraPath);
176
+ if (!aura) {
177
+ out.push({ category: 'config', name: '.aura.json', severity: 'error', message: '.aura.json is not valid JSON.', fixable: true, fixDescription: 'Fix the JSON syntax or delete the file to use defaults.' });
178
+ }
179
+ else {
180
+ out.push({ category: 'config', name: '.aura.json', severity: 'ok', message: `.aura.json valid — model: ${aura.model ?? '(default)'}.`, fixable: false });
181
+ }
182
+ }
183
+ // .env.example
184
+ if (!exists(path.join(root, '.env.example'))) {
185
+ out.push({ category: 'config', name: '.env.example', severity: 'warn', message: '.env.example is missing — new users won\'t know which API keys to set.', fixable: false });
186
+ }
187
+ else {
188
+ out.push({ category: 'config', name: '.env.example', severity: 'ok', message: '.env.example exists.', fixable: false });
189
+ }
190
+ // Cross-check: .aura.json references env vars not in .env.example
191
+ if (exists(auraPath) && exists(path.join(root, '.env.example'))) {
192
+ const aura = readJson(auraPath);
193
+ const envExample = fs.readFileSync(path.join(root, '.env.example'), 'utf8');
194
+ if (aura?.providers) {
195
+ for (const prov of aura.providers) {
196
+ if (prov.apiKeyEnv && !envExample.includes(prov.apiKeyEnv)) {
197
+ out.push({ category: 'config', name: `.env.example vs .aura.json`, severity: 'warn', message: `.aura.json references ${prov.apiKeyEnv} but .env.example doesn't document it.`, fixable: false });
198
+ }
199
+ }
200
+ }
201
+ }
202
+ return out;
203
+ }
204
+ // ── 3. Source integrity ──────────────────────────────────────────────────────
205
+ const KEY_SOURCE_FILES = [
206
+ 'cli/index.ts', 'cli/display.ts', 'cli/tui.ts',
207
+ 'agent/loop.ts', 'agent/compactor.ts', 'agent/system-prompt.ts',
208
+ 'providers/factory.ts', 'providers/types.ts',
209
+ 'tools/index.ts', 'safety/permissions.ts',
210
+ ];
211
+ function checkSource(root) {
212
+ const out = [];
213
+ const srcDir = path.join(root, 'src');
214
+ if (!exists(srcDir)) {
215
+ out.push({ category: 'source', name: 'src directory', severity: 'error', message: 'src/ directory is missing — this is not a development checkout.', fixable: false });
216
+ return out;
217
+ }
218
+ out.push({ category: 'source', name: 'src directory', severity: 'ok', message: 'src/ exists.', fixable: false });
219
+ for (const rel of KEY_SOURCE_FILES) {
220
+ const full = path.join(srcDir, rel);
221
+ if (!exists(full)) {
222
+ out.push({ category: 'source', name: `src/${rel}`, severity: 'error', message: `src/${rel} is missing.`, fixable: false });
223
+ }
224
+ else {
225
+ const size = fs.statSync(full).size;
226
+ if (size < 50) {
227
+ out.push({ category: 'source', name: `src/${rel}`, severity: 'warn', message: `src/${rel} is suspiciously small (${size} bytes) — may be truncated or corrupted.`, fixable: false });
228
+ }
229
+ }
230
+ }
231
+ // Don't emit an "ok" per file — too noisy. Only surface problems.
232
+ const problems = out.filter(f => f.severity !== 'ok');
233
+ if (problems.length === 0) {
234
+ out.push({ category: 'source', name: 'key source files', severity: 'ok', message: `All ${KEY_SOURCE_FILES.length} key source files present and non-trivial.`, fixable: false });
235
+ }
236
+ return out;
237
+ }
238
+ // ── 4. Static assets ─────────────────────────────────────────────────────────
239
+ const EXPECTED_ASSETS = ['architecture-diagram.png', 'demo.gif', 'ruby-diamond.jpg'];
240
+ function checkAssets(root) {
241
+ const out = [];
242
+ const assetsDir = path.join(root, 'assets');
243
+ if (!exists(assetsDir)) {
244
+ out.push({ category: 'assets', name: 'assets directory', severity: 'warn', message: 'assets/ directory is missing.', fixable: false });
245
+ return out;
246
+ }
247
+ let allOk = true;
248
+ for (const file of EXPECTED_ASSETS) {
249
+ const full = path.join(assetsDir, file);
250
+ if (!exists(full)) {
251
+ allOk = false;
252
+ out.push({ category: 'assets', name: `assets/${file}`, severity: 'warn', message: `assets/${file} is missing.`, fixable: false });
253
+ }
254
+ else {
255
+ const size = fs.statSync(full).size;
256
+ if (size < 1000) {
257
+ allOk = false;
258
+ out.push({ category: 'assets', name: `assets/${file}`, severity: 'warn', message: `assets/${file} is only ${size} bytes — likely corrupted.`, fixable: false });
259
+ }
260
+ }
261
+ }
262
+ if (allOk) {
263
+ out.push({ category: 'assets', name: 'static assets', severity: 'ok', message: `All ${EXPECTED_ASSETS.length} static assets present.`, fixable: false });
264
+ }
265
+ return out;
266
+ }
267
+ // ── 5. Skills ────────────────────────────────────────────────────────────────
268
+ function checkSkills(root) {
269
+ const out = [];
270
+ const skillsDir = path.join(root, '.agents', 'skills');
271
+ if (!exists(skillsDir)) {
272
+ out.push({ category: 'skills', name: 'skills directory', severity: 'warn', message: '.agents/skills/ is missing — no skills loaded.', fixable: false });
273
+ return out;
274
+ }
275
+ const entries = fs.readdirSync(skillsDir, { withFileTypes: true }).filter(e => e.isDirectory());
276
+ if (entries.length === 0) {
277
+ out.push({ category: 'skills', name: 'skills', severity: 'warn', message: '.agents/skills/ has no skill subdirectories.', fixable: false });
278
+ return out;
279
+ }
280
+ let problems = 0;
281
+ for (const dir of entries) {
282
+ const skillMd = path.join(skillsDir, dir.name, 'SKILL.md');
283
+ if (!exists(skillMd)) {
284
+ problems++;
285
+ out.push({ category: 'skills', name: `skill:${dir.name}`, severity: 'warn', message: `.agents/skills/${dir.name}/SKILL.md is missing.`, fixable: false });
286
+ }
287
+ }
288
+ if (problems === 0) {
289
+ out.push({ category: 'skills', name: 'skills', severity: 'ok', message: `All ${entries.length} skill(s) have SKILL.md.`, fixable: false });
290
+ }
291
+ return out;
292
+ }
293
+ // ── 6. Dependencies ──────────────────────────────────────────────────────────
294
+ const KEY_DEPS = ['chalk', 'minimist', 'openai'];
295
+ function checkDeps(root) {
296
+ const out = [];
297
+ const nm = path.join(root, 'node_modules');
298
+ if (!exists(nm)) {
299
+ out.push({ category: 'deps', name: 'node_modules', severity: 'error', message: 'node_modules/ is missing — dependencies not installed.', fixable: true, fixDescription: 'Run npm install.' });
300
+ return out;
301
+ }
302
+ out.push({ category: 'deps', name: 'node_modules', severity: 'ok', message: 'node_modules/ exists.', fixable: false });
303
+ for (const dep of KEY_DEPS) {
304
+ if (!exists(path.join(nm, dep))) {
305
+ out.push({ category: 'deps', name: `dep:${dep}`, severity: 'error', message: `node_modules/${dep} is missing.`, fixable: true, fixDescription: 'Run npm install.' });
306
+ }
307
+ }
308
+ if (!exists(path.join(root, 'package-lock.json'))) {
309
+ out.push({ category: 'deps', name: 'package-lock.json', severity: 'warn', message: 'package-lock.json is missing — installs are not reproducible.', fixable: false });
310
+ }
311
+ else {
312
+ out.push({ category: 'deps', name: 'package-lock.json', severity: 'ok', message: 'package-lock.json exists.', fixable: false });
313
+ }
314
+ // Only emit the all-ok if no deps errors were added above
315
+ const depErrors = out.filter(f => f.category === 'deps' && f.severity === 'error');
316
+ if (depErrors.length === 0) {
317
+ out.push({ category: 'deps', name: 'key dependencies', severity: 'ok', message: `All ${KEY_DEPS.length} key dependencies present.`, fixable: false });
318
+ }
319
+ return out;
320
+ }
321
+ // ── 7. Git state ─────────────────────────────────────────────────────────────
322
+ function checkGit(root) {
323
+ const out = [];
324
+ const isRepo = sh('git rev-parse --is-inside-work-tree', root);
325
+ if (isRepo !== 'true') {
326
+ out.push({ category: 'git', name: 'git repo', severity: 'warn', message: 'Not a git repository — file restoration is not available.', fixable: false });
327
+ return out;
328
+ }
329
+ const branch = sh('git branch --show-current', root) || '(detached)';
330
+ out.push({ category: 'git', name: 'git repo', severity: 'ok', message: `Git repository on branch "${branch}".`, fixable: false });
331
+ const status = sh('git status --short', root);
332
+ if (status) {
333
+ const lines = status.split('\n').filter(Boolean);
334
+ const trackedModified = lines.filter(l => !l.startsWith('??')).length;
335
+ out.push({
336
+ category: 'git', name: 'working tree', severity: 'warn',
337
+ message: `Working tree has ${lines.length} change(s)${trackedModified > 0 ? ` (${trackedModified} tracked)` : ' (all untracked)'}.`,
338
+ detail: lines.slice(0, 8).join('\n') + (lines.length > 8 ? `\n… and ${lines.length - 8} more` : ''),
339
+ fixable: false,
340
+ });
341
+ }
342
+ else {
343
+ out.push({ category: 'git', name: 'working tree', severity: 'ok', message: 'Working tree clean.', fixable: false });
344
+ }
345
+ return out;
346
+ }
347
+ // ── 8. Environment / API keys ────────────────────────────────────────────────
348
+ function checkEnv(root) {
349
+ const out = [];
350
+ const auraPath = path.join(root, '.aura.json');
351
+ const aura = readJson(auraPath);
352
+ const knownEnvVars = [
353
+ 'ANTHROPIC_API_KEY', 'OPENAI_API_KEY', 'GOOGLE_API_KEY',
354
+ 'XAI_API_KEY', 'OPENROUTER_API_KEY', 'XIAOMI_API_KEY',
355
+ 'ZHIPU_API_KEY', 'OPENCODE_GO_API_KEY', 'DEEPSEEK_API_KEY',
356
+ ];
357
+ const set = [];
358
+ const unset = [];
359
+ for (const v of knownEnvVars) {
360
+ if (process.env[v])
361
+ set.push(v);
362
+ else
363
+ unset.push(v);
364
+ }
365
+ out.push({
366
+ category: 'env', name: 'API keys',
367
+ severity: set.length > 0 ? 'ok' : 'warn',
368
+ message: `${set.length}/${knownEnvVars.length} API key(s) set${set.length > 0 ? ': ' + set.join(', ') : '.'}`,
369
+ fixable: false,
370
+ });
371
+ // Cross-check: .aura.json providers whose keys are unset
372
+ if (aura?.providers) {
373
+ for (const prov of aura.providers) {
374
+ if (prov.apiKeyEnv && !process.env[prov.apiKeyEnv]) {
375
+ out.push({
376
+ category: 'env', name: `provider:${prov.name ?? prov.apiKeyEnv}`,
377
+ severity: 'warn',
378
+ message: `Provider "${prov.name ?? '?'}" needs ${prov.apiKeyEnv} but it is not set.`,
379
+ fixable: false,
380
+ });
381
+ }
382
+ }
383
+ }
384
+ if (set.length === 0) {
385
+ out.push({
386
+ category: 'env', name: 'no provider',
387
+ severity: 'warn',
388
+ message: 'No API keys detected — Aura cannot run any LLM task. Run :provider or set an env var.',
389
+ fixable: false,
390
+ });
391
+ }
392
+ return out;
393
+ }
394
+ // ── 9. Version ───────────────────────────────────────────────────────────────
395
+ function checkVersion(root, _offline) {
396
+ const out = [];
397
+ const pkg = readJson(path.join(root, 'package.json'));
398
+ const current = pkg?.version ?? 'unknown';
399
+ out.push({ category: 'version', name: 'installed version', severity: 'ok', message: `Installed version: ${current}.`, fixable: false });
400
+ // The latest-version network check is done separately by runDoctor()
401
+ // (async fetch) to avoid a sync function kicking off fire-and-forget I/O.
402
+ return out;
403
+ }
404
+ /** Async latest-version check. Returns a Finding or null if it can't reach the API. */
405
+ async function checkLatestVersion(currentVersion) {
406
+ try {
407
+ const url = 'https://api.github.com/repos/milodule3-debug/aura-code/releases/latest';
408
+ const controller = new AbortController();
409
+ const timer = setTimeout(() => controller.abort(), 4000);
410
+ const res = await fetch(url, { signal: controller.signal, headers: { 'User-Agent': 'aura-doctor' } });
411
+ clearTimeout(timer);
412
+ if (!res.ok)
413
+ return null;
414
+ const data = await res.json();
415
+ if (!data.tag_name)
416
+ return null;
417
+ const latest = data.tag_name.replace(/^v/, '');
418
+ if (latest !== currentVersion) {
419
+ return {
420
+ category: 'version', name: 'latest version', severity: 'warn',
421
+ message: `Latest release is ${latest} — you are on ${currentVersion}.`,
422
+ fixable: true, fixDescription: 'Run npm install -g aura-code to update.',
423
+ };
424
+ }
425
+ return null;
426
+ }
427
+ catch {
428
+ return null;
429
+ }
430
+ }
431
+ // ── 10. Memory pipeline ──────────────────────────────────────────────────────
432
+ function checkMemory(root) {
433
+ const out = [];
434
+ const home = process.env.HOME ?? process.env.USERPROFILE ?? '~';
435
+ const auraHome = path.join(home, '.aura');
436
+ if (!exists(auraHome)) {
437
+ out.push({ category: 'memory', name: '.aura directory', severity: 'warn', message: `~/.aura/ does not exist yet — no episodes or memory recorded.`, fixable: false });
438
+ return out;
439
+ }
440
+ out.push({ category: 'memory', name: '.aura directory', severity: 'ok', message: '~/.aura/ exists.', fixable: false });
441
+ // Episodes
442
+ const episodesDir = path.join(auraHome, 'episodes');
443
+ if (exists(episodesDir)) {
444
+ let episodeCount = 0;
445
+ try {
446
+ for (const projDir of fs.readdirSync(episodesDir, { withFileTypes: true })) {
447
+ if (projDir.isDirectory()) {
448
+ episodeCount += fs.readdirSync(path.join(episodesDir, projDir.name)).filter(f => f.endsWith('.json')).length;
449
+ }
450
+ }
451
+ }
452
+ catch { /* best-effort */ }
453
+ out.push({
454
+ category: 'memory', name: 'episodes',
455
+ severity: episodeCount > 0 ? 'ok' : 'warn',
456
+ message: `${episodeCount} episode(s) recorded.`,
457
+ fixable: false,
458
+ });
459
+ }
460
+ // Dreams (project-local)
461
+ const dreamsDir = path.join(root, 'dreams');
462
+ if (exists(dreamsDir)) {
463
+ const dreams = fs.readdirSync(dreamsDir).filter(f => f.endsWith('.md'));
464
+ out.push({ category: 'memory', name: 'dreams', severity: 'ok', message: `${dreams.length} dream file(s) in dreams/.`, fixable: false });
465
+ }
466
+ // Identity
467
+ const identityPath = path.join(auraHome, 'memory', 'identity.json');
468
+ if (exists(identityPath)) {
469
+ if (readJson(identityPath)) {
470
+ out.push({ category: 'memory', name: 'identity', severity: 'ok', message: 'identity.json present and valid.', fixable: false });
471
+ }
472
+ else {
473
+ out.push({ category: 'memory', name: 'identity', severity: 'warn', message: 'identity.json is corrupted (invalid JSON).', fixable: true, fixDescription: 'Delete ~/.aura/memory/identity.json to reset, or restore from backup.' });
474
+ }
475
+ }
476
+ return out;
477
+ }
478
+ // ── 11. Repo-root hygiene ────────────────────────────────────────────────────
479
+ // Standing rule: aura-code's repo root holds only aura-code source — personal
480
+ // / utility work (dashboards, cron scripts, one-off captures) belongs in the
481
+ // sibling projects/ directory. Interactive sessions launched from the repo
482
+ // root have repeatedly written stray files here anyway (identity.json memory
483
+ // alone hasn't reliably prevented it — see repo-hygiene-projects-dir), so
484
+ // this is the active-guard half: flag any new untracked, non-gitignored
485
+ // top-level entry so it surfaces in every `aura --doctor` run instead of only
486
+ // being caught by a manual `git status --short` sweep.
487
+ function checkHygiene(root) {
488
+ const out = [];
489
+ const isRepo = sh('git rev-parse --is-inside-work-tree', root);
490
+ if (isRepo !== 'true') {
491
+ return out; // checkGit already reports "not a git repo"; nothing more to say here
492
+ }
493
+ const status = sh('git status --porcelain', root);
494
+ const strays = status.split('\n')
495
+ .filter(l => l.startsWith('?? '))
496
+ .map(l => l.slice(3).split('/')[0])
497
+ .filter((v, i, arr) => v && arr.indexOf(v) === i); // unique top-level names
498
+ if (strays.length === 0) {
499
+ out.push({ category: 'hygiene', name: 'repo root', severity: 'ok', message: 'No untracked non-aura files in the repo root.', fixable: false });
500
+ return out;
501
+ }
502
+ out.push({
503
+ category: 'hygiene', name: 'stray root files', severity: 'warn',
504
+ message: `${strays.length} untracked top-level item(s) in the repo root that git doesn't recognize: ${strays.join(', ')}.`,
505
+ detail: 'If these are personal/utility work (not aura-code source), move them to /mnt/bigdata/aura/projects/<name>/ — see the repo-hygiene standing rule.',
506
+ fixable: false,
507
+ });
508
+ return out;
509
+ }
510
+ // ── Registry ──────────────────────────────────────────────────────────────────
511
+ exports.ALL_CHECKS = [
512
+ { category: 'build', run: (r) => checkBuild(r) },
513
+ { category: 'config', run: (r) => checkConfig(r) },
514
+ { category: 'source', run: (r) => checkSource(r) },
515
+ { category: 'assets', run: (r) => checkAssets(r) },
516
+ { category: 'skills', run: (r) => checkSkills(r) },
517
+ { category: 'deps', run: (r) => checkDeps(r) },
518
+ { category: 'git', run: (r) => checkGit(r) },
519
+ { category: 'env', run: (r) => checkEnv(r) },
520
+ { category: 'version', run: (r, o) => checkVersion(r, o) },
521
+ { category: 'memory', run: (r) => checkMemory(r) },
522
+ { category: 'hygiene', run: (r) => checkHygiene(r) },
523
+ ];
524
+ //# sourceMappingURL=checks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checks.js","sourceRoot":"","sources":["../../src/doctor/checks.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { DoctorReport, DoctorOptions } from './types.js';
2
+ export declare function runDoctor(opts: DoctorOptions): Promise<DoctorReport>;
3
+ export declare function formatDoctorReport(report: DoctorReport): string;
4
+ export type { DoctorReport, DoctorOptions, Finding, Severity } from './types.js';