@burdenoff/vibe-agent 1.4.0 → 2.1.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 (164) hide show
  1. package/dist/app-31chs2a1.js +17177 -0
  2. package/dist/app-31chs2a1.js.map +170 -0
  3. package/dist/chunk-pm1hna8x-473akrq0.js +16826 -0
  4. package/dist/chunk-pm1hna8x-473akrq0.js.map +11 -0
  5. package/dist/cli.js +4686 -1146
  6. package/dist/cli.js.map +51 -1
  7. package/dist/highlights-eq9cgrbb.scm +604 -0
  8. package/dist/highlights-ghv9g403.scm +205 -0
  9. package/dist/highlights-hk7bwhj4.scm +284 -0
  10. package/dist/highlights-r812a2qc.scm +150 -0
  11. package/dist/highlights-x6tmsnaa.scm +115 -0
  12. package/dist/index-5xngv42g.js +2546 -0
  13. package/dist/index-5xngv42g.js.map +26 -0
  14. package/dist/index-6aq4nc58.js +11429 -0
  15. package/dist/index-6aq4nc58.js.map +21 -0
  16. package/dist/index-ac2ebaf8.js +4 -0
  17. package/dist/index-ac2ebaf8.js.map +9 -0
  18. package/dist/index-g8dczzvv.js +33 -0
  19. package/dist/index-g8dczzvv.js.map +9 -0
  20. package/dist/index-gmz54dkc.js +28203 -0
  21. package/dist/index-gmz54dkc.js.map +11 -0
  22. package/dist/index-t06ktmx9.js +216 -0
  23. package/dist/index-t06ktmx9.js.map +11 -0
  24. package/dist/index.js +69 -87
  25. package/dist/index.js.map +10 -1
  26. package/dist/injections-73j83es3.scm +27 -0
  27. package/dist/package-hb6db316.js +136 -0
  28. package/dist/package-hb6db316.js.map +9 -0
  29. package/dist/plugin-system-bg1pzjj9.js +450 -0
  30. package/dist/plugin-system-bg1pzjj9.js.map +11 -0
  31. package/dist/tree-sitter-javascript-nd0q4pe9.wasm +0 -0
  32. package/dist/tree-sitter-markdown-411r6y9b.wasm +0 -0
  33. package/dist/tree-sitter-markdown_inline-j5349f42.wasm +0 -0
  34. package/dist/tree-sitter-typescript-zxjzwt75.wasm +0 -0
  35. package/dist/tree-sitter-zig-e78zbjpm.wasm +0 -0
  36. package/package.json +26 -40
  37. package/dist/app.d.ts +0 -15
  38. package/dist/app.d.ts.map +0 -1
  39. package/dist/app.js +0 -600
  40. package/dist/app.js.map +0 -1
  41. package/dist/cli.d.ts +0 -3
  42. package/dist/cli.d.ts.map +0 -1
  43. package/dist/db/schema.d.ts +0 -121
  44. package/dist/db/schema.d.ts.map +0 -1
  45. package/dist/db/schema.js +0 -473
  46. package/dist/db/schema.js.map +0 -1
  47. package/dist/index.d.ts +0 -2
  48. package/dist/index.d.ts.map +0 -1
  49. package/dist/middleware/ModuleAuth.d.ts +0 -61
  50. package/dist/middleware/ModuleAuth.d.ts.map +0 -1
  51. package/dist/middleware/ModuleAuth.js +0 -223
  52. package/dist/middleware/ModuleAuth.js.map +0 -1
  53. package/dist/middleware/auth.d.ts +0 -3
  54. package/dist/middleware/auth.d.ts.map +0 -1
  55. package/dist/middleware/auth.js +0 -11
  56. package/dist/middleware/auth.js.map +0 -1
  57. package/dist/migrations/remove-notes-prompts.d.ts +0 -13
  58. package/dist/migrations/remove-notes-prompts.d.ts.map +0 -1
  59. package/dist/migrations/remove-notes-prompts.js +0 -148
  60. package/dist/migrations/remove-notes-prompts.js.map +0 -1
  61. package/dist/routes/bookmarks.d.ts +0 -3
  62. package/dist/routes/bookmarks.d.ts.map +0 -1
  63. package/dist/routes/bookmarks.js +0 -195
  64. package/dist/routes/bookmarks.js.map +0 -1
  65. package/dist/routes/config.d.ts +0 -3
  66. package/dist/routes/config.d.ts.map +0 -1
  67. package/dist/routes/config.js +0 -106
  68. package/dist/routes/config.js.map +0 -1
  69. package/dist/routes/files.d.ts +0 -3
  70. package/dist/routes/files.d.ts.map +0 -1
  71. package/dist/routes/files.js +0 -313
  72. package/dist/routes/files.js.map +0 -1
  73. package/dist/routes/git.d.ts +0 -3
  74. package/dist/routes/git.d.ts.map +0 -1
  75. package/dist/routes/git.js +0 -427
  76. package/dist/routes/git.js.map +0 -1
  77. package/dist/routes/logs.d.ts +0 -9
  78. package/dist/routes/logs.d.ts.map +0 -1
  79. package/dist/routes/logs.js +0 -107
  80. package/dist/routes/logs.js.map +0 -1
  81. package/dist/routes/moduleRegistry.d.ts +0 -41
  82. package/dist/routes/moduleRegistry.d.ts.map +0 -1
  83. package/dist/routes/moduleRegistry.js +0 -356
  84. package/dist/routes/moduleRegistry.js.map +0 -1
  85. package/dist/routes/notifications.d.ts +0 -3
  86. package/dist/routes/notifications.d.ts.map +0 -1
  87. package/dist/routes/notifications.js +0 -255
  88. package/dist/routes/notifications.js.map +0 -1
  89. package/dist/routes/plugin-state.d.ts +0 -19
  90. package/dist/routes/plugin-state.d.ts.map +0 -1
  91. package/dist/routes/plugin-state.js +0 -139
  92. package/dist/routes/plugin-state.js.map +0 -1
  93. package/dist/routes/plugins.d.ts +0 -3
  94. package/dist/routes/plugins.d.ts.map +0 -1
  95. package/dist/routes/plugins.js +0 -118
  96. package/dist/routes/plugins.js.map +0 -1
  97. package/dist/routes/projects.d.ts +0 -3
  98. package/dist/routes/projects.d.ts.map +0 -1
  99. package/dist/routes/projects.js +0 -456
  100. package/dist/routes/projects.js.map +0 -1
  101. package/dist/routes/tasks.d.ts +0 -3
  102. package/dist/routes/tasks.d.ts.map +0 -1
  103. package/dist/routes/tasks.js +0 -187
  104. package/dist/routes/tasks.js.map +0 -1
  105. package/dist/routes/tmux.d.ts +0 -3
  106. package/dist/routes/tmux.d.ts.map +0 -1
  107. package/dist/routes/tmux.js +0 -1287
  108. package/dist/routes/tmux.js.map +0 -1
  109. package/dist/routes/tunnel.d.ts +0 -25
  110. package/dist/routes/tunnel.d.ts.map +0 -1
  111. package/dist/routes/tunnel.js +0 -498
  112. package/dist/routes/tunnel.js.map +0 -1
  113. package/dist/services/ModulePermissions.d.ts +0 -100
  114. package/dist/services/ModulePermissions.d.ts.map +0 -1
  115. package/dist/services/ModulePermissions.js +0 -322
  116. package/dist/services/ModulePermissions.js.map +0 -1
  117. package/dist/services/ModuleRegistryService.d.ts +0 -152
  118. package/dist/services/ModuleRegistryService.d.ts.map +0 -1
  119. package/dist/services/ModuleRegistryService.js +0 -547
  120. package/dist/services/ModuleRegistryService.js.map +0 -1
  121. package/dist/services/agent.service.d.ts +0 -19
  122. package/dist/services/agent.service.d.ts.map +0 -1
  123. package/dist/services/agent.service.js +0 -91
  124. package/dist/services/agent.service.js.map +0 -1
  125. package/dist/services/bootstrap.d.ts +0 -22
  126. package/dist/services/bootstrap.d.ts.map +0 -1
  127. package/dist/services/bootstrap.js +0 -283
  128. package/dist/services/bootstrap.js.map +0 -1
  129. package/dist/services/completion.d.ts +0 -46
  130. package/dist/services/completion.d.ts.map +0 -1
  131. package/dist/services/completion.js +0 -317
  132. package/dist/services/completion.js.map +0 -1
  133. package/dist/services/gateway-client.d.ts +0 -61
  134. package/dist/services/gateway-client.d.ts.map +0 -1
  135. package/dist/services/gateway-client.js +0 -147
  136. package/dist/services/gateway-client.js.map +0 -1
  137. package/dist/services/logger.d.ts +0 -61
  138. package/dist/services/logger.d.ts.map +0 -1
  139. package/dist/services/logger.js +0 -223
  140. package/dist/services/logger.js.map +0 -1
  141. package/dist/services/plugin-manager.d.ts +0 -105
  142. package/dist/services/plugin-manager.d.ts.map +0 -1
  143. package/dist/services/plugin-manager.js +0 -250
  144. package/dist/services/plugin-manager.js.map +0 -1
  145. package/dist/services/plugin-state-backend.d.ts +0 -22
  146. package/dist/services/plugin-state-backend.d.ts.map +0 -1
  147. package/dist/services/plugin-state-backend.js +0 -103
  148. package/dist/services/plugin-state-backend.js.map +0 -1
  149. package/dist/services/plugin-state-external.d.ts +0 -36
  150. package/dist/services/plugin-state-external.d.ts.map +0 -1
  151. package/dist/services/plugin-state-external.js +0 -144
  152. package/dist/services/plugin-state-external.js.map +0 -1
  153. package/dist/services/plugin-state-router.d.ts +0 -40
  154. package/dist/services/plugin-state-router.d.ts.map +0 -1
  155. package/dist/services/plugin-state-router.js +0 -82
  156. package/dist/services/plugin-state-router.js.map +0 -1
  157. package/dist/services/port-utils.d.ts +0 -11
  158. package/dist/services/port-utils.d.ts.map +0 -1
  159. package/dist/services/port-utils.js +0 -39
  160. package/dist/services/port-utils.js.map +0 -1
  161. package/dist/services/service-manager.d.ts +0 -50
  162. package/dist/services/service-manager.d.ts.map +0 -1
  163. package/dist/services/service-manager.js +0 -389
  164. package/dist/services/service-manager.js.map +0 -1
