@unbrained/pm-cli 2026.5.18 → 2026.5.24

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 (225) hide show
  1. package/CHANGELOG.md +60 -0
  2. package/README.md +2 -1
  3. package/dist/cli/commander-usage.js +16 -2
  4. package/dist/cli/commander-usage.js.map +1 -1
  5. package/dist/cli/commands/annotation-command.d.ts +49 -0
  6. package/dist/cli/commands/annotation-command.js +135 -0
  7. package/dist/cli/commands/annotation-command.js.map +1 -0
  8. package/dist/cli/commands/append.js +3 -7
  9. package/dist/cli/commands/append.js.map +1 -1
  10. package/dist/cli/commands/calendar.js +3 -6
  11. package/dist/cli/commands/calendar.js.map +1 -1
  12. package/dist/cli/commands/claim.js +12 -22
  13. package/dist/cli/commands/claim.js.map +1 -1
  14. package/dist/cli/commands/close.js +61 -9
  15. package/dist/cli/commands/close.js.map +1 -1
  16. package/dist/cli/commands/comments.d.ts +5 -0
  17. package/dist/cli/commands/comments.js +27 -117
  18. package/dist/cli/commands/comments.js.map +1 -1
  19. package/dist/cli/commands/completion.js +102 -15
  20. package/dist/cli/commands/completion.js.map +1 -1
  21. package/dist/cli/commands/context.js +4 -10
  22. package/dist/cli/commands/context.js.map +1 -1
  23. package/dist/cli/commands/contracts.js +168 -36
  24. package/dist/cli/commands/contracts.js.map +1 -1
  25. package/dist/cli/commands/create.js +49 -44
  26. package/dist/cli/commands/create.js.map +1 -1
  27. package/dist/cli/commands/dedupe-audit.js +7 -4
  28. package/dist/cli/commands/dedupe-audit.js.map +1 -1
  29. package/dist/cli/commands/delete.d.ts +3 -0
  30. package/dist/cli/commands/delete.js +9 -8
  31. package/dist/cli/commands/delete.js.map +1 -1
  32. package/dist/cli/commands/docs.d.ts +1 -0
  33. package/dist/cli/commands/docs.js +4 -8
  34. package/dist/cli/commands/docs.js.map +1 -1
  35. package/dist/cli/commands/event-validation-messages.d.ts +3 -0
  36. package/dist/cli/commands/event-validation-messages.js +44 -0
  37. package/dist/cli/commands/event-validation-messages.js.map +1 -0
  38. package/dist/cli/commands/extension.d.ts +1 -0
  39. package/dist/cli/commands/extension.js +138 -21
  40. package/dist/cli/commands/extension.js.map +1 -1
  41. package/dist/cli/commands/files.js +6 -13
  42. package/dist/cli/commands/files.js.map +1 -1
  43. package/dist/cli/commands/gc.js +17 -4
  44. package/dist/cli/commands/gc.js.map +1 -1
  45. package/dist/cli/commands/get.d.ts +3 -2
  46. package/dist/cli/commands/get.js +50 -8
  47. package/dist/cli/commands/get.js.map +1 -1
  48. package/dist/cli/commands/health.d.ts +10 -0
  49. package/dist/cli/commands/health.js +254 -75
  50. package/dist/cli/commands/health.js.map +1 -1
  51. package/dist/cli/commands/history-redact.d.ts +8 -0
  52. package/dist/cli/commands/history-redact.js +14 -97
  53. package/dist/cli/commands/history-redact.js.map +1 -1
  54. package/dist/cli/commands/history-repair.d.ts +33 -0
  55. package/dist/cli/commands/history-repair.js +166 -0
  56. package/dist/cli/commands/history-repair.js.map +1 -0
  57. package/dist/cli/commands/history.d.ts +4 -4
  58. package/dist/cli/commands/history.js +10 -88
  59. package/dist/cli/commands/history.js.map +1 -1
  60. package/dist/cli/commands/index.d.ts +3 -1
  61. package/dist/cli/commands/index.js +5 -3
  62. package/dist/cli/commands/index.js.map +1 -1
  63. package/dist/cli/commands/init.d.ts +28 -0
  64. package/dist/cli/commands/init.js +23 -2
  65. package/dist/cli/commands/init.js.map +1 -1
  66. package/dist/cli/commands/learnings.js +20 -119
  67. package/dist/cli/commands/learnings.js.map +1 -1
  68. package/dist/cli/commands/linked-test-entry.d.ts +3 -0
  69. package/dist/cli/commands/linked-test-entry.js +62 -0
  70. package/dist/cli/commands/linked-test-entry.js.map +1 -0
  71. package/dist/cli/commands/list.js +32 -22
  72. package/dist/cli/commands/list.js.map +1 -1
  73. package/dist/cli/commands/notes.js +20 -119
  74. package/dist/cli/commands/notes.js.map +1 -1
  75. package/dist/cli/commands/plan.d.ts +3 -0
  76. package/dist/cli/commands/plan.js +184 -22
  77. package/dist/cli/commands/plan.js.map +1 -1
  78. package/dist/cli/commands/restore.js +7 -50
  79. package/dist/cli/commands/restore.js.map +1 -1
  80. package/dist/cli/commands/schema.d.ts +31 -0
  81. package/dist/cli/commands/schema.js +98 -0
  82. package/dist/cli/commands/schema.js.map +1 -0
  83. package/dist/cli/commands/search.js +151 -40
  84. package/dist/cli/commands/search.js.map +1 -1
  85. package/dist/cli/commands/templates.d.ts +4 -0
  86. package/dist/cli/commands/templates.js +89 -17
  87. package/dist/cli/commands/templates.js.map +1 -1
  88. package/dist/cli/commands/test-all.js +4 -8
  89. package/dist/cli/commands/test-all.js.map +1 -1
  90. package/dist/cli/commands/test.d.ts +1 -0
  91. package/dist/cli/commands/test.js +7 -10
  92. package/dist/cli/commands/test.js.map +1 -1
  93. package/dist/cli/commands/update-many.js +4 -8
  94. package/dist/cli/commands/update-many.js.map +1 -1
  95. package/dist/cli/commands/update.js +109 -51
  96. package/dist/cli/commands/update.js.map +1 -1
  97. package/dist/cli/commands/validate.d.ts +3 -1
  98. package/dist/cli/commands/validate.js +23 -71
  99. package/dist/cli/commands/validate.js.map +1 -1
  100. package/dist/cli/error-guidance.js +96 -6
  101. package/dist/cli/error-guidance.js.map +1 -1
  102. package/dist/cli/extension-command-help.d.ts +0 -1
  103. package/dist/cli/extension-command-help.js +2 -13
  104. package/dist/cli/extension-command-help.js.map +1 -1
  105. package/dist/cli/extension-command-options.d.ts +1 -0
  106. package/dist/cli/extension-command-options.js +106 -7
  107. package/dist/cli/extension-command-options.js.map +1 -1
  108. package/dist/cli/help-content.d.ts +0 -1
  109. package/dist/cli/help-content.js +13 -9
  110. package/dist/cli/help-content.js.map +1 -1
  111. package/dist/cli/help-json-payload.d.ts +1 -0
  112. package/dist/cli/help-json-payload.js +33 -3
  113. package/dist/cli/help-json-payload.js.map +1 -1
  114. package/dist/cli/main.js +35 -29
  115. package/dist/cli/main.js.map +1 -1
  116. package/dist/cli/register-list-query.d.ts +1 -1
  117. package/dist/cli/register-list-query.js +40 -17
  118. package/dist/cli/register-list-query.js.map +1 -1
  119. package/dist/cli/register-mutation.d.ts +1 -1
  120. package/dist/cli/register-mutation.js +232 -64
  121. package/dist/cli/register-mutation.js.map +1 -1
  122. package/dist/cli/register-operations.js +16 -11
  123. package/dist/cli/register-operations.js.map +1 -1
  124. package/dist/cli/register-setup.js +26 -14
  125. package/dist/cli/register-setup.js.map +1 -1
  126. package/dist/cli/registration-helpers.d.ts +0 -2
  127. package/dist/cli/registration-helpers.js +13 -40
  128. package/dist/cli/registration-helpers.js.map +1 -1
  129. package/dist/cli.js +23 -3
  130. package/dist/cli.js.map +1 -1
  131. package/dist/core/extensions/index.d.ts +0 -1
  132. package/dist/core/extensions/index.js +2 -14
  133. package/dist/core/extensions/index.js.map +1 -1
  134. package/dist/core/extensions/loader.js +3 -9
  135. package/dist/core/extensions/loader.js.map +1 -1
  136. package/dist/core/fs/path-utils.d.ts +1 -0
  137. package/dist/core/fs/path-utils.js +12 -0
  138. package/dist/core/fs/path-utils.js.map +1 -0
  139. package/dist/core/history/drift-scan.d.ts +11 -0
  140. package/dist/core/history/drift-scan.js +67 -0
  141. package/dist/core/history/drift-scan.js.map +1 -0
  142. package/dist/core/history/replay.d.ts +82 -0
  143. package/dist/core/history/replay.js +249 -0
  144. package/dist/core/history/replay.js.map +1 -0
  145. package/dist/core/item/item-format.js +11 -8
  146. package/dist/core/item/item-format.js.map +1 -1
  147. package/dist/core/item/item-type-definition.d.ts +52 -0
  148. package/dist/core/item/item-type-definition.js +123 -0
  149. package/dist/core/item/item-type-definition.js.map +1 -0
  150. package/dist/core/item/parse.js +3 -2
  151. package/dist/core/item/parse.js.map +1 -1
  152. package/dist/core/item/priority.d.ts +23 -0
  153. package/dist/core/item/priority.js +55 -0
  154. package/dist/core/item/priority.js.map +1 -0
  155. package/dist/core/item/status.d.ts +14 -1
  156. package/dist/core/item/status.js +22 -2
  157. package/dist/core/item/status.js.map +1 -1
  158. package/dist/core/item/toon-decode.d.ts +19 -0
  159. package/dist/core/item/toon-decode.js +69 -0
  160. package/dist/core/item/toon-decode.js.map +1 -0
  161. package/dist/core/item/type-registry.js +13 -84
  162. package/dist/core/item/type-registry.js.map +1 -1
  163. package/dist/core/packages/manifest.js +3 -9
  164. package/dist/core/packages/manifest.js.map +1 -1
  165. package/dist/core/schema/item-types-file.d.ts +85 -0
  166. package/dist/core/schema/item-types-file.js +243 -0
  167. package/dist/core/schema/item-types-file.js.map +1 -0
  168. package/dist/core/schema/runtime-schema.d.ts +2 -1
  169. package/dist/core/schema/runtime-schema.js +11 -9
  170. package/dist/core/schema/runtime-schema.js.map +1 -1
  171. package/dist/core/search/semantic-defaults.js +3 -3
  172. package/dist/core/search/semantic-defaults.js.map +1 -1
  173. package/dist/core/shared/author.d.ts +1 -0
  174. package/dist/core/shared/author.js +9 -0
  175. package/dist/core/shared/author.js.map +1 -0
  176. package/dist/core/shared/lazy-module.d.ts +1 -0
  177. package/dist/core/shared/lazy-module.js +11 -0
  178. package/dist/core/shared/lazy-module.js.map +1 -0
  179. package/dist/core/shared/option-alias-visibility.d.ts +44 -0
  180. package/dist/core/shared/option-alias-visibility.js +76 -0
  181. package/dist/core/shared/option-alias-visibility.js.map +1 -0
  182. package/dist/core/shared/text-normalization.d.ts +0 -1
  183. package/dist/core/shared/text-normalization.js +2 -5
  184. package/dist/core/shared/text-normalization.js.map +1 -1
  185. package/dist/core/store/item-store.d.ts +2 -0
  186. package/dist/core/store/item-store.js +70 -39
  187. package/dist/core/store/item-store.js.map +1 -1
  188. package/dist/core/store/settings-validator.d.ts +106 -0
  189. package/dist/core/store/settings-validator.js +279 -0
  190. package/dist/core/store/settings-validator.js.map +1 -0
  191. package/dist/core/store/settings.js +6 -343
  192. package/dist/core/store/settings.js.map +1 -1
  193. package/dist/core/telemetry/runtime.js +5 -3
  194. package/dist/core/telemetry/runtime.js.map +1 -1
  195. package/dist/mcp/server.js +64 -13
  196. package/dist/mcp/server.js.map +1 -1
  197. package/dist/sdk/cli-contracts.d.ts +9 -2
  198. package/dist/sdk/cli-contracts.js +204 -13
  199. package/dist/sdk/cli-contracts.js.map +1 -1
  200. package/dist/sdk/runtime.d.ts +25 -1
  201. package/dist/sdk/runtime.js +46 -3
  202. package/dist/sdk/runtime.js.map +1 -1
  203. package/dist/types.d.ts +6 -0
  204. package/dist/types.js +10 -2
  205. package/dist/types.js.map +1 -1
  206. package/docs/AGENT_GUIDE.md +7 -1
  207. package/docs/ARCHITECTURE.md +1 -1
  208. package/docs/COMMANDS.md +39 -6
  209. package/docs/CONFIGURATION.md +1 -1
  210. package/docs/RELEASING.md +11 -7
  211. package/docs/SDK.md +11 -2
  212. package/package.json +12 -11
  213. package/packages/pm-calendar/README.md +3 -1
  214. package/packages/pm-calendar/extensions/calendar/index.js +21 -2
  215. package/packages/pm-calendar/extensions/calendar/index.ts +21 -2
  216. package/packages/pm-search-advanced/README.md +8 -0
  217. package/packages/pm-search-advanced/extensions/search-advanced/index.js +74 -0
  218. package/packages/pm-search-advanced/extensions/search-advanced/index.ts +74 -0
  219. package/packages/pm-search-advanced/extensions/search-advanced/runtime.js +67 -9
  220. package/packages/pm-search-advanced/extensions/search-advanced/runtime.ts +67 -9
  221. package/packages/pm-templates/extensions/templates/runtime.js +11 -202
  222. package/packages/pm-templates/extensions/templates/runtime.ts +38 -230
  223. package/dist/core/output/command-aware.d.ts +0 -1
  224. package/dist/core/output/command-aware.js +0 -397
  225. package/dist/core/output/command-aware.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"search.js","sources":["cli/commands/search.ts"],"sourceRoot":"/","sourcesContent":["import fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { toNonEmptyStringOrUndefined } from \"../../core/shared/primitives.js\";\nimport { getActiveExtensionRegistrations, runActiveOnReadHooks } from \"../../core/extensions/index.js\";\nimport {\n resolveRegisteredSearchProvider,\n resolveRegisteredVectorStoreAdapter,\n} from \"../../core/extensions/runtime-registrations.js\";\nimport { resolveItemTypeRegistry, type ItemTypeRegistry } from \"../../core/item/type-registry.js\";\nimport { parseLimit, parsePriority, parseType } from \"../shared-parsers.js\";\nimport {\n executeEmbeddingRequest,\n resolveEmbeddingProviders,\n type EmbeddingProviderConfig,\n type EmbeddingProviderResolution,\n} from \"../../core/search/providers.js\";\nimport { resolveSettingsWithSemanticRuntimeDefaults } from \"../../core/search/semantic-defaults.js\";\nimport {\n executeVectorQuery,\n resolveVectorStores,\n type VectorQueryHit,\n type VectorStoreConfig,\n type VectorStoreResolution,\n} from \"../../core/search/vector-stores.js\";\nimport { buildEventCorpus, buildPlanFlatCorpus, buildReminderCorpus } from \"../../core/search/corpus.js\";\nimport { pathExists } from \"../../core/fs/fs-utils.js\";\nimport { parseItemDocument } from \"../../core/item/item-format.js\";\nimport { normalizeStatusInput } from \"../../core/item/status.js\";\nimport { collectRuntimeFilterValues, matchesRuntimeFilters } from \"../../core/schema/runtime-field-filters.js\";\nimport {\n resolveRuntimeFieldRegistry,\n resolveRuntimeStatusRegistry,\n type RuntimeStatusRegistry,\n} from \"../../core/schema/runtime-schema.js\";\nimport { EXIT_CODE } from \"../../core/shared/constants.js\";\nimport type { GlobalOptions } from \"../../core/shared/command-types.js\";\nimport { PmCliError } from \"../../core/shared/errors.js\";\nimport { tokenizeAlphaNumeric } from \"../../core/shared/text-normalization.js\";\nimport { compareTimestampStrings, nowIso, resolveIsoOrRelative } from \"../../core/shared/time.js\";\nimport { listAllDocumentCandidatesCached } from \"../../core/store/front-matter-cache.js\";\nimport { listAllFrontMatter } from \"../../core/store/item-store.js\";\nimport { getItemPath, getSettingsPath, resolveGlobalPmRoot, resolvePmRoot } from \"../../core/store/paths.js\";\nimport { readSettings } from \"../../core/store/settings.js\";\nimport type { ItemDocument, ItemFormat, ItemFrontMatter, ItemStatus, ItemType, PmSettings } from \"../../types/index.js\";\n\nexport interface SearchOptions {\n mode?: string;\n includeLinked?: boolean;\n titleExact?: boolean;\n phraseExact?: boolean;\n type?: string;\n tag?: string;\n priority?: string;\n deadlineBefore?: string;\n deadlineAfter?: string;\n limit?: string;\n compact?: boolean;\n full?: boolean;\n fields?: string;\n [key: string]: unknown;\n}\n\ntype SearchMode = \"keyword\" | \"semantic\" | \"hybrid\";\ntype SearchProjectionMode = \"compact\" | \"full\" | \"fields\";\n\ninterface SearchProjectionConfig {\n mode: SearchProjectionMode;\n fields: string[];\n}\n\nconst DEFAULT_COMPACT_SEARCH_FIELDS = [\n \"id\",\n \"title\",\n \"status\",\n \"type\",\n \"priority\",\n \"updated_at\",\n \"score\",\n \"matched_fields\",\n] as const;\n\nconst LONG_QUERY_TOKEN_THRESHOLD = 2;\nconst LONG_QUERY_TITLE_EXACT_BONUS = 120;\nconst LONG_QUERY_PHRASE_MULTIPLIER = 6;\nconst IMPLICIT_HYBRID_EMBEDDING_TIMEOUT_MS = 8_000;\nconst IMPLICIT_HYBRID_VECTOR_TIMEOUT_MS = 8_000;\n\nexport interface SearchHit {\n item: ItemFrontMatter;\n score: number;\n matched_fields: string[];\n}\n\nexport type SearchResultItem = SearchHit | Record<string, unknown>;\n\nexport interface SearchResult {\n query: string;\n mode: SearchMode;\n items: SearchResultItem[];\n count: number;\n filters: Record<string, unknown>;\n projection: {\n mode: SearchProjectionMode;\n fields: string[] | null;\n };\n now: string;\n warnings?: string[];\n}\n\ninterface ExtensionSearchProviderContext {\n query: string;\n mode: SearchMode;\n tokens: string[];\n options: SearchOptions;\n settings: PmSettings;\n documents: ItemDocument[];\n}\n\ninterface ExtensionSearchProviderHit {\n id: string;\n score: number;\n matched_fields?: string[];\n}\n\ntype ExtensionSearchProviderQuery = (\n context: ExtensionSearchProviderContext,\n) => Promise<ExtensionSearchProviderHit[] | { hits?: ExtensionSearchProviderHit[] }> | ExtensionSearchProviderHit[] | { hits?: ExtensionSearchProviderHit[] };\n\ntype ExtensionVectorQuery = (\n context: {\n vector: number[];\n limit: number;\n settings: PmSettings;\n },\n) => Promise<VectorQueryHit[]> | VectorQueryHit[];\n\ntype ExtensionVectorAdapter = {\n query?: ExtensionVectorQuery;\n};\n\n\n\nfunction isTerminal(status: ItemStatus, statusRegistry: RuntimeStatusRegistry): boolean {\n const normalized = normalizeStatusInput(status, statusRegistry) ?? status;\n return statusRegistry.terminal_statuses.has(normalized);\n}\n\ninterface SearchModeContext {\n hasProvider: boolean;\n hasVectorStore: boolean;\n}\n\ntype ImplicitSemanticFallbackReason = \"timeout\" | \"connection\" | \"error\";\n\nfunction classifyImplicitSemanticFallbackReason(error: unknown): ImplicitSemanticFallbackReason {\n const message = (error instanceof Error ? error.message : String(error)).toLowerCase();\n if (message.includes(\"timed out\") || message.includes(\"timeout\")) {\n return \"timeout\";\n }\n if (\n message.includes(\"econnrefused\") ||\n message.includes(\"connection refused\") ||\n message.includes(\"connect \") ||\n message.includes(\"enotfound\") ||\n message.includes(\"eai_again\")\n ) {\n return \"connection\";\n }\n return \"error\";\n}\n\nfunction buildImplicitSemanticFallbackWarning(error: unknown): string {\n const reason = classifyImplicitSemanticFallbackReason(error);\n if (reason === \"timeout\") {\n return \"search_implicit_semantic_fallback:timeout:using_keyword_mode\";\n }\n if (reason === \"connection\") {\n return \"search_implicit_semantic_fallback:connection:using_keyword_mode\";\n }\n return \"search_implicit_semantic_fallback:error:using_keyword_mode\";\n}\n\nfunction parseMode(raw: string | undefined, context: SearchModeContext): SearchMode {\n if (raw === undefined) {\n return context.hasProvider && context.hasVectorStore ? \"hybrid\" : \"keyword\";\n }\n const normalized = raw.trim().toLowerCase();\n if (normalized !== \"keyword\" && normalized !== \"semantic\" && normalized !== \"hybrid\") {\n throw new PmCliError(\"Search mode must be one of keyword|semantic|hybrid\", EXIT_CODE.USAGE);\n }\n return normalized;\n}\n\nfunction parseIncludeLinked(raw: boolean | undefined): boolean {\n return raw === true;\n}\n\nfunction parseTitleExact(raw: boolean | undefined): boolean {\n return raw === true;\n}\n\nfunction parsePhraseExact(raw: boolean | undefined): boolean {\n return raw === true;\n}\n\nfunction normalizeSearchPhrase(value: string): string {\n return value\n .toLowerCase()\n .replace(/\\s+/g, \" \")\n .trim();\n}\n\nfunction parseDeadline(raw: string | undefined, fieldLabel: string): string | undefined {\n if (raw === undefined) return undefined;\n return resolveIsoOrRelative(raw, new Date(), fieldLabel);\n}\n\nfunction parseFieldSelectors(raw: string | undefined): string[] | undefined {\n if (raw === undefined) {\n return undefined;\n }\n const selectors = raw\n .split(\",\")\n .map((entry) => entry.trim())\n .filter((entry) => entry.length > 0);\n if (selectors.length === 0) {\n throw new PmCliError(\"Search --fields requires a comma-separated list of field names\", EXIT_CODE.USAGE);\n }\n return [...new Set(selectors)];\n}\n\nfunction parseProjectionConfig(options: SearchOptions): SearchProjectionConfig {\n const compactRequested = options.compact === true;\n const fullRequested = options.full === true;\n const fieldSelectors = parseFieldSelectors(options.fields);\n const enabledModes = Number(compactRequested) + Number(fullRequested) + Number(fieldSelectors !== undefined);\n if (enabledModes > 1) {\n throw new PmCliError(\n \"Search projection options are mutually exclusive. Use one of --compact, --full, or --fields.\",\n EXIT_CODE.USAGE,\n );\n }\n if (compactRequested) {\n return {\n mode: \"compact\",\n fields: [...DEFAULT_COMPACT_SEARCH_FIELDS],\n };\n }\n if (fullRequested) {\n return {\n mode: \"full\",\n fields: [],\n };\n }\n if (fieldSelectors) {\n return {\n mode: \"fields\",\n fields: fieldSelectors,\n };\n }\n return {\n mode: \"full\",\n fields: [],\n };\n}\n\nfunction parseTokens(query: string): string[] {\n const normalized = normalizeSearchPhrase(query);\n if (!normalized) {\n throw new PmCliError(\"Search query must not be empty\", EXIT_CODE.USAGE);\n }\n return normalized.split(/\\s+/).filter(Boolean);\n}\n\nfunction collectExactPhraseFields(document: ItemDocument): string[] {\n const item = document.metadata;\n return [\n item.title,\n item.description,\n item.status,\n item.tags.join(\" \"),\n document.body,\n (item.comments ?? []).map((entry) => entry.text).join(\" \"),\n (item.notes ?? []).map((entry) => entry.text).join(\" \"),\n (item.learnings ?? []).map((entry) => entry.text).join(\" \"),\n buildReminderCorpus(item).join(\" \"),\n buildEventCorpus(item).join(\" \"),\n (item.dependencies ?? []).map((entry) => `${entry.id} ${entry.kind}`).join(\" \"),\n buildPlanFlatCorpus(item),\n ];\n}\n\nfunction documentContainsExactPhrase(document: ItemDocument, normalizedQuery: string): boolean {\n return collectExactPhraseFields(document).some((fieldValue) =>\n normalizeSearchPhrase(fieldValue).includes(normalizedQuery),\n );\n}\n\nfunction applyExactQueryFilters(\n items: ItemDocument[],\n normalizedQuery: string,\n options: { titleExact: boolean; phraseExact: boolean },\n): ItemDocument[] {\n if (!options.titleExact && !options.phraseExact) {\n return items;\n }\n return items.filter((document) => {\n if (options.titleExact && normalizeSearchPhrase(document.metadata.title) !== normalizedQuery) {\n return false;\n }\n if (options.phraseExact && !documentContainsExactPhrase(document, normalizedQuery)) {\n return false;\n }\n return true;\n });\n}\n\nfunction applyFilters(\n items: ItemDocument[],\n options: SearchOptions,\n typeRegistry: ItemTypeRegistry,\n runtimeFieldFilters: Record<string, unknown>,\n): ItemDocument[] {\n const typeFilter = parseType(options.type, typeRegistry);\n const tagFilter = options.tag?.trim().toLowerCase();\n const priorityFilter = parsePriority(options.priority);\n const deadlineBefore = parseDeadline(options.deadlineBefore, \"deadline-before\");\n const deadlineAfter = parseDeadline(options.deadlineAfter, \"deadline-after\");\n\n return items.filter((document) => {\n const item = document.metadata;\n if (typeFilter && item.type !== typeFilter) return false;\n if (tagFilter && !item.tags.includes(tagFilter)) return false;\n if (priorityFilter !== undefined && item.priority !== priorityFilter) return false;\n if (deadlineBefore && (!item.deadline || compareTimestampStrings(item.deadline, deadlineBefore) > 0)) return false;\n if (deadlineAfter && (!item.deadline || compareTimestampStrings(item.deadline, deadlineAfter) < 0)) return false;\n if (!matchesRuntimeFilters(item as Record<string, unknown>, runtimeFieldFilters)) return false;\n return true;\n });\n}\n\nfunction countOccurrences(haystack: string, needle: string): number {\n let count = 0;\n let index = 0;\n while (true) {\n const foundAt = haystack.indexOf(needle, index);\n if (foundAt < 0) {\n return count;\n }\n count += 1;\n index = foundAt + needle.length;\n }\n}\n\nfunction tokenizeForExactTokenMatch(value: string): string[] {\n return tokenizeAlphaNumeric(value);\n}\n\nfunction collectLinkedPaths(item: ItemFrontMatter): Array<{ scope: \"project\" | \"global\"; path: string }> {\n const fromFiles = (item.files ?? []).map((entry) => ({\n scope: entry.scope,\n path: entry.path.trim(),\n }));\n const fromDocs = (item.docs ?? []).map((entry) => ({\n scope: entry.scope,\n path: entry.path.trim(),\n }));\n const fromTests = (item.tests ?? [])\n .filter((entry): entry is typeof entry & { path: string } => typeof entry.path === \"string\" && entry.path.trim().length > 0)\n .map((entry) => ({\n scope: entry.scope,\n path: entry.path.trim(),\n }));\n const sorted = [...fromFiles, ...fromDocs, ...fromTests]\n .filter((entry) => entry.path.length > 0)\n .sort((a, b) => a.scope.localeCompare(b.scope) || a.path.localeCompare(b.path));\n const deduped = new Map<string, { scope: \"project\" | \"global\"; path: string }>();\n for (const entry of sorted) {\n deduped.set(`${entry.scope}:${entry.path}`, entry);\n }\n return [...deduped.values()];\n}\n\nfunction isPathWithinRoot(root: string, resolvedPath: string): boolean {\n const relative = path.relative(root, resolvedPath);\n if (relative.length === 0) {\n return true;\n }\n return !relative.startsWith(\"..\") && !path.isAbsolute(relative);\n}\n\ninterface ContainmentRoot {\n resolved: string;\n realpath: string;\n}\n\ninterface LinkedCorpusRoots {\n projectContainmentRoot: ContainmentRoot | null;\n globalContainmentRoot: ContainmentRoot | null;\n}\n\nasync function resolveContainmentRoot(root: string): Promise<ContainmentRoot | null> {\n const resolved = path.resolve(root);\n try {\n const realpathRoot = await fs.realpath(resolved);\n return {\n resolved,\n realpath: realpathRoot,\n };\n } catch {\n return null;\n }\n}\n\nasync function resolveLinkedCorpusRoots(projectRoot: string, globalRoot: string): Promise<LinkedCorpusRoots> {\n const [projectContainmentRoot, globalContainmentRoot] = await Promise.all([\n resolveContainmentRoot(projectRoot),\n resolveContainmentRoot(globalRoot),\n ]);\n return {\n projectContainmentRoot,\n globalContainmentRoot,\n };\n}\n\nasync function loadLinkedCorpus(\n document: ItemDocument,\n roots: LinkedCorpusRoots,\n): Promise<string> {\n const linkedPaths = collectLinkedPaths(document.metadata);\n const chunks: string[] = [];\n for (const linkedPath of linkedPaths) {\n const containmentRoot = linkedPath.scope === \"global\" ? roots.globalContainmentRoot : roots.projectContainmentRoot;\n if (!containmentRoot) {\n continue;\n }\n const resolved = path.resolve(containmentRoot.resolved, linkedPath.path);\n if (!isPathWithinRoot(containmentRoot.resolved, resolved)) {\n continue;\n }\n let linkedRealpath: string;\n try {\n linkedRealpath = await fs.realpath(resolved);\n } catch {\n continue;\n }\n if (!isPathWithinRoot(containmentRoot.realpath, linkedRealpath)) {\n continue;\n }\n try {\n await runActiveOnReadHooks({\n path: resolved,\n scope: linkedPath.scope,\n });\n chunks.push(await fs.readFile(resolved, \"utf8\"));\n } catch {\n // Best-effort linked-content indexing: unreadable paths are ignored.\n }\n }\n return chunks.join(\"\\n\");\n}\n\nexport interface SearchTuning {\n title_exact_bonus: number;\n title_weight: number;\n description_weight: number;\n tags_weight: number;\n status_weight: number;\n body_weight: number;\n comments_weight: number;\n notes_weight: number;\n learnings_weight: number;\n reminders_weight: number;\n events_weight: number;\n dependencies_weight: number;\n linked_content_weight: number;\n}\n\nfunction scoreDocument(\n document: ItemDocument,\n tokens: string[],\n normalizedQuery: string,\n linkedCorpus: string,\n tuning: SearchTuning,\n): SearchHit | null {\n const item = document.metadata;\n const titleTokenCounts = new Map<string, number>();\n for (const token of tokenizeForExactTokenMatch(item.title)) {\n titleTokenCounts.set(token, (titleTokenCounts.get(token) ?? 0) + 1);\n }\n const searchableFields: Array<{ name: string; value: string; weight: number }> = [\n { name: \"title\", value: item.title, weight: tuning.title_weight },\n { name: \"description\", value: item.description, weight: tuning.description_weight },\n { name: \"tags\", value: item.tags.join(\" \"), weight: tuning.tags_weight },\n { name: \"status\", value: item.status, weight: tuning.status_weight },\n { name: \"body\", value: document.body, weight: tuning.body_weight },\n { name: \"comments\", value: (item.comments ?? []).map((entry) => entry.text).join(\" \"), weight: tuning.comments_weight },\n { name: \"notes\", value: (item.notes ?? []).map((entry) => entry.text).join(\" \"), weight: tuning.notes_weight },\n { name: \"learnings\", value: (item.learnings ?? []).map((entry) => entry.text).join(\" \"), weight: tuning.learnings_weight },\n { name: \"reminders\", value: buildReminderCorpus(item).join(\" \"), weight: tuning.reminders_weight },\n { name: \"events\", value: buildEventCorpus(item).join(\" \"), weight: tuning.events_weight },\n {\n name: \"dependencies\",\n value: (item.dependencies ?? []).map((entry) => `${entry.id} ${entry.kind}`).join(\" \"),\n weight: tuning.dependencies_weight,\n },\n { name: \"plan\", value: buildPlanFlatCorpus(item), weight: tuning.body_weight },\n { name: \"linked_content\", value: linkedCorpus, weight: tuning.linked_content_weight },\n ];\n\n let score = 0;\n const matched = new Set<string>();\n for (const token of tokens) {\n const exactTitleMatches = titleTokenCounts.get(token) ?? 0;\n if (exactTitleMatches > 0) {\n score += exactTitleMatches * tuning.title_exact_bonus;\n matched.add(\"title\");\n }\n for (const field of searchableFields) {\n const fieldValue = field.value.toLowerCase();\n const occurrences = countOccurrences(fieldValue, token);\n if (occurrences > 0) {\n score += occurrences * field.weight;\n matched.add(field.name);\n }\n }\n }\n\n const isLongPhraseQuery = tokens.length >= LONG_QUERY_TOKEN_THRESHOLD && normalizedQuery.includes(\" \");\n if (isLongPhraseQuery) {\n const normalizedTitle = normalizeSearchPhrase(item.title);\n if (normalizedTitle === normalizedQuery) {\n score += LONG_QUERY_TITLE_EXACT_BONUS;\n matched.add(\"title\");\n }\n for (const field of searchableFields) {\n const normalizedField = normalizeSearchPhrase(field.value);\n const phraseOccurrences = countOccurrences(normalizedField, normalizedQuery);\n if (phraseOccurrences > 0) {\n score += phraseOccurrences * field.weight * LONG_QUERY_PHRASE_MULTIPLIER;\n matched.add(field.name);\n }\n }\n }\n\n if (score <= 0) {\n return null;\n }\n\n return {\n item,\n score,\n matched_fields: [...matched].sort((a, b) => a.localeCompare(b)),\n };\n}\n\nfunction sortHits(items: SearchHit[], statusRegistry: RuntimeStatusRegistry): SearchHit[] {\n return [...items].sort((a, b) => {\n const byScore = b.score - a.score;\n if (byScore !== 0) return byScore;\n const aTerminal = isTerminal(a.item.status, statusRegistry);\n const bTerminal = isTerminal(b.item.status, statusRegistry);\n if (aTerminal !== bTerminal) {\n return aTerminal ? 1 : -1;\n }\n const byPriority = a.item.priority - b.item.priority;\n if (byPriority !== 0) return byPriority;\n const byUpdated = compareTimestampStrings(b.item.updated_at, a.item.updated_at);\n if (byUpdated !== 0) return byUpdated;\n return a.item.id.localeCompare(b.item.id);\n });\n}\n\nfunction buildHybridLexicalScore(\n document: ItemDocument,\n tokens: string[],\n normalizedQuery: string,\n includeLinked: boolean,\n linkedCorpusById: Map<string, string>,\n tuning: SearchTuning,\n): SearchHit | null {\n return scoreDocument(\n document,\n tokens,\n normalizedQuery,\n includeLinked ? linkedCorpusById.get(document.metadata.id) ?? \"\" : \"\",\n tuning,\n );\n}\n\nfunction normalizeScoreMap(scoreById: Map<string, number>): Map<string, number> {\n if (scoreById.size === 0) {\n return new Map();\n }\n const values = [...scoreById.values()];\n const minScore = Math.min(...values);\n const maxScore = Math.max(...values);\n if (maxScore === minScore) {\n return new Map([...scoreById.keys()].map((id) => [id, 1]));\n }\n const normalized = new Map<string, number>();\n for (const [id, score] of scoreById) {\n normalized.set(id, (score - minScore) / (maxScore - minScore));\n }\n return normalized;\n}\n\nexport function resolveSearchMaxResults(settings: unknown): number {\n const candidate = (settings as { search?: { max_results?: unknown } }).search?.max_results;\n if (typeof candidate === \"number\" && Number.isFinite(candidate) && candidate > 0) {\n return Math.floor(candidate);\n }\n return 50;\n}\n\nexport function resolveSearchScoreThreshold(settings: unknown): number {\n const candidate = (settings as { search?: { score_threshold?: unknown } }).search?.score_threshold;\n if (typeof candidate === \"number\" && Number.isFinite(candidate)) {\n return candidate;\n }\n return 0;\n}\n\nexport function resolveHybridSemanticWeight(settings: unknown): number {\n const candidate = (settings as { search?: { hybrid_semantic_weight?: unknown } }).search?.hybrid_semantic_weight;\n if (typeof candidate === \"number\" && Number.isFinite(candidate) && candidate >= 0 && candidate <= 1) {\n return candidate;\n }\n return 0.7;\n}\n\nexport function resolveSearchTuning(settings: unknown): SearchTuning {\n const defaults: SearchTuning = {\n title_exact_bonus: 10,\n title_weight: 8,\n description_weight: 5,\n tags_weight: 6,\n status_weight: 2,\n body_weight: 1,\n comments_weight: 1,\n notes_weight: 1,\n learnings_weight: 1,\n reminders_weight: 2,\n events_weight: 2,\n dependencies_weight: 3,\n linked_content_weight: 1,\n };\n const tuning = (settings as { search?: { tuning?: Partial<SearchTuning> } }).search?.tuning;\n if (!tuning) return defaults;\n\n const resolveWeight = (candidate: unknown, fallback: number) => {\n if (typeof candidate === \"number\" && Number.isFinite(candidate) && candidate >= 0) {\n return candidate;\n }\n return fallback;\n };\n\n return {\n title_exact_bonus: resolveWeight(tuning.title_exact_bonus, defaults.title_exact_bonus),\n title_weight: resolveWeight(tuning.title_weight, defaults.title_weight),\n description_weight: resolveWeight(tuning.description_weight, defaults.description_weight),\n tags_weight: resolveWeight(tuning.tags_weight, defaults.tags_weight),\n status_weight: resolveWeight(tuning.status_weight, defaults.status_weight),\n body_weight: resolveWeight(tuning.body_weight, defaults.body_weight),\n comments_weight: resolveWeight(tuning.comments_weight, defaults.comments_weight),\n notes_weight: resolveWeight(tuning.notes_weight, defaults.notes_weight),\n learnings_weight: resolveWeight(tuning.learnings_weight, defaults.learnings_weight),\n reminders_weight: resolveWeight(tuning.reminders_weight, defaults.reminders_weight),\n events_weight: resolveWeight(tuning.events_weight, defaults.events_weight),\n dependencies_weight: resolveWeight(tuning.dependencies_weight, defaults.dependencies_weight),\n linked_content_weight: resolveWeight(tuning.linked_content_weight, defaults.linked_content_weight),\n };\n}\n\nfunction emptySearchResult(\n query: string,\n mode: SearchMode,\n options: SearchOptions,\n includeLinked: boolean,\n scoreThreshold: number,\n hybridSemanticWeight: number,\n projection: SearchProjectionConfig,\n warnings: string[],\n): SearchResult {\n const projectionFields = projection.mode === \"full\" ? null : [...projection.fields];\n return {\n query: query.trim(),\n mode,\n items: [],\n count: 0,\n filters: {\n mode,\n type: options.type ?? null,\n tag: options.tag ?? null,\n priority: options.priority ?? null,\n deadline_before: options.deadlineBefore ?? null,\n deadline_after: options.deadlineAfter ?? null,\n include_linked: includeLinked,\n title_exact: options.titleExact === true,\n phrase_exact: options.phraseExact === true,\n score_threshold: scoreThreshold,\n hybrid_semantic_weight: mode === \"hybrid\" ? hybridSemanticWeight : null,\n limit: options.limit ?? null,\n projection: projection.mode,\n fields: projectionFields,\n },\n projection: {\n mode: projection.mode,\n fields: projectionFields,\n },\n now: nowIso(),\n ...(warnings.length > 0 ? { warnings } : {}),\n };\n}\n\nfunction requireSemanticDependencies(\n requestedMode: Exclude<SearchMode, \"keyword\">,\n providerResolution: EmbeddingProviderResolution,\n vectorResolution: VectorStoreResolution,\n hasExtensionVectorQuery: boolean,\n): { provider: EmbeddingProviderConfig; vectorStore: VectorStoreConfig | null } {\n if (!providerResolution.active) {\n throw new PmCliError(\n `Search mode '${requestedMode}' requires a configured embedding provider in settings.providers.openai or settings.providers.ollama`,\n EXIT_CODE.USAGE,\n );\n }\n if (!vectorResolution.active && !hasExtensionVectorQuery) {\n throw new PmCliError(\n `Search mode '${requestedMode}' requires a configured vector store in settings.vector_store.qdrant/settings.vector_store.lancedb or an extension adapter selected by settings.vector_store.adapter`,\n EXIT_CODE.USAGE,\n );\n }\n return {\n provider: providerResolution.active,\n vectorStore: vectorResolution.active ?? null,\n };\n}\n\nconst toOptionalNonEmptyString = toNonEmptyStringOrUndefined;\n\nfunction resolveExtensionSearchProvider(settings: PmSettings): { providerName: string; query: ExtensionSearchProviderQuery } | null {\n const registrations = getActiveExtensionRegistrations();\n const providerName = toOptionalNonEmptyString((settings.search as { provider?: unknown } | undefined)?.provider);\n const resolved = resolveRegisteredSearchProvider(registrations, providerName);\n if (!resolved) {\n return null;\n }\n const runtimeDefinition = resolved.runtime_definition ?? resolved.definition;\n const query = (runtimeDefinition as { query?: unknown }).query;\n if (typeof query !== \"function\") {\n return null;\n }\n const registeredName =\n toOptionalNonEmptyString((runtimeDefinition as { name?: unknown }).name) ??\n toOptionalNonEmptyString((resolved.definition as { name?: unknown }).name) ??\n providerName;\n if (!registeredName) {\n return null;\n }\n return {\n providerName: registeredName,\n query: query as ExtensionSearchProviderQuery,\n };\n}\n\nfunction resolveExtensionVectorAdapter(settings: PmSettings): ExtensionVectorAdapter | null {\n const registrations = getActiveExtensionRegistrations();\n const adapterName = toOptionalNonEmptyString((settings.vector_store as { adapter?: unknown } | undefined)?.adapter);\n const resolved = resolveRegisteredVectorStoreAdapter(registrations, adapterName);\n if (!resolved) {\n return null;\n }\n const runtimeDefinition = resolved.runtime_definition ?? resolved.definition;\n const query = (runtimeDefinition as { query?: unknown }).query;\n if (typeof query !== \"function\") {\n return null;\n }\n return {\n query: query as ExtensionVectorQuery,\n };\n}\n\nfunction normalizeExtensionProviderHits(\n providerName: string,\n raw: unknown,\n filteredById: Map<string, ItemDocument>,\n): SearchHit[] {\n const rawHits = Array.isArray(raw)\n ? raw\n : (raw as { hits?: unknown } | null | undefined)?.hits;\n if (!Array.isArray(rawHits)) {\n throw new PmCliError(\n `Extension search provider \"${providerName}\" must return an array of hits or { hits: [...] }`,\n EXIT_CODE.GENERIC_FAILURE,\n );\n }\n\n const seen = new Set<string>();\n const hits: SearchHit[] = [];\n for (const rawHit of rawHits) {\n if (typeof rawHit !== \"object\" || rawHit === null) {\n continue;\n }\n const id = toOptionalNonEmptyString((rawHit as { id?: unknown }).id);\n const score = (rawHit as { score?: unknown }).score;\n if (!id || typeof score !== \"number\" || !Number.isFinite(score) || seen.has(id)) {\n continue;\n }\n const document = filteredById.get(id);\n if (!document) {\n continue;\n }\n const matchedFieldsRaw = (rawHit as { matched_fields?: unknown }).matched_fields;\n const matchedFields =\n Array.isArray(matchedFieldsRaw) && matchedFieldsRaw.every((entry) => typeof entry === \"string\")\n ? [...new Set((matchedFieldsRaw as string[]).map((entry) => entry.trim()).filter((entry) => entry.length > 0))].sort((a, b) =>\n a.localeCompare(b),\n )\n : [`provider:${providerName}`];\n seen.add(id);\n hits.push({\n item: document.metadata,\n score,\n matched_fields: matchedFields,\n });\n }\n return hits;\n}\n\nfunction buildSemanticHits(\n vectorHits: VectorQueryHit[],\n filteredById: Map<string, ItemDocument>,\n): { semanticHits: SearchHit[]; semanticScores: Map<string, number> } {\n const semanticHits: SearchHit[] = [];\n const semanticScores = new Map<string, number>();\n for (const vectorHit of vectorHits) {\n if (semanticScores.has(vectorHit.id)) {\n continue;\n }\n const document = filteredById.get(vectorHit.id);\n if (!document) {\n continue;\n }\n semanticScores.set(vectorHit.id, vectorHit.score);\n semanticHits.push({\n item: document.metadata,\n score: vectorHit.score,\n matched_fields: [\"semantic\"],\n });\n }\n return {\n semanticHits,\n semanticScores,\n };\n}\n\nfunction combineHybridHits(\n filteredById: Map<string, ItemDocument>,\n semanticScores: Map<string, number>,\n keywordHits: SearchHit[],\n hybridSemanticWeight: number,\n): SearchHit[] {\n const keywordScores = new Map(keywordHits.map((entry) => [entry.item.id, entry.score]));\n const keywordMatches = new Map(keywordHits.map((entry) => [entry.item.id, entry.matched_fields]));\n const normalizedSemantic = normalizeScoreMap(semanticScores);\n const normalizedKeyword = normalizeScoreMap(keywordScores);\n const candidateIds = new Set<string>([...semanticScores.keys(), ...keywordScores.keys()]);\n const keywordWeight = 1 - hybridSemanticWeight;\n return [...candidateIds]\n .map((id) => {\n const document = filteredById.get(id)!;\n const semanticScore = normalizedSemantic.get(id) ?? 0;\n const keywordScore = normalizedKeyword.get(id) ?? 0;\n const combinedScore = (semanticScore * hybridSemanticWeight) + (keywordScore * keywordWeight);\n if (combinedScore <= 0) {\n return null;\n }\n const matchedFields = new Set<string>();\n if (semanticScores.has(id)) {\n matchedFields.add(\"semantic\");\n }\n for (const field of keywordMatches.get(id) ?? []) {\n matchedFields.add(field);\n }\n return {\n item: document.metadata,\n score: combinedScore,\n matched_fields: [...matchedFields].sort((a, b) => a.localeCompare(b)),\n };\n })\n .filter((entry): entry is SearchHit => entry !== null);\n}\n\ninterface SemanticQueryContext {\n requestedMode: Exclude<SearchMode, \"keyword\">;\n query: string;\n filteredDocuments: ItemDocument[];\n keywordHits: SearchHit[];\n hybridSemanticWeight: number;\n limit: number | undefined;\n maxResults: number;\n provider: EmbeddingProviderConfig;\n vectorStore: VectorStoreConfig | null;\n extensionVectorAdapter: ExtensionVectorAdapter | null;\n settings: PmSettings;\n embeddingTimeoutMs?: number;\n vectorQueryTimeoutMs?: number;\n}\n\nasync function computeSemanticOrHybridHits(context: SemanticQueryContext): Promise<SearchHit[]> {\n const semanticLimit = context.limit ?? context.maxResults;\n const embeddingOptions = context.embeddingTimeoutMs !== undefined ? { timeout_ms: context.embeddingTimeoutMs } : {};\n const vectorQueryOptions = context.vectorQueryTimeoutMs !== undefined ? { timeout_ms: context.vectorQueryTimeoutMs } : {};\n const queryVectors = await executeEmbeddingRequest(context.provider, context.query.trim(), embeddingOptions);\n const semanticVector = queryVectors[0];\n let vectorHits: VectorQueryHit[];\n if (context.extensionVectorAdapter?.query) {\n try {\n vectorHits = await Promise.resolve(\n context.extensionVectorAdapter.query({\n vector: semanticVector,\n limit: semanticLimit,\n settings: context.settings,\n }),\n );\n } catch (error: unknown) {\n if (!context.vectorStore) {\n throw new PmCliError(\n `Extension vector adapter query failed and no built-in fallback store is configured (${error instanceof Error ? error.message : String(error)})`,\n EXIT_CODE.GENERIC_FAILURE,\n );\n }\n vectorHits = await executeVectorQuery(context.vectorStore, semanticVector, semanticLimit, vectorQueryOptions);\n }\n } else if (context.vectorStore) {\n vectorHits = await executeVectorQuery(context.vectorStore, semanticVector, semanticLimit, vectorQueryOptions);\n } else {\n throw new PmCliError(\n \"Semantic search requires either a configured vector store or an extension vector adapter query handler\",\n EXIT_CODE.USAGE,\n );\n }\n const filteredById = new Map(context.filteredDocuments.map((document) => [document.metadata.id, document]));\n const { semanticHits, semanticScores } = buildSemanticHits(vectorHits, filteredById);\n if (context.requestedMode === \"semantic\") {\n return semanticHits;\n }\n return combineHybridHits(filteredById, semanticScores, context.keywordHits, context.hybridSemanticWeight);\n}\n\nasync function loadDocuments(\n pmRoot: string,\n itemFormat: ItemFormat,\n typeToFolder: Record<string, string>,\n schema: PmSettings[\"schema\"],\n): Promise<{ documents: ItemDocument[]; warnings: string[] }> {\n const readDocumentBody = async (\n metadata: ItemFrontMatter,\n preferredPath: string,\n preferredFormat: ItemFormat,\n ): Promise<string> => {\n const tryRead = async (targetPath: string, format: ItemFormat): Promise<string> => {\n await runActiveOnReadHooks({ path: targetPath, scope: \"project\" });\n const raw = await fs.readFile(targetPath, \"utf8\");\n const parsed = parseItemDocument(raw, {\n format,\n schema,\n onWarning: (warning) => listWarnings.push(warning),\n });\n return parsed.body;\n };\n\n try {\n return await tryRead(preferredPath, preferredFormat);\n } catch {\n const alternateFormat: ItemFormat = preferredFormat === \"toon\" ? \"json_markdown\" : \"toon\";\n const alternatePath = getItemPath(pmRoot, metadata.type as ItemType, metadata.id, alternateFormat, typeToFolder);\n try {\n return await tryRead(alternatePath, alternateFormat);\n } catch {\n listWarnings.push(`item_list_item_read_failed:${path.relative(pmRoot, alternatePath)}`);\n return \"\";\n }\n }\n };\n\n const listWarnings: string[] = [];\n const cachedDocuments = await listAllDocumentCandidatesCached(pmRoot, itemFormat, typeToFolder, listWarnings, schema);\n const documents: ItemDocument[] = [];\n if (cachedDocuments.length === 0) {\n const frontMatterDocuments = await listAllFrontMatter(pmRoot, itemFormat, typeToFolder, listWarnings, schema);\n for (const metadata of frontMatterDocuments) {\n const preferredPath = getItemPath(pmRoot, metadata.type as ItemType, metadata.id, itemFormat, typeToFolder);\n const body = await readDocumentBody(metadata, preferredPath, itemFormat);\n documents.push({ metadata, body });\n }\n return {\n documents,\n warnings: [...new Set(listWarnings)].sort((left, right) => left.localeCompare(right)),\n };\n }\n\n for (const cachedDocument of cachedDocuments) {\n if (typeof cachedDocument.body === \"string\") {\n documents.push({\n metadata: cachedDocument.metadata,\n body: cachedDocument.body,\n });\n continue;\n }\n const body = await readDocumentBody(cachedDocument.metadata, cachedDocument.item_path, cachedDocument.item_format);\n documents.push({\n metadata: cachedDocument.metadata,\n body,\n });\n }\n return {\n documents,\n warnings: [...new Set(listWarnings)].sort((left, right) => left.localeCompare(right)),\n };\n}\n\nfunction readSearchFieldValue(hit: SearchHit, field: string): unknown {\n const normalized = field.trim();\n if (normalized.length === 0) {\n return null;\n }\n if (normalized === \"score\") {\n return hit.score;\n }\n if (normalized === \"matched_fields\") {\n return hit.matched_fields;\n }\n if (normalized.startsWith(\"item.\")) {\n const itemKey = normalized.slice(\"item.\".length);\n if (itemKey.length === 0) {\n return null;\n }\n const itemRecord = hit.item as unknown as Record<string, unknown>;\n return itemRecord[itemKey] ?? null;\n }\n const hitRecord = hit as unknown as Record<string, unknown>;\n const itemRecord = hit.item as unknown as Record<string, unknown>;\n if (Object.prototype.hasOwnProperty.call(itemRecord, normalized)) {\n return itemRecord[normalized] ?? null;\n }\n if (Object.prototype.hasOwnProperty.call(hitRecord, normalized)) {\n return hitRecord[normalized] ?? null;\n }\n return null;\n}\n\nfunction projectSearchHits(hits: SearchHit[], projection: SearchProjectionConfig): SearchResultItem[] {\n if (projection.mode === \"full\") {\n return hits;\n }\n return hits.map((hit) => {\n const projected: Record<string, unknown> = {};\n for (const field of projection.fields) {\n projected[field] = readSearchFieldValue(hit, field);\n }\n return projected;\n });\n}\n\nexport async function runSearch(query: string, options: SearchOptions, global: GlobalOptions): Promise<SearchResult> {\n const includeLinked = parseIncludeLinked(options.includeLinked);\n const titleExact = parseTitleExact(options.titleExact);\n const phraseExact = parsePhraseExact(options.phraseExact);\n const tokens = parseTokens(query);\n const normalizedQuery = normalizeSearchPhrase(query);\n const limit = parseLimit(options.limit);\n const projection = parseProjectionConfig(options);\n const modeWasExplicit = typeof options.mode === \"string\" && options.mode.trim().length > 0;\n const pmRoot = resolvePmRoot(process.cwd(), global.path);\n if (!(await pathExists(getSettingsPath(pmRoot)))) {\n throw new PmCliError(`Tracker is not initialized at ${pmRoot}. Run pm init first.`, EXIT_CODE.NOT_FOUND);\n }\n const storedSettings = await readSettings(pmRoot);\n const runtimeDefaultsResolution = resolveSettingsWithSemanticRuntimeDefaults(storedSettings);\n const settings = runtimeDefaultsResolution.settings;\n const statusRegistry = resolveRuntimeStatusRegistry(settings.schema);\n const runtimeFieldRegistry = resolveRuntimeFieldRegistry(settings.schema);\n const runtimeFieldFilters = collectRuntimeFilterValues(options as Record<string, unknown>, runtimeFieldRegistry, \"search\");\n const typeRegistry = resolveItemTypeRegistry(settings, getActiveExtensionRegistrations());\n const maxResults = resolveSearchMaxResults(settings);\n const scoreThreshold = resolveSearchScoreThreshold(settings);\n const hybridSemanticWeight = resolveHybridSemanticWeight(settings);\n const tuning = resolveSearchTuning(settings);\n const providerResolution = resolveEmbeddingProviders(settings);\n const vectorResolution = resolveVectorStores(settings);\n const extensionSearchProvider = resolveExtensionSearchProvider(settings);\n const extensionVectorAdapter = resolveExtensionVectorAdapter(settings);\n let effectiveMode = parseMode(options.mode, {\n hasProvider: providerResolution.active !== null || extensionSearchProvider !== null,\n hasVectorStore: vectorResolution.active !== null || extensionVectorAdapter !== null,\n });\n const loadedDocuments = await loadDocuments(\n pmRoot,\n settings.item_format ?? \"toon\",\n typeRegistry.type_to_folder,\n settings.schema,\n );\n const warnings = loadedDocuments.warnings;\n const allDocuments = loadedDocuments.documents;\n const metadataFilteredDocuments = applyFilters(allDocuments, options, typeRegistry, runtimeFieldFilters);\n const filteredDocuments = applyExactQueryFilters(metadataFilteredDocuments, normalizedQuery, {\n titleExact,\n phraseExact,\n });\n if (effectiveMode === \"keyword\" && (filteredDocuments.length === 0 || limit === 0)) {\n return emptySearchResult(query, effectiveMode, options, includeLinked, scoreThreshold, hybridSemanticWeight, projection, warnings);\n }\n\n const projectRoot = process.cwd();\n const globalRoot = resolveGlobalPmRoot(projectRoot);\n const linkedCorpusById = new Map<string, string>();\n if (includeLinked && (effectiveMode === \"keyword\" || effectiveMode === \"hybrid\")) {\n const linkedCorpusRoots = await resolveLinkedCorpusRoots(projectRoot, globalRoot);\n const linkedCorpusEntries = await Promise.all(\n filteredDocuments.map(async (document) => [document.metadata.id, await loadLinkedCorpus(document, linkedCorpusRoots)] as const),\n );\n for (const [id, corpus] of linkedCorpusEntries) {\n linkedCorpusById.set(id, corpus);\n }\n }\n\n const keywordHits = filteredDocuments\n .map((document) => buildHybridLexicalScore(document, tokens, normalizedQuery, effectiveMode !== \"semantic\", linkedCorpusById, tuning))\n .filter((entry): entry is SearchHit => entry !== null);\n\n let hits = keywordHits;\n if (effectiveMode !== \"keyword\") {\n try {\n if (!extensionSearchProvider) {\n requireSemanticDependencies(effectiveMode, providerResolution, vectorResolution, extensionVectorAdapter !== null);\n }\n if (filteredDocuments.length === 0 || limit === 0) {\n return emptySearchResult(\n query,\n effectiveMode,\n options,\n includeLinked,\n scoreThreshold,\n hybridSemanticWeight,\n projection,\n warnings,\n );\n }\n const filteredById = new Map(filteredDocuments.map((document) => [document.metadata.id, document]));\n const canUseBuiltInSemantic =\n providerResolution.active !== null && (vectorResolution.active !== null || extensionVectorAdapter !== null);\n if (extensionSearchProvider) {\n try {\n const providerResponse = await Promise.resolve(\n extensionSearchProvider.query({\n query,\n mode: effectiveMode,\n tokens,\n options,\n settings,\n documents: filteredDocuments,\n }),\n );\n hits = normalizeExtensionProviderHits(extensionSearchProvider.providerName, providerResponse, filteredById);\n } catch (error: unknown) {\n if (!canUseBuiltInSemantic) {\n throw new PmCliError(\n `Extension search provider \"${extensionSearchProvider.providerName}\" failed: ${error instanceof Error ? error.message : String(error)}`,\n EXIT_CODE.GENERIC_FAILURE,\n );\n }\n }\n }\n if (hits === keywordHits) {\n const implicitHybridMode = !modeWasExplicit && effectiveMode === \"hybrid\";\n const { provider, vectorStore } = requireSemanticDependencies(\n effectiveMode,\n providerResolution,\n vectorResolution,\n extensionVectorAdapter !== null,\n );\n hits = await computeSemanticOrHybridHits({\n requestedMode: effectiveMode,\n query,\n filteredDocuments,\n keywordHits,\n hybridSemanticWeight,\n limit,\n maxResults,\n provider,\n vectorStore,\n extensionVectorAdapter,\n settings,\n ...(implicitHybridMode\n ? {\n embeddingTimeoutMs: IMPLICIT_HYBRID_EMBEDDING_TIMEOUT_MS,\n vectorQueryTimeoutMs: IMPLICIT_HYBRID_VECTOR_TIMEOUT_MS,\n }\n : {}),\n });\n }\n } catch (error: unknown) {\n const canFallbackToKeyword = !modeWasExplicit && effectiveMode === \"hybrid\";\n if (!canFallbackToKeyword) {\n throw error;\n }\n effectiveMode = \"keyword\";\n hits = keywordHits;\n warnings.push(buildImplicitSemanticFallbackWarning(error));\n }\n }\n\n const thresholded = hits.filter((entry) => entry.score >= scoreThreshold);\n const sorted = sortHits(thresholded, statusRegistry);\n const resolvedLimit = effectiveMode === \"keyword\" ? limit : (limit ?? maxResults);\n const limited = resolvedLimit === undefined ? sorted : sorted.slice(0, resolvedLimit);\n const projectedItems = projectSearchHits(limited, projection);\n const projectionFields = projection.mode === \"full\" ? null : [...projection.fields];\n\n return {\n query: query.trim(),\n mode: effectiveMode,\n items: projectedItems,\n count: projectedItems.length,\n filters: {\n mode: effectiveMode,\n type: options.type ?? null,\n tag: options.tag ?? null,\n priority: options.priority ?? null,\n deadline_before: options.deadlineBefore ?? null,\n deadline_after: options.deadlineAfter ?? null,\n include_linked: includeLinked,\n title_exact: titleExact,\n phrase_exact: phraseExact,\n score_threshold: scoreThreshold,\n hybrid_semantic_weight: effectiveMode === \"hybrid\" ? hybridSemanticWeight : null,\n limit: options.limit ?? null,\n runtime_filters: runtimeFieldFilters,\n projection: projection.mode,\n fields: projectionFields,\n },\n projection: {\n mode: projection.mode,\n fields: projectionFields,\n },\n now: nowIso(),\n ...(warnings.length > 0 ? { warnings } : {}),\n };\n}\n"],"names":[],"mappings":"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","debugId":"5d7fe7a0-57cd-5bd9-ab50-36f6cc73ca5c"}
