@sentry/junior 0.216.0 → 0.218.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/dist/{agent-BFKt9huN.js → agent-C-wRol8n.js} +181 -39
- package/dist/{agent-hooks-pyhfSnAL.js → agent-hooks-Au93EfEr.js} +6 -6
- package/dist/{agent-runner-CIiziOcz.js → agent-runner-skcXibgb.js} +5 -5
- package/dist/api.js +15 -15
- package/dist/{app-D4nNdzPG.d.ts → app-BYD2Nyji.d.ts} +1 -1
- package/dist/app.d.ts +2 -2
- package/dist/app.js +29 -29
- package/dist/{auth-pause-state-BKGc9Y8O.js → auth-pause-state-CU71X-6Z.js} +6 -6
- package/dist/{briefs-Bq5vouaO.js → briefs-Dcdrr46e.js} +2 -2
- package/dist/{catalog-runtime-D3hJdAMz.js → catalog-runtime-B9yDPVCR.js} +1 -1
- package/dist/{checkpoint-Ja5A32op.js → checkpoint-CQ6eQrJD.js} +6 -6
- package/dist/cli/chat.d.ts +1 -1
- package/dist/cli/chat.js +13 -13
- package/dist/cli/check.js +3 -3
- package/dist/cli/main.js +1 -1
- package/dist/cli/plugins.d.ts +1 -1
- package/dist/cli/plugins.js +3 -3
- package/dist/cli/snapshot-create.js +3 -3
- package/dist/cli/upgrade.d.ts +1 -1
- package/dist/cli/upgrade.js +3 -3
- package/dist/{client-DqG_LDSH.js → client-BV3_abpr.js} +2 -2
- package/dist/{config-CdS5GQ7W.js → config-DceVK986.js} +2 -2
- package/dist/{conversation-privacy-B7844ly7.js → conversation-privacy-C_w2FAlM.js} +1 -1
- package/dist/{credential-sync-DLWVq50D.js → credential-sync-DKXGTID8.js} +22 -22
- package/dist/{execution-stats-BbYien1O.js → execution-stats-BIyGof8p.js} +3 -3
- package/dist/{executor-CIl9A6cO.js → executor-CxoH7xaY.js} +1 -1
- package/dist/instrumentation.js +2 -2
- package/dist/{job-queue-CIz2Sij0.js → job-queue-DwA7xmCQ.js} +1 -1
- package/dist/{logging-dD_n9Ocp.js → logging-CtfUmyiN.js} +1 -1
- package/dist/nitro.d.ts +2 -2
- package/dist/nitro.js +3 -3
- package/dist/{oauth-callback-server-CBfuGXP0.js → oauth-callback-server-RefMcYAD.js} +2 -2
- package/dist/{pending-auth-KOZWIp4m.js → pending-auth-B_nSqxpd.js} +2 -2
- package/dist/{plugins-BI9A1vKA.d.ts → plugins-BT2l4We3.d.ts} +2 -1
- package/dist/{profile-BfWuRDUF.js → profile-BRupCR8f.js} +4 -4
- package/dist/{registry-DYHLzGuO.js → registry-DiIwniX1.js} +62 -18
- package/dist/{resolve-CU8DArbR.js → resolve-0BvJroyG.js} +2 -2
- package/dist/{runner-BtHHH38l.js → runner-DDHI2RaU.js} +9 -9
- package/dist/{sandbox-egress-signals-BvZZ02w9.js → sandbox-egress-signals-CoVhGAih.js} +1 -1
- package/dist/{short-title-CKnmS3nO.js → short-title-BdpXj7eS.js} +2 -2
- package/dist/{skills-CLsaAMtU.js → skills-MlftIiVP.js} +2 -2
- package/dist/{spawn-C6Utdbzm.js → spawn-DLlXPelG.js} +2 -2
- package/dist/{stats-D4Ar_7MS.js → stats-BjipUP7p.js} +5 -5
- package/dist/{task-queue-BgOOj26_.js → task-queue-DyfnQ7ZM.js} +3 -3
- package/dist/{task-runner-BfOnhH3C.js → task-runner-BOuCBVgO.js} +7 -7
- package/dist/{thread-state-B-jR3Aa8.js → thread-state-DrGVG1E-.js} +5 -5
- package/dist/{turn-execution-_rlctc-2.js → turn-execution-CZKg5Fw9.js} +3 -3
- package/dist/{turn-lifecycle-CVRu8Hmm.js → turn-lifecycle-BV2Wp_qF.js} +1 -1
- package/dist/{validation-5255qF_p.js → validation-BXDSxuOX.js} +1 -1
- package/dist/{version-DS_6p6x1.js → version-DNJ6W0LC.js} +1 -1
- package/dist/version.js +1 -1
- package/dist/{web-authorization-TdkXi7XG.js → web-authorization-DhXHpeMK.js} +1 -1
- package/dist/{web-input-vHOAXVxj.js → web-input-BqFF7CQB.js} +4 -4
- package/dist/{work-NIWYQvh-.js → work-DEMP0L3f.js} +9 -9
- package/dist/{worker-BgY7599f.js → worker-DvK47zmH.js} +5 -5
- package/package.json +4 -4
|
@@ -1,28 +1,28 @@
|
|
|
1
|
-
import { C as resolveGatewayCredential, S as getGatewayApiKey, _ as findProviderError, b as isProviderRetryError, c as COMPACTION_SUMMARY_PREFIX, d as isCompactionSummaryText, f as renderCurrentInstruction, g as createProviderError, h as ProviderError, i as completeText, l as MODEL_HANDOFF_SUMMARY_PREFIX, m as escapeXml, n as GEN_AI_SERVER_ADDRESS, o as resolveGatewayModel, p as unwrapCurrentInstruction, r as completeObject, s as ACTIVE_TURN_COMPACTION_SUMMARY_PREFIX, t as GEN_AI_PROVIDER_NAME, u as hasCompactedConversationContext, v as getProviderErrorAttributes, x as MISSING_GATEWAY_CREDENTIALS_ERROR } from "./client-
|
|
2
|
-
import { C as withSpan, F as isRecord$2, P as normalizeIdentityEmail, S as withLogContext, _ as setSpanAttributes, a as extractGenAiUsageSummary, b as summarizeMessageText, c as getTracePropagationHeaders, d as logInfo, f as logWarn, h as serializeGenAiAttribute, i as extractGenAiUsageAttributes, l as logError, p as normalizeGenAiFinishReason, s as getLogContextAttributesForSpan, u as logException, v as setSpanStatus, y as setTags } from "./logging-
|
|
1
|
+
import { C as resolveGatewayCredential, S as getGatewayApiKey, _ as findProviderError, b as isProviderRetryError, c as COMPACTION_SUMMARY_PREFIX, d as isCompactionSummaryText, f as renderCurrentInstruction, g as createProviderError, h as ProviderError, i as completeText, l as MODEL_HANDOFF_SUMMARY_PREFIX, m as escapeXml, n as GEN_AI_SERVER_ADDRESS, o as resolveGatewayModel, p as unwrapCurrentInstruction, r as completeObject, s as ACTIVE_TURN_COMPACTION_SUMMARY_PREFIX, t as GEN_AI_PROVIDER_NAME, u as hasCompactedConversationContext, v as getProviderErrorAttributes, x as MISSING_GATEWAY_CREDENTIALS_ERROR } from "./client-BV3_abpr.js";
|
|
2
|
+
import { C as withSpan, F as isRecord$2, P as normalizeIdentityEmail, S as withLogContext, _ as setSpanAttributes, a as extractGenAiUsageSummary, b as summarizeMessageText, c as getTracePropagationHeaders, d as logInfo, f as logWarn, h as serializeGenAiAttribute, i as extractGenAiUsageAttributes, l as logError, p as normalizeGenAiFinishReason, s as getLogContextAttributesForSpan, u as logException, v as setSpanStatus, y as setTags } from "./logging-CtfUmyiN.js";
|
|
3
3
|
import { m as startInactiveSpan, v as withActiveSpan } from "./sentry-CgWZM_kV.js";
|
|
4
|
-
import { a as toCanonicalInputMessage, c as toGenAiPayloadMetadata, i as runWithConversationPrivacy, l as toGenAiPayloadTraceAttributes, o as toCanonicalOutputMessage, r as resolveConversationPrivacy, s as toGenAiMessagesTraceAttributes, t as canExposeConversationPayload } from "./conversation-privacy-
|
|
5
|
-
import { h as normalizeSlackEmojiName, n as botConfig } from "./config-
|
|
4
|
+
import { a as toCanonicalInputMessage, c as toGenAiPayloadMetadata, i as runWithConversationPrivacy, l as toGenAiPayloadTraceAttributes, o as toCanonicalOutputMessage, r as resolveConversationPrivacy, s as toGenAiMessagesTraceAttributes, t as canExposeConversationPayload } from "./conversation-privacy-C_w2FAlM.js";
|
|
5
|
+
import { h as normalizeSlackEmojiName, n as botConfig } from "./config-DceVK986.js";
|
|
6
6
|
import { a as modelIdForProfile, c as TURN_REASONING_LEVELS, i as formatModelProfiles, o as modelProfileSchema, r as formatModelProfile, s as profileConfig, t as ModelProfileNotConfiguredError } from "./model-profile-CZmVoGdX.js";
|
|
7
7
|
import { _ as parseSlackMessageTs, g as parseSlackUserId, h as parseSlackTeamId, i as credentialUserSubjectId, l as isUserActor, m as parseSlackChannelReferenceId, n as credentialContextSchema, p as parseSlackChannelId, t as credentialContextForActor } from "./context-Bplcgypl.js";
|
|
8
|
-
import { A as tryWorkspaceRepoCheckoutPath, B as downloadPrivateSlackFile, C as invalidateReadySnapshot, D as SANDBOX_RUNTIME, E as setWorkspaceSnapshotBuild, Gt as getDb, Ht as getConversationEventStore, J as withSlackRetries, K as normalizeSlackConversationId, Kt as getSqlExecutor, M as resolveChannelCapabilities, O as deleteWorkspaceSnapshotBuilders, Q as readActorIdentity, S as WorkspaceValidationError, T as setWorkspaceSnapshot, U as getSlackClient, Ut as getConversationMessageSearchStore, V as getFilePermalink, W as isConversationScopedChannel, Wt as getConversationStore, _ as deleteWorkspace, at as STOP_WATCHING_TOOL_NAME, b as listWorkspaces, bt as createPluginLogger, c as getPluginTools, dt as findMatchingWatches, en as addAgentTurnUsage, ft as listWatches, g as createWorkspace, ht as getDashboardTaskLink, in as hasAgentTurnUsage, it as RESOURCE_WATCH_TOOL_SOURCE, j as workspaceRepoCheckoutPath, k as getWorkspaceSnapshotBuilder, l as getPluginUserPromptContributions, lt as createWatch, mt as getDashboardConversationLink, nt as RESOURCE_SUBSCRIPTION_DEFAULT_TTL_MS, ot as cancelSubscriptions, pt as JUNIOR_THREAD_STATE_TTL_MS, r as createPluginHookRunner, s as getPluginSystemPromptContributions, st as cancelWatch, tt as getSlackToolContext, u as getPlugins, un as parseDestination, ut as deliverWatch, v as getWorkspace, w as loadSnapshotsForProfile, x as updateWorkspace, y as getWorkspaceByName, z as SlackActionError } from "./agent-hooks-
|
|
8
|
+
import { A as tryWorkspaceRepoCheckoutPath, B as downloadPrivateSlackFile, C as invalidateReadySnapshot, D as SANDBOX_RUNTIME, E as setWorkspaceSnapshotBuild, Gt as getDb, Ht as getConversationEventStore, J as withSlackRetries, K as normalizeSlackConversationId, Kt as getSqlExecutor, M as resolveChannelCapabilities, O as deleteWorkspaceSnapshotBuilders, Q as readActorIdentity, S as WorkspaceValidationError, T as setWorkspaceSnapshot, U as getSlackClient, Ut as getConversationMessageSearchStore, V as getFilePermalink, W as isConversationScopedChannel, Wt as getConversationStore, _ as deleteWorkspace, at as STOP_WATCHING_TOOL_NAME, b as listWorkspaces, bt as createPluginLogger, c as getPluginTools, dt as findMatchingWatches, en as addAgentTurnUsage, ft as listWatches, g as createWorkspace, ht as getDashboardTaskLink, in as hasAgentTurnUsage, it as RESOURCE_WATCH_TOOL_SOURCE, j as workspaceRepoCheckoutPath, k as getWorkspaceSnapshotBuilder, l as getPluginUserPromptContributions, lt as createWatch, mt as getDashboardConversationLink, nt as RESOURCE_SUBSCRIPTION_DEFAULT_TTL_MS, ot as cancelSubscriptions, pt as JUNIOR_THREAD_STATE_TTL_MS, r as createPluginHookRunner, s as getPluginSystemPromptContributions, st as cancelWatch, tt as getSlackToolContext, u as getPlugins, un as parseDestination, ut as deliverWatch, v as getWorkspace, w as loadSnapshotsForProfile, x as updateWorkspace, y as getWorkspaceByName, z as SlackActionError } from "./agent-hooks-Au93EfEr.js";
|
|
9
9
|
import { n as juniorDestinations } from "./destinations-BeBiJeEM.js";
|
|
10
|
-
import { D as juniorIdentities, E as juniorConversations, a as juniorSchedulerRuns, d as AGENT_INVOCATION_MAILBOX_STATUSES, g as juniorConversationBriefs, k as juniorArtifacts, w as juniorAttachments, x as juniorConversationAnnotations } from "./executor-
|
|
10
|
+
import { D as juniorIdentities, E as juniorConversations, a as juniorSchedulerRuns, d as AGENT_INVOCATION_MAILBOX_STATUSES, g as juniorConversationBriefs, k as juniorArtifacts, w as juniorAttachments, x as juniorConversationAnnotations } from "./executor-CxoH7xaY.js";
|
|
11
11
|
import { A as briefLinkSchema, G as sameActorIdentity, H as contextProvenance, M as conversationBriefSchema, P as KNOWN_CONVERSATION_EVENT_TYPES, U as instructionActors, W as instructionProvenanceFor, j as briefOutcomeStatusSchema } from "./conversation-BpqLg4MM.js";
|
|
12
12
|
import { a as listReferenceFiles, c as soulPathCandidates, l as worldPathCandidates } from "./package-discovery-7a9YqLhE.js";
|
|
13
|
-
import { a as
|
|
14
|
-
import { n as pluginCatalogRuntime } from "./catalog-runtime-
|
|
15
|
-
import { a as parseSkillInvocation, n as findSkillByName, r as loadSkillsByName, t as discoverSkills } from "./skills-
|
|
16
|
-
import { A as TURN_CONTEXT_TAG, C as isContinuablePiBoundary, D as retainRuntimeTurnContext, E as normalizeToolNameFromResult, H as recordAuthorizationRequested, I as loadTurnRoute, K as recordToolExecutionStarted, L as openConversationProjection, N as loadConnectedMcpProviders, O as stripRuntimeTurnContext, P as loadConversationProjection, R as recordAgentsInstructionsUpdated, S as isAssistantMessage, T as isToolResultMessage, U as recordGuardianActionReviewed, W as recordMcpProviderConnected, _ as getPiMessageRole, b as hasRuntimeTurnContext, dt as estimateTextTokens, f as TurnSliceLimitExceededError, ft as getAgentContextCompactionTriggerTokens, g as extractAssistantText, h as isTurnExecutionLimitExceededError, ht as piMessageFromHistoryItem, k as trimTrailingAssistantMessages, mt as historyItemFromPiMessage, n as loadTurnCheckpoint, p as assertTurnToolCallLimit, pt as getAgentContextInputLimitTokens, q as recordTurnRoute, r as saveTurnCheckpoint, t as continuableMessages, v as getTerminalAssistantMessages, w as isToolResultError, y as getUserMessageInstructionText, z as recordAttachmentsDelivered } from "./checkpoint-
|
|
17
|
-
import { n as generateShortTitle, r as resolveTaskTitle } from "./short-title-
|
|
18
|
-
import { A as sleep$1, D as fenceLock, E as acquireActiveLock, F as sandboxSkillDir, I as sandboxSkillFile, L as sandboxSkillPathResolution, M as SANDBOX_REPOS_ROOT, N as SANDBOX_SKILLS_ROOT, P as SANDBOX_WORKSPACE_ROOT, _ as workspaceSnapshotNotReadyUserMessage, a as isAbortError, b as buildNonInteractiveShellScript, c as isSandboxCommandStreamInterruptedError, d as isSnapshottingError, f as throwSandboxOperationError, g as isWorkspaceSnapshotNotReadyError, h as getWorkspaceSnapshotNotReadyError, i as ensureDockerDaemon, j as SANDBOX_DATA_ROOT, k as withLock, l as isSandboxMissingError, m as WorkspaceSnapshotNotReadyError, n as hash, o as isAlreadyExistsError, p as wrapSandboxSetupError, r as isStale, s as isSandboxApiTransientError, t as create, u as isSandboxUnavailableError, v as getVercelSandboxCredentials, w as getStateAdapter, x as runNonInteractiveCommand, y as buildCommandScript } from "./profile-
|
|
19
|
-
import { $ as workspaceSnapshotFinishedEvent, B as createEventAutomation, C as SCHEDULED_AUTOMATION_SYSTEM_ACTOR, D as eventAutomationMatchesDestination, E as eventAutomationListToolResultSchema, F as effectiveTaskOutcomes, Gt as makeStructuredToolOutput, I as moveTaskOutcomes, Jt as ToolInputError, L as resolveTaskOutcomes, M as requireEventAutomationSlackContext, N as requireSupportedEventAutomationTrigger, O as eventAutomationToolResult, P as writableEventAutomation, Q as WORKSPACE_SNAPSHOT_READY_EVENT, R as taskOutcomeInputSchema, T as compactEventAutomation, Ut as injectContinuationToolName, V as deleteEventAutomation, W as getEventAutomation, Wt as juniorToolOutputSchema, X as getEventCatalog, Y as saveEventAutomation, Z as WORKSPACE_SNAPSHOT_FAILED_EVENT, at as normalizeCatalogEventIdentifier, c as parseSlackThreadId, ct as registeredEventTypeSchema, et as workspaceSnapshotWatch, f as createScheduledAutomation, g as listScheduledAutomationsForTeam, i as readLiveAttachment, it as hasPluginEventCatalogEntries, j as registeredEventAutomationTriggerSchema, k as eventAutomationToolResultSchema, lt as registeredResourceTypeSchema, nt as eventNamespaceSchema, ot as pluginSupportsEvent, pt as appendAndEnqueueInboundMessage, q as listEventAutomationsForTeam, rt as hasEventCatalogEntries, s as storeAttachments, st as registeredEventMatchSchema, t as incrementStat, tt as eventGuidance, ut as requireSupportedEventMatch, v as readScheduledAutomation, y as saveScheduledAutomation } from "./stats-
|
|
20
|
-
import { _ as isTurnInputCommitLostError, c as sanitizeAssistantText, f as CooperativeTurnYieldError, l as NO_REPLY_MARKER, n as canReusePendingAuthLink, o as decideReply, p as TurnInputCommitLostError, s as getAssistantReplyText, t as abandonReplacedPendingAuth, u as isNoReplyMarker } from "./pending-auth-
|
|
21
|
-
import { C as toolInvocationDestination, S as surfaceFromRun, _ as uploadFilesToConversation, b as assertRunConsistency, h as postSlackMessage, i as formatProviderLabel, m as getSlackMessagePermalink, o as resolveBaseUrl, p as addReactionToMessage, r as deliverOAuthAuthorization, s as startOAuthFlow, v as RetryableDeliveryError, x as isAgentRunFeatureDisabled, y as actorFromRun } from "./agent-runner-
|
|
13
|
+
import { a as resolveAuthTokenPlaceholder, c as fetchWithBoundedOAuthErrorBodies, d as CredentialUnavailableError, i as resolvePluginHeaderEnvRefs, l as getOAuthProviderErrorAttributes, o as resolvePluginCommandEnv, s as OAuthProviderError } from "./registry-DiIwniX1.js";
|
|
14
|
+
import { n as pluginCatalogRuntime } from "./catalog-runtime-B9yDPVCR.js";
|
|
15
|
+
import { a as parseSkillInvocation, n as findSkillByName, r as loadSkillsByName, t as discoverSkills } from "./skills-MlftIiVP.js";
|
|
16
|
+
import { A as TURN_CONTEXT_TAG, C as isContinuablePiBoundary, D as retainRuntimeTurnContext, E as normalizeToolNameFromResult, H as recordAuthorizationRequested, I as loadTurnRoute, K as recordToolExecutionStarted, L as openConversationProjection, N as loadConnectedMcpProviders, O as stripRuntimeTurnContext, P as loadConversationProjection, R as recordAgentsInstructionsUpdated, S as isAssistantMessage, T as isToolResultMessage, U as recordGuardianActionReviewed, W as recordMcpProviderConnected, _ as getPiMessageRole, b as hasRuntimeTurnContext, dt as estimateTextTokens, f as TurnSliceLimitExceededError, ft as getAgentContextCompactionTriggerTokens, g as extractAssistantText, h as isTurnExecutionLimitExceededError, ht as piMessageFromHistoryItem, k as trimTrailingAssistantMessages, mt as historyItemFromPiMessage, n as loadTurnCheckpoint, p as assertTurnToolCallLimit, pt as getAgentContextInputLimitTokens, q as recordTurnRoute, r as saveTurnCheckpoint, t as continuableMessages, v as getTerminalAssistantMessages, w as isToolResultError, y as getUserMessageInstructionText, z as recordAttachmentsDelivered } from "./checkpoint-CQ6eQrJD.js";
|
|
17
|
+
import { n as generateShortTitle, r as resolveTaskTitle } from "./short-title-BdpXj7eS.js";
|
|
18
|
+
import { A as sleep$1, D as fenceLock, E as acquireActiveLock, F as sandboxSkillDir, I as sandboxSkillFile, L as sandboxSkillPathResolution, M as SANDBOX_REPOS_ROOT, N as SANDBOX_SKILLS_ROOT, P as SANDBOX_WORKSPACE_ROOT, _ as workspaceSnapshotNotReadyUserMessage, a as isAbortError, b as buildNonInteractiveShellScript, c as isSandboxCommandStreamInterruptedError, d as isSnapshottingError, f as throwSandboxOperationError, g as isWorkspaceSnapshotNotReadyError, h as getWorkspaceSnapshotNotReadyError, i as ensureDockerDaemon, j as SANDBOX_DATA_ROOT, k as withLock, l as isSandboxMissingError, m as WorkspaceSnapshotNotReadyError, n as hash, o as isAlreadyExistsError, p as wrapSandboxSetupError, r as isStale, s as isSandboxApiTransientError, t as create, u as isSandboxUnavailableError, v as getVercelSandboxCredentials, w as getStateAdapter, x as runNonInteractiveCommand, y as buildCommandScript } from "./profile-BRupCR8f.js";
|
|
19
|
+
import { $ as workspaceSnapshotFinishedEvent, B as createEventAutomation, C as SCHEDULED_AUTOMATION_SYSTEM_ACTOR, D as eventAutomationMatchesDestination, E as eventAutomationListToolResultSchema, F as effectiveTaskOutcomes, Gt as makeStructuredToolOutput, I as moveTaskOutcomes, Jt as ToolInputError, L as resolveTaskOutcomes, M as requireEventAutomationSlackContext, N as requireSupportedEventAutomationTrigger, O as eventAutomationToolResult, P as writableEventAutomation, Q as WORKSPACE_SNAPSHOT_READY_EVENT, R as taskOutcomeInputSchema, T as compactEventAutomation, Ut as injectContinuationToolName, V as deleteEventAutomation, W as getEventAutomation, Wt as juniorToolOutputSchema, X as getEventCatalog, Y as saveEventAutomation, Z as WORKSPACE_SNAPSHOT_FAILED_EVENT, at as normalizeCatalogEventIdentifier, c as parseSlackThreadId, ct as registeredEventTypeSchema, et as workspaceSnapshotWatch, f as createScheduledAutomation, g as listScheduledAutomationsForTeam, i as readLiveAttachment, it as hasPluginEventCatalogEntries, j as registeredEventAutomationTriggerSchema, k as eventAutomationToolResultSchema, lt as registeredResourceTypeSchema, nt as eventNamespaceSchema, ot as pluginSupportsEvent, pt as appendAndEnqueueInboundMessage, q as listEventAutomationsForTeam, rt as hasEventCatalogEntries, s as storeAttachments, st as registeredEventMatchSchema, t as incrementStat, tt as eventGuidance, ut as requireSupportedEventMatch, v as readScheduledAutomation, y as saveScheduledAutomation } from "./stats-BjipUP7p.js";
|
|
20
|
+
import { _ as isTurnInputCommitLostError, c as sanitizeAssistantText, f as CooperativeTurnYieldError, l as NO_REPLY_MARKER, n as canReusePendingAuthLink, o as decideReply, p as TurnInputCommitLostError, s as getAssistantReplyText, t as abandonReplacedPendingAuth, u as isNoReplyMarker } from "./pending-auth-B_nSqxpd.js";
|
|
21
|
+
import { C as toolInvocationDestination, S as surfaceFromRun, _ as uploadFilesToConversation, b as assertRunConsistency, h as postSlackMessage, i as formatProviderLabel, m as getSlackMessagePermalink, o as resolveBaseUrl, p as addReactionToMessage, r as deliverOAuthAuthorization, s as startOAuthFlow, v as RetryableDeliveryError, x as isAgentRunFeatureDisabled, y as actorFromRun } from "./agent-runner-skcXibgb.js";
|
|
22
22
|
import { r as EVENT_AUTHOR_ID } from "./prompt-DAoaq0CT.js";
|
|
23
|
-
import { a as createSandboxSession, c as postinstall, d as getSandboxResources, i as bindSandboxFileSystem, l as setSnapshotSpanAttributes, n as isMissingError, o as stopSession, r as resolve$1, s as dependencies } from "./resolve-
|
|
23
|
+
import { a as createSandboxSession, c as postinstall, d as getSandboxResources, i as bindSandboxFileSystem, l as setSnapshotSpanAttributes, n as isMissingError, o as stopSession, r as resolve$1, s as dependencies } from "./resolve-0BvJroyG.js";
|
|
24
24
|
import { t as getVercelConversationWorkQueue } from "./vercel-queue-DIkVcfK4.js";
|
|
25
|
-
import { a as getTurnRequestDeadline, n as sendNextWorkspaceSnapshotJob, r as sendWorkspaceSnapshotJob } from "./job-queue-
|
|
25
|
+
import { a as getTurnRequestDeadline, n as sendNextWorkspaceSnapshotJob, r as sendWorkspaceSnapshotJob } from "./job-queue-DwA7xmCQ.js";
|
|
26
26
|
import { n as privateTraceResultAttributes } from "./private-trace-result-BLvBjy_e.js";
|
|
27
27
|
import { streamSimple } from "@earendil-works/pi-ai/compat";
|
|
28
28
|
import { createGatewayProvider } from "@ai-sdk/gateway";
|
|
@@ -51,6 +51,7 @@ import net from "node:net";
|
|
|
51
51
|
import { NodeHtmlMarkdown } from "node-html-markdown";
|
|
52
52
|
import { Value } from "@sinclair/typebox/value";
|
|
53
53
|
import { Kind } from "@sinclair/typebox";
|
|
54
|
+
import { SignJWT, importPKCS8 } from "jose";
|
|
54
55
|
//#region src/chat/configuration/defaults.ts
|
|
55
56
|
let installDefaults = {};
|
|
56
57
|
function cloneDefaults(defaults) {
|
|
@@ -1501,13 +1502,13 @@ const SKILL_POLICY_RULES = [
|
|
|
1501
1502
|
"- Otherwise, scan `<available-skills>` before acting. Load the most specific skill whose description matches the request; do not answer from memory when one fits. Only call `loadSkill` with an exact listed `<name>`; if none fits, do not load a skill.",
|
|
1502
1503
|
"- Load one skill at a time. After `loadSkill`, follow the instructions returned by that tool result."
|
|
1503
1504
|
];
|
|
1504
|
-
const PLANNING_RULES = `You have access to an \`
|
|
1505
|
+
const PLANNING_RULES = `You have access to an \`updatePlan\` tool which tracks steps and progress and renders them to the user. Using the tool helps demonstrate that you've understood the task and convey how you're approaching it. Plans can help to make complex, ambiguous, or multi-phase work clearer and more collaborative for the user. A good plan should break the task into meaningful, logically ordered steps that are easy to verify as you go.
|
|
1505
1506
|
|
|
1506
1507
|
Note that plans are not for padding out simple work with filler steps or stating the obvious. The content of your plan should not involve doing anything that you aren't capable of doing (i.e. don't try to test things that you can't test). Do not use plans for simple or single-step queries that you can just do or answer immediately.
|
|
1507
1508
|
|
|
1508
|
-
Do not repeat the full contents of the plan after an \`
|
|
1509
|
+
Do not repeat the full contents of the plan after an \`updatePlan\` call — the harness already displays it. Instead, summarize the change made and highlight any important context or next step.
|
|
1509
1510
|
|
|
1510
|
-
Before running a command, consider whether or not you have completed the previous step, and make sure to mark it as completed before moving on to the next step. It may be the case that you complete all steps in your plan after a single pass of implementation. If this is the case, you can simply mark all the planned steps as completed. Sometimes, you may need to change plans in the middle of a task: call \`
|
|
1511
|
+
Before running a command, consider whether or not you have completed the previous step, and make sure to mark it as completed before moving on to the next step. It may be the case that you complete all steps in your plan after a single pass of implementation. If this is the case, you can simply mark all the planned steps as completed. Sometimes, you may need to change plans in the middle of a task: call \`updatePlan\` with the updated plan and make sure to provide an \`explanation\` of the rationale when doing so.
|
|
1511
1512
|
|
|
1512
1513
|
Use a plan when:
|
|
1513
1514
|
|
|
@@ -1570,13 +1571,13 @@ Example 3:
|
|
|
1570
1571
|
|
|
1571
1572
|
If you need to write a plan, only write high quality plans, not low quality ones.
|
|
1572
1573
|
`.split("\n");
|
|
1573
|
-
const UPDATE_PLAN_RULES = `A tool named \`
|
|
1574
|
+
const UPDATE_PLAN_RULES = `A tool named \`updatePlan\` is available to you. You can use it to keep an up‑to‑date, step‑by‑step plan for the task.
|
|
1574
1575
|
|
|
1575
|
-
To create a new plan, call \`
|
|
1576
|
+
To create a new plan, call \`updatePlan\` with a short list of 1‑sentence steps (no more than 5-7 words each) with a \`status\` for each step (\`pending\`, \`in_progress\`, or \`completed\`).
|
|
1576
1577
|
|
|
1577
|
-
When steps have been completed, use \`
|
|
1578
|
+
When steps have been completed, use \`updatePlan\` to mark each finished step as \`completed\` and the next step you are working on as \`in_progress\`. There should always be exactly one \`in_progress\` step until everything is done. You can mark multiple items as complete in a single \`updatePlan\` call.
|
|
1578
1579
|
|
|
1579
|
-
If all steps are complete, ensure you call \`
|
|
1580
|
+
If all steps are complete, ensure you call \`updatePlan\` to mark all steps as \`completed\`.`.split("\n");
|
|
1580
1581
|
const TASK_EXECUTION_RULES = [
|
|
1581
1582
|
"- Actionable request: act in this turn.",
|
|
1582
1583
|
"- Continue until done or genuinely blocked. Do not finish with a plan, promise, or offer to check next when an available tool or source can move the request forward.",
|
|
@@ -6461,12 +6462,11 @@ var PluginMcpClient = class {
|
|
|
6461
6462
|
async connectClient() {
|
|
6462
6463
|
const mcp = this.plugin.manifest.mcp;
|
|
6463
6464
|
if (!mcp) throw new Error(`Plugin "${this.plugin.manifest.name}" does not declare MCP config`);
|
|
6464
|
-
const
|
|
6465
|
-
if (mcp.headers && Object.keys(mcp.headers).length > 0) requestInit.headers = new Headers(mcp.headers);
|
|
6465
|
+
const headers = mcp.headers ? resolvePluginHeaderEnvRefs(this.plugin.manifest.name, mcp.headers, "MCP header") : void 0;
|
|
6466
6466
|
const sessionId = await this.getStoredTransportSessionId();
|
|
6467
6467
|
this.lastAttemptedTransportSessionId = sessionId;
|
|
6468
6468
|
const transport = new StreamableHTTPClientTransport(new URL(mcp.url), {
|
|
6469
|
-
...
|
|
6469
|
+
...headers ? { requestInit: { headers } } : void 0,
|
|
6470
6470
|
fetch: fetchWithBoundedOAuthErrorBodies(this.options.fetch, (status) => {
|
|
6471
6471
|
const store = this.providerStatusStore.getStore();
|
|
6472
6472
|
if (store) store.status = status;
|
|
@@ -13519,7 +13519,7 @@ function createTools(availableSkills, hooks = {}, context, options = {}) {
|
|
|
13519
13519
|
const eventCatalog = getEventCatalog();
|
|
13520
13520
|
const tools = {
|
|
13521
13521
|
...options.includeLoadSkill === false ? void 0 : { loadSkill: createLoadSkillTool(availableSkills, { onSkillLoaded: hooks.onSkillLoaded }) },
|
|
13522
|
-
|
|
13522
|
+
updatePlan: createUpdatePlanTool(),
|
|
13523
13523
|
reportProgress: createReportProgressTool(),
|
|
13524
13524
|
systemTime: createSystemTimeTool(),
|
|
13525
13525
|
bash: createBashTool(),
|
|
@@ -13626,7 +13626,7 @@ function buildReportedProgressStatus(input) {
|
|
|
13626
13626
|
if (!text) return;
|
|
13627
13627
|
return { text };
|
|
13628
13628
|
}
|
|
13629
|
-
/** Convert an `
|
|
13629
|
+
/** Convert an `updatePlan` payload into the active assistant status. */
|
|
13630
13630
|
function buildPlanStatus(input) {
|
|
13631
13631
|
if (!input || typeof input !== "object") return;
|
|
13632
13632
|
const plan = input.plan;
|
|
@@ -13644,7 +13644,7 @@ function latestProgressStatus(messages) {
|
|
|
13644
13644
|
if (!part || typeof part !== "object") continue;
|
|
13645
13645
|
const toolCall = part;
|
|
13646
13646
|
if (toolCall.type !== "toolCall") continue;
|
|
13647
|
-
if (toolCall.name === "
|
|
13647
|
+
if (toolCall.name === "updatePlan") return buildPlanStatus(toolCall.arguments);
|
|
13648
13648
|
if (toolCall.name === "reportProgress") {
|
|
13649
13649
|
const status = buildReportedProgressStatus(toolCall.arguments);
|
|
13650
13650
|
if (status) return status;
|
|
@@ -14585,7 +14585,7 @@ function createPiAgentTools(tools, sandbox, spanContext, onStatus, sandboxTools,
|
|
|
14585
14585
|
return normalized;
|
|
14586
14586
|
};
|
|
14587
14587
|
const reportStatus = async (executionToolName, params) => {
|
|
14588
|
-
const status = executionToolName === "
|
|
14588
|
+
const status = executionToolName === "updatePlan" ? buildPlanStatus(params) : executionToolName === "reportProgress" ? buildReportedProgressStatus(params) : void 0;
|
|
14589
14589
|
if (status) await onStatus?.(status);
|
|
14590
14590
|
};
|
|
14591
14591
|
return Object.entries(visibleTools).map(([toolName, toolDef]) => ({
|
|
@@ -14661,6 +14661,75 @@ function createPiAgentTools(tools, sandbox, spanContext, onStatus, sandboxTools,
|
|
|
14661
14661
|
}));
|
|
14662
14662
|
}
|
|
14663
14663
|
//#endregion
|
|
14664
|
+
//#region src/chat/mcp/jwt-bearer-provider.ts
|
|
14665
|
+
/**
|
|
14666
|
+
* Non-interactive MCP auth for bot plugins.
|
|
14667
|
+
*
|
|
14668
|
+
* When a manifest declares `mcp.auth`, this provider signs a short-lived assertion with a
|
|
14669
|
+
* plugin-held private key and the SDK exchanges it at the server token endpoint. No user, no
|
|
14670
|
+
* browser redirect; expired access tokens re-mint automatically on the next 401.
|
|
14671
|
+
*
|
|
14672
|
+
* This is the ID-JAG profile of RFC 7523: the assertion is the grant (§2.1), it carries
|
|
14673
|
+
* `client_id` and `resource` claims, and `aud` is the authorization server issuer. The SDK's
|
|
14674
|
+
* own PrivateKeyJwtProvider implements §2.2 client authentication with a client_credentials
|
|
14675
|
+
* grant instead, which Python MCP servers do not accept yet, so it does not fit here.
|
|
14676
|
+
*
|
|
14677
|
+
* The absent redirectUrl is what routes the SDK into its non-interactive token flow, the
|
|
14678
|
+
* `oauth-id-jag+jwt` typ header is what identity-assertion servers require, and the placeholder
|
|
14679
|
+
* redirect_uri exists only because dynamic client registration rejects an empty list.
|
|
14680
|
+
*/
|
|
14681
|
+
const JWT_BEARER_GRANT_TYPE = "urn:ietf:params:oauth:grant-type:jwt-bearer";
|
|
14682
|
+
const ALGORITHM = "RS256";
|
|
14683
|
+
function nonInteractive() {
|
|
14684
|
+
throw new Error("jwt-bearer MCP auth is non-interactive");
|
|
14685
|
+
}
|
|
14686
|
+
/** Build the OAuth client provider that signs jwt-bearer assertions for one bot MCP plugin. */
|
|
14687
|
+
function createJwtBearerMcpClientProvider(subject, mcpUrl, auth) {
|
|
14688
|
+
let discovery;
|
|
14689
|
+
let clientInfo;
|
|
14690
|
+
let tokens;
|
|
14691
|
+
return {
|
|
14692
|
+
redirectUrl: void 0,
|
|
14693
|
+
clientMetadata: {
|
|
14694
|
+
client_name: subject,
|
|
14695
|
+
redirect_uris: ["http://localhost"],
|
|
14696
|
+
token_endpoint_auth_method: "none"
|
|
14697
|
+
},
|
|
14698
|
+
discoveryState: () => discovery,
|
|
14699
|
+
saveDiscoveryState: (state) => {
|
|
14700
|
+
discovery = state;
|
|
14701
|
+
},
|
|
14702
|
+
clientInformation: () => clientInfo,
|
|
14703
|
+
saveClientInformation: (info) => {
|
|
14704
|
+
clientInfo = info;
|
|
14705
|
+
},
|
|
14706
|
+
tokens: () => tokens,
|
|
14707
|
+
saveTokens: (next) => {
|
|
14708
|
+
tokens = next;
|
|
14709
|
+
},
|
|
14710
|
+
redirectToAuthorization: nonInteractive,
|
|
14711
|
+
saveCodeVerifier: nonInteractive,
|
|
14712
|
+
codeVerifier: nonInteractive,
|
|
14713
|
+
prepareTokenRequest: async () => {
|
|
14714
|
+
if (!discovery) throw new Error("jwt-bearer token request requires discovered server metadata");
|
|
14715
|
+
const privateKeyPem = process.env[auth.privateKeyEnv];
|
|
14716
|
+
if (!privateKeyPem) throw new Error(`jwt-bearer MCP auth env var ${auth.privateKeyEnv} is unset`);
|
|
14717
|
+
const assertion = await new SignJWT({
|
|
14718
|
+
client_id: clientInfo?.client_id,
|
|
14719
|
+
resource: mcpUrl
|
|
14720
|
+
}).setProtectedHeader({
|
|
14721
|
+
alg: ALGORITHM,
|
|
14722
|
+
kid: auth.keyId,
|
|
14723
|
+
typ: "oauth-id-jag+jwt"
|
|
14724
|
+
}).setIssuer(auth.issuer).setSubject(subject).setAudience(discovery.authorizationServerMetadata?.issuer ?? discovery.authorizationServerUrl).setIssuedAt().setExpirationTime("5m").setJti(randomUUID()).sign(await importPKCS8(privateKeyPem, ALGORITHM));
|
|
14725
|
+
return new URLSearchParams({
|
|
14726
|
+
grant_type: JWT_BEARER_GRANT_TYPE,
|
|
14727
|
+
assertion
|
|
14728
|
+
});
|
|
14729
|
+
}
|
|
14730
|
+
};
|
|
14731
|
+
}
|
|
14732
|
+
//#endregion
|
|
14664
14733
|
//#region src/chat/mcp/auth-store.ts
|
|
14665
14734
|
const MCP_AUTH_SESSION_PREFIX = "junior:mcp_oauth_attempt:v2";
|
|
14666
14735
|
const MCP_AUTH_CREDENTIALS_PREFIX = "junior:mcp_auth_credentials";
|
|
@@ -15012,11 +15081,10 @@ async function finalizeMcpAuthorization(provider, authSessionId, authorizationCo
|
|
|
15012
15081
|
const baseUrl = resolveBaseUrl();
|
|
15013
15082
|
if (!baseUrl) throw new Error("Cannot determine base URL (set JUNIOR_BASE_URL or deploy to Vercel)");
|
|
15014
15083
|
const authProvider = new StateBackedMcpOAuthClientProvider(authSessionId, `${baseUrl}${getMcpOAuthCallbackPath(provider)}`, void 0, runCredentialMutation);
|
|
15015
|
-
const
|
|
15016
|
-
if (mcp.headers && Object.keys(mcp.headers).length > 0) requestInit.headers = new Headers(mcp.headers);
|
|
15084
|
+
const headers = mcp.headers ? resolvePluginHeaderEnvRefs(provider, mcp.headers, "MCP header") : void 0;
|
|
15017
15085
|
let providerStatus;
|
|
15018
15086
|
const transport = new StreamableHTTPClientTransport(new URL(mcp.url), {
|
|
15019
|
-
...
|
|
15087
|
+
...headers ? { requestInit: { headers } } : void 0,
|
|
15020
15088
|
authProvider,
|
|
15021
15089
|
fetch: fetchWithBoundedOAuthErrorBodies(void 0, (status) => {
|
|
15022
15090
|
providerStatus = status;
|
|
@@ -15058,7 +15126,13 @@ var McpAuthorizationPauseError = class extends AuthorizationPauseError {
|
|
|
15058
15126
|
function createMcpAuthOrchestration(input) {
|
|
15059
15127
|
let pendingPause;
|
|
15060
15128
|
const authSessionIdsByProvider = /* @__PURE__ */ new Map();
|
|
15129
|
+
const botAuthProviders = /* @__PURE__ */ new Set();
|
|
15061
15130
|
const authProviderFactory = async (plugin) => {
|
|
15131
|
+
const mcp = plugin.manifest.mcp;
|
|
15132
|
+
if (mcp?.auth) {
|
|
15133
|
+
botAuthProviders.add(plugin.manifest.name);
|
|
15134
|
+
return createJwtBearerMcpClientProvider(plugin.manifest.name, mcp.url, mcp.auth);
|
|
15135
|
+
}
|
|
15062
15136
|
if (!input.conversationId || !input.sessionId || !input.actorId) return;
|
|
15063
15137
|
if (!input.recordPendingAuth && input.interactiveAuthEnabled !== false) throw new Error(`Missing pending auth recorder for MCP authorization pause "${plugin.manifest.name}"`);
|
|
15064
15138
|
const provider = await createMcpOAuthClientProvider({
|
|
@@ -15079,6 +15153,7 @@ function createMcpAuthOrchestration(input) {
|
|
|
15079
15153
|
return provider;
|
|
15080
15154
|
};
|
|
15081
15155
|
const onAuthorizationRequired = async (provider) => {
|
|
15156
|
+
if (botAuthProviders.has(provider)) return false;
|
|
15082
15157
|
if (pendingPause) return true;
|
|
15083
15158
|
const authSessionId = authSessionIdsByProvider.get(provider);
|
|
15084
15159
|
const conversationId = input.conversationId;
|
|
@@ -16655,6 +16730,71 @@ function createResumeState(args) {
|
|
|
16655
16730
|
};
|
|
16656
16731
|
}
|
|
16657
16732
|
//#endregion
|
|
16733
|
+
//#region src/chat/services/plan-continuation.ts
|
|
16734
|
+
const OPEN_PLAN_TAG = "open-plan";
|
|
16735
|
+
function openItems(input) {
|
|
16736
|
+
const plan = input && typeof input === "object" ? input.plan : void 0;
|
|
16737
|
+
if (!Array.isArray(plan)) return [];
|
|
16738
|
+
return plan.flatMap((value) => {
|
|
16739
|
+
const item = value;
|
|
16740
|
+
if (typeof item?.step !== "string" || item.status !== "pending" && item.status !== "in_progress") return [];
|
|
16741
|
+
return [{
|
|
16742
|
+
step: item.step,
|
|
16743
|
+
status: item.status
|
|
16744
|
+
}];
|
|
16745
|
+
});
|
|
16746
|
+
}
|
|
16747
|
+
function messageText$1(message) {
|
|
16748
|
+
const content = message.content;
|
|
16749
|
+
if (!Array.isArray(content)) return typeof content === "string" ? content : "";
|
|
16750
|
+
return content.flatMap((part) => {
|
|
16751
|
+
const text = part?.text;
|
|
16752
|
+
return typeof text === "string" ? [text] : [];
|
|
16753
|
+
}).join("\n");
|
|
16754
|
+
}
|
|
16755
|
+
function retainedOpenItems(message) {
|
|
16756
|
+
const text = messageText$1(message);
|
|
16757
|
+
if (!isCompactionSummaryText(text)) return;
|
|
16758
|
+
const continuation = unwrapCurrentInstruction(text) ?? text;
|
|
16759
|
+
const open = `<${OPEN_PLAN_TAG}>\n`;
|
|
16760
|
+
const close = `\n</${OPEN_PLAN_TAG}>`;
|
|
16761
|
+
const closeIndex = continuation.lastIndexOf(close);
|
|
16762
|
+
const openIndex = continuation.lastIndexOf(open, closeIndex);
|
|
16763
|
+
if (openIndex < 0 || closeIndex < 0) return;
|
|
16764
|
+
const payload = continuation.slice(openIndex + open.length, closeIndex);
|
|
16765
|
+
try {
|
|
16766
|
+
return openItems({ plan: JSON.parse(payload) });
|
|
16767
|
+
} catch {
|
|
16768
|
+
return;
|
|
16769
|
+
}
|
|
16770
|
+
}
|
|
16771
|
+
/** Read open items from the latest successful plan state. */
|
|
16772
|
+
function latestOpenPlanItems(messages) {
|
|
16773
|
+
const successfulCalls = /* @__PURE__ */ new Set();
|
|
16774
|
+
for (let messageIndex = messages.length - 1; messageIndex >= 0; messageIndex -= 1) {
|
|
16775
|
+
const message = messages[messageIndex];
|
|
16776
|
+
if (message.role === "toolResult" && message.toolName === "updatePlan" && typeof message.toolCallId === "string" && message.isError !== true) {
|
|
16777
|
+
successfulCalls.add(message.toolCallId);
|
|
16778
|
+
continue;
|
|
16779
|
+
}
|
|
16780
|
+
if (message.role === "user") {
|
|
16781
|
+
const retained = retainedOpenItems(messages[messageIndex]);
|
|
16782
|
+
if (retained) return retained;
|
|
16783
|
+
}
|
|
16784
|
+
if (message.role !== "assistant" || !Array.isArray(message.content)) continue;
|
|
16785
|
+
for (let partIndex = message.content.length - 1; partIndex >= 0; partIndex -= 1) {
|
|
16786
|
+
const call = message.content[partIndex];
|
|
16787
|
+
if (call?.type === "toolCall" && call.name === "updatePlan" && typeof call.id === "string" && successfulCalls.has(call.id)) return openItems(call.arguments);
|
|
16788
|
+
}
|
|
16789
|
+
}
|
|
16790
|
+
return [];
|
|
16791
|
+
}
|
|
16792
|
+
/** Append exact open plan state to continuation text. */
|
|
16793
|
+
function appendOpenPlan(continuation, messages) {
|
|
16794
|
+
const plan = latestOpenPlanItems(messages);
|
|
16795
|
+
return plan.length === 0 ? continuation : `${continuation}\n\n<${OPEN_PLAN_TAG}>\n${JSON.stringify(plan)}\n</${OPEN_PLAN_TAG}>`;
|
|
16796
|
+
}
|
|
16797
|
+
//#endregion
|
|
16658
16798
|
//#region src/chat/services/context-compaction.ts
|
|
16659
16799
|
const RETAINED_USER_MESSAGE_TOKENS = 2e4;
|
|
16660
16800
|
const MAX_SUMMARY_CHARS = 6e3;
|
|
@@ -16892,7 +17032,8 @@ async function writeCompactedThreadContext(args, sourceMessages, summary, contex
|
|
|
16892
17032
|
const eventStore = getConversationEventStore();
|
|
16893
17033
|
const sourceProjection = await loadConversationProjection({ conversationId: args.conversationId });
|
|
16894
17034
|
const retained = selectRetainedUserMessageEntries(trimTrailingAssistantMessages(sourceProjection.messages));
|
|
16895
|
-
const
|
|
17035
|
+
const continuation = appendOpenPlan(summary, sourceMessages);
|
|
17036
|
+
const replacement = [...retained.map((entry) => entry.message), userMessage(`${COMPACTION_SUMMARY_PREFIX}\n${continuation}`)];
|
|
16896
17037
|
const replacementInputTokens = estimateHistoryTokens(replacement);
|
|
16897
17038
|
const replacementProvenance = buildReplacementProvenance({
|
|
16898
17039
|
retained,
|
|
@@ -16945,7 +17086,8 @@ async function compactContextForHandoff(args, deps) {
|
|
|
16945
17086
|
const contextMessage = runtimeContextMessage(args.runtimeContext);
|
|
16946
17087
|
if (!contextMessage) throw new Error("Handoff requires the current runtime turn context");
|
|
16947
17088
|
const generatedSummary = await summarizeContext(args, deps);
|
|
16948
|
-
const
|
|
17089
|
+
const continuation = appendOpenPlan(generatedSummary, args.piMessages);
|
|
17090
|
+
const summary = `${MODEL_HANDOFF_SUMMARY_PREFIX}\n${continuation}`;
|
|
16949
17091
|
const messages = [contextMessage, {
|
|
16950
17092
|
role: "user",
|
|
16951
17093
|
content: [{
|
|
@@ -16954,7 +17096,6 @@ async function compactContextForHandoff(args, deps) {
|
|
|
16954
17096
|
}],
|
|
16955
17097
|
timestamp: contextMessage.timestamp
|
|
16956
17098
|
}];
|
|
16957
|
-
const replacementMessages = stripRuntimeTurnContext(messages);
|
|
16958
17099
|
args.signal?.throwIfAborted();
|
|
16959
17100
|
await getConversationEventStore().replaceHistory(args.conversationId, {
|
|
16960
17101
|
createdAtMs: Date.now(),
|
|
@@ -16965,7 +17106,7 @@ async function compactContextForHandoff(args, deps) {
|
|
|
16965
17106
|
...args.target.reasoningLevel ? { reasoningLevel: args.target.reasoningLevel } : void 0,
|
|
16966
17107
|
...args.triggeringToolCallId ? { triggeringToolCallId: args.triggeringToolCallId } : void 0,
|
|
16967
17108
|
summary: generatedSummary,
|
|
16968
|
-
replacementHistory:
|
|
17109
|
+
replacementHistory: messages.map((message) => ({ item: historyItemFromPiMessage(message, contextProvenance) }))
|
|
16969
17110
|
}
|
|
16970
17111
|
});
|
|
16971
17112
|
return messages;
|
|
@@ -17006,7 +17147,8 @@ async function compactActiveContextIfNeeded(args, deps) {
|
|
|
17006
17147
|
reason: "summary_failed"
|
|
17007
17148
|
};
|
|
17008
17149
|
}
|
|
17009
|
-
const
|
|
17150
|
+
const continuation = appendOpenPlan(summary, source.messages);
|
|
17151
|
+
const summaryMessage = userMessage(`${ACTIVE_TURN_COMPACTION_SUMMARY_PREFIX}\n${continuation}`);
|
|
17010
17152
|
const retainedInstruction = pendingMessages.length === 0 ? await loadLastInstruction(args.conversationId) : void 0;
|
|
17011
17153
|
const instructionMessages = retainedInstruction ? [retainedInstruction.message] : pendingMessages.map((entry) => entry.message);
|
|
17012
17154
|
const instructionProvenance = retainedInstruction ? [retainedInstruction.provenance] : pendingMessages.map((entry) => entry.provenance);
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { t as __exportAll } from "./rolldown-runtime-B4FMCO8f.js";
|
|
2
|
-
import { a as embedTexts, r as completeObject } from "./client-
|
|
3
|
-
import { C as withSpan, P as normalizeIdentityEmail, _ as setSpanAttributes, d as logInfo, f as logWarn, u as logException, v as setSpanStatus } from "./logging-
|
|
2
|
+
import { a as embedTexts, r as completeObject } from "./client-BV3_abpr.js";
|
|
3
|
+
import { C as withSpan, P as normalizeIdentityEmail, _ as setSpanAttributes, d as logInfo, f as logWarn, u as logException, v as setSpanStatus } from "./logging-CtfUmyiN.js";
|
|
4
4
|
import { a as getClient$1 } from "./sentry-CgWZM_kV.js";
|
|
5
|
-
import { t as canExposeConversationPayload } from "./conversation-privacy-
|
|
6
|
-
import { a as getChatConfig, n as botConfig, s as getSlackBotToken } from "./config-
|
|
5
|
+
import { t as canExposeConversationPayload } from "./conversation-privacy-C_w2FAlM.js";
|
|
6
|
+
import { a as getChatConfig, n as botConfig, s as getSlackBotToken } from "./config-DceVK986.js";
|
|
7
7
|
import { n as defaultModelId } from "./model-profile-CZmVoGdX.js";
|
|
8
8
|
import { _ as parseSlackMessageTs, c as isActorUserId, h as parseSlackTeamId, m as parseSlackChannelReferenceId, u as parseActorUserId } from "./context-Bplcgypl.js";
|
|
9
9
|
import { n as juniorDestinations } from "./destinations-BeBiJeEM.js";
|
|
10
|
-
import { C as juniorCodeRepositories, D as juniorIdentities, E as juniorConversations, O as juniorUsers, S as juniorCodeChanges, T as conversationReadColumns, _ as CONVERSATION_METRICS, g as juniorConversationBriefs, h as juniorConversationBindings, i as juniorWorkspaces, m as juniorConversationParticipants, n as juniorSnapshots, r as juniorWorkspaceRepos, t as createJuniorSqlExecutor, v as juniorConversationMetrics, x as juniorConversationAnnotations, y as juniorConversationEvents } from "./executor-
|
|
10
|
+
import { C as juniorCodeRepositories, D as juniorIdentities, E as juniorConversations, O as juniorUsers, S as juniorCodeChanges, T as conversationReadColumns, _ as CONVERSATION_METRICS, g as juniorConversationBriefs, h as juniorConversationBindings, i as juniorWorkspaces, m as juniorConversationParticipants, n as juniorSnapshots, r as juniorWorkspaceRepos, t as createJuniorSqlExecutor, v as juniorConversationMetrics, x as juniorConversationAnnotations, y as juniorConversationEvents } from "./executor-CxoH7xaY.js";
|
|
11
11
|
import { B as historyReplacementSchema, C as conversationReportEventSchema, I as conversationEventDataSchema, K as usageSchema, M as conversationBriefSchema, N as parseBriefInput, V as newConversationEventSchema, z as decodeStoredConversationEvent } from "./conversation-BpqLg4MM.js";
|
|
12
|
-
import { A as sleep$1, P as SANDBOX_WORKSPACE_ROOT, l as isSandboxMissingError, n as hash, v as getVercelSandboxCredentials, w as getStateAdapter, x as runNonInteractiveCommand } from "./profile-
|
|
12
|
+
import { A as sleep$1, P as SANDBOX_WORKSPACE_ROOT, l as isSandboxMissingError, n as hash, v as getVercelSandboxCredentials, w as getStateAdapter, x as runNonInteractiveCommand } from "./profile-BRupCR8f.js";
|
|
13
13
|
import { n as briefEntriesFromReportEvents, s as generateBrief, t as BRIEF_PROMPT } from "./prompt-DAoaq0CT.js";
|
|
14
14
|
import { AsyncLocalStorage } from "node:async_hooks";
|
|
15
15
|
import { z } from "zod";
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { F as isRecord, d as logInfo, f as logWarn } from "./logging-
|
|
2
|
-
import { h as normalizeSlackEmojiName } from "./config-
|
|
1
|
+
import { F as isRecord, d as logInfo, f as logWarn } from "./logging-CtfUmyiN.js";
|
|
2
|
+
import { h as normalizeSlackEmojiName } from "./config-DceVK986.js";
|
|
3
3
|
import { _ as parseSlackMessageTs, g as parseSlackUserId } from "./context-Bplcgypl.js";
|
|
4
|
-
import { G as isDmChannel, J as withSlackRetries, K as normalizeSlackConversationId, U as getSlackClient, n as applyPluginFormatMarkdown, un as parseDestination, z as SlackActionError } from "./agent-hooks-
|
|
5
|
-
import { n as pluginCatalogRuntime } from "./catalog-runtime-
|
|
6
|
-
import { w as getStateAdapter } from "./profile-
|
|
4
|
+
import { G as isDmChannel, J as withSlackRetries, K as normalizeSlackConversationId, U as getSlackClient, n as applyPluginFormatMarkdown, un as parseDestination, z as SlackActionError } from "./agent-hooks-Au93EfEr.js";
|
|
5
|
+
import { n as pluginCatalogRuntime } from "./catalog-runtime-B9yDPVCR.js";
|
|
6
|
+
import { w as getStateAdapter } from "./profile-BRupCR8f.js";
|
|
7
7
|
import { r as isExperimentalFeatureEnabled } from "./experimental-CIXf7Uye.js";
|
|
8
8
|
import { randomBytes } from "node:crypto";
|
|
9
9
|
import { actorSchema, sourceSchema } from "@sentry/junior-plugin-api";
|
package/dist/api.js
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
import { f as logWarn, u as logException } from "./logging-
|
|
1
|
+
import { f as logWarn, u as logException } from "./logging-CtfUmyiN.js";
|
|
2
2
|
import { _ as parseSlackMessageTs, h as parseSlackTeamId, p as parseSlackChannelId } from "./context-Bplcgypl.js";
|
|
3
|
-
import { $ as resolveViewerUser, $t as parseSessionSource, Ct as conversationArchivedForEmail, D as SANDBOX_RUNTIME, Dt as conversationNotArchivedForEmail, Et as conversationHasParticipantUser, Ft as listConversationAnnotations, Gt as getDb, It as listConversationAnnotationsById, J as withSlackRetries, Kt as getSqlExecutor, Mt as readConversationEventPage, Nt as buildSentryConversationUrl, Ot as conversationNotArchivedForUser, S as WorkspaceValidationError, St as conversationArchiveTimes, Tt as conversationHasParticipantEmail, U as getSlackClient, Wt as getConversationStore, Z as findUserByEmail, Zt as locationFromRow, _ as deleteWorkspace, an as resolveRootConversationId, b as listWorkspaces, bt as createPluginLogger, et as updateViewerDisplayName, g as createWorkspace, in as hasAgentTurnUsage, j as workspaceRepoCheckoutPath, jt as readLatestConversationBrief, kt as viewerConversationMembership, rn as agentTurnUsageSchema, u as getPlugins, v as getWorkspace, wt as conversationArchivedForUser, x as updateWorkspace, xt as readConversationAccessFromSql } from "./agent-hooks-
|
|
3
|
+
import { $ as resolveViewerUser, $t as parseSessionSource, Ct as conversationArchivedForEmail, D as SANDBOX_RUNTIME, Dt as conversationNotArchivedForEmail, Et as conversationHasParticipantUser, Ft as listConversationAnnotations, Gt as getDb, It as listConversationAnnotationsById, J as withSlackRetries, Kt as getSqlExecutor, Mt as readConversationEventPage, Nt as buildSentryConversationUrl, Ot as conversationNotArchivedForUser, S as WorkspaceValidationError, St as conversationArchiveTimes, Tt as conversationHasParticipantEmail, U as getSlackClient, Wt as getConversationStore, Z as findUserByEmail, Zt as locationFromRow, _ as deleteWorkspace, an as resolveRootConversationId, b as listWorkspaces, bt as createPluginLogger, et as updateViewerDisplayName, g as createWorkspace, in as hasAgentTurnUsage, j as workspaceRepoCheckoutPath, jt as readLatestConversationBrief, kt as viewerConversationMembership, rn as agentTurnUsageSchema, u as getPlugins, v as getWorkspace, wt as conversationArchivedForUser, x as updateWorkspace, xt as readConversationAccessFromSql } from "./agent-hooks-Au93EfEr.js";
|
|
4
4
|
import { n as juniorDestinations } from "./destinations-BeBiJeEM.js";
|
|
5
|
-
import { C as juniorCodeRepositories, D as juniorIdentities, E as juniorConversations, O as juniorUsers, S as juniorCodeChanges, T as conversationReadColumns, b as juniorApiTokens, g as juniorConversationBriefs, m as juniorConversationParticipants, o as juniorSchedulerTasks, v as juniorConversationMetrics, y as juniorConversationEvents } from "./executor-
|
|
5
|
+
import { C as juniorCodeRepositories, D as juniorIdentities, E as juniorConversations, O as juniorUsers, S as juniorCodeChanges, T as conversationReadColumns, b as juniorApiTokens, g as juniorConversationBriefs, m as juniorConversationParticipants, o as juniorSchedulerTasks, v as juniorConversationMetrics, y as juniorConversationEvents } from "./executor-CxoH7xaY.js";
|
|
6
6
|
import { D as createConversationBodySchema, O as createConversationMessageBodySchema, T as conversationStatsReportSchema, _ as conversationParamsSchema, a as cancelConversationPendingMessagesBodySchema, c as conversationAttachmentParamsSchema, d as conversationDetailReportSchema, g as conversationFeedSchema, h as conversationFeedQuerySchema, i as archiveConversationResponseSchema, m as conversationEventsQuerySchema, o as cancelConversationPendingMessagesResponseSchema, p as conversationEventPageSchema, r as archiveConversationBodySchema, t as acceptedConversationMessageSchema, u as conversationDetailQuerySchema, x as conversationPendingMessagesReportSchema } from "./conversation-BpqLg4MM.js";
|
|
7
|
-
import { t as fallbackShortTitle } from "./short-title-
|
|
8
|
-
import { n as hash, t as create } from "./profile-
|
|
9
|
-
import { A as eventAutomationTriggerAvailable, F as effectiveTaskOutcomes, G as listDeletedEventAutomationsCreatedBy, H as eventAutomationBelongsToUser, J as listPublicEventAutomationsForTeams, K as listEventAutomationsCreatedBy, Tt as getConversation, V as deleteEventAutomation, W as getEventAutomation, X as getEventCatalog, _ as parseScheduledAutomationRow, c as parseSlackThreadId, ht as cancelHumanFacingPendingMessages, i as readLiveAttachment, m as listPublicScheduledAutomationsForTeams, n as readStats, p as isListedScheduledAutomation, v as readScheduledAutomation, y as saveScheduledAutomation } from "./stats-
|
|
10
|
-
import { t as getCachedSnapshot } from "./resolve-
|
|
7
|
+
import { t as fallbackShortTitle } from "./short-title-BdpXj7eS.js";
|
|
8
|
+
import { n as hash, t as create } from "./profile-BRupCR8f.js";
|
|
9
|
+
import { A as eventAutomationTriggerAvailable, F as effectiveTaskOutcomes, G as listDeletedEventAutomationsCreatedBy, H as eventAutomationBelongsToUser, J as listPublicEventAutomationsForTeams, K as listEventAutomationsCreatedBy, Tt as getConversation, V as deleteEventAutomation, W as getEventAutomation, X as getEventCatalog, _ as parseScheduledAutomationRow, c as parseSlackThreadId, ht as cancelHumanFacingPendingMessages, i as readLiveAttachment, m as listPublicScheduledAutomationsForTeams, n as readStats, p as isListedScheduledAutomation, v as readScheduledAutomation, y as saveScheduledAutomation } from "./stats-BjipUP7p.js";
|
|
10
|
+
import { t as getCachedSnapshot } from "./resolve-0BvJroyG.js";
|
|
11
11
|
import { t as getVercelConversationWorkQueue } from "./vercel-queue-DIkVcfK4.js";
|
|
12
12
|
import { c as runtimeInfoReportSchema, n as pluginOperationalReportFeedSchema, s as pluginsSchema, t as healthReportSchema, u as skillReportsSchema } from "./reporting-schema-DosTN__Q.js";
|
|
13
|
-
import { a as webActorFromEmail, c as formatSlackConversationRedactedLabel, d as resolveSlackConversationContextFromThreadId, f as lookupSlackUser, g as readHealthReport, m as createVercelAttachmentStorage, p as legacyWebMailboxMetadataSchema, r as createAndEnqueueConversation, t as appendAndEnqueueWebMessage } from "./web-input-
|
|
14
|
-
import { a as readAutomationExecutionStatusDays, c as readAutomationExecutions, d as conversationActiveDaysColumn, f as conversationAggregateColumns, i as readAutomationExecutionHours, l as readAutomationRuns, n as readAutomationExecutionByConversationId, o as readAutomationExecutionStatusHours, p as conversationRangeColumns, r as readAutomationExecutionDays, s as readAutomationExecutionSummaries, t as emptyAutomationRunWindows } from "./execution-stats-
|
|
15
|
-
import { r as getWebAuthorization } from "./web-authorization-
|
|
13
|
+
import { a as webActorFromEmail, c as formatSlackConversationRedactedLabel, d as resolveSlackConversationContextFromThreadId, f as lookupSlackUser, g as readHealthReport, m as createVercelAttachmentStorage, p as legacyWebMailboxMetadataSchema, r as createAndEnqueueConversation, t as appendAndEnqueueWebMessage } from "./web-input-BqFF7CQB.js";
|
|
14
|
+
import { a as readAutomationExecutionStatusDays, c as readAutomationExecutions, d as conversationActiveDaysColumn, f as conversationAggregateColumns, i as readAutomationExecutionHours, l as readAutomationRuns, n as readAutomationExecutionByConversationId, o as readAutomationExecutionStatusHours, p as conversationRangeColumns, r as readAutomationExecutionDays, s as readAutomationExecutionSummaries, t as emptyAutomationRunWindows } from "./execution-stats-BIyGof8p.js";
|
|
15
|
+
import { r as getWebAuthorization } from "./web-authorization-DhXHpeMK.js";
|
|
16
16
|
import { $ as sumUtcHoursIntoSixHours, A as actorProfileReportSchema, C as createPersonalTokenBodySchema, D as personalTokenParamsSchema, F as locationDirectoryReportSchema, G as codePersonReportSchema, I as locationParamsSchema, J as HOUR_MS$1, L as activityDays$1, M as personalSpendReportSchema, O as revokePersonalTokenResponseSchema, P as locationDetailReportSchema, Q as startOfUtcHour, R as activityHours$1, T as personalTokenListSchema, W as codeOverviewReportSchema, X as fillUtcHours, Y as fillUtcDays, Z as fillUtcSixHours, _ as automationRunListSchema, a as workspaceBodySchema, at as apiErrorSchema, et as trailingUtcDayWindow, g as automationParamsSchema, h as automationListSchema, i as deleteWorkspaceResponseSchema, it as utcHourKey, j as personParamsSchema, k as actorDirectoryReportSchema, l as workspaceSchema, m as automationListQuerySchema, n as statsReportSchema, nt as trailingUtcSixHourWindow, o as workspaceListSchema, q as DAY_MS$1, rt as utcDayKey, s as workspaceParamsSchema, tt as trailingUtcHourWindow, u as automationExecutionListSchema, w as createdPersonalTokenSchema, z as activitySixHours$1 } from "./schema-BMG8MJPJ.js";
|
|
17
17
|
import { Hono } from "hono";
|
|
18
18
|
import path from "node:path";
|
|
@@ -3453,7 +3453,7 @@ async function readPeoplePluginReports(args) {
|
|
|
3453
3453
|
reports: [],
|
|
3454
3454
|
source: "plugins"
|
|
3455
3455
|
});
|
|
3456
|
-
const { getPluginProfileReports } = await import("./agent-hooks-
|
|
3456
|
+
const { getPluginProfileReports } = await import("./agent-hooks-Au93EfEr.js").then((n) => n.t);
|
|
3457
3457
|
return pluginOperationalReportFeedSchema.parse({
|
|
3458
3458
|
generatedAt: new Date(nowMs).toISOString(),
|
|
3459
3459
|
reports: await getPluginProfileReports({
|
|
@@ -4062,7 +4062,7 @@ function readDescriptionText(home) {
|
|
|
4062
4062
|
}
|
|
4063
4063
|
/** Read discovered skill names for authenticated runtime diagnostics. */
|
|
4064
4064
|
async function readSkillReports() {
|
|
4065
|
-
const { discoverSkills } = await import("./skills-
|
|
4065
|
+
const { discoverSkills } = await import("./skills-MlftIiVP.js").then((n) => n.o);
|
|
4066
4066
|
const skills = await discoverSkills();
|
|
4067
4067
|
return skillReportsSchema.parse(skills.map((skill) => ({
|
|
4068
4068
|
name: skill.name,
|
|
@@ -4071,7 +4071,7 @@ async function readSkillReports() {
|
|
|
4071
4071
|
}
|
|
4072
4072
|
/** Read safe configured plugin metadata for authenticated runtime diagnostics. */
|
|
4073
4073
|
async function readPlugins() {
|
|
4074
|
-
const { pluginCatalogRuntime } = await import("./catalog-runtime-
|
|
4074
|
+
const { pluginCatalogRuntime } = await import("./catalog-runtime-B9yDPVCR.js").then((n) => n.t);
|
|
4075
4075
|
return pluginsSchema.parse(pluginCatalogRuntime.getProviders().map((plugin) => ({
|
|
4076
4076
|
configKeys: plugin.manifest.configKeys ?? [],
|
|
4077
4077
|
description: plugin.manifest.description,
|
|
@@ -4083,7 +4083,7 @@ async function readPlugins() {
|
|
|
4083
4083
|
async function readRuntimeInfoReport() {
|
|
4084
4084
|
const [{ homeDir }, { pluginCatalogRuntime }, plugins, skills] = await Promise.all([
|
|
4085
4085
|
import("./package-discovery-7a9YqLhE.js").then((n) => n.r),
|
|
4086
|
-
import("./catalog-runtime-
|
|
4086
|
+
import("./catalog-runtime-B9yDPVCR.js").then((n) => n.t),
|
|
4087
4087
|
readPlugins(),
|
|
4088
4088
|
readSkillReports()
|
|
4089
4089
|
]);
|
|
@@ -4100,7 +4100,7 @@ async function readRuntimeInfoReport() {
|
|
|
4100
4100
|
/** Read sanitized operational summaries contributed by plugins. */
|
|
4101
4101
|
async function readPluginOperationalReportFeed() {
|
|
4102
4102
|
const nowMs = Date.now();
|
|
4103
|
-
const { getPluginOperationalReports } = await import("./agent-hooks-
|
|
4103
|
+
const { getPluginOperationalReports } = await import("./agent-hooks-Au93EfEr.js").then((n) => n.t);
|
|
4104
4104
|
return pluginOperationalReportFeedSchema.parse({
|
|
4105
4105
|
source: "plugins",
|
|
4106
4106
|
generatedAt: new Date(nowMs).toISOString(),
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { t as ConversationStore } from "./store-DoewL5mG.js";
|
|
2
2
|
import "./history-ClE4toxe.js";
|
|
3
|
-
import { n as JuniorPluginSet } from "./plugins-
|
|
3
|
+
import { n as JuniorPluginSet } from "./plugins-BT2l4We3.js";
|
|
4
4
|
import { Hono } from "hono";
|
|
5
5
|
import "@earendil-works/pi-ai/compat";
|
|
6
6
|
import "@earendil-works/pi-ai/api/anthropic-messages";
|
package/dist/app.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { i as ModelProfileInput, n as JuniorDashboardOptions, r as createApp, t as JuniorAppOptions } from "./app-
|
|
2
|
-
import { i as defineJuniorPlugins, n as JuniorPluginSet, r as JuniorPluginSetOptions, t as JuniorPluginInput } from "./plugins-
|
|
1
|
+
import { i as ModelProfileInput, n as JuniorDashboardOptions, r as createApp, t as JuniorAppOptions } from "./app-BYD2Nyji.js";
|
|
2
|
+
import { i as defineJuniorPlugins, n as JuniorPluginSet, r as JuniorPluginSetOptions, t as JuniorPluginInput } from "./plugins-BT2l4We3.js";
|
|
3
3
|
import { t as JUNIOR_VERSION } from "./version-CnXZ614E.js";
|
|
4
4
|
export { JUNIOR_VERSION, JuniorAppOptions, JuniorDashboardOptions, type JuniorPluginInput, type JuniorPluginSet, type JuniorPluginSetOptions, type ModelProfileInput, createApp, defineJuniorPlugins };
|