Commit Graph

195 Commits

Author SHA1 Message Date
chihlasm
1e035ac375 fix: move Date.now() out of render in ErrorBoundary to satisfy eslint purity rule
The chunk-reload logic used Date.now() and sessionStorage during render,
triggering react-hooks/purity. Moved to useEffect so side effects run
after commit, fixing the CI lint failure.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-14 12:50:29 -04:00
Michael Chihlas
4d36eabfe3 feat: add ScriptManagePage with routing and 'Manage Templates' link
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-14 01:58:11 -04:00
Michael Chihlas
8b2ffbbf27 feat: add ScriptTemplateEditor — full CRUD form with metadata, script body, and parameters
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-14 01:56:14 -04:00
Michael Chihlas
91e40c2920 feat: add ParameterCard and ParameterSchemaBuilder — visual builder + JSON toggle
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-14 01:51:56 -04:00
Michael Chihlas
6819dc1b62 feat: add ScriptTemplateListView component
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-14 01:47:36 -04:00
Michael Chihlas
9397e46eec feat: add ScriptBodyEditor with PowerShell syntax highlighting overlay
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-14 01:47:16 -04:00
Michael Chihlas
5f7a85db03 feat: add script template permission checks to usePermissions hook
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-14 01:44:07 -04:00
Michael Chihlas
f408be29e6 feat: add CRUD and share methods to scriptsApi client
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-14 01:44:04 -04:00
Michael Chihlas
0092b15237 feat: add created_by and create/update request types for script templates
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-14 01:44:01 -04:00
chihlasm
1d280a5c78 fix: address code review feedback on pane takeover
- Remove leftover text-left on TemplateCard div (was from button era)
- Use warning text as React key instead of array index

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-13 12:41:48 -04:00
chihlasm
87a5988fc3 chore: update stale comment in scriptGeneratorStore
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-13 12:39:15 -04:00
chihlasm
bcca095bdf feat: delete ScriptGeneratorPanel — superseded by ScriptConfigurePane
The right pane is now ScriptPreview-only. Generate/Download/Copy controls
moved to ScriptConfigurePane in the left pane (configure mode).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-13 12:38:31 -04:00
chihlasm
16c0132b02 feat: rewrite ScriptLibraryPage with Browse/Configure pane modes
- Add paneMode state ('browse' | 'configure') local to page
- Move ScriptFilterBar inside left pane column (hidden in configure mode)
- inputValue owned at page level to survive mode transitions
- Left pane: ScriptFilterBar + ScriptTemplateList in browse; ScriptConfigurePane in configure
- Right pane: ScriptPreview only (read-only); empty state when no template selected
- canGenerate derived from usePermissions().isEngineer (matching ScriptGeneratorPanel pattern)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-13 12:38:05 -04:00
chihlasm
da86136ef3 fix: update ScriptConfigurePane elevation badge and separator per spec
- Replace unicode ⚠ with ShieldAlert icon in elevation badge
- Fix separator spacing: mb-4 → mt-3 pt-3 per spec

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-13 12:35:44 -04:00
chihlasm
93f332e027 feat: add ScriptConfigurePane — configure mode layout
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-13 12:32:39 -04:00
chihlasm
cad9dc83bd refactor: ScriptTemplateList — add onConfigure prop threading
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-13 12:30:13 -04:00
chihlasm
40ebd2b200 refactor: TemplateCard — remove store subscription, add Configure button
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-13 12:29:45 -04:00
chihlasm
844b792bc2 fix: remove redundant wrapper div in password field
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-13 02:48:30 -04:00
chihlasm
64b02159e0 fix: wire error prop to Input/Textarea components and eliminate duplicate loadTemplates on mount
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-13 02:47:23 -04:00
chihlasm
f988d70bca feat: add /scripts route and Script Library nav entry
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-13 02:41:19 -04:00
chihlasm
a5d7d56199 feat: add ScriptLibraryPage shell
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-13 02:40:38 -04:00
chihlasm
361ffabe57 fix: attach anchor to document before click for Firefox download compatibility
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-13 02:39:57 -04:00
chihlasm
8cadc5b1b3 feat: add ScriptGeneratorPanel with permission gating
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-13 02:37:15 -04:00
chihlasm
2548a81549 fix: replace non-standard Tailwind opacity /12 with rgba in ScriptFilterBar
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-13 02:35:48 -04:00
chihlasm
4269aea015 fix: loadCategories error handling and invalid Tailwind opacity fractions
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-13 02:34:03 -04:00
chihlasm
69404e0e12 fix: help_text ordering and Input component usage in scripts components
- ScriptParameterField: extract error <p> from select/boolean input blocks and remove error prop from Input/Textarea components so all types render help_text before error via unified bottom rendering
- ScriptFilterBar: replace native <input> with shared <Input> component from @/components/ui/Input, preserving search icon via absolute positioning wrapper

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-13 02:18:13 -04:00
chihlasm
43bccf9af1 feat: add ScriptFilterBar with category tabs and debounced search
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-13 02:11:11 -04:00
chihlasm
dd36f335de feat: add ScriptTemplateList with skeleton and empty states
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-13 02:10:46 -04:00
chihlasm
19fde445fe feat: add TemplateCard component
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-13 02:10:25 -04:00
chihlasm
20fabe48a5 feat: add ScriptParameterForm with parameter grouping
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-13 02:09:59 -04:00
chihlasm
cb51940cdb feat: add ScriptParameterField — all 7 field types
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-13 02:09:35 -04:00
chihlasm
86a9d3b977 feat: add ScriptPreview with live substitution and copy
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-13 02:09:15 -04:00
chihlasm
a88b9c5483 feat: add PowerShellHighlighter syntax highlighter
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-13 02:09:01 -04:00
chihlasm
054f3acd67 fix: reset loading flags on error in scriptGeneratorStore
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-13 02:06:06 -04:00
chihlasm
9d10aa90ad feat: add scriptGeneratorStore Zustand store
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-13 02:01:02 -04:00
chihlasm
b1c39f52be feat: add scriptsApi client
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-13 01:56:53 -04:00
chihlasm
9631f6f474 feat: add script generator TypeScript types
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-13 01:53:26 -04:00
chihlasm
83b13fcd26 polish: use 'step' instead of 'node' in procedural editor validation hints
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-12 23:32:52 -04:00
chihlasm
45fb468db3 feat: add validation summary and Fix with AI to procedural editor
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-12 23:32:52 -04:00
chihlasm
f9315d2f60 feat: add data-step-id anchor to StepList for validation scroll-to
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-12 23:32:52 -04:00
chihlasm
b89d0859d4 feat: add validation state and validate() to proceduralEditorStore
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-12 23:32:52 -04:00
chihlasm
b804c63754 fix: validation summary click-to-select now opens node editor panel
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-12 23:32:52 -04:00
Michael Chihlas
cfe112ac43 docs: add landing page assets and polish landing CSS
Add landing page .docx export, HTML mockup, docx generator script,
and refine landing page CSS formatting/spacing.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 17:28:49 -04:00
chihlasm
042a12b190 feat: add landing page with beta signup + raise KB node limit to 100
Landing page at /landing with full marketing content: hero, features,
pricing, testimonials, and beta email signup form. Beta signups email
beta@resolutionflow.com via new public endpoint. Unauthenticated users
redirect to landing instead of login. Also raises KB Accelerator node
limit from 50 to 100 to accommodate dense troubleshooting articles.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 00:23:29 -04:00
chihlasm
92c86cab80 fix: handle object-shaped validation errors in KB commit error toast
The commit endpoint returns {message, validation_errors} when
validation fails, but the error handler was passing the whole object
to toast.error(), crashing React with "Objects are not valid as a
React child".

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 23:56:45 -04:00
chihlasm
fe3c651115 fix: remove "Let AI Decide" option from KB Accelerator upload
The uploader should know their content type — auto-detection adds
complexity and currently just defaults to troubleshooting anyway.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 22:56:40 -04:00
Michael Chihlas
c920e825c6 fix: auto-reload on chunk load errors in ErrorBoundary
RouteError already handled stale chunk errors, but the Sentry ErrorBoundary
didn't — so errors from React lazy() imports hit the generic error UI.
Now auto-reloads with loop prevention (10s cooldown via sessionStorage).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 03:17:24 -04:00
Michael Chihlas
a976f16575 fix: session closure popover z-index — bypass stagger-item stacking context
The StaggerList wrapper creates per-item stacking contexts via CSS animation,
causing the absolute-positioned close popover to render behind sibling cards.
Replace StaggerList with inline stagger-item rendering so we can apply z-50
directly to the stagger-item wrapper when its popover is open.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 03:09:17 -04:00
Michael Chihlas
8b3033ca9d fix: tree navigation root ID + session closure popover z-index
- TreeNavigationPage: initialize currentNodeId from tree_structure.id
  instead of hardcoded 'root' — fixes "Invalid tree structure" for trees
  with non-'root' root IDs (KB Accelerator, AI Flow Builder)
- SessionHistoryPage: add relative z-10 to session card when close
  popover is open so it renders above sibling cards

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 02:54:00 -04:00
Michael Chihlas
416bb230e3 feat: close sessions from history page with inline popover
Add ability to close active sessions directly from the Session History
page via an inline popover with outcome selection and optional notes.
Adds two new outcomes: cancelled and resolved_externally.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 01:59:12 -04:00