@theproductguy/create-mission-control 1.0.17 → 1.0.26
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/package.json +2 -2
- package/src/template/agent-os/WORKFLOW.md +139 -0
- package/src/template/agent-os/commands/adapt/adapt.md +189 -0
- package/src/template/agent-os/commands/animate/animate.md +184 -0
- package/src/template/agent-os/commands/audit/audit.md +123 -0
- package/src/template/agent-os/commands/bolder/bolder.md +126 -0
- package/src/template/agent-os/commands/clarify/clarify.md +173 -0
- package/src/template/agent-os/commands/colorize/colorize.md +152 -0
- package/src/template/agent-os/commands/critique/critique.md +112 -0
- package/src/template/agent-os/commands/delight/delight.md +311 -0
- package/src/template/agent-os/commands/design-screen/design-screen.md +5 -0
- package/src/template/agent-os/commands/design-shell/design-shell.md +5 -0
- package/src/template/agent-os/commands/design-tokens/design-tokens.md +5 -0
- package/src/template/agent-os/commands/extract/extract.md +88 -0
- package/src/template/agent-os/commands/harden/harden.md +351 -0
- package/src/template/agent-os/commands/impeccable/impeccable.md +163 -0
- package/src/template/agent-os/commands/normalize/normalize.md +61 -0
- package/src/template/agent-os/commands/onboard/onboard.md +236 -0
- package/src/template/agent-os/commands/optimize/optimize.md +262 -0
- package/src/template/agent-os/commands/plan-product/3-create-roadmap.md +7 -3
- package/src/template/agent-os/commands/polish/polish.md +196 -0
- package/src/template/agent-os/commands/quieter/quieter.md +112 -0
- package/src/template/agent-os/commands/simplify/simplify.md +131 -0
- package/src/template/agent-os/commands/teach-impeccable/teach-impeccable.md +67 -0
- package/src/template/control-center/backend/index.js +1 -1
- package/src/template/control-center/frontend/src/App.tsx +91 -840
- package/src/template/control-center/frontend/src/components/DesignOSOverlay.tsx +38 -0
- package/src/template/control-center/frontend/src/components/Guidance.tsx +62 -0
- package/src/template/control-center/frontend/src/components/NextStepCard.tsx +115 -0
- package/src/template/control-center/frontend/src/components/PromptButton.tsx +43 -0
- package/src/template/control-center/frontend/src/components/StatusItem.tsx +38 -0
- package/src/template/control-center/frontend/src/components/modals/CreateSpecModal.tsx +78 -0
- package/src/template/control-center/frontend/src/components/modals/DeleteSpecModal.tsx +42 -0
- package/src/template/control-center/frontend/src/components/modals/FileEditorModal.tsx +87 -0
- package/src/template/control-center/frontend/src/components/modals/SettingsModal.tsx +46 -0
- package/src/template/control-center/frontend/src/components/ui/ToastContext.tsx +1 -1
- package/src/template/control-center/frontend/src/contexts/IdeContext.tsx +6 -0
- package/src/template/control-center/frontend/src/hooks/useFileEditor.ts +42 -0
- package/src/template/control-center/frontend/src/hooks/useProjectState.ts +45 -0
- package/src/template/control-center/frontend/src/index.css +26 -0
- package/src/template/control-center/frontend/src/types.ts +65 -0
- package/src/template/control-center/frontend/tailwind.config.js +15 -3
- package/src/template/control-center/product/design-system/QA/audit-report.md +34 -0
- package/src/template/control-center/product/mission.md +38 -0
- package/src/template/control-center/product/roadmap.md +10 -0
- package/src/template/design-system/src/lib/product-loader.ts +6 -0
- package/src/template/package-lock.json +2756 -134
- package/src/template/package.json +2 -2
- package/src/template/agent-os-ui/_package.json +0 -54
- package/src/template/agent-os-ui/package.json +0 -54
- package/src/template/control-center/frontend/src/components/ThemeToggle.tsx +0 -64
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
@import url('https://fonts.googleapis.com/css2?family=Outfit:wght@400;500;600;700&display=swap');
|
|
1
2
|
@tailwind base;
|
|
2
3
|
@tailwind components;
|
|
3
4
|
@tailwind utilities;
|
|
@@ -6,6 +7,7 @@
|
|
|
6
7
|
/*
|
|
7
8
|
Control Center Theme (Aligned with Design OS)
|
|
8
9
|
Warm Neutrals / Stone Palette
|
|
10
|
+
Font: Outfit (Modern, Premium)
|
|
9
11
|
*/
|
|
10
12
|
|
|
11
13
|
|
|
@@ -50,6 +52,18 @@
|
|
|
50
52
|
/* stone-500 */
|
|
51
53
|
--chart-1: oklch(0.532 0.157 131.589);
|
|
52
54
|
/* lime-600 */
|
|
55
|
+
--success: oklch(0.627 0.194 149.214);
|
|
56
|
+
/* emerald-500 */
|
|
57
|
+
--success-foreground: oklch(0.985 0.001 106.424);
|
|
58
|
+
/* stone-50 */
|
|
59
|
+
--warning: oklch(0.704 0.191 47.567);
|
|
60
|
+
/* amber-500 */
|
|
61
|
+
--warning-foreground: oklch(0.985 0.001 106.424);
|
|
62
|
+
/* stone-50 */
|
|
63
|
+
--info: oklch(0.612 0.203 252.339);
|
|
64
|
+
/* blue-500 */
|
|
65
|
+
--info-foreground: oklch(0.985 0.001 106.424);
|
|
66
|
+
/* stone-50 */
|
|
53
67
|
/* Sidebar */
|
|
54
68
|
--sidebar: oklch(0.985 0.001 106.424);
|
|
55
69
|
/* stone-50 */
|
|
@@ -109,6 +123,18 @@
|
|
|
109
123
|
/* stone-500 */
|
|
110
124
|
--chart-1: oklch(0.648 0.2 131.684);
|
|
111
125
|
/* lime-500 */
|
|
126
|
+
--success: oklch(0.627 0.194 149.214);
|
|
127
|
+
/* emerald-500 */
|
|
128
|
+
--success-foreground: oklch(0.216 0.006 56.043);
|
|
129
|
+
/* stone-900 */
|
|
130
|
+
--warning: oklch(0.704 0.191 47.567);
|
|
131
|
+
/* amber-500 */
|
|
132
|
+
--warning-foreground: oklch(0.216 0.006 56.043);
|
|
133
|
+
/* stone-900 */
|
|
134
|
+
--info: oklch(0.612 0.203 252.339);
|
|
135
|
+
/* blue-500 */
|
|
136
|
+
--info-foreground: oklch(0.216 0.006 56.043);
|
|
137
|
+
/* stone-900 */
|
|
112
138
|
/* Sidebar */
|
|
113
139
|
--sidebar: oklch(0.268 0.007 34.298);
|
|
114
140
|
/* stone-800 */
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
|
|
2
|
+
export interface Status {
|
|
3
|
+
exists: boolean;
|
|
4
|
+
completed: number;
|
|
5
|
+
total: number;
|
|
6
|
+
nextItem?: string | null;
|
|
7
|
+
items?: { name: string; completed: boolean }[];
|
|
8
|
+
isBoilerplate?: boolean;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export interface ProductStatus {
|
|
12
|
+
mission: Status;
|
|
13
|
+
roadmap: Status;
|
|
14
|
+
techStack: Status;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
export interface Spec {
|
|
18
|
+
name: string;
|
|
19
|
+
spec: Status;
|
|
20
|
+
tasks: Status;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export interface ProjectState {
|
|
24
|
+
product: ProductStatus;
|
|
25
|
+
design: {
|
|
26
|
+
exists: boolean;
|
|
27
|
+
initialized: boolean;
|
|
28
|
+
tokens: boolean;
|
|
29
|
+
shell: boolean;
|
|
30
|
+
exported: boolean;
|
|
31
|
+
exportPrompts?: {
|
|
32
|
+
oneShot: boolean;
|
|
33
|
+
section: boolean;
|
|
34
|
+
};
|
|
35
|
+
qa?: {
|
|
36
|
+
audit: boolean;
|
|
37
|
+
polish: boolean;
|
|
38
|
+
};
|
|
39
|
+
};
|
|
40
|
+
implementation: {
|
|
41
|
+
scaffolded: boolean;
|
|
42
|
+
tests?: {
|
|
43
|
+
count: number;
|
|
44
|
+
hasTests: boolean;
|
|
45
|
+
};
|
|
46
|
+
coverage?: number | null;
|
|
47
|
+
specs?: {
|
|
48
|
+
total: number;
|
|
49
|
+
completed: number;
|
|
50
|
+
};
|
|
51
|
+
git?: {
|
|
52
|
+
initialized: boolean;
|
|
53
|
+
branch: string | null;
|
|
54
|
+
uncommitted: number;
|
|
55
|
+
lastCommit: string | null;
|
|
56
|
+
};
|
|
57
|
+
};
|
|
58
|
+
specs: Spec[];
|
|
59
|
+
services?: {
|
|
60
|
+
api: boolean;
|
|
61
|
+
design: boolean;
|
|
62
|
+
app: boolean;
|
|
63
|
+
};
|
|
64
|
+
projectRoot: string;
|
|
65
|
+
}
|
|
@@ -9,9 +9,9 @@ export default {
|
|
|
9
9
|
theme: {
|
|
10
10
|
extend: {
|
|
11
11
|
fontFamily: {
|
|
12
|
-
display: ["
|
|
13
|
-
body: ["
|
|
14
|
-
sans: ["
|
|
12
|
+
display: ["Outfit", "system-ui", "sans-serif"],
|
|
13
|
+
body: ["Outfit", "system-ui", "sans-serif"],
|
|
14
|
+
sans: ["Outfit", "system-ui", "sans-serif"],
|
|
15
15
|
mono: ["IBM Plex Mono", "ui-monospace", "monospace"]
|
|
16
16
|
},
|
|
17
17
|
borderRadius: {
|
|
@@ -51,6 +51,18 @@ export default {
|
|
|
51
51
|
DEFAULT: 'var(--destructive)',
|
|
52
52
|
foreground: 'var(--destructive-foreground)'
|
|
53
53
|
},
|
|
54
|
+
success: {
|
|
55
|
+
DEFAULT: 'var(--success)',
|
|
56
|
+
foreground: 'var(--success-foreground)'
|
|
57
|
+
},
|
|
58
|
+
warning: {
|
|
59
|
+
DEFAULT: 'var(--warning)',
|
|
60
|
+
foreground: 'var(--warning-foreground)'
|
|
61
|
+
},
|
|
62
|
+
info: {
|
|
63
|
+
DEFAULT: 'var(--info)',
|
|
64
|
+
foreground: 'var(--info-foreground)'
|
|
65
|
+
},
|
|
54
66
|
border: 'var(--border)',
|
|
55
67
|
input: 'var(--input)',
|
|
56
68
|
ring: 'var(--ring)',
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Audit Report: Action Centre
|
|
2
|
+
|
|
3
|
+
## Anti-Patterns Verdict
|
|
4
|
+
**FAIL**. The codebase exhibits "Monolithic Spaghetti" and "Generic Utility" anti-patterns. While it functionality works, the structure is brittle and the aesthetic is generic "Dashboard UI".
|
|
5
|
+
|
|
6
|
+
## Executive Summary
|
|
7
|
+
- **Total Issues**: 4 key issues
|
|
8
|
+
- **Critical**: 1 (Monolithic Architecture)
|
|
9
|
+
- **High**: 2 (Mixed Tokens, Inline Components)
|
|
10
|
+
- **Overall Score**: C-
|
|
11
|
+
- **Next Steps**: Refactor `App.tsx`, Normalize Tokens.
|
|
12
|
+
|
|
13
|
+
## Detailed Findings
|
|
14
|
+
|
|
15
|
+
### Critical Issues
|
|
16
|
+
1. **Monolithic `App.tsx`**: The file is 1000+ lines, containing state (`ProjectState`), API logic (`fetchStatus`), and UI components (`Guidance`, `StatusItem`). This violates clean code principles and makes "polishing" impossible.
|
|
17
|
+
- *Recommendation*: Extract `StatusItem`, `Guidance`, `NextStepCard` to `components/`. Move state to `hooks/useProjectState`.
|
|
18
|
+
|
|
19
|
+
### High Severity
|
|
20
|
+
2. **Hardcoded Colors**: `App.tsx` contains literals like `bg-emerald-50`, `text-red-500`.
|
|
21
|
+
- *Impact*: Inconsistent theming. If we change the "Success" token, these won't update.
|
|
22
|
+
- *Fix*: Use `text-destructive`, `bg-success-subtle` (need to define semantic tokens).
|
|
23
|
+
|
|
24
|
+
3. **Inline Components**: `StatusItem` and `PromptButton` are defined inside the same file as `App`.
|
|
25
|
+
- *Impact*: Low reusability, hard to read.
|
|
26
|
+
|
|
27
|
+
### Medium Severity
|
|
28
|
+
4. **Generic Typography**: `App.tsx` relies on default `font-sans`.
|
|
29
|
+
- *Fix*: Adopt a distinct font stack in `index.css` (e.g., `Outfit` or `Space Grotesk` for headers) to match "Impeccable" standards.
|
|
30
|
+
|
|
31
|
+
## Recommendations
|
|
32
|
+
1. **Refactor**: Break `App.tsx` into `components/` and `hooks/`.
|
|
33
|
+
2. **Normalize**: Replace all `red-500`, `emerald-50` with semantic variables (`--destructive`, `--success`).
|
|
34
|
+
3. **Polish**: Introduce micro-interactions for the "Action" buttons.
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# Product Mission
|
|
2
|
+
|
|
3
|
+
## Pitch
|
|
4
|
+
**Action Centre** is the central nervous system for Agent OS that helps **Developers** manage the complexity of autonomous development by providing **unified orchestration of projects, agents, and design systems**.
|
|
5
|
+
|
|
6
|
+
## Users
|
|
7
|
+
|
|
8
|
+
### Primary Customers
|
|
9
|
+
- **The Creator**: A developer building multiple products simultaneously using Agent OS.
|
|
10
|
+
|
|
11
|
+
### User Personas
|
|
12
|
+
**The Product Guy/Gal** (25-45)
|
|
13
|
+
- **Role:** Full-stack Developer / Entrepreneur
|
|
14
|
+
- **Context:** Juggling strategy, design, and code across multiple potential products.
|
|
15
|
+
- **Pain Points:** Context switching, losing track of agent states, fragmented workflows.
|
|
16
|
+
- **Goals:** High-velocity shipping, widely "Impeccable" design quality, seamless agent collaboration.
|
|
17
|
+
|
|
18
|
+
## The Problem
|
|
19
|
+
|
|
20
|
+
### Fragmentation of Control
|
|
21
|
+
Managing autonomous agents, design systems (`design-os`), and product strategy (`mission.md`) via scattered CLI commands is inefficient and opaque. Users lack a single "pane of glass" to see the health and state of their Agent OS instance.
|
|
22
|
+
|
|
23
|
+
**Our Solution:** A unified web-based **Action Centre** (running on port 5401) that visualizes the entire ecosystem, allowing direct manipulation of agent capabilities and design standards.
|
|
24
|
+
|
|
25
|
+
## Differentiators
|
|
26
|
+
|
|
27
|
+
### "Impeccable" Native
|
|
28
|
+
Unlike generic admin dashboards, Action Centre is built with and for the **Impeccable Design System**, embodying the very aesthetics and quality standards it enforces. It is not just a tool; it is a reference implementation.
|
|
29
|
+
|
|
30
|
+
## Key Features
|
|
31
|
+
|
|
32
|
+
### Core Features
|
|
33
|
+
- **Project Dashboard:** Visual overview of all active projects, their "Mission" status, and current phase.
|
|
34
|
+
- **Agent Orchestration:** Interface to view, install, and configure Agent Capabilities (Skills, Tools).
|
|
35
|
+
- **Design System Bridge:** Direct access to Design OS status, Token management, and Audit reports.
|
|
36
|
+
|
|
37
|
+
### Advanced Features
|
|
38
|
+
- **Workflow Visualizer:** Real-time view of the "Master Workflow" progress (Strategy -> Design -> Build).
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
# Product Roadmap
|
|
2
|
+
|
|
3
|
+
1. [ ] **Refactor Monolithic App** — Extract `Guidance`, `StatusItem`, and `PromptButton` into dedicated components and move logic to `useProjectState`; ensure `App.tsx` is < 200 lines. `[M]`
|
|
4
|
+
2. [ ] **Normalize Design Tokens** — Replace all hardcoded Tailwind colors (e.g., `emerald-50`, `red-500`) with semantic CSS variables (`--success`, `--destructive`) in `index.css` and components. `[S]`
|
|
5
|
+
3. [ ] **Enhance Typography** — Introduce a distinct font stack (e.g., Outfit/Inter pair) and update `index.css` to remove generic "system-ui" failover. `[S]`
|
|
6
|
+
4. [ ] **Add "Impeccable" Polish** — Implementation of micro-interactions for buttons (hover lift, active scale) and list items (staggered entrance). `[S]`
|
|
7
|
+
|
|
8
|
+
> Notes
|
|
9
|
+
> - Priority is refactoring to enable easier design iteration.
|
|
10
|
+
> - "Polish" phase depends on "Normalize" being complete.
|
|
@@ -52,6 +52,9 @@ function slugify(str: string): string {
|
|
|
52
52
|
export function parseProductOverview(md: string): ProductOverview | null {
|
|
53
53
|
if (!md || !md.trim()) return null
|
|
54
54
|
|
|
55
|
+
// Normalize line endings for Windows compatibility
|
|
56
|
+
md = md.replace(/\r\n/g, '\n')
|
|
57
|
+
|
|
55
58
|
try {
|
|
56
59
|
// Extract product name from first # heading
|
|
57
60
|
const nameMatch = md.match(/^#\s+(.+)$/m)
|
|
@@ -117,6 +120,9 @@ export function parseProductOverview(md: string): ProductOverview | null {
|
|
|
117
120
|
export function parseProductRoadmap(md: string): ProductRoadmap | null {
|
|
118
121
|
if (!md || !md.trim()) return null
|
|
119
122
|
|
|
123
|
+
// Normalize line endings for Windows compatibility
|
|
124
|
+
md = md.replace(/\r\n/g, '\n')
|
|
125
|
+
|
|
120
126
|
try {
|
|
121
127
|
const sections: Section[] = []
|
|
122
128
|
|