-
Couldn't load subscription status.
- Fork 50
feat: Add reconfiguration support for GitHub trigger callsign and labels #2019
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: main
Are you sure you want to change the base?
Conversation
|
|
Finished running flow.
|
|
Note Other AI code review bot(s) detectedCodeRabbit has detected other AI code review bot(s) in this pull request and will avoid duplicating their findings in the review comments. This may lead to a less comprehensive review. WalkthroughA GitHub trigger setup flow refactoring that introduces multi-step reconfiguration, replaces per-step submission handlers with unified state machine logic via Changes
Sequence Diagram(s)sequenceDiagram
participant User
participant GitHubTriggerPropertiesPanel
participant resolveNextStep
participant useConfigureTrigger
participant GiselleEngine
User->>GitHubTriggerPropertiesPanel: Submit step (e.g., select repository)
GitHubTriggerPropertiesPanel->>GitHubTriggerPropertiesPanel: handleSubmit()
GitHubTriggerPropertiesPanel->>resolveNextStep: resolveNextStep(currentStep, eventId, submissionData, nodeStatus)
alt More steps required
resolveNextStep-->>GitHubTriggerPropertiesPanel: { continue: nextStep }
GitHubTriggerPropertiesPanel->>GitHubTriggerPropertiesPanel: Update UI to show next step
else Ready to submit
resolveNextStep-->>GitHubTriggerPropertiesPanel: { submit: { event, repositoryInfo } }
GitHubTriggerPropertiesPanel->>useConfigureTrigger: configureTrigger(event, repositoryInfo, flowTriggerId?)
useConfigureTrigger->>GiselleEngine: configureTrigger() or reconfigureGitHubTrigger()
GiselleEngine-->>useConfigureTrigger: { triggerId }
useConfigureTrigger->>GitHubTriggerPropertiesPanel: Update node data (status: "configured")
GitHubTriggerPropertiesPanel->>User: Show configured view
end
sequenceDiagram
participant User
participant GitHubTriggerConfiguredView
participant GitHubTriggerReconfiguringView
participant GitHubTriggerPropertiesPanel
User->>GitHubTriggerConfiguredView: Click "Change Labels"
GitHubTriggerConfiguredView->>GitHubTriggerConfiguredView: beginReconfigure("labels")
GitHubTriggerConfiguredView->>GitHubTriggerPropertiesPanel: onStartReconfigure("labels")
GitHubTriggerPropertiesPanel->>GitHubTriggerPropertiesPanel: Set reconfigureModeRef = "labels"
GitHubTriggerPropertiesPanel->>GitHubTriggerReconfiguringView: Pass reconfigureMode="labels"
GitHubTriggerReconfiguringView->>GitHubTriggerReconfiguringView: Derive reconfigStep for input-labels
GitHubTriggerReconfiguringView->>User: Show labels input with persisted data
User->>User: Submit new labels
GitHubTriggerReconfiguringView->>GitHubTriggerPropertiesPanel: handleSubmit()
GitHubTriggerPropertiesPanel->>GitHubTriggerPropertiesPanel: reconfigureGitHubTrigger(flowTriggerId, repositoryInfo, newLabelsEvent)
GitHubTriggerPropertiesPanel->>User: Return to configured view
Estimated code review effort🎯 4 (Complex) | ⏱️ ~60 minutes Rationale: The PR introduces a substantial refactor of the GitHub trigger setup flow with a new state machine driven by Possibly related PRs
Suggested labels
Suggested reviewers
Poem
Pre-merge checks and finishing touches✅ Passed checks (3 passed)
✨ Finishing touches
🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
@codex review |
|
Finished running flow.
|
PR Compliance Guide 🔍Below is a summary of compliance checks for this PR:
Compliance status legend🟢 - Fully Compliant🟡 - Partial Compliant 🔴 - Not Compliant ⚪ - Requires Further Human Verification 🏷️ - Compliance label |
||||||||||||||||||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Pull Request Overview
This PR adds the ability to reconfigure callsign and labels for GitHub triggers after initial setup, alongside significant refactoring to improve code organization and maintainability. The changes centralize configuration logic, introduce type-safe utilities for event condition handling, and enhance the user experience with better state persistence and validation.
Key Changes
- Added "Change Callsign" and "Change Labels" buttons to the configured view, enabling direct editing of these settings
- Refactored trigger configuration logic into reusable hooks and utilities with enhanced type safety
- Improved state persistence across configuration steps for a smoother user experience
Reviewed Changes
Copilot reviewed 12 out of 12 changed files in this pull request and generated 3 comments.
Show a summary per file
| File | Description |
|---|---|
| packages/giselle/src/http/router.ts | Added optional event parameter to reconfiguration endpoint |
| packages/giselle/src/engine/triggers/reconfigure-github-trigger.ts | Updated to support event reconfiguration |
| packages/giselle/src/engine/index.ts | Added optional event parameter to engine reconfiguration method |
| internal-packages/workflow-designer-ui/src/editor/properties-panel/ui/select-repository.tsx | Added initial installation ID support for pre-selecting organization |
| internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/ui/reconfiguring-views/github-trigger-reconfiguring-view.tsx | Implemented reconfiguration mode routing with persisted values |
| internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/ui/configured-views/github-trigger-configured-view.tsx | Added Change Callsign and Change Labels buttons with reconfiguration handlers |
| internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/utils/use-trigger-configuration.ts | Removed deprecated hook (replaced by use-configure-trigger.ts) |
| internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/utils/use-configure-trigger.ts | New centralized hook for both initial configuration and reconfiguration |
| internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/utils/trigger-configuration.ts | Added type guards, extractors, and helper utilities for event conditions |
| internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/utils/resolve-next-step.ts | New state machine for managing configuration step navigation |
| internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/github-trigger-properties-panel.tsx | Simplified component by extracting business logic to utilities and hooks |
| internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/components/labels-input-step.tsx | Enhanced with initial values support and improved error handling |
Tip: Customize your code reviews with copilot-instructions.md. Create the file or learn how to get started.
| label: getGitHubDisplayLabel({ eventId, accessor: key }), | ||
| accessor: key, | ||
| }); | ||
| } satisfies Output); |
Copilot
AI
Oct 17, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
[nitpick] The satisfies Output annotation is redundant here. The object already conforms to the Output type from the function signature, and this doesn't add type safety or clarity. Consider removing it for cleaner code.
| } satisfies Output); | |
| }); |
| : "border border-white-400 focus:border-border", | ||
| "text-[14px] bg-transparent", | ||
| )} | ||
| required={true} |
Copilot
AI
Oct 17, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The required={true} attribute is unnecessary since true is the default value when the attribute is present. Use required instead for cleaner JSX.
| required={true} | |
| required |
| "text-[14px] bg-transparent", | ||
| )} | ||
| defaultValue={step.callsign ?? ""} | ||
| required={true} |
Copilot
AI
Oct 17, 2025
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The required={true} attribute is unnecessary since true is the default value when the attribute is present. Use required instead for cleaner JSX.
| required={true} | |
| required |
| : "border border-white-400 focus:border-border", | ||
| "text-[14px] bg-transparent", | ||
| )} | ||
| required={true} |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Bug: HTML5 Validation Conflicts with Custom Logic
The required={true} attribute on label inputs conflicts with the custom validation. The browser's HTML5 validation prevents form submission if any label input is empty, even though the custom logic allows this as long as one label has a value. This blocks users from submitting valid forms.
PR Code Suggestions ✨Explore these optional code suggestions:
|
|||||||||||||||||
|
## 🔍 QA Testing Assistant by Giselle ### 📋 Manual QA Checklist Based on the changes in this PR, here are the key areas to test manually:
### ✨ Prompt for AI Agents Use the following prompts with Cursor or Claude Code to automate E2E testing: 📝 E2E Test Generation Prompt |
|
## 🔍 QA Testing Assistant by Giselle ### 📋 Manual QA Checklist Based on the changes in this PR, here are the key areas to test manually:
### ✨ Prompt for AI Agents Use the following prompts with Cursor or Claude Code to automate E2E testing: 📝 E2E Test Generation Prompt--- |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 4
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (7)
internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/utils/trigger-configuration.ts (2)
122-131: Labels are never forwarded/validated in trigger configuration (breaks labeled events).createTriggerConfiguration only handles callsign; label‑required events will throw in createTriggerEvent. Add labels into options, validate when required, and pass through.
Apply this diff:
interface TriggerConfigOptions { nodeId: string; workspaceId?: string; eventId: GitHubTriggerEventId; repositoryNodeId: string; installationId: number; callsign?: string; + labels?: string[]; useExperimentalStorage?: boolean; } // ... // Validate callsign if required if ( isTriggerRequiringCallsign(eventId) && - (!callsign || callsign.length === 0) + (!callsign || callsign.trim().length === 0) ) { throw new Error(`Callsign is required for trigger type: ${eventId}`); } +// Validate labels if required +if (isTriggerRequiringLabels(eventId)) { + const normalized = (options.labels ?? []).map((l) => l.trim()).filter(Boolean); + if (normalized.length === 0) { + throw new Error(`At least one non-empty label is required for: ${eventId}`); + } +} -const event = createTriggerEvent({ eventId, callsign }); +const event = createTriggerEvent({ + eventId, + callsign, + labels: options.labels?.map((l) => l.trim()).filter(Boolean), +});Also applies to: 225-235, 233-235
149-179: Tighten input validation: disallow whitespace-only callsign and empty/blank labels.Current checks accept " " as callsign and labels like ["", " "]. Normalize and enforce non‑blank values.
Apply this diff:
case "github.issue_comment.created": case "github.pull_request_comment.created": case "github.pull_request_review_comment.created": - if (!args.callsign || args.callsign.length === 0) { + if (!args.callsign || args.callsign.trim().length === 0) { throw new Error("Callsign is required for this trigger type"); } return { id: args.eventId, conditions: { - callsign: args.callsign, + callsign: args.callsign.trim(), }, }; case "github.issue.labeled": case "github.pull_request.labeled": - if (!args.labels || args.labels.length === 0) { + if (!args.labels || args.labels.map((l) => l.trim()).filter(Boolean).length === 0) { throw new Error("Labels are required for this trigger type"); } return { id: args.eventId, - conditions: { labels: args.labels }, + conditions: { + labels: args.labels.map((l) => l.trim()).filter(Boolean), + }, };packages/giselle/src/engine/triggers/reconfigure-github-trigger.ts (1)
58-66: Guard against event type changes during reconfigure.Changing
event.idhere can desync node outputs/name since they aren’t regenerated. Reject id changes; allow condition updates only.Apply this diff:
const updatedTrigger = { ...currentTrigger, configuration: { provider: "github", repositoryNodeId: newRepositoryNodeId, installationId: args.installationId, - event: args.event ?? currentTrigger.configuration.event, + event: (() => { + if (args.event) { + if (args.event.id !== currentTrigger.configuration.event.id) { + throw new Error("Reconfigure does not allow changing the event type (id)."); + } + return args.event; + } + return currentTrigger.configuration.event; + })(), }, } satisfies FlowTrigger;internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/components/labels-input-step.tsx (3)
76-97: Don't mark every label input as required; it blocks valid submissions with optional extra rows.Spec requires “at least one non-space label,” not “all rows non-empty.” Browser validation on each input prevents submission if any added row is empty. Remove required from each input and rely on the existing step-level validation; wire a11y via aria-invalid/aria-describedby.
- <input + <input type="text" value={label.value} onChange={(e) => setLabels((prev) => prev.map((l) => l.id === label.id ? { ...l, value: e.target.value } : l, ), ) } className={clsx( "flex-1 rounded-[8px] py-[8px] px-[12px] outline-none focus:outline-none text-[14px] bg-transparent", - errorMessage !== undefined + errorMessage !== undefined ? "border border-[#FF3D71] focus:border-[#FF3D71]" : "border border-white-400 focus:border-border", )} - required={true} + aria-invalid={errorMessage !== undefined} + aria-describedby={errorMessage ? "labels-error" : undefined} placeholder="bug" />Also give the error container a stable id:
- {errorMessage !== undefined && ( - <p className="text-[12px] text-[#FF3D71] pl-2" role="alert"> + {errorMessage !== undefined && ( + <p id="labels-error" className="text-[12px] text-[#FF3D71] pl-2" role="alert"> {errorMessage} </p> )}
70-73: Add an accessible label for the info button.Screen readers won’t announce the icon-only button purpose. Add aria-label.
- <button type="button"> + <button type="button" aria-label="Labels help"> <InfoIcon className="size-[16px]" /> </button>
147-156: “Setting up…” text is hidden when pending.The span gets opacity-0 while also switching text to “Setting up…”, making it invisible. Keep the label static and rely on the spinner.
- <span className={isPending ? "opacity-0" : ""}> - {isPending ? "Setting up..." : "Set Up"} - </span> + <span className={isPending ? "opacity-0" : ""}>Set Up</span>internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/github-trigger-properties-panel.tsx (1)
332-351: Add an accessible label and wire a11y on the callsign input.
- Provide aria-label for the info button.
- Connect error to the input and mark invalid when present.
- <button type="button"> + <button type="button" aria-label="Callsign help"> <InfoIcon className="size-[16px]" /> </button>- <input + <input type="text" name="callsign" className={clsx( "group w-full flex justify-between items-center rounded-[8px] py-[8px] pl-[28px] pr-[4px] outline-none focus:outline-none text-[14px] bg-transparent", callsignError !== undefined ? "border border-[#FF3D71] focus:border-[#FF3D71]" : "border border-white-400 focus:border-border", )} defaultValue={step.callsign ?? ""} - required={true} + required + aria-invalid={callsignError !== undefined} + aria-describedby={callsignError ? "callsign-error" : undefined} placeholder="code-review" />- {callsignError !== undefined && ( - <p className="text-[12px] text-[#FF3D71] pl-2" role="alert"> + {callsignError !== undefined && ( + <p id="callsign-error" className="text-[12px] text-[#FF3D71] pl-2" role="alert"> {callsignError} </p> )}
♻️ Duplicate comments (3)
internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/utils/trigger-configuration.ts (1)
200-200: Redundantsatisfies Outputhere is a stylistic nit only.This was already noted; leaving as-is is fine, or remove for brevity.
internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/github-trigger-properties-panel.tsx (2)
396-398: “Setting up…” text is hidden when pending.Same pattern as labels step; keep it static.
- <span className={isPending ? "opacity-0" : ""}> - {isPending ? "Setting up..." : "Set Up"} - </span> + <span className={isPending ? "opacity-0" : ""}>Set Up</span>
351-351: Nit: preferrequiredoverrequired={true}.Cleaner JSX and aligns with prior comment.
- required={true} + required
🧹 Nitpick comments (2)
internal-packages/workflow-designer-ui/src/editor/properties-panel/ui/select-repository.tsx (1)
13-18: Avoid interface/function name shadowing for clarity.Having both
interface SelectRepositoryandfunction SelectRepositoryis confusing in TSX. Consider renaming the interface toSelectedRepository.Also applies to: 24-30
internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/utils/resolve-next-step.ts (1)
83-96: Avoid passing eventId separately; derive from currentStep to prevent drift.eventId is carried in every step type; a separate parameter risks mismatch and bugs.
-interface resolveNextStepProps { - currentStep: GitHubTriggerSetupStep; - eventId: GitHubTriggerEventId; - submissionData: StepSubmissionData; - nodeStatus: TriggerNode["content"]["state"]["status"]; -} +interface resolveNextStepProps { + currentStep: GitHubTriggerSetupStep; + submissionData: StepSubmissionData; + nodeStatus: TriggerNode["content"]["state"]["status"]; +} -export function resolveNextStep({ currentStep, eventId, submissionData, nodeStatus }: resolveNextStepProps): StepAction { +export function resolveNextStep({ currentStep, submissionData, nodeStatus }: resolveNextStepProps): StepAction { switch (currentStep.state) { case "confirm-repository": { + const eventId = currentStep.eventId; ...Update call sites accordingly (they already have step.eventId).
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
📒 Files selected for processing (12)
internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/components/labels-input-step.tsx(4 hunks)internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/github-trigger-properties-panel.tsx(12 hunks)internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/utils/resolve-next-step.ts(1 hunks)internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/utils/trigger-configuration.ts(3 hunks)internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/utils/use-configure-trigger.ts(1 hunks)internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/utils/use-trigger-configuration.ts(0 hunks)internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/ui/configured-views/github-trigger-configured-view.tsx(4 hunks)internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/ui/reconfiguring-views/github-trigger-reconfiguring-view.tsx(2 hunks)internal-packages/workflow-designer-ui/src/editor/properties-panel/ui/select-repository.tsx(1 hunks)packages/giselle/src/engine/index.ts(2 hunks)packages/giselle/src/engine/triggers/reconfigure-github-trigger.ts(3 hunks)packages/giselle/src/http/router.ts(2 hunks)
💤 Files with no reviewable changes (1)
- internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/utils/use-trigger-configuration.ts
🧰 Additional context used
📓 Path-based instructions (6)
**/*.{ts,tsx}
📄 CodeRabbit inference engine (.cursor/rules/development-guide.mdc)
**/*.{ts,tsx}: Use Biome for formatting with tab indentation and double quotes
Follow organized imports pattern (enabled in biome.json)
Use TypeScript for type safety; avoidanytypes
Use Next.js patterns for web applications
Use async/await for asynchronous code rather than promises
Error handling: use try/catch blocks and propagate errors appropriately
Use kebab-case for all filenames (e.g.,user-profile.ts)
Use camelCase for variables, functions, and methods (e.g.,userEmail)
Use prefixes likeis,has,can,shouldfor boolean variables and functions for clarity
Use verbs or verb phrases that clearly indicate purpose for function naming (e.g.,calculateTotalPrice(), notprocess())If breaking changes are introduced in new AI SDK versions, update code to accommodate those changes
**/*.{ts,tsx}: Avoid using theanytype in TypeScript
Use async/await for asynchronous code and include proper error handling
Variables and functions should be camelCase
Boolean variables and functions should use is/has/can/should prefixes where appropriate
Function names should clearly indicate their purpose
Files:
packages/giselle/src/engine/triggers/reconfigure-github-trigger.tsinternal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/ui/reconfiguring-views/github-trigger-reconfiguring-view.tsxpackages/giselle/src/engine/index.tsinternal-packages/workflow-designer-ui/src/editor/properties-panel/ui/select-repository.tsxinternal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/ui/configured-views/github-trigger-configured-view.tsxpackages/giselle/src/http/router.tsinternal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/components/labels-input-step.tsxinternal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/github-trigger-properties-panel.tsxinternal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/utils/resolve-next-step.tsinternal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/utils/trigger-configuration.tsinternal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/utils/use-configure-trigger.ts
**/*
📄 CodeRabbit inference engine (.cursor/rules/naming-guide.mdc)
All filenames should use kebab-case (lowercase with hyphens)
Files:
packages/giselle/src/engine/triggers/reconfigure-github-trigger.tsinternal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/ui/reconfiguring-views/github-trigger-reconfiguring-view.tsxpackages/giselle/src/engine/index.tsinternal-packages/workflow-designer-ui/src/editor/properties-panel/ui/select-repository.tsxinternal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/ui/configured-views/github-trigger-configured-view.tsxpackages/giselle/src/http/router.tsinternal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/components/labels-input-step.tsxinternal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/github-trigger-properties-panel.tsxinternal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/utils/resolve-next-step.tsinternal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/utils/trigger-configuration.tsinternal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/utils/use-configure-trigger.ts
**/*.{js,jsx,ts,tsx}
📄 CodeRabbit inference engine (.cursor/rules/naming-guide.mdc)
**/*.{js,jsx,ts,tsx}: React components and classes should use PascalCase
Variables, functions, and methods should use camelCase
Use verbs or verb phrases for function names; names should clearly indicate what the function does; avoid ambiguous names that could lead to misuse
Use nouns or noun phrases for variable names; names should describe what the variable represents; avoid single-letter variables except in very short scopes
Use prefixes like 'is', 'has', 'can', 'should' for both variables and functions returning boolean values; make the true/false meaning clear
Files:
packages/giselle/src/engine/triggers/reconfigure-github-trigger.tsinternal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/ui/reconfiguring-views/github-trigger-reconfiguring-view.tsxpackages/giselle/src/engine/index.tsinternal-packages/workflow-designer-ui/src/editor/properties-panel/ui/select-repository.tsxinternal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/ui/configured-views/github-trigger-configured-view.tsxpackages/giselle/src/http/router.tsinternal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/components/labels-input-step.tsxinternal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/github-trigger-properties-panel.tsxinternal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/utils/resolve-next-step.tsinternal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/utils/trigger-configuration.tsinternal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/utils/use-configure-trigger.ts
**/*.tsx
📄 CodeRabbit inference engine (.cursor/rules/development-guide.mdc)
**/*.tsx: Use functional components with React hooks
Use PascalCase for React components and classes (e.g.,UserProfile)
**/*.tsx: React components should use React hooks and Next.js patterns
Component identifiers (names) should be PascalCase
Files:
internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/ui/reconfiguring-views/github-trigger-reconfiguring-view.tsxinternal-packages/workflow-designer-ui/src/editor/properties-panel/ui/select-repository.tsxinternal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/ui/configured-views/github-trigger-configured-view.tsxinternal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/components/labels-input-step.tsxinternal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/github-trigger-properties-panel.tsx
internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/github-trigger-properties-panel.tsx
📄 CodeRabbit inference engine (internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/AGENTS.md)
internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/github-trigger-properties-panel.tsx: GitHubTriggerPropertiesPanel must render GitHubTriggerConfiguredView when node state is configured; otherwise branch UI by integration github.status: {unauthorized, not-installed, installed → start setup wizard, invalid-credential, error, unset}
Installed component must host the setup wizard with steps select-event → select-repository → confirm-repository → input-callsign (only for callsign events) → configured, including Back transitions as shown
isTriggerRequiringCallsign must return true only for events: github.issue_comment.created, github.pull_request_comment.created, github.pull_request_review_comment.created
Callsign input step must require a non-empty callsign before allowing Set Up
After successful configureTrigger, update node data: mark configured, set name toOn ${trigger.event.label}, and attach generated outputs
Files:
internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/github-trigger-properties-panel.tsx
internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/{github-trigger-properties-panel.tsx,utils/trigger-configuration.@(ts|tsx)}
📄 CodeRabbit inference engine (internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/AGENTS.md)
On Set Up: build a GitHubFlowTriggerEvent (using createTriggerEvent or local createCallsignEvent), derive outputs from githubTriggers[eventId].event.payloads.keyof().options, and call client.configureTrigger with enable: false and configuration { provider: 'github', repositoryNodeId, installationId, event }
Files:
internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/github-trigger-properties-panel.tsxinternal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/utils/trigger-configuration.ts
🧠 Learnings (15)
📓 Common learnings
Learnt from: CR
PR: giselles-ai/giselle#0
File: internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/AGENTS.md:0-0
Timestamp: 2025-09-01T00:43:51.193Z
Learning: Applies to internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/github-trigger-properties-panel.tsx : Installed component must host the setup wizard with steps select-event → select-repository → confirm-repository → input-callsign (only for callsign events) → configured, including Back transitions as shown
Learnt from: CR
PR: giselles-ai/giselle#0
File: internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/AGENTS.md:0-0
Timestamp: 2025-09-01T00:43:51.193Z
Learning: Applies to internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/{github-trigger-properties-panel.tsx,utils/trigger-configuration.@(ts|tsx)} : On Set Up: build a GitHubFlowTriggerEvent (using createTriggerEvent or local createCallsignEvent), derive outputs from githubTriggers[eventId].event.payloads.keyof().options, and call client.configureTrigger with enable: false and configuration { provider: 'github', repositoryNodeId, installationId, event }
📚 Learning: 2025-09-01T00:43:51.193Z
Learnt from: CR
PR: giselles-ai/giselle#0
File: internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/AGENTS.md:0-0
Timestamp: 2025-09-01T00:43:51.193Z
Learning: Applies to internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/{github-trigger-properties-panel.tsx,utils/trigger-configuration.@(ts|tsx)} : On Set Up: build a GitHubFlowTriggerEvent (using createTriggerEvent or local createCallsignEvent), derive outputs from githubTriggers[eventId].event.payloads.keyof().options, and call client.configureTrigger with enable: false and configuration { provider: 'github', repositoryNodeId, installationId, event }
Applied to files:
packages/giselle/src/engine/triggers/reconfigure-github-trigger.tsinternal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/ui/reconfiguring-views/github-trigger-reconfiguring-view.tsxpackages/giselle/src/engine/index.tsinternal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/ui/configured-views/github-trigger-configured-view.tsxpackages/giselle/src/http/router.tsinternal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/github-trigger-properties-panel.tsxinternal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/utils/resolve-next-step.tsinternal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/utils/trigger-configuration.tsinternal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/utils/use-configure-trigger.ts
📚 Learning: 2025-09-01T00:43:51.193Z
Learnt from: CR
PR: giselles-ai/giselle#0
File: internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/AGENTS.md:0-0
Timestamp: 2025-09-01T00:43:51.193Z
Learning: useGitHubTrigger(flowTriggerId) must fetch trigger and repository fullname, and expose enableFlowTrigger/disableFlowTrigger that optimistically patch the enable flag
Applied to files:
packages/giselle/src/engine/triggers/reconfigure-github-trigger.ts
📚 Learning: 2025-09-01T00:43:51.193Z
Learnt from: CR
PR: giselles-ai/giselle#0
File: internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/AGENTS.md:0-0
Timestamp: 2025-09-01T00:43:51.193Z
Learning: Applies to internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/github-trigger-properties-panel.tsx : isTriggerRequiringCallsign must return true only for events: github.issue_comment.created, github.pull_request_comment.created, github.pull_request_review_comment.created
Applied to files:
packages/giselle/src/engine/triggers/reconfigure-github-trigger.tsinternal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/ui/reconfiguring-views/github-trigger-reconfiguring-view.tsxinternal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/ui/configured-views/github-trigger-configured-view.tsxinternal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/github-trigger-properties-panel.tsxinternal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/utils/trigger-configuration.tsinternal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/utils/use-configure-trigger.ts
📚 Learning: 2025-09-01T00:43:51.193Z
Learnt from: CR
PR: giselles-ai/giselle#0
File: internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/AGENTS.md:0-0
Timestamp: 2025-09-01T00:43:51.193Z
Learning: Applies to internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/github-trigger-properties-panel.tsx : GitHubTriggerPropertiesPanel must render GitHubTriggerConfiguredView when node state is configured; otherwise branch UI by integration github.status: {unauthorized, not-installed, installed → start setup wizard, invalid-credential, error, unset}
Applied to files:
internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/ui/reconfiguring-views/github-trigger-reconfiguring-view.tsxinternal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/ui/configured-views/github-trigger-configured-view.tsxinternal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/github-trigger-properties-panel.tsxinternal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/utils/resolve-next-step.tsinternal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/utils/use-configure-trigger.ts
📚 Learning: 2025-09-01T00:43:51.193Z
Learnt from: CR
PR: giselles-ai/giselle#0
File: internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/AGENTS.md:0-0
Timestamp: 2025-09-01T00:43:51.193Z
Learning: Applies to internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/github-trigger-properties-panel.tsx : After successful configureTrigger, update node data: mark configured, set name to `On ${trigger.event.label}`, and attach generated outputs
Applied to files:
internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/ui/reconfiguring-views/github-trigger-reconfiguring-view.tsxinternal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/ui/configured-views/github-trigger-configured-view.tsxinternal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/components/labels-input-step.tsxinternal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/github-trigger-properties-panel.tsxinternal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/utils/resolve-next-step.tsinternal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/utils/trigger-configuration.tsinternal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/utils/use-configure-trigger.ts
📚 Learning: 2025-10-08T03:26:11.329Z
Learnt from: WashizuRyo
PR: giselles-ai/giselle#1903
File: internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/github-trigger-properties-panel.tsx:436-439
Timestamp: 2025-10-08T03:26:11.329Z
Learning: In the GitHub trigger properties panel (internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/github-trigger-properties-panel.tsx), when node.content.state.status === "reconfiguring", the flow only allows changing the repository, not the event type. Therefore, node.name should be preserved during reconfiguration to maintain user-customized names and avoid unnecessary label updates when only switching repositories.
Applied to files:
internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/ui/reconfiguring-views/github-trigger-reconfiguring-view.tsxinternal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/ui/configured-views/github-trigger-configured-view.tsxinternal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/github-trigger-properties-panel.tsx
📚 Learning: 2025-09-01T00:43:51.193Z
Learnt from: CR
PR: giselles-ai/giselle#0
File: internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/AGENTS.md:0-0
Timestamp: 2025-09-01T00:43:51.193Z
Learning: Applies to internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/github-trigger-properties-panel.tsx : Installed component must host the setup wizard with steps select-event → select-repository → confirm-repository → input-callsign (only for callsign events) → configured, including Back transitions as shown
Applied to files:
internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/ui/reconfiguring-views/github-trigger-reconfiguring-view.tsxinternal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/ui/configured-views/github-trigger-configured-view.tsxinternal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/components/labels-input-step.tsxinternal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/github-trigger-properties-panel.tsxinternal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/utils/resolve-next-step.tsinternal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/utils/trigger-configuration.tsinternal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/utils/use-configure-trigger.ts
📚 Learning: 2025-09-01T00:43:51.193Z
Learnt from: CR
PR: giselles-ai/giselle#0
File: internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/AGENTS.md:0-0
Timestamp: 2025-09-01T00:43:51.193Z
Learning: Applies to internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/components/event-type-display.tsx : Confirm-repository step must support Back to repository selection and proceed based on isTriggerRequiringCallsign(eventId): to input-callsign if true, or finish setup if false
Applied to files:
internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/ui/reconfiguring-views/github-trigger-reconfiguring-view.tsxinternal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/ui/configured-views/github-trigger-configured-view.tsxinternal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/github-trigger-properties-panel.tsxinternal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/utils/resolve-next-step.tsinternal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/utils/trigger-configuration.ts
📚 Learning: 2025-09-01T00:43:51.193Z
Learnt from: CR
PR: giselles-ai/giselle#0
File: internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/AGENTS.md:0-0
Timestamp: 2025-09-01T00:43:51.193Z
Learning: Applies to internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/components/repository-display.tsx : Repository selection step must invoke onSelectRepository(owner/repo/installationId) to advance to confirmation
Applied to files:
internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/ui/reconfiguring-views/github-trigger-reconfiguring-view.tsxinternal-packages/workflow-designer-ui/src/editor/properties-panel/ui/select-repository.tsxinternal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/github-trigger-properties-panel.tsxinternal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/utils/resolve-next-step.ts
📚 Learning: 2025-09-01T00:43:51.193Z
Learnt from: CR
PR: giselles-ai/giselle#0
File: internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/AGENTS.md:0-0
Timestamp: 2025-09-01T00:43:51.193Z
Learning: Applies to internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/node/ui/github-trigger/status-badge.tsx : Status badge must reflect enable/disable changes via useGitHubTrigger without full reload (optimistic UI)
Applied to files:
internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/ui/reconfiguring-views/github-trigger-reconfiguring-view.tsxinternal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/ui/configured-views/github-trigger-configured-view.tsx
📚 Learning: 2025-09-01T00:43:51.193Z
Learnt from: CR
PR: giselles-ai/giselle#0
File: internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/AGENTS.md:0-0
Timestamp: 2025-09-01T00:43:51.193Z
Learning: Applies to internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/github-trigger-properties-panel.tsx : Callsign input step must require a non-empty callsign before allowing Set Up
Applied to files:
internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/ui/reconfiguring-views/github-trigger-reconfiguring-view.tsxinternal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/components/labels-input-step.tsxinternal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/github-trigger-properties-panel.tsxinternal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/utils/trigger-configuration.ts
📚 Learning: 2025-09-01T00:43:51.193Z
Learnt from: CR
PR: giselles-ai/giselle#0
File: internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/AGENTS.md:0-0
Timestamp: 2025-09-01T00:43:51.193Z
Learning: Applies to internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/components/install-application.tsx : NotInstalled UI must open the GitHub app install flow and listen for window.postMessage({ type: 'github-app-installed' }) to call useIntegration().refresh()
Applied to files:
internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/ui/reconfiguring-views/github-trigger-reconfiguring-view.tsxinternal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/github-trigger-properties-panel.tsx
📚 Learning: 2025-09-01T00:43:51.193Z
Learnt from: CR
PR: giselles-ai/giselle#0
File: internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/AGENTS.md:0-0
Timestamp: 2025-09-01T00:43:51.193Z
Learning: Applies to internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/components/unauthorized.tsx : Unauthorized UI must open the GitHub app flow and listen for window.postMessage({ type: 'github-app-installed' }) to call useIntegration().refresh()
Applied to files:
internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/ui/reconfiguring-views/github-trigger-reconfiguring-view.tsxinternal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/github-trigger-properties-panel.tsx
📚 Learning: 2025-09-01T00:43:51.193Z
Learnt from: CR
PR: giselles-ai/giselle#0
File: internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/AGENTS.md:0-0
Timestamp: 2025-09-01T00:43:51.193Z
Learning: Applies to internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/components/event-selection-step.tsx : Event selection step must invoke onSelectEvent(eventId) to advance to repository selection
Applied to files:
internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/github-trigger-properties-panel.tsxinternal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/utils/resolve-next-step.ts
🧬 Code graph analysis (8)
internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/ui/reconfiguring-views/github-trigger-reconfiguring-view.tsx (3)
internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/ui/configured-views/github-trigger-configured-view.tsx (1)
GitHubTriggerReconfigureMode(64-64)internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/utils/trigger-configuration.ts (4)
extractCallsign(102-107)extractLabels(112-117)isTriggerRequiringCallsign(88-90)isTriggerRequiringLabels(95-97)internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/utils/resolve-next-step.ts (1)
GitHubTriggerSetupStep(53-58)
packages/giselle/src/engine/index.ts (1)
packages/data-type/src/flow/trigger/github.ts (2)
GitHubFlowTriggerEvent(59-70)GitHubFlowTriggerEvent(71-71)
internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/ui/configured-views/github-trigger-configured-view.tsx (1)
internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/utils/trigger-configuration.ts (2)
hasCallsignCondition(70-74)hasLabelsCondition(79-83)
packages/giselle/src/http/router.ts (2)
packages/data-type/src/flow/trigger/github.ts (2)
GitHubFlowTriggerEvent(59-70)GitHubFlowTriggerEvent(71-71)packages/data-type/src/flow/trigger/index.ts (1)
GitHubFlowTriggerEvent(4-4)
internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/github-trigger-properties-panel.tsx (3)
internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/ui/configured-views/github-trigger-configured-view.tsx (1)
GitHubTriggerReconfigureMode(64-64)internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/utils/resolve-next-step.ts (2)
GitHubTriggerSetupStep(53-58)resolveNextStep(90-182)internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/utils/use-configure-trigger.ts (1)
useConfigureTrigger(33-114)
internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/utils/resolve-next-step.ts (1)
internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/utils/trigger-configuration.ts (3)
isTriggerRequiringCallsign(88-90)isTriggerRequiringLabels(95-97)createTriggerEvent(144-184)
internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/utils/trigger-configuration.ts (1)
packages/data-type/src/flow/trigger/github.ts (2)
GitHubFlowTriggerEvent(59-70)GitHubFlowTriggerEvent(71-71)
internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/utils/use-configure-trigger.ts (6)
internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/utils/resolve-next-step.ts (1)
RepositoryInfo(60-65)packages/giselle/src/react/feature-flags/context.ts (1)
useFeatureFlag(17-25)packages/giselle/src/react/flow/hooks/use-workflow-designer.ts (1)
useWorkflowDesigner(5-13)packages/giselle/src/react/use-giselle-engine.ts (1)
useGiselleEngine(86-168)packages/giselle/src/engine/triggers/configure-trigger.ts (1)
configureTrigger(16-72)internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/utils/trigger-configuration.ts (1)
generateTriggerOutputs(189-204)
🔇 Additional comments (8)
internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/utils/trigger-configuration.ts (1)
17-21: Event requirement predicates look correct and align with supported IDs.Lists and guards for callsign/labels match the documented events. Keep these in sync with @giselle-sdk/flow if new events are added.
Based on learnings
Also applies to: 26-30, 70-83, 88-97
packages/giselle/src/http/router.ts (1)
6-6: Router now accepts optional GitHub event on reconfigure — good alignment.Value import of the Zod schema and
.optional()usage is correct; matches engine API.Ensure the engine handler preserves outputs/name when event.id is unchanged and only conditions change.
Also applies to: 299-306
internal-packages/workflow-designer-ui/src/editor/properties-panel/ui/select-repository.tsx (1)
23-34: Seeding selected installation frominitialInstallationIdis correct.Initializer function avoids extra renders and preserves prior context in reconfigure.
packages/giselle/src/engine/index.ts (1)
6-6: Engine API threads optional event through to reconfigure — looks good.Type‑only import and forwarding to trigger handler are consistent.
Also applies to: 324-326
internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/utils/use-configure-trigger.ts (1)
100-104: Preserving node.name during reconfiguration is correct.Name is kept when status is “reconfiguring”, matching prior guidance to avoid user-label churn. Good.
Based on learnings
internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/utils/resolve-next-step.ts (1)
121-146: Confirm reconfig repository path handles missing persisted fields.When reconfiguring repository-only, this submits immediately using persisted callsign/labels. If legacy triggers lack these fields, createTriggerEvent will throw. Ensure reconfiguring view always seeds step.callsign/labels (e.g., via extractCallsign/extractLabels) or route to the input steps when absent.
Based on learnings
internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/ui/configured-views/github-trigger-configured-view.tsx (1)
88-99: Reconfiguration entry correctly sets reconfiguring state and preserves trigger id.This aligns with the new reconfigure flow. Nice.
Based on learnings
internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/github-trigger-properties-panel.tsx (1)
121-145: Good state-machine integration.Centralizing progression through resolveNextStep and delegating configure via the hook simplifies the flow.
| updateNodeData(node, { | ||
| content: { | ||
| ...node.content, | ||
| state: { | ||
| status: "configured", | ||
| flowTriggerId: triggerId, | ||
| }, | ||
| }, | ||
| outputs: | ||
| node.outputs.length > 0 | ||
| ? node.outputs | ||
| : generateTriggerOutputs(event.id), | ||
| name: | ||
| node.content.state.status === "reconfiguring" | ||
| ? node.name | ||
| : `On ${trigger.event.label}`, | ||
| }); | ||
| } catch (_error) { | ||
| // Error is handled by the UI state | ||
| } |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
🛠️ Refactor suggestion | 🟠 Major
🧩 Analysis chain
Surface configuration errors to callers.
The hook catches and drops errors, giving no way for UIs to show failures beyond optimistic states. Expose errors via a callback or return a Promise that rejects so callers can render feedback.
Option A: add optional onError to configureTrigger’s args:
configureTrigger({ event, repositoryInfo, flowTriggerId, onError }?: { ...; onError?: (e: unknown) => void })and call onError(error) in catch.
Option B: keep startTransition but also set an internal error state and return it from the hook as lastError for consumers.
To verify backend shape (that event is accepted by reconfigure), run:
🏁 Script executed:
#!/bin/bash
rg -nP 'reconfigureGitHubTrigger' packages/giselle/src
rg -nP '(interface|type)\s+Reconfigure.+\{[^}]*event' -C2 packages/giselle/src || true
rg -nP 'export\s+async\s+function\s+reconfigureGitHubTrigger' -n -C3 packages/giselle/srcLength of output: 1350
I need to see the complete function signatures and the full implementation of the hook to properly verify the concerns. Let me gather more details:
---
🏁 Script executed:
```shell
#!/bin/bash
# Get full reconfigureGitHubTrigger function signature
cat packages/giselle/src/engine/triggers/reconfigure-github-trigger.ts | head -40
# Get full use-configure-trigger.ts file content
cat internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/utils/use-configure-trigger.ts
Length of output: 4316
Surface configuration errors to callers.
The hook catches and drops errors, giving no way for UIs to show failures beyond optimistic states. Expose errors via a callback or return a Promise that rejects so callers can render feedback.
Option A: add optional onError to configureTrigger's args:
configureTrigger({ event, repositoryInfo, flowTriggerId, onError }?: { ...; onError?: (e: unknown) => void })and call onError(error) in catch.
Option B: keep startTransition but also set an internal error state and return it from the hook as lastError for consumers.
Lines 88–107 in internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/providers/github-trigger/utils/use-configure-trigger.ts require refactoring to propagate errors appropriately per coding guidelines.
| type="button" | ||
| className="bg-primary-900 hover:bg-primary-800 text-inverse font-medium px-4 py-2 rounded-md text-[14px] transition-colors" | ||
| onClick={() => { | ||
| updateNodeData(node, { | ||
| content: { | ||
| ...node.content, | ||
| state: { | ||
| status: "reconfiguring", | ||
| flowTriggerId, | ||
| }, | ||
| }, | ||
| }); | ||
| beginReconfigure("repository"); | ||
| }} | ||
| > | ||
| Change Repository | ||
| </button> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Disable “Change Repository” while another action is in progress.
Prevent overlapping mutations with enable/disable actions.
- <button
+ <button
type="button"
className="bg-primary-900 hover:bg-primary-800 text-inverse font-medium px-4 py-2 rounded-md text-[14px] transition-colors"
- onClick={() => {
+ onClick={() => {
beginReconfigure("repository");
- }}
+ }}
+ disabled={actionInProgress}
>Committable suggestion skipped: line range outside the PR's diff.
🤖 Prompt for AI Agents
In
internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/ui/configured-views/github-trigger-configured-view.tsx
around lines 229-236, the "Change Repository" button must be disabled while
another async action/mutation is in progress to prevent overlapping operations;
add a boolean flag (e.g. isMutating, isReconfiguring or
repositoryActionInProgress) from the surrounding component or hook, set the
button's disabled attribute when that flag is true, update the className to
include disabled styles (and remove hover styles) when disabled, and guard the
onClick handler so beginReconfigure("repository") only runs when the flag is
false (also add aria-busy or aria-disabled for accessibility).
| <button | ||
| type="button" | ||
| className="bg-primary-900 hover:bg-primary-800 text-inverse font-medium px-4 py-2 rounded-md text-[14px] transition-colors" | ||
| onClick={() => { | ||
| beginReconfigure("callsign"); | ||
| }} | ||
| > | ||
| Change Callsign | ||
| </button> | ||
| </div> |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Also disable “Change Callsign/Labels” while busy.
Same rationale as above.
- <button
+ <button
type="button"
className="bg-primary-900 hover:bg-primary-800 text-inverse font-medium px-4 py-2 rounded-md text-[14px] transition-colors"
- onClick={() => {
+ onClick={() => {
beginReconfigure("callsign");
- }}
+ }}
+ disabled={actionInProgress}
>- <button
+ <button
type="button"
className="bg-primary-900 hover:bg-primary-800 text-inverse font-medium px-4 py-2 rounded-md text-[14px] transition-colors"
- onClick={() => {
+ onClick={() => {
beginReconfigure("labels");
- }}
+ }}
+ disabled={actionInProgress}
>Also applies to: 298-306
🤖 Prompt for AI Agents
In
internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/ui/configured-views/github-trigger-configured-view.tsx
around lines 262-271 (and also apply to 298-306), the "Change Callsign/Labels"
buttons are not disabled while the component is busy; update each button to use
the busy state to set the disabled attribute and appropriate disabled styling
(e.g., muted background/hover suppression and cursor-not-allowed) and guard the
onClick so it no-ops when busy (or early-return in the handler) to prevent
actions during busy state.
| const event = data.trigger.configuration.event; | ||
| const repositoryInfo = { | ||
| installationId: data.trigger.configuration.installationId, | ||
| repoNodeId: data.trigger.configuration.repositoryNodeId, | ||
| owner: data.githubRepositoryFullname.owner, | ||
| repo: data.githubRepositoryFullname.repo, | ||
| }; | ||
| const persistedCallsign = extractCallsign(event); | ||
| const persistedLabels = extractLabels(event); | ||
|
|
||
| const reconfigStep: GitHubTriggerSetupStep = (() => { | ||
| if ( | ||
| reconfigureMode === "callsign" && | ||
| isTriggerRequiringCallsign(event.id) && | ||
| persistedCallsign | ||
| ) { | ||
| return { | ||
| state: "input-callsign", | ||
| eventId: event.id, | ||
| ...repositoryInfo, | ||
| callsign: persistedCallsign, | ||
| }; | ||
| } | ||
| if ( | ||
| reconfigureMode === "labels" && | ||
| isTriggerRequiringLabels(event.id) && | ||
| persistedLabels | ||
| ) { | ||
| return { | ||
| state: "input-labels", | ||
| eventId: event.id, | ||
| ...repositoryInfo, | ||
| labels: persistedLabels, | ||
| }; | ||
| } | ||
| return { | ||
| state: "select-repository", | ||
| eventId: event.id, | ||
| callsign: persistedCallsign, | ||
| labels: persistedLabels, | ||
| installationId: repositoryInfo.installationId, | ||
| }; | ||
| })(); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Fix truthiness check for labels; empty array currently passes.
Use length checks to avoid entering input‑labels step with no labels.
Apply this diff:
- if (
- reconfigureMode === "labels" &&
- isTriggerRequiringLabels(event.id) &&
- persistedLabels
- ) {
+ if (
+ reconfigureMode === "labels" &&
+ isTriggerRequiringLabels(event.id) &&
+ Array.isArray(persistedLabels) &&
+ persistedLabels.length > 0
+ ) {
return {
state: "input-labels",
eventId: event.id,
...repositoryInfo,
labels: persistedLabels,
};
}🤖 Prompt for AI Agents
internal-packages/workflow-designer-ui/src/editor/properties-panel/trigger-node-properties-panel/ui/reconfiguring-views/github-trigger-reconfiguring-view.tsx
around lines 41 to 83: the current truthiness check for persistedLabels allows
an empty array to pass and enter the "input-labels" step; change the condition
to explicitly check length (e.g., persistedLabels && persistedLabels.length > 0)
so the branch only runs when there are actual labels, and update any similar
label checks in this block to use the same length-based guard.
User description
Summary
This PR enables editing of callsign and labels after configuring a GitHub trigger, along with refactoring the trigger configuration logic.
Changes
Features
Refactoring
useConfigureTriggerhook (use-configure-trigger.ts): Centralized trigger configuration logic that was previously embedded in the component, making it reusable and testableresolveNextSteputility (resolve-next-step.ts): Separated step navigation logic from the component, implementing a clear state machine for the configuration flowtrigger-configuration.ts:hasCallsignCondition,hasLabelsCondition,isTriggerRequiringCallsign,isTriggerRequiringLabels)extractCallsign,extractLabels) for safe access to event conditionsCallsignRequiredEventIdandLabelsRequiredEventIdunion typesgithub-trigger-properties-panel.tsxfrom complex embedded logic to cleaner, more maintainable code by extracting business logicTesting
Manual Testing Steps
Configure a new GitHub trigger with callsign:
Configure a new GitHub trigger with labels:
Reconfigure callsign:
Reconfigure labels:
Reconfigure repository:
Other Information
PR Type
Enhancement
Description
Extracted trigger configuration logic into reusable
useConfigureTriggerhook andresolveNextSteputility for better maintainabilityAdded reconfiguration support for callsign and labels with "Change Callsign" and "Change Labels" buttons in configured view
Implemented persistent state preservation for callsign and labels during configuration flow navigation
Enhanced validation with improved error messages for empty callsign and labels inputs
Added type guards and utility functions for safe access to event conditions
Diagram Walkthrough
File Walkthrough
10 files
New step resolution utility for trigger configuration flowAdded type guards and utility functions for conditionsNew hook for executing trigger configuration operationsAdded GitHubFlowTriggerEvent parameter to reconfigurationSupport optional event parameter for trigger reconfigurationAdded optional event field to reconfiguration request schemaAdded initial labels support and improved error handlingAdded Change Callsign and Change Labels buttons with type guardsEnhanced to support mode-specific reconfiguration stepsAdded initial installation ID support for state preservation2 files
Removed in favor of new useConfigureTrigger hookRefactored to use new hooks and utilities with simplified logicSummary by CodeRabbit