@symerian/symi 3.3.2 → 3.3.4

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 (114) hide show
  1. package/dist/{agent-BED0HDsS.js → agent-9zPi5Bip.js} +1 -1
  2. package/dist/{agent-pDOR_idq.js → agent-M9EC02CI.js} +1 -1
  3. package/dist/{agents-mZX2a3hp.js → agents-CW9uf_n0.js} +2 -2
  4. package/dist/{auth-choice-BgCnInKE.js → auth-choice-Bio1-QUP.js} +1 -1
  5. package/dist/{auth-choice-nKtOJ3wF.js → auth-choice-DS5oaUTz.js} +1 -1
  6. package/dist/{banner-C2jUZyMq.js → banner-0vT1O9w2.js} +1 -1
  7. package/dist/build-info.json +3 -3
  8. package/dist/bundled/boot-md/handler.js +4 -4
  9. package/dist/bundled/session-memory/handler.js +4 -4
  10. package/dist/canvas-host/a2ui/.bundle.hash +1 -1
  11. package/dist/{channel-options-DBKd8H2k.js → channel-options-CcGtiy0Q.js} +1 -1
  12. package/dist/{channel-options-DRzIcaL1.js → channel-options-DZ17japQ.js} +1 -1
  13. package/dist/{channels-cli-CxUB3oX1.js → channels-cli-BSvEpjOV.js} +7 -7
  14. package/dist/{channels-cli-CdfROBlW.js → channels-cli-DxSXTCCh.js} +7 -7
  15. package/dist/{chrome-CejiigNy.js → chrome-C9mX2mtt.js} +7 -7
  16. package/dist/{chrome-b556dOQ6.js → chrome-CQnRgvJz.js} +7 -7
  17. package/dist/{cli-CzEP9cIM.js → cli-CHk4wR-F.js} +4 -4
  18. package/dist/{cli-DWcoPSRG.js → cli-Dn9ylBb2.js} +4 -4
  19. package/dist/{command-registry-5O5dCHsD.js → command-registry-UxY6jjeo.js} +10 -10
  20. package/dist/{completion-cli-D4wYjxBG.js → completion-cli-DebZ6nSb.js} +1 -1
  21. package/dist/{completion-cli-DqrFJhG4.js → completion-cli-m9L2Gv9t.js} +2 -2
  22. package/dist/{config-cli-BE2vvf40.js → config-cli-D4_gO3Pd.js} +1 -1
  23. package/dist/{config-cli-CfA5xnD-.js → config-cli-D9YdRiN2.js} +1 -1
  24. package/dist/{configure-CPY4n9mx.js → configure-BXjJQG1p.js} +2 -2
  25. package/dist/{configure-DYDsHAWF.js → configure-D9NeIMjP.js} +2 -2
  26. package/dist/control-ui/css/style.css +0 -100
  27. package/dist/control-ui/index.html +0 -13
  28. package/dist/control-ui/js/app.js +7 -104
  29. package/dist/control-ui/js/render.js +0 -5
  30. package/dist/{deliver-i5knkyHl.js → deliver-DSMNXd9k.js} +4 -4
  31. package/dist/{deliver-BY0HHHHB.js → deliver-DSv-Z24A.js} +4 -4
  32. package/dist/{doctor-completion-DkwAZ_yS.js → doctor-completion--AgLv0kV.js} +1 -1
  33. package/dist/{doctor-completion-C6M7eRb_.js → doctor-completion-D1ImH_eM.js} +1 -1
  34. package/dist/entry.js +1 -1
  35. package/dist/extensionAPI.js +4 -4
  36. package/dist/{gateway-cli-Dm5RZoKM.js → gateway-cli-5KVJJGFm.js} +10 -10
  37. package/dist/{gateway-cli-K_XVNWQc.js → gateway-cli-BjGvnfU3.js} +10 -10
  38. package/dist/{glass-ui-ws-BbsrTxei.js → glass-ui-ws-CwJdwqn6.js} +8 -8
  39. package/dist/{glass-ui-ws-B_7JgOGU.js → glass-ui-ws-f_OPXcN2.js} +8 -8
  40. package/dist/{hooks-cli-D5S_h70_.js → hooks-cli-BfVq5C1p.js} +5 -5
  41. package/dist/{hooks-cli-DyiztpNG.js → hooks-cli-CQ6rF_LQ.js} +5 -5
  42. package/dist/index.js +8 -8
  43. package/dist/llm-slug-generator.js +4 -4
  44. package/dist/{manager-TrK63P2M.js → manager-BI8o6AGu.js} +1 -1
  45. package/dist/{manager-BTtaJXdu.js → manager-BQ5Wl5r-.js} +1 -1
  46. package/dist/{manager-ue49bRVP.js → manager-BUS2wGkQ.js} +1 -1
  47. package/dist/{manager-BT2SbOdg.js → manager-D_AVoLu8.js} +1 -1
  48. package/dist/{memory-Czxk_hJw.js → memory-2OKjMT7V.js} +2 -2
  49. package/dist/{memory-DJN1Q1jq.js → memory-CMKSFx1T.js} +2 -2
  50. package/dist/{memory-cli-B-nQp5HP.js → memory-cli-CmPcKzGZ.js} +2 -2
  51. package/dist/{memory-cli-C9ZqpaaB.js → memory-cli-rdfaJrCS.js} +2 -2
  52. package/dist/{models-oqT-RVMM.js → models-DRtgYyTB.js} +2 -2
  53. package/dist/{models-cli-D8rsqzuW.js → models-cli-183sPHZO.js} +5 -5
  54. package/dist/{models-cli-CuHQFbs7.js → models-cli-DN2zTFw9.js} +6 -6
  55. package/dist/{onboard-BICXrIV1.js → onboard-CPHA8CdV.js} +1 -1
  56. package/dist/{onboard-D-xPcbdk.js → onboard-bTgNnEHK.js} +1 -1
  57. package/dist/{onboard-channels-CiLPgwMl.js → onboard-channels-B_iyN1qL.js} +1 -1
  58. package/dist/{onboard-channels-IZ52XV8A.js → onboard-channels-D5ugcgBE.js} +1 -1
  59. package/dist/{onboarding-BmB9v20h.js → onboarding-D2SLzcWH.js} +3 -3
  60. package/dist/{onboarding-B-jxZvC2.js → onboarding-ii3ok0Ih.js} +3 -3
  61. package/dist/{onboarding.finalize-BejpUEVe.js → onboarding.finalize-DOHv_Xe8.js} +3 -3
  62. package/dist/{onboarding.finalize-DufFKTf4.js → onboarding.finalize-g-_d-wVY.js} +4 -4
  63. package/dist/{pi-embedded-DoWU3tbW.js → pi-embedded-CvGL6bij.js} +36 -36
  64. package/dist/{plugin-registry-BybhOEu2.js → plugin-registry-DSG-0min.js} +1 -1
  65. package/dist/{plugin-registry-CFRFz2CF.js → plugin-registry-Dl3HqI5J.js} +1 -1
  66. package/dist/plugin-sdk/agents/{symipulse-timeout.d.ts → idle-timeout.d.ts} +3 -3
  67. package/dist/plugin-sdk/index.js +6 -6
  68. package/dist/{plugins-cli-D9jv4SGt.js → plugins-cli-CEj-qNus.js} +5 -5
  69. package/dist/{plugins-cli-Dw_F4XTt.js → plugins-cli-CUTyMzoz.js} +5 -5
  70. package/dist/{program-BijlJds3.js → program-CjZ65fN4.js} +10 -10
  71. package/dist/{program-context-f_krhr6H.js → program-context-GaV454D6.js} +18 -18
  72. package/dist/{prompt-select-styled-D4Dl6PAx.js → prompt-select-styled-BkowcFQR.js} +4 -4
  73. package/dist/{prompt-select-styled-wUs9hOXT.js → prompt-select-styled-CwXc8EFB.js} +4 -4
  74. package/dist/{provider-auth-helpers-Dqg9CSy6.js → provider-auth-helpers-Bo1_RSEb.js} +1 -1
  75. package/dist/{provider-auth-helpers-B0LgxUJm.js → provider-auth-helpers-CRobCJR_.js} +1 -1
  76. package/dist/{push-apns-DBG95KxK.js → push-apns-BBym2pAw.js} +1 -1
  77. package/dist/{push-apns-C8U43QIp.js → push-apns-Bv16DYOL.js} +1 -1
  78. package/dist/{pw-ai-BFZrohva.js → pw-ai-B3qisJP1.js} +1 -1
  79. package/dist/{pw-ai-BHSw4eGG.js → pw-ai-GICi0s74.js} +1 -1
  80. package/dist/{register.agent-BQa36aBT.js → register.agent-QXqsCc-q.js} +9 -9
  81. package/dist/{register.agent-B0UZREcL.js → register.agent-z4GJgPr-.js} +8 -8
  82. package/dist/{register.configure-DXxKMVFv.js → register.configure-CYXErdjF.js} +8 -8
  83. package/dist/{register.configure-C2da871z.js → register.configure-DaMmDTaj.js} +8 -8
  84. package/dist/{register.maintenance-DUuHNER1.js → register.maintenance-CBGhJ5R9.js} +9 -9
  85. package/dist/{register.maintenance-CU2sJOVr.js → register.maintenance-CcWTycM4.js} +8 -8
  86. package/dist/{register.message-DIDXm7JJ.js → register.message-Bcvdcd3v.js} +5 -5
  87. package/dist/{register.message-zAQ9mzwS.js → register.message-EMkIi8Ga.js} +5 -5
  88. package/dist/{register.onboard-BQrBlJMk.js → register.onboard-CtcLKgR4.js} +2 -2
  89. package/dist/{register.onboard-xApCQkav.js → register.onboard-lmLaYYZl.js} +2 -2
  90. package/dist/{register.setup-CfJlyVIU.js → register.setup-Cu8R_HaH.js} +2 -2
  91. package/dist/{register.setup-C3DgnQee.js → register.setup-D47FYXH2.js} +2 -2
  92. package/dist/{register.status-health-sessions-D7eQHV4A.js → register.status-health-sessions--q6ddHX9.js} +3 -3
  93. package/dist/{register.status-health-sessions-CZKtQH3R.js → register.status-health-sessions-B9CINBWm.js} +3 -3
  94. package/dist/{register.subclis-DBKLQ-vk.js → register.subclis-CHTY5PYx.js} +9 -9
  95. package/dist/{run-main-C_9MD69x.js → run-main-Bzub4qvZ.js} +17 -17
  96. package/dist/{server-methods-B4kcazJq.js → server-methods-C2UnIkWU.js} +6 -6
  97. package/dist/{server-methods-BLH71I9g.js → server-methods-THO5vDXZ.js} +6 -6
  98. package/dist/{server-node-events-DO4ug_A0.js → server-node-events-j4AWHS1m.js} +6 -6
  99. package/dist/{server-node-events-BercSdmp.js → server-node-events-mBi614x_.js} +6 -6
  100. package/dist/{status-uVc7h7PN.js → status-BtAHzMLu.js} +1 -1
  101. package/dist/{status-DA_sl7Yp.js → status-BuHx0FXI.js} +1 -1
  102. package/dist/{status-BdrH4P1l.js → status-FKqnkO3K.js} +1 -1
  103. package/dist/{status-3CIcz22o.js → status-MkJRgsTJ.js} +1 -1
  104. package/dist/{subagent-registry-CgZDo35C.js → subagent-registry-B1RgR3-0.js} +29 -29
  105. package/dist/{synthesis-DmdaBp-J.js → synthesis-BEaISjwW.js} +4 -4
  106. package/dist/{synthesis-DwfzSD3_.js → synthesis-BSUjIY0v.js} +4 -4
  107. package/dist/{synthesis-w1oM0_-6.js → synthesis-BtlmxJ7w.js} +4 -4
  108. package/dist/{synthesis-B_K7BSX3.js → synthesis-DsYfiC2s.js} +4 -4
  109. package/dist/{unified-runner-BPgxfuKU.js → unified-runner-BPyxPZv9.js} +36 -36
  110. package/dist/{unified-runner-DzycRpag.js → unified-runner-Bn9vq7Zy.js} +29 -29
  111. package/dist/{update-cli-C4I2k2u9.js → update-cli-BXtHo0ox.js} +9 -9
  112. package/dist/{update-cli-DYYKfrbM.js → update-cli-DLx7LNVB.js} +8 -8
  113. package/package.json +1 -1
  114. package/dist/control-ui/js/symipulse.js +0 -154
