Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
58 commits
Select commit Hold shift + click to select a range
402a007
feat: basic AI page generation (single prompt)
ruchamahabal May 25, 2026
56680a8
fix: litellm import
ruchamahabal May 25, 2026
0c92375
chore: add AGENTS.md
ruchamahabal May 25, 2026
2e9420d
refactor: styles & data fetching as per guidelines
ruchamahabal May 25, 2026
b503d46
fix: strip fences in model response
ruchamahabal May 25, 2026
a23863f
fix!: remove Card component from registry, its outdated and models te…
ruchamahabal May 25, 2026
ee8cd28
fix: consider full page generation when root block is selected
ruchamahabal May 25, 2026
522b21a
fix(prompt): add rules/guardrails
ruchamahabal May 25, 2026
7f6d361
feat: setup and wire socket
ruchamahabal May 26, 2026
a9d5912
refactor: rename openrouter_api_key -> ai_api_key
ruchamahabal May 26, 2026
e860274
feat: model selector and non-block page generation (move to bg job)
ruchamahabal May 26, 2026
fc7bd55
feat: compress/decompress JSON -> YAML, enable streaming LLM responses
ruchamahabal May 27, 2026
7a214f7
refactor: convert streamBuffer to ref, offload handling update chunki…
ruchamahabal May 27, 2026
8a2d50e
fix(Style Panel): change background property input to backgroundColor
ruchamahabal May 27, 2026
c7bf2d0
fix(Style Panel): keep border style controls together
ruchamahabal May 27, 2026
59c75af
fix: instruct LLM to apply border properties separately
ruchamahabal May 27, 2026
f61a341
fix(streaming): attach/detach socket listeners on page switch instead…
ruchamahabal May 27, 2026
70ba3d8
refactor: move ai files under ai folder and update paths
ruchamahabal May 27, 2026
f9f18d6
fix: check page write permission in AI whitelisted functions
ruchamahabal May 27, 2026
e25cb3e
feat: AI Session
ruchamahabal May 27, 2026
0caec0a
fix: delete linked AI Session on page deletion
ruchamahabal May 27, 2026
7bc913d
fix: blocks with quoted strings were breaking in streaming
ruchamahabal May 27, 2026
d6c3f08
feat: modify block via prompt
ruchamahabal May 27, 2026
8b8b521
refactor: reuse rules in generation + modify prompts
ruchamahabal May 27, 2026
5560531
fix: pass icon usage guide in prompt
ruchamahabal May 28, 2026
1f7546d
fix: left panel & chat panel styles and scrolling
ruchamahabal May 28, 2026
11f2670
fix: remove extra margin in chat panel
ruchamahabal May 28, 2026
8899e8b
feat: add more style details to system prompt
ruchamahabal May 29, 2026
b4a3830
fix: raw style wiring in block codec, yaml parsing breaking with ?
ruchamahabal May 29, 2026
8b30700
feat: add more cheaper models
ruchamahabal May 29, 2026
83a24df
chore: update md files
ruchamahabal May 29, 2026
8c570ea
fix: don't show component rendering errors when AI response is streaming
ruchamahabal May 29, 2026
b000358
fix(prompt): apply default border radius on cards/containers, update …
ruchamahabal May 29, 2026
eed5bfb
Merge branch 'develop' into ai-gen
ruchamahabal May 29, 2026
cac9317
fix(prompt): pass fontSize options in TextBlock
ruchamahabal May 29, 2026
fd4ae56
fix: AI chat panel styles
ruchamahabal May 29, 2026
cbc0834
fix: don't allow overwriting body's component id
ruchamahabal May 29, 2026
cdb0348
refactor: move prompts to a separate file
ruchamahabal May 29, 2026
bc7205e
refactor: remove dead code
ruchamahabal May 29, 2026
1726627
fix: LLM's yaml output not quoting user facing strings
ruchamahabal May 29, 2026
ddd557c
fix: panel messages
ruchamahabal May 29, 2026
122e0af
fix: add nudge to setup openrouter key to use AI chat
ruchamahabal May 29, 2026
2f81913
fix(prompt): add FormControl and FormLabel usage details
ruchamahabal May 29, 2026
6b31b27
fix: expand canvas as per content
ruchamahabal May 29, 2026
55ca90f
fix(prompt): models not understanding name key in series (AxisChart)
ruchamahabal May 29, 2026
37e1b1f
perf: throttle streaming output
ruchamahabal May 29, 2026
01bd8a3
fix(prompt): include Designer persona in prompt
ruchamahabal May 29, 2026
2972da8
refactor: go back to JSON I/O format instead of YAML
ruchamahabal May 30, 2026
95a4b63
chore: remove dead code
ruchamahabal May 30, 2026
4a725bb
fix: fetch selected model from session
ruchamahabal May 30, 2026
2347d92
fix: don't switch to Layers panel on block selection
ruchamahabal May 30, 2026
67954a9
fix(prompt): modelValue props missing
ruchamahabal May 31, 2026
ba90962
fix: emit progress for actual blocks being built
ruchamahabal May 31, 2026
d2fe35b
fix: repair JSON returned by LLMs using json_repair lib
ruchamahabal May 31, 2026
b050eaa
fix: pause autosave and history tracking while generating pages/blocks
ruchamahabal May 31, 2026
078d0e4
fix: set min canvas height to 100dvh, avoid clipping content
ruchamahabal Jun 1, 2026
659ccbc
fix: pages panel spacing
ruchamahabal Jun 1, 2026
15b21fb
fix: left panel headers
ruchamahabal Jun 1, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 34 additions & 0 deletions agents.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
# Studio Project - Agent Context

