@patze/code-cli 0.42.0 → 0.43.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.
Files changed (80) hide show
  1. package/CHANGELOG.md +55 -0
  2. package/VERSION +1 -1
  3. package/dist/cli/commands/runs-format.d.ts.map +1 -1
  4. package/dist/cli/commands/runs-format.js +3 -2
  5. package/dist/cli/commands/runs-format.js.map +1 -1
  6. package/dist/cli/commands/runs.d.ts.map +1 -1
  7. package/dist/cli/commands/runs.js +2 -1
  8. package/dist/cli/commands/runs.js.map +1 -1
  9. package/dist/cli/interactive/composer-session-chrome.d.ts.map +1 -1
  10. package/dist/cli/interactive/composer-session-chrome.js +1 -0
  11. package/dist/cli/interactive/composer-session-chrome.js.map +1 -1
  12. package/dist/cli/interactive/header.d.ts +1 -0
  13. package/dist/cli/interactive/header.d.ts.map +1 -1
  14. package/dist/cli/interactive/header.js +2 -0
  15. package/dist/cli/interactive/header.js.map +1 -1
  16. package/dist/cli/interactive/model-command.d.ts +1 -0
  17. package/dist/cli/interactive/model-command.d.ts.map +1 -1
  18. package/dist/cli/interactive/model-command.js +6 -13
  19. package/dist/cli/interactive/model-command.js.map +1 -1
  20. package/dist/cli/interactive/model-picker-panel.d.ts +40 -0
  21. package/dist/cli/interactive/model-picker-panel.d.ts.map +1 -0
  22. package/dist/cli/interactive/model-picker-panel.js +170 -0
  23. package/dist/cli/interactive/model-picker-panel.js.map +1 -0
  24. package/dist/cli/interactive/model-selection-apply.d.ts +6 -0
  25. package/dist/cli/interactive/model-selection-apply.d.ts.map +1 -0
  26. package/dist/cli/interactive/model-selection-apply.js +15 -0
  27. package/dist/cli/interactive/model-selection-apply.js.map +1 -0
  28. package/dist/cli/interactive/model-selector.d.ts +13 -0
  29. package/dist/cli/interactive/model-selector.d.ts.map +1 -0
  30. package/dist/cli/interactive/model-selector.js +55 -0
  31. package/dist/cli/interactive/model-selector.js.map +1 -0
  32. package/dist/cli/interactive/model-tty-picker.d.ts +18 -0
  33. package/dist/cli/interactive/model-tty-picker.d.ts.map +1 -0
  34. package/dist/cli/interactive/model-tty-picker.js +230 -0
  35. package/dist/cli/interactive/model-tty-picker.js.map +1 -0
  36. package/dist/cli/interactive/permissions-keys.d.ts +8 -0
  37. package/dist/cli/interactive/permissions-keys.d.ts.map +1 -1
  38. package/dist/cli/interactive/permissions-keys.js +28 -0
  39. package/dist/cli/interactive/permissions-keys.js.map +1 -1
  40. package/dist/cli/interactive/run-replay.d.ts.map +1 -1
  41. package/dist/cli/interactive/run-replay.js +2 -1
  42. package/dist/cli/interactive/run-replay.js.map +1 -1
  43. package/dist/cli/interactive/session-controller.d.ts.map +1 -1
  44. package/dist/cli/interactive/session-controller.js +3 -0
  45. package/dist/cli/interactive/session-controller.js.map +1 -1
  46. package/dist/cli/interactive/session-hints.js +1 -1
  47. package/dist/cli/interactive/session-hints.js.map +1 -1
  48. package/dist/cli/interactive/session-store.d.ts +1 -0
  49. package/dist/cli/interactive/session-store.d.ts.map +1 -1
  50. package/dist/cli/interactive/session-store.js +2 -0
  51. package/dist/cli/interactive/session-store.js.map +1 -1
  52. package/dist/cli/interactive/session.d.ts +6 -0
  53. package/dist/cli/interactive/session.d.ts.map +1 -1
  54. package/dist/cli/interactive/session.js +22 -1
  55. package/dist/cli/interactive/session.js.map +1 -1
  56. package/dist/cli/interactive/slash-dispatch.d.ts +2 -0
  57. package/dist/cli/interactive/slash-dispatch.d.ts.map +1 -1
  58. package/dist/cli/interactive/slash-dispatch.js +17 -5
  59. package/dist/cli/interactive/slash-dispatch.js.map +1 -1
  60. package/dist/cli/interactive/slash-registry.d.ts.map +1 -1
  61. package/dist/cli/interactive/slash-registry.js +4 -1
  62. package/dist/cli/interactive/slash-registry.js.map +1 -1
  63. package/dist/cli/interactive/tty-arrow-selector.d.ts +17 -0
  64. package/dist/cli/interactive/tty-arrow-selector.d.ts.map +1 -0
  65. package/dist/cli/interactive/tty-arrow-selector.js +110 -0
  66. package/dist/cli/interactive/tty-arrow-selector.js.map +1 -0
  67. package/dist/config/model-preferences.d.ts +2 -0
  68. package/dist/config/model-preferences.d.ts.map +1 -1
  69. package/dist/config/model-preferences.js +14 -4
  70. package/dist/config/model-preferences.js.map +1 -1
  71. package/dist/config/model-reasoning.d.ts +15 -0
  72. package/dist/config/model-reasoning.d.ts.map +1 -0
  73. package/dist/config/model-reasoning.js +132 -0
  74. package/dist/config/model-reasoning.js.map +1 -0
  75. package/dist/config/models.d.ts +10 -0
  76. package/dist/config/models.d.ts.map +1 -1
  77. package/dist/config/models.js +133 -31
  78. package/dist/config/models.js.map +1 -1
  79. package/opentui/src/App.tsx +11 -9
  80. package/package.json +1 -1
