@compilr-dev/cli 0.5.0 → 0.5.2
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/LICENSE +108 -0
- package/README.md +237 -69
- 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 +286 -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 +295 -31
- 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 +6 -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 +5 -2
- package/dist/repl-v2.d.ts +401 -2
- package/dist/repl-v2.js +2588 -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 +113 -0
- package/dist/tool-names.js +239 -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.d.ts +2 -2
- package/dist/tools/backlog.js +1 -1
- package/dist/tools/db-tools.d.ts +13 -61
- package/dist/tools/db-tools.js +12 -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/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/platform-adapter.d.ts +35 -0
- package/dist/tools/platform-adapter.js +404 -0
- package/dist/tools/project-db.d.ts +5 -73
- package/dist/tools/project-db.js +5 -336
- package/dist/tools.d.ts +67 -2
- package/dist/tools.js +240 -48
- 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 +52 -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.d.ts +1 -0
- package/dist/ui/overlay/impl/workflow-overlay-v2.js +10 -4
- 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 +696 -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 +27 -13
- 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/tools/anchor-tools.d.ts +0 -31
- package/dist/tools/anchor-tools.js +0 -255
- package/dist/tools/backlog-wrappers.d.ts +0 -54
- package/dist/tools/backlog-wrappers.js +0 -338
- package/dist/tools/document-db.d.ts +0 -43
- package/dist/tools/document-db.js +0 -220
- package/dist/tools/workitem-db.d.ts +0 -103
- package/dist/tools/workitem-db.js +0 -549
- 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,99 @@ 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 === 'app_model_get') {
|
|
134
|
+
({ content, summary } = formatAppModelGet(innerResult));
|
|
135
|
+
}
|
|
136
|
+
else if (toolLower === 'app_model_update') {
|
|
137
|
+
({ content, summary } = formatAppModelUpdate(innerResult));
|
|
138
|
+
}
|
|
139
|
+
else if (toolLower === 'app_model_validate') {
|
|
140
|
+
({ content, summary } = formatAppModelValidate(innerResult));
|
|
141
|
+
}
|
|
142
|
+
else if (toolLower === 'factory_scaffold') {
|
|
143
|
+
({ content, summary } = formatFactoryScaffold(innerResult));
|
|
144
|
+
}
|
|
145
|
+
else if (toolLower === 'factory_list_toolkits') {
|
|
146
|
+
({ content, summary } = formatFactoryListToolkits(innerResult));
|
|
147
|
+
}
|
|
148
|
+
else if (toolLower === 'list_tools') {
|
|
149
|
+
({ content, summary } = formatListTools(innerResult));
|
|
150
|
+
}
|
|
151
|
+
else if (toolLower === 'get_tool_info') {
|
|
152
|
+
({ content, summary } = formatGetToolInfo(innerResult));
|
|
153
|
+
}
|
|
154
|
+
else if (toolLower === 'git_stash') {
|
|
155
|
+
({ content, summary } = formatGitStash(innerResult));
|
|
156
|
+
}
|
|
157
|
+
else if (toolLower === 'git_blame') {
|
|
158
|
+
({ content, summary } = formatGitBlame(innerResult));
|
|
159
|
+
}
|
|
160
|
+
else if (toolLower === 'git_file_history') {
|
|
161
|
+
({ content, summary } = formatGitFileHistory(innerResult));
|
|
162
|
+
}
|
|
163
|
+
else if (toolLower === 'run_build') {
|
|
164
|
+
({ content, summary } = formatRunBuild(innerResult));
|
|
165
|
+
}
|
|
166
|
+
else if (toolLower === 'run_format') {
|
|
167
|
+
({ content, summary } = formatRunFormat(innerResult));
|
|
168
|
+
}
|
|
169
|
+
else if (toolLower === 'find_definition') {
|
|
170
|
+
({ content, summary } = formatFindDefinition(innerResult));
|
|
171
|
+
}
|
|
172
|
+
else if (toolLower === 'find_references') {
|
|
173
|
+
({ content, summary } = formatFindReferences(innerResult));
|
|
174
|
+
}
|
|
175
|
+
else if (toolLower === 'find_todos') {
|
|
176
|
+
({ content, summary } = formatFindTodos(innerResult));
|
|
177
|
+
}
|
|
178
|
+
else if (toolLower === 'check_outdated') {
|
|
179
|
+
({ content, summary } = formatCheckOutdated(innerResult));
|
|
180
|
+
}
|
|
181
|
+
else if (toolLower === 'find_vulnerabilities') {
|
|
182
|
+
({ content, summary } = formatFindVulnerabilities(innerResult));
|
|
183
|
+
}
|
|
184
|
+
else if (toolLower === 'analyze_test_coverage') {
|
|
185
|
+
({ content, summary } = formatAnalyzeTestCoverage(innerResult));
|
|
186
|
+
}
|
|
187
|
+
else if (toolLower === 'get_file_structure') {
|
|
188
|
+
({ content, summary } = formatGetFileStructure(innerResult));
|
|
189
|
+
}
|
|
190
|
+
else if (toolLower === 'get_complexity') {
|
|
191
|
+
({ content, summary } = formatGetComplexity(innerResult));
|
|
192
|
+
}
|
|
193
|
+
else if (toolLower === 'read_function' || toolLower === 'read_class' || toolLower === 'read_type') {
|
|
194
|
+
({ content, summary } = formatReadSymbol(innerResult));
|
|
195
|
+
}
|
|
98
196
|
else {
|
|
99
197
|
// Generic handling
|
|
100
198
|
({ content, summary } = formatGeneric(innerResult));
|
|
@@ -458,7 +556,7 @@ function formatProjectDocument(toolName, result) {
|
|
|
458
556
|
}
|
|
459
557
|
const docType = document.docType || 'unknown';
|
|
460
558
|
const content = document.content || '';
|
|
461
|
-
const preview = content
|
|
559
|
+
const preview = truncate(content, 200);
|
|
462
560
|
return { content: preview, summary: `Document: ${docType}` };
|
|
463
561
|
}
|
|
464
562
|
// Handle document_list - return list of documents
|
|
@@ -504,6 +602,590 @@ function formatTask(result) {
|
|
|
504
602
|
const content = response || '';
|
|
505
603
|
return { content, summary };
|
|
506
604
|
}
|
|
605
|
+
// =============================================================================
|
|
606
|
+
// Plan Formatters
|
|
607
|
+
// =============================================================================
|
|
608
|
+
function formatPlanGet(result) {
|
|
609
|
+
const plan = result.plan;
|
|
610
|
+
if (!plan) {
|
|
611
|
+
const message = result.message;
|
|
612
|
+
return { content: '', summary: message || 'Plan not found' };
|
|
613
|
+
}
|
|
614
|
+
const name = plan.name || 'Unknown';
|
|
615
|
+
const status = plan.status || 'draft';
|
|
616
|
+
const planContent = plan.content || '';
|
|
617
|
+
const workItem = plan.workItem;
|
|
618
|
+
// Build summary
|
|
619
|
+
let summary = `${name} [${status}]`;
|
|
620
|
+
if (workItem) {
|
|
621
|
+
const itemId = workItem.itemId || '';
|
|
622
|
+
summary += ` → ${itemId}`;
|
|
623
|
+
}
|
|
624
|
+
// For content, show a preview of the plan (first 500 chars with section headers visible)
|
|
625
|
+
const lines = planContent.split('\n');
|
|
626
|
+
const previewLines = [];
|
|
627
|
+
let charCount = 0;
|
|
628
|
+
const maxChars = 500;
|
|
629
|
+
for (const line of lines) {
|
|
630
|
+
if (charCount >= maxChars) {
|
|
631
|
+
previewLines.push('...');
|
|
632
|
+
break;
|
|
633
|
+
}
|
|
634
|
+
previewLines.push(line);
|
|
635
|
+
charCount += line.length + 1;
|
|
636
|
+
}
|
|
637
|
+
const content = previewLines.join('\n');
|
|
638
|
+
return { content, summary };
|
|
639
|
+
}
|
|
640
|
+
function formatPlanList(result) {
|
|
641
|
+
const plans = result.plans;
|
|
642
|
+
const count = result.count;
|
|
643
|
+
const statusCounts = result.statusCounts;
|
|
644
|
+
if (!plans?.length) {
|
|
645
|
+
return { content: '', summary: 'No plans found' };
|
|
646
|
+
}
|
|
647
|
+
// Build summary with status counts
|
|
648
|
+
let summary = `${String(count ?? plans.length)} plan(s)`;
|
|
649
|
+
if (statusCounts) {
|
|
650
|
+
const statuses = [];
|
|
651
|
+
if (statusCounts.draft)
|
|
652
|
+
statuses.push(`${String(statusCounts.draft)} draft`);
|
|
653
|
+
if (statusCounts.approved)
|
|
654
|
+
statuses.push(`${String(statusCounts.approved)} approved`);
|
|
655
|
+
if (statusCounts.in_progress)
|
|
656
|
+
statuses.push(`${String(statusCounts.in_progress)} in progress`);
|
|
657
|
+
if (statusCounts.completed)
|
|
658
|
+
statuses.push(`${String(statusCounts.completed)} completed`);
|
|
659
|
+
if (statuses.length)
|
|
660
|
+
summary += ` (${statuses.join(', ')})`;
|
|
661
|
+
}
|
|
662
|
+
// Build content with plan list
|
|
663
|
+
const lines = plans.slice(0, 10).map((p) => {
|
|
664
|
+
const status = p.status ? `[${p.status}]` : '';
|
|
665
|
+
const workItem = p.workItemItemId ? ` → ${p.workItemItemId}` : '';
|
|
666
|
+
return `${p.name || '?'} ${status}${workItem}`;
|
|
667
|
+
});
|
|
668
|
+
if (plans.length > 10) {
|
|
669
|
+
lines.push(`... and ${String(plans.length - 10)} more`);
|
|
670
|
+
}
|
|
671
|
+
return { content: lines.join('\n'), summary };
|
|
672
|
+
}
|
|
673
|
+
function formatPlanCreate(result) {
|
|
674
|
+
const message = result.message;
|
|
675
|
+
const plan = result.plan;
|
|
676
|
+
if (message) {
|
|
677
|
+
return { content: '', summary: message };
|
|
678
|
+
}
|
|
679
|
+
if (plan) {
|
|
680
|
+
const name = plan.name || 'Unknown';
|
|
681
|
+
const id = plan.id;
|
|
682
|
+
return { content: '', summary: `Created plan: ${name}${id ? ` (ID: ${String(id)})` : ''}` };
|
|
683
|
+
}
|
|
684
|
+
return { content: '', summary: 'Plan created' };
|
|
685
|
+
}
|
|
686
|
+
function formatPlanUpdate(result) {
|
|
687
|
+
const message = result.message;
|
|
688
|
+
const plan = result.plan;
|
|
689
|
+
if (message) {
|
|
690
|
+
return { content: '', summary: message };
|
|
691
|
+
}
|
|
692
|
+
if (plan) {
|
|
693
|
+
const name = plan.name || 'Unknown';
|
|
694
|
+
const status = plan.status || '';
|
|
695
|
+
return { content: '', summary: `Updated plan: ${name}${status ? ` [${status}]` : ''}` };
|
|
696
|
+
}
|
|
697
|
+
return { content: '', summary: 'Plan updated' };
|
|
698
|
+
}
|
|
699
|
+
function formatPlanDelete(result) {
|
|
700
|
+
const message = result.message;
|
|
701
|
+
return { content: '', summary: message || 'Plan deleted' };
|
|
702
|
+
}
|
|
703
|
+
// =============================================================================
|
|
704
|
+
// agents-coding Tool Formatters
|
|
705
|
+
// =============================================================================
|
|
706
|
+
function formatGitStash(result) {
|
|
707
|
+
const message = result.message;
|
|
708
|
+
const stashes = result.stashes;
|
|
709
|
+
if (message) {
|
|
710
|
+
return { content: '', summary: message };
|
|
711
|
+
}
|
|
712
|
+
if (stashes?.length) {
|
|
713
|
+
const lines = stashes.slice(0, 5).map((s) => `stash@{${String(s.index ?? 0)}}: ${(s.message || '').slice(0, 50)}`);
|
|
714
|
+
if (stashes.length > 5)
|
|
715
|
+
lines.push(`... and ${String(stashes.length - 5)} more`);
|
|
716
|
+
return { content: lines.join('\n'), summary: `${String(stashes.length)} stash(es)` };
|
|
717
|
+
}
|
|
718
|
+
return { content: '', summary: 'No stashes' };
|
|
719
|
+
}
|
|
720
|
+
function formatGitBlame(result) {
|
|
721
|
+
const lines = result.lines;
|
|
722
|
+
const authors = result.authorSummary;
|
|
723
|
+
if (authors?.length) {
|
|
724
|
+
const topAuthors = authors.slice(0, 3).map((a) => `${a.author || '?'}: ${String(a.lines ?? 0)} lines`).join(', ');
|
|
725
|
+
const summary = `${String(lines?.length ?? 0)} lines, ${topAuthors}`;
|
|
726
|
+
return { content: '', summary };
|
|
727
|
+
}
|
|
728
|
+
return { content: '', summary: `${String(lines?.length ?? 0)} lines analyzed` };
|
|
729
|
+
}
|
|
730
|
+
function formatGitFileHistory(result) {
|
|
731
|
+
const commits = result.commits;
|
|
732
|
+
const file = result.file;
|
|
733
|
+
if (!commits?.length) {
|
|
734
|
+
return { content: '', summary: 'No history found' };
|
|
735
|
+
}
|
|
736
|
+
const summary = `${String(commits.length)} commit(s) for ${file || 'file'}`;
|
|
737
|
+
const lines = commits.slice(0, 5).map((c) => `${c.shortHash || '?'} ${(c.subject || '').slice(0, 50)}`);
|
|
738
|
+
if (commits.length > 5)
|
|
739
|
+
lines.push(`... and ${String(commits.length - 5)} more`);
|
|
740
|
+
return { content: lines.join('\n'), summary };
|
|
741
|
+
}
|
|
742
|
+
function formatRunBuild(result) {
|
|
743
|
+
const success = result.success;
|
|
744
|
+
const command = result.command;
|
|
745
|
+
const stdout = result.stdout;
|
|
746
|
+
const status = success === false ? 'Build failed' : 'Build succeeded';
|
|
747
|
+
const summary = command ? `${status} (${command})` : status;
|
|
748
|
+
return { content: stdout || '', summary };
|
|
749
|
+
}
|
|
750
|
+
function formatRunFormat(result) {
|
|
751
|
+
const filesFormatted = result.filesFormatted;
|
|
752
|
+
const command = result.command;
|
|
753
|
+
if (filesFormatted !== undefined) {
|
|
754
|
+
return { content: '', summary: `Formatted ${String(filesFormatted)} file(s)` };
|
|
755
|
+
}
|
|
756
|
+
return { content: '', summary: command ? `Ran ${command}` : 'Format complete' };
|
|
757
|
+
}
|
|
758
|
+
function formatFindDefinition(result) {
|
|
759
|
+
const definitions = result.definitions;
|
|
760
|
+
if (!definitions?.length) {
|
|
761
|
+
return { content: '', summary: 'No definitions found' };
|
|
762
|
+
}
|
|
763
|
+
const summary = `Found ${String(definitions.length)} definition(s)`;
|
|
764
|
+
const lines = definitions.slice(0, 5).map((d) => `${d.path || '?'}:${String(d.line ?? 0)} [${d.type || '?'}] ${d.name || ''}`);
|
|
765
|
+
if (definitions.length > 5)
|
|
766
|
+
lines.push(`... and ${String(definitions.length - 5)} more`);
|
|
767
|
+
return { content: lines.join('\n'), summary };
|
|
768
|
+
}
|
|
769
|
+
function formatFindReferences(result) {
|
|
770
|
+
const references = result.references;
|
|
771
|
+
const totalCount = result.totalCount;
|
|
772
|
+
const count = totalCount ?? references?.length ?? 0;
|
|
773
|
+
if (count === 0) {
|
|
774
|
+
return { content: '', summary: 'No references found' };
|
|
775
|
+
}
|
|
776
|
+
const summary = `Found ${String(count)} reference(s)`;
|
|
777
|
+
if (references?.length) {
|
|
778
|
+
const lines = references.slice(0, 5).map((r) => `${r.path || '?'}:${String(r.line ?? 0)}`);
|
|
779
|
+
if (references.length > 5)
|
|
780
|
+
lines.push(`... and ${String(references.length - 5)} more`);
|
|
781
|
+
return { content: lines.join('\n'), summary };
|
|
782
|
+
}
|
|
783
|
+
return { content: '', summary };
|
|
784
|
+
}
|
|
785
|
+
function formatFindTodos(result) {
|
|
786
|
+
const todos = result.todos;
|
|
787
|
+
if (!todos?.length) {
|
|
788
|
+
return { content: '', summary: 'No TODOs found' };
|
|
789
|
+
}
|
|
790
|
+
const summary = `Found ${String(todos.length)} TODO(s)`;
|
|
791
|
+
const lines = todos.slice(0, 5).map((t) => `${t.path || '?'}:${String(t.line ?? 0)} [${t.type || 'TODO'}] ${(t.text || '').slice(0, 40)}`);
|
|
792
|
+
if (todos.length > 5)
|
|
793
|
+
lines.push(`... and ${String(todos.length - 5)} more`);
|
|
794
|
+
return { content: lines.join('\n'), summary };
|
|
795
|
+
}
|
|
796
|
+
function formatCheckOutdated(result) {
|
|
797
|
+
const packages = result.packages;
|
|
798
|
+
if (!packages?.length) {
|
|
799
|
+
return { content: '', summary: 'All packages up to date' };
|
|
800
|
+
}
|
|
801
|
+
const summary = `${String(packages.length)} outdated package(s)`;
|
|
802
|
+
const lines = packages.slice(0, 5).map((p) => `${p.name || '?'}: ${p.current || '?'} → ${p.latest || '?'} (${p.type || 'update'})`);
|
|
803
|
+
if (packages.length > 5)
|
|
804
|
+
lines.push(`... and ${String(packages.length - 5)} more`);
|
|
805
|
+
return { content: lines.join('\n'), summary };
|
|
806
|
+
}
|
|
807
|
+
function formatFindVulnerabilities(result) {
|
|
808
|
+
const vulnerabilities = result.vulnerabilities;
|
|
809
|
+
if (!vulnerabilities?.length) {
|
|
810
|
+
return { content: '', summary: 'No vulnerabilities found' };
|
|
811
|
+
}
|
|
812
|
+
// Count by severity
|
|
813
|
+
const bySeverity = {};
|
|
814
|
+
vulnerabilities.forEach((v) => {
|
|
815
|
+
const sev = v.severity || 'unknown';
|
|
816
|
+
bySeverity[sev] = (bySeverity[sev] || 0) + 1;
|
|
817
|
+
});
|
|
818
|
+
const sevParts = Object.entries(bySeverity).map(([k, v]) => `${String(v)} ${k}`).join(', ');
|
|
819
|
+
const summary = `${String(vulnerabilities.length)} vulnerabilities (${sevParts})`;
|
|
820
|
+
const lines = vulnerabilities.slice(0, 5).map((v) => `[${v.severity || '?'}] ${v.name || '?'}: ${(v.title || '').slice(0, 40)}`);
|
|
821
|
+
if (vulnerabilities.length > 5)
|
|
822
|
+
lines.push(`... and ${String(vulnerabilities.length - 5)} more`);
|
|
823
|
+
return { content: lines.join('\n'), summary };
|
|
824
|
+
}
|
|
825
|
+
function formatAnalyzeTestCoverage(result) {
|
|
826
|
+
const summary_data = result.summary;
|
|
827
|
+
const meetsThreshold = result.meetsThreshold;
|
|
828
|
+
if (summary_data) {
|
|
829
|
+
const lineCov = summary_data.lines?.pct ?? summary_data.statements?.pct ?? 0;
|
|
830
|
+
const funcCov = summary_data.functions?.pct ?? 0;
|
|
831
|
+
const branchCov = summary_data.branches?.pct ?? 0;
|
|
832
|
+
const status = meetsThreshold === false ? ' (below threshold)' : '';
|
|
833
|
+
const summary = `Coverage: ${lineCov.toFixed(1)}% lines, ${funcCov.toFixed(1)}% functions, ${branchCov.toFixed(1)}% branches${status}`;
|
|
834
|
+
return { content: '', summary };
|
|
835
|
+
}
|
|
836
|
+
return { content: '', summary: 'Coverage analysis complete' };
|
|
837
|
+
}
|
|
838
|
+
function formatGetFileStructure(result) {
|
|
839
|
+
const classes = result.classes;
|
|
840
|
+
const functions = result.functions;
|
|
841
|
+
const imports = result.imports;
|
|
842
|
+
const exports = result.exports;
|
|
843
|
+
const parts = [];
|
|
844
|
+
if (classes?.length)
|
|
845
|
+
parts.push(`${String(classes.length)} class(es)`);
|
|
846
|
+
if (functions?.length)
|
|
847
|
+
parts.push(`${String(functions.length)} function(s)`);
|
|
848
|
+
if (imports?.length)
|
|
849
|
+
parts.push(`${String(imports.length)} import(s)`);
|
|
850
|
+
if (exports?.length)
|
|
851
|
+
parts.push(`${String(exports.length)} export(s)`);
|
|
852
|
+
const summary = parts.length > 0 ? parts.join(', ') : 'Empty file';
|
|
853
|
+
// Build detailed content
|
|
854
|
+
const lines = [];
|
|
855
|
+
if (classes?.length) {
|
|
856
|
+
lines.push('Classes:');
|
|
857
|
+
classes.slice(0, 5).forEach((c) => lines.push(` - ${c.name || '?'}`));
|
|
858
|
+
if (classes.length > 5)
|
|
859
|
+
lines.push(` ... and ${String(classes.length - 5)} more`);
|
|
860
|
+
}
|
|
861
|
+
if (functions?.length) {
|
|
862
|
+
lines.push('Functions:');
|
|
863
|
+
functions.slice(0, 5).forEach((f) => lines.push(` - ${f.name || '?'}`));
|
|
864
|
+
if (functions.length > 5)
|
|
865
|
+
lines.push(` ... and ${String(functions.length - 5)} more`);
|
|
866
|
+
}
|
|
867
|
+
return { content: lines.join('\n'), summary };
|
|
868
|
+
}
|
|
869
|
+
function formatGetComplexity(result) {
|
|
870
|
+
const files = result.files;
|
|
871
|
+
const functions_data = result.functions;
|
|
872
|
+
if (functions_data?.length) {
|
|
873
|
+
const highComplexity = functions_data.filter((f) => (f.complexity ?? 0) > 10);
|
|
874
|
+
if (highComplexity.length > 0) {
|
|
875
|
+
const summary = `${String(highComplexity.length)} high-complexity function(s)`;
|
|
876
|
+
const lines = highComplexity.slice(0, 5).map((f) => `${f.name || '?'}: complexity ${String(f.complexity ?? 0)}`);
|
|
877
|
+
if (highComplexity.length > 5)
|
|
878
|
+
lines.push(`... and ${String(highComplexity.length - 5)} more`);
|
|
879
|
+
return { content: lines.join('\n'), summary };
|
|
880
|
+
}
|
|
881
|
+
return { content: '', summary: 'All functions within complexity threshold' };
|
|
882
|
+
}
|
|
883
|
+
if (files?.length) {
|
|
884
|
+
const summary = `Analyzed ${String(files.length)} file(s)`;
|
|
885
|
+
return { content: '', summary };
|
|
886
|
+
}
|
|
887
|
+
return { content: '', summary: 'Complexity analysis complete' };
|
|
888
|
+
}
|
|
889
|
+
function formatReadSymbol(result) {
|
|
890
|
+
const name = result.name;
|
|
891
|
+
const kind = result.kind;
|
|
892
|
+
const startLine = result.startLine;
|
|
893
|
+
const endLine = result.endLine;
|
|
894
|
+
const codeContent = result.content;
|
|
895
|
+
const signature = result.signature;
|
|
896
|
+
const container = result.container;
|
|
897
|
+
// Build summary: [kind] name (lines X-Y)
|
|
898
|
+
const kindLabel = kind || 'symbol';
|
|
899
|
+
const lineRange = startLine && endLine ? ` (lines ${String(startLine)}-${String(endLine)})` : '';
|
|
900
|
+
const containerInfo = container ? ` in ${container}` : '';
|
|
901
|
+
const summary = `[${kindLabel}] ${name || '?'}${containerInfo}${lineRange}`;
|
|
902
|
+
// Content is the actual source code
|
|
903
|
+
// Format it nicely with line numbers
|
|
904
|
+
if (codeContent) {
|
|
905
|
+
const lines = codeContent.split('\n');
|
|
906
|
+
const start = startLine ?? 1;
|
|
907
|
+
const numberedLines = lines.map((line, i) => {
|
|
908
|
+
const lineNum = String(start + i).padStart(4, ' ');
|
|
909
|
+
return `${lineNum} │ ${line}`;
|
|
910
|
+
});
|
|
911
|
+
return { content: numberedLines.join('\n'), summary };
|
|
912
|
+
}
|
|
913
|
+
// Fallback to signature if no content
|
|
914
|
+
if (signature) {
|
|
915
|
+
return { content: signature, summary };
|
|
916
|
+
}
|
|
917
|
+
return { content: '', summary };
|
|
918
|
+
}
|
|
919
|
+
function formatTodoClaim(result) {
|
|
920
|
+
const message = result.message;
|
|
921
|
+
return { content: '', summary: message || 'Done' };
|
|
922
|
+
}
|
|
923
|
+
function formatRecallWork(result) {
|
|
924
|
+
const episodes = result.episodes;
|
|
925
|
+
const totalEpisodes = result.totalEpisodes;
|
|
926
|
+
const totalEffort = result.totalEffort;
|
|
927
|
+
const uncommittedCount = result.uncommittedCount;
|
|
928
|
+
if (!episodes?.length) {
|
|
929
|
+
return { content: '', summary: 'No work history' };
|
|
930
|
+
}
|
|
931
|
+
// Summary line
|
|
932
|
+
const uncommittedInfo = uncommittedCount ? `, ${String(uncommittedCount)} uncommitted` : '';
|
|
933
|
+
const summary = `${String(totalEpisodes ?? episodes.length)} episode(s), effort: ${totalEffort || '?'}${uncommittedInfo}`;
|
|
934
|
+
// Build detailed content
|
|
935
|
+
const lines = [];
|
|
936
|
+
for (const ep of episodes.slice(0, 10)) {
|
|
937
|
+
const time = ep.timestamp ? new Date(ep.timestamp).toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' }) : '?';
|
|
938
|
+
const agent = ep.agentId || '?';
|
|
939
|
+
const action = ep.summary || ep.action || '?';
|
|
940
|
+
const effort = ep.effort ? `[${ep.effort}]` : '';
|
|
941
|
+
lines.push(`${time} ${agent} ${effort} ${action}`);
|
|
942
|
+
}
|
|
943
|
+
if (episodes.length > 10) {
|
|
944
|
+
lines.push(`... and ${String(episodes.length - 10)} more`);
|
|
945
|
+
}
|
|
946
|
+
return { content: lines.join('\n'), summary };
|
|
947
|
+
}
|
|
948
|
+
function formatArtifact(toolName, result) {
|
|
949
|
+
const action = toolName.replace('artifact_', '');
|
|
950
|
+
// artifact_list
|
|
951
|
+
if (action === 'list') {
|
|
952
|
+
const content = typeof result.content === 'string' ? result.content : '';
|
|
953
|
+
const lines = content.split('\n').filter((l) => l.length > 0);
|
|
954
|
+
// First line is typically "Found N artifacts:"
|
|
955
|
+
const summary = lines.length > 0 ? lines[0].slice(0, 60) : 'No artifacts';
|
|
956
|
+
return { content: '', summary };
|
|
957
|
+
}
|
|
958
|
+
// artifact_save
|
|
959
|
+
if (action === 'save') {
|
|
960
|
+
const content = typeof result.content === 'string' ? result.content : '';
|
|
961
|
+
const match = /Created artifact "([^"]+)"/.exec(content);
|
|
962
|
+
return { content: '', summary: match ? `Saved: ${match[1]}` : 'Artifact saved' };
|
|
963
|
+
}
|
|
964
|
+
// artifact_get
|
|
965
|
+
if (action === 'get') {
|
|
966
|
+
const content = typeof result.content === 'string' ? result.content : '';
|
|
967
|
+
const match = /Artifact: (.+)/.exec(content);
|
|
968
|
+
return { content, summary: match ? match[1].slice(0, 60) : 'Artifact retrieved' };
|
|
969
|
+
}
|
|
970
|
+
// artifact_delete
|
|
971
|
+
if (action === 'delete') {
|
|
972
|
+
const content = typeof result.content === 'string' ? result.content : '';
|
|
973
|
+
const match = /Deleted artifact "([^"]+)"/.exec(content);
|
|
974
|
+
return { content: '', summary: match ? `Deleted: ${match[1]}` : 'Artifact deleted' };
|
|
975
|
+
}
|
|
976
|
+
// Fallback
|
|
977
|
+
const message = typeof result.content === 'string' ? result.content.split('\n')[0] : '';
|
|
978
|
+
return { content: '', summary: message.slice(0, 60) || 'Done' };
|
|
979
|
+
}
|
|
980
|
+
function formatListTools(result) {
|
|
981
|
+
const count = result.count;
|
|
982
|
+
const tools = result.tools;
|
|
983
|
+
if (tools?.length) {
|
|
984
|
+
const names = tools.slice(0, 8).map((t) => t.name || '?').join(', ');
|
|
985
|
+
const more = tools.length > 8 ? `, +${String(tools.length - 8)} more` : '';
|
|
986
|
+
return { content: '', summary: `${String(count ?? tools.length)} tools: ${names}${more}` };
|
|
987
|
+
}
|
|
988
|
+
return { content: '', summary: count ? `${String(count)} tools available` : 'No tools' };
|
|
989
|
+
}
|
|
990
|
+
function formatGetToolInfo(result) {
|
|
991
|
+
// Compact schema format (SDK 0.1.15+): result is a string like "tool_name(...)\n description"
|
|
992
|
+
if (typeof result === 'string') {
|
|
993
|
+
// Extract tool name from signature line: "tool_name(params...)"
|
|
994
|
+
const parenIdx = result.indexOf('(');
|
|
995
|
+
const toolName = parenIdx > 0 ? result.slice(0, parenIdx) : null;
|
|
996
|
+
if (toolName) {
|
|
997
|
+
return { content: '', summary: `Schema: ${toolName}` };
|
|
998
|
+
}
|
|
999
|
+
return { content: '', summary: result.split('\n')[0].slice(0, 80) };
|
|
1000
|
+
}
|
|
1001
|
+
// Legacy object format: { name, description, parameters }
|
|
1002
|
+
const name = result.name;
|
|
1003
|
+
if (name) {
|
|
1004
|
+
return { content: '', summary: `Schema: ${name}` };
|
|
1005
|
+
}
|
|
1006
|
+
return { content: '', summary: 'Tool info' };
|
|
1007
|
+
}
|
|
1008
|
+
function formatDelegateBackground(result) {
|
|
1009
|
+
const delegated = result.delegated;
|
|
1010
|
+
const delegationId = result.delegationId;
|
|
1011
|
+
const status = result.status;
|
|
1012
|
+
const message = result.message;
|
|
1013
|
+
const error = result.error;
|
|
1014
|
+
if (error) {
|
|
1015
|
+
return { content: '', summary: error };
|
|
1016
|
+
}
|
|
1017
|
+
if (delegated && delegationId) {
|
|
1018
|
+
const shortId = delegationId.replace('del_', '');
|
|
1019
|
+
const statusLabel = status === 'queued' ? 'queued' : 'running';
|
|
1020
|
+
return { content: '', summary: `${shortId} ${statusLabel}` };
|
|
1021
|
+
}
|
|
1022
|
+
return { content: '', summary: message || 'Delegated' };
|
|
1023
|
+
}
|
|
1024
|
+
function formatDelegate(result) {
|
|
1025
|
+
const message = result.message;
|
|
1026
|
+
return { content: '', summary: message || 'Delegated' };
|
|
1027
|
+
}
|
|
1028
|
+
// =============================================================================
|
|
1029
|
+
// Factory Tool Formatters
|
|
1030
|
+
// =============================================================================
|
|
1031
|
+
/**
|
|
1032
|
+
* Unwrap the use_tool envelope to get the actual tool result.
|
|
1033
|
+
* use_tool wraps as: { tool, status, message, result: { success, result: actualData } }
|
|
1034
|
+
*/
|
|
1035
|
+
function unwrapToolResult(result) {
|
|
1036
|
+
const inner = result.result;
|
|
1037
|
+
if (inner && typeof inner === 'object' && !Array.isArray(inner)) {
|
|
1038
|
+
const innerObj = inner;
|
|
1039
|
+
// If wrapped by use_tool, the actual data is in innerObj.result
|
|
1040
|
+
if (innerObj.result && typeof innerObj.result === 'object' && !Array.isArray(innerObj.result)) {
|
|
1041
|
+
return innerObj.result;
|
|
1042
|
+
}
|
|
1043
|
+
return innerObj;
|
|
1044
|
+
}
|
|
1045
|
+
return result;
|
|
1046
|
+
}
|
|
1047
|
+
function formatAppModelGet(result) {
|
|
1048
|
+
const data = unwrapToolResult(result);
|
|
1049
|
+
// No model exists
|
|
1050
|
+
if (data.exists === false) {
|
|
1051
|
+
const message = data.message;
|
|
1052
|
+
return { content: '', summary: message || 'No Application Model found' };
|
|
1053
|
+
}
|
|
1054
|
+
// Summary scope
|
|
1055
|
+
if (data.entityCount !== undefined) {
|
|
1056
|
+
const name = data.name || '?';
|
|
1057
|
+
const entityCount = data.entityCount;
|
|
1058
|
+
const toolkit = data.toolkit || '?';
|
|
1059
|
+
const revision = data.revision;
|
|
1060
|
+
const entities = data.entities;
|
|
1061
|
+
const summary = `${name} — ${String(entityCount)} entities, toolkit: ${toolkit}${revision !== undefined ? `, rev ${String(revision)}` : ''}`;
|
|
1062
|
+
const lines = [];
|
|
1063
|
+
if (entities?.length) {
|
|
1064
|
+
for (const e of entities) {
|
|
1065
|
+
const rels = e.relationshipCount > 0 ? `, ${String(e.relationshipCount)} rel` : '';
|
|
1066
|
+
lines.push(` ${e.name} (${String(e.fieldCount)} fields, ${e.views.join('/')})${rels}`);
|
|
1067
|
+
}
|
|
1068
|
+
}
|
|
1069
|
+
const features = data.features;
|
|
1070
|
+
if (features) {
|
|
1071
|
+
const enabled = Object.entries(features).filter(([, v]) => v).map(([k]) => k);
|
|
1072
|
+
if (enabled.length)
|
|
1073
|
+
lines.push(`Features: ${enabled.join(', ')}`);
|
|
1074
|
+
}
|
|
1075
|
+
return { content: lines.join('\n'), summary };
|
|
1076
|
+
}
|
|
1077
|
+
// Single entity scope
|
|
1078
|
+
if (data.entity && typeof data.entity === 'object') {
|
|
1079
|
+
const entity = data.entity;
|
|
1080
|
+
const name = entity.name || '?';
|
|
1081
|
+
const fields = entity.fields;
|
|
1082
|
+
const rels = entity.relationships;
|
|
1083
|
+
const summary = `Entity: ${name} (${String(fields?.length ?? 0)} fields)`;
|
|
1084
|
+
const lines = [];
|
|
1085
|
+
if (fields?.length) {
|
|
1086
|
+
lines.push('Fields:');
|
|
1087
|
+
for (const f of fields)
|
|
1088
|
+
lines.push(` ${f.name}: ${f.type}`);
|
|
1089
|
+
}
|
|
1090
|
+
if (rels?.length) {
|
|
1091
|
+
lines.push('Relationships:');
|
|
1092
|
+
for (const r of rels)
|
|
1093
|
+
lines.push(` ${r.type} → ${r.target}`);
|
|
1094
|
+
}
|
|
1095
|
+
return { content: lines.join('\n'), summary };
|
|
1096
|
+
}
|
|
1097
|
+
// Section scopes (identity, features, layout, theme, techStack)
|
|
1098
|
+
const section = data.identity ?? data.features ?? data.layout ?? data.theme ?? data.techStack;
|
|
1099
|
+
if (section && typeof section === 'object') {
|
|
1100
|
+
const entries = Object.entries(section);
|
|
1101
|
+
const summary = entries.map(([k, v]) => `${k}: ${String(v)}`).join(', ');
|
|
1102
|
+
return { content: '', summary: truncate(summary, 80) };
|
|
1103
|
+
}
|
|
1104
|
+
// Full model fallback
|
|
1105
|
+
const message = data.message;
|
|
1106
|
+
return { content: '', summary: message || 'Application Model' };
|
|
1107
|
+
}
|
|
1108
|
+
function formatAppModelUpdate(result) {
|
|
1109
|
+
const data = unwrapToolResult(result);
|
|
1110
|
+
const op = data.op || '';
|
|
1111
|
+
const revision = data.revision;
|
|
1112
|
+
const message = data.message;
|
|
1113
|
+
const revInfo = revision !== undefined ? ` (rev ${String(revision)})` : '';
|
|
1114
|
+
const summary = message || `${op} applied${revInfo}`;
|
|
1115
|
+
return { content: '', summary: truncate(summary, 80) };
|
|
1116
|
+
}
|
|
1117
|
+
function formatAppModelValidate(result) {
|
|
1118
|
+
const data = unwrapToolResult(result);
|
|
1119
|
+
const valid = data.valid;
|
|
1120
|
+
const errors = data.errors;
|
|
1121
|
+
const revision = data.revision;
|
|
1122
|
+
if (valid) {
|
|
1123
|
+
return { content: '', summary: `Model valid${revision !== undefined ? ` (rev ${String(revision)})` : ''}` };
|
|
1124
|
+
}
|
|
1125
|
+
const errorCount = errors?.length ?? 0;
|
|
1126
|
+
const summary = `${String(errorCount)} validation error(s)`;
|
|
1127
|
+
const lines = errors?.slice(0, 10).map((e) => `${e.path || '?'}: ${e.message || 'error'}`) ?? [];
|
|
1128
|
+
if (errorCount > 10)
|
|
1129
|
+
lines.push(`... and ${String(errorCount - 10)} more`);
|
|
1130
|
+
return { content: lines.join('\n'), summary };
|
|
1131
|
+
}
|
|
1132
|
+
function formatFactoryScaffold(result) {
|
|
1133
|
+
const data = unwrapToolResult(result);
|
|
1134
|
+
const toolkit = data.toolkit || '?';
|
|
1135
|
+
const fileCount = data.fileCount;
|
|
1136
|
+
const files = data.files;
|
|
1137
|
+
const dryRun = data.dryRun;
|
|
1138
|
+
const warnings = data.warnings;
|
|
1139
|
+
const message = data.message;
|
|
1140
|
+
const mode = dryRun ? 'Dry run' : 'Generated';
|
|
1141
|
+
const summary = message || `${mode}: ${String(fileCount ?? 0)} files (${toolkit})`;
|
|
1142
|
+
// Build detailed content with file listing
|
|
1143
|
+
const lines = [];
|
|
1144
|
+
if (files?.length) {
|
|
1145
|
+
// Group files by directory
|
|
1146
|
+
const dirs = new Map();
|
|
1147
|
+
for (const f of files) {
|
|
1148
|
+
const parts = f.split('/');
|
|
1149
|
+
const dir = parts.length > 1 ? parts.slice(0, -1).join('/') : '.';
|
|
1150
|
+
const file = parts[parts.length - 1];
|
|
1151
|
+
const existing = dirs.get(dir);
|
|
1152
|
+
if (existing) {
|
|
1153
|
+
existing.push(file);
|
|
1154
|
+
}
|
|
1155
|
+
else {
|
|
1156
|
+
dirs.set(dir, [file]);
|
|
1157
|
+
}
|
|
1158
|
+
}
|
|
1159
|
+
for (const [dir, dirFiles] of dirs) {
|
|
1160
|
+
lines.push(`${dir}/`);
|
|
1161
|
+
for (const f of dirFiles)
|
|
1162
|
+
lines.push(` ${f}`);
|
|
1163
|
+
}
|
|
1164
|
+
}
|
|
1165
|
+
if (warnings?.length) {
|
|
1166
|
+
lines.push('');
|
|
1167
|
+
lines.push('Warnings:');
|
|
1168
|
+
for (const w of warnings)
|
|
1169
|
+
lines.push(` ! ${w}`);
|
|
1170
|
+
}
|
|
1171
|
+
return { content: lines.join('\n'), summary };
|
|
1172
|
+
}
|
|
1173
|
+
function formatFactoryListToolkits(result) {
|
|
1174
|
+
const data = unwrapToolResult(result);
|
|
1175
|
+
const count = data.count;
|
|
1176
|
+
const toolkits = data.toolkits;
|
|
1177
|
+
if (!toolkits?.length) {
|
|
1178
|
+
return { content: '', summary: 'No toolkits available' };
|
|
1179
|
+
}
|
|
1180
|
+
const summary = `${String(count ?? toolkits.length)} toolkit(s)`;
|
|
1181
|
+
const lines = toolkits.map((t) => {
|
|
1182
|
+
const name = t.name || t.id || '?';
|
|
1183
|
+
const desc = t.description ? ` — ${t.description}` : '';
|
|
1184
|
+
const sections = t.requiredSections?.length ? `\n Requires: ${t.requiredSections.join(', ')}` : '';
|
|
1185
|
+
return `${name}${desc}${sections}`;
|
|
1186
|
+
});
|
|
1187
|
+
return { content: lines.join('\n'), summary };
|
|
1188
|
+
}
|
|
507
1189
|
function formatGeneric(result) {
|
|
508
1190
|
const content = typeof result.content === 'string'
|
|
509
1191
|
? result.content
|
|
@@ -514,3 +1196,16 @@ function formatGeneric(result) {
|
|
|
514
1196
|
const summary = lines.length > 0 ? lines[0].slice(0, 60) : 'Completed';
|
|
515
1197
|
return { content, summary };
|
|
516
1198
|
}
|
|
1199
|
+
function formatDelegated(toolName, result) {
|
|
1200
|
+
const originalTokens = result._originalTokens;
|
|
1201
|
+
const summaryTokens = result._summaryTokens;
|
|
1202
|
+
const summaryText = result.summary;
|
|
1203
|
+
// Summary line: "Delegated (24,921 → 800 tokens)"
|
|
1204
|
+
const tokenInfo = originalTokens && summaryTokens
|
|
1205
|
+
? ` (${originalTokens.toLocaleString()} → ${summaryTokens.toLocaleString()} tokens)`
|
|
1206
|
+
: '';
|
|
1207
|
+
const summary = `Delegated${tokenInfo}`;
|
|
1208
|
+
// Content: the summary text (truncated for display, full in Ctrl+O)
|
|
1209
|
+
const content = summaryText || `[${toolName} result was auto-summarized to conserve context]`;
|
|
1210
|
+
return { content, summary, success: true };
|
|
1211
|
+
}
|