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,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.
|
package/package.json
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "mednotes-opencode",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "MedNotes plugin for OpenCode: FSM-first medical notes workflows for Obsidian and Anki.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"private": false,
|
|
7
|
+
"main": "./.opencode/plugins/mednotes-fsm.mjs",
|
|
8
|
+
"exports": {
|
|
9
|
+
".": "./.opencode/plugins/mednotes-fsm.mjs"
|
|
10
|
+
},
|
|
11
|
+
"bin": {
|
|
12
|
+
"mednotes-opencode": "./bin/mednotes-opencode.mjs"
|
|
13
|
+
},
|
|
14
|
+
"publishConfig": {
|
|
15
|
+
"access": "public"
|
|
16
|
+
},
|
|
17
|
+
"files": [
|
|
18
|
+
".opencode",
|
|
19
|
+
"AGENTS.md",
|
|
20
|
+
"README.md",
|
|
21
|
+
"adapters",
|
|
22
|
+
"bin",
|
|
23
|
+
"contracts",
|
|
24
|
+
"core"
|
|
25
|
+
],
|
|
26
|
+
"keywords": [
|
|
27
|
+
"opencode",
|
|
28
|
+
"mednotes",
|
|
29
|
+
"obsidian",
|
|
30
|
+
"anki",
|
|
31
|
+
"medical-notes"
|
|
32
|
+
],
|
|
33
|
+
"engines": {
|
|
34
|
+
"node": ">=20.17.0"
|
|
35
|
+
},
|
|
36
|
+
"repository": {
|
|
37
|
+
"type": "git",
|
|
38
|
+
"url": "git+https://github.com/augustocaruso/mednotes.git"
|
|
39
|
+
},
|
|
40
|
+
"bugs": {
|
|
41
|
+
"url": "https://github.com/augustocaruso/mednotes/issues"
|
|
42
|
+
},
|
|
43
|
+
"homepage": "https://github.com/augustocaruso/mednotes#readme",
|
|
44
|
+
"license": "UNLICENSED"
|
|
45
|
+
}
|