@sentry/junior 0.263.0 → 0.264.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 (60) hide show
  1. package/dist/{adapter-BIacI0Bt.js → adapter-BIbMSKlG.js} +1 -1
  2. package/dist/{admin-C7vUk7s9.js → admin-D4d0HXax.js} +1 -1
  3. package/dist/{agent-hooks-CqnZfuCt.js → agent-hooks-D_PbluRX.js} +9 -9
  4. package/dist/{agent-runner-BUBas7Yy.js → agent-runner-CvRxb09K.js} +59 -66
  5. package/dist/api/schema.d.ts +1 -1
  6. package/dist/api.js +25 -25
  7. package/dist/{app-Bo0kB987.d.ts → app-Buc5gIWz.d.ts} +5 -0
  8. package/dist/app.d.ts +1 -1
  9. package/dist/app.js +61 -41
  10. package/dist/{assistant-reply-BFmjgJjD.js → assistant-reply-BcJj_ORj.js} +1 -1
  11. package/dist/{briefs-h55v5lX9.js → briefs-BFfIE5N6.js} +2 -2
  12. package/dist/{catalog-runtime-Suf-aLlh.js → catalog-runtime-R53MWcMi.js} +1 -1
  13. package/dist/cli/chat.js +15 -15
  14. package/dist/cli/check.js +3 -3
  15. package/dist/cli/main.js +3 -3
  16. package/dist/cli/plugins.js +4 -4
  17. package/dist/cli/snapshot-create.js +4 -4
  18. package/dist/cli/upgrade.js +3 -3
  19. package/dist/{client-DZBCBj1M.js → client-DpOwh_zX.js} +2 -2
  20. package/dist/{config-Dnv8KmNs.js → config-BxPrFVJP.js} +2 -2
  21. package/dist/{connections-Br0_xv27.js → connections-BnTM1nRf.js} +10 -10
  22. package/dist/{conversation-privacy-FY8yc2q3.js → conversation-privacy-ueJ6i-t9.js} +1 -1
  23. package/dist/{credential-sync-BvkiyWF5.js → credential-sync-DeDkof_D.js} +14 -14
  24. package/dist/{executor-J9k2sp9m.js → executor-D3WIS4vl.js} +2 -2
  25. package/dist/{images-DV2FlEGL.js → images-5VNK_yYC.js} +2 -2
  26. package/dist/instrumentation.js +2 -2
  27. package/dist/{job-queue-B4yTgklN.js → job-queue-BYHonCAH.js} +1 -1
  28. package/dist/{logging-Dk_FpF36.js → logging-DNQqsQ57.js} +1 -1
  29. package/dist/{message-BzseAFH1.js → message-CDTJISxL.js} +4 -4
  30. package/dist/nitro.d.ts +1 -1
  31. package/dist/nitro.js +3 -3
  32. package/dist/{oauth-callback-server-bTspTMCC.js → oauth-callback-server-Bk4rbLOs.js} +2 -2
  33. package/dist/{profile-Dq5I7TV1.js → profile-ieODOp4u.js} +3 -3
  34. package/dist/{registry-BFzQFV_y.js → registry-CfdUEk4N.js} +1 -1
  35. package/dist/{resolve-CnRHib0U.js → resolve-BXShI336.js} +3 -3
  36. package/dist/{result-DczfmNBa.js → result-R35jcahx.js} +7 -7
  37. package/dist/{runner-CJd9Wec-.js → runner-IC4Drh3Y.js} +10 -10
  38. package/dist/{sandbox-egress-signals-DUmVkOx4.js → sandbox-egress-signals-C4RIfjb8.js} +1 -1
  39. package/dist/{service-account-x2QZXm4X.js → service-account-DJSRo2cL.js} +3 -3
  40. package/dist/{service-account-BI2kQDrb.js → service-account-DifohWyX.js} +3 -3
  41. package/dist/{session-stop-CtyJsnEj.js → session-stop-B9RRGC-P.js} +12 -12
  42. package/dist/{skills-Dbzx9-rS.js → skills-DVJmS_ZP.js} +2 -2
  43. package/dist/{spawn-D8WU99UV.js → spawn-DkVYGfSY.js} +2 -2
  44. package/dist/{store-TKg1HVKx.js → store-BvolNnx4.js} +3 -3
  45. package/dist/{store-UlOrW6JC.js → store-C_mHwAnR.js} +18 -9
  46. package/dist/{task-queue-BRB49H-J.js → task-queue-BcEyPhtX.js} +3 -3
  47. package/dist/{task-runner-C575f2Dd.js → task-runner-CiQj5M_9.js} +10 -10
  48. package/dist/{tasks-LOItiYgL.js → tasks-OgXmReUv.js} +10 -10
  49. package/dist/{thread-state-IDHdZA7R.js → thread-state-XFvpWXE9.js} +5 -5
  50. package/dist/{turn-failure-response-h_LSXJ-M.js → turn-failure-response-BjBAtnVt.js} +7 -7
  51. package/dist/{turn-lifecycle-Cvi6Sb8Y.js → turn-lifecycle-nvKL2rul.js} +1 -1
  52. package/dist/{turn-session-routing-5Nyv4fso.js → turn-session-routing-DEMxHySb.js} +1 -1
  53. package/dist/{validation-BeTriWC2.js → validation-XOFldwvE.js} +1 -1
  54. package/dist/{version-BQX_hLDC.js → version-C9f5hdHD.js} +1 -1
  55. package/dist/version.js +1 -1
  56. package/dist/{viewer-DmNRM88V.js → viewer-BuPwzOC9.js} +3 -3
  57. package/dist/{web-input-BHcGXSox.js → web-input-4t7TYLsY.js} +26 -26
  58. package/dist/{work-DLJMV02b.js → work-C_aF6JN5.js} +10 -10
  59. package/dist/{worker-vfG2ESg1.js → worker-DR633sA-.js} +8 -6
  60. package/package.json +4 -4
@@ -1,4 +1,4 @@
1
- import { i as getChatConfig } from "./config-Dnv8KmNs.js";
1
+ import { i as getChatConfig } from "./config-BxPrFVJP.js";
2
2
  import { setTimeout } from "node:timers/promises";
3
3
  import { createMemoryState } from "@chat-adapter/state-memory";
4
4
  import { createRedisState } from "@chat-adapter/state-redis";
@@ -1,4 +1,4 @@
1
- import { a as setUserAdminFromSql, d as getDb, n as listAdminUsersFromSql } from "./viewer-DmNRM88V.js";
1
+ import { a as setUserAdminFromSql, d as getDb, n as listAdminUsersFromSql } from "./viewer-BuPwzOC9.js";
2
2
  import { CLI_USAGE } from "./cli/run.js";
3
3
  // src/cli/admin.ts
