@intent-systems/nexus 2026.1.5-3
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/CHANGELOG.md +222 -0
- package/LICENSE +21 -0
- package/README-header.png +0 -0
- package/README.md +462 -0
- package/dist/agents/agent-paths.js +16 -0
- package/dist/agents/agent-scope.js +44 -0
- package/dist/agents/auth-profiles.js +626 -0
- package/dist/agents/bash-process-registry.js +126 -0
- package/dist/agents/bash-tools.js +838 -0
- package/dist/agents/chutes-oauth.js +47 -0
- package/dist/agents/clawdbot-tools.js +62 -0
- package/dist/agents/context.js +34 -0
- package/dist/agents/defaults.js +6 -0
- package/dist/agents/memory-search.js +80 -0
- package/dist/agents/model-auth.js +115 -0
- package/dist/agents/model-catalog.js +55 -0
- package/dist/agents/model-fallback.js +210 -0
- package/dist/agents/model-scan.js +263 -0
- package/dist/agents/model-selection.js +152 -0
- package/dist/agents/models-config.js +171 -0
- package/dist/agents/nexus-tools.js +46 -0
- package/dist/agents/pi-embedded-block-chunker.js +188 -0
- package/dist/agents/pi-embedded-helpers.js +139 -0
- package/dist/agents/pi-embedded-runner.js +932 -0
- package/dist/agents/pi-embedded-subscribe.js +541 -0
- package/dist/agents/pi-embedded-utils.js +20 -0
- package/dist/agents/pi-embedded.js +1 -0
- package/dist/agents/pi-extensions/compaction-safeguard.js +140 -0
- package/dist/agents/pi-tool-definition-adapter.js +17 -0
- package/dist/agents/pi-tools.js +510 -0
- package/dist/agents/pi-tools.schema.js +358 -0
- package/dist/agents/sandbox-paths.js +68 -0
- package/dist/agents/sandbox.js +667 -0
- package/dist/agents/shell-utils.js +53 -0
- package/dist/agents/skill-runner.js +224 -0
- package/dist/agents/skill-state.js +164 -0
- package/dist/agents/skill-tools.js +191 -0
- package/dist/agents/skill-usage.js +43 -0
- package/dist/agents/skills-install.js +244 -0
- package/dist/agents/skills-status.js +157 -0
- package/dist/agents/skills.js +472 -0
- package/dist/agents/subagent-registry.js +321 -0
- package/dist/agents/subagent-registry.store.js +47 -0
- package/dist/agents/system-prompt.js +179 -0
- package/dist/agents/timeout.js +26 -0
- package/dist/agents/tool-display.js +155 -0
- package/dist/agents/tool-display.json +236 -0
- package/dist/agents/tool-images.js +138 -0
- package/dist/agents/tool-policy.js +87 -0
- package/dist/agents/tools/agent-step.js +41 -0
- package/dist/agents/tools/browser-tool.js +295 -0
- package/dist/agents/tools/canvas-tool.js +193 -0
- package/dist/agents/tools/common.js +88 -0
- package/dist/agents/tools/cron-tool.js +141 -0
- package/dist/agents/tools/discord-actions-guild.js +186 -0
- package/dist/agents/tools/discord-actions-messaging.js +313 -0
- package/dist/agents/tools/discord-actions-moderation.js +70 -0
- package/dist/agents/tools/discord-actions.js +56 -0
- package/dist/agents/tools/discord-schema.js +199 -0
- package/dist/agents/tools/discord-tool.js +16 -0
- package/dist/agents/tools/gateway-tool.js +46 -0
- package/dist/agents/tools/gateway.js +28 -0
- package/dist/agents/tools/image-tool.js +140 -0
- package/dist/agents/tools/memory-tool.js +92 -0
- package/dist/agents/tools/nodes-tool.js +413 -0
- package/dist/agents/tools/nodes-utils.js +92 -0
- package/dist/agents/tools/sessions-announce-target.js +35 -0
- package/dist/agents/tools/sessions-helpers.js +88 -0
- package/dist/agents/tools/sessions-history-tool.js +137 -0
- package/dist/agents/tools/sessions-list-tool.js +196 -0
- package/dist/agents/tools/sessions-send-helpers.js +103 -0
- package/dist/agents/tools/sessions-send-tool.js +371 -0
- package/dist/agents/tools/sessions-spawn-tool.js +319 -0
- package/dist/agents/tools/slack-actions.js +129 -0
- package/dist/agents/tools/slack-schema.js +59 -0
- package/dist/agents/tools/slack-tool.js +16 -0
- package/dist/agents/tools/telegram-actions.js +159 -0
- package/dist/agents/tools/telegram-schema.js +28 -0
- package/dist/agents/tools/telegram-tool.js +16 -0
- package/dist/agents/tools/whatsapp-login-tool.js +63 -0
- package/dist/agents/usage.js +58 -0
- package/dist/agents/workspace.js +264 -0
- package/dist/auto-reply/chunk.js +177 -0
- package/dist/auto-reply/command-auth.js +44 -0
- package/dist/auto-reply/command-detection.js +22 -0
- package/dist/auto-reply/envelope.js +30 -0
- package/dist/auto-reply/group-activation.js +20 -0
- package/dist/auto-reply/heartbeat.js +58 -0
- package/dist/auto-reply/model.js +22 -0
- package/dist/auto-reply/reply/abort.js +14 -0
- package/dist/auto-reply/reply/agent-runner.js +426 -0
- package/dist/auto-reply/reply/bash-command.js +314 -0
- package/dist/auto-reply/reply/block-streaming.js +34 -0
- package/dist/auto-reply/reply/body.js +29 -0
- package/dist/auto-reply/reply/commands.js +332 -0
- package/dist/auto-reply/reply/directive-handling.js +626 -0
- package/dist/auto-reply/reply/directives.js +59 -0
- package/dist/auto-reply/reply/dispatch-from-config.js +23 -0
- package/dist/auto-reply/reply/followup-runner.js +181 -0
- package/dist/auto-reply/reply/groups.js +152 -0
- package/dist/auto-reply/reply/mentions.js +64 -0
- package/dist/auto-reply/reply/model-selection.js +209 -0
- package/dist/auto-reply/reply/queue.js +399 -0
- package/dist/auto-reply/reply/reply-dispatcher.js +68 -0
- package/dist/auto-reply/reply/reply-tags.js +26 -0
- package/dist/auto-reply/reply/session-updates.js +103 -0
- package/dist/auto-reply/reply/session.js +169 -0
- package/dist/auto-reply/reply/typing.js +125 -0
- package/dist/auto-reply/reply.js +655 -0
- package/dist/auto-reply/send-policy.js +28 -0
- package/dist/auto-reply/status.js +197 -0
- package/dist/auto-reply/templating.js +9 -0
- package/dist/auto-reply/thinking.js +49 -0
- package/dist/auto-reply/tokens.js +2 -0
- package/dist/auto-reply/tool-meta.js +74 -0
- package/dist/auto-reply/transcription.js +57 -0
- package/dist/auto-reply/types.js +1 -0
- package/dist/browser/bridge-server.js +37 -0
- package/dist/browser/cdp.js +382 -0
- package/dist/browser/chrome.js +432 -0
- package/dist/browser/client-actions-core.js +67 -0
- package/dist/browser/client-actions-observe.js +24 -0
- package/dist/browser/client-actions-types.js +1 -0
- package/dist/browser/client-actions.js +3 -0
- package/dist/browser/client-fetch.js +43 -0
- package/dist/browser/client.js +105 -0
- package/dist/browser/config.js +155 -0
- package/dist/browser/constants.js +5 -0
- package/dist/browser/profiles-service.js +124 -0
- package/dist/browser/profiles.js +96 -0
- package/dist/browser/pw-ai.js +2 -0
- package/dist/browser/pw-session.js +144 -0
- package/dist/browser/pw-tools-core.js +363 -0
- package/dist/browser/routes/agent.js +535 -0
- package/dist/browser/routes/basic.js +155 -0
- package/dist/browser/routes/index.js +8 -0
- package/dist/browser/routes/tabs.js +105 -0
- package/dist/browser/routes/utils.js +62 -0
- package/dist/browser/screenshot.js +40 -0
- package/dist/browser/server-context.js +377 -0
- package/dist/browser/server.js +81 -0
- package/dist/browser/target-id.js +18 -0
- package/dist/browser/trash.js +21 -0
- package/dist/canvas-host/a2ui/a2ui.bundle.js +17768 -0
- package/dist/canvas-host/a2ui/index.html +246 -0
- package/dist/canvas-host/a2ui.js +187 -0
- package/dist/canvas-host/server.js +382 -0
- package/dist/channel-web.js +8 -0
- package/dist/cli/browser-cli-actions-input.js +459 -0
- package/dist/cli/browser-cli-actions-observe.js +56 -0
- package/dist/cli/browser-cli-examples.js +31 -0
- package/dist/cli/browser-cli-inspect.js +97 -0
- package/dist/cli/browser-cli-manage.js +286 -0
- package/dist/cli/browser-cli-shared.js +1 -0
- package/dist/cli/browser-cli.js +26 -0
- package/dist/cli/canvas-cli.js +416 -0
- package/dist/cli/cloud-cli.js +336 -0
- package/dist/cli/credential-cli.js +227 -0
- package/dist/cli/cron-cli.js +454 -0
- package/dist/cli/deps.js +17 -0
- package/dist/cli/dns-cli.js +180 -0
- package/dist/cli/gateway-cli.js +665 -0
- package/dist/cli/gateway-rpc.js +20 -0
- package/dist/cli/hooks-cli.js +135 -0
- package/dist/cli/memory-cli.js +101 -0
- package/dist/cli/models-cli.js +248 -0
- package/dist/cli/nodes-camera.js +57 -0
- package/dist/cli/nodes-canvas.js +26 -0
- package/dist/cli/nodes-cli.js +946 -0
- package/dist/cli/nodes-screen.js +37 -0
- package/dist/cli/pairing-cli.js +100 -0
- package/dist/cli/parse-duration.js +20 -0
- package/dist/cli/plugins-cli.js +158 -0
- package/dist/cli/ports.js +97 -0
- package/dist/cli/profile.js +81 -0
- package/dist/cli/program.js +162 -0
- package/dist/cli/prompt.js +19 -0
- package/dist/cli/run-main.js +48 -0
- package/dist/cli/skills-cli.js +132 -0
- package/dist/cli/skills-hub-cli.js +1093 -0
- package/dist/cli/telegram-cli.js +56 -0
- package/dist/cli/tool-connector-cli.js +118 -0
- package/dist/cli/tui-cli.js +35 -0
- package/dist/cli/upstream-sync-cli.js +2833 -0
- package/dist/cli/usage-cli.js +24 -0
- package/dist/cli/wait.js +8 -0
- package/dist/commands/agent-via-gateway.js +115 -0
- package/dist/commands/agent.js +665 -0
- package/dist/commands/antigravity-oauth.js +327 -0
- package/dist/commands/auth-choice-options.js +80 -0
- package/dist/commands/auth-choice.js +134 -0
- package/dist/commands/auth-token.js +31 -0
- package/dist/commands/bootstrap-preset.js +214 -0
- package/dist/commands/capabilities.js +36 -0
- package/dist/commands/chutes-oauth.js +144 -0
- package/dist/commands/claude-md.js +137 -0
- package/dist/commands/config-view.js +11 -0
- package/dist/commands/configure.js +648 -0
- package/dist/commands/credential.js +236 -0
- package/dist/commands/cursor-rules.js +230 -0
- package/dist/commands/doctor-state-migrations.js +358 -0
- package/dist/commands/doctor-ui.js +113 -0
- package/dist/commands/doctor.js +673 -0
- package/dist/commands/health.js +112 -0
- package/dist/commands/identity.js +54 -0
- package/dist/commands/init.js +167 -0
- package/dist/commands/models/aliases.js +85 -0
- package/dist/commands/models/fallbacks.js +123 -0
- package/dist/commands/models/image-fallbacks.js +123 -0
- package/dist/commands/models/list.js +347 -0
- package/dist/commands/models/scan.js +271 -0
- package/dist/commands/models/set-image.js +27 -0
- package/dist/commands/models/set.js +27 -0
- package/dist/commands/models/shared.js +73 -0
- package/dist/commands/models.js +7 -0
- package/dist/commands/onboard-auth.js +101 -0
- package/dist/commands/onboard-channels.js +814 -0
- package/dist/commands/onboard-eve-identity.js +98 -0
- package/dist/commands/onboard-github.js +153 -0
- package/dist/commands/onboard-helpers.js +303 -0
- package/dist/commands/onboard-interactive.js +17 -0
- package/dist/commands/onboard-non-interactive.js +228 -0
- package/dist/commands/onboard-providers.js +829 -0
- package/dist/commands/onboard-quickstart.js +185 -0
- package/dist/commands/onboard-remote.js +120 -0
- package/dist/commands/onboard-skills.js +148 -0
- package/dist/commands/onboard-types.js +1 -0
- package/dist/commands/onboard.js +19 -0
- package/dist/commands/openai-codex-model-default.js +38 -0
- package/dist/commands/poll.js +64 -0
- package/dist/commands/quest.js +27 -0
- package/dist/commands/reset.js +61 -0
- package/dist/commands/send.js +124 -0
- package/dist/commands/sessions-ingest.js +359 -0
- package/dist/commands/sessions.js +212 -0
- package/dist/commands/setup.js +59 -0
- package/dist/commands/signal-install.js +135 -0
- package/dist/commands/skills-manifest.js +235 -0
- package/dist/commands/status.js +139 -0
- package/dist/commands/suggestions.js +54 -0
- package/dist/commands/systemd-linger.js +71 -0
- package/dist/commands/update.js +16 -0
- package/dist/commands/usage-upload.js +27 -0
- package/dist/config/config.js +6 -0
- package/dist/config/defaults.js +140 -0
- package/dist/config/group-policy.js +49 -0
- package/dist/config/includes.js +183 -0
- package/dist/config/io.js +188 -0
- package/dist/config/legacy-migrate.js +13 -0
- package/dist/config/legacy.js +425 -0
- package/dist/config/paths.js +82 -0
- package/dist/config/port-defaults.js +32 -0
- package/dist/config/schema.js +173 -0
- package/dist/config/sessions.js +611 -0
- package/dist/config/talk.js +31 -0
- package/dist/config/types.js +1 -0
- package/dist/config/validation.js +29 -0
- package/dist/config/zod-schema.js +1110 -0
- package/dist/control-ui/assets/index-D8Q5AI4D.js +2393 -0
- package/dist/control-ui/assets/index-D8Q5AI4D.js.map +1 -0
- package/dist/control-ui/assets/index-g06q5Xc3.css +1 -0
- package/dist/control-ui/favicon.ico +0 -0
- package/dist/control-ui/index.html +16 -0
- package/dist/cron/isolated-agent.js +529 -0
- package/dist/cron/normalize.js +73 -0
- package/dist/cron/parse.js +24 -0
- package/dist/cron/run-log.js +72 -0
- package/dist/cron/schedule.js +24 -0
- package/dist/cron/service.js +471 -0
- package/dist/cron/store.js +43 -0
- package/dist/cron/types.js +1 -0
- package/dist/daemon/constants.js +10 -0
- package/dist/daemon/launchd.js +295 -0
- package/dist/daemon/legacy.js +63 -0
- package/dist/daemon/program-args.js +141 -0
- package/dist/daemon/schtasks.js +269 -0
- package/dist/daemon/service.js +69 -0
- package/dist/daemon/systemd.js +332 -0
- package/dist/discord/index.js +2 -0
- package/dist/discord/monitor.js +1089 -0
- package/dist/discord/probe.js +54 -0
- package/dist/discord/send.js +652 -0
- package/dist/discord/token.js +8 -0
- package/dist/entry.js +16 -0
- package/dist/gateway/auth.js +121 -0
- package/dist/gateway/call.js +103 -0
- package/dist/gateway/chat-attachments.js +41 -0
- package/dist/gateway/client.js +180 -0
- package/dist/gateway/config-reload.js +274 -0
- package/dist/gateway/control-ui.js +184 -0
- package/dist/gateway/hooks-mapping.js +282 -0
- package/dist/gateway/hooks.js +168 -0
- package/dist/gateway/net.js +29 -0
- package/dist/gateway/protocol/index.js +62 -0
- package/dist/gateway/protocol/schema.js +577 -0
- package/dist/gateway/server-bridge-subscriptions.js +93 -0
- package/dist/gateway/server-bridge.js +1066 -0
- package/dist/gateway/server-browser.js +11 -0
- package/dist/gateway/server-channels.js +680 -0
- package/dist/gateway/server-chat.js +159 -0
- package/dist/gateway/server-constants.js +8 -0
- package/dist/gateway/server-discovery.js +62 -0
- package/dist/gateway/server-http.js +165 -0
- package/dist/gateway/server-methods/agent-job.js +114 -0
- package/dist/gateway/server-methods/agent.js +254 -0
- package/dist/gateway/server-methods/channels.js +239 -0
- package/dist/gateway/server-methods/chat.js +207 -0
- package/dist/gateway/server-methods/config.js +50 -0
- package/dist/gateway/server-methods/connect.js +6 -0
- package/dist/gateway/server-methods/cron.js +89 -0
- package/dist/gateway/server-methods/health.js +28 -0
- package/dist/gateway/server-methods/models.js +16 -0
- package/dist/gateway/server-methods/nodes.js +294 -0
- package/dist/gateway/server-methods/providers.js +257 -0
- package/dist/gateway/server-methods/send.js +254 -0
- package/dist/gateway/server-methods/sessions.js +382 -0
- package/dist/gateway/server-methods/skills.js +83 -0
- package/dist/gateway/server-methods/system.js +118 -0
- package/dist/gateway/server-methods/talk.js +22 -0
- package/dist/gateway/server-methods/types.js +1 -0
- package/dist/gateway/server-methods/voicewake.js +30 -0
- package/dist/gateway/server-methods/web.js +81 -0
- package/dist/gateway/server-methods/wizard.js +100 -0
- package/dist/gateway/server-methods.js +53 -0
- package/dist/gateway/server-providers.js +687 -0
- package/dist/gateway/server-shared.js +1 -0
- package/dist/gateway/server-utils.js +35 -0
- package/dist/gateway/server.js +1478 -0
- package/dist/gateway/session-utils.js +355 -0
- package/dist/gateway/ws-log.js +343 -0
- package/dist/gateway/ws-logging.js +8 -0
- package/dist/globals.js +41 -0
- package/dist/hooks/gmail-ops.js +236 -0
- package/dist/hooks/gmail-setup-utils.js +278 -0
- package/dist/hooks/gmail-watcher.js +190 -0
- package/dist/hooks/gmail.js +177 -0
- package/dist/imessage/client.js +165 -0
- package/dist/imessage/index.js +3 -0
- package/dist/imessage/monitor.js +365 -0
- package/dist/imessage/probe.js +26 -0
- package/dist/imessage/send.js +83 -0
- package/dist/imessage/targets.js +176 -0
- package/dist/index.js +55 -0
- package/dist/infra/agent-events.js +46 -0
- package/dist/infra/binaries.js +9 -0
- package/dist/infra/bonjour-discovery.js +163 -0
- package/dist/infra/bonjour.js +200 -0
- package/dist/infra/bridge/server.js +564 -0
- package/dist/infra/canvas-host-url.js +54 -0
- package/dist/infra/channel-summary.js +78 -0
- package/dist/infra/control-ui-assets.js +112 -0
- package/dist/infra/dotenv.js +15 -0
- package/dist/infra/env.js +8 -0
- package/dist/infra/errors.js +28 -0
- package/dist/infra/event-log.js +251 -0
- package/dist/infra/gateway-lock.js +8 -0
- package/dist/infra/git-commit.js +91 -0
- package/dist/infra/heartbeat-events.js +21 -0
- package/dist/infra/heartbeat-runner.js +458 -0
- package/dist/infra/heartbeat-wake.js +61 -0
- package/dist/infra/is-main.js +37 -0
- package/dist/infra/json-file.js +21 -0
- package/dist/infra/machine-name.js +40 -0
- package/dist/infra/nexus-root.js +56 -0
- package/dist/infra/node-pairing.js +212 -0
- package/dist/infra/path-env.js +93 -0
- package/dist/infra/ports.js +87 -0
- package/dist/infra/provider-summary.js +80 -0
- package/dist/infra/provider-usage.auth.js +189 -0
- package/dist/infra/provider-usage.fetch.claude.js +129 -0
- package/dist/infra/provider-usage.fetch.codex.js +62 -0
- package/dist/infra/provider-usage.fetch.copilot.js +42 -0
- package/dist/infra/provider-usage.fetch.gemini.js +57 -0
- package/dist/infra/provider-usage.fetch.js +6 -0
- package/dist/infra/provider-usage.fetch.minimax.js +214 -0
- package/dist/infra/provider-usage.fetch.shared.js +11 -0
- package/dist/infra/provider-usage.fetch.zai.js +62 -0
- package/dist/infra/provider-usage.format.js +77 -0
- package/dist/infra/provider-usage.js +145 -0
- package/dist/infra/provider-usage.load.js +54 -0
- package/dist/infra/provider-usage.shared.js +19 -0
- package/dist/infra/provider-usage.types.js +1 -0
- package/dist/infra/restart.js +29 -0
- package/dist/infra/retry.js +16 -0
- package/dist/infra/runtime-guard.js +59 -0
- package/dist/infra/shell-env.js +88 -0
- package/dist/infra/system-events.js +71 -0
- package/dist/infra/system-presence.js +217 -0
- package/dist/infra/tailnet.js +46 -0
- package/dist/infra/tailscale.js +149 -0
- package/dist/infra/unhandled-rejections.js +19 -0
- package/dist/infra/usage-suggestions.js +241 -0
- package/dist/infra/usage-upload.js +290 -0
- package/dist/infra/voicewake.js +78 -0
- package/dist/infra/widearea-dns.js +123 -0
- package/dist/infra/ws.js +13 -0
- package/dist/logger.js +52 -0
- package/dist/logging.js +506 -0
- package/dist/macos/gateway-daemon.js +145 -0
- package/dist/macos/relay.js +49 -0
- package/dist/media/constants.js +33 -0
- package/dist/media/host.js +42 -0
- package/dist/media/image-ops.js +119 -0
- package/dist/media/mime.js +123 -0
- package/dist/media/parse.js +83 -0
- package/dist/media/server.js +64 -0
- package/dist/media/store.js +139 -0
- package/dist/polls.js +43 -0
- package/dist/process/command-queue.js +97 -0
- package/dist/process/exec.js +75 -0
- package/dist/provider-web.js +8 -0
- package/dist/providers/github-copilot-auth.js +123 -0
- package/dist/providers/github-copilot-models.js +35 -0
- package/dist/providers/github-copilot-token.js +11 -0
- package/dist/providers/location.js +48 -0
- package/dist/providers/web/index.js +2 -0
- package/dist/runtime.js +8 -0
- package/dist/sessions/level-overrides.js +9 -0
- package/dist/sessions/send-policy.js +68 -0
- package/dist/signal/client.js +134 -0
- package/dist/signal/daemon.js +69 -0
- package/dist/signal/index.js +3 -0
- package/dist/signal/monitor.js +411 -0
- package/dist/signal/probe.js +46 -0
- package/dist/signal/send.js +91 -0
- package/dist/slack/actions.js +97 -0
- package/dist/slack/index.js +5 -0
- package/dist/slack/monitor.js +1270 -0
- package/dist/slack/probe.js +47 -0
- package/dist/slack/send.js +131 -0
- package/dist/slack/token.js +10 -0
- package/dist/telegram/allowed-updates.js +8 -0
- package/dist/telegram/bot.js +724 -0
- package/dist/telegram/download.js +34 -0
- package/dist/telegram/index.js +4 -0
- package/dist/telegram/monitor.js +47 -0
- package/dist/telegram/pairing-store.js +77 -0
- package/dist/telegram/probe.js +63 -0
- package/dist/telegram/proxy.js +9 -0
- package/dist/telegram/reaction-level.js +45 -0
- package/dist/telegram/send.js +151 -0
- package/dist/telegram/sent-message-cache.js +65 -0
- package/dist/telegram/token.js +30 -0
- package/dist/telegram/update-offset-store.js +61 -0
- package/dist/telegram/webhook-set.js +12 -0
- package/dist/telegram/webhook.js +56 -0
- package/dist/tui/commands.js +87 -0
- package/dist/tui/components/assistant-message.js +16 -0
- package/dist/tui/components/chat-log.js +92 -0
- package/dist/tui/components/custom-editor.js +55 -0
- package/dist/tui/components/selectors.js +8 -0
- package/dist/tui/components/tool-execution.js +111 -0
- package/dist/tui/components/user-message.js +17 -0
- package/dist/tui/gateway-chat.js +140 -0
- package/dist/tui/theme/theme.js +80 -0
- package/dist/tui/tui.js +708 -0
- package/dist/utils.js +153 -0
- package/dist/version.js +18 -0
- package/dist/web/accounts.js +86 -0
- package/dist/web/active-listener.js +25 -0
- package/dist/web/auto-reply.js +1256 -0
- package/dist/web/inbound.js +649 -0
- package/dist/web/login-qr.js +230 -0
- package/dist/web/login.js +71 -0
- package/dist/web/media.js +175 -0
- package/dist/web/outbound.js +102 -0
- package/dist/web/qr-image.js +97 -0
- package/dist/web/reconnect.js +60 -0
- package/dist/web/session.js +370 -0
- package/dist/wizard/clack-prompter.js +56 -0
- package/dist/wizard/onboarding.js +620 -0
- package/dist/wizard/prompts.js +6 -0
- package/dist/wizard/session.js +203 -0
- package/docs/AGENTS.default.md +116 -0
- package/docs/CAPABILITIES.md +444 -0
- package/docs/CNAME +1 -0
- package/docs/NEXUS_CORE_REWRITE_SPEC.md +226 -0
- package/docs/RELEASING.md +69 -0
- package/docs/_config.yml +53 -0
- package/docs/_layouts/default.html +145 -0
- package/docs/agent-assisted-install.md +95 -0
- package/docs/agent-loop.md +61 -0
- package/docs/agent-send.md +21 -0
- package/docs/agent.md +108 -0
- package/docs/android.md +133 -0
- package/docs/architecture.md +114 -0
- package/docs/assets/markdown.css +133 -0
- package/docs/assets/pixel-lobster.svg +60 -0
- package/docs/assets/terminal.css +470 -0
- package/docs/assets/theme.js +55 -0
- package/docs/audio.md +48 -0
- package/docs/automation/nexus-sync.md +371 -0
- package/docs/background-process.md +74 -0
- package/docs/bash.md +32 -0
- package/docs/bedrock.md +71 -0
- package/docs/bonjour.md +159 -0
- package/docs/browser-linux-troubleshooting.md +114 -0
- package/docs/browser.md +293 -0
- package/docs/bun.md +56 -0
- package/docs/camera.md +152 -0
- package/docs/clawd.md +212 -0
- package/docs/concepts/usage-tracking.md +29 -0
- package/docs/configuration.md +1666 -0
- package/docs/control-ui.md +83 -0
- package/docs/cron.md +385 -0
- package/docs/dashboard.md +17 -0
- package/docs/device-models.md +46 -0
- package/docs/discord.md +308 -0
- package/docs/discovery.md +112 -0
- package/docs/docker.md +258 -0
- package/docs/docs.json +105 -0
- package/docs/doctor.md +68 -0
- package/docs/elevated.md +31 -0
- package/docs/faq.md +736 -0
- package/docs/feature-inventory/overview.md +141 -0
- package/docs/feature-inventory/rollout-checklist.md +53 -0
- package/docs/feature-inventory/test-matrix.md +87 -0
- package/docs/feature-inventory.md +9 -0
- package/docs/gateway/configuration-examples.md +221 -0
- package/docs/gateway/configuration.md +172 -0
- package/docs/gateway/cron.md +61 -0
- package/docs/gateway/heartbeat.md +207 -0
- package/docs/gateway/pairing.md +109 -0
- package/docs/gateway-lock.md +28 -0
- package/docs/gateway.md +227 -0
- package/docs/gmail-pubsub.md +191 -0
- package/docs/grammy.md +27 -0
- package/docs/group-messages.md +73 -0
- package/docs/groups.md +130 -0
- package/docs/health.md +28 -0
- package/docs/heartbeat.md +73 -0
- package/docs/home-userspace.md +277 -0
- package/docs/hubs.md +148 -0
- package/docs/images.md +51 -0
- package/docs/imessage.md +94 -0
- package/docs/index.md +196 -0
- package/docs/ios.md +372 -0
- package/docs/linux.md +11 -0
- package/docs/location-command.md +95 -0
- package/docs/location.md +46 -0
- package/docs/logging.md +110 -0
- package/docs/lore.md +131 -0
- package/docs/mac/bun.md +133 -0
- package/docs/mac/canvas.md +161 -0
- package/docs/mac/child-process.md +72 -0
- package/docs/mac/dev-setup.md +81 -0
- package/docs/mac/health.md +28 -0
- package/docs/mac/icon.md +26 -0
- package/docs/mac/logging.md +51 -0
- package/docs/mac/menu-bar.md +69 -0
- package/docs/mac/peekaboo.md +170 -0
- package/docs/mac/permissions.md +40 -0
- package/docs/mac/release.md +76 -0
- package/docs/mac/remote.md +57 -0
- package/docs/mac/signing.md +41 -0
- package/docs/mac/skills.md +27 -0
- package/docs/mac/voice-overlay.md +52 -0
- package/docs/mac/voicewake.md +56 -0
- package/docs/mac/webchat.md +27 -0
- package/docs/mac/xpc.md +40 -0
- package/docs/macos.md +104 -0
- package/docs/model-failover.md +75 -0
- package/docs/models.md +91 -0
- package/docs/multi-agent.md +74 -0
- package/docs/nix.md +95 -0
- package/docs/nodes.md +157 -0
- package/docs/onboarding-config-protocol.md +34 -0
- package/docs/onboarding.md +189 -0
- package/docs/pairing.md +85 -0
- package/docs/plans/cron-add-hardening.md +72 -0
- package/docs/plans/group-policy-hardening.md +121 -0
- package/docs/poll.md +52 -0
- package/docs/prereqs.md +67 -0
- package/docs/presence.md +133 -0
- package/docs/proposals/model-config.md +147 -0
- package/docs/provider-routing.md +25 -0
- package/docs/queue.md +78 -0
- package/docs/reference/templates/AGENTS.md +164 -0
- package/docs/remote-gateway-readme.md +153 -0
- package/docs/remote.md +61 -0
- package/docs/research/memory.md +227 -0
- package/docs/rpc.md +35 -0
- package/docs/security.md +200 -0
- package/docs/session-ingestion.md +119 -0
- package/docs/session-tool.md +154 -0
- package/docs/session.md +85 -0
- package/docs/sessions.md +8 -0
- package/docs/setup.md +131 -0
- package/docs/showcase.md +37 -0
- package/docs/signal.md +122 -0
- package/docs/skills-config.md +58 -0
- package/docs/skills.md +153 -0
- package/docs/slack.md +221 -0
- package/docs/subagents.md +72 -0
- package/docs/tailscale.md +71 -0
- package/docs/talk.md +79 -0
- package/docs/telegram.md +96 -0
- package/docs/templates/AGENTS.md +286 -0
- package/docs/templates/BOOTSTRAP.md +35 -0
- package/docs/templates/IDENTITY.md +17 -0
- package/docs/templates/PROFILE.md +14 -0
- package/docs/templates/SOUL.md +41 -0
- package/docs/templates/TOOLS.md +41 -0
- package/docs/templates/USER.md +8 -0
- package/docs/test.md +43 -0
- package/docs/testing-onboarding-quickstart.md +76 -0
- package/docs/testing-philosophy.md +211 -0
- package/docs/thinking.md +46 -0
- package/docs/timezone.md +40 -0
- package/docs/tools.md +346 -0
- package/docs/troubleshooting.md +257 -0
- package/docs/tui.md +71 -0
- package/docs/typebox.md +42 -0
- package/docs/updating.md +138 -0
- package/docs/usage-cloud-aggregation-spec.md +133 -0
- package/docs/usage-suggestions-pipeline.md +126 -0
- package/docs/voicewake.md +61 -0
- package/docs/web.md +115 -0
- package/docs/webchat.md +34 -0
- package/docs/webhook.md +132 -0
- package/docs/whatsapp-clawd.jpg +0 -0
- package/docs/whatsapp.md +170 -0
- package/docs/windows.md +11 -0
- package/docs/wizard.md +167 -0
- package/package.json +209 -0
- package/skills/1password/SKILL.md +54 -0
- package/skills/1password/docs/setup.md +85 -0
- package/skills/1password/docs/troubleshooting.md +63 -0
- package/skills/1password/references/cli-examples.md +29 -0
- package/skills/1password/references/get-started.md +17 -0
- package/skills/agent-browser/SKILL.md +450 -0
- package/skills/agent-browser/docs/browser-use-eval.md +95 -0
- package/skills/agent-browser/docs/first-tests.md +261 -0
- package/skills/agent-browser/docs/wordle-nyt-eval.js +32 -0
- package/skills/aix/SKILL.md +93 -0
- package/skills/aix/docs/embeddings.md +40 -0
- package/skills/aix/docs/setup.md +58 -0
- package/skills/aix/docs/troubleshooting.md +41 -0
- package/skills/aix/references/sql.md +48 -0
- package/skills/apple-notes/SKILL.md +50 -0
- package/skills/apple-reminders/SKILL.md +67 -0
- package/skills/bear-notes/SKILL.md +79 -0
- package/skills/bird/SKILL.md +32 -0
- package/skills/bird/docs/auth.md +31 -0
- package/skills/bird/docs/troubleshooting.md +31 -0
- package/skills/blogwatcher/SKILL.md +46 -0
- package/skills/blucli/SKILL.md +27 -0
- package/skills/brave-search/SKILL.md +36 -0
- package/skills/brave-search/docs/setup.md +40 -0
- package/skills/brave-search/docs/troubleshooting.md +37 -0
- package/skills/brave-search/docs/usage.md +28 -0
- package/skills/brave-search/scripts/content.mjs +53 -0
- package/skills/brave-search/scripts/search.mjs +79 -0
- package/skills/browser-use-agent-sdk/SKILL.md +90 -0
- package/skills/camsnap/SKILL.md +25 -0
- package/skills/clawdhub/SKILL.md +53 -0
- package/skills/coding-agent/SKILL.md +274 -0
- package/skills/comms/SKILL.md +249 -0
- package/skills/comms/docs/adapters.md +54 -0
- package/skills/comms/docs/setup.md +56 -0
- package/skills/comms/docs/troubleshooting.md +44 -0
- package/skills/comms/references/schema.md +49 -0
- package/skills/computer-use/SKILL.md +204 -0
- package/skills/computer-use/docs/open-interpreter.md +26 -0
- package/skills/computer-use/docs/peekaboo.md +26 -0
- package/skills/computer-use/docs/setup.md +47 -0
- package/skills/computer-use/docs/troubleshooting.md +33 -0
- package/skills/discord/SKILL.md +370 -0
- package/skills/eightctl/SKILL.md +29 -0
- package/skills/eve/SKILL.md +215 -0
- package/skills/eve/docs/dual-account.md +84 -0
- package/skills/eve/docs/intelligence.md +58 -0
- package/skills/eve/docs/setup.md +60 -0
- package/skills/eve/docs/troubleshooting.md +54 -0
- package/skills/eve/scripts/setup-dual-account.sh +125 -0
- package/skills/filesystem/SKILL.md +217 -0
- package/skills/food-order/SKILL.md +41 -0
- package/skills/gemini/SKILL.md +23 -0
- package/skills/gh/SKILL.md +22 -0
- package/skills/gh/docs/usage.md +41 -0
- package/skills/gifgrep/SKILL.md +47 -0
- package/skills/github/SKILL.md +26 -0
- package/skills/github/docs/setup.md +21 -0
- package/skills/github/docs/troubleshooting.md +24 -0
- package/skills/gog/SKILL.md +104 -0
- package/skills/gog/docs/portability.md +94 -0
- package/skills/gog/docs/setup.md +76 -0
- package/skills/gog/docs/troubleshooting.md +94 -0
- package/skills/gog/scripts/cdp/README.md +90 -0
- package/skills/gog/scripts/cdp/add_test_users.py +69 -0
- package/skills/gog/scripts/cdp/auth_add_accounts.py +209 -0
- package/skills/gog/scripts/cdp/auth_add_accounts_manual.py +206 -0
- package/skills/gog/scripts/cdp/create_oauth_client.py +165 -0
- package/skills/gog/scripts/cdp/launch_cdp_chrome.sh +58 -0
- package/skills/google-oauth/SKILL.md +94 -0
- package/skills/goplaces/SKILL.md +30 -0
- package/skills/imsg/SKILL.md +25 -0
- package/skills/json-render/SKILL.md +154 -0
- package/skills/json-render/assets/components/README.md +21 -0
- package/skills/json-render/assets/components/catalog.ts +78 -0
- package/skills/json-render/assets/components/registry.tsx +172 -0
- package/skills/json-render/assets/demo/App.css +397 -0
- package/skills/json-render/assets/demo/App.tsx +897 -0
- package/skills/json-render/assets/demo/README.md +22 -0
- package/skills/json-render/assets/demo/catalog.ts +78 -0
- package/skills/json-render/assets/demo/data/nexus-core.json +31 -0
- package/skills/json-render/assets/demo/index.css +27 -0
- package/skills/json-render/assets/demo/registry.tsx +150 -0
- package/skills/json-render/docs/nexus-state-demo.md +84 -0
- package/skills/json-render/docs/shadcn-preset.md +33 -0
- package/skills/json-render/scripts/create-vite-demo.sh +45 -0
- package/skills/json-render/scripts/llm-server/README.md +33 -0
- package/skills/json-render/scripts/llm-server/catalog.ts +78 -0
- package/skills/json-render/scripts/llm-server/package-lock.json +702 -0
- package/skills/json-render/scripts/llm-server/package.json +18 -0
- package/skills/json-render/scripts/llm-server/server.ts +285 -0
- package/skills/local-places/SERVER_README.md +101 -0
- package/skills/local-places/SKILL.md +91 -0
- package/skills/local-places/pyproject.toml +27 -0
- package/skills/local-places/src/local_places/__init__.py +2 -0
- package/skills/local-places/src/local_places/__pycache__/__init__.cpython-314.pyc +0 -0
- package/skills/local-places/src/local_places/__pycache__/google_places.cpython-314.pyc +0 -0
- package/skills/local-places/src/local_places/__pycache__/main.cpython-314.pyc +0 -0
- package/skills/local-places/src/local_places/__pycache__/schemas.cpython-314.pyc +0 -0
- package/skills/local-places/src/local_places/google_places.py +314 -0
- package/skills/local-places/src/local_places/main.py +65 -0
- package/skills/local-places/src/local_places/schemas.py +107 -0
- package/skills/mcporter/SKILL.md +38 -0
- package/skills/model-usage/SKILL.md +45 -0
- package/skills/model-usage/references/codexbar-cli.md +28 -0
- package/skills/model-usage/scripts/model_usage.py +310 -0
- package/skills/nano-banana-pro/SKILL.md +30 -0
- package/skills/nano-banana-pro/scripts/generate_image.py +169 -0
- package/skills/nano-pdf/SKILL.md +20 -0
- package/skills/nexus-cloud/SKILL.md +53 -0
- package/skills/nexus-cloud/docs/security.md +24 -0
- package/skills/nexus-cloud/docs/setup.md +51 -0
- package/skills/nexus-cloud/docs/troubleshooting.md +28 -0
- package/skills/notion/SKILL.md +156 -0
- package/skills/obsidian/SKILL.md +55 -0
- package/skills/onboarding/SKILL.md +515 -0
- package/skills/onboarding/docs/CAPABILITIES.md +444 -0
- package/skills/onboarding/docs/CAPABILITY_TAXONOMY.md +608 -0
- package/skills/onboarding/docs/CLI_GRAMMAR.md +797 -0
- package/skills/onboarding/docs/CLI_GRAMMAR_CREDENTIALS.md +632 -0
- package/skills/onboarding/docs/CLI_GRAMMAR_ONBOARDING.md +815 -0
- package/skills/onboarding/docs/CLI_GRAMMAR_SKILLS.md +449 -0
- package/skills/onboarding/docs/DOCUMENTATION_OVERVIEW.md +290 -0
- package/skills/onboarding/docs/ENTITY_MODEL.md +582 -0
- package/skills/onboarding/docs/GOAL_STATE_ARCHITECTURE.md +395 -0
- package/skills/onboarding/docs/NEXUS_SYSTEM_OVERVIEW.md +476 -0
- package/skills/onboarding/docs/SKILLS_HUB_SPEC.md +477 -0
- package/skills/onboarding/docs/SKILLS_SPECIFICATION.md +947 -0
- package/skills/onboarding/docs/SKILL_GATEWAY_DESIGN.md +702 -0
- package/skills/onboarding/docs/SKILL_GATEWAY_PRD.md +278 -0
- package/skills/onboarding/docs/SKILL_INVENTORY.md +266 -0
- package/skills/onboarding/docs/STATE_ARCHITECTURE.md +547 -0
- package/skills/onboarding/docs/TROUBLESHOOTING.md +363 -0
- package/skills/onboarding/docs/USER_JOURNEY.md +797 -0
- package/skills/onboarding/docs/WOW_MOMENTS.md +232 -0
- package/skills/onboarding/docs/agent-apple-id.md +289 -0
- package/skills/onboarding/docs/skill-deep-dives/1password.md +367 -0
- package/skills/onboarding/docs/skill-deep-dives/TEMPLATE.md +197 -0
- package/skills/onboarding/docs/skill-deep-dives/aix.md +498 -0
- package/skills/onboarding/docs/skill-deep-dives/bird.md +357 -0
- package/skills/onboarding/docs/skill-deep-dives/brave-search.md +601 -0
- package/skills/onboarding/docs/skill-deep-dives/comms.md +607 -0
- package/skills/onboarding/docs/skill-deep-dives/computer-use.md +599 -0
- package/skills/onboarding/docs/skill-deep-dives/cron-and-heartbeat.md +576 -0
- package/skills/onboarding/docs/skill-deep-dives/eve.md +711 -0
- package/skills/onboarding/docs/skill-deep-dives/github.md +333 -0
- package/skills/onboarding/docs/skill-deep-dives/gog.md +640 -0
- package/skills/onboarding/docs/skill-deep-dives/homebrew-prereqs.md +785 -0
- package/skills/onboarding/docs/skill-deep-dives/nexus-cloud.md +689 -0
- package/skills/onboarding/docs/skill-deep-dives/qmd.md +742 -0
- package/skills/onboarding/docs/skill-deep-dives/telegram.md +379 -0
- package/skills/onboarding/docs/skill-deep-dives/wacli.md +399 -0
- package/skills/onboarding/docs/skill-deep-dives/weather.md +513 -0
- package/skills/onboarding/scripts/ralph/prd.json +215 -0
- package/skills/onboarding/scripts/ralph/progress.txt +99 -0
- package/skills/onboarding/scripts/ralph/prompt.md +87 -0
- package/skills/onboarding/scripts/ralph/ralph.log +84 -0
- package/skills/onboarding/scripts/ralph/ralph.sh +45 -0
- package/skills/onboarding/scripts/setup-cursor-skills.sh +40 -0
- package/skills/openai-image-gen/SKILL.md +31 -0
- package/skills/openai-image-gen/scripts/gen.py +173 -0
- package/skills/openai-whisper/SKILL.md +19 -0
- package/skills/openai-whisper-api/SKILL.md +43 -0
- package/skills/openai-whisper-api/scripts/transcribe.sh +85 -0
- package/skills/openhue/SKILL.md +30 -0
- package/skills/oracle/SKILL.md +105 -0
- package/skills/ordercli/SKILL.md +47 -0
- package/skills/peekaboo/SKILL.md +153 -0
- package/skills/qmd/SKILL.md +32 -0
- package/skills/qmd/docs/mcp.md +30 -0
- package/skills/qmd/docs/ollama.md +42 -0
- package/skills/qmd/docs/setup.md +44 -0
- package/skills/sag/SKILL.md +62 -0
- package/skills/skill-cli-template/SKILL.md +109 -0
- package/skills/skill-creator/scripts/__pycache__/quick_validate.cpython-311.pyc +0 -0
- package/skills/slack/SKILL.md +144 -0
- package/skills/songsee/SKILL.md +29 -0
- package/skills/sonoscli/SKILL.md +26 -0
- package/skills/spotify-player/SKILL.md +34 -0
- package/skills/summarize/SKILL.md +49 -0
- package/skills/telegram/SKILL.md +20 -0
- package/skills/telegram/docs/pairing.md +30 -0
- package/skills/telegram/docs/setup.md +41 -0
- package/skills/telegram/docs/webhook.md +17 -0
- package/skills/things-mac/SKILL.md +61 -0
- package/skills/tmux/SKILL.md +121 -0
- package/skills/tmux/scripts/find-sessions.sh +112 -0
- package/skills/tmux/scripts/wait-for-text.sh +83 -0
- package/skills/trello/SKILL.md +84 -0
- package/skills/upstream-sync/SKILL.md +151 -0
- package/skills/upstream-sync/scripts/auto-port.sh +227 -0
- package/skills/upstream-sync/scripts/check-all.sh +88 -0
- package/skills/upstream-sync/scripts/check-nexus.sh +146 -0
- package/skills/upstream-sync/scripts/check-pi-ai.sh +129 -0
- package/skills/video-frames/SKILL.md +29 -0
- package/skills/video-frames/scripts/frame.sh +81 -0
- package/skills/wacli/SKILL.md +48 -0
- package/skills/wacli/docs/auth.md +21 -0
- package/skills/wacli/docs/backup.md +9 -0
- package/skills/wacli/docs/troubleshooting.md +21 -0
- package/skills/weather/SKILL.md +53 -0
- package/skills/weather/docs/usage.md +40 -0
|
@@ -0,0 +1,321 @@
|
|
|
1
|
+
import crypto from "node:crypto";
|
|
2
|
+
import { loadConfig, STATE_DIR_NEXUS } from "../config/config.js";
|
|
3
|
+
import { callGateway } from "../gateway/call.js";
|
|
4
|
+
import { normalizeAgentId, parseAgentSessionKey, resolveAgentIdFromSessionKey, } from "../routing/session-key.js";
|
|
5
|
+
import { resolveDisplaySessionKey, resolveInternalSessionKey, resolveMainSessionAlias, stripToolMessages, } from "./tools/sessions-helpers.js";
|
|
6
|
+
import { resolveAnnounceTarget } from "./tools/sessions-announce-target.js";
|
|
7
|
+
import { readLatestAssistantReply, runAgentStep } from "./tools/agent-step.js";
|
|
8
|
+
import { isAnnounceSkip } from "./tools/sessions-send-helpers.js";
|
|
9
|
+
import { createFileSubagentStore, } from "./subagent-registry.store.js";
|
|
10
|
+
function normalizeStoredEntry(entry) {
|
|
11
|
+
if (!entry || typeof entry !== "object")
|
|
12
|
+
return null;
|
|
13
|
+
const sessionKey = typeof entry.sessionKey === "string" ? entry.sessionKey.trim() : "";
|
|
14
|
+
const parentSessionKey = typeof entry.parentSessionKey === "string" ? entry.parentSessionKey.trim() : "";
|
|
15
|
+
if (!sessionKey || !parentSessionKey)
|
|
16
|
+
return null;
|
|
17
|
+
const status = entry.status === "announced" || entry.status === "failed" || entry.status === "pending"
|
|
18
|
+
? entry.status
|
|
19
|
+
: "pending";
|
|
20
|
+
const createdAt = typeof entry.createdAt === "string" && entry.createdAt.trim()
|
|
21
|
+
? entry.createdAt
|
|
22
|
+
: new Date().toISOString();
|
|
23
|
+
const agentId = normalizeAgentId(entry.agentId);
|
|
24
|
+
const legacyRequester = entry.requesterProvider;
|
|
25
|
+
return {
|
|
26
|
+
...entry,
|
|
27
|
+
agentId,
|
|
28
|
+
sessionKey,
|
|
29
|
+
parentSessionKey,
|
|
30
|
+
createdAt,
|
|
31
|
+
status,
|
|
32
|
+
requesterChannel: entry.requesterChannel ?? legacyRequester,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
function buildSubagentAnnouncePrompt(params) {
|
|
36
|
+
const taskLine = params.task?.trim() ? params.task.trim() : "(not available)";
|
|
37
|
+
const lines = [
|
|
38
|
+
"Sub-agent announce step:",
|
|
39
|
+
params.requesterSessionKey ? `Requester session: ${params.requesterSessionKey}.` : undefined,
|
|
40
|
+
params.requesterChannel ? `Requester channel: ${params.requesterChannel}.` : undefined,
|
|
41
|
+
`Post target channel: ${params.announceChannel}.`,
|
|
42
|
+
`Original task: ${taskLine}`,
|
|
43
|
+
params.subagentReply
|
|
44
|
+
? `Sub-agent result: ${params.subagentReply}`
|
|
45
|
+
: "Sub-agent result: (not available).",
|
|
46
|
+
"",
|
|
47
|
+
"**You MUST announce your result.** The requester is waiting for your response.",
|
|
48
|
+
"Provide a brief, useful summary of what you accomplished.",
|
|
49
|
+
'Only reply "ANNOUNCE_SKIP" if the task completely failed with no useful output.',
|
|
50
|
+
"Your reply will be posted to the requester chat.",
|
|
51
|
+
].filter(Boolean);
|
|
52
|
+
return lines.join("\n");
|
|
53
|
+
}
|
|
54
|
+
function extractMessageText(message) {
|
|
55
|
+
if (!message || typeof message !== "object")
|
|
56
|
+
return undefined;
|
|
57
|
+
const content = message.content;
|
|
58
|
+
if (!Array.isArray(content))
|
|
59
|
+
return undefined;
|
|
60
|
+
const chunks = [];
|
|
61
|
+
for (const block of content) {
|
|
62
|
+
if (!block || typeof block !== "object")
|
|
63
|
+
continue;
|
|
64
|
+
if (block.type !== "text")
|
|
65
|
+
continue;
|
|
66
|
+
const text = block.text;
|
|
67
|
+
if (typeof text === "string" && text.trim()) {
|
|
68
|
+
chunks.push(text);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
const joined = chunks.join("").trim();
|
|
72
|
+
return joined ? joined : undefined;
|
|
73
|
+
}
|
|
74
|
+
async function readSubagentTask(sessionKey) {
|
|
75
|
+
try {
|
|
76
|
+
const history = (await callGateway({
|
|
77
|
+
method: "chat.history",
|
|
78
|
+
params: { sessionKey, limit: 50 },
|
|
79
|
+
}));
|
|
80
|
+
const messages = stripToolMessages(Array.isArray(history?.messages) ? history.messages : []);
|
|
81
|
+
for (const message of messages) {
|
|
82
|
+
const role = message.role;
|
|
83
|
+
if (role !== "user")
|
|
84
|
+
continue;
|
|
85
|
+
const text = extractMessageText(message);
|
|
86
|
+
if (text)
|
|
87
|
+
return text;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
catch {
|
|
91
|
+
// ignore
|
|
92
|
+
}
|
|
93
|
+
return undefined;
|
|
94
|
+
}
|
|
95
|
+
async function runSubagentAnnounceFlow(params) {
|
|
96
|
+
let status = "pending";
|
|
97
|
+
const timeoutMs = typeof params.timeoutMs === "number" && params.timeoutMs > 0 ? params.timeoutMs : 30_000;
|
|
98
|
+
try {
|
|
99
|
+
let reply = params.roundOneReply?.trim();
|
|
100
|
+
if (!reply) {
|
|
101
|
+
if (params.childRunId) {
|
|
102
|
+
const waitMs = Math.min(timeoutMs, 60_000);
|
|
103
|
+
const wait = (await callGateway({
|
|
104
|
+
method: "agent.wait",
|
|
105
|
+
params: {
|
|
106
|
+
runId: params.childRunId,
|
|
107
|
+
timeoutMs: waitMs,
|
|
108
|
+
},
|
|
109
|
+
timeoutMs: waitMs + 2000,
|
|
110
|
+
}));
|
|
111
|
+
if (wait?.status !== "ok")
|
|
112
|
+
return "pending";
|
|
113
|
+
}
|
|
114
|
+
reply = await readLatestAssistantReply({
|
|
115
|
+
sessionKey: params.childSessionKey,
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
if (!reply || !reply.trim())
|
|
119
|
+
return "pending";
|
|
120
|
+
const announceTarget = await resolveAnnounceTarget({
|
|
121
|
+
sessionKey: params.requesterSessionKey,
|
|
122
|
+
displayKey: params.requesterDisplayKey,
|
|
123
|
+
});
|
|
124
|
+
if (!announceTarget) {
|
|
125
|
+
status = "failed";
|
|
126
|
+
return status;
|
|
127
|
+
}
|
|
128
|
+
const task = params.task?.trim() || (await readSubagentTask(params.childSessionKey));
|
|
129
|
+
const announcePrompt = buildSubagentAnnouncePrompt({
|
|
130
|
+
requesterSessionKey: params.requesterSessionKey,
|
|
131
|
+
requesterChannel: params.requesterChannel,
|
|
132
|
+
announceChannel: announceTarget.provider,
|
|
133
|
+
task,
|
|
134
|
+
subagentReply: reply,
|
|
135
|
+
});
|
|
136
|
+
const announceReply = await runAgentStep({
|
|
137
|
+
sessionKey: params.childSessionKey,
|
|
138
|
+
message: "Sub-agent announce step.",
|
|
139
|
+
extraSystemPrompt: announcePrompt,
|
|
140
|
+
timeoutMs,
|
|
141
|
+
lane: "nested",
|
|
142
|
+
});
|
|
143
|
+
if (!announceReply || !announceReply.trim() || isAnnounceSkip(announceReply)) {
|
|
144
|
+
status = "announced";
|
|
145
|
+
return status;
|
|
146
|
+
}
|
|
147
|
+
await callGateway({
|
|
148
|
+
method: "send",
|
|
149
|
+
params: {
|
|
150
|
+
to: announceTarget.to,
|
|
151
|
+
message: announceReply.trim(),
|
|
152
|
+
provider: announceTarget.provider,
|
|
153
|
+
accountId: announceTarget.accountId,
|
|
154
|
+
idempotencyKey: crypto.randomUUID(),
|
|
155
|
+
},
|
|
156
|
+
timeoutMs: 10_000,
|
|
157
|
+
});
|
|
158
|
+
status = "announced";
|
|
159
|
+
return status;
|
|
160
|
+
}
|
|
161
|
+
catch {
|
|
162
|
+
status = "failed";
|
|
163
|
+
return status;
|
|
164
|
+
}
|
|
165
|
+
finally {
|
|
166
|
+
if (params.cleanup === "delete" && status !== "pending") {
|
|
167
|
+
try {
|
|
168
|
+
await callGateway({
|
|
169
|
+
method: "sessions.delete",
|
|
170
|
+
params: { key: params.childSessionKey, deleteTranscript: true },
|
|
171
|
+
timeoutMs: 10_000,
|
|
172
|
+
});
|
|
173
|
+
}
|
|
174
|
+
catch {
|
|
175
|
+
// ignore
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
export function createSubagentRegistry(params) {
|
|
181
|
+
const store = params?.store ?? createFileSubagentStore(params?.stateDir ?? STATE_DIR_NEXUS);
|
|
182
|
+
const entries = new Map();
|
|
183
|
+
let initialized = false;
|
|
184
|
+
let resumeInFlight = null;
|
|
185
|
+
const initializeFromStore = () => {
|
|
186
|
+
if (initialized)
|
|
187
|
+
return;
|
|
188
|
+
initialized = true;
|
|
189
|
+
const stored = store.load();
|
|
190
|
+
for (const entry of stored) {
|
|
191
|
+
const normalized = normalizeStoredEntry(entry);
|
|
192
|
+
if (normalized) {
|
|
193
|
+
entries.set(normalized.sessionKey, normalized);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
};
|
|
197
|
+
const persistToStore = () => {
|
|
198
|
+
const list = Array.from(entries.values()).sort((a, b) => a.createdAt.localeCompare(b.createdAt));
|
|
199
|
+
store.save(list);
|
|
200
|
+
};
|
|
201
|
+
const register = (params) => {
|
|
202
|
+
initializeFromStore();
|
|
203
|
+
const existing = entries.get(params.sessionKey);
|
|
204
|
+
const createdAt = existing?.createdAt ?? new Date().toISOString();
|
|
205
|
+
const agentId = normalizeAgentId(parseAgentSessionKey(params.sessionKey)?.agentId ??
|
|
206
|
+
parseAgentSessionKey(params.parentSessionKey)?.agentId ??
|
|
207
|
+
existing?.agentId ??
|
|
208
|
+
resolveAgentIdFromSessionKey(params.sessionKey));
|
|
209
|
+
const next = {
|
|
210
|
+
agentId,
|
|
211
|
+
sessionKey: params.sessionKey,
|
|
212
|
+
parentSessionKey: params.parentSessionKey,
|
|
213
|
+
createdAt,
|
|
214
|
+
status: "pending",
|
|
215
|
+
task: params.task ?? existing?.task,
|
|
216
|
+
requesterChannel: params.requesterChannel ?? existing?.requesterChannel,
|
|
217
|
+
runId: params.runId ?? existing?.runId,
|
|
218
|
+
cleanup: params.cleanup ?? existing?.cleanup,
|
|
219
|
+
timeoutMs: params.timeoutMs ?? existing?.timeoutMs,
|
|
220
|
+
};
|
|
221
|
+
entries.set(params.sessionKey, next);
|
|
222
|
+
persistToStore();
|
|
223
|
+
return next;
|
|
224
|
+
};
|
|
225
|
+
const update = (sessionKey, updates) => {
|
|
226
|
+
initializeFromStore();
|
|
227
|
+
const existing = entries.get(sessionKey);
|
|
228
|
+
if (!existing)
|
|
229
|
+
return undefined;
|
|
230
|
+
const next = {
|
|
231
|
+
...existing,
|
|
232
|
+
...updates,
|
|
233
|
+
agentId: existing.agentId,
|
|
234
|
+
sessionKey: existing.sessionKey,
|
|
235
|
+
parentSessionKey: existing.parentSessionKey,
|
|
236
|
+
createdAt: existing.createdAt,
|
|
237
|
+
};
|
|
238
|
+
entries.set(sessionKey, next);
|
|
239
|
+
persistToStore();
|
|
240
|
+
return next;
|
|
241
|
+
};
|
|
242
|
+
const markAnnounced = (sessionKey) => {
|
|
243
|
+
update(sessionKey, { status: "announced" });
|
|
244
|
+
};
|
|
245
|
+
const markFailed = (sessionKey) => {
|
|
246
|
+
update(sessionKey, { status: "failed" });
|
|
247
|
+
};
|
|
248
|
+
const get = (sessionKey) => {
|
|
249
|
+
initializeFromStore();
|
|
250
|
+
return entries.get(sessionKey);
|
|
251
|
+
};
|
|
252
|
+
const list = () => {
|
|
253
|
+
initializeFromStore();
|
|
254
|
+
return Array.from(entries.values());
|
|
255
|
+
};
|
|
256
|
+
const runAnnouncement = async (params) => {
|
|
257
|
+
const status = await runSubagentAnnounceFlow(params);
|
|
258
|
+
if (status === "announced") {
|
|
259
|
+
markAnnounced(params.childSessionKey);
|
|
260
|
+
}
|
|
261
|
+
else if (status === "failed") {
|
|
262
|
+
markFailed(params.childSessionKey);
|
|
263
|
+
}
|
|
264
|
+
return status;
|
|
265
|
+
};
|
|
266
|
+
const resumePendingAnnouncements = async () => {
|
|
267
|
+
initializeFromStore();
|
|
268
|
+
if (resumeInFlight)
|
|
269
|
+
return resumeInFlight;
|
|
270
|
+
resumeInFlight = (async () => {
|
|
271
|
+
const pending = Array.from(entries.values()).filter((entry) => entry.status === "pending");
|
|
272
|
+
if (!pending.length)
|
|
273
|
+
return;
|
|
274
|
+
const cfg = loadConfig();
|
|
275
|
+
const { mainKey, alias } = resolveMainSessionAlias(cfg);
|
|
276
|
+
for (const entry of pending) {
|
|
277
|
+
const requesterInternalKey = resolveInternalSessionKey({
|
|
278
|
+
key: entry.parentSessionKey,
|
|
279
|
+
alias,
|
|
280
|
+
mainKey,
|
|
281
|
+
});
|
|
282
|
+
const requesterDisplayKey = resolveDisplaySessionKey({
|
|
283
|
+
key: requesterInternalKey,
|
|
284
|
+
alias,
|
|
285
|
+
mainKey,
|
|
286
|
+
});
|
|
287
|
+
await runAnnouncement({
|
|
288
|
+
childSessionKey: entry.sessionKey,
|
|
289
|
+
childRunId: entry.runId,
|
|
290
|
+
requesterSessionKey: requesterInternalKey,
|
|
291
|
+
requesterChannel: entry.requesterChannel,
|
|
292
|
+
requesterDisplayKey,
|
|
293
|
+
task: entry.task,
|
|
294
|
+
timeoutMs: entry.timeoutMs,
|
|
295
|
+
cleanup: entry.cleanup ?? "delete",
|
|
296
|
+
});
|
|
297
|
+
}
|
|
298
|
+
})().finally(() => {
|
|
299
|
+
resumeInFlight = null;
|
|
300
|
+
});
|
|
301
|
+
return resumeInFlight;
|
|
302
|
+
};
|
|
303
|
+
const clear = () => {
|
|
304
|
+
entries.clear();
|
|
305
|
+
store.clear();
|
|
306
|
+
};
|
|
307
|
+
return {
|
|
308
|
+
register,
|
|
309
|
+
update,
|
|
310
|
+
markAnnounced,
|
|
311
|
+
markFailed,
|
|
312
|
+
get,
|
|
313
|
+
list,
|
|
314
|
+
initializeFromStore,
|
|
315
|
+
persistToStore,
|
|
316
|
+
runAnnouncement,
|
|
317
|
+
resumePendingAnnouncements,
|
|
318
|
+
clear,
|
|
319
|
+
};
|
|
320
|
+
}
|
|
321
|
+
export const subagentRegistry = createSubagentRegistry();
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import fsp from "node:fs/promises";
|
|
3
|
+
import path from "node:path";
|
|
4
|
+
const STORE_FILENAME = "subagent-registry.json";
|
|
5
|
+
function resolveStorePath(stateDir) {
|
|
6
|
+
return path.join(stateDir, STORE_FILENAME);
|
|
7
|
+
}
|
|
8
|
+
function safeParse(raw) {
|
|
9
|
+
try {
|
|
10
|
+
const data = JSON.parse(raw);
|
|
11
|
+
return Array.isArray(data) ? data : [];
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
return [];
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
export function createFileSubagentStore(stateDir) {
|
|
18
|
+
const storePath = resolveStorePath(stateDir);
|
|
19
|
+
const load = () => {
|
|
20
|
+
if (!fs.existsSync(storePath))
|
|
21
|
+
return [];
|
|
22
|
+
try {
|
|
23
|
+
const raw = fs.readFileSync(storePath, "utf-8");
|
|
24
|
+
return safeParse(raw);
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
return [];
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
const save = (entries) => {
|
|
31
|
+
fs.mkdirSync(path.dirname(storePath), { recursive: true });
|
|
32
|
+
fs.writeFileSync(storePath, JSON.stringify(entries, null, 2), "utf-8");
|
|
33
|
+
};
|
|
34
|
+
const clear = () => {
|
|
35
|
+
try {
|
|
36
|
+
fs.unlinkSync(storePath);
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
// ignore
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
return { load, save, clear };
|
|
43
|
+
}
|
|
44
|
+
export async function createFileSubagentStoreAsync(stateDir) {
|
|
45
|
+
await fsp.mkdir(stateDir, { recursive: true });
|
|
46
|
+
return createFileSubagentStore(stateDir);
|
|
47
|
+
}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
export function buildAgentSystemPromptAppend(params) {
|
|
2
|
+
const toolSummaries = {
|
|
3
|
+
read: "Read file contents",
|
|
4
|
+
write: "Create or overwrite files",
|
|
5
|
+
edit: "Make precise edits to files",
|
|
6
|
+
grep: "Search file contents for patterns",
|
|
7
|
+
find: "Find files by glob pattern",
|
|
8
|
+
ls: "List directory contents",
|
|
9
|
+
bash: "Run shell commands",
|
|
10
|
+
process: "Manage background bash sessions",
|
|
11
|
+
whatsapp_login: "Generate and wait for WhatsApp QR login",
|
|
12
|
+
browser: "Control the dedicated Nexus browser",
|
|
13
|
+
canvas: "Present/eval/snapshot the Canvas",
|
|
14
|
+
nodes: "List/describe/notify/camera/screen on paired nodes",
|
|
15
|
+
cron: "Manage cron jobs and wake events",
|
|
16
|
+
gateway: "Restart the running Gateway process",
|
|
17
|
+
sessions_list: "List sessions with filters and last messages",
|
|
18
|
+
sessions_history: "Fetch message history for a session",
|
|
19
|
+
sessions_send: "Send a message into another session",
|
|
20
|
+
image: "Analyze an image with the configured image model",
|
|
21
|
+
discord: "Send Discord reactions/messages and manage threads/channels",
|
|
22
|
+
slack: "Send Slack messages and manage channels",
|
|
23
|
+
};
|
|
24
|
+
const toolOrder = [
|
|
25
|
+
"read",
|
|
26
|
+
"write",
|
|
27
|
+
"edit",
|
|
28
|
+
"grep",
|
|
29
|
+
"find",
|
|
30
|
+
"ls",
|
|
31
|
+
"bash",
|
|
32
|
+
"process",
|
|
33
|
+
"whatsapp_login",
|
|
34
|
+
"browser",
|
|
35
|
+
"canvas",
|
|
36
|
+
"nodes",
|
|
37
|
+
"cron",
|
|
38
|
+
"gateway",
|
|
39
|
+
"sessions_list",
|
|
40
|
+
"sessions_history",
|
|
41
|
+
"sessions_send",
|
|
42
|
+
"image",
|
|
43
|
+
"discord",
|
|
44
|
+
"slack",
|
|
45
|
+
];
|
|
46
|
+
const normalizedTools = (params.toolNames ?? [])
|
|
47
|
+
.map((tool) => tool.trim().toLowerCase())
|
|
48
|
+
.filter(Boolean);
|
|
49
|
+
const availableTools = new Set(normalizedTools);
|
|
50
|
+
const extraTools = Array.from(new Set(normalizedTools.filter((tool) => !toolOrder.includes(tool))));
|
|
51
|
+
const enabledTools = toolOrder.filter((tool) => availableTools.has(tool));
|
|
52
|
+
const disabledTools = toolOrder.filter((tool) => !availableTools.has(tool));
|
|
53
|
+
const toolLines = enabledTools.map((tool) => {
|
|
54
|
+
const summary = toolSummaries[tool];
|
|
55
|
+
return summary ? `- ${tool}: ${summary}` : `- ${tool}`;
|
|
56
|
+
});
|
|
57
|
+
for (const tool of extraTools.sort()) {
|
|
58
|
+
toolLines.push(`- ${tool}`);
|
|
59
|
+
}
|
|
60
|
+
const thinkHint = params.defaultThinkLevel && params.defaultThinkLevel !== "off"
|
|
61
|
+
? `Default thinking level: ${params.defaultThinkLevel}.`
|
|
62
|
+
: "Default thinking level: off.";
|
|
63
|
+
const extraSystemPrompt = params.extraSystemPrompt?.trim();
|
|
64
|
+
const ownerNumbers = (params.ownerNumbers ?? [])
|
|
65
|
+
.map((value) => value.trim())
|
|
66
|
+
.filter(Boolean);
|
|
67
|
+
const ownerLine = ownerNumbers.length > 0
|
|
68
|
+
? `Owner numbers: ${ownerNumbers.join(", ")}. Treat messages from these numbers as the user.`
|
|
69
|
+
: undefined;
|
|
70
|
+
const reasoningHint = params.reasoningTagHint
|
|
71
|
+
? [
|
|
72
|
+
"ALL internal reasoning MUST be inside <think>...</think>.",
|
|
73
|
+
"Do not output any analysis outside <think>.",
|
|
74
|
+
"Format every reply as <think>...</think> then <final>...</final>, with no other text.",
|
|
75
|
+
"Only the final user-visible reply may appear inside <final>.",
|
|
76
|
+
"Only text inside <final> is shown to the user; everything else is discarded and never seen by the user.",
|
|
77
|
+
"Example:",
|
|
78
|
+
"<think>Short internal reasoning.</think>",
|
|
79
|
+
"<final>Hey there! What would you like to do next?</final>",
|
|
80
|
+
].join(" ")
|
|
81
|
+
: undefined;
|
|
82
|
+
const userTimezone = params.userTimezone?.trim();
|
|
83
|
+
const userTime = params.userTime?.trim();
|
|
84
|
+
const runtimeInfo = params.runtimeInfo;
|
|
85
|
+
const runtimeLines = [];
|
|
86
|
+
if (runtimeInfo?.host)
|
|
87
|
+
runtimeLines.push(`Host: ${runtimeInfo.host}`);
|
|
88
|
+
if (runtimeInfo?.os) {
|
|
89
|
+
const archSuffix = runtimeInfo.arch ? ` (${runtimeInfo.arch})` : "";
|
|
90
|
+
runtimeLines.push(`OS: ${runtimeInfo.os}${archSuffix}`);
|
|
91
|
+
}
|
|
92
|
+
else if (runtimeInfo?.arch) {
|
|
93
|
+
runtimeLines.push(`Arch: ${runtimeInfo.arch}`);
|
|
94
|
+
}
|
|
95
|
+
if (runtimeInfo?.node)
|
|
96
|
+
runtimeLines.push(`Node: ${runtimeInfo.node}`);
|
|
97
|
+
if (runtimeInfo?.model)
|
|
98
|
+
runtimeLines.push(`Model: ${runtimeInfo.model}`);
|
|
99
|
+
const lines = [
|
|
100
|
+
"You are a personal AI assistant running inside Nexus.",
|
|
101
|
+
"",
|
|
102
|
+
"## Tooling",
|
|
103
|
+
"Tool availability (filtered by policy):",
|
|
104
|
+
toolLines.length > 0
|
|
105
|
+
? toolLines.join("\n")
|
|
106
|
+
: [
|
|
107
|
+
"Pi lists the standard tools above. This runtime enables:",
|
|
108
|
+
"- grep: search file contents for patterns",
|
|
109
|
+
"- find: find files by glob pattern",
|
|
110
|
+
"- ls: list directory contents",
|
|
111
|
+
"- bash: run shell commands (supports background via yieldMs/background)",
|
|
112
|
+
"- process: manage background bash sessions",
|
|
113
|
+
"- whatsapp_login: generate a WhatsApp QR code and wait for linking",
|
|
114
|
+
"- browser: control the Nexus dedicated browser",
|
|
115
|
+
"- canvas: present/eval/snapshot the Canvas",
|
|
116
|
+
"- nodes: list/describe/notify/camera/screen on paired nodes",
|
|
117
|
+
"- cron: manage cron jobs and wake events",
|
|
118
|
+
"- sessions_list: list sessions",
|
|
119
|
+
"- sessions_history: fetch session history",
|
|
120
|
+
"- sessions_send: send to another session",
|
|
121
|
+
].join("\n"),
|
|
122
|
+
disabledTools.length > 0
|
|
123
|
+
? `Unavailable tools (do not call): ${disabledTools.join(", ")}`
|
|
124
|
+
: "",
|
|
125
|
+
"TOOLS.md does not control tool availability; it is user guidance for how to use external tools.",
|
|
126
|
+
"",
|
|
127
|
+
"## Workspace",
|
|
128
|
+
`Your working directory is: ${params.workspaceDir}`,
|
|
129
|
+
"Treat this directory as the single global workspace for file operations unless explicitly instructed otherwise.",
|
|
130
|
+
"",
|
|
131
|
+
params.sandboxInfo?.enabled ? "## Sandbox" : "",
|
|
132
|
+
params.sandboxInfo?.enabled
|
|
133
|
+
? [
|
|
134
|
+
"Tool execution is isolated in a Docker sandbox.",
|
|
135
|
+
"Some tools may be unavailable due to sandbox policy.",
|
|
136
|
+
params.sandboxInfo.workspaceDir
|
|
137
|
+
? `Sandbox workspace: ${params.sandboxInfo.workspaceDir}`
|
|
138
|
+
: "",
|
|
139
|
+
params.sandboxInfo.browserControlUrl
|
|
140
|
+
? `Sandbox browser control URL: ${params.sandboxInfo.browserControlUrl}`
|
|
141
|
+
: "",
|
|
142
|
+
params.sandboxInfo.browserNoVncUrl
|
|
143
|
+
? `Sandbox browser observer (noVNC): ${params.sandboxInfo.browserNoVncUrl}`
|
|
144
|
+
: "",
|
|
145
|
+
]
|
|
146
|
+
.filter(Boolean)
|
|
147
|
+
.join("\n")
|
|
148
|
+
: "",
|
|
149
|
+
params.sandboxInfo?.enabled ? "" : "",
|
|
150
|
+
ownerLine ? "## User Identity" : "",
|
|
151
|
+
ownerLine ?? "",
|
|
152
|
+
ownerLine ? "" : "",
|
|
153
|
+
"## Workspace Files (injected)",
|
|
154
|
+
"These user-editable files are loaded by Nexus and included below in Project Context.",
|
|
155
|
+
"",
|
|
156
|
+
"## Messaging Safety",
|
|
157
|
+
"Never send streaming/partial replies to external messaging surfaces; only final replies should be delivered there.",
|
|
158
|
+
"Nexus handles message transport automatically; respond normally and your reply will be delivered to the current chat.",
|
|
159
|
+
"",
|
|
160
|
+
userTimezone || userTime ? "## Time" : "",
|
|
161
|
+
userTimezone ? `User timezone: ${userTimezone}` : "",
|
|
162
|
+
userTime ? `Current user time: ${userTime}` : "",
|
|
163
|
+
userTimezone || userTime ? "" : "",
|
|
164
|
+
"## Reply Tags",
|
|
165
|
+
"To request a native reply/quote on supported surfaces, include one tag in your reply:",
|
|
166
|
+
"- [[reply_to_current]] replies to the triggering message.",
|
|
167
|
+
"- [[reply_to:<id>]] replies to a specific message id when you have it.",
|
|
168
|
+
"Tags are stripped before sending; support depends on the current provider config.",
|
|
169
|
+
"",
|
|
170
|
+
];
|
|
171
|
+
if (extraSystemPrompt) {
|
|
172
|
+
lines.push("## Group Chat Context", extraSystemPrompt, "");
|
|
173
|
+
}
|
|
174
|
+
if (reasoningHint) {
|
|
175
|
+
lines.push("## Reasoning Format", reasoningHint, "");
|
|
176
|
+
}
|
|
177
|
+
lines.push("## Heartbeats", 'If you receive a heartbeat poll (a user message containing just "HEARTBEAT"), and there is nothing that needs attention, reply exactly:', "HEARTBEAT_OK", 'Nexus treats a leading/trailing "HEARTBEAT_OK" as a heartbeat ack (and may discard it).', 'If something needs attention, do NOT include "HEARTBEAT_OK"; reply with the alert text instead.', "", "## Runtime", ...runtimeLines, thinkHint);
|
|
178
|
+
return lines.filter(Boolean).join("\n");
|
|
179
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
const DEFAULT_AGENT_TIMEOUT_SECONDS = 600;
|
|
2
|
+
const normalizeNumber = (value) => typeof value === "number" && Number.isFinite(value)
|
|
3
|
+
? Math.floor(value)
|
|
4
|
+
: undefined;
|
|
5
|
+
export function resolveAgentTimeoutSeconds(cfg) {
|
|
6
|
+
const raw = normalizeNumber(cfg?.agent?.timeoutSeconds);
|
|
7
|
+
const seconds = raw ?? DEFAULT_AGENT_TIMEOUT_SECONDS;
|
|
8
|
+
return Math.max(seconds, 1);
|
|
9
|
+
}
|
|
10
|
+
export function resolveAgentTimeoutMs(opts) {
|
|
11
|
+
const minMs = Math.max(normalizeNumber(opts.minMs) ?? 1, 1);
|
|
12
|
+
const defaultMs = resolveAgentTimeoutSeconds(opts.cfg) * 1000;
|
|
13
|
+
const overrideMs = normalizeNumber(opts.overrideMs);
|
|
14
|
+
if (overrideMs !== undefined) {
|
|
15
|
+
if (overrideMs <= 0)
|
|
16
|
+
return defaultMs;
|
|
17
|
+
return Math.max(overrideMs, minMs);
|
|
18
|
+
}
|
|
19
|
+
const overrideSeconds = normalizeNumber(opts.overrideSeconds);
|
|
20
|
+
if (overrideSeconds !== undefined) {
|
|
21
|
+
if (overrideSeconds <= 0)
|
|
22
|
+
return defaultMs;
|
|
23
|
+
return Math.max(overrideSeconds * 1000, minMs);
|
|
24
|
+
}
|
|
25
|
+
return Math.max(defaultMs, minMs);
|
|
26
|
+
}
|