@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.
Files changed (173) hide show
  1. package/agent/agent.ts +152 -10
  2. package/agent/bestPractices.ts +58 -0
  3. package/agent/mcpTools.ts +122 -0
  4. package/agent/operations.ts +10 -1
  5. package/agent/registryTools.ts +117 -0
  6. package/agent/session.ts +16 -7
  7. package/agent/tools/fsTools.ts +74 -27
  8. package/agent/tools/inspectorTool.ts +459 -0
  9. package/agent/toolset.ts +27 -7
  10. package/agent/types.ts +2 -0
  11. package/components/Application.ts +566 -85
  12. package/components/OptionsWatcher.ts +62 -2
  13. package/components/Scope.ts +31 -8
  14. package/components/componentLoader.ts +5 -1
  15. package/components/componentSecrets.ts +514 -55
  16. package/components/deploymentRecorder.ts +7 -6
  17. package/components/gitCredentialHelper.js +115 -0
  18. package/components/gitCredentialServer.ts +251 -0
  19. package/components/mcp/tools/application.ts +197 -23
  20. package/components/mcp/tools/operations.ts +1 -1
  21. package/components/mcp/tools/schemas/derive.ts +6 -2
  22. package/components/operations.js +21 -19
  23. package/components/operationsValidation.js +86 -21
  24. package/components/secretOperations.ts +110 -30
  25. package/config/harperConfigEnvVars.ts +90 -5
  26. package/config-root.schema.json +4 -0
  27. package/dist/agent/agent.d.ts +24 -3
  28. package/dist/agent/agent.js +172 -10
  29. package/dist/agent/agent.js.map +1 -1
  30. package/dist/agent/bestPractices.d.ts +24 -0
  31. package/dist/agent/bestPractices.js +60 -0
  32. package/dist/agent/bestPractices.js.map +1 -0
  33. package/dist/agent/mcpTools.d.ts +24 -0
  34. package/dist/agent/mcpTools.js +115 -0
  35. package/dist/agent/mcpTools.js.map +1 -0
  36. package/dist/agent/operations.js +10 -1
  37. package/dist/agent/operations.js.map +1 -1
  38. package/dist/agent/registryTools.d.ts +45 -0
  39. package/dist/agent/registryTools.js +113 -0
  40. package/dist/agent/registryTools.js.map +1 -0
  41. package/dist/agent/session.js +16 -7
  42. package/dist/agent/session.js.map +1 -1
  43. package/dist/agent/tools/fsTools.js +70 -28
  44. package/dist/agent/tools/fsTools.js.map +1 -1
  45. package/dist/agent/tools/inspectorTool.d.ts +40 -0
  46. package/dist/agent/tools/inspectorTool.js +428 -0
  47. package/dist/agent/tools/inspectorTool.js.map +1 -0
  48. package/dist/agent/toolset.d.ts +16 -6
  49. package/dist/agent/toolset.js +17 -7
  50. package/dist/agent/toolset.js.map +1 -1
  51. package/dist/agent/types.d.ts +2 -0
  52. package/dist/components/Application.d.ts +73 -18
  53. package/dist/components/Application.js +475 -64
  54. package/dist/components/Application.js.map +1 -1
  55. package/dist/components/OptionsWatcher.d.ts +1 -1
  56. package/dist/components/OptionsWatcher.js +65 -2
  57. package/dist/components/OptionsWatcher.js.map +1 -1
  58. package/dist/components/Scope.d.ts +8 -6
  59. package/dist/components/Scope.js +22 -6
  60. package/dist/components/Scope.js.map +1 -1
  61. package/dist/components/componentLoader.js +5 -1
  62. package/dist/components/componentLoader.js.map +1 -1
  63. package/dist/components/componentSecrets.d.ts +33 -7
  64. package/dist/components/componentSecrets.js +473 -59
  65. package/dist/components/componentSecrets.js.map +1 -1
  66. package/dist/components/deploymentRecorder.d.ts +2 -2
  67. package/dist/components/deploymentRecorder.js +1 -1
  68. package/dist/components/deploymentRecorder.js.map +1 -1
  69. package/dist/components/gitCredentialHelper.d.ts +1 -0
  70. package/dist/components/gitCredentialHelper.js +113 -0
  71. package/dist/components/gitCredentialHelper.js.map +1 -0
  72. package/dist/components/gitCredentialServer.d.ts +33 -0
  73. package/dist/components/gitCredentialServer.js +236 -0
  74. package/dist/components/gitCredentialServer.js.map +1 -0
  75. package/dist/components/mcp/tools/application.d.ts +19 -0
  76. package/dist/components/mcp/tools/application.js +180 -22
  77. package/dist/components/mcp/tools/application.js.map +1 -1
  78. package/dist/components/mcp/tools/operations.d.ts +13 -0
  79. package/dist/components/mcp/tools/operations.js +1 -0
  80. package/dist/components/mcp/tools/operations.js.map +1 -1
  81. package/dist/components/mcp/tools/schemas/derive.js +6 -2
  82. package/dist/components/mcp/tools/schemas/derive.js.map +1 -1
  83. package/dist/components/operations.js +23 -21
  84. package/dist/components/operations.js.map +1 -1
  85. package/dist/components/operationsValidation.js +84 -21
  86. package/dist/components/operationsValidation.js.map +1 -1
  87. package/dist/components/secretOperations.d.ts +33 -11
  88. package/dist/components/secretOperations.js +90 -26
  89. package/dist/components/secretOperations.js.map +1 -1
  90. package/dist/config/harperConfigEnvVars.d.ts +21 -0
  91. package/dist/config/harperConfigEnvVars.js +95 -5
  92. package/dist/config/harperConfigEnvVars.js.map +1 -1
  93. package/dist/index.d.ts +4 -0
  94. package/dist/index.js +14 -1
  95. package/dist/index.js.map +1 -1
  96. package/dist/resources/Resource.d.ts +19 -0
  97. package/dist/resources/Resource.js +93 -2
  98. package/dist/resources/Resource.js.map +1 -1
  99. package/dist/resources/Table.d.ts +9 -0
  100. package/dist/resources/Table.js +256 -50
  101. package/dist/resources/Table.js.map +1 -1
  102. package/dist/resources/analytics/read.js +28 -25
  103. package/dist/resources/analytics/read.js.map +1 -1
  104. package/dist/resources/defineResource.d.ts +180 -0
  105. package/dist/resources/defineResource.js +505 -0
  106. package/dist/resources/defineResource.js.map +1 -0
  107. package/dist/resources/defineTable.d.ts +221 -0
  108. package/dist/resources/defineTable.js +227 -0
  109. package/dist/resources/defineTable.js.map +1 -0
  110. package/dist/resources/jsonSchemaTypes.d.ts +2 -0
  111. package/dist/resources/jsonSchemaTypes.js +12 -4
  112. package/dist/resources/jsonSchemaTypes.js.map +1 -1
  113. package/dist/resources/openApi.js +69 -13
  114. package/dist/resources/openApi.js.map +1 -1
  115. package/dist/resources/search.js +6 -8
  116. package/dist/resources/search.js.map +1 -1
  117. package/dist/server/graphqlQuerying.js +4 -2
  118. package/dist/server/graphqlQuerying.js.map +1 -1
  119. package/dist/server/http.d.ts +12 -0
  120. package/dist/server/http.js +35 -15
  121. package/dist/server/http.js.map +1 -1
  122. package/dist/server/serverHelpers/serverUtilities.js +8 -5
  123. package/dist/server/serverHelpers/serverUtilities.js.map +1 -1
  124. package/dist/server/serverHelpers/uwsServer.js +23 -0
  125. package/dist/server/serverHelpers/uwsServer.js.map +1 -1
  126. package/dist/utility/errors/hdbError.d.ts +21 -0
  127. package/dist/utility/errors/hdbError.js +23 -1
  128. package/dist/utility/errors/hdbError.js.map +1 -1
  129. package/dist/validation/configValidator.js +22 -6
  130. package/dist/validation/configValidator.js.map +1 -1
  131. package/index.ts +33 -0
  132. package/npm-shrinkwrap.json +9197 -15236
  133. package/package.json +5 -3
  134. package/resources/DESIGN.md +42 -15
  135. package/resources/Resource.ts +99 -2
  136. package/resources/Table.ts +275 -71
  137. package/resources/analytics/read.ts +30 -25
  138. package/resources/defineResource.ts +651 -0
  139. package/resources/defineTable.ts +407 -0
  140. package/resources/jsonSchemaTypes.ts +12 -4
  141. package/resources/openApi.ts +68 -16
  142. package/resources/search.ts +5 -8
  143. package/server/graphqlQuerying.ts +4 -2
  144. package/server/http.ts +40 -16
  145. package/server/serverHelpers/serverUtilities.ts +19 -6
  146. package/server/serverHelpers/uwsServer.ts +24 -0
  147. package/studio/web/assets/{Chat-D4FIaBu7.js → Chat-CTjtL8Z4.js} +2 -2
  148. package/studio/web/assets/{Chat-D4FIaBu7.js.map → Chat-CTjtL8Z4.js.map} +1 -1
  149. package/studio/web/assets/{FloatingChat-DGUC3L4r.js → FloatingChat-CafHR4Ur.js} +4 -4
  150. package/studio/web/assets/{FloatingChat-DGUC3L4r.js.map → FloatingChat-CafHR4Ur.js.map} +1 -1
  151. package/studio/web/assets/{applications-D8Am9ikM.js → applications-Buh_q0Vj.js} +2 -2
  152. package/studio/web/assets/{applications-D8Am9ikM.js.map → applications-Buh_q0Vj.js.map} +1 -1
  153. package/studio/web/assets/{index-HGL4WHdb.js → index-0hXeECkS.js} +6 -6
  154. package/studio/web/assets/{index-HGL4WHdb.js.map → index-0hXeECkS.js.map} +1 -1
  155. package/studio/web/assets/{index.lazy-Dk5j1AoQ.js → index.lazy-B00B7VBT.js} +4 -4
  156. package/studio/web/assets/{index.lazy-Dk5j1AoQ.js.map → index.lazy-B00B7VBT.js.map} +1 -1
  157. package/studio/web/assets/{profile-7bu_CF1f.js → profile-Cg2wwYPn.js} +2 -2
  158. package/studio/web/assets/{profile-7bu_CF1f.js.map → profile-Cg2wwYPn.js.map} +1 -1
  159. package/studio/web/assets/{setComponentFile-MfYm9F94.js → setComponentFile-DCaDIvyB.js} +2 -2
  160. package/studio/web/assets/{setComponentFile-MfYm9F94.js.map → setComponentFile-DCaDIvyB.js.map} +1 -1
  161. package/studio/web/assets/{setup-SKA4UhdE.js → setup-CAVcAQjK.js} +2 -2
  162. package/studio/web/assets/{setup-SKA4UhdE.js.map → setup-CAVcAQjK.js.map} +1 -1
  163. package/studio/web/assets/{status-DetVLUxR.js → status-BRXorNdD.js} +2 -2
  164. package/studio/web/assets/{status-DetVLUxR.js.map → status-BRXorNdD.js.map} +1 -1
  165. package/studio/web/assets/{swagger-ui-react-DLeYARY2.js → swagger-ui-react-Dy1D62vO.js} +2 -2
  166. package/studio/web/assets/{swagger-ui-react-DLeYARY2.js.map → swagger-ui-react-Dy1D62vO.js.map} +1 -1
  167. package/studio/web/assets/{tsMode-DGO-jIF7.js → tsMode-A8gbL74v.js} +2 -2
  168. package/studio/web/assets/{tsMode-DGO-jIF7.js.map → tsMode-A8gbL74v.js.map} +1 -1
  169. package/studio/web/assets/{useEntityRestURL-4M2i6bo4.js → useEntityRestURL-cDodrVcQ.js} +2 -2
  170. package/studio/web/assets/{useEntityRestURL-4M2i6bo4.js.map → useEntityRestURL-cDodrVcQ.js.map} +1 -1
  171. package/studio/web/index.html +1 -1
  172. package/utility/errors/hdbError.ts +32 -0
  173. 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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"}
