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,168 @@
|
|
|
1
|
+
# RISE-091: SSE Streaming
|
|
2
|
+
|
|
3
|
+
> RISE Framework Specification — Borrowed from OpenCode for mia-code
|
|
4
|
+
> Document: rispecs/borrowed_from_opencode/091-sse-streaming.rispec.md
|
|
5
|
+
|
|
6
|
+
## Creative Intent
|
|
7
|
+
|
|
8
|
+
mia-code provides Server-Sent Events (SSE) as a lightweight one-way streaming protocol alongside the full WebSocket channel. SSE is the pragmatic choice for clients that only need to receive events — web UIs rendering agent output, monitoring dashboards, CI scripts waiting for results. It works through proxies, reconnects automatically, and requires no special server infrastructure. A `curl` command is all you need to watch an agent think in real-time.
|
|
9
|
+
|
|
10
|
+
## Structural Tension Analysis
|
|
11
|
+
|
|
12
|
+
**Current Reality:**
|
|
13
|
+
- mia-code streams output only to the local terminal via stdout
|
|
14
|
+
- No HTTP-based streaming mechanism exists for remote clients
|
|
15
|
+
- Polling the API for new messages is wasteful and introduces latency
|
|
16
|
+
- WebSocket (RISE-090) provides full bidirectional streaming but requires client library support
|
|
17
|
+
- Simple clients (curl, EventSource, server-rendered pages) cannot use WebSocket easily
|
|
18
|
+
- No reconnection protocol exists — if the connection drops, context is lost
|
|
19
|
+
|
|
20
|
+
**Desired State:**
|
|
21
|
+
- An SSE endpoint streams typed events for any session
|
|
22
|
+
- Clients connect with a standard `EventSource` (browser) or `curl` (terminal)
|
|
23
|
+
- Events are typed: message, delta, tool_start, tool_result, permission, error, done
|
|
24
|
+
- Automatic reconnection via `Last-Event-ID` header resumes where the client left off
|
|
25
|
+
- SSE coexists with WebSocket — clients choose the protocol that fits their needs
|
|
26
|
+
- Multiple SSE streams per session are supported (multiple observers)
|
|
27
|
+
|
|
28
|
+
## Desired Outcome Definition
|
|
29
|
+
|
|
30
|
+
A client connects to `GET /api/session/{id}/events` and receives a stream of typed server-sent events as the agent processes messages. The stream includes message deltas, tool execution updates, permission prompts, and completion signals. Disconnected clients reconnect and resume from their last received event.
|
|
31
|
+
|
|
32
|
+
## Natural Language Functional Description
|
|
33
|
+
|
|
34
|
+
### SSE Endpoint
|
|
35
|
+
|
|
36
|
+
```
|
|
37
|
+
GET /api/session/{id}/events
|
|
38
|
+
Accept: text/event-stream
|
|
39
|
+
Authorization: Basic base64(user:password) # if authentication configured
|
|
40
|
+
Last-Event-ID: evt_42 # for reconnection
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
The server responds with `Content-Type: text/event-stream` and begins pushing events.
|
|
44
|
+
|
|
45
|
+
### Event Format
|
|
46
|
+
|
|
47
|
+
Each event follows the SSE specification:
|
|
48
|
+
|
|
49
|
+
```
|
|
50
|
+
id: evt_42
|
|
51
|
+
event: message.delta
|
|
52
|
+
data: {"messageId":"msg_1","content":"Hello","index":7}
|
|
53
|
+
|
|
54
|
+
id: evt_43
|
|
55
|
+
event: tool.start
|
|
56
|
+
data: {"toolName":"bash","parameters":{"command":"ls"},"toolCallId":"tc_1"}
|
|
57
|
+
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Fields:
|
|
61
|
+
- `id` — monotonically increasing event ID for reconnection
|
|
62
|
+
- `event` — event type string
|
|
63
|
+
- `data` — JSON payload (single line)
|
|
64
|
+
- Empty line terminates each event
|
|
65
|
+
|
|
66
|
+
### Event Types
|
|
67
|
+
|
|
68
|
+
| Event Type | Payload | Description |
|
|
69
|
+
|----------------|--------------------------------------------------|--------------------------------------|
|
|
70
|
+
| `message` | `{messageId, role, content}` | New complete message added |
|
|
71
|
+
| `delta` | `{messageId, content, index}` | Streaming token from agent |
|
|
72
|
+
| `tool_start` | `{toolName, parameters, toolCallId}` | Tool execution beginning |
|
|
73
|
+
| `tool_result` | `{toolCallId, result, duration, success}` | Tool execution completed |
|
|
74
|
+
| `permission` | `{requestId, permission, target, preview}` | Permission prompt (respond via API) |
|
|
75
|
+
| `error` | `{name, message, code}` | Error during processing |
|
|
76
|
+
| `done` | `{messageId, usage}` | Agent response complete |
|
|
77
|
+
| `session` | `{id, title, status}` | Session metadata updated |
|
|
78
|
+
| `cost` | `{sessionCost, totalCost, inputTokens, outputTokens}` | Cost and token update |
|
|
79
|
+
| `heartbeat` | `{}` | Keep-alive (every 30s) |
|
|
80
|
+
|
|
81
|
+
### Reconnection
|
|
82
|
+
|
|
83
|
+
SSE has built-in reconnection support:
|
|
84
|
+
|
|
85
|
+
1. Client tracks the last received event ID (automatic in `EventSource`)
|
|
86
|
+
2. On disconnect, client reconnects with `Last-Event-ID: evt_42` header
|
|
87
|
+
3. Server replays all events after `evt_42` from the session event buffer
|
|
88
|
+
4. Client resumes seamlessly — no duplicate or missed events
|
|
89
|
+
5. Event buffer retains the last 1000 events per session (configurable)
|
|
90
|
+
|
|
91
|
+
If the requested `Last-Event-ID` is no longer in the buffer, the server sends a `reset` event instructing the client to reload full state from the REST API.
|
|
92
|
+
|
|
93
|
+
### Heartbeat
|
|
94
|
+
|
|
95
|
+
The server sends a heartbeat comment every 30 seconds to keep the connection alive through proxies:
|
|
96
|
+
|
|
97
|
+
```
|
|
98
|
+
: heartbeat
|
|
99
|
+
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
SSE comments (lines starting with `:`) are ignored by `EventSource` but prevent proxy timeouts.
|
|
103
|
+
|
|
104
|
+
### Connection Parameters
|
|
105
|
+
|
|
106
|
+
Query parameters customize the stream:
|
|
107
|
+
|
|
108
|
+
- `?types=delta,tool_start,done` — filter to specific event types (default: all)
|
|
109
|
+
- `?lastEventId=evt_42` — alternative to `Last-Event-ID` header
|
|
110
|
+
- `?heartbeat=15` — custom heartbeat interval in seconds
|
|
111
|
+
|
|
112
|
+
### Comparison with WebSocket
|
|
113
|
+
|
|
114
|
+
| Feature | SSE (RISE-091) | WebSocket (RISE-090) |
|
|
115
|
+
|--------------------|-----------------------------|--------------------------------|
|
|
116
|
+
| Direction | Server → Client only | Bidirectional |
|
|
117
|
+
| Reconnection | Automatic (built-in) | Manual (client must implement) |
|
|
118
|
+
| Proxy support | Works through HTTP proxies | May require proxy configuration|
|
|
119
|
+
| Client complexity | EventSource (3 lines of JS) | WebSocket API (more setup) |
|
|
120
|
+
| Send messages | Separate HTTP POST | Same connection |
|
|
121
|
+
| Browser support | Native EventSource | Native WebSocket |
|
|
122
|
+
| Use case | Monitoring, streaming UI | Interactive driving, real-time |
|
|
123
|
+
|
|
124
|
+
### Usage Examples
|
|
125
|
+
|
|
126
|
+
**Browser (EventSource):**
|
|
127
|
+
```javascript
|
|
128
|
+
const events = new EventSource("/api/session/abc/events")
|
|
129
|
+
events.addEventListener("delta", (e) => {
|
|
130
|
+
const data = JSON.parse(e.data)
|
|
131
|
+
document.getElementById("output").textContent += data.content
|
|
132
|
+
})
|
|
133
|
+
events.addEventListener("done", () => console.log("Response complete"))
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
**Terminal (curl):**
|
|
137
|
+
```bash
|
|
138
|
+
curl -N -H "Accept: text/event-stream" http://localhost:4096/api/session/abc/events
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
**Permission Handling via SSE:**
|
|
142
|
+
When a `permission` event arrives, the client responds via the REST API:
|
|
143
|
+
```
|
|
144
|
+
POST /api/permission/respond
|
|
145
|
+
{"requestId": "perm_1", "response": "y"}
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
## Supporting Structures
|
|
149
|
+
|
|
150
|
+
- **HTTP API Server (RISE-088)** provides the server hosting the SSE endpoint
|
|
151
|
+
- **WebSocket Support (RISE-090)** provides the bidirectional alternative
|
|
152
|
+
- **Event Bus (RISE-002)** provides internal events that SSE mirrors externally
|
|
153
|
+
- **Permission Modes (RISE-087)** defines permission events streamed via SSE
|
|
154
|
+
- **JavaScript SDK (RISE-093)** wraps SSE in a typed `AsyncIterable` interface
|
|
155
|
+
|
|
156
|
+
## Creative Advancement Scenarios
|
|
157
|
+
|
|
158
|
+
**Scenario 1 — curl Monitoring:**
|
|
159
|
+
A developer runs `curl -N http://localhost:4096/api/session/abc/events` in a second terminal. They watch tool executions and message deltas scroll by as the agent works. When the agent finishes, a `done` event appears. No web browser needed — just curl.
|
|
160
|
+
|
|
161
|
+
**Scenario 2 — Lightweight Web Dashboard:**
|
|
162
|
+
A server-rendered HTML page includes three lines of JavaScript using `EventSource`. As the agent streams tokens, they appear in the page. No React, no build step, no WebSocket library — just native browser APIs rendering a live agent session.
|
|
163
|
+
|
|
164
|
+
**Scenario 3 — CI Pipeline Integration:**
|
|
165
|
+
A CI script sends a prompt via POST, then connects to SSE to wait for the `done` event. It captures the final message content and posts it as a PR comment. The SSE connection times out gracefully if the agent takes too long.
|
|
166
|
+
|
|
167
|
+
**Scenario 4 — Resilient Mobile Client:**
|
|
168
|
+
A mobile app uses SSE for streaming. The user walks between WiFi networks. Each time the connection drops, `EventSource` reconnects automatically and sends `Last-Event-ID`. The server replays missed events. The user sees continuous output with no gaps.
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
# RISE-092: mDNS Discovery
|
|
2
|
+
|
|
3
|
+
> RISE Framework Specification — Borrowed from OpenCode for mia-code
|
|
4
|
+
> Document: rispecs/borrowed_from_opencode/092-mdns-discovery.rispec.md
|
|
5
|
+
|
|
6
|
+
## Creative Intent
|
|
7
|
+
|
|
8
|
+
mia-code announces itself on the local network via mDNS (multicast DNS), letting clients discover running instances without knowing IP addresses or port numbers. A developer starts the server on their workstation and their phone finds it automatically. A desktop app scans for local instances and presents a connection list. mDNS transforms "enter the server URL" into "select which agent to connect to" — zero-configuration networking for AI-assisted development.
|
|
9
|
+
|
|
10
|
+
## Structural Tension Analysis
|
|
11
|
+
|
|
12
|
+
**Current Reality:**
|
|
13
|
+
- mia-code runs only as a local CLI process — there is nothing to discover
|
|
14
|
+
- When the HTTP server (RISE-088) is added, clients must know the exact IP and port
|
|
15
|
+
- Developers working across devices (workstation + laptop + phone) must manually configure connection URLs
|
|
16
|
+
- No automatic service announcement exists — each device is an island
|
|
17
|
+
- Multiple mia-code instances on a network are invisible to each other
|
|
18
|
+
|
|
19
|
+
**Desired State:**
|
|
20
|
+
- When mia-code server starts, it announces a service via mDNS: `_mia-code._tcp.local.`
|
|
21
|
+
- Clients on the same network discover running instances without manual configuration
|
|
22
|
+
- Service metadata includes version, hostname, project name, port, and authentication status
|
|
23
|
+
- Multiple instances are differentiated by project name in their service names
|
|
24
|
+
- Discovery completes in under 5 seconds — fast enough for interactive use
|
|
25
|
+
- mDNS is optional and can be disabled via configuration
|
|
26
|
+
|
|
27
|
+
## Desired Outcome Definition
|
|
28
|
+
|
|
29
|
+
A running mia-code server automatically announces itself as a Bonjour/mDNS service on the local network. Any mDNS-capable client discovers it by browsing for `_mia-code._tcp.local.` services. The client receives the server's IP, port, and metadata without any manual configuration.
|
|
30
|
+
|
|
31
|
+
## Natural Language Functional Description
|
|
32
|
+
|
|
33
|
+
### Service Announcement
|
|
34
|
+
|
|
35
|
+
When `mia-code serve` starts and mDNS is enabled, it publishes a service:
|
|
36
|
+
|
|
37
|
+
```
|
|
38
|
+
Service Type: _mia-code._tcp.local.
|
|
39
|
+
Service Name: mia-code - my-project._mia-code._tcp.local.
|
|
40
|
+
Port: 4096
|
|
41
|
+
TXT Records:
|
|
42
|
+
version=1.0.0
|
|
43
|
+
project=my-project
|
|
44
|
+
hostname=workstation.local
|
|
45
|
+
auth=true
|
|
46
|
+
directory=/home/user/my-project
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
The service name includes the project name (derived from the project directory or package.json name) to differentiate multiple instances.
|
|
50
|
+
|
|
51
|
+
### Discovery Process
|
|
52
|
+
|
|
53
|
+
A client discovers mia-code instances:
|
|
54
|
+
|
|
55
|
+
1. Browse for services of type `_mia-code._tcp.local.`
|
|
56
|
+
2. mDNS resolver returns a list of matching services (typically within 2-3 seconds)
|
|
57
|
+
3. For each service, resolve the hostname to an IP address
|
|
58
|
+
4. Read TXT records for metadata (version, project, auth requirement)
|
|
59
|
+
5. Present the list to the user or auto-connect to a preferred instance
|
|
60
|
+
|
|
61
|
+
### Discovery Timeout
|
|
62
|
+
|
|
63
|
+
- Default scan duration: 5 seconds
|
|
64
|
+
- Quick scan (for UIs with auto-refresh): 2 seconds
|
|
65
|
+
- Extended scan (for first-time setup): 10 seconds
|
|
66
|
+
- Scan runs asynchronously — results stream in as they are discovered
|
|
67
|
+
|
|
68
|
+
### TXT Record Fields
|
|
69
|
+
|
|
70
|
+
| Field | Description | Example |
|
|
71
|
+
|-------------|-------------------------------------------|----------------------------|
|
|
72
|
+
| `version` | mia-code server version | `1.0.0` |
|
|
73
|
+
| `project` | Project name from package.json or dirname | `my-project` |
|
|
74
|
+
| `hostname` | Machine hostname | `workstation.local` |
|
|
75
|
+
| `auth` | Whether authentication is required | `true` or `false` |
|
|
76
|
+
| `directory` | Project root directory path | `/home/user/my-project` |
|
|
77
|
+
|
|
78
|
+
### Multiple Instances
|
|
79
|
+
|
|
80
|
+
Multiple mia-code servers on the same network each publish their own service:
|
|
81
|
+
|
|
82
|
+
```
|
|
83
|
+
mia-code - frontend._mia-code._tcp.local. port:4096
|
|
84
|
+
mia-code - backend._mia-code._tcp.local. port:4097
|
|
85
|
+
mia-code - infra._mia-code._tcp.local. port:4098
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
Clients see all instances and can connect to any of them. Each instance operates independently.
|
|
89
|
+
|
|
90
|
+
### Configuration
|
|
91
|
+
|
|
92
|
+
mDNS is enabled by default. Disable via config:
|
|
93
|
+
|
|
94
|
+
```json
|
|
95
|
+
{
|
|
96
|
+
"server": {
|
|
97
|
+
"mdns": false
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
Or via CLI flag:
|
|
103
|
+
|
|
104
|
+
```bash
|
|
105
|
+
mia-code serve --no-mdns
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
### Implementation
|
|
109
|
+
|
|
110
|
+
Use the `bonjour-service` npm package (or `multicast-dns`) for cross-platform mDNS:
|
|
111
|
+
|
|
112
|
+
- **Publish**: on server start, call `bonjour.publish({type: "mia-code", protocol: "tcp", port, txt: {...}})`
|
|
113
|
+
- **Browse**: clients call `bonjour.find({type: "mia-code"})` and receive service events
|
|
114
|
+
- **Unpublish**: on server shutdown, call `bonjour.unpublishAll()` to clean up announcements
|
|
115
|
+
- Works on macOS (native Bonjour), Linux (Avahi), and Windows (Bonjour for Windows)
|
|
116
|
+
|
|
117
|
+
### Security Considerations
|
|
118
|
+
|
|
119
|
+
mDNS is used **only** for service discovery — it reveals that a mia-code instance exists and its connection parameters. It does not bypass authentication:
|
|
120
|
+
|
|
121
|
+
- If `auth=true` in TXT records, the client must provide the password to use the API
|
|
122
|
+
- mDNS broadcasts are limited to the local network segment (not routable)
|
|
123
|
+
- The `directory` TXT record can be omitted for privacy: `{"server": {"mdns": {"exposeDirectory": false}}}`
|
|
124
|
+
- Service names do not contain sensitive information
|
|
125
|
+
|
|
126
|
+
## Supporting Structures
|
|
127
|
+
|
|
128
|
+
- **HTTP API Server (RISE-088)** provides the server that mDNS announces
|
|
129
|
+
- **Desktop Remote Driving (RISE-096)** uses mDNS to auto-discover local servers
|
|
130
|
+
- **JavaScript SDK (RISE-093)** includes mDNS discovery in `MiaCodeClient.discover()`
|
|
131
|
+
- **Structured Logging (RISE-007)** logs service publication and discovery events
|
|
132
|
+
|
|
133
|
+
## Creative Advancement Scenarios
|
|
134
|
+
|
|
135
|
+
**Scenario 1 — Phone Auto-Connect:**
|
|
136
|
+
A developer opens the mia-code mobile app. It scans for `_mia-code._tcp.local.` and finds their workstation running on port 4096 with project "frontend." One tap connects. No URL typing, no port memorization — just tap and drive.
|
|
137
|
+
|
|
138
|
+
**Scenario 2 — Desktop App Server Picker:**
|
|
139
|
+
The mia-code desktop app shows a "Connect" screen listing all discovered instances: "frontend on workstation (port 4096)" and "backend on server (port 4097)." The developer clicks one and is connected. The list auto-refreshes as servers start and stop.
|
|
140
|
+
|
|
141
|
+
**Scenario 3 — Multi-Project Dashboard:**
|
|
142
|
+
A monitoring dashboard discovers all mia-code instances on the team network. It shows a grid: three developers each running agents on different projects. Token costs, active sessions, and error rates for each instance — all discovered automatically via mDNS.
|
|
143
|
+
|
|
144
|
+
**Scenario 4 — Pair Programming Discovery:**
|
|
145
|
+
Developer A starts `mia-code serve` on their machine. Developer B runs `mia-code connect --discover` and sees Developer A's instance in the list. They connect and join the session. mDNS made the connection possible without exchanging IPs or URLs.
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
# RISE-093: JavaScript SDK
|
|
2
|
+
|
|
3
|
+
> RISE Framework Specification — Borrowed from OpenCode for mia-code
|
|
4
|
+
> Document: rispecs/borrowed_from_opencode/093-javascript-sdk.rispec.md
|
|
5
|
+
|
|
6
|
+
## Creative Intent
|
|
7
|
+
|
|
8
|
+
mia-code publishes a TypeScript/JavaScript SDK that gives developers programmatic control over every aspect of the platform. Instead of shelling out to the CLI or crafting raw HTTP requests, a developer writes `const client = new MiaCodeClient({url, password})` and immediately has typed methods for sessions, messages, tools, and configuration. The SDK is auto-generated from the OpenAPI spec, ensuring types are always accurate. It is the bridge between mia-code and the ecosystem — custom UIs, workflow automation, CI/CD integration, and creative applications that no one has imagined yet.
|
|
9
|
+
|
|
10
|
+
## Structural Tension Analysis
|
|
11
|
+
|
|
12
|
+
**Current Reality:**
|
|
13
|
+
- mia-code can only be controlled via the CLI — there is no programmatic API
|
|
14
|
+
- External scripts interact by spawning `mia-code` as a subprocess and parsing stdout
|
|
15
|
+
- No TypeScript types exist for request/response shapes — consumers guess at structures
|
|
16
|
+
- Building integrations requires reverse-engineering the CLI's behavior
|
|
17
|
+
- No streaming support for programmatic consumers — you get all output or nothing
|
|
18
|
+
|
|
19
|
+
**Desired State:**
|
|
20
|
+
- A published npm package `@mia-code/sdk` provides a typed API client
|
|
21
|
+
- All methods are auto-generated from the OpenAPI spec (RISE-089) — types cannot drift
|
|
22
|
+
- Streaming support via `AsyncIterable` for real-time message consumption
|
|
23
|
+
- Error handling uses typed errors matching the Named Error System (RISE-006)
|
|
24
|
+
- The SDK works in Node.js, Deno, Bun, and browser environments
|
|
25
|
+
- Documentation is generated from TypeDoc and published alongside the package
|
|
26
|
+
|
|
27
|
+
## Desired Outcome Definition
|
|
28
|
+
|
|
29
|
+
A developer installs `@mia-code/sdk`, creates a client instance with a URL and optional password, and has full typed access to sessions, messages, tools, configuration, and permissions. Message streaming returns an `AsyncIterable` for real-time consumption. Errors are typed and descriptive.
|
|
30
|
+
|
|
31
|
+
## Natural Language Functional Description
|
|
32
|
+
|
|
33
|
+
### Installation and Setup
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
npm install @mia-code/sdk
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
```typescript
|
|
40
|
+
import { MiaCodeClient } from "@mia-code/sdk"
|
|
41
|
+
|
|
42
|
+
const client = new MiaCodeClient({
|
|
43
|
+
url: "http://localhost:4096",
|
|
44
|
+
password: "optional-password",
|
|
45
|
+
})
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
### Client API Surface
|
|
49
|
+
|
|
50
|
+
**Sessions:**
|
|
51
|
+
```typescript
|
|
52
|
+
const sessions = await client.sessions.list()
|
|
53
|
+
const session = await client.sessions.create({ title: "Refactor auth", directory: "/app" })
|
|
54
|
+
const details = await client.sessions.get(session.id)
|
|
55
|
+
await client.sessions.delete(session.id)
|
|
56
|
+
await client.sessions.update(session.id, { title: "New title" })
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
**Messages:**
|
|
60
|
+
```typescript
|
|
61
|
+
// Send and wait for complete response
|
|
62
|
+
const response = await client.messages.send(sessionId, "Explain this function")
|
|
63
|
+
|
|
64
|
+
// Stream response tokens as they arrive
|
|
65
|
+
for await (const event of client.messages.stream(sessionId, "Refactor this")) {
|
|
66
|
+
if (event.type === "delta") process.stdout.write(event.content)
|
|
67
|
+
if (event.type === "tool_start") console.log(`Running ${event.toolName}...`)
|
|
68
|
+
if (event.type === "done") console.log("\nComplete!")
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
// Get message history
|
|
72
|
+
const messages = await client.messages.list(sessionId, { limit: 50 })
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
**Tools:**
|
|
76
|
+
```typescript
|
|
77
|
+
const tools = await client.tools.list()
|
|
78
|
+
const result = await client.tools.execute("bash", { command: "ls -la" })
|
|
79
|
+
const tool = await client.tools.get("grep")
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
**Configuration:**
|
|
83
|
+
```typescript
|
|
84
|
+
const config = await client.config.get()
|
|
85
|
+
await client.config.update({ model: "claude-sonnet-4-20250514" })
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
**Permissions:**
|
|
89
|
+
```typescript
|
|
90
|
+
const rules = await client.permissions.list()
|
|
91
|
+
await client.permissions.respond(requestId, "y")
|
|
92
|
+
await client.permissions.reset()
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
**Discovery (mDNS):**
|
|
96
|
+
```typescript
|
|
97
|
+
const instances = await MiaCodeClient.discover({ timeout: 5000 })
|
|
98
|
+
// [{url: "http://192.168.1.10:4096", project: "frontend", auth: true}, ...]
|
|
99
|
+
const client = new MiaCodeClient(instances[0])
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### Streaming Implementation
|
|
103
|
+
|
|
104
|
+
Message streaming uses SSE (RISE-091) under the hood, exposed as an `AsyncIterable`:
|
|
105
|
+
|
|
106
|
+
```typescript
|
|
107
|
+
interface StreamEvent {
|
|
108
|
+
type: "delta" | "tool_start" | "tool_result" | "permission" | "error" | "done"
|
|
109
|
+
data: object
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
// The stream is an AsyncIterable — works with for-await-of
|
|
113
|
+
const stream = client.messages.stream(sessionId, content)
|
|
114
|
+
|
|
115
|
+
// Can also be consumed with callbacks
|
|
116
|
+
stream.on("delta", (data) => { /* ... */ })
|
|
117
|
+
stream.on("done", (data) => { /* ... */ })
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
### Error Handling
|
|
121
|
+
|
|
122
|
+
SDK errors are typed and match the Named Error System:
|
|
123
|
+
|
|
124
|
+
```typescript
|
|
125
|
+
import { SessionNotFoundError, PermissionDeniedError, ValidationError } from "@mia-code/sdk"
|
|
126
|
+
|
|
127
|
+
try {
|
|
128
|
+
await client.sessions.get("nonexistent")
|
|
129
|
+
} catch (error) {
|
|
130
|
+
if (error instanceof SessionNotFoundError) {
|
|
131
|
+
console.log("Session does not exist:", error.message)
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
All errors extend `MiaCodeError` with `name`, `message`, and `code` properties.
|
|
137
|
+
|
|
138
|
+
### Type Safety
|
|
139
|
+
|
|
140
|
+
All request and response types are generated from Zod schemas via the OpenAPI spec:
|
|
141
|
+
|
|
142
|
+
```typescript
|
|
143
|
+
import type { Session, Message, Tool, PermissionRule } from "@mia-code/sdk"
|
|
144
|
+
|
|
145
|
+
// TypeScript enforces correct usage
|
|
146
|
+
const session: Session = await client.sessions.create({
|
|
147
|
+
title: "My session",
|
|
148
|
+
directory: "/app",
|
|
149
|
+
// model: 123 ← TypeScript error: must be string
|
|
150
|
+
})
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
### Package Structure
|
|
154
|
+
|
|
155
|
+
```
|
|
156
|
+
@mia-code/sdk/
|
|
157
|
+
├── index.ts # main exports: MiaCodeClient, types, errors
|
|
158
|
+
├── client.ts # MiaCodeClient class
|
|
159
|
+
├── sessions.ts # SessionsAPI class
|
|
160
|
+
├── messages.ts # MessagesAPI class (with streaming)
|
|
161
|
+
├── tools.ts # ToolsAPI class
|
|
162
|
+
├── config.ts # ConfigAPI class
|
|
163
|
+
├── permissions.ts # PermissionsAPI class
|
|
164
|
+
├── discovery.ts # mDNS discovery
|
|
165
|
+
├── errors.ts # typed error classes
|
|
166
|
+
├── types.ts # generated types from OpenAPI
|
|
167
|
+
└── stream.ts # SSE/WebSocket streaming utilities
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
### Environment Support
|
|
171
|
+
|
|
172
|
+
The SDK works across JavaScript runtimes:
|
|
173
|
+
|
|
174
|
+
- **Node.js 18+**: full support including mDNS discovery
|
|
175
|
+
- **Deno**: full support via npm compatibility
|
|
176
|
+
- **Bun**: full support
|
|
177
|
+
- **Browser**: all features except mDNS discovery (uses EventSource for streaming)
|
|
178
|
+
|
|
179
|
+
## Supporting Structures
|
|
180
|
+
|
|
181
|
+
- **HTTP API Server (RISE-088)** provides the endpoints the SDK calls
|
|
182
|
+
- **OpenAPI Spec Generation (RISE-089)** generates the spec the SDK types are derived from
|
|
183
|
+
- **SSE Streaming (RISE-091)** powers the message streaming feature
|
|
184
|
+
- **WebSocket Support (RISE-090)** provides an alternative streaming transport
|
|
185
|
+
- **mDNS Discovery (RISE-092)** powers the `MiaCodeClient.discover()` method
|
|
186
|
+
- **Named Error System (RISE-006)** defines the error types the SDK exposes
|
|
187
|
+
|
|
188
|
+
## Creative Advancement Scenarios
|
|
189
|
+
|
|
190
|
+
**Scenario 1 — Custom Web UI:**
|
|
191
|
+
A developer builds a custom chat interface using React and the SDK. `client.messages.stream()` feeds tokens into a state store. Tool executions render as expandable panels. The entire UI is 200 lines of TypeScript because the SDK handles all API complexity.
|
|
192
|
+
|
|
193
|
+
**Scenario 2 — CI/CD Code Review Bot:**
|
|
194
|
+
A GitHub Actions workflow uses the SDK to create a session, send a PR diff as a prompt, and collect the agent's review. The response is posted as a PR comment. The SDK's typed API ensures correct usage without reading API docs.
|
|
195
|
+
|
|
196
|
+
**Scenario 3 — Batch Automation:**
|
|
197
|
+
A Node.js script iterates over 50 files and sends each to mia-code for refactoring. `for await` streams each response, logging progress. Errors are caught and logged with typed error names. The script runs unattended overnight.
|
|
198
|
+
|
|
199
|
+
**Scenario 4 — VS Code Extension:**
|
|
200
|
+
A VS Code extension uses the SDK to connect to a running mia-code server. The developer highlights code, triggers a command, and the extension sends the selection as a prompt via `client.messages.send()`. The response appears in a panel — IDE-integrated AI assistance powered by the same mia-code agent.
|