spec-snake 0.0.1-beta.0 → 0.0.1-beta.2
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/README.ja.md +25 -15
- package/README.md +50 -45
- package/dist/cli.js +15 -7
- package/dist/cli.js.map +3 -3
- package/dist/client/assets/{ChevronRightIcon-BcBiiChF.js → ChevronRightIcon-BQ2_ClQu.js} +1 -1
- package/dist/client/assets/{DocumentIcon-jB6zASay.js → DocumentIcon-c8sxt6pf.js} +1 -1
- package/dist/client/assets/{Header-DN39nNWE.js → Header-Xv0ztODd.js} +1 -1
- package/dist/client/assets/{PlusIcon-DqYOBije.js → PlusIcon-erBdv4vE.js} +1 -1
- package/dist/client/assets/{index-DYnzYTb1.js → index-BB8YfLyh.js} +1 -1
- package/dist/client/assets/{index-Q_AobJB0.js → index-Bw7jLgLx.js} +1 -1
- package/dist/client/assets/{index-DQxQHK-0.js → index-CGVrqKaZ.js} +1 -1
- package/dist/client/assets/{index-CT_VQ59w.js → index-CNZpX2BI.js} +1 -1
- package/dist/client/assets/{index-pyqED_5G.js → index-Daw2qLfo.js} +1 -1
- package/dist/client/assets/{index-D6usLrOW.js → index-DzfYNFpx.js} +2 -2
- package/dist/client/assets/{useStepFormStore-CBcs2c-9.js → useStepFormStore-FtcrBUR0.js} +2 -2
- package/dist/client/index.html +1 -1
- package/dist/types.d.ts +4 -2
- package/dist/types.js +2 -2
- package/package.json +20 -20
package/README.ja.md
CHANGED
|
@@ -25,10 +25,15 @@ AI を活用した設計ドキュメントジェネレーター
|
|
|
25
25
|
## インストール
|
|
26
26
|
|
|
27
27
|
```bash
|
|
28
|
-
|
|
29
|
-
|
|
28
|
+
# npm
|
|
29
|
+
npm install spec-snake@beta
|
|
30
|
+
|
|
31
|
+
# yarn
|
|
32
|
+
yarn add spec-snake@beta
|
|
30
33
|
|
|
31
|
-
|
|
34
|
+
# pnpm
|
|
35
|
+
pnpm add spec-snake@beta
|
|
36
|
+
```
|
|
32
37
|
|
|
33
38
|
## 環境
|
|
34
39
|
|
|
@@ -107,32 +112,37 @@ npx spec-snake-beta start --host 0.0.0.0
|
|
|
107
112
|
### 設定構造
|
|
108
113
|
|
|
109
114
|
```typescript
|
|
110
|
-
import { defineConfig, defineScenario } from
|
|
115
|
+
import { defineConfig, defineScenario } from "spec-snake";
|
|
111
116
|
|
|
112
117
|
export default defineConfig({
|
|
113
118
|
scenarios: [
|
|
114
119
|
defineScenario({
|
|
115
|
-
id:
|
|
116
|
-
name:
|
|
120
|
+
id: "design-doc",
|
|
121
|
+
name: "設計ドキュメント",
|
|
117
122
|
steps: [
|
|
118
123
|
{
|
|
119
|
-
slug:
|
|
120
|
-
title:
|
|
121
|
-
description:
|
|
124
|
+
slug: "overview",
|
|
125
|
+
title: "概要",
|
|
126
|
+
description: "プロジェクトの概要",
|
|
122
127
|
section: {
|
|
123
|
-
type:
|
|
124
|
-
name:
|
|
128
|
+
type: "single",
|
|
129
|
+
name: "overview",
|
|
125
130
|
fields: [
|
|
126
|
-
{
|
|
131
|
+
{
|
|
132
|
+
id: "title",
|
|
133
|
+
type: "input",
|
|
134
|
+
label: "タイトル",
|
|
135
|
+
description: "",
|
|
136
|
+
},
|
|
127
137
|
],
|
|
128
138
|
},
|
|
129
139
|
},
|
|
130
140
|
],
|
|
131
|
-
prompt:
|
|
132
|
-
outputDir:
|
|
141
|
+
prompt: "...",
|
|
142
|
+
outputDir: "docs",
|
|
133
143
|
overrides: {
|
|
134
144
|
filename: ({ formData, timestamp }) =>
|
|
135
|
-
`${formData.overview?.title ??
|
|
145
|
+
`${formData.overview?.title ?? "untitled"}-${timestamp}.md`,
|
|
136
146
|
},
|
|
137
147
|
}),
|
|
138
148
|
],
|
package/README.md
CHANGED
|
@@ -27,10 +27,15 @@ Documents are managed based on three core concepts:
|
|
|
27
27
|
## Installation
|
|
28
28
|
|
|
29
29
|
```bash
|
|
30
|
-
|
|
31
|
-
|
|
30
|
+
# npm
|
|
31
|
+
npm install spec-snake@beta
|
|
32
|
+
|
|
33
|
+
# yarn
|
|
34
|
+
yarn add spec-snake@beta
|
|
32
35
|
|
|
33
|
-
|
|
36
|
+
# pnpm
|
|
37
|
+
pnpm add spec-snake@beta
|
|
38
|
+
```
|
|
34
39
|
|
|
35
40
|
## Requirements
|
|
36
41
|
|
|
@@ -109,32 +114,32 @@ Also refer to [src/types.ts](./src/types.ts) for configurable options.
|
|
|
109
114
|
### Config Structure
|
|
110
115
|
|
|
111
116
|
```typescript
|
|
112
|
-
import { defineConfig, defineScenario } from
|
|
117
|
+
import { defineConfig, defineScenario } from "spec-snake";
|
|
113
118
|
|
|
114
119
|
export default defineConfig({
|
|
115
120
|
scenarios: [
|
|
116
121
|
defineScenario({
|
|
117
|
-
id:
|
|
118
|
-
name:
|
|
122
|
+
id: "design-doc",
|
|
123
|
+
name: "Design Document",
|
|
119
124
|
steps: [
|
|
120
125
|
{
|
|
121
|
-
slug:
|
|
122
|
-
title:
|
|
123
|
-
description:
|
|
126
|
+
slug: "overview",
|
|
127
|
+
title: "Overview",
|
|
128
|
+
description: "Project overview",
|
|
124
129
|
section: {
|
|
125
|
-
type:
|
|
126
|
-
name:
|
|
130
|
+
type: "single",
|
|
131
|
+
name: "overview",
|
|
127
132
|
fields: [
|
|
128
|
-
{ id:
|
|
133
|
+
{ id: "title", type: "input", label: "Title", description: "" },
|
|
129
134
|
],
|
|
130
135
|
},
|
|
131
136
|
},
|
|
132
137
|
],
|
|
133
|
-
prompt:
|
|
134
|
-
outputDir:
|
|
138
|
+
prompt: "...",
|
|
139
|
+
outputDir: "docs",
|
|
135
140
|
overrides: {
|
|
136
141
|
filename: ({ formData, timestamp }) =>
|
|
137
|
-
`${formData.overview?.title ??
|
|
142
|
+
`${formData.overview?.title ?? "untitled"}-${timestamp}.md`,
|
|
138
143
|
},
|
|
139
144
|
}),
|
|
140
145
|
],
|
|
@@ -155,31 +160,31 @@ export default defineConfig({
|
|
|
155
160
|
|
|
156
161
|
**`Permissions`** - Permission settings
|
|
157
162
|
|
|
158
|
-
| Property | Type | Description
|
|
159
|
-
| ----------- | --------- |
|
|
160
|
-
| `allowSave` | `boolean` | Whether to allow saving docs
|
|
163
|
+
| Property | Type | Description |
|
|
164
|
+
| ----------- | --------- | ---------------------------- |
|
|
165
|
+
| `allowSave` | `boolean` | Whether to allow saving docs |
|
|
161
166
|
|
|
162
167
|
**`Scenario`** - Scenario definition. Each scenario represents one document type
|
|
163
168
|
|
|
164
|
-
| Property | Type | Required | Description
|
|
165
|
-
| ------------ | -------------------- | -------- |
|
|
166
|
-
| `id` | `string` | Yes | Unique identifier used in URL
|
|
167
|
-
| `name` | `string` | Yes | Display name
|
|
168
|
-
| `steps` | `Step[]` | Yes | Form wizard steps
|
|
169
|
-
| `prompt` | `string \| Function` | Yes | Prompt template sent to Claude
|
|
170
|
-
| `outputDir` | `string` | No | Directory for saving documents
|
|
171
|
-
| `aiSettings` | `AiSettings` | No | Claude Agent SDK settings
|
|
172
|
-
| `hooks` | `ScenarioHooks` | No | Lifecycle hooks
|
|
173
|
-
| `overrides` | `ScenarioOverrides` | No | Override default behaviors
|
|
169
|
+
| Property | Type | Required | Description |
|
|
170
|
+
| ------------ | -------------------- | -------- | ------------------------------ |
|
|
171
|
+
| `id` | `string` | Yes | Unique identifier used in URL |
|
|
172
|
+
| `name` | `string` | Yes | Display name |
|
|
173
|
+
| `steps` | `Step[]` | Yes | Form wizard steps |
|
|
174
|
+
| `prompt` | `string \| Function` | Yes | Prompt template sent to Claude |
|
|
175
|
+
| `outputDir` | `string` | No | Directory for saving documents |
|
|
176
|
+
| `aiSettings` | `AiSettings` | No | Claude Agent SDK settings |
|
|
177
|
+
| `hooks` | `ScenarioHooks` | No | Lifecycle hooks |
|
|
178
|
+
| `overrides` | `ScenarioOverrides` | No | Override default behaviors |
|
|
174
179
|
|
|
175
180
|
**`Step`** - Each step in the multi-step form
|
|
176
181
|
|
|
177
|
-
| Property | Type | Required | Description
|
|
178
|
-
| ------------- | --------- | -------- |
|
|
179
|
-
| `slug` | `string` | Yes | URL-friendly identifier
|
|
180
|
-
| `title` | `string` | Yes | Title displayed in step header
|
|
181
|
-
| `description` | `string` | Yes | Description shown below title
|
|
182
|
-
| `section` | `Section` | Yes | Section containing step fields
|
|
182
|
+
| Property | Type | Required | Description |
|
|
183
|
+
| ------------- | --------- | -------- | ------------------------------ |
|
|
184
|
+
| `slug` | `string` | Yes | URL-friendly identifier |
|
|
185
|
+
| `title` | `string` | Yes | Title displayed in step header |
|
|
186
|
+
| `description` | `string` | Yes | Description shown below title |
|
|
187
|
+
| `section` | `Section` | Yes | Section containing step fields |
|
|
183
188
|
|
|
184
189
|
### `Section` - Two types available
|
|
185
190
|
|
|
@@ -262,18 +267,18 @@ ArraySection - A group of fields that can have multiple entries
|
|
|
262
267
|
|
|
263
268
|
### `AiSettings` - Claude Agent SDK settings
|
|
264
269
|
|
|
265
|
-
| Property | Type | Description
|
|
266
|
-
| --------------------------------- | --------------------------------- |
|
|
267
|
-
| `model` | `string` | Model to use (e.g., `claude-sonnet-4-5-20250929`)
|
|
268
|
-
| `fallbackModel` | `string` | Fallback model
|
|
269
|
-
| `maxTurns` | `number` | Maximum turns
|
|
270
|
-
| `maxBudgetUsd` | `number` | Budget limit in USD
|
|
270
|
+
| Property | Type | Description |
|
|
271
|
+
| --------------------------------- | --------------------------------- | ----------------------------------------------------------- |
|
|
272
|
+
| `model` | `string` | Model to use (e.g., `claude-sonnet-4-5-20250929`) |
|
|
273
|
+
| `fallbackModel` | `string` | Fallback model |
|
|
274
|
+
| `maxTurns` | `number` | Maximum turns |
|
|
275
|
+
| `maxBudgetUsd` | `number` | Budget limit in USD |
|
|
271
276
|
| `tools` | `object` | Tool settings (`{ type: 'preset', preset: 'claude_code' }`) |
|
|
272
|
-
| `allowedTools` | `string[]` | Allowed tools
|
|
273
|
-
| `disallowedTools` | `string[]` | Disallowed tools
|
|
274
|
-
| `permissionMode` | `PermissionMode` | Permission mode
|
|
275
|
-
| `allowDangerouslySkipPermissions` | `boolean` | Skip permission checks
|
|
276
|
-
| `mcpServers` | `Record<string, McpServerConfig>` | MCP server config
|
|
277
|
+
| `allowedTools` | `string[]` | Allowed tools |
|
|
278
|
+
| `disallowedTools` | `string[]` | Disallowed tools |
|
|
279
|
+
| `permissionMode` | `PermissionMode` | Permission mode |
|
|
280
|
+
| `allowDangerouslySkipPermissions` | `boolean` | Skip permission checks |
|
|
281
|
+
| `mcpServers` | `Record<string, McpServerConfig>` | MCP server config |
|
|
277
282
|
|
|
278
283
|
#### Available Tools
|
|
279
284
|
|
package/dist/cli.js
CHANGED
|
@@ -3,15 +3,18 @@
|
|
|
3
3
|
// src/cli/index.ts
|
|
4
4
|
import { defineCommand as defineCommand3, runMain } from "citty";
|
|
5
5
|
|
|
6
|
+
// package.json
|
|
7
|
+
var version = "0.0.1-beta.2";
|
|
8
|
+
|
|
6
9
|
// src/cli/commands/init.ts
|
|
7
10
|
import * as fs from "node:fs";
|
|
8
11
|
import * as path from "node:path";
|
|
9
12
|
import { defineCommand } from "citty";
|
|
10
13
|
import { consola } from "consola";
|
|
11
14
|
var CONFIG_TEMPLATE = `// For more detailed configuration examples, see:
|
|
12
|
-
// https://github.com/cut0/spec-snake/blob/main/examples
|
|
15
|
+
// https://github.com/cut0/spec-snake/blob/main/examples
|
|
13
16
|
|
|
14
|
-
import { defineConfig, defineScenario } from '
|
|
17
|
+
import { defineConfig, defineScenario } from 'spec-snake';
|
|
15
18
|
|
|
16
19
|
export default defineConfig({
|
|
17
20
|
scenarios: [
|
|
@@ -252,7 +255,8 @@ var PermissionsSchema = v.object({
|
|
|
252
255
|
});
|
|
253
256
|
var ConfigSchema = v.object({
|
|
254
257
|
scenarios: v.array(ScenarioSchema),
|
|
255
|
-
permissions: PermissionsSchema
|
|
258
|
+
permissions: PermissionsSchema,
|
|
259
|
+
hosted: v.optional(v.boolean(), false)
|
|
256
260
|
});
|
|
257
261
|
var safeParseConfig = (data) => {
|
|
258
262
|
return v.safeParse(ConfigSchema, data);
|
|
@@ -637,8 +641,12 @@ var buildSectionInfoMap = (steps) => {
|
|
|
637
641
|
};
|
|
638
642
|
|
|
639
643
|
// src/server/api.ts
|
|
640
|
-
var createApiServer = (
|
|
644
|
+
var createApiServer = (rawConfig) => {
|
|
641
645
|
const app = new Hono3();
|
|
646
|
+
const config = rawConfig.hosted ? {
|
|
647
|
+
...rawConfig,
|
|
648
|
+
permissions: { ...rawConfig.permissions, allowSave: false }
|
|
649
|
+
} : rawConfig;
|
|
642
650
|
const scenarioInfoMap = new Map(
|
|
643
651
|
config.scenarios.map((scenario) => [
|
|
644
652
|
scenario.id,
|
|
@@ -770,9 +778,9 @@ var startCommand = defineCommand2({
|
|
|
770
778
|
// src/cli/index.ts
|
|
771
779
|
var main = defineCommand3({
|
|
772
780
|
meta: {
|
|
773
|
-
name: "
|
|
774
|
-
version
|
|
775
|
-
description: "
|
|
781
|
+
name: "spec-snake",
|
|
782
|
+
version,
|
|
783
|
+
description: "AI-powered design document generator CLI"
|
|
776
784
|
},
|
|
777
785
|
subCommands: {
|
|
778
786
|
init: initCommand,
|
package/dist/cli.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../src/cli/index.ts", "../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 { initCommand } from './commands/init';\nimport { startCommand } from './commands/start';\n\nconst main = defineCommand({\n meta: {\n name: 'design-docs-generator',\n version: '0.0.1',\n description: 'Design Docs Generator CLI',\n },\n subCommands: {\n init: initCommand,\n start: startCommand,\n },\n});\n\nrunMain(main);\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/spec-snake.ts\n\nimport { defineConfig, defineScenario } from '@cut0/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});\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 = (config: Config) => {\n const app = new Hono();\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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",
|
|
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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",
|
|
6
6
|
"names": ["defineCommand", "fs", "path", "defineCommand", "consola", "Hono", "Hono", "Hono", "Hono", "consola", "defineCommand", "defineCommand"]
|
|
7
7
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{j as o}from"./index-
|
|
1
|
+
import{j as o}from"./index-DzfYNFpx.js";const e=r=>o.jsx("svg",{"aria-hidden":"true",width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg",...r,children:o.jsx("path",{d:"M6 4L10 8L6 12",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})});export{e as C};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{j as o}from"./index-
|
|
1
|
+
import{j as o}from"./index-DzfYNFpx.js";const e=t=>o.jsx("svg",{"aria-hidden":"true",width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg",...t,children:o.jsx("path",{d:"M9 1H4C3.44772 1 3 1.44772 3 2V14C3 14.5523 3.44772 15 4 15H12C12.5523 15 13 14.5523 13 14V5M9 1L13 5M9 1V5H13M5 8H11M5 11H11",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})});export{e as D};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{S as P,g as R,P as D,Q as E,U as L,V as B,W as N,X as A,Y as Q,n as F,r as d,k as H,j as n,Z as W,_,u as z,$ as V,L as Z}from"./index-D6usLrOW.js";var $=class extends P{constructor(t,e){super(),this.options=e,this.#s=t,this.#i=null,this.bindMethods(),this.setOptions(e)}#s;#t=void 0;#f=void 0;#e=void 0;#n;#u;#i;#p;#c;#l;#o;#a;#r;#d=new Set;bindMethods(){this.refetch=this.refetch.bind(this)}onSubscribe(){this.listeners.size===1&&(this.#t.addObserver(this),I(this.#t,this.options)?this.#h():this.updateResult(),this.#y())}onUnsubscribe(){this.hasListeners()||this.destroy()}shouldFetchOnReconnect(){return C(this.#t,this.options,this.options.refetchOnReconnect)}shouldFetchOnWindowFocus(){return C(this.#t,this.options,this.options.refetchOnWindowFocus)}destroy(){this.listeners=new Set,this.#x(),this.#R(),this.#t.removeObserver(this)}setOptions(t,e){const s=this.options,i=this.#t;if(this.options=this.#s.defaultQueryOptions(t),this.options.enabled!==void 0&&typeof this.options.enabled!="boolean")throw new Error("Expected enabled to be a boolean");this.#C(),this.#t.setOptions(this.options),s._defaulted&&!R(this.options,s)&&this.#s.getQueryCache().notify({type:"observerOptionsUpdated",query:this.#t,observer:this});const a=this.hasListeners();a&&U(this.#t,i,this.options,s)&&this.#h(),this.updateResult(e),a&&(this.#t!==i||this.options.enabled!==s.enabled||this.options.staleTime!==s.staleTime)&&this.#g();const u=this.#v();a&&(this.#t!==i||this.options.enabled!==s.enabled||u!==this.#r)&&this.#b(u)}getOptimisticResult(t){const e=this.#s.getQueryCache().build(this.#s,t),s=this.createResult(e,t);return K(this,s)&&(this.#e=s,this.#u=this.options,this.#n=this.#t.state),s}getCurrentResult(){return this.#e}trackResult(t,e){const s={};return Object.keys(t).forEach(i=>{Object.defineProperty(s,i,{configurable:!1,enumerable:!0,get:()=>(this.trackProp(i),e?.(i),t[i])})}),s}trackProp(t){this.#d.add(t)}getCurrentQuery(){return this.#t}refetch({...t}={}){return this.fetch({...t})}fetchOptimistic(t){const e=this.#s.defaultQueryOptions(t),s=this.#s.getQueryCache().build(this.#s,e);return s.isFetchingOptimistic=!0,s.fetch().then(()=>this.createResult(s,e))}fetch(t){return this.#h({...t,cancelRefetch:t.cancelRefetch??!0}).then(()=>(this.updateResult(),this.#e))}#h(t){this.#C();let e=this.#t.fetch(this.options,t);return t?.throwOnError||(e=e.catch(D)),e}#g(){if(this.#x(),E||this.#e.isStale||!L(this.options.staleTime))return;const e=B(this.#e.dataUpdatedAt,this.options.staleTime)+1;this.#o=setTimeout(()=>{this.#e.isStale||this.updateResult()},e)}#v(){return(typeof this.options.refetchInterval=="function"?this.options.refetchInterval(this.#t):this.options.refetchInterval)??!1}#b(t){this.#R(),this.#r=t,!(E||this.options.enabled===!1||!L(this.#r)||this.#r===0)&&(this.#a=setInterval(()=>{(this.options.refetchIntervalInBackground||N.isFocused())&&this.#h()},this.#r))}#y(){this.#g(),this.#b(this.#v())}#x(){this.#o&&(clearTimeout(this.#o),this.#o=void 0)}#R(){this.#a&&(clearInterval(this.#a),this.#a=void 0)}createResult(t,e){const s=this.#t,i=this.options,a=this.#e,u=this.#n,o=this.#u,f=t!==s?t.state:this.#f,{state:p}=t;let r={...p},O=!1,l;if(e._optimisticResults){const c=this.hasListeners(),x=!c&&I(t,e),T=c&&U(t,s,e,i);(x||T)&&(r={...r,...A(p.data,t.options)}),e._optimisticResults==="isRestoring"&&(r.fetchStatus="idle")}let{error:w,errorUpdatedAt:S,status:g}=r;if(e.select&&r.data!==void 0)if(a&&r.data===u?.data&&e.select===this.#p)l=this.#c;else try{this.#p=e.select,l=e.select(r.data),l=Q(a?.data,l,e),this.#c=l,this.#i=null}catch(c){this.#i=c}else l=r.data;if(e.placeholderData!==void 0&&l===void 0&&g==="pending"){let c;if(a?.isPlaceholderData&&e.placeholderData===o?.placeholderData)c=a.data;else if(c=typeof e.placeholderData=="function"?e.placeholderData(this.#l?.state.data,this.#l):e.placeholderData,e.select&&c!==void 0)try{c=e.select(c),this.#i=null}catch(x){this.#i=x}c!==void 0&&(g="success",l=Q(a?.data,c,e),O=!0)}this.#i&&(w=this.#i,l=this.#c,S=Date.now(),g="error");const v=r.fetchStatus==="fetching",b=g==="pending",y=g==="error",k=b&&v,j=l!==void 0;return{status:g,fetchStatus:r.fetchStatus,isPending:b,isSuccess:g==="success",isError:y,isInitialLoading:k,isLoading:k,data:l,dataUpdatedAt:r.dataUpdatedAt,error:w,errorUpdatedAt:S,failureCount:r.fetchFailureCount,failureReason:r.fetchFailureReason,errorUpdateCount:r.errorUpdateCount,isFetched:r.dataUpdateCount>0||r.errorUpdateCount>0,isFetchedAfterMount:r.dataUpdateCount>f.dataUpdateCount||r.errorUpdateCount>f.errorUpdateCount,isFetching:v,isRefetching:v&&!b,isLoadingError:y&&!j,isPaused:r.fetchStatus==="paused",isPlaceholderData:O,isRefetchError:y&&j,isStale:m(t,e),refetch:this.refetch}}updateResult(t){const e=this.#e,s=this.createResult(this.#t,this.options);if(this.#n=this.#t.state,this.#u=this.options,this.#n.data!==void 0&&(this.#l=this.#t),R(s,e))return;this.#e=s;const i={},a=()=>{if(!e)return!0;const{notifyOnChangeProps:u}=this.options,o=typeof u=="function"?u():u;if(o==="all"||!o&&!this.#d.size)return!0;const h=new Set(o??this.#d);return this.options.throwOnError&&h.add("error"),Object.keys(this.#e).some(f=>{const p=f;return this.#e[p]!==e[p]&&h.has(p)})};t?.listeners!==!1&&a()&&(i.listeners=!0),this.#m({...i,...t})}#C(){const t=this.#s.getQueryCache().build(this.#s,this.options);if(t===this.#t)return;const e=this.#t;this.#t=t,this.#f=t.state,this.hasListeners()&&(e?.removeObserver(this),t.addObserver(this))}onQueryUpdate(){this.updateResult(),this.hasListeners()&&this.#y()}#m(t){F.batch(()=>{t.listeners&&this.listeners.forEach(e=>{e(this.#e)}),this.#s.getQueryCache().notify({query:this.#t,type:"observerResultsUpdated"})})}};function G(t,e){return e.enabled!==!1&&t.state.data===void 0&&!(t.state.status==="error"&&e.retryOnMount===!1)}function I(t,e){return G(t,e)||t.state.data!==void 0&&C(t,e,e.refetchOnMount)}function C(t,e,s){if(e.enabled!==!1){const i=typeof s=="function"?s(t):s;return i==="always"||i!==!1&&m(t,e)}return!1}function U(t,e,s,i){return(t!==e||i.enabled===!1)&&(!s.suspense||t.state.status!=="error")&&m(t,s)}function m(t,e){return e.enabled!==!1&&t.isStaleByTime(e.staleTime)}function K(t,e){return!R(t.getCurrentResult(),e)}var M=d.createContext(!1),X=()=>d.useContext(M);M.Provider;function Y(){let t=!1;return{clearReset:()=>{t=!1},reset:()=>{t=!0},isReset:()=>t}}var q=d.createContext(Y()),J=()=>d.useContext(q);function tt(t,e){return typeof t=="function"?t(...e):!!t}function vt(){}var et=(t,e)=>{(t.suspense||t.throwOnError)&&(e.isReset()||(t.retryOnMount=!1))},st=t=>{d.useEffect(()=>{t.clearReset()},[t])},it=({result:t,errorResetBoundary:e,throwOnError:s,query:i})=>t.isError&&!e.isReset()&&!t.isFetching&&i&&tt(s,[t.error,i]),rt=(t,e)=>e.state.data===void 0,nt=t=>{t.suspense&&typeof t.staleTime!="number"&&(t.staleTime=1e3)},ot=(t,e)=>t?.suspense&&e.isPending,at=(t,e,s)=>e.fetchOptimistic(t).catch(()=>{s.clearReset()});function ht(t,e,s){const i=H(),a=X(),u=J(),o=i.defaultQueryOptions(t);o._optimisticResults=a?"isRestoring":"optimistic",nt(o),et(o,u),st(u);const[h]=d.useState(()=>new e(i,o)),f=h.getOptimisticResult(o);if(d.useSyncExternalStore(d.useCallback(p=>{const r=a?()=>{}:h.subscribe(F.batchCalls(p));return h.updateResult(),r},[h,a]),()=>h.getCurrentResult(),()=>h.getCurrentResult()),d.useEffect(()=>{h.setOptions(o,{listeners:!1})},[o,h]),ot(o,f))throw at(o,h,u);if(it({result:f,errorResetBoundary:u,throwOnError:o.throwOnError,query:i.getQueryCache().get(o.queryHash)}))throw f.error;return o.notifyOnChangeProps?f:h.trackResult(f)}function bt(t,e){return ht({...t,enabled:!0,suspense:!0,throwOnError:rt,placeholderData:void 0},$)}const ut=()=>n.jsx("svg",{"aria-hidden":"true",width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:n.jsx("path",{d:"M4 4L12 12M12 4L4 12",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})}),ct=()=>n.jsxs("svg",{"aria-hidden":"true",width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[n.jsx("path",{d:"M0.666992 8.00004C0.666992 8.00004 3.33366 2.66671 8.00033 2.66671C12.667 2.66671 15.3337 8.00004 15.3337 8.00004C15.3337 8.00004 12.667 13.3334 8.00033 13.3334C3.33366 13.3334 0.666992 8.00004 0.666992 8.00004Z",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"}),n.jsx("path",{d:"M8.00033 10C9.10489 10 10.0003 9.10461 10.0003 8.00004C10.0003 6.89547 9.10489 6.00004 8.00033 6.00004C6.89576 6.00004 6.00033 6.89547 6.00033 8.00004C6.00033 9.10461 6.89576 10 8.00033 10Z",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})]}),lt=()=>n.jsx("svg",{"aria-hidden":"true",width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:n.jsx("path",{d:"M2 4H14M2 8H14M2 12H14",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})}),dt=({locale:t,isActive:e,onClick:s})=>{const i=d.useCallback(()=>{s(t)},[t,s]);return n.jsx("button",{className:`px-2 py-1 text-xs rounded transition-colors cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-indigo-300 focus-visible:ring-offset-2 ${e?"bg-indigo-500 text-white":"bg-gray-100 text-gray-600 hover:bg-gray-200"}`,type:"button",onClick:i,children:t.toUpperCase()})},ft=({currentLocale:t})=>{const e=d.useCallback(s=>{W(s),window.location.reload()},[]);return n.jsx("div",{className:"flex gap-1",children:Object.keys(_).map(s=>n.jsx(dt,{locale:s,isActive:t===s,onClick:e},s))})},yt=({isMenuOpen:t,onToggleMenu:e,onOpenPreview:s})=>{const{_:i}=z(),a=V();return n.jsxs("header",{className:"flex items-center justify-between h-14 px-4 xl:px-6 bg-white rounded-2xl border border-gray-100",children:[n.jsxs("div",{className:"flex items-center gap-2",children:[e!=null&&n.jsx("button",{"aria-label":i(t?{id:"vcpc5o"}:{id:"GSr0rF"}),className:"xl:hidden p-2 rounded-lg text-gray-500 hover:text-gray-700 hover:bg-gray-100 transition-colors cursor-pointer *:size-5 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-indigo-300 focus-visible:ring-offset-2",type:"button",onClick:e,children:t?n.jsx(ut,{}):n.jsx(lt,{})}),n.jsx(Z,{to:"/scenarios",className:"text-lg font-bold text-gray-900 hover:text-indigo-600 transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-indigo-300 focus-visible:ring-offset-2 rounded",children:"Spec Snake Beta"})]}),n.jsxs("div",{className:"flex items-center gap-2",children:[n.jsx(ft,{currentLocale:a}),s!=null&&n.jsx("button",{"aria-label":i({id:"fsyAH8"}),className:"lg:hidden p-2 rounded-lg text-gray-500 hover:text-gray-700 hover:bg-gray-100 transition-colors cursor-pointer *:size-5 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-indigo-300 focus-visible:ring-offset-2",type:"button",onClick:s,children:n.jsx(ct,{})})]})]})};export{ut as C,ct as E,yt as H,vt as n,tt as s,bt as u};
|
|
1
|
+
import{S as P,g as R,P as D,Q as E,U as L,V as B,W as N,X as A,Y as Q,n as F,r as d,k as H,j as n,Z as W,_,u as z,$ as V,L as Z}from"./index-DzfYNFpx.js";var $=class extends P{constructor(t,e){super(),this.options=e,this.#s=t,this.#i=null,this.bindMethods(),this.setOptions(e)}#s;#t=void 0;#f=void 0;#e=void 0;#n;#u;#i;#p;#c;#l;#o;#a;#r;#d=new Set;bindMethods(){this.refetch=this.refetch.bind(this)}onSubscribe(){this.listeners.size===1&&(this.#t.addObserver(this),I(this.#t,this.options)?this.#h():this.updateResult(),this.#y())}onUnsubscribe(){this.hasListeners()||this.destroy()}shouldFetchOnReconnect(){return C(this.#t,this.options,this.options.refetchOnReconnect)}shouldFetchOnWindowFocus(){return C(this.#t,this.options,this.options.refetchOnWindowFocus)}destroy(){this.listeners=new Set,this.#x(),this.#R(),this.#t.removeObserver(this)}setOptions(t,e){const s=this.options,i=this.#t;if(this.options=this.#s.defaultQueryOptions(t),this.options.enabled!==void 0&&typeof this.options.enabled!="boolean")throw new Error("Expected enabled to be a boolean");this.#C(),this.#t.setOptions(this.options),s._defaulted&&!R(this.options,s)&&this.#s.getQueryCache().notify({type:"observerOptionsUpdated",query:this.#t,observer:this});const a=this.hasListeners();a&&U(this.#t,i,this.options,s)&&this.#h(),this.updateResult(e),a&&(this.#t!==i||this.options.enabled!==s.enabled||this.options.staleTime!==s.staleTime)&&this.#g();const u=this.#v();a&&(this.#t!==i||this.options.enabled!==s.enabled||u!==this.#r)&&this.#b(u)}getOptimisticResult(t){const e=this.#s.getQueryCache().build(this.#s,t),s=this.createResult(e,t);return K(this,s)&&(this.#e=s,this.#u=this.options,this.#n=this.#t.state),s}getCurrentResult(){return this.#e}trackResult(t,e){const s={};return Object.keys(t).forEach(i=>{Object.defineProperty(s,i,{configurable:!1,enumerable:!0,get:()=>(this.trackProp(i),e?.(i),t[i])})}),s}trackProp(t){this.#d.add(t)}getCurrentQuery(){return this.#t}refetch({...t}={}){return this.fetch({...t})}fetchOptimistic(t){const e=this.#s.defaultQueryOptions(t),s=this.#s.getQueryCache().build(this.#s,e);return s.isFetchingOptimistic=!0,s.fetch().then(()=>this.createResult(s,e))}fetch(t){return this.#h({...t,cancelRefetch:t.cancelRefetch??!0}).then(()=>(this.updateResult(),this.#e))}#h(t){this.#C();let e=this.#t.fetch(this.options,t);return t?.throwOnError||(e=e.catch(D)),e}#g(){if(this.#x(),E||this.#e.isStale||!L(this.options.staleTime))return;const e=B(this.#e.dataUpdatedAt,this.options.staleTime)+1;this.#o=setTimeout(()=>{this.#e.isStale||this.updateResult()},e)}#v(){return(typeof this.options.refetchInterval=="function"?this.options.refetchInterval(this.#t):this.options.refetchInterval)??!1}#b(t){this.#R(),this.#r=t,!(E||this.options.enabled===!1||!L(this.#r)||this.#r===0)&&(this.#a=setInterval(()=>{(this.options.refetchIntervalInBackground||N.isFocused())&&this.#h()},this.#r))}#y(){this.#g(),this.#b(this.#v())}#x(){this.#o&&(clearTimeout(this.#o),this.#o=void 0)}#R(){this.#a&&(clearInterval(this.#a),this.#a=void 0)}createResult(t,e){const s=this.#t,i=this.options,a=this.#e,u=this.#n,o=this.#u,f=t!==s?t.state:this.#f,{state:p}=t;let r={...p},O=!1,l;if(e._optimisticResults){const c=this.hasListeners(),x=!c&&I(t,e),T=c&&U(t,s,e,i);(x||T)&&(r={...r,...A(p.data,t.options)}),e._optimisticResults==="isRestoring"&&(r.fetchStatus="idle")}let{error:w,errorUpdatedAt:S,status:g}=r;if(e.select&&r.data!==void 0)if(a&&r.data===u?.data&&e.select===this.#p)l=this.#c;else try{this.#p=e.select,l=e.select(r.data),l=Q(a?.data,l,e),this.#c=l,this.#i=null}catch(c){this.#i=c}else l=r.data;if(e.placeholderData!==void 0&&l===void 0&&g==="pending"){let c;if(a?.isPlaceholderData&&e.placeholderData===o?.placeholderData)c=a.data;else if(c=typeof e.placeholderData=="function"?e.placeholderData(this.#l?.state.data,this.#l):e.placeholderData,e.select&&c!==void 0)try{c=e.select(c),this.#i=null}catch(x){this.#i=x}c!==void 0&&(g="success",l=Q(a?.data,c,e),O=!0)}this.#i&&(w=this.#i,l=this.#c,S=Date.now(),g="error");const v=r.fetchStatus==="fetching",b=g==="pending",y=g==="error",k=b&&v,j=l!==void 0;return{status:g,fetchStatus:r.fetchStatus,isPending:b,isSuccess:g==="success",isError:y,isInitialLoading:k,isLoading:k,data:l,dataUpdatedAt:r.dataUpdatedAt,error:w,errorUpdatedAt:S,failureCount:r.fetchFailureCount,failureReason:r.fetchFailureReason,errorUpdateCount:r.errorUpdateCount,isFetched:r.dataUpdateCount>0||r.errorUpdateCount>0,isFetchedAfterMount:r.dataUpdateCount>f.dataUpdateCount||r.errorUpdateCount>f.errorUpdateCount,isFetching:v,isRefetching:v&&!b,isLoadingError:y&&!j,isPaused:r.fetchStatus==="paused",isPlaceholderData:O,isRefetchError:y&&j,isStale:m(t,e),refetch:this.refetch}}updateResult(t){const e=this.#e,s=this.createResult(this.#t,this.options);if(this.#n=this.#t.state,this.#u=this.options,this.#n.data!==void 0&&(this.#l=this.#t),R(s,e))return;this.#e=s;const i={},a=()=>{if(!e)return!0;const{notifyOnChangeProps:u}=this.options,o=typeof u=="function"?u():u;if(o==="all"||!o&&!this.#d.size)return!0;const h=new Set(o??this.#d);return this.options.throwOnError&&h.add("error"),Object.keys(this.#e).some(f=>{const p=f;return this.#e[p]!==e[p]&&h.has(p)})};t?.listeners!==!1&&a()&&(i.listeners=!0),this.#m({...i,...t})}#C(){const t=this.#s.getQueryCache().build(this.#s,this.options);if(t===this.#t)return;const e=this.#t;this.#t=t,this.#f=t.state,this.hasListeners()&&(e?.removeObserver(this),t.addObserver(this))}onQueryUpdate(){this.updateResult(),this.hasListeners()&&this.#y()}#m(t){F.batch(()=>{t.listeners&&this.listeners.forEach(e=>{e(this.#e)}),this.#s.getQueryCache().notify({query:this.#t,type:"observerResultsUpdated"})})}};function G(t,e){return e.enabled!==!1&&t.state.data===void 0&&!(t.state.status==="error"&&e.retryOnMount===!1)}function I(t,e){return G(t,e)||t.state.data!==void 0&&C(t,e,e.refetchOnMount)}function C(t,e,s){if(e.enabled!==!1){const i=typeof s=="function"?s(t):s;return i==="always"||i!==!1&&m(t,e)}return!1}function U(t,e,s,i){return(t!==e||i.enabled===!1)&&(!s.suspense||t.state.status!=="error")&&m(t,s)}function m(t,e){return e.enabled!==!1&&t.isStaleByTime(e.staleTime)}function K(t,e){return!R(t.getCurrentResult(),e)}var M=d.createContext(!1),X=()=>d.useContext(M);M.Provider;function Y(){let t=!1;return{clearReset:()=>{t=!1},reset:()=>{t=!0},isReset:()=>t}}var q=d.createContext(Y()),J=()=>d.useContext(q);function tt(t,e){return typeof t=="function"?t(...e):!!t}function vt(){}var et=(t,e)=>{(t.suspense||t.throwOnError)&&(e.isReset()||(t.retryOnMount=!1))},st=t=>{d.useEffect(()=>{t.clearReset()},[t])},it=({result:t,errorResetBoundary:e,throwOnError:s,query:i})=>t.isError&&!e.isReset()&&!t.isFetching&&i&&tt(s,[t.error,i]),rt=(t,e)=>e.state.data===void 0,nt=t=>{t.suspense&&typeof t.staleTime!="number"&&(t.staleTime=1e3)},ot=(t,e)=>t?.suspense&&e.isPending,at=(t,e,s)=>e.fetchOptimistic(t).catch(()=>{s.clearReset()});function ht(t,e,s){const i=H(),a=X(),u=J(),o=i.defaultQueryOptions(t);o._optimisticResults=a?"isRestoring":"optimistic",nt(o),et(o,u),st(u);const[h]=d.useState(()=>new e(i,o)),f=h.getOptimisticResult(o);if(d.useSyncExternalStore(d.useCallback(p=>{const r=a?()=>{}:h.subscribe(F.batchCalls(p));return h.updateResult(),r},[h,a]),()=>h.getCurrentResult(),()=>h.getCurrentResult()),d.useEffect(()=>{h.setOptions(o,{listeners:!1})},[o,h]),ot(o,f))throw at(o,h,u);if(it({result:f,errorResetBoundary:u,throwOnError:o.throwOnError,query:i.getQueryCache().get(o.queryHash)}))throw f.error;return o.notifyOnChangeProps?f:h.trackResult(f)}function bt(t,e){return ht({...t,enabled:!0,suspense:!0,throwOnError:rt,placeholderData:void 0},$)}const ut=()=>n.jsx("svg",{"aria-hidden":"true",width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:n.jsx("path",{d:"M4 4L12 12M12 4L4 12",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})}),ct=()=>n.jsxs("svg",{"aria-hidden":"true",width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:[n.jsx("path",{d:"M0.666992 8.00004C0.666992 8.00004 3.33366 2.66671 8.00033 2.66671C12.667 2.66671 15.3337 8.00004 15.3337 8.00004C15.3337 8.00004 12.667 13.3334 8.00033 13.3334C3.33366 13.3334 0.666992 8.00004 0.666992 8.00004Z",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"}),n.jsx("path",{d:"M8.00033 10C9.10489 10 10.0003 9.10461 10.0003 8.00004C10.0003 6.89547 9.10489 6.00004 8.00033 6.00004C6.89576 6.00004 6.00033 6.89547 6.00033 8.00004C6.00033 9.10461 6.89576 10 8.00033 10Z",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})]}),lt=()=>n.jsx("svg",{"aria-hidden":"true",width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg",children:n.jsx("path",{d:"M2 4H14M2 8H14M2 12H14",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})}),dt=({locale:t,isActive:e,onClick:s})=>{const i=d.useCallback(()=>{s(t)},[t,s]);return n.jsx("button",{className:`px-2 py-1 text-xs rounded transition-colors cursor-pointer focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-indigo-300 focus-visible:ring-offset-2 ${e?"bg-indigo-500 text-white":"bg-gray-100 text-gray-600 hover:bg-gray-200"}`,type:"button",onClick:i,children:t.toUpperCase()})},ft=({currentLocale:t})=>{const e=d.useCallback(s=>{W(s),window.location.reload()},[]);return n.jsx("div",{className:"flex gap-1",children:Object.keys(_).map(s=>n.jsx(dt,{locale:s,isActive:t===s,onClick:e},s))})},yt=({isMenuOpen:t,onToggleMenu:e,onOpenPreview:s})=>{const{_:i}=z(),a=V();return n.jsxs("header",{className:"flex items-center justify-between h-14 px-4 xl:px-6 bg-white rounded-2xl border border-gray-100",children:[n.jsxs("div",{className:"flex items-center gap-2",children:[e!=null&&n.jsx("button",{"aria-label":i(t?{id:"vcpc5o"}:{id:"GSr0rF"}),className:"xl:hidden p-2 rounded-lg text-gray-500 hover:text-gray-700 hover:bg-gray-100 transition-colors cursor-pointer *:size-5 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-indigo-300 focus-visible:ring-offset-2",type:"button",onClick:e,children:t?n.jsx(ut,{}):n.jsx(lt,{})}),n.jsx(Z,{to:"/scenarios",className:"text-lg font-bold text-gray-900 hover:text-indigo-600 transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-indigo-300 focus-visible:ring-offset-2 rounded",children:"Spec Snake Beta"})]}),n.jsxs("div",{className:"flex items-center gap-2",children:[n.jsx(ft,{currentLocale:a}),s!=null&&n.jsx("button",{"aria-label":i({id:"fsyAH8"}),className:"lg:hidden p-2 rounded-lg text-gray-500 hover:text-gray-700 hover:bg-gray-100 transition-colors cursor-pointer *:size-5 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-indigo-300 focus-visible:ring-offset-2",type:"button",onClick:s,children:n.jsx(ct,{})})]})]})};export{ut as C,ct as E,yt as H,vt as n,tt as s,bt as u};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{j as o}from"./index-
|
|
1
|
+
import{j as o}from"./index-DzfYNFpx.js";const e=r=>o.jsx("svg",{"aria-hidden":"true",width:"16",height:"16",viewBox:"0 0 16 16",fill:"none",xmlns:"http://www.w3.org/2000/svg",...r,children:o.jsx("path",{d:"M8 3V13M3 8H13",stroke:"currentColor",strokeWidth:"1.5",strokeLinecap:"round",strokeLinejoin:"round"})});export{e as P};
|