memoryblock 0.1.3 → 0.1.5

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 (111) hide show
  1. package/README.md +77 -123
  2. package/bin/mblk.js +85 -0
  3. package/dist/commands/create.d.ts +2 -0
  4. package/dist/commands/create.d.ts.map +1 -0
  5. package/dist/commands/create.js +48 -0
  6. package/dist/commands/create.js.map +1 -0
  7. package/dist/commands/delete.d.ts +5 -0
  8. package/dist/commands/delete.d.ts.map +1 -0
  9. package/dist/commands/delete.js +147 -0
  10. package/dist/commands/delete.js.map +1 -0
  11. package/dist/commands/init.d.ts +9 -0
  12. package/dist/commands/init.d.ts.map +1 -0
  13. package/dist/commands/init.js +209 -0
  14. package/dist/commands/init.js.map +1 -0
  15. package/dist/commands/permissions.d.ts +13 -0
  16. package/dist/commands/permissions.d.ts.map +1 -0
  17. package/dist/commands/permissions.js +60 -0
  18. package/dist/commands/permissions.js.map +1 -0
  19. package/dist/commands/plugin-settings.d.ts +6 -0
  20. package/dist/commands/plugin-settings.d.ts.map +1 -0
  21. package/dist/commands/plugin-settings.js +118 -0
  22. package/dist/commands/plugin-settings.js.map +1 -0
  23. package/dist/commands/plugins.d.ts +3 -0
  24. package/dist/commands/plugins.d.ts.map +1 -0
  25. package/dist/commands/plugins.js +83 -0
  26. package/dist/commands/plugins.js.map +1 -0
  27. package/dist/commands/reset.d.ts +8 -0
  28. package/dist/commands/reset.d.ts.map +1 -0
  29. package/dist/commands/reset.js +96 -0
  30. package/dist/commands/reset.js.map +1 -0
  31. package/dist/commands/server.d.ts +25 -0
  32. package/dist/commands/server.d.ts.map +1 -0
  33. package/dist/commands/server.js +295 -0
  34. package/dist/commands/server.js.map +1 -0
  35. package/dist/commands/service.d.ts +18 -0
  36. package/dist/commands/service.d.ts.map +1 -0
  37. package/dist/commands/service.js +309 -0
  38. package/dist/commands/service.js.map +1 -0
  39. package/dist/commands/start.d.ts +11 -0
  40. package/dist/commands/start.d.ts.map +1 -0
  41. package/dist/commands/start.js +794 -0
  42. package/dist/commands/start.js.map +1 -0
  43. package/dist/commands/status.d.ts +2 -0
  44. package/dist/commands/status.d.ts.map +1 -0
  45. package/dist/commands/status.js +78 -0
  46. package/dist/commands/status.js.map +1 -0
  47. package/dist/commands/stop.d.ts +9 -0
  48. package/dist/commands/stop.d.ts.map +1 -0
  49. package/dist/commands/stop.js +83 -0
  50. package/dist/commands/stop.js.map +1 -0
  51. package/dist/commands/web.d.ts +5 -0
  52. package/dist/commands/web.d.ts.map +1 -0
  53. package/dist/commands/web.js +63 -0
  54. package/dist/commands/web.js.map +1 -0
  55. package/dist/commands.d.ts +7 -0
  56. package/dist/commands.d.ts.map +1 -0
  57. package/dist/commands.js +7 -0
  58. package/dist/commands.js.map +1 -0
  59. package/dist/constants.d.ts +41 -0
  60. package/dist/constants.d.ts.map +1 -0
  61. package/dist/constants.js +81 -0
  62. package/dist/constants.js.map +1 -0
  63. package/dist/entry.d.ts +9 -0
  64. package/dist/entry.d.ts.map +1 -0
  65. package/dist/entry.js +345 -0
  66. package/dist/entry.js.map +1 -0
  67. package/package.json +37 -12
  68. package/dist/engine/agent.d.ts +0 -15
  69. package/dist/engine/agent.d.ts.map +0 -1
  70. package/dist/engine/agent.js +0 -19
  71. package/dist/engine/agent.js.map +0 -1
  72. package/dist/engine/conversation-log.d.ts +0 -35
  73. package/dist/engine/conversation-log.d.ts.map +0 -1
  74. package/dist/engine/conversation-log.js +0 -83
  75. package/dist/engine/conversation-log.js.map +0 -1
  76. package/dist/engine/cost-tracker.d.ts +0 -52
  77. package/dist/engine/cost-tracker.d.ts.map +0 -1
  78. package/dist/engine/cost-tracker.js +0 -110
  79. package/dist/engine/cost-tracker.js.map +0 -1
  80. package/dist/engine/gatekeeper.d.ts +0 -20
  81. package/dist/engine/gatekeeper.d.ts.map +0 -1
  82. package/dist/engine/gatekeeper.js +0 -43
  83. package/dist/engine/gatekeeper.js.map +0 -1
  84. package/dist/engine/memory.d.ts +0 -28
  85. package/dist/engine/memory.d.ts.map +0 -1
  86. package/dist/engine/memory.js +0 -69
  87. package/dist/engine/memory.js.map +0 -1
  88. package/dist/engine/monitor.d.ts +0 -81
  89. package/dist/engine/monitor.d.ts.map +0 -1
  90. package/dist/engine/monitor.js +0 -610
  91. package/dist/engine/monitor.js.map +0 -1
  92. package/dist/engine/prompts.d.ts +0 -31
  93. package/dist/engine/prompts.d.ts.map +0 -1
  94. package/dist/engine/prompts.js +0 -93
  95. package/dist/engine/prompts.js.map +0 -1
  96. package/dist/index.d.ts +0 -10
  97. package/dist/index.d.ts.map +0 -1
  98. package/dist/index.js +0 -14
  99. package/dist/index.js.map +0 -1
  100. package/dist/utils/config.d.ts +0 -24
  101. package/dist/utils/config.d.ts.map +0 -1
  102. package/dist/utils/config.js +0 -86
  103. package/dist/utils/config.js.map +0 -1
  104. package/dist/utils/fs.d.ts +0 -18
  105. package/dist/utils/fs.d.ts.map +0 -1
  106. package/dist/utils/fs.js +0 -65
  107. package/dist/utils/fs.js.map +0 -1
  108. package/dist/utils/logger.d.ts +0 -12
  109. package/dist/utils/logger.d.ts.map +0 -1
  110. package/dist/utils/logger.js +0 -40
  111. package/dist/utils/logger.js.map +0 -1
