Commit Graph

1479 Commits

Author SHA1 Message Date
zhsama
b6465327c1 fix: Fix race condition in prompt editor reference sync 2026-01-31 22:10:38 +08:00
zhsama
4d82769baa fix: Fix null safety issues in workflow variable components 2026-01-31 21:26:32 +08:00
zhsama
be96e6032e refactor: add json schema type guard 2026-01-31 00:57:45 +08:00
zhsama
078e2d7150 refactor: streamline variable inspect editor state 2026-01-31 00:31:26 +08:00
zhsama
473262d70e refactor: type event emitter payloads
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-Claude)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-01-31 00:04:57 +08:00
zhsama
51ffab8a1a refactor: type variable inspect handlers
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-Claude)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-01-31 00:04:57 +08:00
zhsama
3bdc16ac5f refactor: make validateJSONSchema type-safe
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-Claude)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-01-30 23:30:51 +08:00
zhsama
03ec2f64cd refactor: Refactor storage keys into hierarchical structure 2026-01-30 23:23:21 +08:00
zhsama
a052c414ac refactor: Replace hardcoded localStorage key with constant 2026-01-30 23:07:41 +08:00
zhsama
d0d553ba38 refactor: Refactor context generate modal storage key management 2026-01-30 22:59:53 +08:00
zhsama
bc1d3bdf57 refactor: Extract nested node ID parsing into shared utility 2026-01-30 22:24:30 +08:00
zhsama
618dde1e3d refactor: Refactor chat view to use useMemo for version mapping 2026-01-30 22:24:30 +08:00
yyh
9d5db4993d
fix: disable SSR for ImportSkillModal dynamic import 2026-01-30 22:02:45 +08:00
yyh
ea88bcfbd2
feat: add ZIP skill import with client-side extraction
Add import skill modal that accepts .zip files via drag-and-drop or
file picker, extracts them client-side using fflate, validates structure
and security constraints, then batch uploads via presigned URLs.

