@symerian/symi 2.8.12 → 2.8.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{accounts-BuZxOb3B.js → accounts-Bsg6r6H7.js} +1 -1
- package/dist/{accounts-BRw8yhIW.js → accounts-BsgY6sda.js} +21 -21
- package/dist/{accounts-3dCrO3oZ.js → accounts-wWWkC0JH.js} +1 -1
- package/dist/{active-listener-BVZOh2T1.js → active-listener-AVNn5_U9.js} +1 -1
- package/dist/{agent-scope-CpEJ0B88.js → agent-scope-Cpm7a9ss.js} +3 -3
- package/dist/{agents-OAonMxYV.js → agents-DlAvDWxz.js} +4 -4
- package/dist/{agents.config-BIhaDwT2.js → agents.config-BKKMbeeE.js} +1 -1
- package/dist/{agents.config-DGu_K5xz.js → agents.config-Dd-11klq.js} +1 -1
- package/dist/{audio-preflight-Cb-T0r6e.js → audio-preflight-rrz8KyHd.js} +29 -29
- package/dist/{audit-Bi9Je9FZ.js → audit-BhCJV2l6.js} +1 -1
- package/dist/{audit-Oa5dsn5p.js → audit-CB97BqHJ.js} +1 -1
- package/dist/{auth-choice-BvPX7B4c.js → auth-choice-C6woT6k2.js} +1 -1
- package/dist/{auth-choice-DDzWns1k.js → auth-choice-CRQRPwQt.js} +1 -1
- package/dist/{auth-profiles-C2vj6htZ.js → auth-profiles-BzB_Exeq.js} +17 -17
- package/dist/{banner-BFdiq-O5.js → banner-DrNha2_N.js} +1 -1
- package/dist/{bindings-BsHoBLIE.js → bindings-xcRox9xM.js} +2 -2
- package/dist/build-info.json +3 -3
- package/dist/bundled/boot-md/handler.js +54 -54
- package/dist/bundled/bootstrap-extra-files/handler.js +5 -5
- package/dist/bundled/command-logger/handler.js +1 -1
- package/dist/bundled/session-memory/handler.js +54 -54
- package/dist/canvas-host/a2ui/.bundle.hash +1 -1
- package/dist/{channel-activity-D8QD7GoV.js → channel-activity-CzHaIUAp.js} +1 -1
- package/dist/{channel-options-DTqUB0OP.js → channel-options-D8q9En4T.js} +1 -1
- package/dist/{channel-options-tfnOGSNF.js → channel-options-DYy2sCfN.js} +1 -1
- package/dist/{channel-web-CcUXobcu.js → channel-web-CRBU4eZk.js} +1 -1
- package/dist/{channels-cli-CmShA-wJ.js → channels-cli-BUk43hHR.js} +7 -7
- package/dist/{channels-cli-BcE5tHIr.js → channels-cli-Dk3kUw9A.js} +7 -7
- package/dist/{chrome-ROtrXlNs.js → chrome-DwXnykXR.js} +14 -14
- package/dist/{chunk-BRe1o4Af.js → chunk-BcxcL1U3.js} +1 -1
- package/dist/{cli-BxoD2wzk.js → cli-5gWsnsB7.js} +4 -4
- package/dist/{cli-CKG2iAr3.js → cli-DjZzJy3t.js} +4 -4
- package/dist/{command-registry-D1Le-Fmh.js → command-registry-LjFltTU9.js} +10 -10
- package/dist/{commands-registry-DxbSTLNQ.js → commands-registry-ByGkL6hs.js} +4 -4
- package/dist/{completion-cli-DgiFjSGS.js → completion-cli-BVTGy8th.js} +1 -1
- package/dist/{completion-cli-D9pC-ttw.js → completion-cli-Cf6fYZWL.js} +2 -2
- package/dist/{config-BkZ9HOKT.js → config-C4WnAd-c.js} +17 -17
- package/dist/{config-cli-C_uZQsTl.js → config-cli-C7DIbGxx.js} +1 -1
- package/dist/{config-cli-5mFA0UDP.js → config-cli-EgWrCemi.js} +1 -1
- package/dist/{configure-BJcy7wXm.js → configure-B67uIawm.js} +3 -3
- package/dist/{configure-DuRTFCuW.js → configure-Bk-snuxh.js} +3 -3
- package/dist/{consolidate-07QMweFF.js → consolidate-DRtVvG2U.js} +4 -4
- package/dist/{deliver-B0OUq6RP.js → deliver-SLYAWE19.js} +20 -20
- package/dist/{diagnostic-BUcR3Meg.js → diagnostic-DTkZsRNM.js} +1 -1
- package/dist/{doctor-completion-sQVhKKei.js → doctor-completion-By066O3p.js} +1 -1
- package/dist/{doctor-completion-DCRTHpiY.js → doctor-completion-lE_33xaY.js} +1 -1
- package/dist/entry.js +1 -1
- package/dist/{env-BDXYbTKj.js → env-CB65jmJQ.js} +1 -1
- package/dist/extensionAPI.js +2 -2
- package/dist/{frontmatter-CTR5f_Ez.js → frontmatter-CT1M0pRK.js} +4 -4
- package/dist/{gateway-cli-C3ujhxO0.js → gateway-cli-C6uT2x34.js} +182 -13
- package/dist/{gateway-cli-C_MT4JFm.js → gateway-cli-DqEgqVKC.js} +182 -13
- package/dist/{gemini-auth-BefM10YB.js → gemini-auth-D80BsXr2.js} +1 -1
- package/dist/{github-copilot-token-cCYzSU9h.js → github-copilot-token-B8B2pmph.js} +7 -7
- package/dist/{glass-ui-ws-ColAiWUr.js → glass-ui-ws-77TY57IO.js} +11 -11
- package/dist/{glass-ui-ws-B7zRY2BL.js → glass-ui-ws-CLAUHeZR.js} +11 -11
- package/dist/{health-C12hy3Ao.js → health-2jkjZxY8.js} +1 -1
- package/dist/{health-vKJZ7iJR.js → health-CvMHgR-L.js} +1 -1
- package/dist/{hooks-cli-CdUQvj8s.js → hooks-cli-CRZySOiz.js} +5 -5
- package/dist/{hooks-cli-fCPl5hur.js → hooks-cli-DSaezFsD.js} +5 -5
- package/dist/{image-BuVL0jHI.js → image-BHF_fnIp.js} +4 -4
- package/dist/{image-ops-C7CauEK8.js → image-ops-CY7v6vvp.js} +16 -16
- package/dist/index.js +9 -9
- package/dist/{internal-DjnxpF_K.js → internal-FNqguZSK.js} +11 -11
- package/dist/{ir-7tMVY7D_.js → ir-D6MiJpAy.js} +4 -4
- package/dist/llm-slug-generator.js +54 -54
- package/dist/{local-roots-ClipCZ9s.js → local-roots-tcdaIEhh.js} +5 -5
- package/dist/{login-D4rZWBXe.js → login-D4ZkmSrY.js} +7 -7
- package/dist/{login-qr-DdAVHOEC.js → login-qr-C9ftIq3n.js} +12 -12
- package/dist/{manager-DHRBy5oR.js → manager-BtWtmpxN.js} +1 -1
- package/dist/{manager-CLrJn9l-.js → manager-DDELj5o9.js} +1 -1
- package/dist/{manager-BJvYQ7xP.js → manager-DrmlegR2.js} +1 -1
- package/dist/{manager-Df_ZdrNG.js → manager-DxCmjSfP.js} +24 -24
- package/dist/{manifest-registry-CBCGTsIb.js → manifest-registry-BvGv6lp9.js} +19 -19
- package/dist/{markdown-tables-x2Xe2UXh.js → markdown-tables-CE-qSMGB.js} +1 -1
- package/dist/{memory-cli-T-a5-lqZ.js → memory-cli-ENCASZJk.js} +3 -3
- package/dist/{memory-cli-BgJciaHC.js → memory-cli-Qgbcxvuf.js} +3 -3
- package/dist/{message-channel-OlFBYAw8.js → message-channel-lwVT8QjK.js} +1 -1
- package/dist/{models-BXXV_sZU.js → models-COhUz7M9.js} +2 -2
- package/dist/{models-cli-BI-DyItH.js → models-cli-CCxYcF4R.js} +5 -5
- package/dist/{models-cli-Bs6JAGq-.js → models-cli-CYvXBvmZ.js} +6 -6
- package/dist/{onboard-Czi_FRdi.js → onboard-CQNUYBIp.js} +2 -2
- package/dist/{onboard-channels-sTuhQBVu.js → onboard-channels-9erx07qe.js} +1 -1
- package/dist/{onboard-channels-BUCYZF02.js → onboard-channels-CWw8G-6n.js} +1 -1
- package/dist/{onboard-DKDCWveE.js → onboard-fVpLVnwg.js} +2 -2
- package/dist/{onboarding-Bgx0qZhA.js → onboarding-CtEiH9WG.js} +3 -3
- package/dist/{onboarding-CokRRVEi.js → onboarding-D-OIkDwZ.js} +3 -3
- package/dist/{onboarding.finalize-BCv5jB0d.js → onboarding.finalize-BY3HNjX4.js} +9 -9
- package/dist/{onboarding.finalize-BzEKyraI.js → onboarding.finalize-DTbpLV-T.js} +8 -8
- package/dist/{outbound-Zmd7UyQH.js → outbound-C6Gm22UF.js} +7 -7
- package/dist/{outbound-attachment-DeCnZT-8.js → outbound-attachment-BWyKV1Gy.js} +2 -2
- package/dist/paths-CYmyCDsE.js +212 -0
- package/dist/{paths-CbQV9WEg.js → paths-DEuVuViW.js} +1 -1
- package/dist/{pi-auth-json-RXOlh8ar.js → pi-auth-json-Bv1NzJdR.js} +1 -1
- package/dist/{pi-embedded-DXY7TLac.js → pi-embedded-CdOdQw2i.js} +265 -13
- package/dist/{pi-embedded-helpers-D1_Sab0M.js → pi-embedded-helpers-DwQ9wJeT.js} +73 -73
- package/dist/{pi-tools.policy-BZrM6a-w.js → pi-tools.policy-Bx5zp45n.js} +2 -0
- package/dist/{pi-tools.policy-QIVWAVVI.js → pi-tools.policy-o0ytjRqu.js} +2 -0
- package/dist/{plugin-registry-CyrsJDyE.js → plugin-registry-BrJ0-qlu.js} +1 -1
- package/dist/{plugin-registry-B2cpTmJz.js → plugin-registry-Cuc8ORuR.js} +1 -1
- package/dist/plugin-sdk/agents/pi-embedded-runner/long-task-prompt.d.ts +7 -0
- package/dist/plugin-sdk/agents/tools/task-tool.d.ts +7 -0
- package/dist/plugin-sdk/{channel-web-t6enTxNE.js → channel-web-t8UOP6Zu.js} +1 -1
- package/dist/plugin-sdk/index.js +3 -3
- package/dist/plugin-sdk/{manager-LRE7zEk2.js → manager-BPm5oefC.js} +1 -1
- package/dist/plugin-sdk/{reply-JypoGhql.js → reply-BKAHTugL.js} +265 -13
- package/dist/plugin-sdk/{synthesis-_WpVyZKx.js → synthesis-CVF7Fwhd.js} +2 -2
- package/dist/plugin-sdk/{web-BTVj4kiQ.js → web-D0DsmFvw.js} +3 -3
- package/dist/{plugins-cli-B-zoQyqU.js → plugins-cli-BDalhI46.js} +5 -5
- package/dist/{plugins-cli-DJwRd3EZ.js → plugins-cli-DFmriy-c.js} +5 -5
- package/dist/{plugins-BzmbgY7s.js → plugins-v8k1XVOy.js} +9 -9
- package/dist/{program-H7h6Iqrq.js → program-DKh41c2a.js} +10 -10
- package/dist/{program-context-BgecQAHU.js → program-context-Cq7pqOrw.js} +19 -19
- package/dist/{prompt-select-styled-BglmD29e.js → prompt-select-styled-BFCAZLwK.js} +6 -6
- package/dist/{prompt-select-styled-BDN2o35i.js → prompt-select-styled-DvvSE_ni.js} +6 -6
- package/dist/{provider-auth-helpers-BGIgr7xM.js → provider-auth-helpers-B-LkDxxi.js} +1 -1
- package/dist/{provider-auth-helpers-MfKmTeLY.js → provider-auth-helpers-DXppgV1l.js} +1 -1
- package/dist/{push-apns-b6bH1EBC.js → push-apns-DCA47WA5.js} +1 -1
- package/dist/{push-apns-IcfSTzfr.js → push-apns-DvudhEAb.js} +1 -1
- package/dist/{pw-ai-DWkC5eGA.js → pw-ai-XGqnSWju.js} +11 -11
- package/dist/{qmd-manager-BXkbA8Y9.js → qmd-manager-CbRJhonG.js} +8 -8
- package/dist/{register.agent-ChwMSIC4.js → register.agent-_BV5KyFb.js} +9 -9
- package/dist/{register.agent-BgyETrrj.js → register.agent-aFj_SMi3.js} +8 -8
- package/dist/{register.configure-DH3L2tqW.js → register.configure-CvOoD5gE.js} +9 -9
- package/dist/{register.configure-Bm4CvoLF.js → register.configure-Dx0Uhmlz.js} +9 -9
- package/dist/{register.maintenance-BbOBw1eI.js → register.maintenance-BuZpoSik.js} +10 -10
- package/dist/{register.maintenance-CAyHUEzP.js → register.maintenance-CMeJR7DG.js} +11 -11
- package/dist/{register.message-DheqsiR0.js → register.message-qysZPg3G.js} +5 -5
- package/dist/{register.message-DQ3MOWFE.js → register.message-xxGePuRC.js} +5 -5
- package/dist/{register.onboard-DOJkUhoY.js → register.onboard-1MP2I0q4.js} +7 -7
- package/dist/{register.onboard-CxqR4S1C.js → register.onboard-D4Aow7Gc.js} +7 -7
- package/dist/{register.setup-zdrIJA2P.js → register.setup-BT74aXzA.js} +7 -7
- package/dist/{register.setup-48YBHzMZ.js → register.setup-DzliKkWh.js} +7 -7
- package/dist/{register.status-health-sessions-CeT5pVXb.js → register.status-health-sessions-B3K2gZ72.js} +7 -7
- package/dist/{register.status-health-sessions-CimrhScH.js → register.status-health-sessions-D7VYZlrU.js} +7 -7
- package/dist/{register.subclis-B-zh940S.js → register.subclis-BCy0IDRv.js} +10 -10
- package/dist/{registry-DYq1AYOv.js → registry-X6fUE0K7.js} +19 -19
- package/dist/{replies-CUWXgyx2.js → replies-86F3PldM.js} +3 -3
- package/dist/{reply-CUR4xpYM.js → reply-Dg1ZU3DZ.js} +263 -13
- package/dist/{reply-prefix-CvEIl6_d.js → reply-prefix-CI_IdwqH.js} +1 -1
- package/dist/{resolve-route-Jy5dFY67.js → resolve-route-BgSuN9c6.js} +4 -4
- package/dist/{retry-B-y5suGA.js → retry-4oEAHckB.js} +1 -1
- package/dist/{run-main-CW_kj5Lj.js → run-main-OS2aFAJ2.js} +18 -18
- package/dist/{runner-ecX1WzDt.js → runner-B5oNTtgf.js} +22 -22
- package/dist/{security-cli-BpnzAB5_.js → security-cli-BadXDWTh.js} +2 -2
- package/dist/{security-cli-D9WEiEjD.js → security-cli-D5y28-RH.js} +2 -2
- package/dist/{send-DFtnbzqy.js → send-ASDB3AzC.js} +7 -7
- package/dist/{send-Bb4it0te.js → send-BTfqlrYd.js} +18 -18
- package/dist/{send-C0QjmPaf.js → send-CSydU49L.js} +10 -10
- package/dist/{send-Cpk3Ti6-.js → send-Du-IfSne.js} +6 -6
- package/dist/{send-BKo1T3HF.js → send-cCTQjuOZ.js} +6 -6
- package/dist/{server-methods-C1h0A5n0.js → server-methods-BszFAkbJ.js} +8 -8
- package/dist/{server-methods-C4id-H_X.js → server-methods-D_iKJ-sj.js} +8 -8
- package/dist/{server-node-events-CD2yDaEj.js → server-node-events-CENHuAVz.js} +5 -5
- package/dist/{server-node-events-BPZEGV_N.js → server-node-events-uBu3XOjd.js} +5 -5
- package/dist/{session-BTeY6Gn2.js → session-D8qLj_xN.js} +8 -8
- package/dist/{skill-commands-DG2lcozb.js → skill-commands-BcOduw6G.js} +16 -16
- package/dist/{skills-CXxrn_e2.js → skills-BrYDT4Jr.js} +24 -24
- package/dist/{sqlite-BN_hIcmu.js → sqlite-P-gMg7fi.js} +3 -3
- package/dist/{status-_xBnHTlx.js → status-BvbJavmh.js} +1 -1
- package/dist/{status-DCeW2a07.js → status-CA0mUJld.js} +4 -4
- package/dist/{status-Cb932Vl4.js → status-CBnCPUMG.js} +4 -4
- package/dist/{status-DvHD1cnq.js → status-DJAeKN4G.js} +1 -1
- package/dist/{store-01F_JM7O.js → store-Ceagbc4L.js} +6 -6
- package/dist/{subagent-registry-BKuL9PdW.js → subagent-registry-C1OyZl-M.js} +263 -13
- package/dist/{subsystem-BjyjJF-d.js → subsystem-CzXhCdeY.js} +1 -1
- package/dist/{synthesis-DOiTUsXQ.js → synthesis-DNTyB7JY.js} +2 -2
- package/dist/{synthesis-BUqDGjlc.js → synthesis-DuqSkHEr.js} +54 -54
- package/dist/{synthesis-C9RputIi.js → synthesis-brHrnNF2.js} +4 -4
- package/dist/{synthesis-Ia9egx87.js → synthesis-z5B41p_r.js} +4 -4
- package/dist/{tables-DoG-pFrf.js → tables-qbCoZrYA.js} +1 -1
- package/dist/{target-errors-DeJTztcq.js → target-errors-uNitqCCT.js} +2 -2
- package/dist/{thinking-BprCy23Z.js → thinking-BV7SCNJP.js} +5 -5
- package/dist/{tokens-W0JzCJJM.js → tokens-Bl5R3wPD.js} +1 -1
- package/dist/{tool-images-SqqWIT22.js → tool-images-JxNglLSr.js} +2 -2
- package/dist/{tool-loop-detection-Dj9h1ogr.js → tool-loop-detection-dfE771kg.js} +3 -3
- package/dist/{unified-runner-CVItnwwP.js → unified-runner-Czg3pdBc.js} +489 -237
- package/dist/{update-cli-ChEABesZ.js → update-cli-0lyGyl31.js} +11 -11
- package/dist/{update-cli-D6ax3jSX.js → update-cli-CIzkVfmj.js} +10 -10
- package/dist/{update-runner-B2EY9BWM.js → update-runner-D7-LDziQ.js} +1 -1
- package/dist/{update-runner-CWG6GxKs.js → update-runner-aYPcKYAN.js} +1 -1
- package/dist/{web-z-yQ8riS.js → web-B90A99YU.js} +58 -58
- package/dist/{web-CpSE67Jp.js → web-BJ5dUZso.js} +5 -5
- package/dist/{web-D6PPeyG7.js → web-CN7wnU7w.js} +4 -4
- package/dist/{web-DMdb2p-h.js → web-Wk1ay1eQ.js} +2 -2
- package/dist/{whatsapp-actions-DmVpLXmh.js → whatsapp-actions-llk0IUn2.js} +23 -23
- package/dist/{workspace-DscDraUb.js → workspace-CywO4ayZ.js} +27 -27
- package/extensions/bluebubbles/package.json +1 -1
- package/extensions/copilot-proxy/package.json +1 -1
- package/extensions/diagnostics-otel/package.json +1 -1
- package/extensions/discord/package.json +1 -1
- package/extensions/feishu/package.json +1 -1
- package/extensions/google-antigravity-auth/package.json +1 -1
- package/extensions/google-gemini-cli-auth/package.json +1 -1
- package/extensions/googlechat/package.json +1 -1
- package/extensions/imessage/package.json +1 -1
- package/extensions/irc/package.json +1 -1
- package/extensions/learning-loop/package.json +1 -1
- package/extensions/line/package.json +1 -1
- package/extensions/llm-task/package.json +1 -1
- package/extensions/matrix/CHANGELOG.md +12 -0
- package/extensions/matrix/package.json +1 -1
- package/extensions/mattermost/package.json +1 -1
- package/extensions/memory-core/package.json +1 -1
- package/extensions/memory-lancedb/package.json +1 -1
- package/extensions/minimax-portal-auth/package.json +1 -1
- package/extensions/msteams/CHANGELOG.md +12 -0
- package/extensions/msteams/package.json +1 -1
- package/extensions/nextcloud-talk/package.json +1 -1
- package/extensions/nostr/CHANGELOG.md +12 -0
- package/extensions/nostr/package.json +1 -1
- package/extensions/open-prose/package.json +1 -1
- package/extensions/outlook/package.json +1 -1
- package/extensions/pipeline/package.json +1 -1
- package/extensions/signal/package.json +1 -1
- package/extensions/slack/package.json +1 -1
- package/extensions/telegram/package.json +1 -1
- package/extensions/tlon/package.json +1 -1
- package/extensions/twitch/CHANGELOG.md +12 -0
- package/extensions/twitch/package.json +1 -1
- package/extensions/voice-call/CHANGELOG.md +12 -0
- package/extensions/voice-call/package.json +1 -1
- package/extensions/whatsapp/package.json +1 -1
- package/extensions/zalo/CHANGELOG.md +12 -0
- package/extensions/zalo/package.json +1 -1
- package/extensions/zalouser/CHANGELOG.md +12 -0
- package/extensions/zalouser/package.json +1 -1
- package/package.json +1 -1
- package/skills/long-task/scripts/detach-task.sh +57 -5
|
@@ -37,7 +37,7 @@ import { i as resolveSessionTranscriptPath, n as resolveSessionFilePath, o as re
|
|
|
37
37
|
import { t as emitSessionTranscriptUpdate } from "./transcript-events-C8Tqw4td.js";
|
|
38
38
|
import { i as resolveImageSanitizationLimits, n as sanitizeImageBlocks, r as sanitizeToolResultImages } from "./tool-images-ChC2CXaN.js";
|
|
39
39
|
import { S as ensureSymiModelsJson, _ as stripMinimaxToolCallXml, a as decodeDataUrl, b as stripReasoningTagsFromText, c as extractAssistantText$1, d as extractThinkingFromTaggedText, f as formatReasoningMessage, g as stripDowngradedToolCallText, h as promoteThinkingTagsToBlocks, i as coerceImageModelConfig, l as extractAssistantThinking, m as isAssistantMessage, o as resolveProviderVisionModelFromConfig, p as inferToolMetaFromArgs, r as coerceImageAssistantText, s as minimaxUnderstandImage, u as extractThinkingFromTaggedStream, v as stripThinkingTagsFromText, x as extractTextFromChatContent, y as resolveToolDisplay } from "./image-MNvheU8U.js";
|
|
40
|
-
import { a as resolveMemorySearchConfig, i as resolveOllamaBaseUrl, r as probeOllamaEmbeddingModels, t as MemoryIndexManager } from "./manager-
|
|
40
|
+
import { a as resolveMemorySearchConfig, i as resolveOllamaBaseUrl, r as probeOllamaEmbeddingModels, t as MemoryIndexManager } from "./manager-BtWtmpxN.js";
|
|
41
41
|
import { c as normalizeExtraMemoryPaths, f as runTasksWithConcurrency, s as listMemoryFiles } from "./internal-479FB0St.js";
|
|
42
42
|
import { n as retryAsync } from "./retry-QGp0jvVi.js";
|
|
43
43
|
import { a as createActionGate, c as jsonResult, d as readReactionParams, f as readStringArrayParam, l as parseAvailableTags, m as readStringParam, n as missingTargetError, o as imageResult, p as readStringOrNumberParam, r as unknownTargetError, s as imageResultFromFile, t as ambiguousTargetError, u as readNumberParam } from "./target-errors-Dm716SF3.js";
|
|
@@ -3473,7 +3473,7 @@ async function getMemorySearchManager(params) {
|
|
|
3473
3473
|
const wrapper = new FallbackMemoryManager({
|
|
3474
3474
|
primary,
|
|
3475
3475
|
fallbackFactory: async () => {
|
|
3476
|
-
const { MemoryIndexManager } = await import("./manager-
|
|
3476
|
+
const { MemoryIndexManager } = await import("./manager-BtWtmpxN.js").then((n) => n.n);
|
|
3477
3477
|
return await MemoryIndexManager.get(params);
|
|
3478
3478
|
}
|
|
3479
3479
|
}, () => QMD_MANAGER_CACHE.delete(cacheKey));
|
|
@@ -3486,7 +3486,7 @@ async function getMemorySearchManager(params) {
|
|
|
3486
3486
|
}
|
|
3487
3487
|
}
|
|
3488
3488
|
try {
|
|
3489
|
-
const { MemoryIndexManager } = await import("./manager-
|
|
3489
|
+
const { MemoryIndexManager } = await import("./manager-BtWtmpxN.js").then((n) => n.n);
|
|
3490
3490
|
return { manager: await MemoryIndexManager.get(params) };
|
|
3491
3491
|
} catch (err) {
|
|
3492
3492
|
return {
|
|
@@ -17618,7 +17618,7 @@ async function resolveSandboxWorkdir(params) {
|
|
|
17618
17618
|
};
|
|
17619
17619
|
}
|
|
17620
17620
|
}
|
|
17621
|
-
function resolveWorkdir(workdir, warnings) {
|
|
17621
|
+
function resolveWorkdir$1(workdir, warnings) {
|
|
17622
17622
|
const fallback = safeCwd() ?? homedir();
|
|
17623
17623
|
try {
|
|
17624
17624
|
if (statSync(workdir).isDirectory()) return workdir;
|
|
@@ -18760,7 +18760,7 @@ function createExecTool(defaults) {
|
|
|
18760
18760
|
});
|
|
18761
18761
|
workdir = resolved.hostWorkdir;
|
|
18762
18762
|
containerWorkdir = resolved.containerWorkdir;
|
|
18763
|
-
} else workdir = resolveWorkdir(rawWorkdir, warnings);
|
|
18763
|
+
} else workdir = resolveWorkdir$1(rawWorkdir, warnings);
|
|
18764
18764
|
const baseEnv = coerceEnv(process.env);
|
|
18765
18765
|
if (host !== "sandbox" && params.env) validateHostEnv(params.env);
|
|
18766
18766
|
const mergedEnv = params.env ? {
|
|
@@ -36661,6 +36661,254 @@ function createSubagentsTool(opts) {
|
|
|
36661
36661
|
};
|
|
36662
36662
|
}
|
|
36663
36663
|
|
|
36664
|
+
//#endregion
|
|
36665
|
+
//#region src/agents/tools/task-tool.ts
|
|
36666
|
+
/**
|
|
36667
|
+
* Long-task management tools (task_list, task_cancel).
|
|
36668
|
+
*
|
|
36669
|
+
* Companions to the detach-task pattern in skills/long-task. The detach
|
|
36670
|
+
* script writes task-<id>.{pid,cmd,started,log,status} state files into
|
|
36671
|
+
* the agent's workspace; these tools read and act on those files so the
|
|
36672
|
+
* agent can answer "what's running?" and kill a task without needing
|
|
36673
|
+
* shell access.
|
|
36674
|
+
*
|
|
36675
|
+
* task-id allow-list mirrors detach-task.sh: 1–60 chars from
|
|
36676
|
+
* [a-zA-Z0-9._-], must not start with '.' or '-'. Diverging would let the
|
|
36677
|
+
* agent kill processes it never spawned via path traversal.
|
|
36678
|
+
*/
|
|
36679
|
+
const TASK_FILE_PREFIX = "task-";
|
|
36680
|
+
const TASK_ID_RE = /^[a-zA-Z0-9_][a-zA-Z0-9._-]{0,59}$/;
|
|
36681
|
+
const TASK_FILE_SUFFIXES = [
|
|
36682
|
+
".pid",
|
|
36683
|
+
".status",
|
|
36684
|
+
".started",
|
|
36685
|
+
".cmd",
|
|
36686
|
+
".log"
|
|
36687
|
+
];
|
|
36688
|
+
const ALLOWED_SIGNALS = new Set([
|
|
36689
|
+
"SIGTERM",
|
|
36690
|
+
"SIGINT",
|
|
36691
|
+
"SIGHUP",
|
|
36692
|
+
"SIGQUIT",
|
|
36693
|
+
"SIGKILL",
|
|
36694
|
+
"SIGUSR1",
|
|
36695
|
+
"SIGUSR2"
|
|
36696
|
+
]);
|
|
36697
|
+
const TaskListSchema = Type.Object({ workdir: Type.Optional(Type.String()) });
|
|
36698
|
+
const TaskCancelSchema = Type.Object({
|
|
36699
|
+
taskId: Type.String(),
|
|
36700
|
+
workdir: Type.Optional(Type.String()),
|
|
36701
|
+
signal: Type.Optional(Type.String())
|
|
36702
|
+
});
|
|
36703
|
+
function normaliseSignal(input) {
|
|
36704
|
+
if (!input) return "SIGTERM";
|
|
36705
|
+
const upper = input.trim().toUpperCase();
|
|
36706
|
+
const candidate = upper.startsWith("SIG") ? upper : `SIG${upper}`;
|
|
36707
|
+
if (ALLOWED_SIGNALS.has(candidate)) return candidate;
|
|
36708
|
+
throw new Error(`Unsupported signal: ${input}. Allowed: TERM, INT, HUP, QUIT, KILL, USR1, USR2.`);
|
|
36709
|
+
}
|
|
36710
|
+
function isPidAlive(pid) {
|
|
36711
|
+
try {
|
|
36712
|
+
process.kill(pid, 0);
|
|
36713
|
+
return true;
|
|
36714
|
+
} catch (err) {
|
|
36715
|
+
if (err.code === "EPERM") return true;
|
|
36716
|
+
return false;
|
|
36717
|
+
}
|
|
36718
|
+
}
|
|
36719
|
+
async function safeRead(filePath) {
|
|
36720
|
+
try {
|
|
36721
|
+
return (await fs.promises.readFile(filePath, "utf8")).trim();
|
|
36722
|
+
} catch {
|
|
36723
|
+
return null;
|
|
36724
|
+
}
|
|
36725
|
+
}
|
|
36726
|
+
function resolveWorkdir(deps, override) {
|
|
36727
|
+
const raw = override?.trim();
|
|
36728
|
+
if (!raw) return deps.workspaceDir;
|
|
36729
|
+
if (!path.isAbsolute(raw)) throw new Error(`workdir must be an absolute path (got: ${raw})`);
|
|
36730
|
+
return raw;
|
|
36731
|
+
}
|
|
36732
|
+
async function readTaskInfo(workdir, id) {
|
|
36733
|
+
const pidPath = path.join(workdir, `${TASK_FILE_PREFIX}${id}.pid`);
|
|
36734
|
+
const [pidText, status, started, cmd] = await Promise.all([
|
|
36735
|
+
safeRead(pidPath),
|
|
36736
|
+
safeRead(path.join(workdir, `${TASK_FILE_PREFIX}${id}.status`)),
|
|
36737
|
+
safeRead(path.join(workdir, `${TASK_FILE_PREFIX}${id}.started`)),
|
|
36738
|
+
safeRead(path.join(workdir, `${TASK_FILE_PREFIX}${id}.cmd`))
|
|
36739
|
+
]);
|
|
36740
|
+
let pid = null;
|
|
36741
|
+
if (pidText) {
|
|
36742
|
+
const parsed = Number.parseInt(pidText, 10);
|
|
36743
|
+
if (Number.isFinite(parsed) && parsed > 0) pid = parsed;
|
|
36744
|
+
}
|
|
36745
|
+
return {
|
|
36746
|
+
id,
|
|
36747
|
+
pid,
|
|
36748
|
+
alive: pid !== null && isPidAlive(pid),
|
|
36749
|
+
status: status ?? "missing",
|
|
36750
|
+
started,
|
|
36751
|
+
cmd,
|
|
36752
|
+
pidPath,
|
|
36753
|
+
statusPath: path.join(workdir, `${TASK_FILE_PREFIX}${id}.status`),
|
|
36754
|
+
logPath: path.join(workdir, `${TASK_FILE_PREFIX}${id}.log`)
|
|
36755
|
+
};
|
|
36756
|
+
}
|
|
36757
|
+
function createTaskListTool(deps) {
|
|
36758
|
+
return {
|
|
36759
|
+
label: "Task List",
|
|
36760
|
+
name: "task_list",
|
|
36761
|
+
description: `List long-running detached tasks in the agent's workspace.
|
|
36762
|
+
|
|
36763
|
+
Globs task-<id>.{pid,status,started,cmd,log} files, reads their state, and
|
|
36764
|
+
checks each PID's liveness. Use this to find the task-id of a running
|
|
36765
|
+
detach-task before calling task_cancel, or to answer "what's running right
|
|
36766
|
+
now?" without re-asking the user.
|
|
36767
|
+
|
|
36768
|
+
Returns: { workdir, tasks: [{ id, pid, alive, status, started, cmd, pidPath, statusPath, logPath }] }.
|
|
36769
|
+
Tasks whose .pid file is missing are still listed (alive=false, pid=null) so
|
|
36770
|
+
the agent can spot orphan state files.`,
|
|
36771
|
+
parameters: TaskListSchema,
|
|
36772
|
+
execute: async (_toolCallId, args) => {
|
|
36773
|
+
const override = readStringParam(args, "workdir");
|
|
36774
|
+
let workdir;
|
|
36775
|
+
try {
|
|
36776
|
+
workdir = resolveWorkdir(deps, override);
|
|
36777
|
+
} catch (err) {
|
|
36778
|
+
return jsonResult({
|
|
36779
|
+
workdir: override ?? deps.workspaceDir,
|
|
36780
|
+
tasks: [],
|
|
36781
|
+
error: err instanceof Error ? err.message : String(err)
|
|
36782
|
+
});
|
|
36783
|
+
}
|
|
36784
|
+
let entries;
|
|
36785
|
+
try {
|
|
36786
|
+
entries = await fs.promises.readdir(workdir);
|
|
36787
|
+
} catch (err) {
|
|
36788
|
+
if (err.code === "ENOENT") return jsonResult({
|
|
36789
|
+
workdir,
|
|
36790
|
+
tasks: []
|
|
36791
|
+
});
|
|
36792
|
+
return jsonResult({
|
|
36793
|
+
workdir,
|
|
36794
|
+
tasks: [],
|
|
36795
|
+
error: err instanceof Error ? err.message : String(err)
|
|
36796
|
+
});
|
|
36797
|
+
}
|
|
36798
|
+
const taskIds = /* @__PURE__ */ new Set();
|
|
36799
|
+
for (const entry of entries) {
|
|
36800
|
+
if (!entry.startsWith(TASK_FILE_PREFIX)) continue;
|
|
36801
|
+
for (const suffix of TASK_FILE_SUFFIXES) if (entry.endsWith(suffix)) {
|
|
36802
|
+
const id = entry.slice(5, -suffix.length);
|
|
36803
|
+
if (id.length > 0 && TASK_ID_RE.test(id)) taskIds.add(id);
|
|
36804
|
+
break;
|
|
36805
|
+
}
|
|
36806
|
+
}
|
|
36807
|
+
const tasks = await Promise.all([...taskIds].toSorted().map((id) => readTaskInfo(workdir, id)));
|
|
36808
|
+
return jsonResult({
|
|
36809
|
+
workdir,
|
|
36810
|
+
tasks
|
|
36811
|
+
});
|
|
36812
|
+
}
|
|
36813
|
+
};
|
|
36814
|
+
}
|
|
36815
|
+
function createTaskCancelTool(deps) {
|
|
36816
|
+
return {
|
|
36817
|
+
label: "Task Cancel",
|
|
36818
|
+
name: "task_cancel",
|
|
36819
|
+
description: `Send a signal (default SIGTERM) to a running detached task.
|
|
36820
|
+
|
|
36821
|
+
Reads task-<id>.pid in the workdir, validates the recorded PID is alive,
|
|
36822
|
+
and sends the signal via process.kill. The task's TERM/INT/HUP trap will
|
|
36823
|
+
write an "aborted" status before exiting, so a follow-up task_list call
|
|
36824
|
+
sees the canonical end state.
|
|
36825
|
+
|
|
36826
|
+
task-id must match the same allow-list as detach-task.sh: 1–60 chars from
|
|
36827
|
+
[a-zA-Z0-9._-], no leading '.' or '-'. signal accepts TERM (default), INT,
|
|
36828
|
+
HUP, QUIT, KILL, USR1, USR2 — with or without the "SIG" prefix.
|
|
36829
|
+
|
|
36830
|
+
Returns: { ok, taskId, pid, sentSignal, alreadyDead?, error? }.`,
|
|
36831
|
+
parameters: TaskCancelSchema,
|
|
36832
|
+
execute: async (_toolCallId, args) => {
|
|
36833
|
+
const params = args;
|
|
36834
|
+
const taskId = readStringParam(params, "taskId", { required: true });
|
|
36835
|
+
if (!TASK_ID_RE.test(taskId)) return jsonResult({
|
|
36836
|
+
ok: false,
|
|
36837
|
+
taskId,
|
|
36838
|
+
error: "taskId must be 1–60 chars from [a-zA-Z0-9._-] and must not start with '.' or '-'."
|
|
36839
|
+
});
|
|
36840
|
+
const override = readStringParam(params, "workdir");
|
|
36841
|
+
let workdir;
|
|
36842
|
+
try {
|
|
36843
|
+
workdir = resolveWorkdir(deps, override);
|
|
36844
|
+
} catch (err) {
|
|
36845
|
+
return jsonResult({
|
|
36846
|
+
ok: false,
|
|
36847
|
+
taskId,
|
|
36848
|
+
error: err instanceof Error ? err.message : String(err)
|
|
36849
|
+
});
|
|
36850
|
+
}
|
|
36851
|
+
const signalRaw = readStringParam(params, "signal");
|
|
36852
|
+
let signal;
|
|
36853
|
+
try {
|
|
36854
|
+
signal = normaliseSignal(signalRaw);
|
|
36855
|
+
} catch (err) {
|
|
36856
|
+
return jsonResult({
|
|
36857
|
+
ok: false,
|
|
36858
|
+
taskId,
|
|
36859
|
+
error: err instanceof Error ? err.message : String(err)
|
|
36860
|
+
});
|
|
36861
|
+
}
|
|
36862
|
+
const pidPath = path.join(workdir, `${TASK_FILE_PREFIX}${taskId}.pid`);
|
|
36863
|
+
let pidText;
|
|
36864
|
+
try {
|
|
36865
|
+
pidText = (await fs.promises.readFile(pidPath, "utf8")).trim();
|
|
36866
|
+
} catch (err) {
|
|
36867
|
+
if (err.code === "ENOENT") return jsonResult({
|
|
36868
|
+
ok: false,
|
|
36869
|
+
taskId,
|
|
36870
|
+
error: `no pid file at ${pidPath} — task is unknown or already cleaned up`
|
|
36871
|
+
});
|
|
36872
|
+
return jsonResult({
|
|
36873
|
+
ok: false,
|
|
36874
|
+
taskId,
|
|
36875
|
+
error: err instanceof Error ? err.message : String(err)
|
|
36876
|
+
});
|
|
36877
|
+
}
|
|
36878
|
+
const pid = Number.parseInt(pidText, 10);
|
|
36879
|
+
if (!Number.isFinite(pid) || pid <= 0) return jsonResult({
|
|
36880
|
+
ok: false,
|
|
36881
|
+
taskId,
|
|
36882
|
+
error: `pid file at ${pidPath} did not contain a positive integer`
|
|
36883
|
+
});
|
|
36884
|
+
if (!isPidAlive(pid)) return jsonResult({
|
|
36885
|
+
ok: false,
|
|
36886
|
+
taskId,
|
|
36887
|
+
pid,
|
|
36888
|
+
alreadyDead: true,
|
|
36889
|
+
error: "process is no longer running"
|
|
36890
|
+
});
|
|
36891
|
+
try {
|
|
36892
|
+
process.kill(pid, signal);
|
|
36893
|
+
} catch (err) {
|
|
36894
|
+
return jsonResult({
|
|
36895
|
+
ok: false,
|
|
36896
|
+
taskId,
|
|
36897
|
+
pid,
|
|
36898
|
+
sentSignal: signal,
|
|
36899
|
+
error: err instanceof Error ? err.message : String(err)
|
|
36900
|
+
});
|
|
36901
|
+
}
|
|
36902
|
+
return jsonResult({
|
|
36903
|
+
ok: true,
|
|
36904
|
+
taskId,
|
|
36905
|
+
pid,
|
|
36906
|
+
sentSignal: signal
|
|
36907
|
+
});
|
|
36908
|
+
}
|
|
36909
|
+
};
|
|
36910
|
+
}
|
|
36911
|
+
|
|
36664
36912
|
//#endregion
|
|
36665
36913
|
//#region src/agents/tools/tts-tool.ts
|
|
36666
36914
|
const TtsToolSchema = Type.Object({
|
|
@@ -37961,6 +38209,8 @@ function createSymiTools(options) {
|
|
|
37961
38209
|
config: options?.config
|
|
37962
38210
|
}),
|
|
37963
38211
|
createCronTool({ agentSessionKey: options?.agentSessionKey }),
|
|
38212
|
+
createTaskListTool({ workspaceDir }),
|
|
38213
|
+
createTaskCancelTool({ workspaceDir }),
|
|
37964
38214
|
...messageTool ? [messageTool] : [],
|
|
37965
38215
|
createTtsTool({
|
|
37966
38216
|
agentChannel: options?.agentChannel,
|
|
@@ -45761,6 +46011,7 @@ async function resolveDetachScriptPath(params) {
|
|
|
45761
46011
|
return cachedScriptPath;
|
|
45762
46012
|
}
|
|
45763
46013
|
async function buildLongTaskPromptSuffix(params) {
|
|
46014
|
+
if (params.cronEnabled === false) return "";
|
|
45764
46015
|
const scriptPath = await resolveDetachScriptPath(params);
|
|
45765
46016
|
if (!scriptPath) return "";
|
|
45766
46017
|
return "\n\n" + [
|
|
@@ -45772,10 +46023,7 @@ async function buildLongTaskPromptSuffix(params) {
|
|
|
45772
46023
|
" • workdir: absolute path you own (e.g. the agent workspace).",
|
|
45773
46024
|
" • Script spawns under setsid+nohup+disown, writes task-<id>.{pid,cmd,started,log,status} files.",
|
|
45774
46025
|
"- Immediately after detaching, respond to the user with: task id, PID, log file path, your ETA estimate, and that a cron monitor has been scheduled.",
|
|
45775
|
-
"- Register a cron monitor
|
|
45776
|
-
" • schedule: { kind: \"interval\", ms: 180000 } (every 3 minutes; minimum 60000)",
|
|
45777
|
-
" • payload: { kind: \"agent\", sessionTarget: \"isolated\", text: <job prompt> }",
|
|
45778
|
-
" The job prompt must literally contain the task-id, PID, log path, and status path so the future turn has enough context without re-deriving them.",
|
|
46026
|
+
"- Register a cron monitor via the `cron` tool's `add` action. Use the schema documented in that tool's own description for the exact field names — do NOT guess. The monitor should fire roughly every 3 minutes as an isolated agentTurn job, and its message must literally contain the task-id, PID, log path, and status path so the future turn has enough context without re-deriving them.",
|
|
45779
46027
|
"- Safe status read (inside the monitor turn):",
|
|
45780
46028
|
" `status=$(cat \"<workdir>/task-<id>.status\" 2>/dev/null || echo missing)`",
|
|
45781
46029
|
" Possible values: `running pid=<N> started=<ISO>`, `complete rc=<N> ended=<ISO>`, `aborted rc=<N> signal=<TERM|INT|HUP> ended=<ISO>`, or `missing` if the file was cleaned up.",
|
|
@@ -45783,7 +46031,8 @@ async function buildLongTaskPromptSuffix(params) {
|
|
|
45783
46031
|
" • If status begins with `running`: tail -n 20 <log>, post a one-sentence progress line.",
|
|
45784
46032
|
" • If status begins with `complete`: post a final summary with rc and tail, then call cron action=remove on this job id.",
|
|
45785
46033
|
" • If status begins with `aborted`: post a failure summary with signal and tail, then call cron action=remove.",
|
|
45786
|
-
" • Never leave stale monitors running after the task finishes."
|
|
46034
|
+
" • Never leave stale monitors running after the task finishes.",
|
|
46035
|
+
"- Inspecting and killing tasks: use `task_list` to enumerate detached tasks in the workspace (returns id/pid/alive/status/started for each), and `task_cancel` with `taskId` (and optional `signal`, default SIGTERM) to terminate a running task. Prefer these over raw `kill`/`ps` exec calls — they share the detach script's task-id allow-list and report alreadyDead cleanly."
|
|
45787
46036
|
].join("\n");
|
|
45788
46037
|
}
|
|
45789
46038
|
|
|
@@ -46841,7 +47090,8 @@ async function runEmbeddedAttempt(params) {
|
|
|
46841
47090
|
const longTaskSuffix = await buildLongTaskPromptSuffix({
|
|
46842
47091
|
argv1: process.argv[1],
|
|
46843
47092
|
cwd: process.cwd(),
|
|
46844
|
-
moduleUrl: import.meta.url
|
|
47093
|
+
moduleUrl: import.meta.url,
|
|
47094
|
+
cronEnabled: process.env.SYMI_SKIP_CRON !== "1" && params.config?.cron?.enabled !== false
|
|
46845
47095
|
});
|
|
46846
47096
|
const emailCapabilitySuffix = buildEmailCapabilityPromptSuffix();
|
|
46847
47097
|
const systemPromptText = createSystemPromptOverride(appendPrompt + longTaskSuffix + emailCapabilitySuffix + profilePromptSuffix)();
|
|
@@ -61266,7 +61516,7 @@ function isVoiceChannelType(type) {
|
|
|
61266
61516
|
function createDefaultDeps() {
|
|
61267
61517
|
return {
|
|
61268
61518
|
sendMessageWhatsApp: async (...args) => {
|
|
61269
|
-
const { sendMessageWhatsApp } = await import("./web-
|
|
61519
|
+
const { sendMessageWhatsApp } = await import("./web-Wk1ay1eQ.js");
|
|
61270
61520
|
return await sendMessageWhatsApp(...args);
|
|
61271
61521
|
},
|
|
61272
61522
|
sendMessageTelegram: async (...args) => {
|
|
@@ -76546,7 +76796,7 @@ function loadWebLoginQr() {
|
|
|
76546
76796
|
return webLoginQrPromise;
|
|
76547
76797
|
}
|
|
76548
76798
|
function loadWebChannel() {
|
|
76549
|
-
webChannelPromise ??= import("./web-
|
|
76799
|
+
webChannelPromise ??= import("./web-Wk1ay1eQ.js");
|
|
76550
76800
|
return webChannelPromise;
|
|
76551
76801
|
}
|
|
76552
76802
|
function loadWhatsAppActions() {
|
|
@@ -77856,6 +78106,8 @@ const SUBAGENT_TOOL_DENY_ALWAYS = [
|
|
|
77856
78106
|
"whatsapp_login",
|
|
77857
78107
|
"session_status",
|
|
77858
78108
|
"cron",
|
|
78109
|
+
"task_list",
|
|
78110
|
+
"task_cancel",
|
|
77859
78111
|
"memory_search",
|
|
77860
78112
|
"memory_get",
|
|
77861
78113
|
"memory_pin",
|