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,465 @@
|
|
|
1
|
+
# RISE Specification: Interactive Terminal Dashboard (TUI)
|
|
2
|
+
|
|
3
|
+
## Status: IMPLEMENTED ✅
|
|
4
|
+
|
|
5
|
+
**Version**: 1.0.0
|
|
6
|
+
**Module**: `miadi-code/src/dashboard.ts`
|
|
7
|
+
**Document ID**: miadi-code-dashboard-rise-spec-v1
|
|
8
|
+
**Last Updated**: 2026-01-31
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## Core Creative Intent
|
|
13
|
+
|
|
14
|
+
The Interactive Terminal Dashboard empowers CLI agent developers to create **rich, menu-driven terminal user interfaces** within any interactive command-line application. This pattern enables:
|
|
15
|
+
|
|
16
|
+
- Full-screen terminal rendering with visual hierarchy
|
|
17
|
+
- Interactive menu selection with keyboard navigation
|
|
18
|
+
- Real-time data refresh and progress visualization
|
|
19
|
+
- Graceful TTY detection and fallback modes
|
|
20
|
+
- Isolated input handling to prevent readline conflicts
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## R - Reverse Engineering
|
|
25
|
+
|
|
26
|
+
### Current State Analysis
|
|
27
|
+
|
|
28
|
+
The dashboard module (`dashboard.ts`) implements a **Structural Tension Interface (STI)** - a TUI for visualizing and managing Structural Tension Charts within the miadi-code CLI.
|
|
29
|
+
|
|
30
|
+
### File Structure
|
|
31
|
+
|
|
32
|
+
```
|
|
33
|
+
miadi-code/src/
|
|
34
|
+
├── dashboard.ts # Main dashboard class (StructuralTensionDashboard)
|
|
35
|
+
├── dashboard.test.ts # Data adapter and rendering tests
|
|
36
|
+
├── cli.ts # Integration point (/dashboard, /ui commands)
|
|
37
|
+
└── stc/
|
|
38
|
+
└── workspace-client.ts # API client used by dashboard
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### Architectural Pattern
|
|
42
|
+
|
|
43
|
+
```
|
|
44
|
+
User Input (/dashboard)
|
|
45
|
+
↓
|
|
46
|
+
┌──────────────────────────────────────────────────────────────────────┐
|
|
47
|
+
│ StructuralTensionDashboard │
|
|
48
|
+
├──────────────────────────────────────────────────────────────────────┤
|
|
49
|
+
│ ┌───────────────┐ ┌───────────────┐ ┌────────────────────────────┐│
|
|
50
|
+
│ │ TTY Detection │ │ Health Check │ │ Repo Auto-Detection ││
|
|
51
|
+
│ │ & Fallback │ │ (API reachable)│ │ (git remote get-url origin)││
|
|
52
|
+
│ └───────┬───────┘ └───────┬───────┘ └───────────┬────────────────┘│
|
|
53
|
+
│ │ │ │ │
|
|
54
|
+
│ ▼ ▼ ▼ │
|
|
55
|
+
│ ┌────────────────────────────────────────────────────────────────┐ │
|
|
56
|
+
│ │ MAIN LOOP │ │
|
|
57
|
+
│ │ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │ │
|
|
58
|
+
│ │ │ Render │→ │ Show Menu│→ │ Handle │→ │ Refresh │→ LOOP │ │
|
|
59
|
+
│ │ │ Screen │ │ (Enquirer)│ │ Selection│ │ Data │ │ │
|
|
60
|
+
│ │ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │ │
|
|
61
|
+
│ └────────────────────────────────────────────────────────────────┘ │
|
|
62
|
+
├──────────────────────────────────────────────────────────────────────┤
|
|
63
|
+
│ ┌───────────────────────────────────────────────────────────────┐ │
|
|
64
|
+
│ │ RENDER COMPONENTS │ │
|
|
65
|
+
│ │ Header: Title bar with desired outcome │ │
|
|
66
|
+
│ │ Tension Field: Progress bar, action steps, narrative beats │ │
|
|
67
|
+
│ │ Footer: Current reality observations │ │
|
|
68
|
+
│ │ Status: Error/success message display │ │
|
|
69
|
+
│ └───────────────────────────────────────────────────────────────┘ │
|
|
70
|
+
└──────────────────────────────────────────────────────────────────────┘
|
|
71
|
+
↓
|
|
72
|
+
STCWorkspaceClient (HTTP → Miadi Platform /api/stc/*)
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### Core Dependencies
|
|
76
|
+
|
|
77
|
+
| Dependency | Purpose | Import Pattern |
|
|
78
|
+
|------------|---------|----------------|
|
|
79
|
+
| `chalk` | Terminal colors and styling | `import chalk from 'chalk'` |
|
|
80
|
+
| `enquirer` | Interactive prompts (select, input) | `import Enquirer from 'enquirer'` |
|
|
81
|
+
| `child_process.execSync` | Git command execution | `import { execSync } from 'child_process'` |
|
|
82
|
+
| `readline` | TTY detection | `import { createInterface } from 'readline'` |
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
## I - Intent Extraction
|
|
87
|
+
|
|
88
|
+
### Primary Intent
|
|
89
|
+
|
|
90
|
+
Enable developers of interactive CLI agents to create **rich terminal dashboards** with:
|
|
91
|
+
|
|
92
|
+
1. **Full-screen rendering** - Clear screen, draw structured layout
|
|
93
|
+
2. **Interactive menus** - Arrow key navigation, selection
|
|
94
|
+
3. **Real-time updates** - Data refresh on user actions
|
|
95
|
+
4. **Input isolation** - Prevent readline listener conflicts
|
|
96
|
+
5. **Graceful degradation** - Static view when TTY unavailable
|
|
97
|
+
|
|
98
|
+
### User Stories
|
|
99
|
+
|
|
100
|
+
1. **As a CLI developer**, I want to create interactive menus so users can navigate complex data without typing commands.
|
|
101
|
+
|
|
102
|
+
2. **As a terminal user**, I want a visual dashboard showing my progress toward goals with clear visual hierarchy.
|
|
103
|
+
|
|
104
|
+
3. **As an agent developer**, I want to integrate TUI elements without breaking existing readline-based chat interfaces.
|
|
105
|
+
|
|
106
|
+
4. **As an operator**, I want dashboards to fail gracefully when run in non-interactive contexts (CI, pipes).
|
|
107
|
+
|
|
108
|
+
### Success Criteria
|
|
109
|
+
|
|
110
|
+
- [x] Full-screen terminal rendering with console.clear()
|
|
111
|
+
- [x] Interactive menu with arrow keys via Enquirer
|
|
112
|
+
- [x] Data adapter pattern for server-to-UI transformation
|
|
113
|
+
- [x] TTY detection with read-only fallback
|
|
114
|
+
- [x] Readline listener isolation for integration with chat modes
|
|
115
|
+
- [x] Error and status message display
|
|
116
|
+
- [x] Progress bar visualization
|
|
117
|
+
- [x] Automated sync after mutations
|
|
118
|
+
|
|
119
|
+
---
|
|
120
|
+
|
|
121
|
+
## S - Specification
|
|
122
|
+
|
|
123
|
+
### Class: StructuralTensionDashboard
|
|
124
|
+
|
|
125
|
+
```typescript
|
|
126
|
+
export class StructuralTensionDashboard {
|
|
127
|
+
private client: STCWorkspaceClient;
|
|
128
|
+
private currentChart: STCChart | null;
|
|
129
|
+
private currentRepo: string | null;
|
|
130
|
+
private isRunning: boolean;
|
|
131
|
+
private errorMessage: string | null;
|
|
132
|
+
private statusMessage: string | null;
|
|
133
|
+
private isTTY: boolean;
|
|
134
|
+
|
|
135
|
+
constructor(repo?: string);
|
|
136
|
+
|
|
137
|
+
// Lifecycle
|
|
138
|
+
public async start(): Promise<void>;
|
|
139
|
+
|
|
140
|
+
// Rendering
|
|
141
|
+
private render(): void;
|
|
142
|
+
private renderReadOnly(): void;
|
|
143
|
+
private renderHeader(): void;
|
|
144
|
+
private renderTensionField(): void;
|
|
145
|
+
private renderFooter(): void;
|
|
146
|
+
|
|
147
|
+
// Interaction
|
|
148
|
+
private async showMenu(): Promise<void>;
|
|
149
|
+
private async promptObserve(): Promise<void>;
|
|
150
|
+
private async promptAction(): Promise<void>;
|
|
151
|
+
private async promptComplete(): Promise<void>;
|
|
152
|
+
|
|
153
|
+
// Data
|
|
154
|
+
private async refreshData(): Promise<void>;
|
|
155
|
+
private calculateProgress(actions: RawAction[]): number;
|
|
156
|
+
|
|
157
|
+
// Utilities
|
|
158
|
+
private detectRepositoryFromPath(projectRoot: string): string | undefined;
|
|
159
|
+
private centerText(text: string, width: number): string;
|
|
160
|
+
}
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
### Data Adapter Pattern
|
|
164
|
+
|
|
165
|
+
The dashboard transforms server data structures to UI-friendly formats:
|
|
166
|
+
|
|
167
|
+
```typescript
|
|
168
|
+
// Server format (FullWorkspaceChart from API)
|
|
169
|
+
interface RawChart {
|
|
170
|
+
chartId?: string;
|
|
171
|
+
desiredOutcome?: { observations?: string[] };
|
|
172
|
+
currentReality?: { observations?: string[] };
|
|
173
|
+
actions?: RawAction[];
|
|
174
|
+
narrativeBeats?: RawBeat[];
|
|
175
|
+
chartEntity?: { metadata?: { createdAt?: string; updatedAt?: string } };
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
// UI format (STCChart for rendering)
|
|
179
|
+
interface STCChart {
|
|
180
|
+
id: string;
|
|
181
|
+
desiredOutcome: string;
|
|
182
|
+
currentReality: string[];
|
|
183
|
+
actionSteps: STCActionStep[];
|
|
184
|
+
narrativeBeats: STCNarrativeBeat[];
|
|
185
|
+
progress: number; // Calculated from completed/total
|
|
186
|
+
createdAt: string;
|
|
187
|
+
updatedAt: string;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
// Adapter function
|
|
191
|
+
function adaptChartData(rawChart: RawChart): STCChart;
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
### Menu Definition Pattern
|
|
195
|
+
|
|
196
|
+
```typescript
|
|
197
|
+
const response = await prompt<{ choice: string }>({
|
|
198
|
+
type: 'select',
|
|
199
|
+
name: 'choice',
|
|
200
|
+
message: 'Actions:',
|
|
201
|
+
choices: [
|
|
202
|
+
{ name: 'observe', message: '👁️ Add Observation', hint: 'Add to current reality' },
|
|
203
|
+
{ name: 'action', message: '⚡ Add Action Step', hint: 'Add to path' },
|
|
204
|
+
{ name: 'complete', message: '✅ Complete Action', hint: 'Mark step done' },
|
|
205
|
+
{ name: 'sync', message: '🔄 Sync & Refresh', hint: 'Force file sync' },
|
|
206
|
+
{ name: 'quit', message: '❌ Quit Dashboard', hint: 'Return to chat' }
|
|
207
|
+
]
|
|
208
|
+
});
|
|
209
|
+
```
|
|
210
|
+
|
|
211
|
+
### TTY Detection & Fallback
|
|
212
|
+
|
|
213
|
+
```typescript
|
|
214
|
+
constructor(repo?: string) {
|
|
215
|
+
this.isTTY = process.stdin.isTTY ?? false;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
public async start(): Promise<void> {
|
|
219
|
+
// ...health checks and setup...
|
|
220
|
+
|
|
221
|
+
if (!this.isTTY) {
|
|
222
|
+
console.log(chalk.yellow('\n⚠️ Dashboard requires an interactive terminal.'));
|
|
223
|
+
console.log(chalk.dim('Run miadi-code directly (not through a pipe) to use the dashboard.'));
|
|
224
|
+
|
|
225
|
+
// Show read-only snapshot instead
|
|
226
|
+
await this.refreshData();
|
|
227
|
+
this.renderReadOnly();
|
|
228
|
+
return;
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
// Interactive mode continues...
|
|
232
|
+
}
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
### Readline Isolation Pattern
|
|
236
|
+
|
|
237
|
+
```typescript
|
|
238
|
+
// In cli.ts - before launching dashboard
|
|
239
|
+
case 'dashboard':
|
|
240
|
+
case 'ui':
|
|
241
|
+
try {
|
|
242
|
+
requiresFeature(config.engine, 'charts');
|
|
243
|
+
const dashboard = new StructuralTensionDashboard();
|
|
244
|
+
|
|
245
|
+
// COMPLETELY ISOLATE STDIN - prevent readline conflicts
|
|
246
|
+
const listeners = rl.listeners('line');
|
|
247
|
+
rl.removeAllListeners('line');
|
|
248
|
+
rl.pause();
|
|
249
|
+
|
|
250
|
+
await dashboard.start();
|
|
251
|
+
|
|
252
|
+
// RESTORE LISTENERS after dashboard exits
|
|
253
|
+
rl.resume();
|
|
254
|
+
listeners.forEach(l => rl.on('line', l as any));
|
|
255
|
+
rl.prompt();
|
|
256
|
+
} catch (e: any) {
|
|
257
|
+
console.log(formatError(e.message));
|
|
258
|
+
}
|
|
259
|
+
break;
|
|
260
|
+
```
|
|
261
|
+
|
|
262
|
+
### Progress Bar Rendering
|
|
263
|
+
|
|
264
|
+
```typescript
|
|
265
|
+
function getProgressBar(progress: number, width: number = 20): string {
|
|
266
|
+
const filled = Math.round(progress * width);
|
|
267
|
+
const empty = width - filled;
|
|
268
|
+
return '█'.repeat(filled) + '░'.repeat(empty);
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
// Usage in render
|
|
272
|
+
const bar = getProgressBar(this.currentChart.progress, 40);
|
|
273
|
+
console.log(` 🚀 PATH PROGRESS: [${chalk.cyan(bar)}] ${Math.round(progress * 100)}%`);
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
### Full-Screen Layout Structure
|
|
277
|
+
|
|
278
|
+
```
|
|
279
|
+
┌──────────────────────────────────────────────────────────────────────┐
|
|
280
|
+
│ STRUCTURAL TENSION INTERFACE │
|
|
281
|
+
│━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━│
|
|
282
|
+
│ 🎯 DESIRED OUTCOME: [Goal text from chart] │
|
|
283
|
+
│━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━│
|
|
284
|
+
│ │
|
|
285
|
+
│ 🚀 PATH PROGRESS: [████████████████░░░░] 80% │
|
|
286
|
+
│ │
|
|
287
|
+
│ 🗺️ PATH OF LEAST RESISTANCE (Latest Action Steps): │
|
|
288
|
+
│ ✅ Completed action 1 │
|
|
289
|
+
│ ✅ Completed action 2 │
|
|
290
|
+
│ ⏳ Pending action 3 │
|
|
291
|
+
│ ⏳ Pending action 4 │
|
|
292
|
+
│ │
|
|
293
|
+
│ 🎭 NARRATIVE BEATS (Latest): │
|
|
294
|
+
│ ✨ [Act 1] Initial setup complete │
|
|
295
|
+
│ ✨ [Act 2] Integration milestone │
|
|
296
|
+
│ │
|
|
297
|
+
│━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━│
|
|
298
|
+
│ 🧱 CURRENT REALITY (Latest): │
|
|
299
|
+
│ 👁️ Observation 1 │
|
|
300
|
+
│ 👁️ Observation 2 │
|
|
301
|
+
│ 👁️ Observation 3 │
|
|
302
|
+
│━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━│
|
|
303
|
+
│ │
|
|
304
|
+
│ ✨ [Status message if any] │
|
|
305
|
+
│ │
|
|
306
|
+
│ ? Actions: (Use arrow keys) │
|
|
307
|
+
│ ❯ 👁️ Add Observation │
|
|
308
|
+
│ ⚡ Add Action Step │
|
|
309
|
+
│ ✅ Complete Action │
|
|
310
|
+
│ 🔄 Sync & Refresh │
|
|
311
|
+
│ ❌ Quit Dashboard │
|
|
312
|
+
└──────────────────────────────────────────────────────────────────────┘
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
---
|
|
316
|
+
|
|
317
|
+
## E - Export Optimization
|
|
318
|
+
|
|
319
|
+
### CLI Commands
|
|
320
|
+
|
|
321
|
+
| Command | Description |
|
|
322
|
+
|---------|-------------|
|
|
323
|
+
| `/dashboard` | Launch interactive TUI dashboard |
|
|
324
|
+
| `/ui` | Alias for /dashboard |
|
|
325
|
+
|
|
326
|
+
### Programmatic API
|
|
327
|
+
|
|
328
|
+
```typescript
|
|
329
|
+
import { StructuralTensionDashboard } from './dashboard.js';
|
|
330
|
+
|
|
331
|
+
// Basic usage
|
|
332
|
+
const dashboard = new StructuralTensionDashboard();
|
|
333
|
+
await dashboard.start();
|
|
334
|
+
|
|
335
|
+
// With specific repository
|
|
336
|
+
const dashboard = new StructuralTensionDashboard('owner/repo');
|
|
337
|
+
await dashboard.start();
|
|
338
|
+
```
|
|
339
|
+
|
|
340
|
+
### Integration Pattern for Other CLI Agents
|
|
341
|
+
|
|
342
|
+
To add a similar dashboard to any CLI agent:
|
|
343
|
+
|
|
344
|
+
```typescript
|
|
345
|
+
// 1. Create a dashboard class with the pattern
|
|
346
|
+
class MyDashboard {
|
|
347
|
+
private isRunning = false;
|
|
348
|
+
private isTTY = process.stdin.isTTY ?? false;
|
|
349
|
+
|
|
350
|
+
async start() {
|
|
351
|
+
if (!this.isTTY) {
|
|
352
|
+
this.renderReadOnly();
|
|
353
|
+
return;
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
this.isRunning = true;
|
|
357
|
+
while (this.isRunning) {
|
|
358
|
+
this.render();
|
|
359
|
+
await this.showMenu();
|
|
360
|
+
}
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
private render() {
|
|
364
|
+
console.clear();
|
|
365
|
+
// Draw your UI with chalk
|
|
366
|
+
}
|
|
367
|
+
|
|
368
|
+
private async showMenu() {
|
|
369
|
+
const { prompt } = Enquirer;
|
|
370
|
+
const response = await prompt({
|
|
371
|
+
type: 'select',
|
|
372
|
+
name: 'choice',
|
|
373
|
+
message: 'Select:',
|
|
374
|
+
choices: ['Option 1', 'Option 2', 'Quit']
|
|
375
|
+
});
|
|
376
|
+
// Handle selection
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
|
|
380
|
+
// 2. Isolate readline when launching
|
|
381
|
+
const listeners = rl.listeners('line');
|
|
382
|
+
rl.removeAllListeners('line');
|
|
383
|
+
rl.pause();
|
|
384
|
+
|
|
385
|
+
await new MyDashboard().start();
|
|
386
|
+
|
|
387
|
+
rl.resume();
|
|
388
|
+
listeners.forEach(l => rl.on('line', l as any));
|
|
389
|
+
rl.prompt();
|
|
390
|
+
```
|
|
391
|
+
|
|
392
|
+
### Key Implementation Guidelines
|
|
393
|
+
|
|
394
|
+
1. **Always check TTY** - `process.stdin.isTTY` before interactive mode
|
|
395
|
+
2. **Use console.clear()** - Full-screen rendering each frame
|
|
396
|
+
3. **Chalk for styling** - Colors, bold, dim for visual hierarchy
|
|
397
|
+
4. **Enquirer for menus** - Handles arrow keys, selection
|
|
398
|
+
5. **Isolate readline** - Pause and restore listeners
|
|
399
|
+
6. **Data adapter pattern** - Transform API data to UI-friendly format
|
|
400
|
+
7. **Status messages** - Temporary feedback after actions
|
|
401
|
+
8. **Error handling** - Display errors without crashing loop
|
|
402
|
+
|
|
403
|
+
---
|
|
404
|
+
|
|
405
|
+
## Testing Patterns
|
|
406
|
+
|
|
407
|
+
### Data Adapter Tests
|
|
408
|
+
|
|
409
|
+
```typescript
|
|
410
|
+
describe('Dashboard Data Adapter', () => {
|
|
411
|
+
it('should handle empty chart data', () => {
|
|
412
|
+
const raw = {};
|
|
413
|
+
const result = adaptChartData(raw);
|
|
414
|
+
assert.strictEqual(result.id, 'unknown');
|
|
415
|
+
assert.strictEqual(result.desiredOutcome, 'No Goal Set');
|
|
416
|
+
});
|
|
417
|
+
|
|
418
|
+
it('should calculate progress correctly', () => {
|
|
419
|
+
const actions = [
|
|
420
|
+
{ name: 'a1', metadata: { completionStatus: true } },
|
|
421
|
+
{ name: 'a2', metadata: { completionStatus: false } },
|
|
422
|
+
];
|
|
423
|
+
assert.strictEqual(calculateProgress(actions), 0.5);
|
|
424
|
+
});
|
|
425
|
+
});
|
|
426
|
+
```
|
|
427
|
+
|
|
428
|
+
### Rendering Helper Tests
|
|
429
|
+
|
|
430
|
+
```typescript
|
|
431
|
+
describe('Dashboard Rendering Helpers', () => {
|
|
432
|
+
it('should render progress bar for 50%', () => {
|
|
433
|
+
const bar = getProgressBar(0.5, 10);
|
|
434
|
+
assert.strictEqual(bar, '█████░░░░░');
|
|
435
|
+
});
|
|
436
|
+
});
|
|
437
|
+
```
|
|
438
|
+
|
|
439
|
+
---
|
|
440
|
+
|
|
441
|
+
## Known Limitations
|
|
442
|
+
|
|
443
|
+
1. **Terminal Flickering** - Rapid render cycles may cause visual artifacts
|
|
444
|
+
2. **Settle Delay** - API mutations require 1.5s wait for server sync
|
|
445
|
+
3. **Input Bleeding** - Some terminal multiplexers leak buffered input
|
|
446
|
+
4. **Schema Drift** - Manual adapter updates needed for API changes
|
|
447
|
+
|
|
448
|
+
---
|
|
449
|
+
|
|
450
|
+
## Dependencies
|
|
451
|
+
|
|
452
|
+
| Package | Version | Purpose |
|
|
453
|
+
|---------|---------|---------|
|
|
454
|
+
| `chalk` | ^5.x | Terminal styling |
|
|
455
|
+
| `enquirer` | ^2.x | Interactive prompts |
|
|
456
|
+
| Node.js | 18+ | TTY support, async/await |
|
|
457
|
+
|
|
458
|
+
---
|
|
459
|
+
|
|
460
|
+
## References
|
|
461
|
+
|
|
462
|
+
- miadi-code implementation: `miadi-code/src/dashboard.ts`
|
|
463
|
+
- Test suite: `miadi-code/src/dashboard.test.ts`
|
|
464
|
+
- CLI integration: `miadi-code/src/cli.ts` (lines 855-875)
|
|
465
|
+
- API client: `miadi-code/src/stc/workspace-client.ts`
|
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
# Interactive Terminal Dashboard (TUI) - STATUS
|
|
2
|
+
|
|
3
|
+
**Version**: 1.1
|
|
4
|
+
**Date**: 2026-01-31
|
|
5
|
+
**Status**: ✅ ENHANCED
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Implementation Checklist
|
|
10
|
+
|
|
11
|
+
### ✅ Phase 1: Core Architecture (COMPLETE)
|
|
12
|
+
- [x] Create `src/dashboard.ts` - Main dashboard class
|
|
13
|
+
- [x] Implement TTY detection with fallback
|
|
14
|
+
- [x] Implement repository auto-detection via git remote
|
|
15
|
+
- [x] Implement health check for API availability
|
|
16
|
+
|
|
17
|
+
### ✅ Phase 2: Rendering System (COMPLETE)
|
|
18
|
+
- [x] Full-screen rendering with `console.clear()`
|
|
19
|
+
- [x] Header with desired outcome display
|
|
20
|
+
- [x] Tension field with progress bar
|
|
21
|
+
- [x] Action steps list (completed/pending)
|
|
22
|
+
- [x] Narrative beats section
|
|
23
|
+
- [x] Footer with current reality observations
|
|
24
|
+
- [x] Status/error message display
|
|
25
|
+
|
|
26
|
+
### ✅ Phase 3: Interaction Layer (ENHANCED)
|
|
27
|
+
- [x] Menu system with Enquirer
|
|
28
|
+
- [x] Observe action (add observation)
|
|
29
|
+
- [x] Action step addition
|
|
30
|
+
- [x] Action completion via selection menu
|
|
31
|
+
- [x] Sync & refresh operation
|
|
32
|
+
- [x] Quit with graceful cleanup
|
|
33
|
+
- [x] **NEW**: Dynamic menu hints showing operation availability
|
|
34
|
+
- [x] **NEW**: Prerequisite checks before prompting
|
|
35
|
+
|
|
36
|
+
### ✅ Phase 4: Data Layer (COMPLETE)
|
|
37
|
+
- [x] Data adapter: FullWorkspaceChart → STCChart
|
|
38
|
+
- [x] Progress calculation from action completion
|
|
39
|
+
- [x] Handle nested/complex data structures
|
|
40
|
+
- [x] Graceful handling of missing fields
|
|
41
|
+
|
|
42
|
+
### ✅ Phase 5: CLI Integration (COMPLETE)
|
|
43
|
+
- [x] `/dashboard` command in cli.ts
|
|
44
|
+
- [x] `/ui` alias
|
|
45
|
+
- [x] Readline listener isolation
|
|
46
|
+
- [x] Listener restoration after exit
|
|
47
|
+
|
|
48
|
+
### ✅ Phase 6: Testing (COMPLETE)
|
|
49
|
+
- [x] Data adapter tests (11 tests)
|
|
50
|
+
- [x] Progress calculation tests (5 tests)
|
|
51
|
+
- [x] Rendering helper tests (4 tests)
|
|
52
|
+
- [x] Edge case tests (4 tests)
|
|
53
|
+
- [x] Total: 24 dashboard-specific tests passing
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## Files Created
|
|
58
|
+
|
|
59
|
+
| File | Purpose | Lines |
|
|
60
|
+
|------|---------|-------|
|
|
61
|
+
| `src/dashboard.ts` | Main dashboard class | ~365 |
|
|
62
|
+
| `src/dashboard.test.ts` | Data adapter & rendering tests | ~355 |
|
|
63
|
+
|
|
64
|
+
## Files Modified
|
|
65
|
+
|
|
66
|
+
| File | Changes |
|
|
67
|
+
|------|---------|
|
|
68
|
+
| `src/cli.ts` | Added `/dashboard` and `/ui` command handlers |
|
|
69
|
+
| `src/formatting.ts` | Help text updated (if applicable) |
|
|
70
|
+
|
|
71
|
+
---
|
|
72
|
+
|
|
73
|
+
## Feature Summary
|
|
74
|
+
|
|
75
|
+
### Commands
|
|
76
|
+
| Command | Status |
|
|
77
|
+
|---------|--------|
|
|
78
|
+
| `/dashboard` | ✅ Working |
|
|
79
|
+
| `/ui` | ✅ Working (alias) |
|
|
80
|
+
|
|
81
|
+
### Capabilities
|
|
82
|
+
| Feature | Status | Notes |
|
|
83
|
+
|---------|--------|-------|
|
|
84
|
+
| Full-screen rendering | ✅ | Uses console.clear() |
|
|
85
|
+
| TTY detection | ✅ | Falls back to read-only |
|
|
86
|
+
| Repo auto-detection | ✅ | Via git remote |
|
|
87
|
+
| Interactive menu | ✅ | Enquirer select |
|
|
88
|
+
| Add observation | ✅ | With auto-sync |
|
|
89
|
+
| Add action step | ✅ | With auto-sync |
|
|
90
|
+
| Complete action | ✅ | Selection from list |
|
|
91
|
+
| Progress visualization | ✅ | Unicode progress bar |
|
|
92
|
+
| Readline isolation | ✅ | Prevents chat conflicts |
|
|
93
|
+
| Error display | ✅ | Non-crashing |
|
|
94
|
+
| Status messages | ✅ | Temporary feedback |
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
## Test Coverage
|
|
99
|
+
|
|
100
|
+
```
|
|
101
|
+
Dashboard Data Adapter
|
|
102
|
+
✓ should handle empty chart data
|
|
103
|
+
✓ should extract desired outcome from observations array
|
|
104
|
+
✓ should extract current reality observations
|
|
105
|
+
✓ should transform action steps correctly
|
|
106
|
+
✓ should transform narrative beats correctly
|
|
107
|
+
✓ should preserve chart timestamps
|
|
108
|
+
|
|
109
|
+
calculateProgress
|
|
110
|
+
✓ should return 0 for empty actions
|
|
111
|
+
✓ should return 0 for no completed actions
|
|
112
|
+
✓ should return 1 for all completed actions
|
|
113
|
+
✓ should return correct ratio for partial completion
|
|
114
|
+
✓ should handle missing metadata gracefully
|
|
115
|
+
|
|
116
|
+
Dashboard Rendering Helpers
|
|
117
|
+
✓ should render empty progress bar for 0%
|
|
118
|
+
✓ should render full progress bar for 100%
|
|
119
|
+
✓ should render half progress bar for 50%
|
|
120
|
+
✓ should handle custom widths
|
|
121
|
+
|
|
122
|
+
Dashboard Data Edge Cases
|
|
123
|
+
✓ should handle actions without observations
|
|
124
|
+
✓ should handle narrative beats with nested description
|
|
125
|
+
✓ should fall back to observations when narrative.description is missing
|
|
126
|
+
✓ should handle real-world complex chart structure
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
---
|
|
130
|
+
|
|
131
|
+
## Known Limitations
|
|
132
|
+
|
|
133
|
+
| Limitation | Description | Mitigation |
|
|
134
|
+
|------------|-------------|------------|
|
|
135
|
+
| Settle delay | 1.5s wait after mutations for server sync | Documented, may improve with WebSocket |
|
|
136
|
+
| Input bleeding | Some terminals leak input after exit | Readline isolation pattern |
|
|
137
|
+
| Flickering | Rapid render cycles cause artifacts | Reduce refresh rate |
|
|
138
|
+
| Schema drift | API changes require adapter updates | Type-safe adapter pattern |
|
|
139
|
+
|
|
140
|
+
---
|
|
141
|
+
|
|
142
|
+
## Usage Examples
|
|
143
|
+
|
|
144
|
+
### Basic Launch
|
|
145
|
+
```bash
|
|
146
|
+
miadi
|
|
147
|
+
> /dashboard
|
|
148
|
+
```
|
|
149
|
+
|
|
150
|
+
### From Specific Repository
|
|
151
|
+
```bash
|
|
152
|
+
cd /path/to/my/repo
|
|
153
|
+
miadi
|
|
154
|
+
> /dashboard
|
|
155
|
+
# Auto-detects repository from git remote
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
### Non-TTY Fallback
|
|
159
|
+
```bash
|
|
160
|
+
echo "/dashboard" | miadi
|
|
161
|
+
# Shows read-only snapshot instead of interactive mode
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
---
|
|
165
|
+
|
|
166
|
+
## Dependencies
|
|
167
|
+
|
|
168
|
+
| Package | Version | Used For |
|
|
169
|
+
|---------|---------|----------|
|
|
170
|
+
| `chalk` | ^5.x | Terminal colors |
|
|
171
|
+
| `enquirer` | ^2.x | Interactive menus |
|
|
172
|
+
| Node.js | 18+ | TTY support |
|
|
173
|
+
|
|
174
|
+
---
|
|
175
|
+
|
|
176
|
+
## Architecture Diagram
|
|
177
|
+
|
|
178
|
+
```
|
|
179
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
180
|
+
│ /dashboard command │
|
|
181
|
+
└────────────────────────────┬────────────────────────────────┘
|
|
182
|
+
│
|
|
183
|
+
▼
|
|
184
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
185
|
+
│ StructuralTensionDashboard │
|
|
186
|
+
│ ┌────────────┐ ┌────────────┐ ┌────────────┐ │
|
|
187
|
+
│ │ TTY Check │ │ Health │ │ Repo │ │
|
|
188
|
+
│ │ │ │ Check │ │ Detection │ │
|
|
189
|
+
│ └─────┬──────┘ └─────┬──────┘ └─────┬──────┘ │
|
|
190
|
+
│ │ │ │ │
|
|
191
|
+
│ └───────────────┼───────────────┘ │
|
|
192
|
+
│ │ │
|
|
193
|
+
│ ▼ │
|
|
194
|
+
│ ┌─────────────────────────────────────────────────────┐ │
|
|
195
|
+
│ │ MAIN LOOP │ │
|
|
196
|
+
│ │ │ │
|
|
197
|
+
│ │ render() → showMenu() → handleAction() → refresh() │ │
|
|
198
|
+
│ │ ↑ │ │ │
|
|
199
|
+
│ │ └───────────────────────────────────────┘ │ │
|
|
200
|
+
│ └─────────────────────────────────────────────────────┘ │
|
|
201
|
+
│ │ │
|
|
202
|
+
│ ▼ │
|
|
203
|
+
│ ┌─────────────────────────────────────────────────────┐ │
|
|
204
|
+
│ │ STCWorkspaceClient │ │
|
|
205
|
+
│ │ HTTP → Miadi Platform /api/stc/* │ │
|
|
206
|
+
│ └─────────────────────────────────────────────────────┘ │
|
|
207
|
+
└─────────────────────────────────────────────────────────────┘
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
---
|
|
211
|
+
|
|
212
|
+
**Last Updated**: 2026-01-31T20:00:00Z
|