pi-soly 1.12.0 → 1.12.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.
package/ask/index.ts CHANGED
@@ -71,7 +71,7 @@ export default function piAskExtension(pi: ExtensionAPI) {
71
71
  name: "ask_pro",
72
72
  label: "soly · ask_pro",
73
73
  description:
74
- "Ask the user several questions at once via a tabbed picker; returns all answers in one call. Per question: single-select (default), `multiSelect` (+ `minSelect`/`maxSelect`), `allowOther` (free-text choice), or `freeText` (typed answer, no options). Per option: `recommended` (⭐) and `preview` (side panel, fenced code highlighted). User can skip (`s`) or note (`n`). Prefer over one-by-one questions; good for `soly discuss`.",
74
+ "Ask the user one or more questions at once via a tabbed picker (≤6 questions); returns all answers in one call. USE WHEN: (a) you have 2+ related questions to gather in one batch, OR (b) the choice is local — a sub-question inside an already-decided theme, or a simple label-vs-label «или/или» that doesn't justify a full-screen deck. Each option is a short label + 1-2 sentence description (no per-option code, no pros/cons). For a global architectural fork with real counterweight between options, use `decision_deck` instead. Per question: single-select (default), `multiSelect` (+ `minSelect`/`maxSelect`), `allowOther` (free-text 'Other…'), or `freeText` (typed answer, no options). Per option: `recommended` (⭐) and `preview` (side panel, fenced code highlighted). User can skip (`s`) or note (`n`). Prefer this over one-by-one questions.",
75
75
  parameters: Type.Object({
76
76
  questions: Type.Array(
77
77
  Type.Object({
package/deck/index.ts CHANGED
@@ -24,7 +24,7 @@ export default function piDeckExtension(pi: ExtensionAPI) {
24
24
  name: "decision_deck",
25
25
  label: "soly · decision_deck",
26
26
  description:
27
- "Present ONE design/architecture decision as a full-screen deck of cards (one per option) the user flips through (←/→ or 1-N) and picks with Enter. Use instead of ask_pro when the choice hinges on comparing each option's concrete code shape, not a label. 2-6 options. The user can attach a free-text note (rationale, caveats) via `n`; it's returned in the result. Native TUI. Returns the chosen option.",
27
+ "Present ONE design/architecture decision as a full-screen deck of cards (one per option) the user flips through (←/→ or 1-N) and picks with Enter. Use when comparing global architectural forks (architecture, API shape, data model) where each option needs its own card with code + pros/cons to be properly weighed against its counterweight — trade-offs that genuinely pull in different directions (e.g. consistency vs availability, sync vs async). STRICTLY ONE question per call — for 2+ related questions in one batch, use `ask_pro` instead. For local sub-questions inside an already-decided theme, or simple label-vs-label «или/или», `ask_pro` is lighter. Default to `ask_pro` unless the stakes are global. The user can attach a free-text note (rationale, caveats) via `n`; it's returned in the result. Native TUI. Returns the chosen option.",
28
28
  parameters: Type.Object({
29
29
  title: Type.Optional(Type.String({ description: "Decision title." })),
30
30
  prompt: Type.Optional(Type.String({ description: "Question shown above the cards." })),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pi-soly",
3
- "version": "1.12.0",
3
+ "version": "1.12.2",
4
4
  "description": "Project management + workflow framework for pi-coding-agent. Plans, state, MANDATORY rules, self-review, multi-question picker, native footer + welcome chrome — one npm install, zero config. The LLM drives execution and delegates to a worker subagent when available.",
5
5
  "type": "module",
6
6
  "main": "index.ts",
package/tool-hints.ts CHANGED
@@ -52,9 +52,9 @@ export function buildToolHintSection(h: ToolHint): string | null {
52
52
  if (h.artifact)
53
53
  bits.push("- Examples / a table / a visual result: **ask the user first** — render it in the browser as an artifact (`html_artifact`), or just as text here? Then proceed accordingly.");
54
54
  if (h.deck)
55
- bits.push("- Comparing options/alternatives: **ask the user first** show them as a full-screen deck (`decision_deck`, code + pros/cons), or inline as text? Then proceed.");
55
+ bits.push("- Comparing 2-6 options: if it's a global architectural fork with real counterweight (trade-offs pulling in different directions) and each option needs code + pros/cons on its own card use `decision_deck`. If it's 2+ related questions OR a local sub-question → use `ask_pro`. **Default to `ask_pro` unless the stakes are global.** Never use `decision_deck` for 2+ questions.");
56
56
  if (h.ask)
57
- bits.push("- Several things to clarify → use `ask_pro` (one batched picker).");
57
+ bits.push("- Several things to clarify → use `ask_pro` (one batched picker). `decision_deck` does NOT support multi-question — never reach for it here.");
58
58
  if (bits.length === 0) return null;
59
59
  return `\n## soly — interactive output for this turn\n\n${bits.join(
60
60
  "\n",