@armadra/agent 0.7.6 → 0.8.1
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/CHANGELOG.md +51 -31
- package/CHANGELOG.zh-CN.md +68 -48
- package/README.md +162 -204
- package/README.zh-CN.md +150 -199
- package/dist/acp.d.ts +1 -1
- package/dist/acp.js +1 -1
- package/dist/agent/limits.d.ts +1 -1
- package/dist/agent/limits.js +1 -1
- package/dist/agent/loop-guard.d.ts +1 -1
- package/dist/agent/loop-guard.js +1 -1
- package/dist/agent/prompt-rules.d.ts +1 -1
- package/dist/agent/prompt-rules.js +1 -1
- package/dist/agent/reminders.d.ts +1 -1
- package/dist/agent/reminders.js +1 -1
- package/dist/agent/session-cache-key.d.ts +1 -1
- package/dist/agent/session-cache-key.js +1 -1
- package/dist/agent/session-extensions.d.ts +1 -1
- package/dist/agent/session-extensions.js +1 -1
- package/dist/agent/session-images.d.ts +1 -1
- package/dist/agent/session-images.js +1 -1
- package/dist/agent/session-plan.d.ts +1 -1
- package/dist/agent/session-plan.js +1 -1
- package/dist/agent/session-rewind.d.ts +1 -1
- package/dist/agent/session-rewind.js +1 -1
- package/dist/agent/session-settings.d.ts +1 -1
- package/dist/agent/session-settings.js +1 -1
- package/dist/agent/session-subagent.d.ts +1 -1
- package/dist/agent/session-subagent.js +1 -1
- package/dist/agent/session-telemetry.d.ts +1 -1
- package/dist/agent/session-telemetry.js +1 -1
- package/dist/agent/session-trace-writer.d.ts +1 -1
- package/dist/agent/session-trace-writer.js +1 -1
- package/dist/agent/session.js +1 -1
- package/dist/agent/subagent-background.d.ts +1 -1
- package/dist/agent/subagent-background.js +1 -1
- package/dist/agent/subagent-direct.d.ts +1 -1
- package/dist/agent/subagent-direct.js +1 -1
- package/dist/agent/subagent-fork.d.ts +1 -1
- package/dist/agent/subagent-fork.js +1 -1
- package/dist/agent/subagent-registry.d.ts +1 -1
- package/dist/agent/subagent-registry.js +1 -1
- package/dist/agent/system-prompt.js +1 -1
- package/dist/agent/tool-availability.d.ts +1 -1
- package/dist/agent/tool-availability.js +1 -1
- package/dist/agent/types-w5.d.ts +2 -2
- package/dist/agent/types-w5.js +1 -1
- package/dist/agent/types-w6.d.ts +1 -1
- package/dist/agent/types-w6.js +1 -1
- package/dist/agent/types.d.ts +1 -1
- package/dist/agent/worktree.d.ts +1 -1
- package/dist/agent/worktree.js +1 -1
- package/dist/agents/builtin.d.ts +1 -1
- package/dist/agents/builtin.js +1 -1
- package/dist/agents/catalog.d.ts +1 -1
- package/dist/agents/catalog.js +1 -1
- package/dist/agents/discover.d.ts +1 -1
- package/dist/agents/discover.js +1 -1
- package/dist/agents/external.d.ts +1 -1
- package/dist/agents/external.js +1 -1
- package/dist/agents/parse.d.ts +1 -1
- package/dist/agents/parse.js +1 -1
- package/dist/agents/result.d.ts +1 -1
- package/dist/agents/result.js +2 -2
- package/dist/agents/task-record.d.ts +3 -3
- package/dist/agents/task-record.js +2 -2
- package/dist/agents/types.d.ts +1 -1
- package/dist/agents/types.js +1 -1
- package/dist/ai/apis/anthropic-compat.d.ts +2 -2
- package/dist/ai/apis/anthropic-compat.js +2 -2
- package/dist/ai/apis/cache-params.d.ts +1 -1
- package/dist/ai/apis/cache-params.js +1 -1
- package/dist/ai/apis/chatgpt-backend.d.ts +4 -2
- package/dist/ai/apis/chatgpt-backend.js +11 -2
- package/dist/ai/apis/chatgpt-rate-limits.d.ts +1 -1
- package/dist/ai/apis/chatgpt-rate-limits.js +1 -1
- package/dist/ai/apis/max-tokens.d.ts +1 -1
- package/dist/ai/apis/max-tokens.js +1 -1
- package/dist/ai/apis/shared.d.ts +1 -1
- package/dist/ai/apis/shared.js +1 -1
- package/dist/ai/image-intern.d.ts +2 -2
- package/dist/ai/image-intern.js +1 -1
- package/dist/ai/image-limits.d.ts +1 -1
- package/dist/ai/image-limits.js +1 -1
- package/dist/ai/json-body.d.ts +1 -1
- package/dist/ai/json-body.js +1 -1
- package/dist/ai/providers/builtin.d.ts +2 -2
- package/dist/ai/providers/builtin.js +4 -4
- package/dist/ai/providers/catalog.d.ts +2 -2
- package/dist/ai/providers/catalog.js +1 -1
- package/dist/ai/providers/channels.d.ts +1 -1
- package/dist/ai/providers/channels.js +1 -1
- package/dist/ai/providers/enrich.d.ts +1 -1
- package/dist/ai/providers/enrich.js +1 -1
- package/dist/ai/providers/models-dev-cache.d.ts +1 -1
- package/dist/ai/providers/models-dev-cache.js +1 -1
- package/dist/ai/providers/models-dev-data.d.ts +1 -1
- package/dist/ai/providers/models-dev-data.js +1 -1
- package/dist/ai/providers/models-dev-snapshot.d.ts +1 -1
- package/dist/ai/providers/models-dev-snapshot.js +1 -1
- package/dist/ai/providers/models-dev.d.ts +4 -4
- package/dist/ai/providers/models-dev.js +3 -3
- package/dist/ai/types.d.ts +2 -2
- package/dist/ai/types.js +1 -1
- package/dist/auth/chatgpt/cli.d.ts +1 -1
- package/dist/auth/chatgpt/cli.js +1 -1
- package/dist/auth/chatgpt/host-id.d.ts +1 -1
- package/dist/auth/chatgpt/host-id.js +1 -1
- package/dist/auth/chatgpt/login.d.ts +1 -1
- package/dist/auth/chatgpt/login.js +1 -1
- package/dist/auth/chatgpt/presets.d.ts +1 -1
- package/dist/auth/chatgpt/presets.js +1 -1
- package/dist/auth/oauth/callback-server.d.ts +1 -1
- package/dist/auth/oauth/callback-server.js +1 -1
- package/dist/auth/oauth/flows.d.ts +1 -1
- package/dist/auth/oauth/flows.js +1 -1
- package/dist/auth/oauth/oidc.d.ts +1 -1
- package/dist/auth/oauth/oidc.js +1 -1
- package/dist/auth/oauth/pkce.d.ts +1 -1
- package/dist/auth/oauth/pkce.js +1 -1
- package/dist/auth/oauth/refresh.d.ts +1 -1
- package/dist/auth/oauth/refresh.js +1 -1
- package/dist/auth/oauth/token-client.d.ts +1 -1
- package/dist/auth/oauth/token-client.js +1 -1
- package/dist/auth/oauth/token-store.d.ts +1 -1
- package/dist/auth/oauth/token-store.js +1 -1
- package/dist/auth/testing/fake-oauth.d.ts +1 -1
- package/dist/auth/testing/fake-oauth.js +1 -1
- package/dist/bundle/ama.cjs +1041 -359
- package/dist/checkpoints/blobs.d.ts +1 -1
- package/dist/checkpoints/blobs.js +1 -1
- package/dist/checkpoints/gc.d.ts +1 -1
- package/dist/checkpoints/gc.js +1 -1
- package/dist/checkpoints/git-head.d.ts +1 -1
- package/dist/checkpoints/git-head.js +1 -1
- package/dist/checkpoints/index.d.ts +1 -1
- package/dist/checkpoints/index.js +1 -1
- package/dist/checkpoints/replay.d.ts +1 -1
- package/dist/checkpoints/replay.js +1 -1
- package/dist/checkpoints/restore.d.ts +1 -1
- package/dist/checkpoints/restore.js +1 -1
- package/dist/checkpoints/settings.d.ts +1 -1
- package/dist/checkpoints/settings.js +1 -1
- package/dist/checkpoints/shadow-git.d.ts +1 -1
- package/dist/checkpoints/shadow-git.js +1 -1
- package/dist/checkpoints/shadow-restore.d.ts +1 -1
- package/dist/checkpoints/shadow-restore.js +1 -1
- package/dist/checkpoints/tracker.d.ts +1 -1
- package/dist/checkpoints/tracker.js +1 -1
- package/dist/checkpoints/types.d.ts +1 -1
- package/dist/checkpoints/types.js +1 -1
- package/dist/cli/args.d.ts +2 -2
- package/dist/cli/args.js +1 -1
- package/dist/cli/bootstrap.js +1 -1
- package/dist/cli/choice-prompt.d.ts +1 -1
- package/dist/cli/choice-prompt.js +1 -1
- package/dist/cli/codemode-notice.d.ts +1 -1
- package/dist/cli/codemode-notice.js +1 -1
- package/dist/cli/compose-agents.d.ts +1 -1
- package/dist/cli/compose-agents.js +1 -1
- package/dist/cli/compose-extensions.d.ts +1 -1
- package/dist/cli/compose-extensions.js +1 -1
- package/dist/cli/compose-memory.d.ts +1 -1
- package/dist/cli/compose-memory.js +1 -1
- package/dist/cli/compose-providers.d.ts +1 -1
- package/dist/cli/compose-providers.js +1 -1
- package/dist/cli/compose-request.d.ts +1 -1
- package/dist/cli/compose-request.js +1 -1
- package/dist/cli/from-prompt.d.ts +1 -1
- package/dist/cli/from-prompt.js +1 -1
- package/dist/cli/main.d.ts +1 -1
- package/dist/cli/main.js +1 -1
- package/dist/cli/subcommands/auth.d.ts +1 -1
- package/dist/cli/subcommands/auth.js +1 -1
- package/dist/cli/subcommands/config-set.d.ts +1 -1
- package/dist/cli/subcommands/config-set.js +1 -1
- package/dist/cli/subcommands/doctor.js +1 -1
- package/dist/cli/subcommands/init.d.ts +1 -1
- package/dist/cli/subcommands/init.js +1 -1
- package/dist/cli/subcommands/memory.d.ts +1 -1
- package/dist/cli/subcommands/memory.js +1 -1
- package/dist/cli/subcommands/models.js +1 -1
- package/dist/cli/subcommands/providers-list.d.ts +1 -1
- package/dist/cli/subcommands/providers-list.js +1 -1
- package/dist/cli/subcommands/providers-plan.d.ts +1 -1
- package/dist/cli/subcommands/providers-plan.js +1 -1
- package/dist/cli/subcommands/providers.d.ts +1 -1
- package/dist/cli/subcommands/providers.js +1 -1
- package/dist/cli/subcommands/sessions-export.d.ts +1 -1
- package/dist/cli/subcommands/sessions-export.js +1 -1
- package/dist/cli/subcommands/sessions-trace.d.ts +1 -1
- package/dist/cli/subcommands/sessions-trace.js +1 -1
- package/dist/cli/subcommands/sessions.d.ts +1 -1
- package/dist/cli/subcommands/sessions.js +1 -1
- package/dist/cli/subcommands/stats.d.ts +1 -1
- package/dist/cli/subcommands/stats.js +1 -1
- package/dist/codemode/capability.d.ts +1 -1
- package/dist/codemode/capability.js +1 -1
- package/dist/codemode/host-side.d.ts +2 -2
- package/dist/codemode/host-side.js +2 -2
- package/dist/compaction/image-budget.d.ts +1 -1
- package/dist/compaction/image-budget.js +1 -1
- package/dist/config/edit.d.ts +1 -1
- package/dist/config/edit.js +1 -1
- package/dist/config/init.d.ts +1 -1
- package/dist/config/init.js +1 -1
- package/dist/config/json-schema.d.ts +2 -2
- package/dist/config/json-schema.js +2 -2
- package/dist/config/schema-w5.d.ts +1 -1
- package/dist/config/schema-w5.js +1 -1
- package/dist/config/schema-w6.d.ts +1 -1
- package/dist/config/schema-w6.js +1 -1
- package/dist/config/settings-registry.d.ts +1 -1
- package/dist/config/settings-registry.js +1 -1
- package/dist/config/types-w5.d.ts +2 -2
- package/dist/config/types-w5.js +2 -2
- package/dist/config/types-w6.d.ts +5 -5
- package/dist/config/types-w6.js +1 -1
- package/dist/config/types.d.ts +6 -6
- package/dist/config/types.js +1 -1
- package/dist/drivers/acp/client.d.ts +1 -1
- package/dist/drivers/acp/client.js +1 -1
- package/dist/drivers/acp/driver.d.ts +23 -2
- package/dist/drivers/acp/driver.js +60 -6
- package/dist/drivers/acp/testing/fake-agent.d.ts +1 -1
- package/dist/drivers/acp/testing/fake-agent.js +1 -1
- package/dist/drivers/acp/types.d.ts +1 -1
- package/dist/drivers/acp/types.js +1 -1
- package/dist/drivers/agents.d.ts +1 -1
- package/dist/drivers/agents.js +4 -1
- package/dist/drivers/base.d.ts +1 -1
- package/dist/drivers/base.js +1 -1
- package/dist/drivers/catalog.d.ts +3 -1
- package/dist/drivers/catalog.js +95 -5
- package/dist/drivers/env.d.ts +1 -1
- package/dist/drivers/env.js +1 -1
- package/dist/drivers/host-runners.d.ts +1 -1
- package/dist/drivers/host-runners.js +1 -1
- package/dist/drivers/jsonrpc.d.ts +1 -1
- package/dist/drivers/jsonrpc.js +1 -1
- package/dist/drivers/native/claude-normalize.d.ts +9 -1
- package/dist/drivers/native/claude-normalize.js +28 -1
- package/dist/drivers/native/claude-stream.d.ts +1 -1
- package/dist/drivers/native/claude-stream.js +17 -2
- package/dist/drivers/native/codex-app-server.d.ts +1 -1
- package/dist/drivers/native/codex-app-server.js +5 -3
- package/dist/drivers/native/codex-normalize.d.ts +1 -1
- package/dist/drivers/native/codex-normalize.js +1 -1
- package/dist/drivers/native/oneshot.d.ts +1 -1
- package/dist/drivers/native/oneshot.js +13 -3
- package/dist/drivers/native/pi-gate.d.ts +19 -0
- package/dist/drivers/native/pi-gate.js +39 -0
- package/dist/drivers/native/pi-rpc.d.ts +29 -0
- package/dist/drivers/native/pi-rpc.js +483 -0
- package/dist/drivers/permissions.d.ts +1 -1
- package/dist/drivers/permissions.js +1 -1
- package/dist/drivers/pids.d.ts +1 -1
- package/dist/drivers/pids.js +1 -1
- package/dist/drivers/pool.d.ts +1 -1
- package/dist/drivers/pool.js +1 -1
- package/dist/drivers/probe.d.ts +1 -1
- package/dist/drivers/probe.js +1 -1
- package/dist/drivers/process.d.ts +1 -1
- package/dist/drivers/process.js +1 -1
- package/dist/drivers/runner.d.ts +1 -1
- package/dist/drivers/runner.js +2 -1
- package/dist/drivers/store.d.ts +1 -1
- package/dist/drivers/store.js +1 -1
- package/dist/drivers/types.d.ts +2 -2
- package/dist/drivers/types.js +1 -1
- package/dist/git/info.d.ts +1 -1
- package/dist/git/info.js +1 -1
- package/dist/host/api-impl.d.ts +1 -1
- package/dist/host/api-impl.js +1 -1
- package/dist/host/types.d.ts +2 -2
- package/dist/i18n/catalog.d.ts +5 -2
- package/dist/i18n/catalog.js +2 -2
- package/dist/i18n/format.d.ts +1 -1
- package/dist/i18n/format.js +1 -1
- package/dist/i18n/index.d.ts +1 -1
- package/dist/i18n/index.js +1 -1
- package/dist/i18n/messages/acp.d.ts +1 -1
- package/dist/i18n/messages/acp.js +1 -1
- package/dist/i18n/messages/agents.d.ts +1 -1
- package/dist/i18n/messages/agents.js +1 -1
- package/dist/i18n/messages/approval.d.ts +1 -1
- package/dist/i18n/messages/approval.js +1 -1
- package/dist/i18n/messages/auth.d.ts +3 -1
- package/dist/i18n/messages/auth.js +3 -1
- package/dist/i18n/messages/cli.d.ts +1 -1
- package/dist/i18n/messages/cli.js +1 -1
- package/dist/i18n/messages/config-keys.js +12 -12
- package/dist/i18n/messages/config.d.ts +1 -1
- package/dist/i18n/messages/config.js +3 -3
- package/dist/i18n/messages/drivers.d.ts +5 -1
- package/dist/i18n/messages/drivers.js +5 -1
- package/dist/i18n/messages/errors.d.ts +1 -1
- package/dist/i18n/messages/errors.js +1 -1
- package/dist/i18n/messages/interactive-line.d.ts +1 -1
- package/dist/i18n/messages/interactive-line.js +1 -1
- package/dist/i18n/messages/interactive-startup.d.ts +1 -1
- package/dist/i18n/messages/interactive-startup.js +1 -1
- package/dist/i18n/messages/interactive-view.d.ts +1 -1
- package/dist/i18n/messages/interactive-view.js +1 -1
- package/dist/i18n/messages/interactive.d.ts +1 -1
- package/dist/i18n/messages/interactive.js +1 -1
- package/dist/i18n/messages/memory.d.ts +1 -1
- package/dist/i18n/messages/memory.js +1 -1
- package/dist/i18n/messages/panels.d.ts +1 -1
- package/dist/i18n/messages/panels.js +1 -1
- package/dist/i18n/messages/permissions.d.ts +1 -1
- package/dist/i18n/messages/permissions.js +1 -1
- package/dist/i18n/messages/plan.d.ts +1 -1
- package/dist/i18n/messages/plan.js +1 -1
- package/dist/i18n/messages/print.d.ts +2 -2
- package/dist/i18n/messages/print.js +2 -2
- package/dist/i18n/messages/report-context.d.ts +1 -1
- package/dist/i18n/messages/report-context.js +1 -1
- package/dist/i18n/messages/report.d.ts +1 -1
- package/dist/i18n/messages/report.js +1 -1
- package/dist/i18n/messages/rewind.d.ts +1 -1
- package/dist/i18n/messages/rewind.js +1 -1
- package/dist/i18n/messages/session.d.ts +1 -1
- package/dist/i18n/messages/session.js +1 -1
- package/dist/i18n/messages/settings.d.ts +1 -1
- package/dist/i18n/messages/settings.js +1 -1
- package/dist/i18n/messages/subcommands.d.ts +1 -1
- package/dist/i18n/messages/subcommands.js +1 -1
- package/dist/i18n/messages/trace.d.ts +1 -1
- package/dist/i18n/messages/trace.js +1 -1
- package/dist/i18n/types.d.ts +1 -1
- package/dist/i18n/types.js +1 -1
- package/dist/memory/frontmatter.d.ts +1 -1
- package/dist/memory/frontmatter.js +1 -1
- package/dist/memory/index.d.ts +1 -1
- package/dist/memory/index.js +1 -1
- package/dist/memory/lock.d.ts +1 -1
- package/dist/memory/lock.js +1 -1
- package/dist/memory/paths.d.ts +1 -1
- package/dist/memory/paths.js +1 -1
- package/dist/memory/runtime.d.ts +1 -1
- package/dist/memory/runtime.js +1 -1
- package/dist/memory/secrets.d.ts +1 -1
- package/dist/memory/secrets.js +1 -1
- package/dist/memory/section.d.ts +1 -1
- package/dist/memory/section.js +1 -1
- package/dist/memory/store.d.ts +1 -1
- package/dist/memory/store.js +1 -1
- package/dist/memory/tool.d.ts +1 -1
- package/dist/memory/tool.js +1 -1
- package/dist/modes/acp/acp-auth-gate.d.ts +1 -1
- package/dist/modes/acp/acp-auth-gate.js +1 -1
- package/dist/modes/acp/acp-config.d.ts +1 -1
- package/dist/modes/acp/acp-config.js +1 -1
- package/dist/modes/acp/acp-connection.d.ts +1 -1
- package/dist/modes/acp/acp-connection.js +1 -1
- package/dist/modes/acp/acp-events.d.ts +1 -1
- package/dist/modes/acp/acp-events.js +1 -1
- package/dist/modes/acp/acp-mode.d.ts +1 -1
- package/dist/modes/acp/acp-mode.js +1 -1
- package/dist/modes/acp/acp-server.d.ts +2 -2
- package/dist/modes/acp/acp-server.js +2 -2
- package/dist/modes/acp/acp-sessions.d.ts +2 -2
- package/dist/modes/acp/acp-sessions.js +2 -2
- package/dist/modes/acp/acp-tool-text.d.ts +1 -1
- package/dist/modes/acp/acp-tool-text.js +1 -1
- package/dist/modes/commands-core.js +1 -1
- package/dist/modes/image-input.d.ts +1 -1
- package/dist/modes/image-input.js +1 -1
- package/dist/modes/interactive/agent-bar.d.ts +1 -1
- package/dist/modes/interactive/agent-bar.js +1 -1
- package/dist/modes/interactive/agent-transcript.d.ts +1 -1
- package/dist/modes/interactive/agent-transcript.js +1 -1
- package/dist/modes/interactive/agent-view.d.ts +1 -1
- package/dist/modes/interactive/agent-view.js +1 -1
- package/dist/modes/interactive/approval-dock.d.ts +1 -1
- package/dist/modes/interactive/approval-dock.js +1 -1
- package/dist/modes/interactive/config-panel.d.ts +1 -1
- package/dist/modes/interactive/config-panel.js +1 -1
- package/dist/modes/interactive/config-ui.d.ts +1 -1
- package/dist/modes/interactive/config-ui.js +1 -1
- package/dist/modes/interactive/memory-panel.d.ts +1 -1
- package/dist/modes/interactive/memory-panel.js +1 -1
- package/dist/modes/interactive/plan-command.d.ts +1 -1
- package/dist/modes/interactive/plan-command.js +1 -1
- package/dist/modes/interactive/plan-dialog.d.ts +1 -1
- package/dist/modes/interactive/plan-dialog.js +1 -1
- package/dist/modes/interactive/plan-flow.d.ts +1 -1
- package/dist/modes/interactive/plan-flow.js +1 -1
- package/dist/modes/interactive/subagent-view.d.ts +1 -1
- package/dist/modes/interactive/subagent-view.js +1 -1
- package/dist/modes/interactive/task-background.d.ts +1 -1
- package/dist/modes/interactive/task-background.js +1 -1
- package/dist/modes/interactive/trace-view.d.ts +1 -1
- package/dist/modes/interactive/trace-view.js +1 -1
- package/dist/modes/print/json-event.d.ts +1 -1
- package/dist/modes/print/json-event.js +2 -2
- package/dist/modes/print/print-mode.d.ts +1 -1
- package/dist/modes/print/print-mode.js +1 -1
- package/dist/modes/print/search-hint.d.ts +1 -1
- package/dist/modes/print/search-hint.js +1 -1
- package/dist/modes/rpc/commands.js +2 -2
- package/dist/permissions/auto-safe.d.ts +1 -1
- package/dist/permissions/auto-safe.js +1 -1
- package/dist/permissions/bypass.d.ts +1 -1
- package/dist/permissions/bypass.js +1 -1
- package/dist/permissions/classifier.d.ts +1 -1
- package/dist/permissions/classifier.js +1 -1
- package/dist/permissions/memory-class.d.ts +1 -1
- package/dist/permissions/memory-class.js +1 -1
- package/dist/permissions/pipeline.d.ts +2 -2
- package/dist/permissions/pipeline.js +2 -2
- package/dist/permissions/protected.d.ts +1 -1
- package/dist/permissions/protected.js +1 -1
- package/dist/permissions/readonly-bash.d.ts +1 -1
- package/dist/permissions/readonly-bash.js +1 -1
- package/dist/permissions/types.d.ts +2 -2
- package/dist/plan/done-markers.d.ts +1 -1
- package/dist/plan/done-markers.js +1 -1
- package/dist/plan/extract.d.ts +1 -1
- package/dist/plan/extract.js +1 -1
- package/dist/plan/prompts.d.ts +1 -1
- package/dist/plan/prompts.js +1 -1
- package/dist/plan/store.d.ts +1 -1
- package/dist/plan/store.js +1 -1
- package/dist/rpc.d.ts +3 -3
- package/dist/rpc.js +3 -3
- package/dist/sandbox/bash.d.ts +1 -1
- package/dist/sandbox/bash.js +1 -1
- package/dist/sandbox/detect.d.ts +1 -1
- package/dist/sandbox/detect.js +1 -1
- package/dist/sandbox/index.d.ts +1 -1
- package/dist/sandbox/index.js +1 -1
- package/dist/sandbox/profile.d.ts +1 -1
- package/dist/sandbox/profile.js +1 -1
- package/dist/sandbox/wrap.d.ts +1 -1
- package/dist/sandbox/wrap.js +1 -1
- package/dist/sdk.d.ts +3 -3
- package/dist/sdk.js +2 -2
- package/dist/session/line-reader.d.ts +1 -1
- package/dist/session/line-reader.js +1 -1
- package/dist/session/list.d.ts +1 -1
- package/dist/session/list.js +1 -1
- package/dist/session/migrate.d.ts +1 -1
- package/dist/session/migrate.js +1 -1
- package/dist/session/store.d.ts +1 -1
- package/dist/session/store.js +1 -1
- package/dist/skills/builtin.js +2 -2
- package/dist/tools/background-jobs.d.ts +1 -1
- package/dist/tools/background-jobs.js +1 -1
- package/dist/tools/clipboard-image.d.ts +1 -1
- package/dist/tools/clipboard-image.js +1 -1
- package/dist/tools/edit.d.ts +1 -1
- package/dist/tools/edit.js +1 -1
- package/dist/tools/grep.d.ts +1 -1
- package/dist/tools/grep.js +1 -1
- package/dist/tools/image-resize.d.ts +1 -1
- package/dist/tools/image-resize.js +1 -1
- package/dist/tools/read-lines.d.ts +1 -1
- package/dist/tools/read-lines.js +1 -1
- package/dist/tools/read.d.ts +1 -1
- package/dist/tools/read.js +1 -1
- package/dist/tools/task-ctl.d.ts +1 -1
- package/dist/tools/task-ctl.js +1 -1
- package/dist/tools/task.d.ts +2 -2
- package/dist/tools/task.js +2 -2
- package/dist/tools/types.d.ts +3 -3
- package/dist/tools/types.js +1 -1
- package/dist/trace/build.d.ts +1 -1
- package/dist/trace/build.js +1 -1
- package/dist/trace/detail.d.ts +1 -1
- package/dist/trace/detail.js +1 -1
- package/dist/trace/flatten.d.ts +1 -1
- package/dist/trace/flatten.js +1 -1
- package/dist/trace/format.d.ts +1 -1
- package/dist/trace/format.js +1 -1
- package/dist/trace/html-template.d.ts +1 -1
- package/dist/trace/html-template.js +1 -1
- package/dist/trace/html.d.ts +1 -1
- package/dist/trace/html.js +1 -1
- package/dist/trace/query-session.d.ts +1 -1
- package/dist/trace/query-session.js +1 -1
- package/dist/trace/query.d.ts +1 -1
- package/dist/trace/query.js +1 -1
- package/dist/trace/types.d.ts +1 -1
- package/dist/trace/types.js +1 -1
- package/dist/tui/components/settings-list.d.ts +1 -1
- package/dist/tui/components/settings-list.js +1 -1
- package/docs/README.md +85 -0
- package/docs/assets/ama-wordmark-dark.svg +37 -0
- package/docs/assets/ama-wordmark-light.svg +37 -0
- package/docs/en/README.md +39 -0
- package/docs/en/{permissions.md → guides/permissions.md} +14 -14
- package/docs/en/{providers.md → guides/providers.md} +13 -12
- package/docs/en/{sessions.md → guides/sessions.md} +6 -6
- package/docs/en/{tui.md → guides/tui.md} +15 -15
- package/docs/en/{acp.md → reference/acp.md} +6 -6
- package/docs/en/{host-api.md → reference/host-api.md} +7 -7
- package/docs/en/{rpc.md → reference/rpc.md} +13 -13
- package/docs/{agents.md → guides/agents.md} +68 -23
- package/docs/{codemode.md → guides/codemode.md} +3 -3
- package/docs/{hooks.md → guides/hooks.md} +2 -2
- package/docs/guides/i18n.md +93 -0
- package/docs/{memory.md → guides/memory.md} +1 -1
- package/docs/{permissions.md → guides/permissions.md} +2 -2
- package/docs/{plan.md → guides/plan.md} +4 -4
- package/docs/{providers.md → guides/providers.md} +11 -10
- package/docs/{sessions.md → guides/sessions.md} +5 -5
- package/docs/{tui.md → guides/tui.md} +8 -8
- package/docs/{acp.md → reference/acp.md} +5 -5
- package/docs/{host-api.md → reference/host-api.md} +4 -4
- package/docs/{rpc.md → reference/rpc.md} +11 -11
- package/docs/{session-format.md → reference/session-format.md} +7 -7
- package/package.json +12 -23
- package/docs/rewind-plan.md +0 -181
- package/docs/tui-design.md +0 -764
- /package/docs/{sandbox.md → guides/sandbox.md} +0 -0
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* 内置驱动表(数据,docs/wave5-plan.md §5.1 catalog.ts,D14)。[W5-E]
|
|
2
|
+
* 内置驱动表(数据,docs/history/wave5-plan.md §5.1 catalog.ts,D14)。[W5-E]
|
|
3
3
|
*
|
|
4
4
|
* agentId → 候选链;按 D14 的优先级排:原生 ACP > 已装 ACP 适配器 > 原生结构化协议 > 一次性打印。
|
|
5
5
|
* 探测时取第一个已安装的候选。`verified` 是实测过的版本区间:越界仍可用,但发一条 warn 提示
|
|
@@ -24,6 +24,8 @@ export interface CatalogCandidate {
|
|
|
24
24
|
modes?: Partial<Record<PermissionMode, string>>;
|
|
25
25
|
permissions?: DriverCapabilities["permissions"];
|
|
26
26
|
usage?: DriverCapabilities["usage"];
|
|
27
|
+
/** `session/prompt` 答复的 usage 是会话累计(缺省按本回合)。 */
|
|
28
|
+
acpUsage?: "session";
|
|
27
29
|
/** 一次性打印模式的方言。 */
|
|
28
30
|
oneshot?: "claude" | "codex" | "gemini";
|
|
29
31
|
}
|
package/dist/drivers/catalog.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* 内置驱动表(数据,docs/wave5-plan.md §5.1 catalog.ts,D14)。[W5-E]
|
|
2
|
+
* 内置驱动表(数据,docs/history/wave5-plan.md §5.1 catalog.ts,D14)。[W5-E]
|
|
3
3
|
*
|
|
4
4
|
* agentId → 候选链;按 D14 的优先级排:原生 ACP > 已装 ACP 适配器 > 原生结构化协议 > 一次性打印。
|
|
5
5
|
* 探测时取第一个已安装的候选。`verified` 是实测过的版本区间:越界仍可用,但发一条 warn 提示
|
|
@@ -17,12 +17,55 @@ const ALL_MODES = [
|
|
|
17
17
|
"auto",
|
|
18
18
|
"full-auto",
|
|
19
19
|
];
|
|
20
|
+
/**
|
|
21
|
+
* 模式 id 与 ama 不同名的 ACP Agent 的映射(2026-10 实测)。没有映射时 ama 会留在 Agent 自己的当前模式,
|
|
22
|
+
* 而它可能比 ama 宽(如用户把 Claude 的缺省设成 bypassPermissions),所以已知的 Agent 一律写全。
|
|
23
|
+
* 从不映射到放开全部权限的模式(Claude `bypassPermissions`、Codex `agent-full-access`、Copilot autopilot)。
|
|
24
|
+
*/
|
|
25
|
+
const CLAUDE_ACP_MODES = {
|
|
26
|
+
plan: "plan",
|
|
27
|
+
default: "default",
|
|
28
|
+
"auto-edit": "acceptEdits",
|
|
29
|
+
auto: "auto",
|
|
30
|
+
"full-auto": "auto",
|
|
31
|
+
};
|
|
32
|
+
/** codex-acp:`read-only` 是只读沙箱、写操作要审批(等同 app-server 的 on-request / read-only)。 */
|
|
33
|
+
const CODEX_ACP_MODES = {
|
|
34
|
+
plan: "read-only",
|
|
35
|
+
default: "read-only",
|
|
36
|
+
"auto-edit": "workspace-write",
|
|
37
|
+
auto: "agent",
|
|
38
|
+
"full-auto": "agent",
|
|
39
|
+
};
|
|
40
|
+
const COPILOT_MODE = "https://agentclientprotocol.com/protocol/session-modes#";
|
|
41
|
+
const COPILOT_MODES = {
|
|
42
|
+
plan: `${COPILOT_MODE}plan`,
|
|
43
|
+
default: `${COPILOT_MODE}agent`,
|
|
44
|
+
"auto-edit": `${COPILOT_MODE}agent`,
|
|
45
|
+
auto: `${COPILOT_MODE}agent`,
|
|
46
|
+
"full-auto": `${COPILOT_MODE}agent`,
|
|
47
|
+
};
|
|
48
|
+
/** Cursor CLI(官方 ACP 文档):`plan` 只读,`agent` 是完整工具权限(需要授权的仍发 request_permission)。 */
|
|
49
|
+
const CURSOR_MODES = {
|
|
50
|
+
plan: "plan",
|
|
51
|
+
default: "agent",
|
|
52
|
+
"auto-edit": "agent",
|
|
53
|
+
auto: "agent",
|
|
54
|
+
"full-auto": "agent",
|
|
55
|
+
};
|
|
20
56
|
export const DRIVER_CATALOG = [
|
|
21
57
|
{
|
|
22
58
|
agentId: "claude",
|
|
23
59
|
label: "Claude Code",
|
|
24
60
|
candidates: [
|
|
25
|
-
{
|
|
61
|
+
{
|
|
62
|
+
kind: "acp-adapter",
|
|
63
|
+
program: "claude-agent-acp",
|
|
64
|
+
args: [],
|
|
65
|
+
verified: ">=0.89.0 <1.0.0",
|
|
66
|
+
usage: "usd",
|
|
67
|
+
modes: CLAUDE_ACP_MODES,
|
|
68
|
+
},
|
|
26
69
|
{
|
|
27
70
|
kind: "claude-stream",
|
|
28
71
|
program: "claude",
|
|
@@ -37,7 +80,14 @@ export const DRIVER_CATALOG = [
|
|
|
37
80
|
agentId: "codex",
|
|
38
81
|
label: "Codex",
|
|
39
82
|
candidates: [
|
|
40
|
-
{
|
|
83
|
+
{
|
|
84
|
+
kind: "acp-adapter",
|
|
85
|
+
program: "codex-acp",
|
|
86
|
+
args: [],
|
|
87
|
+
verified: ">=2.2.0 <3.0.0",
|
|
88
|
+
usage: "tokens",
|
|
89
|
+
modes: CODEX_ACP_MODES,
|
|
90
|
+
},
|
|
41
91
|
{
|
|
42
92
|
kind: "codex-app-server",
|
|
43
93
|
program: "codex",
|
|
@@ -70,15 +120,44 @@ export const DRIVER_CATALOG = [
|
|
|
70
120
|
{
|
|
71
121
|
agentId: "opencode",
|
|
72
122
|
label: "OpenCode",
|
|
73
|
-
candidates: [{ kind: "acp", program: "opencode", args: ["acp"] }],
|
|
123
|
+
candidates: [{ kind: "acp", program: "opencode", args: ["acp"], verified: ">=1.18.0 <2.0.0" }],
|
|
74
124
|
},
|
|
75
125
|
{
|
|
76
126
|
agentId: "copilot",
|
|
77
127
|
label: "GitHub Copilot CLI",
|
|
78
128
|
candidates: [
|
|
79
|
-
{
|
|
129
|
+
{
|
|
130
|
+
kind: "acp",
|
|
131
|
+
program: "copilot",
|
|
132
|
+
args: ["--acp", "--stdio"],
|
|
133
|
+
verified: ">=1.0.95 <2.0.0",
|
|
134
|
+
usage: "requests",
|
|
135
|
+
modes: COPILOT_MODES,
|
|
136
|
+
acpUsage: "session",
|
|
137
|
+
},
|
|
80
138
|
],
|
|
81
139
|
},
|
|
140
|
+
{
|
|
141
|
+
agentId: "pi",
|
|
142
|
+
label: "Pi",
|
|
143
|
+
// 社区 ACP 适配器 pi-acp 不发 request_permission(pi 没有审批通道),会让工具不经人直接执行,不收录
|
|
144
|
+
candidates: [
|
|
145
|
+
{
|
|
146
|
+
kind: "pi-rpc",
|
|
147
|
+
program: "pi",
|
|
148
|
+
args: ["--mode", "rpc"],
|
|
149
|
+
verified: ">=1.1.0 <2.0.0",
|
|
150
|
+
usage: "usd",
|
|
151
|
+
},
|
|
152
|
+
],
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
agentId: "cursor",
|
|
156
|
+
label: "Cursor CLI",
|
|
157
|
+
// 未实测(本机未装):按官方文档 `cursor-agent acp`,模式 agent / plan / ask;`cursor/ask_question`
|
|
158
|
+
// 等阻塞式扩展方法 ama 不实现(回 method not found,不代答)
|
|
159
|
+
candidates: [{ kind: "acp", program: "cursor-agent", args: ["acp"], modes: CURSOR_MODES }],
|
|
160
|
+
},
|
|
82
161
|
{
|
|
83
162
|
agentId: "goose",
|
|
84
163
|
label: "Goose",
|
|
@@ -142,6 +221,17 @@ export function candidateCapabilities(c) {
|
|
|
142
221
|
usage: "tokens",
|
|
143
222
|
images: false,
|
|
144
223
|
};
|
|
224
|
+
case "pi-rpc":
|
|
225
|
+
// 审批经 ama 加载的审批闸扩展交给人(native/pi-gate.ts)
|
|
226
|
+
return {
|
|
227
|
+
resume: "resume",
|
|
228
|
+
list: false,
|
|
229
|
+
permissions: "interactive",
|
|
230
|
+
steer: true,
|
|
231
|
+
modes: ALL_MODES,
|
|
232
|
+
usage: "usd",
|
|
233
|
+
images: true,
|
|
234
|
+
};
|
|
145
235
|
case "oneshot":
|
|
146
236
|
return {
|
|
147
237
|
resume: c.oneshot === "gemini" ? "none" : "resume",
|
package/dist/drivers/env.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* 外部 Agent 子进程环境清理(docs/wave5-plan.md §5.4,D16)。[W5-E]
|
|
2
|
+
* 外部 Agent 子进程环境清理(docs/history/wave5-plan.md §5.4,D16)。[W5-E]
|
|
3
3
|
*
|
|
4
4
|
* ama 分不清「用户 shell 本来就有」与「为 ama 设的」变量,所以缺省全剥、显式放回:
|
|
5
5
|
* - 删:`BUILTIN_PROVIDERS[].envKeys`(各家 API key)、`*_BASE_URL`、`AMA_*`、`CODEX_API_KEY`、
|
package/dist/drivers/env.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* 外部 Agent 子进程环境清理(docs/wave5-plan.md §5.4,D16)。[W5-E]
|
|
2
|
+
* 外部 Agent 子进程环境清理(docs/history/wave5-plan.md §5.4,D16)。[W5-E]
|
|
3
3
|
*
|
|
4
4
|
* ama 分不清「用户 shell 本来就有」与「为 ama 设的」变量,所以缺省全剥、显式放回:
|
|
5
5
|
* - 删:`BUILTIN_PROVIDERS[].envKeys`(各家 API key)、`*_BASE_URL`、`AMA_*`、`CODEX_API_KEY`、
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* 宿主注入的 runner(`HostApi.runners.provide` 的底座,docs/wave5-plan.md §5.5,D17)。[W5-E → W5-EG]
|
|
2
|
+
* 宿主注入的 runner(`HostApi.runners.provide` 的底座,docs/history/wave5-plan.md §5.5,D17)。[W5-E → W5-EG]
|
|
3
3
|
*
|
|
4
4
|
* 一个宿主适配器一份(host/api-impl.ts 建,经 {@link ExternalAgents} 的 `hostRunners` 选项交给每个
|
|
5
5
|
* 主会话):宿主可以在 `create()` 里或之后任何时候 `provide`,同名替换;返回的函数注销。
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* 宿主注入的 runner(`HostApi.runners.provide` 的底座,docs/wave5-plan.md §5.5,D17)。[W5-E → W5-EG]
|
|
2
|
+
* 宿主注入的 runner(`HostApi.runners.provide` 的底座,docs/history/wave5-plan.md §5.5,D17)。[W5-E → W5-EG]
|
|
3
3
|
*
|
|
4
4
|
* 一个宿主适配器一份(host/api-impl.ts 建,经 {@link ExternalAgents} 的 `hostRunners` 选项交给每个
|
|
5
5
|
* 主会话):宿主可以在 `create()` 里或之后任何时候 `provide`,同名替换;返回的函数注销。
|
package/dist/drivers/jsonrpc.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Claude Code stream-json → DriverEvent 的映射表(docs/wave5-plan.md §5.1 normalize,R2 §3.2)。[W5-E]
|
|
2
|
+
* Claude Code stream-json → DriverEvent 的映射表(docs/history/wave5-plan.md §5.1 normalize,R2 §3.2)。[W5-E]
|
|
3
3
|
*
|
|
4
4
|
* 线上形状按 Claude Code 2.1.x 的 `--output-format stream-json`(Agent SDK 所用的同一协议;
|
|
5
5
|
* 官方称其不是公开的 CLI 接口,R3),只读用到的字段,其余忽略。
|
|
@@ -39,7 +39,15 @@ export interface ClaudeResult {
|
|
|
39
39
|
tool_name?: string;
|
|
40
40
|
}[];
|
|
41
41
|
errors?: string[];
|
|
42
|
+
/** 进程内累计,按模型分;`contextWindow` 是该模型的上下文窗口(2.1.x 起)。 */
|
|
43
|
+
modelUsage?: Record<string, {
|
|
44
|
+
contextWindow?: number;
|
|
45
|
+
}>;
|
|
42
46
|
}
|
|
47
|
+
/** 一条主线 assistant 消息的用量 = 这次请求后的上下文占用(输入 + 缓存读写 + 输出)。 */
|
|
48
|
+
export declare function claudeContextTokens(usage: unknown): number | undefined;
|
|
49
|
+
/** result.modelUsage 里某模型(缺省取最大)的上下文窗口。 */
|
|
50
|
+
export declare function claudeContextWindow(result: ClaudeResult, model: string | undefined): number | undefined;
|
|
43
51
|
/** result.subtype → 回合结束原因;`undefined` 表示执行出错(调用方按错误处理)。 */
|
|
44
52
|
export declare function claudeStopReason(result: ClaudeResult, interrupted: boolean): "end_turn" | "max_turn_requests" | "cancelled" | undefined;
|
|
45
53
|
/** 只保留会话范围的权限建议(`localSettings` 等会改用户 / 项目配置文件,不能替人写)。 */
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Claude Code stream-json → DriverEvent 的映射表(docs/wave5-plan.md §5.1 normalize,R2 §3.2)。[W5-E]
|
|
2
|
+
* Claude Code stream-json → DriverEvent 的映射表(docs/history/wave5-plan.md §5.1 normalize,R2 §3.2)。[W5-E]
|
|
3
3
|
*
|
|
4
4
|
* 线上形状按 Claude Code 2.1.x 的 `--output-format stream-json`(Agent SDK 所用的同一协议;
|
|
5
5
|
* 官方称其不是公开的 CLI 接口,R3),只读用到的字段,其余忽略。
|
|
@@ -81,6 +81,33 @@ export function claudePermissionMode(mode, manualName) {
|
|
|
81
81
|
}
|
|
82
82
|
/** 只能由人回答的提问类工具(ama 不代答)。 */
|
|
83
83
|
export const CLAUDE_QUESTION_TOOLS = new Set(["AskUserQuestion"]);
|
|
84
|
+
/** 一条主线 assistant 消息的用量 = 这次请求后的上下文占用(输入 + 缓存读写 + 输出)。 */
|
|
85
|
+
export function claudeContextTokens(usage) {
|
|
86
|
+
if (typeof usage !== "object" || usage === null)
|
|
87
|
+
return undefined;
|
|
88
|
+
const u = usage;
|
|
89
|
+
let total = 0;
|
|
90
|
+
for (const key of [
|
|
91
|
+
"input_tokens",
|
|
92
|
+
"cache_read_input_tokens",
|
|
93
|
+
"cache_creation_input_tokens",
|
|
94
|
+
"output_tokens",
|
|
95
|
+
])
|
|
96
|
+
if (typeof u[key] === "number")
|
|
97
|
+
total += u[key];
|
|
98
|
+
return total > 0 ? total : undefined;
|
|
99
|
+
}
|
|
100
|
+
/** result.modelUsage 里某模型(缺省取最大)的上下文窗口。 */
|
|
101
|
+
export function claudeContextWindow(result, model) {
|
|
102
|
+
const entries = result.modelUsage ?? {};
|
|
103
|
+
const hit = model !== undefined ? entries[model]?.contextWindow : undefined;
|
|
104
|
+
if (typeof hit === "number" && hit > 0)
|
|
105
|
+
return hit;
|
|
106
|
+
const windows = Object.values(entries)
|
|
107
|
+
.map((e) => e.contextWindow)
|
|
108
|
+
.filter((w) => typeof w === "number" && w > 0);
|
|
109
|
+
return windows.length > 0 ? Math.max(...windows) : undefined;
|
|
110
|
+
}
|
|
84
111
|
/** result.subtype → 回合结束原因;`undefined` 表示执行出错(调用方按错误处理)。 */
|
|
85
112
|
export function claudeStopReason(result, interrupted) {
|
|
86
113
|
if (interrupted)
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Claude Code 原生驱动:stream-json 长驻进程(docs/wave5-plan.md §5.1,R2 §1.2)。[W5-E]
|
|
2
|
+
* Claude Code 原生驱动:stream-json 长驻进程(docs/history/wave5-plan.md §5.1,R2 §1.2)。[W5-E]
|
|
3
3
|
*
|
|
4
4
|
* `claude -p --input-format stream-json --output-format stream-json --verbose
|
|
5
5
|
* --include-partial-messages --permission-prompt-tool stdio --permission-mode <m> --session-id <uuid>`
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Claude Code 原生驱动:stream-json 长驻进程(docs/wave5-plan.md §5.1,R2 §1.2)。[W5-E]
|
|
2
|
+
* Claude Code 原生驱动:stream-json 长驻进程(docs/history/wave5-plan.md §5.1,R2 §1.2)。[W5-E]
|
|
3
3
|
*
|
|
4
4
|
* `claude -p --input-format stream-json --output-format stream-json --verbose
|
|
5
5
|
* --include-partial-messages --permission-prompt-tool stdio --permission-mode <m> --session-id <uuid>`
|
|
@@ -20,7 +20,7 @@ import { createLineReader } from "../../modes/rpc/jsonl.js";
|
|
|
20
20
|
import { armCancelWatchdog, probeCandidate, spawnOf } from "../base.js";
|
|
21
21
|
import { stderrHint } from "../process.js";
|
|
22
22
|
import { TurnCollector, oneLine } from "../turn.js";
|
|
23
|
-
import { CLAUDE_QUESTION_TOOLS, claudePermissionMode, claudeStopReason, claudeTodos, claudeToolKind, claudeToolLocations, claudeToolTitle, sessionScopedSuggestions, } from "./claude-normalize.js";
|
|
23
|
+
import { CLAUDE_QUESTION_TOOLS, claudeContextTokens, claudeContextWindow, claudePermissionMode, claudeStopReason, claudeTodos, claudeToolKind, claudeToolLocations, claudeToolTitle, sessionScopedSuggestions, } from "./claude-normalize.js";
|
|
24
24
|
import { msg as messages } from "../../i18n/index.js";
|
|
25
25
|
export function claudeArgs(options, sessionId, manualName = "manual") {
|
|
26
26
|
const args = [
|
|
@@ -116,6 +116,8 @@ class ClaudeStreamSession {
|
|
|
116
116
|
interrupted = false;
|
|
117
117
|
sawPartialText = false;
|
|
118
118
|
lastTotalCost = 0;
|
|
119
|
+
/** 最近一条主线 assistant 消息的上下文占用与模型(result 里查窗口用)。 */
|
|
120
|
+
context = {};
|
|
119
121
|
closed = false;
|
|
120
122
|
exited = false;
|
|
121
123
|
constructor(agentId, id, transport, deps) {
|
|
@@ -218,6 +220,13 @@ class ClaudeStreamSession {
|
|
|
218
220
|
...(u.cache_read_input_tokens !== undefined ? { cacheRead: u.cache_read_input_tokens } : {}),
|
|
219
221
|
...(cost !== undefined ? { costUsd: cost } : {}),
|
|
220
222
|
});
|
|
223
|
+
const window = claudeContextWindow(result, this.context.model);
|
|
224
|
+
if (this.context.tokens !== undefined || window !== undefined)
|
|
225
|
+
turn.push({
|
|
226
|
+
type: "usage",
|
|
227
|
+
...(this.context.tokens !== undefined ? { contextTokens: this.context.tokens } : {}),
|
|
228
|
+
...(window !== undefined ? { contextWindow: window } : {}),
|
|
229
|
+
});
|
|
221
230
|
if (typeof result.result === "string" && result.result !== "")
|
|
222
231
|
turn.setFinalText(result.result);
|
|
223
232
|
const denials = result.permission_denials?.length ?? 0;
|
|
@@ -337,6 +346,12 @@ class ClaudeStreamSession {
|
|
|
337
346
|
return;
|
|
338
347
|
// 子 Agent(Task)内部的消息不进最终文本
|
|
339
348
|
const nested = typeof parent === "string" && parent !== "";
|
|
349
|
+
const tokens = nested ? undefined : claudeContextTokens(message["usage"]);
|
|
350
|
+
if (tokens !== undefined)
|
|
351
|
+
this.context = {
|
|
352
|
+
tokens,
|
|
353
|
+
...(typeof message["model"] === "string" ? { model: message["model"] } : {}),
|
|
354
|
+
};
|
|
340
355
|
for (const block of message["content"]) {
|
|
341
356
|
if (block["type"] === "text" &&
|
|
342
357
|
!nested &&
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Codex 原生驱动:`codex app-server`(stdio JSON-RPC,docs/wave5-plan.md §5.1,R2 §1.3)。[W5-E]
|
|
2
|
+
* Codex 原生驱动:`codex app-server`(stdio JSON-RPC,docs/history/wave5-plan.md §5.1,R2 §1.3)。[W5-E]
|
|
3
3
|
*
|
|
4
4
|
* - `initialize{clientInfo}` → `initialized` 通知 → `thread/start`(或 `thread/resume`,带
|
|
5
5
|
* `excludeTurns` 不回放)→ 每回合 `turn/start`,以对应 turn 的 `turn/completed` 结束;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Codex 原生驱动:`codex app-server`(stdio JSON-RPC,docs/wave5-plan.md §5.1,R2 §1.3)。[W5-E]
|
|
2
|
+
* Codex 原生驱动:`codex app-server`(stdio JSON-RPC,docs/history/wave5-plan.md §5.1,R2 §1.3)。[W5-E]
|
|
3
3
|
*
|
|
4
4
|
* - `initialize{clientInfo}` → `initialized` 通知 → `thread/start`(或 `thread/resume`,带
|
|
5
5
|
* `excludeTurns` 不回放)→ 每回合 `turn/start`,以对应 turn 的 `turn/completed` 结束;
|
|
@@ -231,11 +231,13 @@ class CodexSession {
|
|
|
231
231
|
const start = this.tokensAtStart;
|
|
232
232
|
const end = this.tokensTotal;
|
|
233
233
|
if (end !== undefined) {
|
|
234
|
+
// Codex 的 inputTokens 含缓存命中部分;ama 的 input 不含(与 cacheRead 相加才是总输入)
|
|
235
|
+
const cacheRead = end.cachedInputTokens - (start?.cachedInputTokens ?? 0);
|
|
234
236
|
turn.push({
|
|
235
237
|
type: "usage",
|
|
236
|
-
input: end.inputTokens - (start?.inputTokens ?? 0),
|
|
238
|
+
input: end.inputTokens - (start?.inputTokens ?? 0) - cacheRead,
|
|
237
239
|
output: end.outputTokens - (start?.outputTokens ?? 0),
|
|
238
|
-
cacheRead
|
|
240
|
+
cacheRead,
|
|
239
241
|
...(this.contextTokens !== undefined ? { contextTokens: this.contextTokens } : {}),
|
|
240
242
|
...(this.contextWindow !== undefined ? { contextWindow: this.contextWindow } : {}),
|
|
241
243
|
});
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Codex app-server(0.160.x,`[experimental]`)↔ ama 的映射(docs/wave5-plan.md §5.1 normalize,
|
|
2
|
+
* Codex app-server(0.160.x,`[experimental]`)↔ ama 的映射(docs/history/wave5-plan.md §5.1 normalize,
|
|
3
3
|
* R2 §1.3)。[W5-E]
|
|
4
4
|
*
|
|
5
5
|
* 只依赖 `test/fixtures/drivers/codex-schema/shapes.json` 锁住的方法与字段(12 个方法 + 5 类审批
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Codex app-server(0.160.x,`[experimental]`)↔ ama 的映射(docs/wave5-plan.md §5.1 normalize,
|
|
2
|
+
* Codex app-server(0.160.x,`[experimental]`)↔ ama 的映射(docs/history/wave5-plan.md §5.1 normalize,
|
|
3
3
|
* R2 §1.3)。[W5-E]
|
|
4
4
|
*
|
|
5
5
|
* 只依赖 `test/fixtures/drivers/codex-schema/shapes.json` 锁住的方法与字段(12 个方法 + 5 类审批
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* 一次性打印模式兜底(docs/wave5-plan.md §5.1 oneshot.ts)。[W5-E]
|
|
2
|
+
* 一次性打印模式兜底(docs/history/wave5-plan.md §5.1 oneshot.ts)。[W5-E]
|
|
3
3
|
*
|
|
4
4
|
* `claude -p --output-format json`、`codex exec --json`、`gemini -p --output-format stream-json`:
|
|
5
5
|
* **不能审批**(能力 `permissions: "none"`),所以只在只读任务下用——open 时模式不是
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* 一次性打印模式兜底(docs/wave5-plan.md §5.1 oneshot.ts)。[W5-E]
|
|
2
|
+
* 一次性打印模式兜底(docs/history/wave5-plan.md §5.1 oneshot.ts)。[W5-E]
|
|
3
3
|
*
|
|
4
4
|
* `claude -p --output-format json`、`codex exec --json`、`gemini -p --output-format stream-json`:
|
|
5
5
|
* **不能审批**(能力 `permissions: "none"`),所以只在只读任务下用——open 时模式不是
|
|
@@ -36,7 +36,15 @@ export function oneshotArgs(dialect, options, session, prompt) {
|
|
|
36
36
|
return args;
|
|
37
37
|
}
|
|
38
38
|
case "codex": {
|
|
39
|
-
|
|
39
|
+
// ama 只在自己已信任的目录里起外部 Agent:跳过 codex 自己的 git 仓库检查(非 git 目录否则直接失败)
|
|
40
|
+
const common = [
|
|
41
|
+
"--json",
|
|
42
|
+
"--skip-git-repo-check",
|
|
43
|
+
"-c",
|
|
44
|
+
'sandbox_mode="read-only"',
|
|
45
|
+
"-c",
|
|
46
|
+
'approval_policy="never"',
|
|
47
|
+
];
|
|
40
48
|
if (options.model !== undefined)
|
|
41
49
|
common.push("-m", options.model);
|
|
42
50
|
return session.resume
|
|
@@ -243,9 +251,11 @@ class OneshotSession {
|
|
|
243
251
|
}
|
|
244
252
|
case "turn.completed": {
|
|
245
253
|
const u = (msg["usage"] ?? {});
|
|
254
|
+
// input_tokens 含缓存命中部分;ama 的 input 不含
|
|
255
|
+
const input = u["input_tokens"];
|
|
246
256
|
turn.push({
|
|
247
257
|
type: "usage",
|
|
248
|
-
...(
|
|
258
|
+
...(input !== undefined ? { input: input - (u["cached_input_tokens"] ?? 0) } : {}),
|
|
249
259
|
...(u["output_tokens"] !== undefined ? { output: u["output_tokens"] } : {}),
|
|
250
260
|
...(u["cached_input_tokens"] !== undefined
|
|
251
261
|
? { cacheRead: u["cached_input_tokens"] }
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* pi 的审批闸(#198):pi 自己没有审批通道,ama 以 `-e <文件>` 给这一次运行加载一个最小扩展,
|
|
3
|
+
* 把只读内置工具以外的每次工具调用经 RPC 的扩展对话框(`extension_ui_request{method: confirm}`)
|
|
4
|
+
* 交给 ama——ama 再按模式决定直接拒绝、直接放行(auto-edit 下的文件编辑)或交给人。
|
|
5
|
+
*
|
|
6
|
+
* 扩展文件写在每个会话自己的临时目录(`mkdtemp`,只有当前用户可写),会话关闭时删除;
|
|
7
|
+
* 不写 pi 的配置目录,不改用户的扩展设置。
|
|
8
|
+
*/
|
|
9
|
+
/** 对话框标题:ama 只认这个标题的 confirm,其它扩展的对话框一律取消(不代答)。 */
|
|
10
|
+
export declare const PI_GATE_TITLE = "ama-approval";
|
|
11
|
+
/** pi 不经审批就放行的内置只读工具(也用于只读模式的 `--tools`)。 */
|
|
12
|
+
export declare const PI_READ_ONLY_TOOLS: readonly string[];
|
|
13
|
+
/** 扩展源码(pi 用 jiti 加载 TypeScript;这里只用纯 JS 语法)。 */
|
|
14
|
+
export declare const PI_GATE_SOURCE: string;
|
|
15
|
+
/** 写一份闸扩展,返回路径与清理函数。 */
|
|
16
|
+
export declare function writePiGate(): {
|
|
17
|
+
path: string;
|
|
18
|
+
dispose(): void;
|
|
19
|
+
};
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* pi 的审批闸(#198):pi 自己没有审批通道,ama 以 `-e <文件>` 给这一次运行加载一个最小扩展,
|
|
3
|
+
* 把只读内置工具以外的每次工具调用经 RPC 的扩展对话框(`extension_ui_request{method: confirm}`)
|
|
4
|
+
* 交给 ama——ama 再按模式决定直接拒绝、直接放行(auto-edit 下的文件编辑)或交给人。
|
|
5
|
+
*
|
|
6
|
+
* 扩展文件写在每个会话自己的临时目录(`mkdtemp`,只有当前用户可写),会话关闭时删除;
|
|
7
|
+
* 不写 pi 的配置目录,不改用户的扩展设置。
|
|
8
|
+
*/
|
|
9
|
+
import { mkdtempSync, rmSync, writeFileSync } from "node:fs";
|
|
10
|
+
import { tmpdir } from "node:os";
|
|
11
|
+
import { join } from "node:path";
|
|
12
|
+
/** 对话框标题:ama 只认这个标题的 confirm,其它扩展的对话框一律取消(不代答)。 */
|
|
13
|
+
export const PI_GATE_TITLE = "ama-approval";
|
|
14
|
+
/** pi 不经审批就放行的内置只读工具(也用于只读模式的 `--tools`)。 */
|
|
15
|
+
export const PI_READ_ONLY_TOOLS = ["read", "grep", "find", "ls"];
|
|
16
|
+
/** 扩展源码(pi 用 jiti 加载 TypeScript;这里只用纯 JS 语法)。 */
|
|
17
|
+
export const PI_GATE_SOURCE = `// Generated by ama for one pi run: routes non-read-only tool calls to ama for approval.
|
|
18
|
+
const READ_ONLY = new Set(${JSON.stringify(PI_READ_ONLY_TOOLS)});
|
|
19
|
+
export default function (pi) {
|
|
20
|
+
pi.on("tool_call", async (event, ctx) => {
|
|
21
|
+
if (READ_ONLY.has(event.toolName)) return undefined;
|
|
22
|
+
const ok = await ctx.ui.confirm(
|
|
23
|
+
${JSON.stringify(PI_GATE_TITLE)},
|
|
24
|
+
JSON.stringify({ id: event.toolCallId, tool: event.toolName, input: event.input }),
|
|
25
|
+
);
|
|
26
|
+
return ok ? undefined : { block: true, reason: event.toolName + " was not approved by the user" };
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
`;
|
|
30
|
+
/** 写一份闸扩展,返回路径与清理函数。 */
|
|
31
|
+
export function writePiGate() {
|
|
32
|
+
const dir = mkdtempSync(join(tmpdir(), "ama-pi-"));
|
|
33
|
+
const path = join(dir, "ama-approval-gate.ts");
|
|
34
|
+
writeFileSync(path, PI_GATE_SOURCE, { mode: 0o600 });
|
|
35
|
+
return {
|
|
36
|
+
path,
|
|
37
|
+
dispose: () => rmSync(dir, { recursive: true, force: true }),
|
|
38
|
+
};
|
|
39
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* pi 原生驱动:`pi --mode rpc` 长驻进程(stdin 命令 / stdout 响应与事件,严格按 LF 分帧)。[#198]
|
|
3
|
+
*
|
|
4
|
+
* `pi --mode rpc --session-id <uuid> [--model <m>] -e <审批闸> [--tools read,grep,find,ls]`
|
|
5
|
+
* (新会话与续聊都用 `--session-id`:pi 找到同 id 的项目会话就续上,否则新建)。
|
|
6
|
+
*
|
|
7
|
+
* - 回合:`prompt` → 响应 `disposition`(`handled` 时没有运行,直接结束)→ 事件流 → `agent_settled`
|
|
8
|
+
* 结束(`aborted` 为真即中断);运行中追加用 `steer`;中断 `abort`(15 s 看门狗)。
|
|
9
|
+
* - 审批:pi 自己不问人,ama 以 `-e` 加载审批闸({@link PI_GATE_SOURCE}),只读内置工具以外的调用
|
|
10
|
+
* 经 `extension_ui_request{confirm, title: "ama-approval"}` 到这里:plan / allowlist 直接拒绝(并以
|
|
11
|
+
* `--tools` 只开只读工具),auto-edit / auto / full-auto 放行 `edit` / `write`,其余交给人(只交给人,
|
|
12
|
+
* 不代答)。其它扩展的对话框(select / input / editor / 别的 confirm)一律取消并提示。
|
|
13
|
+
* - 用量:assistant `message_end` 的 usage 累加(input 不含缓存命中,cost.total 是 pi 按价目表的估算);
|
|
14
|
+
* 回合结束后 `get_session_stats` 的 `contextUsage` 记上下文占用与窗口。
|
|
15
|
+
*/
|
|
16
|
+
import { type DriverDeps } from "../base.js";
|
|
17
|
+
import type { CatalogCandidate } from "../catalog.js";
|
|
18
|
+
import type { AcpToolKind, AgentDriver, DriverOpenOptions, DriverProbe, DriverSession } from "../types.js";
|
|
19
|
+
export declare function piArgs(options: Pick<DriverOpenOptions, "mode" | "model">, sessionId: string, gatePath: string): string[];
|
|
20
|
+
export declare function piToolKind(tool: string): AcpToolKind;
|
|
21
|
+
export declare class PiRpcDriver implements AgentDriver {
|
|
22
|
+
readonly agentId: string;
|
|
23
|
+
private readonly candidate;
|
|
24
|
+
private readonly deps;
|
|
25
|
+
readonly kind: "pi-rpc";
|
|
26
|
+
constructor(agentId: string, candidate: CatalogCandidate, deps?: DriverDeps);
|
|
27
|
+
probe(): Promise<DriverProbe>;
|
|
28
|
+
open(options: DriverOpenOptions): Promise<DriverSession>;
|
|
29
|
+
}
|