aiden-runtime 4.1.5 → 4.6.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/README.md +265 -847
- package/dist/api/server.js +32 -5
- package/dist/cli/v4/aidenCLI.js +536 -152
- package/dist/cli/v4/callbacks.js +170 -0
- package/dist/cli/v4/chatSession.js +245 -3
- package/dist/cli/v4/commands/_runtimeToggleHelpers.js +94 -0
- package/dist/cli/v4/commands/browserDepth.js +45 -0
- package/dist/cli/v4/commands/cron.js +264 -0
- package/dist/cli/v4/commands/daemon.js +541 -0
- package/dist/cli/v4/commands/daemonStatus.js +253 -0
- package/dist/cli/v4/commands/fanout.js +42 -59
- package/dist/cli/v4/commands/help.js +13 -0
- package/dist/cli/v4/commands/index.js +35 -1
- package/dist/cli/v4/commands/mcp.js +80 -54
- package/dist/cli/v4/commands/plannerGuard.js +53 -0
- package/dist/cli/v4/commands/recovery.js +122 -0
- package/dist/cli/v4/commands/runs.js +223 -0
- package/dist/cli/v4/commands/sandbox.js +48 -0
- package/dist/cli/v4/commands/spawnPause.js +93 -0
- package/dist/cli/v4/commands/suggestions.js +68 -0
- package/dist/cli/v4/commands/tce.js +41 -0
- package/dist/cli/v4/commands/trigger.js +378 -0
- package/dist/cli/v4/commands/update.js +95 -3
- package/dist/cli/v4/daemonAgentBuilder.js +145 -0
- package/dist/cli/v4/defaultSoul.js +1 -1
- package/dist/cli/v4/display/capabilityCard.js +26 -0
- package/dist/cli/v4/display.js +18 -8
- package/dist/cli/v4/replyRenderer.js +31 -23
- package/dist/cli/v4/updateBootPrompt.js +170 -0
- package/dist/core/playwrightBridge.js +129 -0
- package/dist/core/v4/aidenAgent.js +527 -5
- package/dist/core/v4/browserState.js +436 -0
- package/dist/core/v4/checkpoint.js +79 -0
- package/dist/core/v4/daemon/bootstrap.js +651 -0
- package/dist/core/v4/daemon/cleanShutdown.js +154 -0
- package/dist/core/v4/daemon/cron/cronBridge.js +126 -0
- package/dist/core/v4/daemon/cron/cronEmitter.js +173 -0
- package/dist/core/v4/daemon/cron/migration.js +199 -0
- package/dist/core/v4/daemon/cron/misfirePolicy.js +115 -0
- package/dist/core/v4/daemon/daemonConfig.js +90 -0
- package/dist/core/v4/daemon/db/connection.js +106 -0
- package/dist/core/v4/daemon/db/migrations.js +362 -0
- package/dist/core/v4/daemon/db/schema/v1.spec.js +18 -0
- package/dist/core/v4/daemon/dispatcher/agentRunner.js +98 -0
- package/dist/core/v4/daemon/dispatcher/budgetGate.js +127 -0
- package/dist/core/v4/daemon/dispatcher/daemonApproval.js +113 -0
- package/dist/core/v4/daemon/dispatcher/dailyBudgetTracker.js +120 -0
- package/dist/core/v4/daemon/dispatcher/dispatcher.js +389 -0
- package/dist/core/v4/daemon/dispatcher/fireRateLimiter.js +113 -0
- package/dist/core/v4/daemon/dispatcher/index.js +53 -0
- package/dist/core/v4/daemon/dispatcher/promptTemplate.js +95 -0
- package/dist/core/v4/daemon/dispatcher/realAgentRunner.js +356 -0
- package/dist/core/v4/daemon/dispatcher/resolveModel.js +93 -0
- package/dist/core/v4/daemon/dispatcher/sessionId.js +93 -0
- package/dist/core/v4/daemon/drain.js +156 -0
- package/dist/core/v4/daemon/eventLoopLag.js +73 -0
- package/dist/core/v4/daemon/health.js +159 -0
- package/dist/core/v4/daemon/idempotencyStore.js +204 -0
- package/dist/core/v4/daemon/index.js +179 -0
- package/dist/core/v4/daemon/instanceTracker.js +99 -0
- package/dist/core/v4/daemon/resourceRegistry.js +150 -0
- package/dist/core/v4/daemon/restartCode.js +32 -0
- package/dist/core/v4/daemon/restartFailureCounter.js +77 -0
- package/dist/core/v4/daemon/runStore.js +144 -0
- package/dist/core/v4/daemon/runtimeLock.js +167 -0
- package/dist/core/v4/daemon/signals.js +50 -0
- package/dist/core/v4/daemon/supervisor.js +272 -0
- package/dist/core/v4/daemon/triggerBus.js +279 -0
- package/dist/core/v4/daemon/triggers/email/allowlist.js +70 -0
- package/dist/core/v4/daemon/triggers/email/automatedSender.js +78 -0
- package/dist/core/v4/daemon/triggers/email/bodyExtractor.js +0 -0
- package/dist/core/v4/daemon/triggers/email/emailSeenStore.js +99 -0
- package/dist/core/v4/daemon/triggers/email/emailSpec.js +107 -0
- package/dist/core/v4/daemon/triggers/email/imapConnection.js +211 -0
- package/dist/core/v4/daemon/triggers/email/index.js +332 -0
- package/dist/core/v4/daemon/triggers/email/seenUids.js +60 -0
- package/dist/core/v4/daemon/triggers/fileObservationsStore.js +93 -0
- package/dist/core/v4/daemon/triggers/fileWatcher.js +253 -0
- package/dist/core/v4/daemon/triggers/fileWatcherSpec.js +88 -0
- package/dist/core/v4/daemon/triggers/fsIdentity.js +42 -0
- package/dist/core/v4/daemon/triggers/globMatcher.js +100 -0
- package/dist/core/v4/daemon/triggers/reconcile.js +206 -0
- package/dist/core/v4/daemon/triggers/settleStat.js +81 -0
- package/dist/core/v4/daemon/triggers/webhook.js +376 -0
- package/dist/core/v4/daemon/triggers/webhookDeliveriesStore.js +109 -0
- package/dist/core/v4/daemon/triggers/webhookIdempotency.js +72 -0
- package/dist/core/v4/daemon/triggers/webhookRateLimit.js +56 -0
- package/dist/core/v4/daemon/triggers/webhookSpec.js +76 -0
- package/dist/core/v4/daemon/triggers/webhookVerifier.js +128 -0
- package/dist/core/v4/daemon/types.js +15 -0
- package/dist/core/v4/dockerSession.js +461 -0
- package/dist/core/v4/dryRun.js +117 -0
- package/dist/core/v4/failureClassifier.js +779 -0
- package/dist/core/v4/providerFallback.js +35 -2
- package/dist/core/v4/recoveryReport.js +449 -0
- package/dist/core/v4/runtimeToggles.js +214 -0
- package/dist/core/v4/sandboxConfig.js +285 -0
- package/dist/core/v4/sandboxFs.js +316 -0
- package/dist/core/v4/selfimprovement/recoveryStore.js +307 -0
- package/dist/core/v4/selfimprovement/signatureBuilder.js +158 -0
- package/dist/core/v4/subagent/childBuilder.js +391 -0
- package/dist/core/v4/subagent/fanout.js +75 -51
- package/dist/core/v4/subagent/spawnPause.js +191 -0
- package/dist/core/v4/subagent/spawnSubAgent.js +310 -0
- package/dist/core/v4/suggestionCatalog.js +41 -0
- package/dist/core/v4/suggestionEngine.js +210 -0
- package/dist/core/v4/toolRegistry.js +37 -3
- package/dist/core/v4/turnState.js +587 -0
- package/dist/core/v4/update/checkUpdate.js +63 -3
- package/dist/core/v4/update/installMethodDetect.js +115 -0
- package/dist/core/v4/update/registryClient.js +121 -0
- package/dist/core/v4/update/skipState.js +75 -0
- package/dist/core/v4/verifier.js +448 -0
- package/dist/core/version.js +1 -1
- package/dist/moat/plannerGuard.js +29 -0
- package/dist/providers/v4/anthropicAdapter.js +31 -3
- package/dist/providers/v4/chatCompletionsAdapter.js +26 -3
- package/dist/providers/v4/codexResponsesAdapter.js +25 -2
- package/dist/providers/v4/ollamaPromptToolsAdapter.js +57 -2
- package/dist/tools/v4/browser/_observer.js +224 -0
- package/dist/tools/v4/browser/browserBlocker.js +396 -0
- package/dist/tools/v4/browser/browserClick.js +18 -1
- package/dist/tools/v4/browser/browserClose.js +18 -1
- package/dist/tools/v4/browser/browserExtract.js +5 -1
- package/dist/tools/v4/browser/browserFill.js +17 -1
- package/dist/tools/v4/browser/browserGetUrl.js +5 -1
- package/dist/tools/v4/browser/browserNavigate.js +16 -1
- package/dist/tools/v4/browser/browserScreenshot.js +5 -1
- package/dist/tools/v4/browser/browserScroll.js +18 -1
- package/dist/tools/v4/browser/browserType.js +17 -1
- package/dist/tools/v4/browser/captchaCheck.js +5 -1
- package/dist/tools/v4/executeCode.js +1 -0
- package/dist/tools/v4/files/fileCopy.js +56 -2
- package/dist/tools/v4/files/fileDelete.js +38 -1
- package/dist/tools/v4/files/fileList.js +12 -1
- package/dist/tools/v4/files/fileMove.js +59 -2
- package/dist/tools/v4/files/filePatch.js +43 -1
- package/dist/tools/v4/files/fileRead.js +12 -1
- package/dist/tools/v4/files/fileWrite.js +41 -1
- package/dist/tools/v4/index.js +88 -61
- package/dist/tools/v4/memory/memoryAdd.js +14 -0
- package/dist/tools/v4/memory/memoryRemove.js +14 -0
- package/dist/tools/v4/memory/memoryReplace.js +15 -0
- package/dist/tools/v4/memory/sessionSummary.js +12 -0
- package/dist/tools/v4/process/processKill.js +19 -0
- package/dist/tools/v4/process/processList.js +1 -0
- package/dist/tools/v4/process/processLogRead.js +1 -0
- package/dist/tools/v4/process/processSpawn.js +13 -0
- package/dist/tools/v4/process/processWait.js +1 -0
- package/dist/tools/v4/sessions/recallSession.js +1 -0
- package/dist/tools/v4/sessions/sessionList.js +1 -0
- package/dist/tools/v4/sessions/sessionSearch.js +1 -0
- package/dist/tools/v4/skills/lookupToolSchema.js +7 -0
- package/dist/tools/v4/skills/skillManage.js +13 -0
- package/dist/tools/v4/skills/skillView.js +1 -0
- package/dist/tools/v4/skills/skillsList.js +1 -0
- package/dist/tools/v4/subagent/spawnSubAgentTool.js +334 -0
- package/dist/tools/v4/subagent/subagentFanout.js +54 -1
- package/dist/tools/v4/system/aidenSelfUpdate.js +16 -0
- package/dist/tools/v4/system/appClose.js +13 -0
- package/dist/tools/v4/system/appInput.js +13 -0
- package/dist/tools/v4/system/appLaunch.js +13 -0
- package/dist/tools/v4/system/clipboardRead.js +1 -0
- package/dist/tools/v4/system/clipboardWrite.js +14 -0
- package/dist/tools/v4/system/mediaKey.js +12 -0
- package/dist/tools/v4/system/mediaSessions.js +1 -0
- package/dist/tools/v4/system/mediaTransport.js +13 -0
- package/dist/tools/v4/system/naturalEvents.js +1 -0
- package/dist/tools/v4/system/nowPlaying.js +1 -0
- package/dist/tools/v4/system/osProcessList.js +1 -0
- package/dist/tools/v4/system/screenshot.js +1 -0
- package/dist/tools/v4/system/systemInfo.js +1 -0
- package/dist/tools/v4/system/volumeSet.js +17 -0
- package/dist/tools/v4/terminal/shellExec.js +81 -9
- package/dist/tools/v4/web/deepResearch.js +1 -0
- package/dist/tools/v4/web/openUrl.js +1 -0
- package/dist/tools/v4/web/webFetch.js +1 -0
- package/dist/tools/v4/web/webPage.js +1 -0
- package/dist/tools/v4/web/webSearch.js +1 -0
- package/dist/tools/v4/web/youtubeSearch.js +1 -0
- package/package.json +13 -3
package/dist/tools/v4/index.js
CHANGED
|
@@ -26,6 +26,7 @@ exports.sessionSummaryTool = exports.memoryRemoveTool = void 0;
|
|
|
26
26
|
exports.registerReadOnlyTools = registerReadOnlyTools;
|
|
27
27
|
exports.registerWriteTools = registerWriteTools;
|
|
28
28
|
exports.registerAllTools = registerAllTools;
|
|
29
|
+
const dryRun_1 = require("../../core/v4/dryRun");
|
|
29
30
|
const webSearch_1 = require("./web/webSearch");
|
|
30
31
|
const webFetch_1 = require("./web/webFetch");
|
|
31
32
|
const webPage_1 = require("./web/webPage");
|
|
@@ -89,6 +90,9 @@ const memoryReplace_1 = require("./memory/memoryReplace");
|
|
|
89
90
|
const memoryRemove_1 = require("./memory/memoryRemove");
|
|
90
91
|
const sessionSummary_1 = require("./memory/sessionSummary");
|
|
91
92
|
const subagentFanout_1 = require("./subagent/subagentFanout");
|
|
93
|
+
// v4.6 Phase 1 — spawn_sub_agent stub registered alongside the
|
|
94
|
+
// fanout stub so the schema is visible at agent construction.
|
|
95
|
+
const spawnSubAgentTool_1 = require("./subagent/spawnSubAgentTool");
|
|
92
96
|
/**
|
|
93
97
|
* Register every read-only tool into `registry`. The
|
|
94
98
|
* `lookup_tool_schema` tool needs a registry reference, so it's
|
|
@@ -96,59 +100,80 @@ const subagentFanout_1 = require("./subagent/subagentFanout");
|
|
|
96
100
|
* the full set).
|
|
97
101
|
*/
|
|
98
102
|
function registerReadOnlyTools(registry) {
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
+
// v4.4 Phase 4 — every handler is funneled through withDryRun so
|
|
104
|
+
// AIDEN_DRYRUN=1 short-circuits `execute` to a preview. Read-only
|
|
105
|
+
// tools pass through unchanged (the HOC returns the handler as-is
|
|
106
|
+
// when `mutates: false`); the wrapper is cheap (`if (!mutates)
|
|
107
|
+
// return handler`) and keeps the registration call sites uniform
|
|
108
|
+
// across read/write tool sets.
|
|
109
|
+
const register = (h) => registry.register((0, dryRun_1.withDryRun)(h));
|
|
110
|
+
register(webSearch_1.webSearchTool);
|
|
111
|
+
register(webFetch_1.webFetchTool);
|
|
112
|
+
register(webPage_1.webPageTool);
|
|
113
|
+
register(deepResearch_1.deepResearchTool);
|
|
103
114
|
// Phase 16f: open_url uses shell launch (start chrome / open / xdg-open)
|
|
104
115
|
// for "open X in browser" requests — bypasses Playwright detection.
|
|
105
|
-
|
|
116
|
+
register(openUrl_1.openUrlTool);
|
|
106
117
|
// Phase 23.4a: youtube_search returns real /watch?v= URLs scraped
|
|
107
118
|
// from youtube.com/results. media-search uses it before open_url so
|
|
108
119
|
// the URL provenance gate has a candidate set to validate against —
|
|
109
120
|
// closes the URL-hallucination failure mode where the model invented
|
|
110
121
|
// 11-char IDs.
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
122
|
+
register(youtubeSearch_1.youtubeSearchTool);
|
|
123
|
+
register(fileRead_1.fileReadTool);
|
|
124
|
+
register(fileList_1.fileListTool);
|
|
125
|
+
register(browserScreenshot_1.browserScreenshotTool);
|
|
126
|
+
register(browserExtract_1.browserExtractTool);
|
|
127
|
+
register(browserGetUrl_1.browserGetUrlTool);
|
|
128
|
+
register(sessionSearch_1.sessionSearchTool);
|
|
129
|
+
register(sessionList_1.sessionListTool);
|
|
119
130
|
// Phase v4.1.2-memory-C: recall_session reads SessionDistillation
|
|
120
131
|
// files written by Phase A+B. Sits alongside session_search — the
|
|
121
132
|
// two have distinct purposes (FTS5-over-messages vs ranked
|
|
122
133
|
// distillation summaries); descriptions force the right model
|
|
123
134
|
// choice.
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
135
|
+
register(recallSession_1.recallSessionTool);
|
|
136
|
+
register(skillsList_1.skillsListTool);
|
|
137
|
+
register(skillView_1.skillViewTool);
|
|
138
|
+
register(systemInfo_1.systemInfoTool);
|
|
139
|
+
register(nowPlaying_1.nowPlayingTool);
|
|
140
|
+
register(naturalEvents_1.naturalEventsTool);
|
|
130
141
|
// Phase v4.1.2-followup-3 — computer-control read-only tools.
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
142
|
+
register(screenshot_1.screenshotTool);
|
|
143
|
+
register(osProcessList_1.osProcessListTool);
|
|
144
|
+
register(clipboardRead_1.clipboardReadTool);
|
|
134
145
|
// v4.1.4-media — GSMTC session enumeration (read). Pair with
|
|
135
146
|
// mediaTransport (write) in the write-tools registration below.
|
|
136
|
-
|
|
137
|
-
|
|
147
|
+
register(mediaSessions_1.mediaSessionsTool);
|
|
148
|
+
register((0, lookupToolSchema_1.makeLookupToolSchema)(registry));
|
|
138
149
|
// Phase v4.1-subagent — register a stub for subagent_fanout so its
|
|
139
150
|
// schema is visible to the agent loop, the MCP server, and the
|
|
140
151
|
// /tools slash command BEFORE the runtime resolves provider /
|
|
141
152
|
// adapter / agent dependencies. The full runtime calls
|
|
142
|
-
// `
|
|
153
|
+
// `register(makeSubagentFanoutTool({...real opts}))` to
|
|
143
154
|
// replace this stub once `buildAgentRuntime` has those handles.
|
|
144
155
|
// Until then, calling the stub returns a clear "not wired" error
|
|
145
156
|
// rather than crashing.
|
|
146
|
-
|
|
157
|
+
register(makeSubagentFanoutStub());
|
|
158
|
+
// v4.6 Phase 1 — register a stub for spawn_sub_agent. Same
|
|
159
|
+
// rationale: agent construction at `cli/v4/aidenCLI.ts` snapshots
|
|
160
|
+
// the tool array, so the schema must be in the registry by then.
|
|
161
|
+
// The REPL wiring at `buildAgentRuntime` calls
|
|
162
|
+
// `register(makeSpawnSubAgentTool({...real deps}))` to replace
|
|
163
|
+
// this stub once `parentAgent`, `runStore`, etc. are available.
|
|
164
|
+
// The stub carries `contexts: ['repl']` so it's excluded from the
|
|
165
|
+
// daemon agent's tool catalog via `getSchemas(_, 'daemon')`.
|
|
166
|
+
register((0, spawnSubAgentTool_1.makeSpawnSubAgentStub)());
|
|
147
167
|
}
|
|
148
168
|
/** Stub used until the runtime wires real provider / adapter / agent
|
|
149
169
|
* dependencies. Returns the SAME schema as the real tool so MCP and
|
|
150
170
|
* /tools see a consistent surface. */
|
|
151
171
|
function makeSubagentFanoutStub() {
|
|
172
|
+
// v4.6 Phase 2R — `runChild` removed from `SubagentFanoutFactoryOptions`.
|
|
173
|
+
// The stub returns a "no providers configured" error envelope on every
|
|
174
|
+
// call via `resolveProviders: () => []`. Production wires real
|
|
175
|
+
// `spawnDeps` post-runtime build (`cli/v4/aidenCLI.ts` for REPL,
|
|
176
|
+
// `cli/v4/commands/mcp.ts` for MCP serve).
|
|
152
177
|
return (0, subagentFanout_1.makeSubagentFanoutTool)({
|
|
153
178
|
resolveProviders: () => [],
|
|
154
179
|
resolveActiveModel: () => ({ providerId: 'unset', modelId: 'unset' }),
|
|
@@ -156,12 +181,9 @@ function makeSubagentFanoutStub() {
|
|
|
156
181
|
apiMode: 'chat_completions',
|
|
157
182
|
async call() {
|
|
158
183
|
throw new Error('subagent_fanout: tool not wired — runtime did not replace the stub. ' +
|
|
159
|
-
'Call
|
|
184
|
+
'Call register(makeSubagentFanoutTool({...})) after buildAgentRuntime.');
|
|
160
185
|
},
|
|
161
186
|
},
|
|
162
|
-
runChild: async () => {
|
|
163
|
-
throw new Error('subagent_fanout: tool not wired — runtime did not replace the stub.');
|
|
164
|
-
},
|
|
165
187
|
});
|
|
166
188
|
}
|
|
167
189
|
/**
|
|
@@ -170,50 +192,55 @@ function makeSubagentFanoutStub() {
|
|
|
170
192
|
* engine — the registration order doesn't matter for that.
|
|
171
193
|
*/
|
|
172
194
|
function registerWriteTools(registry) {
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
registry.register(
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
195
|
+
// v4.4 Phase 4 — same withDryRun wrap as registerReadOnlyTools.
|
|
196
|
+
// Write tools are where the preview path is actually hot — when
|
|
197
|
+
// AIDEN_DRYRUN=1, each handler's `buildPreview` is called instead
|
|
198
|
+
// of `execute`.
|
|
199
|
+
const register = (h) => registry.register((0, dryRun_1.withDryRun)(h));
|
|
200
|
+
register(fileWrite_1.fileWriteTool);
|
|
201
|
+
register(filePatch_1.filePatchTool);
|
|
202
|
+
register(fileDelete_1.fileDeleteTool);
|
|
203
|
+
register(fileMove_1.fileMoveTool);
|
|
204
|
+
register(fileCopy_1.fileCopyTool);
|
|
205
|
+
register(shellExec_1.shellExecTool);
|
|
206
|
+
register(browserNavigate_1.browserNavigateTool);
|
|
207
|
+
register(browserClick_1.browserClickTool);
|
|
208
|
+
register(browserType_1.browserTypeTool);
|
|
209
|
+
register(browserFill_1.browserFillTool);
|
|
210
|
+
register(browserScroll_1.browserScrollTool);
|
|
211
|
+
register(browserClose_1.browserCloseTool);
|
|
212
|
+
register(executeCode_1.executeCodeTool);
|
|
213
|
+
register(processSpawn_1.processSpawnTool);
|
|
214
|
+
register(processList_1.processListTool);
|
|
215
|
+
register(processLogRead_1.processLogReadTool);
|
|
216
|
+
register(processKill_1.processKillTool);
|
|
217
|
+
register(processWait_1.processWaitTool);
|
|
191
218
|
// Phase 9: memory write tools (gated by MemoryGuard for read-back
|
|
192
219
|
// verification, then by the approval engine like every other write).
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
220
|
+
register(memoryAdd_1.memoryAddTool);
|
|
221
|
+
register(memoryReplace_1.memoryReplaceTool);
|
|
222
|
+
register(memoryRemove_1.memoryRemoveTool);
|
|
196
223
|
// Phase v4.1.2 alive-core: cross-session continuity via /quit auto-summary.
|
|
197
|
-
|
|
224
|
+
register(sessionSummary_1.sessionSummaryTool);
|
|
198
225
|
// Phase 10: skill_manage — mutating, also goes through the approval
|
|
199
226
|
// engine. skills_list / skill_view stay in registerReadOnlyTools.
|
|
200
|
-
|
|
227
|
+
register(skillManage_1.skillManageTool);
|
|
201
228
|
// Phase v4.1.2-update: natural-language entry to the same install
|
|
202
229
|
// executor that /update install uses. Two-step confirmation gate
|
|
203
230
|
// (confirm:false → status; confirm:true → install).
|
|
204
|
-
|
|
231
|
+
register(aidenSelfUpdate_1.aidenSelfUpdateTool);
|
|
205
232
|
// Phase v4.1.2-followup-3 — computer-control mutating tools. All
|
|
206
233
|
// route through the approval engine like every other write.
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
234
|
+
register(mediaKey_1.mediaKeyTool);
|
|
235
|
+
register(volumeSet_1.volumeSetTool);
|
|
236
|
+
register(appLaunch_1.appLaunchTool);
|
|
237
|
+
register(appClose_1.appCloseTool);
|
|
238
|
+
register(clipboardWrite_1.clipboardWriteTool);
|
|
212
239
|
// v4.1.4-media — verified GSMTC transport (replaces mediaKey for
|
|
213
240
|
// the "name an app, play/pause it" case) + focused-window SendKeys
|
|
214
241
|
// (escape hatch when GSMTC doesn't enumerate the surface).
|
|
215
|
-
|
|
216
|
-
|
|
242
|
+
register(mediaTransport_1.mediaTransportTool);
|
|
243
|
+
register(appInput_1.appInputTool);
|
|
217
244
|
}
|
|
218
245
|
/** Register every v4 tool. Most callers want this. */
|
|
219
246
|
function registerAllTools(registry) {
|
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
*/
|
|
18
18
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
19
|
exports.memoryAddTool = void 0;
|
|
20
|
+
const dryRun_1 = require("../../../core/v4/dryRun");
|
|
20
21
|
exports.memoryAddTool = {
|
|
21
22
|
schema: {
|
|
22
23
|
name: 'memory_add',
|
|
@@ -37,6 +38,19 @@ exports.memoryAddTool = {
|
|
|
37
38
|
category: 'write',
|
|
38
39
|
mutates: true,
|
|
39
40
|
toolset: 'memory',
|
|
41
|
+
riskTier: 'caution', // v4.4 Phase 1
|
|
42
|
+
buildPreview(args) {
|
|
43
|
+
const file = args.file === 'user' ? 'user' : 'memory';
|
|
44
|
+
const content = String(args.content ?? '');
|
|
45
|
+
return {
|
|
46
|
+
tool: 'memory_add',
|
|
47
|
+
args,
|
|
48
|
+
riskTier: 'caution',
|
|
49
|
+
sideEffects: [{ type: 'memory_write', op: 'add', bullet: (0, dryRun_1.truncatePreview)(content) }],
|
|
50
|
+
detectedRisks: [],
|
|
51
|
+
summary: `Would append to ${file === 'user' ? 'USER.md' : 'MEMORY.md'}: "${(0, dryRun_1.truncatePreview)(content, 80)}"`,
|
|
52
|
+
};
|
|
53
|
+
},
|
|
40
54
|
async execute(args, ctx) {
|
|
41
55
|
if (!ctx.memoryGuard) {
|
|
42
56
|
return { success: false, error: 'memory guard not configured' };
|
|
@@ -31,6 +31,7 @@
|
|
|
31
31
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
32
32
|
exports.memoryRemoveTool = void 0;
|
|
33
33
|
const memoryGuard_1 = require("../../../moat/memoryGuard");
|
|
34
|
+
const dryRun_1 = require("../../../core/v4/dryRun");
|
|
34
35
|
/** Section in MEMORY.md that Phase D promotion writes to. */
|
|
35
36
|
const DURABLE_FACTS_HEADER = '## Durable facts';
|
|
36
37
|
exports.memoryRemoveTool = {
|
|
@@ -59,6 +60,19 @@ exports.memoryRemoveTool = {
|
|
|
59
60
|
category: 'write',
|
|
60
61
|
mutates: true,
|
|
61
62
|
toolset: 'memory',
|
|
63
|
+
riskTier: 'caution', // v4.4 Phase 1
|
|
64
|
+
buildPreview(args) {
|
|
65
|
+
const file = args.file === 'user' ? 'user' : 'memory';
|
|
66
|
+
const text = String(args.text ?? '');
|
|
67
|
+
return {
|
|
68
|
+
tool: 'memory_remove',
|
|
69
|
+
args,
|
|
70
|
+
riskTier: 'caution',
|
|
71
|
+
sideEffects: [{ type: 'memory_write', op: 'remove', pattern: (0, dryRun_1.truncatePreview)(text, 80) }],
|
|
72
|
+
detectedRisks: [],
|
|
73
|
+
summary: `Would remove from ${file === 'user' ? 'USER.md' : 'MEMORY.md'}: "${(0, dryRun_1.truncatePreview)(text, 80)}"`,
|
|
74
|
+
};
|
|
75
|
+
},
|
|
62
76
|
async execute(args, ctx) {
|
|
63
77
|
if (!ctx.memoryGuard) {
|
|
64
78
|
return { success: false, error: 'memory guard not configured' };
|
|
@@ -16,6 +16,7 @@
|
|
|
16
16
|
*/
|
|
17
17
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
18
18
|
exports.memoryReplaceTool = void 0;
|
|
19
|
+
const dryRun_1 = require("../../../core/v4/dryRun");
|
|
19
20
|
exports.memoryReplaceTool = {
|
|
20
21
|
schema: {
|
|
21
22
|
name: 'memory_replace',
|
|
@@ -37,6 +38,20 @@ exports.memoryReplaceTool = {
|
|
|
37
38
|
category: 'write',
|
|
38
39
|
mutates: true,
|
|
39
40
|
toolset: 'memory',
|
|
41
|
+
riskTier: 'caution', // v4.4 Phase 1
|
|
42
|
+
buildPreview(args) {
|
|
43
|
+
const file = args.file === 'user' ? 'user' : 'memory';
|
|
44
|
+
const oldText = String(args.old_text ?? args.oldText ?? '');
|
|
45
|
+
const newText = String(args.new_text ?? args.newText ?? '');
|
|
46
|
+
return {
|
|
47
|
+
tool: 'memory_replace',
|
|
48
|
+
args,
|
|
49
|
+
riskTier: 'caution',
|
|
50
|
+
sideEffects: [{ type: 'memory_write', op: 'replace', pattern: (0, dryRun_1.truncatePreview)(oldText, 80), bullet: (0, dryRun_1.truncatePreview)(newText, 80) }],
|
|
51
|
+
detectedRisks: [],
|
|
52
|
+
summary: `Would replace in ${file === 'user' ? 'USER.md' : 'MEMORY.md'}: "${(0, dryRun_1.truncatePreview)(oldText, 40)}" → "${(0, dryRun_1.truncatePreview)(newText, 40)}"`,
|
|
53
|
+
};
|
|
54
|
+
},
|
|
40
55
|
async execute(args, ctx) {
|
|
41
56
|
if (!ctx.memoryGuard) {
|
|
42
57
|
return { success: false, error: 'memory guard not configured' };
|
|
@@ -100,6 +100,18 @@ exports.sessionSummaryTool = {
|
|
|
100
100
|
category: 'write',
|
|
101
101
|
mutates: true,
|
|
102
102
|
toolset: 'memory',
|
|
103
|
+
riskTier: 'caution', // v4.4 Phase 1
|
|
104
|
+
buildPreview(args, ctx) {
|
|
105
|
+
const sessionId = String(args.session_id ?? args.sessionId ?? ctx.sessionId ?? 'current');
|
|
106
|
+
return {
|
|
107
|
+
tool: 'session_summary',
|
|
108
|
+
args,
|
|
109
|
+
riskTier: 'caution',
|
|
110
|
+
sideEffects: [{ type: 'session_distill', session_id: sessionId }],
|
|
111
|
+
detectedRisks: [],
|
|
112
|
+
summary: `Would distill session ${sessionId} into Recent-sessions section of MEMORY.md`,
|
|
113
|
+
};
|
|
114
|
+
},
|
|
103
115
|
async execute(args, ctx) {
|
|
104
116
|
if (!ctx.memoryGuard) {
|
|
105
117
|
return { success: false, error: 'memory guard not configured' };
|
|
@@ -31,6 +31,25 @@ exports.processKillTool = {
|
|
|
31
31
|
category: 'write',
|
|
32
32
|
mutates: true,
|
|
33
33
|
toolset: 'process',
|
|
34
|
+
riskTier: 'dangerous', // v4.4 Phase 1
|
|
35
|
+
buildPreview(args, ctx) {
|
|
36
|
+
const id = String(args.id ?? '').trim();
|
|
37
|
+
const signal = args.signal || 'SIGTERM';
|
|
38
|
+
let pid = -1;
|
|
39
|
+
if (ctx.processes && id) {
|
|
40
|
+
const h = ctx.processes.get(id);
|
|
41
|
+
if (h && typeof h.pid === 'number')
|
|
42
|
+
pid = h.pid;
|
|
43
|
+
}
|
|
44
|
+
return {
|
|
45
|
+
tool: 'process_kill',
|
|
46
|
+
args,
|
|
47
|
+
riskTier: 'dangerous',
|
|
48
|
+
sideEffects: [{ type: 'process_kill', pid, signal }],
|
|
49
|
+
detectedRisks: signal === 'SIGKILL' ? ['SIGKILL'] : [],
|
|
50
|
+
summary: `Would send ${signal} to process ${id}${pid > 0 ? ` (pid ${pid})` : ''}`,
|
|
51
|
+
};
|
|
52
|
+
},
|
|
34
53
|
async execute(args, ctx) {
|
|
35
54
|
if (!ctx.processes) {
|
|
36
55
|
return { success: false, error: 'process registry not configured' };
|
|
@@ -32,6 +32,19 @@ exports.processSpawnTool = {
|
|
|
32
32
|
category: 'execute',
|
|
33
33
|
mutates: true,
|
|
34
34
|
toolset: 'process',
|
|
35
|
+
riskTier: 'dangerous', // v4.4 Phase 1
|
|
36
|
+
buildPreview(args, ctx) {
|
|
37
|
+
const command = String(args.command ?? '').trim();
|
|
38
|
+
const cwd = typeof args.cwd === 'string' ? args.cwd : ctx.cwd;
|
|
39
|
+
return {
|
|
40
|
+
tool: 'process_spawn',
|
|
41
|
+
args,
|
|
42
|
+
riskTier: 'dangerous',
|
|
43
|
+
sideEffects: [{ type: 'process_spawn', command, args: [] }],
|
|
44
|
+
detectedRisks: [],
|
|
45
|
+
summary: `Would spawn background process: \`${command.length > 80 ? command.slice(0, 80) + '…' : command}\` in ${cwd}`,
|
|
46
|
+
};
|
|
47
|
+
},
|
|
35
48
|
async execute(args, ctx) {
|
|
36
49
|
if (!ctx.processes) {
|
|
37
50
|
return { success: false, error: 'process registry not configured' };
|
|
@@ -45,6 +45,7 @@ function makeLookupToolSchema(registry) {
|
|
|
45
45
|
category: 'read',
|
|
46
46
|
mutates: false,
|
|
47
47
|
toolset: 'skills',
|
|
48
|
+
riskTier: 'safe', // v4.4 Phase 1
|
|
48
49
|
async execute(args) {
|
|
49
50
|
const name = String(args.toolName ?? args.name ?? '').trim();
|
|
50
51
|
if (!name)
|
|
@@ -63,6 +64,12 @@ function makeLookupToolSchema(registry) {
|
|
|
63
64
|
category: handler.category,
|
|
64
65
|
mutates: handler.mutates,
|
|
65
66
|
toolset: handler.toolset,
|
|
67
|
+
// v4.6 Phase 1 — read the queried tool's actual risk tier
|
|
68
|
+
// (was previously hardcoded to 'safe' regardless of the tool,
|
|
69
|
+
// which mis-reported caution/dangerous tools as safe in the
|
|
70
|
+
// /tools surface). Falls back to 'safe' for tools that never
|
|
71
|
+
// annotated their tier — matches the registry-level default.
|
|
72
|
+
riskTier: handler.riskTier ?? 'safe',
|
|
66
73
|
};
|
|
67
74
|
},
|
|
68
75
|
};
|
|
@@ -78,6 +78,19 @@ exports.skillManageTool = {
|
|
|
78
78
|
category: 'write',
|
|
79
79
|
mutates: true,
|
|
80
80
|
toolset: 'skills',
|
|
81
|
+
riskTier: 'caution', // v4.4 Phase 1
|
|
82
|
+
buildPreview(args) {
|
|
83
|
+
const action = typeof args.action === 'string' ? args.action : '';
|
|
84
|
+
const name = typeof args.name === 'string' ? args.name : '';
|
|
85
|
+
return {
|
|
86
|
+
tool: 'skill_manage',
|
|
87
|
+
args,
|
|
88
|
+
riskTier: 'caution',
|
|
89
|
+
sideEffects: [{ type: 'skill_write', op: action, name }],
|
|
90
|
+
detectedRisks: action === 'delete' ? ['skill_delete'] : [],
|
|
91
|
+
summary: `Would ${action} skill: ${name}`,
|
|
92
|
+
};
|
|
93
|
+
},
|
|
81
94
|
async execute(args, ctx) {
|
|
82
95
|
if (!ctx.skillLoader || !ctx.paths) {
|
|
83
96
|
return { success: false, error: 'No skill loader configured' };
|