@saccolabs/tars 1.31.0 → 1.32.1

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 (93) hide show
  1. package/README.md +13 -11
  2. package/context/skills/create-extension/SKILL.md +2 -2
  3. package/context/skills/manage-extensions/SKILL.md +3 -3
  4. package/dist/channels/discord/discord-channel.d.ts +4 -0
  5. package/dist/channels/discord/discord-channel.js +21 -3
  6. package/dist/channels/discord/discord-channel.js.map +1 -1
  7. package/dist/channels/discord/message-formatter.d.ts +1 -1
  8. package/dist/channels/discord/message-formatter.js +1 -1
  9. package/dist/cli/commands/quota.js +13 -48
  10. package/dist/cli/commands/quota.js.map +1 -1
  11. package/dist/cli/commands/refresh.js +40 -3
  12. package/dist/cli/commands/refresh.js.map +1 -1
  13. package/dist/cli/commands/setup.js +192 -467
  14. package/dist/cli/commands/setup.js.map +1 -1
  15. package/dist/cli/index.js +3 -13
  16. package/dist/cli/index.js.map +1 -1
  17. package/dist/config/config.d.ts +5 -10
  18. package/dist/config/config.js +21 -27
  19. package/dist/config/config.js.map +1 -1
  20. package/dist/memory/knowledge-store.js +10 -1
  21. package/dist/memory/knowledge-store.js.map +1 -1
  22. package/dist/memory/memory-manager.d.ts +0 -3
  23. package/dist/memory/memory-manager.js +26 -34
  24. package/dist/memory/memory-manager.js.map +1 -1
  25. package/dist/scripts/debug-cli.js +2 -2
  26. package/dist/scripts/debug-cli.js.map +1 -1
  27. package/dist/supervisor/heartbeat-service.js +1 -1
  28. package/dist/supervisor/heartbeat-service.js.map +1 -1
  29. package/dist/supervisor/main.js +37 -79
  30. package/dist/supervisor/main.js.map +1 -1
  31. package/dist/supervisor/mcp-bridge.d.ts +25 -0
  32. package/dist/supervisor/mcp-bridge.js +157 -0
  33. package/dist/supervisor/mcp-bridge.js.map +1 -0
  34. package/dist/supervisor/session-manager.d.ts +1 -1
  35. package/dist/supervisor/session-manager.js +1 -1
  36. package/dist/supervisor/supervisor.d.ts +14 -7
  37. package/dist/supervisor/supervisor.js +87 -29
  38. package/dist/supervisor/supervisor.js.map +1 -1
  39. package/dist/supervisor/{gemini-engine.d.ts → tars-engine.d.ts} +38 -33
  40. package/dist/supervisor/tars-engine.js +698 -0
  41. package/dist/supervisor/tars-engine.js.map +1 -0
  42. package/dist/tools/get-quota.d.ts +38 -12
  43. package/dist/tools/get-quota.js +37 -94
  44. package/dist/tools/get-quota.js.map +1 -1
  45. package/dist/tools/send-notification.d.ts +32 -7
  46. package/dist/tools/send-notification.js +31 -37
  47. package/dist/tools/send-notification.js.map +1 -1
  48. package/dist/types/index.d.ts +2 -2
  49. package/dist/utils/brain-audit.js +4 -4
  50. package/dist/utils/brain-audit.js.map +1 -1
  51. package/dist/utils/migration-manager.d.ts +4 -0
  52. package/dist/utils/migration-manager.js +205 -0
  53. package/dist/utils/migration-manager.js.map +1 -0
  54. package/extensions/memory/dist/store.js +29 -20
  55. package/extensions/memory/dist/store.js.map +1 -1
  56. package/extensions/memory/src/store.ts +33 -23
  57. package/package.json +4 -3
  58. package/src/prompts/system.md +3 -14
  59. package/context/agents/scaffolder.md +0 -22
  60. package/dist/auth/credential-manager.d.ts +0 -14
  61. package/dist/auth/credential-manager.js +0 -60
  62. package/dist/auth/credential-manager.js.map +0 -1
  63. package/dist/auth/oauth-service.d.ts +0 -24
  64. package/dist/auth/oauth-service.js +0 -89
  65. package/dist/auth/oauth-service.js.map +0 -1
  66. package/dist/auth/workspace-auth-service.d.ts +0 -10
  67. package/dist/auth/workspace-auth-service.js +0 -78
  68. package/dist/auth/workspace-auth-service.js.map +0 -1
  69. package/dist/cli/commands/swarm.d.ts +0 -13
  70. package/dist/cli/commands/swarm.js +0 -250
  71. package/dist/cli/commands/swarm.js.map +0 -1
  72. package/dist/inference/LlamaCppGenerator.d.ts +0 -25
  73. package/dist/inference/LlamaCppGenerator.js +0 -461
  74. package/dist/inference/LlamaCppGenerator.js.map +0 -1
  75. package/dist/scripts/test-local-llamacpp.d.ts +0 -1
  76. package/dist/scripts/test-local-llamacpp.js +0 -77
  77. package/dist/scripts/test-local-llamacpp.js.map +0 -1
  78. package/dist/supervisor/gemini-engine.js +0 -1056
  79. package/dist/supervisor/gemini-engine.js.map +0 -1
  80. package/dist/swarm/agent-card.d.ts +0 -14
  81. package/dist/swarm/agent-card.js +0 -93
  82. package/dist/swarm/agent-card.js.map +0 -1
  83. package/dist/swarm/rpc-handler.d.ts +0 -27
  84. package/dist/swarm/rpc-handler.js +0 -235
  85. package/dist/swarm/rpc-handler.js.map +0 -1
  86. package/dist/swarm/swarm-service.d.ts +0 -47
  87. package/dist/swarm/swarm-service.js +0 -207
  88. package/dist/swarm/swarm-service.js.map +0 -1
  89. package/dist/swarm/types.d.ts +0 -109
  90. package/dist/swarm/types.js +0 -15
  91. package/dist/swarm/types.js.map +0 -1
  92. /package/extensions/memory/{gemini-extension.json → tars-extension.json} +0 -0
  93. /package/extensions/tasks/{gemini-extension.json → tars-extension.json} +0 -0
