iosm-cli 0.2.9 → 0.2.11

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 (79) hide show
  1. package/CHANGELOG.md +67 -0
  2. package/README.md +11 -2
  3. package/dist/core/agent-session.d.ts +9 -0
  4. package/dist/core/agent-session.d.ts.map +1 -1
  5. package/dist/core/agent-session.js +425 -50
  6. package/dist/core/agent-session.js.map +1 -1
  7. package/dist/core/background-processes.d.ts +31 -0
  8. package/dist/core/background-processes.d.ts.map +1 -0
  9. package/dist/core/background-processes.js +241 -0
  10. package/dist/core/background-processes.js.map +1 -0
  11. package/dist/core/bash-executor.d.ts +6 -0
  12. package/dist/core/bash-executor.d.ts.map +1 -1
  13. package/dist/core/bash-executor.js.map +1 -1
  14. package/dist/core/extensions/types.d.ts +3 -0
  15. package/dist/core/extensions/types.d.ts.map +1 -1
  16. package/dist/core/extensions/types.js.map +1 -1
  17. package/dist/core/extensions/wrapper.d.ts +19 -2
  18. package/dist/core/extensions/wrapper.d.ts.map +1 -1
  19. package/dist/core/extensions/wrapper.js +23 -4
  20. package/dist/core/extensions/wrapper.js.map +1 -1
  21. package/dist/core/mcp/runtime.d.ts.map +1 -1
  22. package/dist/core/mcp/runtime.js +2 -0
  23. package/dist/core/mcp/runtime.js.map +1 -1
  24. package/dist/core/messages.d.ts +1 -1
  25. package/dist/core/messages.d.ts.map +1 -1
  26. package/dist/core/messages.js +2 -1
  27. package/dist/core/messages.js.map +1 -1
  28. package/dist/core/sdk.d.ts.map +1 -1
  29. package/dist/core/sdk.js +30 -2
  30. package/dist/core/sdk.js.map +1 -1
  31. package/dist/core/settings-manager.d.ts +17 -0
  32. package/dist/core/settings-manager.d.ts.map +1 -1
  33. package/dist/core/settings-manager.js +29 -0
  34. package/dist/core/settings-manager.js.map +1 -1
  35. package/dist/core/slash-commands.d.ts.map +1 -1
  36. package/dist/core/slash-commands.js +8 -0
  37. package/dist/core/slash-commands.js.map +1 -1
  38. package/dist/core/subagents.d.ts +10 -2
  39. package/dist/core/subagents.d.ts.map +1 -1
  40. package/dist/core/subagents.js +66 -17
  41. package/dist/core/subagents.js.map +1 -1
  42. package/dist/core/system-prompt.d.ts +25 -0
  43. package/dist/core/system-prompt.d.ts.map +1 -1
  44. package/dist/core/system-prompt.js +146 -14
  45. package/dist/core/system-prompt.js.map +1 -1
  46. package/dist/core/tools/bash.d.ts +5 -0
  47. package/dist/core/tools/bash.d.ts.map +1 -1
  48. package/dist/core/tools/bash.js +28 -2
  49. package/dist/core/tools/bash.js.map +1 -1
  50. package/dist/core/tools/index.d.ts +2 -1
  51. package/dist/core/tools/index.d.ts.map +1 -1
  52. package/dist/core/tools/index.js.map +1 -1
  53. package/dist/core/tools/permissions.d.ts +3 -0
  54. package/dist/core/tools/permissions.d.ts.map +1 -1
  55. package/dist/core/tools/permissions.js.map +1 -1
  56. package/dist/core/tools/task.d.ts +3 -1
  57. package/dist/core/tools/task.d.ts.map +1 -1
  58. package/dist/core/tools/task.js +48 -23
  59. package/dist/core/tools/task.js.map +1 -1
  60. package/dist/core/ultrathink.d.ts +122 -0
  61. package/dist/core/ultrathink.d.ts.map +1 -0
  62. package/dist/core/ultrathink.js +621 -0
  63. package/dist/core/ultrathink.js.map +1 -0
  64. package/dist/main.d.ts.map +1 -1
  65. package/dist/main.js +93 -1
  66. package/dist/main.js.map +1 -1
  67. package/dist/modes/interactive/interactive-mode.d.ts +6 -0
  68. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  69. package/dist/modes/interactive/interactive-mode.js +281 -24
  70. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  71. package/docs/cli-reference.md +10 -0
  72. package/docs/configuration.md +57 -1
  73. package/docs/development-and-testing.md +3 -2
  74. package/docs/extensions-packages-themes.md +27 -0
  75. package/docs/interactive-mode.md +7 -0
  76. package/docs/orchestration-and-subagents.md +16 -0
  77. package/docs/rpc-json-sdk.md +14 -0
  78. package/docs/sessions-traces-export.md +7 -0
  79. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ultrathink.js","sourceRoot":"","sources":["../../src/core/ultrathink.ts"],"names":[],"mappings":"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","sourcesContent":["import type { AgentMessage } from \"@mariozechner/pi-agent-core\";\nimport type { AssistantMessage, TextContent } from \"@mariozechner/pi-ai\";\nimport { parseCommandArgs } from \"./prompt-templates.js\";\n\nexport const ULTRATHINK_COMMAND = \"ultrathink\";\nexport const ULTRATHINK_DEFAULT_ITERATIONS = 5;\nexport const ULTRATHINK_MAX_ITERATIONS = 12;\nexport const ULTRATHINK_MAX_CHECKPOINT_CHARS = 2200;\nexport const ULTRATHINK_MAX_CONTEXT_MESSAGES = 8;\nexport const ULTRATHINK_MAX_CONTEXT_MESSAGE_CHARS = 260;\nexport const ULTRATHINK_MAX_EVIDENCE_ENTRIES = 12;\nexport const ULTRATHINK_VISIBLE_PROMPT_PREFIX = \"Ultrathink iteration\";\nexport const ULTRATHINK_NO_NEW_EVIDENCE_MARKER = \"[NO_NEW_EVIDENCE_OK]\";\nexport const ULTRATHINK_STAGNATION_LIMIT = 2;\nexport const ULTRATHINK_MAX_ITERATION_INPUT_TOKENS = 50000;\nexport const ULTRATHINK_MAX_RUN_INPUT_TOKENS = 180000;\nexport const ULTRATHINK_MAX_RUN_TOTAL_TOKENS = 220000;\nexport const ULTRATHINK_MAX_RUN_COST = 0.03;\n\nconst CHECKPOINT_SECTIONS = [\n\t\"Goal\",\n\t\"Verified Facts\",\n\t\"Rejected Hypotheses\",\n\t\"Open Questions\",\n\t\"Next Checks\",\n] as const;\n\nconst LIST_SECTION_PLACEHOLDERS: Record<(typeof CHECKPOINT_SECTIONS)[number], string> = {\n\tGoal: \"Refine the objective based on discovered constraints.\",\n\t\"Verified Facts\": \"(none yet)\",\n\t\"Rejected Hypotheses\": \"(none yet)\",\n\t\"Open Questions\": \"(none yet)\",\n\t\"Next Checks\": \"Continue analysis with read-only evidence gathering.\",\n};\n\nconst ULTRATHINK_INTERNAL_MARKER = \"[ULTRATHINK INTERNAL]\";\n\nconst ULTRATHINK_READ_ONLY_TOOL_NAMES = new Set([\n\t\"read\",\n\t\"grep\",\n\t\"find\",\n\t\"ls\",\n\t\"rg\",\n\t\"fd\",\n\t\"ast_grep\",\n\t\"comby\",\n\t\"jq\",\n\t\"yq\",\n\t\"semgrep\",\n\t\"sed\",\n\t\"semantic_search\",\n\t\"fetch\",\n\t\"web_search\",\n\t\"git_read\",\n\t\"todo_read\",\n]);\n\nexport interface UltrathinkCommandConfig {\n\titerations: number;\n\tquery?: string;\n}\n\nexport interface UltrathinkToolEvidence {\n\ttoolCallId: string;\n\ttoolName: string;\n\tsummary: string;\n}\n\nexport interface UltrathinkEvidencePolicyResult {\n\thasNumericClaims: boolean;\n\thasEvidenceTags: boolean;\n\tinvalidEvidenceTags: string[];\n\tmissingEvidenceForNumbers: boolean;\n\tneedsNoNewEvidenceMarker: boolean;\n\thasNoNewEvidenceMarker: boolean;\n}\n\nexport interface UltrathinkToolGroundingPolicyInput {\n\tphase: UltrathinkPhase;\n\tcumulativeEvidenceCount: number;\n\ttoolChecksThisIteration: number;\n}\n\nexport type UltrathinkCommandParseResult =\n\t| { kind: \"command\"; command: UltrathinkCommandConfig }\n\t| { kind: \"error\"; error: string; usage: string };\n\nexport const ULTRATHINK_USAGE = [\n\t\"Usage:\",\n\t\" /ultrathink\",\n\t\" /ultrathink <query>\",\n\t\" /ultrathink -q <1..12> <query>\",\n\t\" /ultrathink --iterations <1..12> <query>\",\n\t\"\",\n\t\"Examples:\",\n\t\" /ultrathink -q 7 audit auth architecture\",\n\t\" /ultrathink --iterations 5\",\n].join(\"\\n\");\n\nexport type UltrathinkPhase = \"Recon\" | \"Critique\" | \"Verify\" | \"Synthesis\";\n\nexport const ULTRATHINK_CHECKPOINT_COMPRESSION_SYSTEM_PROMPT = [\n\t\"You compress ultrathink checkpoints for iterative reasoning.\",\n\t\"Output must be plain text with the exact section names:\",\n\t\"Goal:\",\n\t\"Verified Facts:\",\n\t\"Rejected Hypotheses:\",\n\t\"Open Questions:\",\n\t\"Next Checks:\",\n\t\"Keep only decision-critical details. Preserve concrete file paths, command outputs, and constraints.\",\n\t\"Do not add markdown headings, XML tags, or extra commentary.\",\n].join(\"\\n\");\n\nexport function parseUltrathinkCommand(text: string): UltrathinkCommandParseResult | undefined {\n\tconst trimmed = text.trim();\n\tif (!trimmed.startsWith(`/${ULTRATHINK_COMMAND}`)) return undefined;\n\tif (!new RegExp(`^/${ULTRATHINK_COMMAND}(?:\\\\s|$)`).test(trimmed)) return undefined;\n\n\tconst argsText = trimmed.slice(ULTRATHINK_COMMAND.length + 1).trim();\n\tconst tokens = argsText ? parseCommandArgs(argsText) : [];\n\tlet iterations = ULTRATHINK_DEFAULT_ITERATIONS;\n\tlet query: string | undefined;\n\n\tfor (let index = 0; index < tokens.length; index++) {\n\t\tconst token = tokens[index] ?? \"\";\n\t\tif (token === \"--\") {\n\t\t\tquery = tokens.slice(index + 1).join(\" \").trim() || undefined;\n\t\t\tbreak;\n\t\t}\n\n\t\tif (token === \"-q\" || token === \"--iterations\") {\n\t\t\tconst value = tokens[index + 1];\n\t\t\tif (!value) {\n\t\t\t\treturn {\n\t\t\t\t\tkind: \"error\",\n\t\t\t\t\terror: `Missing value for ${token}.`,\n\t\t\t\t\tusage: ULTRATHINK_USAGE,\n\t\t\t\t};\n\t\t\t}\n\t\t\tconst parsed = parseIterations(value);\n\t\t\tif (!parsed.ok) {\n\t\t\t\treturn {\n\t\t\t\t\tkind: \"error\",\n\t\t\t\t\terror: parsed.error,\n\t\t\t\t\tusage: ULTRATHINK_USAGE,\n\t\t\t\t};\n\t\t\t}\n\t\t\titerations = parsed.value;\n\t\t\tindex += 1;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (token.startsWith(\"-q=\")) {\n\t\t\tconst value = token.slice(3);\n\t\t\tconst parsed = parseIterations(value);\n\t\t\tif (!parsed.ok) {\n\t\t\t\treturn {\n\t\t\t\t\tkind: \"error\",\n\t\t\t\t\terror: parsed.error,\n\t\t\t\t\tusage: ULTRATHINK_USAGE,\n\t\t\t\t};\n\t\t\t}\n\t\t\titerations = parsed.value;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (token.startsWith(\"--iterations=\")) {\n\t\t\tconst value = token.slice(\"--iterations=\".length);\n\t\t\tconst parsed = parseIterations(value);\n\t\t\tif (!parsed.ok) {\n\t\t\t\treturn {\n\t\t\t\t\tkind: \"error\",\n\t\t\t\t\terror: parsed.error,\n\t\t\t\t\tusage: ULTRATHINK_USAGE,\n\t\t\t\t};\n\t\t\t}\n\t\t\titerations = parsed.value;\n\t\t\tcontinue;\n\t\t}\n\n\t\tif (token.startsWith(\"-\")) {\n\t\t\treturn {\n\t\t\t\tkind: \"error\",\n\t\t\t\terror: `Unknown option for /${ULTRATHINK_COMMAND}: ${token}`,\n\t\t\t\tusage: ULTRATHINK_USAGE,\n\t\t\t};\n\t\t}\n\n\t\tquery = tokens.slice(index).join(\" \").trim() || undefined;\n\t\tbreak;\n\t}\n\n\treturn {\n\t\tkind: \"command\",\n\t\tcommand: { iterations, query },\n\t};\n}\n\nfunction parseIterations(value: string): { ok: true; value: number } | { ok: false; error: string } {\n\tif (!/^\\d+$/.test(value)) {\n\t\treturn {\n\t\t\tok: false,\n\t\t\terror: `Invalid iteration count \"${value}\". Expected an integer from 1 to ${ULTRATHINK_MAX_ITERATIONS}.`,\n\t\t};\n\t}\n\tconst parsed = Number.parseInt(value, 10);\n\tif (!Number.isInteger(parsed) || parsed < 1 || parsed > ULTRATHINK_MAX_ITERATIONS) {\n\t\treturn {\n\t\t\tok: false,\n\t\t\terror: `Invalid iteration count \"${value}\". Expected an integer from 1 to ${ULTRATHINK_MAX_ITERATIONS}.`,\n\t\t};\n\t}\n\treturn { ok: true, value: parsed };\n}\n\nexport function getUltrathinkPhase(iteration: number, totalIterations: number): UltrathinkPhase {\n\tif (totalIterations <= 1) return \"Synthesis\";\n\tif (iteration === 1) return \"Recon\";\n\tif (iteration === totalIterations) return \"Synthesis\";\n\tif (iteration === totalIterations - 1) return \"Verify\";\n\treturn \"Critique\";\n}\n\nexport function resolveUltrathinkReadOnlyTools(activeToolNames: string[]): string[] {\n\treturn activeToolNames.filter((toolName) => ULTRATHINK_READ_ONLY_TOOL_NAMES.has(toolName));\n}\n\nexport function findLastMeaningfulUserIntent(messages: AgentMessage[]): string | undefined {\n\tfor (let index = messages.length - 1; index >= 0; index--) {\n\t\tconst message = messages[index];\n\t\tif (message.role !== \"user\") continue;\n\t\tconst text = normalizeWhitespace(extractUserText(message));\n\t\tif (!text) continue;\n\t\tif (text.startsWith(\"/\")) continue;\n\t\tif (text.startsWith(\"!\")) continue;\n\t\tif (text.includes(ULTRATHINK_INTERNAL_MARKER)) continue;\n\t\tif (text.startsWith(ULTRATHINK_VISIBLE_PROMPT_PREFIX)) continue;\n\t\treturn text;\n\t}\n\treturn undefined;\n}\n\nexport function buildUltrathinkContextTail(messages: AgentMessage[]): string {\n\tconst rows: string[] = [];\n\tfor (let index = messages.length - 1; index >= 0; index--) {\n\t\tif (rows.length >= ULTRATHINK_MAX_CONTEXT_MESSAGES) break;\n\t\tconst message = messages[index];\n\t\tconst text = normalizeWhitespace(extractMessageText(message));\n\t\tif (!text) continue;\n\t\tif (text.includes(ULTRATHINK_INTERNAL_MARKER)) continue;\n\t\tif (isUltrathinkStructuredResponse(text)) continue;\n\t\tif (message.role === \"user\" && (text.startsWith(\"/\") || text.startsWith(\"!\"))) continue;\n\t\tif (message.role === \"user\" && text.startsWith(ULTRATHINK_VISIBLE_PROMPT_PREFIX)) continue;\n\t\trows.push(`[${message.role}] ${truncate(text, ULTRATHINK_MAX_CONTEXT_MESSAGE_CHARS)}`);\n\t}\n\tif (rows.length === 0) return \"\";\n\treturn rows.reverse().join(\"\\n\");\n}\n\nexport function extractUltrathinkToolEvidence(messages: AgentMessage[]): UltrathinkToolEvidence[] {\n\tconst byId = new Map<string, UltrathinkToolEvidence>();\n\tfor (const message of messages) {\n\t\tif (!isToolResultMessage(message)) continue;\n\t\tconst toolCallId = typeof message.toolCallId === \"string\" ? message.toolCallId : \"\";\n\t\tconst toolName = typeof message.toolName === \"string\" ? message.toolName : \"unknown\";\n\t\tif (!toolCallId) continue;\n\t\tconst summary = truncate(normalizeWhitespace(extractToolResultText(message) || \"(no text output)\"), 160);\n\t\tbyId.set(toolCallId, { toolCallId, toolName, summary });\n\t}\n\treturn [...byId.values()];\n}\n\nexport function buildUltrathinkEvidenceCatalog(evidence: UltrathinkToolEvidence[]): string {\n\tif (evidence.length === 0) return \"- (none captured yet)\";\n\tconst recent = evidence.slice(-ULTRATHINK_MAX_EVIDENCE_ENTRIES);\n\treturn recent.map((entry) => `- [evidence:${entry.toolCallId}] ${entry.toolName}: ${entry.summary}`).join(\"\\n\");\n}\n\nexport function extractUltrathinkEvidenceTags(text: string): string[] {\n\tconst tags = new Set<string>();\n\tfor (const match of text.matchAll(/\\[evidence:([^\\]\\s]+)\\]/gi)) {\n\t\tconst value = match[1]?.trim();\n\t\tif (value) tags.add(value);\n\t}\n\treturn [...tags];\n}\n\nexport function hasUltrathinkNoNewEvidenceMarker(text: string): boolean {\n\treturn text.includes(ULTRATHINK_NO_NEW_EVIDENCE_MARKER);\n}\n\nexport function evaluateUltrathinkEvidencePolicy(input: {\n\ttext: string;\n\tphase: UltrathinkPhase;\n\ttoolChecksThisIteration: number;\n\tknownEvidenceIds: string[];\n}): UltrathinkEvidencePolicyResult {\n\tconst hasNumericClaims = hasUltrathinkNumericClaims(input.text);\n\tconst evidenceTags = extractUltrathinkEvidenceTags(input.text);\n\tconst hasEvidenceTags = evidenceTags.length > 0;\n\tconst knownEvidence = new Set(input.knownEvidenceIds);\n\tconst invalidEvidenceTags = evidenceTags.filter((tag) => !knownEvidence.has(tag));\n\tconst hasNoNewEvidenceMarker = hasUltrathinkNoNewEvidenceMarker(input.text);\n\tconst needsNoNewEvidenceMarker =\n\t\t(input.phase === \"Verify\" || input.phase === \"Synthesis\") && input.toolChecksThisIteration === 0;\n\n\treturn {\n\t\thasNumericClaims,\n\t\thasEvidenceTags,\n\t\tinvalidEvidenceTags,\n\t\tmissingEvidenceForNumbers: hasNumericClaims && !hasEvidenceTags,\n\t\tneedsNoNewEvidenceMarker,\n\t\thasNoNewEvidenceMarker,\n\t};\n}\n\nexport function createInitialUltrathinkCheckpoint(objective: string): string {\n\treturn normalizeUltrathinkCheckpoint(\n\t\t[\n\t\t\t`Goal: ${objective}`,\n\t\t\t\"Verified Facts:\",\n\t\t\t\"- (none yet)\",\n\t\t\t\"Rejected Hypotheses:\",\n\t\t\t\"- (none yet)\",\n\t\t\t\"Open Questions:\",\n\t\t\t\"- (none yet)\",\n\t\t\t\"Next Checks:\",\n\t\t\t\"- Continue analysis with read-only evidence gathering.\",\n\t\t].join(\"\\n\"),\n\t\tobjective,\n\t);\n}\n\nexport function normalizeUltrathinkCheckpoint(rawCheckpoint: string, objective: string): string {\n\tconst source = rawCheckpoint.trim();\n\tconst goal = normalizeGoal(extractCheckpointSection(source, \"Goal\") ?? objective, objective);\n\tconst verifiedFacts = normalizeListSection(extractCheckpointSection(source, \"Verified Facts\"), \"Verified Facts\");\n\tconst rejectedHypotheses = normalizeListSection(\n\t\textractCheckpointSection(source, \"Rejected Hypotheses\"),\n\t\t\"Rejected Hypotheses\",\n\t);\n\tconst openQuestions = normalizeListSection(extractCheckpointSection(source, \"Open Questions\"), \"Open Questions\");\n\tconst nextChecks = normalizeListSection(extractCheckpointSection(source, \"Next Checks\"), \"Next Checks\");\n\n\treturn [\n\t\t`Goal: ${goal}`,\n\t\t\"Verified Facts:\",\n\t\tverifiedFacts,\n\t\t\"Rejected Hypotheses:\",\n\t\trejectedHypotheses,\n\t\t\"Open Questions:\",\n\t\topenQuestions,\n\t\t\"Next Checks:\",\n\t\tnextChecks,\n\t].join(\"\\n\");\n}\n\nexport function truncateUltrathinkCheckpoint(checkpoint: string, maxChars: number): string {\n\tif (checkpoint.length <= maxChars) return checkpoint;\n\treturn `${checkpoint.slice(0, Math.max(0, maxChars - 3)).trimEnd()}...`;\n}\n\nexport function extractUltrathinkIterationSummary(text: string): string {\n\tconst summary = extractMarkdownSection(text, \"Iteration Summary\");\n\tif (summary) {\n\t\treturn truncate(normalizeWhitespace(summary), 420);\n\t}\n\tconst fallback = normalizeWhitespace(text);\n\treturn truncate(fallback || \"Iteration completed without a structured summary.\", 420);\n}\n\nexport function extractUltrathinkCheckpoint(text: string): string | undefined {\n\tconst checkpoint = extractMarkdownSection(text, \"Next Checkpoint\");\n\treturn checkpoint?.trim() || undefined;\n}\n\nexport function buildUltrathinkIterationPrompt(input: {\n\titeration: number;\n\ttotalIterations: number;\n\tphase: UltrathinkPhase;\n\tobjective: string;\n\tcheckpoint: string;\n\tpreviousSummary?: string;\n\tcontextTail?: string;\n\tevidenceCatalog?: string;\n\tbudgetStatus?: string;\n}): string {\n\tconst isFinalIteration = input.iteration === input.totalIterations;\n\n\tconst formatBlock = buildUltrathinkResponseFormat(isFinalIteration);\n\n\treturn [\n\t\t`${ULTRATHINK_INTERNAL_MARKER} iteration ${input.iteration}/${input.totalIterations}`,\n\t\t`Phase: ${input.phase}`,\n\t\t\"You are running an ultrathink analysis pass with the ROOT agent and tools.\",\n\t\t\"STRICT RULES:\",\n\t\t\"- Operate in read-only mode only.\",\n\t\t\"- You may inspect files and repository state, but do not modify files or run mutating commands.\",\n\t\t\"- No implementation changes in this mode; analysis and verification only.\",\n\t\t\"- Do not invent metrics, counts, percentages, coverage numbers, or ROI claims.\",\n\t\t\"- Any quantitative claim must include evidence tags: `[evidence:<toolCallId>]`.\",\n\t\t\"- In Verify/Synthesis with zero new tool checks, include `[NO_NEW_EVIDENCE_OK]` in Evidence Notes.\",\n\t\t\"\",\n\t\t\"Objective:\",\n\t\tinput.objective,\n\t\t\"\",\n\t\tinput.contextTail\n\t\t\t? [\"Session context tail (compact):\", input.contextTail, \"\"].join(\"\\n\")\n\t\t\t: \"\",\n\t\tinput.previousSummary\n\t\t\t? [\"Previous iteration summary (compact):\", input.previousSummary, \"\"].join(\"\\n\")\n\t\t\t: \"\",\n\t\tinput.evidenceCatalog\n\t\t\t? [\"Known evidence from tool results (carry-forward):\", input.evidenceCatalog, \"\"].join(\"\\n\")\n\t\t\t: \"\",\n\t\tinput.budgetStatus\n\t\t\t? [\"Current budget status:\", input.budgetStatus, \"\"].join(\"\\n\")\n\t\t\t: \"\",\n\t\t\"Current checkpoint:\",\n\t\tinput.checkpoint,\n\t\t\"\",\n\t\t\"Return in the exact markdown shape below:\",\n\t\tformatBlock,\n\t\t\"\",\n\t\t\"Keep this response concise and evidence-based.\",\n\t]\n\t\t.filter((line) => line.length > 0)\n\t\t.join(\"\\n\");\n}\n\nexport function buildUltrathinkVisibleIterationPrompt(input: {\n\titeration: number;\n\ttotalIterations: number;\n\tphase: UltrathinkPhase;\n\tobjective: string;\n}): string {\n\treturn `${ULTRATHINK_VISIBLE_PROMPT_PREFIX} ${input.iteration}/${input.totalIterations} (${input.phase}). Objective: ${truncate(input.objective, 160)}. Running ROOT-agent read-only analysis pass.`;\n}\n\nexport function buildUltrathinkBudgetStatusLine(input: {\n\taccumulatedInputTokens: number;\n\taccumulatedTotalTokens: number;\n\taccumulatedCost: number;\n}): string {\n\treturn [\n\t\t`input_tokens=${input.accumulatedInputTokens}/${ULTRATHINK_MAX_RUN_INPUT_TOKENS}`,\n\t\t`total_tokens=${input.accumulatedTotalTokens}/${ULTRATHINK_MAX_RUN_TOTAL_TOKENS}`,\n\t\t`cost=${input.accumulatedCost.toFixed(6)}/${ULTRATHINK_MAX_RUN_COST.toFixed(6)}`,\n\t\t`iter_input_limit=${ULTRATHINK_MAX_ITERATION_INPUT_TOKENS}`,\n\t].join(\", \");\n}\n\nexport function buildUltrathinkComplianceRepairPrompt(input: {\n\titeration: number;\n\ttotalIterations: number;\n\tphase: UltrathinkPhase;\n\tobjective: string;\n\toriginalResponse: string;\n\tissues: string[];\n\tcheckpoint: string;\n\tevidenceCatalog?: string;\n}): string {\n\tconst isFinalIteration = input.iteration === input.totalIterations;\n\treturn [\n\t\t`${ULTRATHINK_INTERNAL_MARKER} compliance repair ${input.iteration}/${input.totalIterations}`,\n\t\t`Phase: ${input.phase}`,\n\t\t\"You must rewrite the previous iteration response to satisfy ultrathink evidence policy.\",\n\t\t\"\",\n\t\t\"Issues detected:\",\n\t\t...input.issues.map((issue) => `- ${issue}`),\n\t\t\"\",\n\t\t\"Objective:\",\n\t\tinput.objective,\n\t\t\"\",\n\t\tinput.evidenceCatalog\n\t\t\t? [\"Known evidence from tool results:\", input.evidenceCatalog, \"\"].join(\"\\n\")\n\t\t\t: \"\",\n\t\t\"Current checkpoint:\",\n\t\tinput.checkpoint,\n\t\t\"\",\n\t\t\"Previous non-compliant response:\",\n\t\tinput.originalResponse,\n\t\t\"\",\n\t\t\"Rewrite with these constraints:\",\n\t\t\"- Keep conclusions concise and evidence-grounded.\",\n\t\t\"- Remove any unsupported quantitative claims.\",\n\t\t\"- Any quantitative claim must include `[evidence:<toolCallId>]`.\",\n\t\t\"- If no new tool checks were needed in Verify/Synthesis, include `[NO_NEW_EVIDENCE_OK]` in Evidence Notes.\",\n\t\t\"\",\n\t\t\"Return in the exact markdown shape below:\",\n\t\tbuildUltrathinkResponseFormat(isFinalIteration),\n\t]\n\t\t.filter((line) => line.length > 0)\n\t\t.join(\"\\n\");\n}\n\nexport function shouldUltrathinkForceToolGrounding(input: UltrathinkToolGroundingPolicyInput): boolean {\n\tif (input.toolChecksThisIteration > 0) return false;\n\tif (input.phase === \"Recon\") return true;\n\tif (input.phase === \"Critique\" && input.cumulativeEvidenceCount === 0) return true;\n\treturn false;\n}\n\nexport function buildUltrathinkToolGroundingPrompt(input: {\n\titeration: number;\n\ttotalIterations: number;\n\tphase: UltrathinkPhase;\n\tobjective: string;\n\tcheckpoint: string;\n\tavailableReadOnlyTools: string[];\n\tevidenceCatalog?: string;\n}): string {\n\tconst isFinalIteration = input.iteration === input.totalIterations;\n\tconst tools = input.availableReadOnlyTools.join(\", \");\n\treturn [\n\t\t`${ULTRATHINK_INTERNAL_MARKER} grounding retry ${input.iteration}/${input.totalIterations}`,\n\t\t`Phase: ${input.phase}`,\n\t\t\"Grounding retry is required because no tool evidence was captured in this phase.\",\n\t\t\"MANDATORY ACTIONS:\",\n\t\t\"- Use read-only tools against the current workspace before finalizing this response.\",\n\t\t\"- Run at least 2 concrete checks (e.g., ls/rg/read/git_read).\",\n\t\t\"- Reference concrete file paths and observations from tool outputs.\",\n\t\t\"- Do not answer from prior knowledge only.\",\n\t\t\"\",\n\t\t`Available read-only tools: ${tools || \"(none listed)\"}`,\n\t\t\"\",\n\t\t\"Objective:\",\n\t\tinput.objective,\n\t\t\"\",\n\t\tinput.evidenceCatalog\n\t\t\t? [\"Known evidence from tool results:\", input.evidenceCatalog, \"\"].join(\"\\n\")\n\t\t\t: \"\",\n\t\t\"Current checkpoint:\",\n\t\tinput.checkpoint,\n\t\t\"\",\n\t\t\"Return in the exact markdown shape below:\",\n\t\tbuildUltrathinkResponseFormat(isFinalIteration),\n\t]\n\t\t.filter((line) => line.length > 0)\n\t\t.join(\"\\n\");\n}\n\nexport function buildUltrathinkCheckpointCompressionPrompt(input: {\n\tobjective: string;\n\tcheckpoint: string;\n\tmaxChars: number;\n}): string {\n\treturn [\n\t\t\"Compress this checkpoint while preserving all decision-critical details.\",\n\t\t`Maximum length target: ${input.maxChars} characters.`,\n\t\t\"\",\n\t\t\"Objective:\",\n\t\tinput.objective,\n\t\t\"\",\n\t\t\"Checkpoint to compress:\",\n\t\tinput.checkpoint,\n\t].join(\"\\n\");\n}\n\nexport function hasUltrathinkEvidenceViolations(policy: UltrathinkEvidencePolicyResult): boolean {\n\tif (policy.invalidEvidenceTags.length > 0) return true;\n\tif (policy.missingEvidenceForNumbers) return true;\n\tif (policy.needsNoNewEvidenceMarker && !policy.hasNoNewEvidenceMarker) return true;\n\treturn false;\n}\n\nexport function isUltrathinkStagnated(input: {\n\tpreviousCheckpoint: string;\n\tnextCheckpoint: string;\n\ttoolChecksThisIteration: number;\n}): boolean {\n\tif (input.toolChecksThisIteration > 0) return false;\n\treturn normalizeWhitespace(input.previousCheckpoint) === normalizeWhitespace(input.nextCheckpoint);\n}\n\nfunction buildUltrathinkResponseFormat(isFinalIteration: boolean): string {\n\tconst rows = [\n\t\t\"### Iteration Summary\",\n\t\t\"- 2-4 bullets, max 350 characters total.\",\n\t];\n\tif (isFinalIteration) {\n\t\trows.push(\"### Final Analysis\");\n\t\trows.push(\"- Explain the best approach with concrete evidence and tradeoffs.\");\n\t\trows.push(\"- Start this section with: `I used ultrathink mode.`\");\n\t}\n\trows.push(\"### Evidence Notes\");\n\trows.push(\"- Add evidence tags for quantitative claims: `[evidence:<toolCallId>]`.\");\n\trows.push(`- If no new tool checks were needed in Verify/Synthesis, include ${ULTRATHINK_NO_NEW_EVIDENCE_MARKER}.`);\n\trows.push(\"### Next Checkpoint\");\n\trows.push(\"Goal: <single line>\");\n\trows.push(\"Verified Facts:\");\n\trows.push(\"- ...\");\n\trows.push(\"Rejected Hypotheses:\");\n\trows.push(\"- ...\");\n\trows.push(\"Open Questions:\");\n\trows.push(\"- ...\");\n\trows.push(\"Next Checks:\");\n\trows.push(\"- ...\");\n\treturn rows.join(\"\\n\");\n}\n\nfunction hasUltrathinkNumericClaims(text: string): boolean {\n\tconst finalAnalysis = extractMarkdownSection(text, \"Final Analysis\");\n\tconst source = normalizeWhitespace(finalAnalysis ?? text);\n\tif (!source) return false;\n\tif (/\\b\\d+\\s*(?:%|percent|hours?|hrs?|minutes?|mins?|sec|seconds?|tokens?|files?|tests?|issues?|iterations?|insights?)\\b/i.test(source)) {\n\t\treturn true;\n\t}\n\tif (/\\b\\d+(?:\\.\\d+)?\\s*\\/\\s*\\d+(?:\\.\\d+)?\\b/.test(source)) {\n\t\treturn true;\n\t}\n\tif (/\\b\\d+\\+\\b/.test(source)) {\n\t\treturn true;\n\t}\n\treturn false;\n}\n\nfunction isUltrathinkStructuredResponse(text: string): boolean {\n\treturn text.includes(\"### Iteration Summary\") && text.includes(\"### Next Checkpoint\");\n}\n\nfunction extractMessageText(message: AgentMessage): string {\n\tswitch (message.role) {\n\t\tcase \"user\":\n\t\t\treturn extractUserText(message);\n\t\tcase \"assistant\":\n\t\t\treturn extractAssistantText(message as AssistantMessage);\n\t\tcase \"bashExecution\":\n\t\t\treturn [message.command, message.output].filter((part) => typeof part === \"string\" && part.trim()).join(\" | \");\n\t\tcase \"branchSummary\":\n\t\tcase \"compactionSummary\":\n\t\t\treturn typeof message.summary === \"string\" ? message.summary : \"\";\n\t\tdefault:\n\t\t\treturn \"\";\n\t}\n}\n\nfunction extractUserText(message: AgentMessage & { role: \"user\" }): string {\n\tconst content = message.content;\n\tif (typeof content === \"string\") return content;\n\tif (!Array.isArray(content)) return \"\";\n\treturn content\n\t\t.filter((part): part is TextContent => part.type === \"text\")\n\t\t.map((part) => part.text)\n\t\t.join(\"\\n\");\n}\n\nfunction extractAssistantText(message: AssistantMessage): string {\n\treturn message.content\n\t\t.filter((part): part is TextContent => part.type === \"text\")\n\t\t.map((part) => part.text)\n\t\t.join(\"\\n\");\n}\n\nfunction isToolResultMessage(\n\tmessage: AgentMessage,\n): message is AgentMessage & { role: \"toolResult\"; toolCallId: string; toolName: string; content: TextContent[] } {\n\tif (message.role !== \"toolResult\") return false;\n\tconst candidate = message as AgentMessage & {\n\t\trole: \"toolResult\";\n\t\ttoolCallId?: unknown;\n\t\ttoolName?: unknown;\n\t\tcontent?: unknown;\n\t};\n\treturn (\n\t\ttypeof candidate.toolCallId === \"string\" &&\n\t\tcandidate.toolCallId.length > 0 &&\n\t\ttypeof candidate.toolName === \"string\" &&\n\t\tcandidate.toolName.length > 0 &&\n\t\tArray.isArray(candidate.content)\n\t);\n}\n\nfunction extractToolResultText(message: AgentMessage & { role: \"toolResult\"; content: TextContent[] }): string {\n\treturn message.content\n\t\t.filter((part): part is TextContent => part.type === \"text\")\n\t\t.map((part) => part.text)\n\t\t.join(\"\\n\");\n}\n\nfunction extractMarkdownSection(text: string, heading: string): string | undefined {\n\tconst escapedHeading = escapeRegExp(heading);\n\tconst regex = new RegExp(`(?:^|\\\\n)###\\\\s*${escapedHeading}\\\\s*\\\\n([\\\\s\\\\S]*?)(?=\\\\n###\\\\s+|$)`, \"i\");\n\tconst match = text.match(regex);\n\tif (!match) return undefined;\n\treturn match[1]?.trim() || undefined;\n}\n\nfunction extractCheckpointSection(raw: string, sectionName: (typeof CHECKPOINT_SECTIONS)[number]): string | undefined {\n\tconst escapedSection = escapeRegExp(sectionName);\n\tconst otherSections = CHECKPOINT_SECTIONS.filter((name) => name !== sectionName).map((name) => escapeRegExp(name));\n\tconst lookahead = otherSections.length > 0 ? `(?=\\\\n(?:${otherSections.join(\"|\")})\\\\s*:|$)` : \"$\";\n\tconst regex = new RegExp(`(?:^|\\\\n)${escapedSection}\\\\s*:\\\\s*([\\\\s\\\\S]*?)${lookahead}`, \"i\");\n\tconst match = raw.match(regex);\n\tif (!match) return undefined;\n\treturn match[1]?.trim() || undefined;\n}\n\nfunction normalizeGoal(goalCandidate: string, fallbackGoal: string): string {\n\tconst normalized = normalizeWhitespace(goalCandidate);\n\tif (normalized.length > 0) return truncate(normalized, 280);\n\treturn truncate(normalizeWhitespace(fallbackGoal), 280);\n}\n\nfunction normalizeListSection(\n\tcandidate: string | undefined,\n\tsectionName: Exclude<(typeof CHECKPOINT_SECTIONS)[number], \"Goal\">,\n): string {\n\tconst normalized = normalizeWhitespace(candidate ?? \"\");\n\tif (!normalized) {\n\t\treturn `- ${LIST_SECTION_PLACEHOLDERS[sectionName]}`;\n\t}\n\n\tconst lines = normalized\n\t\t.split(\"\\n\")\n\t\t.map((line) => line.trim())\n\t\t.filter((line) => line.length > 0)\n\t\t.map((line) => line.replace(/^[*-]\\s*/, \"\").replace(/^\\d+[.)]\\s*/, \"\").trim())\n\t\t.filter((line) => line.length > 0)\n\t\t.map((line) => `- ${truncate(line, 280)}`);\n\n\tif (lines.length === 0) {\n\t\treturn `- ${LIST_SECTION_PLACEHOLDERS[sectionName]}`;\n\t}\n\n\treturn lines.join(\"\\n\");\n}\n\nfunction truncate(text: string, maxChars: number): string {\n\tif (text.length <= maxChars) return text;\n\treturn `${text.slice(0, Math.max(0, maxChars - 3)).trimEnd()}...`;\n}\n\nfunction normalizeWhitespace(value: string): string {\n\treturn value\n\t\t.replace(/\\r\\n/g, \"\\n\")\n\t\t.split(\"\\n\")\n\t\t.map((line) => line.replace(/\\s+/g, \" \").trim())\n\t\t.filter((line) => line.length > 0)\n\t\t.join(\"\\n\");\n}\n\nfunction escapeRegExp(value: string): string {\n\treturn value.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAslDH,wBAAsB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,iBA4RxC"}