@@ -0,0 +1,132 @@
1
+ import { isPatzeDefaultModel, normalizeModelId } from "./models.js";
2
+ const OPENAI_FRONTIER_REASONING = [
3
+ {
4
+ id: "low",
5
+ label: "Low",
6
+ description: "Fast responses with lighter reasoning",
7
+ },
8
+ {
9
+ id: "medium",
10
+ label: "Medium",
11
+ description: "Balances speed and reasoning depth for everyday tasks",
12
+ },
13
+ {
14
+ id: "high",
15
+ label: "High",
16
+ description: "Greater reasoning depth for complex problems",
17
+ },
18
+ {
19
+ id: "xhigh",
20
+ label: "Extra high",
21
+ description: "Extra high reasoning depth for complex problems",
22
+ },
23
+ ];
24
+ const OPENAI_MINI_REASONING = [
25
+ {
26
+ id: "low",
27
+ label: "Low",
28
+ description: "Fast responses with lighter reasoning",
29
+ },
30
+ {
31
+ id: "medium",
32
+ label: "Medium",
33
+ description: "Balances speed and cost for simpler coding tasks",
34
+ },
35
+ ];
36
+ const ANTHROPIC_OPUS_REASONING = [
37
+ {
38
+ id: "low",
39
+ label: "Low",
40
+ description: "Faster responses with lighter reasoning depth",
41
+ },
42
+ {
43
+ id: "medium",
44
+ label: "Medium",
45
+ description: "Balanced reasoning for everyday coding work",
46
+ },
47
+ {
48
+ id: "high",
49
+ label: "High",
50
+ description: "Deeper reasoning for complex problems",
51
+ },
52
+ ];
53
+ export function getReasoningLevelsForModelId(modelId) {
54
+ const normalized = (normalizeModelId(modelId) ?? modelId).toLowerCase();
55
+ if (isPatzeDefaultModel(normalized)) {
56
+ return [];
57
+ }
58
+ if (normalized.startsWith("gpt-5.4-mini")) {
59
+ return [...OPENAI_MINI_REASONING];
60
+ }
61
+ if (normalized.startsWith("gpt-5")) {
62
+ return [...OPENAI_FRONTIER_REASONING];
63
+ }
64
+ if (normalized.includes("claude-opus")) {
65
+ return [...ANTHROPIC_OPUS_REASONING];
66
+ }
67
+ return [];
68
+ }
69
+ export function modelSupportsReasoningPicker(modelId) {
70
+ return getReasoningLevelsForModelId(modelId).length > 1;
71
+ }
72
+ export function getDefaultReasoningLevel(modelId) {
73
+ const normalized = (normalizeModelId(modelId) ?? modelId).toLowerCase();
74
+ if (normalized.includes("-thinking-high")) {
75
+ return "high";
76
+ }
77
+ if (normalized.includes("-thinking-low")) {
78
+ return "low";
79
+ }
80
+ return "medium";
81
+ }
82
+ export function reasoningLevelToThinking(level) {
83
+ switch (level) {
84
+ case "low":
85
+ return false;
86
+ case "high":
87
+ case "xhigh":
88
+ return true;
89
+ case "medium":
90
+ default:
91
+ return null;
92
+ }
93
+ }
94
+ export function thinkingToReasoningLevel(thinking) {
95
+ if (thinking === true) {
96
+ return "high";
97
+ }
98
+ if (thinking === false) {
99
+ return "low";
100
+ }
101
+ return null;
102
+ }
103
+ export function formatReasoningLevelShort(level) {
104
+ switch (level) {
105
+ case "low":
106
+ return "low";
107
+ case "medium":
108
+ return "medium";
109
+ case "high":
110
+ return "high";
111
+ case "xhigh":
112
+ return "extra high";
113
+ default:
114
+ return level;
115
+ }
116
+ }
117
+ export function resolveWireModelId(catalogId, level) {
118
+ const normalized = normalizeModelId(catalogId) ?? catalogId;
119
+ const effort = level ?? getDefaultReasoningLevel(normalized);
120
+ if (!normalized.includes("claude-opus") || !normalized.includes("-thinking-")) {
121
+ return normalized;
122
+ }
123
+ const wireEffort = effort === "xhigh" ? "high" : effort === "low" ? "low" : effort === "high" ? "high" : "medium";
124
+ return normalized.replace(/-thinking-(?:low|medium|high)$/, `-thinking-${wireEffort}`);
125
+ }
126
+ export function normalizeReasoningLevel(value) {
127
+ if (value === "low" || value === "medium" || value === "high" || value === "xhigh") {
128
+ return value;
129
+ }
130
+ return null;
131
+ }
132
+ //# sourceMappingURL=model-reasoning.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-reasoning.js","sourceRoot":"","sources":["../../src/config/model-reasoning.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,8 @@
1
1
  import type { ModelPreferences } from "./model-preferences.js";
