@scanton/phase2s 1.1.0 → 1.9.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/README.md +19 -1
- package/dist/src/cli/doctor.d.ts +39 -0
- package/dist/src/cli/doctor.d.ts.map +1 -0
- package/dist/src/cli/doctor.js +244 -0
- package/dist/src/cli/doctor.js.map +1 -0
- package/dist/src/cli/goal.d.ts +36 -1
- package/dist/src/cli/goal.d.ts.map +1 -1
- package/dist/src/cli/goal.js +243 -16
- package/dist/src/cli/goal.js.map +1 -1
- package/dist/src/cli/index.d.ts.map +1 -1
- package/dist/src/cli/index.js +117 -9
- package/dist/src/cli/index.js.map +1 -1
- package/dist/src/cli/init.d.ts +73 -0
- package/dist/src/cli/init.d.ts.map +1 -0
- package/dist/src/cli/init.js +366 -0
- package/dist/src/cli/init.js.map +1 -0
- package/dist/src/cli/lint.d.ts +32 -0
- package/dist/src/cli/lint.d.ts.map +1 -0
- package/dist/src/cli/lint.js +171 -0
- package/dist/src/cli/lint.js.map +1 -0
- package/dist/src/cli/report.d.ts +62 -0
- package/dist/src/cli/report.d.ts.map +1 -0
- package/dist/src/cli/report.js +188 -0
- package/dist/src/cli/report.js.map +1 -0
- package/dist/src/cli/upgrade.d.ts +35 -0
- package/dist/src/cli/upgrade.d.ts.map +1 -0
- package/dist/src/cli/upgrade.js +126 -0
- package/dist/src/cli/upgrade.js.map +1 -0
- package/dist/src/core/config.d.ts +60 -8
- package/dist/src/core/config.d.ts.map +1 -1
- package/dist/src/core/config.js +31 -1
- package/dist/src/core/config.js.map +1 -1
- package/dist/src/core/notify.d.ts +41 -0
- package/dist/src/core/notify.d.ts.map +1 -0
- package/dist/src/core/notify.js +153 -0
- package/dist/src/core/notify.js.map +1 -0
- package/dist/src/core/run-logger.d.ts +83 -0
- package/dist/src/core/run-logger.d.ts.map +1 -0
- package/dist/src/core/run-logger.js +70 -0
- package/dist/src/core/run-logger.js.map +1 -0
- package/dist/src/mcp/server.d.ts +9 -0
- package/dist/src/mcp/server.d.ts.map +1 -1
- package/dist/src/mcp/server.js +148 -1
- package/dist/src/mcp/server.js.map +1 -1
- package/dist/src/providers/gemini.d.ts +29 -0
- package/dist/src/providers/gemini.d.ts.map +1 -0
- package/dist/src/providers/gemini.js +47 -0
- package/dist/src/providers/gemini.js.map +1 -0
- package/dist/src/providers/index.d.ts +2 -0
- package/dist/src/providers/index.d.ts.map +1 -1
- package/dist/src/providers/index.js +8 -0
- package/dist/src/providers/index.js.map +1 -1
- package/dist/src/providers/openrouter.d.ts +25 -0
- package/dist/src/providers/openrouter.d.ts.map +1 -0
- package/dist/src/providers/openrouter.js +43 -0
- package/dist/src/providers/openrouter.js.map +1 -0
- package/dist/src/tools/registry.d.ts +5 -3
- package/dist/src/tools/registry.d.ts.map +1 -1
- package/dist/src/tools/registry.js +35 -12
- package/dist/src/tools/registry.js.map +1 -1
- package/package.json +1 -1
package/dist/src/mcp/server.js
CHANGED
|
@@ -18,6 +18,8 @@ import { loadConfig } from "../core/config.js";
|
|
|
18
18
|
import { Agent } from "../core/agent.js";
|
|
19
19
|
import { substituteInputs, stripAskTokens } from "../skills/template.js";
|
|
20
20
|
import { readRawState, writeRawState, clearRawState } from "../core/state.js";
|
|
21
|
+
import { runGoal } from "../cli/goal.js";
|
|
22
|
+
import { parseRunLog, buildRunReport, formatRunReport } from "../cli/report.js";
|
|
21
23
|
import { join } from "node:path";
|
|
22
24
|
export const MCP_SERVER_VERSION = "0.18.0";
|
|
23
25
|
// ---------------------------------------------------------------------------
|
|
@@ -122,6 +124,65 @@ export const STATE_TOOLS = [
|
|
|
122
124
|
},
|
|
123
125
|
];
|
|
124
126
|
// ---------------------------------------------------------------------------
|
|
127
|
+
// Goal tool descriptor
|
|
128
|
+
// ---------------------------------------------------------------------------
|
|
129
|
+
/**
|
|
130
|
+
* MCP tool descriptor for the dark factory goal executor.
|
|
131
|
+
*
|
|
132
|
+
* LONG-RUNNING: dark factory runs can take 20+ minutes. The MCP 2024-11-05
|
|
133
|
+
* spec has no timeout requirement at the transport level, so synchronous
|
|
134
|
+
* execution is safe. Claude Code should not expect a fast response.
|
|
135
|
+
*/
|
|
136
|
+
export const GOAL_TOOL = {
|
|
137
|
+
name: "phase2s__goal",
|
|
138
|
+
description: "Execute a spec file through the dark factory: optional adversarial pre-check, " +
|
|
139
|
+
"implement each sub-task via satori, evaluate, retry until done. " +
|
|
140
|
+
"LONG-RUNNING: may take 20+ minutes. Returns run summary + ABSOLUTE path to " +
|
|
141
|
+
"structured JSONL run log. Read the log with file_read for per-sub-task details.",
|
|
142
|
+
inputSchema: {
|
|
143
|
+
type: "object",
|
|
144
|
+
properties: {
|
|
145
|
+
specFile: {
|
|
146
|
+
type: "string",
|
|
147
|
+
description: "Path to spec file (relative to project root or absolute).",
|
|
148
|
+
},
|
|
149
|
+
maxAttempts: {
|
|
150
|
+
type: "number",
|
|
151
|
+
description: "Max retry loops (default: 3).",
|
|
152
|
+
},
|
|
153
|
+
resume: {
|
|
154
|
+
type: "boolean",
|
|
155
|
+
description: "Resume from last completed sub-task.",
|
|
156
|
+
},
|
|
157
|
+
reviewBeforeRun: {
|
|
158
|
+
type: "boolean",
|
|
159
|
+
description: "Run adversarial review on spec before executing (recommended for new specs).",
|
|
160
|
+
},
|
|
161
|
+
notify: {
|
|
162
|
+
type: "boolean",
|
|
163
|
+
description: "Send a notification when the run completes (macOS + PHASE2S_SLACK_WEBHOOK if set).",
|
|
164
|
+
},
|
|
165
|
+
},
|
|
166
|
+
required: ["specFile"],
|
|
167
|
+
},
|
|
168
|
+
};
|
|
169
|
+
export const REPORT_TOOL = {
|
|
170
|
+
name: "phase2s__report",
|
|
171
|
+
description: "Parse and display a human-readable summary of a Phase2S dark factory run log (.jsonl). " +
|
|
172
|
+
"Shows per-attempt sub-task timeline with durations, criteria verdicts, and total run time. " +
|
|
173
|
+
"Use after phase2s__goal completes — pass the runLogPath returned by phase2s__goal.",
|
|
174
|
+
inputSchema: {
|
|
175
|
+
type: "object",
|
|
176
|
+
properties: {
|
|
177
|
+
logFile: {
|
|
178
|
+
type: "string",
|
|
179
|
+
description: "Absolute path to the .jsonl run log file (returned by phase2s__goal as runLogPath).",
|
|
180
|
+
},
|
|
181
|
+
},
|
|
182
|
+
required: ["logFile"],
|
|
183
|
+
},
|
|
184
|
+
};
|
|
185
|
+
// ---------------------------------------------------------------------------
|
|
125
186
|
// Notification helpers
|
|
126
187
|
// ---------------------------------------------------------------------------
|
|
127
188
|
/**
|
|
@@ -208,7 +269,7 @@ export async function handleRequest(request, skills, cwd, sessionConversations)
|
|
|
208
269
|
return {
|
|
209
270
|
jsonrpc: "2.0",
|
|
210
271
|
id: request.id,
|
|
211
|
-
result: { tools: [...skills.map(skillToTool), ...STATE_TOOLS] },
|
|
272
|
+
result: { tools: [...skills.map(skillToTool), ...STATE_TOOLS, GOAL_TOOL, REPORT_TOOL] },
|
|
212
273
|
};
|
|
213
274
|
}
|
|
214
275
|
// -----------------------------------------------------------------------
|
|
@@ -219,6 +280,92 @@ export async function handleRequest(request, skills, cwd, sessionConversations)
|
|
|
219
280
|
const toolName = params?.name ?? "";
|
|
220
281
|
const args = params?.arguments ?? {};
|
|
221
282
|
// -----------------------------------------------------------------------
|
|
283
|
+
// Goal tool — dark factory executor.
|
|
284
|
+
// -----------------------------------------------------------------------
|
|
285
|
+
if (toolName === "phase2s__goal") {
|
|
286
|
+
const specFile = typeof args["specFile"] === "string" ? args["specFile"] : "";
|
|
287
|
+
if (!specFile) {
|
|
288
|
+
return {
|
|
289
|
+
jsonrpc: "2.0",
|
|
290
|
+
id: request.id,
|
|
291
|
+
error: { code: -32602, message: "phase2s__goal: specFile is required" },
|
|
292
|
+
};
|
|
293
|
+
}
|
|
294
|
+
try {
|
|
295
|
+
const result = await runGoal(specFile, {
|
|
296
|
+
maxAttempts: typeof args["maxAttempts"] === "number" ? String(args["maxAttempts"]) : undefined,
|
|
297
|
+
resume: typeof args["resume"] === "boolean" ? args["resume"] : undefined,
|
|
298
|
+
reviewBeforeRun: typeof args["reviewBeforeRun"] === "boolean" ? args["reviewBeforeRun"] : undefined,
|
|
299
|
+
notify: typeof args["notify"] === "boolean" ? args["notify"] : undefined,
|
|
300
|
+
});
|
|
301
|
+
const passCount = Object.values(result.criteriaResults).filter(Boolean).length;
|
|
302
|
+
const totalCount = Object.keys(result.criteriaResults).length;
|
|
303
|
+
const status = result.challenged
|
|
304
|
+
? (result.challengeResponse?.includes("NEEDS_CLARIFICATION") ? "needs_clarification" : "challenged")
|
|
305
|
+
: result.success
|
|
306
|
+
? "success"
|
|
307
|
+
: "failed";
|
|
308
|
+
const lines = [
|
|
309
|
+
`Goal run: ${status}`,
|
|
310
|
+
`Spec: ${specFile}`,
|
|
311
|
+
`Attempts: ${result.attempts}`,
|
|
312
|
+
totalCount > 0 ? `Criteria: ${passCount}/${totalCount} passed` : "Criteria: (none defined)",
|
|
313
|
+
`Run log (absolute): ${result.runLogPath}`,
|
|
314
|
+
];
|
|
315
|
+
if (result.challenged && result.challengeResponse) {
|
|
316
|
+
lines.push("", "Adversarial review response:", result.challengeResponse);
|
|
317
|
+
}
|
|
318
|
+
return {
|
|
319
|
+
jsonrpc: "2.0",
|
|
320
|
+
id: request.id,
|
|
321
|
+
result: { content: [{ type: "text", text: lines.join("\n") }] },
|
|
322
|
+
};
|
|
323
|
+
}
|
|
324
|
+
catch (err) {
|
|
325
|
+
return {
|
|
326
|
+
jsonrpc: "2.0",
|
|
327
|
+
id: request.id,
|
|
328
|
+
error: {
|
|
329
|
+
code: -32603,
|
|
330
|
+
message: err instanceof Error ? err.message : String(err),
|
|
331
|
+
},
|
|
332
|
+
};
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
// -----------------------------------------------------------------------
|
|
336
|
+
// Report tool — dark factory run log viewer.
|
|
337
|
+
// -----------------------------------------------------------------------
|
|
338
|
+
if (toolName === "phase2s__report") {
|
|
339
|
+
const logFile = typeof args["logFile"] === "string" ? args["logFile"] : "";
|
|
340
|
+
if (!logFile) {
|
|
341
|
+
return {
|
|
342
|
+
jsonrpc: "2.0",
|
|
343
|
+
id: request.id,
|
|
344
|
+
error: { code: -32602, message: "phase2s__report: logFile is required" },
|
|
345
|
+
};
|
|
346
|
+
}
|
|
347
|
+
try {
|
|
348
|
+
const events = parseRunLog(logFile);
|
|
349
|
+
const report = buildRunReport(events);
|
|
350
|
+
const text = formatRunReport(report);
|
|
351
|
+
return {
|
|
352
|
+
jsonrpc: "2.0",
|
|
353
|
+
id: request.id,
|
|
354
|
+
result: { content: [{ type: "text", text }] },
|
|
355
|
+
};
|
|
356
|
+
}
|
|
357
|
+
catch (err) {
|
|
358
|
+
return {
|
|
359
|
+
jsonrpc: "2.0",
|
|
360
|
+
id: request.id,
|
|
361
|
+
error: {
|
|
362
|
+
code: -32603,
|
|
363
|
+
message: err instanceof Error ? err.message : String(err),
|
|
364
|
+
},
|
|
365
|
+
};
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
// -----------------------------------------------------------------------
|
|
222
369
|
// State tools — handled before skill lookup.
|
|
223
370
|
// -----------------------------------------------------------------------
|
|
224
371
|
if (toolName === "phase2s__state_write") {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/mcp/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEzC,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACzE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAC9E,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,MAAM,CAAC,MAAM,kBAAkB,GAAG,QAAQ,CAAC;AAwC3C,8EAA8E;AAC9E,kBAAkB;AAClB,8EAA8E;AAE9E;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CAAC,KAAY;IACtC,MAAM,UAAU,GAA4B;QAC1C,MAAM,EAAE;YACN,IAAI,EAAE,QAAQ;YACd,WAAW,EAAE,2BAA2B,KAAK,CAAC,IAAI,uDAAuD;SAC1G;KACF,CAAC;IAEF,2EAA2E;IAC3E,0DAA0D;IAC1D,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QACjB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;YACxD,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;gBACnB,KAAK,SAAS;oBACZ,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;oBACjE,MAAM;gBACR,KAAK,QAAQ;oBACX,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;oBAChE,MAAM;gBACR,KAAK,MAAM;oBACT,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,WAAW,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;oBAClF,MAAM;gBACR;oBACE,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;YACpE,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO;QACL,IAAI,EAAE,YAAY,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE;QACjD,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,WAAW,KAAK,CAAC,IAAI,QAAQ;QAC/D,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU;YACV,QAAQ,EAAE,CAAC,QAAQ,CAAC;SACrB;KACF,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,QAAgB;IAClD,OAAO,QAAQ,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AAC/D,CAAC;AAED,8EAA8E;AAC9E,yBAAyB;AACzB,8EAA8E;AAE9E;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,WAAW,GAAc;IACpC;QACE,IAAI,EAAE,sBAAsB;QAC5B,WAAW,EACT,4DAA4D;YAC5D,gFAAgF;QAClF,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,iDAAiD,EAAE;gBACvF,KAAK,EAAE,EAAE,WAAW,EAAE,mCAAmC,EAAE;aAC5D;YACD,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC;SAC3B;KACF;IACD;QACE,IAAI,EAAE,qBAAqB;QAC3B,WAAW,EACT,2CAA2C;YAC3C,mEAAmE;QACrE,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,oBAAoB,EAAE;aAC3D;YACD,QAAQ,EAAE,CAAC,KAAK,CAAC;SAClB;KACF;IACD;QACE,IAAI,EAAE,sBAAsB;QAC5B,WAAW,EACT,6EAA6E;QAC/E,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,GAAG,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,sBAAsB,EAAE;aAC7D;YACD,QAAQ,EAAE,CAAC,KAAK,CAAC;SAClB;KACF;CACF,CAAC;AAEF,8EAA8E;AAC9E,uBAAuB;AACvB,8EAA8E;AAE9E;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAc,EAAE,MAAgB;IAChE,MAAM,CAAC,GAAoB,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;IACtD,IAAI,MAAM,KAAK,SAAS;QAAE,CAAC,CAAC,MAAM,GAAG,MAAM,CAAC;IAC5C,OAAO,CAAC,CAAC;AACX,CAAC;AAED,8EAA8E;AAC9E,wCAAwC;AACxC,8EAA8E;AAE9E;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAChC,SAAiB,EACjB,QAAmC,EACnC,MAAkB;IAElB,IAAI,aAAa,GAAyC,IAAI,CAAC;IAE/D,IAAI,CAAC;QACH,KAAK,CAAC,SAAS,EAAE,EAAE,UAAU,EAAE,KAAK,EAAE,EAAE,GAAG,EAAE;YAC3C,IAAI,aAAa;gBAAE,YAAY,CAAC,aAAa,CAAC,CAAC;YAC/C,aAAa,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC9B,iBAAiB,CAAC,SAAS,CAAC;qBACzB,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE;oBAChB,QAAQ,CAAC,OAAO,CAAC,CAAC;oBAClB,MAAM,EAAE,CAAC;gBACX,CAAC,CAAC;qBACD,KAAK,CAAC,GAAG,EAAE;oBACV,kEAAkE;oBAClE,4BAA4B;gBAC9B,CAAC,CAAC,CAAC;YACP,CAAC,EAAE,EAAE,CAAC,CAAC;QACT,CAAC,CAAC,CAAC;IACL,CAAC;IAAC,MAAM,CAAC;QACP,qEAAqE;QACrE,mDAAmD;IACrD,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,yCAAyC;AACzC,8EAA8E;AAE9E;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,OAAuB,EACvB,MAAe,EACf,GAAW,EACX,oBAAgD;IAEhD,0EAA0E;IAC1E,aAAa;IACb,0EAA0E;IAC1E,IAAI,OAAO,CAAC,MAAM,KAAK,YAAY,EAAE,CAAC;QACpC,OAAO;YACL,OAAO,EAAE,KAAK;YACd,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,MAAM,EAAE;gBACN,eAAe,EAAE,YAAY;gBAC7B,oEAAoE;gBACpE,4DAA4D;gBAC5D,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE;gBAC9C,UAAU,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,kBAAkB,EAAE;aAC7D;SACF,CAAC;IACJ,CAAC;IAED,0EAA0E;IAC1E,aAAa;IACb,0EAA0E;IAC1E,IAAI,OAAO,CAAC,MAAM,KAAK,YAAY,EAAE,CAAC;QACpC,OAAO;YACL,OAAO,EAAE,KAAK;YACd,EAAE,EAAE,OAAO,CAAC,EAAE;YACd,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,GAAG,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,GAAG,WAAW,CAAC,EAAE;SAChE,CAAC;IACJ,CAAC;IAED,0EAA0E;IAC1E,aAAa;IACb,0EAA0E;IAC1E,IAAI,OAAO,CAAC,MAAM,KAAK,YAAY,EAAE,CAAC;QACpC,MAAM,MAAM,GAAG,OAAO,CAAC,MAA4E,CAAC;QACpG,MAAM,QAAQ,GAAG,MAAM,EAAE,IAAI,IAAI,EAAE,CAAC;QACpC,MAAM,IAAI,GAAG,MAAM,EAAE,SAAS,IAAI,EAAE,CAAC;QAErC,0EAA0E;QAC1E,6CAA6C;QAC7C,0EAA0E;QAC1E,IAAI,QAAQ,KAAK,sBAAsB,EAAE,CAAC;YACxC,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YACtC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;YAC5B,IAAI,CAAC,GAAG,EAAE,CAAC;gBACT,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,8BAA8B,EAAE,EAAE,CAAC;YAC9G,CAAC;YACD,aAAa,CAAC,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;YAC/B,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,EAAE,EAAE,OAAO,CAAC,EAAE;gBACd,MAAM,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,0BAA0B,GAAG,EAAE,EAAE,CAAC,EAAE;aAC/E,CAAC;QACJ,CAAC;QAED,IAAI,QAAQ,KAAK,qBAAqB,EAAE,CAAC;YACvC,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YACtC,IAAI,CAAC,GAAG,EAAE,CAAC;gBACT,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,6BAA6B,EAAE,EAAE,CAAC;YAC7G,CAAC;YACD,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACrC,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,EAAE,EAAE,OAAO,CAAC,EAAE;gBACd,MAAM,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE;aACrE,CAAC;QACJ,CAAC;QAED,IAAI,QAAQ,KAAK,sBAAsB,EAAE,CAAC;YACxC,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;YACtC,IAAI,CAAC,GAAG,EAAE,CAAC;gBACT,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,8BAA8B,EAAE,EAAE,CAAC;YAC9G,CAAC;YACD,aAAa,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACxB,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,EAAE,EAAE,OAAO,CAAC,EAAE;gBACd,MAAM,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,0BAA0B,GAAG,EAAE,EAAE,CAAC,EAAE;aAC/E,CAAC;QACJ,CAAC;QAED,0EAA0E;QAC1E,iCAAiC;QACjC,0EAA0E;QAC1E,MAAM,SAAS,GAAG,mBAAmB,CAAC,QAAQ,CAAC,CAAC;QAChD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;QAEvD,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,EAAE,EAAE,OAAO,CAAC,EAAE;gBACd,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,mBAAmB,QAAQ,EAAE,EAAE;aAChE,CAAC;QACJ,CAAC;QAED,MAAM,UAAU,GAAG,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5E,wEAAwE;QACxE,qEAAqE;QACrE,MAAM,WAAW,GAA2B,EAAE,CAAC;QAC/C,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YACjB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC5C,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,SAAS,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;oBAClD,2FAA2F;oBAC3F,WAAW,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;gBACvC,CAAC;YACH,CAAC;QACH,CAAC;QACD,IAAI,mBAAmB,GAAG,gBAAgB,CAAC,KAAK,CAAC,cAAc,EAAE,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QAE5F,+DAA+D;QAC/D,gFAAgF;QAChF,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,QAAQ,EAAE,YAAY,EAAE,GAAG,cAAc,CAAC,mBAAmB,CAAC,CAAC;QACjG,mBAAmB,GAAG,gBAAgB,CAAC;QAEvC,+DAA+D;QAC/D,MAAM,UAAU,GAAG,mBAAmB,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,mBAAmB,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAE7F,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;YAElC,wEAAwE;YACxE,wEAAwE;YACxE,2DAA2D;YAC3D,MAAM,oBAAoB,GAAG,oBAAoB,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;YAClE,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,EAAE,MAAM,EAAE,YAAY,EAAE,oBAAoB,EAAE,CAAC,CAAC;YAExE,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,UAAU,EAAE,EAAE,aAAa,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;YAEzE,sEAAsE;YACtE,gEAAgE;YAChE,IAAI,oBAAoB,EAAE,CAAC;gBACzB,oBAAoB,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,eAAe,EAAE,CAAC,CAAC;YAC/D,CAAC;YAED,sEAAsE;YACtE,+EAA+E;YAC/E,MAAM,OAAO,GAA0C,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;YAChF,IAAI,YAAY,EAAE,CAAC;gBACjB,OAAO,CAAC,IAAI,CAAC;oBACX,IAAI,EAAE,MAAM;oBACZ,IAAI,EAAE,gKAAgK;iBACvK,CAAC,CAAC;YACL,CAAC;YAED,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,EAAE,EAAE,OAAO,CAAC,EAAE;gBACd,MAAM,EAAE,EAAE,OAAO,EAAE;aACpB,CAAC;QACJ,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,EAAE,EAAE,OAAO,CAAC,EAAE;gBACd,KAAK,EAAE;oBACL,IAAI,EAAE,CAAC,KAAK;oBACZ,OAAO,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;iBAC1D;aACF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,0EAA0E;IAC1E,iBAAiB;IACjB,0EAA0E;IAC1E,OAAO;QACL,OAAO,EAAE,KAAK;QACd,EAAE,EAAE,OAAO,CAAC,EAAE;QACd,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,qBAAqB,OAAO,CAAC,MAAM,EAAE,EAAE;KACxE,CAAC;AACJ,CAAC;AAED,8EAA8E;AAC9E,qBAAqB;AACrB,8EAA8E;AAE9E;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,GAAW;IAC5C,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,UAAU,EAAE,QAAQ,CAAC,CAAC;IAClD,IAAI,MAAM,GAAG,MAAM,iBAAiB,CAAC,SAAS,CAAC,CAAC;IAEhD,4EAA4E;IAC5E,4EAA4E;IAC5E,4EAA4E;IAC5E,MAAM,oBAAoB,GAAG,IAAI,GAAG,EAAwB,CAAC;IAE7D,MAAM,OAAO,GAAG,CAAC,OAA0C,EAAQ,EAAE;QACnE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;IACvD,CAAC,CAAC;IAEF,2EAA2E;IAC3E,gFAAgF;IAChF,kBAAkB,CAChB,SAAS,EACT,CAAC,OAAO,EAAE,EAAE;QACV,MAAM,GAAG,OAAO,CAAC;IACnB,CAAC,EACD,GAAG,EAAE;QACH,OAAO,CAAC,iBAAiB,CAAC,kCAAkC,CAAC,CAAC,CAAC;IACjE,CAAC,CACF,CAAC;IAEF,iFAAiF;IACjF,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,IAAI,cAAc,GAA2C,IAAI,CAAC;IAClE,IAAI,MAAM,GAAG,IAAI,CAAC;IAElB,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;IAEtE,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;QACrB,IAAI,cAAc,EAAE,CAAC;YACnB,MAAM,OAAO,GAAG,cAAc,CAAC;YAC/B,cAAc,GAAG,IAAI,CAAC;YACtB,OAAO,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC;aAAM,CAAC;YACN,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvB,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;QAClB,MAAM,GAAG,KAAK,CAAC;QACf,IAAI,cAAc,EAAE,CAAC;YACnB,cAAc,CAAC,IAAI,CAAC,CAAC;YACrB,cAAc,GAAG,IAAI,CAAC;QACxB,CAAC;QACD,2EAA2E;QAC3E,yEAAyE;QACzE,oEAAoE;QACpE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,GAA2B,EAAE;QAC5C,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC;YAAE,OAAO,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,EAAG,CAAC,CAAC;QACrE,IAAI,CAAC,MAAM;YAAE,OAAO,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC1C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7B,cAAc,GAAG,OAAO,CAAC;QAC3B,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,IAAI,GAAG,MAAM,QAAQ,EAAE,CAAC;QAC9B,IAAI,IAAI,KAAK,IAAI;YAAE,MAAM,CAAC,eAAe;QAEzC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO;YAAE,SAAS;QAEvB,IAAI,OAAuB,CAAC;QAC5B,IAAI,CAAC;YACH,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAChC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC;gBACN,OAAO,EAAE,KAAK;gBACd,EAAE,EAAE,IAAI;gBACR,KAAK,EAAE,EAAE,IAAI,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE;aAChD,CAAC,CAAC;YACH,SAAS;QACX,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,oBAAoB,CAAC,CAAC;QACjF,OAAO,CAAC,QAAQ,CAAC,CAAC;IACpB,CAAC;AACH,CAAC"}
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/mcp/server.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import type { Config } from "../core/config.js";
|
|
2
|
+
import type { Provider, Message, ProviderEvent, ChatStreamOptions } from "./types.js";
|
|
3
|
+
import type { OpenAIFunctionDef } from "../tools/types.js";
|
|
4
|
+
import { type OpenAIClientLike } from "./openai.js";
|
|
5
|
+
/**
|
|
6
|
+
* Google Gemini provider.
|
|
7
|
+
*
|
|
8
|
+
* Gemini exposes an OpenAI-compatible REST API at:
|
|
9
|
+
* https://generativelanguage.googleapis.com/v1beta/openai/
|
|
10
|
+
*
|
|
11
|
+
* This means we can reuse OpenAIProvider's full streaming tool-call logic
|
|
12
|
+
* — same composition pattern as OpenRouter. No additional SDK dependency.
|
|
13
|
+
*
|
|
14
|
+
* Model names are Gemini model slugs without provider prefix:
|
|
15
|
+
* gemini-2.0-flash (default), gemini-2.5-pro, gemini-1.5-pro
|
|
16
|
+
*
|
|
17
|
+
* Get an API key (including free tier) at: https://aistudio.google.com/apikey
|
|
18
|
+
* Keys start with "AIza".
|
|
19
|
+
*
|
|
20
|
+
* Set GEMINI_API_KEY environment variable or geminiApiKey in .phase2s.yaml.
|
|
21
|
+
* Optional: override base URL with geminiBaseUrl for custom endpoints.
|
|
22
|
+
*/
|
|
23
|
+
export declare class GeminiProvider implements Provider {
|
|
24
|
+
name: string;
|
|
25
|
+
private inner;
|
|
26
|
+
constructor(config: Config, client?: OpenAIClientLike);
|
|
27
|
+
chatStream(messages: Message[], tools: OpenAIFunctionDef[], options?: ChatStreamOptions): AsyncIterable<ProviderEvent>;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=gemini.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gemini.d.ts","sourceRoot":"","sources":["../../../src/providers/gemini.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACtF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAkB,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpE;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,cAAe,YAAW,QAAQ;IAC7C,IAAI,SAAY;IAChB,OAAO,CAAC,KAAK,CAAiB;gBAElB,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,gBAAgB;IA2B9C,UAAU,CACf,QAAQ,EAAE,OAAO,EAAE,EACnB,KAAK,EAAE,iBAAiB,EAAE,EAC1B,OAAO,CAAC,EAAE,iBAAiB,GAC1B,aAAa,CAAC,aAAa,CAAC;CAGhC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import OpenAI from "openai";
|
|
2
|
+
import { OpenAIProvider } from "./openai.js";
|
|
3
|
+
/**
|
|
4
|
+
* Google Gemini provider.
|
|
5
|
+
*
|
|
6
|
+
* Gemini exposes an OpenAI-compatible REST API at:
|
|
7
|
+
* https://generativelanguage.googleapis.com/v1beta/openai/
|
|
8
|
+
*
|
|
9
|
+
* This means we can reuse OpenAIProvider's full streaming tool-call logic
|
|
10
|
+
* — same composition pattern as OpenRouter. No additional SDK dependency.
|
|
11
|
+
*
|
|
12
|
+
* Model names are Gemini model slugs without provider prefix:
|
|
13
|
+
* gemini-2.0-flash (default), gemini-2.5-pro, gemini-1.5-pro
|
|
14
|
+
*
|
|
15
|
+
* Get an API key (including free tier) at: https://aistudio.google.com/apikey
|
|
16
|
+
* Keys start with "AIza".
|
|
17
|
+
*
|
|
18
|
+
* Set GEMINI_API_KEY environment variable or geminiApiKey in .phase2s.yaml.
|
|
19
|
+
* Optional: override base URL with geminiBaseUrl for custom endpoints.
|
|
20
|
+
*/
|
|
21
|
+
export class GeminiProvider {
|
|
22
|
+
name = "gemini";
|
|
23
|
+
inner;
|
|
24
|
+
constructor(config, client) {
|
|
25
|
+
if (!client && !config.geminiApiKey) {
|
|
26
|
+
throw new Error("Gemini API key is required for the gemini provider. " +
|
|
27
|
+
"Set GEMINI_API_KEY environment variable or geminiApiKey in .phase2s.yaml. " +
|
|
28
|
+
"Get a free key at https://aistudio.google.com/apikey");
|
|
29
|
+
}
|
|
30
|
+
// Ensure baseURL has a trailing slash — OpenAI SDK path joins require it.
|
|
31
|
+
const rawBaseURL = config.geminiBaseUrl ?? "https://generativelanguage.googleapis.com/v1beta/openai/";
|
|
32
|
+
const baseURL = rawBaseURL.endsWith("/") ? rawBaseURL : `${rawBaseURL}/`;
|
|
33
|
+
const resolvedClient = client ??
|
|
34
|
+
new OpenAI({
|
|
35
|
+
apiKey: config.geminiApiKey,
|
|
36
|
+
baseURL,
|
|
37
|
+
});
|
|
38
|
+
// OpenAIProvider is always given an already-constructed client here, so its
|
|
39
|
+
// config.apiKey validation guard (!client && !config.apiKey) never fires.
|
|
40
|
+
// Pass config as-is — no need to alias the Gemini key into the OpenAI field.
|
|
41
|
+
this.inner = new OpenAIProvider(config, resolvedClient);
|
|
42
|
+
}
|
|
43
|
+
async *chatStream(messages, tools, options) {
|
|
44
|
+
yield* this.inner.chatStream(messages, tools, options);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=gemini.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gemini.js","sourceRoot":"","sources":["../../../src/providers/gemini.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAI5B,OAAO,EAAE,cAAc,EAAyB,MAAM,aAAa,CAAC;AAEpE;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,OAAO,cAAc;IACzB,IAAI,GAAG,QAAQ,CAAC;IACR,KAAK,CAAiB;IAE9B,YAAY,MAAc,EAAE,MAAyB;QACnD,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;YACpC,MAAM,IAAI,KAAK,CACb,sDAAsD;gBACpD,4EAA4E;gBAC5E,sDAAsD,CACzD,CAAC;QACJ,CAAC;QAED,0EAA0E;QAC1E,MAAM,UAAU,GACd,MAAM,CAAC,aAAa,IAAI,0DAA0D,CAAC;QACrF,MAAM,OAAO,GAAG,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,GAAG,CAAC;QAEzE,MAAM,cAAc,GAClB,MAAM;YACL,IAAI,MAAM,CAAC;gBACV,MAAM,EAAE,MAAM,CAAC,YAAY;gBAC3B,OAAO;aACR,CAAiC,CAAC;QAErC,4EAA4E;QAC5E,0EAA0E;QAC1E,6EAA6E;QAC7E,IAAI,CAAC,KAAK,GAAG,IAAI,cAAc,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;IAC1D,CAAC;IAED,KAAK,CAAC,CAAC,UAAU,CACf,QAAmB,EACnB,KAA0B,EAC1B,OAA2B;QAE3B,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IACzD,CAAC;CACF"}
|
|
@@ -3,4 +3,6 @@ import type { Provider } from "./types.js";
|
|
|
3
3
|
export declare function createProvider(config: Config): Provider;
|
|
4
4
|
export type { Provider, Message, ToolCall, ProviderEvent } from "./types.js";
|
|
5
5
|
export type { OpenAIClientLike } from "./openai.js";
|
|
6
|
+
export { OpenRouterProvider } from "./openrouter.js";
|
|
7
|
+
export { GeminiProvider } from "./gemini.js";
|
|
6
8
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/providers/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAQ3C,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAiBvD;AAED,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC7E,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -2,6 +2,8 @@ import { CodexProvider } from "./codex.js";
|
|
|
2
2
|
import { OpenAIProvider } from "./openai.js";
|
|
3
3
|
import { AnthropicProvider } from "./anthropic.js";
|
|
4
4
|
import { createOllamaProvider } from "./ollama.js";
|
|
5
|
+
import { OpenRouterProvider } from "./openrouter.js";
|
|
6
|
+
import { GeminiProvider } from "./gemini.js";
|
|
5
7
|
export function createProvider(config) {
|
|
6
8
|
switch (config.provider) {
|
|
7
9
|
case "codex-cli":
|
|
@@ -12,8 +14,14 @@ export function createProvider(config) {
|
|
|
12
14
|
return new AnthropicProvider(config);
|
|
13
15
|
case "ollama":
|
|
14
16
|
return createOllamaProvider(config);
|
|
17
|
+
case "openrouter":
|
|
18
|
+
return new OpenRouterProvider(config);
|
|
19
|
+
case "gemini":
|
|
20
|
+
return new GeminiProvider(config);
|
|
15
21
|
default:
|
|
16
22
|
throw new Error(`Unknown provider: ${config.provider}`);
|
|
17
23
|
}
|
|
18
24
|
}
|
|
25
|
+
export { OpenRouterProvider } from "./openrouter.js";
|
|
26
|
+
export { GeminiProvider } from "./gemini.js";
|
|
19
27
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/providers/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/providers/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,UAAU,cAAc,CAAC,MAAc;IAC3C,QAAQ,MAAM,CAAC,QAAQ,EAAE,CAAC;QACxB,KAAK,WAAW;YACd,OAAO,IAAI,aAAa,CAAC,MAAM,CAAC,CAAC;QACnC,KAAK,YAAY;YACf,OAAO,IAAI,cAAc,CAAC,MAAM,CAAC,CAAC;QACpC,KAAK,WAAW;YACd,OAAO,IAAI,iBAAiB,CAAC,MAAM,CAAC,CAAC;QACvC,KAAK,QAAQ;YACX,OAAO,oBAAoB,CAAC,MAAM,CAAC,CAAC;QACtC,KAAK,YAAY;YACf,OAAO,IAAI,kBAAkB,CAAC,MAAM,CAAC,CAAC;QACxC,KAAK,QAAQ;YACX,OAAO,IAAI,cAAc,CAAC,MAAM,CAAC,CAAC;QACpC;YACE,MAAM,IAAI,KAAK,CAAC,qBAAqB,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC5D,CAAC;AACH,CAAC;AAID,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { Config } from "../core/config.js";
|
|
2
|
+
import type { Provider, Message, ProviderEvent, ChatStreamOptions } from "./types.js";
|
|
3
|
+
import type { OpenAIFunctionDef } from "../tools/types.js";
|
|
4
|
+
import { type OpenAIClientLike } from "./openai.js";
|
|
5
|
+
/**
|
|
6
|
+
* OpenRouter provider.
|
|
7
|
+
*
|
|
8
|
+
* OpenRouter is an OpenAI-compatible API gateway that routes requests to
|
|
9
|
+
* 50+ models including Claude, GPT-4o, Gemini, and Llama — all under a
|
|
10
|
+
* single API key. Model names use provider-prefixed slugs:
|
|
11
|
+
* openai/gpt-4o, anthropic/claude-3-5-sonnet, google/gemini-pro-1.5
|
|
12
|
+
*
|
|
13
|
+
* Implemented via composition with OpenAIProvider: the same streaming
|
|
14
|
+
* tool-call logic applies, just pointed at a different base URL.
|
|
15
|
+
*
|
|
16
|
+
* Set OPENROUTER_API_KEY or openrouterApiKey in .phase2s.yaml.
|
|
17
|
+
* Optional: override the base URL with openrouterBaseUrl for custom deployments.
|
|
18
|
+
*/
|
|
19
|
+
export declare class OpenRouterProvider implements Provider {
|
|
20
|
+
name: string;
|
|
21
|
+
private inner;
|
|
22
|
+
constructor(config: Config, client?: OpenAIClientLike);
|
|
23
|
+
chatStream(messages: Message[], tools: OpenAIFunctionDef[], options?: ChatStreamOptions): AsyncIterable<ProviderEvent>;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=openrouter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openrouter.d.ts","sourceRoot":"","sources":["../../../src/providers/openrouter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACtF,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC3D,OAAO,EAAkB,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpE;;;;;;;;;;;;;GAaG;AACH,qBAAa,kBAAmB,YAAW,QAAQ;IACjD,IAAI,SAAgB;IACpB,OAAO,CAAC,KAAK,CAAiB;gBAElB,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,gBAAgB;IA4B9C,UAAU,CACf,QAAQ,EAAE,OAAO,EAAE,EACnB,KAAK,EAAE,iBAAiB,EAAE,EAC1B,OAAO,CAAC,EAAE,iBAAiB,GAC1B,aAAa,CAAC,aAAa,CAAC;CAGhC"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import OpenAI from "openai";
|
|
2
|
+
import { OpenAIProvider } from "./openai.js";
|
|
3
|
+
/**
|
|
4
|
+
* OpenRouter provider.
|
|
5
|
+
*
|
|
6
|
+
* OpenRouter is an OpenAI-compatible API gateway that routes requests to
|
|
7
|
+
* 50+ models including Claude, GPT-4o, Gemini, and Llama — all under a
|
|
8
|
+
* single API key. Model names use provider-prefixed slugs:
|
|
9
|
+
* openai/gpt-4o, anthropic/claude-3-5-sonnet, google/gemini-pro-1.5
|
|
10
|
+
*
|
|
11
|
+
* Implemented via composition with OpenAIProvider: the same streaming
|
|
12
|
+
* tool-call logic applies, just pointed at a different base URL.
|
|
13
|
+
*
|
|
14
|
+
* Set OPENROUTER_API_KEY or openrouterApiKey in .phase2s.yaml.
|
|
15
|
+
* Optional: override the base URL with openrouterBaseUrl for custom deployments.
|
|
16
|
+
*/
|
|
17
|
+
export class OpenRouterProvider {
|
|
18
|
+
name = "openrouter";
|
|
19
|
+
inner;
|
|
20
|
+
constructor(config, client) {
|
|
21
|
+
if (!client && !config.openrouterApiKey) {
|
|
22
|
+
throw new Error("OpenRouter API key is required for the openrouter provider. " +
|
|
23
|
+
"Set OPENROUTER_API_KEY environment variable or openrouterApiKey in .phase2s.yaml");
|
|
24
|
+
}
|
|
25
|
+
const resolvedClient = client ??
|
|
26
|
+
new OpenAI({
|
|
27
|
+
apiKey: config.openrouterApiKey,
|
|
28
|
+
baseURL: config.openrouterBaseUrl ?? "https://openrouter.ai/api/v1",
|
|
29
|
+
defaultHeaders: {
|
|
30
|
+
// Recommended by OpenRouter for attribution and analytics.
|
|
31
|
+
"HTTP-Referer": "https://github.com/scanton/phase-2-s",
|
|
32
|
+
"X-Title": "Phase2S",
|
|
33
|
+
},
|
|
34
|
+
});
|
|
35
|
+
// OpenAIProvider validates config.apiKey, so pass the openrouter key there.
|
|
36
|
+
// The real client is already constructed above — OpenAIProvider uses it directly.
|
|
37
|
+
this.inner = new OpenAIProvider({ ...config, apiKey: config.openrouterApiKey ?? "" }, resolvedClient);
|
|
38
|
+
}
|
|
39
|
+
async *chatStream(messages, tools, options) {
|
|
40
|
+
yield* this.inner.chatStream(messages, tools, options);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=openrouter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"openrouter.js","sourceRoot":"","sources":["../../../src/providers/openrouter.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAI5B,OAAO,EAAE,cAAc,EAAyB,MAAM,aAAa,CAAC;AAEpE;;;;;;;;;;;;;GAaG;AACH,MAAM,OAAO,kBAAkB;IAC7B,IAAI,GAAG,YAAY,CAAC;IACZ,KAAK,CAAiB;IAE9B,YAAY,MAAc,EAAE,MAAyB;QACnD,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CACb,8DAA8D;gBAC5D,kFAAkF,CACrF,CAAC;QACJ,CAAC;QAED,MAAM,cAAc,GAClB,MAAM;YACL,IAAI,MAAM,CAAC;gBACV,MAAM,EAAE,MAAM,CAAC,gBAAgB;gBAC/B,OAAO,EAAE,MAAM,CAAC,iBAAiB,IAAI,8BAA8B;gBACnE,cAAc,EAAE;oBACd,2DAA2D;oBAC3D,cAAc,EAAE,sCAAsC;oBACtD,SAAS,EAAE,SAAS;iBACrB;aACF,CAAiC,CAAC;QAErC,4EAA4E;QAC5E,kFAAkF;QAClF,IAAI,CAAC,KAAK,GAAG,IAAI,cAAc,CAC7B,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,gBAAgB,IAAI,EAAE,EAAE,EACpD,cAAc,CACf,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,CAAC,UAAU,CACf,QAAmB,EACnB,KAA0B,EAC1B,OAA2B;QAE3B,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,QAAQ,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IACzD,CAAC;CACF"}
|
|
@@ -12,11 +12,13 @@ export declare class ToolRegistry {
|
|
|
12
12
|
* allow/deny configuration.
|
|
13
13
|
*
|
|
14
14
|
* Rules (applied in order):
|
|
15
|
-
* 1. If `allow` is provided, only tools whose names
|
|
16
|
-
* 2. If `deny` is provided, any tool whose name
|
|
15
|
+
* 1. If `allow` is provided, only tools whose names match a pattern in `allow` are kept.
|
|
16
|
+
* 2. If `deny` is provided, any tool whose name matches a pattern in `deny` is removed.
|
|
17
17
|
* 3. `deny` always overrides `allow` — it is a security control.
|
|
18
18
|
*
|
|
19
|
-
*
|
|
19
|
+
* Patterns support `*` as a wildcard: `file_*` matches `file_read` and `file_write`.
|
|
20
|
+
* Exact names (no `*`) are matched as-is. Patterns that match no registered tools
|
|
21
|
+
* produce a console warning so typos are visible.
|
|
20
22
|
*/
|
|
21
23
|
allowed(allow?: string[], deny?: string[]): ToolRegistry;
|
|
22
24
|
/** Execute a tool by name with parsed arguments */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/tools/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,UAAU,EAAgB,KAAK,iBAAiB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/tools/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,UAAU,EAAgB,KAAK,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAuB9F,qBAAa,YAAY;IACvB,OAAO,CAAC,KAAK,CAAqC;IAElD,QAAQ,CAAC,IAAI,EAAE,cAAc,GAAG,IAAI;IAIpC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,cAAc,GAAG,SAAS;IAI7C,IAAI,IAAI,cAAc,EAAE;IAIxB,KAAK,IAAI,MAAM,EAAE;IAIjB,mDAAmD;IACnD,QAAQ,IAAI,iBAAiB,EAAE;IAI/B;;;;;;;;;;;;OAYG;IACH,OAAO,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,YAAY;IA2BxD,mDAAmD;IAE7C,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC;CA6BhE"}
|
|
@@ -1,4 +1,24 @@
|
|
|
1
1
|
import { toolToOpenAI } from "./types.js";
|
|
2
|
+
// ---------------------------------------------------------------------------
|
|
3
|
+
// Glob pattern matching
|
|
4
|
+
// ---------------------------------------------------------------------------
|
|
5
|
+
/**
|
|
6
|
+
* Returns true if `name` matches `pattern`.
|
|
7
|
+
* Supports `*` as a wildcard matching any sequence of characters.
|
|
8
|
+
* With no `*`, falls back to exact string equality.
|
|
9
|
+
*
|
|
10
|
+
* Examples:
|
|
11
|
+
* matchesPattern("file_read", "file_*") → true
|
|
12
|
+
* matchesPattern("shell", "file_*") → false
|
|
13
|
+
* matchesPattern("shell", "*") → true
|
|
14
|
+
* matchesPattern("shell", "shell") → true
|
|
15
|
+
*/
|
|
16
|
+
function matchesPattern(name, pattern) {
|
|
17
|
+
if (!pattern.includes("*"))
|
|
18
|
+
return name === pattern;
|
|
19
|
+
const regex = new RegExp(`^${pattern.replace(/[.+^${}()|[\]\\]/g, "\\$&").replace(/\*/g, ".*")}$`);
|
|
20
|
+
return regex.test(name);
|
|
21
|
+
}
|
|
2
22
|
export class ToolRegistry {
|
|
3
23
|
tools = new Map();
|
|
4
24
|
register(tool) {
|
|
@@ -22,32 +42,35 @@ export class ToolRegistry {
|
|
|
22
42
|
* allow/deny configuration.
|
|
23
43
|
*
|
|
24
44
|
* Rules (applied in order):
|
|
25
|
-
* 1. If `allow` is provided, only tools whose names
|
|
26
|
-
* 2. If `deny` is provided, any tool whose name
|
|
45
|
+
* 1. If `allow` is provided, only tools whose names match a pattern in `allow` are kept.
|
|
46
|
+
* 2. If `deny` is provided, any tool whose name matches a pattern in `deny` is removed.
|
|
27
47
|
* 3. `deny` always overrides `allow` — it is a security control.
|
|
28
48
|
*
|
|
29
|
-
*
|
|
49
|
+
* Patterns support `*` as a wildcard: `file_*` matches `file_read` and `file_write`.
|
|
50
|
+
* Exact names (no `*`) are matched as-is. Patterns that match no registered tools
|
|
51
|
+
* produce a console warning so typos are visible.
|
|
30
52
|
*/
|
|
31
53
|
allowed(allow, deny) {
|
|
32
54
|
const allNames = this.names();
|
|
33
|
-
// Warn on
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
55
|
+
// Warn on patterns that match no registered tool — catches typos in both exact
|
|
56
|
+
// names and glob patterns.
|
|
57
|
+
for (const pattern of allow ?? []) {
|
|
58
|
+
if (!allNames.some((n) => matchesPattern(n, pattern))) {
|
|
59
|
+
console.warn(`Warning: pattern '${pattern}' in tools (allow) list matches no known tools`);
|
|
37
60
|
}
|
|
38
61
|
}
|
|
39
|
-
for (const
|
|
40
|
-
if (!allNames.
|
|
41
|
-
console.warn(`Warning:
|
|
62
|
+
for (const pattern of deny ?? []) {
|
|
63
|
+
if (!allNames.some((n) => matchesPattern(n, pattern))) {
|
|
64
|
+
console.warn(`Warning: pattern '${pattern}' in deny list matches no known tools`);
|
|
42
65
|
}
|
|
43
66
|
}
|
|
44
67
|
const filtered = new ToolRegistry();
|
|
45
68
|
for (const tool of this.list()) {
|
|
46
69
|
// Step 1: apply allow-list (if provided)
|
|
47
|
-
if (allow && allow.length > 0 && !allow.
|
|
70
|
+
if (allow && allow.length > 0 && !allow.some((p) => matchesPattern(tool.name, p)))
|
|
48
71
|
continue;
|
|
49
72
|
// Step 2: apply deny-list (deny overrides allow)
|
|
50
|
-
if (deny && deny.
|
|
73
|
+
if (deny && deny.some((p) => matchesPattern(tool.name, p)))
|
|
51
74
|
continue;
|
|
52
75
|
filtered.register(tool);
|
|
53
76
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/tools/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,YAAY,EAA0B,MAAM,YAAY,CAAC;AAE9F,MAAM,OAAO,YAAY;IACf,KAAK,GAAG,IAAI,GAAG,EAA0B,CAAC;IAElD,QAAQ,CAAC,IAAoB;QAC3B,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAClC,CAAC;IAED,GAAG,CAAC,IAAY;QACd,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED,IAAI;QACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IACzC,CAAC;IAED,KAAK;QACH,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;IACvC,CAAC;IAED,mDAAmD;IACnD,QAAQ;QACN,OAAO,IAAI,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IACvC,CAAC;IAED
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../src/tools/registry.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@scanton/phase2s",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.9.0",
|
|
4
4
|
"description": "AI coding assistant with 29 built-in skills, ChatGPT subscription support, and autonomous spec execution",
|
|
5
5
|
"author": "Scott Canton",
|
|
6
6
|
"homepage": "https://github.com/scanton/phase-2-s",
|