@dlnk/cli 0.3.0 → 0.5.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/dist/license.js CHANGED
@@ -1,165 +1,230 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
5
35
  Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.generateLicenseKey = generateLicenseKey;
7
- exports.isValidKeyFormat = isValidKeyFormat;
8
36
  exports.loadLicense = loadLicense;
9
- exports.saveLicense = saveLicense;
10
- exports.activateLicense = activateLicense;
11
37
  exports.validateLicense = validateLicense;
12
- exports.loadUsage = loadUsage;
13
- exports.trackUsage = trackUsage;
38
+ exports.activateLicense = activateLicense;
14
39
  exports.getUsageSummary = getUsageSummary;
15
- const crypto_1 = __importDefault(require("crypto"));
16
- const fs_1 = __importDefault(require("fs"));
17
- const path_1 = __importDefault(require("path"));
18
- const os_1 = __importDefault(require("os"));
19
- const CONFIG_DIR = path_1.default.join(os_1.default.homedir(), '.dlnk');
20
- const LICENSE_FILE = path_1.default.join(CONFIG_DIR, 'license.json');
21
- const USAGE_FILE = path_1.default.join(CONFIG_DIR, 'usage.json');
22
- // Tier limits
23
- const TIER_LIMITS = {
24
- trial: { maxAgents: 3, maxReqPerDay: 50 },
25
- free: { maxAgents: 3, maxReqPerDay: 50 },
26
- pro: { maxAgents: 12, maxReqPerDay: 99999 },
27
- enterprise: { maxAgents: 12, maxReqPerDay: 99999 },
28
- };
29
- // Generate a license key (for server-side use)
30
- function generateLicenseKey(tier, email) {
31
- const prefix = tier === 'pro' ? 'PRO' : tier === 'enterprise' ? 'ENT' : 'FREE';
32
- const hash = crypto_1.default
33
- .createHmac('sha256', 'dlnk-secret-2026')
34
- .update(`${email}:${tier}:${Date.now()}`)
35
- .digest('hex')
36
- .toUpperCase()
37
- .slice(0, 20);
38
- // Format: DLNK-PRO-XXXX-XXXX-XXXX
39
- const parts = hash.match(/.{4}/g).slice(0, 4);
40
- return `DLNK-${prefix}-${parts.join('-')}`;
40
+ exports.trackUsage = trackUsage;
41
+ exports.generateLicenseKey = generateLicenseKey;
42
+ const fs = __importStar(require("fs"));
43
+ const path = __importStar(require("path"));
44
+ const os = __importStar(require("os"));
45
+ const crypto = __importStar(require("crypto"));
46
+ const CONFIG_DIR = path.join(os.homedir(), '.dlnk');
47
+ const LICENSE_FILE = path.join(CONFIG_DIR, 'license.json');
48
+ const USAGE_FILE = path.join(CONFIG_DIR, 'usage.json');
49
+ const LICENSE_SERVER = 'https://dlnk-license.dlnkai.workers.dev';
50
+ const HMAC_SECRET = 'dlnk-hmac-secret-change-in-production'; // same as worker
51
+ // ── Defaults ───────────────────────────────────────────────────
52
+ function defaultLicense() {
53
+ return {
54
+ key: 'trial',
55
+ tier: 'trial',
56
+ maxAgents: 3,
57
+ maxReqPerDay: 50,
58
+ activatedAt: Date.now(),
59
+ offline: false,
60
+ };
41
61
  }
42
- // Validate key format
43
- function isValidKeyFormat(key) {
44
- return /^DLNK-(PRO|ENT|FREE|TRIAL)-[A-F0-9]{4}-[A-F0-9]{4}-[A-F0-9]{4}-[A-F0-9]{4}$/.test(key);
62
+ // ── Device ID ──────────────────────────────────────────────────
63
+ function getDeviceId() {
64
+ const idFile = path.join(CONFIG_DIR, 'device.id');
65
+ if (!fs.existsSync(idFile)) {
66
+ const id = crypto.randomBytes(16).toString('hex');
67
+ if (!fs.existsSync(CONFIG_DIR))
68
+ fs.mkdirSync(CONFIG_DIR, { recursive: true });
69
+ fs.writeFileSync(idFile, id);
70
+ return id;
71
+ }
72
+ return fs.readFileSync(idFile, 'utf-8').trim();
45
73
  }
46
- // Detect tier from key prefix
47
- function tierFromKey(key) {
48
- if (key.startsWith('DLNK-PRO-'))
49
- return 'pro';
50
- if (key.startsWith('DLNK-ENT-'))
51
- return 'enterprise';
52
- if (key.startsWith('DLNK-FREE-'))
53
- return 'free';
54
- if (key === 'trial')
55
- return 'trial';
56
- return 'free';
74
+ // ── HMAC local verify ──────────────────────────────────────────
75
+ function verifyKeyLocally(key) {
76
+ const parts = key.split('-');
77
+ if (parts.length < 4 || parts[0] !== 'DLNK')
78
+ return false;
79
+ const sigHex = parts[parts.length - 1];
80
+ const payload = parts.slice(1, -1).join('-');
81
+ const expected = crypto.createHmac('sha256', HMAC_SECRET)
82
+ .update(payload).digest('hex').slice(0, 8).toUpperCase();
83
+ return sigHex === expected;
57
84
  }
58
- // Load license from disk
85
+ // ── Load / Save ────────────────────────────────────────────────
59
86
  function loadLicense() {
60
87
  try {
61
- if (fs_1.default.existsSync(LICENSE_FILE)) {
62
- return JSON.parse(fs_1.default.readFileSync(LICENSE_FILE, 'utf-8'));
88
+ if (fs.existsSync(LICENSE_FILE)) {
89
+ return JSON.parse(fs.readFileSync(LICENSE_FILE, 'utf-8'));
63
90
  }
64
91
  }
65
92
  catch { }
66
- return getTrialLicense();
93
+ return defaultLicense();
67
94
  }
68
- function getTrialLicense() {
69
- return {
70
- key: 'trial',
71
- tier: 'trial',
72
- maxAgents: TIER_LIMITS.trial.maxAgents,
73
- maxReqPerDay: TIER_LIMITS.trial.maxReqPerDay,
74
- activatedAt: Date.now(),
75
- offline: false,
76
- };
77
- }
78
- // Save license to disk
79
95
  function saveLicense(info) {
80
- if (!fs_1.default.existsSync(CONFIG_DIR))
81
- fs_1.default.mkdirSync(CONFIG_DIR, { recursive: true });
82
- fs_1.default.writeFileSync(LICENSE_FILE, JSON.stringify(info, null, 2));
83
- }
84
- // Activate a license key
85
- async function activateLicense(key) {
86
- if (key === 'trial') {
87
- const info = getTrialLicense();
88
- saveLicense(info);
89
- return { ok: true, info };
90
- }
91
- const tier = tierFromKey(key);
92
- const limits = TIER_LIMITS[tier];
93
- const info = {
94
- key,
95
- tier,
96
- maxAgents: limits.maxAgents,
97
- maxReqPerDay: limits.maxReqPerDay,
98
- activatedAt: Date.now(),
99
- lastValidated: Date.now(),
100
- offline: false,
101
- };
102
- saveLicense(info);
103
- return { ok: true, info };
96
+ if (!fs.existsSync(CONFIG_DIR))
97
+ fs.mkdirSync(CONFIG_DIR, { recursive: true });
98
+ fs.writeFileSync(LICENSE_FILE, JSON.stringify(info, null, 2));
104
99
  }
105
- // Validate license (check expiry + limits)
100
+ // ── Validate ───────────────────────────────────────────────────
106
101
  function validateLicense() {
107
102
  const info = loadLicense();
108
- // Check expiry
109
- if (info.expiresAt && Date.now() > info.expiresAt) {
110
- return { valid: false, reason: 'License expired', info };
103
+ if (info.tier === 'trial') {
104
+ return { valid: true, info };
105
+ }
106
+ // HMAC quick check (offline)
107
+ if (!verifyKeyLocally(info.key)) {
108
+ return { valid: false, reason: 'Invalid key format', info };
111
109
  }
112
- // Grace period: 7 days offline
113
- const GRACE_MS = 7 * 24 * 60 * 60 * 1000;
114
- if (info.lastValidated && Date.now() - info.lastValidated > GRACE_MS) {
115
- return { valid: false, reason: 'License validation required (offline grace period expired)', info };
110
+ // Expiry
111
+ if (info.expiresAt && info.expiresAt < Date.now()) {
112
+ return { valid: false, reason: 'License expired', info };
116
113
  }
117
114
  return { valid: true, info };
118
115
  }
119
- // ─── Usage Tracking ────────────────────────────────────────────────────────
120
- function todayStr() {
121
- return new Date().toISOString().slice(0, 10);
122
- }
123
- function loadUsage() {
116
+ // ── Activate (online) ──────────────────────────────────────────
117
+ async function activateLicense(key) {
118
+ if (!verifyKeyLocally(key)) {
119
+ return { ok: false, error: 'Invalid key format — check your key and try again' };
120
+ }
124
121
  try {
125
- if (fs_1.default.existsSync(USAGE_FILE)) {
126
- const data = JSON.parse(fs_1.default.readFileSync(USAGE_FILE, 'utf-8'));
127
- if (data.date === todayStr())
128
- return data;
122
+ const deviceId = getDeviceId();
123
+ const res = await fetchJSON(`${LICENSE_SERVER}/activate`, {
124
+ method: 'POST',
125
+ body: JSON.stringify({ key, deviceId }),
126
+ });
127
+ if (!res.ok) {
128
+ return { ok: false, error: res.error || 'Activation failed' };
129
129
  }
130
+ const { info: serverInfo } = res;
131
+ const licenseInfo = {
132
+ key,
133
+ tier: serverInfo.tier,
134
+ email: serverInfo.email,
135
+ expiresAt: serverInfo.expiresAt ? new Date(serverInfo.expiresAt).getTime() : undefined,
136
+ maxAgents: serverInfo.maxAgents,
137
+ maxReqPerDay: serverInfo.maxReqPerDay,
138
+ activatedAt: Date.now(),
139
+ lastValidated: Date.now(),
140
+ offline: false,
141
+ };
142
+ saveLicense(licenseInfo);
143
+ return { ok: true, info: licenseInfo };
130
144
  }
131
- catch { }
132
- return { date: todayStr(), requests: 0, agentsUsed: 0 };
145
+ catch (e) {
146
+ // Offline fallback save locally with HMAC verification only
147
+ const tier = key.includes('-PRO-') ? 'pro' : key.includes('-ENT-') ? 'enterprise' : 'free';
148
+ const tierMap = {
149
+ pro: { maxAgents: 12, maxReqPerDay: 99999 },
150
+ enterprise: { maxAgents: 12, maxReqPerDay: 99999 },
151
+ free: { maxAgents: 3, maxReqPerDay: 50 },
152
+ };
153
+ const info = {
154
+ key,
155
+ tier: tier,
156
+ maxAgents: tierMap[tier]?.maxAgents || 3,
157
+ maxReqPerDay: tierMap[tier]?.maxReqPerDay || 50,
158
+ activatedAt: Date.now(),
159
+ offline: true,
160
+ };
161
+ saveLicense(info);
162
+ return { ok: true, info };
163
+ }
164
+ }
165
+ // ── Usage tracking ─────────────────────────────────────────────
166
+ function getUsageSummary() {
167
+ const usage = loadUsage();
168
+ const info = loadLicense();
169
+ const max = info.maxReqPerDay === 99999 ? '∞' : String(info.maxReqPerDay);
170
+ return `${usage.requests}/${max} requests today`;
133
171
  }
134
- function trackUsage(agentsSpawned = 1) {
172
+ function trackUsage(agentCount) {
135
173
  const { valid, reason, info } = validateLicense();
136
174
  if (!valid)
137
175
  return { allowed: false, reason };
138
176
  const usage = loadUsage();
139
- if (usage.requests >= info.maxReqPerDay) {
177
+ if (info.maxReqPerDay !== 99999 && usage.requests >= info.maxReqPerDay) {
140
178
  return {
141
179
  allowed: false,
142
- reason: `Daily limit reached (${info.maxReqPerDay} req/day). Upgrade to Pro for unlimited.`,
180
+ reason: `Daily limit reached (${info.maxReqPerDay} req/day). Upgrade to Pro: dlnk license --activate <key>`
143
181
  };
144
182
  }
145
- if (agentsSpawned > info.maxAgents) {
183
+ if (agentCount > info.maxAgents) {
146
184
  return {
147
185
  allowed: false,
148
- reason: `Agent limit exceeded (max ${info.maxAgents} agents). Upgrade to Pro for 12 agents.`,
186
+ reason: `Your tier allows max ${info.maxAgents} agents. Upgrade to Pro for all 12.`
149
187
  };
150
188
  }
151
189
  // Increment
152
190
  usage.requests += 1;
153
- usage.agentsUsed = Math.max(usage.agentsUsed, agentsSpawned);
154
- if (!fs_1.default.existsSync(CONFIG_DIR))
155
- fs_1.default.mkdirSync(CONFIG_DIR, { recursive: true });
156
- fs_1.default.writeFileSync(USAGE_FILE, JSON.stringify(usage, null, 2));
191
+ saveUsage(usage);
157
192
  return { allowed: true };
158
193
  }
159
- function getUsageSummary() {
160
- const usage = loadUsage();
161
- const { info } = validateLicense();
162
- const remaining = info.maxReqPerDay === 99999 ? '∞' : String(info.maxReqPerDay - usage.requests);
163
- return `${usage.requests}/${info.maxReqPerDay === 99999 ? '' : info.maxReqPerDay} req today | ${remaining} remaining`;
194
+ function loadUsage() {
195
+ const today = new Date().toISOString().slice(0, 10);
196
+ try {
197
+ if (fs.existsSync(USAGE_FILE)) {
198
+ const u = JSON.parse(fs.readFileSync(USAGE_FILE, 'utf-8'));
199
+ if (u.date === today)
200
+ return u;
201
+ }
202
+ }
203
+ catch { }
204
+ return { date: today, requests: 0 };
205
+ }
206
+ function saveUsage(u) {
207
+ if (!fs.existsSync(CONFIG_DIR))
208
+ fs.mkdirSync(CONFIG_DIR, { recursive: true });
209
+ fs.writeFileSync(USAGE_FILE, JSON.stringify(u, null, 2));
210
+ }
211
+ // ── Deprecated exports kept for compatibility ──────────────────
212
+ function generateLicenseKey(tier) {
213
+ const prefix = tier === 'enterprise' ? 'ENT' : tier === 'pro' ? 'PRO' : 'FREE';
214
+ const random = crypto.randomBytes(8).toString('hex').toUpperCase();
215
+ const payload = `${prefix}-${random}`;
216
+ const sig = crypto.createHmac('sha256', HMAC_SECRET)
217
+ .update(payload).digest('hex').slice(0, 8).toUpperCase();
218
+ return `DLNK-${payload}-${sig}`;
219
+ }
220
+ // ── HTTP helper ────────────────────────────────────────────────
221
+ async function fetchJSON(url, opts = {}) {
222
+ const fetch = (await Promise.resolve().then(() => __importStar(require('node-fetch')))).default;
223
+ const res = await fetch(url, {
224
+ ...opts,
225
+ headers: { 'Content-Type': 'application/json', ...(opts.headers || {}) },
226
+ timeout: 10000,
227
+ });
228
+ return res.json();
164
229
  }
165
230
  //# sourceMappingURL=license.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"license.js","sourceRoot":"","sources":["../src/license.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"license.js","sourceRoot":"","sources":["../src/license.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmEA,kCAOC;AAQD,0CAkBC;AAGD,0CAkDC;AAGD,0CAKC;AAED,gCAwBC;AAmBD,gDAOC;AArND,uCAAyB;AACzB,2CAA6B;AAC7B,uCAAyB;AACzB,+CAAiC;AAEjC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,OAAO,CAAC,CAAC;AACpD,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;AAC3D,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;AAEvD,MAAM,cAAc,GAAG,yCAAyC,CAAC;AACjE,MAAM,WAAW,GAAG,uCAAuC,CAAC,CAAC,iBAAiB;AAqB9E,kEAAkE;AAClE,SAAS,cAAc;IACrB,OAAO;QACL,GAAG,EAAE,OAAO;QACZ,IAAI,EAAE,OAAO;QACb,SAAS,EAAE,CAAC;QACZ,YAAY,EAAE,EAAE;QAChB,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE;QACvB,OAAO,EAAE,KAAK;KACf,CAAC;AACJ,CAAC;AAED,kEAAkE;AAClE,SAAS,WAAW;IAClB,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;IAClD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,MAAM,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAClD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC;YAAE,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC9E,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAC7B,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;AACjD,CAAC;AAED,kEAAkE;AAClE,SAAS,gBAAgB,CAAC,GAAW;IACnC,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC7B,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,MAAM;QAAE,OAAO,KAAK,CAAC;IAC1D,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACvC,MAAM,OAAO,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC7C,MAAM,QAAQ,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,WAAW,CAAC;SACtD,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IAC3D,OAAO,MAAM,KAAK,QAAQ,CAAC;AAC7B,CAAC;AAED,kEAAkE;AAClE,SAAgB,WAAW;IACzB,IAAI,CAAC;QACH,IAAI,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YAChC,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IACV,OAAO,cAAc,EAAE,CAAC;AAC1B,CAAC;AAED,SAAS,WAAW,CAAC,IAAiB;IACpC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9E,EAAE,CAAC,aAAa,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAChE,CAAC;AAED,kEAAkE;AAClE,SAAgB,eAAe;IAC7B,MAAM,IAAI,GAAG,WAAW,EAAE,CAAC;IAE3B,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC1B,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAC/B,CAAC;IAED,6BAA6B;IAC7B,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAChC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,oBAAoB,EAAE,IAAI,EAAE,CAAC;IAC9D,CAAC;IAED,SAAS;IACT,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;QAClD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC;IAC3D,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAC/B,CAAC;AAED,kEAAkE;AAC3D,KAAK,UAAU,eAAe,CAAC,GAAW;IAC/C,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3B,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,mDAAmD,EAAE,CAAC;IACnF,CAAC;IAED,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;QAC/B,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,GAAG,cAAc,WAAW,EAAE;YACxD,MAAM,EAAE,MAAM;YACd,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;SACxC,CAAC,CAAC;QAEH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;YACZ,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,IAAI,mBAAmB,EAAE,CAAC;QAChE,CAAC;QAED,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,GAAG,CAAC;QACjC,MAAM,WAAW,GAAgB;YAC/B,GAAG;YACH,IAAI,EAAE,UAAU,CAAC,IAAI;YACrB,KAAK,EAAE,UAAU,CAAC,KAAK;YACvB,SAAS,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,SAAS;YACtF,SAAS,EAAE,UAAU,CAAC,SAAS;YAC/B,YAAY,EAAE,UAAU,CAAC,YAAY;YACrC,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE;YACvB,aAAa,EAAE,IAAI,CAAC,GAAG,EAAE;YACzB,OAAO,EAAE,KAAK;SACf,CAAC;QAEF,WAAW,CAAC,WAAW,CAAC,CAAC;QACzB,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC;IACzC,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,8DAA8D;QAC9D,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,MAAM,CAAC;QAC3F,MAAM,OAAO,GAAyC;YACpD,GAAG,EAAS,EAAE,SAAS,EAAE,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE;YAClD,UAAU,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE;YAClD,IAAI,EAAQ,EAAE,SAAS,EAAE,CAAC,EAAG,YAAY,EAAE,EAAE,EAAE;SAChD,CAAC;QACF,MAAM,IAAI,GAAgB;YACxB,GAAG;YACH,IAAI,EAAE,IAAmB;YACzB,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,SAAS,IAAI,CAAC;YACxC,YAAY,EAAE,OAAO,CAAC,IAAI,CAAC,EAAE,YAAY,IAAI,EAAE;YAC/C,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE;YACvB,OAAO,EAAE,IAAI;SACd,CAAC;QACF,WAAW,CAAC,IAAI,CAAC,CAAC;QAClB,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;IAC5B,CAAC;AACH,CAAC;AAED,kEAAkE;AAClE,SAAgB,eAAe;IAC7B,MAAM,KAAK,GAAG,SAAS,EAAE,CAAC;IAC1B,MAAM,IAAI,GAAG,WAAW,EAAE,CAAC;IAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,KAAK,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC1E,OAAO,GAAG,KAAK,CAAC,QAAQ,IAAI,GAAG,iBAAiB,CAAC;AACnD,CAAC;AAED,SAAgB,UAAU,CAAC,UAAkB;IAC3C,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,eAAe,EAAE,CAAC;IAClD,IAAI,CAAC,KAAK;QAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IAE9C,MAAM,KAAK,GAAG,SAAS,EAAE,CAAC;IAE1B,IAAI,IAAI,CAAC,YAAY,KAAK,KAAK,IAAI,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;QACvE,OAAO;YACL,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,wBAAwB,IAAI,CAAC,YAAY,0DAA0D;SAC5G,CAAC;IACJ,CAAC;IAED,IAAI,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC;QAChC,OAAO;YACL,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,wBAAwB,IAAI,CAAC,SAAS,qCAAqC;SACpF,CAAC;IACJ,CAAC;IAED,YAAY;IACZ,KAAK,CAAC,QAAQ,IAAI,CAAC,CAAC;IACpB,SAAS,CAAC,KAAK,CAAC,CAAC;IACjB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC3B,CAAC;AAED,SAAS,SAAS;IAChB,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACpD,IAAI,CAAC;QACH,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC9B,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC;YAC3D,IAAI,CAAC,CAAC,IAAI,KAAK,KAAK;gBAAE,OAAO,CAAC,CAAC;QACjC,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IACV,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAC;AACtC,CAAC;AAED,SAAS,SAAS,CAAC,CAAY;IAC7B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9E,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED,kEAAkE;AAClE,SAAgB,kBAAkB,CAAC,IAAY;IAC7C,MAAM,MAAM,GAAG,IAAI,KAAK,YAAY,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;IAC/E,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;IACnE,MAAM,OAAO,GAAG,GAAG,MAAM,IAAI,MAAM,EAAE,CAAC;IACtC,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,WAAW,CAAC;SACjD,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IAC3D,OAAO,QAAQ,OAAO,IAAI,GAAG,EAAE,CAAC;AAClC,CAAC;AAED,kEAAkE;AAClE,KAAK,UAAU,SAAS,CAAC,GAAW,EAAE,OAAoB,EAAE;IAC1D,MAAM,KAAK,GAAG,CAAC,wDAAa,YAAY,GAAC,CAAC,CAAC,OAAO,CAAC;IACnD,MAAM,GAAG,GAAG,MAAO,KAAa,CAAC,GAAG,EAAE;QACpC,GAAG,IAAI;QACP,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE,GAAG,CAAC,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,EAAE;QACxE,OAAO,EAAE,KAAK;KACf,CAAC,CAAC;IACH,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;AACpB,CAAC"}
package/dist/mcp.d.ts ADDED
@@ -0,0 +1,31 @@
1
+ export interface MCPServer {
2
+ name: string;
3
+ description: string;
4
+ command: string;
5
+ args?: string[];
6
+ env?: Record<string, string>;
7
+ enabled: boolean;
8
+ }
9
+ export interface MCPTool {
10
+ name: string;
11
+ description: string;
12
+ serverId: string;
13
+ inputSchema: Record<string, any>;
14
+ }
15
+ export interface MCPCallResult {
16
+ success: boolean;
17
+ output: string;
18
+ error?: string;
19
+ }
20
+ export declare const BUILTIN_MCP_SERVERS: MCPServer[];
21
+ export interface MCPConfig {
22
+ servers: Record<string, MCPServer>;
23
+ }
24
+ export declare function loadMCPConfig(): MCPConfig;
25
+ export declare function saveMCPConfig(config: MCPConfig): void;
26
+ export declare function addMCPServer(server: MCPServer): void;
27
+ export declare function removeMCPServer(name: string): void;
28
+ export declare function listMCPServers(): MCPServer[];
29
+ export declare function getMCPToolsSystemPrompt(servers: MCPServer[]): string;
30
+ export declare function callMCPTool(server: MCPServer, toolName: string, args: Record<string, unknown>): Promise<MCPCallResult>;
31
+ //# sourceMappingURL=mcp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAGD,eAAO,MAAM,mBAAmB,EAAE,SAAS,EAgC1C,CAAC;AAKF,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;CACpC;AAED,wBAAgB,aAAa,IAAI,SAAS,CAOzC;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAIrD;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAIpD;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAIlD;AAED,wBAAgB,cAAc,IAAI,SAAS,EAAE,CAU5C;AAID,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,SAAS,EAAE,GAAG,MAAM,CASpE;AAGD,wBAAsB,WAAW,CAC/B,MAAM,EAAE,SAAS,EACjB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,OAAO,CAAC,aAAa,CAAC,CA6BxB"}
package/dist/mcp.js ADDED
@@ -0,0 +1,159 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.BUILTIN_MCP_SERVERS = void 0;
37
+ exports.loadMCPConfig = loadMCPConfig;
38
+ exports.saveMCPConfig = saveMCPConfig;
39
+ exports.addMCPServer = addMCPServer;
40
+ exports.removeMCPServer = removeMCPServer;
41
+ exports.listMCPServers = listMCPServers;
42
+ exports.getMCPToolsSystemPrompt = getMCPToolsSystemPrompt;
43
+ exports.callMCPTool = callMCPTool;
44
+ const fs = __importStar(require("fs"));
45
+ const path = __importStar(require("path"));
46
+ const os = __importStar(require("os"));
47
+ const child_process_1 = require("child_process");
48
+ // ── Built-in MCP Server configs ────────────────────────────────
49
+ exports.BUILTIN_MCP_SERVERS = [
50
+ {
51
+ name: 'filesystem',
52
+ description: 'Extended file system operations via MCP',
53
+ command: 'npx',
54
+ args: ['-y', '@modelcontextprotocol/server-filesystem', process.cwd()],
55
+ enabled: false,
56
+ },
57
+ {
58
+ name: 'github',
59
+ description: 'GitHub API — repos, issues, PRs',
60
+ command: 'npx',
61
+ args: ['-y', '@modelcontextprotocol/server-github'],
62
+ env: { GITHUB_PERSONAL_ACCESS_TOKEN: '' },
63
+ enabled: false,
64
+ },
65
+ {
66
+ name: 'brave-search',
67
+ description: 'Web search via Brave Search API',
68
+ command: 'npx',
69
+ args: ['-y', '@modelcontextprotocol/server-brave-search'],
70
+ env: { BRAVE_API_KEY: '' },
71
+ enabled: false,
72
+ },
73
+ {
74
+ name: 'postgres',
75
+ description: 'PostgreSQL database queries',
76
+ command: 'npx',
77
+ args: ['-y', '@modelcontextprotocol/server-postgres'],
78
+ env: { POSTGRES_CONNECTION_STRING: '' },
79
+ enabled: false,
80
+ },
81
+ ];
82
+ // ── MCP Config Manager ─────────────────────────────────────────
83
+ const MCP_CONFIG_FILE = path.join(os.homedir(), '.dlnk', 'mcp.json');
84
+ function loadMCPConfig() {
85
+ try {
86
+ if (fs.existsSync(MCP_CONFIG_FILE)) {
87
+ return JSON.parse(fs.readFileSync(MCP_CONFIG_FILE, 'utf-8'));
88
+ }
89
+ }
90
+ catch { }
91
+ return { servers: {} };
92
+ }
93
+ function saveMCPConfig(config) {
94
+ const dir = path.dirname(MCP_CONFIG_FILE);
95
+ if (!fs.existsSync(dir))
96
+ fs.mkdirSync(dir, { recursive: true });
97
+ fs.writeFileSync(MCP_CONFIG_FILE, JSON.stringify(config, null, 2));
98
+ }
99
+ function addMCPServer(server) {
100
+ const config = loadMCPConfig();
101
+ config.servers[server.name] = server;
102
+ saveMCPConfig(config);
103
+ }
104
+ function removeMCPServer(name) {
105
+ const config = loadMCPConfig();
106
+ delete config.servers[name];
107
+ saveMCPConfig(config);
108
+ }
109
+ function listMCPServers() {
110
+ const config = loadMCPConfig();
111
+ const custom = Object.values(config.servers);
112
+ const builtins = exports.BUILTIN_MCP_SERVERS.map(s => ({
113
+ ...s,
114
+ ...(config.servers[s.name] || {}),
115
+ }));
116
+ const customNames = new Set(builtins.map(s => s.name));
117
+ const extraCustom = custom.filter(s => !customNames.has(s.name));
118
+ return [...builtins, ...extraCustom];
119
+ }
120
+ // ── MCP Tool Adapter ───────────────────────────────────────────
121
+ // Converts MCP server tools into dlnk tool format for ReAct engine
122
+ function getMCPToolsSystemPrompt(servers) {
123
+ const enabled = servers.filter(s => s.enabled);
124
+ if (enabled.length === 0)
125
+ return '';
126
+ const lines = enabled.map(s => `- ${s.name}: ${s.description} (MCP server)`).join('\n');
127
+ return `\n\n## MCP Servers (external tools)\n${lines}\nTo call an MCP tool:\n\`\`\`tool\n{"tool": "mcp_call", "params": {"server": "name", "tool": "tool_name", "arguments": {}}}\n\`\`\``;
128
+ }
129
+ // ── Simple MCP stdio runner (no full MCP SDK needed) ──────────
130
+ async function callMCPTool(server, toolName, args) {
131
+ try {
132
+ const cmd = `${server.command} ${(server.args || []).join(' ')}`;
133
+ const input = JSON.stringify({
134
+ jsonrpc: '2.0',
135
+ id: 1,
136
+ method: 'tools/call',
137
+ params: { name: toolName, arguments: args }
138
+ });
139
+ const env = { ...process.env, ...(server.env || {}) };
140
+ const result = (0, child_process_1.execSync)(`echo '${input}' | ${cmd}`, {
141
+ env,
142
+ encoding: 'utf-8',
143
+ timeout: 30000,
144
+ });
145
+ const parsed = JSON.parse(result.trim().split('\n').pop() || '{}');
146
+ if (parsed.result) {
147
+ const content = parsed.result.content?.[0]?.text || JSON.stringify(parsed.result);
148
+ return { success: true, output: content };
149
+ }
150
+ if (parsed.error) {
151
+ return { success: false, output: '', error: parsed.error.message };
152
+ }
153
+ return { success: true, output: result.trim() };
154
+ }
155
+ catch (e) {
156
+ return { success: false, output: '', error: e.message };
157
+ }
158
+ }
159
+ //# sourceMappingURL=mcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../src/mcp.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsEA,sCAOC;AAED,sCAIC;AAED,oCAIC;AAED,0CAIC;AAED,wCAUC;AAID,0DASC;AAGD,kCAiCC;AA5JD,uCAAyB;AACzB,2CAA6B;AAC7B,uCAAyB;AACzB,iDAAyC;AAyBzC,kEAAkE;AACrD,QAAA,mBAAmB,GAAgB;IAC9C;QACE,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,yCAAyC;QACtD,OAAO,EAAE,KAAK;QACd,IAAI,EAAE,CAAC,IAAI,EAAE,yCAAyC,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;QACtE,OAAO,EAAE,KAAK;KACf;IACD;QACE,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,iCAAiC;QAC9C,OAAO,EAAE,KAAK;QACd,IAAI,EAAE,CAAC,IAAI,EAAE,qCAAqC,CAAC;QACnD,GAAG,EAAE,EAAE,4BAA4B,EAAE,EAAE,EAAE;QACzC,OAAO,EAAE,KAAK;KACf;IACD;QACE,IAAI,EAAE,cAAc;QACpB,WAAW,EAAE,iCAAiC;QAC9C,OAAO,EAAE,KAAK;QACd,IAAI,EAAE,CAAC,IAAI,EAAE,2CAA2C,CAAC;QACzD,GAAG,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE;QAC1B,OAAO,EAAE,KAAK;KACf;IACD;QACE,IAAI,EAAE,UAAU;QAChB,WAAW,EAAE,6BAA6B;QAC1C,OAAO,EAAE,KAAK;QACd,IAAI,EAAE,CAAC,IAAI,EAAE,uCAAuC,CAAC;QACrD,GAAG,EAAE,EAAE,0BAA0B,EAAE,EAAE,EAAE;QACvC,OAAO,EAAE,KAAK;KACf;CACF,CAAC;AAEF,kEAAkE;AAClE,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC;AAMrE,SAAgB,aAAa;IAC3B,IAAI,CAAC;QACH,IAAI,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC,EAAE,CAAC;YACnC,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC;QAC/D,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAA,CAAC;IACV,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;AACzB,CAAC;AAED,SAAgB,aAAa,CAAC,MAAiB;IAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC;IAC1C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAChE,EAAE,CAAC,aAAa,CAAC,eAAe,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AACrE,CAAC;AAED,SAAgB,YAAY,CAAC,MAAiB;IAC5C,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;IAC/B,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC;IACrC,aAAa,CAAC,MAAM,CAAC,CAAC;AACxB,CAAC;AAED,SAAgB,eAAe,CAAC,IAAY;IAC1C,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;IAC/B,OAAO,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5B,aAAa,CAAC,MAAM,CAAC,CAAC;AACxB,CAAC;AAED,SAAgB,cAAc;IAC5B,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;IAC/B,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC7C,MAAM,QAAQ,GAAG,2BAAmB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAC7C,GAAG,CAAC;QACJ,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;KAClC,CAAC,CAAC,CAAC;IACJ,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACvD,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACjE,OAAO,CAAC,GAAG,QAAQ,EAAE,GAAG,WAAW,CAAC,CAAC;AACvC,CAAC;AAED,kEAAkE;AAClE,mEAAmE;AACnE,SAAgB,uBAAuB,CAAC,OAAoB;IAC1D,MAAM,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAC/C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEpC,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAC5B,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,WAAW,eAAe,CAC7C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,OAAO,wCAAwC,KAAK,sIAAsI,CAAC;AAC7L,CAAC;AAED,iEAAiE;AAC1D,KAAK,UAAU,WAAW,CAC/B,MAAiB,EACjB,QAAgB,EAChB,IAA6B;IAE7B,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,GAAG,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACjE,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC;YAC3B,OAAO,EAAE,KAAK;YACd,EAAE,EAAE,CAAC;YACL,MAAM,EAAE,YAAY;YACpB,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,EAAE;SAC5C,CAAC,CAAC;QAEH,MAAM,GAAG,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,CAAC;QACtD,MAAM,MAAM,GAAG,IAAA,wBAAQ,EAAC,SAAS,KAAK,OAAO,GAAG,EAAE,EAAE;YAClD,GAAG;YACH,QAAQ,EAAE,OAAO;YACjB,OAAO,EAAE,KAAK;SACf,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,CAAC;QACnE,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAClB,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAClF,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;QAC5C,CAAC;QACD,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;QACrE,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;IAClD,CAAC;IAAC,OAAO,CAAM,EAAE,CAAC;QAChB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC;IAC1D,CAAC;AACH,CAAC"}
@@ -0,0 +1,37 @@
1
+ import { AgentResult } from './engine.js';
2
+ import { MemoryManager } from './memory.js';
3
+ export interface SubAgentDef {
4
+ id: string;
5
+ name: string;
6
+ role: string;
7
+ emoji: string;
8
+ systemContext?: string;
9
+ }
10
+ export declare const SUB_AGENTS: Record<string, SubAgentDef>;
11
+ export interface OrchestratorResult {
12
+ plan: string;
13
+ agentResults: {
14
+ agentId: string;
15
+ task: string;
16
+ result: AgentResult;
17
+ }[];
18
+ summary: string;
19
+ }
20
+ export declare function runPipeline(masterTask: string, agentIds: string[], options?: {
21
+ cwd?: string;
22
+ onAgentStart?: (agent: SubAgentDef, task: string) => void;
23
+ onStep?: (agentId: string, stepType: string, content: string) => void;
24
+ sharedMemory?: MemoryManager;
25
+ }): Promise<OrchestratorResult>;
26
+ export declare function runSwarm(tasks: {
27
+ agentId: string;
28
+ task: string;
29
+ }[], options?: {
30
+ cwd?: string;
31
+ onStep?: (agentId: string, stepType: string, content: string) => void;
32
+ }): Promise<{
33
+ agentId: string;
34
+ task: string;
35
+ result: AgentResult;
36
+ }[]>;
37
+ //# sourceMappingURL=subagent.d.ts.map