@scanton/phase2s 0.16.0 → 0.18.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/.phase2s/skills/audit/SKILL.md +1 -0
- package/.phase2s/skills/careful/SKILL.md +1 -0
- package/.phase2s/skills/checkpoint/SKILL.md +1 -0
- package/.phase2s/skills/debug/SKILL.md +1 -0
- package/.phase2s/skills/deep-specify/SKILL.md +1 -0
- package/.phase2s/skills/diff/SKILL.md +1 -0
- package/.phase2s/skills/docs/SKILL.md +1 -0
- package/.phase2s/skills/explain/SKILL.md +1 -0
- package/.phase2s/skills/freeze/SKILL.md +1 -0
- package/.phase2s/skills/guard/SKILL.md +1 -0
- package/.phase2s/skills/health/SKILL.md +1 -0
- package/.phase2s/skills/investigate/SKILL.md +1 -0
- package/.phase2s/skills/land-and-deploy/SKILL.md +1 -0
- package/.phase2s/skills/plan/SKILL.md +1 -0
- package/.phase2s/skills/plan-review/SKILL.md +1 -0
- package/.phase2s/skills/qa/SKILL.md +1 -0
- package/.phase2s/skills/remember/SKILL.md +1 -0
- package/.phase2s/skills/retro/SKILL.md +1 -0
- package/.phase2s/skills/review/SKILL.md +1 -0
- package/.phase2s/skills/scope-review/SKILL.md +1 -0
- package/.phase2s/skills/ship/SKILL.md +1 -0
- package/.phase2s/skills/skill/SKILL.md +1 -0
- package/.phase2s/skills/slop-clean/SKILL.md +1 -0
- package/.phase2s/skills/tdd/SKILL.md +1 -0
- package/.phase2s/skills/unfreeze/SKILL.md +1 -0
- package/README.md +28 -3
- package/dist/src/cli/index.d.ts +15 -0
- package/dist/src/cli/index.d.ts.map +1 -1
- package/dist/src/cli/index.js +56 -2
- package/dist/src/cli/index.js.map +1 -1
- package/dist/src/core/config.d.ts +16 -3
- package/dist/src/core/config.d.ts.map +1 -1
- package/dist/src/core/config.js +15 -2
- package/dist/src/core/config.js.map +1 -1
- package/dist/src/mcp/server.d.ts +1 -1
- package/dist/src/mcp/server.d.ts.map +1 -1
- package/dist/src/mcp/server.js +18 -8
- package/dist/src/mcp/server.js.map +1 -1
- package/dist/src/providers/anthropic.d.ts +75 -0
- package/dist/src/providers/anthropic.d.ts.map +1 -0
- package/dist/src/providers/anthropic.js +195 -0
- package/dist/src/providers/anthropic.js.map +1 -0
- package/dist/src/providers/index.d.ts.map +1 -1
- package/dist/src/providers/index.js +6 -0
- package/dist/src/providers/index.js.map +1 -1
- package/dist/src/providers/ollama.d.ts +4 -0
- package/dist/src/providers/ollama.d.ts.map +1 -0
- package/dist/src/providers/ollama.js +42 -0
- package/dist/src/providers/ollama.js.map +1 -0
- package/dist/src/skills/loader.d.ts.map +1 -1
- package/dist/src/skills/loader.js +44 -3
- package/dist/src/skills/loader.js.map +1 -1
- package/dist/src/skills/types.d.ts +11 -0
- package/dist/src/skills/types.d.ts.map +1 -1
- package/package.json +3 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../src/mcp/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAOH,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAGvD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAEhD,eAAO,MAAM,kBAAkB,WAAW,CAAC;AAM3C,UAAU,cAAc;IACtB,OAAO,EAAE,KAAK,CAAC;IACf,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,UAAU,eAAe;IACvB,OAAO,EAAE,KAAK,CAAC;IACf,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC3B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CAC3C;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ,CAAC;QACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACpC,QAAQ,EAAE,MAAM,EAAE,CAAC;KACpB,CAAC;CACH;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,KAAK,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAMD;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../../src/mcp/server.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAOH,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAGvD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAEhD,eAAO,MAAM,kBAAkB,WAAW,CAAC;AAM3C,UAAU,cAAc;IACtB,OAAO,EAAE,KAAK,CAAC;IACf,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,UAAU,eAAe;IACvB,OAAO,EAAE,KAAK,CAAC;IACf,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAAC;IAC3B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;CAC3C;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ,CAAC;QACf,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACpC,QAAQ,EAAE,MAAM,EAAE,CAAC;KACpB,CAAC;CACH;AAED;;;GAGG;AACH,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,KAAK,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAMD;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAqCjD;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE5D;AAMD;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO,GAAG,eAAe,CAInF;AAMD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,IAAI,EACnC,MAAM,EAAE,MAAM,IAAI,GACjB,IAAI,CAsBN;AAMD;;;;;;;;;;;;GAYG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,cAAc,EACvB,MAAM,EAAE,KAAK,EAAE,EACf,GAAG,EAAE,MAAM,EACX,oBAAoB,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,GAC/C,OAAO,CAAC,eAAe,CAAC,CA2G1B;AAMD;;;;;;;GAOG;AACH,wBAAsB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAoF7D"}
|
package/dist/src/mcp/server.js
CHANGED
|
@@ -18,7 +18,7 @@ import { loadConfig } from "../core/config.js";
|
|
|
18
18
|
import { Agent } from "../core/agent.js";
|
|
19
19
|
import { substituteInputs } from "../skills/template.js";
|
|
20
20
|
import { join } from "node:path";
|
|
21
|
-
export const MCP_SERVER_VERSION = "0.
|
|
21
|
+
export const MCP_SERVER_VERSION = "0.18.0";
|
|
22
22
|
// ---------------------------------------------------------------------------
|
|
23
23
|
// Tool generation
|
|
24
24
|
// ---------------------------------------------------------------------------
|
|
@@ -36,14 +36,23 @@ export function skillToTool(skill) {
|
|
|
36
36
|
description: `Task or content for the ${skill.name} skill. Paste the text you want analyzed or acted on.`,
|
|
37
37
|
},
|
|
38
38
|
};
|
|
39
|
-
// Add declared inputs as named optional
|
|
39
|
+
// Add declared inputs as named optional parameters with typed JSON Schema.
|
|
40
40
|
// Claude Code will fill these in before calling the tool.
|
|
41
41
|
if (skill.inputs) {
|
|
42
42
|
for (const [key, input] of Object.entries(skill.inputs)) {
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
43
|
+
switch (input.type) {
|
|
44
|
+
case "boolean":
|
|
45
|
+
properties[key] = { type: "boolean", description: input.prompt };
|
|
46
|
+
break;
|
|
47
|
+
case "number":
|
|
48
|
+
properties[key] = { type: "number", description: input.prompt };
|
|
49
|
+
break;
|
|
50
|
+
case "enum":
|
|
51
|
+
properties[key] = { type: "string", enum: input.enum, description: input.prompt };
|
|
52
|
+
break;
|
|
53
|
+
default:
|
|
54
|
+
properties[key] = { type: "string", description: input.prompt };
|
|
55
|
+
}
|
|
47
56
|
}
|
|
48
57
|
}
|
|
49
58
|
return {
|
|
@@ -175,8 +184,9 @@ export async function handleRequest(request, skills, cwd, sessionConversations)
|
|
|
175
184
|
if (skill.inputs) {
|
|
176
185
|
const args = params?.arguments;
|
|
177
186
|
for (const key of Object.keys(skill.inputs)) {
|
|
178
|
-
if (args &&
|
|
179
|
-
|
|
187
|
+
if (args && args[key] !== undefined && args[key] !== null) {
|
|
188
|
+
// Stringify all input types before substitution — boolean, number, enum all become strings
|
|
189
|
+
inputValues[key] = String(args[key]);
|
|
180
190
|
}
|
|
181
191
|
}
|
|
182
192
|
}
|
|
@@ -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,MAAM,uBAAuB,CAAC;AACzD,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,
|
|
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,MAAM,uBAAuB,CAAC;AACzD,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,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,MAAM,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE;SAC3C,CAAC;IACJ,CAAC;IAED,0EAA0E;IAC1E,aAAa;IACb,0EAA0E;IAC1E,IAAI,OAAO,CAAC,MAAM,KAAK,YAAY,EAAE,CAAC;QACpC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAwE,CAAC;QAChG,MAAM,QAAQ,GAAG,MAAM,EAAE,IAAI,IAAI,EAAE,CAAC;QACpC,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,MAAM,EAAE,SAAS,EAAE,MAAM,IAAI,EAAE,CAAC;QACnD,wEAAwE;QACxE,qEAAqE;QACrE,MAAM,WAAW,GAA2B,EAAE,CAAC;QAC/C,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;YACjB,MAAM,IAAI,GAAG,MAAM,EAAE,SAAgD,CAAC;YACtE,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC5C,IAAI,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,SAAS,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;oBAC1D,2FAA2F;oBAC3F,WAAW,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;gBACvC,CAAC;YACH,CAAC;QACH,CAAC;QACD,MAAM,mBAAmB,GAAG,gBAAgB,CAAC,KAAK,CAAC,cAAc,EAAE,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QAC9F,+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,OAAO;gBACL,OAAO,EAAE,KAAK;gBACd,EAAE,EAAE,OAAO,CAAC,EAAE;gBACd,MAAM,EAAE;oBACN,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;iBAClC;aACF,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"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import Anthropic from "@anthropic-ai/sdk";
|
|
2
|
+
import type { Config } from "../core/config.js";
|
|
3
|
+
import type { Provider, Message, ProviderEvent, ChatStreamOptions } from "./types.js";
|
|
4
|
+
import type { OpenAIFunctionDef } from "../tools/types.js";
|
|
5
|
+
/**
|
|
6
|
+
* Anthropic message format used internally for the API call.
|
|
7
|
+
* Exported for testing translateMessages() directly.
|
|
8
|
+
*/
|
|
9
|
+
export type AnthropicMessage = {
|
|
10
|
+
role: "user";
|
|
11
|
+
content: string | AnthropicContentBlock[];
|
|
12
|
+
} | {
|
|
13
|
+
role: "assistant";
|
|
14
|
+
content: string | AnthropicContentBlock[];
|
|
15
|
+
};
|
|
16
|
+
type AnthropicContentBlock = {
|
|
17
|
+
type: "text";
|
|
18
|
+
text: string;
|
|
19
|
+
} | {
|
|
20
|
+
type: "tool_use";
|
|
21
|
+
id: string;
|
|
22
|
+
name: string;
|
|
23
|
+
input: unknown;
|
|
24
|
+
} | {
|
|
25
|
+
type: "tool_result";
|
|
26
|
+
tool_use_id: string;
|
|
27
|
+
content: string;
|
|
28
|
+
};
|
|
29
|
+
/**
|
|
30
|
+
* Translate Phase2S Message[] into Anthropic's message format.
|
|
31
|
+
*
|
|
32
|
+
* Key differences from OpenAI:
|
|
33
|
+
* - System messages are extracted to a top-level `system` param (not in messages array)
|
|
34
|
+
* - No `tool` role — tool results are `tool_result` content blocks inside a `user` message
|
|
35
|
+
* - Consecutive tool results fold into a single synthetic user message (one turn = one message)
|
|
36
|
+
* - Assistant messages with tool calls become `tool_use` content blocks
|
|
37
|
+
*
|
|
38
|
+
* Message flow:
|
|
39
|
+
*
|
|
40
|
+
* Phase2S role → Anthropic format
|
|
41
|
+
* ─────────────────────────────────────────────────────────────────
|
|
42
|
+
* "system" → (extracted — call getSystemPrompt() separately)
|
|
43
|
+
* "user" → { role: "user", content: string }
|
|
44
|
+
* "assistant" → { role: "assistant", content: string }
|
|
45
|
+
* "assistant" + tc → { role: "assistant", content: [text_block, ...tool_use blocks] }
|
|
46
|
+
* "tool" → fold into { role: "user", content: [tool_result, ...] }
|
|
47
|
+
* consecutive tools → fold into SAME synthetic user message (multi-tool turn)
|
|
48
|
+
*
|
|
49
|
+
* Exported for direct unit testing.
|
|
50
|
+
*/
|
|
51
|
+
export declare function translateMessages(messages: Message[]): AnthropicMessage[];
|
|
52
|
+
/**
|
|
53
|
+
* Anthropic provider — implements Provider using @anthropic-ai/sdk.
|
|
54
|
+
*
|
|
55
|
+
* Streaming event translation (SDK 0.39):
|
|
56
|
+
* content_block_start (tool_use) → begin accumulating tool call by index
|
|
57
|
+
* content_block_delta (text) → yield { type: "text" }
|
|
58
|
+
* content_block_delta (json) → append to tool arguments string
|
|
59
|
+
* content_block_stop → no emission (all tools flushed at message_stop)
|
|
60
|
+
* message_delta (stop_reason) → capture stop reason
|
|
61
|
+
* message_stop → flush all tool calls, yield { type: "done" }
|
|
62
|
+
*
|
|
63
|
+
* Tool calls are flushed at message_stop (not content_block_stop) to avoid partial
|
|
64
|
+
* emission in multi-tool turns where each tool fires its own content_block_stop.
|
|
65
|
+
*/
|
|
66
|
+
export declare class AnthropicProvider implements Provider {
|
|
67
|
+
name: string;
|
|
68
|
+
private client;
|
|
69
|
+
private model;
|
|
70
|
+
private maxTokens;
|
|
71
|
+
constructor(config: Config, client?: Anthropic);
|
|
72
|
+
chatStream(messages: Message[], tools: OpenAIFunctionDef[], options?: ChatStreamOptions): AsyncIterable<ProviderEvent>;
|
|
73
|
+
}
|
|
74
|
+
export {};
|
|
75
|
+
//# sourceMappingURL=anthropic.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anthropic.d.ts","sourceRoot":"","sources":["../../../src/providers/anthropic.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,mBAAmB,CAAC;AAC1C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAY,aAAa,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAChG,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAG3D;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GACxB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,GAAG,qBAAqB,EAAE,CAAA;CAAE,GAC3D;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,OAAO,EAAE,MAAM,GAAG,qBAAqB,EAAE,CAAA;CAAE,CAAC;AAErE,KAAK,qBAAqB,GACtB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,UAAU,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GAC9D;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAElE;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,gBAAgB,EAAE,CAgEzE;AAED;;;;;;;;;;;;;GAaG;AACH,qBAAa,iBAAkB,YAAW,QAAQ;IAChD,IAAI,SAAe;IACnB,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,SAAS,CAAS;gBAEd,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,SAAS;IAavC,UAAU,CACf,QAAQ,EAAE,OAAO,EAAE,EACnB,KAAK,EAAE,iBAAiB,EAAE,EAC1B,OAAO,CAAC,EAAE,iBAAiB,GAC1B,aAAa,CAAC,aAAa,CAAC;CA6EhC"}
|
|
@@ -0,0 +1,195 @@
|
|
|
1
|
+
import Anthropic from "@anthropic-ai/sdk";
|
|
2
|
+
import { log } from "../utils/logger.js";
|
|
3
|
+
/**
|
|
4
|
+
* Translate Phase2S Message[] into Anthropic's message format.
|
|
5
|
+
*
|
|
6
|
+
* Key differences from OpenAI:
|
|
7
|
+
* - System messages are extracted to a top-level `system` param (not in messages array)
|
|
8
|
+
* - No `tool` role — tool results are `tool_result` content blocks inside a `user` message
|
|
9
|
+
* - Consecutive tool results fold into a single synthetic user message (one turn = one message)
|
|
10
|
+
* - Assistant messages with tool calls become `tool_use` content blocks
|
|
11
|
+
*
|
|
12
|
+
* Message flow:
|
|
13
|
+
*
|
|
14
|
+
* Phase2S role → Anthropic format
|
|
15
|
+
* ─────────────────────────────────────────────────────────────────
|
|
16
|
+
* "system" → (extracted — call getSystemPrompt() separately)
|
|
17
|
+
* "user" → { role: "user", content: string }
|
|
18
|
+
* "assistant" → { role: "assistant", content: string }
|
|
19
|
+
* "assistant" + tc → { role: "assistant", content: [text_block, ...tool_use blocks] }
|
|
20
|
+
* "tool" → fold into { role: "user", content: [tool_result, ...] }
|
|
21
|
+
* consecutive tools → fold into SAME synthetic user message (multi-tool turn)
|
|
22
|
+
*
|
|
23
|
+
* Exported for direct unit testing.
|
|
24
|
+
*/
|
|
25
|
+
export function translateMessages(messages) {
|
|
26
|
+
const result = [];
|
|
27
|
+
const systemCount = messages.filter((m) => m.role === "system").length;
|
|
28
|
+
if (systemCount > 1) {
|
|
29
|
+
log.warn(`translateMessages: ${systemCount} system messages found — only the first will be used. Anthropic takes a single system param.`);
|
|
30
|
+
}
|
|
31
|
+
for (const msg of messages) {
|
|
32
|
+
if (msg.role === "system") {
|
|
33
|
+
// System messages are handled separately — skip here
|
|
34
|
+
continue;
|
|
35
|
+
}
|
|
36
|
+
if (msg.role === "tool") {
|
|
37
|
+
// Fold consecutive tool results into a single synthetic user message.
|
|
38
|
+
// Anthropic requires all results from one assistant tool-call turn to be
|
|
39
|
+
// in the same user message (no interleaved assistant messages between them).
|
|
40
|
+
const toolResult = {
|
|
41
|
+
type: "tool_result",
|
|
42
|
+
tool_use_id: msg.toolCallId ?? "",
|
|
43
|
+
content: msg.content,
|
|
44
|
+
};
|
|
45
|
+
const last = result[result.length - 1];
|
|
46
|
+
if (last && last.role === "user" && Array.isArray(last.content) &&
|
|
47
|
+
last.content.length > 0 && last.content[0].type === "tool_result") {
|
|
48
|
+
// Append to existing synthetic user message
|
|
49
|
+
last.content.push(toolResult);
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
// Start a new synthetic user message
|
|
53
|
+
result.push({ role: "user", content: [toolResult] });
|
|
54
|
+
}
|
|
55
|
+
continue;
|
|
56
|
+
}
|
|
57
|
+
if (msg.role === "assistant" && msg.toolCalls && msg.toolCalls.length > 0) {
|
|
58
|
+
// Assistant turn that called tools: text block + tool_use blocks
|
|
59
|
+
const content = [];
|
|
60
|
+
if (msg.content) {
|
|
61
|
+
content.push({ type: "text", text: msg.content });
|
|
62
|
+
}
|
|
63
|
+
for (const tc of msg.toolCalls) {
|
|
64
|
+
let input = {};
|
|
65
|
+
try {
|
|
66
|
+
input = JSON.parse(tc.arguments);
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
log.warn(`AnthropicProvider: failed to parse tool arguments for '${tc.name}' — sending empty input. Raw: ${tc.arguments}`);
|
|
70
|
+
input = {};
|
|
71
|
+
}
|
|
72
|
+
content.push({ type: "tool_use", id: tc.id, name: tc.name, input });
|
|
73
|
+
}
|
|
74
|
+
result.push({ role: "assistant", content });
|
|
75
|
+
continue;
|
|
76
|
+
}
|
|
77
|
+
// Plain user or assistant message
|
|
78
|
+
result.push({
|
|
79
|
+
role: msg.role,
|
|
80
|
+
content: msg.content,
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
return result;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Anthropic provider — implements Provider using @anthropic-ai/sdk.
|
|
87
|
+
*
|
|
88
|
+
* Streaming event translation (SDK 0.39):
|
|
89
|
+
* content_block_start (tool_use) → begin accumulating tool call by index
|
|
90
|
+
* content_block_delta (text) → yield { type: "text" }
|
|
91
|
+
* content_block_delta (json) → append to tool arguments string
|
|
92
|
+
* content_block_stop → no emission (all tools flushed at message_stop)
|
|
93
|
+
* message_delta (stop_reason) → capture stop reason
|
|
94
|
+
* message_stop → flush all tool calls, yield { type: "done" }
|
|
95
|
+
*
|
|
96
|
+
* Tool calls are flushed at message_stop (not content_block_stop) to avoid partial
|
|
97
|
+
* emission in multi-tool turns where each tool fires its own content_block_stop.
|
|
98
|
+
*/
|
|
99
|
+
export class AnthropicProvider {
|
|
100
|
+
name = "anthropic";
|
|
101
|
+
client;
|
|
102
|
+
model;
|
|
103
|
+
maxTokens;
|
|
104
|
+
constructor(config, client) {
|
|
105
|
+
const apiKey = config.anthropicApiKey ?? process.env.ANTHROPIC_API_KEY;
|
|
106
|
+
if (!client && !apiKey) {
|
|
107
|
+
throw new Error("Anthropic API key is required. Set ANTHROPIC_API_KEY env var or anthropicApiKey in .phase2s.yaml");
|
|
108
|
+
}
|
|
109
|
+
this.client = client ?? new Anthropic({ apiKey });
|
|
110
|
+
this.model = config.model ?? "claude-3-5-sonnet-20241022";
|
|
111
|
+
this.maxTokens = config.anthropicMaxTokens ?? 8192;
|
|
112
|
+
log.info(`AnthropicProvider: model=${this.model} maxTokens=${this.maxTokens}`);
|
|
113
|
+
}
|
|
114
|
+
async *chatStream(messages, tools, options) {
|
|
115
|
+
const systemMsg = messages.find((m) => m.role === "system");
|
|
116
|
+
const chatMessages = messages.filter((m) => m.role !== "system");
|
|
117
|
+
const anthropicTools = tools.map((t) => ({
|
|
118
|
+
name: t.function.name,
|
|
119
|
+
description: t.function.description ?? "",
|
|
120
|
+
input_schema: {
|
|
121
|
+
type: "object",
|
|
122
|
+
...t.function.parameters,
|
|
123
|
+
},
|
|
124
|
+
}));
|
|
125
|
+
const model = options?.model ?? this.model;
|
|
126
|
+
const stream = this.client.messages.stream({
|
|
127
|
+
model,
|
|
128
|
+
max_tokens: this.maxTokens,
|
|
129
|
+
...(systemMsg ? { system: systemMsg.content } : {}),
|
|
130
|
+
messages: translateMessages(chatMessages),
|
|
131
|
+
...(anthropicTools.length > 0 ? { tools: anthropicTools } : {}),
|
|
132
|
+
});
|
|
133
|
+
// pendingTools accumulates tool call data by content block index.
|
|
134
|
+
// Flushed at message_stop (not content_block_stop) to handle multi-tool turns correctly.
|
|
135
|
+
const pendingTools = new Map();
|
|
136
|
+
let stopReason = "stop";
|
|
137
|
+
let doneEmitted = false;
|
|
138
|
+
try {
|
|
139
|
+
for await (const event of stream) {
|
|
140
|
+
if (event.type === "content_block_start" && event.content_block.type === "tool_use") {
|
|
141
|
+
pendingTools.set(event.index, {
|
|
142
|
+
id: event.content_block.id,
|
|
143
|
+
name: event.content_block.name,
|
|
144
|
+
arguments: "",
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
else if (event.type === "content_block_delta") {
|
|
148
|
+
if (event.delta.type === "input_json_delta") {
|
|
149
|
+
const tool = pendingTools.get(event.index);
|
|
150
|
+
if (tool)
|
|
151
|
+
tool.arguments += event.delta.partial_json;
|
|
152
|
+
}
|
|
153
|
+
else if (event.delta.type === "text_delta") {
|
|
154
|
+
yield { type: "text", content: event.delta.text };
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
else if (event.type === "message_delta") {
|
|
158
|
+
if (event.delta.stop_reason === "tool_use") {
|
|
159
|
+
stopReason = "tool_calls";
|
|
160
|
+
}
|
|
161
|
+
else if (event.delta.stop_reason === "max_tokens") {
|
|
162
|
+
log.warn("Response truncated (stop_reason: max_tokens). Consider raising anthropicMaxTokens.");
|
|
163
|
+
yield { type: "text", content: "\n\n[Note: response was truncated]" };
|
|
164
|
+
stopReason = "length";
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
else if (event.type === "message_stop") {
|
|
168
|
+
// Emit all accumulated tool calls after the full stream — never emit early.
|
|
169
|
+
if (pendingTools.size > 0) {
|
|
170
|
+
yield { type: "tool_calls", calls: [...pendingTools.values()] };
|
|
171
|
+
}
|
|
172
|
+
yield { type: "done", stopReason };
|
|
173
|
+
doneEmitted = true;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
catch (err) {
|
|
178
|
+
const errMsg = err instanceof Error ? err.message : String(err);
|
|
179
|
+
log.error(`AnthropicProvider: stream error — ${errMsg}`);
|
|
180
|
+
yield { type: "error", error: errMsg };
|
|
181
|
+
yield { type: "done", stopReason: "error" };
|
|
182
|
+
doneEmitted = true;
|
|
183
|
+
}
|
|
184
|
+
finally {
|
|
185
|
+
// Guard against clean EOF without message_stop (SDK version changes, early termination).
|
|
186
|
+
if (!doneEmitted) {
|
|
187
|
+
if (pendingTools.size > 0) {
|
|
188
|
+
yield { type: "tool_calls", calls: [...pendingTools.values()] };
|
|
189
|
+
}
|
|
190
|
+
yield { type: "done", stopReason };
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
//# sourceMappingURL=anthropic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"anthropic.js","sourceRoot":"","sources":["../../../src/providers/anthropic.ts"],"names":[],"mappings":"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"}
|
|
@@ -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;AAM3C,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAavD;AAED,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAC7E,YAAY,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -1,11 +1,17 @@
|
|
|
1
1
|
import { CodexProvider } from "./codex.js";
|
|
2
2
|
import { OpenAIProvider } from "./openai.js";
|
|
3
|
+
import { AnthropicProvider } from "./anthropic.js";
|
|
4
|
+
import { createOllamaProvider } from "./ollama.js";
|
|
3
5
|
export function createProvider(config) {
|
|
4
6
|
switch (config.provider) {
|
|
5
7
|
case "codex-cli":
|
|
6
8
|
return new CodexProvider(config);
|
|
7
9
|
case "openai-api":
|
|
8
10
|
return new OpenAIProvider(config);
|
|
11
|
+
case "anthropic":
|
|
12
|
+
return new AnthropicProvider(config);
|
|
13
|
+
case "ollama":
|
|
14
|
+
return createOllamaProvider(config);
|
|
9
15
|
default:
|
|
10
16
|
throw new Error(`Unknown provider: ${config.provider}`);
|
|
11
17
|
}
|
|
@@ -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;
|
|
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;AAEnD,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;YACE,MAAM,IAAI,KAAK,CAAC,qBAAqB,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC5D,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ollama.d.ts","sourceRoot":"","sources":["../../../src/providers/ollama.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AA4B3C,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,CAc7D"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import OpenAI from "openai";
|
|
2
|
+
import { OpenAIProvider } from "./openai.js";
|
|
3
|
+
import { log } from "../utils/logger.js";
|
|
4
|
+
/**
|
|
5
|
+
* Ollama provider — wraps OpenAIProvider with Ollama's OpenAI-compatible base URL.
|
|
6
|
+
*
|
|
7
|
+
* Ollama exposes an OpenAI-compatible API at http://localhost:11434/v1 (default).
|
|
8
|
+
* No new class needed — inject a pre-configured OpenAI client into OpenAIProvider.
|
|
9
|
+
* The `name` field is overridden so logs and tests see "ollama" not "openai-api".
|
|
10
|
+
*
|
|
11
|
+
* Prerequisites:
|
|
12
|
+
* - `ollama serve` must be running
|
|
13
|
+
* - The target model must be pulled: `ollama pull <model>`
|
|
14
|
+
*
|
|
15
|
+
* Recommended models for tool-calling skills (/satori, /consensus-plan):
|
|
16
|
+
* qwen2.5-coder:7b or llama3.1:8b — both support function calling via Ollama.
|
|
17
|
+
* llama3.2 (3B) may drop tool calls on complex prompts.
|
|
18
|
+
*/
|
|
19
|
+
function isLocalUrl(url) {
|
|
20
|
+
try {
|
|
21
|
+
const { hostname } = new URL(url);
|
|
22
|
+
return hostname === "localhost" || hostname === "127.0.0.1" || hostname === "::1";
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
export function createOllamaProvider(config) {
|
|
29
|
+
const baseURL = config.ollamaBaseUrl ?? "http://localhost:11434/v1";
|
|
30
|
+
if (!isLocalUrl(baseURL)) {
|
|
31
|
+
log.warn(`Ollama: remote server configured (${baseURL}) — prompts and tool results will be sent to that host. Ensure this is intentional.`);
|
|
32
|
+
}
|
|
33
|
+
// Ollama accepts any non-empty string as API key — required by the OpenAI SDK
|
|
34
|
+
const client = new OpenAI({ baseURL, apiKey: "ollama" });
|
|
35
|
+
// Pass apiKey: "ollama" so OpenAIProvider skips the "no API key" guard.
|
|
36
|
+
const provider = new OpenAIProvider({ ...config, apiKey: "ollama" }, client);
|
|
37
|
+
// Override the inherited name so logs and tests see "ollama" not "openai-api".
|
|
38
|
+
// OpenAIProvider.name is a public mutable string field, so this cast is safe.
|
|
39
|
+
provider.name = "ollama";
|
|
40
|
+
return provider;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=ollama.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ollama.js","sourceRoot":"","sources":["../../../src/providers/ollama.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAG5B,OAAO,EAAE,cAAc,EAAyB,MAAM,aAAa,CAAC;AACpE,OAAO,EAAE,GAAG,EAAE,MAAM,oBAAoB,CAAC;AAEzC;;;;;;;;;;;;;;GAcG;AACH,SAAS,UAAU,CAAC,GAAW;IAC7B,IAAI,CAAC;QACH,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QAClC,OAAO,QAAQ,KAAK,WAAW,IAAI,QAAQ,KAAK,WAAW,IAAI,QAAQ,KAAK,KAAK,CAAC;IACpF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,MAAc;IACjD,MAAM,OAAO,GAAG,MAAM,CAAC,aAAa,IAAI,2BAA2B,CAAC;IACpE,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACzB,GAAG,CAAC,IAAI,CAAC,qCAAqC,OAAO,qFAAqF,CAAC,CAAC;IAC9I,CAAC;IACD,8EAA8E;IAC9E,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAgC,CAAC;IAExF,wEAAwE;IACxE,MAAM,QAAQ,GAAG,IAAI,cAAc,CAAC,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,EAAE,MAAM,CAAC,CAAC;IAC7E,+EAA+E;IAC/E,8EAA8E;IAC7E,QAAwC,CAAC,IAAI,GAAG,QAAQ,CAAC;IAC1D,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../../src/skills/loader.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAmBxC;;;;;;;;;;GAUG;AACH,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,CAkCrE;
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../../src/skills/loader.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAmBxC;;;;;;;;;;GAUG;AACH,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC,CAkCrE;AAkID;;;;;;;;;GASG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC,CAyBtD"}
|
|
@@ -101,23 +101,64 @@ async function parseSkillFile(path) {
|
|
|
101
101
|
else if (typeof meta.triggers === "string") {
|
|
102
102
|
triggerPhrases = meta.triggers.split(",").map((s) => s.trim()).filter(Boolean);
|
|
103
103
|
}
|
|
104
|
-
if (typeof meta.model === "string" && meta.model.length > 0)
|
|
104
|
+
if (typeof meta.model === "string" && meta.model.length > 0) {
|
|
105
|
+
const VALID_MODEL_TIERS = ["fast", "smart"];
|
|
106
|
+
// Allow "fast", "smart", and any literal model string (non-empty).
|
|
107
|
+
// Warn if it looks like a misspelled tier (short word, not a known model ID).
|
|
108
|
+
const isLiteralModel = meta.model.includes("-") || meta.model.includes("/") || meta.model.includes(".");
|
|
109
|
+
const isKnownTier = VALID_MODEL_TIERS.includes(meta.model);
|
|
110
|
+
if (!isKnownTier && !isLiteralModel && meta.model.length < 20) {
|
|
111
|
+
console.warn(`[phase2s] Warning: skill at ${path}: model: '${meta.model}' looks like a misspelled tier. Valid tiers: fast, smart. Treating as literal model name.`);
|
|
112
|
+
}
|
|
105
113
|
skill_model = meta.model;
|
|
114
|
+
}
|
|
106
115
|
if (typeof meta.retries === "number" && meta.retries > 0)
|
|
107
116
|
skill_retries = meta.retries;
|
|
108
|
-
// Parse inputs: key — must be an object mapping name → { prompt: string }
|
|
117
|
+
// Parse inputs: key — must be an object mapping name → { prompt: string, type?, enum? }
|
|
109
118
|
if (meta.inputs !== null &&
|
|
110
119
|
meta.inputs !== undefined &&
|
|
111
120
|
typeof meta.inputs === "object" &&
|
|
112
121
|
!Array.isArray(meta.inputs)) {
|
|
113
122
|
const rawInputs = meta.inputs;
|
|
114
123
|
const parsed = {};
|
|
124
|
+
const VALID_INPUT_TYPES = ["string", "boolean", "enum", "number"];
|
|
115
125
|
for (const [key, val] of Object.entries(rawInputs)) {
|
|
116
126
|
if (val !== null &&
|
|
117
127
|
typeof val === "object" &&
|
|
118
128
|
!Array.isArray(val) &&
|
|
119
129
|
typeof val.prompt === "string") {
|
|
120
|
-
|
|
130
|
+
const rawVal = val;
|
|
131
|
+
const input = {
|
|
132
|
+
prompt: rawVal.prompt,
|
|
133
|
+
};
|
|
134
|
+
// Parse type field
|
|
135
|
+
if (rawVal.type !== undefined) {
|
|
136
|
+
if (VALID_INPUT_TYPES.includes(rawVal.type)) {
|
|
137
|
+
input.type = rawVal.type;
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
140
|
+
console.warn(`[phase2s] Warning: skill at ${path}: input '${key}' has unrecognized type: '${rawVal.type}'. Valid types: string, boolean, enum, number. Falling back to 'string'.`);
|
|
141
|
+
input.type = "string";
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
// Parse enum field (only meaningful when type === "enum")
|
|
145
|
+
if (rawVal.enum !== undefined) {
|
|
146
|
+
if (Array.isArray(rawVal.enum)) {
|
|
147
|
+
input.enum = rawVal.enum.filter((e) => typeof e === "string");
|
|
148
|
+
}
|
|
149
|
+
else if (typeof rawVal.enum === "string") {
|
|
150
|
+
// YAML parsers coerce single-item arrays to strings — normalize gracefully
|
|
151
|
+
console.warn(`[phase2s] Warning: skill at ${path}: input '${key}' enum: is a string, not an array. Coercing to single-element array ['${rawVal.enum}'].`);
|
|
152
|
+
input.enum = [rawVal.enum];
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
// Validate enum completeness: type=enum with empty/absent enum array falls back to string
|
|
156
|
+
if (input.type === "enum" && (!input.enum || input.enum.length === 0)) {
|
|
157
|
+
console.warn(`[phase2s] Warning: skill at ${path}: input '${key}' has type: 'enum' but no valid enum values. Falling back to type: 'string'.`);
|
|
158
|
+
input.type = "string";
|
|
159
|
+
delete input.enum;
|
|
160
|
+
}
|
|
161
|
+
parsed[key] = input;
|
|
121
162
|
}
|
|
122
163
|
}
|
|
123
164
|
if (Object.keys(parsed).length > 0)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../../src/skills/loader.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../../src/skills/loader.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,17 @@ export interface SkillInput {
|
|
|
2
2
|
/** Human-readable prompt shown to the user in REPL mode, and used as the
|
|
3
3
|
* MCP tool parameter description in MCP mode. */
|
|
4
4
|
prompt: string;
|
|
5
|
+
/**
|
|
6
|
+
* Optional type for the input. Controls the JSON Schema type emitted for MCP
|
|
7
|
+
* tool parameters. All values are stringified before template substitution.
|
|
8
|
+
* Defaults to "string" when absent or unrecognized.
|
|
9
|
+
*/
|
|
10
|
+
type?: "string" | "boolean" | "enum" | "number";
|
|
11
|
+
/**
|
|
12
|
+
* Valid enum values. Only used when type === "enum". If absent or empty when
|
|
13
|
+
* type is "enum", the field falls back to type "string".
|
|
14
|
+
*/
|
|
15
|
+
enum?: string[];
|
|
5
16
|
}
|
|
6
17
|
export interface Skill {
|
|
7
18
|
name: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/skills/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB;sDACkD;IAClD,MAAM,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/skills/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB;sDACkD;IAClD,MAAM,EAAE,MAAM,CAAC;IACf;;;;OAIG;IACH,IAAI,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,CAAC;IAChD;;;OAGG;IACH,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,MAAM,WAAW,KAAK;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,uEAAuE;IACvE,cAAc,EAAE,MAAM,CAAC;IACvB,mDAAmD;IACnD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,mFAAmF;IACnF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,8DAA8D;IAC9D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;CACrC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@scanton/phase2s",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.18.0",
|
|
4
4
|
"description": "AI programming harness with multi-model support",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"files": [
|
|
@@ -39,11 +39,12 @@
|
|
|
39
39
|
],
|
|
40
40
|
"license": "MIT",
|
|
41
41
|
"dependencies": {
|
|
42
|
+
"@anthropic-ai/sdk": "^0.82.0",
|
|
42
43
|
"@iarna/toml": "^2.2.5",
|
|
43
44
|
"@types/iarna__toml": "^2.0.5",
|
|
44
45
|
"chalk": "^5.3.0",
|
|
45
46
|
"commander": "^12.1.0",
|
|
46
|
-
"glob": "^
|
|
47
|
+
"glob": "^13.0.0",
|
|
47
48
|
"openai": "^4.73.0",
|
|
48
49
|
"yaml": "^2.6.0",
|
|
49
50
|
"zod": "^3.23.0"
|