opencastle 0.33.10 → 0.34.0

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.
Files changed (111) hide show
  1. package/dist/cli/init.d.ts.map +1 -1
  2. package/dist/cli/init.js +39 -17
  3. package/dist/cli/init.js.map +1 -1
  4. package/dist/cli/stack-config.d.ts.map +1 -1
  5. package/dist/cli/stack-config.js +5 -0
  6. package/dist/cli/stack-config.js.map +1 -1
  7. package/dist/cli/types.d.ts +1 -1
  8. package/dist/cli/types.d.ts.map +1 -1
  9. package/dist/orchestrator/plugins/cloudflare/config.d.ts +3 -0
  10. package/dist/orchestrator/plugins/cloudflare/config.d.ts.map +1 -0
  11. package/dist/orchestrator/plugins/cloudflare/config.js +23 -0
  12. package/dist/orchestrator/plugins/cloudflare/config.js.map +1 -0
  13. package/dist/orchestrator/plugins/coolify/config.d.ts +3 -0
  14. package/dist/orchestrator/plugins/coolify/config.d.ts.map +1 -0
  15. package/dist/orchestrator/plugins/coolify/config.js +28 -0
  16. package/dist/orchestrator/plugins/coolify/config.js.map +1 -0
  17. package/dist/orchestrator/plugins/drizzle/config.d.ts +3 -0
  18. package/dist/orchestrator/plugins/drizzle/config.d.ts.map +1 -0
  19. package/dist/orchestrator/plugins/drizzle/config.js +15 -0
  20. package/dist/orchestrator/plugins/drizzle/config.js.map +1 -0
  21. package/dist/orchestrator/plugins/expo/config.d.ts +3 -0
  22. package/dist/orchestrator/plugins/expo/config.d.ts.map +1 -0
  23. package/dist/orchestrator/plugins/expo/config.js +23 -0
  24. package/dist/orchestrator/plugins/expo/config.js.map +1 -0
  25. package/dist/orchestrator/plugins/index.d.ts.map +1 -1
  26. package/dist/orchestrator/plugins/index.js +12 -0
  27. package/dist/orchestrator/plugins/index.js.map +1 -1
  28. package/dist/orchestrator/plugins/sentry/config.d.ts +3 -0
  29. package/dist/orchestrator/plugins/sentry/config.d.ts.map +1 -0
  30. package/dist/orchestrator/plugins/sentry/config.js +28 -0
  31. package/dist/orchestrator/plugins/sentry/config.js.map +1 -0
  32. package/dist/orchestrator/plugins/stripe/config.d.ts +3 -0
  33. package/dist/orchestrator/plugins/stripe/config.d.ts.map +1 -0
  34. package/dist/orchestrator/plugins/stripe/config.js +42 -0
  35. package/dist/orchestrator/plugins/stripe/config.js.map +1 -0
  36. package/dist/orchestrator/plugins/types.d.ts +1 -1
  37. package/dist/orchestrator/plugins/types.d.ts.map +1 -1
  38. package/package.json +1 -1
  39. package/src/cli/init.ts +43 -22
  40. package/src/cli/stack-config.ts +5 -0
  41. package/src/cli/types.ts +1 -1
  42. package/src/dashboard/dist/data/convoys/demo-api-v2.json +3 -3
  43. package/src/dashboard/dist/data/convoys/demo-auth-revamp.json +10 -10
  44. package/src/dashboard/dist/data/convoys/demo-dashboard-ui.json +6 -6
  45. package/src/dashboard/dist/data/convoys/demo-data-pipeline.json +3 -3
  46. package/src/dashboard/dist/data/convoys/demo-deploy-ci.json +1 -1
  47. package/src/dashboard/dist/data/convoys/demo-docs-update.json +3 -3
  48. package/src/dashboard/dist/data/convoys/demo-perf-opt.json +4 -4
  49. package/src/dashboard/node_modules/.vite/deps/_metadata.json +6 -6
  50. package/src/dashboard/public/data/convoys/demo-api-v2.json +3 -3
  51. package/src/dashboard/public/data/convoys/demo-auth-revamp.json +10 -10
  52. package/src/dashboard/public/data/convoys/demo-dashboard-ui.json +6 -6
  53. package/src/dashboard/public/data/convoys/demo-data-pipeline.json +3 -3
  54. package/src/dashboard/public/data/convoys/demo-deploy-ci.json +1 -1
  55. package/src/dashboard/public/data/convoys/demo-docs-update.json +3 -3
  56. package/src/dashboard/public/data/convoys/demo-perf-opt.json +4 -4
  57. package/src/orchestrator/customizations/agents/skill-matrix.json +24 -4
  58. package/src/orchestrator/customizations/agents/skill-matrix.md +5 -0
  59. package/src/orchestrator/plugins/cloudflare/SKILL.md +111 -0
  60. package/src/orchestrator/plugins/cloudflare/config.ts +24 -0
  61. package/src/orchestrator/plugins/cloudflare/references/deployment.md +147 -0
  62. package/src/orchestrator/plugins/cloudflare/references/storage.md +118 -0
  63. package/src/orchestrator/plugins/cloudflare/references/workers.md +135 -0
  64. package/src/orchestrator/plugins/convex/SKILL.md +62 -20
  65. package/src/orchestrator/plugins/convex/references/auth-auth0.md +116 -0
  66. package/src/orchestrator/plugins/convex/references/auth-clerk.md +113 -0
  67. package/src/orchestrator/plugins/convex/references/auth-convex-auth.md +143 -0
  68. package/src/orchestrator/plugins/convex/references/auth-setup.md +87 -0
  69. package/src/orchestrator/plugins/convex/references/auth-workos.md +114 -0
  70. package/src/orchestrator/plugins/convex/references/components-advanced.md +134 -0
  71. package/src/orchestrator/plugins/convex/references/components.md +171 -0
  72. package/src/orchestrator/plugins/convex/references/function-budget.md +232 -0
  73. package/src/orchestrator/plugins/convex/references/hot-path-rules.md +371 -0
  74. package/src/orchestrator/plugins/convex/references/migrations-component.md +170 -0
  75. package/src/orchestrator/plugins/convex/references/migrations.md +259 -0
  76. package/src/orchestrator/plugins/convex/references/occ-conflicts.md +126 -0
  77. package/src/orchestrator/plugins/convex/references/performance-audit.md +80 -0
  78. package/src/orchestrator/plugins/convex/references/quickstart.md +176 -0
  79. package/src/orchestrator/plugins/convex/references/subscription-cost.md +252 -0
  80. package/src/orchestrator/plugins/coolify/SKILL.md +134 -0
  81. package/src/orchestrator/plugins/coolify/config.ts +29 -0
  82. package/src/orchestrator/plugins/coolify/references/applications.md +65 -0
  83. package/src/orchestrator/plugins/coolify/references/ci-cd-webhooks.md +73 -0
  84. package/src/orchestrator/plugins/coolify/references/databases-services.md +57 -0
  85. package/src/orchestrator/plugins/coolify/references/docker-compose.md +121 -0
  86. package/src/orchestrator/plugins/coolify/references/infrastructure.md +77 -0
  87. package/src/orchestrator/plugins/drizzle/SKILL.md +123 -0
  88. package/src/orchestrator/plugins/drizzle/config.ts +16 -0
  89. package/src/orchestrator/plugins/drizzle/references/migrations.md +112 -0
  90. package/src/orchestrator/plugins/drizzle/references/query-patterns.md +127 -0
  91. package/src/orchestrator/plugins/drizzle/references/schema-patterns.md +105 -0
  92. package/src/orchestrator/plugins/expo/SKILL.md +114 -0
  93. package/src/orchestrator/plugins/expo/config.ts +24 -0
  94. package/src/orchestrator/plugins/expo/references/eas-build.md +73 -0
  95. package/src/orchestrator/plugins/expo/references/native-modules.md +71 -0
  96. package/src/orchestrator/plugins/expo/references/routing.md +83 -0
  97. package/src/orchestrator/plugins/index.ts +12 -0
  98. package/src/orchestrator/plugins/sentry/SKILL.md +94 -0
  99. package/src/orchestrator/plugins/sentry/config.ts +29 -0
  100. package/src/orchestrator/plugins/sentry/references/error-patterns.md +112 -0
  101. package/src/orchestrator/plugins/sentry/references/performance.md +66 -0
  102. package/src/orchestrator/plugins/sentry/references/sdk-setup.md +108 -0
  103. package/src/orchestrator/plugins/stripe/SKILL.md +138 -0
  104. package/src/orchestrator/plugins/stripe/config.ts +43 -0
  105. package/src/orchestrator/plugins/stripe/references/api-patterns.md +57 -0
  106. package/src/orchestrator/plugins/stripe/references/projects-setup.md +30 -0
  107. package/src/orchestrator/plugins/stripe/references/upgrade-guide.md +105 -0
  108. package/src/orchestrator/plugins/types.ts +1 -1
  109. package/src/orchestrator/skills/backbone-scaffolding/EXAMPLES.md +1 -1
  110. package/src/orchestrator/skills/backbone-scaffolding/SKILL.md +32 -16
  111. package/src/orchestrator/plugins/convex/REFERENCE.md +0 -9
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "opencastle",
3
- "version": "0.33.10",
3
+ "version": "0.34.0",
4
4
  "type": "module",
