mia-code 0.2.0 → 0.3.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/.miette/260321.md +1 -0
- package/.miette/260323.md +9 -0
- package/.miette/260331.md +2 -0
- package/.pde/2604011511--83a2d7f9-24a5-4cf4-98d5-036c82f872e8/2604020008--d3417f2c-df12-4f0f-8a1b-d88e7968f822/d3417f2c-df12-4f0f-8a1b-d88e7968f822.md +63 -0
- package/.pde/2604011511--83a2d7f9-24a5-4cf4-98d5-036c82f872e8/2604020008--e6c3fc5d-4a70-4523-ba7d-a3250da4c235/e6c3fc5d-4a70-4523-ba7d-a3250da4c235.md +72 -0
- package/.pde/2604011511--83a2d7f9-24a5-4cf4-98d5-036c82f872e8/2604020008--efeb00a2-b17a-4d32-b1f0-b90c37a8d24e/efeb00a2-b17a-4d32-b1f0-b90c37a8d24e.md +62 -0
- package/.pde/2604011511--83a2d7f9-24a5-4cf4-98d5-036c82f872e8/83a2d7f9-24a5-4cf4-98d5-036c82f872e8.json +302 -0
- package/.pde/2604011511--83a2d7f9-24a5-4cf4-98d5-036c82f872e8/83a2d7f9-24a5-4cf4-98d5-036c82f872e8.md +149 -0
- package/.pde/2604011511--83a2d7f9-24a5-4cf4-98d5-036c82f872e8/AGENTS.md +31 -0
- package/.pde/2604011511--83a2d7f9-24a5-4cf4-98d5-036c82f872e8/meta-decomposition-3-children.md +67 -0
- package/.pde/2604040129--61f9dd4d-7aa6-45e6-a58b-e480b1aa6737/61f9dd4d-7aa6-45e6-a58b-e480b1aa6737--from-mia-openclaw-workspace.md +125 -0
- package/.pde/2604040129--61f9dd4d-7aa6-45e6-a58b-e480b1aa6737/STATUS.md +1 -0
- package/.pde/4f02ba94-9f52-422e-9389-b16f9b37f358.json +177 -0
- package/.pde/4f02ba94-9f52-422e-9389-b16f9b37f358.md +77 -0
- package/.pde/6ad9244d-5340-490f-b76c-c86728b9de52.json +222 -0
- package/.pde/6ad9244d-5340-490f-b76c-c86728b9de52.md +99 -0
- package/.pde/8b566792-ed15-4606-96f9-2b6f593d7e6b.json +111 -0
- package/.pde/8b566792-ed15-4606-96f9-2b6f593d7e6b.md +67 -0
- package/.pde/c7f1e74b-05a5-40e2-9f01-4cc48d2528f7.json +349 -0
- package/.pde/c7f1e74b-05a5-40e2-9f01-4cc48d2528f7.md +147 -0
- package/.pde/dfc00a78-1da0-4c09-8a16-c6982644051b.json +118 -0
- package/.pde/dfc00a78-1da0-4c09-8a16-c6982644051b.md +64 -0
- package/GUILLAUME.md +8 -0
- package/KINSHIP.md +9 -0
- package/MIA_CODE_ARCHITECTURE_REPORT.md +718 -0
- package/contextual_research/260119-MIA-CODE--98090899-8aff-4e11-9dc3-8b99466d1.md +1101 -0
- package/contextual_research/MIA.md +38 -0
- package/contextual_research/MIAWAPASCONE.md +59 -0
- package/contextual_research/MIETTE.md +38 -0
- package/contextual_research/PDE-generalization--caefee82-efb1-4dbb-8733-691b01581464--260130/2504.00218v2.pdf +7483 -12
- package/contextual_research/PDE-generalization--caefee82-efb1-4dbb-8733-691b01581464--260130/2505.00212v3.pdf +0 -0
- package/contextual_research/PDE-generalization--caefee82-efb1-4dbb-8733-691b01581464--260130/CONTENT.md +1014 -0
- package/contextual_research/PDE-generalization--caefee82-efb1-4dbb-8733-691b01581464--260130/DESIGN.gemini.md +242 -0
- package/contextual_research/PDE-generalization--caefee82-efb1-4dbb-8733-691b01581464--260130/INDEX.md +45 -0
- package/contextual_research/PDE-generalization--caefee82-efb1-4dbb-8733-691b01581464--260130/sources/2504.00218v2.md +2025 -0
- package/contextual_research/PDE-generalization--caefee82-efb1-4dbb-8733-691b01581464--260130/sources/2504.00218v2.pdf +7483 -12
- package/contextual_research/PDE-generalization--caefee82-efb1-4dbb-8733-691b01581464--260130/sources/2505.00212v3.md +1755 -0
- package/contextual_research/PDE-generalization--caefee82-efb1-4dbb-8733-691b01581464--260130/sources/2505.00212v3.pdf +0 -0
- package/contextual_research/PDE-generalization--caefee82-efb1-4dbb-8733-691b01581464--260130/sources/footnote_1_12_decomposed_prompting.pdf +0 -0
- package/contextual_research/PDE-generalization--caefee82-efb1-4dbb-8733-691b01581464--260130/sources/footnote_1_19_hugginggpt_planning.pdf +0 -0
- package/contextual_research/PDE-generalization--caefee82-efb1-4dbb-8733-691b01581464--260130/sources/footnote_1_1_coordination_challenges.md +766 -0
- package/contextual_research/PDE-generalization--caefee82-efb1-4dbb-8733-691b01581464--260130/sources/footnote_1_1_coordination_challenges.pdf +3431 -4
- package/contextual_research/PDE-generalization--caefee82-efb1-4dbb-8733-691b01581464--260130/sources/footnote_1_28_guardrails_multi_agent.md +260 -0
- package/contextual_research/PDE-generalization--caefee82-efb1-4dbb-8733-691b01581464--260130/sources/footnote_1_28_guardrails_multi_agent.pdf +0 -0
- package/contextual_research/PDE-generalization--caefee82-efb1-4dbb-8733-691b01581464--260130/sources/footnote_1_2_navigating_complexity.md +558 -0
- package/contextual_research/PDE-generalization--caefee82-efb1-4dbb-8733-691b01581464--260130/sources/footnote_1_2_navigating_complexity.pdf +0 -0
- package/contextual_research/PDE-generalization--caefee82-efb1-4dbb-8733-691b01581464--260130/sources/footnote_1_34_hierarchical_multi_agent.pdf +0 -0
- package/contextual_research/PDE-generalization--caefee82-efb1-4dbb-8733-691b01581464--260130/sources/footnote_1_5_open_intent_extraction.pdf +0 -0
- package/contextual_research/PODCAST.md +109 -0
- package/contextual_research/langchain-principles-roadmap.md +157 -0
- package/contextual_research/persona-to-narrative-character-inquiry_260201.md +50 -0
- package/dist/cli.js +35 -11
- package/dist/geminiHeadless.js +8 -2
- package/dist/index.js +2 -1
- package/dist/mcp/miaco-server.js +10 -1
- package/dist/mcp/miatel-server.js +10 -1
- package/dist/mcp/miawa-server.js +10 -1
- package/dist/mcp/utils.d.ts +6 -1
- package/dist/mcp/utils.js +24 -3
- package/dist/sessionStore.d.ts +8 -2
- package/dist/sessionStore.js +39 -3
- package/dist/types.d.ts +1 -0
- package/miaco/README.md +124 -0
- package/miaco/dist/commands/chart.d.ts +6 -0
- package/miaco/dist/commands/chart.d.ts.map +1 -0
- package/miaco/dist/commands/chart.js +222 -0
- package/miaco/dist/commands/chart.js.map +1 -0
- package/miaco/dist/commands/decompose.d.ts +6 -0
- package/miaco/dist/commands/decompose.d.ts.map +1 -0
- package/miaco/dist/commands/decompose.js +98 -0
- package/miaco/dist/commands/decompose.js.map +1 -0
- package/miaco/dist/commands/schema.d.ts +6 -0
- package/miaco/dist/commands/schema.d.ts.map +1 -0
- package/miaco/dist/commands/schema.js +66 -0
- package/miaco/dist/commands/schema.js.map +1 -0
- package/miaco/dist/commands/stc.d.ts +11 -0
- package/miaco/dist/commands/stc.d.ts.map +1 -0
- package/miaco/dist/commands/stc.js +590 -0
- package/miaco/dist/commands/stc.js.map +1 -0
- package/miaco/dist/commands/trace.d.ts +6 -0
- package/miaco/dist/commands/trace.d.ts.map +1 -0
- package/miaco/dist/commands/trace.js +83 -0
- package/miaco/dist/commands/trace.js.map +1 -0
- package/miaco/dist/commands/validate.d.ts +6 -0
- package/miaco/dist/commands/validate.d.ts.map +1 -0
- package/miaco/dist/commands/validate.js +58 -0
- package/miaco/dist/commands/validate.js.map +1 -0
- package/miaco/dist/decompose.d.ts +93 -0
- package/miaco/dist/decompose.d.ts.map +1 -0
- package/miaco/dist/decompose.js +562 -0
- package/miaco/dist/decompose.js.map +1 -0
- package/miaco/dist/index.d.ts +18 -0
- package/miaco/dist/index.d.ts.map +1 -0
- package/miaco/dist/index.js +83 -0
- package/miaco/dist/index.js.map +1 -0
- package/miaco/dist/storage.d.ts +60 -0
- package/miaco/dist/storage.d.ts.map +1 -0
- package/miaco/dist/storage.js +100 -0
- package/miaco/dist/storage.js.map +1 -0
- package/miaco/package-lock.json +4103 -0
- package/miaco/package.json +40 -0
- package/miaco/tsconfig.json +18 -0
- package/miaco/version-patch-commit-and-publish.sh +1 -0
- package/miatel/MISSION_251231.md +3 -0
- package/miatel/README.md +107 -0
- package/miatel/dist/commands/analyze.d.ts +6 -0
- package/miatel/dist/commands/analyze.d.ts.map +1 -0
- package/miatel/dist/commands/analyze.js +100 -0
- package/miatel/dist/commands/analyze.js.map +1 -0
- package/miatel/dist/commands/arc.d.ts +6 -0
- package/miatel/dist/commands/arc.d.ts.map +1 -0
- package/miatel/dist/commands/arc.js +71 -0
- package/miatel/dist/commands/arc.js.map +1 -0
- package/miatel/dist/commands/beat.d.ts +6 -0
- package/miatel/dist/commands/beat.d.ts.map +1 -0
- package/miatel/dist/commands/beat.js +165 -0
- package/miatel/dist/commands/beat.js.map +1 -0
- package/miatel/dist/commands/theme.d.ts +6 -0
- package/miatel/dist/commands/theme.d.ts.map +1 -0
- package/miatel/dist/commands/theme.js +54 -0
- package/miatel/dist/commands/theme.js.map +1 -0
- package/miatel/dist/index.d.ts +18 -0
- package/miatel/dist/index.d.ts.map +1 -0
- package/miatel/dist/index.js +80 -0
- package/miatel/dist/index.js.map +1 -0
- package/miatel/dist/storage.d.ts +55 -0
- package/miatel/dist/storage.d.ts.map +1 -0
- package/miatel/dist/storage.js +100 -0
- package/miatel/dist/storage.js.map +1 -0
- package/miatel/package-lock.json +4103 -0
- package/miatel/package.json +35 -0
- package/miatel/src/commands/analyze.ts +109 -0
- package/miatel/src/commands/arc.ts +78 -0
- package/miatel/src/commands/beat.ts +176 -0
- package/miatel/src/commands/theme.ts +60 -0
- package/miatel/src/index.ts +94 -0
- package/miatel/src/storage.ts +156 -0
- package/miatel/tsconfig.json +18 -0
- package/miawa/MISSION_251231.md +144 -0
- package/miawa/README.md +133 -0
- package/miawa/dist/commands/beat.d.ts +6 -0
- package/miawa/dist/commands/beat.d.ts.map +1 -0
- package/miawa/dist/commands/beat.js +69 -0
- package/miawa/dist/commands/beat.js.map +1 -0
- package/miawa/dist/commands/ceremony.d.ts +6 -0
- package/miawa/dist/commands/ceremony.d.ts.map +1 -0
- package/miawa/dist/commands/ceremony.js +239 -0
- package/miawa/dist/commands/ceremony.js.map +1 -0
- package/miawa/dist/commands/circle.d.ts +6 -0
- package/miawa/dist/commands/circle.d.ts.map +1 -0
- package/miawa/dist/commands/circle.js +75 -0
- package/miawa/dist/commands/circle.js.map +1 -0
- package/miawa/dist/commands/eva.d.ts +6 -0
- package/miawa/dist/commands/eva.d.ts.map +1 -0
- package/miawa/dist/commands/eva.js +73 -0
- package/miawa/dist/commands/eva.js.map +1 -0
- package/miawa/dist/commands/wound.d.ts +6 -0
- package/miawa/dist/commands/wound.d.ts.map +1 -0
- package/miawa/dist/commands/wound.js +74 -0
- package/miawa/dist/commands/wound.js.map +1 -0
- package/miawa/dist/index.d.ts +19 -0
- package/miawa/dist/index.d.ts.map +1 -0
- package/miawa/dist/index.js +91 -0
- package/miawa/dist/index.js.map +1 -0
- package/miawa/dist/storage.d.ts +73 -0
- package/miawa/dist/storage.d.ts.map +1 -0
- package/miawa/dist/storage.js +100 -0
- package/miawa/dist/storage.js.map +1 -0
- package/miawa/package-lock.json +4103 -0
- package/miawa/package.json +36 -0
- package/miawa/src/commands/beat.ts +74 -0
- package/miawa/src/commands/ceremony.ts +256 -0
- package/miawa/src/commands/circle.ts +83 -0
- package/miawa/src/commands/eva.ts +84 -0
- package/miawa/src/commands/wound.ts +79 -0
- package/miawa/src/index.ts +108 -0
- package/miawa/src/storage.ts +179 -0
- package/miawa/tsconfig.json +18 -0
- package/package.json +7 -5
- package/references/acp/CLAUDE.md +7 -0
- package/references/acp/agent-plan.md +84 -0
- package/references/acp/clients.md +31 -0
- package/references/acp/extensibility.md +137 -0
- package/references/acp/initialization.md +225 -0
- package/references/acp/prompt-turn.md +321 -0
- package/references/acp/proxy-chains.md +562 -0
- package/references/acp/schema.md +3171 -0
- package/references/acp/session-list.md +334 -0
- package/references/acp/session-modes.md +170 -0
- package/references/acp/slash-commands.md +99 -0
- package/references/acp/terminals.md +281 -0
- package/references/acp/tool-calls.md +311 -0
- package/references/acp/typescript.md +29 -0
- package/references/claude/agent-teams.md +399 -0
- package/references/claude/chrome.md +231 -0
- package/references/claude/headless.md +158 -0
- package/references/claude/hooks-guide.md +708 -0
- package/references/claude/output-styles.md +112 -0
- package/references/claude/plugins.md +432 -0
- package/references/claude/skills.md +693 -0
- package/references/claude/sub-agents.md +816 -0
- package/references/copilot/acp/agents.md +32 -0
- package/references/copilot/acp/architecture.md +37 -0
- package/references/copilot/acp/clients.md +31 -0
- package/references/copilot/acp/introduction.md +42 -0
- package/references/copilot/acp/registry.md +339 -0
- package/references/copilot/acp-server.md +117 -0
- package/references/copilot/create-copilot-instructions.md +840 -0
- package/references/langchain/llms.txt +833 -0
- package/references/langchain/python/agents.md +677 -0
- package/references/langchain/python/context-engineering.md +1195 -0
- package/references/langchain/python/human-in-the-loop.md +326 -0
- package/references/langchain/python/long-term-memory.md +168 -0
- package/references/langchain/python/mcp.md +949 -0
- package/references/langchain/python/multi-agents/custom-workflow.md +187 -0
- package/references/langchain/python/multi-agents/handoffs.md +436 -0
- package/references/langchain/python/multi-agents/overview.md +295 -0
- package/references/langchain/python/multi-agents/router.md +150 -0
- package/references/langchain/python/multi-agents/skills.md +92 -0
- package/references/langchain/python/multi-agents/subagents.md +486 -0
- package/references/langchain/python/retrieval.md +320 -0
- package/references/langchain/python/runtime.md +141 -0
- package/references/langchain/python/short-term-memory.md +658 -0
- package/references/langchain/python/structured-output.md +712 -0
- package/references/langfuse/llms.txt +148 -0
- package/references/langgraph/javascript/llms.txt +275 -0
- package/references/skills/home.md +259 -0
- package/references/skills/integrate-skills.md +103 -0
- package/references/skills/specification.md +254 -0
- package/references/skills/what-are-skills.md +74 -0
- package/rispecs/README.md +164 -0
- package/rispecs/_sync_/miadi-code/SPEC.md +313 -0
- package/rispecs/_sync_/miadi-code/STATUS.md +177 -0
- package/rispecs/_sync_/miadi-code/dashboard/SPEC.md +465 -0
- package/rispecs/_sync_/miadi-code/dashboard/STATUS.md +212 -0
- package/rispecs/_sync_/miadi-code/multiline-input/SPEC.md +232 -0
- package/rispecs/_sync_/miadi-code/multiline-input/STATUS.md +108 -0
- package/rispecs/_sync_/miadi-code/pde/SPEC.md +253 -0
- package/rispecs/_sync_/miadi-code/pde/STATUS.md +56 -0
- package/rispecs/_sync_/miadi-code/stc/SPEC.md +397 -0
- package/rispecs/_sync_/miadi-code/stc/STATUS.md +70 -0
- package/rispecs/ava-langstack/inquiry-routing-upgrade.spec.md +119 -0
- package/rispecs/borrowed_from_opencode/001-client-server-architecture.rispec.md +98 -0
- package/rispecs/borrowed_from_opencode/002-event-bus-system.rispec.md +125 -0
- package/rispecs/borrowed_from_opencode/003-instance-state-pattern.rispec.md +136 -0
- package/rispecs/borrowed_from_opencode/004-namespace-module-pattern.rispec.md +151 -0
- package/rispecs/borrowed_from_opencode/005-zod-schema-validation.rispec.md +139 -0
- package/rispecs/borrowed_from_opencode/006-named-error-system.rispec.md +155 -0
- package/rispecs/borrowed_from_opencode/007-structured-logging.rispec.md +138 -0
- package/rispecs/borrowed_from_opencode/008-lazy-initialization.rispec.md +127 -0
- package/rispecs/borrowed_from_opencode/009-multi-agent-system.rispec.md +97 -0
- package/rispecs/borrowed_from_opencode/010-agent-definition-config.rispec.md +135 -0
- package/rispecs/borrowed_from_opencode/011-agent-permission-rulesets.rispec.md +151 -0
- package/rispecs/borrowed_from_opencode/012-agent-prompt-templates.rispec.md +141 -0
- package/rispecs/borrowed_from_opencode/013-agent-generation.rispec.md +142 -0
- package/rispecs/borrowed_from_opencode/014-plan-build-mode-toggle.rispec.md +155 -0
- package/rispecs/borrowed_from_opencode/015-subagent-task-delegation.rispec.md +146 -0
- package/rispecs/borrowed_from_opencode/016-agent-model-selection.rispec.md +151 -0
- package/rispecs/borrowed_from_opencode/017-compaction-agent.rispec.md +150 -0
- package/rispecs/borrowed_from_opencode/018-session-persistence.rispec.md +125 -0
- package/rispecs/borrowed_from_opencode/019-session-compaction.rispec.md +132 -0
- package/rispecs/borrowed_from_opencode/020-session-forking.rispec.md +134 -0
- package/rispecs/borrowed_from_opencode/021-session-revert-snapshot.rispec.md +135 -0
- package/rispecs/borrowed_from_opencode/022-session-sharing.rispec.md +165 -0
- package/rispecs/borrowed_from_opencode/023-session-summary-diffs.rispec.md +165 -0
- package/rispecs/borrowed_from_opencode/024-child-sessions.rispec.md +164 -0
- package/rispecs/borrowed_from_opencode/025-session-title-generation.rispec.md +162 -0
- package/rispecs/borrowed_from_opencode/026-message-parts-model.rispec.md +201 -0
- package/rispecs/borrowed_from_opencode/027-streaming-message-deltas.rispec.md +212 -0
- package/rispecs/borrowed_from_opencode/028-multi-provider-architecture.rispec.md +184 -0
- package/rispecs/borrowed_from_opencode/029-provider-authentication.rispec.md +225 -0
- package/rispecs/borrowed_from_opencode/030-model-registry.rispec.md +222 -0
- package/rispecs/borrowed_from_opencode/031-cost-tracking.rispec.md +243 -0
- package/rispecs/borrowed_from_opencode/032-provider-transform-pipeline.rispec.md +282 -0
- package/rispecs/borrowed_from_opencode/033-provider-sdk-abstraction.rispec.md +338 -0
- package/rispecs/borrowed_from_opencode/034-tool-registry.rispec.md +110 -0
- package/rispecs/borrowed_from_opencode/035-tool-context-injection.rispec.md +155 -0
- package/rispecs/borrowed_from_opencode/036-tool-output-truncation.rispec.md +138 -0
- package/rispecs/borrowed_from_opencode/037-batch-tool.rispec.md +129 -0
- package/rispecs/borrowed_from_opencode/038-multi-edit-tool.rispec.md +167 -0
- package/rispecs/borrowed_from_opencode/039-apply-patch-tool.rispec.md +161 -0
- package/rispecs/borrowed_from_opencode/040-code-search-tool.rispec.md +143 -0
- package/rispecs/borrowed_from_opencode/041-web-fetch-tool.rispec.md +131 -0
- package/rispecs/borrowed_from_opencode/042-web-search-tool.rispec.md +159 -0
- package/rispecs/borrowed_from_opencode/043-todo-tool.rispec.md +156 -0
- package/rispecs/borrowed_from_opencode/044-plan-mode-tool.rispec.md +139 -0
- package/rispecs/borrowed_from_opencode/045-task-tool.rispec.md +146 -0
- package/rispecs/borrowed_from_opencode/046-question-tool.rispec.md +170 -0
- package/rispecs/borrowed_from_opencode/047-external-directory-tool.rispec.md +166 -0
- package/rispecs/borrowed_from_opencode/048-file-read-write-tools.rispec.md +205 -0
- package/rispecs/borrowed_from_opencode/049-lsp-server-management.rispec.md +104 -0
- package/rispecs/borrowed_from_opencode/050-lsp-hover-completion.rispec.md +102 -0
- package/rispecs/borrowed_from_opencode/051-lsp-diagnostics.rispec.md +86 -0
- package/rispecs/borrowed_from_opencode/052-lsp-root-detection.rispec.md +109 -0
- package/rispecs/borrowed_from_opencode/053-remote-mcp-servers.rispec.md +119 -0
- package/rispecs/borrowed_from_opencode/054-mcp-oauth-flow.rispec.md +107 -0
- package/rispecs/borrowed_from_opencode/055-mcp-tool-conversion.rispec.md +118 -0
- package/rispecs/borrowed_from_opencode/056-mcp-connection-monitoring.rispec.md +106 -0
- package/rispecs/borrowed_from_opencode/057-local-mcp-servers.rispec.md +116 -0
- package/rispecs/borrowed_from_opencode/058-rich-tui.rispec.md +108 -0
- package/rispecs/borrowed_from_opencode/059-streaming-display.rispec.md +116 -0
- package/rispecs/borrowed_from_opencode/060-permission-prompts.rispec.md +130 -0
- package/rispecs/borrowed_from_opencode/061-session-navigation.rispec.md +155 -0
- package/rispecs/borrowed_from_opencode/062-syntax-highlighting.rispec.md +151 -0
- package/rispecs/borrowed_from_opencode/063-keybinding-system.rispec.md +181 -0
- package/rispecs/borrowed_from_opencode/064-multi-level-config.rispec.md +155 -0
- package/rispecs/borrowed_from_opencode/065-jsonc-config.rispec.md +190 -0
- package/rispecs/borrowed_from_opencode/066-config-env-variables.rispec.md +153 -0
- package/rispecs/borrowed_from_opencode/067-config-deep-merging.rispec.md +178 -0
- package/rispecs/borrowed_from_opencode/068-remote-org-config.rispec.md +183 -0
- package/rispecs/borrowed_from_opencode/069-config-markdown-frontmatter.rispec.md +206 -0
- package/rispecs/borrowed_from_opencode/070-managed-config-directory.rispec.md +232 -0
- package/rispecs/borrowed_from_opencode/071-plugin-architecture.rispec.md +104 -0
- package/rispecs/borrowed_from_opencode/072-plugin-hooks.rispec.md +123 -0
- package/rispecs/borrowed_from_opencode/073-plugin-auto-install.rispec.md +115 -0
- package/rispecs/borrowed_from_opencode/074-permission-system.rispec.md +133 -0
- package/rispecs/borrowed_from_opencode/075-git-worktree-management.rispec.md +126 -0
- package/rispecs/borrowed_from_opencode/076-snapshot-system.rispec.md +124 -0
- package/rispecs/borrowed_from_opencode/077-snapshot-diff.rispec.md +117 -0
- package/rispecs/borrowed_from_opencode/078-snapshot-restore.rispec.md +128 -0
- package/rispecs/borrowed_from_opencode/079-worktree-branch-naming.rispec.md +122 -0
- package/rispecs/borrowed_from_opencode/080-sqlite-storage.rispec.md +134 -0
- package/rispecs/borrowed_from_opencode/081-database-migrations.rispec.md +148 -0
- package/rispecs/borrowed_from_opencode/082-database-transactions.rispec.md +138 -0
- package/rispecs/borrowed_from_opencode/083-deferred-effects.rispec.md +148 -0
- package/rispecs/borrowed_from_opencode/084-permission-rules.rispec.md +123 -0
- package/rispecs/borrowed_from_opencode/085-permission-glob-patterns.rispec.md +113 -0
- package/rispecs/borrowed_from_opencode/086-permission-merging.rispec.md +134 -0
- package/rispecs/borrowed_from_opencode/087-permission-modes.rispec.md +145 -0
- package/rispecs/borrowed_from_opencode/088-http-api-server.rispec.md +165 -0
- package/rispecs/borrowed_from_opencode/089-openapi-spec-generation.rispec.md +164 -0
- package/rispecs/borrowed_from_opencode/090-websocket-support.rispec.md +136 -0
- package/rispecs/borrowed_from_opencode/091-sse-streaming.rispec.md +168 -0
- package/rispecs/borrowed_from_opencode/092-mdns-discovery.rispec.md +145 -0
- package/rispecs/borrowed_from_opencode/093-javascript-sdk.rispec.md +200 -0
- package/rispecs/borrowed_from_opencode/094-skill-system.rispec.md +187 -0
- package/rispecs/borrowed_from_opencode/095-skill-discovery.rispec.md +182 -0
- package/rispecs/borrowed_from_opencode/096-desktop-remote-driving.rispec.md +175 -0
- package/rispecs/borrowed_from_opencode/INDEX.md +255 -0
- package/rispecs/core.rispecs.md +261 -0
- package/rispecs/engines.rispecs.md +241 -0
- package/rispecs/formatting.rispecs.md +252 -0
- package/rispecs/living-specifications.rispecs.md +361 -0
- package/rispecs/mcp.rispecs.md +197 -0
- package/rispecs/pde.rispecs.md +399 -0
- package/rispecs/pi-mono-envisionning/ENVISIONING.md +366 -0
- package/rispecs/pi-mono-envisionning/storytelling-horizon.rispecs.md +76 -0
- package/rispecs/pi-mono-envisionning/widget.rispecs.md +2 -0
- package/rispecs/relation-to-mcp-structural-thinking.kin.md +72 -0
- package/rispecs/research-for-better-framework/CLAUDE.md +7 -0
- package/rispecs/research-for-better-framework/survey-pi-openclaw-opencode-openhands.md +210 -0
- package/rispecs/session.rispecs.md +277 -0
- package/rispecs/stc.rispecs.md +138 -0
- package/rispecs/unifier.rispecs.md +317 -0
- package/scripts/LAUNCH--mcp-mia-code--testing--2603141315--ac705a66-2c15-4a1c-a26d-9491018c5ba8.sh +2 -0
- package/scripts/RESUME--mia-code--mcps--260313--ac705a66-2c15-4a1c-a26d-9491018c5ba8.sh +1 -0
- package/scripts/install-widget-in-home-pi-agent-extensions.sh +4 -0
- package/scripts/sample-decompose--2604011535-prompt.sh +1 -0
- package/skills/deep-search/AGENTS.md +17 -0
- package/skills/deep-search/SKILL.md +281 -0
- package/skills/deep-search/agent-templates.md +224 -0
- package/skills/deep-search/orchestration-patterns.md +95 -0
- package/skills/miaco-pde-inquiry-routing-deep-search/AGENTS.md +13 -0
- package/skills/miaco-pde-inquiry-routing-deep-search/SKILL.md +136 -0
- package/skills/miaco-pde-inquiry-routing-internal-external-relationship/AGENTS.md +4 -0
- package/skills/miaco-pde-inquiry-routing-internal-external-relationship/SKILL.md +157 -0
- package/skills/miaco-pde-inquiry-routing-local-qmd/AGENTS.md +42 -0
- package/skills/miaco-pde-inquiry-routing-local-qmd/SKILL.md +135 -0
- package/skills/qmd/AGENTS.md +3 -0
- package/skills/qmd/SKILL.md +144 -0
- package/skills/qmd/references/mcp-setup.md +102 -0
- package/skills/rise-pde-inquiry-session-multi-agents-v3/SKILL.md +234 -0
- package/skills/rise-pde-inquiry-session-multi-agents-v3/agent-templates.md +436 -0
- package/skills/rise-pde-inquiry-session-multi-agents-v3/orchestration-patterns.md +197 -0
- package/skills/rise-pde-inquiry-session-multi-agents-v3/references/ceremonial-technology.md +102 -0
- package/skills/rise-pde-inquiry-session-multi-agents-v3/references/creative-orientation.md +99 -0
- package/skills/rise-pde-inquiry-session-multi-agents-v3/references/prompt-decomposition.md +73 -0
- package/skills/rise-pde-inquiry-session-multi-agents-v3/references/rise-framework.md +74 -0
- package/skills/rise-pde-inquiry-session-multi-agents-v3/references/structural-tension.md +82 -0
- package/src/cli.ts +35 -11
- package/src/geminiHeadless.ts +7 -2
- package/src/index.ts +2 -1
- package/src/mcp/miaco-server.ts +13 -1
- package/src/mcp/miatel-server.ts +13 -1
- package/src/mcp/miawa-server.ts +13 -1
- package/src/mcp/utils.ts +41 -8
- package/src/sessionStore.ts +44 -4
- package/src/types.ts +2 -1
- package/widget/mia-ceremony/README.md +36 -0
- package/widget/mia-ceremony/index.ts +143 -0
- package/widget/mia-interceptor/README.md +39 -0
- package/widget/mia-interceptor/index.ts +221 -0
- package/widget/mia-tools/README.md +37 -0
- package/widget/mia-tools/index.ts +569 -0
- package/widget/miette-echo/README.md +44 -0
- package/widget/miette-echo/index.ts +164 -0
- package/.claude/settings.local.json +0 -9
- package/.hch/issue_.env +0 -4
- package/.hch/issue_add__2601211715.json +0 -77
- package/.hch/issue_add__2601211715.md +0 -4
- package/.hch/issue_add__2602242020.json +0 -78
- package/.hch/issue_add__2602242020.md +0 -7
- package/.hch/issues.json +0 -2312
- package/.hch/issues.md +0 -30
- package/WS__mia-code__260214__IAIP_PDE.code-workspace +0 -29
- package/WS__mia-code__src332__260122.code-workspace +0 -23
- package/samples/copilot/session-state/be76abaa-a27f-4725-b2a9-22fb45f7e0f7/checkpoints/index.md +0 -6
- package/samples/copilot/session-state/be76abaa-a27f-4725-b2a9-22fb45f7e0f7/events.jsonl +0 -213
- package/samples/copilot/session-state/be76abaa-a27f-4725-b2a9-22fb45f7e0f7/plan.md +0 -243
- package/samples/copilot/session-state/be76abaa-a27f-4725-b2a9-22fb45f7e0f7/workspace.yaml +0 -5
|
@@ -0,0 +1,206 @@
|
|
|
1
|
+
# RISE-069: Config from Markdown Frontmatter
|
|
2
|
+
|
|
3
|
+
> RISE Framework Specification — Borrowed from OpenCode for mia-code
|
|
4
|
+
> Document: rispecs/borrowed_from_opencode/069-config-markdown-frontmatter.rispec.md
|
|
5
|
+
|
|
6
|
+
## Creative Intent
|
|
7
|
+
|
|
8
|
+
mia-code reads configuration from YAML frontmatter in markdown files, allowing documentation and configuration to coexist in the same file. An `AGENTS.md` file describes an agent in prose and configures it in frontmatter — the file is simultaneously human-readable documentation and machine-readable configuration. This dual-purpose design eliminates the drift between "what the documentation says" and "what the tool does."
|
|
9
|
+
|
|
10
|
+
## Structural Tension Analysis
|
|
11
|
+
|
|
12
|
+
**Current Reality:**
|
|
13
|
+
- Agent definitions, project policies, and conventions live in separate JSON config files and markdown documentation
|
|
14
|
+
- Documentation in files like `CLAUDE.md` or `AGENTS.md` is read by humans but ignored by mia-code's config system
|
|
15
|
+
- Developers maintain parallel files: one describing intent (markdown), one configuring behavior (JSON)
|
|
16
|
+
- Configuration drift is common — the JSON config is updated but the documentation is not, or vice versa
|
|
17
|
+
- Markdown files in repositories serve no functional purpose for mia-code beyond being content the agent can read
|
|
18
|
+
|
|
19
|
+
**Desired State:**
|
|
20
|
+
- Markdown files with YAML frontmatter (delimited by `---`) are parsed for configuration values
|
|
21
|
+
- Frontmatter config is merged into the config hierarchy at a defined precedence level
|
|
22
|
+
- Agent definition files (e.g., `AGENTS.md`) both describe and configure agents in a single file
|
|
23
|
+
- Multiple markdown files can contribute config, with contributions merged
|
|
24
|
+
- The prose body of the markdown remains pure documentation — only the frontmatter is config
|
|
25
|
+
|
|
26
|
+
## Desired Outcome Definition
|
|
27
|
+
|
|
28
|
+
mia-code scans configured directories for markdown files with YAML frontmatter. Frontmatter content is parsed as configuration and merged into the config hierarchy between project config and CLI flags. The markdown body is ignored by the config system (but remains available to agents as context).
|
|
29
|
+
|
|
30
|
+
## Natural Language Functional Description
|
|
31
|
+
|
|
32
|
+
### Frontmatter Format
|
|
33
|
+
|
|
34
|
+
YAML frontmatter is delimited by `---` at the start of a markdown file:
|
|
35
|
+
|
|
36
|
+
```markdown
|
|
37
|
+
---
|
|
38
|
+
agent: code-reviewer
|
|
39
|
+
model: claude-sonnet-4
|
|
40
|
+
permission:
|
|
41
|
+
file_write: deny
|
|
42
|
+
file_read: allow
|
|
43
|
+
bash: deny
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
# Code Reviewer Agent
|
|
47
|
+
|
|
48
|
+
This agent reviews code changes for quality, consistency, and potential bugs.
|
|
49
|
+
It has read-only access to the codebase and cannot modify files or run commands.
|
|
50
|
+
|
|
51
|
+
## Review Criteria
|
|
52
|
+
|
|
53
|
+
- Code style consistency
|
|
54
|
+
- Error handling completeness
|
|
55
|
+
- Test coverage adequacy
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
The frontmatter between the `---` delimiters is parsed as YAML. Everything below the closing `---` is the markdown body.
|
|
59
|
+
|
|
60
|
+
### Supported Files
|
|
61
|
+
|
|
62
|
+
By default, mia-code scans for frontmatter config in:
|
|
63
|
+
1. `.mia-code/*.md` — all markdown files in the project's mia-code directory
|
|
64
|
+
2. `AGENTS.md` — agent definitions at the project root
|
|
65
|
+
3. `CLAUDE.md` — Claude-specific conventions (parsed for config frontmatter if present)
|
|
66
|
+
4. `MIA.md` — mia-code specific project conventions
|
|
67
|
+
|
|
68
|
+
The scan pattern is configurable: `{"config": {"frontmatterFiles": [".mia-code/*.md", "AGENTS.md"]}}`.
|
|
69
|
+
|
|
70
|
+
### Frontmatter Schema
|
|
71
|
+
|
|
72
|
+
Frontmatter values map to standard mia-code config keys:
|
|
73
|
+
|
|
74
|
+
```yaml
|
|
75
|
+
# Agent definition
|
|
76
|
+
agent: reviewer # Agent name (creates/overrides agent config)
|
|
77
|
+
model: claude-sonnet-4 # Model override for this agent
|
|
78
|
+
engine: claude # Engine override
|
|
79
|
+
|
|
80
|
+
# Permissions for this agent
|
|
81
|
+
permission:
|
|
82
|
+
file_write: deny
|
|
83
|
+
file_read: allow
|
|
84
|
+
bash: ask
|
|
85
|
+
glob: allow
|
|
86
|
+
grep: allow
|
|
87
|
+
|
|
88
|
+
# Additional agent config
|
|
89
|
+
temperature: 0.3
|
|
90
|
+
maxTokens: 4096
|
|
91
|
+
systemPrompt: |
|
|
92
|
+
You are a code reviewer. Focus on correctness and maintainability.
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
### Multiple File Merging
|
|
96
|
+
|
|
97
|
+
When multiple markdown files contribute frontmatter config:
|
|
98
|
+
1. Files are processed in alphabetical order within each scan directory
|
|
99
|
+
2. Later files override earlier files for conflicting keys
|
|
100
|
+
3. Agent definitions from different files create separate agents (keyed by `agent` name)
|
|
101
|
+
4. Non-agent config keys merge following standard deep merge rules (RISE-067)
|
|
102
|
+
|
|
103
|
+
Example:
|
|
104
|
+
- `.mia-code/reviewer.md` defines agent "reviewer" with read-only permissions
|
|
105
|
+
- `.mia-code/builder.md` defines agent "builder" with write permissions
|
|
106
|
+
- Both agents are available in the merged config
|
|
107
|
+
|
|
108
|
+
### Precedence
|
|
109
|
+
|
|
110
|
+
Frontmatter config sits between project config and CLI flags:
|
|
111
|
+
|
|
112
|
+
```
|
|
113
|
+
...
|
|
114
|
+
Project config (./mia-code.json)
|
|
115
|
+
↓
|
|
116
|
+
Markdown frontmatter (.mia-code/*.md) ← this level
|
|
117
|
+
↓
|
|
118
|
+
CLI flags
|
|
119
|
+
...
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
This means frontmatter can override project config (useful for agent-specific overrides that live with agent documentation) but CLI flags still win.
|
|
123
|
+
|
|
124
|
+
### Parsing Rules
|
|
125
|
+
|
|
126
|
+
1. **YAML parsing**: Use a YAML parser (e.g., `js-yaml`) to parse the frontmatter block
|
|
127
|
+
2. **Type coercion**: YAML types map to JSON types (strings, numbers, booleans, objects, arrays)
|
|
128
|
+
3. **No frontmatter**: Files without `---` delimiters at the start are ignored by the config system
|
|
129
|
+
4. **Invalid YAML**: Parse errors are warned (with file path and line number) and the file is skipped
|
|
130
|
+
5. **Empty frontmatter**: `---\n---` is valid and contributes nothing (the file is recognized but adds no config)
|
|
131
|
+
|
|
132
|
+
### Agent Definition Shorthand
|
|
133
|
+
|
|
134
|
+
When a markdown file's frontmatter includes `agent: <name>`, the entire frontmatter is treated as an agent definition. The remaining keys become properties of that agent:
|
|
135
|
+
|
|
136
|
+
```yaml
|
|
137
|
+
---
|
|
138
|
+
agent: security-auditor
|
|
139
|
+
model: claude-sonnet-4
|
|
140
|
+
permission:
|
|
141
|
+
bash: deny
|
|
142
|
+
file_write: deny
|
|
143
|
+
---
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
This is equivalent to the JSON config:
|
|
147
|
+
```json
|
|
148
|
+
{
|
|
149
|
+
"agents": {
|
|
150
|
+
"security-auditor": {
|
|
151
|
+
"model": "claude-sonnet-4",
|
|
152
|
+
"permission": {
|
|
153
|
+
"bash": "deny",
|
|
154
|
+
"file_write": "deny"
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
### Body as System Prompt
|
|
162
|
+
|
|
163
|
+
If the frontmatter includes `agent: <name>` and no explicit `systemPrompt` key, the markdown body (everything after the closing `---`) is used as the agent's system prompt:
|
|
164
|
+
|
|
165
|
+
```markdown
|
|
166
|
+
---
|
|
167
|
+
agent: reviewer
|
|
168
|
+
model: claude-sonnet-4
|
|
169
|
+
---
|
|
170
|
+
|
|
171
|
+
You are a code reviewer for this project. Follow these guidelines:
|
|
172
|
+
|
|
173
|
+
1. Check for proper error handling
|
|
174
|
+
2. Verify test coverage
|
|
175
|
+
3. Ensure consistent naming conventions
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
The markdown body becomes the system prompt, complete with markdown formatting. This makes agent documentation and agent instructions identical — what you read is what the agent receives.
|
|
179
|
+
|
|
180
|
+
### Change Detection
|
|
181
|
+
|
|
182
|
+
mia-code watches frontmatter files for changes (using file system watchers if available):
|
|
183
|
+
- When a frontmatter file is modified, the config is reloaded automatically
|
|
184
|
+
- A status bar notification shows "Config reloaded from reviewer.md"
|
|
185
|
+
- No restart required — agents pick up new config on next invocation
|
|
186
|
+
|
|
187
|
+
## Supporting Structures
|
|
188
|
+
|
|
189
|
+
- **Multi-Level Config (RISE-064)** places frontmatter config in the precedence hierarchy
|
|
190
|
+
- **Config Deep Merging (RISE-067)** merges frontmatter config with other levels
|
|
191
|
+
- **Agent Definition Config (RISE-010)** defines the agent config schema that frontmatter populates
|
|
192
|
+
- **Agent Prompt Templates (RISE-012)** handles the system prompt derived from markdown body
|
|
193
|
+
|
|
194
|
+
## Creative Advancement Scenarios
|
|
195
|
+
|
|
196
|
+
**Scenario 1 — Self-Documenting Agents:**
|
|
197
|
+
A team creates `.mia-code/reviewer.md` that describes their review standards in prose and configures the reviewer agent in frontmatter. New team members read the file to understand review policy AND mia-code uses it to configure the agent. One file, two purposes, zero drift.
|
|
198
|
+
|
|
199
|
+
**Scenario 2 — Iterating on Agent Behavior:**
|
|
200
|
+
A developer tweaks an agent's system prompt by editing the markdown body of `.mia-code/planner.md`. They save the file, and mia-code automatically reloads the config. They test the agent immediately without restarting. The markdown file is their development environment for agent prompts.
|
|
201
|
+
|
|
202
|
+
**Scenario 3 — Project Onboarding Document:**
|
|
203
|
+
A project's `AGENTS.md` lists all available agents with descriptions and configurations. The file serves as onboarding documentation ("here are the agents available in this project") and as the actual agent configuration. `cat AGENTS.md` tells a human everything; mia-code reads the same file for configuration.
|
|
204
|
+
|
|
205
|
+
**Scenario 4 — Restricted Agent for Junior Developers:**
|
|
206
|
+
A team lead creates `.mia-code/safe-coder.md` with frontmatter that denies bash and file_delete permissions. The markdown body instructs the agent to always explain its reasoning before making changes. Junior developers use this agent for guardrailed coding assistance.
|
|
@@ -0,0 +1,232 @@
|
|
|
1
|
+
# RISE-070: Managed Config Directory
|
|
2
|
+
|
|
3
|
+
> RISE Framework Specification — Borrowed from OpenCode for mia-code
|
|
4
|
+
> Document: rispecs/borrowed_from_opencode/070-managed-config-directory.rispec.md
|
|
5
|
+
|
|
6
|
+
## Creative Intent
|
|
7
|
+
|
|
8
|
+
mia-code respects system-wide managed configuration that IT administrators deploy to enforce organizational policies. When an enterprise installs mia-code across developer machines, a managed config directory provides the final word on what the tool can and cannot do — overriding all user, project, and environment settings. This is the "IT department" layer: cost limits enforced, unapproved providers blocked, security policies applied, all without trusting individual developers to configure correctly.
|
|
9
|
+
|
|
10
|
+
## Structural Tension Analysis
|
|
11
|
+
|
|
12
|
+
**Current Reality:**
|
|
13
|
+
- mia-code configuration is entirely user-controlled — there is no mechanism for administrators to enforce policies
|
|
14
|
+
- An organization cannot prevent developers from using unapproved AI providers or models
|
|
15
|
+
- Cost limits, if they exist, can be overridden by any developer in their personal config
|
|
16
|
+
- Security policies (permission rulesets, tool restrictions) are advisory — developers can always relax them
|
|
17
|
+
- There is no separation between "configurable preferences" and "enforced policies"
|
|
18
|
+
- Enterprise deployment of mia-code requires trusting every developer to follow configuration guidelines
|
|
19
|
+
|
|
20
|
+
**Desired State:**
|
|
21
|
+
- A managed config directory at a system-level path contains administrator-controlled config
|
|
22
|
+
- Managed config has the HIGHEST precedence — it overrides all other config sources
|
|
23
|
+
- Users cannot override managed settings, even with CLI flags or environment variables
|
|
24
|
+
- The managed config is visible but not editable through mia-code's CLI
|
|
25
|
+
- Use cases include: blocking providers, enforcing permissions, setting cost limits, requiring authentication
|
|
26
|
+
- The managed directory is writable only by system administrators (root/admin)
|
|
27
|
+
|
|
28
|
+
## Desired Outcome Definition
|
|
29
|
+
|
|
30
|
+
When a `managed-config.json` file exists in the system-wide managed config directory, its settings override all other configuration sources. Users can view managed settings via `/config --managed` but cannot modify them. Managed config is the final layer in the config precedence hierarchy.
|
|
31
|
+
|
|
32
|
+
## Natural Language Functional Description
|
|
33
|
+
|
|
34
|
+
### Managed Config Directory Paths
|
|
35
|
+
|
|
36
|
+
The managed config directory location is platform-specific:
|
|
37
|
+
|
|
38
|
+
| Platform | Path |
|
|
39
|
+
|----------|------|
|
|
40
|
+
| Linux | `/etc/mia-code/` |
|
|
41
|
+
| macOS | `/Library/Application Support/mia-code/` |
|
|
42
|
+
| Windows | `%ProgramData%\mia-code\` |
|
|
43
|
+
|
|
44
|
+
The primary config file is `managed-config.json` (or `managed-config.jsonc`) within this directory.
|
|
45
|
+
|
|
46
|
+
### Precedence
|
|
47
|
+
|
|
48
|
+
Managed config has the absolute highest precedence:
|
|
49
|
+
|
|
50
|
+
```
|
|
51
|
+
Built-in defaults (lowest)
|
|
52
|
+
↓
|
|
53
|
+
Remote org config
|
|
54
|
+
↓
|
|
55
|
+
Global config
|
|
56
|
+
↓
|
|
57
|
+
Environment variables
|
|
58
|
+
↓
|
|
59
|
+
Project config
|
|
60
|
+
↓
|
|
61
|
+
Markdown frontmatter
|
|
62
|
+
↓
|
|
63
|
+
CLI flags
|
|
64
|
+
↓
|
|
65
|
+
Inline config
|
|
66
|
+
↓
|
|
67
|
+
Managed config (HIGHEST) ← this level
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
Values in managed config cannot be overridden by any other source. Period.
|
|
71
|
+
|
|
72
|
+
### Config Schema
|
|
73
|
+
|
|
74
|
+
Managed config uses the same schema as regular config, with additional policy-specific fields:
|
|
75
|
+
|
|
76
|
+
```jsonc
|
|
77
|
+
{
|
|
78
|
+
// Organization identity
|
|
79
|
+
"managedBy": "Acme Corp IT Department",
|
|
80
|
+
"policyVersion": "2025-01-15",
|
|
81
|
+
"policyUrl": "https://wiki.acme.com/mia-code-policy",
|
|
82
|
+
|
|
83
|
+
// Enforce specific provider
|
|
84
|
+
"allowedProviders": ["anthropic"],
|
|
85
|
+
"blockedProviders": ["openai", "google"],
|
|
86
|
+
|
|
87
|
+
// Enforce model restrictions
|
|
88
|
+
"allowedModels": ["claude-sonnet-4", "claude-haiku-4"],
|
|
89
|
+
|
|
90
|
+
// Cost controls
|
|
91
|
+
"costLimits": {
|
|
92
|
+
"perSession": 5.00, // USD per session
|
|
93
|
+
"perDay": 50.00, // USD per day
|
|
94
|
+
"perMonth": 500.00 // USD per month
|
|
95
|
+
},
|
|
96
|
+
|
|
97
|
+
// Enforce permission policies
|
|
98
|
+
"permissions": {
|
|
99
|
+
"bash": "ask", // Users cannot set bash to "allow"
|
|
100
|
+
"file_delete": "deny", // File deletion is always denied
|
|
101
|
+
"network": "ask" // Network access requires approval
|
|
102
|
+
},
|
|
103
|
+
|
|
104
|
+
// Require authentication
|
|
105
|
+
"requireAuth": true,
|
|
106
|
+
"authProvider": "https://sso.acme.com/oauth",
|
|
107
|
+
|
|
108
|
+
// Telemetry and logging
|
|
109
|
+
"telemetry": {
|
|
110
|
+
"enabled": true,
|
|
111
|
+
"endpoint": "https://telemetry.acme.com/mia-code"
|
|
112
|
+
},
|
|
113
|
+
|
|
114
|
+
// Block certain tool capabilities
|
|
115
|
+
"blockedTools": ["bash_unrestricted"],
|
|
116
|
+
|
|
117
|
+
// Custom message shown to users
|
|
118
|
+
"policyMessage": "mia-code is managed by Acme Corp IT. Contact it-help@acme.com for policy questions."
|
|
119
|
+
}
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
### Override Prevention
|
|
123
|
+
|
|
124
|
+
Managed settings are enforced through a lockdown mechanism:
|
|
125
|
+
|
|
126
|
+
1. During config merge, managed values are applied last
|
|
127
|
+
2. After merge, managed values are marked as "locked"
|
|
128
|
+
3. Any attempt to override a locked value (via CLI flag, env var, or config file) is silently ignored
|
|
129
|
+
4. The attempted override is logged (debug level) for troubleshooting
|
|
130
|
+
|
|
131
|
+
Example: If managed config sets `"permissions": {"bash": "ask"}`, a developer's project config with `"permissions": {"bash": "allow"}` is ignored for the `bash` key. Other permission keys the developer sets are still respected.
|
|
132
|
+
|
|
133
|
+
### Allowlists and Blocklists
|
|
134
|
+
|
|
135
|
+
**Provider restrictions:**
|
|
136
|
+
- `allowedProviders`: only these providers can be used (empty = no restriction)
|
|
137
|
+
- `blockedProviders`: these providers are blocked regardless of user config
|
|
138
|
+
- If a user's config specifies a blocked provider, it is silently removed from the merged config
|
|
139
|
+
|
|
140
|
+
**Model restrictions:**
|
|
141
|
+
- `allowedModels`: only these models can be used
|
|
142
|
+
- If a user specifies a non-allowed model, mia-code falls back to the first allowed model and warns
|
|
143
|
+
|
|
144
|
+
### Cost Controls
|
|
145
|
+
|
|
146
|
+
Managed cost limits are enforced by the agent execution layer:
|
|
147
|
+
- `perSession`: when estimated session cost exceeds this, the agent stops and informs the user
|
|
148
|
+
- `perDay`: daily aggregate across all sessions; new sessions are blocked when exceeded
|
|
149
|
+
- `perMonth`: monthly aggregate; new sessions are blocked when exceeded
|
|
150
|
+
- Cost tracking is approximate (based on token counts and model pricing)
|
|
151
|
+
- Users see their remaining budget in the status bar (if TUI is active)
|
|
152
|
+
|
|
153
|
+
### User Visibility
|
|
154
|
+
|
|
155
|
+
Users can inspect managed config but not modify it:
|
|
156
|
+
|
|
157
|
+
```
|
|
158
|
+
$ mia-code /config --managed
|
|
159
|
+
|
|
160
|
+
Managed Configuration (set by Acme Corp IT Department)
|
|
161
|
+
Policy version: 2025-01-15
|
|
162
|
+
Policy details: https://wiki.acme.com/mia-code-policy
|
|
163
|
+
|
|
164
|
+
allowedProviders: ["anthropic"] [LOCKED]
|
|
165
|
+
blockedProviders: ["openai", "google"] [LOCKED]
|
|
166
|
+
permissions.bash: "ask" [LOCKED]
|
|
167
|
+
permissions.file_delete: "deny" [LOCKED]
|
|
168
|
+
costLimits.perDay: $50.00 [LOCKED]
|
|
169
|
+
|
|
170
|
+
These settings cannot be overridden. Contact it-help@acme.com for questions.
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
The `[LOCKED]` indicator makes it clear which values are managed.
|
|
174
|
+
|
|
175
|
+
### Policy Message
|
|
176
|
+
|
|
177
|
+
If `policyMessage` is set in managed config, it is displayed:
|
|
178
|
+
- On first run after managed config is installed or updated
|
|
179
|
+
- When a user attempts to override a managed setting
|
|
180
|
+
- Via `/config --managed` command
|
|
181
|
+
- In the TUI status bar (abbreviated) when managed policies are active
|
|
182
|
+
|
|
183
|
+
### Installation and Deployment
|
|
184
|
+
|
|
185
|
+
Managed config is typically deployed via:
|
|
186
|
+
- System configuration management tools (Ansible, Puppet, Chef, GPO)
|
|
187
|
+
- MDM (Mobile Device Management) for macOS/Windows
|
|
188
|
+
- Package post-install scripts
|
|
189
|
+
- Manual placement by system administrators
|
|
190
|
+
|
|
191
|
+
The managed directory and its files should be:
|
|
192
|
+
- Owned by root/Administrator
|
|
193
|
+
- Readable by all users
|
|
194
|
+
- Writable only by root/Administrator
|
|
195
|
+
- Not modifiable by the mia-code process itself
|
|
196
|
+
|
|
197
|
+
### Absence Behavior
|
|
198
|
+
|
|
199
|
+
When no managed config directory or file exists:
|
|
200
|
+
- This precedence level contributes nothing to the merge
|
|
201
|
+
- No warnings are emitted (most installations won't have managed config)
|
|
202
|
+
- The config system behaves as if this level doesn't exist
|
|
203
|
+
|
|
204
|
+
### Update Detection
|
|
205
|
+
|
|
206
|
+
mia-code checks for managed config changes:
|
|
207
|
+
- On every startup
|
|
208
|
+
- The file modification time is compared against the last-read timestamp
|
|
209
|
+
- If the file has changed, config is reloaded and a notification appears
|
|
210
|
+
- File watching (inotify/FSEvents) is not used for managed config (startup check is sufficient)
|
|
211
|
+
|
|
212
|
+
## Supporting Structures
|
|
213
|
+
|
|
214
|
+
- **Multi-Level Config (RISE-064)** defines the precedence hierarchy where managed config sits at the top
|
|
215
|
+
- **Config Deep Merging (RISE-067)** applies managed config as the final merge layer
|
|
216
|
+
- **JSONC Config (RISE-065)** parses the managed config file with comment support
|
|
217
|
+
- **Remote Org Config (RISE-068)** provides a lower-precedence organizational layer that managed config can override
|
|
218
|
+
- **Agent Permission Rulesets (RISE-011)** defines the permission schema that managed config enforces
|
|
219
|
+
|
|
220
|
+
## Creative Advancement Scenarios
|
|
221
|
+
|
|
222
|
+
**Scenario 1 — Enterprise Security Lockdown:**
|
|
223
|
+
Acme Corp's security team deploys managed config via Ansible to all developer machines. The config blocks OpenAI (data residency concerns), enforces "ask" mode for all bash commands, and sets a $50/day cost limit. Developers can still choose between allowed Claude models and customize non-security settings freely.
|
|
224
|
+
|
|
225
|
+
**Scenario 2 — Compliance Audit:**
|
|
226
|
+
During a compliance audit, the IT team points auditors to `/etc/mia-code/managed-config.json` on any developer machine. The file documents exactly what policies are enforced, with the `policyVersion` and `policyUrl` fields providing traceability. Auditors verify that the managed config matches the organization's AI usage policy.
|
|
227
|
+
|
|
228
|
+
**Scenario 3 — Developer Experience with Guardrails:**
|
|
229
|
+
A developer tries to set `"permissions": {"bash": "allow"}` in their project config to speed up a scripting session. mia-code silently ignores the override (managed policy requires "ask"). The developer sees the permission prompt and understands — the status bar shows "Managed policy active." They can still work effectively, just with an approval step for bash commands.
|
|
230
|
+
|
|
231
|
+
**Scenario 4 — Policy Rollout:**
|
|
232
|
+
Acme Corp decides to allow Google models in addition to Anthropic. IT updates the managed config and pushes it via their configuration management tool. On next startup, every developer's mia-code picks up the change. No individual action required — the policy propagates automatically.
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
# RISE-071: Plugin Architecture
|
|
2
|
+
|
|
3
|
+
> RISE Framework Specification — Borrowed from OpenCode for mia-code
|
|
4
|
+
> Document: rispecs/borrowed_from_opencode/071-plugin-architecture.rispec.md
|
|
5
|
+
|
|
6
|
+
## Creative Intent
|
|
7
|
+
|
|
8
|
+
mia-code becomes an extensible platform where third-party code augments agent capabilities without modifying the core. Developers define plugins that introduce new tools, commands, authentication providers, and behavioral modifications — transforming mia-code from a closed system into an ecosystem that evolves through community contribution.
|
|
9
|
+
|
|
10
|
+
## Structural Tension Analysis
|
|
11
|
+
|
|
12
|
+
**Current Reality:**
|
|
13
|
+
- mia-code has no extension mechanism — all tools, commands, and behaviors are hardcoded in the core
|
|
14
|
+
- Adding a new tool requires modifying source files, rebuilding, and redeploying
|
|
15
|
+
- Users cannot customize agent behavior beyond configuration flags
|
|
16
|
+
- Integration with project-specific tooling (linters, deployers, internal APIs) requires forking the codebase
|
|
17
|
+
- No namespace isolation exists — all code shares global scope
|
|
18
|
+
- Community contributions require pull requests into the main repository
|
|
19
|
+
|
|
20
|
+
**Desired State:**
|
|
21
|
+
- Plugins extend mia-code through a well-defined interface without touching core code
|
|
22
|
+
- Three plugin sources coexist: built-in (compiled), NPM packages (installed), and local files (project-specific)
|
|
23
|
+
- Each plugin declares its capabilities through a typed manifest: name, version, hooks, tools, commands
|
|
24
|
+
- Plugin lifecycle is managed: discover → load → initialize → active → dispose
|
|
25
|
+
- Plugin failures are isolated — a broken plugin is logged and disabled, never crashing the host
|
|
26
|
+
- Configuration is declarative: a single `plugin` array in `mia-code.json` controls what loads
|
|
27
|
+
|
|
28
|
+
## Desired Outcome Definition
|
|
29
|
+
|
|
30
|
+
A developer adds `"plugin": ["mia-code-plugin-eslint", "./plugins/my-custom-tool.js"]` to their `mia-code.json`. On next launch, mia-code discovers both plugins, loads them, and initializes their declared tools and commands. The ESLint plugin adds a `lint` tool the agent can invoke. The local plugin adds a `deploy` command. Both operate within their namespaces. If either throws during initialization, mia-code logs the error and continues without it.
|
|
31
|
+
|
|
32
|
+
## Natural Language Functional Description
|
|
33
|
+
|
|
34
|
+
### Plugin Interface
|
|
35
|
+
|
|
36
|
+
Every plugin exports an object conforming to the `PluginDef` interface:
|
|
37
|
+
|
|
38
|
+
```typescript
|
|
39
|
+
interface PluginDef {
|
|
40
|
+
name: string;
|
|
41
|
+
version: string;
|
|
42
|
+
hooks?: Record<string, HookHandler>;
|
|
43
|
+
tool?: Record<string, ToolDef>;
|
|
44
|
+
command?: Record<string, CommandDef>;
|
|
45
|
+
init?: (context: PluginContext) => Promise<void>;
|
|
46
|
+
dispose?: () => Promise<void>;
|
|
47
|
+
}
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
The `name` field serves as the plugin's namespace. Tools registered by plugin `"acme"` appear as `acme.lint` internally, avoiding collisions with core tools or other plugins.
|
|
51
|
+
|
|
52
|
+
### Plugin Sources
|
|
53
|
+
|
|
54
|
+
1. **Built-in plugins** — compiled into the mia-code distribution. These provide core tools (file read/write, bash, git) as plugins themselves, dogfooding the architecture.
|
|
55
|
+
2. **NPM packages** — installed from the registry by name. Package names should follow the convention `mia-code-plugin-{name}` but any valid package exporting a `PluginDef` works.
|
|
56
|
+
3. **Local files** — JavaScript or TypeScript files in `.mia-code/plugins/` or referenced by relative path in config. These support rapid prototyping without publishing.
|
|
57
|
+
|
|
58
|
+
### Plugin Lifecycle
|
|
59
|
+
|
|
60
|
+
- **Discover:** On startup, read the `plugin` array from merged configuration. Resolve each entry to a module path (npm package name → `node_modules/`, relative path → filesystem, built-in → internal).
|
|
61
|
+
- **Load:** `require()` or dynamic `import()` the module. Validate the export against `PluginDef` schema using Zod.
|
|
62
|
+
- **Initialize:** Call `init(context)` if defined. The context provides access to logging, configuration, and the event bus.
|
|
63
|
+
- **Active:** Register declared tools, commands, and hooks into the runtime registry.
|
|
64
|
+
- **Dispose:** On shutdown, call `dispose()` in reverse initialization order. Release resources, close connections.
|
|
65
|
+
|
|
66
|
+
### Plugin Configuration
|
|
67
|
+
|
|
68
|
+
In `mia-code.json` at project or global level:
|
|
69
|
+
|
|
70
|
+
```json
|
|
71
|
+
{
|
|
72
|
+
"plugin": [
|
|
73
|
+
"mia-code-plugin-eslint",
|
|
74
|
+
"mia-code-plugin-docker",
|
|
75
|
+
"./plugins/deploy-tool.js"
|
|
76
|
+
]
|
|
77
|
+
}
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
### Error Isolation
|
|
81
|
+
|
|
82
|
+
Plugin code runs in the same Node.js process but all plugin entry points are wrapped in try/catch. If `init()` throws, the plugin is marked `failed` and its tools/commands are not registered. If a tool execution throws, the error is returned as a tool result (not a process crash). A `plugin.error` event is published to the event bus for observability.
|
|
83
|
+
|
|
84
|
+
## Supporting Structures
|
|
85
|
+
|
|
86
|
+
- **Event Bus (RISE-002)** publishes plugin lifecycle events (`plugin.loaded`, `plugin.failed`, `plugin.disposed`)
|
|
87
|
+
- **Hook System (RISE-072)** defines the extension points plugins attach to
|
|
88
|
+
- **Auto-Install (RISE-073)** handles NPM plugin resolution and installation
|
|
89
|
+
- **Permission System (RISE-074)** governs what plugins are allowed to do
|
|
90
|
+
- **Multi-Level Config (RISE-064)** merges plugin arrays across global, project, and local config layers
|
|
91
|
+
|
|
92
|
+
## Creative Advancement Scenarios
|
|
93
|
+
|
|
94
|
+
**Scenario 1 — Project-Specific Tooling:**
|
|
95
|
+
A team creates `.mia-code/plugins/jira-tool.js` that exposes a `jira.create_ticket` tool. The agent can now create Jira tickets during code review sessions. The plugin reads API credentials from environment variables and formats ticket descriptions from session context.
|
|
96
|
+
|
|
97
|
+
**Scenario 2 — Community Plugin Ecosystem:**
|
|
98
|
+
A developer publishes `mia-code-plugin-terraform` to NPM. It adds `terraform.plan`, `terraform.apply`, and `terraform.validate` tools. Other developers install it with one config line. The plugin hooks into `tool.after` to automatically run `terraform fmt` after any file write to `.tf` files.
|
|
99
|
+
|
|
100
|
+
**Scenario 3 — Plugin Failure Isolation:**
|
|
101
|
+
A plugin's `init()` throws because its required API key is missing. mia-code logs: "Plugin 'acme-deploy' failed to initialize: ACME_API_KEY not set. Plugin disabled." All other plugins and core functionality continue normally. The developer sees the warning and can fix their environment.
|
|
102
|
+
|
|
103
|
+
**Scenario 4 — Built-in Tools as Plugins:**
|
|
104
|
+
Core tools like `file_read`, `file_write`, and `bash` are implemented as built-in plugins. This validates the plugin architecture against real workloads and ensures the interface is powerful enough for production use. A developer can even override a built-in tool by registering a plugin with the same tool name at higher priority.
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
# RISE-072: Plugin Hook System
|
|
2
|
+
|
|
3
|
+
> RISE Framework Specification — Borrowed from OpenCode for mia-code
|
|
4
|
+
> Document: rispecs/borrowed_from_opencode/072-plugin-hooks.rispec.md
|
|
5
|
+
|
|
6
|
+
## Creative Intent
|
|
7
|
+
|
|
8
|
+
Plugins gain the ability to intercept and reshape agent behavior at precisely defined extension points. Rather than replacing core logic wholesale, hooks allow surgical modification — transforming a system prompt, enriching tool output, injecting custom authentication — through a composable middleware pattern where multiple plugins cooperate without conflicts.
|
|
9
|
+
|
|
10
|
+
## Structural Tension Analysis
|
|
11
|
+
|
|
12
|
+
**Current Reality:**
|
|
13
|
+
- mia-code has no interception points — behavior flows linearly from input to LLM to tool to output
|
|
14
|
+
- Modifying agent behavior (e.g., adding context to every prompt) requires editing core source files
|
|
15
|
+
- No mechanism exists for multiple independent extensions to modify the same behavior
|
|
16
|
+
- Authentication is hardcoded per provider — adding a custom auth flow means changing provider code
|
|
17
|
+
- Permission checks are embedded inline — no external code can participate in access decisions
|
|
18
|
+
- Tool execution has no before/after lifecycle — no way to log, validate, or transform tool calls
|
|
19
|
+
|
|
20
|
+
**Desired State:**
|
|
21
|
+
- Named hook points exist at every significant boundary in the agent pipeline
|
|
22
|
+
- Plugins register handlers for specific hooks using a typed middleware signature
|
|
23
|
+
- Multiple plugins hooking the same point execute in registration order, each calling `next()` to continue
|
|
24
|
+
- Each hook point defines specific input/output types — handlers receive and return well-typed data
|
|
25
|
+
- Hooks can modify data (transform), observe data (pass-through), or short-circuit (skip `next()`)
|
|
26
|
+
- The hook system is the primary mechanism through which plugins influence agent behavior
|
|
27
|
+
|
|
28
|
+
## Desired Outcome Definition
|
|
29
|
+
|
|
30
|
+
A plugin registers a `chat.system.transform` hook that appends project-specific instructions to every system prompt. Another plugin registers `tool.before` to log all tool invocations. Both hooks fire at their respective points without interfering with each other. The system prompt hook modifies data and passes it along; the tool logging hook observes and calls `next()` unchanged.
|
|
31
|
+
|
|
32
|
+
## Natural Language Functional Description
|
|
33
|
+
|
|
34
|
+
### Hook Points
|
|
35
|
+
|
|
36
|
+
The following hook points are defined in the agent lifecycle:
|
|
37
|
+
|
|
38
|
+
| Hook | Fires When | Input | Output |
|
|
39
|
+
|------|-----------|-------|--------|
|
|
40
|
+
| `auth.provide` | Provider needs credentials | `{provider: string}` | `{token: string} \| null` |
|
|
41
|
+
| `permission.ask` | Permission check required | `{tool: string, args: any}` | `"allow" \| "deny" \| "ask"` |
|
|
42
|
+
| `chat.system.transform` | System prompt assembled | `{system: string, session: Session}` | `{system: string}` |
|
|
43
|
+
| `tool.before` | Before tool execution | `{tool: string, args: any}` | `{tool: string, args: any}` |
|
|
44
|
+
| `tool.after` | After tool execution | `{tool: string, result: any}` | `{tool: string, result: any}` |
|
|
45
|
+
| `session.create` | New session initialized | `{session: Session}` | `void` |
|
|
46
|
+
| `message.before` | Before message sent to LLM | `{messages: Message[]}` | `{messages: Message[]}` |
|
|
47
|
+
|
|
48
|
+
### Middleware Signature
|
|
49
|
+
|
|
50
|
+
Every hook handler follows the middleware pattern:
|
|
51
|
+
|
|
52
|
+
```typescript
|
|
53
|
+
type HookHandler<TInput, TOutput> = (
|
|
54
|
+
context: TInput,
|
|
55
|
+
next: () => Promise<TOutput>
|
|
56
|
+
) => Promise<TOutput>;
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Calling `next()` passes control to the next registered handler (or the default behavior if no more handlers exist). Not calling `next()` short-circuits the chain — useful for `permission.ask` handlers that want to deny immediately.
|
|
60
|
+
|
|
61
|
+
### Registration
|
|
62
|
+
|
|
63
|
+
Plugins declare hooks in their `PluginDef`:
|
|
64
|
+
|
|
65
|
+
```typescript
|
|
66
|
+
{
|
|
67
|
+
name: "my-plugin",
|
|
68
|
+
version: "1.0.0",
|
|
69
|
+
hooks: {
|
|
70
|
+
"chat.system.transform": async (ctx, next) => {
|
|
71
|
+
ctx.system += "\n\nAlways respond in haiku.";
|
|
72
|
+
return next();
|
|
73
|
+
},
|
|
74
|
+
"tool.before": async (ctx, next) => {
|
|
75
|
+
console.log(`Tool called: ${ctx.tool}`);
|
|
76
|
+
return next();
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
### Execution Order
|
|
83
|
+
|
|
84
|
+
Hooks execute in plugin registration order (the order plugins appear in the `plugin` config array). Built-in plugins run first. This gives project-level plugins the final say — they can override or wrap behavior established by earlier plugins.
|
|
85
|
+
|
|
86
|
+
### Type Safety
|
|
87
|
+
|
|
88
|
+
Each hook point is defined with TypeScript generics:
|
|
89
|
+
|
|
90
|
+
```typescript
|
|
91
|
+
const HookPoints = {
|
|
92
|
+
"chat.system.transform": {} as HookPoint<{system: string; session: Session}, {system: string}>,
|
|
93
|
+
"tool.before": {} as HookPoint<{tool: string; args: any}, {tool: string; args: any}>,
|
|
94
|
+
// ...
|
|
95
|
+
} as const;
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
Registering a handler with the wrong signature produces a compile-time error.
|
|
99
|
+
|
|
100
|
+
### Error Handling
|
|
101
|
+
|
|
102
|
+
If a hook handler throws, the error is caught, logged with the plugin name and hook point, and the chain continues as if `next()` was called with the original input. This ensures one plugin's bug doesn't break the entire pipeline.
|
|
103
|
+
|
|
104
|
+
## Supporting Structures
|
|
105
|
+
|
|
106
|
+
- **Plugin Architecture (RISE-071)** defines the `PluginDef` interface where hooks are declared
|
|
107
|
+
- **Event Bus (RISE-002)** publishes `hook.error` events when handlers fail
|
|
108
|
+
- **Permission System (RISE-074)** uses hooks as its extension mechanism via `permission.ask`
|
|
109
|
+
- **Structured Logging (RISE-007)** records hook execution timing and errors
|
|
110
|
+
|
|
111
|
+
## Creative Advancement Scenarios
|
|
112
|
+
|
|
113
|
+
**Scenario 1 — Custom Authentication Provider:**
|
|
114
|
+
A company plugin registers `auth.provide` to return tokens from their internal OAuth service. When the agent needs credentials for a custom LLM endpoint, the hook fires, the plugin exchanges a refresh token for an access token, and returns it. No core auth code was modified.
|
|
115
|
+
|
|
116
|
+
**Scenario 2 — System Prompt Enrichment:**
|
|
117
|
+
A plugin hooks `chat.system.transform` to append the project's coding standards document to every system prompt. The agent consistently follows project conventions because the standards are always in context. The plugin reads the standards file once at init and caches it.
|
|
118
|
+
|
|
119
|
+
**Scenario 3 — Tool Call Auditing:**
|
|
120
|
+
A compliance plugin hooks `tool.before` and `tool.after` to log every tool invocation to an external audit service. It records what tool was called, with what arguments, what it returned, and how long it took. The plugin never modifies data — it just observes and forwards via `next()`.
|
|
121
|
+
|
|
122
|
+
**Scenario 4 — Permission Gate:**
|
|
123
|
+
A security plugin hooks `permission.ask` to enforce a strict allowlist. Only `file_read`, `file_write`, and `grep` are permitted — all other tools return `"deny"` without calling `next()`. The agent operates in a restricted sandbox defined entirely by plugin configuration.
|