poe-code 2.0.59 → 2.0.61

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.
Files changed (62) hide show
  1. package/dist/cli/commands/generate.d.ts +9 -0
  2. package/dist/cli/commands/generate.js +320 -0
  3. package/dist/cli/commands/generate.js.map +1 -0
  4. package/dist/cli/commands/mcp.d.ts +9 -0
  5. package/dist/cli/commands/mcp.js +132 -0
  6. package/dist/cli/commands/mcp.js.map +1 -0
  7. package/dist/cli/constants.d.ts +4 -1
  8. package/dist/cli/constants.js +4 -1
  9. package/dist/cli/constants.js.map +1 -1
  10. package/dist/cli/container.js +2 -1
  11. package/dist/cli/container.js.map +1 -1
  12. package/dist/cli/http.d.ts +1 -0
  13. package/dist/cli/mcp-server.d.ts +34 -0
  14. package/dist/cli/mcp-server.js +239 -0
  15. package/dist/cli/mcp-server.js.map +1 -0
  16. package/dist/cli/program.js +9 -4
  17. package/dist/cli/program.js.map +1 -1
  18. package/dist/cli/prompts.d.ts +0 -1
  19. package/dist/cli/prompts.js +1 -6
  20. package/dist/cli/prompts.js.map +1 -1
  21. package/dist/cli/service-registry.d.ts +10 -0
  22. package/dist/cli/service-registry.js.map +1 -1
  23. package/dist/cli/ui/clack-static.d.ts +51 -0
  24. package/dist/cli/ui/clack-static.js +59 -0
  25. package/dist/cli/ui/clack-static.js.map +1 -0
  26. package/dist/index.d.ts +2 -1
  27. package/dist/index.js +1 -0
  28. package/dist/index.js.map +1 -1
  29. package/dist/providers/claude-code.js +4 -0
  30. package/dist/providers/claude-code.js.map +1 -1
  31. package/dist/providers/codex.js +5 -0
  32. package/dist/providers/codex.js.map +1 -1
  33. package/dist/providers/create-provider.d.ts +3 -1
  34. package/dist/providers/create-provider.js +6 -0
  35. package/dist/providers/create-provider.js.map +1 -1
  36. package/dist/providers/kimi.js +4 -0
  37. package/dist/providers/kimi.js.map +1 -1
  38. package/dist/providers/mcp-config.d.ts +35 -0
  39. package/dist/providers/mcp-config.js +135 -0
  40. package/dist/providers/mcp-config.js.map +1 -0
  41. package/dist/providers/opencode.js +11 -0
  42. package/dist/providers/opencode.js.map +1 -1
  43. package/dist/sdk/generate.d.ts +5 -0
  44. package/dist/sdk/generate.js +94 -0
  45. package/dist/sdk/generate.js.map +1 -0
  46. package/dist/sdk/types.d.ts +14 -0
  47. package/dist/services/client-instance.d.ts +12 -0
  48. package/dist/services/client-instance.js +36 -0
  49. package/dist/services/client-instance.js.map +1 -0
  50. package/dist/services/llm-client.d.ts +21 -0
  51. package/dist/services/llm-client.js +131 -0
  52. package/dist/services/llm-client.js.map +1 -0
  53. package/dist/services/media-download.d.ts +17 -0
  54. package/dist/services/media-download.js +42 -0
  55. package/dist/services/media-download.js.map +1 -0
  56. package/dist/utils/execution-context.d.ts +40 -0
  57. package/dist/utils/execution-context.js +128 -0
  58. package/dist/utils/execution-context.js.map +1 -0
  59. package/package.json +13 -3
  60. package/dist/cli/commands/query.d.ts +0 -6
  61. package/dist/cli/commands/query.js +0 -76
  62. package/dist/cli/commands/query.js.map +0 -1