1
+ {"version":3,"file":"search.js","sources":["cli/commands/search.ts"],"sourceRoot":"/","sourcesContent":["import fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { toNonEmptyStringOrUndefined } from \"../../core/shared/primitives.js\";\nimport { isPathWithinDirectory } from \"../../core/fs/path-utils.js\";\nimport { getActiveExtensionRegistrations, runActiveOnReadHooks } from \"../../core/extensions/index.js\";\nimport {\n resolveRegisteredSearchProvider,\n resolveRegisteredVectorStoreAdapter,\n} from \"../../core/extensions/runtime-registrations.js\";\nimport { resolveItemTypeRegistry, type ItemTypeRegistry } from \"../../core/item/type-registry.js\";\nimport { parseLimit, parsePriority, parseType } from \"../shared-parsers.js\";\nimport {\n executeEmbeddingRequest,\n resolveEmbeddingProviders,\n type EmbeddingProviderConfig,\n type EmbeddingProviderResolution,\n} from \"../../core/search/providers.js\";\nimport { resolveSettingsWithSemanticRuntimeDefaults } from \"../../core/search/semantic-defaults.js\";\nimport {\n executeVectorQuery,\n resolveVectorStores,\n type VectorQueryHit,\n type VectorStoreConfig,\n type VectorStoreResolution,\n} from \"../../core/search/vector-stores.js\";\nimport { buildEventCorpus, buildPlanFlatCorpus, buildReminderCorpus } from \"../../core/search/corpus.js\";\nimport { pathExists } from \"../../core/fs/fs-utils.js\";\nimport { parseItemDocument } from \"../../core/item/item-format.js\";\nimport { isTerminalStatus } from \"../../core/item/status.js\";\nimport { collectRuntimeFilterValues, matchesRuntimeFilters } from \"../../core/schema/runtime-field-filters.js\";\nimport {\n resolveRuntimeFieldRegistry,\n resolveRuntimeStatusRegistry,\n type RuntimeFieldRegistry,\n type RuntimeStatusRegistry,\n} from \"../../core/schema/runtime-schema.js\";\nimport { EXIT_CODE } from \"../../core/shared/constants.js\";\nimport type { GlobalOptions } from \"../../core/shared/command-types.js\";\nimport { PmCliError } from \"../../core/shared/errors.js\";\nimport { tokenizeAlphaNumeric } from \"../../core/shared/text-normalization.js\";\nimport { compareTimestampStrings, nowIso, resolveIsoOrRelative } from \"../../core/shared/time.js\";\nimport { listAllDocumentCandidatesCached } from \"../../core/store/front-matter-cache.js\";\nimport { listAllFrontMatter } from \"../../core/store/item-store.js\";\nimport { getItemPath, getSettingsPath, resolveGlobalPmRoot, resolvePmRoot } from \"../../core/store/paths.js\";\nimport { readSettings } from \"../../core/store/settings.js\";\nimport type { ItemDocument, ItemFormat, ItemFrontMatter, ItemStatus, ItemType, PmSettings } from \"../../types/index.js\";\n\nexport interface SearchOptions {\n mode?: string;\n includeLinked?: boolean;\n titleExact?: boolean;\n phraseExact?: boolean;\n type?: string;\n tag?: string;\n priority?: string;\n deadlineBefore?: string;\n deadlineAfter?: string;\n limit?: string;\n compact?: boolean;\n full?: boolean;\n fields?: string;\n [key: string]: unknown;\n}\n\ntype SearchMode = \"keyword\" | \"semantic\" | \"hybrid\";\ntype SearchProjectionMode = \"compact\" | \"full\" | \"fields\";\n\ninterface SearchProjectionConfig {\n mode: SearchProjectionMode;\n fields: string[];\n}\n\nconst DEFAULT_COMPACT_SEARCH_FIELDS = [\n \"id\",\n \"title\",\n \"status\",\n \"type\",\n \"priority\",\n \"updated_at\",\n \"score\",\n \"matched_fields\",\n] as const;\n\nconst SEARCH_HIT_FIELD_KEYS = new Set([\"score\", \"matched_fields\"]);\nconst SEARCH_ITEM_FIELD_KEYS = new Set([\n \"id\",\n \"title\",\n \"description\",\n \"type\",\n \"status\",\n \"priority\",\n \"tags\",\n \"created_at\",\n \"updated_at\",\n \"deadline\",\n \"assignee\",\n \"author\",\n \"estimated_minutes\",\n \"acceptance_criteria\",\n \"dependencies\",\n \"comments\",\n \"notes\",\n \"learnings\",\n \"reminders\",\n \"events\",\n \"files\",\n \"tests\",\n \"docs\",\n \"close_reason\",\n \"parent\",\n \"reviewer\",\n \"risk\",\n \"confidence\",\n \"sprint\",\n \"release\",\n \"blocked_by\",\n \"blocked_reason\",\n \"reporter\",\n \"severity\",\n \"environment\",\n \"repro_steps\",\n \"resolution\",\n \"expected_result\",\n \"actual_result\",\n \"affected_version\",\n \"fixed_version\",\n \"component\",\n \"regression\",\n \"customer_impact\",\n \"definition_of_ready\",\n \"order\",\n \"rank\",\n \"goal\",\n \"objective\",\n \"value\",\n \"impact\",\n \"outcome\",\n \"why_now\",\n \"plan\",\n]);\n\nconst LONG_QUERY_TOKEN_THRESHOLD = 2;\nconst LONG_QUERY_TITLE_EXACT_BONUS = 120;\nconst LONG_QUERY_PHRASE_MULTIPLIER = 6;\nconst IMPLICIT_HYBRID_EMBEDDING_TIMEOUT_MS = 8_000;\nconst IMPLICIT_HYBRID_VECTOR_TIMEOUT_MS = 8_000;\n\nexport interface SearchHit {\n item: ItemFrontMatter;\n score: number;\n matched_fields: string[];\n}\n\nexport type SearchResultItem = SearchHit | Record<string, unknown>;\n\nexport interface SearchResult {\n query: string;\n mode: SearchMode;\n items: SearchResultItem[];\n count: number;\n filters: Record<string, unknown>;\n projection: {\n mode: SearchProjectionMode;\n fields: string[] | null;\n };\n now: string;\n warnings?: string[];\n}\n\ninterface ExtensionSearchProviderContext {\n query: string;\n mode: SearchMode;\n tokens: string[];\n options: SearchOptions;\n settings: PmSettings;\n documents: ItemDocument[];\n}\n\ninterface ExtensionSearchProviderHit {\n id: string;\n score: number;\n matched_fields?: string[];\n}\n\ntype ExtensionSearchProviderQuery = (\n context: ExtensionSearchProviderContext,\n) => Promise<ExtensionSearchProviderHit[] | { hits?: ExtensionSearchProviderHit[] }> | ExtensionSearchProviderHit[] | { hits?: ExtensionSearchProviderHit[] };\n\ntype ExtensionVectorQuery = (\n context: {\n vector: number[];\n limit: number;\n settings: PmSettings;\n },\n) => Promise<VectorQueryHit[]> | VectorQueryHit[];\n\ntype ExtensionVectorAdapter = {\n query?: ExtensionVectorQuery;\n};\n\n\n\ninterface SearchModeContext {\n hasProvider: boolean;\n hasVectorStore: boolean;\n}\n\ntype ImplicitSemanticFallbackReason = \"timeout\" | \"connection\" | \"error\";\n\nfunction classifyImplicitSemanticFallbackReason(error: unknown): ImplicitSemanticFallbackReason {\n const message = (error instanceof Error ? error.message : String(error)).toLowerCase();\n if (message.includes(\"timed out\") || message.includes(\"timeout\")) {\n return \"timeout\";\n }\n if (\n message.includes(\"econnrefused\") ||\n message.includes(\"connection refused\") ||\n message.includes(\"connect \") ||\n message.includes(\"enotfound\") ||\n message.includes(\"eai_again\")\n ) {\n return \"connection\";\n }\n return \"error\";\n}\n\nfunction buildImplicitSemanticFallbackWarning(error: unknown): string {\n const reason = classifyImplicitSemanticFallbackReason(error);\n if (reason === \"timeout\") {\n return \"search_implicit_semantic_fallback:timeout:using_keyword_mode\";\n }\n if (reason === \"connection\") {\n return \"search_implicit_semantic_fallback:connection:using_keyword_mode\";\n }\n return \"search_implicit_semantic_fallback:error:using_keyword_mode\";\n}\n\n// Explicit --semantic/--hybrid searches must never hard-fail an agent when the\n// embedding/vector backend is unreachable or unconfigured: degrade to keyword\n// search and surface a machine-readable warning instead of an unknown_error.\nfunction buildExplicitSemanticFallbackWarning(requestedMode: SearchMode, error: unknown): string {\n const reason = classifyImplicitSemanticFallbackReason(error);\n return `search_${requestedMode}_fallback:${reason}:using_keyword_mode`;\n}\n\nfunction parseMode(raw: string | undefined, _context: SearchModeContext): SearchMode {\n if (raw === undefined) {\n return \"keyword\";\n }\n const normalized = raw.trim().toLowerCase();\n if (normalized !== \"keyword\" && normalized !== \"semantic\" && normalized !== \"hybrid\") {\n throw new PmCliError(\"Search mode must be one of keyword|semantic|hybrid\", EXIT_CODE.USAGE);\n }\n return normalized;\n}\n\nfunction parseIncludeLinked(raw: boolean | undefined): boolean {\n return raw === true;\n}\n\nfunction parseTitleExact(raw: boolean | undefined): boolean {\n return raw === true;\n}\n\nfunction parsePhraseExact(raw: boolean | undefined): boolean {\n return raw === true;\n}\n\nfunction normalizeSearchPhrase(value: string): string {\n return value\n .toLowerCase()\n .replace(/\\s+/g, \" \")\n .trim();\n}\n\nfunction parseDeadline(raw: string | undefined, fieldLabel: string): string | undefined {\n if (raw === undefined) return undefined;\n return resolveIsoOrRelative(raw, new Date(), fieldLabel);\n}\n\nfunction parseFieldSelectors(raw: string | undefined): string[] | undefined {\n if (raw === undefined) {\n return undefined;\n }\n const selectors = raw\n .split(\",\")\n .map((entry) => entry.trim())\n .filter((entry) => entry.length > 0);\n if (selectors.length === 0) {\n throw new PmCliError(\"Search --fields requires a comma-separated list of field names\", EXIT_CODE.USAGE);\n }\n return [...new Set(selectors)];\n}\n\nfunction parseProjectionConfig(options: SearchOptions): SearchProjectionConfig {\n const compactRequested = options.compact === true;\n const fullRequested = options.full === true;\n const fieldSelectors = parseFieldSelectors(options.fields);\n const enabledModes = Number(compactRequested) + Number(fullRequested) + Number(fieldSelectors !== undefined);\n if (enabledModes > 1) {\n throw new PmCliError(\n \"Search projection options are mutually exclusive. Use one of --compact, --full, or --fields.\",\n EXIT_CODE.USAGE,\n );\n }\n if (compactRequested) {\n return {\n mode: \"compact\",\n fields: [...DEFAULT_COMPACT_SEARCH_FIELDS],\n };\n }\n if (fullRequested) {\n return {\n mode: \"full\",\n fields: [],\n };\n }\n if (fieldSelectors) {\n return {\n mode: \"fields\",\n fields: fieldSelectors,\n };\n }\n return {\n mode: \"full\",\n fields: [],\n };\n}\n\nfunction validateSearchProjectionFields(projection: SearchProjectionConfig, runtimeFieldRegistry: RuntimeFieldRegistry): void {\n if (projection.mode !== \"fields\") {\n return;\n }\n const runtimeKeys = new Set(runtimeFieldRegistry.definitions.flatMap((field) => [field.key, field.metadata_key]));\n const unknown = projection.fields.filter((field) => {\n const normalized = field.trim();\n const itemKey = normalized.startsWith(\"item.\") ? normalized.slice(\"item.\".length) : normalized;\n return !SEARCH_HIT_FIELD_KEYS.has(normalized) && !SEARCH_ITEM_FIELD_KEYS.has(itemKey) && !runtimeKeys.has(itemKey);\n });\n if (unknown.length > 0) {\n throw new PmCliError(`Unknown search --fields value(s): ${unknown.join(\", \")}`, EXIT_CODE.USAGE, {\n examples: [\n \"pm search <query> --fields id,title,status,score\",\n \"pm search <query> --fields id,title,item.description,matched_fields\",\n ],\n nextSteps: [\"Use item.<field> for explicit item metadata fields, or run pm search --help for projection examples.\"],\n });\n }\n}\n\nfunction parseTokens(query: string): string[] {\n const normalized = normalizeSearchPhrase(query);\n if (!normalized) {\n throw new PmCliError(\"Search query must not be empty\", EXIT_CODE.USAGE);\n }\n return normalized.split(/\\s+/).filter(Boolean);\n}\n\nfunction stringArray(value: unknown): string[] {\n return Array.isArray(value) ? value.filter((entry): entry is string => typeof entry === \"string\") : [];\n}\n\nfunction textEntries(value: unknown): Array<{ text: string }> {\n return Array.isArray(value)\n ? value.filter((entry): entry is { text: string } =>\n typeof entry === \"object\" && entry !== null && typeof (entry as { text?: unknown }).text === \"string\",\n )\n : [];\n}\n\nfunction dependencyEntries(value: unknown): Array<{ id: string; kind: string }> {\n return Array.isArray(value)\n ? value.filter((entry): entry is { id: string; kind: string } =>\n typeof entry === \"object\" &&\n entry !== null &&\n typeof (entry as { id?: unknown }).id === \"string\" &&\n typeof (entry as { kind?: unknown }).kind === \"string\",\n )\n : [];\n}\n\nfunction collectExactPhraseFields(document: ItemDocument): string[] {\n const item = document.metadata;\n return [\n item.title,\n item.description,\n item.status,\n stringArray(item.tags).join(\" \"),\n document.body,\n textEntries(item.comments).map((entry) => entry.text).join(\" \"),\n textEntries(item.notes).map((entry) => entry.text).join(\" \"),\n textEntries(item.learnings).map((entry) => entry.text).join(\" \"),\n buildReminderCorpus(item).join(\" \"),\n buildEventCorpus(item).join(\" \"),\n dependencyEntries(item.dependencies).map((entry) => `${entry.id} ${entry.kind}`).join(\" \"),\n buildPlanFlatCorpus(item),\n ];\n}\n\nfunction documentContainsExactPhrase(document: ItemDocument, normalizedQuery: string): boolean {\n return collectExactPhraseFields(document).some((fieldValue) =>\n normalizeSearchPhrase(fieldValue).includes(normalizedQuery),\n );\n}\n\nfunction applyExactQueryFilters(\n items: ItemDocument[],\n normalizedQuery: string,\n options: { titleExact: boolean; phraseExact: boolean },\n): ItemDocument[] {\n if (!options.titleExact && !options.phraseExact) {\n return items;\n }\n return items.filter((document) => {\n if (options.titleExact && normalizeSearchPhrase(document.metadata.title) !== normalizedQuery) {\n return false;\n }\n if (options.phraseExact && !documentContainsExactPhrase(document, normalizedQuery)) {\n return false;\n }\n return true;\n });\n}\n\nfunction applyFilters(\n items: ItemDocument[],\n options: SearchOptions,\n typeRegistry: ItemTypeRegistry,\n runtimeFieldFilters: Record<string, unknown>,\n): ItemDocument[] {\n const typeFilter = parseType(options.type, typeRegistry);\n const tagFilter = options.tag?.trim().toLowerCase();\n const priorityFilter = parsePriority(options.priority);\n const deadlineBefore = parseDeadline(options.deadlineBefore, \"deadline-before\");\n const deadlineAfter = parseDeadline(options.deadlineAfter, \"deadline-after\");\n\n return items.filter((document) => {\n const item = document.metadata;\n if (typeFilter && item.type !== typeFilter) return false;\n if (tagFilter && !stringArray(item.tags).includes(tagFilter)) return false;\n if (priorityFilter !== undefined && item.priority !== priorityFilter) return false;\n if (deadlineBefore && (!item.deadline || compareTimestampStrings(item.deadline, deadlineBefore) > 0)) return false;\n if (deadlineAfter && (!item.deadline || compareTimestampStrings(item.deadline, deadlineAfter) < 0)) return false;\n if (!matchesRuntimeFilters(item as Record<string, unknown>, runtimeFieldFilters)) return false;\n return true;\n });\n}\n\nfunction countOccurrences(haystack: string, needle: string): number {\n let count = 0;\n let index = 0;\n while (true) {\n const foundAt = haystack.indexOf(needle, index);\n if (foundAt < 0) {\n return count;\n }\n count += 1;\n index = foundAt + needle.length;\n }\n}\n\nfunction tokenizeForExactTokenMatch(value: string): string[] {\n return tokenizeAlphaNumeric(value);\n}\n\nfunction collectLinkedPaths(item: ItemFrontMatter): Array<{ scope: \"project\" | \"global\"; path: string }> {\n const fromFiles = (item.files ?? []).map((entry) => ({\n scope: entry.scope,\n path: entry.path.trim(),\n }));\n const fromDocs = (item.docs ?? []).map((entry) => ({\n scope: entry.scope,\n path: entry.path.trim(),\n }));\n const fromTests = (item.tests ?? [])\n .filter((entry): entry is typeof entry & { path: string } => typeof entry.path === \"string\" && entry.path.trim().length > 0)\n .map((entry) => ({\n scope: entry.scope,\n path: entry.path.trim(),\n }));\n const sorted = [...fromFiles, ...fromDocs, ...fromTests]\n .filter((entry) => entry.path.length > 0)\n .sort((a, b) => a.scope.localeCompare(b.scope) || a.path.localeCompare(b.path));\n const deduped = new Map<string, { scope: \"project\" | \"global\"; path: string }>();\n for (const entry of sorted) {\n deduped.set(`${entry.scope}:${entry.path}`, entry);\n }\n return [...deduped.values()];\n}\n\ninterface ContainmentRoot {\n resolved: string;\n realpath: string;\n}\n\ninterface LinkedCorpusRoots {\n projectContainmentRoot: ContainmentRoot | null;\n globalContainmentRoot: ContainmentRoot | null;\n}\n\nasync function resolveContainmentRoot(root: string): Promise<ContainmentRoot | null> {\n const resolved = path.resolve(root);\n try {\n const realpathRoot = await fs.realpath(resolved);\n return {\n resolved,\n realpath: realpathRoot,\n };\n } catch {\n return null;\n }\n}\n\nasync function resolveLinkedCorpusRoots(projectRoot: string, globalRoot: string): Promise<LinkedCorpusRoots> {\n const [projectContainmentRoot, globalContainmentRoot] = await Promise.all([\n resolveContainmentRoot(projectRoot),\n resolveContainmentRoot(globalRoot),\n ]);\n return {\n projectContainmentRoot,\n globalContainmentRoot,\n };\n}\n\nasync function loadLinkedCorpus(\n document: ItemDocument,\n roots: LinkedCorpusRoots,\n): Promise<string> {\n const linkedPaths = collectLinkedPaths(document.metadata);\n const chunks: string[] = [];\n for (const linkedPath of linkedPaths) {\n const containmentRoot = linkedPath.scope === \"global\" ? roots.globalContainmentRoot : roots.projectContainmentRoot;\n if (!containmentRoot) {\n continue;\n }\n const resolved = path.resolve(containmentRoot.resolved, linkedPath.path);\n if (!isPathWithinDirectory(containmentRoot.resolved, resolved)) {\n continue;\n }\n let linkedRealpath: string;\n try {\n linkedRealpath = await fs.realpath(resolved);\n } catch {\n continue;\n }\n if (!isPathWithinDirectory(containmentRoot.realpath, linkedRealpath)) {\n continue;\n }\n try {\n await runActiveOnReadHooks({\n path: resolved,\n scope: linkedPath.scope,\n });\n chunks.push(await fs.readFile(resolved, \"utf8\"));\n } catch {\n // Best-effort linked-content indexing: unreadable paths are ignored.\n }\n }\n return chunks.join(\"\\n\");\n}\n\nexport interface SearchTuning {\n title_exact_bonus: number;\n title_weight: number;\n description_weight: number;\n tags_weight: number;\n status_weight: number;\n body_weight: number;\n comments_weight: number;\n notes_weight: number;\n learnings_weight: number;\n reminders_weight: number;\n events_weight: number;\n dependencies_weight: number;\n linked_content_weight: number;\n}\n\nfunction scoreDocument(\n document: ItemDocument,\n tokens: string[],\n normalizedQuery: string,\n linkedCorpus: string,\n tuning: SearchTuning,\n): SearchHit | null {\n const item = document.metadata;\n const titleTokenCounts = new Map<string, number>();\n for (const token of tokenizeForExactTokenMatch(item.title)) {\n titleTokenCounts.set(token, (titleTokenCounts.get(token) ?? 0) + 1);\n }\n const searchableFields: Array<{ name: string; value: string; weight: number }> = [\n { name: \"title\", value: item.title, weight: tuning.title_weight },\n { name: \"description\", value: item.description, weight: tuning.description_weight },\n { name: \"tags\", value: stringArray(item.tags).join(\" \"), weight: tuning.tags_weight },\n { name: \"status\", value: typeof item.status === \"string\" ? item.status : \"\", weight: tuning.status_weight },\n { name: \"body\", value: document.body, weight: tuning.body_weight },\n { name: \"comments\", value: textEntries(item.comments).map((entry) => entry.text).join(\" \"), weight: tuning.comments_weight },\n { name: \"notes\", value: textEntries(item.notes).map((entry) => entry.text).join(\" \"), weight: tuning.notes_weight },\n { name: \"learnings\", value: textEntries(item.learnings).map((entry) => entry.text).join(\" \"), weight: tuning.learnings_weight },\n { name: \"reminders\", value: buildReminderCorpus(item).join(\" \"), weight: tuning.reminders_weight },\n { name: \"events\", value: buildEventCorpus(item).join(\" \"), weight: tuning.events_weight },\n {\n name: \"dependencies\",\n value: dependencyEntries(item.dependencies).map((entry) => `${entry.id} ${entry.kind}`).join(\" \"),\n weight: tuning.dependencies_weight,\n },\n { name: \"plan\", value: buildPlanFlatCorpus(item), weight: tuning.body_weight },\n { name: \"linked_content\", value: linkedCorpus, weight: tuning.linked_content_weight },\n ];\n\n let score = 0;\n const matched = new Set<string>();\n for (const token of tokens) {\n const exactTitleMatches = titleTokenCounts.get(token) ?? 0;\n if (exactTitleMatches > 0) {\n score += exactTitleMatches * tuning.title_exact_bonus;\n matched.add(\"title\");\n }\n for (const field of searchableFields) {\n const fieldValue = field.value.toLowerCase();\n const occurrences = countOccurrences(fieldValue, token);\n if (occurrences > 0) {\n score += occurrences * field.weight;\n matched.add(field.name);\n }\n }\n }\n\n const isLongPhraseQuery = tokens.length >= LONG_QUERY_TOKEN_THRESHOLD && normalizedQuery.includes(\" \");\n if (isLongPhraseQuery) {\n const normalizedTitle = normalizeSearchPhrase(item.title);\n if (normalizedTitle === normalizedQuery) {\n score += LONG_QUERY_TITLE_EXACT_BONUS;\n matched.add(\"title\");\n }\n for (const field of searchableFields) {\n const normalizedField = normalizeSearchPhrase(field.value);\n const phraseOccurrences = countOccurrences(normalizedField, normalizedQuery);\n if (phraseOccurrences > 0) {\n score += phraseOccurrences * field.weight * LONG_QUERY_PHRASE_MULTIPLIER;\n matched.add(field.name);\n }\n }\n }\n\n if (score <= 0) {\n return null;\n }\n\n return {\n item,\n score,\n matched_fields: [...matched].sort((a, b) => a.localeCompare(b)),\n };\n}\n\nfunction sortHits(items: SearchHit[], statusRegistry: RuntimeStatusRegistry): SearchHit[] {\n return [...items].sort((a, b) => {\n const byScore = b.score - a.score;\n if (byScore !== 0) return byScore;\n const aTerminal = isTerminalStatus(a.item.status, statusRegistry);\n const bTerminal = isTerminalStatus(b.item.status, statusRegistry);\n if (aTerminal !== bTerminal) {\n return aTerminal ? 1 : -1;\n }\n const byPriority = a.item.priority - b.item.priority;\n if (byPriority !== 0) return byPriority;\n const byUpdated = compareTimestampStrings(b.item.updated_at, a.item.updated_at);\n if (byUpdated !== 0) return byUpdated;\n return a.item.id.localeCompare(b.item.id);\n });\n}\n\nfunction buildHybridLexicalScore(\n document: ItemDocument,\n tokens: string[],\n normalizedQuery: string,\n includeLinked: boolean,\n linkedCorpusById: Map<string, string>,\n tuning: SearchTuning,\n): SearchHit | null {\n return scoreDocument(\n document,\n tokens,\n normalizedQuery,\n includeLinked ? linkedCorpusById.get(document.metadata.id) ?? \"\" : \"\",\n tuning,\n );\n}\n\nfunction normalizeScoreMap(scoreById: Map<string, number>): Map<string, number> {\n if (scoreById.size === 0) {\n return new Map();\n }\n const values = [...scoreById.values()];\n const minScore = Math.min(...values);\n const maxScore = Math.max(...values);\n if (maxScore === minScore) {\n return new Map([...scoreById.keys()].map((id) => [id, 1]));\n }\n const normalized = new Map<string, number>();\n for (const [id, score] of scoreById) {\n normalized.set(id, (score - minScore) / (maxScore - minScore));\n }\n return normalized;\n}\n\nexport function resolveSearchMaxResults(settings: unknown): number {\n const candidate = (settings as { search?: { max_results?: unknown } }).search?.max_results;\n if (typeof candidate === \"number\" && Number.isFinite(candidate) && candidate > 0) {\n return Math.floor(candidate);\n }\n return 50;\n}\n\nexport function resolveSearchScoreThreshold(settings: unknown): number {\n const candidate = (settings as { search?: { score_threshold?: unknown } }).search?.score_threshold;\n if (typeof candidate === \"number\" && Number.isFinite(candidate)) {\n return candidate;\n }\n return 0;\n}\n\nexport function resolveHybridSemanticWeight(settings: unknown): number {\n const candidate = (settings as { search?: { hybrid_semantic_weight?: unknown } }).search?.hybrid_semantic_weight;\n if (typeof candidate === \"number\" && Number.isFinite(candidate) && candidate >= 0 && candidate <= 1) {\n return candidate;\n }\n return 0.7;\n}\n\nexport function resolveSearchTuning(settings: unknown): SearchTuning {\n const defaults: SearchTuning = {\n title_exact_bonus: 10,\n title_weight: 8,\n description_weight: 5,\n tags_weight: 6,\n status_weight: 2,\n body_weight: 1,\n comments_weight: 1,\n notes_weight: 1,\n learnings_weight: 1,\n reminders_weight: 2,\n events_weight: 2,\n dependencies_weight: 3,\n linked_content_weight: 1,\n };\n const tuning = (settings as { search?: { tuning?: Partial<SearchTuning> } }).search?.tuning;\n if (!tuning) return defaults;\n\n const resolveWeight = (candidate: unknown, fallback: number) => {\n if (typeof candidate === \"number\" && Number.isFinite(candidate) && candidate >= 0) {\n return candidate;\n }\n return fallback;\n };\n\n return {\n title_exact_bonus: resolveWeight(tuning.title_exact_bonus, defaults.title_exact_bonus),\n title_weight: resolveWeight(tuning.title_weight, defaults.title_weight),\n description_weight: resolveWeight(tuning.description_weight, defaults.description_weight),\n tags_weight: resolveWeight(tuning.tags_weight, defaults.tags_weight),\n status_weight: resolveWeight(tuning.status_weight, defaults.status_weight),\n body_weight: resolveWeight(tuning.body_weight, defaults.body_weight),\n comments_weight: resolveWeight(tuning.comments_weight, defaults.comments_weight),\n notes_weight: resolveWeight(tuning.notes_weight, defaults.notes_weight),\n learnings_weight: resolveWeight(tuning.learnings_weight, defaults.learnings_weight),\n reminders_weight: resolveWeight(tuning.reminders_weight, defaults.reminders_weight),\n events_weight: resolveWeight(tuning.events_weight, defaults.events_weight),\n dependencies_weight: resolveWeight(tuning.dependencies_weight, defaults.dependencies_weight),\n linked_content_weight: resolveWeight(tuning.linked_content_weight, defaults.linked_content_weight),\n };\n}\n\nfunction emptySearchResult(\n query: string,\n mode: SearchMode,\n options: SearchOptions,\n includeLinked: boolean,\n scoreThreshold: number,\n hybridSemanticWeight: number,\n projection: SearchProjectionConfig,\n warnings: string[],\n): SearchResult {\n const projectionFields = projection.mode === \"full\" ? null : [...projection.fields];\n return {\n query: query.trim(),\n mode,\n items: [],\n count: 0,\n filters: {\n mode,\n type: options.type ?? null,\n tag: options.tag ?? null,\n priority: options.priority ?? null,\n deadline_before: options.deadlineBefore ?? null,\n deadline_after: options.deadlineAfter ?? null,\n include_linked: includeLinked,\n title_exact: options.titleExact === true,\n phrase_exact: options.phraseExact === true,\n score_threshold: scoreThreshold,\n hybrid_semantic_weight: mode === \"hybrid\" ? hybridSemanticWeight : null,\n limit: options.limit ?? null,\n projection: projection.mode,\n fields: projectionFields,\n },\n projection: {\n mode: projection.mode,\n fields: projectionFields,\n },\n now: nowIso(),\n ...(warnings.length > 0 ? { warnings } : {}),\n };\n}\n\nfunction requireSemanticDependencies(\n requestedMode: Exclude<SearchMode, \"keyword\">,\n providerResolution: EmbeddingProviderResolution,\n vectorResolution: VectorStoreResolution,\n hasExtensionVectorQuery: boolean,\n): { provider: EmbeddingProviderConfig; vectorStore: VectorStoreConfig | null } {\n if (!providerResolution.active) {\n throw new PmCliError(\n `Search mode '${requestedMode}' requires a configured embedding provider in settings.providers.openai or settings.providers.ollama`,\n EXIT_CODE.USAGE,\n );\n }\n if (!vectorResolution.active && !hasExtensionVectorQuery) {\n throw new PmCliError(\n `Search mode '${requestedMode}' requires a configured vector store in settings.vector_store.qdrant/settings.vector_store.lancedb or an extension adapter selected by settings.vector_store.adapter`,\n EXIT_CODE.USAGE,\n );\n }\n return {\n provider: providerResolution.active,\n vectorStore: vectorResolution.active ?? null,\n };\n}\n\nconst toOptionalNonEmptyString = toNonEmptyStringOrUndefined;\n\nfunction resolveExtensionSearchProvider(settings: PmSettings): { providerName: string; query: ExtensionSearchProviderQuery } | null {\n const registrations = getActiveExtensionRegistrations();\n const providerName = toOptionalNonEmptyString((settings.search as { provider?: unknown } | undefined)?.provider);\n const resolved = resolveRegisteredSearchProvider(registrations, providerName);\n if (!resolved) {\n return null;\n }\n const runtimeDefinition = resolved.runtime_definition ?? resolved.definition;\n const query = (runtimeDefinition as { query?: unknown }).query;\n if (typeof query !== \"function\") {\n return null;\n }\n const registeredName =\n toOptionalNonEmptyString((runtimeDefinition as { name?: unknown }).name) ??\n toOptionalNonEmptyString((resolved.definition as { name?: unknown }).name) ??\n providerName;\n if (!registeredName) {\n return null;\n }\n return {\n providerName: registeredName,\n query: query as ExtensionSearchProviderQuery,\n };\n}\n\nfunction resolveExtensionVectorAdapter(settings: PmSettings): ExtensionVectorAdapter | null {\n const registrations = getActiveExtensionRegistrations();\n const adapterName = toOptionalNonEmptyString((settings.vector_store as { adapter?: unknown } | undefined)?.adapter);\n const resolved = resolveRegisteredVectorStoreAdapter(registrations, adapterName);\n if (!resolved) {\n return null;\n }\n const runtimeDefinition = resolved.runtime_definition ?? resolved.definition;\n const query = (runtimeDefinition as { query?: unknown }).query;\n if (typeof query !== \"function\") {\n return null;\n }\n return {\n query: query as ExtensionVectorQuery,\n };\n}\n\nfunction normalizeExtensionProviderHits(\n providerName: string,\n raw: unknown,\n filteredById: Map<string, ItemDocument>,\n): SearchHit[] {\n const rawHits = Array.isArray(raw)\n ? raw\n : (raw as { hits?: unknown } | null | undefined)?.hits;\n if (!Array.isArray(rawHits)) {\n throw new PmCliError(\n `Extension search provider \"${providerName}\" must return an array of hits or { hits: [...] }`,\n EXIT_CODE.GENERIC_FAILURE,\n );\n }\n\n const seen = new Set<string>();\n const hits: SearchHit[] = [];\n for (const rawHit of rawHits) {\n if (typeof rawHit !== \"object\" || rawHit === null) {\n continue;\n }\n const id = toOptionalNonEmptyString((rawHit as { id?: unknown }).id);\n const score = (rawHit as { score?: unknown }).score;\n if (!id || typeof score !== \"number\" || !Number.isFinite(score) || seen.has(id)) {\n continue;\n }\n const document = filteredById.get(id);\n if (!document) {\n continue;\n }\n const matchedFieldsRaw = (rawHit as { matched_fields?: unknown }).matched_fields;\n const matchedFields =\n Array.isArray(matchedFieldsRaw) && matchedFieldsRaw.every((entry) => typeof entry === \"string\")\n ? [...new Set((matchedFieldsRaw as string[]).map((entry) => entry.trim()).filter((entry) => entry.length > 0))].sort((a, b) =>\n a.localeCompare(b),\n )\n : [`provider:${providerName}`];\n seen.add(id);\n hits.push({\n item: document.metadata,\n score,\n matched_fields: matchedFields,\n });\n }\n return hits;\n}\n\nfunction buildSemanticHits(\n vectorHits: VectorQueryHit[],\n filteredById: Map<string, ItemDocument>,\n): { semanticHits: SearchHit[]; semanticScores: Map<string, number> } {\n const semanticHits: SearchHit[] = [];\n const semanticScores = new Map<string, number>();\n for (const vectorHit of vectorHits) {\n if (semanticScores.has(vectorHit.id)) {\n continue;\n }\n const document = filteredById.get(vectorHit.id);\n if (!document) {\n continue;\n }\n semanticScores.set(vectorHit.id, vectorHit.score);\n semanticHits.push({\n item: document.metadata,\n score: vectorHit.score,\n matched_fields: [\"semantic\"],\n });\n }\n return {\n semanticHits,\n semanticScores,\n };\n}\n\nfunction combineHybridHits(\n filteredById: Map<string, ItemDocument>,\n semanticScores: Map<string, number>,\n keywordHits: SearchHit[],\n hybridSemanticWeight: number,\n): SearchHit[] {\n const keywordScores = new Map(keywordHits.map((entry) => [entry.item.id, entry.score]));\n const keywordMatches = new Map(keywordHits.map((entry) => [entry.item.id, entry.matched_fields]));\n const normalizedSemantic = normalizeScoreMap(semanticScores);\n const normalizedKeyword = normalizeScoreMap(keywordScores);\n const candidateIds = new Set<string>([...semanticScores.keys(), ...keywordScores.keys()]);\n const keywordWeight = 1 - hybridSemanticWeight;\n return [...candidateIds]\n .map((id) => {\n const document = filteredById.get(id)!;\n const semanticScore = normalizedSemantic.get(id) ?? 0;\n const keywordScore = normalizedKeyword.get(id) ?? 0;\n const combinedScore = (semanticScore * hybridSemanticWeight) + (keywordScore * keywordWeight);\n if (combinedScore <= 0) {\n return null;\n }\n const matchedFields = new Set<string>();\n if (semanticScores.has(id)) {\n matchedFields.add(\"semantic\");\n }\n for (const field of keywordMatches.get(id) ?? []) {\n matchedFields.add(field);\n }\n return {\n item: document.metadata,\n score: combinedScore,\n matched_fields: [...matchedFields].sort((a, b) => a.localeCompare(b)),\n };\n })\n .filter((entry): entry is SearchHit => entry !== null);\n}\n\ninterface SemanticQueryContext {\n requestedMode: Exclude<SearchMode, \"keyword\">;\n query: string;\n filteredDocuments: ItemDocument[];\n keywordHits: SearchHit[];\n hybridSemanticWeight: number;\n limit: number | undefined;\n maxResults: number;\n provider: EmbeddingProviderConfig;\n vectorStore: VectorStoreConfig | null;\n extensionVectorAdapter: ExtensionVectorAdapter | null;\n settings: PmSettings;\n embeddingTimeoutMs?: number;\n vectorQueryTimeoutMs?: number;\n}\n\ninterface SemanticQueryResult {\n hits: SearchHit[];\n // Number of documents returned by the vector stage for this query after the\n // current metadata filters. When this is 0 the semantic/hybrid query ran\n // successfully, but vector ranking contributed nothing to the returned hits.\n vectorMatchCount: number;\n}\n\nasync function computeSemanticOrHybridHits(context: SemanticQueryContext): Promise<SemanticQueryResult> {\n const semanticLimit = context.limit ?? context.maxResults;\n const embeddingOptions = context.embeddingTimeoutMs !== undefined ? { timeout_ms: context.embeddingTimeoutMs } : {};\n const vectorQueryOptions = context.vectorQueryTimeoutMs !== undefined ? { timeout_ms: context.vectorQueryTimeoutMs } : {};\n const queryVectors = await executeEmbeddingRequest(context.provider, context.query.trim(), embeddingOptions);\n const semanticVector = queryVectors[0];\n let vectorHits: VectorQueryHit[];\n if (context.extensionVectorAdapter?.query) {\n try {\n vectorHits = await Promise.resolve(\n context.extensionVectorAdapter.query({\n vector: semanticVector,\n limit: semanticLimit,\n settings: context.settings,\n }),\n );\n } catch (error: unknown) {\n if (!context.vectorStore) {\n throw new PmCliError(\n `Extension vector adapter query failed and no built-in fallback store is configured (${error instanceof Error ? error.message : String(error)})`,\n EXIT_CODE.GENERIC_FAILURE,\n );\n }\n vectorHits = await executeVectorQuery(context.vectorStore, semanticVector, semanticLimit, vectorQueryOptions);\n }\n } else if (context.vectorStore) {\n vectorHits = await executeVectorQuery(context.vectorStore, semanticVector, semanticLimit, vectorQueryOptions);\n } else {\n throw new PmCliError(\n \"Semantic search requires either a configured vector store or an extension vector adapter query handler\",\n EXIT_CODE.USAGE,\n );\n }\n const filteredById = new Map(context.filteredDocuments.map((document) => [document.metadata.id, document]));\n const { semanticHits, semanticScores } = buildSemanticHits(vectorHits, filteredById);\n const vectorMatchCount = semanticScores.size;\n if (context.requestedMode === \"semantic\") {\n return { hits: semanticHits, vectorMatchCount };\n }\n return {\n hits: combineHybridHits(filteredById, semanticScores, context.keywordHits, context.hybridSemanticWeight),\n vectorMatchCount,\n };\n}\n\nasync function loadDocuments(\n pmRoot: string,\n itemFormat: ItemFormat,\n typeToFolder: Record<string, string>,\n schema: PmSettings[\"schema\"],\n): Promise<{ documents: ItemDocument[]; warnings: string[] }> {\n const readDocumentBody = async (\n metadata: ItemFrontMatter,\n preferredPath: string,\n preferredFormat: ItemFormat,\n ): Promise<string> => {\n const tryRead = async (targetPath: string, format: ItemFormat): Promise<string> => {\n await runActiveOnReadHooks({ path: targetPath, scope: \"project\" });\n const raw = await fs.readFile(targetPath, \"utf8\");\n const parsed = parseItemDocument(raw, {\n format,\n schema,\n onWarning: (warning) => listWarnings.push(warning),\n });\n return parsed.body;\n };\n\n try {\n return await tryRead(preferredPath, preferredFormat);\n } catch {\n const alternateFormat: ItemFormat = preferredFormat === \"toon\" ? \"json_markdown\" : \"toon\";\n const alternatePath = getItemPath(pmRoot, metadata.type as ItemType, metadata.id, alternateFormat, typeToFolder);\n try {\n return await tryRead(alternatePath, alternateFormat);\n } catch {\n listWarnings.push(`item_list_item_read_failed:${path.relative(pmRoot, alternatePath)}`);\n return \"\";\n }\n }\n };\n\n const listWarnings: string[] = [];\n const cachedDocuments = await listAllDocumentCandidatesCached(pmRoot, itemFormat, typeToFolder, listWarnings, schema);\n const documents: ItemDocument[] = [];\n if (cachedDocuments.length === 0) {\n const frontMatterDocuments = await listAllFrontMatter(pmRoot, itemFormat, typeToFolder, listWarnings, schema);\n for (const metadata of frontMatterDocuments) {\n const preferredPath = getItemPath(pmRoot, metadata.type as ItemType, metadata.id, itemFormat, typeToFolder);\n const body = await readDocumentBody(metadata, preferredPath, itemFormat);\n documents.push({ metadata, body });\n }\n return {\n documents,\n warnings: [...new Set(listWarnings)].sort((left, right) => left.localeCompare(right)),\n };\n }\n\n for (const cachedDocument of cachedDocuments) {\n if (typeof cachedDocument.body === \"string\") {\n documents.push({\n metadata: cachedDocument.metadata,\n body: cachedDocument.body,\n });\n continue;\n }\n const body = await readDocumentBody(cachedDocument.metadata, cachedDocument.item_path, cachedDocument.item_format);\n documents.push({\n metadata: cachedDocument.metadata,\n body,\n });\n }\n return {\n documents,\n warnings: [...new Set(listWarnings)].sort((left, right) => left.localeCompare(right)),\n };\n}\n\nfunction readSearchFieldValue(hit: SearchHit, field: string): unknown {\n const normalized = field.trim();\n if (normalized.length === 0) {\n return null;\n }\n if (normalized === \"score\") {\n return hit.score;\n }\n if (normalized === \"matched_fields\") {\n return hit.matched_fields;\n }\n if (normalized.startsWith(\"item.\")) {\n const itemKey = normalized.slice(\"item.\".length);\n if (itemKey.length === 0) {\n return null;\n }\n const itemRecord = hit.item as unknown as Record<string, unknown>;\n return itemRecord[itemKey] ?? null;\n }\n const hitRecord = hit as unknown as Record<string, unknown>;\n const itemRecord = hit.item as unknown as Record<string, unknown>;\n if (Object.prototype.hasOwnProperty.call(itemRecord, normalized)) {\n return itemRecord[normalized] ?? null;\n }\n if (Object.prototype.hasOwnProperty.call(hitRecord, normalized)) {\n return hitRecord[normalized] ?? null;\n }\n return null;\n}\n\nfunction projectSearchHits(hits: SearchHit[], projection: SearchProjectionConfig): SearchResultItem[] {\n if (projection.mode === \"full\") {\n return hits;\n }\n return hits.map((hit) => {\n const projected: Record<string, unknown> = {};\n for (const field of projection.fields) {\n projected[field] = readSearchFieldValue(hit, field);\n }\n return projected;\n });\n}\n\nexport async function runSearch(query: string, options: SearchOptions, global: GlobalOptions): Promise<SearchResult> {\n const includeLinked = parseIncludeLinked(options.includeLinked);\n const titleExact = parseTitleExact(options.titleExact);\n const phraseExact = parsePhraseExact(options.phraseExact);\n const tokens = parseTokens(query);\n const normalizedQuery = normalizeSearchPhrase(query);\n const limit = parseLimit(options.limit);\n const projection = parseProjectionConfig(options);\n const modeWasExplicit = typeof options.mode === \"string\" && options.mode.trim().length > 0;\n const pmRoot = resolvePmRoot(process.cwd(), global.path);\n if (!(await pathExists(getSettingsPath(pmRoot)))) {\n throw new PmCliError(`Tracker is not initialized at ${pmRoot}. Run pm init first.`, EXIT_CODE.NOT_FOUND);\n }\n const storedSettings = await readSettings(pmRoot);\n const runtimeDefaultsResolution = resolveSettingsWithSemanticRuntimeDefaults(storedSettings);\n const settings = runtimeDefaultsResolution.settings;\n const statusRegistry = resolveRuntimeStatusRegistry(settings.schema);\n const runtimeFieldRegistry = resolveRuntimeFieldRegistry(settings.schema);\n validateSearchProjectionFields(projection, runtimeFieldRegistry);\n const runtimeFieldFilters = collectRuntimeFilterValues(options as Record<string, unknown>, runtimeFieldRegistry, \"search\");\n const typeRegistry = resolveItemTypeRegistry(settings, getActiveExtensionRegistrations());\n const maxResults = resolveSearchMaxResults(settings);\n const scoreThreshold = resolveSearchScoreThreshold(settings);\n const hybridSemanticWeight = resolveHybridSemanticWeight(settings);\n const tuning = resolveSearchTuning(settings);\n const providerResolution = resolveEmbeddingProviders(settings);\n const vectorResolution = resolveVectorStores(settings);\n const extensionSearchProvider = resolveExtensionSearchProvider(settings);\n const extensionVectorAdapter = resolveExtensionVectorAdapter(settings);\n let effectiveMode = parseMode(options.mode, {\n hasProvider: providerResolution.active !== null || extensionSearchProvider !== null,\n hasVectorStore: vectorResolution.active !== null || extensionVectorAdapter !== null,\n });\n const loadedDocuments = await loadDocuments(\n pmRoot,\n settings.item_format ?? \"toon\",\n typeRegistry.type_to_folder,\n settings.schema,\n );\n const warnings = loadedDocuments.warnings;\n const allDocuments = loadedDocuments.documents;\n const metadataFilteredDocuments = applyFilters(allDocuments, options, typeRegistry, runtimeFieldFilters);\n const filteredDocuments = applyExactQueryFilters(metadataFilteredDocuments, normalizedQuery, {\n titleExact,\n phraseExact,\n });\n if (effectiveMode === \"keyword\" && (filteredDocuments.length === 0 || limit === 0)) {\n return emptySearchResult(query, effectiveMode, options, includeLinked, scoreThreshold, hybridSemanticWeight, projection, warnings);\n }\n\n const projectRoot = process.cwd();\n const globalRoot = resolveGlobalPmRoot(projectRoot);\n const linkedCorpusById = new Map<string, string>();\n if (includeLinked && (effectiveMode === \"keyword\" || effectiveMode === \"hybrid\")) {\n const linkedCorpusRoots = await resolveLinkedCorpusRoots(projectRoot, globalRoot);\n const linkedCorpusEntries = await Promise.all(\n filteredDocuments.map(async (document) => [document.metadata.id, await loadLinkedCorpus(document, linkedCorpusRoots)] as const),\n );\n for (const [id, corpus] of linkedCorpusEntries) {\n linkedCorpusById.set(id, corpus);\n }\n }\n\n const keywordHits = filteredDocuments\n .map((document) => buildHybridLexicalScore(document, tokens, normalizedQuery, effectiveMode !== \"semantic\", linkedCorpusById, tuning))\n .filter((entry): entry is SearchHit => entry !== null);\n\n let hits = keywordHits;\n if (effectiveMode !== \"keyword\") {\n try {\n if (!extensionSearchProvider) {\n requireSemanticDependencies(effectiveMode, providerResolution, vectorResolution, extensionVectorAdapter !== null);\n }\n if (filteredDocuments.length === 0 || limit === 0) {\n return emptySearchResult(\n query,\n effectiveMode,\n options,\n includeLinked,\n scoreThreshold,\n hybridSemanticWeight,\n projection,\n warnings,\n );\n }\n const filteredById = new Map(filteredDocuments.map((document) => [document.metadata.id, document]));\n const canUseBuiltInSemantic =\n providerResolution.active !== null && (vectorResolution.active !== null || extensionVectorAdapter !== null);\n if (extensionSearchProvider) {\n try {\n const providerResponse = await Promise.resolve(\n extensionSearchProvider.query({\n query,\n mode: effectiveMode,\n tokens,\n options,\n settings,\n documents: filteredDocuments,\n }),\n );\n hits = normalizeExtensionProviderHits(extensionSearchProvider.providerName, providerResponse, filteredById);\n } catch (error: unknown) {\n if (!canUseBuiltInSemantic) {\n throw new PmCliError(\n `Extension search provider \"${extensionSearchProvider.providerName}\" failed: ${error instanceof Error ? error.message : String(error)}`,\n EXIT_CODE.GENERIC_FAILURE,\n );\n }\n }\n }\n if (hits === keywordHits) {\n const implicitHybridMode = !modeWasExplicit && effectiveMode === \"hybrid\";\n const { provider, vectorStore } = requireSemanticDependencies(\n effectiveMode,\n providerResolution,\n vectorResolution,\n extensionVectorAdapter !== null,\n );\n const semanticResult = await computeSemanticOrHybridHits({\n requestedMode: effectiveMode,\n query,\n filteredDocuments,\n keywordHits,\n hybridSemanticWeight,\n limit,\n maxResults,\n provider,\n vectorStore,\n extensionVectorAdapter,\n settings,\n ...(implicitHybridMode\n ? {\n embeddingTimeoutMs: IMPLICIT_HYBRID_EMBEDDING_TIMEOUT_MS,\n vectorQueryTimeoutMs: IMPLICIT_HYBRID_VECTOR_TIMEOUT_MS,\n }\n : {}),\n });\n hits = semanticResult.hits;\n // The semantic/hybrid query ran without error, but vector ranking\n // contributed no hits for this query/filter set. Pure semantic mode would\n // otherwise return an empty set, so degrade to the locally computed\n // keyword hits (hybrid already blends them in) and warn so agents do not\n // mistake them for true vector ranking. The reported mode is left\n // unchanged; the warning is the signal.\n if (semanticResult.vectorMatchCount === 0) {\n if (effectiveMode === \"semantic\") {\n hits = keywordHits;\n }\n warnings.push(`search_${effectiveMode}_degraded:no_vector_matches:results_are_lexical`);\n }\n }\n } catch (error: unknown) {\n // Any semantic/hybrid attempt that fails (backend down, timeout, or the\n // project is not configured for semantic search) degrades to keyword mode\n // so agents are never blocked. Keyword hits are always computed locally\n // before this point, so the fallback is guaranteed to succeed.\n const fallbackWarning = modeWasExplicit\n ? buildExplicitSemanticFallbackWarning(effectiveMode, error)\n : buildImplicitSemanticFallbackWarning(error);\n effectiveMode = \"keyword\";\n hits = keywordHits;\n warnings.push(fallbackWarning);\n }\n }\n\n const thresholded = hits.filter((entry) => entry.score >= scoreThreshold);\n const sorted = sortHits(thresholded, statusRegistry);\n const resolvedLimit = effectiveMode === \"keyword\" ? limit : (limit ?? maxResults);\n const limited = resolvedLimit === undefined ? sorted : sorted.slice(0, resolvedLimit);\n const projectedItems = projectSearchHits(limited, projection);\n const projectionFields = projection.mode === \"full\" ? null : [...projection.fields];\n\n return {\n query: query.trim(),\n mode: effectiveMode,\n items: projectedItems,\n count: projectedItems.length,\n filters: {\n mode: effectiveMode,\n type: options.type ?? null,\n tag: options.tag ?? null,\n priority: options.priority ?? null,\n deadline_before: options.deadlineBefore ?? null,\n deadline_after: options.deadlineAfter ?? null,\n include_linked: includeLinked,\n title_exact: titleExact,\n phrase_exact: phraseExact,\n score_threshold: scoreThreshold,\n hybrid_semantic_weight: effectiveMode === \"hybrid\" ? hybridSemanticWeight : null,\n limit: options.limit ?? null,\n runtime_filters: runtimeFieldFilters,\n projection: projection.mode,\n fields: projectionFields,\n },\n projection: {\n mode: projection.mode,\n fields: projectionFields,\n },\n now: nowIso(),\n ...(warnings.length > 0 ? { warnings } : {}),\n };\n}\n"],"names":[],"mappings":"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","debugId":"061b3b62-cf94-5aca-9e69-004638268714"}
@@ -1,6 +1,7 @@
1
1
  import type { GlobalOptions } from "../../core/shared/command-types.js";