@@ -61,7 +61,13 @@ async function createSession(opts) {
61
61
  createdAt: now,
62
62
  updatedAt: now,
63
63
  };
64
- await getAgentSessionTable().primaryStore.put(row.session_id, row);
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().primaryStore.put(sessionId, session);
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().primaryStore.put(sessionId, session);
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().primaryStore.put(sessionId, session);
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().primaryStore.put(sessionId, session);
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().primaryStore.put(sessionId, session);
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
- return session;
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":"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"}
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
- async function resolveScoped(scopes, path, access) {
25
- const absolute = (0, node_path_1.resolve)(path);
26
- const candidates = [scopes.componentsRoot];
27
- if (access === 'read') {
28
- candidates.push(scopes.logDir, scopes.configDir);
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
- for (const root of candidates) {
49
- const realRoot = await safeRealPath(root);
50
- if (isInside(realAbsolute, realRoot))
51
- return realAbsolute;
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 within componentsRoot, logDir, or configDir.',
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
- path: { type: 'string', description: 'Absolute filesystem path.' },
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 within componentsRoot. Creates parent directories as needed.',
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: { type: 'string', description: 'Absolute filesystem path under componentsRoot.' },
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 an allowed scope.',
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
- path: { type: 'string', description: 'Absolute filesystem path.' },
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 under a scoped directory for a regex pattern. Returns matched lines.',
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', description: 'Directory to search under.' },
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: ['root', 'pattern'],
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
- path: { type: 'string', description: 'Absolute filesystem path.' },
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;