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,255 @@
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.pluginsDir = pluginsDir;
37
+ exports.marketplacesDir = marketplacesDir;
38
+ exports.loadAllPlugins = loadAllPlugins;
39
+ exports.loadPlugin = loadPlugin;
40
+ /**
41
+ * Plugin loader — reads installed plugins (Claude Code format) from
42
+ * ~/.aura/plugins/<name> and parses their commands, agents, skills, and hooks.
43
+ *
44
+ * Loading is tolerant: a malformed file skips that file, a malformed plugin
45
+ * skips that plugin — plugins must never brick the CLI.
46
+ */
47
+ const fs = __importStar(require("fs"));
48
+ const os = __importStar(require("os"));
49
+ const path = __importStar(require("path"));
50
+ const frontmatter_js_1 = require("./frontmatter.js");
51
+ function pluginsDir() {
52
+ return process.env.AURA_PLUGIN_DIR
53
+ ?? path.join(process.env.HOME ?? os.homedir(), '.aura', 'plugins');
54
+ }
55
+ function marketplacesDir() {
56
+ return process.env.AURA_MARKETPLACE_DIR
57
+ ?? path.join(process.env.HOME ?? os.homedir(), '.aura', 'marketplaces');
58
+ }
59
+ /** Load every plugin installed in the plugins dir. Never throws. */
60
+ function loadAllPlugins() {
61
+ const dir = pluginsDir();
62
+ let entries;
63
+ try {
64
+ entries = fs.readdirSync(dir).filter(e => {
65
+ try {
66
+ return fs.statSync(path.join(dir, e)).isDirectory();
67
+ }
68
+ catch {
69
+ return false;
70
+ }
71
+ });
72
+ }
73
+ catch {
74
+ return [];
75
+ }
76
+ const plugins = [];
77
+ for (const entry of entries.sort()) {
78
+ const plugin = loadPlugin(path.join(dir, entry));
79
+ if (plugin)
80
+ plugins.push(plugin);
81
+ }
82
+ return plugins;
83
+ }
84
+ /** Load a single plugin directory. Returns null when it isn't a plugin. */
85
+ function loadPlugin(dir) {
86
+ let manifest = null;
87
+ try {
88
+ const raw = JSON.parse(fs.readFileSync(path.join(dir, '.claude-plugin', 'plugin.json'), 'utf8'));
89
+ if (typeof raw === 'object' && raw !== null && typeof raw.name === 'string') {
90
+ manifest = {
91
+ name: raw.name,
92
+ version: typeof raw.version === 'string' ? raw.version : undefined,
93
+ description: typeof raw.description === 'string' ? raw.description : undefined,
94
+ author: typeof raw.author === 'string' ? raw.author
95
+ : typeof raw.author?.name === 'string' ? raw.author.name : undefined,
96
+ };
97
+ }
98
+ }
99
+ catch { /* manifest optional — fall back to dir name */ }
100
+ const name = manifest?.name ?? path.basename(dir);
101
+ const commands = loadCommands(dir, name);
102
+ const agents = loadAgents(dir, name);
103
+ const skills = loadSkills(dir, name);
104
+ const hooks = loadHooks(dir, name);
105
+ const mcpServerCount = countMcpServers(dir);
106
+ // A directory with no manifest and no plugin content isn't a plugin.
107
+ if (!manifest && commands.length === 0 && agents.length === 0 && skills.length === 0 && hooks.length === 0) {
108
+ return null;
109
+ }
110
+ return {
111
+ name, path: dir,
112
+ manifest: manifest ?? { name },
113
+ commands, agents, skills, hooks, mcpServerCount,
114
+ };
115
+ }
116
+ function mdFilesRecursive(dir, base = dir) {
117
+ let out = [];
118
+ let entries;
119
+ try {
120
+ entries = fs.readdirSync(dir, { withFileTypes: true });
121
+ }
122
+ catch {
123
+ return [];
124
+ }
125
+ for (const e of entries) {
126
+ const full = path.join(dir, e.name);
127
+ if (e.isDirectory())
128
+ out = out.concat(mdFilesRecursive(full, base));
129
+ else if (e.isFile() && e.name.endsWith('.md'))
130
+ out.push(full);
131
+ }
132
+ return out;
133
+ }
134
+ function loadCommands(pluginDir, pluginName) {
135
+ const dir = path.join(pluginDir, 'commands');
136
+ const out = [];
137
+ for (const file of mdFilesRecursive(dir).sort()) {
138
+ try {
139
+ const { data, body } = (0, frontmatter_js_1.parseFrontmatter)(fs.readFileSync(file, 'utf8'));
140
+ // commands/foo.md → "foo"; commands/git/commit.md → "git:commit"
141
+ const rel = path.relative(dir, file).replace(/\.md$/, '');
142
+ const name = rel.split(path.sep).join(':');
143
+ out.push({
144
+ name, pluginName,
145
+ description: str(data.description),
146
+ argumentHint: str(data['argument-hint']),
147
+ body: body.trim(),
148
+ filePath: file,
149
+ });
150
+ }
151
+ catch { /* skip malformed command file */ }
152
+ }
153
+ return out;
154
+ }
155
+ function loadAgents(pluginDir, pluginName) {
156
+ const dir = path.join(pluginDir, 'agents');
157
+ const out = [];
158
+ for (const file of mdFilesRecursive(dir).sort()) {
159
+ try {
160
+ const { data, body } = (0, frontmatter_js_1.parseFrontmatter)(fs.readFileSync(file, 'utf8'));
161
+ out.push({
162
+ name: str(data.name) ?? path.basename(file, '.md'),
163
+ pluginName,
164
+ description: str(data.description),
165
+ systemPrompt: body.trim(),
166
+ filePath: file,
167
+ });
168
+ }
169
+ catch { /* skip malformed agent file */ }
170
+ }
171
+ return out;
172
+ }
173
+ function loadSkills(pluginDir, pluginName) {
174
+ const dir = path.join(pluginDir, 'skills');
175
+ const out = [];
176
+ let entries;
177
+ try {
178
+ entries = fs.readdirSync(dir);
179
+ }
180
+ catch {
181
+ return [];
182
+ }
183
+ for (const entry of entries.sort()) {
184
+ const skillFile = path.join(dir, entry, 'SKILL.md');
185
+ try {
186
+ const { data, body } = (0, frontmatter_js_1.parseFrontmatter)(fs.readFileSync(skillFile, 'utf8'));
187
+ out.push({
188
+ name: str(data.name) ?? entry,
189
+ pluginName,
190
+ description: str(data.description),
191
+ body: body.trim(),
192
+ dir: path.join(dir, entry),
193
+ });
194
+ }
195
+ catch { /* no SKILL.md or malformed — skip */ }
196
+ }
197
+ return out;
198
+ }
199
+ /**
200
+ * hooks/hooks.json, Claude Code schema:
201
+ * { "hooks": { "PreToolUse": [ { "matcher": "Bash",
202
+ * "hooks": [ { "type": "command", "command": "…", "timeout": 60 } ] } ] } }
203
+ * Flattened to HookEntry[]. Only PreToolUse/PostToolUse are supported — other
204
+ * events are silently ignored (they have no aura equivalent yet).
205
+ */
206
+ function loadHooks(pluginDir, pluginName) {
207
+ const out = [];
208
+ let raw;
209
+ try {
210
+ raw = JSON.parse(fs.readFileSync(path.join(pluginDir, 'hooks', 'hooks.json'), 'utf8'));
211
+ }
212
+ catch {
213
+ return [];
214
+ }
215
+ const events = raw?.hooks;
216
+ if (typeof events !== 'object' || events === null)
217
+ return [];
218
+ for (const event of ['PreToolUse', 'PostToolUse']) {
219
+ const groups = events[event];
220
+ if (!Array.isArray(groups))
221
+ continue;
222
+ for (const group of groups) {
223
+ if (typeof group !== 'object' || group === null)
224
+ continue;
225
+ const matcher = typeof group.matcher === 'string' ? group.matcher : undefined;
226
+ const hooks = Array.isArray(group.hooks) ? group.hooks : [];
227
+ for (const h of hooks) {
228
+ if (typeof h?.command !== 'string')
229
+ continue;
230
+ out.push({
231
+ event, matcher,
232
+ command: h.command,
233
+ timeout: typeof h.timeout === 'number' ? h.timeout : undefined,
234
+ pluginName,
235
+ pluginRoot: pluginDir,
236
+ });
237
+ }
238
+ }
239
+ }
240
+ return out;
241
+ }
242
+ function countMcpServers(pluginDir) {
243
+ try {
244
+ const raw = JSON.parse(fs.readFileSync(path.join(pluginDir, '.mcp.json'), 'utf8'));
245
+ const servers = raw?.mcpServers;
246
+ return typeof servers === 'object' && servers !== null ? Object.keys(servers).length : 0;
247
+ }
248
+ catch {
249
+ return 0;
250
+ }
251
+ }
252
+ function str(v) {
253
+ return typeof v === 'string' && v !== '' ? v : undefined;
254
+ }
255
+ //# sourceMappingURL=loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/plugins/loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import type { LoadedPlugin, Marketplace } from './types.js';
2
+ /**
3
+ * Register a marketplace from a GitHub shorthand, git URL, or local path.
4
+ * Returns the loaded marketplace.
5
+ */
6
+ export declare function addMarketplace(source: string): Promise<Marketplace>;
7
+ export declare function listMarketplaces(): Marketplace[];
8
+ export declare function removeMarketplace(name: string): boolean;
9
+ export interface InstallResult {
10
+ plugin: LoadedPlugin;
11
+ /** Notes worth surfacing (e.g. unsupported MCP servers). */
12
+ warnings: string[];
13
+ }
14
+ /**
15
+ * Install a plugin. Accepted specs:
16
+ * "name@marketplace" — from a registered marketplace
17
+ * "name" — from any registered marketplace that has it
18
+ * "owner/repo" — GitHub repo containing a plugin
19
+ * git URL — same
20
+ * local path — directory containing a plugin
21
+ */
22
+ export declare function installPlugin(spec: string): Promise<InstallResult>;
23
+ export declare function removePlugin(name: string): boolean;
@@ -0,0 +1,281 @@
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.addMarketplace = addMarketplace;
37
+ exports.listMarketplaces = listMarketplaces;
38
+ exports.removeMarketplace = removeMarketplace;
39
+ exports.installPlugin = installPlugin;
40
+ exports.removePlugin = removePlugin;
41
+ /**
42
+ * Plugin marketplaces & installation — Claude Code compatible.
43
+ *
44
+ * A marketplace is a git repo containing .claude-plugin/marketplace.json:
45
+ * { "name": "...", "owner": {...}, "plugins": [ {"name", "source", ...} ] }
46
+ *
47
+ * Sources we resolve (the formats found across published marketplaces):
48
+ * "./plugins/foo" — path inside the marketplace repo
49
+ * "owner/repo" — GitHub shorthand
50
+ * "https://…/repo.git" — any git URL
51
+ * { "source": "github", "repo": "o/r" } — object form
52
+ * { "source": "git", "url": "…" }
53
+ * { "source": "path"|"local", "path": "…" }— path inside the marketplace repo
54
+ *
55
+ * Layout on disk:
56
+ * ~/.aura/marketplaces/<name> — cloned marketplace repos
57
+ * ~/.aura/plugins/<name> — installed plugins (self-contained copies)
58
+ */
59
+ const child_process_1 = require("child_process");
60
+ const fs = __importStar(require("fs"));
61
+ const os = __importStar(require("os"));
62
+ const path = __importStar(require("path"));
63
+ const loader_js_1 = require("./loader.js");
64
+ function run(cmd, args, cwd) {
65
+ return new Promise((resolve, reject) => {
66
+ (0, child_process_1.execFile)(cmd, args, { cwd, maxBuffer: 16 * 1024 * 1024, timeout: 120_000 }, (err, stdout, stderr) => {
67
+ if (err)
68
+ reject(new Error(stderr.trim() || err.message));
69
+ else
70
+ resolve(stdout);
71
+ });
72
+ });
73
+ }
74
+ function gitUrlFor(source) {
75
+ if (/^(https?|git|ssh|file):\/\//.test(source) || source.endsWith('.git'))
76
+ return source;
77
+ if (/^[\w.-]+\/[\w.-]+$/.test(source))
78
+ return `https://github.com/${source}.git`;
79
+ return null;
80
+ }
81
+ async function cloneTo(url, dest) {
82
+ fs.mkdirSync(path.dirname(dest), { recursive: true });
83
+ await run('git', ['clone', '--depth', '1', '--quiet', url, dest]);
84
+ // The clone is a snapshot install, not a working checkout — drop .git so
85
+ // installed plugins are plain directories (update = reinstall).
86
+ fs.rmSync(path.join(dest, '.git'), { recursive: true, force: true });
87
+ }
88
+ function copyDir(src, dest) {
89
+ fs.mkdirSync(path.dirname(dest), { recursive: true });
90
+ fs.cpSync(src, dest, { recursive: true });
91
+ fs.rmSync(path.join(dest, '.git'), { recursive: true, force: true });
92
+ }
93
+ // ─────────────────────────────────────────────────────────────────────────────
94
+ // Marketplaces
95
+ // ─────────────────────────────────────────────────────────────────────────────
96
+ function readMarketplaceJson(dir) {
97
+ try {
98
+ const raw = JSON.parse(fs.readFileSync(path.join(dir, '.claude-plugin', 'marketplace.json'), 'utf8'));
99
+ if (typeof raw?.name !== 'string')
100
+ return null;
101
+ const plugins = Array.isArray(raw.plugins)
102
+ ? raw.plugins
103
+ .filter((p) => typeof p === 'object' && p !== null && typeof p.name === 'string')
104
+ .map((p) => ({
105
+ name: p.name,
106
+ description: typeof p.description === 'string' ? p.description : undefined,
107
+ source: p.source,
108
+ }))
109
+ : [];
110
+ return { name: raw.name, description: typeof raw.description === 'string' ? raw.description : undefined, plugins };
111
+ }
112
+ catch {
113
+ return null;
114
+ }
115
+ }
116
+ /**
117
+ * Register a marketplace from a GitHub shorthand, git URL, or local path.
118
+ * Returns the loaded marketplace.
119
+ */
120
+ async function addMarketplace(source) {
121
+ const tmp = fs.mkdtempSync(path.join(os.tmpdir(), 'aura-market-'));
122
+ const staging = path.join(tmp, 'repo');
123
+ try {
124
+ const url = gitUrlFor(source);
125
+ if (url && !fs.existsSync(source)) {
126
+ await cloneTo(url, staging);
127
+ }
128
+ else if (fs.existsSync(source) && fs.statSync(source).isDirectory()) {
129
+ copyDir(path.resolve(source), staging);
130
+ }
131
+ else {
132
+ throw new Error(`Not a git repo shorthand, URL, or local directory: ${source}`);
133
+ }
134
+ const meta = readMarketplaceJson(staging);
135
+ if (!meta) {
136
+ throw new Error('No valid .claude-plugin/marketplace.json found — is this a marketplace repo? (To install a single plugin, use: aura --plugin install <source>)');
137
+ }
138
+ const dest = path.join((0, loader_js_1.marketplacesDir)(), meta.name);
139
+ fs.rmSync(dest, { recursive: true, force: true });
140
+ copyDir(staging, dest);
141
+ return { name: meta.name, path: dest, description: meta.description, plugins: meta.plugins };
142
+ }
143
+ finally {
144
+ fs.rmSync(tmp, { recursive: true, force: true });
145
+ }
146
+ }
147
+ function listMarketplaces() {
148
+ const dir = (0, loader_js_1.marketplacesDir)();
149
+ let entries;
150
+ try {
151
+ entries = fs.readdirSync(dir);
152
+ }
153
+ catch {
154
+ return [];
155
+ }
156
+ const out = [];
157
+ for (const entry of entries.sort()) {
158
+ const mDir = path.join(dir, entry);
159
+ const meta = readMarketplaceJson(mDir);
160
+ if (meta)
161
+ out.push({ name: meta.name, path: mDir, description: meta.description, plugins: meta.plugins });
162
+ }
163
+ return out;
164
+ }
165
+ function removeMarketplace(name) {
166
+ const dir = path.join((0, loader_js_1.marketplacesDir)(), name);
167
+ if (!fs.existsSync(dir))
168
+ return false;
169
+ fs.rmSync(dir, { recursive: true, force: true });
170
+ return true;
171
+ }
172
+ /**
173
+ * Install a plugin. Accepted specs:
174
+ * "name@marketplace" — from a registered marketplace
175
+ * "name" — from any registered marketplace that has it
176
+ * "owner/repo" — GitHub repo containing a plugin
177
+ * git URL — same
178
+ * local path — directory containing a plugin
179
+ */
180
+ async function installPlugin(spec) {
181
+ // name@marketplace / bare marketplace name
182
+ const at = spec.indexOf('@');
183
+ if (at > 0 || (!spec.includes('/') && !fs.existsSync(spec))) {
184
+ const pluginName = at > 0 ? spec.slice(0, at) : spec;
185
+ const marketName = at > 0 ? spec.slice(at + 1) : undefined;
186
+ return installFromMarketplace(pluginName, marketName);
187
+ }
188
+ // Local path
189
+ if (fs.existsSync(spec) && fs.statSync(spec).isDirectory()) {
190
+ return finalizeInstall(path.resolve(spec), 'copy');
191
+ }
192
+ // GitHub shorthand or git URL
193
+ const url = gitUrlFor(spec);
194
+ if (!url)
195
+ throw new Error(`Unrecognized plugin source: ${spec}`);
196
+ const tmp = fs.mkdtempSync(path.join(os.tmpdir(), 'aura-plugin-'));
197
+ try {
198
+ const staging = path.join(tmp, 'repo');
199
+ await cloneTo(url, staging);
200
+ return finalizeInstall(staging, 'move');
201
+ }
202
+ finally {
203
+ fs.rmSync(tmp, { recursive: true, force: true });
204
+ }
205
+ }
206
+ async function installFromMarketplace(pluginName, marketName) {
207
+ const markets = listMarketplaces();
208
+ if (markets.length === 0) {
209
+ throw new Error('No marketplaces registered. Add one first: aura --plugin marketplace add <owner/repo>');
210
+ }
211
+ const candidates = markets
212
+ .filter(m => !marketName || m.name === marketName)
213
+ .map(m => ({ market: m, entry: m.plugins.find(p => p.name === pluginName) }))
214
+ .filter((c) => !!c.entry);
215
+ if (marketName && !markets.some(m => m.name === marketName)) {
216
+ throw new Error(`Marketplace not registered: ${marketName}`);
217
+ }
218
+ if (candidates.length === 0) {
219
+ throw new Error(`Plugin "${pluginName}" not found in ${marketName ?? 'any registered marketplace'}.`);
220
+ }
221
+ if (candidates.length > 1) {
222
+ throw new Error(`Plugin "${pluginName}" exists in multiple marketplaces (${candidates.map(c => c.market.name).join(', ')}) — use name@marketplace.`);
223
+ }
224
+ const { market, entry } = candidates[0];
225
+ const src = entry.source;
226
+ // Path inside the marketplace repo (string "./…" or object {source: path|local})
227
+ const relPath = typeof src === 'string' && !gitUrlFor(src) ? src
228
+ : typeof src === 'object' && src !== null && ['path', 'local'].includes(String(src.source))
229
+ ? String(src.path ?? '')
230
+ : null;
231
+ if (relPath) {
232
+ const abs = path.resolve(market.path, relPath);
233
+ if (!abs.startsWith(fs.realpathSync(market.path) + path.sep) && abs !== fs.realpathSync(market.path)) {
234
+ throw new Error(`Marketplace entry escapes its repo: ${relPath}`);
235
+ }
236
+ if (!fs.existsSync(abs))
237
+ throw new Error(`Marketplace entry path missing: ${relPath}`);
238
+ return finalizeInstall(abs, 'copy', pluginName);
239
+ }
240
+ // Remote source: "owner/repo" string, {source: github, repo}, {source: git|url, url}
241
+ const url = typeof src === 'string' ? gitUrlFor(src)
242
+ : typeof src === 'object' && src !== null
243
+ ? gitUrlFor(String(src.repo ?? src.url ?? ''))
244
+ : null;
245
+ if (!url)
246
+ throw new Error(`Unsupported source format for "${pluginName}" in marketplace ${market.name}.`);
247
+ const tmp = fs.mkdtempSync(path.join(os.tmpdir(), 'aura-plugin-'));
248
+ try {
249
+ const staging = path.join(tmp, 'repo');
250
+ await cloneTo(url, staging);
251
+ return finalizeInstall(staging, 'move', pluginName);
252
+ }
253
+ finally {
254
+ fs.rmSync(tmp, { recursive: true, force: true });
255
+ }
256
+ }
257
+ /** Validate the staged plugin, copy it into pluginsDir under its real name. */
258
+ function finalizeInstall(stagingDir, mode, fallbackName) {
259
+ const probe = (0, loader_js_1.loadPlugin)(stagingDir);
260
+ if (!probe) {
261
+ throw new Error('Directory contains no plugin (no .claude-plugin/plugin.json, commands/, agents/, skills/, or hooks/).');
262
+ }
263
+ const name = probe.manifest.name ?? fallbackName ?? path.basename(stagingDir);
264
+ const dest = path.join((0, loader_js_1.pluginsDir)(), name);
265
+ fs.rmSync(dest, { recursive: true, force: true });
266
+ copyDir(stagingDir, dest);
267
+ const plugin = (0, loader_js_1.loadPlugin)(dest);
268
+ const warnings = [];
269
+ if (plugin.mcpServerCount > 0) {
270
+ warnings.push(`declares ${plugin.mcpServerCount} MCP server(s) — aura has no MCP client yet, those are ignored.`);
271
+ }
272
+ return { plugin, warnings };
273
+ }
274
+ function removePlugin(name) {
275
+ const dir = path.join((0, loader_js_1.pluginsDir)(), name);
276
+ if (!fs.existsSync(dir))
277
+ return false;
278
+ fs.rmSync(dir, { recursive: true, force: true });
279
+ return true;
280
+ }
281
+ //# sourceMappingURL=market.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"market.js","sourceRoot":"","sources":["../../src/plugins/market.ts"],"names":[],"mappings":"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"}