iosm-cli 0.1.3 → 0.2.1

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.
Files changed (132) hide show
  1. package/CHANGELOG.md +27 -0
  2. package/README.md +88 -46
  3. package/dist/core/agent-teams.d.ts.map +1 -1
  4. package/dist/core/agent-teams.js +38 -11
  5. package/dist/core/agent-teams.js.map +1 -1
  6. package/dist/core/blast.d.ts +62 -0
  7. package/dist/core/blast.d.ts.map +1 -0
  8. package/dist/core/blast.js +448 -0
  9. package/dist/core/blast.js.map +1 -0
  10. package/dist/core/contract.d.ts +54 -0
  11. package/dist/core/contract.d.ts.map +1 -0
  12. package/dist/core/contract.js +300 -0
  13. package/dist/core/contract.js.map +1 -0
  14. package/dist/core/failure-retrospective.d.ts +12 -0
  15. package/dist/core/failure-retrospective.d.ts.map +1 -0
  16. package/dist/core/failure-retrospective.js +115 -0
  17. package/dist/core/failure-retrospective.js.map +1 -0
  18. package/dist/core/project-index/index.d.ts +17 -0
  19. package/dist/core/project-index/index.d.ts.map +1 -0
  20. package/dist/core/project-index/index.js +323 -0
  21. package/dist/core/project-index/index.js.map +1 -0
  22. package/dist/core/project-index/types.d.ts +34 -0
  23. package/dist/core/project-index/types.d.ts.map +1 -0
  24. package/dist/core/project-index/types.js +2 -0
  25. package/dist/core/project-index/types.js.map +1 -0
  26. package/dist/core/sdk.d.ts.map +1 -1
  27. package/dist/core/sdk.js +8 -0
  28. package/dist/core/sdk.js.map +1 -1
  29. package/dist/core/semantic/config.d.ts.map +1 -1
  30. package/dist/core/semantic/config.js +5 -0
  31. package/dist/core/semantic/config.js.map +1 -1
  32. package/dist/core/semantic/index.d.ts +1 -1
  33. package/dist/core/semantic/index.d.ts.map +1 -1
  34. package/dist/core/semantic/index.js +1 -1
  35. package/dist/core/semantic/index.js.map +1 -1
  36. package/dist/core/semantic/runtime.d.ts.map +1 -1
  37. package/dist/core/semantic/runtime.js +12 -1
  38. package/dist/core/semantic/runtime.js.map +1 -1
  39. package/dist/core/semantic/types.d.ts +6 -0
  40. package/dist/core/semantic/types.d.ts.map +1 -1
  41. package/dist/core/semantic/types.js +6 -0
  42. package/dist/core/semantic/types.js.map +1 -1
  43. package/dist/core/shadow-guard.d.ts +30 -0
  44. package/dist/core/shadow-guard.d.ts.map +1 -0
  45. package/dist/core/shadow-guard.js +81 -0
  46. package/dist/core/shadow-guard.js.map +1 -0
  47. package/dist/core/shared-memory.d.ts +46 -0
  48. package/dist/core/shared-memory.d.ts.map +1 -0
  49. package/dist/core/shared-memory.js +253 -0
  50. package/dist/core/shared-memory.js.map +1 -0
  51. package/dist/core/singular.d.ts +73 -0
  52. package/dist/core/singular.d.ts.map +1 -0
  53. package/dist/core/singular.js +413 -0
  54. package/dist/core/singular.js.map +1 -0
  55. package/dist/core/slash-commands.d.ts.map +1 -1
  56. package/dist/core/slash-commands.js +14 -2
  57. package/dist/core/slash-commands.js.map +1 -1
  58. package/dist/core/subagents.js +1 -1
  59. package/dist/core/subagents.js.map +1 -1
  60. package/dist/core/swarm/gates.d.ts +9 -0
  61. package/dist/core/swarm/gates.d.ts.map +1 -0
  62. package/dist/core/swarm/gates.js +65 -0
  63. package/dist/core/swarm/gates.js.map +1 -0
  64. package/dist/core/swarm/index.d.ts +9 -0
  65. package/dist/core/swarm/index.d.ts.map +1 -0
  66. package/dist/core/swarm/index.js +9 -0
  67. package/dist/core/swarm/index.js.map +1 -0
  68. package/dist/core/swarm/locks.d.ts +21 -0
  69. package/dist/core/swarm/locks.d.ts.map +1 -0
  70. package/dist/core/swarm/locks.js +93 -0
  71. package/dist/core/swarm/locks.js.map +1 -0
  72. package/dist/core/swarm/planner.d.ts +16 -0
  73. package/dist/core/swarm/planner.d.ts.map +1 -0
  74. package/dist/core/swarm/planner.js +137 -0
  75. package/dist/core/swarm/planner.js.map +1 -0
  76. package/dist/core/swarm/retry.d.ts +16 -0
  77. package/dist/core/swarm/retry.d.ts.map +1 -0
  78. package/dist/core/swarm/retry.js +32 -0
  79. package/dist/core/swarm/retry.js.map +1 -0
  80. package/dist/core/swarm/scheduler.d.ts +48 -0
  81. package/dist/core/swarm/scheduler.d.ts.map +1 -0
  82. package/dist/core/swarm/scheduler.js +554 -0
  83. package/dist/core/swarm/scheduler.js.map +1 -0
  84. package/dist/core/swarm/spawn.d.ts +16 -0
  85. package/dist/core/swarm/spawn.d.ts.map +1 -0
  86. package/dist/core/swarm/spawn.js +42 -0
  87. package/dist/core/swarm/spawn.js.map +1 -0
  88. package/dist/core/swarm/state-store.d.ts +35 -0
  89. package/dist/core/swarm/state-store.d.ts.map +1 -0
  90. package/dist/core/swarm/state-store.js +106 -0
  91. package/dist/core/swarm/state-store.js.map +1 -0
  92. package/dist/core/swarm/types.d.ts +116 -0
  93. package/dist/core/swarm/types.d.ts.map +1 -0
  94. package/dist/core/swarm/types.js +2 -0
  95. package/dist/core/swarm/types.js.map +1 -0
  96. package/dist/core/system-prompt.d.ts.map +1 -1
  97. package/dist/core/system-prompt.js +6 -3
  98. package/dist/core/system-prompt.js.map +1 -1
  99. package/dist/core/tools/semantic-search.d.ts.map +1 -1
  100. package/dist/core/tools/semantic-search.js +1 -0
  101. package/dist/core/tools/semantic-search.js.map +1 -1
  102. package/dist/core/tools/shared-memory.d.ts +23 -0
  103. package/dist/core/tools/shared-memory.d.ts.map +1 -0
  104. package/dist/core/tools/shared-memory.js +134 -0
  105. package/dist/core/tools/shared-memory.js.map +1 -0
  106. package/dist/core/tools/task.d.ts +8 -1
  107. package/dist/core/tools/task.d.ts.map +1 -1
  108. package/dist/core/tools/task.js +664 -123
  109. package/dist/core/tools/task.js.map +1 -1
  110. package/dist/main.d.ts.map +1 -1
  111. package/dist/main.js +8 -1
  112. package/dist/main.js.map +1 -1
  113. package/dist/modes/interactive/components/custom-editor.d.ts +8 -0
  114. package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
  115. package/dist/modes/interactive/components/custom-editor.js +70 -1
  116. package/dist/modes/interactive/components/custom-editor.js.map +1 -1
  117. package/dist/modes/interactive/components/login-dialog.d.ts +1 -0
  118. package/dist/modes/interactive/components/login-dialog.d.ts.map +1 -1
  119. package/dist/modes/interactive/components/login-dialog.js +27 -4
  120. package/dist/modes/interactive/components/login-dialog.js.map +1 -1
  121. package/dist/modes/interactive/components/subagent-message.d.ts.map +1 -1
  122. package/dist/modes/interactive/components/subagent-message.js +14 -0
  123. package/dist/modes/interactive/components/subagent-message.js.map +1 -1
  124. package/dist/modes/interactive/interactive-mode.d.ts +81 -0
  125. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  126. package/dist/modes/interactive/interactive-mode.js +3481 -870
  127. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  128. package/docs/cli-reference.md +29 -1
  129. package/docs/configuration.md +5 -0
  130. package/docs/interactive-mode.md +171 -2
  131. package/docs/orchestration-and-subagents.md +96 -169
  132. package/package.json +4 -3
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../../src/core/semantic/runtime.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash } from \"node:crypto\";\nimport { existsSync, readFileSync, statSync } from \"node:fs\";\nimport { relative, resolve, sep } from \"node:path\";\nimport { globSync } from \"glob\";\nimport type { AuthStorage } from \"../auth-storage.js\";\nimport {\n\tgetSemanticConfigPath,\n\tloadMergedSemanticConfig,\n} from \"./config.js\";\nimport { chunkTextForSemantic, type SemanticChunkDraft } from \"./chunking.js\";\nimport {\n\tgetSemanticIndexDir,\n\tgetSemanticProjectHash,\n\tloadSemanticIndex,\n\twriteSemanticIndex,\n} from \"./index-store.js\";\nimport { createSemanticEmbeddingProvider } from \"./providers.js\";\nimport type {\n\tSemanticIndexConfig,\n\tSemanticIndexMeta,\n\tSemanticIndexOperationResult,\n\tSemanticIndexedChunk,\n\tSemanticIndexedVector,\n\tSemanticQueryHit,\n\tSemanticQueryResult,\n\tSemanticSearchConfig,\n\tSemanticStatusResult,\n\tSemanticStaleReason,\n\tSemanticToolResult,\n} from \"./types.js\";\nimport {\n\tSemanticConfigMissingError,\n\tSemanticRebuildRequiredError,\n} from \"./types.js\";\n\ninterface SemanticRuntimeOptions {\n\tcwd: string;\n\tagentDir: string;\n\tauthStorage?: AuthStorage;\n}\n\ninterface ScannedSemanticFile {\n\tabsPath: string;\n\trelPath: string;\n\tsize: number;\n\tmtimeMs: number;\n\thash: string;\n\ttext: string;\n}\n\nfunction toPosixPath(filePath: string): string {\n\treturn filePath.split(sep).join(\"/\");\n}\n\nfunction sha256(input: string): string {\n\treturn createHash(\"sha256\").update(input).digest(\"hex\");\n}\n\nfunction fileHashFromContent(content: string): string {\n\treturn sha256(content);\n}\n\nfunction chunkId(path: string, draft: SemanticChunkDraft, index: number): string {\n\treturn sha256(`${path}:${draft.hash}:${draft.lineStart}:${draft.lineEnd}:${index}`).slice(0, 24);\n}\n\nfunction normalizeIndexPath(cwd: string, absolutePath: string): string {\n\tconst rel = relative(cwd, absolutePath);\n\treturn toPosixPath(rel);\n}\n\nfunction cosineSimilarity(a: number[], b: number[], normA: number, normB: number): number {\n\tif (normA <= 0 || normB <= 0 || a.length !== b.length) return 0;\n\tlet dot = 0;\n\tfor (let index = 0; index < a.length; index++) {\n\t\tdot += a[index]! * b[index]!;\n\t}\n\treturn dot / (normA * normB);\n}\n\nfunction vectorNorm(vector: number[]): number {\n\tlet sum = 0;\n\tfor (const value of vector) {\n\t\tsum += value * value;\n\t}\n\treturn Math.sqrt(sum);\n}\n\nfunction ageSecondsFromIso(iso: string): number | undefined {\n\tconst ms = Date.parse(iso);\n\tif (!Number.isFinite(ms)) return undefined;\n\tconst ageMs = Date.now() - ms;\n\tif (ageMs < 0) return 0;\n\treturn Math.floor(ageMs / 1000);\n}\n\nfunction clampTopK(value: number | undefined): number {\n\tif (!Number.isFinite(value)) return 8;\n\tconst normalized = Math.floor(value as number);\n\tif (normalized < 1) return 1;\n\tif (normalized > 20) return 20;\n\treturn normalized;\n}\n\nexport class SemanticSearchRuntime {\n\tprivate readonly cwd: string;\n\tprivate readonly agentDir: string;\n\tprivate readonly authStorage?: AuthStorage;\n\n\tconstructor(options: SemanticRuntimeOptions) {\n\t\tthis.cwd = resolve(options.cwd);\n\t\tthis.agentDir = options.agentDir;\n\t\tthis.authStorage = options.authStorage;\n\t}\n\n\tasync execute(action: \"status\"): Promise<SemanticStatusResult>;\n\tasync execute(action: \"index\"): Promise<SemanticIndexOperationResult>;\n\tasync execute(action: \"rebuild\"): Promise<SemanticIndexOperationResult>;\n\tasync execute(action: \"query\", query: string, topK?: number): Promise<SemanticQueryResult>;\n\tasync execute(action: \"status\" | \"index\" | \"rebuild\" | \"query\", query?: string, topK?: number): Promise<SemanticToolResult> {\n\t\tif (action === \"status\") {\n\t\t\treturn this.status();\n\t\t}\n\t\tif (action === \"index\") {\n\t\t\treturn this.index();\n\t\t}\n\t\tif (action === \"rebuild\") {\n\t\t\treturn this.rebuild();\n\t\t}\n\t\treturn this.query(query ?? \"\", topK);\n\t}\n\n\tasync status(): Promise<SemanticStatusResult> {\n\t\tconst userConfigPath = getSemanticConfigPath(\"user\", this.cwd, this.agentDir);\n\t\tconst projectConfigPath = getSemanticConfigPath(\"project\", this.cwd, this.agentDir);\n\t\tconst indexPath = getSemanticIndexDir(this.cwd, this.agentDir);\n\t\tconst merged = loadMergedSemanticConfig(this.cwd, this.agentDir);\n\t\tconst config = merged.config;\n\n\t\tif (!config) {\n\t\t\treturn {\n\t\t\t\taction: \"status\",\n\t\t\t\tconfigured: false,\n\t\t\t\tenabled: false,\n\t\t\t\tindexed: false,\n\t\t\t\tstale: true,\n\t\t\t\tstaleReason: \"missing_index\",\n\t\t\t\tfiles: 0,\n\t\t\t\tchunks: 0,\n\t\t\t\tindexPath,\n\t\t\t\tconfigPathUser: userConfigPath,\n\t\t\t\tconfigPathProject: projectConfigPath,\n\t\t\t};\n\t\t}\n\n\t\tconst loaded = loadSemanticIndex(indexPath);\n\t\tconst stale = this.detectStaleness(config, loaded.meta);\n\t\tconst files = loaded.meta ? Object.keys(loaded.meta.fileMap).length : 0;\n\t\tconst chunks = loaded.chunks.length;\n\n\t\treturn {\n\t\t\taction: \"status\",\n\t\t\tconfigured: true,\n\t\t\tenabled: config.enabled,\n\t\t\tindexed: loaded.exists && !!loaded.meta,\n\t\t\tstale: stale.stale,\n\t\t\tstaleReason: stale.reason,\n\t\t\tprovider: config.provider.type,\n\t\t\tmodel: config.provider.model,\n\t\t\tfiles,\n\t\t\tchunks,\n\t\t\tdimension: loaded.meta?.dimension,\n\t\t\tageSeconds: loaded.meta ? ageSecondsFromIso(loaded.meta.builtAt) : undefined,\n\t\t\tindexPath,\n\t\t\tconfigPathUser: userConfigPath,\n\t\t\tconfigPathProject: projectConfigPath,\n\t\t};\n\t}\n\n\tasync index(): Promise<SemanticIndexOperationResult> {\n\t\treturn this.buildIndex(false);\n\t}\n\n\tasync rebuild(): Promise<SemanticIndexOperationResult> {\n\t\treturn this.buildIndex(true);\n\t}\n\n\tasync query(rawQuery: string, topK?: number): Promise<SemanticQueryResult> {\n\t\tconst query = rawQuery.trim();\n\t\tif (!query) {\n\t\t\tthrow new Error(\"semantic query cannot be empty\");\n\t\t}\n\n\t\tconst config = this.loadConfiguredSemanticConfig();\n\t\tif (!config.enabled) {\n\t\t\tthrow new Error(\"semantic search is disabled in semantic.json\");\n\t\t}\n\n\t\tconst status = await this.status();\n\t\tlet autoRefreshed = false;\n\t\tif (!status.indexed || status.stale) {\n\t\t\tconst requiresRebuild =\n\t\t\t\t!status.indexed ||\n\t\t\t\tstatus.staleReason === \"provider_changed\" ||\n\t\t\t\tstatus.staleReason === \"chunking_changed\" ||\n\t\t\t\tstatus.staleReason === \"index_filters_changed\" ||\n\t\t\t\tstatus.staleReason === \"dimension_mismatch\";\n\t\t\tawait this.buildIndex(requiresRebuild);\n\t\t\tautoRefreshed = true;\n\t\t}\n\n\t\tconst indexPath = getSemanticIndexDir(this.cwd, this.agentDir);\n\t\tconst loaded = loadSemanticIndex(indexPath);\n\t\tconst meta = loaded.meta;\n\t\tif (!meta || loaded.vectors.length === 0 || loaded.chunks.length === 0) {\n\t\t\treturn {\n\t\t\t\taction: \"query\",\n\t\t\t\tquery,\n\t\t\t\ttopK: clampTopK(topK),\n\t\t\t\tautoRefreshed,\n\t\t\t\thits: [],\n\t\t\t};\n\t\t}\n\n\t\tconst provider = await createSemanticEmbeddingProvider(config.provider, {\n\t\t\tauthStorage: this.authStorage,\n\t\t});\n\t\tconst queryVector = (await provider.embed([query]))[0];\n\t\tif (!queryVector) {\n\t\t\tthrow new Error(\"provider returned no embedding for query\");\n\t\t}\n\n\t\tif (queryVector.length !== meta.dimension) {\n\t\t\tthrow new SemanticRebuildRequiredError(\n\t\t\t\t`Embedding dimension changed (${queryVector.length} != ${meta.dimension}). Run /semantic rebuild.`,\n\t\t\t);\n\t\t}\n\n\t\tconst chunkById = new Map<string, SemanticIndexedChunk>();\n\t\tfor (const chunk of loaded.chunks) {\n\t\t\tchunkById.set(chunk.id, chunk);\n\t\t}\n\t\tconst queryNorm = vectorNorm(queryVector);\n\t\tconst ranked: SemanticQueryHit[] = [];\n\t\tfor (const vector of loaded.vectors) {\n\t\t\tconst chunk = chunkById.get(vector.id);\n\t\t\tif (!chunk) continue;\n\t\t\tconst score = cosineSimilarity(queryVector, vector.vector, queryNorm, vector.norm);\n\t\t\tif (!Number.isFinite(score)) continue;\n\t\t\tranked.push({\n\t\t\t\tscore,\n\t\t\t\tpath: chunk.path,\n\t\t\t\tlineStart: chunk.lineStart,\n\t\t\t\tlineEnd: chunk.lineEnd,\n\t\t\t\tsnippet: chunk.preview,\n\t\t\t});\n\t\t}\n\n\t\tranked.sort((a, b) => b.score - a.score);\n\t\tconst effectiveTopK = clampTopK(topK);\n\t\treturn {\n\t\t\taction: \"query\",\n\t\t\tquery,\n\t\t\ttopK: effectiveTopK,\n\t\t\tautoRefreshed,\n\t\t\thits: ranked.slice(0, effectiveTopK),\n\t\t};\n\t}\n\n\tprivate loadConfiguredSemanticConfig(): SemanticSearchConfig {\n\t\tconst merged = loadMergedSemanticConfig(this.cwd, this.agentDir);\n\t\tif (!merged.config) {\n\t\t\tthrow new SemanticConfigMissingError(\n\t\t\t\tgetSemanticConfigPath(\"user\", this.cwd, this.agentDir),\n\t\t\t\tgetSemanticConfigPath(\"project\", this.cwd, this.agentDir),\n\t\t\t);\n\t\t}\n\t\tif (merged.errors.length > 0) {\n\t\t\tthrow new Error(`semantic config warnings: ${merged.errors.join(\" | \")}`);\n\t\t}\n\t\treturn merged.config;\n\t}\n\n\tprivate detectStaleness(\n\t\tconfig: SemanticSearchConfig,\n\t\tmeta: SemanticIndexMeta | undefined,\n\t): { stale: boolean; reason?: SemanticStaleReason } {\n\t\tif (!meta) {\n\t\t\treturn { stale: true, reason: \"missing_index\" };\n\t\t}\n\t\tif (meta.dimension <= 0) {\n\t\t\treturn { stale: true, reason: \"dimension_mismatch\" };\n\t\t}\n\t\tif (meta.providerFingerprint !== this.providerFingerprint(config)) {\n\t\t\treturn { stale: true, reason: \"provider_changed\" };\n\t\t}\n\t\tif (meta.chunkConfigFingerprint !== this.chunkConfigFingerprint(config.index)) {\n\t\t\treturn { stale: true, reason: \"chunking_changed\" };\n\t\t}\n\t\tif (meta.indexFilterFingerprint !== this.indexFilterFingerprint(config.index)) {\n\t\t\treturn { stale: true, reason: \"index_filters_changed\" };\n\t\t}\n\n\t\tconst statusFileMap = this.collectProjectFileStats(config.index);\n\t\tconst indexedPaths = Object.keys(meta.fileMap);\n\t\tif (indexedPaths.length !== statusFileMap.size) {\n\t\t\treturn { stale: true, reason: \"files_changed\" };\n\t\t}\n\t\tfor (const [path, current] of statusFileMap.entries()) {\n\t\t\tconst previous = meta.fileMap[path];\n\t\t\tif (!previous) {\n\t\t\t\treturn { stale: true, reason: \"files_changed\" };\n\t\t\t}\n\t\t\tif (previous.size !== current.size || previous.mtimeMs !== current.mtimeMs) {\n\t\t\t\treturn { stale: true, reason: \"files_changed\" };\n\t\t\t}\n\t\t}\n\n\t\treturn { stale: false };\n\t}\n\n\tprivate collectCandidatePaths(indexConfig: SemanticIndexConfig): string[] {\n\t\tconst results = new Set<string>();\n\t\tfor (const pattern of indexConfig.includeGlobs) {\n\t\t\tfor (const filePath of globSync(pattern, {\n\t\t\t\tcwd: this.cwd,\n\t\t\t\tabsolute: true,\n\t\t\t\tnodir: true,\n\t\t\t\tdot: true,\n\t\t\t\tignore: indexConfig.excludeGlobs,\n\t\t\t\tfollow: false,\n\t\t\t})) {\n\t\t\t\tresults.add(resolve(filePath));\n\t\t\t}\n\t\t}\n\n\t\treturn [...results].sort().slice(0, indexConfig.maxFiles);\n\t}\n\n\tprivate collectProjectFileStats(indexConfig: SemanticIndexConfig): Map<string, { size: number; mtimeMs: number }> {\n\t\tconst map = new Map<string, { size: number; mtimeMs: number }>();\n\t\tfor (const absPath of this.collectCandidatePaths(indexConfig)) {\n\t\t\tlet stat;\n\t\t\ttry {\n\t\t\t\tstat = statSync(absPath);\n\t\t\t} catch {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (!stat.isFile()) continue;\n\t\t\tif (stat.size > indexConfig.maxFileBytes) continue;\n\t\t\tconst relPath = normalizeIndexPath(this.cwd, absPath);\n\t\t\tmap.set(relPath, { size: stat.size, mtimeMs: stat.mtimeMs });\n\t\t}\n\t\treturn map;\n\t}\n\n\tprivate collectProjectFiles(indexConfig: SemanticIndexConfig): ScannedSemanticFile[] {\n\t\tconst files: ScannedSemanticFile[] = [];\n\t\tfor (const absPath of this.collectCandidatePaths(indexConfig)) {\n\t\t\tlet stat;\n\t\t\ttry {\n\t\t\t\tstat = statSync(absPath);\n\t\t\t} catch {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (!stat.isFile()) continue;\n\t\t\tif (stat.size > indexConfig.maxFileBytes) continue;\n\n\t\t\tlet buffer: Buffer;\n\t\t\ttry {\n\t\t\t\tbuffer = readFileSync(absPath);\n\t\t\t} catch {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (buffer.includes(0)) continue;\n\n\t\t\tconst text = buffer.toString(\"utf8\");\n\t\t\tconst trimmed = text.trim();\n\t\t\tif (!trimmed) continue;\n\n\t\t\tconst relPath = normalizeIndexPath(this.cwd, absPath);\n\t\t\tfiles.push({\n\t\t\t\tabsPath,\n\t\t\t\trelPath,\n\t\t\t\tsize: stat.size,\n\t\t\t\tmtimeMs: stat.mtimeMs,\n\t\t\t\thash: fileHashFromContent(text.replace(/\\r\\n/g, \"\\n\")),\n\t\t\t\ttext: text.replace(/\\r\\n/g, \"\\n\"),\n\t\t\t});\n\t\t}\n\t\treturn files;\n\t}\n\n\tprivate providerFingerprint(config: SemanticSearchConfig): string {\n\t\tconst stableHeaders = config.provider.headers\n\t\t\t? Object.entries(config.provider.headers).sort(([a], [b]) => a.localeCompare(b))\n\t\t\t: [];\n\t\treturn sha256(\n\t\t\tJSON.stringify({\n\t\t\t\ttype: config.provider.type,\n\t\t\t\tmodel: config.provider.model,\n\t\t\t\tbaseUrl: config.provider.baseUrl ?? \"\",\n\t\t\t\theaders: stableHeaders,\n\t\t\t\tapiKeyEnv: config.provider.apiKeyEnv ?? \"\",\n\t\t\t}),\n\t\t);\n\t}\n\n\tprivate chunkConfigFingerprint(indexConfig: SemanticIndexConfig): string {\n\t\treturn sha256(\n\t\t\tJSON.stringify({\n\t\t\t\tchunkMaxChars: indexConfig.chunkMaxChars,\n\t\t\t\tchunkOverlapChars: indexConfig.chunkOverlapChars,\n\t\t\t}),\n\t\t);\n\t}\n\n\tprivate indexFilterFingerprint(indexConfig: SemanticIndexConfig): string {\n\t\treturn sha256(\n\t\t\tJSON.stringify({\n\t\t\t\tincludeGlobs: [...indexConfig.includeGlobs].sort(),\n\t\t\t\texcludeGlobs: [...indexConfig.excludeGlobs].sort(),\n\t\t\t\tmaxFileBytes: indexConfig.maxFileBytes,\n\t\t\t\tmaxFiles: indexConfig.maxFiles,\n\t\t\t}),\n\t\t);\n\t}\n\n\tprivate async buildIndex(forceRebuild: boolean): Promise<SemanticIndexOperationResult> {\n\t\tconst startedAt = Date.now();\n\t\tconst config = this.loadConfiguredSemanticConfig();\n\t\tif (!config.enabled) {\n\t\t\tthrow new Error(\"semantic search is disabled in semantic.json\");\n\t\t}\n\n\t\tconst indexDir = getSemanticIndexDir(this.cwd, this.agentDir);\n\t\tconst existing = loadSemanticIndex(indexDir);\n\t\tconst existingMeta = existing.meta;\n\t\tconst providerFingerprint = this.providerFingerprint(config);\n\t\tconst chunkFingerprint = this.chunkConfigFingerprint(config.index);\n\t\tconst filterFingerprint = this.indexFilterFingerprint(config.index);\n\n\t\tif (\n\t\t\t!forceRebuild &&\n\t\t\texistingMeta &&\n\t\t\t(existingMeta.providerFingerprint !== providerFingerprint ||\n\t\t\t\texistingMeta.chunkConfigFingerprint !== chunkFingerprint ||\n\t\t\t\texistingMeta.indexFilterFingerprint !== filterFingerprint)\n\t\t) {\n\t\t\tthrow new SemanticRebuildRequiredError(\n\t\t\t\t\"Semantic index settings changed. Run /semantic rebuild (or iosm semantic rebuild).\",\n\t\t\t);\n\t\t}\n\n\t\tconst provider = await createSemanticEmbeddingProvider(config.provider, {\n\t\t\tauthStorage: this.authStorage,\n\t\t});\n\t\tconst files = this.collectProjectFiles(config.index);\n\t\tconst existingChunkById = new Map(existing.chunks.map((chunk) => [chunk.id, chunk]));\n\t\tconst existingVectorById = new Map(existing.vectors.map((vector) => [vector.id, vector]));\n\n\t\tconst nextChunks: SemanticIndexedChunk[] = [];\n\t\tconst nextVectors: SemanticIndexedVector[] = [];\n\t\tconst nextFileMap: SemanticIndexMeta[\"fileMap\"] = {};\n\n\t\tlet changedFiles = 0;\n\t\tlet newFiles = 0;\n\t\tlet reusedFiles = 0;\n\t\tlet removedFiles = 0;\n\t\t// Full rebuild must not inherit previous dimension. Otherwise provider/model\n\t\t// dimension changes can keep throwing mismatch even after rebuild.\n\t\tlet dimension = forceRebuild ? undefined : existingMeta?.dimension;\n\n\t\tconst currentPaths = new Set(files.map((file) => file.relPath));\n\t\tif (existingMeta) {\n\t\t\tfor (const path of Object.keys(existingMeta.fileMap)) {\n\t\t\t\tif (!currentPaths.has(path)) {\n\t\t\t\t\tremovedFiles += 1;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor (const file of files) {\n\t\t\tconst prev = !forceRebuild ? existingMeta?.fileMap[file.relPath] : undefined;\n\t\t\tconst canReuse =\n\t\t\t\t!!prev &&\n\t\t\t\tprev.hash === file.hash &&\n\t\t\t\tprev.chunks.length > 0 &&\n\t\t\t\tprev.chunks.every((id) => existingChunkById.has(id) && existingVectorById.has(id));\n\n\t\t\tif (canReuse && prev) {\n\t\t\t\treusedFiles += 1;\n\t\t\t\tfor (const chunkId of prev.chunks) {\n\t\t\t\t\tconst chunk = existingChunkById.get(chunkId);\n\t\t\t\t\tconst vector = existingVectorById.get(chunkId);\n\t\t\t\t\tif (!chunk || !vector) continue;\n\t\t\t\t\tnextChunks.push(chunk);\n\t\t\t\t\tnextVectors.push(vector);\n\t\t\t\t}\n\t\t\t\tnextFileMap[file.relPath] = {\n\t\t\t\t\tpath: file.relPath,\n\t\t\t\t\tsize: file.size,\n\t\t\t\t\tmtimeMs: file.mtimeMs,\n\t\t\t\t\thash: file.hash,\n\t\t\t\t\tchunks: [...prev.chunks],\n\t\t\t\t};\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (prev) changedFiles += 1;\n\t\t\telse newFiles += 1;\n\n\t\t\tconst drafts = chunkTextForSemantic(file.text, config.index);\n\t\t\tconst chunkRecords = drafts.map((draft, index) => {\n\t\t\t\tconst id = chunkId(file.relPath, draft, index);\n\t\t\t\treturn {\n\t\t\t\t\tid,\n\t\t\t\t\tpath: file.relPath,\n\t\t\t\t\tlineStart: draft.lineStart,\n\t\t\t\t\tlineEnd: draft.lineEnd,\n\t\t\t\t\tpreview: draft.preview,\n\t\t\t\t\thash: draft.hash,\n\t\t\t\t\ttext: draft.text,\n\t\t\t\t};\n\t\t\t});\n\t\t\tconst chunkIds = chunkRecords.map((chunk) => chunk.id);\n\t\t\tnextFileMap[file.relPath] = {\n\t\t\t\tpath: file.relPath,\n\t\t\t\tsize: file.size,\n\t\t\t\tmtimeMs: file.mtimeMs,\n\t\t\t\thash: file.hash,\n\t\t\t\tchunks: chunkIds,\n\t\t\t};\n\n\t\t\tif (chunkRecords.length === 0) continue;\n\t\t\tconst embeddings = await provider.embed(chunkRecords.map((chunk) => chunk.text));\n\t\t\tif (embeddings.length !== chunkRecords.length) {\n\t\t\t\tthrow new Error(`Embedding provider returned ${embeddings.length} vectors for ${chunkRecords.length} chunks.`);\n\t\t\t}\n\n\t\t\tfor (let index = 0; index < chunkRecords.length; index++) {\n\t\t\t\tconst chunk = chunkRecords[index]!;\n\t\t\t\tconst vector = embeddings[index]!;\n\t\t\t\tif (!Array.isArray(vector) || vector.length === 0) {\n\t\t\t\t\tthrow new Error(\"Embedding provider returned an empty vector.\");\n\t\t\t\t}\n\t\t\t\tif (dimension === undefined || dimension <= 0) {\n\t\t\t\t\tdimension = vector.length;\n\t\t\t\t} else if (dimension !== vector.length) {\n\t\t\t\t\tthrow new SemanticRebuildRequiredError(\n\t\t\t\t\t\t`Embedding dimension mismatch (${vector.length} != ${dimension}). Run /semantic rebuild.`,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tnextChunks.push({\n\t\t\t\t\tid: chunk.id,\n\t\t\t\t\tpath: chunk.path,\n\t\t\t\t\tlineStart: chunk.lineStart,\n\t\t\t\t\tlineEnd: chunk.lineEnd,\n\t\t\t\t\tpreview: chunk.preview,\n\t\t\t\t\thash: chunk.hash,\n\t\t\t\t});\n\t\t\t\tnextVectors.push({\n\t\t\t\t\tid: chunk.id,\n\t\t\t\t\tvector,\n\t\t\t\t\tnorm: vectorNorm(vector),\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tconst builtAt = new Date().toISOString();\n\t\tconst meta: SemanticIndexMeta = {\n\t\t\tversion: 1,\n\t\t\tcwd: this.cwd,\n\t\t\tprojectHash: getSemanticProjectHash(this.cwd),\n\t\t\tproviderFingerprint,\n\t\t\tproviderType: config.provider.type,\n\t\t\tmodel: config.provider.model,\n\t\t\tdimension: dimension ?? 0,\n\t\t\tbuiltAt,\n\t\t\tchunkConfigFingerprint: chunkFingerprint,\n\t\t\tindexFilterFingerprint: filterFingerprint,\n\t\t\tfileMap: nextFileMap,\n\t\t};\n\t\twriteSemanticIndex(indexDir, meta, nextChunks, nextVectors);\n\n\t\treturn {\n\t\t\taction: forceRebuild ? \"rebuild\" : \"index\",\n\t\t\tindexPath: indexDir,\n\t\t\tdurationMs: Date.now() - startedAt,\n\t\t\tprocessedFiles: files.length,\n\t\t\tnewFiles,\n\t\t\tchangedFiles,\n\t\t\tremovedFiles,\n\t\t\treusedFiles,\n\t\t\tchunks: nextChunks.length,\n\t\t\tdimension: meta.dimension,\n\t\t\tbuiltAt,\n\t\t};\n\t}\n}\n"]}
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../../../src/core/semantic/runtime.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAc,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAEhC,OAAO,EACN,qBAAqB,EACrB,wBAAwB,GACxB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,oBAAoB,EAA2B,MAAM,eAAe,CAAC;AAC9E,OAAO,EACN,mBAAmB,EACnB,sBAAsB,EACtB,iBAAiB,EACjB,kBAAkB,GAClB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,+BAA+B,EAAE,MAAM,gBAAgB,CAAC;AAcjE,OAAO,EACN,0BAA0B,EAC1B,0BAA0B,EAC1B,4BAA4B,GAC5B,MAAM,YAAY,CAAC;AAiBpB,SAAS,WAAW,CAAC,QAAgB;IACpC,OAAO,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACtC,CAAC;AAED,SAAS,MAAM,CAAC,KAAa;IAC5B,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACzD,CAAC;AAED,SAAS,mBAAmB,CAAC,OAAe;IAC3C,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC;AACxB,CAAC;AAED,SAAS,OAAO,CAAC,IAAY,EAAE,KAAyB,EAAE,KAAa;IACtE,OAAO,MAAM,CAAC,GAAG,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAClG,CAAC;AAED,SAAS,kBAAkB,CAAC,GAAW,EAAE,YAAoB;IAC5D,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;IACxC,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC;AAED,SAAS,gBAAgB,CAAC,CAAW,EAAE,CAAW,EAAE,KAAa,EAAE,KAAa;IAC/E,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;QAAE,OAAO,CAAC,CAAC;IAChE,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;QAC/C,GAAG,IAAI,CAAC,CAAC,KAAK,CAAE,GAAG,CAAC,CAAC,KAAK,CAAE,CAAC;IAC9B,CAAC;IACD,OAAO,GAAG,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC;AAC9B,CAAC;AAED,SAAS,UAAU,CAAC,MAAgB;IACnC,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC5B,GAAG,IAAI,KAAK,GAAG,KAAK,CAAC;IACtB,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACvB,CAAC;AAED,SAAS,iBAAiB,CAAC,GAAW;IACrC,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QAAE,OAAO,SAAS,CAAC;IAC3C,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;IAC9B,IAAI,KAAK,GAAG,CAAC;QAAE,OAAO,CAAC,CAAC;IACxB,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;AACjC,CAAC;AAED,SAAS,SAAS,CAAC,KAAyB;IAC3C,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IACtC,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,KAAe,CAAC,CAAC;IAC/C,IAAI,UAAU,GAAG,CAAC;QAAE,OAAO,CAAC,CAAC;IAC7B,IAAI,UAAU,GAAG,EAAE;QAAE,OAAO,EAAE,CAAC;IAC/B,OAAO,UAAU,CAAC;AACnB,CAAC;AAED,MAAM,OAAO,qBAAqB;IAKjC,YAAY,OAA+B;QAC1C,IAAI,CAAC,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAChC,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;QACjC,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;IACxC,CAAC;IAMD,KAAK,CAAC,OAAO,CAAC,MAAgD,EAAE,KAAc,EAAE,IAAa;QAC5F,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;YACzB,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC;QACtB,CAAC;QACD,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC;QACrB,CAAC;QACD,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YAC1B,OAAO,IAAI,CAAC,OAAO,EAAE,CAAC;QACvB,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC;IACtC,CAAC;IAED,KAAK,CAAC,MAAM;QACX,MAAM,cAAc,GAAG,qBAAqB,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC9E,MAAM,iBAAiB,GAAG,qBAAqB,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QACpF,MAAM,SAAS,GAAG,mBAAmB,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC/D,MAAM,MAAM,GAAG,wBAAwB,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QACjE,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAE7B,IAAI,CAAC,MAAM,EAAE,CAAC;YACb,OAAO;gBACN,MAAM,EAAE,QAAQ;gBAChB,UAAU,EAAE,KAAK;gBACjB,OAAO,EAAE,KAAK;gBACd,SAAS,EAAE,KAAK;gBAChB,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,IAAI;gBACX,WAAW,EAAE,eAAe;gBAC5B,KAAK,EAAE,CAAC;gBACR,MAAM,EAAE,CAAC;gBACT,SAAS;gBACT,cAAc,EAAE,cAAc;gBAC9B,iBAAiB,EAAE,iBAAiB;aACpC,CAAC;QACH,CAAC;QAED,MAAM,MAAM,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC;QAC5C,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;QACxD,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACxE,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;QAEpC,OAAO;YACN,MAAM,EAAE,QAAQ;YAChB,UAAU,EAAE,IAAI;YAChB,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,SAAS,EAAE,MAAM,CAAC,SAAS;YAC3B,OAAO,EAAE,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI;YACvC,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,WAAW,EAAE,KAAK,CAAC,MAAM;YACzB,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI;YAC9B,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK;YAC5B,KAAK;YACL,MAAM;YACN,SAAS,EAAE,MAAM,CAAC,IAAI,EAAE,SAAS;YACjC,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS;YAC5E,SAAS;YACT,cAAc,EAAE,cAAc;YAC9B,iBAAiB,EAAE,iBAAiB;SACpC,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAK;QACV,OAAO,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,OAAO;QACZ,OAAO,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,QAAgB,EAAE,IAAa;QAC1C,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;QAC9B,IAAI,CAAC,KAAK,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACnD,CAAC;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,4BAA4B,EAAE,CAAC;QACnD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;QACjE,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC;QACnC,IAAI,aAAa,GAAG,KAAK,CAAC;QAC1B,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACrC,MAAM,eAAe,GACpB,CAAC,MAAM,CAAC,OAAO;gBACf,MAAM,CAAC,WAAW,KAAK,kBAAkB;gBACzC,MAAM,CAAC,WAAW,KAAK,kBAAkB;gBACzC,MAAM,CAAC,WAAW,KAAK,uBAAuB;gBAC9C,MAAM,CAAC,WAAW,KAAK,oBAAoB,CAAC;YAC7C,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;gBACvB,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;oBACrB,MAAM,IAAI,0BAA0B,CACnC,8IAA8I,CAC9I,CAAC;gBACH,CAAC;gBACD,IAAI,eAAe,EAAE,CAAC;oBACrB,MAAM,IAAI,4BAA4B,CACrC,0BAA0B,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,EAAE,wDAAwD,CACtI,CAAC;gBACH,CAAC;gBACD,MAAM,IAAI,0BAA0B,CACnC,0BAA0B,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,EAAE,6FAA6F,CAC3K,CAAC;YACH,CAAC;YACD,MAAM,IAAI,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC;YACvC,aAAa,GAAG,IAAI,CAAC;QACtB,CAAC;QAED,MAAM,SAAS,GAAG,mBAAmB,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC/D,MAAM,MAAM,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC;QAC5C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QACzB,IAAI,CAAC,IAAI,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxE,OAAO;gBACN,MAAM,EAAE,OAAO;gBACf,KAAK;gBACL,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC;gBACrB,aAAa;gBACb,IAAI,EAAE,EAAE;aACR,CAAC;QACH,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,+BAA+B,CAAC,MAAM,CAAC,QAAQ,EAAE;YACvE,WAAW,EAAE,IAAI,CAAC,WAAW;SAC7B,CAAC,CAAC;QACH,MAAM,WAAW,GAAG,CAAC,MAAM,QAAQ,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACvD,IAAI,CAAC,WAAW,EAAE,CAAC;YAClB,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;QAC7D,CAAC;QAED,IAAI,WAAW,CAAC,MAAM,KAAK,IAAI,CAAC,SAAS,EAAE,CAAC;YAC3C,MAAM,IAAI,4BAA4B,CACrC,gCAAgC,WAAW,CAAC,MAAM,OAAO,IAAI,CAAC,SAAS,2BAA2B,CAClG,CAAC;QACH,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,GAAG,EAAgC,CAAC;QAC1D,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YACnC,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QAChC,CAAC;QACD,MAAM,SAAS,GAAG,UAAU,CAAC,WAAW,CAAC,CAAC;QAC1C,MAAM,MAAM,GAAuB,EAAE,CAAC;QACtC,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACrC,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;YACvC,IAAI,CAAC,KAAK;gBAAE,SAAS;YACrB,MAAM,KAAK,GAAG,gBAAgB,CAAC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC;YACnF,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAAE,SAAS;YACtC,MAAM,CAAC,IAAI,CAAC;gBACX,KAAK;gBACL,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,SAAS,EAAE,KAAK,CAAC,SAAS;gBAC1B,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,OAAO,EAAE,KAAK,CAAC,OAAO;aACtB,CAAC,CAAC;QACJ,CAAC;QAED,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;QACzC,MAAM,aAAa,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;QACtC,OAAO;YACN,MAAM,EAAE,OAAO;YACf,KAAK;YACL,IAAI,EAAE,aAAa;YACnB,aAAa;YACb,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,aAAa,CAAC;SACpC,CAAC;IACH,CAAC;IAEO,4BAA4B;QACnC,MAAM,MAAM,GAAG,wBAAwB,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QACjE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACpB,MAAM,IAAI,0BAA0B,CACnC,qBAAqB,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,EACtD,qBAAqB,CAAC,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,CACzD,CAAC;QACH,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC9B,MAAM,IAAI,KAAK,CAAC,6BAA6B,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC3E,CAAC;QACD,OAAO,MAAM,CAAC,MAAM,CAAC;IACtB,CAAC;IAEO,eAAe,CACtB,MAA4B,EAC5B,IAAmC;QAEnC,IAAI,CAAC,IAAI,EAAE,CAAC;YACX,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC;QACjD,CAAC;QACD,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,EAAE,CAAC;YACzB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,oBAAoB,EAAE,CAAC;QACtD,CAAC;QACD,IAAI,IAAI,CAAC,mBAAmB,KAAK,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAAE,CAAC;YACnE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,kBAAkB,EAAE,CAAC;QACpD,CAAC;QACD,IAAI,IAAI,CAAC,sBAAsB,KAAK,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YAC/E,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,kBAAkB,EAAE,CAAC;QACpD,CAAC;QACD,IAAI,IAAI,CAAC,sBAAsB,KAAK,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YAC/E,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,uBAAuB,EAAE,CAAC;QACzD,CAAC;QAED,MAAM,aAAa,GAAG,IAAI,CAAC,uBAAuB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACjE,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC/C,IAAI,YAAY,CAAC,MAAM,KAAK,aAAa,CAAC,IAAI,EAAE,CAAC;YAChD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC;QACjD,CAAC;QACD,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,aAAa,CAAC,OAAO,EAAE,EAAE,CAAC;YACvD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACpC,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACf,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC;YACjD,CAAC;YACD,IAAI,QAAQ,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,IAAI,QAAQ,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC;gBAC5E,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,eAAe,EAAE,CAAC;YACjD,CAAC;QACF,CAAC;QAED,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;IACzB,CAAC;IAEO,qBAAqB,CAAC,WAAgC;QAC7D,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;QAClC,KAAK,MAAM,OAAO,IAAI,WAAW,CAAC,YAAY,EAAE,CAAC;YAChD,KAAK,MAAM,QAAQ,IAAI,QAAQ,CAAC,OAAO,EAAE;gBACxC,GAAG,EAAE,IAAI,CAAC,GAAG;gBACb,QAAQ,EAAE,IAAI;gBACd,KAAK,EAAE,IAAI;gBACX,GAAG,EAAE,IAAI;gBACT,MAAM,EAAE,WAAW,CAAC,YAAY;gBAChC,MAAM,EAAE,KAAK;aACb,CAAC,EAAE,CAAC;gBACJ,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;YAChC,CAAC;QACF,CAAC;QAED,OAAO,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,QAAQ,CAAC,CAAC;IAC3D,CAAC;IAEO,uBAAuB,CAAC,WAAgC;QAC/D,MAAM,GAAG,GAAG,IAAI,GAAG,EAA6C,CAAC;QACjE,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,qBAAqB,CAAC,WAAW,CAAC,EAAE,CAAC;YAC/D,IAAI,IAAI,CAAC;YACT,IAAI,CAAC;gBACJ,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;YAC1B,CAAC;YAAC,MAAM,CAAC;gBACR,SAAS;YACV,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;gBAAE,SAAS;YAC7B,IAAI,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC,YAAY;gBAAE,SAAS;YACnD,MAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YACtD,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;QAC9D,CAAC;QACD,OAAO,GAAG,CAAC;IACZ,CAAC;IAEO,mBAAmB,CAAC,WAAgC;QAC3D,MAAM,KAAK,GAA0B,EAAE,CAAC;QACxC,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,qBAAqB,CAAC,WAAW,CAAC,EAAE,CAAC;YAC/D,IAAI,IAAI,CAAC;YACT,IAAI,CAAC;gBACJ,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;YAC1B,CAAC;YAAC,MAAM,CAAC;gBACR,SAAS;YACV,CAAC;YACD,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;gBAAE,SAAS;YAC7B,IAAI,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC,YAAY;gBAAE,SAAS;YAEnD,IAAI,MAAc,CAAC;YACnB,IAAI,CAAC;gBACJ,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;YAChC,CAAC;YAAC,MAAM,CAAC;gBACR,SAAS;YACV,CAAC;YACD,IAAI,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAAE,SAAS;YAEjC,MAAM,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;YACrC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAC5B,IAAI,CAAC,OAAO;gBAAE,SAAS;YAEvB,MAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;YACtD,KAAK,CAAC,IAAI,CAAC;gBACV,OAAO;gBACP,OAAO;gBACP,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,IAAI,EAAE,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;gBACtD,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC;aACjC,CAAC,CAAC;QACJ,CAAC;QACD,OAAO,KAAK,CAAC;IACd,CAAC;IAEO,mBAAmB,CAAC,MAA4B;QACvD,MAAM,aAAa,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO;YAC5C,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;YAChF,CAAC,CAAC,EAAE,CAAC;QACN,OAAO,MAAM,CACZ,IAAI,CAAC,SAAS,CAAC;YACd,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI;YAC1B,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK;YAC5B,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,OAAO,IAAI,EAAE;YACtC,OAAO,EAAE,aAAa;YACtB,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,SAAS,IAAI,EAAE;SAC1C,CAAC,CACF,CAAC;IACH,CAAC;IAEO,sBAAsB,CAAC,WAAgC;QAC9D,OAAO,MAAM,CACZ,IAAI,CAAC,SAAS,CAAC;YACd,aAAa,EAAE,WAAW,CAAC,aAAa;YACxC,iBAAiB,EAAE,WAAW,CAAC,iBAAiB;SAChD,CAAC,CACF,CAAC;IACH,CAAC;IAEO,sBAAsB,CAAC,WAAgC;QAC9D,OAAO,MAAM,CACZ,IAAI,CAAC,SAAS,CAAC;YACd,YAAY,EAAE,CAAC,GAAG,WAAW,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE;YAClD,YAAY,EAAE,CAAC,GAAG,WAAW,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE;YAClD,YAAY,EAAE,WAAW,CAAC,YAAY;YACtC,QAAQ,EAAE,WAAW,CAAC,QAAQ;SAC9B,CAAC,CACF,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,UAAU,CAAC,YAAqB;QAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,4BAA4B,EAAE,CAAC;QACnD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACrB,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;QACjE,CAAC;QAED,MAAM,QAAQ,GAAG,mBAAmB,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC9D,MAAM,QAAQ,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QAC7C,MAAM,YAAY,GAAG,QAAQ,CAAC,IAAI,CAAC;QACnC,MAAM,mBAAmB,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;QAC7D,MAAM,gBAAgB,GAAG,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACnE,MAAM,iBAAiB,GAAG,IAAI,CAAC,sBAAsB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAEpE,IACC,CAAC,YAAY;YACb,YAAY;YACZ,CAAC,YAAY,CAAC,mBAAmB,KAAK,mBAAmB;gBACxD,YAAY,CAAC,sBAAsB,KAAK,gBAAgB;gBACxD,YAAY,CAAC,sBAAsB,KAAK,iBAAiB,CAAC,EAC1D,CAAC;YACF,MAAM,IAAI,4BAA4B,CACrC,oFAAoF,CACpF,CAAC;QACH,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,+BAA+B,CAAC,MAAM,CAAC,QAAQ,EAAE;YACvE,WAAW,EAAE,IAAI,CAAC,WAAW;SAC7B,CAAC,CAAC;QACH,MAAM,KAAK,GAAG,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACrD,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;QACrF,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;QAE1F,MAAM,UAAU,GAA2B,EAAE,CAAC;QAC9C,MAAM,WAAW,GAA4B,EAAE,CAAC;QAChD,MAAM,WAAW,GAAiC,EAAE,CAAC;QAErD,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,IAAI,WAAW,GAAG,CAAC,CAAC;QACpB,IAAI,YAAY,GAAG,CAAC,CAAC;QACrB,6EAA6E;QAC7E,mEAAmE;QACnE,IAAI,SAAS,GAAG,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,EAAE,SAAS,CAAC;QAEnE,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC;QAChE,IAAI,YAAY,EAAE,CAAC;YAClB,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC;gBACtD,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC7B,YAAY,IAAI,CAAC,CAAC;gBACnB,CAAC;YACF,CAAC;QACF,CAAC;QAED,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YAC1B,MAAM,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,EAAE,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAC7E,MAAM,QAAQ,GACb,CAAC,CAAC,IAAI;gBACN,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI;gBACvB,IAAI,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC;gBACtB,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,kBAAkB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;YAEpF,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;gBACtB,WAAW,IAAI,CAAC,CAAC;gBACjB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;oBACnC,MAAM,KAAK,GAAG,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;oBAC7C,MAAM,MAAM,GAAG,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;oBAC/C,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM;wBAAE,SAAS;oBAChC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;oBACvB,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;gBAC1B,CAAC;gBACD,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG;oBAC3B,IAAI,EAAE,IAAI,CAAC,OAAO;oBAClB,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,OAAO,EAAE,IAAI,CAAC,OAAO;oBACrB,IAAI,EAAE,IAAI,CAAC,IAAI;oBACf,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;iBACxB,CAAC;gBACF,SAAS;YACV,CAAC;YAED,IAAI,IAAI;gBAAE,YAAY,IAAI,CAAC,CAAC;;gBACvB,QAAQ,IAAI,CAAC,CAAC;YAEnB,MAAM,MAAM,GAAG,oBAAoB,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC;YAC7D,MAAM,YAAY,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;gBAChD,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;gBAC/C,OAAO;oBACN,EAAE;oBACF,IAAI,EAAE,IAAI,CAAC,OAAO;oBAClB,SAAS,EAAE,KAAK,CAAC,SAAS;oBAC1B,OAAO,EAAE,KAAK,CAAC,OAAO;oBACtB,OAAO,EAAE,KAAK,CAAC,OAAO;oBACtB,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,IAAI,EAAE,KAAK,CAAC,IAAI;iBAChB,CAAC;YACH,CAAC,CAAC,CAAC;YACH,MAAM,QAAQ,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YACvD,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG;gBAC3B,IAAI,EAAE,IAAI,CAAC,OAAO;gBAClB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,OAAO,EAAE,IAAI,CAAC,OAAO;gBACrB,IAAI,EAAE,IAAI,CAAC,IAAI;gBACf,MAAM,EAAE,QAAQ;aAChB,CAAC;YAEF,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;gBAAE,SAAS;YACxC,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;YACjF,IAAI,UAAU,CAAC,MAAM,KAAK,YAAY,CAAC,MAAM,EAAE,CAAC;gBAC/C,MAAM,IAAI,KAAK,CAAC,+BAA+B,UAAU,CAAC,MAAM,gBAAgB,YAAY,CAAC,MAAM,UAAU,CAAC,CAAC;YAChH,CAAC;YAED,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;gBAC1D,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,CAAE,CAAC;gBACnC,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAE,CAAC;gBAClC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACnD,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;gBACjE,CAAC;gBACD,IAAI,SAAS,KAAK,SAAS,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;oBAC/C,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC;gBAC3B,CAAC;qBAAM,IAAI,SAAS,KAAK,MAAM,CAAC,MAAM,EAAE,CAAC;oBACxC,MAAM,IAAI,4BAA4B,CACrC,iCAAiC,MAAM,CAAC,MAAM,OAAO,SAAS,2BAA2B,CACzF,CAAC;gBACH,CAAC;gBAED,UAAU,CAAC,IAAI,CAAC;oBACf,EAAE,EAAE,KAAK,CAAC,EAAE;oBACZ,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,SAAS,EAAE,KAAK,CAAC,SAAS;oBAC1B,OAAO,EAAE,KAAK,CAAC,OAAO;oBACtB,OAAO,EAAE,KAAK,CAAC,OAAO;oBACtB,IAAI,EAAE,KAAK,CAAC,IAAI;iBAChB,CAAC,CAAC;gBACH,WAAW,CAAC,IAAI,CAAC;oBAChB,EAAE,EAAE,KAAK,CAAC,EAAE;oBACZ,MAAM;oBACN,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC;iBACxB,CAAC,CAAC;YACJ,CAAC;QACF,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACzC,MAAM,IAAI,GAAsB;YAC/B,OAAO,EAAE,CAAC;YACV,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,WAAW,EAAE,sBAAsB,CAAC,IAAI,CAAC,GAAG,CAAC;YAC7C,mBAAmB;YACnB,YAAY,EAAE,MAAM,CAAC,QAAQ,CAAC,IAAI;YAClC,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK;YAC5B,SAAS,EAAE,SAAS,IAAI,CAAC;YACzB,OAAO;YACP,sBAAsB,EAAE,gBAAgB;YACxC,sBAAsB,EAAE,iBAAiB;YACzC,OAAO,EAAE,WAAW;SACpB,CAAC;QACF,kBAAkB,CAAC,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;QAE5D,OAAO;YACN,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO;YAC1C,SAAS,EAAE,QAAQ;YACnB,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS;YAClC,cAAc,EAAE,KAAK,CAAC,MAAM;YAC5B,QAAQ;YACR,YAAY;YACZ,YAAY;YACZ,WAAW;YACX,MAAM,EAAE,UAAU,CAAC,MAAM;YACzB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,OAAO;SACP,CAAC;IACH,CAAC;CACD","sourcesContent":["import { createHash } from \"node:crypto\";\nimport { existsSync, readFileSync, statSync } from \"node:fs\";\nimport { relative, resolve, sep } from \"node:path\";\nimport { globSync } from \"glob\";\nimport type { AuthStorage } from \"../auth-storage.js\";\nimport {\n\tgetSemanticConfigPath,\n\tloadMergedSemanticConfig,\n} from \"./config.js\";\nimport { chunkTextForSemantic, type SemanticChunkDraft } from \"./chunking.js\";\nimport {\n\tgetSemanticIndexDir,\n\tgetSemanticProjectHash,\n\tloadSemanticIndex,\n\twriteSemanticIndex,\n} from \"./index-store.js\";\nimport { createSemanticEmbeddingProvider } from \"./providers.js\";\nimport type {\n\tSemanticIndexConfig,\n\tSemanticIndexMeta,\n\tSemanticIndexOperationResult,\n\tSemanticIndexedChunk,\n\tSemanticIndexedVector,\n\tSemanticQueryHit,\n\tSemanticQueryResult,\n\tSemanticSearchConfig,\n\tSemanticStatusResult,\n\tSemanticStaleReason,\n\tSemanticToolResult,\n} from \"./types.js\";\nimport {\n\tSemanticConfigMissingError,\n\tSemanticIndexRequiredError,\n\tSemanticRebuildRequiredError,\n} from \"./types.js\";\n\ninterface SemanticRuntimeOptions {\n\tcwd: string;\n\tagentDir: string;\n\tauthStorage?: AuthStorage;\n}\n\ninterface ScannedSemanticFile {\n\tabsPath: string;\n\trelPath: string;\n\tsize: number;\n\tmtimeMs: number;\n\thash: string;\n\ttext: string;\n}\n\nfunction toPosixPath(filePath: string): string {\n\treturn filePath.split(sep).join(\"/\");\n}\n\nfunction sha256(input: string): string {\n\treturn createHash(\"sha256\").update(input).digest(\"hex\");\n}\n\nfunction fileHashFromContent(content: string): string {\n\treturn sha256(content);\n}\n\nfunction chunkId(path: string, draft: SemanticChunkDraft, index: number): string {\n\treturn sha256(`${path}:${draft.hash}:${draft.lineStart}:${draft.lineEnd}:${index}`).slice(0, 24);\n}\n\nfunction normalizeIndexPath(cwd: string, absolutePath: string): string {\n\tconst rel = relative(cwd, absolutePath);\n\treturn toPosixPath(rel);\n}\n\nfunction cosineSimilarity(a: number[], b: number[], normA: number, normB: number): number {\n\tif (normA <= 0 || normB <= 0 || a.length !== b.length) return 0;\n\tlet dot = 0;\n\tfor (let index = 0; index < a.length; index++) {\n\t\tdot += a[index]! * b[index]!;\n\t}\n\treturn dot / (normA * normB);\n}\n\nfunction vectorNorm(vector: number[]): number {\n\tlet sum = 0;\n\tfor (const value of vector) {\n\t\tsum += value * value;\n\t}\n\treturn Math.sqrt(sum);\n}\n\nfunction ageSecondsFromIso(iso: string): number | undefined {\n\tconst ms = Date.parse(iso);\n\tif (!Number.isFinite(ms)) return undefined;\n\tconst ageMs = Date.now() - ms;\n\tif (ageMs < 0) return 0;\n\treturn Math.floor(ageMs / 1000);\n}\n\nfunction clampTopK(value: number | undefined): number {\n\tif (!Number.isFinite(value)) return 8;\n\tconst normalized = Math.floor(value as number);\n\tif (normalized < 1) return 1;\n\tif (normalized > 20) return 20;\n\treturn normalized;\n}\n\nexport class SemanticSearchRuntime {\n\tprivate readonly cwd: string;\n\tprivate readonly agentDir: string;\n\tprivate readonly authStorage?: AuthStorage;\n\n\tconstructor(options: SemanticRuntimeOptions) {\n\t\tthis.cwd = resolve(options.cwd);\n\t\tthis.agentDir = options.agentDir;\n\t\tthis.authStorage = options.authStorage;\n\t}\n\n\tasync execute(action: \"status\"): Promise<SemanticStatusResult>;\n\tasync execute(action: \"index\"): Promise<SemanticIndexOperationResult>;\n\tasync execute(action: \"rebuild\"): Promise<SemanticIndexOperationResult>;\n\tasync execute(action: \"query\", query: string, topK?: number): Promise<SemanticQueryResult>;\n\tasync execute(action: \"status\" | \"index\" | \"rebuild\" | \"query\", query?: string, topK?: number): Promise<SemanticToolResult> {\n\t\tif (action === \"status\") {\n\t\t\treturn this.status();\n\t\t}\n\t\tif (action === \"index\") {\n\t\t\treturn this.index();\n\t\t}\n\t\tif (action === \"rebuild\") {\n\t\t\treturn this.rebuild();\n\t\t}\n\t\treturn this.query(query ?? \"\", topK);\n\t}\n\n\tasync status(): Promise<SemanticStatusResult> {\n\t\tconst userConfigPath = getSemanticConfigPath(\"user\", this.cwd, this.agentDir);\n\t\tconst projectConfigPath = getSemanticConfigPath(\"project\", this.cwd, this.agentDir);\n\t\tconst indexPath = getSemanticIndexDir(this.cwd, this.agentDir);\n\t\tconst merged = loadMergedSemanticConfig(this.cwd, this.agentDir);\n\t\tconst config = merged.config;\n\n\t\tif (!config) {\n\t\t\treturn {\n\t\t\t\taction: \"status\",\n\t\t\t\tconfigured: false,\n\t\t\t\tenabled: false,\n\t\t\t\tautoIndex: false,\n\t\t\t\tindexed: false,\n\t\t\t\tstale: true,\n\t\t\t\tstaleReason: \"missing_index\",\n\t\t\t\tfiles: 0,\n\t\t\t\tchunks: 0,\n\t\t\t\tindexPath,\n\t\t\t\tconfigPathUser: userConfigPath,\n\t\t\t\tconfigPathProject: projectConfigPath,\n\t\t\t};\n\t\t}\n\n\t\tconst loaded = loadSemanticIndex(indexPath);\n\t\tconst stale = this.detectStaleness(config, loaded.meta);\n\t\tconst files = loaded.meta ? Object.keys(loaded.meta.fileMap).length : 0;\n\t\tconst chunks = loaded.chunks.length;\n\n\t\treturn {\n\t\t\taction: \"status\",\n\t\t\tconfigured: true,\n\t\t\tenabled: config.enabled,\n\t\t\tautoIndex: config.autoIndex,\n\t\t\tindexed: loaded.exists && !!loaded.meta,\n\t\t\tstale: stale.stale,\n\t\t\tstaleReason: stale.reason,\n\t\t\tprovider: config.provider.type,\n\t\t\tmodel: config.provider.model,\n\t\t\tfiles,\n\t\t\tchunks,\n\t\t\tdimension: loaded.meta?.dimension,\n\t\t\tageSeconds: loaded.meta ? ageSecondsFromIso(loaded.meta.builtAt) : undefined,\n\t\t\tindexPath,\n\t\t\tconfigPathUser: userConfigPath,\n\t\t\tconfigPathProject: projectConfigPath,\n\t\t};\n\t}\n\n\tasync index(): Promise<SemanticIndexOperationResult> {\n\t\treturn this.buildIndex(false);\n\t}\n\n\tasync rebuild(): Promise<SemanticIndexOperationResult> {\n\t\treturn this.buildIndex(true);\n\t}\n\n\tasync query(rawQuery: string, topK?: number): Promise<SemanticQueryResult> {\n\t\tconst query = rawQuery.trim();\n\t\tif (!query) {\n\t\t\tthrow new Error(\"semantic query cannot be empty\");\n\t\t}\n\n\t\tconst config = this.loadConfiguredSemanticConfig();\n\t\tif (!config.enabled) {\n\t\t\tthrow new Error(\"semantic search is disabled in semantic.json\");\n\t\t}\n\n\t\tconst status = await this.status();\n\t\tlet autoRefreshed = false;\n\t\tif (!status.indexed || status.stale) {\n\t\t\tconst requiresRebuild =\n\t\t\t\t!status.indexed ||\n\t\t\t\tstatus.staleReason === \"provider_changed\" ||\n\t\t\t\tstatus.staleReason === \"chunking_changed\" ||\n\t\t\t\tstatus.staleReason === \"index_filters_changed\" ||\n\t\t\t\tstatus.staleReason === \"dimension_mismatch\";\n\t\t\tif (!config.autoIndex) {\n\t\t\t\tif (!status.indexed) {\n\t\t\t\t\tthrow new SemanticIndexRequiredError(\n\t\t\t\t\t\t\"Semantic index is missing and auto-indexing is disabled. Run /semantic index (or iosm semantic index), or enable auto-indexing in /semantic.\",\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tif (requiresRebuild) {\n\t\t\t\t\tthrow new SemanticRebuildRequiredError(\n\t\t\t\t\t\t`Semantic index is stale${status.staleReason ? ` (${status.staleReason})` : \"\"} and auto-indexing is disabled. Run /semantic rebuild.`,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tthrow new SemanticIndexRequiredError(\n\t\t\t\t\t`Semantic index is stale${status.staleReason ? ` (${status.staleReason})` : \"\"} and auto-indexing is disabled. Run /semantic index (or enable auto-indexing in /semantic).`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tawait this.buildIndex(requiresRebuild);\n\t\t\tautoRefreshed = true;\n\t\t}\n\n\t\tconst indexPath = getSemanticIndexDir(this.cwd, this.agentDir);\n\t\tconst loaded = loadSemanticIndex(indexPath);\n\t\tconst meta = loaded.meta;\n\t\tif (!meta || loaded.vectors.length === 0 || loaded.chunks.length === 0) {\n\t\t\treturn {\n\t\t\t\taction: \"query\",\n\t\t\t\tquery,\n\t\t\t\ttopK: clampTopK(topK),\n\t\t\t\tautoRefreshed,\n\t\t\t\thits: [],\n\t\t\t};\n\t\t}\n\n\t\tconst provider = await createSemanticEmbeddingProvider(config.provider, {\n\t\t\tauthStorage: this.authStorage,\n\t\t});\n\t\tconst queryVector = (await provider.embed([query]))[0];\n\t\tif (!queryVector) {\n\t\t\tthrow new Error(\"provider returned no embedding for query\");\n\t\t}\n\n\t\tif (queryVector.length !== meta.dimension) {\n\t\t\tthrow new SemanticRebuildRequiredError(\n\t\t\t\t`Embedding dimension changed (${queryVector.length} != ${meta.dimension}). Run /semantic rebuild.`,\n\t\t\t);\n\t\t}\n\n\t\tconst chunkById = new Map<string, SemanticIndexedChunk>();\n\t\tfor (const chunk of loaded.chunks) {\n\t\t\tchunkById.set(chunk.id, chunk);\n\t\t}\n\t\tconst queryNorm = vectorNorm(queryVector);\n\t\tconst ranked: SemanticQueryHit[] = [];\n\t\tfor (const vector of loaded.vectors) {\n\t\t\tconst chunk = chunkById.get(vector.id);\n\t\t\tif (!chunk) continue;\n\t\t\tconst score = cosineSimilarity(queryVector, vector.vector, queryNorm, vector.norm);\n\t\t\tif (!Number.isFinite(score)) continue;\n\t\t\tranked.push({\n\t\t\t\tscore,\n\t\t\t\tpath: chunk.path,\n\t\t\t\tlineStart: chunk.lineStart,\n\t\t\t\tlineEnd: chunk.lineEnd,\n\t\t\t\tsnippet: chunk.preview,\n\t\t\t});\n\t\t}\n\n\t\tranked.sort((a, b) => b.score - a.score);\n\t\tconst effectiveTopK = clampTopK(topK);\n\t\treturn {\n\t\t\taction: \"query\",\n\t\t\tquery,\n\t\t\ttopK: effectiveTopK,\n\t\t\tautoRefreshed,\n\t\t\thits: ranked.slice(0, effectiveTopK),\n\t\t};\n\t}\n\n\tprivate loadConfiguredSemanticConfig(): SemanticSearchConfig {\n\t\tconst merged = loadMergedSemanticConfig(this.cwd, this.agentDir);\n\t\tif (!merged.config) {\n\t\t\tthrow new SemanticConfigMissingError(\n\t\t\t\tgetSemanticConfigPath(\"user\", this.cwd, this.agentDir),\n\t\t\t\tgetSemanticConfigPath(\"project\", this.cwd, this.agentDir),\n\t\t\t);\n\t\t}\n\t\tif (merged.errors.length > 0) {\n\t\t\tthrow new Error(`semantic config warnings: ${merged.errors.join(\" | \")}`);\n\t\t}\n\t\treturn merged.config;\n\t}\n\n\tprivate detectStaleness(\n\t\tconfig: SemanticSearchConfig,\n\t\tmeta: SemanticIndexMeta | undefined,\n\t): { stale: boolean; reason?: SemanticStaleReason } {\n\t\tif (!meta) {\n\t\t\treturn { stale: true, reason: \"missing_index\" };\n\t\t}\n\t\tif (meta.dimension <= 0) {\n\t\t\treturn { stale: true, reason: \"dimension_mismatch\" };\n\t\t}\n\t\tif (meta.providerFingerprint !== this.providerFingerprint(config)) {\n\t\t\treturn { stale: true, reason: \"provider_changed\" };\n\t\t}\n\t\tif (meta.chunkConfigFingerprint !== this.chunkConfigFingerprint(config.index)) {\n\t\t\treturn { stale: true, reason: \"chunking_changed\" };\n\t\t}\n\t\tif (meta.indexFilterFingerprint !== this.indexFilterFingerprint(config.index)) {\n\t\t\treturn { stale: true, reason: \"index_filters_changed\" };\n\t\t}\n\n\t\tconst statusFileMap = this.collectProjectFileStats(config.index);\n\t\tconst indexedPaths = Object.keys(meta.fileMap);\n\t\tif (indexedPaths.length !== statusFileMap.size) {\n\t\t\treturn { stale: true, reason: \"files_changed\" };\n\t\t}\n\t\tfor (const [path, current] of statusFileMap.entries()) {\n\t\t\tconst previous = meta.fileMap[path];\n\t\t\tif (!previous) {\n\t\t\t\treturn { stale: true, reason: \"files_changed\" };\n\t\t\t}\n\t\t\tif (previous.size !== current.size || previous.mtimeMs !== current.mtimeMs) {\n\t\t\t\treturn { stale: true, reason: \"files_changed\" };\n\t\t\t}\n\t\t}\n\n\t\treturn { stale: false };\n\t}\n\n\tprivate collectCandidatePaths(indexConfig: SemanticIndexConfig): string[] {\n\t\tconst results = new Set<string>();\n\t\tfor (const pattern of indexConfig.includeGlobs) {\n\t\t\tfor (const filePath of globSync(pattern, {\n\t\t\t\tcwd: this.cwd,\n\t\t\t\tabsolute: true,\n\t\t\t\tnodir: true,\n\t\t\t\tdot: true,\n\t\t\t\tignore: indexConfig.excludeGlobs,\n\t\t\t\tfollow: false,\n\t\t\t})) {\n\t\t\t\tresults.add(resolve(filePath));\n\t\t\t}\n\t\t}\n\n\t\treturn [...results].sort().slice(0, indexConfig.maxFiles);\n\t}\n\n\tprivate collectProjectFileStats(indexConfig: SemanticIndexConfig): Map<string, { size: number; mtimeMs: number }> {\n\t\tconst map = new Map<string, { size: number; mtimeMs: number }>();\n\t\tfor (const absPath of this.collectCandidatePaths(indexConfig)) {\n\t\t\tlet stat;\n\t\t\ttry {\n\t\t\t\tstat = statSync(absPath);\n\t\t\t} catch {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (!stat.isFile()) continue;\n\t\t\tif (stat.size > indexConfig.maxFileBytes) continue;\n\t\t\tconst relPath = normalizeIndexPath(this.cwd, absPath);\n\t\t\tmap.set(relPath, { size: stat.size, mtimeMs: stat.mtimeMs });\n\t\t}\n\t\treturn map;\n\t}\n\n\tprivate collectProjectFiles(indexConfig: SemanticIndexConfig): ScannedSemanticFile[] {\n\t\tconst files: ScannedSemanticFile[] = [];\n\t\tfor (const absPath of this.collectCandidatePaths(indexConfig)) {\n\t\t\tlet stat;\n\t\t\ttry {\n\t\t\t\tstat = statSync(absPath);\n\t\t\t} catch {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (!stat.isFile()) continue;\n\t\t\tif (stat.size > indexConfig.maxFileBytes) continue;\n\n\t\t\tlet buffer: Buffer;\n\t\t\ttry {\n\t\t\t\tbuffer = readFileSync(absPath);\n\t\t\t} catch {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (buffer.includes(0)) continue;\n\n\t\t\tconst text = buffer.toString(\"utf8\");\n\t\t\tconst trimmed = text.trim();\n\t\t\tif (!trimmed) continue;\n\n\t\t\tconst relPath = normalizeIndexPath(this.cwd, absPath);\n\t\t\tfiles.push({\n\t\t\t\tabsPath,\n\t\t\t\trelPath,\n\t\t\t\tsize: stat.size,\n\t\t\t\tmtimeMs: stat.mtimeMs,\n\t\t\t\thash: fileHashFromContent(text.replace(/\\r\\n/g, \"\\n\")),\n\t\t\t\ttext: text.replace(/\\r\\n/g, \"\\n\"),\n\t\t\t});\n\t\t}\n\t\treturn files;\n\t}\n\n\tprivate providerFingerprint(config: SemanticSearchConfig): string {\n\t\tconst stableHeaders = config.provider.headers\n\t\t\t? Object.entries(config.provider.headers).sort(([a], [b]) => a.localeCompare(b))\n\t\t\t: [];\n\t\treturn sha256(\n\t\t\tJSON.stringify({\n\t\t\t\ttype: config.provider.type,\n\t\t\t\tmodel: config.provider.model,\n\t\t\t\tbaseUrl: config.provider.baseUrl ?? \"\",\n\t\t\t\theaders: stableHeaders,\n\t\t\t\tapiKeyEnv: config.provider.apiKeyEnv ?? \"\",\n\t\t\t}),\n\t\t);\n\t}\n\n\tprivate chunkConfigFingerprint(indexConfig: SemanticIndexConfig): string {\n\t\treturn sha256(\n\t\t\tJSON.stringify({\n\t\t\t\tchunkMaxChars: indexConfig.chunkMaxChars,\n\t\t\t\tchunkOverlapChars: indexConfig.chunkOverlapChars,\n\t\t\t}),\n\t\t);\n\t}\n\n\tprivate indexFilterFingerprint(indexConfig: SemanticIndexConfig): string {\n\t\treturn sha256(\n\t\t\tJSON.stringify({\n\t\t\t\tincludeGlobs: [...indexConfig.includeGlobs].sort(),\n\t\t\t\texcludeGlobs: [...indexConfig.excludeGlobs].sort(),\n\t\t\t\tmaxFileBytes: indexConfig.maxFileBytes,\n\t\t\t\tmaxFiles: indexConfig.maxFiles,\n\t\t\t}),\n\t\t);\n\t}\n\n\tprivate async buildIndex(forceRebuild: boolean): Promise<SemanticIndexOperationResult> {\n\t\tconst startedAt = Date.now();\n\t\tconst config = this.loadConfiguredSemanticConfig();\n\t\tif (!config.enabled) {\n\t\t\tthrow new Error(\"semantic search is disabled in semantic.json\");\n\t\t}\n\n\t\tconst indexDir = getSemanticIndexDir(this.cwd, this.agentDir);\n\t\tconst existing = loadSemanticIndex(indexDir);\n\t\tconst existingMeta = existing.meta;\n\t\tconst providerFingerprint = this.providerFingerprint(config);\n\t\tconst chunkFingerprint = this.chunkConfigFingerprint(config.index);\n\t\tconst filterFingerprint = this.indexFilterFingerprint(config.index);\n\n\t\tif (\n\t\t\t!forceRebuild &&\n\t\t\texistingMeta &&\n\t\t\t(existingMeta.providerFingerprint !== providerFingerprint ||\n\t\t\t\texistingMeta.chunkConfigFingerprint !== chunkFingerprint ||\n\t\t\t\texistingMeta.indexFilterFingerprint !== filterFingerprint)\n\t\t) {\n\t\t\tthrow new SemanticRebuildRequiredError(\n\t\t\t\t\"Semantic index settings changed. Run /semantic rebuild (or iosm semantic rebuild).\",\n\t\t\t);\n\t\t}\n\n\t\tconst provider = await createSemanticEmbeddingProvider(config.provider, {\n\t\t\tauthStorage: this.authStorage,\n\t\t});\n\t\tconst files = this.collectProjectFiles(config.index);\n\t\tconst existingChunkById = new Map(existing.chunks.map((chunk) => [chunk.id, chunk]));\n\t\tconst existingVectorById = new Map(existing.vectors.map((vector) => [vector.id, vector]));\n\n\t\tconst nextChunks: SemanticIndexedChunk[] = [];\n\t\tconst nextVectors: SemanticIndexedVector[] = [];\n\t\tconst nextFileMap: SemanticIndexMeta[\"fileMap\"] = {};\n\n\t\tlet changedFiles = 0;\n\t\tlet newFiles = 0;\n\t\tlet reusedFiles = 0;\n\t\tlet removedFiles = 0;\n\t\t// Full rebuild must not inherit previous dimension. Otherwise provider/model\n\t\t// dimension changes can keep throwing mismatch even after rebuild.\n\t\tlet dimension = forceRebuild ? undefined : existingMeta?.dimension;\n\n\t\tconst currentPaths = new Set(files.map((file) => file.relPath));\n\t\tif (existingMeta) {\n\t\t\tfor (const path of Object.keys(existingMeta.fileMap)) {\n\t\t\t\tif (!currentPaths.has(path)) {\n\t\t\t\t\tremovedFiles += 1;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor (const file of files) {\n\t\t\tconst prev = !forceRebuild ? existingMeta?.fileMap[file.relPath] : undefined;\n\t\t\tconst canReuse =\n\t\t\t\t!!prev &&\n\t\t\t\tprev.hash === file.hash &&\n\t\t\t\tprev.chunks.length > 0 &&\n\t\t\t\tprev.chunks.every((id) => existingChunkById.has(id) && existingVectorById.has(id));\n\n\t\t\tif (canReuse && prev) {\n\t\t\t\treusedFiles += 1;\n\t\t\t\tfor (const chunkId of prev.chunks) {\n\t\t\t\t\tconst chunk = existingChunkById.get(chunkId);\n\t\t\t\t\tconst vector = existingVectorById.get(chunkId);\n\t\t\t\t\tif (!chunk || !vector) continue;\n\t\t\t\t\tnextChunks.push(chunk);\n\t\t\t\t\tnextVectors.push(vector);\n\t\t\t\t}\n\t\t\t\tnextFileMap[file.relPath] = {\n\t\t\t\t\tpath: file.relPath,\n\t\t\t\t\tsize: file.size,\n\t\t\t\t\tmtimeMs: file.mtimeMs,\n\t\t\t\t\thash: file.hash,\n\t\t\t\t\tchunks: [...prev.chunks],\n\t\t\t\t};\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (prev) changedFiles += 1;\n\t\t\telse newFiles += 1;\n\n\t\t\tconst drafts = chunkTextForSemantic(file.text, config.index);\n\t\t\tconst chunkRecords = drafts.map((draft, index) => {\n\t\t\t\tconst id = chunkId(file.relPath, draft, index);\n\t\t\t\treturn {\n\t\t\t\t\tid,\n\t\t\t\t\tpath: file.relPath,\n\t\t\t\t\tlineStart: draft.lineStart,\n\t\t\t\t\tlineEnd: draft.lineEnd,\n\t\t\t\t\tpreview: draft.preview,\n\t\t\t\t\thash: draft.hash,\n\t\t\t\t\ttext: draft.text,\n\t\t\t\t};\n\t\t\t});\n\t\t\tconst chunkIds = chunkRecords.map((chunk) => chunk.id);\n\t\t\tnextFileMap[file.relPath] = {\n\t\t\t\tpath: file.relPath,\n\t\t\t\tsize: file.size,\n\t\t\t\tmtimeMs: file.mtimeMs,\n\t\t\t\thash: file.hash,\n\t\t\t\tchunks: chunkIds,\n\t\t\t};\n\n\t\t\tif (chunkRecords.length === 0) continue;\n\t\t\tconst embeddings = await provider.embed(chunkRecords.map((chunk) => chunk.text));\n\t\t\tif (embeddings.length !== chunkRecords.length) {\n\t\t\t\tthrow new Error(`Embedding provider returned ${embeddings.length} vectors for ${chunkRecords.length} chunks.`);\n\t\t\t}\n\n\t\t\tfor (let index = 0; index < chunkRecords.length; index++) {\n\t\t\t\tconst chunk = chunkRecords[index]!;\n\t\t\t\tconst vector = embeddings[index]!;\n\t\t\t\tif (!Array.isArray(vector) || vector.length === 0) {\n\t\t\t\t\tthrow new Error(\"Embedding provider returned an empty vector.\");\n\t\t\t\t}\n\t\t\t\tif (dimension === undefined || dimension <= 0) {\n\t\t\t\t\tdimension = vector.length;\n\t\t\t\t} else if (dimension !== vector.length) {\n\t\t\t\t\tthrow new SemanticRebuildRequiredError(\n\t\t\t\t\t\t`Embedding dimension mismatch (${vector.length} != ${dimension}). Run /semantic rebuild.`,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tnextChunks.push({\n\t\t\t\t\tid: chunk.id,\n\t\t\t\t\tpath: chunk.path,\n\t\t\t\t\tlineStart: chunk.lineStart,\n\t\t\t\t\tlineEnd: chunk.lineEnd,\n\t\t\t\t\tpreview: chunk.preview,\n\t\t\t\t\thash: chunk.hash,\n\t\t\t\t});\n\t\t\t\tnextVectors.push({\n\t\t\t\t\tid: chunk.id,\n\t\t\t\t\tvector,\n\t\t\t\t\tnorm: vectorNorm(vector),\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tconst builtAt = new Date().toISOString();\n\t\tconst meta: SemanticIndexMeta = {\n\t\t\tversion: 1,\n\t\t\tcwd: this.cwd,\n\t\t\tprojectHash: getSemanticProjectHash(this.cwd),\n\t\t\tproviderFingerprint,\n\t\t\tproviderType: config.provider.type,\n\t\t\tmodel: config.provider.model,\n\t\t\tdimension: dimension ?? 0,\n\t\t\tbuiltAt,\n\t\t\tchunkConfigFingerprint: chunkFingerprint,\n\t\t\tindexFilterFingerprint: filterFingerprint,\n\t\t\tfileMap: nextFileMap,\n\t\t};\n\t\twriteSemanticIndex(indexDir, meta, nextChunks, nextVectors);\n\n\t\treturn {\n\t\t\taction: forceRebuild ? \"rebuild\" : \"index\",\n\t\t\tindexPath: indexDir,\n\t\t\tdurationMs: Date.now() - startedAt,\n\t\t\tprocessedFiles: files.length,\n\t\t\tnewFiles,\n\t\t\tchangedFiles,\n\t\t\tremovedFiles,\n\t\t\treusedFiles,\n\t\t\tchunks: nextChunks.length,\n\t\t\tdimension: meta.dimension,\n\t\t\tbuiltAt,\n\t\t};\n\t}\n}\n"]}
@@ -21,12 +21,14 @@ export interface SemanticIndexConfig {
21
21
  }
