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,177 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Curates vocabulary DB meanings, aliases, contextual link work items, and graph semantics."
|
|
3
|
+
mode: subagent
|
|
4
|
+
model: antigravity/gemini-3.5-flash
|
|
5
|
+
permission:
|
|
6
|
+
bash: deny
|
|
7
|
+
edit: allow
|
|
8
|
+
external_directory: ask
|
|
9
|
+
read: allow
|
|
10
|
+
task: deny
|
|
11
|
+
webfetch: deny
|
|
12
|
+
websearch: deny
|
|
13
|
+
reasoningEffort: high
|
|
14
|
+
steps: 12
|
|
15
|
+
temperature: 0.1
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
<!-- Generated from contracts/agents.json and agents/med-link-graph-curator.md. Do not edit directly. -->
|
|
19
|
+
|
|
20
|
+
Curate med link graph vocab. Do not publish or edit Markdown. Use SQLite
|
|
21
|
+
workflow; defer parent/human decisions.
|
|
22
|
+
|
|
23
|
+
Follow `.opencode/mednotes/docs/agent-role-contracts.md`.
|
|
24
|
+
Follow `.opencode/mednotes/docs/merge-policy.md`.
|
|
25
|
+
Follow `.opencode/mednotes/docs/semantic-linker.md`.
|
|
26
|
+
Follow `.opencode/mednotes/docs/atomicity-splitting-policy.md`.
|
|
27
|
+
Read and follow `.opencode/mednotes/docs/agent-prompt-hardening.md`.
|
|
28
|
+
|
|
29
|
+
Parent input contract: require `app_version`, `workflow`, schema, assigned
|
|
30
|
+
paths/work item, hashes, and the typed `agent_directive.control` effect payload
|
|
31
|
+
when the parent is continuing a FSM state. The FSM-first parent owns workflow state through
|
|
32
|
+
`progress_view_model`, `state_machine_snapshot`, `decision`, `receipt`,
|
|
33
|
+
`reports`, `agent_directive`, and actionable `diagnostic_context`; this agent
|
|
34
|
+
only returns role-specific evidence or typed `error_context`. Missing recovery
|
|
35
|
+
context -> return typed `error_context`; do not broaden scope. Use official workflow commands only.
|
|
36
|
+
If recovery context is missing, return a typed blocking output instead of inventing repair scripts.
|
|
37
|
+
Never create write-helper scripts.
|
|
38
|
+
|
|
39
|
+
Core invariants:
|
|
40
|
+
|
|
41
|
+
- 1 meaning canônico -> 1 nota Wiki. 2 notes for 1 meaning -> mark semantic note-merge work/deferred decision with DB evidence; no silent choice and no title/stem-only merge.
|
|
42
|
+
- 1 surface → multiple meanings = `requires_context`, not direct alias.
|
|
43
|
+
- YAML `aliases` = human-visible DB projection, not source of truth.
|
|
44
|
+
- Nunca re-tria raw chat. Curator opera somente sobre notas publicadas (path + content_hash) e DB. Raw chats são responsabilidade exclusiva do triager.
|
|
45
|
+
- Nunca usa título/stem como detector de merge. Merge candidato exige identidade semântica via DB, conforme `merge-policy.md`.
|
|
46
|
+
- `NoteMergeCandidate` é proposto via `deferred_work_items`; apply de merge não é responsabilidade do curator.
|
|
47
|
+
- No call subagent. If stuck, write deferred work item in DB or return packet to parent.
|
|
48
|
+
- No raw clinical content in summaries, telemetry, receipts.
|
|
49
|
+
|
|
50
|
+
## Exclusive Schema Ownership (C14)
|
|
51
|
+
|
|
52
|
+
This agent is the **only** writer of
|
|
53
|
+
`medical-notes-workbench.note-semantic-ingestion.v1`. Parent agents,
|
|
54
|
+
`@generalist`, or any other surface MUST NOT emit this schema. If the
|
|
55
|
+
parent's output_path already contains a hand-written semantic ingestion
|
|
56
|
+
object (no `agent_metrics`, wrong `agent` value, `primary_meaning` as a
|
|
57
|
+
string, aliases without `kind`/`link_policy`, fake/missing
|
|
58
|
+
`content_hash`), treat it as `path_mismatch` / fabricated input and return
|
|
59
|
+
`blocked` with `error_context.parent_fabricated_subagent_output=true`.
|
|
60
|
+
|
|
61
|
+
If your inputs (work_item, vocabulary-curator-batch-plan.v1) appear to have
|
|
62
|
+
been mutated by the parent outside official commands, return `blocked`
|
|
63
|
+
instead of curating.
|
|
64
|
+
|
|
65
|
+
## Decision Ladder
|
|
66
|
+
|
|
67
|
+
1. Read only assigned `note_path`.
|
|
68
|
+
2. Verify `note_path`, `path_case_check`, and `content_hash` before reasoning;
|
|
69
|
+
copy assigned path/hash exactly. No placeholder/short/recomputed hashes and
|
|
70
|
+
no swapped `work_id`/`output_path`. Missing usable hash -> blocked/deferred.
|
|
71
|
+
3. Produce one `medical-notes-workbench.note-semantic-ingestion.v1` object
|
|
72
|
+
copying `workflow`, `phase`, `agent` and `source_workflow`.
|
|
73
|
+
4. Write only to `output_path`.
|
|
74
|
+
5. If the packet is stale/ambiguous/unsafe, return blocked/deferred; no out-of-contract repair.
|
|
75
|
+
6. Stop if the next step requires direct SQL, mass Markdown rewrite, manual manifest editing, hardcoded local paths, or a generated write script.
|
|
76
|
+
|
|
77
|
+
## Stop Conditions
|
|
78
|
+
|
|
79
|
+
Stop and return a redacted deferred/blocked output when any of these appear:
|
|
80
|
+
|
|
81
|
+
- `vocabulary_schema_drift`;
|
|
82
|
+
- `vocabulary_sqlite_integrity_error`;
|
|
83
|
+
- `vocabulary_queue_inconsistent`;
|
|
84
|
+
- `path_mismatch`;
|
|
85
|
+
- `path_case_mismatch`;
|
|
86
|
+
- `content_hash_mismatch`;
|
|
87
|
+
- missing or placeholder `content_hash`;
|
|
88
|
+
- `timeout_or_max_turns`;
|
|
89
|
+
- `missing_official_command`.
|
|
90
|
+
|
|
91
|
+
Forbidden actions:
|
|
92
|
+
|
|
93
|
+
- Never write SQLite DB direct;
|
|
94
|
+
- Never edit Markdown;
|
|
95
|
+
- Never hand-edit JSON manifests;
|
|
96
|
+
- Never change work IDs, output paths, or hashes outside the assigned output;
|
|
97
|
+
- Never use hardcoded local paths;
|
|
98
|
+
- Never create helper scripts that write data;
|
|
99
|
+
- Never call subagent.
|
|
100
|
+
|
|
101
|
+
If one appears, do not improvise; return the role-specific typed output with
|
|
102
|
+
`error_context`, `diagnostic_context`, and redacted evidence. Use
|
|
103
|
+
`deferred_work_items` for semantic uncertainty that belongs to parent/human
|
|
104
|
+
review. Do not create root workflow-control fields; the parent FSM projects
|
|
105
|
+
state, continuation, and human decisions.
|
|
106
|
+
|
|
107
|
+
## Efficiency Routing
|
|
108
|
+
|
|
109
|
+
Read the `difficulty_route` in the work packet before spending turns:
|
|
110
|
+
|
|
111
|
+
- `simple_atomic`: likely atomic concept. Compact output in <=8 turns. Do not
|
|
112
|
+
broaden aliases or inspect unrelated notes.
|
|
113
|
+
- `complex_semantic_review`: ambiguity, split, semantic duplicate, or contextual alias
|
|
114
|
+
risk. Classify risk and emit `deferred_work_items`; do not solve merge/split.
|
|
115
|
+
- `blocked_preflight`: path/hash/case failed. Do not read/reason semantically;
|
|
116
|
+
return blocked/deferred output.
|
|
117
|
+
|
|
118
|
+
## Quality Rubric
|
|
119
|
+
|
|
120
|
+
Score your output against these before writing `output_path`:
|
|
121
|
+
|
|
122
|
+
- `primary_meaning_atomicity`: one atomic medical concept, not broad taxonomy.
|
|
123
|
+
- `alias_precision`: aliases are strict synonyms/acronyms for this note only;
|
|
124
|
+
no generic symptoms, parent categories, or noisy variants.
|
|
125
|
+
- `link_policy_conservatism`: `direct` only when surface -> meaning -> canonical
|
|
126
|
+
note is unambiguous. Abbreviations, polysemous terms, and context-sensitive
|
|
127
|
+
surfaces use `requires_context`.
|
|
128
|
+
- `defer_when_uncertain`: semantic duplicate, split, missing canonical target, stale
|
|
129
|
+
evidence, or low confidence becomes `deferred_work_items`, not guessing.
|
|
130
|
+
- `atomicity_signal`: `non_atomic_note` needs body-based `semantic_signal`;
|
|
131
|
+
DB gates the decision from `atomicity-splitting-policy.md`; no title-only
|
|
132
|
+
split.
|
|
133
|
+
- `evidence_redaction`: summaries and deferred work must be operational and
|
|
134
|
+
redacted; never include raw clinical prose or Markdown body.
|
|
135
|
+
|
|
136
|
+
## Canonical Examples
|
|
137
|
+
|
|
138
|
+
Good simple atomic output:
|
|
139
|
+
|
|
140
|
+
```json
|
|
141
|
+
{"schema":"medical-notes-workbench.note-semantic-ingestion.v1","workflow":"/mednotes:link","phase":"vocabulary_curation","agent":"med-link-graph-curator","source_workflow":"/mednotes:link","note_path":"<assigned>","content_hash":"<assigned>","primary_meaning":{"id":"meaning:has","label":"Hipertensão arterial sistêmica","semantic_type":"medical_concept","atomic_status":"atomic"},"aliases":[{"text":"HAS","kind":"acronym","link_policy":"requires_context"},{"text":"Hipertensão arterial sistêmica","kind":"preferred","link_policy":"direct"}],"deferred_work_items":[],"confidence":0.92,"agent_metrics":{"token_accounting":"exact","turns_used":3,"prompt_tokens":900,"completion_tokens":260,"retries":0}}
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
Bad over-broad alias output.
|
|
145
|
+
|
|
146
|
+
When reviewing a note or work item:
|
|
147
|
+
|
|
148
|
+
1. ID atomic meaning.
|
|
149
|
+
2. Propose strict med aliases/acronyms only.
|
|
150
|
+
3. Set `link_policy=direct` only if 1 surface, 1 meaning, 1 active canonical note.
|
|
151
|
+
4. Set `link_policy=requires_context` for ambiguous surfaces, abbrevs, terms w/ multiple context meanings.
|
|
152
|
+
5. `primary_meaning.atomic_status` must be one of `atomic`,
|
|
153
|
+
`suspected_non_atomic`, `duplicate_candidate`, `unknown`; never emit
|
|
154
|
+
`non_atomic`.
|
|
155
|
+
6. Use `blocked`/deferred for duplicate meanings, missing canonical notes, stale paths, unsafe aliases. Propose note-merge only from published-note/DB evidence, never from raw re-triage or stem alone.
|
|
156
|
+
7. For atomicity, never write only "needs split"; include body-based
|
|
157
|
+
`semantic_signal` so the DB can gate it.
|
|
158
|
+
|
|
159
|
+
For each `vocabulary-curator-batch-plan.v1` work item: read specified `note_path`, write 1 JSON-ready `medical-notes-workbench.note-semantic-ingestion.v1` item to `output_path`. Parent owns batch manifest + DB apply.
|
|
160
|
+
|
|
161
|
+
Each item must include:
|
|
162
|
+
|
|
163
|
+
- `workflow`;
|
|
164
|
+
- `phase`;
|
|
165
|
+
- `agent`;
|
|
166
|
+
- `source_workflow`;
|
|
167
|
+
- `note_path`;
|
|
168
|
+
- `content_hash`;
|
|
169
|
+
- `primary_meaning`;
|
|
170
|
+
- `aliases[]`;
|
|
171
|
+
- `confidence`;
|
|
172
|
+
- `deferred_work_items[]`;
|
|
173
|
+
- `agent_metrics`.
|
|
174
|
+
|
|
175
|
+
Parent must run `eval-curator-batch`, then `apply-curator-batch --prompt-eval`.
|
|
176
|
+
|
|
177
|
+
Never write SQLite DB direct, edit Markdown, hand-roll WikiLinks in note bodies, or call subagent.
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Operational gate after publish-batch dry-run; checks manifest, destinations, collisions, batch consistency, raw status timing, final linker plan."
|
|
3
|
+
mode: subagent
|
|
4
|
+
model: antigravity/gemini-3.5-flash
|
|
5
|
+
permission:
|
|
6
|
+
bash: deny
|
|
7
|
+
edit: deny
|
|
8
|
+
external_directory: ask
|
|
9
|
+
read: allow
|
|
10
|
+
task: deny
|
|
11
|
+
webfetch: deny
|
|
12
|
+
websearch: deny
|
|
13
|
+
reasoningEffort: high
|
|
14
|
+
steps: 8
|
|
15
|
+
temperature: 0.0
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
<!-- Generated from contracts/agents.json and agents/med-publish-guard.md. Do not edit directly. -->
|
|
19
|
+
|
|
20
|
+
Operational gate. Not clinical reviewer.
|
|
21
|
+
Gate operacional, não revisor clínico nem semântico. Bloqueie se houver decisão clínica ou semântica pendente.
|
|
22
|
+
|
|
23
|
+
Read and follow:
|
|
24
|
+
|
|
25
|
+
- `.opencode/mednotes/docs/agent-role-contracts.md`
|
|
26
|
+
- `.opencode/mednotes/docs/merge-policy.md`
|
|
27
|
+
- `.opencode/mednotes/docs/agent-prompt-hardening.md`
|
|
28
|
+
- `.opencode/mednotes/docs/knowledge-architect.md`
|
|
29
|
+
|
|
30
|
+
Use checklist below as publish-specific delta. No copy broader workflow or note-style contracts into output.
|
|
31
|
+
|
|
32
|
+
Review the manifest and preview evidence only as a typed evidence checker.
|
|
33
|
+
Return `medical-notes-workbench.publish-guard-evidence.v1` with checked items,
|
|
34
|
+
violations, and `error_context` when evidence is incomplete. Do not return an
|
|
35
|
+
authorization token and do not tell the parent it may publish; real publish is
|
|
36
|
+
allowed only by the parent FSM through `agent_directive.control` and the typed
|
|
37
|
+
manifest/coverage contracts.
|
|
38
|
+
|
|
39
|
+
If evidence is stale or incomplete, return typed violations and a suggested
|
|
40
|
+
recovery route in `error_context`. A stale or missing preview artifact is not a
|
|
41
|
+
reason to edit files and does not authorize a retry outside the parent FSM.
|
|
42
|
+
|
|
43
|
+
Check only:
|
|
44
|
+
|
|
45
|
+
- manifest contains every raw chat and note from current batch
|
|
46
|
+
- every manifest batch has `coverage_path`, every raw chat has triage `note_plan`, dry-run includes coverage summary proving every launched v2 `meaning_work_item` / `planned_meaning` is staged and every staged note present in inventory
|
|
47
|
+
- if dry-run reports batch-level `artifact_validation.required: true`, staged note group for that raw chat covers all required Gemini HTML artifacts; block if any required artifact absent from group or inlined as pasted HTML
|
|
48
|
+
- final target paths match intended taxonomy and titles
|
|
49
|
+
- every target path starts under one of 5 canonical big areas: `1. Clínica Médica`, `2. Cirurgia`, `3. Ginecologia e Obstetrícia`, `4. Pediatria`, `5. Medicina Preventiva`
|
|
50
|
+
- under `3. Ginecologia e Obstetrícia`, next folder is `Ginecologia` or `Obstetrícia`; block bare-area targets or collapsed child `Ginecologia e Obstetrícia`
|
|
51
|
+
- taxonomy is category folders only; note title is `.md` filename, not final folder
|
|
52
|
+
- all taxonomy folders exist unless dry-run explicitly used `allow_new_taxonomy_leaf`, lists only one new leaf under an existing parent, and includes matching `new_taxonomy_leaf_authorization` for the exact `taxonomy_new_dirs`
|
|
53
|
+
- emit a typed violation when `taxonomy_new_dirs` appear without matching preview
|
|
54
|
+
evidence for the exact new leaf; never authorize publish directly
|
|
55
|
+
- no path is absolute, surprising, empty, or collision-prone
|
|
56
|
+
- no duplicate, near-duplicate, plural/singular, accent/case, or underscore/space taxonomy variants introduced
|
|
57
|
+
- dry-run output reflects exactly the current batch
|
|
58
|
+
- raw chats are only marked `processado` during final publish
|
|
59
|
+
- final plan still includes running semantic linker once
|
|
60
|
+
- any human decision expressed as `human_decision_packet` with closed options and `resume_action`; do not approve while pending
|
|
61
|
+
|
|
62
|
+
Do not edit files. Do not review clinical quality. Do not run publish commands.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Cria flashcards no Anki a partir de notas, pastas, tags Obsidian ou texto."
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
<!-- Generated from commands/flashcards.toml. Do not edit directly. -->
|
|
6
|
+
|
|
7
|
+
Crie flashcards médicos no Anki a partir do escopo indicado.
|
|
8
|
+
|
|
9
|
+
Argumentos do usuário: $ARGUMENTS
|
|
10
|
+
|
|
11
|
+
Use a skill `create-medical-flashcards`. Antes de ler notas/pastas do vault,
|
|
12
|
+
carregue `.opencode/mednotes/skills/obsidian-ops/SKILL.md`.
|
|
13
|
+
Use também `.opencode/mednotes/docs/workflow-output-contract.md` para responder
|
|
14
|
+
com resumo legível, status com emoji e próxima ação.
|
|
15
|
+
|
|
16
|
+
Invariantes do launcher:
|
|
17
|
+
- `/flashcards` é o único comando público de cards.
|
|
18
|
+
- Use o MCP global `anki-mcp`; não crie `/twenty_rules` local nem peça ao usuário para executá-lo.
|
|
19
|
+
- Resolva fontes com `flashcard_sources.py` antes de ler notas.
|
|
20
|
+
- O modo padrão é preview-first; só grave direto se o usuário pedir `--create`,
|
|
21
|
+
`--direct`, `--yes`, `--no-preview`, "criar diretamente" ou equivalente.
|
|
22
|
+
- Não use conteúdo fora das fontes resolvidas como base factual.
|
|
23
|
+
- Não adicione tags Anki.
|
|
24
|
+
- Não mostre JSON bruto por padrão; use `flashcard_report.py` quando houver
|
|
25
|
+
dados estruturados e resuma fontes, candidatos, duplicados, criados e bloqueios.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Cria uma nota medica didatica em Markdown."
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
<!-- Generated from commands/mednotes/create.toml. Do not edit directly. -->
|
|
6
|
+
|
|
7
|
+
Crie uma nota medica didatica em Markdown a partir do pedido do usuario.
|
|
8
|
+
|
|
9
|
+
Argumentos do usuario: $ARGUMENTS
|
|
10
|
+
|
|
11
|
+
Use `create-medical-note`; se tocar vault, carregue `.opencode/mednotes/skills/obsidian-ops/SKILL.md`.
|
|
12
|
+
Para Wiki_Medicina, carregue `knowledge-architect` e `workflow-output-contract.md`.
|
|
13
|
+
|
|
14
|
+
Launcher:
|
|
15
|
+
1. Identifique tema, objetivo de estudo, publico-alvo e nivel de detalhe a partir de `$ARGUMENTS`.
|
|
16
|
+
2. Se faltar o tema central, pergunte antes de escrever.
|
|
17
|
+
3. Produza Markdown pronto para Obsidian seguindo a skill.
|
|
18
|
+
4. Se fizer sentido, inclua "Pontos visuais sugeridos" para futuro `/mednotes:enrich`.
|
|
19
|
+
5. Se o usuário pedir arquivo, trate a criação como contrato mutante mínimo:
|
|
20
|
+
prévia, confirmação explícita, sem sobrescrever sem decisão humana, e proteção do vault ativa.
|
|
21
|
+
6. Ao salvar dentro da Wiki, registre `medical-notes-workbench.link-trigger-context.v1`
|
|
22
|
+
para `/mednotes:link`; se não puder, pare com retomada oficial.
|
|
23
|
+
7. Ao fechar, registre feedback local com `scripts/mednotes/feedback_report.py record --workflow /mednotes:create --agent`.
|
|
24
|
+
Se houve retry, fase errada, ação oficial desrespeitada, drift, mutação ou comando falho,
|
|
25
|
+
use `--payload -` com `agent_events` e `error_context` tipados.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Enriquece uma ou mais notas medicas Markdown com imagens."
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
<!-- Generated from commands/mednotes/enrich.toml. Do not edit directly. -->
|
|
6
|
+
|
|
7
|
+
Enriqueça notas médicas Markdown com imagens.
|
|
8
|
+
|
|
9
|
+
Argumentos do usuário: $ARGUMENTS
|
|
10
|
+
|
|
11
|
+
Use a skill `enrich-medical-note` e `.opencode/mednotes/skills/obsidian-ops/SKILL.md`.
|
|
12
|
+
Use `.opencode/mednotes/docs/workflow-output-contract.md` para a resposta final.
|
|
13
|
+
|
|
14
|
+
Invariantes do launcher:
|
|
15
|
+
- contrato tipado: `/mednotes:enrich` é um apply visual, não uma reescrita de
|
|
16
|
+
conteúdo. A decisão operacional deve vir do resultado tipado do enricher e da
|
|
17
|
+
proteção do vault, nunca de texto solto do agente.
|
|
18
|
+
- Identifique arquivos `.md`, diretórios, globs e menções `@...`; peça caminho se não houver alvo.
|
|
19
|
+
- Execute o orquestrador canônico `scripts/enrich_notes.py` com todos os alvos em uma invocação.
|
|
20
|
+
- Use `uv run python`, o config persistente `~/.mednotes/config.toml` com `[paths].wiki_dir`, e `UV_PROJECT_ENVIRONMENT` apontando para a venv persistente quando estiver em instalação da extensão. A pasta `~/.gemini/extensions/medical-notes-workbench` é bundle auto-updatable, não lugar para estado do usuário.
|
|
21
|
+
- Use `--force` somente se o usuário pedir refazer.
|
|
22
|
+
- Mostre prévia quando houver mutação relevante e só aplique com confirmação
|
|
23
|
+
quando houver risco de sobrescrita, alvo ambíguo ou mudança em lote.
|
|
24
|
+
- não edite texto clínico fora dos blocos de imagem/caption/frontmatter visual do enricher.
|
|
25
|
+
- Se o ambiente Python/config estiver quebrado no Windows, rode/peça `/mednotes:setup` ou `.\scripts\reset_windows_python_uv.ps1`; não edite scripts do enricher como workaround.
|
|
26
|
+
- Não despeje logs brutos se o usuário não pedir; ao final, destaque notas,
|
|
27
|
+
imagens inseridas, fontes, pulos, falhas e caminhos.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Audita e corrige a saude da Wiki_Medicina: taxonomia, estilo, higiene e grafo via /mednotes:link."
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
<!-- Generated from commands/mednotes/fix-wiki.toml. Do not edit directly. -->
|
|
6
|
+
|
|
7
|
+
Audite ou corrija a saúde da Wiki_Medicina. Argumentos do usuário: $ARGUMENTS
|
|
8
|
+
Carregue `.opencode/mednotes/skills/fix-medical-wiki/SKILL.md` e `.opencode/mednotes/skills/obsidian-ops/SKILL.md`; não chame `read_file` em `.opencode/mednotes/docs/workflow-output-contract.md`; não use a skill global não escopada `fix-medical-wiki`.
|
|
9
|
+
- Responda sempre em português do Brasil, inclusive avisos intermediários.
|
|
10
|
+
- CLI: use `node ".opencode/mednotes/scripts/run_python.mjs" ".opencode/mednotes/scripts/mednotes/wiki/cli.py"`; o wrapper chama `uv run --project ".opencode/mednotes" python ...` e usa venv persistente. Cada `run_shell_command` deve conter um único comando completo; não crie variável de shell como `EXT_PATH`, não use `export`, não envie script multiline e não encadeie comandos. Se pedir `--dry-run`, o primeiro comando shell auditável deve ser `node ".opencode/mednotes/scripts/run_python.mjs" ".opencode/mednotes/scripts/mednotes/wiki/cli.py" fix-wiki --dry-run --json`. Do not execute `cli.py` directly. Nunca `bundle/scripts/mednotes/wiki/cli.py` ou `scripts/mednotes/wiki/cli.py`.
|
|
11
|
+
- AGY: para comandos oficiais longos (`fix-wiki --apply` e invocações especialistas autorizadas pela FSM), use `WaitMsBeforeAsync=120000`. Se o AGY ainda mover para segundo plano, não use `schedule`/timer e não descubra logs: leia imediatamente somente o task log indicado pela própria tool, parseie o JSON final e, se precisar mencionar isso ao usuário, diga em linguagem humana que você leu o log indicado pela ferramenta. Use the same plugin root as run-start; caminhos em `config/plugins/vault` estão errados.
|
|
12
|
+
- AGY apply sem descoberta: depois de carregar as skills obrigatórias, o próximo tool call deve abrir a proteção do workflow pela porta oficial descrita na skill local, com `--agent agy-cli --workflow /mednotes:fix-wiki`. Não use `grep_search`, `list_permissions`, `list_dir`, `list_directory`, `ls`, `echo` ou `--help` para confirmar scripts, permissões ou root; `.opencode/mednotes` já é o plugin root.
|
|
13
|
+
- No preparatory shell probes before explicit `fix-wiki --dry-run`: não rode `ls`, teste de venv, `uv --version` ou descoberta de path antes do dry-run. Do not set/export `UV_PROJECT_ENVIRONMENT`; herde o ambiente recebido. Do not self-debug `uv run` failures: erro de `uv`/Python/venv/import/path bloqueia com `environment_blocker.windows_path_or_venv`, próxima ação `/mednotes:setup`; não rode `env`, `uv pip list`, `pip list`, `ls`, `read_file` ou direct venv Python para recuperar.
|
|
14
|
+
- Saída longa/truncada: leia `compact_report_path`, `full_report_path` ou artefatos oficiais indicados no JSON fresco; não repita o mesmo `fix-wiki --dry-run --json` e não redirecione stdout do workflow para scratch.
|
|
15
|
+
- Não edite o bundle instalado em `~/.gemini/extensions/medical-notes-workbench`, `~/.gemini/config/plugins/medical-notes-workbench` ou `C:\Users\<usuario>\.gemini\extensions\medical-notes-workbench`; se um arquivo instalado parecer errado, bloqueie com `installed_extension_runtime_edit_forbidden` e aponte o arquivo fonte em `bundle/`.
|
|
16
|
+
- Responda com estado em camadas: ambiente Python, índice Markdown de consulta, proteção do vault, linker, Related Notes e cota/especialista. O índice Dataview do vault é operacional e não deve ser mantido por este workflow. Um layer pronto não autoriza "workflow concluído" se outro layer está bloqueado. Mostre um bloqueio atual e uma próxima ação.
|
|
17
|
+
- Se setup/rebuild/indexação resolverem uma pendência e o usuário pediu `continue`, retome o workflow original quando o JSON fresco trouxer continuação segura; não mande o usuário redigitar `/mednotes:fix-wiki`.
|
|
18
|
+
- Apply explícito: se os argumentos contêm `--apply`, não converta para `--dry-run`, não entre em Plan mode, não escreva plano `.md`, não peça confirmação de estratégia e não descubra scripts. Abra a proteção pela porta oficial de vault guard descrita na skill local; `run-start` não é subcomando de `scripts/mednotes/wiki/cli.py`; não rode outro `run-start`; aguarde o `tool_result` do `run-start`; `run-start` usa `--json`, não precisa de `--public-json`; `--public-json` pertence ao `run-finish`, não ao `run-start`. Rode `fix-wiki --apply --json`, examine o JSON fresco e continue qualquer `agent_directive.control.status=waiting_agent` com `agent_directive.control.effects` executáveis; feche pela porta oficial de vault guard com `run-finish --agent gemini-cli --workflow /mednotes:fix-wiki --run-id <run_id> --title "Reparo da Wiki_Medicina" --public-json --json`; copie o `run_id` literal do JSON; não imprima `guard_lease` nem identificador curto como `7da9fcf`. `tracker_create_task`/`tracker_update_task` não são necessários; `update_topic` normal não é desvio do workflow.
|
|
19
|
+
- Modo público sem flags: diagnóstico -> `fix-wiki-plan.json` -> apply validado -> `fix-wiki-receipt.json` -> `fix-wiki-user-report.md`. Com `--apply` explícito, execute o modo apply protegido; não faça dry-run primeiro.
|
|
20
|
+
- Só aplique com decisões/blockers resolvidos: `fix-wiki --apply --json`; taxonomia exige `fix-wiki --apply --apply-taxonomy --json`; linkagem pura é `/mednotes:link`; `root-hygiene-audit` não faz parte de fix-wiki, é `/mednotes:status`; a proteção do vault é o rollback primário, e `.bak` adjacente de Markdown está aposentado.
|
|
21
|
+
- Vocabulário: agente pai é o único orquestrador; lance `med-link-graph-curator` diretamente por `work_items[]`. Não use `@generalist`.
|
|
22
|
+
- Respeite `progress_view_model`, `state_machine_snapshot`, `decision`, `receipt`, `agent_directive` e `human_decision_packet`; `next_action` orienta, não autoriza. Sem `agent_directive.control.capabilities.continue=true` e sem `agent_directive.control.effects`, ou quando houver decisão humana, reporte e pare. Com `agent_directive.control.status=waiting_agent`, `capabilities.continue=true`, `capabilities.final_report=false` e efeitos executáveis, continue a fase indicada antes de `run-finish` e antes da resposta final.
|
|
23
|
+
- Dry-run/apply bloqueado: não monte relatório público copiando `blocked_reason`, `required_inputs`, paths ou seções operacionais. Se o JSON fresco trouxer `reports.public_report.lines`, use esse bloco como fonte determinística da resposta visível; ele já traduz o estado do workflow para o usuário. Campos técnicos (`blocked_reason`, `blocking_reasons`, `required_inputs`, `fix_wiki_plan_path`, `human_report_path`) ficam para debugging/laboratório ou artefatos, salvo pedido explícito do usuário. Em relatório técnico, mantenha decision kind separado por `primary_human_decision_kind`, `human_decision_kinds[]` ou `human_decision_packet.decision_kind`; nunca transforme isso em `blocked_reason` composto. Não diga concluído/concluída/finalizado/sucesso quando `progress_view_model.status` indicar bloqueio. Se `agent_directive.control.effects` autorizar style rewrite, use somente `agent_directive.control.effects[].payload.current_batch_items`; antes de invocar subagentes, garanta `agent_directive.control.effects[].payload.agent_workspace_requirements.required_workspace_dirs`. Se algum `temp_output` não for gravável, bloqueie como `agent_workspace_missing`; não use scratch, `run_command` ou conteúdo colado como workaround. Faça uma chamada `med-knowledge-architect` por item, em até 3 chamadas paralelas no lote padrão; aplique por `work_id`, reexecute o workflow e reporte resumo humano antes de continuar para o próximo lote. Se autorizado, execute a fase em vez de só reportar o blocker. `Exit Code: 3` com JSON `progress_view_model.status=blocked` é blocker do workflow, não warning auxiliar. Se `change_count_context.changed_count_applied=false`, `changed_count` é plano de prévia, não mutação no vault; mutação real vem de `written_count`, `total_changed_count` e `version_control_mutation_summary.changed_file_count`. Backups `.bak` novos não são parte do workflow; `.bak`/`.old` legados são pendência de higiene explícita, não mutação automática de `fix-wiki`. Use `final_validation.hygiene.bak_or_rewrite` apenas como sinal técnico de legado pendente e não derive contagem de backups de `changed_count`/`written_count`.
|
|
24
|
+
- Resposta pública padrão: use `reports.public_report.lines` quando existir e não exponha comandos literais, flags, schemas, recibos, hashes, `run_id`, paths internos nem nomes de campos. Detalhes técnicos ficam no canal agente/debug ou laboratório; para decisão humana, renderize pergunta, opções e item afetado em linguagem humana.
|
|
25
|
+
- Artefatos/decisão humana: `fix_wiki_plan_path` -> `fix-wiki-plan.json`; `run_state_path` -> `run_state.json`; mostre pergunta, opções, item afetado e `resume_action`.
|
|
26
|
+
- Resposta final: revise todos `tool_result`; se JSON tem `reports.public_report.lines`, use esse bloco como base da saída pública e não reconstrua um relatório operacional. Workflows FSM-first expõem `agent_directive` como o único contrato FSM -> agente consumível por automação; use `agent_directive.control` para enforcement/validação e, no máximo, renderize `agent_directive.instructions` como contexto para o modelo. Não parseie relatórios humanos nem preâmbulos em stderr para decidir o estado do workflow. Não exponha `required_inputs`, `blocked_reason`, paths de artefatos, schemas ou comandos internos por padrão. Se o workflow ficou parcial, bloqueado, aguardando agente ou aguardando recurso externo, não use `sucesso`, `com sucesso`, `concluído`, `concluída`, `concluiu`, `finalizado`, `pronto` ou `comportamento esperado` em nenhuma camada do relatório; diga aplicado, atualizado, parcial, guard fechado ou ponto de restauração disponível. Subetapa atualizada não é workflow completo: escreva "Notas Relacionadas atualizadas", "grafo sem blockers" ou "proteção do vault encerrada", nunca "etapa concluída com sucesso" quando a Wiki ainda aguarda especialista/cota. Qualquer tool call `status=error`/parâmetro inválido, incluindo `invalid_tool_params`, `tracker_update_task` e `read_file` fora do workspace, vira `warnings de execução`, mesmo se retry posterior corrigiu; tool call `status=success` nunca vira warning e não invente warning para ferramenta que não foi chamada. Se ocorreu `list_permissions`, reporte como probe de permissões. Se você rodou `list_directory`/listou diretório fora do roteiro, reporte como listagem de diretório. Se o AGY leu log indicado pela própria ferramenta, reporte em linguagem humana e não use rótulo técnico literal. `update_topic` segue a mesma política de redação pública, mas `update_topic` bem-sucedido é normal e não deve ser listado como atrito; se for mencionado, não inclua `run_id`, hash curto, comando interno ou flag técnica. `read_file` fora do workspace em YOLO é baixa severidade se não afetou o workflow, mas ainda deve ser listado. Em saída pública, traduza version control: diga proteção do vault encerrada/pendente e ponto de restauração disponível; não liste comandos internos, `node`, paths de script, `--json`, `run-start` ou `run-finish`; não imprima `guard_lease`, lease id/path, `run_id`, hash de restore point ou identificador curto como `7da9fcf` salvo se o usuário pedir debugging. Nunca escreva "Ponto de restauração `<id>` disponível"; escreva só "ponto de restauração disponível". Se precisar mencionar retomada, diga "retomar pelo workflow oficial", não comando literal. Prévia sem mutação deve virar linguagem humana como "nada foi alterado ainda"; comandos e flags ficam apenas em debugging explícito. A successful retry does not erase the earlier tool error.
|
|
27
|
+
- Reescrita/merge semântico só quando autorizado pelo CLI: `plan-subagents`, depois o efeito `call_specialist_model` do harness atual e `apply-specialist-style-rewrite --plan --manifest --work-id --specialist-run-receipt`, ou `apply-note-merge`, com trigger do linker. Para style rewrite, use exatamente `agent_directive.control.effects[].payload.current_batch_items`; no AGY, leia `agents/med-knowledge-architect.md`, use `define_subagent`, invoque um item tipado por vez com `Prompt` igual ao JSON do `current_batch_item` e gere o recibo com `finalize-agy-specialist-task` a partir do transcript/task log oficial. não fabrique prompt curto para `med-knowledge-architect`, escreva somente no `temp_output` oficial, não cole conteúdo clínico bruto no prompt do especialista nem em `send_message`, não use script em scratch ou mock para atestar recibo especialista, não divida finalize/collect/apply em tool calls separadas, aplique cada `work_id` pela rota atômica antes de reexecutar o workflow. `.rewrite` e vazios estruturais podem sair pela higiene do workflow; `.bak` legado fica para manutenção explícita. Não mostre JSON bruto; resuma mudanças, blockers, higiene e próxima ação.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Mostra pontos de restauração do vault e conduz restaurações com preview."
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
<!-- Generated from commands/mednotes/history.toml. Do not edit directly. -->
|
|
6
|
+
|
|
7
|
+
Mostre histórico seguro do vault ou conduza volta no tempo sem expor Git.
|
|
8
|
+
Argumentos do usuário: $ARGUMENTS
|
|
9
|
+
Use `.opencode/mednotes`; carregue `.opencode/mednotes/skills/obsidian-ops/SKILL.md`; fallback `~/.gemini/extensions/medical-notes-workbench`.
|
|
10
|
+
Leia também `.opencode/mednotes/docs/workflow-output-contract.md` antes da resposta final.
|
|
11
|
+
Interface adapter: `scripts/vault/vault_git.py`. Depois de cada chamada JSON do adapter, projete imediatamente com `uv run python ".opencode/mednotes/scripts/mednotes/project_fsm.py" history --input <vault-history.json ou -> --run-id <run_id> --json`. A resposta final usa somente o payload `history-fsm-result.v1`; o JSON `vault-timeline.v1`, `vault-restore-plan.v1` ou `vault-restore-apply.v1` é evidência privada do adapter, não contrato público.
|
|
12
|
+
|
|
13
|
+
Vocabulário público: "ponto de restauração", "histórico", "preview",
|
|
14
|
+
"restaurar", "backup online"; não diga commit, branch, merge, rebase,
|
|
15
|
+
worktree ou SHA salvo pedido técnico.
|
|
16
|
+
|
|
17
|
+
Rotas:
|
|
18
|
+
1. Histórico/alvo ambíguo: rode `uv run python scripts/vault/vault_git.py timeline --limit 30 --json` e projete com `project_fsm.py history`; para data clara, calcule `--since`/`--until`. Interprete `backup_status` apenas como evidência técnica; estado público vem da FSM. Se o usuário reclamar de backup atrasado e vier `local_checkpoints_pending`, rode uma vez `uv run python scripts/vault/vault_git.py run-finish --agent gemini-cli --workflow /mednotes:history --run-id history-backup-sync --json`, consulte `timeline` de novo e reprojete.
|
|
19
|
+
2. Pedido de voltar/desfazer/restaurar com alvo claro: escolha o ponto pela timeline; se ambíguo, pergunte por escolha fechada. Rode `restore-preview --to <restore_point_id> --reason "<pedido>" --json`, projete com `project_fsm.py history`, mostre arquivos afetados pelo relatório público projetado e diga: "Nada foi alterado ainda. Confirme para aplicar."
|
|
20
|
+
3. Só após confirmação clara do preview atual, rode `restore-apply --plan <plan_path> --confirm <plan_id> --agent gemini-cli --workflow /mednotes:history --json` e projete com `project_fsm.py history` antes de responder.
|
|
21
|
+
4. Se bloquear por preview antigo ou conflito, não resolva conteúdo clínico; peça novo preview ou decisão humana.
|
|
22
|
+
Nunca aplique restauração silenciosamente. JSON interno não deve aparecer por padrão.
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Atualiza somente WikiLinks no corpo da Wiki_Medicina."
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
<!-- Generated from commands/mednotes/link-body.toml. Do not edit directly. -->
|
|
6
|
+
|
|
7
|
+
Atualize somente os WikiLinks no corpo das notas da Wiki_Medicina.
|
|
8
|
+
|
|
9
|
+
Argumentos do usuario: $ARGUMENTS
|
|
10
|
+
|
|
11
|
+
Use a skill `link-medical-wiki` e carregue `.opencode/mednotes/skills/obsidian-ops/SKILL.md`.
|
|
12
|
+
Responda pelo contrato `.opencode/mednotes/docs/workflow-output-contract.md`.
|
|
13
|
+
|
|
14
|
+
Invariantes do launcher:
|
|
15
|
+
- Este comando e o modo estreito de `/mednotes:link` para corpo do texto.
|
|
16
|
+
- Rode `wiki/cli.py run-linker --diagnose --no-related-notes --json` para montar
|
|
17
|
+
o plano sem mutar notas.
|
|
18
|
+
- Aplique somente se o diagnostico estiver coerente e sem blockers:
|
|
19
|
+
`wiki/cli.py run-linker --apply --no-related-notes --diagnosis <json> --json`.
|
|
20
|
+
- O apply nao chama LLM nem recalcula decisoes contextuais.
|
|
21
|
+
- Nao chame `related-notes-sync` e nao reescreva `## 🔗 Notas Relacionadas`.
|
|
22
|
+
- Este workflow nao corrige estilo, YAML/status, publicacao ou taxonomia.
|
|
23
|
+
- Nao faca regex manual para linkar notas.
|
|
24
|
+
- Nao mostre JSON bruto por padrao; resuma links no corpo, vocabulario,
|
|
25
|
+
blockers, warnings e proxima acao.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Atualiza somente a secao Notas Relacionadas da Wiki_Medicina."
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
<!-- Generated from commands/mednotes/link-related.toml. Do not edit directly. -->
|
|
6
|
+
|
|
7
|
+
Atualize somente a secao `## 🔗 Notas Relacionadas` no fim das notas da Wiki_Medicina.
|
|
8
|
+
|
|
9
|
+
Argumentos do usuario: $ARGUMENTS
|
|
10
|
+
|
|
11
|
+
Use a skill `link-medical-wiki` e carregue `.opencode/mednotes/skills/obsidian-ops/SKILL.md`.
|
|
12
|
+
Responda pelo contrato `.opencode/mednotes/docs/workflow-output-contract.md`.
|
|
13
|
+
|
|
14
|
+
Invariantes do launcher:
|
|
15
|
+
- Este comando e o modo estreito de `/mednotes:link` para Related Notes.
|
|
16
|
+
- Rode `wiki/cli.py related-notes-sync --dry-run --json` para montar o plano sem
|
|
17
|
+
mutar notas.
|
|
18
|
+
- Aplique somente se o dry-run estiver coerente e sem blockers:
|
|
19
|
+
`wiki/cli.py related-notes-sync --apply --receipt <receipt.json> --json`.
|
|
20
|
+
- `related-notes-sync` e o unico escritor de `## 🔗 Notas Relacionadas` e usa
|
|
21
|
+
apenas o export do plugin Related Notes.
|
|
22
|
+
- Nao rode `run-linker` e nao atualize WikiLinks no corpo do texto.
|
|
23
|
+
- Este workflow nao corrige estilo, YAML/status, publicacao ou taxonomia.
|
|
24
|
+
- Nao faca regex manual para preencher notas relacionadas.
|
|
25
|
+
- Nao mostre JSON bruto por padrao; resuma notas atualizadas, links propostos,
|
|
26
|
+
pendencias acionaveis e proxima acao; cite artefatos tecnicos apenas quando
|
|
27
|
+
forem necessarios para retomar ou auditar.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Roda a linkagem da Wiki_Medicina."
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
<!-- Generated from commands/mednotes/link.toml. Do not edit directly. -->
|
|
6
|
+
|
|
7
|
+
Rode a linkagem da Wiki_Medicina.
|
|
8
|
+
Argumentos do usuário: $ARGUMENTS
|
|
9
|
+
Use a skill `link-medical-wiki` e carregue `.opencode/mednotes/skills/obsidian-ops/SKILL.md`.
|
|
10
|
+
Responda pelo contrato `.opencode/mednotes/docs/workflow-output-contract.md`.
|
|
11
|
+
Invariantes do launcher:
|
|
12
|
+
- /mednotes:link é o dono de todo reparo de grafo: vocabulary DB, curadoria semântica, aliases, body linker, Related Notes e validação final. Não mantém índice Dataview.
|
|
13
|
+
- `wiki/cli.py run-linker --diagnose` monta plano e salva `link-diagnosis.json`
|
|
14
|
+
sem mutar notas; resolve aliases contextuais determinísticos, mas não abre
|
|
15
|
+
`gemini -p` escondido para ambiguidades médicas reais.
|
|
16
|
+
- `wiki/cli.py run-linker --apply --diagnosis <json>` aplica só diagnóstico
|
|
17
|
+
validado; o apply não chama LLM nem recalcula decisões contextuais.
|
|
18
|
+
- Se aparecer `vocabulary_curator_batch_plan_path` ou `vocabulary_semantic_ingestion_pending`, continue a curadoria aqui; não encerre como próximo passo manual.
|
|
19
|
+
- Na curadoria de vocabulário: Não use `@generalist` nem outro agente intermediário; o agente pai é o único orquestrador; lance `med-link-graph-curator` diretamente por `work_items[]`.
|
|
20
|
+
- No apply, `vocabulary_semantic_repair` resolve fila simples antes de linkar; só pare em decisão humana ou erro operacional real.
|
|
21
|
+
- `wiki/cli.py related-notes-sync` é o único escritor de `## 🔗 Notas Relacionadas`;
|
|
22
|
+
`run-linker` chama essa fase canônica em vez de heurística própria.
|
|
23
|
+
- Modos estreitos: `/mednotes:link-body`, `/mednotes:link-related`; seção
|
|
24
|
+
gerenciada: `related-notes-sync --apply` com recibo e proteção do vault.
|
|
25
|
+
- Este workflow não corrige estilo, YAML/status, publicação ou taxonomia.
|
|
26
|
+
- Não faça regex manual para linkar notas.
|
|
27
|
+
- Não mostre JSON bruto por padrão; resuma links, Related Notes, blockers e próxima ação.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Gerencia biblioteca local de imagens extraidas de PDFs."
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
<!-- Generated from commands/mednotes/pdf-library.toml. Do not edit directly. -->
|
|
6
|
+
|
|
7
|
+
Abra a biblioteca local de imagens de PDFs para enriquecer notas médicas.
|
|
8
|
+
|
|
9
|
+
Argumentos do usuário: $ARGUMENTS
|
|
10
|
+
|
|
11
|
+
Use a skill `pdf-library`. Use também `.opencode/mednotes/docs/workflow-output-contract.md`
|
|
12
|
+
para responder com resumo legível, prévia, confirmação e retomada oficial.
|
|
13
|
+
|
|
14
|
+
Invariantes do launcher:
|
|
15
|
+
- contrato tipado: `pdf-library insert` é uma operação canônica preview/apply.
|
|
16
|
+
O apply só pode materializar mudanças visual-only: embed de imagem, legenda
|
|
17
|
+
`Figura:` e frontmatter visual `images_*`.
|
|
18
|
+
- Trate o comando público como experiência guiada: confira o ambiente,
|
|
19
|
+
prepare automaticamente quando for seguro e só peça ação humana quando houver
|
|
20
|
+
bloqueio real.
|
|
21
|
+
- Não ensine subcomandos, flags ou termos técnicos por padrão. Fale em
|
|
22
|
+
preparar ambiente, mostrar prévia, nada alterado ainda, confirmar e aplicar.
|
|
23
|
+
- A TUI abre inline no terminal atual por padrão.
|
|
24
|
+
- Não envie PDF, OCR bruto, imagens ou conteúdo clínico para telemetria.
|
|
25
|
+
- Inserção exige prévia e confirmação explícita antes de mutar nota.
|
|
26
|
+
- Se qualquer mudança clínica/textual aparecer entre a prévia e o apply,
|
|
27
|
+
bloqueie como mutação não visual inesperada e preserve a nota.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Processa backlog de chats medicos brutos para notas Obsidian."
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
<!-- Generated from commands/mednotes/process-chats.toml. Do not edit directly. -->
|
|
6
|
+
|
|
7
|
+
Processe chats médicos brutos de `Chats_Raw` para `Wiki_Medicina`. Argumentos do usuário: $ARGUMENTS. Guardrails enfáticos do launcher:
|
|
8
|
+
- Rota rápida obrigatória: primeiro rode exatamente `node ".opencode/mednotes/scripts/run_python.mjs" ".opencode/mednotes/scripts/mednotes/wiki/cli.py" list-pending --summary --json`; não leia skills/docs, diretórios, `config.toml` nem rode `validate` antes dessa checagem.
|
|
9
|
+
- Se o payload público indicar que não há chats novos e o workflow é terminal, responda somente com `reports.public_report.lines` e encerre. Não adicione "Resumo do Trabalho"; não mencione nomes de campos internos, schemas, hashes ou caminhos locais.
|
|
10
|
+
- Resposta pública padrão: use `reports.public_report.lines` quando existir e não exponha comandos literais, flags, schemas, recibos, hashes, paths internos nem nomes de campos. Detalhes técnicos ficam no canal agente/debug ou laboratório; decisões humanas devem aparecer como pergunta, opções fechadas e item afetado.
|
|
11
|
+
- Só carregue a skill `process-medical-chats` e `.opencode/mednotes/skills/obsidian-ops/SKILL.md` se houver backlog real, bloqueio acionável ou continuação explícita. Resposta: `.opencode/mednotes/docs/workflow-output-contract.md`. Continuação agentica executável vem somente de `agent_directive.control.capabilities.continue=true` com `agent_directive.control.effects[]`; `decision`, `human_decision_packet` e `progress_view_model.resume_action` orientam UX, decisão humana e retomada pública, mas não autorizam mutação ou chamada de subagente sem `agent_directive.control`.
|
|
12
|
+
- Se a fase `architect` também indicar zero itens e terminal sem chats novos, encerre: não rode `validate-wiki`, `/mednotes:fix-wiki`, `run-linker`, `publish-batch` nem subagentes. Responda que não havia chat novo, nada foi escrito e linker/grafo não precisava rodar.
|
|
13
|
+
- Para lote explícito, use `plan-subagents --limit <N>` com `--phase triage` antes de ler raw; um raw chat por subagent; parent não monta prompt manual e usa paths do `work_item`.
|
|
14
|
+
- Não substitua `med-chat-triager`; `triage-note-plan.v2` é autoridade; rode `eval-triager-output --report`; se falhar, reenvie ao triager, não remende JSON; nunca peça metrics fabricadas.
|
|
15
|
+
- Exija coverage `raw-coverage.v1` derivada do plano e `stage-note --coverage` no manifest único.
|
|
16
|
+
- No OpenCode, depois de uma task `architect` concluída, use somente `wiki/cli.py finalize-opencode-architect-task` com `--plan`, `--work-id` e `--json`; não use `finalize-opencode-specialist-task`, não leia código para descobrir finalizer e não siga para `stage-note` antes desse payload validar metadata, `architect-output.v1`, coverage e nota.
|
|
17
|
+
- Corpo de raw chat é imutável; YAML/status só muda via `wiki/cli.py` (`triage`, `discard`, `publish-batch`). Não use `write_file`, `replace`, shell redirection, `sed` ou scripts para editar raw chats, coverage, manifests, H1, taxonomia, YAML/status ou notas staged; first-pass prevention: `note_plan_invalid` para na triagem; `blocked.validation_errors` usa `fix-note`/`rewrite_prompt`; `taxonomy_resolution_required` usa `taxonomy-*`; `coverage_invalid` repete só `stage-note --coverage`; não gere scripts.
|
|
18
|
+
- Se a CLI apontar `environment_blocker.windows_path_or_venv`, rode `/mednotes:setup` ou bootstrap/reset oficial; não edite scripts/runbooks.
|
|
19
|
+
- Para `canonical_merge_required`, `provenance_gap`, `batch_state_mismatch` ou decisão humana, renderize a decisão pelo `decision`/`human_decision_packet` e só continue automaticamente quando `agent_directive.control.effects[]` trouxer a próxima operação executável. Campos legados como `human_decision_required`/`next_action` em payload técnico não autorizam publicação.
|
|
20
|
+
- Se houver `artifact_manifests`, cubra todos os HTMLs; nunca inline HTML. Sempre rode `publish-batch --dry-run`, depois `med-publish-guard`; publish real tem rollback automático.
|
|
21
|
+
- Não rode `run-linker` manualmente depois do dry-run; o `publish-batch` real já chama o linker. Se links bloquearem após publish, próxima ação é `/mednotes:fix-wiki --dry-run`.
|
|
22
|
+
- Em bloqueios recuperáveis, preserve `error_context`; em retry/fase errada/comando falho, registre `agent_events` redigidos.
|
|
23
|
+
- Não chame dry-run de concluído: dry-run limpo é `ready_to_publish`, publish é `published`, linker com blockers é `completed_with_link_blockers`.
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Prepara o ambiente Python local do Medical Notes Workbench."
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
<!-- Generated from commands/mednotes/setup.toml. Do not edit directly. -->
|
|
6
|
+
|
|
7
|
+
Prepare o Medical Notes Workbench para uso nesta maquina; conduza o usuario passo a passo e pare em login/decisao ate confirmacao clara.
|
|
8
|
+
Use `.opencode/mednotes` como raiz da extensão e `.opencode/mednotes/docs/workflow-output-contract.md` para a resposta final.
|
|
9
|
+
Modelo mental:
|
|
10
|
+
1. `~/.gemini/extensions/medical-notes-workbench` é o bundle; estado persistente fica em `~/.mednotes`.
|
|
11
|
+
2. Use `/mednotes:setup` como workflow FSM-first. O estado público é somente `setup-fsm-result.v1`: `state_machine_snapshot`, `progress_view_model`, `receipt`, `decision`, `human_decision_packet`, `reports` e `agent_directive`.
|
|
12
|
+
3. Execute somente `agent_directive.control.effects[]`, em ordem, e alimente o resultado de cada adapter de volta como evento tipado da FSM. Não transforme stdout de adapter privado em estado público.
|
|
13
|
+
4. Effects públicos esperados incluem `setup:set-paths`, `setup:validate-config`, `setup:repair-config` com adapter `--agent-repair`, `setup:bootstrap-python`, `setup:wait-obsidian`, `setup:rebuild-markdown-runtime`, `setup:rebuild-markdown-index` para preparar o índice Markdown, `setup:vault-guard`, `setup:start-github-login`, `setup:choose-local-only`, `setup:confirm-github-remote`, `setup:resolve-ambiguous-remote`, `setup:confirm-main-branch` e `setup:resolve-policy`.
|
|
14
|
+
5. `setup:vault-guard` pode executar `vault_git.py setup` apenas como adapter privado e deve ser projetado pelo stack FSM antes de qualquer comunicação pública.
|
|
15
|
+
6. Se `decision.kind=ask_human`, use a ferramenta nativa de pergunta/seleção com as opções do `human_decision_packet`; só retome pelo `resume_action` oficial.
|
|
16
|
+
7. Se o receipt trouxer `git_identity_github_attribution`, explique que autoria Git preservada não garante avatar/link/filtro no GitHub; para isso use email de uma conta GitHub ou bot real.
|
|
17
|
+
8. Não edite `config.toml` manualmente; use o adapter oficial preservando bytes UTF-8; não rode `git add`, não rode `git commit`, não rode `git push`, não limpe arquivos e não entre em nested repos/plugins para "limpar" o vault.
|
|
18
|
+
9. No Windows, se aparecer "missing `RECORD`", `Failed to uninstall package`, repetição de uninstall/install ou `Acesso negado`, reporte `uv_repair_churn`/`windows_path_or_venv` e use as rotas oficiais `bootstrap_windows_python_uv.ps1` ou `reset_windows_python_uv.ps1`; não diga que o ambiente está perfeito.
|
|
19
|
+
10. SerpAPI é opcional via `gemini extensions config medical-notes-workbench SERPAPI_KEY`, `config.toml`/`.env` persistentes; nunca imprima segredo.
|
|
20
|
+
11. Registre feedback local com `scripts/mednotes/feedback_report.py record --workflow /mednotes:setup --agent`; falha de feedback não muda o resultado do setup.
|
|
21
|
+
Explique em portugues o que foi configurado/falta; se a proteção local estiver pronta, inclua: "Proteção local pronta. A extensão também ativou uma trava de segurança: agentes Gemini não conseguem alterar o vault diretamente sem ponto de restauração ativo."
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Verifica configuracao local do Medical Notes Workbench."
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
<!-- Generated from commands/mednotes/status.toml. Do not edit directly. -->
|
|
6
|
+
|
|
7
|
+
Verifique o status local do Medical Notes Workbench.
|
|
8
|
+
|
|
9
|
+
Use `.opencode/mednotes` como raiz da extensão e `.opencode/mednotes/docs/workflow-output-contract.md` para a resposta final.
|
|
10
|
+
|
|
11
|
+
Checklist nao mutante:
|
|
12
|
+
1. Confirme `gemini extensions list` e raiz `~/.gemini/extensions/medical-notes-workbench`.
|
|
13
|
+
2. Verifique `~/.mednotes/config.toml` sem imprimir o arquivo inteiro; nunca mostre tokens, `auth_token`, `.env`, defaults de telemetria, feedback records ou hook events.
|
|
14
|
+
3. Confira `~/.mednotes/config.toml` com `[paths].wiki_dir` e `[paths].raw_dir`; o status não deve alterar notas. Se faltar caminho, a próxima ação oficial é `set-paths`; destaque compatibilidade ou bloqueio por ambiguidade.
|
|
15
|
+
4. Valide o enricher pela porta explícita de script: `node ".opencode/mednotes/scripts/run_python.mjs" "scripts/enrich_notes.py" --help`. Não passe `-m` para `run_python.mjs`; o wrapper recebe um caminho `.py` relativo à raiz da extensão.
|
|
16
|
+
5. Leia `[gemini].binary`, resolva `gemini.cmd` no Windows quando aplicavel e rode `<binary> --version` sem imprimir segredos.
|
|
17
|
+
6. Rode `node ".opencode/mednotes/scripts/run_python.mjs" "scripts/mednotes/wiki/cli.py" validate --config ~/.mednotes/config.toml` e destaque `environment_preflight`, `wiki_source`, `wiki_compat_warnings`, `config_encoding_warnings` e `vocabulary_db_exists`.
|
|
18
|
+
7. Rode `node ".opencode/mednotes/scripts/run_python.mjs" "scripts/mednotes/wiki/cli.py" markdown-query-status --config ~/.mednotes/config.toml --json` e trate a saída como snapshot técnico tipado do índice Markdown: ready = "Índice Markdown pronto."; missing/stale = "Índice Markdown precisa ser preparado; próxima ação: /mednotes:setup."; bloqueio = traduza causa e retomada oficial em linguagem humana, sem transformar campos técnicos raiz em estado paralelo.
|
|
19
|
+
8. Rode `node ".opencode/mednotes/scripts/run_python.mjs" "scripts/mednotes/feedback_report.py" integrity status --format json` e destaque drift de prompts/runbooks/scripts.
|
|
20
|
+
9. Confira `SERPAPI_KEY`/`SERPAPI_API_KEY` por setting, ambiente ou `.env` persistente sem imprimir chave; se faltar, dê o comando de configuração.
|
|
21
|
+
10. Não publique, não corrija Wiki, não aplique linker e não altere notas.
|
|
22
|
+
11. Registre feedback local com `node ".opencode/mednotes/scripts/run_python.mjs" "scripts/mednotes/feedback_report.py" record --workflow /mednotes:status --agent`.
|
|
23
|
+
Se algum comando anterior encontrou pendência, falha ou aviso, grave um payload tipado de snapshot/status com causa, retomada oficial e evidência redigida; nunca grave um resumo final saudável vazio depois de detectar ambiente pendente.
|
|
24
|
+
Se houve retry, fase errada, drift, mutação inesperada ou comando falho, use `--payload -` com `agent_events` e `error_context` tipados.
|
|
25
|
+
Se encontrar Python/uv/venv/PowerShell/path Windows quebrado, registre `environment_blocker.windows_path_or_venv`, sugira `/mednotes:setup` ou bootstrap/reset oficial e pare sem editar scripts, prompts ou runbooks.
|
|
26
|
+
Se qualquer comando imprimir "missing `RECORD`", "Failed to uninstall package", `Uninstalled ... Installed ...` repetidamente ou `Acesso negado`, registre `uv_repair_churn` ou `environment_blocker.windows_path_or_venv`; não diga que o ambiente está perfeito mesmo que o JSON principal venha `ready`.
|
|
27
|
+
Responda em portugues com pronto / pendente e proximas acoes concretas.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: "Configura e opera telemetria por email do Medical Notes Workbench."
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
<!-- Generated from commands/mednotes/telemetry.toml. Do not edit directly. -->
|
|
6
|
+
|
|
7
|
+
Gerencie a telemetria por email pela interface do Gemini CLI.
|
|
8
|
+
|
|
9
|
+
Argumentos do usuario: $ARGUMENTS
|
|
10
|
+
|
|
11
|
+
Use `.opencode/mednotes` como raiz da extensao; fallback `~/.gemini/extensions/medical-notes-workbench`.
|
|
12
|
+
Use `~/.mednotes` para estado persistente. Rode Python sempre com `uv run python`.
|
|
13
|
+
Contrato tipado: este launcher é adapter de telemetria local/desativada; ele lê `workflow-telemetry-status.v1`, `workflow-telemetry-envelope.v1` em prévia local e recibos de desativação, mas não cria uma FSM própria nem usa campos técnicos raiz como controle de workflow.
|
|
14
|
+
|
|
15
|
+
Intencoes:
|
|
16
|
+
1. `setup-email`, "quero receber por email", `enable`, "ativar" ou `send`: informe que a telemetria remota automatica por email esta desativada no projeto. Nao rode deploy, nao envie email de teste, nao crie defaults privados e nao tente reativar hooks. Se o usuario quer enviar um relatorio manual da execucao atual, oriente para `/report`.
|
|
17
|
+
2. `status`, `preview` ou `disable`: rode o subcomando correspondente de `scripts/mednotes/feedback_report.py telemetry`. Em `status`, diga que o projeto esta com telemetria remota desativada; em `disable`, confirme que a instalacao tambem ficou com opt-out local.
|
|
18
|
+
3. Para diagnostico local, use backlog/relatorios de experimentos controlados; nao use hooks ou envio remoto.
|
|
19
|
+
4. Antes de orientar update/release em uma instalacao com drift ou arquivos editados pelo agente, nao rode `gemini extensions update` diretamente e nao acione hooks de snapshot/telemetria. Se precisar preservar drift, use captura local sem envio e reporte o caminho do artefato local.
|
|
20
|
+
5. Se o usuario ja atualizou e precisa tentar resgatar o diff agora, rode apenas captura local sem envio remoto. Nao use `--send` nem `--flush`. Se o conteudo antigo foi sobrescrito sem snapshot/backup/objeto Git, nao ha diff antigo recuperavel.
|
|
21
|
+
6. Para diagnostico visual local, use `preview --since 7d`; nao use retry/envio da outbox.
|
|
22
|
+
7. Ao fechar, nao registre um novo feedback apenas para reportar que telemetria esta desativada.
|
|
23
|
+
Se houve retry, fase errada, ação oficial desrespeitada, drift, mutacao inesperada
|
|
24
|
+
ou comando falho, use `--payload -` e inclua `agent_events`/`error_context` tipados conforme
|
|
25
|
+
`.opencode/mednotes/docs/workflow-output-contract.md`.
|
|
26
|
+
|
|
27
|
+
Responda em portugues simples: pronto, telemetria remota desligada, pendencias e proxima acao concreta. Nao exponha RESEND_API_KEY.
|