@@ -8,10 +8,10 @@ import { S as logWarn, _ as runExec, b as logError, f as loadWorkspaceBootstrapF
8
8
  import { $ as DEFAULT_MODEL, A as resolveThinkingDefault, B as requireApiKey, C as normalizeModelRef$1, D as resolveDefaultModelForAgent, E as resolveConfiguredModelRef, F as resolveImplicitProviders, G as normalizeSecretInput, H as resolveEnvApiKey, I as OLLAMA_NATIVE_BASE_URL, J as resolveShellEnvFallbackTimeoutMs, K as getShellPathFromLoginShell, L as createOllamaStreamFn, M as normalizeProviders, N as resolveImplicitBedrockProvider, O as resolveModelRefFromString, P as resolveImplicitCopilotProvider, Q as DEFAULT_CONTEXT_TOKENS, R as getApiKeyForModel, S as modelKey, U as resolveModelAuthMode, V as resolveApiKeyForProvider, Z as isTruthyEnvValue, _ as buildAllowedModelSet, a as markAuthProfileFailure, b as findNormalizedProviderValue, c as dedupeProfileIds, d as ensureAuthProfileStore, et as DEFAULT_PROVIDER, f as resolveAuthStorePathForDisplay, i as isProfileInCooldown, j as normalizeGoogleModelId, k as resolveSubagentSpawnModelSelection, l as listProfilesForProvider, m as withFileLock$1, n as resolveAuthProfileOrder, nt as resolveCliName, o as markAuthProfileUsed, p as resolveSymiAgentDir, r as getSoonestCooldownExpiry, rt as resolveAuthProfileDisplayLabel, s as resolveApiKeyForProfile, tt as formatCliCommand, u as markAuthProfileGood, v as buildConfiguredAllowlistKeys, w as normalizeProviderId, y as buildModelAliasIndex, z as getCustomProviderApiKey } from "./auth-profiles-duUuQXeC.js";
9
9
  import { a as saveJsonFile, i as loadJsonFile } from "./github-copilot-token-B31ugq7R.js";
10
10
  import { t as parseBooleanValue } from "./boolean-mcn6kL0s.js";
11
- import { $ as resolveSandboxContext, $t as resolveBrowserControlAuth, A as isGoogleModelApi, At as resolveSessionResetPolicy, B as isCompactionFailureError, Bt as resolveGroupSessionKey, C as sanitizeImageBlocks, Ct as INPUT_PROVENANCE_KIND_VALUES, D as extractToolResultId, Dt as resolveSessionKey, E as extractToolCallsFromAssistant, Et as normalizeInputProvenance, F as formatRawAssistantErrorForUi, Ft as canonicalizeMainSessionAlias, G as isRateLimitAssistantError, Gt as resolveBrowserConfig, H as isFailoverAssistantError, Ht as resolveSessionLockMaxHoldFromTimeout, I as getApiErrorPayloadFingerprint, J as isTransientHttpError, Jt as saveMediaBuffer, K as isRawApiErrorPayload, Kt as resolveProfile, L as isAuthAssistantError, M as classifyFailoverReason, Mt as resolveThreadFlag, N as formatAssistantErrorText, Nt as DEFAULT_RESET_TRIGGERS, O as downgradeOpenAIReasoningBlocks, Ot as evaluateSessionFreshness, P as formatBillingErrorMessage, Pt as resolveFreshSessionTotalTokens, Q as ensureSandboxWorkspaceForSession, Qt as ensureBrowserControlAuth, R as isBillingAssistantError, Rt as resolveMainSessionKey, S as sanitizeSessionMessagesImages, St as extractToolCallNames, T as resolveImageSanitizationLimits, Tt as hasInterSessionUserProvenance, U as isFailoverErrorMessage, Ut as createBrowserRouteContext, V as isContextOverflowError, Vt as acquireSessionWriteLock, W as isLikelyContextOverflowError, Wt as registerBrowserRoutes, X as parseImageSizeError, Xt as resolveExistingPathsWithinRoot, Y as parseImageDimensionError, Yt as DEFAULT_UPLOAD_DIR, Z as sanitizeUserFacingText, Zt as getBridgeAuthForPort, _ as validateAnthropicTurns, _t as normalizeSessionDeliveryFields, an as mergeAlsoAllowPolicy, at as loadSessionStore, b as isMessagingToolDuplicateNormalized, bt as capArrayByJsonBytes, c as normalizeChannelTargetInput, cn as stripPluginOnlyAllowlist, ct as updateLastRoute, d as parseReplyDirectives, dn as buildBootstrapContextFiles, dt as isCacheEnabled, en as applyOwnerOnlyToolPolicy, et as resolveSandboxRuntimeStatus, f as MEDIA_TOKEN_RE, fn as ensureSessionHeader, ft as resolveCacheTtlMs$1, g as initializeGlobalHookRunner, gt as normalizeDeliveryContext, h as getGlobalHookRunner, hn as sanitizeGoogleTurnOrdering, ht as mergeDeliveryContext, in as expandToolGroups, it as resolveAndPersistSessionFile, j as BILLING_ERROR_USER_MESSAGE, jt as resolveSessionResetType, k as isAntigravityClaude, kt as resolveChannelResetConfig, l as normalizeTargetForProvider, ln as compileGlobPatterns, lt as updateSessionStore, m as parseInlineDirectives$1, mn as resolveBootstrapTotalMaxChars, mt as deliveryContextKey, nn as collectExplicitAllowlist, o as normalizeReplyPayloadsForDelivery, on as normalizeToolName$1, ot as readSessionUpdatedAt, p as splitMediaFromOutput, pn as resolveBootstrapMaxChars, pt as deliveryContextFromSession, q as isTimeoutErrorMessage, qt as getMediaDir, rn as expandPolicyWithPluginGroups, rt as appendAssistantMessageToSessionTranscript, s as buildTargetResolverSignature, sn as resolveToolProfilePolicy, st as recordSessionMetaFromInbound, t as deliverOutboundPayloads, tn as buildPluginToolGroups, tt as extractDeliveryInfo, u as throwIfAborted, un as matchesAnyGlobPattern, ut as updateSessionStoreEntry, v as validateGeminiTurns, w as sanitizeToolResultImages, wt as applyInputProvenanceToUserMessage, x as normalizeTextForComparison, xt as countToolResults, y as pickFallbackThinkingLevel, yt as archiveSessionTranscripts, z as isCloudCodeAssistFormatError, zt as deriveSessionMetaPatch } from "./deliver-BY0HHHHB.js";
11
+ import { $ as resolveSandboxContext, $t as resolveBrowserControlAuth, A as isGoogleModelApi, At as resolveSessionResetPolicy, B as isCompactionFailureError, Bt as resolveGroupSessionKey, C as sanitizeImageBlocks, Ct as INPUT_PROVENANCE_KIND_VALUES, D as extractToolResultId, Dt as resolveSessionKey, E as extractToolCallsFromAssistant, Et as normalizeInputProvenance, F as formatRawAssistantErrorForUi, Ft as canonicalizeMainSessionAlias, G as isRateLimitAssistantError, Gt as resolveBrowserConfig, H as isFailoverAssistantError, Ht as resolveSessionLockMaxHoldFromTimeout, I as getApiErrorPayloadFingerprint, J as isTransientHttpError, Jt as saveMediaBuffer, K as isRawApiErrorPayload, Kt as resolveProfile, L as isAuthAssistantError, M as classifyFailoverReason, Mt as resolveThreadFlag, N as formatAssistantErrorText, Nt as DEFAULT_RESET_TRIGGERS, O as downgradeOpenAIReasoningBlocks, Ot as evaluateSessionFreshness, P as formatBillingErrorMessage, Pt as resolveFreshSessionTotalTokens, Q as ensureSandboxWorkspaceForSession, Qt as ensureBrowserControlAuth, R as isBillingAssistantError, Rt as resolveMainSessionKey, S as sanitizeSessionMessagesImages, St as extractToolCallNames, T as resolveImageSanitizationLimits, Tt as hasInterSessionUserProvenance, U as isFailoverErrorMessage, Ut as createBrowserRouteContext, V as isContextOverflowError, Vt as acquireSessionWriteLock, W as isLikelyContextOverflowError, Wt as registerBrowserRoutes, X as parseImageSizeError, Xt as resolveExistingPathsWithinRoot, Y as parseImageDimensionError, Yt as DEFAULT_UPLOAD_DIR, Z as sanitizeUserFacingText, Zt as getBridgeAuthForPort, _ as validateAnthropicTurns, _t as normalizeSessionDeliveryFields, an as mergeAlsoAllowPolicy, at as loadSessionStore, b as isMessagingToolDuplicateNormalized, bt as capArrayByJsonBytes, c as normalizeChannelTargetInput, cn as stripPluginOnlyAllowlist, ct as updateLastRoute, d as parseReplyDirectives, dn as buildBootstrapContextFiles, dt as isCacheEnabled, en as applyOwnerOnlyToolPolicy, et as resolveSandboxRuntimeStatus, f as MEDIA_TOKEN_RE, fn as ensureSessionHeader, ft as resolveCacheTtlMs$1, g as initializeGlobalHookRunner, gt as normalizeDeliveryContext, h as getGlobalHookRunner, hn as sanitizeGoogleTurnOrdering, ht as mergeDeliveryContext, in as expandToolGroups, it as resolveAndPersistSessionFile, j as BILLING_ERROR_USER_MESSAGE, jt as resolveSessionResetType, k as isAntigravityClaude, kt as resolveChannelResetConfig, l as normalizeTargetForProvider, ln as compileGlobPatterns, lt as updateSessionStore, m as parseInlineDirectives$1, mn as resolveBootstrapTotalMaxChars, mt as deliveryContextKey, nn as collectExplicitAllowlist, o as normalizeReplyPayloadsForDelivery, on as normalizeToolName$1, ot as readSessionUpdatedAt, p as splitMediaFromOutput, pn as resolveBootstrapMaxChars, pt as deliveryContextFromSession, q as isTimeoutErrorMessage, qt as getMediaDir, rn as expandPolicyWithPluginGroups, rt as appendAssistantMessageToSessionTranscript, s as buildTargetResolverSignature, sn as resolveToolProfilePolicy, st as recordSessionMetaFromInbound, t as deliverOutboundPayloads, tn as buildPluginToolGroups, tt as extractDeliveryInfo, u as throwIfAborted, un as matchesAnyGlobPattern, ut as updateSessionStoreEntry, v as validateGeminiTurns, w as sanitizeToolResultImages, wt as applyInputProvenanceToUserMessage, x as normalizeTextForComparison, xt as countToolResults, y as pickFallbackThinkingLevel, yt as archiveSessionTranscripts, z as isCloudCodeAssistFormatError, zt as deriveSessionMetaPatch } from "./deliver-DSv-Z24A.js";
12
12
  import { C as unsetConfigValueAtPath, S as setConfigValueAtPath, T as VERSION, _ as resetConfigOverrides, b as getConfigValueAtPath, c as loadConfig, d as writeConfigFile, f as validateConfigObjectWithPlugins, g as getConfigOverrides, h as validateJsonSchemaValue, i as isBlockedHostnameOrIp, l as readConfigFileSnapshot, m as parseDurationMs, o as normalizeHostname, t as SsrFBlockedError, u as resolveConfigSnapshotHash, v as setConfigOverride, w as DEFAULT_SUBAGENT_MAX_SPAWN_DEPTH, x as parseConfigPath, y as unsetConfigOverride } from "./ssrf-Dcgaqg3U.js";
13
13
  import { a as applyTestPluginDefaults, c as resolveMemorySlotDecision, d as isDangerousHostEnvVarName, i as safeStatSync, n as discoverSymiPlugins, o as normalizePluginsConfig, r as isPathInside, s as resolveEnableState, t as loadPluginManifestRegistry, u as isPathInsideWithRealpath } from "./manifest-registry-DsTUFMvZ.js";
14
- import { C as rawDataToString, O as DEFAULT_AI_SNAPSHOT_MAX_CHARS, T as isSecureWebSocketUrl, x as ensureChromeExtensionRelayServer } from "./chrome-CejiigNy.js";
14
+ import { C as rawDataToString, O as DEFAULT_AI_SNAPSHOT_MAX_CHARS, T as isSecureWebSocketUrl, x as ensureChromeExtensionRelayServer } from "./chrome-C9mX2mtt.js";
15
15
  import { l as parseFrontmatterBlock } from "./frontmatter-BzAaXBfE.js";
16
16
  import { c as assertSandboxPath, d as resolveSandboxedMediaSource, f as applySkillEnvOverrides, i as resolveSkillsPromptForRun, l as resolveSandboxInputPath, n as buildWorkspaceSkillSnapshot, p as applySkillEnvOverridesFromSnapshot, r as loadWorkspaceSkillEntries, s as assertMediaNotDataUrl } from "./skills-D0k4o0Ez.js";
17
17
  import { n as redactToolDetail } from "./redact-Dd8jrogi.js";
@@ -30,7 +30,7 @@ import { a as logMessageProcessed, i as logLaneEnqueue, o as logMessageQueued, r
30
30
  import { n as getDiagnosticSessionState } from "./diagnostic-session-state-BkfiP_y6.js";
31
31
  import { t as ensurePiAuthJsonFromAuthProfiles } from "./pi-auth-json-D4Bl4hBw.js";
32
32
  import { a as resolveEffectiveMessagesConfig, i as resolveAckReaction, o as resolveHumanDelayConfig, r as resolveResponsePrefixTemplate, t as createReplyPrefixOptions } from "./reply-prefix-ChIeKp-P.js";
33
- import { a as parseGeminiAuth, c as resolveMemorySearchConfig, i as resolveOllamaBaseUrl, n as retryAsync, o as collectProviderApiKeysForExecution, r as probeOllamaEmbeddingModels, s as executeWithApiKeyRotation } from "./manager-BT2SbOdg.js";
33
+ import { a as parseGeminiAuth, c as resolveMemorySearchConfig, i as resolveOllamaBaseUrl, n as retryAsync, o as collectProviderApiKeysForExecution, r as probeOllamaEmbeddingModels, s as executeWithApiKeyRotation } from "./manager-D_AVoLu8.js";
34
34
  import { c as normalizeExtraMemoryPaths, f as runTasksWithConcurrency, s as listMemoryFiles } from "./internal-Crkye5gI.js";
35
35
  import { n as resolveMarkdownTableMode } from "./markdown-tables-ptfgMe6b.js";
36
36
  import { a as shouldHandleTextCommands, c as resolveNativeCommandsEnabled, i as normalizeCommandBody, l as resolveNativeSkillsEnabled, n as listChatCommands, o as isCommandFlagEnabled, r as listChatCommandsForConfig, s as isRestartEnabled } from "./commands-registry-DaPrWQSe.js";
@@ -54,7 +54,7 @@ import crypto, { X509Certificate, createHash, createHmac, randomBytes, randomUUI
54
54
  import { complete, createAssistantMessageEventStream, streamSimple } from "@mariozechner/pi-ai";
55
55
  import AjvPkg from "ajv";
56
56
  import { CURRENT_SESSION_VERSION, DefaultResourceLoader, SessionManager, SettingsManager, codingTools, createAgentSession, createEditTool, createReadTool, createWriteTool, estimateTokens, generateSummary, readTool } from "@mariozechner/pi-coding-agent";
57
- import { WebSocket } from "ws";
57
+ import { WebSocket as WebSocket$1 } from "ws";
58
58
  import { Buffer as Buffer$1 } from "node:buffer";
59
59
  import { createJiti } from "jiti";
60
60
  import { Type } from "@sinclair/typebox";
@@ -2099,7 +2099,7 @@ async function getMemorySearchManager(params) {
2099
2099
  const wrapper = new FallbackMemoryManager({
2100
2100
  primary,
2101
2101
  fallbackFactory: async () => {
2102
- const { MemoryIndexManager } = await import("./manager-BT2SbOdg.js").then((n) => n.t);
2102
+ const { MemoryIndexManager } = await import("./manager-D_AVoLu8.js").then((n) => n.t);
2103
2103
  return await MemoryIndexManager.get(params);
2104
2104
  }
2105
2105
  }, () => QMD_MANAGER_CACHE.delete(cacheKey));
@@ -2112,7 +2112,7 @@ async function getMemorySearchManager(params) {
2112
2112
  }
2113
2113
  }
2114
2114
  try {
2115
- const { MemoryIndexManager } = await import("./manager-BT2SbOdg.js").then((n) => n.t);
2115
+ const { MemoryIndexManager } = await import("./manager-D_AVoLu8.js").then((n) => n.t);
2116
2116
  return { manager: await MemoryIndexManager.get(params) };
2117
2117
  } catch (err) {
2118
2118
  return {
@@ -7258,7 +7258,7 @@ var GatewayClient = class {
7258
7258
  if (fingerprint !== expected) return /* @__PURE__ */ new Error("gateway tls fingerprint mismatch");
7259
7259
  });
7260
7260
  }
7261
- this.ws = new WebSocket(url, wsOptions);
7261
+ this.ws = new WebSocket$1(url, wsOptions);
7262
7262
  this.ws.on("open", () => {
7263
7263
  if (url.startsWith("wss://") && this.opts.tlsFingerprint) {
7264
7264
  const tlsError = this.validateTlsFingerprint();
@@ -7477,7 +7477,7 @@ var GatewayClient = class {
7477
7477
  return null;
7478
7478
  }
7479
7479
  async request(method, params, opts) {
7480
- if (!this.ws || this.ws.readyState !== WebSocket.OPEN) throw new Error("gateway not connected");
7480
+ if (!this.ws || this.ws.readyState !== WebSocket$1.OPEN) throw new Error("gateway not connected");
7481
7481
  const id = randomUUID();
7482
7482
  const frame = {
7483
7483
  type: "req",
@@ -8438,7 +8438,7 @@ async function routeReply(params) {
8438
8438
  const resolvedReplyToId = replyToId ?? (channelId === "slack" && threadId != null && threadId !== "" ? String(threadId) : void 0);
8439
8439
  const resolvedThreadId = channelId === "slack" ? null : threadId ?? null;
8440
8440
  try {
8441
- const { deliverOutboundPayloads } = await import("./deliver-BY0HHHHB.js").then((n) => n.n);
8441
+ const { deliverOutboundPayloads } = await import("./deliver-DSv-Z24A.js").then((n) => n.n);
8442
8442
  return {
8443
8443
  ok: true,
8444
8444
  messageId: (await deliverOutboundPayloads({
@@ -41289,7 +41289,7 @@ async function deliverSessionMaintenanceWarning(params) {
41289
41289
  return;
41290
41290
  }
41291
41291
  try {
41292
- const { deliverOutboundPayloads } = await import("./deliver-BY0HHHHB.js").then((n) => n.n);
41292
+ const { deliverOutboundPayloads } = await import("./deliver-DSv-Z24A.js").then((n) => n.n);
41293
41293
  await deliverOutboundPayloads({
41294
41294
  cfg: params.cfg,
41295
41295
  channel,
@@ -53434,6 +53434,31 @@ function createCacheTrace(params) {
53434
53434
  };
53435
53435
  }
53436
53436
 
53437
+ //#endregion
53438
+ //#region src/agents/idle-timeout.ts
53439
+ /**
53440
+ * Per-run idle timeout resolution.
53441
+ *
53442
+ * The idle timer resets on every model/tool activity signal (streaming
53443
+ * chunk, tool execution, compaction, etc.). It fires only when the run is
53444
+ * truly idle — distinguishing "model working slowly on large context" from
53445
+ * "model stuck / connection lost".
53446
+ */
53447
+ const DEFAULT_IDLE_RATIO = .5;
53448
+ const MIN_IDLE_MS = 12e4;
53449
+ const MAX_IDLE_MS = 9e5;
53450
+ const ABSOLUTE_MIN_IDLE_MS = 3e4;
53451
+ const normalizeNumber = (value) => typeof value === "number" && Number.isFinite(value) ? Math.floor(value) : void 0;
53452
+ function resolveIdleTimeoutMs(opts) {
53453
+ const cap = Math.max(ABSOLUTE_MIN_IDLE_MS, opts.runTimeoutMs - 1e3);
53454
+ const modelMs = normalizeNumber(opts.modelSeconds != null ? opts.modelSeconds * 1e3 : void 0);
53455
+ if (modelMs !== void 0 && modelMs > 0) return Math.min(Math.max(modelMs, ABSOLUTE_MIN_IDLE_MS), cap);
53456
+ const configMs = normalizeNumber(opts.configSeconds != null ? opts.configSeconds * 1e3 : void 0);
53457
+ if (configMs !== void 0 && configMs > 0) return Math.min(Math.max(configMs, ABSOLUTE_MIN_IDLE_MS), cap);
53458
+ const computed = Math.floor(opts.runTimeoutMs * DEFAULT_IDLE_RATIO);
53459
+ return Math.min(Math.max(computed, MIN_IDLE_MS), Math.min(MAX_IDLE_MS, cap));
53460
+ }
53461
+
53437
53462
  //#endregion
53438
53463
  //#region src/agents/model-token-filter.ts
53439
53464
  /**
@@ -56596,31 +56621,6 @@ function hasRepetition(text, minBlockSize) {
56596
56621
  return text.indexOf(sample, searchStart) >= 0;
56597
56622
  }
56598
56623
 
56599
- //#endregion
56600
- //#region src/agents/symipulse-timeout.ts
56601
- /**
56602
- * Symipulse inactivity timeout resolution.
56603
- *
56604
- * The symipulse timer resets on every model/tool activity signal (streaming
56605
- * chunk, tool execution, compaction, etc.). It fires only when the run is
56606
- * truly idle — distinguishing "model working slowly on large context" from
56607
- * "model stuck / connection lost".
56608
- */
56609
- const DEFAULT_SYMIPULSE_RATIO = .5;
56610
- const MIN_SYMIPULSE_MS = 12e4;
56611
- const MAX_SYMIPULSE_MS = 9e5;
56612
- const SYMIPULSE_MIN_TIMEOUT_MS = 3e4;
56613
- const normalizeNumber = (value) => typeof value === "number" && Number.isFinite(value) ? Math.floor(value) : void 0;
56614
- function resolveSymipulseMs(opts) {
56615
- const cap = Math.max(SYMIPULSE_MIN_TIMEOUT_MS, opts.runTimeoutMs - 1e3);
56616
- const modelMs = normalizeNumber(opts.modelSeconds != null ? opts.modelSeconds * 1e3 : void 0);
56617
- if (modelMs !== void 0 && modelMs > 0) return Math.min(Math.max(modelMs, SYMIPULSE_MIN_TIMEOUT_MS), cap);
56618
- const configMs = normalizeNumber(opts.configSeconds != null ? opts.configSeconds * 1e3 : void 0);
56619
- if (configMs !== void 0 && configMs > 0) return Math.min(Math.max(configMs, SYMIPULSE_MIN_TIMEOUT_MS), cap);
56620
- const computed = Math.floor(opts.runTimeoutMs * DEFAULT_SYMIPULSE_RATIO);
56621
- return Math.min(Math.max(computed, MIN_SYMIPULSE_MS), Math.min(MAX_SYMIPULSE_MS, cap));
56622
- }
56623
-
56624
56624
  //#endregion
56625
56625
  //#region src/agents/pi-embedded-runner/abort.ts
56626
56626
  /**
@@ -57758,7 +57758,7 @@ async function runEmbeddedAttempt(params) {
57758
57758
  if (!key) return null;
57759
57759
  return (params.config?.agents?.defaults?.models)?.[key]?.symipulseSeconds ?? null;
57760
57760
  };
57761
- const symipulseMs = params.symipulseMs ?? resolveSymipulseMs({
57761
+ const symipulseMs = params.symipulseMs ?? resolveIdleTimeoutMs({
57762
57762
  runTimeoutMs: params.timeoutMs,
57763
57763
  configSeconds: params.config?.agents?.defaults?.symipulseSeconds,
57764
57764
  modelSeconds: resolveModelSymipulseSeconds()
@@ -47,8 +47,8 @@ import { c as hasNonzeroUsage, l as normalizeUsage, n as loadCostUsageSummary, o
47
47
  import { C as enqueueSystemEvent, E as buildChannelSummary, S as drainSystemEventEntries, _ as loadProviderUsageSummary, a as loadCombinedSessionStoreForGateway, b as resolveUsageProviderId, d as formatDoctorNonInteractiveHint, g as writeRestartSentinel, k as redactIdentifier, x as lookupContextTokens, y as formatUsageWindowSummary } from "./session-utils-0F9pB5d6.js";
48
48
  import { n as createBrowserRouteDispatcher, r as getMachineDisplayName, t as withTimeout$2 } from "./with-timeout-C0UtpXBj.js";
49
49
  import { i as resolveAckReaction, o as resolveEffectiveMessagesConfig, r as resolveResponsePrefixTemplate, s as resolveHumanDelayConfig, t as createReplyPrefixOptions } from "./reply-prefix-xaWqfM9m.js";
50
- import { n as resolveMemoryBackendConfig, t as getMemorySearchManager } from "./memory-Czxk_hJw.js";
51
- import { a as parseGeminiAuth, c as resolveMemorySearchConfig, n as retryAsync, o as collectProviderApiKeysForExecution, s as executeWithApiKeyRotation } from "./manager-BTtaJXdu.js";
50
+ import { n as resolveMemoryBackendConfig, t as getMemorySearchManager } from "./memory-2OKjMT7V.js";
51
+ import { a as parseGeminiAuth, c as resolveMemorySearchConfig, n as retryAsync, o as collectProviderApiKeysForExecution, s as executeWithApiKeyRotation } from "./manager-BQ5Wl5r-.js";
52
52
  import { f as runTasksWithConcurrency } from "./internal-CHnZdvRy.js";
53
53
  import { a as chunkText, c as resolveChunkMode, d as isSafeFenceBreak, f as parseFenceSpans, i as chunkMarkdownTextWithMode, l as resolveTextChunkLimit, o as chunkTextWithMode, r as chunkMarkdownText, t as chunkByNewline, u as findFenceSpanAt } from "./chunk-DQGU0F8t.js";
54
54
  import { n as resolveMarkdownTableMode } from "./markdown-tables-GTLvbzuR.js";
@@ -79,7 +79,7 @@ import { i as parseAbsoluteTimeMs, r as resolveDefaultCronStaggerMs, t as normal
79
79
  import { n as resolveMessageChannelSelection, t as listConfiguredMessageChannels } from "./channel-selection-BvIcXQLj.js";
80
80
  import { n as resolveAgentRoute, t as buildAgentSessionKey } from "./resolve-route-DKhx5C-P.js";
81
81
  import { t as parseTimeoutMs } from "./parse-timeout-CpgyC-LD.js";
82
- import { n as registerMemoryCli } from "./memory-cli-B-nQp5HP.js";
82
+ import { n as registerMemoryCli } from "./memory-cli-CmPcKzGZ.js";
83
83
  import { i as resolveSlackThreadTs, n as deliverReplies, t as createSlackReplyDeliveryPlan } from "./replies-P7jbK6Bo.js";
84
84
  import { a as resolveSubagentToolPolicy, i as resolveGroupToolPolicy, n as isToolAllowedByPolicies, r as resolveEffectiveToolPolicy, t as filterToolsByPolicy } from "./pi-tools.policy-BBHbN8Nh.js";
85
85
  import { a as buildModelAliasLines, n as resolveModel$2 } from "./model-BKtw-Bqs.js";
@@ -43930,6 +43930,31 @@ function createCacheTrace(params) {
43930
43930
  };
43931
43931
  }
43932
43932
 
43933
+ //#endregion
43934
+ //#region src/agents/idle-timeout.ts
43935
+ /**
43936
+ * Per-run idle timeout resolution.
43937
+ *
43938
+ * The idle timer resets on every model/tool activity signal (streaming
43939
+ * chunk, tool execution, compaction, etc.). It fires only when the run is
43940
+ * truly idle — distinguishing "model working slowly on large context" from
43941
+ * "model stuck / connection lost".
43942
+ */
43943
+ const DEFAULT_IDLE_RATIO = .5;
43944
+ const MIN_IDLE_MS = 12e4;
43945
+ const MAX_IDLE_MS = 9e5;
43946
+ const ABSOLUTE_MIN_IDLE_MS = 3e4;
43947
+ const normalizeNumber = (value) => typeof value === "number" && Number.isFinite(value) ? Math.floor(value) : void 0;
43948
+ function resolveIdleTimeoutMs(opts) {
43949
+ const cap = Math.max(ABSOLUTE_MIN_IDLE_MS, opts.runTimeoutMs - 1e3);
43950
+ const modelMs = normalizeNumber(opts.modelSeconds != null ? opts.modelSeconds * 1e3 : void 0);
43951
+ if (modelMs !== void 0 && modelMs > 0) return Math.min(Math.max(modelMs, ABSOLUTE_MIN_IDLE_MS), cap);
43952
+ const configMs = normalizeNumber(opts.configSeconds != null ? opts.configSeconds * 1e3 : void 0);
43953
+ if (configMs !== void 0 && configMs > 0) return Math.min(Math.max(configMs, ABSOLUTE_MIN_IDLE_MS), cap);
43954
+ const computed = Math.floor(opts.runTimeoutMs * DEFAULT_IDLE_RATIO);
43955
+ return Math.min(Math.max(computed, MIN_IDLE_MS), Math.min(MAX_IDLE_MS, cap));
43956
+ }
43957
+
43933
43958
  //#endregion
43934
43959
  //#region src/agents/model-token-filter.ts
43935
43960
  /**
@@ -47092,31 +47117,6 @@ function hasRepetition(text, minBlockSize) {
47092
47117
  return text.indexOf(sample, searchStart) >= 0;
47093
47118
  }
47094
47119
 
47095
- //#endregion
47096
- //#region src/agents/symipulse-timeout.ts
47097
- /**
47098
- * Symipulse inactivity timeout resolution.
47099
- *
47100
- * The symipulse timer resets on every model/tool activity signal (streaming
47101
- * chunk, tool execution, compaction, etc.). It fires only when the run is
47102
- * truly idle — distinguishing "model working slowly on large context" from
47103
- * "model stuck / connection lost".
47104
- */
47105
- const DEFAULT_SYMIPULSE_RATIO = .5;
47106
- const MIN_SYMIPULSE_MS = 12e4;
47107
- const MAX_SYMIPULSE_MS = 9e5;
47108
- const SYMIPULSE_MIN_TIMEOUT_MS = 3e4;
47109
- const normalizeNumber = (value) => typeof value === "number" && Number.isFinite(value) ? Math.floor(value) : void 0;
47110
- function resolveSymipulseMs(opts) {
47111
- const cap = Math.max(SYMIPULSE_MIN_TIMEOUT_MS, opts.runTimeoutMs - 1e3);
47112
- const modelMs = normalizeNumber(opts.modelSeconds != null ? opts.modelSeconds * 1e3 : void 0);
47113
- if (modelMs !== void 0 && modelMs > 0) return Math.min(Math.max(modelMs, SYMIPULSE_MIN_TIMEOUT_MS), cap);
47114
- const configMs = normalizeNumber(opts.configSeconds != null ? opts.configSeconds * 1e3 : void 0);
47115
- if (configMs !== void 0 && configMs > 0) return Math.min(Math.max(configMs, SYMIPULSE_MIN_TIMEOUT_MS), cap);
47116
- const computed = Math.floor(opts.runTimeoutMs * DEFAULT_SYMIPULSE_RATIO);
47117
- return Math.min(Math.max(computed, MIN_SYMIPULSE_MS), Math.min(MAX_SYMIPULSE_MS, cap));
47118
- }
47119
-
47120
47120
  //#endregion
47121
47121
  //#region src/agents/pi-embedded-runner/abort.ts
47122
47122
  /**
@@ -48254,7 +48254,7 @@ async function runEmbeddedAttempt(params) {
48254
48254
  if (!key) return null;
48255
48255
  return (params.config?.agents?.defaults?.models)?.[key]?.symipulseSeconds ?? null;
48256
48256
  };
48257
- const symipulseMs = params.symipulseMs ?? resolveSymipulseMs({
48257
+ const symipulseMs = params.symipulseMs ?? resolveIdleTimeoutMs({
48258
48258
  runTimeoutMs: params.timeoutMs,
48259
48259
  configSeconds: params.config?.agents?.defaults?.symipulseSeconds,
48260
48260
  modelSeconds: resolveModelSymipulseSeconds()
@@ -17,7 +17,7 @@ import "./client-CAz5aPpp.js";
17
17
  import "./call-BocrIanP.js";
18
18
  import "./message-channel-CNPAq1Tl.js";
19
19
  import "./pairing-token-Bnr7QjVF.js";
20
- import "./subagent-registry-CgZDo35C.js";
20
+ import "./subagent-registry-B1RgR3-0.js";
21
21
  import "./sessions-7jk0D1BI.js";
22
22
  import "./plugins-Bq-Msc8Z.js";
23
23
  import "./send-CLJ2KPVT.js";
@@ -45,8 +45,8 @@ import "./paths-CNexk5_o.js";
45
45
  import "./thinking-BDh5LPh-.js";
46
46
  import "./models-config-BfmuswQ_.js";
47
47
  import "./reply-prefix-CRdCnS44.js";
48
- import "./memory-DJN1Q1jq.js";
49
- import "./manager-TrK63P2M.js";
48
+ import "./memory-CMKSFx1T.js";
49
+ import "./manager-BI8o6AGu.js";
50
50
  import "./sqlite-l3CZYU6t.js";
51
51
  import "./chunk-BySyfaEr.js";
52
52
  import "./markdown-tables-CCOfinlW.js";
@@ -78,7 +78,7 @@ import { t as formatDocsLink } from "./links-Db3Rw0Tg.js";
78
78
  import "./cli-utils-BqMwAlgf.js";
79
79
  import { t as formatHelpExamples } from "./help-format-DbbIlOje.js";
80
80
  import "./progress-C4ck6JXh.js";
81
- import "./memory-cli-C9ZqpaaB.js";
81
+ import "./memory-cli-rdfaJrCS.js";
82
82
  import "./logging-D0L9TWhE.js";
83
83
  import "./replies-BOy28KVL.js";
84
84
  import "./pi-tools.policy-D-WJTlz8.js";
@@ -92,10 +92,10 @@ import "./npm-registry-spec-NLo2PCol.js";
92
92
  import "./skill-scanner-DkITukAS.js";
93
93
  import "./installs-D0_bsQwa.js";
94
94
  import "./channels-status-issues-GSsGZvfn.js";
95
- import "./register.subclis-DBKLQ-vk.js";
96
- import "./command-registry-5O5dCHsD.js";
95
+ import "./register.subclis-CHTY5PYx.js";
96
+ import "./command-registry-UxY6jjeo.js";
97
97
  import "./program-context-BFKw4l9I.js";
98
- import { r as installCompletion } from "./completion-cli-DqrFJhG4.js";
98
+ import { r as installCompletion } from "./completion-cli-m9L2Gv9t.js";
99
99
  import "./daemon-runtime-Y8XS0WGP.js";
100
100
  import { r as parseSemver } from "./runtime-guard-p4-FMx0l.js";
101
101
  import "./onboard-helpers-LbRPhqLj.js";
@@ -117,8 +117,8 @@ import { n as updateNpmInstalledPlugins, t as syncPluginsForUpdateChannel } from
117
117
  import "./doctor-config-flow-DlX_L8Y-.js";
118
118
  import "./systemd-linger-BM4qvprK.js";
119
119
  import "./health-format-DaP03FBk.js";
120
- import { n as doctorCommand, t as selectStyled } from "./prompt-select-styled-wUs9hOXT.js";
121
- import { r as ensureCompletionCacheExists, t as checkShellCompletionStatus } from "./doctor-completion-DkwAZ_yS.js";
120
+ import { n as doctorCommand, t as selectStyled } from "./prompt-select-styled-CwXc8EFB.js";
121
+ import { r as ensureCompletionCacheExists, t as checkShellCompletionStatus } from "./doctor-completion--AgLv0kV.js";
122
122
  import { spawn, spawnSync } from "node:child_process";
123
123
  import os from "node:os";
124
124
  import path from "node:path";
@@ -1,4 +1,4 @@
1
- import "./unified-runner-DzycRpag.js";
1
+ import "./unified-runner-Bn9vq7Zy.js";
2
2
  import { j as theme } from "./registry-DKJLAPDB.js";
3
3
  import { g as resolveStateDir } from "./paths-BSzKwaxE.js";
4
4
  import { f as pathExists } from "./utils-BU8jVQFM.js";
@@ -47,8 +47,8 @@ import "./session-cost-usage-DYcv40ss.js";
47
47
  import { h as trimLogTail } from "./session-utils-0F9pB5d6.js";
48
48
  import "./with-timeout-C0UtpXBj.js";
49
49
  import "./reply-prefix-xaWqfM9m.js";
50
- import "./memory-Czxk_hJw.js";
51
- import "./manager-BTtaJXdu.js";
50
+ import "./memory-2OKjMT7V.js";
51
+ import "./manager-BQ5Wl5r-.js";
52
52
  import "./sqlite-DBEvS-Ne.js";
53
53
  import "./chunk-DQGU0F8t.js";
54
54
  import "./markdown-tables-GTLvbzuR.js";
@@ -80,13 +80,13 @@ import { t as formatDocsLink } from "./links-CSaUKNKm.js";
80
80
  import "./cli-utils-CX1oQ81G.js";
81
81
  import { t as formatHelpExamples } from "./help-format-BI_G2p1e.js";
82
82
  import "./progress-CyPyGCDn.js";
83
- import "./memory-cli-B-nQp5HP.js";
83
+ import "./memory-cli-CmPcKzGZ.js";
84
84
  import "./logging-B5YNzZB9.js";
85
85
  import "./replies-P7jbK6Bo.js";
86
86
  import "./pi-tools.policy-BBHbN8Nh.js";
87
87
  import "./model-BKtw-Bqs.js";
88
88
  import { r as parseSemver } from "./runtime-guard-BZ3_1QqS.js";
89
- import "./program-context-f_krhr6H.js";
89
+ import "./program-context-GaV454D6.js";
90
90
  import "./catalog-BEREnWaa.js";
91
91
  import "./skills-status-Dx3Lf5iU.js";
92
92
  import { n as inheritOptionFromParent } from "./command-options-ChiIn6Na.js";
@@ -98,7 +98,7 @@ import "./npm-registry-spec-BXw_6vF6.js";
98
98
  import "./skill-scanner-qMQf6-FN.js";
99
99
  import "./installs-CLp95gcX.js";
100
100
  import "./channels-status-issues-DC8vgOMo.js";
101
- import { r as installCompletion } from "./completion-cli-D4wYjxBG.js";
101
+ import { r as installCompletion } from "./completion-cli-DebZ6nSb.js";
102
102
  import "./daemon-runtime-BD-3XS8R.js";
103
103
  import "./onboard-helpers-D2mWJnFB.js";
104
104
  import "./systemd-9LEEqibe.js";
@@ -119,8 +119,8 @@ import { n as updateNpmInstalledPlugins, t as syncPluginsForUpdateChannel } from
119
119
  import "./doctor-config-flow-4UT3396o.js";
120
120
  import "./systemd-linger-PqG8iGCt.js";
121
121
  import "./health-format-39e76m9p.js";
122
- import { n as doctorCommand, t as selectStyled } from "./prompt-select-styled-D4Dl6PAx.js";
123
- import { r as ensureCompletionCacheExists, t as checkShellCompletionStatus } from "./doctor-completion-C6M7eRb_.js";
122
+ import { n as doctorCommand, t as selectStyled } from "./prompt-select-styled-BkowcFQR.js";
123
+ import { r as ensureCompletionCacheExists, t as checkShellCompletionStatus } from "./doctor-completion-D1ImH_eM.js";
124
124
  import path from "node:path";
125
125
  import os from "node:os";
126
126
  import fs from "node:fs/promises";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@symerian/symi",
3
- "version": "3.3.2",
3
+ "version": "3.3.4",
4
4
  "description": "Multi-channel AI gateway with extensible messaging integrations",
5
5
  "keywords": [],
6
6
  "homepage": "https://github.com/jaysteelmind/symi#readme",
@@ -1,154 +0,0 @@
1
- // ── Symi UI — Symipulse Panel ─────────────────────────────────────────
2
- // Dedicated panel for heartbeat/symipulse system health messages.
3
- // Routes all symipulse traffic out of the main chat feed into a
4
- // collapsible right-side panel.
5
-
6
- const SYMIPULSE_MAX_ENTRIES = 50;
7
-
8
- // ── Centralized classifier ────────────────────────────────────────────
9
- // Checks server-side tag first (real-time), falls back to regex for
10
- // history messages that predate the isHeartbeat flag.
11
- window.isSymipulseMessage = function (message) {
12
- if (message?.isHeartbeat === true) {
13
- return true;
14
- }
15
-
16
- const role = message?.role;
17
- const txt = Array.isArray(message?.content)
18
- ? message.content
19
- .filter((b) => b.type === "text")
20
- .map((b) => b.text ?? "")
21
- .join("")
22
- .trim()
23
- : (typeof message?.content === "string"
24
- ? message.content
25
- : (window.extractText?.(message?.content) ?? "")
26
- ).trim();
27
-
28
- if (!txt) {
29
- return false;
30
- }
31
-
32
- if (role === "assistant") {
33
- if (
34
- /SYMIPULSE|heartbeat|System\s*Health|Pattern\s*Detection|systemHealth|count\s*→/i.test(txt)
35
- ) {
36
- return true;
37
- }
38
- if (/^[A-Z_]+_OK$/i.test(txt)) {
39
- return true;
40
- }
41
- if (/^\s*NO_REPLY\s*$/i.test(txt)) {
42
- return true;
43
- }
44
- // Health warnings — broadened to catch ⚠️ with health-check keywords
45
- if (/^⚠️.*(heartbeat|Agent failed before reply|unreachable|HTTP:\d{3})/i.test(txt)) {
46
- return true;
47
- }
48
- // [quiet window] prefix — heartbeat output during idle periods
49
- if (/^\[quiet window\]/i.test(txt)) {
50
- return true;
51
- }
52
- // Health log references — "Logged to YYYY-MM-DD.md"
53
- if (/Logged to \d{4}-\d{2}-\d{2}\.md/i.test(txt)) {
54
- return true;
55
- }
56
- // Heartbeat log acknowledgments — "Logged." followed by status text
57
- if (/^Logged\./i.test(txt)) {
58
- return true;
59
- }
60
- }
61
-
62
- if (role === "user") {
63
- // Removed ^ anchor — plugin context preamble may precede "Read SYMIPULSE.md"
64
- if (/Read SYMIPULSE\.md/i.test(txt) || /SYMIPULSE_OK/i.test(txt)) {
65
- return true;
66
- }
67
- }
68
-
69
- return false;
70
- };
71
-
72
- // ── Panel DOM references ──────────────────────────────────────────────
73
- const _spPanel = document.getElementById("symipulse-panel");
74
- const _spFeed = document.getElementById("symipulse-feed");
75
- const _spEmpty = document.getElementById("symipulse-empty");
76
- const _spDot = document.getElementById("symipulse-live-dot");
77
-
78
- // ── Append entry to Symipulse Panel ───────────────────────────────────
79
- window.appendToSymipulsePanel = function (text, timestamp) {
80
- if (!_spFeed || !text) {
81
- return;
82
- }
83
-
84
- // Remove empty placeholder
85
- if (_spEmpty && _spEmpty.parentNode) {
86
- _spEmpty.remove();
87
- }
88
-
89
- const entry = document.createElement("div");
90
- entry.className = "symipulse-entry";
91
-
92
- const time = timestamp
93
- ? new Date(typeof timestamp === "number" && timestamp < 1e12 ? timestamp * 1000 : timestamp)
94
- : new Date();
95
- const hhmm = time.toLocaleTimeString("en-US", {
96
- hour: "2-digit",
97
- minute: "2-digit",
98
- hour12: false,
99
- });
100
-
101
- const timeSpan = document.createElement("span");
102
- timeSpan.className = "symipulse-entry-time";
103
- timeSpan.textContent = hhmm;
104
-
105
- const textSpan = document.createElement("span");
106
- textSpan.className = "symipulse-entry-text";
107
- textSpan.textContent = text;
108
-
109
- entry.appendChild(timeSpan);
110
- entry.appendChild(textSpan);
111
- _spFeed.appendChild(entry);
112
-
113
- // Cap entries
114
- while (_spFeed.querySelectorAll(".symipulse-entry").length > SYMIPULSE_MAX_ENTRIES) {
115
- const oldest = _spFeed.querySelector(".symipulse-entry");
116
- if (!oldest) {
117
- break;
118
- }
119
- oldest.remove();
120
- }
121
-
122
- // Auto-scroll when expanded
123
- if (_spPanel?.classList.contains("expanded")) {
124
- _spFeed.scrollTop = _spFeed.scrollHeight;
125
- }
126
- };
127
-
128
- // ── Clear panel (on new session) ──────────────────────────────────────
129
- window.clearSymipulsePanel = function () {
130
- if (!_spFeed) {
131
- return;
132
- }
133
- _spFeed.innerHTML = `
134
- <div class="symipulse-empty" id="symipulse-empty">
135
- <div class="symipulse-empty-text">No heartbeats yet</div>
136
- </div>`;
137
- };
138
-
139
- // ── Live dot control ──────────────────────────────────────────────────
140
- window.setSymipulseLiveDot = function (active) {
141
- if (_spDot) {
142
- _spDot.classList.toggle("active", active);
143
- }
144
- };
145
-
146
- // ── Toggle expand/collapse on click ───────────────────────────────────
147
- if (_spPanel) {
148
- _spPanel.addEventListener("click", () => {
149
- _spPanel.classList.toggle("expanded");
150
- if (_spPanel.classList.contains("expanded") && _spFeed) {
151
- _spFeed.scrollTop = _spFeed.scrollHeight;
152
- }
153
- });
154
- }