@@ -0,0 +1,216 @@
1
+ // @bun
2
+ import {
3
+ logger
4
+ } from "./plugin-system-bg1pzjj9.js";
5
+
6
+ // src/core/service-registry.ts
7
+ class ServiceRegistry {
8
+ providers = new Map;
9
+ services = new Map;
10
+ registerProvider(type, provider, pluginName) {
11
+ const existing = this.providers.get(type);
12
+ if (existing) {
13
+ logger.warn("service-registry", `Replacing ${type} provider: ${existing.name} (from ${existing.pluginName}) \u2192 ${provider.name} (from ${pluginName})`);
14
+ }
15
+ this.providers.set(type, {
16
+ type,
17
+ name: provider.name,
18
+ instance: provider,
19
+ pluginName
20
+ });
21
+ logger.info("service-registry", `Registered ${type} provider: ${provider.name} (from ${pluginName})`);
22
+ }
23
+ getProvider(type) {
24
+ const entry = this.providers.get(type);
25
+ return entry?.instance;
26
+ }
27
+ hasProvider(type) {
28
+ return this.providers.has(type);
29
+ }
30
+ unregisterProvider(type, pluginName) {
31
+ const entry = this.providers.get(type);
32
+ if (entry?.pluginName === pluginName) {
33
+ this.providers.delete(type);
34
+ logger.info("service-registry", `Unregistered ${type} provider: ${entry.name} (from ${pluginName})`);
35
+ return true;
36
+ }
37
+ return false;
38
+ }
39
+ registerService(pluginName, serviceName, service) {
40
+ const key = `${pluginName}:${serviceName}`;
41
+ this.services.set(key, {
42
+ name: serviceName,
43
+ instance: service,
44
+ pluginName
45
+ });
46
+ logger.info("service-registry", `Registered service: ${key}`);
47
+ }
48
+ getService(pluginName, serviceName) {
49
+ const key = `${pluginName}:${serviceName}`;
50
+ const entry = this.services.get(key);
51
+ return entry?.instance;
52
+ }
53
+ unregisterServices(pluginName) {
54
+ const keysToDelete = [];
55
+ for (const [key, entry] of this.services) {
56
+ if (entry.pluginName === pluginName) {
57
+ keysToDelete.push(key);
58
+ }
59
+ }
60
+ for (const key of keysToDelete) {
61
+ this.services.delete(key);
62
+ }
63
+ if (keysToDelete.length > 0) {
64
+ logger.info("service-registry", `Unregistered ${keysToDelete.length} services from ${pluginName}`);
65
+ }
66
+ }
67
+ listProviders() {
68
+ return Array.from(this.providers.values()).map((p) => ({
69
+ type: p.type,
70
+ name: p.name,
71
+ pluginName: p.pluginName
72
+ }));
73
+ }
74
+ listServices() {
75
+ return Array.from(this.services.values()).map((s) => ({
76
+ pluginName: s.pluginName,
77
+ serviceName: s.name
78
+ }));
79
+ }
80
+ clear() {
81
+ this.providers.clear();
82
+ this.services.clear();
83
+ }
84
+ }
85
+
86
+ // src/services/bootstrap.service.ts
87
+ import { execSync } from "child_process";
88
+ import os from "os";
89
+ function checkCommand(cmd) {
90
+ try {
91
+ const version = execSync(`${cmd} --version 2>&1 || ${cmd} -v 2>&1`, {
92
+ timeout: 5000,
93
+ stdio: "pipe"
94
+ }).toString().trim().split(`
95
+ `)[0];
96
+ return { installed: true, version };
97
+ } catch {
98
+ return { installed: false };
99
+ }
100
+ }
101
+ function checkDependencies() {
102
+ const deps = [
103
+ { name: "bun", cmd: "bun", required: true, category: "runtime" },
104
+ { name: "tmux", cmd: "tmux", required: false, category: "session" },
105
+ { name: "ttyd", cmd: "ttyd", required: false, category: "session" },
106
+ {
107
+ name: "cloudflared",
108
+ cmd: "cloudflared",
109
+ required: false,
110
+ category: "tunnel"
111
+ }
112
+ ];
113
+ return deps.map((dep) => {
114
+ const { installed, version } = checkCommand(dep.cmd);
115
+ return {
116
+ name: dep.name,
117
+ installed,
118
+ version,
119
+ required: dep.required,
120
+ category: dep.category
121
+ };
122
+ });
123
+ }
124
+ async function installDependencies(deps) {
125
+ const platform = os.platform();
126
+ const result = {
127
+ success: true,
128
+ installed: [],
129
+ failed: [],
130
+ skipped: []
131
+ };
132
+ const checks = checkDependencies();
133
+ const toInstall = deps ? checks.filter((d) => deps.includes(d.name) && !d.installed) : checks.filter((d) => !d.installed);
134
+ for (const dep of toInstall) {
135
+ try {
136
+ logger.info("bootstrap", `Installing ${dep.name}...`);
137
+ if (dep.name === "tmux") {
138
+ await installTmux(platform);
139
+ } else if (dep.name === "ttyd") {
140
+ await installTtyd(platform);
141
+ } else if (dep.name === "cloudflared") {
142
+ await installCloudflared(platform);
143
+ } else {
144
+ result.skipped.push(dep.name);
145
+ continue;
146
+ }
147
+ const check = checkCommand(dep.name);
148
+ if (check.installed) {
149
+ result.installed.push(dep.name);
150
+ logger.info("bootstrap", `Successfully installed ${dep.name}: ${check.version}`);
151
+ } else {
152
+ result.failed.push(dep.name);
153
+ result.success = false;
154
+ logger.error("bootstrap", `Failed to install ${dep.name}: command not found after install`);
155
+ }
156
+ } catch (err) {
157
+ result.failed.push(dep.name);
158
+ result.success = false;
159
+ logger.error("bootstrap", `Failed to install ${dep.name}: ${err}`);
160
+ }
161
+ }
162
+ return result;
163
+ }
164
+ async function installTmux(platform) {
165
+ if (platform === "darwin") {
166
+ execSync("brew install tmux", { timeout: 120000, stdio: "pipe" });
167
+ } else if (platform === "linux") {
168
+ try {
169
+ execSync("sudo apt-get install -y tmux", {
170
+ timeout: 120000,
171
+ stdio: "pipe"
172
+ });
173
+ } catch {
174
+ execSync("sudo yum install -y tmux", { timeout: 120000, stdio: "pipe" });
175
+ }
176
+ } else {
177
+ throw new Error(`Unsupported platform for tmux: ${platform}`);
178
+ }
179
+ }
180
+ async function installTtyd(platform) {
181
+ if (platform === "darwin") {
182
+ execSync("brew install ttyd", { timeout: 120000, stdio: "pipe" });
183
+ } else if (platform === "linux") {
184
+ try {
185
+ execSync("sudo snap install ttyd --classic", {
186
+ timeout: 120000,
187
+ stdio: "pipe"
188
+ });
189
+ } catch {
190
+ const arch = os.arch() === "x64" ? "x86_64" : os.arch();
191
+ execSync(`curl -sLo /tmp/ttyd https://github.com/tsl0922/ttyd/releases/latest/download/ttyd.${arch} && sudo install /tmp/ttyd /usr/local/bin/ttyd`, { timeout: 120000, stdio: "pipe" });
192
+ }
193
+ } else {
194
+ throw new Error(`Unsupported platform for ttyd: ${platform}`);
195
+ }
196
+ }
197
+ async function installCloudflared(platform) {
198
+ if (platform === "darwin") {
199
+ execSync("brew install cloudflared", { timeout: 120000, stdio: "pipe" });
200
+ } else if (platform === "linux") {
201
+ const arch = os.arch();
202
+ let archStr = "amd64";
203
+ if (arch === "arm64" || arch === "aarch64")
204
+ archStr = "arm64";
205
+ else if (arch === "arm")
206
+ archStr = "arm";
207
+ execSync(`curl -sLo /tmp/cloudflared https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-${archStr} && sudo install /tmp/cloudflared /usr/local/bin/cloudflared`, { timeout: 120000, stdio: "pipe" });
208
+ } else {
209
+ throw new Error(`Unsupported platform for cloudflared: ${platform}`);
210
+ }
211
+ }
212
+
213
+ export { ServiceRegistry, checkDependencies, installDependencies };
214
+
215
+ //# debugId=D2B021929084AA6364756E2164756E21
216
+ //# sourceMappingURL=index-t06ktmx9.js.map
@@ -0,0 +1,11 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/core/service-registry.ts", "../src/services/bootstrap.service.ts"],
4
+ "sourcesContent": [
5
+ "/**\n * Service Registry\n *\n * Central registry for plugin-provided services and providers.\n * Plugins register providers (tunnel, session) and named services\n * that other plugins or the core agent can consume.\n *\n * Pattern: Decorator-based registration on the Elysia app instance.\n */\n\nimport type { TunnelProvider } from \"./providers/tunnel.provider.js\";\nimport type { SessionProvider } from \"./providers/session.provider.js\";\nimport { logger } from \"../services/logger.js\";\n\ntype ProviderType = \"tunnel\" | \"session\";\n\ninterface RegisteredProvider {\n type: ProviderType;\n name: string;\n instance: TunnelProvider | SessionProvider;\n pluginName: string;\n}\n\ninterface RegisteredService {\n name: string;\n instance: unknown;\n pluginName: string;\n}\n\nexport class ServiceRegistry {\n private providers = new Map<ProviderType, RegisteredProvider>();\n private services = new Map<string, RegisteredService>(); // key: \"pluginName:serviceName\"\n\n // ── Provider Registration ───────────────────────────────────────────\n\n /**\n * Register a provider for a given type.\n * Only one provider per type is active at a time (last one wins).\n */\n registerProvider(\n type: ProviderType,\n provider: TunnelProvider | SessionProvider,\n pluginName: string,\n ): void {\n const existing = this.providers.get(type);\n if (existing) {\n logger.warn(\n \"service-registry\",\n `Replacing ${type} provider: ${existing.name} (from ${existing.pluginName}) → ${provider.name} (from ${pluginName})`,\n );\n }\n\n this.providers.set(type, {\n type,\n name: provider.name,\n instance: provider,\n pluginName,\n });\n\n logger.info(\n \"service-registry\",\n `Registered ${type} provider: ${provider.name} (from ${pluginName})`,\n );\n }\n\n /**\n * Get the active provider for a given type.\n */\n getProvider<T extends TunnelProvider | SessionProvider>(\n type: ProviderType,\n ): T | undefined {\n const entry = this.providers.get(type);\n return entry?.instance as T | undefined;\n }\n\n /**\n * Check if a provider is registered for a type.\n */\n hasProvider(type: ProviderType): boolean {\n return this.providers.has(type);\n }\n\n /**\n * Unregister a provider by plugin name.\n */\n unregisterProvider(type: ProviderType, pluginName: string): boolean {\n const entry = this.providers.get(type);\n if (entry?.pluginName === pluginName) {\n this.providers.delete(type);\n logger.info(\n \"service-registry\",\n `Unregistered ${type} provider: ${entry.name} (from ${pluginName})`,\n );\n return true;\n }\n return false;\n }\n\n // ── Named Service Registration ──────────────────────────────────────\n\n /**\n * Register a named service from a plugin.\n */\n registerService(\n pluginName: string,\n serviceName: string,\n service: unknown,\n ): void {\n const key = `${pluginName}:${serviceName}`;\n this.services.set(key, {\n name: serviceName,\n instance: service,\n pluginName,\n });\n\n logger.info(\"service-registry\", `Registered service: ${key}`);\n }\n\n /**\n * Get a named service.\n */\n getService<T>(pluginName: string, serviceName: string): T | undefined {\n const key = `${pluginName}:${serviceName}`;\n const entry = this.services.get(key);\n return entry?.instance as T | undefined;\n }\n\n /**\n * Unregister all services from a plugin.\n */\n unregisterServices(pluginName: string): void {\n const keysToDelete: string[] = [];\n for (const [key, entry] of this.services) {\n if (entry.pluginName === pluginName) {\n keysToDelete.push(key);\n }\n }\n for (const key of keysToDelete) {\n this.services.delete(key);\n }\n if (keysToDelete.length > 0) {\n logger.info(\n \"service-registry\",\n `Unregistered ${keysToDelete.length} services from ${pluginName}`,\n );\n }\n }\n\n // ── Introspection ───────────────────────────────────────────────────\n\n /**\n * List all registered providers.\n */\n listProviders(): Array<{\n type: ProviderType;\n name: string;\n pluginName: string;\n }> {\n return Array.from(this.providers.values()).map((p) => ({\n type: p.type,\n name: p.name,\n pluginName: p.pluginName,\n }));\n }\n\n /**\n * List all registered services.\n */\n listServices(): Array<{\n pluginName: string;\n serviceName: string;\n }> {\n return Array.from(this.services.values()).map((s) => ({\n pluginName: s.pluginName,\n serviceName: s.name,\n }));\n }\n\n /**\n * Clear all registrations.\n */\n clear(): void {\n this.providers.clear();\n this.services.clear();\n }\n}\n",
6
+ "/**\n * Bootstrap Service\n *\n * Handles dependency checking and auto-installation for the vibe agent.\n * Checks for required system tools and optionally installs them.\n *\n * Required prerequisites:\n * - bun (runtime - already present if running this code)\n * - tmux (installed via session-tmux plugin, but checked here for setup)\n * - ttyd (installed via session-tmux plugin, but checked here for setup)\n * - cloudflared (installed via tunnel-cloudflare plugin, but checked here for setup)\n */\n\nimport { execSync } from \"node:child_process\";\nimport os from \"node:os\";\n\nimport { logger } from \"./logger.js\";\n\n// ── Types ────────────────────────────────────────────────────────────────\n\nexport interface DependencyCheck {\n name: string;\n installed: boolean;\n version?: string;\n required: boolean;\n category: \"runtime\" | \"session\" | \"tunnel\" | \"tool\";\n}\n\nexport interface SetupResult {\n success: boolean;\n installed: string[];\n failed: string[];\n skipped: string[];\n}\n\n// ── Check Functions ─────────────────────────────────────────────────────\n\nfunction checkCommand(cmd: string): { installed: boolean; version?: string } {\n try {\n const version = execSync(`${cmd} --version 2>&1 || ${cmd} -v 2>&1`, {\n timeout: 5000,\n stdio: \"pipe\",\n })\n .toString()\n .trim()\n .split(\"\\n\")[0];\n return { installed: true, version };\n } catch {\n return { installed: false };\n }\n}\n\n/**\n * Check all dependencies and return their status.\n */\nexport function checkDependencies(): DependencyCheck[] {\n const deps: Array<{\n name: string;\n cmd: string;\n required: boolean;\n category: DependencyCheck[\"category\"];\n }> = [\n { name: \"bun\", cmd: \"bun\", required: true, category: \"runtime\" },\n { name: \"tmux\", cmd: \"tmux\", required: false, category: \"session\" },\n { name: \"ttyd\", cmd: \"ttyd\", required: false, category: \"session\" },\n {\n name: \"cloudflared\",\n cmd: \"cloudflared\",\n required: false,\n category: \"tunnel\",\n },\n ];\n\n return deps.map((dep) => {\n const { installed, version } = checkCommand(dep.cmd);\n return {\n name: dep.name,\n installed,\n version,\n required: dep.required,\n category: dep.category,\n };\n });\n}\n\n/**\n * Install missing dependencies.\n */\nexport async function installDependencies(\n deps?: string[],\n): Promise<SetupResult> {\n const platform = os.platform();\n const result: SetupResult = {\n success: true,\n installed: [],\n failed: [],\n skipped: [],\n };\n\n const checks = checkDependencies();\n const toInstall = deps\n ? checks.filter((d) => deps.includes(d.name) && !d.installed)\n : checks.filter((d) => !d.installed);\n\n for (const dep of toInstall) {\n try {\n logger.info(\"bootstrap\", `Installing ${dep.name}...`);\n\n if (dep.name === \"tmux\") {\n await installTmux(platform);\n } else if (dep.name === \"ttyd\") {\n await installTtyd(platform);\n } else if (dep.name === \"cloudflared\") {\n await installCloudflared(platform);\n } else {\n result.skipped.push(dep.name);\n continue;\n }\n\n // Verify installation\n const check = checkCommand(dep.name);\n if (check.installed) {\n result.installed.push(dep.name);\n logger.info(\n \"bootstrap\",\n `Successfully installed ${dep.name}: ${check.version}`,\n );\n } else {\n result.failed.push(dep.name);\n result.success = false;\n logger.error(\n \"bootstrap\",\n `Failed to install ${dep.name}: command not found after install`,\n );\n }\n } catch (err) {\n result.failed.push(dep.name);\n result.success = false;\n logger.error(\"bootstrap\", `Failed to install ${dep.name}: ${err}`);\n }\n }\n\n return result;\n}\n\n// ── Platform-Specific Installers ────────────────────────────────────────\n\nasync function installTmux(platform: string): Promise<void> {\n if (platform === \"darwin\") {\n execSync(\"brew install tmux\", { timeout: 120_000, stdio: \"pipe\" });\n } else if (platform === \"linux\") {\n try {\n execSync(\"sudo apt-get install -y tmux\", {\n timeout: 120_000,\n stdio: \"pipe\",\n });\n } catch {\n execSync(\"sudo yum install -y tmux\", { timeout: 120_000, stdio: \"pipe\" });\n }\n } else {\n throw new Error(`Unsupported platform for tmux: ${platform}`);\n }\n}\n\nasync function installTtyd(platform: string): Promise<void> {\n if (platform === \"darwin\") {\n execSync(\"brew install ttyd\", { timeout: 120_000, stdio: \"pipe\" });\n } else if (platform === \"linux\") {\n try {\n execSync(\"sudo snap install ttyd --classic\", {\n timeout: 120_000,\n stdio: \"pipe\",\n });\n } catch {\n // Try direct download\n const arch = os.arch() === \"x64\" ? \"x86_64\" : os.arch();\n execSync(\n `curl -sLo /tmp/ttyd https://github.com/tsl0922/ttyd/releases/latest/download/ttyd.${arch} && sudo install /tmp/ttyd /usr/local/bin/ttyd`,\n { timeout: 120_000, stdio: \"pipe\" },\n );\n }\n } else {\n throw new Error(`Unsupported platform for ttyd: ${platform}`);\n }\n}\n\nasync function installCloudflared(platform: string): Promise<void> {\n if (platform === \"darwin\") {\n execSync(\"brew install cloudflared\", { timeout: 120_000, stdio: \"pipe\" });\n } else if (platform === \"linux\") {\n const arch = os.arch();\n let archStr = \"amd64\";\n if (arch === \"arm64\" || (arch as string) === \"aarch64\") archStr = \"arm64\";\n else if (arch === \"arm\") archStr = \"arm\";\n\n execSync(\n `curl -sLo /tmp/cloudflared https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-${archStr} && sudo install /tmp/cloudflared /usr/local/bin/cloudflared`,\n { timeout: 120_000, stdio: \"pipe\" },\n );\n } else {\n throw new Error(`Unsupported platform for cloudflared: ${platform}`);\n }\n}\n"
7
+ ],
8
+ "mappings": "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",
9
+ "debugId": "D2B021929084AA6364756E2164756E21",
10
+ "names": []
11
+ }
package/dist/index.js CHANGED
@@ -1,88 +1,70 @@
1
- import "dotenv/config";
2
- import { startServer, getAgentApiKey } from "./app.js";
3
- import { bootstrap, checkDependencies } from "./services/bootstrap.js";
4
- import { startAgentTunnel } from "./routes/tunnel.js";
5
- // ── Global error handlers ─────────────────────────────────────────────
6
- // When running as a daemon, stdout/stderr are redirected to a log file.
7
- // Without these handlers, unexpected errors would silently kill the process.
8
- process.on("uncaughtException", (err) => {
9
- console.error(`[FATAL] Uncaught exception: ${err.message}`);
10
- console.error(err.stack);
11
- process.exit(1);
12
- });
13
- process.on("unhandledRejection", (reason) => {
14
- console.error(`[FATAL] Unhandled rejection: ${reason instanceof Error ? reason.message : reason}`);
15
- if (reason instanceof Error && reason.stack)
16
- console.error(reason.stack);
17
- process.exit(1);
18
- });
19
- // Ignore SIGPIPE this can happen if a piped consumer (e.g. parent CLI
20
- // process) exits while we're still writing. In daemon mode with file
21
- // descriptor redirect this shouldn't occur, but we guard defensively.
22
- process.on("SIGPIPE", () => {
23
- // Intentionally ignored
24
- });
25
- const start = async () => {
26
- try {
27
- // Auto-bootstrap dependencies on first run (unless SKIP_BOOTSTRAP=true)
28
- if (process.env.SKIP_BOOTSTRAP !== "true") {
29
- const deps = checkDependencies();
30
- const missing = Object.entries(deps).filter(([, v]) => !v.available);
31
- if (missing.length > 0) {
32
- console.log(`\n📦 Missing dependencies: ${missing.map(([k]) => k).join(", ")}`);
33
- console.log("Running auto-bootstrap...\n");
34
- const results = await bootstrap({ verbose: true });
35
- const failed = results.filter((r) => r.status === "failed");
36
- if (failed.length > 0) {
37
- console.warn(`\n⚠️ Could not install: ${failed.map((f) => f.tool).join(", ")}`);
38
- console.warn("Some features may not work. Run `vibecontrols-agent setup` for manual install.\n");
39
- }
40
- else {
41
- console.log("\n✅ All dependencies bootstrapped successfully!\n");
42
- }
43
- }
44
- else {
45
- console.log(" All system dependencies verified");
46
- }
47
- }
48
- const app = await startServer();
49
- const port = Number(process.env.PORT || 3005);
50
- await app.listen({ port, host: "0.0.0.0" });
51
- console.log(`🚀 VibeControls Agent is running on http://localhost:${port}`);
52
- // Auto-start the single cloudflared tunnel for this agent (unless disabled).
53
- // The tunnel URL is exposed via GET /api/agent-tunnel — the user copies it
54
- // into the agent's tunnel URL field in the VibeControls UI.
55
- let tunnelUrl = null;
56
- if (process.env.AGENT_TUNNEL !== "false") {
57
- try {
58
- tunnelUrl = await startAgentTunnel(port);
59
- }
60
- catch (err) {
61
- console.warn("⚠️ Failed to start agent tunnel:", err instanceof Error ? err.message : err);
62
- }
63
- }
64
- // ── Print formatted connection details ────────────────────────────
65
- const apiKey = getAgentApiKey();
66
- console.log(`\n \x1b[1m── Agent Connection Details ──\x1b[0m\n`);
67
- console.log(` \x1b[1mAgent URL:\x1b[0m http://localhost:${port}`);
68
- console.log(` \x1b[1mAPI Key:\x1b[0m ${apiKey}`);
69
- if (process.env.AGENT_TUNNEL === "false") {
70
- console.log(` \x1b[1mTunnel URL:\x1b[0m \x1b[33m(disabled via AGENT_TUNNEL=false)\x1b[0m`);
71
- }
72
- else if (tunnelUrl) {
73
- console.log(` \x1b[1mTunnel URL:\x1b[0m \x1b[32m${tunnelUrl}\x1b[0m`);
74
- }
75
- else {
76
- console.log(` \x1b[1mTunnel URL:\x1b[0m \x1b[33m(not running)\x1b[0m`);
77
- console.log(` Start a tunnel manually: POST /api/agent-tunnel/start`);
78
- }
79
- console.log(`\n Copy the API Key and Tunnel URL into the VibeControls UI agent configuration.`);
80
- console.log();
1
+ #!/usr/bin/env bun
2
+ // @bun
3
+ import"./index-t06ktmx9.js";
4
+ import"./index-g8dczzvv.js";
5
+ import {
6
+ createApp
7
+ } from "./app-31chs2a1.js";
8
+ import {
9
+ logger
10
+ } from "./plugin-system-bg1pzjj9.js";
11
+
12
+ // src/index.ts
13
+ if (typeof Bun === "undefined") {
14
+ console.error("ERROR: VibeControls Agent requires Bun runtime.");
15
+ console.error("Install Bun: https://bun.sh");
16
+ process.exit(1);
17
+ }
18
+ var port = parseInt(process.env.PORT || "3005", 10);
19
+ var host = process.env.HOST || "0.0.0.0";
20
+ var dbPath = process.env.DB_PATH || undefined;
21
+ var apiKey = process.env.AGENT_API_KEY || undefined;
22
+ var logLevel = process.env.LOG_LEVEL || "info";
23
+ var corsOrigin = process.env.CORS_ORIGIN || undefined;
24
+ async function main() {
25
+ logger.info("server", "Starting VibeControls Agent...", {
26
+ runtime: "bun",
27
+ bunVersion: Bun.version,
28
+ port,
29
+ host,
30
+ env: "development"
31
+ });
32
+ try {
33
+ const { app, start, stop } = await createApp({
34
+ port,
35
+ host,
36
+ dbPath,
37
+ apiKey,
38
+ logLevel,
39
+ corsOrigin
40
+ });
41
+ await start();
42
+ const appAny = app;
43
+ const key = appAny.decorator?.apiKey ?? appAny.store?.apiKey;
44
+ if (key) {
45
+ logger.info("server", `API Key: ${String(key).substring(0, 12)}...`);
46
+ console.log(`
47
+ \uD83D\uDD11 Agent API Key: ${key}
48
+ `);
81
49
  }
82
- catch (err) {
83
- console.error("Error starting server:", err);
84
- process.exit(1);
85
- }
86
- };
87
- start();
88
- //# sourceMappingURL=index.js.map
50
+ console.log(`\u2705 VibeControls Agent running on http://${host}:${port}`);
51
+ console.log(` Health: http://localhost:${port}/health`);
52
+ console.log(` API: http://localhost:${port}/api/agent/status
53
+ `);
54
+ const shutdown = async (signal) => {
55
+ logger.info("server", `Received ${signal}, shutting down...`);
56
+ await stop();
57
+ process.exit(0);
58
+ };
59
+ process.on("SIGINT", () => shutdown("SIGINT"));
60
+ process.on("SIGTERM", () => shutdown("SIGTERM"));
61
+ } catch (err) {
62
+ logger.error("server", "Failed to start agent", { error: String(err) });
63
+ console.error("\u274C Failed to start VibeControls Agent:", err);
64
+ process.exit(1);
65
+ }
66
+ }
67
+ main();
68
+
69
+ //# debugId=3C4CE68D5F47B28F64756E2164756E21
70
+ //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1,10 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/index.ts"],
4
+ "sourcesContent": [
5
+ "#!/usr/bin/env bun\n/**\n * VibeControls Agent — Server Entry Point\n *\n * Starts the Elysia-based agent server with all routes, plugins,\n * and WebSocket handlers.\n *\n * Environment variables:\n * PORT — Server port (default: 3005)\n * HOST — Bind address (default: 0.0.0.0)\n * DB_PATH — SQLite database path (default: ~/.vibecontrols/agent.db)\n * AGENT_API_KEY — Static API key (default: auto-generated)\n * LOG_LEVEL — Minimum log level: debug|info|warn|error (default: info)\n * CORS_ORIGIN — CORS origin (default: *)\n * NODE_ENV — Environment: development|production (default: production)\n */\n\nimport { createApp } from \"./app.js\";\nimport { logger } from \"./services/logger.js\";\nimport type { LogLevel } from \"./core/types.js\";\n\n// ── Runtime Check ───────────────────────────────────────────────────────\n\nif (typeof Bun === \"undefined\") {\n console.error(\"ERROR: VibeControls Agent requires Bun runtime.\");\n console.error(\"Install Bun: https://bun.sh\");\n process.exit(1);\n}\n\n// ── Configuration ───────────────────────────────────────────────────────\n\nconst port = parseInt(process.env.PORT || \"3005\", 10);\nconst host = process.env.HOST || \"0.0.0.0\";\nconst dbPath = process.env.DB_PATH || undefined; // Default handled by AgentDatabase\nconst apiKey = process.env.AGENT_API_KEY || undefined;\nconst logLevel = (process.env.LOG_LEVEL || \"info\") as LogLevel;\nconst corsOrigin = process.env.CORS_ORIGIN || undefined;\n\n// ── Startup ─────────────────────────────────────────────────────────────\n\nasync function main() {\n logger.info(\"server\", \"Starting VibeControls Agent...\", {\n runtime: \"bun\",\n bunVersion: Bun.version,\n port,\n host,\n env: process.env.NODE_ENV || \"production\",\n });\n\n try {\n const { app, start, stop } = await createApp({\n port,\n host,\n dbPath,\n apiKey,\n logLevel,\n corsOrigin,\n });\n\n await start();\n\n // Print API key for user\n const appAny = app as unknown as Record<string, Record<string, unknown>>;\n const key = appAny.decorator?.apiKey ?? appAny.store?.apiKey;\n if (key) {\n logger.info(\"server\", `API Key: ${String(key).substring(0, 12)}...`);\n console.log(`\\n🔑 Agent API Key: ${key}\\n`);\n }\n\n console.log(`✅ VibeControls Agent running on http://${host}:${port}`);\n console.log(` Health: http://localhost:${port}/health`);\n console.log(` API: http://localhost:${port}/api/agent/status\\n`);\n\n // ── Graceful Shutdown ─────────────────────────────────────────────\n const shutdown = async (signal: string) => {\n logger.info(\"server\", `Received ${signal}, shutting down...`);\n await stop();\n process.exit(0);\n };\n\n process.on(\"SIGINT\", () => shutdown(\"SIGINT\"));\n process.on(\"SIGTERM\", () => shutdown(\"SIGTERM\"));\n } catch (err) {\n logger.error(\"server\", \"Failed to start agent\", { error: String(err) });\n console.error(\"❌ Failed to start VibeControls Agent:\", err);\n process.exit(1);\n }\n}\n\nmain();\n"
6
+ ],
7
+ "mappings": ";;;;;;;;;;;;AAuBA,IAAI,OAAO,QAAQ,aAAa;AAAA,EAC9B,QAAQ,MAAM,iDAAiD;AAAA,EAC/D,QAAQ,MAAM,6BAA6B;AAAA,EAC3C,QAAQ,KAAK,CAAC;AAChB;AAIA,IAAM,OAAO,SAAS,QAAQ,IAAI,QAAQ,QAAQ,EAAE;AACpD,IAAM,OAAO,QAAQ,IAAI,QAAQ;AACjC,IAAM,SAAS,QAAQ,IAAI,WAAW;AACtC,IAAM,SAAS,QAAQ,IAAI,iBAAiB;AAC5C,IAAM,WAAY,QAAQ,IAAI,aAAa;AAC3C,IAAM,aAAa,QAAQ,IAAI,eAAe;AAI9C,eAAe,IAAI,GAAG;AAAA,EACpB,OAAO,KAAK,UAAU,kCAAkC;AAAA,IACtD,SAAS;AAAA,IACT,YAAY,IAAI;AAAA,IAChB;AAAA,IACA;AAAA,IACA,KAAK;AAAA,EACP,CAAC;AAAA,EAED,IAAI;AAAA,IACF,QAAQ,KAAK,OAAO,SAAS,MAAM,UAAU;AAAA,MAC3C;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,IAED,MAAM,MAAM;AAAA,IAGZ,MAAM,SAAS;AAAA,IACf,MAAM,MAAM,OAAO,WAAW,UAAU,OAAO,OAAO;AAAA,IACtD,IAAI,KAAK;AAAA,MACP,OAAO,KAAK,UAAU,YAAY,OAAO,GAAG,EAAE,UAAU,GAAG,EAAE,MAAM;AAAA,MACnE,QAAQ,IAAI;AAAA,8BAAsB;AAAA,CAAO;AAAA,IAC3C;AAAA,IAEA,QAAQ,IAAI,+CAAyC,QAAQ,MAAM;AAAA,IACnE,QAAQ,IAAI,+BAA+B,aAAa;AAAA,IACxD,QAAQ,IAAI,+BAA+B;AAAA,CAAyB;AAAA,IAGpE,MAAM,WAAW,OAAO,WAAmB;AAAA,MACzC,OAAO,KAAK,UAAU,YAAY,0BAA0B;AAAA,MAC5D,MAAM,KAAK;AAAA,MACX,QAAQ,KAAK,CAAC;AAAA;AAAA,IAGhB,QAAQ,GAAG,UAAU,MAAM,SAAS,QAAQ,CAAC;AAAA,IAC7C,QAAQ,GAAG,WAAW,MAAM,SAAS,SAAS,CAAC;AAAA,IAC/C,OAAO,KAAK;AAAA,IACZ,OAAO,MAAM,UAAU,yBAAyB,EAAE,OAAO,OAAO,GAAG,EAAE,CAAC;AAAA,IACtE,QAAQ,MAAM,8CAAwC,GAAG;AAAA,IACzD,QAAQ,KAAK,CAAC;AAAA;AAAA;AAIlB,KAAK;",
8
+ "debugId": "3C4CE68D5F47B28F64756E2164756E21",
9
+ "names": []
10
+ }
@@ -0,0 +1,27 @@
1
+ ; Query from: https://raw.githubusercontent.com/nvim-treesitter/nvim-treesitter/refs/heads/master/queries/markdown/injections.scm
2
+ (fenced_code_block
3
+ (info_string
4
+ (language) @_lang)
5
+ (code_fence_content) @injection.content
6
+ (#set-lang-from-info-string! @_lang))
7
+
8
+ ((html_block) @injection.content
9
+ (#set! injection.language "html")
10
+ (#set! injection.combined)
11
+ (#set! injection.include-children))
12
+
13
+ ((minus_metadata) @injection.content
14
+ (#set! injection.language "yaml")
15
+ (#offset! @injection.content 1 0 -1 0)
16
+ (#set! injection.include-children))
17
+
18
+ ((plus_metadata) @injection.content
19
+ (#set! injection.language "toml")
20
+ (#offset! @injection.content 1 0 -1 0)
21
+ (#set! injection.include-children))
22
+
23
+ ([
24
+ (inline)
25
+ (pipe_table_cell)
26
+ ] @injection.content
27
+ (#set! injection.language "markdown_inline"))
@@ -0,0 +1,136 @@
1
+ // @bun
2
+ import"./index-g8dczzvv.js";
3
+
4
+ // package.json
5
+ var name = "@burdenoff/vibe-agent";
6
+ var version = "2.1.1";
7
+ var main = "./dist/index.js";
8
+ var type = "module";
9
+ var bin = {
10
+ vibe: "dist/cli.js"
11
+ };
12
+ var scripts = {
13
+ dev: "bun run --watch ./src/index.ts",
14
+ start: "bun run ./dist/index.js",
15
+ build: "bun build ./src/index.ts ./src/cli.ts --outdir=./dist --target=bun --splitting --sourcemap",
16
+ lint: "eslint ./src",
17
+ "lint:fix": "eslint ./src --fix",
18
+ format: "prettier . --write",
19
+ "format:check": "prettier . --check",
20
+ "type:check": "tsc --noEmit",
21
+ test: "bun test tests/ 2>/dev/null || echo 'Tests skipped'",
22
+ clean: "rimraf dist coverage",
23
+ prebuild: "bun run clean",
24
+ postbuild: "bun scripts/fix-duplicate-exports.ts && chmod +x dist/cli.js && echo 'Build completed successfully'",
25
+ sanity: "bun run format:check && bun run lint && bun run type:check && bun run build"
26
+ };
27
+ var keywords = [
28
+ "vibecontrols",
29
+ "vibe",
30
+ "agent",
31
+ "task-runner",
32
+ "terminal",
33
+ "tmux",
34
+ "tunnel",
35
+ "cloudflared",
36
+ "cli",
37
+ "devtools",
38
+ "remote-development",
39
+ "bun",
40
+ "elysia"
41
+ ];
42
+ var author = {
43
+ name: "Vignesh T.V",
44
+ email: "vignesh@burdenoff.com",
45
+ url: "https://github.com/tvvignesh"
46
+ };
47
+ var license = "SEE LICENSE IN LICENSE";
48
+ var description = "VibeControls Agent CLI - Remote development environment management with terminal multiplexing, tunnels, and extensible plugins. Powered by Bun + Elysia.";
49
+ var dependencies = {
50
+ "@elysiajs/cors": "^1.3.1",
51
+ commander: "^14.0.3",
52
+ elysia: "^1.3.2"
53
+ };
54
+ var optionalDependencies = {
55
+ "@opentui/core": ">=0.0.0",
56
+ "@opentui/react": ">=0.0.0"
57
+ };
58
+ var devDependencies = {
59
+ "@eslint/js": "^10.0.1",
60
+ "@types/bun": "^1.2.7",
61
+ "@types/react": "^19.1.4",
62
+ eslint: "^10.0.1",
63
+ globals: "^17.3.0",
64
+ prettier: "^3.8.1",
65
+ react: "^19.1.0",
66
+ rimraf: "^6.1.3",
67
+ typescript: "^5.9.3",
68
+ "typescript-eslint": "^8.56.0"
69
+ };
70
+ var peerDependencies = {
71
+ react: "^19.0.0"
72
+ };
73
+ var repository = {
74
+ type: "git",
75
+ url: "git+https://github.com/algoshred/vibecontrols-agent.git"
76
+ };
77
+ var bugs = {
78
+ url: "https://github.com/algoshred/vibecontrols-agent/issues"
79
+ };
80
+ var homepage = "https://vibecontrols.com";
81
+ var publishConfig = {
82
+ access: "public",
83
+ registry: "https://registry.npmjs.org/"
84
+ };
85
+ var files = [
86
+ "dist/**/*",
87
+ "README.md",
88
+ "LICENSE",
89
+ ".env.example"
90
+ ];
91
+ var package_default = {
92
+ name,
93
+ version,
94
+ main,
95
+ type,
96
+ bin,
97
+ scripts,
98
+ keywords,
99
+ author,
100
+ license,
101
+ description,
102
+ dependencies,
103
+ optionalDependencies,
104
+ devDependencies,
105
+ peerDependencies,
106
+ repository,
107
+ bugs,
108
+ homepage,
109
+ publishConfig,
110
+ files
111
+ };
112
+ export {
113
+ version,
114
+ type,
115
+ scripts,
116
+ repository,
117
+ publishConfig,
118
+ peerDependencies,
119
+ optionalDependencies,
120
+ name,
121
+ main,
122
+ license,
123
+ keywords,
124
+ homepage,
125
+ files,
126
+ devDependencies,
127
+ description,
128
+ dependencies,
129
+ package_default as default,
130
+ bugs,
131
+ bin,
132
+ author
133
+ };
134
+
135
+ //# debugId=94B93EAA0F2FFFD364756E2164756E21
136
+ //# sourceMappingURL=package-hb6db316.js.map
@@ -0,0 +1,9 @@
1
+ {
2
+ "version": 3,
3
+ "sources": [],
4
+ "sourcesContent": [
5
+ ],
6
+ "mappings": "",
7
+ "debugId": "94B93EAA0F2FFFD364756E2164756E21",
8
+ "names": []
9
+ }