SYMBOL INDEX (737 symbols across 137 files) FILE: scripts/pack-version-check.mjs function log (line 18) | function log(msg) { function run (line 23) | function run(cmd, args, opts = {}) { function npmPack (line 27) | function npmPack() { function main (line 48) | function main() { FILE: scripts/postinstall.js function shouldSkipInstallation (line 24) | function shouldSkipInstallation() { function distExists (line 41) | async function distExists() { function detectShell (line 54) | async function detectShell() { function installCompletions (line 68) | async function installCompletions(shell) { function main (line 113) | async function main() { FILE: src/cli/index.ts function getCommandPath (line 43) | function getCommandPath(command: Command): string { FILE: src/commands/change.ts constant ARCHIVE_DIR (line 11) | const ARCHIVE_DIR = 'archive'; constant TASK_PATTERN (line 12) | const TASK_PATTERN = /^[-*]\s+\[[\sx]\]/i; constant COMPLETED_TASK_PATTERN (line 13) | const COMPLETED_TASK_PATTERN = /^[-*]\s+\[x\]/i; class ChangeCommand (line 15) | class ChangeCommand { method constructor (line 18) | constructor() { method show (line 28) | async show(changeName?: string, options?: { json?: boolean; requiremen... method list (line 97) | async list(options?: { json?: boolean; long?: boolean }): Promise { method validate (line 185) | async validate(changeName?: string, options?: { strict?: boolean; json... method getActiveChanges (line 242) | private async getActiveChanges(changesPath: string): Promise { method extractTitle (line 262) | private extractTitle(content: string, changeName: string): string { method countTasks (line 267) | private countTasks(content: string): { total: number; completed: numbe... method printNextSteps (line 284) | private printNextSteps(): void { FILE: src/commands/completion.ts type GenerateOptions (line 8) | interface GenerateOptions { type InstallOptions (line 12) | interface InstallOptions { type UninstallOptions (line 17) | interface UninstallOptions { type CompleteOptions (line 22) | interface CompleteOptions { class CompletionCommand (line 29) | class CompletionCommand { method constructor (line 32) | constructor() { method resolveShellOrExit (line 42) | private resolveShellOrExit(shell: string | undefined, operationName: s... method generate (line 81) | async generate(options: GenerateOptions = {}): Promise { method install (line 93) | async install(options: InstallOptions = {}): Promise { method uninstall (line 105) | async uninstall(options: UninstallOptions = {}): Promise { method generateForShell (line 115) | private async generateForShell(shell: SupportedShell): Promise { method installForShell (line 124) | private async installForShell(shell: SupportedShell, verbose: boolean)... method uninstallForShell (line 210) | private async uninstallForShell(shell: SupportedShell, skipConfirmatio... method complete (line 263) | async complete(options: CompleteOptions): Promise { method normalizeShell (line 303) | private normalizeShell(shell?: string): string | undefined { FILE: src/commands/config.ts type ProfileAction (line 26) | type ProfileAction = 'both' | 'delivery' | 'workflows' | 'keep'; type ProfileState (line 28) | interface ProfileState { type ProfileStateDiff (line 34) | interface ProfileStateDiff { type WorkflowPromptMeta (line 39) | interface WorkflowPromptMeta { constant WORKFLOW_PROMPT_META (line 44) | const WORKFLOW_PROMPT_META: Record = { function isPromptCancellationError (line 91) | function isPromptCancellationError(error: unknown): boolean { function resolveCurrentProfileState (line 101) | function resolveCurrentProfileState(config: GlobalConfig): ProfileState { function deriveProfileFromWorkflowSelection (line 113) | function deriveProfileFromWorkflowSelection(selectedWorkflows: string[])... function formatWorkflowSummary (line 123) | function formatWorkflowSummary(workflows: readonly string[], profile: Pr... function stableWorkflowOrder (line 127) | function stableWorkflowOrder(workflows: readonly string[]): string[] { function diffProfileState (line 153) | function diffProfileState(before: ProfileState, after: ProfileState): Pr... function maybeWarnConfigDrift (line 189) | function maybeWarnConfigDrift( function registerConfigCommand (line 209) | function registerConfigCommand(program: Command): void { FILE: src/commands/feedback.ts function isGhInstalled (line 11) | function isGhInstalled(): boolean { function isGhAuthenticated (line 24) | function isGhAuthenticated(): boolean { function getVersion (line 36) | function getVersion(): string { function getPlatform (line 48) | function getPlatform(): string { function getTimestamp (line 55) | function getTimestamp(): string { function generateMetadata (line 62) | function generateMetadata(): string { function formatTitle (line 77) | function formatTitle(message: string): string { function formatBody (line 84) | function formatBody(bodyText?: string): string { function generateManualSubmissionUrl (line 100) | function generateManualSubmissionUrl(title: string, body: string): string { function displayFormattedFeedback (line 112) | function displayFormattedFeedback(title: string, body: string): void { function submitViaGhCli (line 125) | function submitViaGhCli(title: string, body: string): void { function handleFallback (line 163) | function handleFallback(title: string, body: string, reason: 'missing' |... class FeedbackCommand (line 187) | class FeedbackCommand { method execute (line 188) | async execute(message: string, options?: { body?: string }): Promise { function registerSpecCommand (line 111) | function registerSpecCommand(rootProgram: typeof program) { FILE: src/commands/validate.ts type ItemType (line 8) | type ItemType = 'change' | 'spec'; type ExecuteOptions (line 10) | interface ExecuteOptions { type BulkItemResult (line 22) | interface BulkItemResult { class ValidateCommand (line 30) | class ValidateCommand { method execute (line 31) | async execute(itemName: string | undefined, options: ExecuteOptions = ... method normalizeType (line 59) | private normalizeType(value?: string): ItemType | undefined { method runInteractiveSelector (line 66) | private async runInteractiveSelector(opts: { strict: boolean; json: bo... method printNonInteractiveHint (line 96) | private printNonInteractiveHint(): void { method validateDirectItem (line 105) | private async validateDirectItem(itemName: string, opts: { typeOverrid... method validateByType (line 130) | private async validateByType(type: ItemType, id: string, opts: { stric... method printReport (line 150) | private printReport(type: ItemType, id: string, report: { valid: boole... method printNextSteps (line 169) | private printNextSteps(type: ItemType): void { method runBulkValidation (line 184) | private async runBulkValidation(scope: { changes: boolean; specs: bool... function summarizeType (line 298) | function summarizeType(results: BulkItemResult[], type: ItemType) { function normalizeConcurrency (line 306) | function normalizeConcurrency(value?: string): number | undefined { function getPlannedId (line 313) | function getPlannedId(index: number, changeIds: string[], specIds: strin... function getPlannedType (line 320) | function getPlannedType(index: number, changeIds: string[], specIds: str... FILE: src/commands/workflow/instructions.ts type InstructionsOptions (line 28) | interface InstructionsOptions { type ApplyInstructionsOptions (line 34) | interface ApplyInstructionsOptions { function instructionsCommand (line 44) | async function instructionsCommand( function printInstructionsText (line 97) | function printInstructionsText(instructions: ArtifactInstructions, isBlo... function parseTasksFile (line 217) | function parseTasksFile(content: string): TaskItem[] { function artifactOutputExists (line 244) | function artifactOutputExists(changeDir: string, generates: string): boo... function generateApplyInstructions (line 307) | async function generateApplyInstructions( function applyInstructionsCommand (line 402) | async function applyInstructionsCommand(options: ApplyInstructionsOption... function printApplyInstructionsText (line 431) | function printApplyInstructionsText(instructions: ApplyInstructions): vo... FILE: src/commands/workflow/new-change.ts type NewChangeOptions (line 16) | interface NewChangeOptions { function newChangeCommand (line 25) | async function newChangeCommand(name: string | undefined, options: NewCh... FILE: src/commands/workflow/schemas.ts type SchemasOptions (line 14) | interface SchemasOptions { function schemasCommand (line 22) | async function schemasCommand(options: SchemasOptions): Promise { FILE: src/commands/workflow/shared.ts type TaskItem (line 18) | interface TaskItem { type ApplyInstructions (line 24) | interface ApplyInstructions { constant DEFAULT_SCHEMA (line 44) | const DEFAULT_SCHEMA = 'spec-driven'; function isColorDisabled (line 53) | function isColorDisabled(): boolean { function getStatusColor (line 60) | function getStatusColor(status: 'done' | 'ready' | 'blocked'): (text: st... function getStatusIndicator (line 77) | function getStatusIndicator(status: 'done' | 'ready' | 'blocked'): string { function getAvailableChanges (line 93) | async function getAvailableChanges(projectRoot: string): Promise { function printStatusText (line 87) | function printStatusText(status: ChangeStatus): void { FILE: src/commands/workflow/templates.ts type TemplatesOptions (line 20) | interface TemplatesOptions { type TemplateInfo (line 25) | interface TemplateInfo { function templatesCommand (line 35) | async function templatesCommand(options: TemplatesOptions): Promise { FILE: src/core/archive.ts function copyDirRecursive (line 16) | async function copyDirRecursive(src: string, dest: string): Promise { function moveDirectory (line 36) | async function moveDirectory(src: string, dest: string): Promise { class ArchiveCommand (line 50) | class ArchiveCommand { method execute (line 51) | async execute( method selectChange (line 290) | private async selectChange(changesDir: string): Promise { method getArchiveDate (line 335) | private getArchiveDate(): string { FILE: src/core/artifact-graph/graph.ts class ArtifactGraph (line 8) | class ArtifactGraph { method constructor (line 12) | private constructor(schema: SchemaYaml) { method fromYaml (line 20) | static fromYaml(filePath: string): ArtifactGraph { method fromYamlContent (line 28) | static fromYamlContent(yamlContent: string): ArtifactGraph { method fromSchema (line 36) | static fromSchema(schema: SchemaYaml): ArtifactGraph { method getArtifact (line 43) | getArtifact(id: string): Artifact | undefined { method getAllArtifacts (line 50) | getAllArtifacts(): Artifact[] { method getName (line 57) | getName(): string { method getVersion (line 64) | getVersion(): number { method getBuildOrder (line 72) | getBuildOrder(): string[] { method getNextArtifacts (line 118) | getNextArtifacts(completed: CompletedSet): string[] { method isComplete (line 139) | isComplete(completed: CompletedSet): boolean { method getBlocked (line 151) | getBlocked(completed: CompletedSet): BlockedArtifacts { FILE: src/core/artifact-graph/instruction-loader.ts class TemplateLoadError (line 16) | class TemplateLoadError extends Error { method constructor (line 17) | constructor( type ChangeContext (line 29) | interface ChangeContext { type ArtifactInstructions (line 47) | interface ArtifactInstructions { type DependencyInfo (line 77) | interface DependencyInfo { type ArtifactStatus (line 91) | interface ArtifactStatus { type ChangeStatus (line 105) | interface ChangeStatus { function loadTemplate (line 127) | function loadTemplate( function loadChangeContext (line 173) | function loadChangeContext( function generateInstructions (line 211) | function generateInstructions( function getDependencyInfo (line 280) | function getDependencyInfo( function getUnlockedArtifacts (line 299) | function getUnlockedArtifacts(graph: ArtifactGraph, artifactId: string):... function formatChangeStatus (line 317) | function formatChangeStatus(context: ChangeContext): ChangeStatus { FILE: src/core/artifact-graph/resolver.ts class SchemaLoadError (line 11) | class SchemaLoadError extends Error { method constructor (line 12) | constructor( function getPackageSchemasDir (line 26) | function getPackageSchemasDir(): string { function getUserSchemasDir (line 35) | function getUserSchemasDir(): string { function getProjectSchemasDir (line 44) | function getProjectSchemasDir(projectRoot: string): string { function getSchemaDir (line 63) | function getSchemaDir( function resolveSchema (line 109) | function resolveSchema(name: string, projectRoot?: string): SchemaYaml { function listSchemas (line 161) | function listSchemas(projectRoot?: string): string[] { type SchemaInfo (line 211) | interface SchemaInfo { function listSchemasWithInfo (line 224) | function listSchemasWithInfo(projectRoot?: string): SchemaInfo[] { FILE: src/core/artifact-graph/schema.ts class SchemaValidationError (line 5) | class SchemaValidationError extends Error { method constructor (line 6) | constructor(message: string) { function loadSchema (line 15) | function loadSchema(filePath: string): SchemaYaml { function parseSchema (line 23) | function parseSchema(yamlContent: string): SchemaYaml { function validateNoDuplicateIds (line 50) | function validateNoDuplicateIds(artifacts: Artifact[]): void { function validateRequiresReferences (line 63) | function validateRequiresReferences(artifacts: Artifact[]): void { function validateNoCycles (line 81) | function validateNoCycles(artifacts: Artifact[]): void { FILE: src/core/artifact-graph/state.ts function detectCompleted (line 16) | function detectCompleted(graph: ArtifactGraph, changeDir: string): Compl... function isArtifactComplete (line 37) | function isArtifactComplete(generates: string, changeDir: string): boole... function isGlobPattern (line 52) | function isGlobPattern(pattern: string): boolean { function hasGlobMatches (line 60) | function hasGlobMatches(pattern: string): boolean { FILE: src/core/artifact-graph/types.ts type Artifact (line 34) | type Artifact = z.infer; type ApplyPhase (line 35) | type ApplyPhase = z.infer; type SchemaYaml (line 36) | type SchemaYaml = z.infer; type ChangeMetadata (line 54) | type ChangeMetadata = z.infer; type CompletedSet (line 59) | type CompletedSet = Set; type BlockedArtifacts (line 62) | interface BlockedArtifacts { FILE: src/core/available-tools.ts function getAvailableTools (line 19) | function getAvailableTools(projectPath: string): AIToolOption[] { FILE: src/core/command-generation/adapters/amazon-q.ts method getFilePath (line 18) | getFilePath(commandId: string): string { method formatFile (line 22) | formatFile(content: CommandContent): string { FILE: src/core/command-generation/adapters/antigravity.ts method getFilePath (line 18) | getFilePath(commandId: string): string { method formatFile (line 22) | formatFile(content: CommandContent): string { FILE: src/core/command-generation/adapters/auggie.ts method getFilePath (line 18) | getFilePath(commandId: string): string { method formatFile (line 22) | formatFile(content: CommandContent): string { FILE: src/core/command-generation/adapters/claude.ts function escapeYamlValue (line 14) | function escapeYamlValue(value: string): string { function formatTagsArray (line 28) | function formatTagsArray(tags: string[]): string { method getFilePath (line 41) | getFilePath(commandId: string): string { method formatFile (line 45) | formatFile(content: CommandContent): string { FILE: src/core/command-generation/adapters/cline.ts method getFilePath (line 19) | getFilePath(commandId: string): string { method formatFile (line 23) | formatFile(content: CommandContent): string { FILE: src/core/command-generation/adapters/codebuddy.ts method getFilePath (line 18) | getFilePath(commandId: string): string { method formatFile (line 22) | formatFile(content: CommandContent): string { FILE: src/core/command-generation/adapters/codex.ts function getCodexHome (line 18) | function getCodexHome(): string { method getFilePath (line 31) | getFilePath(commandId: string): string { method formatFile (line 35) | formatFile(content: CommandContent): string { FILE: src/core/command-generation/adapters/continue.ts method getFilePath (line 18) | getFilePath(commandId: string): string { method formatFile (line 22) | formatFile(content: CommandContent): string { FILE: src/core/command-generation/adapters/costrict.ts method getFilePath (line 18) | getFilePath(commandId: string): string { method formatFile (line 22) | formatFile(content: CommandContent): string { FILE: src/core/command-generation/adapters/crush.ts method getFilePath (line 18) | getFilePath(commandId: string): string { method formatFile (line 22) | formatFile(content: CommandContent): string { FILE: src/core/command-generation/adapters/cursor.ts function escapeYamlValue (line 15) | function escapeYamlValue(value: string): string { method getFilePath (line 34) | getFilePath(commandId: string): string { method formatFile (line 38) | formatFile(content: CommandContent): string { FILE: src/core/command-generation/adapters/factory.ts method getFilePath (line 18) | getFilePath(commandId: string): string { method formatFile (line 22) | formatFile(content: CommandContent): string { FILE: src/core/command-generation/adapters/gemini.ts method getFilePath (line 18) | getFilePath(commandId: string): string { method formatFile (line 22) | formatFile(content: CommandContent): string { FILE: src/core/command-generation/adapters/github-copilot.ts method getFilePath (line 18) | getFilePath(commandId: string): string { method formatFile (line 22) | formatFile(content: CommandContent): string { FILE: src/core/command-generation/adapters/iflow.ts method getFilePath (line 18) | getFilePath(commandId: string): string { method formatFile (line 22) | formatFile(content: CommandContent): string { FILE: src/core/command-generation/adapters/kilocode.ts method getFilePath (line 19) | getFilePath(commandId: string): string { method formatFile (line 23) | formatFile(content: CommandContent): string { FILE: src/core/command-generation/adapters/kiro.ts method getFilePath (line 18) | getFilePath(commandId: string): string { method formatFile (line 22) | formatFile(content: CommandContent): string { FILE: src/core/command-generation/adapters/opencode.ts method getFilePath (line 19) | getFilePath(commandId: string): string { method formatFile (line 23) | formatFile(content: CommandContent): string { FILE: src/core/command-generation/adapters/pi.ts function escapeYamlValue (line 15) | function escapeYamlValue(value: string): string { method getFilePath (line 34) | getFilePath(commandId: string): string { method formatFile (line 38) | formatFile(content: CommandContent): string { FILE: src/core/command-generation/adapters/qoder.ts method getFilePath (line 18) | getFilePath(commandId: string): string { method formatFile (line 22) | formatFile(content: CommandContent): string { FILE: src/core/command-generation/adapters/qwen.ts method getFilePath (line 18) | getFilePath(commandId: string): string { method formatFile (line 22) | formatFile(content: CommandContent): string { FILE: src/core/command-generation/adapters/roocode.ts method getFilePath (line 19) | getFilePath(commandId: string): string { method formatFile (line 23) | formatFile(content: CommandContent): string { FILE: src/core/command-generation/adapters/windsurf.ts function escapeYamlValue (line 15) | function escapeYamlValue(value: string): string { function formatTagsArray (line 29) | function formatTagsArray(tags: string[]): string { method getFilePath (line 42) | getFilePath(commandId: string): string { method formatFile (line 46) | formatFile(content: CommandContent): string { FILE: src/core/command-generation/generator.ts function generateCommand (line 15) | function generateCommand( function generateCommands (line 31) | function generateCommands( FILE: src/core/command-generation/registry.ts class CommandAdapterRegistry (line 36) | class CommandAdapterRegistry { method register (line 70) | static register(adapter: ToolCommandAdapter): void { method get (line 79) | static get(toolId: string): ToolCommandAdapter | undefined { method getAll (line 87) | static getAll(): ToolCommandAdapter[] { method has (line 96) | static has(toolId: string): boolean { FILE: src/core/command-generation/types.ts type CommandContent (line 12) | interface CommandContent { type ToolCommandAdapter (line 32) | interface ToolCommandAdapter { type GeneratedCommand (line 53) | interface GeneratedCommand { FILE: src/core/completions/command-registry.ts constant COMMON_FLAGS (line 6) | const COMMON_FLAGS = { constant COMMAND_REGISTRY (line 35) | const COMMAND_REGISTRY: CommandDefinition[] = [ FILE: src/core/completions/completion-provider.ts type CacheEntry (line 6) | interface CacheEntry { class CompletionProvider (line 16) | class CompletionProvider { method constructor (line 27) | constructor( method getChangeIds (line 39) | async getChangeIds(): Promise { method getSpecIds (line 64) | async getSpecIds(): Promise { method getAllIds (line 89) | async getAllIds(): Promise<{ changeIds: string[]; specIds: string[] }> { method clearCache (line 101) | clearCache(): void { method getCacheStats (line 111) | getCacheStats(): { FILE: src/core/completions/factory.ts type InstallationResult (line 15) | interface InstallationResult { type CompletionInstaller (line 32) | interface CompletionInstaller { class CompletionFactory (line 41) | class CompletionFactory { method createGenerator (line 51) | static createGenerator(shell: SupportedShell): CompletionGenerator { method createInstaller (line 73) | static createInstaller(shell: SupportedShell): CompletionInstaller { method isSupported (line 94) | static isSupported(shell: string): shell is SupportedShell { method getSupportedShells (line 103) | static getSupportedShells(): SupportedShell[] { FILE: src/core/completions/generators/bash-generator.ts class BashGenerator (line 8) | class BashGenerator implements CompletionGenerator { method generate (line 17) | generate(commands: CommandDefinition[]): string { method generateCommandCase (line 81) | private generateCommandCase(cmd: CommandDefinition, indent: string): s... method generateArgumentCompletion (line 128) | private generateArgumentCompletion(cmd: CommandDefinition, indent: str... method generatePositionalCompletion (line 158) | private generatePositionalCompletion(positionalType: string | undefine... method escapeCommandName (line 187) | private escapeCommandName(name: string): string { FILE: src/core/completions/generators/fish-generator.ts class FishGenerator (line 8) | class FishGenerator implements CompletionGenerator { method generate (line 17) | generate(commands: CommandDefinition[]): string { method generateCommandCompletions (line 56) | private generateCommandCompletions(cmd: CommandDefinition): string[] { method generateFlagCompletion (line 105) | private generateFlagCompletion(flag: FlagDefinition, condition: string... method generatePositionalCompletion (line 153) | private generatePositionalCompletion(positionalType: string | undefine... method escapeDescription (line 181) | private escapeDescription(description: string): string { FILE: src/core/completions/generators/powershell-generator.ts class PowerShellGenerator (line 8) | class PowerShellGenerator implements CompletionGenerator { method stripTrailingCommaFromLastLine (line 11) | private stripTrailingCommaFromLastLine(lines: string[]): void { method generate (line 22) | generate(commands: CommandDefinition[]): string { method generateCommandCase (line 79) | private generateCommandCase(cmd: CommandDefinition, indent: string): s... method generateArgumentCompletion (line 142) | private generateArgumentCompletion(cmd: CommandDefinition, indent: str... method generatePositionalCompletion (line 180) | private generatePositionalCompletion(positionalType: string | undefine... method escapeDescription (line 217) | private escapeDescription(description: string): string { FILE: src/core/completions/generators/zsh-generator.ts class ZshGenerator (line 8) | class ZshGenerator implements CompletionGenerator { method generate (line 17) | generate(commands: CommandDefinition[]): string { method generateCommandFunction (line 86) | private generateCommandFunction(cmd: CommandDefinition): string[] { method generateSubcommandFunction (line 170) | private generateSubcommandFunction(parentName: string, subcmd: Command... method generateFlagSpec (line 201) | private generateFlagSpec(flag: FlagDefinition): string { method generatePositionalSpec (line 236) | private generatePositionalSpec(positionalType?: string): string { method escapeDescription (line 256) | private escapeDescription(desc: string): string { method escapeValue (line 268) | private escapeValue(value: string): string { method sanitizeFunctionName (line 278) | private sanitizeFunctionName(name: string): string { FILE: src/core/completions/installers/bash-installer.ts class BashInstaller (line 11) | class BashInstaller { method constructor (line 22) | constructor(homeDir: string = os.homedir()) { method isBashCompletionInstalled (line 31) | async isBashCompletionInstalled(): Promise { method getInstallationPath (line 59) | async getInstallationPath(): Promise { method backupExistingFile (line 73) | async backupExistingFile(targetPath: string): Promise { method removeBashrcConfig (line 157) | async removeBashrcConfig(): Promise { method install (line 213) | async install(completionScript: string): Promise { method generateInstructions (line 309) | private generateInstructions(installedPath: string): string[] { method uninstall (line 335) | async uninstall(options?: { yes?: boolean }): Promise<{ success: boole... FILE: src/core/completions/installers/fish-installer.ts class FishInstaller (line 10) | class FishInstaller { method constructor (line 13) | constructor(homeDir: string = os.homedir()) { method getInstallationPath (line 22) | getInstallationPath(): string { method backupExistingFile (line 32) | async backupExistingFile(targetPath: string): Promise { method uninstall (line 124) | async uninstall(options?: { yes?: boolean }): Promise<{ success: boole... FILE: src/core/completions/installers/powershell-installer.ts class PowerShellInstaller (line 11) | class PowerShellInstaller { method constructor (line 22) | constructor(homeDir: string = os.homedir()) { method getProfilePath (line 32) | getProfilePath(): string { method getAllProfilePaths (line 53) | private getAllProfilePaths(): string[] { method getInstallationPath (line 77) | getInstallationPath(): string { method backupExistingFile (line 89) | async backupExistingFile(targetPath: string): Promise { method removeProfileConfig (line 174) | async removeProfileConfig(): Promise { method install (line 226) | async install(completionScript: string): Promise { method generateInstructions (line 303) | private generateInstructions(installedPath: string): string[] { method uninstall (line 327) | async uninstall(options?: { yes?: boolean }): Promise<{ success: boole... FILE: src/core/completions/installers/zsh-installer.ts class ZshInstaller (line 11) | class ZshInstaller { method constructor (line 22) | constructor(homeDir: string = os.homedir()) { method isOhMyZshInstalled (line 31) | async isOhMyZshInstalled(): Promise { method getInstallationPath (line 53) | async getInstallationPath(): Promise<{ path: string; isOhMyZsh: boolea... method backupExistingFile (line 77) | async backupExistingFile(targetPath: string): Promise { method hasZshrcConfig (line 159) | private async hasZshrcConfig(): Promise { method needsFpathConfig (line 176) | private async needsFpathConfig(completionsDir: string): Promise { method install (line 252) | async install(completionScript: string): Promise { method generateOhMyZshFpathGuidance (line 353) | private generateOhMyZshFpathGuidance(completionsDir: string): string[]... method generateInstructions (line 370) | private generateInstructions(isOhMyZsh: boolean, installedPath: string... method uninstall (line 405) | async uninstall(): Promise<{ success: boolean; message: string }> { method isInstalled (line 461) | async isInstalled(): Promise { method getInstallationInfo (line 476) | async getInstallationInfo(): Promise<{ FILE: src/core/completions/templates/bash-templates.ts constant BASH_DYNAMIC_HELPERS (line 6) | const BASH_DYNAMIC_HELPERS = `# Dynamic completion helpers FILE: src/core/completions/templates/fish-templates.ts constant FISH_STATIC_HELPERS (line 6) | const FISH_STATIC_HELPERS = `# Helper function to check if a subcommand ... constant FISH_DYNAMIC_HELPERS (line 23) | const FISH_DYNAMIC_HELPERS = `# Dynamic completion helpers FILE: src/core/completions/templates/powershell-templates.ts constant POWERSHELL_DYNAMIC_HELPERS (line 6) | const POWERSHELL_DYNAMIC_HELPERS = `# Dynamic completion helpers FILE: src/core/completions/templates/zsh-templates.ts constant ZSH_DYNAMIC_HELPERS (line 6) | const ZSH_DYNAMIC_HELPERS = `# Dynamic completion helpers FILE: src/core/completions/types.ts type FlagDefinition (line 6) | interface FlagDefinition { type CommandDefinition (line 36) | interface CommandDefinition { type CompletionGenerator (line 78) | interface CompletionGenerator { FILE: src/core/config-prompts.ts function serializeConfig (line 9) | function serializeConfig(config: Partial): string { FILE: src/core/config-schema.ts type GlobalConfigType (line 27) | type GlobalConfigType = z.infer; constant DEFAULT_CONFIG (line 32) | const DEFAULT_CONFIG: GlobalConfigType = { constant KNOWN_TOP_LEVEL_KEYS (line 38) | const KNOWN_TOP_LEVEL_KEYS = new Set([...Object.keys(DEFAULT_CONFIG), 'w... function validateConfigKeyPath (line 44) | function validateConfigKeyPath(path: string): { valid: boolean; reason?:... function getNestedValue (line 77) | function getNestedValue(obj: Record, path: string): unk... function setNestedValue (line 102) | function setNestedValue(obj: Record, path: string, valu... function deleteNestedValue (line 125) | function deleteNestedValue(obj: Record, path: string): ... function coerceValue (line 155) | function coerceValue(value: string, forceString: boolean = false): strin... function formatValueYaml (line 184) | function formatValueYaml(value: unknown, indent: number = 0): string { function validateConfig (line 231) | function validateConfig(config: unknown): { success: boolean; error?: st... FILE: src/core/config.ts constant OPENSPEC_DIR_NAME (line 1) | const OPENSPEC_DIR_NAME = 'openspec'; constant OPENSPEC_MARKERS (line 3) | const OPENSPEC_MARKERS = { type OpenSpecConfig (line 8) | interface OpenSpecConfig { type AIToolOption (line 12) | interface AIToolOption { constant AI_TOOLS (line 20) | const AI_TOOLS: AIToolOption[] = [ FILE: src/core/converters/json-converter.ts class JsonConverter (line 8) | class JsonConverter { method convertSpecToJson (line 9) | convertSpecToJson(filePath: string): string { method convertChangeToJson (line 27) | async convertChangeToJson(filePath: string): Promise { method extractNameFromPath (line 46) | private extractNameFromPath(filePath: string): string { FILE: src/core/global-config.ts constant GLOBAL_CONFIG_DIR_NAME (line 6) | const GLOBAL_CONFIG_DIR_NAME = 'openspec'; constant GLOBAL_CONFIG_FILE_NAME (line 7) | const GLOBAL_CONFIG_FILE_NAME = 'config.json'; constant GLOBAL_DATA_DIR_NAME (line 8) | const GLOBAL_DATA_DIR_NAME = 'openspec'; type Profile (line 11) | type Profile = 'core' | 'custom'; type Delivery (line 12) | type Delivery = 'both' | 'skills' | 'commands'; type GlobalConfig (line 15) | interface GlobalConfig { constant DEFAULT_CONFIG (line 22) | const DEFAULT_CONFIG: GlobalConfig = { function getGlobalConfigDir (line 35) | function getGlobalConfigDir(): string { function getGlobalDataDir (line 66) | function getGlobalDataDir(): string { function getGlobalConfigPath (line 92) | function getGlobalConfigPath(): string { function getGlobalConfig (line 101) | function getGlobalConfig(): GlobalConfig { function saveGlobalConfig (line 145) | function saveGlobalConfig(config: GlobalConfig): void { FILE: src/core/init.ts constant DEFAULT_SCHEMA (line 56) | const DEFAULT_SCHEMA = 'spec-driven'; constant PROGRESS_SPINNER (line 58) | const PROGRESS_SPINNER = { constant WORKFLOW_TO_SKILL_DIR (line 63) | const WORKFLOW_TO_SKILL_DIR: Record = { type InitCommandOptions (line 81) | type InitCommandOptions = { class InitCommand (line 92) | class InitCommand { method constructor (line 98) | constructor(options: InitCommandOptions = {}) { method execute (line 105) | async execute(targetPath: string): Promise { method validate (line 161) | private async validate( method canPromptInteractively (line 174) | private canPromptInteractively(): boolean { method resolveProfileOverride (line 180) | private resolveProfileOverride(): Profile | undefined { method handleLegacyCleanup (line 196) | private async handleLegacyCleanup(projectPath: string, extendMode: boo... method performLegacyCleanup (line 235) | private async performLegacyCleanup(projectPath: string, detection: Leg... method getSelectedTools (line 255) | private async getSelectedTools( method resolveToolsArg (line 354) | private resolveToolsArg(): string[] | null { method validateTools (line 417) | private validateTools( method createDirectoryStructure (line 455) | private async createDirectoryStructure(openspecPath: string, extendMod... method generateSkillsAndCommands (line 494) | private async generateSkillsAndCommands( method createConfig (line 598) | private async createConfig(openspecPath: string, extendMode: boolean):... method displaySuccessMessage (line 626) | private displaySuccessMessage( method startSpinner (line 728) | private startSpinner(text: string) { method removeSkillDirs (line 737) | private async removeSkillDirs(skillsDir: string): Promise { method removeCommandFiles (line 758) | private async removeCommandFiles(projectPath: string, toolId: string):... FILE: src/core/legacy-cleanup.ts constant LEGACY_CONFIG_FILES (line 16) | const LEGACY_CONFIG_FILES = [ constant LEGACY_SLASH_COMMAND_PATHS (line 32) | const LEGACY_SLASH_COMMAND_PATHS: Record { function formatRelativeTime (line 56) | function formatRelativeTime(date: Date): string { class ListCommand (line 77) | class ListCommand { method execute (line 78) | async execute(targetPath: string = '.', mode: 'changes' | 'specs' = 'c... FILE: src/core/migration.ts type InstalledWorkflowArtifacts (line 16) | interface InstalledWorkflowArtifacts { function scanInstalledWorkflowArtifacts (line 22) | function scanInstalledWorkflowArtifacts( function scanInstalledWorkflows (line 69) | function scanInstalledWorkflows(projectPath: string, tools: AIToolOption... function inferDelivery (line 73) | function inferDelivery(artifacts: InstalledWorkflowArtifacts): Delivery { function migrateIfNeeded (line 92) | function migrateIfNeeded(projectPath: string, tools: AIToolOption[]): vo... FILE: src/core/parsers/change-parser.ts type DeltaSection (line 6) | interface DeltaSection { class ChangeParser (line 12) | class ChangeParser extends MarkdownParser { method constructor (line 15) | constructor(content: string, changeDir: string) { method parseChangeWithDeltas (line 20) | async parseChangeWithDeltas(name: string): Promise { method parseDeltaSpecs (line 55) | private async parseDeltaSpecs(specsDir: string): Promise { method parseSpecDeltas (line 84) | private parseSpecDeltas(specName: string, content: string): Delta[] { method parseRenames (line 151) | private parseRenames(content: string): Array<{ from: string; to: strin... method parseSectionsFromContent (line 179) | private parseSectionsFromContent(content: string): Section[] { method getContentUntilNextHeaderFromLines (line 218) | private getContentUntilNextHeaderFromLines(lines: string[], startLine:... FILE: src/core/parsers/markdown-parser.ts type Section (line 3) | interface Section { class MarkdownParser (line 10) | class MarkdownParser { method constructor (line 14) | constructor(content: string) { method normalizeContent (line 20) | protected static normalizeContent(content: string): string { method parseSpec (line 24) | parseSpec(name: string): Spec { method parseChange (line 51) | parseChange(name: string): Change { method parseSections (line 78) | protected parseSections(): Section[] { method getContentUntilNextHeader (line 115) | protected getContentUntilNextHeader(startLine: number, currentLevel: n... method findSection (line 132) | protected findSection(sections: Section[], title: string): Section | u... method parseRequirements (line 145) | protected parseRequirements(section: Section): Requirement[] { method parseScenarios (line 187) | protected parseScenarios(requirementSection: Section): Scenario[] { method parseDeltas (line 203) | protected parseDeltas(content: string): Delta[] { FILE: src/core/parsers/requirement-blocks.ts type RequirementBlock (line 1) | interface RequirementBlock { type RequirementsSectionParts (line 7) | interface RequirementsSectionParts { function normalizeRequirementName (line 15) | function normalizeRequirementName(name: string): string { constant REQUIREMENT_HEADER_REGEX (line 19) | const REQUIREMENT_HEADER_REGEX = /^###\s*Requirement:\s*(.+)\s*$/; function extractRequirementsSection (line 24) | function extractRequirementsSection(content: string): RequirementsSectio... type DeltaPlan (line 99) | interface DeltaPlan { function normalizeLineEndings (line 112) | function normalizeLineEndings(content: string): string { function parseDeltaSpec (line 119) | function parseDeltaSpec(content: string): DeltaPlan { function splitTopLevelSections (line 144) | function splitTopLevelSections(content: string): Record { function getSectionCaseInsensitive (line 164) | function getSectionCaseInsensitive(sections: Record, des... function parseRequirementBlocksFromSection (line 172) | function parseRequirementBlocksFromSection(sectionBody: string): Require... function parseRemovedNames (line 196) | function parseRemovedNames(sectionBody: string): string[] { function parseRenamedPairs (line 215) | function parseRenamedPairs(sectionBody: string): Array<{ from: string; t... FILE: src/core/profile-sync-drift.ts type WorkflowId (line 9) | type WorkflowId = (typeof ALL_WORKFLOWS)[number]; constant WORKFLOW_TO_SKILL_DIR (line 14) | const WORKFLOW_TO_SKILL_DIR: Record = { function toKnownWorkflows (line 28) | function toKnownWorkflows(workflows: readonly string[]): WorkflowId[] { function toolHasAnyConfiguredCommand (line 38) | function toolHasAnyConfiguredCommand(projectPath: string, toolId: string... function getCommandConfiguredTools (line 56) | function getCommandConfiguredTools(projectPath: string): string[] { function getConfiguredToolsForProfileSync (line 74) | function getConfiguredToolsForProfileSync(projectPath: string): string[] { function hasToolProfileOrDeliveryDrift (line 88) | function hasToolProfileOrDeliveryDrift( function getToolsNeedingProfileSync (line 166) | function getToolsNeedingProfileSync( function getInstalledWorkflowsForTool (line 178) | function getInstalledWorkflowsForTool( function hasProjectConfigDrift (line 218) | function hasProjectConfigDrift( FILE: src/core/profiles.ts constant CORE_WORKFLOWS (line 14) | const CORE_WORKFLOWS = ['propose', 'explore', 'apply', 'archive'] as const; constant ALL_WORKFLOWS (line 19) | const ALL_WORKFLOWS = [ type WorkflowId (line 33) | type WorkflowId = (typeof ALL_WORKFLOWS)[number]; type CoreWorkflowId (line 34) | type CoreWorkflowId = (typeof CORE_WORKFLOWS)[number]; function getProfileWorkflows (line 42) | function getProfileWorkflows( FILE: src/core/project-config.ts type ProjectConfig (line 43) | type ProjectConfig = z.infer; constant MAX_CONTEXT_SIZE (line 45) | const MAX_CONTEXT_SIZE = 50 * 1024; function readProjectConfig (line 66) | function readProjectConfig(projectRoot: string): ProjectConfig | null { function validateConfigRules (line 173) | function validateConfigRules( function suggestSchemas (line 201) | function suggestSchemas( FILE: src/core/schemas/base.schema.ts type Scenario (line 19) | type Scenario = z.infer; type Requirement (line 20) | type Requirement = z.infer; FILE: src/core/schemas/change.schema.ts type DeltaOperation (line 40) | type DeltaOperation = z.infer; type Delta (line 41) | type Delta = z.infer; type Change (line 42) | type Change = z.infer; FILE: src/core/schemas/spec.schema.ts type Spec (line 17) | type Spec = z.infer; FILE: src/core/shared/skill-generation.ts type SkillTemplateEntry (line 37) | interface SkillTemplateEntry { type CommandTemplateEntry (line 46) | interface CommandTemplateEntry { function getSkillTemplates (line 56) | function getSkillTemplates(workflowFilter?: readonly string[]): SkillTem... function getCommandTemplates (line 82) | function getCommandTemplates(workflowFilter?: readonly string[]): Comman... function getCommandContents (line 108) | function getCommandContents(workflowFilter?: readonly string[]): Command... function generateSkillContent (line 127) | function generateSkillContent( FILE: src/core/shared/tool-detection.ts constant SKILL_NAMES (line 14) | const SKILL_NAMES = [ type SkillName (line 28) | type SkillName = (typeof SKILL_NAMES)[number]; constant COMMAND_IDS (line 33) | const COMMAND_IDS = [ type CommandId (line 47) | type CommandId = (typeof COMMAND_IDS)[number]; type ToolSkillStatus (line 52) | interface ToolSkillStatus { type ToolVersionStatus (line 64) | interface ToolVersionStatus { function getToolsWithSkillsDir (line 80) | function getToolsWithSkillsDir(): string[] { function getToolSkillStatus (line 87) | function getToolSkillStatus(projectRoot: string, toolId: string): ToolSk... function getToolStates (line 113) | function getToolStates(projectRoot: string): Map { function extractGeneratedByVersion (line 128) | function extractGeneratedByVersion(skillFilePath: string): string | null { function getToolVersionStatus (line 160) | function getToolVersionStatus( function getConfiguredTools (line 203) | function getConfiguredTools(projectRoot: string): string[] { function getAllToolVersionStatus (line 212) | function getAllToolVersionStatus( FILE: src/core/specs-apply.ts type SpecUpdate (line 23) | interface SpecUpdate { type ApplyResult (line 29) | interface ApplyResult { type SpecsApplyOutput (line 37) | interface SpecsApplyOutput { function findSpecUpdates (line 56) | async function findSpecUpdates(changeDir: string, mainSpecsDir: string):... function buildUpdatedSpec (line 101) | async function buildUpdatedSpec( function writeUpdatedSpec (line 342) | async function writeUpdatedSpec( function buildSpecSkeleton (line 363) | function buildSpecSkeleton(specFolderName: string, changeName: string): ... function applySpecs (line 376) | async function applySpecs( FILE: src/core/styles/palette.ts constant PALETTE (line 3) | const PALETTE = { FILE: src/core/templates/types.ts type SkillTemplate (line 5) | interface SkillTemplate { type CommandTemplate (line 14) | interface CommandTemplate { FILE: src/core/templates/workflows/apply-change.ts function getApplyChangeSkillTemplate (line 9) | function getApplyChangeSkillTemplate(): SkillTemplate { function getOpsxApplyCommandTemplate (line 164) | function getOpsxApplyCommandTemplate(): CommandTemplate { FILE: src/core/templates/workflows/archive-change.ts function getArchiveChangeSkillTemplate (line 9) | function getArchiveChangeSkillTemplate(): SkillTemplate { function getOpsxArchiveCommandTemplate (line 122) | function getOpsxArchiveCommandTemplate(): CommandTemplate { FILE: src/core/templates/workflows/bulk-archive-change.ts function getBulkArchiveChangeSkillTemplate (line 9) | function getBulkArchiveChangeSkillTemplate(): SkillTemplate { function getOpsxBulkArchiveCommandTemplate (line 254) | function getOpsxBulkArchiveCommandTemplate(): CommandTemplate { FILE: src/core/templates/workflows/continue-change.ts function getContinueChangeSkillTemplate (line 9) | function getContinueChangeSkillTemplate(): SkillTemplate { function getOpsxContinueCommandTemplate (line 126) | function getOpsxContinueCommandTemplate(): CommandTemplate { FILE: src/core/templates/workflows/explore.ts function getExploreSkillTemplate (line 9) | function getExploreSkillTemplate(): SkillTemplate { function getOpsxExploreCommandTemplate (line 296) | function getOpsxExploreCommandTemplate(): CommandTemplate { FILE: src/core/templates/workflows/feedback.ts function getFeedbackSkillTemplate (line 9) | function getFeedbackSkillTemplate(): SkillTemplate { FILE: src/core/templates/workflows/ff-change.ts function getFfChangeSkillTemplate (line 9) | function getFfChangeSkillTemplate(): SkillTemplate { function getOpsxFfCommandTemplate (line 109) | function getOpsxFfCommandTemplate(): CommandTemplate { FILE: src/core/templates/workflows/new-change.ts function getNewChangeSkillTemplate (line 9) | function getNewChangeSkillTemplate(): SkillTemplate { function getOpsxNewCommandTemplate (line 82) | function getOpsxNewCommandTemplate(): CommandTemplate { FILE: src/core/templates/workflows/onboard.ts function getOnboardSkillTemplate (line 9) | function getOnboardSkillTemplate(): SkillTemplate { function getOnboardInstructions (line 20) | function getOnboardInstructions(): string { function getOpsxOnboardCommandTemplate (line 566) | function getOpsxOnboardCommandTemplate(): CommandTemplate { FILE: src/core/templates/workflows/propose.ts function getOpsxProposeSkillTemplate (line 9) | function getOpsxProposeSkillTemplate(): SkillTemplate { function getOpsxProposeCommandTemplate (line 118) | function getOpsxProposeCommandTemplate(): CommandTemplate { FILE: src/core/templates/workflows/sync-specs.ts function getSyncSpecsSkillTemplate (line 9) | function getSyncSpecsSkillTemplate(): SkillTemplate { function getOpsxSyncCommandTemplate (line 146) | function getOpsxSyncCommandTemplate(): CommandTemplate { FILE: src/core/templates/workflows/verify-change.ts function getVerifyChangeSkillTemplate (line 9) | function getVerifyChangeSkillTemplate(): SkillTemplate { function getOpsxVerifyCommandTemplate (line 176) | function getOpsxVerifyCommandTemplate(): CommandTemplate { FILE: src/core/update.ts type UpdateCommandOptions (line 57) | interface UpdateCommandOptions { function scanInstalledWorkflows (line 68) | function scanInstalledWorkflows(projectPath: string, toolIds: string[]):... class UpdateCommand (line 75) | class UpdateCommand { method constructor (line 78) | constructor(options: UpdateCommandOptions = {}) { method execute (line 82) | async execute(projectPath: string): Promise { method displayUpToDateMessage (line 299) | private displayUpToDateMessage(toolStatuses: ToolVersionStatus[]): void { method displayUpdatePlan (line 310) | private displayUpdatePlan( method detectNewTools (line 335) | private detectNewTools(projectPath: string, configuredTools: string[])... method displayExtraWorkflowsNote (line 358) | private displayExtraWorkflowsNote( method removeSkillDirs (line 376) | private async removeSkillDirs(skillsDir: string): Promise { method removeUnselectedSkillDirs (line 401) | private async removeUnselectedSkillDirs( method removeCommandFiles (line 431) | private async removeCommandFiles( method removeUnselectedCommandFiles (line 461) | private async removeUnselectedCommandFiles( method handleLegacyCleanup (line 496) | private async handleLegacyCleanup( method performLegacyCleanup (line 551) | private async performLegacyCleanup(projectPath: string, detection: Leg... method upgradeLegacyTools (line 571) | private async upgradeLegacyTools( FILE: src/core/validation/constants.ts constant MIN_WHY_SECTION_LENGTH (line 6) | const MIN_WHY_SECTION_LENGTH = 50; constant MIN_PURPOSE_LENGTH (line 7) | const MIN_PURPOSE_LENGTH = 50; constant MAX_WHY_SECTION_LENGTH (line 10) | const MAX_WHY_SECTION_LENGTH = 1000; constant MAX_REQUIREMENT_TEXT_LENGTH (line 11) | const MAX_REQUIREMENT_TEXT_LENGTH = 500; constant MAX_DELTAS_PER_CHANGE (line 12) | const MAX_DELTAS_PER_CHANGE = 10; constant VALIDATION_MESSAGES (line 15) | const VALIDATION_MESSAGES = { FILE: src/core/validation/types.ts type ValidationLevel (line 1) | type ValidationLevel = 'ERROR' | 'WARNING' | 'INFO'; type ValidationIssue (line 3) | interface ValidationIssue { type ValidationReport (line 11) | interface ValidationReport { FILE: src/core/validation/validator.ts class Validator (line 16) | class Validator { method constructor (line 19) | constructor(strictMode: boolean = false) { method validateSpec (line 23) | async validateSpec(filePath: string): Promise { method validateSpecContent (line 56) | async validateSpecContent(specName: string, content: string): Promise<... method validateChange (line 74) | async validateChange(filePath: string): Promise { method validateChangeDeltaSpecs (line 114) | async validateChangeDeltaSpecs(changeDir: string): Promise { method getChangesData (line 81) | private async getChangesData(openspecDir: string): Promise<{ method getSpecsData (line 132) | private async getSpecsData(openspecDir: string): Promise { FILE: src/telemetry/config.ts type TelemetryConfig (line 9) | interface TelemetryConfig { type GlobalConfig (line 14) | interface GlobalConfig { function getConfigPath (line 23) | function getConfigPath(): string { function readConfig (line 32) | async function readConfig(): Promise { function writeConfig (line 50) | async function writeConfig(updates: Partial): Promise { function getTelemetryConfig (line 72) | async function getTelemetryConfig(): Promise { function updateTelemetryConfig (line 80) | async function updateTelemetryConfig(updates: Partial):... FILE: src/telemetry/index.ts constant POSTHOG_API_KEY (line 17) | const POSTHOG_API_KEY = 'phc_Hthu8YvaIJ9QaFKyTG4TbVwkbd5ktcAFzVTKeMmoW2g'; constant POSTHOG_HOST (line 19) | const POSTHOG_HOST = 'https://edge.openspec.dev'; function isTelemetryEnabled (line 32) | function isTelemetryEnabled(): boolean { function getOrCreateAnonymousId (line 55) | async function getOrCreateAnonymousId(): Promise { function getClient (line 78) | function getClient(): PostHog { function trackCommand (line 95) | async function trackCommand(commandName: string, version: string): Promi... function maybeShowTelemetryNotice (line 122) | async function maybeShowTelemetryNotice(): Promise { function shutdown (line 149) | async function shutdown(): Promise { FILE: src/ui/ascii-patterns.ts constant CHARS (line 14) | const CHARS = supportsUnicode constant WELCOME_ANIMATION (line 29) | const WELCOME_ANIMATION = { FILE: src/ui/welcome-screen.ts constant MIN_WIDTH (line 10) | const MIN_WIDTH = 60; constant ART_COLUMN_WIDTH (line 13) | const ART_COLUMN_WIDTH = 24; function getWelcomeText (line 18) | function getWelcomeText(): string[] { function renderFrame (line 39) | function renderFrame(artLines: string[], textLines: string[]): string { function canAnimate (line 63) | function canAnimate(): boolean { function waitForEnter (line 80) | function waitForEnter(): Promise { function showWelcomeScreen (line 121) | async function showWelcomeScreen(): Promise { FILE: src/utils/change-metadata.ts constant METADATA_FILENAME (line 8) | const METADATA_FILENAME = '.openspec.yaml'; class ChangeMetadataError (line 13) | class ChangeMetadataError extends Error { method constructor (line 14) | constructor( function validateSchemaName (line 32) | function validateSchemaName( function writeChangeMetadata (line 53) | function writeChangeMetadata( function readChangeMetadata (line 94) | function readChangeMetadata( function resolveSchemaForChange (line 162) | function resolveSchemaForChange( FILE: src/utils/change-utils.ts constant DEFAULT_SCHEMA (line 6) | const DEFAULT_SCHEMA = 'spec-driven'; type CreateChangeOptions (line 11) | interface CreateChangeOptions { type CreateChangeResult (line 19) | interface CreateChangeResult { type ValidationResult (line 27) | interface ValidationResult { function validateChangeName (line 48) | function validateChangeName(name: string): ValidationResult { function createChange (line 112) | async function createChange( FILE: src/utils/command-references.ts function transformToHyphenCommands (line 18) | function transformToHyphenCommands(text: string): string { FILE: src/utils/file-system.ts function isMarkerOnOwnLine (line 4) | function isMarkerOnOwnLine(content: string, markerIndex: number, markerL... function findMarkerIndex (line 26) | function findMarkerIndex( class FileSystemUtils (line 44) | class FileSystemUtils { method toPosixPath (line 49) | static toPosixPath(p: string): string { method isWindowsBasePath (line 53) | private static isWindowsBasePath(basePath: string): boolean { method normalizeSegments (line 57) | private static normalizeSegments(segments: string[]): string[] { method joinPath (line 63) | static joinPath(basePath: string, ...segments: string[]): string { method createDirectory (line 80) | static async createDirectory(dirPath: string): Promise { method fileExists (line 84) | static async fileExists(filePath: string): Promise { method findFirstExistingDirectory (line 101) | private static async findFirstExistingDirectory(dirPath: string): Prom... method canWriteFile (line 131) | static async canWriteFile(filePath: string): Promise { method directoryExists (line 172) | static async directoryExists(dirPath: string): Promise { method writeFile (line 184) | static async writeFile(filePath: string, content: string): Promise { method updateFileWithMarkers (line 194) | static async updateFileWithMarkers( method ensureWritePermissions (line 232) | static async ensureWritePermissions(dirPath: string): Promise { function removeMarkerBlock (line 282) | function removeMarkerBlock( FILE: src/utils/interactive.ts type InteractiveOptions (line 1) | type InteractiveOptions = { function resolveNoInteractive (line 17) | function resolveNoInteractive(value?: boolean | InteractiveOptions): boo... function isInteractive (line 22) | function isInteractive(value?: boolean | InteractiveOptions): boolean { FILE: src/utils/item-discovery.ts function getActiveChangeIds (line 4) | async function getActiveChangeIds(root: string = process.cwd()): Promise... function getSpecIds (line 25) | async function getSpecIds(root: string = process.cwd()): Promise { function prepareFixture (line 19) | async function prepareFixture(fixtureName: string): Promise { FILE: test/commands/artifact-workflow.test.ts function getOutput (line 26) | function getOutput(result: { stdout: string; stderr: string }): string { function normalizePaths (line 33) | function normalizePaths(str: string): string { function createTestChange (line 42) | async function createTestChange( FILE: test/commands/config-profile.test.ts function runConfigCommand (line 13) | async function runConfigCommand(args: string[]): Promise { function getPromptMocks (line 20) | async function getPromptMocks(): Promise<{ function setupDriftedProjectArtifacts (line 85) | function setupDriftedProjectArtifacts(projectDir: string): void { function setupSyncedCoreBothArtifacts (line 92) | function setupSyncedCoreBothArtifacts(projectDir: string): void { function addExtraSyncWorkflowArtifacts (line 114) | function addExtraSyncWorkflowArtifacts(projectDir: string): void { FILE: test/core/artifact-graph/workflow.integration.test.ts function normalizeBlocked (line 14) | function normalizeBlocked(blocked: BlockedArtifacts): BlockedArtifacts { FILE: test/core/command-generation/types.test.ts method getFilePath (line 42) | getFilePath(commandId: string): string { method formatFile (line 45) | formatFile(content: CommandContent): string { FILE: test/core/init.test.ts function fileExists (line 744) | async function fileExists(filePath: string): Promise { function directoryExists (line 753) | async function directoryExists(dirPath: string): Promise { FILE: test/core/migration.test.ts constant CLAUDE_TOOL (line 12) | const CLAUDE_TOOL = AI_TOOLS.find((tool) => tool.value === 'claude') as ... function ensureClaudeTool (line 14) | function ensureClaudeTool(): AIToolOption { function writeSkill (line 21) | async function writeSkill(projectPath: string, dirName: string): Promise... function writeManagedCommand (line 27) | async function writeManagedCommand(projectPath: string, workflowId: stri... function readRawConfig (line 40) | function readRawConfig(): Record { FILE: test/core/parsers/change-parser.test.ts function withTempDir (line 7) | async function withTempDir(run: (dir: string) => Promise) { FILE: test/core/profile-sync-drift.test.ts function writeSkill (line 12) | function writeSkill(projectDir: string, workflowId: string): void { function writeCommand (line 19) | function writeCommand(projectDir: string, workflowId: string): void { function setupCoreSkills (line 28) | function setupCoreSkills(projectDir: string): void { function setupCoreCommands (line 34) | function setupCoreCommands(projectDir: string): void { FILE: test/core/templates/skill-templates-parity.test.ts constant EXPECTED_FUNCTION_HASHES (line 32) | const EXPECTED_FUNCTION_HASHES: Record = { constant EXPECTED_GENERATED_SKILL_CONTENT_HASHES (line 58) | const EXPECTED_GENERATED_SKILL_CONTENT_HASHES: Record = { function stableStringify (line 72) | function stableStringify(value: unknown): string { function hash (line 88) | function hash(value: string): string { FILE: test/core/update.test.ts function setMockConfig (line 33) | function setMockConfig(config: GlobalConfig) { function resetMockConfig (line 37) | function resetMockConfig() { FILE: test/helpers/run-cli.ts type RunCommandOptions (line 14) | interface RunCommandOptions { type RunCLIOptions (line 19) | interface RunCLIOptions { type RunCLIResult (line 26) | interface RunCLIResult { function runCommand (line 35) | function runCommand(command: string, args: string[], options: RunCommand... function ensureCliBuilt (line 56) | async function ensureCliBuilt() { function runCLI (line 75) | async function runCLI(args: string[] = [], options: RunCLIOptions = {}):... FILE: test/prompts/searchable-multi-select.test.ts function resetState (line 20) | function resetState() { function rerender (line 35) | function rerender() { function pressKey (line 78) | function pressKey(name: string) { function getSelectedValues (line 83) | function getSelectedValues(): string[] { function getStatus (line 87) | function getStatus(): string { function getError (line 91) | function getError(): string | null { function setup (line 101) | async function setup(choices = testChoices, validate?: (selected: string... FILE: test/specs/source-specs-normalization.test.ts constant DELTA_HEADER_PATTERN (line 11) | const DELTA_HEADER_PATTERN = /^## (ADDED|MODIFIED|REMOVED|RENAMED) Requi... constant PURPOSE_PLACEHOLDER_PATTERN (line 12) | const PURPOSE_PLACEHOLDER_PATTERN = /TBD - created by archiving change .... function getSpecFiles (line 14) | async function getSpecFiles(): Promise { FILE: vitest.config.ts function resolveMaxWorkers (line 4) | function resolveMaxWorkers(): number | undefined { FILE: vitest.setup.ts function setup (line 4) | async function setup() { function teardown (line 9) | async function teardown() {