## Overview

Studio is a visual app builder for the Frappe Framework. It allows developers to build modern web applications using a drag & drop layout builder, wire Frappe Framework data sources, edit component props and slots, and create reactive apps with dynamic variables and scripts.

## Agent Guidelines & Code Conventions

1. **Guidelines for writing good code for a developer**
- Choose clean code over clever code.
- Write object oriented code as much as possible.
- Keep function sizes small, ideally 10 lines.
- Keep files small, between 100 and 300 lines
- Keep directories or module small, fewer than 15 files.
- Avoid abbreviations.
- Use standard API as much as possible.
- Reuse. Write as little code as possible.
- Build the minimum working code, then iterate towards your goals.
- Don't add unnecessary dependencies unless required.
- Don't add unnecessary comments for simple code. Use it only when the code is not self-explanatory.
2. **Frontend Development:**
- Rely on `frappe-ui` components (e.g., buttons, dialogs, inputs) instead of building them from scratch (local copy in ./frappe-ui/)
- Use Tailwind CSS for styling. Avoid writing raw CSS (`.css` files or `<style>` blocks) unless absolutely necessary. Use espresso tokens for styling
3. **Backend Development:**
- Adhere to standard Frappe Framework conventions (Controller classes, hooks, `@frappe.whitelist()` methods).
- Migrations and schema changes are handled via DocTypes.
4. **State Management & Reactivity:**
- Use frappe-ui
- Use VueUse for common composition utilities.
- Use Pinia for global state if needed, though most component states can be managed locally.
5. **Data Fetching**
- Use `createResource`, `createDocumentResource`, `createListResource`, `call` from frappe-ui for data fetching
- Look at ./frontend/src/data/ for examples of data fetching composables
- Handle loading, error, and success states explicitly
34 changes: 34 additions & 0 deletions claude.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
# Studio Project - Agent Context

## Overview

Studio is a visual app builder for the Frappe Framework. It allows developers to build modern web applications using a drag & drop layout builder, wire Frappe Framework data sources, edit component props and slots, and create reactive apps with dynamic variables and scripts.

## Agent Guidelines & Code Conventions

1. **Guidelines for writing good code for a developer**
- Choose clean code over clever code.
- Write object oriented code as much as possible.
- Keep function sizes small, ideally 10 lines.
- Keep files small, between 100 and 300 lines
- Keep directories or module small, fewer than 15 files.
- Avoid abbreviations.
- Use standard API as much as possible.
- Reuse. Write as little code as possible.
- Build the minimum working code, then iterate towards your goals.
- Don't add unnecessary dependencies unless required.
- Don't add unnecessary comments for simple code. Use it only when the code is not self-explanatory.
2. **Frontend Development:**
- Rely on `frappe-ui` components (e.g., buttons, dialogs, inputs) instead of building them from scratch (local copy in ./frappe-ui/)
- Use Tailwind CSS for styling. Avoid writing raw CSS (`.css` files or `<style>` blocks) unless absolutely necessary. Use espresso tokens for styling
3. **Backend Development:**
- Adhere to standard Frappe Framework conventions (Controller classes, hooks, `@frappe.whitelist()` methods).
- Migrations and schema changes are handled via DocTypes.
4. **State Management & Reactivity:**
- Use frappe-ui
- Use VueUse for common composition utilities.
- Use Pinia for global state if needed, though most component states can be managed locally.
5. **Data Fetching**
- Use `createResource`, `createDocumentResource`, `createListResource`, `call` from frappe-ui for data fetching
- Look at ./frontend/src/data/ for examples of data fetching composables
- Handle loading, error, and success states explicitly
2 changes: 2 additions & 0 deletions frontend/components.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ export {}
/* prettier-ignore */
declare module 'vue' {
export interface GlobalComponents {
AIChatPanel: typeof import('./src/components/AIChatPanel.vue')['default']
AppComponent: typeof import('./src/components/AppComponent.vue')['default']
AppDialog: typeof import('./src/components/AppDialog.vue')['default']
AppHeader: typeof import('./src/components/AppLayout/AppHeader.vue')['default']
Expand Down Expand Up @@ -96,6 +97,7 @@ declare module 'vue' {
StudioLeftPanel: typeof import('./src/components/StudioLeftPanel.vue')['default']
StudioLogo: typeof import('./src/components/Icons/StudioLogo.vue')['default']
StudioRightPanel: typeof import('./src/components/StudioRightPanel.vue')['default']
StudioSettingsDialog: typeof import('./src/components/StudioSettingsDialog.vue')['default']
StudioToolbar: typeof import('./src/components/StudioToolbar.vue')['default']
TextBlock: typeof import('./src/components/AppLayout/TextBlock.vue')['default']
}
Expand Down
Loading
Loading