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,559 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: fix-medical-wiki
|
|
3
|
+
description: Fix-wiki para taxonomia, estilo, grafo. Use com /mednotes:fix-wiki.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Skill: fix-medical-wiki
|
|
7
|
+
|
|
8
|
+
`${extensionPath}` é a raiz da extensão/plugin ativo. Se a skill vier de
|
|
9
|
+
`~/.gemini/config/skills/fix-medical-wiki` ou de contexto stale, pare,
|
|
10
|
+
recarregue `${extensionPath}/skills/fix-medical-wiki/SKILL.md` e use só esse
|
|
11
|
+
root. Não chame `read_file` em `${extensionPath}/docs/workflow-output-contract.md` só para responder.
|
|
12
|
+
|
|
13
|
+
`Wiki_Medicina`: estilo, YAML, grafo, taxonomia.
|
|
14
|
+
|
|
15
|
+
## Pré-vôo (Hard Stops antes de qualquer comando)
|
|
16
|
+
|
|
17
|
+
Responda sempre em português do Brasil, inclusive avisos intermediários.
|
|
18
|
+
Releia `${extensionPath}/docs/agent-prompt-hardening.md` antes.
|
|
19
|
+
`/mednotes:fix-wiki` é o workflow mais arriscado: chama linker, curator
|
|
20
|
+
batch, taxonomy migration e style rewrite. Stop rules específicas:
|
|
21
|
+
|
|
22
|
+
- C23 FSM_POLICY_BOUNDARY:
|
|
23
|
+
Adapter detecta fato. FSM decide política. CLI executa efeito.
|
|
24
|
+
Sem WorkflowEffect emitido pela FSM, não existe recovery automático.
|
|
25
|
+
blocked_reason, next_action, status e operation_payload não autorizam retry/recovery/apply.
|
|
26
|
+
- C22 AGY_APPLY_NO_DISCOVERY: no AGY, depois de carregar esta skill e
|
|
27
|
+
`obsidian-ops`, o próximo tool call em `--apply` deve abrir a proteção do
|
|
28
|
+
vault com `<plugin-root>/scripts/vault/vault_git.py run-start`. Não use
|
|
29
|
+
`grep_search`, `list_permissions`, `list_dir`, `list_directory`, `ls`,
|
|
30
|
+
`echo` ou `--help` para confirmar scripts, permissões ou plugin root; o
|
|
31
|
+
`<plugin-root>` já é o diretório desta skill.
|
|
32
|
+
- C18 HARD_STOP_DECISION: `decision.kind=ask_human` ou
|
|
33
|
+
`human_decision_packet` pendente em qualquer payload canônico é HARD STOP.
|
|
34
|
+
Mostre a pergunta/opções em pt-BR e pare; não continue recovery, reindex,
|
|
35
|
+
curadoria, plan-subagents ou apply sem resposta humana.
|
|
36
|
+
- C15 EVAL_TERMINAL: `eval-curator-batch` ou `eval-triager-output` em
|
|
37
|
+
`needs_review` = regenerar outputs ou ajustar prompt; nunca editar o JSON
|
|
38
|
+
de avaliação.
|
|
39
|
+
- C16 NO_EVAL_BYPASS_IN_PUBLIC: `--skip-prompt-eval` é dev-escape; nunca em
|
|
40
|
+
fluxo público.
|
|
41
|
+
- C14 NO_PARENT_SCHEMA: pai NÃO escreve `note-semantic-ingestion.v1`. Use
|
|
42
|
+
`plan-subagents --phase vocabulary-curation`, lance
|
|
43
|
+
`med-link-graph-curator` por `work_item`, colete via
|
|
44
|
+
`collect-curator-outputs`.
|
|
45
|
+
- C13 OFFICIAL_ROUTE_ONLY: `related-notes-sync --recover-export` é a única
|
|
46
|
+
rota de recuperação do export Related Notes. Ela pode acionar Obsidian CLI ou
|
|
47
|
+
fallback headless; sem `agent_directive.control.effects`, reporte e pare.
|
|
48
|
+
- C12 NEXT_ACTION_NOT_AUTHZ: `next_action` é orientação. Continue só com
|
|
49
|
+
`agent_directive.control.status=waiting_agent`,
|
|
50
|
+
`agent_directive.control.capabilities.continue=true`, efeitos executáveis
|
|
51
|
+
e pedido original permitindo continuar.
|
|
52
|
+
Se `agent_directive.control.status=waiting_agent`, não finalize o guard e não responda
|
|
53
|
+
ainda; execute ou bloqueie explicitamente essa continuação primeiro.
|
|
54
|
+
- C17 GAP_IS_STOP: `contract_gap.missing_next_action` = reportar e parar;
|
|
55
|
+
sem workarounds.
|
|
56
|
+
- C19 INSTALLED_BUNDLE_IMMUTABLE: não edite o bundle instalado em
|
|
57
|
+
`~/.gemini/extensions`, `~/.gemini/config/plugins`, `C:\Users\<usuario>\.gemini\extensions`
|
|
58
|
+
ou `C:\Users\<usuario>\.gemini\config\plugins`. Reporte
|
|
59
|
+
`installed_extension_runtime_edit_forbidden`, aponte o fonte em `bundle/`
|
|
60
|
+
e pare; correção real exige rebuild/reinstall oficial.
|
|
61
|
+
- C20 LAYERED_STATUS_REQUIRED: responda sempre com estado em camadas
|
|
62
|
+
(ambiente Python, índice Markdown, proteção do vault, linker, Related Notes,
|
|
63
|
+
cota/especialista). Um layer verde não torna o workflow concluído. Mostre um
|
|
64
|
+
bloqueio atual e uma próxima ação.
|
|
65
|
+
- C21 PACKAGED_SPECIALIST_AGENT: não fabrique prompt curto para
|
|
66
|
+
`med-knowledge-architect`. Para `style_rewrite`, consuma o efeito
|
|
67
|
+
`call_specialist_model` e seu `current_batch_items`. No AGY, leia
|
|
68
|
+
`agents/med-knowledge-architect.md`,
|
|
69
|
+
chame `define_subagent`, invoque exatamente um item tipado por vez com
|
|
70
|
+
`Prompt` igual ao JSON do `current_batch_item` e finalize a evidência com
|
|
71
|
+
`finalize-agy-specialist-task` para gerar recibo validável;
|
|
72
|
+
no OpenCode, use a tool `task` somente no harness OpenCode, com um único
|
|
73
|
+
work item tipado dentro de JSON raiz contendo somente `current_batch_items`,
|
|
74
|
+
e finalize com `uv run python
|
|
75
|
+
bundle/scripts/mednotes/wiki/cli.py finalize-opencode-specialist-task`
|
|
76
|
+
sem `--task-metadata` manual; o hook prova provider/modelo por `work_id`;
|
|
77
|
+
não recrie `agent.json`; não envie conteúdo clínico por `send_message`. Sem
|
|
78
|
+
capacidade/modelo/evidência no runtime, bloqueie
|
|
79
|
+
`specialist_agent_runtime_unavailable`, `agy_specialist_model_evidence_missing`
|
|
80
|
+
ou `specialist_model_quota_exhausted`.
|
|
81
|
+
|
|
82
|
+
UX pública: use `${extensionPath}/docs/public-vocabulary.md`; não exponha
|
|
83
|
+
`uv`, `--dry-run`, `manifest`, `hash`, `SQLite`, `needs_review`,
|
|
84
|
+
`skip-prompt-eval` ou nomes de subagent por padrão.
|
|
85
|
+
Resposta pública padrão: use `reports.public_report.lines` quando existir e
|
|
86
|
+
não exponha comandos literais, flags, schemas, recibos, hashes, paths internos,
|
|
87
|
+
`run_id` nem nomes de campos. Detalhes técnicos ficam no canal agente/debug ou
|
|
88
|
+
laboratório. Decisão humana aparece como pergunta, opções fechadas, item
|
|
89
|
+
afetado e retomada em linguagem humana.
|
|
90
|
+
|
|
91
|
+
## Fonte canônica
|
|
92
|
+
|
|
93
|
+
- Estilo: `${extensionPath}/docs/knowledge-architect.md`.
|
|
94
|
+
- Grafo/linker: `${extensionPath}/docs/semantic-linker.md`.
|
|
95
|
+
- CLI pública: `${extensionPath}/scripts/mednotes/wiki/cli.py`; domínio em `wiki.*`.
|
|
96
|
+
- Taxonomia: `wiki.health` e `wiki.taxonomy.migration`.
|
|
97
|
+
- Links: /mednotes:fix-wiki não implementa grafo; chama /mednotes:link.
|
|
98
|
+
- Reescrita/merge LLM: `med-knowledge-architect` só com pedido da CLI.
|
|
99
|
+
|
|
100
|
+
## Contrato de mudança do modelo de nota
|
|
101
|
+
|
|
102
|
+
Mudança no modelo exige `/mednotes:process-chats` novo e `/mednotes:fix-wiki`
|
|
103
|
+
retroativo. Novo `StyleIssue` entra em
|
|
104
|
+
`wiki.note_style.NOTE_MODEL_ISSUE_COVERAGE`; sem rota retroativa, bloqueie.
|
|
105
|
+
`didactic_visual_opportunity` em nota existente vira `style-rewrite`; regra em
|
|
106
|
+
`${extensionPath}/docs/knowledge-architect.md`, nunca saúde verde.
|
|
107
|
+
Notas geradas de vídeo, aula, livro, artigo ou outra fonte não-chat continuam
|
|
108
|
+
notas normais da Wiki. Preserve `source`, `sources` e `source_*`; não trate a
|
|
109
|
+
ausência de `chats[]` como problema quando a nota já documenta fonte não-chat.
|
|
110
|
+
|
|
111
|
+
## Fluxo
|
|
112
|
+
|
|
113
|
+
1. Use sempre o `${extensionPath}` carregado. Execute CLI por
|
|
114
|
+
`node "${extensionPath}/scripts/run_python.mjs" "${extensionPath}/scripts/mednotes/wiki/cli.py" ...`.
|
|
115
|
+
Cada `run_shell_command` deve conter um único comando completo; não crie
|
|
116
|
+
variável de shell como `EXT_PATH`, não use `export`, não envie script
|
|
117
|
+
multiline e não encadeie comandos.
|
|
118
|
+
No AGY, para comandos oficiais longos (`fix-wiki --apply`,
|
|
119
|
+
`finalize-agy-specialist-task` e `apply-specialist-style-rewrite`), use
|
|
120
|
+
`WaitMsBeforeAsync=120000` para receber o JSON direto da tool em vez de cair
|
|
121
|
+
em task log/background. Para `run-start` e
|
|
122
|
+
`run-finish`, use `WaitMsBeforeAsync=30000`. Se o AGY ainda mover para
|
|
123
|
+
segundo plano, não use `schedule`/timer e não descubra logs: leia
|
|
124
|
+
imediatamente somente o task log indicado pela própria tool como fallback
|
|
125
|
+
oficial, parseie o JSON final desse log e, se precisar mencionar isso ao
|
|
126
|
+
usuário, diga em linguagem humana que você leu o log indicado pela
|
|
127
|
+
ferramenta. Não use rótulo técnico literal para esse fallback.
|
|
128
|
+
`run-finish` deve usar o
|
|
129
|
+
same plugin root as run-start:
|
|
130
|
+
`${extensionPath}/scripts/vault/vault_git.py`; qualquer caminho como
|
|
131
|
+
`~/.gemini/config/plugins/vault/vault_git.py` ou
|
|
132
|
+
`config/plugins/vault/vault_git.py` está errado e não deve ser executado.
|
|
133
|
+
Não invente variantes como `dist/gemini-cli-experiment`, não use
|
|
134
|
+
`bundle/scripts/...` relativo ao cwd. Do not execute `cli.py` directly.
|
|
135
|
+
Do not set/export `UV_PROJECT_ENVIRONMENT`.
|
|
136
|
+
No preparatory shell probes before explicit `fix-wiki --dry-run`: deve ser
|
|
137
|
+
o primeiro shell command, salvo pedido do JSON fresco. Se stdout truncar, leia artefatos
|
|
138
|
+
oficiais; não repita o mesmo `fix-wiki --dry-run --json` e não redirecione stdout do workflow para scratch.
|
|
139
|
+
Do not self-debug `uv run` failures: se houver erro de `uv`, Python, venv,
|
|
140
|
+
import, path ou PowerShell, feche o guard se aberto, reporte
|
|
141
|
+
`environment_blocker.windows_path_or_venv`, aponte `/mednotes:setup` e pare.
|
|
142
|
+
Não conserte com `env`, `pip list`, `read_file`, direct venv Python ou
|
|
143
|
+
`PYTHONPATH`.
|
|
144
|
+
Se o usuário já pediu continuidade e `/mednotes:setup`/rebuild resolver
|
|
145
|
+
pendência determinística, retome o workflow quando o payload fresco trouxer
|
|
146
|
+
`agent_directive.control.effects` sem decisão humana.
|
|
147
|
+
2. Pedido explícito com `--apply` não é dry-run: abra proteção com
|
|
148
|
+
`node "${extensionPath}/scripts/run_python.mjs" "${extensionPath}/scripts/vault/vault_git.py" run-start --agent gemini-cli --workflow /mednotes:fix-wiki --json`;
|
|
149
|
+
aguarde o `tool_result` do `run-start`, leia `run_id` não vazio e só então execute
|
|
150
|
+
`node "${extensionPath}/scripts/run_python.mjs" "${extensionPath}/scripts/mednotes/wiki/cli.py" fix-wiki --apply --json`.
|
|
151
|
+
Não envie `run-start` e `fix-wiki --apply` no mesmo lote. Examine o JSON
|
|
152
|
+
fresco antes de fechar o guard. Se houver
|
|
153
|
+
`agent_directive.control.status=waiting_agent`,
|
|
154
|
+
`agent_directive.control.capabilities.continue=true`,
|
|
155
|
+
`agent_directive.control.capabilities.final_report=false` e
|
|
156
|
+
`agent_directive.control.effects`, execute a fase indicada no mesmo guard
|
|
157
|
+
antes de responder ou rodar `run-finish`. Feche com
|
|
158
|
+
`node "${extensionPath}/scripts/run_python.mjs" "${extensionPath}/scripts/vault/vault_git.py" run-finish --agent gemini-cli --workflow /mednotes:fix-wiki --run-id <run_id> --title "Reparo da Wiki_Medicina" --public-json --json`.
|
|
159
|
+
Copie o `run_id` literal; `--run-id ""` e `run-finish` sem `--workflow` são
|
|
160
|
+
blockers. Não entre em Plan mode, não escreva plano `.md`, não peça
|
|
161
|
+
confirmação de estratégia. `tracker_create_task`/`tracker_update_task` não
|
|
162
|
+
são necessários neste fluxo; uso ou erro de tracker deve entrar como atrito
|
|
163
|
+
de UX, mas `update_topic` normal não é desvio do workflow. Não converta
|
|
164
|
+
`/mednotes:fix-wiki --apply` em dry-run.
|
|
165
|
+
Nota Markdown estritamente vazia na raiz da Wiki é higiene estrutural: o CLI
|
|
166
|
+
deve arquivar antes de style/taxonomia/grafo. Nota raiz com conteúdo
|
|
167
|
+
inválido entra na camada de reparo/aviso, não em taxonomia. Só trate nota
|
|
168
|
+
raiz como decisão humana de taxonomia quando ela já for uma nota Wiki válida.
|
|
169
|
+
|
|
170
|
+
Não rode `set-paths` como preflight genérico. Use só se o JSON fresco indicar
|
|
171
|
+
`wiki_dir` ou `raw_dir` vazio/inválido. Não edite `config.toml` manualmente;
|
|
172
|
+
para paths, use:
|
|
173
|
+
|
|
174
|
+
```bash
|
|
175
|
+
node "${extensionPath}/scripts/run_python.mjs" "${extensionPath}/scripts/mednotes/wiki/cli.py" set-paths --wiki-dir "<Wiki_Medicina>" --raw-dir "<Chats_Raw>" --agent-repair --json
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
Se retornar `path_conflict.requires_decision`, mostre o pacote e pare. Para
|
|
179
|
+
mojibake de template, use `repair-config-template --json`.
|
|
180
|
+
|
|
181
|
+
`--apply` usa a proteção do vault como rollback primário. `.bak` adjacente
|
|
182
|
+
de Markdown está aposentado e não deve ser criado. Taxonomia exige
|
|
183
|
+
confirmação extra por `taxonomy_plan_path` e `--apply-taxonomy`.
|
|
184
|
+
3. Interprete `progress_view_model`, `state_machine_snapshot`, `decision`,
|
|
185
|
+
`receipt`, `reports`, `agent_directive`, blockers, rewrites, backups,
|
|
186
|
+
higiene e linker.
|
|
187
|
+
Não rode `root-hygiene-audit` dentro de `/mednotes:fix-wiki`; ele é
|
|
188
|
+
diagnóstico de `/mednotes:status` e polui o relatório da Wiki.
|
|
189
|
+
Se houver mutação, confira os artefatos de link em `artifacts`/`receipt`
|
|
190
|
+
e o status canônico em `agent_directive.control`. Se o grafo bloquear, continue
|
|
191
|
+
dentro do fluxo público de `fix-wiki`, mas chame apenas os comandos oficiais
|
|
192
|
+
de `/mednotes:link`; não implemente reparo privado de grafo.
|
|
193
|
+
`requires_llm_rewrite` não pula linker: em `--apply`, aplique grafo/body
|
|
194
|
+
linker/Related Notes quando seguro. Se embeddings bloquear em recuperação
|
|
195
|
+
de Related Notes, continue antes de responder; sem plano
|
|
196
|
+
pronto, reporte o bloqueio. MarkdownDB não é gate global.
|
|
197
|
+
Related Notes estável exige export revalidado + prévia zero; senão continue
|
|
198
|
+
ou bloqueie.
|
|
199
|
+
Nunca remova `chats:` do YAML no bootstrap/reset de vocabulário ou estilo.
|
|
200
|
+
Em apply, `vocabulary_semantic_repair` resolve a fila simples antes do
|
|
201
|
+
linker. Se ainda houver `blocked_pending`, use o plano do link
|
|
202
|
+
(`vocabulary_curator_batch_plan_path`), lance `med-link-graph-curator` por
|
|
203
|
+
`work_items[]`, colete outputs via `collect-curator-outputs` e aplique o
|
|
204
|
+
lote como fase interna de `/mednotes:link`:
|
|
205
|
+
|
|
206
|
+
Se o payload fresco vier com
|
|
207
|
+
`agent_directive.control.status=waiting_agent` e efeitos executáveis,
|
|
208
|
+
isso não é bloqueio terminal:
|
|
209
|
+
continue somente por `agent_directive.control.effects[]`. Para
|
|
210
|
+
`call_specialist_model`, consuma
|
|
211
|
+
`agent_directive.control.effects[].payload.current_batch_items`; para
|
|
212
|
+
`run_subworkflow`, execute a sub-rotina indicada pelo próprio efeito e
|
|
213
|
+
valide o recibo retornado. Não repita `fix-wiki --dry-run` enquanto houver
|
|
214
|
+
efeito executável fresco. `continuation_steps` não é rota operacional.
|
|
215
|
+
|
|
216
|
+
```bash
|
|
217
|
+
uv run python "<wiki/cli.py>" plan-subagents --phase vocabulary-curation --vocabulary-db <vocabulary.sqlite> --output <vocabulary-curator-batch-plan.json> --json
|
|
218
|
+
uv run python "<wiki/cli.py>" collect-curator-outputs --plan <vocabulary-curator-batch-plan.json> --manifest <manifest.json> --json
|
|
219
|
+
uv run python "<wiki/cli.py>" eval-curator-batch --plan <vocabulary-curator-batch-plan.json> --outputs <manifest.json> --report <curator-prompt-eval.json> --json
|
|
220
|
+
uv run python "<wiki/cli.py>" apply-curator-batch --plan <vocabulary-curator-batch-plan.json> --outputs <manifest.json> --prompt-eval <curator-prompt-eval.json> --receipt <receipt.json> --json
|
|
221
|
+
```
|
|
222
|
+
|
|
223
|
+
Batch valida prompt eval, hashes, enum `atomic_status` e link nota->meaning;
|
|
224
|
+
escreve só no SQLite, marca itens e depois repete `/mednotes:link`.
|
|
225
|
+
Corpus de ouro: `init-curator-expectations`, 2+ asserções/item e
|
|
226
|
+
`--expectations <golden.json>` só no eval.
|
|
227
|
+
Não use `@generalist`: o agente pai é o único orquestrador; lance `med-link-graph-curator` diretamente por `work_items[]`.
|
|
228
|
+
4. Com `write_error_count > 0`, trate como IO bloqueado: linker real fica
|
|
229
|
+
pendente por erro de escrita; peça liberar
|
|
230
|
+
iCloud/Obsidian/antivírus/processo antes de retentar.
|
|
231
|
+
5. Continuação automática é proibida sem autorização explícita do payload. O
|
|
232
|
+
campo `next_action` é orientação para reportar ao usuário; ele não autoriza
|
|
233
|
+
execução. Repita ou avance só se `agent_directive.control.status=waiting_agent`,
|
|
234
|
+
`agent_directive.control.capabilities.continue=true`,
|
|
235
|
+
`agent_directive.control.effects` existir e o pedido original permitir
|
|
236
|
+
continuidade. Se não houver efeitos executáveis, `dry_run=true` ou
|
|
237
|
+
`human_decision_packet` pendente, mostre a pergunta/opções do pacote humano,
|
|
238
|
+
a ação de `decision.next_action`/`receipt.next_action` quando existir, e pare.
|
|
239
|
+
Pedido inicial com `--apply` autoriza somente a continuação automática
|
|
240
|
+
descrita por `agent_directive.control.effects` quando
|
|
241
|
+
`agent_directive.control.capabilities.continue=true`,
|
|
242
|
+
`capabilities.final_report=false` e não houver decisão humana; isso ainda
|
|
243
|
+
faz parte do mesmo workflow protegido. Sem efeito canônico executável, depois
|
|
244
|
+
de payload bloqueado só avance com nova confirmação explícita.
|
|
245
|
+
Para recuperação de Related Notes, aguarde retry, retome o índice parcial
|
|
246
|
+
e reexecute apply; sem dry-run ou edição manual.
|
|
247
|
+
6. Só planeje reescrita LLM quando o payload fresco trouxer
|
|
248
|
+
`agent_directive.control.status=waiting_agent` com
|
|
249
|
+
`agent_directive.control.effects` para `style_rewrite`, sem decisão humana,
|
|
250
|
+
ou quando o usuário pedir continuidade depois de ver o bloqueio e o payload
|
|
251
|
+
não exigir decisão humana. Não planeje rewrite se o mesmo payload tiver
|
|
252
|
+
`human_decision_packet` pendente ou se faltar `agent_directive.control.effects`,
|
|
253
|
+
mesmo que `next_action` mencione uma rota técnica:
|
|
254
|
+
|
|
255
|
+
Use o `agent_directive.control.effects[].payload.current_batch_items` do JSON fresco. Antes de invocar
|
|
256
|
+
o subagente, garanta que
|
|
257
|
+
`agent_directive.control.effects[].payload.agent_workspace_requirements.required_workspace_dirs`
|
|
258
|
+
estão disponíveis no workspace do runtime/subagente. Se algum `temp_output` oficial
|
|
259
|
+
não for gravável, bloqueie como `agent_workspace_missing`; não use scratch,
|
|
260
|
+
`run_command`, Python inline, cópia paralela ou Markdown colado como workaround.
|
|
261
|
+
Se precisar
|
|
262
|
+
regenerar o plano técnico fora do apply principal, mantenha lote pequeno:
|
|
263
|
+
|
|
264
|
+
```bash
|
|
265
|
+
uv run python "<wiki/cli.py>" plan-subagents --phase style-rewrite --max-concurrency 3 --limit 3 --temp-root <tmp-rewrites>
|
|
266
|
+
```
|
|
267
|
+
|
|
268
|
+
Use exatamente um `med-knowledge-architect` por `current_batch_items[].target_path`.
|
|
269
|
+
|
|
270
|
+
### Reescrita Especializada Por Harness
|
|
271
|
+
|
|
272
|
+
Quando `progress_view_model.status=waiting_external`,
|
|
273
|
+
`can_continue_now=false` ou não houver efeito canônico executável,
|
|
274
|
+
pare e reporte a pausa; não invoque subagente, não procure schema e não
|
|
275
|
+
tente fabricar recibo. Quando `progress_view_model.status=waiting_agent` e
|
|
276
|
+
`agent_directive.control.effects` trouxer `call_specialist_model`, continue
|
|
277
|
+
no harness atual:
|
|
278
|
+
|
|
279
|
+
- Gemini CLI: invoque o especialista empacotado com um único
|
|
280
|
+
`current_batch_item` do efeito `call_specialist_model` e aguarde o
|
|
281
|
+
`specialist-task-run-receipt.v1` validável.
|
|
282
|
+
- AGY: leia o template empacotado indicado pelo
|
|
283
|
+
`specialist_agent_invocation_contract.antigravity_cli`, use
|
|
284
|
+
`define_subagent` com o template completo, chame `invoke_subagent` com
|
|
285
|
+
`Prompt` igual ao JSON de um único `current_batch_item` tipado e finalize
|
|
286
|
+
com `finalize-agy-specialist-task` usando o transcript/task log oficial e
|
|
287
|
+
`--runtime-log` quando houver janela AGY settings switch.
|
|
288
|
+
- OpenCode: use `task` somente quando o harness atual for OpenCode.
|
|
289
|
+
O parent pode estar em Flash para orquestrar, mas a task especialista deve
|
|
290
|
+
receber JSON raiz contendo somente `current_batch_items` e provar modelo
|
|
291
|
+
especialista via metadata OpenCode; depois rode
|
|
292
|
+
`uv run python bundle/scripts/mednotes/wiki/cli.py
|
|
293
|
+
finalize-opencode-specialist-task --plan <plan> --work-id <work_id>
|
|
294
|
+
--json`, sem `--task-metadata` manual. Não exija OpenCode
|
|
295
|
+
quando o usuário estiver no Gemini CLI ou AGY; nao exija OpenCode
|
|
296
|
+
fora do harness OpenCode.
|
|
297
|
+
|
|
298
|
+
O especialista deve receber somente o work item tipado, paths oficiais,
|
|
299
|
+
hashes e `temp_output`. Não cole Markdown bruto nem raw chat no parent.
|
|
300
|
+
Depois que o especialista escrever `temp_output`, use somente o
|
|
301
|
+
`medical-notes-workbench.specialist-task-run-receipt.v1` atestado pela borda
|
|
302
|
+
oficial do Workbench. O parent não deve copiar, editar ou simular esse
|
|
303
|
+
recibo; no AGY, a criação permitida é via `finalize-agy-specialist-task`
|
|
304
|
+
com evidência de transcript/task log e runtime log quando houver settings
|
|
305
|
+
switch; no OpenCode, é via `finalize-opencode-specialist-task` com metadata
|
|
306
|
+
oficial da task. Se não
|
|
307
|
+
houver `receipt_attestation` válida, bloqueie como
|
|
308
|
+
`specialist_task_run_receipt_attestation_required`. Nunca use
|
|
309
|
+
`--gemini-binary`, script em scratch, mock ou backup manual de
|
|
310
|
+
`temp_output` para assinar saída de outro processo. Depois do recibo, use
|
|
311
|
+
`apply-specialist-style-rewrite --specialist-run-receipt` para finalizar,
|
|
312
|
+
coletar e aplicar o `work_id` em uma única chamada oficial; não divida
|
|
313
|
+
finalize/collect/apply em tool calls separadas. Depois de aplicar o lote,
|
|
314
|
+
rerode `/mednotes:fix-wiki` quando a fila estiver vazia e reporte qualidade
|
|
315
|
+
antes/depois do lote.
|
|
316
|
+
|
|
317
|
+
No AGY, o caminho padrão é o subagente empacotado do próprio AGY, não o
|
|
318
|
+
runner Gemini CLI. Nunca coloque duas notas no mesmo prompt de especialista;
|
|
319
|
+
faça uma chamada oficial por `work_id`, em série. O especialista escreve só no `temp_output` literal do
|
|
320
|
+
`work_item`; não substitua por `~/.gemini/tmp`, caminho inventado ou cópia
|
|
321
|
+
paralela. O pai não deve chamar `read_file` para colar a nota no prompt do
|
|
322
|
+
subagente; passe apenas os campos oficiais do `work_item` (`target_path`,
|
|
323
|
+
`rewrite_prompt`, `temp_output`, hashes/ids e o
|
|
324
|
+
`subagent_output_contract`) e deixe o subagente ler a nota dentro do escopo
|
|
325
|
+
dele. `output_attestation_path` é campo parent-only: o especialista não deve
|
|
326
|
+
criar, editar ou simular atestação. A rota deve respeitar
|
|
327
|
+
`model_policy=medical_specialist_authoring.v1`; Gemini usa o modelo
|
|
328
|
+
configurado no subagente, e runtimes com fallback precisam registrar um
|
|
329
|
+
modelo aceito pela política quando esse dado existir. Não invente
|
|
330
|
+
`actual_model`: a atestação do Workbench trata argumento do parent como
|
|
331
|
+
alegação não verificada. O caminho forte é o
|
|
332
|
+
`specialist-task-run-receipt.v1` atestado pelo runner. Sem runner Python,
|
|
333
|
+
siga os efeitos canônicos no harness atual. Só reporte
|
|
334
|
+
`specialist_model_capacity_unavailable` após
|
|
335
|
+
falha real do runtime/modelo; então bloqueie e feche o guard. Depois de
|
|
336
|
+
uma parada por quota, capacidade ou validação, a resposta pública final
|
|
337
|
+
deve ser humana e curta: não anexe bloco diagnóstico, JSON, XML, YAML,
|
|
338
|
+
campos internos, recibos, hashes ou caminhos locais. Detalhes técnicos
|
|
339
|
+
ficam no log/JSON de validação.
|
|
340
|
+
Depois de
|
|
341
|
+
aplicar um lote, não rode a conferência completa do `fix-wiki` se ainda há
|
|
342
|
+
reescritas pendentes; use `plan-subagents --phase style-rewrite` para montar
|
|
343
|
+
o próximo lote e deixe a verificação completa para quando a fila de
|
|
344
|
+
reescrita estiver vazia. Repetir o workflow inteiro entre lotes é bug de
|
|
345
|
+
performance/UX.
|
|
346
|
+
Para aplicação da reescrita, use sempre
|
|
347
|
+
`agent_directive.control.effects[].payload.plan_path` e
|
|
348
|
+
`agent_directive.control.effects[].payload.manifest_path`. Não use
|
|
349
|
+
`fix_wiki_plan_path`: esse é o
|
|
350
|
+
plano geral do workflow, não o plano `subagent-plan.v1` exigido pela rota
|
|
351
|
+
atômica.
|
|
352
|
+
7. Aplicação atômica de cada rewrite:
|
|
353
|
+
|
|
354
|
+
```bash
|
|
355
|
+
uv run python "<wiki/cli.py>" apply-specialist-style-rewrite --plan <style-rewrite-plan.json> --manifest <style-rewrite-manifest.json> --work-id <work_id> --specialist-run-receipt <specialist-task-run-receipt.json> --json
|
|
356
|
+
```
|
|
357
|
+
|
|
358
|
+
O recibo do runner deve registrar o modelo realmente usado pelo especialista,
|
|
359
|
+
os hashes do pacote de entrada, output e transcript, e uma assinatura válida
|
|
360
|
+
do runner oficial; vazio, `unknown`, `auto`, Flash ou recibo sem evidência
|
|
361
|
+
operacional bloqueiam a aplicação. O apply real não aceita Markdown solto. A
|
|
362
|
+
rota atômica cria a atestação Workbench, coleta um manifest de item único e
|
|
363
|
+
aplica o rewrite validado. O plano também precisa vir de `plan-subagents` com
|
|
364
|
+
`subagent-plan-attestation.v1`; não copie, edite ou fabrique o JSON do
|
|
365
|
+
plano, porque a rota atômica bloqueia plano sem hash/assinatura oficial. Use
|
|
366
|
+
limite 2 tentativas por nota; aplique rewrites em série por `work_id`, um
|
|
367
|
+
comando por tool call. Depois de cada apply, leia o
|
|
368
|
+
`agent_directive` root do stdout compacto. Se
|
|
369
|
+
`agent_directive.control.effects` ainda trouxer trabalho especialista
|
|
370
|
+
executável, continue por `current_batch_items` sem reler plano/manifest e
|
|
371
|
+
sem rodar validação final. Se o lote acabou, reporte um checkpoint humano
|
|
372
|
+
com quantas notas foram corrigidas, quantas faltam, estado honesto do grafo
|
|
373
|
+
e estado de Notas Relacionadas; depois siga somente efeitos canônicos novos
|
|
374
|
+
emitidos pela FSM.
|
|
375
|
+
Rode o workflow completo novamente só quando a fila de reescrita estiver
|
|
376
|
+
vazia. Se o manifest, atestação, hash do output, hash do plano ou hash da
|
|
377
|
+
nota alvo divergir, pare e reporte o bloqueio (`agent_notice`,
|
|
378
|
+
`error_context`, `next_action`). Nunca reescreva a mesma nota em paralelo.
|
|
379
|
+
8. Se a FSM/`agent_directive` indicar merge de notas como rota recuperável, não
|
|
380
|
+
pare no primeiro `fix-wiki`. O diagnostic context é apenas evidência privada;
|
|
381
|
+
a rota executável continua sendo `agent_directive.control`. Se vier
|
|
382
|
+
`title_driven_merge_review`, confirme a identidade semântica antes de criar
|
|
383
|
+
qualquer merge. Planeje merges:
|
|
384
|
+
|
|
385
|
+
```bash
|
|
386
|
+
uv run python "<wiki/cli.py>" plan-subagents --phase note-merge --max-concurrency 3 --temp-root <tmp-merges>
|
|
387
|
+
```
|
|
388
|
+
|
|
389
|
+
Use um `med-knowledge-architect` por `work_item.group_id`. Payload completo
|
|
390
|
+
vem só de `work_items`; `batches[].work_ids` apenas escolhe a rodada.
|
|
391
|
+
9. Valide cada merge:
|
|
392
|
+
|
|
393
|
+
```bash
|
|
394
|
+
uv run python "<wiki/cli.py>" apply-note-merge --plan <plan.json> --content <merged.md> --dry-run --json
|
|
395
|
+
```
|
|
396
|
+
|
|
397
|
+
Aplique automaticamente só se o plano oficial trouxer identidade semântica
|
|
398
|
+
auditável, nenhuma `decision.kind=ask_human`, nenhum
|
|
399
|
+
`human_decision_packet` pendente e nenhum conflito `images_*`:
|
|
400
|
+
|
|
401
|
+
```bash
|
|
402
|
+
uv run python "<wiki/cli.py>" apply-note-merge --plan <plan.json> --content <merged.md> --json
|
|
403
|
+
```
|
|
404
|
+
|
|
405
|
+
Apply valida hashes, contrato Wiki, provenance e preservação; rollback se
|
|
406
|
+
falhar depois de mutar. Quando aplica, grava recibo,
|
|
407
|
+
`linker_trigger_context_path` e chama o pacote completo do linker.
|
|
408
|
+
10. Atomicidade segue `${extensionPath}/docs/atomicity-splitting-policy.md`:
|
|
409
|
+
vem do DB, nunca de título/tamanho aparente. Só
|
|
410
|
+
`atomicity_decision=split_required`, derivado de `semantic_signal` no corpo,
|
|
411
|
+
cria split aplicável. Se
|
|
412
|
+
`atomicity_split_plan_path` existir ou
|
|
413
|
+
`identity.atomicity.one_note_multiple_meanings` aparecer pendente, planeje:
|
|
414
|
+
|
|
415
|
+
```bash
|
|
416
|
+
uv run python "<wiki/cli.py>" plan-subagents --phase atomicity-split --fix-wiki-plan <fix-wiki-plan.json> --temp-root <tmp-splits> --json
|
|
417
|
+
```
|
|
418
|
+
|
|
419
|
+
Use um `med-knowledge-architect` por `work_item.source_path`; ele escreve
|
|
420
|
+
apenas `atomicity-split-bundle.v1` e Markdown temporário. O bundle deve
|
|
421
|
+
copiar `work_id`, `source_path` e `source_hash` do work item oficial.
|
|
422
|
+
Preserve `work_item.semantic_signal`; não substitua por opinião sobre nota
|
|
423
|
+
nem por title-only signal.
|
|
424
|
+
Aplique por:
|
|
425
|
+
|
|
426
|
+
```bash
|
|
427
|
+
uv run python "<wiki/cli.py>" apply-atomicity-split --bundle <atomicity-split-bundle.json> --json
|
|
428
|
+
```
|
|
429
|
+
|
|
430
|
+
O apply marca o `deferred_work_item` como `completed` no vocabulary DB.
|
|
431
|
+
Enquanto o plano existir, trate `blocked_reason=atomicity_split_required`
|
|
432
|
+
como pendência real; não encerre como saúde verde. `--defer-linker` só vale
|
|
433
|
+
com `--parent-batch-id` dentro de lote pai que vai rodar `/mednotes:link`
|
|
434
|
+
uma vez ao final.
|
|
435
|
+
11. Após rewrites/merges/splits aceitos, revalide:
|
|
436
|
+
|
|
437
|
+
```bash
|
|
438
|
+
uv run python "<wiki/cli.py>" fix-wiki --apply --json
|
|
439
|
+
```
|
|
440
|
+
|
|
441
|
+
12. Se `taxonomy_action_required` vier com
|
|
442
|
+
`taxonomy_apply_requires_confirmation=true`, nenhum movimento de pasta foi
|
|
443
|
+
feito. Revise `taxonomy_plan_path`; se estiver correto:
|
|
444
|
+
|
|
445
|
+
```bash
|
|
446
|
+
uv run python "<wiki/cli.py>" fix-wiki --apply --apply-taxonomy --json
|
|
447
|
+
```
|
|
448
|
+
|
|
449
|
+
Se persistir depois disso, falta decisão humana/semântica. Use `decision`,
|
|
450
|
+
`human_decision_packet`, `receipt`, `agent_directive` e evidência privada em
|
|
451
|
+
`diagnostic_context`; não dirija o fluxo por campos diagnósticos soltos.
|
|
452
|
+
13. Backups `.bak` são legado e não devem ser criados. Se a higiene encontrar
|
|
453
|
+
`.bak` antigo ou `.rewrite`, eles devem ficar fora do vault; confira higiene
|
|
454
|
+
e cleanup antes de concluir.
|
|
455
|
+
14. Resposta final: priorize o objetivo do usuário. Se o JSON fresco trouxer
|
|
456
|
+
`reports.public_report.lines`, use essas linhas como fonte determinística da saída
|
|
457
|
+
pública e não reconstrua um relatório operacional. Em revisão, confira
|
|
458
|
+
bloqueio antes de mutar.
|
|
459
|
+
Para dry-run/apply bloqueado, não exponha `blocked_reason`,
|
|
460
|
+
`blocking_reasons`, `required_inputs`, paths de artefatos ou schemas por
|
|
461
|
+
padrão. Esses campos são contrato de automação/debugging; só aparecem se o
|
|
462
|
+
usuário pedir laboratório ou se você estiver fazendo relatório técnico. Não
|
|
463
|
+
use "concluído", "concluída", "concluiu", "finalizado", "pronto",
|
|
464
|
+
"sucesso", "com sucesso" ou "comportamento esperado" para descrever
|
|
465
|
+
workflow bloqueado/parcial. Subetapa atualizada não é workflow completo:
|
|
466
|
+
escreva "Notas Relacionadas atualizadas", "grafo sem blockers" ou "proteção
|
|
467
|
+
do vault encerrada", nunca "etapa concluída com sucesso" quando a Wiki ainda
|
|
468
|
+
aguarda especialista/cota.
|
|
469
|
+
Se você rodou `list_directory`/listou diretório fora do roteiro,
|
|
470
|
+
reporte como listagem de diretório. Não rode
|
|
471
|
+
`plan-subagents` por iniciativa própria e não invente campos ausentes/nulos
|
|
472
|
+
como `linker_pending_reason`.
|
|
473
|
+
Preserve os rótulos de artefato: `fix_wiki_plan_path` aponta para
|
|
474
|
+
`fix-wiki-plan.json`, e `run_state_path` aponta para `run_state.json`.
|
|
475
|
+
Se `Exit Code:` for diferente de zero, reporte o código mesmo quando
|
|
476
|
+
`tool status=success`; `Exit Code: 3` com JSON `status=blocked` é blocker
|
|
477
|
+
do workflow, não warning auxiliar. Workflows FSM-first expõem
|
|
478
|
+
`agent_directive` como o único contrato FSM -> agente
|
|
479
|
+
consumível por automação. Consumidores usam `agent_directive.control` para
|
|
480
|
+
enforcement e validação, e podem renderizar `agent_directive.instructions`
|
|
481
|
+
como contexto para o modelo. Não parseie relatórios humanos nem preâmbulos
|
|
482
|
+
em stderr para decidir o estado do workflow.
|
|
483
|
+
Se aplicou reescrita de nota, reporte uma auditoria antes/depois do lote:
|
|
484
|
+
preservação de YAML/proveniência/links, se a pendência indicada foi
|
|
485
|
+
resolvida na seção correta e se a qualidade médica/didática ficou boa.
|
|
486
|
+
Nota formalmente válida mas ruim é bug de UX/conteúdo.
|
|
487
|
+
Em saída pública, não liste comandos internos, `node`, paths de script,
|
|
488
|
+
`--json`, `run-start` ou `run-finish`; traduza para proteção preparada,
|
|
489
|
+
reparo executado e proteção encerrada. não invente warning para ferramenta
|
|
490
|
+
que não foi chamada. `update_topic` segue a mesma política de redação
|
|
491
|
+
pública, mas `update_topic` bem-sucedido não é desvio; se for mencionado,
|
|
492
|
+
não inclua `run_id`, hash curto, comando interno ou flag técnica. Em
|
|
493
|
+
resposta pública normal, não liste `required_inputs`; traduza o que falta
|
|
494
|
+
para linguagem acionável. Em relatório técnico/debugging, cite
|
|
495
|
+
`decision.next_action`/`receipt.next_action` como campo canônico; na saída
|
|
496
|
+
pública prefira `reports.public_report.lines`. Não misture ação de decisão
|
|
497
|
+
com retomada; se mostrar `resume_action`, use rótulo separado.
|
|
498
|
+
Em relatório técnico, preserve códigos de bloqueio nos campos canônicos da
|
|
499
|
+
FSM (`decision`, `diagnostic_context`, `error_context` ou recibos técnicos)
|
|
500
|
+
sem transformá-los em verdade paralela. Não copie `blocked_reason`
|
|
501
|
+
top-level como contrato público. Se houver
|
|
502
|
+
`primary_human_decision_kind`, `human_decision_kinds[]` ou
|
|
503
|
+
`human_decision_packet.decision_kind`, reporte em rótulo separado; não
|
|
504
|
+
transforme isso em `blocked_reason` composto. Backups `.bak` novos não
|
|
505
|
+
devem ser relatados como criados; `.bak`/`.old` legados são pendência de
|
|
506
|
+
higiene explícita, não mutação automática de `fix-wiki`. Use
|
|
507
|
+
`final_validation.hygiene.bak_or_rewrite` apenas como sinal técnico de
|
|
508
|
+
legado pendente. Se
|
|
509
|
+
`change_count_context.changed_count_applied=false`, `changed_count` é plano
|
|
510
|
+
de prévia, não mutação no vault; mutação real vem de `written_count`,
|
|
511
|
+
`total_changed_count` e
|
|
512
|
+
`version_control_mutation_summary.changed_file_count`; não derive contagem
|
|
513
|
+
de backups de `changed_count`/`written_count`.
|
|
514
|
+
Em run com mutação, reporte a evidência de fechamento do guard:
|
|
515
|
+
`guard_lease.status=closed` no `run-finish` ou `guard-status.active_count=0`.
|
|
516
|
+
Se `blocked_reason=guard_lease_mismatch`, `guard_lease.status=missing` ou
|
|
517
|
+
houver lease ativa, reporte como pendência; não diga que o guard foi fechado.
|
|
518
|
+
Em resposta pública, traduza isso para "proteção do vault encerrada" ou
|
|
519
|
+
"pendência na proteção do vault"; não imprima `guard_lease`, lease id/path,
|
|
520
|
+
`run_id`, hash de ponto de restauração ou identificador curto como
|
|
521
|
+
`7da9fcf` salvo se o usuário pedir debugging. Nunca escreva "Ponto de
|
|
522
|
+
restauração `<id>` disponível"; escreva apenas "ponto de restauração
|
|
523
|
+
disponível". Se listar o comando `run-finish`, redija o argumento como
|
|
524
|
+
`--run-id <run_id>`, nunca com o valor literal.
|
|
525
|
+
Em dry-run bloqueado sem efeito canônico executável, reporte e pare: não rode `feedback_report.py` manualmente,
|
|
526
|
+
não rode `feedback_report.py --help` e
|
|
527
|
+
não crie comandos extras de registro. O workflow já registra feedback
|
|
528
|
+
quando apropriado.
|
|
529
|
+
Se `decision.kind=ask_human` ou `human_decision_packet` estiver pendente,
|
|
530
|
+
mostre pergunta, opções, item afetado e `resume_action` do pacote. Antes da resposta final, revise
|
|
531
|
+
todos os `tool_result`: qualquer tool call falha (`status=error`,
|
|
532
|
+
parâmetros inválidos, `invalid_tool_params`, `tracker_update_task` ou
|
|
533
|
+
`read_file` fora do workspace) vira `warnings de execução`, mesmo se retry
|
|
534
|
+
posterior corrigiu; tool call `status=success` nunca vira warning. Se o
|
|
535
|
+
workflow ficou parcial, bloqueado, aguardando agente ou aguardando recurso
|
|
536
|
+
externo, não use a palavra `sucesso` nem a expressão `com sucesso` em
|
|
537
|
+
nenhuma camada do relatório; diga aplicado, atualizado, parcial, guard
|
|
538
|
+
fechado ou ponto de restauração disponível. Subetapa atualizada não é
|
|
539
|
+
workflow completo. Se ocorreu `list_permissions`, reporte como
|
|
540
|
+
probe de permissões. Se o AGY leu log indicado pela própria ferramenta,
|
|
541
|
+
reporte em linguagem humana e não use rótulo técnico literal.
|
|
542
|
+
`update_topic` bem-sucedido é normal e não deve ser listado como atrito.
|
|
543
|
+
`read_file` fora do workspace em YOLO é baixa severidade quando não afeta a
|
|
544
|
+
conclusão, mas ainda deve ser listado.
|
|
545
|
+
Use `reports.public_report.lines` como base da resposta humana e deixe
|
|
546
|
+
comandos, flags e recibos técnicos apenas para debugging explícito. Inclua
|
|
547
|
+
erros de ferramenta de preparação, como `activate_skill` com parâmetro não
|
|
548
|
+
aceito. A successful retry does not erase the earlier tool error.
|
|
549
|
+
|
|
550
|
+
## Limites
|
|
551
|
+
|
|
552
|
+
- Não edite YAML/status de raw chats.
|
|
553
|
+
- Não publique notas.
|
|
554
|
+
- Não use regex manual para links; use `fix-wiki`, grafo/linker ou
|
|
555
|
+
`/mednotes:link`.
|
|
556
|
+
- Não escreva manualmente sobre a Wiki; use `fix-wiki` ou
|
|
557
|
+
`apply-style-rewrite`/`apply-note-merge`.
|
|
558
|
+
- Não mova pastas manualmente; hierarquia é `taxonomy-migrate` com plano,
|
|
559
|
+
recibo e rollback. No `fix-wiki`, só execute com `--apply-taxonomy`.
|