@harperfast/harper 5.2.0-alpha.4 → 5.2.0-alpha.6
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/agent/agent.ts +152 -10
- package/agent/bestPractices.ts +58 -0
- package/agent/mcpTools.ts +122 -0
- package/agent/operations.ts +10 -1
- package/agent/registryTools.ts +117 -0
- package/agent/session.ts +16 -7
- package/agent/tools/fsTools.ts +74 -27
- package/agent/tools/inspectorTool.ts +459 -0
- package/agent/toolset.ts +27 -7
- package/agent/types.ts +2 -0
- package/components/Application.ts +566 -85
- package/components/OptionsWatcher.ts +62 -2
- package/components/Scope.ts +31 -8
- package/components/componentLoader.ts +5 -1
- package/components/componentSecrets.ts +514 -55
- package/components/deploymentRecorder.ts +7 -6
- package/components/gitCredentialHelper.js +115 -0
- package/components/gitCredentialServer.ts +251 -0
- package/components/mcp/tools/application.ts +197 -23
- package/components/mcp/tools/operations.ts +1 -1
- package/components/mcp/tools/schemas/derive.ts +6 -2
- package/components/operations.js +21 -19
- package/components/operationsValidation.js +86 -21
- package/components/secretOperations.ts +110 -30
- package/config/harperConfigEnvVars.ts +90 -5
- package/config-root.schema.json +4 -0
- package/dist/agent/agent.d.ts +24 -3
- package/dist/agent/agent.js +172 -10
- package/dist/agent/agent.js.map +1 -1
- package/dist/agent/bestPractices.d.ts +24 -0
- package/dist/agent/bestPractices.js +60 -0
- package/dist/agent/bestPractices.js.map +1 -0
- package/dist/agent/mcpTools.d.ts +24 -0
- package/dist/agent/mcpTools.js +115 -0
- package/dist/agent/mcpTools.js.map +1 -0
- package/dist/agent/operations.js +10 -1
- package/dist/agent/operations.js.map +1 -1
- package/dist/agent/registryTools.d.ts +45 -0
- package/dist/agent/registryTools.js +113 -0
- package/dist/agent/registryTools.js.map +1 -0
- package/dist/agent/session.js +16 -7
- package/dist/agent/session.js.map +1 -1
- package/dist/agent/tools/fsTools.js +70 -28
- package/dist/agent/tools/fsTools.js.map +1 -1
- package/dist/agent/tools/inspectorTool.d.ts +40 -0
- package/dist/agent/tools/inspectorTool.js +428 -0
- package/dist/agent/tools/inspectorTool.js.map +1 -0
- package/dist/agent/toolset.d.ts +16 -6
- package/dist/agent/toolset.js +17 -7
- package/dist/agent/toolset.js.map +1 -1
- package/dist/agent/types.d.ts +2 -0
- package/dist/components/Application.d.ts +73 -18
- package/dist/components/Application.js +475 -64
- package/dist/components/Application.js.map +1 -1
- package/dist/components/OptionsWatcher.d.ts +1 -1
- package/dist/components/OptionsWatcher.js +65 -2
- package/dist/components/OptionsWatcher.js.map +1 -1
- package/dist/components/Scope.d.ts +8 -6
- package/dist/components/Scope.js +22 -6
- package/dist/components/Scope.js.map +1 -1
- package/dist/components/componentLoader.js +5 -1
- package/dist/components/componentLoader.js.map +1 -1
- package/dist/components/componentSecrets.d.ts +33 -7
- package/dist/components/componentSecrets.js +473 -59
- package/dist/components/componentSecrets.js.map +1 -1
- package/dist/components/deploymentRecorder.d.ts +2 -2
- package/dist/components/deploymentRecorder.js +1 -1
- package/dist/components/deploymentRecorder.js.map +1 -1
- package/dist/components/gitCredentialHelper.d.ts +1 -0
- package/dist/components/gitCredentialHelper.js +113 -0
- package/dist/components/gitCredentialHelper.js.map +1 -0
- package/dist/components/gitCredentialServer.d.ts +33 -0
- package/dist/components/gitCredentialServer.js +236 -0
- package/dist/components/gitCredentialServer.js.map +1 -0
- package/dist/components/mcp/tools/application.d.ts +19 -0
- package/dist/components/mcp/tools/application.js +180 -22
- package/dist/components/mcp/tools/application.js.map +1 -1
- package/dist/components/mcp/tools/operations.d.ts +13 -0
- package/dist/components/mcp/tools/operations.js +1 -0
- package/dist/components/mcp/tools/operations.js.map +1 -1
- package/dist/components/mcp/tools/schemas/derive.js +6 -2
- package/dist/components/mcp/tools/schemas/derive.js.map +1 -1
- package/dist/components/operations.js +23 -21
- package/dist/components/operations.js.map +1 -1
- package/dist/components/operationsValidation.js +84 -21
- package/dist/components/operationsValidation.js.map +1 -1
- package/dist/components/secretOperations.d.ts +33 -11
- package/dist/components/secretOperations.js +90 -26
- package/dist/components/secretOperations.js.map +1 -1
- package/dist/config/harperConfigEnvVars.d.ts +21 -0
- package/dist/config/harperConfigEnvVars.js +95 -5
- package/dist/config/harperConfigEnvVars.js.map +1 -1
- package/dist/index.d.ts +4 -0
- package/dist/index.js +14 -1
- package/dist/index.js.map +1 -1
- package/dist/resources/Resource.d.ts +19 -0
- package/dist/resources/Resource.js +93 -2
- package/dist/resources/Resource.js.map +1 -1
- package/dist/resources/Table.d.ts +9 -0
- package/dist/resources/Table.js +256 -50
- package/dist/resources/Table.js.map +1 -1
- package/dist/resources/analytics/read.js +28 -25
- package/dist/resources/analytics/read.js.map +1 -1
- package/dist/resources/defineResource.d.ts +180 -0
- package/dist/resources/defineResource.js +505 -0
- package/dist/resources/defineResource.js.map +1 -0
- package/dist/resources/defineTable.d.ts +221 -0
- package/dist/resources/defineTable.js +227 -0
- package/dist/resources/defineTable.js.map +1 -0
- package/dist/resources/jsonSchemaTypes.d.ts +2 -0
- package/dist/resources/jsonSchemaTypes.js +12 -4
- package/dist/resources/jsonSchemaTypes.js.map +1 -1
- package/dist/resources/openApi.js +69 -13
- package/dist/resources/openApi.js.map +1 -1
- package/dist/resources/search.js +6 -8
- package/dist/resources/search.js.map +1 -1
- package/dist/server/graphqlQuerying.js +4 -2
- package/dist/server/graphqlQuerying.js.map +1 -1
- package/dist/server/http.d.ts +12 -0
- package/dist/server/http.js +35 -15
- package/dist/server/http.js.map +1 -1
- package/dist/server/serverHelpers/serverUtilities.js +8 -5
- package/dist/server/serverHelpers/serverUtilities.js.map +1 -1
- package/dist/server/serverHelpers/uwsServer.js +23 -0
- package/dist/server/serverHelpers/uwsServer.js.map +1 -1
- package/dist/utility/errors/hdbError.d.ts +21 -0
- package/dist/utility/errors/hdbError.js +23 -1
- package/dist/utility/errors/hdbError.js.map +1 -1
- package/dist/validation/configValidator.js +22 -6
- package/dist/validation/configValidator.js.map +1 -1
- package/index.ts +33 -0
- package/npm-shrinkwrap.json +9197 -15236
- package/package.json +5 -3
- package/resources/DESIGN.md +42 -15
- package/resources/Resource.ts +99 -2
- package/resources/Table.ts +275 -71
- package/resources/analytics/read.ts +30 -25
- package/resources/defineResource.ts +651 -0
- package/resources/defineTable.ts +407 -0
- package/resources/jsonSchemaTypes.ts +12 -4
- package/resources/openApi.ts +68 -16
- package/resources/search.ts +5 -8
- package/server/graphqlQuerying.ts +4 -2
- package/server/http.ts +40 -16
- package/server/serverHelpers/serverUtilities.ts +19 -6
- package/server/serverHelpers/uwsServer.ts +24 -0
- package/studio/web/assets/{Chat-D4FIaBu7.js → Chat-CTjtL8Z4.js} +2 -2
- package/studio/web/assets/{Chat-D4FIaBu7.js.map → Chat-CTjtL8Z4.js.map} +1 -1
- package/studio/web/assets/{FloatingChat-DGUC3L4r.js → FloatingChat-CafHR4Ur.js} +4 -4
- package/studio/web/assets/{FloatingChat-DGUC3L4r.js.map → FloatingChat-CafHR4Ur.js.map} +1 -1
- package/studio/web/assets/{applications-D8Am9ikM.js → applications-Buh_q0Vj.js} +2 -2
- package/studio/web/assets/{applications-D8Am9ikM.js.map → applications-Buh_q0Vj.js.map} +1 -1
- package/studio/web/assets/{index-HGL4WHdb.js → index-0hXeECkS.js} +6 -6
- package/studio/web/assets/{index-HGL4WHdb.js.map → index-0hXeECkS.js.map} +1 -1
- package/studio/web/assets/{index.lazy-Dk5j1AoQ.js → index.lazy-B00B7VBT.js} +4 -4
- package/studio/web/assets/{index.lazy-Dk5j1AoQ.js.map → index.lazy-B00B7VBT.js.map} +1 -1
- package/studio/web/assets/{profile-7bu_CF1f.js → profile-Cg2wwYPn.js} +2 -2
- package/studio/web/assets/{profile-7bu_CF1f.js.map → profile-Cg2wwYPn.js.map} +1 -1
- package/studio/web/assets/{setComponentFile-MfYm9F94.js → setComponentFile-DCaDIvyB.js} +2 -2
- package/studio/web/assets/{setComponentFile-MfYm9F94.js.map → setComponentFile-DCaDIvyB.js.map} +1 -1
- package/studio/web/assets/{setup-SKA4UhdE.js → setup-CAVcAQjK.js} +2 -2
- package/studio/web/assets/{setup-SKA4UhdE.js.map → setup-CAVcAQjK.js.map} +1 -1
- package/studio/web/assets/{status-DetVLUxR.js → status-BRXorNdD.js} +2 -2
- package/studio/web/assets/{status-DetVLUxR.js.map → status-BRXorNdD.js.map} +1 -1
- package/studio/web/assets/{swagger-ui-react-DLeYARY2.js → swagger-ui-react-Dy1D62vO.js} +2 -2
- package/studio/web/assets/{swagger-ui-react-DLeYARY2.js.map → swagger-ui-react-Dy1D62vO.js.map} +1 -1
- package/studio/web/assets/{tsMode-DGO-jIF7.js → tsMode-A8gbL74v.js} +2 -2
- package/studio/web/assets/{tsMode-DGO-jIF7.js.map → tsMode-A8gbL74v.js.map} +1 -1
- package/studio/web/assets/{useEntityRestURL-4M2i6bo4.js → useEntityRestURL-cDodrVcQ.js} +2 -2
- package/studio/web/assets/{useEntityRestURL-4M2i6bo4.js.map → useEntityRestURL-cDodrVcQ.js.map} +1 -1
- package/studio/web/index.html +1 -1
- package/utility/errors/hdbError.ts +32 -0
- package/validation/configValidator.ts +23 -6
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Registry tool composition for the built-in agent (#626).
|
|
4
|
+
*
|
|
5
|
+
* Folds the unified MCP tool registry (#615) — specifically the Operations
|
|
6
|
+
* profile (#617) — into the agent's toolset. The agent consumes the *same*
|
|
7
|
+
* registry the MCP HTTP server exposes, RBAC-filtered for its configured user,
|
|
8
|
+
* so operators get one tool surface with one permission model.
|
|
9
|
+
*
|
|
10
|
+
* Two-step, mirroring the registry's own security model:
|
|
11
|
+
* 1. `visibleTo(agentUser)` narrows *listing* — the LLM only sees tools it is
|
|
12
|
+
* likely allowed to call. This is NOT a security boundary.
|
|
13
|
+
* 2. Real enforcement runs in the operation handler at call time: each call
|
|
14
|
+
* dispatches through Harper's operations runtime with `hdb_user` set to the
|
|
15
|
+
* agent's configured identity, so `verifyPerms` gates it regardless of what
|
|
16
|
+
* the LLM was shown.
|
|
17
|
+
*
|
|
18
|
+
* The Application profile (#618) is intentionally out of scope here; it can fold
|
|
19
|
+
* in the same way once per-Resource tool generation is wired for the agent.
|
|
20
|
+
*/
|
|
21
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
22
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
23
|
+
};
|
|
24
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
25
|
+
exports.ensureOperationsToolsRegistered = ensureOperationsToolsRegistered;
|
|
26
|
+
exports.composeRegistryTools = composeRegistryTools;
|
|
27
|
+
exports._resetRegistryToolsForTests = _resetRegistryToolsForTests;
|
|
28
|
+
const operations_ts_1 = require("../components/mcp/tools/operations.js");
|
|
29
|
+
const toolRegistry_ts_1 = require("../components/mcp/toolRegistry.js");
|
|
30
|
+
const harper_logger_ts_1 = __importDefault(require("../utility/logging/harper_logger.js"));
|
|
31
|
+
const log = harper_logger_ts_1.default.loggerWithTag('agent');
|
|
32
|
+
let operationsRegistered = false;
|
|
33
|
+
/**
|
|
34
|
+
* Populate the Operations profile on the main thread. Idempotent: guarded so a
|
|
35
|
+
* second call (e.g. an `agent.enabled` flip via `set_agent_config`) is a no-op
|
|
36
|
+
* rather than re-walking `OPERATION_FUNCTION_MAP` and re-logging. The registry's
|
|
37
|
+
* `addTool` is `Map.set`-backed, so this stays correct whether or not the
|
|
38
|
+
* operator also enabled the `mcp:` HTTP surface.
|
|
39
|
+
*/
|
|
40
|
+
function ensureOperationsToolsRegistered() {
|
|
41
|
+
if (operationsRegistered)
|
|
42
|
+
return;
|
|
43
|
+
(0, operations_ts_1.registerOperationsTools)();
|
|
44
|
+
operationsRegistered = true;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Adapt every Operations-profile registry tool into the agent's {@link AgentTool}
|
|
48
|
+
* shape. Call {@link ensureOperationsToolsRegistered} first so the profile is
|
|
49
|
+
* populated.
|
|
50
|
+
*
|
|
51
|
+
* Two identities, deliberately split:
|
|
52
|
+
* - `listingUser` filters `visibleTo` at compose time — which tools the LLM is
|
|
53
|
+
* *shown*. Listing is not a security boundary, so a startup snapshot is fine.
|
|
54
|
+
* - `resolveIdentity()` is called *per tool call* to set `hdb_user`, so the
|
|
55
|
+
* operation is enforced against the agent user's *current* role. This is what
|
|
56
|
+
* honors a role revocation/change without a restart — the enforcement identity
|
|
57
|
+
* is never cached in the handler closure.
|
|
58
|
+
*/
|
|
59
|
+
function composeRegistryTools(listingUser, resolveIdentity) {
|
|
60
|
+
const defs = (0, toolRegistry_ts_1.snapshotProfileTools)('operations');
|
|
61
|
+
const out = [];
|
|
62
|
+
for (const def of defs) {
|
|
63
|
+
if (!def.visibleTo(listingUser))
|
|
64
|
+
continue;
|
|
65
|
+
out.push(adaptRegistryTool(def, resolveIdentity));
|
|
66
|
+
}
|
|
67
|
+
log.info?.(`Agent composed ${out.length} operations tool(s) for user '${listingUser?.username ?? 'unknown'}'`);
|
|
68
|
+
return out;
|
|
69
|
+
}
|
|
70
|
+
function adaptRegistryTool(def, resolveIdentity) {
|
|
71
|
+
return {
|
|
72
|
+
def: { name: def.name, description: def.description, parameters: def.inputSchema },
|
|
73
|
+
// The loop's approval gate keys off `destructive`; the registry expresses the same
|
|
74
|
+
// intent as the MCP `destructiveHint` annotation.
|
|
75
|
+
destructive: def.annotations?.destructiveHint === true,
|
|
76
|
+
handler: async (args, ctx) => {
|
|
77
|
+
// Resolve the enforcement identity fresh so a live role change is honored. If the
|
|
78
|
+
// configured user can no longer be resolved, `resolveIdentity` throws (fail closed) —
|
|
79
|
+
// the loop turns that into a recoverable tool error rather than running with stale or
|
|
80
|
+
// escalated privileges.
|
|
81
|
+
const user = await resolveIdentity();
|
|
82
|
+
const context = {
|
|
83
|
+
user,
|
|
84
|
+
profile: 'operations',
|
|
85
|
+
sessionId: ctx.sessionId,
|
|
86
|
+
...(ctx.signal ? { signal: ctx.signal } : {}),
|
|
87
|
+
};
|
|
88
|
+
const result = await def.handler(args, context);
|
|
89
|
+
// The loop records a tool observation from the return value and turns a thrown error
|
|
90
|
+
// into a structured `{ ok: false, error }` note for the next model turn. Mapping
|
|
91
|
+
// `isError` → throw keeps a Harper operation failure a recoverable observation rather
|
|
92
|
+
// than aborting the whole run.
|
|
93
|
+
if (result.isError)
|
|
94
|
+
throw new Error(errorText(result));
|
|
95
|
+
return result.structuredContent ?? textOf(result);
|
|
96
|
+
},
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
function textOf(result) {
|
|
100
|
+
return (result.content ?? [])
|
|
101
|
+
.filter((c) => c.type === 'text' && typeof c.text === 'string')
|
|
102
|
+
.map((c) => c.text)
|
|
103
|
+
.join('\n');
|
|
104
|
+
}
|
|
105
|
+
function errorText(result) {
|
|
106
|
+
const text = textOf(result);
|
|
107
|
+
return text || 'operation failed';
|
|
108
|
+
}
|
|
109
|
+
/** Test-only: reset the one-time registration guard between specs. */
|
|
110
|
+
function _resetRegistryToolsForTests() {
|
|
111
|
+
operationsRegistered = false;
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=registryTools.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registryTools.js","sourceRoot":"","sources":["../../agent/registryTools.ts"],"names":[],"mappings":"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"}
|
package/dist/agent/session.js
CHANGED
|
@@ -61,7 +61,13 @@ async function createSession(opts) {
|
|
|
61
61
|
createdAt: now,
|
|
62
62
|
updatedAt: now,
|
|
63
63
|
};
|
|
64
|
-
|
|
64
|
+
// Write through the Resource-level `put` (transactional), NOT `primaryStore.put`: the transactional
|
|
65
|
+
// path stages the version/local-timestamp metadata so the record is stored with the metadata prefix.
|
|
66
|
+
// A raw `primaryStore.put` writes a prefix-less record, which — when it begins with classic shared-
|
|
67
|
+
// structure record-id #2 (byte 0x42 == 66) — is misread by the RocksDB decode heuristic as a
|
|
68
|
+
// timestamp-prefixed record (8 bytes stripped → corrupt → "Could not find typed structure"). See
|
|
69
|
+
// RecordEncoder.ts:328-335.
|
|
70
|
+
await getAgentSessionTable().put(row);
|
|
65
71
|
return row;
|
|
66
72
|
}
|
|
67
73
|
async function getSession(sessionId) {
|
|
@@ -100,7 +106,7 @@ function appendMessage(sessionId, message) {
|
|
|
100
106
|
const session = await requireSession(sessionId);
|
|
101
107
|
session.messages.push(message);
|
|
102
108
|
session.updatedAt = Date.now();
|
|
103
|
-
await getAgentSessionTable().
|
|
109
|
+
await getAgentSessionTable().put(session);
|
|
104
110
|
return session;
|
|
105
111
|
});
|
|
106
112
|
}
|
|
@@ -110,7 +116,7 @@ function setStatus(sessionId, status, lastError) {
|
|
|
110
116
|
session.status = status;
|
|
111
117
|
session.lastError = lastError;
|
|
112
118
|
session.updatedAt = Date.now();
|
|
113
|
-
await getAgentSessionTable().
|
|
119
|
+
await getAgentSessionTable().put(session);
|
|
114
120
|
return session;
|
|
115
121
|
});
|
|
116
122
|
}
|
|
@@ -121,7 +127,7 @@ function addPendingApproval(sessionId, approval) {
|
|
|
121
127
|
session.pendingApprovals.push(entry);
|
|
122
128
|
session.status = 'awaiting_approval';
|
|
123
129
|
session.updatedAt = Date.now();
|
|
124
|
-
await getAgentSessionTable().
|
|
130
|
+
await getAgentSessionTable().put(session);
|
|
125
131
|
return entry;
|
|
126
132
|
});
|
|
127
133
|
}
|
|
@@ -137,7 +143,7 @@ function markApprovalConsumed(sessionId, approvalId) {
|
|
|
137
143
|
return;
|
|
138
144
|
entry.consumed = true;
|
|
139
145
|
session.updatedAt = Date.now();
|
|
140
|
-
await getAgentSessionTable().
|
|
146
|
+
await getAgentSessionTable().put(session);
|
|
141
147
|
});
|
|
142
148
|
}
|
|
143
149
|
function resolveApproval(sessionId, approvalId, approved) {
|
|
@@ -158,7 +164,7 @@ function resolveApproval(sessionId, approvalId, approved) {
|
|
|
158
164
|
session.status = 'idle';
|
|
159
165
|
}
|
|
160
166
|
session.updatedAt = Date.now();
|
|
161
|
-
await getAgentSessionTable().
|
|
167
|
+
await getAgentSessionTable().put(session);
|
|
162
168
|
return entry;
|
|
163
169
|
});
|
|
164
170
|
}
|
|
@@ -166,7 +172,10 @@ async function requireSession(sessionId) {
|
|
|
166
172
|
const session = await getSession(sessionId);
|
|
167
173
|
if (!session)
|
|
168
174
|
throw new Error(`No agent session ${sessionId}`);
|
|
169
|
-
|
|
175
|
+
// The store returns a frozen record, so the read-modify-write mutators below (status, messages,
|
|
176
|
+
// approvals) would throw "Cannot assign to read only property" if they mutated it in place.
|
|
177
|
+
// Return a mutable deep copy; the mutator writes it back with `put`.
|
|
178
|
+
return structuredClone(session);
|
|
170
179
|
}
|
|
171
180
|
/**
|
|
172
181
|
* Reset the cached table reference. Test-only seam; production code lets the
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../agent/session.ts"],"names":[],"mappings":";AAAA;;;;;;;;;GASG;;AASH,oDAqBC;AAUD,
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../agent/session.ts"],"names":[],"mappings":"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"}
|
|
@@ -21,12 +21,44 @@ const MAX_GREP_RESULTS = 500;
|
|
|
21
21
|
const MAX_PATTERN_LENGTH = 1000;
|
|
22
22
|
const DEFAULT_TAIL_LINES = 200;
|
|
23
23
|
const TAIL_READ_BYTES = 1 * 1024 * 1024; // 1 MiB — enough for thousands of normal log lines
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
24
|
+
// The three filesystem scopes the agent can address. Exposed to the model as a `root` enum on the
|
|
25
|
+
// fs tools so it names the scope explicitly instead of guessing an absolute path — which is what led
|
|
26
|
+
// the model to invent literal `componentsRoot/…` prefixes. `components` is the only writable scope.
|
|
27
|
+
const SCOPES = ['components', 'logs', 'config'];
|
|
28
|
+
const SCOPE_DESCRIPTION = "Which scope the `path` is relative to: 'components' (app source directory, the only writable scope), " +
|
|
29
|
+
"'logs' (read-only), or 'config' (read-only). Defaults to 'components'.";
|
|
30
|
+
function scopeRoot(scopes, scope) {
|
|
31
|
+
switch (scope) {
|
|
32
|
+
case 'components':
|
|
33
|
+
return scopes.componentsRoot;
|
|
34
|
+
case 'logs':
|
|
35
|
+
return scopes.logDir;
|
|
36
|
+
case 'config':
|
|
37
|
+
return scopes.configDir;
|
|
38
|
+
default:
|
|
39
|
+
throw new Error(`Unknown fs root '${scope}'. Use one of: ${SCOPES.join(', ')}.`);
|
|
29
40
|
}
|
|
41
|
+
}
|
|
42
|
+
/** Coerce/validate a tool's `root` argument, defaulting to the writable components scope. */
|
|
43
|
+
function normalizeScope(root) {
|
|
44
|
+
if (root == null)
|
|
45
|
+
return 'components';
|
|
46
|
+
if (typeof root !== 'string' || !SCOPES.includes(root))
|
|
47
|
+
throw new Error(`Invalid fs root '${String(root)}'. Use one of: ${SCOPES.join(', ')}.`);
|
|
48
|
+
return root;
|
|
49
|
+
}
|
|
50
|
+
async function resolveScoped(scopes, scope, path, access) {
|
|
51
|
+
// Writes are confined to the components (app) scope; logs and config are observation-only.
|
|
52
|
+
if (access === 'write' && scope !== 'components') {
|
|
53
|
+
throw new Error(`Cannot write to the '${scope}' scope; writes are limited to 'components'.`);
|
|
54
|
+
}
|
|
55
|
+
const root = scopeRoot(scopes, scope);
|
|
56
|
+
// Paths are relative to the chosen scope root. Rejecting absolute paths removes the ambiguity that
|
|
57
|
+
// led the model to guess literal prefixes, and keeps resolution a single unambiguous join.
|
|
58
|
+
if ((0, node_path_1.isAbsolute)(path)) {
|
|
59
|
+
throw new Error(`Path must be relative to the '${scope}' root, not absolute: ${path}`);
|
|
60
|
+
}
|
|
61
|
+
const absolute = (0, node_path_1.resolve)(root, path);
|
|
30
62
|
// Reject a symlink leaf. `safeRealPath` resolves existing symlinks via `realpath` (so a link to
|
|
31
63
|
// an out-of-scope *existing* file is caught by the isInside check below) — but a link whose
|
|
32
64
|
// target does NOT exist makes `realpath` throw, and the fallback returns the link's own in-scope
|
|
@@ -45,12 +77,10 @@ async function resolveScoped(scopes, path, access) {
|
|
|
45
77
|
throw err;
|
|
46
78
|
}
|
|
47
79
|
const realAbsolute = await safeRealPath(absolute);
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
}
|
|
53
|
-
throw new Error(`Path is outside the agent's ${access} scope: ${path}`);
|
|
80
|
+
const realRoot = await safeRealPath(root);
|
|
81
|
+
if (isInside(realAbsolute, realRoot))
|
|
82
|
+
return realAbsolute;
|
|
83
|
+
throw new Error(`Path is outside the agent's '${scope}' scope: ${path}`);
|
|
54
84
|
}
|
|
55
85
|
async function safeRealPath(p) {
|
|
56
86
|
try {
|
|
@@ -77,17 +107,18 @@ function isInside(child, parent) {
|
|
|
77
107
|
exports.readFileTool = {
|
|
78
108
|
def: {
|
|
79
109
|
name: 'read_file',
|
|
80
|
-
description: 'Read a UTF-8 text file
|
|
110
|
+
description: 'Read a UTF-8 text file from the components, logs, or config scope.',
|
|
81
111
|
parameters: {
|
|
82
112
|
type: 'object',
|
|
83
113
|
properties: {
|
|
84
|
-
|
|
114
|
+
root: { type: 'string', enum: SCOPES, description: SCOPE_DESCRIPTION },
|
|
115
|
+
path: { type: 'string', description: 'Path relative to the chosen root, e.g. "my_app/schema.graphql".' },
|
|
85
116
|
},
|
|
86
117
|
required: ['path'],
|
|
87
118
|
},
|
|
88
119
|
},
|
|
89
120
|
handler: async (args, ctx) => {
|
|
90
|
-
const path = await resolveScoped(ctx.scopes, args.path, 'read');
|
|
121
|
+
const path = await resolveScoped(ctx.scopes, normalizeScope(args.root), args.path, 'read');
|
|
91
122
|
const st = await (0, promises_1.stat)(path);
|
|
92
123
|
if (st.size > MAX_READ_BYTES) {
|
|
93
124
|
throw new Error(`File ${path} exceeds ${MAX_READ_BYTES}-byte read cap (size ${st.size})`);
|
|
@@ -99,11 +130,14 @@ exports.readFileTool = {
|
|
|
99
130
|
exports.writeFileTool = {
|
|
100
131
|
def: {
|
|
101
132
|
name: 'write_file',
|
|
102
|
-
description: 'Write a UTF-8 text file
|
|
133
|
+
description: 'Write a UTF-8 text file into the components (app source) scope — the only writable scope. Creates parent directories as needed.',
|
|
103
134
|
parameters: {
|
|
104
135
|
type: 'object',
|
|
105
136
|
properties: {
|
|
106
|
-
path: {
|
|
137
|
+
path: {
|
|
138
|
+
type: 'string',
|
|
139
|
+
description: 'Path relative to the components directory, e.g. "my_app/schema.graphql".',
|
|
140
|
+
},
|
|
107
141
|
content: { type: 'string', description: 'UTF-8 file contents.' },
|
|
108
142
|
},
|
|
109
143
|
required: ['path', 'content'],
|
|
@@ -114,7 +148,7 @@ exports.writeFileTool = {
|
|
|
114
148
|
if (Buffer.byteLength(content, 'utf8') > MAX_WRITE_BYTES) {
|
|
115
149
|
throw new Error(`Write exceeds ${MAX_WRITE_BYTES}-byte cap`);
|
|
116
150
|
}
|
|
117
|
-
const path = await resolveScoped(ctx.scopes, args.path, 'write');
|
|
151
|
+
const path = await resolveScoped(ctx.scopes, 'components', args.path, 'write');
|
|
118
152
|
await (0, promises_1.mkdir)((0, node_path_1.dirname)(path), { recursive: true });
|
|
119
153
|
await (0, promises_1.writeFile)(path, content, 'utf8');
|
|
120
154
|
return { path, bytesWritten: Buffer.byteLength(content, 'utf8') };
|
|
@@ -124,17 +158,20 @@ exports.writeFileTool = {
|
|
|
124
158
|
exports.listDirTool = {
|
|
125
159
|
def: {
|
|
126
160
|
name: 'list_dir',
|
|
127
|
-
description: 'List the immediate entries in a directory within
|
|
161
|
+
description: 'List the immediate entries in a directory within the components, logs, or config scope.',
|
|
128
162
|
parameters: {
|
|
129
163
|
type: 'object',
|
|
130
164
|
properties: {
|
|
131
|
-
|
|
165
|
+
root: { type: 'string', enum: SCOPES, description: SCOPE_DESCRIPTION },
|
|
166
|
+
path: {
|
|
167
|
+
type: 'string',
|
|
168
|
+
description: 'Directory relative to the chosen root. Omit or "" for the root itself.',
|
|
169
|
+
},
|
|
132
170
|
},
|
|
133
|
-
required: ['path'],
|
|
134
171
|
},
|
|
135
172
|
},
|
|
136
173
|
handler: async (args, ctx) => {
|
|
137
|
-
const path = await resolveScoped(ctx.scopes, args.path, 'read');
|
|
174
|
+
const path = await resolveScoped(ctx.scopes, normalizeScope(args.root), args.path ?? '', 'read');
|
|
138
175
|
const entries = await (0, promises_1.readdir)(path, { withFileTypes: true });
|
|
139
176
|
return {
|
|
140
177
|
path,
|
|
@@ -148,20 +185,24 @@ exports.listDirTool = {
|
|
|
148
185
|
exports.grepFilesTool = {
|
|
149
186
|
def: {
|
|
150
187
|
name: 'grep_files',
|
|
151
|
-
description: 'Search recursively
|
|
188
|
+
description: 'Search recursively within a scope for a regex pattern. Returns matched lines.',
|
|
152
189
|
parameters: {
|
|
153
190
|
type: 'object',
|
|
154
191
|
properties: {
|
|
155
|
-
root: { type: 'string',
|
|
192
|
+
root: { type: 'string', enum: SCOPES, description: SCOPE_DESCRIPTION },
|
|
193
|
+
path: {
|
|
194
|
+
type: 'string',
|
|
195
|
+
description: 'Subdirectory relative to the chosen root to search under. Omit or "" for the whole scope.',
|
|
196
|
+
},
|
|
156
197
|
pattern: { type: 'string', description: 'JavaScript-compatible regular expression source.' },
|
|
157
198
|
flags: { type: 'string', description: 'Regex flags (default: "i").' },
|
|
158
199
|
maxResults: { type: 'integer', minimum: 1, maximum: MAX_GREP_RESULTS },
|
|
159
200
|
},
|
|
160
|
-
required: ['
|
|
201
|
+
required: ['pattern'],
|
|
161
202
|
},
|
|
162
203
|
},
|
|
163
204
|
handler: async (args, ctx) => {
|
|
164
|
-
const root = await resolveScoped(ctx.scopes, args.root, 'read');
|
|
205
|
+
const root = await resolveScoped(ctx.scopes, normalizeScope(args.root), args.path ?? '', 'read');
|
|
165
206
|
// Cap pattern length. A maliciously crafted regex (e.g. nested quantifiers) can backtrack
|
|
166
207
|
// catastrophically and block the main thread; JS has no native per-match timeout. The agent
|
|
167
208
|
// is super_user-gated so this is self-inflicted DoS rather than a privilege boundary, but a
|
|
@@ -206,18 +247,19 @@ exports.grepFilesTool = {
|
|
|
206
247
|
exports.tailFileTool = {
|
|
207
248
|
def: {
|
|
208
249
|
name: 'tail_file',
|
|
209
|
-
description: 'Return the last N lines of a UTF-8 file. Useful for log tails.',
|
|
250
|
+
description: 'Return the last N lines of a UTF-8 file. Useful for log tails (root: "logs").',
|
|
210
251
|
parameters: {
|
|
211
252
|
type: 'object',
|
|
212
253
|
properties: {
|
|
213
|
-
|
|
254
|
+
root: { type: 'string', enum: SCOPES, description: SCOPE_DESCRIPTION },
|
|
255
|
+
path: { type: 'string', description: 'Path relative to the chosen root, e.g. "hdb.log".' },
|
|
214
256
|
lines: { type: 'integer', minimum: 1, maximum: 5000 },
|
|
215
257
|
},
|
|
216
258
|
required: ['path'],
|
|
217
259
|
},
|
|
218
260
|
},
|
|
219
261
|
handler: async (args, ctx) => {
|
|
220
|
-
const path = await resolveScoped(ctx.scopes, args.path, 'read');
|
|
262
|
+
const path = await resolveScoped(ctx.scopes, normalizeScope(args.root), args.path, 'read');
|
|
221
263
|
const wanted = Math.min(args.lines ?? DEFAULT_TAIL_LINES, 5000);
|
|
222
264
|
// Read only the trailing TAIL_READ_BYTES — a multi-GB log file otherwise OOMs the process.
|
|
223
265
|
const st = await (0, promises_1.stat)(path);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fsTools.js","sourceRoot":"","sources":["../../../agent/tools/fsTools.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"fsTools.js","sourceRoot":"","sources":["../../../agent/tools/fsTools.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* V8 inspector (CDP) tools for the built-in agent (#626).
|
|
3
|
+
*
|
|
4
|
+
* The agent runs on the main thread; these tools attach over the Chrome
|
|
5
|
+
* DevTools Protocol to *worker* thread inspector ports so it can evaluate,
|
|
6
|
+
* set breakpoints/logpoints, and CPU-profile a worker without stalling the
|
|
7
|
+
* thread it runs on. A worker's debug port is `threads_debug_startingPort +
|
|
8
|
+
* workerIndex` (see `server/threads/threadServer.js`); attaching therefore
|
|
9
|
+
* requires `threads_debug: true` and a configured `threads_debug_startingPort`.
|
|
10
|
+
*
|
|
11
|
+
* Attaching to the main thread (`workerIndex < 0`) is rejected — that's the
|
|
12
|
+
* agent's own thread, and a self-attach + breakpoint would deadlock. This is
|
|
13
|
+
* the operator-only counterpart to the app-developer agent, which runs on a
|
|
14
|
+
* worker and must never inspector-attach to itself.
|
|
15
|
+
*
|
|
16
|
+
* Safety against wedging a live worker: every connection registers a
|
|
17
|
+
* `Debugger.paused` handler that logs a stack snapshot and immediately resumes,
|
|
18
|
+
* so a breakpoint hit is observable (via the Harper log) but never leaves the
|
|
19
|
+
* worker paused. CDP calls carry a per-call abort signal + timeout so an
|
|
20
|
+
* unresponsive worker can't hang the agent loop.
|
|
21
|
+
*
|
|
22
|
+
* Dependencies (debug config + live worker count) are injected so the tool is
|
|
23
|
+
* unit-testable without booting a server.
|
|
24
|
+
*/
|
|
25
|
+
import type { AgentTool } from '../types.ts';
|
|
26
|
+
export interface InspectorDeps {
|
|
27
|
+
/** Whether `threads_debug` is enabled. */
|
|
28
|
+
debugEnabled: boolean;
|
|
29
|
+
/** `threads_debug_startingPort`, or undefined when not configured. */
|
|
30
|
+
startingPort: number | undefined;
|
|
31
|
+
/** Inspector host (`threads_debug_host`), defaulting to 127.0.0.1. */
|
|
32
|
+
host: string;
|
|
33
|
+
/** Live worker-slot count, for range-checking `workerIndex`. */
|
|
34
|
+
getWorkerCount: () => number;
|
|
35
|
+
}
|
|
36
|
+
/** Reduce a CDP CPU profile to the hottest functions by self time — the raw profile is megabytes. */
|
|
37
|
+
export declare function summarizeProfile(profile: any, topN: number): object;
|
|
38
|
+
export declare function buildInspectorTools(deps: InspectorDeps): AgentTool[];
|
|
39
|
+
/** Close all live inspector connections (agent shutdown / test teardown). Handles in-flight opens. */
|
|
40
|
+
export declare function _closeInspectorSessions(): void;
|