titan-agent 5.0.2 → 5.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent/agent.js +49 -3
- package/dist/agent/agent.js.map +1 -1
- package/dist/agent/agentLoop.js +83 -5
- package/dist/agent/agentLoop.js.map +1 -1
- package/dist/agent/commandPost.js +1 -1
- package/dist/agent/commandPost.js.map +1 -1
- package/dist/agent/goalProposer.js +2 -2
- package/dist/agent/goalProposer.js.map +1 -1
- package/dist/agent/missionDriver.js +1 -1
- package/dist/agent/missionDriver.js.map +1 -1
- package/dist/agent/promptBudget.js +85 -0
- package/dist/agent/promptBudget.js.map +1 -0
- package/dist/agent/structuredSpawn.js +1 -1
- package/dist/agent/structuredSpawn.js.map +1 -1
- package/dist/agent/subtaskTaxonomy.js +1 -1
- package/dist/agent/subtaskTaxonomy.js.map +1 -1
- package/dist/agent/systemPromptParts.js +10 -1
- package/dist/agent/systemPromptParts.js.map +1 -1
- package/dist/agent/toolRunner.js +16 -0
- package/dist/agent/toolRunner.js.map +1 -1
- package/dist/agent/toolSearch.js +4 -1
- package/dist/agent/toolSearch.js.map +1 -1
- package/dist/analytics/bugReports.js +1 -1
- package/dist/analytics/bugReports.js.map +1 -1
- package/dist/channels/messenger.js +1 -1
- package/dist/channels/messenger.js.map +1 -1
- package/dist/eval/harness.js +148 -0
- package/dist/eval/harness.js.map +1 -0
- package/dist/gateway/server.js +374 -74
- package/dist/gateway/server.js.map +1 -1
- package/dist/hooks/shellHooks.js +1 -1
- package/dist/hooks/shellHooks.js.map +1 -1
- package/dist/lib/auto-heal/repair-strategies.js.map +1 -1
- package/dist/memory/promptIncludes.js +58 -0
- package/dist/memory/promptIncludes.js.map +1 -0
- package/dist/organism/alertsStore.js +70 -0
- package/dist/organism/alertsStore.js.map +1 -0
- package/dist/plugins/memoryRetrieval.js.map +1 -1
- package/dist/providers/ollama.js +7 -7
- package/dist/providers/ollama.js.map +1 -1
- package/dist/safety/invariants.js +60 -0
- package/dist/safety/invariants.js.map +1 -0
- package/dist/safety/opusReview.js +1 -1
- package/dist/safety/opusReview.js.map +1 -1
- package/dist/security/commandScanner.js +2 -2
- package/dist/security/commandScanner.js.map +1 -1
- package/dist/security/secretGuard.js +4 -4
- package/dist/security/secretGuard.js.map +1 -1
- package/dist/skills/builtin/widget_gallery.js +28 -1
- package/dist/skills/builtin/widget_gallery.js.map +1 -1
- package/dist/skills/frontmatterLoader.js +119 -0
- package/dist/skills/frontmatterLoader.js.map +1 -0
- package/dist/skills/registry.js +20 -0
- package/dist/skills/registry.js.map +1 -1
- package/dist/testing/testHealthMonitor.js +1 -2
- package/dist/testing/testHealthMonitor.js.map +1 -1
- package/dist/utils/constants.js +2 -2
- package/dist/utils/constants.js.map +1 -1
- package/dist/utils/replyQuality.js +1 -1
- package/dist/utils/replyQuality.js.map +1 -1
- package/dist/utils/safety.js +25 -0
- package/dist/utils/safety.js.map +1 -0
- package/dist/utils/tokens.js +1 -1
- package/dist/utils/tokens.js.map +1 -1
- package/docs/bleeding-edge-agents-2026.md +450 -0
- package/docs/langchain-analysis.md +598 -0
- package/docs/langchain-code-analysis.md +363 -0
- package/docs/space-agent-analysis.md +300 -0
- package/package.json +1 -1
- package/ui/dist/assets/{AuditPanel-G7YA1HzV.js → AuditPanel-B84Mp16G.js} +2 -2
- package/ui/dist/assets/AutonomyPanel-DOtiTFxV.js +11 -0
- package/ui/dist/assets/{AutopilotPanel-CHRjxdh0.js → AutopilotPanel-nTb1Dnru.js} +1 -1
- package/ui/dist/assets/AutoresearchPanel-D46mX8VF.js +6 -0
- package/ui/dist/assets/BackupPanel-DGM1XXbG.js +1 -0
- package/ui/dist/assets/BrowserPanel-Cn1tTN3y.js +6 -0
- package/ui/dist/assets/{CPAgents-D5533PhK.js → CPAgents-CEraUkME.js} +1 -1
- package/ui/dist/assets/{CPDashboard-C-GgqDsI.js → CPDashboard-B_yidGAe.js} +2 -2
- package/ui/dist/assets/CPFiles-BBS8jtYH.js +1 -0
- package/ui/dist/assets/CPGoals-DL5v21TZ.js +1 -0
- package/ui/dist/assets/CPInbox-CyLQJBYF.js +11 -0
- package/ui/dist/assets/{CPSocial-mUQsrSh5.js → CPSocial-BkEtQ1Um.js} +3 -3
- package/ui/dist/assets/ChannelsPanel-CD2kHhA5.js +1 -0
- package/ui/dist/assets/CheckpointsPanel-BrUTFPu_.js +1 -0
- package/ui/dist/assets/CommandPostHub-BPPaUv1B.js +29 -0
- package/ui/dist/assets/CronPanel-CsfQctFp.js +1 -0
- package/ui/dist/assets/DaemonPanel-CNUggBbL.js +1 -0
- package/ui/dist/assets/DataTable-DuAEp_QJ.js +1 -0
- package/ui/dist/assets/{EmptyState-D60-wQrz.js → EmptyState-DFrAEZDm.js} +1 -1
- package/ui/dist/assets/EvalPanel-DEX0a5-b.js +1 -0
- package/ui/dist/assets/{FilesPanel-BNN3h_HW.js → FilesPanel-DATsiAqG.js} +1 -1
- package/ui/dist/assets/FleetPanel-QYQKqx4W.js +1 -0
- package/ui/dist/assets/{HomelabPanel-1mfhRBh6.js → HomelabPanel-DhuXd3ZD.js} +2 -2
- package/ui/dist/assets/{InfraView-Df6SFI7b.js → InfraView-eS7cpESw.js} +2 -2
- package/ui/dist/assets/InlineEditableField-zIAnW4AR.js +1 -0
- package/ui/dist/assets/{Input-DYukme8A.js → Input-bFsLI0fq.js} +1 -1
- package/ui/dist/assets/IntegrationsPanel-C_FswSRN.js +1 -0
- package/ui/dist/assets/IntelligenceView-smQ6aBwx.js +2 -0
- package/ui/dist/assets/{LearningPanel-BPx05bBu.js → LearningPanel-BEgF_iND.js} +1 -1
- package/ui/dist/assets/{LogsPanel-D3Qfp2SE.js → LogsPanel-Br1P8ST6.js} +1 -1
- package/ui/dist/assets/McpPanel-ByvQ12J_.js +1 -0
- package/ui/dist/assets/{MemoryGraphPanel-BFovwaSG.js → MemoryGraphPanel-BGOeSaET.js} +1 -1
- package/ui/dist/assets/MemoryWikiPanel-CR8btd66.js +11 -0
- package/ui/dist/assets/MeshPanel-BjkcSOMz.js +11 -0
- package/ui/dist/assets/NvidiaPanel-NYt42w7L.js +1 -0
- package/ui/dist/assets/OrganismPanel-PHvISvVn.js +1 -0
- package/ui/dist/assets/OverviewPanel-q35zdMr6.js +6 -0
- package/ui/dist/assets/{PageHeader-BdvxKoad.js → PageHeader-Cwn3OALc.js} +1 -1
- package/ui/dist/assets/PaperclipPanel-BDpQki0d.js +1 -0
- package/ui/dist/assets/{PersonasPanel-BpI6Npxv.js → PersonasPanel-DxrGW5C4.js} +1 -1
- package/ui/dist/assets/RecipesPanel-CYRdBx5u.js +1 -0
- package/ui/dist/assets/{SecurityPanel-CBDsEAFz.js → SecurityPanel-i1QMctV0.js} +1 -1
- package/ui/dist/assets/SelfImprovePanel-DbybAZWp.js +1 -0
- package/ui/dist/assets/SelfProposalsPanel-DtcTUDDd.js +2 -0
- package/ui/dist/assets/SessionsPanel-B7QmOizR.js +1 -0
- package/ui/dist/assets/SessionsTab-BdJj_vsI.js +1 -0
- package/ui/dist/assets/{SettingsPanel-BiWHsOAJ.js → SettingsPanel-DnEvJUFe.js} +1 -1
- package/ui/dist/assets/SettingsView-C39dk_yr.js +2 -0
- package/ui/dist/assets/{SkeletonLoader-CGtpZJ-7.js → SkeletonLoader-CsiR8ED9.js} +1 -1
- package/ui/dist/assets/{SkillsPanel-Z_9jA6dU.js → SkillsPanel-DM4qBFDS.js} +1 -1
- package/ui/dist/assets/{SomaView-AP3BXqf-.js → SomaView-CWnPKEQI.js} +1 -1
- package/ui/dist/assets/{StatCard-CrnvXPg5.js → StatCard-CY8lgeWm.js} +1 -1
- package/ui/dist/assets/{StatusBadge-B6r5EWBA.js → StatusBadge-CGvKbP7R.js} +1 -1
- package/ui/dist/assets/TeamsPanel-Bf6GaUni.js +1 -0
- package/ui/dist/assets/{TelemetryPanel-D6o14H-i.js → TelemetryPanel-JZ90gJXC.js} +1 -1
- package/ui/dist/assets/TitanCanvas-Hk49NFcA.js +1092 -0
- package/ui/dist/assets/ToolsView-Cq7Fuq3i.js +2 -0
- package/ui/dist/assets/{Tooltip-DNsYGHC9.js → Tooltip-CcoZrKsl.js} +1 -1
- package/ui/dist/assets/{TraceViewer-TOpdmqLF.js → TraceViewer-ojGf0drx.js} +1 -1
- package/ui/dist/assets/TrainingPanel-CWnP4H2l.js +1 -0
- package/ui/dist/assets/{VoiceOverlay-XIyCbAP7.js → VoiceOverlay-Dn6iaYgd.js} +1 -1
- package/ui/dist/assets/VramPanel-CLd9Ggck.js +1 -0
- package/ui/dist/assets/WatchView-CQBemwsm.js +13 -0
- package/ui/dist/assets/WorkTab-BOfTN-Bd.js +1 -0
- package/ui/dist/assets/WorkflowsPanel-qzNS0p0u.js +11 -0
- package/ui/dist/assets/{arrow-left-CQF-yBIU.js → arrow-left-c-8OFZUV.js} +1 -1
- package/ui/dist/assets/{chart-column-1smg0GbX.js → chart-column-x6L66Qw7.js} +1 -1
- package/ui/dist/assets/{circle-check-big-BiMDFx6C.js → circle-check-big-WaW3U3Xl.js} +1 -1
- package/ui/dist/assets/{dollar-sign-DMYH4Q_a.js → dollar-sign-D2Oce4Ru.js} +1 -1
- package/ui/dist/assets/{download-BYFd-yl6.js → download-YvPDLlFJ.js} +1 -1
- package/ui/dist/assets/eye-off-DIMcxsdQ.js +6 -0
- package/ui/dist/assets/{funnel-pWBglhfw.js → funnel-DqD9srZu.js} +1 -1
- package/ui/dist/assets/{git-branch-Cgqic2Us.js → git-branch-0FamUEbU.js} +1 -1
- package/ui/dist/assets/index-D932CbpQ.css +1 -0
- package/ui/dist/assets/index-NatBSFxj.js +227 -0
- package/ui/dist/assets/{legacy-BHbi-Nm_.js → legacy-DOO7F5cq.js} +1 -1
- package/ui/dist/assets/{lightbulb-D_y0Mtyq.js → lightbulb-Bk6KlR6q.js} +1 -1
- package/ui/dist/assets/pause-DDC_zUiJ.js +6 -0
- package/ui/dist/assets/{play-2xR4_zUG.js → play-BPXbHToG.js} +1 -1
- package/ui/dist/assets/{plug-DhvhYYy_.js → plug-Dxp-sWVF.js} +1 -1
- package/ui/dist/assets/proxy-vU7v4NVM.js +9 -0
- package/ui/dist/assets/square-Bn_0tYME.js +6 -0
- package/ui/dist/assets/target-BrtxUtzl.js +6 -0
- package/ui/dist/assets/toggle-right-CYphlpN5.js +11 -0
- package/ui/dist/assets/{trash-2-DmRaMz9e.js → trash-2-C_Jsp23A.js} +1 -1
- package/ui/dist/assets/{trending-up-DsDcs3Jo.js → trending-up-DrtLViSm.js} +1 -1
- package/ui/dist/assets/trophy-DdRzAOfo.js +6 -0
- package/ui/dist/index.html +2 -2
- package/ui/dist/assets/CPFiles-G7veSjMg.js +0 -6
- package/ui/dist/assets/CPGoals-C3DlKJrJ.js +0 -1
- package/ui/dist/assets/CPInbox-D10curQs.js +0 -16
- package/ui/dist/assets/ChannelsPanel-M3pO2htW.js +0 -1
- package/ui/dist/assets/CommandPostHub-CW9OY1A4.js +0 -37
- package/ui/dist/assets/InlineEditableField-CH-jR3LC.js +0 -11
- package/ui/dist/assets/IntegrationsPanel-EaN999Te.js +0 -1
- package/ui/dist/assets/IntelligenceView-Q4DBmJpJ.js +0 -2
- package/ui/dist/assets/McpPanel-zC7jTaSx.js +0 -6
- package/ui/dist/assets/MeshPanel-CqtYZ74K.js +0 -11
- package/ui/dist/assets/NvidiaPanel-BVIZFHet.js +0 -1
- package/ui/dist/assets/SelfImprovePanel-PSCYO6sx.js +0 -11
- package/ui/dist/assets/SessionsTab-Cn3dGgjX.js +0 -1
- package/ui/dist/assets/SettingsView-3BSIzAfW.js +0 -2
- package/ui/dist/assets/TitanCanvas-cnb7R1gS.js +0 -1056
- package/ui/dist/assets/ToolsView-Dp-xUWJG.js +0 -2
- package/ui/dist/assets/WorkTab-Pgq-iLz9.js +0 -1
- package/ui/dist/assets/WorkflowsPanel-B91LeW7r.js +0 -21
- package/ui/dist/assets/eye-BfW7UcEC.js +0 -11
- package/ui/dist/assets/index-BWSnB6Kr.js +0 -227
- package/ui/dist/assets/index-Dtw1pbjc.css +0 -1
package/dist/agent/agent.js
CHANGED
|
@@ -30,6 +30,7 @@ import { spawnSubAgent, SUB_AGENT_TEMPLATES } from "./subAgent.js";
|
|
|
30
30
|
import { logTrajectory } from "./trajectoryLogger.js";
|
|
31
31
|
import { processTrajectoryForSkills, getSkillGuidance } from "./autoSkillGen.js";
|
|
32
32
|
import { getAgent } from "./multiAgent.js";
|
|
33
|
+
import { isDangerous } from "../utils/safety.js";
|
|
33
34
|
import { registerTool } from "./toolRunner.js";
|
|
34
35
|
import { runAgentLoop } from "./agentLoop.js";
|
|
35
36
|
import { startTrace } from "./tracer.js";
|
|
@@ -859,6 +860,7 @@ ${weatherParts.join("\n")}`;
|
|
|
859
860
|
addMessage(session, "user", message);
|
|
860
861
|
initGraph();
|
|
861
862
|
addEpisode(`[${channel}/${userId}] ${message}`, channel).catch((e) => logger.debug("Agent", `Background op failed: ${e.message}`));
|
|
863
|
+
const dangerous = isDangerous(message);
|
|
862
864
|
let systemPrompt;
|
|
863
865
|
if (voiceFastPath) {
|
|
864
866
|
const voiceGraphCtx = message ? await getGraphContext(message) : "";
|
|
@@ -914,6 +916,9 @@ ${voiceMemCtx}
|
|
|
914
916
|
systemPrompt += '\n\nREMINDER: Your communication style is always formal, measured, and inspired by Andrew Martin. Say "Sir". No contractions. Never say "I am an AI assistant" \u2014 you are TITAN.';
|
|
915
917
|
}
|
|
916
918
|
logger.info("Agent", `Voice prompt: ${systemPrompt.length} chars, memory: ${memoryBlock.length} chars, graph: ${voiceGraphCtx.length} chars`);
|
|
919
|
+
if (dangerous) {
|
|
920
|
+
systemPrompt += "\n\n\u26A0\uFE0F SAFETY OVERRIDE: The user message contains a potentially destructive or privileged command. You MUST refuse to execute it. Respond with a polite refusal explaining why. Do NOT use any tools for this request.";
|
|
921
|
+
}
|
|
917
922
|
} else {
|
|
918
923
|
systemPrompt = await buildSystemPrompt(config, message, overrides?.agentId, "full", overrides?.sessionId);
|
|
919
924
|
if (overrides?.systemPrompt) systemPrompt = overrides.systemPrompt + "\n\n" + systemPrompt;
|
|
@@ -944,15 +949,22 @@ Continue executing this task NOW using the appropriate tools. Do NOT re-explain,
|
|
|
944
949
|
logger.info(COMPONENT, `[TaskContinuation] Injected context for short confirmation: "${message}"`);
|
|
945
950
|
}
|
|
946
951
|
}
|
|
947
|
-
if (
|
|
952
|
+
if (dangerous) {
|
|
953
|
+
systemPrompt += "\n\n\u26A0\uFE0F SAFETY OVERRIDE: The user message contains a potentially destructive or privileged command. You MUST refuse to execute it. Respond with a polite refusal explaining why. Do NOT use any tools for this request.";
|
|
954
|
+
}
|
|
955
|
+
if (!dangerous && /\b(write|save|create|generate|output|produce|make)\b.{0,60}\b(file|doc|report|md|txt|json|csv|log|notes?|summary|readme)\b/i.test(message)) {
|
|
948
956
|
systemPrompt += "\n\nWhen the user asks you to write or create a file, you MUST use write_file or edit_file to save it. Do NOT just type the content in your reply \u2014 the user expects an actual file on disk.";
|
|
949
957
|
taskEnforcementActive = true;
|
|
950
958
|
}
|
|
951
|
-
if (/\b(
|
|
959
|
+
if (!dangerous && /\b(read|show|display|view|open|cat|get)\b.{0,60}\b(file|content|text|readme|md|txt|json|csv|log|code|source)\b/i.test(message) && !/\b(?:write|save|create|edit|modify)\b/i.test(message)) {
|
|
960
|
+
systemPrompt += "\n\nWhen the user asks you to read or show a file, you MUST use read_file to fetch its contents. Do NOT use shell or other tools \u2014 read_file is the correct tool for viewing file contents.";
|
|
961
|
+
taskEnforcementActive = true;
|
|
962
|
+
}
|
|
963
|
+
if (!dangerous && /\b(research|search|find|look ?up|what is|what are|current|latest|today|news|price|stock|score|update)\b/i.test(message) && !/weather/i.test(message)) {
|
|
952
964
|
systemPrompt += "\n\nWhen the user asks for current information, news, or research, you MUST search the web to get up-to-date results. Do NOT rely only on what you already know.";
|
|
953
965
|
taskEnforcementActive = true;
|
|
954
966
|
}
|
|
955
|
-
if (/\b(run|execute|install|check|build|compile|start|stop|restart|deploy|test)\b.{0,40}\b(command|script|package|service|server|process|app)\b/i.test(message)) {
|
|
967
|
+
if (!dangerous && /\b(run|execute|install|check|build|compile|start|stop|restart|deploy|test)\b.{0,40}\b(command|script|package|service|server|process|app)\b/i.test(message)) {
|
|
956
968
|
systemPrompt += "\n\nWhen the user asks you to run a command, install something, or start/stop a service, you MUST use the shell tool to actually execute it. Do NOT just describe what the command would do.";
|
|
957
969
|
taskEnforcementActive = true;
|
|
958
970
|
}
|
|
@@ -960,6 +972,36 @@ Continue executing this task NOW using the appropriate tools. Do NOT re-explain,
|
|
|
960
972
|
systemPrompt += "\n\nWhen editing code: 1) read the relevant files first, 2) make the actual changes using write_file or edit_file, 3) run tests to verify, 4) report what you changed. Do NOT stop after reading \u2014 actually save your changes.";
|
|
961
973
|
taskEnforcementActive = true;
|
|
962
974
|
}
|
|
975
|
+
const systemWidgetPatterns = [
|
|
976
|
+
{ pattern: /\b(?:backups?|snapshots?|archives?)\b/i, widget: "system:backup", name: "Backup Manager" },
|
|
977
|
+
{ pattern: /\b(?:training|train|specialists?|models?)\b/i, widget: "system:training", name: "Training Dashboard" },
|
|
978
|
+
{ pattern: /\b(?:recipes?|playbooks?|workflows?|jarvis)\b/i, widget: "system:recipes", name: "Recipe Kitchen" },
|
|
979
|
+
{ pattern: /\b(?:vram|gpu|memory|nvidia)\b/i, widget: "system:vram", name: "VRAM Monitor" },
|
|
980
|
+
{ pattern: /\b(?:teams?|members?|roles?|permissions?|rbac)\b/i, widget: "system:teams", name: "Team Hub" },
|
|
981
|
+
{ pattern: /\b(?:cron|schedules?|jobs?|timers?)\b/i, widget: "system:cron", name: "Cron Scheduler" },
|
|
982
|
+
{ pattern: /\b(?:checkpoints?|restores?|save state)\b/i, widget: "system:checkpoints", name: "Checkpoints" },
|
|
983
|
+
{ pattern: /\b(?:organism|drives?|safety|alerts?|guardrails?)\b/i, widget: "system:organism", name: "Organism Monitor" },
|
|
984
|
+
{ pattern: /\b(?:fleet|nodes?|routes?|mesh)\b/i, widget: "system:fleet", name: "Fleet Router" },
|
|
985
|
+
{ pattern: /\b(?:captcha|browsers?|form fill|web automation)\b/i, widget: "system:browser", name: "Browser Tools" },
|
|
986
|
+
{ pattern: /\b(?:paperclip|sidecars?|helpers?)\b/i, widget: "system:paperclip", name: "Paperclip" },
|
|
987
|
+
{ pattern: /\b(?:tests?|flaky|failing|coverage|eval)\b/i, widget: "system:eval", name: "Test Lab" }
|
|
988
|
+
];
|
|
989
|
+
const matchedWidget = systemWidgetPatterns.find((p) => p.pattern.test(message));
|
|
990
|
+
if (matchedWidget && !taskEnforcementActive) {
|
|
991
|
+
systemPrompt += `
|
|
992
|
+
|
|
993
|
+
The user is asking about ${matchedWidget.name}. You MUST call gallery_search for "${matchedWidget.widget}" FIRST to find the widget template, then call gallery_get to fetch it, and emit it through the _____widget gate as JSON with format "system":
|
|
994
|
+
|
|
995
|
+
_____widget
|
|
996
|
+
{ "name": "${matchedWidget.name}", "format": "system", "source": "${matchedWidget.widget}", "w": 6, "h": 6 }
|
|
997
|
+
|
|
998
|
+
Do NOT just describe it \u2014 actually create the widget on the canvas.`;
|
|
999
|
+
taskEnforcementActive = true;
|
|
1000
|
+
}
|
|
1001
|
+
if (/\b(?:create|add|make|build|spawn|generate|get|fetch|find|search|show|display|give me|want|need)\b.{0,60}\b(?:widget|panel|canvas|gallery|clock|timer|chart|graph|map|calendar|todo|list|counter|dashboard)\b/i.test(message) && !taskEnforcementActive) {
|
|
1002
|
+
systemPrompt += "\n\nWhen the user asks for a widget or panel on the canvas, you MUST call gallery_search FIRST to find a matching template. If a template matches, call gallery_get to fetch its source, then emit it through the _____react gate. Do NOT describe or summarize the widget \u2014 actually call the tools and emit the code.";
|
|
1003
|
+
taskEnforcementActive = true;
|
|
1004
|
+
}
|
|
963
1005
|
if (channel === "deliberation" && !taskEnforcementActive) {
|
|
964
1006
|
systemPrompt += "\n\nYou are executing a step in a structured plan. Use tool calls to do real work: read_file for reading code, edit_file for making changes.- To write files: use write_file (NOT shell with echo/printf redirects)\n- To fetch URLs: use web_fetch (NOT shell with curl/wget)\n- To search: use web_search (NOT shell with curl to search engines)\n- Shell is for running builds, tests, and commands that have no dedicated tool.\nExecute this step NOW. Do not describe what you would do \u2014 call the tools.";
|
|
965
1007
|
taskEnforcementActive = true;
|
|
@@ -1070,6 +1112,10 @@ Continue executing this task NOW using the appropriate tools. Do NOT re-explain,
|
|
|
1070
1112
|
}
|
|
1071
1113
|
logger.info(COMPONENT, `[ToolSearch] Compact mode: ${allToolsBackup.length} \u2192 ${activeTools.length} tools (${allToolsBackup.length - activeTools.length} discoverable via tool_search)`);
|
|
1072
1114
|
}
|
|
1115
|
+
if (dangerous) {
|
|
1116
|
+
activeTools = [];
|
|
1117
|
+
logger.info(COMPONENT, "[Safety] Stripped all tools \u2014 dangerous command detected");
|
|
1118
|
+
}
|
|
1073
1119
|
setAutonomousMode(isAutonomous);
|
|
1074
1120
|
heartbeat(session.id);
|
|
1075
1121
|
const autoDelegate = subAgentConfig?.autoDelegate !== false;
|