@compilr-dev/cli 0.5.0 → 0.5.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/README.md +236 -68
- package/dist/.tsbuildinfo.app +1 -0
- package/dist/.tsbuildinfo.data +1 -0
- package/dist/.tsbuildinfo.domain +1 -0
- package/dist/.tsbuildinfo.foundation +1 -0
- package/dist/agent.d.ts +61 -4
- package/dist/agent.js +241 -245
- package/dist/anchors/index.d.ts +1 -1
- package/dist/anchors/index.js +1 -1
- package/dist/anchors/project-anchors.d.ts +2 -2
- package/dist/anchors/project-anchors.js +1 -1
- package/dist/auth/api-client.d.ts +124 -0
- package/dist/auth/api-client.js +261 -0
- package/dist/auth/index.d.ts +172 -0
- package/dist/auth/index.js +545 -0
- package/dist/auth/storage.d.ts +52 -0
- package/dist/auth/storage.js +118 -0
- package/dist/changelog/index.d.ts +16 -0
- package/dist/changelog/index.js +24 -0
- package/dist/changelog/releases.d.ts +17 -0
- package/dist/changelog/releases.js +63 -0
- package/dist/commands-v2/handlers/auth.d.ts +10 -0
- package/dist/commands-v2/handlers/auth.js +118 -0
- package/dist/commands-v2/handlers/background.d.ts +14 -0
- package/dist/commands-v2/handlers/background.js +276 -0
- package/dist/commands-v2/handlers/context.js +266 -81
- package/dist/commands-v2/handlers/core.d.ts +1 -0
- package/dist/commands-v2/handlers/core.js +133 -8
- package/dist/commands-v2/handlers/debug.js +18 -0
- package/dist/commands-v2/handlers/delegations.d.ts +8 -0
- package/dist/commands-v2/handlers/delegations.js +29 -0
- package/dist/commands-v2/handlers/files.d.ts +8 -0
- package/dist/commands-v2/handlers/files.js +162 -0
- package/dist/commands-v2/handlers/filter.d.ts +9 -0
- package/dist/commands-v2/handlers/filter.js +130 -0
- package/dist/commands-v2/handlers/games.d.ts +7 -0
- package/dist/commands-v2/handlers/games.js +57 -0
- package/dist/commands-v2/handlers/index.d.ts +13 -0
- package/dist/commands-v2/handlers/index.js +39 -0
- package/dist/commands-v2/handlers/mcp.d.ts +8 -0
- package/dist/commands-v2/handlers/mcp.js +39 -0
- package/dist/commands-v2/handlers/notifications.d.ts +9 -0
- package/dist/commands-v2/handlers/notifications.js +34 -0
- package/dist/commands-v2/handlers/project.js +244 -23
- package/dist/commands-v2/handlers/reset.d.ts +11 -0
- package/dist/commands-v2/handlers/reset.js +118 -0
- package/dist/commands-v2/handlers/session.d.ts +161 -0
- package/dist/commands-v2/handlers/session.js +805 -0
- package/dist/commands-v2/handlers/settings.d.ts +2 -0
- package/dist/commands-v2/handlers/settings.js +217 -35
- package/dist/commands-v2/handlers/tasks.d.ts +5 -0
- package/dist/commands-v2/handlers/tasks.js +36 -0
- package/dist/commands-v2/handlers/team.d.ts +9 -0
- package/dist/commands-v2/handlers/team.js +549 -0
- package/dist/commands-v2/handlers/terminals.d.ts +9 -0
- package/dist/commands-v2/handlers/terminals.js +34 -0
- package/dist/commands-v2/index.d.ts +3 -2
- package/dist/commands-v2/index.js +4 -1
- package/dist/commands-v2/registry.d.ts +15 -0
- package/dist/commands-v2/registry.js +34 -0
- package/dist/commands-v2/types.d.ts +81 -3
- package/dist/commands.js +13 -0
- package/dist/compilr-diff-companion.vsix +0 -0
- package/dist/db/index.js +98 -4
- package/dist/db/repositories/document-repository.d.ts +2 -0
- package/dist/db/repositories/document-repository.js +5 -1
- package/dist/db/repositories/index.d.ts +2 -0
- package/dist/db/repositories/index.js +1 -0
- package/dist/db/repositories/plan-repository.d.ts +101 -0
- package/dist/db/repositories/plan-repository.js +275 -0
- package/dist/db/repositories/project-repository.d.ts +6 -0
- package/dist/db/repositories/project-repository.js +41 -0
- package/dist/db/repositories/work-item-repository.d.ts +15 -0
- package/dist/db/repositories/work-item-repository.js +69 -4
- package/dist/db/schema.d.ts +40 -3
- package/dist/db/schema.js +66 -3
- package/dist/episodes/index.d.ts +20 -0
- package/dist/episodes/index.js +27 -0
- package/dist/episodes/recorder.d.ts +51 -0
- package/dist/episodes/recorder.js +195 -0
- package/dist/episodes/significant-work.d.ts +21 -0
- package/dist/episodes/significant-work.js +56 -0
- package/dist/episodes/store.d.ts +38 -0
- package/dist/episodes/store.js +199 -0
- package/dist/episodes/types.d.ts +35 -0
- package/dist/episodes/types.js +6 -0
- package/dist/episodes/work-at-risk.d.ts +12 -0
- package/dist/episodes/work-at-risk.js +38 -0
- package/dist/episodes/work-summary-anchor.d.ts +23 -0
- package/dist/episodes/work-summary-anchor.js +73 -0
- package/dist/games/coins.d.ts +66 -0
- package/dist/games/coins.js +165 -0
- package/dist/games/game-base.d.ts +84 -0
- package/dist/games/game-base.js +204 -0
- package/dist/games/index.d.ts +16 -0
- package/dist/games/index.js +49 -0
- package/dist/games/scores.d.ts +69 -0
- package/dist/games/scores.js +191 -0
- package/dist/games/tetris/board.d.ts +59 -0
- package/dist/games/tetris/board.js +170 -0
- package/dist/games/tetris/index.d.ts +109 -0
- package/dist/games/tetris/index.js +610 -0
- package/dist/games/tetris/pieces.d.ts +44 -0
- package/dist/games/tetris/pieces.js +271 -0
- package/dist/games/tetris/renderer.d.ts +26 -0
- package/dist/games/tetris/renderer.js +77 -0
- package/dist/guide/guide-content.d.ts +23 -0
- package/dist/guide/guide-content.js +196 -0
- package/dist/guide/index.d.ts +8 -0
- package/dist/guide/index.js +7 -0
- package/dist/guide/shared-content.d.ts +37 -0
- package/dist/guide/shared-content.js +1272 -0
- package/dist/guide/tutorial-helpers.d.ts +57 -0
- package/dist/guide/tutorial-helpers.js +147 -0
- package/dist/handlers/ask-user-handlers.d.ts +32 -0
- package/dist/handlers/ask-user-handlers.js +104 -0
- package/dist/handlers/delegation-handlers.d.ts +34 -0
- package/dist/handlers/delegation-handlers.js +291 -0
- package/dist/handlers/permission-handler.d.ts +30 -0
- package/dist/handlers/permission-handler.js +205 -0
- package/dist/index.d.ts +11 -1
- package/dist/index.js +448 -271
- package/dist/input-handlers/memory-handler.d.ts +1 -1
- package/dist/input-handlers/memory-handler.js +2 -1
- package/dist/models/index.d.ts +10 -0
- package/dist/models/index.js +12 -0
- package/dist/models/model-registry.d.ts +38 -0
- package/dist/models/model-registry.js +69 -0
- package/dist/models/model-tiers.d.ts +28 -0
- package/dist/models/model-tiers.js +71 -0
- package/dist/models/model-validation.d.ts +25 -0
- package/dist/models/model-validation.js +291 -0
- package/dist/models/ollama-models.d.ts +73 -0
- package/dist/models/ollama-models.js +178 -0
- package/dist/models/provider-types.d.ts +6 -0
- package/dist/models/provider-types.js +1 -0
- package/dist/models/providers.d.ts +35 -0
- package/dist/models/providers.js +58 -0
- package/dist/models/types.d.ts +4 -0
- package/dist/models/types.js +4 -0
- package/dist/multi-agent/activity.d.ts +21 -0
- package/dist/multi-agent/activity.js +34 -0
- package/dist/multi-agent/agent-selection.d.ts +55 -0
- package/dist/multi-agent/agent-selection.js +90 -0
- package/dist/multi-agent/artifacts.d.ts +197 -0
- package/dist/multi-agent/artifacts.js +379 -0
- package/dist/multi-agent/checkpointer.d.ts +138 -0
- package/dist/multi-agent/checkpointer.js +471 -0
- package/dist/multi-agent/collision-utils.d.ts +16 -0
- package/dist/multi-agent/collision-utils.js +28 -0
- package/dist/multi-agent/context-resolver.d.ts +97 -0
- package/dist/multi-agent/context-resolver.js +316 -0
- package/dist/multi-agent/custom-agents.d.ts +83 -0
- package/dist/multi-agent/custom-agents.js +227 -0
- package/dist/multi-agent/delegation-tracker.d.ts +157 -0
- package/dist/multi-agent/delegation-tracker.js +243 -0
- package/dist/multi-agent/file-lock-hook.d.ts +29 -0
- package/dist/multi-agent/file-lock-hook.js +97 -0
- package/dist/multi-agent/file-locks.d.ts +58 -0
- package/dist/multi-agent/file-locks.js +194 -0
- package/dist/multi-agent/index.d.ts +24 -0
- package/dist/multi-agent/index.js +30 -0
- package/dist/multi-agent/mention-parser.d.ts +64 -0
- package/dist/multi-agent/mention-parser.js +146 -0
- package/dist/multi-agent/notification-manager.d.ts +84 -0
- package/dist/multi-agent/notification-manager.js +224 -0
- package/dist/multi-agent/pending-requests.d.ts +122 -0
- package/dist/multi-agent/pending-requests.js +155 -0
- package/dist/multi-agent/session-registry.d.ts +139 -0
- package/dist/multi-agent/session-registry.js +514 -0
- package/dist/multi-agent/shared-context.d.ts +293 -0
- package/dist/multi-agent/shared-context.js +671 -0
- package/dist/multi-agent/skill-requirements.d.ts +66 -0
- package/dist/multi-agent/skill-requirements.js +178 -0
- package/dist/multi-agent/task-assignment.d.ts +69 -0
- package/dist/multi-agent/task-assignment.js +123 -0
- package/dist/multi-agent/task-suggestion.d.ts +31 -0
- package/dist/multi-agent/task-suggestion.js +72 -0
- package/dist/multi-agent/team-agent.d.ts +201 -0
- package/dist/multi-agent/team-agent.js +488 -0
- package/dist/multi-agent/team.d.ts +286 -0
- package/dist/multi-agent/team.js +610 -0
- package/dist/multi-agent/tool-config.d.ts +110 -0
- package/dist/multi-agent/tool-config.js +661 -0
- package/dist/multi-agent/types.d.ts +211 -0
- package/dist/multi-agent/types.js +617 -0
- package/dist/prompts/plan-mode-prompt.d.ts +11 -0
- package/dist/prompts/plan-mode-prompt.js +95 -0
- package/dist/repl-helpers.js +3 -2
- package/dist/repl-v2.d.ts +401 -2
- package/dist/repl-v2.js +2577 -65
- package/dist/session/index.d.ts +6 -0
- package/dist/session/index.js +6 -0
- package/dist/session/project-session-manager.d.ts +158 -0
- package/dist/session/project-session-manager.js +650 -0
- package/dist/settings/index.d.ts +133 -13
- package/dist/settings/index.js +329 -24
- package/dist/settings/mcp-config.d.ts +76 -0
- package/dist/settings/mcp-config.js +143 -0
- package/dist/settings/paths.d.ts +4 -0
- package/dist/settings/paths.js +6 -0
- package/dist/shared-handlers.d.ts +62 -0
- package/dist/shared-handlers.js +48 -0
- package/dist/system-prompt/builder.d.ts +5 -0
- package/dist/system-prompt/builder.js +4 -0
- package/dist/system-prompt/index.d.ts +18 -0
- package/dist/system-prompt/index.js +18 -0
- package/dist/system-prompt/modules.d.ts +5 -0
- package/dist/system-prompt/modules.js +4 -0
- package/dist/tabbed-menu.js +2 -1
- package/dist/templates/compilr-md-import.d.ts +16 -0
- package/dist/templates/compilr-md-import.js +241 -0
- package/dist/templates/compilr-md.js +10 -61
- package/dist/templates/config-json.d.ts +1 -25
- package/dist/templates/index.d.ts +2 -0
- package/dist/templates/index.js +34 -73
- package/dist/tool-names.d.ts +108 -0
- package/dist/tool-names.js +227 -0
- package/dist/tools/anchor-tools.d.ts +4 -4
- package/dist/tools/anchor-tools.js +1 -1
- package/dist/tools/artifact-tools.d.ts +42 -0
- package/dist/tools/artifact-tools.js +328 -0
- package/dist/tools/ask-user-simple.d.ts +1 -1
- package/dist/tools/ask-user-simple.js +2 -1
- package/dist/tools/ask-user.d.ts +1 -1
- package/dist/tools/ask-user.js +2 -1
- package/dist/tools/backlog-wrappers.d.ts +5 -3
- package/dist/tools/backlog-wrappers.js +16 -1
- package/dist/tools/backlog.d.ts +2 -2
- package/dist/tools/backlog.js +1 -1
- package/dist/tools/db-tools.d.ts +8 -61
- package/dist/tools/db-tools.js +8 -13
- package/dist/tools/delegate-background.d.ts +27 -0
- package/dist/tools/delegate-background.js +115 -0
- package/dist/tools/delegate.d.ts +22 -0
- package/dist/tools/delegate.js +97 -0
- package/dist/tools/delegation-status.d.ts +16 -0
- package/dist/tools/delegation-status.js +128 -0
- package/dist/tools/document-db.d.ts +5 -5
- package/dist/tools/document-db.js +1 -1
- package/dist/tools/guide-tool.d.ts +12 -0
- package/dist/tools/guide-tool.js +59 -0
- package/dist/tools/handoff.d.ts +25 -0
- package/dist/tools/handoff.js +99 -0
- package/dist/tools/meta-tools.d.ts +26 -0
- package/dist/tools/meta-tools.js +47 -0
- package/dist/tools/plan-tools.d.ts +54 -0
- package/dist/tools/plan-tools.js +338 -0
- package/dist/tools/platform-adapter.d.ts +29 -0
- package/dist/tools/platform-adapter.js +394 -0
- package/dist/tools/project-db.d.ts +5 -73
- package/dist/tools/project-db.js +5 -336
- package/dist/tools/recall-work-tool.d.ts +18 -0
- package/dist/tools/recall-work-tool.js +82 -0
- package/dist/tools/workitem-db.d.ts +43 -11
- package/dist/tools/workitem-db.js +186 -5
- package/dist/tools.d.ts +67 -2
- package/dist/tools.js +237 -47
- package/dist/ui/autocomplete-controller.d.ts +42 -0
- package/dist/ui/autocomplete-controller.js +384 -0
- package/dist/ui/base/index.d.ts +1 -1
- package/dist/ui/base/index.js +1 -1
- package/dist/ui/base/overlay-base-v2.d.ts +10 -0
- package/dist/ui/base/overlay-base-v2.js +14 -0
- package/dist/ui/base/render-utils.d.ts +19 -0
- package/dist/ui/base/render-utils.js +25 -0
- package/dist/ui/base/tabbed-list-overlay-v2.d.ts +16 -1
- package/dist/ui/base/tabbed-list-overlay-v2.js +19 -1
- package/dist/ui/constants/labels.d.ts +14 -0
- package/dist/ui/constants/labels.js +51 -0
- package/dist/ui/conversation-store.d.ts +55 -0
- package/dist/ui/conversation-store.js +107 -0
- package/dist/ui/conversation.js +11 -13
- package/dist/ui/diff.d.ts +7 -1
- package/dist/ui/diff.js +85 -48
- package/dist/ui/ephemeral.js +3 -9
- package/dist/ui/file-autocomplete.d.ts +24 -0
- package/dist/ui/file-autocomplete.js +56 -0
- package/dist/ui/footer-renderer.d.ts +69 -0
- package/dist/ui/footer-renderer.js +431 -0
- package/dist/ui/footer.d.ts +74 -7
- package/dist/ui/footer.js +173 -16
- package/dist/ui/input-controller.d.ts +51 -0
- package/dist/ui/input-controller.js +176 -0
- package/dist/ui/input-prompt.d.ts +19 -0
- package/dist/ui/input-prompt.js +206 -14
- package/dist/ui/keyboard-handler.d.ts +57 -0
- package/dist/ui/keyboard-handler.js +557 -0
- package/dist/ui/live-region-facade.d.ts +42 -0
- package/dist/ui/live-region-facade.js +205 -0
- package/dist/ui/live-region.d.ts +0 -4
- package/dist/ui/live-region.js +6 -14
- package/dist/ui/mascot/renderer.d.ts +1 -1
- package/dist/ui/mascot/renderer.js +37 -2
- package/dist/ui/overlay/data/tutorial-content.d.ts +9 -0
- package/dist/ui/overlay/data/tutorial-content.js +9 -0
- package/dist/ui/overlay/data/tutorial-registry.d.ts +12 -0
- package/dist/ui/overlay/data/tutorial-registry.js +116 -0
- package/dist/ui/overlay/data/tutorial-types.d.ts +35 -0
- package/dist/ui/overlay/data/tutorial-types.js +6 -0
- package/dist/ui/overlay/data/tutorials/basics/first-conversation.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/basics/first-conversation.js +220 -0
- package/dist/ui/overlay/data/tutorials/basics/first-project.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/basics/first-project.js +284 -0
- package/dist/ui/overlay/data/tutorials/basics/navigation.d.ts +8 -0
- package/dist/ui/overlay/data/tutorials/basics/navigation.js +22 -0
- package/dist/ui/overlay/data/tutorials/basics/welcome.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/basics/welcome.js +174 -0
- package/dist/ui/overlay/data/tutorials/config/context-management.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/config/context-management.js +158 -0
- package/dist/ui/overlay/data/tutorials/config/mcp-servers.d.ts +8 -0
- package/dist/ui/overlay/data/tutorials/config/mcp-servers.js +155 -0
- package/dist/ui/overlay/data/tutorials/config/model-selection.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/config/model-selection.js +162 -0
- package/dist/ui/overlay/data/tutorials/config/permissions-safety.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/config/permissions-safety.js +163 -0
- package/dist/ui/overlay/data/tutorials/config/settings-config.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/config/settings-config.js +166 -0
- package/dist/ui/overlay/data/tutorials/planning/arch.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/planning/arch.js +168 -0
- package/dist/ui/overlay/data/tutorials/planning/backlog.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/planning/backlog.js +103 -0
- package/dist/ui/overlay/data/tutorials/planning/build.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/planning/build.js +173 -0
- package/dist/ui/overlay/data/tutorials/planning/design.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/planning/design.js +205 -0
- package/dist/ui/overlay/data/tutorials/planning/docs.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/planning/docs.js +143 -0
- package/dist/ui/overlay/data/tutorials/planning/prd.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/planning/prd.js +173 -0
- package/dist/ui/overlay/data/tutorials/planning/scaffold.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/planning/scaffold.js +164 -0
- package/dist/ui/overlay/data/tutorials/planning/sketch.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/planning/sketch.js +58 -0
- package/dist/ui/overlay/data/tutorials/projects/anchors.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/projects/anchors.js +248 -0
- package/dist/ui/overlay/data/tutorials/projects/import-project.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/projects/import-project.js +172 -0
- package/dist/ui/overlay/data/tutorials/projects/managing-projects.d.ts +8 -0
- package/dist/ui/overlay/data/tutorials/projects/managing-projects.js +212 -0
- package/dist/ui/overlay/data/tutorials/projects/new-project.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/projects/new-project.js +251 -0
- package/dist/ui/overlay/data/tutorials/projects/session-management.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/projects/session-management.js +169 -0
- package/dist/ui/overlay/data/tutorials/teams/background-execution.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/teams/background-execution.js +171 -0
- package/dist/ui/overlay/data/tutorials/teams/multi-terminal.d.ts +8 -0
- package/dist/ui/overlay/data/tutorials/teams/multi-terminal.js +147 -0
- package/dist/ui/overlay/data/tutorials/teams/task-assignment.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/teams/task-assignment.js +204 -0
- package/dist/ui/overlay/data/tutorials/teams/team-overview.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/teams/team-overview.js +165 -0
- package/dist/ui/overlay/data/tutorials/teams/working-with-agents.d.ts +7 -0
- package/dist/ui/overlay/data/tutorials/teams/working-with-agents.js +172 -0
- package/dist/ui/overlay/impl/agents-overlay-v2.js +6 -17
- package/dist/ui/overlay/impl/anchors-overlay-v2.js +30 -64
- package/dist/ui/overlay/impl/artifact-detail-overlay-v2.d.ts +43 -0
- package/dist/ui/overlay/impl/artifact-detail-overlay-v2.js +232 -0
- package/dist/ui/overlay/impl/artifact-overlay-v2.d.ts +40 -0
- package/dist/ui/overlay/impl/artifact-overlay-v2.js +115 -0
- package/dist/ui/overlay/impl/ask-user-overlay-v2.js +2 -5
- package/dist/ui/overlay/impl/background-overlay-v2.d.ts +40 -0
- package/dist/ui/overlay/impl/background-overlay-v2.js +147 -0
- package/dist/ui/overlay/impl/backlog-overlay-v2.d.ts +4 -1
- package/dist/ui/overlay/impl/backlog-overlay-v2.js +55 -16
- package/dist/ui/overlay/impl/changelog-overlay-v2.d.ts +44 -0
- package/dist/ui/overlay/impl/changelog-overlay-v2.js +165 -0
- package/dist/ui/overlay/impl/commands-overlay-v2.js +4 -6
- package/dist/ui/overlay/impl/config-overlay-v2.d.ts +12 -1
- package/dist/ui/overlay/impl/config-overlay-v2.js +164 -100
- package/dist/ui/overlay/impl/custom-agent-form-overlay-v2.d.ts +83 -0
- package/dist/ui/overlay/impl/custom-agent-form-overlay-v2.js +711 -0
- package/dist/ui/overlay/impl/dashboard-overlay-v2.d.ts +2 -0
- package/dist/ui/overlay/impl/dashboard-overlay-v2.js +26 -3
- package/dist/ui/overlay/impl/delegations-overlay-v2.d.ts +28 -0
- package/dist/ui/overlay/impl/delegations-overlay-v2.js +279 -0
- package/dist/ui/overlay/impl/docs-overlay-v2.js +12 -9
- package/dist/ui/overlay/impl/document-detail-overlay-v2.d.ts +7 -0
- package/dist/ui/overlay/impl/document-detail-overlay-v2.js +119 -78
- package/dist/ui/overlay/impl/filter-overlay-v2.d.ts +41 -0
- package/dist/ui/overlay/impl/filter-overlay-v2.js +110 -0
- package/dist/ui/overlay/impl/games-overlay-v2.d.ts +31 -0
- package/dist/ui/overlay/impl/games-overlay-v2.js +135 -0
- package/dist/ui/overlay/impl/help-overlay-v2.d.ts +26 -3
- package/dist/ui/overlay/impl/help-overlay-v2.js +20 -42
- package/dist/ui/overlay/impl/login-overlay-v2.d.ts +49 -0
- package/dist/ui/overlay/impl/login-overlay-v2.js +277 -0
- package/dist/ui/overlay/impl/mcp-overlay-v2.d.ts +63 -0
- package/dist/ui/overlay/impl/mcp-overlay-v2.js +907 -0
- package/dist/ui/overlay/impl/model-overlay-v2.d.ts +57 -13
- package/dist/ui/overlay/impl/model-overlay-v2.js +1086 -61
- package/dist/ui/overlay/impl/new-overlay-v2.d.ts +37 -6
- package/dist/ui/overlay/impl/new-overlay-v2.js +715 -65
- package/dist/ui/overlay/impl/notifications-overlay-v2.d.ts +20 -0
- package/dist/ui/overlay/impl/notifications-overlay-v2.js +116 -0
- package/dist/ui/overlay/impl/onboarding-wizard-overlay-v2.d.ts +76 -0
- package/dist/ui/overlay/impl/onboarding-wizard-overlay-v2.js +728 -0
- package/dist/ui/overlay/impl/pending-overlay-v2.d.ts +51 -0
- package/dist/ui/overlay/impl/pending-overlay-v2.js +445 -0
- package/dist/ui/overlay/impl/permission-overlay-v2.js +5 -5
- package/dist/ui/overlay/impl/permissions-overlay-v2.d.ts +85 -0
- package/dist/ui/overlay/impl/permissions-overlay-v2.js +820 -0
- package/dist/ui/overlay/impl/plan-approval-overlay-v2.d.ts +35 -0
- package/dist/ui/overlay/impl/plan-approval-overlay-v2.js +181 -0
- package/dist/ui/overlay/impl/project-edit-overlay-v2.d.ts +36 -0
- package/dist/ui/overlay/impl/project-edit-overlay-v2.js +195 -0
- package/dist/ui/overlay/impl/projects-overlay-v2.d.ts +1 -0
- package/dist/ui/overlay/impl/projects-overlay-v2.js +278 -44
- package/dist/ui/overlay/impl/reset-overlay-v2.d.ts +39 -0
- package/dist/ui/overlay/impl/reset-overlay-v2.js +107 -0
- package/dist/ui/overlay/impl/resume-overlay-v2.d.ts +60 -0
- package/dist/ui/overlay/impl/resume-overlay-v2.js +414 -0
- package/dist/ui/overlay/impl/session-mode-overlay-v2.d.ts +43 -0
- package/dist/ui/overlay/impl/session-mode-overlay-v2.js +124 -0
- package/dist/ui/overlay/impl/tasks-overlay-v2.d.ts +28 -0
- package/dist/ui/overlay/impl/tasks-overlay-v2.js +283 -0
- package/dist/ui/overlay/impl/team-overlay-v2.d.ts +86 -0
- package/dist/ui/overlay/impl/team-overlay-v2.js +692 -0
- package/dist/ui/overlay/impl/terminals-overlay-v2.d.ts +26 -0
- package/dist/ui/overlay/impl/terminals-overlay-v2.js +217 -0
- package/dist/ui/overlay/impl/tools-overlay-v2.js +3 -7
- package/dist/ui/overlay/impl/tutorial-overlay-v2.d.ts +30 -16
- package/dist/ui/overlay/impl/tutorial-overlay-v2.js +133 -956
- package/dist/ui/overlay/impl/workflow-overlay-v2.js +5 -1
- package/dist/ui/overlay/index.d.ts +20 -1
- package/dist/ui/overlay/index.js +19 -0
- package/dist/ui/overlay/types.d.ts +5 -0
- package/dist/ui/overlay-manager.d.ts +43 -0
- package/dist/ui/overlay-manager.js +238 -0
- package/dist/ui/overlays.js +4 -16
- package/dist/ui/permission-overlay.js +6 -5
- package/dist/ui/status-bar-controller.d.ts +33 -0
- package/dist/ui/status-bar-controller.js +99 -0
- package/dist/ui/subagent-renderer.js +3 -19
- package/dist/ui/terminal-autocomplete-utils.d.ts +23 -0
- package/dist/ui/terminal-autocomplete-utils.js +83 -0
- package/dist/ui/terminal-line-builders.d.ts +17 -0
- package/dist/ui/terminal-line-builders.js +42 -0
- package/dist/ui/terminal-render-item.d.ts +16 -0
- package/dist/ui/terminal-render-item.js +267 -0
- package/dist/ui/terminal-renderer.d.ts +7 -8
- package/dist/ui/terminal-renderer.js +7 -8
- package/dist/ui/terminal-types.d.ts +179 -0
- package/dist/ui/terminal-types.js +34 -0
- package/dist/ui/terminal-ui.d.ts +144 -276
- package/dist/ui/terminal-ui.js +384 -1861
- package/dist/ui/todo-zone.d.ts +19 -1
- package/dist/ui/todo-zone.js +71 -13
- package/dist/ui/tool-formatters.js +512 -1
- package/dist/ui/turn-metrics.d.ts +56 -0
- package/dist/ui/turn-metrics.js +75 -0
- package/dist/ui/types.d.ts +28 -0
- package/dist/ui/types.js +1 -0
- package/dist/ui/vscode-diff-ipc.d.ts +102 -0
- package/dist/ui/vscode-diff-ipc.js +385 -0
- package/dist/utils/credentials.d.ts +24 -5
- package/dist/utils/credentials.js +123 -9
- package/dist/utils/format-tokens.d.ts +13 -0
- package/dist/utils/format-tokens.js +18 -0
- package/dist/utils/git-config.d.ts +26 -0
- package/dist/utils/git-config.js +54 -0
- package/dist/utils/message-utils.d.ts +61 -0
- package/dist/utils/message-utils.js +72 -0
- package/dist/utils/model-tiers.d.ts +8 -1
- package/dist/utils/model-tiers.js +38 -16
- package/dist/utils/open-browser.d.ts +5 -0
- package/dist/utils/open-browser.js +32 -0
- package/dist/utils/path-safety.js +3 -2
- package/dist/utils/project-detection.d.ts +58 -0
- package/dist/utils/project-detection.js +424 -0
- package/dist/utils/project-memory.js +2 -1
- package/dist/utils/project-status.d.ts +2 -2
- package/dist/utils/startup-perf.d.ts +18 -0
- package/dist/utils/startup-perf.js +60 -0
- package/dist/utils/token-tracker.d.ts +62 -0
- package/dist/utils/token-tracker.js +150 -0
- package/dist/utils/token-types.d.ts +23 -0
- package/dist/utils/token-types.js +18 -0
- package/dist/utils/types/config-types.d.ts +32 -0
- package/dist/utils/types/config-types.js +8 -0
- package/dist/utils/update-checker.d.ts +28 -0
- package/dist/utils/update-checker.js +106 -0
- package/dist/utils/version.d.ts +7 -0
- package/dist/utils/version.js +10 -0
- package/dist/utils/vscode-detect.d.ts +39 -0
- package/dist/utils/vscode-detect.js +137 -0
- package/package.json +25 -12
- package/dist/commands/handler-types.d.ts +0 -68
- package/dist/commands/handler-types.js +0 -8
- package/dist/commands/handlers/agent-commands.d.ts +0 -13
- package/dist/commands/handlers/agent-commands.js +0 -305
- package/dist/commands/handlers/design-commands.d.ts +0 -15
- package/dist/commands/handlers/design-commands.js +0 -334
- package/dist/commands/handlers/index.d.ts +0 -20
- package/dist/commands/handlers/index.js +0 -43
- package/dist/commands/handlers/overlay-commands.d.ts +0 -21
- package/dist/commands/handlers/overlay-commands.js +0 -287
- package/dist/commands/handlers/project-commands.d.ts +0 -11
- package/dist/commands/handlers/project-commands.js +0 -167
- package/dist/commands/handlers/simple-commands.d.ts +0 -19
- package/dist/commands/handlers/simple-commands.js +0 -144
- package/dist/commands/registry.d.ts +0 -50
- package/dist/commands/registry.js +0 -75
- package/dist/index.old.d.ts +0 -7
- package/dist/index.old.js +0 -1014
- package/dist/repl.d.ts +0 -149
- package/dist/repl.js +0 -1151
- package/dist/templates/claude-md.d.ts +0 -7
- package/dist/templates/claude-md.js +0 -189
- package/dist/test-autocomplete.d.ts +0 -7
- package/dist/test-autocomplete.js +0 -85
- package/dist/test-tabbed-menu.d.ts +0 -7
- package/dist/test-tabbed-menu.js +0 -25
- package/dist/tool-selector.d.ts +0 -71
- package/dist/tool-selector.js +0 -184
- package/dist/ui/agents-overlay-v2.d.ts +0 -43
- package/dist/ui/agents-overlay-v2.js +0 -809
- package/dist/ui/agents-overlay.d.ts +0 -12
- package/dist/ui/agents-overlay.js +0 -863
- package/dist/ui/anchors-overlay.d.ts +0 -12
- package/dist/ui/anchors-overlay.js +0 -775
- package/dist/ui/arch-type-overlay.d.ts +0 -15
- package/dist/ui/arch-type-overlay.js +0 -201
- package/dist/ui/ask-user-overlay-v2.d.ts +0 -26
- package/dist/ui/ask-user-overlay-v2.js +0 -555
- package/dist/ui/ask-user-simple-overlay-v2.d.ts +0 -25
- package/dist/ui/ask-user-simple-overlay-v2.js +0 -215
- package/dist/ui/backlog-overlay.d.ts +0 -32
- package/dist/ui/backlog-overlay.js +0 -652
- package/dist/ui/commands-overlay-v2.d.ts +0 -33
- package/dist/ui/commands-overlay-v2.js +0 -441
- package/dist/ui/commands-overlay.d.ts +0 -16
- package/dist/ui/commands-overlay.js +0 -439
- package/dist/ui/config-overlay.d.ts +0 -35
- package/dist/ui/config-overlay.js +0 -707
- package/dist/ui/docs-overlay.d.ts +0 -17
- package/dist/ui/docs-overlay.js +0 -303
- package/dist/ui/footer-v2.d.ts +0 -222
- package/dist/ui/footer-v2.js +0 -1349
- package/dist/ui/help-overlay-v2.d.ts +0 -34
- package/dist/ui/help-overlay-v2.js +0 -309
- package/dist/ui/help-overlay.d.ts +0 -16
- package/dist/ui/help-overlay.js +0 -316
- package/dist/ui/init-overlay-v2.d.ts +0 -34
- package/dist/ui/init-overlay-v2.js +0 -600
- package/dist/ui/init-overlay.d.ts +0 -34
- package/dist/ui/init-overlay.js +0 -604
- package/dist/ui/input-prompt-v2.d.ts +0 -180
- package/dist/ui/input-prompt-v2.js +0 -999
- package/dist/ui/iteration-limit-overlay-v2.d.ts +0 -21
- package/dist/ui/iteration-limit-overlay-v2.js +0 -114
- package/dist/ui/keys-overlay-v2.d.ts +0 -41
- package/dist/ui/keys-overlay-v2.js +0 -248
- package/dist/ui/mascot-overlay-v2.d.ts +0 -41
- package/dist/ui/mascot-overlay-v2.js +0 -138
- package/dist/ui/mascot-overlay.d.ts +0 -21
- package/dist/ui/mascot-overlay.js +0 -146
- package/dist/ui/model-overlay-v2.d.ts +0 -49
- package/dist/ui/model-overlay-v2.js +0 -118
- package/dist/ui/model-overlay.d.ts +0 -27
- package/dist/ui/model-overlay.js +0 -221
- package/dist/ui/model-warning-overlay.d.ts +0 -30
- package/dist/ui/model-warning-overlay.js +0 -169
- package/dist/ui/new-overlay.d.ts +0 -34
- package/dist/ui/new-overlay.js +0 -604
- package/dist/ui/overlay/impl/init-overlay-v2.d.ts +0 -77
- package/dist/ui/overlay/impl/init-overlay-v2.js +0 -593
- package/dist/ui/overlay/overlay-types.d.ts +0 -128
- package/dist/ui/overlay/overlay-types.js +0 -22
- package/dist/ui/overlays/help-overlay-v2.d.ts +0 -28
- package/dist/ui/overlays/help-overlay-v2.js +0 -198
- package/dist/ui/overlays/index.d.ts +0 -11
- package/dist/ui/overlays/index.js +0 -11
- package/dist/ui/permission-overlay-v2.d.ts +0 -36
- package/dist/ui/permission-overlay-v2.js +0 -380
- package/dist/ui/projects-overlay.d.ts +0 -19
- package/dist/ui/projects-overlay.js +0 -484
- package/dist/ui/theme-overlay-v2.d.ts +0 -42
- package/dist/ui/theme-overlay-v2.js +0 -135
- package/dist/ui/theme-overlay.d.ts +0 -24
- package/dist/ui/theme-overlay.js +0 -127
- package/dist/ui/tools-overlay-v2.d.ts +0 -47
- package/dist/ui/tools-overlay-v2.js +0 -218
- package/dist/ui/tools-overlay.d.ts +0 -34
- package/dist/ui/tools-overlay.js +0 -230
- package/dist/ui/tutorial-overlay-v2.d.ts +0 -31
- package/dist/ui/tutorial-overlay-v2.js +0 -1035
- package/dist/ui/tutorial-overlay.d.ts +0 -11
- package/dist/ui/tutorial-overlay.js +0 -1034
- package/dist/ui/workflow-overlay.d.ts +0 -22
- package/dist/ui/workflow-overlay.js +0 -636
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
* Extracts content, summary, and success from tool results.
|
|
5
5
|
* Each tool type has its own formatter to produce human-readable output.
|
|
6
6
|
*/
|
|
7
|
+
import { truncate } from './base/index.js';
|
|
7
8
|
/**
|
|
8
9
|
* Format tool result for display.
|
|
9
10
|
* Handles the agent's structured result format.
|
|
@@ -16,6 +17,10 @@ export function formatToolResult(toolName, result) {
|
|
|
16
17
|
// Check for success/result wrapper
|
|
17
18
|
const success = obj.success !== false;
|
|
18
19
|
const innerResult = (obj.result ?? obj);
|
|
20
|
+
// Handle delegated results — large tool outputs that were auto-summarized
|
|
21
|
+
if (innerResult._delegated === true) {
|
|
22
|
+
return formatDelegated(toolName, innerResult);
|
|
23
|
+
}
|
|
19
24
|
// Extract content based on tool type
|
|
20
25
|
let content = '';
|
|
21
26
|
let summary = '';
|
|
@@ -95,6 +100,84 @@ export function formatToolResult(toolName, result) {
|
|
|
95
100
|
else if (toolLower === 'task') {
|
|
96
101
|
({ content, summary } = formatTask(innerResult));
|
|
97
102
|
}
|
|
103
|
+
else if (toolLower === 'plan_get') {
|
|
104
|
+
({ content, summary } = formatPlanGet(innerResult));
|
|
105
|
+
}
|
|
106
|
+
else if (toolLower === 'plan_list') {
|
|
107
|
+
({ content, summary } = formatPlanList(innerResult));
|
|
108
|
+
}
|
|
109
|
+
else if (toolLower === 'plan_create') {
|
|
110
|
+
({ content, summary } = formatPlanCreate(innerResult));
|
|
111
|
+
}
|
|
112
|
+
else if (toolLower === 'plan_update') {
|
|
113
|
+
({ content, summary } = formatPlanUpdate(innerResult));
|
|
114
|
+
}
|
|
115
|
+
else if (toolLower === 'plan_delete') {
|
|
116
|
+
({ content, summary } = formatPlanDelete(innerResult));
|
|
117
|
+
}
|
|
118
|
+
else if (toolLower === 'delegate_background') {
|
|
119
|
+
({ content, summary } = formatDelegateBackground(innerResult));
|
|
120
|
+
}
|
|
121
|
+
else if (toolLower === 'delegate' || toolLower === 'handoff') {
|
|
122
|
+
({ content, summary } = formatDelegate(innerResult));
|
|
123
|
+
}
|
|
124
|
+
else if (toolLower === 'todo_claim' || toolLower === 'todo_handoff') {
|
|
125
|
+
({ content, summary } = formatTodoClaim(innerResult));
|
|
126
|
+
}
|
|
127
|
+
else if (toolLower === 'recall_work') {
|
|
128
|
+
({ content, summary } = formatRecallWork(innerResult));
|
|
129
|
+
}
|
|
130
|
+
else if (toolLower.startsWith('artifact_')) {
|
|
131
|
+
({ content, summary } = formatArtifact(toolLower, innerResult));
|
|
132
|
+
}
|
|
133
|
+
else if (toolLower === 'list_tools') {
|
|
134
|
+
({ content, summary } = formatListTools(innerResult));
|
|
135
|
+
}
|
|
136
|
+
else if (toolLower === 'get_tool_info') {
|
|
137
|
+
({ content, summary } = formatGetToolInfo(innerResult));
|
|
138
|
+
}
|
|
139
|
+
else if (toolLower === 'git_stash') {
|
|
140
|
+
({ content, summary } = formatGitStash(innerResult));
|
|
141
|
+
}
|
|
142
|
+
else if (toolLower === 'git_blame') {
|
|
143
|
+
({ content, summary } = formatGitBlame(innerResult));
|
|
144
|
+
}
|
|
145
|
+
else if (toolLower === 'git_file_history') {
|
|
146
|
+
({ content, summary } = formatGitFileHistory(innerResult));
|
|
147
|
+
}
|
|
148
|
+
else if (toolLower === 'run_build') {
|
|
149
|
+
({ content, summary } = formatRunBuild(innerResult));
|
|
150
|
+
}
|
|
151
|
+
else if (toolLower === 'run_format') {
|
|
152
|
+
({ content, summary } = formatRunFormat(innerResult));
|
|
153
|
+
}
|
|
154
|
+
else if (toolLower === 'find_definition') {
|
|
155
|
+
({ content, summary } = formatFindDefinition(innerResult));
|
|
156
|
+
}
|
|
157
|
+
else if (toolLower === 'find_references') {
|
|
158
|
+
({ content, summary } = formatFindReferences(innerResult));
|
|
159
|
+
}
|
|
160
|
+
else if (toolLower === 'find_todos') {
|
|
161
|
+
({ content, summary } = formatFindTodos(innerResult));
|
|
162
|
+
}
|
|
163
|
+
else if (toolLower === 'check_outdated') {
|
|
164
|
+
({ content, summary } = formatCheckOutdated(innerResult));
|
|
165
|
+
}
|
|
166
|
+
else if (toolLower === 'find_vulnerabilities') {
|
|
167
|
+
({ content, summary } = formatFindVulnerabilities(innerResult));
|
|
168
|
+
}
|
|
169
|
+
else if (toolLower === 'analyze_test_coverage') {
|
|
170
|
+
({ content, summary } = formatAnalyzeTestCoverage(innerResult));
|
|
171
|
+
}
|
|
172
|
+
else if (toolLower === 'get_file_structure') {
|
|
173
|
+
({ content, summary } = formatGetFileStructure(innerResult));
|
|
174
|
+
}
|
|
175
|
+
else if (toolLower === 'get_complexity') {
|
|
176
|
+
({ content, summary } = formatGetComplexity(innerResult));
|
|
177
|
+
}
|
|
178
|
+
else if (toolLower === 'read_function' || toolLower === 'read_class' || toolLower === 'read_type') {
|
|
179
|
+
({ content, summary } = formatReadSymbol(innerResult));
|
|
180
|
+
}
|
|
98
181
|
else {
|
|
99
182
|
// Generic handling
|
|
100
183
|
({ content, summary } = formatGeneric(innerResult));
|
|
@@ -458,7 +541,7 @@ function formatProjectDocument(toolName, result) {
|
|
|
458
541
|
}
|
|
459
542
|
const docType = document.docType || 'unknown';
|
|
460
543
|
const content = document.content || '';
|
|
461
|
-
const preview = content
|
|
544
|
+
const preview = truncate(content, 200);
|
|
462
545
|
return { content: preview, summary: `Document: ${docType}` };
|
|
463
546
|
}
|
|
464
547
|
// Handle document_list - return list of documents
|
|
@@ -504,6 +587,421 @@ function formatTask(result) {
|
|
|
504
587
|
const content = response || '';
|
|
505
588
|
return { content, summary };
|
|
506
589
|
}
|
|
590
|
+
// =============================================================================
|
|
591
|
+
// Plan Formatters
|
|
592
|
+
// =============================================================================
|
|
593
|
+
function formatPlanGet(result) {
|
|
594
|
+
const plan = result.plan;
|
|
595
|
+
if (!plan) {
|
|
596
|
+
const message = result.message;
|
|
597
|
+
return { content: '', summary: message || 'Plan not found' };
|
|
598
|
+
}
|
|
599
|
+
const name = plan.name || 'Unknown';
|
|
600
|
+
const status = plan.status || 'draft';
|
|
601
|
+
const planContent = plan.content || '';
|
|
602
|
+
const workItem = plan.workItem;
|
|
603
|
+
// Build summary
|
|
604
|
+
let summary = `${name} [${status}]`;
|
|
605
|
+
if (workItem) {
|
|
606
|
+
const itemId = workItem.itemId || '';
|
|
607
|
+
summary += ` → ${itemId}`;
|
|
608
|
+
}
|
|
609
|
+
// For content, show a preview of the plan (first 500 chars with section headers visible)
|
|
610
|
+
const lines = planContent.split('\n');
|
|
611
|
+
const previewLines = [];
|
|
612
|
+
let charCount = 0;
|
|
613
|
+
const maxChars = 500;
|
|
614
|
+
for (const line of lines) {
|
|
615
|
+
if (charCount >= maxChars) {
|
|
616
|
+
previewLines.push('...');
|
|
617
|
+
break;
|
|
618
|
+
}
|
|
619
|
+
previewLines.push(line);
|
|
620
|
+
charCount += line.length + 1;
|
|
621
|
+
}
|
|
622
|
+
const content = previewLines.join('\n');
|
|
623
|
+
return { content, summary };
|
|
624
|
+
}
|
|
625
|
+
function formatPlanList(result) {
|
|
626
|
+
const plans = result.plans;
|
|
627
|
+
const count = result.count;
|
|
628
|
+
const statusCounts = result.statusCounts;
|
|
629
|
+
if (!plans?.length) {
|
|
630
|
+
return { content: '', summary: 'No plans found' };
|
|
631
|
+
}
|
|
632
|
+
// Build summary with status counts
|
|
633
|
+
let summary = `${String(count ?? plans.length)} plan(s)`;
|
|
634
|
+
if (statusCounts) {
|
|
635
|
+
const statuses = [];
|
|
636
|
+
if (statusCounts.draft)
|
|
637
|
+
statuses.push(`${String(statusCounts.draft)} draft`);
|
|
638
|
+
if (statusCounts.approved)
|
|
639
|
+
statuses.push(`${String(statusCounts.approved)} approved`);
|
|
640
|
+
if (statusCounts.in_progress)
|
|
641
|
+
statuses.push(`${String(statusCounts.in_progress)} in progress`);
|
|
642
|
+
if (statusCounts.completed)
|
|
643
|
+
statuses.push(`${String(statusCounts.completed)} completed`);
|
|
644
|
+
if (statuses.length)
|
|
645
|
+
summary += ` (${statuses.join(', ')})`;
|
|
646
|
+
}
|
|
647
|
+
// Build content with plan list
|
|
648
|
+
const lines = plans.slice(0, 10).map((p) => {
|
|
649
|
+
const status = p.status ? `[${p.status}]` : '';
|
|
650
|
+
const workItem = p.workItemItemId ? ` → ${p.workItemItemId}` : '';
|
|
651
|
+
return `${p.name || '?'} ${status}${workItem}`;
|
|
652
|
+
});
|
|
653
|
+
if (plans.length > 10) {
|
|
654
|
+
lines.push(`... and ${String(plans.length - 10)} more`);
|
|
655
|
+
}
|
|
656
|
+
return { content: lines.join('\n'), summary };
|
|
657
|
+
}
|
|
658
|
+
function formatPlanCreate(result) {
|
|
659
|
+
const message = result.message;
|
|
660
|
+
const plan = result.plan;
|
|
661
|
+
if (message) {
|
|
662
|
+
return { content: '', summary: message };
|
|
663
|
+
}
|
|
664
|
+
if (plan) {
|
|
665
|
+
const name = plan.name || 'Unknown';
|
|
666
|
+
const id = plan.id;
|
|
667
|
+
return { content: '', summary: `Created plan: ${name}${id ? ` (ID: ${String(id)})` : ''}` };
|
|
668
|
+
}
|
|
669
|
+
return { content: '', summary: 'Plan created' };
|
|
670
|
+
}
|
|
671
|
+
function formatPlanUpdate(result) {
|
|
672
|
+
const message = result.message;
|
|
673
|
+
const plan = result.plan;
|
|
674
|
+
if (message) {
|
|
675
|
+
return { content: '', summary: message };
|
|
676
|
+
}
|
|
677
|
+
if (plan) {
|
|
678
|
+
const name = plan.name || 'Unknown';
|
|
679
|
+
const status = plan.status || '';
|
|
680
|
+
return { content: '', summary: `Updated plan: ${name}${status ? ` [${status}]` : ''}` };
|
|
681
|
+
}
|
|
682
|
+
return { content: '', summary: 'Plan updated' };
|
|
683
|
+
}
|
|
684
|
+
function formatPlanDelete(result) {
|
|
685
|
+
const message = result.message;
|
|
686
|
+
return { content: '', summary: message || 'Plan deleted' };
|
|
687
|
+
}
|
|
688
|
+
// =============================================================================
|
|
689
|
+
// agents-coding Tool Formatters
|
|
690
|
+
// =============================================================================
|
|
691
|
+
function formatGitStash(result) {
|
|
692
|
+
const message = result.message;
|
|
693
|
+
const stashes = result.stashes;
|
|
694
|
+
if (message) {
|
|
695
|
+
return { content: '', summary: message };
|
|
696
|
+
}
|
|
697
|
+
if (stashes?.length) {
|
|
698
|
+
const lines = stashes.slice(0, 5).map((s) => `stash@{${String(s.index ?? 0)}}: ${(s.message || '').slice(0, 50)}`);
|
|
699
|
+
if (stashes.length > 5)
|
|
700
|
+
lines.push(`... and ${String(stashes.length - 5)} more`);
|
|
701
|
+
return { content: lines.join('\n'), summary: `${String(stashes.length)} stash(es)` };
|
|
702
|
+
}
|
|
703
|
+
return { content: '', summary: 'No stashes' };
|
|
704
|
+
}
|
|
705
|
+
function formatGitBlame(result) {
|
|
706
|
+
const lines = result.lines;
|
|
707
|
+
const authors = result.authorSummary;
|
|
708
|
+
if (authors?.length) {
|
|
709
|
+
const topAuthors = authors.slice(0, 3).map((a) => `${a.author || '?'}: ${String(a.lines ?? 0)} lines`).join(', ');
|
|
710
|
+
const summary = `${String(lines?.length ?? 0)} lines, ${topAuthors}`;
|
|
711
|
+
return { content: '', summary };
|
|
712
|
+
}
|
|
713
|
+
return { content: '', summary: `${String(lines?.length ?? 0)} lines analyzed` };
|
|
714
|
+
}
|
|
715
|
+
function formatGitFileHistory(result) {
|
|
716
|
+
const commits = result.commits;
|
|
717
|
+
const file = result.file;
|
|
718
|
+
if (!commits?.length) {
|
|
719
|
+
return { content: '', summary: 'No history found' };
|
|
720
|
+
}
|
|
721
|
+
const summary = `${String(commits.length)} commit(s) for ${file || 'file'}`;
|
|
722
|
+
const lines = commits.slice(0, 5).map((c) => `${c.shortHash || '?'} ${(c.subject || '').slice(0, 50)}`);
|
|
723
|
+
if (commits.length > 5)
|
|
724
|
+
lines.push(`... and ${String(commits.length - 5)} more`);
|
|
725
|
+
return { content: lines.join('\n'), summary };
|
|
726
|
+
}
|
|
727
|
+
function formatRunBuild(result) {
|
|
728
|
+
const success = result.success;
|
|
729
|
+
const command = result.command;
|
|
730
|
+
const stdout = result.stdout;
|
|
731
|
+
const status = success === false ? 'Build failed' : 'Build succeeded';
|
|
732
|
+
const summary = command ? `${status} (${command})` : status;
|
|
733
|
+
return { content: stdout || '', summary };
|
|
734
|
+
}
|
|
735
|
+
function formatRunFormat(result) {
|
|
736
|
+
const filesFormatted = result.filesFormatted;
|
|
737
|
+
const command = result.command;
|
|
738
|
+
if (filesFormatted !== undefined) {
|
|
739
|
+
return { content: '', summary: `Formatted ${String(filesFormatted)} file(s)` };
|
|
740
|
+
}
|
|
741
|
+
return { content: '', summary: command ? `Ran ${command}` : 'Format complete' };
|
|
742
|
+
}
|
|
743
|
+
function formatFindDefinition(result) {
|
|
744
|
+
const definitions = result.definitions;
|
|
745
|
+
if (!definitions?.length) {
|
|
746
|
+
return { content: '', summary: 'No definitions found' };
|
|
747
|
+
}
|
|
748
|
+
const summary = `Found ${String(definitions.length)} definition(s)`;
|
|
749
|
+
const lines = definitions.slice(0, 5).map((d) => `${d.path || '?'}:${String(d.line ?? 0)} [${d.type || '?'}] ${d.name || ''}`);
|
|
750
|
+
if (definitions.length > 5)
|
|
751
|
+
lines.push(`... and ${String(definitions.length - 5)} more`);
|
|
752
|
+
return { content: lines.join('\n'), summary };
|
|
753
|
+
}
|
|
754
|
+
function formatFindReferences(result) {
|
|
755
|
+
const references = result.references;
|
|
756
|
+
const totalCount = result.totalCount;
|
|
757
|
+
const count = totalCount ?? references?.length ?? 0;
|
|
758
|
+
if (count === 0) {
|
|
759
|
+
return { content: '', summary: 'No references found' };
|
|
760
|
+
}
|
|
761
|
+
const summary = `Found ${String(count)} reference(s)`;
|
|
762
|
+
if (references?.length) {
|
|
763
|
+
const lines = references.slice(0, 5).map((r) => `${r.path || '?'}:${String(r.line ?? 0)}`);
|
|
764
|
+
if (references.length > 5)
|
|
765
|
+
lines.push(`... and ${String(references.length - 5)} more`);
|
|
766
|
+
return { content: lines.join('\n'), summary };
|
|
767
|
+
}
|
|
768
|
+
return { content: '', summary };
|
|
769
|
+
}
|
|
770
|
+
function formatFindTodos(result) {
|
|
771
|
+
const todos = result.todos;
|
|
772
|
+
if (!todos?.length) {
|
|
773
|
+
return { content: '', summary: 'No TODOs found' };
|
|
774
|
+
}
|
|
775
|
+
const summary = `Found ${String(todos.length)} TODO(s)`;
|
|
776
|
+
const lines = todos.slice(0, 5).map((t) => `${t.path || '?'}:${String(t.line ?? 0)} [${t.type || 'TODO'}] ${(t.text || '').slice(0, 40)}`);
|
|
777
|
+
if (todos.length > 5)
|
|
778
|
+
lines.push(`... and ${String(todos.length - 5)} more`);
|
|
779
|
+
return { content: lines.join('\n'), summary };
|
|
780
|
+
}
|
|
781
|
+
function formatCheckOutdated(result) {
|
|
782
|
+
const packages = result.packages;
|
|
783
|
+
if (!packages?.length) {
|
|
784
|
+
return { content: '', summary: 'All packages up to date' };
|
|
785
|
+
}
|
|
786
|
+
const summary = `${String(packages.length)} outdated package(s)`;
|
|
787
|
+
const lines = packages.slice(0, 5).map((p) => `${p.name || '?'}: ${p.current || '?'} → ${p.latest || '?'} (${p.type || 'update'})`);
|
|
788
|
+
if (packages.length > 5)
|
|
789
|
+
lines.push(`... and ${String(packages.length - 5)} more`);
|
|
790
|
+
return { content: lines.join('\n'), summary };
|
|
791
|
+
}
|
|
792
|
+
function formatFindVulnerabilities(result) {
|
|
793
|
+
const vulnerabilities = result.vulnerabilities;
|
|
794
|
+
if (!vulnerabilities?.length) {
|
|
795
|
+
return { content: '', summary: 'No vulnerabilities found' };
|
|
796
|
+
}
|
|
797
|
+
// Count by severity
|
|
798
|
+
const bySeverity = {};
|
|
799
|
+
vulnerabilities.forEach((v) => {
|
|
800
|
+
const sev = v.severity || 'unknown';
|
|
801
|
+
bySeverity[sev] = (bySeverity[sev] || 0) + 1;
|
|
802
|
+
});
|
|
803
|
+
const sevParts = Object.entries(bySeverity).map(([k, v]) => `${String(v)} ${k}`).join(', ');
|
|
804
|
+
const summary = `${String(vulnerabilities.length)} vulnerabilities (${sevParts})`;
|
|
805
|
+
const lines = vulnerabilities.slice(0, 5).map((v) => `[${v.severity || '?'}] ${v.name || '?'}: ${(v.title || '').slice(0, 40)}`);
|
|
806
|
+
if (vulnerabilities.length > 5)
|
|
807
|
+
lines.push(`... and ${String(vulnerabilities.length - 5)} more`);
|
|
808
|
+
return { content: lines.join('\n'), summary };
|
|
809
|
+
}
|
|
810
|
+
function formatAnalyzeTestCoverage(result) {
|
|
811
|
+
const summary_data = result.summary;
|
|
812
|
+
const meetsThreshold = result.meetsThreshold;
|
|
813
|
+
if (summary_data) {
|
|
814
|
+
const lineCov = summary_data.lines?.pct ?? summary_data.statements?.pct ?? 0;
|
|
815
|
+
const funcCov = summary_data.functions?.pct ?? 0;
|
|
816
|
+
const branchCov = summary_data.branches?.pct ?? 0;
|
|
817
|
+
const status = meetsThreshold === false ? ' (below threshold)' : '';
|
|
818
|
+
const summary = `Coverage: ${lineCov.toFixed(1)}% lines, ${funcCov.toFixed(1)}% functions, ${branchCov.toFixed(1)}% branches${status}`;
|
|
819
|
+
return { content: '', summary };
|
|
820
|
+
}
|
|
821
|
+
return { content: '', summary: 'Coverage analysis complete' };
|
|
822
|
+
}
|
|
823
|
+
function formatGetFileStructure(result) {
|
|
824
|
+
const classes = result.classes;
|
|
825
|
+
const functions = result.functions;
|
|
826
|
+
const imports = result.imports;
|
|
827
|
+
const exports = result.exports;
|
|
828
|
+
const parts = [];
|
|
829
|
+
if (classes?.length)
|
|
830
|
+
parts.push(`${String(classes.length)} class(es)`);
|
|
831
|
+
if (functions?.length)
|
|
832
|
+
parts.push(`${String(functions.length)} function(s)`);
|
|
833
|
+
if (imports?.length)
|
|
834
|
+
parts.push(`${String(imports.length)} import(s)`);
|
|
835
|
+
if (exports?.length)
|
|
836
|
+
parts.push(`${String(exports.length)} export(s)`);
|
|
837
|
+
const summary = parts.length > 0 ? parts.join(', ') : 'Empty file';
|
|
838
|
+
// Build detailed content
|
|
839
|
+
const lines = [];
|
|
840
|
+
if (classes?.length) {
|
|
841
|
+
lines.push('Classes:');
|
|
842
|
+
classes.slice(0, 5).forEach((c) => lines.push(` - ${c.name || '?'}`));
|
|
843
|
+
if (classes.length > 5)
|
|
844
|
+
lines.push(` ... and ${String(classes.length - 5)} more`);
|
|
845
|
+
}
|
|
846
|
+
if (functions?.length) {
|
|
847
|
+
lines.push('Functions:');
|
|
848
|
+
functions.slice(0, 5).forEach((f) => lines.push(` - ${f.name || '?'}`));
|
|
849
|
+
if (functions.length > 5)
|
|
850
|
+
lines.push(` ... and ${String(functions.length - 5)} more`);
|
|
851
|
+
}
|
|
852
|
+
return { content: lines.join('\n'), summary };
|
|
853
|
+
}
|
|
854
|
+
function formatGetComplexity(result) {
|
|
855
|
+
const files = result.files;
|
|
856
|
+
const functions_data = result.functions;
|
|
857
|
+
if (functions_data?.length) {
|
|
858
|
+
const highComplexity = functions_data.filter((f) => (f.complexity ?? 0) > 10);
|
|
859
|
+
if (highComplexity.length > 0) {
|
|
860
|
+
const summary = `${String(highComplexity.length)} high-complexity function(s)`;
|
|
861
|
+
const lines = highComplexity.slice(0, 5).map((f) => `${f.name || '?'}: complexity ${String(f.complexity ?? 0)}`);
|
|
862
|
+
if (highComplexity.length > 5)
|
|
863
|
+
lines.push(`... and ${String(highComplexity.length - 5)} more`);
|
|
864
|
+
return { content: lines.join('\n'), summary };
|
|
865
|
+
}
|
|
866
|
+
return { content: '', summary: 'All functions within complexity threshold' };
|
|
867
|
+
}
|
|
868
|
+
if (files?.length) {
|
|
869
|
+
const summary = `Analyzed ${String(files.length)} file(s)`;
|
|
870
|
+
return { content: '', summary };
|
|
871
|
+
}
|
|
872
|
+
return { content: '', summary: 'Complexity analysis complete' };
|
|
873
|
+
}
|
|
874
|
+
function formatReadSymbol(result) {
|
|
875
|
+
const name = result.name;
|
|
876
|
+
const kind = result.kind;
|
|
877
|
+
const startLine = result.startLine;
|
|
878
|
+
const endLine = result.endLine;
|
|
879
|
+
const codeContent = result.content;
|
|
880
|
+
const signature = result.signature;
|
|
881
|
+
const container = result.container;
|
|
882
|
+
// Build summary: [kind] name (lines X-Y)
|
|
883
|
+
const kindLabel = kind || 'symbol';
|
|
884
|
+
const lineRange = startLine && endLine ? ` (lines ${String(startLine)}-${String(endLine)})` : '';
|
|
885
|
+
const containerInfo = container ? ` in ${container}` : '';
|
|
886
|
+
const summary = `[${kindLabel}] ${name || '?'}${containerInfo}${lineRange}`;
|
|
887
|
+
// Content is the actual source code
|
|
888
|
+
// Format it nicely with line numbers
|
|
889
|
+
if (codeContent) {
|
|
890
|
+
const lines = codeContent.split('\n');
|
|
891
|
+
const start = startLine ?? 1;
|
|
892
|
+
const numberedLines = lines.map((line, i) => {
|
|
893
|
+
const lineNum = String(start + i).padStart(4, ' ');
|
|
894
|
+
return `${lineNum} │ ${line}`;
|
|
895
|
+
});
|
|
896
|
+
return { content: numberedLines.join('\n'), summary };
|
|
897
|
+
}
|
|
898
|
+
// Fallback to signature if no content
|
|
899
|
+
if (signature) {
|
|
900
|
+
return { content: signature, summary };
|
|
901
|
+
}
|
|
902
|
+
return { content: '', summary };
|
|
903
|
+
}
|
|
904
|
+
function formatTodoClaim(result) {
|
|
905
|
+
const message = result.message;
|
|
906
|
+
return { content: '', summary: message || 'Done' };
|
|
907
|
+
}
|
|
908
|
+
function formatRecallWork(result) {
|
|
909
|
+
const episodes = result.episodes;
|
|
910
|
+
const totalEpisodes = result.totalEpisodes;
|
|
911
|
+
const totalEffort = result.totalEffort;
|
|
912
|
+
const uncommittedCount = result.uncommittedCount;
|
|
913
|
+
if (!episodes?.length) {
|
|
914
|
+
return { content: '', summary: 'No work history' };
|
|
915
|
+
}
|
|
916
|
+
// Summary line
|
|
917
|
+
const uncommittedInfo = uncommittedCount ? `, ${String(uncommittedCount)} uncommitted` : '';
|
|
918
|
+
const summary = `${String(totalEpisodes ?? episodes.length)} episode(s), effort: ${totalEffort || '?'}${uncommittedInfo}`;
|
|
919
|
+
// Build detailed content
|
|
920
|
+
const lines = [];
|
|
921
|
+
for (const ep of episodes.slice(0, 10)) {
|
|
922
|
+
const time = ep.timestamp ? new Date(ep.timestamp).toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' }) : '?';
|
|
923
|
+
const agent = ep.agentId || '?';
|
|
924
|
+
const action = ep.summary || ep.action || '?';
|
|
925
|
+
const effort = ep.effort ? `[${ep.effort}]` : '';
|
|
926
|
+
lines.push(`${time} ${agent} ${effort} ${action}`);
|
|
927
|
+
}
|
|
928
|
+
if (episodes.length > 10) {
|
|
929
|
+
lines.push(`... and ${String(episodes.length - 10)} more`);
|
|
930
|
+
}
|
|
931
|
+
return { content: lines.join('\n'), summary };
|
|
932
|
+
}
|
|
933
|
+
function formatArtifact(toolName, result) {
|
|
934
|
+
const action = toolName.replace('artifact_', '');
|
|
935
|
+
// artifact_list
|
|
936
|
+
if (action === 'list') {
|
|
937
|
+
const content = typeof result.content === 'string' ? result.content : '';
|
|
938
|
+
const lines = content.split('\n').filter((l) => l.length > 0);
|
|
939
|
+
// First line is typically "Found N artifacts:"
|
|
940
|
+
const summary = lines.length > 0 ? lines[0].slice(0, 60) : 'No artifacts';
|
|
941
|
+
return { content: '', summary };
|
|
942
|
+
}
|
|
943
|
+
// artifact_save
|
|
944
|
+
if (action === 'save') {
|
|
945
|
+
const content = typeof result.content === 'string' ? result.content : '';
|
|
946
|
+
const match = /Created artifact "([^"]+)"/.exec(content);
|
|
947
|
+
return { content: '', summary: match ? `Saved: ${match[1]}` : 'Artifact saved' };
|
|
948
|
+
}
|
|
949
|
+
// artifact_get
|
|
950
|
+
if (action === 'get') {
|
|
951
|
+
const content = typeof result.content === 'string' ? result.content : '';
|
|
952
|
+
const match = /Artifact: (.+)/.exec(content);
|
|
953
|
+
return { content, summary: match ? match[1].slice(0, 60) : 'Artifact retrieved' };
|
|
954
|
+
}
|
|
955
|
+
// artifact_delete
|
|
956
|
+
if (action === 'delete') {
|
|
957
|
+
const content = typeof result.content === 'string' ? result.content : '';
|
|
958
|
+
const match = /Deleted artifact "([^"]+)"/.exec(content);
|
|
959
|
+
return { content: '', summary: match ? `Deleted: ${match[1]}` : 'Artifact deleted' };
|
|
960
|
+
}
|
|
961
|
+
// Fallback
|
|
962
|
+
const message = typeof result.content === 'string' ? result.content.split('\n')[0] : '';
|
|
963
|
+
return { content: '', summary: message.slice(0, 60) || 'Done' };
|
|
964
|
+
}
|
|
965
|
+
function formatListTools(result) {
|
|
966
|
+
const count = result.count;
|
|
967
|
+
const tools = result.tools;
|
|
968
|
+
if (tools?.length) {
|
|
969
|
+
const names = tools.slice(0, 8).map((t) => t.name || '?').join(', ');
|
|
970
|
+
const more = tools.length > 8 ? `, +${String(tools.length - 8)} more` : '';
|
|
971
|
+
return { content: '', summary: `${String(count ?? tools.length)} tools: ${names}${more}` };
|
|
972
|
+
}
|
|
973
|
+
return { content: '', summary: count ? `${String(count)} tools available` : 'No tools' };
|
|
974
|
+
}
|
|
975
|
+
function formatGetToolInfo(result) {
|
|
976
|
+
const name = result.name;
|
|
977
|
+
const description = result.description;
|
|
978
|
+
if (name && description) {
|
|
979
|
+
// First sentence of description
|
|
980
|
+
const firstSentence = description.split('.')[0].slice(0, 60);
|
|
981
|
+
return { content: '', summary: `${name}: ${firstSentence}` };
|
|
982
|
+
}
|
|
983
|
+
return { content: '', summary: name || 'Tool info' };
|
|
984
|
+
}
|
|
985
|
+
function formatDelegateBackground(result) {
|
|
986
|
+
const delegated = result.delegated;
|
|
987
|
+
const delegationId = result.delegationId;
|
|
988
|
+
const status = result.status;
|
|
989
|
+
const message = result.message;
|
|
990
|
+
const error = result.error;
|
|
991
|
+
if (error) {
|
|
992
|
+
return { content: '', summary: error };
|
|
993
|
+
}
|
|
994
|
+
if (delegated && delegationId) {
|
|
995
|
+
const shortId = delegationId.replace('del_', '');
|
|
996
|
+
const statusLabel = status === 'queued' ? 'queued' : 'running';
|
|
997
|
+
return { content: '', summary: `${shortId} ${statusLabel}` };
|
|
998
|
+
}
|
|
999
|
+
return { content: '', summary: message || 'Delegated' };
|
|
1000
|
+
}
|
|
1001
|
+
function formatDelegate(result) {
|
|
1002
|
+
const message = result.message;
|
|
1003
|
+
return { content: '', summary: message || 'Delegated' };
|
|
1004
|
+
}
|
|
507
1005
|
function formatGeneric(result) {
|
|
508
1006
|
const content = typeof result.content === 'string'
|
|
509
1007
|
? result.content
|
|
@@ -514,3 +1012,16 @@ function formatGeneric(result) {
|
|
|
514
1012
|
const summary = lines.length > 0 ? lines[0].slice(0, 60) : 'Completed';
|
|
515
1013
|
return { content, summary };
|
|
516
1014
|
}
|
|
1015
|
+
function formatDelegated(toolName, result) {
|
|
1016
|
+
const originalTokens = result._originalTokens;
|
|
1017
|
+
const summaryTokens = result._summaryTokens;
|
|
1018
|
+
const summaryText = result.summary;
|
|
1019
|
+
// Summary line: "Delegated (24,921 → 800 tokens)"
|
|
1020
|
+
const tokenInfo = originalTokens && summaryTokens
|
|
1021
|
+
? ` (${originalTokens.toLocaleString()} → ${summaryTokens.toLocaleString()} tokens)`
|
|
1022
|
+
: '';
|
|
1023
|
+
const summary = `Delegated${tokenInfo}`;
|
|
1024
|
+
// Content: the summary text (truncated for display, full in Ctrl+O)
|
|
1025
|
+
const content = summaryText || `[${toolName} result was auto-summarized to conserve context]`;
|
|
1026
|
+
return { content, summary, success: true };
|
|
1027
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-turn token and tool call tracking.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from TerminalUI — a standalone data container with zero
|
|
5
|
+
* coupling to other subsystems.
|
|
6
|
+
*/
|
|
7
|
+
export interface TurnMetricsSnapshot {
|
|
8
|
+
inputTokens: number;
|
|
9
|
+
outputTokens: number;
|
|
10
|
+
thinkingTokens: number;
|
|
11
|
+
cacheReadTokens: number;
|
|
12
|
+
durationMs: number;
|
|
13
|
+
toolCalls: number;
|
|
14
|
+
apiCalls: number;
|
|
15
|
+
debugPayload?: {
|
|
16
|
+
systemChars: number;
|
|
17
|
+
contentsChars: number;
|
|
18
|
+
toolsChars: number;
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
export declare class TurnMetrics {
|
|
22
|
+
inputTokens: number;
|
|
23
|
+
outputTokens: number;
|
|
24
|
+
thinkingTokens: number;
|
|
25
|
+
cacheReadTokens: number;
|
|
26
|
+
debugPayload?: {
|
|
27
|
+
systemChars: number;
|
|
28
|
+
contentsChars: number;
|
|
29
|
+
toolsChars: number;
|
|
30
|
+
};
|
|
31
|
+
startTime: number;
|
|
32
|
+
toolCalls: number;
|
|
33
|
+
apiCalls: number;
|
|
34
|
+
isThinking: boolean;
|
|
35
|
+
/**
|
|
36
|
+
* Add input/output tokens for live display.
|
|
37
|
+
* @param thinkingTokens - Optional thinking tokens (Gemini 2.5+ models)
|
|
38
|
+
* @param cacheReadTokens - Optional cache read tokens (Anthropic/Gemini)
|
|
39
|
+
* @param debugPayload - Optional debug payload sizes (char counts)
|
|
40
|
+
*/
|
|
41
|
+
addTokens(inputTokens: number, outputTokens: number, thinkingTokens?: number, cacheReadTokens?: number, debugPayload?: {
|
|
42
|
+
systemChars: number;
|
|
43
|
+
contentsChars: number;
|
|
44
|
+
toolsChars: number;
|
|
45
|
+
}): void;
|
|
46
|
+
incrementToolCalls(): void;
|
|
47
|
+
incrementApiCalls(): void;
|
|
48
|
+
/**
|
|
49
|
+
* Reset all metrics (call when agent starts a new turn).
|
|
50
|
+
*/
|
|
51
|
+
reset(): void;
|
|
52
|
+
/**
|
|
53
|
+
* Get a snapshot of current metrics.
|
|
54
|
+
*/
|
|
55
|
+
getSnapshot(): TurnMetricsSnapshot;
|
|
56
|
+
}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Per-turn token and tool call tracking.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from TerminalUI — a standalone data container with zero
|
|
5
|
+
* coupling to other subsystems.
|
|
6
|
+
*/
|
|
7
|
+
export class TurnMetrics {
|
|
8
|
+
inputTokens = 0;
|
|
9
|
+
outputTokens = 0;
|
|
10
|
+
thinkingTokens = 0;
|
|
11
|
+
cacheReadTokens = 0;
|
|
12
|
+
debugPayload;
|
|
13
|
+
startTime = 0;
|
|
14
|
+
toolCalls = 0;
|
|
15
|
+
apiCalls = 0;
|
|
16
|
+
isThinking = false;
|
|
17
|
+
/**
|
|
18
|
+
* Add input/output tokens for live display.
|
|
19
|
+
* @param thinkingTokens - Optional thinking tokens (Gemini 2.5+ models)
|
|
20
|
+
* @param cacheReadTokens - Optional cache read tokens (Anthropic/Gemini)
|
|
21
|
+
* @param debugPayload - Optional debug payload sizes (char counts)
|
|
22
|
+
*/
|
|
23
|
+
addTokens(inputTokens, outputTokens, thinkingTokens, cacheReadTokens, debugPayload) {
|
|
24
|
+
this.inputTokens += inputTokens;
|
|
25
|
+
this.outputTokens += outputTokens;
|
|
26
|
+
if (thinkingTokens) {
|
|
27
|
+
this.thinkingTokens += thinkingTokens;
|
|
28
|
+
}
|
|
29
|
+
if (cacheReadTokens) {
|
|
30
|
+
this.cacheReadTokens += cacheReadTokens;
|
|
31
|
+
}
|
|
32
|
+
if (debugPayload) {
|
|
33
|
+
if (!this.debugPayload) {
|
|
34
|
+
this.debugPayload = { systemChars: 0, contentsChars: 0, toolsChars: 0 };
|
|
35
|
+
}
|
|
36
|
+
this.debugPayload.systemChars += debugPayload.systemChars;
|
|
37
|
+
this.debugPayload.contentsChars += debugPayload.contentsChars;
|
|
38
|
+
this.debugPayload.toolsChars += debugPayload.toolsChars;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
incrementToolCalls() {
|
|
42
|
+
this.toolCalls++;
|
|
43
|
+
}
|
|
44
|
+
incrementApiCalls() {
|
|
45
|
+
this.apiCalls++;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Reset all metrics (call when agent starts a new turn).
|
|
49
|
+
*/
|
|
50
|
+
reset() {
|
|
51
|
+
this.inputTokens = 0;
|
|
52
|
+
this.outputTokens = 0;
|
|
53
|
+
this.thinkingTokens = 0;
|
|
54
|
+
this.cacheReadTokens = 0;
|
|
55
|
+
this.debugPayload = undefined;
|
|
56
|
+
this.startTime = Date.now();
|
|
57
|
+
this.toolCalls = 0;
|
|
58
|
+
this.apiCalls = 0;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Get a snapshot of current metrics.
|
|
62
|
+
*/
|
|
63
|
+
getSnapshot() {
|
|
64
|
+
return {
|
|
65
|
+
inputTokens: this.inputTokens,
|
|
66
|
+
outputTokens: this.outputTokens,
|
|
67
|
+
thinkingTokens: this.thinkingTokens,
|
|
68
|
+
cacheReadTokens: this.cacheReadTokens,
|
|
69
|
+
durationMs: this.startTime > 0 ? Date.now() - this.startTime : 0,
|
|
70
|
+
toolCalls: this.toolCalls,
|
|
71
|
+
apiCalls: this.apiCalls,
|
|
72
|
+
debugPayload: this.debugPayload,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
}
|