@sylphx/flow 0.0.3 → 0.0.4
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.md +14 -10
- package/dist/{chunk-rtrp1qa5.js → chunk-0fz6p8ka.js} +2 -2
- package/dist/{chunk-rtrp1qa5.js.map → chunk-0fz6p8ka.js.map} +1 -1
- package/dist/{chunk-j7rqqb2w.js → chunk-5eyfa6f8.js} +2 -2
- package/dist/{chunk-j7rqqb2w.js.map → chunk-5eyfa6f8.js.map} +1 -1
- package/dist/chunk-6hhhwb03.js +3 -0
- package/dist/chunk-6hhhwb03.js.map +10 -0
- package/dist/{chunk-z9h5spfk.js → chunk-8saardnr.js} +3 -3
- package/dist/{chunk-z9h5spfk.js.map → chunk-8saardnr.js.map} +1 -1
- package/dist/chunk-e07nqvwm.js +3 -0
- package/dist/chunk-e07nqvwm.js.map +10 -0
- package/dist/{chunk-8bvc13yx.js → chunk-e80fq5bq.js} +2 -2
- package/dist/{chunk-8bvc13yx.js.map → chunk-e80fq5bq.js.map} +1 -1
- package/dist/{chunk-5grx6px4.js → chunk-hpef24m4.js} +2 -2
- package/dist/{chunk-5grx6px4.js.map → chunk-hpef24m4.js.map} +1 -1
- package/dist/chunk-n5gbcebk.js +5 -0
- package/dist/chunk-n5gbcebk.js.map +10 -0
- package/dist/{chunk-wv5zpnbp.js → chunk-n9kqfqp9.js} +2 -2
- package/dist/{chunk-wv5zpnbp.js.map → chunk-n9kqfqp9.js.map} +1 -1
- package/dist/chunk-sdjvmsk2.js +3 -0
- package/dist/{chunk-npw0sq1m.js.map → chunk-sdjvmsk2.js.map} +1 -1
- package/dist/{chunk-p56r2pqw.js → chunk-t6aqpg7b.js} +1 -1
- package/dist/{chunk-e0cdpket.js → chunk-wj8k6qd1.js} +2 -2
- package/dist/{chunk-e0cdpket.js.map → chunk-wj8k6qd1.js.map} +1 -1
- package/dist/index.js +153 -154
- package/dist/index.js.map +6 -7
- package/package.json +1 -1
- package/dist/chunk-npw0sq1m.js +0 -3
- package/dist/chunk-w8epyz4j.js +0 -3
- package/dist/chunk-w8epyz4j.js.map +0 -10
- /package/dist/{chunk-p56r2pqw.js.map → chunk-t6aqpg7b.js.map} +0 -0
package/README.md
CHANGED
|
@@ -56,7 +56,7 @@ User: "I'm using TypeScript + React + Next.js 14 App Router,
|
|
|
56
56
|
|
|
57
57
|
```bash
|
|
58
58
|
# What you type with Sylphx Flow ✅
|
|
59
|
-
npx
|
|
59
|
+
npx @sylphx/flow run "implement authentication"
|
|
60
60
|
|
|
61
61
|
# You get: Production-ready code that:
|
|
62
62
|
✅ Uses YOUR tech stack (auto-detected)
|
|
@@ -75,21 +75,23 @@ npx github:sylphxltd/flow run "implement authentication"
|
|
|
75
75
|
### 1. Setup (Once)
|
|
76
76
|
|
|
77
77
|
```bash
|
|
78
|
-
npx
|
|
78
|
+
npx @sylphx/flow init
|
|
79
79
|
```
|
|
80
80
|
|
|
81
81
|
Done. Everything configured. Never think about setup again.
|
|
82
82
|
|
|
83
|
+
> **💡 Want the bleeding edge?** Use `npx github:sylphxltd/flow init` to try unreleased features.
|
|
84
|
+
|
|
83
85
|
### 2. Build (Forever)
|
|
84
86
|
|
|
85
87
|
```bash
|
|
86
88
|
# Direct prompt
|
|
87
|
-
npx
|
|
88
|
-
npx
|
|
89
|
-
npx
|
|
89
|
+
npx @sylphx/flow run "add password reset"
|
|
90
|
+
npx @sylphx/flow run "review for security" --agent reviewer
|
|
91
|
+
npx @sylphx/flow run "write API docs" --agent writer
|
|
90
92
|
|
|
91
93
|
# Or interactive mode - just start chatting
|
|
92
|
-
npx
|
|
94
|
+
npx @sylphx/flow run
|
|
93
95
|
> implement OAuth
|
|
94
96
|
> add tests
|
|
95
97
|
> optimize performance
|
|
@@ -204,7 +206,7 @@ const result = await pipe(
|
|
|
204
206
|
|
|
205
207
|
```bash
|
|
206
208
|
# 1. Initialize (one time)
|
|
207
|
-
npx
|
|
209
|
+
npx @sylphx/flow init
|
|
208
210
|
|
|
209
211
|
# 2. (Optional) Set OpenAI-compatible API key to use vector search
|
|
210
212
|
# Without key: Uses TF-IDF search (fast, free)
|
|
@@ -212,14 +214,16 @@ npx github:sylphxltd/flow init
|
|
|
212
214
|
export OPENAI_API_KEY="your-key-here" # Auto-switches search mode
|
|
213
215
|
```
|
|
214
216
|
|
|
217
|
+
> **💡 Want the latest unreleased features?** Use `npx github:sylphxltd/flow` instead.
|
|
218
|
+
|
|
215
219
|
### Start Building
|
|
216
220
|
|
|
217
221
|
```bash
|
|
218
222
|
# Method 1: Direct command
|
|
219
|
-
npx
|
|
223
|
+
npx @sylphx/flow run "implement user registration"
|
|
220
224
|
|
|
221
225
|
# Method 2: Interactive mode (recommended)
|
|
222
|
-
npx
|
|
226
|
+
npx @sylphx/flow run
|
|
223
227
|
# Then just chat naturally:
|
|
224
228
|
# > add authentication
|
|
225
229
|
# > review the code
|
|
@@ -497,7 +501,7 @@ flow codebase reindex # After major code changes
|
|
|
497
501
|
|
|
498
502
|
```bash
|
|
499
503
|
# 1. Initialize
|
|
500
|
-
npx
|
|
504
|
+
npx @sylphx/flow init
|
|
501
505
|
|
|
502
506
|
# 2. (Optional) Add OpenAI-compatible key to .claude/mcp.json
|
|
503
507
|
# Enhances search quality with vector embeddings
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{s as G,u as H,y as z}from"./chunk-8saardnr.js";import"./chunk-e80fq5bq.js";import x from"node:fs/promises";import I from"node:path";async function M(){let k=[],q=await N();if(q)k.push(q);let v=await Q();if(v)k.push(v);return k.join(`
|
|
2
2
|
|
|
3
3
|
---
|
|
4
4
|
|
|
@@ -12,4 +12,4 @@ import{r as G,t as H,x as z}from"./chunk-z9h5spfk.js";import"./chunk-8bvc13yx.js
|
|
|
12
12
|
|
|
13
13
|
${q}`}export{M as loadRulesAndStyles,Y as enhanceAgentContent};
|
|
14
14
|
|
|
15
|
-
//# debugId=
|
|
15
|
+
//# debugId=A759AE1F311C296864756E2164756E21
|
|
@@ -5,6 +5,6 @@
|
|
|
5
5
|
"/**\n * Agent Enhancer - Append rules and output styles to agent content\n *\n * This module provides utilities to enhance agent files with:\n * - Rules (from assets/rules/core.md)\n * - Output Styles (from assets/output-styles/*.md)\n *\n * These are appended to agent content to ensure every agent has\n * access to the same rules and output styles without duplicating\n * them in CLAUDE.md or other system prompts.\n */\n\nimport fs from 'node:fs/promises';\nimport path from 'node:path';\nimport { getOutputStylesDir, getRulesDir } from './paths.js';\nimport { yamlUtils } from './target-utils.js';\n\n/**\n * Load and combine rules and output styles\n */\nexport async function loadRulesAndStyles(): Promise<string> {\n const sections: string[] = [];\n\n // Load rules\n const rulesContent = await loadRules();\n if (rulesContent) {\n sections.push(rulesContent);\n }\n\n // Load output styles\n const stylesContent = await loadOutputStyles();\n if (stylesContent) {\n sections.push(stylesContent);\n }\n\n return sections.join('\\n\\n---\\n\\n');\n}\n\n/**\n * Load rules from assets/rules/core.md\n */\nasync function loadRules(): Promise<string> {\n try {\n const rulesDir = getRulesDir();\n const coreRulesPath = path.join(rulesDir, 'core.md');\n\n const content = await fs.readFile(coreRulesPath, 'utf8');\n\n // Strip YAML front matter\n return await yamlUtils.stripFrontMatter(content);\n } catch (_error) {\n // If rules file doesn't exist, return empty string\n return '';\n }\n}\n\n/**\n * Load output styles from assets/output-styles/\n */\nasync function loadOutputStyles(): Promise<string> {\n try {\n const outputStylesDir = getOutputStylesDir();\n const files = await fs.readdir(outputStylesDir);\n const mdFiles = files.filter((f) => f.endsWith('.md'));\n\n if (mdFiles.length === 0) {\n return '';\n }\n\n const sections: string[] = [];\n\n for (const file of mdFiles) {\n const filePath = path.join(outputStylesDir, file);\n const content = await fs.readFile(filePath, 'utf8');\n\n // Strip YAML front matter\n const stripped = await yamlUtils.stripFrontMatter(content);\n sections.push(stripped);\n }\n\n return sections.join('\\n\\n');\n } catch (_error) {\n // If output styles directory doesn't exist, return empty string\n return '';\n }\n}\n\n/**\n * Enhance agent content by appending rules and output styles\n */\nexport async function enhanceAgentContent(agentContent: string): Promise<string> {\n const rulesAndStyles = await loadRulesAndStyles();\n\n if (!rulesAndStyles) {\n return agentContent;\n }\n\n return `${agentContent}\\n\\n---\\n\\n# Rules and Output Styles\\n\\n${rulesAndStyles}`;\n}\n"
|
|
6
6
|
],
|
|
7
7
|
"mappings": "wFAYA,0BACA,yBAOA,eAAsB,CAAkB,EAAoB,CAC1D,IAAM,EAAqB,CAAC,EAGtB,EAAe,MAAM,EAAU,EACrC,GAAI,EACF,EAAS,KAAK,CAAY,EAI5B,IAAM,EAAgB,MAAM,EAAiB,EAC7C,GAAI,EACF,EAAS,KAAK,CAAa,EAG7B,OAAO,EAAS,KAAK;AAAA;AAAA;AAAA;AAAA,CAAa,EAMpC,eAAe,CAAS,EAAoB,CAC1C,GAAI,CACF,IAAM,EAAW,EAAY,EACvB,EAAgB,EAAK,KAAK,EAAU,SAAS,EAE7C,EAAU,MAAM,EAAG,SAAS,EAAe,MAAM,EAGvD,OAAO,MAAM,EAAU,iBAAiB,CAAO,EAC/C,MAAO,EAAQ,CAEf,MAAO,IAOX,eAAe,CAAgB,EAAoB,CACjD,GAAI,CACF,IAAM,EAAkB,EAAmB,EAErC,GADQ,MAAM,EAAG,QAAQ,CAAe,GACxB,OAAO,CAAC,IAAM,EAAE,SAAS,KAAK,CAAC,EAErD,GAAI,EAAQ,SAAW,EACrB,MAAO,GAGT,IAAM,EAAqB,CAAC,EAE5B,QAAW,KAAQ,EAAS,CAC1B,IAAM,EAAW,EAAK,KAAK,EAAiB,CAAI,EAC1C,EAAU,MAAM,EAAG,SAAS,EAAU,MAAM,EAG5C,EAAW,MAAM,EAAU,iBAAiB,CAAO,EACzD,EAAS,KAAK,CAAQ,EAGxB,OAAO,EAAS,KAAK;AAAA;AAAA,CAAM,EAC3B,MAAO,EAAQ,CAEf,MAAO,IAOX,eAAsB,CAAmB,CAAC,EAAuC,CAC/E,IAAM,EAAiB,MAAM,EAAmB,EAEhD,GAAI,CAAC,EACH,OAAO,EAGT,MAAO,GAAG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAAuD",
|
|
8
|
-
"debugId": "
|
|
8
|
+
"debugId": "A759AE1F311C296864756E2164756E21",
|
|
9
9
|
"names": []
|
|
10
10
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
var z=(j,b)=>({kind:"ConfigError",message:j,configKey:b?.configKey,configPath:b?.configPath,context:b?.context,cause:b?.cause}),B=(j,b,x,v)=>({kind:"FileSystemError",message:j,path:b,operation:x,context:v?.context,cause:v?.cause});
|
|
2
|
-
export{z as
|
|
2
|
+
export{z as f,B as g};
|
|
3
3
|
|
|
4
|
-
//# debugId=
|
|
4
|
+
//# debugId=38904AE3025E665164756E2164756E21
|
|
@@ -5,6 +5,6 @@
|
|
|
5
5
|
"/**\n * Standard error types for the application\n * Typed errors enable better error handling and recovery\n *\n * DESIGN RATIONALE:\n * - Discriminated union for all error types\n * - Each error type has specific context\n * - Enables type-safe error handling\n * - Clear error categories for recovery strategies\n */\n\n/**\n * Base error type with common fields\n */\nexport interface BaseError {\n readonly kind: string;\n readonly message: string;\n readonly context?: Record<string, unknown>;\n readonly cause?: Error;\n}\n\n/**\n * Configuration error - invalid configuration or missing required config\n */\nexport interface ConfigError extends BaseError {\n readonly kind: 'ConfigError';\n readonly configKey?: string;\n readonly configPath?: string;\n}\n\n/**\n * File system error - file not found, permission denied, etc.\n */\nexport interface FileSystemError extends BaseError {\n readonly kind: 'FileSystemError';\n readonly path: string;\n readonly operation: 'read' | 'write' | 'delete' | 'create' | 'stat';\n}\n\n/**\n * Database error - query failure, connection error, etc.\n */\nexport interface DatabaseError extends BaseError {\n readonly kind: 'DatabaseError';\n readonly operation: string;\n readonly table?: string;\n}\n\n/**\n * Validation error - input validation failure\n */\nexport interface ValidationError extends BaseError {\n readonly kind: 'ValidationError';\n readonly field?: string;\n readonly errors: string[];\n}\n\n/**\n * Network error - HTTP error, timeout, connection refused, etc.\n */\nexport interface NetworkError extends BaseError {\n readonly kind: 'NetworkError';\n readonly url?: string;\n readonly statusCode?: number;\n}\n\n/**\n * CLI error - command line interface specific errors\n */\nexport interface CLIError extends BaseError {\n readonly kind: 'CLIError';\n readonly command?: string;\n readonly exitCode?: number;\n}\n\n/**\n * Not found error - resource not found\n */\nexport interface NotFoundError extends BaseError {\n readonly kind: 'NotFoundError';\n readonly resourceType: string;\n readonly resourceId: string;\n}\n\n/**\n * Permission error - insufficient permissions\n */\nexport interface PermissionError extends BaseError {\n readonly kind: 'PermissionError';\n readonly resource: string;\n readonly requiredPermission: string;\n}\n\n/**\n * Unknown error - catch-all for unexpected errors\n */\nexport interface UnknownError extends BaseError {\n readonly kind: 'UnknownError';\n}\n\n/**\n * Union of all error types\n */\nexport type AppError =\n | ConfigError\n | FileSystemError\n | DatabaseError\n | ValidationError\n | NetworkError\n | CLIError\n | NotFoundError\n | PermissionError\n | UnknownError;\n\n/**\n * Error constructors\n */\n\nexport const configError = (\n message: string,\n options?: {\n configKey?: string;\n configPath?: string;\n context?: Record<string, unknown>;\n cause?: Error;\n }\n): ConfigError => ({\n kind: 'ConfigError',\n message,\n configKey: options?.configKey,\n configPath: options?.configPath,\n context: options?.context,\n cause: options?.cause,\n});\n\nexport const fileSystemError = (\n message: string,\n path: string,\n operation: 'read' | 'write' | 'delete' | 'create' | 'stat',\n options?: { context?: Record<string, unknown>; cause?: Error }\n): FileSystemError => ({\n kind: 'FileSystemError',\n message,\n path,\n operation,\n context: options?.context,\n cause: options?.cause,\n});\n\nexport const databaseError = (\n message: string,\n operation: string,\n options?: { table?: string; context?: Record<string, unknown>; cause?: Error }\n): DatabaseError => ({\n kind: 'DatabaseError',\n message,\n operation,\n table: options?.table,\n context: options?.context,\n cause: options?.cause,\n});\n\nexport const validationError = (\n message: string,\n errors: string[],\n options?: { field?: string; context?: Record<string, unknown> }\n): ValidationError => ({\n kind: 'ValidationError',\n message,\n field: options?.field,\n errors,\n context: options?.context,\n});\n\nexport const networkError = (\n message: string,\n options?: { url?: string; statusCode?: number; context?: Record<string, unknown>; cause?: Error }\n): NetworkError => ({\n kind: 'NetworkError',\n message,\n url: options?.url,\n statusCode: options?.statusCode,\n context: options?.context,\n cause: options?.cause,\n});\n\nexport const cliError = (\n message: string,\n options?: {\n command?: string;\n exitCode?: number;\n context?: Record<string, unknown>;\n cause?: Error;\n }\n): CLIError => ({\n kind: 'CLIError',\n message,\n command: options?.command,\n exitCode: options?.exitCode,\n context: options?.context,\n cause: options?.cause,\n});\n\nexport const notFoundError = (\n message: string,\n resourceType: string,\n resourceId: string,\n options?: { context?: Record<string, unknown>; cause?: Error }\n): NotFoundError => ({\n kind: 'NotFoundError',\n message,\n resourceType,\n resourceId,\n context: options?.context,\n cause: options?.cause,\n});\n\nexport const permissionError = (\n message: string,\n resource: string,\n requiredPermission: string,\n options?: { context?: Record<string, unknown>; cause?: Error }\n): PermissionError => ({\n kind: 'PermissionError',\n message,\n resource,\n requiredPermission,\n context: options?.context,\n cause: options?.cause,\n});\n\nexport const unknownError = (\n message: string,\n options?: { context?: Record<string, unknown>; cause?: Error }\n): UnknownError => ({\n kind: 'UnknownError',\n message,\n context: options?.context,\n cause: options?.cause,\n});\n\n/**\n * Convert unknown error to AppError\n */\nexport const toAppError = (error: unknown): AppError => {\n if (isAppError(error)) {\n return error;\n }\n\n if (error instanceof Error) {\n return unknownError(error.message, { cause: error });\n }\n\n return unknownError(String(error));\n};\n\n/**\n * Type guard for AppError\n */\nexport const isAppError = (error: unknown): error is AppError => {\n return typeof error === 'object' && error !== null && 'kind' in error && 'message' in error;\n};\n\n/**\n * Format error for display\n */\nexport const formatError = (error: AppError): string => {\n let formatted = `[${error.kind}] ${error.message}`;\n\n if (error.kind === 'ConfigError' && error.configKey) {\n formatted += `\\n Config key: ${error.configKey}`;\n }\n\n if (error.kind === 'FileSystemError') {\n formatted += `\\n Path: ${error.path}`;\n formatted += `\\n Operation: ${error.operation}`;\n }\n\n if (error.kind === 'DatabaseError') {\n formatted += `\\n Operation: ${error.operation}`;\n if (error.table) {\n formatted += `\\n Table: ${error.table}`;\n }\n }\n\n if (error.kind === 'ValidationError') {\n formatted += `\\n Errors:`;\n for (const err of error.errors) {\n formatted += `\\n - ${err}`;\n }\n }\n\n if (error.kind === 'NetworkError') {\n if (error.url) {\n formatted += `\\n URL: ${error.url}`;\n }\n if (error.statusCode) {\n formatted += `\\n Status: ${error.statusCode}`;\n }\n }\n\n if (error.context) {\n formatted += `\\n Context: ${JSON.stringify(error.context, null, 2)}`;\n }\n\n if (error.cause) {\n formatted += `\\n Caused by: ${error.cause.message}`;\n }\n\n return formatted;\n};\n"
|
|
6
6
|
],
|
|
7
7
|
"mappings": "AAsHO,IAAM,EAAc,CACzB,EACA,KAMiB,CACjB,KAAM,cACN,UACA,UAAW,GAAS,UACpB,WAAY,GAAS,WACrB,QAAS,GAAS,QAClB,MAAO,GAAS,KAClB,GAEa,EAAkB,CAC7B,EACA,EACA,EACA,KACqB,CACrB,KAAM,kBACN,UACA,OACA,YACA,QAAS,GAAS,QAClB,MAAO,GAAS,KAClB",
|
|
8
|
-
"debugId": "
|
|
8
|
+
"debugId": "38904AE3025E665164756E2164756E21",
|
|
9
9
|
"names": []
|
|
10
10
|
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import{f as V}from"./chunk-5eyfa6f8.js";import{h as P,i as Y,j as $}from"./chunk-wj8k6qd1.js";import{B as M,E as b}from"./chunk-e80fq5bq.js";var z=async(q)=>{let{detectInvocation:B,generateHookCommand:G,loadInvocationMethod:N}=await import("./chunk-e07nqvwm.js"),W=await N()||B();return{sessionCommand:G("session",q,W),messageCommand:G("message",q,W),notificationCommand:G("notification",q,W)}},J={sessionCommand:"npx -y @sylphx/flow hook --type session --target claude-code",messageCommand:"npx -y @sylphx/flow hook --type message --target claude-code",notificationCommand:"npx -y @sylphx/flow hook --type notification --target claude-code"},y=(q)=>{return $(()=>JSON.parse(q),(B)=>V("Failed to parse Claude Code settings",{cause:B instanceof Error?B:void 0}))},w=(q=J)=>{let B=q.sessionCommand||J.sessionCommand,G=q.messageCommand||J.messageCommand,N=q.notificationCommand||J.notificationCommand;return{SessionStart:[{hooks:[{type:"command",command:B}]}],UserPromptSubmit:[{hooks:[{type:"command",command:G}]}],Notification:[{matcher:"",hooks:[{type:"command",command:N}]}]}},R=(q,B=J)=>{let G=w(B);return{...q,hooks:{...q.hooks||{},...G}}},Z=(q=J)=>{return{hooks:w(q)}},X=(q)=>{return JSON.stringify(q,null,2)},p=()=>{return"Claude Code hooks configured: SessionStart (static info) + UserPromptSubmit (dynamic info)"},A=(q,B=J)=>{if(q===null||q.trim()===""){let Q=Z(B);return P(X(Q))}let G=y(q);if(G._tag==="Failure"){let Q=Z(B);return P(X(Q))}let N=R(G.value,B);return P(X(N))},D=(q)=>{if(q.sessionCommand!==void 0&&q.sessionCommand.trim()==="")return Y(V("Session command cannot be empty"));if(q.messageCommand!==void 0&&q.messageCommand.trim()==="")return Y(V("Message command cannot be empty"));return P(q)};export{D as validateHookConfig,X as serializeSettings,A as processSettings,y as parseSettings,R as mergeSettings,p as getSuccessMessage,z as generateHookCommands,Z as createSettings,w as buildHookConfiguration,J as DEFAULT_HOOKS};
|
|
2
|
+
|
|
3
|
+
//# debugId=C904B6E8F0EA7DE764756E2164756E21
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/targets/functional/claude-code-logic.ts"],
|
|
4
|
+
"sourcesContent": [
|
|
5
|
+
"/**\n * Business logic for Claude Code target setup\n * Pure functions separated from I/O\n *\n * DESIGN RATIONALE:\n * - Business logic testable without file system\n * - Pure functions for settings transformation\n * - Side effects isolated\n * - Clear separation of concerns\n */\n\nimport type { ConfigError } from '../../core/functional/error-types.js';\nimport { configError } from '../../core/functional/error-types.js';\nimport type { Result } from '../../core/functional/result.js';\nimport { failure, success, tryCatch } from '../../core/functional/result.js';\n\n/**\n * Claude Code settings structure\n */\nexport interface ClaudeCodeSettings {\n hooks?: Record<\n string,\n Array<{\n hooks: Array<{\n type: string;\n command: string;\n }>;\n }>\n >;\n [key: string]: unknown;\n}\n\nexport interface HookConfig {\n sessionCommand?: string;\n messageCommand?: string;\n notificationCommand?: string;\n}\n\n/**\n * Generate hook commands based on how CLI was invoked\n * Detects invocation method and generates matching commands\n */\nexport const generateHookCommands = async (targetId: string): Promise<HookConfig> => {\n const { detectInvocation, generateHookCommand, loadInvocationMethod } = await import(\n '../../utils/cli-invocation.js'\n );\n\n // Try to load saved invocation method, fall back to detection\n const savedMethod = await loadInvocationMethod();\n const method = savedMethod || detectInvocation();\n\n return {\n sessionCommand: generateHookCommand('session', targetId, method),\n messageCommand: generateHookCommand('message', targetId, method),\n notificationCommand: generateHookCommand('notification', targetId, method),\n };\n};\n\n/**\n * Default hook commands (fallback)\n * Now using unified hook command for all content (rules, output styles, system info)\n */\nexport const DEFAULT_HOOKS: HookConfig = {\n sessionCommand: 'npx -y @sylphx/flow hook --type session --target claude-code',\n messageCommand: 'npx -y @sylphx/flow hook --type message --target claude-code',\n notificationCommand: 'npx -y @sylphx/flow hook --type notification --target claude-code',\n};\n\n/**\n * Parse JSON settings (pure)\n */\nexport const parseSettings = (content: string): Result<ClaudeCodeSettings, ConfigError> => {\n return tryCatch(\n () => JSON.parse(content) as ClaudeCodeSettings,\n (error) =>\n configError('Failed to parse Claude Code settings', {\n cause: error instanceof Error ? error : undefined,\n })\n );\n};\n\n/**\n * Build hook configuration (pure)\n */\nexport const buildHookConfiguration = (\n config: HookConfig = DEFAULT_HOOKS\n): ClaudeCodeSettings['hooks'] => {\n const sessionCommand = config.sessionCommand || DEFAULT_HOOKS.sessionCommand!;\n const messageCommand = config.messageCommand || DEFAULT_HOOKS.messageCommand!;\n const notificationCommand = config.notificationCommand || DEFAULT_HOOKS.notificationCommand!;\n\n return {\n SessionStart: [\n {\n hooks: [\n {\n type: 'command',\n command: sessionCommand,\n },\n ],\n },\n ],\n UserPromptSubmit: [\n {\n hooks: [\n {\n type: 'command',\n command: messageCommand,\n },\n ],\n },\n ],\n Notification: [\n {\n matcher: '',\n hooks: [\n {\n type: 'command',\n command: notificationCommand,\n },\n ],\n },\n ],\n };\n};\n\n/**\n * Merge settings with new hooks (pure)\n */\nexport const mergeSettings = (\n existingSettings: ClaudeCodeSettings,\n hookConfig: HookConfig = DEFAULT_HOOKS\n): ClaudeCodeSettings => {\n const newHooks = buildHookConfiguration(hookConfig);\n\n return {\n ...existingSettings,\n hooks: {\n ...(existingSettings.hooks || {}),\n ...newHooks,\n },\n };\n};\n\n/**\n * Create settings with hooks (pure)\n */\nexport const createSettings = (hookConfig: HookConfig = DEFAULT_HOOKS): ClaudeCodeSettings => {\n return {\n hooks: buildHookConfiguration(hookConfig),\n };\n};\n\n/**\n * Serialize settings to JSON (pure)\n */\nexport const serializeSettings = (settings: ClaudeCodeSettings): string => {\n return JSON.stringify(settings, null, 2);\n};\n\n/**\n * Get success message (pure)\n */\nexport const getSuccessMessage = (): string => {\n return 'Claude Code hooks configured: SessionStart (static info) + UserPromptSubmit (dynamic info)';\n};\n\n/**\n * Process settings: parse existing or create new, merge hooks, serialize (pure)\n */\nexport const processSettings = (\n existingContent: string | null,\n hookConfig: HookConfig = DEFAULT_HOOKS\n): Result<string, ConfigError> => {\n if (existingContent === null || existingContent.trim() === '') {\n // No existing settings, create new\n const settings = createSettings(hookConfig);\n return success(serializeSettings(settings));\n }\n\n // Parse existing settings\n const parseResult = parseSettings(existingContent);\n if (parseResult._tag === 'Failure') {\n // If parsing fails, create new settings\n const settings = createSettings(hookConfig);\n return success(serializeSettings(settings));\n }\n\n // Merge with existing\n const merged = mergeSettings(parseResult.value, hookConfig);\n return success(serializeSettings(merged));\n};\n\n/**\n * Validate hook configuration (pure)\n */\nexport const validateHookConfig = (config: HookConfig): Result<HookConfig, ConfigError> => {\n if (config.sessionCommand !== undefined && config.sessionCommand.trim() === '') {\n return failure(configError('Session command cannot be empty'));\n }\n\n if (config.messageCommand !== undefined && config.messageCommand.trim() === '') {\n return failure(configError('Message command cannot be empty'));\n }\n\n return success(config);\n};\n"
|
|
6
|
+
],
|
|
7
|
+
"mappings": "yJA0CO,FAAM,JAAuB,MAAO,IAA0C,CACnF,IAAQ,mBAAkB,sBAAqB,wBAAyB,KACtE,+BAKI,EADc,MAAM,EAAqB,GACjB,EAAiB,EAE/C,MAAO,CACL,eAAgB,EAAoB,UAAW,EAAU,CAAM,EAC/D,eAAgB,EAAoB,UAAW,EAAU,CAAM,EAC/D,oBAAqB,EAAoB,eAAgB,EAAU,CAAM,CAC3E,GAOW,EAA4B,CACvC,eAAgB,+DAChB,eAAgB,+DAChB,oBAAqB,mEACvB,EAKa,EAAgB,CAAC,IAA6D,CACzF,OAAO,EACL,IAAM,KAAK,MAAM,CAAO,EACxB,CAAC,IACC,EAAY,uCAAwC,CAClD,MAAO,aAAiB,MAAQ,EAAQ,MAC1C,CAAC,CACL,GAMW,EAAyB,CACpC,EAAqB,IACW,CAChC,IAAM,EAAiB,EAAO,gBAAkB,EAAc,eACxD,EAAiB,EAAO,gBAAkB,EAAc,eACxD,EAAsB,EAAO,qBAAuB,EAAc,oBAExE,MAAO,CACL,aAAc,CACZ,CACE,MAAO,CACL,CACE,KAAM,UACN,QAAS,CACX,CACF,CACF,CACF,EACA,iBAAkB,CAChB,CACE,MAAO,CACL,CACE,KAAM,UACN,QAAS,CACX,CACF,CACF,CACF,EACA,aAAc,CACZ,CACE,QAAS,GACT,MAAO,CACL,CACE,KAAM,UACN,QAAS,CACX,CACF,CACF,CACF,CACF,GAMW,EAAgB,CAC3B,EACA,EAAyB,IACF,CACvB,IAAM,EAAW,EAAuB,CAAU,EAElD,MAAO,IACF,EACH,MAAO,IACD,EAAiB,OAAS,CAAC,KAC5B,CACL,CACF,GAMW,EAAiB,CAAC,EAAyB,IAAsC,CAC5F,MAAO,CACL,MAAO,EAAuB,CAAU,CAC1C,GAMW,EAAoB,CAAC,IAAyC,CACzE,OAAO,KAAK,UAAU,EAAU,KAAM,CAAC,GAM5B,EAAoB,IAAc,CAC7C,MAAO,8FAMI,EAAkB,CAC7B,EACA,EAAyB,IACO,CAChC,GAAI,IAAoB,MAAQ,EAAgB,KAAK,IAAM,GAAI,CAE7D,IAAM,EAAW,EAAe,CAAU,EAC1C,OAAO,EAAQ,EAAkB,CAAQ,CAAC,EAI5C,IAAM,EAAc,EAAc,CAAe,EACjD,GAAI,EAAY,OAAS,UAAW,CAElC,IAAM,EAAW,EAAe,CAAU,EAC1C,OAAO,EAAQ,EAAkB,CAAQ,CAAC,EAI5C,IAAM,EAAS,EAAc,EAAY,MAAO,CAAU,EAC1D,OAAO,EAAQ,EAAkB,CAAM,CAAC,GAM7B,EAAqB,CAAC,IAAwD,CACzF,GAAI,EAAO,iBAAmB,QAAa,EAAO,eAAe,KAAK,IAAM,GAC1E,OAAO,EAAQ,EAAY,iCAAiC,CAAC,EAG/D,GAAI,EAAO,iBAAmB,QAAa,EAAO,eAAe,KAAK,IAAM,GAC1E,OAAO,EAAQ,EAAY,iCAAiC,CAAC,EAG/D,OAAO,EAAQ,CAAM",
|
|
8
|
+
"debugId": "C904B6E8F0EA7DE764756E2164756E21",
|
|
9
|
+
"names": []
|
|
10
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{C as V,D as C$,E as sI}from"./chunk-e80fq5bq.js";var R=V((W2)=>{var H_=Symbol.for("yaml.alias"),Uz=Symbol.for("yaml.document"),cI=Symbol.for("yaml.map"),_z=Symbol.for("yaml.pair"),V_=Symbol.for("yaml.scalar"),lI=Symbol.for("yaml.seq"),S$=Symbol.for("yaml.node.type"),q2=($)=>!!$&&typeof $==="object"&&$[S$]===H_,j2=($)=>!!$&&typeof $==="object"&&$[S$]===Uz,S2=($)=>!!$&&typeof $==="object"&&$[S$]===cI,J2=($)=>!!$&&typeof $==="object"&&$[S$]===_z,vz=($)=>!!$&&typeof $==="object"&&$[S$]===V_,G2=($)=>!!$&&typeof $==="object"&&$[S$]===lI;function Oz($){if($&&typeof $==="object")switch($[S$]){case cI:case lI:return!0}return!1}function X2($){if($&&typeof $==="object")switch($[S$]){case H_:case cI:case V_:case lI:return!0}return!1}var L2=($)=>(vz($)||Oz($))&&!!$.anchor;W2.ALIAS=H_;W2.DOC=Uz;W2.MAP=cI;W2.NODE_TYPE=S$;W2.PAIR=_z;W2.SCALAR=V_;W2.SEQ=lI;W2.hasAnchor=L2;W2.isAlias=q2;W2.isCollection=Oz;W2.isDocument=j2;W2.isMap=S2;W2.isNode=X2;W2.isPair=J2;W2.isScalar=vz;W2.isSeq=G2});var wu=V((m2)=>{var l=R(),d=Symbol("break visit"),zz=Symbol("skip children"),O$=Symbol("remove node");function nI($,r){let I=wz(r);if(l.isDocument($)){if(wr(null,$.contents,I,Object.freeze([$]))===O$)$.contents=null}else wr(null,$,I,Object.freeze([]))}nI.BREAK=d;nI.SKIP=zz;nI.REMOVE=O$;function wr($,r,I,b){let u=Dz($,r,I,b);if(l.isNode(u)||l.isPair(u))return Nz($,b,u),wr($,u,I,b);if(typeof u!=="symbol"){if(l.isCollection(r)){b=Object.freeze(b.concat(r));for(let g=0;g<r.items.length;++g){let U=wr(g,r.items[g],I,b);if(typeof U==="number")g=U-1;else if(U===d)return d;else if(U===O$)r.items.splice(g,1),g-=1}}else if(l.isPair(r)){b=Object.freeze(b.concat(r));let g=wr("key",r.key,I,b);if(g===d)return d;else if(g===O$)r.key=null;let U=wr("value",r.value,I,b);if(U===d)return d;else if(U===O$)r.value=null}}return u}async function iI($,r){let I=wz(r);if(l.isDocument($)){if(await Dr(null,$.contents,I,Object.freeze([$]))===O$)$.contents=null}else await Dr(null,$,I,Object.freeze([]))}iI.BREAK=d;iI.SKIP=zz;iI.REMOVE=O$;async function Dr($,r,I,b){let u=await Dz($,r,I,b);if(l.isNode(u)||l.isPair(u))return Nz($,b,u),Dr($,u,I,b);if(typeof u!=="symbol"){if(l.isCollection(r)){b=Object.freeze(b.concat(r));for(let g=0;g<r.items.length;++g){let U=await Dr(g,r.items[g],I,b);if(typeof U==="number")g=U-1;else if(U===d)return d;else if(U===O$)r.items.splice(g,1),g-=1}}else if(l.isPair(r)){b=Object.freeze(b.concat(r));let g=await Dr("key",r.key,I,b);if(g===d)return d;else if(g===O$)r.key=null;let U=await Dr("value",r.value,I,b);if(U===d)return d;else if(U===O$)r.value=null}}return u}function wz($){if(typeof $==="object"&&($.Collection||$.Node||$.Value))return Object.assign({Alias:$.Node,Map:$.Node,Scalar:$.Node,Seq:$.Node},$.Value&&{Map:$.Value,Scalar:$.Value,Seq:$.Value},$.Collection&&{Map:$.Collection,Seq:$.Collection},$);return $}function Dz($,r,I,b){if(typeof I==="function")return I($,r,b);if(l.isMap(r))return I.Map?.($,r,b);if(l.isSeq(r))return I.Seq?.($,r,b);if(l.isPair(r))return I.Pair?.($,r,b);if(l.isScalar(r))return I.Scalar?.($,r,b);if(l.isAlias(r))return I.Alias?.($,r,b);return}function Nz($,r,I){let b=r[r.length-1];if(l.isCollection(b))b.items[$]=I;else if(l.isPair(b))if($==="key")b.key=I;else b.value=I;else if(l.isDocument(b))b.contents=I;else{let u=l.isAlias(b)?"alias":"scalar";throw Error(`Cannot replace node with ${u} parent`)}}m2.visit=nI;m2.visitAsync=iI});var Q_=V((i2)=>{var Pz=R(),c2=wu(),l2={"!":"%21",",":"%2C","[":"%5B","]":"%5D","{":"%7B","}":"%7D"},n2=($)=>$.replace(/[!,[\]{}]/g,(r)=>l2[r]);class s{constructor($,r){this.docStart=null,this.docEnd=!1,this.yaml=Object.assign({},s.defaultYaml,$),this.tags=Object.assign({},s.defaultTags,r)}clone(){let $=new s(this.yaml,this.tags);return $.docStart=this.docStart,$}atDocument(){let $=new s(this.yaml,this.tags);switch(this.yaml.version){case"1.1":this.atNextDocument=!0;break;case"1.2":this.atNextDocument=!1,this.yaml={explicit:s.defaultYaml.explicit,version:"1.2"},this.tags=Object.assign({},s.defaultTags);break}return $}add($,r){if(this.atNextDocument)this.yaml={explicit:s.defaultYaml.explicit,version:"1.1"},this.tags=Object.assign({},s.defaultTags),this.atNextDocument=!1;let I=$.trim().split(/[ \t]+/),b=I.shift();switch(b){case"%TAG":{if(I.length!==2){if(r(0,"%TAG directive should contain exactly two parts"),I.length<2)return!1}let[u,g]=I;return this.tags[u]=g,!0}case"%YAML":{if(this.yaml.explicit=!0,I.length!==1)return r(0,"%YAML directive should contain exactly one part"),!1;let[u]=I;if(u==="1.1"||u==="1.2")return this.yaml.version=u,!0;else{let g=/^\d+\.\d+$/.test(u);return r(6,`Unsupported YAML version ${u}`,g),!1}}default:return r(0,`Unknown directive ${b}`,!0),!1}}tagName($,r){if($==="!")return"!";if($[0]!=="!")return r(`Not a valid tag: ${$}`),null;if($[1]==="<"){let g=$.slice(2,-1);if(g==="!"||g==="!!")return r(`Verbatim tags aren't resolved, so ${$} is invalid.`),null;if($[$.length-1]!==">")r("Verbatim tags must end with a >");return g}let[,I,b]=$.match(/^(.*!)([^!]*)$/s);if(!b)r(`The ${$} tag has no suffix`);let u=this.tags[I];if(u)try{return u+decodeURIComponent(b)}catch(g){return r(String(g)),null}if(I==="!")return $;return r(`Could not resolve tag: ${$}`),null}tagString($){for(let[r,I]of Object.entries(this.tags))if($.startsWith(I))return r+n2($.substring(I.length));return $[0]==="!"?$:`!<${$}>`}toString($){let r=this.yaml.explicit?[`%YAML ${this.yaml.version||"1.2"}`]:[],I=Object.entries(this.tags),b;if($&&I.length>0&&Pz.isNode($.contents)){let u={};c2.visit($.contents,(g,U)=>{if(Pz.isNode(U)&&U.tag)u[U.tag]=!0}),b=Object.keys(u)}else b=[];for(let[u,g]of I){if(u==="!!"&&g==="tag:yaml.org,2002:")continue;if(!$||b.some((U)=>U.startsWith(g)))r.push(`%TAG ${u} ${g}`)}return r.join(`
|
|
2
2
|
`)}}s.defaultYaml={explicit:!1,version:"1.2"};s.defaultTags={"!!":"tag:yaml.org,2002:"};i2.Directives=s});var yI=V((t2)=>{var qz=R(),o2=wu();function d2($){if(/[\x00-\x19\s,[\]{}]/.test($)){let I=`Anchor must not contain whitespace or control characters: ${JSON.stringify($)}`;throw Error(I)}return!0}function jz($){let r=new Set;return o2.visit($,{Value(I,b){if(b.anchor)r.add(b.anchor)}}),r}function Sz($,r){for(let I=1;;++I){let b=`${$}${I}`;if(!r.has(b))return b}}function p2($,r){let I=[],b=new Map,u=null;return{onAnchor:(g)=>{I.push(g),u??(u=jz($));let U=Sz(r,u);return u.add(U),U},setAnchors:()=>{for(let g of I){let U=b.get(g);if(typeof U==="object"&&U.anchor&&(qz.isScalar(U.node)||qz.isCollection(U.node)))U.node.anchor=U.anchor;else{let _=Error("Failed to resolve repeated object (this should not happen)");throw _.source=g,_}}},sourceObjects:b}}t2.anchorIsValid=d2;t2.anchorNames=jz;t2.createNodeAnchors=p2;t2.findNewAnchor=Sz});var A_=V((rP)=>{function Du($,r,I,b){if(b&&typeof b==="object")if(Array.isArray(b))for(let u=0,g=b.length;u<g;++u){let U=b[u],_=Du($,b,String(u),U);if(_===void 0)delete b[u];else if(_!==U)b[u]=_}else if(b instanceof Map)for(let u of Array.from(b.keys())){let g=b.get(u),U=Du($,b,u,g);if(U===void 0)b.delete(u);else if(U!==g)b.set(u,U)}else if(b instanceof Set)for(let u of Array.from(b)){let g=Du($,b,u,u);if(g===void 0)b.delete(u);else if(g!==u)b.delete(u),b.add(g)}else for(let[u,g]of Object.entries(b)){let U=Du($,b,u,g);if(U===void 0)delete b[u];else if(U!==g)b[u]=U}return $.call(r,I,b)}rP.applyReviver=Du});var A$=V((bP)=>{var IP=R();function Jz($,r,I){if(Array.isArray($))return $.map((b,u)=>Jz(b,String(u),I));if($&&typeof $.toJSON==="function"){if(!I||!IP.hasAnchor($))return $.toJSON(r,I);let b={aliasCount:0,count:1,res:void 0};I.anchors.set($,b),I.onCreate=(g)=>{b.res=g,delete I.onCreate};let u=$.toJSON(r,I);if(I.onCreate)I.onCreate(u);return u}if(typeof $==="bigint"&&!I?.keep)return Number($);return $}bP.toJS=Jz});var oI=V((vP)=>{var UP=A_(),Gz=R(),_P=A$();class Xz{constructor($){Object.defineProperty(this,Gz.NODE_TYPE,{value:$})}clone(){let $=Object.create(Object.getPrototypeOf(this),Object.getOwnPropertyDescriptors(this));if(this.range)$.range=this.range.slice();return $}toJS($,{mapAsMap:r,maxAliasCount:I,onAnchor:b,reviver:u}={}){if(!Gz.isDocument($))throw TypeError("A document argument is required");let g={anchors:new Map,doc:$,keep:!0,mapAsMap:r===!0,mapKeyWarned:!1,maxAliasCount:typeof I==="number"?I:100},U=_P.toJS(this,"",g);if(typeof b==="function")for(let{count:_,res:v}of g.anchors.values())b(v,_);return typeof u==="function"?UP.applyReviver(u,{"":U},"",U):U}}vP.NodeBase=Xz});var Nu=V((PP)=>{var zP=yI(),wP=wu(),Nr=R(),DP=oI(),NP=A$();class Lz extends DP.NodeBase{constructor($){super(Nr.ALIAS);this.source=$,Object.defineProperty(this,"tag",{set(){throw Error("Alias nodes cannot have tags")}})}resolve($,r){let I;if(r?.aliasResolveCache)I=r.aliasResolveCache;else if(I=[],wP.visit($,{Node:(u,g)=>{if(Nr.isAlias(g)||Nr.hasAnchor(g))I.push(g)}}),r)r.aliasResolveCache=I;let b=void 0;for(let u of I){if(u===this)break;if(u.anchor===this.source)b=u}return b}toJSON($,r){if(!r)return{source:this.source};let{anchors:I,doc:b,maxAliasCount:u}=r,g=this.resolve(b,r);if(!g){let _=`Unresolved alias (the anchor must be set before the alias): ${this.source}`;throw ReferenceError(_)}let U=I.get(g);if(!U)NP.toJS(g,null,r),U=I.get(g);if(!U||U.res===void 0)throw ReferenceError("This should not happen: Alias anchor was not resolved?");if(u>=0){if(U.count+=1,U.aliasCount===0)U.aliasCount=dI(b,g,I);if(U.count*U.aliasCount>u)throw ReferenceError("Excessive alias count indicates a resource exhaustion attack")}return U.res}toString($,r,I){let b=`*${this.source}`;if($){if(zP.anchorIsValid(this.source),$.options.verifyAliasOrder&&!$.anchors.has(this.source)){let u=`Unresolved alias (the anchor must be set before the alias): ${this.source}`;throw Error(u)}if($.implicitKey)return`${b} `}return b}}function dI($,r,I){if(Nr.isAlias(r)){let b=r.resolve($),u=I&&b&&I.get(b);return u?u.count*u.aliasCount:0}else if(Nr.isCollection(r)){let b=0;for(let u of r.items){let g=dI($,u,I);if(g>b)b=g}return b}else if(Nr.isPair(r)){let b=dI($,r.key,I),u=dI($,r.value,I);return Math.max(b,u)}return 1}PP.Alias=Lz});var m=V((XP)=>{var jP=R(),SP=oI(),JP=A$(),GP=($)=>!$||typeof $!=="function"&&typeof $!=="object";class c$ extends SP.NodeBase{constructor($){super(jP.SCALAR);this.value=$}toJSON($,r){return r?.keep?this.value:JP.toJS(this.value,$,r)}toString(){return String(this.value)}}c$.BLOCK_FOLDED="BLOCK_FOLDED";c$.BLOCK_LITERAL="BLOCK_LITERAL";c$.PLAIN="PLAIN";c$.QUOTE_DOUBLE="QUOTE_DOUBLE";c$.QUOTE_SINGLE="QUOTE_SINGLE";XP.Scalar=c$;XP.isScalarValue=GP});var Pu=V((YP)=>{var HP=Nu(),l$=R(),Wz=m(),VP="tag:yaml.org,2002:";function QP($,r,I){if(r){let b=I.filter((g)=>g.tag===r),u=b.find((g)=>!g.format)??b[0];if(!u)throw Error(`Tag ${r} not found`);return u}return I.find((b)=>b.identify?.($)&&!b.format)}function AP($,r,I){if(l$.isDocument($))$=$.contents;if(l$.isNode($))return $;if(l$.isPair($)){let P=I.schema[l$.MAP].createNode?.(I.schema,null,I);return P.items.push($),P}if($ instanceof String||$ instanceof Number||$ instanceof Boolean||typeof BigInt<"u"&&$ instanceof BigInt)$=$.valueOf();let{aliasDuplicateObjects:b,onAnchor:u,onTagObj:g,schema:U,sourceObjects:_}=I,v=void 0;if(b&&$&&typeof $==="object")if(v=_.get($),v)return v.anchor??(v.anchor=u($)),new HP.Alias(v.anchor);else v={anchor:null,node:null},_.set($,v);if(r?.startsWith("!!"))r=VP+r.slice(2);let O=QP($,r,U.tags);if(!O){if($&&typeof $.toJSON==="function")$=$.toJSON();if(!$||typeof $!=="object"){let P=new Wz.Scalar($);if(v)v.node=P;return P}O=$ instanceof Map?U[l$.MAP]:(Symbol.iterator in Object($))?U[l$.SEQ]:U[l$.MAP]}if(g)g(O),delete I.onTagObj;let w=O?.createNode?O.createNode(I.schema,$,I):typeof O?.nodeClass?.from==="function"?O.nodeClass.from(I.schema,$,I):new Wz.Scalar($);if(r)w.tag=r;else if(!O.default)w.tag=O.tag;if(v)v.node=w;return w}YP.createNode=AP});var pI=V((MP)=>{var KP=Pu(),z$=R(),FP=oI();function Y_($,r,I){let b=I;for(let u=r.length-1;u>=0;--u){let g=r[u];if(typeof g==="number"&&Number.isInteger(g)&&g>=0){let U=[];U[g]=b,b=U}else b=new Map([[g,b]])}return KP.createNode(b,void 0,{aliasDuplicateObjects:!1,keepUndefined:!1,onAnchor:()=>{throw Error("This should not happen, please report a bug.")},schema:$,sourceObjects:new Map})}var Hz=($)=>$==null||typeof $==="object"&&!!$[Symbol.iterator]().next().done;class Vz extends FP.NodeBase{constructor($,r){super($);Object.defineProperty(this,"schema",{value:r,configurable:!0,enumerable:!1,writable:!0})}clone($){let r=Object.create(Object.getPrototypeOf(this),Object.getOwnPropertyDescriptors(this));if($)r.schema=$;if(r.items=r.items.map((I)=>z$.isNode(I)||z$.isPair(I)?I.clone($):I),this.range)r.range=this.range.slice();return r}addIn($,r){if(Hz($))this.add(r);else{let[I,...b]=$,u=this.get(I,!0);if(z$.isCollection(u))u.addIn(b,r);else if(u===void 0&&this.schema)this.set(I,Y_(this.schema,b,r));else throw Error(`Expected YAML collection at ${I}. Remaining path: ${b}`)}}deleteIn($){let[r,...I]=$;if(I.length===0)return this.delete(r);let b=this.get(r,!0);if(z$.isCollection(b))return b.deleteIn(I);else throw Error(`Expected YAML collection at ${r}. Remaining path: ${I}`)}getIn($,r){let[I,...b]=$,u=this.get(I,!0);if(b.length===0)return!r&&z$.isScalar(u)?u.value:u;else return z$.isCollection(u)?u.getIn(b,r):void 0}hasAllNullValues($){return this.items.every((r)=>{if(!z$.isPair(r))return!1;let I=r.value;return I==null||$&&z$.isScalar(I)&&I.value==null&&!I.commentBefore&&!I.comment&&!I.tag})}hasIn($){let[r,...I]=$;if(I.length===0)return this.has(r);let b=this.get(r,!0);return z$.isCollection(b)?b.hasIn(I):!1}setIn($,r){let[I,...b]=$;if(b.length===0)this.set(I,r);else{let u=this.get(I,!0);if(z$.isCollection(u))u.setIn(b,r);else if(u===void 0&&this.schema)this.set(I,Y_(this.schema,b,r));else throw Error(`Expected YAML collection at ${I}. Remaining path: ${b}`)}}}MP.Collection=Vz;MP.collectionFromPath=Y_;MP.isEmptyPath=Hz});var qu=V((CP)=>{var EP=($)=>$.replace(/^(?!$)(?: $)?/gm,"#");function B_($,r){if(/^\n+$/.test($))return $.substring(1);return r?$.replace(/^(?! *$)/gm,r):$}var kP=($,r,I)=>$.endsWith(`
|
|
3
3
|
`)?B_(I,r):I.includes(`
|
|
4
4
|
`)?`
|
|
@@ -178,6 +178,6 @@ ${$}`}},async stripFrontMatter($){let{content:r}=await Wr.extractFrontMatter($);
|
|
|
178
178
|
`,r+=` Config Path: ${$.mcpConfigPath}
|
|
179
179
|
|
|
180
180
|
`,r}
|
|
181
|
-
export{X_ as
|
|
181
|
+
export{X_ as l,_$ as m,W_ as n,v$ as o,gz as p,bz as q,aH as r,P2 as s,sH as t,$8 as u,r8 as v,u8 as w,Zv as x,Wr as y,j1 as z,FV as A};
|
|
182
182
|
|
|
183
|
-
//# debugId=
|
|
183
|
+
//# debugId=476DDAECA397672464756E2164756E21
|