@autopo/mcp 0.4.3 → 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/api.d.ts +5 -0
- package/dist/api.js +28 -3
- package/dist/api.js.map +1 -1
- package/dist/apps.d.ts +3 -2
- package/dist/apps.js +50 -17
- package/dist/apps.js.map +1 -1
- package/dist/calllog.js +12 -3
- package/dist/calllog.js.map +1 -1
- package/dist/cli.js +28 -7
- package/dist/cli.js.map +1 -1
- package/dist/files.d.ts +9 -3
- package/dist/files.js +96 -49
- package/dist/files.js.map +1 -1
- package/dist/http.d.ts +11 -1
- package/dist/http.js +128 -15
- package/dist/http.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/kit.d.ts +17 -2
- package/dist/kit.js +52 -19
- package/dist/kit.js.map +1 -1
- package/dist/net.d.ts +23 -0
- package/dist/net.js +142 -0
- package/dist/net.js.map +1 -0
- package/dist/resources.js +1 -1
- package/dist/resources.js.map +1 -1
- package/dist/server.d.ts +1 -1
- package/dist/server.js +4 -2
- package/dist/server.js.map +1 -1
- package/dist/tools/company.js +28 -10
- package/dist/tools/company.js.map +1 -1
- package/dist/tools/marketing.js +25 -8
- package/dist/tools/marketing.js.map +1 -1
- package/dist/tools/studio.js +55 -19
- package/dist/tools/studio.js.map +1 -1
- package/dist/zip.d.ts +2 -0
- package/dist/zip.js +24 -4
- package/dist/zip.js.map +1 -1
- package/package.json +10 -8
package/dist/api.d.ts
CHANGED
|
@@ -18,6 +18,9 @@ export declare class ApiError extends Error {
|
|
|
18
18
|
constructor(status: number, body: ApiErrorBody);
|
|
19
19
|
}
|
|
20
20
|
export type Query = Record<string, string | number | boolean | null | undefined>;
|
|
21
|
+
export declare function isSafePath(path: string): boolean;
|
|
22
|
+
/** Plain http would show the token to everyone on the way, so it is for this machine and private service names only. */
|
|
23
|
+
export declare function assertSafeApiUrl(baseUrl: string): void;
|
|
21
24
|
export interface ApiOptions {
|
|
22
25
|
/** The API's origin, e.g. https://api.example.com (no trailing slash). */
|
|
23
26
|
baseUrl: string;
|
|
@@ -36,6 +39,8 @@ export declare class Api {
|
|
|
36
39
|
readonly fetchImpl: typeof fetch;
|
|
37
40
|
private readonly userAgent;
|
|
38
41
|
constructor(options: ApiOptions);
|
|
42
|
+
/** False on the hosted server's public discovery, which answers without a person. */
|
|
43
|
+
get signedIn(): boolean;
|
|
39
44
|
request<T = unknown>(method: string, path: string, body?: unknown, query?: Query): Promise<T>;
|
|
40
45
|
/**
|
|
41
46
|
* Send a raw body: bytes (`application/octet-stream`, the Studio's upload chunks), a Blob, or a FormData (multipart,
|
package/dist/api.js
CHANGED
|
@@ -4,6 +4,8 @@
|
|
|
4
4
|
* the server never sees anything the person could not do themselves.
|
|
5
5
|
*/
|
|
6
6
|
import { AsyncLocalStorage } from 'node:async_hooks';
|
|
7
|
+
import { isIP } from 'node:net';
|
|
8
|
+
import { isPrivateAddress } from './net.js';
|
|
7
9
|
export class ApiError extends Error {
|
|
8
10
|
status;
|
|
9
11
|
code;
|
|
@@ -17,7 +19,25 @@ export class ApiError extends Error {
|
|
|
17
19
|
this.body = body;
|
|
18
20
|
}
|
|
19
21
|
}
|
|
22
|
+
/** Ids and paths come from the model and go straight into URLs, so one holding `..`, `?` or `#` would call another endpoint. */
|
|
23
|
+
const UNSAFE_PATH = /[\\?#\x00-\x1f\x7f]|%(?:2e|2f|5c|23|3f|00)/i;
|
|
24
|
+
export function isSafePath(path) {
|
|
25
|
+
return path.startsWith('/api/') && !UNSAFE_PATH.test(path) && !path.split('/').some((part) => part === '.' || part === '..');
|
|
26
|
+
}
|
|
27
|
+
/** Plain http would show the token to everyone on the way, so it is for this machine and private service names only. */
|
|
28
|
+
export function assertSafeApiUrl(baseUrl) {
|
|
29
|
+
const url = new URL(baseUrl);
|
|
30
|
+
if (url.protocol === 'https:')
|
|
31
|
+
return;
|
|
32
|
+
const host = url.hostname.replace(/^\[|\]$/g, '');
|
|
33
|
+
if (url.protocol === 'http:' && (host === 'localhost' || !host.includes('.') || isPrivateIp(host)))
|
|
34
|
+
return;
|
|
35
|
+
throw new Error(`The API address must be https (a token would travel in the clear): ${baseUrl}`);
|
|
36
|
+
}
|
|
37
|
+
const isPrivateIp = (host) => isIP(host) !== 0 && isPrivateAddress(host);
|
|
20
38
|
/** The MCP call being served: its API calls name it, so the user action log can tie them together (API_CONTRACT §90.3). */
|
|
39
|
+
/** Only so a dead connection can't hold a call open for ever: a film's check or a large chunk can take minutes. */
|
|
40
|
+
const REQUEST_TIMEOUT_MS = 10 * 60_000;
|
|
21
41
|
const currentCall = new AsyncLocalStorage();
|
|
22
42
|
export const inCall = (call, run) => currentCall.run(call, run);
|
|
23
43
|
export class Api {
|
|
@@ -27,10 +47,15 @@ export class Api {
|
|
|
27
47
|
userAgent;
|
|
28
48
|
constructor(options) {
|
|
29
49
|
this.baseUrl = options.baseUrl.replace(/\/+$/, '');
|
|
50
|
+
assertSafeApiUrl(this.baseUrl);
|
|
30
51
|
this.token = options.token;
|
|
31
52
|
this.fetchImpl = options.fetch ?? globalThis.fetch;
|
|
32
53
|
this.userAgent = options.userAgent ?? 'autopoiesis-mcp';
|
|
33
54
|
}
|
|
55
|
+
/** False on the hosted server's public discovery, which answers without a person. */
|
|
56
|
+
get signedIn() {
|
|
57
|
+
return this.token !== '';
|
|
58
|
+
}
|
|
34
59
|
async request(method, path, body, query) {
|
|
35
60
|
if (body === undefined)
|
|
36
61
|
return this.send(method, path, undefined, undefined, query);
|
|
@@ -41,8 +66,8 @@ export class Api {
|
|
|
41
66
|
* the content type set by fetch). `contentType` is left unset for FormData.
|
|
42
67
|
*/
|
|
43
68
|
async send(method, path, body, contentType, query) {
|
|
44
|
-
if (!path
|
|
45
|
-
throw new ApiError(400, { error: { code: 'validation_error', message: 'Paths start with /api/
|
|
69
|
+
if (!isSafePath(path)) {
|
|
70
|
+
throw new ApiError(400, { error: { code: 'validation_error', message: 'Paths start with /api/ and hold no .. segments, ?, # or backslashes; ids are plain ids, and a query goes in `query`.' } });
|
|
46
71
|
}
|
|
47
72
|
const url = new URL(this.baseUrl + path);
|
|
48
73
|
for (const [key, value] of Object.entries(query ?? {})) {
|
|
@@ -63,7 +88,7 @@ export class Api {
|
|
|
63
88
|
}
|
|
64
89
|
if (contentType)
|
|
65
90
|
headers['Content-Type'] = contentType;
|
|
66
|
-
const init = { method, headers };
|
|
91
|
+
const init = { method, headers, signal: AbortSignal.timeout(REQUEST_TIMEOUT_MS) };
|
|
67
92
|
if (body !== undefined)
|
|
68
93
|
init.body = body;
|
|
69
94
|
const response = await this.fetchImpl(url, init);
|
package/dist/api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
|
package/dist/apps.d.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import type { McpServer } from '@modelcontextprotocol/server';
|
|
2
|
-
import type
|
|
2
|
+
import { type Session } from './kit.js';
|
|
3
3
|
export declare const VIEWS: readonly ['inbox', 'storyboard', 'gallery', 'home', 'money'];
|
|
4
4
|
export type View = (typeof VIEWS)[number];
|
|
5
5
|
export declare const viewUri: (view: View) => string;
|
|
6
|
-
/** The built HTML of a view, wherever this module runs from (dist/, or src/ under tsx).
|
|
6
|
+
/** The built HTML of a view, wherever this module runs from (dist/, or src/ under tsx). Read once: a hosted server makes a
|
|
7
|
+
* server per connection, and these are half a megabyte each. */
|
|
7
8
|
export declare function viewHtml(view: View): string | null;
|
|
8
9
|
/** Claude's sandbox origin for a hosted server: the first 32 hex characters of the SHA-256 of the server URL. */
|
|
9
10
|
export declare function claudeDomain(publicUrl: string | undefined): string | undefined;
|
package/dist/apps.js
CHANGED
|
@@ -3,26 +3,36 @@
|
|
|
3
3
|
* is one self-contained HTML file built from ui/<name>/ into dist/ui/<name>.html. Hosts that don't render apps (Claude
|
|
4
4
|
* Code, Codex CLI) still get the full text result: the views are an extra, never the only answer.
|
|
5
5
|
*
|
|
6
|
-
* Buttons in a view call app-only tools
|
|
7
|
-
*
|
|
6
|
+
* Buttons in a view call app-only tools, which a host that renders views keeps from the model: there the click is the
|
|
7
|
+
* person's confirmation. A host that doesn't know views has never heard of that rule and lists them as ordinary tools, so
|
|
8
|
+
* without the extension on the connection they ask in a dialog, like their model-facing twins.
|
|
8
9
|
*/
|
|
9
10
|
import { readFileSync, existsSync } from 'node:fs';
|
|
10
11
|
import { createHash } from 'node:crypto';
|
|
11
12
|
import { fileURLToPath } from 'node:url';
|
|
12
13
|
import { dirname, join } from 'node:path';
|
|
13
|
-
import { RESOURCE_MIME_TYPE, registerAppResource, registerAppTool } from '@modelcontextprotocol/ext-apps/server';
|
|
14
|
+
import { RESOURCE_MIME_TYPE, getUiCapability, registerAppResource, registerAppTool } from '@modelcontextprotocol/ext-apps/server';
|
|
14
15
|
import { z } from 'zod';
|
|
16
|
+
import { SAFE_ID, confirm } from './kit.js';
|
|
15
17
|
export const VIEWS = ['inbox', 'storyboard', 'gallery', 'home', 'money'];
|
|
16
18
|
export const viewUri = (view) => `ui://autopoiesis/${view}.html`;
|
|
17
19
|
const here = dirname(fileURLToPath(import.meta.url));
|
|
18
|
-
|
|
20
|
+
const built = new Map();
|
|
21
|
+
/** The built HTML of a view, wherever this module runs from (dist/, or src/ under tsx). Read once: a hosted server makes a
|
|
22
|
+
* server per connection, and these are half a megabyte each. */
|
|
19
23
|
export function viewHtml(view) {
|
|
24
|
+
if (built.has(view))
|
|
25
|
+
return built.get(view);
|
|
26
|
+
let html = null;
|
|
20
27
|
for (const dir of [join(here, 'ui'), join(here, '..', 'dist', 'ui')]) {
|
|
21
28
|
const file = join(dir, `${view}.html`);
|
|
22
|
-
if (existsSync(file))
|
|
23
|
-
|
|
29
|
+
if (existsSync(file)) {
|
|
30
|
+
html = readFileSync(file, 'utf8');
|
|
31
|
+
break;
|
|
32
|
+
}
|
|
24
33
|
}
|
|
25
|
-
|
|
34
|
+
built.set(view, html);
|
|
35
|
+
return html;
|
|
26
36
|
}
|
|
27
37
|
/** Claude's sandbox origin for a hosted server: the first 32 hex characters of the SHA-256 of the server URL. */
|
|
28
38
|
export function claudeDomain(publicUrl) {
|
|
@@ -62,14 +72,22 @@ export function registerApps(server, s) {
|
|
|
62
72
|
}
|
|
63
73
|
// --- app-only tools: what the buttons call -------------------------------------------------------------------------
|
|
64
74
|
const appOnly = { visibility: ['app'] };
|
|
75
|
+
const clicked = async (ctx, key, message) => getUiCapability(server.server.getClientCapabilities()) ? true : confirm(ctx, key, await message());
|
|
76
|
+
const id = z.string().regex(SAFE_ID);
|
|
65
77
|
registerAppTool(server, 'app_decide', {
|
|
66
78
|
title: 'Decide (from the inbox view)',
|
|
67
79
|
description: 'Decide a card from the inbox view. Hidden from the model: the click is the confirmation.',
|
|
68
|
-
inputSchema: z.object({ decision:
|
|
80
|
+
inputSchema: z.object({ decision: id, choice: z.enum(['approve', 'reject', 'cancel']), note: z.string().optional(), answer: z.unknown().optional() }),
|
|
69
81
|
annotations: { destructiveHint: true },
|
|
70
82
|
_meta: { ui: { resourceUri: viewUri('inbox'), ...appOnly } },
|
|
71
|
-
}, async ({ decision, choice, note, answer }) => {
|
|
83
|
+
}, async ({ decision, choice, note, answer }, ctx) => {
|
|
72
84
|
try {
|
|
85
|
+
const ok = await clicked(ctx, 'decide', async () => {
|
|
86
|
+
const card = (await s.api.get(`/api/approvals/${decision}`));
|
|
87
|
+
return `${choice[0].toUpperCase()}${choice.slice(1)} "${card.title ?? decision}"${card.amount ? ` (${card.amount})` : ''}?`;
|
|
88
|
+
});
|
|
89
|
+
if (ok !== true)
|
|
90
|
+
return ok;
|
|
73
91
|
const body = { decision: choice };
|
|
74
92
|
if (note)
|
|
75
93
|
body.note = note;
|
|
@@ -85,22 +103,32 @@ export function registerApps(server, s) {
|
|
|
85
103
|
registerAppTool(server, 'app_refresh_inbox', {
|
|
86
104
|
title: 'Refresh the inbox view',
|
|
87
105
|
description: 'Reload the pending cards for the inbox view.',
|
|
88
|
-
inputSchema: z.object({ company:
|
|
106
|
+
inputSchema: z.object({ company: id, status: z.string().optional() }),
|
|
89
107
|
annotations: { readOnlyHint: true },
|
|
90
108
|
_meta: { ui: { resourceUri: viewUri('inbox'), ...appOnly } },
|
|
91
109
|
}, async ({ company, status }) => {
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
110
|
+
try {
|
|
111
|
+
const data = (await s.api.get(`/api/companies/${company}/approvals`, { status: status ?? 'pending' }));
|
|
112
|
+
const results = Array.isArray(data) ? data : (data.results ?? []);
|
|
113
|
+
return { content: [{ type: 'text', text: `${results.length} cards` }], structuredContent: { company, results, count: results.length, more: false } };
|
|
114
|
+
}
|
|
115
|
+
catch (error) {
|
|
116
|
+
return { isError: true, content: [{ type: 'text', text: error.message }] };
|
|
117
|
+
}
|
|
95
118
|
});
|
|
96
119
|
registerAppTool(server, 'app_video', {
|
|
97
120
|
title: 'Video (from the storyboard view)',
|
|
98
121
|
description: 'Reload a video, or act on it: keyframes, make media, critique, render. The click is the confirmation.',
|
|
99
|
-
inputSchema: z.object({ video:
|
|
122
|
+
inputSchema: z.object({ video: id, action: z.enum(['refresh', 'keyframes', 'make', 'critique_keyframes', 'critique_clips', 'render']).optional() }),
|
|
100
123
|
annotations: { destructiveHint: false },
|
|
101
124
|
_meta: { ui: { resourceUri: viewUri('storyboard'), ...appOnly } },
|
|
102
|
-
}, async ({ video, action }) => {
|
|
125
|
+
}, async ({ video, action }, ctx) => {
|
|
103
126
|
try {
|
|
127
|
+
if (action && action !== 'refresh') {
|
|
128
|
+
const ok = await clicked(ctx, 'video', () => `Run ${action.replace('_', ' ')} on this video? It can spend credits.`);
|
|
129
|
+
if (ok !== true)
|
|
130
|
+
return ok;
|
|
131
|
+
}
|
|
104
132
|
if (action === 'keyframes')
|
|
105
133
|
await s.api.post(`/api/studio/productions/${video}/keyframes`, {});
|
|
106
134
|
else if (action === 'make')
|
|
@@ -121,11 +149,16 @@ export function registerApps(server, s) {
|
|
|
121
149
|
registerAppTool(server, 'app_media', {
|
|
122
150
|
title: 'Media (from the gallery view)',
|
|
123
151
|
description: 'Star, retry or reload media from the gallery view.',
|
|
124
|
-
inputSchema: z.object({ company:
|
|
152
|
+
inputSchema: z.object({ company: id.optional(), media: id.optional(), action: z.enum(['refresh', 'star', 'unstar', 'retry']).optional(), kind: z.string().optional() }),
|
|
125
153
|
annotations: { destructiveHint: false },
|
|
126
154
|
_meta: { ui: { resourceUri: viewUri('gallery'), ...appOnly } },
|
|
127
|
-
}, async ({ company, media, action, kind }) => {
|
|
155
|
+
}, async ({ company, media, action, kind }, ctx) => {
|
|
128
156
|
try {
|
|
157
|
+
if (media && action === 'retry') {
|
|
158
|
+
const ok = await clicked(ctx, 'spend', () => 'Make this media again? Credits leave your balance.');
|
|
159
|
+
if (ok !== true)
|
|
160
|
+
return ok;
|
|
161
|
+
}
|
|
129
162
|
if (media && action === 'star')
|
|
130
163
|
await s.api.patch(`/api/studio/media/${media}`, { starred: true });
|
|
131
164
|
if (media && action === 'unstar')
|
package/dist/apps.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apps.js","sourceRoot":"","sources":["../src/apps.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"apps.js","sourceRoot":"","sources":["../src/apps.ts"],"names":[],"mappings":"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"}
|
package/dist/calllog.js
CHANGED
|
@@ -4,12 +4,21 @@
|
|
|
4
4
|
* carry its id (X-MCP-Call, X-MCP-Tool), so the platform ties them together. A report never holds up or fails a call.
|
|
5
5
|
*/
|
|
6
6
|
import { randomUUID } from 'node:crypto';
|
|
7
|
+
import { basename } from 'node:path';
|
|
7
8
|
import { inCall } from './api.js';
|
|
8
9
|
/** Short enough that the platform's own cut (500 chars) leaves the note of the real length in place. */
|
|
9
10
|
const MAX_TEXT = 480;
|
|
10
11
|
const MAX_ARGUMENTS = 100_000;
|
|
11
|
-
|
|
12
|
-
|
|
12
|
+
/** These tools' `path` is on the person's own disk: its folders (their user name, their projects) are not the platform's to log. */
|
|
13
|
+
const DISK_PATHS = new Set(['upload_media', 'import_video_plan']);
|
|
14
|
+
function forLog(value, tool) {
|
|
15
|
+
const text = JSON.stringify(value ?? {}, (key, v) => {
|
|
16
|
+
if (typeof v !== 'string')
|
|
17
|
+
return v;
|
|
18
|
+
if (key === 'path' && tool && DISK_PATHS.has(tool))
|
|
19
|
+
return basename(v);
|
|
20
|
+
return v.length > MAX_TEXT ? `${v.slice(0, MAX_TEXT)}… (${v.length.toLocaleString('en-US')} chars)` : v;
|
|
21
|
+
});
|
|
13
22
|
return text.length <= MAX_ARGUMENTS ? JSON.parse(text) : { omitted: `${text.length.toLocaleString('en-US')} chars` };
|
|
14
23
|
}
|
|
15
24
|
function outcome(result) {
|
|
@@ -31,7 +40,7 @@ async function logged(server, api, what, run) {
|
|
|
31
40
|
call_id: id,
|
|
32
41
|
method: what.method,
|
|
33
42
|
tool: what.tool ?? '',
|
|
34
|
-
arguments: forLog(what.arguments),
|
|
43
|
+
arguments: forLog(what.arguments, what.tool),
|
|
35
44
|
duration_ms: Date.now() - started,
|
|
36
45
|
...ended,
|
|
37
46
|
...(client ? { client: { name: client.name, version: client.version } } : {}),
|
package/dist/calllog.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"calllog.js","sourceRoot":"","sources":["../src/calllog.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"calllog.js","sourceRoot":"","sources":["../src/calllog.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.js
CHANGED
|
@@ -15,18 +15,22 @@ Usage
|
|
|
15
15
|
autopoiesis-mcp --http Streamable HTTP server on PORT (default 8080), one token per request
|
|
16
16
|
|
|
17
17
|
Options
|
|
18
|
-
--token <apk_…> your personal access token (
|
|
18
|
+
--token <apk_…> your personal access token (better: AUTOPOIESIS_TOKEN, a flag shows in the process list)
|
|
19
19
|
--api-url <url> the platform API (or AUTOPOIESIS_API_URL; default ${DEFAULT_API_URL})
|
|
20
20
|
--app-url <url> the web app, for links (or AUTOPOIESIS_APP_URL; default ${DEFAULT_APP_URL})
|
|
21
21
|
--public-url <url> this server's public address when hosted (or AUTOPOIESIS_MCP_URL)
|
|
22
22
|
--port <n> --http only (or PORT)
|
|
23
|
-
--host <addr> --http only (default 0.0.0.0)
|
|
23
|
+
--host <addr> --http only (or HOST; default 127.0.0.1, this machine only; 0.0.0.0 to serve others)
|
|
24
24
|
--version, --help
|
|
25
25
|
|
|
26
26
|
Files
|
|
27
27
|
On stdio the server runs on your machine, so upload_media and import_video_plan take paths (a recording, a folder of
|
|
28
28
|
footage, a plan.json or zip) and upload them to the Studio in 8 MB chunks. Hosted servers take URLs; set
|
|
29
|
-
AUTOPOIESIS_ALLOW_PATHS=1 to let a server you run for yourself read its host's files too.
|
|
29
|
+
AUTOPOIESIS_ALLOW_PATHS=1 to let a server you run for yourself on 127.0.0.1 read its host's files too. Only images,
|
|
30
|
+
clips and audio are read, and you confirm the list before anything leaves the machine.
|
|
31
|
+
|
|
32
|
+
Hosted
|
|
33
|
+
AUTOPOIESIS_ALLOWED_HOSTS, AUTOPOIESIS_ALLOWED_ORIGINS comma-separated hostnames and browser origins to accept
|
|
30
34
|
|
|
31
35
|
Get a token: open the app → Connectors → MCP → Make the token. Docs: https://docs.autopoiesis.app
|
|
32
36
|
`;
|
|
@@ -38,7 +42,8 @@ const env = process.env;
|
|
|
38
42
|
const apiUrl = arg('--api-url') ?? env.AUTOPOIESIS_API_URL ?? DEFAULT_API_URL;
|
|
39
43
|
const appUrl = arg('--app-url') ?? env.AUTOPOIESIS_APP_URL ?? DEFAULT_APP_URL;
|
|
40
44
|
const publicUrl = arg('--public-url') ?? env.AUTOPOIESIS_MCP_URL;
|
|
41
|
-
const
|
|
45
|
+
const list = (value) => (value ?? '').split(',').map((d) => d.trim()).filter(Boolean);
|
|
46
|
+
const mediaDomains = list(env.AUTOPOIESIS_MEDIA_DOMAINS);
|
|
42
47
|
if (process.argv.includes('--help') || process.argv.includes('-h')) {
|
|
43
48
|
process.stdout.write(HELP);
|
|
44
49
|
}
|
|
@@ -47,8 +52,16 @@ else if (process.argv.includes('--version') || process.argv.includes('-v')) {
|
|
|
47
52
|
}
|
|
48
53
|
else if (process.argv.includes('--http')) {
|
|
49
54
|
const port = Number(arg('--port') ?? env.PORT ?? 8080);
|
|
50
|
-
const host = arg('--host') ?? env.HOST ?? '
|
|
51
|
-
|
|
55
|
+
const host = arg('--host') ?? env.HOST ?? '127.0.0.1';
|
|
56
|
+
try {
|
|
57
|
+
if (!Number.isInteger(port) || port < 0 || port > 65535)
|
|
58
|
+
throw new Error(`Not a port: ${arg('--port') ?? env.PORT}`);
|
|
59
|
+
serveHttp({ port, host, apiUrl, appUrl, ...(publicUrl ? { publicUrl } : {}), mediaDomains, local: env.AUTOPOIESIS_ALLOW_PATHS === '1', allowedHosts: list(env.AUTOPOIESIS_ALLOWED_HOSTS), allowedOrigins: list(env.AUTOPOIESIS_ALLOWED_ORIGINS) });
|
|
60
|
+
}
|
|
61
|
+
catch (error) {
|
|
62
|
+
process.stderr.write(`autopoiesis-mcp: ${error.message}\n`);
|
|
63
|
+
process.exit(1);
|
|
64
|
+
}
|
|
52
65
|
}
|
|
53
66
|
else {
|
|
54
67
|
const token = arg('--token') ?? env.AUTOPOIESIS_TOKEN;
|
|
@@ -56,7 +69,15 @@ else {
|
|
|
56
69
|
process.stderr.write('autopoiesis-mcp: no token. Set AUTOPOIESIS_TOKEN (make one in the app: Connectors → MCP) or pass --token.\n');
|
|
57
70
|
process.exit(1);
|
|
58
71
|
}
|
|
59
|
-
const
|
|
72
|
+
const make = () => createServer({ token, apiUrl, appUrl, mediaDomains, local: true, ...(publicUrl ? { publicUrl } : {}) });
|
|
73
|
+
try {
|
|
74
|
+
make(); // a bad address says so now, not on the first call
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
process.stderr.write(`autopoiesis-mcp: ${error.message}\n`);
|
|
78
|
+
process.exit(1);
|
|
79
|
+
}
|
|
80
|
+
const handle = serveStdio(make, {
|
|
60
81
|
legacy: 'serve',
|
|
61
82
|
onerror: (error) => process.stderr.write(`autopoiesis-mcp: ${error.message}\n`),
|
|
62
83
|
});
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;GAGG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAA;AAC/D,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AACrF,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAA;AAErC,MAAM,IAAI,GAAG,mBAAmB,OAAO;;;;;;;;;;4EAUqC,eAAe;kFACT,eAAe
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/files.d.ts
CHANGED
|
@@ -24,7 +24,7 @@ export declare function expandHome(path: string): string;
|
|
|
24
24
|
export declare function expandPath(path: string): Promise<string[]>;
|
|
25
25
|
export declare function pathSource(path: string): Promise<Source>;
|
|
26
26
|
/** A public link: streamed when its size is known, read whole (up to 512 MB) when it is not. */
|
|
27
|
-
export declare function urlSource(url: string,
|
|
27
|
+
export declare function urlSource(url: string, outside: typeof fetch, signal?: AbortSignal): Promise<Source>;
|
|
28
28
|
export declare function bytesSource(name: string, data: Buffer, type?: string): Source;
|
|
29
29
|
/** A zip entry: streamed by range when stored, inflated whole when deflated. */
|
|
30
30
|
export declare function zipSource(range: ByteRange, entry: ZipEntry): Source;
|
|
@@ -61,10 +61,16 @@ export interface PlanBundle {
|
|
|
61
61
|
files: Record<string, () => Promise<Source>>;
|
|
62
62
|
close(): Promise<void>;
|
|
63
63
|
}
|
|
64
|
-
/**
|
|
64
|
+
/**
|
|
65
|
+
* A plan from this machine: a zip, a plan.json (the files beside it come along), or a folder holding plan.json. The plan's
|
|
66
|
+
* text goes to the platform, so only a file really named plan.json or .zip is read: this is how the path can't be a
|
|
67
|
+
* credentials file that happens to be JSON. A link is judged on what it points at.
|
|
68
|
+
*/
|
|
65
69
|
export declare function planFromPath(path: string): Promise<PlanBundle>;
|
|
66
70
|
/** A plan from a link: a zip or a plan.json, read whole (up to 512 MB). */
|
|
67
|
-
export declare function planFromUrl(url: string,
|
|
71
|
+
export declare function planFromUrl(url: string, outside: typeof fetch, signal?: AbortSignal): Promise<PlanBundle>;
|
|
68
72
|
/** Why a path can't be read on this connection, with the way out. */
|
|
69
73
|
export declare function noLocalFiles(s: Session, companyId?: string): ToolError;
|
|
74
|
+
/** The dialog before files leave this machine: what goes, and how much of it. */
|
|
75
|
+
export declare function uploadQuestion(names: string[], bytes: number, where: string): string;
|
|
70
76
|
export declare function describeApiError(error: unknown): string;
|