@@ -1,89 +0,0 @@
1
- import { getOauthClient, AuthType, Config } from '@google/gemini-cli-core';
2
- import logger from '../utils/logger.js';
3
- import path from 'path';
4
- import fs from 'fs/promises';
5
- /**
6
- * TarsOAuthService - Native OAuth Flow for Tars
7
- *
8
- * This service wraps the @google/gemini-cli-core auth logic but ensures
9
- * it operates exclusively within the ~/.tars isolated environment.
10
- */
11
- export class TarsOAuthService {
12
- homeDir;
13
- constructor(homeDir) {
14
- this.homeDir = homeDir;
15
- }
16
- /**
17
- * Executes the OAuth login flow.
18
- * This will open a browser for the user to authenticate.
19
- * @param force If true, clears existing credentials before starting the flow.
20
- */
21
- async login(force = false) {
22
- if (force) {
23
- await this.logout();
24
- }
25
- logger.info('🔑 Starting native Google OAuth flow...');
26
- const savedHome = process.env.HOME;
27
- try {
28
- // Ensure home directory exists
29
- await fs.mkdir(this.homeDir, { recursive: true });
30
- // Force core to resolve its global directory within ~/.tars
31
- process.env.HOME = this.homeDir;
32
- // Create a minimal config for the auth client
33
- const config = new Config({
34
- targetDir: this.homeDir,
35
- cwd: this.homeDir,
36
- sessionId: 'setup-session',
37
- model: 'auto',
38
- debugMode: false,
39
- interactive: true,
40
- noBrowser: true // Native manual flow (Option 2)
41
- });
42
- // This triggers the interactive flow if tokens are missing or invalid
43
- const client = await getOauthClient(AuthType.LOGIN_WITH_GOOGLE, config);
44
- // Verify we actually got a client with credentials
45
- if (client) {
46
- logger.info('✅ Authentication successful.');
47
- }
48
- else {
49
- throw new Error('OAuth flow completed but client is unavailable.');
50
- }
51
- }
52
- catch (error) {
53
- logger.error(`❌ OAuth login failed: ${error.message}`);
54
- throw error;
55
- }
56
- finally {
57
- // Restore original HOME
58
- process.env.HOME = savedHome;
59
- }
60
- }
61
- /**
62
- * Checks if a valid OAuth credential exists in the Tars isolated storage.
63
- */
64
- async isAuthenticated() {
65
- const credsPath = path.join(this.homeDir, '.gemini', 'oauth_creds.json');
66
- try {
67
- await fs.access(credsPath);
68
- // Basic existence check is usually enough as core handles validity/refresh
69
- return true;
70
- }
71
- catch {
72
- return false;
73
- }
74
- }
75
- /**
76
- * Clears cached credentials.
77
- */
78
- async logout() {
79
- const credsPath = path.join(this.homeDir, '.gemini', 'oauth_creds.json');
80
- try {
81
- await fs.unlink(credsPath);
82
- logger.info('🗑️ Tars credentials cleared.');
83
- }
84
- catch (err) {
85
- // Ignore if already deleted
86
- }
87
- }
88
- }
89
- //# sourceMappingURL=oauth-service.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"oauth-service.js","sourceRoot":"","sources":["../../src/auth/oauth-service.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,EAAW,MAAM,yBAAyB,CAAC;AACpF,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,aAAa,CAAC;AAG7B;;;;;GAKG;AACH,MAAM,OAAO,gBAAgB;IACI;IAA7B,YAA6B,OAAe;QAAf,YAAO,GAAP,OAAO,CAAQ;IAAG,CAAC;IAEhD;;;;OAIG;IACI,KAAK,CAAC,KAAK,CAAC,QAAiB,KAAK;QACrC,IAAI,KAAK,EAAE,CAAC;YACR,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;QACxB,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;QAEvD,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;QACnC,IAAI,CAAC;YACD,+BAA+B;YAC/B,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAElD,4DAA4D;YAC5D,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC;YAEhC,8CAA8C;YAC9C,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC;gBACtB,SAAS,EAAE,IAAI,CAAC,OAAO;gBACvB,GAAG,EAAE,IAAI,CAAC,OAAO;gBACjB,SAAS,EAAE,eAAe;gBAC1B,KAAK,EAAE,MAAM;gBACb,SAAS,EAAE,KAAK;gBAChB,WAAW,EAAE,IAAI;gBACjB,SAAS,EAAE,IAAI,CAAC,gCAAgC;aACnD,CAAC,CAAC;YAEH,sEAAsE;YACtE,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,QAAQ,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;YAExE,mDAAmD;YACnD,IAAI,MAAM,EAAE,CAAC;gBACT,MAAM,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;YAChD,CAAC;iBAAM,CAAC;gBACJ,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;YACvE,CAAC;QACL,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YAClB,MAAM,CAAC,KAAK,CAAC,yBAAyB,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YACvD,MAAM,KAAK,CAAC;QAChB,CAAC;gBAAS,CAAC;YACP,wBAAwB;YACxB,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,SAAS,CAAC;QACjC,CAAC;IACL,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,eAAe;QACxB,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,kBAAkB,CAAC,CAAC;QACzE,IAAI,CAAC;YACD,MAAM,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAC3B,2EAA2E;YAC3E,OAAO,IAAI,CAAC;QAChB,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,KAAK,CAAC;QACjB,CAAC;IACL,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,MAAM;QACf,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,kBAAkB,CAAC,CAAC;QACzE,IAAI,CAAC;YACD,MAAM,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAC3B,MAAM,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;QACjD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,4BAA4B;QAChC,CAAC;IACL,CAAC;CACJ"}
@@ -1,10 +0,0 @@
1
- export declare class WorkspaceOAuthService {
2
- private readonly homeDir;
3
- private readonly credspath;
4
- private readonly clientId;
5
- private readonly clientSecret;
6
- private readonly redirectUri;
7
- constructor(homeDir: string);
8
- isAuthenticated(): Promise<boolean>;
9
- login(): Promise<void>;
10
- }
@@ -1,78 +0,0 @@
1
- import { OAuth2Client } from 'google-auth-library';
2
- import fs from 'fs/promises';
3
- import path from 'path';
4
- import logger from '../utils/logger.js';
5
- import inquirer from 'inquirer';
6
- import chalk from 'chalk';
7
- export class WorkspaceOAuthService {
8
- homeDir;
9
- credspath;
10
- clientId;
11
- clientSecret;
12
- redirectUri = 'http://localhost:32941';
13
- constructor(homeDir) {
14
- this.homeDir = homeDir;
15
- this.credspath = path.join(this.homeDir, '.gemini', 'google-workspace-creds.json');
16
- this.clientId = process.env.GOOGLE_WORKSPACE_CLIENT_ID || '';
17
- this.clientSecret = process.env.GOOGLE_WORKSPACE_CLIENT_SECRET || '';
18
- }
19
- async isAuthenticated() {
20
- try {
21
- await fs.access(this.credspath);
22
- return true;
23
- }
24
- catch {
25
- return false;
26
- }
27
- }
28
- async login() {
29
- if (!this.clientId || !this.clientSecret) {
30
- throw new Error('Missing GOOGLE_WORKSPACE_CLIENT_ID or GOOGLE_WORKSPACE_CLIENT_SECRET in environment.');
31
- }
32
- const oauth2Client = new OAuth2Client(this.clientId, this.clientSecret, this.redirectUri);
33
- const scopes = [
34
- 'https://www.googleapis.com/auth/gmail.modify',
35
- 'https://www.googleapis.com/auth/drive',
36
- 'https://www.googleapis.com/auth/calendar',
37
- 'https://www.googleapis.com/auth/spreadsheets',
38
- 'https://www.googleapis.com/auth/documents',
39
- 'https://www.googleapis.com/auth/tasks',
40
- 'https://www.googleapis.com/auth/userinfo.email',
41
- 'openid'
42
- ];
43
- const url = oauth2Client.generateAuthUrl({
44
- access_type: 'offline',
45
- scope: scopes,
46
- prompt: 'consent'
47
- });
48
- console.log(chalk.cyan('\n 1. Open this URL in your browser:'));
49
- console.log(chalk.white(`\n ${url}\n`));
50
- console.log(chalk.cyan(' 2. Log in and copy the "code" parameter from the resulting URL.'));
51
- console.log(chalk.dim(' (The page might fail to load, just look at the address bar for ?code=...)'));
52
- const { code } = await inquirer.prompt([
53
- {
54
- type: 'input',
55
- name: 'code',
56
- message: ' Enter the authorization code:',
57
- validate: (input) => input.length > 10 || 'Please enter a valid code'
58
- }
59
- ]);
60
- try {
61
- const { tokens } = await oauth2Client.getToken(code);
62
- const creds = {
63
- client_id: this.clientId,
64
- client_secret: this.clientSecret,
65
- refresh_token: tokens.refresh_token,
66
- type: 'authorized_user'
67
- };
68
- await fs.mkdir(path.dirname(this.credspath), { recursive: true });
69
- await fs.writeFile(this.credspath, JSON.stringify(creds, null, 2));
70
- logger.info('✅ Google Workspace credentials saved.');
71
- }
72
- catch (error) {
73
- logger.error(`❌ Failed to exchange code for tokens: ${error.message}`);
74
- throw error;
75
- }
76
- }
77
- }
78
- //# sourceMappingURL=workspace-auth-service.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"workspace-auth-service.js","sourceRoot":"","sources":["../../src/auth/workspace-auth-service.ts"],"names":[],"mappings":"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"}
@@ -1,13 +0,0 @@
1
- /**
2
- * tars swarm — Manage Swarm peers (remote A2A agents).
3
- *
4
- * Subcommands:
5
- * tars swarm status Show swarm mode configuration
6
- * tars swarm add Register a remote Tars peer
7
- * tars swarm remove <name> Remove a registered peer
8
- * tars swarm list List all registered peers
9
- */
10
- /**
11
- * tars swarm — Route to subcommands.
12
- */
13
- export declare function swarm(action: string, ...args: string[]): Promise<void>;
@@ -1,250 +0,0 @@
1
- /**
2
- * tars swarm — Manage Swarm peers (remote A2A agents).
3
- *
4
- * Subcommands:
5
- * tars swarm status Show swarm mode configuration
6
- * tars swarm add Register a remote Tars peer
7
- * tars swarm remove <name> Remove a registered peer
8
- * tars swarm list List all registered peers
9
- */
10
- import chalk from 'chalk';
11
- import inquirer from 'inquirer';
12
- import fs from 'fs';
13
- import path from 'path';
14
- import { getTarsHome } from '../../utils/paths.js';
15
- import { SecretsManager } from '../../utils/secrets-manager.js';
16
- /**
17
- * Returns the agents directory path for swarm peer registration.
18
- */
19
- function getAgentsDir() {
20
- return path.join(getTarsHome(), '.gemini', 'agents');
21
- }
22
- /**
23
- * Read config.json to get swarm settings.
24
- */
25
- function loadConfig() {
26
- const configPath = path.join(getTarsHome(), 'config.json');
27
- try {
28
- return JSON.parse(fs.readFileSync(configPath, 'utf-8'));
29
- }
30
- catch {
31
- return {};
32
- }
33
- }
34
- /**
35
- * tars swarm — Route to subcommands.
36
- */
37
- export async function swarm(action, ...args) {
38
- switch (action) {
39
- case 'status':
40
- return swarmStatus();
41
- case 'add':
42
- return swarmAdd();
43
- case 'remove':
44
- return swarmRemove(args[0]);
45
- case 'list':
46
- return swarmList();
47
- default:
48
- console.log(chalk.yellow(`Unknown swarm action: ${action}`));
49
- console.log(chalk.dim('\nAvailable actions:'));
50
- console.log(chalk.dim(' tars swarm status — Show swarm mode configuration'));
51
- console.log(chalk.dim(' tars swarm add — Register a remote Tars peer'));
52
- console.log(chalk.dim(' tars swarm remove — Remove a registered peer'));
53
- console.log(chalk.dim(' tars swarm list — List all registered peers'));
54
- }
55
- }
56
- /**
57
- * Show swarm mode status.
58
- */
59
- async function swarmStatus() {
60
- const config = loadConfig();
61
- const swarmConfig = config.swarm || {};
62
- const tarsHome = getTarsHome();
63
- const secretsManager = new SecretsManager(tarsHome);
64
- const secrets = secretsManager.load();
65
- console.log(chalk.cyan.bold('\n🌐 Tars Swarm Status'));
66
- console.log(chalk.cyan('━━━━━━━━━━━━━━━━━━━━\n'));
67
- if (!swarmConfig.enabled) {
68
- console.log(chalk.yellow(' ⚠ Swarm mode is disabled.'));
69
- console.log(chalk.dim(' Run `tars setup` to enable swarm mode.\n'));
70
- return;
71
- }
72
- console.log(chalk.green(' ✓ Swarm mode is enabled'));
73
- console.log(chalk.dim(` Port: ${swarmConfig.port || 3100}`));
74
- console.log(chalk.dim(` Description: ${swarmConfig.description || '(none)'}`));
75
- console.log(chalk.dim(` Skills: ${(swarmConfig.skills || []).join(', ') || '(default)'}`));
76
- const hasKey = !!(secrets.SWARM_API_KEY || process.env.SWARM_API_KEY);
77
- if (hasKey) {
78
- const key = secrets.SWARM_API_KEY || process.env.SWARM_API_KEY || '';
79
- console.log(chalk.dim(` API Key: ${key.substring(0, 12)}...${key.substring(key.length - 4)}`));
80
- }
81
- else {
82
- console.log(chalk.yellow(' API Key: ⚠ NOT SET — run `tars setup` to generate one'));
83
- }
84
- console.log('');
85
- // Count registered peers
86
- const peers = listPeerFiles();
87
- if (peers.length > 0) {
88
- console.log(chalk.dim(` Registered Peers: ${peers.length}`));
89
- for (const p of peers) {
90
- console.log(chalk.dim(` • ${p.name} → ${p.url}`));
91
- }
92
- }
93
- else {
94
- console.log(chalk.dim(' Registered Peers: 0'));
95
- console.log(chalk.dim(' Use `tars swarm add` to register a peer.'));
96
- }
97
- console.log('');
98
- }
99
- /**
100
- * Interactive peer registration.
101
- */
102
- async function swarmAdd() {
103
- console.log(chalk.cyan.bold('\n🌐 Register a Swarm Peer'));
104
- console.log(chalk.cyan('────────────────────────\n'));
105
- console.log(chalk.dim(' Register another Tars instance so this agent can delegate tasks to it.'));
106
- console.log(chalk.dim(" You'll need the peer's Agent Card URL and API key.\n"));
107
- const answers = await inquirer.prompt([
108
- {
109
- type: 'input',
110
- name: 'name',
111
- message: 'Peer name (lowercase, no spaces):',
112
- validate: (input) => {
113
- if (!/^[a-z][a-z0-9-]*$/.test(input)) {
114
- return 'Must start with a letter and contain only lowercase letters, numbers, hyphens';
115
- }
116
- return true;
117
- }
118
- },
119
- {
120
- type: 'input',
121
- name: 'url',
122
- message: 'Agent Card URL:',
123
- validate: (input) => {
124
- try {
125
- new URL(input);
126
- if (!input.includes('agent.json') && !input.includes('.well-known')) {
127
- return 'URL should point to the agent card (e.g., http://host:3100/.well-known/agent.json)';
128
- }
129
- return true;
130
- }
131
- catch {
132
- return 'Please enter a valid URL';
133
- }
134
- }
135
- },
136
- {
137
- type: 'password',
138
- name: 'apiKey',
139
- message: 'Peer API Key:',
140
- validate: (input) => input.length >= 10 || 'API key is too short'
141
- }
142
- ]);
143
- const tarsHome = getTarsHome();
144
- const agentsDir = getAgentsDir();
145
- // Ensure agents directory exists
146
- if (!fs.existsSync(agentsDir)) {
147
- fs.mkdirSync(agentsDir, { recursive: true });
148
- }
149
- // Store the API key in secrets
150
- const secretKey = `SWARM_PEER_${answers.name.toUpperCase().replace(/-/g, '_')}_KEY`;
151
- const secretsManager = new SecretsManager(tarsHome);
152
- secretsManager.set(secretKey, answers.apiKey);
153
- // Write the remote agent .md file
154
- const agentFile = path.join(agentsDir, `${answers.name}.md`);
155
- const content = [
156
- '---',
157
- 'kind: remote',
158
- `name: ${answers.name}`,
159
- `agent_card_url: ${answers.url}`,
160
- 'auth:',
161
- ' type: apiKey',
162
- ` key: $${secretKey}`,
163
- '---',
164
- ''
165
- ].join('\n');
166
- fs.writeFileSync(agentFile, content);
167
- console.log(chalk.green(`\n ✓ Peer "${answers.name}" registered successfully!`));
168
- console.log(chalk.dim(` Agent file: ${agentFile}`));
169
- console.log(chalk.dim(` Secret: ${secretKey}`));
170
- console.log(chalk.dim('\n Restart Tars for the peer to become available: tars restart\n'));
171
- }
172
- /**
173
- * Remove a registered peer.
174
- */
175
- async function swarmRemove(name) {
176
- if (!name) {
177
- console.log(chalk.yellow('Usage: tars swarm remove <peer-name>'));
178
- return;
179
- }
180
- const agentsDir = getAgentsDir();
181
- const agentFile = path.join(agentsDir, `${name}.md`);
182
- const tarsHome = getTarsHome();
183
- if (!fs.existsSync(agentFile)) {
184
- console.log(chalk.yellow(` Peer "${name}" not found.`));
185
- return;
186
- }
187
- // Check if it's a remote agent (don't delete local agents)
188
- const content = fs.readFileSync(agentFile, 'utf-8');
189
- if (!content.includes('kind: remote')) {
190
- console.log(chalk.yellow(` "${name}" is a local agent, not a swarm peer. Skipping.`));
191
- return;
192
- }
193
- // Remove the file
194
- fs.unlinkSync(agentFile);
195
- // Remove the secret
196
- const secretKey = `SWARM_PEER_${name.toUpperCase().replace(/-/g, '_')}_KEY`;
197
- const secretsManager = new SecretsManager(tarsHome);
198
- secretsManager.remove(secretKey);
199
- console.log(chalk.green(` ✓ Peer "${name}" removed.`));
200
- console.log(chalk.dim(' Restart Tars for the change to take effect: tars restart\n'));
201
- }
202
- /**
203
- * List all registered swarm peers.
204
- */
205
- async function swarmList() {
206
- const peers = listPeerFiles();
207
- console.log(chalk.cyan.bold('\n🌐 Swarm Peers'));
208
- console.log(chalk.cyan('──────────────\n'));
209
- if (peers.length === 0) {
210
- console.log(chalk.dim(' No peers registered.'));
211
- console.log(chalk.dim(' Use `tars swarm add` to register one.\n'));
212
- return;
213
- }
214
- for (const peer of peers) {
215
- console.log(` ${chalk.bold(peer.name)} → ${chalk.dim(peer.url)}`);
216
- }
217
- console.log(chalk.dim(`\n Total: ${peers.length} peer(s)\n`));
218
- }
219
- /**
220
- * Helper: Read all remote agent .md files from the agents directory.
221
- */
222
- function listPeerFiles() {
223
- const agentsDir = getAgentsDir();
224
- if (!fs.existsSync(agentsDir))
225
- return [];
226
- const peers = [];
227
- try {
228
- const files = fs.readdirSync(agentsDir).filter((f) => f.endsWith('.md'));
229
- for (const file of files) {
230
- const content = fs.readFileSync(path.join(agentsDir, file), 'utf-8');
231
- if (!content.includes('kind: remote'))
232
- continue;
233
- // Extract name and url from frontmatter
234
- const nameMatch = content.match(/^name:\s*(.+)$/m);
235
- const urlMatch = content.match(/^agent_card_url:\s*(.+)$/m);
236
- if (nameMatch && urlMatch) {
237
- peers.push({
238
- name: nameMatch[1].trim(),
239
- url: urlMatch[1].trim(),
240
- file
241
- });
242
- }
243
- }
244
- }
245
- catch {
246
- // Ignore errors
247
- }
248
- return peers;
249
- }
250
- //# sourceMappingURL=swarm.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"swarm.js","sourceRoot":"","sources":["../../../src/cli/commands/swarm.ts"],"names":[],"mappings":"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"}
@@ -1,25 +0,0 @@
1
- import { ContentGenerator } from '@google/gemini-cli-core';
2
- import { type CountTokensResponse, type GenerateContentResponse, type GenerateContentParameters, type CountTokensParameters, type EmbedContentResponse, type EmbedContentParameters } from '@google/genai';
3
- /**
4
- * LlamaCppGenerator - Implementation of ContentGenerator for local inference backends (llamacpp, etc.)
5
- * that provide an OpenAI-compatible API.
6
- */
7
- export declare class LlamaCppGenerator implements ContentGenerator {
8
- private readonly baseUrl;
9
- constructor(baseUrl?: string);
10
- private resolveEndpoint;
11
- generateContent(request: GenerateContentParameters, userPromptId: string): Promise<GenerateContentResponse>;
12
- generateContentStream(request: GenerateContentParameters, userPromptId: string): Promise<AsyncGenerator<GenerateContentResponse>>;
13
- countTokens(request: CountTokensParameters): Promise<CountTokensResponse>;
14
- embedContent(request: EmbedContentParameters): Promise<EmbedContentResponse>;
15
- /**
16
- * Maps Gemini parameters to OpenAI Chat Completion format.
17
- */
18
- private mapToOpenAi;
19
- /**
20
- * Maps OpenAI response to Gemini GenerateContentResponse format.
21
- */
22
- private mapFromOpenAi;
23
- private mapFromOpenAiStream;
24
- private mapFinishReason;
25
- }