@relkit/inspector-api 0.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.
Files changed (91) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +5 -0
  3. package/dist/actions-dispatch.d.ts +4 -0
  4. package/dist/actions-dispatch.d.ts.map +1 -0
  5. package/dist/actions-dispatch.js +80 -0
  6. package/dist/actions-dispatch.js.map +1 -0
  7. package/dist/actions-errors.d.ts +7 -0
  8. package/dist/actions-errors.d.ts.map +1 -0
  9. package/dist/actions-errors.js +13 -0
  10. package/dist/actions-errors.js.map +1 -0
  11. package/dist/actions-projection.d.ts +7 -0
  12. package/dist/actions-projection.d.ts.map +1 -0
  13. package/dist/actions-projection.js +79 -0
  14. package/dist/actions-projection.js.map +1 -0
  15. package/dist/actions-runtime.d.ts +15 -0
  16. package/dist/actions-runtime.d.ts.map +1 -0
  17. package/dist/actions-runtime.js +96 -0
  18. package/dist/actions-runtime.js.map +1 -0
  19. package/dist/actions-utils.d.ts +17 -0
  20. package/dist/actions-utils.d.ts.map +1 -0
  21. package/dist/actions-utils.js +103 -0
  22. package/dist/actions-utils.js.map +1 -0
  23. package/dist/actions.d.ts +107 -0
  24. package/dist/actions.d.ts.map +1 -0
  25. package/dist/actions.js +56 -0
  26. package/dist/actions.js.map +1 -0
  27. package/dist/diagnostics.d.ts +4 -0
  28. package/dist/diagnostics.d.ts.map +1 -0
  29. package/dist/diagnostics.js +73 -0
  30. package/dist/diagnostics.js.map +1 -0
  31. package/dist/environment.d.ts +5 -0
  32. package/dist/environment.d.ts.map +1 -0
  33. package/dist/environment.js +61 -0
  34. package/dist/environment.js.map +1 -0
  35. package/dist/events-runtime.d.ts +6 -0
  36. package/dist/events-runtime.d.ts.map +1 -0
  37. package/dist/events-runtime.js +181 -0
  38. package/dist/events-runtime.js.map +1 -0
  39. package/dist/generation-types.d.ts +22 -0
  40. package/dist/generation-types.d.ts.map +1 -0
  41. package/dist/generation-types.js +2 -0
  42. package/dist/generation-types.js.map +1 -0
  43. package/dist/generation.d.ts +3 -0
  44. package/dist/generation.d.ts.map +1 -0
  45. package/dist/generation.js +87 -0
  46. package/dist/generation.js.map +1 -0
  47. package/dist/graph-utils.d.ts +6 -0
  48. package/dist/graph-utils.d.ts.map +1 -0
  49. package/dist/graph-utils.js +60 -0
  50. package/dist/graph-utils.js.map +1 -0
  51. package/dist/graph.d.ts +14 -0
  52. package/dist/graph.d.ts.map +1 -0
  53. package/dist/graph.js +120 -0
  54. package/dist/graph.js.map +1 -0
  55. package/dist/index.d.ts +11 -0
  56. package/dist/index.d.ts.map +1 -0
  57. package/dist/index.js +11 -0
  58. package/dist/index.js.map +1 -0
  59. package/dist/observability-utils.d.ts +4 -0
  60. package/dist/observability-utils.d.ts.map +1 -0
  61. package/dist/observability-utils.js +150 -0
  62. package/dist/observability-utils.js.map +1 -0
  63. package/dist/observability.d.ts +23 -0
  64. package/dist/observability.d.ts.map +1 -0
  65. package/dist/observability.js +126 -0
  66. package/dist/observability.js.map +1 -0
  67. package/dist/resource-explorer.d.ts +54 -0
  68. package/dist/resource-explorer.d.ts.map +1 -0
  69. package/dist/resource-explorer.js +119 -0
  70. package/dist/resource-explorer.js.map +1 -0
  71. package/dist/resource-routes.d.ts +6 -0
  72. package/dist/resource-routes.d.ts.map +1 -0
  73. package/dist/resource-routes.js +10 -0
  74. package/dist/resource-routes.js.map +1 -0
  75. package/dist/router-utils.d.ts +26 -0
  76. package/dist/router-utils.d.ts.map +1 -0
  77. package/dist/router-utils.js +129 -0
  78. package/dist/router-utils.js.map +1 -0
  79. package/dist/router.d.ts +23 -0
  80. package/dist/router.d.ts.map +1 -0
  81. package/dist/router.js +94 -0
  82. package/dist/router.js.map +1 -0
  83. package/dist/runtime.d.ts +13 -0
  84. package/dist/runtime.d.ts.map +1 -0
  85. package/dist/runtime.js +158 -0
  86. package/dist/runtime.js.map +1 -0
  87. package/dist/shared.d.ts +74 -0
  88. package/dist/shared.d.ts.map +1 -0
  89. package/dist/shared.js +120 -0
  90. package/dist/shared.js.map +1 -0
  91. package/package.json +41 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 rel-kit
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,5 @@
1
+ # @relkit/inspector-api
2
+
3
+ Unsupported internal API for the RELKIT inspector; use @relkit/cli.
4
+
5
+ See [@relkit/app](https://github.com/rel-kit/relkit) for supported application APIs.
@@ -0,0 +1,4 @@
1
+ import { type ResolvedActiveGeneration } from "./shared.js";
2
+ import type { InspectorActionRequest, InspectorActionServices } from "./actions.js";
3
+ export declare function dispatchInspectorAction(request: InspectorActionRequest, generation: ResolvedActiveGeneration, actions: InspectorActionServices): Promise<Record<string, unknown>>;
4
+ //# sourceMappingURL=actions-dispatch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actions-dispatch.d.ts","sourceRoot":"","sources":["../src/actions-dispatch.ts"],"names":[],"mappings":"AACA,OAAO,EAAY,KAAK,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAItE,OAAO,KAAK,EACV,sBAAsB,EACtB,uBAAuB,EAKxB,MAAM,cAAc,CAAC;AAEtB,wBAAsB,uBAAuB,CAC3C,OAAO,EAAE,sBAAsB,EAC/B,UAAU,EAAE,wBAAwB,EACpC,OAAO,EAAE,uBAAuB,GAC/B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAuDlC"}
@@ -0,0 +1,80 @@
1
+ import { PROTOCOL_VERSION } from "@relkit/contracts";
2
+ import { safeJson } from "./shared.js";
3
+ import { InspectorActionError } from "./actions-errors.js";
4
+ import { ACTION_REDACTION, projectAdmin, projectApproval } from "./actions-projection.js";
5
+ import { assertActionState, assertProtocol, bounded, reason } from "./actions-utils.js";
6
+ export async function dispatchInspectorAction(request, generation, actions) {
7
+ if (request.action === "function.invoke") {
8
+ const service = actions.functions;
9
+ const invoke = service?.invoke ?? actions.invokeFunction;
10
+ if (invoke === undefined)
11
+ throw new InspectorActionError("RELKIT_INSPECTOR_ACTION_UNSUPPORTED", 501);
12
+ if (service?.exists !== undefined && !(await service.exists(request.targetId)))
13
+ throw new InspectorActionError("RELKIT_INSPECTOR_ACTION_NOT_FOUND", 404);
14
+ const value = await invoke({
15
+ generationId: generation.generationId,
16
+ graphHash: generation.graphHash,
17
+ functionId: request.targetId,
18
+ input: request.body.input,
19
+ idempotencyKey: request.idempotencyKey,
20
+ ...(request.signal === undefined ? {} : { signal: request.signal }),
21
+ });
22
+ return { output: safeJson(value, ACTION_REDACTION) };
23
+ }
24
+ if (request.action.startsWith("job.")) {
25
+ const service = actions.jobs;
26
+ assertProtocol(service, "relkit.jobs.admin");
27
+ const method = request.action === "job.retry" ? service?.retry : service?.cancel;
28
+ if (method === undefined)
29
+ throw new InspectorActionError("RELKIT_INSPECTOR_ACTION_UNSUPPORTED", 501);
30
+ if (service?.status !== undefined)
31
+ assertActionState(request.action, await service.status(request.targetId));
32
+ const actionReason = reason(request.body.reason);
33
+ return projectAdmin(await method({
34
+ protocol: "relkit.jobs.admin",
35
+ version: PROTOCOL_VERSION,
36
+ instanceId: request.targetId,
37
+ ...(actionReason === undefined ? {} : { reason: actionReason }),
38
+ }));
39
+ }
40
+ if (request.action.startsWith("event.")) {
41
+ const service = actions.events;
42
+ assertProtocol(service, "relkit.events.admin");
43
+ const method = request.action === "event.retry" ? service?.retry : service?.cancel;
44
+ if (method === undefined)
45
+ throw new InspectorActionError("RELKIT_INSPECTOR_ACTION_UNSUPPORTED", 501);
46
+ if (service?.status !== undefined)
47
+ assertActionState(request.action, await service.status(request.targetId));
48
+ const actionReason = reason(request.body.reason);
49
+ return projectAdmin(await method({
50
+ protocol: "relkit.events.admin",
51
+ version: PROTOCOL_VERSION,
52
+ deliveryId: request.targetId,
53
+ ...(actionReason === undefined ? {} : { reason: actionReason }),
54
+ }));
55
+ }
56
+ return approveTool(request, actions);
57
+ }
58
+ async function approveTool(request, actions) {
59
+ const service = actions.approvals ?? actions.tools?.approvals;
60
+ if (service === undefined)
61
+ throw new InspectorActionError("RELKIT_INSPECTOR_ACTION_UNSUPPORTED", 501);
62
+ const approvalRequest = {
63
+ invocationId: bounded(request.body.invocationId),
64
+ toolCallId: bounded(request.body.toolCallId),
65
+ toolId: request.targetId,
66
+ idempotencyKey: request.idempotencyKey,
67
+ };
68
+ const current = await service.get({
69
+ invocationId: approvalRequest.invocationId,
70
+ toolCallId: approvalRequest.toolCallId,
71
+ toolId: approvalRequest.toolId,
72
+ });
73
+ if (!current || current.state !== "pending")
74
+ throw new InspectorActionError("RELKIT_INSPECTOR_APPROVAL_STATE_INELIGIBLE", 409);
75
+ const method = request.action === "tool.deny" ? service.deny : service.approve;
76
+ if (method === undefined)
77
+ throw new InspectorActionError("RELKIT_INSPECTOR_ACTION_UNSUPPORTED", 501);
78
+ return { approval: projectApproval(await method(approvalRequest)) };
79
+ }
80
+ //# sourceMappingURL=actions-dispatch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actions-dispatch.js","sourceRoot":"","sources":["../src/actions-dispatch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ export declare class InspectorActionError extends Error {
2
+ readonly code: string;
3
+ readonly status: number;
4
+ readonly body: Record<string, unknown> | undefined;
5
+ constructor(code: string, status: number, body?: Record<string, unknown>);
6
+ }
7
+ //# sourceMappingURL=actions-errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actions-errors.d.ts","sourceRoot":"","sources":["../src/actions-errors.ts"],"names":[],"mappings":"AAAA,qBAAa,oBAAqB,SAAQ,KAAK;IAC7C,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;gBAEvC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAOzE"}
@@ -0,0 +1,13 @@
1
+ export class InspectorActionError extends Error {
2
+ code;
3
+ status;
4
+ body;
5
+ constructor(code, status, body) {
6
+ super(code);
7
+ this.name = "InspectorActionError";
8
+ this.code = code;
9
+ this.status = status;
10
+ this.body = body;
11
+ }
12
+ }
13
+ //# sourceMappingURL=actions-errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actions-errors.js","sourceRoot":"","sources":["../src/actions-errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,oBAAqB,SAAQ,KAAK;IACpC,IAAI,CAAS;IACb,MAAM,CAAS;IACf,IAAI,CAAsC;IAEnD,YAAY,IAAY,EAAE,MAAc,EAAE,IAA8B;QACtE,KAAK,CAAC,IAAI,CAAC,CAAC;QACZ,IAAI,CAAC,IAAI,GAAG,sBAAsB,CAAC;QACnC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACnB,CAAC;CACF"}
@@ -0,0 +1,7 @@
1
+ import { type JsonValue } from "@relkit/contracts";
2
+ export declare const ACTION_REDACTION: Readonly<{
3
+ redactKeys: string[];
4
+ }>;
5
+ export declare function projectAdmin(value: unknown): Record<string, unknown>;
6
+ export declare function projectApproval(value: unknown): JsonValue;
7
+ //# sourceMappingURL=actions-projection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actions-projection.d.ts","sourceRoot":"","sources":["../src/actions-projection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAGnD,eAAO,MAAM,gBAAgB;;EAW3B,CAAC;AAEH,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAkDpE;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS,CAczD"}
@@ -0,0 +1,79 @@
1
+ import {} from "@relkit/contracts";
2
+ import { isRecord, pick, safeJson } from "./shared.js";
3
+ export const ACTION_REDACTION = Object.freeze({
4
+ redactKeys: [
5
+ "handler",
6
+ "handlerObject",
7
+ "providerFile",
8
+ "providerRoot",
9
+ "stateRoot",
10
+ "registry",
11
+ "raw",
12
+ "object",
13
+ ],
14
+ });
15
+ export function projectAdmin(value) {
16
+ if (!isRecord(value))
17
+ return {};
18
+ const status = isRecord(value.status)
19
+ ? pick(value.status, [
20
+ "protocol",
21
+ "version",
22
+ "instanceId",
23
+ "deliveryId",
24
+ "eventInstanceId",
25
+ "eventId",
26
+ "triggerId",
27
+ "cursor",
28
+ "sequence",
29
+ "state",
30
+ "profile",
31
+ "attempt",
32
+ "acceptedAt",
33
+ "order",
34
+ "availableAt",
35
+ "leaseExpiresAt",
36
+ "idempotencyExpiresAt",
37
+ "duplicate",
38
+ "timestamp",
39
+ "failure",
40
+ ])
41
+ : undefined;
42
+ const record = isRecord(value.record)
43
+ ? pick(value.record, [
44
+ "protocol",
45
+ "version",
46
+ "actionId",
47
+ "action",
48
+ "instanceId",
49
+ "deliveryId",
50
+ "eventInstanceId",
51
+ "triggerId",
52
+ "mode",
53
+ "outcome",
54
+ "requestedAt",
55
+ "fromState",
56
+ "toState",
57
+ "errorCode",
58
+ "reason",
59
+ ])
60
+ : undefined;
61
+ return {
62
+ ...(status === undefined ? {} : { status: safeJson(status, ACTION_REDACTION) }),
63
+ ...(record === undefined ? {} : { record: safeJson(record, ACTION_REDACTION) }),
64
+ ...(typeof value.action === "string" ? { action: value.action } : {}),
65
+ };
66
+ }
67
+ export function projectApproval(value) {
68
+ const approval = isRecord(value) ? value : {};
69
+ return safeJson(pick(approval, [
70
+ "invocationId",
71
+ "toolCallId",
72
+ "toolId",
73
+ "state",
74
+ "sideEffect",
75
+ "policy",
76
+ "required",
77
+ ]), ACTION_REDACTION);
78
+ }
79
+ //# sourceMappingURL=actions-projection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actions-projection.js","sourceRoot":"","sources":["../src/actions-projection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvD,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,CAAC;IAC5C,UAAU,EAAE;QACV,SAAS;QACT,eAAe;QACf,cAAc;QACd,cAAc;QACd,WAAW;QACX,UAAU;QACV,KAAK;QACL,QAAQ;KACT;CACF,CAAC,CAAC;AAEH,MAAM,UAAU,YAAY,CAAC,KAAc;IACzC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAChC,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC;QACnC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;YACjB,UAAU;YACV,SAAS;YACT,YAAY;YACZ,YAAY;YACZ,iBAAiB;YACjB,SAAS;YACT,WAAW;YACX,QAAQ;YACR,UAAU;YACV,OAAO;YACP,SAAS;YACT,SAAS;YACT,YAAY;YACZ,OAAO;YACP,aAAa;YACb,gBAAgB;YAChB,sBAAsB;YACtB,WAAW;YACX,WAAW;YACX,SAAS;SACV,CAAC;QACJ,CAAC,CAAC,SAAS,CAAC;IACd,MAAM,MAAM,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC;QACnC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;YACjB,UAAU;YACV,SAAS;YACT,UAAU;YACV,QAAQ;YACR,YAAY;YACZ,YAAY;YACZ,iBAAiB;YACjB,WAAW;YACX,MAAM;YACN,SAAS;YACT,aAAa;YACb,WAAW;YACX,SAAS;YACT,WAAW;YACX,QAAQ;SACT,CAAC;QACJ,CAAC,CAAC,SAAS,CAAC;IACd,OAAO;QACL,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC,EAAE,CAAC;QAC/E,GAAG,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC,EAAE,CAAC;QAC/E,GAAG,CAAC,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACtE,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAc;IAC5C,MAAM,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9C,OAAO,QAAQ,CACb,IAAI,CAAC,QAAQ,EAAE;QACb,cAAc;QACd,YAAY;QACZ,QAAQ;QACR,OAAO;QACP,YAAY;QACZ,QAAQ;QACR,UAAU;KACX,CAAC,EACF,gBAAgB,CACjB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,15 @@
1
+ import { type ResolvedActiveGeneration } from "./shared.js";
2
+ import type { InspectorActionName, InspectorActionRequest } from "./actions.js";
3
+ import type { InspectorMode } from "./shared.js";
4
+ export interface InspectorActionResult {
5
+ readonly status: number;
6
+ readonly body: Record<string, unknown>;
7
+ readonly fingerprint: string;
8
+ }
9
+ export declare function parseInspectorAction(action: InspectorActionName, target: string | undefined, body: Record<string, unknown>, headers?: Headers, signal?: AbortSignal, decision?: "approve" | "deny"): InspectorActionRequest;
10
+ export declare function executeInspectorAction(request: InspectorActionRequest, options: {
11
+ readonly mode: InspectorMode;
12
+ readonly getGeneration: () => Promise<ResolvedActiveGeneration | undefined>;
13
+ readonly idempotency?: Map<string, Promise<InspectorActionResult>>;
14
+ }): Promise<InspectorActionResult>;
15
+ //# sourceMappingURL=actions-runtime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actions-runtime.d.ts","sourceRoot":"","sources":["../src/actions-runtime.ts"],"names":[],"mappings":"AACA,OAAO,EAAY,KAAK,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAWtE,OAAO,KAAK,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AAChF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAID,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,mBAAmB,EAC3B,MAAM,EAAE,MAAM,GAAG,SAAS,EAC1B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,OAAO,CAAC,EAAE,OAAO,EACjB,MAAM,CAAC,EAAE,WAAW,EACpB,QAAQ,CAAC,EAAE,SAAS,GAAG,MAAM,GAC5B,sBAAsB,CA4BxB;AAED,wBAAsB,sBAAsB,CAC1C,OAAO,EAAE,sBAAsB,EAC/B,OAAO,EAAE;IACP,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,QAAQ,CAAC,aAAa,EAAE,MAAM,OAAO,CAAC,wBAAwB,GAAG,SAAS,CAAC,CAAC;IAC5E,QAAQ,CAAC,WAAW,CAAC,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,qBAAqB,CAAC,CAAC,CAAC;CACpE,GACA,OAAO,CAAC,qBAAqB,CAAC,CAmChC"}
@@ -0,0 +1,96 @@
1
+ import { PROTOCOL_VERSION, normalizeId } from "@relkit/contracts";
2
+ import { identity } from "./shared.js";
3
+ import { InspectorActionError } from "./actions-errors.js";
4
+ import { bounded, makeAudit, requestFingerprint, toActionError, validateIdentity, writeAudit, } from "./actions-utils.js";
5
+ import { dispatchInspectorAction } from "./actions-dispatch.js";
6
+ const defaultIdempotency = new Map();
7
+ export function parseInspectorAction(action, target, body, headers, signal, decision) {
8
+ let targetId;
9
+ try {
10
+ targetId = normalizeId(target).toString();
11
+ }
12
+ catch {
13
+ throw new InspectorActionError("RELKIT_INSPECTOR_ACTION_TARGET_INVALID", 400);
14
+ }
15
+ const generationId = bounded(body.generationId ?? headers?.get("x-relkit-generation-id"), 128);
16
+ const graphHash = bounded(body.graphHash ?? headers?.get("x-relkit-graph-hash"), 256);
17
+ const idempotencyKey = bounded(body.idempotencyKey ?? headers?.get("idempotency-key"), 128);
18
+ if (body.reason !== undefined)
19
+ bounded(body.reason, 256);
20
+ const resolvedDecision = decision ?? readDecision(body.decision);
21
+ const resolvedAction = resolvedDecision === "deny" ? "tool.deny" : action;
22
+ if (resolvedAction === "tool.approve" || resolvedAction === "tool.deny") {
23
+ bounded(body.invocationId, 128);
24
+ bounded(body.toolCallId, 128);
25
+ if (resolvedDecision === undefined)
26
+ throw new InspectorActionError("RELKIT_INSPECTOR_ACTION_REQUEST_INVALID", 400);
27
+ }
28
+ return {
29
+ action: resolvedAction,
30
+ targetId,
31
+ generationId,
32
+ graphHash,
33
+ idempotencyKey,
34
+ body,
35
+ ...(signal === undefined ? {} : { signal }),
36
+ };
37
+ }
38
+ export async function executeInspectorAction(request, options) {
39
+ const generation = await options.getGeneration();
40
+ if (generation === undefined)
41
+ throw new InspectorActionError("RELKIT_INSPECTOR_ACTION_GENERATION_UNAVAILABLE", 503);
42
+ try {
43
+ validateIdentity(request, generation, options.mode);
44
+ }
45
+ catch (error) {
46
+ return await rejectAction(error, request, generation, options.mode);
47
+ }
48
+ const key = generation.generationId +
49
+ ":" +
50
+ request.action +
51
+ ":" +
52
+ request.targetId +
53
+ ":" +
54
+ request.idempotencyKey;
55
+ const fingerprint = requestFingerprint(request, generation);
56
+ const store = options.idempotency ?? defaultIdempotency;
57
+ const existing = store.get(key);
58
+ if (existing !== undefined) {
59
+ if ((await existing).fingerprint !== fingerprint)
60
+ return await rejectAction(new InspectorActionError("RELKIT_INSPECTOR_IDEMPOTENCY_CONFLICT", 409), request, generation, options.mode);
61
+ return await existing;
62
+ }
63
+ const pending = perform(request, generation, options.mode, fingerprint).catch((error) => rejectAction(error, request, generation, options.mode));
64
+ store.set(key, pending);
65
+ return await pending;
66
+ }
67
+ async function rejectAction(error, request, generation, mode) {
68
+ const failure = toActionError(error);
69
+ const record = makeAudit(generation, request, mode, "rejected", failure.code);
70
+ await writeAudit(generation, record);
71
+ throw new InspectorActionError(failure.code, failure.status, {
72
+ ...identity(generation),
73
+ action: record,
74
+ error: failure.code,
75
+ });
76
+ }
77
+ async function perform(request, generation, mode, fingerprint) {
78
+ if (generation.actions === undefined)
79
+ throw new InspectorActionError("RELKIT_INSPECTOR_ACTIONS_UNAVAILABLE", 503);
80
+ const result = await dispatchInspectorAction(request, generation, generation.actions);
81
+ const record = makeAudit(generation, request, mode, "applied");
82
+ await writeAudit(generation, record);
83
+ return {
84
+ status: 200,
85
+ fingerprint,
86
+ body: { ...identity(generation), action: record, ...result },
87
+ };
88
+ }
89
+ function readDecision(value) {
90
+ if (value === "approve" || value === "deny")
91
+ return value;
92
+ if (value === undefined)
93
+ return undefined;
94
+ throw new InspectorActionError("RELKIT_INSPECTOR_ACTION_REQUEST_INVALID", 400);
95
+ }
96
+ //# sourceMappingURL=actions-runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actions-runtime.js","sourceRoot":"","sources":["../src/actions-runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import { type ResolvedActiveGeneration } from "./shared.js";
2
+ import { InspectorActionError } from "./actions-errors.js";
3
+ import type { InspectorActionRequest, InspectorAuditRecord } from "./actions.js";
4
+ import type { InspectorMode } from "./shared.js";
5
+ export declare function bounded(value: unknown, max?: number): string;
6
+ export declare function reason(value: unknown): string | undefined;
7
+ export declare function assertProtocol(service: {
8
+ readonly protocol?: string;
9
+ readonly version?: number;
10
+ } | undefined, protocol: string): void;
11
+ export declare function assertActionState(action: string, value: unknown): void;
12
+ export declare function requestFingerprint(request: InspectorActionRequest, generation: ResolvedActiveGeneration): string;
13
+ export declare function validateIdentity(request: InspectorActionRequest, generation: ResolvedActiveGeneration, mode: InspectorMode): void;
14
+ export declare function makeAudit(generation: ResolvedActiveGeneration, request: InspectorActionRequest, mode: InspectorMode, outcome: "applied" | "rejected", errorCode?: string): InspectorAuditRecord;
15
+ export declare function writeAudit(generation: ResolvedActiveGeneration, record: InspectorAuditRecord): Promise<void>;
16
+ export declare function toActionError(error: unknown): InspectorActionError;
17
+ //# sourceMappingURL=actions-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actions-utils.d.ts","sourceRoot":"","sources":["../src/actions-utils.ts"],"names":[],"mappings":"AAEA,OAAO,EAAsB,KAAK,wBAAwB,EAAE,MAAM,aAAa,CAAC;AAChF,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAE3D,OAAO,KAAK,EAAE,sBAAsB,EAAE,oBAAoB,EAAE,MAAM,cAAc,CAAC;AACjF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,wBAAgB,OAAO,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,SAAM,GAAG,MAAM,CAKzD;AAED,wBAAgB,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAEzD;AAED,wBAAgB,cAAc,CAC5B,OAAO,EAAE;IAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,EAC9E,QAAQ,EAAE,MAAM,GACf,IAAI,CAQN;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAUtE;AAED,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,sBAAsB,EAC/B,UAAU,EAAE,wBAAwB,GACnC,MAAM,CAcR;AAED,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,sBAAsB,EAC/B,UAAU,EAAE,wBAAwB,EACpC,IAAI,EAAE,aAAa,GAClB,IAAI,CAWN;AAED,wBAAgB,SAAS,CACvB,UAAU,EAAE,wBAAwB,EACpC,OAAO,EAAE,sBAAsB,EAC/B,IAAI,EAAE,aAAa,EACnB,OAAO,EAAE,SAAS,GAAG,UAAU,EAC/B,SAAS,CAAC,EAAE,MAAM,GACjB,oBAAoB,CAsBtB;AAED,wBAAsB,UAAU,CAC9B,UAAU,EAAE,wBAAwB,EACpC,MAAM,EAAE,oBAAoB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAMf;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,oBAAoB,CAiBlE"}
@@ -0,0 +1,103 @@
1
+ import { createHash, randomUUID } from "node:crypto";
2
+ import { API_VERSION, PROTOCOL_VERSION, canonicalJson } from "@relkit/contracts";
3
+ import { isRecord, safeJson } from "./shared.js";
4
+ import { InspectorActionError } from "./actions-errors.js";
5
+ import { ACTION_REDACTION } from "./actions-projection.js";
6
+ export function bounded(value, max = 128) {
7
+ const text = typeof value === "string" ? value.trim() : undefined;
8
+ if (!text || text.length > max)
9
+ throw new InspectorActionError("RELKIT_INSPECTOR_ACTION_REQUEST_INVALID", 400);
10
+ return text;
11
+ }
12
+ export function reason(value) {
13
+ return value === undefined ? undefined : bounded(value, 256);
14
+ }
15
+ export function assertProtocol(service, protocol) {
16
+ if (service === undefined)
17
+ throw new InspectorActionError("RELKIT_INSPECTOR_ACTIONS_UNAVAILABLE", 503);
18
+ if ((service.protocol !== undefined && service.protocol !== protocol) ||
19
+ (service.version !== undefined && service.version !== PROTOCOL_VERSION))
20
+ throw new InspectorActionError("RELKIT_INSPECTOR_ACTION_PROTOCOL_MISMATCH", 400);
21
+ }
22
+ export function assertActionState(action, value) {
23
+ if (value === undefined)
24
+ throw new InspectorActionError("RELKIT_INSPECTOR_ACTION_NOT_FOUND", 404);
25
+ if (!isRecord(value) || typeof value.state !== "string")
26
+ return;
27
+ if (action.endsWith(".retry") && value.state !== "dead-lettered")
28
+ throw new InspectorActionError("RELKIT_INSPECTOR_ACTION_STATE_INELIGIBLE", 409);
29
+ if (action.endsWith(".cancel") &&
30
+ ["completed", "dead-lettered", "cancelled"].includes(value.state))
31
+ throw new InspectorActionError("RELKIT_INSPECTOR_ACTION_STATE_INELIGIBLE", 409);
32
+ }
33
+ export function requestFingerprint(request, generation) {
34
+ const input = request.body.input === undefined ? null : safeJson(request.body.input);
35
+ const value = canonicalJson({
36
+ action: request.action,
37
+ targetId: request.targetId,
38
+ generationId: generation.generationId,
39
+ graphHash: generation.graphHash,
40
+ idempotencyKey: request.idempotencyKey,
41
+ input,
42
+ invocationId: request.body.invocationId ?? null,
43
+ toolCallId: request.body.toolCallId ?? null,
44
+ reason: request.body.reason ?? null,
45
+ });
46
+ return createHash("sha256").update(value).digest("hex");
47
+ }
48
+ export function validateIdentity(request, generation, mode) {
49
+ if (mode === "production")
50
+ throw new InspectorActionError("RELKIT_INSPECTOR_ACTIONS_DISABLED", 403);
51
+ const requestedMode = request.body.environment ?? request.body.mode;
52
+ if (requestedMode !== undefined && requestedMode !== mode)
53
+ throw new InspectorActionError("RELKIT_INSPECTOR_ENVIRONMENT_MISMATCH", 400);
54
+ if (request.generationId !== generation.generationId ||
55
+ request.graphHash !== generation.graphHash)
56
+ throw new InspectorActionError("RELKIT_INSPECTOR_GENERATION_NOT_ACTIVE", 409);
57
+ }
58
+ export function makeAudit(generation, request, mode, outcome, errorCode) {
59
+ const actionReason = reason(request.body.reason);
60
+ const redactedReason = safeJson({ reason: actionReason }, ACTION_REDACTION);
61
+ const safeReason = isRecord(redactedReason) && typeof redactedReason.reason === "string"
62
+ ? redactedReason.reason
63
+ : undefined;
64
+ return {
65
+ protocol: "relkit.inspector.actions",
66
+ version: API_VERSION,
67
+ actionId: randomUUID(),
68
+ action: request.action,
69
+ targetId: request.targetId,
70
+ generationId: generation.generationId,
71
+ graphHash: generation.graphHash,
72
+ environment: mode,
73
+ idempotencyKey: request.idempotencyKey,
74
+ outcome,
75
+ requestedAt: new Date().toISOString(),
76
+ ...(errorCode === undefined ? {} : { errorCode }),
77
+ ...(safeReason === undefined ? {} : { reason: safeReason }),
78
+ };
79
+ }
80
+ export async function writeAudit(generation, record) {
81
+ try {
82
+ await generation.actions?.audit?.(record);
83
+ }
84
+ catch {
85
+ // Audit sinks cannot turn a safe action response into an unsafe provider error.
86
+ }
87
+ }
88
+ export function toActionError(error) {
89
+ if (error instanceof InspectorActionError)
90
+ return error;
91
+ const code = isRecord(error) && typeof error.code === "string"
92
+ ? error.code
93
+ : "RELKIT_INSPECTOR_ACTION_FAILED";
94
+ const status = code.includes("NOT_FOUND")
95
+ ? 404
96
+ : code.includes("MUTATION_DISABLED")
97
+ ? 403
98
+ : code.includes("PROTOCOL") || code.includes("REQUEST")
99
+ ? 400
100
+ : 409;
101
+ return new InspectorActionError(code.startsWith("RELKIT_") ? code : "RELKIT_INSPECTOR_ACTION_FAILED", status);
102
+ }
103
+ //# sourceMappingURL=actions-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actions-utils.js","sourceRoot":"","sources":["../src/actions-utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,107 @@
1
+ import { API_VERSION, PROTOCOL_VERSION, type MaybePromise } from "@relkit/contracts";
2
+ import type { InspectorMode, ResolvedActiveGeneration } from "./shared.js";
3
+ import type { Hono } from "hono";
4
+ export type InspectorActionName = "function.invoke" | "job.retry" | "job.cancel" | "event.retry" | "event.cancel" | "tool.approve" | "tool.deny";
5
+ export interface InspectorFunctionActionRequest {
6
+ readonly generationId: string;
7
+ readonly graphHash: string;
8
+ readonly functionId: string;
9
+ readonly input: unknown;
10
+ readonly idempotencyKey: string;
11
+ readonly signal?: AbortSignal;
12
+ }
13
+ export interface InspectorFunctionActionService {
14
+ readonly invoke: (request: InspectorFunctionActionRequest) => MaybePromise<unknown>;
15
+ readonly exists?: (functionId: string) => MaybePromise<boolean>;
16
+ }
17
+ export interface InspectorJobActionRequest {
18
+ readonly protocol: "relkit.jobs.admin";
19
+ readonly version: typeof PROTOCOL_VERSION;
20
+ readonly instanceId: string;
21
+ readonly reason?: string;
22
+ }
23
+ export interface InspectorJobActionService {
24
+ readonly protocol?: string;
25
+ readonly version?: number;
26
+ readonly status?: (instanceId: string) => MaybePromise<unknown>;
27
+ readonly retry?: (request: InspectorJobActionRequest) => MaybePromise<unknown>;
28
+ readonly cancel?: (request: InspectorJobActionRequest) => MaybePromise<unknown>;
29
+ }
30
+ export interface InspectorEventActionRequest {
31
+ readonly protocol: "relkit.events.admin";
32
+ readonly version: typeof PROTOCOL_VERSION;
33
+ readonly deliveryId: string;
34
+ readonly reason?: string;
35
+ }
36
+ export interface InspectorEventActionService {
37
+ readonly protocol?: string;
38
+ readonly version?: number;
39
+ readonly status?: (deliveryId: string) => MaybePromise<unknown>;
40
+ readonly retry?: (request: InspectorEventActionRequest) => MaybePromise<unknown>;
41
+ readonly cancel?: (request: InspectorEventActionRequest) => MaybePromise<unknown>;
42
+ }
43
+ export type InspectorToolApprovalState = "pending" | "approved" | "denied";
44
+ export interface InspectorToolApprovalRecord {
45
+ readonly invocationId: string;
46
+ readonly toolCallId: string;
47
+ readonly toolId: string;
48
+ readonly state: InspectorToolApprovalState;
49
+ readonly sideEffect?: string;
50
+ readonly policy?: string;
51
+ readonly required?: boolean;
52
+ }
53
+ export interface InspectorToolApprovalRequest {
54
+ readonly invocationId: string;
55
+ readonly toolCallId: string;
56
+ readonly toolId: string;
57
+ readonly idempotencyKey: string;
58
+ }
59
+ export interface InspectorToolApprovalService {
60
+ readonly get: (request: Omit<InspectorToolApprovalRequest, "idempotencyKey">) => MaybePromise<InspectorToolApprovalRecord | undefined>;
61
+ readonly approve?: (request: InspectorToolApprovalRequest) => MaybePromise<unknown>;
62
+ readonly deny?: (request: InspectorToolApprovalRequest) => MaybePromise<unknown>;
63
+ }
64
+ export interface InspectorAuditRecord {
65
+ readonly protocol: "relkit.inspector.actions";
66
+ readonly version: typeof API_VERSION;
67
+ readonly actionId: string;
68
+ readonly action: InspectorActionName;
69
+ readonly targetId: string;
70
+ readonly generationId: string;
71
+ readonly graphHash: string;
72
+ readonly environment: InspectorMode;
73
+ readonly idempotencyKey: string;
74
+ readonly outcome: "applied" | "rejected";
75
+ readonly requestedAt: string;
76
+ readonly errorCode?: string;
77
+ readonly reason?: string;
78
+ }
79
+ export interface InspectorActionServices {
80
+ readonly functions?: InspectorFunctionActionService;
81
+ readonly invokeFunction?: InspectorFunctionActionService["invoke"];
82
+ readonly jobs?: InspectorJobActionService;
83
+ readonly events?: InspectorEventActionService;
84
+ readonly approvals?: InspectorToolApprovalService;
85
+ readonly tools?: {
86
+ readonly approvals?: InspectorToolApprovalService;
87
+ };
88
+ readonly audit?: (record: InspectorAuditRecord) => MaybePromise<void>;
89
+ }
90
+ export interface InspectorActionEndpointOptions {
91
+ readonly mode: InspectorMode;
92
+ readonly enabled: boolean;
93
+ readonly authorize: (request: Request) => MaybePromise<boolean>;
94
+ readonly getGeneration: () => Promise<ResolvedActiveGeneration | undefined>;
95
+ }
96
+ export interface InspectorActionRequest {
97
+ readonly action: InspectorActionName;
98
+ readonly targetId: string;
99
+ readonly generationId: string;
100
+ readonly graphHash: string;
101
+ readonly idempotencyKey: string;
102
+ readonly body: Record<string, unknown>;
103
+ readonly signal?: AbortSignal;
104
+ }
105
+ export declare const INSPECTOR_ACTION_PATHS: readonly ["/_relkit/v1/actions/functions/:id/invoke", "/_relkit/v1/actions/jobs/:id/retry", "/_relkit/v1/actions/jobs/:id/cancel", "/_relkit/v1/actions/events/:id/retry", "/_relkit/v1/actions/events/:id/cancel", "/_relkit/v1/actions/tools/:id/approval", "/_relkit/v1/actions/tools/:id/approve", "/_relkit/v1/actions/tools/:id/deny"];
106
+ export declare function installInspectorActionEndpoints(app: Hono, options: InspectorActionEndpointOptions): void;
107
+ //# sourceMappingURL=actions.d.ts.map