@mariozechner/pi-coding-agent 0.49.1 → 0.49.2

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 (51) hide show
  1. package/CHANGELOG.md +23 -1
  2. package/README.md +2 -9
  3. package/dist/core/agent-session.d.ts.map +1 -1
  4. package/dist/core/agent-session.js +6 -0
  5. package/dist/core/agent-session.js.map +1 -1
  6. package/dist/core/export-html/template.css +19 -0
  7. package/dist/core/export-html/template.js +70 -5
  8. package/dist/core/extensions/index.d.ts +1 -1
  9. package/dist/core/extensions/index.d.ts.map +1 -1
  10. package/dist/core/extensions/index.js.map +1 -1
  11. package/dist/core/extensions/types.d.ts +10 -3
  12. package/dist/core/extensions/types.d.ts.map +1 -1
  13. package/dist/core/extensions/types.js.map +1 -1
  14. package/dist/core/model-registry.d.ts.map +1 -1
  15. package/dist/core/model-registry.js +1 -3
  16. package/dist/core/model-registry.js.map +1 -1
  17. package/dist/core/sdk.d.ts.map +1 -1
  18. package/dist/core/sdk.js +9 -1
  19. package/dist/core/sdk.js.map +1 -1
  20. package/dist/index.d.ts +1 -1
  21. package/dist/index.d.ts.map +1 -1
  22. package/dist/index.js.map +1 -1
  23. package/dist/main.d.ts.map +1 -1
  24. package/dist/main.js +2 -1
  25. package/dist/main.js.map +1 -1
  26. package/dist/modes/interactive/components/model-selector.d.ts +9 -0
  27. package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
  28. package/dist/modes/interactive/components/model-selector.js +84 -38
  29. package/dist/modes/interactive/components/model-selector.js.map +1 -1
  30. package/dist/modes/interactive/components/settings-selector.d.ts +2 -0
  31. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  32. package/dist/modes/interactive/components/settings-selector.js +10 -0
  33. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  34. package/dist/modes/interactive/interactive-mode.d.ts +5 -2
  35. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  36. package/dist/modes/interactive/interactive-mode.js +48 -25
  37. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  38. package/dist/modes/rpc/rpc-mode.d.ts.map +1 -1
  39. package/dist/modes/rpc/rpc-mode.js +2 -1
  40. package/dist/modes/rpc/rpc-mode.js.map +1 -1
  41. package/dist/modes/rpc/rpc-types.d.ts +1 -0
  42. package/dist/modes/rpc/rpc-types.d.ts.map +1 -1
  43. package/dist/modes/rpc/rpc-types.js.map +1 -1
  44. package/docs/extensions.md +5 -3
  45. package/docs/tui.md +6 -3
  46. package/examples/extensions/README.md +1 -0
  47. package/examples/extensions/question.ts +9 -22
  48. package/examples/extensions/widget-placement.ts +17 -0
  49. package/examples/extensions/with-deps/package-lock.json +2 -2
  50. package/examples/extensions/with-deps/package.json +1 -1
  51. package/package.json +4 -4
@@ -22,28 +22,17 @@ interface QuestionDetails {
22
22
  wasCustom?: boolean;
23
23
  }
24
24
 
25
- // Support both simple strings and objects with descriptions
26
- const OptionSchema = Type.Union([
27
- Type.String(),
28
- Type.Object({
29
- label: Type.String({ description: "Display label for the option" }),
30
- description: Type.Optional(Type.String({ description: "Optional description shown below label" })),
31
- }),
32
- ]);
25
+ // Options with labels and optional descriptions
26
+ const OptionSchema = Type.Object({
27
+ label: Type.String({ description: "Display label for the option" }),
28
+ description: Type.Optional(Type.String({ description: "Optional description shown below label" })),
29
+ });
33
30
 
34
31
  const QuestionParams = Type.Object({
35
32
  question: Type.String({ description: "The question to ask the user" }),
36
33
  options: Type.Array(OptionSchema, { description: "Options for the user to choose from" }),
37
34
  });
38
35
 