1
+ {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAyqDH,wBAAsB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,iBA6RxC"}
package/dist/main.js CHANGED
@@ -6,7 +6,7 @@
6
6
  */
7
7
  import { supportsXhigh } from "@mariozechner/pi-ai";
8
8
  import chalk from "chalk";
9
- import { writeFileSync } from "node:fs";
9
+ import { existsSync, readFileSync, writeFileSync } from "node:fs";
10
10
  import { resolve } from "node:path";
11
11
  import { createInterface } from "readline";
12
12
  import { parseArgs, printHelp } from "./cli/args.js";
@@ -20,6 +20,7 @@ import { exportFromFile } from "./core/export-html/index.js";
20
20
  import { KeybindingsManager } from "./core/keybindings.js";
21
21
  import { ModelRegistry } from "./core/model-registry.js";
22
22
  import { resolveCliModel, resolveModelScope } from "./core/model-resolver.js";
23
+ import { loadModelsDevProviderCatalog } from "./core/models-dev-provider-catalog.js";
23
24
  import { getMcpCommandHelp, getMergedServerByName, loadMergedMcpConfig, McpRuntime, parseMcpAddCommand, parseMcpTargetCommand, } from "./core/mcp/index.js";
24
25
  import { getSemanticCommandHelp, parseSemanticCliCommand, SemanticConfigMissingError, SemanticIndexRequiredError, SemanticRebuildRequiredError, SemanticSearchRuntime, } from "./core/semantic/index.js";
25
26
  import { DefaultPackageManager } from "./core/package-manager.js";
@@ -55,6 +56,95 @@ async function readPipedStdin() {
55
56
  process.stdin.resume();
56
57
  });
