musonda 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (196) hide show
  1. package/IMPLEMENTATION.md +432 -0
  2. package/README.md +119 -0
  3. package/dist/agent/harness.d.ts +25 -0
  4. package/dist/agent/harness.js +215 -0
  5. package/dist/agent/harness.js.map +1 -0
  6. package/dist/agent/openaiResponsesClient.d.ts +35 -0
  7. package/dist/agent/openaiResponsesClient.js +250 -0
  8. package/dist/agent/openaiResponsesClient.js.map +1 -0
  9. package/dist/agent/systemPrompt.d.ts +9 -0
  10. package/dist/agent/systemPrompt.js +100 -0
  11. package/dist/agent/systemPrompt.js.map +1 -0
  12. package/dist/agent/types.d.ts +53 -0
  13. package/dist/agent/types.js +2 -0
  14. package/dist/agent/types.js.map +1 -0
  15. package/dist/cli/commands/chat.d.ts +6 -0
  16. package/dist/cli/commands/chat.js +8 -0
  17. package/dist/cli/commands/chat.js.map +1 -0
  18. package/dist/cli/commands/doctor.d.ts +4 -0
  19. package/dist/cli/commands/doctor.js +336 -0
  20. package/dist/cli/commands/doctor.js.map +1 -0
  21. package/dist/cli/commands/gateway.d.ts +20 -0
  22. package/dist/cli/commands/gateway.js +135 -0
  23. package/dist/cli/commands/gateway.js.map +1 -0
  24. package/dist/cli/commands/help.d.ts +4 -0
  25. package/dist/cli/commands/help.js +159 -0
  26. package/dist/cli/commands/help.js.map +1 -0
  27. package/dist/cli/commands/plugins.d.ts +18 -0
  28. package/dist/cli/commands/plugins.js +250 -0
  29. package/dist/cli/commands/plugins.js.map +1 -0
  30. package/dist/cli/commands/service.d.ts +16 -0
  31. package/dist/cli/commands/service.js +136 -0
  32. package/dist/cli/commands/service.js.map +1 -0
  33. package/dist/cli/commands/setup.d.ts +4 -0
  34. package/dist/cli/commands/setup.js +8 -0
  35. package/dist/cli/commands/setup.js.map +1 -0
  36. package/dist/cli/commands/status.d.ts +4 -0
  37. package/dist/cli/commands/status.js +73 -0
  38. package/dist/cli/commands/status.js.map +1 -0
  39. package/dist/cli/commands/update.d.ts +22 -0
  40. package/dist/cli/commands/update.js +226 -0
  41. package/dist/cli/commands/update.js.map +1 -0
  42. package/dist/cli/daemon.d.ts +33 -0
  43. package/dist/cli/daemon.js +208 -0
  44. package/dist/cli/daemon.js.map +1 -0
  45. package/dist/cli/interactiveMenu.d.ts +5 -0
  46. package/dist/cli/interactiveMenu.js +225 -0
  47. package/dist/cli/interactiveMenu.js.map +1 -0
  48. package/dist/cli/musondaCli.d.ts +30 -0
  49. package/dist/cli/musondaCli.js +269 -0
  50. package/dist/cli/musondaCli.js.map +1 -0
  51. package/dist/cli/ui.d.ts +49 -0
  52. package/dist/cli/ui.js +90 -0
  53. package/dist/cli/ui.js.map +1 -0
  54. package/dist/cli.d.ts +9 -0
  55. package/dist/cli.js +315 -0
  56. package/dist/cli.js.map +1 -0
  57. package/dist/config/loader.d.ts +12 -0
  58. package/dist/config/loader.js +217 -0
  59. package/dist/config/loader.js.map +1 -0
  60. package/dist/config/paths.d.ts +11 -0
  61. package/dist/config/paths.js +18 -0
  62. package/dist/config/paths.js.map +1 -0
  63. package/dist/config/types.d.ts +246 -0
  64. package/dist/config/types.js +155 -0
  65. package/dist/config/types.js.map +1 -0
  66. package/dist/gateway/channels/cli.d.ts +37 -0
  67. package/dist/gateway/channels/cli.js +298 -0
  68. package/dist/gateway/channels/cli.js.map +1 -0
  69. package/dist/gateway/channels/discord.d.ts +18 -0
  70. package/dist/gateway/channels/discord.js +419 -0
  71. package/dist/gateway/channels/discord.js.map +1 -0
  72. package/dist/gateway/channels/slack.d.ts +26 -0
  73. package/dist/gateway/channels/slack.js +470 -0
  74. package/dist/gateway/channels/slack.js.map +1 -0
  75. package/dist/gateway/channels/webhook.d.ts +18 -0
  76. package/dist/gateway/channels/webhook.js +49 -0
  77. package/dist/gateway/channels/webhook.js.map +1 -0
  78. package/dist/gateway/http.d.ts +33 -0
  79. package/dist/gateway/http.js +605 -0
  80. package/dist/gateway/http.js.map +1 -0
  81. package/dist/gateway/server.d.ts +38 -0
  82. package/dist/gateway/server.js +233 -0
  83. package/dist/gateway/server.js.map +1 -0
  84. package/dist/gateway/types.d.ts +28 -0
  85. package/dist/gateway/types.js +2 -0
  86. package/dist/gateway/types.js.map +1 -0
  87. package/dist/index.d.ts +17 -0
  88. package/dist/index.js +32 -0
  89. package/dist/index.js.map +1 -0
  90. package/dist/memory/memoryManager.d.ts +22 -0
  91. package/dist/memory/memoryManager.js +200 -0
  92. package/dist/memory/memoryManager.js.map +1 -0
  93. package/dist/memory/storage.d.ts +24 -0
  94. package/dist/memory/storage.js +187 -0
  95. package/dist/memory/storage.js.map +1 -0
  96. package/dist/memory/types.d.ts +43 -0
  97. package/dist/memory/types.js +2 -0
  98. package/dist/memory/types.js.map +1 -0
  99. package/dist/plugins/manifest.d.ts +23 -0
  100. package/dist/plugins/manifest.js +185 -0
  101. package/dist/plugins/manifest.js.map +1 -0
  102. package/dist/plugins/mcp/mcpBridge.d.ts +31 -0
  103. package/dist/plugins/mcp/mcpBridge.js +115 -0
  104. package/dist/plugins/mcp/mcpBridge.js.map +1 -0
  105. package/dist/plugins/mcp/mcpClient.d.ts +43 -0
  106. package/dist/plugins/mcp/mcpClient.js +309 -0
  107. package/dist/plugins/mcp/mcpClient.js.map +1 -0
  108. package/dist/plugins/mcp/mcpConfig.d.ts +34 -0
  109. package/dist/plugins/mcp/mcpConfig.js +326 -0
  110. package/dist/plugins/mcp/mcpConfig.js.map +1 -0
  111. package/dist/plugins/mcp/types.d.ts +48 -0
  112. package/dist/plugins/mcp/types.js +2 -0
  113. package/dist/plugins/mcp/types.js.map +1 -0
  114. package/dist/plugins/pluginManager.d.ts +164 -0
  115. package/dist/plugins/pluginManager.js +1016 -0
  116. package/dist/plugins/pluginManager.js.map +1 -0
  117. package/dist/plugins/skills/frontmatterParser.d.ts +28 -0
  118. package/dist/plugins/skills/frontmatterParser.js +189 -0
  119. package/dist/plugins/skills/frontmatterParser.js.map +1 -0
  120. package/dist/plugins/skills/skillDiscovery.d.ts +15 -0
  121. package/dist/plugins/skills/skillDiscovery.js +148 -0
  122. package/dist/plugins/skills/skillDiscovery.js.map +1 -0
  123. package/dist/plugins/skills/skillTools.d.ts +8 -0
  124. package/dist/plugins/skills/skillTools.js +195 -0
  125. package/dist/plugins/skills/skillTools.js.map +1 -0
  126. package/dist/plugins/skills/types.d.ts +25 -0
  127. package/dist/plugins/skills/types.js +2 -0
  128. package/dist/plugins/skills/types.js.map +1 -0
  129. package/dist/plugins/types.d.ts +30 -0
  130. package/dist/plugins/types.js +2 -0
  131. package/dist/plugins/types.js.map +1 -0
  132. package/dist/scheduler/scheduler.d.ts +25 -0
  133. package/dist/scheduler/scheduler.js +239 -0
  134. package/dist/scheduler/scheduler.js.map +1 -0
  135. package/dist/scheduler/types.d.ts +39 -0
  136. package/dist/scheduler/types.js +2 -0
  137. package/dist/scheduler/types.js.map +1 -0
  138. package/dist/security/childProcessEnv.d.ts +5 -0
  139. package/dist/security/childProcessEnv.js +42 -0
  140. package/dist/security/childProcessEnv.js.map +1 -0
  141. package/dist/security/fileSandbox.d.ts +153 -0
  142. package/dist/security/fileSandbox.js +779 -0
  143. package/dist/security/fileSandbox.js.map +1 -0
  144. package/dist/service/index.d.ts +30 -0
  145. package/dist/service/index.js +41 -0
  146. package/dist/service/index.js.map +1 -0
  147. package/dist/service/systemd.d.ts +36 -0
  148. package/dist/service/systemd.js +409 -0
  149. package/dist/service/systemd.js.map +1 -0
  150. package/dist/service/types.d.ts +118 -0
  151. package/dist/service/types.js +6 -0
  152. package/dist/service/types.js.map +1 -0
  153. package/dist/tools/builtin/calcTools.d.ts +2 -0
  154. package/dist/tools/builtin/calcTools.js +51 -0
  155. package/dist/tools/builtin/calcTools.js.map +1 -0
  156. package/dist/tools/builtin/fileTools.d.ts +11 -0
  157. package/dist/tools/builtin/fileTools.js +352 -0
  158. package/dist/tools/builtin/fileTools.js.map +1 -0
  159. package/dist/tools/builtin/memoryTools.d.ts +4 -0
  160. package/dist/tools/builtin/memoryTools.js +123 -0
  161. package/dist/tools/builtin/memoryTools.js.map +1 -0
  162. package/dist/tools/builtin/noteTools.d.ts +4 -0
  163. package/dist/tools/builtin/noteTools.js +91 -0
  164. package/dist/tools/builtin/noteTools.js.map +1 -0
  165. package/dist/tools/builtin/pluginTools.d.ts +29 -0
  166. package/dist/tools/builtin/pluginTools.js +406 -0
  167. package/dist/tools/builtin/pluginTools.js.map +1 -0
  168. package/dist/tools/builtin/scheduleTools.d.ts +4 -0
  169. package/dist/tools/builtin/scheduleTools.js +156 -0
  170. package/dist/tools/builtin/scheduleTools.js.map +1 -0
  171. package/dist/tools/builtin/timeTools.d.ts +2 -0
  172. package/dist/tools/builtin/timeTools.js +41 -0
  173. package/dist/tools/builtin/timeTools.js.map +1 -0
  174. package/dist/tools/builtin/webTools.d.ts +12 -0
  175. package/dist/tools/builtin/webTools.js +325 -0
  176. package/dist/tools/builtin/webTools.js.map +1 -0
  177. package/dist/tools/registry.d.ts +15 -0
  178. package/dist/tools/registry.js +111 -0
  179. package/dist/tools/registry.js.map +1 -0
  180. package/dist/tools/types.d.ts +41 -0
  181. package/dist/tools/types.js +2 -0
  182. package/dist/tools/types.js.map +1 -0
  183. package/dist/utils/logger.d.ts +29 -0
  184. package/dist/utils/logger.js +124 -0
  185. package/dist/utils/logger.js.map +1 -0
  186. package/dist/wizard/onboarding.d.ts +3 -0
  187. package/dist/wizard/onboarding.js +408 -0
  188. package/dist/wizard/onboarding.js.map +1 -0
  189. package/package.json +69 -0
  190. package/plugins/example-calc/mcp.json +11 -0
  191. package/plugins/example-calc/plugin.json +12 -0
  192. package/plugins/example-calc/server.mjs +92 -0
  193. package/plugins/example-calc/skills/math-assistant/SKILL.md +15 -0
  194. package/plugins/plugin-builder/plugin.json +12 -0
  195. package/plugins/plugin-builder/skills/create-plugin/SKILL.md +149 -0
  196. package/plugins/plugin-builder/skills/manage-plugins/SKILL.md +157 -0
