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 @@
1
+ {"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../src/cli/commands/setup.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEjE,MAAM,CAAC,KAAK,UAAU,kBAAkB;IACtC,MAAM,mBAAmB,EAAE,CAAC;AAC9B,CAAC"}
@@ -0,0 +1,4 @@
1
+ /**
2
+ * Musonda Status CLI Command
3
+ */
4
+ export declare function handleStatusCommand(): Promise<void>;
@@ -0,0 +1,73 @@
1
+ /**
2
+ * Musonda Status CLI Command
3
+ */
4
+ import { c, symbols, printSectionHeader } from '../ui.js';
5
+ import { configLoader } from '../../config/loader.js';
6
+ import { PluginManager } from '../../plugins/pluginManager.js';
7
+ import { checkGatewayHealth, readPid } from '../daemon.js';
8
+ export async function handleStatusCommand() {
9
+ const config = configLoader.load();
10
+ const host = config.gateway?.host || '127.0.0.1';
11
+ const port = config.gateway?.port || 4141;
12
+ printSectionHeader('Musonda System Status', 'Gateway, AI model, persona, channels & plugins');
13
+ const runningHealth = await checkGatewayHealth(host, port);
14
+ const pidInfo = readPid();
15
+ if (runningHealth) {
16
+ const uptimeSec = runningHealth.gateway?.uptimeSeconds || 0;
17
+ const hours = Math.floor(uptimeSec / 3600);
18
+ const mins = Math.floor((uptimeSec % 3600) / 60);
19
+ const secs = uptimeSec % 60;
20
+ const uptimeFormatted = `${hours}h ${mins}m ${secs}s`;
21
+ console.log(` ${c.bold}Gateway Status:${c.reset} ${c.green}● ONLINE${c.reset} (http://${host}:${port})`);
22
+ console.log(` ${c.bold}Process PID:${c.reset} ${runningHealth.process?.pid || pidInfo?.pid || 'Active'}`);
23
+ console.log(` ${c.bold}Gateway Uptime:${c.reset} ${uptimeFormatted}`);
24
+ console.log(` ${c.bold}Assistant:${c.reset} ${c.bold}${c.magenta}${runningHealth.assistant?.name || 'Musonda'}${c.reset} (${runningHealth.assistant?.title || 'Assistant'})`);
25
+ console.log(` ${c.bold}AI Model:${c.reset} ${runningHealth.model?.name || 'gpt-5.6-luna'} via ${runningHealth.model?.provider || 'openai'}`);
26
+ console.log(` ${c.bold}User Profile:${c.reset} ${runningHealth.user?.name || 'Friend'} (${runningHealth.user?.timezone || 'UTC'})`);
27
+ console.log(` ${c.bold}Persistent Memory:${c.reset} ${runningHealth.memoryStats?.totalMemories ?? 0} memories stored`);
28
+ console.log(` ${c.bold}Autonomous Tasks:${c.reset} ${runningHealth.gateway?.schedules?.active ?? 0} active / ${runningHealth.gateway?.schedules?.total ?? 0} scheduled`);
29
+ console.log(`\n ${c.bold}Connected Channels:${c.reset}`);
30
+ const ch = runningHealth.gateway?.channels || {};
31
+ console.log(` - CLI Channel: ${ch.cli?.connected ? c.green + 'Connected' : c.dim + 'Idle'}${c.reset}`);
32
+ console.log(` - Webhook / HTTP: ${c.green}Online${c.reset}`);
33
+ console.log(` - Discord Channel: ${ch.discord?.enabled ? (ch.discord?.connected ? c.green + 'Connected' : c.yellow + 'Connecting') : c.dim + 'Disabled'}${c.reset}`);
34
+ console.log(` - Slack Channel: ${ch.slack?.enabled ? (ch.slack?.connected ? c.green + 'Connected' : c.yellow + 'Connecting') : c.dim + 'Disabled'}${c.reset}`);
35
+ // Fetch live plugin inventory
36
+ try {
37
+ const pRes = await fetch(`http://${host}:${port}/api/plugins`, {
38
+ headers: {
39
+ ...(config.gateway?.apiKey ? { Authorization: `Bearer ${config.gateway.apiKey}` } : {}),
40
+ },
41
+ });
42
+ if (pRes.ok) {
43
+ const pData = await pRes.json();
44
+ console.log(`\n ${c.bold}Active Agent Plugins (${pData.totalPlugins ?? 0} loaded):${c.reset}`);
45
+ if (pData.plugins && pData.plugins.length > 0) {
46
+ for (const p of pData.plugins) {
47
+ console.log(` ${symbols.plugin} ${c.cyan}${p.name}${c.reset} (v${p.version}) - ${p.skills?.length || 0} skill(s), ${p.mcpServers?.length || 0} MCP server(s)`);
48
+ }
49
+ }
50
+ else {
51
+ console.log(` ${c.dim}No plugins loaded.${c.reset}`);
52
+ }
53
+ }
54
+ }
55
+ catch { }
56
+ console.log(`\n ${c.dim}Stop gateway with: ${c.bold}musonda stop gateway${c.reset}\n`);
57
+ return;
58
+ }
59
+ // Gateway is Offline
60
+ console.log(` ${c.bold}Gateway Status:${c.reset} ${c.red}○ OFFLINE${c.reset} (http://${host}:${port})`);
61
+ console.log(` ${c.bold}Assistant:${c.reset} ${config.assistant?.customName || config.assistant?.name || 'Musonda'} (${config.assistant?.title || 'Assistant'})`);
62
+ console.log(` ${c.bold}AI Model:${c.reset} ${config.model?.model || 'gpt-5.6-luna'}`);
63
+ console.log(` ${c.bold}User:${c.reset} ${config.user?.name || 'Friend'}`);
64
+ // Disk plugins check
65
+ const pm = new PluginManager(config);
66
+ const found = await pm.findPlugins({ source: 'local' });
67
+ console.log(` ${c.bold}Installed Plugins:${c.reset} ${found.local.length} plugin(s) installed on disk`);
68
+ for (const p of found.local) {
69
+ console.log(` ${symbols.plugin} ${p.name} (v${p.version}) - ${p.skills.length} skill(s)`);
70
+ }
71
+ console.log(`\n ${symbols.info} ${c.yellow}Launch the gateway with: ${c.bold}musonda start gateway${c.reset}\n`);
72
+ }
73
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../../src/cli/commands/status.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * Musonda Agent & Plugins Update Manager
3
+ */
4
+ export declare function getLocalPackageVersion(): string;
5
+ export declare function checkNpmRegistryVersion(packageName?: string): Promise<string | null>;
6
+ export declare function isGitRepository(dir?: string): boolean;
7
+ export declare function checkGitUpstreamCommits(dir?: string): {
8
+ behind: number;
9
+ commits: string[];
10
+ };
11
+ export declare function updateAgentPackage(options?: {
12
+ yes?: boolean;
13
+ checkOnly?: boolean;
14
+ }): Promise<boolean>;
15
+ export declare function updateInstalledPlugins(targetPluginName?: string, options?: {
16
+ yes?: boolean;
17
+ checkOnly?: boolean;
18
+ }): Promise<void>;
19
+ export declare function handleUpdateCommand(target?: string, options?: {
20
+ yes?: boolean;
21
+ checkOnly?: boolean;
22
+ }): Promise<void>;
@@ -0,0 +1,226 @@
1
+ /**
2
+ * Musonda Agent & Plugins Update Manager
3
+ */
4
+ import fs from 'node:fs';
5
+ import path from 'node:path';
6
+ import { execSync } from 'node:child_process';
7
+ import readline from 'node:readline/promises';
8
+ import { stdin as input, stdout as output } from 'node:process';
9
+ import { c, symbols, printSectionHeader } from '../ui.js';
10
+ import { configLoader } from '../../config/loader.js';
11
+ export function getLocalPackageVersion() {
12
+ try {
13
+ const pkgPath = path.resolve(process.cwd(), 'package.json');
14
+ if (fs.existsSync(pkgPath)) {
15
+ const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'));
16
+ return pkg.version || '1.0.0';
17
+ }
18
+ }
19
+ catch { }
20
+ return '1.0.0';
21
+ }
22
+ export async function checkNpmRegistryVersion(packageName = 'musonda') {
23
+ try {
24
+ const res = await fetch(`https://registry.npmjs.org/${packageName}/latest`, {
25
+ signal: AbortSignal.timeout(3500),
26
+ });
27
+ if (res.ok) {
28
+ const data = await res.json();
29
+ return data.version || null;
30
+ }
31
+ }
32
+ catch { }
33
+ return null;
34
+ }
35
+ export function isGitRepository(dir = process.cwd()) {
36
+ try {
37
+ const out = execSync('git rev-parse --is-inside-work-tree', {
38
+ cwd: dir,
39
+ stdio: 'pipe',
40
+ })
41
+ .toString()
42
+ .trim();
43
+ return out === 'true';
44
+ }
45
+ catch {
46
+ return false;
47
+ }
48
+ }
49
+ export function checkGitUpstreamCommits(dir = process.cwd()) {
50
+ try {
51
+ execSync('git fetch', { cwd: dir, stdio: 'pipe', timeout: 8000 });
52
+ const count = parseInt(execSync('git rev-list --count HEAD..@{u}', { cwd: dir, stdio: 'pipe' })
53
+ .toString()
54
+ .trim(), 10);
55
+ if (count > 0) {
56
+ const log = execSync('git log --oneline -n 5 HEAD..@{u}', { cwd: dir, stdio: 'pipe' })
57
+ .toString()
58
+ .trim()
59
+ .split('\n')
60
+ .filter(Boolean);
61
+ return { behind: count, commits: log };
62
+ }
63
+ return { behind: 0, commits: [] };
64
+ }
65
+ catch {
66
+ return { behind: 0, commits: [] };
67
+ }
68
+ }
69
+ export async function updateAgentPackage(options = {}) {
70
+ printSectionHeader('Musonda Agent Update Manager', 'Checking for core assistant updates');
71
+ const currentVersion = getLocalPackageVersion();
72
+ console.log(` ${c.cyan}Current Version:${c.reset} v${currentVersion}`);
73
+ let updateAvailable = false;
74
+ let updateType = null;
75
+ let latestNpmVersion = null;
76
+ let gitBehindCount = 0;
77
+ let gitCommits = [];
78
+ // Check npm registry
79
+ process.stdout.write(` ${symbols.refresh} Checking npm registry... `);
80
+ latestNpmVersion = await checkNpmRegistryVersion('musonda');
81
+ if (latestNpmVersion && latestNpmVersion !== currentVersion) {
82
+ updateAvailable = true;
83
+ updateType = 'npm';
84
+ console.log(`${c.green}New release available: v${latestNpmVersion}!${c.reset}`);
85
+ }
86
+ else {
87
+ console.log(`${c.dim}(latest on npm: ${latestNpmVersion || 'v' + currentVersion})${c.reset}`);
88
+ }
89
+ // Check git if in repo
90
+ if (isGitRepository()) {
91
+ process.stdout.write(` ${symbols.refresh} Checking git upstream remote... `);
92
+ const gitStatus = checkGitUpstreamCommits();
93
+ if (gitStatus.behind > 0) {
94
+ updateAvailable = true;
95
+ updateType = 'git';
96
+ gitBehindCount = gitStatus.behind;
97
+ gitCommits = gitStatus.commits;
98
+ console.log(`${c.green}${gitBehindCount} upstream commit(s) available!${c.reset}`);
99
+ for (const commit of gitCommits) {
100
+ console.log(` ${c.dim}${commit}${c.reset}`);
101
+ }
102
+ }
103
+ else {
104
+ console.log(`${c.dim}(working tree is up to date)${c.reset}`);
105
+ }
106
+ }
107
+ if (!updateAvailable) {
108
+ console.log(`\n${symbols.success} ${c.green}${c.bold}Musonda Agent is already up to date! (v${currentVersion})${c.reset}\n`);
109
+ return true;
110
+ }
111
+ if (options.checkOnly) {
112
+ console.log(`\n${symbols.info} Run ${c.bold}musonda update${c.reset} to apply available updates.\n`);
113
+ return true;
114
+ }
115
+ // Confirm applying update
116
+ if (!options.yes && process.stdin.isTTY) {
117
+ const rl = readline.createInterface({ input, output });
118
+ const answer = await rl.question(`\nApply update now? [Y/n]: `);
119
+ rl.close();
120
+ if (answer.trim().toLowerCase() === 'n') {
121
+ console.log(`${c.yellow}Update postponed.${c.reset}\n`);
122
+ return false;
123
+ }
124
+ }
125
+ console.log(`\n${symbols.rocket} Applying Musonda updates...`);
126
+ try {
127
+ if (updateType === 'git') {
128
+ console.log(` Pulling latest changes via git...`);
129
+ execSync('git pull', { stdio: 'inherit' });
130
+ console.log(` Updating dependencies via npm...`);
131
+ execSync('npm install', { stdio: 'inherit' });
132
+ console.log(` Rebuilding project (tsc)...`);
133
+ execSync('npm run build', { stdio: 'inherit' });
134
+ }
135
+ else {
136
+ console.log(` Updating via npm install...`);
137
+ execSync('npm install -g musonda@latest', { stdio: 'inherit' });
138
+ }
139
+ console.log(`\n${symbols.success} ${c.bold}${c.green}Musonda Agent successfully updated!${c.reset}\n`);
140
+ return true;
141
+ }
142
+ catch (err) {
143
+ console.error(`\n${symbols.error} ${c.red}Update failed: ${err.message}${c.reset}\n`);
144
+ return false;
145
+ }
146
+ }
147
+ export async function updateInstalledPlugins(targetPluginName, options = {}) {
148
+ const config = configLoader.load();
149
+ const searchDirs = config.plugins?.directories || ['./data/plugins', './plugins'];
150
+ const pluginDirsToUpdate = [];
151
+ for (const sDir of searchDirs) {
152
+ const resolved = path.resolve(sDir);
153
+ if (!fs.existsSync(resolved))
154
+ continue;
155
+ const entries = fs.readdirSync(resolved, { withFileTypes: true });
156
+ for (const entry of entries) {
157
+ if (!entry.isDirectory())
158
+ continue;
159
+ if (targetPluginName && entry.name.toLowerCase() !== targetPluginName.toLowerCase()) {
160
+ continue;
161
+ }
162
+ const candidate = path.join(resolved, entry.name);
163
+ if (fs.existsSync(path.join(candidate, 'plugin.json'))) {
164
+ pluginDirsToUpdate.push(candidate);
165
+ }
166
+ }
167
+ }
168
+ if (pluginDirsToUpdate.length === 0) {
169
+ console.log(`\n${symbols.info} No matching installed plugins to update.\n`);
170
+ return;
171
+ }
172
+ console.log(`\n${symbols.plugin} Checking updates for ${pluginDirsToUpdate.length} installed plugin(s)...`);
173
+ for (const pDir of pluginDirsToUpdate) {
174
+ const pName = path.basename(pDir);
175
+ const gitDir = path.join(pDir, '.git');
176
+ const pkgJson = path.join(pDir, 'package.json');
177
+ console.log(`\n${c.bold}Plugin: ${pName}${c.reset} (${pDir})`);
178
+ if (fs.existsSync(gitDir) && isGitRepository(pDir)) {
179
+ const status = checkGitUpstreamCommits(pDir);
180
+ if (status.behind > 0) {
181
+ console.log(` ${symbols.refresh} ${status.behind} new commit(s) available.`);
182
+ if (!options.checkOnly) {
183
+ try {
184
+ console.log(` Pulling latest changes...`);
185
+ execSync('git pull', { cwd: pDir, stdio: 'inherit' });
186
+ if (fs.existsSync(pkgJson)) {
187
+ console.log(` Updating plugin npm dependencies...`);
188
+ execSync('npm install --omit=dev', { cwd: pDir, stdio: 'pipe' });
189
+ }
190
+ console.log(` ${symbols.success} ${c.green}Updated ${pName} successfully.${c.reset}`);
191
+ }
192
+ catch (err) {
193
+ console.log(` ${symbols.error} ${c.red}Could not update ${pName}: ${err.message}${c.reset}`);
194
+ }
195
+ }
196
+ }
197
+ else {
198
+ console.log(` ${symbols.success} ${c.dim}Up to date.${c.reset}`);
199
+ }
200
+ }
201
+ else {
202
+ console.log(` ${symbols.info} Local package (no git origin). Manifest validated.`);
203
+ }
204
+ }
205
+ console.log(`\n${symbols.success} ${c.green}Plugin update scan complete.${c.reset}\n`);
206
+ }
207
+ export async function handleUpdateCommand(target, options = {}) {
208
+ const t = target?.trim().toLowerCase();
209
+ if (t === 'agent' || t === 'core') {
210
+ await updateAgentPackage(options);
211
+ return;
212
+ }
213
+ if (t === 'plugins' || t === 'plugin') {
214
+ await updateInstalledPlugins(undefined, options);
215
+ return;
216
+ }
217
+ if (t && t !== 'all') {
218
+ // Treat as specific plugin name
219
+ await updateInstalledPlugins(t, options);
220
+ return;
221
+ }
222
+ // Default: update both agent and plugins!
223
+ await updateAgentPackage(options);
224
+ await updateInstalledPlugins(undefined, options);
225
+ }
226
+ //# sourceMappingURL=update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../../src/cli/commands/update.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Musonda Gateway Daemon & Process Lifecycle Manager
3
+ */
4
+ export interface DaemonInfo {
5
+ pid: number;
6
+ port: number;
7
+ host: string;
8
+ startedAt: number;
9
+ logFile: string;
10
+ }
11
+ export declare function savePid(info: DaemonInfo): void;
12
+ export declare function readPid(): DaemonInfo | null;
13
+ export declare function clearPid(): void;
14
+ export declare function isProcessRunning(pid: number): boolean;
15
+ export declare function checkGatewayHealth(host: string, port: number, timeoutMs?: number): Promise<any | null>;
16
+ export declare function getScriptEntrypoint(): string;
17
+ export declare function startDaemonProcess(params: {
18
+ host?: string;
19
+ port?: number;
20
+ logFile?: string;
21
+ verbose?: boolean;
22
+ }): {
23
+ pid: number;
24
+ logFile: string;
25
+ };
26
+ export declare function stopDaemonProcess(params: {
27
+ host?: string;
28
+ port?: number;
29
+ }): Promise<{
30
+ success: boolean;
31
+ message: string;
32
+ wasRunning: boolean;
33
+ }>;
@@ -0,0 +1,208 @@
1
+ /**
2
+ * Musonda Gateway Daemon & Process Lifecycle Manager
3
+ */
4
+ import fs from 'node:fs';
5
+ import path from 'node:path';
6
+ import { spawn, execSync } from 'node:child_process';
7
+ import { configLoader } from '../config/loader.js';
8
+ function getPidFilePath() {
9
+ const config = configLoader.load();
10
+ const storageDir = config.memory?.storageDir || './data';
11
+ const resolvedDir = path.resolve(storageDir);
12
+ if (!fs.existsSync(resolvedDir)) {
13
+ try {
14
+ fs.mkdirSync(resolvedDir, { recursive: true });
15
+ }
16
+ catch { }
17
+ }
18
+ return path.join(resolvedDir, 'gateway.pid');
19
+ }
20
+ export function savePid(info) {
21
+ try {
22
+ const pidFile = getPidFilePath();
23
+ fs.writeFileSync(pidFile, JSON.stringify(info, null, 2), 'utf-8');
24
+ }
25
+ catch { }
26
+ }
27
+ export function readPid() {
28
+ try {
29
+ const pidFile = getPidFilePath();
30
+ if (fs.existsSync(pidFile)) {
31
+ const data = JSON.parse(fs.readFileSync(pidFile, 'utf-8'));
32
+ if (data && typeof data.pid === 'number') {
33
+ return data;
34
+ }
35
+ }
36
+ }
37
+ catch { }
38
+ return null;
39
+ }
40
+ export function clearPid() {
41
+ try {
42
+ const pidFile = getPidFilePath();
43
+ if (fs.existsSync(pidFile)) {
44
+ fs.unlinkSync(pidFile);
45
+ }
46
+ }
47
+ catch { }
48
+ }
49
+ export function isProcessRunning(pid) {
50
+ try {
51
+ process.kill(pid, 0);
52
+ return true;
53
+ }
54
+ catch (err) {
55
+ return err.code === 'EPERM';
56
+ }
57
+ }
58
+ export async function checkGatewayHealth(host, port, timeoutMs = 1200) {
59
+ try {
60
+ const controller = new AbortController();
61
+ const timer = setTimeout(() => controller.abort(), timeoutMs);
62
+ const res = await fetch(`http://${host}:${port}/health`, { signal: controller.signal });
63
+ clearTimeout(timer);
64
+ if (res.ok) {
65
+ return await res.json();
66
+ }
67
+ }
68
+ catch { }
69
+ return null;
70
+ }
71
+ export function getScriptEntrypoint() {
72
+ // If running via tsx or node
73
+ const arg1 = process.argv[1] ? path.resolve(process.argv[1]) : '';
74
+ if (arg1 && fs.existsSync(arg1)) {
75
+ return arg1;
76
+ }
77
+ const defaultDist = path.resolve(process.cwd(), 'dist/index.js');
78
+ if (fs.existsSync(defaultDist)) {
79
+ return defaultDist;
80
+ }
81
+ return path.resolve(process.cwd(), 'src/index.ts');
82
+ }
83
+ export function startDaemonProcess(params) {
84
+ const config = configLoader.load();
85
+ const host = params.host || config.gateway?.host || '127.0.0.1';
86
+ const port = params.port || config.gateway?.port || 4141;
87
+ const storageDir = config.memory?.storageDir || './data';
88
+ const logDir = path.resolve(storageDir);
89
+ if (!fs.existsSync(logDir)) {
90
+ fs.mkdirSync(logDir, { recursive: true });
91
+ }
92
+ const logFile = params.logFile ? path.resolve(params.logFile) : path.join(logDir, 'gateway.log');
93
+ const logFd = fs.openSync(logFile, 'a');
94
+ const entry = getScriptEntrypoint();
95
+ const isTs = entry.endsWith('.ts');
96
+ const spawnArgs = [];
97
+ let execBinary = process.execPath;
98
+ if (isTs) {
99
+ // If running in typescript mode, check for tsx
100
+ try {
101
+ execSync('npx --version', { stdio: 'ignore' });
102
+ execBinary = process.platform === 'win32' ? 'npx.cmd' : 'npx';
103
+ spawnArgs.push('tsx', entry, 'start', 'gateway', '--foreground', '--host', host, '--port', String(port));
104
+ }
105
+ catch {
106
+ spawnArgs.push(entry, 'start', 'gateway', '--foreground', '--host', host, '--port', String(port));
107
+ }
108
+ }
109
+ else {
110
+ spawnArgs.push(entry, 'start', 'gateway', '--foreground', '--host', host, '--port', String(port));
111
+ }
112
+ if (params.verbose) {
113
+ spawnArgs.push('--verbose');
114
+ }
115
+ const child = spawn(execBinary, spawnArgs, {
116
+ detached: true,
117
+ stdio: ['ignore', logFd, logFd],
118
+ cwd: process.cwd(),
119
+ env: {
120
+ ...process.env,
121
+ MUSONDA_DAEMON: 'true',
122
+ MUSONDA_GATEWAY_PORT: String(port),
123
+ MUSONDA_GATEWAY_HOST: host,
124
+ },
125
+ shell: isTs && process.platform === 'win32',
126
+ });
127
+ if (!child.pid) {
128
+ throw new Error('Failed to spawn daemon process.');
129
+ }
130
+ const daemonInfo = {
131
+ pid: child.pid,
132
+ port,
133
+ host,
134
+ startedAt: Date.now(),
135
+ logFile,
136
+ };
137
+ savePid(daemonInfo);
138
+ child.unref();
139
+ return { pid: child.pid, logFile };
140
+ }
141
+ export async function stopDaemonProcess(params) {
142
+ const config = configLoader.load();
143
+ const host = params.host || config.gateway?.host || '127.0.0.1';
144
+ const port = params.port || config.gateway?.port || 4141;
145
+ const currentPidInfo = readPid();
146
+ let wasRunning = false;
147
+ // 1. Try graceful HTTP shutdown
148
+ try {
149
+ const controller = new AbortController();
150
+ const timer = setTimeout(() => controller.abort(), 1500);
151
+ const res = await fetch(`http://${host}:${port}/api/gateway/stop`, {
152
+ method: 'POST',
153
+ headers: {
154
+ 'Content-Type': 'application/json',
155
+ ...(config.gateway?.apiKey ? { Authorization: `Bearer ${config.gateway.apiKey}` } : {}),
156
+ },
157
+ signal: controller.signal,
158
+ });
159
+ clearTimeout(timer);
160
+ if (res.ok) {
161
+ wasRunning = true;
162
+ }
163
+ }
164
+ catch { }
165
+ // 2. Terminate by PID if recorded
166
+ if (currentPidInfo && currentPidInfo.pid) {
167
+ const pid = currentPidInfo.pid;
168
+ if (isProcessRunning(pid)) {
169
+ wasRunning = true;
170
+ try {
171
+ if (process.platform === 'win32') {
172
+ try {
173
+ execSync(`taskkill /pid ${pid} /T /F`, { stdio: 'ignore' });
174
+ }
175
+ catch {
176
+ process.kill(pid, 'SIGTERM');
177
+ }
178
+ }
179
+ else {
180
+ process.kill(pid, 'SIGTERM');
181
+ }
182
+ }
183
+ catch { }
184
+ }
185
+ }
186
+ // 3. Poll briefly to ensure process has exited and port is freed
187
+ for (let i = 0; i < 10; i++) {
188
+ const health = await checkGatewayHealth(host, port, 300);
189
+ if (!health) {
190
+ break;
191
+ }
192
+ await new Promise((r) => setTimeout(r, 200));
193
+ }
194
+ clearPid();
195
+ if (!wasRunning) {
196
+ return {
197
+ success: true,
198
+ wasRunning: false,
199
+ message: `No active Musonda Gateway daemon found running on http://${host}:${port}.`,
200
+ };
201
+ }
202
+ return {
203
+ success: true,
204
+ wasRunning: true,
205
+ message: `Musonda Gateway on http://${host}:${port} has been gracefully stopped.`,
206
+ };
207
+ }
208
+ //# sourceMappingURL=daemon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"daemon.js","sourceRoot":"","sources":["../../src/cli/daemon.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Musonda Interactive CLI Terminal Dashboard & Interactive Command Shell
3
+ */
4
+ export declare function runInteractiveMenu(): Promise<void>;
5
+ export declare function runInteractiveShell(): Promise<void>;