4
4
  /**
@@ -1,21 +1,21 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-nwUcYXjP.js";
2
- import { i as completeObject, o as embedTexts } from "./client-DZBCBj1M.js";
3
- import { T as withSpan, a as extractGenAiUsageSummary, b as setSpanStatus, f as logException, m as logWarn, p as logInfo, y as setSpanAttributes, z as isRecord$1 } from "./logging-Dk_FpF36.js";
2
+ import { i as completeObject, o as embedTexts } from "./client-DpOwh_zX.js";
3
+ import { T as withSpan, a as extractGenAiUsageSummary, b as setSpanStatus, f as logException, m as logWarn, p as logInfo, y as setSpanAttributes, z as isRecord$1 } from "./logging-DNQqsQ57.js";
4
4
  import { a as getClient$1 } from "./sentry-BBUlHih9.js";
5
- import { t as canExposeConversationPayload } from "./conversation-privacy-FY8yc2q3.js";
6
- import { i as getChatConfig, n as botConfig, o as getSlackBotToken } from "./config-Dnv8KmNs.js";
5
+ import { t as canExposeConversationPayload } from "./conversation-privacy-ueJ6i-t9.js";
6
+ import { i as getChatConfig, n as botConfig, o as getSlackBotToken } from "./config-BxPrFVJP.js";
7
7
  import { r as defaultModelId } from "./model-profile-Bg8EoCKD.js";
8
8
  import { d as parseSlackTeamId, g as parseSlackMessageTs, i as isActorUserId, o as parseActorUserId, u as parseSlackChannelReferenceId } from "./actor-tlxzqaRe.js";
9
- import { D as hasAgentTurnUsage, M as readUserTimezone, P as saveUserTimezone, c as getConversationEventStore, d as getDb, f as getSqlExecutor, g as createSqlStore, i as resolveViewerUser, r as readActorIdentity } from "./viewer-DmNRM88V.js";
9
+ import { D as hasAgentTurnUsage, M as readUserTimezone, P as saveUserTimezone, c as getConversationEventStore, d as getDb, f as getSqlExecutor, g as createSqlStore, i as resolveViewerUser, r as readActorIdentity } from "./viewer-BuPwzOC9.js";
10
10
  import { c as juniorIdentities, d as juniorDestinations, l as juniorUsers, s as juniorConversations } from "./agent-invocations-CxKldAeB.js";
11
- import { _ as juniorConversationAnnotations, b as juniorAttachments, f as juniorConversationBriefs, h as juniorConversationEvents, i as juniorWorkspaces, n as juniorSnapshots, r as juniorWorkspaceRepos, u as juniorConversationParticipants, v as juniorCodeChanges, y as juniorCodeRepositories } from "./executor-J9k2sp9m.js";
11
+ import { _ as juniorConversationAnnotations, b as juniorAttachments, f as juniorConversationBriefs, h as juniorConversationEvents, i as juniorWorkspaces, n as juniorSnapshots, r as juniorWorkspaceRepos, u as juniorConversationParticipants, v as juniorCodeChanges, y as juniorCodeRepositories } from "./executor-D3WIS4vl.js";
12
12
  import { o as decodeStoredConversationEvent } from "./history-AY8rs-FR.js";
13
- import { h as credentialSubjectSchema } from "./registry-BFzQFV_y.js";
14
- import { n as getDefaultRedisStateAdapterFor, r as getStateAdapter, s as withLock } from "./adapter-BIacI0Bt.js";
13
+ import { h as credentialSubjectSchema } from "./registry-CfdUEk4N.js";
14
+ import { n as getDefaultRedisStateAdapterFor, r as getStateAdapter, s as withLock } from "./adapter-BIbMSKlG.js";
15
15
  import { i as isValidTimeZone } from "./cadence-R7Em4RjE.js";
16
16
  import { B as readMessageAttachments, C as conversationReportEventSchema, F as readMessageCardRefs, J as parseBriefInput, q as conversationBriefSchema, w as conversationReportMessageEventSchema } from "./conversation-B0baEwoA.js";
17
17
  import { n as briefEntriesFromReportEvents, s as generateBrief, t as BRIEF_PROMPT } from "./prompt-CxatQVaj.js";
18
- import { D as SANDBOX_WORKSPACE_ROOT, S as runNonInteractiveCommand, l as isSandboxMissingError, n as hash, v as getVercelSandboxCredentials, y as sleep$1 } from "./profile-Dq5I7TV1.js";
18
+ import { D as SANDBOX_WORKSPACE_ROOT, S as runNonInteractiveCommand, l as isSandboxMissingError, n as hash, v as getVercelSandboxCredentials, y as sleep$1 } from "./profile-ieODOp4u.js";
19
19
  import { AsyncLocalStorage } from "node:async_hooks";
20
20
  import { z } from "zod";
21
21
  import { createHash, createHmac, randomUUID, timingSafeEqual } from "node:crypto";
@@ -1,31 +1,31 @@
1
- import { $t as isToolResultMessage, An as createSandboxEgressCredentialToken, B as recordAttachmentsDelivered, Ct as canReusePendingAuthLink, Dn as clearSandboxEgressSignals, Dt as continuableMessages, G as recordMcpProviderConnected, Gn as getSlackMessagePermalink, Gt as getPiMessageRole, Hn as slackMention, Ht as isTurnExecutionLimitExceededError, In as resolveBaseUrl, It as TURN_LIMIT_DISABLED_REASON, J as recordTurnRoute, Jt as hasRuntimeTurnContext, Kn as openSlackDirectMessage, Kt as getTerminalAssistantMessages, L as loadTurnRoute, Lt as TurnBudgetExceededError, M as loadConnectedMcpProviders, N as loadConversationProjection, Nn as deliverOAuthAuthorization, O as automationRevision, On as consumeSandboxEgressAuthRequiredSignal, Ot as loadTurnCheckpoint, P as loadLastModelProfile, Pn as formatProviderLabel, Qn as getOAuthAccountProviders, Qt as isToolResultError, R as openConversationProjection, Rt as TurnSliceLimitExceededError, Sn as resolveSandboxCommandEnvironment, St as abandonReplacedPendingAuth, U as recordAuthorizationRequested, Vt as createTurnLimitGate, W as recordGuardianActionReviewed, Wn as addReactionToMessage, Wt as extractAssistantText, Xt as isAssistantMessage, Yn as uploadFilesToConversation, Zt as isContinuablePiBoundary, _n as isExperimentalFeatureEnabled, _t as createPluginAuthOrchestration, a as saveScheduledAutomation, an as SESSION_CONTEXT_SECTION_TAG, bn as createUserTokenStore, bt as AuthorizationFlowDisabledError, d as createEventAutomation, en as normalizeToolNameFromResult, f as deleteEventAutomation, g as listEventAutomationsForTeam, gt as PluginCredentialFailureError, hn as getAgentContextInputLimitTokens, ht as createPluginEgress, i as readScheduledAutomation, in as REQUEST_CONTEXT_SECTION_TAG, ir as getConfigDefaults, kn as consumeSandboxEgressPermissionDeniedSignal, kt as saveTurnCheckpoint, m as getEventAutomation, mn as getAgentContextCompactionTriggerTokens, n as listScheduledAutomationsForTeam, nn as stripRuntimeTurnContext, nr as historyItemFromPiMessage, nt as fallbackShortTitle, on as TURN_CONTEXT_TAG, pn as estimateTextTokens, q as recordToolExecutionStarted, qt as getUserMessageInstructionText, rn as trimTrailingAssistantMessages, rr as piMessageFromHistoryItem, rt as resolveTaskTitle, t as createScheduledAutomation, tn as retainRuntimeTurnContext, v as saveEventAutomation, vt as authorizationId, xn as buildSandboxEgressNetworkPolicy, xt as AuthorizationPauseError, y as setEventAutomationStatus, yt as AuthPausePersistenceError, z as recordAgentsInstructionsUpdated, zt as TurnToolCallLimitExceededError } from "./tasks-LOItiYgL.js";
2
- import { S as resolveGatewayCredential, _ as getProviderErrorAttributes, a as completeText, b as MISSING_GATEWAY_CREDENTIALS_ERROR, c as COMPACTION_SUMMARY_PREFIX, d as renderCurrentInstruction, f as unwrapCurrentInstruction, g as findProviderError, h as createProviderError, i as completeObject, l as hasCompactedConversationContext, m as ProviderError, n as GEN_AI_SERVER_ADDRESS, p as escapeXml, s as resolveGatewayModel, t as GEN_AI_PROVIDER_NAME, u as isCompactionSummaryText, x as getGatewayApiKey, y as isProviderRetryError } from "./client-DZBCBj1M.js";
3
- import { R as normalizeIdentityEmail, S as summarizeMessageText, T as withSpan, V as toOptionalString, _ as serializeGenAiAttribute, a as extractGenAiUsageSummary, b as setSpanStatus, c as getLogContextAttributesForSpan, d as logError, f as logException, h as normalizeGenAiFinishReason, i as extractGenAiUsageAttributes, l as getTracePropagationHeaders, m as logWarn, p as logInfo, w as withLogContext, x as setTags, y as setSpanAttributes, z as isRecord$4 } from "./logging-Dk_FpF36.js";
1
+ import { $t as isToolResultMessage, An as createSandboxEgressCredentialToken, B as recordAttachmentsDelivered, Ct as canReusePendingAuthLink, Dn as clearSandboxEgressSignals, Dt as continuableMessages, G as recordMcpProviderConnected, Gn as getSlackMessagePermalink, Gt as getPiMessageRole, Hn as slackMention, Ht as isTurnExecutionLimitExceededError, In as resolveBaseUrl, It as TURN_LIMIT_DISABLED_REASON, J as recordTurnRoute, Jt as hasRuntimeTurnContext, Kn as openSlackDirectMessage, Kt as getTerminalAssistantMessages, L as loadTurnRoute, Lt as TurnBudgetExceededError, M as loadConnectedMcpProviders, N as loadConversationProjection, Nn as deliverOAuthAuthorization, O as automationRevision, On as consumeSandboxEgressAuthRequiredSignal, Ot as loadTurnCheckpoint, P as loadLastModelProfile, Pn as formatProviderLabel, Qn as getOAuthAccountProviders, Qt as isToolResultError, R as openConversationProjection, Rt as TurnSliceLimitExceededError, Sn as resolveSandboxCommandEnvironment, St as abandonReplacedPendingAuth, U as recordAuthorizationRequested, Vt as createTurnLimitGate, W as recordGuardianActionReviewed, Wn as addReactionToMessage, Wt as extractAssistantText, Xt as isAssistantMessage, Yn as uploadFilesToConversation, Zt as isContinuablePiBoundary, _n as isExperimentalFeatureEnabled, _t as createPluginAuthOrchestration, a as saveScheduledAutomation, an as SESSION_CONTEXT_SECTION_TAG, bn as createUserTokenStore, bt as AuthorizationFlowDisabledError, d as createEventAutomation, en as normalizeToolNameFromResult, f as deleteEventAutomation, g as listEventAutomationsForTeam, gt as PluginCredentialFailureError, hn as getAgentContextInputLimitTokens, ht as createPluginEgress, i as readScheduledAutomation, in as REQUEST_CONTEXT_SECTION_TAG, ir as getConfigDefaults, kn as consumeSandboxEgressPermissionDeniedSignal, kt as saveTurnCheckpoint, m as getEventAutomation, mn as getAgentContextCompactionTriggerTokens, n as listScheduledAutomationsForTeam, nn as stripRuntimeTurnContext, nr as historyItemFromPiMessage, nt as fallbackShortTitle, on as TURN_CONTEXT_TAG, pn as estimateTextTokens, q as recordToolExecutionStarted, qt as getUserMessageInstructionText, rn as trimTrailingAssistantMessages, rr as piMessageFromHistoryItem, rt as resolveTaskTitle, t as createScheduledAutomation, tn as retainRuntimeTurnContext, v as saveEventAutomation, vt as authorizationId, xn as buildSandboxEgressNetworkPolicy, xt as AuthorizationPauseError, y as setEventAutomationStatus, yt as AuthPausePersistenceError, z as recordAgentsInstructionsUpdated, zt as TurnToolCallLimitExceededError } from "./tasks-OgXmReUv.js";
2
+ import { S as resolveGatewayCredential, _ as getProviderErrorAttributes, a as completeText, b as MISSING_GATEWAY_CREDENTIALS_ERROR, c as COMPACTION_SUMMARY_PREFIX, d as renderCurrentInstruction, f as unwrapCurrentInstruction, g as findProviderError, h as createProviderError, i as completeObject, l as hasCompactedConversationContext, m as ProviderError, n as GEN_AI_SERVER_ADDRESS, p as escapeXml, s as resolveGatewayModel, t as GEN_AI_PROVIDER_NAME, u as isCompactionSummaryText, x as getGatewayApiKey, y as isProviderRetryError } from "./client-DpOwh_zX.js";
3
+ import { R as normalizeIdentityEmail, S as summarizeMessageText, T as withSpan, V as toOptionalString, _ as serializeGenAiAttribute, a as extractGenAiUsageSummary, b as setSpanStatus, c as getLogContextAttributesForSpan, d as logError, f as logException, h as normalizeGenAiFinishReason, i as extractGenAiUsageAttributes, l as getTracePropagationHeaders, m as logWarn, p as logInfo, w as withLogContext, x as setTags, y as setSpanAttributes, z as isRecord$4 } from "./logging-DNQqsQ57.js";
4
4
  import { m as startInactiveSpan, v as withActiveSpan } from "./sentry-BBUlHih9.js";
5
- 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-FY8yc2q3.js";
6
- import { n as botConfig, v as normalizeSlackEmojiName } from "./config-Dnv8KmNs.js";
5
+ 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-ueJ6i-t9.js";
6
+ import { n as botConfig, v as normalizeSlackEmojiName } from "./config-BxPrFVJP.js";
7
7
  import { a as formatModelProfiles, c as profileConfig, i as formatModelProfile, l as TURN_REASONING_LEVELS, n as ModelProfileNotConfiguredError, o as modelIdForProfile, s as modelProfileSchema } from "./model-profile-Bg8EoCKD.js";
8
8
  import { a as isUserActor, d as parseSlackTeamId, f as parseSlackUserId, g as parseSlackMessageTs, l as parseSlackChannelId, u as parseSlackChannelReferenceId } from "./actor-tlxzqaRe.js";
9
- import { C as addAgentTurnUsage, D as hasAgentTurnUsage, R as parseDestination, c as getConversationEventStore, d as getDb, f as getSqlExecutor, l as getConversationMessageSearchStore, r as readActorIdentity, u as getConversationStore, w as agentTurnCostUsd } from "./viewer-DmNRM88V.js";
9
+ import { C as addAgentTurnUsage, D as hasAgentTurnUsage, R as parseDestination, c as getConversationEventStore, d as getDb, f as getSqlExecutor, l as getConversationMessageSearchStore, r as readActorIdentity, u as getConversationStore, w as agentTurnCostUsd } from "./viewer-BuPwzOC9.js";
10
10
  import { a as juniorAgentInvocations, c as juniorIdentities, d as juniorDestinations, i as juniorAgentBindings, s as juniorConversations } from "./agent-invocations-CxKldAeB.js";
11
- import { _ as juniorConversationAnnotations, a as juniorAutomationRuns, b as juniorAttachments, c as juniorStats, f as juniorConversationBriefs, x as juniorArtifacts } from "./executor-J9k2sp9m.js";
11
+ import { _ as juniorConversationAnnotations, a as juniorAutomationRuns, b as juniorAttachments, c as juniorStats, f as juniorConversationBriefs, x as juniorArtifacts } from "./executor-D3WIS4vl.js";
12
12
  import { d as contextProvenance, f as instructionActors, m as sameActorIdentity, p as instructionProvenanceFor, t as KNOWN_CONVERSATION_EVENT_TYPES, u as agentInstructionProvenance } from "./history-AY8rs-FR.js";
13
13
  import { a as listReferenceFiles, c as soulPathCandidates, l as worldPathCandidates } from "./package-discovery-DJBompdd.js";
14
- import { c as fetchWithBoundedOAuthErrorBodies, d as actorLogContext, f as credentialContextForActor, g as credentialUserSubjectId, i as resolvePluginHeaderEnvRefs, l as getOAuthProviderErrorAttributes, s as OAuthProviderError } from "./registry-BFzQFV_y.js";
15
- import { n as pluginCatalogRuntime } from "./catalog-runtime-Suf-aLlh.js";
16
- import { a as parseSkillInvocation, i as parseSkillFile, n as findSkillByName, r as loadSkillsByName, t as discoverSkills } from "./skills-Dbzx9-rS.js";
17
- import { A as getWorkspaceSnapshotBuilder, B as STOP_WATCHING_TOOL_NAME, C as WorkspaceValidationError, D as setWorkspaceSnapshotBuild, E as setWorkspaceSnapshot, F as isSlackMessageTurn, G as createWatch, Gt as saveObjectAnnotations, H as cancelWatch, I as slackMessageTurnDisabledReason, J as getWatch, K as deliverWatch, Kt as createPluginAnnotations, L as RESOURCE_SUBSCRIPTION_DEFAULT_TTL_MS, M as workspaceRepoCheckoutPath, N as resolveChannelCapabilities, O as SANDBOX_RUNTIME, P as getSlackToolContext, R as RESOURCE_SUBSCRIPTION_MAX_TTL_MS, S as updateWorkspace, St as PluginToolDeniedError, T as loadSnapshotsForProfile, V as cancelSubscriptions, Vt as matchSlackAttachments, W as createTimerWatch, Xt as resolveUserTimezone, Y as listWatches, Yt as defaultTimezone, _ as deleteWorkspace, _t as getDashboardConversationLink, at as downloadPrivateSlackFile, b as listWorkspaces, c as getPluginTools, ct as getSlackClient, dt as normalizeSlackConversationId, en as JUNIOR_NATIVE_EVENT_NAMESPACE, g as createWorkspace, in as conversationNoteEvent, it as SlackActionError, j as tryWorkspaceRepoCheckoutPath, k as deleteWorkspaceSnapshotBuilders, l as getPluginUserPromptContributions, lt as isConversationScopedChannel, ot as getFilePermalink, pt as withSlackRetries, q as findMatchingWatches, r as createPluginHookRunner, s as getPluginSystemPromptContributions, u as getPlugins, ut as isDmChannel$1, v as getWorkspace, w as invalidateReadySnapshot, xt as ToolInputError, y as getWorkspaceByName, yt as getDashboardTaskLink, z as RESOURCE_WATCH_TOOL_SOURCE } from "./agent-hooks-CqnZfuCt.js";
18
- import { o as fenceLock, r as getStateAdapter, s as withLock } from "./adapter-BIacI0Bt.js";
14
+ import { c as fetchWithBoundedOAuthErrorBodies, d as actorLogContext, f as credentialContextForActor, g as credentialUserSubjectId, i as resolvePluginHeaderEnvRefs, l as getOAuthProviderErrorAttributes, s as OAuthProviderError } from "./registry-CfdUEk4N.js";
15
+ import { n as pluginCatalogRuntime } from "./catalog-runtime-R53MWcMi.js";
16
+ import { a as parseSkillInvocation, i as parseSkillFile, n as findSkillByName, r as loadSkillsByName, t as discoverSkills } from "./skills-DVJmS_ZP.js";
17
+ import { A as getWorkspaceSnapshotBuilder, B as STOP_WATCHING_TOOL_NAME, C as WorkspaceValidationError, D as setWorkspaceSnapshotBuild, E as setWorkspaceSnapshot, F as isSlackMessageTurn, G as createWatch, Gt as saveObjectAnnotations, H as cancelWatch, I as slackMessageTurnDisabledReason, J as getWatch, K as deliverWatch, Kt as createPluginAnnotations, L as RESOURCE_SUBSCRIPTION_DEFAULT_TTL_MS, M as workspaceRepoCheckoutPath, N as resolveChannelCapabilities, O as SANDBOX_RUNTIME, P as getSlackToolContext, R as RESOURCE_SUBSCRIPTION_MAX_TTL_MS, S as updateWorkspace, St as PluginToolDeniedError, T as loadSnapshotsForProfile, V as cancelSubscriptions, Vt as matchSlackAttachments, W as createTimerWatch, Xt as resolveUserTimezone, Y as listWatches, Yt as defaultTimezone, _ as deleteWorkspace, _t as getDashboardConversationLink, at as downloadPrivateSlackFile, b as listWorkspaces, c as getPluginTools, ct as getSlackClient, dt as normalizeSlackConversationId, en as JUNIOR_NATIVE_EVENT_NAMESPACE, g as createWorkspace, in as conversationNoteEvent, it as SlackActionError, j as tryWorkspaceRepoCheckoutPath, k as deleteWorkspaceSnapshotBuilders, l as getPluginUserPromptContributions, lt as isConversationScopedChannel, ot as getFilePermalink, pt as withSlackRetries, q as findMatchingWatches, r as createPluginHookRunner, s as getPluginSystemPromptContributions, u as getPlugins, v as getWorkspace, w as invalidateReadySnapshot, xt as ToolInputError, y as getWorkspaceByName, yt as getDashboardTaskLink, z as RESOURCE_WATCH_TOOL_SOURCE } from "./agent-hooks-D_PbluRX.js";
18
+ import { o as fenceLock, r as getStateAdapter, s as withLock } from "./adapter-BIbMSKlG.js";
19
19
  import { i as isValidTimeZone, r as getZonedDateTimeParts } from "./cadence-R7Em4RjE.js";
20
20
  import { G as briefLinkSchema, H as detectImageMediaType, I as removedCardSchema, K as briefOutcomeStatusSchema, U as isVisionImageMediaType, q as conversationBriefSchema } from "./conversation-B0baEwoA.js";
21
- import { A as sandboxSkillPathResolution, C as SANDBOX_COMMAND_PATH, D as SANDBOX_WORKSPACE_ROOT, E as SANDBOX_SKILLS_ROOT, O as sandboxSkillDir, S as runNonInteractiveCommand, T as SANDBOX_REPOS_ROOT, _ as workspaceSnapshotNotReadyUserMessage, a as isAbortError, b as buildCommandScript, c as isSandboxCommandStreamInterruptedError, d as isSnapshottingError, f as throwSandboxOperationError, g as isWorkspaceSnapshotNotReadyError, h as getWorkspaceSnapshotNotReadyError, i as ensureDockerDaemon, k as sandboxSkillFile, 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 SANDBOX_DATA_ROOT, x as buildNonInteractiveShellScript, y as sleep } from "./profile-Dq5I7TV1.js";
22
- import { A as AgentMessageQueueFullError, F as agentNameSchema, H as TurnInputCommitLostError, I as AGENT_TYPES, K as isTurnInputCommitLostError, M as AgentNameInUseError, N as CHILD_AGENT_RESULTS, P as PARENT_AGENT_TARGET, V as CooperativeTurnYieldError, _ as getLatestAgentInvocationForConversation, d as getAgentInvocationIdForResult, f as getAgentInvocationMessageId, g as getChildAgentLockName, j as AgentMessageTargetError, k as AgentInvocationLimitError, t as NON_TERMINAL_AGENT_INVOCATION_STATUSES, v as invocationFromRow, y as isTerminalAgentInvocation, z as formatAgentTypes } from "./store-TKg1HVKx.js";
23
- import { a as isNoReplyMarker, i as NO_REPLY_MARKER, n as getAssistantReplyText, r as sanitizeAssistantText, t as decideReply } from "./assistant-reply-BFmjgJjD.js";
24
- import { A as requireSupportedEventMatch, B as readAutomationResult, C as eventNamespaceSchema, D as registeredEventTypeSchema, E as registeredEventMatchSchema, I as FINISH_AUTOMATION_RUN_TOOL_NAME, L as automationResultSchema, O as registeredResourceTypeSchema, T as pluginSupportsEvent, V as remindMissingAutomationResult, _ as WORKSPACE_SNAPSHOT_FAILED_EVENT, b as workspaceSnapshotWatch, d as getEventCatalog, k as requireEventIdentifier, n as markConversationsStopped, o as enqueueEventNotification, p as requireSlackChannelMessageScope, t as getConversationStoppedAtMs, v as WORKSPACE_SNAPSHOT_READY_EVENT, w as hasEventCatalogEntries, x as automationEventCatalog, y as workspaceSnapshotFinishedEvent } from "./session-stop-CtyJsnEj.js";
25
- 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-CnRHib0U.js";
26
- import { a as getVercelConversationWorkQueue, f as getTurnRequestDeadline, n as sendNextWorkspaceSnapshotJob, r as sendWorkspaceSnapshotJob } from "./job-queue-B4yTgklN.js";
27
- import { E as stopConversationWork } from "./store-UlOrW6JC.js";
28
- import { _ as getMcpProviderErrorAttributes, a as serviceAccountOnly, c as createMcpServiceAccountClientProvider, d as PluginMcpClient, f as McpProviderError, g as getMcpAwareTelemetryMessage, h as getMcpAwareErrorType, i as serviceAccountAllows, l as getMcpServiceAccountCredentials, m as McpToolError, p as McpServiceAccountRequiredError, u as McpAuthorizationRequiredError, v as toMcpProviderError } from "./service-account-x2QZXm4X.js";
21
+ import { A as sandboxSkillPathResolution, C as SANDBOX_COMMAND_PATH, D as SANDBOX_WORKSPACE_ROOT, E as SANDBOX_SKILLS_ROOT, O as sandboxSkillDir, S as runNonInteractiveCommand, T as SANDBOX_REPOS_ROOT, _ as workspaceSnapshotNotReadyUserMessage, a as isAbortError, b as buildCommandScript, c as isSandboxCommandStreamInterruptedError, d as isSnapshottingError, f as throwSandboxOperationError, g as isWorkspaceSnapshotNotReadyError, h as getWorkspaceSnapshotNotReadyError, i as ensureDockerDaemon, k as sandboxSkillFile, 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 SANDBOX_DATA_ROOT, x as buildNonInteractiveShellScript, y as sleep } from "./profile-ieODOp4u.js";
22
+ import { A as AgentMessageQueueFullError, F as agentNameSchema, H as TurnInputCommitLostError, I as AGENT_TYPES, K as isTurnInputCommitLostError, M as AgentNameInUseError, N as CHILD_AGENT_RESULTS, P as PARENT_AGENT_TARGET, V as CooperativeTurnYieldError, _ as getLatestAgentInvocationForConversation, d as getAgentInvocationIdForResult, f as getAgentInvocationMessageId, g as getChildAgentLockName, j as AgentMessageTargetError, k as AgentInvocationLimitError, t as NON_TERMINAL_AGENT_INVOCATION_STATUSES, v as invocationFromRow, y as isTerminalAgentInvocation, z as formatAgentTypes } from "./store-BvolNnx4.js";
23
+ import { a as isNoReplyMarker, i as NO_REPLY_MARKER, n as getAssistantReplyText, r as sanitizeAssistantText, t as decideReply } from "./assistant-reply-BcJj_ORj.js";
24
+ import { A as requireSupportedEventMatch, B as readAutomationResult, C as eventNamespaceSchema, D as registeredEventTypeSchema, E as registeredEventMatchSchema, I as FINISH_AUTOMATION_RUN_TOOL_NAME, L as automationResultSchema, O as registeredResourceTypeSchema, T as pluginSupportsEvent, V as remindMissingAutomationResult, _ as WORKSPACE_SNAPSHOT_FAILED_EVENT, b as workspaceSnapshotWatch, d as getEventCatalog, k as requireEventIdentifier, n as markConversationsStopped, o as enqueueEventNotification, p as requireSlackChannelMessageScope, t as getConversationStoppedAtMs, v as WORKSPACE_SNAPSHOT_READY_EVENT, w as hasEventCatalogEntries, x as automationEventCatalog, y as workspaceSnapshotFinishedEvent } from "./session-stop-B9RRGC-P.js";
25
+ 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-BXShI336.js";
26
+ import { a as getVercelConversationWorkQueue, f as getTurnRequestDeadline, n as sendNextWorkspaceSnapshotJob, r as sendWorkspaceSnapshotJob } from "./job-queue-BYHonCAH.js";
27
+ import { E as stopConversationWork } from "./store-C_mHwAnR.js";
28
+ import { _ as getMcpProviderErrorAttributes, a as serviceAccountOnly, c as createMcpServiceAccountClientProvider, d as PluginMcpClient, f as McpProviderError, g as getMcpAwareTelemetryMessage, h as getMcpAwareErrorType, i as serviceAccountAllows, l as getMcpServiceAccountCredentials, m as McpToolError, p as McpServiceAccountRequiredError, u as McpAuthorizationRequiredError, v as toMcpProviderError } from "./service-account-DJSRo2cL.js";
29
29
  import { F as taskOutcomeInputSchema, M as compileScheduleIntent, N as scheduleIntentSchema, O as automationInstructionToolSchema, T as SCHEDULED_AUTOMATION_SYSTEM_ACTOR, j as ScheduleIntentError, k as automationTitleSchema } from "./automation-CWX0qL8U.js";
30
30
  import { n as privateTraceResultAttributes } from "./private-trace-result-CE7_lEdq.js";
31
31
  import { streamSimple } from "@earendil-works/pi-ai/compat";
@@ -1664,7 +1664,7 @@ function formatAvailableSkillsForPrompt(skills) {
1664
1664
  }
1665
1665
  function formatActiveMcpCatalogsForPrompt(catalogs) {
1666
1666
  if (catalogs.length === 0) return null;
1667
- const lines = ["Active MCP provider catalogs are available through `searchMcpTools`. Call it with provider to list descriptors or with query to narrow results, then pass the exact returned `tool_name` to `callMcpTool`. Put provider fields inside `arguments`."];
1667
+ const lines = [];
1668
1668
  for (const catalog of catalogs) {
1669
1669
  lines.push(" <catalog>");
1670
1670
  lines.push(` <provider>${escapeXml(catalog.provider)}</provider>`);
@@ -1702,31 +1702,22 @@ const SLACK_HEADER = "You are a Slack-based helper assistant. Follow the persona
1702
1702
  const LOCAL_HEADER = "You are a helper assistant. Follow the personality section for voice and tone in every reply. Platform mechanics and output rules override personality and world context when they conflict.";
1703
1703
  const TURN_CONTEXT_HEADER = "Runtime context for this request. Treat these blocks as trusted runtime facts; the static system prompt remains authoritative.";
1704
1704
  const TOOL_POLICY_RULES = [
1705
- "- Tool schemas are the source of truth for parameters; tool names are case-sensitive, so call tools exactly by their exposed names and do not invent arguments.",
1706
1705
  "- Use tools for actionable work and for facts that are mutable, external, repository-backed, provider-backed, or requested as verified/current. Stable general knowledge and already-provided context may be answered directly.",
1707
1706
  "- Do not use tools to rediscover content already present in the current conversation. For drafting or rewriting with no referenced retrievable source, use clear placeholders or ask one focused question instead of searching unrelated memory, history, files, or providers.",
1708
1707
  "- Resolve provider action targets before calls: explicit target wins; ambient `<configuration>` fills omitted targets. Treat non-target links/references as context.",
1709
1708
  "- Verification source order: conversation/thread context; user-provided attachments, links, and reference files; local/sandbox files when present; loaded skill references; repository/provider tools; public web. Use the nearest authoritative available source before weaker sources.",
1710
1709
  "- For repository or implementation questions, inspect the target repository first: local checkout when present, otherwise the configured GitHub/source provider. Do not treat loaded skill files as repo source unless the user asks about the skill. Cite file paths, symbols, PRs/issues, commits, or URLs that support the answer.",
1711
- "- Workspaces are named prepared Sandbox recipes. Use `listWorkspaces` and `switchWorkspace` with them. Prefer a matching Workspace over an ad-hoc checkout when one fits.",
1712
1710
  "- After changing files, name the changed paths and summarize the completed result in the final answer.",
1713
- "- If a sandbox-backed tool reports that sandbox execution is unavailable, treat that as a blocker for local file/shell inspection; do not pretend host files were inspected.",
1714
- "- For user-provided URLs, use `webFetch`; for discovery, use `webSearch` then fetch/read promising sources; for current time/date context, use `systemTime`.",
1715
- "- When searchEventTypes is exposed, use it only when the user asks what events are supported or the required resource type or event name is unclear. It discovers options but does not watch a resource or create an automation. When explaining how results can be used, distinguish temporary current-thread watches from durable event automations.",
1716
1711
  "- When a tool result includes a subscription, those events are already watched; do not call watchEvents for them. When a tool result includes a subscribable resource with suggestedEvents, use watchEvents only for those remaining events that serve the current intent. If suggestedEvents is empty or omitted, do not invent a watch. Do not create scheduled polling tasks for events a watch can deliver. Write a concise intent summary, and tell the user when the temporary watch expires. Stop only the requested watch by id unless the user explicitly asks to stop every watch in the thread.",
1717
1712
  "- Cards returned by tools attach to your next visible reply automatically. Explain the outcome; do not repeat the card fields or draw a card in text.",
1718
- "- Use createEventAutomation only when the user explicitly asks for an event automation or durable whenever-this-happens-do-X automation. Ordinary watch, notify, and tell-me-when requests use watchEvents. When an event automation's resource and events are known, create it without redundant confirmation.",
1719
- "- Scheduled and event automations use their creator's connected credentials by default when the requested work needs them. Do not ask for separate confirmation merely to use those credentials. On creation, omit credentialMode for this default; set system only when the creator requires it. For updates, creator means the original createdBy actor, not the current requester. Only that creator may enable creator credential use; another requester's confirmation cannot authorize it.",
1720
- "- Event automations list for the current destination, not one thread. Public automations can also be updated or deleted by automation id from another destination in the same workspace. When listing them, use createdBy to explain creator-only credential changes and warn when trigger.available is false; an unavailable automation remains stored but cannot receive events until its plugin event is enabled again.",
1721
- "- Before loading a skill or starting substantial work, decide how to run it. When `handoff` is available and another profile fits better, switch first. When `spawnAgent` is available and its delegation rules fit, give independent tracks to child agents. Otherwise do the work inline.",
1722
- "- Run `jr-rpc config get|set|unset|list` for provider defaults and `jr-rpc plugins list` for installed plugin introspection as standalone bash commands; do not chain them with `cd`, `&&`, pipes, or provider commands.",
1713
+ "- Scheduled and event automations use their creator's connected credentials by default when the requested work needs them. Do not ask for separate confirmation merely to use those credentials.",
1714
+ "- Before loading a skill or starting substantial work, decide whether `handoff` or `spawnAgent` fits better than inline work.",
1723
1715
  "- If the first result is empty, stale, ambiguous, or incomplete, try a focused alternate query, path, command, or source before concluding the answer cannot be verified."
1724
1716
  ];
1725
1717
  const TOOL_CALL_STYLE_RULES = [
1726
1718
  "- For routine low-risk tool use, call the tool directly without narrating the obvious step first.",
1727
1719
  "- Briefly narrate only when it helps the user understand multi-step work, sensitive actions, destructive actions, or a notable change in approach.",
1728
- "- When a first-class tool exists for an action, use it directly instead of asking the user to run an equivalent command, slash command, or manual lookup.",
1729
- "- Keep tool-call explanations separate from final answers; final answers should report results, evidence, or blockers."
1720
+ "- When a first-class tool exists for an action, use it directly instead of asking the user to run an equivalent command, slash command, or manual lookup."
1730
1721
  ];
1731
1722
  const SKILL_POLICY_RULES = [
1732
1723
  "- A `<skill>` block in the current user turn is already loaded. Follow its instructions directly and do not call `loadSkill` for that skill.",
@@ -1739,9 +1730,8 @@ const PLANNING_RULES = [
1739
1730
  "- The tool displays the plan. Do not repeat it in chat, and do not finish with a plan when you can complete the work now."
1740
1731
  ];
1741
1732
  const TASK_EXECUTION_RULES = [
1742
- "- Actionable request: act in this turn.",
1743
1733
  "- Continue until done, genuinely blocked, or waiting on child agents you started. Do not finish with a plan, promise, or offer to check next when an available tool or source can move the request forward.",
1744
- "- Ask the user only for missing access, approval, or a decision that blocks safe progress. Ask one focused question; otherwise infer conservatively and continue.",
1734
+ "- Ask the user only for missing access or a decision that blocks safe progress. Ask one focused question; otherwise infer conservatively and continue. An open scope or follow-up question does not block delivery: deliver the requested work and state the question.",
1745
1735
  "- For conflicting evidence, compare sources and state which source is authoritative for the answer.",
1746
1736
  "- A tool result with `timed_out: true` means that attempt did not finish. Continue the active task. Before retrying work that may have side effects, inspect authoritative state and do not repeat a mutation that already applied."
1747
1737
  ];
@@ -1753,8 +1743,7 @@ const CONVERSATION_RULES = [
1753
1743
  "- Runtime owns continuation and authorization notices; on resumed turns, answer with the final requested content only."
1754
1744
  ];
1755
1745
  const SLACK_ACTION_RULES = [
1756
- "- Slack posts, reactions, new canvases, new lists, and file sends go only to the current conversation; if asked to send one somewhere else, explain the limitation instead of calling the tool. Slack read tools can target other public channels with `channel_id`.",
1757
- "- Assistant text is delivered only into the active conversation or thread. You cannot create a new top-level channel post; if asked to do so, explain that limitation and do not present the requested text as delivered.",
1746
+ "- Assistant text, Slack posts, reactions, new canvases, new lists, and file sends go only to the current conversation or thread. If asked to post elsewhere or create a new top-level channel post, explain the limitation instead of calling a tool, and do not present the text as delivered. Slack read tools can target other public channels with `channel_id`.",
1758
1747
  "- Ambient reaction requests target the current inbound message; do not ask for a message reference.",
1759
1748
  `- When no visible thread reply is requested or useful, keep tool-calling messages text-free and make the final message exactly ${NO_REPLY_MARKER}.`
1760
1749
  ];
@@ -1898,22 +1887,12 @@ function formatDestinationLines(destination) {
1898
1887
  `- destination.channel_id: ${escapeXml(destination.channelId)}`
1899
1888
  ];
1900
1889
  }
1901
- function formatOutcomeLines(outcomes) {
1902
- if (!outcomes) return ["- dispatch.outcomes: send_message to the destination below (legacy default)"];
1903
- if (outcomes.length === 0) return ["- dispatch.outcomes: none; successful work posts nothing"];
1904
- return outcomes.map((outcome, index) => {
1905
- const { channelId, threadTs } = outcome.destination;
1906
- const recipient = isDmChannel$1(channelId) ? "the creator's direct message" : "a slack channel";
1907
- const target = [`channel_id=${escapeXml(channelId)}`, ...threadTs ? [`thread_ts=${escapeXml(threadTs)}`] : []].join(" ");
1908
- return `- dispatch.outcome.${index + 1}: ${outcome.action} to ${recipient} (${target})`;
1909
- });
1910
- }
1911
1890
  function buildDispatchSection(params) {
1912
1891
  if (!params) return null;
1913
1892
  const metadataLines = Object.entries(params.metadata ?? {}).sort(([left], [right]) => left.localeCompare(right)).map(([key, value]) => `- dispatch.metadata.${escapeXml(key)}: ${escapeXml(value)}`);
1914
1893
  return renderTag("dispatch", [
1915
1894
  "- dispatch.execution: execute the dispatched input now",
1916
- ...params.declaresResult ? formatOutcomeLines(params.outcomes) : ["- dispatch.delivery: the runtime delivers the final answer to the destination", "- dispatch.delivery_rule: do not request or require a separate posting tool just to deliver the final answer"],
1895
+ ...params.declaresResult ? [] : ["- dispatch.delivery: the runtime delivers the final answer to the destination", "- dispatch.delivery_rule: do not request or require a separate posting tool just to deliver the final answer"],
1917
1896
  ...params.actor ? [`- dispatch.actor.platform: ${escapeXml(params.actor.platform)}`, `- dispatch.actor.name: ${escapeXml(params.actor.name)}`] : [],
1918
1897
  ...params.plugin ? [`- dispatch.plugin: ${escapeXml(params.plugin)}`] : [],
1919
1898
  ...formatSourceLines(params.source),
@@ -2718,24 +2697,38 @@ function createJrRpcCommand(deps) {
2718
2697
  });
2719
2698
  });
2720
2699
  }
2700
+ function toolCommandResult(command, output) {
2701
+ return {
2702
+ ok: output.exitCode === 0,
2703
+ command,
2704
+ cwd: "/",
2705
+ exit_code: output.exitCode,
2706
+ signal: null,
2707
+ timed_out: false,
2708
+ stdout: output.stdout,
2709
+ stderr: output.stderr,
2710
+ stdout_truncated: false,
2711
+ stderr_truncated: false
2712
+ };
2713
+ }
2714
+ const CHAINED_JR_RPC_PATTERN = /(?:&&|\|\||[;|\n])\s*jr-rpc(?:\s|$)/;
2715
+ /** Run a standalone `jr-rpc` bash command, or reject one chained after other shell steps. */
2721
2716
  async function maybeExecuteJrRpcCustomCommand(command, deps) {
2722
2717
  const normalized = command.trim();
2723
- if (!/^jr-rpc(?:\s|$)/.test(normalized)) return { handled: false };
2724
- const execResult = await new Bash({ customCommands: [createJrRpcCommand(deps)] }).exec(normalized);
2718
+ if (!/^jr-rpc(?:\s|$)/.test(normalized)) {
2719
+ if (!CHAINED_JR_RPC_PATTERN.test(normalized)) return { handled: false };
2720
+ return {
2721
+ handled: true,
2722
+ result: toolCommandResult(normalized, {
2723
+ exitCode: 2,
2724
+ stdout: "",
2725
+ stderr: "jr-rpc runs only as a standalone bash command. Run the jr-rpc command by itself, without cd, &&, pipes, or other commands.\n"
2726
+ })
2727
+ };
2728
+ }
2725
2729
  return {
2726
2730
  handled: true,
2727
- result: {
2728
- ok: execResult.exitCode === 0,
2729
- command: normalized,
2730
- cwd: "/",
2731
- exit_code: execResult.exitCode,
2732
- signal: null,
2733
- timed_out: false,
2734
- stdout: execResult.stdout,
2735
- stderr: execResult.stderr,
2736
- stdout_truncated: false,
2737
- stderr_truncated: false
2738
- }
2731
+ result: toolCommandResult(normalized, await new Bash({ customCommands: [createJrRpcCommand(deps)] }).exec(normalized))
2739
2732
  };
2740
2733
  }
