@pega/sdk 0.0.14 → 0.0.15
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/README.md +46 -6
- package/dist/index.js +50 -24
- package/package.json +42 -3
- package/templates/angular-sdk-reference/angular.json +1 -2
- package/templates/angular-sdk-reference/extra-webpack.config.cjs +23 -0
- package/templates/angular-sdk-reference/index.html +12 -0
- package/templates/angular-sdk-reference/package.json +0 -1
- package/templates/angular-sdk-reference/src/app/app.component.ts +15 -232
- package/templates/angular-sdk-reference/src/app/pconnect-renderer.component.ts +153 -0
- package/templates/angular-sdk-reference/src/components/fields/auto-complete/auto-complete.component.ts +58 -21
- package/templates/angular-sdk-reference/src/components/fields/checkbox/checkbox.component.ts +8 -3
- package/templates/angular-sdk-reference/src/components/fields/currency/currency.component.ts +22 -7
- package/templates/angular-sdk-reference/src/components/fields/date-input/date-input.component.ts +19 -6
- package/templates/angular-sdk-reference/src/components/fields/dropdown/dropdown.component.ts +24 -7
- package/templates/angular-sdk-reference/src/components/fields/email/email.component.ts +19 -6
- package/templates/angular-sdk-reference/src/components/fields/integer/integer.component.ts +19 -6
- package/templates/angular-sdk-reference/src/components/fields/phone/phone.component.ts +19 -6
- package/templates/angular-sdk-reference/src/components/fields/radio-buttons/radio-buttons.component.ts +16 -5
- package/templates/angular-sdk-reference/src/components/fields/text-area/text-area.component.ts +19 -6
- package/templates/angular-sdk-reference/src/components/fields/text-input/text-input.component.ts +19 -6
- package/templates/angular-sdk-reference/src/components/fields/url-input/url-input.component.ts +26 -7
- package/templates/angular-sdk-reference/src/components/helpers/sdk-helpers.ts +93 -0
- package/templates/angular-sdk-reference/src/components/infra/case-summary/case-summary.component.ts +8 -9
- package/templates/angular-sdk-reference/src/components/infra/case-view/case-view.component.ts +24 -12
- package/templates/angular-sdk-reference/src/components/infra/root-container/root-container.component.ts +21 -15
- package/templates/angular-sdk-reference/src/components/infra/stages/stages.component.ts +21 -10
- package/templates/angular-sdk-reference/src/components/infra/view/view.component.ts +14 -9
- package/templates/angular-sdk-reference/src/components/templates/default-form/default-form.component.ts +12 -8
- package/templates/angular-sdk-reference/tsconfig.app.json +13 -0
- package/templates/angular-sdk-reference/tsconfig.json +2 -5
- package/templates/react-sdk-reference/.ai-common/agents/embedded-flow-expert.md +65 -31
- package/templates/react-sdk-reference/.ai-common/agents/implementation-expert.md +74 -38
- package/templates/react-sdk-reference/.ai-common/global/ai-agent-instructions-embedded.md +33 -1
- package/templates/react-sdk-reference/.ai-common/global/ai-agent-instructions.md +57 -22
- package/templates/react-sdk-reference/.ai-common/instructions/embedded-component.md +25 -10
- package/templates/react-sdk-reference/.ai-common/prompts/add-component.md +40 -19
- package/templates/react-sdk-reference/.ai-common/prompts/component-manifest.json +55 -1
- package/templates/react-sdk-reference/.ai-common/prompts/embedded-component-manifest.md +26 -4
- package/templates/react-sdk-reference/.ai-common/prompts/generate-all-components.md +82 -33
- package/templates/react-sdk-reference/.ai-common/prompts/generate-dse-components.md +46 -26
- package/templates/react-sdk-reference/.ai-common/prompts/generate-embedded-components.md +28 -15
- package/templates/react-sdk-reference/.ai-common/prompts/generate-field-components.md +24 -6
- package/templates/react-sdk-reference/.ai-common/prompts/generate-infra-components.md +24 -6
- package/templates/react-sdk-reference/.ai-common/prompts/generate-template-components.md +24 -6
- package/templates/react-sdk-reference/.ai-common/prompts/generate-widget-components.md +24 -6
- package/templates/react-sdk-reference/.ai-common/prompts/identify-components.md +2 -0
- package/templates/react-sdk-reference/.ai-common/prompts/replace-design-system.md +44 -17
- package/templates/react-sdk-reference/.ai-common/skills/connect-pega-server.md +14 -1
- package/templates/react-sdk-reference/.ai-common/skills/design-system-extension-skills/AssignmentHeader.md +79 -0
- package/templates/react-sdk-reference/.ai-common/skills/design-system-extension-skills/Toast.md +96 -0
- package/templates/react-sdk-reference/.ai-common/skills/design-system-extension.md +56 -35
- package/templates/react-sdk-reference/.ai-common/skills/embedded-flow/analyze-customer-repo.md +29 -3
- package/templates/react-sdk-reference/.ai-common/skills/embedded-flow/run-and-verify-integration.md +97 -37
- package/templates/react-sdk-reference/.ai-common/skills/embedded-flow/wire-integration.md +91 -60
- package/templates/react-sdk-reference/.ai-common/skills/field-components.md +13 -1
- package/templates/react-sdk-reference/.ai-common/skills/infra-components.md +13 -1
- package/templates/react-sdk-reference/.ai-common/skills/portal-flow/run-and-verify-portal.md +290 -0
- package/templates/react-sdk-reference/.ai-common/skills/template-components.md +13 -1
- package/templates/react-sdk-reference/.ai-common/skills/widget-components.md +13 -1
- package/templates/react-sdk-reference/assets/icons/trash.svg +3 -0
- package/templates/react-sdk-reference/index.html +0 -1
- package/templates/react-sdk-reference/package.json +2 -2
- package/templates/react-sdk-reference/package.minimal.json +2 -2
- package/templates/react-sdk-reference/sdk-config.json +3 -3
- package/templates/react-sdk-reference/src/FallbackComponent.tsx +1 -1
- package/templates/react-sdk-reference/src/MashupApp.tsx +33 -78
- package/templates/react-sdk-reference/src/PortalApp.tsx +23 -100
- package/templates/react-sdk-reference/src/components/component-map.ts +15 -1
- package/templates/react-sdk-reference/src/components/designSystemExtension/AssignmentHeader/AssignmentHeader.tsx +15 -0
- package/templates/react-sdk-reference/src/components/designSystemExtension/AssignmentHeader/index.tsx +1 -0
- package/templates/react-sdk-reference/src/components/designSystemExtension/FieldGroup/FieldGroup.tsx +1 -1
- package/templates/react-sdk-reference/src/components/designSystemExtension/FieldGroupList/FieldGroupList.tsx +1 -1
- package/templates/react-sdk-reference/src/components/designSystemExtension/FieldValueList/FieldValueList.tsx +16 -4
- package/templates/react-sdk-reference/src/components/designSystemExtension/ModalDialog/ModalDialog.tsx +26 -0
- package/templates/react-sdk-reference/src/components/designSystemExtension/ModalDialog/index.tsx +1 -0
- package/templates/react-sdk-reference/src/components/designSystemExtension/Toast/Toast.tsx +35 -0
- package/templates/react-sdk-reference/src/components/designSystemExtension/Toast/index.tsx +1 -0
- package/templates/react-sdk-reference/src/components/field/AutoComplete/AutoComplete.tsx +362 -24
- package/templates/react-sdk-reference/src/components/field/CancelAlert/CancelAlert.tsx +1 -1
- package/templates/react-sdk-reference/src/components/field/Checkbox/Checkbox.tsx +3 -1
- package/templates/react-sdk-reference/src/components/field/Currency/Currency.tsx +6 -3
- package/templates/react-sdk-reference/src/components/field/Date/Date.tsx +2 -1
- package/templates/react-sdk-reference/src/components/field/DateTime/DateTime.tsx +2 -1
- package/templates/react-sdk-reference/src/components/field/Decimal/Decimal.tsx +4 -3
- package/templates/react-sdk-reference/src/components/field/Dropdown/Dropdown.tsx +2 -0
- package/templates/react-sdk-reference/src/components/field/Email/Email.tsx +2 -1
- package/templates/react-sdk-reference/src/components/field/EmbeddedDataMulti/EmbeddedDataMulti.tsx +121 -0
- package/templates/react-sdk-reference/src/components/field/EmbeddedDataMulti/config-ext.json +7 -0
- package/templates/react-sdk-reference/src/components/field/EmbeddedDataMulti/index.tsx +1 -0
- package/templates/react-sdk-reference/src/components/field/Integer/Integer.tsx +2 -1
- package/templates/react-sdk-reference/src/components/field/Location/Location.tsx +1 -1
- package/templates/react-sdk-reference/src/components/field/Multiselect/Multiselect.tsx +40 -20
- package/templates/react-sdk-reference/src/components/field/ObjectReference/ObjectReference.tsx +554 -49
- package/templates/react-sdk-reference/src/components/field/ObjectReference/utils.ts +111 -20
- package/templates/react-sdk-reference/src/components/field/Percentage/Percentage.tsx +4 -3
- package/templates/react-sdk-reference/src/components/field/Phone/Phone.tsx +2 -1
- package/templates/react-sdk-reference/src/components/field/SelectableCard/SelectableCard.tsx +2 -1
- package/templates/react-sdk-reference/src/components/field/TextArea/TextArea.tsx +2 -1
- package/templates/react-sdk-reference/src/components/field/TextInput/TextInput.tsx +2 -1
- package/templates/react-sdk-reference/src/components/field/Time/Time.tsx +2 -1
- package/templates/react-sdk-reference/src/components/field/URL/URL.tsx +2 -1
- package/templates/react-sdk-reference/src/components/field/UserReference/UserReference.tsx +1 -1
- package/templates/react-sdk-reference/src/components/helpers/field-utils.ts +44 -0
- package/templates/react-sdk-reference/src/components/helpers/simpleTableHelpers.ts +19 -7
- package/templates/react-sdk-reference/src/components/infra/ModalViewContainer/DataViewActionButtons/DataViewActionButtons.tsx +97 -0
- package/templates/react-sdk-reference/src/components/infra/ModalViewContainer/DataViewActionButtons/index.tsx +1 -0
- package/templates/react-sdk-reference/src/components/infra/ModalViewContainer/ListViewActionButtons/ListViewActionButtons.tsx +53 -0
- package/templates/react-sdk-reference/src/components/infra/ModalViewContainer/ListViewActionButtons/index.tsx +1 -0
- package/templates/react-sdk-reference/src/components/template/AdvancedSearch/SearchGroups/SearchGroups.tsx +2 -2
- package/templates/react-sdk-reference/src/components/template/CaseSummary/CaseSummary.tsx +3 -1
- package/templates/react-sdk-reference/src/components/template/DataReference/SearchForm.tsx +4 -4
- package/templates/react-sdk-reference/src/components/template/HierarchicalForm/HierarchicalForm.tsx +2 -2
- package/templates/react-sdk-reference/src/components/template/InlineDashboard/InlineDashboard.tsx +1 -1
- package/templates/react-sdk-reference/src/components/template/ListView/ListView.tsx +7 -3
- package/templates/react-sdk-reference/src/components/template/SimpleTable/SimpleTableManual/SimpleTableManual.tsx +173 -99
- package/templates/react-sdk-reference/src/components/template/SimpleTable/SimpleTableSelect/SimpleTableSelect.tsx +63 -56
- package/templates/react-sdk-reference/src/components/widget/ToDo/ToDo.tsx +1 -1
- package/templates/react-sdk-reference/vite.config.ts +26 -4
- package/templates/angular-sdk-reference/pega-constellationjs-0.26.3-local.tgz +0 -0
- package/templates/angular-sdk-reference/src/helpers/event-utils.ts +0 -18
- package/templates/angular-sdk-reference/src/helpers/utils.ts +0 -38
- package/templates/angular-sdk-reference/src/helpers/versionHelpers.ts +0 -14
- package/templates/react-sdk-reference/.ai-common/instructions/dse-component.md +0 -47
- package/templates/react-sdk-reference/.ai-common/instructions/field-component.md +0 -50
- package/templates/react-sdk-reference/.ai-common/instructions/infra-component.md +0 -76
- package/templates/react-sdk-reference/.ai-common/instructions/template-component.md +0 -43
- package/templates/react-sdk-reference/.ai-common/instructions/widget-component.md +0 -45
- package/templates/react-sdk-reference/.ai-common/skills/embedded-flow/authenticate.md +0 -311
- package/templates/react-sdk-reference/pega-constellationjs-0.26.3-local.tgz +0 -0
- package/templates/react-sdk-reference/pega-sdk-react-0.1.0.tgz +0 -0
|
@@ -2,6 +2,16 @@
|
|
|
2
2
|
ai-description: Add a new component type to the registry
|
|
3
3
|
---
|
|
4
4
|
|
|
5
|
+
## Progress milestones
|
|
6
|
+
|
|
7
|
+
Announce these to the user as you reach them, in plain words and with a counter — "Step 3 of 4 — Building the component". Count only the milestones that apply to this run.
|
|
8
|
+
|
|
9
|
+
1. **Understanding your request** — Step 0
|
|
10
|
+
2. **Preparing your design system** — Steps 1 to 3
|
|
11
|
+
3. **Building the component** — Steps 5 and 6
|
|
12
|
+
4. **Checking the app builds** — Step 7
|
|
13
|
+
5. **Trying it out** — Step 8
|
|
14
|
+
|
|
5
15
|
## Step 0 — Resolve missing information
|
|
6
16
|
|
|
7
17
|
Read the user's message carefully. Extract:
|
|
@@ -13,19 +23,23 @@ Read the user's message carefully. Extract:
|
|
|
13
23
|
|
|
14
24
|
All four values above are required. If any are missing or ambiguous, you MUST stop and ask the user before proceeding. Do not infer any value from the project structure, `{{AI_FILE_EXT}}` files, existing folders, or any other source.
|
|
15
25
|
|
|
26
|
+
**One exception — component type.** Once the component name is resolved to a canonical name, take its type from `{{PROMPT_DIR}}/component-manifest.json` and ask the user to confirm it in plain words, in the same message as any other missing items — for example "I'll treat the date picker as a form field — is that right?". Ask the user for the type only when the name cannot be resolved. Every other value still comes from the user.
|
|
27
|
+
|
|
16
28
|
⛔ **STOP** — If the user's message does not explicitly provide ALL of: component name, component type, design system, and output path — ask for the missing items now. Do not proceed to Step 1 until you have explicit answers from the user for all required inputs.
|
|
17
29
|
|
|
18
|
-
Example questions to ask (only ask the ones that are actually missing):
|
|
30
|
+
Ask every missing item together, in one plain message. Example questions to ask (only ask the ones that are actually missing):
|
|
19
31
|
|
|
20
|
-
1. Which
|
|
21
|
-
2.
|
|
22
|
-
3. What
|
|
32
|
+
1. Which style kit should I use for the screens? (A style kit is a ready-made set of buttons, inputs, and layouts.) Before asking, check the project's dependency list for UI libraries and list any you find first, marked as already in the project, then offer Ant Design, Chakra UI, Carbon, Radix UI, or another. Never choose one on the user's behalf, even when only one is installed.
|
|
33
|
+
2. Which piece of the screen should I build? (Describe it in your own words if you don't know its name.)
|
|
34
|
+
3. What kind of piece is this — a form field, a page layout, a panel, a display piece, or one of the buttons or progress indicators? (Only when the name could not be resolved; otherwise confirm the type as described above.)
|
|
23
35
|
4. What is the exact or relative path where the component should be generated? (e.g. `src/components/field/AutoComplete`)
|
|
24
36
|
|
|
25
37
|
### Case-insensitive component name matching
|
|
26
38
|
|
|
27
39
|
The user may enter the component name in any casing (e.g. `autocomplete`, `Autocomplete`, `autoComplete`). It is your responsibility to match it to the correct canonical name by checking the skill files in `{{SKILL_DIR}}/field-skills/`, `{{SKILL_DIR}}/template-skills/`, `{{SKILL_DIR}}/widget-skills/`, `{{SKILL_DIR}}/design-system-extension-skills/`, and `{{SKILL_DIR}}/infra-skills/`. For example, if the user types `autocomplete`, match it to `AutoComplete`.
|
|
28
40
|
|
|
41
|
+
The user may also describe the component in everyday words ("date picker", "the buttons at the bottom"). Resolve those through the `aliases` and `behaviorClasses` in `{{PROMPT_DIR}}/component-manifest.json`, and confirm the match with the user before continuing. If nothing matches, ask the user which piece they mean — never guess.
|
|
42
|
+
|
|
29
43
|
Once all four are known, continue to Step 1.
|
|
30
44
|
|
|
31
45
|
---
|
|
@@ -36,6 +50,7 @@ Before generating, check if a component already exists at the resolved output pa
|
|
|
36
50
|
|
|
37
51
|
1. Check if the component file or directory already exists at the resolved output path.
|
|
38
52
|
2. If it **does exist**, ask the user: _"A component named `<ComponentName>` already exists at `<outputPath>`. Do you want to overwrite it with the new implementation?"_
|
|
53
|
+
- Ask it in plain words, naming the piece exactly as the user did — for example _"You already have a date picker. Replace it with the new one, or keep yours?"_. If they called it "combo box", say "combo box"; never swap in a synonym or the component name. If the user did not name it, use `<ComponentName> – plain description` (the first summary line of its skill file, reworded into a few plain words). "Replace" means **yes**, "keep" means **no**.
|
|
39
54
|
- If the user says **yes**, proceed to overwrite.
|
|
40
55
|
- If the user says **no**, stop and skip generation.
|
|
41
56
|
3. If it **does not exist**, continue to Step 2.
|
|
@@ -46,25 +61,25 @@ Before generating, check if a component already exists at the resolved output pa
|
|
|
46
61
|
|
|
47
62
|
Always read the **general type skill** for the component type:
|
|
48
63
|
|
|
49
|
-
| Component Type | General Skill File
|
|
50
|
-
| ----------------------- |
|
|
51
|
-
| `field` | `{{SKILL_DIR}}/field-components
|
|
52
|
-
| `template` | `{{SKILL_DIR}}/template-components
|
|
53
|
-
| `widget` | `{{SKILL_DIR}}/widget-components
|
|
54
|
-
| `designSystemExtension` | `{{SKILL_DIR}}/design-system-extension
|
|
55
|
-
| `infra` | `{{SKILL_DIR}}/infra-components
|
|
64
|
+
| Component Type | General Skill File |
|
|
65
|
+
| ----------------------- | ---------------------------------------------------- |
|
|
66
|
+
| `field` | `{{SKILL_DIR}}/field-components{{SKILL_EXT}}` |
|
|
67
|
+
| `template` | `{{SKILL_DIR}}/template-components{{SKILL_EXT}}` |
|
|
68
|
+
| `widget` | `{{SKILL_DIR}}/widget-components{{SKILL_EXT}}` |
|
|
69
|
+
| `designSystemExtension` | `{{SKILL_DIR}}/design-system-extension{{SKILL_EXT}}` |
|
|
70
|
+
| `infra` | `{{SKILL_DIR}}/infra-components{{SKILL_EXT}}` |
|
|
56
71
|
|
|
57
72
|
Only three `infra` components may be added — `ActionButtons`, `Stages`, and `MultiStep`. Every other infrastructure component is SDK-provided; if the user names one, stop and tell them it is not generated.
|
|
58
73
|
|
|
59
74
|
Then look for a **component-specific skill** based on the component type:
|
|
60
75
|
|
|
61
|
-
| Component Type | Specific Skill Location
|
|
62
|
-
| ----------------------- |
|
|
63
|
-
| `field` | `{{SKILL_DIR}}/field-skills/<ComponentName
|
|
64
|
-
| `template` | `{{SKILL_DIR}}/template-skills/<ComponentName
|
|
65
|
-
| `widget` | `{{SKILL_DIR}}/widget-skills/<ComponentName
|
|
66
|
-
| `designSystemExtension` | `{{SKILL_DIR}}/design-system-extension-skills/<ComponentName
|
|
67
|
-
| `infra` | `{{SKILL_DIR}}/infra-skills/<ComponentName
|
|
76
|
+
| Component Type | Specific Skill Location |
|
|
77
|
+
| ----------------------- | --------------------------------------------------------------------------- |
|
|
78
|
+
| `field` | `{{SKILL_DIR}}/field-skills/<ComponentName>{{SKILL_EXT}}` |
|
|
79
|
+
| `template` | `{{SKILL_DIR}}/template-skills/<ComponentName>{{SKILL_EXT}}` |
|
|
80
|
+
| `widget` | `{{SKILL_DIR}}/widget-skills/<ComponentName>{{SKILL_EXT}}` |
|
|
81
|
+
| `designSystemExtension` | `{{SKILL_DIR}}/design-system-extension-skills/<ComponentName>{{SKILL_EXT}}` |
|
|
82
|
+
| `infra` | `{{SKILL_DIR}}/infra-skills/<ComponentName>{{SKILL_EXT}}` |
|
|
68
83
|
|
|
69
84
|
If the component-specific skill file exists, read it fully. Pay special attention to:
|
|
70
85
|
|
|
@@ -157,7 +172,7 @@ If a component-specific skill file exists, follow its Behavioral Contract for da
|
|
|
157
172
|
|
|
158
173
|
### designSystemExtension
|
|
159
174
|
|
|
160
|
-
Follow the implementation structure described in `design-system-extension.md` (read in Step 2). That file specifies the pattern variants (pure display,
|
|
175
|
+
Follow the implementation structure described in `design-system-extension.md` (read in Step 2). That file specifies the pattern variants (pure display, data display, complex display) for this project's framework.
|
|
161
176
|
|
|
162
177
|
---
|
|
163
178
|
|
|
@@ -191,3 +206,9 @@ Do not restructure or reorder any existing entries.
|
|
|
191
206
|
Run the project's build process to confirm everything compiles without errors.
|
|
192
207
|
|
|
193
208
|
If build errors occur, diagnose and fix them before reporting completion. Report what files were created and what was registered in the component map.
|
|
209
|
+
|
|
210
|
+
---
|
|
211
|
+
|
|
212
|
+
## Step 8 — Try the portal
|
|
213
|
+
|
|
214
|
+
Once the Step 7 build passes, read and execute `{{SKILL_DIR}}/portal-flow/run-and-verify-portal{{SKILL_EXT}}`, handing it the component you added. Report its verification summary together with the Step 7 report.
|
|
@@ -18,6 +18,24 @@
|
|
|
18
18
|
]
|
|
19
19
|
}
|
|
20
20
|
},
|
|
21
|
+
"scopeAliases": {
|
|
22
|
+
"form fields": "field",
|
|
23
|
+
"fields": "field",
|
|
24
|
+
"inputs": "field",
|
|
25
|
+
"page layouts": "template",
|
|
26
|
+
"layouts": "template",
|
|
27
|
+
"templates": "template",
|
|
28
|
+
"panels": "widget",
|
|
29
|
+
"widgets": "widget",
|
|
30
|
+
"display pieces": "designSystemExtension",
|
|
31
|
+
"banners and messages": "designSystemExtension",
|
|
32
|
+
"buttons and progress bars": "infra",
|
|
33
|
+
"forms": "workflow-form",
|
|
34
|
+
"the forms": "workflow-form",
|
|
35
|
+
"the whole app": "all",
|
|
36
|
+
"everything": "all",
|
|
37
|
+
"all components": "all"
|
|
38
|
+
},
|
|
21
39
|
"components": {
|
|
22
40
|
"field": [
|
|
23
41
|
{ "name": "AutoComplete", "path": "src/components/field/AutoComplete" },
|
|
@@ -163,6 +181,10 @@
|
|
|
163
181
|
"name": "AlertBanner",
|
|
164
182
|
"path": "src/components/designSystemExtension/AlertBanner"
|
|
165
183
|
},
|
|
184
|
+
{
|
|
185
|
+
"name": "AssignmentHeader",
|
|
186
|
+
"path": "src/components/designSystemExtension/AssignmentHeader"
|
|
187
|
+
},
|
|
166
188
|
{
|
|
167
189
|
"name": "Banner",
|
|
168
190
|
"path": "src/components/designSystemExtension/Banner"
|
|
@@ -196,6 +218,7 @@
|
|
|
196
218
|
"name": "RichTextEditor",
|
|
197
219
|
"path": "src/components/designSystemExtension/RichTextEditor"
|
|
198
220
|
},
|
|
221
|
+
{ "name": "Toast", "path": "src/components/designSystemExtension/Toast" },
|
|
199
222
|
{
|
|
200
223
|
"name": "WssQuickCreate",
|
|
201
224
|
"path": "src/components/designSystemExtension/WssQuickCreate"
|
|
@@ -257,7 +280,35 @@
|
|
|
257
280
|
"Assignee": "UserReference",
|
|
258
281
|
"Label": "TextContent",
|
|
259
282
|
"StaticText": "TextContent",
|
|
260
|
-
"Paragraph": "TextContent"
|
|
283
|
+
"Paragraph": "TextContent",
|
|
284
|
+
"Snackbar": "Toast",
|
|
285
|
+
"Text box": "TextInput",
|
|
286
|
+
"Big text box": "TextArea",
|
|
287
|
+
"Comment box": "TextArea",
|
|
288
|
+
"Tick box": "Checkbox",
|
|
289
|
+
"Option buttons": "RadioButtons",
|
|
290
|
+
"Date selector": "Date",
|
|
291
|
+
"Time selector": "Time",
|
|
292
|
+
"Phone number": "Phone",
|
|
293
|
+
"Email address": "Email",
|
|
294
|
+
"Website link": "URL",
|
|
295
|
+
"Web link": "URL",
|
|
296
|
+
"File uploader": "Attachment",
|
|
297
|
+
"Upload button": "Attachment",
|
|
298
|
+
"Form buttons": "ActionButtons",
|
|
299
|
+
"Submit and cancel buttons": "ActionButtons",
|
|
300
|
+
"Buttons at the bottom": "ActionButtons",
|
|
301
|
+
"Error messages": "AlertBanner",
|
|
302
|
+
"Error banner": "AlertBanner",
|
|
303
|
+
"Validation messages": "AlertBanner",
|
|
304
|
+
"Form title": "AssignmentHeader",
|
|
305
|
+
"Step title": "AssignmentHeader",
|
|
306
|
+
"Popup message": "Toast",
|
|
307
|
+
"Notification message": "Toast",
|
|
308
|
+
"Stage progress": "Stages",
|
|
309
|
+
"Step navigation": "MultiStep",
|
|
310
|
+
"Task list": "ToDo",
|
|
311
|
+
"To do list": "ToDo"
|
|
261
312
|
},
|
|
262
313
|
"behaviorClasses": {
|
|
263
314
|
"free text entry": ["TextInput"],
|
|
@@ -289,6 +340,9 @@
|
|
|
289
340
|
"link display": ["SemanticLink"],
|
|
290
341
|
"grouped set of fields": ["Group", "FieldGroup", "FieldGroupList"],
|
|
291
342
|
"confirmation or alert message": ["CancelAlert", "AlertBanner", "Banner"],
|
|
343
|
+
"short notification after an action": ["Toast"],
|
|
344
|
+
"assignment step title": ["AssignmentHeader"],
|
|
345
|
+
"step progress indicator": ["MultiStep", "Stages"],
|
|
292
346
|
"layout container": ["DefaultForm", "OneColumn", "TwoColumn", "NarrowWide", "WideNarrow"],
|
|
293
347
|
"tabular list": ["SimpleTable", "ListView"],
|
|
294
348
|
"selectable card": ["SelectableCard"],
|
|
@@ -4,7 +4,7 @@ ai-description: 'Design Profile template — defines the structure and schema fo
|
|
|
4
4
|
|
|
5
5
|
# Design Profile Schema
|
|
6
6
|
|
|
7
|
-
This document defines the required structure for a Design Profile produced by the `{{SKILL_DIR}}/embedded-flow/analyze-customer-repo
|
|
7
|
+
This document defines the required structure for a Design Profile produced by the `{{SKILL_DIR}}/embedded-flow/analyze-customer-repo{{SKILL_EXT}}` skill. The profile is consumed by the `{{PROMPT_DIR}}/generate-embedded-components{{PROMPT_EXT}}` prompt to generate Pega components matching the customer's application.
|
|
8
8
|
|
|
9
9
|
---
|
|
10
10
|
|
|
@@ -63,11 +63,20 @@ Organize by category. Use semantic names where the customer defines them; otherw
|
|
|
63
63
|
|
|
64
64
|
- Responsive boundaries (if defined)
|
|
65
65
|
|
|
66
|
+
**Global Appearance:**
|
|
67
|
+
|
|
68
|
+
- Font loading — where the web font is loaded and the family names it provides
|
|
69
|
+
- Base text — the element or wrapper that sets base font family, size, line height, text colour, and page background
|
|
70
|
+
- Reset or baseline — any global reset, normalizer, or baseline styles, and where they apply
|
|
71
|
+
- Theme scope — the design system's root theme or provider wrapper, where it is mounted, and what it covers
|
|
72
|
+
- Theme switching — supported themes and how the active one is selected
|
|
73
|
+
- Overlay placement — whether dialogs, drawers, and popovers render inside the application root or outside the theme scope
|
|
74
|
+
|
|
66
75
|
---
|
|
67
76
|
|
|
68
77
|
### 3. Component Patterns
|
|
69
78
|
|
|
70
|
-
Document how the customer's existing components work. **This section is context, not instructions.** Only the Validation Display and
|
|
79
|
+
Document how the customer's existing components work. **This section is context, not instructions.** Only the Validation Display, Styling, and Form Layout conventions below are replicated in generated Pega components, because they affect appearance. The Input Interface, State Management, and Event Handling conventions are recorded so the reader understands the codebase — generated components follow the Pega contract for all three regardless of what is written here.
|
|
71
80
|
|
|
72
81
|
**Input Interface Convention:**
|
|
73
82
|
|
|
@@ -101,6 +110,19 @@ Record the visual treatment only. Generated components read validation messages
|
|
|
101
110
|
- How conditional/dynamic styles are _expressed_ (e.g., error, disabled, focus states) — record the visual mechanism only; Pega supplies the state itself
|
|
102
111
|
- How responsive behavior is implemented
|
|
103
112
|
|
|
113
|
+
**Form Layout Convention:**
|
|
114
|
+
|
|
115
|
+
Record the visual arrangement only. Generated layout templates own the space between fields, so capture what that space _is_ in the customer's forms.
|
|
116
|
+
|
|
117
|
+
- Vertical gap between fields and horizontal gap between columns (as spacing tokens)
|
|
118
|
+
- Label position (above, beside, floating)
|
|
119
|
+
- Field width (fills its column, fixed, or maximum width)
|
|
120
|
+
- How sections and groups of fields are separated, and the spacing around them
|
|
121
|
+
- How multi-column forms are built, and the width at which they stack into one column
|
|
122
|
+
- Space between the last field and the form's buttons, and button alignment
|
|
123
|
+
- Whether gaps come from the form's layout container or from margins on each field
|
|
124
|
+
- File paths of the forms these were taken from
|
|
125
|
+
|
|
104
126
|
---
|
|
105
127
|
|
|
106
128
|
### 4. File Conventions
|
|
@@ -148,8 +170,8 @@ List 3–5 components that were analyzed, with their file paths. These serve as
|
|
|
148
170
|
The generation prompt reads this profile once at the start of component generation. It uses:
|
|
149
171
|
|
|
150
172
|
- **Project Fundamentals** → to determine which SDK adapter to reference and what language to generate
|
|
151
|
-
- **Design Tokens** → to apply correct colors, spacing, typography without hardcoding values
|
|
152
|
-
- **Component Patterns** → to replicate the customer's validation display and
|
|
173
|
+
- **Design Tokens** → to apply correct colors, spacing, typography without hardcoding values; **Global Appearance** → to keep the Pega area inside the host's font and theme scope
|
|
174
|
+
- **Component Patterns** → to replicate the customer's validation display, styling, and form layout conventions; the rest of the section is context only
|
|
153
175
|
- **File Conventions** → to inform co-located files (barrels, tests, styles); generated components' paths and names come from Pega, not from here
|
|
154
176
|
- **Import Conventions** → to write imports that match the project's style
|
|
155
177
|
- **Representative Examples** → as reference sources to re-read for detailed pattern matching
|
|
@@ -2,6 +2,18 @@
|
|
|
2
2
|
ai-description: Generate components across multiple types (field, template, widget, designSystemExtension, infra) using any design system
|
|
3
3
|
---
|
|
4
4
|
|
|
5
|
+
## Progress milestones
|
|
6
|
+
|
|
7
|
+
Announce these to the user as you reach them, in plain words and with a counter — "Step 5 of 6 — Building the components". Count only the milestones that apply to this run.
|
|
8
|
+
|
|
9
|
+
1. **Understanding your request** — Step 0
|
|
10
|
+
2. **Connecting to your Pega server** — Step 0.5.0
|
|
11
|
+
3. **Choosing what to build** — Steps 0.5.1 to 0.5.7
|
|
12
|
+
4. **Preparing your design system** — Steps 1 to 3
|
|
13
|
+
5. **Building the components** — Steps 4 to 8, counting each component across the whole generation set
|
|
14
|
+
6. **Checking the app builds** — Step 9
|
|
15
|
+
7. **Trying it out** — Step 10
|
|
16
|
+
|
|
5
17
|
## Step 0 — Resolve inputs
|
|
6
18
|
|
|
7
19
|
Read the user's message carefully. Extract:
|
|
@@ -14,11 +26,11 @@ Both **design system** and **base components folder** are required. If either is
|
|
|
14
26
|
|
|
15
27
|
⛔ **STOP** — If the user's message does not explicitly state BOTH the design system AND the base components folder, ask for the missing items now. Do not proceed to Step 0.5 until you have explicit answers from the user for all required inputs.
|
|
16
28
|
|
|
17
|
-
**Which components get generated is not decided here.** That set comes from the portal, and the landing pages and/or case types the user picks within it, all resolved from the Pega server in Step 0.5. The type scope below is only a filter applied on top of that set — it can narrow it, never widen it.
|
|
29
|
+
**Which components get generated is not decided here.** That set comes from the portal, and the landing pages and/or case types the user picks within it, all resolved from the Pega server in Step 0.5. The type scope below is only a filter applied on top of that set — it can narrow it, never widen it. The one exception is the portal shell (Step 0.5.4a): the components that draw the portal's frame are always included, even when the type scope leaves their type out.
|
|
18
30
|
|
|
19
|
-
Example questions (ask only the ones that are actually missing):
|
|
31
|
+
Ask every missing item together, in one plain message. Example questions (ask only the ones that are actually missing):
|
|
20
32
|
|
|
21
|
-
1. Which
|
|
33
|
+
1. Which style kit should I use for the screens? (A style kit is a ready-made set of buttons, inputs, and layouts.) Before asking, check the project's dependency list for UI libraries and list any you find first, marked as already in the project, then offer Ant Design, Chakra UI, Carbon, Radix UI, or another. Never choose one on the user's behalf, even when only one is installed.
|
|
22
34
|
2. What is your base components folder? (e.g. `src/components/`) — subfolders `field/`, `template/`, `widget/`, `designSystemExtension/`, and `infra/` will be used under it.
|
|
23
35
|
|
|
24
36
|
### Component type scope
|
|
@@ -53,11 +65,11 @@ Once design system, base folder, and type scope are resolved, continue to Step 0
|
|
|
53
65
|
|
|
54
66
|
## Step 0.5 — Resolve the portal, its scope, and its components from the server (MANDATORY GATE)
|
|
55
67
|
|
|
56
|
-
⛔ **This step MUST complete before anything is read, installed, or written.** A portal renders a specific set of components, and generating the full catalogue produces components the portal will never mount. Do NOT use a hardcoded component list, and do NOT infer one from the project's existing folders.
|
|
68
|
+
⛔ **This step MUST complete before anything is read, installed, or written.** A portal renders a specific set of components, and generating the full catalogue produces components the portal will never mount. Do NOT use a hardcoded component list, and do NOT infer one from the project's existing folders. The only fixed names are the portal shell companions and fallback that Step 0.5.4a defines.
|
|
57
69
|
|
|
58
70
|
### 0.5.0 — Ensure the Pega server connection is configured
|
|
59
71
|
|
|
60
|
-
Before executing any data source below, read and execute `{{SKILL_DIR}}/connect-pega-server
|
|
72
|
+
Before executing any data source below, read and execute `{{SKILL_DIR}}/connect-pega-server{{SKILL_EXT}}`. It is a no-op when the connection is already configured. Otherwise, it resolves existing values from the active MCP config, application `sdk-config.json`, and environment files; asks once for every missing non-secret value; and writes chat-provided values to every applicable file. It may pause for an environment-sourced Pega MCP client secret (Cursor only — an MCP entry that carries its own client ID and secret) or an MCP reconnect. After the user retries, rerun the gate before executing any data source.
|
|
61
73
|
|
|
62
74
|
### 0.5.1 — Resolve the portal
|
|
63
75
|
|
|
@@ -67,6 +79,8 @@ Execute it directly, by name. An execution tool may instruct you to look up the
|
|
|
67
79
|
|
|
68
80
|
If nothing in this session can execute a Pega data source, stop. Tell the user the Pega MCP server is not available to this conversation, and name both common causes: the server is not running, or it was started after this conversation began — in which case its tools are not bound to this session and a new session is needed. Do not guess at its configuration, and do not fall back to generating the full component catalogue.
|
|
69
81
|
|
|
82
|
+
Say it in plain words — for example: "I can't reach your Pega server from this chat. Usually the Pega connection in your editor isn't running, or it was started after this chat began. Start it, or open a new chat, and ask me again."
|
|
83
|
+
|
|
70
84
|
If the execution runs but fails, report the failure and the error the server returned. You may list the server's advertised data sources alongside it as context, but never present that list as evidence the data page is unavailable. Do not substitute a different data page.
|
|
71
85
|
|
|
72
86
|
The response's `pxResults` array holds one entry per portal. Then:
|
|
@@ -80,6 +94,8 @@ The response's `pxResults` array holds one entry per portal. Then:
|
|
|
80
94
|
|
|
81
95
|
Ask the user which parts of the portal to convert: **Landing pages**, **Cases**, or **Both**. Allow selecting more than one. This is a gate — wait for the answer before continuing.
|
|
82
96
|
|
|
97
|
+
Explain the choices in plain words when you ask: **Landing pages** are the main screens people open from the app's menu, such as dashboards, lists, and home pages; **Cases** are the step-by-step forms people fill in to get work done, such as a service request; **Both** covers all of them.
|
|
98
|
+
|
|
83
99
|
- If **Landing pages** is selected, run Step 0.5.3.
|
|
84
100
|
- If **Cases** is selected, run Step 0.5.4.
|
|
85
101
|
- If **Both** is selected, run 0.5.3 and 0.5.4 and merge their results in Step 0.5.5.
|
|
@@ -92,7 +108,7 @@ Execute it — and every data page this step dispatches to — by name. Step 0.5
|
|
|
92
108
|
|
|
93
109
|
If `pxResults` is empty, tell the user this portal has no landing pages and, if Cases was not already selected, offer to fall back to it. If Cases was also not selected or also comes back empty, stop — there is nothing to generate.
|
|
94
110
|
|
|
95
|
-
Present the returned pages as a **checkbox list** (label each with its `pyRuleName`, and show its `pxObjClass` alongside so the user can tell a view from a landing page) and let the user select one or more. This is a gate.
|
|
111
|
+
Present the returned pages as a **checkbox list** (label each with its `pyRuleName`, and show its `pxObjClass` alongside so the user can tell a view from a landing page) and let the user select one or more. Next to each class, also say in plain words whether the entry is a view or a landing page. This is a gate.
|
|
96
112
|
|
|
97
113
|
For **each selected page**, resolve its components by its `pxObjClass`:
|
|
98
114
|
|
|
@@ -125,9 +141,26 @@ Present the returned case types as a **checkbox list** and let the user select o
|
|
|
125
141
|
|
|
126
142
|
For **each selected case type**, execute **`D_pyCaseViewComponentsByType`** with `CaseType` set to its `pyClassName`. Make one call per selected case type. Discard malformed entries from each response, then union the results across all selected case types and drop duplicates. Keep a note of which case type(s) contributed each component.
|
|
127
143
|
|
|
144
|
+
### 0.5.4a — Portal shell (always runs)
|
|
145
|
+
|
|
146
|
+
The portal is drawn by a shell view that sits around every landing page and case. Its components are never returned by Step 0.5.3 or Step 0.5.4, and without them the portal shows a placeholder instead of its header and navigation. Run this step every time, whatever the user chose in Step 0.5.2.
|
|
147
|
+
|
|
148
|
+
Execute **`D_pyViewDependencies`** with `ViewName = pzWebChannelInterfaceShell` and `ViewClass = Data-Portal`. Pass both values exactly as written — this view is part of the Pega platform, is the same for every portal type, and does not vary between installations. Read component names from `pxDependencies` and discard malformed entries. Execute it by name; Step 0.5.1's rule still applies.
|
|
149
|
+
|
|
150
|
+
Then add these two, which the server never returns because `AppShell` looks them up from the registry at runtime:
|
|
151
|
+
|
|
152
|
+
- **`WssNavBar`** — the top navigation bar of a self-service portal
|
|
153
|
+
- **`AlertBanner`** — the page messages shown above the portal content
|
|
154
|
+
|
|
155
|
+
Do not add `NavBar` — the SDK already provides it.
|
|
156
|
+
|
|
157
|
+
If the execution fails or `pxDependencies` is empty, report it with the error the server returned, use `AppShell`, `WssNavBar`, and `AlertBanner` as the shell set, and tell the user this fallback was used. Do not stop the flow for this.
|
|
158
|
+
|
|
159
|
+
Note each of these components as coming from the portal shell — Step 0.5.5 shows them as their own group and Step 9 reports them.
|
|
160
|
+
|
|
128
161
|
### 0.5.5 — Resolve names, present, and ask which components to generate
|
|
129
162
|
|
|
130
|
-
Union whatever Step 0.5.3 and Step 0.5.4 produced (only one ran unless the user chose Both) and drop duplicates across the two.
|
|
163
|
+
Union whatever Step 0.5.3 and Step 0.5.4 produced (only one ran unless the user chose Both) and drop duplicates across the two. Add the portal shell names from Step 0.5.4a to that union; they go through the same name resolution below.
|
|
131
164
|
|
|
132
165
|
Every component you generate must correspond to one canonical component listed in `{{PROMPT_DIR}}/component-manifest.json`. Pega defines a fixed set of components, and the manifest is the complete list of them. Read it once. It contains three things you need here:
|
|
133
166
|
|
|
@@ -135,6 +168,8 @@ Every component you generate must correspond to one canonical component listed i
|
|
|
135
168
|
- `aliases` — known non-canonical names and the canonical name each one maps to
|
|
136
169
|
- `behaviorClasses` — a fixed list of behaviour descriptions, each mapping to one or more canonical names
|
|
137
170
|
|
|
171
|
+
**Not supported yet.** `GenAICoach` is not supported by the SDK yet. Whichever step returned it, do not run it through the stages below and do not ask the user about it. Keep it visible in the list, unticked and not selectable, with the plain reason "The SDK doesn't support this one yet", and never generate it. The portal shell entries Pega already provides — `ModalViewContainer`, `View`, and `ViewContainer` — are also set aside before the stages and shown as not generatable.
|
|
172
|
+
|
|
138
173
|
For each name the server returned, work through the following stages in order. Stop at the first stage that produces an answer. These names come from Pega's own view metadata, so most are already canonical and settle at Stage 1 — the later stages exist for the ones that do not.
|
|
139
174
|
|
|
140
175
|
#### Stage 1 — Normalized name match
|
|
@@ -154,13 +189,13 @@ Do not search for a "similar sounding" name here. Follow these three sub-steps e
|
|
|
154
189
|
|
|
155
190
|
1. Decide what the component does for the end user, and choose **exactly one** entry from the `behaviorClasses` list that describes that behaviour. You must pick one of the listed classes. If you cannot honestly place the component in any of them, go to Stage 4.
|
|
156
191
|
2. Read the canonical names that class maps to. If the class maps to exactly one name, that is the candidate.
|
|
157
|
-
3. Read the candidate's skill file — `{{SKILL_DIR}}/{type}-skills/<CanonicalName
|
|
192
|
+
3. Read the candidate's skill file — `{{SKILL_DIR}}/{type}-skills/<CanonicalName>{{SKILL_EXT}}`, where `{type}` is `field`, `template`, `widget`, `design-system-extension`, or `infra` — and confirm its behavioural contract covers what the component does. If it clearly does not, go to Stage 4.
|
|
158
193
|
|
|
159
194
|
If the class maps to more than one canonical name, choose between them using the page or case type the name came from and the surrounding context. If the context does not make the choice obvious, go to Stage 4.
|
|
160
195
|
|
|
161
196
|
#### Stage 4 — Ask the user
|
|
162
197
|
|
|
163
|
-
Tell the user the name could not be resolved to a Pega component, list the two or three canonical names you considered most likely, and ask which one they want — or whether to leave it out. Do not guess, and do not proceed with that component until they answer. Collect every unresolved name into a **single** question rather than asking once per name; a portal can return a long list, and one question per name is not a usable gate.
|
|
198
|
+
Tell the user the name could not be resolved to a Pega component, list the two or three canonical names you considered most likely, and ask which one they want — or whether to leave it out. Show each candidate as `<ComponentName> – plain description` (the first summary line of its skill file, reworded into a few plain words), for example "SimpleTableManual – Table you can edit". Do not guess, and do not proceed with that component until they answer. Collect every unresolved name into a **single** question rather than asking once per name; a portal can return a long list, and one question per name is not a usable gate.
|
|
164
199
|
|
|
165
200
|
#### Rules for this step
|
|
166
201
|
|
|
@@ -171,7 +206,11 @@ Tell the user the name could not be resolved to a Pega component, list the two o
|
|
|
171
206
|
|
|
172
207
|
Group the resolved canonical names by type — `field`, `template`, `widget`, `designSystemExtension`, or `infra`.
|
|
173
208
|
|
|
174
|
-
Present the grouped list — noting, for any component contributed by more than one page or case type, which ones — and ask which components to generate as a **checkbox list**, offering selecting all of them as an explicit option. Where a returned component is one the SDK provides and this prompt never generates — anything named in Step 8's never-generate list, or a structural wrapper such as `View`, `Region`, or `FlowContainer` — keep it visible in the list but mark it as not generatable and say why, so the user can see it's used without expecting a folder for it.
|
|
209
|
+
Present the grouped list — noting, for any component contributed by more than one page or case type, which ones — and ask which components to generate as a **checkbox list**, offering selecting all of them as an explicit option. Where a returned component is one the SDK provides and this prompt never generates — anything named in Step 8's never-generate list, or a structural wrapper such as `View`, `Region`, or `FlowContainer` — keep it visible in the list but mark it as not generatable and say why, so the user can see it's used without expecting a folder for it. Give that reason in plain words — for example, "Pega already provides this one".
|
|
210
|
+
|
|
211
|
+
Show every entry as `<ComponentName> – plain description` — the name first, then the first summary line of its skill file reworded into a few plain words, for example "SimpleTableManual – Table you can edit" or "Date – Pick a date from a calendar". Label each group in plain words with the type in brackets: form fields (field), page layouts (template), panels (widget), display pieces (designSystemExtension), buttons and progress bars (infra).
|
|
212
|
+
|
|
213
|
+
Show the portal shell components from Step 0.5.4a first, as their own group labelled in plain words — for example "Portal frame — header, navigation, and messages" — with every generatable entry **already ticked**. Say why they are included: the portal needs them to draw its frame on every page, whatever else is chosen. If the user unticks a shell entry, warn them once, in plain words, that the portal will show a placeholder instead of that part of its frame, then go with their answer.
|
|
175
214
|
|
|
176
215
|
⛔ **Wait for the user's answer.** This is a gate, not a notification. Nothing is read, installed, or written until the selection is confirmed.
|
|
177
216
|
|
|
@@ -180,6 +219,7 @@ Present the grouped list — noting, for any component contributed by more than
|
|
|
180
219
|
Add the following to the confirmed selection whether or not the user picked it, and note the addition in the Step 9 summary:
|
|
181
220
|
|
|
182
221
|
- **`FieldValueList`** — whenever the selection contains any field component. Every field renders its display-only mode through it, so the selected fields will not render correctly without it.
|
|
222
|
+
- **`AlertBanner`**, **`AssignmentHeader`**, and **`Toast`** — whenever **Cases** was chosen in Step 0.5.2. The SDK draws the validation and page messages, the step title, and the short failure messages of every case assignment through them, and the server never returns them. Left ungenerated, the project keeps whatever design system they were previously built with.
|
|
183
223
|
|
|
184
224
|
Layout sub-variants are not part of the selection at all — Step 5.2.1 derives them from whichever layout templates were selected, and the user never has to ask for them.
|
|
185
225
|
|
|
@@ -187,7 +227,7 @@ Layout sub-variants are not part of the selection at all — Step 5.2.1 derives
|
|
|
187
227
|
|
|
188
228
|
### 0.5.7 — Derive the generation set
|
|
189
229
|
|
|
190
|
-
Intersect the confirmed selection with the type scope from Step 0, group the result by type, and record it as **the generation set**.
|
|
230
|
+
Intersect the confirmed selection with the type scope from Step 0, group the result by type, and record it as **the generation set**. Portal shell components the user kept in Step 0.5.5 skip the intersection and always join the generation set; tell the user, in plain words, which ones were kept outside their chosen scope and why. The generation set governs the rest of this prompt:
|
|
191
231
|
|
|
192
232
|
- Steps 1 and 2 read skills and discover design system components for the types present in the generation set.
|
|
193
233
|
- Step 3 checks for existing files only within the generation set.
|
|
@@ -195,7 +235,7 @@ Intersect the confirmed selection with the type scope from Step 0, group the res
|
|
|
195
235
|
|
|
196
236
|
Generate nothing outside the generation set, with one exception: the registry dependencies that the selected components' own skill files declare. Some components are orchestrators — they render no control of their own and instead resolve other components from the registry at runtime, as reference and embedded data fields do. Those dependencies are building blocks rather than fields, so they never appear in view metadata and no data source above returns them, and a registry lookup that finds nothing degrades to a blank render rather than raising an error. Read each selected component's skill file, collect the registry keys it declares it will resolve, and add any that are neither already registered nor already in the set; repeat until the set stops growing, since a dependency's own skill may declare further ones. Report these additions in the Step 9 summary, naming which component required each.
|
|
197
237
|
|
|
198
|
-
A dependency a skill file declares is required. A component you believe a portal might need is not — do not add components based on assumptions about what a portal might need.
|
|
238
|
+
A dependency a skill file declares is required. A component you believe a portal might need is not — do not add components based on assumptions about what a portal might need. The portal shell from Step 0.5.4a is the one exception, because it is resolved from the platform's shell view rather than assumed.
|
|
199
239
|
|
|
200
240
|
---
|
|
201
241
|
|
|
@@ -203,13 +243,13 @@ A dependency a skill file declares is required. A component you believe a portal
|
|
|
203
243
|
|
|
204
244
|
Read the general skill file for every type present in the generation set. Do this upfront — do not re-read per component.
|
|
205
245
|
|
|
206
|
-
| Type | Skill file to read
|
|
207
|
-
| --------------------- |
|
|
208
|
-
| field | `{{SKILL_DIR}}/field-components
|
|
209
|
-
| template | `{{SKILL_DIR}}/template-components
|
|
210
|
-
| widget | `{{SKILL_DIR}}/widget-components
|
|
211
|
-
| designSystemExtension | `{{SKILL_DIR}}/design-system-extension
|
|
212
|
-
| infra | `{{SKILL_DIR}}/infra-components
|
|
246
|
+
| Type | Skill file to read |
|
|
247
|
+
| --------------------- | ---------------------------------------------------- |
|
|
248
|
+
| field | `{{SKILL_DIR}}/field-components{{SKILL_EXT}}` |
|
|
249
|
+
| template | `{{SKILL_DIR}}/template-components{{SKILL_EXT}}` |
|
|
250
|
+
| widget | `{{SKILL_DIR}}/widget-components{{SKILL_EXT}}` |
|
|
251
|
+
| designSystemExtension | `{{SKILL_DIR}}/design-system-extension{{SKILL_EXT}}` |
|
|
252
|
+
| infra | `{{SKILL_DIR}}/infra-components{{SKILL_EXT}}` |
|
|
213
253
|
|
|
214
254
|
Keep all loaded skill files active throughout the entire session.
|
|
215
255
|
|
|
@@ -281,6 +321,8 @@ Collect all existing components across all types and report them in one consolid
|
|
|
281
321
|
|
|
282
322
|
Wait for the user's answer before proceeding. If none exist, continue immediately.
|
|
283
323
|
|
|
324
|
+
**Say it in plain words.** Name each existing piece exactly as the user did — if they said "date picker", write "date picker", never a synonym or the component name. For pieces the user did not name, use `<ComponentName> – plain description` (the first summary line of its skill file, reworded into a few plain words). Group them under plain type labels (form fields, page layouts, panels, display pieces, buttons and progress bars). For example: _"You already have 6 form fields and 2 page layouts. Replace them with new ones, keep yours, or stop?"_ — "replace" is **Overwrite all**, "keep" is **Skip existing**, "stop" is **Cancel**.
|
|
325
|
+
|
|
284
326
|
⚠️ **This decision is final for the entire session.** Do NOT re-check file existence or re-ask this overwrite question during Steps 4–8. When you encounter a component file that already exists during generation, silently apply the decision made here (overwrite it or skip it) without prompting again. This applies even after retries, transport errors, or subagent restarts — the user's answer here governs all subsequent component generation in this conversation.
|
|
285
327
|
|
|
286
328
|
---
|
|
@@ -293,7 +335,7 @@ Generate each field component in the generation set, in order:
|
|
|
293
335
|
|
|
294
336
|
### 4.1 — Read the component-specific skill file (MANDATORY — do not skip)
|
|
295
337
|
|
|
296
|
-
Read the file `{{SKILL_DIR}}/field-skills/<ComponentName
|
|
338
|
+
Read the file `{{SKILL_DIR}}/field-skills/<ComponentName>{{SKILL_EXT}}` using your file reading tool. This step is **required** for every component that has a skill file — do not rely solely on the general `field-components.md`.
|
|
297
339
|
|
|
298
340
|
After reading, extract and keep active:
|
|
299
341
|
|
|
@@ -332,7 +374,7 @@ Open the project's component map file (the file that maps component names to the
|
|
|
332
374
|
|
|
333
375
|
### 4.4 — Report progress
|
|
334
376
|
|
|
335
|
-
After each component: "
|
|
377
|
+
After each component, tell the user in plain words what is now ready, described by what it shows on screen, and how far along you are — for example: "Date picker field ready (5 of 23)".
|
|
336
378
|
|
|
337
379
|
---
|
|
338
380
|
|
|
@@ -344,7 +386,7 @@ Generate each template component in the generation set, in order:
|
|
|
344
386
|
|
|
345
387
|
### 5.1 — Read the component-specific skill file (MANDATORY — do not skip)
|
|
346
388
|
|
|
347
|
-
Read the file `{{SKILL_DIR}}/template-skills/<ComponentName
|
|
389
|
+
Read the file `{{SKILL_DIR}}/template-skills/<ComponentName>{{SKILL_EXT}}` using your file reading tool. This step is **required** for every component — do not rely solely on the general `template-components.md`.
|
|
348
390
|
|
|
349
391
|
After reading, extract and keep active:
|
|
350
392
|
|
|
@@ -395,7 +437,7 @@ Open the project's component map file and:
|
|
|
395
437
|
|
|
396
438
|
### 5.4 — Report progress
|
|
397
439
|
|
|
398
|
-
After each component
|
|
440
|
+
After each component, tell the user in plain words what is now ready, described by what it shows on screen, and how far along you are — for example: "Two-column page layout ready (9 of 23)".
|
|
399
441
|
|
|
400
442
|
---
|
|
401
443
|
|
|
@@ -407,7 +449,7 @@ Generate each widget component in the generation set, in order:
|
|
|
407
449
|
|
|
408
450
|
### 6.1 — Read the component-specific skill file (MANDATORY — do not skip)
|
|
409
451
|
|
|
410
|
-
Read the file `{{SKILL_DIR}}/widget-skills/<ComponentName
|
|
452
|
+
Read the file `{{SKILL_DIR}}/widget-skills/<ComponentName>{{SKILL_EXT}}` using your file reading tool. This step is **required** for every component that has a skill file — do not rely solely on the general `widget-components.md`.
|
|
411
453
|
|
|
412
454
|
After reading, extract and keep active:
|
|
413
455
|
|
|
@@ -444,7 +486,7 @@ Open the project's component map file and:
|
|
|
444
486
|
|
|
445
487
|
### 6.4 — Report progress
|
|
446
488
|
|
|
447
|
-
After each component: "
|
|
489
|
+
After each component, tell the user in plain words what is now ready, described by what it shows on screen, and how far along you are — for example: "Attachments panel ready (14 of 23)".
|
|
448
490
|
|
|
449
491
|
---
|
|
450
492
|
|
|
@@ -456,11 +498,11 @@ Generate each design system extension component in the generation set, in order:
|
|
|
456
498
|
|
|
457
499
|
### 7.1 — Read the component-specific skill file (MANDATORY — do not skip)
|
|
458
500
|
|
|
459
|
-
Read the file `{{SKILL_DIR}}/design-system-extension-skills/<ComponentName
|
|
501
|
+
Read the file `{{SKILL_DIR}}/design-system-extension-skills/<ComponentName>{{SKILL_EXT}}` using your file reading tool. This step is **required** for every component that has a skill file — do not rely solely on the general `design-system-extension.md`.
|
|
460
502
|
|
|
461
503
|
After reading, extract and keep active:
|
|
462
504
|
|
|
463
|
-
- **Pattern classification** — B (Pure display) / A (
|
|
505
|
+
- **Pattern classification** — B (Pure display) / A (Data display) / C (Complex display)
|
|
464
506
|
- **Behavioral Contract** — prop handling, variant mapping, rendering logic, edge cases
|
|
465
507
|
- **Design System Mapping** table — the recommended DS primitive (Pattern B components only)
|
|
466
508
|
|
|
@@ -474,7 +516,7 @@ Create the directory `<base>/designSystemExtension/<ComponentName>/`.
|
|
|
474
516
|
|
|
475
517
|
Create the component's main implementation file using the file naming convention and extension appropriate to the project's framework.
|
|
476
518
|
|
|
477
|
-
Follow the implementation structure described in `design-system-extension.md` (loaded in Step 1). That file specifies the pattern variants (pure display,
|
|
519
|
+
Follow the implementation structure described in `design-system-extension.md` (loaded in Step 1). That file specifies the pattern variants (pure display, data display, complex display) for this project's framework.
|
|
478
520
|
|
|
479
521
|
Apply the Behavioral Contract from the component skill file (prop handling, variant mapping, rendering logic, edge cases).
|
|
480
522
|
|
|
@@ -489,7 +531,7 @@ Open the project's component map file and:
|
|
|
489
531
|
|
|
490
532
|
### 7.4 — Report progress
|
|
491
533
|
|
|
492
|
-
After each component: "
|
|
534
|
+
After each component, tell the user in plain words what is now ready, described by what it shows on screen, and how far along you are — for example: "Message banner ready (18 of 23)".
|
|
493
535
|
|
|
494
536
|
---
|
|
495
537
|
|
|
@@ -511,7 +553,7 @@ Generate each infra component in the generation set that is one of the three ove
|
|
|
511
553
|
|
|
512
554
|
### 8.1 — Read the component-specific skill file (MANDATORY — do not skip)
|
|
513
555
|
|
|
514
|
-
Read the file `{{SKILL_DIR}}/infra-skills/<ComponentName
|
|
556
|
+
Read the file `{{SKILL_DIR}}/infra-skills/<ComponentName>{{SKILL_EXT}}` using your file reading tool. This step is **required** for every component — do not rely solely on the general `infra-components.md`.
|
|
515
557
|
|
|
516
558
|
After reading, extract and keep active:
|
|
517
559
|
|
|
@@ -556,7 +598,7 @@ Open the project's component map file and apply the case that matches what you f
|
|
|
556
598
|
|
|
557
599
|
### 8.4 — Report progress
|
|
558
600
|
|
|
559
|
-
After each component: "
|
|
601
|
+
After each component, tell the user in plain words what is now ready, described by what it shows on screen, and how far along you are — for example: "Submit and Cancel buttons ready (22 of 23)".
|
|
560
602
|
|
|
561
603
|
---
|
|
562
604
|
|
|
@@ -587,7 +629,14 @@ Report a final summary:
|
|
|
587
629
|
- The portal resolved in Step 0.5.1, the scope chosen in Step 0.5.2 (Landing pages / Cases / Both), and which pages and/or case types were selected
|
|
588
630
|
- How many components the server returned in total versus how many were selected to generate
|
|
589
631
|
- Total components generated, grouped by type
|
|
590
|
-
- `FieldValueList`,
|
|
632
|
+
- `FieldValueList`, `AlertBanner`, `AssignmentHeader`, and `Toast`, for each one added automatically under Step 0.5.6
|
|
633
|
+
- The portal shell components from Step 0.5.4a — which came from the server's shell view, which were added as companions, whether the fallback set was used, and any kept outside the type scope
|
|
591
634
|
- All entries added to the component map
|
|
592
|
-
- Any components skipped (if "skip existing" was chosen in Step 3,
|
|
635
|
+
- Any components skipped (if "skip existing" was chosen in Step 3, because they are SDK-provided infrastructure, or because the SDK doesn't support them yet, such as `GenAICoach`)
|
|
593
636
|
- Any name the server returned that resolved to a **different** canonical name, with the stage that produced the match (normalized name, alias, behaviour class, or the user's choice). Say it in your reply as well — the user must never discover a substitution only by reading the generated files
|
|
637
|
+
|
|
638
|
+
---
|
|
639
|
+
|
|
640
|
+
## Step 10 — Try the portal
|
|
641
|
+
|
|
642
|
+
Once the Step 9 build passes, read and execute `{{SKILL_DIR}}/portal-flow/run-and-verify-portal{{SKILL_EXT}}`. Hand it the generation set with the page or case type each component came from, the portal resolved in Step 0.5.1, and the case types selected in Step 0.5.4 — when Cases was not chosen, it asks the user which case types to walk through. Report its verification summary together with the Step 9 summary.
|