takomi 2.1.42 → 2.1.43

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.
@@ -41,12 +41,12 @@ The extension ships with two default upstream profiles:
41
41
  - auth mode: OAuth
42
42
  - oauth provider: `openai-codex`
43
43
  - api: `openai-codex-responses`
44
- - default models: `gpt-5.1`, `gpt-5.4`, `gpt-5.4-mini`
44
+ - default models: `gpt-5.4-mini`, `gpt-5.4`, `gpt-5.5`, `gpt-5.6-luna`, `gpt-5.6-sol`, `gpt-5.6-terra`
45
45
 
46
46
  2. `openai-compatible`
47
47
  - auth mode: API key fallback
48
48
  - api: `openai-responses`
49
- - default models: `gpt-4o`, `gpt-4.1`, `o4-mini`
49
+ - default models: `gpt-5.4-mini`, `gpt-5.4`, `gpt-5.5`, `gpt-5.6-luna`, `gpt-5.6-sol`, `gpt-5.6-terra`
50
50
 
51
51
  Edit `~/.pi/agent/oauth-router/config.json` to add more upstreams, swap endpoints, change model catalogs, or tune retry behavior. By default client-side transport failures such as `Codex SSE response headers timed out after 10000ms` retry the same account 5 times with exponential backoff (`5s`, `10s`, `20s`, `40s`, then capped at `60s`) before router failover. While this is happening, Pi's footer shows the active retry/failover/error state so the UI no longer looks frozen. These failures are recorded but do not cool down an account unless `clientNetworkPenaltyMs` is set above `0`.
52
52
 
@@ -62,8 +62,7 @@ Edit `~/.pi/agent/oauth-router/config.json` to add more upstreams, swap endpoint
62
62
  - `/router-status`
63
63
  - `/router-usage`
64
64
  5. Select a model:
65
- - `oauth-router/gpt-5.4`
66
- - `oauth-router/gpt-4o`
65
+ - `oauth-router/gpt-5.6-sol`
67
66
 
68
67
  ## Account storage format
69
68
 
@@ -11,69 +11,60 @@ export const STATE_PATH = join(DATA_ROOT, "state.json");
11
11
 
12
12
  const LEGACY_CODEX_CONTEXT_WINDOW = 272000;
13
13
  const SAFE_CODEX_CONTEXT_WINDOW = 240000;
14
- const CODEX_MODEL_IDS = new Set(["gpt-5.1", "gpt-5.4", "gpt-5.4-mini", "gpt-5.5"]);
14
+ const CODEX_MODEL_IDS = new Set(["gpt-5.4", "gpt-5.4-mini", "gpt-5.5", "gpt-5.6-luna", "gpt-5.6-sol", "gpt-5.6-terra"]);
15
15
 
