mia-code 0.2.0 → 0.3.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 (410) hide show
  1. package/.miette/260321.md +1 -0
  2. package/.miette/260323.md +9 -0
  3. package/.miette/260331.md +2 -0
  4. package/.pde/2604011511--83a2d7f9-24a5-4cf4-98d5-036c82f872e8/2604020008--d3417f2c-df12-4f0f-8a1b-d88e7968f822/d3417f2c-df12-4f0f-8a1b-d88e7968f822.md +63 -0
  5. package/.pde/2604011511--83a2d7f9-24a5-4cf4-98d5-036c82f872e8/2604020008--e6c3fc5d-4a70-4523-ba7d-a3250da4c235/e6c3fc5d-4a70-4523-ba7d-a3250da4c235.md +72 -0
  6. package/.pde/2604011511--83a2d7f9-24a5-4cf4-98d5-036c82f872e8/2604020008--efeb00a2-b17a-4d32-b1f0-b90c37a8d24e/efeb00a2-b17a-4d32-b1f0-b90c37a8d24e.md +62 -0
  7. package/.pde/2604011511--83a2d7f9-24a5-4cf4-98d5-036c82f872e8/83a2d7f9-24a5-4cf4-98d5-036c82f872e8.json +302 -0
  8. package/.pde/2604011511--83a2d7f9-24a5-4cf4-98d5-036c82f872e8/83a2d7f9-24a5-4cf4-98d5-036c82f872e8.md +149 -0
  9. package/.pde/2604011511--83a2d7f9-24a5-4cf4-98d5-036c82f872e8/AGENTS.md +31 -0
  10. package/.pde/2604011511--83a2d7f9-24a5-4cf4-98d5-036c82f872e8/meta-decomposition-3-children.md +67 -0
  11. package/.pde/2604040129--61f9dd4d-7aa6-45e6-a58b-e480b1aa6737/61f9dd4d-7aa6-45e6-a58b-e480b1aa6737--from-mia-openclaw-workspace.md +125 -0
  12. package/.pde/2604040129--61f9dd4d-7aa6-45e6-a58b-e480b1aa6737/STATUS.md +1 -0
  13. package/.pde/4f02ba94-9f52-422e-9389-b16f9b37f358.json +177 -0
  14. package/.pde/4f02ba94-9f52-422e-9389-b16f9b37f358.md +77 -0
  15. package/.pde/6ad9244d-5340-490f-b76c-c86728b9de52.json +222 -0
  16. package/.pde/6ad9244d-5340-490f-b76c-c86728b9de52.md +99 -0
  17. package/.pde/8b566792-ed15-4606-96f9-2b6f593d7e6b.json +111 -0
  18. package/.pde/8b566792-ed15-4606-96f9-2b6f593d7e6b.md +67 -0
  19. package/.pde/c7f1e74b-05a5-40e2-9f01-4cc48d2528f7.json +349 -0
  20. package/.pde/c7f1e74b-05a5-40e2-9f01-4cc48d2528f7.md +147 -0
  21. package/.pde/dfc00a78-1da0-4c09-8a16-c6982644051b.json +118 -0
  22. package/.pde/dfc00a78-1da0-4c09-8a16-c6982644051b.md +64 -0
  23. package/GUILLAUME.md +8 -0
  24. package/KINSHIP.md +9 -0
  25. package/MIA_CODE_ARCHITECTURE_REPORT.md +718 -0
  26. package/contextual_research/260119-MIA-CODE--98090899-8aff-4e11-9dc3-8b99466d1.md +1101 -0
  27. package/contextual_research/MIA.md +38 -0
  28. package/contextual_research/MIAWAPASCONE.md +59 -0
  29. package/contextual_research/MIETTE.md +38 -0
  30. package/contextual_research/PDE-generalization--caefee82-efb1-4dbb-8733-691b01581464--260130/2504.00218v2.pdf +7483 -12
  31. package/contextual_research/PDE-generalization--caefee82-efb1-4dbb-8733-691b01581464--260130/2505.00212v3.pdf +0 -0
  32. package/contextual_research/PDE-generalization--caefee82-efb1-4dbb-8733-691b01581464--260130/CONTENT.md +1014 -0
  33. package/contextual_research/PDE-generalization--caefee82-efb1-4dbb-8733-691b01581464--260130/DESIGN.gemini.md +242 -0
  34. package/contextual_research/PDE-generalization--caefee82-efb1-4dbb-8733-691b01581464--260130/INDEX.md +45 -0
  35. package/contextual_research/PDE-generalization--caefee82-efb1-4dbb-8733-691b01581464--260130/sources/2504.00218v2.md +2025 -0
  36. package/contextual_research/PDE-generalization--caefee82-efb1-4dbb-8733-691b01581464--260130/sources/2504.00218v2.pdf +7483 -12
  37. package/contextual_research/PDE-generalization--caefee82-efb1-4dbb-8733-691b01581464--260130/sources/2505.00212v3.md +1755 -0
  38. package/contextual_research/PDE-generalization--caefee82-efb1-4dbb-8733-691b01581464--260130/sources/2505.00212v3.pdf +0 -0
  39. package/contextual_research/PDE-generalization--caefee82-efb1-4dbb-8733-691b01581464--260130/sources/footnote_1_12_decomposed_prompting.pdf +0 -0
  40. package/contextual_research/PDE-generalization--caefee82-efb1-4dbb-8733-691b01581464--260130/sources/footnote_1_19_hugginggpt_planning.pdf +0 -0
  41. package/contextual_research/PDE-generalization--caefee82-efb1-4dbb-8733-691b01581464--260130/sources/footnote_1_1_coordination_challenges.md +766 -0
  42. package/contextual_research/PDE-generalization--caefee82-efb1-4dbb-8733-691b01581464--260130/sources/footnote_1_1_coordination_challenges.pdf +3431 -4
  43. package/contextual_research/PDE-generalization--caefee82-efb1-4dbb-8733-691b01581464--260130/sources/footnote_1_28_guardrails_multi_agent.md +260 -0
  44. package/contextual_research/PDE-generalization--caefee82-efb1-4dbb-8733-691b01581464--260130/sources/footnote_1_28_guardrails_multi_agent.pdf +0 -0
  45. package/contextual_research/PDE-generalization--caefee82-efb1-4dbb-8733-691b01581464--260130/sources/footnote_1_2_navigating_complexity.md +558 -0
  46. package/contextual_research/PDE-generalization--caefee82-efb1-4dbb-8733-691b01581464--260130/sources/footnote_1_2_navigating_complexity.pdf +0 -0
  47. package/contextual_research/PDE-generalization--caefee82-efb1-4dbb-8733-691b01581464--260130/sources/footnote_1_34_hierarchical_multi_agent.pdf +0 -0
  48. package/contextual_research/PDE-generalization--caefee82-efb1-4dbb-8733-691b01581464--260130/sources/footnote_1_5_open_intent_extraction.pdf +0 -0
  49. package/contextual_research/PODCAST.md +109 -0
  50. package/contextual_research/langchain-principles-roadmap.md +157 -0
  51. package/contextual_research/persona-to-narrative-character-inquiry_260201.md +50 -0
  52. package/dist/cli.js +35 -11
  53. package/dist/geminiHeadless.js +8 -2
  54. package/dist/index.js +2 -1
  55. package/dist/mcp/miaco-server.js +10 -1
  56. package/dist/mcp/miatel-server.js +10 -1
  57. package/dist/mcp/miawa-server.js +10 -1
  58. package/dist/mcp/utils.d.ts +6 -1
  59. package/dist/mcp/utils.js +24 -3
  60. package/dist/sessionStore.d.ts +8 -2
  61. package/dist/sessionStore.js +39 -3
  62. package/dist/types.d.ts +1 -0
  63. package/miaco/README.md +124 -0
  64. package/miaco/dist/commands/chart.d.ts +6 -0
  65. package/miaco/dist/commands/chart.d.ts.map +1 -0
  66. package/miaco/dist/commands/chart.js +222 -0
  67. package/miaco/dist/commands/chart.js.map +1 -0
  68. package/miaco/dist/commands/decompose.d.ts +6 -0
  69. package/miaco/dist/commands/decompose.d.ts.map +1 -0
  70. package/miaco/dist/commands/decompose.js +98 -0
  71. package/miaco/dist/commands/decompose.js.map +1 -0
  72. package/miaco/dist/commands/schema.d.ts +6 -0
  73. package/miaco/dist/commands/schema.d.ts.map +1 -0
  74. package/miaco/dist/commands/schema.js +66 -0
  75. package/miaco/dist/commands/schema.js.map +1 -0
  76. package/miaco/dist/commands/stc.d.ts +11 -0
  77. package/miaco/dist/commands/stc.d.ts.map +1 -0
  78. package/miaco/dist/commands/stc.js +590 -0
  79. package/miaco/dist/commands/stc.js.map +1 -0
  80. package/miaco/dist/commands/trace.d.ts +6 -0
  81. package/miaco/dist/commands/trace.d.ts.map +1 -0
  82. package/miaco/dist/commands/trace.js +83 -0
  83. package/miaco/dist/commands/trace.js.map +1 -0
  84. package/miaco/dist/commands/validate.d.ts +6 -0
  85. package/miaco/dist/commands/validate.d.ts.map +1 -0
  86. package/miaco/dist/commands/validate.js +58 -0
  87. package/miaco/dist/commands/validate.js.map +1 -0
  88. package/miaco/dist/decompose.d.ts +93 -0
  89. package/miaco/dist/decompose.d.ts.map +1 -0
  90. package/miaco/dist/decompose.js +562 -0
  91. package/miaco/dist/decompose.js.map +1 -0
  92. package/miaco/dist/index.d.ts +18 -0
  93. package/miaco/dist/index.d.ts.map +1 -0
  94. package/miaco/dist/index.js +83 -0
  95. package/miaco/dist/index.js.map +1 -0
  96. package/miaco/dist/storage.d.ts +60 -0
  97. package/miaco/dist/storage.d.ts.map +1 -0
  98. package/miaco/dist/storage.js +100 -0
  99. package/miaco/dist/storage.js.map +1 -0
  100. package/miaco/package-lock.json +4103 -0
  101. package/miaco/package.json +40 -0
  102. package/miaco/tsconfig.json +18 -0
  103. package/miaco/version-patch-commit-and-publish.sh +1 -0
  104. package/miatel/MISSION_251231.md +3 -0
  105. package/miatel/README.md +107 -0
  106. package/miatel/dist/commands/analyze.d.ts +6 -0
  107. package/miatel/dist/commands/analyze.d.ts.map +1 -0
  108. package/miatel/dist/commands/analyze.js +100 -0
  109. package/miatel/dist/commands/analyze.js.map +1 -0
  110. package/miatel/dist/commands/arc.d.ts +6 -0
  111. package/miatel/dist/commands/arc.d.ts.map +1 -0
  112. package/miatel/dist/commands/arc.js +71 -0
  113. package/miatel/dist/commands/arc.js.map +1 -0
  114. package/miatel/dist/commands/beat.d.ts +6 -0
  115. package/miatel/dist/commands/beat.d.ts.map +1 -0
  116. package/miatel/dist/commands/beat.js +165 -0
  117. package/miatel/dist/commands/beat.js.map +1 -0
  118. package/miatel/dist/commands/theme.d.ts +6 -0
  119. package/miatel/dist/commands/theme.d.ts.map +1 -0
  120. package/miatel/dist/commands/theme.js +54 -0
  121. package/miatel/dist/commands/theme.js.map +1 -0
  122. package/miatel/dist/index.d.ts +18 -0
  123. package/miatel/dist/index.d.ts.map +1 -0
  124. package/miatel/dist/index.js +80 -0
  125. package/miatel/dist/index.js.map +1 -0
  126. package/miatel/dist/storage.d.ts +55 -0
  127. package/miatel/dist/storage.d.ts.map +1 -0
  128. package/miatel/dist/storage.js +100 -0
  129. package/miatel/dist/storage.js.map +1 -0
  130. package/miatel/package-lock.json +4103 -0
  131. package/miatel/package.json +35 -0
  132. package/miatel/src/commands/analyze.ts +109 -0
  133. package/miatel/src/commands/arc.ts +78 -0
  134. package/miatel/src/commands/beat.ts +176 -0
  135. package/miatel/src/commands/theme.ts +60 -0
  136. package/miatel/src/index.ts +94 -0
  137. package/miatel/src/storage.ts +156 -0
  138. package/miatel/tsconfig.json +18 -0
  139. package/miawa/MISSION_251231.md +144 -0
  140. package/miawa/README.md +133 -0
  141. package/miawa/dist/commands/beat.d.ts +6 -0
  142. package/miawa/dist/commands/beat.d.ts.map +1 -0
  143. package/miawa/dist/commands/beat.js +69 -0
  144. package/miawa/dist/commands/beat.js.map +1 -0
  145. package/miawa/dist/commands/ceremony.d.ts +6 -0
  146. package/miawa/dist/commands/ceremony.d.ts.map +1 -0
  147. package/miawa/dist/commands/ceremony.js +239 -0
  148. package/miawa/dist/commands/ceremony.js.map +1 -0
  149. package/miawa/dist/commands/circle.d.ts +6 -0
  150. package/miawa/dist/commands/circle.d.ts.map +1 -0
  151. package/miawa/dist/commands/circle.js +75 -0
  152. package/miawa/dist/commands/circle.js.map +1 -0
  153. package/miawa/dist/commands/eva.d.ts +6 -0
  154. package/miawa/dist/commands/eva.d.ts.map +1 -0
  155. package/miawa/dist/commands/eva.js +73 -0
  156. package/miawa/dist/commands/eva.js.map +1 -0
  157. package/miawa/dist/commands/wound.d.ts +6 -0
  158. package/miawa/dist/commands/wound.d.ts.map +1 -0
  159. package/miawa/dist/commands/wound.js +74 -0
  160. package/miawa/dist/commands/wound.js.map +1 -0
  161. package/miawa/dist/index.d.ts +19 -0
  162. package/miawa/dist/index.d.ts.map +1 -0
  163. package/miawa/dist/index.js +91 -0
  164. package/miawa/dist/index.js.map +1 -0
  165. package/miawa/dist/storage.d.ts +73 -0
  166. package/miawa/dist/storage.d.ts.map +1 -0
  167. package/miawa/dist/storage.js +100 -0
  168. package/miawa/dist/storage.js.map +1 -0
  169. package/miawa/package-lock.json +4103 -0
  170. package/miawa/package.json +36 -0
  171. package/miawa/src/commands/beat.ts +74 -0
  172. package/miawa/src/commands/ceremony.ts +256 -0
  173. package/miawa/src/commands/circle.ts +83 -0
  174. package/miawa/src/commands/eva.ts +84 -0
  175. package/miawa/src/commands/wound.ts +79 -0
  176. package/miawa/src/index.ts +108 -0
  177. package/miawa/src/storage.ts +179 -0
  178. package/miawa/tsconfig.json +18 -0
  179. package/package.json +7 -5
  180. package/references/acp/CLAUDE.md +7 -0
  181. package/references/acp/agent-plan.md +84 -0
  182. package/references/acp/clients.md +31 -0
  183. package/references/acp/extensibility.md +137 -0
  184. package/references/acp/initialization.md +225 -0
  185. package/references/acp/prompt-turn.md +321 -0
  186. package/references/acp/proxy-chains.md +562 -0
  187. package/references/acp/schema.md +3171 -0
  188. package/references/acp/session-list.md +334 -0
  189. package/references/acp/session-modes.md +170 -0
  190. package/references/acp/slash-commands.md +99 -0
  191. package/references/acp/terminals.md +281 -0
  192. package/references/acp/tool-calls.md +311 -0
  193. package/references/acp/typescript.md +29 -0
  194. package/references/claude/agent-teams.md +399 -0
  195. package/references/claude/chrome.md +231 -0
  196. package/references/claude/headless.md +158 -0
  197. package/references/claude/hooks-guide.md +708 -0
  198. package/references/claude/output-styles.md +112 -0
  199. package/references/claude/plugins.md +432 -0
  200. package/references/claude/skills.md +693 -0
  201. package/references/claude/sub-agents.md +816 -0
  202. package/references/copilot/acp/agents.md +32 -0
  203. package/references/copilot/acp/architecture.md +37 -0
  204. package/references/copilot/acp/clients.md +31 -0
  205. package/references/copilot/acp/introduction.md +42 -0
  206. package/references/copilot/acp/registry.md +339 -0
  207. package/references/copilot/acp-server.md +117 -0
  208. package/references/copilot/create-copilot-instructions.md +840 -0
  209. package/references/langchain/llms.txt +833 -0
  210. package/references/langchain/python/agents.md +677 -0
  211. package/references/langchain/python/context-engineering.md +1195 -0
  212. package/references/langchain/python/human-in-the-loop.md +326 -0
  213. package/references/langchain/python/long-term-memory.md +168 -0
  214. package/references/langchain/python/mcp.md +949 -0
  215. package/references/langchain/python/multi-agents/custom-workflow.md +187 -0
  216. package/references/langchain/python/multi-agents/handoffs.md +436 -0
  217. package/references/langchain/python/multi-agents/overview.md +295 -0
  218. package/references/langchain/python/multi-agents/router.md +150 -0
  219. package/references/langchain/python/multi-agents/skills.md +92 -0
  220. package/references/langchain/python/multi-agents/subagents.md +486 -0
  221. package/references/langchain/python/retrieval.md +320 -0
  222. package/references/langchain/python/runtime.md +141 -0
  223. package/references/langchain/python/short-term-memory.md +658 -0
  224. package/references/langchain/python/structured-output.md +712 -0
  225. package/references/langfuse/llms.txt +148 -0
  226. package/references/langgraph/javascript/llms.txt +275 -0
  227. package/references/skills/home.md +259 -0
  228. package/references/skills/integrate-skills.md +103 -0
  229. package/references/skills/specification.md +254 -0
  230. package/references/skills/what-are-skills.md +74 -0
  231. package/rispecs/README.md +164 -0
  232. package/rispecs/_sync_/miadi-code/SPEC.md +313 -0
  233. package/rispecs/_sync_/miadi-code/STATUS.md +177 -0
  234. package/rispecs/_sync_/miadi-code/dashboard/SPEC.md +465 -0
  235. package/rispecs/_sync_/miadi-code/dashboard/STATUS.md +212 -0
  236. package/rispecs/_sync_/miadi-code/multiline-input/SPEC.md +232 -0
  237. package/rispecs/_sync_/miadi-code/multiline-input/STATUS.md +108 -0
  238. package/rispecs/_sync_/miadi-code/pde/SPEC.md +253 -0
  239. package/rispecs/_sync_/miadi-code/pde/STATUS.md +56 -0
  240. package/rispecs/_sync_/miadi-code/stc/SPEC.md +397 -0
  241. package/rispecs/_sync_/miadi-code/stc/STATUS.md +70 -0
  242. package/rispecs/ava-langstack/inquiry-routing-upgrade.spec.md +119 -0
  243. package/rispecs/borrowed_from_opencode/001-client-server-architecture.rispec.md +98 -0
  244. package/rispecs/borrowed_from_opencode/002-event-bus-system.rispec.md +125 -0
  245. package/rispecs/borrowed_from_opencode/003-instance-state-pattern.rispec.md +136 -0
  246. package/rispecs/borrowed_from_opencode/004-namespace-module-pattern.rispec.md +151 -0
  247. package/rispecs/borrowed_from_opencode/005-zod-schema-validation.rispec.md +139 -0
  248. package/rispecs/borrowed_from_opencode/006-named-error-system.rispec.md +155 -0
  249. package/rispecs/borrowed_from_opencode/007-structured-logging.rispec.md +138 -0
  250. package/rispecs/borrowed_from_opencode/008-lazy-initialization.rispec.md +127 -0
  251. package/rispecs/borrowed_from_opencode/009-multi-agent-system.rispec.md +97 -0
  252. package/rispecs/borrowed_from_opencode/010-agent-definition-config.rispec.md +135 -0
  253. package/rispecs/borrowed_from_opencode/011-agent-permission-rulesets.rispec.md +151 -0
  254. package/rispecs/borrowed_from_opencode/012-agent-prompt-templates.rispec.md +141 -0
  255. package/rispecs/borrowed_from_opencode/013-agent-generation.rispec.md +142 -0
  256. package/rispecs/borrowed_from_opencode/014-plan-build-mode-toggle.rispec.md +155 -0
  257. package/rispecs/borrowed_from_opencode/015-subagent-task-delegation.rispec.md +146 -0
  258. package/rispecs/borrowed_from_opencode/016-agent-model-selection.rispec.md +151 -0
  259. package/rispecs/borrowed_from_opencode/017-compaction-agent.rispec.md +150 -0
  260. package/rispecs/borrowed_from_opencode/018-session-persistence.rispec.md +125 -0
  261. package/rispecs/borrowed_from_opencode/019-session-compaction.rispec.md +132 -0
  262. package/rispecs/borrowed_from_opencode/020-session-forking.rispec.md +134 -0
  263. package/rispecs/borrowed_from_opencode/021-session-revert-snapshot.rispec.md +135 -0
  264. package/rispecs/borrowed_from_opencode/022-session-sharing.rispec.md +165 -0
  265. package/rispecs/borrowed_from_opencode/023-session-summary-diffs.rispec.md +165 -0
  266. package/rispecs/borrowed_from_opencode/024-child-sessions.rispec.md +164 -0
  267. package/rispecs/borrowed_from_opencode/025-session-title-generation.rispec.md +162 -0
  268. package/rispecs/borrowed_from_opencode/026-message-parts-model.rispec.md +201 -0
  269. package/rispecs/borrowed_from_opencode/027-streaming-message-deltas.rispec.md +212 -0
  270. package/rispecs/borrowed_from_opencode/028-multi-provider-architecture.rispec.md +184 -0
  271. package/rispecs/borrowed_from_opencode/029-provider-authentication.rispec.md +225 -0
  272. package/rispecs/borrowed_from_opencode/030-model-registry.rispec.md +222 -0
  273. package/rispecs/borrowed_from_opencode/031-cost-tracking.rispec.md +243 -0
  274. package/rispecs/borrowed_from_opencode/032-provider-transform-pipeline.rispec.md +282 -0
  275. package/rispecs/borrowed_from_opencode/033-provider-sdk-abstraction.rispec.md +338 -0
  276. package/rispecs/borrowed_from_opencode/034-tool-registry.rispec.md +110 -0
  277. package/rispecs/borrowed_from_opencode/035-tool-context-injection.rispec.md +155 -0
  278. package/rispecs/borrowed_from_opencode/036-tool-output-truncation.rispec.md +138 -0
  279. package/rispecs/borrowed_from_opencode/037-batch-tool.rispec.md +129 -0
  280. package/rispecs/borrowed_from_opencode/038-multi-edit-tool.rispec.md +167 -0
  281. package/rispecs/borrowed_from_opencode/039-apply-patch-tool.rispec.md +161 -0
  282. package/rispecs/borrowed_from_opencode/040-code-search-tool.rispec.md +143 -0
  283. package/rispecs/borrowed_from_opencode/041-web-fetch-tool.rispec.md +131 -0
  284. package/rispecs/borrowed_from_opencode/042-web-search-tool.rispec.md +159 -0
  285. package/rispecs/borrowed_from_opencode/043-todo-tool.rispec.md +156 -0
  286. package/rispecs/borrowed_from_opencode/044-plan-mode-tool.rispec.md +139 -0
  287. package/rispecs/borrowed_from_opencode/045-task-tool.rispec.md +146 -0
  288. package/rispecs/borrowed_from_opencode/046-question-tool.rispec.md +170 -0
  289. package/rispecs/borrowed_from_opencode/047-external-directory-tool.rispec.md +166 -0
  290. package/rispecs/borrowed_from_opencode/048-file-read-write-tools.rispec.md +205 -0
  291. package/rispecs/borrowed_from_opencode/049-lsp-server-management.rispec.md +104 -0
  292. package/rispecs/borrowed_from_opencode/050-lsp-hover-completion.rispec.md +102 -0
  293. package/rispecs/borrowed_from_opencode/051-lsp-diagnostics.rispec.md +86 -0
  294. package/rispecs/borrowed_from_opencode/052-lsp-root-detection.rispec.md +109 -0
  295. package/rispecs/borrowed_from_opencode/053-remote-mcp-servers.rispec.md +119 -0
  296. package/rispecs/borrowed_from_opencode/054-mcp-oauth-flow.rispec.md +107 -0
  297. package/rispecs/borrowed_from_opencode/055-mcp-tool-conversion.rispec.md +118 -0
  298. package/rispecs/borrowed_from_opencode/056-mcp-connection-monitoring.rispec.md +106 -0
  299. package/rispecs/borrowed_from_opencode/057-local-mcp-servers.rispec.md +116 -0
  300. package/rispecs/borrowed_from_opencode/058-rich-tui.rispec.md +108 -0
  301. package/rispecs/borrowed_from_opencode/059-streaming-display.rispec.md +116 -0
  302. package/rispecs/borrowed_from_opencode/060-permission-prompts.rispec.md +130 -0
  303. package/rispecs/borrowed_from_opencode/061-session-navigation.rispec.md +155 -0
  304. package/rispecs/borrowed_from_opencode/062-syntax-highlighting.rispec.md +151 -0
  305. package/rispecs/borrowed_from_opencode/063-keybinding-system.rispec.md +181 -0
  306. package/rispecs/borrowed_from_opencode/064-multi-level-config.rispec.md +155 -0
  307. package/rispecs/borrowed_from_opencode/065-jsonc-config.rispec.md +190 -0
  308. package/rispecs/borrowed_from_opencode/066-config-env-variables.rispec.md +153 -0
  309. package/rispecs/borrowed_from_opencode/067-config-deep-merging.rispec.md +178 -0
  310. package/rispecs/borrowed_from_opencode/068-remote-org-config.rispec.md +183 -0
  311. package/rispecs/borrowed_from_opencode/069-config-markdown-frontmatter.rispec.md +206 -0
  312. package/rispecs/borrowed_from_opencode/070-managed-config-directory.rispec.md +232 -0
  313. package/rispecs/borrowed_from_opencode/071-plugin-architecture.rispec.md +104 -0
  314. package/rispecs/borrowed_from_opencode/072-plugin-hooks.rispec.md +123 -0
  315. package/rispecs/borrowed_from_opencode/073-plugin-auto-install.rispec.md +115 -0
  316. package/rispecs/borrowed_from_opencode/074-permission-system.rispec.md +133 -0
  317. package/rispecs/borrowed_from_opencode/075-git-worktree-management.rispec.md +126 -0
  318. package/rispecs/borrowed_from_opencode/076-snapshot-system.rispec.md +124 -0
  319. package/rispecs/borrowed_from_opencode/077-snapshot-diff.rispec.md +117 -0
  320. package/rispecs/borrowed_from_opencode/078-snapshot-restore.rispec.md +128 -0
  321. package/rispecs/borrowed_from_opencode/079-worktree-branch-naming.rispec.md +122 -0
  322. package/rispecs/borrowed_from_opencode/080-sqlite-storage.rispec.md +134 -0
  323. package/rispecs/borrowed_from_opencode/081-database-migrations.rispec.md +148 -0
  324. package/rispecs/borrowed_from_opencode/082-database-transactions.rispec.md +138 -0
  325. package/rispecs/borrowed_from_opencode/083-deferred-effects.rispec.md +148 -0
  326. package/rispecs/borrowed_from_opencode/084-permission-rules.rispec.md +123 -0
  327. package/rispecs/borrowed_from_opencode/085-permission-glob-patterns.rispec.md +113 -0
  328. package/rispecs/borrowed_from_opencode/086-permission-merging.rispec.md +134 -0
  329. package/rispecs/borrowed_from_opencode/087-permission-modes.rispec.md +145 -0
  330. package/rispecs/borrowed_from_opencode/088-http-api-server.rispec.md +165 -0
  331. package/rispecs/borrowed_from_opencode/089-openapi-spec-generation.rispec.md +164 -0
  332. package/rispecs/borrowed_from_opencode/090-websocket-support.rispec.md +136 -0
  333. package/rispecs/borrowed_from_opencode/091-sse-streaming.rispec.md +168 -0
  334. package/rispecs/borrowed_from_opencode/092-mdns-discovery.rispec.md +145 -0
  335. package/rispecs/borrowed_from_opencode/093-javascript-sdk.rispec.md +200 -0
  336. package/rispecs/borrowed_from_opencode/094-skill-system.rispec.md +187 -0
  337. package/rispecs/borrowed_from_opencode/095-skill-discovery.rispec.md +182 -0
  338. package/rispecs/borrowed_from_opencode/096-desktop-remote-driving.rispec.md +175 -0
  339. package/rispecs/borrowed_from_opencode/INDEX.md +255 -0
  340. package/rispecs/core.rispecs.md +261 -0
  341. package/rispecs/engines.rispecs.md +241 -0
  342. package/rispecs/formatting.rispecs.md +252 -0
  343. package/rispecs/living-specifications.rispecs.md +361 -0
  344. package/rispecs/mcp.rispecs.md +197 -0
  345. package/rispecs/pde.rispecs.md +399 -0
  346. package/rispecs/pi-mono-envisionning/ENVISIONING.md +366 -0
  347. package/rispecs/pi-mono-envisionning/storytelling-horizon.rispecs.md +76 -0
  348. package/rispecs/pi-mono-envisionning/widget.rispecs.md +2 -0
  349. package/rispecs/relation-to-mcp-structural-thinking.kin.md +72 -0
  350. package/rispecs/research-for-better-framework/CLAUDE.md +7 -0
  351. package/rispecs/research-for-better-framework/survey-pi-openclaw-opencode-openhands.md +210 -0
  352. package/rispecs/session.rispecs.md +277 -0
  353. package/rispecs/stc.rispecs.md +138 -0
  354. package/rispecs/unifier.rispecs.md +317 -0
  355. package/scripts/LAUNCH--mcp-mia-code--testing--2603141315--ac705a66-2c15-4a1c-a26d-9491018c5ba8.sh +2 -0
  356. package/scripts/RESUME--mia-code--mcps--260313--ac705a66-2c15-4a1c-a26d-9491018c5ba8.sh +1 -0
  357. package/scripts/install-widget-in-home-pi-agent-extensions.sh +4 -0
  358. package/scripts/sample-decompose--2604011535-prompt.sh +1 -0
  359. package/skills/deep-search/AGENTS.md +17 -0
  360. package/skills/deep-search/SKILL.md +281 -0
  361. package/skills/deep-search/agent-templates.md +224 -0
  362. package/skills/deep-search/orchestration-patterns.md +95 -0
  363. package/skills/miaco-pde-inquiry-routing-deep-search/AGENTS.md +13 -0
  364. package/skills/miaco-pde-inquiry-routing-deep-search/SKILL.md +136 -0
  365. package/skills/miaco-pde-inquiry-routing-internal-external-relationship/AGENTS.md +4 -0
  366. package/skills/miaco-pde-inquiry-routing-internal-external-relationship/SKILL.md +157 -0
  367. package/skills/miaco-pde-inquiry-routing-local-qmd/AGENTS.md +42 -0
  368. package/skills/miaco-pde-inquiry-routing-local-qmd/SKILL.md +135 -0
  369. package/skills/qmd/AGENTS.md +3 -0
  370. package/skills/qmd/SKILL.md +144 -0
  371. package/skills/qmd/references/mcp-setup.md +102 -0
  372. package/skills/rise-pde-inquiry-session-multi-agents-v3/SKILL.md +234 -0
  373. package/skills/rise-pde-inquiry-session-multi-agents-v3/agent-templates.md +436 -0
  374. package/skills/rise-pde-inquiry-session-multi-agents-v3/orchestration-patterns.md +197 -0
  375. package/skills/rise-pde-inquiry-session-multi-agents-v3/references/ceremonial-technology.md +102 -0
  376. package/skills/rise-pde-inquiry-session-multi-agents-v3/references/creative-orientation.md +99 -0
  377. package/skills/rise-pde-inquiry-session-multi-agents-v3/references/prompt-decomposition.md +73 -0
  378. package/skills/rise-pde-inquiry-session-multi-agents-v3/references/rise-framework.md +74 -0
  379. package/skills/rise-pde-inquiry-session-multi-agents-v3/references/structural-tension.md +82 -0
  380. package/src/cli.ts +35 -11
  381. package/src/geminiHeadless.ts +7 -2
  382. package/src/index.ts +2 -1
  383. package/src/mcp/miaco-server.ts +13 -1
  384. package/src/mcp/miatel-server.ts +13 -1
  385. package/src/mcp/miawa-server.ts +13 -1
  386. package/src/mcp/utils.ts +41 -8
  387. package/src/sessionStore.ts +44 -4
  388. package/src/types.ts +2 -1
  389. package/widget/mia-ceremony/README.md +36 -0
  390. package/widget/mia-ceremony/index.ts +143 -0
  391. package/widget/mia-interceptor/README.md +39 -0
  392. package/widget/mia-interceptor/index.ts +221 -0
  393. package/widget/mia-tools/README.md +37 -0
  394. package/widget/mia-tools/index.ts +569 -0
  395. package/widget/miette-echo/README.md +44 -0
  396. package/widget/miette-echo/index.ts +164 -0
  397. package/.claude/settings.local.json +0 -9
  398. package/.hch/issue_.env +0 -4
  399. package/.hch/issue_add__2601211715.json +0 -77
  400. package/.hch/issue_add__2601211715.md +0 -4
  401. package/.hch/issue_add__2602242020.json +0 -78
  402. package/.hch/issue_add__2602242020.md +0 -7
  403. package/.hch/issues.json +0 -2312
  404. package/.hch/issues.md +0 -30
  405. package/WS__mia-code__260214__IAIP_PDE.code-workspace +0 -29
  406. package/WS__mia-code__src332__260122.code-workspace +0 -23
  407. package/samples/copilot/session-state/be76abaa-a27f-4725-b2a9-22fb45f7e0f7/checkpoints/index.md +0 -6
  408. package/samples/copilot/session-state/be76abaa-a27f-4725-b2a9-22fb45f7e0f7/events.jsonl +0 -213
  409. package/samples/copilot/session-state/be76abaa-a27f-4725-b2a9-22fb45f7e0f7/plan.md +0 -243
  410. package/samples/copilot/session-state/be76abaa-a27f-4725-b2a9-22fb45f7e0f7/workspace.yaml +0 -5