@@ -0,0 +1,209 @@
1
+ import * as p from '@clack/prompts';
2
+ import chalk from 'chalk';
3
+ import { ensureDir, writeJson } from '@memoryblock/core';
4
+ import { getWsRoot, getConfigPath, getAuthPath, isInitialized, } from '@memoryblock/core';
5
+ import { GlobalConfigSchema } from '@memoryblock/types';
6
+ import { log } from '@memoryblock/core';
7
+ import { PROVIDERS, CHANNELS, PLUGINS, PROVIDER_AUTH, CHANNEL_AUTH } from '../constants.js';
8
+ // Brand accent
9
+ const ACCENT = chalk.hex('#805AD5');
10
+ const DIM = chalk.dim;
11
+ /**
12
+ * Interactive onboarding wizard.
13
+ * Multi-step setup: providers → channels → plugins → API keys → first block.
14
+ * Uses @clack/prompts for styled terminal UI.
15
+ */
16
+ export async function initCommand(options) {
17
+ const wsDir = getWsRoot();
18
+ // Non-interactive: create defaults and exit
19
+ if (options?.nonInteractive) {
20
+ await ensureDir(wsDir);
21
+ const defaultConfig = GlobalConfigSchema.parse({
22
+ blocksDir: './blocks'
23
+ });
24
+ await writeJson(getConfigPath(), defaultConfig);
25
+ await writeJson(getAuthPath(), {
26
+ aws: { accessKeyId: '', secretAccessKey: '', region: 'us-east-1' },
27
+ anthropic: { apiKey: '' },
28
+ openai: { apiKey: '' },
29
+ gemini: { apiKey: '' },
30
+ telegram: { botToken: '', chatId: '' },
31
+ brave: { apiKey: '' }
32
+ });
33
+ log.brand('Initialized (non-interactive)');
34
+ log.success(`Workspace: ${wsDir}`);
35
+ log.success(`Config: ${getConfigPath()}`);
36
+ return;
37
+ }
38
+ const alreadyInit = await isInitialized();
39
+ // Welcome
40
+ console.log('');
41
+ log.banner();
42
+ console.log(DIM(' Deploy isolated AI workspaces on your machine.\n'));
43
+ p.intro(chalk.bold('Setup Wizard'));
44
+ if (alreadyInit) {
45
+ const proceed = await p.confirm({
46
+ message: 'Already configured globally. Re-run setup?',
47
+ initialValue: false,
48
+ });
49
+ if (p.isCancel(proceed) || !proceed) {
50
+ p.outro('Setup cancelled.');
51
+ return;
52
+ }
53
+ }
54
+ // ─── Step 1: Providers ───────────────────────────────
55
+ const selectedProviders = await p.multiselect({
56
+ message: 'Which providers do you want to use?',
57
+ options: PROVIDERS,
58
+ initialValues: ['bedrock'],
59
+ required: true,
60
+ });
61
+ if (p.isCancel(selectedProviders)) {
62
+ p.outro('Setup cancelled.');
63
+ return;
64
+ }
65
+ // ─── Step 2: Channels ───────────────────────────────
66
+ const selectedChannels = await p.multiselect({
67
+ message: 'Which channels do you want to enable?',
68
+ options: CHANNELS.map(ch => ({
69
+ ...ch,
70
+ label: (ch.value === 'cli' || ch.value === 'web') ? `${ch.label} (always on)` : ch.label,
71
+ })),
72
+ initialValues: ['cli', 'web'],
73
+ required: true,
74
+ });
75
+ if (p.isCancel(selectedChannels)) {
76
+ p.outro('Setup cancelled.');
77
+ return;
78
+ }
79
+ // ─── Step 3: Skills & Plugins ───────────────────────
80
+ p.log.info(`${chalk.green('✓')} Core skills (file ops, shell, dev) — always available`);
81
+ p.log.info(`${chalk.green('✓')} Multi-Agent Orchestration — always available`);
82
+ let selectedPlugins = [];
83
+ if (PLUGINS.length > 0) {
84
+ selectedPlugins = await p.multiselect({
85
+ message: 'Select additional skills & plugins to install:',
86
+ options: PLUGINS.map(pl => ({
87
+ value: pl.value,
88
+ label: pl.label,
89
+ hint: pl.hint,
90
+ })),
91
+ required: false,
92
+ });
93
+ if (p.isCancel(selectedPlugins)) {
94
+ p.outro('Setup cancelled.');
95
+ return;
96
+ }
97
+ }
98
+ // ─── Step 4: API Keys ───────────────────────────────
99
+ const authData = {};
100
+ for (const provider of selectedProviders) {
101
+ const providerAuth = PROVIDER_AUTH[provider];
102
+ if (!providerAuth || providerAuth.fields.length === 0)
103
+ continue;
104
+ const providerLabel = PROVIDERS.find(p => p.value === provider)?.label || provider;
105
+ p.log.step(`${providerLabel} credentials`);
106
+ const data = {};
107
+ for (const field of providerAuth.fields) {
108
+ const value = await p.text({
109
+ message: field.label,
110
+ placeholder: field.key === 'region' ? 'us-east-1' : '',
111
+ defaultValue: field.key === 'region' ? 'us-east-1' : undefined,
112
+ });
113
+ if (p.isCancel(value)) {
114
+ p.outro('Setup cancelled.');
115
+ return;
116
+ }
117
+ data[field.key] = value || '';
118
+ }
119
+ authData[provider === 'bedrock' ? 'aws' : provider] = data;
120
+ }
121
+ // Channel auth (only telegram has auth currently)
122
+ for (const channel of selectedChannels) {
123
+ const fields = CHANNEL_AUTH[channel];
124
+ if (!fields)
125
+ continue;
126
+ const channelLabel = CHANNELS.find(c => c.value === channel)?.label || channel;
127
+ p.log.step(`${channelLabel} credentials`);
128
+ const data = {};
129
+ for (const field of fields) {
130
+ const value = await p.text({
131
+ message: field.label,
132
+ placeholder: field.secret ? '' : 'optional',
133
+ });
134
+ if (p.isCancel(value)) {
135
+ p.outro('Setup cancelled.');
136
+ return;
137
+ }
138
+ data[field.key] = value || '';
139
+ }
140
+ authData[channel] = data;
141
+ }
142
+ // ─── Step 5: Connection Testing ─────────────────────
143
+ const s = p.spinner();
144
+ const results = [];
145
+ // Test Bedrock
146
+ if (authData.aws?.accessKeyId) {
147
+ s.start('Testing Bedrock connection...');
148
+ try {
149
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
150
+ // @ts-ignore — dynamic import, may not be installed
151
+ const { BedrockRuntimeClient, ConverseCommand } = await import('@aws-sdk/client-bedrock-runtime');
152
+ const client = new BedrockRuntimeClient({
153
+ region: authData.aws.region || 'us-east-1',
154
+ credentials: { accessKeyId: authData.aws.accessKeyId, secretAccessKey: authData.aws.secretAccessKey },
155
+ });
156
+ await client.send(new ConverseCommand({
157
+ modelId: 'anthropic.claude-3-haiku-20240307-v1:0',
158
+ messages: [{ role: 'user', content: [{ text: 'hi' }] }],
159
+ inferenceConfig: { maxTokens: 1 },
160
+ }));
161
+ results.push({ name: 'Bedrock', ok: true });
162
+ s.stop('Bedrock ✓');
163
+ }
164
+ catch (err) {
165
+ // AccessDeniedException means credentials ARE valid, just model not enabled
166
+ const isAccessIssue = err?.name === 'AccessDeniedException' || err?.Code === 'AccessDeniedException';
167
+ if (isAccessIssue) {
168
+ results.push({ name: 'Bedrock', ok: true });
169
+ s.stop('Bedrock ✓ (credentials valid, enable models in AWS console)');
170
+ }
171
+ else {
172
+ results.push({ name: 'Bedrock', ok: false });
173
+ s.stop('Bedrock ✗ (check credentials later)');
174
+ }
175
+ }
176
+ }
177
+ // Test Telegram
178
+ if (authData.telegram?.botToken) {
179
+ s.start('Testing Telegram bot...');
180
+ try {
181
+ const res = await fetch(`https://api.telegram.org/bot${authData.telegram.botToken}/getMe`);
182
+ const data = await res.json();
183
+ results.push({ name: 'Telegram', ok: data.ok });
184
+ s.stop(data.ok ? 'Telegram ✓' : 'Telegram ✗');
185
+ }
186
+ catch {
187
+ results.push({ name: 'Telegram', ok: false });
188
+ s.stop('Telegram ✗');
189
+ }
190
+ }
191
+ // ─── Step 6: Save Configuration ─────────────────────
192
+ await ensureDir(wsDir);
193
+ const defaultConfig = GlobalConfigSchema.parse({
194
+ blocksDir: './blocks',
195
+ });
196
+ await writeJson(getConfigPath(), defaultConfig);
197
+ await writeJson(getAuthPath(), authData);
198
+ // ─── Done ───────────────────────────────────────────
199
+ console.log('');
200
+ p.note([
201
+ ...results.map(r => `${r.ok ? chalk.green('✓') : chalk.yellow('○')} ${r.name}`),
202
+ ...(results.length === 0 ? [DIM('No connections configured yet')] : []),
203
+ '',
204
+ DIM(`Workspace: ${wsDir}`),
205
+ DIM(`Config: ${getConfigPath()}`),
206
+ ].join('\n'), 'Setup Complete');
207
+ p.outro(`Run ${ACCENT('mblk start <name>')} to create and start your first block.`);
208
+ }
209
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * View or update block permissions.
3
+ * Permissions are CLI-only — they cannot be changed via chat or web.
4
+ */
5
+ export declare function permissionsCommand(blockName: string, options?: {
6
+ scope?: string;
7
+ allowShell?: boolean;
8
+ denyShell?: boolean;
9
+ allowNetwork?: boolean;
10
+ denyNetwork?: boolean;
11
+ maxTimeout?: string;
12
+ }): Promise<void>;
13
+ //# sourceMappingURL=permissions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permissions.d.ts","sourceRoot":"","sources":["../../src/commands/permissions.ts"],"names":[],"mappings":"AASA;;;GAGG;AACH,wBAAsB,kBAAkB,CACpC,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE;IACN,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;CACvB,GACF,OAAO,CAAC,IAAI,CAAC,CAqDf"}
@@ -0,0 +1,60 @@
1
+ import { loadGlobalConfig, resolveBlockPath, loadBlockConfig, saveBlockConfig } from '@memoryblock/core';
2
+ import { pathExists } from '@memoryblock/core';
3
+ import { log } from '@memoryblock/core';
4
+ import { join } from 'node:path';
5
+ const VALID_SCOPES = ['block', 'workspace', 'system'];
6
+ /**
7
+ * View or update block permissions.
8
+ * Permissions are CLI-only — they cannot be changed via chat or web.
9
+ */
10
+ export async function permissionsCommand(blockName, options) {
11
+ const globalConfig = await loadGlobalConfig();
12
+ const blockPath = resolveBlockPath(globalConfig, blockName);
13
+ if (!await pathExists(join(blockPath, 'config.json'))) {
14
+ log.error(`Block "${blockName}" not found.`);
15
+ process.exit(1);
16
+ }
17
+ const config = await loadBlockConfig(blockPath);
18
+ const perms = config.permissions || { scope: 'block', allowShell: false, allowNetwork: true, maxTimeout: 120_000 };
19
+ // No flags = show current permissions
20
+ const hasFlags = options?.scope || options?.allowShell || options?.denyShell
21
+ || options?.allowNetwork || options?.denyNetwork || options?.maxTimeout;
22
+ if (!hasFlags) {
23
+ log.brand(`permissions — ${blockName}\n`);
24
+ console.log(` Scope: ${perms.scope}`);
25
+ console.log(` Shell Access: ${perms.allowShell ? '✓ allowed' : '✗ denied'}`);
26
+ console.log(` Network: ${perms.allowNetwork ? '✓ allowed' : '✗ denied'}`);
27
+ console.log(` Max Timeout: ${(perms.maxTimeout / 1000).toFixed(0)}s`);
28
+ console.log('');
29
+ log.dim(' Scopes:');
30
+ log.dim(' block — read/write own block directory only (default)');
31
+ log.dim(' workspace — access the entire workspace');
32
+ log.dim(' system — unrestricted file and shell access');
33
+ console.log('');
34
+ return;
35
+ }
36
+ // Apply changes
37
+ if (options?.scope) {
38
+ if (!VALID_SCOPES.includes(options.scope)) {
39
+ log.error(`Invalid scope: "${options.scope}". Use: block, workspace, or system.`);
40
+ process.exit(1);
41
+ }
42
+ perms.scope = options.scope;
43
+ }
44
+ if (options?.allowShell)
45
+ perms.allowShell = true;
46
+ if (options?.denyShell)
47
+ perms.allowShell = false;
48
+ if (options?.allowNetwork)
49
+ perms.allowNetwork = true;
50
+ if (options?.denyNetwork)
51
+ perms.allowNetwork = false;
52
+ if (options?.maxTimeout)
53
+ perms.maxTimeout = parseInt(options.maxTimeout, 10) * 1000;
54
+ // Save
55
+ config.permissions = perms;
56
+ await saveBlockConfig(blockPath, config);
57
+ log.success(` Permissions updated for "${blockName}".`);
58
+ console.log(` Scope: ${perms.scope}, Shell: ${perms.allowShell ? 'yes' : 'no'}, Network: ${perms.allowNetwork ? 'yes' : 'no'}, Timeout: ${(perms.maxTimeout / 1000).toFixed(0)}s`);
59
+ }
60
+ //# sourceMappingURL=permissions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permissions.js","sourceRoot":"","sources":["../../src/commands/permissions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * mblk settings <plugin> — view/edit plugin settings via CLI.
3
+ * Auto-generates forms from the plugin's settings schema.
4
+ */
5
+ export declare function pluginSettingsCommand(pluginId?: string): Promise<void>;
6
+ //# sourceMappingURL=plugin-settings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-settings.d.ts","sourceRoot":"","sources":["../../src/commands/plugin-settings.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,wBAAsB,qBAAqB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAuG5E"}
@@ -0,0 +1,118 @@
1
+ import * as p from '@clack/prompts';
2
+ import { log } from '@memoryblock/core';
3
+ /**
4
+ * mblk settings <plugin> — view/edit plugin settings via CLI.
5
+ * Auto-generates forms from the plugin's settings schema.
6
+ */
7
+ export async function pluginSettingsCommand(pluginId) {
8
+ let installer;
9
+ try {
10
+ // eslint-disable-next-line @typescript-eslint/ban-ts-comment
11
+ // @ts-ignore — optional runtime dependency, not needed at compile time
12
+ const mod = await import('@memoryblock/plugin-installer');
13
+ installer = new mod.PluginInstaller();
14
+ }
15
+ catch {
16
+ log.error('Plugin installer not available.');
17
+ process.exit(1);
18
+ }
19
+ const plugins = await installer.listPlugins();
20
+ // No plugin specified — list all plugins with settings
21
+ if (!pluginId) {
22
+ const withSettings = plugins.filter((pl) => pl.settings && Object.keys(pl.settings).length > 0);
23
+ if (withSettings.length === 0) {
24
+ log.dim(' No plugins with configurable settings.');
25
+ return;
26
+ }
27
+ log.brand('plugin settings\n');
28
+ for (const pl of withSettings) {
29
+ const fields = Object.keys(pl.settings).length;
30
+ console.log(` ${pl.core ? '●' : '○'} ${pl.name} (${pl.id}) — ${fields} setting${fields > 1 ? 's' : ''}`);
31
+ }
32
+ console.log('');
33
+ log.dim(' Run `mblk settings <plugin-id>` to configure.');
34
+ return;
35
+ }
36
+ // Find the plugin
37
+ const plugin = plugins.find((pl) => pl.id === pluginId);
38
+ if (!plugin) {
39
+ log.error(`Plugin "${pluginId}" not found.`);
40
+ process.exit(1);
41
+ }
42
+ if (!plugin.settings || Object.keys(plugin.settings).length === 0) {
43
+ log.dim(` Plugin "${plugin.name}" has no configurable settings.`);
44
+ return;
45
+ }
46
+ // Load current values
47
+ const current = await installer.getPluginSettings(pluginId);
48
+ p.intro(`${plugin.name} Settings`);
49
+ const updates = {};
50
+ for (const [key, field] of Object.entries(plugin.settings)) {
51
+ const currentVal = current[key];
52
+ if (field.type === 'select') {
53
+ const result = await p.select({
54
+ message: field.label,
55
+ options: (field.options || []).map((o) => ({
56
+ value: o,
57
+ label: o,
58
+ hint: o === currentVal ? 'current' : undefined,
59
+ })),
60
+ initialValue: currentVal || field.default,
61
+ });
62
+ if (p.isCancel(result)) {
63
+ p.outro('Cancelled.');
64
+ return;
65
+ }
66
+ updates[key] = result;
67
+ }
68
+ else if (field.type === 'toggle') {
69
+ const result = await p.confirm({
70
+ message: field.label,
71
+ initialValue: currentVal ?? field.default ?? false,
72
+ });
73
+ if (p.isCancel(result)) {
74
+ p.outro('Cancelled.');
75
+ return;
76
+ }
77
+ updates[key] = result;
78
+ }
79
+ else if (field.type === 'number') {
80
+ const result = await p.text({
81
+ message: `${field.label} (${field.min ?? ''}–${field.max ?? ''})`,
82
+ defaultValue: String(currentVal ?? field.default ?? ''),
83
+ placeholder: String(field.default ?? ''),
84
+ validate: (v) => {
85
+ const n = parseInt(v || '', 10);
86
+ if (isNaN(n))
87
+ return 'Must be a number';
88
+ if (field.min !== undefined && n < field.min)
89
+ return `Min: ${field.min}`;
90
+ if (field.max !== undefined && n > field.max)
91
+ return `Max: ${field.max}`;
92
+ },
93
+ });
94
+ if (p.isCancel(result)) {
95
+ p.outro('Cancelled.');
96
+ return;
97
+ }
98
+ updates[key] = parseInt(String(result), 10);
99
+ }
100
+ else {
101
+ // text / password
102
+ const result = await p.text({
103
+ message: field.label,
104
+ defaultValue: String(currentVal ?? field.default ?? ''),
105
+ placeholder: field.placeholder || '',
106
+ });
107
+ if (p.isCancel(result)) {
108
+ p.outro('Cancelled.');
109
+ return;
110
+ }
111
+ updates[key] = result;
112
+ }
113
+ }
114
+ // Save
115
+ await installer.savePluginSettings(pluginId, updates);
116
+ p.outro(`Settings saved for ${plugin.name}.`);
117
+ }
118
+ //# sourceMappingURL=plugin-settings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugin-settings.js","sourceRoot":"","sources":["../../src/commands/plugin-settings.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export declare function addCommand(pluginId: string): Promise<void>;
2
+ export declare function removeCommand(pluginId: string): Promise<void>;
3
+ //# sourceMappingURL=plugins.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugins.d.ts","sourceRoot":"","sources":["../../src/commands/plugins.ts"],"names":[],"mappings":"AAIA,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CA0DhE;AAED,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAwBnE"}
@@ -0,0 +1,83 @@
1
+ import { log } from '@memoryblock/core';
2
+ const INSTALLER_PKG = '@memoryblock/plugin-installer';
3
+ export async function addCommand(pluginId) {
4
+ let installer;
5
+ try {
6
+ const pkg = await import(INSTALLER_PKG);
7
+ installer = new pkg.PluginInstaller();
8
+ }
9
+ catch {
10
+ log.error('Plugin installer not available. Install @memoryblock/plugin-installer.');
11
+ process.exit(1);
12
+ }
13
+ // Show available if no ID
14
+ if (!pluginId) {
15
+ const plugins = await installer.listPlugins();
16
+ log.brand('Skills & Plugins\n');
17
+ // Check installed status for each plugin
18
+ const rows = [];
19
+ for (const p of plugins) {
20
+ let installed = false;
21
+ try {
22
+ require.resolve(p.package, { paths: [process.cwd()] });
23
+ installed = true;
24
+ }
25
+ catch { /* ignore */ }
26
+ rows.push({
27
+ id: p.id,
28
+ name: p.name,
29
+ status: p.status === 'upcoming' ? 'upcoming' : 'available',
30
+ installed,
31
+ });
32
+ }
33
+ // Table header
34
+ const colId = 16, colName = 24, colStatus = 12;
35
+ const header = ` ${'ID'.padEnd(colId)}${'Name'.padEnd(colName)}${'Status'.padEnd(colStatus)}Installed`;
36
+ const separator = ` ${'─'.repeat(colId)}${'─'.repeat(colName)}${'─'.repeat(colStatus)}${'─'.repeat(9)}`;
37
+ console.log(header);
38
+ console.log(separator);
39
+ for (const row of rows) {
40
+ const installedMark = row.installed ? ' ✓' : ' ·';
41
+ const statusLabel = row.status === 'upcoming' ? 'upcoming' : 'ready';
42
+ console.log(` ${row.id.padEnd(colId)}${row.name.padEnd(colName)}${statusLabel.padEnd(colStatus)}${installedMark}`);
43
+ }
44
+ console.log('');
45
+ return;
46
+ }
47
+ log.dim(` installing ${pluginId}...`);
48
+ const result = await installer.install(pluginId);
49
+ if (result.success) {
50
+ log.success(result.message);
51
+ if (result.plugin?.requiresAuth?.length) {
52
+ log.dim(` requires: ${result.plugin.requiresAuth.join(', ')}`);
53
+ }
54
+ }
55
+ else {
56
+ log.warn(result.message);
57
+ }
58
+ }
59
+ export async function removeCommand(pluginId) {
60
+ if (!pluginId) {
61
+ log.error('Specify a plugin ID: mblk remove <id>');
62
+ process.exit(1);
63
+ }
64
+ let installer;
65
+ try {
66
+ const pkg = await import(INSTALLER_PKG);
67
+ installer = new pkg.PluginInstaller();
68
+ }
69
+ catch {
70
+ log.error('Plugin installer not available.');
71
+ process.exit(1);
72
+ }
73
+ log.dim(` removing ${pluginId}...`);
74
+ const result = await installer.remove(pluginId);
75
+ if (result.success) {
76
+ log.success(result.message);
77
+ }
78
+ else {
79
+ log.error(result.message);
80
+ process.exit(1);
81
+ }
82
+ }
83
+ //# sourceMappingURL=plugins.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plugins.js","sourceRoot":"","sources":["../../src/commands/plugins.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAExC,MAAM,aAAa,GAAG,+BAA+B,CAAC;AAEtD,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,QAAgB;IAC7C,IAAI,SAAc,CAAC;IACnB,IAAI,CAAC;QACD,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;QACxC,SAAS,GAAG,IAAI,GAAG,CAAC,eAAe,EAAE,CAAC;IAC1C,CAAC;IAAC,MAAM,CAAC;QACL,GAAG,CAAC,KAAK,CAAC,wEAAwE,CAAC,CAAC;QACpF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,0BAA0B;IAC1B,IAAI,CAAC,QAAQ,EAAE,CAAC;QACZ,MAAM,OAAO,GAAG,MAAM,SAAS,CAAC,WAAW,EAAE,CAAC;QAC9C,GAAG,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;QAEhC,yCAAyC;QACzC,MAAM,IAAI,GAA4E,EAAE,CAAC;QACzF,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACtB,IAAI,SAAS,GAAG,KAAK,CAAC;YACtB,IAAI,CAAC;gBACD,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;gBACvD,SAAS,GAAG,IAAI,CAAC;YACrB,CAAC;YAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;YACxB,IAAI,CAAC,IAAI,CAAC;gBACN,EAAE,EAAE,CAAC,CAAC,EAAE;gBACR,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,MAAM,EAAE,CAAC,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW;gBAC1D,SAAS;aACZ,CAAC,CAAC;QACP,CAAC;QAED,eAAe;QACf,MAAM,KAAK,GAAG,EAAE,EAAE,OAAO,GAAG,EAAE,EAAE,SAAS,GAAG,EAAE,CAAC;QAC/C,MAAM,MAAM,GAAG,KAAK,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC;QACxG,MAAM,SAAS,GAAG,KAAK,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;QACzG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACpB,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAEvB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACrB,MAAM,aAAa,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;YACpD,MAAM,WAAW,GAAG,GAAG,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC;YACrE,OAAO,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,aAAa,EAAE,CAAC,CAAC;QACxH,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO;IACX,CAAC;IAED,GAAG,CAAC,GAAG,CAAC,gBAAgB,QAAQ,KAAK,CAAC,CAAC;IACvC,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAEjD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACjB,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC5B,IAAI,MAAM,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,CAAC;YACtC,GAAG,CAAC,GAAG,CAAC,eAAe,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACpE,CAAC;IACL,CAAC;SAAM,CAAC;QACJ,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,QAAgB;IAChD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACZ,GAAG,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;QACnD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,IAAI,SAAc,CAAC;IACnB,IAAI,CAAC;QACD,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;QACxC,SAAS,GAAG,IAAI,GAAG,CAAC,eAAe,EAAE,CAAC;IAC1C,CAAC;IAAC,MAAM,CAAC;QACL,GAAG,CAAC,KAAK,CAAC,iCAAiC,CAAC,CAAC;QAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,GAAG,CAAC,GAAG,CAAC,cAAc,QAAQ,KAAK,CAAC,CAAC;IACrC,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAEhD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QACjB,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC;SAAM,CAAC;QACJ,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC1B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACL,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * mblk reset <block> — Light cleanup: reset memory, pulse, costs, session
3
+ * mblk reset <block> --hard — Full wipe: also deletes logs/ (with confirmation)
4
+ */
5
+ export declare function resetCommand(blockName: string, options: {
6
+ hard?: boolean;
7
+ }): Promise<void>;
8
+ //# sourceMappingURL=reset.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reset.d.ts","sourceRoot":"","sources":["../../src/commands/reset.ts"],"names":[],"mappings":"AAQA;;;GAGG;AACH,wBAAsB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAoFhG"}