5
5
  "description": "Multi-agent orchestration framework for AI coding assistants",
6
6
  "bin": {
package/src/cli/init.ts CHANGED
@@ -6,7 +6,8 @@ import { readManifest, writeManifest, createManifest } from './manifest.js'
6
6
  import { removeDirIfExists, copyDir, getOrchestratorRoot } from './copy.js'
7
7
  import { updateGitignore } from './gitignore.js'
8
8
  import { getRequiredMcpEnvVars, getCustomizationsTransform } from './stack-config.js'
9
- import { TECH_PLUGINS, TEAM_PLUGINS } from '../orchestrator/plugins/index.js'
9
+ import { getPluginsBySubCategory } from '../orchestrator/plugins/index.js'
10
+ import type { PluginConfig } from '../orchestrator/plugins/types.js'
10
11
  import { detectRepoInfo, mergeStackIntoRepoInfo, formatRepoInfo, buildDetectedToolsSet, detectCurrentIde } from './detect.js'
11
12
  import { IDE_ADAPTERS } from './adapters/index.js'
12
13
  import { IDE_LABELS } from './types.js'
@@ -116,30 +117,50 @@ export default async function init({ pkgRoot, args }: CliContext): Promise<void>
116
117
  ])
117
118
  const ides = [selectedIde]