@@ -0,0 +1,17 @@
1
+ import type { FileSystem } from "../utils/file-system.js";
2
+ export declare class MediaDownloadError extends Error {
3
+ readonly kind: "fetch" | "write";
4
+ readonly url: string;
5
+ readonly outputPath: string;
6
+ constructor(message: string, options: {
7
+ kind: "fetch" | "write";
8
+ url: string;
9
+ outputPath: string;
10
+ });
11
+ }
12
+ export declare function downloadToFile(options: {
13
+ url: string;
14
+ outputPath: string;
15
+ fs: FileSystem;
16
+ fetcher?: typeof fetch;
17
+ }): Promise<void>;
@@ -0,0 +1,42 @@
1
+ export class MediaDownloadError extends Error {
2
+ kind;
3
+ url;
4
+ outputPath;
5
+ constructor(message, options) {
6
+ super(message);
7
+ this.name = "MediaDownloadError";
8
+ this.kind = options.kind;
9
+ this.url = options.url;
10
+ this.outputPath = options.outputPath;
11
+ }
12
+ }
13
+ export async function downloadToFile(options) {
14
+ const fetcher = options.fetcher ?? globalThis.fetch;
15
+ if (!fetcher) {
16
+ throw new MediaDownloadError("Fetch is not available", {
17
+ kind: "fetch",
18
+ url: options.url,
19
+ outputPath: options.outputPath
20
+ });
21
+ }
22
+ const response = await fetcher(options.url);
23
+ if (!response.ok) {
24
+ throw new MediaDownloadError("Failed to download media", {
25
+ kind: "fetch",
26
+ url: options.url,
27
+ outputPath: options.outputPath
28
+ });
29
+ }
30
+ const buffer = Buffer.from(await response.arrayBuffer());
31
+ try {
32
+ await options.fs.writeFile(options.outputPath, buffer);
33
+ }
34
+ catch {
35
+ throw new MediaDownloadError("Failed to write media", {
36
+ kind: "write",
37
+ url: options.url,
38
+ outputPath: options.outputPath
39
+ });
40
+ }
41
+ }
42
+ //# sourceMappingURL=media-download.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"media-download.js","sourceRoot":"","sources":["../../src/services/media-download.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,kBAAmB,SAAQ,KAAK;IAClC,IAAI,CAAoB;IACxB,GAAG,CAAS;IACZ,UAAU,CAAS;IAE5B,YAAY,OAAe,EAAE,OAAqE;QAChG,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;QACjC,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC;QACzB,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC;QACvB,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC;IACvC,CAAC;CACF;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAKpC;IACC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,UAAU,CAAC,KAAK,CAAC;IACpD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,kBAAkB,CAAC,wBAAwB,EAAE;YACrD,IAAI,EAAE,OAAO;YACb,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,UAAU,EAAE,OAAO,CAAC,UAAU;SAC/B,CAAC,CAAC;IACL,CAAC;IAED,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC5C,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;QACjB,MAAM,IAAI,kBAAkB,CAAC,0BAA0B,EAAE;YACvD,IAAI,EAAE,OAAO;YACb,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,UAAU,EAAE,OAAO,CAAC,UAAU;SAC/B,CAAC,CAAC;IACL,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC;IAEzD,IAAI,CAAC;QACH,MAAM,OAAO,CAAC,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IACzD,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,kBAAkB,CAAC,uBAAuB,EAAE;YACpD,IAAI,EAAE,OAAO;YACb,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,UAAU,EAAE,OAAO,CAAC,UAAU;SAC/B,CAAC,CAAC;IACL,CAAC;AACH,CAAC"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Represents how poe-code should be invoked
3
+ */
4
+ export interface ExecutionCommand {
5
+ /** The binary/command to run */
6
+ command: string;
7
+ /** Arguments to pass (excludes the subcommand) */
8
+ args: string[];
9
+ }
10
+ export type ExecutionMode = "global" | "npx" | "npx-latest" | "npx-beta" | "development";
11
+ interface ExecutionContext {
12
+ mode: ExecutionMode;
13
+ command: ExecutionCommand;
14
+ }
15
+ interface DetectionInput {
16
+ argv: string[];
17
+ env: Record<string, string | undefined>;
18
+ moduleUrl: string;
19
+ }
20
+ /**
21
+ * Detects how poe-code is being executed and returns the appropriate
22
+ * command format for spawning it again (e.g., for MCP server config)
23
+ */
24
+ export declare function detectExecutionContext(input: DetectionInput): ExecutionContext;
25
+ /**
26
+ * Converts an ExecutionCommand to the format expected by different MCP clients
27
+ */
28
+ export declare function toMcpServerCommand(execCommand: ExecutionCommand, subcommand: string): {
29
+ command: string;
30
+ args: string[];
31
+ };
32
+ /**
33
+ * Converts an ExecutionCommand to OpenCode's MCP format (command as array)
34
+ */
35
+ export declare function toOpenCodeMcpCommand(execCommand: ExecutionCommand, subcommand: string): string[];
36
+ /**
37
+ * Get the current execution context using process globals
38
+ */
39
+ export declare function getCurrentExecutionContext(moduleUrl: string): ExecutionContext;
40
+ export {};
@@ -0,0 +1,128 @@
1
+ import { dirname } from "node:path";
2
+ import { fileURLToPath } from "node:url";
3
+ /**
4
+ * Detects how poe-code is being executed and returns the appropriate
5
+ * command format for spawning it again (e.g., for MCP server config)
6
+ */
7
+ export function detectExecutionContext(input) {
8
+ const { argv, env, moduleUrl } = input;
9
+ // Check for development mode (tsx, ts-node, or npm run dev)
10
+ if (isDevelopmentMode(argv, env)) {
11
+ return createDevelopmentContext(moduleUrl);
12
+ }
13
+ // Check for npx execution
14
+ if (isNpxExecution(env)) {
15
+ const version = detectNpxVersion(env);
16
+ return createNpxContext(version);
17
+ }
18
+ // Default to global installation
19
+ return {
20
+ mode: "global",
21
+ command: {
22
+ command: "poe-code",
23
+ args: []
24
+ }
25
+ };
26
+ }
27
+ function isDevelopmentMode(argv, env) {
28
+ const scriptPath = argv[1] ?? "";
29
+ // Running via tsx directly
30
+ if (scriptPath.endsWith(".ts") || scriptPath.includes("/src/")) {
31
+ return true;
32
+ }
33
+ // Running via npm run dev (check lifecycle event)
34
+ if (env.npm_lifecycle_event === "dev") {
35
+ return true;
36
+ }
37
+ // Check if node is running with tsx loader
38
+ const nodeOptions = env.NODE_OPTIONS ?? "";
39
+ if (nodeOptions.includes("tsx") || nodeOptions.includes("ts-node")) {
40
+ return true;
41
+ }
42
+ return false;
43
+ }
44
+ function isNpxExecution(env) {
45
+ // npx sets npm_execpath to the npm/npx binary
46
+ const execPath = env.npm_execpath ?? "";
47
+ if (execPath.includes("npx") || execPath.includes("npm")) {
48
+ // Also check if we're in a temporary npx cache directory
49
+ const packagePath = env.npm_package_json ?? "";
50
+ if (packagePath.includes("_npx") || packagePath.includes(".npm/_cacache")) {
51
+ return true;
52
+ }
53
+ }
54
+ // Check for npx-specific environment variable
55
+ if (env.npm_command === "exec") {
56
+ return true;
57
+ }
58
+ return false;
59
+ }
60
+ function detectNpxVersion(env) {
61
+ // Try to detect version from package path or npm config
62
+ const packageJson = env.npm_package_json ?? "";
63
+ const packageVersion = env.npm_package_version ?? "";
64
+ // Check if running from beta channel
65
+ if (packageJson.includes("@beta") || packageVersion.includes("beta")) {
66
+ return "beta";
67
+ }
68
+ // Check if explicitly using @latest
69
+ if (packageJson.includes("@latest")) {
70
+ return "latest";
71
+ }
72
+ return "default";
73
+ }
74
+ function createDevelopmentContext(moduleUrl) {
75
+ // Get the project root from the module URL
76
+ // The module could be anywhere in src/, so find /src/ in the path
77
+ const modulePath = fileURLToPath(moduleUrl);
78
+ // Find the src directory in the path and get its parent
79
+ const srcIndex = modulePath.lastIndexOf("/src/");
80
+ const projectRoot = srcIndex !== -1
81
+ ? modulePath.substring(0, srcIndex)
82
+ : dirname(dirname(modulePath));
83
+ return {
84
+ mode: "development",
85
+ command: {
86
+ command: "npm",
87
+ args: ["--silent", "--prefix", projectRoot, "run", "dev", "--"]
88
+ }
89
+ };
90
+ }
91
+ function createNpxContext(version) {
92
+ const packageSpec = version === "default"
93
+ ? "poe-code"
94
+ : `poe-code@${version}`;
95
+ return {
96
+ mode: version === "default" ? "npx" : `npx-${version}`,
97
+ command: {
98
+ command: "npx",
99
+ args: ["--yes", packageSpec]
100
+ }
101
+ };
102
+ }
103
+ /**
104
+ * Converts an ExecutionCommand to the format expected by different MCP clients
105
+ */
106
+ export function toMcpServerCommand(execCommand, subcommand) {
107
+ return {
108
+ command: execCommand.command,
109
+ args: [...execCommand.args, subcommand]
110
+ };
111
+ }
112
+ /**
113
+ * Converts an ExecutionCommand to OpenCode's MCP format (command as array)
114
+ */
115
+ export function toOpenCodeMcpCommand(execCommand, subcommand) {
116
+ return [execCommand.command, ...execCommand.args, subcommand];
117
+ }
118
+ /**
119
+ * Get the current execution context using process globals
120
+ */
121
+ export function getCurrentExecutionContext(moduleUrl) {
122
+ return detectExecutionContext({
123
+ argv: process.argv,
124
+ env: process.env,
125
+ moduleUrl
126
+ });
127
+ }
128
+ //# sourceMappingURL=execution-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execution-context.js","sourceRoot":"","sources":["../../src/utils/execution-context.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "poe-code",
3
- "version": "2.0.59",
3
+ "version": "2.0.61",
4
4
  "description": "CLI tool to configure Poe API for developer workflows.",
