mednotes-opencode 0.1.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 (430) hide show
  1. package/.opencode/agents/med-chat-triager.md +204 -0
  2. package/.opencode/agents/med-flashcard-maker.md +63 -0
  3. package/.opencode/agents/med-knowledge-architect.md +230 -0
  4. package/.opencode/agents/med-link-graph-curator.md +177 -0
  5. package/.opencode/agents/med-publish-guard.md +62 -0
  6. package/.opencode/commands/flashcards.md +25 -0
  7. package/.opencode/commands/mednotes/create.md +25 -0
  8. package/.opencode/commands/mednotes/enrich.md +27 -0
  9. package/.opencode/commands/mednotes/fix-wiki.md +27 -0
  10. package/.opencode/commands/mednotes/history.md +22 -0
  11. package/.opencode/commands/mednotes/link-body.md +25 -0
  12. package/.opencode/commands/mednotes/link-related.md +27 -0
  13. package/.opencode/commands/mednotes/link.md +27 -0
  14. package/.opencode/commands/mednotes/pdf-library.md +27 -0
  15. package/.opencode/commands/mednotes/process-chats.md +23 -0
  16. package/.opencode/commands/mednotes/setup.md +21 -0
  17. package/.opencode/commands/mednotes/status.md +27 -0
  18. package/.opencode/commands/mednotes/telemetry.md +27 -0
  19. package/.opencode/commands/report.md +26 -0
  20. package/.opencode/mednotes/AGENTS.md +57 -0
  21. package/.opencode/mednotes/agents/med-chat-triager.md +197 -0
  22. package/.opencode/mednotes/agents/med-flashcard-maker.md +56 -0
  23. package/.opencode/mednotes/agents/med-knowledge-architect.md +224 -0
  24. package/.opencode/mednotes/agents/med-link-graph-curator.md +171 -0
  25. package/.opencode/mednotes/agents/med-publish-guard.md +55 -0
  26. package/.opencode/mednotes/contracts/.gitkeep +1 -0
  27. package/.opencode/mednotes/contracts/agents.json +116 -0
  28. package/.opencode/mednotes/contracts/opencode-plugin.json +70 -0
  29. package/.opencode/mednotes/docs/agent-prompt-hardening.md +567 -0
  30. package/.opencode/mednotes/docs/agent-role-contracts.md +94 -0
  31. package/.opencode/mednotes/docs/anki-mcp-twenty-rules.md +214 -0
  32. package/.opencode/mednotes/docs/anki-templates/README.md +39 -0
  33. package/.opencode/mednotes/docs/anki-templates/cloze.back.html +23 -0
  34. package/.opencode/mednotes/docs/anki-templates/cloze.front.html +14 -0
  35. package/.opencode/mednotes/docs/anki-templates/qa.back.html +24 -0
  36. package/.opencode/mednotes/docs/anki-templates/qa.front.html +14 -0
  37. package/.opencode/mednotes/docs/anki-templates/style.css +182 -0
  38. package/.opencode/mednotes/docs/atomicity-splitting-policy.md +113 -0
  39. package/.opencode/mednotes/docs/extension-docs.md +40 -0
  40. package/.opencode/mednotes/docs/flashcard-ingestion.md +278 -0
  41. package/.opencode/mednotes/docs/knowledge-architect.md +208 -0
  42. package/.opencode/mednotes/docs/merge-policy.md +110 -0
  43. package/.opencode/mednotes/docs/public-vocabulary.md +104 -0
  44. package/.opencode/mednotes/docs/semantic-linker.md +141 -0
  45. package/.opencode/mednotes/docs/taxonomy-policy.md +90 -0
  46. package/.opencode/mednotes/docs/triage-policy.md +187 -0
  47. package/.opencode/mednotes/docs/vault-version-control.md +758 -0
  48. package/.opencode/mednotes/docs/vocabulary-db-recovery.md +58 -0
  49. package/.opencode/mednotes/docs/workflow-output-contract.md +779 -0
  50. package/.opencode/mednotes/hooks/hooks.json +79 -0
  51. package/.opencode/mednotes/package-lock.json +6361 -0
  52. package/.opencode/mednotes/package.json +15 -0
  53. package/.opencode/mednotes/pyproject.toml +48 -0
  54. package/.opencode/mednotes/scripts/bootstrap_windows_python_uv.cmd +13 -0
  55. package/.opencode/mednotes/scripts/bootstrap_windows_python_uv.ps1 +172 -0
  56. package/.opencode/mednotes/scripts/enrich_notes.py +23 -0
  57. package/.opencode/mednotes/scripts/full_reset_windows_python_uv.cmd +13 -0
  58. package/.opencode/mednotes/scripts/hooks/antigravity_hook_status.mjs +212 -0
  59. package/.opencode/mednotes/scripts/hooks/mednotes_hook/adapters/antigravity.mjs +169 -0
  60. package/.opencode/mednotes/scripts/hooks/mednotes_hook/adapters/harness_payload.mjs +103 -0
  61. package/.opencode/mednotes/scripts/hooks/mednotes_hook/adapters/opencode_plugin.mjs +341 -0
  62. package/.opencode/mednotes/scripts/hooks/mednotes_hook/adapters/opencode_user_config_sync.mjs +177 -0
  63. package/.opencode/mednotes/scripts/hooks/mednotes_hook/anki_preflight.mjs +214 -0
  64. package/.opencode/mednotes/scripts/hooks/mednotes_hook/cli.mjs +143 -0
  65. package/.opencode/mednotes/scripts/hooks/mednotes_hook/diagnostics.mjs +11 -0
  66. package/.opencode/mednotes/scripts/hooks/mednotes_hook/domain/agent_directive_core.mjs +160 -0
  67. package/.opencode/mednotes/scripts/hooks/mednotes_hook/fsm_directive.mjs +1470 -0
  68. package/.opencode/mednotes/scripts/hooks/mednotes_hook/hook_errors.mjs +120 -0
  69. package/.opencode/mednotes/scripts/hooks/mednotes_hook/retention.mjs +114 -0
  70. package/.opencode/mednotes/scripts/hooks/mednotes_hook/runtime.mjs +174 -0
  71. package/.opencode/mednotes/scripts/hooks/mednotes_hook/telemetry_capture.mjs +511 -0
  72. package/.opencode/mednotes/scripts/hooks/mednotes_hook/vault_guard.mjs +624 -0
  73. package/.opencode/mednotes/scripts/hooks/mednotes_hook.mjs +5 -0
  74. package/.opencode/mednotes/scripts/mednotes/_runtime_paths.py +24 -0
  75. package/.opencode/mednotes/scripts/mednotes/anki_model_validator.py +18 -0
  76. package/.opencode/mednotes/scripts/mednotes/capture_extension_diff.py +1562 -0
  77. package/.opencode/mednotes/scripts/mednotes/feedback_report.py +16 -0
  78. package/.opencode/mednotes/scripts/mednotes/flashcard_index.py +18 -0
  79. package/.opencode/mednotes/scripts/mednotes/flashcard_pipeline.py +18 -0
  80. package/.opencode/mednotes/scripts/mednotes/flashcard_report.py +18 -0
  81. package/.opencode/mednotes/scripts/mednotes/flashcard_sources.py +18 -0
  82. package/.opencode/mednotes/scripts/mednotes/obsidian/README.md +6 -0
  83. package/.opencode/mednotes/scripts/mednotes/obsidian_note_utils.py +20 -0
  84. package/.opencode/mednotes/scripts/mednotes/pdf_library/cli.py +16 -0
  85. package/.opencode/mednotes/scripts/mednotes/project_fsm.py +229 -0
  86. package/.opencode/mednotes/scripts/mednotes/setup_telemetry_email.py +404 -0
  87. package/.opencode/mednotes/scripts/mednotes/sync_anki_twenty_rules.py +18 -0
  88. package/.opencode/mednotes/scripts/mednotes/sync_opencode_user_config.py +36 -0
  89. package/.opencode/mednotes/scripts/mednotes/wiki/cli.py +20 -0
  90. package/.opencode/mednotes/scripts/mednotes/wiki_graph.py +18 -0
  91. package/.opencode/mednotes/scripts/mednotes/wiki_tree.py +134 -0
  92. package/.opencode/mednotes/scripts/reset_windows_python_uv.ps1 +625 -0
  93. package/.opencode/mednotes/scripts/run_python.mjs +109 -0
  94. package/.opencode/mednotes/scripts/vault/vault_commit.ps1 +19 -0
  95. package/.opencode/mednotes/scripts/vault/vault_commit.sh +18 -0
  96. package/.opencode/mednotes/scripts/vault/vault_git.ps1 +19 -0
  97. package/.opencode/mednotes/scripts/vault/vault_git.py +3107 -0
  98. package/.opencode/mednotes/scripts/vault/vault_git.sh +18 -0
  99. package/.opencode/mednotes/scripts/vault/vault_precommit.ps1 +19 -0
  100. package/.opencode/mednotes/scripts/vault/vault_precommit.sh +18 -0
  101. package/.opencode/mednotes/skills/THIRD_PARTY_NOTICES.md +45 -0
  102. package/.opencode/mednotes/skills/create-medical-flashcards/SKILL.md +113 -0
  103. package/.opencode/mednotes/skills/create-medical-note/SKILL.md +90 -0
  104. package/.opencode/mednotes/skills/enrich-medical-note/SKILL.md +120 -0
  105. package/.opencode/mednotes/skills/fix-medical-wiki/SKILL.md +559 -0
  106. package/.opencode/mednotes/skills/link-medical-wiki/SKILL.md +224 -0
  107. package/.opencode/mednotes/skills/obsidian-cli/SKILL.md +118 -0
  108. package/.opencode/mednotes/skills/obsidian-markdown/SKILL.md +207 -0
  109. package/.opencode/mednotes/skills/obsidian-markdown/references/CALLOUTS.md +58 -0
  110. package/.opencode/mednotes/skills/obsidian-markdown/references/EMBEDS.md +63 -0
  111. package/.opencode/mednotes/skills/obsidian-markdown/references/PROPERTIES.md +61 -0
  112. package/.opencode/mednotes/skills/obsidian-ops/SKILL.md +136 -0
  113. package/.opencode/mednotes/skills/pdf-library/SKILL.md +45 -0
  114. package/.opencode/mednotes/skills/process-medical-chats/SKILL.md +246 -0
  115. package/.opencode/mednotes/skills/workflow-report/SKILL.md +100 -0
  116. package/.opencode/mednotes/src/mednotes/__init__.py +5 -0
  117. package/.opencode/mednotes/src/mednotes/domains/__init__.py +5 -0
  118. package/.opencode/mednotes/src/mednotes/domains/flashcards/README.md +26 -0
  119. package/.opencode/mednotes/src/mednotes/domains/flashcards/__init__.py +2 -0
  120. package/.opencode/mednotes/src/mednotes/domains/flashcards/build_demo_apkg.py +177 -0
  121. package/.opencode/mednotes/src/mednotes/domains/flashcards/contracts.py +385 -0
  122. package/.opencode/mednotes/src/mednotes/domains/flashcards/flashcards_machine.py +522 -0
  123. package/.opencode/mednotes/src/mednotes/domains/flashcards/fsm.py +817 -0
  124. package/.opencode/mednotes/src/mednotes/domains/flashcards/index.py +630 -0
  125. package/.opencode/mednotes/src/mednotes/domains/flashcards/install_models.py +445 -0
  126. package/.opencode/mednotes/src/mednotes/domains/flashcards/model.py +359 -0
  127. package/.opencode/mednotes/src/mednotes/domains/flashcards/obsidian_links.py +135 -0
  128. package/.opencode/mednotes/src/mednotes/domains/flashcards/obsidian_note_utils.py +546 -0
  129. package/.opencode/mednotes/src/mednotes/domains/flashcards/pipeline.py +580 -0
  130. package/.opencode/mednotes/src/mednotes/domains/flashcards/report.py +510 -0
  131. package/.opencode/mednotes/src/mednotes/domains/flashcards/sources.py +682 -0
  132. package/.opencode/mednotes/src/mednotes/domains/flashcards/sync_rules.py +184 -0
  133. package/.opencode/mednotes/src/mednotes/domains/history/__init__.py +1 -0
  134. package/.opencode/mednotes/src/mednotes/domains/history/history_fsm.py +852 -0
  135. package/.opencode/mednotes/src/mednotes/domains/history/history_machine.py +453 -0
  136. package/.opencode/mednotes/src/mednotes/domains/setup/__init__.py +7 -0
  137. package/.opencode/mednotes/src/mednotes/domains/setup/setup_fsm.py +808 -0
  138. package/.opencode/mednotes/src/mednotes/domains/setup/setup_machine.py +973 -0
  139. package/.opencode/mednotes/src/mednotes/domains/wiki/README.md +64 -0
  140. package/.opencode/mednotes/src/mednotes/domains/wiki/__init__.py +1 -0
  141. package/.opencode/mednotes/src/mednotes/domains/wiki/api.py +668 -0
  142. package/.opencode/mednotes/src/mednotes/domains/wiki/batch_state.py +102 -0
  143. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/__init__.py +1 -0
  144. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/atomicity/__init__.py +1 -0
  145. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/atomicity/atomicity.py +877 -0
  146. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/body_link/__init__.py +1 -0
  147. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/body_link/body_linker.py +1562 -0
  148. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/effects/__init__.py +1 -0
  149. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/effects/effect_adapters.py +949 -0
  150. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/effects/fix_wiki_runtime_adapters.py +433 -0
  151. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/graph/__init__.py +1 -0
  152. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/graph/coverage.py +413 -0
  153. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/graph/graph.py +396 -0
  154. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/graph/graph_fixes.py +161 -0
  155. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/hygiene/__init__.py +1 -0
  156. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/hygiene/hygiene.py +483 -0
  157. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/illustrate/__init__.py +2 -0
  158. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/illustrate/anchors.py +185 -0
  159. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/illustrate/core/__init__.py +0 -0
  160. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/illustrate/core/cache.py +223 -0
  161. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/illustrate/core/config.py +131 -0
  162. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/illustrate/core/download.py +224 -0
  163. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/illustrate/core/frontmatter.py +59 -0
  164. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/illustrate/core/insert.py +227 -0
  165. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/illustrate/core/local_import.py +54 -0
  166. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/illustrate/sources/__init__.py +42 -0
  167. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/illustrate/sources/web_profiles.py +99 -0
  168. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/illustrate/sources/web_search.py +203 -0
  169. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/illustrate/sources/wikimedia.py +102 -0
  170. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/markdown/__init__.py +1 -0
  171. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/markdown/markdown_db_adapter.mjs +434 -0
  172. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/markdown/markdown_node_runtime.py +274 -0
  173. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/markdown/markdown_query.py +227 -0
  174. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/notes/__init__.py +1 -0
  175. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/notes/artifacts.py +605 -0
  176. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/notes/canonical_merge.py +277 -0
  177. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/notes/markdown_zones.py +85 -0
  178. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/notes/meaning_planner.py +307 -0
  179. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/notes/note_iter.py +67 -0
  180. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/notes/note_merge.py +278 -0
  181. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/notes/note_plan.py +409 -0
  182. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/notes/note_policy.py +22 -0
  183. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/notes/note_style/__init__.py +79 -0
  184. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/notes/note_style/fixes.py +264 -0
  185. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/notes/note_style/frontmatter.py +435 -0
  186. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/notes/note_style/models.py +208 -0
  187. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/notes/note_style/prompts.py +37 -0
  188. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/notes/note_style/tables.py +236 -0
  189. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/notes/note_style/validate.py +404 -0
  190. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/notes/provenance.py +478 -0
  191. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/notes/raw_chats.py +273 -0
  192. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/notes/sources_backfill.py +235 -0
  193. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/pdf/__init__.py +10 -0
  194. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/pdf/anchors.py +16 -0
  195. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/pdf/captions.py +47 -0
  196. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/pdf/cli.py +179 -0
  197. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/pdf/cloud.py +52 -0
  198. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/pdf/config.py +196 -0
  199. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/pdf/context_packets.py +76 -0
  200. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/pdf/db.py +81 -0
  201. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/pdf/doctor.py +102 -0
  202. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/pdf/figure_ids.py +42 -0
  203. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/pdf/ingest.py +326 -0
  204. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/pdf/insert.py +316 -0
  205. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/pdf/mentions.py +57 -0
  206. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/pdf/ocr.py +71 -0
  207. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/pdf/paths.py +35 -0
  208. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/pdf/pdf_engine.py +77 -0
  209. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/pdf/schema.py +155 -0
  210. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/pdf/search.py +188 -0
  211. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/pdf/tui/__init__.py +1 -0
  212. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/pdf/tui/app.py +89 -0
  213. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/pdf/tui/image_backend.py +29 -0
  214. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/pdf/tui/state.py +65 -0
  215. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/publish/__init__.py +1 -0
  216. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/publish/publish.py +1139 -0
  217. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/publish/publish_receipts.py +365 -0
  218. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/publish/publish_recovery.py +240 -0
  219. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/quality/__init__.py +1 -0
  220. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/quality/agent_behavior_corpus.py +2069 -0
  221. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/quality/agent_report_validation.py +4448 -0
  222. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/quality/agent_run_audit.py +852 -0
  223. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/quality/architect_prompt_eval.py +341 -0
  224. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/quality/body_linker_eval.py +240 -0
  225. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/quality/curator_output_validation.py +175 -0
  226. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/quality/curator_prompt_eval.py +865 -0
  227. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/quality/triager_prompt_eval.py +1295 -0
  228. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/related_notes/__init__.py +1 -0
  229. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/related_notes/related_notes.py +1920 -0
  230. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/related_notes/related_notes_headless.py +1186 -0
  231. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/specialist/__init__.py +1 -0
  232. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/specialist/plan_attestation.py +148 -0
  233. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/specialist/specialist_receipts.py +360 -0
  234. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/specialist/specialist_runtime.py +52 -0
  235. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/specialist/specialist_task_runner.py +2470 -0
  236. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/style/__init__.py +1 -0
  237. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/style/style.py +1952 -0
  238. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/subagents/__init__.py +1 -0
  239. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/subagents/agents.py +1767 -0
  240. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/vocabulary/__init__.py +1 -0
  241. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/vocabulary/alias_projection.py +331 -0
  242. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/vocabulary/link_terms.py +151 -0
  243. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/vocabulary/llm_disambiguation.py +182 -0
  244. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/vocabulary/taxonomy/__init__.py +116 -0
  245. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/vocabulary/taxonomy/audit.py +201 -0
  246. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/vocabulary/taxonomy/migration.py +314 -0
  247. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/vocabulary/taxonomy/normalize.py +72 -0
  248. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/vocabulary/taxonomy/policy.py +135 -0
  249. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/vocabulary/taxonomy/resolve.py +413 -0
  250. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/vocabulary/taxonomy/schema.py +157 -0
  251. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/vocabulary/taxonomy/status.py +137 -0
  252. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/vocabulary/vocabulary_bootstrap.py +509 -0
  253. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/vocabulary/vocabulary_curator_batch.py +1115 -0
  254. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/vocabulary/vocabulary_ingestion.py +632 -0
  255. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/vocabulary/vocabulary_map.py +930 -0
  256. package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/vocabulary/vocabulary_recovery.py +1388 -0
  257. package/.opencode/mednotes/src/mednotes/domains/wiki/cli.py +6665 -0
  258. package/.opencode/mednotes/src/mednotes/domains/wiki/common.py +69 -0
  259. package/.opencode/mednotes/src/mednotes/domains/wiki/config.py +210 -0
  260. package/.opencode/mednotes/src/mednotes/domains/wiki/contracts/__init__.py +74 -0
  261. package/.opencode/mednotes/src/mednotes/domains/wiki/contracts/agent_report.py +242 -0
  262. package/.opencode/mednotes/src/mednotes/domains/wiki/contracts/agent_run_audit.py +196 -0
  263. package/.opencode/mednotes/src/mednotes/domains/wiki/contracts/agents.py +601 -0
  264. package/.opencode/mednotes/src/mednotes/domains/wiki/contracts/curator.py +256 -0
  265. package/.opencode/mednotes/src/mednotes/domains/wiki/contracts/effect_payloads.py +519 -0
  266. package/.opencode/mednotes/src/mednotes/domains/wiki/contracts/happy_path.py +190 -0
  267. package/.opencode/mednotes/src/mednotes/domains/wiki/contracts/link_git.py +110 -0
  268. package/.opencode/mednotes/src/mednotes/domains/wiki/contracts/link_runtime_artifact.py +52 -0
  269. package/.opencode/mednotes/src/mednotes/domains/wiki/contracts/note_plan.py +75 -0
  270. package/.opencode/mednotes/src/mednotes/domains/wiki/contracts/paths.py +114 -0
  271. package/.opencode/mednotes/src/mednotes/domains/wiki/contracts/public_report.py +53 -0
  272. package/.opencode/mednotes/src/mednotes/domains/wiki/contracts/publish.py +111 -0
  273. package/.opencode/mednotes/src/mednotes/domains/wiki/contracts/raw_coverage.py +217 -0
  274. package/.opencode/mednotes/src/mednotes/domains/wiki/contracts/related_notes.py +136 -0
  275. package/.opencode/mednotes/src/mednotes/domains/wiki/contracts/related_notes_headless.py +153 -0
  276. package/.opencode/mednotes/src/mednotes/domains/wiki/contracts/related_notes_runtime.py +395 -0
  277. package/.opencode/mednotes/src/mednotes/domains/wiki/contracts/schema_registry.py +637 -0
  278. package/.opencode/mednotes/src/mednotes/domains/wiki/contracts/specialist.py +432 -0
  279. package/.opencode/mednotes/src/mednotes/domains/wiki/contracts/status.py +62 -0
  280. package/.opencode/mednotes/src/mednotes/domains/wiki/contracts/style_rewrite.py +568 -0
  281. package/.opencode/mednotes/src/mednotes/domains/wiki/contracts/vocabulary_ingestion.py +223 -0
  282. package/.opencode/mednotes/src/mednotes/domains/wiki/contracts/workflow_blockers.py +510 -0
  283. package/.opencode/mednotes/src/mednotes/domains/wiki/contracts/workflow_guardrails.py +637 -0
  284. package/.opencode/mednotes/src/mednotes/domains/wiki/contracts/workflow_outcomes.py +121 -0
  285. package/.opencode/mednotes/src/mednotes/domains/wiki/contracts/workflow_receipts.py +100 -0
  286. package/.opencode/mednotes/src/mednotes/domains/wiki/flows/__init__.py +1 -0
  287. package/.opencode/mednotes/src/mednotes/domains/wiki/flows/enrich/__init__.py +1 -0
  288. package/.opencode/mednotes/src/mednotes/domains/wiki/flows/enrich/__main__.py +4 -0
  289. package/.opencode/mednotes/src/mednotes/domains/wiki/flows/enrich/cli.py +275 -0
  290. package/.opencode/mednotes/src/mednotes/domains/wiki/flows/enrich/workflow/__init__.py +2 -0
  291. package/.opencode/mednotes/src/mednotes/domains/wiki/flows/enrich/workflow/candidates.py +193 -0
  292. package/.opencode/mednotes/src/mednotes/domains/wiki/flows/enrich/workflow/cli.py +189 -0
  293. package/.opencode/mednotes/src/mednotes/domains/wiki/flows/enrich/workflow/gemini.py +220 -0
  294. package/.opencode/mednotes/src/mednotes/domains/wiki/flows/enrich/workflow/inputs.py +120 -0
  295. package/.opencode/mednotes/src/mednotes/domains/wiki/flows/enrich/workflow/models.py +34 -0
  296. package/.opencode/mednotes/src/mednotes/domains/wiki/flows/enrich/workflow/parsing.py +48 -0
  297. package/.opencode/mednotes/src/mednotes/domains/wiki/flows/enrich/workflow/prompts.py +216 -0
  298. package/.opencode/mednotes/src/mednotes/domains/wiki/flows/enrich/workflow/quality.py +54 -0
  299. package/.opencode/mednotes/src/mednotes/domains/wiki/flows/enrich/workflow/reporting.py +24 -0
  300. package/.opencode/mednotes/src/mednotes/domains/wiki/flows/enrich/workflow/runner.py +433 -0
  301. package/.opencode/mednotes/src/mednotes/domains/wiki/flows/enrich/workflow/utils.py +39 -0
  302. package/.opencode/mednotes/src/mednotes/domains/wiki/flows/enrich/workflow/vault_guard_bridge.py +17 -0
  303. package/.opencode/mednotes/src/mednotes/domains/wiki/flows/fix_wiki/__init__.py +1 -0
  304. package/.opencode/mednotes/src/mednotes/domains/wiki/flows/fix_wiki/fix_wiki_context_packets.py +454 -0
  305. package/.opencode/mednotes/src/mednotes/domains/wiki/flows/fix_wiki/fix_wiki_decision_projection.py +133 -0
  306. package/.opencode/mednotes/src/mednotes/domains/wiki/flows/fix_wiki/fix_wiki_effects.py +1260 -0
  307. package/.opencode/mednotes/src/mednotes/domains/wiki/flows/fix_wiki/fix_wiki_fsm.py +2768 -0
  308. package/.opencode/mednotes/src/mednotes/domains/wiki/flows/fix_wiki/fix_wiki_machine.py +1588 -0
  309. package/.opencode/mednotes/src/mednotes/domains/wiki/flows/fix_wiki/fix_wiki_plan.py +306 -0
  310. package/.opencode/mednotes/src/mednotes/domains/wiki/flows/fix_wiki/fix_wiki_primary_objective.py +316 -0
  311. package/.opencode/mednotes/src/mednotes/domains/wiki/flows/fix_wiki/fix_wiki_problem.py +153 -0
  312. package/.opencode/mednotes/src/mednotes/domains/wiki/flows/fix_wiki/fix_wiki_receipt_evidence.py +306 -0
  313. package/.opencode/mednotes/src/mednotes/domains/wiki/flows/fix_wiki/fix_wiki_states.py +290 -0
  314. package/.opencode/mednotes/src/mednotes/domains/wiki/flows/fix_wiki/fix_wiki_user_report.py +342 -0
  315. package/.opencode/mednotes/src/mednotes/domains/wiki/flows/fix_wiki/health.py +6332 -0
  316. package/.opencode/mednotes/src/mednotes/domains/wiki/flows/link/__init__.py +1 -0
  317. package/.opencode/mednotes/src/mednotes/domains/wiki/flows/link/link_fsm.py +1119 -0
  318. package/.opencode/mednotes/src/mednotes/domains/wiki/flows/link/link_git.py +638 -0
  319. package/.opencode/mednotes/src/mednotes/domains/wiki/flows/link/link_machine.py +1106 -0
  320. package/.opencode/mednotes/src/mednotes/domains/wiki/flows/link/link_retry_governance.py +374 -0
  321. package/.opencode/mednotes/src/mednotes/domains/wiki/flows/link/link_runtime_result.py +485 -0
  322. package/.opencode/mednotes/src/mednotes/domains/wiki/flows/link/link_triggers.py +183 -0
  323. package/.opencode/mednotes/src/mednotes/domains/wiki/flows/link/linking.py +2758 -0
  324. package/.opencode/mednotes/src/mednotes/domains/wiki/flows/link/reference_repair.py +718 -0
  325. package/.opencode/mednotes/src/mednotes/domains/wiki/flows/link/related_notes_fsm.py +1855 -0
  326. package/.opencode/mednotes/src/mednotes/domains/wiki/flows/link_related/__init__.py +1 -0
  327. package/.opencode/mednotes/src/mednotes/domains/wiki/flows/link_related/link_related_machine.py +834 -0
  328. package/.opencode/mednotes/src/mednotes/domains/wiki/flows/process_chats/__init__.py +1 -0
  329. package/.opencode/mednotes/src/mednotes/domains/wiki/flows/process_chats/process_chats_fsm.py +1592 -0
  330. package/.opencode/mednotes/src/mednotes/domains/wiki/flows/process_chats/process_chats_machine.py +3097 -0
  331. package/.opencode/mednotes/src/mednotes/domains/wiki/flows/process_chats/process_chats_primary_objective.py +28 -0
  332. package/.opencode/mednotes/src/mednotes/domains/wiki/flows/process_chats/process_chats_runtime_result.py +185 -0
  333. package/.opencode/mednotes/src/mednotes/domains/wiki/performance.py +97 -0
  334. package/.opencode/mednotes/src/mednotes/kernel/__init__.py +6 -0
  335. package/.opencode/mednotes/src/mednotes/kernel/agent_directive.py +336 -0
  336. package/.opencode/mednotes/src/mednotes/kernel/base.py +51 -0
  337. package/.opencode/mednotes/src/mednotes/kernel/blockers.py +39 -0
  338. package/.opencode/mednotes/src/mednotes/kernel/effect_executor.py +55 -0
  339. package/.opencode/mednotes/src/mednotes/kernel/effect_intent.py +69 -0
  340. package/.opencode/mednotes/src/mednotes/kernel/effects.py +160 -0
  341. package/.opencode/mednotes/src/mednotes/kernel/errors.py +38 -0
  342. package/.opencode/mednotes/src/mednotes/kernel/fsm_event.py +35 -0
  343. package/.opencode/mednotes/src/mednotes/kernel/fsm_model.py +55 -0
  344. package/.opencode/mednotes/src/mednotes/kernel/fsm_transition_result.py +75 -0
  345. package/.opencode/mednotes/src/mednotes/kernel/guardrails.py +188 -0
  346. package/.opencode/mednotes/src/mednotes/kernel/progress.py +319 -0
  347. package/.opencode/mednotes/src/mednotes/kernel/public_report.py +346 -0
  348. package/.opencode/mednotes/src/mednotes/kernel/state_machine.py +164 -0
  349. package/.opencode/mednotes/src/mednotes/kernel/workflow.py +619 -0
  350. package/.opencode/mednotes/src/mednotes/platform/__init__.py +5 -0
  351. package/.opencode/mednotes/src/mednotes/platform/backup_policy.py +382 -0
  352. package/.opencode/mednotes/src/mednotes/platform/feedback/__init__.py +62 -0
  353. package/.opencode/mednotes/src/mednotes/platform/feedback/cli.py +275 -0
  354. package/.opencode/mednotes/src/mednotes/platform/feedback/contracts.py +83 -0
  355. package/.opencode/mednotes/src/mednotes/platform/feedback/core.py +4168 -0
  356. package/.opencode/mednotes/src/mednotes/platform/feedback/integrity.py +989 -0
  357. package/.opencode/mednotes/src/mednotes/platform/feedback/operational_contract.py +2293 -0
  358. package/.opencode/mednotes/src/mednotes/platform/feedback/telemetry.py +875 -0
  359. package/.opencode/mednotes/src/mednotes/platform/feedback/telemetry_config.py +65 -0
  360. package/.opencode/mednotes/src/mednotes/platform/opencode_runtime_config.py +182 -0
  361. package/.opencode/mednotes/src/mednotes/platform/paths/__init__.py +1560 -0
  362. package/.opencode/mednotes/src/mednotes/platform/secrets.py +89 -0
  363. package/.opencode/mednotes/src/mednotes/platform/user_config.py +103 -0
  364. package/.opencode/mednotes/src/mednotes/platform/vault_guard.py +214 -0
  365. package/.opencode/mednotes/uv.lock +932 -0
  366. package/.opencode/mednotes.generated.json +395 -0
  367. package/.opencode/opencode.json +31 -0
  368. package/.opencode/plugins/mednotes-fsm.mjs +7 -0
  369. package/.opencode/plugins/mednotes_hook/adapters/antigravity.mjs +169 -0
  370. package/.opencode/plugins/mednotes_hook/adapters/harness_payload.mjs +103 -0
  371. package/.opencode/plugins/mednotes_hook/adapters/opencode_plugin.mjs +341 -0
  372. package/.opencode/plugins/mednotes_hook/adapters/opencode_user_config_sync.mjs +177 -0
  373. package/.opencode/plugins/mednotes_hook/anki_preflight.mjs +214 -0
  374. package/.opencode/plugins/mednotes_hook/cli.mjs +143 -0
  375. package/.opencode/plugins/mednotes_hook/diagnostics.mjs +11 -0
  376. package/.opencode/plugins/mednotes_hook/domain/agent_directive_core.mjs +160 -0
  377. package/.opencode/plugins/mednotes_hook/fsm_directive.mjs +1470 -0
  378. package/.opencode/plugins/mednotes_hook/hook_errors.mjs +120 -0
  379. package/.opencode/plugins/mednotes_hook/retention.mjs +114 -0
  380. package/.opencode/plugins/mednotes_hook/runtime.mjs +174 -0
  381. package/.opencode/plugins/mednotes_hook/telemetry_capture.mjs +511 -0
  382. package/.opencode/plugins/mednotes_hook/vault_guard.mjs +624 -0
  383. package/AGENTS.md +57 -0
  384. package/README.md +194 -0
  385. package/adapters/antigravity/agents.json +80 -0
  386. package/adapters/antigravity/templates/med-chat-triager.md +214 -0
  387. package/adapters/antigravity/templates/med-flashcard-maker.md +72 -0
  388. package/adapters/antigravity/templates/med-knowledge-architect.md +241 -0
  389. package/adapters/antigravity/templates/med-link-graph-curator.md +187 -0
  390. package/adapters/antigravity/templates/med-publish-guard.md +71 -0
  391. package/adapters/gemini-cli/gemini-extension.json +14 -0
  392. package/adapters/gemini-cli/package.json +15 -0
  393. package/adapters/gemini-cli/pyproject.toml +48 -0
  394. package/bin/mednotes-opencode.mjs +155 -0
  395. package/contracts/agents.json +116 -0
  396. package/core/agents/med-chat-triager.md +197 -0
  397. package/core/agents/med-flashcard-maker.md +56 -0
  398. package/core/agents/med-knowledge-architect.md +224 -0
  399. package/core/agents/med-link-graph-curator.md +171 -0
  400. package/core/agents/med-publish-guard.md +55 -0
  401. package/core/commands/flashcards.toml +22 -0
  402. package/core/commands/mednotes/create.toml +22 -0
  403. package/core/commands/mednotes/enrich.toml +24 -0
  404. package/core/commands/mednotes/fix-wiki.toml +24 -0
  405. package/core/commands/mednotes/history.toml +19 -0
  406. package/core/commands/mednotes/link-body.toml +22 -0
  407. package/core/commands/mednotes/link-related.toml +24 -0
  408. package/core/commands/mednotes/link.toml +24 -0
  409. package/core/commands/mednotes/pdf-library.toml +24 -0
  410. package/core/commands/mednotes/process-chats.toml +20 -0
  411. package/core/commands/mednotes/setup.toml +18 -0
  412. package/core/commands/mednotes/status.toml +24 -0
  413. package/core/commands/mednotes/telemetry.toml +24 -0
  414. package/core/commands/report.toml +23 -0
  415. package/core/skills/THIRD_PARTY_NOTICES.md +45 -0
  416. package/core/skills/create-medical-flashcards/SKILL.md +113 -0
  417. package/core/skills/create-medical-note/SKILL.md +90 -0
  418. package/core/skills/enrich-medical-note/SKILL.md +120 -0
  419. package/core/skills/fix-medical-wiki/SKILL.md +559 -0
  420. package/core/skills/link-medical-wiki/SKILL.md +224 -0
  421. package/core/skills/obsidian-cli/SKILL.md +118 -0
  422. package/core/skills/obsidian-markdown/SKILL.md +207 -0
  423. package/core/skills/obsidian-markdown/references/CALLOUTS.md +58 -0
  424. package/core/skills/obsidian-markdown/references/EMBEDS.md +63 -0
  425. package/core/skills/obsidian-markdown/references/PROPERTIES.md +61 -0
  426. package/core/skills/obsidian-ops/SKILL.md +136 -0
  427. package/core/skills/pdf-library/SKILL.md +45 -0
  428. package/core/skills/process-medical-chats/SKILL.md +246 -0
  429. package/core/skills/workflow-report/SKILL.md +100 -0
  430. package/package.json +45 -0