118
119
 
119
- // ── Tech Tools (multiselect, 0-N) ──────────────────────────────
120
+ // ── Stack (category-by-category) ─────────────────────────────
120
121
  // Pre-select tools already detected in the repo
121
122
  const detectedTools = buildDetectedToolsSet(repoInfo)
122
123
 
123
- console.log(` ${c.bold('── Tech Tools ────────────────────────────────')}`)
124
- const techTools = await multiselect('Which tools does your project use?',
125
- TECH_PLUGINS.map((p) => ({
126
- label: p.label,
127
- hint: p.hint,
128
- value: p.id,
129
- ...((p.preselected || detectedTools.has(p.id)) && { selected: true }),
130
- }))
131
- )
132
-
133
- // ── Team Tools (multiselect, 0-N) ──────────────────────────────
134
- console.log(` ${c.bold('── Team Tools ────────────────────────────────')}`)
135
- const teamTools = await multiselect('Which team tools do you use?',
136
- TEAM_PLUGINS.map((p) => ({
137
- label: p.label,
138
- hint: p.hint,
139
- value: p.id,
140
- ...(p.preselected && { selected: true }),
141
- }))
142
- )
124
+ console.log(` ${c.bold('── Stack ─────────────────────────────────────')}`)
125
+
126
+ const categorySteps: Array<{ title: string; subCategories: string[]; target: 'tech' | 'team' }> = [
127
+ { title: 'Frameworks', subCategories: ['framework'], target: 'tech' },
128
+ { title: 'Databases', subCategories: ['database'], target: 'tech' },
129
+ { title: 'CMS', subCategories: ['cms'], target: 'tech' },
130
+ { title: 'Deployment', subCategories: ['deployment'], target: 'tech' },
131
+ { title: 'Testing', subCategories: ['testing', 'e2e-testing'], target: 'tech' },
132
+ { title: 'Build Tools', subCategories: ['codebase-tool'], target: 'tech' },
133
+ { title: 'More Tools', subCategories: ['design', 'email', 'payments', 'observability', 'knowledge-management'], target: 'tech' },
134
+ ]
135
+
136
+ const teamSteps: Array<{ title: string; subCategories: string[]; target: 'team' }> = [
137
+ { title: 'Project Management', subCategories: ['task-management'], target: 'team' },
138
+ { title: 'Notifications', subCategories: ['notifications'], target: 'team' },
139
+ ]
140
+
141
+ const techTools: string[] = []
142
+ const teamTools: string[] = []
143
+
144
+ for (const step of [...categorySteps, ...teamSteps]) {
145
+ const plugins = step.subCategories.flatMap((sc) => getPluginsBySubCategory(sc as PluginConfig['subCategory']))
146
+ if (plugins.length === 0) continue
147
+ if (step === teamSteps[0]) {
148
+ console.log(` ${c.bold('── Team ──────────────────────────────────────')}`)
149
+ }
150
+ const selected = await multiselect(step.title,
151
+ plugins.map((p) => ({
152
+ label: p.label,
153
+ hint: p.hint,
154
+ value: p.id,
155
+ ...((p.preselected || detectedTools.has(p.id)) && { selected: true }),
156
+ }))
157
+ )
158
+ for (const id of selected) {
159
+ const plugin = plugins.find((p) => p.id === id)
160
+ if (plugin?.category === 'team') teamTools.push(id)
161
+ else techTools.push(id)
162
+ }
163
+ }
143
164
 