39
- // Normalize option to { label, description? }
40
- function normalizeOption(opt: string | { label: string; description?: string }): OptionWithDesc {
41
- if (typeof opt === "string") {
42
- return { label: opt };
43
- }
44
- return opt;
45
- }
46
-
47
36
  export default function question(pi: ExtensionAPI) {
48
37
  pi.registerTool({
49
38
  name: "question",
@@ -57,7 +46,7 @@ export default function question(pi: ExtensionAPI) {
57
46
  content: [{ type: "text", text: "Error: UI not available (running in non-interactive mode)" }],
58
47
  details: {
59
48
  question: params.question,
60
- options: params.options.map((o) => (typeof o === "string" ? o : o.label)),
49
+ options: params.options.map((o) => o.label),
61
50
  answer: null,
62
51
  } as QuestionDetails,
63
52
  };
@@ -70,9 +59,7 @@ export default function question(pi: ExtensionAPI) {
70
59
  };
71
60
  }
72
61
 
73
- // Normalize options
74
- const normalizedOptions = params.options.map(normalizeOption);
75
- const allOptions: DisplayOption[] = [...normalizedOptions, { label: "Type something.", isOther: true }];
62
+ const allOptions: DisplayOption[] = [...params.options, { label: "Type something.", isOther: true }];
76
63
 
77
64
  const result = await ctx.ui.custom<{ answer: string; wasCustom: boolean; index?: number } | null>(
78
65
  (tui, theme, _kb, done) => {
@@ -209,7 +196,7 @@ export default function question(pi: ExtensionAPI) {
209
196
  );
210
197
 
211
198
  // Build simple options list for details
212
- const simpleOptions = normalizedOptions.map((o) => o.label);
199
+ const simpleOptions = params.options.map((o) => o.label);
213
200
 
214
201
  if (!result) {
215
202
  return {
@@ -244,7 +231,7 @@ export default function question(pi: ExtensionAPI) {
244
231
  let text = theme.fg("toolTitle", theme.bold("question ")) + theme.fg("muted", args.question);
245
232
  const opts = Array.isArray(args.options) ? args.options : [];
246
233
  if (opts.length) {
247
- const labels = opts.map((o: string | { label: string }) => (typeof o === "string" ? o : o.label));
234
+ const labels = opts.map((o: OptionWithDesc) => o.label);
248
235
  const numbered = [...labels, "Type something."].map((o, i) => `${i + 1}. ${o}`);
249
236
  text += `\n${theme.fg("dim", ` Options: ${numbered.join(", ")}`)}`;
250
237
  }
@@ -0,0 +1,17 @@
1
+ import type { ExtensionAPI, ExtensionContext } from "@mariozechner/pi-coding-agent";
2
+
3
+ const applyWidgets = (ctx: ExtensionContext) => {
4
+ if (!ctx.hasUI) return;
5
+ ctx.ui.setWidget("widget-above", ["Above editor widget"]);
6
+ ctx.ui.setWidget("widget-below", ["Below editor widget"], { placement: "belowEditor" });
7
+ };
8
+
9
+ export default function widgetPlacementExtension(pi: ExtensionAPI) {
10
+ pi.on("session_start", (_event, ctx) => {
11
+ applyWidgets(ctx);
12
+ });
13
+
14
+ pi.on("session_switch", (_event, ctx) => {
15
+ applyWidgets(ctx);
16
+ });
17
+ }
@@ -1,12 +1,12 @@
1
1
  {
2
2
  "name": "pi-extension-with-deps",
3
- "version": "1.13.1",
3
+ "version": "1.13.2",
4
4
  "lockfileVersion": 3,
5
5
  "requires": true,
6
6
  "packages": {
7
7
  "": {
8
8
  "name": "pi-extension-with-deps",
9
- "version": "1.13.1",
9
+ "version": "1.13.2",
10
10
  "dependencies": {
11
11
  "ms": "^2.1.3"
12
12
  },
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "pi-extension-with-deps",
3
3
  "private": true,
4
- "version": "1.13.1",
4
+ "version": "1.13.2",
5
5
  "type": "module",
6
6
  "scripts": {
7
7
  "clean": "echo 'nothing to clean'",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mariozechner/pi-coding-agent",
3
- "version": "0.49.1",
3
+ "version": "0.49.2",
4
4
  "description": "Coding agent CLI with read, bash, edit, write tools and session management",
5
5
  "type": "module",
6
6
  "piConfig": {
@@ -40,9 +40,9 @@
40
40
  "dependencies": {
41
41
  "@mariozechner/clipboard": "^0.3.0",
42
42
  "@mariozechner/jiti": "^2.6.2",
43
- "@mariozechner/pi-agent-core": "^0.49.1",
44
- "@mariozechner/pi-ai": "^0.49.1",
45
- "@mariozechner/pi-tui": "^0.49.1",
43
+ "@mariozechner/pi-agent-core": "^0.49.2",
44
+ "@mariozechner/pi-ai": "^0.49.2",
45
+ "@mariozechner/pi-tui": "^0.49.2",
46
46
  "@silvia-odwyer/photon-node": "^0.3.4",
47
47
  "chalk": "^5.5.0",
48
48
  "cli-highlight": "^2.1.11",