@askthew/mcp-plugin 0.4.10 → 0.4.12
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/README.md +43 -179
- package/dist/cli.d.ts +0 -6
- package/dist/cli.js +255 -723
- package/dist/cloud-client.d.ts +80 -0
- package/dist/cloud-client.js +150 -0
- package/dist/index.d.ts +20 -123
- package/dist/index.js +155 -1353
- package/dist/install.d.ts +33 -119
- package/dist/install.js +140 -614
- package/dist/lib/paths.d.ts +2 -2
- package/dist/lib/paths.js +6 -6
- package/dist/outbox.d.ts +32 -0
- package/dist/outbox.js +101 -0
- package/dist/redaction.d.ts +11 -0
- package/dist/redaction.js +52 -0
- package/package.json +2 -2
- package/dist/lib/cli-actions.d.ts +0 -28
- package/dist/lib/cli-actions.js +0 -104
- package/dist/lib/free-install-registration.d.ts +0 -27
- package/dist/lib/free-install-registration.js +0 -52
- package/dist/lib/free-tier-policy.d.ts +0 -22
- package/dist/lib/free-tier-policy.js +0 -52
- package/dist/lib/local-identity.d.ts +0 -44
- package/dist/lib/local-identity.js +0 -81
- package/dist/lib/local-store.d.ts +0 -130
- package/dist/lib/local-store.js +0 -606
- package/dist/lib/loopback-auth.d.ts +0 -8
- package/dist/lib/loopback-auth.js +0 -30
- package/dist/lib/telemetry.d.ts +0 -25
- package/dist/lib/telemetry.js +0 -155
- package/dist/lib/timeline-insights.d.ts +0 -23
- package/dist/lib/timeline-insights.js +0 -115
- package/dist/lib/tip-engine.d.ts +0 -18
- package/dist/lib/tip-engine.js +0 -237
- package/dist/lib/upgrade-nudge.d.ts +0 -19
- package/dist/lib/upgrade-nudge.js +0 -37
- package/dist/lib/upgrade-sync.d.ts +0 -38
- package/dist/lib/upgrade-sync.js +0 -60
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
export type CloudTokenFile = {
|
|
2
|
+
token: string;
|
|
3
|
+
install_id: string;
|
|
4
|
+
tier?: "free" | "paid";
|
|
5
|
+
workspace_id?: string | null;
|
|
6
|
+
token_purpose?: "conversation" | "device";
|
|
7
|
+
api_url?: string;
|
|
8
|
+
};
|
|
9
|
+
export type Fetcher = typeof fetch;
|
|
10
|
+
export type CloudClientOptions = {
|
|
11
|
+
apiUrl?: string;
|
|
12
|
+
token?: string;
|
|
13
|
+
fetcher?: Fetcher;
|
|
14
|
+
env?: NodeJS.ProcessEnv;
|
|
15
|
+
};
|
|
16
|
+
export declare function loadCloudToken(env?: NodeJS.ProcessEnv): CloudTokenFile | null;
|
|
17
|
+
export declare function saveCloudToken(tokenFile: CloudTokenFile, env?: NodeJS.ProcessEnv): void;
|
|
18
|
+
export declare class AskTheWCloudClient {
|
|
19
|
+
private readonly apiUrl;
|
|
20
|
+
private readonly token?;
|
|
21
|
+
private readonly fetcher;
|
|
22
|
+
constructor(options?: CloudClientOptions);
|
|
23
|
+
hasToken(): boolean;
|
|
24
|
+
request(path: string, init?: RequestInit): Promise<{
|
|
25
|
+
ok: boolean;
|
|
26
|
+
status: number;
|
|
27
|
+
body: any;
|
|
28
|
+
}>;
|
|
29
|
+
captureSignal(payload: Record<string, unknown>): Promise<{
|
|
30
|
+
ok: boolean;
|
|
31
|
+
status: number;
|
|
32
|
+
body: any;
|
|
33
|
+
}>;
|
|
34
|
+
listSignals(input?: {
|
|
35
|
+
sessionId?: string;
|
|
36
|
+
since?: string;
|
|
37
|
+
limit?: number;
|
|
38
|
+
}): Promise<{
|
|
39
|
+
body: unknown;
|
|
40
|
+
ok: boolean;
|
|
41
|
+
status: number;
|
|
42
|
+
}>;
|
|
43
|
+
createDecision(payload: Record<string, unknown>): Promise<{
|
|
44
|
+
ok: boolean;
|
|
45
|
+
status: number;
|
|
46
|
+
body: any;
|
|
47
|
+
}>;
|
|
48
|
+
listDecisions(input?: {
|
|
49
|
+
limit?: number;
|
|
50
|
+
}): Promise<{
|
|
51
|
+
body: unknown;
|
|
52
|
+
ok: boolean;
|
|
53
|
+
status: number;
|
|
54
|
+
}>;
|
|
55
|
+
recap(input: Record<string, unknown>): Promise<{
|
|
56
|
+
ok: boolean;
|
|
57
|
+
status: number;
|
|
58
|
+
body: any;
|
|
59
|
+
}>;
|
|
60
|
+
coach(input: Record<string, unknown>): Promise<{
|
|
61
|
+
ok: boolean;
|
|
62
|
+
status: number;
|
|
63
|
+
body: any;
|
|
64
|
+
}>;
|
|
65
|
+
}
|
|
66
|
+
export declare function startSignup(input: {
|
|
67
|
+
email: string;
|
|
68
|
+
apiUrl?: string;
|
|
69
|
+
clientHint?: string;
|
|
70
|
+
fetcher?: Fetcher;
|
|
71
|
+
}): Promise<any>;
|
|
72
|
+
export declare function completeSignup(input: {
|
|
73
|
+
email: string;
|
|
74
|
+
code: string;
|
|
75
|
+
apiUrl?: string;
|
|
76
|
+
clientHint?: string;
|
|
77
|
+
tokenPurpose?: "conversation" | "device";
|
|
78
|
+
fetcher?: Fetcher;
|
|
79
|
+
env?: NodeJS.ProcessEnv;
|
|
80
|
+
}): Promise<any>;
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import { cloudTokenPath, readJsonFile, writePrivateJson } from "./lib/paths.js";
|
|
2
|
+
function trimBaseUrl(value) {
|
|
3
|
+
return (value?.trim() || "https://app.askthew.com").replace(/\/+$/, "");
|
|
4
|
+
}
|
|
5
|
+
export function loadCloudToken(env = process.env) {
|
|
6
|
+
return readJsonFile(cloudTokenPath(env));
|
|
7
|
+
}
|
|
8
|
+
export function saveCloudToken(tokenFile, env = process.env) {
|
|
9
|
+
writePrivateJson(cloudTokenPath(env), tokenFile);
|
|
10
|
+
}
|
|
11
|
+
function snakeSignal(payload) {
|
|
12
|
+
return {
|
|
13
|
+
kind: payload.kind,
|
|
14
|
+
summary: payload.summary,
|
|
15
|
+
session_id: payload.sessionId,
|
|
16
|
+
sequence: payload.sequence,
|
|
17
|
+
idempotency_key: payload.idempotencyKey,
|
|
18
|
+
client_id: payload.clientId,
|
|
19
|
+
scope_key: payload.scopeKey,
|
|
20
|
+
evidence: payload.evidence,
|
|
21
|
+
files_touched: payload.filesTouched,
|
|
22
|
+
commands_run: payload.commandsRun,
|
|
23
|
+
metadata: payload.metadata,
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
function camelize(value) {
|
|
27
|
+
if (Array.isArray(value))
|
|
28
|
+
return value.map(camelize);
|
|
29
|
+
if (typeof value !== "object" || value === null)
|
|
30
|
+
return value;
|
|
31
|
+
return Object.fromEntries(Object.entries(value).map(([key, entry]) => [
|
|
32
|
+
key.replace(/_([a-z])/g, (_, char) => char.toUpperCase()),
|
|
33
|
+
camelize(entry),
|
|
34
|
+
]));
|
|
35
|
+
}
|
|
36
|
+
export class AskTheWCloudClient {
|
|
37
|
+
apiUrl;
|
|
38
|
+
token;
|
|
39
|
+
fetcher;
|
|
40
|
+
constructor(options = {}) {
|
|
41
|
+
const tokenFile = loadCloudToken(options.env);
|
|
42
|
+
this.apiUrl = trimBaseUrl(options.apiUrl ?? tokenFile?.api_url);
|
|
43
|
+
this.token = options.token ?? tokenFile?.token;
|
|
44
|
+
this.fetcher = options.fetcher ?? fetch;
|
|
45
|
+
}
|
|
46
|
+
hasToken() {
|
|
47
|
+
return Boolean(this.token);
|
|
48
|
+
}
|
|
49
|
+
async request(path, init = {}) {
|
|
50
|
+
if (!this.token) {
|
|
51
|
+
return {
|
|
52
|
+
ok: false,
|
|
53
|
+
status: 401,
|
|
54
|
+
body: {
|
|
55
|
+
ok: false,
|
|
56
|
+
code: "needs_signup",
|
|
57
|
+
message: "Ask The W needs signup. Call askthew_start_signup, then askthew_complete_signup.",
|
|
58
|
+
},
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
const response = await this.fetcher(`${this.apiUrl}/api/v1/agent${path}`, {
|
|
62
|
+
...init,
|
|
63
|
+
headers: {
|
|
64
|
+
"Content-Type": "application/json",
|
|
65
|
+
Authorization: `Bearer ${this.token}`,
|
|
66
|
+
...(init.headers ?? {}),
|
|
67
|
+
},
|
|
68
|
+
});
|
|
69
|
+
const body = await response.json().catch(() => ({}));
|
|
70
|
+
return { ok: response.ok, status: response.status, body };
|
|
71
|
+
}
|
|
72
|
+
async captureSignal(payload) {
|
|
73
|
+
return this.request("/signals", {
|
|
74
|
+
method: "POST",
|
|
75
|
+
body: JSON.stringify(snakeSignal(payload)),
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
async listSignals(input = {}) {
|
|
79
|
+
const params = new URLSearchParams();
|
|
80
|
+
if (input.sessionId)
|
|
81
|
+
params.set("session_id", input.sessionId);
|
|
82
|
+
if (input.since)
|
|
83
|
+
params.set("since", input.since);
|
|
84
|
+
if (input.limit)
|
|
85
|
+
params.set("limit", String(input.limit));
|
|
86
|
+
const result = await this.request(`/signals${params.size ? `?${params.toString()}` : ""}`);
|
|
87
|
+
return { ...result, body: camelize(result.body) };
|
|
88
|
+
}
|
|
89
|
+
async createDecision(payload) {
|
|
90
|
+
const body = {
|
|
91
|
+
content: payload.content,
|
|
92
|
+
source_signal_ids: payload.sourceSignalIds,
|
|
93
|
+
status: payload.status,
|
|
94
|
+
outcome_id: payload.outcomeId,
|
|
95
|
+
};
|
|
96
|
+
return this.request("/decisions", { method: "POST", body: JSON.stringify(body) });
|
|
97
|
+
}
|
|
98
|
+
async listDecisions(input = {}) {
|
|
99
|
+
const params = new URLSearchParams();
|
|
100
|
+
if (input.limit)
|
|
101
|
+
params.set("limit", String(input.limit));
|
|
102
|
+
const result = await this.request(`/decisions${params.size ? `?${params.toString()}` : ""}`);
|
|
103
|
+
return { ...result, body: camelize(result.body) };
|
|
104
|
+
}
|
|
105
|
+
async recap(input) {
|
|
106
|
+
return this.request("/recap", {
|
|
107
|
+
method: "POST",
|
|
108
|
+
body: JSON.stringify({ since: input.since, max_signals: input.maxSignals }),
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
async coach(input) {
|
|
112
|
+
return this.request("/coach", {
|
|
113
|
+
method: "POST",
|
|
114
|
+
body: JSON.stringify({ focus: input.focus }),
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
export async function startSignup(input) {
|
|
119
|
+
const base = trimBaseUrl(input.apiUrl);
|
|
120
|
+
const response = await (input.fetcher ?? fetch)(`${base}/api/v1/agent/signup`, {
|
|
121
|
+
method: "POST",
|
|
122
|
+
headers: { "Content-Type": "application/json" },
|
|
123
|
+
body: JSON.stringify({ email: input.email, client_hint: input.clientHint }),
|
|
124
|
+
});
|
|
125
|
+
return response.json();
|
|
126
|
+
}
|
|
127
|
+
export async function completeSignup(input) {
|
|
128
|
+
const base = trimBaseUrl(input.apiUrl);
|
|
129
|
+
const response = await (input.fetcher ?? fetch)(`${base}/api/v1/agent/verify`, {
|
|
130
|
+
method: "POST",
|
|
131
|
+
headers: { "Content-Type": "application/json" },
|
|
132
|
+
body: JSON.stringify({
|
|
133
|
+
email: input.email,
|
|
134
|
+
code: input.code,
|
|
135
|
+
client_hint: input.clientHint,
|
|
136
|
+
token_purpose: input.tokenPurpose ?? "device",
|
|
137
|
+
}),
|
|
138
|
+
});
|
|
139
|
+
const body = await response.json();
|
|
140
|
+
if (response.ok && body?.ok && body.token && body.install_id) {
|
|
141
|
+
saveCloudToken({
|
|
142
|
+
token: body.token,
|
|
143
|
+
install_id: body.install_id,
|
|
144
|
+
tier: "free",
|
|
145
|
+
token_purpose: input.tokenPurpose ?? "device",
|
|
146
|
+
api_url: base,
|
|
147
|
+
}, input.env);
|
|
148
|
+
}
|
|
149
|
+
return body;
|
|
150
|
+
}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,168 +1,65 @@
|
|
|
1
1
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
2
|
import { z } from "zod";
|
|
3
|
+
import { type Fetcher } from "./cloud-client.js";
|
|
4
|
+
import { Outbox } from "./outbox.js";
|
|
3
5
|
export declare const codingSessionSignalSchema: z.ZodObject<{
|
|
4
6
|
sessionId: z.ZodString;
|
|
5
7
|
sequence: z.ZodNumber;
|
|
6
8
|
kind: z.ZodEnum<["setup_complete", "session_checkpoint", "direction_change", "implementation_update", "verification_result", "final_summary"]>;
|
|
7
9
|
summary: z.ZodString;
|
|
10
|
+
idempotencyKey: z.ZodEffects<z.ZodString, string, string>;
|
|
11
|
+
clientId: z.ZodOptional<z.ZodEnum<["claude_code", "codex", "cursor", "web_agent"]>>;
|
|
12
|
+
scopeKey: z.ZodDefault<z.ZodString>;
|
|
8
13
|
evidence: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
9
14
|
role: z.ZodEnum<["user", "assistant", "system"]>;
|
|
10
15
|
excerpt: z.ZodString;
|
|
11
|
-
kind: z.ZodOptional<z.ZodEnum<["excerpt", "diff", "prompt_diff"]>>;
|
|
12
|
-
diff: z.ZodOptional<z.ZodString>;
|
|
13
|
-
before: z.ZodOptional<z.ZodString>;
|
|
14
|
-
after: z.ZodOptional<z.ZodString>;
|
|
15
16
|
}, "strip", z.ZodTypeAny, {
|
|
16
17
|
role: "user" | "assistant" | "system";
|
|
17
18
|
excerpt: string;
|
|
18
|
-
diff?: string | undefined;
|
|
19
|
-
kind?: "diff" | "excerpt" | "prompt_diff" | undefined;
|
|
20
|
-
before?: string | undefined;
|
|
21
|
-
after?: string | undefined;
|
|
22
19
|
}, {
|
|
23
20
|
role: "user" | "assistant" | "system";
|
|
24
21
|
excerpt: string;
|
|
25
|
-
diff?: string | undefined;
|
|
26
|
-
kind?: "diff" | "excerpt" | "prompt_diff" | undefined;
|
|
27
|
-
before?: string | undefined;
|
|
28
|
-
after?: string | undefined;
|
|
29
22
|
}>, "many">>;
|
|
30
23
|
filesTouched: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
|
|
31
24
|
commandsRun: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
|
|
32
25
|
metadata: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
33
26
|
}, "strip", z.ZodTypeAny, {
|
|
34
|
-
sessionId: string;
|
|
35
27
|
kind: "setup_complete" | "session_checkpoint" | "direction_change" | "implementation_update" | "verification_result" | "final_summary";
|
|
36
|
-
sequence: number;
|
|
37
28
|
summary: string;
|
|
29
|
+
sessionId: string;
|
|
30
|
+
sequence: number;
|
|
31
|
+
idempotencyKey: string;
|
|
32
|
+
scopeKey: string;
|
|
38
33
|
evidence: {
|
|
39
34
|
role: "user" | "assistant" | "system";
|
|
40
35
|
excerpt: string;
|
|
41
|
-
diff?: string | undefined;
|
|
42
|
-
kind?: "diff" | "excerpt" | "prompt_diff" | undefined;
|
|
43
|
-
before?: string | undefined;
|
|
44
|
-
after?: string | undefined;
|
|
45
36
|
}[];
|
|
46
37
|
filesTouched: string[];
|
|
47
38
|
commandsRun: string[];
|
|
48
39
|
metadata: Record<string, unknown>;
|
|
40
|
+
clientId?: "claude_code" | "codex" | "cursor" | "web_agent" | undefined;
|
|
49
41
|
}, {
|
|
50
|
-
sessionId: string;
|
|
51
42
|
kind: "setup_complete" | "session_checkpoint" | "direction_change" | "implementation_update" | "verification_result" | "final_summary";
|
|
52
|
-
sequence: number;
|
|
53
43
|
summary: string;
|
|
44
|
+
sessionId: string;
|
|
45
|
+
sequence: number;
|
|
46
|
+
idempotencyKey: string;
|
|
47
|
+
clientId?: "claude_code" | "codex" | "cursor" | "web_agent" | undefined;
|
|
48
|
+
scopeKey?: string | undefined;
|
|
54
49
|
evidence?: {
|
|
55
50
|
role: "user" | "assistant" | "system";
|
|
56
51
|
excerpt: string;
|
|
57
|
-
diff?: string | undefined;
|
|
58
|
-
kind?: "diff" | "excerpt" | "prompt_diff" | undefined;
|
|
59
|
-
before?: string | undefined;
|
|
60
|
-
after?: string | undefined;
|
|
61
52
|
}[] | undefined;
|
|
62
53
|
filesTouched?: string[] | undefined;
|
|
63
54
|
commandsRun?: string[] | undefined;
|
|
64
55
|
metadata?: Record<string, unknown> | undefined;
|
|
65
56
|
}>;
|
|
66
57
|
export type CodingSessionSignal = z.infer<typeof codingSessionSignalSchema>;
|
|
67
|
-
export declare const provenanceSignalSchema: z.ZodObject<{
|
|
68
|
-
source: z.ZodString;
|
|
69
|
-
decision: z.ZodString;
|
|
70
|
-
rationale: z.ZodString;
|
|
71
|
-
confidence: z.ZodNumber;
|
|
72
|
-
framework: z.ZodOptional<z.ZodString>;
|
|
73
|
-
filesAffected: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
|
|
74
|
-
sessionId: z.ZodString;
|
|
75
|
-
pendingApproval: z.ZodOptional<z.ZodBoolean>;
|
|
76
|
-
originatingPrompt: z.ZodOptional<z.ZodString>;
|
|
77
|
-
installToken: z.ZodOptional<z.ZodString>;
|
|
78
|
-
metadata: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
79
|
-
}, "strip", z.ZodTypeAny, {
|
|
80
|
-
sessionId: string;
|
|
81
|
-
metadata: Record<string, unknown>;
|
|
82
|
-
source: string;
|
|
83
|
-
decision: string;
|
|
84
|
-
rationale: string;
|
|
85
|
-
confidence: number;
|
|
86
|
-
filesAffected: string[];
|
|
87
|
-
framework?: string | undefined;
|
|
88
|
-
pendingApproval?: boolean | undefined;
|
|
89
|
-
originatingPrompt?: string | undefined;
|
|
90
|
-
installToken?: string | undefined;
|
|
91
|
-
}, {
|
|
92
|
-
sessionId: string;
|
|
93
|
-
source: string;
|
|
94
|
-
decision: string;
|
|
95
|
-
rationale: string;
|
|
96
|
-
confidence: number;
|
|
97
|
-
metadata?: Record<string, unknown> | undefined;
|
|
98
|
-
framework?: string | undefined;
|
|
99
|
-
filesAffected?: string[] | undefined;
|
|
100
|
-
pendingApproval?: boolean | undefined;
|
|
101
|
-
originatingPrompt?: string | undefined;
|
|
102
|
-
installToken?: string | undefined;
|
|
103
|
-
}>;
|
|
104
|
-
export type ProvenanceSignal = z.infer<typeof provenanceSignalSchema>;
|
|
105
|
-
type AskTheWConfig = {
|
|
106
|
-
redaction?: {
|
|
107
|
-
enabled?: boolean;
|
|
108
|
-
};
|
|
109
|
-
digest?: {
|
|
110
|
-
footer?: boolean;
|
|
111
|
-
};
|
|
112
|
-
};
|
|
113
|
-
export declare function loadAskTheWConfig(env?: NodeJS.ProcessEnv): AskTheWConfig;
|
|
114
|
-
export declare function redactProvenanceSignal(input: ProvenanceSignal): {
|
|
115
|
-
sessionId: string;
|
|
116
|
-
metadata: Record<string, unknown>;
|
|
117
|
-
source: string;
|
|
118
|
-
decision: string;
|
|
119
|
-
rationale: string;
|
|
120
|
-
confidence: number;
|
|
121
|
-
filesAffected: string[];
|
|
122
|
-
framework?: string | undefined;
|
|
123
|
-
pendingApproval?: boolean | undefined;
|
|
124
|
-
originatingPrompt?: string | undefined;
|
|
125
|
-
installToken?: string | undefined;
|
|
126
|
-
};
|
|
127
|
-
export declare function redactCodingSessionSignal(input: CodingSessionSignal): {
|
|
128
|
-
sessionId: string;
|
|
129
|
-
kind: "setup_complete" | "session_checkpoint" | "direction_change" | "implementation_update" | "verification_result" | "final_summary";
|
|
130
|
-
sequence: number;
|
|
131
|
-
summary: string;
|
|
132
|
-
evidence: {
|
|
133
|
-
role: "user" | "assistant" | "system";
|
|
134
|
-
excerpt: string;
|
|
135
|
-
diff?: string | undefined;
|
|
136
|
-
kind?: "diff" | "excerpt" | "prompt_diff" | undefined;
|
|
137
|
-
before?: string | undefined;
|
|
138
|
-
after?: string | undefined;
|
|
139
|
-
}[];
|
|
140
|
-
filesTouched: string[];
|
|
141
|
-
commandsRun: string[];
|
|
142
|
-
metadata: Record<string, unknown>;
|
|
143
|
-
};
|
|
144
58
|
export interface AskTheWMcpServerOptions {
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
serverName?: string;
|
|
150
|
-
clientId?: string;
|
|
151
|
-
clientLabel?: string;
|
|
152
|
-
hostType?: "claude_code" | "codex" | "cursor";
|
|
153
|
-
};
|
|
154
|
-
apiBaseUrl?: string;
|
|
155
|
-
fetchImpl?: typeof fetch;
|
|
156
|
-
runtimeMetadata?: Record<string, unknown> | (() => Record<string, unknown>);
|
|
157
|
-
sendStartupHeartbeat?: boolean;
|
|
59
|
+
apiUrl?: string;
|
|
60
|
+
fetcher?: Fetcher;
|
|
61
|
+
env?: NodeJS.ProcessEnv;
|
|
62
|
+
outbox?: Outbox;
|
|
158
63
|
}
|
|
159
|
-
export declare function normalizeInstallTokenInput(token: string | undefined): string;
|
|
160
64
|
export declare function createAskTheWMcpServer(options?: AskTheWMcpServerOptions): McpServer;
|
|
161
|
-
export declare function
|
|
162
|
-
entrypoint?: string;
|
|
163
|
-
env?: NodeJS.ProcessEnv;
|
|
164
|
-
timeoutMs?: number;
|
|
165
|
-
}): Promise<{
|
|
166
|
-
serverInfoVersion?: string;
|
|
167
|
-
}>;
|
|
168
|
-
export {};
|
|
65
|
+
export declare function runStdioServer(options?: AskTheWMcpServerOptions): Promise<void>;
|