@songsid/agend 2.2.0-beta.1 → 2.2.0-beta.11
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 +1 -1
- package/README.zh-TW.md +1 -1
- package/dist/agent-cli-instructions.md +16 -9
- package/dist/agent-cli.js +15 -7
- package/dist/agent-cli.js.map +1 -1
- package/dist/agent-endpoint.js +24 -9
- package/dist/agent-endpoint.js.map +1 -1
- package/dist/agent-whats-new.d.ts +47 -0
- package/dist/agent-whats-new.js +147 -0
- package/dist/agent-whats-new.js.map +1 -0
- package/dist/auth-api.d.ts +5 -3
- package/dist/auth-api.js +19 -3
- package/dist/auth-api.js.map +1 -1
- package/dist/backend/antigravity.d.ts +8 -0
- package/dist/backend/antigravity.js +32 -9
- package/dist/backend/antigravity.js.map +1 -1
- package/dist/backend/claude-carry.d.ts +22 -0
- package/dist/backend/claude-carry.js +170 -0
- package/dist/backend/claude-carry.js.map +1 -0
- package/dist/backend/claude-code.d.ts +65 -2
- package/dist/backend/claude-code.js +226 -33
- package/dist/backend/claude-code.js.map +1 -1
- package/dist/backend/codex-metadata.d.ts +33 -0
- package/dist/backend/codex-metadata.js +122 -18
- package/dist/backend/codex-metadata.js.map +1 -1
- package/dist/backend/codex.d.ts +3 -0
- package/dist/backend/codex.js +17 -1
- package/dist/backend/codex.js.map +1 -1
- package/dist/backend/credential-profile.d.ts +40 -3
- package/dist/backend/credential-profile.js +113 -5
- package/dist/backend/credential-profile.js.map +1 -1
- package/dist/backend/effort-metadata.d.ts +37 -1
- package/dist/backend/effort-metadata.js +86 -15
- package/dist/backend/effort-metadata.js.map +1 -1
- package/dist/backend/grok.d.ts +4 -0
- package/dist/backend/grok.js +14 -0
- package/dist/backend/grok.js.map +1 -1
- package/dist/backend/kiro-engine-ledger.d.ts +5 -0
- package/dist/backend/kiro-engine-ledger.js +20 -0
- package/dist/backend/kiro-engine-ledger.js.map +1 -1
- package/dist/backend/kiro-identity.d.ts +6 -0
- package/dist/backend/kiro-identity.js +19 -5
- package/dist/backend/kiro-identity.js.map +1 -1
- package/dist/backend/kiro.d.ts +39 -3
- package/dist/backend/kiro.js +143 -19
- package/dist/backend/kiro.js.map +1 -1
- package/dist/backend/launch-effort.d.ts +61 -0
- package/dist/backend/launch-effort.js +170 -0
- package/dist/backend/launch-effort.js.map +1 -0
- package/dist/backend/muse.d.ts +84 -0
- package/dist/backend/muse.js +449 -53
- package/dist/backend/muse.js.map +1 -1
- package/dist/backend/types.d.ts +47 -4
- package/dist/backend/types.js +12 -1
- package/dist/backend/types.js.map +1 -1
- package/dist/backend-command.d.ts +91 -0
- package/dist/backend-command.js +122 -0
- package/dist/backend-command.js.map +1 -0
- package/dist/background-work-ended.d.ts +18 -0
- package/dist/background-work-ended.js +30 -0
- package/dist/background-work-ended.js.map +1 -0
- package/dist/cache-service.d.ts +2 -0
- package/dist/cache-service.js +2 -1
- package/dist/cache-service.js.map +1 -1
- package/dist/channel/adapters/discord.d.ts +36 -1
- package/dist/channel/adapters/discord.js +126 -4
- package/dist/channel/adapters/discord.js.map +1 -1
- package/dist/channel/adapters/telegram.d.ts +42 -2
- package/dist/channel/adapters/telegram.js +142 -23
- package/dist/channel/adapters/telegram.js.map +1 -1
- package/dist/channel/mcp-server.js +9 -1
- package/dist/channel/mcp-server.js.map +1 -1
- package/dist/channel/mcp-tools.d.ts +11 -0
- package/dist/channel/mcp-tools.js +26 -13
- package/dist/channel/mcp-tools.js.map +1 -1
- package/dist/channel/message-edit-errors.d.ts +5 -0
- package/dist/channel/message-edit-errors.js +24 -0
- package/dist/channel/message-edit-errors.js.map +1 -0
- package/dist/channel/telegram-markdown.d.ts +6 -0
- package/dist/channel/telegram-markdown.js +104 -0
- package/dist/channel/telegram-markdown.js.map +1 -0
- package/dist/channel/tool-router.d.ts +2 -0
- package/dist/channel/tool-router.js +10 -4
- package/dist/channel/tool-router.js.map +1 -1
- package/dist/channel/types.d.ts +55 -3
- package/dist/cli.js +167 -39
- package/dist/cli.js.map +1 -1
- package/dist/command-table.d.ts +2 -2
- package/dist/command-table.js +6 -3
- package/dist/command-table.js.map +1 -1
- package/dist/config-validator.js +59 -0
- package/dist/config-validator.js.map +1 -1
- package/dist/cross-instance-envelope.d.ts +15 -2
- package/dist/cross-instance-envelope.js +29 -5
- package/dist/cross-instance-envelope.js.map +1 -1
- package/dist/daemon.d.ts +156 -1
- package/dist/daemon.js +773 -89
- package/dist/daemon.js.map +1 -1
- package/dist/delivery-outbox.d.ts +70 -8
- package/dist/delivery-outbox.js +315 -24
- package/dist/delivery-outbox.js.map +1 -1
- package/dist/delivery-reconciliation.d.ts +18 -1
- package/dist/delivery-reconciliation.js +67 -2
- package/dist/delivery-reconciliation.js.map +1 -1
- package/dist/fleet-context.d.ts +10 -1
- package/dist/fleet-manager.d.ts +404 -13
- package/dist/fleet-manager.js +2039 -210
- package/dist/fleet-manager.js.map +1 -1
- package/dist/general-knowledge/skills/backend-providers/SKILL.md +1 -1
- package/dist/general-knowledge/skills/credential-profiles/SKILL.md +92 -21
- package/dist/general-knowledge/skills/cross-instance-messaging/SKILL.md +27 -3
- package/dist/general-knowledge/skills/delegation-playbook/SKILL.md +8 -8
- package/dist/general-knowledge/skills/fleet-config/SKILL.md +5 -5
- package/dist/general-knowledge/skills/fleet-health/SKILL.md +4 -4
- package/dist/general-knowledge/skills/fleet-restart/SKILL.md +13 -13
- package/dist/general-knowledge/skills/instance-lifecycle/SKILL.md +3 -2
- package/dist/general-knowledge/skills/kiro-engine-migration/SKILL.md +6 -0
- package/dist/general-knowledge/skills/model-discovery/SKILL.md +12 -9
- package/dist/general-knowledge/skills/multi-channel/SKILL.md +8 -2
- package/dist/general-knowledge/skills/scheduling/SKILL.md +5 -3
- package/dist/general-knowledge/skills/session-management/SKILL.md +6 -5
- package/dist/general-knowledge/skills/tui-effort/SKILL.md +2 -2
- package/dist/general-knowledge/skills/worker-collaboration/SKILL.md +8 -3
- package/dist/general-knowledge/steering/core-rules.md +8 -7
- package/dist/host-memory.d.ts +10 -0
- package/dist/host-memory.js +33 -1
- package/dist/host-memory.js.map +1 -1
- package/dist/human-delivery-receipts.d.ts +83 -0
- package/dist/human-delivery-receipts.js +194 -0
- package/dist/human-delivery-receipts.js.map +1 -0
- package/dist/instance-avatar.d.ts +36 -0
- package/dist/instance-avatar.js +57 -0
- package/dist/instance-avatar.js.map +1 -0
- package/dist/instance-config-impact.js +6 -0
- package/dist/instance-config-impact.js.map +1 -1
- package/dist/instance-lifecycle.d.ts +29 -6
- package/dist/instance-lifecycle.js +79 -28
- package/dist/instance-lifecycle.js.map +1 -1
- package/dist/instructions.d.ts +3 -1
- package/dist/instructions.js +11 -8
- package/dist/instructions.js.map +1 -1
- package/dist/kiro-log-gate.d.ts +42 -0
- package/dist/kiro-log-gate.js +39 -0
- package/dist/kiro-log-gate.js.map +1 -0
- package/dist/locale.js +226 -44
- package/dist/locale.js.map +1 -1
- package/dist/log-service.d.ts +99 -0
- package/dist/log-service.js +243 -0
- package/dist/log-service.js.map +1 -0
- package/dist/log-steps.d.ts +169 -0
- package/dist/log-steps.js +858 -0
- package/dist/log-steps.js.map +1 -0
- package/dist/login-controller.d.ts +20 -3
- package/dist/login-controller.js +71 -19
- package/dist/login-controller.js.map +1 -1
- package/dist/login-flows.d.ts +5 -2
- package/dist/login-flows.js +5 -4
- package/dist/login-flows.js.map +1 -1
- package/dist/memory-pressure.d.ts +13 -1
- package/dist/memory-pressure.js +50 -10
- package/dist/memory-pressure.js.map +1 -1
- package/dist/needs-you-hub.js +2 -0
- package/dist/needs-you-hub.js.map +1 -1
- package/dist/needs-you-live.d.ts +6 -0
- package/dist/needs-you-live.js +23 -3
- package/dist/needs-you-live.js.map +1 -1
- package/dist/next-steps.js +1 -1
- package/dist/next-steps.js.map +1 -1
- package/dist/outbound-handlers.d.ts +100 -0
- package/dist/outbound-handlers.js +284 -97
- package/dist/outbound-handlers.js.map +1 -1
- package/dist/outbound-schemas.d.ts +38 -15
- package/dist/outbound-schemas.js +36 -8
- package/dist/outbound-schemas.js.map +1 -1
- package/dist/public-link-progress.d.ts +1 -1
- package/dist/public-link-progress.js +8 -2
- package/dist/public-link-progress.js.map +1 -1
- package/dist/public-preview.d.ts +101 -0
- package/dist/public-preview.js +236 -0
- package/dist/public-preview.js.map +1 -0
- package/dist/public-web-gateway.js +14 -4
- package/dist/public-web-gateway.js.map +1 -1
- package/dist/public-web-link.d.ts +24 -1
- package/dist/public-web-link.js +63 -9
- package/dist/public-web-link.js.map +1 -1
- package/dist/reply-buttons-controller.d.ts +89 -5
- package/dist/reply-buttons-controller.js +273 -8
- package/dist/reply-buttons-controller.js.map +1 -1
- package/dist/reply-buttons.d.ts +48 -3
- package/dist/reply-buttons.js +105 -10
- package/dist/reply-buttons.js.map +1 -1
- package/dist/reply-polls.d.ts +85 -0
- package/dist/reply-polls.js +154 -0
- package/dist/reply-polls.js.map +1 -0
- package/dist/restart-guard.d.ts +6 -3
- package/dist/restart-guard.js +6 -3
- package/dist/restart-guard.js.map +1 -1
- package/dist/restart-progress.d.ts +33 -0
- package/dist/restart-progress.js +30 -0
- package/dist/restart-progress.js.map +1 -1
- package/dist/service-activation.d.ts +15 -7
- package/dist/service-activation.js +46 -29
- package/dist/service-activation.js.map +1 -1
- package/dist/service-installer.d.ts +31 -0
- package/dist/service-installer.js +41 -2
- package/dist/service-installer.js.map +1 -1
- package/dist/settings-api.js +85 -25
- package/dist/settings-api.js.map +1 -1
- package/dist/settings-change.js +72 -1
- package/dist/settings-change.js.map +1 -1
- package/dist/settings-effect.js +28 -4
- package/dist/settings-effect.js.map +1 -1
- package/dist/settings-http-confirmation.js +7 -0
- package/dist/settings-http-confirmation.js.map +1 -1
- package/dist/setup-form.d.ts +1 -1
- package/dist/setup-form.js +1 -1
- package/dist/spawn-gate.js +5 -1
- package/dist/spawn-gate.js.map +1 -1
- package/dist/spawn-hold-reply.d.ts +12 -0
- package/dist/spawn-hold-reply.js +39 -0
- package/dist/spawn-hold-reply.js.map +1 -0
- package/dist/status-emojis.d.ts +10 -3
- package/dist/status-emojis.js +11 -2
- package/dist/status-emojis.js.map +1 -1
- package/dist/systemd-peer-bus.d.ts +95 -0
- package/dist/systemd-peer-bus.js +430 -0
- package/dist/systemd-peer-bus.js.map +1 -0
- package/dist/systemd-runtime.d.ts +27 -1
- package/dist/systemd-runtime.js +69 -7
- package/dist/systemd-runtime.js.map +1 -1
- package/dist/tips.js +4 -4
- package/dist/tips.js.map +1 -1
- package/dist/tool-permissions.js +3 -3
- package/dist/tool-permissions.js.map +1 -1
- package/dist/tool-progress.js +3 -2
- package/dist/tool-progress.js.map +1 -1
- package/dist/topic-commands.d.ts +42 -2
- package/dist/topic-commands.js +101 -11
- package/dist/topic-commands.js.map +1 -1
- package/dist/transcript-delta-reader.d.ts +3 -3
- package/dist/transcript-delta-reader.js +8 -8
- package/dist/transcript-delta-reader.js.map +1 -1
- package/dist/transcript-jsonl.d.ts +80 -3
- package/dist/transcript-jsonl.js +147 -10
- package/dist/transcript-jsonl.js.map +1 -1
- package/dist/transcript-monitor.d.ts +19 -0
- package/dist/transcript-monitor.js +87 -15
- package/dist/transcript-monitor.js.map +1 -1
- package/dist/transcript-sources.d.ts +78 -0
- package/dist/transcript-sources.js +375 -64
- package/dist/transcript-sources.js.map +1 -1
- package/dist/transcript-turns.d.ts +15 -2
- package/dist/transcript-turns.js +15 -2
- package/dist/transcript-turns.js.map +1 -1
- package/dist/tunnel/cloudflared.d.ts +7 -15
- package/dist/tunnel/cloudflared.js +36 -1
- package/dist/tunnel/cloudflared.js.map +1 -1
- package/dist/tunnel/purpose-lane.d.ts +5 -1
- package/dist/tunnel/purpose-lane.js +14 -7
- package/dist/tunnel/purpose-lane.js.map +1 -1
- package/dist/tunnel/types.d.ts +5 -1
- package/dist/tunnel/types.js.map +1 -1
- package/dist/turn-resume.d.ts +2 -0
- package/dist/turn-resume.js +1 -1
- package/dist/turn-resume.js.map +1 -1
- package/dist/types.d.ts +25 -0
- package/dist/ui/chat-commands.js +1 -0
- package/dist/ui/chat-emojis.js +33 -0
- package/dist/ui/chat-mentions.js +63 -0
- package/dist/ui/chat-render.js +61 -4
- package/dist/ui/chat-store.js +37 -3
- package/dist/ui/chat-strings.js +40 -20
- package/dist/ui/chat-thread.js +111 -12
- package/dist/ui/chat-time.js +80 -0
- package/dist/ui/panel-chat.js +41 -10
- package/dist/ui/panel-details.js +2 -0
- package/dist/ui/panel-fleet.js +199 -57
- package/dist/ui/panel-log.js +428 -0
- package/dist/ui/panel-needs.js +6 -2
- package/dist/ui/panel-settings.js +184 -32
- package/dist/ui/preview-panel.js +55 -15
- package/dist/ui/preview-status.js +28 -0
- package/dist/ui/preview.js +44 -3
- package/dist/ui/settings-dialogs.js +7 -2
- package/dist/ui/settings-model.js +2 -1
- package/dist/ui/settings-strings.js +56 -4
- package/dist/ui/settings-token.js +1 -1
- package/dist/ui/shared/app-i18n.js +43 -17
- package/dist/ui/shared/app-prefs.js +250 -0
- package/dist/ui/shared/app-route.js +7 -2
- package/dist/ui/shared/app-shell.js +165 -8
- package/dist/ui/shared/app-store.js +5 -1
- package/dist/ui/shared/app-stream.js +26 -5
- package/dist/ui/shared/app.css +163 -22
- package/dist/ui/shared/app.js +11 -1
- package/dist/ui/shared/fonts/README.md +1 -1
- package/dist/ui/shared/header-tools.js +55 -5
- package/dist/ui/shared/instance-nav.js +241 -45
- package/dist/ui/shared/instance-switch.js +4 -4
- package/dist/ui/shared/panel-view.js +6 -0
- package/dist/ui/shared/signin.js +7 -7
- package/dist/ui/shared/theme.js +39 -7
- package/dist/ui/shared/tokens.css +1 -1
- package/dist/ui/shared/ui-icons.js +1 -0
- package/dist/ui/shared/usage-dialog.js +23 -5
- package/dist/ui/shared/view-strings.js +32 -4
- package/dist/ui/signin.html +1 -1
- package/dist/unrecognised-prompt.d.ts +23 -0
- package/dist/unrecognised-prompt.js +74 -0
- package/dist/unrecognised-prompt.js.map +1 -0
- package/dist/update-check.d.ts +31 -0
- package/dist/update-check.js +47 -0
- package/dist/update-check.js.map +1 -1
- package/dist/update-install.d.ts +28 -2
- package/dist/update-install.js +22 -4
- package/dist/update-install.js.map +1 -1
- package/dist/update-launch.d.ts +46 -1
- package/dist/update-launch.js +146 -3
- package/dist/update-launch.js.map +1 -1
- package/dist/update-marker.d.ts +51 -0
- package/dist/update-marker.js +61 -0
- package/dist/update-marker.js.map +1 -1
- package/dist/update-preflight.d.ts +100 -0
- package/dist/update-preflight.js +264 -0
- package/dist/update-preflight.js.map +1 -0
- package/dist/updater-caller.d.ts +31 -0
- package/dist/updater-caller.js +109 -0
- package/dist/updater-caller.js.map +1 -0
- package/dist/usage/i18n-keys.d.ts +1 -1
- package/dist/usage/i18n-keys.js +1 -1
- package/dist/usage/i18n-keys.js.map +1 -1
- package/dist/usage/providers.d.ts +34 -5
- package/dist/usage/providers.js +160 -27
- package/dist/usage/providers.js.map +1 -1
- package/dist/usage/statusline-usage.d.ts +6 -2
- package/dist/usage/statusline-usage.js +10 -4
- package/dist/usage/statusline-usage.js.map +1 -1
- package/dist/view-api.d.ts +1 -1
- package/dist/view-api.js +38 -8
- package/dist/view-api.js.map +1 -1
- package/dist/wake-coordinator.d.ts +11 -0
- package/dist/wake-coordinator.js +38 -4
- package/dist/wake-coordinator.js.map +1 -1
- package/dist/web-api.d.ts +89 -4
- package/dist/web-api.js +551 -45
- package/dist/web-api.js.map +1 -1
- package/dist/web-auth.d.ts +2 -2
- package/dist/web-auth.js +9 -4
- package/dist/web-auth.js.map +1 -1
- package/dist/web-chat-history.d.ts +12 -1
- package/dist/web-chat-history.js +29 -7
- package/dist/web-chat-history.js.map +1 -1
- package/dist/web-commands.d.ts +27 -4
- package/dist/web-commands.js +19 -4
- package/dist/web-commands.js.map +1 -1
- package/dist/web-host-guard.d.ts +3 -11
- package/dist/web-host-guard.js +3 -12
- package/dist/web-host-guard.js.map +1 -1
- package/dist/web-images.d.ts +47 -0
- package/dist/web-images.js +169 -0
- package/dist/web-images.js.map +1 -0
- package/dist/web-login.d.ts +14 -0
- package/dist/web-login.js +4 -2
- package/dist/web-login.js.map +1 -1
- package/dist/web-mentions.d.ts +44 -0
- package/dist/web-mentions.js +75 -0
- package/dist/web-mentions.js.map +1 -0
- package/dist/web-prefs.d.ts +81 -0
- package/dist/web-prefs.js +297 -0
- package/dist/web-prefs.js.map +1 -0
- package/dist/web-preview.d.ts +14 -1
- package/dist/web-preview.js +35 -13
- package/dist/web-preview.js.map +1 -1
- package/dist/web-profile.d.ts +32 -0
- package/dist/web-profile.js +132 -0
- package/dist/web-profile.js.map +1 -0
- package/dist/web-reply-files.d.ts +45 -0
- package/dist/web-reply-files.js +223 -0
- package/dist/web-reply-files.js.map +1 -0
- package/dist/web-schedules.d.ts +12 -0
- package/dist/web-schedules.js +34 -0
- package/dist/web-schedules.js.map +1 -0
- package/dist/web-server-drain.d.ts +10 -0
- package/dist/web-server-drain.js +50 -0
- package/dist/web-server-drain.js.map +1 -0
- package/dist/web-session.d.ts +50 -1
- package/dist/web-session.js +63 -6
- package/dist/web-session.js.map +1 -1
- package/dist/web-settings-patch.d.ts +23 -0
- package/dist/web-settings-patch.js +77 -0
- package/dist/web-settings-patch.js.map +1 -0
- package/dist/web-shell-routes.d.ts +5 -1
- package/dist/web-shell-routes.js +10 -1
- package/dist/web-shell-routes.js.map +1 -1
- package/dist/web-upload.d.ts +17 -4
- package/dist/web-upload.js +64 -13
- package/dist/web-upload.js.map +1 -1
- package/dist/workflow-templates/default.md +1 -1
- package/package.json +1 -1
- package/templates/launchd.plist.ejs +3 -1
- package/templates/systemd.service.ejs +2 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transcript-delta-reader.js","sourceRoot":"","sources":["../src/transcript-delta-reader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"transcript-delta-reader.js","sourceRoot":"","sources":["../src/transcript-delta-reader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AACH,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,qBAAqB,EAAoD,MAAM,8BAA8B,CAAC;AACvH,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AAE7D,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,uDAAuD;IACvD,UAAU,EAAE,GAAG,GAAG,IAAI;IACtB,+EAA+E;IAC/E,YAAY,EAAE,GAAG,GAAG,IAAI;IACxB,0FAA0F;IAC1F,YAAY,EAAE,GAAG;CAClB,CAAC;AAIF,MAAM,OAAO,qBAAqB;IAMH;IAA+C;IAAkC;IALtG,QAAQ,CAAS;IACjB,KAAK,GAAW,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAChC,YAAY,GAAG,KAAK,CAAC;IACrB,QAAQ,GAAG,KAAK,CAAC;IAEzB,YAA6B,IAAY,EAAE,MAAc,EAAmB,OAAe,EAAmB,MAAwB;QAAzG,SAAI,GAAJ,IAAI,CAAQ;QAAmC,YAAO,GAAP,OAAO,CAAQ;QAAmB,WAAM,GAAN,MAAM,CAAkB;QACpI,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC;IACzB,CAAC;IAED,8CAA8C;IAC9C,IAAI,YAAY,KAAa,OAAO,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IAEpD,sCAAsC;IACtC,KAAK,CAAC,IAAI;QACR,IAAI,IAAI,CAAC,QAAQ;YAAE,OAAO,SAAS,CAAC;QACpC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;QACrB,IAAI,SAAS,GAAG,KAAK,CAAC;QACtB,IAAI,KAAiC,CAAC;QACtC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QACxE,MAAM,MAAM,GAAG,IAAI,OAAO,CAAY,OAAO,CAAC,EAAE;YAC9C,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,qBAAqB,CAAC,YAAY,CAAC,CAAC;YACjF,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;QAClB,CAAC,CAAC,CAAC;QACH,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;YAC/C,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;gBAAC,SAAS,GAAG,IAAI,CAAC;gBAAC,OAAO,SAAS,CAAC;YAAC,CAAC;YAC9D,IAAI,GAAG,KAAK,aAAa;gBAAE,OAAO,aAAa,CAAC;YAChD,IAAI,GAAG,KAAK,IAAI;gBAAE,OAAO,UAAU,CAAC;YACpC,IAAI,CAAC,QAAQ,IAAI,GAAG,CAAC,MAAM,CAAC;YAC5B,OAAO,eAAe,CAAC,sBAAsB,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,UAAU,CAAC;QACrF,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,aAAa,CAAC;QACvB,CAAC;gBAAS,CAAC;YACT,IAAI,KAAK;gBAAE,YAAY,CAAC,KAAK,CAAC,CAAC;YAC/B,uFAAuF;YACvF,IAAI,SAAS;gBAAE,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IAED,iGAAiG;IACzF,KAAK,CAAC,SAAS;QACrB,IAAI,IAAY,CAAC;QACjB,IAAI,CAAC;YAAC,IAAI,GAAG,CAAC,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC;YAAC,OAAO,aAAa,CAAC;QAAC,CAAC;QAC5E,IAAI,IAAI,GAAG,IAAI,CAAC,QAAQ;YAAE,OAAO,aAAa,CAAC,CAAC,6CAA6C;QAC7F,IAAI,IAAI,KAAK,IAAI,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAC;QACxC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,qBAAqB,CAAC,UAAU,EAAE,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;QAChF,IAAI,EAAE,CAAC;QACP,IAAI,CAAC;YAAC,EAAE,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC;YAAC,OAAO,aAAa,CAAC;QAAC,CAAC;QACxE,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YACpC,IAAI,IAAI,GAAG,CAAC,CAAC;YACb,OAAO,IAAI,GAAG,MAAM,EAAE,CAAC;gBACrB,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;gBACvF,IAAI,SAAS,KAAK,CAAC;oBAAE,MAAM;gBAC3B,IAAI,IAAI,SAAS,CAAC;YACpB,CAAC;YACD,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QAClC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,aAAa,CAAC;QACvB,CAAC;gBAAS,CAAC;YACT,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IAED,yGAAyG;IACjG,IAAI,CAAC,KAAa;QACxB,IAAI,IAAI,GAAG,KAAK,CAAC;QACjB,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC9B,IAAI,EAAE,GAAG,CAAC;gBAAE,OAAO,IAAI,CAAC;YACxB,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC;YAC7B,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;QAC5B,CAAC;QACD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC5E,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACxC,IAAI,KAAK,GAAgC,IAAI,CAAC;QAC9C,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;YACf,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC;QACtB,CAAC;aAAM,CAAC;YACN,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACzC,MAAM,IAAI,GAAa,EAAE,CAAC;YAC1B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,IAAI,MAAM,GAAG,CAAC;gBACrC,MAAM,EAAE,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;gBACvC,IAAI,EAAE,GAAG,KAAK,IAAI,qBAAqB,CAAC,YAAY;oBAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;gBAChG,KAAK,GAAG,EAAE,GAAG,CAAC,CAAC;YACjB,CAAC;YACD,IAAI,IAAI,CAAC,MAAM;gBAAE,KAAK,GAAG,qBAAqB,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC;QAC1H,CAAC;QACD,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,qBAAqB,CAAC,YAAY,EAAE,CAAC;YAC3D,IAAI,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAC7B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAC3B,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;CACF"}
|
|
@@ -1,11 +1,88 @@
|
|
|
1
|
+
/** #1218 P0: the most one look reads. A busy session's delta is read over several looks, never in one buffer. */
|
|
2
|
+
export declare const READ_MAX_BYTES: number;
|
|
3
|
+
/** #1218 P0: a line longer than this is not parsed: only its head is kept (LongLine). A tool result can be MBs. */
|
|
4
|
+
export declare const LINE_MAX_BYTES: number;
|
|
5
|
+
/** #1218 P0: how much of a long line's start is kept, enough for its type, ids and tool name. */
|
|
6
|
+
export declare const LONG_HEAD_BYTES: number;
|
|
1
7
|
/**
|
|
2
|
-
*
|
|
3
|
-
*
|
|
8
|
+
* A line too long to parse: where it sits among `lines` (`at`: how many complete lines come before it), the start
|
|
9
|
+
* of it as text (a JSON fragment), and how many bytes it has (`complete`: its end was seen in this look; otherwise
|
|
10
|
+
* `bytes` is what was seen so far and the rest is skipped by the next looks).
|
|
11
|
+
*/
|
|
12
|
+
export interface LongLine {
|
|
13
|
+
at: number;
|
|
14
|
+
head: string;
|
|
15
|
+
bytes: number;
|
|
16
|
+
complete: boolean; /** Where it starts in the file. */
|
|
17
|
+
offset: number;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* #1218 P0 (#1786 review): a long line that a caller must not lose — a turn's record (codex `task_complete` with a long
|
|
21
|
+
* final reply, a pasted prompt) — is read whole and parsed, up to this size. Longer: skipped like any long line.
|
|
4
22
|
*/
|
|
5
|
-
export declare
|
|
23
|
+
export declare const WHOLE_LINE_MAX_BYTES: number;
|
|
24
|
+
/** The line of `bytes` bytes at `offset`, as text, when it is at most `max` bytes; null otherwise or when it cannot be read whole. */
|
|
25
|
+
export declare function readWholeLine(path: string, offset: number, bytes: number, max?: number): Promise<string | null>;
|
|
26
|
+
export interface ReadNewLinesResult {
|
|
6
27
|
lines: string[];
|
|
28
|
+
/** #1218: where each of `lines` starts in the file (same order). */
|
|
29
|
+
offsets: number[];
|
|
7
30
|
newOffset: number;
|
|
31
|
+
/** #1218 P0: lines over LINE_MAX_BYTES, by position (empty when none). */
|
|
32
|
+
long: LongLine[];
|
|
33
|
+
/** #1218 P0: more complete bytes may be waiting past `newOffset` (the look stopped at READ_MAX_BYTES). */
|
|
34
|
+
more: boolean;
|
|
35
|
+
/** #1218 P0: `newOffset` is inside a long line: pass `skipping: true` to the next look, which drops up to its end. */
|
|
36
|
+
skipping: boolean;
|
|
37
|
+
/** #1218 P0: this look found the end of the long line it was skipping: the offset just past its line end. */
|
|
38
|
+
longEnd?: number;
|
|
39
|
+
}
|
|
40
|
+
/** A look's records in file order: each complete line, and each long line where it sits among them. */
|
|
41
|
+
export declare function recordsInOrder(read: Pick<ReadNewLinesResult, "lines" | "long">): Generator<{
|
|
42
|
+
line: string;
|
|
43
|
+
} | {
|
|
44
|
+
long: LongLine;
|
|
45
|
+
}>;
|
|
46
|
+
/**
|
|
47
|
+
* #1218 P0 (#1786 review): a caller's way through one look's records when some long lines must be read whole. `whole`
|
|
48
|
+
* picks them by their head (a turn record); each is read (≤ WHOLE_LINE_MAX_BYTES) and given back as a line, in its
|
|
49
|
+
* place. A picked long line that runs past this look is held in `pending` and given back once a later look finds its
|
|
50
|
+
* end (`longEnd`). Every other long line is given back as itself (its head). Lines the CLI is still writing wait.
|
|
51
|
+
*/
|
|
52
|
+
export declare function resolveLongLines(path: string, read: ReadNewLinesResult, pending: {
|
|
53
|
+
offset: number;
|
|
54
|
+
} | null, whole: (head: string) => boolean): Promise<{
|
|
55
|
+
records: Array<{
|
|
56
|
+
line: string;
|
|
57
|
+
} | {
|
|
58
|
+
long: LongLine;
|
|
59
|
+
}>;
|
|
60
|
+
pending: {
|
|
61
|
+
offset: number;
|
|
62
|
+
} | null;
|
|
8
63
|
}>;
|
|
64
|
+
/**
|
|
65
|
+
* #1786 review (Fable P3): a claude-code assistant line, known by its head. Claude often writes `message` before `type`
|
|
66
|
+
* (parentUuid, isSidechain, message, requestId, type): a long reply's `"type":"assistant"` can sit past the head, while
|
|
67
|
+
* its message's `"role":"assistant"` is near the start.
|
|
68
|
+
*/
|
|
69
|
+
export declare function isClaudeAssistantHead(head: string): boolean;
|
|
70
|
+
/** #1218 P0: looks per poll — a busy session is followed at up to this many READ_MAX_BYTES per poll, each awaited. */
|
|
71
|
+
export declare const LOOKS_PER_POLL = 4;
|
|
72
|
+
/**
|
|
73
|
+
* Tail only newline-terminated JSONL records. A CLI can flush one record in
|
|
74
|
+
* several writes; the unfinished suffix must remain before the next offset.
|
|
75
|
+
*
|
|
76
|
+
* #1218 P0: bounded. One look reads at most `maxBytes` (READ_MAX_BYTES); what is beyond waits for the next look
|
|
77
|
+
* (`more`). A line over `maxLine` (LINE_MAX_BYTES) is never decoded or parsed whole: it is reported in `long` with
|
|
78
|
+
* its head, and the offset moves past it — across several looks if it is longer than one (`skipping`). Transcripts
|
|
79
|
+
* reach hundreds of MB and one tool result can be tens of MB; the fleet loop must not hold either in one buffer.
|
|
80
|
+
*/
|
|
81
|
+
export declare function readNewLines(path: string, fromOffset: number, opts?: {
|
|
82
|
+
maxBytes?: number;
|
|
83
|
+
maxLine?: number;
|
|
84
|
+
skipping?: boolean;
|
|
85
|
+
}): Promise<ReadNewLinesResult>;
|
|
9
86
|
/**
|
|
10
87
|
* Where the last complete record at or before `size` ends: just after the last LF, or 0 when there is none
|
|
11
88
|
* (#1250). A baseline or checkpoint taken while the CLI is mid-write must not land inside that record — the
|
package/dist/transcript-jsonl.js
CHANGED
|
@@ -1,24 +1,161 @@
|
|
|
1
1
|
import { open, stat } from "node:fs/promises";
|
|
2
|
+
/** #1218 P0: the most one look reads. A busy session's delta is read over several looks, never in one buffer. */
|
|
3
|
+
export const READ_MAX_BYTES = 1024 * 1024;
|
|
4
|
+
/** #1218 P0: a line longer than this is not parsed: only its head is kept (LongLine). A tool result can be MBs. */
|
|
5
|
+
export const LINE_MAX_BYTES = 256 * 1024;
|
|
6
|
+
/** #1218 P0: how much of a long line's start is kept, enough for its type, ids and tool name. */
|
|
7
|
+
export const LONG_HEAD_BYTES = 8 * 1024;
|
|
8
|
+
/**
|
|
9
|
+
* #1218 P0 (#1786 review): a long line that a caller must not lose — a turn's record (codex `task_complete` with a long
|
|
10
|
+
* final reply, a pasted prompt) — is read whole and parsed, up to this size. Longer: skipped like any long line.
|
|
11
|
+
*/
|
|
12
|
+
export const WHOLE_LINE_MAX_BYTES = 16 * 1024 * 1024;
|
|
13
|
+
/** The line of `bytes` bytes at `offset`, as text, when it is at most `max` bytes; null otherwise or when it cannot be read whole. */
|
|
14
|
+
export async function readWholeLine(path, offset, bytes, max = WHOLE_LINE_MAX_BYTES) {
|
|
15
|
+
if (bytes <= 0 || bytes > max)
|
|
16
|
+
return null;
|
|
17
|
+
const fh = await open(path, "r");
|
|
18
|
+
try {
|
|
19
|
+
const buf = Buffer.alloc(bytes);
|
|
20
|
+
for (let filled = 0; filled < bytes;) {
|
|
21
|
+
const { bytesRead } = await fh.read(buf, filled, bytes - filled, offset + filled);
|
|
22
|
+
if (bytesRead <= 0)
|
|
23
|
+
return null;
|
|
24
|
+
filled += bytesRead;
|
|
25
|
+
}
|
|
26
|
+
return buf.toString("utf-8");
|
|
27
|
+
}
|
|
28
|
+
finally {
|
|
29
|
+
await fh.close();
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/** A look's records in file order: each complete line, and each long line where it sits among them. */
|
|
33
|
+
export function* recordsInOrder(read) {
|
|
34
|
+
let next = 0;
|
|
35
|
+
for (let i = 0; i <= read.lines.length; i++) {
|
|
36
|
+
while (next < read.long.length && read.long[next].at === i)
|
|
37
|
+
yield { long: read.long[next++] };
|
|
38
|
+
if (i < read.lines.length)
|
|
39
|
+
yield { line: read.lines[i] };
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* #1218 P0 (#1786 review): a caller's way through one look's records when some long lines must be read whole. `whole`
|
|
44
|
+
* picks them by their head (a turn record); each is read (≤ WHOLE_LINE_MAX_BYTES) and given back as a line, in its
|
|
45
|
+
* place. A picked long line that runs past this look is held in `pending` and given back once a later look finds its
|
|
46
|
+
* end (`longEnd`). Every other long line is given back as itself (its head). Lines the CLI is still writing wait.
|
|
47
|
+
*/
|
|
48
|
+
export async function resolveLongLines(path, read, pending, whole) {
|
|
49
|
+
const records = [];
|
|
50
|
+
if (pending && read.longEnd !== undefined) {
|
|
51
|
+
const line = await readWholeLine(path, pending.offset, read.longEnd - 1 - pending.offset).catch(() => null);
|
|
52
|
+
if (line !== null)
|
|
53
|
+
records.push({ line });
|
|
54
|
+
pending = null;
|
|
55
|
+
}
|
|
56
|
+
for (const record of recordsInOrder(read)) {
|
|
57
|
+
if (!("long" in record) || !whole(record.long.head)) {
|
|
58
|
+
records.push(record);
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
if (!record.long.complete) {
|
|
62
|
+
pending = { offset: record.long.offset };
|
|
63
|
+
continue;
|
|
64
|
+
}
|
|
65
|
+
const line = await readWholeLine(path, record.long.offset, record.long.bytes).catch(() => null);
|
|
66
|
+
records.push(line !== null ? { line } : record);
|
|
67
|
+
}
|
|
68
|
+
return { records, pending };
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* #1786 review (Fable P3): a claude-code assistant line, known by its head. Claude often writes `message` before `type`
|
|
72
|
+
* (parentUuid, isSidechain, message, requestId, type): a long reply's `"type":"assistant"` can sit past the head, while
|
|
73
|
+
* its message's `"role":"assistant"` is near the start.
|
|
74
|
+
*/
|
|
75
|
+
export function isClaudeAssistantHead(head) {
|
|
76
|
+
return head.includes('"type":"assistant"') || /"message":\{[^{}]{0,400}?"role":"assistant"/.test(head);
|
|
77
|
+
}
|
|
78
|
+
/** #1218 P0: looks per poll — a busy session is followed at up to this many READ_MAX_BYTES per poll, each awaited. */
|
|
79
|
+
export const LOOKS_PER_POLL = 4;
|
|
80
|
+
/** The first `max` bytes of `buf` as text, never ending inside a UTF-8 character. */
|
|
81
|
+
function headText(buf, max) {
|
|
82
|
+
let end = Math.min(max, buf.length);
|
|
83
|
+
if (end < buf.length)
|
|
84
|
+
while (end > 0 && (buf[end] & 0xc0) === 0x80)
|
|
85
|
+
end--;
|
|
86
|
+
return buf.toString("utf-8", 0, end);
|
|
87
|
+
}
|
|
2
88
|
/**
|
|
3
89
|
* Tail only newline-terminated JSONL records. A CLI can flush one record in
|
|
4
90
|
* several writes; the unfinished suffix must remain before the next offset.
|
|
91
|
+
*
|
|
92
|
+
* #1218 P0: bounded. One look reads at most `maxBytes` (READ_MAX_BYTES); what is beyond waits for the next look
|
|
93
|
+
* (`more`). A line over `maxLine` (LINE_MAX_BYTES) is never decoded or parsed whole: it is reported in `long` with
|
|
94
|
+
* its head, and the offset moves past it — across several looks if it is longer than one (`skipping`). Transcripts
|
|
95
|
+
* reach hundreds of MB and one tool result can be tens of MB; the fleet loop must not hold either in one buffer.
|
|
5
96
|
*/
|
|
6
|
-
export async function readNewLines(path, fromOffset) {
|
|
97
|
+
export async function readNewLines(path, fromOffset, opts = {}) {
|
|
98
|
+
const maxBytes = Math.max(1, opts.maxBytes ?? READ_MAX_BYTES);
|
|
99
|
+
const maxLine = Math.max(1, opts.maxLine ?? LINE_MAX_BYTES);
|
|
7
100
|
const stats = await stat(path);
|
|
101
|
+
const empty = (offset, skipping, more, longEnd) => ({ lines: [], offsets: [], newOffset: offset, long: [], more, skipping, ...(longEnd !== undefined ? { longEnd } : {}) });
|
|
8
102
|
if (stats.size <= fromOffset)
|
|
9
|
-
return
|
|
103
|
+
return empty(fromOffset, !!opts.skipping, false);
|
|
10
104
|
const fh = await open(path, "r");
|
|
11
105
|
try {
|
|
12
|
-
const
|
|
13
|
-
|
|
14
|
-
|
|
106
|
+
const read = async (at, length) => {
|
|
107
|
+
const buffer = Buffer.alloc(length);
|
|
108
|
+
const { bytesRead } = await fh.read(buffer, 0, length, at);
|
|
109
|
+
return buffer.subarray(0, bytesRead);
|
|
110
|
+
};
|
|
111
|
+
let pos = fromOffset;
|
|
112
|
+
let budget = maxBytes;
|
|
113
|
+
let longEnd;
|
|
114
|
+
// Inside a long line already reported: drop through its end (its LF), within this look's budget.
|
|
115
|
+
if (opts.skipping) {
|
|
116
|
+
const chunk = await read(pos, Math.min(budget, stats.size - pos));
|
|
117
|
+
const lf = chunk.indexOf(0x0a);
|
|
118
|
+
if (lf < 0)
|
|
119
|
+
return empty(pos + chunk.length, true, pos + chunk.length < stats.size);
|
|
120
|
+
pos += lf + 1;
|
|
121
|
+
budget -= lf + 1;
|
|
122
|
+
longEnd = pos;
|
|
123
|
+
if (budget <= 0 || pos >= stats.size)
|
|
124
|
+
return empty(pos, false, pos < stats.size, longEnd);
|
|
125
|
+
}
|
|
15
126
|
// Find LF in the bytes actually read, before decoding (UTF-8 characters
|
|
16
127
|
// may themselves span writes). stat.size is not a consumed-byte boundary.
|
|
17
|
-
const
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
128
|
+
const window = await read(pos, Math.min(budget, stats.size - pos));
|
|
129
|
+
const complete = window.lastIndexOf(0x0a) + 1;
|
|
130
|
+
const lines = [];
|
|
131
|
+
const offsets = [];
|
|
132
|
+
const long = [];
|
|
133
|
+
let start = 0;
|
|
134
|
+
while (start < complete) {
|
|
135
|
+
const end = window.indexOf(0x0a, start);
|
|
136
|
+
const length = end - start;
|
|
137
|
+
if (length > maxLine)
|
|
138
|
+
long.push({ at: lines.length, head: headText(window.subarray(start, end), LONG_HEAD_BYTES), bytes: length, complete: true, offset: pos + start });
|
|
139
|
+
else {
|
|
140
|
+
const line = window.toString("utf-8", start, end);
|
|
141
|
+
if (line.trim()) {
|
|
142
|
+
lines.push(line);
|
|
143
|
+
offsets.push(pos + start);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
start = end + 1;
|
|
147
|
+
}
|
|
148
|
+
const ended = longEnd !== undefined ? { longEnd } : {};
|
|
149
|
+
// No line end after `complete`: a record still being written — unless it is already too long to be one we parse.
|
|
150
|
+
const tail = window.length - complete;
|
|
151
|
+
if (tail >= maxLine) {
|
|
152
|
+
long.push({ at: lines.length, head: headText(window.subarray(complete), LONG_HEAD_BYTES), bytes: tail, complete: false, offset: pos + complete });
|
|
153
|
+
const newOffset = pos + window.length;
|
|
154
|
+
return { lines, offsets, newOffset, long, more: newOffset < stats.size, skipping: true, ...ended };
|
|
155
|
+
}
|
|
156
|
+
const newOffset = pos + complete;
|
|
157
|
+
// More: this look was cut short by its budget, so complete records may wait past the offset.
|
|
158
|
+
return { lines, offsets, newOffset, long, more: window.length === budget && newOffset < stats.size, skipping: false, ...ended };
|
|
22
159
|
}
|
|
23
160
|
finally {
|
|
24
161
|
await fh.close();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transcript-jsonl.js","sourceRoot":"","sources":["../src/transcript-jsonl.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAE9C;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,
|
|
1
|
+
{"version":3,"file":"transcript-jsonl.js","sourceRoot":"","sources":["../src/transcript-jsonl.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,6 +17,10 @@ export declare class TranscriptMonitor extends EventEmitter {
|
|
|
17
17
|
private logger;
|
|
18
18
|
private source;
|
|
19
19
|
private byteOffset;
|
|
20
|
+
/** #1218 P0: the offset is inside a long line being skipped (readNewLines `skipping`). */
|
|
21
|
+
private skipping;
|
|
22
|
+
/** #1218 P0: a long assistant line being skipped, to be read whole once its end is found. */
|
|
23
|
+
private pendingLong;
|
|
20
24
|
private transcriptPath;
|
|
21
25
|
private pollTimer;
|
|
22
26
|
private offsetFile;
|
|
@@ -25,16 +29,31 @@ export declare class TranscriptMonitor extends EventEmitter {
|
|
|
25
29
|
constructor(instanceDir: string, logger: Logger, source?: TranscriptSource | null);
|
|
26
30
|
private loadOffset;
|
|
27
31
|
private saveOffset;
|
|
32
|
+
/** #1218: the transcript followed now — the source's, or claude-code's own — for the Log tab's on-demand read. */
|
|
33
|
+
currentPath(): string | null;
|
|
28
34
|
resolveTranscriptPath(): Promise<string | null>;
|
|
29
35
|
/** Snapshot the active durable conversation before an outbox pane write. */
|
|
30
36
|
reconciliationCheckpoint(): Promise<TranscriptCheckpoint | null>;
|
|
31
37
|
pollIncrement(): Promise<void>;
|
|
32
38
|
private pollSource;
|
|
33
39
|
private _doPoll;
|
|
40
|
+
/**
|
|
41
|
+
* #1218 P0: a line too long to parse (a tool result of MBs, a Write with a huge input) — what its head still says:
|
|
42
|
+
* the results it carries (by tool_use_id) and the tools it calls (by name), so the bubble does not lose the step.
|
|
43
|
+
*/
|
|
44
|
+
private processLongHead;
|
|
34
45
|
private processEntry;
|
|
35
46
|
startPolling(intervalMs?: number): void;
|
|
36
47
|
initialize(): Promise<void>;
|
|
37
48
|
stop(): void;
|
|
49
|
+
/**
|
|
50
|
+
* #1641: whether a transcript is being followed right now (its turn boundaries are evidence only then): polling, and
|
|
51
|
+
* — for a source lane (codex's rollout) — the source's own word that its last poll found and read our transcript; a
|
|
52
|
+
* source that cannot say is not following.
|
|
53
|
+
*/
|
|
54
|
+
following(): boolean;
|
|
55
|
+
/** #1641 R2: whether the current turn's state is known (see TranscriptSource.turnStateKnown); a source that cannot say does not. */
|
|
56
|
+
turnStateKnown(): boolean;
|
|
38
57
|
setTranscriptPath(path: string): void;
|
|
39
58
|
resetOffset(): void;
|
|
40
59
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { EventEmitter } from "node:events";
|
|
2
2
|
import { existsSync, readFileSync, writeFileSync } from "node:fs";
|
|
3
3
|
import { join } from "node:path";
|
|
4
|
-
import { lastLineBoundary, readNewLines } from "./transcript-jsonl.js";
|
|
4
|
+
import { LOOKS_PER_POLL, isClaudeAssistantHead, lastLineBoundary, readNewLines, resolveLongLines } from "./transcript-jsonl.js";
|
|
5
5
|
/**
|
|
6
6
|
* Emits tool_use / tool_result / assistant_text events off the CLI's own
|
|
7
7
|
* conversation record.
|
|
@@ -18,6 +18,10 @@ export class TranscriptMonitor extends EventEmitter {
|
|
|
18
18
|
logger;
|
|
19
19
|
source;
|
|
20
20
|
byteOffset = 0;
|
|
21
|
+
/** #1218 P0: the offset is inside a long line being skipped (readNewLines `skipping`). */
|
|
22
|
+
skipping = false;
|
|
23
|
+
/** #1218 P0: a long assistant line being skipped, to be read whole once its end is found. */
|
|
24
|
+
pendingLong = null;
|
|
21
25
|
transcriptPath = null;
|
|
22
26
|
pollTimer = null;
|
|
23
27
|
offsetFile;
|
|
@@ -40,6 +44,8 @@ export class TranscriptMonitor extends EventEmitter {
|
|
|
40
44
|
if (existsSync(this.offsetFile)) {
|
|
41
45
|
const data = JSON.parse(readFileSync(this.offsetFile, "utf-8"));
|
|
42
46
|
this.byteOffset = data.offset ?? 0;
|
|
47
|
+
this.skipping = false;
|
|
48
|
+
this.pendingLong = null;
|
|
43
49
|
this.transcriptPath = data.path ?? null;
|
|
44
50
|
}
|
|
45
51
|
}
|
|
@@ -60,6 +66,8 @@ export class TranscriptMonitor extends EventEmitter {
|
|
|
60
66
|
// Non-critical — will re-read some entries on restart
|
|
61
67
|
}
|
|
62
68
|
}
|
|
69
|
+
/** #1218: the transcript followed now — the source's, or claude-code's own — for the Log tab's on-demand read. */
|
|
70
|
+
currentPath() { return this.source ? this.source.currentPath?.() ?? null : this.transcriptPath; }
|
|
63
71
|
async resolveTranscriptPath() {
|
|
64
72
|
const statusFile = join(this.instanceDir, "statusline.json");
|
|
65
73
|
if (existsSync(statusFile)) {
|
|
@@ -76,8 +84,16 @@ export class TranscriptMonitor extends EventEmitter {
|
|
|
76
84
|
}
|
|
77
85
|
/** Snapshot the active durable conversation before an outbox pane write. */
|
|
78
86
|
async reconciliationCheckpoint() {
|
|
79
|
-
if (this.source?.checkpoint)
|
|
80
|
-
|
|
87
|
+
if (this.source?.checkpoint) {
|
|
88
|
+
const generation = this.generation;
|
|
89
|
+
const checkpoint = await this.source.checkpoint();
|
|
90
|
+
// #1641 R3: what the checkpoint moved past (a switch's retract and carried-in start, a skipped boundary) reaches
|
|
91
|
+
// the ledger before the delivery it guards — not at the next poll.
|
|
92
|
+
const turns = this.source.takeTurns?.() ?? [];
|
|
93
|
+
if (turns.length && generation === this.generation)
|
|
94
|
+
this.emit("turns", turns);
|
|
95
|
+
return checkpoint;
|
|
96
|
+
}
|
|
81
97
|
const path = await this.resolveTranscriptPath();
|
|
82
98
|
if (!path)
|
|
83
99
|
return null;
|
|
@@ -150,6 +166,8 @@ export class TranscriptMonitor extends EventEmitter {
|
|
|
150
166
|
// Work resumed during our own startup must be observable → read the
|
|
151
167
|
// replacement from the top.
|
|
152
168
|
this.byteOffset = 0;
|
|
169
|
+
this.skipping = false;
|
|
170
|
+
this.pendingLong = null;
|
|
153
171
|
this.saveOffset();
|
|
154
172
|
}
|
|
155
173
|
else {
|
|
@@ -159,6 +177,8 @@ export class TranscriptMonitor extends EventEmitter {
|
|
|
159
177
|
// replay the whole history.
|
|
160
178
|
try {
|
|
161
179
|
this.byteOffset = await lastLineBoundary(current);
|
|
180
|
+
this.skipping = false;
|
|
181
|
+
this.pendingLong = null;
|
|
162
182
|
}
|
|
163
183
|
catch {
|
|
164
184
|
this.transcriptPath = null;
|
|
@@ -171,25 +191,59 @@ export class TranscriptMonitor extends EventEmitter {
|
|
|
171
191
|
if (!this.transcriptPath || !existsSync(this.transcriptPath))
|
|
172
192
|
return;
|
|
173
193
|
try {
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
194
|
+
// #1218 P0: bounded looks (READ_MAX_BYTES each), a few per poll, each awaited; the rest waits for the next poll.
|
|
195
|
+
const generation = this.generation;
|
|
196
|
+
for (let look = 0; look < LOOKS_PER_POLL; look++) {
|
|
197
|
+
const read = await readNewLines(this.transcriptPath, this.byteOffset, { skipping: this.skipping });
|
|
198
|
+
if (generation !== this.generation)
|
|
199
|
+
return;
|
|
200
|
+
this.skipping = read.skipping;
|
|
201
|
+
if (read.newOffset === this.byteOffset)
|
|
202
|
+
break;
|
|
203
|
+
this.byteOffset = read.newOffset;
|
|
204
|
+
// An assistant line over the line limit (a long reply, a Write of a big file) is read whole (bounded):
|
|
205
|
+
// its text and tool calls matter. A long tool result is known by its head.
|
|
206
|
+
const resolved = await resolveLongLines(this.transcriptPath, read, this.pendingLong, isClaudeAssistantHead);
|
|
207
|
+
if (generation !== this.generation)
|
|
208
|
+
return;
|
|
209
|
+
this.pendingLong = resolved.pending;
|
|
210
|
+
for (const record of resolved.records) {
|
|
211
|
+
if ("long" in record) {
|
|
212
|
+
this.processLongHead(record.long.head);
|
|
213
|
+
continue;
|
|
214
|
+
}
|
|
215
|
+
try {
|
|
216
|
+
const entry = JSON.parse(record.line);
|
|
217
|
+
this.processEntry(entry);
|
|
218
|
+
}
|
|
219
|
+
catch {
|
|
220
|
+
// Malformed complete JSONL line in transcript — skip
|
|
221
|
+
}
|
|
185
222
|
}
|
|
223
|
+
this.saveOffset();
|
|
224
|
+
if (!read.more)
|
|
225
|
+
break;
|
|
186
226
|
}
|
|
187
|
-
this.saveOffset();
|
|
188
227
|
}
|
|
189
228
|
catch (err) {
|
|
190
229
|
this.logger.debug({ err }, "TranscriptMonitor poll error");
|
|
191
230
|
}
|
|
192
231
|
}
|
|
232
|
+
/**
|
|
233
|
+
* #1218 P0: a line too long to parse (a tool result of MBs, a Write with a huge input) — what its head still says:
|
|
234
|
+
* the results it carries (by tool_use_id) and the tools it calls (by name), so the bubble does not lose the step.
|
|
235
|
+
*/
|
|
236
|
+
processLongHead(head) {
|
|
237
|
+
if (head.includes('"type":"tool_result"')) {
|
|
238
|
+
for (const m of head.matchAll(/"tool_use_id":"([^"]{1,200})"/g))
|
|
239
|
+
this.emit("tool_result", m[1], undefined);
|
|
240
|
+
}
|
|
241
|
+
for (const m of head.matchAll(/"type":"tool_use"/g)) {
|
|
242
|
+
const name = /"name":"([^"]{1,200})"/.exec(head.slice(m.index, m.index + 400));
|
|
243
|
+
if (name)
|
|
244
|
+
this.emit("tool_use", name[1], {});
|
|
245
|
+
}
|
|
246
|
+
}
|
|
193
247
|
processEntry(entry) {
|
|
194
248
|
const msg = entry.message;
|
|
195
249
|
if (!msg?.role || !msg?.content)
|
|
@@ -224,6 +278,20 @@ export class TranscriptMonitor extends EventEmitter {
|
|
|
224
278
|
this.source?.close?.();
|
|
225
279
|
this.saveOffset();
|
|
226
280
|
}
|
|
281
|
+
/**
|
|
282
|
+
* #1641: whether a transcript is being followed right now (its turn boundaries are evidence only then): polling, and
|
|
283
|
+
* — for a source lane (codex's rollout) — the source's own word that its last poll found and read our transcript; a
|
|
284
|
+
* source that cannot say is not following.
|
|
285
|
+
*/
|
|
286
|
+
following() {
|
|
287
|
+
if (this.source)
|
|
288
|
+
return this.pollTimer !== null && this.source.following?.() === true;
|
|
289
|
+
return this.transcriptPath !== null;
|
|
290
|
+
}
|
|
291
|
+
/** #1641 R2: whether the current turn's state is known (see TranscriptSource.turnStateKnown); a source that cannot say does not. */
|
|
292
|
+
turnStateKnown() {
|
|
293
|
+
return this.source ? this.source.turnStateKnown?.() === true : true;
|
|
294
|
+
}
|
|
227
295
|
setTranscriptPath(path) {
|
|
228
296
|
if (this.transcriptPath !== path) {
|
|
229
297
|
this.resetOffset();
|
|
@@ -233,9 +301,13 @@ export class TranscriptMonitor extends EventEmitter {
|
|
|
233
301
|
resetOffset() {
|
|
234
302
|
this.generation++;
|
|
235
303
|
this.byteOffset = 0;
|
|
304
|
+
this.skipping = false;
|
|
305
|
+
this.pendingLong = null;
|
|
236
306
|
this.transcriptPath = null;
|
|
237
307
|
this.source?.reset();
|
|
238
308
|
this.saveOffset();
|
|
309
|
+
// #1641 R2: everything read before the re-baseline is about a transcript no longer followed from there.
|
|
310
|
+
this.emit("reset");
|
|
239
311
|
}
|
|
240
312
|
}
|
|
241
313
|
//# sourceMappingURL=transcript-monitor.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transcript-monitor.js","sourceRoot":"","sources":["../src/transcript-monitor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAClE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"transcript-monitor.js","sourceRoot":"","sources":["../src/transcript-monitor.ts"],"names":[],"mappings":"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"}
|