2
2
  type TemplateOptionValue = string | string[];
3
3
  export type CreateTemplateOptions = Record<string, TemplateOptionValue>;
4
+ export type TemplateSource = "builtin" | "user";
4
5
  export interface TemplatesSaveResult {
5
6
  name: string;
6
7
  created_at: string;
@@ -11,9 +12,12 @@ export interface TemplatesSaveResult {
11
12
  export interface TemplatesListResult {
12
13
  templates: string[];
13
14
  count: number;
15
+ builtin_templates: string[];
16
+ user_templates: string[];
14
17
  }
15
18
  export interface TemplatesShowResult {
16
19
  name: string;
20
+ source: TemplateSource;
17
21
  created_at: string;
18
22
  updated_at: string;
19
23
  path: string;
@@ -1,5 +1,5 @@
1
1
 
2
- !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="3c7b2864-f5c5-5e5f-8764-fe3e2f04a942")}catch(e){}}();
2
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="b9b40f68-29ac-5ae0-96d4-b4aab2822e8a")}catch(e){}}();
3
3
  import fs from "node:fs/promises";
4
4
  import path from "node:path";
5
5
  import { pathExists, readFileIfExists, writeFileAtomic } from "../../core/fs/fs-utils.js";
@@ -13,6 +13,41 @@ const TEMPLATE_FILE_EXTENSION = ".json";
13
13
  const TEMPLATE_NAME_PATTERN = /^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$/;
