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,61 @@
1
+ # Properties (Frontmatter) Reference
2
+
3
+ Properties use YAML frontmatter at the start of a note:
4
+
5
+ ```yaml
6
+ ---
7
+ title: My Note Title
8
+ date: 2024-01-15
9
+ tags:
10
+ - project
11
+ - important
12
+ aliases:
13
+ - My Note
14
+ - Alternative Name
15
+ cssclasses:
16
+ - custom-class
17
+ status: in-progress
18
+ rating: 4.5
19
+ completed: false
20
+ due: 2024-02-01T14:30:00
21
+ ---
22
+ ```
23
+
24
+ ## Property Types
25
+
26
+ | Type | Example |
27
+ |------|---------|
28
+ | Text | `title: My Title` |
29
+ | Number | `rating: 4.5` |
30
+ | Checkbox | `completed: true` |
31
+ | Date | `date: 2024-01-15` |
32
+ | Date & Time | `due: 2024-01-15T14:30:00` |
33
+ | List | `tags: [one, two]` or YAML list |
34
+ | Links | `related: "[[Other Note]]"` |
35
+
36
+ ## Default Properties
37
+
38
+ - `tags` - Note tags (searchable, shown in graph view)
39
+ - `aliases` - Alternative names for the note (used in link suggestions)
40
+ - `cssclasses` - CSS classes applied to the note in reading/editing view
41
+
42
+ ## Tags
43
+
44
+ ```markdown
45
+ #tag
46
+ #nested/tag
47
+ #tag-with-dashes
48
+ #tag_with_underscores
49
+ ```
50
+
51
+ Tags can contain: letters (any language), numbers (not first character), underscores `_`, hyphens `-`, forward slashes `/` (for nesting).
52
+
53
+ In frontmatter:
54
+
55
+ ```yaml
56
+ ---
57
+ tags:
58
+ - tag1
59
+ - nested/tag2
60
+ ---
61
+ ```
@@ -0,0 +1,136 @@
1
+ ---
2
+ name: obsidian-ops
3
+ description: Use when an agent will read, create, modify, move, delete, restore, or inspect Obsidian vault files, Wiki_Medicina notes, .obsidian data, plugin exports, vault Git state, or vault history.
4
+ ---
5
+
6
+ # Obsidian Ops
7
+
8
+ Camada operacional obrigatória antes de qualquer interação com vault Obsidian.
9
+ Ela define segurança e roteia para o workflow certo; não substitui os comandos
10
+ públicos nem duplica contratos longos.
11
+
12
+ ## Fonte Canônica
13
+
14
+ - Vault history, restore, rollback e pontos de restauração:
15
+ `${extensionPath}/docs/vault-version-control.md` e
16
+ `${extensionPath}/scripts/vault/vault_git.py`.
17
+ - Wiki e workflows médicos:
18
+ `${extensionPath}/scripts/mednotes/wiki/cli.py`.
19
+ - Taxonomia, estilo e formato de nota:
20
+ `${extensionPath}/docs/knowledge-architect.md`.
21
+ - Links, grafo, Related Notes e body linker:
22
+ `${extensionPath}/docs/semantic-linker.md`.
23
+ - Proteção do vault e rollback:
24
+ `${extensionPath}/docs/vault-version-control.md`.
25
+ - Resposta final ao usuário:
26
+ `${extensionPath}/docs/workflow-output-contract.md`.
27
+
28
+ ## Política
29
+
30
+ - Valide `wiki_dir` antes de ler ou mutar. A fonte é
31
+ `~/.mednotes/config.toml` em `[paths].wiki_dir`;
32
+ ambiguidade bloqueia.
33
+ - Antes de mutar vault versionado, inspecione o estado com Git ou com a CLI de
34
+ segurança do vault. Não sobrescreva mudança do usuário.
35
+ - Use `wiki/cli.py` para operações Wiki. Não invente protocolos ou scripts
36
+ locais do vault que não existem neste projeto.
37
+ - Não use redirecionamento de shell para escrever notas. Use CLI controlada ou
38
+ edição de arquivo com UTF-8 preservado.
39
+ - Não use `rm`, `del` ou exclusão direta em notas do vault. Deleção, merge,
40
+ migração de pasta e rollback passam por workflow com plano, recibo e
41
+ rollback. Pastas vazias só podem ser removidas por fase determinística.
42
+ - Não mude `.obsidian/` sem pedido explícito e plano. Ler export de plugin é
43
+ permitido quando o linker exige.
44
+ - Toda nota criada, apagada, movida, renomeada ou modificada gera
45
+ `link-trigger-context.v1` e chama `/mednotes:link` uma vez por lote, ou
46
+ retorna `linker_pending_reason`. Exceção: enrich puramente visual de imagens.
47
+ - Não use Git destrutivo (`reset --hard`, `checkout --`, `push --force`) sem
48
+ pedido explícito e alvo inequívoco.
49
+
50
+ ## CLI-First Para Obsidian
51
+
52
+ Antes de qualquer automação visual, tente nesta ordem: `obsidian help`;
53
+ `obsidian <comando>` para ação equivalente à Paleta de Comandos;
54
+ `obsidian eval` para APIs internas/plugins; leitura de logs, sync plans,
55
+ exports e estado do vault; GUI só para campo/configuração sem
56
+ comando, API ou arquivo seguro.
57
+
58
+ Regra crítica: comandos da Paleta de Comandos do Obsidian são acessíveis via CLI.
59
+ Sync, export de sync plans, reload de plugin, comando de plugin, console/erros
60
+ e debug usam `obsidian`/`obsidian eval`. Nome ou ID desconhecido: descubra por
61
+ CLI/eval primeiro.
62
+
63
+ Ao interagir com Obsidian aberto, plugins, DOM, screenshots, reload, debug ou
64
+ sync plans, carregue
65
+ `${extensionPath}/skills/obsidian-cli/SKILL.md` antes de agir.
66
+ `obsidian-ops` define segurança; `obsidian-cli`, mecânica.
67
+
68
+ ## Gate anti-GUI obrigatório
69
+
70
+ Antes de mouse, screenshot, teclado ou UI Automation, declare: ação; por que
71
+ `obsidian`, `obsidian eval` e arquivo seguro não
72
+ cobrem; qual risco a GUI resolve. Dúvida bloqueia e volta para CLI.
73
+
74
+ GUI proibida: Abrir Paleta de Comandos, rodar comandos de plugin, exportar sync
75
+ plans, ler console/erros, reload/plugin/debug, ou observar settings legíveis
76
+ por CLI/eval. GUI permitida só para campo sem comando/API, estado visual
77
+ indisponível por CLI/arquivo, ou recovery com evidência de UI única.
78
+
79
+ ## Segurança Git
80
+
81
+ Para qualquer mutação do vault, leia e siga
82
+ `${extensionPath}/docs/vault-version-control.md`. A regra curta é:
83
+
84
+ - `vault_git.py run-start` antes da mutação e `run-finish` depois.
85
+ - No `run-finish`, copie o `run_id` literal do JSON de `run-start`; não
86
+ normalize nem remova separadores.
87
+ - Depois de `run-finish`, confirme `guard_lease.status=closed` no JSON fresco
88
+ ou `guard-status.active_count=0`; com `blocked_reason=guard_lease_mismatch`,
89
+ `guard_lease.status=missing` ou sem essa evidência, reporte pendência e não
90
+ diga que o guard foi fechado.
91
+ - Em resposta pública, não imprima `run_id`, `guard_lease`, lease id/path,
92
+ hash ou identificador curto de ponto de restauração como `7da9fcf`; diga
93
+ apenas que a proteção do vault foi encerrada e que há ponto de restauração
94
+ disponível. IDs ficam para debugging. Se listar `run-finish`, redija como
95
+ `--run-id <run_id>`.
96
+ - Mudança humana aberta vira snapshot separado; não misture com mudança do
97
+ agente.
98
+ - Um lote lógico vira um ponto de restauração, não um commit por arquivo.
99
+ - Ao terminar, a política deve sincronizar e dar push. Falha de rede/auth fica
100
+ explícita como backlog local.
101
+ - Se o workflow não consegue aplicar essa política, bloqueie ou registre
102
+ `blocked_reason` claro; não siga por edição manual silenciosa.
103
+
104
+ ## Delegação Para Skills Oficiais
105
+
106
+ - Para operações Obsidian genéricas, carregue
107
+ `${extensionPath}/skills/obsidian-cli/SKILL.md`: busca, leitura,
108
+ propriedades, attachments, plugins, DOM, screenshot e rotinas de vault que
109
+ não sejam específicas do Workbench.
110
+ - Para sintaxe Obsidian, carregue
111
+ `${extensionPath}/skills/obsidian-markdown/SKILL.md`: WikiLinks, embeds,
112
+ callouts, properties/frontmatter e detalhes de Markdown que não estejam
113
+ definidos pelo Padrão Ouro médico.
114
+ - Essas skills vendorizadas são apoio de ferramenta/sintaxe. Elas não substituem
115
+ `wiki/cli.py`, `knowledge-architect.md`, `semantic-linker.md`, a política de
116
+ pontos de restauração, nem os workflows públicos `/mednotes:*`.
117
+
118
+ ## Roteamento
119
+
120
+ - Criar nota: `${extensionPath}/skills/create-medical-note/SKILL.md`.
121
+ - Enriquecer imagens: `${extensionPath}/skills/enrich-medical-note/SKILL.md`.
122
+ - Processar raw chats:
123
+ `${extensionPath}/skills/process-medical-chats/SKILL.md`.
124
+ - Saúde, estilo, taxonomia, duplicatas:
125
+ `${extensionPath}/skills/fix-medical-wiki/SKILL.md`.
126
+ - Links, grafo, body linker, Related Notes:
127
+ `${extensionPath}/skills/link-medical-wiki/SKILL.md`.
128
+ - Flashcards/deeplinks:
129
+ `${extensionPath}/skills/create-medical-flashcards/SKILL.md`.
130
+ - Histórico/restore: `/mednotes:history` com `vault_git.py`.
131
+
132
+ ## Saída
133
+
134
+ Siga `workflow-output-contract.md`: resumo em PT-BR, status, arquivos,
135
+ blockers, `next_action` e `required_inputs`. Não despeje JSON bruto salvo se o
136
+ usuário pedir.
@@ -0,0 +1,45 @@
1
+ ---
2
+ name: pdf-library
3
+ description: Gerencia biblioteca local de figuras extraidas de PDFs e insere imagens revisadas em notas medicas.
4
+ ---
5
+
6
+ # Skill: pdf-library
7
+
8
+ Resposta ao usuário: `${extensionPath}/docs/workflow-output-contract.md`.
9
+
10
+ ## Quando usar
11
+
12
+ - O usuário quer procurar figuras em PDFs locais para ilustrar notas médicas.
13
+ - O usuário quer ingerir PDFs, buscar por termos ou revisar imagens antes de inserir.
14
+ - O usuário abriu `/mednotes:pdf-library`.
15
+
16
+ ## Invariantes
17
+
18
+ - Estado editável vive em `~/.mednotes/pdf-library`.
19
+ - A experiência pública deve ser "just works": prepare ambiente, indexe, busque,
20
+ revise e insira sem exigir que o usuário saiba nomes de subcomandos.
21
+ - Use a CLI interna via `node "${extensionPath}/scripts/run_python.mjs" scripts/mednotes/pdf_library/cli.py ...`.
22
+ - Confira dependências e prepare o ambiente automaticamente quando for seguro.
23
+ Se houver bloqueio real, entregue uma única próxima ação em linguagem humana.
24
+ - PDFs, OCR bruto, imagens e Markdown clínico não entram em telemetria.
25
+ - Cloud é opcional. `gemini_cli` pode gerar âncoras; provedores free/open-model reservados bloqueiam como `provider_not_implemented`.
26
+ - Inserção sempre mostra uma prévia, informa que nada foi alterado ainda e só
27
+ aplica depois de confirmação explícita.
28
+ - Mudança puramente visual do enricher (`images_*`, embed e caption) não chama `/mednotes:link`.
29
+
30
+ ## Fluxo
31
+
32
+ 1. Abra a biblioteca e diga ao usuário se ela já está pronta ou se você está
33
+ preparando o ambiente.
34
+ 2. Descubra PDFs locais a partir do pedido do usuário ou do caminho informado.
35
+ Mostre quantos arquivos serão adicionados antes de indexar.
36
+ 3. Indexe os PDFs aceitos, mantendo OCR opcional e local.
37
+ 4. Busque figuras por termo, nota ou trecho clínico sem exigir sintaxe técnica.
38
+ 5. Para revisão visual, abra a TUI inline. Se imagem não renderizar, mantenha a
39
+ revisão textual disponível.
40
+ 6. Para inserir em nota, mostre uma prévia clara, informe que nada foi alterado
41
+ ainda e aplique somente após confirmação explícita com o vault guard ativo.
42
+
43
+ ## Privacidade
44
+
45
+ Use recibos com hashes, paths, figure ids, captions e status. Nunca inclua PDF completo, dump de OCR, bytes de imagem, Markdown bruto de nota, `.env`, tokens ou chaves.
@@ -0,0 +1,246 @@
1
+ ---
2
+ name: process-medical-chats
3
+ description: Processa Chats_Raw médicos em notas Wiki_Medicina usando wiki/cli.py, subagents, validação formal, publish dry-run e linker semântico. Use com /mednotes:process-chats.
4
+ ---
5
+
6
+ # Skill: process-medical-chats
7
+
8
+ Resposta visível: `${extensionPath}/docs/workflow-output-contract.md`.
9
+ Resposta pública padrão: use `reports.public_report.lines` quando existir e
10
+ não exponha comandos literais, flags, schemas, recibos, hashes, paths internos
11
+ nem nomes de campos. Detalhes técnicos ficam no canal agente/debug ou
12
+ laboratório. Decisão humana aparece como pergunta, opções fechadas, item
13
+ afetado e retomada em linguagem humana.
14
+
15
+ Workflows FSM-first expõem `agent_directive` como o único
16
+ contrato FSM -> agente consumível por automação. Consumidores usam
17
+ `agent_directive.control` para enforcement e validação, e podem renderizar
18
+ `agent_directive.instructions` como contexto para o modelo. Não parseie
19
+ relatórios humanos nem preâmbulos em stderr para decidir o estado do workflow.
20
+
21
+ Adapter detecta fato. FSM decide política. CLI executa efeito.
22
+
23
+ Sem WorkflowEffect emitido pela FSM, não existe recovery automático.
24
+
25
+ blocked_reason, next_action, status e operation_payload não autorizam retry/recovery/apply.
26
+
27
+ Use para processar `Chats_Raw` em notas `Wiki_Medicina` ou continuar
28
+ `/mednotes:process-chats`.
29
+
30
+ ## Fonte canônica
31
+
32
+ - CLI pública: `${extensionPath}/scripts/mednotes/wiki/cli.py`.
33
+ - Taxonomia: `${extensionPath}/scripts/mednotes/wiki_tree.py`,
34
+ `taxonomy-canonical`, `taxonomy-tree`, `taxonomy-audit`.
35
+ - Estilo/Padrão Ouro: `${extensionPath}/docs/knowledge-architect.md`.
36
+ - Grafo/linker: `${extensionPath}/docs/semantic-linker.md`,
37
+ `wiki/cli.py run-linker`.
38
+ - Engenharia de prompt e recovery de agentes:
39
+ `${extensionPath}/docs/agent-prompt-hardening.md`.
40
+ - Ownership de fase fica na CLI pública e nos agentes listados nesta skill.
41
+
42
+ ## Invariantes runtime
43
+
44
+ - O corpo do raw chat é imutável. YAML/status operacional pode ser alterado
45
+ para auditoria, mas somente por `wiki/cli.py` (`triage`, `discard`,
46
+ `publish-batch`); nunca por `write_file`, `replace`, shell redirection,
47
+ `sed` ou script ad hoc.
48
+ - Mutação compartilhada é serial no agente principal: `triage`, `discard`,
49
+ `stage-note`, dry-run, publish, linker.
50
+ - O objetivo é primeira passada publicável: triager deve gerar `note_plan` v2
51
+ completo, com `planned_meaning`, `meaning_claim` explícito, limites
52
+ semânticos e títulos/`staged_title` seguros como filename, sem duplicatas por
53
+ acento/caixa. A triagem não emite `covered_by_existing`; cobertura existente,
54
+ merge canônico e alvo final são decisões posteriores. O meaning planner
55
+ resolve existência/canonicidade; architect deve gerar nota, H1, taxonomia e
56
+ coverage coerentes com esse plano antes de qualquer staging.
57
+ - `triage` que muta YAML/status de raw chat médico exige
58
+ `triager-prompt-eval.v1` aprovado e amarrado ao mesmo `raw_file` e
59
+ `note_plan`, além de `subagent-run-receipt.v1` assinado/atestado pelo runner
60
+ oficial para o output do triager. Sem isso, pare e gere o eval/recibo pela
61
+ rota oficial; não edite o YAML manualmente.
62
+ - Se `eval-triager-output` retornar `needs_review`, não use `jq`, `cat`,
63
+ `mv`, script ou edição manual para consertar output/`note_plan`/metrics do
64
+ triager. Reenvie o erro ao `med-chat-triager` com `error_context` ou pare no
65
+ bloqueio.
66
+ - Não peça ao triager para inventar `agent_metrics`. Métricas ausentes ou
67
+ autodeclaradas são telemetria incompleta; o gate padrão de UX avalia o
68
+ `note_plan`, não contadores de token fabricáveis. Use
69
+ `--require-agent-metrics` apenas em laboratório de prompt.
70
+ - A fase de triagem de lote começa por `plan-subagents --phase triage`. O
71
+ parent não lê o raw chat para resumir conteúdo, não monta prompt manual para
72
+ `med-chat-triager` e não decide caminhos de artefatos por conta própria.
73
+ Use `work_item.triager_output_path`, `work_item.note_plan_path` e
74
+ `work_item.triager_eval_path`; o recibo de execução do subagente deve ser
75
+ assinado pelo runner oficial para esse `work_item`, não escrito, editado ou
76
+ assinado pelo parent.
77
+ - Paralelize só `work_items`; `batches` apenas agrupam `work_ids`.
78
+ - Continuação agentica executável vem somente de
79
+ `agent_directive.control.capabilities.continue=true` com
80
+ `agent_directive.control.effects[]`. `decision`, `human_decision_packet` e `progress_view_model.resume_action` orientam UX, decisão humana e retomada pública; sem `agent_directive.control.effects[]`, pare e reporte o bloqueio em linguagem humana.
81
+ - Bloqueio recuperável preserva `error_context`; subagent de reparo recebe
82
+ causa, artefato, correção, `retry_scope` e `next_action`.
83
+ - Antes de chamar subagent para corrigir erro, inclua o pacote operacional do
84
+ hardening: `app_version`, workflow, phase, comando oficial, erro exato,
85
+ `blocked_reason`, `next_action`, paths permitidos, schema, hashes e recibo ou
86
+ dry-run quando existir.
87
+ - Não crie scripts locais para editar raw chats, coverage, manifest, H1,
88
+ taxonomia, YAML/status ou notas staged. Use os comandos oficiais da
89
+ `wiki/cli.py` para triage, `stage-note --coverage`, `publish-status`,
90
+ `publish-batch`, `fix-note` em temporárias, `apply-canonical-merge` e
91
+ `taxonomy-*`; se faltar rota oficial, bloqueie com `error_context`,
92
+ `next_action` e backlog em vez de contornar validações.
93
+ - Para first-pass prevention do relatório de telemetria 2026-05-16 22:29:
94
+ `note_plan_invalid` bloqueia na triagem com `retry_scope=triage_note_plan_only`;
95
+ `blocked.validation_errors` bloqueia em `validate_note` com `fix-note` ou
96
+ `rewrite_prompt` oficial, nunca script; `taxonomy_resolution_required` segue
97
+ `taxonomy-*`/decisão humana antes de staging; `coverage_invalid` exige
98
+ regenerar `raw-coverage.v1` a partir do `note_plan` e repetir apenas
99
+ `stage-note --coverage`. Em todos esses casos, não gere scripts.
100
+ - Com `agent.retry_loop` ou "Parar retries automáticos", pare a fase; só retome
101
+ após mudar o input do `error_context` ou obter decisão humana.
102
+ - Registre `agent_events` redigidos quando houver retry/loop, fase errada,
103
+ `next_action` ignorado, drift, mutação inesperada, bloqueio ou comando falho.
104
+ - Ambiente Python/uv/venv/PowerShell/path quebrado aponta para `/mednotes:setup`
105
+ ou bootstrap/reset oficial; não contorne editando scripts/runbooks.
106
+ - Decisão humana usa `human_decision_packet`; resolva e retome por
107
+ `resume_action` antes de publish.
108
+ - `note_plan` é da triagem. O architect aceita somente o contrato atual:
109
+ escreve exatamente o `meaning_work_item` lançado pelo planner, gera cobertura
110
+ para esse item e bloqueia qualquer formato antigo/incompleto antes de gastar
111
+ tokens.
112
+ - `publish-batch` bloqueia sem `coverage_path`, raw sem `note_plan`, coverage
113
+ divergente, staged fora do plano ou alvo duplicado por normalização.
114
+ - Merge multi-fonte usa `raw_files[]`/`sources[]`; `covered` exige
115
+ delta/seção/referência. Falta vira `provenance_gap`.
116
+ - HTML salvo por `gemini-md-export` é obrigatório, iframe/linkado; nunca inline.
117
+ - Imagem gerada/exportada pelo Gemini é obrigatória: inclua embed Markdown,
118
+ legenda `Figura:` com fonte `Gemini Web` e comentário `gemini-artifact`.
119
+ - Sempre rode `publish-batch --dry-run`; publish real exige recibo compatível e
120
+ rollback automático em falha pós-mutação.
121
+ - `publish-batch` real gera `link-trigger-context.v1` e chama o linker uma vez
122
+ ao final. Confira o resultado pelo payload FSM: `progress_view_model`,
123
+ `state_machine_snapshot`, `receipt`, `agent_directive` e evidência de linker
124
+ em `diagnostic_context`/`artifacts`.
125
+ - Dry-run limpo = `ready_to_publish`; publish real = `published`; linker com
126
+ blockers = `completed_with_link_blockers`. Não chame de `completed`.
127
+ - Taxonomia é pasta de categoria; `title` vira o arquivo `.md`.
128
+
129
+ ## Contrato de mudança do modelo de nota
130
+
131
+ Mudança em modelo de nota (dado, YAML, seção, footer, formatação, tabela,
132
+ alias ou proveniência) exige duas portas: `/mednotes:process-chats` valida notas
133
+ novas antes de `stage-note`/`publish-batch`; `/mednotes:fix-wiki` audita e
134
+ repara notas já ingeridas, ou bloqueia com rewrite/decisão humana. O gate é
135
+ `wiki.note_style.NOTE_MODEL_ISSUE_COVERAGE`: novo `StyleIssue` sem
136
+ `process_chats_new_notes` e `fix_wiki_retroactive` quebra o contrato.
137
+ `didactic_visual_opportunity` em nota nova exige rewrite pelo
138
+ `med-knowledge-architect` antes de publicar; siga
139
+ `${extensionPath}/docs/knowledge-architect.md` e não publique silenciosamente
140
+ uma nota que o validador marcou como precisando de visual/equação didática.
141
+
142
+ ## Fluxo
143
+
144
+ 1. Ache `${extensionPath}`; fallback:
145
+ `~/.gemini/extensions/medical-notes-workbench`.
146
+ 2. Rota rápida de backlog, antes de qualquer validação ampla:
147
+
148
+ ```bash
149
+ uv run python "${extensionPath}/scripts/mednotes/wiki/cli.py" list-pending --summary --json
150
+ ```
151
+
152
+ Se o payload público indicar que não há chats novos e o workflow é
153
+ terminal, encerre respondendo somente com
154
+ `reports.public_report.lines`: nenhuma
155
+ nota foi publicada/preparada, nenhum raw novo foi processado, nada foi
156
+ escrito na Wiki, coverage/manifest não se aplicam e linker/grafo não
157
+ precisa rodar. Não leia `config.toml`, não liste diretórios, não rode
158
+ `validate`, `list-triados`, `plan-subagents`, `validate-wiki`, fix-wiki,
159
+ linker, publish ou subagents depois desse terminal. Não mencione nomes de
160
+ campos internos, schemas, hashes ou caminhos locais na resposta pública e
161
+ não adicione seção técnica de resumo.
162
+ 3. Havendo backlog real, bloqueio acionável ou continuação explícita, valide e
163
+ carregue taxonomia:
164
+
165
+ ```bash
166
+ uv run python "${extensionPath}/scripts/mednotes/wiki/cli.py" validate
167
+ uv run python "${extensionPath}/scripts/mednotes/wiki_tree.py" --max-depth 4 --audit --format text
168
+ ```
169
+
170
+ Se `environment_preflight.status=blocked`, pare com setup/reset oficial.
171
+ Organização de pastas usa `taxonomy-migrate --dry-run`; apply só com
172
+ confirmação e rollback por `--rollback --receipt <recibo.json>`.
173
+ 4. Oriente backlog restante com `list-pending --summary` e
174
+ `list-triados --summary` somente quando a rota rápida não tiver retornado
175
+ terminal sem chats novos. Confira `list-triados`/`plan-subagents --phase
176
+ architect` somente se estiver continuando lote triado aberto.
177
+ 5. Pendentes: `plan-subagents --phase triage --limit <N>`. Default 5; use 2/3
178
+ em modo econômico. Lance no máximo um triager por `work_item.raw_file`;
179
+ não substitua essa etapa por `read_file` do raw nem por prompt manual;
180
+ salve o output top-level do triager, extraia o `note_plan` para arquivo
181
+ separado usando os caminhos oficiais do `work_item`, preserve o
182
+ `subagent-run-receipt.v1` assinado pelo runner oficial e rode
183
+ `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`
184
+ e aplique em série
185
+ `triage --note-plan <note-plan.json> --triager-eval <triager-eval.json> --json`
186
+ ou `discard` somente se `triager-prompt-eval.v1` passar.
187
+ O `triage` reabre o recibo, confere a assinatura Ed25519, reabre o output
188
+ real do triager e verifica que o `note_plan` aplicado veio desse output; eval
189
+ ou receipt fabricados pelo parent bloqueiam.
190
+ Não peça ao triager para fabricar `agent_metrics`; métrica ausente é warning
191
+ no gate de UX e só bloqueia em laboratório com `--require-agent-metrics`.
192
+ Não escreva artefatos de triagem em `tmp/` na raiz do repo.
193
+ 6. Triados: `plan-subagents --phase architect --temp-root <tmp> --limit <N>`.
194
+ Se o plano retornar terminal sem chats novos, encerre o workflow usando
195
+ `reports.public_report.lines`: nenhuma nota foi
196
+ publicada/preparada, nenhum raw novo foi processado, nada foi escrito na
197
+ Wiki, coverage/manifest não se aplicam e linker/grafo não precisa rodar.
198
+ Não rode `validate-wiki`, `/mednotes:fix-wiki`, `run-linker`,
199
+ `publish-batch` ou subagents depois desse terminal, e não mencione nomes de
200
+ campos internos na resposta pública.
201
+ Um architect por `work_item` com `launchable: true`; recebe raw(s),
202
+ `temp_dir`, plano, taxonomia e árvore, e escreve só no `temp_dir`.
203
+ `canonical_merge` com `target_kind: new_wiki_note` vira uma única nota nova;
204
+ `canonical_merge` com `target_kind: existing_wiki_note` chama o architect
205
+ para gerar rewrite completo do alvo existente e o parent aplica com
206
+ `apply-canonical-merge`. `blocked_items` com `write_policy: no_temp_note` são
207
+ parada real: não salve Markdown temporário e não empurre para `/mednotes:fix-wiki`.
208
+ Ambiguidade bloqueia, sem nota paralela.
209
+ 7. Valide temporárias com `validate-note`; se `requires_llm_rewrite`, passe
210
+ `rewrite_prompt` e `error_context` ao architect, máximo 2 tentativas.
211
+ `fix-note` só para YAML/erros determinísticos. Confira cobertura
212
+ informacional. No OpenCode, antes de validar/stagear manualmente um output
213
+ de architect, rode `finalize-opencode-architect-task` com o plano oficial,
214
+ `work_id` e artifacts capturados pelo hook; não use
215
+ `finalize-opencode-specialist-task`, que é exclusivo de `style_rewrite`.
216
+ 8. Manifest único: `stage-note --coverage <coverage.json>`. Não edite manifest.
217
+ Sem proveniência multi-fonte, bloqueie como `provenance_gap`.
218
+ 9. Rode `publish-batch --manifest <manifest> --dry-run`. Chame `med-publish-guard`;
219
+ publique só com `approve`.
220
+ Se houver dúvida ou bloqueio de manifest/dry-run, rode
221
+ `publish-status --manifest <manifest> --json`; use o `error_context` dele e
222
+ não edite manifest/recibo manualmente.
223
+ 10. Rode `publish-batch` real uma vez. A CLI publica, monta trigger context e
224
+ chama o linker. Não rode `run-linker` manualmente depois de uma prévia; no
225
+ publish real, não leia `linker_*` nem campos raiz equivalentes para decidir
226
+ o status público. Use o resultado FSM: `reports`, `artifacts`,
227
+ `diagnostic_context` e `agent_directive` trazem a evidência de grafo/linker
228
+ já normalizada. Com blockers de grafo/linker, a resposta pública deve dizer
229
+ que o grafo ficou pendente e orientar retomada pelo workflow oficial.
230
+ 11. Registre feedback local quando possível, com `agent_events` e bloqueios de
231
+ ambiente. Responda por `workflow-output-contract.md`, status real, sem JSON
232
+ bruto.
233
+
234
+ ## Paralelização
235
+
236
+ - Unidade indivisível: raw chat, nota temporária ou nota final.
237
+ - Fonte única de spawn: `work_items`; não processe `batches` como segunda fila.
238
+ - Um raw com várias notas continua com um architect; merge canônico usa
239
+ ownership por `target_key`.
240
+ - Todo `planned_meaning` v2 lançado aparece em coverage/manifest; toda staged
241
+ note aparece no `note_plan`.
242
+ - `plan-subagents --phase architect` passa pelo meaning planner atual; formato
243
+ antigo, duplicata ambígua ou payload incompleto bloqueia antes de gastar
244
+ tokens.
245
+ - Com 0/1 item, não crie paralelismo artificial.
246
+ - Se `truncated: true`, termine a fase atual antes de novo lote.
@@ -0,0 +1,100 @@
1
+ ---
2
+ name: workflow-report
3
+ description: Use when the user asks for /report, post-workflow reflection, execution postmortems, or emailing a detailed workflow report to Augusto.
4
+ ---
5
+
6
+ # Workflow Report
7
+
8
+ ## Core Rule
9
+
10
+ `/report` is a post-workflow audit. It is not a success summary. Reconstruct the
11
+ run from the conversation, commands, files, tool outputs, generated artifacts and
12
+ your own decisions. Document what actually happened, including messy parts.
13
+
14
+ Block if you cannot identify the extension `app_version`; the email subject and
15
+ body must include it.
16
+
17
+ ## Required Evidence
18
+
19
+ Read `${extensionPath}/gemini-extension.json` and capture `app_version`.
20
+ Use `${extensionPath}` as the installed extension root; fallback
21
+ `~/.gemini/extensions/medical-notes-workbench`.
22
+
23
+ Run this before sending the email:
24
+
25
+ ```bash
26
+ uv run python scripts/mednotes/capture_extension_diff.py --send \
27
+ --github-baseline-url https://codeload.github.com/augustocaruso/medical-notes-workbench/zip/refs/heads/gemini-cli-extension
28
+ ```
29
+
30
+ If the user requests immediate delivery, add `--flush`. Record `snapshot_path`,
31
+ `extension-full.diff`, `capture.zip`, `generated-scripts/`, `send_result` and
32
+ any failure reason.
33
+
34
+ ## Report Content
35
+
36
+ Write a Markdown report in the persistent feedback area, for example:
37
+ `~/.mednotes/feedback/workflow-reports/YYYY-MM-DD-HHMM-workflow-report.md`.
38
+ Use `${extensionPath}/docs/workflow-output-contract.md` for the final visible
39
+ answer after the email step.
40
+
41
+ Include these sections:
42
+
43
+ - workflow/run context: command, objective, app_version, date, environment;
44
+ - complete chronology of actions, including retries and dead ends;
45
+ - all errors, difficulties, percalços, intercorrências and blockers;
46
+ - how each problem was diagnosed, bypassed, fixed or left unresolved;
47
+ - arquivos modificados, created artifacts, receipts and relevant paths;
48
+ - todos os scripts criados by the agent, with path, purpose, risk and whether
49
+ they were executed; attach script files when emailing;
50
+ - impacto no output: missing/changed quality, delays, incomplete
51
+ output, extra validation, manual decisions or user-visible consequences;
52
+ - First-pass prevention: o que o agente deveria ter feito logo no primeiro ciclo,
53
+ qual instrução/prompt/contrato estava ausente, ambíguo ou fácil de ignorar,
54
+ qual prompt source deve mudar, qual fixture/corpus validaria a prevenção, e
55
+ quais correções foram apenas recuperação pós-erro;
56
+ - o que poderia ter sido diferente for a smoother, more efficient and higher
57
+ quality run: prompt, docs, tests, CLI, telemetry, UX, stop rules and tooling;
58
+ - open risks and next actions.
59
+
60
+ Separate facts from inference. Be specific: filenames, command names, exit
61
+ codes, blockers, decisions and validation results. Do not paste raw clinical
62
+ Markdown, raw chats, HTML, `.env`, tokens, keys or secrets. Redact if needed.
63
+
64
+ ## Email
65
+
66
+ Send the report by email to Augusto using the available email capability. Do not
67
+ invent the address; use the configured Augusto recipient/account. If no email
68
+ tool or recipient is available, stop and say exactly what is missing.
69
+
70
+ Subject format:
71
+
72
+ ```text
73
+ [medical-notes-workbench] Workflow report app_version=<version> <workflow-or-topic>
74
+ ```
75
+
76
+ Attach:
77
+
78
+ - the Markdown report;
79
+ - `capture.zip`;
80
+ - `extension-full.diff`;
81
+ - every script the agent created during the workflow;
82
+ - any generated-script files under the capture `generated-scripts/` directory.
83
+
84
+ The body should contain a short executive summary plus the attachment list. It
85
+ must say whether the diff email/envelope was sent successfully by
86
+ `capture_extension_diff.py --send`.
87
+
88
+ ## Prompt Optimization Handoff
89
+
90
+ When the run exposed avoidable retries, ignored `next_action`, wrong phase,
91
+ manual script workarounds, missing error context, or preventable validation
92
+ errors, add a compact `first_pass_prevention_candidates` JSON block in the
93
+ Markdown report. This block is input for `prompt-optimization-from-telemetry`;
94
+ it is not an active fixture and must not include raw clinical content, full
95
+ scripts, HTML, tokens, keys, or `.env` values.
96
+
97
+ ## Final Response
98
+
99
+ Reply in Portuguese with status, report path, email sent/not sent, app_version,
100
+ attachments included, diff snapshot path and any missing evidence.
@@ -0,0 +1,5 @@
1
+ """MedNotes — pacote raiz do namespace (libs distribuídas em bundle/src).
2
+
3
+ Layout DDD: kernel (FSM genérico), platform (infra compartilhada), domains
4
+ (bounded contexts). Ver docs/migration/0005-arvore-ddd-spec.md.
5
+ """
@@ -0,0 +1,5 @@
1
+ """MedNotes domains — os bounded contexts (wiki, flashcards).
2
+
3
+ Cada contexto é autônomo; só se cruzam pela exceção REGISTRY (schema_registry).
4
+ Ver docs/migration/0005-arvore-ddd-spec.md.
5
+ """
@@ -0,0 +1,26 @@
1
+ # Flashcards Domain
2
+
3
+ Dominio dos utilitarios determinísticos de `/flashcards`. A lógica real vive
4
+ neste pacote; os scripts no diretório pai permanecem como aliases públicos de
5
+ CLI.
6
+
7
+ Módulos reais:
8
+
9
+ - `sources.py`: resolve arquivos, diretórios, globs, tags e manifests.
10
+ - `pipeline.py`: prepara/aplica plano de escrita.
11
+ - `index.py`: idempotência local e status de fontes.
12
+ - `report.py`: preview e relatório final.
13
+ - `model.py`: valida note type/campos do Anki.
14
+ - `sync_rules.py`: compara/atualiza a cópia local das Twenty Rules.
15
+
16
+ Aliases públicos preservados:
17
+
18
+ - `../flashcard_sources.py`
19
+ - `../flashcard_pipeline.py`
20
+ - `../flashcard_report.py`
21
+ - `../flashcard_index.py`
22
+ - `../anki_model_validator.py`
23
+ - `../sync_anki_twenty_rules.py`
24
+
25
+ Novos utilitarios de cards devem entrar neste dominio. Scripts novos no pai
26
+ devem ser evitados, salvo quando forem aliases públicos de CLI.
@@ -0,0 +1,2 @@
1
+ """Deterministic internals for the public `/flashcards` workflow."""
2
+