2
+ /** Wire id sent to Cursor/backend — never shown in user-facing UI. */
2
3
  export declare const DEFAULT_PATZE_MODEL = "composer-2.5-fast";
4
+ /** Primary user-facing brand for the default agent model. */
5
+ export declare const PATZE_DEFAULT_DISPLAY_NAME = "Patze";
3
6
  export type PatzeModelCatalogEntry = {
4
7
  id: string;
5
8
  displayName: string;
@@ -9,7 +12,13 @@ export type PatzeModelCatalogEntry = {
9
12
  export declare const PATZE_MODEL_CATALOG: readonly PatzeModelCatalogEntry[];
10
13
  /** Models aligned with server PATZE_CODE_CURSOR_MODEL_FALLBACKS + cookbook defaults. */
11
14
  export declare const PATZE_SUPPORTED_MODELS: readonly string[];
15
+ export declare function isPatzeDefaultModel(value: string | null | undefined): boolean;
12
16
  export declare function formatModelDisplayName(modelId: string): string;
17
+ /** Resolved config model for `patze config` and other ops surfaces. */
18
+ export declare function formatConfigModelLabel(configModel: string | null | undefined): string;
19
+ export declare function formatAgentModelLabel(modelId: string | null | undefined): string;
20
+ /** Collapse Patze-default wire ids and aliases to one catalog row in pickers. */
21
+ export declare function dedupeModelIds(modelIds: readonly string[]): string[];
13
22
  export declare function getModelCatalogEntry(modelId: string): PatzeModelCatalogEntry | null;
14
23
  export declare function normalizeModelId(value: string | null | undefined): string | null;
15
24
  export declare function isSupportedModelId(value: string): boolean;
@@ -17,5 +26,6 @@ export declare function resolveEffectiveModel(input: {
17
26
  sessionOverride?: string | null;
18
27
  configModel?: string | null;
19
28
  }): string;
29
+ export declare function formatModelCatalogLabel(entry: PatzeModelCatalogEntry): string;
20
30
  export declare function formatModelPickerLines(current: string, prefs?: ModelPreferences): string[];
21
31
  //# sourceMappingURL=models.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../src/config/models.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAE9D,eAAO,MAAM,mBAAmB,sBAAsB,CAAA;AAEtD,MAAM,MAAM,sBAAsB,GAAG;IACnC,EAAE,EAAE,MAAM,CAAA;IACV,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,MAAM,CAAA;CACpB,CAAA;AAED,mEAAmE;AACnE,eAAO,MAAM,mBAAmB,EAAE,SAAS,sBAAsB,EA0BvD,CAAA;AAEV,wFAAwF;AACxF,eAAO,MAAM,sBAAsB,EAAE,SAAS,MAAM,EAEnD,CAAA;AAOD,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAS9D;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,sBAAsB,GAAG,IAAI,CAUnF;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAYhF;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAMzD;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE;IAC3C,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC/B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAC5B,GAAG,MAAM,CAcT;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,gBAAgB,GAAG,MAAM,EAAE,CA0B1F"}
1
+ {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../src/config/models.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAE9D,sEAAsE;AACtE,eAAO,MAAM,mBAAmB,sBAAsB,CAAA;AAEtD,6DAA6D;AAC7D,eAAO,MAAM,0BAA0B,UAAU,CAAA;AAEjD,MAAM,MAAM,sBAAsB,GAAG;IACnC,EAAE,EAAE,MAAM,CAAA;IACV,WAAW,EAAE,MAAM,CAAA;IACnB,WAAW,EAAE,MAAM,CAAA;CACpB,CAAA;AAED,mEAAmE;AAGnE,eAAO,MAAM,mBAAmB,EAAE,SAAS,sBAAsB,EA0BvD,CAAA;AAEV,wFAAwF;AACxF,eAAO,MAAM,sBAAsB,EAAE,SAAS,MAAM,EAEnD,CAAA;AAmDD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAS7E;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAmB9D;AAED,uEAAuE;AACvE,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAKrF;AAED,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAMhF;AAED,iFAAiF;AACjF,wBAAgB,cAAc,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,EAAE,CAsBpE;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,sBAAsB,GAAG,IAAI,CAUnF;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAYhF;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAMzD;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE;IAC3C,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC/B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAC5B,GAAG,MAAM,CAcT;AAED,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,sBAAsB,GAAG,MAAM,CAE7E;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,gBAAgB,GAAG,MAAM,EAAE,CA0B1F"}
@@ -1,45 +1,139 @@
1
+ /** Wire id sent to Cursor/backend — never shown in user-facing UI. */
1
2
  export const DEFAULT_PATZE_MODEL = "composer-2.5-fast";
3
+ /** Primary user-facing brand for the default agent model. */
4
+ export const PATZE_DEFAULT_DISPLAY_NAME = "Patze";
2
5
  /** User-facing model catalog (wire ids stay Cursor/OpenAI ids). */
6
+ // Display rule: ONLY `composer-2.5-fast` (and its fast aliases) → Patze.
7
+ // Composer tiers (`composer-2.5`, `composer-2`) are not offered in the CLI catalog.
3
8
  export const PATZE_MODEL_CATALOG = [
4
9
  {
5
- id: "composer-2.5-fast",
6
- displayName: "Patze",
7
- description: "Default agent fast coding",
10
+ id: DEFAULT_PATZE_MODEL,
11
+ displayName: PATZE_DEFAULT_DISPLAY_NAME,
12
+ description: "Default Patze agent for everyday coding",
8
13
  },
9
14
  {
10
- id: "composer-2.5",
11
- displayName: "Composer 2.5",
12
- description: "Balanced Composer tier",
15
+ id: "gpt-5.5",
16
+ displayName: "GPT-5.5",
17
+ description: "Frontier model for complex coding, research, and real-world work",
13
18
  },
14
19
  {
15
- id: "composer-2",
16
- displayName: "Composer 2",
17
- description: "Legacy Composer tier",
20
+ id: "gpt-5.4",
21
+ displayName: "GPT-5.4",
22
+ description: "Strong model for everyday coding",
18
23
  },
19
24
  {
20
25
  id: "gpt-5.4-mini",
21
26
  displayName: "GPT-5.4 mini",
22
- description: "OpenAI mini lighter tasks",
27
+ description: "Small, fast, and cost-efficient model for simpler coding tasks",
23
28
  },
24
29
  {
25
- id: "gpt-5.4",
26
- displayName: "GPT-5.4",
27
- description: "OpenAI full deeper analysis",
30
+ id: "claude-opus-4-7-thinking-medium",
31
+ displayName: "Opus 4.7",
32
+ description: "Top-tier reasoning for complex problems and careful edits",
28
33
  },
29
34
  ];
30
35
  /** Models aligned with server PATZE_CODE_CURSOR_MODEL_FALLBACKS + cookbook defaults. */
31
36
  export const PATZE_SUPPORTED_MODELS = PATZE_MODEL_CATALOG.map((entry) => entry.id);
32
37
  const MODEL_ALIASES = {
33
- patze: "composer-2.5-fast",
34
- "patze-fast": "composer-2.5-fast",
38
+ patze: DEFAULT_PATZE_MODEL,
39
+ "patze-fast": DEFAULT_PATZE_MODEL,
40
+ "composer 2.5 fast": DEFAULT_PATZE_MODEL,
41
+ "composer 2.5-fast": DEFAULT_PATZE_MODEL,
42
+ "composer-2.5 fast": DEFAULT_PATZE_MODEL,
43
+ "composer2.5fast": DEFAULT_PATZE_MODEL,
44
+ "gpt 5.5": "gpt-5.5",
45
+ "gpt5.5": "gpt-5.5",
46
+ "opus 4.7": "claude-opus-4-7-thinking-medium",
47
+ "claude opus 4.7": "claude-opus-4-7-thinking-medium",
48
+ "claude-4.7-opus": "claude-opus-4-7-thinking-medium",
35
49
  };
50
+ function compactModelToken(value) {
51
+ return value.trim().toLowerCase().replace(/[^a-z0-9]/g, "");
52
+ }
53
+ function lookupModelAlias(value) {
54
+ const trimmed = value.trim().toLowerCase();
55
+ if (!trimmed) {
56
+ return null;
57
+ }
58
+ const direct = MODEL_ALIASES[trimmed];
59
+ if (direct) {
60
+ return direct;
61
+ }
62
+ const spaced = trimmed.replace(/\s+/g, " ");
63
+ const spacedAlias = MODEL_ALIASES[spaced];
64
+ if (spacedAlias) {
65
+ return spacedAlias;
66
+ }
67
+ const slug = trimmed.replace(/\s+/g, "-");
68
+ const slugAlias = MODEL_ALIASES[slug];
69
+ if (slugAlias) {
70
+ return slugAlias;
71
+ }
72
+ const compact = compactModelToken(trimmed);
73
+ if (compact === "composer25fast" || compact === "patze" || compact === "patzefast") {
74
+ return DEFAULT_PATZE_MODEL;
75
+ }
76
+ return null;
77
+ }
78
+ export function isPatzeDefaultModel(value) {
79
+ const resolved = normalizeModelId(value);
80
+ if (resolved?.toLowerCase() === DEFAULT_PATZE_MODEL) {
81
+ return true;
82
+ }
83
+ if (!value?.trim()) {
84
+ return false;
85
+ }
86
+ return lookupModelAlias(value) === DEFAULT_PATZE_MODEL;
87
+ }
36
88
  export function formatModelDisplayName(modelId) {
89
+ if (isPatzeDefaultModel(modelId)) {
90
+ return PATZE_DEFAULT_DISPLAY_NAME;
91
+ }
37
92
  const normalized = normalizeModelId(modelId);
38
93
  if (!normalized) {
39
- return modelId.trim() || DEFAULT_PATZE_MODEL;
94
+ return modelId.trim() || PATZE_DEFAULT_DISPLAY_NAME;
40
95
  }
41
96
  const entry = PATZE_MODEL_CATALOG.find((candidate) => candidate.id.toLowerCase() === normalized.toLowerCase());
42
- return entry?.displayName ?? normalized;
97
+ if (entry) {
98
+ return entry.displayName;
99
+ }
100
+ if (isPatzeDefaultModel(normalized)) {
101
+ return PATZE_DEFAULT_DISPLAY_NAME;
102
+ }
103
+ return normalized;
104
+ }
105
+ /** Resolved config model for `patze config` and other ops surfaces. */
106
+ export function formatConfigModelLabel(configModel) {
107
+ if (!configModel?.trim()) {
108
+ return `${PATZE_DEFAULT_DISPLAY_NAME} (default)`;
109
+ }
110
+ return formatModelDisplayName(configModel);
111
+ }
112
+ export function formatAgentModelLabel(modelId) {
113
+ const trimmed = modelId?.trim();
114
+ if (!trimmed) {
115
+ return "unknown";
116
+ }
117
+ return formatModelDisplayName(trimmed);
118
+ }
119
+ /** Collapse Patze-default wire ids and aliases to one catalog row in pickers. */
120
+ export function dedupeModelIds(modelIds) {
121
+ const seen = new Set();
122
+ const result = [];
123
+ for (const raw of modelIds) {
124
+ const normalized = normalizeModelId(raw);
125
+ const key = isPatzeDefaultModel(raw) || normalized?.toLowerCase() === DEFAULT_PATZE_MODEL
126
+ ? DEFAULT_PATZE_MODEL
127
+ : (normalized ?? raw).toLowerCase();
128
+ if (seen.has(key)) {
129
+ continue;
130
+ }
131
+ seen.add(key);
132
+ result.push(isPatzeDefaultModel(raw) || normalized?.toLowerCase() === DEFAULT_PATZE_MODEL
133
+ ? DEFAULT_PATZE_MODEL
134
+ : (normalized ?? raw));
135
+ }
136
+ return result;
43
137
  }
44
138
  export function getModelCatalogEntry(modelId) {
45
139
  const normalized = normalizeModelId(modelId);
@@ -53,7 +147,7 @@ export function normalizeModelId(value) {
53
147
  if (!trimmed) {
54
148
  return null;
55
149
  }
56
- const alias = MODEL_ALIASES[trimmed.toLowerCase()];
150
+ const alias = lookupModelAlias(trimmed);
57
151
  if (alias) {
58
152
  return alias;
59
153
  }
@@ -83,24 +177,32 @@ export function resolveEffectiveModel(input) {
83
177
  }
84
178
  return DEFAULT_PATZE_MODEL;
85
179
  }
180
+ export function formatModelCatalogLabel(entry) {
181
+ return entry.displayName;
182
+ }
86
183
  export function formatModelPickerLines(current, prefs) {
87
184
  const currentId = normalizeModelId(current) ?? DEFAULT_PATZE_MODEL;
88
185
  const currentLabel = formatModelDisplayName(currentId);
89
- const lines = [
90
- `Model · current: ${currentLabel}`,
91
- currentLabel === currentId ? "" : ` id: ${currentId}`,
92
- "",
93
- ].filter(Boolean);
94
- if (prefs) {
95
- lines.push(` thinking ${prefs.thinking === null ? "auto" : prefs.thinking ? "on" : "off"} · fast ${prefs.fast === null ? "auto" : prefs.fast ? "on" : "off"}`, "");
96
- }
97
- for (const entry of PATZE_MODEL_CATALOG) {
98
- const marker = entry.id.toLowerCase() === currentId.toLowerCase() ? "›" : " ";
99
- lines.push(` ${marker} ${entry.displayName} (${entry.id})`);
100
- lines.push(` ${entry.description}`);
186
+ const lines = [`Model · ${currentLabel}`];
187
+ if (prefs?.reasoningLevel) {
188
+ lines[0] = `Model · ${currentLabel} ${prefs.reasoningLevel}`;
101
189
  }
102
190
  lines.push("");
103
- lines.push("Usage: /model <id|Patze> · /model thinking on|off · /model fast on|off · /model clear");
191
+ PATZE_MODEL_CATALOG.forEach((entry, index) => {
192
+ const isCurrent = entry.id.toLowerCase() === currentId.toLowerCase();
193
+ const suffixParts = [];
194
+ if (entry.id === DEFAULT_PATZE_MODEL) {
195
+ suffixParts.push("(default)");
196
+ }
197
+ if (isCurrent) {
198
+ suffixParts.push("(current)");
199
+ }
200
+ const suffix = suffixParts.length ? ` ${suffixParts.join(" ")}` : "";
201
+ const marker = isCurrent ? "›" : " ";
202
+ lines.push(`${marker} ${index + 1}. ${entry.displayName}${suffix} ${entry.description}`);
203
+ });
204
+ lines.push("");
205
+ lines.push("Press enter to confirm or esc to go back");
104
206
  return lines;
105
207
  }
106
208
  //# sourceMappingURL=models.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"models.js","sourceRoot":"","sources":["../../src/config/models.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"models.js","sourceRoot":"","sources":["../../src/config/models.ts"],"names":[],"mappings":"AAEA,sEAAsE;AACtE,MAAM,CAAC,MAAM,mBAAmB,GAAG,mBAAmB,CAAA;AAEtD,6DAA6D;AAC7D,MAAM,CAAC,MAAM,0BAA0B,GAAG,OAAO,CAAA;AAQjD,mEAAmE;AACnE,yEAAyE;AACzE,oFAAoF;AACpF,MAAM,CAAC,MAAM,mBAAmB,GAAsC;IACpE;QACE,EAAE,EAAE,mBAAmB;QACvB,WAAW,EAAE,0BAA0B;QACvC,WAAW,EAAE,yCAAyC;KACvD;IACD;QACE,EAAE,EAAE,SAAS;QACb,WAAW,EAAE,SAAS;QACtB,WAAW,EAAE,kEAAkE;KAChF;IACD;QACE,EAAE,EAAE,SAAS;QACb,WAAW,EAAE,SAAS;QACtB,WAAW,EAAE,kCAAkC;KAChD;IACD;QACE,EAAE,EAAE,cAAc;QAClB,WAAW,EAAE,cAAc;QAC3B,WAAW,EAAE,gEAAgE;KAC9E;IACD;QACE,EAAE,EAAE,iCAAiC;QACrC,WAAW,EAAE,UAAU;QACvB,WAAW,EAAE,2DAA2D;KACzE;CACO,CAAA;AAEV,wFAAwF;AACxF,MAAM,CAAC,MAAM,sBAAsB,GAAsB,mBAAmB,CAAC,GAAG,CAC9E,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CACpB,CAAA;AAED,MAAM,aAAa,GAA2B;IAC5C,KAAK,EAAE,mBAAmB;IAC1B,YAAY,EAAE,mBAAmB;IACjC,mBAAmB,EAAE,mBAAmB;IACxC,mBAAmB,EAAE,mBAAmB;IACxC,mBAAmB,EAAE,mBAAmB;IACxC,iBAAiB,EAAE,mBAAmB;IACtC,SAAS,EAAE,SAAS;IACpB,QAAQ,EAAE,SAAS;IACnB,UAAU,EAAE,iCAAiC;IAC7C,iBAAiB,EAAE,iCAAiC;IACpD,iBAAiB,EAAE,iCAAiC;CACrD,CAAA;AAED,SAAS,iBAAiB,CAAC,KAAa;IACtC,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAA;AAC7D,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAa;IACrC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;IAC1C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,IAAI,CAAA;IACb,CAAC;IAED,MAAM,MAAM,GAAG,aAAa,CAAC,OAAO,CAAC,CAAA;IACrC,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,MAAM,CAAA;IACf,CAAC;IAED,MAAM,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAC3C,MAAM,WAAW,GAAG,aAAa,CAAC,MAAM,CAAC,CAAA;IACzC,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,WAAW,CAAA;IACpB,CAAC;IAED,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IACzC,MAAM,SAAS,GAAG,aAAa,CAAC,IAAI,CAAC,CAAA;IACrC,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,SAAS,CAAA;IAClB,CAAC;IAED,MAAM,OAAO,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAA;IAC1C,IAAI,OAAO,KAAK,gBAAgB,IAAI,OAAO,KAAK,OAAO,IAAI,OAAO,KAAK,WAAW,EAAE,CAAC;QACnF,OAAO,mBAAmB,CAAA;IAC5B,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,KAAgC;IAClE,MAAM,QAAQ,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAA;IACxC,IAAI,QAAQ,EAAE,WAAW,EAAE,KAAK,mBAAmB,EAAE,CAAC;QACpD,OAAO,IAAI,CAAA;IACb,CAAC;IACD,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC;QACnB,OAAO,KAAK,CAAA;IACd,CAAC;IACD,OAAO,gBAAgB,CAAC,KAAK,CAAC,KAAK,mBAAmB,CAAA;AACxD,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,OAAe;IACpD,IAAI,mBAAmB,CAAC,OAAO,CAAC,EAAE,CAAC;QACjC,OAAO,0BAA0B,CAAA;IACnC,CAAC;IAED,MAAM,UAAU,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAA;IAC5C,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,OAAO,CAAC,IAAI,EAAE,IAAI,0BAA0B,CAAA;IACrD,CAAC;IACD,MAAM,KAAK,GAAG,mBAAmB,CAAC,IAAI,CACpC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,WAAW,EAAE,KAAK,UAAU,CAAC,WAAW,EAAE,CACvE,CAAA;IACD,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,KAAK,CAAC,WAAW,CAAA;IAC1B,CAAC;IACD,IAAI,mBAAmB,CAAC,UAAU,CAAC,EAAE,CAAC;QACpC,OAAO,0BAA0B,CAAA;IACnC,CAAC;IACD,OAAO,UAAU,CAAA;AACnB,CAAC;AAED,uEAAuE;AACvE,MAAM,UAAU,sBAAsB,CAAC,WAAsC;IAC3E,IAAI,CAAC,WAAW,EAAE,IAAI,EAAE,EAAE,CAAC;QACzB,OAAO,GAAG,0BAA0B,YAAY,CAAA;IAClD,CAAC;IACD,OAAO,sBAAsB,CAAC,WAAW,CAAC,CAAA;AAC5C,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,OAAkC;IACtE,MAAM,OAAO,GAAG,OAAO,EAAE,IAAI,EAAE,CAAA;IAC/B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,OAAO,sBAAsB,CAAC,OAAO,CAAC,CAAA;AACxC,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,cAAc,CAAC,QAA2B;IACxD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAA;IAC9B,MAAM,MAAM,GAAa,EAAE,CAAA;IAE3B,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,MAAM,UAAU,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAA;QACxC,MAAM,GAAG,GAAG,mBAAmB,CAAC,GAAG,CAAC,IAAI,UAAU,EAAE,WAAW,EAAE,KAAK,mBAAmB;YACvF,CAAC,CAAC,mBAAmB;YACrB,CAAC,CAAC,CAAC,UAAU,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,CAAA;QAErC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAClB,SAAQ;QACV,CAAC;QACD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;QACb,MAAM,CAAC,IAAI,CACT,mBAAmB,CAAC,GAAG,CAAC,IAAI,UAAU,EAAE,WAAW,EAAE,KAAK,mBAAmB;YAC3E,CAAC,CAAC,mBAAmB;YACrB,CAAC,CAAC,CAAC,UAAU,IAAI,GAAG,CAAC,CACxB,CAAA;IACH,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,OAAe;IAClD,MAAM,UAAU,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAA;IAC5C,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,IAAI,CAAA;IACb,CAAC;IACD,OAAO,CACL,mBAAmB,CAAC,IAAI,CACtB,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC,WAAW,EAAE,KAAK,UAAU,CAAC,WAAW,EAAE,CACvE,IAAI,IAAI,CACV,CAAA;AACH,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAgC;IAC/D,MAAM,OAAO,GAAG,KAAK,EAAE,IAAI,EAAE,CAAA;IAC7B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,IAAI,CAAA;IACb,CAAC;IACD,MAAM,KAAK,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAA;IACvC,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,KAAK,CAAA;IACd,CAAC;IACD,MAAM,KAAK,GAAG,OAAO,CAAC,WAAW,EAAE,CAAA;IACnC,MAAM,KAAK,GAAG,sBAAsB,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,CAAA;IACnF,OAAO,KAAK,IAAI,OAAO,CAAA;AACzB,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,KAAa;IAC9C,MAAM,UAAU,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAA;IAC1C,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,KAAK,CAAA;IACd,CAAC;IACD,OAAO,sBAAsB,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,UAAU,CAAC,WAAW,EAAE,CAAC,CAAA;AACjG,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,KAGrC;IACC,MAAM,WAAW,GAAG,gBAAgB,CAAC,KAAK,CAAC,eAAe,CAAC,CAAA;IAC3D,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,WAAW,CAAA;IACpB,CAAC;IACD,MAAM,OAAO,GAAG,gBAAgB,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAA;IAC9D,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,OAAO,CAAA;IAChB,CAAC;IACD,MAAM,UAAU,GAAG,gBAAgB,CAAC,KAAK,CAAC,WAAW,CAAC,CAAA;IACtD,IAAI,UAAU,EAAE,CAAC;QACf,OAAO,UAAU,CAAA;IACnB,CAAC;IACD,OAAO,mBAAmB,CAAA;AAC5B,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,KAA6B;IACnE,OAAO,KAAK,CAAC,WAAW,CAAA;AAC1B,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,OAAe,EAAE,KAAwB;IAC9E,MAAM,SAAS,GAAG,gBAAgB,CAAC,OAAO,CAAC,IAAI,mBAAmB,CAAA;IAClE,MAAM,YAAY,GAAG,sBAAsB,CAAC,SAAS,CAAC,CAAA;IACtD,MAAM,KAAK,GAAG,CAAC,WAAW,YAAY,EAAE,CAAC,CAAA;IAEzC,IAAI,KAAK,EAAE,cAAc,EAAE,CAAC;QAC1B,KAAK,CAAC,CAAC,CAAC,GAAG,WAAW,YAAY,IAAI,KAAK,CAAC,cAAc,EAAE,CAAA;IAC9D,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACd,mBAAmB,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QAC3C,MAAM,SAAS,GAAG,KAAK,CAAC,EAAE,CAAC,WAAW,EAAE,KAAK,SAAS,CAAC,WAAW,EAAE,CAAA;QACpE,MAAM,WAAW,GAAa,EAAE,CAAA;QAChC,IAAI,KAAK,CAAC,EAAE,KAAK,mBAAmB,EAAE,CAAC;YACrC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;QAC/B,CAAC;QACD,IAAI,SAAS,EAAE,CAAC;YACd,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;QAC/B,CAAC;QACD,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAA;QACpE,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAA;QACpC,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,IAAI,KAAK,GAAG,CAAC,KAAK,KAAK,CAAC,WAAW,GAAG,MAAM,KAAK,KAAK,CAAC,WAAW,EAAE,CAAC,CAAA;IAC3F,CAAC,CAAC,CAAA;IACF,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IACd,KAAK,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAA;IACtD,OAAO,KAAK,CAAA;AACd,CAAC"}
@@ -25,10 +25,13 @@ import { upsertTranscriptEntry } from "../../dist/cli/interactive/transcript-ups
25
25
  import { applyOpenTuiAgentEvent } from "../../dist/cli/interactive/opentui-agent-event.js"
26
26
  import type { AgentEvent } from "../../dist/cli/interactive/agent-events.js"
27
27
  import {
28
+ dedupeModelIds,
28
29
  formatModelDisplayName,
29
30
  getModelCatalogEntry,
31
+ isPatzeDefaultModel,
30
32
  PATZE_MODEL_CATALOG,
31
33
  } from "../../dist/config/models.js"
34
+ import { formatModelDisplay } from "../../dist/config/model-preferences.js"
32
35
 
33
36
  extend({ "tui-input": InputRenderable })
34
37
 
@@ -467,6 +470,7 @@ export function App({ cwd: cwdArg }: { cwd?: string }) {
467
470
  await submitToController("/help")
468
471
  return
469
472
  case "model":
473
+ case "models":
470
474
  if (!args.trim()) {
471
475
  openModelPicker()
472
476
  return
@@ -545,7 +549,10 @@ export function App({ cwd: cwdArg }: { cwd?: string }) {
545
549
  : composerChromeRows)
546
550
  )
547
551
 
548
- const composerModelLabel = `${formatModelDisplayName(currentModel)}${modelThinking ? " · thinking" : ""}${modelFast ? " · fast" : ""}`
552
+ const composerModelLabel = formatModelDisplay(currentModel, {
553
+ thinking: modelThinking,
554
+ fast: modelFast,
555
+ })
549
556
  const composerPathLabel = shortenComposerPath(cwd)
550
557
 
551
558
  const scrollableEntries = useMemo(() => transcript, [transcript])
@@ -577,7 +584,7 @@ export function App({ cwd: cwdArg }: { cwd?: string }) {
577
584
 
578
585
  const modelItems = useMemo(() => {
579
586
  const catalogIds = PATZE_MODEL_CATALOG.map((entry) => entry.id)
580
- const merged = [...new Set([...catalogIds, ...supportedModels])]
587
+ const merged = dedupeModelIds([...catalogIds, ...supportedModels])
581
588
  const normalized = modelSearch.trim().toLowerCase()
582
589
  return merged
583
590
  .filter((model) => {
@@ -588,21 +595,16 @@ export function App({ cwd: cwdArg }: { cwd?: string }) {
588
595
  if (model.toLowerCase().includes(normalized) || display.includes(normalized)) {
589
596
  return true
590
597
  }
591
- if (normalized === "patze" && model === "composer-2.5-fast") {
598
+ if (normalized === "patze" && isPatzeDefaultModel(model)) {
592
599
  return true
593
600
  }
594
601
  return false
595
602
  })
596
603
  .map((model) => {
597
604
  const entry = getModelCatalogEntry(model)
598
- const isCurrent = model.toLowerCase() === currentModel.toLowerCase()
599
605
  return {
600
606
  name: formatModelDisplayName(model),
601
- description: isCurrent
602
- ? entry?.description
603
- ? `${entry.description} · current`
604
- : "current"
605
- : entry?.description ?? model,
607
+ description: entry?.description ?? "",
606
608
  value: model,
607
609
  }
608
610
  })
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@patze/code-cli",
3
- "version": "0.42.0",
3
+ "version": "0.43.0",
4
4
  "description": "Patze Code — local terminal coding agent client for PatzeAgents",
5
5
  "license": "UNLICENSED",
6
6
  "type": "module",