@roackb2/heddle 0.0.14 → 0.0.16
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 +38 -9
- package/dist/examples/heartbeat-scheduler.js +3 -3
- package/dist/examples/heartbeat-scheduler.js.map +1 -1
- package/dist/examples/heartbeat.js +3 -3
- package/dist/examples/heartbeat.js.map +1 -1
- package/dist/examples/host-events.js +1 -1
- package/dist/examples/host-events.js.map +1 -1
- package/dist/examples/programmatic-loop.js +4 -4
- package/dist/examples/programmatic-loop.js.map +1 -1
- package/dist/src/cli/ask.js +1 -1
- package/dist/src/cli/ask.js.map +1 -1
- package/dist/src/cli/chat/App.d.ts.map +1 -1
- package/dist/src/cli/chat/App.js +4 -4
- package/dist/src/cli/chat/App.js.map +1 -1
- package/dist/src/cli/chat/components/ActivityPanel.d.ts +1 -1
- package/dist/src/cli/chat/components/ActivityPanel.d.ts.map +1 -1
- package/dist/src/cli/chat/components/ActivityPanel.js +1 -1
- package/dist/src/cli/chat/components/ActivityPanel.js.map +1 -1
- package/dist/src/cli/chat/components/ConversationPanel.d.ts +1 -1
- package/dist/src/cli/chat/components/ConversationPanel.d.ts.map +1 -1
- package/dist/src/cli/chat/hooks/useAgentRun.d.ts +2 -2
- package/dist/src/cli/chat/hooks/useAgentRun.d.ts.map +1 -1
- package/dist/src/cli/chat/hooks/useAgentRun.js +2 -2
- package/dist/src/cli/chat/hooks/useAgentRun.js.map +1 -1
- package/dist/src/cli/chat/hooks/useApprovalFlow.d.ts +2 -2
- package/dist/src/cli/chat/hooks/useApprovalFlow.d.ts.map +1 -1
- package/dist/src/cli/chat/hooks/useChatSessions.d.ts +2 -2
- package/dist/src/cli/chat/hooks/useChatSessions.d.ts.map +1 -1
- package/dist/src/cli/chat/hooks/useChatSessions.js +4 -4
- package/dist/src/cli/chat/hooks/useChatSessions.js.map +1 -1
- package/dist/src/cli/chat/state/approval-rules.d.ts +1 -1
- package/dist/src/cli/chat/state/approval-rules.d.ts.map +1 -1
- package/dist/src/cli/chat/state/approval-rules.js +67 -6
- package/dist/src/cli/chat/state/approval-rules.js.map +1 -1
- package/dist/src/cli/chat/state/compaction.d.ts +1 -16
- package/dist/src/cli/chat/state/compaction.d.ts.map +1 -1
- package/dist/src/cli/chat/state/compaction.js +1 -158
- package/dist/src/cli/chat/state/compaction.js.map +1 -1
- package/dist/src/cli/chat/state/local-commands.js +2 -2
- package/dist/src/cli/chat/state/local-commands.js.map +1 -1
- package/dist/src/cli/chat/state/storage.d.ts +1 -13
- package/dist/src/cli/chat/state/storage.d.ts.map +1 -1
- package/dist/src/cli/chat/state/storage.js +1 -146
- package/dist/src/cli/chat/state/storage.js.map +1 -1
- package/dist/src/cli/chat/state/types.d.ts +1 -76
- package/dist/src/cli/chat/state/types.d.ts.map +1 -1
- package/dist/src/cli/chat/utils/file-mentions.js +1 -1
- package/dist/src/cli/chat/utils/file-mentions.js.map +1 -1
- package/dist/src/cli/chat/utils/format.d.ts +3 -7
- package/dist/src/cli/chat/utils/format.d.ts.map +1 -1
- package/dist/src/cli/chat/utils/format.js +3 -181
- package/dist/src/cli/chat/utils/format.js.map +1 -1
- package/dist/src/cli/chat/utils/runtime.d.ts +3 -3
- package/dist/src/cli/chat/utils/runtime.d.ts.map +1 -1
- package/dist/src/cli/chat/utils/runtime.js +5 -10
- package/dist/src/cli/chat/utils/runtime.js.map +1 -1
- package/dist/src/cli/daemon.js +2 -2
- package/dist/src/cli/heartbeat.d.ts.map +1 -1
- package/dist/src/cli/heartbeat.js +137 -47
- package/dist/src/cli/heartbeat.js.map +1 -1
- package/dist/src/cli/main.js +108 -101
- package/dist/src/cli/main.js.map +1 -1
- package/dist/src/cli/session.d.ts +11 -0
- package/dist/src/cli/session.d.ts.map +1 -0
- package/dist/src/cli/session.js +30 -0
- package/dist/src/cli/session.js.map +1 -0
- package/dist/src/core/agent/history.d.ts.map +1 -0
- package/dist/src/core/agent/history.js.map +1 -0
- package/dist/src/core/agent/mutation-tracking.d.ts.map +1 -0
- package/dist/src/{run-agent → core/agent}/mutation-tracking.js +25 -8
- package/dist/src/core/agent/mutation-tracking.js.map +1 -0
- package/dist/src/core/agent/post-mutation.d.ts.map +1 -0
- package/dist/src/core/agent/post-mutation.js.map +1 -0
- package/dist/src/core/agent/progress-reminders.d.ts.map +1 -0
- package/dist/src/core/agent/progress-reminders.js.map +1 -0
- package/dist/src/{run-agent.d.ts → core/agent/run-agent.d.ts} +2 -2
- package/dist/src/core/agent/run-agent.d.ts.map +1 -0
- package/dist/src/{run-agent.js → core/agent/run-agent.js} +12 -16
- package/dist/src/core/agent/run-agent.js.map +1 -0
- package/dist/src/{run-agent → core/agent}/tool-dispatch.d.ts +1 -1
- package/dist/src/core/agent/tool-dispatch.d.ts.map +1 -0
- package/dist/src/core/agent/tool-dispatch.js.map +1 -0
- package/dist/src/core/agent/util.d.ts.map +1 -0
- package/dist/src/core/agent/util.js.map +1 -0
- package/dist/src/core/chat/compaction.d.ts +17 -0
- package/dist/src/core/chat/compaction.d.ts.map +1 -0
- package/dist/src/core/chat/compaction.js +159 -0
- package/dist/src/core/chat/compaction.js.map +1 -0
- package/dist/src/core/chat/format.d.ts +12 -0
- package/dist/src/core/chat/format.d.ts.map +1 -0
- package/dist/src/core/chat/format.js +139 -0
- package/dist/src/core/chat/format.js.map +1 -0
- package/dist/src/core/chat/session-submit.d.ts +22 -0
- package/dist/src/core/chat/session-submit.d.ts.map +1 -0
- package/dist/src/core/chat/session-submit.js +83 -0
- package/dist/src/core/chat/session-submit.js.map +1 -0
- package/dist/src/core/chat/storage.d.ts +33 -0
- package/dist/src/core/chat/storage.d.ts.map +1 -0
- package/dist/src/core/chat/storage.js +384 -0
- package/dist/src/core/chat/storage.js.map +1 -0
- package/dist/src/core/chat/trace.d.ts +3 -0
- package/dist/src/core/chat/trace.d.ts.map +1 -0
- package/dist/src/core/chat/trace.js +9 -0
- package/dist/src/core/chat/trace.js.map +1 -0
- package/dist/src/core/chat/types.d.ts +77 -0
- package/dist/src/core/chat/types.d.ts.map +1 -0
- package/dist/src/core/chat/types.js +2 -0
- package/dist/src/core/chat/types.js.map +1 -0
- package/dist/src/core/config.d.ts.map +1 -0
- package/dist/src/core/config.js.map +1 -0
- package/dist/src/core/llm/anthropic.d.ts.map +1 -0
- package/dist/src/core/llm/anthropic.js.map +1 -0
- package/dist/src/core/llm/factory.d.ts.map +1 -0
- package/dist/src/core/llm/factory.js.map +1 -0
- package/dist/src/core/llm/openai-models.d.ts.map +1 -0
- package/dist/src/core/llm/openai-models.js.map +1 -0
- package/dist/src/core/llm/openai.d.ts.map +1 -0
- package/dist/src/core/llm/openai.js.map +1 -0
- package/dist/src/core/llm/providers.d.ts.map +1 -0
- package/dist/src/core/llm/providers.js.map +1 -0
- package/dist/src/core/llm/types.d.ts.map +1 -0
- package/dist/src/core/llm/types.js.map +1 -0
- package/dist/src/core/prompts/system-prompt.d.ts.map +1 -0
- package/dist/src/core/prompts/system-prompt.js.map +1 -0
- package/dist/src/{runtime → core/runtime}/agent-loop.d.ts +1 -1
- package/dist/src/core/runtime/agent-loop.d.ts.map +1 -0
- package/dist/src/{runtime → core/runtime}/agent-loop.js +1 -1
- package/dist/src/core/runtime/agent-loop.js.map +1 -0
- package/dist/src/core/runtime/api-keys.d.ts.map +1 -0
- package/dist/src/core/runtime/api-keys.js.map +1 -0
- package/dist/src/core/runtime/default-tools.d.ts.map +1 -0
- package/dist/src/core/runtime/default-tools.js.map +1 -0
- package/dist/src/core/runtime/events.d.ts.map +1 -0
- package/dist/src/core/runtime/events.js.map +1 -0
- package/dist/src/core/runtime/heartbeat-lucid.d.ts.map +1 -0
- package/dist/src/core/runtime/heartbeat-lucid.js.map +1 -0
- package/dist/src/core/runtime/heartbeat-scheduler.d.ts.map +1 -0
- package/dist/src/core/runtime/heartbeat-scheduler.js.map +1 -0
- package/dist/src/core/runtime/heartbeat-store.d.ts.map +1 -0
- package/dist/src/core/runtime/heartbeat-store.js.map +1 -0
- package/dist/src/core/runtime/heartbeat-views.d.ts.map +1 -0
- package/dist/src/core/runtime/heartbeat-views.js.map +1 -0
- package/dist/src/core/runtime/heartbeat.d.ts.map +1 -0
- package/dist/src/{runtime → core/runtime}/heartbeat.js +0 -15
- package/dist/src/core/runtime/heartbeat.js.map +1 -0
- package/dist/src/core/tools/edit-file.d.ts.map +1 -0
- package/dist/src/core/tools/edit-file.js.map +1 -0
- package/dist/src/core/tools/execute-tool.d.ts.map +1 -0
- package/dist/src/core/tools/execute-tool.js.map +1 -0
- package/dist/src/core/tools/file-edit-core.d.ts.map +1 -0
- package/dist/src/core/tools/file-edit-core.js.map +1 -0
- package/dist/src/core/tools/list-files.d.ts.map +1 -0
- package/dist/src/core/tools/list-files.js.map +1 -0
- package/dist/src/core/tools/memory-notes.d.ts.map +1 -0
- package/dist/src/core/tools/memory-notes.js.map +1 -0
- package/dist/src/core/tools/read-file.d.ts.map +1 -0
- package/dist/src/core/tools/read-file.js.map +1 -0
- package/dist/src/core/tools/registry.d.ts.map +1 -0
- package/dist/src/core/tools/registry.js.map +1 -0
- package/dist/src/core/tools/report-state.d.ts.map +1 -0
- package/dist/src/core/tools/report-state.js.map +1 -0
- package/dist/src/core/tools/run-shell.d.ts.map +1 -0
- package/dist/src/core/tools/run-shell.js.map +1 -0
- package/dist/src/core/tools/search-files.d.ts.map +1 -0
- package/dist/src/core/tools/search-files.js.map +1 -0
- package/dist/src/core/tools/update-plan.d.ts.map +1 -0
- package/dist/src/core/tools/update-plan.js.map +1 -0
- package/dist/src/core/tools/view-image.d.ts.map +1 -0
- package/dist/src/core/tools/view-image.js.map +1 -0
- package/dist/src/core/tools/web-search.d.ts.map +1 -0
- package/dist/src/core/tools/web-search.js.map +1 -0
- package/dist/src/core/trace/format.d.ts.map +1 -0
- package/dist/src/core/trace/format.js.map +1 -0
- package/dist/src/core/trace/recorder.d.ts.map +1 -0
- package/dist/src/core/trace/recorder.js.map +1 -0
- package/dist/src/core/types.d.ts.map +1 -0
- package/dist/src/core/types.js.map +1 -0
- package/dist/src/core/utils/budget.d.ts.map +1 -0
- package/dist/src/core/utils/budget.js.map +1 -0
- package/dist/src/core/utils/errors.d.ts.map +1 -0
- package/dist/src/core/utils/errors.js.map +1 -0
- package/dist/src/core/utils/logger.d.ts.map +1 -0
- package/dist/src/core/utils/logger.js.map +1 -0
- package/dist/src/index.d.ts +59 -59
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +34 -34
- package/dist/src/index.js.map +1 -1
- package/dist/src/integrations/cyberloop-kinematics.d.ts +1 -1
- package/dist/src/integrations/cyberloop-kinematics.d.ts.map +1 -1
- package/dist/src/integrations/cyberloop-kinematics.js +1 -1
- package/dist/src/integrations/cyberloop-kinematics.js.map +1 -1
- package/dist/src/integrations/cyberloop.d.ts +1 -1
- package/dist/src/integrations/cyberloop.d.ts.map +1 -1
- package/dist/src/server/app.d.ts.map +1 -1
- package/dist/src/server/app.js +40 -0
- package/dist/src/server/app.js.map +1 -1
- package/dist/src/server/features/control-plane/router.d.ts +107 -0
- package/dist/src/server/features/control-plane/router.d.ts.map +1 -1
- package/dist/src/server/features/control-plane/router.js +102 -2
- package/dist/src/server/features/control-plane/router.js.map +1 -1
- package/dist/src/server/features/control-plane/services/chat-sessions.d.ts +44 -3
- package/dist/src/server/features/control-plane/services/chat-sessions.d.ts.map +1 -1
- package/dist/src/server/features/control-plane/services/chat-sessions.js +392 -11
- package/dist/src/server/features/control-plane/services/chat-sessions.js.map +1 -1
- package/dist/src/server/features/control-plane/services/control-plane-state.js +1 -1
- package/dist/src/server/features/control-plane/services/control-plane-state.js.map +1 -1
- package/dist/src/server/features/control-plane/services/workspace-files.d.ts +9 -0
- package/dist/src/server/features/control-plane/services/workspace-files.d.ts.map +1 -0
- package/dist/src/server/features/control-plane/services/workspace-files.js +71 -0
- package/dist/src/server/features/control-plane/services/workspace-files.js.map +1 -0
- package/dist/src/server/features/control-plane/types.d.ts +58 -1
- package/dist/src/server/features/control-plane/types.d.ts.map +1 -1
- package/dist/src/server/index.d.ts +2 -1
- package/dist/src/server/index.d.ts.map +1 -1
- package/dist/src/server/index.js +2 -1
- package/dist/src/server/index.js.map +1 -1
- package/dist/src/server/logger.js +1 -1
- package/dist/src/server/logger.js.map +1 -1
- package/dist/src/server/router.d.ts +107 -0
- package/dist/src/server/router.d.ts.map +1 -1
- package/dist/src/web/assets/favicon-CT3fFV8g.jpeg +0 -0
- package/dist/src/web/assets/index-C_kziU0x.css +1 -0
- package/dist/src/web/assets/index-DecqlZlx.js +12 -0
- package/dist/src/web/index.html +3 -2
- package/package.json +10 -1
- package/dist/src/config.d.ts.map +0 -1
- package/dist/src/config.js.map +0 -1
- package/dist/src/llm/anthropic.d.ts.map +0 -1
- package/dist/src/llm/anthropic.js.map +0 -1
- package/dist/src/llm/factory.d.ts.map +0 -1
- package/dist/src/llm/factory.js.map +0 -1
- package/dist/src/llm/openai-models.d.ts.map +0 -1
- package/dist/src/llm/openai-models.js.map +0 -1
- package/dist/src/llm/openai.d.ts.map +0 -1
- package/dist/src/llm/openai.js.map +0 -1
- package/dist/src/llm/providers.d.ts.map +0 -1
- package/dist/src/llm/providers.js.map +0 -1
- package/dist/src/llm/types.d.ts.map +0 -1
- package/dist/src/llm/types.js.map +0 -1
- package/dist/src/prompts/system-prompt.d.ts.map +0 -1
- package/dist/src/prompts/system-prompt.js.map +0 -1
- package/dist/src/run-agent/history.d.ts.map +0 -1
- package/dist/src/run-agent/history.js.map +0 -1
- package/dist/src/run-agent/mutation-tracking.d.ts.map +0 -1
- package/dist/src/run-agent/mutation-tracking.js.map +0 -1
- package/dist/src/run-agent/post-mutation.d.ts.map +0 -1
- package/dist/src/run-agent/post-mutation.js.map +0 -1
- package/dist/src/run-agent/progress-reminders.d.ts.map +0 -1
- package/dist/src/run-agent/progress-reminders.js.map +0 -1
- package/dist/src/run-agent/tool-dispatch.d.ts.map +0 -1
- package/dist/src/run-agent/tool-dispatch.js.map +0 -1
- package/dist/src/run-agent/util.d.ts.map +0 -1
- package/dist/src/run-agent/util.js.map +0 -1
- package/dist/src/run-agent.d.ts.map +0 -1
- package/dist/src/run-agent.js.map +0 -1
- package/dist/src/runtime/agent-loop.d.ts.map +0 -1
- package/dist/src/runtime/agent-loop.js.map +0 -1
- package/dist/src/runtime/api-keys.d.ts.map +0 -1
- package/dist/src/runtime/api-keys.js.map +0 -1
- package/dist/src/runtime/default-tools.d.ts.map +0 -1
- package/dist/src/runtime/default-tools.js.map +0 -1
- package/dist/src/runtime/events.d.ts.map +0 -1
- package/dist/src/runtime/events.js.map +0 -1
- package/dist/src/runtime/heartbeat-lucid.d.ts.map +0 -1
- package/dist/src/runtime/heartbeat-lucid.js.map +0 -1
- package/dist/src/runtime/heartbeat-scheduler.d.ts.map +0 -1
- package/dist/src/runtime/heartbeat-scheduler.js.map +0 -1
- package/dist/src/runtime/heartbeat-store.d.ts.map +0 -1
- package/dist/src/runtime/heartbeat-store.js.map +0 -1
- package/dist/src/runtime/heartbeat-views.d.ts.map +0 -1
- package/dist/src/runtime/heartbeat-views.js.map +0 -1
- package/dist/src/runtime/heartbeat.d.ts.map +0 -1
- package/dist/src/runtime/heartbeat.js.map +0 -1
- package/dist/src/tools/edit-file.d.ts.map +0 -1
- package/dist/src/tools/edit-file.js.map +0 -1
- package/dist/src/tools/execute-tool.d.ts.map +0 -1
- package/dist/src/tools/execute-tool.js.map +0 -1
- package/dist/src/tools/file-edit-core.d.ts.map +0 -1
- package/dist/src/tools/file-edit-core.js.map +0 -1
- package/dist/src/tools/list-files.d.ts.map +0 -1
- package/dist/src/tools/list-files.js.map +0 -1
- package/dist/src/tools/memory-notes.d.ts.map +0 -1
- package/dist/src/tools/memory-notes.js.map +0 -1
- package/dist/src/tools/read-file.d.ts.map +0 -1
- package/dist/src/tools/read-file.js.map +0 -1
- package/dist/src/tools/registry.d.ts.map +0 -1
- package/dist/src/tools/registry.js.map +0 -1
- package/dist/src/tools/report-state.d.ts.map +0 -1
- package/dist/src/tools/report-state.js.map +0 -1
- package/dist/src/tools/run-shell.d.ts.map +0 -1
- package/dist/src/tools/run-shell.js.map +0 -1
- package/dist/src/tools/search-files.d.ts.map +0 -1
- package/dist/src/tools/search-files.js.map +0 -1
- package/dist/src/tools/update-plan.d.ts.map +0 -1
- package/dist/src/tools/update-plan.js.map +0 -1
- package/dist/src/tools/view-image.d.ts.map +0 -1
- package/dist/src/tools/view-image.js.map +0 -1
- package/dist/src/tools/web-search.d.ts.map +0 -1
- package/dist/src/tools/web-search.js.map +0 -1
- package/dist/src/trace/format.d.ts.map +0 -1
- package/dist/src/trace/format.js.map +0 -1
- package/dist/src/trace/recorder.d.ts.map +0 -1
- package/dist/src/trace/recorder.js.map +0 -1
- package/dist/src/types.d.ts.map +0 -1
- package/dist/src/types.js.map +0 -1
- package/dist/src/utils/budget.d.ts.map +0 -1
- package/dist/src/utils/budget.js.map +0 -1
- package/dist/src/utils/errors.d.ts.map +0 -1
- package/dist/src/utils/errors.js.map +0 -1
- package/dist/src/utils/logger.d.ts.map +0 -1
- package/dist/src/utils/logger.js.map +0 -1
- package/dist/src/web/assets/index-DmYQXJQf.css +0 -1
- package/dist/src/web/assets/index-xFJTOaTY.js +0 -9
- /package/dist/src/{run-agent → core/agent}/history.d.ts +0 -0
- /package/dist/src/{run-agent → core/agent}/history.js +0 -0
- /package/dist/src/{run-agent → core/agent}/mutation-tracking.d.ts +0 -0
- /package/dist/src/{run-agent → core/agent}/post-mutation.d.ts +0 -0
- /package/dist/src/{run-agent → core/agent}/post-mutation.js +0 -0
- /package/dist/src/{run-agent → core/agent}/progress-reminders.d.ts +0 -0
- /package/dist/src/{run-agent → core/agent}/progress-reminders.js +0 -0
- /package/dist/src/{run-agent → core/agent}/tool-dispatch.js +0 -0
- /package/dist/src/{run-agent → core/agent}/util.d.ts +0 -0
- /package/dist/src/{run-agent → core/agent}/util.js +0 -0
- /package/dist/src/{config.d.ts → core/config.d.ts} +0 -0
- /package/dist/src/{config.js → core/config.js} +0 -0
- /package/dist/src/{llm → core/llm}/anthropic.d.ts +0 -0
- /package/dist/src/{llm → core/llm}/anthropic.js +0 -0
- /package/dist/src/{llm → core/llm}/factory.d.ts +0 -0
- /package/dist/src/{llm → core/llm}/factory.js +0 -0
- /package/dist/src/{llm → core/llm}/openai-models.d.ts +0 -0
- /package/dist/src/{llm → core/llm}/openai-models.js +0 -0
- /package/dist/src/{llm → core/llm}/openai.d.ts +0 -0
- /package/dist/src/{llm → core/llm}/openai.js +0 -0
- /package/dist/src/{llm → core/llm}/providers.d.ts +0 -0
- /package/dist/src/{llm → core/llm}/providers.js +0 -0
- /package/dist/src/{llm → core/llm}/types.d.ts +0 -0
- /package/dist/src/{llm → core/llm}/types.js +0 -0
- /package/dist/src/{prompts → core/prompts}/system-prompt.d.ts +0 -0
- /package/dist/src/{prompts → core/prompts}/system-prompt.js +0 -0
- /package/dist/src/{runtime → core/runtime}/api-keys.d.ts +0 -0
- /package/dist/src/{runtime → core/runtime}/api-keys.js +0 -0
- /package/dist/src/{runtime → core/runtime}/default-tools.d.ts +0 -0
- /package/dist/src/{runtime → core/runtime}/default-tools.js +0 -0
- /package/dist/src/{runtime → core/runtime}/events.d.ts +0 -0
- /package/dist/src/{runtime → core/runtime}/events.js +0 -0
- /package/dist/src/{runtime → core/runtime}/heartbeat-lucid.d.ts +0 -0
- /package/dist/src/{runtime → core/runtime}/heartbeat-lucid.js +0 -0
- /package/dist/src/{runtime → core/runtime}/heartbeat-scheduler.d.ts +0 -0
- /package/dist/src/{runtime → core/runtime}/heartbeat-scheduler.js +0 -0
- /package/dist/src/{runtime → core/runtime}/heartbeat-store.d.ts +0 -0
- /package/dist/src/{runtime → core/runtime}/heartbeat-store.js +0 -0
- /package/dist/src/{runtime → core/runtime}/heartbeat-views.d.ts +0 -0
- /package/dist/src/{runtime → core/runtime}/heartbeat-views.js +0 -0
- /package/dist/src/{runtime → core/runtime}/heartbeat.d.ts +0 -0
- /package/dist/src/{tools → core/tools}/edit-file.d.ts +0 -0
- /package/dist/src/{tools → core/tools}/edit-file.js +0 -0
- /package/dist/src/{tools → core/tools}/execute-tool.d.ts +0 -0
- /package/dist/src/{tools → core/tools}/execute-tool.js +0 -0
- /package/dist/src/{tools → core/tools}/file-edit-core.d.ts +0 -0
- /package/dist/src/{tools → core/tools}/file-edit-core.js +0 -0
- /package/dist/src/{tools → core/tools}/list-files.d.ts +0 -0
- /package/dist/src/{tools → core/tools}/list-files.js +0 -0
- /package/dist/src/{tools → core/tools}/memory-notes.d.ts +0 -0
- /package/dist/src/{tools → core/tools}/memory-notes.js +0 -0
- /package/dist/src/{tools → core/tools}/read-file.d.ts +0 -0
- /package/dist/src/{tools → core/tools}/read-file.js +0 -0
- /package/dist/src/{tools → core/tools}/registry.d.ts +0 -0
- /package/dist/src/{tools → core/tools}/registry.js +0 -0
- /package/dist/src/{tools → core/tools}/report-state.d.ts +0 -0
- /package/dist/src/{tools → core/tools}/report-state.js +0 -0
- /package/dist/src/{tools → core/tools}/run-shell.d.ts +0 -0
- /package/dist/src/{tools → core/tools}/run-shell.js +0 -0
- /package/dist/src/{tools → core/tools}/search-files.d.ts +0 -0
- /package/dist/src/{tools → core/tools}/search-files.js +0 -0
- /package/dist/src/{tools → core/tools}/update-plan.d.ts +0 -0
- /package/dist/src/{tools → core/tools}/update-plan.js +0 -0
- /package/dist/src/{tools → core/tools}/view-image.d.ts +0 -0
- /package/dist/src/{tools → core/tools}/view-image.js +0 -0
- /package/dist/src/{tools → core/tools}/web-search.d.ts +0 -0
- /package/dist/src/{tools → core/tools}/web-search.js +0 -0
- /package/dist/src/{trace → core/trace}/format.d.ts +0 -0
- /package/dist/src/{trace → core/trace}/format.js +0 -0
- /package/dist/src/{trace → core/trace}/recorder.d.ts +0 -0
- /package/dist/src/{trace → core/trace}/recorder.js +0 -0
- /package/dist/src/{types.d.ts → core/types.d.ts} +0 -0
- /package/dist/src/{types.js → core/types.js} +0 -0
- /package/dist/src/{utils → core/utils}/budget.d.ts +0 -0
- /package/dist/src/{utils → core/utils}/budget.js +0 -0
- /package/dist/src/{utils → core/utils}/errors.d.ts +0 -0
- /package/dist/src/{utils → core/utils}/errors.js +0 -0
- /package/dist/src/{utils → core/utils}/logger.d.ts +0 -0
- /package/dist/src/{utils → core/utils}/logger.js +0 -0
|
@@ -1,147 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
import { dirname } from 'node:path';
|
|
3
|
-
import { truncate } from '../utils/format.js';
|
|
4
|
-
export function createInitialMessages(apiKeyPresent) {
|
|
5
|
-
return [
|
|
6
|
-
{
|
|
7
|
-
id: 'intro',
|
|
8
|
-
role: 'assistant',
|
|
9
|
-
text: 'Heddle conversational mode.\n\nAsk a question about this workspace.\nEach turn runs the current agent loop and carries the transcript into the next turn.\nUse !<command> to run a shell command directly in chat.',
|
|
10
|
-
},
|
|
11
|
-
...(!apiKeyPresent ?
|
|
12
|
-
[{
|
|
13
|
-
id: 'missing-key',
|
|
14
|
-
role: 'assistant',
|
|
15
|
-
text: 'No provider API key detected. Set OPENAI_API_KEY for OpenAI models or ANTHROPIC_API_KEY for Claude models. Dev fallback conventions also work: PERSONAL_OPENAI_API_KEY and PERSONAL_ANTHROPIC_API_KEY.',
|
|
16
|
-
}]
|
|
17
|
-
: []),
|
|
18
|
-
];
|
|
19
|
-
}
|
|
20
|
-
export function createChatSession(options) {
|
|
21
|
-
const now = new Date().toISOString();
|
|
22
|
-
return {
|
|
23
|
-
id: options.id,
|
|
24
|
-
name: options.name,
|
|
25
|
-
history: [],
|
|
26
|
-
messages: createInitialMessages(options.apiKeyPresent),
|
|
27
|
-
turns: [],
|
|
28
|
-
createdAt: now,
|
|
29
|
-
updatedAt: now,
|
|
30
|
-
model: options.model,
|
|
31
|
-
driftEnabled: true,
|
|
32
|
-
lastContinuePrompt: undefined,
|
|
33
|
-
context: undefined,
|
|
34
|
-
};
|
|
35
|
-
}
|
|
36
|
-
export function touchSession(session) {
|
|
37
|
-
return { ...session, updatedAt: new Date().toISOString() };
|
|
38
|
-
}
|
|
39
|
-
export function summarizeSession(session) {
|
|
40
|
-
const latestTurn = session.turns[session.turns.length - 1];
|
|
41
|
-
const latestPrompt = latestTurn ? truncate(latestTurn.prompt, 44) : 'no turns yet';
|
|
42
|
-
return `${session.turns.length} turns • ${latestPrompt}`;
|
|
43
|
-
}
|
|
44
|
-
export function isGenericSessionName(name) {
|
|
45
|
-
return /^Session \d+$/.test(name.trim());
|
|
46
|
-
}
|
|
47
|
-
export function loadChatSessions(sessionsPath, apiKeyPresent) {
|
|
48
|
-
try {
|
|
49
|
-
if (!existsSync(sessionsPath)) {
|
|
50
|
-
return [
|
|
51
|
-
createChatSession({
|
|
52
|
-
id: 'session-1',
|
|
53
|
-
name: 'Session 1',
|
|
54
|
-
apiKeyPresent,
|
|
55
|
-
}),
|
|
56
|
-
];
|
|
57
|
-
}
|
|
58
|
-
const raw = readFileSync(sessionsPath, 'utf8');
|
|
59
|
-
const parsed = JSON.parse(raw);
|
|
60
|
-
if (!Array.isArray(parsed)) {
|
|
61
|
-
throw new Error('Expected session array');
|
|
62
|
-
}
|
|
63
|
-
const sessions = parsed.flatMap((value) => parseSavedSession(value, apiKeyPresent));
|
|
64
|
-
if (sessions.length > 0) {
|
|
65
|
-
return sessions.sort((left, right) => right.updatedAt.localeCompare(left.updatedAt));
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
catch (error) {
|
|
69
|
-
process.stderr.write(`Failed to load chat sessions from ${sessionsPath}: ${error instanceof Error ? error.message : String(error)}\n`);
|
|
70
|
-
}
|
|
71
|
-
return [
|
|
72
|
-
createChatSession({
|
|
73
|
-
id: 'session-1',
|
|
74
|
-
name: 'Session 1',
|
|
75
|
-
apiKeyPresent,
|
|
76
|
-
}),
|
|
77
|
-
];
|
|
78
|
-
}
|
|
79
|
-
export function saveChatSessions(sessionsPath, sessions) {
|
|
80
|
-
mkdirSync(dirname(sessionsPath), { recursive: true });
|
|
81
|
-
writeFileSync(sessionsPath, JSON.stringify(sessions, null, 2));
|
|
82
|
-
}
|
|
83
|
-
function parseSavedSession(value, apiKeyPresent) {
|
|
84
|
-
if (!value || typeof value !== 'object' || Array.isArray(value)) {
|
|
85
|
-
return [];
|
|
86
|
-
}
|
|
87
|
-
const candidate = value;
|
|
88
|
-
if (typeof candidate.id !== 'string' || typeof candidate.name !== 'string') {
|
|
89
|
-
return [];
|
|
90
|
-
}
|
|
91
|
-
const createdAt = typeof candidate.createdAt === 'string' ? candidate.createdAt : new Date().toISOString();
|
|
92
|
-
const updatedAt = typeof candidate.updatedAt === 'string' ? candidate.updatedAt : createdAt;
|
|
93
|
-
return [{
|
|
94
|
-
id: candidate.id,
|
|
95
|
-
name: candidate.name,
|
|
96
|
-
history: Array.isArray(candidate.history) ? candidate.history : [],
|
|
97
|
-
messages: Array.isArray(candidate.messages) && candidate.messages.length > 0 ?
|
|
98
|
-
candidate.messages.filter(isConversationLine)
|
|
99
|
-
: createInitialMessages(apiKeyPresent),
|
|
100
|
-
turns: Array.isArray(candidate.turns) ? candidate.turns.filter(isTurnSummary) : [],
|
|
101
|
-
createdAt,
|
|
102
|
-
updatedAt,
|
|
103
|
-
model: typeof candidate.model === 'string' ? candidate.model : undefined,
|
|
104
|
-
driftEnabled: typeof candidate.driftEnabled === 'boolean' ? candidate.driftEnabled : true,
|
|
105
|
-
lastContinuePrompt: typeof candidate.lastContinuePrompt === 'string' ? candidate.lastContinuePrompt : undefined,
|
|
106
|
-
context: isChatContextStats(candidate.context) ? candidate.context : undefined,
|
|
107
|
-
}];
|
|
108
|
-
}
|
|
109
|
-
function isConversationLine(value) {
|
|
110
|
-
if (!value || typeof value !== 'object' || Array.isArray(value)) {
|
|
111
|
-
return false;
|
|
112
|
-
}
|
|
113
|
-
const candidate = value;
|
|
114
|
-
return (typeof candidate.id === 'string' &&
|
|
115
|
-
(candidate.role === 'user' || candidate.role === 'assistant') &&
|
|
116
|
-
typeof candidate.text === 'string');
|
|
117
|
-
}
|
|
118
|
-
function isTurnSummary(value) {
|
|
119
|
-
if (!value || typeof value !== 'object' || Array.isArray(value)) {
|
|
120
|
-
return false;
|
|
121
|
-
}
|
|
122
|
-
const candidate = value;
|
|
123
|
-
return (typeof candidate.id === 'string' &&
|
|
124
|
-
typeof candidate.prompt === 'string' &&
|
|
125
|
-
typeof candidate.outcome === 'string' &&
|
|
126
|
-
typeof candidate.summary === 'string' &&
|
|
127
|
-
typeof candidate.steps === 'number' &&
|
|
128
|
-
typeof candidate.traceFile === 'string' &&
|
|
129
|
-
Array.isArray(candidate.events) &&
|
|
130
|
-
candidate.events.every((event) => typeof event === 'string'));
|
|
131
|
-
}
|
|
132
|
-
function isChatContextStats(value) {
|
|
133
|
-
if (!value || typeof value !== 'object' || Array.isArray(value)) {
|
|
134
|
-
return false;
|
|
135
|
-
}
|
|
136
|
-
const candidate = value;
|
|
137
|
-
return (typeof candidate.estimatedHistoryTokens === 'number' &&
|
|
138
|
-
(candidate.estimatedRequestTokens === undefined || typeof candidate.estimatedRequestTokens === 'number') &&
|
|
139
|
-
(candidate.lastRunInputTokens === undefined || typeof candidate.lastRunInputTokens === 'number') &&
|
|
140
|
-
(candidate.lastRunOutputTokens === undefined || typeof candidate.lastRunOutputTokens === 'number') &&
|
|
141
|
-
(candidate.lastRunTotalTokens === undefined || typeof candidate.lastRunTotalTokens === 'number') &&
|
|
142
|
-
(candidate.cachedInputTokens === undefined || typeof candidate.cachedInputTokens === 'number') &&
|
|
143
|
-
(candidate.reasoningTokens === undefined || typeof candidate.reasoningTokens === 'number') &&
|
|
144
|
-
(candidate.compactedMessages === undefined || typeof candidate.compactedMessages === 'number') &&
|
|
145
|
-
(candidate.compactedAt === undefined || typeof candidate.compactedAt === 'string'));
|
|
146
|
-
}
|
|
1
|
+
export { createInitialMessages, createChatSession, touchSession, summarizeSession, isGenericSessionName, loadChatSessions, readChatSessionCatalog, readChatSession, migrateLegacyChatSessions, saveChatSessions, } from '../../../core/chat/storage.js';
|
|
147
2
|
//# sourceMappingURL=storage.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../../../../../src/cli/chat/state/storage.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../../../../../src/cli/chat/state/storage.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,YAAY,EACZ,gBAAgB,EAChB,oBAAoB,EACpB,gBAAgB,EAChB,sBAAsB,EACtB,eAAe,EACf,yBAAyB,EACzB,gBAAgB,GACjB,MAAM,+BAA+B,CAAC"}
|
|
@@ -1,77 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
import type { EditFilePreview } from '../../../tools/edit-file.js';
|
|
3
|
-
export type TurnSummary = {
|
|
4
|
-
id: string;
|
|
5
|
-
prompt: string;
|
|
6
|
-
outcome: string;
|
|
7
|
-
summary: string;
|
|
8
|
-
steps: number;
|
|
9
|
-
traceFile: string;
|
|
10
|
-
events: string[];
|
|
11
|
-
};
|
|
12
|
-
export type ConversationLine = {
|
|
13
|
-
id: string;
|
|
14
|
-
role: 'user' | 'assistant';
|
|
15
|
-
text: string;
|
|
16
|
-
isStreaming?: boolean;
|
|
17
|
-
isPending?: boolean;
|
|
18
|
-
};
|
|
19
|
-
export type LiveEvent = {
|
|
20
|
-
id: string;
|
|
21
|
-
text: string;
|
|
22
|
-
};
|
|
23
|
-
export type ChatContextStats = {
|
|
24
|
-
estimatedHistoryTokens: number;
|
|
25
|
-
estimatedRequestTokens?: number;
|
|
26
|
-
lastRunInputTokens?: number;
|
|
27
|
-
lastRunOutputTokens?: number;
|
|
28
|
-
lastRunTotalTokens?: number;
|
|
29
|
-
cachedInputTokens?: number;
|
|
30
|
-
reasoningTokens?: number;
|
|
31
|
-
compactedMessages?: number;
|
|
32
|
-
compactedAt?: string;
|
|
33
|
-
};
|
|
34
|
-
export type ChatSession = {
|
|
35
|
-
id: string;
|
|
36
|
-
name: string;
|
|
37
|
-
history: ChatMessage[];
|
|
38
|
-
messages: ConversationLine[];
|
|
39
|
-
turns: TurnSummary[];
|
|
40
|
-
createdAt: string;
|
|
41
|
-
updatedAt: string;
|
|
42
|
-
model?: string;
|
|
43
|
-
driftEnabled?: boolean;
|
|
44
|
-
lastContinuePrompt?: string;
|
|
45
|
-
context?: ChatContextStats;
|
|
46
|
-
};
|
|
47
|
-
export type PendingApproval = {
|
|
48
|
-
call: ToolCall;
|
|
49
|
-
tool: ToolDefinition;
|
|
50
|
-
editPreview?: EditFilePreview;
|
|
51
|
-
rememberForProject?: () => void;
|
|
52
|
-
rememberLabel?: string;
|
|
53
|
-
resolve: (decision: {
|
|
54
|
-
approved: boolean;
|
|
55
|
-
reason?: string;
|
|
56
|
-
}) => void;
|
|
57
|
-
};
|
|
58
|
-
export type ApprovalChoice = 'approve' | 'allow_project' | 'deny';
|
|
59
|
-
export type LocalCommandResult = {
|
|
60
|
-
handled: false;
|
|
61
|
-
} | {
|
|
62
|
-
handled: true;
|
|
63
|
-
kind: 'message';
|
|
64
|
-
message: string;
|
|
65
|
-
} | {
|
|
66
|
-
handled: true;
|
|
67
|
-
kind: 'continue';
|
|
68
|
-
sessionId?: string;
|
|
69
|
-
message?: string;
|
|
70
|
-
} | {
|
|
71
|
-
handled: true;
|
|
72
|
-
kind: 'execute';
|
|
73
|
-
prompt: string;
|
|
74
|
-
displayText: string;
|
|
75
|
-
message?: string;
|
|
76
|
-
};
|
|
1
|
+
export type { TurnSummary, ConversationLine, LiveEvent, ChatContextStats, ChatSession, PendingApproval, ApprovalChoice, LocalCommandResult, } from '../../../core/chat/types.js';
|
|
77
2
|
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/cli/chat/state/types.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../../src/cli/chat/state/types.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,WAAW,EACX,gBAAgB,EAChB,SAAS,EACT,gBAAgB,EAChB,WAAW,EACX,eAAe,EACf,cAAc,EACd,kBAAkB,GACnB,MAAM,6BAA6B,CAAC"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { execSync } from 'node:child_process';
|
|
2
2
|
import { existsSync } from 'node:fs';
|
|
3
3
|
import { relative, resolve } from 'node:path';
|
|
4
|
-
import { DEFAULT_SEARCH_EXCLUDED_DIRS } from '../../../tools/search-files.js';
|
|
4
|
+
import { DEFAULT_SEARCH_EXCLUDED_DIRS } from '../../../core/tools/search-files.js';
|
|
5
5
|
export function listMentionableFiles(workspaceRoot, excludedDirs = []) {
|
|
6
6
|
const effectiveExcludedDirs = sanitizeExcludedDirs(excludedDirs);
|
|
7
7
|
const excludeArgs = effectiveExcludedDirs.flatMap((dir) => ['-g', `!${dir}/**`]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-mentions.js","sourceRoot":"","sources":["../../../../../src/cli/chat/utils/file-mentions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,4BAA4B,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"file-mentions.js","sourceRoot":"","sources":["../../../../../src/cli/chat/utils/file-mentions.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { ChatMessage, TraceEvent, ToolResult } from '../../../index.js';
|
|
2
|
-
import type { EditFilePreview } from '../../../tools/edit-file.js';
|
|
3
|
-
|
|
2
|
+
import type { EditFilePreview } from '../../../core/tools/edit-file.js';
|
|
3
|
+
export { buildConversationMessages, countAssistantSteps, formatChatFailureMessage, summarizeTrace, truncate, } from '../../../core/chat/format.js';
|
|
4
|
+
import type { LiveEvent, PendingApproval } from '../state/types.js';
|
|
4
5
|
export type ApprovalSummary = {
|
|
5
6
|
title: string;
|
|
6
7
|
command?: string;
|
|
@@ -15,9 +16,6 @@ export type ChatFailureHintOptions = {
|
|
|
15
16
|
model: string;
|
|
16
17
|
estimatedHistoryTokens?: number;
|
|
17
18
|
};
|
|
18
|
-
export declare function buildConversationMessages(history: ChatMessage[]): ConversationLine[];
|
|
19
|
-
export declare function summarizeTrace(trace: TraceEvent[]): string[];
|
|
20
|
-
export declare function countAssistantSteps(trace: TraceEvent[]): number;
|
|
21
19
|
export declare function toLiveEvent(event: TraceEvent): string | undefined;
|
|
22
20
|
export declare function currentActivityText(liveEvents: LiveEvent[], isRunning: boolean, elapsedSeconds: number, pendingApproval?: PendingApproval, interruptRequested?: boolean): string;
|
|
23
21
|
export declare function formatApprovalPrompt(pendingApproval: PendingApproval): string;
|
|
@@ -25,13 +23,11 @@ export declare function formatApprovalHint(pendingApproval: PendingApproval): st
|
|
|
25
23
|
export declare function summarizePendingApproval(pendingApproval: PendingApproval): ApprovalSummary;
|
|
26
24
|
export declare function summarizeToolCall(tool: string, input: unknown): string;
|
|
27
25
|
export declare function summarizeToolResult(tool: string, command: string | undefined, output?: unknown): string;
|
|
28
|
-
export declare function formatChatFailureMessage(message: string, options: ChatFailureHintOptions): string;
|
|
29
26
|
export declare function extractShellCommand(value: unknown): string | undefined;
|
|
30
27
|
export declare function extractEditPath(value: unknown): string | undefined;
|
|
31
28
|
export declare function extractPathField(value: unknown): string | undefined;
|
|
32
29
|
export declare function extractQueryField(value: unknown): string | undefined;
|
|
33
30
|
export declare function extractOutputPath(value: unknown): string | undefined;
|
|
34
|
-
export declare function truncate(value: string, maxLength: number): string;
|
|
35
31
|
export declare function normalizeInlineText(value: string): string;
|
|
36
32
|
export declare function parsePositiveInt(raw: string | undefined): number | undefined;
|
|
37
33
|
export declare function shouldFallbackToMutate(error: string | undefined): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../../../../src/cli/chat/utils/format.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,
|
|
1
|
+
{"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../../../../src/cli/chat/utils/format.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,72 +1,8 @@
|
|
|
1
|
-
import { classifyShellCommandPolicy, DEFAULT_MUTATE_RULES, } from '../../../tools/run-shell.js';
|
|
2
|
-
import {
|
|
1
|
+
import { classifyShellCommandPolicy, DEFAULT_MUTATE_RULES, } from '../../../core/tools/run-shell.js';
|
|
2
|
+
import { truncate } from '../../../core/chat/format.js';
|
|
3
|
+
export { buildConversationMessages, countAssistantSteps, formatChatFailureMessage, summarizeTrace, truncate, } from '../../../core/chat/format.js';
|
|
3
4
|
const MAX_SHELL_OUTPUT_CHARS = 1400;
|
|
4
5
|
const MAX_TOOL_CALL_SUMMARY_CHARS = 96;
|
|
5
|
-
export function buildConversationMessages(history) {
|
|
6
|
-
return history.flatMap((message, index) => {
|
|
7
|
-
if (isCompactedHistorySummary(message)) {
|
|
8
|
-
return [{
|
|
9
|
-
id: `compacted-${index}`,
|
|
10
|
-
role: 'assistant',
|
|
11
|
-
text: 'Earlier conversation history was compacted to preserve context for longer chats.',
|
|
12
|
-
}];
|
|
13
|
-
}
|
|
14
|
-
if (message.role === 'user' || message.role === 'assistant') {
|
|
15
|
-
if (!message.content.trim()) {
|
|
16
|
-
return [];
|
|
17
|
-
}
|
|
18
|
-
return [{ id: `${message.role}-${index}-${message.content}`, role: message.role, text: message.content }];
|
|
19
|
-
}
|
|
20
|
-
if (message.role === 'tool') {
|
|
21
|
-
const rendered = renderToolHistoryMessage(message, history, index);
|
|
22
|
-
if (!rendered) {
|
|
23
|
-
return [];
|
|
24
|
-
}
|
|
25
|
-
return [{ id: `tool-${index}-${rendered}`, role: 'assistant', text: rendered }];
|
|
26
|
-
}
|
|
27
|
-
return [];
|
|
28
|
-
});
|
|
29
|
-
}
|
|
30
|
-
export function summarizeTrace(trace) {
|
|
31
|
-
return trace.flatMap((event) => {
|
|
32
|
-
switch (event.type) {
|
|
33
|
-
case 'assistant.turn':
|
|
34
|
-
return [
|
|
35
|
-
...(event.diagnostics?.rationale ? [`reasoning: ${truncate(event.diagnostics.rationale, 140)}`] : []),
|
|
36
|
-
event.requestedTools ?
|
|
37
|
-
`assistant requested ${event.toolCalls?.map((call) => summarizeToolCall(call.tool, call.input)).join(', ')}`
|
|
38
|
-
: 'assistant answered',
|
|
39
|
-
];
|
|
40
|
-
case 'tool.approval_requested':
|
|
41
|
-
return [`approval requested for ${summarizeToolCall(event.call.tool, event.call.input)}`];
|
|
42
|
-
case 'tool.approval_resolved':
|
|
43
|
-
return [
|
|
44
|
-
`approval ${event.approved ? 'granted' : 'denied'} for ${summarizeToolCall(event.call.tool, event.call.input)}${event.reason ? ` (${truncate(event.reason, 80)})` : ''}`,
|
|
45
|
-
];
|
|
46
|
-
case 'tool.fallback':
|
|
47
|
-
return [
|
|
48
|
-
`fallback ${summarizeToolCall(event.fromCall.tool, event.fromCall.input)} -> ${summarizeToolCall(event.toCall.tool, event.toCall.input)} (${event.reason})`,
|
|
49
|
-
];
|
|
50
|
-
case 'tool.call':
|
|
51
|
-
return [`tool call ${summarizeToolCall(event.call.tool, event.call.input)}`];
|
|
52
|
-
case 'tool.result':
|
|
53
|
-
return [
|
|
54
|
-
`tool result ${summarizeToolResult(event.tool, extractShellCommand(event.result.output), event.result.output)}: ${event.result.ok ? 'ok' : event.result.error ?? 'error'}`,
|
|
55
|
-
];
|
|
56
|
-
case 'cyberloop.annotation':
|
|
57
|
-
return [
|
|
58
|
-
`cyberloop ${event.frameKind} step ${event.step}: drift=${event.driftLevel}${formatCyberLoopMetrics(event.metadata)}${event.requestedHalt ? ' halt-requested' : ''}`,
|
|
59
|
-
];
|
|
60
|
-
case 'run.finished':
|
|
61
|
-
return [`run finished: ${event.outcome}`];
|
|
62
|
-
default:
|
|
63
|
-
return [];
|
|
64
|
-
}
|
|
65
|
-
});
|
|
66
|
-
}
|
|
67
|
-
export function countAssistantSteps(trace) {
|
|
68
|
-
return trace.filter((event) => event.type === 'assistant.turn').length;
|
|
69
|
-
}
|
|
70
6
|
export function toLiveEvent(event) {
|
|
71
7
|
switch (event.type) {
|
|
72
8
|
case 'run.started':
|
|
@@ -224,29 +160,6 @@ export function summarizeToolResult(tool, command, output) {
|
|
|
224
160
|
}
|
|
225
161
|
return tool;
|
|
226
162
|
}
|
|
227
|
-
export function formatChatFailureMessage(message, options) {
|
|
228
|
-
if (looksLikeAnthropicInputRateLimit(message)) {
|
|
229
|
-
const sizeHint = typeof options.estimatedHistoryTokens === 'number' ?
|
|
230
|
-
` Current session history is estimated at about ${options.estimatedHistoryTokens.toLocaleString()} tokens before the next request.`
|
|
231
|
-
: '';
|
|
232
|
-
return `${message}\n\nThis likely failed because the current prompt plus session history are too large for ${options.model}'s input-token-per-minute limit.${sizeHint} Try /compact, /clear, or /session new, then retry.`;
|
|
233
|
-
}
|
|
234
|
-
if (looksLikeOpenAiQuotaError(message)) {
|
|
235
|
-
return `${message}\n\nThis looks like an OpenAI quota or billing limit for the active key, not a transient prompt-size issue. Switch providers or check the OpenAI account quota and billing state.`;
|
|
236
|
-
}
|
|
237
|
-
return message;
|
|
238
|
-
}
|
|
239
|
-
function looksLikeAnthropicInputRateLimit(message) {
|
|
240
|
-
const normalized = message.toLowerCase();
|
|
241
|
-
return (normalized.includes('input tokens per minute')
|
|
242
|
-
|| (normalized.includes('reduce the prompt length') && normalized.includes('maximum tokens requested'))
|
|
243
|
-
|| (normalized.includes('rate_limit_error') && normalized.includes('tokens per minute')));
|
|
244
|
-
}
|
|
245
|
-
function looksLikeOpenAiQuotaError(message) {
|
|
246
|
-
const normalized = message.toLowerCase();
|
|
247
|
-
return (normalized.includes('exceeded your current quota')
|
|
248
|
-
|| (normalized.includes('billing details') && normalized.includes('quota')));
|
|
249
|
-
}
|
|
250
163
|
export function extractShellCommand(value) {
|
|
251
164
|
if (!value || typeof value !== 'object' || Array.isArray(value)) {
|
|
252
165
|
return undefined;
|
|
@@ -278,12 +191,6 @@ export function extractOutputPath(value) {
|
|
|
278
191
|
const path = value.path;
|
|
279
192
|
return typeof path === 'string' && path.trim() ? path.trim() : undefined;
|
|
280
193
|
}
|
|
281
|
-
export function truncate(value, maxLength) {
|
|
282
|
-
if (value.length <= maxLength) {
|
|
283
|
-
return value;
|
|
284
|
-
}
|
|
285
|
-
return `${value.slice(0, maxLength - 1)}…`;
|
|
286
|
-
}
|
|
287
194
|
export function normalizeInlineText(value) {
|
|
288
195
|
return value.replace(/\r?\n+/g, ' ').replace(/\s+/g, ' ').trim();
|
|
289
196
|
}
|
|
@@ -455,34 +362,6 @@ function summarizePlanInput(tool, input) {
|
|
|
455
362
|
const currentStep = current && typeof current.step === 'string' ? current.step : undefined;
|
|
456
363
|
return currentStep ? `${tool} (${truncate(currentStep, MAX_TOOL_CALL_SUMMARY_CHARS)})` : `${tool} (${plan.length} items)`;
|
|
457
364
|
}
|
|
458
|
-
function renderToolHistoryMessage(message, history, index) {
|
|
459
|
-
const toolCall = findToolCallForResult(history, index, message.toolCallId);
|
|
460
|
-
if (!toolCall) {
|
|
461
|
-
return undefined;
|
|
462
|
-
}
|
|
463
|
-
const result = parseToolResultPayload(message.content);
|
|
464
|
-
if (!result?.ok) {
|
|
465
|
-
return undefined;
|
|
466
|
-
}
|
|
467
|
-
if (toolCall.tool === 'update_plan') {
|
|
468
|
-
return renderUpdatePlanHistoryMessage(result.output);
|
|
469
|
-
}
|
|
470
|
-
if (toolCall.tool !== 'edit_file') {
|
|
471
|
-
return undefined;
|
|
472
|
-
}
|
|
473
|
-
const editResult = parseEditFileResult(result.output);
|
|
474
|
-
if (!editResult) {
|
|
475
|
-
return undefined;
|
|
476
|
-
}
|
|
477
|
-
return formatEditHistoryMessage({
|
|
478
|
-
path: editResult.path,
|
|
479
|
-
action: editResult.action,
|
|
480
|
-
matchCount: editResult.matchCount,
|
|
481
|
-
bytesWritten: editResult.bytesWritten,
|
|
482
|
-
diff: editResult.diff?.diff,
|
|
483
|
-
truncated: editResult.diff?.truncated,
|
|
484
|
-
});
|
|
485
|
-
}
|
|
486
365
|
function renderUpdatePlanHistoryMessage(output) {
|
|
487
366
|
if (!output || typeof output !== 'object' || Array.isArray(output)) {
|
|
488
367
|
return undefined;
|
|
@@ -548,63 +427,6 @@ function formatEditHistoryMessage(options) {
|
|
|
548
427
|
}
|
|
549
428
|
return lines.join('\n');
|
|
550
429
|
}
|
|
551
|
-
function findToolCallForResult(history, index, toolCallId) {
|
|
552
|
-
for (let cursor = index - 1; cursor >= 0; cursor--) {
|
|
553
|
-
const message = history[cursor];
|
|
554
|
-
if (message?.role !== 'assistant' || !message.toolCalls?.length) {
|
|
555
|
-
continue;
|
|
556
|
-
}
|
|
557
|
-
const match = message.toolCalls.find((call) => call.id === toolCallId);
|
|
558
|
-
if (match) {
|
|
559
|
-
return match;
|
|
560
|
-
}
|
|
561
|
-
}
|
|
562
|
-
return undefined;
|
|
563
|
-
}
|
|
564
|
-
function parseToolResultPayload(content) {
|
|
565
|
-
try {
|
|
566
|
-
const parsed = JSON.parse(content);
|
|
567
|
-
if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed) || typeof parsed.ok !== 'boolean') {
|
|
568
|
-
return undefined;
|
|
569
|
-
}
|
|
570
|
-
return parsed;
|
|
571
|
-
}
|
|
572
|
-
catch {
|
|
573
|
-
return undefined;
|
|
574
|
-
}
|
|
575
|
-
}
|
|
576
|
-
function parseEditFileResult(output) {
|
|
577
|
-
if (!output || typeof output !== 'object' || Array.isArray(output)) {
|
|
578
|
-
return undefined;
|
|
579
|
-
}
|
|
580
|
-
const candidate = output;
|
|
581
|
-
if (typeof candidate.path !== 'string' || typeof candidate.action !== 'string' || typeof candidate.bytesWritten !== 'number') {
|
|
582
|
-
return undefined;
|
|
583
|
-
}
|
|
584
|
-
const diff = candidate.diff && typeof candidate.diff === 'object' && !Array.isArray(candidate.diff) ?
|
|
585
|
-
parseEditDiff(candidate.diff)
|
|
586
|
-
: undefined;
|
|
587
|
-
return {
|
|
588
|
-
path: candidate.path,
|
|
589
|
-
action: candidate.action,
|
|
590
|
-
bytesWritten: candidate.bytesWritten,
|
|
591
|
-
matchCount: typeof candidate.matchCount === 'number' ? candidate.matchCount : undefined,
|
|
592
|
-
diff,
|
|
593
|
-
};
|
|
594
|
-
}
|
|
595
|
-
function parseEditDiff(value) {
|
|
596
|
-
if (!value || typeof value !== 'object' || Array.isArray(value)) {
|
|
597
|
-
return undefined;
|
|
598
|
-
}
|
|
599
|
-
const candidate = value;
|
|
600
|
-
if (typeof candidate.diff !== 'string' || typeof candidate.truncated !== 'boolean') {
|
|
601
|
-
return undefined;
|
|
602
|
-
}
|
|
603
|
-
return {
|
|
604
|
-
diff: candidate.diff,
|
|
605
|
-
truncated: candidate.truncated,
|
|
606
|
-
};
|
|
607
|
-
}
|
|
608
430
|
export function appendDirectShellHistory(history, shellDisplay, toolName, result) {
|
|
609
431
|
const summary = buildDirectShellHistorySummary(toolName, result);
|
|
610
432
|
const userMessage = { role: 'user', content: shellDisplay };
|