@@ -0,0 +1,712 @@
1
+ > ## Documentation Index
2
+ > Fetch the complete documentation index at: https://docs.langchain.com/llms.txt
3
+ > Use this file to discover all available pages before exploring further.
4
+
5
+ # Structured output
6
+
7
+ Structured output allows agents to return data in a specific, predictable format. Instead of parsing natural language responses, you get structured data in the form of JSON objects, [Pydantic models](https://docs.pydantic.dev/latest/concepts/models/#basic-model-usage), or dataclasses that your application can use directly.
8
+
9
+ LangChain's [`create_agent`](https://reference.langchain.com/python/langchain/agents/#langchain.agents.create_agent) handles structured output automatically. The user sets their desired structured output schema, and when the model generates the structured data, it's captured, validated, and returned in the `'structured_response'` key of the agent's state.
10
+
11
+ ```python theme={null}
12
+ def create_agent(
13
+ ...
14
+ response_format: Union[
15
+ ToolStrategy[StructuredResponseT],
16
+ ProviderStrategy[StructuredResponseT],
17
+ type[StructuredResponseT],
18
+ None,
19
+ ]
20
+ ```
21
+
22
+ ## Response format
23
+
24
+ Use `response_format` to control how the agent returns structured data:
25
+
26
+ * **`ToolStrategy[StructuredResponseT]`**: Uses tool calling for structured output
27
+ * **`ProviderStrategy[StructuredResponseT]`**: Uses provider-native structured output
28
+ * **`type[StructuredResponseT]`**: Schema type - automatically selects best strategy based on model capabilities
29
+ * **`None`**: Structured output not explicitly requested
30
+
31
+ When a schema type is provided directly, LangChain automatically chooses:
32
+
33
+ * `ProviderStrategy` if the model and provider chosen supports native structured output (e.g. [OpenAI](/oss/python/integrations/providers/openai), [Anthropic (Claude)](/oss/python/integrations/providers/anthropic), or [xAI (Grok)](/oss/python/integrations/providers/xai)).
34
+ * `ToolStrategy` for all other models.
35
+
36
+ <Note>
37
+ Support for native structured output features is read dynamically from the model's [profile data](/oss/python/langchain/models#model-profiles) if using `langchain>=1.1`. If data are not available, use another condition or specify manually:
38
+
39
+ ```python theme={null}
40
+ custom_profile = {
41
+ "structured_output": True,
42
+ # ...
43
+ }
44
+ model = init_chat_model("...", profile=custom_profile)
45
+ ```
46
+
47
+ If tools are specified, the model must support simultaneous use of tools and structured output.
48
+ </Note>
49
+
50
+ The structured response is returned in the `structured_response` key of the agent's final state.
51
+
52
+ ## Provider strategy
53
+
54
+ Some model providers support structured output natively through their APIs (e.g. OpenAI, xAI (Grok), Gemini, Anthropic (Claude)). This is the most reliable method when available.
55
+
56
+ To use this strategy, configure a `ProviderStrategy`:
57
+
58
+ ```python theme={null}
59
+ class ProviderStrategy(Generic[SchemaT]):
60
+ schema: type[SchemaT]
61
+ strict: bool | None = None
62
+ ```
63
+
64
+ <Info>
65
+ The `strict` param requires `langchain>=1.2`.
66
+ </Info>
67
+
68
+ <ParamField path="schema" required>
69
+ The schema defining the structured output format. Supports:
70
+
71
+ * **Pydantic models**: `BaseModel` subclasses with field validation. Returns validated Pydantic instance.
72
+ * **Dataclasses**: Python dataclasses with type annotations. Returns dict.
73
+ * **TypedDict**: Typed dictionary classes. Returns dict.
74
+ * **JSON Schema**: Dictionary with JSON schema specification. Returns dict.
75
+ </ParamField>
76
+
77
+ <ParamField path="strict">
78
+ Optional boolean parameter to enable strict schema adherence. Supported by some providers (e.g., [OpenAI](/oss/python/integrations/chat/openai) and [xAI](/oss/python/integrations/chat/xai)). Defaults to `None` (disabled).
79
+ </ParamField>
80
+
81
+ LangChain automatically uses `ProviderStrategy` when you pass a schema type directly to [`create_agent.response_format`](https://reference.langchain.com/python/langchain/agents/#langchain.agents.create_agent\(response_format\)) and the model supports native structured output:
82
+
83
+ <CodeGroup>
84
+ ```python Pydantic Model theme={null}
85
+ from pydantic import BaseModel, Field
86
+ from langchain.agents import create_agent
87
+
88
+
89
+ class ContactInfo(BaseModel):
90
+ """Contact information for a person."""
91
+ name: str = Field(description="The name of the person")
92
+ email: str = Field(description="The email address of the person")
93
+ phone: str = Field(description="The phone number of the person")
94
+
95
+ agent = create_agent(
96
+ model="gpt-5",
97
+ response_format=ContactInfo # Auto-selects ProviderStrategy
98
+ )
99
+
100
+ result = agent.invoke({
101
+ "messages": [{"role": "user", "content": "Extract contact info from: John Doe, john@example.com, (555) 123-4567"}]
102
+ })
103
+
104
+ print(result["structured_response"])
105
+ # ContactInfo(name='John Doe', email='john@example.com', phone='(555) 123-4567')
106
+ ```
107
+
108
+ ```python Dataclass theme={null}
109
+ from dataclasses import dataclass
110
+ from langchain.agents import create_agent
111
+
112
+
113
+ @dataclass
114
+ class ContactInfo:
115
+ """Contact information for a person."""
116
+ name: str # The name of the person
117
+ email: str # The email address of the person
118
+ phone: str # The phone number of the person
119
+
120
+ agent = create_agent(
121
+ model="gpt-5",
122
+ tools=tools,
123
+ response_format=ContactInfo # Auto-selects ProviderStrategy
124
+ )
125
+
126
+ result = agent.invoke({
127
+ "messages": [{"role": "user", "content": "Extract contact info from: John Doe, john@example.com, (555) 123-4567"}]
128
+ })
129
+
130
+ result["structured_response"]
131
+ # {'name': 'John Doe', 'email': 'john@example.com', 'phone': '(555) 123-4567'}
132
+ ```
133
+
134
+ ```python TypedDict theme={null}
135
+ from typing_extensions import TypedDict
136
+ from langchain.agents import create_agent
137
+
138
+
139
+ class ContactInfo(TypedDict):
140
+ """Contact information for a person."""
141
+ name: str # The name of the person
142
+ email: str # The email address of the person
143
+ phone: str # The phone number of the person
144
+
145
+ agent = create_agent(
146
+ model="gpt-5",
147
+ tools=tools,
148
+ response_format=ContactInfo # Auto-selects ProviderStrategy
149
+ )
150
+
151
+ result = agent.invoke({
152
+ "messages": [{"role": "user", "content": "Extract contact info from: John Doe, john@example.com, (555) 123-4567"}]
153
+ })
154
+
155
+ result["structured_response"]
156
+ # {'name': 'John Doe', 'email': 'john@example.com', 'phone': '(555) 123-4567'}
157
+ ```
158
+
159
+ ```python JSON Schema theme={null}
160
+ from langchain.agents import create_agent
161
+
162
+
163
+ contact_info_schema = {
164
+ "type": "object",
165
+ "description": "Contact information for a person.",
166
+ "properties": {
167
+ "name": {"type": "string", "description": "The name of the person"},
168
+ "email": {"type": "string", "description": "The email address of the person"},
169
+ "phone": {"type": "string", "description": "The phone number of the person"}
170
+ },
171
+ "required": ["name", "email", "phone"]
172
+ }
173
+
174
+ agent = create_agent(
175
+ model="gpt-5",
176
+ tools=tools,
177
+ response_format=ProviderStrategy(contact_info_schema)
178
+ )
179
+
180
+ result = agent.invoke({
181
+ "messages": [{"role": "user", "content": "Extract contact info from: John Doe, john@example.com, (555) 123-4567"}]
182
+ })
183
+
184
+ result["structured_response"]
185
+ # {'name': 'John Doe', 'email': 'john@example.com', 'phone': '(555) 123-4567'}
186
+ ```
187
+ </CodeGroup>
188
+
189
+ Provider-native structured output provides high reliability and strict validation because the model provider enforces the schema. Use it when available.
190
+
191
+ <Note>
192
+ If the provider natively supports structured output for your model choice, it is functionally equivalent to write `response_format=ProductReview` instead of `response_format=ProviderStrategy(ProductReview)`.
193
+
194
+ In either case, if structured output is not supported, the agent will fall back to a tool calling strategy.
195
+ </Note>
196
+
197
+ ## Tool calling strategy
198
+
199
+ For models that don't support native structured output, LangChain uses tool calling to achieve the same result. This works with all models that support tool calling (most modern models).
200
+
201
+ To use this strategy, configure a `ToolStrategy`:
202
+
203
+ ```python theme={null}
204
+ class ToolStrategy(Generic[SchemaT]):
205
+ schema: type[SchemaT]
206
+ tool_message_content: str | None
207
+ handle_errors: Union[
208
+ bool,
209
+ str,
210
+ type[Exception],
211
+ tuple[type[Exception], ...],
212
+ Callable[[Exception], str],
213
+ ]
214
+ ```
215
+
216
+ <ParamField path="schema" required>
217
+ The schema defining the structured output format. Supports:
218
+
219
+ * **Pydantic models**: `BaseModel` subclasses with field validation. Returns validated Pydantic instance.
220
+ * **Dataclasses**: Python dataclasses with type annotations. Returns dict.
221
+ * **TypedDict**: Typed dictionary classes. Returns dict.
222
+ * **JSON Schema**: Dictionary with JSON schema specification. Returns dict.
223
+ * **Union types**: Multiple schema options. The model will choose the most appropriate schema based on the context.
224
+ </ParamField>
225
+
226
+ <ParamField path="tool_message_content">
227
+ Custom content for the tool message returned when structured output is generated.
228
+ If not provided, defaults to a message showing the structured response data.
229
+ </ParamField>
230
+
231
+ <ParamField path="handle_errors">
232
+ Error handling strategy for structured output validation failures. Defaults to `True`.
233
+
234
+ * **`True`**: Catch all errors with default error template
235
+ * **`str`**: Catch all errors with this custom message
236
+ * **`type[Exception]`**: Only catch this exception type with default message
237
+ * **`tuple[type[Exception], ...]`**: Only catch these exception types with default message
238
+ * **`Callable[[Exception], str]`**: Custom function that returns error message
239
+ * **`False`**: No retry, let exceptions propagate
240
+ </ParamField>
241
+
242
+ <CodeGroup>
243
+ ```python Pydantic Model theme={null}
244
+ from pydantic import BaseModel, Field
245
+ from typing import Literal
246
+ from langchain.agents import create_agent
247
+ from langchain.agents.structured_output import ToolStrategy
248
+
249
+
250
+ class ProductReview(BaseModel):
251
+ """Analysis of a product review."""
252
+ rating: int | None = Field(description="The rating of the product", ge=1, le=5)
253
+ sentiment: Literal["positive", "negative"] = Field(description="The sentiment of the review")
254
+ key_points: list[str] = Field(description="The key points of the review. Lowercase, 1-3 words each.")
255
+
256
+ agent = create_agent(
257
+ model="gpt-5",
258
+ tools=tools,
259
+ response_format=ToolStrategy(ProductReview)
260
+ )
261
+
262
+ result = agent.invoke({
263
+ "messages": [{"role": "user", "content": "Analyze this review: 'Great product: 5 out of 5 stars. Fast shipping, but expensive'"}]
264
+ })
265
+ result["structured_response"]
266
+ # ProductReview(rating=5, sentiment='positive', key_points=['fast shipping', 'expensive'])
267
+ ```
268
+
269
+ ```python Dataclass theme={null}
270
+ from dataclasses import dataclass
271
+ from typing import Literal
272
+ from langchain.agents import create_agent
273
+ from langchain.agents.structured_output import ToolStrategy
274
+
275
+
276
+ @dataclass
277
+ class ProductReview:
278
+ """Analysis of a product review."""
279
+ rating: int | None # The rating of the product (1-5)
280
+ sentiment: Literal["positive", "negative"] # The sentiment of the review
281
+ key_points: list[str] # The key points of the review
282
+
283
+ agent = create_agent(
284
+ model="gpt-5",
285
+ tools=tools,
286
+ response_format=ToolStrategy(ProductReview)
287
+ )
288
+
289
+ result = agent.invoke({
290
+ "messages": [{"role": "user", "content": "Analyze this review: 'Great product: 5 out of 5 stars. Fast shipping, but expensive'"}]
291
+ })
292
+ result["structured_response"]
293
+ # {'rating': 5, 'sentiment': 'positive', 'key_points': ['fast shipping', 'expensive']}
294
+ ```
295
+
296
+ ```python TypedDict theme={null}
297
+ from typing import Literal
298
+ from typing_extensions import TypedDict
299
+ from langchain.agents import create_agent
300
+ from langchain.agents.structured_output import ToolStrategy
301
+
302
+
303
+ class ProductReview(TypedDict):
304
+ """Analysis of a product review."""
305
+ rating: int | None # The rating of the product (1-5)
306
+ sentiment: Literal["positive", "negative"] # The sentiment of the review
307
+ key_points: list[str] # The key points of the review
308
+
309
+ agent = create_agent(
310
+ model="gpt-5",
311
+ tools=tools,
312
+ response_format=ToolStrategy(ProductReview)
313
+ )
314
+
315
+ result = agent.invoke({
316
+ "messages": [{"role": "user", "content": "Analyze this review: 'Great product: 5 out of 5 stars. Fast shipping, but expensive'"}]
317
+ })
318
+ result["structured_response"]
319
+ # {'rating': 5, 'sentiment': 'positive', 'key_points': ['fast shipping', 'expensive']}
320
+ ```
321
+
322
+ ```python JSON Schema theme={null}
323
+ from langchain.agents import create_agent
324
+ from langchain.agents.structured_output import ToolStrategy
325
+
326
+
327
+ product_review_schema = {
328
+ "type": "object",
329
+ "description": "Analysis of a product review.",
330
+ "properties": {
331
+ "rating": {
332
+ "type": ["integer", "null"],
333
+ "description": "The rating of the product (1-5)",
334
+ "minimum": 1,
335
+ "maximum": 5
336
+ },
337
+ "sentiment": {
338
+ "type": "string",
339
+ "enum": ["positive", "negative"],
340
+ "description": "The sentiment of the review"
341
+ },
342
+ "key_points": {
343
+ "type": "array",
344
+ "items": {"type": "string"},
345
+ "description": "The key points of the review"
346
+ }
347
+ },
348
+ "required": ["sentiment", "key_points"]
349
+ }
350
+
351
+ agent = create_agent(
352
+ model="gpt-5",
353
+ tools=tools,
354
+ response_format=ToolStrategy(product_review_schema)
355
+ )
356
+
357
+ result = agent.invoke({
358
+ "messages": [{"role": "user", "content": "Analyze this review: 'Great product: 5 out of 5 stars. Fast shipping, but expensive'"}]
359
+ })
360
+ result["structured_response"]
361
+ # {'rating': 5, 'sentiment': 'positive', 'key_points': ['fast shipping', 'expensive']}
362
+ ```
363
+
364
+ ```python Union Types theme={null}
365
+ from pydantic import BaseModel, Field
366
+ from typing import Literal, Union
367
+ from langchain.agents import create_agent
368
+ from langchain.agents.structured_output import ToolStrategy
369
+
370
+
371
+ class ProductReview(BaseModel):
372
+ """Analysis of a product review."""
373
+ rating: int | None = Field(description="The rating of the product", ge=1, le=5)
374
+ sentiment: Literal["positive", "negative"] = Field(description="The sentiment of the review")
375
+ key_points: list[str] = Field(description="The key points of the review. Lowercase, 1-3 words each.")
376
+
377
+ class CustomerComplaint(BaseModel):
378
+ """A customer complaint about a product or service."""
379
+ issue_type: Literal["product", "service", "shipping", "billing"] = Field(description="The type of issue")
380
+ severity: Literal["low", "medium", "high"] = Field(description="The severity of the complaint")
381
+ description: str = Field(description="Brief description of the complaint")
382
+
383
+ agent = create_agent(
384
+ model="gpt-5",
385
+ tools=tools,
386
+ response_format=ToolStrategy(Union[ProductReview, CustomerComplaint])
387
+ )
388
+
389
+ result = agent.invoke({
390
+ "messages": [{"role": "user", "content": "Analyze this review: 'Great product: 5 out of 5 stars. Fast shipping, but expensive'"}]
391
+ })
392
+ result["structured_response"]
393
+ # ProductReview(rating=5, sentiment='positive', key_points=['fast shipping', 'expensive'])
394
+ ```
395
+ </CodeGroup>
396
+
397
+ ### Custom tool message content
398
+
399
+ The `tool_message_content` parameter allows you to customize the message that appears in the conversation history when structured output is generated:
400
+
401
+ ```python theme={null}
402
+ from pydantic import BaseModel, Field
403
+ from typing import Literal
404
+ from langchain.agents import create_agent
405
+ from langchain.agents.structured_output import ToolStrategy
406
+
407
+
408
+ class MeetingAction(BaseModel):
409
+ """Action items extracted from a meeting transcript."""
410
+ task: str = Field(description="The specific task to be completed")
411
+ assignee: str = Field(description="Person responsible for the task")
412
+ priority: Literal["low", "medium", "high"] = Field(description="Priority level")
413
+
414
+ agent = create_agent(
415
+ model="gpt-5",
416
+ tools=[],
417
+ response_format=ToolStrategy(
418
+ schema=MeetingAction,
419
+ tool_message_content="Action item captured and added to meeting notes!"
420
+ )
421
+ )
422
+
423
+ agent.invoke({
424
+ "messages": [{"role": "user", "content": "From our meeting: Sarah needs to update the project timeline as soon as possible"}]
425
+ })
426
+ ```
427
+
428
+ ```
429
+ ================================ Human Message =================================
430
+
431
+ From our meeting: Sarah needs to update the project timeline as soon as possible
432
+ ================================== Ai Message ==================================
433
+ Tool Calls:
434
+ MeetingAction (call_1)
435
+ Call ID: call_1
436
+ Args:
437
+ task: Update the project timeline
438
+ assignee: Sarah
439
+ priority: high
440
+ ================================= Tool Message =================================
441
+ Name: MeetingAction
442
+
443
+ Action item captured and added to meeting notes!
444
+ ```
445
+
446
+ Without `tool_message_content`, our final [`ToolMessage`](https://reference.langchain.com/python/langchain/messages/#langchain.messages.ToolMessage) would be:
447
+
448
+ ```
449
+ ================================= Tool Message =================================
450
+ Name: MeetingAction
451
+
452
+ Returning structured response: {'task': 'update the project timeline', 'assignee': 'Sarah', 'priority': 'high'}
453
+ ```
454
+
455
+ ### Error handling
456
+
457
+ Models can make mistakes when generating structured output via tool calling. LangChain provides intelligent retry mechanisms to handle these errors automatically.
458
+
459
+ #### Multiple structured outputs error
460
+
461
+ When a model incorrectly calls multiple structured output tools, the agent provides error feedback in a [`ToolMessage`](https://reference.langchain.com/python/langchain/messages/#langchain.messages.ToolMessage) and prompts the model to retry:
462
+
463
+ ```python theme={null}
464
+ from pydantic import BaseModel, Field
465
+ from typing import Union
466
+ from langchain.agents import create_agent
467
+ from langchain.agents.structured_output import ToolStrategy
468
+
469
+
470
+ class ContactInfo(BaseModel):
471
+ name: str = Field(description="Person's name")
472
+ email: str = Field(description="Email address")
473
+
474
+ class EventDetails(BaseModel):
475
+ event_name: str = Field(description="Name of the event")
476
+ date: str = Field(description="Event date")
477
+
478
+ agent = create_agent(
479
+ model="gpt-5",
480
+ tools=[],
481
+ response_format=ToolStrategy(Union[ContactInfo, EventDetails]) # Default: handle_errors=True
482
+ )
483
+
484
+ agent.invoke({
485
+ "messages": [{"role": "user", "content": "Extract info: John Doe (john@email.com) is organizing Tech Conference on March 15th"}]
486
+ })
487
+ ```
488
+
489
+ ```
490
+ ================================ Human Message =================================
491
+
492
+ Extract info: John Doe (john@email.com) is organizing Tech Conference on March 15th
493
+ None
494
+ ================================== Ai Message ==================================
495
+ Tool Calls:
496
+ ContactInfo (call_1)
497
+ Call ID: call_1
498
+ Args:
499
+ name: John Doe
500
+ email: john@email.com
501
+ EventDetails (call_2)
502
+ Call ID: call_2
503
+ Args:
504
+ event_name: Tech Conference
505
+ date: March 15th
506
+ ================================= Tool Message =================================
507
+ Name: ContactInfo
508
+
509
+ Error: Model incorrectly returned multiple structured responses (ContactInfo, EventDetails) when only one is expected.
510
+ Please fix your mistakes.
511
+ ================================= Tool Message =================================
512
+ Name: EventDetails
513
+
514
+ Error: Model incorrectly returned multiple structured responses (ContactInfo, EventDetails) when only one is expected.
515
+ Please fix your mistakes.
516
+ ================================== Ai Message ==================================
517
+ Tool Calls:
518
+ ContactInfo (call_3)
519
+ Call ID: call_3
520
+ Args:
521
+ name: John Doe
522
+ email: john@email.com
523
+ ================================= Tool Message =================================
524
+ Name: ContactInfo
525
+
526
+ Returning structured response: {'name': 'John Doe', 'email': 'john@email.com'}
527
+ ```
528
+
529
+ #### Schema validation error
530
+
531
+ When structured output doesn't match the expected schema, the agent provides specific error feedback:
532
+
533
+ ```python theme={null}
534
+ from pydantic import BaseModel, Field
535
+ from langchain.agents import create_agent
536
+ from langchain.agents.structured_output import ToolStrategy
537
+
538
+
539
+ class ProductRating(BaseModel):
540
+ rating: int | None = Field(description="Rating from 1-5", ge=1, le=5)
541
+ comment: str = Field(description="Review comment")
542
+
543
+ agent = create_agent(
544
+ model="gpt-5",
545
+ tools=[],
546
+ response_format=ToolStrategy(ProductRating), # Default: handle_errors=True
547
+ system_prompt="You are a helpful assistant that parses product reviews. Do not make any field or value up."
548
+ )
549
+
550
+ agent.invoke({
551
+ "messages": [{"role": "user", "content": "Parse this: Amazing product, 10/10!"}]
552
+ })
553
+ ```
554
+
555
+ ```
556
+ ================================ Human Message =================================
557
+
558
+ Parse this: Amazing product, 10/10!
559
+ ================================== Ai Message ==================================
560
+ Tool Calls:
561
+ ProductRating (call_1)
562
+ Call ID: call_1
563
+ Args:
564
+ rating: 10
565
+ comment: Amazing product
566
+ ================================= Tool Message =================================
567
+ Name: ProductRating
568
+
569
+ Error: Failed to parse structured output for tool 'ProductRating': 1 validation error for ProductRating.rating
570
+ Input should be less than or equal to 5 [type=less_than_equal, input_value=10, input_type=int].
571
+ Please fix your mistakes.
572
+ ================================== Ai Message ==================================
573
+ Tool Calls:
574
+ ProductRating (call_2)
575
+ Call ID: call_2
576
+ Args:
577
+ rating: 5
578
+ comment: Amazing product
579
+ ================================= Tool Message =================================
580
+ Name: ProductRating
581
+
582
+ Returning structured response: {'rating': 5, 'comment': 'Amazing product'}
583
+ ```
584
+
585
+ #### Error handling strategies
586
+
587
+ You can customize how errors are handled using the `handle_errors` parameter:
588
+
589
+ **Custom error message:**
590
+
591
+ ```python theme={null}
592
+ ToolStrategy(
593
+ schema=ProductRating,
594
+ handle_errors="Please provide a valid rating between 1-5 and include a comment."
595
+ )
596
+ ```
597
+
598
+ If `handle_errors` is a string, the agent will *always* prompt the model to re-try with a fixed tool message:
599
+
600
+ ```
601
+ ================================= Tool Message =================================
602
+ Name: ProductRating
603
+
604
+ Please provide a valid rating between 1-5 and include a comment.
605
+ ```
606
+
607
+ **Handle specific exceptions only:**
608
+
609
+ ```python theme={null}
610
+ ToolStrategy(
611
+ schema=ProductRating,
612
+ handle_errors=ValueError # Only retry on ValueError, raise others
613
+ )
614
+ ```
615
+
616
+ If `handle_errors` is an exception type, the agent will only retry (using the default error message) if the exception raised is the specified type. In all other cases, the exception will be raised.
617
+
618
+ **Handle multiple exception types:**
619
+
620
+ ```python theme={null}
621
+ ToolStrategy(
622
+ schema=ProductRating,
623
+ handle_errors=(ValueError, TypeError) # Retry on ValueError and TypeError
624
+ )
625
+ ```
626
+
627
+ If `handle_errors` is a tuple of exceptions, the agent will only retry (using the default error message) if the exception raised is one of the specified types. In all other cases, the exception will be raised.
628
+
629
+ **Custom error handler function:**
630
+
631
+ ```python theme={null}
632
+
633
+ from langchain.agents.structured_output import StructuredOutputValidationError
634
+ from langchain.agents.structured_output import MultipleStructuredOutputsError
635
+
636
+ def custom_error_handler(error: Exception) -> str:
637
+ if isinstance(error, StructuredOutputValidationError):
638
+ return "There was an issue with the format. Try again."
639
+ elif isinstance(error, MultipleStructuredOutputsError):
640
+ return "Multiple structured outputs were returned. Pick the most relevant one."
641
+ else:
642
+ return f"Error: {str(error)}"
643
+
644
+
645
+ agent = create_agent(
646
+ model="gpt-5",
647
+ tools=[],
648
+ response_format=ToolStrategy(
649
+ schema=Union[ContactInfo, EventDetails],
650
+ handle_errors=custom_error_handler
651
+ ) # Default: handle_errors=True
652
+ )
653
+
654
+ result = agent.invoke({
655
+ "messages": [{"role": "user", "content": "Extract info: John Doe (john@email.com) is organizing Tech Conference on March 15th"}]
656
+ })
657
+
658
+ for msg in result['messages']:
659
+ # If message is actually a ToolMessage object (not a dict), check its class name
660
+ if type(msg).__name__ == "ToolMessage":
661
+ print(msg.content)
662
+ # If message is a dictionary or you want a fallback
663
+ elif isinstance(msg, dict) and msg.get('tool_call_id'):
664
+ print(msg['content'])
665
+
666
+ ```
667
+
668
+ On `StructuredOutputValidationError`:
669
+
670
+ ```
671
+ ================================= Tool Message =================================
672
+ Name: ToolStrategy
673
+
674
+ There was an issue with the format. Try again.
675
+ ```
676
+
677
+ On `MultipleStructuredOutputsError`:
678
+
679
+ ```
680
+ ================================= Tool Message =================================
681
+ Name: ToolStrategy
682
+
683
+ Multiple structured outputs were returned. Pick the most relevant one.
684
+ ```
685
+
686
+ On other errors:
687
+
688
+ ```
689
+ ================================= Tool Message =================================
690
+ Name: ToolStrategy
691
+
692
+ Error: <error message>
693
+ ```
694
+
695
+ **No error handling:**
696
+
697
+ ```python theme={null}
698
+ response_format = ToolStrategy(
699
+ schema=ProductRating,
700
+ handle_errors=False # All errors raised
701
+ )
702
+ ```
703
+
704
+ ***
705
+
706
+ <Callout icon="pen-to-square" iconType="regular">
707
+ [Edit this page on GitHub](https://github.com/langchain-ai/docs/edit/main/src/oss/langchain/structured-output.mdx) or [file an issue](https://github.com/langchain-ai/docs/issues/new/choose).
708
+ </Callout>
709
+
710
+ <Tip icon="terminal" iconType="regular">
711
+ [Connect these docs](/use-these-docs) to Claude, VSCode, and more via MCP for real-time answers.
712
+ </Tip>