visionclaw 0.1.215-beta.9 → 0.1.215
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +16 -0
- package/README.md +2 -1
- package/dist/agent/activity-labels.d.ts +12 -21
- package/dist/agent/activity-labels.d.ts.map +1 -1
- package/dist/agent/activity-labels.js +12 -21
- package/dist/agent/activity-labels.js.map +1 -1
- package/dist/agent/activity-observer.d.ts +11 -33
- package/dist/agent/activity-observer.d.ts.map +1 -1
- package/dist/agent/activity-observer.js +63 -184
- package/dist/agent/activity-observer.js.map +1 -1
- package/dist/agent/activity-tracker.d.ts.map +1 -1
- package/dist/agent/activity-tracker.js +2 -1
- package/dist/agent/activity-tracker.js.map +1 -1
- package/dist/agent/backup-uploader.d.ts.map +1 -1
- package/dist/agent/backup-uploader.js +6 -1
- package/dist/agent/backup-uploader.js.map +1 -1
- package/dist/agent/backup.d.ts.map +1 -1
- package/dist/agent/backup.js +9 -2
- package/dist/agent/backup.js.map +1 -1
- package/dist/agent/command-handlers.d.ts.map +1 -1
- package/dist/agent/command-handlers.js +28 -37
- package/dist/agent/command-handlers.js.map +1 -1
- package/dist/agent/context.d.ts.map +1 -1
- package/dist/agent/context.js +6 -5
- package/dist/agent/context.js.map +1 -1
- package/dist/agent/engines/claude/session.d.ts +8 -0
- package/dist/agent/engines/claude/session.d.ts.map +1 -1
- package/dist/agent/engines/claude/session.js +30 -8
- package/dist/agent/engines/claude/session.js.map +1 -1
- package/dist/agent/engines/pi/tools.js +2 -1
- package/dist/agent/engines/pi/tools.js.map +1 -1
- package/dist/agent/engines/pi-coding/session.d.ts +13 -0
- package/dist/agent/engines/pi-coding/session.d.ts.map +1 -1
- package/dist/agent/engines/pi-coding/session.js +113 -11
- package/dist/agent/engines/pi-coding/session.js.map +1 -1
- package/dist/agent/engines/session-types.d.ts +7 -0
- package/dist/agent/engines/session-types.d.ts.map +1 -1
- package/dist/agent/external-context/providers/fund-league.d.ts +14 -0
- package/dist/agent/external-context/providers/fund-league.d.ts.map +1 -0
- package/dist/agent/external-context/providers/fund-league.js +21 -0
- package/dist/agent/external-context/providers/fund-league.js.map +1 -0
- package/dist/agent/external-context/registry.d.ts.map +1 -1
- package/dist/agent/external-context/registry.js +2 -0
- package/dist/agent/external-context/registry.js.map +1 -1
- package/dist/agent/fund-league/core-contract.d.ts +16 -0
- package/dist/agent/fund-league/core-contract.d.ts.map +1 -0
- package/dist/agent/fund-league/core-contract.js +41 -0
- package/dist/agent/fund-league/core-contract.js.map +1 -0
- package/dist/agent/fund-league-credential.d.ts +30 -0
- package/dist/agent/fund-league-credential.d.ts.map +1 -0
- package/dist/agent/fund-league-credential.js +126 -0
- package/dist/agent/fund-league-credential.js.map +1 -0
- package/dist/agent/heartbeat-manager.d.ts +12 -32
- package/dist/agent/heartbeat-manager.d.ts.map +1 -1
- package/dist/agent/heartbeat-manager.js +29 -70
- package/dist/agent/heartbeat-manager.js.map +1 -1
- package/dist/agent/interrupt-handler.d.ts +4 -0
- package/dist/agent/interrupt-handler.d.ts.map +1 -1
- package/dist/agent/interrupt-handler.js +10 -2
- package/dist/agent/interrupt-handler.js.map +1 -1
- package/dist/agent/lab-run-system-prompt.d.ts.map +1 -1
- package/dist/agent/lab-run-system-prompt.js +17 -6
- package/dist/agent/lab-run-system-prompt.js.map +1 -1
- package/dist/agent/loop.d.ts.map +1 -1
- package/dist/agent/loop.js +34 -28
- package/dist/agent/loop.js.map +1 -1
- package/dist/agent/model-provider.d.ts +1 -1
- package/dist/agent/model-provider.d.ts.map +1 -1
- package/dist/agent/model-provider.js +0 -1
- package/dist/agent/model-provider.js.map +1 -1
- package/dist/agent/onboarding-gate.d.ts.map +1 -1
- package/dist/agent/onboarding-gate.js +15 -5
- package/dist/agent/onboarding-gate.js.map +1 -1
- package/dist/agent/playwright-mcp-launch.d.ts +28 -0
- package/dist/agent/playwright-mcp-launch.d.ts.map +1 -0
- package/dist/agent/playwright-mcp-launch.js +56 -0
- package/dist/agent/playwright-mcp-launch.js.map +1 -0
- package/dist/agent/product-identity.d.ts +40 -0
- package/dist/agent/product-identity.d.ts.map +1 -0
- package/dist/agent/product-identity.js +59 -0
- package/dist/agent/product-identity.js.map +1 -0
- package/dist/agent/public-activity.d.ts +1 -1
- package/dist/agent/public-activity.d.ts.map +1 -1
- package/dist/agent/rdp-session-command.d.ts.map +1 -1
- package/dist/agent/rdp-session-command.js +4 -10
- package/dist/agent/rdp-session-command.js.map +1 -1
- package/dist/agent/reply-target.d.ts +1 -1
- package/dist/agent/reply-target.d.ts.map +1 -1
- package/dist/agent/reply-target.js +2 -0
- package/dist/agent/reply-target.js.map +1 -1
- package/dist/agent/runtime-credentials.d.ts.map +1 -1
- package/dist/agent/runtime-credentials.js +1 -13
- package/dist/agent/runtime-credentials.js.map +1 -1
- package/dist/agent/runtime-surface.d.ts +1 -1
- package/dist/agent/runtime-surface.d.ts.map +1 -1
- package/dist/agent/runtime-surface.js +35 -52
- package/dist/agent/runtime-surface.js.map +1 -1
- package/dist/agent/service-gate.d.ts +3 -4
- package/dist/agent/service-gate.d.ts.map +1 -1
- package/dist/agent/service-gate.js +5 -12
- package/dist/agent/service-gate.js.map +1 -1
- package/dist/agent/session-manager.d.ts +10 -0
- package/dist/agent/session-manager.d.ts.map +1 -1
- package/dist/agent/session-manager.js +43 -10
- package/dist/agent/session-manager.js.map +1 -1
- package/dist/agent/state.d.ts +7 -0
- package/dist/agent/state.d.ts.map +1 -1
- package/dist/agent/state.js +12 -0
- package/dist/agent/state.js.map +1 -1
- package/dist/agent/status.d.ts.map +1 -1
- package/dist/agent/status.js +4 -3
- package/dist/agent/status.js.map +1 -1
- package/dist/agent/stream-handler.d.ts +7 -1
- package/dist/agent/stream-handler.d.ts.map +1 -1
- package/dist/agent/stream-handler.js +54 -1
- package/dist/agent/stream-handler.js.map +1 -1
- package/dist/agent/system-prompt.d.ts.map +1 -1
- package/dist/agent/system-prompt.js +14 -14
- package/dist/agent/system-prompt.js.map +1 -1
- package/dist/agent/wake-cycle-runner.d.ts +1 -1
- package/dist/agent/wake-cycle-runner.d.ts.map +1 -1
- package/dist/agent/wake-cycle-runner.js +36 -14
- package/dist/agent/wake-cycle-runner.js.map +1 -1
- package/dist/billing/billing-handler.d.ts +16 -37
- package/dist/billing/billing-handler.d.ts.map +1 -1
- package/dist/billing/billing-handler.js +27 -135
- package/dist/billing/billing-handler.js.map +1 -1
- package/dist/billing/types.d.ts +4 -42
- package/dist/billing/types.d.ts.map +1 -1
- package/dist/billing/types.js +4 -12
- package/dist/billing/types.js.map +1 -1
- package/dist/builtin-skills/catalog/phone-adb-automation/SKILL.md +412 -0
- package/dist/builtin-skills/catalog/phone-adb-automation/phone_input.sh +132 -0
- package/dist/builtin-skills/catalog/phone-adb-automation/phone_launch.sh +166 -0
- package/dist/builtin-skills/catalog/phone-adb-automation/phone_screenshot.sh +87 -0
- package/dist/builtin-skills/catalog/phone-adb-automation/phone_security_kbd.py +174 -0
- package/dist/builtin-skills/catalog/phone-adb-automation/phone_setup.sh +274 -0
- package/dist/builtin-skills/catalog/phone-adb-automation/phone_swipe.sh +111 -0
- package/dist/builtin-skills/catalog/phone-adb-automation/phone_tap.sh +87 -0
- package/dist/builtin-skills/catalog/phone-adb-automation/phone_ui_parse.py +176 -0
- package/dist/builtin-skills/catalog/phone-adb-automation/phone_wake_unlock.sh +67 -0
- package/dist/builtin-skills/desktop-automation/SKILL.md +147 -0
- package/dist/builtin-skills/fund-manager/SKILL.md +15 -0
- package/dist/builtin-skills/fund-manager/core-contract.md +51 -0
- package/dist/builtin-skills/transcribe-audio/SKILL.md +122 -0
- package/dist/builtin-skills/visionclaw-manual/SKILL.md +337 -0
- package/dist/calendar/calendar-interrupt-poller.d.ts.map +1 -1
- package/dist/calendar/calendar-interrupt-poller.js +3 -0
- package/dist/calendar/calendar-interrupt-poller.js.map +1 -1
- package/dist/calendar/scheduler.d.ts.map +1 -1
- package/dist/calendar/scheduler.js +3 -0
- package/dist/calendar/scheduler.js.map +1 -1
- package/dist/channels/credential-backed.d.ts.map +1 -1
- package/dist/channels/credential-backed.js +17 -0
- package/dist/channels/credential-backed.js.map +1 -1
- package/dist/channels/finapp.d.ts +1 -1
- package/dist/channels/finapp.d.ts.map +1 -1
- package/dist/channels/finapp.js +8 -2
- package/dist/channels/finapp.js.map +1 -1
- package/dist/channels/fund-league.d.ts +56 -0
- package/dist/channels/fund-league.d.ts.map +1 -0
- package/dist/channels/fund-league.js +101 -0
- package/dist/channels/fund-league.js.map +1 -0
- package/dist/channels/interface.d.ts +9 -13
- package/dist/channels/interface.d.ts.map +1 -1
- package/dist/channels/interface.js +14 -5
- package/dist/channels/interface.js.map +1 -1
- package/dist/channels/internal-mail.d.ts.map +1 -1
- package/dist/channels/internal-mail.js +11 -1
- package/dist/channels/internal-mail.js.map +1 -1
- package/dist/channels/manager.d.ts +0 -14
- package/dist/channels/manager.d.ts.map +1 -1
- package/dist/channels/manager.js +14 -36
- package/dist/channels/manager.js.map +1 -1
- package/dist/channels/queue.d.ts +23 -1
- package/dist/channels/queue.d.ts.map +1 -1
- package/dist/channels/queue.js +36 -6
- package/dist/channels/queue.js.map +1 -1
- package/dist/channels/telegram-status.d.ts.map +1 -1
- package/dist/channels/telegram-status.js +3 -27
- package/dist/channels/telegram-status.js.map +1 -1
- package/dist/channels/telegram.d.ts +2 -22
- package/dist/channels/telegram.d.ts.map +1 -1
- package/dist/channels/telegram.js +15 -142
- package/dist/channels/telegram.js.map +1 -1
- package/dist/config/index.d.ts +9 -2
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +48 -29
- package/dist/config/index.js.map +1 -1
- package/dist/config/types.d.ts +3 -0
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/types.js +2 -0
- package/dist/config/types.js.map +1 -1
- package/dist/i18n/messages.d.ts +3 -51
- package/dist/i18n/messages.d.ts.map +1 -1
- package/dist/i18n/messages.js +11 -60
- package/dist/i18n/messages.js.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/obs/active-tunnel-url.d.ts +17 -0
- package/dist/obs/active-tunnel-url.d.ts.map +1 -0
- package/dist/obs/active-tunnel-url.js +32 -0
- package/dist/obs/active-tunnel-url.js.map +1 -0
- package/dist/obs/cloudflared-config.d.ts +6 -0
- package/dist/obs/cloudflared-config.d.ts.map +1 -1
- package/dist/obs/cloudflared-config.js +8 -0
- package/dist/obs/cloudflared-config.js.map +1 -1
- package/dist/obs/rdp/icons/icons/app_windows.svg +4 -0
- package/dist/obs/rdp/icons/icons/clip_get.svg +4 -0
- package/dist/obs/rdp/icons/icons/clip_send.svg +4 -0
- package/dist/obs/rdp/icons/icons/clip_shared.svg +4 -0
- package/dist/obs/rdp/icons/icons/clipboard.svg +4 -0
- package/dist/obs/rdp/icons/icons/clipboard_shared.svg +4 -0
- package/dist/obs/rdp/icons/icons/control.svg +4 -0
- package/dist/obs/rdp/icons/icons/desktop.svg +4 -0
- package/dist/obs/rdp/icons/icons/display.svg +4 -0
- package/dist/obs/rdp/icons/icons/launchpad.svg +4 -0
- package/dist/obs/rdp/icons/icons/mission_control.svg +4 -0
- package/dist/obs/rdp/icons/icons/screenshot.svg +4 -0
- package/dist/obs/rdp/icons/icons/zoom_actual.svg +4 -0
- package/dist/obs/rdp/icons/icons/zoom_fit.svg +4 -0
- package/dist/obs/rdp/icons/icons/zoom_in.svg +4 -0
- package/dist/obs/rdp/icons/icons/zoom_out.svg +4 -0
- package/dist/obs/server.d.ts.map +1 -1
- package/dist/obs/server.js +21 -22
- package/dist/obs/server.js.map +1 -1
- package/dist/obs/tunnel.d.ts +1 -0
- package/dist/obs/tunnel.d.ts.map +1 -1
- package/dist/obs/tunnel.js +18 -10
- package/dist/obs/tunnel.js.map +1 -1
- package/dist/onboarding/finalize-channel-binding.d.ts +11 -0
- package/dist/onboarding/finalize-channel-binding.d.ts.map +1 -1
- package/dist/onboarding/finalize-channel-binding.js +36 -0
- package/dist/onboarding/finalize-channel-binding.js.map +1 -1
- package/dist/onboarding/onboarding-service-client.d.ts +17 -30
- package/dist/onboarding/onboarding-service-client.d.ts.map +1 -1
- package/dist/onboarding/onboarding-service-client.js +0 -80
- package/dist/onboarding/onboarding-service-client.js.map +1 -1
- package/dist/onboarding/send-invite.d.ts +1 -1
- package/dist/onboarding/send-invite.d.ts.map +1 -1
- package/dist/onboarding/send-invite.js +14 -20
- package/dist/onboarding/send-invite.js.map +1 -1
- package/dist/onboarding/setup-shared.d.ts.map +1 -1
- package/dist/onboarding/setup-shared.js +6 -12
- package/dist/onboarding/setup-shared.js.map +1 -1
- package/dist/onboarding/setup-steps.d.ts.map +1 -1
- package/dist/onboarding/setup-steps.js +15 -3
- package/dist/onboarding/setup-steps.js.map +1 -1
- package/dist/realtime/assets/index.html +1058 -0
- package/dist/realtime/assets/samples/alloy.mp3 +0 -0
- package/dist/realtime/assets/samples/ash.mp3 +0 -0
- package/dist/realtime/assets/samples/ballad.mp3 +0 -0
- package/dist/realtime/assets/samples/cedar.mp3 +0 -0
- package/dist/realtime/assets/samples/coral.mp3 +0 -0
- package/dist/realtime/assets/samples/echo.mp3 +0 -0
- package/dist/realtime/assets/samples/marin.mp3 +0 -0
- package/dist/realtime/assets/samples/sage.mp3 +0 -0
- package/dist/realtime/assets/samples/shimmer.mp3 +0 -0
- package/dist/realtime/assets/samples/verse.mp3 +0 -0
- package/dist/reset.d.ts.map +1 -1
- package/dist/reset.js +64 -0
- package/dist/reset.js.map +1 -1
- package/dist/serpapi/index.d.ts +1 -0
- package/dist/serpapi/index.d.ts.map +1 -1
- package/dist/serpapi/index.js +1 -0
- package/dist/serpapi/index.js.map +1 -1
- package/dist/serpapi/mcp-url.d.ts +29 -0
- package/dist/serpapi/mcp-url.d.ts.map +1 -0
- package/dist/serpapi/mcp-url.js +37 -0
- package/dist/serpapi/mcp-url.js.map +1 -0
- package/dist/shared/public-activity-label.d.ts +6 -3
- package/dist/shared/public-activity-label.d.ts.map +1 -1
- package/dist/shared/public-activity-label.js +12 -4
- package/dist/shared/public-activity-label.js.map +1 -1
- package/dist/skills/install.d.ts.map +1 -1
- package/dist/skills/install.js +50 -3
- package/dist/skills/install.js.map +1 -1
- package/dist/threads/lab-run-runtime.js +1 -1
- package/dist/threads/lab-run-runtime.js.map +1 -1
- package/dist/threads/lab-runtime-policy.d.ts +2 -1
- package/dist/threads/lab-runtime-policy.d.ts.map +1 -1
- package/dist/threads/lab-runtime-policy.js +11 -2
- package/dist/threads/lab-runtime-policy.js.map +1 -1
- package/dist/threads/thread-activity-controller.d.ts +3 -4
- package/dist/threads/thread-activity-controller.d.ts.map +1 -1
- package/dist/threads/thread-activity-controller.js +20 -41
- package/dist/threads/thread-activity-controller.js.map +1 -1
- package/dist/tools/calendar.d.ts +3 -0
- package/dist/tools/calendar.d.ts.map +1 -1
- package/dist/tools/calendar.js +55 -8
- package/dist/tools/calendar.js.map +1 -1
- package/dist/tools/drive.d.ts +5 -0
- package/dist/tools/drive.d.ts.map +1 -1
- package/dist/tools/drive.js +134 -12
- package/dist/tools/drive.js.map +1 -1
- package/dist/tools/email.d.ts +5 -0
- package/dist/tools/email.d.ts.map +1 -1
- package/dist/tools/email.js +23 -1
- package/dist/tools/email.js.map +1 -1
- package/dist/tools/index.js +1 -1
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/remote-desktop.d.ts.map +1 -1
- package/dist/tools/remote-desktop.js +8 -15
- package/dist/tools/remote-desktop.js.map +1 -1
- package/dist/tools/skill.d.ts +1 -1
- package/dist/tools/web-fetch.d.ts.map +1 -1
- package/dist/tools/web-fetch.js +71 -15
- package/dist/tools/web-fetch.js.map +1 -1
- package/dist/tui/server.d.ts.map +1 -1
- package/dist/tui/server.js +3 -4
- package/dist/tui/server.js.map +1 -1
- package/dist/workspace/google/google-calendar.d.ts.map +1 -1
- package/dist/workspace/google/google-calendar.js +4 -1
- package/dist/workspace/google/google-calendar.js.map +1 -1
- package/dist/workspace/google/google-drive.d.ts +10 -1
- package/dist/workspace/google/google-drive.d.ts.map +1 -1
- package/dist/workspace/google/google-drive.js +66 -0
- package/dist/workspace/google/google-drive.js.map +1 -1
- package/dist/workspace/internal/internal-calendar.d.ts +27 -0
- package/dist/workspace/internal/internal-calendar.d.ts.map +1 -0
- package/dist/workspace/internal/internal-calendar.js +177 -0
- package/dist/workspace/internal/internal-calendar.js.map +1 -0
- package/dist/workspace/internal/internal-drive.d.ts +12 -1
- package/dist/workspace/internal/internal-drive.d.ts.map +1 -1
- package/dist/workspace/internal/internal-drive.js +45 -10
- package/dist/workspace/internal/internal-drive.js.map +1 -1
- package/dist/workspace/internal/internal-email.d.ts +5 -1
- package/dist/workspace/internal/internal-email.d.ts.map +1 -1
- package/dist/workspace/internal/internal-email.js +9 -0
- package/dist/workspace/internal/internal-email.js.map +1 -1
- package/dist/workspace/provider-factory.d.ts.map +1 -1
- package/dist/workspace/provider-factory.js +11 -13
- package/dist/workspace/provider-factory.js.map +1 -1
- package/dist/workspace/types.d.ts +44 -0
- package/dist/workspace/types.d.ts.map +1 -1
- package/dist/workspace/zoho/zoho-calendar.d.ts.map +1 -1
- package/dist/workspace/zoho/zoho-calendar.js +7 -0
- package/dist/workspace/zoho/zoho-calendar.js.map +1 -1
- package/dist/workspace/zoho/zoho-workdrive.d.ts +8 -0
- package/dist/workspace/zoho/zoho-workdrive.d.ts.map +1 -1
- package/dist/workspace/zoho/zoho-workdrive.js +48 -0
- package/dist/workspace/zoho/zoho-workdrive.js.map +1 -1
- package/dist-agent/assets/index.html +1058 -0
- package/dist-agent/assets/samples/alloy.mp3 +0 -0
- package/dist-agent/assets/samples/ash.mp3 +0 -0
- package/dist-agent/assets/samples/ballad.mp3 +0 -0
- package/dist-agent/assets/samples/cedar.mp3 +0 -0
- package/dist-agent/assets/samples/coral.mp3 +0 -0
- package/dist-agent/assets/samples/echo.mp3 +0 -0
- package/dist-agent/assets/samples/marin.mp3 +0 -0
- package/dist-agent/assets/samples/sage.mp3 +0 -0
- package/dist-agent/assets/samples/shimmer.mp3 +0 -0
- package/dist-agent/assets/samples/verse.mp3 +0 -0
- package/dist-agent/bundle.cjs +2 -2
- package/dist-agent/realtime/assets/index.html +1058 -0
- package/dist-agent/realtime/assets/samples/alloy.mp3 +0 -0
- package/dist-agent/realtime/assets/samples/ash.mp3 +0 -0
- package/dist-agent/realtime/assets/samples/ballad.mp3 +0 -0
- package/dist-agent/realtime/assets/samples/cedar.mp3 +0 -0
- package/dist-agent/realtime/assets/samples/coral.mp3 +0 -0
- package/dist-agent/realtime/assets/samples/echo.mp3 +0 -0
- package/dist-agent/realtime/assets/samples/marin.mp3 +0 -0
- package/dist-agent/realtime/assets/samples/sage.mp3 +0 -0
- package/dist-agent/realtime/assets/samples/shimmer.mp3 +0 -0
- package/dist-agent/realtime/assets/samples/verse.mp3 +0 -0
- package/package.json +1 -1
- package/dist/agent/fund-league-wake.d.ts +0 -3
- package/dist/agent/fund-league-wake.d.ts.map +0 -1
- package/dist/agent/fund-league-wake.js +0 -107
- package/dist/agent/fund-league-wake.js.map +0 -1
- package/dist/agent/subscription-gate.d.ts +0 -22
- package/dist/agent/subscription-gate.d.ts.map +0 -1
- package/dist/agent/subscription-gate.js +0 -107
- package/dist/agent/subscription-gate.js.map +0 -1
- package/dist/agent/usage/usage-gate.d.ts +0 -25
- package/dist/agent/usage/usage-gate.d.ts.map +0 -1
- package/dist/agent/usage/usage-gate.js +0 -121
- package/dist/agent/usage/usage-gate.js.map +0 -1
- package/dist/workspace/internal-calendar.d.ts +0 -32
- package/dist/workspace/internal-calendar.d.ts.map +0 -1
- package/dist/workspace/internal-calendar.js +0 -335
- package/dist/workspace/internal-calendar.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,19 @@
|
|
|
1
|
+
## [0.1.215](https://github.com/babelcloud/visionclaw/compare/v0.1.214...v0.1.215) (2026-09-21)
|
|
2
|
+
|
|
3
|
+
### Bug Fixes
|
|
4
|
+
|
|
5
|
+
* **queue:** treat in-flight Telegram redelivery as already handled (#2500) ([9d5470a](https://github.com/babelcloud/visionclaw/commit/9d5470a7b020f1962bb1c5ee39e4399ad7c9cd2c))
|
|
6
|
+
* **web-fetch:** skip unreadable Jina bodies and fall back to direct fetch ([6622849](https://github.com/babelcloud/visionclaw/commit/662284951b6b5fb135e95e75310fae3c0378e93f))
|
|
7
|
+
* **activity:** use latest assistant text on the progress card (#2452) ([8fd18b7](https://github.com/babelcloud/visionclaw/commit/8fd18b7964425d2abc06b76af50515b356ba98cc))
|
|
8
|
+
* **obs:** keep the tunnel URL across AgentState init so remote desktop works ([cdfafc6](https://github.com/babelcloud/visionclaw/commit/cdfafc691639227baa17b99b21c105cd3446a6b7))
|
|
9
|
+
* **agent:** compact once after invalid prompt refusal (#2424) ([a9c2175](https://github.com/babelcloud/visionclaw/commit/a9c21753ae3fddfa97526a0ae5a4aeb1c5a53a4b))
|
|
10
|
+
* **agent:** click permission dialogs yourself; rename macos-automation (#2434) ([295d664](https://github.com/babelcloud/visionclaw/commit/295d664ec614b238a2b6ee332169544a69411068))
|
|
11
|
+
* **agent:** reap Playwright MCP children instead of leaving npx orphans (#2366) ([8bad027](https://github.com/babelcloud/visionclaw/commit/8bad02714385a44d32ef3e4b2e0bcfb7fd5f4791))
|
|
12
|
+
* **obs:** start named tunnel from runtime credential, not cert.pem (#2348) ([5e6abec](https://github.com/babelcloud/visionclaw/commit/5e6abec982e2dba0a6b05a179c4d1049ea5a1521))
|
|
13
|
+
|
|
14
|
+
### Features
|
|
15
|
+
* **financial-tool:** compute HK option greeks locally from HKEX reported IV (#2356) ([01d4e77](https://github.com/babelcloud/visionclaw/commit/01d4e77764541a17ee7eea6895ab8f2cd56b956b))
|
|
16
|
+
|
|
1
17
|
## [0.1.214](https://github.com/babelcloud/visionclaw/compare/v0.1.213...v0.1.214) (2026-09-14)
|
|
2
18
|
|
|
3
19
|
### Bug Fixes
|
package/README.md
CHANGED
|
@@ -51,7 +51,7 @@ For the first local run, use two terminals:
|
|
|
51
51
|
# Terminal 1: local onboarding service, database, and tunnel
|
|
52
52
|
make start-onboarding
|
|
53
53
|
|
|
54
|
-
# Optional: Internal
|
|
54
|
+
# Optional: Internal Workspace (mail + in-memory files/calendar) for workspace_provider=internal
|
|
55
55
|
make start-ws
|
|
56
56
|
|
|
57
57
|
# Terminal 2: agent (PROFILE=dev by default)
|
|
@@ -60,6 +60,7 @@ make start
|
|
|
60
60
|
# Optional: Internal Mail integration tests (not SES / public MX)
|
|
61
61
|
make -C services/basic-workspace it
|
|
62
62
|
# First `make start PROFILE=internal-mail` seeds that profile automatically.
|
|
63
|
+
# `make start PROFILE=prod-internal` claims a production Internal occupancy.
|
|
63
64
|
# Docker smoke uses 13470/18787 and skips when Docker is missing.
|
|
64
65
|
```
|
|
65
66
|
|
|
@@ -1,32 +1,23 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* The labels that are not a name for the work.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
* lifecycle states ("Queued", "Idle"), and system notices
|
|
6
|
-
* summaries paused")
|
|
7
|
-
*
|
|
4
|
+
* Display filter over labels that may arrive on the wire — phase boilerplate
|
|
5
|
+
* ("Processing"), lifecycle states ("Queued", "Idle"), and system notices
|
|
6
|
+
* ("Activity summaries paused"). They say nothing about *this* task, so
|
|
7
|
+
* Telegram and Fin Mobile skip them when falling back through `currentStep`
|
|
8
|
+
* to the activity history.
|
|
8
9
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
* to the activity history.
|
|
10
|
+
* This build no longer emits the exhaustion notice (sidecar is gone), but
|
|
11
|
+
* older fleet agents (beta.10–15) still do, and THREAD_ACTIVITY_RETENTION_MS
|
|
12
|
+
* keeps those snapshots for 30 days. The set is therefore a filter over
|
|
13
|
+
* inbound labels, not a declaration of what this build emits.
|
|
14
14
|
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
* of the work. Keep this the only copy inside `src/`; `services/fin-mobile`
|
|
18
|
-
* is a separate Expo app that cannot import from here, so its copy in
|
|
15
|
+
* Keep this the only copy inside `src/`; `services/fin-mobile` is a separate
|
|
16
|
+
* Expo app that cannot import from here, so its copy in
|
|
19
17
|
* `src/conversation/activity.ts` is locked to this one by
|
|
20
18
|
* `scripts/test-activity-generic-labels-parity.mjs`.
|
|
21
19
|
*
|
|
22
|
-
* Matching is exact: these are fixed strings
|
|
20
|
+
* Matching is exact: these are fixed strings, not prose.
|
|
23
21
|
*/
|
|
24
22
|
export declare const GENERIC_ACTIVITY_LABELS: ReadonlySet<string>;
|
|
25
|
-
/**
|
|
26
|
-
* Emitted by the activity observer when the semantic-summary side channel
|
|
27
|
-
* hits its per-run call cap. Defined here (rather than in the observer) so
|
|
28
|
-
* the generic-label set above can carry it as a plain string literal that
|
|
29
|
-
* the parity script can read.
|
|
30
|
-
*/
|
|
31
|
-
export declare const ACTIVITY_OBSERVER_EXHAUSTED_LABEL = "Activity summaries paused";
|
|
32
23
|
//# sourceMappingURL=activity-labels.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"activity-labels.d.ts","sourceRoot":"","sources":["../../src/agent/activity-labels.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"activity-labels.d.ts","sourceRoot":"","sources":["../../src/agent/activity-labels.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,uBAAuB,EAAE,WAAW,CAAC,MAAM,CAWtD,CAAC"}
|
|
@@ -1,25 +1,23 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* The labels that are not a name for the work.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
* lifecycle states ("Queued", "Idle"), and system notices
|
|
6
|
-
* summaries paused")
|
|
7
|
-
*
|
|
4
|
+
* Display filter over labels that may arrive on the wire — phase boilerplate
|
|
5
|
+
* ("Processing"), lifecycle states ("Queued", "Idle"), and system notices
|
|
6
|
+
* ("Activity summaries paused"). They say nothing about *this* task, so
|
|
7
|
+
* Telegram and Fin Mobile skip them when falling back through `currentStep`
|
|
8
|
+
* to the activity history.
|
|
8
9
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
* to the activity history.
|
|
10
|
+
* This build no longer emits the exhaustion notice (sidecar is gone), but
|
|
11
|
+
* older fleet agents (beta.10–15) still do, and THREAD_ACTIVITY_RETENTION_MS
|
|
12
|
+
* keeps those snapshots for 30 days. The set is therefore a filter over
|
|
13
|
+
* inbound labels, not a declaration of what this build emits.
|
|
14
14
|
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
* of the work. Keep this the only copy inside `src/`; `services/fin-mobile`
|
|
18
|
-
* is a separate Expo app that cannot import from here, so its copy in
|
|
15
|
+
* Keep this the only copy inside `src/`; `services/fin-mobile` is a separate
|
|
16
|
+
* Expo app that cannot import from here, so its copy in
|
|
19
17
|
* `src/conversation/activity.ts` is locked to this one by
|
|
20
18
|
* `scripts/test-activity-generic-labels-parity.mjs`.
|
|
21
19
|
*
|
|
22
|
-
* Matching is exact: these are fixed strings
|
|
20
|
+
* Matching is exact: these are fixed strings, not prose.
|
|
23
21
|
*/
|
|
24
22
|
export const GENERIC_ACTIVITY_LABELS = new Set([
|
|
25
23
|
"Processing",
|
|
@@ -33,11 +31,4 @@ export const GENERIC_ACTIVITY_LABELS = new Set([
|
|
|
33
31
|
"Idle",
|
|
34
32
|
"Activity summaries paused",
|
|
35
33
|
]);
|
|
36
|
-
/**
|
|
37
|
-
* Emitted by the activity observer when the semantic-summary side channel
|
|
38
|
-
* hits its per-run call cap. Defined here (rather than in the observer) so
|
|
39
|
-
* the generic-label set above can carry it as a plain string literal that
|
|
40
|
-
* the parity script can read.
|
|
41
|
-
*/
|
|
42
|
-
export const ACTIVITY_OBSERVER_EXHAUSTED_LABEL = "Activity summaries paused";
|
|
43
34
|
//# sourceMappingURL=activity-labels.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"activity-labels.js","sourceRoot":"","sources":["../../src/agent/activity-labels.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"activity-labels.js","sourceRoot":"","sources":["../../src/agent/activity-labels.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAwB,IAAI,GAAG,CAAC;IAClE,YAAY;IACZ,iBAAiB;IACjB,sBAAsB;IACtB,wBAAwB;IACxB,WAAW;IACX,aAAa;IACb,iBAAiB;IACjB,QAAQ;IACR,MAAM;IACN,2BAA2B;CAC5B,CAAC,CAAC"}
|
|
@@ -1,16 +1,4 @@
|
|
|
1
|
-
import { z } from "zod";
|
|
2
1
|
import type { VisionClawConfig } from "../config/types.js";
|
|
3
|
-
import { ACTIVITY_OBSERVER_EXHAUSTED_LABEL } from "./activity-labels.js";
|
|
4
|
-
export declare const MAX_ACTIVITY_OBSERVER_CALLS_PER_RUN = 60;
|
|
5
|
-
export { ACTIVITY_OBSERVER_EXHAUSTED_LABEL };
|
|
6
|
-
export declare const ActivityProjectionSchema: z.ZodObject<{
|
|
7
|
-
decision: z.ZodEnum<{
|
|
8
|
-
update: "update";
|
|
9
|
-
same: "same";
|
|
10
|
-
no_progress: "no_progress";
|
|
11
|
-
}>;
|
|
12
|
-
label: z.ZodNullable<z.ZodString>;
|
|
13
|
-
}, z.core.$strict>;
|
|
14
2
|
export type ActivityProjectionDecision = {
|
|
15
3
|
decision: "update";
|
|
16
4
|
label: string;
|
|
@@ -19,7 +7,7 @@ export type ActivityProjectionDecision = {
|
|
|
19
7
|
} | {
|
|
20
8
|
decision: "no_progress";
|
|
21
9
|
};
|
|
22
|
-
export type ActivityObserverLabelSource = "semantic" | "fallback"
|
|
10
|
+
export type ActivityObserverLabelSource = "semantic" | "fallback";
|
|
23
11
|
export type ActivityObserverEvent = {
|
|
24
12
|
kind: "task";
|
|
25
13
|
text: string;
|
|
@@ -41,31 +29,24 @@ export type ActivityObserverEvent = {
|
|
|
41
29
|
export interface ActivityObserverDeps {
|
|
42
30
|
config: VisionClawConfig;
|
|
43
31
|
onLabel: (label: string, runToken: number, source: ActivityObserverLabelSource) => void;
|
|
44
|
-
project?: (config: VisionClawConfig, context: string,
|
|
32
|
+
project?: (config: VisionClawConfig, context: string, currentLabel: string | undefined) => ActivityProjectionDecision;
|
|
45
33
|
getCurrentLabel?: () => string | undefined;
|
|
46
34
|
debounceMs?: number;
|
|
47
|
-
timeoutMs?: number;
|
|
48
35
|
}
|
|
49
36
|
/**
|
|
50
|
-
*
|
|
51
|
-
*
|
|
37
|
+
* Debounced activity observer. The primary agent only appends a bounded local
|
|
38
|
+
* event and returns; projection (latest assistant text, else no_progress) runs
|
|
39
|
+
* after debounce so Telegram can coalesce in-place card edits.
|
|
52
40
|
*/
|
|
53
41
|
export declare class ActivityObserver {
|
|
54
42
|
private readonly deps;
|
|
55
43
|
private readonly contextByKind;
|
|
56
44
|
private readonly deterministicLabels;
|
|
57
45
|
private readonly debounceMs;
|
|
58
|
-
private readonly timeoutMs;
|
|
59
46
|
private timer;
|
|
60
|
-
private controller;
|
|
61
|
-
private timedOutController;
|
|
62
47
|
private runToken;
|
|
63
|
-
private generation;
|
|
64
|
-
private running;
|
|
65
48
|
private dirty;
|
|
66
49
|
private stopped;
|
|
67
|
-
private callsStarted;
|
|
68
|
-
private exhaustedPublished;
|
|
69
50
|
private semanticPublished;
|
|
70
51
|
private lastLabel;
|
|
71
52
|
constructor(deps: ActivityObserverDeps);
|
|
@@ -75,19 +56,16 @@ export declare class ActivityObserver {
|
|
|
75
56
|
stop(): void;
|
|
76
57
|
private schedule;
|
|
77
58
|
private runProjection;
|
|
78
|
-
private publishExhaustedOnce;
|
|
79
59
|
private contextParts;
|
|
80
60
|
private clearContext;
|
|
81
61
|
private cancelCurrentWork;
|
|
82
62
|
}
|
|
63
|
+
/** Bound local event text before it can become a public activity label. */
|
|
64
|
+
export declare function boundObserverInput(value: unknown): string | undefined;
|
|
83
65
|
/**
|
|
84
|
-
*
|
|
85
|
-
*
|
|
86
|
-
*
|
|
87
|
-
* 31 minutes; real model latency extends that further.
|
|
66
|
+
* Project the latest assistant aside into the progress-card label.
|
|
67
|
+
* No sidecar LLM: consecutive identical asides are `same`; missing asides are
|
|
68
|
+
* `no_progress` so the observer can fall back to the last tool category.
|
|
88
69
|
*/
|
|
89
|
-
export declare function
|
|
90
|
-
/** Bound local event text before it can enter a side-call prompt. */
|
|
91
|
-
export declare function boundObserverInput(value: unknown): string | undefined;
|
|
92
|
-
export declare function projectSemanticActivity(config: VisionClawConfig, context: string, signal: AbortSignal, timeoutMs?: number, currentLabel?: string): Promise<ActivityProjectionDecision>;
|
|
70
|
+
export declare function projectSemanticActivity(_config: VisionClawConfig, context: string, currentLabel?: string): ActivityProjectionDecision;
|
|
93
71
|
//# sourceMappingURL=activity-observer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"activity-observer.d.ts","sourceRoot":"","sources":["../../src/agent/activity-observer.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"activity-observer.d.ts","sourceRoot":"","sources":["../../src/agent/activity-observer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAS3D,MAAM,MAAM,0BAA0B,GAClC;IAAE,QAAQ,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACrC;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,GACpB;IAAE,QAAQ,EAAE,aAAa,CAAA;CAAE,CAAC;AAChC,MAAM,MAAM,2BAA2B,GAAG,UAAU,GAAG,UAAU,CAAC;AAElE,MAAM,MAAM,qBAAqB,GAC7B;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACnC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC;AAEpE,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,gBAAgB,CAAC;IACzB,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,2BAA2B,KAAK,IAAI,CAAC;IACxF,OAAO,CAAC,EAAE,CACR,MAAM,EAAE,gBAAgB,EACxB,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,GAAG,SAAS,KAC7B,0BAA0B,CAAC;IAChC,eAAe,CAAC,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;IAC3C,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;GAIG;AACH,qBAAa,gBAAgB;IAiBf,OAAO,CAAC,QAAQ,CAAC,IAAI;IAhBjC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAM5B;IACF,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAgB;IACpD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,KAAK,CAA+B;IAC5C,OAAO,CAAC,QAAQ,CAAK;IACrB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,iBAAiB,CAAS;IAClC,OAAO,CAAC,SAAS,CAAM;gBAEM,IAAI,EAAE,oBAAoB;IAIvD,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM;IAatC,OAAO,CAAC,KAAK,EAAE,qBAAqB,GAAG,IAAI;IAkB3C,SAAS,IAAI,IAAI;IAUjB,IAAI,IAAI,IAAI;IAKZ,OAAO,CAAC,QAAQ;IAShB,OAAO,CAAC,aAAa;IAmDrB,OAAO,CAAC,YAAY;IAWpB,OAAO,CAAC,YAAY;IAIpB,OAAO,CAAC,iBAAiB;CAI1B;AAwBD,2EAA2E;AAC3E,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAKrE;AAID;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,gBAAgB,EACzB,OAAO,EAAE,MAAM,EACf,YAAY,CAAC,EAAE,MAAM,GACpB,0BAA0B,CAa5B"}
|
|
@@ -1,36 +1,13 @@
|
|
|
1
|
-
import { z } from "zod";
|
|
2
1
|
import { logger } from "../logger.js";
|
|
3
|
-
import { runSideCall } from "./model-provider.js";
|
|
4
2
|
import { redactPublicToolInput } from "./public-activity.js";
|
|
5
3
|
import { sanitizePublicActivityLabel } from "../shared/public-activity-label.js";
|
|
6
|
-
|
|
7
|
-
const OBSERVER_INITIAL_DELAY_MS = 1_000;
|
|
8
|
-
const OBSERVER_FOLLOW_UP_DELAY_MS = 5_000;
|
|
9
|
-
const OBSERVER_DELAY_STEP_MS = 5_000;
|
|
10
|
-
const OBSERVER_DELAY_STEP_CALLS = 5;
|
|
11
|
-
const OBSERVER_MAX_DELAY_MS = 60_000;
|
|
12
|
-
const OBSERVER_TIMEOUT_MS = 5_000;
|
|
4
|
+
const OBSERVER_DEBOUNCE_MS = 1_000;
|
|
13
5
|
const MAX_CONTEXT_PARTS = 12;
|
|
14
6
|
const MAX_CONTEXT_PART_LENGTH = 1_200;
|
|
15
|
-
export const MAX_ACTIVITY_OBSERVER_CALLS_PER_RUN = 60;
|
|
16
|
-
export { ACTIVITY_OBSERVER_EXHAUSTED_LABEL };
|
|
17
|
-
// OpenAI's native schema converter requires a root object, so the wire schema
|
|
18
|
-
// uses a nullable label instead of a top-level discriminated union. The refine
|
|
19
|
-
// keeps the same exact decision contract at runtime.
|
|
20
|
-
export const ActivityProjectionSchema = z.object({
|
|
21
|
-
decision: z.enum(["update", "same", "no_progress"]),
|
|
22
|
-
label: z.string().min(1).max(120).nullable().describe("A business-phase label only for update; null for same or no_progress."),
|
|
23
|
-
}).strict().superRefine((value, context) => {
|
|
24
|
-
if (value.decision === "update" && value.label === null) {
|
|
25
|
-
context.addIssue({ code: "custom", path: ["label"], message: "update requires a label" });
|
|
26
|
-
}
|
|
27
|
-
if (value.decision !== "update" && value.label !== null) {
|
|
28
|
-
context.addIssue({ code: "custom", path: ["label"], message: `${value.decision} requires a null label` });
|
|
29
|
-
}
|
|
30
|
-
});
|
|
31
7
|
/**
|
|
32
|
-
*
|
|
33
|
-
*
|
|
8
|
+
* Debounced activity observer. The primary agent only appends a bounded local
|
|
9
|
+
* event and returns; projection (latest assistant text, else no_progress) runs
|
|
10
|
+
* after debounce so Telegram can coalesce in-place card edits.
|
|
34
11
|
*/
|
|
35
12
|
export class ActivityObserver {
|
|
36
13
|
deps;
|
|
@@ -43,23 +20,15 @@ export class ActivityObserver {
|
|
|
43
20
|
};
|
|
44
21
|
deterministicLabels = [];
|
|
45
22
|
debounceMs;
|
|
46
|
-
timeoutMs;
|
|
47
23
|
timer = null;
|
|
48
|
-
controller = null;
|
|
49
|
-
timedOutController = null;
|
|
50
24
|
runToken = 0;
|
|
51
|
-
generation = 0;
|
|
52
|
-
running = false;
|
|
53
25
|
dirty = false;
|
|
54
26
|
stopped = false;
|
|
55
|
-
callsStarted = 0;
|
|
56
|
-
exhaustedPublished = false;
|
|
57
27
|
semanticPublished = false;
|
|
58
28
|
lastLabel = "";
|
|
59
29
|
constructor(deps) {
|
|
60
30
|
this.deps = deps;
|
|
61
|
-
this.debounceMs = deps.debounceMs;
|
|
62
|
-
this.timeoutMs = deps.timeoutMs ?? OBSERVER_TIMEOUT_MS;
|
|
31
|
+
this.debounceMs = deps.debounceMs ?? OBSERVER_DEBOUNCE_MS;
|
|
63
32
|
}
|
|
64
33
|
startRun(initialTask) {
|
|
65
34
|
this.cancelCurrentWork();
|
|
@@ -69,8 +38,6 @@ export class ActivityObserver {
|
|
|
69
38
|
this.deterministicLabels.length = 0;
|
|
70
39
|
this.lastLabel = "";
|
|
71
40
|
this.dirty = false;
|
|
72
|
-
this.callsStarted = 0;
|
|
73
|
-
this.exhaustedPublished = false;
|
|
74
41
|
this.semanticPublished = false;
|
|
75
42
|
if (initialTask)
|
|
76
43
|
this.observe({ kind: "task", text: initialTask });
|
|
@@ -95,14 +62,6 @@ export class ActivityObserver {
|
|
|
95
62
|
this.deterministicLabels.shift();
|
|
96
63
|
}
|
|
97
64
|
this.dirty = true;
|
|
98
|
-
if (this.callsStarted >= MAX_ACTIVITY_OBSERVER_CALLS_PER_RUN) {
|
|
99
|
-
// Let the final in-flight call settle before announcing that semantic
|
|
100
|
-
// summaries have paused, so its late result cannot overwrite the notice.
|
|
101
|
-
if (!this.running)
|
|
102
|
-
this.publishExhaustedOnce();
|
|
103
|
-
this.dirty = false;
|
|
104
|
-
return;
|
|
105
|
-
}
|
|
106
65
|
this.schedule();
|
|
107
66
|
}
|
|
108
67
|
finishRun() {
|
|
@@ -111,8 +70,6 @@ export class ActivityObserver {
|
|
|
111
70
|
this.deterministicLabels.length = 0;
|
|
112
71
|
this.lastLabel = "";
|
|
113
72
|
this.dirty = false;
|
|
114
|
-
this.callsStarted = 0;
|
|
115
|
-
this.exhaustedPublished = false;
|
|
116
73
|
this.semanticPublished = false;
|
|
117
74
|
this.cancelCurrentWork();
|
|
118
75
|
}
|
|
@@ -121,108 +78,65 @@ export class ActivityObserver {
|
|
|
121
78
|
this.finishRun();
|
|
122
79
|
}
|
|
123
80
|
schedule() {
|
|
124
|
-
if (this.
|
|
81
|
+
if (this.timer)
|
|
125
82
|
return;
|
|
126
83
|
this.timer = setTimeout(() => {
|
|
127
84
|
this.timer = null;
|
|
128
|
-
|
|
129
|
-
}, this.debounceMs
|
|
85
|
+
this.runProjection();
|
|
86
|
+
}, this.debounceMs);
|
|
130
87
|
this.timer.unref();
|
|
131
88
|
}
|
|
132
|
-
|
|
133
|
-
if (this.stopped
|
|
134
|
-
|| this.running
|
|
135
|
-
|| !this.dirty
|
|
136
|
-
|| this.runToken === 0
|
|
137
|
-
|| this.callsStarted >= MAX_ACTIVITY_OBSERVER_CALLS_PER_RUN)
|
|
89
|
+
runProjection() {
|
|
90
|
+
if (this.stopped || !this.dirty || this.runToken === 0)
|
|
138
91
|
return;
|
|
139
|
-
this.running = true;
|
|
140
|
-
this.callsStarted += 1;
|
|
141
92
|
this.dirty = false;
|
|
142
93
|
const token = this.runToken;
|
|
143
|
-
const generation = ++this.generation;
|
|
144
94
|
const context = this.contextParts().join("\n");
|
|
145
95
|
const deterministicLabel = this.deterministicLabels.at(-1);
|
|
146
96
|
const currentLabel = this.deps.getCurrentLabel?.() ?? (this.lastLabel || undefined);
|
|
147
|
-
const controller = new AbortController();
|
|
148
|
-
this.controller = controller;
|
|
149
|
-
let rejectTimeout;
|
|
150
|
-
const timeoutPromise = new Promise((_resolve, reject) => { rejectTimeout = reject; });
|
|
151
|
-
const timeout = setTimeout(() => {
|
|
152
|
-
this.timedOutController = controller;
|
|
153
|
-
controller.abort();
|
|
154
|
-
rejectTimeout(new Error("activity observer timed out"));
|
|
155
|
-
}, this.timeoutMs);
|
|
156
|
-
timeout.unref();
|
|
157
97
|
try {
|
|
158
98
|
const project = this.deps.project ?? projectSemanticActivity;
|
|
159
|
-
const candidate =
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
99
|
+
const candidate = project(this.deps.config, context, currentLabel);
|
|
100
|
+
if (candidate.decision === "update") {
|
|
101
|
+
const label = sanitizePublicActivityLabel(candidate.label);
|
|
102
|
+
if (!label)
|
|
103
|
+
return;
|
|
104
|
+
if (label === this.lastLabel) {
|
|
105
|
+
if (!this.semanticPublished) {
|
|
106
|
+
this.semanticPublished = true;
|
|
107
|
+
this.deps.onLabel(label, token, "semantic");
|
|
108
|
+
}
|
|
109
|
+
return;
|
|
110
|
+
}
|
|
111
|
+
this.lastLabel = label;
|
|
112
|
+
this.semanticPublished = true;
|
|
113
|
+
this.deps.onLabel(label, token, "semantic");
|
|
167
114
|
return;
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
if (!this.semanticPublished) {
|
|
115
|
+
}
|
|
116
|
+
if (candidate.decision === "same") {
|
|
117
|
+
const label = currentLabel ?? this.lastLabel;
|
|
118
|
+
if (label && !this.semanticPublished) {
|
|
173
119
|
this.semanticPublished = true;
|
|
174
120
|
this.deps.onLabel(label, token, "semantic");
|
|
175
121
|
}
|
|
176
122
|
return;
|
|
177
123
|
}
|
|
178
|
-
this.
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
if (this.timedOutController === controller) {
|
|
184
|
-
if (!this.semanticPublished && token === this.runToken && deterministicLabel && deterministicLabel !== this.lastLabel) {
|
|
185
|
-
this.lastLabel = deterministicLabel;
|
|
186
|
-
this.deps.onLabel(deterministicLabel, token, "fallback");
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
else if (!controller.signal.aborted) {
|
|
190
|
-
logger.debug(`[activity-observer] projection failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
191
|
-
if (!this.semanticPublished && deterministicLabel && token === this.runToken && deterministicLabel !== this.lastLabel) {
|
|
192
|
-
this.lastLabel = deterministicLabel;
|
|
193
|
-
this.deps.onLabel(deterministicLabel, token, "fallback");
|
|
194
|
-
}
|
|
124
|
+
if (!this.semanticPublished
|
|
125
|
+
&& deterministicLabel
|
|
126
|
+
&& deterministicLabel !== this.lastLabel) {
|
|
127
|
+
this.lastLabel = deterministicLabel;
|
|
128
|
+
this.deps.onLabel(deterministicLabel, token, "fallback");
|
|
195
129
|
}
|
|
196
130
|
}
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
if (this.controller === controller) {
|
|
204
|
-
this.controller = null;
|
|
205
|
-
this.running = false;
|
|
206
|
-
if (token === this.runToken) {
|
|
207
|
-
if (this.callsStarted >= MAX_ACTIVITY_OBSERVER_CALLS_PER_RUN) {
|
|
208
|
-
this.publishExhaustedOnce();
|
|
209
|
-
this.dirty = false;
|
|
210
|
-
}
|
|
211
|
-
else {
|
|
212
|
-
this.schedule();
|
|
213
|
-
}
|
|
214
|
-
}
|
|
131
|
+
catch (err) {
|
|
132
|
+
const detail = err instanceof Error ? err.message : String(err);
|
|
133
|
+
logger.debug(`[activity-observer] projection failed: ${detail}`);
|
|
134
|
+
if (!this.semanticPublished && deterministicLabel && deterministicLabel !== this.lastLabel) {
|
|
135
|
+
this.lastLabel = deterministicLabel;
|
|
136
|
+
this.deps.onLabel(deterministicLabel, token, "fallback");
|
|
215
137
|
}
|
|
216
138
|
}
|
|
217
139
|
}
|
|
218
|
-
publishExhaustedOnce() {
|
|
219
|
-
if (this.exhaustedPublished)
|
|
220
|
-
return;
|
|
221
|
-
this.exhaustedPublished = true;
|
|
222
|
-
this.lastLabel = ACTIVITY_OBSERVER_EXHAUSTED_LABEL;
|
|
223
|
-
logger.warn(`[activity-observer] semantic summary cap reached (${MAX_ACTIVITY_OBSERVER_CALLS_PER_RUN} calls); deterministic phase updates remain available`);
|
|
224
|
-
this.deps.onLabel(ACTIVITY_OBSERVER_EXHAUSTED_LABEL, this.runToken, "system");
|
|
225
|
-
}
|
|
226
140
|
contextParts() {
|
|
227
141
|
const task = this.contextByKind.task.slice(-1);
|
|
228
142
|
const recent = [
|
|
@@ -241,25 +155,8 @@ export class ActivityObserver {
|
|
|
241
155
|
if (this.timer)
|
|
242
156
|
clearTimeout(this.timer);
|
|
243
157
|
this.timer = null;
|
|
244
|
-
this.generation += 1;
|
|
245
|
-
this.controller?.abort();
|
|
246
|
-
this.controller = null;
|
|
247
|
-
this.timedOutController = null;
|
|
248
|
-
this.running = false;
|
|
249
158
|
}
|
|
250
159
|
}
|
|
251
|
-
/**
|
|
252
|
-
* The first projection starts quickly. Every later projection waits at least
|
|
253
|
-
* five seconds after the previous model call settles, then backs off in
|
|
254
|
-
* five-call steps. With the 60-call safety cap, scheduled waits alone exceed
|
|
255
|
-
* 31 minutes; real model latency extends that further.
|
|
256
|
-
*/
|
|
257
|
-
export function activityObserverDelayMs(callsStarted) {
|
|
258
|
-
if (callsStarted <= 0)
|
|
259
|
-
return OBSERVER_INITIAL_DELAY_MS;
|
|
260
|
-
const completedFollowUpSteps = Math.floor((callsStarted - 1) / OBSERVER_DELAY_STEP_CALLS);
|
|
261
|
-
return Math.min(OBSERVER_FOLLOW_UP_DELAY_MS + completedFollowUpSteps * OBSERVER_DELAY_STEP_MS, OBSERVER_MAX_DELAY_MS);
|
|
262
|
-
}
|
|
263
160
|
function contextLimit(kind) {
|
|
264
161
|
if (kind === "task")
|
|
265
162
|
return 1;
|
|
@@ -283,7 +180,7 @@ function summarizeObserverEvent(event) {
|
|
|
283
180
|
const prefix = event.kind === "task" ? "Task" : event.kind === "user" ? "User context" : event.kind === "todo" ? "Plan" : "Progress";
|
|
284
181
|
return `${prefix}: ${text}`;
|
|
285
182
|
}
|
|
286
|
-
/** Bound local event text before it can
|
|
183
|
+
/** Bound local event text before it can become a public activity label. */
|
|
287
184
|
export function boundObserverInput(value) {
|
|
288
185
|
if (typeof value !== "string")
|
|
289
186
|
return undefined;
|
|
@@ -292,45 +189,27 @@ export function boundObserverInput(value) {
|
|
|
292
189
|
return undefined;
|
|
293
190
|
return Array.from(text).slice(0, MAX_CONTEXT_PART_LENGTH).join("");
|
|
294
191
|
}
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
"## Recent bounded events",
|
|
318
|
-
context,
|
|
319
|
-
"",
|
|
320
|
-
"Decide whether these events materially change the current published activity.",
|
|
321
|
-
].join("\n"),
|
|
322
|
-
schema: ActivityProjectionSchema,
|
|
323
|
-
schemaName: "public_activity_label",
|
|
324
|
-
maxTokens: 80,
|
|
325
|
-
timeoutMs,
|
|
326
|
-
signal,
|
|
327
|
-
useCase: "activity_observer",
|
|
328
|
-
});
|
|
329
|
-
if (result.decision === "update") {
|
|
330
|
-
if (result.label === null)
|
|
331
|
-
throw new Error("activity update returned no label");
|
|
332
|
-
return { decision: "update", label: result.label };
|
|
333
|
-
}
|
|
334
|
-
return { decision: result.decision };
|
|
192
|
+
const PROGRESS_PREFIX = "Progress: ";
|
|
193
|
+
/**
|
|
194
|
+
* Project the latest assistant aside into the progress-card label.
|
|
195
|
+
* No sidecar LLM: consecutive identical asides are `same`; missing asides are
|
|
196
|
+
* `no_progress` so the observer can fall back to the last tool category.
|
|
197
|
+
*/
|
|
198
|
+
export function projectSemanticActivity(_config, context, currentLabel) {
|
|
199
|
+
const latestProgress = context
|
|
200
|
+
.split("\n")
|
|
201
|
+
.map((line) => line.trim())
|
|
202
|
+
.filter((line) => line.startsWith(PROGRESS_PREFIX))
|
|
203
|
+
.at(-1)
|
|
204
|
+
?.slice(PROGRESS_PREFIX.length)
|
|
205
|
+
.trim();
|
|
206
|
+
if (!latestProgress)
|
|
207
|
+
return { decision: "no_progress" };
|
|
208
|
+
const label = sanitizePublicActivityLabel(latestProgress);
|
|
209
|
+
if (!label)
|
|
210
|
+
return { decision: "no_progress" };
|
|
211
|
+
if (label === currentLabel?.trim())
|
|
212
|
+
return { decision: "same" };
|
|
213
|
+
return { decision: "update", label };
|
|
335
214
|
}
|
|
336
215
|
//# sourceMappingURL=activity-observer.js.map
|