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,108 @@
|
|
|
1
|
+
# RISE-058: Rich Terminal User Interface
|
|
2
|
+
|
|
3
|
+
> RISE Framework Specification — Borrowed from OpenCode for mia-code
|
|
4
|
+
> Document: rispecs/borrowed_from_opencode/058-rich-tui.rispec.md
|
|
5
|
+
|
|
6
|
+
## Creative Intent
|
|
7
|
+
|
|
8
|
+
mia-code replaces its basic readline-driven interface with a full-featured terminal user interface that treats the terminal as a spatial canvas. Users experience a structured layout — scrollable conversation history, persistent status bar, distinct message bubbles — that makes extended agent sessions legible and navigable. The TUI transforms the terminal from a scroll-only log into an application with panes, focus, and visual hierarchy.
|
|
9
|
+
|
|
10
|
+
## Structural Tension Analysis
|
|
11
|
+
|
|
12
|
+
**Current Reality:**
|
|
13
|
+
- mia-code uses basic readline for input, chalk for colors, and ora for spinners — everything scrolls linearly
|
|
14
|
+
- There is no separation between input area and output area; the input prompt scrolls with agent output
|
|
15
|
+
- Users cannot scroll back through conversation history without terminal scrollback (which mixes mia-code output with other terminal output)
|
|
16
|
+
- No status bar shows session context, active agent, mode, or cost
|
|
17
|
+
- Messages from user and assistant look similar — role distinction relies on text prefixes only
|
|
18
|
+
- Tool execution output is dumped inline with no visual containment or collapsibility
|
|
19
|
+
- The interface assumes infinite vertical scroll and never reclaims vertical space
|
|
20
|
+
|
|
21
|
+
**Desired State:**
|
|
22
|
+
- The terminal is divided into distinct panes: message history (scrollable), status bar (fixed), input area (fixed at bottom)
|
|
23
|
+
- Messages are rendered as visual bubbles with role indicators — user messages right-aligned or distinctly colored, assistant messages left-aligned
|
|
24
|
+
- Tool execution results appear in collapsible panels that show tool name and can be expanded/collapsed
|
|
25
|
+
- A persistent status bar shows: session title, active agent, current mode (plan/build), model name, and cumulative cost
|
|
26
|
+
- The user can scroll through conversation history independent of input focus
|
|
27
|
+
- The interface adapts to terminal width (minimum 80x24) and degrades gracefully in non-TTY environments
|
|
28
|
+
|
|
29
|
+
## Desired Outcome Definition
|
|
30
|
+
|
|
31
|
+
Running `mia-code` in a TTY terminal presents a split-pane layout. The top region shows scrollable message history with role-colored bubbles. The bottom region is a fixed input area that always has focus. A status bar separates them. Tool outputs appear as collapsible panels within the message flow. In non-TTY environments (pipes, CI), mia-code falls back to basic line-by-line output.
|
|
32
|
+
|
|
33
|
+
## Natural Language Functional Description
|
|
34
|
+
|
|
35
|
+
### Layout Structure
|
|
36
|
+
|
|
37
|
+
The TUI divides the terminal into three vertical regions:
|
|
38
|
+
|
|
39
|
+
1. **Message Pane** — occupies the majority of vertical space. Displays conversation history as styled message blocks. Each message shows a role indicator (🧑 User, 🤖 Assistant, 🔧 Tool). Messages wrap to terminal width with padding. The pane is independently scrollable via keyboard (Page Up/Down, mouse wheel if supported).
|
|
40
|
+
|
|
41
|
+
2. **Status Bar** — a single fixed line between message pane and input area. Displays: session name or ID, active agent name, current mode (plan/build), model identifier, token count or cost estimate. Updated in real-time as the session progresses.
|
|
42
|
+
|
|
43
|
+
3. **Input Area** — fixed at the bottom, 1-5 lines tall (auto-expanding for multiline input). Always captures keyboard input. Supports Ctrl+J for newline within input. Enter submits. Shows placeholder text when empty.
|
|
44
|
+
|
|
45
|
+
### Message Rendering
|
|
46
|
+
|
|
47
|
+
Each message renders as a block with:
|
|
48
|
+
- Role icon and label (colored per role)
|
|
49
|
+
- Timestamp (dim, right-aligned)
|
|
50
|
+
- Content body with markdown rendering (headers, bold, lists, code blocks)
|
|
51
|
+
- Tool call results in bordered sub-panels with tool name header
|
|
52
|
+
|
|
53
|
+
### Tool Execution Panels
|
|
54
|
+
|
|
55
|
+
When a tool executes, a panel appears in the message flow:
|
|
56
|
+
- Header line: tool name + status (running/complete/failed) + elapsed time
|
|
57
|
+
- Body: tool output, initially collapsed for long outputs (>10 lines)
|
|
58
|
+
- Toggle: keyboard shortcut or click to expand/collapse
|
|
59
|
+
- Running tools show a spinner in the header
|
|
60
|
+
|
|
61
|
+
### Focus Management
|
|
62
|
+
|
|
63
|
+
- Input area has focus by default — all typing goes to input
|
|
64
|
+
- Ctrl+Up or Page Up switches focus to message pane for scrolling
|
|
65
|
+
- Escape or typing any character returns focus to input
|
|
66
|
+
- Focus indicator: subtle border highlight on the active pane
|
|
67
|
+
|
|
68
|
+
### Color Theming
|
|
69
|
+
|
|
70
|
+
Themes are defined as JSON objects mapping semantic roles to terminal colors:
|
|
71
|
+
- `userMessage`, `assistantMessage`, `toolPanel`, `statusBar`, `inputBorder`, `error`, `warning`
|
|
72
|
+
- Built-in themes: `dark` (default), `light`, `monochrome`
|
|
73
|
+
- Custom themes loadable from config: `{"theme": "dark"}` or `{"theme": {"userMessage": "blue", ...}}`
|
|
74
|
+
|
|
75
|
+
### Responsive Behavior
|
|
76
|
+
|
|
77
|
+
- At widths below 80 columns: status bar truncates, message padding reduces
|
|
78
|
+
- At widths below 40 columns: falls back to basic linear mode
|
|
79
|
+
- Terminal resize events trigger re-render of all visible content
|
|
80
|
+
- Minimum supported size: 80 columns × 24 rows
|
|
81
|
+
|
|
82
|
+
### Graceful Degradation
|
|
83
|
+
|
|
84
|
+
- Non-TTY (piped stdin/stdout): plain text output, no colors, no layout
|
|
85
|
+
- Dumb terminals (TERM=dumb): basic ANSI colors, no cursor positioning
|
|
86
|
+
- Screen readers: message content emitted as plain text blocks
|
|
87
|
+
|
|
88
|
+
## Supporting Structures
|
|
89
|
+
|
|
90
|
+
- **Streaming Display (RISE-059)** renders agent responses progressively within the message pane
|
|
91
|
+
- **Permission Prompts (RISE-060)** display inline in the input area as modal prompts
|
|
92
|
+
- **Keybinding System (RISE-063)** provides configurable shortcuts for all TUI interactions
|
|
93
|
+
- **Syntax Highlighting (RISE-062)** colors code blocks within messages
|
|
94
|
+
- **Session Navigation (RISE-061)** provides an overlay navigator within the TUI
|
|
95
|
+
|
|
96
|
+
## Creative Advancement Scenarios
|
|
97
|
+
|
|
98
|
+
**Scenario 1 — Extended Refactoring Session:**
|
|
99
|
+
A developer runs a 45-minute refactoring session. The TUI keeps the status bar showing elapsed time and token cost. When the agent executes 12 file edits, each appears as a collapsible tool panel. The developer scrolls back to review earlier edits while the agent continues working — input focus stays at the bottom, scroll focus is in the history pane.
|
|
100
|
+
|
|
101
|
+
**Scenario 2 — Narrow Terminal on a Laptop:**
|
|
102
|
+
A developer uses mia-code in a split-screen terminal at 90 columns. The TUI adapts: status bar shows abbreviated info, message padding narrows, but all functionality remains. They resize to full-width and the layout instantly reflows.
|
|
103
|
+
|
|
104
|
+
**Scenario 3 — CI Pipeline with No TUI:**
|
|
105
|
+
A CI script pipes a prompt to mia-code: `echo "Review this PR" | mia-code`. The TUI detects non-TTY and emits plain text. No escape sequences, no cursor positioning. The output is clean for log capture.
|
|
106
|
+
|
|
107
|
+
**Scenario 4 — Custom Theme for Accessibility:**
|
|
108
|
+
A developer with color vision differences creates a custom theme in their config that uses high-contrast colors and distinct patterns (bold, underline) instead of relying solely on color. They set `{"theme": {"userMessage": "bold white", "assistantMessage": "underline cyan"}}` and every session uses their preferred visual style.
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
# RISE-059: Streaming Display
|
|
2
|
+
|
|
3
|
+
> RISE Framework Specification — Borrowed from OpenCode for mia-code
|
|
4
|
+
> Document: rispecs/borrowed_from_opencode/059-streaming-display.rispec.md
|
|
5
|
+
|
|
6
|
+
## Creative Intent
|
|
7
|
+
|
|
8
|
+
mia-code renders agent responses as they arrive, token by token and chunk by chunk, creating a fluid, typewriter-like experience that keeps the developer engaged and informed. Rather than waiting for a complete response to appear as a monolithic block, the streaming display reveals the agent's thinking in real-time — making latency invisible and giving developers the ability to interrupt early if the response heads in the wrong direction.
|
|
9
|
+
|
|
10
|
+
## Structural Tension Analysis
|
|
11
|
+
|
|
12
|
+
**Current Reality:**
|
|
13
|
+
- Agent responses arrive as complete blocks after the full generation finishes — developers stare at an ora spinner
|
|
14
|
+
- There is no visual feedback during generation beyond "thinking..." or a spinner animation
|
|
15
|
+
- Tool call results appear all at once after execution completes
|
|
16
|
+
- Code blocks in responses are rendered only after the entire response is assembled
|
|
17
|
+
- Markdown formatting (headers, bold, lists) is applied post-hoc to completed text
|
|
18
|
+
- Ctrl+C during generation kills the entire process rather than gracefully stopping generation
|
|
19
|
+
- Network latency and generation time are indistinguishable to the user
|
|
20
|
+
|
|
21
|
+
**Desired State:**
|
|
22
|
+
- Text appears character-by-character or chunk-by-chunk as the LLM generates it
|
|
23
|
+
- Tool calls are announced immediately when the agent decides to call them, with a spinner during execution
|
|
24
|
+
- Code blocks receive progressive syntax highlighting as content streams in
|
|
25
|
+
- Markdown is rendered incrementally — a `#` becomes a header as soon as the line completes
|
|
26
|
+
- Ctrl+C stops generation cleanly, preserving the partial response in the conversation
|
|
27
|
+
- A blinking cursor at the stream's leading edge shows exactly where new content will appear
|
|
28
|
+
- Tool execution shows elapsed time on a live-updating spinner
|
|
29
|
+
|
|
30
|
+
## Desired Outcome Definition
|
|
31
|
+
|
|
32
|
+
When the agent generates a response, text appears in the message pane progressively. The user sees words forming in real-time. Tool calls show their name and a spinner while executing, then reveal results. The user can cancel mid-stream with Ctrl+C and the partial response is preserved. Code blocks are syntax-highlighted as they grow. The experience feels immediate and alive.
|
|
33
|
+
|
|
34
|
+
## Natural Language Functional Description
|
|
35
|
+
|
|
36
|
+
### Text Streaming
|
|
37
|
+
|
|
38
|
+
As the LLM produces tokens, the TUI appends them to the current message in the message pane:
|
|
39
|
+
|
|
40
|
+
1. Each chunk received from the provider API (typically 1-5 tokens) is immediately rendered
|
|
41
|
+
2. The message pane auto-scrolls to keep the latest content visible (unless the user has scrolled up)
|
|
42
|
+
3. A blinking cursor character (▊) appears at the end of the stream to indicate active generation
|
|
43
|
+
4. When generation completes, the cursor disappears and the message finalizes
|
|
44
|
+
|
|
45
|
+
### Markdown Progressive Rendering
|
|
46
|
+
|
|
47
|
+
Markdown elements are rendered as they become complete:
|
|
48
|
+
- **Headers**: `#` characters at line start render as styled headers when the line ends (newline received)
|
|
49
|
+
- **Bold/Italic**: opening `**` or `*` buffers until the closing marker arrives, then applies styling
|
|
50
|
+
- **Lists**: `-` or `1.` at line start indents and applies list styling at newline
|
|
51
|
+
- **Code fences**: opening ``` triggers code block mode; content inside receives syntax highlighting progressively; closing ``` ends the block
|
|
52
|
+
- **Links**: `[text](url)` renders as clickable (where terminal supports) once the closing `)` arrives
|
|
53
|
+
|
|
54
|
+
Incomplete markdown markers are shown as literal characters until their pair arrives.
|
|
55
|
+
|
|
56
|
+
### Tool Call Display
|
|
57
|
+
|
|
58
|
+
When the agent emits a tool call:
|
|
59
|
+
1. A tool panel header appears immediately: `🔧 [tool_name] ⏳ 0.0s`
|
|
60
|
+
2. The elapsed time updates every 100ms while the tool runs
|
|
61
|
+
3. Tool parameters are shown in a dimmed sub-line (truncated if long)
|
|
62
|
+
4. When the tool completes, the spinner becomes ✓ (success) or ✗ (failure)
|
|
63
|
+
5. Tool output is revealed progressively if the tool streams output (e.g., bash command output)
|
|
64
|
+
6. Long tool outputs (>10 lines) auto-collapse with a "show more" indicator
|
|
65
|
+
|
|
66
|
+
### Code Block Streaming
|
|
67
|
+
|
|
68
|
+
Code blocks receive special treatment during streaming:
|
|
69
|
+
1. When ` ``` ` with a language tag is detected, the block enters code mode
|
|
70
|
+
2. Each new line of code receives syntax highlighting as it arrives
|
|
71
|
+
3. The code block grows visually line by line with proper indentation preserved
|
|
72
|
+
4. Line numbers (if enabled) increment as lines arrive
|
|
73
|
+
5. When the closing ` ``` ` arrives, the block finalizes and a border renders around it
|
|
74
|
+
|
|
75
|
+
### Streaming Cancellation
|
|
76
|
+
|
|
77
|
+
Ctrl+C during active streaming:
|
|
78
|
+
1. Sends a cancellation signal to the provider API (aborts the HTTP request)
|
|
79
|
+
2. The partial response up to the cancellation point is preserved in the message history
|
|
80
|
+
3. A `[generation cancelled]` indicator appends to the partial message
|
|
81
|
+
4. The input area re-activates for the next user prompt
|
|
82
|
+
5. The cancelled message is stored in the session — it does not disappear
|
|
83
|
+
|
|
84
|
+
### Performance Considerations
|
|
85
|
+
|
|
86
|
+
- Rendering is throttled to 60fps maximum to avoid terminal flicker
|
|
87
|
+
- Large chunks (>1000 characters) are broken into smaller render batches
|
|
88
|
+
- Syntax highlighting runs asynchronously and may lag slightly behind raw text display
|
|
89
|
+
- The message pane only re-renders visible lines; off-screen content is not re-rendered until scrolled into view
|
|
90
|
+
|
|
91
|
+
### Network Latency Handling
|
|
92
|
+
|
|
93
|
+
- Time-to-first-token is tracked and displayed in debug mode
|
|
94
|
+
- If no chunk arrives within 5 seconds, a subtle "waiting for response..." indicator appears
|
|
95
|
+
- Connection drops during streaming show an error indicator and offer retry
|
|
96
|
+
|
|
97
|
+
## Supporting Structures
|
|
98
|
+
|
|
99
|
+
- **Rich TUI (RISE-058)** provides the message pane and layout where streaming content renders
|
|
100
|
+
- **Syntax Highlighting (RISE-062)** applies language-aware coloring to code blocks during streaming
|
|
101
|
+
- **Event Bus (RISE-002)** delivers streaming chunks from the agent process to the rendering layer
|
|
102
|
+
- **Client-Server Architecture (RISE-001)** enables SSE-based streaming for remote clients
|
|
103
|
+
|
|
104
|
+
## Creative Advancement Scenarios
|
|
105
|
+
|
|
106
|
+
**Scenario 1 — Watching Code Emerge:**
|
|
107
|
+
A developer asks the agent to implement a sorting algorithm. They watch the function definition appear line by line, with syntax highlighting applied as each line completes. They see the approach forming and can Ctrl+C if the agent picks the wrong algorithm, saving tokens and time.
|
|
108
|
+
|
|
109
|
+
**Scenario 2 — Long Explanation with Early Insight:**
|
|
110
|
+
The agent begins a detailed explanation. The developer reads the first paragraph as it streams, realizes they already understand, and presses Ctrl+C. The partial explanation is saved. They ask a follow-up question immediately.
|
|
111
|
+
|
|
112
|
+
**Scenario 3 — Multiple Tool Executions:**
|
|
113
|
+
The agent runs three tools in sequence. Each tool panel appears with its spinner, showing elapsed time. The developer sees `bash ✓ 2.3s`, then `file_read ✓ 0.1s`, then `bash ⏳ 15.2s` — they know the third command is slow and can decide whether to wait or cancel.
|
|
114
|
+
|
|
115
|
+
**Scenario 4 — Slow Network Connection:**
|
|
116
|
+
A developer on a train with spotty connectivity uses mia-code. The streaming display handles intermittent chunks gracefully — text appears in bursts rather than a steady flow, but no content is lost. The "waiting for response..." indicator appears during gaps, then disappears when chunks resume.
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
# RISE-060: Permission Prompts
|
|
2
|
+
|
|
3
|
+
> RISE Framework Specification — Borrowed from OpenCode for mia-code
|
|
4
|
+
> Document: rispecs/borrowed_from_opencode/060-permission-prompts.rispec.md
|
|
5
|
+
|
|
6
|
+
## Creative Intent
|
|
7
|
+
|
|
8
|
+
mia-code gives developers fine-grained, moment-of-decision control over what the agent is allowed to do. When a permission rule requires user approval, an interactive prompt appears that clearly describes the operation, its scope, and its risk level — and offers a range of responses from "allow once" to "never allow again." The developer stays in command without being overwhelmed by constant interruptions, because their choices accumulate into a personalized permission profile.
|
|
9
|
+
|
|
10
|
+
## Structural Tension Analysis
|
|
11
|
+
|
|
12
|
+
**Current Reality:**
|
|
13
|
+
- Permission rules in mia-code are either "allow" or "deny" — there is no interactive "ask" mode
|
|
14
|
+
- When an operation is denied, the agent simply cannot proceed; the user has no chance to override
|
|
15
|
+
- There is no visual distinction between low-risk operations (reading a file) and high-risk ones (running `rm -rf`)
|
|
16
|
+
- Permission decisions are static — set once in config, never refined through use
|
|
17
|
+
- The developer must anticipate every tool and command the agent might use and pre-configure permissions
|
|
18
|
+
- No mechanism exists to grant temporary session-scoped permissions
|
|
19
|
+
|
|
20
|
+
**Desired State:**
|
|
21
|
+
- Permission rules support an "ask" mode that pauses execution and prompts the user
|
|
22
|
+
- The prompt shows exactly what the agent wants to do: tool name, operation details, affected paths
|
|
23
|
+
- The user chooses from: allow once (y), deny once (n), always allow (a), never allow (v), session-only (s)
|
|
24
|
+
- "Always" and "never" choices persist to the config file, building the user's permission profile over time
|
|
25
|
+
- "Session" choices persist until the session ends, reducing prompt fatigue for repeated operations
|
|
26
|
+
- Destructive operations (file deletion, arbitrary bash) are visually distinguished from safe ones (file read)
|
|
27
|
+
|
|
28
|
+
## Desired Outcome Definition
|
|
29
|
+
|
|
30
|
+
When a permission rule is set to "ask" and the agent invokes that tool, execution pauses. A formatted prompt appears in the input area showing the tool name, the specific operation, and the affected resources. The user presses a single key to respond. Their choice is applied immediately and, for persistent choices, written to config.
|
|
31
|
+
|
|
32
|
+
## Natural Language Functional Description
|
|
33
|
+
|
|
34
|
+
### Prompt Display
|
|
35
|
+
|
|
36
|
+
When a permission check triggers an "ask" prompt, the TUI renders:
|
|
37
|
+
|
|
38
|
+
```
|
|
39
|
+
┌─ Permission Required ──────────────────────────────┐
|
|
40
|
+
│ Tool: bash │
|
|
41
|
+
│ Command: npm install express │
|
|
42
|
+
│ │
|
|
43
|
+
│ [y] Allow once [n] Deny once [a] Always allow │
|
|
44
|
+
│ [v] Never allow [s] Allow for session │
|
|
45
|
+
└─────────────────────────────────────────────────────┘
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
The prompt replaces the input area temporarily. All other input is blocked until the user responds.
|
|
49
|
+
|
|
50
|
+
### Operation Details
|
|
51
|
+
|
|
52
|
+
The prompt content varies by tool type:
|
|
53
|
+
|
|
54
|
+
- **bash**: Shows the exact command string. Destructive commands (rm, mv to /dev/null, chmod 777) render with a warning color (yellow/red background).
|
|
55
|
+
- **file_write / file_edit**: Shows the file path and operation type (create, overwrite, append, edit). If the file exists, notes "existing file will be modified."
|
|
56
|
+
- **file_read**: Shows the file path. Rendered in info color (blue/cyan) as low-risk.
|
|
57
|
+
- **glob / grep**: Shows the search pattern and scope directory. Low-risk, info color.
|
|
58
|
+
- **Custom tools**: Show tool name and all parameters in a readable format.
|
|
59
|
+
|
|
60
|
+
### Response Handling
|
|
61
|
+
|
|
62
|
+
Each response key triggers a specific action:
|
|
63
|
+
|
|
64
|
+
| Key | Action | Persistence |
|
|
65
|
+
|-----|--------|-------------|
|
|
66
|
+
| `y` | Allow this specific invocation to proceed | None — next invocation of same tool asks again |
|
|
67
|
+
| `n` | Deny this specific invocation | None — next invocation asks again |
|
|
68
|
+
| `a` | Allow and add a permanent rule to config | Writes to project or global config |
|
|
69
|
+
| `v` | Deny and add a permanent rule to config | Writes to project or global config |
|
|
70
|
+
| `s` | Allow for the remainder of this session | In-memory until session ends |
|
|
71
|
+
|
|
72
|
+
### Permanent Rule Writing
|
|
73
|
+
|
|
74
|
+
When the user presses `a` (always) or `v` (never):
|
|
75
|
+
1. The permission rule is added to the nearest writable config (project config if it exists, otherwise global)
|
|
76
|
+
2. The rule is scoped appropriately: bash commands match the command prefix, file operations match the path pattern
|
|
77
|
+
3. Example: allowing `npm install express` adds a rule like `{"bash": {"allow": ["npm install *"]}}`
|
|
78
|
+
4. The user sees a confirmation: "Rule added to .mia-code/config.json"
|
|
79
|
+
|
|
80
|
+
### Session-Scoped Permissions
|
|
81
|
+
|
|
82
|
+
When the user presses `s` (session):
|
|
83
|
+
1. The permission is stored in the session's in-memory permission cache
|
|
84
|
+
2. Subsequent identical tool invocations (same tool + same or similar parameters) are auto-allowed
|
|
85
|
+
3. The session permission cache is cleared when the session ends
|
|
86
|
+
4. Session permissions are not written to any file
|
|
87
|
+
|
|
88
|
+
### Risk-Level Visual Styling
|
|
89
|
+
|
|
90
|
+
Operations are categorized by risk level:
|
|
91
|
+
- **High risk** (red/yellow): bash commands with side effects, file deletion, network requests to unknown hosts
|
|
92
|
+
- **Medium risk** (yellow): file writes, file edits, directory creation
|
|
93
|
+
- **Low risk** (blue/cyan): file reads, grep, glob, LSP queries
|
|
94
|
+
- **Info** (dim): read-only operations that rarely need restriction
|
|
95
|
+
|
|
96
|
+
The prompt border color and icon reflect the risk level.
|
|
97
|
+
|
|
98
|
+
### Keyboard Shortcut Behavior
|
|
99
|
+
|
|
100
|
+
- Only the documented keys (y, n, a, v, s) are accepted — all other input is ignored
|
|
101
|
+
- Keys are case-insensitive (Y and y both work)
|
|
102
|
+
- No Enter key required — single keypress triggers the action immediately
|
|
103
|
+
- Escape is equivalent to `n` (deny once)
|
|
104
|
+
|
|
105
|
+
### Timeout Behavior
|
|
106
|
+
|
|
107
|
+
- If no response is received within a configurable timeout (default: 5 minutes), the operation is denied
|
|
108
|
+
- A countdown timer appears in the prompt after 30 seconds of inactivity
|
|
109
|
+
- Timeout behavior is configurable: `{"permissions": {"askTimeout": 300, "askTimeoutAction": "deny"}}`
|
|
110
|
+
|
|
111
|
+
## Supporting Structures
|
|
112
|
+
|
|
113
|
+
- **Agent Permission Rulesets (RISE-011)** define which operations require "ask" vs. "allow" vs. "deny"
|
|
114
|
+
- **Rich TUI (RISE-058)** provides the input area where permission prompts render
|
|
115
|
+
- **Multi-Level Config (RISE-064)** determines where permanent permission rules are written
|
|
116
|
+
- **Keybinding System (RISE-063)** ensures permission prompt keys don't conflict with other bindings
|
|
117
|
+
|
|
118
|
+
## Creative Advancement Scenarios
|
|
119
|
+
|
|
120
|
+
**Scenario 1 — First-Time Trust Building:**
|
|
121
|
+
A new user starts mia-code with default permissions set to "ask" for all bash commands. The agent wants to run `git status` — the prompt appears, the user presses `a` to always allow git commands. Over several sessions, they build a personalized permission profile: git always allowed, npm always allowed, rm always denied, everything else asks.
|
|
122
|
+
|
|
123
|
+
**Scenario 2 — Reviewing a Dangerous Command:**
|
|
124
|
+
The agent decides to run `find / -name "*.log" -delete`. The prompt appears with high-risk red styling. The user sees the full command, recognizes the danger, and presses `n`. The agent receives the denial and proposes a safer alternative.
|
|
125
|
+
|
|
126
|
+
**Scenario 3 — Repetitive File Edits:**
|
|
127
|
+
The agent needs to edit 15 files in a refactoring. After the first permission prompt for file_edit, the user presses `s` (session). The remaining 14 edits proceed without prompts. In the next session, permission prompts resume.
|
|
128
|
+
|
|
129
|
+
**Scenario 4 — Team Policy Enforcement:**
|
|
130
|
+
An organization's managed config sets bash commands to "ask" with no override. Even if a developer presses `a`, the managed policy prevents permanent allow rules for bash. The prompt shows: "Organization policy: bash permissions cannot be permanently allowed."
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
# RISE-061: Session Navigation
|
|
2
|
+
|
|
3
|
+
> RISE Framework Specification — Borrowed from OpenCode for mia-code
|
|
4
|
+
> Document: rispecs/borrowed_from_opencode/061-session-navigation.rispec.md
|
|
5
|
+
|
|
6
|
+
## Creative Intent
|
|
7
|
+
|
|
8
|
+
mia-code lets developers move between sessions as fluidly as switching browser tabs. A developer working across multiple features, debugging tasks, or code reviews can jump between sessions without losing context — each session preserved exactly where they left it. The session navigator is a first-class TUI component that makes session management a visual, interactive experience rather than a command-line chore.
|
|
9
|
+
|
|
10
|
+
## Structural Tension Analysis
|
|
11
|
+
|
|
12
|
+
**Current Reality:**
|
|
13
|
+
- Session switching requires knowing the session ID and using a command like `/session <id>`
|
|
14
|
+
- There is no visual overview of available sessions — developers must remember or list them manually
|
|
15
|
+
- Session metadata (last activity, message count, project) is not visible at a glance
|
|
16
|
+
- No search or filter capability exists for sessions
|
|
17
|
+
- Creating a new session requires exiting the current context or using a slash command
|
|
18
|
+
- There is no session preview — switching to a session is the only way to see its content
|
|
19
|
+
- Sessions cannot be archived or deleted from within the TUI
|
|
20
|
+
|
|
21
|
+
**Desired State:**
|
|
22
|
+
- A keyboard shortcut (Ctrl+S) opens an interactive session navigator overlay
|
|
23
|
+
- The navigator shows all sessions in a scrollable list with metadata: title, project, last activity, message count
|
|
24
|
+
- Arrow keys navigate, Enter selects, typing filters the list in real-time
|
|
25
|
+
- Hovering on a session shows a preview of the last few messages
|
|
26
|
+
- Sessions are grouped by project or date for easy browsing
|
|
27
|
+
- The navigator supports creating new sessions and archiving/deleting existing ones
|
|
28
|
+
- Recent sessions (last 5) appear at the top for quick access
|
|
29
|
+
|
|
30
|
+
## Desired Outcome Definition
|
|
31
|
+
|
|
32
|
+
Pressing Ctrl+S opens a modal overlay listing all sessions. The developer navigates with arrow keys, filters by typing, sees metadata and previews, and selects a session with Enter. The overlay closes and the TUI switches to the selected session. The developer can also create, archive, or delete sessions from the navigator.
|
|
33
|
+
|
|
34
|
+
## Natural Language Functional Description
|
|
35
|
+
|
|
36
|
+
### Navigator Overlay
|
|
37
|
+
|
|
38
|
+
The session navigator renders as a full-screen overlay on top of the message pane:
|
|
39
|
+
|
|
40
|
+
```
|
|
41
|
+
┌─ Sessions ──────────────────── Filter: _____________┐
|
|
42
|
+
│ │
|
|
43
|
+
│ ★ Recent │
|
|
44
|
+
│ ▸ Refactor auth module myapp 2m ago 47msg│
|
|
45
|
+
│ Debug payment webhook myapp 1h ago 12msg│
|
|
46
|
+
│ Review PR #234 lib 3h ago 8msg│
|
|
47
|
+
│ │
|
|
48
|
+
│ 📁 myapp │
|
|
49
|
+
│ Setup CI pipeline myapp 1d ago 23msg│
|
|
50
|
+
│ Database migration myapp 2d ago 31msg│
|
|
51
|
+
│ │
|
|
52
|
+
│ 📁 lib │
|
|
53
|
+
│ Add streaming support lib 1d ago 55msg│
|
|
54
|
+
│ │
|
|
55
|
+
│ 📦 Archived │
|
|
56
|
+
│ Old debugging session myapp 7d ago 15msg│
|
|
57
|
+
│ │
|
|
58
|
+
├──────────────────────────────────────────────────────┤
|
|
59
|
+
│ Preview: "Let me refactor the auth middleware to..." │
|
|
60
|
+
│ "I'll update the JWT validation logic..." │
|
|
61
|
+
└──────────────────────────────────────────────────────┘
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
### List Rendering
|
|
65
|
+
|
|
66
|
+
Each session row displays:
|
|
67
|
+
- Selection indicator (▸ for current cursor position)
|
|
68
|
+
- Session title (auto-generated from first prompt or user-set)
|
|
69
|
+
- Project name (derived from project root directory name)
|
|
70
|
+
- Relative time since last activity ("2m ago", "1d ago")
|
|
71
|
+
- Message count
|
|
72
|
+
- Status icon: 🟢 active, 📦 archived, ⚡ currently selected
|
|
73
|
+
|
|
74
|
+
### Navigation Controls
|
|
75
|
+
|
|
76
|
+
| Key | Action |
|
|
77
|
+
|-----|--------|
|
|
78
|
+
| ↑/↓ | Move selection cursor |
|
|
79
|
+
| Enter | Switch to selected session |
|
|
80
|
+
| Ctrl+N | Create new session |
|
|
81
|
+
| Ctrl+D | Archive/delete selected session (with confirmation) |
|
|
82
|
+
| Escape | Close navigator without switching |
|
|
83
|
+
| Any letter | Start filtering by title/project |
|
|
84
|
+
| Backspace | Clear filter character |
|
|
85
|
+
| Tab | Cycle through grouping modes (project, date, status) |
|
|
86
|
+
|
|
87
|
+
### Filtering
|
|
88
|
+
|
|
89
|
+
Typing any character while the navigator is open enters filter mode:
|
|
90
|
+
- The filter input appears at the top right of the overlay
|
|
91
|
+
- Sessions are filtered in real-time by matching against title, project name, and session ID
|
|
92
|
+
- Filtering is case-insensitive and supports substring matching
|
|
93
|
+
- Empty filter shows all sessions
|
|
94
|
+
- Filter persists until cleared with Backspace or Escape
|
|
95
|
+
|
|
96
|
+
### Session Grouping
|
|
97
|
+
|
|
98
|
+
Sessions can be grouped by three modes (cycled with Tab):
|
|
99
|
+
1. **By project**: sessions under their project root directory name
|
|
100
|
+
2. **By date**: Today, Yesterday, This Week, Older
|
|
101
|
+
3. **By status**: Active, Archived
|
|
102
|
+
|
|
103
|
+
The current grouping mode is remembered across navigator opens within the same session.
|
|
104
|
+
|
|
105
|
+
### Session Preview
|
|
106
|
+
|
|
107
|
+
When the cursor rests on a session for more than 300ms:
|
|
108
|
+
- A preview panel appears at the bottom of the overlay
|
|
109
|
+
- Shows the last 2-3 messages (truncated) from that session
|
|
110
|
+
- Preview updates as the cursor moves
|
|
111
|
+
- Preview can be toggled off with `p` key
|
|
112
|
+
|
|
113
|
+
### Session Management
|
|
114
|
+
|
|
115
|
+
**Create new session**: Ctrl+N opens a minimal dialog asking for an optional title and project root. If no project root is specified, the current working directory is used. The new session is created and immediately selected.
|
|
116
|
+
|
|
117
|
+
**Archive session**: Ctrl+D on a session shows a confirmation prompt ("Archive this session? y/n"). Archived sessions move to the "Archived" group and are hidden by default. They can be shown by switching to "By status" grouping.
|
|
118
|
+
|
|
119
|
+
**Delete session**: Shift+Ctrl+D permanently deletes a session (with confirmation). This removes the session from storage entirely.
|
|
120
|
+
|
|
121
|
+
### Quick Access
|
|
122
|
+
|
|
123
|
+
The `/sessions` slash command also opens the navigator (alternative to Ctrl+S). Additionally:
|
|
124
|
+
- `/sessions recent` shows only the 5 most recent sessions
|
|
125
|
+
- `/sessions <query>` opens the navigator with a pre-filled filter
|
|
126
|
+
|
|
127
|
+
### Session Metadata Display
|
|
128
|
+
|
|
129
|
+
The `/session info` command (within an active session) shows extended metadata:
|
|
130
|
+
- Session ID, title, creation time, last activity
|
|
131
|
+
- Message count, total tokens used, estimated cost
|
|
132
|
+
- Model(s) used during the session
|
|
133
|
+
- Project root path
|
|
134
|
+
- Duration (total active time)
|
|
135
|
+
|
|
136
|
+
## Supporting Structures
|
|
137
|
+
|
|
138
|
+
- **Session Persistence (RISE-018)** stores session data that the navigator reads and displays
|
|
139
|
+
- **Rich TUI (RISE-058)** provides the overlay rendering capability for the navigator
|
|
140
|
+
- **Keybinding System (RISE-063)** maps Ctrl+S and other shortcuts to navigator actions
|
|
141
|
+
- **Session Forking (RISE-020)** can be triggered from the navigator to branch from a selected session
|
|
142
|
+
|
|
143
|
+
## Creative Advancement Scenarios
|
|
144
|
+
|
|
145
|
+
**Scenario 1 — Multi-Feature Development:**
|
|
146
|
+
A developer works on three features across two projects. They press Ctrl+S, see all five sessions grouped by project, and jump between them as needed. Each session preserves its conversation context — no need to re-explain what they're doing.
|
|
147
|
+
|
|
148
|
+
**Scenario 2 — Finding an Old Discussion:**
|
|
149
|
+
A developer remembers discussing a database schema a few days ago but doesn't remember the session. They open the navigator, type "database", and the filter narrows to two sessions. They hover on each to preview the last messages and find the right one.
|
|
150
|
+
|
|
151
|
+
**Scenario 3 — Session Cleanup:**
|
|
152
|
+
After a productive week, a developer opens the navigator in "By date" grouping. They see 15 sessions from this week. They archive 10 completed ones with Ctrl+D, keeping the navigator clean for active work.
|
|
153
|
+
|
|
154
|
+
**Scenario 4 — Quick Resume After Break:**
|
|
155
|
+
A developer returns from lunch. They press Ctrl+S and see their most recent session at the top of the "Recent" group with the timestamp "47m ago". One Enter press and they're back exactly where they left off.
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
# RISE-062: Syntax Highlighting
|
|
2
|
+
|
|
3
|
+
> RISE Framework Specification — Borrowed from OpenCode for mia-code
|
|
4
|
+
> Document: rispecs/borrowed_from_opencode/062-syntax-highlighting.rispec.md
|
|
5
|
+
|
|
6
|
+
## Creative Intent
|
|
7
|
+
|
|
8
|
+
mia-code renders code in agent responses with the same syntax highlighting developers see in their editors. Code blocks are not flat monochrome text — they are language-aware, color-rich displays that make structure visible at a glance. A developer reading a TypeScript function in an agent response can immediately distinguish keywords from identifiers, strings from comments, and types from values, without having to copy the code into an editor first.
|
|
9
|
+
|
|
10
|
+
## Structural Tension Analysis
|
|
11
|
+
|
|
12
|
+
**Current Reality:**
|
|
13
|
+
- Code blocks in agent responses are rendered as plain monochrome text with chalk — no language awareness
|
|
14
|
+
- Developers must mentally parse code structure without visual cues
|
|
15
|
+
- Diff outputs from tool execution use basic green/red coloring but no syntax awareness within the changed lines
|
|
16
|
+
- File content displayed by tools (file_read) has no highlighting at all
|
|
17
|
+
- There is no distinction between a Python code block and a JavaScript one — both look the same
|
|
18
|
+
- Terminal color capabilities (256-color, 24-bit true color) are not utilized beyond basic ANSI
|
|
19
|
+
|
|
20
|
+
**Desired State:**
|
|
21
|
+
- Code blocks detect their language from markdown fences (```typescript) or content heuristics
|
|
22
|
+
- Keywords, strings, comments, numbers, operators, types, and functions each receive distinct colors
|
|
23
|
+
- Highlighting works in all code-containing contexts: message code blocks, file content displays, diff outputs, tool results
|
|
24
|
+
- A configurable theme system maps syntax categories to terminal colors
|
|
25
|
+
- Highlighting uses the terminal's full color capability (256-color or 24-bit where supported)
|
|
26
|
+
- Large code blocks are highlighted asynchronously to avoid blocking the UI
|
|
27
|
+
|
|
28
|
+
## Desired Outcome Definition
|
|
29
|
+
|
|
30
|
+
Every code block in mia-code's output is syntax-highlighted according to its language. The highlighting uses a configurable theme with sensible defaults. Highlighting is applied in message code blocks, file read outputs, diff views, and tool results. Performance remains smooth for large files through asynchronous highlighting.
|
|
31
|
+
|
|
32
|
+
## Natural Language Functional Description
|
|
33
|
+
|
|
34
|
+
### Language Detection
|
|
35
|
+
|
|
36
|
+
Code language is determined in priority order:
|
|
37
|
+
1. **Explicit fence tag**: ` ```typescript `, ` ```python `, ` ```rust ` — the language identifier after the opening fence
|
|
38
|
+
2. **File extension inference**: when displaying file content, the file extension determines the language (`.ts` → TypeScript, `.py` → Python)
|
|
39
|
+
3. **Content heuristic**: if no tag or extension, analyze the first few lines for language markers (shebang lines, import statements, package declarations)
|
|
40
|
+
4. **Fallback**: if language cannot be determined, apply generic highlighting (strings, numbers, comments with common delimiters)
|
|
41
|
+
|
|
42
|
+
### Supported Languages
|
|
43
|
+
|
|
44
|
+
At minimum, highlighting supports the languages most common in mia-code usage:
|
|
45
|
+
- TypeScript, JavaScript, JSX, TSX
|
|
46
|
+
- Python, Ruby, Go, Rust, Java, C, C++
|
|
47
|
+
- HTML, CSS, SCSS
|
|
48
|
+
- JSON, YAML, TOML, XML
|
|
49
|
+
- Markdown
|
|
50
|
+
- Shell (bash, zsh, fish)
|
|
51
|
+
- SQL
|
|
52
|
+
- Dockerfile, Makefile
|
|
53
|
+
|
|
54
|
+
Additional languages are supported through the highlighting library's built-in grammar set.
|
|
55
|
+
|
|
56
|
+
### Syntax Categories and Default Colors
|
|
57
|
+
|
|
58
|
+
| Category | Default Dark Theme | Default Light Theme |
|
|
59
|
+
|----------|-------------------|---------------------|
|
|
60
|
+
| Keywords (`if`, `const`, `def`) | Magenta/Purple | Dark Blue |
|
|
61
|
+
| Strings (`"hello"`, `'world'`) | Green | Dark Green |
|
|
62
|
+
| Comments (`// note`, `# todo`) | Dim Gray | Medium Gray |
|
|
63
|
+
| Numbers (`42`, `3.14`) | Yellow | Dark Yellow |
|
|
64
|
+
| Operators (`+`, `=>`, `===`) | Cyan | Dark Cyan |
|
|
65
|
+
| Types (`string`, `int`) | Blue | Dark Blue |
|
|
66
|
+
| Functions (calls and definitions) | Yellow/Gold | Dark Orange |
|
|
67
|
+
| Built-ins (`console`, `print`) | Cyan | Teal |
|
|
68
|
+
| Punctuation (`{`, `)`, `;`) | Default foreground | Default foreground |
|
|
69
|
+
|
|
70
|
+
### Highlighting Contexts
|
|
71
|
+
|
|
72
|
+
**Message Code Blocks:**
|
|
73
|
+
Code within ` ``` ` fences in agent messages is highlighted. The language tag (if present) is shown as a dim label above the code block.
|
|
74
|
+
|
|
75
|
+
**File Content Display:**
|
|
76
|
+
When `file_read` or similar tools display file content, the entire output is highlighted based on the file extension. Line numbers (if enabled) are rendered in dim gray to the left.
|
|
77
|
+
|
|
78
|
+
**Diff Output:**
|
|
79
|
+
Diff displays combine syntax highlighting with diff-level coloring:
|
|
80
|
+
- Added lines: green background tint + syntax highlighting on the code
|
|
81
|
+
- Removed lines: red background tint + syntax highlighting on the code
|
|
82
|
+
- Context lines: default background + syntax highlighting
|
|
83
|
+
- Diff markers (`+`, `-`, `@@`) are styled distinctly from code content
|
|
84
|
+
|
|
85
|
+
**Tool Results:**
|
|
86
|
+
Tool outputs that contain code (e.g., grep results, LSP hover information) are highlighted when the language is detectable from context.
|
|
87
|
+
|
|
88
|
+
### Theme Configuration
|
|
89
|
+
|
|
90
|
+
Themes are configured in the mia-code config file:
|
|
91
|
+
|
|
92
|
+
```jsonc
|
|
93
|
+
{
|
|
94
|
+
"syntaxTheme": "dark", // built-in theme name
|
|
95
|
+
// OR custom theme:
|
|
96
|
+
"syntaxTheme": {
|
|
97
|
+
"keyword": "magenta",
|
|
98
|
+
"string": "#a8d8a8", // 24-bit hex color
|
|
99
|
+
"comment": "gray",
|
|
100
|
+
"number": "yellow",
|
|
101
|
+
"operator": "cyan",
|
|
102
|
+
"type": "blue",
|
|
103
|
+
"function": "yellow bold"
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
Built-in themes: `dark` (default), `light`, `monokai`, `solarized-dark`, `solarized-light`.
|
|
109
|
+
|
|
110
|
+
### Line Numbers
|
|
111
|
+
|
|
112
|
+
Line numbers are optional and controlled by config: `{"syntaxHighlight": {"lineNumbers": true}}`. When enabled:
|
|
113
|
+
- Line numbers are right-aligned in dim gray
|
|
114
|
+
- A thin separator (│) divides line numbers from code content
|
|
115
|
+
- Line numbers do not interfere with copy-paste (they are not selectable in supporting terminals)
|
|
116
|
+
|
|
117
|
+
### Performance
|
|
118
|
+
|
|
119
|
+
- Highlighting for blocks under 100 lines is synchronous (instant)
|
|
120
|
+
- Blocks over 100 lines are highlighted asynchronously — raw text displays first, highlighting applies after
|
|
121
|
+
- During streaming (RISE-059), highlighting is applied line-by-line as each line completes
|
|
122
|
+
- A highlighting cache stores results for recently displayed blocks to avoid re-highlighting on scroll
|
|
123
|
+
|
|
124
|
+
### Terminal Capability Detection
|
|
125
|
+
|
|
126
|
+
The highlighter adapts to terminal capabilities:
|
|
127
|
+
- **24-bit color** (COLORTERM=truecolor): full hex color support, richest themes
|
|
128
|
+
- **256-color**: maps theme colors to nearest 256-color palette entry
|
|
129
|
+
- **16-color**: maps to basic ANSI colors with bold/dim modifiers
|
|
130
|
+
- **No color** (NO_COLOR env var or --no-color flag): no highlighting applied
|
|
131
|
+
|
|
132
|
+
## Supporting Structures
|
|
133
|
+
|
|
134
|
+
- **Rich TUI (RISE-058)** provides the rendering surface where highlighted code appears
|
|
135
|
+
- **Streaming Display (RISE-059)** triggers line-by-line highlighting during progressive rendering
|
|
136
|
+
- **Multi-Level Config (RISE-064)** loads theme preferences from the appropriate config level
|
|
137
|
+
- **JSONC Config (RISE-065)** enables comments in theme configuration files
|
|
138
|
+
|
|
139
|
+
## Creative Advancement Scenarios
|
|
140
|
+
|
|
141
|
+
**Scenario 1 — Reading Generated Code:**
|
|
142
|
+
The agent generates a 50-line TypeScript function. As it streams, each line receives syntax highlighting — keywords in purple, strings in green, types in blue. The developer reads the code naturally, spotting a type error in a highlighted type annotation before the agent finishes.
|
|
143
|
+
|
|
144
|
+
**Scenario 2 — Reviewing a Diff:**
|
|
145
|
+
The agent runs `git diff` and displays the result. Added lines show green-tinted backgrounds with syntax-highlighted code inside. The developer can see not just what changed, but the syntactic structure of the changes — a renamed variable stands out as a highlighted identifier, not just a text difference.
|
|
146
|
+
|
|
147
|
+
**Scenario 3 — Matching Editor Theme:**
|
|
148
|
+
A developer who uses Monokai in VS Code sets `{"syntaxTheme": "monokai"}` in their mia-code config. Code blocks in agent responses now use familiar colors. The visual transition between editor and agent terminal feels seamless.
|
|
149
|
+
|
|
150
|
+
**Scenario 4 — Large File Display:**
|
|
151
|
+
The agent reads a 500-line Python file. The TUI instantly shows the raw text, then syntax highlighting fades in asynchronously — keywords colorize, strings turn green, comments dim out. The effect is barely noticeable (sub-200ms) but prevents any UI stall.
|