@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.
Files changed (67) hide show
  1. package/README.md +4 -4
  2. package/dist/cli/cli-factory.d.ts.map +1 -1
  3. package/dist/cli/cli-factory.js +27 -1
  4. package/dist/cli/cli-factory.js.map +1 -1
  5. package/dist/cli/commands/config.command.d.ts +17 -0
  6. package/dist/cli/commands/config.command.d.ts.map +1 -0
  7. package/dist/cli/commands/config.command.js +117 -0
  8. package/dist/cli/commands/config.command.js.map +1 -0
  9. package/dist/cli/commands/status.command.d.ts +7 -1
  10. package/dist/cli/commands/status.command.d.ts.map +1 -1
  11. package/dist/cli/commands/status.command.js +273 -12
  12. package/dist/cli/commands/status.command.js.map +1 -1
  13. package/dist/cli/installers/claude-code-installer.d.ts.map +1 -1
  14. package/dist/cli/installers/claude-code-installer.js +22 -1
  15. package/dist/cli/installers/claude-code-installer.js.map +1 -1
  16. package/dist/cli/installers/installer-factory.d.ts.map +1 -1
  17. package/dist/cli/installers/installer-factory.js +10 -9
  18. package/dist/cli/installers/installer-factory.js.map +1 -1
  19. package/dist/cli/utils/system-info.d.ts +20 -0
  20. package/dist/cli/utils/system-info.d.ts.map +1 -0
  21. package/dist/cli/utils/system-info.js +90 -0
  22. package/dist/cli/utils/system-info.js.map +1 -0
  23. package/dist/core/mcp-server.d.ts +51 -3
  24. package/dist/core/mcp-server.d.ts.map +1 -1
  25. package/dist/core/mcp-server.js +306 -44
  26. package/dist/core/mcp-server.js.map +1 -1
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/index.js +113 -29
  29. package/dist/index.js.map +1 -1
  30. package/dist/prompts/persona/persona.prompt.d.ts.map +1 -1
  31. package/dist/prompts/persona/persona.prompt.js +12 -13
  32. package/dist/prompts/persona/persona.prompt.js.map +1 -1
  33. package/dist/services/credential-storage.service.d.ts +26 -0
  34. package/dist/services/credential-storage.service.d.ts.map +1 -0
  35. package/dist/services/credential-storage.service.js +149 -0
  36. package/dist/services/credential-storage.service.js.map +1 -0
  37. package/dist/services/enhanced-persona-service.d.ts +22 -0
  38. package/dist/services/enhanced-persona-service.d.ts.map +1 -0
  39. package/dist/services/enhanced-persona-service.js +174 -0
  40. package/dist/services/enhanced-persona-service.js.map +1 -0
  41. package/dist/services/plan-watcher.service.d.ts.map +1 -1
  42. package/dist/services/plan-watcher.service.js +5 -0
  43. package/dist/services/plan-watcher.service.js.map +1 -1
  44. package/dist/services/remote/auth-token-service.d.ts +55 -0
  45. package/dist/services/remote/auth-token-service.d.ts.map +1 -0
  46. package/dist/services/remote/auth-token-service.js +188 -0
  47. package/dist/services/remote/auth-token-service.js.map +1 -0
  48. package/dist/services/remote/persona-sync-service.d.ts +131 -0
  49. package/dist/services/remote/persona-sync-service.d.ts.map +1 -0
  50. package/dist/services/remote/persona-sync-service.js +560 -0
  51. package/dist/services/remote/persona-sync-service.js.map +1 -0
  52. package/dist/services/remote/system-persona-service.d.ts +43 -0
  53. package/dist/services/remote/system-persona-service.d.ts.map +1 -0
  54. package/dist/services/remote/system-persona-service.js +261 -0
  55. package/dist/services/remote/system-persona-service.js.map +1 -0
  56. package/dist/tools/persona/as.tool.d.ts +6 -2
  57. package/dist/tools/persona/as.tool.d.ts.map +1 -1
  58. package/dist/tools/persona/as.tool.js +146 -87
  59. package/dist/tools/persona/as.tool.js.map +1 -1
  60. package/dist/tools/persona/persona.tool.d.ts.map +1 -1
  61. package/dist/tools/persona/persona.tool.js +20 -6
  62. package/dist/tools/persona/persona.tool.js.map +1 -1
  63. package/dist/types/local-context.d.ts +17 -0
  64. package/dist/types/local-context.d.ts.map +1 -0
  65. package/dist/types/local-context.js +7 -0
  66. package/dist/types/local-context.js.map +1 -0
  67. 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;AAWpC,wBAAgB,SAAS,IAAI,OAAO,CAyGnC"}
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"}
@@ -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;IAC1D,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC,gBAAgB,CAAC,CAAC;IAEtD,OAAO;SACJ,IAAI,CAAC,YAAY,CAAC;SAClB,WAAW,CAAC,4DAA4D,CAAC,CAAC;IAE7E,kBAAkB;IAClB,OAAO;SACJ,OAAO,CAAC,oBAAoB,CAAC;SAC7B,WAAW,CAAC,kDAAkD,CAAC;SAC/D,MAAM,CAAC,OAAO,EAAE,qCAAqC,CAAC;SACtD,MAAM,CAAC,qBAAqB,EAAE,0CAA0C,EAAE,OAAO,CAAC;SAClF,MAAM,CAAC,mBAAmB,EAAE,aAAa,EAAE,YAAY,CAAC;SACxD,MAAM,CAAC,YAAY,EAAE,6CAA6C,CAAC;SACnE,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE;QAClC,IAAI,CAAC;YACH,MAAM,cAAc,CAAC,OAAO,CAAC;gBAC3B,QAAQ;gBACR,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,QAAQ,EAAE,OAAO,CAAC,QAAQ;aAC3B,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,sBAAsB,EAAE,KAAK,CAAC,CAAC;YAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,oBAAoB;IACpB,OAAO;SACJ,OAAO,CAAC,sBAAsB,CAAC;SAC/B,WAAW,CAAC,qDAAqD,CAAC;SAClE,MAAM,CAAC,OAAO,EAAE,wCAAwC,CAAC;SACzD,MAAM,CAAC,qBAAqB,EAAE,0CAA0C,EAAE,OAAO,CAAC;SAClF,MAAM,CAAC,mBAAmB,EAAE,aAAa,EAAE,YAAY,CAAC;SACxD,MAAM,CAAC,aAAa,EAAE,0BAA0B,CAAC;SACjD,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE;QAClC,IAAI,CAAC;YACH,MAAM,gBAAgB,CAAC,OAAO,CAAC;gBAC7B,QAAQ;gBACR,GAAG,EAAE,OAAO,CAAC,GAAG;gBAChB,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,KAAK,EAAE,OAAO,CAAC,KAAK;aACrB,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,KAAK,CAAC,CAAC;YAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,iBAAiB;IACjB,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,6CAA6C,CAAC;SAC1D,MAAM,CAAC,mBAAmB,EAAE,aAAa,EAAE,YAAY,CAAC;SACxD,MAAM,CAAC,qBAAqB,EAAE,0CAA0C,EAAE,OAAO,CAAC;SAClF,MAAM,CAAC,2BAA2B,EAAE,yBAAyB,CAAC;SAC9D,MAAM,CAAC,eAAe,EAAE,2BAA2B,CAAC;SACpD,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,IAAI,CAAC;YACH,MAAM,aAAa,CAAC,OAAO,CAAC;gBAC1B,IAAI,EAAE,OAAO,CAAC,IAAI;gBAClB,KAAK,EAAE,OAAO,CAAC,KAAK;gBACpB,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,OAAO,EAAE,OAAO,CAAC,OAAO;aACzB,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,sBAAsB,EAAE,KAAK,CAAC,CAAC;YAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,eAAe;IACf,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,KAAK,CAAC,IAAI,CAAC;SACX,WAAW,CAAC,8BAA8B,CAAC;SAC3C,MAAM,CAAC,gBAAgB,EAAE,iDAAiD,CAAC;SAC3E,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;QACxB,IAAI,CAAC;YACH,MAAM,WAAW,CAAC,OAAO,CAAC;gBACxB,YAAY,EAAE,OAAO,CAAC,QAAQ;aAC/B,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,sBAAsB,EAAE,KAAK,CAAC,CAAC;YAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,OAAO,OAAO,CAAC;AACjB,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
- constructor(factory: InstallerFactory);
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;AAErE,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;AAQD,qBAAa,aAAa;IACxB,OAAO,CAAC,OAAO,CAAmB;gBAEtB,OAAO,EAAE,gBAAgB;IAI/B,OAAO,CAAC,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC;YAsB3C,cAAc;IAwC5B,OAAO,CAAC,eAAe;IAuBvB,OAAO,CAAC,sBAAsB;IAW9B,OAAO,CAAC,WAAW;CA2BpB"}
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
- constructor(factory) {
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 Installation Status\n'));
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
- // Display status for each platform
17
- this.displayStatuses(statuses, options);
18
- // Show summary
19
- if (!options.platform) {
20
- this.showSummary(statuses);
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
- statuses.push({
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
- statuses.push({
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":"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"}
1
+ {"version":3,"file":"status.command.js","sourceRoot":"","sources":["../../../src/cli/commands/status.command.ts"],"names":[],"mappings":"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"}