@theproductguy/create-mission-control 1.0.0 → 1.0.4
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/bin/cli.js +12 -5
- package/package.json +2 -2
- package/src/template/agent-os/commands/export-product/export-product.md +26 -1
- package/src/template/agent-os/commands/initialize-design/initialize-design.md +10 -1
- package/src/template/agent-os-ui/README.md +5 -5
- package/src/template/agent-os-ui/package.json +1 -1
- package/src/template/control-center/backend/index.js +9 -3
- package/src/template/control-center/frontend/package.json +1 -1
- package/src/template/control-center/frontend/src/App.tsx +90 -31
- package/src/template/{design/.claude → design-system/.gemini}/commands/design-os/design-shell.md +95 -69
- package/src/template/design-system/.gemini/commands/design-os/design-tokens.md +211 -0
- package/src/template/design-system/.gemini/commands/impeccable/WORKFLOW.md +163 -0
- package/src/template/design-system/.gemini/commands/impeccable/adapt.md +189 -0
- package/src/template/design-system/.gemini/commands/impeccable/animate.md +184 -0
- package/src/template/design-system/.gemini/commands/impeccable/audit.md +123 -0
- package/src/template/design-system/.gemini/commands/impeccable/bolder.md +126 -0
- package/src/template/design-system/.gemini/commands/impeccable/clarify.md +173 -0
- package/src/template/design-system/.gemini/commands/impeccable/colorize.md +152 -0
- package/src/template/design-system/.gemini/commands/impeccable/critique.md +112 -0
- package/src/template/design-system/.gemini/commands/impeccable/delight.md +311 -0
- package/src/template/design-system/.gemini/commands/impeccable/extract.md +88 -0
- package/src/template/design-system/.gemini/commands/impeccable/harden.md +351 -0
- package/src/template/design-system/.gemini/commands/impeccable/normalize.md +61 -0
- package/src/template/design-system/.gemini/commands/impeccable/onboard.md +236 -0
- package/src/template/design-system/.gemini/commands/impeccable/optimize.md +262 -0
- package/src/template/design-system/.gemini/commands/impeccable/polish.md +196 -0
- package/src/template/design-system/.gemini/commands/impeccable/quieter.md +112 -0
- package/src/template/design-system/.gemini/commands/impeccable/simplify.md +131 -0
- package/src/template/design-system/.gemini/commands/impeccable/teach-impeccable.md +67 -0
- package/src/template/design-system/.gemini/skills/frontend-design/SKILL.md +126 -0
- package/src/template/design-system/.gemini/skills/frontend-design/reference/color-and-contrast.md +132 -0
- package/src/template/design-system/.gemini/skills/frontend-design/reference/interaction-design.md +123 -0
- package/src/template/design-system/.gemini/skills/frontend-design/reference/motion-design.md +99 -0
- package/src/template/design-system/.gemini/skills/frontend-design/reference/responsive-design.md +114 -0
- package/src/template/design-system/.gemini/skills/frontend-design/reference/spatial-design.md +100 -0
- package/src/template/design-system/.gemini/skills/frontend-design/reference/typography.md +131 -0
- package/src/template/design-system/.gemini/skills/frontend-design/reference/ux-writing.md +107 -0
- package/src/template/{design → design-system}/src/components/DesignPage.tsx +104 -0
- package/src/template/{design → design-system}/src/components/ExportPage.tsx +9 -2
- package/src/template/package-lock.json +10308 -0
- package/src/template/tailwind.config.js +1 -1
- package/src/template/design/.claude/commands/design-os/design-tokens.md +0 -166
- package/src/template/design/.claude/skills/frontend-design/SKILL.md +0 -42
- /package/src/template/{design/.claude → design-system/.gemini}/commands/design-os/data-model.md +0 -0
- /package/src/template/{design/.claude → design-system/.gemini}/commands/design-os/design-screen.md +0 -0
- /package/src/template/{design/.claude → design-system/.gemini}/commands/design-os/export-product.md +0 -0
- /package/src/template/{design/.claude → design-system/.gemini}/commands/design-os/product-roadmap.md +0 -0
- /package/src/template/{design/.claude → design-system/.gemini}/commands/design-os/product-vision.md +0 -0
- /package/src/template/{design/.claude → design-system/.gemini}/commands/design-os/sample-data.md +0 -0
- /package/src/template/{design/.claude → design-system/.gemini}/commands/design-os/screenshot-design.md +0 -0
- /package/src/template/{design/.claude → design-system/.gemini}/commands/design-os/shape-section.md +0 -0
- /package/src/template/{design → design-system}/.github/CODE_OF_CONDUCT.md +0 -0
- /package/src/template/{design → design-system}/.github/CONTRIBUTING.md +0 -0
- /package/src/template/{design → design-system}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- /package/src/template/{design → design-system}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- /package/src/template/{design → design-system}/.github/SECURITY.yml +0 -0
- /package/src/template/{design → design-system}/.github/SUPPORT.md +0 -0
- /package/src/template/{design → design-system}/.github/workflows/pr-decline.yml +0 -0
- /package/src/template/{design → design-system}/.github/workflows/stale.yml +0 -0
- /package/src/template/{design → design-system}/CHANGELOG.md +0 -0
- /package/src/template/{design → design-system}/LICENSE +0 -0
- /package/src/template/{design → design-system}/README.md +0 -0
- /package/src/template/{design → design-system}/agents.md +0 -0
- /package/src/template/{design → design-system}/components.json +0 -0
- /package/src/template/{design → design-system}/docs/codebase-implementation.md +0 -0
- /package/src/template/{design → design-system}/docs/design-section.md +0 -0
- /package/src/template/{design → design-system}/docs/export.md +0 -0
- /package/src/template/{design → design-system}/docs/getting-started.md +0 -0
- /package/src/template/{design → design-system}/docs/index.md +0 -0
- /package/src/template/{design → design-system}/docs/product-planning.md +0 -0
- /package/src/template/{design → design-system}/docs/requirements.md +0 -0
- /package/src/template/{design → design-system}/docs/usage.md +0 -0
- /package/src/template/{design → design-system}/eslint.config.js +0 -0
- /package/src/template/{design/claude.md → design-system/gemini.md} +0 -0
- /package/src/template/{design → design-system}/index.html +0 -0
- /package/src/template/{design → design-system}/package.json +0 -0
- /package/src/template/{design → design-system}/postcss.config.js +0 -0
- /package/src/template/{design → design-system}/public/favicon.svg +0 -0
- /package/src/template/{design → design-system}/public/vite.svg +0 -0
- /package/src/template/{design → design-system}/src/assets/react.svg +0 -0
- /package/src/template/{design → design-system}/src/components/AppLayout.tsx +0 -0
- /package/src/template/{design → design-system}/src/components/DataCard.tsx +0 -0
- /package/src/template/{design → design-system}/src/components/DataModelPage.tsx +0 -0
- /package/src/template/{design → design-system}/src/components/EmptyState.tsx +0 -0
- /package/src/template/{design → design-system}/src/components/NextPhaseButton.tsx +0 -0
- /package/src/template/{design → design-system}/src/components/PhaseNav.tsx +0 -0
- /package/src/template/{design → design-system}/src/components/PhaseWarningBanner.tsx +0 -0
- /package/src/template/{design → design-system}/src/components/ProductOverviewCard.tsx +0 -0
- /package/src/template/{design → design-system}/src/components/ProductPage.tsx +0 -0
- /package/src/template/{design → design-system}/src/components/ScreenDesignPage.tsx +0 -0
- /package/src/template/{design → design-system}/src/components/ScreenDesignsCard.tsx +0 -0
- /package/src/template/{design → design-system}/src/components/SectionPage.tsx +0 -0
- /package/src/template/{design → design-system}/src/components/SectionsCard.tsx +0 -0
- /package/src/template/{design → design-system}/src/components/SectionsPage.tsx +0 -0
- /package/src/template/{design → design-system}/src/components/ShellCard.tsx +0 -0
- /package/src/template/{design → design-system}/src/components/ShellDesignPage.tsx +0 -0
- /package/src/template/{design → design-system}/src/components/SpecCard.tsx +0 -0
- /package/src/template/{design → design-system}/src/components/StepIndicator.tsx +0 -0
- /package/src/template/{design → design-system}/src/components/ThemeToggle.tsx +0 -0
- /package/src/template/{design → design-system}/src/components/ui/ToastContext.tsx +0 -0
- /package/src/template/{design → design-system}/src/components/ui/avatar.tsx +0 -0
- /package/src/template/{design → design-system}/src/components/ui/badge.tsx +0 -0
- /package/src/template/{design → design-system}/src/components/ui/button.tsx +0 -0
- /package/src/template/{design → design-system}/src/components/ui/card.tsx +0 -0
- /package/src/template/{design → design-system}/src/components/ui/collapsible.tsx +0 -0
- /package/src/template/{design → design-system}/src/components/ui/dialog.tsx +0 -0
- /package/src/template/{design → design-system}/src/components/ui/dropdown-menu.tsx +0 -0
- /package/src/template/{design → design-system}/src/components/ui/input.tsx +0 -0
- /package/src/template/{design → design-system}/src/components/ui/label.tsx +0 -0
- /package/src/template/{design → design-system}/src/components/ui/progress.tsx +0 -0
- /package/src/template/{design → design-system}/src/components/ui/scroll-area.tsx +0 -0
- /package/src/template/{design → design-system}/src/components/ui/select.tsx +0 -0
- /package/src/template/{design → design-system}/src/components/ui/separator.tsx +0 -0
- /package/src/template/{design → design-system}/src/components/ui/sheet.tsx +0 -0
- /package/src/template/{design → design-system}/src/components/ui/skeleton.tsx +0 -0
- /package/src/template/{design → design-system}/src/components/ui/switch.tsx +0 -0
- /package/src/template/{design → design-system}/src/components/ui/table.tsx +0 -0
- /package/src/template/{design → design-system}/src/components/ui/tabs.tsx +0 -0
- /package/src/template/{design → design-system}/src/index.css +0 -0
- /package/src/template/{design → design-system}/src/lib/data-model-loader.ts +0 -0
- /package/src/template/{design → design-system}/src/lib/design-system-loader.ts +0 -0
- /package/src/template/{design → design-system}/src/lib/product-loader.ts +0 -0
- /package/src/template/{design → design-system}/src/lib/router.tsx +0 -0
- /package/src/template/{design → design-system}/src/lib/section-loader.ts +0 -0
- /package/src/template/{design → design-system}/src/lib/shell-loader.ts +0 -0
- /package/src/template/{design → design-system}/src/lib/utils.ts +0 -0
- /package/src/template/{design → design-system}/src/main.tsx +0 -0
- /package/src/template/{design → design-system}/src/sections/.gitkeep +0 -0
- /package/src/template/{design → design-system}/src/sections/ai-orchestration-engine-oai/OrchestrationEngine.tsx +0 -0
- /package/src/template/{design → design-system}/src/sections/core-platform-shell/AppShell.tsx +0 -0
- /package/src/template/{design → design-system}/src/sections/gemini-live-integration/GeminiIntegration.tsx +0 -0
- /package/src/template/{design → design-system}/src/sections/interactive-2d-canvas/WhiteboardCanvas.tsx +0 -0
- /package/src/template/{design → design-system}/src/sections/participation-equity-tracker/EquityTracker.tsx +0 -0
- /package/src/template/{design → design-system}/src/sections/persistent-memory-system/PersistentMemory.tsx +0 -0
- /package/src/template/{design → design-system}/src/sections/real-time-communication-layer/VideoSession.tsx +0 -0
- /package/src/template/{design → design-system}/src/sections/visual-intelligence-agents/VisualAgents.tsx +0 -0
- /package/src/template/{design → design-system}/src/types/product.ts +0 -0
- /package/src/template/{design → design-system}/src/types/section.ts +0 -0
- /package/src/template/{design → design-system}/tailwind.config.js +0 -0
- /package/src/template/{design → design-system}/tsconfig.app.json +0 -0
- /package/src/template/{design → design-system}/tsconfig.json +0 -0
- /package/src/template/{design → design-system}/tsconfig.node.json +0 -0
- /package/src/template/{design → design-system}/vite.config.ts +0 -0
package/bin/cli.js
CHANGED
|
@@ -87,16 +87,23 @@ async function init() {
|
|
|
87
87
|
const templateDir = path.resolve(__dirname, '../src/template');
|
|
88
88
|
|
|
89
89
|
// Copy Control Center
|
|
90
|
-
|
|
90
|
+
// Copy helper to exclude node_modules
|
|
91
|
+
const copyOptions = {
|
|
92
|
+
recursive: true,
|
|
93
|
+
filter: (src) => !src.includes('node_modules')
|
|
94
|
+
};
|
|
95
|
+
|
|
96
|
+
// Copy Control Center
|
|
97
|
+
fs.cpSync(path.join(templateDir, 'control-center'), path.join(root, 'control-center'), copyOptions);
|
|
91
98
|
|
|
92
99
|
// Copy Design System
|
|
93
|
-
fs.cpSync(path.join(templateDir, 'design'), path.join(root, 'design-system'),
|
|
100
|
+
fs.cpSync(path.join(templateDir, 'design-system'), path.join(root, 'design-system'), copyOptions);
|
|
94
101
|
|
|
95
102
|
// Copy Agent OS Docs
|
|
96
|
-
fs.cpSync(path.join(templateDir, 'agent-os'), path.join(root, 'agent-os'),
|
|
103
|
+
fs.cpSync(path.join(templateDir, 'agent-os'), path.join(root, 'agent-os'), copyOptions);
|
|
97
104
|
|
|
98
105
|
// Copy Agent OS UI Package (for local workspace support)
|
|
99
|
-
fs.cpSync(path.join(templateDir, 'agent-os-ui'), path.join(root, 'agent-os-ui'),
|
|
106
|
+
fs.cpSync(path.join(templateDir, 'agent-os-ui'), path.join(root, 'agent-os-ui'), copyOptions);
|
|
100
107
|
|
|
101
108
|
// 3. Configure Workspace
|
|
102
109
|
console.log(cyan('\n3. Configuring Workspace...'));
|
|
@@ -112,7 +119,7 @@ async function init() {
|
|
|
112
119
|
|
|
113
120
|
appPkg.dependencies = {
|
|
114
121
|
...appPkg.dependencies,
|
|
115
|
-
"@
|
|
122
|
+
"@theproductguy/agent-os-ui": "*", // Use workspace version
|
|
116
123
|
"lucide-react": "^0.469.0",
|
|
117
124
|
"clsx": "^2.1.0",
|
|
118
125
|
"tailwind-merge": "^2.2.0",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@theproductguy/create-mission-control",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.4",
|
|
4
4
|
"description": "Scaffolding tool for Agent OS applications",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -41,4 +41,4 @@
|
|
|
41
41
|
"typescript": "^5.3.3",
|
|
42
42
|
"vite": "^5.0.10"
|
|
43
43
|
}
|
|
44
|
-
}
|
|
44
|
+
}
|
|
@@ -19,6 +19,30 @@ Verify the minimum requirements exist:
|
|
|
19
19
|
|
|
20
20
|
If required files are missing, stop and ask the user to complete them first.
|
|
21
21
|
|
|
22
|
+
## Step 1.5: Impeccable Quality Check (Pre-Export)
|
|
23
|
+
|
|
24
|
+
Before exporting, run a quick quality assessment:
|
|
25
|
+
|
|
26
|
+
**Check for QA Reports:**
|
|
27
|
+
1. Look for `design-system/QA/audit-report.md` — Has a full audit been run?
|
|
28
|
+
2. Look for `design-system/QA/tokens-audit.md` — Were design tokens audited?
|
|
29
|
+
3. Look for `design-system/QA/shell-audit.md` — Was the shell audited?
|
|
30
|
+
|
|
31
|
+
**If no audit reports exist:**
|
|
32
|
+
"⚠️ **Impeccable Warning**: No quality audits found. I recommend running `/audit` before exporting to ensure your design meets quality standards and avoids 'AI Slop'.
|
|
33
|
+
|
|
34
|
+
Would you like me to:
|
|
35
|
+
1. Run `/audit` now (recommended)
|
|
36
|
+
2. Proceed with export anyway"
|
|
37
|
+
|
|
38
|
+
**If audits exist but have failures:**
|
|
39
|
+
"⚠️ **Impeccable Warning**: Previous audit found issues that may not have been addressed. Consider running the suggested fix commands (`/normalize`, `/harden`, etc.) before exporting.
|
|
40
|
+
|
|
41
|
+
Proceed with export?"
|
|
42
|
+
|
|
43
|
+
**If audits pass or user confirms:**
|
|
44
|
+
Continue to Step 2.
|
|
45
|
+
|
|
22
46
|
## Step 2: Create Export Directory Structure
|
|
23
47
|
|
|
24
48
|
Create the `product-plan/` directory in the project root with this structure:
|
|
@@ -167,7 +191,8 @@ Use Test-Driven Development (TDD) based on `@product-plan/sections/SECTION_ID/te
|
|
|
167
191
|
## Step 9: Zip and Handoff
|
|
168
192
|
|
|
169
193
|
1. Zip `product-plan/` into `product-plan.zip`.
|
|
170
|
-
2.
|
|
194
|
+
2. Copy `product-plan.zip` to `design-system/product-plan.zip` (so Design OS can detect it).
|
|
195
|
+
3. Sync key files to `app/agent-os/product/` (Overview, Roadmap, Data Model, Design System) to update the status in the main app dashboard.
|
|
171
196
|
|
|
172
197
|
## Final Output
|
|
173
198
|
|
|
@@ -64,4 +64,13 @@ Create a draft data model file:
|
|
|
64
64
|
### Step 3: Verification
|
|
65
65
|
- Check that `design-system/product/product-overview.md` exists.
|
|
66
66
|
- Check that `design-system/product/product-roadmap.md` exists.
|
|
67
|
-
- Output a confirmation message:
|
|
67
|
+
- Output a confirmation message:
|
|
68
|
+
|
|
69
|
+
"Design OS initialized! You can now open http://localhost:5400 to begin designing.
|
|
70
|
+
|
|
71
|
+
**Recommended Next Steps:**
|
|
72
|
+
1. Run `/teach-impeccable` — One-time setup to establish design context for this project.
|
|
73
|
+
2. Run `/design-tokens` — Define your colors and typography.
|
|
74
|
+
3. Run `/design-shell` — Design your navigation and layout.
|
|
75
|
+
|
|
76
|
+
The Impeccable command system will guide you toward distinctive, AI-slop-free designs."
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# @
|
|
1
|
+
# @theproductguy/agent-os-ui
|
|
2
2
|
|
|
3
3
|
The official UI capability for the **Agent OS** workflow.
|
|
4
4
|
Use this library to build the control interface that guides you through the Antigravity development process (Product -> Design -> Build -> Verify).
|
|
@@ -6,19 +6,19 @@ Use this library to build the control interface that guides you through the Anti
|
|
|
6
6
|
## Installation
|
|
7
7
|
|
|
8
8
|
```bash
|
|
9
|
-
npm install @
|
|
9
|
+
npm install @theproductguy/agent-os-ui
|
|
10
10
|
```
|
|
11
11
|
|
|
12
12
|
## Setup
|
|
13
13
|
|
|
14
14
|
1. Import the styles:
|
|
15
15
|
```ts
|
|
16
|
-
import '@
|
|
16
|
+
import '@theproductguy/agent-os-ui/style.css';
|
|
17
17
|
```
|
|
18
18
|
|
|
19
19
|
2. Build your Control Dashboard:
|
|
20
20
|
```tsx
|
|
21
|
-
import { AgentShell, GuidanceCard } from '@
|
|
21
|
+
import { AgentShell, GuidanceCard } from '@theproductguy/agent-os-ui';
|
|
22
22
|
|
|
23
23
|
export function ControlCenter() {
|
|
24
24
|
return (
|
|
@@ -48,7 +48,7 @@ export function ControlCenter() {
|
|
|
48
48
|
## Example Layout
|
|
49
49
|
|
|
50
50
|
```tsx
|
|
51
|
-
import { AgentShell, AgentSidebar, ThemeToggle } from '@
|
|
51
|
+
import { AgentShell, AgentSidebar, ThemeToggle } from '@theproductguy/agent-os-ui';
|
|
52
52
|
import { Home, Layers } from 'lucide-react';
|
|
53
53
|
|
|
54
54
|
export default function App() {
|
|
@@ -125,9 +125,11 @@ app.get('/api/status', async (req, res) => {
|
|
|
125
125
|
|
|
126
126
|
// Check for Design OS export and steps
|
|
127
127
|
const designDir = path.join(PROJECT_ROOT, 'design-system');
|
|
128
|
-
|
|
129
|
-
//
|
|
130
|
-
|
|
128
|
+
|
|
129
|
+
// QA Check
|
|
130
|
+
const qaDir = path.join(designDir, 'QA');
|
|
131
|
+
const auditReport = path.join(qaDir, 'audit-report.md');
|
|
132
|
+
const polishReport = path.join(qaDir, 'polish-report.md');
|
|
131
133
|
|
|
132
134
|
const hasDesignExport = fs.existsSync(path.join(PROJECT_ROOT, 'product-plan'));
|
|
133
135
|
const hasDesignInit = fs.existsSync(path.join(designDir, 'product/product-overview.md'));
|
|
@@ -146,6 +148,10 @@ app.get('/api/status', async (req, res) => {
|
|
|
146
148
|
exportPrompts: {
|
|
147
149
|
oneShot: fs.existsSync(path.join(PROJECT_ROOT, 'product-plan/prompts/one-shot-prompt.md')),
|
|
148
150
|
section: fs.existsSync(path.join(PROJECT_ROOT, 'product-plan/prompts/section-prompt.md'))
|
|
151
|
+
},
|
|
152
|
+
qa: {
|
|
153
|
+
audit: fs.existsSync(auditReport),
|
|
154
|
+
polish: fs.existsSync(polishReport)
|
|
149
155
|
}
|
|
150
156
|
},
|
|
151
157
|
implementation: {
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { useEffect, useState } from 'react';
|
|
2
2
|
import axios from 'axios';
|
|
3
|
-
import { Layout,
|
|
3
|
+
import { Layout, Layers, FileText, Code, CheckSquare, RefreshCw, ArrowRight, X, Plus, Trash2, WalletCards, LayoutDashboard, Copy, Package } from 'lucide-react';
|
|
4
4
|
import { useToast } from './components/ui/ToastContext';
|
|
5
|
-
import { ThemeToggle } from '@
|
|
6
|
-
import '@
|
|
5
|
+
import { ThemeToggle } from '@theproductguy/agent-os-ui';
|
|
6
|
+
import '@theproductguy/agent-os-ui/style.css';
|
|
7
7
|
import ReactMarkdown from 'react-markdown';
|
|
8
8
|
import remarkGfm from 'remark-gfm';
|
|
9
9
|
import remarkBreaks from 'remark-breaks';
|
|
@@ -39,6 +39,10 @@ interface ProjectState {
|
|
|
39
39
|
oneShot: boolean;
|
|
40
40
|
section: boolean;
|
|
41
41
|
};
|
|
42
|
+
qa?: {
|
|
43
|
+
audit: boolean;
|
|
44
|
+
polish: boolean;
|
|
45
|
+
};
|
|
42
46
|
};
|
|
43
47
|
implementation: {
|
|
44
48
|
scaffolded: boolean;
|
|
@@ -265,7 +269,7 @@ function App() {
|
|
|
265
269
|
fetch('/runtime-config.json')
|
|
266
270
|
.then(res => res.json())
|
|
267
271
|
.then(config => { setRuntimeConfig(config); })
|
|
268
|
-
.catch(
|
|
272
|
+
.catch(() => {
|
|
269
273
|
setRuntimeConfig({
|
|
270
274
|
api: 'http://localhost:5403',
|
|
271
275
|
app: 'http://localhost:5402',
|
|
@@ -416,7 +420,7 @@ function App() {
|
|
|
416
420
|
<textarea
|
|
417
421
|
value={editContent}
|
|
418
422
|
onChange={(e) => setEditContent(e.target.value)}
|
|
419
|
-
className="w-full h-full min-h-[500px] p-4 font-mono text-sm bg-secondary
|
|
423
|
+
className="w-full h-full min-h-[500px] p-4 font-mono text-sm bg-secondary text-secondary-foreground border border-border rounded-lg resize-none focus:outline-none focus:ring-2 focus:ring-primary/20"
|
|
420
424
|
/>
|
|
421
425
|
) : (
|
|
422
426
|
<article className="prose dark:prose-invert max-w-none prose-headings:font-serif prose-headings:font-semibold prose-a:text-primary prose-code:text-primary prose-pre:bg-secondary/50 prose-pre:border prose-pre:border-border prose-p:leading-relaxed prose-p:mb-4">
|
|
@@ -443,7 +447,7 @@ function App() {
|
|
|
443
447
|
<input
|
|
444
448
|
autoFocus
|
|
445
449
|
type="text"
|
|
446
|
-
className="w-full px-3 py-2 rounded-md border border-input bg-
|
|
450
|
+
className="w-full px-3 py-2 rounded-md border border-input bg-secondary text-secondary-foreground text-sm ring-offset-background placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring"
|
|
447
451
|
placeholder="e.g. user-profile"
|
|
448
452
|
value={newSpecName}
|
|
449
453
|
onChange={(e) => setNewSpecName(e.target.value)}
|
|
@@ -646,6 +650,17 @@ function App() {
|
|
|
646
650
|
</div>
|
|
647
651
|
</div>
|
|
648
652
|
|
|
653
|
+
<div className="grid grid-cols-2 gap-2">
|
|
654
|
+
<div className={`p-2 rounded-lg border text-center ${state?.design?.qa?.audit ? 'bg-emerald-50/50 border-emerald-200 text-emerald-700 dark:bg-emerald-900/20 dark:border-emerald-800 dark:text-emerald-300' : 'bg-secondary/20 border-border/50 text-muted-foreground'}`}>
|
|
655
|
+
<span className="text-xs font-medium block mb-1">Audit</span>
|
|
656
|
+
{state?.design?.qa?.audit ? <CheckSquare size={14} className="mx-auto" /> : <span className="block w-2 h-2 rounded-full bg-stone-300 mx-auto mt-1" />}
|
|
657
|
+
</div>
|
|
658
|
+
<div className={`p-2 rounded-lg border text-center ${state?.design?.qa?.polish ? 'bg-emerald-50/50 border-emerald-200 text-emerald-700 dark:bg-emerald-900/20 dark:border-emerald-800 dark:text-emerald-300' : 'bg-secondary/20 border-border/50 text-muted-foreground'}`}>
|
|
659
|
+
<span className="text-xs font-medium block mb-1">Polish</span>
|
|
660
|
+
{state?.design?.qa?.polish ? <CheckSquare size={14} className="mx-auto" /> : <span className="block w-2 h-2 rounded-full bg-stone-300 mx-auto mt-1" />}
|
|
661
|
+
</div>
|
|
662
|
+
</div>
|
|
663
|
+
|
|
649
664
|
<div className="flex items-center justify-between p-3 bg-secondary/30 rounded-lg border border-border/50">
|
|
650
665
|
<span className="text-foreground font-medium text-sm flex items-center gap-2"><ArrowRight size={16} className="text-muted-foreground" /> Export</span>
|
|
651
666
|
{state?.design?.exported ? (
|
|
@@ -658,7 +673,7 @@ function App() {
|
|
|
658
673
|
</div>
|
|
659
674
|
</div>
|
|
660
675
|
|
|
661
|
-
<div className="mt-6 flex gap-2">
|
|
676
|
+
<div className="mt-6 flex flex-col gap-2">
|
|
662
677
|
{!state?.design?.initialized && (
|
|
663
678
|
<PromptButton
|
|
664
679
|
label="Sync Data"
|
|
@@ -667,6 +682,22 @@ function App() {
|
|
|
667
682
|
primary
|
|
668
683
|
/>
|
|
669
684
|
)}
|
|
685
|
+
{state?.design?.initialized && !state?.design?.exported && (
|
|
686
|
+
<div className="flex gap-2">
|
|
687
|
+
<PromptButton
|
|
688
|
+
label="Run Audit"
|
|
689
|
+
prompt="Antigravity, run an audit on the design system. Read 'design-system/.gemini/commands/impeccable/audit.md'."
|
|
690
|
+
onClick={copyToClipboard}
|
|
691
|
+
small
|
|
692
|
+
/>
|
|
693
|
+
<PromptButton
|
|
694
|
+
label="Run Polish"
|
|
695
|
+
prompt="Antigravity, run a polish pass. Read 'design-system/.gemini/commands/impeccable/polish.md'."
|
|
696
|
+
onClick={copyToClipboard}
|
|
697
|
+
small
|
|
698
|
+
/>
|
|
699
|
+
</div>
|
|
700
|
+
)}
|
|
670
701
|
</div>
|
|
671
702
|
</section>
|
|
672
703
|
|
|
@@ -691,14 +722,20 @@ function App() {
|
|
|
691
722
|
</div>
|
|
692
723
|
|
|
693
724
|
<div className="mt-6">
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
725
|
+
{!state?.implementation?.scaffolded ? (
|
|
726
|
+
<PromptButton
|
|
727
|
+
label="Scaffold App"
|
|
728
|
+
prompt="Antigravity, scaffold the implementation. Read 'agent-os/commands/scaffold-implementation/scaffold-implementation.md'."
|
|
729
|
+
onClick={copyToClipboard}
|
|
730
|
+
/>
|
|
731
|
+
) : (
|
|
732
|
+
<div className="p-3 bg-secondary/30 rounded-lg border border-border/50 text-sm text-muted-foreground text-center italic mb-4">
|
|
733
|
+
App scaffolded. Ready for implementation.
|
|
734
|
+
</div>
|
|
735
|
+
)}
|
|
699
736
|
|
|
700
737
|
{state?.implementation?.scaffolded && state?.design?.exportPrompts?.oneShot && (
|
|
701
|
-
<div className="
|
|
738
|
+
<div className="pt-3 border-t border-border/50">
|
|
702
739
|
<p className="text-xs text-muted-foreground mb-2 font-medium">Implementation Options:</p>
|
|
703
740
|
<div className="space-y-2">
|
|
704
741
|
<PromptButton
|
|
@@ -709,12 +746,17 @@ function App() {
|
|
|
709
746
|
primary
|
|
710
747
|
/>
|
|
711
748
|
{state?.design?.exportPrompts?.section && (
|
|
712
|
-
<
|
|
713
|
-
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
749
|
+
<div className="relative">
|
|
750
|
+
<PromptButton
|
|
751
|
+
label="Option B: Incremental (Section)"
|
|
752
|
+
prompt={`Antigravity, implement a section. Read 'product-plan/prompts/section-prompt.md'.`}
|
|
753
|
+
onClick={copyToClipboard}
|
|
754
|
+
small
|
|
755
|
+
/>
|
|
756
|
+
<p className="text-[10px] text-muted-foreground mt-1.5 text-center leading-tight">
|
|
757
|
+
Build feature-by-feature using the <strong>Feature Specs</strong> list →
|
|
758
|
+
</p>
|
|
759
|
+
</div>
|
|
718
760
|
)}
|
|
719
761
|
</div>
|
|
720
762
|
</div>
|
|
@@ -776,39 +818,56 @@ function App() {
|
|
|
776
818
|
</div>
|
|
777
819
|
))}
|
|
778
820
|
|
|
821
|
+
{/* Pending Roadmap Items */}
|
|
779
822
|
{/* Pending Roadmap Items */}
|
|
780
823
|
{state?.product?.roadmap?.items?.filter(item =>
|
|
781
824
|
!item.completed &&
|
|
782
825
|
!state?.product?.roadmap?.isBoilerplate &&
|
|
783
|
-
!state?.specs?.some(s => s.name.toLowerCase()
|
|
826
|
+
!state?.specs?.some(s => s.name.toLowerCase().includes(item.name.toLowerCase().trim().replace(/\s+/g, '-').replace(/[^a-z0-9-]/g, '')))
|
|
784
827
|
).map(item => (
|
|
785
828
|
<div key={item.name} className="border border-dashed border-border/60 p-4 rounded-lg bg-secondary/5 hover:bg-secondary/10 transition-colors">
|
|
786
|
-
<
|
|
787
|
-
<
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
829
|
+
<div className="flex justify-between items-start mb-2">
|
|
830
|
+
<h3 className="font-medium text-base flex items-center gap-2 text-muted-foreground w-full">
|
|
831
|
+
<div className="w-2 h-2 rounded-full bg-stone-300 shrink-0" />
|
|
832
|
+
<span className="truncate" title={item.name}>{item.name}</span>
|
|
833
|
+
</h3>
|
|
834
|
+
<span className="text-[10px] uppercase tracking-wider font-semibold text-muted-foreground bg-secondary px-1.5 py-0.5 rounded shrink-0 ml-2">Planned</span>
|
|
835
|
+
</div>
|
|
836
|
+
<p className="text-xs text-muted-foreground mb-4 pl-4 opacity-70">
|
|
837
|
+
Defined in Product Roadmap. Ready to spec.
|
|
838
|
+
</p>
|
|
791
839
|
<div className="pl-4">
|
|
792
840
|
<button
|
|
793
841
|
onClick={() => {
|
|
794
|
-
setNewSpecName(item.name.toLowerCase().replace(/\s+/g, '-'));
|
|
842
|
+
setNewSpecName(item.name.toLowerCase().replace(/\s+/g, '-').replace(/[^a-z0-9-]/g, ''));
|
|
795
843
|
setCreatingSpec(true);
|
|
796
844
|
}}
|
|
797
|
-
className="text-xs bg-background hover:bg-secondary border border-border px-3 py-1.5 rounded-md flex items-center gap-1.5 font-medium transition cursor-pointer"
|
|
845
|
+
className="text-xs bg-background hover:bg-secondary border border-border px-3 py-1.5 rounded-md flex items-center gap-1.5 font-medium transition cursor-pointer w-full justify-center group"
|
|
798
846
|
>
|
|
799
|
-
<Plus size={12} /> Shape Spec
|
|
847
|
+
<Plus size={12} className="group-hover:text-primary transition-colors" /> Shape Spec
|
|
800
848
|
</button>
|
|
801
849
|
</div>
|
|
802
850
|
</div>
|
|
803
851
|
))}
|
|
804
852
|
|
|
805
|
-
{
|
|
806
|
-
|
|
807
|
-
|
|
853
|
+
{/* Empty State */}
|
|
854
|
+
{(!state?.specs?.length && (!state?.product?.roadmap?.items?.length || state?.product?.roadmap?.isBoilerplate)) && (
|
|
855
|
+
<div className="border border-dashed border-border/60 p-8 rounded-lg text-center h-40 flex flex-col items-center justify-center">
|
|
856
|
+
<p className="text-muted-foreground text-sm mb-3">No specs found yet.</p>
|
|
857
|
+
<button
|
|
858
|
+
onClick={() => setCreatingSpec(true)}
|
|
859
|
+
className="text-sm px-4 py-2 bg-primary text-primary-foreground rounded-md hover:bg-primary/90 transition-colors"
|
|
860
|
+
>
|
|
861
|
+
Create your first spec
|
|
862
|
+
</button>
|
|
808
863
|
</div>
|
|
809
864
|
)}
|
|
865
|
+
|
|
866
|
+
|
|
810
867
|
</div>
|
|
811
868
|
</section>
|
|
869
|
+
|
|
870
|
+
|
|
812
871
|
</main>
|
|
813
872
|
</div>
|
|
814
873
|
</div>
|