16
16
  const DEFAULT_MODELS: RouterModelConfig[] = [
17
17
  {
18
- id: "gpt-4o",
19
- name: "GPT-4o",
20
- reasoning: false,
21
- input: ["text", "image"],
22
- cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
23
- contextWindow: 128000,
24
- maxTokens: 16384,
25
- },
26
- {
27
- id: "gpt-4.1",
28
- name: "GPT-4.1",
29
- reasoning: false,
18
+ id: "gpt-5.4-mini",
19
+ name: "GPT-5.4 Mini",
20
+ reasoning: true,
30
21
  input: ["text", "image"],
31
- cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
32
- contextWindow: 128000,
33
- maxTokens: 16384,
22
+ cost: { input: 0.75, output: 4.50, cacheRead: 0.075, cacheWrite: 0.9375 },
23
+ contextWindow: SAFE_CODEX_CONTEXT_WINDOW,
24
+ maxTokens: 128000,
34
25
  },
35
26
  {
36
- id: "o4-mini",
37
- name: "o4-mini",
27
+ id: "gpt-5.4",
28
+ name: "GPT-5.4",
38
29
  reasoning: true,
39
30
  input: ["text", "image"],
40
- cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
41
- contextWindow: 200000,
42
- maxTokens: 100000,
31
+ cost: { input: 2.50, output: 15.00, cacheRead: 0.25, cacheWrite: 3.125 },
32
+ contextWindow: SAFE_CODEX_CONTEXT_WINDOW,
33
+ maxTokens: 128000,
43
34
  },
44
35
  {
45
- id: "gpt-5.1",
46
- name: "GPT-5.1",
36
+ id: "gpt-5.5",
37
+ name: "GPT-5.5",
47
38
  reasoning: true,
48
39
  input: ["text", "image"],
49
- cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
40
+ cost: { input: 5.00, output: 30.00, cacheRead: 0.50, cacheWrite: 6.25 },
50
41
  contextWindow: SAFE_CODEX_CONTEXT_WINDOW,
51
42
  maxTokens: 128000,
52
43
  },
53
44
  {
54
- id: "gpt-5.4",
55
- name: "GPT-5.4",
45
+ id: "gpt-5.6-luna",
46
+ name: "GPT-5.6 Luna",
56
47
  reasoning: true,
57
48
  input: ["text", "image"],
58
- cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
49
+ cost: { input: 1.00, output: 6.00, cacheRead: 0.10, cacheWrite: 1.25 },
59
50
  contextWindow: SAFE_CODEX_CONTEXT_WINDOW,
60
51
  maxTokens: 128000,
61
52
  },
62
53
  {
63
- id: "gpt-5.4-mini",
64
- name: "GPT-5.4 Mini",
54
+ id: "gpt-5.6-sol",
55
+ name: "GPT-5.6 Sol",
65
56
  reasoning: true,
66
57
  input: ["text", "image"],
67
- cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
58
+ cost: { input: 5.00, output: 30.00, cacheRead: 0.50, cacheWrite: 6.25 },
68
59
  contextWindow: SAFE_CODEX_CONTEXT_WINDOW,
69
60
  maxTokens: 128000,
70
61
  },
71
62
  {
72
- id: "gpt-5.5",
73
- name: "GPT-5.5",
63
+ id: "gpt-5.6-terra",
64
+ name: "GPT-5.6 Terra",
74
65
  reasoning: true,
75
66
  input: ["text", "image"],
76
- cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
67
+ cost: { input: 2.50, output: 15.00, cacheRead: 0.25, cacheWrite: 3.125 },
77
68
  contextWindow: SAFE_CODEX_CONTEXT_WINDOW,
78
69
  maxTokens: 128000,
79
70
  },
@@ -88,7 +79,7 @@ const DEFAULT_UPSTREAMS: RouterUpstreamConfig[] = [
88
79
  api: "openai-responses",
89
80
  authMode: "api-key",
90
81
  enabled: true,
91
- modelIds: ["gpt-4o", "gpt-4.1", "o4-mini"],
82
+ modelIds: ["gpt-5.4-mini", "gpt-5.4", "gpt-5.5", "gpt-5.6-luna", "gpt-5.6-sol", "gpt-5.6-terra"],
92
83
  },
93
84
  {
94
85
  id: "chatgpt-codex",
@@ -99,7 +90,7 @@ const DEFAULT_UPSTREAMS: RouterUpstreamConfig[] = [
99
90
  authMode: "oauth",
100
91
  oauthProviderId: "openai-codex",
101
92
  enabled: true,
102
- modelIds: ["gpt-5.1", "gpt-5.4", "gpt-5.4-mini", "gpt-5.5"],
93
+ modelIds: ["gpt-5.4-mini", "gpt-5.4", "gpt-5.5", "gpt-5.6-luna", "gpt-5.6-sol", "gpt-5.6-terra"],
103
94
  usageProbe: {
104
95
  enabled: true,
105
96
  timeoutMs: 8_000,
@@ -209,8 +200,12 @@ function mergeModelConfigs(candidateModels: RouterModelConfig[] | undefined): Ro
209
200
  return deepClone(DEFAULT_CONFIG.models);
210
201
  }
211
202
 
203
+ const defaultIds = new Set(DEFAULT_CONFIG.models.map((m) => m.id));
212
204
  const merged = new Map(DEFAULT_CONFIG.models.map((model) => [model.id, deepClone(model)]));
213
205
  for (const model of candidateModels) {
206
+ if (!defaultIds.has(model.id)) {
207
+ continue;
208
+ }
214
209
  const previous = merged.get(model.id) ?? ({} as RouterModelConfig);
215
210
  merged.set(model.id, { ...previous, ...deepClone(model), id: model.id });
216
211
  }
@@ -227,6 +222,7 @@ function mergeUpstreamConfigs(candidateUpstreams: RouterUpstreamConfig[] | undef
227
222
  return deepClone(DEFAULT_CONFIG.upstreams);
228
223
  }
229
224
 
225
+ const defaultModelIds = new Set(DEFAULT_CONFIG.models.map((m) => m.id));
230
226
  const merged = new Map(DEFAULT_CONFIG.upstreams.map((upstream) => [upstream.id, deepClone(upstream)]));
231
227
  for (const upstream of candidateUpstreams) {
232
228
  const previous = merged.get(upstream.id);
@@ -235,7 +231,8 @@ function mergeUpstreamConfigs(candidateUpstreams: RouterUpstreamConfig[] | undef
235
231
  continue;
236
232
  }
237
233
 
238
- const modelIds = Array.from(new Set([...(previous.modelIds ?? []), ...(upstream.modelIds ?? [])]));
234
+ const modelIds = Array.from(new Set([...(previous.modelIds ?? []), ...(upstream.modelIds ?? [])]))
235
+ .filter((id) => defaultModelIds.has(id));
239
236
  const usageProbe = {
240
237
  ...(previous.usageProbe ?? {}),
241
238
  ...(upstream.usageProbe ?? {}),
@@ -21,7 +21,7 @@ REQUIRED = [
21
21
  ROOT / "types.ts",
22
22
  ROOT / "README.md",
23
23
  ]
24
- EXPECTED_MODELS = ["oauth-router", "gpt-4o", "gpt-4.1", "o4-mini", "gpt-5.4"]
24
+ EXPECTED_MODELS = ["oauth-router", "gpt-5.4-mini", "gpt-5.4", "gpt-5.5", "gpt-5.6-luna", "gpt-5.6-sol", "gpt-5.6-terra"]
25
25
  PI_CANDIDATES = [
26
26
  os.environ.get("PI_BIN"),
27
27
  shutil.which("pi"),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "takomi",
3
- "version": "2.1.42",
3
+ "version": "2.1.43",
4
4
  "description": "🎯 Stop wrestling with AI. Start building with purpose. The artisan's toolkit for agent workflows, Codex skills, and original Takomi capabilities like 21st.dev integration.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -17,6 +17,9 @@ const pc = {
17
17
  };
18
18
 
19
19
  const PRICES = {
20
+ 'gpt-5.6-luna': [1.00, 0.10, 6.00],
21
+ 'gpt-5.6-sol': [5.00, 0.50, 30.00],
22
+ 'gpt-5.6-terra': [2.50, 0.25, 15.00],
20
23
  'gpt-5.5': [5.00, 0.50, 30.00],
21
24
  'gpt-5.4': [2.50, 0.25, 15.00],
22
25
  'gpt-5.4-mini': [0.75, 0.075, 4.50],