arc-1 0.9.25 → 1.0.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 +29 -12
- package/dist/adt/abapgit.d.ts +19 -6
- package/dist/adt/abapgit.d.ts.map +1 -1
- package/dist/adt/abapgit.js +141 -36
- package/dist/adt/abapgit.js.map +1 -1
- package/dist/adt/authorization-trace.d.ts +23 -0
- package/dist/adt/authorization-trace.d.ts.map +1 -0
- package/dist/adt/authorization-trace.js +196 -0
- package/dist/adt/authorization-trace.js.map +1 -0
- package/dist/adt/client.d.ts +21 -8
- package/dist/adt/client.d.ts.map +1 -1
- package/dist/adt/client.js +47 -7
- package/dist/adt/client.js.map +1 -1
- package/dist/adt/config.d.ts +15 -0
- package/dist/adt/config.d.ts.map +1 -1
- package/dist/adt/config.js.map +1 -1
- package/dist/adt/crud.d.ts +7 -2
- package/dist/adt/crud.d.ts.map +1 -1
- package/dist/adt/crud.js +12 -4
- package/dist/adt/crud.js.map +1 -1
- package/dist/adt/ddic-xml.d.ts +27 -17
- package/dist/adt/ddic-xml.d.ts.map +1 -1
- package/dist/adt/ddic-xml.js +45 -34
- package/dist/adt/ddic-xml.js.map +1 -1
- package/dist/adt/devtools.d.ts +13 -0
- package/dist/adt/devtools.d.ts.map +1 -1
- package/dist/adt/devtools.js +120 -50
- package/dist/adt/devtools.js.map +1 -1
- package/dist/adt/diagnostics.d.ts +1 -1
- package/dist/adt/diagnostics.d.ts.map +1 -1
- package/dist/adt/diagnostics.js +1 -0
- package/dist/adt/diagnostics.js.map +1 -1
- package/dist/adt/errors.d.ts +8 -8
- package/dist/adt/errors.d.ts.map +1 -1
- package/dist/adt/errors.js +30 -11
- package/dist/adt/errors.js.map +1 -1
- package/dist/adt/http.d.ts +17 -1
- package/dist/adt/http.d.ts.map +1 -1
- package/dist/adt/http.js +102 -19
- package/dist/adt/http.js.map +1 -1
- package/dist/adt/oauth.d.ts +2 -2
- package/dist/adt/oauth.d.ts.map +1 -1
- package/dist/adt/oauth.js +5 -3
- package/dist/adt/oauth.js.map +1 -1
- package/dist/adt/package-hierarchy.d.ts.map +1 -1
- package/dist/adt/package-hierarchy.js.map +1 -1
- package/dist/adt/rap-generate.js.map +1 -1
- package/dist/adt/rap-handlers.js.map +1 -1
- package/dist/adt/rap-preflight.js.map +1 -1
- package/dist/adt/safety.d.ts +13 -13
- package/dist/adt/safety.d.ts.map +1 -1
- package/dist/adt/semaphore.d.ts.map +1 -1
- package/dist/adt/server-driven.d.ts +154 -34
- package/dist/adt/server-driven.d.ts.map +1 -1
- package/dist/adt/server-driven.js +178 -53
- package/dist/adt/server-driven.js.map +1 -1
- package/dist/adt/structure-hierarchy.js.map +1 -1
- package/dist/adt/transport.d.ts +6 -6
- package/dist/adt/transport.d.ts.map +1 -1
- package/dist/adt/transport.js +23 -34
- package/dist/adt/transport.js.map +1 -1
- package/dist/adt/types.d.ts +94 -6
- package/dist/adt/types.d.ts.map +1 -1
- package/dist/adt/version-diff.js.map +1 -1
- package/dist/adt/xml-parser.d.ts +52 -12
- package/dist/adt/xml-parser.d.ts.map +1 -1
- package/dist/adt/xml-parser.js +120 -10
- package/dist/adt/xml-parser.js.map +1 -1
- package/dist/aff/validator.js.map +1 -1
- package/dist/authz/policy.d.ts +8 -0
- package/dist/authz/policy.d.ts.map +1 -1
- package/dist/authz/policy.js +24 -0
- package/dist/authz/policy.js.map +1 -1
- package/dist/cache/cache.d.ts +4 -36
- package/dist/cache/cache.d.ts.map +1 -1
- package/dist/cache/cache.js +4 -5
- package/dist/cache/cache.js.map +1 -1
- package/dist/cache/caching-layer.d.ts +6 -22
- package/dist/cache/caching-layer.d.ts.map +1 -1
- package/dist/cache/caching-layer.js +5 -29
- package/dist/cache/caching-layer.js.map +1 -1
- package/dist/cache/inactive-list-cache.d.ts.map +1 -1
- package/dist/cache/memory.d.ts +2 -13
- package/dist/cache/memory.d.ts.map +1 -1
- package/dist/cache/memory.js +1 -70
- package/dist/cache/memory.js.map +1 -1
- package/dist/cache/sqlite.d.ts +3 -10
- package/dist/cache/sqlite.d.ts.map +1 -1
- package/dist/cache/sqlite.js +9 -85
- package/dist/cache/sqlite.js.map +1 -1
- package/dist/cli.js +6 -3
- package/dist/cli.js.map +1 -1
- package/dist/context/compressor.js.map +1 -1
- package/dist/context/grep.js.map +1 -1
- package/dist/context/unit-surgery.d.ts +28 -0
- package/dist/context/unit-surgery.d.ts.map +1 -0
- package/dist/context/unit-surgery.js +150 -0
- package/dist/context/unit-surgery.js.map +1 -0
- package/dist/extract-sap-cookies.js.map +1 -1
- package/dist/handlers/activate.d.ts.map +1 -1
- package/dist/handlers/activate.js +44 -6
- package/dist/handlers/activate.js.map +1 -1
- package/dist/handlers/context.d.ts +1 -1
- package/dist/handlers/context.d.ts.map +1 -1
- package/dist/handlers/context.js +98 -28
- package/dist/handlers/context.js.map +1 -1
- package/dist/handlers/diagnose.d.ts.map +1 -1
- package/dist/handlers/diagnose.js +74 -31
- package/dist/handlers/diagnose.js.map +1 -1
- package/dist/handlers/dispatch.d.ts +12 -1
- package/dist/handlers/dispatch.d.ts.map +1 -1
- package/dist/handlers/dispatch.js +160 -25
- package/dist/handlers/dispatch.js.map +1 -1
- package/dist/handlers/feature-cache.d.ts +27 -14
- package/dist/handlers/feature-cache.d.ts.map +1 -1
- package/dist/handlers/feature-cache.js +63 -25
- package/dist/handlers/feature-cache.js.map +1 -1
- package/dist/handlers/function-processing.d.ts +61 -0
- package/dist/handlers/function-processing.d.ts.map +1 -0
- package/dist/handlers/function-processing.js +45 -0
- package/dist/handlers/function-processing.js.map +1 -0
- package/dist/handlers/git.d.ts.map +1 -1
- package/dist/handlers/git.js +44 -19
- package/dist/handlers/git.js.map +1 -1
- package/dist/handlers/hyperfocused.d.ts.map +1 -1
- package/dist/handlers/hyperfocused.js +2 -3
- package/dist/handlers/hyperfocused.js.map +1 -1
- package/dist/handlers/lint.d.ts.map +1 -1
- package/dist/handlers/lint.js +7 -7
- package/dist/handlers/lint.js.map +1 -1
- package/dist/handlers/manage.d.ts.map +1 -1
- package/dist/handlers/manage.js +47 -28
- package/dist/handlers/manage.js.map +1 -1
- package/dist/handlers/navigate.d.ts.map +1 -1
- package/dist/handlers/navigate.js +27 -90
- package/dist/handlers/navigate.js.map +1 -1
- package/dist/handlers/object-types.d.ts +2 -0
- package/dist/handlers/object-types.d.ts.map +1 -1
- package/dist/handlers/object-types.js +10 -0
- package/dist/handlers/object-types.js.map +1 -1
- package/dist/handlers/query-errors.d.ts +11 -0
- package/dist/handlers/query-errors.d.ts.map +1 -0
- package/dist/handlers/query-errors.js +216 -0
- package/dist/handlers/query-errors.js.map +1 -0
- package/dist/handlers/query.d.ts.map +1 -1
- package/dist/handlers/query.js +62 -67
- package/dist/handlers/query.js.map +1 -1
- package/dist/handlers/read.d.ts.map +1 -1
- package/dist/handlers/read.js +64 -41
- package/dist/handlers/read.js.map +1 -1
- package/dist/handlers/schemas.d.ts +285 -234
- package/dist/handlers/schemas.d.ts.map +1 -1
- package/dist/handlers/schemas.js +126 -32
- package/dist/handlers/schemas.js.map +1 -1
- package/dist/handlers/search.d.ts.map +1 -1
- package/dist/handlers/search.js +8 -7
- package/dist/handlers/search.js.map +1 -1
- package/dist/handlers/shared.d.ts +13 -0
- package/dist/handlers/shared.d.ts.map +1 -1
- package/dist/handlers/shared.js +15 -0
- package/dist/handlers/shared.js.map +1 -1
- package/dist/handlers/tool-descriptions.d.ts +4 -0
- package/dist/handlers/tool-descriptions.d.ts.map +1 -0
- package/dist/handlers/tool-descriptions.js +52 -0
- package/dist/handlers/tool-descriptions.js.map +1 -0
- package/dist/handlers/tool-registry.d.ts +20 -6
- package/dist/handlers/tool-registry.d.ts.map +1 -1
- package/dist/handlers/tool-registry.js +18 -0
- package/dist/handlers/tool-registry.js.map +1 -1
- package/dist/handlers/tools.d.ts.map +1 -1
- package/dist/handlers/tools.js +124 -92
- package/dist/handlers/tools.js.map +1 -1
- package/dist/handlers/transport.d.ts +1 -1
- package/dist/handlers/transport.d.ts.map +1 -1
- package/dist/handlers/transport.js +37 -10
- package/dist/handlers/transport.js.map +1 -1
- package/dist/handlers/where-used.d.ts +25 -0
- package/dist/handlers/where-used.d.ts.map +1 -0
- package/dist/handlers/where-used.js +94 -0
- package/dist/handlers/where-used.js.map +1 -0
- package/dist/handlers/write/class-surgery.d.ts.map +1 -1
- package/dist/handlers/write/class-surgery.js +11 -12
- package/dist/handlers/write/class-surgery.js.map +1 -1
- package/dist/handlers/write/create.d.ts.map +1 -1
- package/dist/handlers/write/create.js +194 -84
- package/dist/handlers/write/create.js.map +1 -1
- package/dist/handlers/write/rap.d.ts.map +1 -1
- package/dist/handlers/write/rap.js +9 -9
- package/dist/handlers/write/rap.js.map +1 -1
- package/dist/handlers/write/unit-surgery.d.ts +5 -0
- package/dist/handlers/write/unit-surgery.d.ts.map +1 -0
- package/dist/handlers/write/unit-surgery.js +47 -0
- package/dist/handlers/write/unit-surgery.js.map +1 -0
- package/dist/handlers/write/update-delete.js +8 -8
- package/dist/handlers/write/update-delete.js.map +1 -1
- package/dist/handlers/write-helpers.d.ts +7 -4
- package/dist/handlers/write-helpers.d.ts.map +1 -1
- package/dist/handlers/write-helpers.js +118 -63
- package/dist/handlers/write-helpers.js.map +1 -1
- package/dist/handlers/write.d.ts.map +1 -1
- package/dist/handlers/write.js +35 -13
- package/dist/handlers/write.js.map +1 -1
- package/dist/lint/config-builder.js.map +1 -1
- package/dist/lint/lint.d.ts.map +1 -1
- package/dist/lint/lint.js +4 -2
- package/dist/lint/lint.js.map +1 -1
- package/dist/probe/catalog.js +1 -1
- package/dist/probe/catalog.js.map +1 -1
- package/dist/public/testing.js.map +1 -1
- package/dist/public/ui/app.js +1 -14
- package/dist/registry/tool-registry.d.ts.map +1 -1
- package/dist/server/audit.d.ts +27 -15
- package/dist/server/audit.d.ts.map +1 -1
- package/dist/server/audit.js.map +1 -1
- package/dist/server/auth-rate-limit.d.ts +18 -9
- package/dist/server/auth-rate-limit.d.ts.map +1 -1
- package/dist/server/auth-rate-limit.js +31 -6
- package/dist/server/auth-rate-limit.js.map +1 -1
- package/dist/server/auth-summary.d.ts +4 -0
- package/dist/server/auth-summary.d.ts.map +1 -0
- package/dist/server/auth-summary.js +67 -0
- package/dist/server/auth-summary.js.map +1 -0
- package/dist/server/config.d.ts.map +1 -1
- package/dist/server/config.js +110 -7
- package/dist/server/config.js.map +1 -1
- package/dist/server/context.d.ts +12 -0
- package/dist/server/context.d.ts.map +1 -1
- package/dist/server/context.js.map +1 -1
- package/dist/server/destination-discovery.d.ts +36 -0
- package/dist/server/destination-discovery.d.ts.map +1 -0
- package/dist/server/destination-discovery.js +130 -0
- package/dist/server/destination-discovery.js.map +1 -0
- package/dist/server/destination-registry.d.ts +111 -0
- package/dist/server/destination-registry.d.ts.map +1 -0
- package/dist/server/destination-registry.js +449 -0
- package/dist/server/destination-registry.js.map +1 -0
- package/dist/server/http.d.ts +43 -1
- package/dist/server/http.d.ts.map +1 -1
- package/dist/server/http.js +283 -73
- package/dist/server/http.js.map +1 -1
- package/dist/server/logger.d.ts.map +1 -1
- package/dist/server/logger.js +58 -13
- package/dist/server/logger.js.map +1 -1
- package/dist/server/mcp-rate-limit.d.ts +6 -4
- package/dist/server/mcp-rate-limit.d.ts.map +1 -1
- package/dist/server/mcp-rate-limit.js +6 -4
- package/dist/server/mcp-rate-limit.js.map +1 -1
- package/dist/server/multi-target-basic-auth.d.ts +49 -0
- package/dist/server/multi-target-basic-auth.d.ts.map +1 -0
- package/dist/server/multi-target-basic-auth.js +246 -0
- package/dist/server/multi-target-basic-auth.js.map +1 -0
- package/dist/server/multi-target-catalog.d.ts +33 -0
- package/dist/server/multi-target-catalog.d.ts.map +1 -0
- package/dist/server/multi-target-catalog.js +130 -0
- package/dist/server/multi-target-catalog.js.map +1 -0
- package/dist/server/multi-target-destination-config.d.ts +12 -0
- package/dist/server/multi-target-destination-config.d.ts.map +1 -0
- package/dist/server/multi-target-destination-config.js +37 -0
- package/dist/server/multi-target-destination-config.js.map +1 -0
- package/dist/server/multi-target-destination-runtime.d.ts +20 -0
- package/dist/server/multi-target-destination-runtime.d.ts.map +1 -0
- package/dist/server/multi-target-destination-runtime.js +191 -0
- package/dist/server/multi-target-destination-runtime.js.map +1 -0
- package/dist/server/multi-target-feature-state.d.ts +6 -0
- package/dist/server/multi-target-feature-state.d.ts.map +1 -0
- package/dist/server/multi-target-feature-state.js +41 -0
- package/dist/server/multi-target-feature-state.js.map +1 -0
- package/dist/server/multi-target-identity.d.ts +10 -0
- package/dist/server/multi-target-identity.d.ts.map +1 -0
- package/dist/server/multi-target-identity.js +18 -0
- package/dist/server/multi-target-identity.js.map +1 -0
- package/dist/server/multi-target-runtime.d.ts +27 -0
- package/dist/server/multi-target-runtime.d.ts.map +1 -0
- package/dist/server/multi-target-runtime.js +110 -0
- package/dist/server/multi-target-runtime.js.map +1 -0
- package/dist/server/multi-target-server.d.ts +53 -0
- package/dist/server/multi-target-server.d.ts.map +1 -0
- package/dist/server/multi-target-server.js +434 -0
- package/dist/server/multi-target-server.js.map +1 -0
- package/dist/server/multi-target-shared-auth-state.d.ts +82 -0
- package/dist/server/multi-target-shared-auth-state.d.ts.map +1 -0
- package/dist/server/multi-target-shared-auth-state.js +226 -0
- package/dist/server/multi-target-shared-auth-state.js.map +1 -0
- package/dist/server/multi-target-tools.d.ts +20 -0
- package/dist/server/multi-target-tools.d.ts.map +1 -0
- package/dist/server/multi-target-tools.js +191 -0
- package/dist/server/multi-target-tools.js.map +1 -0
- package/dist/server/oauth-session-recovery.d.ts +22 -0
- package/dist/server/oauth-session-recovery.d.ts.map +1 -0
- package/dist/server/oauth-session-recovery.js +69 -0
- package/dist/server/oauth-session-recovery.js.map +1 -0
- package/dist/server/server.d.ts +47 -25
- package/dist/server/server.d.ts.map +1 -1
- package/dist/server/server.js +490 -301
- package/dist/server/server.js.map +1 -1
- package/dist/server/sinks/btp-auditlog.d.ts.map +1 -1
- package/dist/server/sinks/btp-auditlog.js +83 -11
- package/dist/server/sinks/btp-auditlog.js.map +1 -1
- package/dist/server/sinks/file.d.ts.map +1 -1
- package/dist/server/sinks/file.js.map +1 -1
- package/dist/server/sinks/stderr.d.ts.map +1 -1
- package/dist/server/sinks/stderr.js.map +1 -1
- package/dist/server/tool-auth.d.ts +10 -0
- package/dist/server/tool-auth.d.ts.map +1 -0
- package/dist/server/tool-auth.js +75 -0
- package/dist/server/tool-auth.js.map +1 -0
- package/dist/server/trace-context.d.ts +51 -0
- package/dist/server/trace-context.d.ts.map +1 -0
- package/dist/server/trace-context.js +100 -0
- package/dist/server/trace-context.js.map +1 -0
- package/dist/server/types.d.ts +28 -7
- package/dist/server/types.d.ts.map +1 -1
- package/dist/server/types.js +5 -2
- package/dist/server/types.js.map +1 -1
- package/dist/server/ui-log-buffer.d.ts.map +1 -1
- package/dist/server/ui-log-buffer.js.map +1 -1
- package/dist/server/ui-state.d.ts +0 -2
- package/dist/server/ui-state.d.ts.map +1 -1
- package/dist/server/ui-state.js +2 -6
- package/dist/server/ui-state.js.map +1 -1
- package/dist/server/ui.d.ts.map +1 -1
- package/dist/server/ui.js +8 -9
- package/dist/server/ui.js.map +1 -1
- package/package.json +21 -18
- package/dist/cache/warmup.d.ts +0 -41
- package/dist/cache/warmup.d.ts.map +0 -1
- package/dist/cache/warmup.js +0 -337
- package/dist/cache/warmup.js.map +0 -1
- package/dist/server/elicit.d.ts +0 -43
- package/dist/server/elicit.d.ts.map +0 -1
- package/dist/server/elicit.js +0 -183
- package/dist/server/elicit.js.map +0 -1
package/dist/cache/warmup.js
DELETED
|
@@ -1,337 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Cache warmup — pre-indexes all custom objects from the SAP system.
|
|
3
|
-
*
|
|
4
|
-
* Pipeline:
|
|
5
|
-
* 1. Query TADIR for all custom objects (CLAS, INTF, FUNC) matching package filter
|
|
6
|
-
* 2. Fetch source code for each object (bounded parallel)
|
|
7
|
-
* 3. Extract dependencies from each source (local AST, no ADT calls)
|
|
8
|
-
* 4. Store source + deps + edges in cache
|
|
9
|
-
* 5. Build reverse dependency index (edges indexed by toId)
|
|
10
|
-
*
|
|
11
|
-
* Delta strategy:
|
|
12
|
-
* - On-premise: query REPOSRC for objects changed since last warmup (UDAT field)
|
|
13
|
-
* - BTP: full re-scan (no reliable change timestamp available)
|
|
14
|
-
* - Fallback: compare source hash — if unchanged, skip dep extraction
|
|
15
|
-
*
|
|
16
|
-
* Timing estimates (5 concurrent requests):
|
|
17
|
-
* - 500 objects: ~2-3 minutes
|
|
18
|
-
* - 2,000 objects: ~8-12 minutes
|
|
19
|
-
* - 5,000 objects: ~20-30 minutes
|
|
20
|
-
*/
|
|
21
|
-
import { extractDependencies } from '../context/deps.js';
|
|
22
|
-
import { logger } from '../server/logger.js';
|
|
23
|
-
import { hashSource } from './cache.js';
|
|
24
|
-
const WARMUP_CONCURRENT = 5;
|
|
25
|
-
const WARMUP_MAX_OBJECTS = 10000;
|
|
26
|
-
/**
|
|
27
|
-
* Run cache warmup: enumerate + fetch + index all custom objects.
|
|
28
|
-
*
|
|
29
|
-
* @param client - ADT client for SAP access
|
|
30
|
-
* @param cachingLayer - Caching layer to populate
|
|
31
|
-
* @param packageFilter - Package name filter (supports wildcards, e.g. "Z*,Y*")
|
|
32
|
-
* @param systemType - System type for choosing delta strategy
|
|
33
|
-
*/
|
|
34
|
-
export async function runWarmup(client, cachingLayer, packageFilter, _systemType) {
|
|
35
|
-
const start = Date.now();
|
|
36
|
-
let fetched = 0;
|
|
37
|
-
let skipped = 0;
|
|
38
|
-
let failed = 0;
|
|
39
|
-
let edgesCreated = 0;
|
|
40
|
-
// Phase 1: Enumerate objects from TADIR
|
|
41
|
-
logger.info('Cache warmup: enumerating objects from TADIR...');
|
|
42
|
-
const entries = await enumerateObjects(client, packageFilter);
|
|
43
|
-
logger.info(`Cache warmup: found ${entries.length} objects to index`);
|
|
44
|
-
// Phase 2: Fetch + index in parallel batches
|
|
45
|
-
for (let i = 0; i < entries.length; i += WARMUP_CONCURRENT) {
|
|
46
|
-
const batch = entries.slice(i, i + WARMUP_CONCURRENT);
|
|
47
|
-
const results = await Promise.all(batch.map(async (entry) => {
|
|
48
|
-
try {
|
|
49
|
-
return await indexObject(client, cachingLayer, entry);
|
|
50
|
-
}
|
|
51
|
-
catch (err) {
|
|
52
|
-
logger.debug(`Cache warmup: failed to index ${entry.objectType}:${entry.objectName}`, {
|
|
53
|
-
error: err instanceof Error ? err.message : String(err),
|
|
54
|
-
});
|
|
55
|
-
return { status: 'failed', edges: 0 };
|
|
56
|
-
}
|
|
57
|
-
}));
|
|
58
|
-
try {
|
|
59
|
-
applyWarmupWrites(cachingLayer, results);
|
|
60
|
-
}
|
|
61
|
-
catch (err) {
|
|
62
|
-
logger.warn('Cache warmup: failed to store indexed batch', {
|
|
63
|
-
error: err instanceof Error ? err.message : String(err),
|
|
64
|
-
});
|
|
65
|
-
failed += results.length;
|
|
66
|
-
continue;
|
|
67
|
-
}
|
|
68
|
-
for (const r of results) {
|
|
69
|
-
if (r.status === 'fetched') {
|
|
70
|
-
fetched++;
|
|
71
|
-
edgesCreated += r.edges;
|
|
72
|
-
}
|
|
73
|
-
else if (r.status === 'skipped') {
|
|
74
|
-
skipped++;
|
|
75
|
-
}
|
|
76
|
-
else {
|
|
77
|
-
failed++;
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
// Progress logging every 50 objects
|
|
81
|
-
if ((i + WARMUP_CONCURRENT) % 50 === 0 || i + WARMUP_CONCURRENT >= entries.length) {
|
|
82
|
-
logger.info(`Cache warmup: ${fetched + skipped + failed}/${entries.length} (${fetched} fetched, ${skipped} skipped, ${failed} failed)`);
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
|
-
cachingLayer.setWarmupDone(true);
|
|
86
|
-
const durationMs = Date.now() - start;
|
|
87
|
-
logger.info('Cache warmup complete', {
|
|
88
|
-
totalObjects: entries.length,
|
|
89
|
-
fetched,
|
|
90
|
-
skipped,
|
|
91
|
-
failed,
|
|
92
|
-
edgesCreated,
|
|
93
|
-
durationMs,
|
|
94
|
-
});
|
|
95
|
-
return { totalObjects: entries.length, fetched, skipped, failed, edgesCreated, durationMs };
|
|
96
|
-
}
|
|
97
|
-
function applyWarmupWrites(cachingLayer, results) {
|
|
98
|
-
const writers = results.flatMap((result) => (result.write ? [result.write] : []));
|
|
99
|
-
if (writers.length === 0)
|
|
100
|
-
return;
|
|
101
|
-
cachingLayer.cache.transaction(() => {
|
|
102
|
-
for (const write of writers)
|
|
103
|
-
write();
|
|
104
|
-
});
|
|
105
|
-
}
|
|
106
|
-
/**
|
|
107
|
-
* Enumerate all custom CLAS/INTF/FUNC objects from TADIR.
|
|
108
|
-
*
|
|
109
|
-
* Runs separate queries per OBJ_NAME prefix (Z%, Y%, /%) to avoid
|
|
110
|
-
* parenthesized OR-LIKE clauses that some ADT systems reject.
|
|
111
|
-
* Package filtering is done in-memory after fetching.
|
|
112
|
-
*/
|
|
113
|
-
async function enumerateObjects(client, packageFilter) {
|
|
114
|
-
// TADIR uses PGMID = 'R3TR' for main repository objects
|
|
115
|
-
const objectTypes = "'CLAS','INTF','FUGR'"; // FUGR not FUNC — TADIR stores function groups
|
|
116
|
-
const baseWhere = `PGMID = 'R3TR' AND OBJECT IN (${objectTypes})`;
|
|
117
|
-
// Custom object name prefixes: Z*, Y*, namespaced /XX/*
|
|
118
|
-
// We run one query per prefix to avoid OR-in-parens which some ADT systems reject
|
|
119
|
-
const namePrefixes = ['Z%', 'Y%', '/%'];
|
|
120
|
-
// Compile package filter patterns into regex for in-memory filtering
|
|
121
|
-
let packageRegexes = null;
|
|
122
|
-
if (packageFilter) {
|
|
123
|
-
const patterns = packageFilter
|
|
124
|
-
.split(',')
|
|
125
|
-
.map((p) => p.trim())
|
|
126
|
-
.filter(Boolean);
|
|
127
|
-
if (patterns.length > 0) {
|
|
128
|
-
packageRegexes = patterns.map((p) => {
|
|
129
|
-
// Convert glob-style wildcards to regex
|
|
130
|
-
const escaped = p
|
|
131
|
-
.replace(/[.+^${}()|[\]\\]/g, '\\$&')
|
|
132
|
-
.replace(/\*/g, '.*')
|
|
133
|
-
.replace(/\?/g, '.');
|
|
134
|
-
return new RegExp(`^${escaped}$`, 'i');
|
|
135
|
-
});
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
const seen = new Set();
|
|
139
|
-
const entries = [];
|
|
140
|
-
for (const prefix of namePrefixes) {
|
|
141
|
-
const sql = `SELECT OBJECT, OBJ_NAME, DEVCLASS FROM TADIR WHERE ${baseWhere} AND OBJ_NAME LIKE '${prefix}' ORDER BY OBJECT, OBJ_NAME`;
|
|
142
|
-
try {
|
|
143
|
-
const data = await client.runQuery(sql, WARMUP_MAX_OBJECTS);
|
|
144
|
-
for (const row of data.rows) {
|
|
145
|
-
const objectType = String(row.OBJECT ?? '').trim();
|
|
146
|
-
const objectName = String(row.OBJ_NAME ?? '').trim();
|
|
147
|
-
const packageName = String(row.DEVCLASS ?? '').trim();
|
|
148
|
-
if (!objectType || !objectName)
|
|
149
|
-
continue;
|
|
150
|
-
// Deduplicate (shouldn't happen, but defensive)
|
|
151
|
-
const key = `${objectType}:${objectName}`;
|
|
152
|
-
if (seen.has(key))
|
|
153
|
-
continue;
|
|
154
|
-
// Apply package filter in memory
|
|
155
|
-
if (packageRegexes && !packageRegexes.some((r) => r.test(packageName)))
|
|
156
|
-
continue;
|
|
157
|
-
// Map TADIR types to our types
|
|
158
|
-
if (objectType === 'CLAS' || objectType === 'INTF' || objectType === 'FUGR') {
|
|
159
|
-
seen.add(key);
|
|
160
|
-
entries.push({ objectType, objectName, packageName });
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
catch (err) {
|
|
165
|
-
logger.warn(`Cache warmup: TADIR query failed for prefix '${prefix}'`, {
|
|
166
|
-
error: err instanceof Error ? err.message : String(err),
|
|
167
|
-
});
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
if (entries.length === 0) {
|
|
171
|
-
logger.warn('Cache warmup: no objects found in TADIR — check package filter or system content');
|
|
172
|
-
}
|
|
173
|
-
else if (entries.length >= WARMUP_MAX_OBJECTS) {
|
|
174
|
-
logger.warn(`Cache warmup: found ${entries.length} objects (limit: ${WARMUP_MAX_OBJECTS}). ` +
|
|
175
|
-
'Results may be truncated. Consider narrowing the package filter (--cache-warmup-packages).');
|
|
176
|
-
}
|
|
177
|
-
return entries;
|
|
178
|
-
}
|
|
179
|
-
/**
|
|
180
|
-
* Index a single object: fetch source, extract deps, store in cache.
|
|
181
|
-
* Returns 'skipped' if source hash matches cached version.
|
|
182
|
-
*/
|
|
183
|
-
async function indexObject(client, cachingLayer, entry) {
|
|
184
|
-
const { objectType, objectName, packageName } = entry;
|
|
185
|
-
// For FUGR: we enumerate the function modules within the group
|
|
186
|
-
if (objectType === 'FUGR') {
|
|
187
|
-
return indexFunctionGroup(client, cachingLayer, objectName, packageName);
|
|
188
|
-
}
|
|
189
|
-
// Fetch source
|
|
190
|
-
let source;
|
|
191
|
-
let etag;
|
|
192
|
-
try {
|
|
193
|
-
const cached = cachingLayer.getCachedSourceWithEtag(objectType, objectName);
|
|
194
|
-
if (objectType === 'CLAS') {
|
|
195
|
-
const result = await client.getClass(objectName, undefined, { ifNoneMatch: cached?.etag });
|
|
196
|
-
source = result.notModified && cached ? cached.source : result.source;
|
|
197
|
-
etag = result.notModified && cached ? cached.etag : result.etag;
|
|
198
|
-
}
|
|
199
|
-
else if (objectType === 'INTF') {
|
|
200
|
-
const result = await client.getInterface(objectName, { ifNoneMatch: cached?.etag });
|
|
201
|
-
source = result.notModified && cached ? cached.source : result.source;
|
|
202
|
-
etag = result.notModified && cached ? cached.etag : result.etag;
|
|
203
|
-
}
|
|
204
|
-
else {
|
|
205
|
-
return { status: 'failed', edges: 0 };
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
catch {
|
|
209
|
-
return { status: 'failed', edges: 0 };
|
|
210
|
-
}
|
|
211
|
-
// Check if source changed since last cache
|
|
212
|
-
const cached = cachingLayer.getCachedSource(objectType, objectName);
|
|
213
|
-
const newHash = hashSource(source);
|
|
214
|
-
if (cached && cached.hash === newHash) {
|
|
215
|
-
return { status: 'skipped', edges: 0 };
|
|
216
|
-
}
|
|
217
|
-
const cachedAt = new Date().toISOString();
|
|
218
|
-
const node = {
|
|
219
|
-
id: `${objectType}:${objectName}`.toUpperCase(),
|
|
220
|
-
objectType,
|
|
221
|
-
objectName: objectName.toUpperCase(),
|
|
222
|
-
packageName: packageName.toUpperCase(),
|
|
223
|
-
sourceHash: newHash,
|
|
224
|
-
cachedAt,
|
|
225
|
-
valid: true,
|
|
226
|
-
};
|
|
227
|
-
// Extract dependencies before opening the SQLite transaction. Only the
|
|
228
|
-
// synchronous cache writes are batched; SAP/network work never runs inside it.
|
|
229
|
-
const deps = extractDependencies(source, objectName, true);
|
|
230
|
-
const fromId = objectName.toUpperCase();
|
|
231
|
-
const edgeRecords = deps.map((dep) => ({
|
|
232
|
-
fromId,
|
|
233
|
-
toId: dep.name.toUpperCase(),
|
|
234
|
-
edgeType: mapDepKindToEdgeType(dep.kind),
|
|
235
|
-
discoveredAt: cachedAt,
|
|
236
|
-
valid: true,
|
|
237
|
-
}));
|
|
238
|
-
return {
|
|
239
|
-
status: 'fetched',
|
|
240
|
-
edges: edgeRecords.length,
|
|
241
|
-
write: () => {
|
|
242
|
-
cachingLayer.cache.putSource(objectType, objectName, source, { etag });
|
|
243
|
-
cachingLayer.cache.putNode(node);
|
|
244
|
-
for (const edge of edgeRecords)
|
|
245
|
-
cachingLayer.cache.putEdge(edge);
|
|
246
|
-
},
|
|
247
|
-
};
|
|
248
|
-
}
|
|
249
|
-
/**
|
|
250
|
-
* Index a function group: fetch its function modules and index each.
|
|
251
|
-
*/
|
|
252
|
-
async function indexFunctionGroup(client, cachingLayer, groupName, packageName) {
|
|
253
|
-
try {
|
|
254
|
-
const fg = await client.getFunctionGroup(groupName);
|
|
255
|
-
let totalEdges = 0;
|
|
256
|
-
let anyFetched = false;
|
|
257
|
-
const writers = [];
|
|
258
|
-
// fg is a parsed object with functions list
|
|
259
|
-
const fgData = typeof fg === 'string' ? JSON.parse(fg) : fg;
|
|
260
|
-
const functions = fgData.functions ?? [];
|
|
261
|
-
for (const funcName of functions) {
|
|
262
|
-
const funcWriters = [() => cachingLayer.cache.putFuncGroup(funcName, groupName)];
|
|
263
|
-
try {
|
|
264
|
-
const cached = cachingLayer.getCachedSource('FUNC', funcName);
|
|
265
|
-
const result = await client.getFunction(groupName, funcName, { ifNoneMatch: cached?.etag });
|
|
266
|
-
const source = result.notModified && cached ? cached.source : result.source;
|
|
267
|
-
const etag = result.notModified && cached ? cached.etag : result.etag;
|
|
268
|
-
const newHash = hashSource(source);
|
|
269
|
-
if (cached && cached.hash === newHash) {
|
|
270
|
-
writers.push(() => {
|
|
271
|
-
for (const write of funcWriters)
|
|
272
|
-
write();
|
|
273
|
-
});
|
|
274
|
-
continue;
|
|
275
|
-
}
|
|
276
|
-
const cachedAt = new Date().toISOString();
|
|
277
|
-
const node = {
|
|
278
|
-
id: `FUNC:${funcName}`.toUpperCase(),
|
|
279
|
-
objectType: 'FUNC',
|
|
280
|
-
objectName: funcName.toUpperCase(),
|
|
281
|
-
packageName: packageName.toUpperCase(),
|
|
282
|
-
sourceHash: newHash,
|
|
283
|
-
cachedAt,
|
|
284
|
-
valid: true,
|
|
285
|
-
};
|
|
286
|
-
const deps = extractDependencies(source, funcName, true);
|
|
287
|
-
const edgeRecords = deps.map((dep) => ({
|
|
288
|
-
fromId: funcName.toUpperCase(),
|
|
289
|
-
toId: dep.name.toUpperCase(),
|
|
290
|
-
edgeType: mapDepKindToEdgeType(dep.kind),
|
|
291
|
-
discoveredAt: cachedAt,
|
|
292
|
-
valid: true,
|
|
293
|
-
}));
|
|
294
|
-
totalEdges += edgeRecords.length;
|
|
295
|
-
funcWriters.push(() => cachingLayer.cache.putSource('FUNC', funcName, source, { etag }), () => cachingLayer.cache.putNode(node), ...edgeRecords.map((edge) => () => cachingLayer.cache.putEdge(edge)));
|
|
296
|
-
writers.push(() => {
|
|
297
|
-
for (const write of funcWriters)
|
|
298
|
-
write();
|
|
299
|
-
});
|
|
300
|
-
anyFetched = true;
|
|
301
|
-
}
|
|
302
|
-
catch {
|
|
303
|
-
// Individual func fetch failure — continue with others
|
|
304
|
-
writers.push(() => {
|
|
305
|
-
for (const write of funcWriters)
|
|
306
|
-
write();
|
|
307
|
-
});
|
|
308
|
-
}
|
|
309
|
-
}
|
|
310
|
-
return {
|
|
311
|
-
status: anyFetched ? 'fetched' : 'skipped',
|
|
312
|
-
edges: totalEdges,
|
|
313
|
-
write: writers.length > 0
|
|
314
|
-
? () => {
|
|
315
|
-
for (const write of writers)
|
|
316
|
-
write();
|
|
317
|
-
}
|
|
318
|
-
: undefined,
|
|
319
|
-
};
|
|
320
|
-
}
|
|
321
|
-
catch {
|
|
322
|
-
return { status: 'failed', edges: 0 };
|
|
323
|
-
}
|
|
324
|
-
}
|
|
325
|
-
/** Map dependency kind to cache edge type */
|
|
326
|
-
function mapDepKindToEdgeType(kind) {
|
|
327
|
-
switch (kind) {
|
|
328
|
-
case 'function_call':
|
|
329
|
-
return 'CALLS';
|
|
330
|
-
case 'interface':
|
|
331
|
-
case 'inheritance':
|
|
332
|
-
return 'IMPLEMENTS';
|
|
333
|
-
default:
|
|
334
|
-
return 'USES';
|
|
335
|
-
}
|
|
336
|
-
}
|
|
337
|
-
//# sourceMappingURL=warmup.js.map
|
package/dist/cache/warmup.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"warmup.js","sourceRoot":"","sources":["../../src/cache/warmup.ts"],"names":[],"mappings":"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"}
|
package/dist/server/elicit.d.ts
DELETED
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* MCP Elicitation helpers for ARC-1.
|
|
3
|
-
*
|
|
4
|
-
* Wraps the MCP SDK's server.elicitInput() with:
|
|
5
|
-
* - Client capability detection (graceful fallback when unsupported)
|
|
6
|
-
* - Typed convenience methods for common patterns
|
|
7
|
-
* - Audit logging of all elicitation events
|
|
8
|
-
*
|
|
9
|
-
* Based on MCP spec 2025-06-18 / 2025-11-25 elicitation protocol.
|
|
10
|
-
* Dassian ADT uses similar patterns for confirmations and parameter prompts.
|
|
11
|
-
*/
|
|
12
|
-
import type { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
13
|
-
/**
|
|
14
|
-
* Confirm a destructive or irreversible operation with the user.
|
|
15
|
-
*
|
|
16
|
-
* Returns true if:
|
|
17
|
-
* - User confirms (action: 'accept')
|
|
18
|
-
* - Elicitation is not supported (graceful fallback — proceed without asking)
|
|
19
|
-
*
|
|
20
|
-
* Returns false if:
|
|
21
|
-
* - User declines or cancels
|
|
22
|
-
*/
|
|
23
|
-
export declare function confirmDestructive(server: Server | undefined, toolName: string, message: string): Promise<boolean>;
|
|
24
|
-
/**
|
|
25
|
-
* Ask user to select from a list of options.
|
|
26
|
-
*
|
|
27
|
-
* Returns the selected value, or undefined if:
|
|
28
|
-
* - User cancels/declines
|
|
29
|
-
* - Elicitation is not supported
|
|
30
|
-
*/
|
|
31
|
-
export declare function selectOption(server: Server | undefined, toolName: string, message: string, options: Array<{
|
|
32
|
-
value: string;
|
|
33
|
-
title: string;
|
|
34
|
-
}>): Promise<string | undefined>;
|
|
35
|
-
/**
|
|
36
|
-
* Prompt user for a string value.
|
|
37
|
-
*
|
|
38
|
-
* Returns the entered value, or undefined if:
|
|
39
|
-
* - User cancels/declines
|
|
40
|
-
* - Elicitation is not supported
|
|
41
|
-
*/
|
|
42
|
-
export declare function promptString(server: Server | undefined, toolName: string, message: string, fieldName: string, description?: string): Promise<string | undefined>;
|
|
43
|
-
//# sourceMappingURL=elicit.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"elicit.d.ts","sourceRoot":"","sources":["../../src/server/elicit.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AAiBxE;;;;;;;;;GASG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,OAAO,CAAC,CA8ClB;AAED;;;;;;GAMG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAAC,GAC/C,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CA+C7B;AAED;;;;;;GAMG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CA6C7B"}
|
package/dist/server/elicit.js
DELETED
|
@@ -1,183 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* MCP Elicitation helpers for ARC-1.
|
|
3
|
-
*
|
|
4
|
-
* Wraps the MCP SDK's server.elicitInput() with:
|
|
5
|
-
* - Client capability detection (graceful fallback when unsupported)
|
|
6
|
-
* - Typed convenience methods for common patterns
|
|
7
|
-
* - Audit logging of all elicitation events
|
|
8
|
-
*
|
|
9
|
-
* Based on MCP spec 2025-06-18 / 2025-11-25 elicitation protocol.
|
|
10
|
-
* Dassian ADT uses similar patterns for confirmations and parameter prompts.
|
|
11
|
-
*/
|
|
12
|
-
import { logger } from './logger.js';
|
|
13
|
-
/**
|
|
14
|
-
* Check if the connected MCP client supports form elicitation.
|
|
15
|
-
* Returns false if server is undefined or client doesn't declare the capability.
|
|
16
|
-
*/
|
|
17
|
-
function supportsElicitation(server) {
|
|
18
|
-
if (!server)
|
|
19
|
-
return false;
|
|
20
|
-
try {
|
|
21
|
-
const caps = server.getClientCapabilities();
|
|
22
|
-
return !!caps?.elicitation?.form;
|
|
23
|
-
}
|
|
24
|
-
catch {
|
|
25
|
-
return false;
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* Confirm a destructive or irreversible operation with the user.
|
|
30
|
-
*
|
|
31
|
-
* Returns true if:
|
|
32
|
-
* - User confirms (action: 'accept')
|
|
33
|
-
* - Elicitation is not supported (graceful fallback — proceed without asking)
|
|
34
|
-
*
|
|
35
|
-
* Returns false if:
|
|
36
|
-
* - User declines or cancels
|
|
37
|
-
*/
|
|
38
|
-
export async function confirmDestructive(server, toolName, message) {
|
|
39
|
-
if (!supportsElicitation(server)) {
|
|
40
|
-
return true; // Fallback: proceed without asking
|
|
41
|
-
}
|
|
42
|
-
logger.emitAudit({
|
|
43
|
-
timestamp: new Date().toISOString(),
|
|
44
|
-
level: 'info',
|
|
45
|
-
event: 'elicitation_sent',
|
|
46
|
-
tool: toolName,
|
|
47
|
-
message,
|
|
48
|
-
fields: ['confirm'],
|
|
49
|
-
});
|
|
50
|
-
try {
|
|
51
|
-
const result = await server.elicitInput({
|
|
52
|
-
message,
|
|
53
|
-
requestedSchema: {
|
|
54
|
-
type: 'object',
|
|
55
|
-
properties: {
|
|
56
|
-
confirm: {
|
|
57
|
-
type: 'boolean',
|
|
58
|
-
title: 'Confirm',
|
|
59
|
-
description: message,
|
|
60
|
-
},
|
|
61
|
-
},
|
|
62
|
-
required: ['confirm'],
|
|
63
|
-
},
|
|
64
|
-
});
|
|
65
|
-
const accepted = result.action === 'accept' && result.content?.confirm === true;
|
|
66
|
-
logger.emitAudit({
|
|
67
|
-
timestamp: new Date().toISOString(),
|
|
68
|
-
level: 'info',
|
|
69
|
-
event: 'elicitation_response',
|
|
70
|
-
tool: toolName,
|
|
71
|
-
action: result.action,
|
|
72
|
-
});
|
|
73
|
-
return accepted;
|
|
74
|
-
}
|
|
75
|
-
catch {
|
|
76
|
-
// Elicitation failed (client doesn't support it, connection issue, etc.)
|
|
77
|
-
// Graceful fallback: proceed
|
|
78
|
-
return true;
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
/**
|
|
82
|
-
* Ask user to select from a list of options.
|
|
83
|
-
*
|
|
84
|
-
* Returns the selected value, or undefined if:
|
|
85
|
-
* - User cancels/declines
|
|
86
|
-
* - Elicitation is not supported
|
|
87
|
-
*/
|
|
88
|
-
export async function selectOption(server, toolName, message, options) {
|
|
89
|
-
if (!supportsElicitation(server)) {
|
|
90
|
-
return undefined;
|
|
91
|
-
}
|
|
92
|
-
logger.emitAudit({
|
|
93
|
-
timestamp: new Date().toISOString(),
|
|
94
|
-
level: 'info',
|
|
95
|
-
event: 'elicitation_sent',
|
|
96
|
-
tool: toolName,
|
|
97
|
-
message,
|
|
98
|
-
fields: ['selection'],
|
|
99
|
-
});
|
|
100
|
-
try {
|
|
101
|
-
const result = await server.elicitInput({
|
|
102
|
-
message,
|
|
103
|
-
requestedSchema: {
|
|
104
|
-
type: 'object',
|
|
105
|
-
properties: {
|
|
106
|
-
selection: {
|
|
107
|
-
type: 'string',
|
|
108
|
-
title: 'Selection',
|
|
109
|
-
description: message,
|
|
110
|
-
enum: options.map((o) => o.value),
|
|
111
|
-
enumNames: options.map((o) => o.title),
|
|
112
|
-
},
|
|
113
|
-
},
|
|
114
|
-
required: ['selection'],
|
|
115
|
-
},
|
|
116
|
-
});
|
|
117
|
-
logger.emitAudit({
|
|
118
|
-
timestamp: new Date().toISOString(),
|
|
119
|
-
level: 'info',
|
|
120
|
-
event: 'elicitation_response',
|
|
121
|
-
tool: toolName,
|
|
122
|
-
action: result.action,
|
|
123
|
-
});
|
|
124
|
-
if (result.action === 'accept' && typeof result.content?.selection === 'string') {
|
|
125
|
-
return result.content.selection;
|
|
126
|
-
}
|
|
127
|
-
return undefined;
|
|
128
|
-
}
|
|
129
|
-
catch {
|
|
130
|
-
return undefined;
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
|
-
/**
|
|
134
|
-
* Prompt user for a string value.
|
|
135
|
-
*
|
|
136
|
-
* Returns the entered value, or undefined if:
|
|
137
|
-
* - User cancels/declines
|
|
138
|
-
* - Elicitation is not supported
|
|
139
|
-
*/
|
|
140
|
-
export async function promptString(server, toolName, message, fieldName, description) {
|
|
141
|
-
if (!supportsElicitation(server)) {
|
|
142
|
-
return undefined;
|
|
143
|
-
}
|
|
144
|
-
logger.emitAudit({
|
|
145
|
-
timestamp: new Date().toISOString(),
|
|
146
|
-
level: 'info',
|
|
147
|
-
event: 'elicitation_sent',
|
|
148
|
-
tool: toolName,
|
|
149
|
-
message,
|
|
150
|
-
fields: [fieldName],
|
|
151
|
-
});
|
|
152
|
-
try {
|
|
153
|
-
const result = await server.elicitInput({
|
|
154
|
-
message,
|
|
155
|
-
requestedSchema: {
|
|
156
|
-
type: 'object',
|
|
157
|
-
properties: {
|
|
158
|
-
[fieldName]: {
|
|
159
|
-
type: 'string',
|
|
160
|
-
title: fieldName,
|
|
161
|
-
description: description ?? message,
|
|
162
|
-
},
|
|
163
|
-
},
|
|
164
|
-
required: [fieldName],
|
|
165
|
-
},
|
|
166
|
-
});
|
|
167
|
-
logger.emitAudit({
|
|
168
|
-
timestamp: new Date().toISOString(),
|
|
169
|
-
level: 'info',
|
|
170
|
-
event: 'elicitation_response',
|
|
171
|
-
tool: toolName,
|
|
172
|
-
action: result.action,
|
|
173
|
-
});
|
|
174
|
-
if (result.action === 'accept' && typeof result.content?.[fieldName] === 'string') {
|
|
175
|
-
return result.content[fieldName];
|
|
176
|
-
}
|
|
177
|
-
return undefined;
|
|
178
|
-
}
|
|
179
|
-
catch {
|
|
180
|
-
return undefined;
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
//# sourceMappingURL=elicit.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"elicit.js","sourceRoot":"","sources":["../../src/server/elicit.ts"],"names":[],"mappings":"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"}
|