2741
2734
  // src/chat/sandbox/command-result.ts
@@ -7666,7 +7659,7 @@ function createSearchEventTypesTool(catalog) {
7666
7659
  openWorldHint: false,
7667
7660
  readOnlyHint: true
7668
7661
  },
7669
- description: "Search the event types currently enabled without creating anything. Includes plugin resources and core Workspace snapshot events. Use watchEvents for temporary updates in the current conversation; use createEventAutomation for durable automation. This tool does not watch a resource, create an automation, or list concrete resources.",
7662
+ description: "Search the event types currently enabled without creating anything. Use only when the user asks what events are supported or the required resource type or event name is unclear. Includes plugin resources and core Workspace snapshot events. Use watchEvents for temporary updates in the current conversation; use createEventAutomation for durable automation. This tool does not watch a resource, create an automation, or list concrete resources.",
7670
7663
  inputSchema: z.object({
7671
7664
  query: z.string().nullable().describe("Optional terms matching a namespace, resource type, or event name. Resource types that match more terms come first. Empty lists all enabled event types.").optional(),
7672
7665
  namespace: eventNamespaceSchema(catalog).nullable().describe("Optional enabled plugin namespace to search within.").optional(),
@@ -8155,7 +8148,7 @@ function createEventAutomationTool(context, catalog) {
8155
8148
  readOnlyHint: false
8156
8149
  },
8157
8150
  executionMode: "sequential",
8158
- description: "Create a durable event automation in the active Slack channel or DM, never a thread. It executes the supplied instruction for every matching event. Use for whenever-this-happens-do-X automation; ordinary watch, notify, or tell-me-when requests use watchEvents instead. The automation may use the creator's connected credentials. Prefer a subscribable tool result when available.",
8151
+ description: "Create a durable event automation in the active Slack channel or DM, never a thread. It executes the supplied instruction for every matching event. Use only when the user explicitly asks for an event automation or durable whenever-this-happens-do-X automation; ordinary watch, notify, or tell-me-when requests use watchEvents instead. When the resource and events are known, create it without redundant confirmation. The automation may use the creator's connected credentials. Prefer a subscribable tool result when available.",
8159
8152
  inputSchema: z.object({
8160
8153
  instruction: automationInstructionToolSchema,
8161
8154
  title: z.string().trim().min(1).max(60).nullable().describe("Optional short display title. Omit or use null to generate one from the task instruction.").optional(),
@@ -8269,7 +8262,7 @@ function createListEventAutomationsTool(context, catalog) {
8269
8262
  openWorldHint: false,
8270
8263
  readOnlyHint: true
8271
8264
  },
8272
- description: "List event automations for the current destination. Each result says whether the requester is the creator and whether its trigger is available.",
8265
+ description: "List event automations for the current destination, not one thread. Each result says whether the requester is the creator (isCreator); only the creator can change its credential use. Warn when trigger.available is false: the automation stays stored but cannot receive events until its plugin event is enabled again. Public automations can also be updated or deleted by id from another destination in the same workspace.",
8273
8266
  inputSchema: z.object({}).strict(),
8274
8267
  outputSchema: eventAutomationListToolResultSchema,
8275
8268
  async execute() {
@@ -18262,7 +18255,7 @@ function createAgentRunner(execute, options) {
18262
18255
  } } : void 0
18263
18256
  };
18264
18257
  if (run.instruction.storedAttachments?.length) {
18265
- const { loadInputImages } = await import("./images-DV2FlEGL.js").then((n) => n.n);
18258
+ const { loadInputImages } = await import("./images-5VNK_yYC.js").then((n) => n.n);
18266
18259
  const storage = nextRun.environment?.attachmentStorage;
18267
18260
  if (!storage) throw new Error("Attachment storage is unavailable.");
18268
18261
  nextRun.instruction = {
@@ -4950,7 +4950,7 @@ export declare const automationEventCatalogSchema: z.ZodArray<z.ZodObject<{
4950
4950
  type: z.ZodString;
4951
4951
  identifier: z.ZodOptional<z.ZodObject<{
4952
4952
  format: z.ZodString;
4953
- pattern: z.ZodCustom<RegExp, RegExp>;
4953
+ pattern: z.ZodString;
4954
4954
  }, z.core.$strict>>;
4955
4955
  supportedEvents: z.ZodArray<z.ZodString>;
4956
4956
  suggestedEvents: z.ZodOptional<z.ZodArray<z.ZodString>>;
package/dist/api.js CHANGED
@@ -1,30 +1,30 @@
1
- import { D as AutomationConflictError, E as sameDefinitionValue, I as loadTurnProjection, O as automationRevision, S as automationDefinition, T as readAutomationVersion, a as saveScheduledAutomation, bn as createUserTokenStore, k as requireAutomationRevision, rr as piMessageFromHistoryItem, v as saveEventAutomation, y as setEventAutomationStatus } from "./tasks-LOItiYgL.js";
2
- import { p as escapeXml } from "./client-DZBCBj1M.js";
3
- import { f as logException, m as logWarn, p as logInfo } from "./logging-Dk_FpF36.js";
1
+ import { D as AutomationConflictError, E as sameDefinitionValue, I as loadTurnProjection, O as automationRevision, S as automationDefinition, T as readAutomationVersion, a as saveScheduledAutomation, bn as createUserTokenStore, k as requireAutomationRevision, rr as piMessageFromHistoryItem, v as saveEventAutomation, y as setEventAutomationStatus } from "./tasks-OgXmReUv.js";
2
+ import { p as escapeXml } from "./client-DpOwh_zX.js";
3
+ import { f as logException, m as logWarn, p as logInfo } from "./logging-DNQqsQ57.js";
4
4
  import { d as parseSlackTeamId, g as parseSlackMessageTs, l as parseSlackChannelId } from "./actor-tlxzqaRe.js";
5
- import { C as addAgentTurnUsage, D as hasAgentTurnUsage, E as agentTurnUsageSchema, O as resolveRootConversationId, S as parseSessionSource, c as getConversationEventStore, d as getDb, f as getSqlExecutor, h as loadConversationSlackTenantIds, i as resolveViewerUser, m as withConversationEventLock, o as updateViewerDisplayName, t as findUserByEmail, u as getConversationStore, v as locationFromRow } from "./viewer-DmNRM88V.js";
5
+ import { C as addAgentTurnUsage, D as hasAgentTurnUsage, E as agentTurnUsageSchema, O as resolveRootConversationId, S as parseSessionSource, c as getConversationEventStore, d as getDb, f as getSqlExecutor, h as loadConversationSlackTenantIds, i as resolveViewerUser, m as withConversationEventLock, o as updateViewerDisplayName, t as findUserByEmail, u as getConversationStore, v as locationFromRow } from "./viewer-BuPwzOC9.js";
6
6
  import { c as juniorIdentities, d as juniorDestinations, l as juniorUsers, o as conversationReadColumns, s as juniorConversations } from "./agent-invocations-CxKldAeB.js";
7
- import { f as juniorConversationBriefs, g as juniorApiTokens, h as juniorConversationEvents, m as juniorConversationMetrics, u as juniorConversationParticipants, v as juniorCodeChanges, y as juniorCodeRepositories } from "./executor-J9k2sp9m.js";
7
+ import { f as juniorConversationBriefs, g as juniorApiTokens, h as juniorConversationEvents, m as juniorConversationMetrics, u as juniorConversationParticipants, v as juniorCodeChanges, y as juniorCodeRepositories } from "./executor-D3WIS4vl.js";
8
8
  import { d as contextProvenance } from "./history-AY8rs-FR.js";
9
- import { n as pluginCatalogRuntime } from "./catalog-runtime-Suf-aLlh.js";
10
- import { F as AutomationEditError, G as conversationSubtree, I as eventAutomationTriggerAvailable, K as conversationSubtreeColumns, P as editEventAutomation, R as resolveTaskOutcomes, S as readLiveAttachment, T as parseSlackThreadId, U as listChildAgents, j as editScheduledAutomation, m as readStats } from "./agent-runner-BUBas7Yy.js";
11
- import { At as conversationArchivedForUser, C as WorkspaceValidationError, Dt as readConversationAccessFromSql, Et as createPluginLogger, Ft as viewerConversationMembership, Jt as listConversationAnnotationsById, Lt as readLatestConversationBrief, M as workspaceRepoCheckoutPath, Mt as conversationIsMemberRoot, Nt as conversationNotArchivedForEmail, O as SANDBOX_RUNTIME, Ot as conversationArchiveTimes, Pt as conversationNotArchivedForUser, Qt as createPluginCache, Rt as readConversationEventPage, S as updateWorkspace, Zt as lookupSlackUser, _ as deleteWorkspace, b as listWorkspaces, ct as getSlackClient, g as createWorkspace, jt as conversationHasParticipantUser, kt as conversationArchivedForEmail, pt as withSlackRetries, qt as listConversationAnnotations, u as getPlugins, v as getWorkspace, x as listWorkspacesByRepository, zt as buildSentryConversationUrl } from "./agent-hooks-CqnZfuCt.js";
9
+ import { n as pluginCatalogRuntime } from "./catalog-runtime-R53MWcMi.js";
10
+ import { F as AutomationEditError, G as conversationSubtree, I as eventAutomationTriggerAvailable, K as conversationSubtreeColumns, P as editEventAutomation, R as resolveTaskOutcomes, S as readLiveAttachment, T as parseSlackThreadId, U as listChildAgents, j as editScheduledAutomation, m as readStats } from "./agent-runner-CvRxb09K.js";
11
+ import { At as conversationArchivedForUser, C as WorkspaceValidationError, Dt as readConversationAccessFromSql, Et as createPluginLogger, Ft as viewerConversationMembership, Jt as listConversationAnnotationsById, Lt as readLatestConversationBrief, M as workspaceRepoCheckoutPath, Mt as conversationIsMemberRoot, Nt as conversationNotArchivedForEmail, O as SANDBOX_RUNTIME, Ot as conversationArchiveTimes, Pt as conversationNotArchivedForUser, Qt as createPluginCache, Rt as readConversationEventPage, S as updateWorkspace, Zt as lookupSlackUser, _ as deleteWorkspace, b as listWorkspaces, ct as getSlackClient, g as createWorkspace, jt as conversationHasParticipantUser, kt as conversationArchivedForEmail, pt as withSlackRetries, qt as listConversationAnnotations, u as getPlugins, v as getWorkspace, x as listWorkspacesByRepository, zt as buildSentryConversationUrl } from "./agent-hooks-D_PbluRX.js";
12
12
  import { t as getFirstRunAtMs } from "./cadence-R7Em4RjE.js";
13
13
  import { A as forkConversationResponseSchema, B as readMessageAttachments, D as createConversationBodySchema, O as createConversationMessageBodySchema, V as INPUT_IMAGE_TYPES, _ as conversationParamsSchema, a as cancelConversationPendingMessagesBodySchema, c as conversationAttachmentParamsSchema, d as conversationDetailReportSchema, g as conversationFeedSchema, h as conversationFeedQuerySchema, i as archiveConversationResponseSchema, k as forkConversationBodySchema, m as conversationEventsQuerySchema, o as cancelConversationPendingMessagesResponseSchema, p as conversationEventPageSchema, r as archiveConversationBodySchema, t as acceptedConversationMessageSchema, u as conversationDetailQuerySchema, x as conversationPendingMessagesReportSchema } from "./conversation-B0baEwoA.js";
14
- import { n as hash, t as create } from "./profile-Dq5I7TV1.js";
15
- import { h as getChildAgentLabel } from "./store-TKg1HVKx.js";
16
- import { d as getEventCatalog, x as automationEventCatalog } from "./session-stop-CtyJsnEj.js";
17
- import { d as getSandboxResources, t as getCachedSnapshot } from "./resolve-CnRHib0U.js";
18
- import { a as getVercelConversationWorkQueue } from "./job-queue-B4yTgklN.js";
19
- import { a as cancelHumanFacingPendingMessages, h as getConversation } from "./store-UlOrW6JC.js";
20
- import { n as finishServiceAccountSignIn, o as serviceAccountPlugins, r as getServiceAccountStatus, s as startServiceAccountSignIn, t as disconnectServiceAccount } from "./service-account-x2QZXm4X.js";
14
+ import { n as hash, t as create } from "./profile-ieODOp4u.js";
15
+ import { h as getChildAgentLabel } from "./store-BvolNnx4.js";
16
+ import { d as getEventCatalog, x as automationEventCatalog } from "./session-stop-B9RRGC-P.js";
17
+ import { d as getSandboxResources, t as getCachedSnapshot } from "./resolve-BXShI336.js";
18
+ import { a as getVercelConversationWorkQueue } from "./job-queue-BYHonCAH.js";
19
+ import { a as cancelHumanFacingPendingMessages, h as getConversation } from "./store-C_mHwAnR.js";
20
+ import { n as finishServiceAccountSignIn, o as serviceAccountPlugins, r as getServiceAccountStatus, s as startServiceAccountSignIn, t as disconnectServiceAccount } from "./service-account-DJSRo2cL.js";
21
21
  import { M as compileScheduleIntent, P as weekdaySchema, _ as automationSummarySchema, b as automationVersionListSchema, c as automationLifecycleSchema, d as automationParamsSchema, f as automationRunListSchema, g as automationSchedulePreviewSchema, h as automationScheduleIntentSchema, i as automationExecutionListSchema, j as ScheduleIntentError, l as automationListQuerySchema, n as automationEditSchema, r as automationEventCatalogSchema, t as automationEditErrorSchema, u as automationListSchema, v as automationUpdateSchema, x as automationVersionParamsSchema, y as automationVersionActivateSchema } from "./automation-CWX0qL8U.js";
22
22
  import { C as skillReportsSchema, a as fillUtcHours, b as pluginsSchema, c as sumUtcHoursIntoSixHours, d as trailingUtcSixHourWindow, f as utcDayKey, h as pluginOperationalReportFeedSchema, i as fillUtcDays, l as trailingUtcDayWindow, m as healthReportSchema, n as DAY_MS$1, o as fillUtcSixHours, p as utcHourKey, r as HOUR_MS$1, s as startOfUtcHour, u as trailingUtcHourWindow, x as runtimeInfoReportSchema } from "./web-message-id-CJSUiksE.js";
23
- import { B as readHealthReport, I as createVercelAttachmentStorage, _ as readViewerAutomationRuns, a as recordWebConversationActivity, b as readViewerAutomations, d as resolveSlackConversationContextFromThreadId, g as readViewerAutomationExecutions, h as readConversationSourceTask, i as createConversationId, k as stopConversationTurn, l as getProductionSlackAdapter, m as deleteViewerTask, o as webActorFromEmail, p as ViewerTaskNotFoundError, r as createAndEnqueueConversation, t as appendAndEnqueueWebMessage, u as formatSlackConversationRedactedLabel, v as readViewerAutomationSummary, w as clearSlackPendingReactions, x as resolveViewerTaskCandidate, y as readViewerAutomationVersions } from "./web-input-BHcGXSox.js";
24
- import { F as conversationAggregateColumns, I as conversationRangeColumns, M as readAutomationTitlesByConversationId, P as conversationActiveDaysColumn } from "./task-runner-C575f2Dd.js";
25
- import { d as legacyWebMailboxMetadataSchema } from "./result-DczfmNBa.js";
26
- import { a as startConnection, l as getWebAuthorization, n as isConnectableProvider, r as listConnections, t as disconnectConnection, u as htmlCallbackResponse } from "./connections-Br0_xv27.js";
27
- import { t as decodeInputImages } from "./images-DV2FlEGL.js";
23
+ import { B as readHealthReport, I as createVercelAttachmentStorage, _ as readViewerAutomationRuns, a as recordWebConversationActivity, b as readViewerAutomations, d as resolveSlackConversationContextFromThreadId, g as readViewerAutomationExecutions, h as readConversationSourceTask, i as createConversationId, k as stopConversationTurn, l as getProductionSlackAdapter, m as deleteViewerTask, o as webActorFromEmail, p as ViewerTaskNotFoundError, r as createAndEnqueueConversation, t as appendAndEnqueueWebMessage, u as formatSlackConversationRedactedLabel, v as readViewerAutomationSummary, w as clearSlackPendingReactions, x as resolveViewerTaskCandidate, y as readViewerAutomationVersions } from "./web-input-4t7TYLsY.js";
24
+ import { F as conversationAggregateColumns, I as conversationRangeColumns, M as readAutomationTitlesByConversationId, P as conversationActiveDaysColumn } from "./task-runner-CiQj5M_9.js";
25
+ import { d as legacyWebMailboxMetadataSchema } from "./result-R35jcahx.js";
26
+ import { a as startConnection, l as getWebAuthorization, n as isConnectableProvider, r as listConnections, t as disconnectConnection, u as htmlCallbackResponse } from "./connections-BnTM1nRf.js";
27
+ import { t as decodeInputImages } from "./images-5VNK_yYC.js";
28
28
  import { A as activityHours$1, C as personParamsSchema, D as locationDirectoryReportSchema, E as locationDetailReportSchema, H as codePersonReportSchema, I as disconnectConnectionResponseSchema, J as stopConversationTurnResponseSchema, L as startConnectionResponseSchema, N as connectionListSchema, O as locationParamsSchema, P as connectionParamsSchema, S as actorProfileReportSchema, U as codeRepositoryParamsSchema, V as codeOverviewReportSchema, W as codeRepositoryReportSchema, X as apiErrorSchema, Y as conversationStatsReportSchema, _ as personalTokenListSchema, a as workspaceBodySchema, b as revokePersonalTokenResponseSchema, d as serviceAccountListSchema, f as serviceAccountParamsSchema, g as createdPersonalTokenSchema, h as createPersonalTokenBodySchema, i as deleteWorkspaceResponseSchema, j as activitySixHours$1, k as activityDays$1, l as workspaceSchema, m as startServiceAccountSignInResponseSchema, n as statsReportSchema, o as workspaceListSchema, q as conversationChildAgentsReportSchema, s as workspaceParamsSchema, u as disconnectServiceAccountResponseSchema, w as personalSpendReportSchema, x as actorDirectoryReportSchema, y as personalTokenParamsSchema } from "./schema-QidbykYl.js";
29
29
  import { Hono } from "hono";
30
30
  import path from "node:path";
@@ -3711,7 +3711,7 @@ async function readPeoplePluginReports(args) {
3711
3711
  reports: [],
3712
3712
  source: "plugins"
3713
3713
  });
3714
- const { getPluginProfileReports } = await import("./agent-hooks-CqnZfuCt.js").then((n) => n.t);
3714
+ const { getPluginProfileReports } = await import("./agent-hooks-D_PbluRX.js").then((n) => n.t);
3715
3715
  return pluginOperationalReportFeedSchema.parse({
3716
3716
  generatedAt: new Date(nowMs).toISOString(),
3717
3717
  reports: await getPluginProfileReports({
@@ -4743,7 +4743,7 @@ function readDescriptionText(home) {
4743
4743
  }
4744
4744
  /** Read discovered skill names for authenticated runtime diagnostics. */
4745
4745
  async function readSkillReports() {
4746
- const { discoverSkills } = await import("./skills-Dbzx9-rS.js").then((n) => n.o);
4746
+ const { discoverSkills } = await import("./skills-DVJmS_ZP.js").then((n) => n.o);
4747
4747
  const skills = await discoverSkills();
4748
4748
  return skillReportsSchema.parse(skills.map((skill) => ({
4749
4749
  name: skill.name,
@@ -4752,7 +4752,7 @@ async function readSkillReports() {
4752
4752
  }
4753
4753
  /** Read safe configured plugin metadata for authenticated runtime diagnostics. */
4754
4754
  async function readPlugins() {
4755
- const { pluginCatalogRuntime } = await import("./catalog-runtime-Suf-aLlh.js").then((n) => n.t);
4755
+ const { pluginCatalogRuntime } = await import("./catalog-runtime-R53MWcMi.js").then((n) => n.t);
4756
4756
  return pluginsSchema.parse(pluginCatalogRuntime.getProviders().map((plugin) => ({
4757
4757
  configKeys: plugin.manifest.configKeys ?? [],
4758
4758
  description: plugin.manifest.description,
@@ -4764,7 +4764,7 @@ async function readPlugins() {
4764
4764
  async function readRuntimeInfoReport() {
4765
4765
  const [{ homeDir }, { pluginCatalogRuntime }, plugins, skills] = await Promise.all([
4766
4766
  import("./package-discovery-DJBompdd.js").then((n) => n.r),
4767
- import("./catalog-runtime-Suf-aLlh.js").then((n) => n.t),
4767
+ import("./catalog-runtime-R53MWcMi.js").then((n) => n.t),
4768
4768
  readPlugins(),
4769
4769
  readSkillReports()
4770
4770
  ]);
@@ -4781,7 +4781,7 @@ async function readRuntimeInfoReport() {
4781
4781
  /** Read sanitized operational summaries contributed by plugins. */
4782
4782
  async function readPluginOperationalReportFeed() {
4783
4783
  const nowMs = Date.now();
4784
- const { getPluginOperationalReports } = await import("./agent-hooks-CqnZfuCt.js").then((n) => n.t);
4784
+ const { getPluginOperationalReports } = await import("./agent-hooks-D_PbluRX.js").then((n) => n.t);
4785
4785
  return pluginOperationalReportFeedSchema.parse({
4786
4786
  source: "plugins",
4787
4787
  generatedAt: new Date(nowMs).toISOString(),
@@ -12,6 +12,7 @@ import "@earendil-works/pi-agent-core";
12
12
  import { Sandbox } from "@vercel/sandbox";
13
13
  import "@earendil-works/pi-ai";
14
14
  import "@sinclair/typebox";
15
+ import "@vercel/queue";
15
16
  import "@modelcontextprotocol/sdk/client/auth.js";
16
17
  import { Client } from "@modelcontextprotocol/sdk/client";
17
18
  import { Message, StateAdapter } from "chat";
@@ -134,6 +135,10 @@ declare const inboundMessageSchema: z.ZodObject<{
134
135
  slack: "slack";
135
136
  web: "web";
136
137
  }>;
138
+ traceContext: z.ZodCatch<z.ZodOptional<z.ZodObject<{
139
+ baggage: z.ZodOptional<z.ZodString>;
140
+ sentryTrace: z.ZodString;
141
+ }, z.core.$strip>>>;
137
142
  }, z.core.$strict>;
138
143
  type InboundMessage = z.output<typeof inboundMessageSchema>;
139
144
  interface ConversationWorkerContext {
package/dist/app.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { i as ModelProfileInput, n as createApp, r as JuniorDashboardOptions, t as JuniorAppOptions } from "./app-Bo0kB987.js";
1
+ import { i as ModelProfileInput, n as createApp, r as JuniorDashboardOptions, t as JuniorAppOptions } from "./app-Buc5gIWz.js";
2
2
  import { i as defineJuniorPlugins, n as JuniorPluginSet, r as JuniorPluginSetOptions, t as JuniorPluginInput } from "./plugins-B_0Cr0MO.js";
3
3
  import { t as JUNIOR_VERSION } from "./version-Cc2OFd9G.js";
4
4
  export { JUNIOR_VERSION, JuniorAppOptions, type JuniorDashboardOptions, type JuniorPluginInput, type JuniorPluginSet, type JuniorPluginSetOptions, type ModelProfileInput, createApp, defineJuniorPlugins };