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
package/src/mcp/utils.ts
CHANGED
|
@@ -3,10 +3,13 @@
|
|
|
3
3
|
*/
|
|
4
4
|
|
|
5
5
|
import { spawn } from "child_process";
|
|
6
|
-
|
|
7
|
-
import {
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
// Using low-level Server for direct JSON schema control (McpServer requires Zod)
|
|
7
|
+
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
8
|
+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
9
|
+
import {
|
|
10
|
+
ListToolsRequestSchema,
|
|
11
|
+
CallToolRequestSchema,
|
|
12
|
+
} from "@modelcontextprotocol/sdk/types.js";
|
|
10
13
|
|
|
11
14
|
export interface MCPTool {
|
|
12
15
|
name: string;
|
|
@@ -23,6 +26,7 @@ export interface MCPTool {
|
|
|
23
26
|
}
|
|
24
27
|
|
|
25
28
|
export interface MCPToolResult {
|
|
29
|
+
[key: string]: unknown;
|
|
26
30
|
content: Array<{
|
|
27
31
|
type: "text";
|
|
28
32
|
text: string;
|
|
@@ -33,7 +37,6 @@ export interface MCPToolResult {
|
|
|
33
37
|
export interface MCPServerConfig {
|
|
34
38
|
name: string;
|
|
35
39
|
version: string;
|
|
36
|
-
cliPath: string;
|
|
37
40
|
tools: MCPTool[];
|
|
38
41
|
}
|
|
39
42
|
|
|
@@ -105,17 +108,47 @@ export function buildArgs(
|
|
|
105
108
|
mapping: Record<string, string>
|
|
106
109
|
): string[] {
|
|
107
110
|
const result = [...command];
|
|
108
|
-
|
|
111
|
+
|
|
109
112
|
for (const [key, flag] of Object.entries(mapping)) {
|
|
110
113
|
const value = args[key];
|
|
111
114
|
if (value !== undefined && value !== null && value !== "") {
|
|
112
115
|
result.push(flag, String(value));
|
|
113
116
|
}
|
|
114
117
|
}
|
|
115
|
-
|
|
118
|
+
|
|
116
119
|
if (args.session) {
|
|
117
120
|
result.push("--session", args.session);
|
|
118
121
|
}
|
|
119
|
-
|
|
122
|
+
|
|
120
123
|
return result;
|
|
121
124
|
}
|
|
125
|
+
|
|
126
|
+
/**
|
|
127
|
+
* Bootstrap an MCP server with JSON-RPC over stdio transport.
|
|
128
|
+
* Uses low-level Server API for direct JSON schema passthrough.
|
|
129
|
+
*/
|
|
130
|
+
export async function bootstrapMCPServer(
|
|
131
|
+
config: MCPServerConfig,
|
|
132
|
+
handleTool: (name: string, args: Record<string, any>) => Promise<MCPToolResult>
|
|
133
|
+
): Promise<void> {
|
|
134
|
+
const server = new Server(
|
|
135
|
+
{ name: config.name, version: config.version },
|
|
136
|
+
{ capabilities: { tools: {} } }
|
|
137
|
+
);
|
|
138
|
+
|
|
139
|
+
server.setRequestHandler(ListToolsRequestSchema, async () => ({
|
|
140
|
+
tools: config.tools.map(t => ({
|
|
141
|
+
name: t.name,
|
|
142
|
+
description: t.description,
|
|
143
|
+
inputSchema: t.inputSchema,
|
|
144
|
+
})),
|
|
145
|
+
}));
|
|
146
|
+
|
|
147
|
+
server.setRequestHandler(CallToolRequestSchema, async (request: any) => {
|
|
148
|
+
const { name, arguments: args } = request.params;
|
|
149
|
+
return handleTool(name, args ?? {});
|
|
150
|
+
});
|
|
151
|
+
|
|
152
|
+
const transport = new StdioServerTransport();
|
|
153
|
+
await server.connect(transport);
|
|
154
|
+
}
|
package/src/sessionStore.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import fs from "fs";
|
|
2
2
|
import path from "path";
|
|
3
3
|
import os from "os";
|
|
4
|
-
import { MiaCodeSessionMeta, ChatMessage } from "./types.js";
|
|
4
|
+
import { MiaCodeSessionMeta, ChatMessage, Engine } from "./types.js";
|
|
5
5
|
|
|
6
6
|
const SESSIONS_FILE = path.join(os.homedir(), ".mia-code-sessions.json");
|
|
7
7
|
const HISTORY_DIR = path.join(os.homedir(), ".mia-code-history");
|
|
@@ -11,6 +11,11 @@ interface SessionIndex {
|
|
|
11
11
|
byId: Record<string, MiaCodeSessionMeta>;
|
|
12
12
|
}
|
|
13
13
|
|
|
14
|
+
/** Build the engine-qualified key for byProjectRoot lookup. */
|
|
15
|
+
function projectKey(projectRoot: string, engine?: Engine): string {
|
|
16
|
+
return engine ? `${engine}:${projectRoot}` : projectRoot;
|
|
17
|
+
}
|
|
18
|
+
|
|
14
19
|
function loadIndex(): SessionIndex {
|
|
15
20
|
if (!fs.existsSync(SESSIONS_FILE)) {
|
|
16
21
|
return { byProjectRoot: {}, byId: {} };
|
|
@@ -34,7 +39,16 @@ function saveIndex(index: SessionIndex): void {
|
|
|
34
39
|
export function rememberSession(meta: MiaCodeSessionMeta): void {
|
|
35
40
|
const idx = loadIndex();
|
|
36
41
|
if (meta.projectRoot) {
|
|
37
|
-
|
|
42
|
+
// Store under engine-qualified key so each engine has its own "last session"
|
|
43
|
+
idx.byProjectRoot[projectKey(meta.projectRoot, meta.engine)] = meta;
|
|
44
|
+
|
|
45
|
+
// Clean up stale legacy (unqualified) entry if it points to this same session,
|
|
46
|
+
// preventing a different engine from claiming it via fallback.
|
|
47
|
+
const legacyKey = meta.projectRoot; // bare, no engine prefix
|
|
48
|
+
const legacy = idx.byProjectRoot[legacyKey];
|
|
49
|
+
if (legacy && legacy.id === meta.id && meta.engine) {
|
|
50
|
+
delete idx.byProjectRoot[legacyKey];
|
|
51
|
+
}
|
|
38
52
|
}
|
|
39
53
|
idx.byId[meta.id] = meta;
|
|
40
54
|
saveIndex(idx);
|
|
@@ -46,7 +60,7 @@ export function markSessionInitialized(id: string): void {
|
|
|
46
60
|
if (session) {
|
|
47
61
|
session.initialized = true;
|
|
48
62
|
if (session.projectRoot) {
|
|
49
|
-
idx.byProjectRoot[session.projectRoot] = session;
|
|
63
|
+
idx.byProjectRoot[projectKey(session.projectRoot, session.engine)] = session;
|
|
50
64
|
}
|
|
51
65
|
saveIndex(idx);
|
|
52
66
|
}
|
|
@@ -57,8 +71,34 @@ export function isSessionInitialized(id: string): boolean {
|
|
|
57
71
|
return idx.byId[id]?.initialized ?? false;
|
|
58
72
|
}
|
|
59
73
|
|
|
60
|
-
|
|
74
|
+
/**
|
|
75
|
+
* Get the last session for a project, optionally filtered by engine.
|
|
76
|
+
* When engine is provided, only returns a session owned by that engine.
|
|
77
|
+
* Falls back to legacy unqualified key if no engine-specific entry exists
|
|
78
|
+
* (for backward compatibility with pre-engine sessions).
|
|
79
|
+
*/
|
|
80
|
+
export function getLastSessionForProject(projectRoot: string, engine?: Engine): MiaCodeSessionMeta | null {
|
|
61
81
|
const idx = loadIndex();
|
|
82
|
+
|
|
83
|
+
// Try engine-qualified key first
|
|
84
|
+
if (engine) {
|
|
85
|
+
const qualified = idx.byProjectRoot[projectKey(projectRoot, engine)];
|
|
86
|
+
if (qualified) return qualified;
|
|
87
|
+
|
|
88
|
+
// Fallback: check unqualified key for legacy sessions that match engine
|
|
89
|
+
const legacy = idx.byProjectRoot[projectRoot];
|
|
90
|
+
if (legacy && (legacy.engine === engine || !legacy.engine)) {
|
|
91
|
+
// Migrate: promote to engine-qualified key and remove stale legacy entry
|
|
92
|
+
// so no other engine can claim it via the same fallback path.
|
|
93
|
+
idx.byProjectRoot[projectKey(projectRoot, engine)] = { ...legacy, engine };
|
|
94
|
+
delete idx.byProjectRoot[projectRoot];
|
|
95
|
+
saveIndex(idx);
|
|
96
|
+
return { ...legacy, engine };
|
|
97
|
+
}
|
|
98
|
+
return null;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
// No engine filter — return whatever is there (unqualified key)
|
|
62
102
|
return idx.byProjectRoot[projectRoot] ?? null;
|
|
63
103
|
}
|
|
64
104
|
|
package/src/types.ts
CHANGED
|
@@ -18,8 +18,9 @@ export interface MiaCodeSessionMeta {
|
|
|
18
18
|
id: string;
|
|
19
19
|
startedAt: string;
|
|
20
20
|
model: string;
|
|
21
|
+
engine?: Engine; // Which engine owns this session
|
|
21
22
|
projectRoot: string | null;
|
|
22
|
-
initialized?: boolean;
|
|
23
|
+
initialized?: boolean; // Has engine acknowledged this session?
|
|
23
24
|
}
|
|
24
25
|
|
|
25
26
|
export interface ChatMessage {
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# 🌅 Mia Ceremony — Four Movements Footer
|
|
2
|
+
|
|
3
|
+
Tracks ceremony phase in Pi's footer status bar. Transitions automatically based on tool usage.
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
# Quick test (works best with mia-tools loaded too)
|
|
9
|
+
pi -e /a/src/mia-code/widget/mia-ceremony/index.ts
|
|
10
|
+
|
|
11
|
+
# Permanent
|
|
12
|
+
ln -s /a/src/mia-code/widget/mia-ceremony/index.ts ~/.pi/agent/extensions/mia-ceremony.ts
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## Phases
|
|
16
|
+
|
|
17
|
+
| Phase | When | Trigger |
|
|
18
|
+
|-------|------|---------|
|
|
19
|
+
| 🌅 EAST — Gathering | Understanding, decomposing | Session start, PDE decompose |
|
|
20
|
+
| 🔥 SOUTH — Building | Implementing, growing | STC chart create |
|
|
21
|
+
| 🌊 WEST — Validating | Testing, reflecting | STC steps completed |
|
|
22
|
+
| ❄️ NORTH — Completing | Deploying, documenting | STC review |
|
|
23
|
+
|
|
24
|
+
## Commands
|
|
25
|
+
|
|
26
|
+
- `/ceremony` — Show current phase
|
|
27
|
+
- `/ceremony south` — Manually set phase
|
|
28
|
+
|
|
29
|
+
## Load All Three Together
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
pi \
|
|
33
|
+
-e /a/src/mia-code/widget/miette-echo/index.ts \
|
|
34
|
+
-e /a/src/mia-code/widget/mia-tools/index.ts \
|
|
35
|
+
-e /a/src/mia-code/widget/mia-ceremony/index.ts
|
|
36
|
+
```
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 🌅 Mia Ceremony — Four Movements Session Lifecycle
|
|
3
|
+
*
|
|
4
|
+
* Tracks ceremony phase in the footer status bar:
|
|
5
|
+
* 🌅 EAST — Gathering (understanding, decomposing)
|
|
6
|
+
* 🔥 SOUTH — Building (implementing, growing)
|
|
7
|
+
* 🌊 WEST — Validating (testing, reflecting)
|
|
8
|
+
* ❄️ NORTH — Completing (deploying, documenting)
|
|
9
|
+
*
|
|
10
|
+
* Phase transitions happen automatically based on tool usage:
|
|
11
|
+
* - PDE decompose → EAST
|
|
12
|
+
* - STC chart create → SOUTH
|
|
13
|
+
* - STC step complete → progresses toward WEST/NORTH
|
|
14
|
+
* - STC review → NORTH
|
|
15
|
+
*
|
|
16
|
+
* Manual: /ceremony [east|south|west|north] to set phase
|
|
17
|
+
*
|
|
18
|
+
* Install: ln -s /a/src/mia-code/widget/mia-ceremony/index.ts ~/.pi/agent/extensions/mia-ceremony.ts
|
|
19
|
+
* Or test: pi -e /a/src/mia-code/widget/mia-ceremony/index.ts
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
import type { ExtensionAPI, ExtensionContext } from "@mariozechner/pi-coding-agent";
|
|
23
|
+
|
|
24
|
+
type Direction = "east" | "south" | "west" | "north";
|
|
25
|
+
|
|
26
|
+
interface CeremonyState {
|
|
27
|
+
phase: Direction;
|
|
28
|
+
turnCount: number;
|
|
29
|
+
pdeUsed: boolean;
|
|
30
|
+
chartCreated: boolean;
|
|
31
|
+
stepsCompleted: number;
|
|
32
|
+
reviewDone: boolean;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const PHASES: Record<Direction, { emoji: string; name: string; verb: string }> = {
|
|
36
|
+
east: { emoji: "🌅", name: "EAST", verb: "Gathering" },
|
|
37
|
+
south: { emoji: "🔥", name: "SOUTH", verb: "Building" },
|
|
38
|
+
west: { emoji: "🌊", name: "WEST", verb: "Validating" },
|
|
39
|
+
north: { emoji: "❄️", name: "NORTH", verb: "Completing" },
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
function phaseLabel(dir: Direction): string {
|
|
43
|
+
const p = PHASES[dir];
|
|
44
|
+
return `${p.emoji} ${p.name} — ${p.verb}`;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export default function miaCeremony(pi: ExtensionAPI) {
|
|
48
|
+
const state: CeremonyState = {
|
|
49
|
+
phase: "east",
|
|
50
|
+
turnCount: 0,
|
|
51
|
+
pdeUsed: false,
|
|
52
|
+
chartCreated: false,
|
|
53
|
+
stepsCompleted: 0,
|
|
54
|
+
reviewDone: false,
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
function updateStatus(ctx: ExtensionContext) {
|
|
58
|
+
if (!ctx.hasUI) return;
|
|
59
|
+
ctx.ui.setStatus("ceremony", phaseLabel(state.phase));
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
function inferPhase(): Direction {
|
|
63
|
+
// Review done → NORTH
|
|
64
|
+
if (state.reviewDone) return "north";
|
|
65
|
+
// Steps being completed → WEST (validation/reflection)
|
|
66
|
+
if (state.stepsCompleted >= 2) return "west";
|
|
67
|
+
// Chart created, working → SOUTH
|
|
68
|
+
if (state.chartCreated) return "south";
|
|
69
|
+
// PDE used or early turns → EAST
|
|
70
|
+
return "east";
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// --- Session lifecycle ---
|
|
74
|
+
|
|
75
|
+
pi.on("session_start", (_event, ctx) => {
|
|
76
|
+
updateStatus(ctx);
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
pi.on("session_switch", (_event, ctx) => {
|
|
80
|
+
updateStatus(ctx);
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
pi.on("session_shutdown", (_event, ctx) => {
|
|
84
|
+
if (ctx.hasUI) ctx.ui.setStatus("ceremony", undefined);
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
// --- Track turns ---
|
|
88
|
+
|
|
89
|
+
pi.on("turn_end", (_event, ctx) => {
|
|
90
|
+
state.turnCount++;
|
|
91
|
+
updateStatus(ctx);
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
// --- Track tool usage for automatic phase transitions ---
|
|
95
|
+
|
|
96
|
+
pi.on("tool_execution_end", (event, ctx) => {
|
|
97
|
+
const name = event.toolName;
|
|
98
|
+
|
|
99
|
+
if (name === "pde_decompose") {
|
|
100
|
+
state.pdeUsed = true;
|
|
101
|
+
// PDE means we're gathering/understanding
|
|
102
|
+
if (state.phase === "east") {
|
|
103
|
+
// Stay east — this IS east
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
if (name === "stc_create") {
|
|
108
|
+
state.chartCreated = true;
|
|
109
|
+
// Chart creation means we have a plan → SOUTH
|
|
110
|
+
state.phase = inferPhase();
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
if (name === "stc_complete_step") {
|
|
114
|
+
state.stepsCompleted++;
|
|
115
|
+
state.phase = inferPhase();
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
if (name === "stc_review") {
|
|
119
|
+
state.reviewDone = true;
|
|
120
|
+
state.phase = inferPhase();
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
updateStatus(ctx);
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
// --- Manual command ---
|
|
127
|
+
|
|
128
|
+
pi.registerCommand("ceremony", {
|
|
129
|
+
description: "Set ceremony phase: /ceremony [east|south|west|north]",
|
|
130
|
+
handler: async (args, ctx) => {
|
|
131
|
+
const dir = args.trim().toLowerCase() as Direction;
|
|
132
|
+
if (dir && PHASES[dir]) {
|
|
133
|
+
state.phase = dir;
|
|
134
|
+
updateStatus(ctx);
|
|
135
|
+
ctx.ui.notify(`Ceremony phase set to ${phaseLabel(dir)}`, "info");
|
|
136
|
+
} else if (!dir) {
|
|
137
|
+
ctx.ui.notify(`Current phase: ${phaseLabel(state.phase)}`, "info");
|
|
138
|
+
} else {
|
|
139
|
+
ctx.ui.notify("Usage: /ceremony [east|south|west|north]", "info");
|
|
140
|
+
}
|
|
141
|
+
},
|
|
142
|
+
});
|
|
143
|
+
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# 🌅 Mia Interceptor — Proactive PDE Sensing
|
|
2
|
+
|
|
3
|
+
Gently asks before complex prompts reach the agent.
|
|
4
|
+
|
|
5
|
+
```
|
|
6
|
+
🌅 This prompt touches 4 areas + implicit intents — want to decompose first?
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
## Install
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
# Quick test
|
|
13
|
+
pi -e /a/src/mia-code/widget/mia-interceptor/index.ts
|
|
14
|
+
|
|
15
|
+
# Permanent
|
|
16
|
+
ln -s /a/src/mia-code/widget/mia-interceptor/index.ts ~/.pi/agent/extensions/mia-interceptor.ts
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## How It Works
|
|
20
|
+
|
|
21
|
+
1. Hooks `on("input")` — sees every prompt before the agent
|
|
22
|
+
2. Counts distinct action areas (creating, testing, deploying, etc.)
|
|
23
|
+
3. Checks for implicit intent markers ("I assume", "somehow", "make sure")
|
|
24
|
+
4. If complexity ≥ 3 areas → asks the question
|
|
25
|
+
5. If yes → runs PDE, shows result in chat, then lets the original prompt proceed
|
|
26
|
+
6. If no → continues normally
|
|
27
|
+
7. Cooldown: won't ask again for 5 turns
|
|
28
|
+
|
|
29
|
+
## Behavior
|
|
30
|
+
|
|
31
|
+
- **Never blocks** — always a yes/no question, never automatic
|
|
32
|
+
- **Short prompts ignored** — under 30 chars, no question
|
|
33
|
+
- **Slash commands ignored** — `/pde`, `/stc` etc pass through
|
|
34
|
+
- **Cooldown** — won't nag, waits 5 turns between asks
|
|
35
|
+
- **PDE + continue** — decomposition shows as context, then your prompt still goes to the agent
|
|
36
|
+
|
|
37
|
+
## Future: Sensing Layer
|
|
38
|
+
|
|
39
|
+
This interceptor is designed to eventually feed miawa storytelling too — sensing milestone moments, phase transitions, and narrative-worthy beats from the flow of input.
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 🌅 Mia Interceptor — Proactive PDE Prompt Sensing
|
|
3
|
+
*
|
|
4
|
+
* Listens to every input. When a prompt looks complex (multiple verbs,
|
|
5
|
+
* conjunctions, implicit intents), gently asks:
|
|
6
|
+
*
|
|
7
|
+
* 🌅 This prompt touches 3 areas — want to decompose first? (y/n)
|
|
8
|
+
*
|
|
9
|
+
* If yes → runs pde_decompose, shows result, then lets user proceed.
|
|
10
|
+
* If no → continues normally.
|
|
11
|
+
*
|
|
12
|
+
* Light touch. Never blocks flow. Just asks once.
|
|
13
|
+
*
|
|
14
|
+
* Install: ln -s /a/src/mia-code/widget/mia-interceptor/index.ts ~/.pi/agent/extensions/mia-interceptor.ts
|
|
15
|
+
* Or test: pi -e /a/src/mia-code/widget/mia-interceptor/index.ts
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
import type { ExtensionAPI } from "@mariozechner/pi-coding-agent";
|
|
19
|
+
import { spawn } from "child_process";
|
|
20
|
+
import { existsSync, readFileSync } from "fs";
|
|
21
|
+
import { join } from "path";
|
|
22
|
+
|
|
23
|
+
const MIACO_BIN = join("/a/src/mia-code/miaco/dist/index.js");
|
|
24
|
+
|
|
25
|
+
// ============================================================================
|
|
26
|
+
// Complexity Heuristics
|
|
27
|
+
// ============================================================================
|
|
28
|
+
|
|
29
|
+
/** Action verbs that signal distinct intents */
|
|
30
|
+
const ACTION_VERBS = [
|
|
31
|
+
"create", "build", "make", "write", "generate", "design", "implement",
|
|
32
|
+
"update", "modify", "change", "refactor", "fix", "edit", "alter",
|
|
33
|
+
"analyze", "review", "check", "inspect", "study", "examine", "investigate",
|
|
34
|
+
"deploy", "publish", "release", "ship", "install", "setup", "configure",
|
|
35
|
+
"test", "validate", "verify", "debug",
|
|
36
|
+
"delete", "remove", "clean", "drop",
|
|
37
|
+
"move", "migrate", "port", "transfer",
|
|
38
|
+
"document", "explain", "describe",
|
|
39
|
+
"connect", "integrate", "link", "bridge",
|
|
40
|
+
"observe", "envision", "plan", "decompose",
|
|
41
|
+
];
|
|
42
|
+
|
|
43
|
+
/** Words that join separate intents */
|
|
44
|
+
const CONJUNCTIONS = ["and", "also", "then", "after that", "plus", "additionally", "as well", "while"];
|
|
45
|
+
|
|
46
|
+
/** Hedging language that signals implicit intents */
|
|
47
|
+
const IMPLICIT_MARKERS = [
|
|
48
|
+
"somehow", "probably", "maybe", "I assume", "you will", "I expect",
|
|
49
|
+
"which means", "so that", "in order to", "make sure",
|
|
50
|
+
];
|
|
51
|
+
|
|
52
|
+
interface ComplexityAssessment {
|
|
53
|
+
score: number;
|
|
54
|
+
areas: string[];
|
|
55
|
+
hasImplicit: boolean;
|
|
56
|
+
reason: string;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
function assessComplexity(text: string): ComplexityAssessment {
|
|
60
|
+
const lower = text.toLowerCase();
|
|
61
|
+
const words = lower.split(/\s+/);
|
|
62
|
+
|
|
63
|
+
// Count distinct action verbs
|
|
64
|
+
const foundVerbs = new Set<string>();
|
|
65
|
+
for (const verb of ACTION_VERBS) {
|
|
66
|
+
// Match whole words or verb at start of word (e.g., "creating")
|
|
67
|
+
const re = new RegExp(`\\b${verb}(e?s|ed|ing)?\\b`, "i");
|
|
68
|
+
if (re.test(lower)) {
|
|
69
|
+
foundVerbs.add(verb);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// Count conjunctions joining clauses
|
|
74
|
+
let conjunctionCount = 0;
|
|
75
|
+
for (const conj of CONJUNCTIONS) {
|
|
76
|
+
const re = new RegExp(`\\b${conj}\\b`, "gi");
|
|
77
|
+
const matches = lower.match(re);
|
|
78
|
+
if (matches) conjunctionCount += matches.length;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
// Check for implicit intent markers
|
|
82
|
+
let implicitCount = 0;
|
|
83
|
+
for (const marker of IMPLICIT_MARKERS) {
|
|
84
|
+
if (lower.includes(marker)) implicitCount++;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// Compute areas (groups of related verbs)
|
|
88
|
+
const areas: string[] = [];
|
|
89
|
+
const verbGroups: Record<string, string[]> = {
|
|
90
|
+
"creating": ["create", "build", "make", "write", "generate", "design", "implement"],
|
|
91
|
+
"modifying": ["update", "modify", "change", "refactor", "fix", "edit", "alter"],
|
|
92
|
+
"analyzing": ["analyze", "review", "check", "inspect", "study", "examine", "investigate"],
|
|
93
|
+
"deploying": ["deploy", "publish", "release", "ship", "install", "setup", "configure"],
|
|
94
|
+
"testing": ["test", "validate", "verify", "debug"],
|
|
95
|
+
"removing": ["delete", "remove", "clean", "drop"],
|
|
96
|
+
"moving": ["move", "migrate", "port", "transfer"],
|
|
97
|
+
"documenting": ["document", "explain", "describe"],
|
|
98
|
+
"integrating": ["connect", "integrate", "link", "bridge"],
|
|
99
|
+
"planning": ["observe", "envision", "plan", "decompose"],
|
|
100
|
+
};
|
|
101
|
+
|
|
102
|
+
for (const [area, verbs] of Object.entries(verbGroups)) {
|
|
103
|
+
if (verbs.some((v) => foundVerbs.has(v))) {
|
|
104
|
+
areas.push(area);
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
// Score: primarily driven by distinct areas
|
|
109
|
+
const score = areas.length + (conjunctionCount > 0 ? 0.5 : 0) + (implicitCount > 0 ? 0.5 : 0);
|
|
110
|
+
|
|
111
|
+
// Build reason
|
|
112
|
+
const parts: string[] = [];
|
|
113
|
+
if (areas.length > 1) parts.push(`${areas.length} areas (${areas.join(", ")})`);
|
|
114
|
+
if (implicitCount > 0) parts.push(`${implicitCount} implicit intent(s)`);
|
|
115
|
+
if (conjunctionCount > 1) parts.push(`${conjunctionCount} conjunctions`);
|
|
116
|
+
|
|
117
|
+
return {
|
|
118
|
+
score,
|
|
119
|
+
areas,
|
|
120
|
+
hasImplicit: implicitCount > 0,
|
|
121
|
+
reason: parts.join(", ") || "single intent",
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
// ============================================================================
|
|
126
|
+
// Extension
|
|
127
|
+
// ============================================================================
|
|
128
|
+
|
|
129
|
+
/** Threshold: prompt needs at least this many areas to trigger */
|
|
130
|
+
const COMPLEXITY_THRESHOLD = 3;
|
|
131
|
+
|
|
132
|
+
/** Don't ask again within this many turns */
|
|
133
|
+
const COOLDOWN_TURNS = 5;
|
|
134
|
+
|
|
135
|
+
export default function miaInterceptor(pi: ExtensionAPI) {
|
|
136
|
+
let turnsSinceLastAsk = COOLDOWN_TURNS; // Start ready
|
|
137
|
+
|
|
138
|
+
pi.on("turn_end", () => {
|
|
139
|
+
turnsSinceLastAsk++;
|
|
140
|
+
});
|
|
141
|
+
|
|
142
|
+
pi.on("input", async (event, ctx) => {
|
|
143
|
+
if (!ctx.hasUI) return { action: "continue" as const };
|
|
144
|
+
|
|
145
|
+
const text = event.text.trim();
|
|
146
|
+
|
|
147
|
+
// Skip slash commands, short prompts, or cooldown
|
|
148
|
+
if (text.startsWith("/") || text.length < 30 || turnsSinceLastAsk < COOLDOWN_TURNS) {
|
|
149
|
+
return { action: "continue" as const };
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
const assessment = assessComplexity(text);
|
|
153
|
+
|
|
154
|
+
if (assessment.score >= COMPLEXITY_THRESHOLD) {
|
|
155
|
+
const areaCount = assessment.areas.length;
|
|
156
|
+
const implicit = assessment.hasImplicit ? " + implicit intents" : "";
|
|
157
|
+
const message = `🌅 This prompt touches ${areaCount} areas${implicit} — want to decompose first?`;
|
|
158
|
+
|
|
159
|
+
const decompose = await ctx.ui.confirm("Prompt Decomposition", message);
|
|
160
|
+
turnsSinceLastAsk = 0;
|
|
161
|
+
|
|
162
|
+
if (decompose) {
|
|
163
|
+
ctx.ui.setStatus("pde", "🌅 decomposing...");
|
|
164
|
+
|
|
165
|
+
// Run PDE
|
|
166
|
+
const result = await runMiaco(
|
|
167
|
+
["decompose", "run", "-e", "claude", "-p", text, "--json"],
|
|
168
|
+
ctx.cwd,
|
|
169
|
+
);
|
|
170
|
+
|
|
171
|
+
ctx.ui.setStatus("pde", undefined);
|
|
172
|
+
|
|
173
|
+
if (result.code === 0) {
|
|
174
|
+
const parsed = parseJson(result.stdout);
|
|
175
|
+
if (parsed?.markdownPath && existsSync(parsed.markdownPath)) {
|
|
176
|
+
const md = readFileSync(parsed.markdownPath, "utf-8");
|
|
177
|
+
pi.sendMessage({
|
|
178
|
+
customType: "pde-result",
|
|
179
|
+
content: md,
|
|
180
|
+
display: true,
|
|
181
|
+
details: parsed,
|
|
182
|
+
});
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
// Let the original prompt continue to the agent with PDE context
|
|
187
|
+
return { action: "continue" as const };
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
|
|
191
|
+
return { action: "continue" as const };
|
|
192
|
+
});
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
// ============================================================================
|
|
196
|
+
// Helpers (duplicated from mia-tools to keep extensions independent)
|
|
197
|
+
// ============================================================================
|
|
198
|
+
|
|
199
|
+
function runMiaco(args: string[], cwd: string): Promise<{ stdout: string; stderr: string; code: number }> {
|
|
200
|
+
return new Promise((resolve) => {
|
|
201
|
+
const child = spawn("node", [MIACO_BIN, ...args], {
|
|
202
|
+
cwd,
|
|
203
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
204
|
+
env: process.env,
|
|
205
|
+
});
|
|
206
|
+
let stdout = "";
|
|
207
|
+
let stderr = "";
|
|
208
|
+
child.stdout.on("data", (d: Buffer) => (stdout += d.toString()));
|
|
209
|
+
child.stderr.on("data", (d: Buffer) => (stderr += d.toString()));
|
|
210
|
+
child.on("close", (code) => resolve({ stdout, stderr, code: code ?? 1 }));
|
|
211
|
+
child.on("error", (err) => resolve({ stdout: "", stderr: err.message, code: 1 }));
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
|
|
215
|
+
function parseJson(stdout: string): any {
|
|
216
|
+
try {
|
|
217
|
+
return JSON.parse(stdout.trim());
|
|
218
|
+
} catch {
|
|
219
|
+
return null;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# 🔧 Mia Tools — PDE + STC as Pi Extension
|
|
2
|
+
|
|
3
|
+
Registers miaco's **Prompt Decomposition Engine** and **Structural Tension Charts** as LLM-callable tools and slash commands within Pi.
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
# Quick test
|
|
9
|
+
pi -e /a/src/mia-code/widget/mia-tools/index.ts
|
|
10
|
+
|
|
11
|
+
# Permanent
|
|
12
|
+
ln -s /a/src/mia-code/widget/mia-tools/index.ts ~/.pi/agent/extensions/mia-tools.ts
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
**Requires:** miaco built (`cd /a/src/mia-code/miaco && npm run build`)
|
|
16
|
+
|
|
17
|
+
## LLM-Callable Tools
|
|
18
|
+
|
|
19
|
+
| Tool | Description |
|
|
20
|
+
|------|-------------|
|
|
21
|
+
| `pde_decompose` | Decompose complex prompt into structured intents + Four Directions |
|
|
22
|
+
| `stc_create` | Create structural tension chart (outcome vs reality) |
|
|
23
|
+
| `stc_add_step` | Add action step to a chart |
|
|
24
|
+
| `stc_complete_step` | Mark step complete |
|
|
25
|
+
| `stc_review` | Creator Moment of Truth — review chart progress |
|
|
26
|
+
| `stc_list` | List active charts |
|
|
27
|
+
|
|
28
|
+
## Slash Commands
|
|
29
|
+
|
|
30
|
+
- `/pde <prompt>` — Decompose a prompt, show result in chat
|
|
31
|
+
- `/pde` — List recent decompositions
|
|
32
|
+
- `/stc` — List active charts
|
|
33
|
+
- `/stc create` — Interactive chart creation (prompts for outcome + reality)
|
|
34
|
+
|
|
35
|
+
## How It Works
|
|
36
|
+
|
|
37
|
+
Tools delegate to `miaco` CLI via `child_process.spawn` with `--json` output parsing. Custom `renderResult` provides visual summaries in the TUI.
|