@agent-native/dispatch 0.36.0-nightly-20260909183543 → 0.36.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/dist/actions/apply-dream-proposal.js +2 -1
- package/dist/actions/apply-dream-proposal.js.map +1 -1
- package/dist/actions/approve-dispatch-change.js +2 -0
- package/dist/actions/approve-dispatch-change.js.map +1 -1
- package/dist/actions/create-pylon-ticket.js +2 -0
- package/dist/actions/create-pylon-ticket.js.map +1 -1
- package/dist/actions/create-workspace-resource-grant.js +2 -0
- package/dist/actions/create-workspace-resource-grant.js.map +1 -1
- package/dist/actions/create-workspace-resource.js +2 -0
- package/dist/actions/create-workspace-resource.js.map +1 -1
- package/dist/actions/delete-destination.js +2 -0
- package/dist/actions/delete-destination.js.map +1 -1
- package/dist/actions/delete-workspace-resource.js +2 -0
- package/dist/actions/delete-workspace-resource.js.map +1 -1
- package/dist/actions/ensure-dream-job.js +2 -0
- package/dist/actions/ensure-dream-job.js.map +1 -1
- package/dist/actions/grant-workspace-resources-to-app.js +2 -0
- package/dist/actions/grant-workspace-resources-to-app.js.map +1 -1
- package/dist/actions/import-agent-pack.d.ts.map +1 -1
- package/dist/actions/import-agent-pack.js +2 -0
- package/dist/actions/import-agent-pack.js.map +1 -1
- package/dist/actions/import-agent.d.ts.map +1 -1
- package/dist/actions/import-agent.js +2 -0
- package/dist/actions/import-agent.js.map +1 -1
- package/dist/actions/reject-dispatch-change.js +2 -0
- package/dist/actions/reject-dispatch-change.js.map +1 -1
- package/dist/actions/reject-dream-proposal.js +2 -1
- package/dist/actions/reject-dream-proposal.js.map +1 -1
- package/dist/actions/restore-starter-workspace-resources.js +2 -0
- package/dist/actions/restore-starter-workspace-resources.js.map +1 -1
- package/dist/actions/revoke-workspace-resource-grant.js +2 -0
- package/dist/actions/revoke-workspace-resource-grant.js.map +1 -1
- package/dist/actions/send-platform-message.js +2 -0
- package/dist/actions/send-platform-message.js.map +1 -1
- package/dist/actions/set-dispatch-approval-policy.js +2 -0
- package/dist/actions/set-dispatch-approval-policy.js.map +1 -1
- package/dist/actions/set-dream-settings.js +2 -0
- package/dist/actions/set-dream-settings.js.map +1 -1
- package/dist/actions/update-workspace-resource.js +2 -0
- package/dist/actions/update-workspace-resource.js.map +1 -1
- package/dist/actions/upsert-destination.d.ts +12 -12
- package/dist/actions/upsert-destination.js +2 -0
- package/dist/actions/upsert-destination.js.map +1 -1
- package/dist/components/dispatch-access.d.ts +1 -1
- package/dist/components/dispatch-access.d.ts.map +1 -1
- package/dist/components/dispatch-access.js +0 -9
- package/dist/components/dispatch-access.js.map +1 -1
- package/dist/server/lib/app-creation-store.js +1 -1
- package/dist/server/lib/app-creation-store.js.map +1 -1
- package/dist/server/lib/app-roles.d.ts +7 -0
- package/dist/server/lib/app-roles.d.ts.map +1 -0
- package/dist/server/lib/app-roles.js +45 -0
- package/dist/server/lib/app-roles.js.map +1 -0
- package/dist/server/lib/dispatch-store.d.ts.map +1 -1
- package/dist/server/lib/dispatch-store.js +1 -1
- package/dist/server/lib/dispatch-store.js.map +1 -1
- package/dist/server/lib/dreams-store.d.ts +4 -0
- package/dist/server/lib/dreams-store.d.ts.map +1 -1
- package/dist/server/lib/dreams-store.js +22 -1
- package/dist/server/lib/dreams-store.js.map +1 -1
- package/package.json +4 -4
- package/src/actions/apply-dream-proposal.ts +5 -1
- package/src/actions/approve-dispatch-change.ts +2 -0
- package/src/actions/create-pylon-ticket.ts +2 -0
- package/src/actions/create-workspace-resource-grant.ts +2 -0
- package/src/actions/create-workspace-resource.ts +2 -0
- package/src/actions/delete-destination.ts +2 -0
- package/src/actions/delete-workspace-resource.ts +2 -0
- package/src/actions/dispatch-admin-authorization.spec.ts +114 -0
- package/src/actions/ensure-dream-job.ts +2 -0
- package/src/actions/grant-workspace-resources-to-app.ts +2 -0
- package/src/actions/import-agent-pack.ts +2 -0
- package/src/actions/import-agent.ts +2 -0
- package/src/actions/reject-dispatch-change.ts +2 -0
- package/src/actions/reject-dream-proposal.ts +5 -1
- package/src/actions/restore-starter-workspace-resources.ts +2 -0
- package/src/actions/revoke-workspace-resource-grant.ts +2 -0
- package/src/actions/send-platform-message.spec.ts +4 -0
- package/src/actions/send-platform-message.ts +2 -0
- package/src/actions/set-dispatch-approval-policy.ts +2 -0
- package/src/actions/set-dream-settings.spec.ts +5 -0
- package/src/actions/set-dream-settings.ts +2 -0
- package/src/actions/update-workspace-resource.ts +2 -0
- package/src/actions/upsert-destination.ts +2 -0
- package/src/components/dispatch-access.spec.tsx +1 -63
- package/src/components/dispatch-access.tsx +0 -8
- package/src/server/lib/app-creation-store.spec.ts +21 -22
- package/src/server/lib/app-creation-store.ts +1 -1
- package/src/server/lib/app-roles.spec.ts +120 -0
- package/src/server/lib/app-roles.ts +67 -0
- package/src/server/lib/approval-fencing.spec.ts +39 -0
- package/src/server/lib/dispatch-store.ts +4 -1
- package/src/server/lib/dreams-store.spec.ts +78 -0
- package/src/server/lib/dreams-store.ts +37 -1
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { defineAction } from "@agent-native/core/action";
|
|
2
2
|
import { z } from "zod";
|
|
3
|
-
import { applyDreamProposal } from "../server/lib/dreams-store.js";
|
|
3
|
+
import { applyDreamProposal, authorizeDreamProposalMutation, } from "../server/lib/dreams-store.js";
|
|
4
4
|
export default defineAction({
|
|
5
5
|
description: "Apply one pending Dispatch dream proposal. Personal memory applies directly; shared LEARNINGS.md and workspace resource proposals queue an approval request when approval policy is enabled.",
|
|
6
|
+
authorize: authorizeDreamProposalMutation,
|
|
6
7
|
schema: z.object({
|
|
7
8
|
id: z.string().min(1).describe("Dream proposal id."),
|
|
8
9
|
}),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"apply-dream-proposal.js","sourceRoot":"","sources":["../../src/actions/apply-dream-proposal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,
|
|
1
|
+
{"version":3,"file":"apply-dream-proposal.js","sourceRoot":"","sources":["../../src/actions/apply-dream-proposal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EACL,kBAAkB,EAClB,8BAA8B,GAC/B,MAAM,+BAA+B,CAAC;AAEvC,eAAe,YAAY,CAAC;IAC1B,WAAW,EACT,8LAA8L;IAChM,SAAS,EAAE,8BAA8B;IACzC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,oBAAoB,CAAC;KACrD,CAAC;IACF,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,kBAAkB,CAAC,EAAE,CAAC;CAC9C,CAAC,CAAC","sourcesContent":["import { defineAction } from \"@agent-native/core/action\";\nimport { z } from \"zod\";\n\nimport {\n applyDreamProposal,\n authorizeDreamProposalMutation,\n} from \"../server/lib/dreams-store.js\";\n\nexport default defineAction({\n description:\n \"Apply one pending Dispatch dream proposal. Personal memory applies directly; shared LEARNINGS.md and workspace resource proposals queue an approval request when approval policy is enabled.\",\n authorize: authorizeDreamProposalMutation,\n schema: z.object({\n id: z.string().min(1).describe(\"Dream proposal id.\"),\n }),\n run: async ({ id }) => applyDreamProposal(id),\n});\n"]}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { defineAction } from "@agent-native/core/action";
|
|
2
2
|
import { z } from "zod";
|
|
3
|
+
import { authorizeDispatchAdmin } from "../server/lib/app-roles.js";
|
|
3
4
|
import { approveRequest } from "../server/lib/dispatch-store.js";
|
|
4
5
|
export default defineAction({
|
|
5
6
|
description: "Approve a pending dispatch change request and apply it.",
|
|
7
|
+
authorize: authorizeDispatchAdmin,
|
|
6
8
|
schema: z.object({
|
|
7
9
|
id: z.string().describe("Approval request id"),
|
|
8
10
|
}),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"approve-dispatch-change.js","sourceRoot":"","sources":["../../src/actions/approve-dispatch-change.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAEjE,eAAe,YAAY,CAAC;IAC1B,WAAW,EAAE,yDAAyD;IACtE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;KAC/C,CAAC;IACF,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,cAAc,CAAC,EAAE,CAAC;CAC1C,CAAC,CAAC","sourcesContent":["import { defineAction } from \"@agent-native/core/action\";\nimport { z } from \"zod\";\n\nimport { approveRequest } from \"../server/lib/dispatch-store.js\";\n\nexport default defineAction({\n description: \"Approve a pending dispatch change request and apply it.\",\n schema: z.object({\n id: z.string().describe(\"Approval request id\"),\n }),\n run: async ({ id }) => approveRequest(id),\n});\n"]}
|
|
1
|
+
{"version":3,"file":"approve-dispatch-change.js","sourceRoot":"","sources":["../../src/actions/approve-dispatch-change.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAEjE,eAAe,YAAY,CAAC;IAC1B,WAAW,EAAE,yDAAyD;IACtE,SAAS,EAAE,sBAAsB;IACjC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;KAC/C,CAAC;IACF,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,cAAc,CAAC,EAAE,CAAC;CAC1C,CAAC,CAAC","sourcesContent":["import { defineAction } from \"@agent-native/core/action\";\nimport { z } from \"zod\";\n\nimport { authorizeDispatchAdmin } from \"../server/lib/app-roles.js\";\nimport { approveRequest } from \"../server/lib/dispatch-store.js\";\n\nexport default defineAction({\n description: \"Approve a pending dispatch change request and apply it.\",\n authorize: authorizeDispatchAdmin,\n schema: z.object({\n id: z.string().describe(\"Approval request id\"),\n }),\n run: async ({ id }) => approveRequest(id),\n});\n"]}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { defineAction } from "@agent-native/core/action";
|
|
2
2
|
import { resolveSecret } from "@agent-native/core/server";
|
|
3
3
|
import { z } from "zod";
|
|
4
|
+
import { authorizeDispatchAdmin } from "../server/lib/app-roles.js";
|
|
4
5
|
import { recordAudit } from "../server/lib/dispatch-store.js";
|
|
5
6
|
const PYLON_API_BASE = process.env.PYLON_API_BASE_URL || "https://api.usepylon.com";
|
|
6
7
|
export default defineAction({
|
|
7
8
|
description: "Create a Pylon ticket. Use to escalate blockers from client meetings, route unmatched #customer-* posts that have no Slack channel, or open a follow-up that needs tracking. Requires PYLON_API_KEY in the Vault.",
|
|
9
|
+
authorize: authorizeDispatchAdmin,
|
|
8
10
|
schema: z.object({
|
|
9
11
|
title: z.string().min(1).describe("Short ticket title"),
|
|
10
12
|
bodyHtml: z
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-pylon-ticket.js","sourceRoot":"","sources":["../../src/actions/create-pylon-ticket.ts"],"names":[],"mappings":"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","sourcesContent":["import { defineAction } from \"@agent-native/core/action\";\nimport { resolveSecret } from \"@agent-native/core/server\";\nimport { z } from \"zod\";\n\nimport { recordAudit } from \"../server/lib/dispatch-store.js\";\n\nconst PYLON_API_BASE =\n process.env.PYLON_API_BASE_URL || \"https://api.usepylon.com\";\n\nexport default defineAction({\n description:\n \"Create a Pylon ticket. Use to escalate blockers from client meetings, route unmatched #customer-* posts that have no Slack channel, or open a follow-up that needs tracking. Requires PYLON_API_KEY in the Vault.\",\n schema: z.object({\n title: z.string().min(1).describe(\"Short ticket title\"),\n bodyHtml: z\n .string()\n .min(1)\n .describe(\"HTML body — Pylon renders this in the ticket\"),\n requesterEmail: z\n .string()\n .email()\n .optional()\n .describe(\"Email of the person the ticket is on behalf of\"),\n requesterName: z.string().optional(),\n accountId: z\n .string()\n .optional()\n .describe(\n \"Pylon account ID — provide either this OR requesterEmail to identify the subject\",\n ),\n priority: z.enum([\"urgent\", \"high\", \"medium\", \"low\"]).optional(),\n tags: z.array(z.string()).optional(),\n assigneeId: z.string().optional(),\n teamId: z.string().optional(),\n }),\n run: async (input) => {\n const apiKey = await resolveSecret(\"PYLON_API_KEY\");\n if (!apiKey) {\n throw new Error(\n \"PYLON_API_KEY is not set. Add it to the Dispatch Vault.\",\n );\n }\n if (!input.accountId && !input.requesterEmail) {\n throw new Error(\n \"Pylon requires either accountId or requesterEmail to identify the ticket subject.\",\n );\n }\n\n const payload: Record<string, unknown> = {\n title: input.title,\n body_html: input.bodyHtml,\n };\n if (input.accountId) payload.account_id = input.accountId;\n if (input.requesterEmail) payload.requester_email = input.requesterEmail;\n if (input.requesterName) payload.requester_name = input.requesterName;\n if (input.priority) payload.priority = input.priority;\n if (input.tags?.length) payload.tags = input.tags;\n if (input.assigneeId) payload.assignee_id = input.assigneeId;\n if (input.teamId) payload.team_id = input.teamId;\n\n const res = await fetch(`${PYLON_API_BASE}/issues`, {\n method: \"POST\",\n headers: {\n Authorization: `Bearer ${apiKey}`,\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(payload),\n });\n\n if (!res.ok) {\n const text = await res.text().catch(() => \"\");\n throw new Error(\n `Pylon ticket creation failed (HTTP ${res.status})${text ? `: ${text.slice(0, 500)}` : \"\"}`,\n );\n }\n\n const data = (await res.json().catch(() => null)) as Record<\n string,\n unknown\n > | null;\n const issue =\n data && typeof data === \"object\" && \"issue\" in data\n ? ((data as { issue?: Record<string, unknown> }).issue ?? {})\n : (data ?? {});\n const ticketId =\n issue && typeof (issue as { id?: unknown }).id === \"string\"\n ? (issue as { id: string }).id\n : \"\";\n\n await recordAudit({\n action: \"pylon.ticket.created\",\n targetType: \"pylon-ticket\",\n targetId: ticketId || null,\n summary: `Created Pylon ticket: ${input.title}`,\n metadata: {\n title: input.title,\n priority: input.priority,\n tags: input.tags,\n accountId: input.accountId,\n requesterEmail: input.requesterEmail,\n ticketId,\n },\n });\n\n return {\n ok: true as const,\n ticketId,\n ticket: issue,\n };\n },\n});\n"]}
|
|
1
|
+
{"version":3,"file":"create-pylon-ticket.js","sourceRoot":"","sources":["../../src/actions/create-pylon-ticket.ts"],"names":[],"mappings":"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","sourcesContent":["import { defineAction } from \"@agent-native/core/action\";\nimport { resolveSecret } from \"@agent-native/core/server\";\nimport { z } from \"zod\";\n\nimport { authorizeDispatchAdmin } from \"../server/lib/app-roles.js\";\nimport { recordAudit } from \"../server/lib/dispatch-store.js\";\n\nconst PYLON_API_BASE =\n process.env.PYLON_API_BASE_URL || \"https://api.usepylon.com\";\n\nexport default defineAction({\n description:\n \"Create a Pylon ticket. Use to escalate blockers from client meetings, route unmatched #customer-* posts that have no Slack channel, or open a follow-up that needs tracking. Requires PYLON_API_KEY in the Vault.\",\n authorize: authorizeDispatchAdmin,\n schema: z.object({\n title: z.string().min(1).describe(\"Short ticket title\"),\n bodyHtml: z\n .string()\n .min(1)\n .describe(\"HTML body — Pylon renders this in the ticket\"),\n requesterEmail: z\n .string()\n .email()\n .optional()\n .describe(\"Email of the person the ticket is on behalf of\"),\n requesterName: z.string().optional(),\n accountId: z\n .string()\n .optional()\n .describe(\n \"Pylon account ID — provide either this OR requesterEmail to identify the subject\",\n ),\n priority: z.enum([\"urgent\", \"high\", \"medium\", \"low\"]).optional(),\n tags: z.array(z.string()).optional(),\n assigneeId: z.string().optional(),\n teamId: z.string().optional(),\n }),\n run: async (input) => {\n const apiKey = await resolveSecret(\"PYLON_API_KEY\");\n if (!apiKey) {\n throw new Error(\n \"PYLON_API_KEY is not set. Add it to the Dispatch Vault.\",\n );\n }\n if (!input.accountId && !input.requesterEmail) {\n throw new Error(\n \"Pylon requires either accountId or requesterEmail to identify the ticket subject.\",\n );\n }\n\n const payload: Record<string, unknown> = {\n title: input.title,\n body_html: input.bodyHtml,\n };\n if (input.accountId) payload.account_id = input.accountId;\n if (input.requesterEmail) payload.requester_email = input.requesterEmail;\n if (input.requesterName) payload.requester_name = input.requesterName;\n if (input.priority) payload.priority = input.priority;\n if (input.tags?.length) payload.tags = input.tags;\n if (input.assigneeId) payload.assignee_id = input.assigneeId;\n if (input.teamId) payload.team_id = input.teamId;\n\n const res = await fetch(`${PYLON_API_BASE}/issues`, {\n method: \"POST\",\n headers: {\n Authorization: `Bearer ${apiKey}`,\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(payload),\n });\n\n if (!res.ok) {\n const text = await res.text().catch(() => \"\");\n throw new Error(\n `Pylon ticket creation failed (HTTP ${res.status})${text ? `: ${text.slice(0, 500)}` : \"\"}`,\n );\n }\n\n const data = (await res.json().catch(() => null)) as Record<\n string,\n unknown\n > | null;\n const issue =\n data && typeof data === \"object\" && \"issue\" in data\n ? ((data as { issue?: Record<string, unknown> }).issue ?? {})\n : (data ?? {});\n const ticketId =\n issue && typeof (issue as { id?: unknown }).id === \"string\"\n ? (issue as { id: string }).id\n : \"\";\n\n await recordAudit({\n action: \"pylon.ticket.created\",\n targetType: \"pylon-ticket\",\n targetId: ticketId || null,\n summary: `Created Pylon ticket: ${input.title}`,\n metadata: {\n title: input.title,\n priority: input.priority,\n tags: input.tags,\n accountId: input.accountId,\n requesterEmail: input.requesterEmail,\n ticketId,\n },\n });\n\n return {\n ok: true as const,\n ticketId,\n ticket: issue,\n };\n },\n});\n"]}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { defineAction } from "@agent-native/core/action";
|
|
2
2
|
import { z } from "zod";
|
|
3
|
+
import { authorizeDispatchAdmin } from "../server/lib/app-roles.js";
|
|
3
4
|
import { createResourceGrant } from "../server/lib/workspace-resources-store.js";
|
|
4
5
|
export default defineAction({
|
|
5
6
|
description: "Grant an app access to a workspace resource (skill, instruction, agent, knowledge pack, or MCP server). Admin only.",
|
|
7
|
+
authorize: authorizeDispatchAdmin,
|
|
6
8
|
schema: z.object({
|
|
7
9
|
resourceId: z.string().describe("Workspace resource ID"),
|
|
8
10
|
appId: z
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-workspace-resource-grant.js","sourceRoot":"","sources":["../../src/actions/create-workspace-resource-grant.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAC;AAEjF,eAAe,YAAY,CAAC;IAC1B,WAAW,EACT,qHAAqH;IACvH,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;QACxD,KAAK,EAAE,CAAC;aACL,MAAM,EAAE;aACR,QAAQ,CAAC,iDAAiD,CAAC;KAC/D,CAAC;IACF,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC;CACtE,CAAC,CAAC","sourcesContent":["import { defineAction } from \"@agent-native/core/action\";\nimport { z } from \"zod\";\n\nimport { createResourceGrant } from \"../server/lib/workspace-resources-store.js\";\n\nexport default defineAction({\n description:\n \"Grant an app access to a workspace resource (skill, instruction, agent, knowledge pack, or MCP server). Admin only.\",\n schema: z.object({\n resourceId: z.string().describe(\"Workspace resource ID\"),\n appId: z\n .string()\n .describe(\"App ID to grant access to, e.g. mail, analytics\"),\n }),\n run: async (args) => createResourceGrant(args.resourceId, args.appId),\n});\n"]}
|
|
1
|
+
{"version":3,"file":"create-workspace-resource-grant.js","sourceRoot":"","sources":["../../src/actions/create-workspace-resource-grant.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4CAA4C,CAAC;AAEjF,eAAe,YAAY,CAAC;IAC1B,WAAW,EACT,qHAAqH;IACvH,SAAS,EAAE,sBAAsB;IACjC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;QACxD,KAAK,EAAE,CAAC;aACL,MAAM,EAAE;aACR,QAAQ,CAAC,iDAAiD,CAAC;KAC/D,CAAC;IACF,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC;CACtE,CAAC,CAAC","sourcesContent":["import { defineAction } from \"@agent-native/core/action\";\nimport { z } from \"zod\";\n\nimport { authorizeDispatchAdmin } from \"../server/lib/app-roles.js\";\nimport { createResourceGrant } from \"../server/lib/workspace-resources-store.js\";\n\nexport default defineAction({\n description:\n \"Grant an app access to a workspace resource (skill, instruction, agent, knowledge pack, or MCP server). Admin only.\",\n authorize: authorizeDispatchAdmin,\n schema: z.object({\n resourceId: z.string().describe(\"Workspace resource ID\"),\n appId: z\n .string()\n .describe(\"App ID to grant access to, e.g. mail, analytics\"),\n }),\n run: async (args) => createResourceGrant(args.resourceId, args.appId),\n});\n"]}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { defineAction } from "@agent-native/core/action";
|
|
2
2
|
import { z } from "zod";
|
|
3
|
+
import { authorizeDispatchAdmin } from "../server/lib/app-roles.js";
|
|
3
4
|
import { createWorkspaceResource } from "../server/lib/workspace-resources-store.js";
|
|
4
5
|
export default defineAction({
|
|
5
6
|
description: 'Create a workspace-wide skill, instruction, agent profile, reference resource, or MCP server. Set scope to "all" for runtime inheritance by every app, or "selected" to grant per-app. When Dispatch approval policy is enabled, All-app creates queue an approval request before taking effect.',
|
|
7
|
+
authorize: authorizeDispatchAdmin,
|
|
6
8
|
schema: z.object({
|
|
7
9
|
kind: z
|
|
8
10
|
.enum([
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-workspace-resource.js","sourceRoot":"","sources":["../../src/actions/create-workspace-resource.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,uBAAuB,EAAE,MAAM,4CAA4C,CAAC;AAErF,eAAe,YAAY,CAAC;IAC1B,WAAW,EACT,kSAAkS;IACpS,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,IAAI,EAAE,CAAC;aACJ,IAAI,CAAC;YACJ,OAAO;YACP,aAAa;YACb,OAAO;YACP,YAAY;YACZ,WAAW;YACX,YAAY;SACb,CAAC;aACD,QAAQ,CACP,gFAAgF,CACjF;QACH,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;QAChD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QAChE,IAAI,EAAE,CAAC;aACJ,MAAM,EAAE;aACR,QAAQ,CACP,iRAAiR,CAClR;QACH,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;QACxE,KAAK,EAAE,CAAC;aACL,IAAI,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;aACzB,QAAQ,CACP,wFAAwF,CACzF;KACJ,CAAC;IACF,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,uBAAuB,CAAC,IAAI,CAAC;CACnD,CAAC,CAAC","sourcesContent":["import { defineAction } from \"@agent-native/core/action\";\nimport { z } from \"zod\";\n\nimport { createWorkspaceResource } from \"../server/lib/workspace-resources-store.js\";\n\nexport default defineAction({\n description:\n 'Create a workspace-wide skill, instruction, agent profile, reference resource, or MCP server. Set scope to \"all\" for runtime inheritance by every app, or \"selected\" to grant per-app. When Dispatch approval policy is enabled, All-app creates queue an approval request before taking effect.',\n schema: z.object({\n kind: z\n .enum([\n \"skill\",\n \"instruction\",\n \"agent\",\n \"agent-file\",\n \"knowledge\",\n \"mcp-server\",\n ])\n .describe(\n \"Resource kind: skill, instruction, agent, agent-file, knowledge, or mcp-server\",\n ),\n name: z.string().describe(\"Human-readable name\"),\n description: z.string().optional().describe(\"Short description\"),\n path: z\n .string()\n .describe(\n 'Resource path in target apps. Use \"skills/<name>/SKILL.md\" for skills, \"AGENTS.md\" or \"instructions/<name>.md\" for always-on guardrails, \"context/<name>.md\" for reference resources, \"agents/<name>.md\" for custom agents, and \"mcp-servers/<name>.json\" for HTTP MCP servers.',\n ),\n content: z.string().describe(\"Full resource content (markdown or JSON)\"),\n scope: z\n .enum([\"all\", \"selected\"])\n .describe(\n '\"all\" = inherited by every app at runtime, \"selected\" = only apps with explicit grants',\n ),\n }),\n run: async (args) => createWorkspaceResource(args),\n});\n"]}
|
|
1
|
+
{"version":3,"file":"create-workspace-resource.js","sourceRoot":"","sources":["../../src/actions/create-workspace-resource.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,uBAAuB,EAAE,MAAM,4CAA4C,CAAC;AAErF,eAAe,YAAY,CAAC;IAC1B,WAAW,EACT,kSAAkS;IACpS,SAAS,EAAE,sBAAsB;IACjC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,IAAI,EAAE,CAAC;aACJ,IAAI,CAAC;YACJ,OAAO;YACP,aAAa;YACb,OAAO;YACP,YAAY;YACZ,WAAW;YACX,YAAY;SACb,CAAC;aACD,QAAQ,CACP,gFAAgF,CACjF;QACH,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;QAChD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;QAChE,IAAI,EAAE,CAAC;aACJ,MAAM,EAAE;aACR,QAAQ,CACP,iRAAiR,CAClR;QACH,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;QACxE,KAAK,EAAE,CAAC;aACL,IAAI,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;aACzB,QAAQ,CACP,wFAAwF,CACzF;KACJ,CAAC;IACF,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,uBAAuB,CAAC,IAAI,CAAC;CACnD,CAAC,CAAC","sourcesContent":["import { defineAction } from \"@agent-native/core/action\";\nimport { z } from \"zod\";\n\nimport { authorizeDispatchAdmin } from \"../server/lib/app-roles.js\";\nimport { createWorkspaceResource } from \"../server/lib/workspace-resources-store.js\";\n\nexport default defineAction({\n description:\n 'Create a workspace-wide skill, instruction, agent profile, reference resource, or MCP server. Set scope to \"all\" for runtime inheritance by every app, or \"selected\" to grant per-app. When Dispatch approval policy is enabled, All-app creates queue an approval request before taking effect.',\n authorize: authorizeDispatchAdmin,\n schema: z.object({\n kind: z\n .enum([\n \"skill\",\n \"instruction\",\n \"agent\",\n \"agent-file\",\n \"knowledge\",\n \"mcp-server\",\n ])\n .describe(\n \"Resource kind: skill, instruction, agent, agent-file, knowledge, or mcp-server\",\n ),\n name: z.string().describe(\"Human-readable name\"),\n description: z.string().optional().describe(\"Short description\"),\n path: z\n .string()\n .describe(\n 'Resource path in target apps. Use \"skills/<name>/SKILL.md\" for skills, \"AGENTS.md\" or \"instructions/<name>.md\" for always-on guardrails, \"context/<name>.md\" for reference resources, \"agents/<name>.md\" for custom agents, and \"mcp-servers/<name>.json\" for HTTP MCP servers.',\n ),\n content: z.string().describe(\"Full resource content (markdown or JSON)\"),\n scope: z\n .enum([\"all\", \"selected\"])\n .describe(\n '\"all\" = inherited by every app at runtime, \"selected\" = only apps with explicit grants',\n ),\n }),\n run: async (args) => createWorkspaceResource(args),\n});\n"]}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { defineAction } from "@agent-native/core/action";
|
|
2
2
|
import { z } from "zod";
|
|
3
|
+
import { authorizeDispatchAdmin } from "../server/lib/app-roles.js";
|
|
3
4
|
import { deleteDestination } from "../server/lib/dispatch-store.js";
|
|
4
5
|
export default defineAction({
|
|
5
6
|
description: "Delete a saved dispatch destination.",
|
|
7
|
+
authorize: authorizeDispatchAdmin,
|
|
6
8
|
schema: z.object({
|
|
7
9
|
id: z.string().describe("Destination id"),
|
|
8
10
|
}),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delete-destination.js","sourceRoot":"","sources":["../../src/actions/delete-destination.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAEpE,eAAe,YAAY,CAAC;IAC1B,WAAW,EAAE,sCAAsC;IACnD,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;KAC1C,CAAC;IACF,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,CAAC;CAC7C,CAAC,CAAC","sourcesContent":["import { defineAction } from \"@agent-native/core/action\";\nimport { z } from \"zod\";\n\nimport { deleteDestination } from \"../server/lib/dispatch-store.js\";\n\nexport default defineAction({\n description: \"Delete a saved dispatch destination.\",\n schema: z.object({\n id: z.string().describe(\"Destination id\"),\n }),\n run: async ({ id }) => deleteDestination(id),\n});\n"]}
|
|
1
|
+
{"version":3,"file":"delete-destination.js","sourceRoot":"","sources":["../../src/actions/delete-destination.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,iBAAiB,EAAE,MAAM,iCAAiC,CAAC;AAEpE,eAAe,YAAY,CAAC;IAC1B,WAAW,EAAE,sCAAsC;IACnD,SAAS,EAAE,sBAAsB;IACjC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gBAAgB,CAAC;KAC1C,CAAC;IACF,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,CAAC;CAC7C,CAAC,CAAC","sourcesContent":["import { defineAction } from \"@agent-native/core/action\";\nimport { z } from \"zod\";\n\nimport { authorizeDispatchAdmin } from \"../server/lib/app-roles.js\";\nimport { deleteDestination } from \"../server/lib/dispatch-store.js\";\n\nexport default defineAction({\n description: \"Delete a saved dispatch destination.\",\n authorize: authorizeDispatchAdmin,\n schema: z.object({\n id: z.string().describe(\"Destination id\"),\n }),\n run: async ({ id }) => deleteDestination(id),\n});\n"]}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { defineAction } from "@agent-native/core/action";
|
|
2
2
|
import { z } from "zod";
|
|
3
|
+
import { authorizeDispatchAdmin } from "../server/lib/app-roles.js";
|
|
3
4
|
import { deleteWorkspaceResource } from "../server/lib/workspace-resources-store.js";
|
|
4
5
|
export default defineAction({
|
|
5
6
|
description: "Delete a workspace resource and revoke all its grants. When Dispatch approval policy is enabled, deleting an All-app resource queues an approval request before taking effect.",
|
|
7
|
+
authorize: authorizeDispatchAdmin,
|
|
6
8
|
schema: z.object({
|
|
7
9
|
id: z.string().describe("Resource ID to delete"),
|
|
8
10
|
}),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delete-workspace-resource.js","sourceRoot":"","sources":["../../src/actions/delete-workspace-resource.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,uBAAuB,EAAE,MAAM,4CAA4C,CAAC;AAErF,eAAe,YAAY,CAAC;IAC1B,WAAW,EACT,gLAAgL;IAClL,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;KACjD,CAAC;IACF,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,uBAAuB,CAAC,IAAI,CAAC,EAAE,CAAC;CACtD,CAAC,CAAC","sourcesContent":["import { defineAction } from \"@agent-native/core/action\";\nimport { z } from \"zod\";\n\nimport { deleteWorkspaceResource } from \"../server/lib/workspace-resources-store.js\";\n\nexport default defineAction({\n description:\n \"Delete a workspace resource and revoke all its grants. When Dispatch approval policy is enabled, deleting an All-app resource queues an approval request before taking effect.\",\n schema: z.object({\n id: z.string().describe(\"Resource ID to delete\"),\n }),\n run: async (args) => deleteWorkspaceResource(args.id),\n});\n"]}
|
|
1
|
+
{"version":3,"file":"delete-workspace-resource.js","sourceRoot":"","sources":["../../src/actions/delete-workspace-resource.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,uBAAuB,EAAE,MAAM,4CAA4C,CAAC;AAErF,eAAe,YAAY,CAAC;IAC1B,WAAW,EACT,gLAAgL;IAClL,SAAS,EAAE,sBAAsB;IACjC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;KACjD,CAAC;IACF,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,uBAAuB,CAAC,IAAI,CAAC,EAAE,CAAC;CACtD,CAAC,CAAC","sourcesContent":["import { defineAction } from \"@agent-native/core/action\";\nimport { z } from \"zod\";\n\nimport { authorizeDispatchAdmin } from \"../server/lib/app-roles.js\";\nimport { deleteWorkspaceResource } from \"../server/lib/workspace-resources-store.js\";\n\nexport default defineAction({\n description:\n \"Delete a workspace resource and revoke all its grants. When Dispatch approval policy is enabled, deleting an All-app resource queues an approval request before taking effect.\",\n authorize: authorizeDispatchAdmin,\n schema: z.object({\n id: z.string().describe(\"Resource ID to delete\"),\n }),\n run: async (args) => deleteWorkspaceResource(args.id),\n});\n"]}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { defineAction } from "@agent-native/core/action";
|
|
2
2
|
import { z } from "zod";
|
|
3
|
+
import { authorizeDispatchAdmin } from "../server/lib/app-roles.js";
|
|
3
4
|
import { ensureDreamJob } from "../server/lib/dreams-store.js";
|
|
4
5
|
export default defineAction({
|
|
5
6
|
description: "Create or update the personal recurring Dispatch dream job resource at jobs/dispatch-dream.md.",
|
|
7
|
+
authorize: authorizeDispatchAdmin,
|
|
6
8
|
schema: z.object({
|
|
7
9
|
schedule: z
|
|
8
10
|
.string()
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ensure-dream-job.js","sourceRoot":"","sources":["../../src/actions/ensure-dream-job.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE/D,eAAe,YAAY,CAAC;IAC1B,WAAW,EACT,gGAAgG;IAClG,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,QAAQ,EAAE,CAAC;aACR,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CACP,qEAAqE,CACtE;QACH,QAAQ,EAAE,CAAC;aACR,MAAM,EAAE;aACR,OAAO,CAAC,KAAK,CAAC;aACd,QAAQ,CAAC,sDAAsD,CAAC;QACnE,SAAS,EAAE,CAAC;aACT,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;aACxB,QAAQ,EAAE;aACV,QAAQ,CAAC,0DAA0D,CAAC;QACvE,UAAU,EAAE,CAAC,CAAC,MAAM;aACjB,OAAO,EAAE;aACT,OAAO,CAAC,IAAI,CAAC;aACb,QAAQ,CAAC,yDAAyD,CAAC;QACtE,KAAK,EAAE,CAAC;aACL,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,uDAAuD,CAAC;QACpE,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;QACxD,eAAe,EAAE,CAAC,CAAC,MAAM;aACtB,MAAM,EAAE;aACR,GAAG,EAAE;aACL,GAAG,CAAC,IAAI,CAAC;aACT,GAAG,CAAC,KAAK,CAAC;aACV,OAAO,CAAC,KAAK,CAAC;aACd,QAAQ,CAAC,qCAAqC,CAAC;QAClD,iBAAiB,EAAE,CAAC,CAAC,MAAM;aACxB,MAAM,EAAE;aACR,GAAG,EAAE;aACL,GAAG,CAAC,CAAC,CAAC;aACN,GAAG,CAAC,CAAC,CAAC;aACN,OAAO,CAAC,CAAC,CAAC;aACV,QAAQ,CAAC,mCAAmC,CAAC;QAChD,oBAAoB,EAAE,CAAC,CAAC,MAAM;aAC3B,MAAM,EAAE;aACR,GAAG,EAAE;aACL,GAAG,CAAC,CAAC,CAAC;aACN,GAAG,CAAC,IAAI,CAAC;aACT,OAAO,CAAC,GAAG,CAAC;aACZ,QAAQ,CAAC,qDAAqD,CAAC;QAClE,iBAAiB,EAAE,CAAC,CAAC,MAAM;aACxB,MAAM,EAAE;aACR,GAAG,EAAE;aACL,GAAG,CAAC,CAAC,CAAC;aACN,GAAG,CAAC,EAAE,CAAC;aACP,OAAO,CAAC,CAAC,CAAC;aACV,QAAQ,CAAC,yDAAyD,CAAC;QACtE,eAAe,EAAE,CAAC,CAAC,MAAM;aACtB,MAAM,EAAE;aACR,GAAG,EAAE;aACL,GAAG,CAAC,IAAI,CAAC;aACT,GAAG,CAAC,KAAK,CAAC;aACV,OAAO,CAAC,IAAI,CAAC;aACb,QAAQ,CAAC,2CAA2C,CAAC;QACxD,iBAAiB,EAAE,CAAC,CAAC,MAAM;aACxB,MAAM,EAAE;aACR,GAAG,EAAE;aACL,GAAG,CAAC,CAAC,CAAC;aACN,GAAG,CAAC,EAAE,CAAC;aACP,OAAO,CAAC,CAAC,CAAC;aACV,QAAQ,CAAC,4DAA4D,CAAC;KAC1E,CAAC;IACF,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC;CAC5C,CAAC,CAAC","sourcesContent":["import { defineAction } from \"@agent-native/core/action\";\nimport { z } from \"zod\";\n\nimport { ensureDreamJob } from \"../server/lib/dreams-store.js\";\n\nexport default defineAction({\n description:\n \"Create or update the personal recurring Dispatch dream job resource at jobs/dispatch-dream.md.\",\n schema: z.object({\n schedule: z\n .string()\n .optional()\n .describe(\n 'Optional five-field cron schedule. Defaults to weekly: \"0 9 * * 1\".',\n ),\n sourceId: z\n .string()\n .default(\"all\")\n .describe(\"Thread debug source id for the recurring dream pass.\"),\n sourceIds: z\n .array(z.string().min(1))\n .optional()\n .describe(\"Optional explicit source ids for recurring dream passes.\"),\n allSources: z.coerce\n .boolean()\n .default(true)\n .describe(\"Scan every connected source for recurring dream passes.\"),\n query: z\n .string()\n .optional()\n .describe(\"Optional search term to focus recurring dream passes.\"),\n limit: z.coerce.number().int().min(1).max(50).default(8),\n sourceTimeoutMs: z.coerce\n .number()\n .int()\n .min(1000)\n .max(60000)\n .default(30000)\n .describe(\"Per-source timeout in milliseconds.\"),\n sourceConcurrency: z.coerce\n .number()\n .int()\n .min(1)\n .max(8)\n .default(2)\n .describe(\"How many sources to scan at once.\"),\n sourceStartStaggerMs: z.coerce\n .number()\n .int()\n .min(0)\n .max(5000)\n .default(250)\n .describe(\"Delay between source starts within each scan batch.\"),\n threadConcurrency: z.coerce\n .number()\n .int()\n .min(1)\n .max(10)\n .default(3)\n .describe(\"How many threads to inspect at once within each source.\"),\n threadTimeoutMs: z.coerce\n .number()\n .int()\n .min(1000)\n .max(30000)\n .default(8000)\n .describe(\"Per-thread debug timeout in milliseconds.\"),\n minCandidateCount: z.coerce\n .number()\n .int()\n .min(0)\n .max(50)\n .default(1)\n .describe(\"Skip recurring report creation below this candidate count.\"),\n }),\n run: async (input) => ensureDreamJob(input),\n});\n"]}
|
|
1
|
+
{"version":3,"file":"ensure-dream-job.js","sourceRoot":"","sources":["../../src/actions/ensure-dream-job.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAE/D,eAAe,YAAY,CAAC;IAC1B,WAAW,EACT,gGAAgG;IAClG,SAAS,EAAE,sBAAsB;IACjC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,QAAQ,EAAE,CAAC;aACR,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CACP,qEAAqE,CACtE;QACH,QAAQ,EAAE,CAAC;aACR,MAAM,EAAE;aACR,OAAO,CAAC,KAAK,CAAC;aACd,QAAQ,CAAC,sDAAsD,CAAC;QACnE,SAAS,EAAE,CAAC;aACT,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;aACxB,QAAQ,EAAE;aACV,QAAQ,CAAC,0DAA0D,CAAC;QACvE,UAAU,EAAE,CAAC,CAAC,MAAM;aACjB,OAAO,EAAE;aACT,OAAO,CAAC,IAAI,CAAC;aACb,QAAQ,CAAC,yDAAyD,CAAC;QACtE,KAAK,EAAE,CAAC;aACL,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,uDAAuD,CAAC;QACpE,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;QACxD,eAAe,EAAE,CAAC,CAAC,MAAM;aACtB,MAAM,EAAE;aACR,GAAG,EAAE;aACL,GAAG,CAAC,IAAI,CAAC;aACT,GAAG,CAAC,KAAK,CAAC;aACV,OAAO,CAAC,KAAK,CAAC;aACd,QAAQ,CAAC,qCAAqC,CAAC;QAClD,iBAAiB,EAAE,CAAC,CAAC,MAAM;aACxB,MAAM,EAAE;aACR,GAAG,EAAE;aACL,GAAG,CAAC,CAAC,CAAC;aACN,GAAG,CAAC,CAAC,CAAC;aACN,OAAO,CAAC,CAAC,CAAC;aACV,QAAQ,CAAC,mCAAmC,CAAC;QAChD,oBAAoB,EAAE,CAAC,CAAC,MAAM;aAC3B,MAAM,EAAE;aACR,GAAG,EAAE;aACL,GAAG,CAAC,CAAC,CAAC;aACN,GAAG,CAAC,IAAI,CAAC;aACT,OAAO,CAAC,GAAG,CAAC;aACZ,QAAQ,CAAC,qDAAqD,CAAC;QAClE,iBAAiB,EAAE,CAAC,CAAC,MAAM;aACxB,MAAM,EAAE;aACR,GAAG,EAAE;aACL,GAAG,CAAC,CAAC,CAAC;aACN,GAAG,CAAC,EAAE,CAAC;aACP,OAAO,CAAC,CAAC,CAAC;aACV,QAAQ,CAAC,yDAAyD,CAAC;QACtE,eAAe,EAAE,CAAC,CAAC,MAAM;aACtB,MAAM,EAAE;aACR,GAAG,EAAE;aACL,GAAG,CAAC,IAAI,CAAC;aACT,GAAG,CAAC,KAAK,CAAC;aACV,OAAO,CAAC,IAAI,CAAC;aACb,QAAQ,CAAC,2CAA2C,CAAC;QACxD,iBAAiB,EAAE,CAAC,CAAC,MAAM;aACxB,MAAM,EAAE;aACR,GAAG,EAAE;aACL,GAAG,CAAC,CAAC,CAAC;aACN,GAAG,CAAC,EAAE,CAAC;aACP,OAAO,CAAC,CAAC,CAAC;aACV,QAAQ,CAAC,4DAA4D,CAAC;KAC1E,CAAC;IACF,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,cAAc,CAAC,KAAK,CAAC;CAC5C,CAAC,CAAC","sourcesContent":["import { defineAction } from \"@agent-native/core/action\";\nimport { z } from \"zod\";\n\nimport { authorizeDispatchAdmin } from \"../server/lib/app-roles.js\";\nimport { ensureDreamJob } from \"../server/lib/dreams-store.js\";\n\nexport default defineAction({\n description:\n \"Create or update the personal recurring Dispatch dream job resource at jobs/dispatch-dream.md.\",\n authorize: authorizeDispatchAdmin,\n schema: z.object({\n schedule: z\n .string()\n .optional()\n .describe(\n 'Optional five-field cron schedule. Defaults to weekly: \"0 9 * * 1\".',\n ),\n sourceId: z\n .string()\n .default(\"all\")\n .describe(\"Thread debug source id for the recurring dream pass.\"),\n sourceIds: z\n .array(z.string().min(1))\n .optional()\n .describe(\"Optional explicit source ids for recurring dream passes.\"),\n allSources: z.coerce\n .boolean()\n .default(true)\n .describe(\"Scan every connected source for recurring dream passes.\"),\n query: z\n .string()\n .optional()\n .describe(\"Optional search term to focus recurring dream passes.\"),\n limit: z.coerce.number().int().min(1).max(50).default(8),\n sourceTimeoutMs: z.coerce\n .number()\n .int()\n .min(1000)\n .max(60000)\n .default(30000)\n .describe(\"Per-source timeout in milliseconds.\"),\n sourceConcurrency: z.coerce\n .number()\n .int()\n .min(1)\n .max(8)\n .default(2)\n .describe(\"How many sources to scan at once.\"),\n sourceStartStaggerMs: z.coerce\n .number()\n .int()\n .min(0)\n .max(5000)\n .default(250)\n .describe(\"Delay between source starts within each scan batch.\"),\n threadConcurrency: z.coerce\n .number()\n .int()\n .min(1)\n .max(10)\n .default(3)\n .describe(\"How many threads to inspect at once within each source.\"),\n threadTimeoutMs: z.coerce\n .number()\n .int()\n .min(1000)\n .max(30000)\n .default(8000)\n .describe(\"Per-thread debug timeout in milliseconds.\"),\n minCandidateCount: z.coerce\n .number()\n .int()\n .min(0)\n .max(50)\n .default(1)\n .describe(\"Skip recurring report creation below this candidate count.\"),\n }),\n run: async (input) => ensureDreamJob(input),\n});\n"]}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { defineAction } from "@agent-native/core/action";
|
|
2
2
|
import { z } from "zod";
|
|
3
|
+
import { authorizeDispatchAdmin } from "../server/lib/app-roles.js";
|
|
3
4
|
import { grantWorkspaceResourcesToApp } from "../server/lib/workspace-resources-store.js";
|
|
4
5
|
export default defineAction({
|
|
5
6
|
description: "Grant several selected workspace resources, knowledge packs, or MCP servers to an app, skipping existing active grants.",
|
|
7
|
+
authorize: authorizeDispatchAdmin,
|
|
6
8
|
schema: z.object({
|
|
7
9
|
appId: z.string().describe("App ID receiving the resources"),
|
|
8
10
|
resourceIds: z
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"grant-workspace-resources-to-app.js","sourceRoot":"","sources":["../../src/actions/grant-workspace-resources-to-app.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,4BAA4B,EAAE,MAAM,4CAA4C,CAAC;AAE1F,eAAe,YAAY,CAAC;IAC1B,WAAW,EACT,yHAAyH;IAC3H,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;QAC5D,WAAW,EAAE,CAAC;aACX,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;aACjB,GAAG,CAAC,GAAG,CAAC;aACR,QAAQ,CAAC,iCAAiC,CAAC;KAC/C,CAAC;IACF,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,4BAA4B,CAAC,IAAI,CAAC;CACxD,CAAC,CAAC","sourcesContent":["import { defineAction } from \"@agent-native/core/action\";\nimport { z } from \"zod\";\n\nimport { grantWorkspaceResourcesToApp } from \"../server/lib/workspace-resources-store.js\";\n\nexport default defineAction({\n description:\n \"Grant several selected workspace resources, knowledge packs, or MCP servers to an app, skipping existing active grants.\",\n schema: z.object({\n appId: z.string().describe(\"App ID receiving the resources\"),\n resourceIds: z\n .array(z.string())\n .max(100)\n .describe(\"Workspace resource IDs to grant\"),\n }),\n run: async (args) => grantWorkspaceResourcesToApp(args),\n});\n"]}
|
|
1
|
+
{"version":3,"file":"grant-workspace-resources-to-app.js","sourceRoot":"","sources":["../../src/actions/grant-workspace-resources-to-app.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,4BAA4B,EAAE,MAAM,4CAA4C,CAAC;AAE1F,eAAe,YAAY,CAAC;IAC1B,WAAW,EACT,yHAAyH;IAC3H,SAAS,EAAE,sBAAsB;IACjC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;QAC5D,WAAW,EAAE,CAAC;aACX,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;aACjB,GAAG,CAAC,GAAG,CAAC;aACR,QAAQ,CAAC,iCAAiC,CAAC;KAC/C,CAAC;IACF,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,4BAA4B,CAAC,IAAI,CAAC;CACxD,CAAC,CAAC","sourcesContent":["import { defineAction } from \"@agent-native/core/action\";\nimport { z } from \"zod\";\n\nimport { authorizeDispatchAdmin } from \"../server/lib/app-roles.js\";\nimport { grantWorkspaceResourcesToApp } from \"../server/lib/workspace-resources-store.js\";\n\nexport default defineAction({\n description:\n \"Grant several selected workspace resources, knowledge packs, or MCP servers to an app, skipping existing active grants.\",\n authorize: authorizeDispatchAdmin,\n schema: z.object({\n appId: z.string().describe(\"App ID receiving the resources\"),\n resourceIds: z\n .array(z.string())\n .max(100)\n .describe(\"Workspace resource IDs to grant\"),\n }),\n run: async (args) => grantWorkspaceResourcesToApp(args),\n});\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"import-agent-pack.d.ts","sourceRoot":"","sources":["../../src/actions/import-agent-pack.ts"],"names":[],"mappings":";;;;;;;
|
|
1
|
+
{"version":3,"file":"import-agent-pack.d.ts","sourceRoot":"","sources":["../../src/actions/import-agent-pack.ts"],"names":[],"mappings":";;;;;;;YA4GgB,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;YA4BJ,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;YAK3B,SAAS"}
|
|
@@ -4,6 +4,7 @@ import { z } from "zod";
|
|
|
4
4
|
import { AGENT_PACK_MAX_FILE_BYTES, AGENT_PACK_MAX_FILES, agentPackProfileContent, agentPackRoot, normalizeAgentPack, } from "../lib/agent-pack.js";
|
|
5
5
|
import { validateImportedAgentTools } from "../lib/simple-agent-profile.js";
|
|
6
6
|
import { applyAgentPackCreate } from "../server/lib/agent-pack-store.js";
|
|
7
|
+
import { authorizeDispatchAdmin } from "../server/lib/app-roles.js";
|
|
7
8
|
import { createApprovalRequest, getApprovalPolicy, } from "../server/lib/dispatch-store.js";
|
|
8
9
|
import { listWorkspaceResources, } from "../server/lib/workspace-resources-store.js";
|
|
9
10
|
const packFileSchema = z.object({
|
|
@@ -40,6 +41,7 @@ function availableToolNames(dispatchToolNames) {
|
|
|
40
41
|
}
|
|
41
42
|
export default defineAction({
|
|
42
43
|
description: "Import a folder-backed agent pack from Claude, Cowork, or another agent tool. The pack can include a Markdown/JSON profile, context, references, and skills. Credentials, hooks, shell commands, and local environment settings are never imported.",
|
|
44
|
+
authorize: authorizeDispatchAdmin,
|
|
43
45
|
schema,
|
|
44
46
|
run: async ({ files, scope }) => {
|
|
45
47
|
const normalized = normalizeAgentPack(files);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"import-agent-pack.js","sourceRoot":"","sources":["../../src/actions/import-agent-pack.ts"],"names":[],"mappings":"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","sourcesContent":["import crypto from \"node:crypto\";\n\nimport { defineAction } from \"@agent-native/core/action\";\nimport { z } from \"zod\";\n\nimport {\n AGENT_PACK_MAX_FILE_BYTES,\n AGENT_PACK_MAX_FILES,\n agentPackProfileContent,\n agentPackRoot,\n normalizeAgentPack,\n type AgentPackFileInput,\n} from \"../lib/agent-pack.js\";\nimport { validateImportedAgentTools } from \"../lib/simple-agent-profile.js\";\nimport { applyAgentPackCreate } from \"../server/lib/agent-pack-store.js\";\nimport {\n createApprovalRequest,\n getApprovalPolicy,\n} from \"../server/lib/dispatch-store.js\";\nimport {\n listWorkspaceResources,\n type WorkspaceResourceInput,\n} from \"../server/lib/workspace-resources-store.js\";\n\nconst packFileSchema = z.object({\n path: z.string().trim().min(1).max(240),\n content: z.string().max(AGENT_PACK_MAX_FILE_BYTES),\n});\n\nconst schema = z.object({\n files: z\n .array(packFileSchema)\n .min(1)\n .max(AGENT_PACK_MAX_FILES)\n .describe(\"Text files from an agent folder, including its profile\"),\n scope: z\n .enum([\"all\", \"selected\"])\n .default(\"all\")\n .describe(\"Make the pack available to all apps or selected apps\"),\n});\n\nfunction availableToolNames(dispatchToolNames: string[]): Set<string> {\n return new Set([\n ...dispatchToolNames,\n \"agent-teams\",\n \"bash\",\n \"call-agent\",\n \"db-query\",\n \"db-schema\",\n \"refresh-screen\",\n \"resources\",\n \"set-search-params\",\n \"set-url-path\",\n \"tool-search\",\n \"web-request\",\n \"web-search\",\n ]);\n}\n\nexport default defineAction({\n description:\n \"Import a folder-backed agent pack from Claude, Cowork, or another agent tool. The pack can include a Markdown/JSON profile, context, references, and skills. Credentials, hooks, shell commands, and local environment settings are never imported.\",\n schema,\n run: async ({ files, scope }) => {\n const normalized = normalizeAgentPack(files as AgentPackFileInput[]);\n const { dispatchActions } = await import(\"./index.js\");\n const toolValidation = validateImportedAgentTools(\n normalized.profile.tools,\n availableToolNames(Object.keys(dispatchActions)),\n );\n const warnings = [...normalized.warnings, ...toolValidation.warnings];\n const sourceHash = crypto\n .createHash(\"sha256\")\n .update(JSON.stringify(files))\n .digest(\"hex\");\n const profileContent = agentPackProfileContent({\n profile: normalized.profile,\n tools: toolValidation.tools,\n sourceHash,\n importedAt: new Date().toISOString(),\n });\n const root = agentPackRoot(normalized.profile.slug);\n const inputs: WorkspaceResourceInput[] = [\n {\n kind: \"agent\",\n name: normalized.profile.name,\n description: normalized.profile.description,\n path: `${root}.md`,\n content: profileContent,\n scope,\n },\n ...normalized.files.map((file) => ({\n kind: file.kind,\n name: file.name,\n description: file.description,\n path: `${root}/${file.path}`,\n content: file.content,\n scope,\n })),\n ];\n const existing = await listWorkspaceResources();\n const existingProfile = existing.find(\n (resource) => resource.path === `${root}.md`,\n );\n if (existingProfile?.content.includes(`source-hash: ${sourceHash}`)) {\n return {\n status: \"unchanged\" as const,\n resource: existingProfile,\n files: existing.filter((resource) =>\n resource.path.startsWith(`${root}/`),\n ),\n warnings,\n };\n }\n if (existingProfile) {\n throw new Error(\n `An agent already exists at ${root}. Rename the source before importing it.`,\n );\n }\n\n const policy = await getApprovalPolicy();\n if (scope === \"all\" && policy.enabled) {\n const approval = await createApprovalRequest({\n changeType: \"workspace-agent-pack.create\",\n targetType: \"workspace-agent-pack\",\n summary: `Import All-app agent pack \"${normalized.profile.name}\"`,\n payload: { inputs },\n beforeValue: null,\n afterValue: {\n name: normalized.profile.name,\n path: `${root}.md`,\n fileCount: inputs.length,\n },\n });\n return { status: \"pending-approval\" as const, approval, warnings };\n }\n\n const created = await applyAgentPackCreate(inputs);\n return {\n status: \"created\" as const,\n resource: created[0] ?? null,\n files: created.slice(1),\n warnings,\n };\n },\n});\n"]}
|
|
1
|
+
{"version":3,"file":"import-agent-pack.js","sourceRoot":"","sources":["../../src/actions/import-agent-pack.ts"],"names":[],"mappings":"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","sourcesContent":["import crypto from \"node:crypto\";\n\nimport { defineAction } from \"@agent-native/core/action\";\nimport { z } from \"zod\";\n\nimport {\n AGENT_PACK_MAX_FILE_BYTES,\n AGENT_PACK_MAX_FILES,\n agentPackProfileContent,\n agentPackRoot,\n normalizeAgentPack,\n type AgentPackFileInput,\n} from \"../lib/agent-pack.js\";\nimport { validateImportedAgentTools } from \"../lib/simple-agent-profile.js\";\nimport { applyAgentPackCreate } from \"../server/lib/agent-pack-store.js\";\nimport { authorizeDispatchAdmin } from \"../server/lib/app-roles.js\";\nimport {\n createApprovalRequest,\n getApprovalPolicy,\n} from \"../server/lib/dispatch-store.js\";\nimport {\n listWorkspaceResources,\n type WorkspaceResourceInput,\n} from \"../server/lib/workspace-resources-store.js\";\n\nconst packFileSchema = z.object({\n path: z.string().trim().min(1).max(240),\n content: z.string().max(AGENT_PACK_MAX_FILE_BYTES),\n});\n\nconst schema = z.object({\n files: z\n .array(packFileSchema)\n .min(1)\n .max(AGENT_PACK_MAX_FILES)\n .describe(\"Text files from an agent folder, including its profile\"),\n scope: z\n .enum([\"all\", \"selected\"])\n .default(\"all\")\n .describe(\"Make the pack available to all apps or selected apps\"),\n});\n\nfunction availableToolNames(dispatchToolNames: string[]): Set<string> {\n return new Set([\n ...dispatchToolNames,\n \"agent-teams\",\n \"bash\",\n \"call-agent\",\n \"db-query\",\n \"db-schema\",\n \"refresh-screen\",\n \"resources\",\n \"set-search-params\",\n \"set-url-path\",\n \"tool-search\",\n \"web-request\",\n \"web-search\",\n ]);\n}\n\nexport default defineAction({\n description:\n \"Import a folder-backed agent pack from Claude, Cowork, or another agent tool. The pack can include a Markdown/JSON profile, context, references, and skills. Credentials, hooks, shell commands, and local environment settings are never imported.\",\n authorize: authorizeDispatchAdmin,\n schema,\n run: async ({ files, scope }) => {\n const normalized = normalizeAgentPack(files as AgentPackFileInput[]);\n const { dispatchActions } = await import(\"./index.js\");\n const toolValidation = validateImportedAgentTools(\n normalized.profile.tools,\n availableToolNames(Object.keys(dispatchActions)),\n );\n const warnings = [...normalized.warnings, ...toolValidation.warnings];\n const sourceHash = crypto\n .createHash(\"sha256\")\n .update(JSON.stringify(files))\n .digest(\"hex\");\n const profileContent = agentPackProfileContent({\n profile: normalized.profile,\n tools: toolValidation.tools,\n sourceHash,\n importedAt: new Date().toISOString(),\n });\n const root = agentPackRoot(normalized.profile.slug);\n const inputs: WorkspaceResourceInput[] = [\n {\n kind: \"agent\",\n name: normalized.profile.name,\n description: normalized.profile.description,\n path: `${root}.md`,\n content: profileContent,\n scope,\n },\n ...normalized.files.map((file) => ({\n kind: file.kind,\n name: file.name,\n description: file.description,\n path: `${root}/${file.path}`,\n content: file.content,\n scope,\n })),\n ];\n const existing = await listWorkspaceResources();\n const existingProfile = existing.find(\n (resource) => resource.path === `${root}.md`,\n );\n if (existingProfile?.content.includes(`source-hash: ${sourceHash}`)) {\n return {\n status: \"unchanged\" as const,\n resource: existingProfile,\n files: existing.filter((resource) =>\n resource.path.startsWith(`${root}/`),\n ),\n warnings,\n };\n }\n if (existingProfile) {\n throw new Error(\n `An agent already exists at ${root}. Rename the source before importing it.`,\n );\n }\n\n const policy = await getApprovalPolicy();\n if (scope === \"all\" && policy.enabled) {\n const approval = await createApprovalRequest({\n changeType: \"workspace-agent-pack.create\",\n targetType: \"workspace-agent-pack\",\n summary: `Import All-app agent pack \"${normalized.profile.name}\"`,\n payload: { inputs },\n beforeValue: null,\n afterValue: {\n name: normalized.profile.name,\n path: `${root}.md`,\n fileCount: inputs.length,\n },\n });\n return { status: \"pending-approval\" as const, approval, warnings };\n }\n\n const created = await applyAgentPackCreate(inputs);\n return {\n status: \"created\" as const,\n resource: created[0] ?? null,\n files: created.slice(1),\n warnings,\n };\n },\n});\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"import-agent.d.ts","sourceRoot":"","sources":["../../src/actions/import-agent.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"import-agent.d.ts","sourceRoot":"","sources":["../../src/actions/import-agent.ts"],"names":[],"mappings":";;;;;YA4EkB,WAAW;;;;;;;;;;;;;;;;;;YAqBf,SAAS"}
|
|
@@ -2,9 +2,11 @@ import crypto from "node:crypto";
|
|
|
2
2
|
import { defineAction } from "@agent-native/core/action";
|
|
3
3
|
import { z } from "zod";
|
|
4
4
|
import { buildSimpleAgentContent, normalizeImportedAgent, validateImportedAgentTools, } from "../lib/simple-agent-profile.js";
|
|
5
|
+
import { authorizeDispatchAdmin } from "../server/lib/app-roles.js";
|
|
5
6
|
import { createWorkspaceResource, listWorkspaceResources, } from "../server/lib/workspace-resources-store.js";
|
|
6
7
|
export default defineAction({
|
|
7
8
|
description: "Import a Claude-style Markdown agent or a generic JSON agent definition into a reusable Dispatch agent profile. Credentials, shell commands, hooks, and local environment settings are never imported. Use connect-external-agent for an HTTP/A2A endpoint.",
|
|
9
|
+
authorize: authorizeDispatchAdmin,
|
|
8
10
|
schema: z.object({
|
|
9
11
|
source: z
|
|
10
12
|
.string()
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"import-agent.js","sourceRoot":"","sources":["../../src/actions/import-agent.ts"],"names":[],"mappings":"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","sourcesContent":["import crypto from \"node:crypto\";\n\nimport { defineAction } from \"@agent-native/core/action\";\nimport { z } from \"zod\";\n\nimport {\n buildSimpleAgentContent,\n normalizeImportedAgent,\n validateImportedAgentTools,\n} from \"../lib/simple-agent-profile.js\";\nimport {\n createWorkspaceResource,\n listWorkspaceResources,\n} from \"../server/lib/workspace-resources-store.js\";\n\nexport default defineAction({\n description:\n \"Import a Claude-style Markdown agent or a generic JSON agent definition into a reusable Dispatch agent profile. Credentials, shell commands, hooks, and local environment settings are never imported. Use connect-external-agent for an HTTP/A2A endpoint.\",\n schema: z.object({\n source: z\n .string()\n .min(1)\n .max(200_000)\n .describe(\"Pasted Markdown or JSON agent definition\"),\n fileName: z\n .string()\n .max(512)\n .optional()\n .describe(\"Original file name, such as .claude/agents/research.md\"),\n scope: z\n .enum([\"all\", \"selected\"])\n .default(\"all\")\n .describe(\"Make the profile available to all apps or selected apps\"),\n }),\n run: async ({ source, fileName, scope }) => {\n const normalized = normalizeImportedAgent(source, fileName);\n const { dispatchActions } = await import(\"./index.js\");\n const availableToolNames = new Set([\n ...Object.keys(dispatchActions),\n \"agent-teams\",\n \"bash\",\n \"call-agent\",\n \"db-query\",\n \"db-schema\",\n \"refresh-screen\",\n \"resources\",\n \"set-search-params\",\n \"set-url-path\",\n \"tool-search\",\n \"web-request\",\n \"web-search\",\n ]);\n const toolValidation = validateImportedAgentTools(\n normalized.tools,\n availableToolNames,\n );\n const warnings = [...normalized.warnings, ...toolValidation.warnings];\n const sourceHash = crypto.createHash(\"sha256\").update(source).digest(\"hex\");\n const content = buildSimpleAgentContent({\n ...normalized,\n tools: toolValidation.tools,\n source: normalized.source,\n sourcePath: normalized.sourcePath,\n sourceHash,\n importedAt: new Date().toISOString(),\n });\n const path = `agents/${normalized.slug}.md`;\n const existing = (await listWorkspaceResources({ kind: \"agent\" })).find(\n (resource) => resource.path === path,\n );\n\n if (existing) {\n if (existing.content.includes(`source-hash: ${sourceHash}`)) {\n return {\n status: \"unchanged\" as const,\n resource: existing,\n source: normalized.source,\n warnings,\n };\n }\n throw new Error(\n `An agent already exists at ${path}. Rename the source before importing it.`,\n );\n }\n\n const resource = await createWorkspaceResource({\n kind: \"agent\",\n name: normalized.name,\n description: normalized.description,\n path,\n content,\n scope,\n });\n\n return {\n status: \"created\" as const,\n resource,\n source: normalized.source,\n warnings,\n };\n },\n});\n"]}
|
|
1
|
+
{"version":3,"file":"import-agent.js","sourceRoot":"","sources":["../../src/actions/import-agent.ts"],"names":[],"mappings":"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","sourcesContent":["import crypto from \"node:crypto\";\n\nimport { defineAction } from \"@agent-native/core/action\";\nimport { z } from \"zod\";\n\nimport {\n buildSimpleAgentContent,\n normalizeImportedAgent,\n validateImportedAgentTools,\n} from \"../lib/simple-agent-profile.js\";\nimport { authorizeDispatchAdmin } from \"../server/lib/app-roles.js\";\nimport {\n createWorkspaceResource,\n listWorkspaceResources,\n} from \"../server/lib/workspace-resources-store.js\";\n\nexport default defineAction({\n description:\n \"Import a Claude-style Markdown agent or a generic JSON agent definition into a reusable Dispatch agent profile. Credentials, shell commands, hooks, and local environment settings are never imported. Use connect-external-agent for an HTTP/A2A endpoint.\",\n authorize: authorizeDispatchAdmin,\n schema: z.object({\n source: z\n .string()\n .min(1)\n .max(200_000)\n .describe(\"Pasted Markdown or JSON agent definition\"),\n fileName: z\n .string()\n .max(512)\n .optional()\n .describe(\"Original file name, such as .claude/agents/research.md\"),\n scope: z\n .enum([\"all\", \"selected\"])\n .default(\"all\")\n .describe(\"Make the profile available to all apps or selected apps\"),\n }),\n run: async ({ source, fileName, scope }) => {\n const normalized = normalizeImportedAgent(source, fileName);\n const { dispatchActions } = await import(\"./index.js\");\n const availableToolNames = new Set([\n ...Object.keys(dispatchActions),\n \"agent-teams\",\n \"bash\",\n \"call-agent\",\n \"db-query\",\n \"db-schema\",\n \"refresh-screen\",\n \"resources\",\n \"set-search-params\",\n \"set-url-path\",\n \"tool-search\",\n \"web-request\",\n \"web-search\",\n ]);\n const toolValidation = validateImportedAgentTools(\n normalized.tools,\n availableToolNames,\n );\n const warnings = [...normalized.warnings, ...toolValidation.warnings];\n const sourceHash = crypto.createHash(\"sha256\").update(source).digest(\"hex\");\n const content = buildSimpleAgentContent({\n ...normalized,\n tools: toolValidation.tools,\n source: normalized.source,\n sourcePath: normalized.sourcePath,\n sourceHash,\n importedAt: new Date().toISOString(),\n });\n const path = `agents/${normalized.slug}.md`;\n const existing = (await listWorkspaceResources({ kind: \"agent\" })).find(\n (resource) => resource.path === path,\n );\n\n if (existing) {\n if (existing.content.includes(`source-hash: ${sourceHash}`)) {\n return {\n status: \"unchanged\" as const,\n resource: existing,\n source: normalized.source,\n warnings,\n };\n }\n throw new Error(\n `An agent already exists at ${path}. Rename the source before importing it.`,\n );\n }\n\n const resource = await createWorkspaceResource({\n kind: \"agent\",\n name: normalized.name,\n description: normalized.description,\n path,\n content,\n scope,\n });\n\n return {\n status: \"created\" as const,\n resource,\n source: normalized.source,\n warnings,\n };\n },\n});\n"]}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { defineAction } from "@agent-native/core/action";
|
|
2
2
|
import { z } from "zod";
|
|
3
|
+
import { authorizeDispatchAdmin } from "../server/lib/app-roles.js";
|
|
3
4
|
import { rejectRequest } from "../server/lib/dispatch-store.js";
|
|
4
5
|
export default defineAction({
|
|
5
6
|
description: "Reject a pending dispatch change request.",
|
|
7
|
+
authorize: authorizeDispatchAdmin,
|
|
6
8
|
schema: z.object({
|
|
7
9
|
id: z.string().describe("Approval request id"),
|
|
8
10
|
reason: z.string().optional().describe("Optional rejection reason"),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reject-dispatch-change.js","sourceRoot":"","sources":["../../src/actions/reject-dispatch-change.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAEhE,eAAe,YAAY,CAAC;IAC1B,WAAW,EAAE,2CAA2C;IACxD,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;QAC9C,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;KACpE,CAAC;IACF,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,aAAa,CAAC,EAAE,EAAE,MAAM,CAAC;CACzD,CAAC,CAAC","sourcesContent":["import { defineAction } from \"@agent-native/core/action\";\nimport { z } from \"zod\";\n\nimport { rejectRequest } from \"../server/lib/dispatch-store.js\";\n\nexport default defineAction({\n description: \"Reject a pending dispatch change request.\",\n schema: z.object({\n id: z.string().describe(\"Approval request id\"),\n reason: z.string().optional().describe(\"Optional rejection reason\"),\n }),\n run: async ({ id, reason }) => rejectRequest(id, reason),\n});\n"]}
|
|
1
|
+
{"version":3,"file":"reject-dispatch-change.js","sourceRoot":"","sources":["../../src/actions/reject-dispatch-change.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,aAAa,EAAE,MAAM,iCAAiC,CAAC;AAEhE,eAAe,YAAY,CAAC;IAC1B,WAAW,EAAE,2CAA2C;IACxD,SAAS,EAAE,sBAAsB;IACjC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qBAAqB,CAAC;QAC9C,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;KACpE,CAAC;IACF,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,aAAa,CAAC,EAAE,EAAE,MAAM,CAAC;CACzD,CAAC,CAAC","sourcesContent":["import { defineAction } from \"@agent-native/core/action\";\nimport { z } from \"zod\";\n\nimport { authorizeDispatchAdmin } from \"../server/lib/app-roles.js\";\nimport { rejectRequest } from \"../server/lib/dispatch-store.js\";\n\nexport default defineAction({\n description: \"Reject a pending dispatch change request.\",\n authorize: authorizeDispatchAdmin,\n schema: z.object({\n id: z.string().describe(\"Approval request id\"),\n reason: z.string().optional().describe(\"Optional rejection reason\"),\n }),\n run: async ({ id, reason }) => rejectRequest(id, reason),\n});\n"]}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { defineAction } from "@agent-native/core/action";
|
|
2
2
|
import { z } from "zod";
|
|
3
|
-
import { rejectDreamProposal } from "../server/lib/dreams-store.js";
|
|
3
|
+
import { authorizeDreamProposalMutation, rejectDreamProposal, } from "../server/lib/dreams-store.js";
|
|
4
4
|
export default defineAction({
|
|
5
5
|
description: "Reject one pending Dispatch dream proposal.",
|
|
6
|
+
authorize: authorizeDreamProposalMutation,
|
|
6
7
|
schema: z.object({
|
|
7
8
|
id: z.string().min(1).describe("Dream proposal id."),
|
|
8
9
|
reason: z.string().optional().describe("Optional rejection reason."),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reject-dream-proposal.js","sourceRoot":"","sources":["../../src/actions/reject-dream-proposal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,
|
|
1
|
+
{"version":3,"file":"reject-dream-proposal.js","sourceRoot":"","sources":["../../src/actions/reject-dream-proposal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EACL,8BAA8B,EAC9B,mBAAmB,GACpB,MAAM,+BAA+B,CAAC;AAEvC,eAAe,YAAY,CAAC;IAC1B,WAAW,EAAE,6CAA6C;IAC1D,SAAS,EAAE,8BAA8B;IACzC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,oBAAoB,CAAC;QACpD,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC;KACrE,CAAC;IACF,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,mBAAmB,CAAC,EAAE,EAAE,MAAM,CAAC;CAC/D,CAAC,CAAC","sourcesContent":["import { defineAction } from \"@agent-native/core/action\";\nimport { z } from \"zod\";\n\nimport {\n authorizeDreamProposalMutation,\n rejectDreamProposal,\n} from \"../server/lib/dreams-store.js\";\n\nexport default defineAction({\n description: \"Reject one pending Dispatch dream proposal.\",\n authorize: authorizeDreamProposalMutation,\n schema: z.object({\n id: z.string().min(1).describe(\"Dream proposal id.\"),\n reason: z.string().optional().describe(\"Optional rejection reason.\"),\n }),\n run: async ({ id, reason }) => rejectDreamProposal(id, reason),\n});\n"]}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { defineAction } from "@agent-native/core/action";
|
|
2
2
|
import { z } from "zod";
|
|
3
|
+
import { authorizeDispatchAdmin } from "../server/lib/app-roles.js";
|
|
3
4
|
import { restoreStarterWorkspaceResources } from "../server/lib/workspace-resources-store.js";
|
|
4
5
|
export default defineAction({
|
|
5
6
|
description: "Restore missing starter global workspace resources such as company, brand, messaging, guardrails, and company voice. Existing resources are left unchanged.",
|
|
7
|
+
authorize: authorizeDispatchAdmin,
|
|
6
8
|
schema: z.object({
|
|
7
9
|
paths: z
|
|
8
10
|
.array(z.string())
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"restore-starter-workspace-resources.js","sourceRoot":"","sources":["../../src/actions/restore-starter-workspace-resources.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,gCAAgC,EAAE,MAAM,4CAA4C,CAAC;AAE9F,eAAe,YAAY,CAAC;IAC1B,WAAW,EACT,6JAA6J;IAC/J,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,KAAK,EAAE,CAAC;aACL,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;aACjB,QAAQ,EAAE;aACV,QAAQ,CACP,6FAA6F,CAC9F;KACJ,CAAC;IACF,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,gCAAgC,CAAC,IAAI,CAAC;CAC5D,CAAC,CAAC","sourcesContent":["import { defineAction } from \"@agent-native/core/action\";\nimport { z } from \"zod\";\n\nimport { restoreStarterWorkspaceResources } from \"../server/lib/workspace-resources-store.js\";\n\nexport default defineAction({\n description:\n \"Restore missing starter global workspace resources such as company, brand, messaging, guardrails, and company voice. Existing resources are left unchanged.\",\n schema: z.object({\n paths: z\n .array(z.string())\n .optional()\n .describe(\n \"Optional starter resource paths to restore. Omit to restore every missing starter resource.\",\n ),\n }),\n run: async (args) => restoreStarterWorkspaceResources(args),\n});\n"]}
|
|
1
|
+
{"version":3,"file":"restore-starter-workspace-resources.js","sourceRoot":"","sources":["../../src/actions/restore-starter-workspace-resources.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,gCAAgC,EAAE,MAAM,4CAA4C,CAAC;AAE9F,eAAe,YAAY,CAAC;IAC1B,WAAW,EACT,6JAA6J;IAC/J,SAAS,EAAE,sBAAsB;IACjC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,KAAK,EAAE,CAAC;aACL,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;aACjB,QAAQ,EAAE;aACV,QAAQ,CACP,6FAA6F,CAC9F;KACJ,CAAC;IACF,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,gCAAgC,CAAC,IAAI,CAAC;CAC5D,CAAC,CAAC","sourcesContent":["import { defineAction } from \"@agent-native/core/action\";\nimport { z } from \"zod\";\n\nimport { authorizeDispatchAdmin } from \"../server/lib/app-roles.js\";\nimport { restoreStarterWorkspaceResources } from \"../server/lib/workspace-resources-store.js\";\n\nexport default defineAction({\n description:\n \"Restore missing starter global workspace resources such as company, brand, messaging, guardrails, and company voice. Existing resources are left unchanged.\",\n authorize: authorizeDispatchAdmin,\n schema: z.object({\n paths: z\n .array(z.string())\n .optional()\n .describe(\n \"Optional starter resource paths to restore. Omit to restore every missing starter resource.\",\n ),\n }),\n run: async (args) => restoreStarterWorkspaceResources(args),\n});\n"]}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { defineAction } from "@agent-native/core/action";
|
|
2
2
|
import { z } from "zod";
|
|
3
|
+
import { authorizeDispatchAdmin } from "../server/lib/app-roles.js";
|
|
3
4
|
import { requireWorkspaceResourceCtx, revokeResourceGrant, } from "../server/lib/workspace-resources-store.js";
|
|
4
5
|
export default defineAction({
|
|
5
6
|
description: "Revoke an app's access to a workspace resource. Admin only.",
|
|
7
|
+
authorize: authorizeDispatchAdmin,
|
|
6
8
|
schema: z.object({
|
|
7
9
|
grantId: z.string().describe("Grant ID to revoke"),
|
|
8
10
|
}),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"revoke-workspace-resource-grant.js","sourceRoot":"","sources":["../../src/actions/revoke-workspace-resource-grant.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EACL,2BAA2B,EAC3B,mBAAmB,GACpB,MAAM,4CAA4C,CAAC;AAEpD,eAAe,YAAY,CAAC;IAC1B,WAAW,EAAE,6DAA6D;IAC1E,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;KACnD,CAAC;IACF,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAClB,mBAAmB,CAAC,IAAI,CAAC,OAAO,EAAE,2BAA2B,EAAE,CAAC;CACnE,CAAC,CAAC","sourcesContent":["import { defineAction } from \"@agent-native/core/action\";\nimport { z } from \"zod\";\n\nimport {\n requireWorkspaceResourceCtx,\n revokeResourceGrant,\n} from \"../server/lib/workspace-resources-store.js\";\n\nexport default defineAction({\n description: \"Revoke an app's access to a workspace resource. Admin only.\",\n schema: z.object({\n grantId: z.string().describe(\"Grant ID to revoke\"),\n }),\n run: async (args) =>\n revokeResourceGrant(args.grantId, requireWorkspaceResourceCtx()),\n});\n"]}
|
|
1
|
+
{"version":3,"file":"revoke-workspace-resource-grant.js","sourceRoot":"","sources":["../../src/actions/revoke-workspace-resource-grant.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EACL,2BAA2B,EAC3B,mBAAmB,GACpB,MAAM,4CAA4C,CAAC;AAEpD,eAAe,YAAY,CAAC;IAC1B,WAAW,EAAE,6DAA6D;IAC1E,SAAS,EAAE,sBAAsB;IACjC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;KACnD,CAAC;IACF,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAClB,mBAAmB,CAAC,IAAI,CAAC,OAAO,EAAE,2BAA2B,EAAE,CAAC;CACnE,CAAC,CAAC","sourcesContent":["import { defineAction } from \"@agent-native/core/action\";\nimport { z } from \"zod\";\n\nimport { authorizeDispatchAdmin } from \"../server/lib/app-roles.js\";\nimport {\n requireWorkspaceResourceCtx,\n revokeResourceGrant,\n} from \"../server/lib/workspace-resources-store.js\";\n\nexport default defineAction({\n description: \"Revoke an app's access to a workspace resource. Admin only.\",\n authorize: authorizeDispatchAdmin,\n schema: z.object({\n grantId: z.string().describe(\"Grant ID to revoke\"),\n }),\n run: async (args) =>\n revokeResourceGrant(args.grantId, requireWorkspaceResourceCtx()),\n});\n"]}
|
|
@@ -2,6 +2,7 @@ import { defineAction } from "@agent-native/core/action";
|
|
|
2
2
|
import { listIntegrationInstallations, resolveIntegrationTokenBundle, } from "@agent-native/core/integrations";
|
|
3
3
|
import { getRequestOrgId, getRequestUserEmail, slackAdapter, telegramAdapter, emailAdapter, isEmailConfigured, resolveSecret, } from "@agent-native/core/server";
|
|
4
4
|
import { z } from "zod";
|
|
5
|
+
import { authorizeDispatchAdmin } from "../server/lib/app-roles.js";
|
|
5
6
|
import { getDestinationById } from "../server/lib/dispatch-store.js";
|
|
6
7
|
function getAdapter(platform, slackToken) {
|
|
7
8
|
if (platform === "email")
|
|
@@ -44,6 +45,7 @@ async function assertOutboundConfigured(platform, tenantId) {
|
|
|
44
45
|
}
|
|
45
46
|
export default defineAction({
|
|
46
47
|
description: "Send a proactive message to a saved Slack, Telegram, or email destination.",
|
|
48
|
+
authorize: authorizeDispatchAdmin,
|
|
47
49
|
schema: z.object({
|
|
48
50
|
platform: z.enum(["slack", "telegram", "email"]).optional(),
|
|
49
51
|
destinationId: z.string().optional().describe("Saved destination id"),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"send-platform-message.js","sourceRoot":"","sources":["../../src/actions/send-platform-message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EACL,4BAA4B,EAC5B,6BAA6B,GAC9B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,YAAY,EACZ,eAAe,EACf,YAAY,EACZ,iBAAiB,EACjB,aAAa,GACd,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAErE,SAAS,UAAU,CACjB,QAAwC,EACxC,UAAmB;IAEnB,IAAI,QAAQ,KAAK,OAAO;QAAE,OAAO,YAAY,EAAE,CAAC;IAChD,OAAO,QAAQ,KAAK,OAAO;QACzB,CAAC,CAAC,YAAY,CAAC,EAAE,eAAe,EAAE,KAAK,IAAI,EAAE,CAAC,UAAU,EAAE,CAAC;QAC3D,CAAC,CAAC,eAAe,EAAE,CAAC;AACxB,CAAC;AAED,KAAK,UAAU,wBAAwB,CACrC,QAAwC,EACxC,QAAiB;IAEjB,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzB,MAAM,SAAS,GAAG,mBAAmB,EAAE,CAAC;QACxC,IAAI,CAAC,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACrE,MAAM,aAAa,GAAG,QAAQ;YAC5B,CAAC,CAAC,MAAM,4BAA4B,CAChC,EAAE,SAAS,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,IAAI,EAAE,EAC/C,OAAO,CACR;YACH,CAAC,CAAC,EAAE,CAAC;QACP,MAAM,YAAY,GAChB,aAAa,CAAC,IAAI,CAChB,CAAC,SAAS,EAAE,EAAE,CACZ,SAAS,CAAC,MAAM,KAAK,QAAQ,IAAI,SAAS,CAAC,YAAY,KAAK,QAAQ,CACvE,IAAI,IAAI,CAAC;QACZ,MAAM,OAAO,GAAG,YAAY;YAC1B,CAAC,CAAC,MAAM,6BAA6B,CACjC,OAAO,EACP,YAAY,CAAC,eAAe,CAC7B;YACH,CAAC,CAAC,IAAI,CAAC;QACT,MAAM,KAAK,GAAG,QAAQ;YACpB,CAAC,CAAC,OAAO,EAAE,WAAW;YACtB,CAAC,CAAC,CAAC,OAAO,EAAE,WAAW,IAAI,CAAC,MAAM,aAAa,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;QACvE,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CACb,QAAQ;gBACN,CAAC,CAAC,uCAAuC;gBACzC,CAAC,CAAC,yDAAyD,CAC9D,CAAC;QACJ,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,QAAQ,KAAK,UAAU,IAAI,CAAC,CAAC,MAAM,aAAa,CAAC,oBAAoB,CAAC,CAAC,EAAE,CAAC;QAC5E,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;IACnE,CAAC;IACD,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzB,IACE,CAAC,CAAC,MAAM,aAAa,CAAC,qBAAqB,CAAC,CAAC;YAC7C,CAAC,CAAC,MAAM,iBAAiB,EAAE,CAAC,EAC5B,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;AACH,CAAC;AAED,eAAe,YAAY,CAAC;IAC1B,WAAW,EACT,4EAA4E;IAC9E,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE;QAC3D,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;QACrE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;QAC1E,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;QACtE,QAAQ,EAAE,CAAC;aACR,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,mDAAmD,CAAC;QAChE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;KAC7C,CAAC;IACF,KAAK,EAAE;QACL,YAAY,EAAE,KAAK;QACnB,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACjB,IAAI,EAAE,aAAa;YACnB,EAAE,EAAE,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,WAAW,IAAI,SAAS;YACvD,UAAU,EAAE,SAAS;SACtB,CAAC;QACF,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,kBAAkB,IAAI,CAAC,QAAQ,IAAI,OAAO,UAAU;KACxE;IACD,GAAG,EAAE,KAAK,EAAE,EACV,QAAQ,EACR,aAAa,EACb,WAAW,EACX,SAAS,EACT,QAAQ,EACR,IAAI,GACL,EAAE,EAAE;QACH,MAAM,KAAK,GAAG,aAAa;YACzB,CAAC,CAAC,MAAM,kBAAkB,CAAC,aAAa,CAAC;YACzC,CAAC,CAAC,IAAI,CAAC;QACT,MAAM,gBAAgB,GAAG,CAAC,KAAK,EAAE,QAAQ,IAAI,QAAQ,CAIxC,CAAC;QACd,MAAM,mBAAmB,GAAG,KAAK,EAAE,WAAW,IAAI,WAAW,CAAC;QAC9D,MAAM,iBAAiB,GAAG,KAAK,EAAE,SAAS,IAAI,SAAS,IAAI,IAAI,CAAC;QAEhE,IAAI,CAAC,gBAAgB,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC9C,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;QAC7D,CAAC;QAED,MAAM,UAAU,GAAG,MAAM,wBAAwB,CAC/C,gBAAgB,EAChB,QAAQ,CACT,CAAC;QAEF,MAAM,OAAO,GAAG,UAAU,CAAC,gBAAgB,EAAE,UAAU,CAAC,CAAC;QACzD,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CACb,YAAY,gBAAgB,gDAAgD,CAC7E,CAAC;QACJ,CAAC;QAED,MAAM,OAAO,CAAC,mBAAmB,CAAC,OAAO,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE;YACnE,WAAW,EAAE,mBAAmB;YAChC,SAAS,EAAE,iBAAiB;YAC5B,KAAK,EAAE,KAAK,EAAE,IAAI,IAAI,SAAS;YAC/B,QAAQ;SACT,CAAC,CAAC;QAEH,OAAO;YACL,EAAE,EAAE,IAAI;YACR,QAAQ,EAAE,gBAAgB;YAC1B,WAAW,EAAE,mBAAmB;YAChC,SAAS,EAAE,iBAAiB;SAC7B,CAAC;IACJ,CAAC;CACF,CAAC,CAAC","sourcesContent":["import { defineAction } from \"@agent-native/core/action\";\nimport {\n listIntegrationInstallations,\n resolveIntegrationTokenBundle,\n} from \"@agent-native/core/integrations\";\nimport {\n getRequestOrgId,\n getRequestUserEmail,\n slackAdapter,\n telegramAdapter,\n emailAdapter,\n isEmailConfigured,\n resolveSecret,\n} from \"@agent-native/core/server\";\nimport { z } from \"zod\";\n\nimport { getDestinationById } from \"../server/lib/dispatch-store.js\";\n\nfunction getAdapter(\n platform: \"slack\" | \"telegram\" | \"email\",\n slackToken?: string,\n) {\n if (platform === \"email\") return emailAdapter();\n return platform === \"slack\"\n ? slackAdapter({ resolveBotToken: async () => slackToken })\n : telegramAdapter();\n}\n\nasync function assertOutboundConfigured(\n platform: \"slack\" | \"telegram\" | \"email\",\n tenantId?: string,\n): Promise<string | undefined> {\n if (platform === \"slack\") {\n const userEmail = getRequestUserEmail();\n if (!userEmail) throw new Error(\"An authenticated user is required\");\n const installations = tenantId\n ? await listIntegrationInstallations(\n { userEmail, orgId: getRequestOrgId() ?? null },\n \"slack\",\n )\n : [];\n const installation =\n installations.find(\n (candidate) =>\n candidate.teamId === tenantId || candidate.enterpriseId === tenantId,\n ) ?? null;\n const managed = installation\n ? await resolveIntegrationTokenBundle(\n \"slack\",\n installation.installationKey,\n )\n : null;\n const token = tenantId\n ? managed?.accessToken\n : (managed?.accessToken ?? (await resolveSecret(\"SLACK_BOT_TOKEN\")));\n if (!token) {\n throw new Error(\n tenantId\n ? \"That Slack workspace is not connected\"\n : \"Select a Slack workspace for managed outbound messaging\",\n );\n }\n return token;\n }\n if (platform === \"telegram\" && !(await resolveSecret(\"TELEGRAM_BOT_TOKEN\"))) {\n throw new Error(\"Telegram outbound messaging is not configured\");\n }\n if (platform === \"email\") {\n if (\n !(await resolveSecret(\"EMAIL_AGENT_ADDRESS\")) ||\n !(await isEmailConfigured())\n ) {\n throw new Error(\"Email outbound messaging is not configured\");\n }\n }\n}\n\nexport default defineAction({\n description:\n \"Send a proactive message to a saved Slack, Telegram, or email destination.\",\n schema: z.object({\n platform: z.enum([\"slack\", \"telegram\", \"email\"]).optional(),\n destinationId: z.string().optional().describe(\"Saved destination id\"),\n destination: z.string().optional().describe(\"Raw platform destination id\"),\n threadRef: z.string().optional().describe(\"Optional thread reference\"),\n tenantId: z\n .string()\n .optional()\n .describe(\"Slack workspace/team id for managed installations\"),\n text: z.string().describe(\"Message to send\"),\n }),\n audit: {\n recordInputs: false,\n target: (args) => ({\n type: \"destination\",\n id: args.destinationId || args.destination || \"unknown\",\n visibility: \"private\",\n }),\n summary: (args) => `Sent proactive ${args.platform || \"saved\"} message`,\n },\n run: async ({\n platform,\n destinationId,\n destination,\n threadRef,\n tenantId,\n text,\n }) => {\n const saved = destinationId\n ? await getDestinationById(destinationId)\n : null;\n const resolvedPlatform = (saved?.platform || platform) as\n | \"slack\"\n | \"telegram\"\n | \"email\"\n | undefined;\n const resolvedDestination = saved?.destination || destination;\n const resolvedThreadRef = saved?.threadRef || threadRef || null;\n\n if (!resolvedPlatform || !resolvedDestination) {\n throw new Error(\"A platform and destination are required\");\n }\n\n const slackToken = await assertOutboundConfigured(\n resolvedPlatform,\n tenantId,\n );\n\n const adapter = getAdapter(resolvedPlatform, slackToken);\n if (!adapter.sendMessageToTarget) {\n throw new Error(\n `Platform ${resolvedPlatform} does not support proactive outbound messaging`,\n );\n }\n\n await adapter.sendMessageToTarget(adapter.formatAgentResponse(text), {\n destination: resolvedDestination,\n threadRef: resolvedThreadRef,\n label: saved?.name || undefined,\n tenantId,\n });\n\n return {\n ok: true,\n platform: resolvedPlatform,\n destination: resolvedDestination,\n threadRef: resolvedThreadRef,\n };\n },\n});\n"]}
|
|
1
|
+
{"version":3,"file":"send-platform-message.js","sourceRoot":"","sources":["../../src/actions/send-platform-message.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EACL,4BAA4B,EAC5B,6BAA6B,GAC9B,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,YAAY,EACZ,eAAe,EACf,YAAY,EACZ,iBAAiB,EACjB,aAAa,GACd,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AAErE,SAAS,UAAU,CACjB,QAAwC,EACxC,UAAmB;IAEnB,IAAI,QAAQ,KAAK,OAAO;QAAE,OAAO,YAAY,EAAE,CAAC;IAChD,OAAO,QAAQ,KAAK,OAAO;QACzB,CAAC,CAAC,YAAY,CAAC,EAAE,eAAe,EAAE,KAAK,IAAI,EAAE,CAAC,UAAU,EAAE,CAAC;QAC3D,CAAC,CAAC,eAAe,EAAE,CAAC;AACxB,CAAC;AAED,KAAK,UAAU,wBAAwB,CACrC,QAAwC,EACxC,QAAiB;IAEjB,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzB,MAAM,SAAS,GAAG,mBAAmB,EAAE,CAAC;QACxC,IAAI,CAAC,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACrE,MAAM,aAAa,GAAG,QAAQ;YAC5B,CAAC,CAAC,MAAM,4BAA4B,CAChC,EAAE,SAAS,EAAE,KAAK,EAAE,eAAe,EAAE,IAAI,IAAI,EAAE,EAC/C,OAAO,CACR;YACH,CAAC,CAAC,EAAE,CAAC;QACP,MAAM,YAAY,GAChB,aAAa,CAAC,IAAI,CAChB,CAAC,SAAS,EAAE,EAAE,CACZ,SAAS,CAAC,MAAM,KAAK,QAAQ,IAAI,SAAS,CAAC,YAAY,KAAK,QAAQ,CACvE,IAAI,IAAI,CAAC;QACZ,MAAM,OAAO,GAAG,YAAY;YAC1B,CAAC,CAAC,MAAM,6BAA6B,CACjC,OAAO,EACP,YAAY,CAAC,eAAe,CAC7B;YACH,CAAC,CAAC,IAAI,CAAC;QACT,MAAM,KAAK,GAAG,QAAQ;YACpB,CAAC,CAAC,OAAO,EAAE,WAAW;YACtB,CAAC,CAAC,CAAC,OAAO,EAAE,WAAW,IAAI,CAAC,MAAM,aAAa,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;QACvE,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CACb,QAAQ;gBACN,CAAC,CAAC,uCAAuC;gBACzC,CAAC,CAAC,yDAAyD,CAC9D,CAAC;QACJ,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,QAAQ,KAAK,UAAU,IAAI,CAAC,CAAC,MAAM,aAAa,CAAC,oBAAoB,CAAC,CAAC,EAAE,CAAC;QAC5E,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC,CAAC;IACnE,CAAC;IACD,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QACzB,IACE,CAAC,CAAC,MAAM,aAAa,CAAC,qBAAqB,CAAC,CAAC;YAC7C,CAAC,CAAC,MAAM,iBAAiB,EAAE,CAAC,EAC5B,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;AACH,CAAC;AAED,eAAe,YAAY,CAAC;IAC1B,WAAW,EACT,4EAA4E;IAC9E,SAAS,EAAE,sBAAsB;IACjC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE;QAC3D,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;QACrE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;QAC1E,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;QACtE,QAAQ,EAAE,CAAC;aACR,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,mDAAmD,CAAC;QAChE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;KAC7C,CAAC;IACF,KAAK,EAAE;QACL,YAAY,EAAE,KAAK;QACnB,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACjB,IAAI,EAAE,aAAa;YACnB,EAAE,EAAE,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,WAAW,IAAI,SAAS;YACvD,UAAU,EAAE,SAAS;SACtB,CAAC;QACF,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,kBAAkB,IAAI,CAAC,QAAQ,IAAI,OAAO,UAAU;KACxE;IACD,GAAG,EAAE,KAAK,EAAE,EACV,QAAQ,EACR,aAAa,EACb,WAAW,EACX,SAAS,EACT,QAAQ,EACR,IAAI,GACL,EAAE,EAAE;QACH,MAAM,KAAK,GAAG,aAAa;YACzB,CAAC,CAAC,MAAM,kBAAkB,CAAC,aAAa,CAAC;YACzC,CAAC,CAAC,IAAI,CAAC;QACT,MAAM,gBAAgB,GAAG,CAAC,KAAK,EAAE,QAAQ,IAAI,QAAQ,CAIxC,CAAC;QACd,MAAM,mBAAmB,GAAG,KAAK,EAAE,WAAW,IAAI,WAAW,CAAC;QAC9D,MAAM,iBAAiB,GAAG,KAAK,EAAE,SAAS,IAAI,SAAS,IAAI,IAAI,CAAC;QAEhE,IAAI,CAAC,gBAAgB,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC9C,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;QAC7D,CAAC;QAED,MAAM,UAAU,GAAG,MAAM,wBAAwB,CAC/C,gBAAgB,EAChB,QAAQ,CACT,CAAC;QAEF,MAAM,OAAO,GAAG,UAAU,CAAC,gBAAgB,EAAE,UAAU,CAAC,CAAC;QACzD,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CACb,YAAY,gBAAgB,gDAAgD,CAC7E,CAAC;QACJ,CAAC;QAED,MAAM,OAAO,CAAC,mBAAmB,CAAC,OAAO,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE;YACnE,WAAW,EAAE,mBAAmB;YAChC,SAAS,EAAE,iBAAiB;YAC5B,KAAK,EAAE,KAAK,EAAE,IAAI,IAAI,SAAS;YAC/B,QAAQ;SACT,CAAC,CAAC;QAEH,OAAO;YACL,EAAE,EAAE,IAAI;YACR,QAAQ,EAAE,gBAAgB;YAC1B,WAAW,EAAE,mBAAmB;YAChC,SAAS,EAAE,iBAAiB;SAC7B,CAAC;IACJ,CAAC;CACF,CAAC,CAAC","sourcesContent":["import { defineAction } from \"@agent-native/core/action\";\nimport {\n listIntegrationInstallations,\n resolveIntegrationTokenBundle,\n} from \"@agent-native/core/integrations\";\nimport {\n getRequestOrgId,\n getRequestUserEmail,\n slackAdapter,\n telegramAdapter,\n emailAdapter,\n isEmailConfigured,\n resolveSecret,\n} from \"@agent-native/core/server\";\nimport { z } from \"zod\";\n\nimport { authorizeDispatchAdmin } from \"../server/lib/app-roles.js\";\nimport { getDestinationById } from \"../server/lib/dispatch-store.js\";\n\nfunction getAdapter(\n platform: \"slack\" | \"telegram\" | \"email\",\n slackToken?: string,\n) {\n if (platform === \"email\") return emailAdapter();\n return platform === \"slack\"\n ? slackAdapter({ resolveBotToken: async () => slackToken })\n : telegramAdapter();\n}\n\nasync function assertOutboundConfigured(\n platform: \"slack\" | \"telegram\" | \"email\",\n tenantId?: string,\n): Promise<string | undefined> {\n if (platform === \"slack\") {\n const userEmail = getRequestUserEmail();\n if (!userEmail) throw new Error(\"An authenticated user is required\");\n const installations = tenantId\n ? await listIntegrationInstallations(\n { userEmail, orgId: getRequestOrgId() ?? null },\n \"slack\",\n )\n : [];\n const installation =\n installations.find(\n (candidate) =>\n candidate.teamId === tenantId || candidate.enterpriseId === tenantId,\n ) ?? null;\n const managed = installation\n ? await resolveIntegrationTokenBundle(\n \"slack\",\n installation.installationKey,\n )\n : null;\n const token = tenantId\n ? managed?.accessToken\n : (managed?.accessToken ?? (await resolveSecret(\"SLACK_BOT_TOKEN\")));\n if (!token) {\n throw new Error(\n tenantId\n ? \"That Slack workspace is not connected\"\n : \"Select a Slack workspace for managed outbound messaging\",\n );\n }\n return token;\n }\n if (platform === \"telegram\" && !(await resolveSecret(\"TELEGRAM_BOT_TOKEN\"))) {\n throw new Error(\"Telegram outbound messaging is not configured\");\n }\n if (platform === \"email\") {\n if (\n !(await resolveSecret(\"EMAIL_AGENT_ADDRESS\")) ||\n !(await isEmailConfigured())\n ) {\n throw new Error(\"Email outbound messaging is not configured\");\n }\n }\n}\n\nexport default defineAction({\n description:\n \"Send a proactive message to a saved Slack, Telegram, or email destination.\",\n authorize: authorizeDispatchAdmin,\n schema: z.object({\n platform: z.enum([\"slack\", \"telegram\", \"email\"]).optional(),\n destinationId: z.string().optional().describe(\"Saved destination id\"),\n destination: z.string().optional().describe(\"Raw platform destination id\"),\n threadRef: z.string().optional().describe(\"Optional thread reference\"),\n tenantId: z\n .string()\n .optional()\n .describe(\"Slack workspace/team id for managed installations\"),\n text: z.string().describe(\"Message to send\"),\n }),\n audit: {\n recordInputs: false,\n target: (args) => ({\n type: \"destination\",\n id: args.destinationId || args.destination || \"unknown\",\n visibility: \"private\",\n }),\n summary: (args) => `Sent proactive ${args.platform || \"saved\"} message`,\n },\n run: async ({\n platform,\n destinationId,\n destination,\n threadRef,\n tenantId,\n text,\n }) => {\n const saved = destinationId\n ? await getDestinationById(destinationId)\n : null;\n const resolvedPlatform = (saved?.platform || platform) as\n | \"slack\"\n | \"telegram\"\n | \"email\"\n | undefined;\n const resolvedDestination = saved?.destination || destination;\n const resolvedThreadRef = saved?.threadRef || threadRef || null;\n\n if (!resolvedPlatform || !resolvedDestination) {\n throw new Error(\"A platform and destination are required\");\n }\n\n const slackToken = await assertOutboundConfigured(\n resolvedPlatform,\n tenantId,\n );\n\n const adapter = getAdapter(resolvedPlatform, slackToken);\n if (!adapter.sendMessageToTarget) {\n throw new Error(\n `Platform ${resolvedPlatform} does not support proactive outbound messaging`,\n );\n }\n\n await adapter.sendMessageToTarget(adapter.formatAgentResponse(text), {\n destination: resolvedDestination,\n threadRef: resolvedThreadRef,\n label: saved?.name || undefined,\n tenantId,\n });\n\n return {\n ok: true,\n platform: resolvedPlatform,\n destination: resolvedDestination,\n threadRef: resolvedThreadRef,\n };\n },\n});\n"]}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { defineAction } from "@agent-native/core/action";
|
|
2
2
|
import { z } from "zod";
|
|
3
|
+
import { authorizeDispatchAdmin } from "../server/lib/app-roles.js";
|
|
3
4
|
import { getApprovalPolicy, setApprovalPolicy, } from "../server/lib/dispatch-store.js";
|
|
4
5
|
export default defineAction({
|
|
5
6
|
description: "Enable or disable dispatch approval flow for durable changes.",
|
|
7
|
+
authorize: authorizeDispatchAdmin,
|
|
6
8
|
schema: z.object({
|
|
7
9
|
enabled: z.boolean(),
|
|
8
10
|
approverEmails: z.array(z.string().email()).default([]),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"set-dispatch-approval-policy.js","sourceRoot":"","sources":["../../src/actions/set-dispatch-approval-policy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EACL,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,iCAAiC,CAAC;AAEzC,eAAe,YAAY,CAAC;IAC1B,WAAW,EAAE,+DAA+D;IAC5E,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE;QACpB,cAAc,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;KACxD,CAAC;IACF,GAAG,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,cAAc,EAAE,EAAE,EAAE;QACzC,MAAM,OAAO,GAAG,MAAM,iBAAiB,EAAE,CAAC;QAC1C,IACE,OAAO,CAAC,OAAO,KAAK,OAAO;YAC3B,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,EACzE,CAAC;YACD,OAAO,OAAO,CAAC;QACjB,CAAC;QACD,OAAO,iBAAiB,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC;IACxD,CAAC;CACF,CAAC,CAAC","sourcesContent":["import { defineAction } from \"@agent-native/core/action\";\nimport { z } from \"zod\";\n\nimport {\n getApprovalPolicy,\n setApprovalPolicy,\n} from \"../server/lib/dispatch-store.js\";\n\nexport default defineAction({\n description: \"Enable or disable dispatch approval flow for durable changes.\",\n schema: z.object({\n enabled: z.boolean(),\n approverEmails: z.array(z.string().email()).default([]),\n }),\n run: async ({ enabled, approverEmails }) => {\n const current = await getApprovalPolicy();\n if (\n current.enabled === enabled &&\n JSON.stringify(current.approverEmails) === JSON.stringify(approverEmails)\n ) {\n return current;\n }\n return setApprovalPolicy({ enabled, approverEmails });\n },\n});\n"]}
|
|
1
|
+
{"version":3,"file":"set-dispatch-approval-policy.js","sourceRoot":"","sources":["../../src/actions/set-dispatch-approval-policy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EACL,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,iCAAiC,CAAC;AAEzC,eAAe,YAAY,CAAC;IAC1B,WAAW,EAAE,+DAA+D;IAC5E,SAAS,EAAE,sBAAsB;IACjC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE;QACpB,cAAc,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;KACxD,CAAC;IACF,GAAG,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,cAAc,EAAE,EAAE,EAAE;QACzC,MAAM,OAAO,GAAG,MAAM,iBAAiB,EAAE,CAAC;QAC1C,IACE,OAAO,CAAC,OAAO,KAAK,OAAO;YAC3B,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,cAAc,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,EACzE,CAAC;YACD,OAAO,OAAO,CAAC;QACjB,CAAC;QACD,OAAO,iBAAiB,CAAC,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC,CAAC;IACxD,CAAC;CACF,CAAC,CAAC","sourcesContent":["import { defineAction } from \"@agent-native/core/action\";\nimport { z } from \"zod\";\n\nimport { authorizeDispatchAdmin } from \"../server/lib/app-roles.js\";\nimport {\n getApprovalPolicy,\n setApprovalPolicy,\n} from \"../server/lib/dispatch-store.js\";\n\nexport default defineAction({\n description: \"Enable or disable dispatch approval flow for durable changes.\",\n authorize: authorizeDispatchAdmin,\n schema: z.object({\n enabled: z.boolean(),\n approverEmails: z.array(z.string().email()).default([]),\n }),\n run: async ({ enabled, approverEmails }) => {\n const current = await getApprovalPolicy();\n if (\n current.enabled === enabled &&\n JSON.stringify(current.approverEmails) === JSON.stringify(approverEmails)\n ) {\n return current;\n }\n return setApprovalPolicy({ enabled, approverEmails });\n },\n});\n"]}
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { defineAction } from "@agent-native/core/action";
|
|
2
2
|
import { z } from "zod";
|
|
3
|
+
import { authorizeDispatchAdmin } from "../server/lib/app-roles.js";
|
|
3
4
|
import { setDreamSettings } from "../server/lib/dreams-store.js";
|
|
4
5
|
export default defineAction({
|
|
5
6
|
description: "Update recurring Dispatch dream settings without immediately running or applying a dream pass.",
|
|
7
|
+
authorize: authorizeDispatchAdmin,
|
|
6
8
|
schema: z.object({
|
|
7
9
|
enabled: z
|
|
8
10
|
.boolean()
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"set-dream-settings.js","sourceRoot":"","sources":["../../src/actions/set-dream-settings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAEjE,eAAe,YAAY,CAAC;IAC1B,WAAW,EACT,gGAAgG;IAClG,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,OAAO,EAAE,CAAC;aACP,OAAO,EAAE;aACT,QAAQ,EAAE;aACV,QAAQ,CAAC,kCAAkC,CAAC;QAC/C,QAAQ,EAAE,CAAC;aACR,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,oDAAoD,CAAC;QACjE,QAAQ,EAAE,CAAC;aACR,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CACP,+DAA+D,CAChE;QACH,SAAS,EAAE,CAAC;aACT,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;aACxB,QAAQ,EAAE;aACV,QAAQ,CAAC,gDAAgD,CAAC;QAC7D,UAAU,EAAE,CAAC,CAAC,MAAM;aACjB,OAAO,EAAE;aACT,QAAQ,EAAE;aACV,QAAQ,CAAC,2CAA2C,CAAC;QACxD,KAAK,EAAE,CAAC;aACL,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,kDAAkD,CAAC;QAC/D,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;QACxD,eAAe,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE;QACxE,iBAAiB,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;QACnE,oBAAoB,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE;QACzE,iBAAiB,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;QACpE,eAAe,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE;QACxE,iBAAiB,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;KACrE,CAAC;IACF,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,gBAAgB,CAAC,KAAK,CAAC;CAC9C,CAAC,CAAC","sourcesContent":["import { defineAction } from \"@agent-native/core/action\";\nimport { z } from \"zod\";\n\nimport { setDreamSettings } from \"../server/lib/dreams-store.js\";\n\nexport default defineAction({\n description:\n \"Update recurring Dispatch dream settings without immediately running or applying a dream pass.\",\n schema: z.object({\n enabled: z\n .boolean()\n .optional()\n .describe(\"Whether recurring dreams are on.\"),\n schedule: z\n .string()\n .optional()\n .describe('Five-field cron schedule, for example \"0 9 * * 1\".'),\n sourceId: z\n .string()\n .optional()\n .describe(\n \"Thread debug source id. Use 'all' for every connected source.\",\n ),\n sourceIds: z\n .array(z.string().min(1))\n .optional()\n .describe(\"Optional explicit source ids to scan together.\"),\n allSources: z.coerce\n .boolean()\n .optional()\n .describe(\"Scan every connected thread-debug source.\"),\n query: z\n .string()\n .optional()\n .describe(\"Optional search term for recurring dream passes.\"),\n limit: z.coerce.number().int().min(1).max(50).optional(),\n sourceTimeoutMs: z.coerce.number().int().min(1000).max(60000).optional(),\n sourceConcurrency: z.coerce.number().int().min(1).max(8).optional(),\n sourceStartStaggerMs: z.coerce.number().int().min(0).max(5000).optional(),\n threadConcurrency: z.coerce.number().int().min(1).max(10).optional(),\n threadTimeoutMs: z.coerce.number().int().min(1000).max(30000).optional(),\n minCandidateCount: z.coerce.number().int().min(0).max(50).optional(),\n }),\n run: async (input) => setDreamSettings(input),\n});\n"]}
|
|
1
|
+
{"version":3,"file":"set-dream-settings.js","sourceRoot":"","sources":["../../src/actions/set-dream-settings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAEjE,eAAe,YAAY,CAAC;IAC1B,WAAW,EACT,gGAAgG;IAClG,SAAS,EAAE,sBAAsB;IACjC,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,OAAO,EAAE,CAAC;aACP,OAAO,EAAE;aACT,QAAQ,EAAE;aACV,QAAQ,CAAC,kCAAkC,CAAC;QAC/C,QAAQ,EAAE,CAAC;aACR,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,oDAAoD,CAAC;QACjE,QAAQ,EAAE,CAAC;aACR,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CACP,+DAA+D,CAChE;QACH,SAAS,EAAE,CAAC;aACT,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;aACxB,QAAQ,EAAE;aACV,QAAQ,CAAC,gDAAgD,CAAC;QAC7D,UAAU,EAAE,CAAC,CAAC,MAAM;aACjB,OAAO,EAAE;aACT,QAAQ,EAAE;aACV,QAAQ,CAAC,2CAA2C,CAAC;QACxD,KAAK,EAAE,CAAC;aACL,MAAM,EAAE;aACR,QAAQ,EAAE;aACV,QAAQ,CAAC,kDAAkD,CAAC;QAC/D,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;QACxD,eAAe,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE;QACxE,iBAAiB,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;QACnE,oBAAoB,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE;QACzE,iBAAiB,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;QACpE,eAAe,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE;QACxE,iBAAiB,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE;KACrE,CAAC;IACF,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,gBAAgB,CAAC,KAAK,CAAC;CAC9C,CAAC,CAAC","sourcesContent":["import { defineAction } from \"@agent-native/core/action\";\nimport { z } from \"zod\";\n\nimport { authorizeDispatchAdmin } from \"../server/lib/app-roles.js\";\nimport { setDreamSettings } from \"../server/lib/dreams-store.js\";\n\nexport default defineAction({\n description:\n \"Update recurring Dispatch dream settings without immediately running or applying a dream pass.\",\n authorize: authorizeDispatchAdmin,\n schema: z.object({\n enabled: z\n .boolean()\n .optional()\n .describe(\"Whether recurring dreams are on.\"),\n schedule: z\n .string()\n .optional()\n .describe('Five-field cron schedule, for example \"0 9 * * 1\".'),\n sourceId: z\n .string()\n .optional()\n .describe(\n \"Thread debug source id. Use 'all' for every connected source.\",\n ),\n sourceIds: z\n .array(z.string().min(1))\n .optional()\n .describe(\"Optional explicit source ids to scan together.\"),\n allSources: z.coerce\n .boolean()\n .optional()\n .describe(\"Scan every connected thread-debug source.\"),\n query: z\n .string()\n .optional()\n .describe(\"Optional search term for recurring dream passes.\"),\n limit: z.coerce.number().int().min(1).max(50).optional(),\n sourceTimeoutMs: z.coerce.number().int().min(1000).max(60000).optional(),\n sourceConcurrency: z.coerce.number().int().min(1).max(8).optional(),\n sourceStartStaggerMs: z.coerce.number().int().min(0).max(5000).optional(),\n threadConcurrency: z.coerce.number().int().min(1).max(10).optional(),\n threadTimeoutMs: z.coerce.number().int().min(1000).max(30000).optional(),\n minCandidateCount: z.coerce.number().int().min(0).max(50).optional(),\n }),\n run: async (input) => setDreamSettings(input),\n});\n"]}
|