opencastle 0.1.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.
- package/LICENSE +21 -0
- package/README.md +215 -0
- package/bin/cli.mjs +69 -0
- package/dist/cli/adapters/claude-code.d.ts +22 -0
- package/dist/cli/adapters/claude-code.d.ts.map +1 -0
- package/dist/cli/adapters/claude-code.js +237 -0
- package/dist/cli/adapters/claude-code.js.map +1 -0
- package/dist/cli/adapters/cursor.d.ts +20 -0
- package/dist/cli/adapters/cursor.d.ts.map +1 -0
- package/dist/cli/adapters/cursor.js +231 -0
- package/dist/cli/adapters/cursor.js.map +1 -0
- package/dist/cli/adapters/vscode.d.ts +20 -0
- package/dist/cli/adapters/vscode.d.ts.map +1 -0
- package/dist/cli/adapters/vscode.js +132 -0
- package/dist/cli/adapters/vscode.js.map +1 -0
- package/dist/cli/copy.d.ts +14 -0
- package/dist/cli/copy.d.ts.map +1 -0
- package/dist/cli/copy.js +62 -0
- package/dist/cli/copy.js.map +1 -0
- package/dist/cli/dashboard.d.ts +3 -0
- package/dist/cli/dashboard.d.ts.map +1 -0
- package/dist/cli/dashboard.js +183 -0
- package/dist/cli/dashboard.js.map +1 -0
- package/dist/cli/diff.d.ts +3 -0
- package/dist/cli/diff.d.ts.map +1 -0
- package/dist/cli/diff.js +27 -0
- package/dist/cli/diff.js.map +1 -0
- package/dist/cli/eject.d.ts +3 -0
- package/dist/cli/eject.d.ts.map +1 -0
- package/dist/cli/eject.js +27 -0
- package/dist/cli/eject.js.map +1 -0
- package/dist/cli/init.d.ts +3 -0
- package/dist/cli/init.d.ts.map +1 -0
- package/dist/cli/init.js +92 -0
- package/dist/cli/init.js.map +1 -0
- package/dist/cli/manifest.d.ts +14 -0
- package/dist/cli/manifest.d.ts.map +1 -0
- package/dist/cli/manifest.js +34 -0
- package/dist/cli/manifest.js.map +1 -0
- package/dist/cli/mcp.d.ts +14 -0
- package/dist/cli/mcp.d.ts.map +1 -0
- package/dist/cli/mcp.js +35 -0
- package/dist/cli/mcp.js.map +1 -0
- package/dist/cli/prompt.d.ts +12 -0
- package/dist/cli/prompt.d.ts.map +1 -0
- package/dist/cli/prompt.js +104 -0
- package/dist/cli/prompt.js.map +1 -0
- package/dist/cli/run/adapters/claude-code.d.ts +16 -0
- package/dist/cli/run/adapters/claude-code.d.ts.map +1 -0
- package/dist/cli/run/adapters/claude-code.js +82 -0
- package/dist/cli/run/adapters/claude-code.js.map +1 -0
- package/dist/cli/run/adapters/copilot.d.ts +16 -0
- package/dist/cli/run/adapters/copilot.d.ts.map +1 -0
- package/dist/cli/run/adapters/copilot.js +84 -0
- package/dist/cli/run/adapters/copilot.js.map +1 -0
- package/dist/cli/run/adapters/cursor.d.ts +16 -0
- package/dist/cli/run/adapters/cursor.d.ts.map +1 -0
- package/dist/cli/run/adapters/cursor.js +81 -0
- package/dist/cli/run/adapters/cursor.js.map +1 -0
- package/dist/cli/run/adapters/index.d.ts +14 -0
- package/dist/cli/run/adapters/index.d.ts.map +1 -0
- package/dist/cli/run/adapters/index.js +35 -0
- package/dist/cli/run/adapters/index.js.map +1 -0
- package/dist/cli/run/executor.d.ts +15 -0
- package/dist/cli/run/executor.d.ts.map +1 -0
- package/dist/cli/run/executor.js +249 -0
- package/dist/cli/run/executor.js.map +1 -0
- package/dist/cli/run/reporter.d.ts +10 -0
- package/dist/cli/run/reporter.d.ts.map +1 -0
- package/dist/cli/run/reporter.js +112 -0
- package/dist/cli/run/reporter.js.map +1 -0
- package/dist/cli/run/schema.d.ts +28 -0
- package/dist/cli/run/schema.d.ts.map +1 -0
- package/dist/cli/run/schema.js +511 -0
- package/dist/cli/run/schema.js.map +1 -0
- package/dist/cli/run.d.ts +6 -0
- package/dist/cli/run.d.ts.map +1 -0
- package/dist/cli/run.js +123 -0
- package/dist/cli/run.js.map +1 -0
- package/dist/cli/stack-config.d.ts +12 -0
- package/dist/cli/stack-config.d.ts.map +1 -0
- package/dist/cli/stack-config.js +146 -0
- package/dist/cli/stack-config.js.map +1 -0
- package/dist/cli/types.d.ts +169 -0
- package/dist/cli/types.d.ts.map +1 -0
- package/dist/cli/types.js +2 -0
- package/dist/cli/types.js.map +1 -0
- package/dist/cli/update.d.ts +3 -0
- package/dist/cli/update.d.ts.map +1 -0
- package/dist/cli/update.js +50 -0
- package/dist/cli/update.js.map +1 -0
- package/package.json +48 -0
- package/src/cli/adapters/claude-code.ts +287 -0
- package/src/cli/adapters/cursor.ts +377 -0
- package/src/cli/adapters/vscode.ts +168 -0
- package/src/cli/copy.ts +79 -0
- package/src/cli/dashboard.ts +225 -0
- package/src/cli/diff.ts +44 -0
- package/src/cli/eject.ts +39 -0
- package/src/cli/init.ts +120 -0
- package/src/cli/manifest.ts +45 -0
- package/src/cli/mcp.ts +49 -0
- package/src/cli/prompt.ts +115 -0
- package/src/cli/run/adapters/claude-code.ts +95 -0
- package/src/cli/run/adapters/copilot.ts +97 -0
- package/src/cli/run/adapters/cursor.ts +94 -0
- package/src/cli/run/adapters/index.ts +40 -0
- package/src/cli/run/executor.ts +292 -0
- package/src/cli/run/reporter.ts +129 -0
- package/src/cli/run/schema.ts +595 -0
- package/src/cli/run.ts +137 -0
- package/src/cli/stack-config.ts +180 -0
- package/src/cli/types.ts +207 -0
- package/src/cli/update.ts +75 -0
- package/src/dashboard/astro.config.mjs +6 -0
- package/src/dashboard/package-lock.json +5455 -0
- package/src/dashboard/package.json +14 -0
- package/src/dashboard/public/data/delegations.ndjson +35 -0
- package/src/dashboard/public/data/panels.ndjson +13 -0
- package/src/dashboard/public/data/sessions.ndjson +50 -0
- package/src/dashboard/public/icon-192.png +0 -0
- package/src/dashboard/scripts/generate-seed-data.ts +355 -0
- package/src/dashboard/src/layouts/Layout.astro +25 -0
- package/src/dashboard/src/pages/index.astro +1070 -0
- package/src/dashboard/src/styles/dashboard.css +1078 -0
- package/src/dashboard/tsconfig.json +6 -0
- package/src/orchestrator/agent-workflows/README.md +22 -0
- package/src/orchestrator/agent-workflows/bug-fix.md +128 -0
- package/src/orchestrator/agent-workflows/data-pipeline.md +145 -0
- package/src/orchestrator/agent-workflows/database-migration.md +159 -0
- package/src/orchestrator/agent-workflows/feature-implementation.md +223 -0
- package/src/orchestrator/agent-workflows/performance-optimization.md +125 -0
- package/src/orchestrator/agent-workflows/refactoring.md +142 -0
- package/src/orchestrator/agent-workflows/schema-changes.md +164 -0
- package/src/orchestrator/agent-workflows/security-audit.md +148 -0
- package/src/orchestrator/agent-workflows/shared-delivery-phase.md +33 -0
- package/src/orchestrator/agents/api-designer.agent.md +68 -0
- package/src/orchestrator/agents/architect.agent.md +129 -0
- package/src/orchestrator/agents/content-engineer.agent.md +57 -0
- package/src/orchestrator/agents/copywriter.agent.md +95 -0
- package/src/orchestrator/agents/data-expert.agent.md +63 -0
- package/src/orchestrator/agents/database-engineer.agent.md +62 -0
- package/src/orchestrator/agents/developer.agent.md +66 -0
- package/src/orchestrator/agents/devops-expert.agent.md +57 -0
- package/src/orchestrator/agents/documentation-writer.agent.md +60 -0
- package/src/orchestrator/agents/performance-expert.agent.md +58 -0
- package/src/orchestrator/agents/release-manager.agent.md +72 -0
- package/src/orchestrator/agents/researcher.agent.md +145 -0
- package/src/orchestrator/agents/reviewer.agent.md +62 -0
- package/src/orchestrator/agents/security-expert.agent.md +64 -0
- package/src/orchestrator/agents/seo-specialist.agent.md +67 -0
- package/src/orchestrator/agents/team-lead.agent.md +644 -0
- package/src/orchestrator/agents/testing-expert.agent.md +85 -0
- package/src/orchestrator/agents/ui-ux-expert.agent.md +63 -0
- package/src/orchestrator/copilot-instructions.md +3 -0
- package/src/orchestrator/customizations/AGENT-EXPERTISE.md +325 -0
- package/src/orchestrator/customizations/AGENT-FAILURES.md +69 -0
- package/src/orchestrator/customizations/AGENT-PERFORMANCE.md +58 -0
- package/src/orchestrator/customizations/DISPUTES.md +162 -0
- package/src/orchestrator/customizations/KNOWLEDGE-GRAPH.md +10 -0
- package/src/orchestrator/customizations/LESSONS-LEARNED.md +70 -0
- package/src/orchestrator/customizations/README.md +59 -0
- package/src/orchestrator/customizations/agents/agent-registry.md +46 -0
- package/src/orchestrator/customizations/agents/skill-matrix.md +142 -0
- package/src/orchestrator/customizations/logs/README.md +181 -0
- package/src/orchestrator/customizations/logs/delegations.ndjson +1 -0
- package/src/orchestrator/customizations/logs/panels.ndjson +1 -0
- package/src/orchestrator/customizations/logs/sessions.ndjson +1 -0
- package/src/orchestrator/customizations/project/docs-structure.md +23 -0
- package/src/orchestrator/customizations/project/tracker-config.md +45 -0
- package/src/orchestrator/customizations/project.instructions.md +64 -0
- package/src/orchestrator/customizations/stack/api-config.md +37 -0
- package/src/orchestrator/customizations/stack/cms-config.md +26 -0
- package/src/orchestrator/customizations/stack/data-pipeline-config.md +41 -0
- package/src/orchestrator/customizations/stack/database-config.md +44 -0
- package/src/orchestrator/customizations/stack/deployment-config.md +45 -0
- package/src/orchestrator/customizations/stack/testing-config.md +56 -0
- package/src/orchestrator/instructions/ai-optimization.instructions.md +143 -0
- package/src/orchestrator/instructions/general.instructions.md +194 -0
- package/src/orchestrator/mcp.json +55 -0
- package/src/orchestrator/prompts/bootstrap-customizations.prompt.md +235 -0
- package/src/orchestrator/prompts/brainstorm.prompt.md +115 -0
- package/src/orchestrator/prompts/bug-fix.prompt.md +141 -0
- package/src/orchestrator/prompts/create-skill.prompt.md +103 -0
- package/src/orchestrator/prompts/generate-task-spec.prompt.md +154 -0
- package/src/orchestrator/prompts/implement-feature.prompt.md +124 -0
- package/src/orchestrator/prompts/metrics-report.prompt.md +142 -0
- package/src/orchestrator/prompts/quick-refinement.prompt.md +137 -0
- package/src/orchestrator/prompts/resolve-pr-comments.prompt.md +100 -0
- package/src/orchestrator/skills/accessibility-standards/SKILL.md +164 -0
- package/src/orchestrator/skills/agent-hooks/SKILL.md +147 -0
- package/src/orchestrator/skills/agent-memory/SKILL.md +144 -0
- package/src/orchestrator/skills/api-patterns/SKILL.md +106 -0
- package/src/orchestrator/skills/browser-testing/SKILL.md +203 -0
- package/src/orchestrator/skills/code-commenting/SKILL.md +133 -0
- package/src/orchestrator/skills/contentful-cms/SKILL.md +43 -0
- package/src/orchestrator/skills/context-map/SKILL.md +135 -0
- package/src/orchestrator/skills/convex-database/SKILL.md +80 -0
- package/src/orchestrator/skills/data-engineering/SKILL.md +99 -0
- package/src/orchestrator/skills/deployment-infrastructure/SKILL.md +49 -0
- package/src/orchestrator/skills/documentation-standards/SKILL.md +85 -0
- package/src/orchestrator/skills/fast-review/SKILL.md +327 -0
- package/src/orchestrator/skills/frontend-design/SKILL.md +42 -0
- package/src/orchestrator/skills/jira-management/SKILL.md +168 -0
- package/src/orchestrator/skills/memory-merger/SKILL.md +123 -0
- package/src/orchestrator/skills/nextjs-patterns/SKILL.md +75 -0
- package/src/orchestrator/skills/nx-workspace/SKILL.md +192 -0
- package/src/orchestrator/skills/panel-majority-vote/SKILL.md +184 -0
- package/src/orchestrator/skills/panel-majority-vote/panel-report.template.md +38 -0
- package/src/orchestrator/skills/performance-optimization/SKILL.md +101 -0
- package/src/orchestrator/skills/react-development/SKILL.md +117 -0
- package/src/orchestrator/skills/sanity-cms/SKILL.md +18 -0
- package/src/orchestrator/skills/security-hardening/SKILL.md +118 -0
- package/src/orchestrator/skills/self-improvement/SKILL.md +137 -0
- package/src/orchestrator/skills/seo-patterns/SKILL.md +40 -0
- package/src/orchestrator/skills/session-checkpoints/SKILL.md +205 -0
- package/src/orchestrator/skills/slack-notifications/SKILL.md +211 -0
- package/src/orchestrator/skills/strapi-cms/SKILL.md +43 -0
- package/src/orchestrator/skills/supabase-database/SKILL.md +24 -0
- package/src/orchestrator/skills/task-management/SKILL.md +143 -0
- package/src/orchestrator/skills/team-lead-reference/SKILL.md +317 -0
- package/src/orchestrator/skills/teams-notifications/SKILL.md +249 -0
- package/src/orchestrator/skills/testing-workflow/SKILL.md +134 -0
- package/src/orchestrator/skills/validation-gates/SKILL.md +100 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/cli/run.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { StackConfig, CopyDirOptions } from './types.js';
|
|
2
|
+
export declare function getExcludedSkills(stack: StackConfig): Set<string>;
|
|
3
|
+
export declare function getExcludedAgents(stack: StackConfig): Set<string>;
|
|
4
|
+
export declare function getIncludedMcpServers(stack: StackConfig): Set<string>;
|
|
5
|
+
/**
|
|
6
|
+
* Return a transform callback that pre-populates customization files
|
|
7
|
+
* based on the user's stack selection.
|
|
8
|
+
*
|
|
9
|
+
* Used by all adapters when copying the `customizations/` directory.
|
|
10
|
+
*/
|
|
11
|
+
export declare function getCustomizationsTransform(stack: StackConfig): NonNullable<CopyDirOptions['transform']>;
|
|
12
|
+
//# sourceMappingURL=stack-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stack-config.d.ts","sourceRoot":"","sources":["../../src/cli/stack-config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAA8C,WAAW,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AA2G1G,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC,CAOjE;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC,CAKjE;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,WAAW,GAAG,GAAG,CAAC,MAAM,CAAC,CAQrE;AAID;;;;;GAKG;AACH,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,WAAW,GACjB,WAAW,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,CAQ1C"}
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
// ── Skill / Technology labels ─────────────────────────────────
|
|
2
|
+
/** Display name for each CMS choice */
|
|
3
|
+
const CMS_LABELS = {
|
|
4
|
+
sanity: { tech: 'Sanity', skill: 'sanity-cms' },
|
|
5
|
+
contentful: { tech: 'Contentful', skill: 'contentful-cms' },
|
|
6
|
+
strapi: { tech: 'Strapi', skill: 'strapi-cms' },
|
|
7
|
+
};
|
|
8
|
+
/** Display name for each DB choice */
|
|
9
|
+
const DB_LABELS = {
|
|
10
|
+
supabase: { tech: 'Supabase', skill: 'supabase-database' },
|
|
11
|
+
convex: { tech: 'Convex', skill: 'convex-database' },
|
|
12
|
+
};
|
|
13
|
+
/** Display name for each PM choice */
|
|
14
|
+
const PM_LABELS = {
|
|
15
|
+
linear: { tech: 'Linear', skill: 'task-management' },
|
|
16
|
+
jira: { tech: 'Jira', skill: 'jira-management' },
|
|
17
|
+
};
|
|
18
|
+
/** Display name for each notifications choice */
|
|
19
|
+
const NOTIF_LABELS = {
|
|
20
|
+
slack: { tech: 'Slack', skill: 'slack-notifications' },
|
|
21
|
+
teams: { tech: 'Teams', skill: 'teams-notifications' },
|
|
22
|
+
};
|
|
23
|
+
// ── Exclusion / inclusion maps ────────────────────────────────
|
|
24
|
+
/** Skills to EXCLUDE based on CMS choice */
|
|
25
|
+
const CMS_SKILL_MAP = {
|
|
26
|
+
sanity: ['contentful-cms', 'strapi-cms'],
|
|
27
|
+
contentful: ['sanity-cms', 'strapi-cms'],
|
|
28
|
+
strapi: ['sanity-cms', 'contentful-cms'],
|
|
29
|
+
none: ['sanity-cms', 'contentful-cms', 'strapi-cms'],
|
|
30
|
+
};
|
|
31
|
+
/** Skills to EXCLUDE based on DB choice */
|
|
32
|
+
const DB_SKILL_MAP = {
|
|
33
|
+
supabase: ['convex-database'],
|
|
34
|
+
convex: ['supabase-database'],
|
|
35
|
+
none: ['supabase-database', 'convex-database'],
|
|
36
|
+
};
|
|
37
|
+
/** Skills to EXCLUDE based on PM choice */
|
|
38
|
+
const PM_SKILL_MAP = {
|
|
39
|
+
linear: ['jira-management'],
|
|
40
|
+
jira: ['task-management'],
|
|
41
|
+
none: ['task-management', 'jira-management'],
|
|
42
|
+
};
|
|
43
|
+
/** Agents to EXCLUDE based on CMS choice */
|
|
44
|
+
const CMS_AGENT_EXCLUSIONS = {
|
|
45
|
+
sanity: [],
|
|
46
|
+
contentful: [],
|
|
47
|
+
strapi: [],
|
|
48
|
+
none: ['content-engineer.agent.md'],
|
|
49
|
+
};
|
|
50
|
+
/** Agents to EXCLUDE based on DB choice */
|
|
51
|
+
const DB_AGENT_EXCLUSIONS = {
|
|
52
|
+
supabase: [],
|
|
53
|
+
convex: [],
|
|
54
|
+
none: ['database-engineer.agent.md'],
|
|
55
|
+
};
|
|
56
|
+
/** MCP server keys to INCLUDE based on CMS choice */
|
|
57
|
+
const CMS_MCP_MAP = {
|
|
58
|
+
sanity: ['Sanity'],
|
|
59
|
+
contentful: ['Contentful'],
|
|
60
|
+
strapi: ['Strapi'],
|
|
61
|
+
none: [],
|
|
62
|
+
};
|
|
63
|
+
/** MCP server keys to INCLUDE based on DB choice */
|
|
64
|
+
const DB_MCP_MAP = {
|
|
65
|
+
supabase: ['Supabase'],
|
|
66
|
+
convex: ['Convex'],
|
|
67
|
+
none: [],
|
|
68
|
+
};
|
|
69
|
+
/** MCP server keys to INCLUDE based on PM choice */
|
|
70
|
+
const PM_MCP_MAP = {
|
|
71
|
+
linear: ['Linear'],
|
|
72
|
+
jira: ['Jira'],
|
|
73
|
+
none: [],
|
|
74
|
+
};
|
|
75
|
+
/** Skills to EXCLUDE based on notifications choice */
|
|
76
|
+
const NOTIF_SKILL_MAP = {
|
|
77
|
+
slack: ['teams-notifications'],
|
|
78
|
+
teams: ['slack-notifications'],
|
|
79
|
+
none: ['slack-notifications', 'teams-notifications'],
|
|
80
|
+
};
|
|
81
|
+
/** MCP server keys to INCLUDE based on notifications choice */
|
|
82
|
+
const NOTIF_MCP_MAP = {
|
|
83
|
+
slack: ['Slack'],
|
|
84
|
+
teams: ['Teams'],
|
|
85
|
+
none: [],
|
|
86
|
+
};
|
|
87
|
+
/** Always-included MCP servers */
|
|
88
|
+
const CORE_MCP_SERVERS = ['chrome-devtools', 'Vercel'];
|
|
89
|
+
export function getExcludedSkills(stack) {
|
|
90
|
+
return new Set([
|
|
91
|
+
...CMS_SKILL_MAP[stack.cms],
|
|
92
|
+
...DB_SKILL_MAP[stack.db],
|
|
93
|
+
...PM_SKILL_MAP[stack.pm],
|
|
94
|
+
...NOTIF_SKILL_MAP[stack.notifications],
|
|
95
|
+
]);
|
|
96
|
+
}
|
|
97
|
+
export function getExcludedAgents(stack) {
|
|
98
|
+
return new Set([
|
|
99
|
+
...CMS_AGENT_EXCLUSIONS[stack.cms],
|
|
100
|
+
...DB_AGENT_EXCLUSIONS[stack.db],
|
|
101
|
+
]);
|
|
102
|
+
}
|
|
103
|
+
export function getIncludedMcpServers(stack) {
|
|
104
|
+
return new Set([
|
|
105
|
+
...CORE_MCP_SERVERS,
|
|
106
|
+
...CMS_MCP_MAP[stack.cms],
|
|
107
|
+
...DB_MCP_MAP[stack.db],
|
|
108
|
+
...PM_MCP_MAP[stack.pm],
|
|
109
|
+
...NOTIF_MCP_MAP[stack.notifications],
|
|
110
|
+
]);
|
|
111
|
+
}
|
|
112
|
+
// ── Customization file transforms ─────────────────────────────
|
|
113
|
+
/**
|
|
114
|
+
* Return a transform callback that pre-populates customization files
|
|
115
|
+
* based on the user's stack selection.
|
|
116
|
+
*
|
|
117
|
+
* Used by all adapters when copying the `customizations/` directory.
|
|
118
|
+
*/
|
|
119
|
+
export function getCustomizationsTransform(stack) {
|
|
120
|
+
return (content, srcPath) => {
|
|
121
|
+
// Pre-fill skill matrix with CMS and DB bindings
|
|
122
|
+
if (srcPath.endsWith('skill-matrix.md')) {
|
|
123
|
+
return transformSkillMatrix(content, stack);
|
|
124
|
+
}
|
|
125
|
+
return content;
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Fill in the `database` and `cms` rows in the skill matrix
|
|
130
|
+
* based on the user's stack selection.
|
|
131
|
+
*/
|
|
132
|
+
function transformSkillMatrix(content, stack) {
|
|
133
|
+
let result = content;
|
|
134
|
+
// Fill the database row
|
|
135
|
+
if (stack.db !== 'none') {
|
|
136
|
+
const { tech, skill } = DB_LABELS[stack.db];
|
|
137
|
+
result = result.replace(/(\| `database`\s*\|)\s*\|(\s*\|)/, `$1 ${tech} | \`${skill}\` $2`);
|
|
138
|
+
}
|
|
139
|
+
// Fill the CMS row
|
|
140
|
+
if (stack.cms !== 'none') {
|
|
141
|
+
const { tech, skill } = CMS_LABELS[stack.cms];
|
|
142
|
+
result = result.replace(/(\| `cms`\s*\|)\s*\|(\s*\|)/, `$1 ${tech} | \`${skill}\` $2`);
|
|
143
|
+
}
|
|
144
|
+
return result;
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=stack-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stack-config.js","sourceRoot":"","sources":["../../src/cli/stack-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
import type { ChildProcess } from 'node:child_process';
|
|
2
|
+
export type CmsChoice = 'sanity' | 'contentful' | 'strapi' | 'none';
|
|
3
|
+
export type DbChoice = 'supabase' | 'convex' | 'none';
|
|
4
|
+
export type PmChoice = 'linear' | 'jira' | 'none';
|
|
5
|
+
export type NotifChoice = 'slack' | 'teams' | 'none';
|
|
6
|
+
export interface StackConfig {
|
|
7
|
+
cms: CmsChoice;
|
|
8
|
+
db: DbChoice;
|
|
9
|
+
pm: PmChoice;
|
|
10
|
+
notifications: NotifChoice;
|
|
11
|
+
}
|
|
12
|
+
/** Context passed from bin/cli.mjs to every command handler. */
|
|
13
|
+
export interface CliContext {
|
|
14
|
+
pkgRoot: string;
|
|
15
|
+
args: string[];
|
|
16
|
+
}
|
|
17
|
+
/** Results from a copy/install/update operation. */
|
|
18
|
+
export interface CopyResults {
|
|
19
|
+
copied: string[];
|
|
20
|
+
skipped: string[];
|
|
21
|
+
created: string[];
|
|
22
|
+
}
|
|
23
|
+
/** Options for the copyDir utility. */
|
|
24
|
+
export interface CopyDirOptions {
|
|
25
|
+
overwrite?: boolean;
|
|
26
|
+
filter?: (_name: string, _srcPath: string) => boolean;
|
|
27
|
+
transform?: (_content: string, _srcPath: string) => Promise<string | null> | string | null;
|
|
28
|
+
}
|
|
29
|
+
/** OpenCastle project manifest (.opencastle.json). */
|
|
30
|
+
export interface Manifest {
|
|
31
|
+
version: string;
|
|
32
|
+
ide: string;
|
|
33
|
+
installedAt: string;
|
|
34
|
+
updatedAt: string;
|
|
35
|
+
managedPaths?: ManagedPaths;
|
|
36
|
+
stack?: StackConfig;
|
|
37
|
+
}
|
|
38
|
+
/** Framework vs customizable file paths. */
|
|
39
|
+
export interface ManagedPaths {
|
|
40
|
+
framework: string[];
|
|
41
|
+
customizable: string[];
|
|
42
|
+
}
|
|
43
|
+
/** IDE adapter interface (init/update commands). */
|
|
44
|
+
export interface IdeAdapter {
|
|
45
|
+
install(_pkgRoot: string, _projectRoot: string, _stack?: StackConfig): Promise<CopyResults>;
|
|
46
|
+
update(_pkgRoot: string, _projectRoot: string, _stack?: StackConfig): Promise<CopyResults>;
|
|
47
|
+
getManagedPaths(): ManagedPaths;
|
|
48
|
+
}
|
|
49
|
+
/** Select prompt option. */
|
|
50
|
+
export interface SelectOption {
|
|
51
|
+
label: string;
|
|
52
|
+
hint?: string;
|
|
53
|
+
value: string;
|
|
54
|
+
}
|
|
55
|
+
/** Scaffold result from MCP config. */
|
|
56
|
+
export interface ScaffoldResult {
|
|
57
|
+
path: string;
|
|
58
|
+
action: 'created' | 'skipped';
|
|
59
|
+
}
|
|
60
|
+
/** Validated task spec from YAML. */
|
|
61
|
+
export interface TaskSpec {
|
|
62
|
+
name: string;
|
|
63
|
+
concurrency: number;
|
|
64
|
+
on_failure: 'continue' | 'stop';
|
|
65
|
+
adapter: string;
|
|
66
|
+
tasks: Task[];
|
|
67
|
+
_verbose?: boolean;
|
|
68
|
+
}
|
|
69
|
+
/** A single task in the spec. */
|
|
70
|
+
export interface Task {
|
|
71
|
+
id: string;
|
|
72
|
+
prompt: string;
|
|
73
|
+
agent: string;
|
|
74
|
+
timeout: string;
|
|
75
|
+
depends_on: string[];
|
|
76
|
+
files: string[];
|
|
77
|
+
description: string;
|
|
78
|
+
_process?: ChildProcess;
|
|
79
|
+
}
|
|
80
|
+
/** Task execution status. */
|
|
81
|
+
export type TaskStatus = 'pending' | 'running' | 'done' | 'failed' | 'skipped' | 'timed-out';
|
|
82
|
+
/** Result of a single task execution. */
|
|
83
|
+
export interface TaskResult {
|
|
84
|
+
id: string;
|
|
85
|
+
status: TaskStatus;
|
|
86
|
+
duration: number;
|
|
87
|
+
output: string;
|
|
88
|
+
exitCode: number;
|
|
89
|
+
}
|
|
90
|
+
/** Final run report. */
|
|
91
|
+
export interface RunReport {
|
|
92
|
+
name: string;
|
|
93
|
+
startedAt: string;
|
|
94
|
+
completedAt: string;
|
|
95
|
+
duration: string;
|
|
96
|
+
summary: RunSummary;
|
|
97
|
+
tasks: TaskResult[];
|
|
98
|
+
}
|
|
99
|
+
/** Summary counts of task statuses. */
|
|
100
|
+
export interface RunSummary {
|
|
101
|
+
total: number;
|
|
102
|
+
done: number;
|
|
103
|
+
failed: number;
|
|
104
|
+
skipped: number;
|
|
105
|
+
'timed-out': number;
|
|
106
|
+
}
|
|
107
|
+
/** Agent runtime adapter for the run command. */
|
|
108
|
+
export interface AgentAdapter {
|
|
109
|
+
name: string;
|
|
110
|
+
isAvailable(): Promise<boolean>;
|
|
111
|
+
execute(_task: Task, _options?: ExecuteOptions): Promise<ExecuteResult>;
|
|
112
|
+
kill?(_task: Task): void;
|
|
113
|
+
}
|
|
114
|
+
/** Options for agent execution. */
|
|
115
|
+
export interface ExecuteOptions {
|
|
116
|
+
verbose?: boolean;
|
|
117
|
+
}
|
|
118
|
+
/** Result from an agent adapter execution. */
|
|
119
|
+
export interface ExecuteResult {
|
|
120
|
+
success: boolean;
|
|
121
|
+
output: string;
|
|
122
|
+
exitCode: number;
|
|
123
|
+
_timedOut?: boolean;
|
|
124
|
+
taskId?: string;
|
|
125
|
+
}
|
|
126
|
+
/** Reporter interface for the run command. */
|
|
127
|
+
export interface Reporter {
|
|
128
|
+
onTaskStart(_task: Task): void;
|
|
129
|
+
onTaskDone(_task: Task, _result: TaskResult): void;
|
|
130
|
+
onTaskSkipped(_task: Task, _reason: string): void;
|
|
131
|
+
onPhaseStart(_phase: number, _tasks: Task[]): void;
|
|
132
|
+
onComplete(_report: RunReport): Promise<void>;
|
|
133
|
+
}
|
|
134
|
+
/** Reporter options. */
|
|
135
|
+
export interface ReporterOptions {
|
|
136
|
+
reportDir?: string;
|
|
137
|
+
verbose?: boolean;
|
|
138
|
+
}
|
|
139
|
+
/** Parsed CLI args for the run command. */
|
|
140
|
+
export interface RunOptions {
|
|
141
|
+
file: string;
|
|
142
|
+
dryRun: boolean;
|
|
143
|
+
concurrency: number | null;
|
|
144
|
+
adapter: string | null;
|
|
145
|
+
reportDir: string | null;
|
|
146
|
+
verbose: boolean;
|
|
147
|
+
help: boolean;
|
|
148
|
+
}
|
|
149
|
+
/** Parse result from YAML block parser. */
|
|
150
|
+
export interface ParseResult {
|
|
151
|
+
value: unknown;
|
|
152
|
+
nextIndex: number;
|
|
153
|
+
}
|
|
154
|
+
/** Validation result. */
|
|
155
|
+
export interface ValidationResult {
|
|
156
|
+
valid: boolean;
|
|
157
|
+
errors: string[];
|
|
158
|
+
}
|
|
159
|
+
/** Timeout promise with cancel ability. */
|
|
160
|
+
export interface TimeoutHandle {
|
|
161
|
+
promise: Promise<ExecuteResult>;
|
|
162
|
+
clear: () => void;
|
|
163
|
+
}
|
|
164
|
+
/** Executor returned by createExecutor. */
|
|
165
|
+
export interface Executor {
|
|
166
|
+
run(): Promise<RunReport>;
|
|
167
|
+
getPhases(): Task[][];
|
|
168
|
+
}
|
|
169
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/cli/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/cli/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/cli/update.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,UAAU,EAAc,MAAM,YAAY,CAAA;AAWxD,wBAA8B,MAAM,CAAC,EACnC,OAAO,EACP,IAAI,GACL,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAwD5B"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { resolve } from 'node:path';
|
|
2
|
+
import { readFile } from 'node:fs/promises';
|
|
3
|
+
import { readManifest, writeManifest } from './manifest.js';
|
|
4
|
+
import { confirm, closePrompts } from './prompt.js';
|
|
5
|
+
const ADAPTERS = {
|
|
6
|
+
vscode: () => import('./adapters/vscode.js'),
|
|
7
|
+
cursor: () => import('./adapters/cursor.js'),
|
|
8
|
+
'claude-code': () => import('./adapters/claude-code.js'),
|
|
9
|
+
};
|
|
10
|
+
const VALID_IDES = Object.keys(ADAPTERS);
|
|
11
|
+
export default async function update({ pkgRoot, args, }) {
|
|
12
|
+
const projectRoot = process.cwd();
|
|
13
|
+
const manifest = await readManifest(projectRoot);
|
|
14
|
+
if (!manifest) {
|
|
15
|
+
console.error(' ✗ No OpenCastle installation found. Run "npx opencastle init" first.');
|
|
16
|
+
process.exit(1);
|
|
17
|
+
}
|
|
18
|
+
if (!manifest.ide || !VALID_IDES.includes(manifest.ide)) {
|
|
19
|
+
console.error(` ✗ Invalid IDE "${manifest.ide}" in .opencastle.json. Valid options: ${VALID_IDES.join(', ')}`);
|
|
20
|
+
process.exit(1);
|
|
21
|
+
}
|
|
22
|
+
const pkg = JSON.parse(await readFile(resolve(pkgRoot, 'package.json'), 'utf8'));
|
|
23
|
+
if (manifest.version === pkg.version && !args.includes('--force')) {
|
|
24
|
+
console.log(` Already up to date (v${pkg.version}).`);
|
|
25
|
+
return;
|
|
26
|
+
}
|
|
27
|
+
console.log(`\n 🏰 OpenCastle update: v${manifest.version} → v${pkg.version}\n`);
|
|
28
|
+
console.log(` IDE: ${manifest.ide}`);
|
|
29
|
+
console.log(' Framework files will be overwritten.');
|
|
30
|
+
console.log(' Customization files will be preserved.\n');
|
|
31
|
+
const proceed = await confirm('Proceed with update?');
|
|
32
|
+
if (!proceed) {
|
|
33
|
+
console.log(' Aborted.');
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
const adapter = await ADAPTERS[manifest.ide]();
|
|
37
|
+
const results = await adapter.update(pkgRoot, projectRoot);
|
|
38
|
+
// Update manifest
|
|
39
|
+
manifest.version = pkg.version;
|
|
40
|
+
manifest.updatedAt = new Date().toISOString();
|
|
41
|
+
manifest.managedPaths = adapter.getManagedPaths();
|
|
42
|
+
await writeManifest(projectRoot, manifest);
|
|
43
|
+
console.log(`\n ✓ Updated ${results.copied.length} framework files`);
|
|
44
|
+
if (results.created.length > 0) {
|
|
45
|
+
console.log(` + Created ${results.created.length} new files`);
|
|
46
|
+
}
|
|
47
|
+
console.log();
|
|
48
|
+
closePrompts();
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=update.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/cli/update.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "opencastle",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"description": "Multi-agent orchestration framework for AI coding assistants",
|
|
6
|
+
"bin": {
|
|
7
|
+
"opencastle": "bin/cli.mjs"
|
|
8
|
+
},
|
|
9
|
+
"files": [
|
|
10
|
+
"bin/",
|
|
11
|
+
"src/",
|
|
12
|
+
"dist/",
|
|
13
|
+
"README.md",
|
|
14
|
+
"LICENSE"
|
|
15
|
+
],
|
|
16
|
+
"keywords": [
|
|
17
|
+
"ai",
|
|
18
|
+
"agents",
|
|
19
|
+
"copilot",
|
|
20
|
+
"cursor",
|
|
21
|
+
"claude",
|
|
22
|
+
"orchestration",
|
|
23
|
+
"multi-agent",
|
|
24
|
+
"coding-assistant"
|
|
25
|
+
],
|
|
26
|
+
"repository": {
|
|
27
|
+
"type": "git",
|
|
28
|
+
"url": "git+https://github.com/etylsarin/opencastle.git"
|
|
29
|
+
},
|
|
30
|
+
"bugs": {
|
|
31
|
+
"url": "https://github.com/etylsarin/opencastle/issues"
|
|
32
|
+
},
|
|
33
|
+
"homepage": "https://www.opencastle.dev/",
|
|
34
|
+
"license": "MIT",
|
|
35
|
+
"author": "Filip Mares",
|
|
36
|
+
"scripts": {
|
|
37
|
+
"build:cli": "tsc",
|
|
38
|
+
"build:dashboard": "cd src/dashboard && npm run build",
|
|
39
|
+
"prepublishOnly": "npm run build:cli && npm run build:dashboard"
|
|
40
|
+
},
|
|
41
|
+
"engines": {
|
|
42
|
+
"node": ">=18"
|
|
43
|
+
},
|
|
44
|
+
"devDependencies": {
|
|
45
|
+
"typescript": "^5.7.0",
|
|
46
|
+
"@types/node": "^22.0.0"
|
|
47
|
+
}
|
|
48
|
+
}
|