22
22
  export interface SemanticSearchConfig {
23
23
  enabled: boolean;
24
+ autoIndex: boolean;
24
25
  provider: SemanticProviderConfig;
25
26
  index: SemanticIndexConfig;
26
27
  }
27
28
  export interface SemanticConfigFile {
28
29
  semanticSearch?: Partial<{
29
30
  enabled: boolean;
31
+ autoIndex: boolean;
30
32
  provider: Partial<{
31
33
  type: SemanticProviderType;
32
34
  model: string;
@@ -110,6 +112,7 @@ export interface SemanticStatusResult {
110
112
  action: "status";
111
113
  configured: boolean;
112
114
  enabled: boolean;
115
+ autoIndex: boolean;
113
116
  indexed: boolean;
114
117
  stale: boolean;
115
118
  staleReason?: SemanticStaleReason;
@@ -148,4 +151,7 @@ export declare class SemanticConfigMissingError extends Error {
148
151
  export declare class SemanticRebuildRequiredError extends Error {
149
152
  constructor(message: string);
150
153
  }
154
+ export declare class SemanticIndexRequiredError extends Error {
155
+ constructor(message: string);
156
+ }
151
157
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/semantic/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/core/semantic/types.ts"],"names":[],"mappings":"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"}
@@ -14,4 +14,10 @@ export class SemanticRebuildRequiredError extends Error {
14
14
  this.name = "SemanticRebuildRequiredError";
15
15
  }
16
16
  }
17
+ export class SemanticIndexRequiredError extends Error {
18
+ constructor(message) {
19
+ super(message);
20
+ this.name = "SemanticIndexRequiredError";
21
+ }
22
+ }
17
23
  //# sourceMappingURL=types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/core/semantic/types.ts"],"names":[],"mappings":"AAsKA,MAAM,OAAO,mBAAoB,SAAQ,KAAK;CAAG;AAEjD,MAAM,OAAO,0BAA2B,SAAQ,KAAK;IAIpD,YAAY,cAAsB,EAAE,iBAAyB;QAC5D,KAAK,CACJ,8EAA8E,cAAc,cAAc,iBAAiB,aAAa,CACxI,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,4BAA4B,CAAC;QACzC,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;QACrC,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;IAC5C,CAAC;CACD;AAED,MAAM,OAAO,4BAA6B,SAAQ,KAAK;IACtD,YAAY,OAAe;QAC1B,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,8BAA8B,CAAC;IAC5C,CAAC;CACD","sourcesContent":["export type SemanticScope = \"user\" | \"project\";\nexport type SemanticProviderType = \"openrouter\" | \"ollama\" | \"custom_openai\";\nexport type SemanticAction = \"status\" | \"index\" | \"rebuild\" | \"query\";\nexport type SemanticStaleReason =\n\t| \"missing_index\"\n\t| \"provider_changed\"\n\t| \"chunking_changed\"\n\t| \"index_filters_changed\"\n\t| \"files_changed\"\n\t| \"dimension_mismatch\";\n\nexport interface SemanticProviderConfig {\n\ttype: SemanticProviderType;\n\tmodel: string;\n\tbaseUrl?: string;\n\tapiKeyEnv?: string;\n\theaders?: Record<string, string>;\n\tbatchSize: number;\n\ttimeoutMs: number;\n}\n\nexport interface SemanticIndexConfig {\n\tincludeGlobs: string[];\n\texcludeGlobs: string[];\n\tchunkMaxChars: number;\n\tchunkOverlapChars: number;\n\tmaxFileBytes: number;\n\tmaxFiles: number;\n}\n\nexport interface SemanticSearchConfig {\n\tenabled: boolean;\n\tprovider: SemanticProviderConfig;\n\tindex: SemanticIndexConfig;\n}\n\nexport interface SemanticConfigFile {\n\tsemanticSearch?: Partial<{\n\t\tenabled: boolean;\n\t\tprovider: Partial<{\n\t\t\ttype: SemanticProviderType;\n\t\t\tmodel: string;\n\t\t\tbaseUrl: string;\n\t\t\tapiKeyEnv: string;\n\t\t\theaders: Record<string, string>;\n\t\t\tbatchSize: number;\n\t\t\ttimeoutMs: number;\n\t\t}>;\n\t\tindex: Partial<{\n\t\t\tincludeGlobs: string[];\n\t\t\texcludeGlobs: string[];\n\t\t\tchunkMaxChars: number;\n\t\t\tchunkOverlapChars: number;\n\t\t\tmaxFileBytes: number;\n\t\t\tmaxFiles: number;\n\t\t}>;\n\t}>;\n}\n\nexport interface SemanticScopedLoadResult {\n\tscope: SemanticScope;\n\tpath: string;\n\tfile: SemanticConfigFile;\n\terror?: Error;\n}\n\nexport interface SemanticMergedConfig {\n\tconfig?: SemanticSearchConfig;\n\terrors: string[];\n\tscoped: SemanticScopedLoadResult[];\n}\n\nexport interface SemanticFileFingerprint {\n\tpath: string;\n\tsize: number;\n\tmtimeMs: number;\n\thash: string;\n\tchunks: string[];\n}\n\nexport interface SemanticIndexMeta {\n\tversion: 1;\n\tcwd: string;\n\tprojectHash: string;\n\tproviderFingerprint: string;\n\tproviderType: SemanticProviderType;\n\tmodel: string;\n\tdimension: number;\n\tbuiltAt: string;\n\tchunkConfigFingerprint: string;\n\tindexFilterFingerprint: string;\n\tfileMap: Record<string, SemanticFileFingerprint>;\n}\n\nexport interface SemanticIndexedChunk {\n\tid: string;\n\tpath: string;\n\tlineStart: number;\n\tlineEnd: number;\n\tpreview: string;\n\thash: string;\n}\n\nexport interface SemanticIndexedVector {\n\tid: string;\n\tvector: number[];\n\tnorm: number;\n}\n\nexport interface SemanticChunkForEmbedding extends SemanticIndexedChunk {\n\ttext: string;\n}\n\nexport interface SemanticIndexOperationResult {\n\taction: \"index\" | \"rebuild\";\n\tindexPath: string;\n\tdurationMs: number;\n\tprocessedFiles: number;\n\tnewFiles: number;\n\tchangedFiles: number;\n\tremovedFiles: number;\n\treusedFiles: number;\n\tchunks: number;\n\tdimension: number;\n\tbuiltAt: string;\n}\n\nexport interface SemanticStatusResult {\n\taction: \"status\";\n\tconfigured: boolean;\n\tenabled: boolean;\n\tindexed: boolean;\n\tstale: boolean;\n\tstaleReason?: SemanticStaleReason;\n\tprovider?: SemanticProviderType;\n\tmodel?: string;\n\tfiles: number;\n\tchunks: number;\n\tdimension?: number;\n\tageSeconds?: number;\n\tindexPath: string;\n\tconfigPathUser: string;\n\tconfigPathProject: string;\n}\n\nexport interface SemanticQueryHit {\n\tscore: number;\n\tpath: string;\n\tlineStart: number;\n\tlineEnd: number;\n\tsnippet: string;\n}\n\nexport interface SemanticQueryResult {\n\taction: \"query\";\n\tquery: string;\n\ttopK: number;\n\tautoRefreshed: boolean;\n\thits: SemanticQueryHit[];\n}\n\nexport type SemanticToolResult =\n\t| SemanticStatusResult\n\t| SemanticIndexOperationResult\n\t| SemanticQueryResult;\n\nexport class SemanticConfigError extends Error {}\n\nexport class SemanticConfigMissingError extends Error {\n\treadonly userConfigPath: string;\n\treadonly projectConfigPath: string;\n\n\tconstructor(userConfigPath: string, projectConfigPath: string) {\n\t\tsuper(\n\t\t\t`Semantic search config not found. Create one with /semantic setup or write ${userConfigPath} (user) or ${projectConfigPath} (project).`,\n\t\t);\n\t\tthis.name = \"SemanticConfigMissingError\";\n\t\tthis.userConfigPath = userConfigPath;\n\t\tthis.projectConfigPath = projectConfigPath;\n\t}\n}\n\nexport class SemanticRebuildRequiredError extends Error {\n\tconstructor(message: string) {\n\t\tsuper(message);\n\t\tthis.name = \"SemanticRebuildRequiredError\";\n\t}\n}\n"]}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/core/semantic/types.ts"],"names":[],"mappings":"AAyKA,MAAM,OAAO,mBAAoB,SAAQ,KAAK;CAAG;AAEjD,MAAM,OAAO,0BAA2B,SAAQ,KAAK;IAIpD,YAAY,cAAsB,EAAE,iBAAyB;QAC5D,KAAK,CACJ,8EAA8E,cAAc,cAAc,iBAAiB,aAAa,CACxI,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,4BAA4B,CAAC;QACzC,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;QACrC,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;IAC5C,CAAC;CACD;AAED,MAAM,OAAO,4BAA6B,SAAQ,KAAK;IACtD,YAAY,OAAe;QAC1B,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,8BAA8B,CAAC;IAC5C,CAAC;CACD;AAED,MAAM,OAAO,0BAA2B,SAAQ,KAAK;IACpD,YAAY,OAAe;QAC1B,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,4BAA4B,CAAC;IAC1C,CAAC;CACD","sourcesContent":["export type SemanticScope = \"user\" | \"project\";\nexport type SemanticProviderType = \"openrouter\" | \"ollama\" | \"custom_openai\";\nexport type SemanticAction = \"status\" | \"index\" | \"rebuild\" | \"query\";\nexport type SemanticStaleReason =\n\t| \"missing_index\"\n\t| \"provider_changed\"\n\t| \"chunking_changed\"\n\t| \"index_filters_changed\"\n\t| \"files_changed\"\n\t| \"dimension_mismatch\";\n\nexport interface SemanticProviderConfig {\n\ttype: SemanticProviderType;\n\tmodel: string;\n\tbaseUrl?: string;\n\tapiKeyEnv?: string;\n\theaders?: Record<string, string>;\n\tbatchSize: number;\n\ttimeoutMs: number;\n}\n\nexport interface SemanticIndexConfig {\n\tincludeGlobs: string[];\n\texcludeGlobs: string[];\n\tchunkMaxChars: number;\n\tchunkOverlapChars: number;\n\tmaxFileBytes: number;\n\tmaxFiles: number;\n}\n\nexport interface SemanticSearchConfig {\n\tenabled: boolean;\n\tautoIndex: boolean;\n\tprovider: SemanticProviderConfig;\n\tindex: SemanticIndexConfig;\n}\n\nexport interface SemanticConfigFile {\n\tsemanticSearch?: Partial<{\n\t\tenabled: boolean;\n\t\tautoIndex: boolean;\n\t\tprovider: Partial<{\n\t\t\ttype: SemanticProviderType;\n\t\t\tmodel: string;\n\t\t\tbaseUrl: string;\n\t\t\tapiKeyEnv: string;\n\t\t\theaders: Record<string, string>;\n\t\t\tbatchSize: number;\n\t\t\ttimeoutMs: number;\n\t\t}>;\n\t\tindex: Partial<{\n\t\t\tincludeGlobs: string[];\n\t\t\texcludeGlobs: string[];\n\t\t\tchunkMaxChars: number;\n\t\t\tchunkOverlapChars: number;\n\t\t\tmaxFileBytes: number;\n\t\t\tmaxFiles: number;\n\t\t}>;\n\t}>;\n}\n\nexport interface SemanticScopedLoadResult {\n\tscope: SemanticScope;\n\tpath: string;\n\tfile: SemanticConfigFile;\n\terror?: Error;\n}\n\nexport interface SemanticMergedConfig {\n\tconfig?: SemanticSearchConfig;\n\terrors: string[];\n\tscoped: SemanticScopedLoadResult[];\n}\n\nexport interface SemanticFileFingerprint {\n\tpath: string;\n\tsize: number;\n\tmtimeMs: number;\n\thash: string;\n\tchunks: string[];\n}\n\nexport interface SemanticIndexMeta {\n\tversion: 1;\n\tcwd: string;\n\tprojectHash: string;\n\tproviderFingerprint: string;\n\tproviderType: SemanticProviderType;\n\tmodel: string;\n\tdimension: number;\n\tbuiltAt: string;\n\tchunkConfigFingerprint: string;\n\tindexFilterFingerprint: string;\n\tfileMap: Record<string, SemanticFileFingerprint>;\n}\n\nexport interface SemanticIndexedChunk {\n\tid: string;\n\tpath: string;\n\tlineStart: number;\n\tlineEnd: number;\n\tpreview: string;\n\thash: string;\n}\n\nexport interface SemanticIndexedVector {\n\tid: string;\n\tvector: number[];\n\tnorm: number;\n}\n\nexport interface SemanticChunkForEmbedding extends SemanticIndexedChunk {\n\ttext: string;\n}\n\nexport interface SemanticIndexOperationResult {\n\taction: \"index\" | \"rebuild\";\n\tindexPath: string;\n\tdurationMs: number;\n\tprocessedFiles: number;\n\tnewFiles: number;\n\tchangedFiles: number;\n\tremovedFiles: number;\n\treusedFiles: number;\n\tchunks: number;\n\tdimension: number;\n\tbuiltAt: string;\n}\n\nexport interface SemanticStatusResult {\n\taction: \"status\";\n\tconfigured: boolean;\n\tenabled: boolean;\n\tautoIndex: boolean;\n\tindexed: boolean;\n\tstale: boolean;\n\tstaleReason?: SemanticStaleReason;\n\tprovider?: SemanticProviderType;\n\tmodel?: string;\n\tfiles: number;\n\tchunks: number;\n\tdimension?: number;\n\tageSeconds?: number;\n\tindexPath: string;\n\tconfigPathUser: string;\n\tconfigPathProject: string;\n}\n\nexport interface SemanticQueryHit {\n\tscore: number;\n\tpath: string;\n\tlineStart: number;\n\tlineEnd: number;\n\tsnippet: string;\n}\n\nexport interface SemanticQueryResult {\n\taction: \"query\";\n\tquery: string;\n\ttopK: number;\n\tautoRefreshed: boolean;\n\thits: SemanticQueryHit[];\n}\n\nexport type SemanticToolResult =\n\t| SemanticStatusResult\n\t| SemanticIndexOperationResult\n\t| SemanticQueryResult;\n\nexport class SemanticConfigError extends Error {}\n\nexport class SemanticConfigMissingError extends Error {\n\treadonly userConfigPath: string;\n\treadonly projectConfigPath: string;\n\n\tconstructor(userConfigPath: string, projectConfigPath: string) {\n\t\tsuper(\n\t\t\t`Semantic search config not found. Create one with /semantic setup or write ${userConfigPath} (user) or ${projectConfigPath} (project).`,\n\t\t);\n\t\tthis.name = \"SemanticConfigMissingError\";\n\t\tthis.userConfigPath = userConfigPath;\n\t\tthis.projectConfigPath = projectConfigPath;\n\t}\n}\n\nexport class SemanticRebuildRequiredError extends Error {\n\tconstructor(message: string) {\n\t\tsuper(message);\n\t\tthis.name = \"SemanticRebuildRequiredError\";\n\t}\n}\n\nexport class SemanticIndexRequiredError extends Error {\n\tconstructor(message: string) {\n\t\tsuper(message);\n\t\tthis.name = \"SemanticIndexRequiredError\";\n\t}\n}\n"]}
@@ -0,0 +1,30 @@
1
+ export interface ShadowGuardOptions {
2
+ getActiveTools: () => string[];
3
+ getAllTools: () => string[];
4
+ setActiveTools: (toolNames: string[]) => void;
5
+ }
6
+ export interface ShadowGuardState {
7
+ enabled: boolean;
8
+ strict: boolean;
9
+ blockedTools: string[];
10
+ }
11
+ export declare class ShadowGuard {
12
+ private readonly getActiveTools;
13
+ private readonly getAllTools;
14
+ private readonly setActiveTools;
15
+ private enabled;
16
+ private strict;
17
+ private restoreToolNames;
18
+ constructor(options: ShadowGuardOptions);
19
+ getState(): ShadowGuardState;
20
+ isEnabled(): boolean;
21
+ getRestoreToolNames(): string[];
22
+ setRestoreToolNames(toolNames: string[]): void;
23
+ enable(): ShadowGuardState;
24
+ disable(): ShadowGuardState;
25
+ reset(): void;
26
+ enforceReadOnlyToolsIfEnabled(): void;
27
+ shouldDenyTool(toolName: string): boolean;
28
+ private applyReadOnlyTools;
29
+ }
30
+ //# sourceMappingURL=shadow-guard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shadow-guard.d.ts","sourceRoot":"","sources":["../../src/core/shadow-guard.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,kBAAkB;IAClC,cAAc,EAAE,MAAM,MAAM,EAAE,CAAC;IAC/B,WAAW,EAAE,MAAM,MAAM,EAAE,CAAC;IAC5B,cAAc,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,IAAI,CAAC;CAC9C;AAED,MAAM,WAAW,gBAAgB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,YAAY,EAAE,MAAM,EAAE,CAAC;CACvB;AAaD,qBAAa,WAAW;IACvB,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAiB;IAChD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAiB;IAC7C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAgC;IAC/D,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,gBAAgB,CAAgB;gBAE5B,OAAO,EAAE,kBAAkB;IAMvC,QAAQ,IAAI,gBAAgB;IAQ5B,SAAS,IAAI,OAAO;IAIpB,mBAAmB,IAAI,MAAM,EAAE;IAI/B,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,IAAI;IAI9C,MAAM,IAAI,gBAAgB;IAS1B,OAAO,IAAI,gBAAgB;IAa3B,KAAK,IAAI,IAAI;IAKb,6BAA6B,IAAI,IAAI;IAKrC,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAIzC,OAAO,CAAC,kBAAkB;CAS1B"}
@@ -0,0 +1,81 @@
1
+ import { readOnlyTools } from "./tools/index.js";
2
+ const SHADOW_MUTATING_TOOLS = new Set(["edit", "write", "bash", "task"]);
3
+ const SHADOW_SAFE_ADDITIONAL_TOOLS = new Set(["todo_read", "ask_user"]);
4
+ function uniqueTools(names) {
5
+ const seen = new Set();
6
+ const result = [];
7
+ for (const name of names) {
8
+ if (!name || seen.has(name))
9
+ continue;
10
+ seen.add(name);
11
+ result.push(name);
12
+ }
13
+ return result;
14
+ }
15
+ export class ShadowGuard {
16
+ constructor(options) {
17
+ this.enabled = false;
18
+ this.strict = true;
19
+ this.restoreToolNames = [];
20
+ this.getActiveTools = options.getActiveTools;
21
+ this.getAllTools = options.getAllTools;
22
+ this.setActiveTools = options.setActiveTools;
23
+ }
24
+ getState() {
25
+ return {
26
+ enabled: this.enabled,
27
+ strict: this.strict,
28
+ blockedTools: [...SHADOW_MUTATING_TOOLS],
29
+ };
30
+ }
31
+ isEnabled() {
32
+ return this.enabled;
33
+ }
34
+ getRestoreToolNames() {
35
+ return [...this.restoreToolNames];
36
+ }
37
+ setRestoreToolNames(toolNames) {
38
+ this.restoreToolNames = uniqueTools(toolNames);
39
+ }
40
+ enable() {
41
+ if (!this.enabled) {
42
+ this.restoreToolNames = uniqueTools(this.getActiveTools());
43
+ this.enabled = true;
44
+ }
45
+ this.applyReadOnlyTools();
46
+ return this.getState();
47
+ }
48
+ disable() {
49
+ if (!this.enabled) {
50
+ return this.getState();
51
+ }
52
+ const restore = uniqueTools(this.restoreToolNames);
53
+ if (restore.length > 0) {
54
+ this.setActiveTools(restore);
55
+ }
56
+ this.enabled = false;
57
+ return this.getState();
58
+ }
59
+ reset() {
60
+ this.enabled = false;
61
+ this.restoreToolNames = [];
62
+ }
63
+ enforceReadOnlyToolsIfEnabled() {
64
+ if (!this.enabled)
65
+ return;
66
+ this.applyReadOnlyTools();
67
+ }
68
+ shouldDenyTool(toolName) {
69
+ return this.enabled && this.strict && SHADOW_MUTATING_TOOLS.has(toolName);
70
+ }
71
+ applyReadOnlyTools() {
72
+ const availableTools = new Set(this.getAllTools());
73
+ const whitelist = new Set([
74
+ ...readOnlyTools.map((tool) => tool.name),
75
+ ...SHADOW_SAFE_ADDITIONAL_TOOLS,
76
+ ]);
77
+ const nextActive = [...availableTools].filter((toolName) => whitelist.has(toolName));
78
+ this.setActiveTools(uniqueTools(nextActive));
79
+ }
80
+ }
81
+ //# sourceMappingURL=shadow-guard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shadow-guard.js","sourceRoot":"","sources":["../../src/core/shadow-guard.ts"],"names":[],"mappings":"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","sourcesContent":["import { readOnlyTools } from \"./tools/index.js\";\n\nconst SHADOW_MUTATING_TOOLS = new Set([\"edit\", \"write\", \"bash\", \"task\"]);\nconst SHADOW_SAFE_ADDITIONAL_TOOLS = new Set([\"todo_read\", \"ask_user\"]);\n\nexport interface ShadowGuardOptions {\n\tgetActiveTools: () => string[];\n\tgetAllTools: () => string[];\n\tsetActiveTools: (toolNames: string[]) => void;\n}\n\nexport interface ShadowGuardState {\n\tenabled: boolean;\n\tstrict: boolean;\n\tblockedTools: string[];\n}\n\nfunction uniqueTools(names: string[]): string[] {\n\tconst seen = new Set<string>();\n\tconst result: string[] = [];\n\tfor (const name of names) {\n\t\tif (!name || seen.has(name)) continue;\n\t\tseen.add(name);\n\t\tresult.push(name);\n\t}\n\treturn result;\n}\n\nexport class ShadowGuard {\n\tprivate readonly getActiveTools: () => string[];\n\tprivate readonly getAllTools: () => string[];\n\tprivate readonly setActiveTools: (toolNames: string[]) => void;\n\tprivate enabled = false;\n\tprivate strict = true;\n\tprivate restoreToolNames: string[] = [];\n\n\tconstructor(options: ShadowGuardOptions) {\n\t\tthis.getActiveTools = options.getActiveTools;\n\t\tthis.getAllTools = options.getAllTools;\n\t\tthis.setActiveTools = options.setActiveTools;\n\t}\n\n\tgetState(): ShadowGuardState {\n\t\treturn {\n\t\t\tenabled: this.enabled,\n\t\t\tstrict: this.strict,\n\t\t\tblockedTools: [...SHADOW_MUTATING_TOOLS],\n\t\t};\n\t}\n\n\tisEnabled(): boolean {\n\t\treturn this.enabled;\n\t}\n\n\tgetRestoreToolNames(): string[] {\n\t\treturn [...this.restoreToolNames];\n\t}\n\n\tsetRestoreToolNames(toolNames: string[]): void {\n\t\tthis.restoreToolNames = uniqueTools(toolNames);\n\t}\n\n\tenable(): ShadowGuardState {\n\t\tif (!this.enabled) {\n\t\t\tthis.restoreToolNames = uniqueTools(this.getActiveTools());\n\t\t\tthis.enabled = true;\n\t\t}\n\t\tthis.applyReadOnlyTools();\n\t\treturn this.getState();\n\t}\n\n\tdisable(): ShadowGuardState {\n\t\tif (!this.enabled) {\n\t\t\treturn this.getState();\n\t\t}\n\n\t\tconst restore = uniqueTools(this.restoreToolNames);\n\t\tif (restore.length > 0) {\n\t\t\tthis.setActiveTools(restore);\n\t\t}\n\t\tthis.enabled = false;\n\t\treturn this.getState();\n\t}\n\n\treset(): void {\n\t\tthis.enabled = false;\n\t\tthis.restoreToolNames = [];\n\t}\n\n\tenforceReadOnlyToolsIfEnabled(): void {\n\t\tif (!this.enabled) return;\n\t\tthis.applyReadOnlyTools();\n\t}\n\n\tshouldDenyTool(toolName: string): boolean {\n\t\treturn this.enabled && this.strict && SHADOW_MUTATING_TOOLS.has(toolName);\n\t}\n\n\tprivate applyReadOnlyTools(): void {\n\t\tconst availableTools = new Set(this.getAllTools());\n\t\tconst whitelist = new Set<string>([\n\t\t\t...readOnlyTools.map((tool) => tool.name),\n\t\t\t...SHADOW_SAFE_ADDITIONAL_TOOLS,\n\t\t]);\n\t\tconst nextActive = [...availableTools].filter((toolName) => whitelist.has(toolName));\n\t\tthis.setActiveTools(uniqueTools(nextActive));\n\t}\n}\n"]}
@@ -0,0 +1,46 @@
1
+ export type SharedMemoryScope = "run" | "task";
2
+ export type SharedMemoryWriteMode = "set" | "append";
3
+ export interface SharedMemoryWriter {
4
+ taskId?: string;
5
+ delegateId?: string;
6
+ profile?: string;
7
+ }
8
+ export interface SharedMemoryContext {
9
+ rootCwd: string;
10
+ runId: string;
11
+ taskId?: string;
12
+ delegateId?: string;
13
+ profile?: string;
14
+ }
15
+ export interface SharedMemoryReadItem {
16
+ key: string;
17
+ scope: SharedMemoryScope;
18
+ value?: string;
19
+ version: number;
20
+ updatedAt: string;
21
+ writer: SharedMemoryWriter;
22
+ }
23
+ export interface SharedMemoryReadResult {
24
+ runId: string;
25
+ scope: SharedMemoryScope;
26
+ items: SharedMemoryReadItem[];
27
+ totalMatched: number;
28
+ }
29
+ export interface SharedMemoryWriteInput {
30
+ key: string;
31
+ value: string;
32
+ scope: SharedMemoryScope;
33
+ mode: SharedMemoryWriteMode;
34
+ ifVersion?: number;
35
+ }
36
+ export interface SharedMemoryReadInput {
37
+ scope: SharedMemoryScope;
38
+ key?: string;
39
+ prefix?: string;
40
+ limit?: number;
41
+ includeValues?: boolean;
42
+ }
43
+ export declare function getSharedMemoryPath(rootCwd: string, runId: string): string;
44
+ export declare function writeSharedMemory(context: SharedMemoryContext, input: SharedMemoryWriteInput): Promise<SharedMemoryReadItem>;
45
+ export declare function readSharedMemory(context: SharedMemoryContext, input: SharedMemoryReadInput): Promise<SharedMemoryReadResult>;
46
+ //# sourceMappingURL=shared-memory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared-memory.d.ts","sourceRoot":"","sources":["../../src/core/shared-memory.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,iBAAiB,GAAG,KAAK,GAAG,MAAM,CAAC;AAC/C,MAAM,MAAM,qBAAqB,GAAG,KAAK,GAAG,QAAQ,CAAC;AAErD,MAAM,WAAW,kBAAkB;IAClC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB;AA0BD,MAAM,WAAW,oBAAoB;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,iBAAiB,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,kBAAkB,CAAC;CAC3B;AAED,MAAM,WAAW,sBAAsB;IACtC,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,iBAAiB,CAAC;IACzB,KAAK,EAAE,oBAAoB,EAAE,CAAC;IAC9B,YAAY,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,sBAAsB;IACtC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,iBAAiB,CAAC;IACzB,IAAI,EAAE,qBAAqB,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,qBAAqB;IACrC,KAAK,EAAE,iBAAiB,CAAC;IACzB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,OAAO,CAAC;CACxB;AAuED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAE1E;AAqFD,wBAAsB,iBAAiB,CACtC,OAAO,EAAE,mBAAmB,EAC5B,KAAK,EAAE,sBAAsB,GAC3B,OAAO,CAAC,oBAAoB,CAAC,CAqD/B;AAyBD,wBAAsB,gBAAgB,CACrC,OAAO,EAAE,mBAAmB,EAC5B,KAAK,EAAE,qBAAqB,GAC1B,OAAO,CAAC,sBAAsB,CAAC,CA8BjC"}