qi-coding-agent 0.3.0__tar.gz → 0.4.0__tar.gz
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.
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/.gitignore +5 -2
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/.pi-lens.json +2 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/PKG-INFO +1 -1
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/design/agent-config-design.md +2 -1
- qi_coding_agent-0.4.0/design/architecture-layers.png +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/design/development.md +19 -6
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/design/overview.md +1 -1
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/design/pi-alignment.md +8 -1
- qi_coding_agent-0.4.0/design/sequence-layers.png +0 -0
- qi_coding_agent-0.4.0/design/web-lab.md +472 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/design/web.md +23 -4
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/docs/environment-variables.md +1 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/docs/json.md +1 -1
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/docs/models.md +37 -4
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/docs/providers.md +65 -40
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/docs/settings.md +17 -1
- qi_coding_agent-0.4.0/extensions/qi-a2a/README.md +243 -0
- qi_coding_agent-0.4.0/extensions/qi-a2a/pyproject.toml +20 -0
- qi_coding_agent-0.4.0/extensions/qi-a2a/qi_a2a/__init__.py +109 -0
- qi_coding_agent-0.4.0/extensions/qi-a2a/qi_a2a/card.py +232 -0
- qi_coding_agent-0.4.0/extensions/qi-a2a/qi_a2a/client.py +319 -0
- qi_coding_agent-0.4.0/extensions/qi-a2a/qi_a2a/config.py +371 -0
- qi_coding_agent-0.4.0/extensions/qi-a2a/qi_a2a/direct.py +88 -0
- qi_coding_agent-0.4.0/extensions/qi-a2a/qi_a2a/proxy.py +353 -0
- qi_coding_agent-0.4.0/extensions/qi-a2a/qi_a2a/remote.py +250 -0
- qi_coding_agent-0.4.0/extensions/qi-a2a/qi_a2a/state.py +59 -0
- qi_coding_agent-0.4.0/extensions/qi-a2a/tests/conftest.py +70 -0
- qi_coding_agent-0.4.0/extensions/qi-a2a/tests/test_qi_a2a_config.py +160 -0
- qi_coding_agent-0.4.0/extensions/qi-a2a/tests/test_qi_a2a_protocol.py +322 -0
- qi_coding_agent-0.4.0/extensions/qi-a2a/tests/test_qi_a2a_proxy.py +332 -0
- qi_coding_agent-0.4.0/extensions/qi-a2a/tests/test_qi_a2a_remote.py +311 -0
- qi_coding_agent-0.4.0/extensions/qi-agents/README.md +270 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/extensions/qi-agents/pyproject.toml +1 -1
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/extensions/qi-agents/qi_agents/__init__.py +25 -3
- qi_coding_agent-0.4.0/extensions/qi-agents/qi_agents/discovery.py +242 -0
- qi_coding_agent-0.4.0/extensions/qi-agents/qi_agents/render.py +448 -0
- qi_coding_agent-0.4.0/extensions/qi-agents/qi_agents/subagent.py +887 -0
- qi_coding_agent-0.4.0/extensions/qi-agents/tests/conftest.py +59 -0
- qi_coding_agent-0.4.0/extensions/qi-agents/tests/test_qi_agents_activity.py +266 -0
- qi_coding_agent-0.4.0/extensions/qi-agents/tests/test_qi_agents_extension.py +1204 -0
- qi_coding_agent-0.4.0/extensions/qi-agents/tests/test_qi_agents_render.py +148 -0
- qi_coding_agent-0.4.0/extensions/qi-kb/README.md +134 -0
- qi_coding_agent-0.4.0/extensions/qi-kb/docs/design.md +1053 -0
- qi_coding_agent-0.4.0/extensions/qi-kb/extension.py +14 -0
- qi_coding_agent-0.4.0/extensions/qi-kb/pyproject.toml +19 -0
- qi_coding_agent-0.4.0/extensions/qi-kb/qi_kb/__init__.py +108 -0
- qi_coding_agent-0.4.0/extensions/qi-kb/qi_kb/auth.py +348 -0
- qi_coding_agent-0.4.0/extensions/qi-kb/qi_kb/cli.py +357 -0
- qi_coding_agent-0.4.0/extensions/qi-kb/qi_kb/client.py +286 -0
- qi_coding_agent-0.4.0/extensions/qi-kb/qi_kb/config.py +514 -0
- qi_coding_agent-0.4.0/extensions/qi-kb/qi_kb/errors.py +77 -0
- qi_coding_agent-0.4.0/extensions/qi-kb/qi_kb/format.py +199 -0
- qi_coding_agent-0.4.0/extensions/qi-kb/qi_kb/paths.py +51 -0
- qi_coding_agent-0.4.0/extensions/qi-kb/qi_kb/providers.py +315 -0
- qi_coding_agent-0.4.0/extensions/qi-kb/qi_kb/service.py +567 -0
- qi_coding_agent-0.4.0/extensions/qi-kb/qi_kb/tools.py +143 -0
- qi_coding_agent-0.4.0/extensions/qi-kb/tests/conftest.py +38 -0
- qi_coding_agent-0.4.0/extensions/qi-kb/tests/test_qi_kb_cli.py +74 -0
- qi_coding_agent-0.4.0/extensions/qi-kb/tests/test_qi_kb_client.py +176 -0
- qi_coding_agent-0.4.0/extensions/qi-kb/tests/test_qi_kb_config.py +154 -0
- qi_coding_agent-0.4.0/extensions/qi-kb/tests/test_qi_kb_tool.py +100 -0
- qi_coding_agent-0.4.0/extensions/qi-lab/README.md +342 -0
- qi_coding_agent-0.4.0/extensions/qi-lab/docs/api/README.md +232 -0
- qi_coding_agent-0.4.0/extensions/qi-lab/docs/api/a2a.md +240 -0
- qi_coding_agent-0.4.0/extensions/qi-lab/docs/api/ag-ui.md +185 -0
- qi_coding_agent-0.4.0/extensions/qi-lab/docs/api/agents.md +136 -0
- qi_coding_agent-0.4.0/extensions/qi-lab/docs/api/config.md +221 -0
- qi_coding_agent-0.4.0/extensions/qi-lab/docs/api/files.md +137 -0
- qi_coding_agent-0.4.0/extensions/qi-lab/docs/api/kb.md +310 -0
- qi_coding_agent-0.4.0/extensions/qi-lab/docs/api/mcp.md +227 -0
- qi_coding_agent-0.4.0/extensions/qi-lab/docs/api/meta.md +100 -0
- qi_coding_agent-0.4.0/extensions/qi-lab/docs/api/sessions.md +213 -0
- qi_coding_agent-0.4.0/extensions/qi-lab/docs/api/skills.md +266 -0
- qi_coding_agent-0.4.0/extensions/qi-lab/docs/api/store.md +226 -0
- qi_coding_agent-0.4.0/extensions/qi-lab/docs/api/workspaces.md +101 -0
- qi_coding_agent-0.4.0/extensions/qi-lab/pyproject.toml +19 -0
- qi_coding_agent-0.4.0/extensions/qi-lab/qi_lab/__init__.py +24 -0
- qi_coding_agent-0.4.0/extensions/qi-lab/qi_lab/activity.py +58 -0
- qi_coding_agent-0.4.0/extensions/qi-lab/qi_lab/agents.py +120 -0
- qi_coding_agent-0.4.0/extensions/qi-lab/qi_lab/agui.py +582 -0
- qi_coding_agent-0.4.0/extensions/qi-lab/qi_lab/app.py +2412 -0
- qi_coding_agent-0.4.0/extensions/qi-lab/qi_lab/pages/a2a.html +517 -0
- qi_coding_agent-0.4.0/extensions/qi-lab/qi_lab/schemas.py +1080 -0
- qi_coding_agent-0.4.0/extensions/qi-lab/qi_lab/security.py +72 -0
- qi_coding_agent-0.4.0/extensions/qi-lab/qi_lab/serve.py +230 -0
- qi_coding_agent-0.4.0/extensions/qi-lab/qi_lab/skills.py +348 -0
- qi_coding_agent-0.4.0/extensions/qi-lab/qi_lab/state.py +246 -0
- qi_coding_agent-0.4.0/extensions/qi-lab/qi_lab/static/assets/index-Ccv5_d6Y.css +1 -0
- qi_coding_agent-0.4.0/extensions/qi-lab/qi_lab/static/assets/index-G0tOoCq8.js +30 -0
- qi_coding_agent-0.4.0/extensions/qi-lab/qi_lab/static/index.html +14 -0
- qi_coding_agent-0.4.0/extensions/qi-lab/tests/conftest.py +90 -0
- qi_coding_agent-0.4.0/extensions/qi-lab/tests/test_lab_a2a_agent_pin.py +292 -0
- qi_coding_agent-0.4.0/extensions/qi-lab/tests/test_lab_a2a_api.py +564 -0
- qi_coding_agent-0.4.0/extensions/qi-lab/tests/test_lab_a2a_page.py +94 -0
- qi_coding_agent-0.4.0/extensions/qi-lab/tests/test_lab_activity.py +417 -0
- qi_coding_agent-0.4.0/extensions/qi-lab/tests/test_lab_agent_write_api.py +263 -0
- qi_coding_agent-0.4.0/extensions/qi-lab/tests/test_lab_api.py +1174 -0
- qi_coding_agent-0.4.0/extensions/qi-lab/tests/test_lab_browse.py +77 -0
- qi_coding_agent-0.4.0/extensions/qi-lab/tests/test_lab_docs_api.py +107 -0
- qi_coding_agent-0.4.0/extensions/qi-lab/tests/test_lab_extensions_api.py +399 -0
- qi_coding_agent-0.4.0/extensions/qi-lab/tests/test_lab_files.py +252 -0
- qi_coding_agent-0.4.0/extensions/qi-lab/tests/test_lab_kb_api.py +185 -0
- qi_coding_agent-0.4.0/extensions/qi-lab/tests/test_lab_mcp_write_api.py +454 -0
- qi_coding_agent-0.4.0/extensions/qi-lab/tests/test_lab_provider_add.py +114 -0
- qi_coding_agent-0.4.0/extensions/qi-lab/tests/test_lab_skill_api.py +422 -0
- qi_coding_agent-0.4.0/extensions/qi-lab/tests/test_lab_store_api.py +571 -0
- qi_coding_agent-0.4.0/extensions/qi-lab/tests/test_lab_subagent_stream.py +329 -0
- qi_coding_agent-0.4.0/extensions/qi-lab/ui/package-lock.json +2584 -0
- qi_coding_agent-0.4.0/extensions/qi-lab/ui/package.json +38 -0
- qi_coding_agent-0.4.0/extensions/qi-lab/ui/scripts/check-design.mjs +200 -0
- qi_coding_agent-0.4.0/extensions/qi-lab/ui/scripts/check-dsh-tokens.mjs +344 -0
- qi_coding_agent-0.4.0/extensions/qi-lab/ui/src/App.tsx +1213 -0
- qi_coding_agent-0.4.0/extensions/qi-lab/ui/src/api/client.test.ts +198 -0
- qi_coding_agent-0.4.0/extensions/qi-lab/ui/src/api/client.ts +712 -0
- qi_coding_agent-0.4.0/extensions/qi-lab/ui/src/api/contract.test.ts +139 -0
- qi_coding_agent-0.4.0/extensions/qi-lab/ui/src/api/types.ts +1019 -0
- qi_coding_agent-0.4.0/extensions/qi-lab/ui/src/components/A2APanel.test.ts +129 -0
- qi_coding_agent-0.4.0/extensions/qi-lab/ui/src/components/A2APanel.tsx +641 -0
- qi_coding_agent-0.4.0/extensions/qi-lab/ui/src/components/AgentDelete.test.ts +110 -0
- qi_coding_agent-0.4.0/extensions/qi-lab/ui/src/components/AgentDelete.tsx +89 -0
- qi_coding_agent-0.4.0/extensions/qi-lab/ui/src/components/AgentMenu.tsx +177 -0
- qi_coding_agent-0.4.0/extensions/qi-lab/ui/src/components/ConfirmDialog.tsx +76 -0
- qi_coding_agent-0.4.0/extensions/qi-lab/ui/src/components/DirPicker.tsx +168 -0
- qi_coding_agent-0.4.0/extensions/qi-lab/ui/src/components/Dock.tsx +454 -0
- qi_coding_agent-0.4.0/extensions/qi-lab/ui/src/components/KbMenu.tsx +151 -0
- qi_coding_agent-0.4.0/extensions/qi-lab/ui/src/components/KbPanel.tsx +425 -0
- qi_coding_agent-0.4.0/extensions/qi-lab/ui/src/components/McpPanel.test.ts +187 -0
- qi_coding_agent-0.4.0/extensions/qi-lab/ui/src/components/McpPanel.tsx +647 -0
- qi_coding_agent-0.4.0/extensions/qi-lab/ui/src/components/Rows.tsx +794 -0
- qi_coding_agent-0.4.0/extensions/qi-lab/ui/src/components/Settings.tsx +1685 -0
- qi_coding_agent-0.4.0/extensions/qi-lab/ui/src/components/StorePanel.tsx +544 -0
- qi_coding_agent-0.4.0/extensions/qi-lab/ui/src/components/icons.tsx +554 -0
- qi_coding_agent-0.4.0/extensions/qi-lab/ui/src/state/scope.test.ts +210 -0
- qi_coding_agent-0.4.0/extensions/qi-lab/ui/src/state/scope.ts +89 -0
- qi_coding_agent-0.4.0/extensions/qi-lab/ui/src/state/segments.test.ts +141 -0
- qi_coding_agent-0.4.0/extensions/qi-lab/ui/src/state/segments.ts +123 -0
- qi_coding_agent-0.4.0/extensions/qi-lab/ui/src/state/stats.test.ts +117 -0
- qi_coding_agent-0.4.0/extensions/qi-lab/ui/src/state/turn.test.ts +643 -0
- qi_coding_agent-0.4.0/extensions/qi-lab/ui/src/state/turn.ts +983 -0
- qi_coding_agent-0.4.0/extensions/qi-lab/ui/src/theme/app.css +4313 -0
- qi_coding_agent-0.4.0/extensions/qi-lab/ui/src/theme/tokens.css +659 -0
- qi_coding_agent-0.4.0/extensions/qi-lab/ui/vite.config.ts +22 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/extensions/qi-mcp/README.md +2 -1
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/extensions/qi-mcp/pyproject.toml +1 -1
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/extensions/qi-mcp/qi_mcp/role.py +18 -6
- qi_coding_agent-0.4.0/extensions/qi-store/README.md +613 -0
- qi_coding_agent-0.4.0/extensions/qi-store/docs/config-files.md +146 -0
- qi_coding_agent-0.4.0/extensions/qi-store/docs/hikqin-api.md +192 -0
- qi_coding_agent-0.4.0/extensions/qi-store/extension.py +14 -0
- qi_coding_agent-0.4.0/extensions/qi-store/pyproject.toml +19 -0
- qi_coding_agent-0.4.0/extensions/qi-store/qi_store/__init__.py +25 -0
- qi_coding_agent-0.4.0/extensions/qi-store/qi_store/actions.py +92 -0
- qi_coding_agent-0.4.0/extensions/qi-store/qi_store/catalog.py +213 -0
- qi_coding_agent-0.4.0/extensions/qi-store/qi_store/cli.py +1093 -0
- qi_coding_agent-0.4.0/extensions/qi-store/qi_store/client.py +295 -0
- qi_coding_agent-0.4.0/extensions/qi-store/qi_store/config.py +233 -0
- qi_coding_agent-0.4.0/extensions/qi-store/qi_store/errors.py +75 -0
- qi_coding_agent-0.4.0/extensions/qi-store/qi_store/installer.py +257 -0
- qi_coding_agent-0.4.0/extensions/qi-store/qi_store/kinds/__init__.py +31 -0
- qi_coding_agent-0.4.0/extensions/qi-store/qi_store/kinds/a2a.py +87 -0
- qi_coding_agent-0.4.0/extensions/qi-store/qi_store/kinds/agent.py +356 -0
- qi_coding_agent-0.4.0/extensions/qi-store/qi_store/kinds/base.py +83 -0
- qi_coding_agent-0.4.0/extensions/qi-store/qi_store/kinds/kb.py +77 -0
- qi_coding_agent-0.4.0/extensions/qi-store/qi_store/kinds/mcp.py +126 -0
- qi_coding_agent-0.4.0/extensions/qi-store/qi_store/kinds/skill.py +209 -0
- qi_coding_agent-0.4.0/extensions/qi-store/qi_store/ledger.py +142 -0
- qi_coding_agent-0.4.0/extensions/qi-store/qi_store/ops.py +108 -0
- qi_coding_agent-0.4.0/extensions/qi-store/qi_store/paths.py +86 -0
- qi_coding_agent-0.4.0/extensions/qi-store/qi_store/planner.py +86 -0
- qi_coding_agent-0.4.0/extensions/qi-store/qi_store/service.py +519 -0
- qi_coding_agent-0.4.0/extensions/qi-store/qi_store/verify.py +45 -0
- qi_coding_agent-0.4.0/extensions/qi-store/tests/conftest.py +73 -0
- qi_coding_agent-0.4.0/extensions/qi-store/tests/fixtures/a2a_agents.json +70 -0
- qi_coding_agent-0.4.0/extensions/qi-store/tests/fixtures/agent_detail.json +62 -0
- qi_coding_agent-0.4.0/extensions/qi-store/tests/fixtures/agents_list.json +128 -0
- qi_coding_agent-0.4.0/extensions/qi-store/tests/fixtures/error_401.json +5 -0
- qi_coding_agent-0.4.0/extensions/qi-store/tests/fixtures/login.json +13 -0
- qi_coding_agent-0.4.0/extensions/qi-store/tests/fixtures/mcp_server_synthetic.json +21 -0
- qi_coding_agent-0.4.0/extensions/qi-store/tests/fixtures/mcp_servers_live_empty.json +6 -0
- qi_coding_agent-0.4.0/extensions/qi-store/tests/fixtures/rag_kb_available.json +34 -0
- qi_coding_agent-0.4.0/extensions/qi-store/tests/fixtures/skill_detail.json +21 -0
- qi_coding_agent-0.4.0/extensions/qi-store/tests/fixtures/skill_files.json +27 -0
- qi_coding_agent-0.4.0/extensions/qi-store/tests/fixtures/skills.json +51 -0
- qi_coding_agent-0.4.0/extensions/qi-store/tests/qstore_testkit.py +205 -0
- qi_coding_agent-0.4.0/extensions/qi-store/tests/test_qi_store_agent_kind.py +323 -0
- qi_coding_agent-0.4.0/extensions/qi-store/tests/test_qi_store_cli.py +228 -0
- qi_coding_agent-0.4.0/extensions/qi-store/tests/test_qi_store_client.py +204 -0
- qi_coding_agent-0.4.0/extensions/qi-store/tests/test_qi_store_config.py +123 -0
- qi_coding_agent-0.4.0/extensions/qi-store/tests/test_qi_store_flow.py +452 -0
- qi_coding_agent-0.4.0/extensions/qi-store/tests/test_qi_store_kb_kind.py +74 -0
- qi_coding_agent-0.4.0/extensions/qi-store/tests/test_qi_store_lifecycle.py +214 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/extensions/qi-web/pyproject.toml +1 -1
- qi_coding_agent-0.4.0/extensions/qi-web/qi_web/browse.py +85 -0
- qi_coding_agent-0.4.0/extensions/qi-web/qi_web/files.py +230 -0
- qi_coding_agent-0.4.0/extensions/qi-web/ui/index.html +13 -0
- qi_coding_agent-0.4.0/extensions/qi-web/ui/src/commands.tsx +163 -0
- qi_coding_agent-0.4.0/extensions/qi-web/ui/src/components/CommandMenu.tsx +157 -0
- qi_coding_agent-0.4.0/extensions/qi-web/ui/src/components/FilePanel.tsx +386 -0
- qi_coding_agent-0.4.0/extensions/qi-web/ui/src/components/ModelMenu.test.ts +28 -0
- qi_coding_agent-0.4.0/extensions/qi-web/ui/src/components/ModelMenu.tsx +211 -0
- qi_coding_agent-0.4.0/extensions/qi-web/ui/src/components/ProjectMenu.tsx +141 -0
- qi_coding_agent-0.4.0/extensions/qi-web/ui/src/components/Rail.tsx +371 -0
- qi_coding_agent-0.4.0/extensions/qi-web/ui/src/components/RowMenu.tsx +165 -0
- qi_coding_agent-0.4.0/extensions/qi-web/ui/src/components/SidebarSection.tsx +126 -0
- qi_coding_agent-0.4.0/extensions/qi-web/ui/src/main.tsx +14 -0
- qi_coding_agent-0.4.0/extensions/qi-web/ui/src/markdown/cjk.ts +100 -0
- qi_coding_agent-0.4.0/extensions/qi-web/ui/src/markdown/markdown.test.ts +121 -0
- qi_coding_agent-0.4.0/extensions/qi-web/ui/src/markdown/parse.ts +29 -0
- qi_coding_agent-0.4.0/extensions/qi-web/ui/src/markdown/render.tsx +324 -0
- qi_coding_agent-0.4.0/extensions/qi-web/ui/src/state/projects.test.ts +265 -0
- qi_coding_agent-0.4.0/extensions/qi-web/ui/src/state/projects.ts +233 -0
- qi_coding_agent-0.4.0/extensions/qi-web/ui/src/state/route.test.ts +46 -0
- qi_coding_agent-0.4.0/extensions/qi-web/ui/src/state/route.ts +40 -0
- qi_coding_agent-0.4.0/extensions/qi-web/ui/src/state/stats.ts +85 -0
- qi_coding_agent-0.4.0/extensions/qi-web/ui/src/theme/theme.ts +23 -0
- qi_coding_agent-0.4.0/extensions/qi-web/ui/src/vite-env.d.ts +5 -0
- qi_coding_agent-0.4.0/extensions/qi-web/ui/tsconfig.json +19 -0
- qi_coding_agent-0.4.0/extensions/qi-web/ui/vitest.config.ts +15 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/pyproject.toml +6 -2
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/pyrightconfig.json +4 -1
- qi_coding_agent-0.4.0/scripts/e2e_ui_lab.py +392 -0
- qi_coding_agent-0.4.0/src/qi_agent/__init__.py +33 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/src/qi_agent/auth.py +17 -8
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/src/qi_agent/cli.py +286 -39
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/src/qi_agent/config.py +36 -4
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/src/qi_agent/llm.py +136 -10
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/src/qi_agent/model_catalog.py +15 -2
- qi_coding_agent-0.4.0/src/qi_agent/presets.py +487 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/src/qi_agent/prompt.py +25 -18
- qi_coding_agent-0.4.0/src/qi_agent/provider_headers.py +49 -0
- qi_coding_agent-0.4.0/src/qi_agent/retry.py +146 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/src/qi_agent/runner.py +108 -31
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/src/qi_agent/runtime.py +40 -3
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/src/qi_agent/tui.py +29 -1
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/tests/conftest.py +6 -6
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/tests/test_auth_key.py +16 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/tests/test_cli_init.py +261 -4
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/tests/test_config.py +53 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/tests/test_contract_p0.py +57 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/tests/test_extension_run_agent.py +41 -1
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/tests/test_model_catalog.py +63 -2
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/tests/test_presets.py +216 -16
- qi_coding_agent-0.4.0/tests/test_provider_headers.py +225 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/tests/test_qi_mcp_http.py +2 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/tests/test_qi_mcp_role.py +104 -11
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/tests/test_qi_mcp_stdio.py +2 -0
- qi_coding_agent-0.4.0/tests/test_retry.py +118 -0
- qi_coding_agent-0.4.0/tests/test_runner_retry.py +174 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/tests/test_streaming.py +149 -2
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/tests/test_web_api.py +1 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/tests/test_web_files.py +2 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/uv.lock +1 -1
- qi_coding_agent-0.3.0/extensions/qi-agents/README.md +0 -160
- qi_coding_agent-0.3.0/extensions/qi-agents/qi_agents/discovery.py +0 -133
- qi_coding_agent-0.3.0/extensions/qi-agents/qi_agents/subagent.py +0 -296
- qi_coding_agent-0.3.0/src/qi_agent/__init__.py +0 -18
- qi_coding_agent-0.3.0/src/qi_agent/presets.py +0 -293
- qi_coding_agent-0.3.0/tests/test_qi_agents_extension.py +0 -441
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/.github/workflows/publish.yml +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/LICENSE +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/README.md +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/THIRD_PARTY_NOTICES.md +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/design/PLAN.md +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/design/bash-allowlist.md +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/design/dispatcher.md +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/design/extensions-design.md +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/design/internals.md +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/design/plugins.md +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/docs/cli.md +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/docs/compaction.md +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/docs/configuration.md +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/docs/containerization.md +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/docs/docs.json +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/docs/extensions.md +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/docs/how-qi-works.md +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/docs/index.md +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/docs/keybindings.md +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/docs/packages.md +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/docs/quickstart.md +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/docs/security.md +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/docs/session-format.md +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/docs/sessions.md +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/docs/skills.md +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/docs/slash-commands.md +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/docs/themes.md +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/docs/tui.md +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/docs/usage.md +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/examples/agents/README.md +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/examples/agents/code-analyst/agent.md +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/examples/agents/code-analyst/assets/review-rules.md +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/examples/agents/code-analyst/mcp.json +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/examples/agents/code-analyst/skills/code-review-checklist/SKILL.md +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/examples/agents/code-reviewer/agent.md +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/examples/agents/data-analyst/agent.md +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/examples/agents/doc-writer/agent.md +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/examples/agents/doc-writer/assets/doc-style.md +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/examples/agents/general/agent.md +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/examples/agents/test-runner/agent.md +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/examples/agents/writer/agent.md +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/examples/extensions/README.md +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/examples/extensions/hello/README.md +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/examples/extensions/hello/extension.py +0 -0
- {qi_coding_agent-0.3.0/extensions/qi-web/qi_web → qi_coding_agent-0.4.0/extensions/qi-lab/qi_lab}/browse.py +0 -0
- {qi_coding_agent-0.3.0/extensions/qi-web/qi_web → qi_coding_agent-0.4.0/extensions/qi-lab/qi_lab}/files.py +0 -0
- {qi_coding_agent-0.3.0/extensions/qi-web → qi_coding_agent-0.4.0/extensions/qi-lab}/ui/index.html +0 -0
- {qi_coding_agent-0.3.0/extensions/qi-web → qi_coding_agent-0.4.0/extensions/qi-lab}/ui/src/commands.tsx +0 -0
- {qi_coding_agent-0.3.0/extensions/qi-web → qi_coding_agent-0.4.0/extensions/qi-lab}/ui/src/components/CommandMenu.tsx +0 -0
- {qi_coding_agent-0.3.0/extensions/qi-web → qi_coding_agent-0.4.0/extensions/qi-lab}/ui/src/components/FilePanel.tsx +0 -0
- {qi_coding_agent-0.3.0/extensions/qi-web → qi_coding_agent-0.4.0/extensions/qi-lab}/ui/src/components/ModelMenu.test.ts +0 -0
- {qi_coding_agent-0.3.0/extensions/qi-web → qi_coding_agent-0.4.0/extensions/qi-lab}/ui/src/components/ModelMenu.tsx +0 -0
- {qi_coding_agent-0.3.0/extensions/qi-web → qi_coding_agent-0.4.0/extensions/qi-lab}/ui/src/components/ProjectMenu.tsx +0 -0
- {qi_coding_agent-0.3.0/extensions/qi-web → qi_coding_agent-0.4.0/extensions/qi-lab}/ui/src/components/Rail.tsx +0 -0
- {qi_coding_agent-0.3.0/extensions/qi-web → qi_coding_agent-0.4.0/extensions/qi-lab}/ui/src/components/RowMenu.tsx +0 -0
- {qi_coding_agent-0.3.0/extensions/qi-web → qi_coding_agent-0.4.0/extensions/qi-lab}/ui/src/components/SidebarSection.tsx +0 -0
- {qi_coding_agent-0.3.0/extensions/qi-web → qi_coding_agent-0.4.0/extensions/qi-lab}/ui/src/main.tsx +0 -0
- {qi_coding_agent-0.3.0/extensions/qi-web → qi_coding_agent-0.4.0/extensions/qi-lab}/ui/src/markdown/cjk.ts +0 -0
- {qi_coding_agent-0.3.0/extensions/qi-web → qi_coding_agent-0.4.0/extensions/qi-lab}/ui/src/markdown/markdown.test.ts +0 -0
- {qi_coding_agent-0.3.0/extensions/qi-web → qi_coding_agent-0.4.0/extensions/qi-lab}/ui/src/markdown/parse.ts +0 -0
- {qi_coding_agent-0.3.0/extensions/qi-web → qi_coding_agent-0.4.0/extensions/qi-lab}/ui/src/markdown/render.tsx +0 -0
- {qi_coding_agent-0.3.0/extensions/qi-web → qi_coding_agent-0.4.0/extensions/qi-lab}/ui/src/state/projects.test.ts +0 -0
- {qi_coding_agent-0.3.0/extensions/qi-web → qi_coding_agent-0.4.0/extensions/qi-lab}/ui/src/state/projects.ts +0 -0
- {qi_coding_agent-0.3.0/extensions/qi-web → qi_coding_agent-0.4.0/extensions/qi-lab}/ui/src/state/route.test.ts +0 -0
- {qi_coding_agent-0.3.0/extensions/qi-web → qi_coding_agent-0.4.0/extensions/qi-lab}/ui/src/state/route.ts +0 -0
- {qi_coding_agent-0.3.0/extensions/qi-web → qi_coding_agent-0.4.0/extensions/qi-lab}/ui/src/state/stats.ts +0 -0
- {qi_coding_agent-0.3.0/extensions/qi-web → qi_coding_agent-0.4.0/extensions/qi-lab}/ui/src/theme/theme.ts +0 -0
- {qi_coding_agent-0.3.0/extensions/qi-web → qi_coding_agent-0.4.0/extensions/qi-lab}/ui/src/vite-env.d.ts +0 -0
- {qi_coding_agent-0.3.0/extensions/qi-web → qi_coding_agent-0.4.0/extensions/qi-lab}/ui/tsconfig.json +0 -0
- {qi_coding_agent-0.3.0/extensions/qi-web → qi_coding_agent-0.4.0/extensions/qi-lab}/ui/vitest.config.ts +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/extensions/qi-mcp/qi_mcp/__init__.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/extensions/qi-mcp/qi_mcp/client.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/extensions/qi-mcp/qi_mcp/config.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/extensions/qi-mcp/qi_mcp/direct.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/extensions/qi-mcp/qi_mcp/proxy.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/extensions/qi-mcp/qi_mcp/servers.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/extensions/qi-web/README.md +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/extensions/qi-web/qi_web/__init__.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/extensions/qi-web/qi_web/agui.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/extensions/qi-web/qi_web/app.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/extensions/qi-web/qi_web/schemas.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/extensions/qi-web/qi_web/security.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/extensions/qi-web/qi_web/serve.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/extensions/qi-web/qi_web/state.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/extensions/qi-web/qi_web/static/assets/index-96aT_6NK.js +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/extensions/qi-web/qi_web/static/assets/index-DePFgopp.css +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/extensions/qi-web/qi_web/static/index.html +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/extensions/qi-web/ui/package-lock.json +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/extensions/qi-web/ui/package.json +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/extensions/qi-web/ui/scripts/check-design.mjs +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/extensions/qi-web/ui/scripts/check-dsh-tokens.mjs +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/extensions/qi-web/ui/src/App.tsx +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/extensions/qi-web/ui/src/api/client.test.ts +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/extensions/qi-web/ui/src/api/client.ts +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/extensions/qi-web/ui/src/api/contract.test.ts +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/extensions/qi-web/ui/src/api/types.ts +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/extensions/qi-web/ui/src/components/AgentMenu.tsx +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/extensions/qi-web/ui/src/components/ConfirmDialog.tsx +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/extensions/qi-web/ui/src/components/DirPicker.tsx +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/extensions/qi-web/ui/src/components/Dock.tsx +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/extensions/qi-web/ui/src/components/Rows.tsx +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/extensions/qi-web/ui/src/components/Settings.tsx +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/extensions/qi-web/ui/src/components/icons.tsx +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/extensions/qi-web/ui/src/state/stats.test.ts +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/extensions/qi-web/ui/src/state/turn.test.ts +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/extensions/qi-web/ui/src/state/turn.ts +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/extensions/qi-web/ui/src/theme/app.css +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/extensions/qi-web/ui/src/theme/tokens.css +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/extensions/qi-web/ui/vite.config.ts +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/scripts/check_versions.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/scripts/e2e_ui_model.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/scripts/prune_empty_sessions.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/src/qi_agent/abort.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/src/qi_agent/compaction.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/src/qi_agent/export_html.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/src/qi_agent/extensions.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/src/qi_agent/loader.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/src/qi_agent/models.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/src/qi_agent/packages.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/src/qi_agent/paths.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/src/qi_agent/pep723.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/src/qi_agent/registry.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/src/qi_agent/session.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/src/qi_agent/settings.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/src/qi_agent/share.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/src/qi_agent/system_prompt.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/src/qi_agent/theme.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/src/qi_agent/themes/README.md +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/src/qi_agent/themes/dark.json +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/src/qi_agent/themes/light.json +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/src/qi_agent/titling.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/src/qi_agent/tools/__init__.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/src/qi_agent/tools/shell.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/src/qi_agent/trust.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/src/qi_agent/workspaces.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/tests/test_branch_summary_prompt.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/tests/test_browse.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/tests/test_cli_install.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/tests/test_cli_pi_alignment.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/tests/test_cli_run.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/tests/test_cli_tool_flags.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/tests/test_compaction.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/tests/test_compaction_events.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/tests/test_config_resources.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/tests/test_docs_injection.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/tests/test_doctor_extensions.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/tests/test_example_extension.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/tests/test_export_html.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/tests/test_extension_alignment.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/tests/test_extension_bus.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/tests/test_extension_cli_commands.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/tests/test_extension_commands.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/tests/test_extension_deps.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/tests/test_extension_entry_points.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/tests/test_extension_events.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/tests/test_extension_exclusions.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/tests/test_extension_flags.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/tests/test_extension_interop.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/tests/test_extension_messages.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/tests/test_extension_model.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/tests/test_extension_resolvers.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/tests/test_extension_runner_events.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/tests/test_extension_session.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/tests/test_extension_tools.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/tests/test_extension_ui.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/tests/test_extensions.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/tests/test_interrupt.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/tests/test_litellm_offline.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/tests/test_missing_extension_hints.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/tests/test_model_thinking_levels.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/tests/test_package_resource_toggle.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/tests/test_packages.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/tests/test_pep723.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/tests/test_project_root.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/tests/test_prune_empty_sessions.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/tests/test_qi_mcp_config.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/tests/test_qi_mcp_direct.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/tests/test_qi_mcp_proxy.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/tests/test_runner_core.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/tests/test_session_model_entries.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/tests/test_session_store.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/tests/test_session_tree.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/tests/test_settings_skills.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/tests/test_share.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/tests/test_shell.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/tests/test_skill_commands.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/tests/test_system_prompt.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/tests/test_theme.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/tests/test_thinking.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/tests/test_thinking_budgets.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/tests/test_third_party_notices.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/tests/test_titling.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/tests/test_tool_execution_mode.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/tests/test_trust_scope.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/tests/test_tui_extension_render.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/tests/test_tui_model_restore.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/tests/test_tui_no_model.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/tests/test_tui_smoke.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/tests/test_tui_style.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/tests/test_web_extensions_api.py +0 -0
- {qi_coding_agent-0.3.0 → qi_coding_agent-0.4.0}/tests/test_workspaces.py +0 -0
|
@@ -22,14 +22,17 @@ data/
|
|
|
22
22
|
# pi 自身的运行期目录(tasks 输出等,非源码)
|
|
23
23
|
.pi/
|
|
24
24
|
|
|
25
|
-
# qi-web 前端依赖与构建中间产物
|
|
25
|
+
# qi-web / qi-lab 前端依赖与构建中间产物
|
|
26
26
|
extensions/qi-web/ui/node_modules/
|
|
27
27
|
extensions/qi-web/ui/dist/
|
|
28
|
+
extensions/qi-lab/ui/node_modules/
|
|
29
|
+
extensions/qi-lab/ui/dist/
|
|
28
30
|
|
|
29
31
|
# 编辑器配置
|
|
30
32
|
.vscode/
|
|
31
33
|
|
|
32
34
|
# vitest 输出(node 侧测试报告;含绝对路径与时间戳,不入库)。
|
|
33
|
-
# 旧 core web 与 qi-web
|
|
35
|
+
# 旧 core web 与 qi-web / qi-lab 扩展的路径都要盖。
|
|
34
36
|
web/.vitest/
|
|
35
37
|
extensions/qi-web/ui/.vitest/
|
|
38
|
+
extensions/qi-lab/ui/.vitest/
|
|
@@ -9,7 +9,8 @@
|
|
|
9
9
|
> | 本文的说法 | 现状 |
|
|
10
10
|
> | --- | --- |
|
|
11
11
|
> | §4.1 `tools` 省略或 `["*"]` = 全部可用 | **省略 = 继承父**(不是"全部";解释成全部会构成提权)· `Role.tools=None` 的注释写明了这一点 |
|
|
12
|
-
> | `display_name` / `keywords` / `include`
|
|
12
|
+
> | `display_name` / `keywords` / `include` 字段 | `qi_agents/discovery.py` **不解析**这三个;`display_name` 只在读旧会话的 dispatch entry 时回落 |
|
|
13
|
+
| `opening` 字段 | **已解析**为 `Role.opening`(`message` / `suggestions`),随 `GET /api/agents` 返回;运行期 `qi.opening` 事件仍不再发射 |
|
|
13
14
|
> | §3 包内置 `builtin/agents/general` 兜底 | P-E4c 已去掉;裸 core 不带角色 |
|
|
14
15
|
> | §9 数据源(`data_sources.json`) | **已无实现**(`runtime.py`:「v3 里没有 `data_sources` 了」) |
|
|
15
16
|
> | §8 MCP(v1:只解析与门控) | 已被 **E25 取代**:qi-mcp 有真客户端、代理工具与 `directTools`;现行语义见 qi-mcp README |
|
|
Binary file
|
|
@@ -45,13 +45,24 @@ uv run qi --mode json "你好" # 改完想看一眼事件流时最快
|
|
|
45
45
|
## 3. 测试
|
|
46
46
|
|
|
47
47
|
```bash
|
|
48
|
-
.venv/bin/python -m pytest # 全量(
|
|
49
|
-
.venv/bin/python -m pytest -q tests/
|
|
48
|
+
.venv/bin/python -m pytest # 全量(88 个测试文件,约 90 秒)
|
|
49
|
+
.venv/bin/python -m pytest -q tests/test_session_store.py # 单个文件
|
|
50
50
|
uv run pytest -q # 等价写法
|
|
51
51
|
```
|
|
52
52
|
|
|
53
53
|
**qi 没有 `test.sh`** —— 上面就是唯一入口(别去敲不存在的包装脚本)。
|
|
54
54
|
|
|
55
|
+
### 扩展的测试放扩展自己目录下
|
|
56
|
+
|
|
57
|
+
`tests/` 是**宿主**的用例;扩展自带的用例放各自目录(`extensions/qi-agents/tests/`、
|
|
58
|
+
`extensions/qi-lab/tests/`),不往根目录里搬 —— 扩展是独立发行包,测试跟着它走。两个前提缺一不可:
|
|
59
|
+
|
|
60
|
+
1. **`pyproject.toml` 的 `testpaths` 要同时登记**新目录。pytest 只认列出来的目录,
|
|
61
|
+
忘了登记不会报错,只是那一批测试**静默不跑**(没失败、也没覆盖);
|
|
62
|
+
2. **conftest 按目录生效**,根 `tests/conftest.py` 覆盖不到子目录 —— 所以每个扩展的 tests/
|
|
63
|
+
自带一份同源精简版(entry-point stub、`~/.qi` 隔离、必要时再加 `minimal_config`)。
|
|
64
|
+
改根 conftest 的隔离逻辑时**两边一起改**,否则隔离只对一半测试生效。
|
|
65
|
+
|
|
55
66
|
### 默认不装载"本机真装的扩展"
|
|
56
67
|
|
|
57
68
|
`tests/conftest.py` 里有一个 autouse 夹具,把 `qi.extensions` 这组 entry point **stub 成空**。
|
|
@@ -82,7 +93,8 @@ pytestmark = pytest.mark.real_extensions # 只对这类文件生效
|
|
|
82
93
|
|
|
83
94
|
```jsonc
|
|
84
95
|
"include": ["src", "tests", "extensions"],
|
|
85
|
-
"extraPaths": ["extensions/qi-agents", "extensions/qi-mcp", "extensions/qi-web",
|
|
96
|
+
"extraPaths": ["extensions/qi-agents", "extensions/qi-mcp", "extensions/qi-web",
|
|
97
|
+
"extensions/qi-lab", "src"]
|
|
86
98
|
```
|
|
87
99
|
|
|
88
100
|
`extraPaths` 是为了让跨包 import(`from qi_agents.discovery import discover`)在类型检查器里也能解析 ——
|
|
@@ -96,14 +108,15 @@ pytestmark = pytest.mark.real_extensions # 只对这类文件生效
|
|
|
96
108
|
|
|
97
109
|
```text
|
|
98
110
|
src/qi_agent/ # core:单包(一个 wheel)。裸启动 = 单 agent
|
|
99
|
-
extensions/ #
|
|
100
|
-
qi-agents/ # 角色系统 + subagent 委派
|
|
111
|
+
extensions/ # 四个独立 pip 包,各自有自己的 pyproject.toml / README / tests
|
|
112
|
+
qi-agents/ # 角色系统 + subagent 委派(用例在 qi-agents/tests/)
|
|
101
113
|
qi-mcp/ # MCP 支持
|
|
102
114
|
qi-web/ # HTTP 宿主 + 官方 UI(UI 在 qi-web/ui/,自带 package.json)
|
|
115
|
+
qi-lab/ # qi-web 的副本 + 分化(用例在 qi-lab/tests/,契约在 qi-lab/docs/api/)
|
|
103
116
|
design/ # 内部设计、决策记录、变更记录 —— **不进 wheel、不注入提示词**
|
|
104
117
|
docs/ # 手册(见 docs/index.md)+ docs.json(导航清单)
|
|
105
118
|
examples/ # 教学样例(不自动加载)
|
|
106
|
-
tests/ # pytest
|
|
119
|
+
tests/ # 宿主的 pytest 用例(扩展自带的在各自 extensions/*/tests/)
|
|
107
120
|
```
|
|
108
121
|
|
|
109
122
|
判据很简单:**只有 `src/qi_agent/` 进 wheel**;`docs/` 目前也不进(要把手册随包发布得改
|
|
@@ -42,7 +42,7 @@ core 移除:core 只认 `RunSpec`,而且 `AgentRunner` **不再自己拼 prompt*
|
|
|
42
42
|
| --- | --- | --- |
|
|
43
43
|
| agent | **内容**:自包含目录 `agents/<name>/`(`agent.md` + `skills/` + `mcp.json`);frontmatter + 正文即 system prompt。**v3 归 qi-agents** | [qi-agents README](../extensions/qi-agents/README.md) |
|
|
44
44
|
| agent 位置 | **2 处**:`~/.qi/agent/agents/` → `<cwd>/.qi/agents/`(v1 还有"包内置 `general`"那层,P-E4c 删除);项目覆盖全局;同层重复报错 | [agent-config-design.md §3](agent-config-design.md) |
|
|
45
|
-
| agent.md 字段 | **v3
|
|
45
|
+
| agent.md 字段 | **v3 有 `name` / `description` / `tools` / `model` / `opening`**;`tools: None` = **继承父**(不是"全部":那会提权)。`opening` = 开场白 + 选择期快捷提问。v1 还有 `display_name` / `keywords` / `include` | [agent-config-design.md §4](agent-config-design.md) |
|
|
46
46
|
| 技能 | 私有自动绑定、渐进披露、无内置共享库;同一 agent 内同名报错 | [skills.md](../docs/skills.md) |
|
|
47
47
|
| MCP | 全局 `~/.qi/agent/mcp.json` + 项目 `.qi/mcp.json`(项目覆盖全局)+ 角色私有 `mcp.json`;角色能不能用由它的 `tools:` 里写什么决定(**默认拒绝**) | [qi-mcp README](../extensions/qi-mcp/README.md) |
|
|
48
48
|
| 数据源 | 设计上住在 agent `data_sources.json`(私有,凭证 env);**v3 无实现**(没有消费它的扩展) | [agent-config-design.md §9](agent-config-design.md) |
|
|
@@ -110,6 +110,11 @@ qi 在这一层**刻意与 pi 保持一致**:字段名、命令名、`/tree` 语
|
|
|
110
110
|
| 订阅登录(Claude Pro/Max、Copilot、Codex、xAI) | **支持**(OAuth,带刷新) | **不支持** —— 只有 API key。`print-bearer-token` 与 `--no-refresh` 为兼容 pi 命令面而存在,语义是空操作 |
|
|
111
111
|
| auth store 结构 | `type` 支持多种(含 OAuth 凭证) | 只有 `type: api_key` |
|
|
112
112
|
| 云 provider(Azure / Bedrock / Vertex / Cloudflare) | 有独立章节 | 走 litellm 通用 provider 配置,没有专门文档 |
|
|
113
|
+
| 小米的四个 provider | `xiaomi`(按量付费)、`xiaomi-token-plan-cn/-sgp/-ams`(套餐) | 同 拆法:`mimo`(按量付费)+ `mimo-token-plan`(CN 套餐,`mimo-token-plan-cn` 为别名;sgp/ams 换 baseUrl) |
|
|
114
|
+
| 其余套餐/订阅变体 | `zai` / `zai-coding-cn`(智谱)、`qwen-token-plan-cn` / `-individual`(阿里)、`kimi-coding`(月之暗面,Anthropic 形态) | 同 拆法:`zai-coding` / `zai-coding-cn`、`qwen-token-plan` / `-cn`、`kimi-coding`;区域差异用 baseUrl 表达,key 环境变量各一套 |
|
|
115
|
+
| 国际站 / 国内站命名 | `moonshotai` / `moonshotai-cn`、`minimax` / `minimax-cn`、`zai` / `zai-coding-cn` | 同约定:**裸名 = 国际站,`-cn` = 国内站**(`zai` / `zai-cn`、`qwen` / `qwen-cn`、`moonshot` / `moonshot-cn`、`minimax` / `minimax-cn`);旧名 `zhipu` / `dashscope` 留作别名 |
|
|
116
|
+
| 内置 provider(预置) | opencode / opencode-go / xiaomi 等随 pi-ai 发布的模型目录 | `presets.py` 预置表;opencode 两个(Zen 按量付费 / Go 套餐额度),端点与 pi 的 `models-store.json` 对齐(`/inference/…`;`api`+`baseUrl` 落在**模型**上),种子 id 对厂商 `/models` 目录核过 |
|
|
117
|
+
| OpenCode 会话头 `x-opencode-session` | `withOpenCodeSessionHeader` 包住全部 4 种 api 实现自动注入 | **同**(内置 `provider_headers.py`:值 = 当前会话 id,没会话回退 `"qi"`;provider/模型 `headers` 可覆盖,扩展事件最后跑) |
|
|
113
118
|
|
|
114
119
|
**没有 OAuth 的直接后果**:用订阅额度(而非 API key)的用户在 qi 上跑不通,必须换成 API key。
|
|
115
120
|
要补这块,需要的是 auth store 的 `type` 扩展 + 刷新逻辑 —— 现在没有([providers.md](../docs/providers.md) 因此不描述不存在的机制)。
|
|
@@ -297,6 +302,8 @@ pi 的 `ToolDefinition.executionMode` 是 `"sequential" | "parallel"`(默认顺
|
|
|
297
302
|
| `apiKey` 值语法 | `!cmd` / `$ENV` / 转义 | 同 |
|
|
298
303
|
| `auth.json` 结构 | `type: api_key` 等 | 同格式,但只有 `api_key` 一种 |
|
|
299
304
|
| **分派模型**(`routerProvider` / `routerModel`) | pi 无此概念(qi v1 的 Dispatcher 用) | **已作废**:`auto` 分派取消,core 是单 agent。配置里这两个键仍在(老配置不报错),但没有自动分派会用到它们;`qi doctor` 仍会打印解析结果 |
|
|
305
|
+
| 模型数据里的 API 形态 | 模型数据全量标注 `api` + `baseUrl`,按 `model.api` 分发到实现(api map) | 同语义走**覆盖链**:`models[].api` / `models[].baseUrl` > `providers.<name>.api|baseUrl`(默认值)> `openai-completions`。预置物化照 pi 的目录形状**每条模型都写 `api`+`baseUrl`**(单端点厂商从统一值展开),所以端点随形态变后缀(opencode:`/inference/v1` vs `/inference`)与单端点(deepseek/mimo)是同一形状;mimo 的 anthropic 端点由此成对表达 |
|
|
306
|
+
| `openai-responses` 的请求形态 | 直接用 responses 实现(打 `/v1/responses`) | 走 litellm 的 `openai/responses/` 前缀桥接(修复后与 pi 同形态;此前被当 chat completions 发) |
|
|
300
307
|
|
|
301
308
|
## 13. TUI(原 `tui.md` 的几段对照)
|
|
302
309
|
|
|
@@ -341,7 +348,7 @@ pi 的 `~/.pi/agent/models-store.json` 不是用户配置,而是**远程模型
|
|
|
341
348
|
| --- | --- |
|
|
342
349
|
| `cli.md` | 头部「参数尽量与 pi 保持一致」;§1/§2/§4/§5/§6 表格的「pi 对齐」整列(逐个开关的命令名/✅ 对照);各单元格里的出处注(`Print response and exit`、`pi --tools`/`-xt`/`-nbt`/`-nt`、`pi -e`、`pi --models`、`pi --api-key`、`pi -ne`/`-nc`、`pi config`、`pi /login` `/logout`、`pi auth print-*`/`check` 的 0/1/2 退出码);§3 `remove`「与 pi 同义」、`update` 默认「pi 同默认」、`--models` 拉远端目录;§4「面板/清单范围与 pi 逐字相同」、`--no-refresh` 为兼容 pi 命令面;§7 `--offline` 对齐 pi 的语义、输出约定与轮次/中断表的 pi 对照(`killTrackedDetachedChildren`、`shouldStopAfterTurn`);§8 二期「pi 能当场换渲染器」 |
|
|
343
350
|
| `how-qi-works.md` | 标题「8 个对齐 pi core tools」;`find` 与 `glob` 的命名分歧(hikqin/pi);`powershell`「pi 同款、参数与 UTF-8 前缀照搬 pi」;shell 解析顺序对齐 pi(`utils/shell.js`、`commandTransport`);`edit` 按 pi 精确编辑;截断策略对齐 pi 的 `output-accumulator`;会话环境变量对齐 `exposeSessionEnvironment`;bash 无过滤「与 pi 取向一致」+ pi `docs/security.md` 引文;`--tools`/`defaultTools` 对齐;`shellPath` 对齐;stdin 对齐 pi 的 `ignore`;容器化路线;文件工具路径限会话目录「与 pi 同为进程权限模型」;真实文件系统「pi 路线」;变更记录「与 pi 对齐」 |
|
|
344
|
-
| `settings.md` | 「文件位置与字段名对齐 pi」;全局/项目配对 `~/.pi/agent/` ↔ `<cwd>/.pi/`;数组整体替换「与 pi 一致」;`shellPath`/`skillsEnabled`/`enableSkillCommands`/`editorPaddingX`/`outputPad`/`autocompleteMaxVisible` 的 pi 默认值;`tuiMode`「qi 默认与 pi 不同(pi 默认 regular)」;第二张表的「pi 中的用途」列;`branchSummary`(pi 的 defaults to no summary);`thinkingBudgets`(pi 另有内置默认表);`defaultThinkingLevel`(`DEFAULT_THINKING_LEVEL`);`defaultTools`「pi 同义」;`retry.provider`(`getProviderRetrySettings`,pi 用毫秒);`retry.enabled`/`
|
|
351
|
+
| `settings.md` | 「文件位置与字段名对齐 pi」;全局/项目配对 `~/.pi/agent/` ↔ `<cwd>/.pi/`;数组整体替换「与 pi 一致」;`shellPath`/`skillsEnabled`/`enableSkillCommands`/`editorPaddingX`/`outputPad`/`autocompleteMaxVisible` 的 pi 默认值;`tuiMode`「qi 默认与 pi 不同(pi 默认 regular)」;第二张表的「pi 中的用途」列;`branchSummary`(pi 的 defaults to no summary);`thinkingBudgets`(pi 另有内置默认表);`defaultThinkingLevel`(`DEFAULT_THINKING_LEVEL`);`defaultTools`「pi 同义」;`retry.provider`(`getProviderRetrySettings`,pi 用毫秒);`retry.enabled`/`maxRetries`/`baseDelayMs`/`maxAgentDelayMs`(**已接**:agent 级退避重试,见 docs/settings.md §8);`extensions`「对齐 pi」 |
|
|
345
352
|
| `configuration.md` | 头部「对齐 pi 的 `core/system-prompt.js`」;「与 pi 的差异(语义)」小节;§3「pi 同款行为」;§4 三处(「不写 pi 那句"你可能还有别的工具"」、pi 的条件化 guidelines、措辞「与 pi 同形」);§5 三处(「对齐 pi」、「pi 会注入空块」、pi 的 `git worktree` 影子去重);§6 三处(「pi 式 XML」×2、「pi 同款」);§6.1 标题「pi 的 `Additional docs`」与「pi 把"主题 → 文件"写死在源码里」;§6.2「pi 的 text or file contents 口径」;§8 决策表(`customPrompt`、`APPEND_SYSTEM.md`、工具清单措辞、XML 形态) |
|
|
346
353
|
| `session-format.md` | `parentSession`「pi 同名字段」;`firstMessage` 回落;`isChanging`;`isSettingsEntry`;`getSessionContextSettings` + `restoredModel`;`hasConfiguredAuth`;`appendModelChange`(只在新会话写);`modelId` 命名差异(pi 驼峰 vs qi `model_id`);`_persist`;`SessionManager` 构造时就 `newSession()` |
|
|
347
354
|
| `tui.md` | §1「逐项对齐 pi」+「以 pi 的 `modes/interactive` 为基线、`theme/*.json` 逐字移植、渲染细节对照过 `user-message.js`/`assistant-message.js`/`tool-execution.js`/`footer.js`/`dynamic-border.js`」;§1.1「与 pi 同名同义,默认相反」+「pi 的默认 `regular`」行;样例里「照搬 pi 句式」;§1.3「命令选择器 = pi 的 `showSelector()`」「`pi_select_text` 的 `SelectList` 版式」「勾选标记是 pi 的 `✓`/空格」;`md*`/`syntax*` 键;已知差异「Textual 与 pi 自研渲染器的边界」「pi 能当场换渲染器」「pi 有 `fullscreenExitOutput`」;§2 命令表里的 `showModelSelector`、`getAvailableSnapshot()`、`→ ✓ 模型 [provider]` 行、「与 pi 的差异:pi 的 `/login` 主要做订阅登录(`auth.oauth`)」、「对齐 pi」;会话树「对齐 pi 的 `id`/`parentId`」+ 整列 pi + 「pi 在加载时迁移」;树键位「pi 的 `app.tree.*`」;压缩「对齐 pi 的 `core/compaction`」「pi 同款底色块」;键位「已对齐 pi;`core/keybindings.js`」+ 整列「pi 的 action」;思考「对齐 pi 的 `thinkingLevel`」「按 pi 的写法显示 `• thinking off`」「pi `DEFAULT_THINKING_LEVEL`」;「匹配 pi 语义」「`ctrl+p` 在 pi 里是切模型」;「尚未对齐」表头「pi 用途」;会话选择器「对齐 pi 的 `SessionSelectorComponent`」「pi 的三档同名同义」「版式与 pi 一致」「pi 的 `firstMessage` 回落」;补全「对齐 pi 的 autocomplete / `handleBashCommand`」「`getArgumentCompletions`」「`select-list.js` 版式」「来源标签是 pi 的口径」;输入层「对齐 pi `pi-tui/components/editor.js`」+ 整列「pi 的 action」「`undo`(pi 不用 `ctrl+z`)」「`kill-ring.js`」;§3「语义对齐 pi」+ 整列 pi + 「与 pi 一致」 |
|
|
Binary file
|