@magic-ingredients/tiny-brain-local 0.6.0 → 0.8.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.
- package/README.md +4 -4
- package/dist/cli/cli-factory.d.ts.map +1 -1
- package/dist/cli/cli-factory.js +27 -1
- package/dist/cli/cli-factory.js.map +1 -1
- package/dist/cli/commands/config.command.d.ts +17 -0
- package/dist/cli/commands/config.command.d.ts.map +1 -0
- package/dist/cli/commands/config.command.js +117 -0
- package/dist/cli/commands/config.command.js.map +1 -0
- package/dist/cli/commands/status.command.d.ts +7 -1
- package/dist/cli/commands/status.command.d.ts.map +1 -1
- package/dist/cli/commands/status.command.js +273 -12
- package/dist/cli/commands/status.command.js.map +1 -1
- package/dist/cli/installers/claude-code-installer.d.ts.map +1 -1
- package/dist/cli/installers/claude-code-installer.js +22 -1
- package/dist/cli/installers/claude-code-installer.js.map +1 -1
- package/dist/cli/installers/installer-factory.d.ts.map +1 -1
- package/dist/cli/installers/installer-factory.js +10 -9
- package/dist/cli/installers/installer-factory.js.map +1 -1
- package/dist/cli/utils/system-info.d.ts +20 -0
- package/dist/cli/utils/system-info.d.ts.map +1 -0
- package/dist/cli/utils/system-info.js +90 -0
- package/dist/cli/utils/system-info.js.map +1 -0
- package/dist/core/mcp-server.d.ts +51 -3
- package/dist/core/mcp-server.d.ts.map +1 -1
- package/dist/core/mcp-server.js +306 -44
- package/dist/core/mcp-server.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +113 -29
- package/dist/index.js.map +1 -1
- package/dist/prompts/persona/persona.prompt.d.ts.map +1 -1
- package/dist/prompts/persona/persona.prompt.js +12 -13
- package/dist/prompts/persona/persona.prompt.js.map +1 -1
- package/dist/services/credential-storage.service.d.ts +26 -0
- package/dist/services/credential-storage.service.d.ts.map +1 -0
- package/dist/services/credential-storage.service.js +149 -0
- package/dist/services/credential-storage.service.js.map +1 -0
- package/dist/services/enhanced-persona-service.d.ts +22 -0
- package/dist/services/enhanced-persona-service.d.ts.map +1 -0
- package/dist/services/enhanced-persona-service.js +174 -0
- package/dist/services/enhanced-persona-service.js.map +1 -0
- package/dist/services/plan-watcher.service.d.ts.map +1 -1
- package/dist/services/plan-watcher.service.js +5 -0
- package/dist/services/plan-watcher.service.js.map +1 -1
- package/dist/services/remote/auth-token-service.d.ts +55 -0
- package/dist/services/remote/auth-token-service.d.ts.map +1 -0
- package/dist/services/remote/auth-token-service.js +188 -0
- package/dist/services/remote/auth-token-service.js.map +1 -0
- package/dist/services/remote/persona-sync-service.d.ts +131 -0
- package/dist/services/remote/persona-sync-service.d.ts.map +1 -0
- package/dist/services/remote/persona-sync-service.js +560 -0
- package/dist/services/remote/persona-sync-service.js.map +1 -0
- package/dist/services/remote/system-persona-service.d.ts +43 -0
- package/dist/services/remote/system-persona-service.d.ts.map +1 -0
- package/dist/services/remote/system-persona-service.js +261 -0
- package/dist/services/remote/system-persona-service.js.map +1 -0
- package/dist/tools/persona/as.tool.d.ts +6 -2
- package/dist/tools/persona/as.tool.d.ts.map +1 -1
- package/dist/tools/persona/as.tool.js +146 -87
- package/dist/tools/persona/as.tool.js.map +1 -1
- package/dist/tools/persona/persona.tool.d.ts.map +1 -1
- package/dist/tools/persona/persona.tool.js +20 -6
- package/dist/tools/persona/persona.tool.js.map +1 -1
- package/dist/types/local-context.d.ts +17 -0
- package/dist/types/local-context.d.ts.map +1 -0
- package/dist/types/local-context.js +7 -0
- package/dist/types/local-context.js.map +1 -0
- package/package.json +54 -5
package/README.md
CHANGED
|
@@ -247,14 +247,14 @@ MIT
|
|
|
247
247
|
|
|
248
248
|
## Links
|
|
249
249
|
|
|
250
|
-
- [GitHub Repository](https://github.com/magic-ingredients/tiny-brain)
|
|
250
|
+
- [GitHub Repository](https://github.com/magic-ingredients/tiny-brain-local)
|
|
251
251
|
- [Core Package](https://www.npmjs.com/package/@magic-ingredients/tiny-brain-core)
|
|
252
252
|
- [NPM Package](https://www.npmjs.com/package/@magic-ingredients/tiny-brain-local)
|
|
253
253
|
- [DXT Registry](https://dxt.modelcontextprotocol.io/server/tiny-brain)
|
|
254
|
-
- [Documentation](https://github.com/magic-ingredients/tiny-brain#readme)
|
|
254
|
+
- [Documentation](https://github.com/magic-ingredients/tiny-brain-local#readme)
|
|
255
255
|
|
|
256
256
|
## Support
|
|
257
257
|
|
|
258
258
|
For issues, questions, or contributions:
|
|
259
|
-
- [GitHub Issues](https://github.com/magic-ingredients/tiny-brain/issues)
|
|
260
|
-
- [Discussions](https://github.com/magic-ingredients/tiny-brain/discussions)
|
|
259
|
+
- [GitHub Issues](https://github.com/magic-ingredients/tiny-brain-local/issues)
|
|
260
|
+
- [Discussions](https://github.com/magic-ingredients/tiny-brain-local/discussions)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-factory.d.ts","sourceRoot":"","sources":["../../src/cli/cli-factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"cli-factory.d.ts","sourceRoot":"","sources":["../../src/cli/cli-factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAapC,wBAAgB,SAAS,IAAI,OAAO,CAgInC"}
|
package/dist/cli/cli-factory.js
CHANGED
|
@@ -3,8 +3,10 @@ import { InstallCommand } from './commands/install.command.js';
|
|
|
3
3
|
import { UninstallCommand } from './commands/uninstall.command.js';
|
|
4
4
|
import { StatusCommand } from './commands/status.command.js';
|
|
5
5
|
import { ListCommand } from './commands/list.command.js';
|
|
6
|
+
import { ConfigCommand } from './commands/config.command.js';
|
|
6
7
|
import { InstallerFactory } from './installers/installer-factory.js';
|
|
7
8
|
import { PlatformConfigAdapter } from '../storage/platform-config-adapter.js';
|
|
9
|
+
import { CredentialStorageService } from '../services/credential-storage.service.js';
|
|
8
10
|
import { NodeResolver } from './utils/node-resolver.js';
|
|
9
11
|
import * as os from 'os';
|
|
10
12
|
import * as path from 'path';
|
|
@@ -16,10 +18,12 @@ export function createCLI() {
|
|
|
16
18
|
const nodeResolver = new NodeResolver();
|
|
17
19
|
const installerFactory = new InstallerFactory(configAdapter, nodeResolver);
|
|
18
20
|
// Initialize commands
|
|
21
|
+
const credentialService = new CredentialStorageService();
|
|
19
22
|
const installCommand = new InstallCommand(installerFactory);
|
|
20
23
|
const uninstallCommand = new UninstallCommand(installerFactory);
|
|
21
|
-
const statusCommand = new StatusCommand(installerFactory);
|
|
24
|
+
const statusCommand = new StatusCommand(installerFactory, credentialService);
|
|
22
25
|
const listCommand = new ListCommand(installerFactory);
|
|
26
|
+
const configCommand = new ConfigCommand(credentialService);
|
|
23
27
|
program
|
|
24
28
|
.name('tiny-brain')
|
|
25
29
|
.description('🧠 Tiny Brain MCP Server - Installation and Management CLI');
|
|
@@ -108,6 +112,28 @@ export function createCLI() {
|
|
|
108
112
|
process.exit(1);
|
|
109
113
|
}
|
|
110
114
|
});
|
|
115
|
+
// Config command
|
|
116
|
+
program
|
|
117
|
+
.command('config [operation] [key] [value...]')
|
|
118
|
+
.description('Manage tiny-brain credentials (set, show, unset)')
|
|
119
|
+
.action(async (operation, key, valueParts) => {
|
|
120
|
+
try {
|
|
121
|
+
const args = [];
|
|
122
|
+
if (operation)
|
|
123
|
+
args.push(operation);
|
|
124
|
+
if (key)
|
|
125
|
+
args.push(key);
|
|
126
|
+
if (valueParts && valueParts.length > 0) {
|
|
127
|
+
args.push(...valueParts);
|
|
128
|
+
}
|
|
129
|
+
const options = configCommand.parseArgs(args);
|
|
130
|
+
await configCommand.execute(options);
|
|
131
|
+
}
|
|
132
|
+
catch (error) {
|
|
133
|
+
console.error('Config command failed:', error);
|
|
134
|
+
process.exit(1);
|
|
135
|
+
}
|
|
136
|
+
});
|
|
111
137
|
return program;
|
|
112
138
|
}
|
|
113
139
|
//# sourceMappingURL=cli-factory.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli-factory.js","sourceRoot":"","sources":["../../src/cli/cli-factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,4BAA4B,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AACrE,OAAO,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAE7B,MAAM,UAAU,SAAS;IACvB,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAE9B,0BAA0B;IAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,aAAa,CAAC,CAAC;IACvD,MAAM,aAAa,GAAG,IAAI,qBAAqB,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/E,MAAM,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC;IACxC,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,CAAC,aAAa,EAAE,YAAY,CAAC,CAAC;IAE3E,sBAAsB;IACtB,MAAM,cAAc,GAAG,IAAI,cAAc,CAAC,gBAAgB,CAAC,CAAC;IAC5D,MAAM,gBAAgB,GAAG,IAAI,gBAAgB,CAAC,gBAAgB,CAAC,CAAC;IAChE,MAAM,aAAa,GAAG,IAAI,aAAa,CAAC,gBAAgB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"cli-factory.js","sourceRoot":"","sources":["../../src/cli/cli-factory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { CredentialStorageService } from '../../services/credential-storage.service.js';
|
|
2
|
+
export interface ConfigOptions {
|
|
3
|
+
operation: 'set' | 'show' | 'unset' | 'help';
|
|
4
|
+
key?: string;
|
|
5
|
+
value?: string;
|
|
6
|
+
}
|
|
7
|
+
export declare class ConfigCommand {
|
|
8
|
+
private credentialService;
|
|
9
|
+
constructor(credentialService: CredentialStorageService);
|
|
10
|
+
execute(options: ConfigOptions): Promise<void>;
|
|
11
|
+
private handleSet;
|
|
12
|
+
private handleShow;
|
|
13
|
+
private handleUnset;
|
|
14
|
+
private showHelp;
|
|
15
|
+
parseArgs(args: string[]): ConfigOptions;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=config.command.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.command.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/config.command.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,wBAAwB,EAAE,MAAM,8CAA8C,CAAC;AAExF,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;IAC7C,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,qBAAa,aAAa;IACZ,OAAO,CAAC,iBAAiB;gBAAjB,iBAAiB,EAAE,wBAAwB;IAEzD,OAAO,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC;YAsBtC,SAAS;YAyBT,UAAU;YAyBV,WAAW;IAUzB,OAAO,CAAC,QAAQ;IAiBhB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,aAAa;CAwBzC"}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
export class ConfigCommand {
|
|
3
|
+
credentialService;
|
|
4
|
+
constructor(credentialService) {
|
|
5
|
+
this.credentialService = credentialService;
|
|
6
|
+
}
|
|
7
|
+
async execute(options) {
|
|
8
|
+
const { operation, key, value } = options;
|
|
9
|
+
switch (operation) {
|
|
10
|
+
case 'set':
|
|
11
|
+
await this.handleSet(key, value);
|
|
12
|
+
break;
|
|
13
|
+
case 'show':
|
|
14
|
+
await this.handleShow();
|
|
15
|
+
break;
|
|
16
|
+
case 'unset':
|
|
17
|
+
await this.handleUnset();
|
|
18
|
+
break;
|
|
19
|
+
case 'help':
|
|
20
|
+
this.showHelp();
|
|
21
|
+
break;
|
|
22
|
+
default:
|
|
23
|
+
console.error(chalk.red('✗') + ' Invalid operation. Use "set", "show", or "unset"');
|
|
24
|
+
this.showHelp();
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
async handleSet(key, value) {
|
|
28
|
+
if (!key || !value) {
|
|
29
|
+
console.error(chalk.red('✗') + ' Both key and value are required for set operation');
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
if (key !== 'clientId' && key !== 'clientSecret') {
|
|
33
|
+
console.error(chalk.red('✗') + ' Invalid key. Use "clientId" or "clientSecret"');
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
try {
|
|
37
|
+
await this.credentialService.setCredential(key, value);
|
|
38
|
+
if (key === 'clientId') {
|
|
39
|
+
console.log(chalk.green('✓') + ' Client ID stored');
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
console.log(chalk.green('✓') + ' Client Secret stored securely');
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
catch (error) {
|
|
46
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
47
|
+
console.error(chalk.red('✗') + ' Failed to store credential:', message);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
async handleShow() {
|
|
51
|
+
try {
|
|
52
|
+
const credentials = await this.credentialService.showCredentials();
|
|
53
|
+
if (!credentials) {
|
|
54
|
+
console.log(chalk.yellow('No credentials stored'));
|
|
55
|
+
console.log(chalk.gray('Use "tiny-brain config set <key> <value>" to store credentials'));
|
|
56
|
+
return;
|
|
57
|
+
}
|
|
58
|
+
console.log('\n' + chalk.cyan('Tiny Brain Credentials'));
|
|
59
|
+
console.log(chalk.gray('─────────────────────'));
|
|
60
|
+
const clientIdDisplay = credentials.clientId || chalk.gray('Not set');
|
|
61
|
+
const clientSecretDisplay = credentials.clientSecret || chalk.gray('Not set');
|
|
62
|
+
console.log(`Client ID: ${clientIdDisplay}`);
|
|
63
|
+
console.log(`Client Secret: ${clientSecretDisplay}`);
|
|
64
|
+
console.log('');
|
|
65
|
+
}
|
|
66
|
+
catch (error) {
|
|
67
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
68
|
+
console.error(chalk.red('✗') + ' Failed to show credentials:', message);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
async handleUnset() {
|
|
72
|
+
try {
|
|
73
|
+
await this.credentialService.clearCredentials();
|
|
74
|
+
console.log(chalk.green('✓') + ' Credentials removed');
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
78
|
+
console.error(chalk.red('✗') + ' Failed to remove credentials:', message);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
showHelp() {
|
|
82
|
+
console.log(chalk.cyan('\nTiny Brain Configuration'));
|
|
83
|
+
console.log(chalk.gray('─────────────────────────'));
|
|
84
|
+
console.log('\nUsage: ' + chalk.yellow('tiny-brain config <operation> [arguments]'));
|
|
85
|
+
console.log('\nOperations:');
|
|
86
|
+
console.log(' ' + chalk.green('set <key> <value>') + ' Store a credential');
|
|
87
|
+
console.log(' Keys: clientId, clientSecret');
|
|
88
|
+
console.log(' ' + chalk.green('show') + ' Display stored credentials');
|
|
89
|
+
console.log(' ' + chalk.green('unset') + ' Remove all credentials');
|
|
90
|
+
console.log('\nExamples:');
|
|
91
|
+
console.log(' ' + chalk.gray('tiny-brain config set clientId YOUR_CLIENT_ID'));
|
|
92
|
+
console.log(' ' + chalk.gray('tiny-brain config set clientSecret YOUR_SECRET'));
|
|
93
|
+
console.log(' ' + chalk.gray('tiny-brain config show'));
|
|
94
|
+
console.log(' ' + chalk.gray('tiny-brain config unset'));
|
|
95
|
+
console.log('');
|
|
96
|
+
}
|
|
97
|
+
parseArgs(args) {
|
|
98
|
+
const [operation, key, ...valueParts] = args;
|
|
99
|
+
// Default to 'help' if no operation provided
|
|
100
|
+
if (!operation) {
|
|
101
|
+
return { operation: 'help' };
|
|
102
|
+
}
|
|
103
|
+
// Validate operation
|
|
104
|
+
if (!['set', 'show', 'unset'].includes(operation)) {
|
|
105
|
+
return { operation: operation }; // Will be caught by execute
|
|
106
|
+
}
|
|
107
|
+
const result = { operation: operation };
|
|
108
|
+
if (operation === 'set' && key) {
|
|
109
|
+
result.key = key;
|
|
110
|
+
if (valueParts.length > 0) {
|
|
111
|
+
result.value = valueParts.join(' ');
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
return result;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=config.command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.command.js","sourceRoot":"","sources":["../../../src/cli/commands/config.command.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { InstallerFactory } from '../installers/installer-factory.js';
|
|
2
2
|
import { ConfigScope } from '../../storage/platform-path-builder.js';
|
|
3
|
+
import { CredentialStorageService } from '../../services/credential-storage.service.js';
|
|
3
4
|
interface StatusOptions {
|
|
4
5
|
name?: string;
|
|
5
6
|
scope?: ConfigScope;
|
|
@@ -8,8 +9,13 @@ interface StatusOptions {
|
|
|
8
9
|
}
|
|
9
10
|
export declare class StatusCommand {
|
|
10
11
|
private factory;
|
|
11
|
-
|
|
12
|
+
private credentialService;
|
|
13
|
+
private systemInfoProvider;
|
|
14
|
+
constructor(factory: InstallerFactory, credentialService: CredentialStorageService);
|
|
12
15
|
execute(options?: StatusOptions): Promise<void>;
|
|
16
|
+
private showSystemInfo;
|
|
17
|
+
private getPlatformDetails;
|
|
18
|
+
private checkAuthStatus;
|
|
13
19
|
private checkPlatforms;
|
|
14
20
|
private displayStatuses;
|
|
15
21
|
private getPlatformDisplayName;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.command.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/status.command.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,wCAAwC,CAAC;
|
|
1
|
+
{"version":3,"file":"status.command.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/status.command.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AACtE,OAAO,EAAE,WAAW,EAAE,MAAM,wCAAwC,CAAC;AACrE,OAAO,EAAE,wBAAwB,EAAE,MAAM,8CAA8C,CAAC;AASxF,UAAU,aAAa;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAUD,qBAAa,aAAa;IACxB,OAAO,CAAC,OAAO,CAAmB;IAClC,OAAO,CAAC,iBAAiB,CAA2B;IACpD,OAAO,CAAC,kBAAkB,CAAqB;gBAEnC,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,wBAAwB;IAM5E,OAAO,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;YA+B3C,cAAc;YASd,kBAAkB;YA8DlB,eAAe;YAwJf,cAAc;IA0D5B,OAAO,CAAC,eAAe;IAgCvB,OAAO,CAAC,sBAAsB;IAW9B,OAAO,CAAC,WAAW;CA2BpB"}
|
|
@@ -1,23 +1,261 @@
|
|
|
1
1
|
import chalk from 'chalk';
|
|
2
|
+
import { AuthTokenService } from '../../services/remote/auth-token-service.js';
|
|
3
|
+
import { SystemInfoProvider } from '../utils/system-info.js';
|
|
4
|
+
import { exec } from 'child_process';
|
|
5
|
+
import { promisify } from 'util';
|
|
6
|
+
const execAsync = promisify(exec);
|
|
2
7
|
export class StatusCommand {
|
|
3
8
|
factory;
|
|
4
|
-
|
|
9
|
+
credentialService;
|
|
10
|
+
systemInfoProvider;
|
|
11
|
+
constructor(factory, credentialService) {
|
|
5
12
|
this.factory = factory;
|
|
13
|
+
this.credentialService = credentialService;
|
|
14
|
+
this.systemInfoProvider = new SystemInfoProvider();
|
|
6
15
|
}
|
|
7
16
|
async execute(options = {}) {
|
|
8
|
-
console.log(chalk.cyan.bold('\n📊 tiny-brain
|
|
17
|
+
console.log(chalk.cyan.bold('\n📊 tiny-brain Status\n'));
|
|
18
|
+
// Show system information first
|
|
19
|
+
console.log(chalk.cyan('💻 System Information\n'));
|
|
20
|
+
await this.showSystemInfo(options);
|
|
21
|
+
// Show installation status
|
|
22
|
+
console.log(chalk.cyan('\n📦 Installation Status\n'));
|
|
9
23
|
const serverName = options.name || 'tiny-brain';
|
|
10
24
|
// Get status for platforms
|
|
11
25
|
const statuses = await this.checkPlatforms(serverName, options);
|
|
12
26
|
if (statuses.length === 0) {
|
|
13
27
|
console.log(chalk.yellow('⚠️ No platforms found'));
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
// Display status for each platform
|
|
31
|
+
this.displayStatuses(statuses, options);
|
|
32
|
+
// Show summary
|
|
33
|
+
if (!options.platform) {
|
|
34
|
+
this.showSummary(statuses);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
// Check authentication status last
|
|
38
|
+
await this.checkAuthStatus(options);
|
|
39
|
+
}
|
|
40
|
+
async showSystemInfo(options) {
|
|
41
|
+
const systemInfo = await this.systemInfoProvider.getSystemInfo();
|
|
42
|
+
const lines = this.systemInfoProvider.formatSystemInfo(systemInfo, options.verbose);
|
|
43
|
+
for (const line of lines) {
|
|
44
|
+
console.log(chalk.gray(line));
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
async getPlatformDetails(platform) {
|
|
48
|
+
const details = {};
|
|
49
|
+
try {
|
|
50
|
+
if (platform === 'claude-code') {
|
|
51
|
+
// Get Claude Code version
|
|
52
|
+
try {
|
|
53
|
+
const { stdout } = await execAsync('claude --version');
|
|
54
|
+
// Match version pattern like "1.0.89 (Claude Code)"
|
|
55
|
+
const versionMatch = stdout.match(/(\d+\.\d+\.\d+)/);
|
|
56
|
+
if (versionMatch) {
|
|
57
|
+
details.version = versionMatch[1];
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
// Fallback to full output if no pattern match
|
|
61
|
+
details.version = stdout.trim();
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
// Claude Code CLI not available
|
|
66
|
+
}
|
|
67
|
+
// Get installation location (usually the command path)
|
|
68
|
+
try {
|
|
69
|
+
const { stdout } = await execAsync('which claude');
|
|
70
|
+
details.installLocation = stdout.trim();
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
// Command not found
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
else if (platform === 'claude-desktop') {
|
|
77
|
+
// Claude Desktop doesn't have a CLI, but we can check for the app
|
|
78
|
+
if (process.platform === 'darwin') {
|
|
79
|
+
// macOS - check for app bundle
|
|
80
|
+
try {
|
|
81
|
+
const { stdout } = await execAsync('mdfind "kMDItemKind == Application && kMDItemDisplayName == Claude"');
|
|
82
|
+
const lines = stdout.trim().split('\n').filter(line => line.includes('Claude.app'));
|
|
83
|
+
if (lines.length > 0) {
|
|
84
|
+
details.installLocation = lines[0];
|
|
85
|
+
// Try to get version from Info.plist
|
|
86
|
+
try {
|
|
87
|
+
const { stdout: versionOut } = await execAsync(`defaults read "${lines[0]}/Contents/Info.plist" CFBundleShortVersionString`);
|
|
88
|
+
details.version = versionOut.trim();
|
|
89
|
+
}
|
|
90
|
+
catch {
|
|
91
|
+
// Version not available
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
// mdfind failed or app not found
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
else if (process.platform === 'win32') {
|
|
100
|
+
// Windows - check registry or default install location
|
|
101
|
+
details.installLocation = 'C:\\Program Files\\Claude Desktop';
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
// Linux
|
|
105
|
+
details.installLocation = '/usr/local/bin/claude-desktop';
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
catch {
|
|
110
|
+
// Silently ignore errors
|
|
111
|
+
}
|
|
112
|
+
return details;
|
|
113
|
+
}
|
|
114
|
+
async checkAuthStatus(options) {
|
|
115
|
+
console.log(chalk.cyan('\n🔐 Authentication Status\n'));
|
|
116
|
+
// Check if credentials are stored
|
|
117
|
+
const credentials = await this.credentialService.getCredentials();
|
|
118
|
+
if (!credentials || (!credentials.clientId && !credentials.clientSecret)) {
|
|
119
|
+
console.log(chalk.yellow('⚠️ No credentials configured'));
|
|
120
|
+
console.log(chalk.gray(' Run "tiny-brain config set clientId YOUR_ID" and'));
|
|
121
|
+
console.log(chalk.gray(' "tiny-brain config set clientSecret YOUR_SECRET" to configure'));
|
|
14
122
|
return;
|
|
15
123
|
}
|
|
16
|
-
//
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
124
|
+
// Check which credentials are missing
|
|
125
|
+
if (!credentials.clientId || !credentials.clientSecret) {
|
|
126
|
+
console.log(chalk.yellow('⚠️ Incomplete credentials'));
|
|
127
|
+
if (credentials.clientId) {
|
|
128
|
+
console.log(chalk.green(` ✅ Client ID: ${credentials.clientId}`));
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
console.log(chalk.red(' ❌ Client ID: Not set'));
|
|
132
|
+
}
|
|
133
|
+
if (credentials.clientSecret) {
|
|
134
|
+
console.log(chalk.green(' ✅ Client Secret: Set'));
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
console.log(chalk.red(' ❌ Client Secret: Not set'));
|
|
138
|
+
}
|
|
139
|
+
if (!credentials.clientId) {
|
|
140
|
+
console.log(chalk.gray('\n Run "tiny-brain config set clientId YOUR_ID" to set'));
|
|
141
|
+
}
|
|
142
|
+
if (!credentials.clientSecret) {
|
|
143
|
+
console.log(chalk.gray('\n Run "tiny-brain config set clientSecret YOUR_SECRET" to set'));
|
|
144
|
+
}
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
console.log(chalk.green('✅ Credentials configured'));
|
|
148
|
+
if (options.verbose) {
|
|
149
|
+
console.log(chalk.gray(` Client ID: ${credentials.clientId}`));
|
|
150
|
+
}
|
|
151
|
+
// Attempt authentication
|
|
152
|
+
console.log(chalk.gray('\n Testing authentication...'));
|
|
153
|
+
// Create a minimal context for the auth service
|
|
154
|
+
const context = {
|
|
155
|
+
userId: 'cli-status',
|
|
156
|
+
sessionId: 'status-check',
|
|
157
|
+
storage: {},
|
|
158
|
+
logger: {
|
|
159
|
+
debug: () => { },
|
|
160
|
+
info: () => { },
|
|
161
|
+
warn: () => { },
|
|
162
|
+
error: () => { },
|
|
163
|
+
child: () => ({ debug: () => { }, info: () => { }, warn: () => { }, error: () => { } })
|
|
164
|
+
},
|
|
165
|
+
requestId: `status-${Date.now()}`,
|
|
166
|
+
timestamp: new Date()
|
|
167
|
+
};
|
|
168
|
+
const config = {
|
|
169
|
+
account: {
|
|
170
|
+
clientId: credentials.clientId,
|
|
171
|
+
clientSecret: credentials.clientSecret
|
|
172
|
+
}
|
|
173
|
+
};
|
|
174
|
+
const authService = new AuthTokenService(context, config);
|
|
175
|
+
try {
|
|
176
|
+
// Test connection to service
|
|
177
|
+
const authResult = await authService.authenticate();
|
|
178
|
+
if (authResult) {
|
|
179
|
+
console.log(chalk.green(' ✅ Authentication successful'));
|
|
180
|
+
console.log(chalk.gray(` Token expires in: ${authResult.expiresIn} seconds`));
|
|
181
|
+
// Test connection to remote service
|
|
182
|
+
console.log(chalk.gray('\n Testing remote service connection...'));
|
|
183
|
+
const tbrUrl = process.env.TINY_BRAIN_REMOTE_URL || 'https://tiny-brain-remote.vercel.app';
|
|
184
|
+
try {
|
|
185
|
+
// eslint-disable-next-line no-undef
|
|
186
|
+
const response = await fetch(`${tbrUrl}/api/mcp`, {
|
|
187
|
+
method: 'POST',
|
|
188
|
+
headers: {
|
|
189
|
+
'Content-Type': 'application/json',
|
|
190
|
+
'Accept': 'application/json, text/event-stream',
|
|
191
|
+
'Authorization': `Bearer ${authResult.token}`
|
|
192
|
+
},
|
|
193
|
+
body: JSON.stringify({
|
|
194
|
+
jsonrpc: '2.0',
|
|
195
|
+
method: 'tools/list',
|
|
196
|
+
id: Date.now()
|
|
197
|
+
})
|
|
198
|
+
});
|
|
199
|
+
if (response.ok) {
|
|
200
|
+
// Try to parse the response to ensure it's valid
|
|
201
|
+
const responseText = await response.text();
|
|
202
|
+
// Handle SSE format response from MCP handler
|
|
203
|
+
if (responseText.startsWith('event:')) {
|
|
204
|
+
// Extract JSON from SSE format
|
|
205
|
+
const dataLine = responseText.split('\n').find(line => line.startsWith('data: '));
|
|
206
|
+
if (dataLine) {
|
|
207
|
+
const jsonStr = dataLine.substring(6); // Remove "data: " prefix
|
|
208
|
+
const data = JSON.parse(jsonStr);
|
|
209
|
+
if (data && data.result) {
|
|
210
|
+
console.log(chalk.green(' ✅ Remote service connection successful'));
|
|
211
|
+
}
|
|
212
|
+
else {
|
|
213
|
+
console.log(chalk.yellow(' ⚠️ Remote service returned unexpected response'));
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
else {
|
|
217
|
+
console.log(chalk.yellow(' ⚠️ Remote service returned invalid SSE format'));
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
else {
|
|
221
|
+
// Try to parse as regular JSON
|
|
222
|
+
try {
|
|
223
|
+
const data = JSON.parse(responseText);
|
|
224
|
+
if (data && data.result) {
|
|
225
|
+
console.log(chalk.green(' ✅ Remote service connection successful'));
|
|
226
|
+
}
|
|
227
|
+
else {
|
|
228
|
+
console.log(chalk.yellow(' ⚠️ Remote service returned unexpected response'));
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
catch {
|
|
232
|
+
console.log(chalk.yellow(' ⚠️ Remote service returned invalid response format'));
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
else if (response.status === 401) {
|
|
237
|
+
console.log(chalk.yellow(' ⚠️ Remote service rejected token'));
|
|
238
|
+
}
|
|
239
|
+
else {
|
|
240
|
+
console.log(chalk.yellow(` ⚠️ Remote service returned: ${response.status}`));
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
catch (error) {
|
|
244
|
+
console.log(chalk.red(' ❌ Could not connect to remote service'));
|
|
245
|
+
if (options.verbose) {
|
|
246
|
+
console.log(chalk.gray(` ${error instanceof Error ? error.message : String(error)}`));
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
else {
|
|
251
|
+
console.log(chalk.red(' ❌ Authentication failed - invalid credentials'));
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
catch (error) {
|
|
255
|
+
console.log(chalk.red(' ❌ Could not connect to authentication service'));
|
|
256
|
+
if (options.verbose) {
|
|
257
|
+
console.log(chalk.gray(` ${error instanceof Error ? error.message : String(error)}`));
|
|
258
|
+
}
|
|
21
259
|
}
|
|
22
260
|
}
|
|
23
261
|
async checkPlatforms(serverName, options) {
|
|
@@ -29,11 +267,18 @@ export class StatusCommand {
|
|
|
29
267
|
const installed = await installer.verify(serverName, {
|
|
30
268
|
scope: options.scope || 'local'
|
|
31
269
|
});
|
|
32
|
-
|
|
270
|
+
const status = {
|
|
33
271
|
platform: options.platform,
|
|
34
272
|
installed,
|
|
35
273
|
configPath: installer.getConfigPath()
|
|
36
|
-
}
|
|
274
|
+
};
|
|
275
|
+
// Get platform details if verbose and installed
|
|
276
|
+
if (options.verbose && installed) {
|
|
277
|
+
const details = await this.getPlatformDetails(options.platform);
|
|
278
|
+
status.version = details.version;
|
|
279
|
+
status.installLocation = details.installLocation;
|
|
280
|
+
}
|
|
281
|
+
statuses.push(status);
|
|
37
282
|
}
|
|
38
283
|
catch (error) {
|
|
39
284
|
console.error(chalk.red(`❌ Error checking platform ${options.platform}: ${error}`));
|
|
@@ -47,11 +292,18 @@ export class StatusCommand {
|
|
|
47
292
|
const installed = await installer.verify(serverName, {
|
|
48
293
|
scope: options.scope || 'local'
|
|
49
294
|
});
|
|
50
|
-
|
|
295
|
+
const status = {
|
|
51
296
|
platform,
|
|
52
297
|
installed,
|
|
53
298
|
configPath: installer.getConfigPath()
|
|
54
|
-
}
|
|
299
|
+
};
|
|
300
|
+
// Get platform details if verbose and installed
|
|
301
|
+
if (options.verbose && installed) {
|
|
302
|
+
const details = await this.getPlatformDetails(platform);
|
|
303
|
+
status.version = details.version;
|
|
304
|
+
status.installLocation = details.installLocation;
|
|
305
|
+
}
|
|
306
|
+
statuses.push(status);
|
|
55
307
|
}
|
|
56
308
|
}
|
|
57
309
|
return statuses;
|
|
@@ -67,8 +319,17 @@ export class StatusCommand {
|
|
|
67
319
|
else {
|
|
68
320
|
console.log(`${platformName}${padding} ${chalk.gray('❌ Not installed')}`);
|
|
69
321
|
}
|
|
70
|
-
if (options.verbose) {
|
|
322
|
+
if (options.verbose && status.installed) {
|
|
71
323
|
console.log(chalk.gray(` Config: ${status.configPath}`));
|
|
324
|
+
if (status.version) {
|
|
325
|
+
console.log(chalk.gray(` Version: ${status.version}`));
|
|
326
|
+
}
|
|
327
|
+
if (status.installLocation) {
|
|
328
|
+
console.log(chalk.gray(` Location: ${status.installLocation}`));
|
|
329
|
+
}
|
|
330
|
+
if (!status.version && !status.installLocation) {
|
|
331
|
+
// If we couldn't get details, just show config
|
|
332
|
+
}
|
|
72
333
|
}
|
|
73
334
|
}
|
|
74
335
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status.command.js","sourceRoot":"","sources":["../../../src/cli/commands/status.command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAiB1B,MAAM,OAAO,aAAa;IAChB,OAAO,CAAmB;IAElC,YAAY,OAAyB;QACnC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,UAAyB,EAAE;QACvC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC,CAAC;QAEtE,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,IAAI,YAAY,CAAC;QAEhD,2BAA2B;QAC3B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QAEhE,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC,CAAC;YACpD,OAAO;QACT,CAAC;QAED,mCAAmC;QACnC,IAAI,CAAC,eAAe,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAExC,eAAe;QACf,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;YACtB,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,cAAc,CAAC,UAAkB,EAAE,OAAsB;QACrE,MAAM,QAAQ,GAAqB,EAAE,CAAC;QAEtC,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACrB,0BAA0B;YAC1B,IAAI,CAAC;gBACH,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;gBAC9D,MAAM,SAAS,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,UAAU,EAAE;oBACnD,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,OAAO;iBAChC,CAAC,CAAC;gBAEH,QAAQ,CAAC,IAAI,CAAC;oBACZ,QAAQ,EAAE,OAAO,CAAC,QAAQ;oBAC1B,SAAS;oBACT,UAAU,EAAE,SAAS,CAAC,aAAa,EAAE;iBACtC,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,6BAA6B,OAAO,CAAC,QAAQ,KAAK,KAAK,EAAE,CAAC,CAAC,CAAC;YACtF,CAAC;QACH,CAAC;aAAM,CAAC;YACN,sBAAsB;YACtB,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC;YAEnD,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;gBACnC,MAAM,QAAQ,GAAG,SAAS,CAAC,eAAe,EAAE,CAAC;gBAC7C,MAAM,SAAS,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,UAAU,EAAE;oBACnD,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,OAAO;iBAChC,CAAC,CAAC;gBAEH,QAAQ,CAAC,IAAI,CAAC;oBACZ,QAAQ;oBACR,SAAS;oBACT,UAAU,EAAE,SAAS,CAAC,aAAa,EAAE;iBACtC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEO,eAAe,CAAC,QAA0B,EAAE,OAAsB;QACxE,MAAM,iBAAiB,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;QAEzG,KAAK,MAAM,MAAM,IAAI,QAAQ,EAAE,CAAC;YAC9B,MAAM,YAAY,GAAG,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;YAClE,MAAM,OAAO,GAAG,GAAG,CAAC,MAAM,CAAC,iBAAiB,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;YAEpE,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;gBACrB,OAAO,CAAC,GAAG,CACT,GAAG,YAAY,GAAG,OAAO,KAAK,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,CAC3D,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CACT,GAAG,YAAY,GAAG,OAAO,KAAK,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,EAAE,CAC9D,CAAC;YACJ,CAAC;YAED,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;gBACpB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;YAC7D,CAAC;QACH,CAAC;IACH,CAAC;IAEO,sBAAsB,CAAC,QAAgB;QAC7C,MAAM,YAAY,GAA2B;YAC3C,aAAa,EAAE,gBAAgB;YAC/B,gBAAgB,EAAE,mBAAmB;YACrC,QAAQ,EAAE,cAAc;YACxB,SAAS,EAAE,oBAAoB;SAChC,CAAC;QAEF,OAAO,YAAY,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC;IAC5C,CAAC;IAEO,WAAW,CAAC,QAA0B;QAC5C,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC;QAC3D,MAAM,YAAY,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC;QAE/D,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC,CAAC;QAE1D,IAAI,SAAS,GAAG,CAAC,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;YACtC,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,IAAI,CAAC,eAAe,KAAK,CAAC,KAAK,CAAC,GAAG,SAAS,YAAY,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,GAAG,YAAY,gBAAgB,CAAC,EAAE,CAAC,CACnH,CAAC;QACJ,CAAC;aAAM,IAAI,SAAS,GAAG,CAAC,EAAE,CAAC;YACzB,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,KAAK,CAAC,gCAAgC,SAAS,YAAY,SAAS,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAC7F,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CAAC,kDAAkD,CAAC,CACjE,CAAC;QACJ,CAAC;QAED,OAAO,CAAC,GAAG,EAAE,CAAC;QAEd,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;YACrB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,8BAA8B,CAAC,CAAC,CAAC;QACpG,CAAC;IACH,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"status.command.js","sourceRoot":"","sources":["../../../src/cli/commands/status.command.ts"],"names":[],"mappings":"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"}
|