poe-code 3.0.116-beta.1 → 3.0.117
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 +23 -13
- package/dist/cli/command-not-found.js +1 -3
- package/dist/cli/command-not-found.js.map +1 -1
- package/dist/cli/commands/auth.js +25 -34
- package/dist/cli/commands/auth.js.map +1 -1
- package/dist/cli/commands/experiment.d.ts +3 -0
- package/dist/cli/commands/experiment.js +567 -0
- package/dist/cli/commands/experiment.js.map +1 -0
- package/dist/cli/commands/generate.js.map +1 -1
- package/dist/cli/commands/models.js +1 -1
- package/dist/cli/commands/models.js.map +1 -1
- package/dist/cli/commands/pipeline.js +6 -4
- package/dist/cli/commands/pipeline.js.map +1 -1
- package/dist/cli/commands/ralph.js +12 -6
- package/dist/cli/commands/ralph.js.map +1 -1
- package/dist/cli/commands/usage.d.ts +24 -0
- package/dist/cli/commands/usage.js +26 -4
- package/dist/cli/commands/usage.js.map +1 -1
- package/dist/cli/commands/version.js +1 -1
- package/dist/cli/commands/version.js.map +1 -1
- package/dist/cli/error-logger.js +3 -1
- package/dist/cli/error-logger.js.map +1 -1
- package/dist/cli/oauth-login.js +4 -2
- package/dist/cli/oauth-login.js.map +1 -1
- package/dist/cli/program.js +26 -11
- package/dist/cli/program.js.map +1 -1
- package/dist/cli/service-registry.js +3 -2
- package/dist/cli/service-registry.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.js +11560 -30168
- package/dist/index.js.map +4 -4
- package/dist/providers/claude-code.js +24 -24
- package/dist/providers/claude-code.js.map +1 -1
- package/dist/providers/codex.js +28 -28
- package/dist/providers/codex.js.map +2 -2
- package/dist/providers/kimi.js +24 -24
- package/dist/providers/kimi.js.map +1 -1
- package/dist/providers/opencode.js +28 -28
- package/dist/providers/opencode.js.map +2 -2
- package/dist/providers/poe-agent.js +10 -2
- package/dist/providers/poe-agent.js.map +2 -2
- package/dist/sdk/experiment.d.ts +10 -0
- package/dist/sdk/experiment.js +59 -0
- package/dist/sdk/experiment.js.map +1 -0
- package/dist/sdk/pipeline.js +1 -1
- package/dist/sdk/pipeline.js.map +1 -1
- package/dist/sdk/spawn-core.js +3 -2
- package/dist/sdk/spawn-core.js.map +1 -1
- package/dist/tools/label-generator.js +1 -1
- package/dist/utils/command-checks.d.ts +1 -1
- package/dist/utils/command-checks.js +1 -1
- package/dist/utils/execution-context.js +5 -5
- package/dist/utils/execution-context.js.map +1 -1
- package/package.json +45 -41
package/README.md
CHANGED
|
@@ -4,21 +4,21 @@
|
|
|
4
4
|
<h1>Poe Code ⚡</h1>
|
|
5
5
|
|
|
6
6
|
<a href="https://poe.com"><img src="https://img.shields.io/badge/Poe-Sign up-purple?logo=poe&logoColor=white&color=5D5CDE&style=for-the-badge" alt="Discord"></a>
|
|
7
|
-
<a href="https://
|
|
7
|
+
<a href="https://www.npmjs.com/package/poe-code"><img alt="NPM version" src="https://img.shields.io/npm/v/next.svg?&style=for-the-badge&color=09B16B"></a>
|
|
8
8
|
<a href="https://discord.gg/joinpoe"><img src="https://img.shields.io/badge/Discord-Join-purple?logo=discord&logoColor=white&color=FF44D3&style=for-the-badge" alt="Discord"></a>
|
|
9
9
|
|
|
10
10
|
</div>
|
|
11
11
|
|
|
12
12
|
Power your favorite coding agents (Claude Code, Codex, OpenCode, and more) with your Poe subscription—**no need to handle multiple providers/accounts.** Poe Code routes everything through the [Poe API](https://poe.com/api) .
|
|
13
13
|
|
|
14
|
-
Use it on a single session (`
|
|
14
|
+
Use it on a single session (`npx poe-code@latest wrap claude`) or configure it as your default and use your tools normally.
|
|
15
15
|
|
|
16
16
|
## Quickstart
|
|
17
17
|
|
|
18
18
|
Start a coding session routing all your `claude` calls to Poe
|
|
19
19
|
|
|
20
20
|
```bash
|
|
21
|
-
|
|
21
|
+
npx poe-code@latest wrap claude
|
|
22
22
|
# Also available: codex, opencode, kimi
|
|
23
23
|
```
|
|
24
24
|
|
|
@@ -30,16 +30,16 @@ This updates the provider’s config files and continue using your tools normall
|
|
|
30
30
|
|
|
31
31
|
```bash
|
|
32
32
|
# Start the interactive setup
|
|
33
|
-
|
|
33
|
+
npx poe-code@latest configure
|
|
34
34
|
|
|
35
35
|
# Setup a specific agent
|
|
36
|
-
|
|
36
|
+
npx poe-code@latest configure codex # (or claude, opencode, kimi)
|
|
37
37
|
```
|
|
38
38
|
|
|
39
39
|
### Unconfigure (remove overrides)
|
|
40
40
|
|
|
41
41
|
```bash
|
|
42
|
-
|
|
42
|
+
npx poe-code@latest unconfigure claude
|
|
43
43
|
```
|
|
44
44
|
|
|
45
45
|
### Logout (remove config + credentials)
|
|
@@ -55,6 +55,7 @@ npx poe-code@latest logout
|
|
|
55
55
|
- [Models](#models)
|
|
56
56
|
- [MCP Server](#poe-mcp-server)
|
|
57
57
|
- [SDK](#sdk)
|
|
58
|
+
- [Experimental](#experimental)
|
|
58
59
|
- [Poe API](https://poe.com/api)
|
|
59
60
|
|
|
60
61
|
## Utilities
|
|
@@ -64,35 +65,35 @@ Utilities are especially useful for scripting and CI/CD.
|
|
|
64
65
|
#### Spawn a one-off prompt
|
|
65
66
|
|
|
66
67
|
```bash
|
|
67
|
-
|
|
68
|
+
npx poe-code@latest spawn codex "Say hello"
|
|
68
69
|
```
|
|
69
70
|
|
|
70
71
|
#### Spawn a prompt via stdin
|
|
71
72
|
|
|
72
73
|
```bash
|
|
73
|
-
echo "Say hello" |
|
|
74
|
+
echo "Say hello" | npx poe-code@latest spawn codex
|
|
74
75
|
```
|
|
75
76
|
|
|
76
77
|
#### Test a configured service
|
|
77
78
|
|
|
78
79
|
```bash
|
|
79
|
-
|
|
80
|
+
npx poe-code@latest test codex
|
|
80
81
|
```
|
|
81
82
|
|
|
82
83
|
### Install agent CLIs
|
|
83
84
|
|
|
84
85
|
```bash
|
|
85
86
|
# Claude Code
|
|
86
|
-
|
|
87
|
+
npx poe-code@latest install claude-code
|
|
87
88
|
|
|
88
89
|
# Codex
|
|
89
|
-
|
|
90
|
+
npx poe-code@latest install codex
|
|
90
91
|
|
|
91
92
|
# OpenCode
|
|
92
|
-
|
|
93
|
+
npx poe-code@latest install opencode
|
|
93
94
|
|
|
94
95
|
# Kimi
|
|
95
|
-
|
|
96
|
+
npx poe-code@latest install kimi
|
|
96
97
|
```
|
|
97
98
|
|
|
98
99
|
### Optional flags
|
|
@@ -211,3 +212,12 @@ Reads the Poe API key with the following priority:
|
|
|
211
212
|
2. Credentials file (`~/.poe-code/credentials.json`)
|
|
212
213
|
|
|
213
214
|
Throws if no credentials found.
|
|
215
|
+
|
|
216
|
+
## Research Preview
|
|
217
|
+
|
|
218
|
+
These features are available but subject to breaking changes.
|
|
219
|
+
|
|
220
|
+
- **[Pipeline](packages/pipeline/)** — Run YAML task plans through agents with configurable steps
|
|
221
|
+
- **[Ralph](packages/ralph/)** — Agentic build loop that iterates on a markdown doc
|
|
222
|
+
- **[Experiment loop](docs/plans/experiment-loop.md)** — Karpathy-style optimize loop: agent changes code, eval script scores it, keep or discard via git, repeat.
|
|
223
|
+
- **[Poe Agent](packages/poe-agent/)** — Composable agent runtime
|
|
@@ -28,9 +28,7 @@ export function throwCommandNotFound(input) {
|
|
|
28
28
|
else {
|
|
29
29
|
logger.error(`${panel.label}\n${panel.footer}`);
|
|
30
30
|
}
|
|
31
|
-
|
|
32
|
-
process.exitCode = 1;
|
|
33
|
-
}
|
|
31
|
+
process.exitCode = 1;
|
|
34
32
|
throw new SilentError();
|
|
35
33
|
}
|
|
36
34
|
//# sourceMappingURL=command-not-found.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command-not-found.js","sourceRoot":"","sources":["../../src/cli/command-not-found.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAC1F,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAE7F,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,UAAU,oBAAoB,CAAC,KAMpC;IACC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;IAExE,MAAM,OAAO,GAAG,sBAAsB,CAAC;QACrC,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,GAAG,EAAE,SAAS,CAAC,GAAG,CAAC,SAAS;QAC5B,SAAS;KACV,CAAC,CAAC;IACH,MAAM,WAAW,GAAG,oBAAoB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC5D,MAAM,KAAK,GAAG,0BAA0B,CAAC;QACvC,KAAK,EAAE,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG,KAAK,oBAAoB;QAC3E,cAAc;QACd,WAAW;KACZ,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,SAAS,CAAC,aAAa,CAAC,MAAM,CAAC;QAC5C,MAAM,EAAE,KAAK;QACb,OAAO,EAAE,KAAK;QACd,KAAK;KACN,CAAC,CAAC;IAEH,MAAM,sBAAsB,GAAG,SAAS,CAAC,YAAY,CAAC,MAAM,IAAI,IAAI,CAAC;IACrE,IAAI,sBAAsB,EAAE,CAAC;QAC3B,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC1B,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;QAC5D,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACtB,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IAClD,CAAC;IAED,
|
|
1
|
+
{"version":3,"file":"command-not-found.js","sourceRoot":"","sources":["../../src/cli/command-not-found.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAC1F,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAE7F,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,UAAU,oBAAoB,CAAC,KAMpC;IACC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,cAAc,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC;IAExE,MAAM,OAAO,GAAG,sBAAsB,CAAC;QACrC,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,GAAG,EAAE,SAAS,CAAC,GAAG,CAAC,SAAS;QAC5B,SAAS;KACV,CAAC,CAAC;IACH,MAAM,WAAW,GAAG,oBAAoB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IAC5D,MAAM,KAAK,GAAG,0BAA0B,CAAC;QACvC,KAAK,EAAE,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,GAAG,KAAK,oBAAoB;QAC3E,cAAc;QACd,WAAW;KACZ,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,SAAS,CAAC,aAAa,CAAC,MAAM,CAAC;QAC5C,MAAM,EAAE,KAAK;QACb,OAAO,EAAE,KAAK;QACd,KAAK;KACN,CAAC,CAAC;IAEH,MAAM,sBAAsB,GAAG,SAAS,CAAC,YAAY,CAAC,MAAM,IAAI,IAAI,CAAC;IACrE,IAAI,sBAAsB,EAAE,CAAC;QAC3B,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC1B,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC;QAC5D,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IACtB,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,KAAK,KAAK,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;IAClD,CAAC;IAED,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACrB,MAAM,IAAI,WAAW,EAAE,CAAC;AAC1B,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { ApiError } from "../errors.js";
|
|
2
|
-
import {
|
|
2
|
+
import { spinner } from "@poe-code/design-system";
|
|
3
3
|
import { createExecutionResources, resolveCommandFlags } from "./shared.js";
|
|
4
4
|
import { executeLogin } from "./login.js";
|
|
5
5
|
import { executeLogout } from "./logout.js";
|
|
@@ -42,42 +42,33 @@ async function executeStatus(program, container) {
|
|
|
42
42
|
resources.logger.intro("auth status");
|
|
43
43
|
try {
|
|
44
44
|
const apiKey = await container.readApiKey();
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
resources.logger.dryRun("Dry run: would fetch usage balance from Poe API.");
|
|
50
|
-
}
|
|
51
|
-
else {
|
|
52
|
-
const response = await container.httpClient(`${container.env.poeBaseUrl}/usage/current_balance`, {
|
|
53
|
-
method: "GET",
|
|
54
|
-
headers: {
|
|
55
|
-
Authorization: `Bearer ${apiKey}`
|
|
56
|
-
}
|
|
57
|
-
});
|
|
58
|
-
if (!response.ok) {
|
|
59
|
-
throw new ApiError(`Failed to fetch usage balance (HTTP ${response.status})`, {
|
|
60
|
-
httpStatus: response.status,
|
|
61
|
-
endpoint: "/usage/current_balance"
|
|
62
|
-
});
|
|
63
|
-
}
|
|
64
|
-
const data = (await response.json());
|
|
65
|
-
const formattedBalance = data.current_point_balance.toLocaleString("en-US");
|
|
66
|
-
resources.logger.info(`Current balance: ${formattedBalance} points`);
|
|
67
|
-
}
|
|
45
|
+
if (!apiKey) {
|
|
46
|
+
resources.logger.info("Not logged in");
|
|
47
|
+
resources.context.finalize();
|
|
48
|
+
return;
|
|
68
49
|
}
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
});
|
|
74
|
-
const configuredAgentNames = Object.keys(configuredServices).sort();
|
|
75
|
-
if (configuredAgentNames.length === 0) {
|
|
76
|
-
resources.logger.info("No agents configured.");
|
|
50
|
+
if (flags.dryRun) {
|
|
51
|
+
resources.logger.dryRun("Dry run: would fetch identity from Poe API.");
|
|
52
|
+
resources.context.finalize();
|
|
53
|
+
return;
|
|
77
54
|
}
|
|
78
|
-
|
|
79
|
-
|
|
55
|
+
const s = spinner();
|
|
56
|
+
s.start("Checking authentication...");
|
|
57
|
+
const response = await container.httpClient(`${container.env.poeApiBaseUrl}/whoami`, {
|
|
58
|
+
method: "POST",
|
|
59
|
+
headers: {
|
|
60
|
+
Authorization: `Bearer ${apiKey}`
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
if (!response.ok) {
|
|
64
|
+
s.stop("Authentication failed");
|
|
65
|
+
throw new ApiError(`Failed to fetch identity (HTTP ${response.status})`, {
|
|
66
|
+
httpStatus: response.status,
|
|
67
|
+
endpoint: "/v1/whoami"
|
|
68
|
+
});
|
|
80
69
|
}
|
|
70
|
+
const identity = (await response.json());
|
|
71
|
+
s.stop(`Logged in as ${identity.name} (@${identity.handle})`);
|
|
81
72
|
resources.context.finalize();
|
|
82
73
|
}
|
|
83
74
|
catch (error) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/cli/commands/auth.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/cli/commands/auth.ts"],"names":[],"mappings":"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"}
|