@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.
Files changed (56) hide show
  1. package/dist/{agent-BFKt9huN.js → agent-C-wRol8n.js} +181 -39
  2. package/dist/{agent-hooks-pyhfSnAL.js → agent-hooks-Au93EfEr.js} +6 -6
  3. package/dist/{agent-runner-CIiziOcz.js → agent-runner-skcXibgb.js} +5 -5
  4. package/dist/api.js +15 -15
  5. package/dist/{app-D4nNdzPG.d.ts → app-BYD2Nyji.d.ts} +1 -1
  6. package/dist/app.d.ts +2 -2
  7. package/dist/app.js +29 -29
  8. package/dist/{auth-pause-state-BKGc9Y8O.js → auth-pause-state-CU71X-6Z.js} +6 -6
  9. package/dist/{briefs-Bq5vouaO.js → briefs-Dcdrr46e.js} +2 -2
  10. package/dist/{catalog-runtime-D3hJdAMz.js → catalog-runtime-B9yDPVCR.js} +1 -1
  11. package/dist/{checkpoint-Ja5A32op.js → checkpoint-CQ6eQrJD.js} +6 -6
  12. package/dist/cli/chat.d.ts +1 -1
  13. package/dist/cli/chat.js +13 -13
  14. package/dist/cli/check.js +3 -3
  15. package/dist/cli/main.js +1 -1
  16. package/dist/cli/plugins.d.ts +1 -1
  17. package/dist/cli/plugins.js +3 -3
  18. package/dist/cli/snapshot-create.js +3 -3
  19. package/dist/cli/upgrade.d.ts +1 -1
  20. package/dist/cli/upgrade.js +3 -3
  21. package/dist/{client-DqG_LDSH.js → client-BV3_abpr.js} +2 -2
  22. package/dist/{config-CdS5GQ7W.js → config-DceVK986.js} +2 -2
  23. package/dist/{conversation-privacy-B7844ly7.js → conversation-privacy-C_w2FAlM.js} +1 -1
  24. package/dist/{credential-sync-DLWVq50D.js → credential-sync-DKXGTID8.js} +22 -22
  25. package/dist/{execution-stats-BbYien1O.js → execution-stats-BIyGof8p.js} +3 -3
  26. package/dist/{executor-CIl9A6cO.js → executor-CxoH7xaY.js} +1 -1
  27. package/dist/instrumentation.js +2 -2
  28. package/dist/{job-queue-CIz2Sij0.js → job-queue-DwA7xmCQ.js} +1 -1
  29. package/dist/{logging-dD_n9Ocp.js → logging-CtfUmyiN.js} +1 -1
  30. package/dist/nitro.d.ts +2 -2
  31. package/dist/nitro.js +3 -3
  32. package/dist/{oauth-callback-server-CBfuGXP0.js → oauth-callback-server-RefMcYAD.js} +2 -2
  33. package/dist/{pending-auth-KOZWIp4m.js → pending-auth-B_nSqxpd.js} +2 -2
  34. package/dist/{plugins-BI9A1vKA.d.ts → plugins-BT2l4We3.d.ts} +2 -1
  35. package/dist/{profile-BfWuRDUF.js → profile-BRupCR8f.js} +4 -4
  36. package/dist/{registry-DYHLzGuO.js → registry-DiIwniX1.js} +62 -18
  37. package/dist/{resolve-CU8DArbR.js → resolve-0BvJroyG.js} +2 -2
  38. package/dist/{runner-BtHHH38l.js → runner-DDHI2RaU.js} +9 -9
  39. package/dist/{sandbox-egress-signals-BvZZ02w9.js → sandbox-egress-signals-CoVhGAih.js} +1 -1
  40. package/dist/{short-title-CKnmS3nO.js → short-title-BdpXj7eS.js} +2 -2
  41. package/dist/{skills-CLsaAMtU.js → skills-MlftIiVP.js} +2 -2
  42. package/dist/{spawn-C6Utdbzm.js → spawn-DLlXPelG.js} +2 -2
  43. package/dist/{stats-D4Ar_7MS.js → stats-BjipUP7p.js} +5 -5
  44. package/dist/{task-queue-BgOOj26_.js → task-queue-DyfnQ7ZM.js} +3 -3
  45. package/dist/{task-runner-BfOnhH3C.js → task-runner-BOuCBVgO.js} +7 -7
  46. package/dist/{thread-state-B-jR3Aa8.js → thread-state-DrGVG1E-.js} +5 -5
  47. package/dist/{turn-execution-_rlctc-2.js → turn-execution-CZKg5Fw9.js} +3 -3
  48. package/dist/{turn-lifecycle-CVRu8Hmm.js → turn-lifecycle-BV2Wp_qF.js} +1 -1
  49. package/dist/{validation-5255qF_p.js → validation-BXDSxuOX.js} +1 -1
  50. package/dist/{version-DS_6p6x1.js → version-DNJ6W0LC.js} +1 -1
  51. package/dist/version.js +1 -1
  52. package/dist/{web-authorization-TdkXi7XG.js → web-authorization-DhXHpeMK.js} +1 -1
  53. package/dist/{web-input-vHOAXVxj.js → web-input-BqFF7CQB.js} +4 -4
  54. package/dist/{work-NIWYQvh-.js → work-DEMP0L3f.js} +9 -9
  55. package/dist/{worker-BgY7599f.js → worker-DvK47zmH.js} +5 -5
  56. 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-DqG_LDSH.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-dD_n9Ocp.js";
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-B7844ly7.js";
5
- import { h as normalizeSlackEmojiName, n as botConfig } from "./config-CdS5GQ7W.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-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-pyhfSnAL.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-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-CIl9A6cO.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-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 resolvePluginCommandEnv, c as getOAuthProviderErrorAttributes, i as resolveAuthTokenPlaceholder, o as OAuthProviderError, s as fetchWithBoundedOAuthErrorBodies, u as CredentialUnavailableError } from "./registry-DYHLzGuO.js";
14
- import { n as pluginCatalogRuntime } from "./catalog-runtime-D3hJdAMz.js";
15
- import { a as parseSkillInvocation, n as findSkillByName, r as loadSkillsByName, t as discoverSkills } from "./skills-CLsaAMtU.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-Ja5A32op.js";
17
- import { n as generateShortTitle, r as resolveTaskTitle } from "./short-title-CKnmS3nO.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-BfWuRDUF.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-D4Ar_7MS.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-KOZWIp4m.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-CIiziOcz.js";
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-CU8DArbR.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-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-CIz2Sij0.js";
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 \`update_plan\` 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
+ 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 \`update_plan\` call — the harness already displays it. Instead, summarize the change made and highlight any important context or next step.
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 \`update_plan\` with the updated plan and make sure to provide an \`explanation\` of the rationale when doing so.
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 \`update_plan\` is available to you. You can use it to keep an up‑to‑date, step‑by‑step plan for the task.
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 \`update_plan\` 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
+ 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 \`update_plan\` 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 \`update_plan\` call.
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 \`update_plan\` to mark all steps as \`completed\`.`.split("\n");
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 requestInit = {};
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
- ...Object.keys(requestInit).length > 0 ? { requestInit } : void 0,
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
- update_plan: createUpdatePlanTool(),
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 `update_plan` payload into the active assistant status. */
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 === "update_plan") return buildPlanStatus(toolCall.arguments);
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 === "update_plan" ? buildPlanStatus(params) : executionToolName === "reportProgress" ? buildReportedProgressStatus(params) : void 0;
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 requestInit = {};
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
- ...Object.keys(requestInit).length > 0 ? { requestInit } : void 0,
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 replacement = [...retained.map((entry) => entry.message), userMessage(`${COMPACTION_SUMMARY_PREFIX}\n${summary}`)];
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 summary = `${MODEL_HANDOFF_SUMMARY_PREFIX}\n${generatedSummary}`;
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: replacementMessages.map((replacementMessage) => ({ item: historyItemFromPiMessage(replacementMessage, contextProvenance) }))
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 summaryMessage = userMessage(`${ACTIVE_TURN_COMPACTION_SUMMARY_PREFIX}\n${summary}`);
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-DqG_LDSH.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-dD_n9Ocp.js";
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-B7844ly7.js";
6
- import { a as getChatConfig, n as botConfig, s as getSlackBotToken } from "./config-CdS5GQ7W.js";
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-CIl9A6cO.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-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-BfWuRDUF.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-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-dD_n9Ocp.js";
2
- import { h as normalizeSlackEmojiName } from "./config-CdS5GQ7W.js";
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-pyhfSnAL.js";
5
- import { n as pluginCatalogRuntime } from "./catalog-runtime-D3hJdAMz.js";
6
- import { w as getStateAdapter } from "./profile-BfWuRDUF.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-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-dD_n9Ocp.js";
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-pyhfSnAL.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-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-CIl9A6cO.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-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-CKnmS3nO.js";
8
- import { n as hash, t as create } from "./profile-BfWuRDUF.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-D4Ar_7MS.js";
10
- import { t as getCachedSnapshot } from "./resolve-CU8DArbR.js";
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-vHOAXVxj.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-BbYien1O.js";
15
- import { r as getWebAuthorization } from "./web-authorization-TdkXi7XG.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-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-pyhfSnAL.js").then((n) => n.t);
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-CLsaAMtU.js").then((n) => n.o);
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-D3hJdAMz.js").then((n) => n.t);
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-D3hJdAMz.js").then((n) => n.t),
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-pyhfSnAL.js").then((n) => n.t);
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-BI9A1vKA.js";
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-D4nNdzPG.js";
2
- import { i as defineJuniorPlugins, n as JuniorPluginSet, r as JuniorPluginSetOptions, t as JuniorPluginInput } from "./plugins-BI9A1vKA.js";
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 };