5
5
  "type": "module",
6
6
  "scripts": {
@@ -19,7 +19,15 @@
19
19
  "generate:design-docs": "tsx scripts/generate-design-docs.ts",
20
20
  "format": "prettier --check .",
21
21
  "format:write": "prettier --write .",
22
- "watch:diff": "tsx local_scripts/watch-diff.ts"
22
+ "watch:diff": "tsx local_scripts/watch-diff.ts",
23
+ "test:integration": "vitest run tests/integration/",
24
+ "test:record": "POE_SNAPSHOT_MODE=record npm run test:integration",
25
+ "test-generate": "tsx scripts/test-generate.ts",
26
+ "snapshots": "tsx scripts/snapshots.ts",
27
+ "snapshots:list": "npm run snapshots -- list",
28
+ "snapshots:refresh": "npm run snapshots -- refresh",
29
+ "snapshots:delete": "npm run snapshots -- delete",
30
+ "snapshots:delete-stale": "npm run snapshots -- delete --stale"
23
31
  },
24
32
  "bin": {
25
33
  "poe-code": "dist/index.js",
@@ -37,11 +45,13 @@
37
45
  "dependencies": {
38
46
  "@clack/prompts": "^0.11.0",
39
47
  "@iarna/toml": "^3.0.0",
48
+ "@modelcontextprotocol/sdk": "^1.25.3",
40
49
  "chalk": "^5.3.0",
41
50
  "commander": "^11.1.0",
42
51
  "diff": ">=8.0.3",
43
52
  "mustache": "^4.2.0",
44
- "semver": "^7.7.3"
53
+ "semver": "^7.7.3",
54
+ "zod": "^4.3.6"
45
55
  },
46
56
  "devDependencies": {
47
57
  "@types/mustache": "^4.2.6",
@@ -1,6 +0,0 @@
1
- import type { Command } from "commander";
2
- import type { CliContainer } from "../container.js";
3
- export interface RegisterQueryCommandOptions {
4
- defaultModel?: string;
5
- }
6
- export declare function registerQueryCommand(program: Command, container: CliContainer, options?: RegisterQueryCommandOptions): void;
@@ -1,76 +0,0 @@
1
- import { DEFAULT_FRONTIER_MODEL } from "../constants.js";
2
- import { createExecutionResources, resolveCommandFlags } from "./shared.js";
3
- import { loadCredentials } from "../../services/credentials.js";
4
- export function registerQueryCommand(program, container, options = {}) {
5
- program
6
- .command("query")
7
- .description("Query an LLM via Poe API directly.")
8
- .option("--model <model>", "Model identifier", options.defaultModel ?? DEFAULT_FRONTIER_MODEL)
9
- .option("--system <prompt>", "System prompt")
10
- .argument("[prompt]", "User prompt (if not provided, reads from stdin)")
11
- .action(async function (promptArg) {
12
- const flags = resolveCommandFlags(program);
13
- const resources = createExecutionResources(container, flags, "query");
14
- const commandOptions = this.opts();
15
- const model = commandOptions.model ?? options.defaultModel ?? DEFAULT_FRONTIER_MODEL;
16
- const systemPrompt = commandOptions.system;
17
- // Get prompt from argument or stdin
18
- let prompt = promptArg;
19
- if (!prompt) {
20
- // Check if stdin is being piped (not a TTY)
21
- if (!process.stdin.isTTY) {
22
- // Read from stdin
23
- const chunks = [];
24
- for await (const chunk of process.stdin) {
25
- chunks.push(chunk);
26
- }
27
- prompt = Buffer.concat(chunks).toString("utf8").trim();
28
- }
29
- }
30
- if (!prompt) {
31
- throw new Error("No prompt provided via argument or stdin");
32
- }
33
- if (flags.dryRun) {
34
- resources.logger.dryRun(`Dry run: would query model ${model} with prompt (${prompt.length} chars)`);
35
- if (systemPrompt) {
36
- resources.logger.dryRun(`System prompt: ${systemPrompt}`);
37
- }
38
- return;
39
- }
40
- const apiKey = await loadCredentials({
41
- fs: container.fs,
42
- filePath: container.env.credentialsPath
43
- });
44
- if (!apiKey) {
45
- throw new Error("Poe API key not found. Run 'poe-code login' first.");
46
- }
47
- const messages = [];
48
- if (systemPrompt) {
49
- messages.push({ role: "system", content: systemPrompt });
50
- }
51
- messages.push({ role: "user", content: prompt });
52
- const res = await fetch(`${container.env.poeApiBaseUrl}/chat/completions`, {
53
- method: "POST",
54
- headers: {
55
- "Content-Type": "application/json",
56
- Authorization: `Bearer ${apiKey}`
57
- },
58
- body: JSON.stringify({ model, messages })
59
- });
60
- if (!res.ok) {
61
- const errorText = await res.text();
62
- throw new Error(`Poe API error (${res.status}): ${errorText}`);
63
- }
64
- const chat = (await res.json());
65
- const response = chat.choices?.[0]?.message?.content;
66
- if (!response) {
67
- throw new Error("No response from LLM");
68
- }
69
- // Output to stdout (no logger prefix)
70
- process.stdout.write(response);
71
- if (!response.endsWith("\n")) {
72
- process.stdout.write("\n");
73
- }
74
- });
75
- }
76
- //# sourceMappingURL=query.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"query.js","sourceRoot":"","sources":["../../../src/cli/commands/query.ts"],"names":[],"mappings":"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"}