aimeat 1.9.2 → 1.9.3
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/bin/aimeat.js +0 -0
- package/dist/public/views/profile/agents-tab.js +10 -10
- package/dist/src/cli/connect/api-client.d.ts +24 -0
- package/dist/src/cli/connect/api-client.d.ts.map +1 -0
- package/dist/src/cli/connect/api-client.js +70 -0
- package/dist/src/cli/connect/api-client.js.map +1 -0
- package/dist/src/cli/connect/auth.d.ts +8 -0
- package/dist/src/cli/connect/auth.d.ts.map +1 -0
- package/dist/src/cli/connect/auth.js +97 -0
- package/dist/src/cli/connect/auth.js.map +1 -0
- package/dist/src/cli/connect/config.d.ts +15 -0
- package/dist/src/cli/connect/config.d.ts.map +1 -0
- package/dist/src/cli/connect/config.js +23 -0
- package/dist/src/cli/connect/config.js.map +1 -0
- package/dist/src/cli/connect/docs.d.ts +2 -0
- package/dist/src/cli/connect/docs.d.ts.map +1 -0
- package/dist/src/cli/connect/docs.js +36 -0
- package/dist/src/cli/connect/docs.js.map +1 -0
- package/dist/src/cli/connect/inbox.d.ts +2 -0
- package/dist/src/cli/connect/inbox.d.ts.map +1 -0
- package/dist/src/cli/connect/inbox.js +20 -0
- package/dist/src/cli/connect/inbox.js.map +1 -0
- package/dist/src/cli/connect/keychain.d.ts +4 -0
- package/dist/src/cli/connect/keychain.d.ts.map +1 -0
- package/dist/src/cli/connect/keychain.js +31 -0
- package/dist/src/cli/connect/keychain.js.map +1 -0
- package/dist/src/cli/connect/mcp/poller.d.ts +8 -0
- package/dist/src/cli/connect/mcp/poller.d.ts.map +1 -0
- package/dist/src/cli/connect/mcp/poller.js +34 -0
- package/dist/src/cli/connect/mcp/poller.js.map +1 -0
- package/dist/src/cli/connect/mcp/resources.d.ts +8 -0
- package/dist/src/cli/connect/mcp/resources.d.ts.map +1 -0
- package/dist/src/cli/connect/mcp/resources.js +25 -0
- package/dist/src/cli/connect/mcp/resources.js.map +1 -0
- package/dist/src/cli/connect/mcp/server.d.ts +2 -0
- package/dist/src/cli/connect/mcp/server.d.ts.map +1 -0
- package/dist/src/cli/connect/mcp/server.js +30 -0
- package/dist/src/cli/connect/mcp/server.js.map +1 -0
- package/dist/src/cli/connect/mcp/tools/agent-caps.d.ts +9 -0
- package/dist/src/cli/connect/mcp/tools/agent-caps.d.ts.map +1 -0
- package/dist/src/cli/connect/mcp/tools/agent-caps.js +27 -0
- package/dist/src/cli/connect/mcp/tools/agent-caps.js.map +1 -0
- package/dist/src/cli/connect/mcp/tools/agent-messages.d.ts +9 -0
- package/dist/src/cli/connect/mcp/tools/agent-messages.d.ts.map +1 -0
- package/dist/src/cli/connect/mcp/tools/agent-messages.js +20 -0
- package/dist/src/cli/connect/mcp/tools/agent-messages.js.map +1 -0
- package/dist/src/cli/connect/mcp/tools/agent-tasks.d.ts +9 -0
- package/dist/src/cli/connect/mcp/tools/agent-tasks.d.ts.map +1 -0
- package/dist/src/cli/connect/mcp/tools/agent-tasks.js +57 -0
- package/dist/src/cli/connect/mcp/tools/agent-tasks.js.map +1 -0
- package/dist/src/cli/connect/mcp/tools/apps.d.ts +9 -0
- package/dist/src/cli/connect/mcp/tools/apps.d.ts.map +1 -0
- package/dist/src/cli/connect/mcp/tools/apps.js +38 -0
- package/dist/src/cli/connect/mcp/tools/apps.js.map +1 -0
- package/dist/src/cli/connect/mcp/tools/boards.d.ts +9 -0
- package/dist/src/cli/connect/mcp/tools/boards.d.ts.map +1 -0
- package/dist/src/cli/connect/mcp/tools/boards.js +56 -0
- package/dist/src/cli/connect/mcp/tools/boards.js.map +1 -0
- package/dist/src/cli/connect/mcp/tools/capabilities.d.ts +8 -0
- package/dist/src/cli/connect/mcp/tools/capabilities.d.ts.map +1 -0
- package/dist/src/cli/connect/mcp/tools/capabilities.js +57 -0
- package/dist/src/cli/connect/mcp/tools/capabilities.js.map +1 -0
- package/dist/src/cli/connect/mcp/tools/catalogue.d.ts +9 -0
- package/dist/src/cli/connect/mcp/tools/catalogue.d.ts.map +1 -0
- package/dist/src/cli/connect/mcp/tools/catalogue.js +22 -0
- package/dist/src/cli/connect/mcp/tools/catalogue.js.map +1 -0
- package/dist/src/cli/connect/mcp/tools/consent.d.ts +9 -0
- package/dist/src/cli/connect/mcp/tools/consent.d.ts.map +1 -0
- package/dist/src/cli/connect/mcp/tools/consent.js +25 -0
- package/dist/src/cli/connect/mcp/tools/consent.js.map +1 -0
- package/dist/src/cli/connect/mcp/tools/core.d.ts +10 -0
- package/dist/src/cli/connect/mcp/tools/core.d.ts.map +1 -0
- package/dist/src/cli/connect/mcp/tools/core.js +138 -0
- package/dist/src/cli/connect/mcp/tools/core.js.map +1 -0
- package/dist/src/cli/connect/mcp/tools/cortex.d.ts +9 -0
- package/dist/src/cli/connect/mcp/tools/cortex.d.ts.map +1 -0
- package/dist/src/cli/connect/mcp/tools/cortex.js +33 -0
- package/dist/src/cli/connect/mcp/tools/cortex.js.map +1 -0
- package/dist/src/cli/connect/mcp/tools/extensions.d.ts +9 -0
- package/dist/src/cli/connect/mcp/tools/extensions.d.ts.map +1 -0
- package/dist/src/cli/connect/mcp/tools/extensions.js +47 -0
- package/dist/src/cli/connect/mcp/tools/extensions.js.map +1 -0
- package/dist/src/cli/connect/mcp/tools/flags.d.ts +8 -0
- package/dist/src/cli/connect/mcp/tools/flags.d.ts.map +1 -0
- package/dist/src/cli/connect/mcp/tools/flags.js +12 -0
- package/dist/src/cli/connect/mcp/tools/flags.js.map +1 -0
- package/dist/src/cli/connect/mcp/tools/groups.d.ts +9 -0
- package/dist/src/cli/connect/mcp/tools/groups.d.ts.map +1 -0
- package/dist/src/cli/connect/mcp/tools/groups.js +42 -0
- package/dist/src/cli/connect/mcp/tools/groups.js.map +1 -0
- package/dist/src/cli/connect/mcp/tools/handbook.d.ts +9 -0
- package/dist/src/cli/connect/mcp/tools/handbook.d.ts.map +1 -0
- package/dist/src/cli/connect/mcp/tools/handbook.js +13 -0
- package/dist/src/cli/connect/mcp/tools/handbook.js.map +1 -0
- package/dist/src/cli/connect/mcp/tools/index.d.ts +10 -0
- package/dist/src/cli/connect/mcp/tools/index.d.ts.map +1 -0
- package/dist/src/cli/connect/mcp/tools/index.js +41 -0
- package/dist/src/cli/connect/mcp/tools/index.js.map +1 -0
- package/dist/src/cli/connect/mcp/tools/instances.d.ts +9 -0
- package/dist/src/cli/connect/mcp/tools/instances.d.ts.map +1 -0
- package/dist/src/cli/connect/mcp/tools/instances.js +24 -0
- package/dist/src/cli/connect/mcp/tools/instances.js.map +1 -0
- package/dist/src/cli/connect/mcp/tools/knowledge.d.ts +9 -0
- package/dist/src/cli/connect/mcp/tools/knowledge.d.ts.map +1 -0
- package/dist/src/cli/connect/mcp/tools/knowledge.js +28 -0
- package/dist/src/cli/connect/mcp/tools/knowledge.js.map +1 -0
- package/dist/src/cli/connect/mcp/tools/memory-ext.d.ts +9 -0
- package/dist/src/cli/connect/mcp/tools/memory-ext.d.ts.map +1 -0
- package/dist/src/cli/connect/mcp/tools/memory-ext.js +11 -0
- package/dist/src/cli/connect/mcp/tools/memory-ext.js.map +1 -0
- package/dist/src/cli/connect/mcp/tools/organisms.d.ts +9 -0
- package/dist/src/cli/connect/mcp/tools/organisms.d.ts.map +1 -0
- package/dist/src/cli/connect/mcp/tools/organisms.js +32 -0
- package/dist/src/cli/connect/mcp/tools/organisms.js.map +1 -0
- package/dist/src/cli/connect/mcp/tools/wallet-ext.d.ts +8 -0
- package/dist/src/cli/connect/mcp/tools/wallet-ext.d.ts.map +1 -0
- package/dist/src/cli/connect/mcp/tools/wallet-ext.js +11 -0
- package/dist/src/cli/connect/mcp/tools/wallet-ext.js.map +1 -0
- package/dist/src/cli/connect/mcp/wakeup.d.ts +3 -0
- package/dist/src/cli/connect/mcp/wakeup.d.ts.map +1 -0
- package/dist/src/cli/connect/mcp/wakeup.js +59 -0
- package/dist/src/cli/connect/mcp/wakeup.js.map +1 -0
- package/dist/src/cli/connect/send.d.ts +2 -0
- package/dist/src/cli/connect/send.d.ts.map +1 -0
- package/dist/src/cli/connect/send.js +24 -0
- package/dist/src/cli/connect/send.js.map +1 -0
- package/dist/src/cli/connect/skill-bundle.d.ts +3 -0
- package/dist/src/cli/connect/skill-bundle.d.ts.map +1 -0
- package/dist/src/cli/connect/skill-bundle.js +25 -0
- package/dist/src/cli/connect/skill-bundle.js.map +1 -0
- package/dist/src/cli/connect/status.d.ts +2 -0
- package/dist/src/cli/connect/status.d.ts.map +1 -0
- package/dist/src/cli/connect/status.js +30 -0
- package/dist/src/cli/connect/status.js.map +1 -0
- package/dist/src/cli/connect/tasks.d.ts +2 -0
- package/dist/src/cli/connect/tasks.d.ts.map +1 -0
- package/dist/src/cli/connect/tasks.js +22 -0
- package/dist/src/cli/connect/tasks.js.map +1 -0
- package/dist/src/index.js +86 -0
- package/dist/src/index.js.map +1 -1
- package/package.json +77 -97
package/dist/bin/aimeat.js
CHANGED
|
File without changes
|
|
@@ -111,17 +111,17 @@ const PLATFORMS = {
|
|
|
111
111
|
<p>Windows requires WSL2. Open PowerShell as Admin:</p>
|
|
112
112
|
<ol><li>Install WSL2: <code>wsl --install</code> (restart if prompted)</li>
|
|
113
113
|
<li>In WSL2: <code>curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash - && sudo apt-get install -y nodejs</code></li>
|
|
114
|
-
<li>Run: <code>npx
|
|
114
|
+
<li>Run: <code>npx aimeat connect</code> and follow the prompts</li></ol>
|
|
115
115
|
<h4>Compatible Agent Runtimes</h4>
|
|
116
116
|
<p><a href="https://openclaw.ai" target="_blank">OpenClaw</a>, Claude Code, Hermes, or any MCP-capable tool.</p>`,
|
|
117
117
|
mac: `<h4>Install Node.js</h4>
|
|
118
118
|
<ol><li><code>brew install node</code></li>
|
|
119
|
-
<li>Run: <code>npx
|
|
119
|
+
<li>Run: <code>npx aimeat connect</code> and follow the prompts</li></ol>
|
|
120
120
|
<h4>Compatible Agent Runtimes</h4>
|
|
121
121
|
<p><a href="https://openclaw.ai" target="_blank">OpenClaw</a>, Claude Code, Hermes, or any MCP-capable tool.</p>`,
|
|
122
122
|
linux: `<h4>Install Node.js</h4>
|
|
123
123
|
<ol><li><code>curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash - && sudo apt-get install -y nodejs</code></li>
|
|
124
|
-
<li>Run: <code>npx
|
|
124
|
+
<li>Run: <code>npx aimeat connect</code> and follow the prompts</li></ol>
|
|
125
125
|
<h4>Compatible Agent Runtimes</h4>
|
|
126
126
|
<p><a href="https://openclaw.ai" target="_blank">OpenClaw</a>, Claude Code, Hermes, or any MCP-capable tool.</p>`,
|
|
127
127
|
wsl2: `<h4>Setup WSL2 (if not already)</h4>
|
|
@@ -129,16 +129,16 @@ const PLATFORMS = {
|
|
|
129
129
|
<li>Restart and set up your Linux username/password</li></ol>
|
|
130
130
|
<h4>Install Node.js</h4>
|
|
131
131
|
<ol><li><code>curl -fsSL https://deb.nodesource.com/setup_22.x | sudo -E bash - && sudo apt-get install -y nodejs</code></li>
|
|
132
|
-
<li>Run: <code>npx
|
|
132
|
+
<li>Run: <code>npx aimeat connect</code> and follow the prompts</li></ol>`,
|
|
133
133
|
android: `<h4>Termux</h4>
|
|
134
134
|
<ol><li>Install <a href="https://f-droid.org/packages/com.termux/" target="_blank">Termux from F-Droid</a></li>
|
|
135
135
|
<li><code>pkg update && pkg install nodejs</code></li>
|
|
136
|
-
<li>Run: <code>npx
|
|
136
|
+
<li>Run: <code>npx aimeat connect</code> and follow the prompts</li></ol>`,
|
|
137
137
|
aws: `<h4>EC2 Setup</h4>
|
|
138
138
|
<ol><li>Launch an EC2 instance (t3.micro is fine)</li>
|
|
139
139
|
<li>SSH in and install Node.js 22+</li>
|
|
140
|
-
<li>Run: <code>npx
|
|
141
|
-
<li>Then: <code>npx
|
|
140
|
+
<li>Run: <code>npx aimeat connect</code></li>
|
|
141
|
+
<li>Then: <code>npx aimeat connect serve</code> for persistent MCP server</li></ol>`,
|
|
142
142
|
};
|
|
143
143
|
const PLATFORM_KEYS = ['windows','mac','linux','wsl2','android','aws'];
|
|
144
144
|
const PLATFORM_LABELS = { windows:'profile.platforms.windows', mac:'profile.platforms.mac', linux:'profile.platforms.linux', wsl2:'profile.platforms.wsl2', android:'profile.platforms.android', aws:'profile.platforms.aws' };
|
|
@@ -362,16 +362,16 @@ export default function AgentsTab({ session, showToast, onStats }) {
|
|
|
362
362
|
${connectExpanded && html`
|
|
363
363
|
<div class="pf-agd-connect-content">
|
|
364
364
|
<p class="mb-half text-bold">${t('profile.agents.cliInstall')}</p>
|
|
365
|
-
<div class="agent-prompt-box"><code>npx
|
|
365
|
+
<div class="agent-prompt-box"><code>npx aimeat connect \\${'\n'} --url ${getNodeUrl()} \\${'\n'} --owner ${session.owner}</code></div>
|
|
366
366
|
<button class="copy-prompt-btn" onClick=${() => {
|
|
367
|
-
copyToClipboard(`npx
|
|
367
|
+
copyToClipboard(`npx aimeat connect --url ${getNodeUrl()} --owner ${session.owner}`).then(() => {
|
|
368
368
|
setPromptCopied(true);
|
|
369
369
|
setTimeout(() => setPromptCopied(false), 2000);
|
|
370
370
|
});
|
|
371
371
|
}}>${promptCopied ? '\u2705 ' + t('profile.agents.copied') : t('profile.agents.copyPrompt')}</button>
|
|
372
372
|
|
|
373
373
|
<p class="mt-1 mb-half text-bold">${t('profile.agents.cliServe')}</p>
|
|
374
|
-
<div class="agent-prompt-box"><code>npx
|
|
374
|
+
<div class="agent-prompt-box"><code>npx aimeat connect serve</code></div>
|
|
375
375
|
|
|
376
376
|
<p class="mt-1 text-caption">${t('profile.agents.cliDesc')}</p>
|
|
377
377
|
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export interface ApiResponse {
|
|
2
|
+
ok: boolean;
|
|
3
|
+
data?: unknown;
|
|
4
|
+
error?: {
|
|
5
|
+
code: string;
|
|
6
|
+
message: string;
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
export declare class AimeatClient {
|
|
10
|
+
private baseUrl;
|
|
11
|
+
private token;
|
|
12
|
+
constructor(baseUrl: string, token?: string);
|
|
13
|
+
static fromConfig(): Promise<AimeatClient>;
|
|
14
|
+
private headers;
|
|
15
|
+
get(path: string): Promise<ApiResponse>;
|
|
16
|
+
post(path: string, body?: unknown): Promise<ApiResponse>;
|
|
17
|
+
put(path: string, body?: unknown): Promise<ApiResponse>;
|
|
18
|
+
patch(path: string, body?: unknown): Promise<ApiResponse>;
|
|
19
|
+
delete(path: string): Promise<ApiResponse>;
|
|
20
|
+
getBaseUrl(): string;
|
|
21
|
+
getTokenValue(): string | null;
|
|
22
|
+
setToken(t: string): void;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=api-client.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-client.d.ts","sourceRoot":"","sources":["../../../../src/cli/connect/api-client.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,OAAO,CAAC;IACZ,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CAC3C;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,KAAK,CAAuB;gBAExB,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM;WAK9B,UAAU,IAAI,OAAO,CAAC,YAAY,CAAC;IAQhD,OAAO,CAAC,OAAO;IAMT,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAMvC,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC;IAUxD,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC;IAUvD,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC;IAUzD,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAMhD,UAAU,IAAI,MAAM;IACpB,aAAa,IAAI,MAAM,GAAG,IAAI;IAC9B,QAAQ,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI;CAC1B"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file api-client.ts
|
|
3
|
+
* @description HTTP client for AIMEAT node API with automatic auth header injection.
|
|
4
|
+
*/
|
|
5
|
+
import { getToken } from './keychain.js';
|
|
6
|
+
import { loadConfig } from './config.js';
|
|
7
|
+
export class AimeatClient {
|
|
8
|
+
baseUrl;
|
|
9
|
+
token = null;
|
|
10
|
+
constructor(baseUrl, token) {
|
|
11
|
+
this.baseUrl = baseUrl.replace(/\/$/, '');
|
|
12
|
+
this.token = token ?? null;
|
|
13
|
+
}
|
|
14
|
+
static async fromConfig() {
|
|
15
|
+
const config = loadConfig();
|
|
16
|
+
if (!config)
|
|
17
|
+
throw new Error('Not configured. Run: npx @aimeat/connect');
|
|
18
|
+
const token = await getToken(config.agent, config.owner);
|
|
19
|
+
if (!token)
|
|
20
|
+
throw new Error('No stored token. Run: npx @aimeat/connect');
|
|
21
|
+
return new AimeatClient(config.node_url, token);
|
|
22
|
+
}
|
|
23
|
+
headers() {
|
|
24
|
+
const h = { 'Content-Type': 'application/json' };
|
|
25
|
+
if (this.token)
|
|
26
|
+
h['Authorization'] = `Bearer ${this.token}`;
|
|
27
|
+
return h;
|
|
28
|
+
}
|
|
29
|
+
async get(path) {
|
|
30
|
+
const url = path.startsWith('http') ? path : `${this.baseUrl}${path}`;
|
|
31
|
+
const res = await fetch(url, { headers: this.headers() });
|
|
32
|
+
return res.json();
|
|
33
|
+
}
|
|
34
|
+
async post(path, body) {
|
|
35
|
+
const url = path.startsWith('http') ? path : `${this.baseUrl}${path}`;
|
|
36
|
+
const res = await fetch(url, {
|
|
37
|
+
method: 'POST',
|
|
38
|
+
headers: this.headers(),
|
|
39
|
+
body: body ? JSON.stringify(body) : undefined,
|
|
40
|
+
});
|
|
41
|
+
return res.json();
|
|
42
|
+
}
|
|
43
|
+
async put(path, body) {
|
|
44
|
+
const url = path.startsWith('http') ? path : `${this.baseUrl}${path}`;
|
|
45
|
+
const res = await fetch(url, {
|
|
46
|
+
method: 'PUT',
|
|
47
|
+
headers: this.headers(),
|
|
48
|
+
body: body ? JSON.stringify(body) : undefined,
|
|
49
|
+
});
|
|
50
|
+
return res.json();
|
|
51
|
+
}
|
|
52
|
+
async patch(path, body) {
|
|
53
|
+
const url = path.startsWith('http') ? path : `${this.baseUrl}${path}`;
|
|
54
|
+
const res = await fetch(url, {
|
|
55
|
+
method: 'PATCH',
|
|
56
|
+
headers: this.headers(),
|
|
57
|
+
body: body ? JSON.stringify(body) : undefined,
|
|
58
|
+
});
|
|
59
|
+
return res.json();
|
|
60
|
+
}
|
|
61
|
+
async delete(path) {
|
|
62
|
+
const url = path.startsWith('http') ? path : `${this.baseUrl}${path}`;
|
|
63
|
+
const res = await fetch(url, { method: 'DELETE', headers: this.headers() });
|
|
64
|
+
return res.json();
|
|
65
|
+
}
|
|
66
|
+
getBaseUrl() { return this.baseUrl; }
|
|
67
|
+
getTokenValue() { return this.token; }
|
|
68
|
+
setToken(t) { this.token = t; }
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=api-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api-client.js","sourceRoot":"","sources":["../../../../src/cli/connect/api-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../../../src/cli/connect/auth.ts"],"names":[],"mappings":"AAUA,UAAU,QAAQ;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,OAAO,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAmG3D"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file auth.ts
|
|
3
|
+
* @description Device authorization flow for agent registration.
|
|
4
|
+
*/
|
|
5
|
+
import * as p from '@clack/prompts';
|
|
6
|
+
import { AimeatClient } from './api-client.js';
|
|
7
|
+
import { storeToken, getToken } from './keychain.js';
|
|
8
|
+
import { saveConfig, getConfigDir } from './config.js';
|
|
9
|
+
import { downloadSkillBundle } from './skill-bundle.js';
|
|
10
|
+
export async function runAuth(args) {
|
|
11
|
+
p.intro('AIMEAT Agent Connector');
|
|
12
|
+
const nodeUrl = args.url ?? await p.text({ message: 'AIMEAT node URL:', placeholder: 'https://aimeat.io' });
|
|
13
|
+
if (p.isCancel(nodeUrl)) {
|
|
14
|
+
p.cancel('Cancelled.');
|
|
15
|
+
process.exit(0);
|
|
16
|
+
}
|
|
17
|
+
const owner = args.owner ?? await p.text({ message: 'Your owner handle:' });
|
|
18
|
+
if (p.isCancel(owner)) {
|
|
19
|
+
p.cancel('Cancelled.');
|
|
20
|
+
process.exit(0);
|
|
21
|
+
}
|
|
22
|
+
const agentName = args.agent ?? await p.text({ message: 'Agent name:', placeholder: 'claude' });
|
|
23
|
+
if (p.isCancel(agentName)) {
|
|
24
|
+
p.cancel('Cancelled.');
|
|
25
|
+
process.exit(0);
|
|
26
|
+
}
|
|
27
|
+
const client = new AimeatClient(nodeUrl);
|
|
28
|
+
const existingToken = await getToken(agentName, owner);
|
|
29
|
+
if (existingToken) {
|
|
30
|
+
client.setToken(existingToken);
|
|
31
|
+
const check = await client.get('/v1/agents/me/inbox');
|
|
32
|
+
if (check.ok) {
|
|
33
|
+
p.log.success('Already connected! Token is valid.');
|
|
34
|
+
p.outro('Done.');
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
p.log.warn('Stored token is expired or invalid. Starting fresh auth.');
|
|
38
|
+
}
|
|
39
|
+
const s = p.spinner();
|
|
40
|
+
s.start('Requesting device authorization...');
|
|
41
|
+
const authResp = await client.post('/v1/agents/device-authorize', {
|
|
42
|
+
agent_name: agentName,
|
|
43
|
+
owner,
|
|
44
|
+
});
|
|
45
|
+
if (!authResp.ok) {
|
|
46
|
+
s.stop('Authorization request failed.');
|
|
47
|
+
p.log.error(authResp.error?.message ?? 'Unknown error');
|
|
48
|
+
process.exit(1);
|
|
49
|
+
}
|
|
50
|
+
const authData = authResp.data;
|
|
51
|
+
s.stop(`Verification code: ${authData.user_code}`);
|
|
52
|
+
p.log.info(`Open ${authData.verification_uri} to approve.`);
|
|
53
|
+
s.start('Polling for approval (every 5s)...');
|
|
54
|
+
const interval = (authData.interval ?? 5) * 1000;
|
|
55
|
+
let tokenData = null;
|
|
56
|
+
for (let i = 0; i < 360; i++) {
|
|
57
|
+
await new Promise(r => setTimeout(r, interval));
|
|
58
|
+
const pollResp = await client.post('/v1/agents/device-token', {
|
|
59
|
+
device_code: authData.device_code,
|
|
60
|
+
grant_type: 'urn:ietf:params:oauth:grant-type:device_code',
|
|
61
|
+
});
|
|
62
|
+
if (pollResp.ok) {
|
|
63
|
+
tokenData = pollResp.data;
|
|
64
|
+
break;
|
|
65
|
+
}
|
|
66
|
+
const errCode = pollResp.error;
|
|
67
|
+
if (errCode === 'access_denied') {
|
|
68
|
+
s.stop('Authorization denied.');
|
|
69
|
+
p.log.error('The owner denied the authorization request.');
|
|
70
|
+
process.exit(1);
|
|
71
|
+
}
|
|
72
|
+
if (errCode !== 'authorization_pending' && errCode !== 'slow_down') {
|
|
73
|
+
s.stop('Unexpected error.');
|
|
74
|
+
p.log.error(JSON.stringify(pollResp));
|
|
75
|
+
process.exit(1);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
if (!tokenData) {
|
|
79
|
+
s.stop('Timed out waiting for approval.');
|
|
80
|
+
process.exit(1);
|
|
81
|
+
}
|
|
82
|
+
const token = tokenData;
|
|
83
|
+
s.stop('Approved!');
|
|
84
|
+
await storeToken(agentName, owner, token.access_token);
|
|
85
|
+
p.log.success(`Token stored (aimeat:${agentName}@${owner})`);
|
|
86
|
+
saveConfig({ node_url: nodeUrl, agent: agentName, owner });
|
|
87
|
+
client.setToken(token.access_token);
|
|
88
|
+
try {
|
|
89
|
+
await downloadSkillBundle(client, agentName);
|
|
90
|
+
p.log.success(`Skill bundle downloaded to ${getConfigDir()}/${agentName}/SKILL.md`);
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
p.log.warn('Could not download skill bundle. Run: npx @aimeat/connect refresh');
|
|
94
|
+
}
|
|
95
|
+
p.outro('Done. Your agent is connected.');
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../../src/cli/connect/auth.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export interface AimeatConnectConfig {
|
|
2
|
+
node_url: string;
|
|
3
|
+
agent: string;
|
|
4
|
+
owner: string;
|
|
5
|
+
wake?: {
|
|
6
|
+
command?: string;
|
|
7
|
+
webhook?: string;
|
|
8
|
+
strategy?: 'command_first' | 'webhook_first' | 'command_only' | 'webhook_only';
|
|
9
|
+
};
|
|
10
|
+
poll_interval?: number;
|
|
11
|
+
}
|
|
12
|
+
export declare function getConfigDir(): string;
|
|
13
|
+
export declare function loadConfig(): AimeatConnectConfig | null;
|
|
14
|
+
export declare function saveConfig(config: AimeatConnectConfig): void;
|
|
15
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../../src/cli/connect/config.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE;QACL,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,QAAQ,CAAC,EAAE,eAAe,GAAG,eAAe,GAAG,cAAc,GAAG,cAAc,CAAC;KAChF,CAAC;IACF,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAKD,wBAAgB,YAAY,IAAI,MAAM,CAAuB;AAE7D,wBAAgB,UAAU,IAAI,mBAAmB,GAAG,IAAI,CAIvD;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,mBAAmB,GAAG,IAAI,CAG5D"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file config.ts
|
|
3
|
+
* @description Configuration loader for ~/.aimeat/config.yaml
|
|
4
|
+
*/
|
|
5
|
+
import { readFileSync, writeFileSync, existsSync, mkdirSync } from 'node:fs';
|
|
6
|
+
import { join } from 'node:path';
|
|
7
|
+
import { homedir } from 'node:os';
|
|
8
|
+
import { parse, stringify } from 'yaml';
|
|
9
|
+
const CONFIG_DIR = join(homedir(), '.aimeat');
|
|
10
|
+
const CONFIG_FILE = join(CONFIG_DIR, 'config.yaml');
|
|
11
|
+
export function getConfigDir() { return CONFIG_DIR; }
|
|
12
|
+
export function loadConfig() {
|
|
13
|
+
if (!existsSync(CONFIG_FILE))
|
|
14
|
+
return null;
|
|
15
|
+
const raw = readFileSync(CONFIG_FILE, 'utf-8');
|
|
16
|
+
return parse(raw);
|
|
17
|
+
}
|
|
18
|
+
export function saveConfig(config) {
|
|
19
|
+
if (!existsSync(CONFIG_DIR))
|
|
20
|
+
mkdirSync(CONFIG_DIR, { recursive: true });
|
|
21
|
+
writeFileSync(CONFIG_FILE, stringify(config), 'utf-8');
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../../src/cli/connect/config.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC7E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AAcxC,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;AAC9C,MAAM,WAAW,GAAG,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AAEpD,MAAM,UAAU,YAAY,KAAa,OAAO,UAAU,CAAC,CAAC,CAAC;AAE7D,MAAM,UAAU,UAAU;IACxB,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;QAAE,OAAO,IAAI,CAAC;IAC1C,MAAM,GAAG,GAAG,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAC/C,OAAO,KAAK,CAAC,GAAG,CAAwB,CAAC;AAC3C,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,MAA2B;IACpD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACxE,aAAa,CAAC,WAAW,EAAE,SAAS,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC;AACzD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docs.d.ts","sourceRoot":"","sources":["../../../../src/cli/connect/docs.ts"],"names":[],"mappings":"AASA,wBAAsB,OAAO,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAoB5D"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file docs.ts
|
|
3
|
+
* @description CLI subcommand: view documentation
|
|
4
|
+
*/
|
|
5
|
+
import { AimeatClient } from './api-client.js';
|
|
6
|
+
import { readFileSync, existsSync } from 'node:fs';
|
|
7
|
+
import { join } from 'node:path';
|
|
8
|
+
import { getConfigDir, loadConfig } from './config.js';
|
|
9
|
+
export async function runDocs(module) {
|
|
10
|
+
if (!module) {
|
|
11
|
+
const config = loadConfig();
|
|
12
|
+
const skillPath = config ? join(getConfigDir(), config.agent, 'SKILL.md') : null;
|
|
13
|
+
if (skillPath && existsSync(skillPath)) {
|
|
14
|
+
console.log(readFileSync(skillPath, 'utf-8'));
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
console.log('No local docs found. Run: npx @aimeat/connect refresh');
|
|
18
|
+
console.log('Or specify a module: npx @aimeat/connect docs tasks');
|
|
19
|
+
}
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
try {
|
|
23
|
+
const client = await AimeatClient.fromConfig();
|
|
24
|
+
const resp = await client.get(`/v1/agents/me/handbook/${encodeURIComponent(module)}`);
|
|
25
|
+
if (!resp.ok) {
|
|
26
|
+
console.error(`Module "${module}" not found.`);
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
const data = resp.data;
|
|
30
|
+
console.log(data.system_prompt ?? JSON.stringify(data, null, 2));
|
|
31
|
+
}
|
|
32
|
+
catch (e) {
|
|
33
|
+
console.error(e.message);
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=docs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docs.js","sourceRoot":"","sources":["../../../../src/cli/connect/docs.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEvD,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,MAAe;IAC3C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;QAC5B,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,EAAE,EAAE,MAAM,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACjF,IAAI,SAAS,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YACvC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC;QAChD,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC;YACrE,OAAO,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC;QACrE,CAAC;QACD,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,UAAU,EAAE,CAAC;QAC/C,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,0BAA0B,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACtF,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YAAC,OAAO,CAAC,KAAK,CAAC,WAAW,MAAM,cAAc,CAAC,CAAC;YAAC,OAAO;QAAC,CAAC;QACzE,MAAM,IAAI,GAAG,IAAI,CAAC,IAAkC,CAAC;QACrD,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACnE,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QAAC,OAAO,CAAC,KAAK,CAAE,CAAW,CAAC,OAAO,CAAC,CAAC;IAAC,CAAC;AACtD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inbox.d.ts","sourceRoot":"","sources":["../../../../src/cli/connect/inbox.ts"],"names":[],"mappings":"AAMA,wBAAsB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAO9C"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file inbox.ts
|
|
3
|
+
* @description CLI subcommand: check message inbox
|
|
4
|
+
*/
|
|
5
|
+
import { AimeatClient } from './api-client.js';
|
|
6
|
+
export async function runInbox() {
|
|
7
|
+
const client = await AimeatClient.fromConfig();
|
|
8
|
+
const resp = await client.get('/v1/agents/me/messages/inbox');
|
|
9
|
+
if (!resp.ok) {
|
|
10
|
+
console.error('Failed to fetch inbox:', resp.error);
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
const messages = resp.data?.messages ?? [];
|
|
14
|
+
if (messages.length === 0) {
|
|
15
|
+
console.log('Inbox empty.');
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
console.log(JSON.stringify(messages, null, 2));
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=inbox.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inbox.js","sourceRoot":"","sources":["../../../../src/cli/connect/inbox.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAE/C,MAAM,CAAC,KAAK,UAAU,QAAQ;IAC5B,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,UAAU,EAAE,CAAC;IAC/C,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;IAC9D,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QAAC,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAAC,OAAO;IAAC,CAAC;IAC9E,MAAM,QAAQ,GAAI,IAAI,CAAC,IAAiC,EAAE,QAAQ,IAAI,EAAE,CAAC;IACzE,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAAC,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAAC,OAAO;IAAC,CAAC;IACnE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AACjD,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export declare function storeToken(agent: string, owner: string, token: string): Promise<void>;
|
|
2
|
+
export declare function getToken(agent: string, owner: string): Promise<string | null>;
|
|
3
|
+
export declare function deleteToken(agent: string, owner: string): Promise<boolean>;
|
|
4
|
+
//# sourceMappingURL=keychain.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keychain.d.ts","sourceRoot":"","sources":["../../../../src/cli/connect/keychain.ts"],"names":[],"mappings":"AAeA,wBAAsB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAE3F;AAED,wBAAsB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAInF;AAED,wBAAsB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAKhF"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file keychain.ts
|
|
3
|
+
* @description Token storage abstraction. Uses a file-based fallback since keytar
|
|
4
|
+
* requires native compilation and may not be available in all environments.
|
|
5
|
+
*/
|
|
6
|
+
import { readFileSync, writeFileSync, existsSync, unlinkSync, mkdirSync } from 'node:fs';
|
|
7
|
+
import { join } from 'node:path';
|
|
8
|
+
import { getConfigDir } from './config.js';
|
|
9
|
+
function tokenPath(agent, owner) {
|
|
10
|
+
const dir = join(getConfigDir(), 'tokens');
|
|
11
|
+
if (!existsSync(dir))
|
|
12
|
+
mkdirSync(dir, { recursive: true });
|
|
13
|
+
return join(dir, `${agent}@${owner}.token`);
|
|
14
|
+
}
|
|
15
|
+
export async function storeToken(agent, owner, token) {
|
|
16
|
+
writeFileSync(tokenPath(agent, owner), token, { mode: 0o600 });
|
|
17
|
+
}
|
|
18
|
+
export async function getToken(agent, owner) {
|
|
19
|
+
const p = tokenPath(agent, owner);
|
|
20
|
+
if (!existsSync(p))
|
|
21
|
+
return null;
|
|
22
|
+
return readFileSync(p, 'utf-8').trim();
|
|
23
|
+
}
|
|
24
|
+
export async function deleteToken(agent, owner) {
|
|
25
|
+
const p = tokenPath(agent, owner);
|
|
26
|
+
if (!existsSync(p))
|
|
27
|
+
return false;
|
|
28
|
+
unlinkSync(p);
|
|
29
|
+
return true;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=keychain.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keychain.js","sourceRoot":"","sources":["../../../../src/cli/connect/keychain.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AACzF,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,SAAS,SAAS,CAAC,KAAa,EAAE,KAAa;IAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,EAAE,EAAE,QAAQ,CAAC,CAAC;IAC3C,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1D,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,KAAK,QAAQ,CAAC,CAAC;AAC9C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,KAAa,EAAE,KAAa,EAAE,KAAa;IAC1E,aAAa,CAAC,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;AACjE,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,KAAa,EAAE,KAAa;IACzD,MAAM,CAAC,GAAG,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAClC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAChC,OAAO,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC;AACzC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,KAAa,EAAE,KAAa;IAC5D,MAAM,CAAC,GAAG,SAAS,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAClC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IACjC,UAAU,CAAC,CAAC,CAAC,CAAC;IACd,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file poller.ts
|
|
3
|
+
* @description Background poller for new tasks and messages. Triggers agent wake-up.
|
|
4
|
+
*/
|
|
5
|
+
import type { AimeatClient } from '../api-client.js';
|
|
6
|
+
import type { AimeatConnectConfig } from '../config.js';
|
|
7
|
+
export declare function startPoller(client: AimeatClient, config: AimeatConnectConfig): void;
|
|
8
|
+
//# sourceMappingURL=poller.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"poller.d.ts","sourceRoot":"","sources":["../../../../../src/cli/connect/mcp/poller.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAMxD,wBAAgB,WAAW,CAAC,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,mBAAmB,GAAG,IAAI,CA+BnF"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { wakeAgent } from './wakeup.js';
|
|
2
|
+
let lastTaskCount = -1;
|
|
3
|
+
let lastMessageCount = -1;
|
|
4
|
+
export function startPoller(client, config) {
|
|
5
|
+
const interval = (config.poll_interval ?? 30) * 1000;
|
|
6
|
+
const enc = encodeURIComponent(config.agent);
|
|
7
|
+
async function poll() {
|
|
8
|
+
try {
|
|
9
|
+
const tasksResp = await client.get(`/v1/agents/${enc}/tasks?status=queued`);
|
|
10
|
+
if (tasksResp.ok) {
|
|
11
|
+
const tasks = tasksResp.data?.tasks ?? [];
|
|
12
|
+
if (lastTaskCount >= 0 && tasks.length > lastTaskCount) {
|
|
13
|
+
await wakeAgent(config, 'task_new', `${tasks.length - lastTaskCount} new task(s) queued`);
|
|
14
|
+
}
|
|
15
|
+
lastTaskCount = tasks.length;
|
|
16
|
+
}
|
|
17
|
+
const msgResp = await client.get('/v1/agents/me/messages/inbox');
|
|
18
|
+
if (msgResp.ok) {
|
|
19
|
+
const messages = msgResp.data?.messages ?? [];
|
|
20
|
+
if (lastMessageCount >= 0 && messages.length > lastMessageCount) {
|
|
21
|
+
await wakeAgent(config, 'message_new', `${messages.length - lastMessageCount} new message(s)`);
|
|
22
|
+
}
|
|
23
|
+
lastMessageCount = messages.length;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
catch (err) {
|
|
27
|
+
console.error(`[poller] Error: ${err.message}`);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
poll();
|
|
31
|
+
setInterval(poll, interval);
|
|
32
|
+
console.error(`[poller] Polling every ${config.poll_interval ?? 30}s for tasks and messages`);
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=poller.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"poller.js","sourceRoot":"","sources":["../../../../../src/cli/connect/mcp/poller.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAExC,IAAI,aAAa,GAAG,CAAC,CAAC,CAAC;AACvB,IAAI,gBAAgB,GAAG,CAAC,CAAC,CAAC;AAE1B,MAAM,UAAU,WAAW,CAAC,MAAoB,EAAE,MAA2B;IAC3E,MAAM,QAAQ,GAAG,CAAC,MAAM,CAAC,aAAa,IAAI,EAAE,CAAC,GAAG,IAAI,CAAC;IACrD,MAAM,GAAG,GAAG,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAE7C,KAAK,UAAU,IAAI;QACjB,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,cAAc,GAAG,sBAAsB,CAAC,CAAC;YAC5E,IAAI,SAAS,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,KAAK,GAAI,SAAS,CAAC,IAA8B,EAAE,KAAK,IAAI,EAAE,CAAC;gBACrE,IAAI,aAAa,IAAI,CAAC,IAAI,KAAK,CAAC,MAAM,GAAG,aAAa,EAAE,CAAC;oBACvD,MAAM,SAAS,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,KAAK,CAAC,MAAM,GAAG,aAAa,qBAAqB,CAAC,CAAC;gBAC5F,CAAC;gBACD,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC;YAC/B,CAAC;YAED,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;YACjE,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC;gBACf,MAAM,QAAQ,GAAI,OAAO,CAAC,IAAiC,EAAE,QAAQ,IAAI,EAAE,CAAC;gBAC5E,IAAI,gBAAgB,IAAI,CAAC,IAAI,QAAQ,CAAC,MAAM,GAAG,gBAAgB,EAAE,CAAC;oBAChE,MAAM,SAAS,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,QAAQ,CAAC,MAAM,GAAG,gBAAgB,iBAAiB,CAAC,CAAC;gBACjG,CAAC;gBACD,gBAAgB,GAAG,QAAQ,CAAC,MAAM,CAAC;YACrC,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,mBAAoB,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;IAED,IAAI,EAAE,CAAC;IACP,WAAW,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC5B,OAAO,CAAC,KAAK,CAAC,0BAA0B,MAAM,CAAC,aAAa,IAAI,EAAE,0BAA0B,CAAC,CAAC;AAChG,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file resources.ts
|
|
3
|
+
* @description MCP resource providers for handbook, skill bundle, and reference docs.
|
|
4
|
+
*/
|
|
5
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
6
|
+
import type { AimeatClient } from '../api-client.js';
|
|
7
|
+
export declare function registerResources(mcp: McpServer, client: AimeatClient): void;
|
|
8
|
+
//# sourceMappingURL=resources.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resources.d.ts","sourceRoot":"","sources":["../../../../../src/cli/connect/mcp/resources.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAOrD,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,GAAG,IAAI,CAmC5E"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { readFileSync, existsSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { getConfigDir, loadConfig } from '../config.js';
|
|
4
|
+
const MODULES = ['tasks', 'messages', 'work', 'services', 'memory', 'activity', 'social', 'collaboration', 'appdev', 'mcp'];
|
|
5
|
+
export function registerResources(mcp, client) {
|
|
6
|
+
mcp.resource('handbook', 'aimeat://handbook', { mimeType: 'application/json', description: 'Agent operating handbook' }, async (uri) => {
|
|
7
|
+
const resp = await client.get('/v1/agents/me/handbook');
|
|
8
|
+
return { contents: [{ uri: uri.toString(), text: JSON.stringify(resp.data, null, 2), mimeType: 'application/json' }] };
|
|
9
|
+
});
|
|
10
|
+
for (const mod of MODULES) {
|
|
11
|
+
mcp.resource(`handbook-${mod}`, `aimeat://handbook/${mod}`, { mimeType: 'application/json', description: `Handbook module: ${mod}` }, async (uri) => {
|
|
12
|
+
const resp = await client.get(`/v1/agents/me/handbook/${mod}`);
|
|
13
|
+
return { contents: [{ uri: uri.toString(), text: JSON.stringify(resp.data, null, 2), mimeType: 'application/json' }] };
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
mcp.resource('skill-bundle', 'aimeat://skill-bundle', { mimeType: 'text/markdown', description: 'Cached SKILL.md from last download' }, async (uri) => {
|
|
17
|
+
const config = loadConfig();
|
|
18
|
+
if (!config)
|
|
19
|
+
return { contents: [{ uri: uri.toString(), text: 'Not configured.' }] };
|
|
20
|
+
const path = join(getConfigDir(), config.agent, 'SKILL.md');
|
|
21
|
+
const text = existsSync(path) ? readFileSync(path, 'utf-8') : 'No skill bundle cached. Run: npx @aimeat/connect refresh';
|
|
22
|
+
return { contents: [{ uri: uri.toString(), text, mimeType: 'text/markdown' }] };
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=resources.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resources.js","sourceRoot":"","sources":["../../../../../src/cli/connect/mcp/resources.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAExD,MAAM,OAAO,GAAG,CAAC,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,eAAe,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;AAE5H,MAAM,UAAU,iBAAiB,CAAC,GAAc,EAAE,MAAoB;IACpE,GAAG,CAAC,QAAQ,CACV,UAAU,EACV,mBAAmB,EACnB,EAAE,QAAQ,EAAE,kBAAkB,EAAE,WAAW,EAAE,0BAA0B,EAAE,EACzE,KAAK,EAAE,GAAG,EAAE,EAAE;QACZ,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;QACxD,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,kBAAkB,EAAE,CAAC,EAAE,CAAC;IACzH,CAAC,CACF,CAAC;IAEF,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,GAAG,CAAC,QAAQ,CACV,YAAY,GAAG,EAAE,EACjB,qBAAqB,GAAG,EAAE,EAC1B,EAAE,QAAQ,EAAE,kBAAkB,EAAE,WAAW,EAAE,oBAAoB,GAAG,EAAE,EAAE,EACxE,KAAK,EAAE,GAAG,EAAE,EAAE;YACZ,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,0BAA0B,GAAG,EAAE,CAAC,CAAC;YAC/D,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,QAAQ,EAAE,kBAAkB,EAAE,CAAC,EAAE,CAAC;QACzH,CAAC,CACF,CAAC;IACJ,CAAC;IAED,GAAG,CAAC,QAAQ,CACV,cAAc,EACd,uBAAuB,EACvB,EAAE,QAAQ,EAAE,eAAe,EAAE,WAAW,EAAE,oCAAoC,EAAE,EAChF,KAAK,EAAE,GAAG,EAAE,EAAE;QACZ,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;QAC5B,IAAI,CAAC,MAAM;YAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,iBAAiB,EAAE,CAAC,EAAE,CAAC;QACrF,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,EAAE,EAAE,MAAM,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;QAC5D,MAAM,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,0DAA0D,CAAC;QACzH,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,QAAQ,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,eAAe,EAAE,CAAC,EAAE,CAAC;IAClF,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../../../src/cli/connect/mcp/server.ts"],"names":[],"mappings":"AAYA,wBAAsB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAsB5E"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file server.ts
|
|
3
|
+
* @description MCP server entry point. Registers all tools and resources, starts transport.
|
|
4
|
+
*/
|
|
5
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
6
|
+
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
7
|
+
import { AimeatClient } from '../api-client.js';
|
|
8
|
+
import { loadConfig } from '../config.js';
|
|
9
|
+
import { registerAllTools } from './tools/index.js';
|
|
10
|
+
import { registerResources } from './resources.js';
|
|
11
|
+
import { startPoller } from './poller.js';
|
|
12
|
+
export async function runServe(_flags) {
|
|
13
|
+
const config = loadConfig();
|
|
14
|
+
if (!config) {
|
|
15
|
+
console.error('Not configured. Run: npx @aimeat/connect');
|
|
16
|
+
process.exit(1);
|
|
17
|
+
}
|
|
18
|
+
const client = await AimeatClient.fromConfig();
|
|
19
|
+
const mcp = new McpServer({
|
|
20
|
+
name: 'aimeat-connect',
|
|
21
|
+
version: '0.1.0',
|
|
22
|
+
});
|
|
23
|
+
registerAllTools(mcp, client, config.agent);
|
|
24
|
+
registerResources(mcp, client);
|
|
25
|
+
startPoller(client, config);
|
|
26
|
+
const transport = new StdioServerTransport();
|
|
27
|
+
await mcp.connect(transport);
|
|
28
|
+
console.error(`AIMEAT MCP server running (agent: ${config.agent}, node: ${config.node_url})`);
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../../../../src/cli/connect/mcp/server.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,MAA8B;IAC3D,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;IAC5B,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;QAC1D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,UAAU,EAAE,CAAC;IAE/C,MAAM,GAAG,GAAG,IAAI,SAAS,CAAC;QACxB,IAAI,EAAE,gBAAgB;QACtB,OAAO,EAAE,OAAO;KACjB,CAAC,CAAC;IAEH,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;IAC5C,iBAAiB,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAE/B,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAE5B,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAC7B,OAAO,CAAC,KAAK,CAAC,qCAAqC,MAAM,CAAC,KAAK,WAAW,MAAM,CAAC,QAAQ,GAAG,CAAC,CAAC;AAChG,CAAC"}
|