144
165
  const stack: StackConfig = {
145
166
  ides: ides as IdeChoice[],
@@ -253,6 +253,11 @@ const SUBCATEGORY_TO_SLOT: Record<string, string> = {
253
253
  'knowledge-management': 'knowledge-management',
254
254
  testing: 'testing',
255
255
  'e2e-testing': 'e2e-testing',
256
+ design: 'design',
257
+ email: 'email',
258
+ payments: 'payments',
259
+ observability: 'observability',
260
+ notifications: 'notifications',
256
261
  };
257
262
 
258
263
  /**
package/src/cli/types.ts CHANGED
@@ -4,7 +4,7 @@ import type { BuiltInGatesConfig, BrowserTestConfig, GuardConfig, CircuitBreaker
4
4
  // ── Stack selection types ──────────────────────────────────────
5
5
 
6
6
  export type IdeChoice = 'vscode' | 'cursor' | 'claude-code' | 'opencode' | 'windsurf' | 'codex' | 'antigravity';
7
- export type TechTool = 'sanity' | 'contentful' | 'strapi' | 'supabase' | 'convex' | 'vercel' | 'nx' | 'chrome-devtools' | 'nextjs' | 'astro' | 'netlify' | 'turborepo' | 'prisma' | 'cypress' | 'playwright' | 'vitest' | 'figma' | 'resend';
7
+ export type TechTool = 'sanity' | 'contentful' | 'strapi' | 'supabase' | 'convex' | 'vercel' | 'nx' | 'chrome-devtools' | 'nextjs' | 'astro' | 'netlify' | 'turborepo' | 'prisma' | 'cypress' | 'playwright' | 'vitest' | 'figma' | 'resend' | 'stripe' | 'sentry' | 'drizzle' | 'cloudflare' | 'coolify' | 'expo';
8
8
  export type TeamTool = 'linear' | 'jira' | 'trello' | 'notion' | 'slack' | 'teams';
9
9
 
10
10
  export interface StackConfig {
@@ -51,21 +51,21 @@
51
51
  "name": "docs/api-v2-contract.json",
52
52
  "type": "json",
53
53
  "task_id": "api-t1",
54
- "created_at": "2026-04-08T11:39:24.109Z"
54
+ "created_at": "2026-04-09T15:15:00.052Z"
55
55
  },
56
56
  {
57
57
  "id": "artifact-demo-api-v2-reports-security-gate-failure-md",
58
58
  "name": "reports/security-gate-failure.md",
59
59
  "type": "summary",
60
60
  "task_id": "api-t3",
61
- "created_at": "2026-04-08T11:39:24.109Z"
61
+ "created_at": "2026-04-09T15:15:00.053Z"
62
62
  },
63
63
  {
64
64
  "id": "artifact-demo-api-v2-src-api-rate-limiter-ts",
65
65
  "name": "src/api/rate-limiter.ts",
66
66
  "type": "file",
67
67
  "task_id": "api-t2",
68
- "created_at": "2026-04-08T11:39:24.109Z"
68
+ "created_at": "2026-04-09T15:15:00.053Z"
69
69
  }
70
70
  ],
71
71
  "has_more_events": false,
@@ -42,28 +42,28 @@
42
42
  "name": "libs/auth/src/jwt-middleware.ts",
43
43
  "type": "file",
44
44
  "task_id": "auth-t2",
45
- "created_at": "2026-04-08T11:39:24.108Z"
45
+ "created_at": "2026-04-09T15:15:00.051Z"
46
46
  },
47
47
  {
48
48
  "id": "artifact-demo-auth-revamp-libs-auth-src-rls-policies-sql",
49
49
  "name": "libs/auth/src/rls-policies.sql",
50
50
  "type": "file",
51
51
  "task_id": "auth-t3",
52
- "created_at": "2026-04-08T11:39:24.108Z"
53
- },
54
- {
55
- "id": "artifact-demo-auth-revamp-tests-auth-integration-test-ts",
56
- "name": "tests/auth/integration.test.ts",
57
- "type": "file",
58
- "task_id": "auth-t4",
59
- "created_at": "2026-04-08T11:39:24.108Z"
52
+ "created_at": "2026-04-09T15:15:00.052Z"
60
53
  },
61
54
  {
62
55
  "id": "artifact-demo-auth-revamp-reports-auth-review-summary-md",
63
56
  "name": "reports/auth-review-summary.md",
64
57
  "type": "summary",
65
58
  "task_id": "auth-t5",
66
- "created_at": "2026-04-08T11:39:24.109Z"
59
+ "created_at": "2026-04-09T15:15:00.052Z"
60
+ },
61
+ {
62
+ "id": "artifact-demo-auth-revamp-tests-auth-integration-test-ts",
63
+ "name": "tests/auth/integration.test.ts",
64
+ "type": "file",
65
+ "task_id": "auth-t4",
66
+ "created_at": "2026-04-09T15:15:00.052Z"
67
67
  }
68
68
  ],
69
69
  "has_more_events": false,
@@ -51,42 +51,42 @@
51
51
  "name": "reports/panel-review-dashboard.md",
52
52
  "type": "summary",
53
53
  "task_id": "ui-t7",
54
- "created_at": "2026-04-08T11:39:24.109Z"
54
+ "created_at": "2026-04-09T15:15:00.052Z"
55
55
  },
56
56
  {
57
57
  "id": "artifact-demo-dashboard-ui-reports-visual-regression-json",
58
58
  "name": "reports/visual-regression.json",
59
59
  "type": "json",
60
60
  "task_id": "ui-t6",
61
- "created_at": "2026-04-08T11:39:24.109Z"
61
+ "created_at": "2026-04-09T15:15:00.052Z"
62
62
  },
63
63
  {
64
64
  "id": "artifact-demo-dashboard-ui-src-components-DonutChart-tsx",
65
65
  "name": "src/components/DonutChart.tsx",
66
66
  "type": "file",
67
67
  "task_id": "ui-t3",
68
- "created_at": "2026-04-08T11:39:24.109Z"
68
+ "created_at": "2026-04-09T15:15:00.052Z"
69
69
  },
70
70
  {
71
71
  "id": "artifact-demo-dashboard-ui-src-components-KpiCard-tsx",
72
72
  "name": "src/components/KpiCard.tsx",
73
73
  "type": "file",
74
74
  "task_id": "ui-t2",
75
- "created_at": "2026-04-08T11:39:24.109Z"
75
+ "created_at": "2026-04-09T15:15:00.052Z"
76
76
  },
77
77
  {
78
78
  "id": "artifact-demo-dashboard-ui-src-components-design-tokens-ts",
79
79
  "name": "src/components/design-tokens.ts",
80
80
  "type": "file",
81
81
  "task_id": "ui-t1",
82
- "created_at": "2026-04-08T11:39:24.109Z"
82
+ "created_at": "2026-04-09T15:15:00.052Z"
83
83
  },
84
84
  {
85
85
  "id": "artifact-demo-dashboard-ui-src-styles-animations-css",
86
86
  "name": "src/styles/animations.css",
87
87
  "type": "file",
88
88
  "task_id": "ui-t4",
89
- "created_at": "2026-04-08T11:39:24.109Z"
89
+ "created_at": "2026-04-09T15:15:00.052Z"
90
90
  }
91
91
  ],
92
92
  "has_more_events": false,
@@ -42,21 +42,21 @@
42
42
  "name": "src/etl/pipeline.ts",
43
43
  "type": "file",
44
44
  "task_id": "etl-t2",
45
- "created_at": "2026-04-08T11:39:24.109Z"
45
+ "created_at": "2026-04-09T15:15:00.053Z"
46
46
  },
47
47
  {
48
48
  "id": "artifact-demo-data-pipeline-src-etl-schema-ts",
49
49
  "name": "src/etl/schema.ts",
50
50
  "type": "file",
51
51
  "task_id": "etl-t1",
52
- "created_at": "2026-04-08T11:39:24.109Z"
52
+ "created_at": "2026-04-09T15:15:00.053Z"
53
53
  },
54
54
  {
55
55
  "id": "artifact-demo-data-pipeline-tests-etl-pipeline-test-ts",
56
56
  "name": "tests/etl/pipeline.test.ts",
57
57
  "type": "file",
58
58
  "task_id": "etl-t3",
59
- "created_at": "2026-04-08T11:39:24.109Z"
59
+ "created_at": "2026-04-09T15:15:00.053Z"
60
60
  }
61
61
  ],
62
62
  "has_more_events": false,
@@ -51,7 +51,7 @@
51
51
  "name": ".github/workflows/ci.yml",
52
52
  "type": "file",
53
53
  "task_id": "ci-t1",
54
- "created_at": "2026-04-08T11:39:24.110Z"
54
+ "created_at": "2026-04-09T15:15:00.054Z"
55
55
  }
56
56
  ],
57
57
  "has_more_events": false,
@@ -42,21 +42,21 @@
42
42
  "name": "docs/ARCHITECTURE.md",
43
43
  "type": "file",
44
44
  "task_id": "docs-t1",
45
- "created_at": "2026-04-08T11:39:24.110Z"
45
+ "created_at": "2026-04-09T15:15:00.053Z"
46
46
  },
47
47
  {
48
48
  "id": "artifact-demo-docs-update-docs-README-md",
49
49
  "name": "docs/README.md",
50
50
  "type": "file",
51
51
  "task_id": "docs-t1",
52
- "created_at": "2026-04-08T11:39:24.110Z"
52
+ "created_at": "2026-04-09T15:15:00.053Z"
53
53
  },
54
54
  {
55
55
  "id": "artifact-demo-docs-update-docs-api-reference-json",
56
56
  "name": "docs/api-reference.json",
57
57
  "type": "json",
58
58
  "task_id": "docs-t2",
59
- "created_at": "2026-04-08T11:39:24.110Z"
59
+ "created_at": "2026-04-09T15:15:00.054Z"
60
60
  }
61
61
  ],
62
62
  "has_more_events": false,
@@ -42,28 +42,28 @@
42
42
  "name": "reports/bundle-analysis.json",
43
43
  "type": "json",
44
44
  "task_id": "perf-t1",
45
- "created_at": "2026-04-08T11:39:24.109Z"
45
+ "created_at": "2026-04-09T15:15:00.053Z"
46
46
  },
47
47
  {
48
48
  "id": "artifact-demo-perf-opt-reports-web-vitals-improvement-md",
49
49
  "name": "reports/web-vitals-improvement.md",
50
50
  "type": "summary",
51
51
  "task_id": "perf-t4",
52
- "created_at": "2026-04-08T11:39:24.109Z"
52
+ "created_at": "2026-04-09T15:15:00.053Z"
53
53
  },
54
54
  {
55
55
  "id": "artifact-demo-perf-opt-src-charts-index-ts",
56
56
  "name": "src/charts/index.ts",
57
57
  "type": "file",
58
58
  "task_id": "perf-t2",
59
- "created_at": "2026-04-08T11:39:24.109Z"
59
+ "created_at": "2026-04-09T15:15:00.053Z"
60
60
  },
61
61
  {
62
62
  "id": "artifact-demo-perf-opt-src-utils-image-loader-ts",
63
63
  "name": "src/utils/image-loader.ts",
64
64
  "type": "file",
65
65
  "task_id": "perf-t3",
66
- "created_at": "2026-04-08T11:39:24.109Z"
66
+ "created_at": "2026-04-09T15:15:00.053Z"
67
67
  }
68
68
  ],
69
69
  "has_more_events": false,
@@ -1,25 +1,25 @@
1
1
  {
2
- "hash": "00dc2d3e",
2
+ "hash": "069eaa8f",
3
3
  "configHash": "30f8ea04",
4
- "lockfileHash": "25166523",
5
- "browserHash": "f7d2c286",
4
+ "lockfileHash": "bd75890f",
5
+ "browserHash": "aaf51dad",
6
6
  "optimized": {
7
7
  "astro > cssesc": {
8
8
  "src": "../../../../../node_modules/cssesc/cssesc.js",
9
9
  "file": "astro___cssesc.js",
10
- "fileHash": "d2e25787",
10
+ "fileHash": "201a881a",
11
11
  "needsInterop": true
12
12
  },
13
13
  "astro > aria-query": {
14
14
  "src": "../../../../../node_modules/aria-query/lib/index.js",
15
15
  "file": "astro___aria-query.js",
16
- "fileHash": "2c861ad0",
16
+ "fileHash": "6274cf79",
17
17
  "needsInterop": true
18
18
  },
19
19
  "astro > axobject-query": {
20
20
  "src": "../../../../../node_modules/axobject-query/lib/index.js",
21
21
  "file": "astro___axobject-query.js",
22
- "fileHash": "b45d4d9c",
22
+ "fileHash": "a791cc35",
23
23
  "needsInterop": true
24
24
  }
25
25
  },
@@ -51,21 +51,21 @@
51
51
  "name": "docs/api-v2-contract.json",
52
52
  "type": "json",
53
53
  "task_id": "api-t1",
54
- "created_at": "2026-04-08T11:39:24.109Z"
54
+ "created_at": "2026-04-09T15:15:00.052Z"
55
55
  },
56
56
  {
57
57
  "id": "artifact-demo-api-v2-reports-security-gate-failure-md",
58
58
  "name": "reports/security-gate-failure.md",
59
59
  "type": "summary",
60
60
  "task_id": "api-t3",
61
- "created_at": "2026-04-08T11:39:24.109Z"
61
+ "created_at": "2026-04-09T15:15:00.053Z"
62
62
  },
63
63
  {
64
64
  "id": "artifact-demo-api-v2-src-api-rate-limiter-ts",
65
65
  "name": "src/api/rate-limiter.ts",
66
66
  "type": "file",
67
67
  "task_id": "api-t2",
68
- "created_at": "2026-04-08T11:39:24.109Z"
68
+ "created_at": "2026-04-09T15:15:00.053Z"
69
69
  }
70
70
  ],
71
71
  "has_more_events": false,
@@ -42,28 +42,28 @@
42
42
  "name": "libs/auth/src/jwt-middleware.ts",
43
43
  "type": "file",
44
44
  "task_id": "auth-t2",
45
- "created_at": "2026-04-08T11:39:24.108Z"
45
+ "created_at": "2026-04-09T15:15:00.051Z"
46
46
  },
47
47
  {
48
48
  "id": "artifact-demo-auth-revamp-libs-auth-src-rls-policies-sql",
49
49
  "name": "libs/auth/src/rls-policies.sql",
50
50
  "type": "file",
51
51
  "task_id": "auth-t3",
52
- "created_at": "2026-04-08T11:39:24.108Z"
53
- },
54
- {
55
- "id": "artifact-demo-auth-revamp-tests-auth-integration-test-ts",
56
- "name": "tests/auth/integration.test.ts",
57
- "type": "file",
58
- "task_id": "auth-t4",
59
- "created_at": "2026-04-08T11:39:24.108Z"
52
+ "created_at": "2026-04-09T15:15:00.052Z"
60
53
  },
61
54
  {
62
55
  "id": "artifact-demo-auth-revamp-reports-auth-review-summary-md",
63
56
  "name": "reports/auth-review-summary.md",
64
57
  "type": "summary",
65
58
  "task_id": "auth-t5",
66
- "created_at": "2026-04-08T11:39:24.109Z"
59
+ "created_at": "2026-04-09T15:15:00.052Z"
60
+ },
61
+ {
62
+ "id": "artifact-demo-auth-revamp-tests-auth-integration-test-ts",
63
+ "name": "tests/auth/integration.test.ts",
64
+ "type": "file",
65
+ "task_id": "auth-t4",
66
+ "created_at": "2026-04-09T15:15:00.052Z"
67
67
  }
68
68
  ],
69
69
  "has_more_events": false,
@@ -51,42 +51,42 @@
51
51
  "name": "reports/panel-review-dashboard.md",
52
52
  "type": "summary",
53
53
  "task_id": "ui-t7",
54
- "created_at": "2026-04-08T11:39:24.109Z"
54
+ "created_at": "2026-04-09T15:15:00.052Z"
55
55
  },
56
56
  {
57
57
  "id": "artifact-demo-dashboard-ui-reports-visual-regression-json",
58
58
  "name": "reports/visual-regression.json",
59
59
  "type": "json",
60
60
  "task_id": "ui-t6",
61
- "created_at": "2026-04-08T11:39:24.109Z"
61
+ "created_at": "2026-04-09T15:15:00.052Z"
62
62
  },
63
63
  {
64
64
  "id": "artifact-demo-dashboard-ui-src-components-DonutChart-tsx",
65
65
  "name": "src/components/DonutChart.tsx",
66
66
  "type": "file",
67
67
  "task_id": "ui-t3",
68
- "created_at": "2026-04-08T11:39:24.109Z"
68
+ "created_at": "2026-04-09T15:15:00.052Z"
69
69
  },
70
70
  {
71
71
  "id": "artifact-demo-dashboard-ui-src-components-KpiCard-tsx",
72
72
  "name": "src/components/KpiCard.tsx",
73
73
  "type": "file",
74
74
  "task_id": "ui-t2",
75
- "created_at": "2026-04-08T11:39:24.109Z"
75
+ "created_at": "2026-04-09T15:15:00.052Z"
76
76
  },
77
77
  {
78
78
  "id": "artifact-demo-dashboard-ui-src-components-design-tokens-ts",
79
79
  "name": "src/components/design-tokens.ts",
80
80
  "type": "file",
81
81
  "task_id": "ui-t1",
82
- "created_at": "2026-04-08T11:39:24.109Z"
82
+ "created_at": "2026-04-09T15:15:00.052Z"
83
83
  },
84
84
  {
85
85
  "id": "artifact-demo-dashboard-ui-src-styles-animations-css",
86
86
  "name": "src/styles/animations.css",
87
87
  "type": "file",
88
88
  "task_id": "ui-t4",
89
- "created_at": "2026-04-08T11:39:24.109Z"
89
+ "created_at": "2026-04-09T15:15:00.052Z"
90
90
  }
91
91
  ],
92
92
  "has_more_events": false,
@@ -42,21 +42,21 @@
42
42
  "name": "src/etl/pipeline.ts",
43
43
  "type": "file",
44
44
  "task_id": "etl-t2",
45
- "created_at": "2026-04-08T11:39:24.109Z"
45
+ "created_at": "2026-04-09T15:15:00.053Z"
46
46
  },
47
47
  {
48
48
  "id": "artifact-demo-data-pipeline-src-etl-schema-ts",
49
49
  "name": "src/etl/schema.ts",
50
50
  "type": "file",
51
51
  "task_id": "etl-t1",
52
- "created_at": "2026-04-08T11:39:24.109Z"
52
+ "created_at": "2026-04-09T15:15:00.053Z"
53
53
  },
54
54
  {
55
55
  "id": "artifact-demo-data-pipeline-tests-etl-pipeline-test-ts",
56
56
  "name": "tests/etl/pipeline.test.ts",
57
57
  "type": "file",
58
58
  "task_id": "etl-t3",
59
- "created_at": "2026-04-08T11:39:24.109Z"
59
+ "created_at": "2026-04-09T15:15:00.053Z"
60
60
  }
61
61
  ],
62
62
  "has_more_events": false,
@@ -51,7 +51,7 @@
51
51
  "name": ".github/workflows/ci.yml",
52
52
  "type": "file",
53
53
  "task_id": "ci-t1",
54
- "created_at": "2026-04-08T11:39:24.110Z"
54
+ "created_at": "2026-04-09T15:15:00.054Z"
55
55
  }
56
56
  ],
57
57
  "has_more_events": false,
@@ -42,21 +42,21 @@
42
42
  "name": "docs/ARCHITECTURE.md",
43
43
  "type": "file",
44
44
  "task_id": "docs-t1",
45
- "created_at": "2026-04-08T11:39:24.110Z"
45
+ "created_at": "2026-04-09T15:15:00.053Z"
46
46
  },
47
47
  {
48
48
  "id": "artifact-demo-docs-update-docs-README-md",
49
49
  "name": "docs/README.md",
50
50
  "type": "file",
51
51
  "task_id": "docs-t1",
52
- "created_at": "2026-04-08T11:39:24.110Z"
52
+ "created_at": "2026-04-09T15:15:00.053Z"
53
53
  },
54
54
  {
55
55
  "id": "artifact-demo-docs-update-docs-api-reference-json",
56
56
  "name": "docs/api-reference.json",
57
57
  "type": "json",
58
58
  "task_id": "docs-t2",
59
- "created_at": "2026-04-08T11:39:24.110Z"
59
+ "created_at": "2026-04-09T15:15:00.054Z"
60
60
  }
61
61
  ],
62
62
  "has_more_events": false,
@@ -42,28 +42,28 @@
42
42
  "name": "reports/bundle-analysis.json",
43
43
  "type": "json",
44
44
  "task_id": "perf-t1",
45
- "created_at": "2026-04-08T11:39:24.109Z"
45
+ "created_at": "2026-04-09T15:15:00.053Z"
46
46
  },
47
47
  {
48
48
  "id": "artifact-demo-perf-opt-reports-web-vitals-improvement-md",
49
49
  "name": "reports/web-vitals-improvement.md",
50
50
  "type": "summary",
51
51
  "task_id": "perf-t4",
52
- "created_at": "2026-04-08T11:39:24.109Z"
52
+ "created_at": "2026-04-09T15:15:00.053Z"
53
53
  },
54
54
  {
55
55
  "id": "artifact-demo-perf-opt-src-charts-index-ts",
56
56
  "name": "src/charts/index.ts",
57
57
  "type": "file",
58
58
  "task_id": "perf-t2",
59
- "created_at": "2026-04-08T11:39:24.109Z"
59
+ "created_at": "2026-04-09T15:15:00.053Z"
60
60
  },
61
61
  {
62
62
  "id": "artifact-demo-perf-opt-src-utils-image-loader-ts",
63
63
  "name": "src/utils/image-loader.ts",
64
64
  "type": "file",
65
65
  "task_id": "perf-t3",
66
- "created_at": "2026-04-08T11:39:24.109Z"
66
+ "created_at": "2026-04-09T15:15:00.053Z"
67
67
  }
68
68
  ],
69
69
  "has_more_events": false,
@@ -47,11 +47,31 @@
47
47
  "knowledge-management": {
48
48
  "entries": [],
49
49
  "description": "Workspace knowledge base, research capture, ADRs, specs, page hierarchy"
50
+ },
51
+ "design": {
52
+ "entries": [],
53
+ "description": "Design tokens, component inspection, asset export, design-to-code"
54
+ },
55
+ "email": {
56
+ "entries": [],
57
+ "description": "Transactional email, templates, domain config, delivery"
58
+ },
59
+ "payments": {
60
+ "entries": [],
61
+ "description": "Payment processing, subscriptions, invoicing, webhooks"
62
+ },
63
+ "observability": {
64
+ "entries": [],
65
+ "description": "Error tracking, performance monitoring, alerts, tracing"
66
+ },
67
+ "notifications": {
68
+ "entries": [],
69
+ "description": "Team messaging, alerts, bot integrations, channel management"
50
70
  }
51
71
  },
52
72
  "agents": {
53
73
  "Developer": {
54
- "slots": ["framework"],
74
+ "slots": ["framework", "email", "payments", "notifications"],
55
75
  "directSkills": ["validation-gates", "code-commenting", "react-development", "api-patterns"]
56
76
  },
57
77
  "Database Engineer": {
@@ -59,7 +79,7 @@
59
79
  "directSkills": ["validation-gates", "security-hardening"]
60
80
  },
61
81
  "UI/UX Expert": {
62
- "slots": ["e2e-testing"],
82
+ "slots": ["e2e-testing", "design"],
63
83
  "directSkills": ["validation-gates", "frontend-design", "accessibility-standards", "react-development"]
64
84
  },
65
85
  "Content Engineer": {
@@ -79,11 +99,11 @@
79
99
  "directSkills": ["validation-gates", "data-engineering"]
80
100
  },
81
101
  "DevOps Expert": {
82
- "slots": ["deployment"],
102
+ "slots": ["deployment", "observability"],
83
103
  "directSkills": ["validation-gates", "documentation-standards"]
84
104
  },
85
105
  "Performance Expert": {
86
- "slots": [],
106
+ "slots": ["observability"],
87
107
  "directSkills": ["validation-gates", "performance-optimization"]
88
108
  },
89
109
  "Architect": {