@@ -0,0 +1,159 @@
1
+ /**
2
+ * Musonda CLI Help Command
3
+ */
4
+ import { c, CLI_BANNER } from '../ui.js';
5
+ export function handleHelpCommand(topic) {
6
+ const t = topic?.trim().toLowerCase();
7
+ if (t === 'gateway' || t === 'start' || t === 'stop') {
8
+ console.log(`
9
+ ${c.bold}${c.cyan}Musonda Gateway Management:${c.reset}
10
+ The Gateway is the autonomous server hosting HTTP, Discord, Slack,
11
+ scheduler triggers, and active Agent Plugins & MCP tools.
12
+
13
+ ${c.bold}Usage:${c.reset}
14
+ musonda start gateway [options] Start the gateway daemon or foreground server
15
+ musonda stop gateway [options] Stop the running gateway daemon
16
+ musonda restart gateway [options] Restart the gateway daemon
17
+
18
+ ${c.bold}Options:${c.reset}
19
+ -d, --daemon Run in background mode detached from terminal
20
+ -p, --port <num> Override default HTTP port (default: 4141)
21
+ -h, --host <ip> Override binding host (default: 127.0.0.1)
22
+ -v, --verbose Enable detailed verbose logging
23
+
24
+ ${c.bold}Examples:${c.reset}
25
+ musonda start gateway
26
+ musonda start gateway --daemon
27
+ musonda start gateway --port 8080
28
+ musonda stop gateway
29
+ `);
30
+ return;
31
+ }
32
+ if (t === 'plugin' || t === 'plugins' || t === 'add') {
33
+ console.log(`
34
+ ${c.bold}${c.cyan}Musonda Agent Plugins & Tools Management:${c.reset}
35
+ Musonda supports the universal Agent Plugins specification (https://agent-plugins.org),
36
+ Agent Skills (progressive disclosure), and Model Context Protocol (MCP) servers.
37
+
38
+ ${c.bold}Usage:${c.reset}
39
+ musonda add plugin <name|path|repo> Install and activate an Agent Plugin
40
+ musonda remove plugin <name> Uninstall and remove an Agent Plugin
41
+ musonda list plugins List all installed plugins, skills, and MCP tools
42
+ musonda find plugins [query] Search the Agent Plugins ecosystem & local catalog
43
+
44
+ ${c.bold}Add Plugin Sources:${c.reset}
45
+ - Curated ecosystem name: musonda add plugin example-calc
46
+ - Curated builder plugin: musonda add plugin plugin-builder
47
+ - GitHub repo shorthand: musonda add plugin agentplugins/agent-plugins-example
48
+ - Git repository URL: musonda add plugin https://github.com/agentplugins/agent-plugins-example.git
49
+ - Local directory path: musonda add plugin ./my-plugin
50
+
51
+ ${c.bold}Options:${c.reset}
52
+ --no-deps Skip running 'npm install' for plugin dependencies
53
+ --purge-data (For remove) Also delete persistent data directory in ./data/plugin_data
54
+ `);
55
+ return;
56
+ }
57
+ if (t === 'update') {
58
+ console.log(`
59
+ ${c.bold}${c.cyan}Musonda Agent & Plugins Update Manager:${c.reset}
60
+ Manages updates for the core Musonda assistant harness, CLI, and installed Agent Plugins.
61
+
62
+ ${c.bold}Usage:${c.reset}
63
+ musonda update Check and apply updates to both agent and plugins
64
+ musonda update agent Update only the core Musonda agent package
65
+ musonda update plugins Update all installed Agent Plugins
66
+ musonda update plugin <name> Update a specific installed Agent Plugin
67
+
68
+ ${c.bold}Options:${c.reset}
69
+ -y, --yes Automatically confirm and apply updates without prompting
70
+ --check-only Check for updates and report status without applying changes
71
+ `);
72
+ return;
73
+ }
74
+ if (t === 'service' || t === 'systemd' || t === 'daemon') {
75
+ console.log(`
76
+ ${c.bold}${c.cyan}Musonda Background Service Management (.service):${c.reset}
77
+ Generates and manages systemd service units to keep Musonda Gateway alive 24/7.
78
+ Automatically starts on system boot and restarts on unexpected exits.
79
+
80
+ ${c.bold}Usage:${c.reset}
81
+ musonda service [status] Check background service installation and state
82
+ musonda service install [options] Create and install systemd .service unit
83
+ musonda service generate [path] Export .service file to specified path (or ./musonda.service)
84
+ musonda service uninstall Stop, disable, and remove systemd service
85
+
86
+ ${c.bold}Options:${c.reset}
87
+ --user Install as user-level service (~/.config/systemd/user/) [Default]
88
+ --system Install as system-level service (/etc/systemd/system/) [Requires sudo]
89
+ --file Export .service file to local directory without systemctl commands
90
+ --name <name> Override service name (default: musonda)
91
+ --path <path> Custom target filepath for the .service unit
92
+ --port <num> Override gateway port in ExecStart
93
+ --host <ip> Override gateway host in ExecStart
94
+ --no-enable Do not automatically enable/start with systemctl
95
+
96
+ ${c.bold}Examples:${c.reset}
97
+ musonda service
98
+ musonda service install
99
+ musonda service install --system
100
+ musonda service generate ./musonda.service
101
+ musonda service uninstall
102
+ `);
103
+ return;
104
+ }
105
+ // Full General Help Guide
106
+ console.log(CLI_BANNER);
107
+ console.log(`
108
+ ${c.bold}Usage:${c.reset}
109
+ musonda Open interactive dashboard & menu
110
+ musonda <command> [subcommand] Run command directly
111
+
112
+ ${c.bold}${c.yellow}Core Commands:${c.reset}
113
+ ${c.green}start gateway${c.reset} Start the Musonda Gateway daemon/server
114
+ ${c.green}stop [gateway]${c.reset} Stop the running Musonda Gateway
115
+ ${c.green}restart [gateway]${c.reset} Restart the Musonda Gateway
116
+ ${c.green}service [action]${c.reset} Manage persistent systemd background service (.service)
117
+ ${c.green}cli${c.reset} Launch interactive chat with Musonda AI assistant
118
+ ${c.green}status${c.reset} Display live gateway, model, persona & channels status
119
+ ${c.green}doctor${c.reset} Diagnose environment, configs, keys, and dependencies
120
+ ${c.green}setup${c.reset} Run the interactive onboarding & setup wizard
121
+ ${c.green}version${c.reset} Display version and runtime information
122
+ ${c.green}help [command]${c.reset} Display help documentation
123
+
124
+ ${c.bold}${c.yellow}Plugin Management Commands:${c.reset}
125
+ ${c.green}add plugin <source>${c.reset} Install & activate a plugin (local, git, or curated)
126
+ ${c.green}remove plugin <name>${c.reset} Uninstall & remove an installed plugin
127
+ ${c.green}list plugins${c.reset} List all installed plugins, skills & tools
128
+ ${c.green}find plugins [query]${c.reset} Search plugins across local catalog and ecosystem
129
+
130
+ ${c.bold}${c.yellow}Agent Update Commands:${c.reset}
131
+ ${c.green}update${c.reset} Check & update core Musonda agent and plugins
132
+ ${c.green}update agent${c.reset} Update Musonda package (npm or git)
133
+ ${c.green}update plugins${c.reset} Update all installed plugins
134
+ ${c.green}update plugin <name>${c.reset} Update a specific plugin
135
+
136
+ ${c.bold}${c.yellow}Examples:${c.reset}
137
+ ${c.dim}# Start interactive dashboard${c.reset}
138
+ musonda
139
+
140
+ ${c.dim}# Start the Gateway in background daemon mode${c.reset}
141
+ musonda start gateway --daemon
142
+
143
+ ${c.dim}# Talk to your AI assistant with real-time streaming${c.reset}
144
+ musonda cli
145
+
146
+ ${c.dim}# Install a calculator plugin with MCP tools${c.reset}
147
+ musonda add plugin example-calc
148
+
149
+ ${c.dim}# Install an Agent Plugin from GitHub${c.reset}
150
+ musonda add plugin agentplugins/agent-plugins-example
151
+
152
+ ${c.dim}# Check for Musonda updates${c.reset}
153
+ musonda update
154
+
155
+ ${c.dim}# Verify system diagnostics & keys${c.reset}
156
+ musonda doctor
157
+ `);
158
+ }
159
+ //# sourceMappingURL=help.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"help.js","sourceRoot":"","sources":["../../../src/cli/commands/help.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Musonda Plugins CLI Command Handlers (add, remove, list, find)
3
+ */
4
+ export declare function resolvePluginSource(rawSource: string): string;
5
+ export declare function handleAddPlugin(source: string, options?: {
6
+ name?: string;
7
+ noDeps?: boolean;
8
+ }): Promise<void>;
9
+ export declare function handleRemovePlugin(pluginName: string, options?: {
10
+ deleteFiles?: boolean;
11
+ purgeData?: boolean;
12
+ }): Promise<void>;
13
+ export declare function handleListPlugins(options?: {
14
+ verbose?: boolean;
15
+ }): Promise<void>;
16
+ export declare function handleFindPlugins(query?: string, options?: {
17
+ source?: 'all' | 'local' | 'remote';
18
+ }): Promise<void>;
@@ -0,0 +1,250 @@
1
+ /**
2
+ * Musonda Plugins CLI Command Handlers (add, remove, list, find)
3
+ */
4
+ import fs from 'node:fs';
5
+ import path from 'node:path';
6
+ import { c, symbols, formatTable, printSectionHeader } from '../ui.js';
7
+ import { configLoader } from '../../config/loader.js';
8
+ import { PluginManager } from '../../plugins/pluginManager.js';
9
+ import { ToolRegistry } from '../../tools/registry.js';
10
+ import { checkGatewayHealth } from '../daemon.js';
11
+ export function resolvePluginSource(rawSource) {
12
+ const trimmed = rawSource.trim();
13
+ // Check if it's already a local path that exists
14
+ if (fs.existsSync(path.resolve(trimmed))) {
15
+ return path.resolve(trimmed);
16
+ }
17
+ // Check if it exists in ./plugins/<name>
18
+ const localInPlugins = path.resolve('./plugins', trimmed);
19
+ if (fs.existsSync(localInPlugins)) {
20
+ return localInPlugins;
21
+ }
22
+ // Curated ecosystem names mapping
23
+ const CURATED_SOURCES = {
24
+ 'example-calc': 'https://github.com/agentplugins/agent-plugins-example.git',
25
+ 'plugin-builder': 'https://github.com/agentplugins/agent-plugins-spec.git',
26
+ 'agent-plugins-example': 'https://github.com/agentplugins/agent-plugins-example.git',
27
+ 'agent-plugins-spec': 'https://github.com/agentplugins/agent-plugins-spec.git',
28
+ };
29
+ if (CURATED_SOURCES[trimmed.toLowerCase()]) {
30
+ // If local directory exists, prefer local
31
+ if (fs.existsSync(localInPlugins)) {
32
+ return localInPlugins;
33
+ }
34
+ return CURATED_SOURCES[trimmed.toLowerCase()];
35
+ }
36
+ // GitHub shorthand (owner/repo or github:owner/repo)
37
+ if (trimmed.startsWith('github:')) {
38
+ return `https://github.com/${trimmed.slice(7)}.git`;
39
+ }
40
+ if (/^[a-zA-Z0-9_-]+\/[a-zA-Z0-9_.-]+$/.test(trimmed)) {
41
+ return `https://github.com/${trimmed}.git`;
42
+ }
43
+ return trimmed;
44
+ }
45
+ export async function handleAddPlugin(source, options = {}) {
46
+ if (!source || !source.trim()) {
47
+ console.log(`\n${symbols.error} ${c.red}Missing required plugin name or source.${c.reset}`);
48
+ console.log(` Usage: ${c.bold}musonda add plugin <name|path|repo>${c.reset}\n`);
49
+ return;
50
+ }
51
+ const resolvedSource = resolvePluginSource(source);
52
+ const config = configLoader.load();
53
+ const host = config.gateway?.host || '127.0.0.1';
54
+ const port = config.gateway?.port || 4141;
55
+ console.log(`\n${symbols.plugin} Installing Agent Plugin from "${resolvedSource}"...`);
56
+ // Check if gateway is running
57
+ const runningGateway = await checkGatewayHealth(host, port);
58
+ if (runningGateway) {
59
+ // Install dynamically via Gateway HTTP API
60
+ try {
61
+ const res = await fetch(`http://${host}:${port}/api/plugins/install`, {
62
+ method: 'POST',
63
+ headers: {
64
+ 'Content-Type': 'application/json',
65
+ ...(config.gateway?.apiKey ? { Authorization: `Bearer ${config.gateway.apiKey}` } : {}),
66
+ },
67
+ body: JSON.stringify({
68
+ source: resolvedSource,
69
+ name: options.name,
70
+ installDependencies: !options.noDeps,
71
+ }),
72
+ });
73
+ const data = await res.json();
74
+ if (!res.ok || !data.success) {
75
+ console.log(`\n${symbols.error} ${c.red}Failed to install plugin: ${data.error || res.statusText}${c.reset}\n`);
76
+ return;
77
+ }
78
+ console.log(`\n${symbols.success} ${c.bold}${c.green}Agent Plugin installed and activated in live Gateway!${c.reset}`);
79
+ console.log(` ${c.cyan}Plugin Name:${c.reset} ${data.plugin?.manifest?.name || data.plugin?.name || source}`);
80
+ console.log(` ${c.cyan}Version:${c.reset} ${data.plugin?.manifest?.version || '1.0.0'}`);
81
+ console.log(` ${c.cyan}Installed At:${c.reset} ${data.installedPath}`);
82
+ console.log(` ${c.cyan}Skills Discovered:${c.reset} ${data.skillsLoaded}`);
83
+ console.log(` ${c.cyan}MCP Tools Mounted:${c.reset} ${data.toolsRegistered?.length ? data.toolsRegistered.join(', ') : '(none)'}`);
84
+ console.log(` ${c.dim}Plugin is ready to use in CLI chat and across connected channels!${c.reset}\n`);
85
+ return;
86
+ }
87
+ catch (err) {
88
+ console.log(`${symbols.warning} Could not reach running Gateway API directly (${err.message}). Falling back to local installation.`);
89
+ }
90
+ }
91
+ // Gateway is offline: install directly into plugins directory
92
+ const toolRegistry = new ToolRegistry();
93
+ const pm = new PluginManager(config);
94
+ const result = await pm.installPlugin({
95
+ source: resolvedSource,
96
+ name: options.name,
97
+ installDependencies: !options.noDeps,
98
+ }, toolRegistry);
99
+ if (!result.success) {
100
+ console.log(`\n${symbols.error} ${c.red}Failed to install plugin: ${result.error}${c.reset}\n`);
101
+ return;
102
+ }
103
+ console.log(`\n${symbols.success} ${c.bold}${c.green}Agent Plugin installed successfully!${c.reset}`);
104
+ console.log(` ${c.cyan}Plugin Name:${c.reset} ${result.plugin?.manifest.name || source}`);
105
+ console.log(` ${c.cyan}Version:${c.reset} ${result.plugin?.manifest.version || '1.0.0'}`);
106
+ console.log(` ${c.cyan}Directory:${c.reset} ${result.installedPath}`);
107
+ console.log(` ${c.cyan}Skills Discovered:${c.reset} ${result.skillsLoaded}`);
108
+ console.log(` ${c.cyan}MCP Tools Ready:${c.reset} ${result.toolsRegistered?.length ? result.toolsRegistered.join(', ') : '(none)'}`);
109
+ console.log(` ${c.dim}Note: Gateway is offline. This plugin will load automatically when Gateway starts.${c.reset}\n`);
110
+ }
111
+ export async function handleRemovePlugin(pluginName, options = {}) {
112
+ const trimmed = pluginName?.trim();
113
+ if (!trimmed) {
114
+ console.log(`\n${symbols.error} ${c.red}Missing required plugin name.${c.reset}`);
115
+ console.log(` Usage: ${c.bold}musonda remove plugin <name>${c.reset}\n`);
116
+ return;
117
+ }
118
+ const config = configLoader.load();
119
+ const host = config.gateway?.host || '127.0.0.1';
120
+ const port = config.gateway?.port || 4141;
121
+ console.log(`\n${symbols.plugin} Removing Agent Plugin "${trimmed}"...`);
122
+ // Check if gateway is running
123
+ const runningGateway = await checkGatewayHealth(host, port);
124
+ if (runningGateway) {
125
+ try {
126
+ const res = await fetch(`http://${host}:${port}/api/plugins/remove`, {
127
+ method: 'POST',
128
+ headers: {
129
+ 'Content-Type': 'application/json',
130
+ ...(config.gateway?.apiKey ? { Authorization: `Bearer ${config.gateway.apiKey}` } : {}),
131
+ },
132
+ body: JSON.stringify({
133
+ pluginName: trimmed,
134
+ deleteFiles: options.deleteFiles ?? true,
135
+ purgeData: options.purgeData ?? false,
136
+ }),
137
+ });
138
+ const data = await res.json();
139
+ if (!res.ok || !data.success) {
140
+ console.log(`\n${symbols.error} ${c.red}Failed to remove plugin: ${data.error || res.statusText}${c.reset}\n`);
141
+ return;
142
+ }
143
+ console.log(`\n${symbols.success} ${c.bold}${c.green}Plugin "${trimmed}" successfully removed from Gateway!${c.reset}`);
144
+ if (data.skillsRemoved?.length) {
145
+ console.log(` ${c.cyan}Skills Removed:${c.reset} ${data.skillsRemoved.join(', ')}`);
146
+ }
147
+ if (data.toolsUnregistered?.length) {
148
+ console.log(` ${c.cyan}Tools Unregistered:${c.reset} ${data.toolsUnregistered.join(', ')}`);
149
+ }
150
+ console.log();
151
+ return;
152
+ }
153
+ catch { }
154
+ }
155
+ // Offline removal
156
+ const toolRegistry = new ToolRegistry();
157
+ const pm = new PluginManager(config);
158
+ const result = await pm.removePlugin({
159
+ pluginName: trimmed,
160
+ deleteFiles: options.deleteFiles ?? true,
161
+ purgeData: options.purgeData ?? false,
162
+ }, toolRegistry);
163
+ if (!result.success) {
164
+ console.log(`\n${symbols.error} ${c.red}Failed to remove plugin: ${result.error}${c.reset}\n`);
165
+ return;
166
+ }
167
+ console.log(`\n${symbols.success} ${c.bold}${c.green}Plugin "${trimmed}" uninstalled successfully!${c.reset}\n`);
168
+ }
169
+ export async function handleListPlugins(options = {}) {
170
+ const config = configLoader.load();
171
+ const host = config.gateway?.host || '127.0.0.1';
172
+ const port = config.gateway?.port || 4141;
173
+ printSectionHeader('Installed Agent Plugins', 'Skills, progressive disclosure packages & MCP servers');
174
+ // If gateway is running, fetch live status
175
+ const runningGateway = await checkGatewayHealth(host, port);
176
+ if (runningGateway) {
177
+ try {
178
+ const res = await fetch(`http://${host}:${port}/api/plugins`, {
179
+ headers: {
180
+ ...(config.gateway?.apiKey ? { Authorization: `Bearer ${config.gateway.apiKey}` } : {}),
181
+ },
182
+ });
183
+ if (res.ok) {
184
+ const data = await res.json();
185
+ if (data.plugins && data.plugins.length > 0) {
186
+ const rows = data.plugins.map((p) => [
187
+ p.name,
188
+ p.version || '1.0.0',
189
+ p.skills?.length ? p.skills.join(', ') : '(none)',
190
+ p.mcpServers?.length ? p.mcpServers.join(', ') : '(none)',
191
+ p.description || '',
192
+ ]);
193
+ console.log(formatTable(['Plugin', 'Version', 'Skills', 'MCP Servers', 'Description'], rows));
194
+ console.log(`\n${c.dim}Total: ${data.totalPlugins} plugin(s), ${data.totalSkills} skill(s), ${data.totalMcpServers} active MCP server(s)${c.reset}\n`);
195
+ return;
196
+ }
197
+ }
198
+ }
199
+ catch { }
200
+ }
201
+ // Fallback to disk scan
202
+ const pm = new PluginManager(config);
203
+ const found = await pm.findPlugins({ source: 'local' });
204
+ if (found.local.length === 0) {
205
+ console.log(` ${c.dim}No plugins installed yet.${c.reset}`);
206
+ console.log(` To install a plugin: ${c.bold}musonda add plugin <name>${c.reset}\n`);
207
+ return;
208
+ }
209
+ const rows = found.local.map((p) => [
210
+ p.name,
211
+ p.version || '1.0.0',
212
+ p.skills?.length ? p.skills.join(', ') : '(none)',
213
+ p.mcpServers?.length ? p.mcpServers.join(', ') : '(none)',
214
+ p.description || '',
215
+ ]);
216
+ console.log(formatTable(['Plugin', 'Version', 'Skills', 'MCP Servers', 'Description'], rows));
217
+ console.log(`\n${c.dim}Total: ${found.local.length} plugin(s) found on disk${c.reset}\n`);
218
+ }
219
+ export async function handleFindPlugins(query = '', options = {}) {
220
+ const config = configLoader.load();
221
+ const pm = new PluginManager(config);
222
+ console.log(`\n${symbols.plugin} Searching Agent Plugins ecosystem${query ? ` for "${query}"` : ''}...`);
223
+ const results = await pm.findPlugins({ query, source: options.source || 'all' });
224
+ if (results.totalFound === 0) {
225
+ console.log(` ${c.dim}No matching plugins found.${c.reset}\n`);
226
+ return;
227
+ }
228
+ if (results.local.length > 0) {
229
+ console.log(`\n${c.bold}${c.green}Installed Locally:${c.reset}`);
230
+ const localRows = results.local.map((p) => [
231
+ p.name,
232
+ p.version || '1.0.0',
233
+ p.skills.join(', ') || '(none)',
234
+ p.description || '',
235
+ ]);
236
+ console.log(formatTable(['Plugin', 'Version', 'Skills', 'Description'], localRows));
237
+ }
238
+ if (results.remote.length > 0) {
239
+ console.log(`\n${c.bold}${c.cyan}Available in Ecosystem / Remote:${c.reset}`);
240
+ const remoteRows = results.remote.map((p) => [
241
+ p.name + (p.official ? ' (official)' : ''),
242
+ p.isInstalled ? `${c.green}Installed${c.reset}` : `${c.yellow}Available${c.reset}`,
243
+ p.author || '',
244
+ p.description || '',
245
+ ]);
246
+ console.log(formatTable(['Plugin', 'Status', 'Author', 'Description'], remoteRows));
247
+ console.log(`\n${c.dim}Install any plugin with: ${c.bold}musonda add plugin <name>${c.reset}\n`);
248
+ }
249
+ }
250
+ //# sourceMappingURL=plugins.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugins.js","sourceRoot":"","sources":["../../../src/cli/commands/plugins.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Musonda Service CLI Command Handler
3
+ * Manages background service installation, status, uninstallation, and .service generation.
4
+ */
5
+ export interface ServiceCommandFlags {
6
+ user?: boolean;
7
+ system?: boolean;
8
+ file?: boolean;
9
+ name?: string;
10
+ path?: string;
11
+ enable?: boolean;
12
+ port?: number;
13
+ host?: string;
14
+ verbose?: boolean;
15
+ }
16
+ export declare function handleServiceCommand(subcommand?: string, args?: string[], flags?: ServiceCommandFlags): Promise<void>;
@@ -0,0 +1,136 @@
1
+ /**
2
+ * Musonda Service CLI Command Handler
3
+ * Manages background service installation, status, uninstallation, and .service generation.
4
+ */
5
+ import { c, symbols, printSectionHeader } from '../ui.js';
6
+ import { configLoader } from '../../config/loader.js';
7
+ import { installSystemdService, checkSystemdServiceStatus, uninstallSystemdService, writeSystemdServiceFile, getDefaultSystemdPath, getWindowsServiceNotice, } from '../../service/index.js';
8
+ export async function handleServiceCommand(subcommand, args = [], flags = {}) {
9
+ const sub = (subcommand || args[0] || 'status').toLowerCase();
10
+ const config = configLoader.load();
11
+ let serviceType = 'user';
12
+ if (flags.system)
13
+ serviceType = 'system';
14
+ else if (flags.file)
15
+ serviceType = 'file';
16
+ const serviceName = flags.name || args[1] || config.service?.serviceName || 'musonda';
17
+ // 1. Status
18
+ if (sub === 'status' || sub === 'check') {
19
+ printSectionHeader('Musonda Background Service Status', 'Systemd unit configuration & state');
20
+ const status = checkSystemdServiceStatus(serviceName, serviceType, flags.path);
21
+ console.log(` ${c.bold}Platform:${c.reset} ${process.platform} (${process.arch})`);
22
+ console.log(` ${c.bold}Service Name:${c.reset} ${serviceName}.service`);
23
+ console.log(` ${c.bold}Scope:${c.reset} ${serviceType.toUpperCase()} service`);
24
+ console.log(` ${c.bold}Unit File:${c.reset} ${status.servicePath || getDefaultSystemdPath(serviceType, serviceName)}`);
25
+ console.log(` ${c.bold}Installed:${c.reset} ${status.installed ? c.green + 'Yes' : c.red + 'No'}${c.reset}`);
26
+ if (process.platform === 'linux') {
27
+ console.log(` ${c.bold}Active State:${c.reset} ${status.active ? c.green + '● Running' : c.red + '○ Inactive'}${c.reset}`);
28
+ console.log(` ${c.bold}Enabled Boot:${c.reset} ${status.enabled ? c.green + 'Yes' : c.yellow + 'No'}${c.reset}`);
29
+ if (status.detail) {
30
+ console.log(`\n ${c.bold}Recent Systemd Output:${c.reset}`);
31
+ console.log(` ${c.dim}${status.detail.split('\n').slice(0, 8).join('\n ')}${c.reset}`);
32
+ }
33
+ }
34
+ else {
35
+ console.log(` ${c.yellow}Note: Current platform is ${process.platform}. Direct systemctl state is only queryable on Linux.${c.reset}`);
36
+ if (process.platform === 'win32') {
37
+ console.log(` ${c.dim}${getWindowsServiceNotice()}${c.reset}`);
38
+ }
39
+ }
40
+ console.log(`\n ${c.bold}Management Commands:${c.reset}`);
41
+ console.log(` Status: ${c.cyan}${status.commands.status}${c.reset}`);
42
+ console.log(` Logs: ${c.cyan}${status.commands.logs}${c.reset}`);
43
+ console.log(` Start: ${c.cyan}${status.commands.start}${c.reset}`);
44
+ console.log(` Stop: ${c.cyan}${status.commands.stop}${c.reset}`);
45
+ console.log(` Restart: ${c.cyan}${status.commands.restart}${c.reset}\n`);
46
+ return;
47
+ }
48
+ // 2. Install
49
+ if (sub === 'install' || sub === 'setup' || sub === 'create') {
50
+ printSectionHeader('Install Musonda Background Service', 'Creating systemd .service unit so gateway lives');
51
+ const enableAndStart = flags.enable !== false;
52
+ const port = flags.port || config.gateway?.port || 4141;
53
+ const host = flags.host || config.gateway?.host || '127.0.0.1';
54
+ console.log(` ${symbols.gear} Configuring systemd service unit: ${c.bold}${serviceName}.service${c.reset}`);
55
+ console.log(` Target: ${serviceType === 'system' ? 'System daemon (/etc/systemd/system/)' : serviceType === 'file' ? 'Local file export' : 'User daemon (~/.config/systemd/user/)'}`);
56
+ const result = await installSystemdService({
57
+ serviceName,
58
+ serviceType,
59
+ outputPath: flags.path,
60
+ port,
61
+ host,
62
+ }, enableAndStart);
63
+ if (result.success) {
64
+ console.log(`\n ${symbols.success} ${c.bold}${c.green}Service unit created successfully!${c.reset}`);
65
+ console.log(` ${c.cyan}Path:${c.reset} ${result.servicePath}`);
66
+ if (result.enabled && result.started) {
67
+ console.log(` ${symbols.rocket} ${c.green}Service enabled and started via systemctl!${c.reset}`);
68
+ }
69
+ else if (result.warning) {
70
+ console.log(` ${symbols.warning} ${c.yellow}${result.warning}${c.reset}`);
71
+ }
72
+ console.log(`\n ${c.bold}Commands to control your service:${c.reset}`);
73
+ console.log(` Check status: ${c.bold}${result.commands.status}${c.reset}`);
74
+ console.log(` Follow logs: ${c.bold}${result.commands.logs}${c.reset}`);
75
+ console.log(` Start: ${c.bold}${result.commands.start}${c.reset}`);
76
+ console.log(` Stop: ${c.bold}${result.commands.stop}${c.reset}`);
77
+ console.log(` Restart: ${c.bold}${result.commands.restart}${c.reset}`);
78
+ if (serviceType === 'user' && process.platform === 'linux') {
79
+ console.log(`\n ${c.yellow}Tip:${c.reset} Run ${c.bold}loginctl enable-linger ${process.env.USER || '$USER'}${c.reset} so your service stays running even when you log out.\n`);
80
+ }
81
+ else {
82
+ console.log();
83
+ }
84
+ // Update config if installed
85
+ config.service = {
86
+ serviceName,
87
+ type: serviceType,
88
+ enabled: Boolean(result.enabled),
89
+ installedPath: result.servicePath,
90
+ };
91
+ configLoader.save(config);
92
+ }
93
+ else {
94
+ console.error(`\n ${symbols.error} ${c.red}Failed to install service: ${result.error}${c.reset}\n`);
95
+ }
96
+ return;
97
+ }
98
+ // 3. Generate (standalone file export)
99
+ if (sub === 'generate' || sub === 'export') {
100
+ const targetFile = flags.path || args[1] || './musonda.service';
101
+ console.log(`\n ${symbols.gear} Generating Linux systemd unit file at: ${c.bold}${targetFile}${c.reset}`);
102
+ const result = writeSystemdServiceFile({
103
+ serviceName,
104
+ serviceType: 'file',
105
+ outputPath: targetFile,
106
+ port: flags.port || config.gateway?.port || 4141,
107
+ host: flags.host || config.gateway?.host || '127.0.0.1',
108
+ });
109
+ console.log(` ${symbols.success} ${c.green}Generated: ${result.servicePath}${c.reset}`);
110
+ console.log(`\n ${c.bold}To install on a Linux host:${c.reset}`);
111
+ console.log(` 1. Copy to: ~/.config/systemd/user/${serviceName}.service`);
112
+ console.log(` 2. Run: systemctl --user daemon-reload`);
113
+ console.log(` 3. Run: systemctl --user enable --now ${serviceName}.service\n`);
114
+ return;
115
+ }
116
+ // 4. Uninstall
117
+ if (sub === 'uninstall' || sub === 'remove' || sub === 'delete') {
118
+ printSectionHeader('Uninstall Musonda Background Service', `Stopping and removing ${serviceName}.service`);
119
+ const result = await uninstallSystemdService(serviceName, serviceType, flags.path);
120
+ if (result.success) {
121
+ console.log(` ${symbols.success} ${c.green}${result.message}${c.reset}\n`);
122
+ if (config.service) {
123
+ config.service.enabled = false;
124
+ configLoader.save(config);
125
+ }
126
+ }
127
+ else {
128
+ console.error(` ${symbols.error} ${c.red}${result.message}${c.reset}\n`);
129
+ }
130
+ return;
131
+ }
132
+ // Unknown subcommand
133
+ console.log(`\n${symbols.error} ${c.red}Unknown service action: "${sub}"${c.reset}`);
134
+ console.log(` Available actions: ${c.bold}status${c.reset}, ${c.bold}install${c.reset}, ${c.bold}generate${c.reset}, ${c.bold}uninstall${c.reset}\n`);
135
+ }
136
+ //# sourceMappingURL=service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service.js","sourceRoot":"","sources":["../../../src/cli/commands/service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ /**
2
+ * Musonda Setup / Onboarding CLI Command Handler
3
+ */
4
+ export declare function handleSetupCommand(): Promise<void>;
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Musonda Setup / Onboarding CLI Command Handler
3
+ */
4
+ import { runOnboardingWizard } from '../../wizard/onboarding.js';
5
+ export async function handleSetupCommand() {
6
+ await runOnboardingWizard();
7
+ }
8
+ //# sourceMappingURL=setup.js.map