@symerian/symi 2.6.41 → 2.6.42
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/{agents-B4RNdKQ3.js → agents-DDRDszOI.js} +4 -4
- package/dist/{agents.config-CG2klYOg.js → agents.config-BEVb1Pyx.js} +1 -1
- package/dist/{agents.config-CA31c0kN.js → agents.config-BKCY6F2A.js} +1 -1
- package/dist/{audio-preflight-K-s65jbB.js → audio-preflight-COaFw917.js} +4 -4
- package/dist/{auth-choice-CCGIgXvF.js → auth-choice-BbzReh6k.js} +1 -1
- package/dist/{auth-choice-CiMf3Pjp.js → auth-choice-D2xXwBeN.js} +1 -1
- package/dist/{banner-BNsB_A87.js → banner-DqqRwplt.js} +1 -1
- package/dist/build-info.json +3 -3
- package/dist/bundled/boot-md/handler.js +6 -6
- package/dist/bundled/session-memory/handler.js +6 -6
- package/dist/canvas-host/a2ui/.bundle.hash +1 -1
- package/dist/{channel-options-BMQlkUDX.js → channel-options-DQcpDVCx.js} +1 -1
- package/dist/{channel-options-pAH4A-xX.js → channel-options-DcazVJQf.js} +1 -1
- package/dist/{channel-web-Dwuj48T5.js → channel-web-u5yMYO4j.js} +1 -1
- package/dist/{channels-cli-rmDzxb0W.js → channels-cli-Bog4Kn3X.js} +4 -4
- package/dist/{channels-cli-CuExxB0U.js → channels-cli-C3iJE8eg.js} +4 -4
- package/dist/{chrome-BYOhnxTr.js → chrome-CbA-qnhp.js} +7 -7
- package/dist/{cli-BPGZalMg.js → cli-QybdZdE7.js} +1 -1
- package/dist/{cli-Mcq2pPI0.js → cli-eBtEEHLK.js} +1 -1
- package/dist/{command-registry-BoEw2RzH.js → command-registry-BWnZSpbL.js} +9 -9
- package/dist/{completion-cli-CE9Xqlyx.js → completion-cli-BhJFXaVU.js} +1 -1
- package/dist/{completion-cli-CQVZGJPg.js → completion-cli-CUKm7Hb6.js} +2 -2
- package/dist/{config-cli-BucNvr-c.js → config-cli-B796xZBe.js} +1 -1
- package/dist/{config-cli-mU_ckD4l.js → config-cli-CjnQyv45.js} +1 -1
- package/dist/{configure-CDOF87Fk.js → configure-D3wIQ0yI.js} +3 -3
- package/dist/{configure-CxnBcN95.js → configure-DUqT7Dyn.js} +3 -3
- package/dist/{deliver-C1HRkzPJ.js → deliver-C7NePF9Z.js} +1 -1
- package/dist/{doctor-completion-CoftKlUX.js → doctor-completion-D3oUNFQM.js} +1 -1
- package/dist/{doctor-completion-CHF_TwGQ.js → doctor-completion-DBE1IVKj.js} +1 -1
- package/dist/entry.js +1 -1
- package/dist/extensionAPI.js +1 -1
- package/dist/{gateway-cli-SNaqDM7f.js → gateway-cli-BguO9yV4.js} +11 -10
- package/dist/{gateway-cli-G7fiXsQ6.js → gateway-cli-Dc1RT_b9.js} +11 -10
- package/dist/{glass-ui-ws-CF0__vuO.js → glass-ui-ws-D0UYleBF.js} +7 -7
- package/dist/{glass-ui-ws-he25wGFt.js → glass-ui-ws-DoIZyE9O.js} +7 -7
- package/dist/{health-en2N_Kqc.js → health-D3w4YMlC.js} +1 -1
- package/dist/{health-q7706M36.js → health-cVvZdeDu.js} +1 -1
- package/dist/{hooks-cli-ChQbBpyb.js → hooks-cli-DZIbjfOA.js} +2 -2
- package/dist/{hooks-cli-C4rVaLzZ.js → hooks-cli-te5hzOAB.js} +2 -2
- package/dist/{image-CbyTdMd5.js → image-C3ugMkb5.js} +1 -1
- package/dist/index.js +6 -6
- package/dist/llm-slug-generator.js +6 -6
- package/dist/{models-DOTpfa7b.js → models-BCfPhQ4m.js} +2 -2
- package/dist/{models-cli-CBl45f7R.js → models-cli-BFAtjNIF.js} +2 -2
- package/dist/{models-cli-MJAY_Wg4.js → models-cli-Cj2CwbPw.js} +3 -3
- package/dist/{onboard-Bx02XPb1.js → onboard-BMq8qc1m.js} +2 -2
- package/dist/{onboard-DQdGJ1lE.js → onboard-VcdBF5TB.js} +2 -2
- package/dist/{onboard-channels-Ct2eNYUC.js → onboard-channels-B5wgcffj.js} +1 -1
- package/dist/{onboard-channels-Bp89ZT6Q.js → onboard-channels-CiOun4k1.js} +1 -1
- package/dist/{onboarding-DxUcsrKV.js → onboarding-CGNpTyg2.js} +3 -3
- package/dist/{onboarding-Dnn_0VTy.js → onboarding-Dp7p6zKa.js} +3 -3
- package/dist/{onboarding.finalize-Dwr-jEtL.js → onboarding.finalize-B6DOu8vp.js} +5 -5
- package/dist/{onboarding.finalize-1kzzMLFM.js → onboarding.finalize-CrsE5P43.js} +6 -6
- package/dist/{pi-embedded-BfEg6Wwb.js → pi-embedded-DQe8vBwU.js} +40 -3
- package/dist/{pi-embedded-helpers-GaCyI2oH.js → pi-embedded-helpers-BgRcgoC9.js} +4 -4
- package/dist/{plugin-registry-BMFEJ4FA.js → plugin-registry-BzIbwU3K.js} +1 -1
- package/dist/{plugin-registry-wAQeBSeD.js → plugin-registry-D3TUplW8.js} +1 -1
- package/dist/plugin-sdk/agents/pi-embedded-runner/long-task-prompt.d.ts +5 -0
- package/dist/plugin-sdk/{channel-web-Ba27v-Om.js → channel-web-B6m8UOCl.js} +1 -1
- package/dist/plugin-sdk/index.js +2 -2
- package/dist/plugin-sdk/{reply-Bok_WQGW.js → reply-CGoJQT_s.js} +40 -3
- package/dist/plugin-sdk/{web-BoOAa0Xn.js → web-CJjSOTnI.js} +2 -2
- package/dist/{plugins-cli-DoJbbST7.js → plugins-cli-BD1Jb2Ml.js} +2 -2
- package/dist/{plugins-cli-B36YKKla.js → plugins-cli-DFyRjAtJ.js} +2 -2
- package/dist/{program-context-Y4KnAKNT.js → program-context-45vPEw2G.js} +17 -17
- package/dist/{program-4f7W2RMs.js → program-qGm2M9PG.js} +7 -7
- package/dist/{prompt-select-styled-D0sLJ4TD.js → prompt-select-styled-DRIS9jSv.js} +4 -4
- package/dist/{prompt-select-styled-Dql_0SI0.js → prompt-select-styled-DRraJGwA.js} +4 -4
- package/dist/{provider-auth-helpers-GSv3namf.js → provider-auth-helpers-BNOWsjW5.js} +1 -1
- package/dist/{provider-auth-helpers-CJbHC_mv.js → provider-auth-helpers-BREVjR7R.js} +1 -1
- package/dist/{push-apns-sxB8QxSj.js → push-apns-CObVeJLC.js} +1 -1
- package/dist/{push-apns-giplY7u-.js → push-apns-CYC70eKy.js} +1 -1
- package/dist/{pw-ai-pQoxTh-a.js → pw-ai--LDjnyuN.js} +1 -1
- package/dist/{register.agent-vd2BSsyE.js → register.agent-DRrHvYcz.js} +5 -5
- package/dist/{register.agent-_2tVQLMK.js → register.agent-DzzY8jON.js} +6 -6
- package/dist/{register.configure-D-XV6_Nb.js → register.configure-BxtTIFTa.js} +6 -6
- package/dist/{register.configure-BVKwTrz8.js → register.configure-DlXkwkNR.js} +6 -6
- package/dist/{register.maintenance-XySU31jf.js → register.maintenance-CXLXouZV.js} +7 -7
- package/dist/{register.maintenance-BqYR2fop.js → register.maintenance-LEf8Q_5p.js} +8 -8
- package/dist/{register.message-CCfWNWs3.js → register.message-C4ifV9vG.js} +2 -2
- package/dist/{register.message-DOyREWdG.js → register.message-DsPa-xHV.js} +2 -2
- package/dist/{register.onboard-zmF-euog.js → register.onboard-CrY4PxLP.js} +4 -4
- package/dist/{register.onboard-Dy_D_uMj.js → register.onboard-DLRPa_4B.js} +4 -4
- package/dist/{register.setup-cE7gPp2m.js → register.setup-By37g1vN.js} +4 -4
- package/dist/{register.setup-DiGPa1Fw.js → register.setup-fBG_dJfi.js} +4 -4
- package/dist/{register.status-health-sessions-DWKL1rkz.js → register.status-health-sessions-Ckw86-gn.js} +3 -3
- package/dist/{register.status-health-sessions-ksv1WnIs.js → register.status-health-sessions-DG7KGnD0.js} +3 -3
- package/dist/{register.subclis-Crt_IYK0.js → register.subclis-C_xKLugM.js} +9 -9
- package/dist/{reply-CjYJHt_H.js → reply-DyjXROKp.js} +40 -3
- package/dist/{run-main-bOlPbL7t.js → run-main-Cg3ecTbO.js} +14 -14
- package/dist/{runner-B0AbN8wV.js → runner-cJ3m-bxK.js} +1 -1
- package/dist/{server-methods-CiwWwj6K.js → server-methods-CW8eFTGD.js} +7 -7
- package/dist/{server-methods-VimYvcpY.js → server-methods-CWcLut3F.js} +7 -7
- package/dist/{server-node-events-CHmLiFNV.js → server-node-events-C2h9OPo7.js} +2 -2
- package/dist/{server-node-events-DYC45lKC.js → server-node-events-CDB0u8PP.js} +2 -2
- package/dist/{status-CA5wJHMj.js → status-B2Qt-5kL.js} +1 -1
- package/dist/{status-Dt_MXoNa.js → status-CMx3GAax.js} +1 -1
- package/dist/{status-DxhtJtzE.js → status-DfPfMVNZ.js} +2 -2
- package/dist/{status-DEpM69Pd.js → status-ZPW5EACm.js} +2 -2
- package/dist/{subagent-registry-BPwn3Qm7.js → subagent-registry-DQHg3jUV.js} +40 -3
- package/dist/{unified-runner-CVkyzT1I.js → unified-runner-DvOFqcrw.js} +54 -17
- package/dist/{update-cli-Dh_dfprI.js → update-cli-DBasZeVl.js} +8 -8
- package/dist/{update-cli-Dv4c5Gup.js → update-cli-Df9rh_aN.js} +7 -7
- package/dist/{update-runner-MMFI1UZ0.js → update-runner-BRKFzAwV.js} +1 -1
- package/dist/{update-runner-CG_kbbGR.js → update-runner-DVa6cMqp.js} +1 -1
- package/dist/{web-CJk-lv93.js → web-CGh5tw__.js} +1 -1
- package/dist/{web-BUc-ts5b.js → web-Cw3bFAiP.js} +6 -6
- package/dist/{web-DCBOD-Vj.js → web-Dd05xbUr.js} +1 -1
- package/dist/{web-CfVd3Mhp.js → web-KiuDkd0x.js} +2 -2
- 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 +6 -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 +6 -0
- package/extensions/msteams/package.json +1 -1
- package/extensions/nextcloud-talk/package.json +1 -1
- package/extensions/nostr/CHANGELOG.md +6 -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 +6 -0
- package/extensions/twitch/package.json +1 -1
- package/extensions/voice-call/CHANGELOG.md +6 -0
- package/extensions/voice-call/package.json +1 -1
- package/extensions/whatsapp/package.json +1 -1
- package/extensions/zalo/CHANGELOG.md +6 -0
- package/extensions/zalo/package.json +1 -1
- package/extensions/zalouser/CHANGELOG.md +6 -0
- package/extensions/zalouser/package.json +1 -1
- package/package.json +1 -1
- package/skills/long-task/SKILL.md +57 -0
- package/skills/long-task/scripts/detach-task.sh +58 -0
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: long-task
|
|
3
|
+
description: Run long operations (deep scans, brute-forces, big builds, exhaustive enumeration) without hitting the agent-turn timeout. Detaches the command with setsid+nohup and schedules a cron monitor that polls status every 2-3 minutes. Use when a single exec call may exceed 15 minutes (deep nmap `-sS -sV -O` on /24 or larger, full hydra/gobuster/ffuf/masscan sweeps, multi-hour builds).
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Long-Running Task — detach + cron monitor pattern
|
|
7
|
+
|
|
8
|
+
Deep scans (`nmap -sS -sV -O` on a /24, comprehensive `-sC` sweeps, full TCP/UDP, long brute-forces, big builds) routinely run 25–60 minutes. The agent-turn timeout (`agents.defaults.timeoutSeconds`, default 1800 = 30 min) is a hard ceiling, and a foreground-blocked exec tool call will SIGTERM the subprocess when the turn ends. **Do not foreground long tasks.** Use this two-part pattern instead.
|
|
9
|
+
|
|
10
|
+
## Part 1 — Detach the task
|
|
11
|
+
|
|
12
|
+
Launch with the helper script bundled with this skill:
|
|
13
|
+
|
|
14
|
+
<skill-dir>/scripts/detach-task.sh <task-id> <workdir> <command...>
|
|
15
|
+
|
|
16
|
+
Where:
|
|
17
|
+
|
|
18
|
+
- `<task-id>` is a short identifier you pick (e.g. `scan-192-168-10`)
|
|
19
|
+
- `<workdir>` is a directory the state files will be written into (agent workspace is fine)
|
|
20
|
+
- `<command...>` is the literal command you want to run
|
|
21
|
+
|
|
22
|
+
The script creates in `<workdir>`:
|
|
23
|
+
|
|
24
|
+
- `task-<id>.pid` — PID of the detached process
|
|
25
|
+
- `task-<id>.cmd` — the literal command line
|
|
26
|
+
- `task-<id>.started` — ISO-8601 start timestamp
|
|
27
|
+
- `task-<id>.log` — merged stdout/stderr
|
|
28
|
+
- `task-<id>.status` — `running` while alive, `complete rc=<N>` after exit
|
|
29
|
+
|
|
30
|
+
After running, **return control to the user immediately** with: task id, PID, log path, your ETA, and a note that a cron monitor will be scheduled.
|
|
31
|
+
|
|
32
|
+
## Part 2 — Schedule the cron monitor
|
|
33
|
+
|
|
34
|
+
Use the `cron` tool with `action: add`. Schedule every 2–3 minutes. The job prompt must be self-contained — include the task-id, PID, log path, and status path literally, since a future agent turn will receive only that prompt.
|
|
35
|
+
|
|
36
|
+
Example job prompt:
|
|
37
|
+
|
|
38
|
+
> Check if PID <pid> is alive (`kill -0 <pid> 2>/dev/null`).
|
|
39
|
+
> If alive: tail -n 20 <log-path>, post one-sentence progress update.
|
|
40
|
+
> If not alive: read <status-path> and tail <log-path>, post final summary, then call the cron tool with `action: remove, id: <this-cron-id>` to clean up.
|
|
41
|
+
|
|
42
|
+
## Part 3 — Cleanup
|
|
43
|
+
|
|
44
|
+
The monitor cron job is responsible for removing itself when it detects `status=complete`. Do not leave stale monitors running.
|
|
45
|
+
|
|
46
|
+
## Why this works
|
|
47
|
+
|
|
48
|
+
- `setsid` puts the subprocess in a new session — it survives SIGHUP.
|
|
49
|
+
- `nohup` ignores SIGHUP directly as belt-and-braces.
|
|
50
|
+
- The outer shell exits immediately, so the agent-turn abort (which kills the process tree of the shell the agent spawned) never reaches the detached task — it's no longer a descendant.
|
|
51
|
+
- Each agent turn stays short (initial detach <1 min, each cron check <30 sec, final summary <1 min), so the default 1800s ceiling never fires.
|
|
52
|
+
|
|
53
|
+
## When NOT to use this pattern
|
|
54
|
+
|
|
55
|
+
- Short scans (single host, small port range) that complete in under 10 minutes — foreground exec is simpler.
|
|
56
|
+
- Interactive commands that need a TTY — the script closes stdin and redirects stdout/stderr.
|
|
57
|
+
- Tasks where you need to stream output back to the user in real time — the cron-monitor pattern polls at 2–3 min intervals, not live.
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# detach-task.sh — launch a long-running command fully detached from the
|
|
3
|
+
# calling agent turn, so it survives the agent-turn timeout (default 30 min).
|
|
4
|
+
#
|
|
5
|
+
# Usage:
|
|
6
|
+
# detach-task.sh <task-id> <workdir> <command...>
|
|
7
|
+
#
|
|
8
|
+
# Creates in <workdir>:
|
|
9
|
+
# task-<id>.pid — PID of the detached process
|
|
10
|
+
# task-<id>.cmd — literal command line (for future agent turns to see)
|
|
11
|
+
# task-<id>.started — ISO-8601 start timestamp
|
|
12
|
+
# task-<id>.log — combined stdout + stderr (grows as task runs)
|
|
13
|
+
# task-<id>.status — "running" while alive, "complete rc=<N>" after exit
|
|
14
|
+
#
|
|
15
|
+
# Exit code: 0 on successful spawn (PID recorded), 1 on invalid args.
|
|
16
|
+
#
|
|
17
|
+
# Design notes:
|
|
18
|
+
# - setsid + nohup + disown: triple-armor against SIGHUP when the parent
|
|
19
|
+
# shell exits. The subprocess gets its own session.
|
|
20
|
+
# - stdin closed, stdout/stderr redirected to the log file. No terminal.
|
|
21
|
+
# - The wrapper shell exits immediately after spawning; does NOT wait.
|
|
22
|
+
# - On process exit, an inner wrapper writes "complete rc=<N>" to the
|
|
23
|
+
# status file so a future agent turn can detect completion without
|
|
24
|
+
# racing with the cron monitor's polling.
|
|
25
|
+
|
|
26
|
+
set -euo pipefail
|
|
27
|
+
|
|
28
|
+
if [[ $# -lt 3 ]]; then
|
|
29
|
+
echo "usage: $0 <task-id> <workdir> <command...>" >&2
|
|
30
|
+
exit 1
|
|
31
|
+
fi
|
|
32
|
+
|
|
33
|
+
task_id="$1"
|
|
34
|
+
workdir="$2"
|
|
35
|
+
shift 2
|
|
36
|
+
|
|
37
|
+
mkdir -p "$workdir"
|
|
38
|
+
pid_file="$workdir/task-${task_id}.pid"
|
|
39
|
+
cmd_file="$workdir/task-${task_id}.cmd"
|
|
40
|
+
started_file="$workdir/task-${task_id}.started"
|
|
41
|
+
log_file="$workdir/task-${task_id}.log"
|
|
42
|
+
status_file="$workdir/task-${task_id}.status"
|
|
43
|
+
|
|
44
|
+
printf '%s\n' "$*" > "$cmd_file"
|
|
45
|
+
date -u -Iseconds > "$started_file"
|
|
46
|
+
echo "running" > "$status_file"
|
|
47
|
+
|
|
48
|
+
setsid nohup bash -c "
|
|
49
|
+
\"\$@\" > '$log_file' 2>&1
|
|
50
|
+
rc=\$?
|
|
51
|
+
echo \"complete rc=\$rc\" > '$status_file'
|
|
52
|
+
" -- "$@" < /dev/null > /dev/null 2>&1 &
|
|
53
|
+
|
|
54
|
+
pid=$!
|
|
55
|
+
disown "$pid" 2>/dev/null || true
|
|
56
|
+
printf '%d\n' "$pid" > "$pid_file"
|
|
57
|
+
|
|
58
|
+
echo "spawned task=$task_id pid=$pid log=$log_file status=$status_file"
|