API Reference
Complete reference for all resolver functions registered in foundation/src/index.ts. Resolvers are invoked from the frontend via @forge/bridge invoke(name, payload).
All resolvers receive { payload, context } where context.accountId is the authenticated Jira user and context.cloudId is the Jira Cloud site ID.
Table of Contents
Section titled “Table of Contents”- Lenses
- Hierarchy
- Inline Edit
- Views
- Sync Agents (Generators)
- Permissions
- Dependencies
- Field Metadata
- Job Status
- Realtime
- Budget
- Admin
- Announcements
- AI / Portfolio Intelligence
- Resource Management
- Teams
- Holiday Calendars
- Absences
- Baselines
- Leveling
- Skills
- Placeholders
- GDPR Compliance
- User Preferences
- Support Chat
- Search & Projects
- Import
- Feature Flags
- Monitoring
- Utility
- Rovo Agent Dispatchers
Lenses
Section titled “Lenses”listLenses
Section titled “listLenses”List all lenses the current user can access.
| Guards | withSchema |
| Permission | Returns lenses where user is owner or has any grant |
| Payload | (none) |
| Returns | { lenses: Array<{ id, numeric_id, name, description, mode, owner_account_id, archived, issue_count, sync_agent_count, created_at, updated_at }> } |
createLens
Section titled “createLens”Create a new lens with a default view.
| License | Required |
| Payload | { name: string, description?: string } |
| Returns | { lens: { id, name, ... } } |
| Errors | Name is required, license_inactive |
| Side effects | Creates a default view; rolls back lens on view creation failure |
updateLens
Section titled “updateLens”Rename or update a lens description.
| License | Required |
| Permission | control on the lens |
| Payload | { lensId: string, name: string, description?: string } |
| Returns | { success: true } |
deleteLens
Section titled “deleteLens”Delete a lens and all associated data.
| License | Required |
| Permission | control on the lens |
| Payload | { lensId: string } |
| Returns | { success: true } |
Hierarchy
Section titled “Hierarchy”getLensView
Section titled “getLensView”Primary data-loading endpoint. Returns the full hierarchy tree, views, sync agents, and permissions for a lens.
| License | Required |
| Permission | view (returns user’s permission level for UI gating) |
| Payload | { lensId?: string, numericId?: number } |
| Returns | { rows, columns, views, syncAgents, lens, totalCount, userPermissionLevel, edition, ... } |
| Notes | Supports friendly URL lookup via numericId. Filters issues by Jira BROWSE permission. Triggers auto-sync staleness check. |
addIssueById
Section titled “addIssueById”Add an existing Jira issue to a lens by its issue ID or key.
| License | Required |
| Permission | edit on the lens |
| Payload | { lensId: string, issueIdOrKey: string, parentId?: string } |
| Returns | { node: HierarchyNode, issueData: CachedIssue } |
| Errors | Issue already exists in this lens |
createAndAddIssue
Section titled “createAndAddIssue”Create a new Jira issue and add it to the lens in one operation.
| License | Required |
| Permission | edit on the lens |
| Payload | { lensId: string, summary: string, projectKey: string, issueTypeName?: string, parentId?: string, parentIssueKey?: string, parentIssueId?: string } |
| Returns | { node, issueData } |
| API Cost | 4+ points (create issue + fetch + cache) |
getProjectContext
Section titled “getProjectContext”Get the project key context for a lens (inferred from sync agents).
| Permission | view on the lens |
| Payload | { lensId: string } |
| Returns | `{ projectKey: string |
getInlineCreateContext
Section titled “getInlineCreateContext”Get project key + issue types for inline issue creation.
| Permission | view on the lens |
| Payload | { lensId: string, parentIssueKey?: string } |
| Returns | { projectKey, issueTypes, parentIssueId } |
addFlexItem
Section titled “addFlexItem”Add a non-Jira grouping node (flex item) to the hierarchy.
| License | Required |
| Permission | edit on the lens |
| Payload | { lensId: string, name: string, parentId?: string, description?: string, icon?: string } |
| Returns | { node: HierarchyNode } |
addMilestone
Section titled “addMilestone”Add a milestone marker to the hierarchy.
| License | Required |
| Permission | edit on the lens |
| Payload | { lensId: string, name: string, date: string, parentId?: string } |
| Returns | { node: HierarchyNode } |
moveNode
Section titled “moveNode”Move a node to a new parent and/or position in the hierarchy.
| License | Required |
| Permission | edit on the lens |
| Payload | { lensId: string, nodeId: string, newParentId?: string, newPosition?: number, beforeNodeId?: string, afterNodeId?: string } |
| Returns | { success: true } |
deleteNode
Section titled “deleteNode”Remove a node (and optionally its subtree) from the hierarchy.
| License | Required |
| Permission | edit on the lens |
| Payload | { lensId: string, nodeId: string, deleteChildren?: boolean } |
| Returns | { success: true, deletedCount } |
bulkAddByKey
Section titled “bulkAddByKey”Add multiple Jira issues to a lens by their issue keys.
| License | Required |
| Permission | edit on the lens |
| Payload | { lensId: string, issueKeys: string[], parentId?: string } |
| Returns | { added, skipped, errors } |
Inline Edit
Section titled “Inline Edit”updateField
Section titled “updateField”Update a Jira issue field and sync the cache.
| License | Required |
| Permission | edit on the lens |
| Payload | { lensId: string, issueKey: string, field: string, value: any } |
| Returns | { success: true, updatedFields?: { status_name, status_category, assignee_display_name, ... } } |
| API Cost | 4 points (2 for update + 2 for refetch); status transitions cost 4-6 points |
| Security | Verifies issue belongs to the specified lens to prevent cross-lens modification |
| Notes | Handles start_date field ID resolution dynamically (QA-BUG-72). Status field triggers a transition workflow instead of a direct PUT. |
Supported fields and their Jira mappings:
| Client Field | Jira API Field |
|---|---|
summary | summary |
status | Transitions API (special) |
assignee | assignee (wrapped as { accountId }) |
reporter | reporter (wrapped as { accountId }) |
priority | priority (wrapped as { id }) |
duedate / due_date | duedate |
start_date | Resolved dynamically (customfield_10015 or customfield_10068) |
labels | labels |
story_points | customfield_10016 |
sprint | customfield_10020 (plain integer, not { id }) |
components | components |
fixVersions | fixVersions |
affects_versions | versions |
customfield_* | Passed through directly |
getTransitions
Section titled “getTransitions”Get available status transitions for an issue.
| Permission | view on the lens (optional lensId) |
| Payload | { issueKey: string, lensId?: string } |
| Returns | { transitions: Array<{ id, name, toStatusId, toStatusName, toStatusCategory }> } |
| API Cost | 2 points |
getPriorities
Section titled “getPriorities”Get all Jira priority levels.
| Auth | Required |
| Payload | (none) |
| Returns | { priorities: Array<{ id, name, iconUrl }> } |
| API Cost | 1 point |
getSprints
Section titled “getSprints”Get sprints for a board.
| Auth | Required |
| Payload | { boardId: string } |
| Returns | { sprints: Array<{ id, name, state }> } |
getFieldOptions
Section titled “getFieldOptions”Get available options for a custom field on a specific issue.
| Auth | Required |
| Payload | { issueKey: string, fieldId: string } |
| Returns | { options: Array<{ id, value, ... }> } |
| API Cost | 1 point |
getProjectComponents
Section titled “getProjectComponents”Get components for a project (KVS-cached, 1-hour TTL).
| Auth | Required |
| Payload | { projectKey: string } |
| Returns | { components: Array<{ id, name }> } |
getProjectVersions
Section titled “getProjectVersions”Get versions for a project (KVS-cached, 1-hour TTL).
| Auth | Required |
| Payload | { projectKey: string } |
| Returns | { versions: Array<{ id, name, released }> } |
listViews
Section titled “listViews”List all views for a lens.
| Guards | withSchema, withLensPermission('view') |
| Payload | { lensId: string } |
| Returns | { views: Array<{ id, lens_id, name, is_default, columns, settings_json, ... }> } |
updateView
Section titled “updateView”Update a view’s configuration (columns, formatting, Gantt settings, etc.).
| License | Required |
| Permission | edit on the lens |
| Payload | { viewId: string, columns?, name?, density?, wrapRows?, formattingRules?, ganttEnabled?, ganttWidth?, ganttScale?, sortConfig?, pipeline?, ... } |
| Returns | { success: true } |
createView
Section titled “createView”Create a new view for a lens.
| License | Required |
| Permission | edit on the lens |
| Payload | { lensId: string, name: string, columns?: array } |
| Returns | { view: { id, lens_id, name, columns, ... } } |
deleteView
Section titled “deleteView”Delete a view (cannot delete the default view).
| License | Required |
| Permission | edit on the lens |
| Payload | { lensId: string, viewId: string } |
| Returns | { success: true } |
| Errors | Cannot delete the default view |
setDefaultView
Section titled “setDefaultView”Set which view is the default for a lens.
| License | Required |
| Permission | edit on the lens |
| Payload | { lensId: string, viewId: string } |
| Returns | { success: true } |
Sync Agents (Generators)
Section titled “Sync Agents (Generators)”createSyncAgent
Section titled “createSyncAgent”Create a new sync agent for a lens.
| License | Required |
| Permission | edit on the lens |
| Payload | { lensId: string, generatorType: string, config: object, parentNodeId?: string } |
| Returns | { generator: { id, lens_id, generator_type, config, ... } } |
listSyncAgents
Section titled “listSyncAgents”List all sync agents for a lens.
| Permission | view on the lens |
| Payload | { lensId: string } |
| Returns | { syncAgents: Array<{ id, lens_id, generator_type, config, last_executed_at, ... }> } |
updateSyncAgent
Section titled “updateSyncAgent”Update a sync agent’s configuration.
| License | Required |
| Permission | edit on the lens |
| Payload | { lensId: string, generatorId: string, config?: object, parentNodeId?: string } |
| Returns | { success: true } |
deleteSyncAgent
Section titled “deleteSyncAgent”Delete a sync agent.
| License | Required |
| Permission | edit on the lens |
| Payload | { lensId: string, generatorId: string } |
| Returns | { success: true } |
reorderSyncAgents
Section titled “reorderSyncAgents”Reorder sync agents for a lens.
| License | Required |
| Permission | edit on the lens |
| Payload | { lensId: string, orderedIds: string[] } |
| Returns | { success: true } |
executeSyncAgents
Section titled “executeSyncAgents”Trigger async execution of all sync agents for a lens.
| License | Required |
| Permission | edit on the lens |
| Payload | { lensId: string } |
| Returns | { status: 'executing', jobId: string } |
| Errors | Sync agents are already running for this lens |
| Notes | Pushes to the generator-queue with per-lens concurrency. Uses KVS lease to prevent double-dispatch. Active job marker has 15-min TTL. |
checkSyncFreshness
Section titled “checkSyncFreshness”Check if any sync agents need re-execution based on JQL result count changes.
| Payload | { lensId: string } |
| Returns | { stale: boolean, details: ... } |
Permissions
Section titled “Permissions”getPermissions
Section titled “getPermissions”Get all permission grants for a lens.
| Guards | withSchema, withLensPermission('control') |
| Payload | { lensId: string } |
| Returns | { permissions: Array<{ id, lens_id, grantee_type, grantee_id, permission_level }> } |
grantPermission
Section titled “grantPermission”Grant a permission on a lens.
| Permission | control on the lens |
| Payload | `{ lensId: string, granteeType: ‘user' |
| Returns | { permission: { id, ... } } |
| Validation | Runtime enum checks on granteeType and permissionLevel. granteeId required for non-everyone grants. |
revokePermission
Section titled “revokePermission”Revoke a specific permission grant.
| Permission | control on the lens |
| Payload | { lensId: string, permissionId: string } |
| Returns | { success: true } |
searchUsers
Section titled “searchUsers”Search Jira users (for permission sharing dialogs).
| Guards | withSchema, withAuth |
| Permission | view on the lens |
| Payload | { lensId: string, query: string } |
| Returns | { users: Array<{ accountId, displayName, avatarUrl }> } |
| API | Uses asApp() — /rest/api/3/user/search |
searchAssignableUsers
Section titled “searchAssignableUsers”Search users assignable to issues in a specific project.
| Permission | edit on the lens |
| Payload | { lensId: string, query: string, projectKey?: string } |
| Returns | { users: Array<{ accountId, displayName, avatarUrl }> } |
| API | Uses asUser() — /rest/api/3/user/assignable/search scoped to project |
searchGroups
Section titled “searchGroups”Search Jira groups.
| Guards | withSchema, withAuth |
| Permission | view on the lens |
| Payload | { lensId: string, query: string } |
| Returns | { groups: Array<{ name }> } |
transferOwnership
Section titled “transferOwnership”Transfer lens ownership to another user.
| Permission | Must be the lens owner or a Jira site admin |
| Payload | { lensId: string, newOwnerAccountId: string } |
| Returns | { success: true, newOwnerAccountId } |
Dependencies
Section titled “Dependencies”createIssueLink
Section titled “createIssueLink”Create a Jira issue link (dependency) between two issues.
| Permission | edit on the lens |
| Payload | `{ lensId: string, fromIssueKey: string, toIssueKey: string, dependencyType?: ‘FS' |
| Returns | { success: true, linkId } |
| Validation | Cycle detection before creating the link |
deleteIssueLink
Section titled “deleteIssueLink”Delete a Jira issue link.
| Permission | edit on the lens |
| Payload | { lensId: string, linkId: string } |
| Returns | { success: true } |
getIssueLinkTypes
Section titled “getIssueLinkTypes”Get available Jira issue link types.
| Auth | Required |
| Returns | { linkTypes: Array<{ id, name, inward, outward }> } |
getIssueLinks
Section titled “getIssueLinks”Get dependency links for issues in a lens.
| Permission | view on the lens |
| Payload | { lensId: string } |
| Returns | { links: Array<{ ... }> } |
updateDependencyLag
Section titled “updateDependencyLag”Update the lag days for a dependency.
| Permission | edit on the lens |
| Payload | { lensId: string, fromIssueKey: string, toIssueKey: string, lagDays: number, dependencyType?: string } |
| Returns | { success: true } |
getDependencyLags
Section titled “getDependencyLags”Get all dependency lag overrides for a lens.
| Permission | view on the lens |
| Payload | { lensId: string } |
| Returns | { lags: Array<{ fromIssueKey, toIssueKey, lagDays, dependencyType }> } |
Field Metadata
Section titled “Field Metadata”getFieldMetadata
Section titled “getFieldMetadata”Fetch all Jira fields (standard + custom) with type classification.
| Auth | None (app-level) |
| Payload | (none) |
| Returns | { fields: Array<{ id, name, type, isCustom }> } |
| API Cost | 1 point |
| Notes | Maps Jira custom field schemas to Foundation types (e.g., com.pyxis.greenhopper.jira:gh-sprint -> sprint) |
getWorkIssueHierarchy
Section titled “getWorkIssueHierarchy”Resolve the work issue type hierarchy for a project.
| Payload | { projectIdOrKey?: string } |
| Returns | { hierarchy: Array<{ level, issueTypes }> } |
Job Status
Section titled “Job Status”getJobStatus
Section titled “getJobStatus”Poll the status of an async job (sync agent execution, etc.).
| Auth | Required |
| Payload | { jobId: string } |
| Returns | Job status object from KVS, or { status: 'unknown' } |
| Security | Validates jobId format (hex/dash, max 64 chars). Verifies caller has view permission on the job’s lens (AUDIT-009). |
Realtime
Section titled “Realtime”getRealtimeToken
Section titled “getRealtimeToken”Get a signed Forge Realtime token for subscribing to lens events.
| Permission | view on the lens |
| Payload | { lensId: string } |
| Returns | { channel: string, token: string } |
| Errors | { channel, token: '', error: 'realtime_unavailable' } if signing fails |
Budget
Section titled “Budget”getBudgetStatus
Section titled “getBudgetStatus”Get the current rate limit budget status.
| Auth | Required |
| Returns | { remaining, used, limit, resetsAt } |
All admin resolvers require the user to be a Jira site admin.
getAdminStats
Section titled “getAdminStats”Get app-wide statistics.
| Guards | withSchema, withAdmin |
| Returns | { cachedIssues, lenses, hierarchyNodes, rateLimitUsagePercent } |
refreshCache
Section titled “refreshCache”Trigger a synchronous full cache refresh (legacy).
| Admin | Required |
| Returns | { refreshed, removed } |
| Notes | Has 10-minute cooldown. Replaced by startCacheRefresh for async operation. |
startCacheRefresh
Section titled “startCacheRefresh”Start an async per-project cache refresh.
| Admin | Required |
| Payload | { projectKeys: string[] } (max 20) |
| Returns | { status: 'queued', jobId, projectCount, budget } |
| Notes | Pushes one queue message per project to cache-refresh-queue. |
getCacheRefreshJob
Section titled “getCacheRefreshJob”Poll the status of a cache refresh job.
| Admin | Required |
| Payload | { jobId: string } |
| Returns | CacheRefreshJob object with per-project status |
getProjectCacheStats
Section titled “getProjectCacheStats”Get per-project cache statistics.
| Admin | Required |
| Returns | { projects: Array<{ projectKey, issueCount, oldestCached, newestCached }> } |
setCssOverride / getCssOverride
Section titled “setCssOverride / getCssOverride”Set/get custom CSS overrides for the app.
| setCssOverride | Admin required. { css: string } (max 50KB). |
| getCssOverride | No auth required (all users load CSS). Returns { css }. |
checkIsAdmin
Section titled “checkIsAdmin”Check if the current user is a Jira site admin.
| Returns | { isAdmin: boolean } |
resetAllData
Section titled “resetAllData”Wipe ALL Foundation data (reset to clean install).
| Admin | Required |
| Returns | { success: true } |
| Notes | Deletes children-first for crash safety. Sets KVS recovery flag before starting. |
getInstallationStats
Section titled “getInstallationStats”Get installation statistics for Tier 2 application.
| Admin | Required |
| Returns | { totalCachedIssues, totalLenses, totalHierarchyNodes, uniqueProjects, avgHourlyPointUsage, peakHourlyPointUsage, currentTier, currentBudget } |
setTierBudget
Section titled “setTierBudget”Set the rate limit tier budget override.
| Admin | Required |
| Payload | { budget: number } (65,000 - 500,000) |
| Returns | { success: true, budget } |
Announcements
Section titled “Announcements”getDismissedAnnouncements
Section titled “getDismissedAnnouncements”Get announcement IDs the current user has dismissed.
| Returns | { dismissed: string[] } |
dismissAnnouncement
Section titled “dismissAnnouncement”Mark an announcement as dismissed.
| Payload | { id: string } |
| Returns | { success: true } |
isAdmin
Section titled “isAdmin”Check if the current user is a Jira admin (used by announcement audience filtering).
| Returns | { isAdmin: boolean } |
AI / Portfolio Intelligence
Section titled “AI / Portfolio Intelligence”analyzeLens
Section titled “analyzeLens”Run portfolio analysis on a lens to generate insights.
| Permission | view on the lens |
| Payload | { lensId: string } |
| Returns | { insights: Array<{ id, insight_type, severity, summary, affected_nodes, suggested_action }> } |
| Side effects | Clears stale insights, persists new ones to ai_insights table, publishes analysis_complete realtime event |
analyzeSectionGaps
Section titled “analyzeSectionGaps”Analyze a specific section of the hierarchy for missing items.
| Permission | view on the lens |
| Payload | { lensId: string, anchorName?, anchorIssueKey?, anchorNodeId?, maxMissingItems? } |
| Returns | { gaps: Array<{ ... }> } |
Resource Management
Section titled “Resource Management”getResourceWorkload
Section titled “getResourceWorkload”Get workload analysis for resources in a lens.
| Payload | { lensId: string } |
| Returns | Workload data with resource allocations |
getCrossLensWorkload
Section titled “getCrossLensWorkload”Get workload aggregated across multiple lenses.
| Returns | Cross-lens workload data |
findBestMatch
Section titled “findBestMatch”Find the best matching resource for a task based on skills and availability.
| Payload | { lensId: string, ... } |
| Returns | Ranked list of matching resources |
listTeams / createTeam / updateTeam / deleteTeam
Section titled “listTeams / createTeam / updateTeam / deleteTeam”Full CRUD for teams.
| Payload | { name, description?, color?, isGlobal?, lensId? } (create/update) |
addTeamMember / removeTeamMember
Section titled “addTeamMember / removeTeamMember”Manage team membership.
| Payload | { teamId, resourceId, availabilityPct?, startDate, endDate? } (add) |
Holiday Calendars
Section titled “Holiday Calendars”listHolidayCalendars / createHolidayCalendar / deleteHolidayCalendar
Section titled “listHolidayCalendars / createHolidayCalendar / deleteHolidayCalendar”Holiday calendar CRUD.
listHolidayDates / addHolidayDate / removeHolidayDate
Section titled “listHolidayDates / addHolidayDate / removeHolidayDate”Manage individual holiday dates within a calendar.
assignCalendar
Section titled “assignCalendar”Assign a holiday calendar to a resource.
Absences
Section titled “Absences”listAbsences / createAbsence / deleteAbsence
Section titled “listAbsences / createAbsence / deleteAbsence”Resource absence tracking.
| Payload | { resourceId, startDate, endDate, isHalfDay?, absenceType?, notes? } (create) |
Baselines
Section titled “Baselines”createBaseline / listBaselines / getBaselineEntries / deleteBaseline
Section titled “createBaseline / listBaselines / getBaselineEntries / deleteBaseline”Baseline snapshot management. A baseline captures a point-in-time snapshot of node dates for comparison.
| Payload | { lensId, name } (create) |
| Returns | { entries: Array<{ nodeId, jiraIssueKey, startDate, endDate }> } (getEntries) |
Leveling
Section titled “Leveling”startLeveling
Section titled “startLeveling”Start an async resource leveling job for a lens.
| Payload | { lensId: string } |
| Returns | { jobId: string } |
getLevelingStatus
Section titled “getLevelingStatus”Poll leveling job status.
| Payload | { jobId: string } |
| Returns | Leveling job status object |
resetLeveling
Section titled “resetLeveling”Reset leveling results for a lens.
| Payload | { lensId: string } |
Skills
Section titled “Skills”listSkills / createSkill / deleteSkill
Section titled “listSkills / createSkill / deleteSkill”Skill taxonomy management.
| Payload | { name, category?, color? } (create) |
assignSkillToResource / removeSkillFromResource / getResourceSkills
Section titled “assignSkillToResource / removeSkillFromResource / getResourceSkills”Manage resource skill assignments with proficiency levels.
Placeholders
Section titled “Placeholders”createPlaceholder / listPlaceholders / resolvePlaceholder / deletePlaceholder
Section titled “createPlaceholder / listPlaceholders / resolvePlaceholder / deletePlaceholder”Placeholder resource management. Placeholders represent unfilled roles that can later be resolved to real resources.
GDPR Compliance
Section titled “GDPR Compliance”deleteUserData
Section titled “deleteUserData”Delete or anonymize ALL personal data for a user.
| Admin | Required |
| Payload | { targetAccountId: string } |
| Returns | { success: true, deletions: Record<string, number>, timestamp } |
| Scope | Permissions, lens ownership, issue cache PII, hierarchy nodes, generators, leveling jobs, baselines, dependency overrides, resources, team memberships, absences, schedules, skills, calendar assignments, views, automation rules, alerts, KVS entries (prefs, announcements, chat, feedback cooldown) |
reportUserData
Section titled “reportUserData”Generate a comprehensive data report for a user (GDPR data access request).
| Admin | Required |
| Payload | { targetAccountId: string } |
| Returns | Object with all data categories (lenses, permissions, issues, nodes, etc.) |
User Preferences
Section titled “User Preferences”getUserPrefs / setUserPrefs
Section titled “getUserPrefs / setUserPrefs”KVS-backed per-user preferences.
| Storage | KVS key user_prefs:${accountId} |
Support Chat
Section titled “Support Chat”getSupportMessages / sendSupportMessage
Section titled “getSupportMessages / sendSupportMessage”In-app support chat for users.
getAdminSupportInbox / getAdminSupportThread / replySupportMessage
Section titled “getAdminSupportInbox / getAdminSupportThread / replySupportMessage”Admin-side support chat management.
| Guards | withSchema, withAdmin |
Search & Projects
Section titled “Search & Projects”searchIssues
Section titled “searchIssues”Search for Jira issues (used by issue link picker).
| Payload | { query: string, lensId?: string } |
| Returns | { issues: Array<{ id, key, summary, ... }> } |
searchProjects / listImportableProjects
Section titled “searchProjects / listImportableProjects”Search Jira projects or list projects available for import.
listJpdProjects
Section titled “listJpdProjects”List Jira Product Discovery projects.
getIssueLenses
Section titled “getIssueLenses”Get which lenses contain a specific issue (for issue context panel).
| Payload | { issueKey: string } |
| Returns | { lenses: Array<{ id, name }> } |
Import
Section titled “Import”previewStructureImport / executeStructureImport / getStructureImportStatus
Section titled “previewStructureImport / executeStructureImport / getStructureImportStatus”Third-party hierarchy import (disabled).
previewBigPictureImport / executeBigPictureImport / getBigPictureImportStatus
Section titled “previewBigPictureImport / executeBigPictureImport / getBigPictureImportStatus”Third-party PPM import (disabled).
previewCsvImport / importHierarchyChunk
Section titled “previewCsvImport / importHierarchyChunk”CSV/Excel import with chunked processing.
validateExportFile / executeExportFileImport / getExportFileImportStatus
Section titled “validateExportFile / executeExportFileImport / getExportFileImportStatus”DC-to-Cloud export file import.
importProjects / removeProjectImport
Section titled “importProjects / removeProjectImport”Project-based hierarchy import.
Feature Flags
Section titled “Feature Flags”getFeatureFlags / setFeatureFlag
Section titled “getFeatureFlags / setFeatureFlag”Feature flag management (KVS-backed).
| setFeatureFlag | Admin required |
Monitoring
Section titled “Monitoring”getMonitoringDashboard
Section titled “getMonitoringDashboard”Get the monitoring dashboard data.
| Guards | Admin required |
| Returns | Aggregated resolver metrics, error rates, performance data |
getResolverMetrics
Section titled “getResolverMetrics”Get detailed metrics for specific resolvers.
| Guards | Admin required |
pruneMonitoringData
Section titled “pruneMonitoringData”Delete old monitoring data.
| Guards | Admin required |
Utility
Section titled “Utility”healthCheck
Section titled “healthCheck”Health check endpoint (schema verification).
| Metrics | Skipped |
| Returns | { status: 'ok', version: '0.1.0' } |
syncIssues
Section titled “syncIssues”Manual sync trigger (legacy).
validateJql
Section titled “validateJql”Validate a JQL query against Jira.
| Payload | { jql: string } |
| Returns | { valid: boolean, errors?: string[] } |
getLensDiff
Section titled “getLensDiff”Get an incremental diff of changes after sync agent execution.
| Payload | { lensId: string, jobId: string } |
initLensContext
Section titled “initLensContext”Initialize lens context (prefetch data for the lens view).
getLastLens / setLastLens
Section titled “getLastLens / setLastLens”Track the user’s most recently visited lens for auto-navigation.
reportError
Section titled “reportError”Forward frontend errors to Sentry (bypasses CSP restrictions).
| Metrics | Skipped |
| Payload | { message, stack, component, extra? } |
reportIconFallback
Section titled “reportIconFallback”Log client-side icon fallback events.
| Metrics | Skipped |
checkDeletePermissions / deleteIssuesFromJira
Section titled “checkDeletePermissions / deleteIssuesFromJira”Check delete permissions and delete Jira issues.
| Permission | edit on the lens |
submitFeedback
Section titled “submitFeedback”Submit in-app feedback.
Rovo Agent Dispatchers
Section titled “Rovo Agent Dispatchers”The Forge manifest has a limited number of action slots. To fit more functionality, several actions use a dispatcher pattern where a single manifest action routes to multiple sub-actions via a _action parameter.
hierMeta (key: g1, actionVerb: TRIGGER)
Section titled “hierMeta (key: g1, actionVerb: TRIGGER)”Hierarchy metadata dispatcher.
| Sub-action | Description |
|---|---|
getTransitions | Get available status transitions |
getFieldOptions | Get field options for a field |
getLensDetails | Get lens detail data |
getNodeDetails | Get details for a specific node |
getSubtreeStats | Get statistics for a subtree |
groupNodesBy | Group nodes by a field |
sortNodes | Sort nodes by a field |
renameFlexItem | Rename a flex item |
flattenSubtree | Flatten a subtree (move children to parent) |
mergeFlexItems | Merge multiple flex items into one |
viewPerm (key: fl, actionVerb: TRIGGER)
Section titled “viewPerm (key: fl, actionVerb: TRIGGER)”View and permission dispatcher.
| Sub-action | Description |
|---|---|
createView | Create a view |
deleteView | Delete a view |
setDefaultView | Set the default view for a lens |
grantPermission | Grant a permission |
revokePermission | Revoke a permission |
lensCrud (key: fe, actionVerb: TRIGGER)
Section titled “lensCrud (key: fe, actionVerb: TRIGGER)”Lens CRUD dispatcher.
| Sub-action | Description |
|---|---|
createLens | Create a new lens |
renameLens | Rename a lens |
deleteLens | Delete a lens |
jiraUtil (key: g1, actionVerb: GET)
Section titled “jiraUtil (key: g1, actionVerb: GET)”Jira utility dispatcher.
| Sub-action | Description |
|---|---|
validateJql | Validate a JQL query |
analyzeJiraProject | Analyze a Jira project |
createFromTemplate | Create lens from template |
r2g (key: g3, actionVerb: GET)
Section titled “r2g (key: g3, actionVerb: GET)”Read-only intelligence/analytics dispatcher (auto-executes, no confirmation).
| Sub-action | Description |
|---|---|
getHealthScore | Portfolio health score |
getRiskAssessment | Risk assessment analysis |
getWorkloadAnalysis | Workload distribution analysis |
getBottleneckAnalysis | Bottleneck detection |
getStructureQuality | Hierarchy structure quality |
getDriftAnalysis | Schedule drift analysis |
getSprintIntelligence | Sprint intelligence metrics |
getPortfolioIntelligence | Portfolio-level intelligence |
getTrendAnalysis | Trend analysis over time |
searchAcrossLenses | Search across all lenses |
getPortfolioOverview | Portfolio overview dashboard |
compareLenses | Compare two or more lenses |
getLensStatistics | Detailed lens statistics |
generateStatusReport | Generate a status report |
getPendingAlerts | Get pending alerts |
listAutomationRules | List automation rules |
getAlertHistory | Get alert history |
getContextualSuggestions | AI contextual suggestions |
getWbsJobStatus | WBS generation job status |
r2r5 (key: g2, actionVerb: TRIGGER)
Section titled “r2r5 (key: g2, actionVerb: TRIGGER)”Destructive operations dispatcher (requires user confirmation).
| Sub-action | Description |
|---|---|
archiveLens | Archive a lens |
transferOwnership | Transfer lens ownership |
duplicateLens | Duplicate a lens |
cloneLensFiltered | Clone with filters |
splitLensByField | Split lens by field value |
mergeLenses | Merge multiple lenses |
cleanupLens | Clean up stale data |
rebalanceWorkload | Rebalance workload across resources |
restructureByField | Restructure hierarchy by field |
dismissAlert | Dismiss an alert |
configureAlertThresholds | Configure alert thresholds |
configureAutoRule | Configure an automation rule |
deleteAutomationRule | Delete an automation rule |
scheduleIssueTimeline | Schedule issue timeline |