robotrock 1.0.0 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/dist/agent-admin.d.ts +82 -0
  2. package/dist/agent-admin.js +938 -0
  3. package/dist/agent-admin.js.map +1 -0
  4. package/dist/ai/index.d.ts +6 -5
  5. package/dist/ai/index.js +682 -225
  6. package/dist/ai/index.js.map +1 -1
  7. package/dist/ai/trigger.d.ts +4 -3
  8. package/dist/ai/trigger.js +682 -225
  9. package/dist/ai/trigger.js.map +1 -1
  10. package/dist/ai/workflow.d.ts +4 -3
  11. package/dist/ai/workflow.js +679 -222
  12. package/dist/ai/workflow.js.map +1 -1
  13. package/dist/auth-headers-qL-ZeEtd.d.ts +13 -0
  14. package/dist/{client-CzVmjXpz.d.ts → client-YO9Y1rkH.d.ts} +51 -10
  15. package/dist/eve/agent/index.d.ts +164 -0
  16. package/dist/eve/agent/index.js +2854 -0
  17. package/dist/eve/agent/index.js.map +1 -0
  18. package/dist/eve/index.d.ts +8 -0
  19. package/dist/eve/index.js +639 -0
  20. package/dist/eve/index.js.map +1 -0
  21. package/dist/eve/tools/admin/assign-tasks.d.ts +39 -0
  22. package/dist/eve/tools/admin/assign-tasks.js +1060 -0
  23. package/dist/eve/tools/admin/assign-tasks.js.map +1 -0
  24. package/dist/eve/tools/admin/manage-groups.d.ts +53 -0
  25. package/dist/eve/tools/admin/manage-groups.js +1218 -0
  26. package/dist/eve/tools/admin/manage-groups.js.map +1 -0
  27. package/dist/eve/tools/admin/manage-team-members.d.ts +45 -0
  28. package/dist/eve/tools/admin/manage-team-members.js +1160 -0
  29. package/dist/eve/tools/admin/manage-team-members.js.map +1 -0
  30. package/dist/eve/tools/admin/query-tasks.d.ts +71 -0
  31. package/dist/eve/tools/admin/query-tasks.js +1161 -0
  32. package/dist/eve/tools/admin/query-tasks.js.map +1 -0
  33. package/dist/eve/tools/catalog/search-products.d.ts +57 -0
  34. package/dist/eve/tools/catalog/search-products.js +94 -0
  35. package/dist/eve/tools/catalog/search-products.js.map +1 -0
  36. package/dist/eve/tools/identity/index.d.ts +8 -0
  37. package/dist/eve/tools/identity/index.js +234 -0
  38. package/dist/eve/tools/identity/index.js.map +1 -0
  39. package/dist/eve/tools/identity/my-access.d.ts +18 -0
  40. package/dist/eve/tools/identity/my-access.js +187 -0
  41. package/dist/eve/tools/identity/my-access.js.map +1 -0
  42. package/dist/eve/tools/identity/whoami.d.ts +44 -0
  43. package/dist/eve/tools/identity/whoami.js +117 -0
  44. package/dist/eve/tools/identity/whoami.js.map +1 -0
  45. package/dist/eve/tools/inbox/create-task.d.ts +114 -0
  46. package/dist/eve/tools/inbox/create-task.js +1785 -0
  47. package/dist/eve/tools/inbox/create-task.js.map +1 -0
  48. package/dist/eve/tools/inbox/index.d.ts +6 -0
  49. package/dist/eve/tools/inbox/index.js +1785 -0
  50. package/dist/eve/tools/inbox/index.js.map +1 -0
  51. package/dist/eve/tools/index.d.ts +24 -0
  52. package/dist/eve/tools/index.js +2848 -0
  53. package/dist/eve/tools/index.js.map +1 -0
  54. package/dist/index-DoQN48Bm.d.ts +200 -0
  55. package/dist/index.d.ts +8 -44
  56. package/dist/index.js +842 -137
  57. package/dist/index.js.map +1 -1
  58. package/dist/schemas/index.d.ts +6 -1
  59. package/dist/schemas/index.js +251 -59
  60. package/dist/schemas/index.js.map +1 -1
  61. package/dist/tenant-5YKDrdC-.d.ts +23 -0
  62. package/dist/{tool-approval-bridge-DbwUEBHv.d.ts → tool-approval-bridge-aMA79Z1B.d.ts} +1 -1
  63. package/dist/tool-reply-guidance-C3qrT1In.d.ts +25 -0
  64. package/dist/trigger/index.d.ts +2 -1
  65. package/dist/trigger/index.js +543 -127
  66. package/dist/trigger/index.js.map +1 -1
  67. package/dist/{trigger-BCKBbAV7.d.ts → trigger-CXrbKVCL.d.ts} +2 -2
  68. package/dist/workflow/index.d.ts +2 -1
  69. package/dist/workflow/index.js +543 -127
  70. package/dist/workflow/index.js.map +1 -1
  71. package/package.json +69 -8
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/platform-actions.ts","../../src/eve/input-request.ts","../../src/eve/input-audit.ts","../../src/eve/tool-audit.ts","../../src/eve/tool-display.ts","../../src/eve/tool-result-display.ts","../../src/eve/tool-reply-guidance.ts","../../src/eve/tool-display-format.ts","../../src/eve/resume-message.ts","../../src/eve/index.ts"],"sourcesContent":["/**\n * Reserved inbox actions that reviewers can take outside your task's defined actions.\n * Agents and integrations must treat these as terminal — stop the run and do not retry sendToHuman.\n */\n\nexport const PLATFORM_MARK_DONE_ACTION_ID = \"robotrock:mark-done\" as const;\nexport const PLATFORM_REJECT_REQUEST_ACTION_ID = \"robotrock:reject-request\" as const;\n\nexport const PLATFORM_MARK_DONE_ACTION_TITLE = \"Mark as done\";\nexport const PLATFORM_REJECT_REQUEST_ACTION_TITLE = \"Reject request\";\n\nexport const PLATFORM_TERMINAL_ACTION_IDS = [\n PLATFORM_MARK_DONE_ACTION_ID,\n PLATFORM_REJECT_REQUEST_ACTION_ID,\n] as const;\n\nexport type PlatformTerminalActionId = (typeof PLATFORM_TERMINAL_ACTION_IDS)[number];\n\nexport type PlatformRejectRequestData = {\n feedback: string;\n};\n\nexport type HandledActionInput = {\n actionId: string;\n data?: unknown;\n handledBy?: string;\n handledAt?: number | Date;\n};\n\nexport type PlatformMarkDoneOutcome = {\n source: \"platform\";\n kind: \"mark-done\";\n actionId: typeof PLATFORM_MARK_DONE_ACTION_ID;\n data: Record<string, never>;\n handledBy?: string;\n handledAt?: Date;\n};\n\nexport type PlatformRejectRequestOutcome = {\n source: \"platform\";\n kind: \"reject-request\";\n actionId: typeof PLATFORM_REJECT_REQUEST_ACTION_ID;\n data: PlatformRejectRequestData;\n handledBy?: string;\n handledAt?: Date;\n};\n\nexport type TaskActionOutcome = {\n source: \"task\";\n actionId: string;\n data: unknown;\n handledBy?: string;\n handledAt?: Date;\n};\n\nexport type HandledOutcome =\n | PlatformMarkDoneOutcome\n | PlatformRejectRequestOutcome\n | TaskActionOutcome;\n\nexport class PlatformRejectRequestError extends Error {\n readonly actionId = PLATFORM_REJECT_REQUEST_ACTION_ID;\n readonly feedback: string;\n\n constructor(feedback: string, message?: string) {\n super(message ?? `Human rejected the request: ${feedback}`);\n this.name = \"PlatformRejectRequestError\";\n this.feedback = feedback;\n }\n}\n\nexport function isPlatformMarkDoneAction(\n actionId: string | undefined\n): actionId is typeof PLATFORM_MARK_DONE_ACTION_ID {\n return actionId === PLATFORM_MARK_DONE_ACTION_ID;\n}\n\nexport function isPlatformRejectRequestAction(\n actionId: string | undefined\n): actionId is typeof PLATFORM_REJECT_REQUEST_ACTION_ID {\n return actionId === PLATFORM_REJECT_REQUEST_ACTION_ID;\n}\n\nexport function isPlatformTerminalAction(\n actionId: string | undefined\n): actionId is PlatformTerminalActionId {\n return (\n isPlatformMarkDoneAction(actionId) || isPlatformRejectRequestAction(actionId)\n );\n}\n\nexport function parsePlatformRejectRequestData(\n data: unknown\n): PlatformRejectRequestData | null {\n if (data == null || typeof data !== \"object\") {\n return null;\n }\n const feedback = (data as { feedback?: unknown }).feedback;\n if (typeof feedback !== \"string\") {\n return null;\n }\n const trimmed = feedback.trim();\n if (!trimmed) {\n return null;\n }\n return { feedback: trimmed };\n}\n\nfunction toHandledAt(value: number | Date | undefined): Date | undefined {\n if (value === undefined) {\n return undefined;\n }\n return value instanceof Date ? value : new Date(value);\n}\n\n/**\n * Classify a handled task action as a platform terminal outcome or a normal task action.\n */\nexport function parseHandledOutcome(input: HandledActionInput): HandledOutcome {\n const handledAt = toHandledAt(input.handledAt);\n const handledBy = input.handledBy;\n\n if (isPlatformMarkDoneAction(input.actionId)) {\n return {\n source: \"platform\",\n kind: \"mark-done\",\n actionId: PLATFORM_MARK_DONE_ACTION_ID,\n data: {},\n handledBy,\n handledAt,\n };\n }\n\n if (isPlatformRejectRequestAction(input.actionId)) {\n return {\n source: \"platform\",\n kind: \"reject-request\",\n actionId: PLATFORM_REJECT_REQUEST_ACTION_ID,\n data: parsePlatformRejectRequestData(input.data) ?? { feedback: \"\" },\n handledBy,\n handledAt,\n };\n }\n\n return {\n source: \"task\",\n actionId: input.actionId,\n data: input.data ?? {},\n handledBy,\n handledAt,\n };\n}\n\n/**\n * Throw when a human rejected the request from the inbox (not your task's reject action).\n * Use after polling, webhooks, or getTask when you want agents to stop immediately.\n */\nexport function assertNotPlatformRejectRequest(\n actionId: string,\n data?: unknown\n): void {\n if (!isPlatformRejectRequestAction(actionId)) {\n return;\n }\n const parsed = parsePlatformRejectRequestData(data);\n throw new PlatformRejectRequestError(\n parsed?.feedback ?? \"No feedback provided\"\n );\n}\n\n/**\n * Returns true when the agent should stop — platform mark-done or reject-request.\n */\nexport function shouldStopAgentForHandledAction(actionId: string | undefined): boolean {\n return isPlatformTerminalAction(actionId);\n}\n","import type { SendToHumanActionInput } from \"../client.js\";\nimport {\n isPlatformTerminalAction,\n parsePlatformRejectRequestData,\n} from \"../platform-actions.js\";\n\n/** One selectable option in an Eve HITL input request. */\nexport type EveInputOption = {\n readonly id: string;\n readonly label: string;\n readonly description?: string;\n readonly style?: \"danger\" | \"default\" | \"primary\";\n};\n\n/** Eve HITL display mode — mirrors `InputRequest.display` from the eve runtime. */\nexport type EveInputRequestDisplay = \"confirmation\" | \"select\" | \"text\";\n\n/**\n * Minimal Eve `InputRequest` shape for RobotRock bridging. Intentionally\n * self-contained so the SDK does not depend on the `eve` package.\n */\nexport type EveInputRequest = {\n readonly requestId: string;\n readonly prompt: string;\n readonly display?: EveInputRequestDisplay;\n readonly allowFreeform?: boolean;\n readonly options?: readonly EveInputOption[];\n};\n\n/** Eve `InputResponse` shape returned when resuming a parked session. */\nexport type EveInputResponse = {\n readonly requestId: string;\n readonly optionId?: string;\n readonly text?: string;\n};\n\nexport const EVE_INPUT_SUBMIT_ACTION_ID = \"submit\" as const;\nexport const EVE_INPUT_OTHER_CHOICE_ID = \"__other__\" as const;\nexport const EVE_INPUT_OTHER_CHOICE_LABEL = \"Type your own answer\" as const;\n\nconst CONFIRMATION_DEFAULT_OPTIONS: readonly EveInputOption[] = [\n { id: \"approve\", label: \"Approve\", style: \"primary\" },\n { id: \"deny\", label: \"Deny\", style: \"danger\" },\n];\n\nconst SELECT_PER_OPTION_THRESHOLD = 6;\n\nfunction asRecord(value: unknown): Record<string, unknown> | null {\n if (value == null || typeof value !== \"object\" || Array.isArray(value)) {\n return null;\n }\n return value as Record<string, unknown>;\n}\n\nfunction readStringField(data: Record<string, unknown>, key: string): string | undefined {\n const value = data[key];\n if (typeof value !== \"string\") {\n return undefined;\n }\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : undefined;\n}\n\n/** Resolve the effective display mode when Eve omits `display`. */\nexport function resolveEveInputDisplay(\n request: EveInputRequest,\n toolName?: string\n): EveInputRequestDisplay {\n if (request.display) {\n return request.display;\n }\n if (toolName === \"ask_question\") {\n return request.options && request.options.length > 0 ? \"select\" : \"text\";\n }\n if (request.options && request.options.length > 0) {\n return \"select\";\n }\n return \"confirmation\";\n}\n\nfunction confirmationActions(request: EveInputRequest): readonly SendToHumanActionInput[] {\n const options =\n request.options && request.options.length > 0\n ? request.options\n : CONFIRMATION_DEFAULT_OPTIONS;\n\n return options.map((option) => ({\n id: option.id,\n title: option.label,\n ...(option.description ? { description: option.description } : {}),\n }));\n}\n\nfunction textSubmitAction(prompt: string): SendToHumanActionInput {\n return {\n id: EVE_INPUT_SUBMIT_ACTION_ID,\n title: \"Submit\",\n schema: {\n type: \"object\",\n required: [\"answer\"],\n properties: {\n answer: {\n type: \"string\",\n title: \"Your answer\",\n },\n },\n },\n ui: {\n answer: {\n \"ui:title\": prompt.trim() || \"Your answer\",\n \"ui:widget\": \"textarea\",\n },\n },\n };\n}\n\nfunction selectPerOptionActions(\n options: readonly EveInputOption[]\n): readonly SendToHumanActionInput[] {\n return options.map((option) => ({\n id: option.id,\n title: option.label,\n ...(option.description ? { description: option.description } : {}),\n }));\n}\n\nfunction selectFormAction(request: EveInputRequest): SendToHumanActionInput {\n const options = request.options ?? [];\n const allowFreeform = request.allowFreeform === true;\n const enumValues = options.map((option) => option.id);\n const enumNames = options.map((option) => option.label);\n\n if (allowFreeform) {\n enumValues.push(EVE_INPUT_OTHER_CHOICE_ID);\n enumNames.push(EVE_INPUT_OTHER_CHOICE_LABEL);\n }\n\n const properties: Record<string, unknown> = {\n choice: {\n type: \"string\",\n title: \"Choose one\",\n enum: enumValues,\n },\n };\n\n if (allowFreeform) {\n properties.other = {\n type: \"string\",\n title: \"Your answer\",\n };\n }\n\n const schema: Record<string, unknown> = {\n type: \"object\",\n required: [\"choice\"],\n properties,\n };\n\n if (allowFreeform) {\n schema.allOf = [\n {\n if: {\n properties: {\n choice: { const: EVE_INPUT_OTHER_CHOICE_ID },\n },\n required: [\"choice\"],\n },\n then: {\n required: [\"other\"],\n properties: {\n other: {\n type: \"string\",\n minLength: 1,\n },\n },\n },\n },\n ];\n }\n\n const ui: Record<string, unknown> = {\n choice: {\n \"ui:widget\": \"radio\",\n \"ui:enumNames\": enumNames,\n },\n };\n\n if (allowFreeform) {\n ui.other = {\n \"ui:placeholder\": \"Enter your answer\",\n };\n }\n\n return {\n id: EVE_INPUT_SUBMIT_ACTION_ID,\n title: \"Submit\",\n schema: schema as SendToHumanActionInput[\"schema\"],\n ui: ui as SendToHumanActionInput[\"ui\"],\n };\n}\n\n/** Keep select-form submissions mutually exclusive between preset choice and freeform other. */\nexport function normalizeEveSelectFormData(\n data: Record<string, unknown>\n): Record<string, unknown> {\n const choice =\n typeof data.choice === \"string\" ? data.choice.trim() : undefined;\n if (!choice) {\n return data;\n }\n if (choice === EVE_INPUT_OTHER_CHOICE_ID) {\n return {\n choice,\n ...(data.other !== undefined ? { other: data.other } : {}),\n };\n }\n return { choice };\n}\n\n/**\n * Map an Eve `InputRequest` to RobotRock inbox actions.\n */\nexport function eveInputRequestToActions(\n request: EveInputRequest,\n options?: { toolName?: string }\n): readonly SendToHumanActionInput[] {\n const display = resolveEveInputDisplay(request, options?.toolName);\n\n switch (display) {\n case \"confirmation\":\n return confirmationActions(request);\n case \"text\":\n return [textSubmitAction(request.prompt)];\n case \"select\": {\n const selectOptions = request.options ?? [];\n if (selectOptions.length === 0) {\n return [textSubmitAction(request.prompt)];\n }\n if (\n selectOptions.length <= SELECT_PER_OPTION_THRESHOLD &&\n request.allowFreeform !== true\n ) {\n return selectPerOptionActions(selectOptions);\n }\n return [selectFormAction(request)];\n }\n }\n}\n\n/** Task type slug for an Eve input request. */\nexport function eveInputRequestTaskType(\n request: EveInputRequest,\n options?: { toolName?: string }\n): string {\n const display = resolveEveInputDisplay(request, options?.toolName);\n if (display === \"confirmation\" && options?.toolName) {\n return `eve-approval:${options.toolName}`;\n }\n return `eve-input:${display}`;\n}\n\n/**\n * Map a handled RobotRock task action back to an Eve `InputResponse`.\n */\nexport function taskHandledToEveInputResponse(\n request: EveInputRequest,\n actionId: string,\n actionData: unknown,\n options?: { toolName?: string }\n): EveInputResponse {\n const base = { requestId: request.requestId };\n\n if (isPlatformTerminalAction(actionId)) {\n const feedback = parsePlatformRejectRequestData(actionData)?.feedback;\n return {\n ...base,\n optionId: \"deny\",\n ...(feedback ? { text: feedback } : {}),\n };\n }\n\n const display = resolveEveInputDisplay(request, options?.toolName);\n const selectOptions = request.options ?? [];\n const data = asRecord(actionData);\n\n if (display === \"confirmation\") {\n return { ...base, optionId: actionId };\n }\n\n const matchingOption = selectOptions.find((option) => option.id === actionId);\n if (matchingOption) {\n return { ...base, optionId: actionId };\n }\n\n if (actionId === EVE_INPUT_SUBMIT_ACTION_ID && data) {\n const submissionData =\n display === \"select\" && request.allowFreeform === true\n ? normalizeEveSelectFormData(data)\n : data;\n\n const answer = readStringField(submissionData, \"answer\");\n if (answer) {\n return { ...base, text: answer };\n }\n\n const choice = readStringField(submissionData, \"choice\");\n if (choice === EVE_INPUT_OTHER_CHOICE_ID) {\n const other = readStringField(submissionData, \"other\");\n if (other) {\n return { ...base, text: other };\n }\n }\n\n if (choice) {\n if (selectOptions.some((option) => option.id === choice)) {\n return { ...base, optionId: choice };\n }\n return { ...base, text: choice };\n }\n }\n\n if (data) {\n const answer = readStringField(data, \"answer\");\n if (answer) {\n return { ...base, text: answer };\n }\n }\n\n return { ...base, optionId: actionId };\n}\n","import {\n EVE_INPUT_SUBMIT_ACTION_ID,\n eveInputRequestToActions,\n resolveEveInputDisplay,\n type EveInputOption,\n type EveInputRequest,\n type EveInputRequestDisplay,\n type EveInputResponse,\n} from \"./input-request.js\";\n\nexport type EveInputAuditContext = {\n toolCallId: string;\n toolName?: string;\n requestId?: string;\n display?: EveInputRequestDisplay;\n toolInput?: unknown;\n};\n\nfunction matchOptionByText(\n text: string,\n options: readonly EveInputOption[]\n): EveInputOption | undefined {\n const normalized = text.trim().toLowerCase();\n if (normalized.length === 0) {\n return undefined;\n }\n\n const byId = options.find((option) => option.id.toLowerCase() === normalized);\n if (byId) {\n return byId;\n }\n\n const byLabel = options.find((option) => option.label.toLowerCase() === normalized);\n if (byLabel) {\n return byLabel;\n }\n\n const index = Number(normalized);\n if (Number.isInteger(index) && index > 0 && index <= options.length) {\n return options[index - 1];\n }\n\n return undefined;\n}\n\n/**\n * Map freeform composer text to an Eve `InputResponse`, mirroring Eve's\n * `resolveTextToResponse` rules (option id/label, numeric index, freeform text).\n */\nexport function resolveEveFreeformTextToInputResponse(\n request: EveInputRequest,\n text: string\n): EveInputResponse | undefined {\n const trimmed = text.trim();\n if (trimmed.length === 0) {\n return undefined;\n }\n\n const options = request.options ?? [];\n if (options.length > 0) {\n const matched = matchOptionByText(trimmed, options);\n if (matched) {\n return { requestId: request.requestId, optionId: matched.id };\n }\n }\n\n if (request.allowFreeform === true || options.length === 0) {\n return { requestId: request.requestId, text: trimmed };\n }\n\n return undefined;\n}\n\n/** Returns true for Eve's default approval gate (approve / deny options). */\nexport function isEveApprovalInputRequest(request: EveInputRequest): boolean {\n const options = request.options ?? [];\n return (\n options.length === 2 &&\n options[0]?.id === \"approve\" &&\n options[1]?.id === \"deny\"\n );\n}\n\nexport type EveInputActionSubmission = {\n actionId: string;\n actionTitle: string;\n formData: Record<string, unknown>;\n};\n\n/**\n * Map a resolved Eve `InputResponse` to RobotRock audit fields (action id/title).\n */\nexport function eveInputResponseToActionSubmission(\n request: EveInputRequest,\n response: EveInputResponse,\n options?: { toolName?: string }\n): EveInputActionSubmission {\n const display = resolveEveInputDisplay(request, options?.toolName);\n const actions = eveInputRequestToActions(request, options);\n\n if (response.optionId) {\n const action = actions.find((entry) => entry.id === response.optionId);\n if (action) {\n return {\n actionId: response.optionId,\n actionTitle: action.title,\n formData: {},\n };\n }\n\n const option = request.options?.find((entry) => entry.id === response.optionId);\n if (option) {\n return {\n actionId: response.optionId,\n actionTitle: option.label,\n formData: {},\n };\n }\n\n return {\n actionId: response.optionId,\n actionTitle: response.optionId,\n formData: {},\n };\n }\n\n const text = response.text?.trim();\n if (text) {\n if (display === \"text\") {\n return {\n actionId: EVE_INPUT_SUBMIT_ACTION_ID,\n actionTitle: text,\n formData: { answer: text },\n };\n }\n\n if (display === \"select\") {\n const option = request.options?.find((entry) => entry.id === text);\n if (option) {\n return {\n actionId: EVE_INPUT_SUBMIT_ACTION_ID,\n actionTitle: option.label,\n formData: { choice: option.id },\n };\n }\n return {\n actionId: EVE_INPUT_SUBMIT_ACTION_ID,\n actionTitle: text,\n formData: { choice: text },\n };\n }\n\n return {\n actionId: EVE_INPUT_SUBMIT_ACTION_ID,\n actionTitle: text,\n formData: { answer: text },\n };\n }\n\n return {\n actionId: EVE_INPUT_SUBMIT_ACTION_ID,\n actionTitle: \"Responded\",\n formData: {},\n };\n}\n\n/** Audit payload for `chat_action_input_submitted`. */\nexport function buildEveInputAuditSubmissionData(\n context: EveInputAuditContext,\n formData: Record<string, unknown>\n): Record<string, unknown> {\n return {\n toolCallId: context.toolCallId,\n ...(context.toolName ? { toolName: context.toolName } : {}),\n ...(context.requestId ? { requestId: context.requestId } : {}),\n ...(context.display ? { display: context.display } : {}),\n ...(context.toolInput !== undefined ? { toolInput: context.toolInput } : {}),\n ...formData,\n };\n}\n\n/**\n * Parse an `ask_question` tool result output into an Eve input response shape.\n */\nexport function parseEveAskQuestionToolOutput(\n output: unknown\n): Pick<EveInputResponse, \"optionId\" | \"text\"> | null {\n if (output == null || typeof output !== \"object\") {\n return null;\n }\n\n const record = output as Record<string, unknown>;\n const value =\n record.type === \"json\" && record.value != null && typeof record.value === \"object\"\n ? (record.value as Record<string, unknown>)\n : record;\n\n const optionId = typeof value.optionId === \"string\" ? value.optionId : undefined;\n const text = typeof value.text === \"string\" ? value.text : undefined;\n\n if (!optionId && !text) {\n return null;\n }\n\n return { ...(optionId ? { optionId } : {}), ...(text ? { text } : {}) };\n}\n","const MANAGE_TEAM_MEMBERS_TOOL_NAME = \"manage_team_members\";\nconst MANAGE_GROUPS_TOOL_NAME = \"manage_groups\";\nconst CREATE_INBOX_TASK_TOOL_NAME = \"create_robotrock_task\";\n\nconst MUTATING_TEAM_MEMBER_ACTIONS = new Set([\n \"invite\",\n \"update_role\",\n \"remove\",\n]);\n\nconst MUTATING_GROUP_ACTIONS = new Set([\n \"create\",\n \"update\",\n \"delete\",\n \"add_member\",\n \"remove_member\",\n]);\n\nconst SKIP_TOOL_NAMES = new Set([\n CREATE_INBOX_TASK_TOOL_NAME,\n \"ask_question\",\n \"closeChat\",\n \"requestActionInput\",\n]);\n\nexport type ChatToolAuditInput = Record<string, unknown>;\n\nexport type ChatToolAuditPayload = {\n toolCallId: string;\n toolName: string;\n input: ChatToolAuditInput;\n success: boolean;\n status: \"completed\" | \"failed\" | \"rejected\";\n error?: string;\n};\n\nfunction readAction(input: ChatToolAuditInput): string | undefined {\n const action = input.action;\n return typeof action === \"string\" && action.trim().length > 0\n ? action.trim()\n : undefined;\n}\n\n/** Whether a completed tool call should appear on the RobotRock audit trail. */\nexport function shouldAuditToolExecution(\n toolName: string,\n input: ChatToolAuditInput\n): boolean {\n if (SKIP_TOOL_NAMES.has(toolName)) {\n return false;\n }\n\n const action = readAction(input);\n if (toolName === MANAGE_TEAM_MEMBERS_TOOL_NAME) {\n return action != null && MUTATING_TEAM_MEMBER_ACTIONS.has(action);\n }\n if (toolName === MANAGE_GROUPS_TOOL_NAME) {\n return action != null && MUTATING_GROUP_ACTIONS.has(action);\n }\n\n return false;\n}\n\nconst AUDIT_INPUT_KEYS = new Set([\n \"action\",\n \"email\",\n \"userId\",\n \"role\",\n \"name\",\n \"groupId\",\n \"description\",\n]);\n\n/** Keep only fields useful for audit display (no secrets or large blobs). */\nexport function sanitizeToolAuditInput(\n input: ChatToolAuditInput\n): ChatToolAuditInput {\n const sanitized: ChatToolAuditInput = {};\n for (const [key, value] of Object.entries(input)) {\n if (!AUDIT_INPUT_KEYS.has(key)) {\n continue;\n }\n if (value == null || value === \"\") {\n continue;\n }\n if (typeof value === \"string\" || typeof value === \"boolean\") {\n sanitized[key] = value;\n continue;\n }\n if (typeof value === \"number\") {\n sanitized[key] = value;\n }\n }\n return sanitized;\n}\n\nexport function buildChatToolAuditPayload(input: {\n toolCallId: string;\n toolName: string;\n toolInput: ChatToolAuditInput;\n status: \"completed\" | \"failed\" | \"rejected\";\n error?: string;\n isError?: boolean;\n}): ChatToolAuditPayload | null {\n const sanitized = sanitizeToolAuditInput(input.toolInput);\n if (!shouldAuditToolExecution(input.toolName, sanitized)) {\n return null;\n }\n\n const success =\n input.status === \"completed\" && input.isError !== true;\n\n return {\n toolCallId: input.toolCallId,\n toolName: input.toolName,\n input: sanitized,\n success,\n status: input.status,\n ...(input.error ? { error: input.error } : {}),\n };\n}\n","import {\n resolveEveInputDisplay,\n type EveInputRequest,\n} from \"./input-request.js\";\n\n/** Default per-tool labels for common Eve demo/integration tools. */\nexport const DEFAULT_TOOL_DISPLAY_LABELS: Readonly<Record<string, string>> = {\n refund_charge: \"Refund a customer charge\",\n deploy_release: \"Deploy a release\",\n get_weather: \"Get weather\",\n get_my_access: \"Check my access\",\n whoami: \"Who am I\",\n create_robotrock_task: \"Create a RobotRock task\",\n search_products: \"Search products\",\n manage_team_members: \"Manage team members\",\n manage_groups: \"Manage groups\",\n query_tasks: \"Query tasks\",\n};\n\nlet toolDisplayLabelOverrides: Readonly<Record<string, string>> = {};\n\n/** Register additional or overriding tool display labels at runtime. */\nexport function setToolDisplayLabelOverrides(\n overrides: Readonly<Record<string, string>>\n): void {\n toolDisplayLabelOverrides = overrides;\n}\n\nfunction formatToolName(toolName: string): string {\n const spaced = toolName\n .replace(/([a-z0-9])([A-Z])/g, \"$1 $2\")\n .replace(/[-_]+/g, \" \")\n .trim();\n\n if (!spaced) {\n return \"Tool\";\n }\n\n return spaced.charAt(0).toUpperCase() + spaced.slice(1);\n}\n\n/** Resolve a user-facing label for a tool slug. */\nexport function getToolDisplayLabel(toolName: string): string {\n const trimmed = toolName.trim();\n if (!trimmed) {\n return \"Tool\";\n }\n\n return (\n toolDisplayLabelOverrides[trimmed] ??\n DEFAULT_TOOL_DISPLAY_LABELS[trimmed] ??\n formatToolName(trimmed)\n );\n}\n\n/** Format an Eve input request prompt for human-facing approval UIs. */\nexport function formatEveApprovalTitle(\n request: EveInputRequest,\n toolName?: string\n): string {\n const display = resolveEveInputDisplay(request, toolName);\n if (display !== \"confirmation\" || !toolName) {\n return request.prompt;\n }\n\n return `Approve: ${getToolDisplayLabel(toolName)}`;\n}\n","import type {\n ToolDisplayEnvelope,\n ToolDisplayMetadata,\n UiSchema,\n} from \"@robotrock/core/schemas\";\n\nexport type ToolDisplayResultOptions = {\n widget?: string;\n title?: string;\n description?: string;\n ui?: Record<string, UiSchema>;\n};\n\n/**\n * Wrap tool execute output with optional dashboard display hints.\n * Agents return plain JSON by default; use this when schema-driven widgets help.\n */\nexport function toolDisplayResult<T extends Record<string, unknown>>(\n data: T,\n options?: ToolDisplayResultOptions\n): ToolDisplayEnvelope<T> {\n const display: ToolDisplayMetadata | undefined =\n options?.widget || options?.title || options?.description\n ? {\n ...(options.widget ? { widget: options.widget } : {}),\n ...(options.title ? { title: options.title } : {}),\n ...(options.description ? { description: options.description } : {}),\n }\n : undefined;\n\n return {\n ...(display ? { display } : {}),\n data,\n ...(options?.ui ? { ui: options.ui } : {}),\n };\n}\n","/** Field name agents read; dashboard widgets must ignore when rendering. */\nexport const TOOL_REPLY_GUIDANCE_FIELD = \"replyGuidance\" as const;\n\nexport const WHOAMI_REPLY_GUIDANCE =\n \"The dashboard shows a profile card with name, email, workspace, role, and groups. Do not restate those in your reply. Only add context not in the card (e.g. permissions, refund approval rules, missing group membership).\";\n\nexport const MY_ACCESS_REPLY_GUIDANCE =\n \"Access details may render in chat UI. Do not restate role, groups, or admin capabilities if already visible. Only explain what the user can or cannot do for their question (e.g. finance group required for refunds ≥ $10,000). When access.tenantAdmin is false and the user needs manageTeam, manageGroups, or query-tasks capabilities, explain briefly then call ask_question to offer sending an admin request to tenant admins — do not tell them to find an admin manually without offering delegation first.\";\n\nexport const CREATE_INBOX_TASK_REPLY_GUIDANCE =\n \"A task card shows title, assignee, and inbox status in chat. Do not restate task ID, assignee, or delegation details from the card. Only mention next steps or answer the user's question.\";\n\nexport const SEARCH_PRODUCTS_REPLY_GUIDANCE =\n \"Product results render as a list card in chat. Do not restate product names, prices, or SKUs. Only add context not in the list (e.g. no matches, recommendations).\";\n\nexport const MANAGE_TEAM_MEMBERS_LIST_REPLY_GUIDANCE =\n \"Team members render as a list card in chat. Do not restate names, emails, or roles from the list. Only add context not shown (e.g. duplicates, next admin actions).\";\n\nexport const MANAGE_TEAM_MEMBERS_DETAIL_REPLY_GUIDANCE =\n \"Team member details render in chat UI. Do not restate name, email, or role from the card. Only add next steps or policy context.\";\n\nexport const MANAGE_GROUPS_LIST_REPLY_GUIDANCE =\n \"Groups render as a list card in chat. Do not restate group names, slugs, or descriptions from the list. Use slug (not internal id) for get, update, delete, and membership actions. Only add context not shown.\";\n\nexport const MANAGE_GROUPS_DETAIL_REPLY_GUIDANCE =\n \"Group details render in chat UI. Do not restate fields already visible in the card. Only add next steps.\";\n\nexport const QUERY_TASKS_LIST_REPLY_GUIDANCE =\n \"Tasks render as a list card in chat. Do not restate task names, ids, or statuses from the list. Only add context not shown (e.g. filters applied, recommended next action).\";\n\nexport const QUERY_TASKS_DETAIL_REPLY_GUIDANCE =\n \"Task details render in chat UI. Do not restate fields already visible in the card. Only add analysis or next steps.\";\n\nexport const ASSIGN_TASKS_REPLY_GUIDANCE =\n \"Reassignment results render in chat UI. Do not restate task ids or assignee emails from the card. Only mention failures, partial success, or next steps.\";\n\nexport const REFUND_CHARGE_REPLY_GUIDANCE =\n \"Refund details render in chat UI. Do not restate charge id, amount, or status from the card. Only add policy context or next steps.\";\n\nexport const DEPLOY_RELEASE_REPLY_GUIDANCE =\n \"Deploy details render in chat UI. Do not restate service, version, or environment from the card. Only add rollout context or next steps.\";\n\nexport const GET_WEATHER_REPLY_GUIDANCE =\n \"Weather details render in chat UI. Do not restate city, condition, or temperature from the card. Only add conversational context if needed.\";\n\nexport const ADMIN_MUTATION_REPLY_GUIDANCE =\n \"The action result renders in chat UI. Do not restate fields already visible in the card. Confirm outcome briefly or add next steps only.\";\n\nexport type ToolResultWithReplyGuidance<T extends Record<string, unknown>> = T & {\n replyGuidance: string;\n};\n\n/** Attach model-facing narration hints to a tool execute result. */\nexport function withReplyGuidance<T extends Record<string, unknown>>(\n result: T,\n guidance: string\n): ToolResultWithReplyGuidance<T> {\n return {\n ...result,\n [TOOL_REPLY_GUIDANCE_FIELD]: guidance,\n };\n}\n\n/** Remove agent-only fields before showing raw JSON in the dashboard. */\nexport function stripAgentOnlyToolFields(output: unknown): unknown {\n if (typeof output !== \"object\" || output === null || Array.isArray(output)) {\n return output;\n }\n\n const record = { ...(output as Record<string, unknown>) };\n delete record[TOOL_REPLY_GUIDANCE_FIELD];\n return record;\n}\n","import type { UiSchema } from \"@robotrock/core/schemas\";\nimport { toolDisplayResult } from \"./tool-result-display.js\";\nimport { withReplyGuidance } from \"./tool-reply-guidance.js\";\n\nexport type FormatToolObjectResultOptions = {\n title?: string;\n description?: string;\n ui?: Record<string, UiSchema>;\n replyGuidance: string;\n};\n\nexport type FormatToolListResultOptions = {\n title: string;\n itemUi?: UiSchema;\n /** Composite widget for each row (uses list layout instead of table). */\n itemWidget?: string;\n replyGuidance: string;\n};\n\n/** Wrap a flat object for schema-driven chat rendering. */\nexport function formatToolObjectResult(\n data: Record<string, unknown>,\n options: FormatToolObjectResultOptions\n) {\n return withReplyGuidance(\n toolDisplayResult(data, {\n title: options.title,\n description: options.description,\n ui: options.ui,\n }),\n options.replyGuidance\n );\n}\n\n/** Wrap an array field as a list widget inside a display envelope. */\nexport function formatToolListResult(\n listKey: string,\n items: Record<string, unknown>[],\n options: FormatToolListResultOptions\n) {\n const listFieldUi = options.itemWidget\n ? {\n \"ui:widget\": \"list\" as const,\n items: {\n \"ui:widget\": options.itemWidget,\n ...(options.itemUi ?? {}),\n },\n }\n : {\n \"ui:widget\": \"table\" as const,\n ...(options.itemUi ? { items: options.itemUi } : {}),\n };\n\n return formatToolObjectResult(\n { [listKey]: items },\n {\n title: options.title,\n ui: {\n [listKey]: listFieldUi,\n },\n replyGuidance: options.replyGuidance,\n }\n );\n}\n\nexport function isAgentAdminErrorResult(\n result: unknown\n): result is { ok: false; message: string } {\n return (\n typeof result === \"object\" &&\n result !== null &&\n (result as { ok?: unknown }).ok === false &&\n typeof (result as { message?: unknown }).message === \"string\"\n );\n}\n","import type { RobotRockWebhookPayload } from \"../webhook.js\";\n\n/** Build the assistant resume prompt when an inbox task linked to a chat is handled. */\nexport function buildTaskHandledResumeMessage(\n payload: RobotRockWebhookPayload\n): string {\n const handledBy = payload.handledBy?.trim() || \"someone\";\n const actionTitle = payload.action.title.trim();\n return `RobotRock task ${payload.taskId} was handled: ${actionTitle} by ${handledBy}. Briefly tell the user what was decided and what happens next.`;\n}\n","export {\n EVE_INPUT_OTHER_CHOICE_ID,\n EVE_INPUT_OTHER_CHOICE_LABEL,\n EVE_INPUT_SUBMIT_ACTION_ID,\n eveInputRequestTaskType,\n eveInputRequestToActions,\n normalizeEveSelectFormData,\n resolveEveInputDisplay,\n taskHandledToEveInputResponse,\n type EveInputOption,\n type EveInputRequest,\n type EveInputRequestDisplay,\n type EveInputResponse,\n} from \"./input-request.js\";\nexport {\n buildEveInputAuditSubmissionData,\n eveInputResponseToActionSubmission,\n isEveApprovalInputRequest,\n parseEveAskQuestionToolOutput,\n resolveEveFreeformTextToInputResponse,\n type EveInputActionSubmission,\n type EveInputAuditContext,\n} from \"./input-audit.js\";\nexport {\n buildChatToolAuditPayload,\n sanitizeToolAuditInput,\n shouldAuditToolExecution,\n type ChatToolAuditInput,\n type ChatToolAuditPayload,\n} from \"./tool-audit.js\";\nexport {\n DEFAULT_TOOL_DISPLAY_LABELS,\n formatEveApprovalTitle,\n getToolDisplayLabel,\n setToolDisplayLabelOverrides,\n} from \"./tool-display.js\";\nexport {\n toolDisplayResult,\n type ToolDisplayResultOptions,\n} from \"./tool-result-display.js\";\nexport {\n formatToolListResult,\n formatToolObjectResult,\n isAgentAdminErrorResult,\n type FormatToolListResultOptions,\n type FormatToolObjectResultOptions,\n} from \"./tool-display-format.js\";\nexport {\n CREATE_INBOX_TASK_REPLY_GUIDANCE,\n MY_ACCESS_REPLY_GUIDANCE,\n SEARCH_PRODUCTS_REPLY_GUIDANCE,\n MANAGE_TEAM_MEMBERS_LIST_REPLY_GUIDANCE,\n MANAGE_TEAM_MEMBERS_DETAIL_REPLY_GUIDANCE,\n MANAGE_GROUPS_LIST_REPLY_GUIDANCE,\n MANAGE_GROUPS_DETAIL_REPLY_GUIDANCE,\n QUERY_TASKS_LIST_REPLY_GUIDANCE,\n QUERY_TASKS_DETAIL_REPLY_GUIDANCE,\n REFUND_CHARGE_REPLY_GUIDANCE,\n DEPLOY_RELEASE_REPLY_GUIDANCE,\n GET_WEATHER_REPLY_GUIDANCE,\n ADMIN_MUTATION_REPLY_GUIDANCE,\n TOOL_REPLY_GUIDANCE_FIELD,\n WHOAMI_REPLY_GUIDANCE,\n stripAgentOnlyToolFields,\n withReplyGuidance,\n type ToolResultWithReplyGuidance,\n} from \"./tool-reply-guidance.js\";\n/** Hook slug advertised in GET /eve/v1/info for RobotRock-ready auto-detection. */\nexport const ROBOTROCK_READY_HOOK_SLUG = \"robotrock-ready\";\n\nexport { buildTaskHandledResumeMessage } from \"./resume-message.js\";\n"],"mappings":"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","names":[]}
@@ -0,0 +1,39 @@
1
+ import * as eve_tools from 'eve/tools';
2
+ import { T as ToolResultWithReplyGuidance } from '../../../tool-reply-guidance-C3qrT1In.js';
3
+ import * as _robotrock_core from '@robotrock/core';
4
+ import { z } from 'zod';
5
+
6
+ declare const ASSIGN_TASKS_TOOL_NAME = "assign_tasks";
7
+ declare const assignTasksInputSchema: z.ZodObject<{
8
+ taskIds: z.ZodArray<z.ZodString>;
9
+ assignTo: z.ZodObject<{
10
+ users: z.ZodOptional<z.ZodArray<z.ZodString>>;
11
+ groups: z.ZodOptional<z.ZodArray<z.ZodString>>;
12
+ }, z.core.$strip>;
13
+ }, z.core.$strip>;
14
+ declare function defineAssignTasksTool(): eve_tools.ToolDefinition<{
15
+ taskIds: string[];
16
+ assignTo: {
17
+ users?: string[] | undefined;
18
+ groups?: string[] | undefined;
19
+ };
20
+ }, ToolResultWithReplyGuidance<_robotrock_core.ToolDisplayEnvelope<Record<string, unknown>>> | {
21
+ ok: false;
22
+ status: number;
23
+ message: string;
24
+ response: unknown;
25
+ }>;
26
+ declare const assignTasksTool: eve_tools.ToolDefinition<{
27
+ taskIds: string[];
28
+ assignTo: {
29
+ users?: string[] | undefined;
30
+ groups?: string[] | undefined;
31
+ };
32
+ }, ToolResultWithReplyGuidance<_robotrock_core.ToolDisplayEnvelope<Record<string, unknown>>> | {
33
+ ok: false;
34
+ status: number;
35
+ message: string;
36
+ response: unknown;
37
+ }>;
38
+
39
+ export { ASSIGN_TASKS_TOOL_NAME, assignTasksInputSchema, assignTasksTool, defineAssignTasksTool };