spec-snake 0.0.1-beta.2 → 0.0.1-beta.3
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/dist/cli.js +2 -2
- package/dist/cli.js.map +2 -2
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
import { defineCommand as defineCommand3, runMain } from "citty";
|
|
5
5
|
|
|
6
6
|
// package.json
|
|
7
|
-
var version = "0.0.1-beta.
|
|
7
|
+
var version = "0.0.1-beta.3";
|
|
8
8
|
|
|
9
9
|
// src/cli/commands/init.ts
|
|
10
10
|
import * as fs from "node:fs";
|
|
@@ -246,7 +246,7 @@ var ScenarioBaseSchema = v.object({
|
|
|
246
246
|
id: v.string(),
|
|
247
247
|
name: v.string(),
|
|
248
248
|
steps: v.array(StepSchema),
|
|
249
|
-
prompt: v.
|
|
249
|
+
prompt: v.unknown(),
|
|
250
250
|
aiSettings: AiSettingsSchema
|
|
251
251
|
});
|
|
252
252
|
var ScenarioSchema = ScenarioBaseSchema;
|
package/dist/cli.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/cli/index.ts", "../package.json", "../src/cli/commands/init.ts", "../src/cli/commands/start.ts", "../src/schema.ts", "../src/server/api.ts", "../src/server/apps/docs.ts", "../src/server/helpers/docs/transform.ts", "../src/server/repositories/document.ts", "../src/server/helpers/docs/metadata.ts", "../src/server/usecases/docs/generate-doc.ts", "../src/server/apps/scenarios.ts", "../src/server/helpers/scenarios/build-form-defaults.ts", "../src/server/helpers/scenarios/build-section-info.ts"],
|
|
4
|
-
"sourcesContent": ["import { defineCommand, runMain } from 'citty';\n\nimport { version } from '../../package.json';\nimport { initCommand } from './commands/init';\nimport { startCommand } from './commands/start';\n\nconst main = defineCommand({\n meta: {\n name: 'spec-snake',\n version,\n description: 'AI-powered design document generator CLI',\n },\n subCommands: {\n init: initCommand,\n start: startCommand,\n },\n});\n\nrunMain(main);\n", "{\n \"name\": \"spec-snake\",\n \"version\": \"0.0.1-beta.2\",\n \"type\": \"module\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/cut0/spec-snake.git\"\n },\n \"publishConfig\": {\n \"access\": \"public\"\n },\n \"types\": \"./dist/types.d.ts\",\n \"main\": \"./dist/types.js\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/types.d.ts\",\n \"import\": \"./dist/types.js\",\n \"default\": \"./dist/types.js\"\n }\n },\n \"bin\": {\n \"spec-snake\": \"./dist/cli.js\"\n },\n \"files\": [\n \"dist\"\n ],\n \"scripts\": {\n \"build\": \"pnpm build:types && pnpm build:cli && pnpm build:client\",\n \"build:cli\": \"tsx scripts/build-cli.ts\",\n \"build:client\": \"vite build\",\n \"build:types\": \"tsc src/types.ts --declaration --outDir dist --skipLibCheck --module ESNext --moduleResolution bundler --target ES2022\",\n \"dev\": \"NODE_ENV=development SPEC_SNAKE_CONFIG=examples/local/spec-snake.config.ts vite\",\n \"prd\": \"pnpm build && pnpm build:client && node dist/cli.js\",\n \"i18n\": \"lingui extract && lingui compile\",\n \"i18n:compile\": \"lingui compile\",\n \"i18n:extract\": \"lingui extract\",\n \"lint:check\": \"biome check .\",\n \"lint:fix\": \"biome check --write .\",\n \"typecheck\": \"tsc --noEmit\",\n \"prepublishOnly\": \"pnpm build\",\n \"release\": \"pnpm build && changeset publish\"\n },\n \"dependencies\": {\n \"@anthropic-ai/claude-agent-sdk\": \"0.1.75\",\n \"@hono/node-server\": \"1.19.7\",\n \"citty\": \"0.1.6\",\n \"consola\": \"3.4.2\",\n \"hono\": \"4.11.1\",\n \"jiti\": \"2.6.1\",\n \"valibot\": \"1.2.0\"\n },\n \"devDependencies\": {\n \"@base-ui/react\": \"1.0.0\",\n \"@biomejs/biome\": \"1.9.4\",\n \"@changesets/cli\": \"2.28.1\",\n \"@hono/vite-dev-server\": \"0.23.0\",\n \"@hookform/resolvers\": \"5.2.2\",\n \"@lingui/babel-plugin-lingui-macro\": \"5.7.0\",\n \"@lingui/cli\": \"5.7.0\",\n \"@lingui/conf\": \"5.7.0\",\n \"@lingui/core\": \"5.7.0\",\n \"@lingui/react\": \"5.7.0\",\n \"@lingui/vite-plugin\": \"5.7.0\",\n \"@tailwindcss/typography\": \"0.5.19\",\n \"@tailwindcss/vite\": \"4.1.18\",\n \"@tanstack/react-query\": \"5.35.1\",\n \"@tanstack/react-router\": \"1.141.6\",\n \"@tanstack/router-plugin\": \"1.141.7\",\n \"@types/node\": \"^25.0.3\",\n \"@types/react\": \"19.1.8\",\n \"@types/react-dom\": \"19.1.6\",\n \"@vitejs/plugin-react\": \"4.5.2\",\n \"esbuild\": \"0.27.2\",\n \"motion\": \"12.23.26\",\n \"react\": \"19.2.3\",\n \"react-dom\": \"19.2.3\",\n \"react-hook-form\": \"7.69.0\",\n \"react-markdown\": \"10.1.0\",\n \"remark-gfm\": \"4.0.1\",\n \"tailwindcss\": \"4.1.18\",\n \"tsx\": \"4.20.6\",\n \"typescript\": \"5.8.3\",\n \"vite\": \"7.3.0\",\n \"zustand\": \"5.0.9\"\n },\n \"packageManager\": \"pnpm@10.26.2\"\n}\n", "import * as fs from 'node:fs';\nimport * as path from 'node:path';\n\nimport { defineCommand } from 'citty';\nimport { consola } from 'consola';\n\nconst CONFIG_TEMPLATE = `// For more detailed configuration examples, see:\n// https://github.com/cut0/spec-snake/blob/main/examples\n\nimport { defineConfig, defineScenario } from 'spec-snake';\n\nexport default defineConfig({\n scenarios: [\n defineScenario({\n id: 'default',\n name: 'Design Doc Generator',\n steps: [\n {\n slug: 'overview',\n title: 'Overview',\n description: 'Basic information about the feature',\n section: {\n type: 'single',\n name: 'overview',\n fields: [\n {\n type: 'input',\n id: 'title',\n label: 'Title',\n description: 'Feature title',\n placeholder: 'Enter feature title',\n required: true,\n },\n {\n type: 'textarea',\n id: 'description',\n label: 'Description',\n description: 'Detailed description of the feature',\n placeholder: 'Describe the feature...',\n rows: 4,\n },\n {\n type: 'select',\n id: 'priority',\n label: 'Priority',\n description: 'Feature priority level',\n placeholder: 'Select priority',\n options: [\n { value: 'high', label: 'High' },\n { value: 'medium', label: 'Medium' },\n { value: 'low', label: 'Low' },\n ],\n },\n ],\n },\n },\n ],\n overrides: {\n filename: (params) => {\n return \\`\\${params.timestamp}.md\\`;\n },\n },\n prompt:\n 'Generate a design doc based on the following input: {{INPUT_JSON}}',\n }),\n ],\n permissions: {\n allowSave: true,\n },\n});\n`;\n\nexport const initCommand = defineCommand({\n meta: {\n name: 'init',\n description:\n 'Initialize a new spec-snake.config.ts file in the current directory',\n },\n args: {\n output: {\n type: 'string',\n description: 'Output file path',\n alias: 'o',\n default: 'spec-snake.config.ts',\n },\n force: {\n type: 'boolean',\n description: 'Overwrite existing file',\n alias: 'f',\n default: false,\n },\n },\n async run({ args }) {\n const outputPath = path.resolve(process.cwd(), args.output);\n\n if (fs.existsSync(outputPath) && !args.force) {\n consola.error(`File already exists: ${outputPath}`);\n consola.info('Use --force (-f) to overwrite');\n process.exit(1);\n }\n\n try {\n fs.writeFileSync(outputPath, CONFIG_TEMPLATE, 'utf-8');\n consola.success(`Config file created: ${outputPath}`);\n } catch (error) {\n consola.error('Failed to create config file:', error);\n process.exit(1);\n }\n },\n});\n", "import * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport * as url from 'node:url';\n\nimport { serve } from '@hono/node-server';\nimport { serveStatic } from '@hono/node-server/serve-static';\nimport { defineCommand } from 'citty';\nimport { consola } from 'consola';\nimport { createJiti } from 'jiti';\n\nimport { type Config, safeParseConfig } from '../../definitions';\nimport { createApiServer } from '../../server/api';\n\nconst getDistClientDir = (): string => {\n const __filename = url.fileURLToPath(import.meta.url);\n const __dirname = path.dirname(__filename);\n\n // \u30D3\u30EB\u30C9\u5F8C: dist/cli.js \u2192 dist/client (\u540C\u3058 dist \u914D\u4E0B)\n // \u958B\u767A\u6642: src/cli/commands/start.ts \u2192 dist/client (3\u968E\u5C64\u4E0A\u306E dist \u914D\u4E0B)\n const isBuilt = __dirname.endsWith('/dist') || __dirname.includes('/dist/');\n return isBuilt\n ? path.resolve(__dirname, 'client')\n : path.resolve(__dirname, '../../../dist/client');\n};\n\nconst loadConfig = async (configPath: string): Promise<Config> => {\n const absolutePath = path.resolve(process.cwd(), configPath);\n\n if (!fs.existsSync(absolutePath)) {\n throw new Error(`Config file not found: ${absolutePath}`);\n }\n\n const jiti = createJiti(import.meta.url);\n const configModule = await jiti.import(absolutePath);\n const config = (configModule as { default: Config }).default;\n\n const result = safeParseConfig(config);\n if (!result.success) {\n const issues = result.issues.map((issue) => {\n const pathStr = issue.path?.map((p) => p.key).join('.') ?? '';\n return ` - ${pathStr}: ${issue.message}`;\n });\n throw new Error(`Invalid config:\\n${issues.join('\\n')}`);\n }\n\n // hooks \u306F valibot \u3067\u30D0\u30EA\u30C7\u30FC\u30B7\u30E7\u30F3\u3067\u304D\u306A\u3044\u305F\u3081\u3001\u5143\u306E config \u304B\u3089\u4FDD\u6301\n return config;\n};\n\nconst runServer = async (\n config: Config,\n options: { distDir: string; port: number; host: string },\n) => {\n consola.start('Starting server...');\n\n const app = createApiServer(config);\n\n app.use(\n '/*',\n serveStatic({\n root: options.distDir,\n rewriteRequestPath: (requestPath) => {\n const fullPath = path.join(options.distDir, requestPath);\n if (fs.existsSync(fullPath) && fs.statSync(fullPath).isFile()) {\n return requestPath;\n }\n return '/index.html';\n },\n }),\n );\n\n const server = serve(\n {\n fetch: app.fetch,\n port: options.port,\n hostname: options.host,\n },\n (info) => {\n const displayHost =\n info.address === '::1' || info.address === '127.0.0.1'\n ? 'localhost'\n : info.address;\n consola.success('Server started');\n consola.info(` \u279C Local: http://${displayHost}:${info.port}/`);\n },\n );\n\n const cleanup = () => {\n consola.info('Shutting down server...');\n server.close(() => {\n process.exit(0);\n });\n };\n\n process.on('SIGINT', cleanup);\n process.on('SIGTERM', cleanup);\n};\n\nexport const startCommand = defineCommand({\n meta: {\n name: 'start',\n description: 'Start the server with the specified config',\n },\n args: {\n config: {\n type: 'string',\n description: 'Path to config file',\n alias: 'c',\n default: 'spec-snake.config.ts',\n },\n port: {\n type: 'string',\n description: 'Port to run the server on',\n alias: 'p',\n default: '3000',\n },\n host: {\n type: 'string',\n description: 'Host to bind the server to',\n default: 'localhost',\n },\n },\n async run({ args }) {\n const configPath = args.config;\n const port = Number.parseInt(args.port, 10);\n\n consola.start(`Loading config from: ${configPath}`);\n\n try {\n const config = await loadConfig(configPath);\n consola.success(\n `Config loaded successfully (${config.scenarios.length} scenarios)`,\n );\n\n await runServer(config, {\n distDir: getDistClientDir(),\n port,\n host: args.host,\n });\n } catch (error) {\n if (error instanceof Error) {\n consola.error(error.message);\n } else {\n consola.error('Failed to start server:', error);\n }\n process.exit(1);\n }\n },\n});\n", "import * as v from 'valibot';\nimport type { Field, GridLayout, LayoutField } from './types';\n\n// =============================================================================\n// Type Guards\n// =============================================================================\n\nexport const isLayoutField = (field: Field): field is LayoutField => {\n return field.type === 'grid';\n};\n\n// =============================================================================\n// Form Field Schemas\n// =============================================================================\n\nconst FieldBaseSchema = v.object({\n id: v.string(),\n label: v.string(),\n description: v.string(),\n placeholder: v.optional(v.string()),\n required: v.optional(v.boolean()),\n});\n\nexport const SelectOptionSchema = v.object({\n value: v.string(),\n label: v.string(),\n});\n\nexport const InputFieldSchema = v.object({\n ...FieldBaseSchema.entries,\n type: v.literal('input'),\n inputType: v.optional(v.picklist(['text', 'date', 'url'])),\n suggestions: v.optional(v.array(v.string())),\n});\n\nexport const TextareaFieldSchema = v.object({\n ...FieldBaseSchema.entries,\n type: v.literal('textarea'),\n rows: v.optional(v.number()),\n});\n\nexport const SelectFieldSchema = v.object({\n ...FieldBaseSchema.entries,\n type: v.literal('select'),\n options: v.array(SelectOptionSchema),\n});\n\nexport const CheckboxFieldSchema = v.object({\n ...FieldBaseSchema.entries,\n type: v.literal('checkbox'),\n});\n\nexport const FormFieldSchema = v.union([\n InputFieldSchema,\n TextareaFieldSchema,\n SelectFieldSchema,\n CheckboxFieldSchema,\n]);\n\n// =============================================================================\n// Layout Schemas\n// =============================================================================\n\nexport const GridLayoutSchema: v.GenericSchema<GridLayout> = v.object({\n type: v.literal('grid'),\n columns: v.number(),\n fields: v.array(v.lazy(() => FieldSchema)),\n});\n\nexport const FieldSchema: v.GenericSchema<Field> = v.union([\n FormFieldSchema,\n GridLayoutSchema,\n]);\n\n// =============================================================================\n// Section Schemas\n// =============================================================================\n\nexport const SingleSectionSchema = v.object({\n type: v.literal('single'),\n name: v.string(),\n fields: v.array(FieldSchema),\n});\n\nexport const ArraySectionSchema = v.object({\n type: v.literal('array'),\n name: v.string(),\n fields: v.array(FieldSchema),\n minFieldCount: v.optional(v.number()),\n});\n\nexport const SectionSchema = v.union([SingleSectionSchema, ArraySectionSchema]);\n\n// =============================================================================\n// Step Schema\n// =============================================================================\n\nexport const StepSchema = v.object({\n slug: v.string(),\n title: v.string(),\n description: v.string(),\n section: SectionSchema,\n});\n\n// =============================================================================\n// AI Settings Schemas (Claude Agent SDK)\n// =============================================================================\n\nexport const McpServerConfigSchema = v.union([\n v.object({\n type: v.optional(v.literal('stdio')),\n command: v.string(),\n args: v.optional(v.array(v.string())),\n env: v.optional(v.record(v.string(), v.string())),\n }),\n v.object({\n type: v.literal('sse'),\n url: v.string(),\n headers: v.optional(v.record(v.string(), v.string())),\n }),\n v.object({\n type: v.literal('http'),\n url: v.string(),\n headers: v.optional(v.record(v.string(), v.string())),\n }),\n]);\n\nexport const AiSettingsSchema = v.optional(\n v.object({\n model: v.optional(v.string()),\n fallbackModel: v.optional(v.string()),\n maxThinkingTokens: v.optional(v.number()),\n maxTurns: v.optional(v.number()),\n maxBudgetUsd: v.optional(v.number()),\n allowedTools: v.optional(v.array(v.string())),\n disallowedTools: v.optional(v.array(v.string())),\n tools: v.optional(\n v.union([\n v.array(v.string()),\n v.object({\n type: v.literal('preset'),\n preset: v.literal('claude_code'),\n }),\n ]),\n ),\n permissionMode: v.optional(\n v.picklist([\n 'default',\n 'acceptEdits',\n 'bypassPermissions',\n 'plan',\n 'delegate',\n 'dontAsk',\n ]),\n ),\n allowDangerouslySkipPermissions: v.optional(v.boolean()),\n mcpServers: v.optional(v.record(v.string(), McpServerConfigSchema)),\n strictMcpConfig: v.optional(v.boolean()),\n }),\n);\n\n// =============================================================================\n// Scenario Schema\n// =============================================================================\n\nexport const ScenarioBaseSchema = v.object({\n id: v.string(),\n name: v.string(),\n steps: v.array(StepSchema),\n prompt: v.string(),\n aiSettings: AiSettingsSchema,\n});\n\nexport const ScenarioSchema = ScenarioBaseSchema;\n\n// =============================================================================\n// Configuration Schemas\n// =============================================================================\n\nexport const PermissionsSchema = v.object({\n allowSave: v.boolean(),\n});\n\nexport const ConfigSchema = v.object({\n scenarios: v.array(ScenarioSchema),\n permissions: PermissionsSchema,\n hosted: v.optional(v.boolean(), false),\n});\n\n// =============================================================================\n// Parser Functions\n// =============================================================================\n\nexport const parseConfig = (data: unknown) => {\n return v.parse(ConfigSchema, data);\n};\n\nexport const safeParseConfig = (data: unknown) => {\n return v.safeParse(ConfigSchema, data);\n};\n", "import { Hono } from 'hono';\n\nimport type { Config } from '../definitions';\n\nimport { createDocsApp } from './apps/docs';\nimport { createScenariosApp } from './apps/scenarios';\nimport { buildSectionInfoMap } from './helpers/scenarios/build-section-info';\n\nexport const createApiServer = (rawConfig: Config) => {\n const app = new Hono();\n\n // In hosted mode, allowSave is always false\n const config: Config = rawConfig.hosted\n ? {\n ...rawConfig,\n permissions: { ...rawConfig.permissions, allowSave: false },\n }\n : rawConfig;\n\n // \u30B7\u30CA\u30EA\u30AA\u3054\u3068\u306E\u60C5\u5831\u3092\u4E8B\u524D\u306B\u30D3\u30EB\u30C9\n const scenarioInfoMap = new Map(\n config.scenarios.map((scenario) => [\n scenario.id,\n {\n scenario,\n sectionInfoMap: buildSectionInfoMap(scenario.steps),\n },\n ]),\n );\n\n // Scenarios App\n const scenariosApp = createScenariosApp(config, scenarioInfoMap);\n\n // Docs App\n const docsApp = createDocsApp(config, scenarioInfoMap);\n\n // Mount sub-apps\n app.route('/', scenariosApp);\n app.route('/', docsApp);\n\n return app;\n};\n", "import { Hono } from 'hono';\nimport { createMiddleware } from 'hono/factory';\n\nimport type { Config } from '../../definitions';\nimport { transformFormData } from '../helpers/docs/transform';\nimport {\n getDocumentsForScenario,\n getFilename,\n readDocument,\n saveDocument,\n} from '../repositories/document';\nimport { generateDesignDoc } from '../usecases/docs/generate-doc';\n\nimport type { ScenarioInfoMapEntry } from './scenarios';\n\ntype Variables = {\n scenarioInfo: ScenarioInfoMapEntry;\n};\n\ntype CreateDocBody = {\n content: string;\n formData: Record<string, unknown>;\n};\n\ntype UpdateDocBody = {\n content: string;\n formData: Record<string, unknown>;\n};\n\nconst createScenarioMiddleware = (\n scenarioInfoMap: Map<string, ScenarioInfoMapEntry>,\n) =>\n createMiddleware<{ Variables: Variables }>(async (c, next) => {\n const scenarioId = c.req.param('scenarioId');\n\n if (scenarioId == null) {\n return c.json({ error: 'Scenario ID is required' }, 400);\n }\n\n const scenarioInfo = scenarioInfoMap.get(scenarioId);\n\n if (scenarioInfo == null) {\n return c.json({ error: 'Scenario not found' }, 404);\n }\n\n c.set('scenarioInfo', scenarioInfo);\n await next();\n });\n\nexport const createDocsApp = (\n config: Config,\n scenarioInfoMap: Map<string, ScenarioInfoMapEntry>,\n) => {\n const app = new Hono<{ Variables: Variables }>();\n\n app.use(\n '/api/scenarios/:scenarioId/*',\n createScenarioMiddleware(scenarioInfoMap),\n );\n\n app.get('/api/scenarios/:scenarioId/docs', async (c) => {\n const { scenario } = c.get('scenarioInfo');\n const docs = await getDocumentsForScenario(scenario);\n\n return c.json({ docs });\n });\n\n app.post('/api/scenarios/:scenarioId/docs/preview', async (c) => {\n const { scenario, sectionInfoMap } = c.get('scenarioInfo');\n\n const formData = (await c.req.json()) as Record<string, unknown>;\n const inputData = transformFormData(formData, sectionInfoMap);\n const content = await generateDesignDoc({ scenario, formData, inputData });\n\n if (scenario.hooks?.onPreview != null) {\n await scenario.hooks.onPreview({ formData, inputData, content });\n }\n\n return c.json({ success: true, content });\n });\n\n app.post('/api/scenarios/:scenarioId/docs', async (c) => {\n const scenarioId = c.req.param('scenarioId');\n const { scenario, sectionInfoMap } = c.get('scenarioInfo');\n\n if (!config.permissions.allowSave) {\n return c.json({ error: 'Save is not allowed' }, 403);\n }\n\n const { content, formData } = (await c.req.json()) as CreateDocBody;\n const inputData = transformFormData(formData, sectionInfoMap);\n const filename = getFilename(\n scenario,\n scenarioId,\n content,\n formData,\n inputData,\n );\n const { outputPath } = await saveDocument({\n scenario,\n scenarioId,\n filename,\n content,\n formData,\n });\n\n if (scenario.hooks?.onSave != null) {\n await scenario.hooks.onSave({\n content,\n filename,\n outputPath,\n formData,\n inputData,\n });\n }\n\n return c.json({ success: true, filename });\n });\n\n app.get('/api/scenarios/:scenarioId/docs/:filename', async (c) => {\n const filename = c.req.param('filename');\n const { scenario } = c.get('scenarioInfo');\n\n const result = await readDocument(scenario, filename);\n\n if (!result.success) {\n return c.json({ error: 'Document not found' }, 404);\n }\n\n return c.json({ doc: result.doc });\n });\n\n app.put('/api/scenarios/:scenarioId/docs/:filename', async (c) => {\n const scenarioId = c.req.param('scenarioId');\n const filename = c.req.param('filename');\n const { scenario, sectionInfoMap } = c.get('scenarioInfo');\n\n if (!config.permissions.allowSave) {\n return c.json({ error: 'Save is not allowed' }, 403);\n }\n\n const { content, formData } = (await c.req.json()) as UpdateDocBody;\n const inputData = transformFormData(formData, sectionInfoMap);\n const { outputPath } = await saveDocument({\n scenario,\n scenarioId,\n filename,\n content,\n formData,\n });\n\n if (scenario.hooks?.onSave != null) {\n await scenario.hooks.onSave({\n content,\n filename,\n outputPath,\n formData,\n inputData,\n });\n }\n\n return c.json({ success: true, filename });\n });\n\n return app;\n};\n", "import type { InputData } from '../../../definitions';\nimport type { SectionInfo } from '../scenarios/build-section-info';\n\nexport const transformFormData = (\n body: Record<string, unknown>,\n sectionInfoMap: Map<string, SectionInfo>,\n): InputData => {\n const items: InputData['items'] = [];\n\n for (const [sectionName, sectionValue] of Object.entries(body)) {\n const sectionInfo = sectionInfoMap.get(sectionName);\n\n if (sectionInfo == null) {\n continue;\n }\n\n const fieldInfoMap = new Map(sectionInfo.fields.map((f) => [f.id, f]));\n\n const values = (\n Array.isArray(sectionValue) ? sectionValue : [sectionValue]\n ).map((item: Record<string, unknown>) => {\n const itemValues: Array<{\n label: string;\n description: string;\n value: unknown;\n }> = Object.entries(item)\n .map(([fieldId, fieldValue]) => {\n const fieldInfo = fieldInfoMap.get(fieldId);\n if (fieldInfo) {\n return {\n label: fieldInfo.label,\n description: fieldInfo.description,\n value: fieldValue,\n };\n }\n return null;\n })\n .filter((value) => value != null);\n\n return itemValues;\n });\n\n items.push({\n title: sectionInfo.title,\n description: sectionInfo.description,\n values,\n });\n }\n\n return { items };\n};\n", "import { mkdir, readFile, readdir, writeFile } from 'node:fs/promises';\nimport { join } from 'node:path';\n\nimport type { InputData, Scenario } from '../../definitions';\nimport {\n type DocumentWithMetadata,\n addMetadataToContent,\n parseMetadata,\n} from '../helpers/docs/metadata';\n\nexport const getOutputDir = (scenario: Scenario): string => {\n return scenario.outputDir ?? join(process.cwd(), 'output');\n};\n\ntype ReadDocumentResult =\n | { success: true; doc: DocumentWithMetadata }\n | { success: false; error: 'not_found' | 'scenario_mismatch' };\n\nexport const readDocument = async (\n scenario: Scenario,\n filename: string,\n): Promise<ReadDocumentResult> => {\n const outputDir = getOutputDir(scenario);\n const filePath = join(outputDir, filename);\n\n try {\n const rawContent = await readFile(filePath, 'utf-8');\n const { metadata, content } = parseMetadata(rawContent);\n\n if (metadata?.scenarioId !== scenario.id) {\n return { success: false, error: 'scenario_mismatch' };\n }\n\n return {\n success: true,\n doc: { filename, content, metadata },\n };\n } catch {\n return { success: false, error: 'not_found' };\n }\n};\n\nexport const getDocumentsForScenario = async (\n scenario: Scenario,\n): Promise<DocumentWithMetadata[]> => {\n const outputDir = getOutputDir(scenario);\n\n try {\n const files = await readdir(outputDir);\n const mdFiles = files.filter((file) => file.endsWith('.md'));\n\n const docs = await Promise.all(\n mdFiles.map(async (filename) => {\n const result = await readDocument(scenario, filename);\n return result.success ? result.doc : null;\n }),\n );\n\n return docs.filter((doc) => doc != null);\n } catch {\n return [];\n }\n};\n\ntype SaveDocumentOptions = {\n scenario: Scenario;\n scenarioId: string;\n filename: string;\n content: string;\n formData: Record<string, unknown>;\n};\n\nexport const saveDocument = async ({\n scenario,\n scenarioId,\n filename,\n content,\n formData,\n}: SaveDocumentOptions): Promise<{ outputPath: string }> => {\n const outputDir = getOutputDir(scenario);\n const outputPath = join(outputDir, filename);\n\n const contentWithMetadata = addMetadataToContent(content, {\n scenarioId,\n formData,\n });\n\n await mkdir(outputDir, { recursive: true });\n await writeFile(outputPath, contentWithMetadata, 'utf-8');\n\n return { outputPath };\n};\n\nexport const getFilename = (\n scenario: Scenario,\n scenarioId: string,\n content: string,\n formData: Record<string, unknown>,\n inputData: InputData,\n): string => {\n const timestamp = new Date().toISOString().replace(/[:.]/g, '-');\n\n const filenameOverride = scenario.overrides?.filename;\n if (filenameOverride != null) {\n return typeof filenameOverride === 'function'\n ? filenameOverride({\n scenarioId,\n timestamp,\n content,\n formData,\n inputData,\n })\n : filenameOverride;\n }\n\n return `design-doc-${scenarioId}-${timestamp}.md`;\n};\n", "export type DocumentMetadata = {\n scenarioId: string;\n formData: Record<string, unknown>;\n};\n\nexport type DocumentWithMetadata = {\n filename: string;\n content: string;\n metadata: DocumentMetadata | null;\n};\n\nconst METADATA_START = '<!-- design-docs-metadata';\nconst METADATA_END = '-->';\n\nexport const serializeMetadata = (metadata: DocumentMetadata): string => {\n return `${METADATA_START}\\n${JSON.stringify(metadata, null, 2)}\\n${METADATA_END}`;\n};\n\nexport const parseMetadata = (\n content: string,\n): { metadata: DocumentMetadata | null; content: string } => {\n const metadataStartIndex = content.lastIndexOf(METADATA_START);\n if (metadataStartIndex === -1) {\n return { metadata: null, content };\n }\n\n const metadataEndIndex = content.indexOf(METADATA_END, metadataStartIndex);\n if (metadataEndIndex === -1) {\n return { metadata: null, content };\n }\n\n try {\n const metadataJson = content\n .slice(metadataStartIndex + METADATA_START.length, metadataEndIndex)\n .trim();\n const metadata = JSON.parse(metadataJson) as DocumentMetadata;\n const cleanContent = content.slice(0, metadataStartIndex).trim();\n return { metadata, content: cleanContent };\n } catch {\n return { metadata: null, content };\n }\n};\n\nexport const addMetadataToContent = (\n content: string,\n metadata: DocumentMetadata,\n): string => {\n return `${content}\\n\\n${serializeMetadata(metadata)}`;\n};\n", "import {\n type Options,\n type SDKResultMessage,\n query,\n} from '@anthropic-ai/claude-agent-sdk';\n\nimport type { InputData, Scenario } from '../../../definitions';\n\ntype GenerateDesignDocParams = {\n scenario: Scenario;\n formData: Record<string, unknown>;\n inputData: InputData;\n};\n\nexport const generateDesignDoc = async ({\n scenario,\n formData,\n inputData,\n}: GenerateDesignDocParams): Promise<string> => {\n const promptTemplate =\n typeof scenario.prompt === 'function'\n ? scenario.prompt({ formData, inputData })\n : scenario.prompt;\n const prompt = promptTemplate.replace(\n '{{INPUT_JSON}}',\n JSON.stringify(inputData, null, 2),\n );\n\n let message: SDKResultMessage | null = null;\n\n for await (const msg of query({\n prompt,\n options: scenario.aiSettings as Options,\n })) {\n if (msg.type === 'result' && msg.subtype === 'success') {\n message = msg;\n }\n }\n\n if (message == null) {\n throw new Error('Query failed');\n }\n\n return message.result;\n};\n", "import { Hono } from 'hono';\n\nimport type { Config, Scenario } from '../../definitions';\nimport { buildFormDefaultValues } from '../helpers/scenarios/build-form-defaults';\nimport type { buildSectionInfoMap } from '../helpers/scenarios/build-section-info';\n\nexport type ScenarioInfo = {\n sectionInfoMap: ReturnType<typeof buildSectionInfoMap>;\n};\n\nexport type ScenarioInfoMapEntry = {\n scenario: Scenario;\n sectionInfoMap: ReturnType<typeof buildSectionInfoMap>;\n};\n\nexport const createScenariosApp = (\n config: Config,\n scenarioInfoMap: Map<string, ScenarioInfoMapEntry>,\n) => {\n const app = new Hono();\n\n // \u5168\u30B7\u30CA\u30EA\u30AA\u53D6\u5F97\n app.get('/api/scenarios', (c) => {\n return c.json({\n scenarios: config.scenarios,\n });\n });\n\n // \u5358\u4E00\u30B7\u30CA\u30EA\u30AA\u53D6\u5F97\n app.get('/api/scenarios/:scenarioId', (c) => {\n const scenarioId = c.req.param('scenarioId');\n const scenarioInfo = scenarioInfoMap.get(scenarioId);\n\n if (scenarioInfo == null) {\n return c.json({ error: 'Scenario not found' }, 404);\n }\n\n const formDefaultValues = buildFormDefaultValues(\n scenarioInfo.scenario.steps,\n );\n\n return c.json({\n scenario: scenarioInfo.scenario,\n formDefaultValues,\n permissions: config.permissions,\n });\n });\n\n return app;\n};\n", "import { type Field, type Step, isLayoutField } from '../../../definitions';\n\nexport const buildFieldDefaults = (\n fields: Field[],\n): Record<string, unknown> => {\n const getFieldDefaultValue = (field: Field): unknown => {\n if (isLayoutField(field)) {\n return undefined;\n }\n switch (field.type) {\n case 'checkbox':\n return false;\n default:\n return '';\n }\n };\n\n const defaults: Record<string, unknown> = {};\n for (const field of fields) {\n if (isLayoutField(field)) {\n Object.assign(defaults, buildFieldDefaults(field.fields));\n } else {\n defaults[field.id] = getFieldDefaultValue(field);\n }\n }\n return defaults;\n};\n\nexport const buildFormDefaultValues = (\n steps: Step[],\n): Record<string, unknown> => {\n const defaults: Record<string, unknown> = {};\n for (const config of steps) {\n if (config.section.type === 'single') {\n defaults[config.section.name] = buildFieldDefaults(config.section.fields);\n } else {\n const minCount = config.section.minFieldCount ?? 1;\n defaults[config.section.name] = Array.from({ length: minCount }, () =>\n buildFieldDefaults(config.section.fields),\n );\n }\n }\n return defaults;\n};\n", "import { type Field, type Step, isLayoutField } from '../../../definitions';\n\nexport type FieldInfo = {\n id: string;\n label: string;\n description: string;\n};\n\nexport type SectionInfo = {\n name: string;\n title: string;\n description: string;\n fields: FieldInfo[];\n};\n\nexport const extractFieldInfos = (fields: Field[]): FieldInfo[] => {\n const result: FieldInfo[] = [];\n for (const field of fields) {\n if (isLayoutField(field)) {\n result.push(...extractFieldInfos(field.fields));\n } else {\n result.push({\n id: field.id,\n label: field.label,\n description: field.description,\n });\n }\n }\n return result;\n};\n\nexport const buildSectionInfoMap = (\n steps: Step[],\n): Map<string, SectionInfo> => {\n const sectionMap = new Map<string, SectionInfo>(\n steps.map((step) => [\n step.section.name,\n {\n name: step.section.name,\n title: step.title,\n description: step.description,\n fields: extractFieldInfos(step.section.fields),\n },\n ]),\n );\n\n return sectionMap;\n};\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import { defineCommand, runMain } from 'citty';\n\nimport { version } from '../../package.json';\nimport { initCommand } from './commands/init';\nimport { startCommand } from './commands/start';\n\nconst main = defineCommand({\n meta: {\n name: 'spec-snake',\n version,\n description: 'AI-powered design document generator CLI',\n },\n subCommands: {\n init: initCommand,\n start: startCommand,\n },\n});\n\nrunMain(main);\n", "{\n \"name\": \"spec-snake\",\n \"version\": \"0.0.1-beta.3\",\n \"type\": \"module\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/cut0/spec-snake.git\"\n },\n \"publishConfig\": {\n \"access\": \"public\"\n },\n \"types\": \"./dist/types.d.ts\",\n \"main\": \"./dist/types.js\",\n \"exports\": {\n \".\": {\n \"types\": \"./dist/types.d.ts\",\n \"import\": \"./dist/types.js\",\n \"default\": \"./dist/types.js\"\n }\n },\n \"bin\": {\n \"spec-snake\": \"./dist/cli.js\"\n },\n \"files\": [\n \"dist\"\n ],\n \"scripts\": {\n \"build\": \"pnpm build:types && pnpm build:cli && pnpm build:client\",\n \"build:cli\": \"tsx scripts/build-cli.ts\",\n \"build:client\": \"vite build\",\n \"build:types\": \"tsc src/types.ts --declaration --outDir dist --skipLibCheck --module ESNext --moduleResolution bundler --target ES2022\",\n \"dev\": \"NODE_ENV=development SPEC_SNAKE_CONFIG=examples/local/spec-snake.config.ts vite\",\n \"prd\": \"pnpm build && pnpm build:client && node dist/cli.js\",\n \"i18n\": \"lingui extract && lingui compile\",\n \"i18n:compile\": \"lingui compile\",\n \"i18n:extract\": \"lingui extract\",\n \"lint:check\": \"biome check .\",\n \"lint:fix\": \"biome check --write .\",\n \"typecheck\": \"tsc --noEmit\",\n \"prepublishOnly\": \"pnpm build\",\n \"release\": \"pnpm build && changeset publish\"\n },\n \"dependencies\": {\n \"@anthropic-ai/claude-agent-sdk\": \"0.1.75\",\n \"@hono/node-server\": \"1.19.7\",\n \"citty\": \"0.1.6\",\n \"consola\": \"3.4.2\",\n \"hono\": \"4.11.1\",\n \"jiti\": \"2.6.1\",\n \"valibot\": \"1.2.0\"\n },\n \"devDependencies\": {\n \"@base-ui/react\": \"1.0.0\",\n \"@biomejs/biome\": \"1.9.4\",\n \"@changesets/cli\": \"2.28.1\",\n \"@hono/vite-dev-server\": \"0.23.0\",\n \"@hookform/resolvers\": \"5.2.2\",\n \"@lingui/babel-plugin-lingui-macro\": \"5.7.0\",\n \"@lingui/cli\": \"5.7.0\",\n \"@lingui/conf\": \"5.7.0\",\n \"@lingui/core\": \"5.7.0\",\n \"@lingui/react\": \"5.7.0\",\n \"@lingui/vite-plugin\": \"5.7.0\",\n \"@tailwindcss/typography\": \"0.5.19\",\n \"@tailwindcss/vite\": \"4.1.18\",\n \"@tanstack/react-query\": \"5.35.1\",\n \"@tanstack/react-router\": \"1.141.6\",\n \"@tanstack/router-plugin\": \"1.141.7\",\n \"@types/node\": \"^25.0.3\",\n \"@types/react\": \"19.1.8\",\n \"@types/react-dom\": \"19.1.6\",\n \"@vitejs/plugin-react\": \"4.5.2\",\n \"esbuild\": \"0.27.2\",\n \"motion\": \"12.23.26\",\n \"react\": \"19.2.3\",\n \"react-dom\": \"19.2.3\",\n \"react-hook-form\": \"7.69.0\",\n \"react-markdown\": \"10.1.0\",\n \"remark-gfm\": \"4.0.1\",\n \"tailwindcss\": \"4.1.18\",\n \"tsx\": \"4.20.6\",\n \"typescript\": \"5.8.3\",\n \"vite\": \"7.3.0\",\n \"zustand\": \"5.0.9\"\n },\n \"packageManager\": \"pnpm@10.26.2\"\n}\n", "import * as fs from 'node:fs';\nimport * as path from 'node:path';\n\nimport { defineCommand } from 'citty';\nimport { consola } from 'consola';\n\nconst CONFIG_TEMPLATE = `// For more detailed configuration examples, see:\n// https://github.com/cut0/spec-snake/blob/main/examples\n\nimport { defineConfig, defineScenario } from 'spec-snake';\n\nexport default defineConfig({\n scenarios: [\n defineScenario({\n id: 'default',\n name: 'Design Doc Generator',\n steps: [\n {\n slug: 'overview',\n title: 'Overview',\n description: 'Basic information about the feature',\n section: {\n type: 'single',\n name: 'overview',\n fields: [\n {\n type: 'input',\n id: 'title',\n label: 'Title',\n description: 'Feature title',\n placeholder: 'Enter feature title',\n required: true,\n },\n {\n type: 'textarea',\n id: 'description',\n label: 'Description',\n description: 'Detailed description of the feature',\n placeholder: 'Describe the feature...',\n rows: 4,\n },\n {\n type: 'select',\n id: 'priority',\n label: 'Priority',\n description: 'Feature priority level',\n placeholder: 'Select priority',\n options: [\n { value: 'high', label: 'High' },\n { value: 'medium', label: 'Medium' },\n { value: 'low', label: 'Low' },\n ],\n },\n ],\n },\n },\n ],\n overrides: {\n filename: (params) => {\n return \\`\\${params.timestamp}.md\\`;\n },\n },\n prompt:\n 'Generate a design doc based on the following input: {{INPUT_JSON}}',\n }),\n ],\n permissions: {\n allowSave: true,\n },\n});\n`;\n\nexport const initCommand = defineCommand({\n meta: {\n name: 'init',\n description:\n 'Initialize a new spec-snake.config.ts file in the current directory',\n },\n args: {\n output: {\n type: 'string',\n description: 'Output file path',\n alias: 'o',\n default: 'spec-snake.config.ts',\n },\n force: {\n type: 'boolean',\n description: 'Overwrite existing file',\n alias: 'f',\n default: false,\n },\n },\n async run({ args }) {\n const outputPath = path.resolve(process.cwd(), args.output);\n\n if (fs.existsSync(outputPath) && !args.force) {\n consola.error(`File already exists: ${outputPath}`);\n consola.info('Use --force (-f) to overwrite');\n process.exit(1);\n }\n\n try {\n fs.writeFileSync(outputPath, CONFIG_TEMPLATE, 'utf-8');\n consola.success(`Config file created: ${outputPath}`);\n } catch (error) {\n consola.error('Failed to create config file:', error);\n process.exit(1);\n }\n },\n});\n", "import * as fs from 'node:fs';\nimport * as path from 'node:path';\nimport * as url from 'node:url';\n\nimport { serve } from '@hono/node-server';\nimport { serveStatic } from '@hono/node-server/serve-static';\nimport { defineCommand } from 'citty';\nimport { consola } from 'consola';\nimport { createJiti } from 'jiti';\n\nimport { type Config, safeParseConfig } from '../../definitions';\nimport { createApiServer } from '../../server/api';\n\nconst getDistClientDir = (): string => {\n const __filename = url.fileURLToPath(import.meta.url);\n const __dirname = path.dirname(__filename);\n\n // \u30D3\u30EB\u30C9\u5F8C: dist/cli.js \u2192 dist/client (\u540C\u3058 dist \u914D\u4E0B)\n // \u958B\u767A\u6642: src/cli/commands/start.ts \u2192 dist/client (3\u968E\u5C64\u4E0A\u306E dist \u914D\u4E0B)\n const isBuilt = __dirname.endsWith('/dist') || __dirname.includes('/dist/');\n return isBuilt\n ? path.resolve(__dirname, 'client')\n : path.resolve(__dirname, '../../../dist/client');\n};\n\nconst loadConfig = async (configPath: string): Promise<Config> => {\n const absolutePath = path.resolve(process.cwd(), configPath);\n\n if (!fs.existsSync(absolutePath)) {\n throw new Error(`Config file not found: ${absolutePath}`);\n }\n\n const jiti = createJiti(import.meta.url);\n const configModule = await jiti.import(absolutePath);\n const config = (configModule as { default: Config }).default;\n\n const result = safeParseConfig(config);\n if (!result.success) {\n const issues = result.issues.map((issue) => {\n const pathStr = issue.path?.map((p) => p.key).join('.') ?? '';\n return ` - ${pathStr}: ${issue.message}`;\n });\n throw new Error(`Invalid config:\\n${issues.join('\\n')}`);\n }\n\n // hooks \u306F valibot \u3067\u30D0\u30EA\u30C7\u30FC\u30B7\u30E7\u30F3\u3067\u304D\u306A\u3044\u305F\u3081\u3001\u5143\u306E config \u304B\u3089\u4FDD\u6301\n return config;\n};\n\nconst runServer = async (\n config: Config,\n options: { distDir: string; port: number; host: string },\n) => {\n consola.start('Starting server...');\n\n const app = createApiServer(config);\n\n app.use(\n '/*',\n serveStatic({\n root: options.distDir,\n rewriteRequestPath: (requestPath) => {\n const fullPath = path.join(options.distDir, requestPath);\n if (fs.existsSync(fullPath) && fs.statSync(fullPath).isFile()) {\n return requestPath;\n }\n return '/index.html';\n },\n }),\n );\n\n const server = serve(\n {\n fetch: app.fetch,\n port: options.port,\n hostname: options.host,\n },\n (info) => {\n const displayHost =\n info.address === '::1' || info.address === '127.0.0.1'\n ? 'localhost'\n : info.address;\n consola.success('Server started');\n consola.info(` \u279C Local: http://${displayHost}:${info.port}/`);\n },\n );\n\n const cleanup = () => {\n consola.info('Shutting down server...');\n server.close(() => {\n process.exit(0);\n });\n };\n\n process.on('SIGINT', cleanup);\n process.on('SIGTERM', cleanup);\n};\n\nexport const startCommand = defineCommand({\n meta: {\n name: 'start',\n description: 'Start the server with the specified config',\n },\n args: {\n config: {\n type: 'string',\n description: 'Path to config file',\n alias: 'c',\n default: 'spec-snake.config.ts',\n },\n port: {\n type: 'string',\n description: 'Port to run the server on',\n alias: 'p',\n default: '3000',\n },\n host: {\n type: 'string',\n description: 'Host to bind the server to',\n default: 'localhost',\n },\n },\n async run({ args }) {\n const configPath = args.config;\n const port = Number.parseInt(args.port, 10);\n\n consola.start(`Loading config from: ${configPath}`);\n\n try {\n const config = await loadConfig(configPath);\n consola.success(\n `Config loaded successfully (${config.scenarios.length} scenarios)`,\n );\n\n await runServer(config, {\n distDir: getDistClientDir(),\n port,\n host: args.host,\n });\n } catch (error) {\n if (error instanceof Error) {\n consola.error(error.message);\n } else {\n consola.error('Failed to start server:', error);\n }\n process.exit(1);\n }\n },\n});\n", "import * as v from 'valibot';\nimport type { Field, GridLayout, LayoutField } from './types';\n\n// =============================================================================\n// Type Guards\n// =============================================================================\n\nexport const isLayoutField = (field: Field): field is LayoutField => {\n return field.type === 'grid';\n};\n\n// =============================================================================\n// Form Field Schemas\n// =============================================================================\n\nconst FieldBaseSchema = v.object({\n id: v.string(),\n label: v.string(),\n description: v.string(),\n placeholder: v.optional(v.string()),\n required: v.optional(v.boolean()),\n});\n\nexport const SelectOptionSchema = v.object({\n value: v.string(),\n label: v.string(),\n});\n\nexport const InputFieldSchema = v.object({\n ...FieldBaseSchema.entries,\n type: v.literal('input'),\n inputType: v.optional(v.picklist(['text', 'date', 'url'])),\n suggestions: v.optional(v.array(v.string())),\n});\n\nexport const TextareaFieldSchema = v.object({\n ...FieldBaseSchema.entries,\n type: v.literal('textarea'),\n rows: v.optional(v.number()),\n});\n\nexport const SelectFieldSchema = v.object({\n ...FieldBaseSchema.entries,\n type: v.literal('select'),\n options: v.array(SelectOptionSchema),\n});\n\nexport const CheckboxFieldSchema = v.object({\n ...FieldBaseSchema.entries,\n type: v.literal('checkbox'),\n});\n\nexport const FormFieldSchema = v.union([\n InputFieldSchema,\n TextareaFieldSchema,\n SelectFieldSchema,\n CheckboxFieldSchema,\n]);\n\n// =============================================================================\n// Layout Schemas\n// =============================================================================\n\nexport const GridLayoutSchema: v.GenericSchema<GridLayout> = v.object({\n type: v.literal('grid'),\n columns: v.number(),\n fields: v.array(v.lazy(() => FieldSchema)),\n});\n\nexport const FieldSchema: v.GenericSchema<Field> = v.union([\n FormFieldSchema,\n GridLayoutSchema,\n]);\n\n// =============================================================================\n// Section Schemas\n// =============================================================================\n\nexport const SingleSectionSchema = v.object({\n type: v.literal('single'),\n name: v.string(),\n fields: v.array(FieldSchema),\n});\n\nexport const ArraySectionSchema = v.object({\n type: v.literal('array'),\n name: v.string(),\n fields: v.array(FieldSchema),\n minFieldCount: v.optional(v.number()),\n});\n\nexport const SectionSchema = v.union([SingleSectionSchema, ArraySectionSchema]);\n\n// =============================================================================\n// Step Schema\n// =============================================================================\n\nexport const StepSchema = v.object({\n slug: v.string(),\n title: v.string(),\n description: v.string(),\n section: SectionSchema,\n});\n\n// =============================================================================\n// AI Settings Schemas (Claude Agent SDK)\n// =============================================================================\n\nexport const McpServerConfigSchema = v.union([\n v.object({\n type: v.optional(v.literal('stdio')),\n command: v.string(),\n args: v.optional(v.array(v.string())),\n env: v.optional(v.record(v.string(), v.string())),\n }),\n v.object({\n type: v.literal('sse'),\n url: v.string(),\n headers: v.optional(v.record(v.string(), v.string())),\n }),\n v.object({\n type: v.literal('http'),\n url: v.string(),\n headers: v.optional(v.record(v.string(), v.string())),\n }),\n]);\n\nexport const AiSettingsSchema = v.optional(\n v.object({\n model: v.optional(v.string()),\n fallbackModel: v.optional(v.string()),\n maxThinkingTokens: v.optional(v.number()),\n maxTurns: v.optional(v.number()),\n maxBudgetUsd: v.optional(v.number()),\n allowedTools: v.optional(v.array(v.string())),\n disallowedTools: v.optional(v.array(v.string())),\n tools: v.optional(\n v.union([\n v.array(v.string()),\n v.object({\n type: v.literal('preset'),\n preset: v.literal('claude_code'),\n }),\n ]),\n ),\n permissionMode: v.optional(\n v.picklist([\n 'default',\n 'acceptEdits',\n 'bypassPermissions',\n 'plan',\n 'delegate',\n 'dontAsk',\n ]),\n ),\n allowDangerouslySkipPermissions: v.optional(v.boolean()),\n mcpServers: v.optional(v.record(v.string(), McpServerConfigSchema)),\n strictMcpConfig: v.optional(v.boolean()),\n }),\n);\n\n// =============================================================================\n// Scenario Schema\n// =============================================================================\n\nexport const ScenarioBaseSchema = v.object({\n id: v.string(),\n name: v.string(),\n steps: v.array(StepSchema),\n prompt: v.unknown(),\n aiSettings: AiSettingsSchema,\n});\n\nexport const ScenarioSchema = ScenarioBaseSchema;\n\n// =============================================================================\n// Configuration Schemas\n// =============================================================================\n\nexport const PermissionsSchema = v.object({\n allowSave: v.boolean(),\n});\n\nexport const ConfigSchema = v.object({\n scenarios: v.array(ScenarioSchema),\n permissions: PermissionsSchema,\n hosted: v.optional(v.boolean(), false),\n});\n\n// =============================================================================\n// Parser Functions\n// =============================================================================\n\nexport const parseConfig = (data: unknown) => {\n return v.parse(ConfigSchema, data);\n};\n\nexport const safeParseConfig = (data: unknown) => {\n return v.safeParse(ConfigSchema, data);\n};\n", "import { Hono } from 'hono';\n\nimport type { Config } from '../definitions';\n\nimport { createDocsApp } from './apps/docs';\nimport { createScenariosApp } from './apps/scenarios';\nimport { buildSectionInfoMap } from './helpers/scenarios/build-section-info';\n\nexport const createApiServer = (rawConfig: Config) => {\n const app = new Hono();\n\n // In hosted mode, allowSave is always false\n const config: Config = rawConfig.hosted\n ? {\n ...rawConfig,\n permissions: { ...rawConfig.permissions, allowSave: false },\n }\n : rawConfig;\n\n // \u30B7\u30CA\u30EA\u30AA\u3054\u3068\u306E\u60C5\u5831\u3092\u4E8B\u524D\u306B\u30D3\u30EB\u30C9\n const scenarioInfoMap = new Map(\n config.scenarios.map((scenario) => [\n scenario.id,\n {\n scenario,\n sectionInfoMap: buildSectionInfoMap(scenario.steps),\n },\n ]),\n );\n\n // Scenarios App\n const scenariosApp = createScenariosApp(config, scenarioInfoMap);\n\n // Docs App\n const docsApp = createDocsApp(config, scenarioInfoMap);\n\n // Mount sub-apps\n app.route('/', scenariosApp);\n app.route('/', docsApp);\n\n return app;\n};\n", "import { Hono } from 'hono';\nimport { createMiddleware } from 'hono/factory';\n\nimport type { Config } from '../../definitions';\nimport { transformFormData } from '../helpers/docs/transform';\nimport {\n getDocumentsForScenario,\n getFilename,\n readDocument,\n saveDocument,\n} from '../repositories/document';\nimport { generateDesignDoc } from '../usecases/docs/generate-doc';\n\nimport type { ScenarioInfoMapEntry } from './scenarios';\n\ntype Variables = {\n scenarioInfo: ScenarioInfoMapEntry;\n};\n\ntype CreateDocBody = {\n content: string;\n formData: Record<string, unknown>;\n};\n\ntype UpdateDocBody = {\n content: string;\n formData: Record<string, unknown>;\n};\n\nconst createScenarioMiddleware = (\n scenarioInfoMap: Map<string, ScenarioInfoMapEntry>,\n) =>\n createMiddleware<{ Variables: Variables }>(async (c, next) => {\n const scenarioId = c.req.param('scenarioId');\n\n if (scenarioId == null) {\n return c.json({ error: 'Scenario ID is required' }, 400);\n }\n\n const scenarioInfo = scenarioInfoMap.get(scenarioId);\n\n if (scenarioInfo == null) {\n return c.json({ error: 'Scenario not found' }, 404);\n }\n\n c.set('scenarioInfo', scenarioInfo);\n await next();\n });\n\nexport const createDocsApp = (\n config: Config,\n scenarioInfoMap: Map<string, ScenarioInfoMapEntry>,\n) => {\n const app = new Hono<{ Variables: Variables }>();\n\n app.use(\n '/api/scenarios/:scenarioId/*',\n createScenarioMiddleware(scenarioInfoMap),\n );\n\n app.get('/api/scenarios/:scenarioId/docs', async (c) => {\n const { scenario } = c.get('scenarioInfo');\n const docs = await getDocumentsForScenario(scenario);\n\n return c.json({ docs });\n });\n\n app.post('/api/scenarios/:scenarioId/docs/preview', async (c) => {\n const { scenario, sectionInfoMap } = c.get('scenarioInfo');\n\n const formData = (await c.req.json()) as Record<string, unknown>;\n const inputData = transformFormData(formData, sectionInfoMap);\n const content = await generateDesignDoc({ scenario, formData, inputData });\n\n if (scenario.hooks?.onPreview != null) {\n await scenario.hooks.onPreview({ formData, inputData, content });\n }\n\n return c.json({ success: true, content });\n });\n\n app.post('/api/scenarios/:scenarioId/docs', async (c) => {\n const scenarioId = c.req.param('scenarioId');\n const { scenario, sectionInfoMap } = c.get('scenarioInfo');\n\n if (!config.permissions.allowSave) {\n return c.json({ error: 'Save is not allowed' }, 403);\n }\n\n const { content, formData } = (await c.req.json()) as CreateDocBody;\n const inputData = transformFormData(formData, sectionInfoMap);\n const filename = getFilename(\n scenario,\n scenarioId,\n content,\n formData,\n inputData,\n );\n const { outputPath } = await saveDocument({\n scenario,\n scenarioId,\n filename,\n content,\n formData,\n });\n\n if (scenario.hooks?.onSave != null) {\n await scenario.hooks.onSave({\n content,\n filename,\n outputPath,\n formData,\n inputData,\n });\n }\n\n return c.json({ success: true, filename });\n });\n\n app.get('/api/scenarios/:scenarioId/docs/:filename', async (c) => {\n const filename = c.req.param('filename');\n const { scenario } = c.get('scenarioInfo');\n\n const result = await readDocument(scenario, filename);\n\n if (!result.success) {\n return c.json({ error: 'Document not found' }, 404);\n }\n\n return c.json({ doc: result.doc });\n });\n\n app.put('/api/scenarios/:scenarioId/docs/:filename', async (c) => {\n const scenarioId = c.req.param('scenarioId');\n const filename = c.req.param('filename');\n const { scenario, sectionInfoMap } = c.get('scenarioInfo');\n\n if (!config.permissions.allowSave) {\n return c.json({ error: 'Save is not allowed' }, 403);\n }\n\n const { content, formData } = (await c.req.json()) as UpdateDocBody;\n const inputData = transformFormData(formData, sectionInfoMap);\n const { outputPath } = await saveDocument({\n scenario,\n scenarioId,\n filename,\n content,\n formData,\n });\n\n if (scenario.hooks?.onSave != null) {\n await scenario.hooks.onSave({\n content,\n filename,\n outputPath,\n formData,\n inputData,\n });\n }\n\n return c.json({ success: true, filename });\n });\n\n return app;\n};\n", "import type { InputData } from '../../../definitions';\nimport type { SectionInfo } from '../scenarios/build-section-info';\n\nexport const transformFormData = (\n body: Record<string, unknown>,\n sectionInfoMap: Map<string, SectionInfo>,\n): InputData => {\n const items: InputData['items'] = [];\n\n for (const [sectionName, sectionValue] of Object.entries(body)) {\n const sectionInfo = sectionInfoMap.get(sectionName);\n\n if (sectionInfo == null) {\n continue;\n }\n\n const fieldInfoMap = new Map(sectionInfo.fields.map((f) => [f.id, f]));\n\n const values = (\n Array.isArray(sectionValue) ? sectionValue : [sectionValue]\n ).map((item: Record<string, unknown>) => {\n const itemValues: Array<{\n label: string;\n description: string;\n value: unknown;\n }> = Object.entries(item)\n .map(([fieldId, fieldValue]) => {\n const fieldInfo = fieldInfoMap.get(fieldId);\n if (fieldInfo) {\n return {\n label: fieldInfo.label,\n description: fieldInfo.description,\n value: fieldValue,\n };\n }\n return null;\n })\n .filter((value) => value != null);\n\n return itemValues;\n });\n\n items.push({\n title: sectionInfo.title,\n description: sectionInfo.description,\n values,\n });\n }\n\n return { items };\n};\n", "import { mkdir, readFile, readdir, writeFile } from 'node:fs/promises';\nimport { join } from 'node:path';\n\nimport type { InputData, Scenario } from '../../definitions';\nimport {\n type DocumentWithMetadata,\n addMetadataToContent,\n parseMetadata,\n} from '../helpers/docs/metadata';\n\nexport const getOutputDir = (scenario: Scenario): string => {\n return scenario.outputDir ?? join(process.cwd(), 'output');\n};\n\ntype ReadDocumentResult =\n | { success: true; doc: DocumentWithMetadata }\n | { success: false; error: 'not_found' | 'scenario_mismatch' };\n\nexport const readDocument = async (\n scenario: Scenario,\n filename: string,\n): Promise<ReadDocumentResult> => {\n const outputDir = getOutputDir(scenario);\n const filePath = join(outputDir, filename);\n\n try {\n const rawContent = await readFile(filePath, 'utf-8');\n const { metadata, content } = parseMetadata(rawContent);\n\n if (metadata?.scenarioId !== scenario.id) {\n return { success: false, error: 'scenario_mismatch' };\n }\n\n return {\n success: true,\n doc: { filename, content, metadata },\n };\n } catch {\n return { success: false, error: 'not_found' };\n }\n};\n\nexport const getDocumentsForScenario = async (\n scenario: Scenario,\n): Promise<DocumentWithMetadata[]> => {\n const outputDir = getOutputDir(scenario);\n\n try {\n const files = await readdir(outputDir);\n const mdFiles = files.filter((file) => file.endsWith('.md'));\n\n const docs = await Promise.all(\n mdFiles.map(async (filename) => {\n const result = await readDocument(scenario, filename);\n return result.success ? result.doc : null;\n }),\n );\n\n return docs.filter((doc) => doc != null);\n } catch {\n return [];\n }\n};\n\ntype SaveDocumentOptions = {\n scenario: Scenario;\n scenarioId: string;\n filename: string;\n content: string;\n formData: Record<string, unknown>;\n};\n\nexport const saveDocument = async ({\n scenario,\n scenarioId,\n filename,\n content,\n formData,\n}: SaveDocumentOptions): Promise<{ outputPath: string }> => {\n const outputDir = getOutputDir(scenario);\n const outputPath = join(outputDir, filename);\n\n const contentWithMetadata = addMetadataToContent(content, {\n scenarioId,\n formData,\n });\n\n await mkdir(outputDir, { recursive: true });\n await writeFile(outputPath, contentWithMetadata, 'utf-8');\n\n return { outputPath };\n};\n\nexport const getFilename = (\n scenario: Scenario,\n scenarioId: string,\n content: string,\n formData: Record<string, unknown>,\n inputData: InputData,\n): string => {\n const timestamp = new Date().toISOString().replace(/[:.]/g, '-');\n\n const filenameOverride = scenario.overrides?.filename;\n if (filenameOverride != null) {\n return typeof filenameOverride === 'function'\n ? filenameOverride({\n scenarioId,\n timestamp,\n content,\n formData,\n inputData,\n })\n : filenameOverride;\n }\n\n return `design-doc-${scenarioId}-${timestamp}.md`;\n};\n", "export type DocumentMetadata = {\n scenarioId: string;\n formData: Record<string, unknown>;\n};\n\nexport type DocumentWithMetadata = {\n filename: string;\n content: string;\n metadata: DocumentMetadata | null;\n};\n\nconst METADATA_START = '<!-- design-docs-metadata';\nconst METADATA_END = '-->';\n\nexport const serializeMetadata = (metadata: DocumentMetadata): string => {\n return `${METADATA_START}\\n${JSON.stringify(metadata, null, 2)}\\n${METADATA_END}`;\n};\n\nexport const parseMetadata = (\n content: string,\n): { metadata: DocumentMetadata | null; content: string } => {\n const metadataStartIndex = content.lastIndexOf(METADATA_START);\n if (metadataStartIndex === -1) {\n return { metadata: null, content };\n }\n\n const metadataEndIndex = content.indexOf(METADATA_END, metadataStartIndex);\n if (metadataEndIndex === -1) {\n return { metadata: null, content };\n }\n\n try {\n const metadataJson = content\n .slice(metadataStartIndex + METADATA_START.length, metadataEndIndex)\n .trim();\n const metadata = JSON.parse(metadataJson) as DocumentMetadata;\n const cleanContent = content.slice(0, metadataStartIndex).trim();\n return { metadata, content: cleanContent };\n } catch {\n return { metadata: null, content };\n }\n};\n\nexport const addMetadataToContent = (\n content: string,\n metadata: DocumentMetadata,\n): string => {\n return `${content}\\n\\n${serializeMetadata(metadata)}`;\n};\n", "import {\n type Options,\n type SDKResultMessage,\n query,\n} from '@anthropic-ai/claude-agent-sdk';\n\nimport type { InputData, Scenario } from '../../../definitions';\n\ntype GenerateDesignDocParams = {\n scenario: Scenario;\n formData: Record<string, unknown>;\n inputData: InputData;\n};\n\nexport const generateDesignDoc = async ({\n scenario,\n formData,\n inputData,\n}: GenerateDesignDocParams): Promise<string> => {\n const promptTemplate =\n typeof scenario.prompt === 'function'\n ? scenario.prompt({ formData, inputData })\n : scenario.prompt;\n const prompt = promptTemplate.replace(\n '{{INPUT_JSON}}',\n JSON.stringify(inputData, null, 2),\n );\n\n let message: SDKResultMessage | null = null;\n\n for await (const msg of query({\n prompt,\n options: scenario.aiSettings as Options,\n })) {\n if (msg.type === 'result' && msg.subtype === 'success') {\n message = msg;\n }\n }\n\n if (message == null) {\n throw new Error('Query failed');\n }\n\n return message.result;\n};\n", "import { Hono } from 'hono';\n\nimport type { Config, Scenario } from '../../definitions';\nimport { buildFormDefaultValues } from '../helpers/scenarios/build-form-defaults';\nimport type { buildSectionInfoMap } from '../helpers/scenarios/build-section-info';\n\nexport type ScenarioInfo = {\n sectionInfoMap: ReturnType<typeof buildSectionInfoMap>;\n};\n\nexport type ScenarioInfoMapEntry = {\n scenario: Scenario;\n sectionInfoMap: ReturnType<typeof buildSectionInfoMap>;\n};\n\nexport const createScenariosApp = (\n config: Config,\n scenarioInfoMap: Map<string, ScenarioInfoMapEntry>,\n) => {\n const app = new Hono();\n\n // \u5168\u30B7\u30CA\u30EA\u30AA\u53D6\u5F97\n app.get('/api/scenarios', (c) => {\n return c.json({\n scenarios: config.scenarios,\n });\n });\n\n // \u5358\u4E00\u30B7\u30CA\u30EA\u30AA\u53D6\u5F97\n app.get('/api/scenarios/:scenarioId', (c) => {\n const scenarioId = c.req.param('scenarioId');\n const scenarioInfo = scenarioInfoMap.get(scenarioId);\n\n if (scenarioInfo == null) {\n return c.json({ error: 'Scenario not found' }, 404);\n }\n\n const formDefaultValues = buildFormDefaultValues(\n scenarioInfo.scenario.steps,\n );\n\n return c.json({\n scenario: scenarioInfo.scenario,\n formDefaultValues,\n permissions: config.permissions,\n });\n });\n\n return app;\n};\n", "import { type Field, type Step, isLayoutField } from '../../../definitions';\n\nexport const buildFieldDefaults = (\n fields: Field[],\n): Record<string, unknown> => {\n const getFieldDefaultValue = (field: Field): unknown => {\n if (isLayoutField(field)) {\n return undefined;\n }\n switch (field.type) {\n case 'checkbox':\n return false;\n default:\n return '';\n }\n };\n\n const defaults: Record<string, unknown> = {};\n for (const field of fields) {\n if (isLayoutField(field)) {\n Object.assign(defaults, buildFieldDefaults(field.fields));\n } else {\n defaults[field.id] = getFieldDefaultValue(field);\n }\n }\n return defaults;\n};\n\nexport const buildFormDefaultValues = (\n steps: Step[],\n): Record<string, unknown> => {\n const defaults: Record<string, unknown> = {};\n for (const config of steps) {\n if (config.section.type === 'single') {\n defaults[config.section.name] = buildFieldDefaults(config.section.fields);\n } else {\n const minCount = config.section.minFieldCount ?? 1;\n defaults[config.section.name] = Array.from({ length: minCount }, () =>\n buildFieldDefaults(config.section.fields),\n );\n }\n }\n return defaults;\n};\n", "import { type Field, type Step, isLayoutField } from '../../../definitions';\n\nexport type FieldInfo = {\n id: string;\n label: string;\n description: string;\n};\n\nexport type SectionInfo = {\n name: string;\n title: string;\n description: string;\n fields: FieldInfo[];\n};\n\nexport const extractFieldInfos = (fields: Field[]): FieldInfo[] => {\n const result: FieldInfo[] = [];\n for (const field of fields) {\n if (isLayoutField(field)) {\n result.push(...extractFieldInfos(field.fields));\n } else {\n result.push({\n id: field.id,\n label: field.label,\n description: field.description,\n });\n }\n }\n return result;\n};\n\nexport const buildSectionInfoMap = (\n steps: Step[],\n): Map<string, SectionInfo> => {\n const sectionMap = new Map<string, SectionInfo>(\n steps.map((step) => [\n step.section.name,\n {\n name: step.section.name,\n title: step.title,\n description: step.description,\n fields: extractFieldInfos(step.section.fields),\n },\n ]),\n );\n\n return sectionMap;\n};\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["defineCommand", "fs", "path", "defineCommand", "consola", "Hono", "Hono", "Hono", "Hono", "consola", "defineCommand", "defineCommand"]
|
|
7
7
|
}
|