- Add fflate dependency for browser-side ZIP decompression
- Create zip-extract.ts with fflate filter API for validation
- Create zip-to-upload-tree.ts for BatchUploadNodeInput tree building
- Create import-skill-modal.tsx with drag-and-drop support
- Lazy-load ImportSkillModal via next/dynamic for bundle optimization
- Add en-US and zh-Hans i18n keys for import modal
2026-01-30 21:54:00 +08:00
zhsama
ea91f96924 refactor: Replace hardcoded string checks with VarType enum 2026-01-30 21:51:03 +08:00
zhsama
73b78c9edc refactor: Improve type safety in context generate modal hooks 2026-01-30 21:41:04 +08:00
zhsama
617b64bb93 refactor: Improve type safety in context generate modal hooks 2026-01-30 21:41:04 +08:00
zhsama
304d8e5fe7 feat: Add @ and keyboard navigation to tool picker in prompt editor 2026-01-30 20:49:14 +08:00
yyh
dbc32af932
Merge remote-tracking branch 'origin/main' into feat/support-agent-sandbox
# Conflicts:
#	api/app.py
#	api/controllers/console/app/generator.py
#	api/core/llm_generator/llm_generator.py
#	web/eslint-suppressions.json
#	web/pnpm-lock.yaml
#	web/tailwind-common-config.ts
2026-01-30 20:08:35 +08:00
QuantumGhost
90fe9abab7
revert: revert human input relevant code (#31766)
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com>
2026-01-30 19:18:49 +08:00
Stephen Zhou
b7e752078c
fix: trigger doc link (#31754) 2026-01-30 17:30:24 +08:00
yyh
25ee3f7bc4
fix(skill): restore flex spacer to keep search input right-aligned
Add placeholder div for future CategoryTabs from marketplace API.
2026-01-30 17:18:18 +08:00
yyh
a4b0e4a2a0
fix(skill): clear file tree highlight when switching to start tab
The sync hook skipped deselectAll() when activeTabId was START_TAB_ID,
leaving stale highlights after closing the last file tab.
2026-01-30 17:12:51 +08:00
yyh
0f6f46b1f0
fix: use kebab-case in skills 2026-01-30 16:18:33 +08:00
yyh
03c8387830
fix(skill): make template header and search sticky on scroll 2026-01-30 16:12:47 +08:00
yyh
142b72f435
refactor(skill): remove tags/icons/categories, use kebab-case folder names
Drop CategoryTabs component, SkillTemplateTag type, icon/tags fields,
and UI_CONFIG from the fetch script. Upload folders now use the
kebab-case skill id (e.g. "skill-creator") instead of the display name.
Card shows the human-readable name from SKILL.md frontmatter while the
created folder uses the id for consistent naming.
2026-01-30 16:10:19 +08:00
yyh
4338632a78
fix(skill): use Dialog initialFocus to focus input on modal open
Expose initialFocus prop on Modal component (passthrough to Headless
UI Dialog) so the create blank skill modal reliably focuses the name
input when opened, replacing the ineffective autoFocus attribute.
2026-01-30 16:10:19 +08:00
yyh
5c0023b788
feat(skill): add create blank skill modal with name validation
Wire up the "Create Blank Skill" action card to open a modal where
users enter a skill name. The modal validates against existing skill
names in real-time and creates a folder with a SKILL.md file via
batchUpload, then opens the file as a pinned tab.
2026-01-30 16:10:19 +08:00
yyh
e9608532bd
feat(skill): guard template cards against duplicate skill addition
Add useExistingSkillNames hook that derives root folder names from the
cached asset tree via TanStack Query select, then use it to show an
"Added" state on hover for already-present skills and block re-upload.
2026-01-30 16:10:19 +08:00
yyh
60b4b10622
fix(skill): disable template buttons during upload to prevent duplicates
Pass disabled/loading props to TemplateCard declaratively from
loadingId state. All cards are disabled while any upload is in
progress, and the active card shows a loading spinner. Remove the
imperative pointer-events overlay in favor of native button disabled.
2026-01-30 16:10:19 +08:00
yyh
abe2b37e3a
fix(skill): use SearchInput with debounce and align card to Figma
Replace custom search input with SearchInput component (built-in clear
button) and add 300ms debounce. Fix template card: use Tailwind token
for icon background, fix Badge to use children with badge-s class and
uppercase, match empty-tag fallback height to badge size.
2026-01-30 16:10:18 +08:00
yyh
c33d27938d
fix(skill): align category tabs with actual skill tags
Remove unused categories (Search, Security, Analysis) and add
real ones (Document, Design, Creative). Consolidate xlsx tags to
Document/Productivity and webapp-testing to Development only,
eliminating orphan tags with single-skill coverage.
2026-01-30 16:10:18 +08:00
yyh
32329cf27b
perf(skill): stabilize useCallback refs and memoize filtered list
Use useRef for batchUpload and emitTreeUpdate to remove unstable
dependencies from useCallback, preventing unnecessary memo invalidation
on all 16 TemplateCard components. Wrap filtered list in useMemo and
replace && conditional with ternary for rendering safety.
2026-01-30 16:10:18 +08:00
yyh
038b03fa8e
feat(skill): add script-driven full skill template generation
Add fetch-skill-templates.ts script that clones anthropics/skills repo
and generates complete directory trees (scripts, references, assets)
for all 16 skills with base64 encoding for binary files, replacing
the previous single-SKILL.md-only approach. Generated files are
lazy-loaded per skill on user click.
2026-01-30 16:10:18 +08:00
yyh
acc8671c28
fix: hide artifacts tab in variable inspect panel for classic mode
Guard variable-inspect from rendering artifacts-related UI and API calls
when sandbox is not enabled, preventing unnecessary sandbox-file requests.
2026-01-30 16:10:17 +08:00
yyh
66b4fa102b
feat(skill): add skill template types, card component and upload utility
Introduce type definitions separating raw skill data (SkillTemplate)
from UI metadata (SkillTemplateWithMetadata) to match the actual
skill format from upstream repos. Add template card component with
hover state and file count display, template-to-upload conversion
utility, and i18n keys for en-US/zh-Hans.
2026-01-30 16:10:17 +08:00
Joel
f5b84384cf feat: support search tool after @ 2026-01-30 15:49:30 +08:00
Joel
bf2e3d5151 fix: remove show file transtation 2026-01-30 15:17:08 +08:00
Joel
2a46bf26b5 fix: choose file has extra bg 2026-01-30 14:49:08 +08:00
yyh
561f383cbc
Revert "refactor(skill): replace React icon components with CSS Icons"
This reverts commit 919d7ef5cd.
2026-01-30 12:42:20 +08:00
Joel
2e63e20131 chore: computer use to true 2026-01-30 11:06:44 +08:00
Wu Tianwei
fedd097f63
feat: Human Input node (Frontend Part) (#31631)
Co-authored-by: JzoNg <jzongcode@gmail.com>
Co-authored-by: Joel <iamjoel007@gmail.com>
Co-authored-by: yessenia <yessenia.contact@gmail.com>
Co-authored-by: QuantumGhost <obelisk.reg+git@gmail.com>
2026-01-30 10:16:46 +08:00
yyh
ff478b6fef
perf(workflow): optimize plugin installation hooks to reduce unnecessary queries and memo invalidations
Only enable the tool query matching the node's provider_type instead of
all four, and use primitive useMemo dependencies instead of the whole
data object to avoid redundant recomputations on every render.
2026-01-30 01:56:07 +08:00
zhsama
e9c9f0d7cc perf(workflow): optimize nested-node cascade deletion 2026-01-30 01:53:19 +08:00
yyh
c8a0a2c00d
perf(workflow): skip unnecessary query subscriptions for non-plugin nodes
Add `enabled` parameter to tool query hooks so non-plugin nodes
(LLM, Code, IfElse, etc.) avoid registering React Query observers.
Extract shared matching functions into plugin-install-check utils to
eliminate duplicate logic between the hook and the checklist.
2026-01-30 01:46:50 +08:00
zhsama
5d8ba8f8cc feat: Recursively delete nested children (sub-graph) when removing nodes 2026-01-30 01:40:57 +08:00
yyh
03f1197d77
fix(workflow): memoize useCollaborativeWorkflow return value
Wrap the returned object in useMemo to maintain referential stability
and prevent unnecessary re-renders in consumers.
2026-01-30 01:31:25 +08:00
yyh
464b92da32
fix(workflow): eliminate infinite loop in plugin install state management
Replace useEffect-based state sync (_pluginInstallLocked/_dimmed) with
render-time derived computation in BaseNode, breaking the cycle of
effect → node data update → re-render → effect. Extract plugin missing
check into a pure utility function for checklist reuse.
2026-01-30 01:30:57 +08:00
zhsama
1a51f52061 Merge remote-tracking branch 'origin/feat/support-agent-sandbox' into feat/support-agent-sandbox 2026-01-29 23:53:34 +08:00
zhsama
20a4a83129 feat: Refactor app export to support sandboxed bundle format 2026-01-29 23:36:19 +08:00
yyh
919d7ef5cd
refactor(skill): replace React icon components with CSS Icons
Migrate all icon usage in the skill directory from @remixicon/react
and custom SVG components to Tailwind CSS icon classes (i-ri-*, i-custom-*).
Update MenuItem API to accept string class names instead of React.ElementType.
2026-01-29 21:57:17 +08:00
yyh
6ee9078349
Merge remote-tracking branch 'origin/main' into feat/support-agent-sandbox
# Conflicts:
#	api/.env.example
#	api/uv.lock
#	web/app/components/app/create-app-modal/index.tsx
#	web/app/components/app/create-from-dsl-modal/index.tsx
#	web/app/components/apps/app-card.tsx
#	web/pnpm-lock.yaml
2026-01-29 21:25:28 +08:00
yyh
ff71816373
refactor: use query data for selected file download, keep mutation for tree downloads
The toolbar download button now uses the already-fetched download URL
from useQuery (zero extra requests), while tree node downloads keep
using useMutation with React Query-managed isPending state instead of
a hand-rolled useState wrapper.
2026-01-29 20:48:58 +08:00
zhsama
9b62be2eb1 Refetch suggested questions after reset in context generate modal 2026-01-29 19:17:44 +08:00
zhsama
8f7b9e2de4 feat: Trigger single run in sub-graph after modal opens 2026-01-29 19:17:43 +08:00
zhsama
e47f690cd2 refactore: Replace hardcoded null strategy strings with constant 2026-01-29 19:17:42 +08:00
CrabSAMA
7d1ad7e03a
refactor: unified shortcut keys display using component (#31713) 2026-01-29 17:57:46 +08:00
yyh
92731bffba
feat: add ArtifactSlice and integrate artifact preview into skill editor tabs
Introduce a dedicated Zustand ArtifactSlice to manage artifact selection
state with mutual exclusion against the main file tree. Artifact files
from the sandbox can now be opened as tabs in the skill editor, rendered
via a lightweight ArtifactContentPanel that reuses ReadOnlyFilePreview.
2026-01-29 17:52:41 +08:00
yyh
fb034a1324
fix: strip leading dot from file extension before matching
Backend returns extensions with a leading dot (e.g., `.png` from
`os.path.splitext`), causing binary/media files to be misclassified
as text since they didn't match the dot-free extension lists.
2026-01-29 17:07:40 +08:00
yyh
5c91311077
fix: use downloadUrl utility instead of window.open for file downloads
Replace window.open with downloadUrl from utils/download to trigger
proper file downloads instead of opening files in a new browser tab.
2026-01-29 17:05:01 +08:00
yyh
76484406a2
feat(inspect): add read-only file preview in ArtifactsTab
Implement ReadOnlyFilePreview to render sandbox files by type
(code, markdown, image, video, SQLite, unsupported) using existing
skill viewer components with readOnly support. Add
useSandboxFileDownloadUrl and useFetchTextContent hooks for data
fetching, and generalize useFileTypeInfo to accept any file-like
object.
2026-01-29 16:42:22 +08:00
hjlarry
079484d21c feat: sync file tree 2026-01-29 16:33:33 +08:00
zhsama
72c712b3bb refactor: Remove thought process display from context generate chat 2026-01-29 16:03:30 +08:00
盐粒 Yanli
b9ac7af9c5
refactor(web): consolidate download helpers (#31664) 2026-01-29 16:02:49 +08:00
Joel
8a5983e071 chore: update no data ui 2026-01-29 15:39:45 +08:00
JQSevenMiao
4f2cd40498
fix: convert HTTP method to lowercase when parsing cURL commands (#31704)
Co-authored-by: jiasiqi <jiasiqi3@tal.com>
2026-01-29 15:37:37 +08:00
Joel
9fa42a65e1 chore: no refer tools data text and loading 2026-01-29 15:23:17 +08:00
yyh
8185d146b6
fix(inspect): extract ArtifactsEmpty component and align split-panel empty state
Extract shared empty state card into ArtifactsEmpty component to
deduplicate the no-files and no-selection empty states. Align the
split-panel right-side empty state with the variables tab pattern.
Remove FC type annotations in favor of inline parameter types.
2026-01-29 14:38:08 +08:00
hjlarry
a5ace48f96 feat: code editor cursor sync 2026-01-29 14:28:30 +08:00
yyh
d73a36d6bc
fix(inspect): add aria-hidden to decorative icon and use stable keys for path breadcrumb
Mark the empty state SearchLinesSparkle icon as aria-hidden for screen
readers. Replace array-index keys with cumulative path keys (O(n) vs
O(n²)) to satisfy react/no-array-index-key and improve key stability.
2026-01-29 14:20:12 +08:00
yyh
3ad05be9ca
fix(inspect): align artifacts empty state with variables empty state design
Replace the minimal centered text card in artifacts tab empty state with
a full-height card layout matching the variables tab, including icon
container (SearchLinesSparkle), title, description, and learn more link.
2026-01-29 14:04:30 +08:00
yyh
bacc5c32f5
feat(portal): add useContextMenuFloating hook for coordinate-based context menus
Replace useClickAway + fixed positioning in file tree context menu with
a floating-ui based hook that provides collision detection (flip/shift),
ARIA role="menu", Escape/outside-click dismiss, and scroll dismiss via
passive capture listener with ref-stabilized callback.
2026-01-29 14:01:36 +08:00
yyh
efb3657cfe
fix(skill): use downloadUrl utility instead of window.open for file downloads
Replaces window.open with the downloadUrl helper from utils/download.ts
to trigger proper browser download behavior via <a download> instead of
opening a new tab that may display garbled content.
2026-01-29 12:49:15 +08:00
hjlarry
90bb7bf2f3 feat: code/txt editor sync 2026-01-29 09:16:52 +08:00
hjlarry
26dd6c128c feat: mouse right click can add new comment 2026-01-29 09:13:12 +08:00
zhsama
23ee9e618b fix: Remove default completion params and omit empty params from model
config
2026-01-29 01:10:03 +08:00
yyh
8326b9e3e5
refactor(skill): remove React.FC type annotations from all components
Replace FC<Props> pattern with direct props typing in function parameters
for better TypeScript inference and modern React best practices.
2026-01-28 23:34:08 +08:00
yyh
999587fbdd
fix(workflow): replace hardcoded strings with i18n in test run panel title
Use existing i18n keys for internationalization:
- singleRun.testRun: "Test Run" / "测试运行"
- common.running: "Running" / "运行中"
2026-01-28 23:03:49 +08:00
yyh
f16516549e
feat(workflow): add clear button to workflow test run panel
Features:
- Add refresh button to clear test run history (data, inputs, node highlights)
- Persist workflowRunningData when closing panel (from previous commit)

Code quality improvements:
- Refactor to declarative pattern: effectiveTab derived from state, not set in effects
- Replace && with ternary operators for conditional rendering (Vercel best practices)
- Fix created_by type: change from string to object to match backend API
- Remove `as any` type assertion, use proper type-safe access
- Title now declaratively shows status based on workflowRunningData presence

Files changed:
- use-workflow-interactions.ts: add handleClearWorkflowRunHistory hook
- workflow-preview.tsx: declarative tab state, clear button, type-safe props
- types.ts: fix created_by type definition
- test files: update mock data to match corrected types
2026-01-28 22:48:27 +08:00
zhsama
2aa6dcaa1a feat: Improve error messages for missing workflow outputs 2026-01-28 21:23:57 +08:00
yyh
3dad0b38df
refactor(workflow)!: persist workflowRunningData when closing debug panel
Keep test run results (RESULT/DETAIL/TRACING tabs) available after
closing and reopening the debug panel, or switching between Graph
and Skill views.
2026-01-28 21:15:45 +08:00
Joel
c600fdafcd fix: skill always same 2026-01-28 21:10:50 +08:00
zxhlyh
3af927556e fix: workflow result generation render 2026-01-28 21:01:47 +08:00
yyh
f9f3d33911
fix(variable-inspect): anchor clear button to right side of tab header
Position the clear button relative to the right divider instead of
following the tab labels, ensuring consistent positioning across
different language translations. Also fix tab switching jitter by
setting a fixed header height.
2026-01-28 20:34:23 +08:00
yyh
acec271e88
fix(skill): resolve race condition in upload progress tracking
Use shared object reference instead of separate variables to track
upload progress across concurrent Promise.all operations, preventing
progress bar from showing incorrect or regressing values.
2026-01-28 20:25:12 +08:00
yyh
76c4d7f62c
feat(skill): add preprocessing for markdown files before upload
Introduce prepareSkillUploadFile utility that wraps markdown file content
in a JSON payload format before uploading. This ensures consistent handling
of skill files across file upload, folder upload, and drag-and-drop operations.
2026-01-28 20:17:21 +08:00
yyh
fb78a4450d
feat: implement node reordering functionality in file tree component 2026-01-28 19:38:41 +08:00
zhsama
636156f5da fix: Fix workflow inspect vars to include parent nodes in subgraph mode 2026-01-28 18:24:04 +08:00
zhsama
7408405c91 feat: Add subgraph output validation for single-run debugging 2026-01-28 18:24:04 +08:00
Joel
bd80cd217d fix: no auth label text and default handle auth not back 2026-01-28 16:48:05 +08:00
Joel
ceea593010 feat: tool no auth node 2026-01-28 16:48:05 +08:00
yyh
3c7f641f60
fix(skill): remove non-functional copy menu item from file tree context menu 2026-01-28 16:34:57 +08:00
yyh
000bdf6bc0
style: uploading state for upload folder 2026-01-28 16:34:57 +08:00
hjlarry
4c77b5f5c5 feat: sync the markdown file dirty status 2026-01-28 16:29:17 +08:00
Joel
7cf54238c3 feat: handle provide label and action label 2026-01-28 16:14:57 +08:00
Joel
807697c664 chore: icon to fn 2026-01-28 16:01:22 +08:00
Joel
116e075b94 feat: tool icon map 2026-01-28 16:01:22 +08:00
yyh
a784121070
fix(skill): align upload tooltip with Figma design
Replace animated pulse background with static progress bar using
design tokens and increase upload icon to 24px.
2026-01-28 15:58:49 +08:00
yyh
543802cc65
feat(skill): add three-state upload progress tooltip
Replace simple uploading/success indicator with a full three-state
tooltip (uploading, success, partial_error) that overlays the DropTip
position. Add upload slice to skill editor store and wire progress
tracking into file/folder upload operations.
2026-01-28 15:52:08 +08:00
Joel
156b779a1d chore: enchance ui 2026-01-28 15:43:03 +08:00