57
58
  }
59
+ function resolveModelsDevApi(modelNpm) {
60
+ const npm = modelNpm?.toLowerCase() ?? "";
61
+ if (npm.includes("anthropic"))
62
+ return "anthropic-messages";
63
+ if (npm.includes("google-vertex"))
64
+ return "google-vertex";
65
+ if (npm.includes("google"))
66
+ return "google-generative-ai";
67
+ if (npm.includes("amazon-bedrock"))
68
+ return "bedrock-converse-stream";
69
+ if (npm.includes("mistral"))
70
+ return "mistral-conversations";
71
+ if (npm.includes("@ai-sdk/openai") && !npm.includes("compatible"))
72
+ return "openai-responses";
73
+ return "openai-completions";
74
+ }
75
+ function buildModelsDevProviderConfig(providerInfo) {
76
+ const baseUrl = providerInfo.api ?? providerInfo.models.find((model) => !!model.api)?.api;
77
+ if (!baseUrl)
78
+ return undefined;
79
+ if (providerInfo.models.length === 0)
80
+ return undefined;
81
+ const models = providerInfo.models.map((model) => ({
82
+ id: model.id,
83
+ name: model.name,
84
+ api: resolveModelsDevApi(model.npm ?? providerInfo.npm),
85
+ reasoning: model.reasoning,
86
+ input: [...model.input],
87
+ cost: model.cost,
88
+ contextWindow: model.contextWindow,
89
+ maxTokens: model.maxTokens,
90
+ headers: Object.keys(model.headers).length > 0 ? model.headers : undefined,
91
+ }));
92
+ return {
93
+ baseUrl,
94
+ models,
95
+ };
96
+ }
97
+ function isProviderConfiguredInModelsJson(providerId, modelsPath) {
98
+ if (!existsSync(modelsPath))
99
+ return false;
100
+ try {
101
+ const parsed = JSON.parse(readFileSync(modelsPath, "utf-8"));
102
+ const providers = parsed?.providers;
103
+ if (!providers || typeof providers !== "object" || Array.isArray(providers))
104
+ return false;
105
+ return Object.prototype.hasOwnProperty.call(providers, providerId);
106
+ }
107
+ catch {
108
+ return false;
109
+ }
110
+ }
111
+ async function hydrateAuthenticatedProviderModelsOnStartup(modelRegistry) {
112
+ if (isTruthyEnvFlag(process.env[ENV_OFFLINE]) || isTruthyEnvFlag(process.env.PI_OFFLINE))
113
+ return;
114
+ const providersToRefresh = new Set(modelRegistry.authStorage.list());
115
+ for (const model of modelRegistry.getAll()) {
116
+ if (modelRegistry.authStorage.hasAuth(model.provider)) {
117
+ providersToRefresh.add(model.provider);
118
+ }
119
+ }
120
+ if (providersToRefresh.size === 0)
121
+ return;
122
+ const modelsPath = getModelsPath();
123
+ let catalog;
124
+ try {
125
+ catalog = await loadModelsDevProviderCatalog();
126
+ }
127
+ catch {
128
+ return;
129
+ }
130
+ for (const providerId of providersToRefresh) {
131
+ if (isProviderConfiguredInModelsJson(providerId, modelsPath)) {
132
+ continue;
133
+ }
134
+ const providerInfo = catalog.get(providerId);
135
+ if (!providerInfo)
136
+ continue;
137
+ const config = buildModelsDevProviderConfig(providerInfo);
138
+ if (!config)
139
+ continue;
140
+ try {
141
+ modelRegistry.registerProvider(providerId, config);
142
+ }
143
+ catch {
144
+ // Best effort only.
145
+ }
146
+ }
147
+ }
58
148
  function reportSettingsErrors(settingsManager, context) {
59
149
  const errors = settingsManager.drainErrors();
60
150
  for (const { scope, error } of errors) {
@@ -310,6 +400,7 @@ async function runIosmInitAgentVerification(targetDir, result) {
310
400
  reportSettingsErrors(settingsManager, "iosm init verify");
311
401
  const authStorage = AuthStorage.create();
312
402
  const modelRegistry = new ModelRegistry(authStorage, getModelsPath());
403
+ await hydrateAuthenticatedProviderModelsOnStartup(modelRegistry);
313
404
  const resourceLoader = new DefaultResourceLoader({
314
405
  cwd: targetDir,
315
406
  agentDir,
@@ -1395,6 +1486,7 @@ export async function main(args) {
1395
1486
  reportSettingsErrors(settingsManager, "startup");
1396
1487
  const authStorage = AuthStorage.create();
1397
1488
  const modelRegistry = new ModelRegistry(authStorage, getModelsPath());
1489
+ await hydrateAuthenticatedProviderModelsOnStartup(modelRegistry);
1398
1490
  const resourceLoader = new DefaultResourceLoader({
1399
1491
  cwd,
1400
1492
  agentDir,