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.
- package/.opencode/agents/med-chat-triager.md +204 -0
- package/.opencode/agents/med-flashcard-maker.md +63 -0
- package/.opencode/agents/med-knowledge-architect.md +230 -0
- package/.opencode/agents/med-link-graph-curator.md +177 -0
- package/.opencode/agents/med-publish-guard.md +62 -0
- package/.opencode/commands/flashcards.md +25 -0
- package/.opencode/commands/mednotes/create.md +25 -0
- package/.opencode/commands/mednotes/enrich.md +27 -0
- package/.opencode/commands/mednotes/fix-wiki.md +27 -0
- package/.opencode/commands/mednotes/history.md +22 -0
- package/.opencode/commands/mednotes/link-body.md +25 -0
- package/.opencode/commands/mednotes/link-related.md +27 -0
- package/.opencode/commands/mednotes/link.md +27 -0
- package/.opencode/commands/mednotes/pdf-library.md +27 -0
- package/.opencode/commands/mednotes/process-chats.md +23 -0
- package/.opencode/commands/mednotes/setup.md +21 -0
- package/.opencode/commands/mednotes/status.md +27 -0
- package/.opencode/commands/mednotes/telemetry.md +27 -0
- package/.opencode/commands/report.md +26 -0
- package/.opencode/mednotes/AGENTS.md +57 -0
- package/.opencode/mednotes/agents/med-chat-triager.md +197 -0
- package/.opencode/mednotes/agents/med-flashcard-maker.md +56 -0
- package/.opencode/mednotes/agents/med-knowledge-architect.md +224 -0
- package/.opencode/mednotes/agents/med-link-graph-curator.md +171 -0
- package/.opencode/mednotes/agents/med-publish-guard.md +55 -0
- package/.opencode/mednotes/contracts/.gitkeep +1 -0
- package/.opencode/mednotes/contracts/agents.json +116 -0
- package/.opencode/mednotes/contracts/opencode-plugin.json +70 -0
- package/.opencode/mednotes/docs/agent-prompt-hardening.md +567 -0
- package/.opencode/mednotes/docs/agent-role-contracts.md +94 -0
- package/.opencode/mednotes/docs/anki-mcp-twenty-rules.md +214 -0
- package/.opencode/mednotes/docs/anki-templates/README.md +39 -0
- package/.opencode/mednotes/docs/anki-templates/cloze.back.html +23 -0
- package/.opencode/mednotes/docs/anki-templates/cloze.front.html +14 -0
- package/.opencode/mednotes/docs/anki-templates/qa.back.html +24 -0
- package/.opencode/mednotes/docs/anki-templates/qa.front.html +14 -0
- package/.opencode/mednotes/docs/anki-templates/style.css +182 -0
- package/.opencode/mednotes/docs/atomicity-splitting-policy.md +113 -0
- package/.opencode/mednotes/docs/extension-docs.md +40 -0
- package/.opencode/mednotes/docs/flashcard-ingestion.md +278 -0
- package/.opencode/mednotes/docs/knowledge-architect.md +208 -0
- package/.opencode/mednotes/docs/merge-policy.md +110 -0
- package/.opencode/mednotes/docs/public-vocabulary.md +104 -0
- package/.opencode/mednotes/docs/semantic-linker.md +141 -0
- package/.opencode/mednotes/docs/taxonomy-policy.md +90 -0
- package/.opencode/mednotes/docs/triage-policy.md +187 -0
- package/.opencode/mednotes/docs/vault-version-control.md +758 -0
- package/.opencode/mednotes/docs/vocabulary-db-recovery.md +58 -0
- package/.opencode/mednotes/docs/workflow-output-contract.md +779 -0
- package/.opencode/mednotes/hooks/hooks.json +79 -0
- package/.opencode/mednotes/package-lock.json +6361 -0
- package/.opencode/mednotes/package.json +15 -0
- package/.opencode/mednotes/pyproject.toml +48 -0
- package/.opencode/mednotes/scripts/bootstrap_windows_python_uv.cmd +13 -0
- package/.opencode/mednotes/scripts/bootstrap_windows_python_uv.ps1 +172 -0
- package/.opencode/mednotes/scripts/enrich_notes.py +23 -0
- package/.opencode/mednotes/scripts/full_reset_windows_python_uv.cmd +13 -0
- package/.opencode/mednotes/scripts/hooks/antigravity_hook_status.mjs +212 -0
- package/.opencode/mednotes/scripts/hooks/mednotes_hook/adapters/antigravity.mjs +169 -0
- package/.opencode/mednotes/scripts/hooks/mednotes_hook/adapters/harness_payload.mjs +103 -0
- package/.opencode/mednotes/scripts/hooks/mednotes_hook/adapters/opencode_plugin.mjs +341 -0
- package/.opencode/mednotes/scripts/hooks/mednotes_hook/adapters/opencode_user_config_sync.mjs +177 -0
- package/.opencode/mednotes/scripts/hooks/mednotes_hook/anki_preflight.mjs +214 -0
- package/.opencode/mednotes/scripts/hooks/mednotes_hook/cli.mjs +143 -0
- package/.opencode/mednotes/scripts/hooks/mednotes_hook/diagnostics.mjs +11 -0
- package/.opencode/mednotes/scripts/hooks/mednotes_hook/domain/agent_directive_core.mjs +160 -0
- package/.opencode/mednotes/scripts/hooks/mednotes_hook/fsm_directive.mjs +1470 -0
- package/.opencode/mednotes/scripts/hooks/mednotes_hook/hook_errors.mjs +120 -0
- package/.opencode/mednotes/scripts/hooks/mednotes_hook/retention.mjs +114 -0
- package/.opencode/mednotes/scripts/hooks/mednotes_hook/runtime.mjs +174 -0
- package/.opencode/mednotes/scripts/hooks/mednotes_hook/telemetry_capture.mjs +511 -0
- package/.opencode/mednotes/scripts/hooks/mednotes_hook/vault_guard.mjs +624 -0
- package/.opencode/mednotes/scripts/hooks/mednotes_hook.mjs +5 -0
- package/.opencode/mednotes/scripts/mednotes/_runtime_paths.py +24 -0
- package/.opencode/mednotes/scripts/mednotes/anki_model_validator.py +18 -0
- package/.opencode/mednotes/scripts/mednotes/capture_extension_diff.py +1562 -0
- package/.opencode/mednotes/scripts/mednotes/feedback_report.py +16 -0
- package/.opencode/mednotes/scripts/mednotes/flashcard_index.py +18 -0
- package/.opencode/mednotes/scripts/mednotes/flashcard_pipeline.py +18 -0
- package/.opencode/mednotes/scripts/mednotes/flashcard_report.py +18 -0
- package/.opencode/mednotes/scripts/mednotes/flashcard_sources.py +18 -0
- package/.opencode/mednotes/scripts/mednotes/obsidian/README.md +6 -0
- package/.opencode/mednotes/scripts/mednotes/obsidian_note_utils.py +20 -0
- package/.opencode/mednotes/scripts/mednotes/pdf_library/cli.py +16 -0
- package/.opencode/mednotes/scripts/mednotes/project_fsm.py +229 -0
- package/.opencode/mednotes/scripts/mednotes/setup_telemetry_email.py +404 -0
- package/.opencode/mednotes/scripts/mednotes/sync_anki_twenty_rules.py +18 -0
- package/.opencode/mednotes/scripts/mednotes/sync_opencode_user_config.py +36 -0
- package/.opencode/mednotes/scripts/mednotes/wiki/cli.py +20 -0
- package/.opencode/mednotes/scripts/mednotes/wiki_graph.py +18 -0
- package/.opencode/mednotes/scripts/mednotes/wiki_tree.py +134 -0
- package/.opencode/mednotes/scripts/reset_windows_python_uv.ps1 +625 -0
- package/.opencode/mednotes/scripts/run_python.mjs +109 -0
- package/.opencode/mednotes/scripts/vault/vault_commit.ps1 +19 -0
- package/.opencode/mednotes/scripts/vault/vault_commit.sh +18 -0
- package/.opencode/mednotes/scripts/vault/vault_git.ps1 +19 -0
- package/.opencode/mednotes/scripts/vault/vault_git.py +3107 -0
- package/.opencode/mednotes/scripts/vault/vault_git.sh +18 -0
- package/.opencode/mednotes/scripts/vault/vault_precommit.ps1 +19 -0
- package/.opencode/mednotes/scripts/vault/vault_precommit.sh +18 -0
- package/.opencode/mednotes/skills/THIRD_PARTY_NOTICES.md +45 -0
- package/.opencode/mednotes/skills/create-medical-flashcards/SKILL.md +113 -0
- package/.opencode/mednotes/skills/create-medical-note/SKILL.md +90 -0
- package/.opencode/mednotes/skills/enrich-medical-note/SKILL.md +120 -0
- package/.opencode/mednotes/skills/fix-medical-wiki/SKILL.md +559 -0
- package/.opencode/mednotes/skills/link-medical-wiki/SKILL.md +224 -0
- package/.opencode/mednotes/skills/obsidian-cli/SKILL.md +118 -0
- package/.opencode/mednotes/skills/obsidian-markdown/SKILL.md +207 -0
- package/.opencode/mednotes/skills/obsidian-markdown/references/CALLOUTS.md +58 -0
- package/.opencode/mednotes/skills/obsidian-markdown/references/EMBEDS.md +63 -0
- package/.opencode/mednotes/skills/obsidian-markdown/references/PROPERTIES.md +61 -0
- package/.opencode/mednotes/skills/obsidian-ops/SKILL.md +136 -0
- package/.opencode/mednotes/skills/pdf-library/SKILL.md +45 -0
- package/.opencode/mednotes/skills/process-medical-chats/SKILL.md +246 -0
- package/.opencode/mednotes/skills/workflow-report/SKILL.md +100 -0
- package/.opencode/mednotes/src/mednotes/__init__.py +5 -0
- package/.opencode/mednotes/src/mednotes/domains/__init__.py +5 -0
- package/.opencode/mednotes/src/mednotes/domains/flashcards/README.md +26 -0
- package/.opencode/mednotes/src/mednotes/domains/flashcards/__init__.py +2 -0
- package/.opencode/mednotes/src/mednotes/domains/flashcards/build_demo_apkg.py +177 -0
- package/.opencode/mednotes/src/mednotes/domains/flashcards/contracts.py +385 -0
- package/.opencode/mednotes/src/mednotes/domains/flashcards/flashcards_machine.py +522 -0
- package/.opencode/mednotes/src/mednotes/domains/flashcards/fsm.py +817 -0
- package/.opencode/mednotes/src/mednotes/domains/flashcards/index.py +630 -0
- package/.opencode/mednotes/src/mednotes/domains/flashcards/install_models.py +445 -0
- package/.opencode/mednotes/src/mednotes/domains/flashcards/model.py +359 -0
- package/.opencode/mednotes/src/mednotes/domains/flashcards/obsidian_links.py +135 -0
- package/.opencode/mednotes/src/mednotes/domains/flashcards/obsidian_note_utils.py +546 -0
- package/.opencode/mednotes/src/mednotes/domains/flashcards/pipeline.py +580 -0
- package/.opencode/mednotes/src/mednotes/domains/flashcards/report.py +510 -0
- package/.opencode/mednotes/src/mednotes/domains/flashcards/sources.py +682 -0
- package/.opencode/mednotes/src/mednotes/domains/flashcards/sync_rules.py +184 -0
- package/.opencode/mednotes/src/mednotes/domains/history/__init__.py +1 -0
- package/.opencode/mednotes/src/mednotes/domains/history/history_fsm.py +852 -0
- package/.opencode/mednotes/src/mednotes/domains/history/history_machine.py +453 -0
- package/.opencode/mednotes/src/mednotes/domains/setup/__init__.py +7 -0
- package/.opencode/mednotes/src/mednotes/domains/setup/setup_fsm.py +808 -0
- package/.opencode/mednotes/src/mednotes/domains/setup/setup_machine.py +973 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/README.md +64 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/__init__.py +1 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/api.py +668 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/batch_state.py +102 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/__init__.py +1 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/atomicity/__init__.py +1 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/atomicity/atomicity.py +877 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/body_link/__init__.py +1 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/body_link/body_linker.py +1562 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/effects/__init__.py +1 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/effects/effect_adapters.py +949 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/effects/fix_wiki_runtime_adapters.py +433 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/graph/__init__.py +1 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/graph/coverage.py +413 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/graph/graph.py +396 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/graph/graph_fixes.py +161 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/hygiene/__init__.py +1 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/hygiene/hygiene.py +483 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/illustrate/__init__.py +2 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/illustrate/anchors.py +185 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/illustrate/core/__init__.py +0 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/illustrate/core/cache.py +223 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/illustrate/core/config.py +131 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/illustrate/core/download.py +224 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/illustrate/core/frontmatter.py +59 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/illustrate/core/insert.py +227 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/illustrate/core/local_import.py +54 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/illustrate/sources/__init__.py +42 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/illustrate/sources/web_profiles.py +99 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/illustrate/sources/web_search.py +203 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/illustrate/sources/wikimedia.py +102 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/markdown/__init__.py +1 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/markdown/markdown_db_adapter.mjs +434 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/markdown/markdown_node_runtime.py +274 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/markdown/markdown_query.py +227 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/notes/__init__.py +1 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/notes/artifacts.py +605 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/notes/canonical_merge.py +277 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/notes/markdown_zones.py +85 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/notes/meaning_planner.py +307 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/notes/note_iter.py +67 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/notes/note_merge.py +278 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/notes/note_plan.py +409 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/notes/note_policy.py +22 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/notes/note_style/__init__.py +79 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/notes/note_style/fixes.py +264 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/notes/note_style/frontmatter.py +435 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/notes/note_style/models.py +208 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/notes/note_style/prompts.py +37 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/notes/note_style/tables.py +236 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/notes/note_style/validate.py +404 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/notes/provenance.py +478 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/notes/raw_chats.py +273 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/notes/sources_backfill.py +235 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/pdf/__init__.py +10 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/pdf/anchors.py +16 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/pdf/captions.py +47 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/pdf/cli.py +179 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/pdf/cloud.py +52 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/pdf/config.py +196 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/pdf/context_packets.py +76 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/pdf/db.py +81 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/pdf/doctor.py +102 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/pdf/figure_ids.py +42 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/pdf/ingest.py +326 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/pdf/insert.py +316 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/pdf/mentions.py +57 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/pdf/ocr.py +71 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/pdf/paths.py +35 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/pdf/pdf_engine.py +77 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/pdf/schema.py +155 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/pdf/search.py +188 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/pdf/tui/__init__.py +1 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/pdf/tui/app.py +89 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/pdf/tui/image_backend.py +29 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/pdf/tui/state.py +65 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/publish/__init__.py +1 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/publish/publish.py +1139 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/publish/publish_receipts.py +365 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/publish/publish_recovery.py +240 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/quality/__init__.py +1 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/quality/agent_behavior_corpus.py +2069 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/quality/agent_report_validation.py +4448 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/quality/agent_run_audit.py +852 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/quality/architect_prompt_eval.py +341 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/quality/body_linker_eval.py +240 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/quality/curator_output_validation.py +175 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/quality/curator_prompt_eval.py +865 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/quality/triager_prompt_eval.py +1295 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/related_notes/__init__.py +1 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/related_notes/related_notes.py +1920 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/related_notes/related_notes_headless.py +1186 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/specialist/__init__.py +1 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/specialist/plan_attestation.py +148 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/specialist/specialist_receipts.py +360 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/specialist/specialist_runtime.py +52 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/specialist/specialist_task_runner.py +2470 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/style/__init__.py +1 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/style/style.py +1952 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/subagents/__init__.py +1 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/subagents/agents.py +1767 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/vocabulary/__init__.py +1 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/vocabulary/alias_projection.py +331 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/vocabulary/link_terms.py +151 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/vocabulary/llm_disambiguation.py +182 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/vocabulary/taxonomy/__init__.py +116 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/vocabulary/taxonomy/audit.py +201 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/vocabulary/taxonomy/migration.py +314 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/vocabulary/taxonomy/normalize.py +72 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/vocabulary/taxonomy/policy.py +135 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/vocabulary/taxonomy/resolve.py +413 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/vocabulary/taxonomy/schema.py +157 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/vocabulary/taxonomy/status.py +137 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/vocabulary/vocabulary_bootstrap.py +509 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/vocabulary/vocabulary_curator_batch.py +1115 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/vocabulary/vocabulary_ingestion.py +632 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/vocabulary/vocabulary_map.py +930 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/capabilities/vocabulary/vocabulary_recovery.py +1388 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/cli.py +6665 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/common.py +69 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/config.py +210 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/contracts/__init__.py +74 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/contracts/agent_report.py +242 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/contracts/agent_run_audit.py +196 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/contracts/agents.py +601 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/contracts/curator.py +256 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/contracts/effect_payloads.py +519 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/contracts/happy_path.py +190 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/contracts/link_git.py +110 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/contracts/link_runtime_artifact.py +52 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/contracts/note_plan.py +75 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/contracts/paths.py +114 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/contracts/public_report.py +53 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/contracts/publish.py +111 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/contracts/raw_coverage.py +217 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/contracts/related_notes.py +136 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/contracts/related_notes_headless.py +153 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/contracts/related_notes_runtime.py +395 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/contracts/schema_registry.py +637 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/contracts/specialist.py +432 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/contracts/status.py +62 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/contracts/style_rewrite.py +568 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/contracts/vocabulary_ingestion.py +223 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/contracts/workflow_blockers.py +510 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/contracts/workflow_guardrails.py +637 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/contracts/workflow_outcomes.py +121 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/contracts/workflow_receipts.py +100 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/__init__.py +1 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/enrich/__init__.py +1 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/enrich/__main__.py +4 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/enrich/cli.py +275 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/enrich/workflow/__init__.py +2 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/enrich/workflow/candidates.py +193 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/enrich/workflow/cli.py +189 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/enrich/workflow/gemini.py +220 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/enrich/workflow/inputs.py +120 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/enrich/workflow/models.py +34 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/enrich/workflow/parsing.py +48 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/enrich/workflow/prompts.py +216 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/enrich/workflow/quality.py +54 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/enrich/workflow/reporting.py +24 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/enrich/workflow/runner.py +433 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/enrich/workflow/utils.py +39 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/enrich/workflow/vault_guard_bridge.py +17 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/fix_wiki/__init__.py +1 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/fix_wiki/fix_wiki_context_packets.py +454 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/fix_wiki/fix_wiki_decision_projection.py +133 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/fix_wiki/fix_wiki_effects.py +1260 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/fix_wiki/fix_wiki_fsm.py +2768 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/fix_wiki/fix_wiki_machine.py +1588 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/fix_wiki/fix_wiki_plan.py +306 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/fix_wiki/fix_wiki_primary_objective.py +316 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/fix_wiki/fix_wiki_problem.py +153 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/fix_wiki/fix_wiki_receipt_evidence.py +306 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/fix_wiki/fix_wiki_states.py +290 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/fix_wiki/fix_wiki_user_report.py +342 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/fix_wiki/health.py +6332 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/link/__init__.py +1 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/link/link_fsm.py +1119 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/link/link_git.py +638 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/link/link_machine.py +1106 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/link/link_retry_governance.py +374 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/link/link_runtime_result.py +485 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/link/link_triggers.py +183 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/link/linking.py +2758 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/link/reference_repair.py +718 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/link/related_notes_fsm.py +1855 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/link_related/__init__.py +1 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/link_related/link_related_machine.py +834 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/process_chats/__init__.py +1 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/process_chats/process_chats_fsm.py +1592 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/process_chats/process_chats_machine.py +3097 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/process_chats/process_chats_primary_objective.py +28 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/flows/process_chats/process_chats_runtime_result.py +185 -0
- package/.opencode/mednotes/src/mednotes/domains/wiki/performance.py +97 -0
- package/.opencode/mednotes/src/mednotes/kernel/__init__.py +6 -0
- package/.opencode/mednotes/src/mednotes/kernel/agent_directive.py +336 -0
- package/.opencode/mednotes/src/mednotes/kernel/base.py +51 -0
- package/.opencode/mednotes/src/mednotes/kernel/blockers.py +39 -0
- package/.opencode/mednotes/src/mednotes/kernel/effect_executor.py +55 -0
- package/.opencode/mednotes/src/mednotes/kernel/effect_intent.py +69 -0
- package/.opencode/mednotes/src/mednotes/kernel/effects.py +160 -0
- package/.opencode/mednotes/src/mednotes/kernel/errors.py +38 -0
- package/.opencode/mednotes/src/mednotes/kernel/fsm_event.py +35 -0
- package/.opencode/mednotes/src/mednotes/kernel/fsm_model.py +55 -0
- package/.opencode/mednotes/src/mednotes/kernel/fsm_transition_result.py +75 -0
- package/.opencode/mednotes/src/mednotes/kernel/guardrails.py +188 -0
- package/.opencode/mednotes/src/mednotes/kernel/progress.py +319 -0
- package/.opencode/mednotes/src/mednotes/kernel/public_report.py +346 -0
- package/.opencode/mednotes/src/mednotes/kernel/state_machine.py +164 -0
- package/.opencode/mednotes/src/mednotes/kernel/workflow.py +619 -0
- package/.opencode/mednotes/src/mednotes/platform/__init__.py +5 -0
- package/.opencode/mednotes/src/mednotes/platform/backup_policy.py +382 -0
- package/.opencode/mednotes/src/mednotes/platform/feedback/__init__.py +62 -0
- package/.opencode/mednotes/src/mednotes/platform/feedback/cli.py +275 -0
- package/.opencode/mednotes/src/mednotes/platform/feedback/contracts.py +83 -0
- package/.opencode/mednotes/src/mednotes/platform/feedback/core.py +4168 -0
- package/.opencode/mednotes/src/mednotes/platform/feedback/integrity.py +989 -0
- package/.opencode/mednotes/src/mednotes/platform/feedback/operational_contract.py +2293 -0
- package/.opencode/mednotes/src/mednotes/platform/feedback/telemetry.py +875 -0
- package/.opencode/mednotes/src/mednotes/platform/feedback/telemetry_config.py +65 -0
- package/.opencode/mednotes/src/mednotes/platform/opencode_runtime_config.py +182 -0
- package/.opencode/mednotes/src/mednotes/platform/paths/__init__.py +1560 -0
- package/.opencode/mednotes/src/mednotes/platform/secrets.py +89 -0
- package/.opencode/mednotes/src/mednotes/platform/user_config.py +103 -0
- package/.opencode/mednotes/src/mednotes/platform/vault_guard.py +214 -0
- package/.opencode/mednotes/uv.lock +932 -0
- package/.opencode/mednotes.generated.json +395 -0
- package/.opencode/opencode.json +31 -0
- package/.opencode/plugins/mednotes-fsm.mjs +7 -0
- package/.opencode/plugins/mednotes_hook/adapters/antigravity.mjs +169 -0
- package/.opencode/plugins/mednotes_hook/adapters/harness_payload.mjs +103 -0
- package/.opencode/plugins/mednotes_hook/adapters/opencode_plugin.mjs +341 -0
- package/.opencode/plugins/mednotes_hook/adapters/opencode_user_config_sync.mjs +177 -0
- package/.opencode/plugins/mednotes_hook/anki_preflight.mjs +214 -0
- package/.opencode/plugins/mednotes_hook/cli.mjs +143 -0
- package/.opencode/plugins/mednotes_hook/diagnostics.mjs +11 -0
- package/.opencode/plugins/mednotes_hook/domain/agent_directive_core.mjs +160 -0
- package/.opencode/plugins/mednotes_hook/fsm_directive.mjs +1470 -0
- package/.opencode/plugins/mednotes_hook/hook_errors.mjs +120 -0
- package/.opencode/plugins/mednotes_hook/retention.mjs +114 -0
- package/.opencode/plugins/mednotes_hook/runtime.mjs +174 -0
- package/.opencode/plugins/mednotes_hook/telemetry_capture.mjs +511 -0
- package/.opencode/plugins/mednotes_hook/vault_guard.mjs +624 -0
- package/AGENTS.md +57 -0
- package/README.md +194 -0
- package/adapters/antigravity/agents.json +80 -0
- package/adapters/antigravity/templates/med-chat-triager.md +214 -0
- package/adapters/antigravity/templates/med-flashcard-maker.md +72 -0
- package/adapters/antigravity/templates/med-knowledge-architect.md +241 -0
- package/adapters/antigravity/templates/med-link-graph-curator.md +187 -0
- package/adapters/antigravity/templates/med-publish-guard.md +71 -0
- package/adapters/gemini-cli/gemini-extension.json +14 -0
- package/adapters/gemini-cli/package.json +15 -0
- package/adapters/gemini-cli/pyproject.toml +48 -0
- package/bin/mednotes-opencode.mjs +155 -0
- package/contracts/agents.json +116 -0
- package/core/agents/med-chat-triager.md +197 -0
- package/core/agents/med-flashcard-maker.md +56 -0
- package/core/agents/med-knowledge-architect.md +224 -0
- package/core/agents/med-link-graph-curator.md +171 -0
- package/core/agents/med-publish-guard.md +55 -0
- package/core/commands/flashcards.toml +22 -0
- package/core/commands/mednotes/create.toml +22 -0
- package/core/commands/mednotes/enrich.toml +24 -0
- package/core/commands/mednotes/fix-wiki.toml +24 -0
- package/core/commands/mednotes/history.toml +19 -0
- package/core/commands/mednotes/link-body.toml +22 -0
- package/core/commands/mednotes/link-related.toml +24 -0
- package/core/commands/mednotes/link.toml +24 -0
- package/core/commands/mednotes/pdf-library.toml +24 -0
- package/core/commands/mednotes/process-chats.toml +20 -0
- package/core/commands/mednotes/setup.toml +18 -0
- package/core/commands/mednotes/status.toml +24 -0
- package/core/commands/mednotes/telemetry.toml +24 -0
- package/core/commands/report.toml +23 -0
- package/core/skills/THIRD_PARTY_NOTICES.md +45 -0
- package/core/skills/create-medical-flashcards/SKILL.md +113 -0
- package/core/skills/create-medical-note/SKILL.md +90 -0
- package/core/skills/enrich-medical-note/SKILL.md +120 -0
- package/core/skills/fix-medical-wiki/SKILL.md +559 -0
- package/core/skills/link-medical-wiki/SKILL.md +224 -0
- package/core/skills/obsidian-cli/SKILL.md +118 -0
- package/core/skills/obsidian-markdown/SKILL.md +207 -0
- package/core/skills/obsidian-markdown/references/CALLOUTS.md +58 -0
- package/core/skills/obsidian-markdown/references/EMBEDS.md +63 -0
- package/core/skills/obsidian-markdown/references/PROPERTIES.md +61 -0
- package/core/skills/obsidian-ops/SKILL.md +136 -0
- package/core/skills/pdf-library/SKILL.md +45 -0
- package/core/skills/process-medical-chats/SKILL.md +246 -0
- package/core/skills/workflow-report/SKILL.md +100 -0
- package/package.json +45 -0
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Wrapper Bash generico para a politica Git cross-platform do vault.
|
|
3
|
+
|
|
4
|
+
set -euo pipefail
|
|
5
|
+
|
|
6
|
+
script_dir="$(CDPATH= cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
|
|
7
|
+
project_root="$(cd "$script_dir/../.." && pwd)"
|
|
8
|
+
if [[ ! -f "$project_root/pyproject.toml" ]]; then
|
|
9
|
+
project_root="$(cd "$script_dir/../../.." && pwd)"
|
|
10
|
+
fi
|
|
11
|
+
core="$script_dir/vault_git.py"
|
|
12
|
+
|
|
13
|
+
if ! command -v uv >/dev/null 2>&1; then
|
|
14
|
+
echo "Erro: uv e obrigatorio para executar scripts Python do Workbench. Rode /mednotes:setup ou scripts/bootstrap_windows_python_uv.ps1." >&2
|
|
15
|
+
exit 127
|
|
16
|
+
fi
|
|
17
|
+
|
|
18
|
+
exec uv run --project "$project_root" python "$core" "$@"
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
<# Snapshot pre-agent do vault. Wrapper PowerShell para o core cross-platform. #>
|
|
2
|
+
|
|
3
|
+
$ErrorActionPreference = "Stop"
|
|
4
|
+
|
|
5
|
+
$ScriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path
|
|
6
|
+
$ProjectRoot = (Resolve-Path (Join-Path $ScriptDir "..\..")).Path
|
|
7
|
+
if (-not (Test-Path (Join-Path $ProjectRoot "pyproject.toml"))) {
|
|
8
|
+
$ProjectRoot = (Resolve-Path (Join-Path $ScriptDir "..\..\..")).Path
|
|
9
|
+
}
|
|
10
|
+
$Core = Join-Path $ScriptDir "vault_git.py"
|
|
11
|
+
|
|
12
|
+
$Uv = Get-Command uv -ErrorAction SilentlyContinue
|
|
13
|
+
if (-not $Uv) {
|
|
14
|
+
Write-Error "uv e obrigatorio para executar scripts Python do Workbench. Rode /mednotes:setup ou scripts\bootstrap_windows_python_uv.ps1."
|
|
15
|
+
exit 127
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
& $Uv.Source run --project $ProjectRoot python $Core precommit @args
|
|
19
|
+
exit $LASTEXITCODE
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Snapshot pre-agente do vault. Wrapper Bash para o core cross-platform.
|
|
3
|
+
|
|
4
|
+
set -euo pipefail
|
|
5
|
+
|
|
6
|
+
script_dir="$(CDPATH= cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
|
|
7
|
+
project_root="$(cd "$script_dir/../.." && pwd)"
|
|
8
|
+
if [[ ! -f "$project_root/pyproject.toml" ]]; then
|
|
9
|
+
project_root="$(cd "$script_dir/../../.." && pwd)"
|
|
10
|
+
fi
|
|
11
|
+
core="$script_dir/vault_git.py"
|
|
12
|
+
|
|
13
|
+
if ! command -v uv >/dev/null 2>&1; then
|
|
14
|
+
echo "Erro: uv e obrigatorio para executar scripts Python do Workbench. Rode /mednotes:setup ou scripts/bootstrap_windows_python_uv.ps1." >&2
|
|
15
|
+
exit 127
|
|
16
|
+
fi
|
|
17
|
+
|
|
18
|
+
exec uv run --project "$project_root" python "$core" precommit "$@"
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# Third Party Notices
|
|
2
|
+
|
|
3
|
+
## PyMuPDF
|
|
4
|
+
|
|
5
|
+
The PDF library optional extra uses PyMuPDF for local PDF parsing and rendering.
|
|
6
|
+
PyMuPDF is distributed under AGPL/commercial licensing terms. Keep it optional
|
|
7
|
+
and surface setup/doctor notices before enabling `/mednotes:pdf-library`.
|
|
8
|
+
|
|
9
|
+
## kepano/obsidian-skills
|
|
10
|
+
|
|
11
|
+
Vendored paths:
|
|
12
|
+
|
|
13
|
+
- `${extensionPath}/skills/obsidian-cli/SKILL.md`
|
|
14
|
+
- `${extensionPath}/skills/obsidian-markdown/SKILL.md`
|
|
15
|
+
- `${extensionPath}/skills/obsidian-markdown/references/`
|
|
16
|
+
|
|
17
|
+
Source: <https://github.com/kepano/obsidian-skills>
|
|
18
|
+
|
|
19
|
+
Vendored commit: `ac9398734fe719565809f7a6048b05c36b1ca38f`
|
|
20
|
+
|
|
21
|
+
License:
|
|
22
|
+
|
|
23
|
+
```text
|
|
24
|
+
MIT License
|
|
25
|
+
|
|
26
|
+
Copyright (c) 2026 Steph Ango (@kepano)
|
|
27
|
+
|
|
28
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
29
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
30
|
+
in the Software without restriction, including without limitation the rights
|
|
31
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
32
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
33
|
+
furnished to do so, subject to the following conditions:
|
|
34
|
+
|
|
35
|
+
The above copyright notice and this permission notice shall be included in all
|
|
36
|
+
copies or substantial portions of the Software.
|
|
37
|
+
|
|
38
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
39
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
40
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
41
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
42
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
43
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
44
|
+
SOFTWARE.
|
|
45
|
+
```
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: create-medical-flashcards
|
|
3
|
+
description: Cria flashcards médicos no Anki a partir de notas, pastas, tags Obsidian ou texto, usando Twenty Rules, flashcard_pipeline.py e o MCP global anki-mcp. Use com /flashcards.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Skill: create-medical-flashcards
|
|
7
|
+
|
|
8
|
+
Resposta visível: `${extensionPath}/docs/workflow-output-contract.md`.
|
|
9
|
+
|
|
10
|
+
## Quando usar
|
|
11
|
+
|
|
12
|
+
Use para `/flashcards`: Markdown, múltiplos arquivos, diretórios, globs, tags
|
|
13
|
+
Obsidian, filtros em linguagem natural ou texto/briefing colado.
|
|
14
|
+
|
|
15
|
+
## Fonte canônica
|
|
16
|
+
|
|
17
|
+
- Metodologia: `${extensionPath}/docs/anki-mcp-twenty-rules.md`.
|
|
18
|
+
- Regras locais, modelos, preview, idempotência, deeplink e tags:
|
|
19
|
+
`${extensionPath}/docs/flashcard-ingestion.md`.
|
|
20
|
+
- Templates Anki (HTML/CSS): `${extensionPath}/docs/anki-templates/`.
|
|
21
|
+
- Resolver fontes: `${extensionPath}/scripts/mednotes/flashcard_sources.py`.
|
|
22
|
+
- Modelos: `${extensionPath}/scripts/mednotes/flashcards/install_models.py`.
|
|
23
|
+
- Plano/aplicação: `${extensionPath}/scripts/mednotes/flashcard_pipeline.py`.
|
|
24
|
+
- Relatórios: `${extensionPath}/scripts/mednotes/flashcard_report.py`.
|
|
25
|
+
- Saída visível: `${extensionPath}/docs/workflow-output-contract.md`.
|
|
26
|
+
- Deeplink/tag Obsidian: `${extensionPath}/scripts/mednotes/obsidian_note_utils.py`.
|
|
27
|
+
|
|
28
|
+
## Invariantes runtime
|
|
29
|
+
|
|
30
|
+
- `/flashcards` é preview-first. Modo direto só com `--create`, `--direct`,
|
|
31
|
+
`--yes`, `--no-preview`, "criar diretamente", "sem preview" ou equivalente.
|
|
32
|
+
- Use apenas o MCP global `anki-mcp` já configurado. As tools aparecem como
|
|
33
|
+
`mcp_anki-mcp_*`; não use nomes crus como `addNotes`.
|
|
34
|
+
- Não crie `/twenty_rules` local e não peça ao usuário para executá-lo. Leia a
|
|
35
|
+
cópia local `anki-mcp-twenty-rules.md`.
|
|
36
|
+
- Leia fontes resolvidas antes de raciocinar. Não use conteúdo externo como base
|
|
37
|
+
factual dos cards.
|
|
38
|
+
- Não adicione tags Anki. A tag Obsidian `anki` só vem depois de sucesso real
|
|
39
|
+
no Anki e apenas nas notas com pelo menos um card aceito.
|
|
40
|
+
- Pare antes de escrever se modelos, Anki MCP, confirmação ou plano bloquearem.
|
|
41
|
+
Mais de 40 candidatos exige confirmação.
|
|
42
|
+
- Trate `flashcard_pipeline.py prepare` como fonte de verdade. Se ele retornar
|
|
43
|
+
FSM `blocked`, `waiting_human` ou `failed`, não chame Anki nem resuma como
|
|
44
|
+
concluído.
|
|
45
|
+
|
|
46
|
+
## Fluxo
|
|
47
|
+
|
|
48
|
+
1. Resolva o escopo antes de ler notas:
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
uv run python "${extensionPath}/scripts/mednotes/flashcard_sources.py" resolve --scope "<args>" --dry-run --skip-tag anki
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Omita `--skip-tag anki` só se o usuário pedir refazer/regenerar notas já
|
|
55
|
+
marcadas. Se `summary.requires_confirmation` ou escopo amplo, mostre:
|
|
56
|
+
|
|
57
|
+
```bash
|
|
58
|
+
uv run python "${extensionPath}/scripts/mednotes/flashcard_sources.py" preview --scope "<args>" --dry-run --skip-tag anki
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
2. Use `manifest.notes` como lista final. Leia cada `path`; preserve `deck`,
|
|
62
|
+
`deeplink`, `vault_relative_path`, `link_mode`, tags e `content_sha256`.
|
|
63
|
+
Texto colado sem nota vai para `Medicina::Inbox`, salvo deck explícito.
|
|
64
|
+
3. Garanta os modelos antes de pedir candidatos: chame
|
|
65
|
+
`mcp_anki-mcp_modelNames`, `mcp_anki-mcp_modelFieldNames` e rode:
|
|
66
|
+
|
|
67
|
+
```bash
|
|
68
|
+
uv run python "${extensionPath}/scripts/mednotes/flashcards/install_models.py" ensure --existing - --output -
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
Execute as `actions` MCP indicadas. Se status `incompatible`, peça apagar ou
|
|
72
|
+
renomear o modelo no Anki.
|
|
73
|
+
4. Leia `anki-mcp-twenty-rules.md` e `flashcard-ingestion.md`. Chame
|
|
74
|
+
`med-flashcard-maker` em modo candidato; ele retorna `preferred_models`,
|
|
75
|
+
`models` e `candidate_cards`, sem gravar no Anki.
|
|
76
|
+
5. Prepare o plano:
|
|
77
|
+
|
|
78
|
+
```bash
|
|
79
|
+
uv run python "${extensionPath}/scripts/mednotes/flashcard_pipeline.py" prepare --input -
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
Pare se a FSM retornar `blocked`, `waiting_human` ou `failed`. Decisão de
|
|
83
|
+
reprocessamento vem antes de qualquer escrita.
|
|
84
|
+
6. Mostre o preview:
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
uv run python "${extensionPath}/scripts/mednotes/flashcard_report.py" preview-cards --input -
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
No modo padrão, não chame Anki antes da confirmação.
|
|
91
|
+
7. Em gravação, use só `new_cards` aprovados e `anki_find_queries`.
|
|
92
|
+
Rode `mcp_anki-mcp_findNotes`, pule duplicados e só então use
|
|
93
|
+
`mcp_anki-mcp_addNotes`/`mcp_anki-mcp_addNote`.
|
|
94
|
+
8. Depois do sucesso no Anki, aplique resultados:
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
uv run python "${extensionPath}/scripts/mednotes/flashcard_pipeline.py" apply --input -
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
9. Marque somente notas com pelo menos um card aceito:
|
|
101
|
+
|
|
102
|
+
```bash
|
|
103
|
+
uv run python "${extensionPath}/scripts/mednotes/obsidian_note_utils.py" add-tag --tag anki --effect-target flashcards.tag_obsidian --vault-guard-receipt <vault-guard-receipt.json> <arquivos...>
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
10. Gere o resumo final quando houver dados estruturados:
|
|
107
|
+
|
|
108
|
+
```bash
|
|
109
|
+
uv run python "${extensionPath}/scripts/mednotes/flashcard_report.py" final --input -
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
Termine pelo contrato de saída: status emoji, fontes, cards candidatos/novos,
|
|
113
|
+
duplicados, notas marcadas `anki`, bloqueios e próxima ação.
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: create-medical-note
|
|
3
|
+
description: Cria notas médicas didáticas em Markdown para estudo, com estrutura clara para Obsidian e pontos que podem ser enriquecidos com imagens depois. Use quando o usuário pedir para criar, escrever, estruturar ou transformar um tema/material em nota médica.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Skill: create-medical-note
|
|
7
|
+
|
|
8
|
+
Resposta ao usuário: `${extensionPath}/docs/workflow-output-contract.md`.
|
|
9
|
+
|
|
10
|
+
## Quando usar
|
|
11
|
+
|
|
12
|
+
- O usuário quer criar uma nota médica didática a partir de um tema, outline,
|
|
13
|
+
transcrição, aula, texto colado ou pergunta clínica geral.
|
|
14
|
+
- O usuário quer uma nota Markdown organizada para estudo no Obsidian.
|
|
15
|
+
- O usuário quer preparar uma nota que depois possa receber figuras com
|
|
16
|
+
`enrich-medical-note`.
|
|
17
|
+
- O usuário quer uma Mini-Aula no padrão da Wiki_Medicina; nesse caso, carregue
|
|
18
|
+
e siga `${extensionPath}/docs/knowledge-architect.md`.
|
|
19
|
+
|
|
20
|
+
Não usar para:
|
|
21
|
+
|
|
22
|
+
- Dar aconselhamento médico individualizado para um paciente real.
|
|
23
|
+
- Diagnosticar ou prescrever conduta personalizada.
|
|
24
|
+
- Inserir imagens; para isso use `enrich-medical-note` depois que a nota existir.
|
|
25
|
+
- Processar `Chats_Raw`, decidir `note_plan`, publicar lote ou marcar raw chat;
|
|
26
|
+
para isso use `/mednotes:process-chats`.
|
|
27
|
+
|
|
28
|
+
## Formato recomendado
|
|
29
|
+
|
|
30
|
+
Use Markdown limpo, com headings ATX (`#`, `##`, `###`). Prefira seções curtas,
|
|
31
|
+
boas para revisão e para futura inserção de imagens.
|
|
32
|
+
|
|
33
|
+
Estrutura padrão:
|
|
34
|
+
|
|
35
|
+
```markdown
|
|
36
|
+
---
|
|
37
|
+
tipo: nota-medica
|
|
38
|
+
tema: ...
|
|
39
|
+
status: rascunho
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
# Título
|
|
43
|
+
|
|
44
|
+
## Visão geral
|
|
45
|
+
|
|
46
|
+
## Anatomia/Fisiologia essencial
|
|
47
|
+
|
|
48
|
+
## Mecanismo ou fisiopatologia
|
|
49
|
+
|
|
50
|
+
## Quadro clínico
|
|
51
|
+
|
|
52
|
+
## Diagnóstico
|
|
53
|
+
|
|
54
|
+
## Tratamento ou manejo
|
|
55
|
+
|
|
56
|
+
## Armadilhas e diferenciais
|
|
57
|
+
|
|
58
|
+
## Pontos visuais sugeridos
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
Adapte a estrutura ao tema. Para Wiki_Medicina,
|
|
62
|
+
`${extensionPath}/docs/knowledge-architect.md` é o dono do Padrão Ouro: formato
|
|
63
|
+
de Mini-Aula, YAML mínimo, headings, fechamento, notas relacionadas,
|
|
64
|
+
rodapé de proveniência, taxonomia e links. Não replique nem substitua esse
|
|
65
|
+
contrato aqui.
|
|
66
|
+
|
|
67
|
+
Para farmacologia, prefira mecanismo, indicações,
|
|
68
|
+
efeitos adversos, contraindicações e interações. Para anatomia, prefira marcos,
|
|
69
|
+
relações, irrigação, inervação e correlações clínicas.
|
|
70
|
+
|
|
71
|
+
## Regras de escrita
|
|
72
|
+
|
|
73
|
+
- Escreva em português do Brasil por padrão.
|
|
74
|
+
- Seja didático, direto e preciso.
|
|
75
|
+
- Diferencie conhecimento consolidado de incerteza quando relevante.
|
|
76
|
+
- Não invente referências bibliográficas específicas.
|
|
77
|
+
- Evite linguagem de prontuário; a nota é material de estudo.
|
|
78
|
+
- Inclua uma seção "Pontos visuais sugeridos" quando houver conceitos que se
|
|
79
|
+
beneficiem de figura, esquema, anatomia, histologia, radiologia ou gráfico.
|
|
80
|
+
- Não invente tags. Preserve apenas tags operacionais existentes, especialmente
|
|
81
|
+
`anki` e `revisar`, se estiver transformando uma nota já existente.
|
|
82
|
+
Especialidade clínica fica no caminho de pasta/taxonomia.
|
|
83
|
+
|
|
84
|
+
## Salvamento
|
|
85
|
+
|
|
86
|
+
Se o usuário pedir para salvar em arquivo, use nome curto em kebab-case com
|
|
87
|
+
extensão `.md`. Antes de sobrescrever arquivo existente, confirme com o usuário.
|
|
88
|
+
Ao finalizar, indique status emoji, caminho salvo quando houver, se alguma
|
|
89
|
+
sobrescrita foi evitada, pontos visuais sugeridos e próximo workflow natural
|
|
90
|
+
(`/mednotes:enrich`, `/mednotes:link` ou `/flashcards`).
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: enrich-medical-note
|
|
3
|
+
description: Enriquece notas médicas em Markdown com imagens usando o módulo enricher empacotado no Medical Notes Workbench. Use quando o usuário pedir para enriquecer, ilustrar, adicionar figuras ou buscar imagens para uma ou mais notas médicas `.md`.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Skill: enrich-medical-note
|
|
7
|
+
|
|
8
|
+
Resposta ao usuário: `${extensionPath}/docs/workflow-output-contract.md`.
|
|
9
|
+
|
|
10
|
+
## Quando usar
|
|
11
|
+
|
|
12
|
+
- O usuário pede para enriquecer/ilustrar uma ou mais notas Markdown médicas.
|
|
13
|
+
- O usuário aponta um ou mais `.md` e quer figuras de anatomia, histologia, mecanismos,
|
|
14
|
+
esquemas, radiologia ou fotos clínicas.
|
|
15
|
+
- O usuário quer embutir imagens no formato Obsidian `![[...]]`.
|
|
16
|
+
|
|
17
|
+
Não usar para:
|
|
18
|
+
|
|
19
|
+
- Geração de imagens novas. O projeto busca e baixa imagens externas/locais.
|
|
20
|
+
- Reescrever livremente o conteúdo textual da nota.
|
|
21
|
+
|
|
22
|
+
## Invariantes
|
|
23
|
+
|
|
24
|
+
- `${extensionPath}` é o bundle auto-updatable; use-o só para ler arquivos e
|
|
25
|
+
executar `scripts/enrich_notes.py`.
|
|
26
|
+
- Estado editável vive em `~/.mednotes`; não grave
|
|
27
|
+
segredo/config como única cópia dentro de `${extensionPath}`.
|
|
28
|
+
- Execute todos os alvos em uma invocação. Use `--force` somente se o usuário
|
|
29
|
+
pedir refazer notas já marcadas com `images_enriched: true`.
|
|
30
|
+
- Só adicione blocos de imagem/caption e frontmatter próprio do enricher; esse
|
|
31
|
+
frontmatter é additive-only. Não reescreva texto clínico.
|
|
32
|
+
- Não rode `/mednotes:link` por padrão; imagem/caption/frontmatter visual não
|
|
33
|
+
muda o grafo de notas.
|
|
34
|
+
- Se Python/config/venv estiverem quebrados, rode ou peça `/mednotes:setup`.
|
|
35
|
+
|
|
36
|
+
## Pré-condições Mínimas
|
|
37
|
+
|
|
38
|
+
1. Cada nota alvo é um arquivo `.md` legível.
|
|
39
|
+
2. `~/.mednotes/config.toml` tem `[paths].wiki_dir`,
|
|
40
|
+
ou `config.toml` tem `[vault].path` legado preenchido.
|
|
41
|
+
3. `uv` e `UV_PROJECT_ENVIRONMENT="$HOME/.mednotes/.venv"`
|
|
42
|
+
apontam para a venv persistente quando a extensão estiver instalada.
|
|
43
|
+
4. O `gemini` CLI está autenticado para âncoras e rerank visual.
|
|
44
|
+
|
|
45
|
+
## Como executar
|
|
46
|
+
|
|
47
|
+
Linux/macOS:
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
cd "${extensionPath}"
|
|
51
|
+
export UV_PROJECT_ENVIRONMENT="$HOME/.mednotes/.venv"
|
|
52
|
+
uv run python scripts/enrich_notes.py "<nota-ou-pasta-ou-glob>" [mais alvos] --config ~/.mednotes/config.toml
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
Windows:
|
|
56
|
+
|
|
57
|
+
```powershell
|
|
58
|
+
Set-Location "${extensionPath}"
|
|
59
|
+
$env:UV_PROJECT_ENVIRONMENT = "$HOME\.mednotes\.venv"
|
|
60
|
+
uv run python scripts\enrich_notes.py "<nota-ou-glob>" [mais alvos] --config "$HOME\.mednotes\config.toml"
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Diretórios/globs são aceitos; o orquestrador deduplica e ignora anexos/cache.
|
|
64
|
+
Use `--force` só para refazer notas enriquecidas.
|
|
65
|
+
|
|
66
|
+
## Como interpretar
|
|
67
|
+
|
|
68
|
+
Reporte ao usuário:
|
|
69
|
+
|
|
70
|
+
- Número de âncoras encontradas.
|
|
71
|
+
- Quantas imagens foram inseridas.
|
|
72
|
+
- Notas puladas por `images_enriched: true`.
|
|
73
|
+
- Notas sem inserção e falhas por nota.
|
|
74
|
+
- Fontes usadas (`wikimedia`, `web_search`, etc.).
|
|
75
|
+
- Caminhos finais das notas.
|
|
76
|
+
- Falhas toleradas, como downloads `403` ou thumbs indisponíveis.
|
|
77
|
+
|
|
78
|
+
## Critério de qualidade visual
|
|
79
|
+
|
|
80
|
+
O orquestrador deve tratar busca e rerank como curadoria médica, não como
|
|
81
|
+
decoração de nota:
|
|
82
|
+
|
|
83
|
+
- Âncoras devem apontar o achado visual exato que ajudaria revisão clínica ou
|
|
84
|
+
prova de residência.
|
|
85
|
+
- Queries devem usar termos médicos específicos. Quando a fonte real for
|
|
86
|
+
`web_search`, operadores `site:` podem funcionar como adapter virtual para
|
|
87
|
+
fontes confiáveis (`site:nih.gov`, `site:ncbi.nlm.nih.gov`,
|
|
88
|
+
`site:radiopaedia.org`, etc.), sem prometer que existam adapters nativos.
|
|
89
|
+
- Fotos clínicas, histologia, radiologia e anatomia devem ser reais ou
|
|
90
|
+
academicamente confiáveis. Ilustração genérica, imagem decorativa, watermark
|
|
91
|
+
pesado, texto ilegível ou tópico apenas vizinho devem ser recusados.
|
|
92
|
+
- `radiopaedia`, `nih_open_i`, `openstax`, `dermnet` e `teachmeanatomy` são
|
|
93
|
+
perfil web confiável sobre `web_search` + SerpAPI com `site:` explícito, não
|
|
94
|
+
APIs nativas.
|
|
95
|
+
- Se nenhuma candidata servir, o rerank deve retornar `null`; se
|
|
96
|
+
`minimum_quality_met=false`, o perfil `clinical` não insere imagem meia-certa.
|
|
97
|
+
- Use `--quality-report <arquivo.json>` quando precisar revisar fontes e razões
|
|
98
|
+
de aceite/recusa; o relatório local não deve conter Markdown bruto ou imagens.
|
|
99
|
+
|
|
100
|
+
Use o contrato de saída para transformar logs e JSON em resumo curto com status
|
|
101
|
+
emoji, contagens, arquivos relevantes, warnings e próxima ação. Não despeje JSON
|
|
102
|
+
bruto por padrão.
|
|
103
|
+
|
|
104
|
+
## Falhas comuns
|
|
105
|
+
|
|
106
|
+
- **Vault/Wiki não configurado**: peça o caminho e atualize
|
|
107
|
+
`[paths].wiki_dir` em `~/.mednotes/config.toml`; use
|
|
108
|
+
`[vault].path` apenas como compatibilidade.
|
|
109
|
+
- **Gemini CLI sem login**: peça para autenticar o Gemini CLI.
|
|
110
|
+
- **Gemini CLI não encontrado**: no Windows, o orquestrador tenta `gemini.cmd`;
|
|
111
|
+
ajuste `[gemini].binary` no config persistente só se necessário.
|
|
112
|
+
- **Sem `SERPAPI_KEY`/`SERPAPI_API_KEY`**: `web_search` e os perfis web
|
|
113
|
+
confiáveis retornam `[]`; Wikimedia continua. Configure via
|
|
114
|
+
`gemini extensions config medical-notes-workbench SERPAPI_KEY` ou `.env`
|
|
115
|
+
persistente, nunca dentro de `${extensionPath}`.
|
|
116
|
+
- **Cota/limite SerpAPI esgotado**: o lote para imediatamente com `rc=9` e
|
|
117
|
+
aviso claro para evitar novas chamadas à API. Oriente o usuário a renovar a
|
|
118
|
+
cota/chave ou rodar novamente só com fontes disponíveis.
|
|
119
|
+
- **Downloads 403**: o downloader tenta headers browser-like e fallback de
|
|
120
|
+
thumbnail SerpAPI quando disponível; se ainda falhar, pule a candidata.
|