@agent-native/core 0.111.4 → 0.113.0
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/corpus/README.md +4 -2
- package/corpus/core/CHANGELOG.md +34 -0
- package/corpus/core/docs/AGENTS.md +7 -0
- package/corpus/core/docs/content/integrations.mdx +63 -2
- package/corpus/core/docs/design/provider-integration-authority.md +117 -0
- package/corpus/core/package.json +8 -1
- package/corpus/core/scripts/materialize-source-corpus.mjs +9 -2
- package/corpus/core/src/cli/atomic-json-file.ts +324 -0
- package/corpus/core/src/cli/claude-code-participant.ts +515 -0
- package/corpus/core/src/cli/code-agent-executor.ts +35 -15
- package/corpus/core/src/cli/code-agent-runs.concurrent-worker.ts +33 -0
- package/corpus/core/src/cli/code-agent-runs.ts +70 -36
- package/corpus/core/src/cli/codex-cli-participant.ts +496 -0
- package/corpus/core/src/cli/multi-frontier-runs.ts +1952 -0
- package/corpus/core/src/client/chat/ChatHistoryList.tsx +7 -404
- package/corpus/core/src/coding-tools/index.ts +27 -8
- package/corpus/core/src/embeddings/index.ts +233 -0
- package/corpus/core/src/index.ts +2 -0
- package/corpus/core/src/integrations/index.ts +10 -0
- package/corpus/core/src/integrations/slack-oauth.ts +1 -0
- package/corpus/core/src/integrations/webhook-delivery.ts +55 -0
- package/corpus/core/src/notifications/channels.ts +4 -10
- package/corpus/core/src/provider-api/actions/custom-provider-registration.ts +197 -0
- package/corpus/core/src/provider-api/actions/delete-staged-dataset.ts +3 -42
- package/corpus/core/src/provider-api/actions/list-staged-datasets.ts +3 -45
- package/corpus/core/src/provider-api/actions/provider-api-audit.ts +88 -0
- package/corpus/core/src/provider-api/actions/provider-api.ts +460 -0
- package/corpus/core/src/provider-api/actions/query-staged-dataset.ts +3 -140
- package/corpus/core/src/provider-api/actions/staged-datasets.ts +359 -0
- package/corpus/core/src/provider-api/gong.ts +108 -0
- package/corpus/core/src/scripts/docs/source-search.ts +2 -1
- package/corpus/core/src/search/index.ts +413 -0
- package/corpus/core/src/server/google-oauth-credentials.ts +80 -3
- package/corpus/core/src/server/index.ts +6 -0
- package/corpus/core/src/styles/chat-history-list.css +1 -313
- package/corpus/core/src/templates/default/.agents/skills/actions/SKILL.md +32 -12
- package/corpus/core/src/templates/default/.agents/skills/agent-native-docs/SKILL.md +10 -0
- package/corpus/core/src/templates/default/.agents/skills/customizing-agent-native/SKILL.md +102 -0
- package/corpus/core/src/templates/default/.agents/skills/integration-webhooks/SKILL.md +323 -0
- package/corpus/core/src/templates/default/.agents/skills/onboarding/SKILL.md +56 -0
- package/corpus/core/src/templates/default/.agents/skills/secrets/SKILL.md +273 -0
- package/corpus/core/src/templates/default/.agents/skills/self-modifying-code/SKILL.md +11 -2
- package/corpus/core/src/templates/default/.agents/skills/upgrade-agent-native/SKILL.md +6 -0
- package/corpus/core/src/templates/default/AGENTS.md +25 -18
- package/corpus/core/src/templates/headless/.agents/skills/actions/SKILL.md +512 -0
- package/corpus/core/src/templates/headless/.agents/skills/agent-native-docs/SKILL.md +10 -0
- package/corpus/core/src/templates/headless/.agents/skills/customizing-agent-native/SKILL.md +102 -0
- package/corpus/core/src/templates/headless/.agents/skills/integration-webhooks/SKILL.md +323 -0
- package/corpus/core/src/templates/headless/.agents/skills/secrets/SKILL.md +273 -0
- package/corpus/core/src/templates/headless/.agents/skills/upgrade-agent-native/SKILL.md +6 -0
- package/corpus/core/src/templates/headless/AGENTS.md +7 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/actions/SKILL.md +32 -12
- package/corpus/core/src/templates/workspace-core/.agents/skills/agent-native-docs/SKILL.md +10 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/customizing-agent-native/SKILL.md +102 -0
- package/corpus/core/src/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +11 -2
- package/corpus/core/src/templates/workspace-core/.agents/skills/upgrade-agent-native/SKILL.md +6 -0
- package/corpus/core/src/templates/workspace-core/AGENTS.md +4 -0
- package/corpus/core/src/templates/workspace-root/AGENTS.md +4 -0
- package/corpus/templates/analytics/.agents/skills/actions/SKILL.md +32 -12
- package/corpus/templates/analytics/.agents/skills/customizing-agent-native/SKILL.md +102 -0
- package/corpus/templates/analytics/.agents/skills/self-modifying-code/SKILL.md +11 -2
- package/corpus/templates/analytics/.agents/skills/upgrade-agent-native/SKILL.md +6 -0
- package/corpus/templates/analytics/actions/delete-staged-dataset.ts +3 -23
- package/corpus/templates/analytics/actions/list-staged-datasets.ts +3 -27
- package/corpus/templates/analytics/actions/provider-api-catalog.ts +16 -19
- package/corpus/templates/analytics/actions/provider-api-docs.ts +3 -5
- package/corpus/templates/analytics/actions/provider-api-request.ts +162 -185
- package/corpus/templates/analytics/actions/query-staged-dataset.ts +3 -47
- package/corpus/templates/analytics/app/components/layout/Sidebar.tsx +52 -161
- package/corpus/templates/assets/.agents/skills/actions/SKILL.md +32 -12
- package/corpus/templates/assets/.agents/skills/customizing-agent-native/SKILL.md +102 -0
- package/corpus/templates/assets/.agents/skills/self-modifying-code/SKILL.md +11 -2
- package/corpus/templates/assets/.agents/skills/upgrade-agent-native/SKILL.md +6 -0
- package/corpus/templates/assets/app/components/layout/Sidebar.tsx +63 -160
- package/corpus/templates/brain/.agents/skills/actions/SKILL.md +32 -12
- package/corpus/templates/brain/.agents/skills/brain/RUNBOOK.md +48 -5
- package/corpus/templates/brain/.agents/skills/brain/SKILL.md +46 -14
- package/corpus/templates/brain/.agents/skills/customizing-agent-native/SKILL.md +102 -0
- package/corpus/templates/brain/.agents/skills/self-modifying-code/SKILL.md +11 -2
- package/corpus/templates/brain/.agents/skills/upgrade-agent-native/SKILL.md +6 -0
- package/corpus/templates/brain/README.md +34 -3
- package/corpus/templates/brain/actions/_schemas.ts +13 -7
- package/corpus/templates/brain/actions/approve-proposal.ts +2 -0
- package/corpus/templates/brain/actions/claim-distillation.ts +24 -27
- package/corpus/templates/brain/actions/create-source.ts +1 -1
- package/corpus/templates/brain/actions/delete-staged-dataset.ts +3 -24
- package/corpus/templates/brain/actions/get-knowledge.ts +6 -2
- package/corpus/templates/brain/actions/get-pilot-report.ts +44 -8
- package/corpus/templates/brain/actions/import-capture.ts +21 -9
- package/corpus/templates/brain/actions/import-transcript.ts +42 -14
- package/corpus/templates/brain/actions/list-captures.ts +10 -1
- package/corpus/templates/brain/actions/list-distillation-queue.ts +39 -14
- package/corpus/templates/brain/actions/list-projects.ts +51 -0
- package/corpus/templates/brain/actions/list-proposals.ts +80 -4
- package/corpus/templates/brain/actions/list-sources.ts +17 -3
- package/corpus/templates/brain/actions/list-staged-datasets.ts +3 -28
- package/corpus/templates/brain/actions/manage-project.ts +118 -0
- package/corpus/templates/brain/actions/mark-capture-distilled.ts +68 -20
- package/corpus/templates/brain/actions/navigate.ts +1 -0
- package/corpus/templates/brain/actions/provider-api-catalog.ts +5 -11
- package/corpus/templates/brain/actions/provider-api-docs.ts +3 -5
- package/corpus/templates/brain/actions/provider-api-request.ts +3 -37
- package/corpus/templates/brain/actions/query-staged-dataset.ts +3 -48
- package/corpus/templates/brain/actions/reject-proposal.ts +6 -1
- package/corpus/templates/brain/actions/resanitize-captures.ts +159 -33
- package/corpus/templates/brain/actions/review-proposal.ts +2 -0
- package/corpus/templates/brain/actions/search-everything.ts +10 -1
- package/corpus/templates/brain/actions/search-knowledge.ts +1 -1
- package/corpus/templates/brain/actions/set-settings.ts +36 -1
- package/corpus/templates/brain/actions/update-proposal.ts +2 -0
- package/corpus/templates/brain/actions/update-source.ts +5 -1
- package/corpus/templates/brain/app/components/layout/Sidebar.tsx +48 -154
- package/corpus/templates/brain/app/hooks/use-distillation-bridge.ts +18 -9
- package/corpus/templates/brain/app/hooks/use-navigation-state.ts +3 -0
- package/corpus/templates/brain/app/i18n-data.ts +731 -2
- package/corpus/templates/brain/app/lib/brain.ts +88 -1
- package/corpus/templates/brain/app/lib/ingest-handoff.ts +35 -0
- package/corpus/templates/brain/app/routes/ops.tsx +47 -0
- package/corpus/templates/brain/app/routes/review.tsx +41 -2
- package/corpus/templates/brain/app/routes/search.tsx +33 -2
- package/corpus/templates/brain/app/routes/settings.tsx +158 -0
- package/corpus/templates/brain/app/routes/sources.tsx +31 -0
- package/corpus/templates/brain/changelog/2026-07-19-added-private-source-safe-semantic-search.md +6 -0
- package/corpus/templates/brain/changelog/2026-07-19-slack-backfills-can-now-join-configured-public-channels-befo.md +6 -0
- package/corpus/templates/brain/changelog/2026-07-19-slack-backfills-now-continue-across-the-configured-number-of.md +6 -0
- package/corpus/templates/brain/changelog/2026-07-19-slack-backfills-now-start-with-a-safe-four-week-window-and-r.md +6 -0
- package/corpus/templates/brain/jobs/process-ingest-queue.ts +270 -36
- package/corpus/templates/brain/package.json +1 -0
- package/corpus/templates/brain/server/db/index.ts +18 -0
- package/corpus/templates/brain/server/db/schema.ts +197 -1
- package/corpus/templates/brain/server/jobs/distillation-queue.ts +12 -5
- package/corpus/templates/brain/server/lib/audiences.ts +708 -0
- package/corpus/templates/brain/server/lib/brain-health.ts +251 -38
- package/corpus/templates/brain/server/lib/brain.ts +877 -50
- package/corpus/templates/brain/server/lib/capture-sanitization.ts +217 -53
- package/corpus/templates/brain/server/lib/connectors.ts +609 -72
- package/corpus/templates/brain/server/lib/demo.ts +17 -4
- package/corpus/templates/brain/server/lib/hybrid-search.ts +363 -0
- package/corpus/templates/brain/server/lib/ingest-queue.ts +104 -0
- package/corpus/templates/brain/server/lib/privacy-readiness.ts +24 -0
- package/corpus/templates/brain/server/lib/search-index-contracts.ts +72 -0
- package/corpus/templates/brain/server/lib/search-index.ts +714 -0
- package/corpus/templates/brain/server/lib/search.ts +120 -4
- package/corpus/templates/brain/server/lib/sensitivity-policy.ts +174 -0
- package/corpus/templates/brain/server/lib/slack-channel-membership.ts +44 -0
- package/corpus/templates/brain/server/lib/slack-events.ts +281 -0
- package/corpus/templates/brain/server/onboarding.ts +29 -0
- package/corpus/templates/brain/server/plugins/db.ts +204 -0
- package/corpus/templates/brain/server/register-secrets.ts +46 -0
- package/corpus/templates/brain/server/routes/api/_agent-native/brain/ingest.post.ts +36 -16
- package/corpus/templates/brain/server/routes/api/_agent-native/brain/slack-events.post.ts +28 -0
- package/corpus/templates/brain/shared/slack-source-config.ts +60 -0
- package/corpus/templates/brain/shared/types.ts +10 -0
- package/corpus/templates/calendar/.agents/skills/actions/SKILL.md +32 -12
- package/corpus/templates/calendar/.agents/skills/customizing-agent-native/SKILL.md +102 -0
- package/corpus/templates/calendar/.agents/skills/self-modifying-code/SKILL.md +11 -2
- package/corpus/templates/calendar/.agents/skills/upgrade-agent-native/SKILL.md +6 -0
- package/corpus/templates/calendar/actions/delete-staged-dataset.ts +3 -24
- package/corpus/templates/calendar/actions/list-staged-datasets.ts +3 -28
- package/corpus/templates/calendar/actions/provider-api-catalog.ts +5 -11
- package/corpus/templates/calendar/actions/provider-api-docs.ts +3 -5
- package/corpus/templates/calendar/actions/provider-api-request.ts +3 -37
- package/corpus/templates/calendar/actions/query-staged-dataset.ts +3 -48
- package/corpus/templates/calendar/server/handlers/gong.ts +6 -61
- package/corpus/templates/calendar/server/handlers/google-auth.ts +10 -8
- package/corpus/templates/calendar/server/lib/google-calendar.ts +7 -45
- package/corpus/templates/chat/.agents/skills/actions/SKILL.md +32 -12
- package/corpus/templates/chat/.agents/skills/agent-native-docs/SKILL.md +10 -0
- package/corpus/templates/chat/.agents/skills/customizing-agent-native/SKILL.md +102 -0
- package/corpus/templates/chat/.agents/skills/self-modifying-code/SKILL.md +11 -2
- package/corpus/templates/chat/.agents/skills/upgrade-agent-native/SKILL.md +6 -0
- package/corpus/templates/chat/AGENTS.md +5 -2
- package/corpus/templates/chat/app/components/layout/Sidebar.tsx +51 -157
- package/corpus/templates/clips/.agents/skills/actions/SKILL.md +32 -12
- package/corpus/templates/clips/.agents/skills/customizing-agent-native/SKILL.md +102 -0
- package/corpus/templates/clips/.agents/skills/self-modifying-code/SKILL.md +11 -2
- package/corpus/templates/clips/.agents/skills/upgrade-agent-native/SKILL.md +6 -0
- package/corpus/templates/clips/AGENTS.md +11 -0
- package/corpus/templates/clips/actions/export-to-brain.ts +505 -171
- package/corpus/templates/clips/changelog/2026-07-19-ready-clips-transcripts-can-be-backfilled-to-brain-for-a-bou.md +6 -0
- package/corpus/templates/clips/server/lib/calendar-event-meetings.ts +1 -1
- package/corpus/templates/clips/server/lib/google-calendar-client.ts +12 -22
- package/corpus/templates/clips/server/lib/google-calendar-oauth.ts +9 -6
- package/corpus/templates/clips/server/lib/slack-oauth.ts +12 -47
- package/corpus/templates/clips/server/routes/_agent-native/google/auth-url.get.ts +2 -6
- package/corpus/templates/clips/server/routes/api/auth/google-calendar.get.ts +4 -4
- package/corpus/templates/content/.agents/skills/actions/SKILL.md +32 -12
- package/corpus/templates/content/.agents/skills/customizing-agent-native/SKILL.md +102 -0
- package/corpus/templates/content/.agents/skills/self-modifying-code/SKILL.md +11 -2
- package/corpus/templates/content/.agents/skills/upgrade-agent-native/SKILL.md +6 -0
- package/corpus/templates/content/actions/delete-staged-dataset.ts +3 -24
- package/corpus/templates/content/actions/list-staged-datasets.ts +3 -28
- package/corpus/templates/content/actions/provider-api-catalog.ts +5 -11
- package/corpus/templates/content/actions/provider-api-docs.ts +3 -5
- package/corpus/templates/content/actions/provider-api-request.ts +3 -37
- package/corpus/templates/content/actions/query-staged-dataset.ts +3 -48
- package/corpus/templates/design/.agents/skills/actions/SKILL.md +32 -12
- package/corpus/templates/design/.agents/skills/customizing-agent-native/SKILL.md +102 -0
- package/corpus/templates/design/.agents/skills/self-modifying-code/SKILL.md +11 -2
- package/corpus/templates/design/.agents/skills/upgrade-agent-native/SKILL.md +6 -0
- package/corpus/templates/design/actions/delete-staged-dataset.ts +4 -23
- package/corpus/templates/design/actions/list-staged-datasets.ts +4 -27
- package/corpus/templates/design/actions/provider-api-catalog.ts +15 -18
- package/corpus/templates/design/actions/provider-api-docs.ts +57 -48
- package/corpus/templates/design/actions/provider-api-request.ts +140 -164
- package/corpus/templates/design/actions/query-staged-dataset.ts +4 -47
- package/corpus/templates/dispatch/.agents/skills/actions/SKILL.md +32 -12
- package/corpus/templates/dispatch/.agents/skills/customizing-agent-native/SKILL.md +102 -0
- package/corpus/templates/dispatch/.agents/skills/self-modifying-code/SKILL.md +11 -2
- package/corpus/templates/dispatch/.agents/skills/upgrade-agent-native/SKILL.md +6 -0
- package/corpus/templates/dispatch/actions/delete-staged-dataset.ts +4 -23
- package/corpus/templates/dispatch/actions/list-staged-datasets.ts +4 -30
- package/corpus/templates/dispatch/actions/provider-api-catalog.ts +15 -18
- package/corpus/templates/dispatch/actions/provider-api-docs.ts +57 -48
- package/corpus/templates/dispatch/actions/provider-api-request.ts +138 -163
- package/corpus/templates/dispatch/actions/query-staged-dataset.ts +4 -47
- package/corpus/templates/forms/.agents/skills/actions/SKILL.md +32 -12
- package/corpus/templates/forms/.agents/skills/customizing-agent-native/SKILL.md +102 -0
- package/corpus/templates/forms/.agents/skills/self-modifying-code/SKILL.md +11 -2
- package/corpus/templates/forms/.agents/skills/upgrade-agent-native/SKILL.md +6 -0
- package/corpus/templates/forms/server/lib/integrations.ts +23 -22
- package/corpus/templates/macros/.agents/skills/customizing-agent-native/SKILL.md +102 -0
- package/corpus/templates/macros/.agents/skills/upgrade-agent-native/SKILL.md +6 -0
- package/corpus/templates/mail/.agents/skills/actions/SKILL.md +32 -12
- package/corpus/templates/mail/.agents/skills/customizing-agent-native/SKILL.md +102 -0
- package/corpus/templates/mail/.agents/skills/self-modifying-code/SKILL.md +11 -2
- package/corpus/templates/mail/.agents/skills/upgrade-agent-native/SKILL.md +6 -0
- package/corpus/templates/mail/actions/delete-staged-dataset.ts +4 -23
- package/corpus/templates/mail/actions/list-staged-datasets.ts +4 -27
- package/corpus/templates/mail/actions/provider-api-catalog.ts +15 -18
- package/corpus/templates/mail/actions/provider-api-docs.ts +57 -48
- package/corpus/templates/mail/actions/provider-api-request.ts +146 -173
- package/corpus/templates/mail/actions/query-staged-dataset.ts +4 -47
- package/corpus/templates/mail/server/handlers/gong.ts +6 -61
- package/corpus/templates/mail/server/lib/google-auth.ts +10 -13
- package/corpus/templates/plan/.agents/skills/actions/SKILL.md +32 -12
- package/corpus/templates/plan/.agents/skills/customizing-agent-native/SKILL.md +102 -0
- package/corpus/templates/plan/.agents/skills/self-modifying-code/SKILL.md +11 -2
- package/corpus/templates/plan/.agents/skills/upgrade-agent-native/SKILL.md +6 -0
- package/corpus/templates/plan/app/components/layout/Sidebar.tsx +47 -156
- package/corpus/templates/slides/.agents/skills/actions/SKILL.md +32 -12
- package/corpus/templates/slides/.agents/skills/customizing-agent-native/SKILL.md +102 -0
- package/corpus/templates/slides/.agents/skills/self-modifying-code/SKILL.md +11 -2
- package/corpus/templates/slides/.agents/skills/upgrade-agent-native/SKILL.md +6 -0
- package/corpus/templates/slides/actions/delete-staged-dataset.ts +4 -23
- package/corpus/templates/slides/actions/list-staged-datasets.ts +4 -27
- package/corpus/templates/slides/actions/provider-api-catalog.ts +15 -18
- package/corpus/templates/slides/actions/provider-api-docs.ts +57 -48
- package/corpus/templates/slides/actions/provider-api-request.ts +145 -172
- package/corpus/templates/slides/actions/query-staged-dataset.ts +4 -47
- package/corpus/templates/slides/server/lib/google-docs-oauth.ts +11 -36
- package/corpus/templates/tasks/.agents/skills/actions/SKILL.md +32 -12
- package/corpus/templates/tasks/.agents/skills/agent-native-docs/SKILL.md +10 -0
- package/corpus/templates/tasks/.agents/skills/customizing-agent-native/SKILL.md +102 -0
- package/corpus/templates/tasks/.agents/skills/self-modifying-code/SKILL.md +11 -2
- package/corpus/templates/tasks/.agents/skills/upgrade-agent-native/SKILL.md +6 -0
- package/corpus/toolkit/CHANGELOG.md +125 -0
- package/corpus/toolkit/README.md +60 -0
- package/corpus/toolkit/export-snapshot.json +35 -0
- package/corpus/toolkit/migration-manifest.json +4 -0
- package/corpus/toolkit/package.json +281 -0
- package/corpus/toolkit/scripts/finalize-build.mjs +55 -0
- package/corpus/toolkit/src/app-shell/header-actions.tsx +84 -0
- package/corpus/toolkit/src/app-shell/index.ts +1 -0
- package/corpus/toolkit/src/chat-history/ChatHistoryList.tsx +469 -0
- package/corpus/toolkit/src/chat-history/index.ts +7 -0
- package/corpus/toolkit/src/chat-history.css +314 -0
- package/corpus/toolkit/src/collab-ui/AgentPresenceChip.tsx +69 -0
- package/corpus/toolkit/src/collab-ui/LiveCursorOverlay.tsx +241 -0
- package/corpus/toolkit/src/collab-ui/PresenceBar.tsx +346 -0
- package/corpus/toolkit/src/collab-ui/RecentEditHighlights.tsx +225 -0
- package/corpus/toolkit/src/collab-ui/RemoteSelectionRings.tsx +227 -0
- package/corpus/toolkit/src/collab-ui/agent-identity.ts +16 -0
- package/corpus/toolkit/src/collab-ui/index.ts +39 -0
- package/corpus/toolkit/src/collab-ui/lead-client.ts +32 -0
- package/corpus/toolkit/src/collab-ui/types.ts +96 -0
- package/corpus/toolkit/src/composer/AgentComposerFrame.tsx +59 -0
- package/corpus/toolkit/src/composer/ComposerPlusMenu.tsx +983 -0
- package/corpus/toolkit/src/composer/MentionPopover.tsx +412 -0
- package/corpus/toolkit/src/composer/PastedTextChip.tsx +150 -0
- package/corpus/toolkit/src/composer/PromptComposer.tsx +718 -0
- package/corpus/toolkit/src/composer/RealtimeVoiceMode.tsx +856 -0
- package/corpus/toolkit/src/composer/TiptapComposer.tsx +2936 -0
- package/corpus/toolkit/src/composer/VoiceButton.tsx +255 -0
- package/corpus/toolkit/src/composer/asset-picker-url.ts +80 -0
- package/corpus/toolkit/src/composer/attachment-accept.ts +71 -0
- package/corpus/toolkit/src/composer/draft-key.ts +7 -0
- package/corpus/toolkit/src/composer/extensions/FileReference.tsx +55 -0
- package/corpus/toolkit/src/composer/extensions/MentionReference.tsx +93 -0
- package/corpus/toolkit/src/composer/extensions/SkillReference.tsx +56 -0
- package/corpus/toolkit/src/composer/index.ts +79 -0
- package/corpus/toolkit/src/composer/pasted-text.ts +160 -0
- package/corpus/toolkit/src/composer/prompt-attachments.ts +93 -0
- package/corpus/toolkit/src/composer/realtime-voice-audio-level.ts +64 -0
- package/corpus/toolkit/src/composer/realtime-voice-transcript.ts +134 -0
- package/corpus/toolkit/src/composer/runtime-adapters.tsx +343 -0
- package/corpus/toolkit/src/composer/types.ts +66 -0
- package/corpus/toolkit/src/composer/use-file-search.ts +64 -0
- package/corpus/toolkit/src/composer/use-mention-search.ts +90 -0
- package/corpus/toolkit/src/composer/use-skills.ts +45 -0
- package/corpus/toolkit/src/composer/useRealtimeVoiceMode.tsx +2117 -0
- package/corpus/toolkit/src/composer/useVoiceDictation.ts +1191 -0
- package/corpus/toolkit/src/context-ui/ContextMeter.tsx +101 -0
- package/corpus/toolkit/src/context-ui/ContextSegmentRow.tsx +184 -0
- package/corpus/toolkit/src/context-ui/ContextTreemap.tsx +125 -0
- package/corpus/toolkit/src/context-ui/ContextXRayPanel.tsx +377 -0
- package/corpus/toolkit/src/context-ui/format.ts +42 -0
- package/corpus/toolkit/src/context-ui/index.ts +15 -0
- package/corpus/toolkit/src/context-ui/types.ts +43 -0
- package/corpus/toolkit/src/design-tweaks/index.ts +1 -0
- package/corpus/toolkit/src/design-tweaks/visual-style-controls.tsx +1084 -0
- package/corpus/toolkit/src/editor/BubbleToolbar.tsx +253 -0
- package/corpus/toolkit/src/editor/CodeBlockNode.tsx +254 -0
- package/corpus/toolkit/src/editor/DragHandle.ts +1437 -0
- package/corpus/toolkit/src/editor/ImageExtension.ts +306 -0
- package/corpus/toolkit/src/editor/RegistryBlockContext.tsx +107 -0
- package/corpus/toolkit/src/editor/RegistryBlockNode.tsx +652 -0
- package/corpus/toolkit/src/editor/RichMarkdownEditor.tsx +81 -0
- package/corpus/toolkit/src/editor/RunId.ts +61 -0
- package/corpus/toolkit/src/editor/SharedRichEditor.tsx +321 -0
- package/corpus/toolkit/src/editor/SlashCommandMenu.tsx +310 -0
- package/corpus/toolkit/src/editor/extensions.ts +402 -0
- package/corpus/toolkit/src/editor/gfmDoc.ts +92 -0
- package/corpus/toolkit/src/editor/index.ts +93 -0
- package/corpus/toolkit/src/editor/registrySlashCommands.ts +131 -0
- package/corpus/toolkit/src/editor/surgical-apply.ts +192 -0
- package/corpus/toolkit/src/editor/useCollabReconcile.ts +589 -0
- package/corpus/toolkit/src/editor.css +510 -0
- package/corpus/toolkit/src/hooks/index.ts +2 -0
- package/corpus/toolkit/src/hooks/use-mobile.tsx +21 -0
- package/corpus/toolkit/src/hooks/use-toast.ts +188 -0
- package/corpus/toolkit/src/index.ts +8 -0
- package/corpus/toolkit/src/onboarding/index.ts +1 -0
- package/corpus/toolkit/src/provider.tsx +47 -0
- package/corpus/toolkit/src/sharing/VisibilityBadge.tsx +37 -0
- package/corpus/toolkit/src/sharing/index.ts +4 -0
- package/corpus/toolkit/src/styles.css +21 -0
- package/corpus/toolkit/src/ui/accordion.tsx +56 -0
- package/corpus/toolkit/src/ui/alert-dialog.tsx +141 -0
- package/corpus/toolkit/src/ui/alert.tsx +59 -0
- package/corpus/toolkit/src/ui/aspect-ratio.tsx +5 -0
- package/corpus/toolkit/src/ui/avatar.tsx +48 -0
- package/corpus/toolkit/src/ui/badge.tsx +37 -0
- package/corpus/toolkit/src/ui/breadcrumb.tsx +115 -0
- package/corpus/toolkit/src/ui/button.tsx +78 -0
- package/corpus/toolkit/src/ui/calendar.tsx +214 -0
- package/corpus/toolkit/src/ui/card.tsx +86 -0
- package/corpus/toolkit/src/ui/carousel.tsx +260 -0
- package/corpus/toolkit/src/ui/chart.tsx +375 -0
- package/corpus/toolkit/src/ui/checkbox.tsx +28 -0
- package/corpus/toolkit/src/ui/collapsible.tsx +9 -0
- package/corpus/toolkit/src/ui/command.tsx +174 -0
- package/corpus/toolkit/src/ui/context-menu.tsx +202 -0
- package/corpus/toolkit/src/ui/date-picker.tsx +64 -0
- package/corpus/toolkit/src/ui/dialog.tsx +146 -0
- package/corpus/toolkit/src/ui/drawer.tsx +126 -0
- package/corpus/toolkit/src/ui/dropdown-menu.tsx +218 -0
- package/corpus/toolkit/src/ui/form.tsx +177 -0
- package/corpus/toolkit/src/ui/hover-card.tsx +27 -0
- package/corpus/toolkit/src/ui/index.ts +52 -0
- package/corpus/toolkit/src/ui/input-otp.tsx +69 -0
- package/corpus/toolkit/src/ui/input.tsx +22 -0
- package/corpus/toolkit/src/ui/label.tsx +24 -0
- package/corpus/toolkit/src/ui/logo.tsx +36 -0
- package/corpus/toolkit/src/ui/menubar.tsx +235 -0
- package/corpus/toolkit/src/ui/navigation-menu.tsx +128 -0
- package/corpus/toolkit/src/ui/pagination.tsx +121 -0
- package/corpus/toolkit/src/ui/popover.tsx +44 -0
- package/corpus/toolkit/src/ui/progress.tsx +26 -0
- package/corpus/toolkit/src/ui/radio-group.tsx +42 -0
- package/corpus/toolkit/src/ui/resizable.tsx +43 -0
- package/corpus/toolkit/src/ui/scroll-area.tsx +46 -0
- package/corpus/toolkit/src/ui/select.tsx +158 -0
- package/corpus/toolkit/src/ui/separator.tsx +29 -0
- package/corpus/toolkit/src/ui/sheet.tsx +160 -0
- package/corpus/toolkit/src/ui/sidebar.tsx +777 -0
- package/corpus/toolkit/src/ui/skeleton.tsx +18 -0
- package/corpus/toolkit/src/ui/slider.tsx +26 -0
- package/corpus/toolkit/src/ui/sonner.tsx +58 -0
- package/corpus/toolkit/src/ui/spinner.tsx +17 -0
- package/corpus/toolkit/src/ui/switch.tsx +27 -0
- package/corpus/toolkit/src/ui/table.tsx +117 -0
- package/corpus/toolkit/src/ui/tabs.tsx +53 -0
- package/corpus/toolkit/src/ui/textarea.tsx +23 -0
- package/corpus/toolkit/src/ui/toast.tsx +127 -0
- package/corpus/toolkit/src/ui/toaster.tsx +33 -0
- package/corpus/toolkit/src/ui/toggle-group.tsx +59 -0
- package/corpus/toolkit/src/ui/toggle.tsx +43 -0
- package/corpus/toolkit/src/ui/tooltip.tsx +53 -0
- package/corpus/toolkit/src/ui/use-toast.ts +3 -0
- package/corpus/toolkit/src/utils.ts +8 -0
- package/corpus/toolkit/tsconfig.json +23 -0
- package/dist/cli/atomic-json-file.d.ts +30 -0
- package/dist/cli/atomic-json-file.d.ts.map +1 -0
- package/dist/cli/atomic-json-file.js +240 -0
- package/dist/cli/atomic-json-file.js.map +1 -0
- package/dist/cli/claude-code-participant.d.ts +77 -0
- package/dist/cli/claude-code-participant.d.ts.map +1 -0
- package/dist/cli/claude-code-participant.js +355 -0
- package/dist/cli/claude-code-participant.js.map +1 -0
- package/dist/cli/code-agent-executor.d.ts +8 -9
- package/dist/cli/code-agent-executor.d.ts.map +1 -1
- package/dist/cli/code-agent-executor.js +27 -13
- package/dist/cli/code-agent-executor.js.map +1 -1
- package/dist/cli/code-agent-runs.concurrent-worker.d.ts +2 -0
- package/dist/cli/code-agent-runs.concurrent-worker.d.ts.map +1 -0
- package/dist/cli/code-agent-runs.concurrent-worker.js +32 -0
- package/dist/cli/code-agent-runs.concurrent-worker.js.map +1 -0
- package/dist/cli/code-agent-runs.d.ts +5 -0
- package/dist/cli/code-agent-runs.d.ts.map +1 -1
- package/dist/cli/code-agent-runs.js +51 -33
- package/dist/cli/code-agent-runs.js.map +1 -1
- package/dist/cli/codex-cli-participant.d.ts +77 -0
- package/dist/cli/codex-cli-participant.d.ts.map +1 -0
- package/dist/cli/codex-cli-participant.js +354 -0
- package/dist/cli/codex-cli-participant.js.map +1 -0
- package/dist/cli/multi-frontier-runs.d.ts +246 -0
- package/dist/cli/multi-frontier-runs.d.ts.map +1 -0
- package/dist/cli/multi-frontier-runs.js +1247 -0
- package/dist/cli/multi-frontier-runs.js.map +1 -0
- package/dist/client/chat/ChatHistoryList.d.ts +1 -87
- package/dist/client/chat/ChatHistoryList.d.ts.map +1 -1
- package/dist/client/chat/ChatHistoryList.js +1 -82
- package/dist/client/chat/ChatHistoryList.js.map +1 -1
- package/dist/coding-tools/index.d.ts +1 -0
- package/dist/coding-tools/index.d.ts.map +1 -1
- package/dist/coding-tools/index.js +25 -7
- package/dist/coding-tools/index.js.map +1 -1
- package/dist/collab/awareness.d.ts +2 -2
- package/dist/collab/awareness.d.ts.map +1 -1
- package/dist/embeddings/index.d.ts +24 -0
- package/dist/embeddings/index.d.ts.map +1 -0
- package/dist/embeddings/index.js +172 -0
- package/dist/embeddings/index.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/integrations/index.d.ts +2 -1
- package/dist/integrations/index.d.ts.map +1 -1
- package/dist/integrations/index.js +2 -1
- package/dist/integrations/index.js.map +1 -1
- package/dist/integrations/slack-manifest.d.ts +1 -1
- package/dist/integrations/slack-oauth.d.ts +1 -1
- package/dist/integrations/slack-oauth.d.ts.map +1 -1
- package/dist/integrations/slack-oauth.js +1 -0
- package/dist/integrations/slack-oauth.js.map +1 -1
- package/dist/integrations/webhook-delivery.d.ts +23 -0
- package/dist/integrations/webhook-delivery.d.ts.map +1 -0
- package/dist/integrations/webhook-delivery.js +32 -0
- package/dist/integrations/webhook-delivery.js.map +1 -0
- package/dist/notifications/channels.d.ts.map +1 -1
- package/dist/notifications/channels.js +4 -9
- package/dist/notifications/channels.js.map +1 -1
- package/dist/notifications/routes.d.ts +3 -3
- package/dist/progress/routes.d.ts +1 -1
- package/dist/provider-api/actions/custom-provider-registration.d.ts +136 -0
- package/dist/provider-api/actions/custom-provider-registration.d.ts.map +1 -0
- package/dist/provider-api/actions/custom-provider-registration.js +154 -0
- package/dist/provider-api/actions/custom-provider-registration.js.map +1 -0
- package/dist/provider-api/actions/delete-staged-dataset.d.ts +1 -1
- package/dist/provider-api/actions/delete-staged-dataset.d.ts.map +1 -1
- package/dist/provider-api/actions/delete-staged-dataset.js +3 -34
- package/dist/provider-api/actions/delete-staged-dataset.js.map +1 -1
- package/dist/provider-api/actions/list-staged-datasets.d.ts +2 -3
- package/dist/provider-api/actions/list-staged-datasets.d.ts.map +1 -1
- package/dist/provider-api/actions/list-staged-datasets.js +3 -40
- package/dist/provider-api/actions/list-staged-datasets.js.map +1 -1
- package/dist/provider-api/actions/provider-api-audit.d.ts +7 -0
- package/dist/provider-api/actions/provider-api-audit.d.ts.map +1 -0
- package/dist/provider-api/actions/provider-api-audit.js +74 -0
- package/dist/provider-api/actions/provider-api-audit.js.map +1 -0
- package/dist/provider-api/actions/provider-api.d.ts +370 -0
- package/dist/provider-api/actions/provider-api.d.ts.map +1 -0
- package/dist/provider-api/actions/provider-api.js +280 -0
- package/dist/provider-api/actions/provider-api.js.map +1 -0
- package/dist/provider-api/actions/query-staged-dataset.d.ts +1 -1
- package/dist/provider-api/actions/query-staged-dataset.d.ts.map +1 -1
- package/dist/provider-api/actions/query-staged-dataset.js +3 -116
- package/dist/provider-api/actions/query-staged-dataset.js.map +1 -1
- package/dist/provider-api/actions/staged-datasets.d.ts +190 -0
- package/dist/provider-api/actions/staged-datasets.d.ts.map +1 -0
- package/dist/provider-api/actions/staged-datasets.js +210 -0
- package/dist/provider-api/actions/staged-datasets.js.map +1 -0
- package/dist/provider-api/gong.d.ts +44 -0
- package/dist/provider-api/gong.d.ts.map +1 -0
- package/dist/provider-api/gong.js +56 -0
- package/dist/provider-api/gong.js.map +1 -0
- package/dist/resources/handlers.d.ts +1 -1
- package/dist/scripts/docs/source-search.d.ts +2 -1
- package/dist/scripts/docs/source-search.d.ts.map +1 -1
- package/dist/scripts/docs/source-search.js +2 -1
- package/dist/scripts/docs/source-search.js.map +1 -1
- package/dist/search/index.d.ts +88 -0
- package/dist/search/index.d.ts.map +1 -0
- package/dist/search/index.js +267 -0
- package/dist/search/index.js.map +1 -0
- package/dist/server/agent-engine-api-key-route.d.ts +1 -1
- package/dist/server/google-oauth-credentials.d.ts +35 -0
- package/dist/server/google-oauth-credentials.d.ts.map +1 -1
- package/dist/server/google-oauth-credentials.js +48 -2
- package/dist/server/google-oauth-credentials.js.map +1 -1
- package/dist/server/index.d.ts +1 -1
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +1 -1
- package/dist/server/index.js.map +1 -1
- package/dist/styles/chat-history-list.css +1 -313
- package/dist/templates/chat/.agents/skills/actions/SKILL.md +32 -12
- package/dist/templates/chat/.agents/skills/agent-native-docs/SKILL.md +10 -0
- package/dist/templates/chat/.agents/skills/customizing-agent-native/SKILL.md +102 -0
- package/dist/templates/chat/.agents/skills/self-modifying-code/SKILL.md +11 -2
- package/dist/templates/chat/.agents/skills/upgrade-agent-native/SKILL.md +6 -0
- package/dist/templates/chat/AGENTS.md +5 -2
- package/dist/templates/chat/app/components/layout/Sidebar.tsx +51 -157
- package/dist/templates/default/.agents/skills/actions/SKILL.md +32 -12
- package/dist/templates/default/.agents/skills/agent-native-docs/SKILL.md +10 -0
- package/dist/templates/default/.agents/skills/customizing-agent-native/SKILL.md +102 -0
- package/dist/templates/default/.agents/skills/integration-webhooks/SKILL.md +323 -0
- package/dist/templates/default/.agents/skills/onboarding/SKILL.md +56 -0
- package/dist/templates/default/.agents/skills/secrets/SKILL.md +273 -0
- package/dist/templates/default/.agents/skills/self-modifying-code/SKILL.md +11 -2
- package/dist/templates/default/.agents/skills/upgrade-agent-native/SKILL.md +6 -0
- package/dist/templates/default/AGENTS.md +25 -18
- package/dist/templates/headless/.agents/skills/actions/SKILL.md +512 -0
- package/dist/templates/headless/.agents/skills/agent-native-docs/SKILL.md +10 -0
- package/dist/templates/headless/.agents/skills/customizing-agent-native/SKILL.md +102 -0
- package/dist/templates/headless/.agents/skills/integration-webhooks/SKILL.md +323 -0
- package/dist/templates/headless/.agents/skills/secrets/SKILL.md +273 -0
- package/dist/templates/headless/.agents/skills/upgrade-agent-native/SKILL.md +6 -0
- package/dist/templates/headless/AGENTS.md +7 -0
- package/dist/templates/workspace-core/.agents/skills/actions/SKILL.md +32 -12
- package/dist/templates/workspace-core/.agents/skills/agent-native-docs/SKILL.md +10 -0
- package/dist/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
- package/dist/templates/workspace-core/.agents/skills/customizing-agent-native/SKILL.md +102 -0
- package/dist/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +11 -2
- package/dist/templates/workspace-core/.agents/skills/upgrade-agent-native/SKILL.md +6 -0
- package/dist/templates/workspace-core/AGENTS.md +4 -0
- package/dist/templates/workspace-root/AGENTS.md +4 -0
- package/docs/AGENTS.md +7 -0
- package/docs/content/integrations.mdx +63 -2
- package/docs/design/provider-integration-authority.md +117 -0
- package/package.json +9 -2
- package/src/templates/chat/.agents/skills/actions/SKILL.md +32 -12
- package/src/templates/chat/.agents/skills/agent-native-docs/SKILL.md +10 -0
- package/src/templates/chat/.agents/skills/customizing-agent-native/SKILL.md +102 -0
- package/src/templates/chat/.agents/skills/self-modifying-code/SKILL.md +11 -2
- package/src/templates/chat/.agents/skills/upgrade-agent-native/SKILL.md +6 -0
- package/src/templates/chat/AGENTS.md +5 -2
- package/src/templates/chat/app/components/layout/Sidebar.tsx +51 -157
- package/src/templates/default/.agents/skills/actions/SKILL.md +32 -12
- package/src/templates/default/.agents/skills/agent-native-docs/SKILL.md +10 -0
- package/src/templates/default/.agents/skills/customizing-agent-native/SKILL.md +102 -0
- package/src/templates/default/.agents/skills/integration-webhooks/SKILL.md +323 -0
- package/src/templates/default/.agents/skills/onboarding/SKILL.md +56 -0
- package/src/templates/default/.agents/skills/secrets/SKILL.md +273 -0
- package/src/templates/default/.agents/skills/self-modifying-code/SKILL.md +11 -2
- package/src/templates/default/.agents/skills/upgrade-agent-native/SKILL.md +6 -0
- package/src/templates/default/AGENTS.md +25 -18
- package/src/templates/headless/.agents/skills/actions/SKILL.md +512 -0
- package/src/templates/headless/.agents/skills/agent-native-docs/SKILL.md +10 -0
- package/src/templates/headless/.agents/skills/customizing-agent-native/SKILL.md +102 -0
- package/src/templates/headless/.agents/skills/integration-webhooks/SKILL.md +323 -0
- package/src/templates/headless/.agents/skills/secrets/SKILL.md +273 -0
- package/src/templates/headless/.agents/skills/upgrade-agent-native/SKILL.md +6 -0
- package/src/templates/headless/AGENTS.md +7 -0
- package/src/templates/workspace-core/.agents/skills/actions/SKILL.md +32 -12
- package/src/templates/workspace-core/.agents/skills/agent-native-docs/SKILL.md +10 -0
- package/src/templates/workspace-core/.agents/skills/agent-native-toolkit/SKILL.md +6 -0
- package/src/templates/workspace-core/.agents/skills/customizing-agent-native/SKILL.md +102 -0
- package/src/templates/workspace-core/.agents/skills/self-modifying-code/SKILL.md +11 -2
- package/src/templates/workspace-core/.agents/skills/upgrade-agent-native/SKILL.md +6 -0
- package/src/templates/workspace-core/AGENTS.md +4 -0
- package/src/templates/workspace-root/AGENTS.md +4 -0
|
@@ -0,0 +1,355 @@
|
|
|
1
|
+
import { execFile as execFileCallback, spawn } from "node:child_process";
|
|
2
|
+
import { isAbsolute } from "node:path";
|
|
3
|
+
import { StringDecoder } from "node:string_decoder";
|
|
4
|
+
import { promisify } from "node:util";
|
|
5
|
+
const execFile = promisify(execFileCallback);
|
|
6
|
+
const CLAUDE_CODE_VERSION = "2.1.208";
|
|
7
|
+
const WATCHDOG_TOOLS = "Read,Glob,Grep";
|
|
8
|
+
const WATCHDOG_DENIED_TOOLS = "Edit,Write,NotebookEdit,Bash";
|
|
9
|
+
const DRIVER_TOOLS = "Read,Glob,Grep,Edit,Write";
|
|
10
|
+
const DEFAULT_MAX_EVENTS = 2_000;
|
|
11
|
+
const DEFAULT_MAX_STREAM_BYTES = 8 * 1024 * 1024;
|
|
12
|
+
const DEFAULT_MAX_STDERR_BYTES = 128 * 1024;
|
|
13
|
+
const DEFAULT_TIMEOUT_MS = 30 * 60 * 1_000;
|
|
14
|
+
const DEFAULT_TERMINATION_GRACE_MS = 2_000;
|
|
15
|
+
const DEFAULT_FORCE_SETTLE_MS = 250;
|
|
16
|
+
const MAX_ERROR_MESSAGE_LENGTH = 200;
|
|
17
|
+
const SAFE_ENVIRONMENT_KEYS = [
|
|
18
|
+
"PATH",
|
|
19
|
+
"HOME",
|
|
20
|
+
"LANG",
|
|
21
|
+
"LC_ALL",
|
|
22
|
+
"LC_CTYPE",
|
|
23
|
+
"TMPDIR",
|
|
24
|
+
"TMP",
|
|
25
|
+
"TEMP",
|
|
26
|
+
"TERM",
|
|
27
|
+
"NO_COLOR",
|
|
28
|
+
"FORCE_COLOR",
|
|
29
|
+
"USER",
|
|
30
|
+
"LOGNAME",
|
|
31
|
+
"SHELL",
|
|
32
|
+
// Claude Code uses this as its config root; HOME remains required for its
|
|
33
|
+
// default config and macOS Keychain-backed subscription login.
|
|
34
|
+
"CLAUDE_CONFIG_DIR",
|
|
35
|
+
];
|
|
36
|
+
export class ClaudeCodeSubscriptionRequiredError extends Error {
|
|
37
|
+
constructor(message) {
|
|
38
|
+
super(message);
|
|
39
|
+
this.name = "ClaudeCodeSubscriptionRequiredError";
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
export async function readClaudeCodeSubscriptionStatus(options = {}) {
|
|
43
|
+
const execute = options.execute ?? execFile;
|
|
44
|
+
const { stdout } = await execute(resolveCommand(options.command, "claude"), ["auth", "status", "--json"], {
|
|
45
|
+
encoding: "utf8",
|
|
46
|
+
maxBuffer: 128 * 1024,
|
|
47
|
+
env: safeEnvironment(options.env ?? process.env),
|
|
48
|
+
});
|
|
49
|
+
const parsed = JSON.parse(stdout);
|
|
50
|
+
const status = asRecord(parsed);
|
|
51
|
+
if (!status || typeof status.loggedIn !== "boolean") {
|
|
52
|
+
throw new Error("Claude Code returned an invalid authentication status.");
|
|
53
|
+
}
|
|
54
|
+
return {
|
|
55
|
+
loggedIn: status.loggedIn,
|
|
56
|
+
authMethod: readString(status.authMethod),
|
|
57
|
+
apiProvider: readString(status.apiProvider),
|
|
58
|
+
subscriptionType: readString(status.subscriptionType),
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
export async function runClaudeCodeParticipant(options) {
|
|
62
|
+
validateInput(options);
|
|
63
|
+
const env = safeEnvironment(options.env ?? process.env);
|
|
64
|
+
const command = resolveCommand(options.command, "claude");
|
|
65
|
+
const subscription = await (options.preflight
|
|
66
|
+
? options.preflight({ command, env })
|
|
67
|
+
: readClaudeCodeSubscriptionStatus({ command, env }));
|
|
68
|
+
assertClaudeCodeSubscription(subscription);
|
|
69
|
+
if (options.signal?.aborted)
|
|
70
|
+
throw createAbortError();
|
|
71
|
+
const args = buildClaudeCodeParticipantArgs(options);
|
|
72
|
+
const spawnProcess = options.spawnProcess ??
|
|
73
|
+
((command, commandArgs, spawnOptions) => spawn(command, commandArgs, spawnOptions));
|
|
74
|
+
const child = spawnProcess(command, args, {
|
|
75
|
+
cwd: options.cwd,
|
|
76
|
+
env,
|
|
77
|
+
shell: false,
|
|
78
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
79
|
+
});
|
|
80
|
+
return collectClaudeCodeParticipantResult(child, options);
|
|
81
|
+
}
|
|
82
|
+
export function buildClaudeCodeParticipantArgs(options) {
|
|
83
|
+
const args = [
|
|
84
|
+
"--print",
|
|
85
|
+
"--input-format",
|
|
86
|
+
"text",
|
|
87
|
+
"--output-format",
|
|
88
|
+
"stream-json",
|
|
89
|
+
"--verbose",
|
|
90
|
+
"--no-chrome",
|
|
91
|
+
"--disable-slash-commands",
|
|
92
|
+
"--strict-mcp-config",
|
|
93
|
+
"--setting-sources",
|
|
94
|
+
"",
|
|
95
|
+
];
|
|
96
|
+
if (options.role === "watchdog") {
|
|
97
|
+
args.push("--permission-mode", "plan", "--tools", WATCHDOG_TOOLS, "--disallowedTools", WATCHDOG_DENIED_TOOLS);
|
|
98
|
+
}
|
|
99
|
+
else {
|
|
100
|
+
args.push("--permission-mode", "acceptEdits", "--tools", DRIVER_TOOLS);
|
|
101
|
+
}
|
|
102
|
+
const model = readString(options.model);
|
|
103
|
+
if (model)
|
|
104
|
+
args.push("--model", model);
|
|
105
|
+
const sessionId = readString(options.session?.sessionId);
|
|
106
|
+
const resumeSessionId = readString(options.session?.resumeSessionId);
|
|
107
|
+
if (sessionId)
|
|
108
|
+
args.push("--session-id", sessionId);
|
|
109
|
+
if (resumeSessionId)
|
|
110
|
+
args.push("--resume", resumeSessionId);
|
|
111
|
+
if (options.session?.persist !== true)
|
|
112
|
+
args.push("--no-session-persistence");
|
|
113
|
+
return args;
|
|
114
|
+
}
|
|
115
|
+
function collectClaudeCodeParticipantResult(child, options) {
|
|
116
|
+
const maxEvents = boundedLimit(options.maxEvents, DEFAULT_MAX_EVENTS);
|
|
117
|
+
const maxStreamBytes = boundedLimit(options.maxStreamBytes, DEFAULT_MAX_STREAM_BYTES);
|
|
118
|
+
const maxStderrBytes = boundedLimit(options.maxStderrBytes, DEFAULT_MAX_STDERR_BYTES);
|
|
119
|
+
const timeoutMs = boundedDuration(options.timeoutMs, DEFAULT_TIMEOUT_MS);
|
|
120
|
+
const terminationGraceMs = boundedDuration(options.terminationGraceMs, DEFAULT_TERMINATION_GRACE_MS);
|
|
121
|
+
const forceSettleMs = boundedDuration(options.forceSettleMs, DEFAULT_FORCE_SETTLE_MS);
|
|
122
|
+
const decoder = new StringDecoder("utf8");
|
|
123
|
+
const stderrDecoder = new StringDecoder("utf8");
|
|
124
|
+
const events = [];
|
|
125
|
+
let pending = "";
|
|
126
|
+
let streamBytes = 0;
|
|
127
|
+
let stderr = "";
|
|
128
|
+
let stderrBytes = 0;
|
|
129
|
+
let stderrTruncated = false;
|
|
130
|
+
let fatalError;
|
|
131
|
+
return new Promise((resolve, reject) => {
|
|
132
|
+
let settled = false;
|
|
133
|
+
let terminationTimer;
|
|
134
|
+
let forceSettleTimer;
|
|
135
|
+
const timeoutTimer = setTimeout(() => {
|
|
136
|
+
stopWithError(new Error(`Claude Code timed out after ${timeoutMs}ms.`));
|
|
137
|
+
}, timeoutMs);
|
|
138
|
+
timeoutTimer.unref?.();
|
|
139
|
+
const cleanup = () => {
|
|
140
|
+
options.signal?.removeEventListener("abort", abort);
|
|
141
|
+
clearTimeout(timeoutTimer);
|
|
142
|
+
if (terminationTimer)
|
|
143
|
+
clearTimeout(terminationTimer);
|
|
144
|
+
if (forceSettleTimer)
|
|
145
|
+
clearTimeout(forceSettleTimer);
|
|
146
|
+
};
|
|
147
|
+
const finishError = (error) => {
|
|
148
|
+
if (settled)
|
|
149
|
+
return;
|
|
150
|
+
settled = true;
|
|
151
|
+
cleanup();
|
|
152
|
+
reject(safeError(error));
|
|
153
|
+
};
|
|
154
|
+
const stopWithError = (error) => {
|
|
155
|
+
if (fatalError)
|
|
156
|
+
return;
|
|
157
|
+
fatalError = error;
|
|
158
|
+
terminationTimer = setTimeout(() => {
|
|
159
|
+
if (settled)
|
|
160
|
+
return;
|
|
161
|
+
forceSettleTimer = setTimeout(() => {
|
|
162
|
+
finishError(fatalError ?? error);
|
|
163
|
+
}, forceSettleMs);
|
|
164
|
+
forceSettleTimer.unref?.();
|
|
165
|
+
child.kill("SIGKILL");
|
|
166
|
+
}, terminationGraceMs);
|
|
167
|
+
terminationTimer.unref?.();
|
|
168
|
+
child.kill("SIGTERM");
|
|
169
|
+
};
|
|
170
|
+
const abort = () => stopWithError(createAbortError());
|
|
171
|
+
const streamError = (error) => {
|
|
172
|
+
if (!settled)
|
|
173
|
+
stopWithError(error);
|
|
174
|
+
};
|
|
175
|
+
child.stdin.on("error", streamError);
|
|
176
|
+
child.stdout.on("error", streamError);
|
|
177
|
+
child.stderr.on("error", streamError);
|
|
178
|
+
if (options.signal) {
|
|
179
|
+
if (options.signal.aborted)
|
|
180
|
+
abort();
|
|
181
|
+
else
|
|
182
|
+
options.signal.addEventListener("abort", abort, { once: true });
|
|
183
|
+
}
|
|
184
|
+
child.stdout.on("data", (chunk) => {
|
|
185
|
+
if (fatalError)
|
|
186
|
+
return;
|
|
187
|
+
const bytes = Buffer.isBuffer(chunk)
|
|
188
|
+
? chunk.length
|
|
189
|
+
: Buffer.byteLength(chunk);
|
|
190
|
+
streamBytes += bytes;
|
|
191
|
+
if (streamBytes > maxStreamBytes) {
|
|
192
|
+
stopWithError(new Error(`Claude Code stream exceeded ${maxStreamBytes} bytes.`));
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
195
|
+
pending += decoder.write(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));
|
|
196
|
+
try {
|
|
197
|
+
pending = consumeJsonLines(pending, events, maxEvents, options.onEvent);
|
|
198
|
+
}
|
|
199
|
+
catch (error) {
|
|
200
|
+
stopWithError(toError(error));
|
|
201
|
+
}
|
|
202
|
+
});
|
|
203
|
+
child.stderr.on("data", (chunk) => {
|
|
204
|
+
const encoded = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);
|
|
205
|
+
const remaining = Math.max(0, maxStderrBytes - stderrBytes);
|
|
206
|
+
if (remaining === 0) {
|
|
207
|
+
stderrTruncated = true;
|
|
208
|
+
return;
|
|
209
|
+
}
|
|
210
|
+
stderr += stderrDecoder.write(encoded.subarray(0, remaining));
|
|
211
|
+
stderrBytes += Math.min(encoded.length, remaining);
|
|
212
|
+
if (encoded.length > remaining)
|
|
213
|
+
stderrTruncated = true;
|
|
214
|
+
});
|
|
215
|
+
child.once("error", finishError);
|
|
216
|
+
child.once("close", (exitCode, exitSignal) => {
|
|
217
|
+
if (settled)
|
|
218
|
+
return;
|
|
219
|
+
try {
|
|
220
|
+
pending += decoder.end();
|
|
221
|
+
stderr += stderrDecoder.end();
|
|
222
|
+
if (pending.trim()) {
|
|
223
|
+
consumeJsonLine(pending, events, maxEvents, options.onEvent);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
catch (error) {
|
|
227
|
+
fatalError ??= toError(error);
|
|
228
|
+
}
|
|
229
|
+
if (fatalError) {
|
|
230
|
+
finishError(fatalError);
|
|
231
|
+
return;
|
|
232
|
+
}
|
|
233
|
+
if (exitCode !== 0) {
|
|
234
|
+
finishError(new Error(`Claude Code exited with ${exitSignal ?? exitCode ?? "unknown"}${stderr ? `: ${summarizeStderr(stderr)}` : ""}`));
|
|
235
|
+
return;
|
|
236
|
+
}
|
|
237
|
+
settled = true;
|
|
238
|
+
cleanup();
|
|
239
|
+
resolve({
|
|
240
|
+
exitCode: 0,
|
|
241
|
+
events,
|
|
242
|
+
stderr: sanitizeStderr(stderr),
|
|
243
|
+
stderrTruncated,
|
|
244
|
+
});
|
|
245
|
+
});
|
|
246
|
+
try {
|
|
247
|
+
child.stdin.end(options.prompt);
|
|
248
|
+
}
|
|
249
|
+
catch (error) {
|
|
250
|
+
stopWithError(toError(error));
|
|
251
|
+
}
|
|
252
|
+
});
|
|
253
|
+
}
|
|
254
|
+
function consumeJsonLines(value, events, maxEvents, onEvent) {
|
|
255
|
+
let start = 0;
|
|
256
|
+
let newline = value.indexOf("\n", start);
|
|
257
|
+
while (newline !== -1) {
|
|
258
|
+
consumeJsonLine(value.slice(start, newline), events, maxEvents, onEvent);
|
|
259
|
+
start = newline + 1;
|
|
260
|
+
newline = value.indexOf("\n", start);
|
|
261
|
+
}
|
|
262
|
+
return value.slice(start);
|
|
263
|
+
}
|
|
264
|
+
function consumeJsonLine(line, events, maxEvents, onEvent) {
|
|
265
|
+
const trimmed = line.trim();
|
|
266
|
+
if (!trimmed)
|
|
267
|
+
return;
|
|
268
|
+
if (events.length >= maxEvents) {
|
|
269
|
+
throw new Error(`Claude Code stream exceeded ${maxEvents} events.`);
|
|
270
|
+
}
|
|
271
|
+
const parsed = JSON.parse(trimmed);
|
|
272
|
+
const event = asRecord(parsed);
|
|
273
|
+
if (!event)
|
|
274
|
+
throw new Error("Claude Code emitted a non-object JSON event.");
|
|
275
|
+
events.push(event);
|
|
276
|
+
onEvent?.(event);
|
|
277
|
+
}
|
|
278
|
+
function assertClaudeCodeSubscription(status) {
|
|
279
|
+
if (!status.loggedIn ||
|
|
280
|
+
status.authMethod !== "claude.ai" ||
|
|
281
|
+
status.apiProvider !== "firstParty" ||
|
|
282
|
+
!readString(status.subscriptionType)) {
|
|
283
|
+
throw new ClaudeCodeSubscriptionRequiredError("Claude Code must be signed in with a Claude subscription. API-key and third-party provider fallback are disabled.");
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
function safeEnvironment(input) {
|
|
287
|
+
return Object.fromEntries(SAFE_ENVIRONMENT_KEYS.flatMap((key) => typeof input[key] === "string" ? [[key, input[key]]] : []));
|
|
288
|
+
}
|
|
289
|
+
function validateInput(options) {
|
|
290
|
+
if (!readString(options.prompt))
|
|
291
|
+
throw new Error("Claude Code prompt is required.");
|
|
292
|
+
if (!readString(options.cwd))
|
|
293
|
+
throw new Error("Claude Code cwd is required.");
|
|
294
|
+
if (options.session?.sessionId && options.session.resumeSessionId) {
|
|
295
|
+
throw new Error("Choose either a new Claude session id or a resume id.");
|
|
296
|
+
}
|
|
297
|
+
resolveCommand(options.command, "claude");
|
|
298
|
+
}
|
|
299
|
+
function boundedLimit(value, maximum) {
|
|
300
|
+
return Number.isSafeInteger(value) && (value ?? 0) > 0
|
|
301
|
+
? Math.min(value, maximum)
|
|
302
|
+
: maximum;
|
|
303
|
+
}
|
|
304
|
+
function boundedDuration(value, fallback) {
|
|
305
|
+
return Number.isSafeInteger(value) && (value ?? 0) > 0
|
|
306
|
+
? Math.min(value, DEFAULT_TIMEOUT_MS)
|
|
307
|
+
: fallback;
|
|
308
|
+
}
|
|
309
|
+
function resolveCommand(command, defaultCommand) {
|
|
310
|
+
const value = readString(command) ?? defaultCommand;
|
|
311
|
+
if (value === defaultCommand)
|
|
312
|
+
return value;
|
|
313
|
+
if (value.includes("\0") || !isAbsolute(value)) {
|
|
314
|
+
throw new Error("Claude Code command must be an absolute executable path.");
|
|
315
|
+
}
|
|
316
|
+
return value;
|
|
317
|
+
}
|
|
318
|
+
function createAbortError() {
|
|
319
|
+
const error = new Error("Claude Code participant was canceled.");
|
|
320
|
+
error.name = "AbortError";
|
|
321
|
+
return error;
|
|
322
|
+
}
|
|
323
|
+
function toError(value) {
|
|
324
|
+
return value instanceof Error ? value : new Error(String(value));
|
|
325
|
+
}
|
|
326
|
+
function safeError(error) {
|
|
327
|
+
const safe = new Error(summarizeStderr(error.message));
|
|
328
|
+
safe.name = error.name;
|
|
329
|
+
return safe;
|
|
330
|
+
}
|
|
331
|
+
function summarizeStderr(value) {
|
|
332
|
+
return sanitizeStderr(value)
|
|
333
|
+
.replace(/\s+/g, " ")
|
|
334
|
+
.trim()
|
|
335
|
+
.slice(0, MAX_ERROR_MESSAGE_LENGTH);
|
|
336
|
+
}
|
|
337
|
+
function sanitizeStderr(value) {
|
|
338
|
+
return value
|
|
339
|
+
.replace(/\bBearer\s+\S+/gi, "Bearer <redacted>")
|
|
340
|
+
.replace(/(["']?)([A-Za-z_]*(?:token|key|secret|password)[A-Za-z_]*)\1\s*([=:])\s*(?:"[^"]*"|'[^']*'|[^\s,;}\]]+)/gi, '$1$2$1$3"<redacted>"')
|
|
341
|
+
.replace(/\b(?:sk|rk)-[A-Za-z0-9_-]{8,}\b/g, "<redacted>");
|
|
342
|
+
}
|
|
343
|
+
function readString(value) {
|
|
344
|
+
if (typeof value !== "string")
|
|
345
|
+
return undefined;
|
|
346
|
+
const trimmed = value.trim();
|
|
347
|
+
return trimmed || undefined;
|
|
348
|
+
}
|
|
349
|
+
function asRecord(value) {
|
|
350
|
+
return value !== null && typeof value === "object" && !Array.isArray(value)
|
|
351
|
+
? value
|
|
352
|
+
: undefined;
|
|
353
|
+
}
|
|
354
|
+
export const CLAUDE_CODE_PARTICIPANT_TESTED_VERSION = CLAUDE_CODE_VERSION;
|
|
355
|
+
//# sourceMappingURL=claude-code-participant.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-code-participant.js","sourceRoot":"","sources":["../../src/cli/claude-code-participant.ts"],"names":[],"mappings":"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","sourcesContent":["import { execFile as execFileCallback, spawn } from \"node:child_process\";\nimport { isAbsolute } from \"node:path\";\nimport type { Readable, Writable } from \"node:stream\";\nimport { StringDecoder } from \"node:string_decoder\";\nimport { promisify } from \"node:util\";\n\nconst execFile = promisify(execFileCallback);\n\nconst CLAUDE_CODE_VERSION = \"2.1.208\";\nconst WATCHDOG_TOOLS = \"Read,Glob,Grep\";\nconst WATCHDOG_DENIED_TOOLS = \"Edit,Write,NotebookEdit,Bash\";\nconst DRIVER_TOOLS = \"Read,Glob,Grep,Edit,Write\";\nconst DEFAULT_MAX_EVENTS = 2_000;\nconst DEFAULT_MAX_STREAM_BYTES = 8 * 1024 * 1024;\nconst DEFAULT_MAX_STDERR_BYTES = 128 * 1024;\nconst DEFAULT_TIMEOUT_MS = 30 * 60 * 1_000;\nconst DEFAULT_TERMINATION_GRACE_MS = 2_000;\nconst DEFAULT_FORCE_SETTLE_MS = 250;\nconst MAX_ERROR_MESSAGE_LENGTH = 200;\n\nconst SAFE_ENVIRONMENT_KEYS = [\n \"PATH\",\n \"HOME\",\n \"LANG\",\n \"LC_ALL\",\n \"LC_CTYPE\",\n \"TMPDIR\",\n \"TMP\",\n \"TEMP\",\n \"TERM\",\n \"NO_COLOR\",\n \"FORCE_COLOR\",\n \"USER\",\n \"LOGNAME\",\n \"SHELL\",\n // Claude Code uses this as its config root; HOME remains required for its\n // default config and macOS Keychain-backed subscription login.\n \"CLAUDE_CONFIG_DIR\",\n] as const;\n\nexport type ClaudeCodeParticipantRole = \"watchdog\" | \"driver\";\n\nexport interface ClaudeCodeSubscriptionStatus {\n loggedIn: boolean;\n authMethod?: string;\n apiProvider?: string;\n subscriptionType?: string;\n}\n\nexport interface ClaudeCodeParticipantSession {\n sessionId?: string;\n resumeSessionId?: string;\n persist?: boolean;\n}\n\nexport interface ClaudeCodeParticipantEvent {\n [key: string]: unknown;\n}\n\nexport interface ClaudeCodeParticipantResult {\n exitCode: number;\n events: ClaudeCodeParticipantEvent[];\n stderr: string;\n stderrTruncated: boolean;\n}\n\nexport interface ClaudeCodeParticipantChild {\n stdin: Writable;\n stdout: Readable;\n stderr: Readable;\n kill(signal?: NodeJS.Signals): boolean;\n once(event: \"error\", listener: (error: Error) => void): unknown;\n once(\n event: \"close\",\n listener: (code: number | null, signal: NodeJS.Signals | null) => void,\n ): unknown;\n}\n\nexport interface ClaudeCodeParticipantSpawnOptions {\n cwd: string;\n env: NodeJS.ProcessEnv;\n shell: false;\n stdio: [\"pipe\", \"pipe\", \"pipe\"];\n}\n\nexport type ClaudeCodeParticipantSpawn = (\n command: string,\n args: string[],\n options: ClaudeCodeParticipantSpawnOptions,\n) => ClaudeCodeParticipantChild;\n\nexport interface RunClaudeCodeParticipantOptions {\n role: ClaudeCodeParticipantRole;\n prompt: string;\n cwd: string;\n model?: string;\n session?: ClaudeCodeParticipantSession;\n /** Either the fixed CLI name or an absolute executable path for packaged apps. */\n command?: string;\n signal?: AbortSignal;\n env?: NodeJS.ProcessEnv;\n maxEvents?: number;\n maxStreamBytes?: number;\n maxStderrBytes?: number;\n timeoutMs?: number;\n terminationGraceMs?: number;\n forceSettleMs?: number;\n onEvent?: (event: ClaudeCodeParticipantEvent) => void;\n preflight?: (\n context: ClaudeCodeParticipantPreflightContext,\n ) => Promise<ClaudeCodeSubscriptionStatus>;\n spawnProcess?: ClaudeCodeParticipantSpawn;\n}\n\nexport interface ClaudeCodeParticipantPreflightContext {\n command: string;\n env: NodeJS.ProcessEnv;\n}\n\nexport class ClaudeCodeSubscriptionRequiredError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"ClaudeCodeSubscriptionRequiredError\";\n }\n}\n\nexport interface ClaudeCodeSubscriptionStatusOptions {\n command?: string;\n env?: NodeJS.ProcessEnv;\n execute?: typeof execFile;\n}\n\nexport async function readClaudeCodeSubscriptionStatus(\n options: ClaudeCodeSubscriptionStatusOptions = {},\n): Promise<ClaudeCodeSubscriptionStatus> {\n const execute = options.execute ?? execFile;\n const { stdout } = await execute(\n resolveCommand(options.command, \"claude\"),\n [\"auth\", \"status\", \"--json\"],\n {\n encoding: \"utf8\",\n maxBuffer: 128 * 1024,\n env: safeEnvironment(options.env ?? process.env),\n },\n );\n const parsed = JSON.parse(stdout) as unknown;\n const status = asRecord(parsed);\n if (!status || typeof status.loggedIn !== \"boolean\") {\n throw new Error(\"Claude Code returned an invalid authentication status.\");\n }\n return {\n loggedIn: status.loggedIn,\n authMethod: readString(status.authMethod),\n apiProvider: readString(status.apiProvider),\n subscriptionType: readString(status.subscriptionType),\n };\n}\n\nexport async function runClaudeCodeParticipant(\n options: RunClaudeCodeParticipantOptions,\n): Promise<ClaudeCodeParticipantResult> {\n validateInput(options);\n const env = safeEnvironment(options.env ?? process.env);\n const command = resolveCommand(options.command, \"claude\");\n const subscription = await (options.preflight\n ? options.preflight({ command, env })\n : readClaudeCodeSubscriptionStatus({ command, env }));\n assertClaudeCodeSubscription(subscription);\n if (options.signal?.aborted) throw createAbortError();\n\n const args = buildClaudeCodeParticipantArgs(options);\n const spawnProcess =\n options.spawnProcess ??\n ((command, commandArgs, spawnOptions) =>\n spawn(command, commandArgs, spawnOptions));\n const child = spawnProcess(command, args, {\n cwd: options.cwd,\n env,\n shell: false,\n stdio: [\"pipe\", \"pipe\", \"pipe\"],\n });\n\n return collectClaudeCodeParticipantResult(child, options);\n}\n\nexport function buildClaudeCodeParticipantArgs(\n options: Pick<RunClaudeCodeParticipantOptions, \"role\" | \"model\" | \"session\">,\n): string[] {\n const args = [\n \"--print\",\n \"--input-format\",\n \"text\",\n \"--output-format\",\n \"stream-json\",\n \"--verbose\",\n \"--no-chrome\",\n \"--disable-slash-commands\",\n \"--strict-mcp-config\",\n \"--setting-sources\",\n \"\",\n ];\n\n if (options.role === \"watchdog\") {\n args.push(\n \"--permission-mode\",\n \"plan\",\n \"--tools\",\n WATCHDOG_TOOLS,\n \"--disallowedTools\",\n WATCHDOG_DENIED_TOOLS,\n );\n } else {\n args.push(\"--permission-mode\", \"acceptEdits\", \"--tools\", DRIVER_TOOLS);\n }\n\n const model = readString(options.model);\n if (model) args.push(\"--model\", model);\n const sessionId = readString(options.session?.sessionId);\n const resumeSessionId = readString(options.session?.resumeSessionId);\n if (sessionId) args.push(\"--session-id\", sessionId);\n if (resumeSessionId) args.push(\"--resume\", resumeSessionId);\n if (options.session?.persist !== true) args.push(\"--no-session-persistence\");\n return args;\n}\n\nfunction collectClaudeCodeParticipantResult(\n child: ClaudeCodeParticipantChild,\n options: RunClaudeCodeParticipantOptions,\n): Promise<ClaudeCodeParticipantResult> {\n const maxEvents = boundedLimit(options.maxEvents, DEFAULT_MAX_EVENTS);\n const maxStreamBytes = boundedLimit(\n options.maxStreamBytes,\n DEFAULT_MAX_STREAM_BYTES,\n );\n const maxStderrBytes = boundedLimit(\n options.maxStderrBytes,\n DEFAULT_MAX_STDERR_BYTES,\n );\n const timeoutMs = boundedDuration(options.timeoutMs, DEFAULT_TIMEOUT_MS);\n const terminationGraceMs = boundedDuration(\n options.terminationGraceMs,\n DEFAULT_TERMINATION_GRACE_MS,\n );\n const forceSettleMs = boundedDuration(\n options.forceSettleMs,\n DEFAULT_FORCE_SETTLE_MS,\n );\n const decoder = new StringDecoder(\"utf8\");\n const stderrDecoder = new StringDecoder(\"utf8\");\n const events: ClaudeCodeParticipantEvent[] = [];\n let pending = \"\";\n let streamBytes = 0;\n let stderr = \"\";\n let stderrBytes = 0;\n let stderrTruncated = false;\n let fatalError: Error | undefined;\n\n return new Promise((resolve, reject) => {\n let settled = false;\n let terminationTimer: NodeJS.Timeout | undefined;\n let forceSettleTimer: NodeJS.Timeout | undefined;\n const timeoutTimer = setTimeout(() => {\n stopWithError(new Error(`Claude Code timed out after ${timeoutMs}ms.`));\n }, timeoutMs);\n timeoutTimer.unref?.();\n const cleanup = () => {\n options.signal?.removeEventListener(\"abort\", abort);\n clearTimeout(timeoutTimer);\n if (terminationTimer) clearTimeout(terminationTimer);\n if (forceSettleTimer) clearTimeout(forceSettleTimer);\n };\n const finishError = (error: Error) => {\n if (settled) return;\n settled = true;\n cleanup();\n reject(safeError(error));\n };\n const stopWithError = (error: Error) => {\n if (fatalError) return;\n fatalError = error;\n terminationTimer = setTimeout(() => {\n if (settled) return;\n forceSettleTimer = setTimeout(() => {\n finishError(fatalError ?? error);\n }, forceSettleMs);\n forceSettleTimer.unref?.();\n child.kill(\"SIGKILL\");\n }, terminationGraceMs);\n terminationTimer.unref?.();\n child.kill(\"SIGTERM\");\n };\n const abort = () => stopWithError(createAbortError());\n const streamError = (error: Error) => {\n if (!settled) stopWithError(error);\n };\n\n child.stdin.on(\"error\", streamError);\n child.stdout.on(\"error\", streamError);\n child.stderr.on(\"error\", streamError);\n\n if (options.signal) {\n if (options.signal.aborted) abort();\n else options.signal.addEventListener(\"abort\", abort, { once: true });\n }\n\n child.stdout.on(\"data\", (chunk: Buffer | string) => {\n if (fatalError) return;\n const bytes = Buffer.isBuffer(chunk)\n ? chunk.length\n : Buffer.byteLength(chunk);\n streamBytes += bytes;\n if (streamBytes > maxStreamBytes) {\n stopWithError(\n new Error(`Claude Code stream exceeded ${maxStreamBytes} bytes.`),\n );\n return;\n }\n pending += decoder.write(\n Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk),\n );\n try {\n pending = consumeJsonLines(pending, events, maxEvents, options.onEvent);\n } catch (error) {\n stopWithError(toError(error));\n }\n });\n child.stderr.on(\"data\", (chunk: Buffer | string) => {\n const encoded = Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk);\n const remaining = Math.max(0, maxStderrBytes - stderrBytes);\n if (remaining === 0) {\n stderrTruncated = true;\n return;\n }\n stderr += stderrDecoder.write(encoded.subarray(0, remaining));\n stderrBytes += Math.min(encoded.length, remaining);\n if (encoded.length > remaining) stderrTruncated = true;\n });\n child.once(\"error\", finishError);\n child.once(\"close\", (exitCode, exitSignal) => {\n if (settled) return;\n try {\n pending += decoder.end();\n stderr += stderrDecoder.end();\n if (pending.trim()) {\n consumeJsonLine(pending, events, maxEvents, options.onEvent);\n }\n } catch (error) {\n fatalError ??= toError(error);\n }\n if (fatalError) {\n finishError(fatalError);\n return;\n }\n if (exitCode !== 0) {\n finishError(\n new Error(\n `Claude Code exited with ${exitSignal ?? exitCode ?? \"unknown\"}${stderr ? `: ${summarizeStderr(stderr)}` : \"\"}`,\n ),\n );\n return;\n }\n settled = true;\n cleanup();\n resolve({\n exitCode: 0,\n events,\n stderr: sanitizeStderr(stderr),\n stderrTruncated,\n });\n });\n try {\n child.stdin.end(options.prompt);\n } catch (error) {\n stopWithError(toError(error));\n }\n });\n}\n\nfunction consumeJsonLines(\n value: string,\n events: ClaudeCodeParticipantEvent[],\n maxEvents: number,\n onEvent?: (event: ClaudeCodeParticipantEvent) => void,\n): string {\n let start = 0;\n let newline = value.indexOf(\"\\n\", start);\n while (newline !== -1) {\n consumeJsonLine(value.slice(start, newline), events, maxEvents, onEvent);\n start = newline + 1;\n newline = value.indexOf(\"\\n\", start);\n }\n return value.slice(start);\n}\n\nfunction consumeJsonLine(\n line: string,\n events: ClaudeCodeParticipantEvent[],\n maxEvents: number,\n onEvent?: (event: ClaudeCodeParticipantEvent) => void,\n): void {\n const trimmed = line.trim();\n if (!trimmed) return;\n if (events.length >= maxEvents) {\n throw new Error(`Claude Code stream exceeded ${maxEvents} events.`);\n }\n const parsed = JSON.parse(trimmed) as unknown;\n const event = asRecord(parsed);\n if (!event) throw new Error(\"Claude Code emitted a non-object JSON event.\");\n events.push(event);\n onEvent?.(event);\n}\n\nfunction assertClaudeCodeSubscription(\n status: ClaudeCodeSubscriptionStatus,\n): void {\n if (\n !status.loggedIn ||\n status.authMethod !== \"claude.ai\" ||\n status.apiProvider !== \"firstParty\" ||\n !readString(status.subscriptionType)\n ) {\n throw new ClaudeCodeSubscriptionRequiredError(\n \"Claude Code must be signed in with a Claude subscription. API-key and third-party provider fallback are disabled.\",\n );\n }\n}\n\nfunction safeEnvironment(input: NodeJS.ProcessEnv): NodeJS.ProcessEnv {\n return Object.fromEntries(\n SAFE_ENVIRONMENT_KEYS.flatMap((key) =>\n typeof input[key] === \"string\" ? [[key, input[key]]] : [],\n ),\n );\n}\n\nfunction validateInput(options: RunClaudeCodeParticipantOptions): void {\n if (!readString(options.prompt))\n throw new Error(\"Claude Code prompt is required.\");\n if (!readString(options.cwd)) throw new Error(\"Claude Code cwd is required.\");\n if (options.session?.sessionId && options.session.resumeSessionId) {\n throw new Error(\"Choose either a new Claude session id or a resume id.\");\n }\n resolveCommand(options.command, \"claude\");\n}\n\nfunction boundedLimit(value: number | undefined, maximum: number): number {\n return Number.isSafeInteger(value) && (value ?? 0) > 0\n ? Math.min(value as number, maximum)\n : maximum;\n}\n\nfunction boundedDuration(value: number | undefined, fallback: number): number {\n return Number.isSafeInteger(value) && (value ?? 0) > 0\n ? Math.min(value as number, DEFAULT_TIMEOUT_MS)\n : fallback;\n}\n\nfunction resolveCommand(\n command: string | undefined,\n defaultCommand: string,\n): string {\n const value = readString(command) ?? defaultCommand;\n if (value === defaultCommand) return value;\n if (value.includes(\"\\0\") || !isAbsolute(value)) {\n throw new Error(\"Claude Code command must be an absolute executable path.\");\n }\n return value;\n}\n\nfunction createAbortError(): Error {\n const error = new Error(\"Claude Code participant was canceled.\");\n error.name = \"AbortError\";\n return error;\n}\n\nfunction toError(value: unknown): Error {\n return value instanceof Error ? value : new Error(String(value));\n}\n\nfunction safeError(error: Error): Error {\n const safe = new Error(summarizeStderr(error.message));\n safe.name = error.name;\n return safe;\n}\n\nfunction summarizeStderr(value: string): string {\n return sanitizeStderr(value)\n .replace(/\\s+/g, \" \")\n .trim()\n .slice(0, MAX_ERROR_MESSAGE_LENGTH);\n}\n\nfunction sanitizeStderr(value: string): string {\n return value\n .replace(/\\bBearer\\s+\\S+/gi, \"Bearer <redacted>\")\n .replace(\n /([\"']?)([A-Za-z_]*(?:token|key|secret|password)[A-Za-z_]*)\\1\\s*([=:])\\s*(?:\"[^\"]*\"|'[^']*'|[^\\s,;}\\]]+)/gi,\n '$1$2$1$3\"<redacted>\"',\n )\n .replace(/\\b(?:sk|rk)-[A-Za-z0-9_-]{8,}\\b/g, \"<redacted>\");\n}\n\nfunction readString(value: unknown): string | undefined {\n if (typeof value !== \"string\") return undefined;\n const trimmed = value.trim();\n return trimmed || undefined;\n}\n\nfunction asRecord(value: unknown): Record<string, unknown> | undefined {\n return value !== null && typeof value === \"object\" && !Array.isArray(value)\n ? (value as Record<string, unknown>)\n : undefined;\n}\n\nexport const CLAUDE_CODE_PARTICIPANT_TESTED_VERSION = CLAUDE_CODE_VERSION;\n"]}
|
|
@@ -15,6 +15,10 @@ export interface ExecuteCodeAgentRunOptions {
|
|
|
15
15
|
stdout?: NodeJS.WritableStream;
|
|
16
16
|
signal?: AbortSignal;
|
|
17
17
|
}
|
|
18
|
+
interface CodeAgentApprovalExecutionOptions {
|
|
19
|
+
stdout?: NodeJS.WritableStream;
|
|
20
|
+
signal?: AbortSignal;
|
|
21
|
+
}
|
|
18
22
|
export declare function executeCodeAgentRun(options: ExecuteCodeAgentRunOptions): Promise<CodeAgentRunRecord | null>;
|
|
19
23
|
export declare function codeAgentMcpInvocationPolicy(permissionMode: CodeAgentPermissionMode): McpToolInvocationPolicy;
|
|
20
24
|
export declare function executeExistingCodeAgentRun(runId: string, options?: Omit<ExecuteCodeAgentRunOptions, "runId">): Promise<CodeAgentRunRecord | null>;
|
|
@@ -23,20 +27,14 @@ export declare function executeExistingCodeAgentRun(runId: string, options?: Omi
|
|
|
23
27
|
* and auto-resume. Future occurrences of this exact command will bypass the
|
|
24
28
|
* approval gate without prompting.
|
|
25
29
|
*/
|
|
26
|
-
export declare function executeApproveAlwaysCodeAgentApproval(runId: string, options?:
|
|
27
|
-
|
|
28
|
-
}): Promise<CodeAgentRunRecord | null>;
|
|
29
|
-
export declare function executePendingCodeAgentApproval(runId: string, options?: {
|
|
30
|
-
stdout?: NodeJS.WritableStream;
|
|
31
|
-
}): Promise<CodeAgentRunRecord | null>;
|
|
30
|
+
export declare function executeApproveAlwaysCodeAgentApproval(runId: string, options?: CodeAgentApprovalExecutionOptions): Promise<CodeAgentRunRecord | null>;
|
|
31
|
+
export declare function executePendingCodeAgentApproval(runId: string, options?: CodeAgentApprovalExecutionOptions): Promise<CodeAgentRunRecord | null>;
|
|
32
32
|
/**
|
|
33
33
|
* Deny a pending approval: record the denial, feed it back to the model as a
|
|
34
34
|
* "command denied by user" result, and immediately resume the run so the model
|
|
35
35
|
* can adapt its plan without leaving the run dangling.
|
|
36
36
|
*/
|
|
37
|
-
export declare function executeDenyCodeAgentApproval(runId: string, options?:
|
|
38
|
-
stdout?: NodeJS.WritableStream;
|
|
39
|
-
}): Promise<CodeAgentRunRecord | null>;
|
|
37
|
+
export declare function executeDenyCodeAgentApproval(runId: string, options?: CodeAgentApprovalExecutionOptions): Promise<CodeAgentRunRecord | null>;
|
|
40
38
|
/**
|
|
41
39
|
* Reconstruct a sequence of EngineMessage objects from transcript events,
|
|
42
40
|
* preserving the native tool-call / tool-result pair structure that models
|
|
@@ -86,4 +84,5 @@ export type CodeAgentCommandPermission = {
|
|
|
86
84
|
};
|
|
87
85
|
export declare function classifyCodeAgentCommandPermission(command: string): CodeAgentCommandPermission;
|
|
88
86
|
export declare function writeCodeAgentUsageSnapshot(cwd: string, usage: AgentLoopUsage | null): void;
|
|
87
|
+
export {};
|
|
89
88
|
//# sourceMappingURL=code-agent-executor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"code-agent-executor.d.ts","sourceRoot":"","sources":["../../src/cli/code-agent-executor.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EACV,WAAW,EAEX,aAAa,EAEd,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAIL,KAAK,cAAc,EACpB,MAAM,8BAA8B,CAAC;AAMtC,OAAO,EAEL,KAAK,qBAAqB,EAC3B,MAAM,sCAAsC,CAAC;AAS9C,OAAO,EAIL,KAAK,uBAAuB,EAC7B,MAAM,wBAAwB,CAAC;AAMhC,OAAO,EAEL,KAAK,eAAe,EACrB,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EAQL,KAAK,uBAAuB,EAC5B,KAAK,kBAAkB,EACxB,MAAM,sBAAsB,CAAC;AAE9B,MAAM,WAAW,0BAA0B;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,WAAW,CAAC,EAAE,qBAAqB,EAAE,CAAC;IACtC,MAAM,CAAC,EAAE,MAAM,CAAC,cAAc,CAAC;IAC/B,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;
|
|
1
|
+
{"version":3,"file":"code-agent-executor.d.ts","sourceRoot":"","sources":["../../src/cli/code-agent-executor.ts"],"names":[],"mappings":"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"}
|
|
@@ -462,35 +462,43 @@ async function executeCodexCliRun(options) {
|
|
|
462
462
|
signal: options.signal,
|
|
463
463
|
});
|
|
464
464
|
if (result.exitCode !== 0) {
|
|
465
|
+
const interrupted = options.signal?.aborted === true;
|
|
465
466
|
const message = result.error ??
|
|
466
467
|
result.stderr.trim() ??
|
|
467
468
|
`Codex CLI exited with ${result.exitSignal ?? result.exitCode}.`;
|
|
468
|
-
|
|
469
|
+
const summary = interrupted
|
|
470
|
+
? "Codex CLI run paused."
|
|
471
|
+
: `Codex CLI run failed: ${message}`;
|
|
472
|
+
options.stdout?.write(`\n${summary}\n`);
|
|
469
473
|
appendCodeAgentTranscriptEvent({
|
|
470
474
|
runId: options.run.id,
|
|
471
475
|
kind: "status",
|
|
472
|
-
message:
|
|
476
|
+
message: summary,
|
|
473
477
|
metadata: {
|
|
474
|
-
status: "errored",
|
|
475
|
-
phase: "error",
|
|
478
|
+
status: interrupted ? "paused" : "errored",
|
|
479
|
+
phase: interrupted ? "paused" : "error",
|
|
476
480
|
engine: CODEX_CLI_ENGINE_NAME,
|
|
477
481
|
exitCode: result.exitCode,
|
|
478
482
|
exitSignal: result.exitSignal,
|
|
479
483
|
},
|
|
480
484
|
});
|
|
481
485
|
return updateCodeAgentRunRecord(options.run.id, {
|
|
482
|
-
status:
|
|
483
|
-
phase:
|
|
486
|
+
status: interrupted ? "paused" : "errored",
|
|
487
|
+
phase: interrupted ? "paused" : "error",
|
|
484
488
|
progress: {
|
|
485
|
-
label:
|
|
489
|
+
label: interrupted ? "Paused" : "Error",
|
|
486
490
|
completed: 0,
|
|
487
491
|
total: 1,
|
|
488
|
-
failed:
|
|
492
|
+
failed: interrupted ? 0 : 1,
|
|
489
493
|
percent: 0,
|
|
490
494
|
},
|
|
491
495
|
metadata: {
|
|
492
|
-
|
|
493
|
-
|
|
496
|
+
...(interrupted
|
|
497
|
+
? { executionPausedAt: new Date().toISOString() }
|
|
498
|
+
: {
|
|
499
|
+
executionError: message,
|
|
500
|
+
executionErroredAt: new Date().toISOString(),
|
|
501
|
+
}),
|
|
494
502
|
engine: CODEX_CLI_ENGINE_NAME,
|
|
495
503
|
model: model ?? "codex-default",
|
|
496
504
|
},
|
|
@@ -729,7 +737,7 @@ export async function executePendingCodeAgentApproval(runId, options = {}) {
|
|
|
729
737
|
command: approval.command,
|
|
730
738
|
},
|
|
731
739
|
});
|
|
732
|
-
const result = await runCodingCommand(approval.command, record.cwd || process.cwd(), DEFAULT_COMMAND_TIMEOUT_MS);
|
|
740
|
+
const result = await runCodingCommand(approval.command, record.cwd || process.cwd(), DEFAULT_COMMAND_TIMEOUT_MS, { signal: options.signal });
|
|
733
741
|
const summary = truncateCodingOutput([
|
|
734
742
|
`Approved command finished with exit code ${result.code}.`,
|
|
735
743
|
result.timedOut ? "Timed out: true" : "",
|
|
@@ -772,7 +780,10 @@ export async function executePendingCodeAgentApproval(runId, options = {}) {
|
|
|
772
780
|
message: "Resuming run after approval.",
|
|
773
781
|
metadata: { status: "running", phase: "approval-resuming" },
|
|
774
782
|
});
|
|
775
|
-
return executeExistingCodeAgentRun(runId, {
|
|
783
|
+
return executeExistingCodeAgentRun(runId, {
|
|
784
|
+
stdout: options.stdout,
|
|
785
|
+
signal: options.signal,
|
|
786
|
+
});
|
|
776
787
|
}
|
|
777
788
|
/**
|
|
778
789
|
* Deny a pending approval: record the denial, feed it back to the model as a
|
|
@@ -820,7 +831,10 @@ export async function executeDenyCodeAgentApproval(runId, options = {}) {
|
|
|
820
831
|
message: "Resuming run after denial — model will adapt its plan.",
|
|
821
832
|
metadata: { status: "running", phase: "approval-denied-resuming" },
|
|
822
833
|
});
|
|
823
|
-
return executeExistingCodeAgentRun(runId, {
|
|
834
|
+
return executeExistingCodeAgentRun(runId, {
|
|
835
|
+
stdout: options.stdout,
|
|
836
|
+
signal: options.signal,
|
|
837
|
+
});
|
|
824
838
|
}
|
|
825
839
|
function latestUserPrompt(runId) {
|
|
826
840
|
const events = listCodeAgentTranscriptEvents(runId);
|