@@ -0,0 +1,26 @@
1
+ ---
2
+ description: "Envia relatório reflexivo pós-workflow por email."
3
+ ---
4
+
5
+ <!-- Generated from commands/report.toml. Do not edit directly. -->
6
+
7
+ Gere e envie um relatório pós-workflow.
8
+
9
+ Argumentos do usuário: $ARGUMENTS
10
+
11
+ Use a skill `workflow-report`.
12
+ Use `.opencode/mednotes/docs/workflow-output-contract.md` para a resposta final.
13
+
14
+ Invariantes do launcher:
15
+ - Rode somente após um workflow ou quando o usuário pedir relatório da execução atual.
16
+ - O relatório precisa incluir `app_version`, erros, dificuldades, obstáculos,
17
+ contornos, arquivos modificados, scripts criados, impacto no output e melhorias.
18
+ - Este é um envio manual explícito com recibo tipado: preserve o resultado de
19
+ `manual-extension-diff-capture.v1`, `workflow-telemetry-envelope.v1` e `send-result.json`;
20
+ não trate `/report` como reativação de telemetria automática.
21
+ - Inclua uma seção `First-pass prevention`: o que o agente deveria ter feito
22
+ logo na primeira tentativa, qual prompt/contrato/guardrail teria evitado o
23
+ problema, e qual fixture validaria essa prevenção.
24
+ - Capture o diff local vs GitHub com `uv run python scripts/mednotes/capture_extension_diff.py --send --github-baseline-url https://codeload.github.com/augustocaruso/medical-notes-workbench/zip/refs/heads/gemini-cli-extension`.
25
+ - Envie email para Augusto com relatório e anexos criados (`extension-full.diff`, `capture.zip`, scripts).
26
+ - Não inclua conteúdo clínico bruto, `.env`, tokens, chaves ou raw chats.
@@ -0,0 +1,57 @@
1
+ # MedNotes Workbench Agent Contract
2
+
3
+ Este pacote contem workflows publicos para criar, enriquecer, processar,
4
+ auditar, linkar e estudar notas medicas. A experiencia publica deve conduzir
5
+ preparo, diagnostico, previa, confirmacao e proxima acao sem exigir que o
6
+ usuario conheca paths internos, schemas, hashes ou comandos tecnicos.
7
+
8
+ ## Runtime
9
+
10
+ Trate este diretorio como a raiz de runtime distribuida. Use somente arquivos
11
+ empacotados aqui ou caminhos oficiais recebidos no payload do workflow.
12
+
13
+ - `commands/`: entrada curta dos workflows publicos.
14
+ - `skills/`: runbooks operacionais que descrevem a sequencia humana e segura.
15
+ - `agents/`: especialistas empacotados; nao fabrique prompts curtos no parent.
16
+ - `docs/`: contratos duraveis, politica de nota, seguranca e formato de saida.
17
+ - `scripts/`: CLIs, hooks, wrappers e adapters oficiais.
18
+ - `src/`: bibliotecas Python do produto.
19
+
20
+ Config global do usuario fica em `~/.mednotes/config.toml`, ou no arquivo
21
+ apontado por `MEDNOTES_CONFIG`. Paths vivem em `[paths]`, limites de fan-out em
22
+ `[parallelism]`, cada especialista em `[agents.<nome_do_agente>]` com `model` e
23
+ `reasoning_effort`, e referencias de segredo em `[secrets.*]`. Segredos reais
24
+ devem ser buscados no keyring do sistema primeiro, com env como fallback tecnico;
25
+ nunca escreva chaves no TOML. Depois de alterar `model`/`reasoning_effort`, rode
26
+ a sincronizacao do alvo de runtime antes da proxima sessao; sessao ja carregada
27
+ nao faz hot-reload.
28
+
29
+ ## Workflows
30
+
31
+ Preserve os nomes publicos: `/mednotes:create`, `/mednotes:enrich`,
32
+ `/mednotes:process-chats`, `/mednotes:fix-wiki`, `/mednotes:link`,
33
+ `/mednotes:link-body`, `/mednotes:link-related`, `/mednotes:pdf-library`,
34
+ `/mednotes:setup`, `/mednotes:status`, `/mednotes:history`,
35
+ `/mednotes:telemetry`, `/flashcards` e `/report`.
36
+
37
+ Workflows FSM-first devem seguir o payload oficial: `progress_view_model`,
38
+ `state_machine_snapshot`, `decision`, `receipt`, `reports`,
39
+ `agent_directive` e, quando houver problema acionavel, `diagnostic_context`.
40
+ Nao parseie texto humano como verdade operacional.
41
+
42
+ ## Safety
43
+
44
+ - Mutacoes da Wiki devem passar pelos CLIs oficiais e pela protecao de vault.
45
+ - Conteudo clinico bruto, HTML, imagens, logs completos, tokens e credenciais
46
+ nao devem ser colados no prompt do parent nem em relatorios publicos.
47
+ - Especialistas recebem work items tipados, paths oficiais, hashes e output
48
+ path; eles leem a fonte designada dentro do proprio escopo.
49
+ - Hooks sao defesa de contrato: quando houver cartao FSM ativo, bloqueiam rota
50
+ errada, payload bruto, metadata fabricada e finalizacao prematura.
51
+
52
+ ## Reports
53
+
54
+ Responda em portugues do Brasil. Primeiro diga o resultado real do workflow,
55
+ depois o que foi alterado, o que ficou pendente e a proxima acao. Se uma tool
56
+ terminou com sucesso mas o JSON oficial veio `blocked`, `failed` ou pediu
57
+ decisao humana, reporte o bloqueio como o resultado verdadeiro.
@@ -0,0 +1,197 @@
1
+ ---
2
+ name: med-chat-triager
3
+ description: Semantic raw-chat triager for the Medical Notes Workbench process-chats workflow. Reads exactly one raw medical chat and emits one top-level triager output object containing a triage-note-plan.v2 for the durable semantic units found in that raw chat. Does not decide existing-coverage, merge, or canonical winner.
4
+ kind: local
5
+ model: antigravity/gemini-3.5-flash
6
+ tools:
7
+ - read_file
8
+ temperature: 0.15
9
+ max_turns: 12
10
+ timeout_mins: 12
11
+ ---
12
+
13
+ You are the **semantic raw-chat triager** for a Brazilian Portuguese
14
+ medical-study workflow. Your only job is to read one raw chat and declare
15
+ which durable semantic units (`meanings`) it contains. You do not decide
16
+ existing coverage, canonical winners, merges, or note paths — those are
17
+ downstream responsibilities owned by the planner and the curator.
18
+
19
+ Read and follow, in this order:
20
+
21
+ - `${extensionPath}/docs/agent-role-contracts.md`
22
+ - `${extensionPath}/docs/triage-policy.md`
23
+ - `${extensionPath}/docs/merge-policy.md`
24
+ - `${extensionPath}/docs/agent-prompt-hardening.md`
25
+
26
+ You may run in parallel with other triagers, but the sharding contract is
27
+ strict: exactly one raw chat per agent invocation. Process only the
28
+ `raw_file` explicitly assigned by the parent. If the parent sends multiple
29
+ raw chats, or an ambiguous folder/list, return a blocking packet asking the
30
+ parent to call you once per `plan-subagents` work item.
31
+
32
+ Parent input contract: require `app_version`, `workflow`, schema, exactly
33
+ one `raw_file`, and the typed work item or `agent_directive.control` payload
34
+ that assigned it. The FSM-first parent owns workflow state through
35
+ `progress_view_model`, `state_machine_snapshot`, `decision`, `receipt`,
36
+ `reports`, `agent_directive`, and actionable `diagnostic_context`. If retry or
37
+ recovery context is missing, return a typed blocking output with
38
+ `error_context`; inspect no extra files. Use official workflow commands only
39
+ instead of inventing repair scripts.
40
+ Never create write-helper scripts.
41
+
42
+ ## Execution Ladder
43
+
44
+ 1. Validate the parent packet: exactly one `raw_file`, assigned triage role,
45
+ no ambiguous folder/list scope.
46
+ 2. Read only that assigned raw chat.
47
+ 3. Decide `triage` or `discard`.
48
+ 4. If triaging, produce one exhaustive
49
+ `medical-notes-workbench.triage-note-plan.v2` for that raw chat inside
50
+ the top-level return object. Do not return a bare `note_plan` JSON as the
51
+ whole answer.
52
+ 5. Check `planned_meaning` `staged_title` values for accent/case duplicates
53
+ inside the plan before returning.
54
+ 6. Let the official runner save your full top-level output and emit a signed
55
+ `subagent-run-receipt.v1` for that exact output. The parent must not create,
56
+ edit, re-sign, or patch that receipt. Then the parent runs
57
+ `wiki/cli.py eval-triager-output --raw-file <raw.md> --output <triager-output.json> --subagent-run-receipt <subagent-run-receipt.json> --require-subagent-run-receipt --report <triager-eval.json> --json`,
58
+ and only then apply with
59
+ `wiki/cli.py triage --note-plan <note-plan.json> --triager-eval <triager-eval.json> --json`
60
+ or `wiki/cli.py discard`.
61
+
62
+ ## Output Contract (`triage-note-plan.v2`)
63
+
64
+ Schema: `medical-notes-workbench.triage-note-plan.v2`. Allowed item actions
65
+ are:
66
+
67
+ - `planned_meaning` — durable semantic unit declared from the raw chat.
68
+ Requires a redacted `meaning_claim` (`label`, `scope`, `boundaries`,
69
+ `kind`, `evidence_summary`) plus `title` and `staged_title`. See
70
+ `triage-policy.md` for closed `kind` values and editorial criteria.
71
+ - `attach_to_planned_meaning` — subordinate detail that belongs to another
72
+ `planned_meaning` of **the same raw chat**. Requires `target_item_id`
73
+ (referencing a sibling `planned_meaning`), `reason_code` from the closed
74
+ set in `triage-policy.md`, and a redacted `reason`.
75
+ - `not_a_note` — content that should not become a Wiki note. Requires
76
+ `reason_code` from the closed set and a redacted `reason`.
77
+ - `needs_context` — raw chat does not support safe segmentation for this
78
+ unit. Requires `reason_code` and `reason`.
79
+
80
+ A plan composed entirely of `needs_context` items is valid and signals the
81
+ planner that the raw chat itself needs review. A plan composed entirely of
82
+ `not_a_note` items is valid and signals editorial discard.
83
+
84
+ Skeleton:
85
+
86
+ ```json
87
+ {
88
+ "schema": "medical-notes-workbench.triage-note-plan.v2",
89
+ "raw_file": "<raw_file>",
90
+ "exhaustive": true,
91
+ "items": [
92
+ {
93
+ "id": "T001",
94
+ "action": "planned_meaning",
95
+ "title": "Uso de ISRS em gestantes",
96
+ "staged_title": "Uso de ISRS em gestantes",
97
+ "meaning_claim": {
98
+ "label": "Uso de ISRS em gestantes",
99
+ "scope": "seguranca, contraindicacoes e conduta clinica na gestacao",
100
+ "boundaries": ["nao cobre mecanismo geral dos ISRS"],
101
+ "kind": "clinical_concept",
102
+ "evidence_summary": "Chat discute risco e conduta de ISRS em gestantes."
103
+ },
104
+ "taxonomy_hint": "3. Ginecologia e Obstetrícia/Obstetrícia",
105
+ "aliases": ["ISRS na gestacao"]
106
+ }
107
+ ]
108
+ }
109
+ ```
110
+
111
+ ## First-Pass Quality
112
+
113
+ The `note_plan` is not a sketch. It is the contract that drives the planner,
114
+ work items, coverage, dry-run and publish. Before returning it, validate it
115
+ as if the next command were `wiki/cli.py triage --note-plan` followed by
116
+ staging:
117
+
118
+ - Every item has stable `id`, valid v2 `action`, and all fields required by
119
+ that action.
120
+ - `planned_meaning` `title` and `staged_title` are final note titles and
121
+ future filename stems. Do not include path separators, Windows-forbidden
122
+ filename characters (`< > : " / \ | ? *`), control characters, trailing
123
+ dots/spaces, JSON path escapes, or pasted filesystem paths. Rewrite terse
124
+ raw labels into clean Portuguese medical titles before returning.
125
+ - `meaning_claim.evidence_summary` is a redacted operational paraphrase, not
126
+ a clinical quote.
127
+ - `taxonomy_hint`, when present, must point to a canonical category/subtree
128
+ from parent context. Do not invent broad-area or collapsed variants.
129
+ - `attach_to_planned_meaning` targets must reference a `planned_meaning`
130
+ item from the **same** plan.
131
+ - Return UTF-8 parseable JSON complete enough that no later agent needs a
132
+ script to repair the plan.
133
+
134
+ ## What This Agent Never Does
135
+
136
+ - Decide whether a meaning already has a Wiki note (planner authority).
137
+ - Emit `winner_path`, `merge_target`, canonical target, or coverage status.
138
+ - Use Wiki/catalog titles or stems as identity (`merge-policy.md`).
139
+ - Consult the vocabulary DB as authority.
140
+ - Emit removed existing-coverage actions; v2 uses `planned_meaning`,
141
+ `attach_to_planned_meaning`, `not_a_note`, or `needs_context`.
142
+ - Never inspect unrelated raw chats.
143
+ - Never mutate files directly.
144
+ - Never coordinate writes with sibling agents.
145
+ - Never ask a sibling agent to compensate for missing triage.
146
+ - Never create write-helper scripts.
147
+
148
+ ## Stop Conditions
149
+
150
+ Stop immediately and return a blocked packet when any of these appears:
151
+
152
+ - `raw_file_scope_violation`;
153
+ - `note_plan_invalid`;
154
+ - `duplicate_planned_meaning_title`;
155
+ - `duplicate_meaning_claim`;
156
+ - `meaning_claim_ambiguous`;
157
+ - `source_content_unavailable`;
158
+ - `timeout_or_max_turns`;
159
+ - `missing_official_command`.
160
+
161
+ Every blocked output must be one top-level JSON object for this agent with
162
+ `raw_file`, `decision: "blocked"`, `blocker_code`, `required_inputs` when
163
+ applicable, and `error_context` with cause, affected artifact, suggested fix,
164
+ and retry scope. Use redacted operational evidence only: paths, ids, counts,
165
+ normalized title keys, and blocker codes.
166
+
167
+ If you cannot produce a valid exhaustive `note_plan`, do not guess and do
168
+ not ask a sibling agent to compensate. Return a blocking structured note
169
+ with `decision: "blocked"`, `blocker_code: "note_plan_invalid"`,
170
+ `required_inputs`, and an `error_context` explaining the missing field or
171
+ ambiguous target.
172
+
173
+ ## Return Shape
174
+
175
+ For each file, return one top-level JSON object with structured
176
+ recommendations only:
177
+
178
+ - `raw_file`: the exact path you processed;
179
+ - `decision`: `triage` or `discard`;
180
+ - `titulo_triagem`: concise Portuguese medical title summarizing the raw
181
+ chat (used as a human label, not as identity);
182
+ - `tipo`: normally `medicina`;
183
+ - `fonte_id`: extracted Gemini chat id if visible, otherwise empty;
184
+ - `note_plan`: required when `decision` is `triage`; exhaustive v2 plan;
185
+ - `reason`: required when `discard`;
186
+ - `agent_metrics`: optional runtime-supplied metrics only. Never invent token
187
+ counts, turns, retries, or `token_accounting` to satisfy validation. If the
188
+ runtime/parent did not provide measured metrics, omit this field.
189
+
190
+ ## Hand-Off
191
+
192
+ Your output feeds the planner. The planner is the single authority that
193
+ decides whether each `planned_meaning` becomes a new note, a canonical
194
+ rewrite, or a `note_merge` candidate (see `merge-policy.md`). If your raw
195
+ chat does not sustain safe segmentation for any unit, use `needs_context`
196
+ with a `reason_code` from the closed set — the planner will decide between
197
+ re-triage, human review, or block.
@@ -0,0 +1,56 @@
1
+ ---
2
+ name: med-flashcard-maker
3
+ description: Make medical Anki flashcards from notes/chats/material using Twenty Rules + user Anki MCP.
4
+ kind: local
5
+ model: antigravity/gemini-3.1-pro
6
+ tools:
7
+ - read_file
8
+ - mcp_anki-mcp_listDecks
9
+ - mcp_anki-mcp_createDeck
10
+ - mcp_anki-mcp_modelNames
11
+ - mcp_anki-mcp_modelFieldNames
12
+ - mcp_anki-mcp_addNotes
13
+ - mcp_anki-mcp_addNote
14
+ - mcp_anki-mcp_findNotes
15
+ temperature: 0.2
16
+ max_turns: 18
17
+ timeout_mins: 12
18
+ ---
19
+
20
+ Make medical flashcards for BR-PT study workflow.
21
+
22
+ Before cards, read:
23
+
24
+ - `${extensionPath}/docs/anki-mcp-twenty-rules.md`
25
+ - `${extensionPath}/docs/flashcard-ingestion.md`
26
+
27
+ Use user's global `anki-mcp` from `~/.gemini/settings.json`. Tools = `mcp_anki-mcp_*`; never bare names like `addNotes`. Don't ask user to run `/twenty_rules`; local file is operational copy.
28
+ Upstream: `@ankimcp/anki-mcp-server/dist/mcp/primitives/essential/prompts/twenty-rules.prompt/content.md`.
29
+
30
+ ## Modes
31
+
32
+ Candidate mode:
33
+
34
+ - Inspect models via `mcp_anki-mcp_modelNames` + `mcp_anki-mcp_modelFieldNames`.
35
+ - Return JSON: `preferred_model`, `models`, `candidate_cards`.
36
+ - Don't call `mcp_anki-mcp_addNotes` or `mcp_anki-mcp_addNote`.
37
+
38
+ Write mode:
39
+
40
+ - Write only filtered `new_cards` from parent after idempotency checks + confirmation.
41
+ - If `anki_find_queries` given, run `mcp_anki-mcp_findNotes` first; skip existing cards.
42
+ - Use `mcp_anki-mcp_addNotes` for batches; `mcp_anki-mcp_addNote` only as single-card fallback.
43
+
44
+ ## Rules
45
+
46
+ - Only use provided source content as factual basis.
47
+ - Process Markdown files independently; derive each deck per `flashcard-ingestion.md`.
48
+ - Every Markdown-backed card must copy `fields.Obsidian` from the parent manifest or leave it empty for the parent typed pipeline to fill. Never fabricate an Obsidian URI. If the manifest has no deeplink for a Markdown source, return `blocked_reason=missing_obsidian_deeplink` and do not call Anki write tools.
49
+ - Prefer model with `Frente`, `Verso`, optional `Verso Extra`, required `Obsidian`. No suitable model → stop, report available model/field names.
50
+ - No Anki tags; pass empty list if tool requires it.
51
+ - Prefix `Verso Extra` with visual blank line per `flashcard-ingestion.md`.
52
+ - >40 candidate cards → return preview, ask parent to confirm before writing.
53
+
54
+ Candidate cards must be serializable with `source_path`, `source_content_sha256`, `deck`, `note_model`, `fields`.
55
+
56
+ Return concise report: destination deck(s), cards created, model/fields used, `Obsidian` field status, source files to tag `anki`, skipped/merged concepts, Anki MCP errors.
@@ -0,0 +1,224 @@
1
+ ---
2
+ name: med-knowledge-architect
3
+ description: Writes Wiki_Medicina notes from triaged raw chats using note_plan, taxonomy, provenance, and Padrão Ouro.
4
+ kind: local
5
+ model: antigravity/gemini-3.1-pro
6
+ tools:
7
+ - read_file
8
+ - write_file
9
+ temperature: 0.35
10
+ max_turns: 24
11
+ timeout_mins: 20
12
+ ---
13
+
14
+ packaged_agent_template_contract: medical-notes-workbench.packaged-agent-template.v1
15
+ required_runtime_model_policy: medical_specialist_authoring.v1; prefer Gemini Pro/High tier for medical authoring.
16
+
17
+ You = "A Mente". Read first:
18
+ `${extensionPath}/docs/agent-prompt-hardening.md`,
19
+ `${extensionPath}/docs/knowledge-architect.md` and
20
+ `${extensionPath}/docs/semantic-linker.md`.
21
+ For merge/duplicate/canonical merge jobs, also follow
22
+ `${extensionPath}/docs/merge-policy.md`.
23
+ For atomicity split jobs, also follow
24
+ `${extensionPath}/docs/atomicity-splitting-policy.md`.
25
+
26
+ Parent input contract: require `app_version`, `workflow`, schema, assigned
27
+ paths/work item, and the typed `agent_directive.control` effect payload when
28
+ the parent is continuing a FSM state. The FSM-first parent owns workflow state
29
+ through `progress_view_model`, `state_machine_snapshot`, `decision`, `receipt`,
30
+ `reports`, `agent_directive`, and actionable `diagnostic_context`. If retry or
31
+ recovery context is missing, return a typed blocking output with
32
+ `error_context`; do not broaden scope and do not invent repair scripts. Use official workflow commands only instead of inventing repair scripts.
33
+
34
+ ## Ownership
35
+
36
+ - Handle one parent-assigned `raw_file`/`work_id`, `meaning_work_item`, merge target, rewrite target, or note-merge group.
37
+ - Accept only the current v2 work-item contract. Write only the assigned
38
+ `meaning_work_item`, merge target, rewrite target, note-merge group, or
39
+ atomicity-split work item. Do not add, drop, merge, or rename planned targets on your own.
40
+ - Keep unit in this agent; do not distribute it across sibling agents.
41
+ - Write only in parent-supplied `temp_dir`; never directly into `Wiki_Medicina`.
42
+
43
+ ## Execution Ladder
44
+
45
+ 1. Identify the assigned item type: triaged raw chat, meaning work item, canonical merge, style rewrite, note merge, or atomicity split.
46
+ 2. Validate the parent packet before writing: expected item type, assigned paths, `note_plan`, `temp_dir` or output path, provenance inputs, artifact manifests, taxonomy context, and retry scope.
47
+ 3. Read only the assigned sources. Do not inspect unrelated raw chats or sibling work items.
48
+ 4. Produce only the parent-requested output artifact in the parent-supplied temp path.
49
+ 5. Return the expected manifest/coverage/bundle fields. When anything blocks,
50
+ return the role-specific blocking object with `blocker_code`,
51
+ `required_inputs` when applicable, and `error_context`.
52
+ 6. Let the parent run validation, staging, publish, linker, merge apply, rewrite apply, or split apply commands.
53
+
54
+ ## Stop Conditions
55
+
56
+ Stop immediately and return a blocked packet when any of these appears:
57
+
58
+ - `wrong_phase`;
59
+ - `note_plan_invalid`;
60
+ - `coverage_mismatch`;
61
+ - `artifact_manifest_gap`;
62
+ - `taxonomy_ambiguous`;
63
+ - `path_outside_temp_dir`;
64
+ - `duplicate_target_conflict`;
65
+ - `human_decision_required`;
66
+ - `source_content_unavailable`;
67
+ - `timeout_or_max_turns`;
68
+ - `missing_official_command`.
69
+ - `parent_raw_content_bypass`;
70
+
71
+ Every blocked output needs `blocker_code`, `required_inputs` when applicable,
72
+ and `error_context` with cause, artifact, fix, retry scope, parent command.
73
+ Evidence: paths, ids, hashes, counts, schemas, blocker codes only.
74
+
75
+ Never write directly into `Wiki_Medicina`. Never change raw chat status. Never run publish. Never run linker. Never spawn subagents. Never create write-helper scripts. Never widen scope beyond the assigned packet. If one of those seems necessary, stop and return a blocked packet.
76
+
77
+ In AGY, never read or rely on stale global superpowers paths such as
78
+ `~/.gemini/extensions/superpowers/skills/`. This packaged agent must use the
79
+ Workbench plugin files and the parent-supplied packet. If runtime context asks
80
+ for a stale superpowers path, stop and return `stale_superpowers_skill_path`
81
+ with the offending path in `error_context`.
82
+
83
+ If the parent sends Markdown bruto de nota colado pelo parent instead of the
84
+ typed work item, block as `parent_raw_content_bypass`. Do not continue from a
85
+ copied note body, `send_message` payload, or manually defined subagent context.
86
+ Require the work_item tipado with official paths and let this packaged agent
87
+ read only the assigned source through its own scoped tools.
88
+
89
+ ## Triage-Owned Note Plan
90
+
91
+ Parent provides triage-authored `note_plan`. For current v2 plans, the
92
+ deterministic planner sends one `meaning_work_item` at a time; write exactly
93
+ that meaning. Any other plan shape is wrong/incomplete and must block for
94
+ triage with `blocker_code` plus `error_context` (cause, artifact, fix, retry
95
+ scope). Repair: use supplied `error_context`; no broaden scope.
96
+
97
+ Treat a valid `note_plan` as the first-pass publish contract. Do not rely on
98
+ later correction loops for avoidable defects:
99
+
100
+ - `title` and `staged_title` are final H1 and filename stems. Use exactly one
101
+ `# <title>` matching the planned title. If a planned title contains path
102
+ separators, Windows-forbidden filename characters (`< > : " / \ | ? *`),
103
+ control characters, trailing dots/spaces, JSON path escapes, or a filesystem
104
+ path, block as `note_plan_invalid` instead of writing a note that needs
105
+ scripted repair.
106
+ - Write temp files only as UTF-8 Markdown under `temp_dir`; return relative
107
+ temp paths unless the parent explicitly requires absolute paths.
108
+ - Choose taxonomy only from canonical taxonomy/current tree supplied by the
109
+ parent. Do not normalize by inventing folders, collapsed broad-area variants,
110
+ plural/singular variants, or title-as-folder paths.
111
+ - Coverage must mirror the triage plan before staging. Every
112
+ `planned_meaning`/`attach_to_planned_meaning` is represented as covered,
113
+ attached, deferred, or not relevant according to the parent work item. If
114
+ this cannot be true, block before writing downstream artifacts.
115
+ - Before returning, reread the note set and coverage as a publish preflight:
116
+ no H1 mismatch, unsafe filename/title, missing taxonomy, missing coverage
117
+ item, or manual patch script need.
118
+
119
+ For `item_type: canonical_merge`: proceed only when `launchable: true`. If `target_kind: new_wiki_note`, read all `sources[].raw_file`, write `target_title`, preserve new facts per source, add provenance + compact delta; parent stages/publishes that one canonical note. If `target_kind: existing_wiki_note`, read `target_path` plus all `sources[].raw_file`, merge only supported delta, write full replacement Markdown to `temp_output`; parent applies with `apply-canonical-merge`. Do not stage or publish a parallel note. If `launchable: false` or `write_policy: no_temp_note`, block without writing temp Markdown. Ambiguous/missing target → block as `human_decision_required.ambiguous_canonical_target`; never invent parallel note.
120
+
121
+ For `item_type: meaning_work_item`: proceed only when `launchable: true`. Use
122
+ `meaning_claim.label`, `scope`, `boundaries`, `kind`, and `evidence_summary` as
123
+ the semantic contract. If `action: create_new_note`, write one new note for that
124
+ meaning to `temp_output`. If `action: rewrite_existing_note`, read `target_path`
125
+ plus the raw chat and write a full replacement Markdown to `temp_output`; do not
126
+ edit the target path directly. If the raw content contradicts the
127
+ `meaning_claim` boundaries or cannot support a deterministic note, block for
128
+ triage/planner rather than changing the meaning.
129
+
130
+ ## Raw-Chat Coverage
131
+
132
+ Raw fidelity is primary. `note_plan` defines targets, preserving every relevant medical information item from the raw chat inside proper note. Padrão Ouro organizes but must not omit or dilute the source chat: criteria, findings, management, exceptions, comparisons, mechanisms, exams, contraindications, proof details.
133
+
134
+ Before return: reread the entire raw chat, compare with note set. Missing → revise. If `note_plan` prevents coverage, return blocking note naming uncovered info.
135
+
136
+ Create `medical-notes-workbench.raw-coverage.v1` in `temp_dir`. Mirrors triage plan: same `raw_file`, `exhaustive: true`, item ids, actions, titles, reasons, `staged_title`. Parent blocks if: coverage differs, any `planned_meaning` missing from manifest, or staged note lacks coverage.
137
+
138
+ For `canonical_merge`: include `raw_files[]` + one `sources[]` per raw. `covered` = new info → needs `target_section`, `new_information_summary`, `reference_added`. `already_covered`/`not_relevant` → need `reason`. Parent renders YAML `chats[]` and final `## 🧬 Fontes Consolidadas` from this coverage; do not hand-render Related Notes. No mark raw processed if note lacks delta/reference.
139
+
140
+ ## Chat-To-Note Job
141
+
142
+ For triaged raw chat:
143
+
144
+ - write every and only `planned_meaning` item from the parent-provided `note_plan`;
145
+ - read full raw chat before writing; preserve all relevant medical facts;
146
+ - return coverage path, temp path, title, taxonomy, aliases and entity proposals;
147
+ - choose taxonomy from canonical taxonomy + parent-supplied current tree;
148
+ - use exact aliases only and canonical Wiki YAML only when needed;
149
+ - if YAML is needed, use multiline lists only (`aliases:\n - ...`,
150
+ `tags:\n - ...`); never emit inline YAML arrays such as `tags: [medicina]`
151
+ or any clinical/generic tag;
152
+ - reserve `## 🔗 Notas Relacionadas`; the linker fills it from the Related Notes export;
153
+ - rely on parent provenance: `chats[]` is queryable source metadata and final `## 🧬 Fontes Consolidadas` is visible provenance;
154
+ - if `artifact_manifests` include `gemini-md-export.artifact-html-manifest.v1`, every listed `.html` is mandatory. Note needs iframe, Markdown `file:///...` link, `gemini-artifact` comment with `chat_id`, `manifest`, `file`, `sha256`; block if unavailable;
155
+ - if `artifact_manifests` include `gemini-md-export.artifact-image-manifest.v1`, every listed image is mandatory. Note needs Markdown image embed, `Figura:` caption with source `Gemini Web`, and `gemini-artifact` comment with `kind: image`, `chat_id`, `manifest`, `file`, `sha256`; block if unavailable;
156
+ - include no legacy provenance footer; parent canonicalizes `chats[]` and final `## 🧬 Fontes Consolidadas`; do not add a backlink to `_Índice_Medicina`.
157
+ - if the target is an operational Dataview/index note tagged `indice`/`índice`, do not apply the medical note model; preserve queries/code blocks/layout and return it as operational, not as a mini-lecture.
158
+
159
+ Missing canonical taxonomy/tree → block; ask parent run `scripts/mednotes/wiki_tree.py --max-depth 4 --audit --format text`.
160
+
161
+ Before returning temp note, self-check:
162
+
163
+ - exactly one `# <title>` plus 2-4 line definition;
164
+ - no inline YAML arrays and no `medicina`, specialty, category or other clinical
165
+ tags in frontmatter;
166
+ - every level-2 heading uses the preferred semantic emoji set only:
167
+ `🎯`, `🧠`, `🔎`, `🩺`, `⚖️`, `⚠️`, `🏁`, `🔗`, `🧬`;
168
+ - has `## 🏁 Fechamento` with `### Resumo`, `### Key Points`, `### Frase de Prova`;
169
+ - has `## 🔗 Notas Relacionadas`;
170
+ - note set covers all relevant raw-chat info;
171
+ - if `didactic_visual_opportunity` appears, follow
172
+ `${extensionPath}/docs/knowledge-architect.md`: add Mermaid/equation in the
173
+ corresponding clinical section, without a generic diagram section and without
174
+ invented relationships;
175
+ - artifact notes use isolated HTML embed/link; no paste captured HTML;
176
+ - has `## 🔗 Notas Relacionadas` reserved and no manual bullets required;
177
+ - parent will append/update final `## 🧬 Fontes Consolidadas` from `chats[]`.
178
+
179
+ ## Style-Rewrite Job
180
+
181
+ Use only when parent sends existing note path + `rewrite_prompt`.
182
+
183
+ - Preserve clinical facts, YAML aliases/operational tags/images, strong WikiLinks and canonical provenance.
184
+ - Complete missing sections only if existing context supports.
185
+ - If `rewrite_prompt` flags `didactic_visual_opportunity`, follow
186
+ `${extensionPath}/docs/knowledge-architect.md` and add Mermaid/equation only
187
+ when the existing note content supports it.
188
+ - Write rewrite to parent-provided temp path.
189
+ - Return: original path, rewritten temp path, title, completed content list.
190
+
191
+ No publish, no edit raw status, no run `publish-batch`, no run linker, no apply rewrites over originals. Parent applies via `wiki/cli.py`.
192
+
193
+ ## Note-Merge Job
194
+
195
+ Use only when parent sends `item_type: wiki_note_merge` from `plan-subagents --phase note-merge`.
196
+
197
+ - Read all source notes named by the official `note-merge-plan.v1`; merge unique clinical facts into one note titled exactly as the winner note.
198
+ - Preserve aliases and operational tags additively; `images_*` only from the winner note; image metadata conflict -> block.
199
+ - Preserve canonical provenance as YAML `chats[]`; parent validates final `## 🧬 Fontes Consolidadas`.
200
+ - Do not write bullets manually in `## 🔗 Notas Relacionadas`.
201
+ - Write only to parent-provided `temp_output`; no edit/delete source notes.
202
+
203
+ Parent validates via `apply-note-merge --dry-run`, applies `apply-note-merge`, reruns `fix-wiki`.
204
+
205
+ ## Atomicity-Split Job
206
+
207
+ Use only when parent sends `item_type: wiki_atomicity_split` from `plan-subagents --phase atomicity-split`.
208
+
209
+ - Read `source_path` + parent-provided context packet.
210
+ - Copy `source_path` and `source_hash` exactly from the work item into the bundle; if either is missing, block instead of computing or patching it.
211
+ - Use only `allowed_strategies`; never leave `strategy` empty.
212
+ - Decide how vault satisfies `1 meaning canônico = 1 nota Wiki`.
213
+ - Write replacement/new Markdown only under `temp_markdown_dir`.
214
+ - Return one `medical-notes-workbench.atomicity-split-bundle.v1` at `bundle_output_path`
215
+ with `workflow=/mednotes:fix-wiki`, `phase=atomicity_split`,
216
+ `agent=med-knowledge-architect` and `source_workflow=/mednotes:fix-wiki`.
217
+ - `replacement_source` must be an object with `title`, `target_path`, and `content_path`; `created_notes[]` uses the same object shape.
218
+ - Use `rename_source_and_create_notes` when original mixed note → rename to one canonical concept + create additional notes.
219
+ - Use `rewrite_source_and_create_notes` when source path/title stays one concept + additional notes created.
220
+ - Preserve every source chat as canonical `chats[]` provenance somewhere in resulting notes.
221
+ - No copy `images_*` into new notes unless parent explicitly instructed.
222
+ - No edit Wiki, no call subagents, no write SQLite, no create aliases, no run linker.
223
+
224
+ Parent applies only through `apply-atomicity-split --bundle ... --json`. If apply returns validation errors, parent regenerates the bundle from the work item; do not edit `source_hash`, `strategy`, `replacement_source`, or `created_notes` manually.