stitchkit 0.94.0 → 0.94.1
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/CHANGELOG.md +64 -0
- package/dist/agent-runtime/coding-shell-process.d.ts.map +1 -1
- package/dist/agent-runtime/coding-tool-listing.d.ts.map +1 -1
- package/dist/agent-runtime/coding-tool-search-patch.d.ts.map +1 -1
- package/dist/agent-runtime/contained-darwin.d.ts +38 -0
- package/dist/agent-runtime/contained-darwin.d.ts.map +1 -0
- package/dist/agent-runtime/contained-files.d.ts +11 -26
- package/dist/agent-runtime/contained-files.d.ts.map +1 -1
- package/dist/agent-runtime/contained-scan.d.ts +21 -0
- package/dist/agent-runtime/contained-scan.d.ts.map +1 -0
- package/dist/agent-runtime/contained-write.d.ts +9 -0
- package/dist/agent-runtime/contained-write.d.ts.map +1 -0
- package/dist/agent-runtime/deferred-tool-types.d.ts +3 -2
- package/dist/agent-runtime/deferred-tool-types.d.ts.map +1 -1
- package/dist/agent-runtime/harness-control.d.ts +0 -1
- package/dist/agent-runtime/harness-control.d.ts.map +1 -1
- package/dist/agent-runtime/harness.d.ts +0 -5
- package/dist/agent-runtime/harness.d.ts.map +1 -1
- package/dist/agent-runtime/managed-tools.d.ts +3 -2
- package/dist/agent-runtime/managed-tools.d.ts.map +1 -1
- package/dist/agent-runtime/runtime.d.ts +1 -1
- package/dist/agent-runtime/runtime.d.ts.map +1 -1
- package/dist/agent-runtime/schedule-records.d.ts +34 -0
- package/dist/agent-runtime/schedule-records.d.ts.map +1 -0
- package/dist/agent-runtime/schedules.d.ts +34 -0
- package/dist/agent-runtime/schedules.d.ts.map +1 -1
- package/dist/agent-runtime/store-conformance-lifecycle.d.ts +434 -0
- package/dist/agent-runtime/store-conformance-lifecycle.d.ts.map +1 -0
- package/dist/agent-runtime/store-conformance-ordering.d.ts +18 -0
- package/dist/agent-runtime/store-conformance-ordering.d.ts.map +1 -0
- package/dist/agent-runtime/store-conformance-support.d.ts +130 -0
- package/dist/agent-runtime/store-conformance-support.d.ts.map +1 -0
- package/dist/agent-runtime/store-conformance-terminal.d.ts +12 -0
- package/dist/agent-runtime/store-conformance-terminal.d.ts.map +1 -0
- package/dist/agent-runtime/store-conformance.d.ts.map +1 -1
- package/dist/application/admission-rate.d.ts +21 -0
- package/dist/application/admission-rate.d.ts.map +1 -0
- package/dist/application/admission-run.d.ts +8 -0
- package/dist/application/admission-run.d.ts.map +1 -0
- package/dist/application/admission.d.ts.map +1 -1
- package/dist/application/diagnostic-journal-lock.d.ts +9 -34
- package/dist/application/diagnostic-journal-lock.d.ts.map +1 -1
- package/dist/application/diagnostic-journal-manager.d.ts.map +1 -1
- package/dist/application/diagnostic-journal-storage.d.ts.map +1 -1
- package/dist/application/kernel-resource-context.d.ts.map +1 -1
- package/dist/application/notification-outbox.d.ts.map +1 -1
- package/dist/application/schedule.d.ts +0 -1
- package/dist/application/schedule.d.ts.map +1 -1
- package/dist/application/watch-hub-core.d.ts +122 -0
- package/dist/application/watch-hub-core.d.ts.map +1 -0
- package/dist/application/watch-hub.d.ts +2 -2
- package/dist/application/watch-hub.d.ts.map +1 -1
- package/dist/browser/client-executors.d.ts +14 -0
- package/dist/browser/client-executors.d.ts.map +1 -0
- package/dist/browser/client-multipart.d.ts +1 -1
- package/dist/browser/client-multipart.d.ts.map +1 -1
- package/dist/browser/client.d.ts +3 -2
- package/dist/browser/client.d.ts.map +1 -1
- package/dist/browser/http-fetch.d.ts +22 -0
- package/dist/browser/http-fetch.d.ts.map +1 -0
- package/dist/browser/http.d.ts +1 -3
- package/dist/browser/http.d.ts.map +1 -1
- package/dist/browser/live-state-core.d.ts +63 -0
- package/dist/browser/live-state-core.d.ts.map +1 -0
- package/dist/browser/live-state.d.ts.map +1 -1
- package/dist/browser/realtime-client.d.ts +26 -0
- package/dist/browser/realtime-client.d.ts.map +1 -0
- package/dist/browser/socket-io-connection.d.ts +82 -0
- package/dist/browser/socket-io-connection.d.ts.map +1 -0
- package/dist/browser/socket-io-peer.d.ts +20 -0
- package/dist/browser/socket-io-peer.d.ts.map +1 -0
- package/dist/browser/socket-io-trace.d.ts +31 -0
- package/dist/browser/socket-io-trace.d.ts.map +1 -0
- package/dist/browser/socket-io.d.ts +2 -18
- package/dist/browser/socket-io.d.ts.map +1 -1
- package/dist/contract/client-types.d.ts +134 -0
- package/dist/contract/client-types.d.ts.map +1 -0
- package/dist/contract/define-validation.d.ts +30 -0
- package/dist/contract/define-validation.d.ts.map +1 -0
- package/dist/contract/define.d.ts +3 -357
- package/dist/contract/define.d.ts.map +1 -1
- package/dist/contract/runtime-context.d.ts +131 -0
- package/dist/contract/runtime-context.d.ts.map +1 -0
- package/dist/contract/tool-options.d.ts +105 -0
- package/dist/contract/tool-options.d.ts.map +1 -0
- package/dist/contract/tool-view.d.ts +15 -2
- package/dist/contract/tool-view.d.ts.map +1 -1
- package/dist/durability/contract.d.ts +83 -0
- package/dist/durability/contract.d.ts.map +1 -1
- package/dist/durability/effect.d.ts +24 -0
- package/dist/durability/effect.d.ts.map +1 -0
- package/dist/durability/engine.d.ts +2 -2
- package/dist/durability/engine.d.ts.map +1 -1
- package/dist/durability/events.d.ts +2 -0
- package/dist/durability/events.d.ts.map +1 -1
- package/dist/durability/ledger.d.ts +11 -0
- package/dist/durability/ledger.d.ts.map +1 -1
- package/dist/durability/parks.d.ts +22 -0
- package/dist/durability/parks.d.ts.map +1 -0
- package/dist/durability/scheduler.d.ts +1 -0
- package/dist/durability/scheduler.d.ts.map +1 -1
- package/dist/entrypoints/agent-runtime/coding-tools.js +4 -4
- package/dist/entrypoints/agent-runtime/harness.js +127 -116
- package/dist/entrypoints/agent-runtime/sandbox.js +4 -4
- package/dist/entrypoints/agent-runtime/sqlite/bun.js +3 -3
- package/dist/entrypoints/agent-runtime/sqlite/node.js +3 -3
- package/dist/entrypoints/agent-runtime/testing.js +246 -214
- package/dist/entrypoints/agent-runtime.js +224 -203
- package/dist/entrypoints/application/diagnostic-journal.js +63 -203
- package/dist/entrypoints/application/opentelemetry.js +1 -1
- package/dist/entrypoints/application.js +361 -324
- package/dist/entrypoints/cli.d.ts +4 -1
- package/dist/entrypoints/cli.d.ts.map +1 -1
- package/dist/entrypoints/cli.js +57 -35
- package/dist/entrypoints/contract.d.ts +5 -2
- package/dist/entrypoints/contract.d.ts.map +1 -1
- package/dist/entrypoints/contract.js +3 -2
- package/dist/entrypoints/files.d.ts +2 -0
- package/dist/entrypoints/files.d.ts.map +1 -1
- package/dist/entrypoints/files.js +98 -2
- package/dist/entrypoints/index.d.ts +4 -2
- package/dist/entrypoints/index.d.ts.map +1 -1
- package/dist/entrypoints/index.js +348 -282
- package/dist/entrypoints/live.js +89 -71
- package/dist/entrypoints/node.d.ts +2 -1
- package/dist/entrypoints/node.d.ts.map +1 -1
- package/dist/entrypoints/node.js +13 -12
- package/dist/entrypoints/react.js +1 -1
- package/dist/entrypoints/remote.js +4 -4
- package/dist/entrypoints/server.d.ts +4 -2
- package/dist/entrypoints/server.d.ts.map +1 -1
- package/dist/entrypoints/server.js +293 -79
- package/dist/entrypoints/testing.d.ts +2 -1
- package/dist/entrypoints/testing.d.ts.map +1 -1
- package/dist/entrypoints/testing.js +288 -281
- package/dist/entrypoints/tools/connections.js +2 -2
- package/dist/entrypoints/tools/invoker.js +4 -4
- package/dist/entrypoints/tools.d.ts +6 -3
- package/dist/entrypoints/tools.d.ts.map +1 -1
- package/dist/entrypoints/tools.js +245 -202
- package/dist/entrypoints/tracking.js +325 -274
- package/dist/files/boundary.d.ts.map +1 -1
- package/dist/files/file-io.d.ts +14 -0
- package/dist/files/file-io.d.ts.map +1 -0
- package/dist/index-1j8pm5t0.js +412 -0
- package/dist/{index-kvj7f4hq.js → index-2bxbyab0.js} +10 -2
- package/dist/{index-xnj9bgxe.js → index-2gxzjvyr.js} +2 -162
- package/dist/index-4gcnakhx.js +82 -0
- package/dist/{index-j05z5gn4.js → index-55hkhm67.js} +136 -119
- package/dist/{index-cq4qfycf.js → index-79z7m7dt.js} +227 -59
- package/dist/{index-97ac4gph.js → index-7f68ghdn.js} +3 -3
- package/dist/{index-r7nmqpsg.js → index-7p1f0vp2.js} +1 -1
- package/dist/{index-dcpdvjsc.js → index-863ea9jb.js} +4 -4
- package/dist/index-8p52kd5p.js +242 -0
- package/dist/{index-2qzskm8h.js → index-dce5wxcq.js} +1 -1
- package/dist/index-e01r054k.js +105 -0
- package/dist/{index-sees8yf8.js → index-ensd0r74.js} +118 -111
- package/dist/{index-1nd48tm9.js → index-gxrt5h6v.js} +2 -1
- package/dist/{index-e87kakm4.js → index-ham5sz8m.js} +112 -110
- package/dist/{index-kj2wbeta.js → index-het2he5g.js} +280 -196
- package/dist/{index-vcvkq30w.js → index-hmp4800j.js} +3 -3
- package/dist/{index-gyr48nzg.js → index-k30h66yd.js} +71 -151
- package/dist/{index-2cr1cqhn.js → index-khtgb21r.js} +2 -2
- package/dist/{index-x4799c19.js → index-ndddxtyx.js} +11 -11
- package/dist/{index-dydjcp8z.js → index-np4m8hd3.js} +38 -36
- package/dist/{index-p81267c2.js → index-p3vsv1fb.js} +621 -357
- package/dist/{index-mp5sn43f.js → index-p9e0w8hs.js} +2 -2
- package/dist/{index-rewkc2hj.js → index-p9sh0xx4.js} +3 -3
- package/dist/{index-70yj2ebz.js → index-paz6sgdp.js} +107 -103
- package/dist/{index-bn2cjajt.js → index-px2gm2jp.js} +26 -102
- package/dist/index-s812ycat.js +65 -0
- package/dist/{index-xsqjkha9.js → index-sp1tzwnb.js} +2 -2
- package/dist/{index-n6hxg8as.js → index-t9rhjr9f.js} +615 -566
- package/dist/{index-zeemqhqx.js → index-v260df89.js} +88 -80
- package/dist/{index-fdp6hdxn.js → index-w906953s.js} +5 -1
- package/dist/{index-mdzh02yc.js → index-wdkt63w3.js} +1 -1
- package/dist/{index-58k4fp34.js → index-wsm5w4ee.js} +1 -1
- package/dist/{index-v38qyerb.js → index-xw3s75nj.js} +1 -1
- package/dist/internal/atomic-file.d.ts +23 -2
- package/dist/internal/atomic-file.d.ts.map +1 -1
- package/dist/internal/exclusive-lock.d.ts +51 -0
- package/dist/internal/exclusive-lock.d.ts.map +1 -0
- package/dist/internal/process-identity.d.ts +47 -0
- package/dist/internal/process-identity.d.ts.map +1 -0
- package/dist/internal/with-exclusive-lock.d.ts +67 -0
- package/dist/internal/with-exclusive-lock.d.ts.map +1 -0
- package/dist/live/watch-client.d.ts.map +1 -1
- package/dist/observability/audit.d.ts +2 -2
- package/dist/observability/audit.d.ts.map +1 -1
- package/dist/observability/event.d.ts +2 -1
- package/dist/observability/event.d.ts.map +1 -1
- package/dist/primitives/export-operation.d.ts +1 -1
- package/dist/primitives/export-operation.d.ts.map +1 -1
- package/dist/realtime/registry.d.ts +0 -5
- package/dist/realtime/registry.d.ts.map +1 -1
- package/dist/server/bun.d.ts +0 -1
- package/dist/server/bun.d.ts.map +1 -1
- package/dist/server/context-contribution.d.ts +1 -1
- package/dist/server/context-contribution.d.ts.map +1 -1
- package/dist/server/context.d.ts +1 -1
- package/dist/server/context.d.ts.map +1 -1
- package/dist/server/endpoint-response.d.ts +2 -1
- package/dist/server/endpoint-response.d.ts.map +1 -1
- package/dist/server/error-dispatch.d.ts +1 -1
- package/dist/server/error-dispatch.d.ts.map +1 -1
- package/dist/server/error-hook.d.ts +1 -1
- package/dist/server/error-hook.d.ts.map +1 -1
- package/dist/server/handler-state.d.ts +1 -1
- package/dist/server/handler-state.d.ts.map +1 -1
- package/dist/server/implement-registry.d.ts +54 -0
- package/dist/server/implement-registry.d.ts.map +1 -0
- package/dist/server/implement.d.ts +9 -55
- package/dist/server/implement.d.ts.map +1 -1
- package/dist/server/middleware/auth.d.ts +1 -31
- package/dist/server/middleware/auth.d.ts.map +1 -1
- package/dist/server/middleware/jwt.d.ts +31 -0
- package/dist/server/middleware/jwt.d.ts.map +1 -0
- package/dist/server/multipart-reader.d.ts +22 -0
- package/dist/server/multipart-reader.d.ts.map +1 -0
- package/dist/server/multipart.d.ts +1 -1
- package/dist/server/multipart.d.ts.map +1 -1
- package/dist/server/oauth/cimd.d.ts +88 -0
- package/dist/server/oauth/cimd.d.ts.map +1 -0
- package/dist/server/oauth/endpoints.d.ts +39 -0
- package/dist/server/oauth/endpoints.d.ts.map +1 -0
- package/dist/server/oauth/provider.d.ts +1 -68
- package/dist/server/oauth/provider.d.ts.map +1 -1
- package/dist/server/streaming-pump.d.ts +66 -0
- package/dist/server/streaming-pump.d.ts.map +1 -0
- package/dist/server/streaming-route.d.ts +12 -5
- package/dist/server/streaming-route.d.ts.map +1 -1
- package/dist/server/types.d.ts +4 -1
- package/dist/server/types.d.ts.map +1 -1
- package/dist/server/unix-client-bun.d.ts.map +1 -1
- package/dist/server/unix-client-http1.d.ts +76 -0
- package/dist/server/unix-client-http1.d.ts.map +1 -0
- package/dist/server/unix-client.d.ts.map +1 -1
- package/dist/testing/handler-clients.d.ts +2 -1
- package/dist/testing/handler-clients.d.ts.map +1 -1
- package/dist/testing/realtime-probe.d.ts +33 -0
- package/dist/testing/realtime-probe.d.ts.map +1 -0
- package/dist/testing/surface-conformance.d.ts +0 -31
- package/dist/testing/surface-conformance.d.ts.map +1 -1
- package/dist/testing/surface-manifest-digest.d.ts +44 -0
- package/dist/testing/surface-manifest-digest.d.ts.map +1 -0
- package/dist/testing/surface-manifest.d.ts.map +1 -1
- package/dist/tools/agent.d.ts +1 -1
- package/dist/tools/agent.d.ts.map +1 -1
- package/dist/tools/cli/args-fields.d.ts +31 -0
- package/dist/tools/cli/args-fields.d.ts.map +1 -0
- package/dist/tools/cli/args-route.d.ts +42 -0
- package/dist/tools/cli/args-route.d.ts.map +1 -0
- package/dist/tools/cli/args-view.d.ts +32 -0
- package/dist/tools/cli/args-view.d.ts.map +1 -0
- package/dist/tools/cli/args.d.ts +2 -65
- package/dist/tools/cli/args.d.ts.map +1 -1
- package/dist/tools/cli/argument-error.d.ts +5 -0
- package/dist/tools/cli/argument-error.d.ts.map +1 -0
- package/dist/tools/cli/checkpoint.d.ts.map +1 -1
- package/dist/tools/cli/command.d.ts +1 -1
- package/dist/tools/cli/command.d.ts.map +1 -1
- package/dist/tools/cli/config.d.ts +1 -1
- package/dist/tools/cli/config.d.ts.map +1 -1
- package/dist/tools/cli/format.d.ts +2 -1
- package/dist/tools/cli/format.d.ts.map +1 -1
- package/dist/tools/cli/invoke.d.ts +2 -1
- package/dist/tools/cli/invoke.d.ts.map +1 -1
- package/dist/tools/cli/managed-surface.d.ts +1 -1
- package/dist/tools/cli/managed-surface.d.ts.map +1 -1
- package/dist/tools/cli/policy.d.ts +1 -1
- package/dist/tools/cli/policy.d.ts.map +1 -1
- package/dist/tools/cli/prepare.d.ts.map +1 -1
- package/dist/tools/cli/run-managed.d.ts.map +1 -1
- package/dist/tools/cli/session.d.ts +1 -1
- package/dist/tools/cli/session.d.ts.map +1 -1
- package/dist/tools/cli/update.d.ts +19 -0
- package/dist/tools/cli/update.d.ts.map +1 -1
- package/dist/tools/cli/view.d.ts +1 -1
- package/dist/tools/cli/view.d.ts.map +1 -1
- package/dist/tools/cli/wait.d.ts +1 -1
- package/dist/tools/cli/wait.d.ts.map +1 -1
- package/dist/tools/connections/runtime.d.ts +1 -1
- package/dist/tools/connections/runtime.d.ts.map +1 -1
- package/dist/tools/execute-args.d.ts +23 -0
- package/dist/tools/execute-args.d.ts.map +1 -0
- package/dist/tools/execute-hooks.d.ts +146 -0
- package/dist/tools/execute-hooks.d.ts.map +1 -0
- package/dist/tools/execute-result.d.ts +40 -0
- package/dist/tools/execute-result.d.ts.map +1 -0
- package/dist/tools/execute.d.ts +4 -193
- package/dist/tools/execute.d.ts.map +1 -1
- package/dist/tools/internal/surface-projector.d.ts +2 -1
- package/dist/tools/internal/surface-projector.d.ts.map +1 -1
- package/dist/tools/invoker.d.ts +2 -1
- package/dist/tools/invoker.d.ts.map +1 -1
- package/dist/tools/lifecycle.d.ts +1 -1
- package/dist/tools/lifecycle.d.ts.map +1 -1
- package/dist/tools/mcp/mount.d.ts +1 -1
- package/dist/tools/mcp/mount.d.ts.map +1 -1
- package/dist/tools/mcp/prepare.d.ts +2 -1
- package/dist/tools/mcp/prepare.d.ts.map +1 -1
- package/dist/tools/mcp/progress.d.ts +1 -1
- package/dist/tools/mcp/progress.d.ts.map +1 -1
- package/dist/tools/mcp/register.d.ts +3 -2
- package/dist/tools/mcp/register.d.ts.map +1 -1
- package/dist/tools/mcp/round-context.d.ts +38 -0
- package/dist/tools/mcp/round-context.d.ts.map +1 -0
- package/dist/tools/mcp/round-policy.d.ts +1 -1
- package/dist/tools/mcp/round-policy.d.ts.map +1 -1
- package/dist/tools/mcp/round.d.ts +3 -11
- package/dist/tools/mcp/round.d.ts.map +1 -1
- package/dist/tools/mcp/runtime-tools.d.ts +2 -1
- package/dist/tools/mcp/runtime-tools.d.ts.map +1 -1
- package/dist/tools/mount.d.ts +3 -1
- package/dist/tools/mount.d.ts.map +1 -1
- package/dist/tools/native-definition.d.ts +2 -1
- package/dist/tools/native-definition.d.ts.map +1 -1
- package/dist/tools/operations/async-operation-runtime-tools.d.ts +2 -1
- package/dist/tools/operations/async-operation-runtime-tools.d.ts.map +1 -1
- package/dist/tools/operations/async-operation-runtime-types.d.ts +2 -1
- package/dist/tools/operations/async-operation-runtime-types.d.ts.map +1 -1
- package/dist/tools/remote.d.ts.map +1 -1
- package/dist/tools/runtime-tool.d.ts +3 -1
- package/dist/tools/runtime-tool.d.ts.map +1 -1
- package/dist/tools/tool-logger.d.ts +1 -1
- package/dist/tools/tool-logger.d.ts.map +1 -1
- package/dist/tracking/client-listeners.d.ts +30 -0
- package/dist/tracking/client-listeners.d.ts.map +1 -0
- package/dist/tracking/client-visit.d.ts +61 -0
- package/dist/tracking/client-visit.d.ts.map +1 -0
- package/dist/tracking/client.d.ts +3 -2
- package/dist/tracking/client.d.ts.map +1 -1
- package/llms/application.2.txt +266 -2
- package/llms/application.txt +8 -266
- package/llms/cli.2.txt +80 -0
- package/llms/cli.txt +45 -74
- package/llms/contract.txt +3 -3
- package/llms/files.txt +3 -0
- package/llms/tools.2.txt +88 -279
- package/llms/tools.3.txt +288 -0
- package/llms/tools.txt +27 -65
- package/llms-full.txt +108 -12
- package/llms.txt +5 -5
- package/package.json +1 -1
- package/dist/index-e2z3ahw9.js +0 -325
- package/dist/index-mkm15s49.js +0 -394
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import {
|
|
2
|
+
isUnsafeKey
|
|
3
|
+
} from "./index-kzfs85xp.js";
|
|
4
|
+
|
|
5
|
+
// src/internal/route-pattern.ts
|
|
6
|
+
import { z } from "zod";
|
|
7
|
+
var PARAM_IDENTIFIER = /^[A-Za-z_][A-Za-z0-9_]*$/;
|
|
8
|
+
function joinRoutePath(...parts) {
|
|
9
|
+
const joined = parts.filter((part) => Boolean(part)).map((part) => part.replace(/^\/+|\/+$/g, "")).filter(Boolean).join("/");
|
|
10
|
+
return `/${joined}`;
|
|
11
|
+
}
|
|
12
|
+
function parseRoutePattern(path) {
|
|
13
|
+
const segments = path.split("/").filter(Boolean);
|
|
14
|
+
const parameters = [];
|
|
15
|
+
const names = new Set;
|
|
16
|
+
for (const [segmentIndex, segment] of segments.entries()) {
|
|
17
|
+
const marker = segment.at(0);
|
|
18
|
+
if (marker !== ":" && marker !== "*") {
|
|
19
|
+
if (segment.includes("*")) {
|
|
20
|
+
throw new Error(`Wildcard must occupy its own segment in path "${path}"`);
|
|
21
|
+
}
|
|
22
|
+
continue;
|
|
23
|
+
}
|
|
24
|
+
const name = segment.slice(1);
|
|
25
|
+
if (marker === "*" && name === "") {
|
|
26
|
+
throw new Error(`Trailing wildcard in path "${path}" must be named, for example "/*filePath"`);
|
|
27
|
+
}
|
|
28
|
+
if (!PARAM_IDENTIFIER.test(name) || isUnsafeKey(name)) {
|
|
29
|
+
const label = marker === "*" ? "wildcard" : "route parameter";
|
|
30
|
+
throw new Error(`Invalid ${label} name "${name}" in path "${path}"`);
|
|
31
|
+
}
|
|
32
|
+
if (names.has(name)) {
|
|
33
|
+
throw new Error(`Duplicate route parameter name "${name}" in path "${path}"`);
|
|
34
|
+
}
|
|
35
|
+
if (marker === "*" && segmentIndex !== segments.length - 1) {
|
|
36
|
+
throw new Error(`Wildcard "*${name}" must be the final segment in path "${path}"`);
|
|
37
|
+
}
|
|
38
|
+
names.add(name);
|
|
39
|
+
parameters.push({
|
|
40
|
+
name,
|
|
41
|
+
kind: marker === "*" ? "wildcard" : "segment",
|
|
42
|
+
segmentIndex
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
return parameters;
|
|
46
|
+
}
|
|
47
|
+
function resolveRouteParamsSchema(path, schema) {
|
|
48
|
+
const parameters = parseRoutePattern(path);
|
|
49
|
+
if (parameters.length === 0)
|
|
50
|
+
return schema;
|
|
51
|
+
if (!schema) {
|
|
52
|
+
const shape = {};
|
|
53
|
+
for (const parameter of parameters)
|
|
54
|
+
shape[parameter.name] = z.string();
|
|
55
|
+
return z.object(shape);
|
|
56
|
+
}
|
|
57
|
+
const jsonSchema = z.toJSONSchema(schema, { io: "input", unrepresentable: "any" });
|
|
58
|
+
const properties = jsonSchema.properties;
|
|
59
|
+
if (!properties) {
|
|
60
|
+
throw new Error(`Route params schema for path "${path}" must be an object schema with a property per path field`);
|
|
61
|
+
}
|
|
62
|
+
for (const parameter of parameters) {
|
|
63
|
+
if (!(parameter.name in properties)) {
|
|
64
|
+
const kind = parameter.kind === "wildcard" ? "wildcard" : "path";
|
|
65
|
+
throw new Error(`Route params schema for path "${path}" is missing ${kind} field "${parameter.name}"`);
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
const names = new Set(parameters.map((parameter) => parameter.name));
|
|
69
|
+
const required = Array.isArray(jsonSchema.required) ? jsonSchema.required : [];
|
|
70
|
+
for (const field of required) {
|
|
71
|
+
if (typeof field === "string" && !names.has(field)) {
|
|
72
|
+
throw new Error(`Route params schema for path "${path}" requires field "${field}" that the path does not carry`);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
return schema;
|
|
76
|
+
}
|
|
77
|
+
function parseTrailingWildcard(path) {
|
|
78
|
+
const wildcard = parseRoutePattern(path).find((parameter) => parameter.kind === "wildcard");
|
|
79
|
+
return wildcard ? { name: wildcard.name, segmentIndex: wildcard.segmentIndex } : null;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
export { joinRoutePath, resolveRouteParamsSchema, parseTrailingWildcard };
|
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
applyToolViewDefaults,
|
|
10
10
|
objectShapeKeys,
|
|
11
11
|
projectToolView
|
|
12
|
-
} from "./index-
|
|
12
|
+
} from "./index-np4m8hd3.js";
|
|
13
13
|
import {
|
|
14
14
|
normalizeError,
|
|
15
15
|
validateDeclaredOutput
|
|
@@ -30,25 +30,7 @@ import {
|
|
|
30
30
|
isRecord
|
|
31
31
|
} from "./index-hffjpmq9.js";
|
|
32
32
|
|
|
33
|
-
// src/tools/execute.ts
|
|
34
|
-
class ToolExecutionControlError extends Error {
|
|
35
|
-
reason;
|
|
36
|
-
constructor(reason) {
|
|
37
|
-
super(`Agent tool execution stopped: ${reason}`);
|
|
38
|
-
this.name = "ToolExecutionControlError";
|
|
39
|
-
this.reason = reason;
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
function isPlainObject(value) {
|
|
43
|
-
if (!isRecord(value))
|
|
44
|
-
return false;
|
|
45
|
-
const proto = Object.getPrototypeOf(value);
|
|
46
|
-
return proto === Object.prototype || proto === null;
|
|
47
|
-
}
|
|
48
|
-
function isToolExecutionControlError(value) {
|
|
49
|
-
return value instanceof ToolExecutionControlError;
|
|
50
|
-
}
|
|
51
|
-
var normalizedToolErrors = new WeakMap;
|
|
33
|
+
// src/tools/execute-args.ts
|
|
52
34
|
function parseToolCallArguments(method, callArgs, {
|
|
53
35
|
coerceJson = false,
|
|
54
36
|
toolSurface = false
|
|
@@ -98,9 +80,9 @@ function parseToolCallArguments(method, callArgs, {
|
|
|
98
80
|
}
|
|
99
81
|
return { ok: true, params, input };
|
|
100
82
|
}
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
83
|
+
|
|
84
|
+
// src/tools/execute-result.ts
|
|
85
|
+
var normalizedToolErrors = new WeakMap;
|
|
104
86
|
function toolResultFromError(err) {
|
|
105
87
|
const appErr = normalizeError(err);
|
|
106
88
|
const result = {
|
|
@@ -125,6 +107,28 @@ function toolErrorFromResult(result) {
|
|
|
125
107
|
function toolCauseFromResult(result) {
|
|
126
108
|
return normalizedToolErrors.get(result)?.cause;
|
|
127
109
|
}
|
|
110
|
+
|
|
111
|
+
// src/tools/execute.ts
|
|
112
|
+
class ToolExecutionControlError extends Error {
|
|
113
|
+
reason;
|
|
114
|
+
constructor(reason) {
|
|
115
|
+
super(`Agent tool execution stopped: ${reason}`);
|
|
116
|
+
this.name = "ToolExecutionControlError";
|
|
117
|
+
this.reason = reason;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
function isPlainObject(value) {
|
|
121
|
+
if (!isRecord(value))
|
|
122
|
+
return false;
|
|
123
|
+
const proto = Object.getPrototypeOf(value);
|
|
124
|
+
return proto === Object.prototype || proto === null;
|
|
125
|
+
}
|
|
126
|
+
function isToolExecutionControlError(value) {
|
|
127
|
+
return value instanceof ToolExecutionControlError;
|
|
128
|
+
}
|
|
129
|
+
var noProgress = async () => {
|
|
130
|
+
return;
|
|
131
|
+
};
|
|
128
132
|
async function executeToolMethod(method, call, options = {}) {
|
|
129
133
|
const { toolName, context } = call;
|
|
130
134
|
return inToolCallContext({ source: context.source, toolName, method }, () => runToolMethod(method, call, options));
|
|
@@ -145,6 +149,88 @@ function inToolCallContext(call, body) {
|
|
|
145
149
|
action: call.method.key
|
|
146
150
|
}, body);
|
|
147
151
|
}
|
|
152
|
+
async function invokeToolHandler(method, ctx, input, source, {
|
|
153
|
+
lifecycle,
|
|
154
|
+
onOutputStrip,
|
|
155
|
+
finalizeOutput,
|
|
156
|
+
toolSurface
|
|
157
|
+
}) {
|
|
158
|
+
if (lifecycle?.beforeHandle) {
|
|
159
|
+
await lifecycle.beforeHandle(ctx, method);
|
|
160
|
+
}
|
|
161
|
+
let data = await method.handler(ctx);
|
|
162
|
+
if (lifecycle?.afterHandle) {
|
|
163
|
+
const transformed = await lifecycle.afterHandle(ctx, data, method);
|
|
164
|
+
if (transformed !== undefined)
|
|
165
|
+
data = transformed;
|
|
166
|
+
}
|
|
167
|
+
const checked = validateDeclaredOutput(method.outputSchema, data, onOutputStrip);
|
|
168
|
+
if (!checked.ok) {
|
|
169
|
+
return {
|
|
170
|
+
ok: false,
|
|
171
|
+
code: "INTERNAL_SERVER_ERROR",
|
|
172
|
+
details: { message: checked.message }
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
data = checked.data;
|
|
176
|
+
if (toolSurface && method.toolView && method.outputSchema) {
|
|
177
|
+
const viewed = projectToolView({
|
|
178
|
+
view: method.toolView,
|
|
179
|
+
fullSchema: method.outputSchema,
|
|
180
|
+
full: data,
|
|
181
|
+
call: { input, source },
|
|
182
|
+
operation: `${method.serviceName}.${method.key}`,
|
|
183
|
+
onStripped: onOutputStrip
|
|
184
|
+
});
|
|
185
|
+
if (!viewed.ok) {
|
|
186
|
+
return {
|
|
187
|
+
ok: false,
|
|
188
|
+
code: "INTERNAL_SERVER_ERROR",
|
|
189
|
+
details: { message: viewed.message }
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
data = viewed.data;
|
|
193
|
+
}
|
|
194
|
+
if (finalizeOutput)
|
|
195
|
+
data = await finalizeOutput(data);
|
|
196
|
+
const output = (data === undefined || data === null) && !method.outputSchema ? { status: "ok" } : data;
|
|
197
|
+
return { ok: true, data: output };
|
|
198
|
+
}
|
|
199
|
+
async function resolveToolExtension(extension, keys, rawArgs, context) {
|
|
200
|
+
const extensionArgs = Object.fromEntries(Object.entries(rawArgs).filter(([key]) => keys.has(key)));
|
|
201
|
+
let parsed;
|
|
202
|
+
try {
|
|
203
|
+
parsed = extension.schema.safeParse(extensionArgs);
|
|
204
|
+
} catch (err) {
|
|
205
|
+
return { thrown: err };
|
|
206
|
+
}
|
|
207
|
+
if (!parsed.success)
|
|
208
|
+
return { invalid: formatZodError(parsed.error) };
|
|
209
|
+
try {
|
|
210
|
+
const resolved = await extension.resolve({ ...rawArgs, ...parsed.data });
|
|
211
|
+
return {
|
|
212
|
+
context: {
|
|
213
|
+
...context,
|
|
214
|
+
...resolved,
|
|
215
|
+
source: context.source,
|
|
216
|
+
...context.mcp !== undefined && { mcp: context.mcp },
|
|
217
|
+
...context.toolCallId !== undefined && { toolCallId: context.toolCallId }
|
|
218
|
+
},
|
|
219
|
+
args: Object.fromEntries(Object.entries(rawArgs).filter(([key]) => !keys.has(key)))
|
|
220
|
+
};
|
|
221
|
+
} catch (err) {
|
|
222
|
+
return { thrown: err };
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
async function observed(hook, call) {
|
|
226
|
+
try {
|
|
227
|
+
await call();
|
|
228
|
+
} catch (hookError) {
|
|
229
|
+
try {
|
|
230
|
+
console.error(`[stitchkit] ${hook} hook failed:`, hookError);
|
|
231
|
+
} catch {}
|
|
232
|
+
}
|
|
233
|
+
}
|
|
148
234
|
async function runToolMethod(method, { toolName, rawArgs, context }, {
|
|
149
235
|
hooks,
|
|
150
236
|
lifecycle,
|
|
@@ -157,22 +243,16 @@ async function runToolMethod(method, { toolName, rawArgs, context }, {
|
|
|
157
243
|
const startedAt = Date.now();
|
|
158
244
|
let hookContext = context;
|
|
159
245
|
const finish = async (result, thrown) => {
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
});
|
|
171
|
-
} catch (hookError) {
|
|
172
|
-
try {
|
|
173
|
-
console.error("[stitchkit] afterToolCall hook failed:", hookError);
|
|
174
|
-
} catch {}
|
|
175
|
-
}
|
|
246
|
+
await observed("afterToolCall", () => hooks?.afterToolCall?.({
|
|
247
|
+
toolName,
|
|
248
|
+
args: rawArgs,
|
|
249
|
+
result,
|
|
250
|
+
durationMs: Date.now() - startedAt,
|
|
251
|
+
context: hookContext,
|
|
252
|
+
endpoint: method,
|
|
253
|
+
...thrown !== undefined && { error: thrown },
|
|
254
|
+
...rewrittenArgsApplied && rewrittenArgs !== undefined && { effectiveArgs: rewrittenArgs }
|
|
255
|
+
}));
|
|
176
256
|
return result;
|
|
177
257
|
};
|
|
178
258
|
let beforeRan = false;
|
|
@@ -202,59 +282,30 @@ async function runToolMethod(method, { toolName, rawArgs, context }, {
|
|
|
202
282
|
const before2 = await runBefore();
|
|
203
283
|
if (before2?.kind === "failure")
|
|
204
284
|
return before2.result;
|
|
205
|
-
|
|
206
|
-
try {
|
|
207
|
-
await hooks.onToolError({
|
|
208
|
-
toolName,
|
|
209
|
-
error: err,
|
|
210
|
-
context: hookContext,
|
|
211
|
-
endpoint: method
|
|
212
|
-
});
|
|
213
|
-
} catch (hookErr) {
|
|
214
|
-
try {
|
|
215
|
-
console.error("[stitchkit] onToolError hook failed:", hookErr);
|
|
216
|
-
} catch {}
|
|
217
|
-
}
|
|
218
|
-
}
|
|
285
|
+
await observed("onToolError", () => hooks?.onToolError?.({ toolName, error: err, context: hookContext, endpoint: method }));
|
|
219
286
|
return finish(toolResultFromError(err), err);
|
|
220
287
|
};
|
|
221
288
|
let callArgs = rawArgs;
|
|
222
289
|
let callContext = context;
|
|
223
290
|
let extensionKeys;
|
|
224
291
|
if (extension) {
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
parsed2 = extension.schema.safeParse(extensionArgs);
|
|
231
|
-
} catch (err) {
|
|
232
|
-
return finishThrown(err);
|
|
233
|
-
}
|
|
234
|
-
if (!parsed2.success) {
|
|
292
|
+
extensionKeys = new Set(Object.keys(extension.schema.shape));
|
|
293
|
+
const resolved = await resolveToolExtension(extension, extensionKeys, rawArgs, context);
|
|
294
|
+
if ("thrown" in resolved)
|
|
295
|
+
return finishThrown(resolved.thrown);
|
|
296
|
+
if ("invalid" in resolved) {
|
|
235
297
|
const before2 = await runBefore();
|
|
236
298
|
if (before2?.kind === "failure")
|
|
237
299
|
return before2.result;
|
|
238
300
|
return finish({
|
|
239
301
|
ok: false,
|
|
240
302
|
code: "VALIDATION_ERROR",
|
|
241
|
-
details: { message: `Invalid tool extension: ${
|
|
303
|
+
details: { message: `Invalid tool extension: ${resolved.invalid}` }
|
|
242
304
|
});
|
|
243
305
|
}
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
...context,
|
|
248
|
-
...resolved,
|
|
249
|
-
source: context.source,
|
|
250
|
-
...context.mcp !== undefined && { mcp: context.mcp },
|
|
251
|
-
...context.toolCallId !== undefined && { toolCallId: context.toolCallId }
|
|
252
|
-
};
|
|
253
|
-
hookContext = callContext;
|
|
254
|
-
callArgs = Object.fromEntries(Object.entries(rawArgs).filter(([key]) => !keys.has(key)));
|
|
255
|
-
} catch (err) {
|
|
256
|
-
return finishThrown(err);
|
|
257
|
-
}
|
|
306
|
+
callContext = resolved.context;
|
|
307
|
+
hookContext = callContext;
|
|
308
|
+
callArgs = resolved.args;
|
|
258
309
|
}
|
|
259
310
|
const before = await runBefore();
|
|
260
311
|
if (before?.kind === "failure")
|
|
@@ -276,46 +327,12 @@ async function runToolMethod(method, { toolName, rawArgs, context }, {
|
|
|
276
327
|
input,
|
|
277
328
|
source: context.source
|
|
278
329
|
};
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
if (transformed !== undefined)
|
|
286
|
-
data = transformed;
|
|
287
|
-
}
|
|
288
|
-
const checked = validateDeclaredOutput(method.outputSchema, data, onOutputStrip);
|
|
289
|
-
if (!checked.ok) {
|
|
290
|
-
return finish({
|
|
291
|
-
ok: false,
|
|
292
|
-
code: "INTERNAL_SERVER_ERROR",
|
|
293
|
-
details: { message: checked.message }
|
|
294
|
-
});
|
|
295
|
-
}
|
|
296
|
-
data = checked.data;
|
|
297
|
-
if (toolSurface && method.toolView && method.outputSchema) {
|
|
298
|
-
const viewed = projectToolView({
|
|
299
|
-
view: method.toolView,
|
|
300
|
-
fullSchema: method.outputSchema,
|
|
301
|
-
full: data,
|
|
302
|
-
call: { input, source: context.source },
|
|
303
|
-
operation: `${method.serviceName}.${method.key}`,
|
|
304
|
-
onStripped: onOutputStrip
|
|
305
|
-
});
|
|
306
|
-
if (!viewed.ok) {
|
|
307
|
-
return finish({
|
|
308
|
-
ok: false,
|
|
309
|
-
code: "INTERNAL_SERVER_ERROR",
|
|
310
|
-
details: { message: viewed.message }
|
|
311
|
-
});
|
|
312
|
-
}
|
|
313
|
-
data = viewed.data;
|
|
314
|
-
}
|
|
315
|
-
if (finalizeOutput)
|
|
316
|
-
data = await finalizeOutput(data);
|
|
317
|
-
const output = (data === undefined || data === null) && !method.outputSchema ? { status: "ok" } : data;
|
|
318
|
-
return finish({ ok: true, data: output });
|
|
330
|
+
return finish(await invokeToolHandler(method, ctx, input, context.source, {
|
|
331
|
+
lifecycle,
|
|
332
|
+
onOutputStrip,
|
|
333
|
+
finalizeOutput,
|
|
334
|
+
toolSurface
|
|
335
|
+
}));
|
|
319
336
|
} catch (err) {
|
|
320
337
|
if (isToolExecutionControlError(err))
|
|
321
338
|
throw err;
|
|
@@ -323,4 +340,4 @@ async function runToolMethod(method, { toolName, rawArgs, context }, {
|
|
|
323
340
|
}
|
|
324
341
|
}
|
|
325
342
|
|
|
326
|
-
export {
|
|
343
|
+
export { parseToolCallArguments, toolResultFromError, toolErrorFromResult, toolCauseFromResult, ToolExecutionControlError, isToolExecutionControlError, executeToolMethod };
|