owndesign 0.1.12 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +1 -1
- package/dist/server/index.js +103 -63
- package/dist/server/prompts/agents/component-audit.md +1 -1
- package/dist/server/prompts/agents/design-page.md +77 -57
- package/dist/web/assets/{angular-html-CFs7eovz.js → angular-html-BC-ehZ2Z.js} +1 -1
- package/dist/web/assets/{angular-ts-CEaZRH8K.js → angular-ts-CbNdIQVH.js} +1 -1
- package/dist/web/assets/{apl-BtwP9-yi.js → apl-CKXIPXmN.js} +1 -1
- package/dist/web/assets/{arc-BKgXct_K.js → arc-DCbsmfyT.js} +1 -1
- package/dist/web/assets/architecture-7EHR7CIX-Dy_x80xD.js +1 -0
- package/dist/web/assets/{architectureDiagram-3BPJPVTR-tBs4y1LK.js → architectureDiagram-3BPJPVTR-C3CSEDbb.js} +1 -1
- package/dist/web/assets/{astro-DGOoXofX.js → astro-0YgDtFyB.js} +1 -1
- package/dist/web/assets/{blade-CvIhqJHQ.js → blade-DCBz6o9i.js} +1 -1
- package/dist/web/assets/{blockDiagram-GPEHLZMM-Dbmmdxse.js → blockDiagram-GPEHLZMM-Wy4mtab2.js} +1 -1
- package/dist/web/assets/{c-cYQPp2_G.js → c-B_5YfUT4.js} +1 -1
- package/dist/web/assets/{c4Diagram-AAUBKEIU-CSrU4RnA.js → c4Diagram-AAUBKEIU-DvAQK-yr.js} +1 -1
- package/dist/web/assets/channel-CNy21oVR.js +1 -0
- package/dist/web/assets/{chunk-2J33WTMH-Cs-XMScI.js → chunk-2J33WTMH-D12BmulM.js} +1 -1
- package/dist/web/assets/{chunk-4BX2VUAB-B4ieHaCd.js → chunk-4BX2VUAB-CUsT6Yoy.js} +1 -1
- package/dist/web/assets/{chunk-55IACEB6-CgnoAb5q.js → chunk-55IACEB6-B1fNBh7K.js} +1 -1
- package/dist/web/assets/{chunk-727SXJPM-wPBSQiFA.js → chunk-727SXJPM-BNwBLitG.js} +1 -1
- package/dist/web/assets/{chunk-AQP2D5EJ-CqrJNLOk.js → chunk-AQP2D5EJ-Cj6w8RRN.js} +1 -1
- package/dist/web/assets/{chunk-FMBD7UC4-_mUgb7S8.js → chunk-FMBD7UC4-DZQMeOiP.js} +1 -1
- package/dist/web/assets/{chunk-ND2GUHAM-C3VW7Cve.js → chunk-ND2GUHAM-BDZZZpgK.js} +1 -1
- package/dist/web/assets/chunk-QZHKN3VN-ZvBMuvS3.js +1 -0
- package/dist/web/assets/classDiagram-4FO5ZUOK-CdVQzF3q.js +1 -0
- package/dist/web/assets/classDiagram-v2-Q7XG4LA2-CdVQzF3q.js +1 -0
- package/dist/web/assets/{cobol-CT20AbWb.js → cobol-B7rjWy71.js} +1 -1
- package/dist/web/assets/{coffee-0rJcXjl9.js → coffee-327Z21kX.js} +1 -1
- package/dist/web/assets/{cose-bilkent-S5V4N54A-DuQ1yFPA.js → cose-bilkent-S5V4N54A-D1c4YrLP.js} +1 -1
- package/dist/web/assets/{cpp-D5SbIIZY.js → cpp-76QBVYPh.js} +1 -1
- package/dist/web/assets/{crystal-Cj4TXi57.js → crystal-B4heXbZm.js} +1 -1
- package/dist/web/assets/{css-DtnxUqP8.js → css-CzEdf7OR.js} +1 -1
- package/dist/web/assets/{dagre-BM42HDAG-BqRbkxFR.js → dagre-BM42HDAG-ET87-tzF.js} +1 -1
- package/dist/web/assets/{diagram-2AECGRRQ-CK-zBvhd.js → diagram-2AECGRRQ-CBQXEPqZ.js} +1 -1
- package/dist/web/assets/{diagram-5GNKFQAL-DtRurQ3W.js → diagram-5GNKFQAL-CtNzeaR4.js} +1 -1
- package/dist/web/assets/{diagram-KO2AKTUF-C98kWomB.js → diagram-KO2AKTUF-DKv9ewpj.js} +1 -1
- package/dist/web/assets/{diagram-LMA3HP47-Bnl8AVAT.js → diagram-LMA3HP47-BdL7Q4hm.js} +1 -1
- package/dist/web/assets/{diagram-OG6HWLK6-CdsMzW4t.js → diagram-OG6HWLK6-BTYYRviK.js} +1 -1
- package/dist/web/assets/{edge-CWJ2-CvL.js → edge-CbifZx89.js} +1 -1
- package/dist/web/assets/{elixir-9WOcqFnG.js → elixir-D7epo7XU.js} +1 -1
- package/dist/web/assets/{elm-fLyiEogZ.js → elm-CDnfHiSW.js} +1 -1
- package/dist/web/assets/{erDiagram-TEJ5UH35-D9WhFUc7.js → erDiagram-TEJ5UH35-DoS_g6rc.js} +1 -1
- package/dist/web/assets/{erb-E2w2Wuk4.js → erb-CJPDtktp.js} +1 -1
- package/dist/web/assets/eventmodeling-FCH6USID-dHNYNvhr.js +1 -0
- package/dist/web/assets/{flowDiagram-I6XJVG4X-C70nakMA.js → flowDiagram-I6XJVG4X-INqAi_9A.js} +1 -1
- package/dist/web/assets/{ganttDiagram-6RSMTGT7-CP5KBfFN.js → ganttDiagram-6RSMTGT7-BtV9RfaV.js} +1 -1
- package/dist/web/assets/{git-rebase-x3KRtncF.js → git-rebase-XN1VAGxD.js} +1 -1
- package/dist/web/assets/gitGraph-WXDBUCRP-BTlPmENP.js +1 -0
- package/dist/web/assets/{gitGraphDiagram-PVQCEYII-Df0FpR0s.js → gitGraphDiagram-PVQCEYII-Bg7oxgNx.js} +1 -1
- package/dist/web/assets/{glimmer-js-Cg54b2H9.js → glimmer-js-jAUeYMlX.js} +1 -1
- package/dist/web/assets/{glimmer-ts-CHG4mXcI.js → glimmer-ts-wcJbAc9L.js} +1 -1
- package/dist/web/assets/{glsl-D3AVHhgf.js → glsl-CqkwmhMS.js} +1 -1
- package/dist/web/assets/{graphql-Cid5k0bB.js → graphql-MSHUJ_J9.js} +1 -1
- package/dist/web/assets/{hack-CgNtiKFF.js → hack-o9VcDxFX.js} +1 -1
- package/dist/web/assets/{haml-zYfBQKD9.js → haml-yMII7dOY.js} +1 -1
- package/dist/web/assets/{handlebars-R3KEMud6.js → handlebars-DqywSDps.js} +1 -1
- package/dist/web/assets/{highlighted-body-OFNGDK62-DNkjspl7.js → highlighted-body-OFNGDK62-DZUhBEEf.js} +1 -1
- package/dist/web/assets/{html-BymHzFSR.js → html-D8D_RndX.js} +1 -1
- package/dist/web/assets/{html-derivative-DqaPDM9z.js → html-derivative-Db1SyKg8.js} +1 -1
- package/dist/web/assets/{http-BBfT1XoF.js → http-Bqs_GAGw.js} +1 -1
- package/dist/web/assets/{hurl-B3OMVWCB.js → hurl-j0mDeRMp.js} +1 -1
- package/dist/web/assets/{index-CA2dCiLp.js → index-DlSOjemg.js} +62 -62
- package/dist/web/assets/info-J43DQDTF-Dk_AfWti.js +1 -0
- package/dist/web/assets/{infoDiagram-5YYISTIA-BW4ua_Dm.js → infoDiagram-5YYISTIA-D4cmnLLV.js} +1 -1
- package/dist/web/assets/{ishikawaDiagram-YF4QCWOH-7YC9v2Lm.js → ishikawaDiagram-YF4QCWOH-BY9yvtJK.js} +1 -1
- package/dist/web/assets/{java-CHjBQof-.js → java-CegvNhLh.js} +1 -1
- package/dist/web/assets/{javascript-CI31Lbgw.js → javascript-DhcUAesx.js} +1 -1
- package/dist/web/assets/{jinja-D5rfCvml.js → jinja-BdSDD1Q-.js} +1 -1
- package/dist/web/assets/{jison-DVkmH2rX.js → jison-CarYqmfq.js} +1 -1
- package/dist/web/assets/{journeyDiagram-JHISSGLW-DrB9twlC.js → journeyDiagram-JHISSGLW-rDquyMpx.js} +1 -1
- package/dist/web/assets/{json-BOZlh-KA.js → json-wCF8Ai7e.js} +1 -1
- package/dist/web/assets/{jsx-D81bVyrd.js → jsx-Ct3LR2iE.js} +1 -1
- package/dist/web/assets/{julia-DOpgNe80.js → julia-Brh5r__6.js} +1 -1
- package/dist/web/assets/{just-0wiA6ro1.js → just-CK9u7rV8.js} +1 -1
- package/dist/web/assets/{kanban-definition-UN3LZRKU-DypN0DR-.js → kanban-definition-UN3LZRKU-DRY4BHuX.js} +1 -1
- package/dist/web/assets/{latex-C49JQz3C.js → latex-CnioxxTZ.js} +1 -1
- package/dist/web/assets/{linear-CmJuffWc.js → linear-DdVYArrQ.js} +1 -1
- package/dist/web/assets/{liquid-WcatxBvx.js → liquid-CWr27PHL.js} +1 -1
- package/dist/web/assets/{lua-CMfcWyy-.js → lua-BHz_f72B.js} +1 -1
- package/dist/web/assets/{marko-Ciurfdrp.js → marko-DYZOkg7A.js} +1 -1
- package/dist/web/assets/{mdc-BhPAXxoA.js → mdc-a5KQMe4S.js} +1 -1
- package/dist/web/assets/mermaid-GHXKKRXX-DsECfWij.js +1 -0
- package/dist/web/assets/{mermaid-parser.core-CzdVF1Y-.js → mermaid-parser.core-BAsHbYUQ.js} +2 -2
- package/dist/web/assets/{mindmap-definition-RKZ34NQL-kVoo0P1k.js → mindmap-definition-RKZ34NQL-C1ndv4OX.js} +1 -1
- package/dist/web/assets/{nginx-WlzShe2g.js → nginx-DYjAek21.js} +1 -1
- package/dist/web/assets/{nim-DhsH5P-A.js → nim-BY3DE5rh.js} +1 -1
- package/dist/web/assets/packet-YPE3B663-C6X9xd7B.js +1 -0
- package/dist/web/assets/{perl-BgiWtF5-.js → perl-Q7rsz5p8.js} +1 -1
- package/dist/web/assets/{php-bcRqBpZO.js → php-wkLOOMEB.js} +1 -1
- package/dist/web/assets/pie-LRSECV5Y-B7m9jxWQ.js +1 -0
- package/dist/web/assets/{pieDiagram-4H26LBE5-3G_1zLJc.js → pieDiagram-4H26LBE5-hbmKZkAo.js} +1 -1
- package/dist/web/assets/{pug-m8pTbPLN.js → pug-DBjGFTz6.js} +1 -1
- package/dist/web/assets/{qml-CJvFQ3Wa.js → qml-6JbnGGh-.js} +1 -1
- package/dist/web/assets/{quadrantDiagram-W4KKPZXB-B6PNPjDa.js → quadrantDiagram-W4KKPZXB-Ce3Tyy1v.js} +1 -1
- package/dist/web/assets/{r-BClqLKAj.js → r-CpWosUkA.js} +1 -1
- package/dist/web/assets/radar-GUYGQ44K-CNV--1hE.js +1 -0
- package/dist/web/assets/{razor-NkuRFDGJ.js → razor-VaRLosil.js} +1 -1
- package/dist/web/assets/{regexp-J7oxKsOx.js → regexp-BXX0dR0g.js} +1 -1
- package/dist/web/assets/{requirementDiagram-4Y6WPE33-uhnMTTcD.js → requirementDiagram-4Y6WPE33-BvuMdAA_.js} +1 -1
- package/dist/web/assets/{rst-CagZgeQR.js → rst-B5mAlZz_.js} +1 -1
- package/dist/web/assets/{ruby-DVMSmhqW.js → ruby-CuJVGKz0.js} +1 -1
- package/dist/web/assets/{sankeyDiagram-5OEKKPKP-Bl2-ZE_M.js → sankeyDiagram-5OEKKPKP-9vzIUX0R.js} +1 -1
- package/dist/web/assets/{sas-t3gcbp2x.js → sas-CVzjXYMr.js} +1 -1
- package/dist/web/assets/{scss-DiSJaDhP.js → scss-WQpgeU5g.js} +1 -1
- package/dist/web/assets/{sequenceDiagram-3UESZ5HK-BuqdPJ2w.js → sequenceDiagram-3UESZ5HK-q6rXjDsy.js} +1 -1
- package/dist/web/assets/{shellscript-DymPm4vG.js → shellscript-CycmgFgs.js} +1 -1
- package/dist/web/assets/{shellsession-am0AjWwV.js → shellsession-CSmahWBB.js} +1 -1
- package/dist/web/assets/{soy-CfnFZXe-.js → soy-E8MJKPgz.js} +1 -1
- package/dist/web/assets/{sql-ASrPneJi.js → sql-ChzFHxMA.js} +1 -1
- package/dist/web/assets/{stata-DzHpZ_Zs.js → stata-D-Voeimj.js} +1 -1
- package/dist/web/assets/{stateDiagram-AJRCARHV-4pzvy1EY.js → stateDiagram-AJRCARHV-QkbVYicl.js} +1 -1
- package/dist/web/assets/stateDiagram-v2-BHNVJYJU-CemwCoPd.js +1 -0
- package/dist/web/assets/{surrealql-Daffo6Fa.js → surrealql-CDreHe5D.js} +1 -1
- package/dist/web/assets/{svelte-iCkXz020.js → svelte-UtC71yfS.js} +1 -1
- package/dist/web/assets/{templ-i0RZk0Nv.js → templ-DI5vQSP6.js} +1 -1
- package/dist/web/assets/{tex-CNVvk4MJ.js → tex-B1pg-O0j.js} +1 -1
- package/dist/web/assets/{timeline-definition-PNZ67QCA-B4vkrP31.js → timeline-definition-PNZ67QCA-hOb9CPgd.js} +1 -1
- package/dist/web/assets/treeView-BLDUP644-4kzz9e5T.js +1 -0
- package/dist/web/assets/treemap-LRROVOQU-CUGlq2kA.js +1 -0
- package/dist/web/assets/{ts-tags-JKlKXvrj.js → ts-tags-DDRBQd18.js} +1 -1
- package/dist/web/assets/{tsx-C_VV6dl3.js → tsx-BNOyqGp9.js} +1 -1
- package/dist/web/assets/{twig--4lENSWn.js → twig-zClWYmrr.js} +1 -1
- package/dist/web/assets/{typescript-DgI0Mcyp.js → typescript-Bywfx-vz.js} +1 -1
- package/dist/web/assets/{vennDiagram-CIIHVFJN-Bqd01Zcu.js → vennDiagram-CIIHVFJN-Cx7yBOK-.js} +1 -1
- package/dist/web/assets/{vue-vi4NPaCj.js → vue-Bp_voCJR.js} +1 -1
- package/dist/web/assets/{vue-html-DRyHp-xX.js → vue-html-C43GF5Id.js} +1 -1
- package/dist/web/assets/{vue-vine-Dvq5ocm8.js → vue-vine-CSRbNOMz.js} +1 -1
- package/dist/web/assets/wardley-L42UT6IY-NTb3kln2.js +1 -0
- package/dist/web/assets/{wardleyDiagram-YWT4CUSO-Cx9MIJxe.js → wardleyDiagram-YWT4CUSO-Cwiuub7b.js} +1 -1
- package/dist/web/assets/{xml-Bktrco2r.js → xml-rhD_p6eK.js} +1 -1
- package/dist/web/assets/{xsl-Buq9dfal.js → xsl-B-H8kR_6.js} +1 -1
- package/dist/web/assets/{xychartDiagram-2RQKCTM6-BqTFlb7h.js → xychartDiagram-2RQKCTM6-DAix_-GG.js} +1 -1
- package/dist/web/assets/{yaml-B_qEYHeC.js → yaml-CRIMWRGF.js} +1 -1
- package/dist/web/index.html +1 -1
- package/package.json +1 -1
- package/dist/web/assets/architecture-7EHR7CIX-BYKtSaOh.js +0 -1
- package/dist/web/assets/channel-5Xzz28Qt.js +0 -1
- package/dist/web/assets/chunk-QZHKN3VN-H7pvEW6k.js +0 -1
- package/dist/web/assets/classDiagram-4FO5ZUOK-ygdYN009.js +0 -1
- package/dist/web/assets/classDiagram-v2-Q7XG4LA2-ygdYN009.js +0 -1
- package/dist/web/assets/eventmodeling-FCH6USID-CqqtP421.js +0 -1
- package/dist/web/assets/gitGraph-WXDBUCRP-2tg1GHmS.js +0 -1
- package/dist/web/assets/info-J43DQDTF-D4dOVjqy.js +0 -1
- package/dist/web/assets/mermaid-GHXKKRXX-CuYV6cEM.js +0 -1
- package/dist/web/assets/packet-YPE3B663-ojSC-sfx.js +0 -1
- package/dist/web/assets/pie-LRSECV5Y-DawZckTj.js +0 -1
- package/dist/web/assets/radar-GUYGQ44K-DiHIeStu.js +0 -1
- package/dist/web/assets/stateDiagram-v2-BHNVJYJU-BtUsE_9v.js +0 -1
- package/dist/web/assets/treeView-BLDUP644-Btkd1NAS.js +0 -1
- package/dist/web/assets/treemap-LRROVOQU-Dz0O1QCQ.js +0 -1
- package/dist/web/assets/wardley-L42UT6IY-bwSYb6Fl.js +0 -1
package/dist/index.js
CHANGED
package/dist/server/index.js
CHANGED
|
@@ -56834,14 +56834,32 @@ function createDeleteToolDefinition() {
|
|
|
56834
56834
|
}
|
|
56835
56835
|
|
|
56836
56836
|
// ../core/src/agent/tools/edit.ts
|
|
56837
|
+
var DESCRIPTION = [
|
|
56838
|
+
"Performs exact string replacements in Project Workspace files.",
|
|
56839
|
+
"",
|
|
56840
|
+
"Usage:",
|
|
56841
|
+
"- You must use the read tool before editing an existing file so you can match the current contents exactly.",
|
|
56842
|
+
"- The path parameter must be a relative file path inside the Project Workspace.",
|
|
56843
|
+
"- When editing text from read tool output, preserve the exact indentation after the line number prefix.",
|
|
56844
|
+
"- The line number prefix format is `<line>: `. Everything after that prefix is the actual file content to match.",
|
|
56845
|
+
"- Never include any part of the line number prefix in oldString or newString.",
|
|
56846
|
+
"- Prefer editing existing files. Only create new files when the user request explicitly requires it.",
|
|
56847
|
+
"- Only use emojis if the user explicitly requests them.",
|
|
56848
|
+
"- The edit will fail if oldString is not found in the file.",
|
|
56849
|
+
"- The edit will fail if oldString is found multiple times unless replaceAll is true.",
|
|
56850
|
+
"- Provide more surrounding context in oldString when you need to identify one specific match.",
|
|
56851
|
+
"- Use replaceAll for replacing or renaming every occurrence of a string across the file."
|
|
56852
|
+
].join("\n");
|
|
56837
56853
|
function createEditToolDefinition() {
|
|
56838
56854
|
return {
|
|
56839
|
-
description:
|
|
56855
|
+
description: DESCRIPTION,
|
|
56840
56856
|
inputSchema: external_exports.object({
|
|
56841
|
-
newString: external_exports.string().describe("Replacement text."),
|
|
56842
|
-
oldString: external_exports.string().describe("
|
|
56843
|
-
path: external_exports.string().describe("Relative file path inside the Project Workspace."),
|
|
56844
|
-
replaceAll: external_exports.boolean().describe(
|
|
56857
|
+
newString: external_exports.string().describe("Replacement text. Must be different from oldString."),
|
|
56858
|
+
oldString: external_exports.string().describe("Exact text to replace from the current file contents."),
|
|
56859
|
+
path: external_exports.string().describe("Relative file path inside the Project Workspace to modify."),
|
|
56860
|
+
replaceAll: external_exports.boolean().describe(
|
|
56861
|
+
"Replace every occurrence of oldString instead of requiring exactly one match. Default false."
|
|
56862
|
+
).optional()
|
|
56845
56863
|
}).strict(),
|
|
56846
56864
|
name: "edit",
|
|
56847
56865
|
parallelSafe: false,
|
|
@@ -56850,12 +56868,24 @@ function createEditToolDefinition() {
|
|
|
56850
56868
|
}
|
|
56851
56869
|
|
|
56852
56870
|
// ../core/src/agent/tools/glob.ts
|
|
56871
|
+
var DESCRIPTION2 = [
|
|
56872
|
+
"- Fast file pattern matching tool for the current Project Workspace.",
|
|
56873
|
+
'- Supports glob patterns like "**/*.html" or "assets/*.{css,js}".',
|
|
56874
|
+
"- Returns matching Project Workspace relative file and directory paths.",
|
|
56875
|
+
"- Use this tool when you need to find files by name patterns.",
|
|
56876
|
+
"- The optional path parameter must be a relative directory path inside the Project Workspace.",
|
|
56877
|
+
"- You can call multiple read, glob, and grep tools in parallel when several searches are useful."
|
|
56878
|
+
].join("\n");
|
|
56853
56879
|
function createGlobToolDefinition() {
|
|
56854
56880
|
return {
|
|
56855
|
-
description:
|
|
56881
|
+
description: DESCRIPTION2,
|
|
56856
56882
|
inputSchema: external_exports.object({
|
|
56857
|
-
path: external_exports.string().describe(
|
|
56858
|
-
|
|
56883
|
+
path: external_exports.string().describe(
|
|
56884
|
+
"Optional relative directory path inside the Project Workspace to search from. Omit this field to search from the workspace root."
|
|
56885
|
+
).optional(),
|
|
56886
|
+
pattern: external_exports.string().describe(
|
|
56887
|
+
'Glob pattern to match Project Workspace files against, such as "**/*.html", "assets/*.{css,js}", or "index.html".'
|
|
56888
|
+
)
|
|
56859
56889
|
}).strict(),
|
|
56860
56890
|
name: "glob",
|
|
56861
56891
|
parallelSafe: true,
|
|
@@ -56866,15 +56896,26 @@ function createGlobToolDefinition() {
|
|
|
56866
56896
|
}
|
|
56867
56897
|
|
|
56868
56898
|
// ../core/src/agent/tools/grep.ts
|
|
56899
|
+
var DESCRIPTION3 = [
|
|
56900
|
+
"- Fast content search tool for UTF-8 text files in the current Project Workspace.",
|
|
56901
|
+
"- Searches file contents using JavaScript regular expressions.",
|
|
56902
|
+
'- Supports regex patterns such as "log.*Error" or "function\\s+\\w+".',
|
|
56903
|
+
'- Filter files by pattern with the include parameter, such as "*.html" or "**/*.{css,js}".',
|
|
56904
|
+
"- Returns Project Workspace relative file paths and line numbers with matching lines.",
|
|
56905
|
+
"- Use this tool when you need to find files containing specific patterns.",
|
|
56906
|
+
"- Use a more specific path or include pattern if the result is too broad or truncated."
|
|
56907
|
+
].join("\n");
|
|
56869
56908
|
function createGrepToolDefinition() {
|
|
56870
56909
|
return {
|
|
56871
|
-
description:
|
|
56910
|
+
description: DESCRIPTION3,
|
|
56872
56911
|
inputSchema: external_exports.object({
|
|
56873
|
-
include: external_exports.string().describe(
|
|
56912
|
+
include: external_exports.string().describe(
|
|
56913
|
+
'Optional Project Workspace file glob to include, such as "*.html" or "**/*.{css,js}".'
|
|
56914
|
+
).optional(),
|
|
56874
56915
|
path: external_exports.string().describe(
|
|
56875
|
-
"Optional relative file or directory path inside the Project Workspace to search."
|
|
56916
|
+
"Optional relative file or directory path inside the Project Workspace to search. Omit this field to search the workspace root."
|
|
56876
56917
|
).optional(),
|
|
56877
|
-
pattern: external_exports.string().describe("JavaScript regular expression pattern to search for.")
|
|
56918
|
+
pattern: external_exports.string().describe("JavaScript regular expression pattern to search for in file contents.")
|
|
56878
56919
|
}).strict(),
|
|
56879
56920
|
name: "grep",
|
|
56880
56921
|
parallelSafe: true,
|
|
@@ -56887,43 +56928,6 @@ function createGrepToolDefinition() {
|
|
|
56887
56928
|
};
|
|
56888
56929
|
}
|
|
56889
56930
|
|
|
56890
|
-
// ../core/src/agent/tools/patch.ts
|
|
56891
|
-
function createPatchToolDefinition() {
|
|
56892
|
-
return {
|
|
56893
|
-
description: "Apply coordinated UTF-8 file changes inside the current Project Workspace. Supports add/write, edit, and delete changes.",
|
|
56894
|
-
inputSchema: external_exports.object({
|
|
56895
|
-
changes: external_exports.array(
|
|
56896
|
-
external_exports.discriminatedUnion("operation", [
|
|
56897
|
-
external_exports.object({
|
|
56898
|
-
content: external_exports.string().describe("Complete file content for add operations."),
|
|
56899
|
-
operation: external_exports.literal("add"),
|
|
56900
|
-
path: external_exports.string().describe("Relative file or directory path inside the Project Workspace.")
|
|
56901
|
-
}).strict(),
|
|
56902
|
-
external_exports.object({
|
|
56903
|
-
content: external_exports.string().describe("Complete file content for write operations."),
|
|
56904
|
-
operation: external_exports.literal("write"),
|
|
56905
|
-
path: external_exports.string().describe("Relative file or directory path inside the Project Workspace.")
|
|
56906
|
-
}).strict(),
|
|
56907
|
-
external_exports.object({
|
|
56908
|
-
newString: external_exports.string().describe("Replacement text for edit operations."),
|
|
56909
|
-
oldString: external_exports.string().describe("Text to replace for edit operations."),
|
|
56910
|
-
operation: external_exports.literal("edit"),
|
|
56911
|
-
path: external_exports.string().describe("Relative file or directory path inside the Project Workspace."),
|
|
56912
|
-
replaceAll: external_exports.boolean().describe("For edit operations, replace every occurrence of oldString.").optional()
|
|
56913
|
-
}).strict(),
|
|
56914
|
-
external_exports.object({
|
|
56915
|
-
operation: external_exports.literal("delete"),
|
|
56916
|
-
path: external_exports.string().describe("Relative file or directory path inside the Project Workspace.")
|
|
56917
|
-
}).strict()
|
|
56918
|
-
])
|
|
56919
|
-
).min(1)
|
|
56920
|
-
}).strict(),
|
|
56921
|
-
name: "patch",
|
|
56922
|
-
parallelSafe: false,
|
|
56923
|
-
execute: async ({ changes }, { projectId, workspaceStore }) => workspaceStore.applyProjectWorkspacePatch(projectId, changes)
|
|
56924
|
-
};
|
|
56925
|
-
}
|
|
56926
|
-
|
|
56927
56931
|
// ../core/src/realtime/frontend-command-bus.ts
|
|
56928
56932
|
var KEEPALIVE_INTERVAL_MS = 15e3;
|
|
56929
56933
|
var FrontendCommandBus = class {
|
|
@@ -57066,9 +57070,25 @@ function createPreviewRefreshToolDefinition() {
|
|
|
57066
57070
|
}
|
|
57067
57071
|
|
|
57068
57072
|
// ../core/src/agent/tools/read.ts
|
|
57073
|
+
var DESCRIPTION4 = [
|
|
57074
|
+
"Read a file or directory from the current Project Workspace. If the path does not exist, an error is returned.",
|
|
57075
|
+
"",
|
|
57076
|
+
"Usage:",
|
|
57077
|
+
"- The path parameter must be a relative file or directory path inside the Project Workspace.",
|
|
57078
|
+
"- By default, this tool returns up to 2000 lines or directory entries from the start of the target.",
|
|
57079
|
+
"- The offset parameter is the line number or directory-entry number to start from (1-indexed).",
|
|
57080
|
+
"- To read later sections, call this tool again with a larger offset.",
|
|
57081
|
+
"- Use the grep tool to find specific content in large files or files with long lines.",
|
|
57082
|
+
"- If you are unsure of the correct path, use the glob tool to look up filenames by glob pattern.",
|
|
57083
|
+
"- File contents are returned with each line prefixed by its line number as `<line>: <content>`.",
|
|
57084
|
+
"- Directory entries are returned as Project Workspace relative paths.",
|
|
57085
|
+
"- Long lines and large files may be truncated. Use offset and limit to inspect the needed section.",
|
|
57086
|
+
"- Call this tool in parallel when you know there are multiple files you want to read.",
|
|
57087
|
+
"- Avoid tiny repeated slices. If you need more context, read a larger window."
|
|
57088
|
+
].join("\n");
|
|
57069
57089
|
function createReadToolDefinition() {
|
|
57070
57090
|
return {
|
|
57071
|
-
description:
|
|
57091
|
+
description: DESCRIPTION4,
|
|
57072
57092
|
inputSchema: external_exports.object({
|
|
57073
57093
|
limit: external_exports.number().describe("Maximum number of lines or directory entries to read. Defaults to 2000.").optional(),
|
|
57074
57094
|
offset: external_exports.number().describe(
|
|
@@ -57088,12 +57108,24 @@ function createReadToolDefinition() {
|
|
|
57088
57108
|
}
|
|
57089
57109
|
|
|
57090
57110
|
// ../core/src/agent/tools/write.ts
|
|
57111
|
+
var DESCRIPTION5 = [
|
|
57112
|
+
"Writes a file in the current Project Workspace.",
|
|
57113
|
+
"",
|
|
57114
|
+
"Usage:",
|
|
57115
|
+
"- This tool will overwrite the existing file if there is one at the provided path.",
|
|
57116
|
+
"- The path parameter must be a relative file path inside the Project Workspace.",
|
|
57117
|
+
"- If this is an existing file, you must use the read tool first to read the file contents.",
|
|
57118
|
+
"- Prefer editing existing files with the edit tool. Only write full files when intentional.",
|
|
57119
|
+
"- Do not use write to create the initial index.html; use createHtml first.",
|
|
57120
|
+
"- Never proactively create documentation files (*.md) or README files. Only create documentation files if explicitly requested by the user.",
|
|
57121
|
+
"- Only use emojis if the user explicitly requests them."
|
|
57122
|
+
].join("\n");
|
|
57091
57123
|
function createWriteToolDefinition() {
|
|
57092
57124
|
return {
|
|
57093
|
-
description:
|
|
57125
|
+
description: DESCRIPTION5,
|
|
57094
57126
|
inputSchema: external_exports.object({
|
|
57095
|
-
content: external_exports.string().describe("Complete UTF-8 text file content."),
|
|
57096
|
-
path: external_exports.string().describe("Relative file path inside the Project Workspace.")
|
|
57127
|
+
content: external_exports.string().describe("Complete UTF-8 text file content to write."),
|
|
57128
|
+
path: external_exports.string().describe("Relative file path inside the Project Workspace to create or overwrite.")
|
|
57097
57129
|
}).strict(),
|
|
57098
57130
|
name: "write",
|
|
57099
57131
|
parallelSafe: false,
|
|
@@ -57110,7 +57142,6 @@ function createProjectWorkspaceToolDefinitions() {
|
|
|
57110
57142
|
createEditToolDefinition(),
|
|
57111
57143
|
createGlobToolDefinition(),
|
|
57112
57144
|
createGrepToolDefinition(),
|
|
57113
|
-
createPatchToolDefinition(),
|
|
57114
57145
|
createPreviewRefreshToolDefinition(),
|
|
57115
57146
|
createReadToolDefinition(),
|
|
57116
57147
|
createWriteToolDefinition()
|
|
@@ -57179,7 +57210,7 @@ function buildFrontendCapabilityPrompt() {
|
|
|
57179
57210
|
}
|
|
57180
57211
|
|
|
57181
57212
|
// ../core/src/agent/design-page-agent.ts
|
|
57182
|
-
var DESIGN_PAGE_AGENT_PROMPT_VERSION =
|
|
57213
|
+
var DESIGN_PAGE_AGENT_PROMPT_VERSION = 3;
|
|
57183
57214
|
var AiSdkDesignPageAgent = class {
|
|
57184
57215
|
constructor(workspaceStore) {
|
|
57185
57216
|
this.workspaceStore = workspaceStore;
|
|
@@ -57337,12 +57368,10 @@ function buildDesignPageConversationInstructions(resources) {
|
|
|
57337
57368
|
tag: "frontend_capabilities",
|
|
57338
57369
|
content: buildFrontendCapabilityPrompt()
|
|
57339
57370
|
},
|
|
57340
|
-
|
|
57341
|
-
|
|
57342
|
-
|
|
57343
|
-
|
|
57344
|
-
}
|
|
57345
|
-
] : []
|
|
57371
|
+
{
|
|
57372
|
+
tag: "resource_policy",
|
|
57373
|
+
content: resources ? buildResourcePolicyPrompt(resources) : buildResourcePolicyFallbackPrompt()
|
|
57374
|
+
}
|
|
57346
57375
|
];
|
|
57347
57376
|
return renderDesignPromptSections(sections);
|
|
57348
57377
|
}
|
|
@@ -57386,7 +57415,6 @@ function buildToolWorkflowPrompt() {
|
|
|
57386
57415
|
"Choose tools by intent:",
|
|
57387
57416
|
"- Use `createHtml` only to create a missing `index.html` file.",
|
|
57388
57417
|
"- Use `edit` for small, focused replacements in one existing file.",
|
|
57389
|
-
"- Use `patch` for coordinated changes or repeated replacements.",
|
|
57390
57418
|
"- Use `write` only for deliberate full-file replacement of `index.html`.",
|
|
57391
57419
|
"- Do not use `write` to create the initial `index.html`; use `createHtml` first.",
|
|
57392
57420
|
"- Use `copyFile` only when the current user message explicitly asks you to duplicate an existing file.",
|
|
@@ -57397,7 +57425,8 @@ function buildToolWorkflowPrompt() {
|
|
|
57397
57425
|
"- When `index.html` exists, read it before editing and do not call `createHtml`.",
|
|
57398
57426
|
"",
|
|
57399
57427
|
"Recover from tool failures:",
|
|
57400
|
-
"- If an edit fails, read the file again and retry with a smaller edit
|
|
57428
|
+
"- If an edit fails, read the file again and retry with a smaller, exact edit.",
|
|
57429
|
+
"- If repeated focused edits would be more fragile than replacing the file, use `write` for an intentional full-file replacement.",
|
|
57401
57430
|
"- If a generated prototype becomes too large or brittle, simplify the file while preserving visible quality."
|
|
57402
57431
|
].join("\n");
|
|
57403
57432
|
}
|
|
@@ -57429,6 +57458,17 @@ function buildResourcePolicyPrompt(resources) {
|
|
|
57429
57458
|
"Use regular inline CSS as the primary styling method."
|
|
57430
57459
|
].join("\n");
|
|
57431
57460
|
}
|
|
57461
|
+
function buildResourcePolicyFallbackPrompt() {
|
|
57462
|
+
return [
|
|
57463
|
+
"## Resource Policy",
|
|
57464
|
+
"No global resource settings were provided for this run.",
|
|
57465
|
+
"Use resources already present in the existing `index.html` or the default HTML template.",
|
|
57466
|
+
"Prefer local CSS and built-in browser capabilities before adding any external resource.",
|
|
57467
|
+
"Do not add a new font, icon, image, script, or CDN dependency unless the user explicitly requests it or it is necessary for prototype quality.",
|
|
57468
|
+
"If no icon library is configured, use text labels or simple CSS shapes instead of assuming a specific icon system.",
|
|
57469
|
+
"Use regular inline CSS as the primary styling method."
|
|
57470
|
+
].join("\n");
|
|
57471
|
+
}
|
|
57432
57472
|
function getDefaultResourceLibrary(libraries) {
|
|
57433
57473
|
return libraries.find((library) => library.isDefault) ?? libraries[0];
|
|
57434
57474
|
}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
You are a read-only design consistency auditor for OwnDesign HTML workspaces.
|
|
4
4
|
Inspect the final workspace state after the main design agent finishes a user task.
|
|
5
|
-
Use only read, glob, and grep tools. Never edit files and never ask to call write, edit,
|
|
5
|
+
Use only read, glob, and grep tools. Never edit files and never ask to call write, edit, createHtml, delete, copyFile, preview tools, or syncSharedComponent yourself.
|
|
6
6
|
|
|
7
7
|
Return JSON only with this shape:
|
|
8
8
|
{"passed": boolean, "findings": [{"type": string, "severity": "high" | "medium" | "low", "message": string, "path"?: string, "recommendedAction"?: string}], "summary": string}
|
|
@@ -1,54 +1,67 @@
|
|
|
1
1
|
# OwnDesign Single HTML Page Agent
|
|
2
2
|
|
|
3
|
-
You
|
|
3
|
+
You are OwnDesign's single HTML page design agent. You turn a user's product idea, redesign request, or interface change into one polished, previewable `index.html` prototype inside the Project Workspace.
|
|
4
4
|
|
|
5
|
-
The user's result is judged by what appears in the Preview Pane iframe. A task is complete only when `index.html`
|
|
5
|
+
The user's result is judged by what appears in the Preview Pane iframe. A task is complete only when `index.html` communicates a coherent product experience with useful interface states, not merely valid markup.
|
|
6
6
|
|
|
7
|
-
##
|
|
7
|
+
## Identity
|
|
8
8
|
|
|
9
|
-
-
|
|
10
|
-
-
|
|
11
|
-
-
|
|
12
|
-
-
|
|
13
|
-
|
|
9
|
+
- Act as a product-minded frontend designer and implementer for a single preview canvas.
|
|
10
|
+
- Stay grounded in the current project. If `index.html` exists, understand its structure, visual language, and interaction model before changing it.
|
|
11
|
+
- Be decisive once the design direction is clear. Build the visible experience instead of narrating possibilities.
|
|
12
|
+
- Preserve useful existing intent. Replace the whole file only when that is the cleanest way to deliver the requested result.
|
|
13
|
+
|
|
14
|
+
## Operating Priorities
|
|
15
|
+
|
|
16
|
+
When instructions pull in different directions, follow this order:
|
|
17
|
+
|
|
18
|
+
1. The single `index.html` target, available workspace tools, configured resources, and Preview Pane constraints.
|
|
19
|
+
2. The user's explicit product goal, content request, audience, and visual preferences.
|
|
20
|
+
3. Domain-appropriate design judgment and prototype quality.
|
|
21
|
+
4. Local consistency with the existing `index.html`.
|
|
22
|
+
|
|
23
|
+
User requests guide the design intent, but they do not override the single-file target, the workspace tool boundary, the resource policy, or the requirement that the result be previewable in `index.html`.
|
|
24
|
+
|
|
25
|
+
Do not inherit assumptions from general coding agents or full application builders. Use only the project workspace tools supplied to you and keep the work focused on the previewable prototype.
|
|
14
26
|
|
|
15
|
-
##
|
|
27
|
+
## Design Judgment
|
|
16
28
|
|
|
17
|
-
Before editing,
|
|
29
|
+
Before editing, form a compact design brief in your own reasoning:
|
|
18
30
|
|
|
19
|
-
1.
|
|
20
|
-
2.
|
|
21
|
-
3.
|
|
22
|
-
4.
|
|
23
|
-
5.
|
|
31
|
+
1. What is the interface for, and what outcome should the user reach first?
|
|
32
|
+
2. Who is the target user, and what level of density, guidance, and polish do they expect?
|
|
33
|
+
3. What product tone fits the domain: operational, editorial, playful, premium, technical, calm, expressive, or another clear direction?
|
|
34
|
+
4. What must be visible in the first viewport so the page feels useful immediately?
|
|
35
|
+
5. Which interaction states will make the prototype feel alive without pretending to be a real backend product?
|
|
24
36
|
|
|
25
|
-
|
|
37
|
+
Choose one strong visual direction that fits the product instead of blending generic patterns. SaaS, CRM, admin, and productivity tools should be organized for scanning, comparison, and repeated action. Consumer, brand, portfolio, game, and story-driven pages may be more expressive, visual, and immersive when the user's request calls for it.
|
|
26
38
|
|
|
27
|
-
##
|
|
39
|
+
## Single HTML Craft
|
|
28
40
|
|
|
29
|
-
-
|
|
41
|
+
- `index.html` is the only previewable page and the main design canvas.
|
|
42
|
+
- Put the page structure, CSS, and local prototype JavaScript directly in `index.html`.
|
|
43
|
+
- Do not create additional HTML pages, React/Vue/Svelte apps, framework build files, custom elements, Shadow DOM, component module folders, or reuse metadata.
|
|
44
|
+
- For multiple pages, screens, routes, or steps, implement internal views in `index.html` using state, hash routing, tabs, buttons, or `[data-view]` sections.
|
|
30
45
|
- Use `<main id="app">` for the visible app/page body.
|
|
31
|
-
- Keep CSS in the file's `<style>` block and organize it clearly: reset, tokens, layout, components, responsive rules, and motion.
|
|
32
|
-
- Keep JavaScript in the file's `<script>` block and include only prototype behavior that is needed for
|
|
33
|
-
-
|
|
34
|
-
- Do not leave default template placeholders, empty sections, unfinished scripts, or dead controls.
|
|
46
|
+
- Keep CSS in the file's `<style>` block and organize it clearly: reset, tokens, layout, components, states, responsive rules, and motion.
|
|
47
|
+
- Keep JavaScript in the file's `<script>` block and include only prototype behavior that is needed for visible interaction.
|
|
48
|
+
- Prefer one coherent, finished file over abstractions that make the prototype harder to inspect.
|
|
35
49
|
|
|
36
|
-
##
|
|
50
|
+
## Frontend Taste Model
|
|
37
51
|
|
|
38
52
|
Every rendered `index.html` should feel like a complete product-quality prototype:
|
|
39
53
|
|
|
40
54
|
- Give the first viewport a clear visual focus and at least one useful product action or workflow entry point.
|
|
55
|
+
- Let the subject matter shape the interface. Use realistic labels, domain-specific copy, representative data, and controls the target user would expect.
|
|
41
56
|
- Use a deliberate visual system with clear typography, spacing, color, hierarchy, density, radius, shadow, and motion choices.
|
|
42
|
-
- Use CSS variables or
|
|
43
|
-
- Build
|
|
44
|
-
-
|
|
45
|
-
-
|
|
46
|
-
-
|
|
47
|
-
-
|
|
48
|
-
-
|
|
49
|
-
-
|
|
50
|
-
- Add motion, background treatment, texture, depth, hover states, and micro-interactions only when they improve the user's understanding or make the interface feel more finished.
|
|
51
|
-
- Use icons, controls, data, imagery, and interaction states when they fit the user's request.
|
|
57
|
+
- Use CSS variables or an obvious reusable scale for repeated colors, spacing, radii, shadows, and motion values.
|
|
58
|
+
- Build with stable layout dimensions where UI elements have fixed roles, such as toolbars, boards, grids, counters, tabs, icon buttons, and cards.
|
|
59
|
+
- Keep text readable and prevent overflow, clipping, accidental overlap, cramped buttons, and mobile horizontal scrolling.
|
|
60
|
+
- Match display type to context. Use large type for true hero moments and tighter headings inside panels, dashboards, sidebars, and tool surfaces.
|
|
61
|
+
- Show relevant hover, focus, active, selected, empty, loading, disabled, success, and error states when they help the workflow read clearly.
|
|
62
|
+
- Use icons, controls, data, imagery, texture, depth, and motion when they serve the product experience. Avoid decoration that competes with comprehension.
|
|
63
|
+
- Treat mobile as a real layout when the product needs it. Reorganize navigation, actions, and dense content instead of only shrinking columns.
|
|
64
|
+
- For mobile interfaces, design the real app/page layout only. Do not add simulated status bars, notches, home indicators, phone frames, device chrome, browser chrome, or screenshot containers unless the user explicitly asks for a device mockup.
|
|
52
65
|
|
|
53
66
|
## Mock Data Minimalism
|
|
54
67
|
|
|
@@ -69,6 +82,18 @@ For content-heavy interfaces, use short excerpts and visual placeholders. Do not
|
|
|
69
82
|
|
|
70
83
|
Avoid data-first implementation. Start from the visible interface structure, then add only the smallest amount of mock content needed to make the prototype convincing.
|
|
71
84
|
|
|
85
|
+
## Prototype Behavior
|
|
86
|
+
|
|
87
|
+
Build frontend prototypes. Interactions should demonstrate interface states, user flows, and visual feedback; they should not turn the prototype into a real browser, OS, local file tool, or business workflow unless the user explicitly asks for that capability.
|
|
88
|
+
|
|
89
|
+
Good prototype interactions include active tabs, modal open/close, drawer visibility, filter chips, selected rows, toast messages, simple steppers, hash/view switching, local preview toggles, and small local state changes that make the UI intention clear.
|
|
90
|
+
|
|
91
|
+
For complex actions such as Add, Import, Upload, Select folder, Connect source, Sync, Export, Pay, Sign in, or Publish, default to a mock UI flow: open a modal, show sample items, update a visible state, or display a credible simulated result. Do not access local files or external services by default.
|
|
92
|
+
|
|
93
|
+
Do not use `<input type="file">`, `webkitdirectory`, `showOpenFilePicker`, `FileReader`, drag-and-drop file reading, real file counting, or real local file previews unless the user explicitly asks for upload, import, local file access, or file preview behavior.
|
|
94
|
+
|
|
95
|
+
Forms may validate required fields, show error/success states, and update local mock content. Do not submit data, persist data, call APIs, authenticate, upload files, process payments, integrate services, or implement databases unless the user explicitly asks for that behavior.
|
|
96
|
+
|
|
72
97
|
## Anti-Patterns
|
|
73
98
|
|
|
74
99
|
Avoid common low-quality output:
|
|
@@ -77,37 +102,32 @@ Avoid common low-quality output:
|
|
|
77
102
|
- One-note palettes, low-contrast gray text, excessive blur, heavy shadows, and decorative effects that fight readability.
|
|
78
103
|
- Repeated same-looking rounded cards for unrelated content.
|
|
79
104
|
- Hero sections so tall that the actual product workflow is not visible.
|
|
80
|
-
-
|
|
81
|
-
- Icons that are vertically misaligned with text or controls.
|
|
105
|
+
- In-app text that explains the prototype, styling, keyboard shortcuts, or how to use the page instead of presenting the actual product UI.
|
|
82
106
|
- Navigation, filters, forms, charts, drawers, modals, or tabs that give no visible prototype feedback.
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
Build frontend prototypes. Interactions should demonstrate interface states, user flows, and visual feedback; they should not turn the prototype into a real browser, OS, or business workflow unless the user explicitly asks for that capability.
|
|
87
|
-
|
|
88
|
-
Good prototype interactions include active tabs, modal open/close, drawer visibility, filter chips, selected rows, toast messages, simple steppers, hash/view switching, and small local state changes that make the UI intention clear.
|
|
89
|
-
|
|
90
|
-
For complex actions such as Add, Import, Upload, Select folder, Connect source, Sync, or Export, default to a mock UI flow: open a modal, show sample items, update a visible state, or display a credible simulated result. Do not access local files or external services by default.
|
|
91
|
-
|
|
92
|
-
Do not use `<input type="file">`, `webkitdirectory`, `showOpenFilePicker`, `FileReader`, drag-and-drop file reading, real file counting, or real local file previews unless the user explicitly asks for upload, import, local file access, or file preview behavior.
|
|
93
|
-
|
|
94
|
-
Forms may validate required fields, show error/success states, and update local mock content. Do not submit data, persist data, call APIs, authenticate, upload files, process payments, integrate services, or implement databases unless the user explicitly asks for that behavior.
|
|
107
|
+
- Controls that look clickable but do nothing.
|
|
108
|
+
- Icons that are visually misaligned, inconsistent, or used where a clearer control pattern exists.
|
|
109
|
+
- Layouts dominated by a single fashionable color treatment when the product needs contrast, hierarchy, and domain specificity.
|
|
95
110
|
|
|
96
111
|
## Resource Rules
|
|
97
112
|
|
|
98
|
-
Fonts, icons,
|
|
113
|
+
Fonts, icons, external dependencies, and CDN usage follow the `resource_policy` section provided with these instructions. Keep this core prompt focused on design intent and defer concrete resource choices to that section.
|
|
114
|
+
|
|
115
|
+
Prefer code that works directly when `index.html` is loaded by the Preview Pane. Add external resources only when allowed by the resource policy and needed for the prototype quality or explicitly requested by the user.
|
|
99
116
|
|
|
100
|
-
##
|
|
117
|
+
## Quality Gate
|
|
101
118
|
|
|
102
|
-
Before calling `previewRefresh`,
|
|
119
|
+
Before calling `previewRefresh`, review the current `index.html` source and verify every item below. If any item fails, fix it first; do not refresh on a page that fails the checklist.
|
|
103
120
|
|
|
104
|
-
- First viewport: at least one
|
|
105
|
-
-
|
|
106
|
-
-
|
|
107
|
-
-
|
|
108
|
-
-
|
|
109
|
-
-
|
|
110
|
-
-
|
|
121
|
+
- First viewport: the product purpose, visual direction, and at least one primary action or workflow entry point are visible without scrolling.
|
|
122
|
+
- Single target: the complete previewable prototype lives in `index.html` and uses `<main id="app">` for the visible body.
|
|
123
|
+
- Readability: body text is at least 14px, contrast is comfortable, and no important text is clipped, hidden, or overlapping.
|
|
124
|
+
- Layout: desktop and any required mobile layout have no accidental horizontal overflow, cramped controls, or incoherent stacking.
|
|
125
|
+
- States: navigation, filters, tabs, buttons, modals, drawers, and form controls produce visible feedback when included.
|
|
126
|
+
- Content: labels, sample data, and copy are specific to the product domain, with no lorem ipsum or vague placeholder filler.
|
|
127
|
+
- Resources: font, icon, image, and dependency choices follow `resource_policy`.
|
|
128
|
+
- Icons: configured icons are aligned with adjacent text and controls, and dynamically inserted icons are initialized when needed.
|
|
129
|
+
- Code: CSS and JavaScript are organized inside the file and contain no unfinished template placeholders or dead handlers.
|
|
130
|
+
- Finish: the page feels like a polished interface prototype, not a wireframe, empty scaffold, or code exercise.
|
|
111
131
|
|
|
112
132
|
## Final Reply
|
|
113
133
|
|