14
14
  const TEMPLATE_OPTION_REPEATABLE_KEYS = CREATE_COMMANDER_REPEATABLE_OPTION_CONTRACTS.map((entry) => entry.target);
15
15
  const TEMPLATE_OPTION_REPEATABLE_KEY_SET = new Set(TEMPLATE_OPTION_REPEATABLE_KEYS);
16
+ const BUILTIN_TEMPLATE_TIMESTAMP = "1970-01-01T00:00:00.000Z";
17
+ const BUILTIN_TEMPLATES = {
18
+ bug: {
19
+ type: "Issue",
20
+ priority: "1",
21
+ tags: "bug",
22
+ acceptanceCriteria: "Bug no longer reproduces with the steps below and a regression test guards it.",
23
+ expectedResult: "Describe the correct behavior.",
24
+ actualResult: "Describe the observed (buggy) behavior.",
25
+ body: "## Repro steps\n1. \n2. \n3. \n\n## Expected\n\n## Actual\n",
26
+ },
27
+ feature: {
28
+ type: "Feature",
29
+ priority: "2",
30
+ tags: "feature",
31
+ acceptanceCriteria: "Feature is shipped behind agreed scope with tests and docs updated.",
32
+ whyNow: "Explain why this is worth doing now (impact / urgency).",
33
+ body: "## Goal\n\n## Why now\n\n## Out of scope\n",
34
+ },
35
+ spike: {
36
+ type: "Task",
37
+ priority: "2",
38
+ tags: "spike",
39
+ estimatedMinutes: "120",
40
+ acceptanceCriteria: "Timeboxed investigation complete; findings and a recommendation are recorded.",
41
+ body: "## Question to answer\n\n## Timebox\n2h\n\n## Findings\n\n## Recommendation\n",
42
+ },
43
+ chore: {
44
+ type: "Chore",
45
+ priority: "3",
46
+ tags: "chore",
47
+ acceptanceCriteria: "Maintenance task done with no behavior change and green checks.",
48
+ body: "## What\n\n## Why\n",
49
+ },
50
+ };
16
51
  function normalizeTemplateName(rawName) {
17
52
  const name = rawName.trim();
18
53
  if (!TEMPLATE_NAME_PATTERN.test(name)) {
@@ -41,6 +76,10 @@ function extractTemplateOptions(rawOptions) {
41
76
  continue;
42
77
  }
43
78
  if (TEMPLATE_OPTION_REPEATABLE_KEY_SET.has(key)) {
79
+ if (typeof value === "string") {
80
+ next[key] = [value];
81
+ continue;
82
+ }
44
83
  if (!Array.isArray(value)) {
45
84
  continue;
46
85
  }
@@ -104,6 +143,29 @@ function parseStoredTemplateDocument(raw, normalizedName) {
104
143
  options,
105
144
  };
106
145
  }
146
+ function builtinTemplateDocument(normalizedName) {
147
+ const options = BUILTIN_TEMPLATES[normalizedName];
148
+ if (!options) {
149
+ return null;
150
+ }
151
+ return {
152
+ name: normalizedName,
153
+ created_at: BUILTIN_TEMPLATE_TIMESTAMP,
154
+ updated_at: BUILTIN_TEMPLATE_TIMESTAMP,
155
+ options: sortTemplateOptions({ ...options }),
156
+ };
157
+ }
158
+ async function resolveTemplateDocument(pmRoot, normalizedName) {
159
+ const raw = await readFileIfExists(templatePath(pmRoot, normalizedName));
160
+ if (raw !== null) {
161
+ return { document: parseStoredTemplateDocument(raw, normalizedName), source: "user" };
162
+ }
163
+ const builtin = builtinTemplateDocument(normalizedName);
164
+ if (builtin) {
165
+ return { document: builtin, source: "builtin" };
166
+ }
167
+ throw new PmCliError(`Template "${normalizedName}" not found`, EXIT_CODE.NOT_FOUND);
168
+ }
107
169
  async function readStoredTemplateDocument(pmRoot, normalizedName) {
108
170
  const raw = await readFileIfExists(templatePath(pmRoot, normalizedName));
109
171
  if (raw === null) {
@@ -113,8 +175,8 @@ async function readStoredTemplateDocument(pmRoot, normalizedName) {
113
175
  }
114
176
  export async function loadCreateTemplateOptions(pmRoot, rawTemplateName) {
115
177
  const normalizedName = normalizeTemplateName(rawTemplateName);
116
- const stored = await readStoredTemplateDocument(pmRoot, normalizedName);
117
- return stored.options;
178
+ const { document } = await resolveTemplateDocument(pmRoot, normalizedName);
179
+ return document.options;
118
180
  }
119
181
  export async function runTemplatesSave(rawTemplateName, options, global) {
120
182
  const pmRoot = resolvePmRoot(process.cwd(), global.path);
@@ -147,36 +209,46 @@ export async function runTemplatesSave(rawTemplateName, options, global) {
147
209
  options: document.options,
148
210
  };
149
211
  }
150
- export async function runTemplatesList(global) {
151
- const pmRoot = resolvePmRoot(process.cwd(), global.path);
152
- await ensureTrackerInitialized(pmRoot);
212
+ async function readUserTemplateNames(pmRoot) {
153
213
  const dirPath = templatesDirectory(pmRoot);
154
214
  if (!(await pathExists(dirPath))) {
155
- return { templates: [], count: 0 };
215
+ return [];
156
216
  }
157
217
  const entries = await fs.readdir(dirPath);
158
- const templates = entries
218
+ return entries
159
219
  .filter((entry) => entry.toLowerCase().endsWith(TEMPLATE_FILE_EXTENSION))
160
220
  .map((entry) => entry.slice(0, -TEMPLATE_FILE_EXTENSION.length))
161
- .filter((entry) => TEMPLATE_NAME_PATTERN.test(entry))
162
- .sort((left, right) => left.localeCompare(right));
221
+ .filter((entry) => TEMPLATE_NAME_PATTERN.test(entry));
222
+ }
223
+ export async function runTemplatesList(global) {
224
+ const pmRoot = resolvePmRoot(process.cwd(), global.path);
225
+ await ensureTrackerInitialized(pmRoot);
226
+ const userTemplates = await readUserTemplateNames(pmRoot);
227
+ const userTemplateSet = new Set(userTemplates);
228
+ const builtinTemplates = Object.keys(BUILTIN_TEMPLATES).filter((name) => !userTemplateSet.has(name));
229
+ const sortedUser = [...userTemplates].sort((left, right) => left.localeCompare(right));
230
+ const sortedBuiltin = [...builtinTemplates].sort((left, right) => left.localeCompare(right));
231
+ const templates = [...new Set([...sortedUser, ...sortedBuiltin])].sort((left, right) => left.localeCompare(right));
163
232
  return {
164
233
  templates,
165
234
  count: templates.length,
235
+ builtin_templates: sortedBuiltin,
236
+ user_templates: sortedUser,
166
237
  };
167
238
  }
168
239
  export async function runTemplatesShow(rawTemplateName, global) {
169
240
  const pmRoot = resolvePmRoot(process.cwd(), global.path);
170
241
  await ensureTrackerInitialized(pmRoot);
171
242
  const normalizedName = normalizeTemplateName(rawTemplateName);
172
- const stored = await readStoredTemplateDocument(pmRoot, normalizedName);
243
+ const { document, source } = await resolveTemplateDocument(pmRoot, normalizedName);
173
244
  return {
174
- name: stored.name,
175
- created_at: stored.created_at,
176
- updated_at: stored.updated_at,
177
- path: templatePath(pmRoot, normalizedName),
178
- options: stored.options,
245
+ name: document.name,
246
+ source,
247
+ created_at: document.created_at,
248
+ updated_at: document.updated_at,
249
+ path: source === "builtin" ? `builtin:${normalizedName}` : templatePath(pmRoot, normalizedName),
250
+ options: document.options,
179
251
  };
180
252
  }
181
253
  //# sourceMappingURL=templates.js.map
182
- //# debugId=3c7b2864-f5c5-5e5f-8764-fe3e2f04a942
254
+ //# debugId=b9b40f68-29ac-5ae0-96d4-b4aab2822e8a