@unbrained/pm-cli 2026.5.28 → 2026.5.30
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +127 -93
- package/dist/cli/bootstrap-args.d.ts +1 -1
- package/dist/cli/bootstrap-args.js +59 -9
- package/dist/cli/bootstrap-args.js.map +1 -1
- package/dist/cli/commander-usage.js +8 -8
- package/dist/cli/commander-usage.js.map +1 -1
- package/dist/cli/commands/activity.js +4 -4
- package/dist/cli/commands/activity.js.map +1 -1
- package/dist/cli/commands/aggregate.js +4 -3
- package/dist/cli/commands/aggregate.js.map +1 -1
- package/dist/cli/commands/calendar.d.ts +8 -0
- package/dist/cli/commands/calendar.js +15 -4
- package/dist/cli/commands/calendar.js.map +1 -1
- package/dist/cli/commands/close.js +4 -4
- package/dist/cli/commands/close.js.map +1 -1
- package/dist/cli/commands/completion.js +36 -4
- package/dist/cli/commands/completion.js.map +1 -1
- package/dist/cli/commands/config.d.ts +11 -1
- package/dist/cli/commands/config.js +68 -6
- package/dist/cli/commands/config.js.map +1 -1
- package/dist/cli/commands/create.d.ts +1 -0
- package/dist/cli/commands/create.js +55 -6
- package/dist/cli/commands/create.js.map +1 -1
- package/dist/cli/commands/deps.js +4 -4
- package/dist/cli/commands/deps.js.map +1 -1
- package/dist/cli/commands/extension/bundled-catalog.js +4 -3
- package/dist/cli/commands/extension/bundled-catalog.js.map +1 -1
- package/dist/cli/commands/extension/install-sources.d.ts +1 -0
- package/dist/cli/commands/extension/install-sources.js +20 -2
- package/dist/cli/commands/extension/install-sources.js.map +1 -1
- package/dist/cli/commands/extension.js +26 -5
- package/dist/cli/commands/extension.js.map +1 -1
- package/dist/cli/commands/get.js +6 -3
- package/dist/cli/commands/get.js.map +1 -1
- package/dist/cli/commands/health.js +3 -11
- package/dist/cli/commands/health.js.map +1 -1
- package/dist/cli/commands/linked-test-parsers.js +5 -4
- package/dist/cli/commands/linked-test-parsers.js.map +1 -1
- package/dist/cli/commands/list.js +25 -6
- package/dist/cli/commands/list.js.map +1 -1
- package/dist/cli/commands/plan.js +5 -4
- package/dist/cli/commands/plan.js.map +1 -1
- package/dist/cli/commands/search.js +45 -2
- package/dist/cli/commands/search.js.map +1 -1
- package/dist/cli/commands/stats.js +4 -4
- package/dist/cli/commands/stats.js.map +1 -1
- package/dist/cli/commands/test-all.js +4 -4
- package/dist/cli/commands/test-all.js.map +1 -1
- package/dist/cli/commands/update-many.js +35 -6
- package/dist/cli/commands/update-many.js.map +1 -1
- package/dist/cli/commands/update.d.ts +2 -0
- package/dist/cli/commands/update.js +38 -6
- package/dist/cli/commands/update.js.map +1 -1
- package/dist/cli/help-json-payload.d.ts +1 -11
- package/dist/cli/help-json-payload.js +12 -12
- package/dist/cli/help-json-payload.js.map +1 -1
- package/dist/cli/main.d.ts +2 -0
- package/dist/cli/main.js +39 -11
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/register-list-query.js +3 -3
- package/dist/cli/register-list-query.js.map +1 -1
- package/dist/cli/register-mutation.js +20 -8
- package/dist/cli/register-mutation.js.map +1 -1
- package/dist/cli/register-setup.js +4 -2
- package/dist/cli/register-setup.js.map +1 -1
- package/dist/cli/registration-helpers.d.ts +2 -6
- package/dist/cli/registration-helpers.js +9 -6
- package/dist/cli/registration-helpers.js.map +1 -1
- package/dist/cli-bundle/chunks/chunk-PB2YU2E3.js +164 -0
- package/dist/cli-bundle/chunks/chunk-PB2YU2E3.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-RJONRNXN.js +682 -0
- package/dist/cli-bundle/chunks/chunk-RJONRNXN.js.map +7 -0
- package/dist/cli-bundle/chunks/chunk-SW5BMMCU.js +13864 -0
- package/dist/cli-bundle/chunks/chunk-SW5BMMCU.js.map +7 -0
- package/dist/cli-bundle/chunks/commands-XJ4TJ5UN.js +24225 -0
- package/dist/cli-bundle/chunks/commands-XJ4TJ5UN.js.map +7 -0
- package/dist/cli-bundle/chunks/register-list-query-EIVQ5FMR.js +223 -0
- package/dist/cli-bundle/chunks/register-list-query-EIVQ5FMR.js.map +7 -0
- package/dist/cli-bundle/chunks/register-mutation-RSZNPSGI.js +702 -0
- package/dist/cli-bundle/chunks/register-mutation-RSZNPSGI.js.map +7 -0
- package/dist/cli-bundle/chunks/register-operations-APUSYDMR.js +355 -0
- package/dist/cli-bundle/chunks/register-operations-APUSYDMR.js.map +7 -0
- package/dist/cli-bundle/chunks/register-setup-OZOKSMPJ.js +237 -0
- package/dist/cli-bundle/chunks/register-setup-OZOKSMPJ.js.map +7 -0
- package/dist/cli-bundle/main.js +6896 -0
- package/dist/cli-bundle/main.js.map +7 -0
- package/dist/cli.js +1 -1
- package/dist/core/config/nested-settings.d.ts +88 -0
- package/dist/core/config/nested-settings.js +273 -0
- package/dist/core/config/nested-settings.js.map +1 -0
- package/dist/core/item/parse.d.ts +19 -0
- package/dist/core/item/parse.js +76 -2
- package/dist/core/item/parse.js.map +1 -1
- package/dist/core/item/priority.d.ts +2 -1
- package/dist/core/item/priority.js +12 -2
- package/dist/core/item/priority.js.map +1 -1
- package/dist/core/item/type-synonyms.d.ts +20 -0
- package/dist/core/item/type-synonyms.js +42 -0
- package/dist/core/item/type-synonyms.js.map +1 -0
- package/dist/core/search/cache.js +46 -4
- package/dist/core/search/cache.js.map +1 -1
- package/dist/core/search/providers.js +25 -5
- package/dist/core/search/providers.js.map +1 -1
- package/dist/core/search/semantic-defaults.js +73 -32
- package/dist/core/search/semantic-defaults.js.map +1 -1
- package/dist/core/search/staleness.d.ts +23 -0
- package/dist/core/search/staleness.js +34 -0
- package/dist/core/search/staleness.js.map +1 -0
- package/dist/core/search/vector-stores.js +12 -3
- package/dist/core/search/vector-stores.js.map +1 -1
- package/dist/core/sentry/helpers.d.ts +1 -1
- package/dist/core/sentry/helpers.js +4 -4
- package/dist/core/sentry/helpers.js.map +1 -1
- package/dist/core/shared/constants.js +3 -2
- package/dist/core/shared/constants.js.map +1 -1
- package/dist/core/shared/html-entity-decode.d.ts +22 -0
- package/dist/core/shared/html-entity-decode.js +127 -0
- package/dist/core/shared/html-entity-decode.js.map +1 -0
- package/dist/core/shared/split-comma-list.d.ts +20 -0
- package/dist/core/shared/split-comma-list.js +29 -0
- package/dist/core/shared/split-comma-list.js.map +1 -0
- package/dist/core/shared/time.js +52 -2
- package/dist/core/shared/time.js.map +1 -1
- package/dist/core/store/front-matter-cache.d.ts +24 -0
- package/dist/core/store/front-matter-cache.js +119 -8
- package/dist/core/store/front-matter-cache.js.map +1 -1
- package/dist/core/store/item-store.d.ts +7 -0
- package/dist/core/store/item-store.js +13 -3
- package/dist/core/store/item-store.js.map +1 -1
- package/dist/core/store/settings-validator.d.ts +1 -0
- package/dist/core/store/settings-validator.js +3 -2
- package/dist/core/store/settings-validator.js.map +1 -1
- package/dist/core/store/settings.js +19 -3
- package/dist/core/store/settings.js.map +1 -1
- package/dist/mcp/server.js +11 -4
- package/dist/mcp/server.js.map +1 -1
- package/dist/sdk/cli-contracts/commander-mutation-options.js +47 -11
- package/dist/sdk/cli-contracts/commander-mutation-options.js.map +1 -1
- package/dist/sdk/cli-contracts/tool-option-contracts.js +5 -2
- package/dist/sdk/cli-contracts/tool-option-contracts.js.map +1 -1
- package/dist/sdk/cli-contracts/tool-parameter-tables.js +12 -2
- package/dist/sdk/cli-contracts/tool-parameter-tables.js.map +1 -1
- package/dist/sdk/cli-contracts.js +28 -7
- package/dist/sdk/cli-contracts.js.map +1 -1
- package/dist/sdk/runtime.d.ts +1 -1
- package/dist/sdk/runtime.js +3 -3
- package/dist/sdk/runtime.js.map +1 -1
- package/dist/types.d.ts +2 -0
- package/dist/types.js +2 -2
- package/dist/types.js.map +1 -1
- package/docs/AGENT_GUIDE.md +7 -0
- package/docs/COMMANDS.md +17 -0
- package/docs/CONFIGURATION.md +66 -0
- package/docs/QUICKSTART.md +3 -0
- package/package.json +7 -4
- package/packages/pm-calendar/extensions/calendar/index.js +27 -2
- package/packages/pm-calendar/extensions/calendar/index.ts +28 -2
- package/packages/pm-calendar/extensions/calendar/runtime.js +5 -0
- package/packages/pm-calendar/extensions/calendar/runtime.ts +6 -0
- package/scripts/bundle-cli.mjs +39 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../../../../../../core/fs/fs-utils.ts", "../../../../../../../../core/extensions/extension-types.ts", "../../../../../../../../core/shared/constants.ts", "../../../../../../../../core/store/paths.ts", "../../../../../../../../core/shared/primitives.ts", "../../../../../../../../core/extensions/extension-runtime-helpers.ts", "../../../../../../../../core/extensions/extension-hook-runtime.ts", "../../../../../../../../core/extensions/loader.ts", "../../../../../../../../core/fs/path-utils.ts", "../../../../../../../../core/extensions/extension-capability-aliases.ts", "../../../../../../../../core/extensions/extension-policy.ts", "../../../../../../../../core/extensions/extension-registries.ts", "../../../../../../../../core/extensions/index.ts", "../../../../../../../../types.ts", "../../../../../../../../core/item/item-type-definition.ts", "../../../../../../../../core/item/type-registry.ts", "../../../../../../../../core/schema/runtime-schema.ts", "../../../../../../../../core/shared/errors.ts", "../../../../../../../../core/output/mutation-projection.ts", "../../../../../../../../core/output/output.ts", "../../../../../../../../core/store/settings-validator.ts", "../../../../../../../../core/shared/serialization.ts", "../../../../../../../../core/store/settings.ts", "../../../../../../../../core/item/status.ts", "../../../../../../../../sdk/cli-contracts/commander-mutation-options.ts", "../../../../../../../../sdk/cli-contracts/commander-types.ts", "../../../../../../../../sdk/cli-contracts/enum-contracts.ts", "../../../../../../../../sdk/cli-contracts/tool-option-contracts.ts", "../../../../../../../../sdk/cli-contracts/tool-parameter-tables.ts", "../../../../../../../../sdk/cli-contracts.ts", "../../../../../../../../core/shared/time.ts", "../../../../../../../../core/schema/runtime-field-values.ts", "../../../../../../../../core/shared/conflict-markers.ts", "../../../../../../../../core/item/item-format.ts", "../../../../../../../../core/item/toon-decode.ts", "../../../../../../../../core/item/item-record.ts", "../../../../../../../../core/history/history.ts", "../../../../../../../../core/history/history-stream-policy.ts", "../../../../../../../../core/lock/lock.ts", "../../../../../../../../core/item/id.ts", "../../../../../../../../core/store/front-matter-cache.ts", "../../../../../../../../core/store/item-store.ts", "../../../../../../../../core/search/http-client.ts", "../../../../../../../../core/search/providers.ts", "../../../../../../../../core/search/corpus.ts", "../../../../../../../../core/search/semantic-defaults.ts", "../../../../../../../../core/search/vector-stores.ts", "../../../../../../../../core/search/cache.ts", "../../../../../../../../core/search/embedding-batches.ts"],
|
|
4
|
+
"sourcesContent": ["import fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport crypto from \"node:crypto\";\n\nexport async function ensureDir(dirPath: string): Promise<void> {\n await fs.mkdir(dirPath, { recursive: true });\n}\n\nexport async function pathExists(targetPath: string): Promise<boolean> {\n try {\n await fs.access(targetPath);\n return true;\n } catch {\n return false;\n }\n}\n\nexport async function readFileIfExists(targetPath: string): Promise<string | null> {\n try {\n return await fs.readFile(targetPath, \"utf8\");\n } catch (error: unknown) {\n if (isErrno(error, \"ENOENT\")) {\n return null;\n }\n throw error;\n }\n}\n\nexport async function writeFileAtomic(targetPath: string, contents: string): Promise<void> {\n const dirPath = path.dirname(targetPath);\n await ensureDir(dirPath);\n const tempPath = path.join(\n dirPath,\n `.${path.basename(targetPath)}.${process.pid}.${Date.now()}.${crypto.randomBytes(4).toString(\"hex\")}.tmp`,\n );\n await fs.writeFile(tempPath, contents, \"utf8\");\n await fs.rename(tempPath, targetPath);\n}\n\nexport async function appendLineAtomic(targetPath: string, line: string): Promise<void> {\n const dirPath = path.dirname(targetPath);\n await ensureDir(dirPath);\n const handle = await fs.open(targetPath, \"a\");\n try {\n await handle.writeFile(`${line}\\n`, \"utf8\");\n } finally {\n await handle.close();\n }\n}\n\nexport async function removeFileIfExists(targetPath: string): Promise<void> {\n try {\n await fs.unlink(targetPath);\n } catch (error: unknown) {\n if (!isErrno(error, \"ENOENT\")) {\n throw error;\n }\n }\n}\n\nfunction isErrno(error: unknown, code: string): boolean {\n return typeof error === \"object\" && error !== null && \"code\" in error && (error as { code?: string }).code === code;\n}\n", "import type {\n ExtensionPolicyOverrideSettings,\n ExtensionPolicySettings,\n ItemDocument,\n PmSettings,\n} from \"../../types/index.js\";\nimport type { GlobalOptions } from \"../shared/command-types.js\";\n\nexport const KNOWN_EXTENSION_CAPABILITIES = [\n \"commands\",\n \"renderers\",\n \"hooks\",\n \"schema\",\n \"importers\",\n \"search\",\n \"parser\",\n \"preflight\",\n \"services\",\n] as const;\nexport type ExtensionCapability = (typeof KNOWN_EXTENSION_CAPABILITIES)[number];\nexport const EXTENSION_CAPABILITY_CONTRACT_VERSION = 2;\nexport const EXTENSION_CAPABILITY_LEGACY_ALIASES: Readonly<Record<string, ExtensionCapability>> = Object.freeze({\n migration: \"schema\",\n validation: \"schema\",\n});\nexport const EXTENSION_CAPABILITY_CONTRACT = Object.freeze({\n version: EXTENSION_CAPABILITY_CONTRACT_VERSION,\n capabilities: [...KNOWN_EXTENSION_CAPABILITIES],\n legacy_aliases: { ...EXTENSION_CAPABILITY_LEGACY_ALIASES },\n});\n\nexport const KNOWN_EXTENSION_POLICY_MODES = [\"off\", \"warn\", \"enforce\"] as const;\nexport type ExtensionPolicyMode = (typeof KNOWN_EXTENSION_POLICY_MODES)[number];\nexport const KNOWN_EXTENSION_TRUST_MODES = [\"off\", \"warn\", \"enforce\"] as const;\nexport type ExtensionTrustMode = (typeof KNOWN_EXTENSION_TRUST_MODES)[number];\nexport const KNOWN_EXTENSION_SANDBOX_PROFILES = [\"none\", \"restricted\", \"strict\"] as const;\nexport type ExtensionSandboxProfile = (typeof KNOWN_EXTENSION_SANDBOX_PROFILES)[number];\n\nexport const KNOWN_EXTENSION_POLICY_SURFACES = [\n \"commands.override\",\n \"commands.handler\",\n \"hooks.beforecommand\",\n \"hooks.aftercommand\",\n \"hooks.onwrite\",\n \"hooks.onread\",\n \"hooks.onindex\",\n \"schema.flags\",\n \"schema.itemfields\",\n \"schema.itemtypes\",\n \"schema.migrations\",\n \"parser.override\",\n \"preflight.override\",\n \"services.override\",\n \"renderers.override\",\n \"importers.importer\",\n \"importers.exporter\",\n \"search.provider\",\n \"search.vectorstore\",\n] as const;\nexport type ExtensionPolicySurface = (typeof KNOWN_EXTENSION_POLICY_SURFACES)[number];\n\nexport const KNOWN_EXTENSION_SERVICE_NAMES = [\n \"output_format\",\n \"error_format\",\n \"help_format\",\n \"lock_acquire\",\n \"lock_release\",\n \"history_append\",\n \"item_store_write\",\n \"item_store_delete\",\n] as const;\nexport type ExtensionServiceName = (typeof KNOWN_EXTENSION_SERVICE_NAMES)[number];\n\nexport interface ExtensionProvenanceMetadata {\n source?: string;\n signature?: string;\n attestation?: string;\n verified?: boolean;\n}\n\nexport interface ExtensionRuntimePermissionDeclaration {\n fs_read?: boolean;\n fs_write?: boolean;\n network?: boolean;\n env_read?: boolean;\n env_write?: boolean;\n process_spawn?: boolean;\n}\n\nexport type ExtensionPolicyOverride = ExtensionPolicyOverrideSettings;\nexport type ExtensionGovernancePolicy = ExtensionPolicySettings;\n\nexport function createDefaultExtensionGovernancePolicy(): ExtensionGovernancePolicy {\n return {\n mode: \"off\",\n trust_mode: \"off\",\n require_provenance: false,\n trusted_extensions: [],\n default_sandbox_profile: \"none\",\n allowed_extensions: [],\n blocked_extensions: [],\n allowed_capabilities: [],\n blocked_capabilities: [],\n allowed_surfaces: [],\n blocked_surfaces: [],\n allowed_commands: [],\n blocked_commands: [],\n allowed_actions: [],\n blocked_actions: [],\n allowed_services: [],\n blocked_services: [],\n extension_overrides: [],\n };\n}\n\nexport type ExtensionLayer = \"global\" | \"project\";\nexport type ExtensionStatus = \"ok\" | \"warn\";\n\nexport interface ExtensionManifest {\n name: string;\n version: string;\n entry: string;\n priority: number;\n capabilities: string[];\n manifest_version?: number;\n trusted?: boolean;\n provenance?: ExtensionProvenanceMetadata;\n sandbox_profile?: ExtensionSandboxProfile;\n permissions?: ExtensionRuntimePermissionDeclaration;\n legacy_capability_aliases?: LegacyExtensionCapabilityAliasMapping[];\n}\n\nexport interface ExtensionDiagnostic {\n layer: ExtensionLayer;\n directory: string;\n manifest_path: string;\n name: string | null;\n version: string | null;\n entry: string | null;\n priority: number | null;\n entry_path: string | null;\n enabled: boolean | null;\n status: ExtensionStatus;\n}\n\nexport interface EffectiveExtension {\n layer: ExtensionLayer;\n directory: string;\n manifest_path: string;\n name: string;\n version: string;\n entry: string;\n priority: number;\n entry_path: string;\n manifest_version?: number;\n trusted?: boolean;\n provenance?: ExtensionProvenanceMetadata;\n sandbox_profile?: ExtensionSandboxProfile;\n permissions?: ExtensionRuntimePermissionDeclaration;\n capabilities?: string[];\n}\n\nexport interface ExtensionDiscoveryResult {\n disabled_by_flag: boolean;\n roots: {\n global: string;\n project: string;\n };\n configured_enabled: string[];\n configured_disabled: string[];\n discovered: ExtensionDiagnostic[];\n effective: EffectiveExtension[];\n warnings: string[];\n policy: ExtensionGovernancePolicy;\n}\n\nexport interface LoadedExtension extends EffectiveExtension {\n module: unknown;\n}\n\nexport interface FailedExtensionLoad {\n layer: ExtensionLayer;\n name: string;\n entry_path: string;\n error: string;\n}\n\nexport interface ExtensionLoadResult extends ExtensionDiscoveryResult {\n loaded: LoadedExtension[];\n failed: FailedExtensionLoad[];\n}\n\nexport interface BeforeCommandHookContext {\n command: string;\n args: string[];\n options?: Record<string, unknown>;\n global?: GlobalOptions;\n pm_root: string;\n}\n\nexport interface AfterCommandHookContext extends BeforeCommandHookContext {\n ok: boolean;\n error?: string;\n result?: unknown;\n}\n\nexport interface OnWriteHookContext {\n path: string;\n scope: \"project\" | \"global\";\n op: string;\n}\n\nexport interface OnReadHookContext {\n path: string;\n scope: \"project\" | \"global\";\n}\n\nexport interface OnIndexHookContext {\n mode: string;\n total_items?: number;\n}\n\nexport type BeforeCommandHook = (context: BeforeCommandHookContext) => Promise<void> | void;\nexport type AfterCommandHook = (context: AfterCommandHookContext) => Promise<void> | void;\nexport type OnWriteHook = (context: OnWriteHookContext) => Promise<void> | void;\nexport type OnReadHook = (context: OnReadHookContext) => Promise<void> | void;\nexport type OnIndexHook = (context: OnIndexHookContext) => Promise<void> | void;\nexport type OutputRendererFormat = \"toon\" | \"json\";\nexport type CommandOverride = (context: CommandOverrideContext) => unknown;\nexport type RendererOverride = (context: RendererOverrideContext) => string;\nexport type CommandHandler = (context: CommandHandlerContext) => unknown;\nexport type ParserOverride = (context: ParserOverrideContext) => ParserOverrideDelta | Promise<ParserOverrideDelta>;\nexport type PreflightOverride = (context: PreflightOverrideContext) => PreflightOverrideDelta | Promise<PreflightOverrideDelta>;\nexport type ServiceOverride = (context: ServiceOverrideContext) => unknown;\n\nexport interface RegisteredExtensionHook<THook> {\n layer: ExtensionLayer;\n name: string;\n run: THook;\n}\n\nexport interface ExtensionHookRegistry {\n beforeCommand: Array<RegisteredExtensionHook<BeforeCommandHook>>;\n afterCommand: Array<RegisteredExtensionHook<AfterCommandHook>>;\n onWrite: Array<RegisteredExtensionHook<OnWriteHook>>;\n onRead: Array<RegisteredExtensionHook<OnReadHook>>;\n onIndex: Array<RegisteredExtensionHook<OnIndexHook>>;\n}\n\nexport interface CommandOverrideContext {\n command: string;\n args: string[];\n options?: Record<string, unknown>;\n global?: GlobalOptions;\n pm_root: string;\n result: unknown;\n}\n\nexport interface RendererOverrideContext {\n format: OutputRendererFormat;\n command?: string;\n args?: string[];\n options?: Record<string, unknown>;\n global?: GlobalOptions;\n pm_root?: string;\n result: unknown;\n}\n\nexport interface CommandHandlerContext {\n command: string;\n args: string[];\n options: Record<string, unknown>;\n global: GlobalOptions;\n pm_root: string;\n}\n\nexport interface ParserOverrideContext extends CommandHandlerContext {}\n\nexport interface ParserOverrideDelta {\n args?: string[];\n options?: Record<string, unknown>;\n global?: GlobalOptions;\n}\n\nexport interface PreflightOverrideContext extends CommandHandlerContext {\n decision: PreflightRuntimeDecision;\n}\n\nexport interface PreflightRuntimeDecision {\n enforce_item_format_gate: boolean;\n run_preflight_item_format_sync: boolean;\n run_extension_migrations: boolean;\n enforce_mandatory_migration_gate: boolean;\n}\n\nexport interface PreflightOverrideDelta extends ParserOverrideDelta {\n enforce_item_format_gate?: boolean;\n run_preflight_item_format_sync?: boolean;\n run_extension_migrations?: boolean;\n enforce_mandatory_migration_gate?: boolean;\n}\n\nexport interface ServiceOverrideContext {\n service: ExtensionServiceName;\n command?: string;\n args?: string[];\n options?: Record<string, unknown>;\n global?: GlobalOptions;\n pm_root?: string;\n payload: unknown;\n}\n\nexport interface ExtensionCommandArgumentDefinition {\n name: string;\n required?: boolean;\n variadic?: boolean;\n description?: string;\n}\n\nexport interface CommandDefinition {\n name: string;\n run?: CommandHandler;\n /**\n * @deprecated Use `run` instead. This alias remains for backward compatibility.\n */\n handler?: CommandHandler;\n action?: string;\n description?: string;\n intent?: string;\n examples?: string[];\n failure_hints?: string[];\n arguments?: ExtensionCommandArgumentDefinition[];\n flags?: FlagDefinition[];\n}\n\nexport type FlagValueType = \"string\" | \"number\" | \"boolean\";\n\nexport interface FlagDefinition {\n long?: string;\n short?: string;\n value_name?: string;\n description?: string;\n required?: boolean;\n enabled?: boolean;\n visible?: boolean;\n type?: FlagValueType;\n value_type?: FlagValueType;\n [key: string]: unknown;\n}\n\nexport interface SchemaFieldDefinition {\n name: string;\n type: string;\n optional?: boolean;\n [key: string]: unknown;\n}\n\nexport interface SchemaItemTypeCommandOptionPolicyDefinition {\n command: string;\n option: string;\n enabled?: boolean;\n required?: boolean;\n visible?: boolean;\n [key: string]: unknown;\n}\n\nexport interface SchemaItemTypeOptionDefinition {\n key: string;\n values?: string[];\n required?: boolean;\n aliases?: string[];\n [key: string]: unknown;\n}\n\nexport interface SchemaItemTypeDefinition {\n name: string;\n folder?: string;\n aliases?: string[];\n required_create_fields?: string[];\n required_create_repeatables?: string[];\n command_option_policies?: SchemaItemTypeCommandOptionPolicyDefinition[];\n options?: SchemaItemTypeOptionDefinition[];\n [key: string]: unknown;\n}\n\nexport interface SchemaMigrationRunContext {\n id: string;\n command: \"migration\";\n layer: ExtensionLayer;\n extension: string;\n pm_root: string;\n status: string;\n}\n\nexport type SchemaMigrationRunner = (context: SchemaMigrationRunContext) => unknown | Promise<unknown>;\n\nexport interface SchemaMigrationDefinition {\n id?: string;\n description?: string;\n status?: string;\n mandatory?: boolean;\n run?: SchemaMigrationRunner;\n [key: string]: unknown;\n}\n\nexport interface ImportExportContext {\n registration: string;\n action: \"import\" | \"export\";\n command: string;\n args: string[];\n options: Record<string, unknown>;\n global: GlobalOptions;\n pm_root: string;\n}\n\nexport type Importer = (context: ImportExportContext) => unknown | Promise<unknown>;\nexport type Exporter = (context: ImportExportContext) => unknown | Promise<unknown>;\n\nexport type ExtensionSearchMode = \"keyword\" | \"semantic\" | \"hybrid\";\n\nexport interface SearchProviderQueryContext {\n query: string;\n mode: ExtensionSearchMode;\n tokens: string[];\n options: Record<string, unknown>;\n settings: PmSettings;\n documents: ItemDocument[];\n [key: string]: unknown;\n}\n\nexport interface SearchProviderHit {\n id: string;\n score: number;\n matched_fields?: string[];\n [key: string]: unknown;\n}\n\nexport type SearchProviderQueryResult = SearchProviderHit[] | { hits?: SearchProviderHit[] };\n\nexport interface SearchProviderEmbedBatchContext {\n inputs: string[];\n settings: PmSettings;\n model: string;\n [key: string]: unknown;\n}\n\nexport interface SearchProviderEmbedContext {\n input: string;\n settings: PmSettings;\n model: string;\n [key: string]: unknown;\n}\n\nexport interface SearchProviderDefinition {\n name: string;\n query?: (context: SearchProviderQueryContext) => SearchProviderQueryResult | Promise<SearchProviderQueryResult>;\n embedBatch?: (context: SearchProviderEmbedBatchContext) => number[][] | Promise<number[][]>;\n embed_batch?: (context: SearchProviderEmbedBatchContext) => number[][] | Promise<number[][]>;\n embed?: (context: SearchProviderEmbedContext) => number[] | Promise<number[]>;\n [key: string]: unknown;\n}\n\nexport interface VectorStoreQueryHit {\n id: string;\n score: number;\n payload?: Record<string, unknown>;\n [key: string]: unknown;\n}\n\nexport interface VectorStoreQueryContext {\n vector: number[];\n limit: number;\n settings: PmSettings;\n [key: string]: unknown;\n}\n\nexport interface VectorStoreUpsertPoint {\n id: string;\n vector: number[];\n payload?: Record<string, unknown>;\n [key: string]: unknown;\n}\n\nexport interface VectorStoreUpsertContext {\n points: VectorStoreUpsertPoint[];\n settings: PmSettings;\n [key: string]: unknown;\n}\n\nexport interface VectorStoreDeleteContext {\n ids: string[];\n settings: PmSettings;\n [key: string]: unknown;\n}\n\nexport interface VectorStoreAdapterDefinition {\n name: string;\n query?: (context: VectorStoreQueryContext) => VectorStoreQueryHit[] | Promise<VectorStoreQueryHit[]>;\n upsert?: (context: VectorStoreUpsertContext) => unknown | Promise<unknown>;\n delete?: (context: VectorStoreDeleteContext) => unknown | Promise<unknown>;\n [key: string]: unknown;\n}\n\nexport interface RegisteredExtensionCommandOverride {\n layer: ExtensionLayer;\n name: string;\n command: string;\n run: CommandOverride;\n}\n\nexport interface RegisteredExtensionCommandHandler {\n layer: ExtensionLayer;\n name: string;\n command: string;\n run: CommandHandler;\n}\n\nexport interface RegisteredExtensionParserOverride {\n layer: ExtensionLayer;\n name: string;\n command: string;\n run: ParserOverride;\n}\n\nexport interface RegisteredExtensionPreflightOverride {\n layer: ExtensionLayer;\n name: string;\n run: PreflightOverride;\n}\n\nexport interface RegisteredExtensionServiceOverride {\n layer: ExtensionLayer;\n name: string;\n service: ExtensionServiceName;\n run: ServiceOverride;\n}\n\nexport interface RegisteredExtensionRendererOverride {\n layer: ExtensionLayer;\n name: string;\n format: OutputRendererFormat;\n run: RendererOverride;\n}\n\nexport interface ExtensionCommandRegistry {\n overrides: RegisteredExtensionCommandOverride[];\n handlers: RegisteredExtensionCommandHandler[];\n}\n\nexport interface ExtensionParserRegistry {\n overrides: RegisteredExtensionParserOverride[];\n}\n\nexport interface ExtensionPreflightRegistry {\n overrides: RegisteredExtensionPreflightOverride[];\n}\n\nexport interface ExtensionServiceRegistry {\n overrides: RegisteredExtensionServiceOverride[];\n}\n\nexport interface ExtensionRendererRegistry {\n overrides: RegisteredExtensionRendererOverride[];\n}\n\nexport interface RegisteredExtensionFlagDefinitions {\n layer: ExtensionLayer;\n name: string;\n target_command: string;\n flags: FlagDefinition[];\n}\n\nexport interface RegisteredExtensionCommandDefinition {\n layer: ExtensionLayer;\n name: string;\n command: string;\n action: string;\n description?: string;\n intent?: string;\n examples: string[];\n failure_hints: string[];\n arguments: ExtensionCommandArgumentDefinition[];\n}\n\nexport interface RegisteredExtensionSchemaFieldDefinitions {\n layer: ExtensionLayer;\n name: string;\n fields: SchemaFieldDefinition[];\n}\n\nexport interface RegisteredExtensionSchemaItemTypeDefinitions {\n layer: ExtensionLayer;\n name: string;\n types: SchemaItemTypeDefinition[];\n}\n\nexport interface RegisteredExtensionSchemaMigrationDefinition {\n layer: ExtensionLayer;\n name: string;\n definition: SchemaMigrationDefinition;\n runtime_definition: SchemaMigrationDefinition;\n}\n\nexport interface RegisteredExtensionImporter {\n layer: ExtensionLayer;\n name: string;\n importer: string;\n}\n\nexport interface RegisteredExtensionExporter {\n layer: ExtensionLayer;\n name: string;\n exporter: string;\n}\n\nexport interface RegisteredExtensionSearchProvider {\n layer: ExtensionLayer;\n name: string;\n definition: SearchProviderDefinition;\n runtime_definition: SearchProviderDefinition;\n}\n\nexport interface RegisteredExtensionVectorStoreAdapter {\n layer: ExtensionLayer;\n name: string;\n definition: VectorStoreAdapterDefinition;\n runtime_definition: VectorStoreAdapterDefinition;\n}\n\nexport interface ExtensionRegistrationRegistry {\n commands: RegisteredExtensionCommandDefinition[];\n flags: RegisteredExtensionFlagDefinitions[];\n item_fields: RegisteredExtensionSchemaFieldDefinitions[];\n item_types: RegisteredExtensionSchemaItemTypeDefinitions[];\n migrations: RegisteredExtensionSchemaMigrationDefinition[];\n importers: RegisteredExtensionImporter[];\n exporters: RegisteredExtensionExporter[];\n search_providers: RegisteredExtensionSearchProvider[];\n vector_store_adapters: RegisteredExtensionVectorStoreAdapter[];\n}\n\nexport interface ExtensionRegistrationCounts {\n commands: number;\n flags: number;\n item_fields: number;\n item_types: number;\n migrations: number;\n importers: number;\n exporters: number;\n search_providers: number;\n vector_store_adapters: number;\n}\n\nexport interface ExtensionApi {\n registerCommand(command: string, override: CommandOverride): void;\n registerCommand(definition: CommandDefinition): void;\n registerParser(command: string, override: ParserOverride): void;\n registerPreflight(override: PreflightOverride): void;\n registerService(service: ExtensionServiceName, override: ServiceOverride): void;\n registerFlags(targetCommand: string, flags: FlagDefinition[]): void;\n registerItemFields(fields: SchemaFieldDefinition[]): void;\n registerItemTypes(types: SchemaItemTypeDefinition[]): void;\n registerMigration(definition: SchemaMigrationDefinition): void;\n registerRenderer(format: OutputRendererFormat, renderer: RendererOverride): void;\n registerImporter(name: string, importer: Importer): void;\n registerExporter(name: string, exporter: Exporter): void;\n registerSearchProvider(provider: SearchProviderDefinition): void;\n registerVectorStoreAdapter(adapter: VectorStoreAdapterDefinition): void;\n hooks: {\n beforeCommand(hook: BeforeCommandHook): void;\n afterCommand(hook: AfterCommandHook): void;\n onWrite(hook: OnWriteHook): void;\n onRead(hook: OnReadHook): void;\n onIndex(hook: OnIndexHook): void;\n };\n}\n\nexport interface FailedExtensionActivation {\n layer: ExtensionLayer;\n name: string;\n entry_path: string;\n error: string;\n trace?: ExtensionActivationFailureTrace;\n}\n\nexport interface ExtensionActivationFailureTrace {\n method: string;\n registration_index: number;\n command?: string;\n expected_schema: string;\n received?: unknown;\n hint?: string;\n}\n\nexport interface ExtensionActivationResult {\n hooks: ExtensionHookRegistry;\n commands: ExtensionCommandRegistry;\n parsers: ExtensionParserRegistry;\n preflight: ExtensionPreflightRegistry;\n services: ExtensionServiceRegistry;\n renderers: ExtensionRendererRegistry;\n registrations: ExtensionRegistrationRegistry;\n failed: FailedExtensionActivation[];\n warnings: string[];\n hook_counts: {\n before_command: number;\n after_command: number;\n on_write: number;\n on_read: number;\n on_index: number;\n };\n command_override_count: number;\n command_handler_count: number;\n parser_override_count: number;\n preflight_override_count: number;\n service_override_count: number;\n renderer_override_count: number;\n registration_counts: ExtensionRegistrationCounts;\n}\n\nexport interface ExtensionCandidate {\n layer: ExtensionLayer;\n directory: string;\n manifest_path: string;\n entry_path: string;\n manifest: ExtensionManifest;\n}\n\nexport interface ExtensionLayerScanResult {\n diagnostics: ExtensionDiagnostic[];\n warnings: string[];\n candidates: ExtensionCandidate[];\n}\n\nexport interface ScannedExtensionDirectory {\n diagnostic: ExtensionDiagnostic;\n warnings: string[];\n candidate: ExtensionCandidate | null;\n}\n\nexport interface LegacyExtensionCapabilityAliasMapping {\n alias: string;\n target: ExtensionCapability;\n}\n\nexport interface DiscoverExtensionsOptions {\n pmRoot: string;\n settings: PmSettings;\n cwd?: string;\n noExtensions?: boolean;\n reload_token?: string;\n cache_bust?: boolean;\n}\n\nexport interface ActivatableExtension {\n activate: (api: ExtensionApi) => void | Promise<void>;\n}\n\nexport interface ServiceOverrideResult {\n handled: boolean;\n result: unknown;\n warnings: string[];\n}\n\nexport interface CommandOverrideResult {\n overridden: boolean;\n result: unknown;\n warnings: string[];\n}\n\nexport interface CommandHandlerResult {\n handled: boolean;\n result: unknown;\n warnings: string[];\n /**\n * Human-readable, single-line, length-bounded message describing why an\n * extension command handler failed. Surfaced to the user/CI so the real cause\n * (e.g. \"Changelog is out of date: CHANGELOG.md\") is visible instead of only\n * the opaque `extension_command_handler_failed` warning code.\n */\n errorMessage?: string;\n}\n\nexport interface ParserOverrideResult {\n overridden: boolean;\n context: CommandHandlerContext;\n warnings: string[];\n}\n\nexport interface PreflightOverrideResult {\n overridden: boolean;\n context: CommandHandlerContext;\n decision: PreflightRuntimeDecision;\n warnings: string[];\n}\n\nexport interface RendererOverrideResult {\n overridden: boolean;\n rendered: string | null;\n warnings: string[];\n}\n\nexport interface UnknownExtensionCapabilityWarningDetails {\n layer: ExtensionLayer;\n name: string;\n capability: string;\n allowed_capabilities: string[];\n capability_contract_version: number;\n suggested_capability?: string;\n suggestion_source?: \"legacy_alias\" | \"nearest_match\";\n legacy_alias_target?: string;\n}\n", "import type {\n BuiltinItemType,\n GovernancePreset,\n GovernanceSettings,\n ItemFrontMatter,\n PmSettings,\n RuntimeStatusDefinition,\n RuntimeWorkflowDefinition,\n} from \"../../types/index.js\";\nimport { createDefaultExtensionGovernancePolicy } from \"../extensions/extension-types.js\";\n\n/**\n * Canonical default lifecycle status model and workflow role mapping.\n *\n * Single source of truth: `SETTINGS_DEFAULTS.schema` references these, and\n * `src/core/schema/runtime-schema.ts` re-exports them as\n * `DEFAULT_RUNTIME_STATUS_DEFINITIONS` / `DEFAULT_RUNTIME_WORKFLOW`.\n */\nexport const DEFAULT_STATUS_DEFINITIONS: ReadonlyArray<RuntimeStatusDefinition> = Object.freeze([\n {\n id: \"draft\",\n roles: [\"draft\"],\n },\n {\n id: \"open\",\n roles: [\"active\", \"default_open\"],\n },\n {\n id: \"in_progress\",\n aliases: [\"in-progress\"],\n roles: [\"active\"],\n },\n {\n id: \"blocked\",\n roles: [\"blocked\"],\n },\n {\n id: \"closed\",\n roles: [\"terminal\", \"terminal_done\", \"default_close\"],\n },\n {\n id: \"canceled\",\n aliases: [\"cancelled\"],\n roles: [\"terminal\", \"terminal_canceled\", \"default_cancel\"],\n },\n]);\n\nexport const DEFAULT_WORKFLOW_DEFINITION: RuntimeWorkflowDefinition = Object.freeze({\n draft_status: \"draft\",\n open_status: \"open\",\n in_progress_status: \"in_progress\",\n blocked_status: \"blocked\",\n close_status: \"closed\",\n canceled_status: \"canceled\",\n});\n\nexport const PM_DIRNAME = \".agents/pm\";\nexport const SETTINGS_FILENAME = \"settings.json\";\n\nexport const PM_CORE_REQUIRED_SUBDIRS = [\n \"\",\n \"epics\",\n \"features\",\n \"tasks\",\n \"chores\",\n \"issues\",\n \"schema\",\n \"history\",\n \"index\",\n \"search\",\n \"extensions\",\n \"locks\",\n] as const;\n\nexport const PM_OPTIONAL_TYPE_SUBDIRS = [\n \"decisions\",\n \"events\",\n \"reminders\",\n \"milestones\",\n \"meetings\",\n \"plans\",\n] as const;\n\nexport const PM_REQUIRED_SUBDIRS = [...PM_CORE_REQUIRED_SUBDIRS, ...PM_OPTIONAL_TYPE_SUBDIRS] as const;\n\nexport const TYPE_TO_FOLDER: Record<BuiltinItemType, string> = {\n Epic: \"epics\",\n Feature: \"features\",\n Task: \"tasks\",\n Chore: \"chores\",\n Issue: \"issues\",\n Decision: \"decisions\",\n Event: \"events\",\n Reminder: \"reminders\",\n Milestone: \"milestones\",\n Meeting: \"meetings\",\n Plan: \"plans\",\n};\n\nexport const FRONT_MATTER_KEY_ORDER: ReadonlyArray<string> = [\n \"id\",\n \"title\",\n \"description\",\n \"type\",\n \"source_type\",\n \"type_options\",\n \"status\",\n \"priority\",\n \"tags\",\n \"created_at\",\n \"updated_at\",\n \"deadline\",\n \"reminders\",\n \"events\",\n \"closed_at\",\n \"assignee\",\n \"source_owner\",\n \"author\",\n \"estimated_minutes\",\n \"acceptance_criteria\",\n \"design\",\n \"external_ref\",\n \"definition_of_ready\",\n \"order\",\n \"goal\",\n \"objective\",\n \"value\",\n \"impact\",\n \"outcome\",\n \"why_now\",\n \"parent\",\n \"reviewer\",\n \"risk\",\n \"confidence\",\n \"sprint\",\n \"release\",\n \"blocked_by\",\n \"blocked_reason\",\n \"unblock_note\",\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 \"dependencies\",\n \"comments\",\n \"notes\",\n \"learnings\",\n \"files\",\n \"tests\",\n \"test_runs\",\n \"docs\",\n \"close_reason\",\n \"plan_mode\",\n \"plan_scope\",\n \"plan_harness\",\n \"plan_resume_context\",\n \"plan_validation\",\n \"plan_decisions\",\n \"plan_discoveries\",\n \"plan_steps\",\n];\n\ntype BuiltinGovernancePreset = Exclude<GovernancePreset, \"custom\">;\n\nexport const GOVERNANCE_PRESET_DEFAULTS: Record<BuiltinGovernancePreset, Omit<GovernanceSettings, \"preset\">> = {\n minimal: {\n ownership_enforcement: \"none\",\n create_mode_default: \"progressive\",\n close_validation_default: \"off\",\n parent_reference: \"warn\",\n metadata_profile: \"core\",\n force_required_for_stale_lock: false,\n },\n default: {\n ownership_enforcement: \"warn\",\n create_mode_default: \"progressive\",\n close_validation_default: \"warn\",\n parent_reference: \"warn\",\n metadata_profile: \"core\",\n force_required_for_stale_lock: true,\n },\n strict: {\n ownership_enforcement: \"strict\",\n create_mode_default: \"strict\",\n close_validation_default: \"strict\",\n parent_reference: \"strict_error\",\n metadata_profile: \"strict\",\n force_required_for_stale_lock: true,\n },\n};\n\nexport const DEFAULT_VALIDATE_STALE_BLOCKER_REASON_PATTERNS = [\n \"no active blocker\",\n \"ready for planned execution sequencing\",\n \"work completed\",\n \"work is closed\",\n] as const;\n\nexport const DEFAULT_VALIDATE_CLOSURE_LIKE_METADATA_FIELD_PATTERNS = {\n blocked_reason: [\"no active blocker because work is closed\", \"work is closed\"],\n resolution: [\"closed with implementation evidence\", \"closed with verification evidence\", \"work completed and recorded\", \"work is closed\"],\n actual_result: [\"closed and recorded\", \"work completed\", \"work completed and recorded\"],\n} as const;\n\nfunction cloneOptionalArray<T>(values: readonly T[] | undefined): T[] | undefined {\n return values ? [...values] : undefined;\n}\n\nexport const SETTINGS_DEFAULTS: PmSettings = {\n version: 1,\n id_prefix: \"pm-\",\n author_default: \"\",\n item_format: \"toon\",\n locks: {\n ttl_seconds: 1800,\n },\n output: {\n default_format: \"toon\",\n },\n history: {\n missing_stream: \"auto_create\",\n },\n validation: {\n sprint_release_format: \"warn\",\n parent_reference: \"warn\",\n metadata_profile: \"core\",\n metadata_required_fields: [],\n lifecycle_stale_blocker_reason_patterns: [...DEFAULT_VALIDATE_STALE_BLOCKER_REASON_PATTERNS],\n lifecycle_closure_like_blocked_reason_patterns: [\n ...DEFAULT_VALIDATE_CLOSURE_LIKE_METADATA_FIELD_PATTERNS.blocked_reason,\n ],\n lifecycle_closure_like_resolution_patterns: [...DEFAULT_VALIDATE_CLOSURE_LIKE_METADATA_FIELD_PATTERNS.resolution],\n lifecycle_closure_like_actual_result_patterns: [\n ...DEFAULT_VALIDATE_CLOSURE_LIKE_METADATA_FIELD_PATTERNS.actual_result,\n ],\n },\n governance: {\n preset: \"minimal\",\n ...GOVERNANCE_PRESET_DEFAULTS.minimal,\n },\n workflow: {\n definition_of_done: [],\n },\n testing: {\n record_results_to_items: false,\n },\n telemetry: {\n enabled: true,\n first_run_prompt_completed: false,\n capture_level: \"redacted\",\n endpoint: \"https://pm-cli.unbrained.dev/v1/events\",\n installation_id: \"\",\n retention_days: 365,\n },\n agent_guidance: {\n prompt_completed: false,\n declined: false,\n declined_at: \"\",\n template_version: 1,\n last_checked_files: [],\n },\n item_types: {\n definitions: [],\n },\n schema: {\n version: 1,\n files: {\n types: \"schema/types.json\",\n statuses: \"schema/statuses.json\",\n fields: \"schema/fields.json\",\n workflows: \"schema/workflows.json\",\n },\n statuses: DEFAULT_STATUS_DEFINITIONS.map((definition) => ({\n ...definition,\n aliases: cloneOptionalArray(definition.aliases),\n roles: cloneOptionalArray(definition.roles),\n })),\n fields: [],\n workflow: { ...DEFAULT_WORKFLOW_DEFINITION },\n unknown_field_policy: \"allow\",\n },\n extensions: {\n enabled: [],\n disabled: [],\n policy: createDefaultExtensionGovernancePolicy(),\n },\n search: {\n score_threshold: 0,\n hybrid_semantic_weight: 0.7,\n max_results: 50,\n embedding_model: \"\",\n embedding_batch_size: 32,\n embedding_timeout_ms: 30_000,\n scanner_max_batch_retries: 3,\n provider: \"\",\n mutation_refresh_policy: \"semantic_configured\",\n },\n providers: {\n openai: {\n base_url: \"\",\n api_key: \"\",\n model: \"\",\n },\n ollama: {\n base_url: \"\",\n model: \"\",\n },\n },\n context: {\n default_depth: \"brief\",\n activity_limit: 10,\n stale_threshold_days: 7,\n sections: {\n hierarchy: true,\n activity: true,\n progress: true,\n blockers: true,\n files: true,\n workload: true,\n staleness: true,\n tests: true,\n },\n },\n vector_store: {\n adapter: \"\",\n qdrant: {\n url: \"\",\n api_key: \"\",\n },\n lancedb: {\n path: \"\",\n },\n },\n};\n\nexport const EMPTY_CANONICAL_DOCUMENT = {\n metadata: {},\n body: \"\",\n};\n\nexport const EXIT_CODE = {\n SUCCESS: 0,\n GENERIC_FAILURE: 1,\n USAGE: 2,\n NOT_FOUND: 3,\n CONFLICT: 4,\n DEPENDENCY_FAILED: 5,\n} as const;\n\nexport type TelemetryErrorCategory = \"usage\" | \"validation\" | \"conflict\" | \"runtime\" | \"unknown\";\n\nexport const TELEMETRY_ERROR_CATEGORY_BY_CODE: Readonly<Record<string, TelemetryErrorCategory>> = Object.freeze({\n unknown_command: \"usage\",\n unknown_option: \"usage\",\n missing_required_option: \"usage\",\n missing_required_argument: \"usage\",\n invalid_command_usage: \"usage\",\n invalid_argument_value: \"validation\",\n health_findings: \"validation\",\n validation_findings: \"validation\",\n close_through_update: \"validation\",\n no_update_fields: \"validation\",\n unsupported_update_option: \"validation\",\n tracker_not_initialized: \"validation\",\n item_not_found: \"validation\",\n ownership_conflict: \"conflict\",\n lock_conflict: \"conflict\",\n terminal_state_conflict: \"conflict\",\n dependency_failed: \"runtime\",\n command_failed: \"runtime\",\n unknown_error: \"runtime\",\n});\n\nexport function resolveTelemetryErrorCategory(errorCode: string | undefined): TelemetryErrorCategory {\n const normalized = (errorCode ?? \"\").trim().toLowerCase();\n if (normalized.length === 0) {\n return \"unknown\";\n }\n const explicit = TELEMETRY_ERROR_CATEGORY_BY_CODE[normalized];\n if (typeof explicit === \"string\") {\n return explicit;\n }\n if (normalized.includes(\"conflict\") || normalized.includes(\"locked\")) {\n return \"conflict\";\n }\n if (normalized.startsWith(\"unknown_\") || normalized.startsWith(\"missing_required_\")) {\n return \"usage\";\n }\n if (normalized.startsWith(\"invalid_\") || normalized.endsWith(\"_not_found\") || normalized.includes(\"validation\")) {\n return \"validation\";\n }\n if (normalized.endsWith(\"_error\") || normalized.endsWith(\"_failed\")) {\n return \"runtime\";\n }\n return \"unknown\";\n}\n", "import { statSync } from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport { PM_DIRNAME, SETTINGS_FILENAME, TYPE_TO_FOLDER } from \"../shared/constants.js\";\nimport type { ItemFormat, ItemType } from \"../../types/index.js\";\n\nexport const ITEM_FILE_EXTENSION_BY_FORMAT: Record<ItemFormat, \".md\" | \".toon\"> = {\n json_markdown: \".md\",\n toon: \".toon\",\n};\n\nconst ITEM_FORMAT_BY_EXTENSION = {\n \".md\": \"json_markdown\",\n \".toon\": \"toon\",\n} as const satisfies Record<string, ItemFormat>;\n\nexport const ITEM_FILE_EXTENSIONS: Array<keyof typeof ITEM_FORMAT_BY_EXTENSION> = [\".md\", \".toon\"];\n\nfunction pathExists(pathValue: string): boolean {\n try {\n statSync(pathValue);\n return true;\n } catch {\n return false;\n }\n}\n\nfunction discoverPmRootFromAncestors(cwd: string): string | undefined {\n let current = path.resolve(cwd);\n while (true) {\n const candidateRoot = path.join(current, PM_DIRNAME);\n const candidateSettingsPath = path.join(candidateRoot, SETTINGS_FILENAME);\n if (pathExists(candidateSettingsPath)) {\n return candidateRoot;\n }\n const parent = path.dirname(current);\n if (parent === current) {\n return undefined;\n }\n current = parent;\n }\n}\n\nexport function resolvePmRoot(cwd: string, cliPath?: string): string {\n const envPath = process.env.PM_PATH;\n const explicitPath = cliPath?.trim() || envPath?.trim();\n if (explicitPath) {\n return path.resolve(cwd, explicitPath);\n }\n const discoveredRoot = discoverPmRootFromAncestors(cwd);\n if (discoveredRoot) {\n return discoveredRoot;\n }\n const selected = PM_DIRNAME;\n return path.resolve(cwd, selected);\n}\n\nexport function resolveGlobalPmRoot(cwd: string): string {\n const envPath = process.env.PM_GLOBAL_PATH?.trim();\n const selected = envPath && envPath.length > 0 ? envPath : path.join(os.homedir(), \".pm-cli\");\n return path.resolve(cwd, selected);\n}\n\nexport function getSettingsPath(pmRoot: string): string {\n return path.join(pmRoot, SETTINGS_FILENAME);\n}\n\nfunction deriveDefaultTypeFolder(type: string): string {\n const normalized = type\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\");\n if (normalized.length === 0) {\n return \"items\";\n }\n return normalized.endsWith(\"s\") ? normalized : `${normalized}s`;\n}\n\nexport function getTypeDirPath(pmRoot: string, type: ItemType, typeToFolder: Record<string, string> = TYPE_TO_FOLDER): string {\n const folder = typeToFolder[type] ?? deriveDefaultTypeFolder(type);\n return path.join(pmRoot, folder);\n}\n\nexport function getItemPath(\n pmRoot: string,\n type: ItemType,\n id: string,\n itemFormat: ItemFormat = \"toon\",\n typeToFolder: Record<string, string> = TYPE_TO_FOLDER,\n): string {\n return path.join(getTypeDirPath(pmRoot, type, typeToFolder), `${id}${ITEM_FILE_EXTENSION_BY_FORMAT[itemFormat]}`);\n}\n\nexport function getItemFormatFromPath(itemPath: string): ItemFormat | null {\n const extension = path.extname(itemPath).toLowerCase() as keyof typeof ITEM_FORMAT_BY_EXTENSION;\n return ITEM_FORMAT_BY_EXTENSION[extension] ?? null;\n}\n\nexport function getHistoryPath(pmRoot: string, id: string): string {\n return path.join(pmRoot, \"history\", `${id}.jsonl`);\n}\n\nexport function getLockPath(pmRoot: string, id: string): string {\n return path.join(pmRoot, \"locks\", `${id}.lock`);\n}\n\nexport function getRuntimePath(pmRoot: string): string {\n return path.join(pmRoot, \"runtime\");\n}\n\nexport function getTestRunsPath(pmRoot: string): string {\n return path.join(getRuntimePath(pmRoot), \"test-runs\");\n}\n\nexport function getTestRunsRecordsPath(pmRoot: string): string {\n return path.join(getTestRunsPath(pmRoot), \"runs\");\n}\n\nexport function getTestRunRecordPath(pmRoot: string, runId: string): string {\n return path.join(getTestRunsRecordsPath(pmRoot), `${runId}.json`);\n}\n\nexport function getTestRunsStdoutPath(pmRoot: string): string {\n return path.join(getTestRunsPath(pmRoot), \"stdout\");\n}\n\nexport function getTestRunsStderrPath(pmRoot: string): string {\n return path.join(getTestRunsPath(pmRoot), \"stderr\");\n}\n\nexport function getTestRunStdoutPath(pmRoot: string, runId: string): string {\n return path.join(getTestRunsStdoutPath(pmRoot), `${runId}.log`);\n}\n\nexport function getTestRunStderrPath(pmRoot: string, runId: string): string {\n return path.join(getTestRunsStderrPath(pmRoot), `${runId}.log`);\n}\n\nexport function getTestRunsResultsPath(pmRoot: string): string {\n return path.join(getTestRunsPath(pmRoot), \"results\");\n}\n\nexport function getTestRunResultPath(pmRoot: string, runId: string): string {\n return path.join(getTestRunsResultsPath(pmRoot), `${runId}.json`);\n}\n", "/**\n * Common primitive utility functions shared across core modules.\n *\n * These reduce duplication of trivial helpers like string-presence checks,\n * error message extraction, and numeric array guards that were previously\n * duplicated in providers.ts, vector-stores.ts, lock.ts, cache.ts, and\n * several CLI command modules.\n */\n\nexport function toNonEmptyString(value: unknown): string | null {\n if (typeof value !== \"string\") {\n return null;\n }\n const normalized = value.trim();\n return normalized.length > 0 ? normalized : null;\n}\n\nexport function toNonEmptyStringOrUndefined(value: unknown): string | undefined {\n const result = toNonEmptyString(value);\n return result ?? undefined;\n}\n\nexport function trimTrailingSlashes(value: string): string {\n return value.replaceAll(/\\/+$/g, \"\");\n}\n\nexport function isFiniteNumberArray(value: unknown): value is number[] {\n return Array.isArray(value) && value.every((entry) => typeof entry === \"number\" && Number.isFinite(entry));\n}\n\nexport function toErrorMessage(error: unknown): string {\n if (error instanceof Error) {\n const message = error.message.trim();\n return message.length > 0 ? message : error.name;\n }\n return String(error);\n}\n\n/**\n * Narrow a value to a plain object, returning `null` for non-objects,\n * `null`, and arrays. Returns the original reference (no clone).\n *\n * Matches the historical `asRecord` in src/cli/main.ts.\n */\nexport function asRecordOrNull(value: unknown): Record<string, unknown> | null {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n return null;\n }\n return value as Record<string, unknown>;\n}\n\n/**\n * Narrow a value to a plain object, returning `null` only for non-objects and\n * `null` while accepting arrays (arrays are objects). Returns the original\n * reference (no clone).\n *\n * Matches the historical `asRecord` in src/core/extensions/loader.ts, which\n * intentionally omits the array guard.\n */\nexport function asRecordLoose(value: unknown): Record<string, unknown> | null {\n if (typeof value !== \"object\" || value === null) {\n return null;\n }\n return value as Record<string, unknown>;\n}\n\n/**\n * Narrow a value to a plain object, returning an empty object for non-objects,\n * `null`, and arrays. Returns a shallow clone of the source object.\n *\n * Matches the historical `asRecord` in src/mcp/server.ts.\n */\nexport function asRecordClone(value: unknown): Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value)\n ? ({ ...value } as Record<string, unknown>)\n : {};\n}\n", "import type { GlobalOptions } from \"../shared/command-types.js\";\n\nexport function normalizeCommandName(command: string): string {\n return command\n .trim()\n .toLowerCase()\n .split(/\\s+/)\n .filter((part) => part.length > 0)\n .join(\" \");\n}\n\nexport function defaultGlobalOptions(): GlobalOptions {\n return {\n json: false,\n quiet: false,\n noExtensions: false,\n profile: false,\n };\n}\n\nexport function cloneCommandOptionsSnapshot(options: Record<string, unknown> | undefined): Record<string, unknown> {\n return options ? cloneContextSnapshot(options) : {};\n}\n\nexport function cloneGlobalOptionsSnapshot(options: GlobalOptions | undefined): GlobalOptions {\n return options ? cloneContextSnapshot(options) : defaultGlobalOptions();\n}\n\nexport function cloneContextSnapshot<T>(value: T): T {\n return structuredClone(value);\n}\n", "import {\n cloneCommandOptionsSnapshot,\n cloneContextSnapshot,\n cloneGlobalOptionsSnapshot,\n normalizeCommandName,\n} from \"./extension-runtime-helpers.js\";\nimport type {\n RegisteredExtensionHook,\n ExtensionHookRegistry,\n BeforeCommandHookContext,\n AfterCommandHookContext,\n OnWriteHookContext,\n OnReadHookContext,\n OnIndexHookContext,\n ExtensionCommandRegistry,\n CommandHandlerContext,\n CommandHandlerResult,\n ExtensionParserRegistry,\n ParserOverrideContext,\n ParserOverrideResult,\n ExtensionPreflightRegistry,\n PreflightOverrideContext,\n PreflightOverrideResult,\n PreflightRuntimeDecision,\n ExtensionServiceRegistry,\n ServiceOverrideContext,\n ServiceOverrideResult,\n CommandOverrideContext,\n CommandOverrideResult,\n ExtensionRendererRegistry,\n RendererOverrideContext,\n RendererOverrideResult,\n} from \"./extension-types.js\";\n\ntype HookName = keyof ExtensionHookRegistry;\n\nasync function executeRegisteredHooks<TContext>(\n entries: Array<RegisteredExtensionHook<(context: TContext) => Promise<void> | void>>,\n hookName: HookName,\n context: TContext,\n): Promise<string[]> {\n const warnings: string[] = [];\n for (const entry of entries) {\n try {\n await entry.run(cloneContextSnapshot(context));\n } catch {\n warnings.push(`extension_hook_failed:${entry.layer}:${entry.name}:${hookName}`);\n }\n }\n return warnings;\n}\n\nexport async function runBeforeCommandHooks(\n hooks: ExtensionHookRegistry,\n context: BeforeCommandHookContext,\n): Promise<string[]> {\n return executeRegisteredHooks(hooks.beforeCommand, \"beforeCommand\", context);\n}\n\nexport async function runAfterCommandHooks(\n hooks: ExtensionHookRegistry,\n context: AfterCommandHookContext,\n): Promise<string[]> {\n return executeRegisteredHooks(hooks.afterCommand, \"afterCommand\", context);\n}\n\nexport async function runOnWriteHooks(hooks: ExtensionHookRegistry, context: OnWriteHookContext): Promise<string[]> {\n return executeRegisteredHooks(hooks.onWrite, \"onWrite\", context);\n}\n\nexport async function runOnReadHooks(hooks: ExtensionHookRegistry, context: OnReadHookContext): Promise<string[]> {\n return executeRegisteredHooks(hooks.onRead, \"onRead\", context);\n}\n\nexport async function runOnIndexHooks(hooks: ExtensionHookRegistry, context: OnIndexHookContext): Promise<string[]> {\n return executeRegisteredHooks(hooks.onIndex, \"onIndex\", context);\n}\n\n\n\n/**\n * Normalize an extension handler failure into a single-line, length-bounded\n * message so the real cause can be surfaced to the user/CI without leaking\n * multi-line stack noise or unbounded payloads.\n */\nfunction describeHandlerError(error: unknown): string {\n let raw = \"\";\n if (error instanceof Error && typeof error.message === \"string\") {\n raw = error.message;\n } else if (typeof error === \"string\") {\n raw = error;\n } else if (\n typeof error === \"object\" &&\n error !== null &&\n typeof (error as { message?: unknown }).message === \"string\"\n ) {\n // Extensions may throw plain/serialized objects that carry a message but do\n // not inherit from the base Error class.\n raw = (error as { message: string }).message;\n }\n const normalized = raw.replace(/\\s+/gu, \" \").trim();\n if (normalized.length === 0) {\n return \"\";\n }\n const maxLength = 300;\n return normalized.length > maxLength ? `${normalized.slice(0, maxLength - 1)}…` : normalized;\n}\n\nexport async function runCommandHandler(\n commands: ExtensionCommandRegistry,\n context: CommandHandlerContext,\n): Promise<CommandHandlerResult> {\n const command = normalizeCommandName(context.command);\n if (command.length === 0) {\n return {\n handled: false,\n result: null,\n warnings: [],\n };\n }\n\n const matched = [...commands.handlers].reverse().find((entry) => entry.command === command);\n if (!matched) {\n return {\n handled: false,\n result: null,\n warnings: [],\n };\n }\n\n try {\n const result = await matched.run({\n command,\n args: cloneContextSnapshot(context.args),\n options: cloneContextSnapshot(context.options),\n global: cloneContextSnapshot(context.global),\n pm_root: context.pm_root,\n });\n return {\n handled: true,\n result,\n warnings: [],\n };\n } catch (error: unknown) {\n const exitCode =\n typeof error === \"object\" && error !== null && \"exitCode\" in error\n ? (error as { exitCode?: unknown }).exitCode\n : undefined;\n if (typeof exitCode === \"number\" && Number.isFinite(exitCode)) {\n throw error;\n }\n return {\n handled: false,\n result: null,\n warnings: [`extension_command_handler_failed:${matched.layer}:${matched.name}:${matched.command}`],\n errorMessage: describeHandlerError(error),\n };\n }\n}\n\n\nexport async function runParserOverride(\n parsers: ExtensionParserRegistry,\n context: ParserOverrideContext,\n): Promise<ParserOverrideResult> {\n const command = normalizeCommandName(context.command);\n if (command.length === 0) {\n return {\n overridden: false,\n context: {\n command,\n args: cloneContextSnapshot(context.args),\n options: cloneCommandOptionsSnapshot(context.options),\n global: cloneGlobalOptionsSnapshot(context.global),\n pm_root: context.pm_root,\n },\n warnings: [],\n };\n }\n\n const matched = [...parsers.overrides].reverse().find((entry) => entry.command === command);\n if (!matched) {\n return {\n overridden: false,\n context: {\n command,\n args: cloneContextSnapshot(context.args),\n options: cloneCommandOptionsSnapshot(context.options),\n global: cloneGlobalOptionsSnapshot(context.global),\n pm_root: context.pm_root,\n },\n warnings: [],\n };\n }\n\n try {\n const delta = (await Promise.resolve(\n matched.run({\n command,\n args: cloneContextSnapshot(context.args),\n options: cloneCommandOptionsSnapshot(context.options),\n global: cloneGlobalOptionsSnapshot(context.global),\n pm_root: context.pm_root,\n }),\n )) ?? {};\n const nextArgs = Array.isArray(delta.args) ? cloneContextSnapshot(delta.args) : cloneContextSnapshot(context.args);\n const nextOptions = delta.options ? cloneCommandOptionsSnapshot(delta.options) : cloneCommandOptionsSnapshot(context.options);\n const nextGlobal = delta.global ? cloneGlobalOptionsSnapshot(delta.global) : cloneGlobalOptionsSnapshot(context.global);\n return {\n overridden: true,\n context: {\n command,\n args: nextArgs,\n options: nextOptions,\n global: nextGlobal,\n pm_root: context.pm_root,\n },\n warnings: [],\n };\n } catch {\n return {\n overridden: false,\n context: {\n command,\n args: cloneContextSnapshot(context.args),\n options: cloneCommandOptionsSnapshot(context.options),\n global: cloneGlobalOptionsSnapshot(context.global),\n pm_root: context.pm_root,\n },\n warnings: [`extension_parser_override_failed:${matched.layer}:${matched.name}:${matched.command}`],\n };\n }\n}\n\n\nexport async function runPreflightOverride(\n preflight: ExtensionPreflightRegistry,\n context: PreflightOverrideContext,\n): Promise<PreflightOverrideResult> {\n const matched = [...preflight.overrides].reverse()[0];\n const baseContext: CommandHandlerContext = {\n command: normalizeCommandName(context.command),\n args: cloneContextSnapshot(context.args),\n options: cloneCommandOptionsSnapshot(context.options),\n global: cloneGlobalOptionsSnapshot(context.global),\n pm_root: context.pm_root,\n };\n const baseDecision: PreflightRuntimeDecision = cloneContextSnapshot(context.decision);\n if (!matched) {\n return {\n overridden: false,\n context: baseContext,\n decision: baseDecision,\n warnings: [],\n };\n }\n\n try {\n const delta = (await Promise.resolve(\n matched.run({\n command: baseContext.command,\n args: cloneContextSnapshot(baseContext.args),\n options: cloneCommandOptionsSnapshot(baseContext.options),\n global: cloneGlobalOptionsSnapshot(baseContext.global),\n pm_root: baseContext.pm_root,\n decision: cloneContextSnapshot(baseDecision),\n }),\n )) ?? {};\n const nextContext: CommandHandlerContext = {\n command: baseContext.command,\n args: Array.isArray(delta.args) ? cloneContextSnapshot(delta.args) : baseContext.args,\n options: delta.options ? cloneCommandOptionsSnapshot(delta.options) : baseContext.options,\n global: delta.global ? cloneGlobalOptionsSnapshot(delta.global) : baseContext.global,\n pm_root: baseContext.pm_root,\n };\n const nextDecision: PreflightRuntimeDecision = {\n enforce_item_format_gate:\n typeof delta.enforce_item_format_gate === \"boolean\"\n ? delta.enforce_item_format_gate\n : baseDecision.enforce_item_format_gate,\n run_preflight_item_format_sync:\n typeof delta.run_preflight_item_format_sync === \"boolean\"\n ? delta.run_preflight_item_format_sync\n : baseDecision.run_preflight_item_format_sync,\n run_extension_migrations:\n typeof delta.run_extension_migrations === \"boolean\"\n ? delta.run_extension_migrations\n : baseDecision.run_extension_migrations,\n enforce_mandatory_migration_gate:\n typeof delta.enforce_mandatory_migration_gate === \"boolean\"\n ? delta.enforce_mandatory_migration_gate\n : baseDecision.enforce_mandatory_migration_gate,\n };\n return {\n overridden: true,\n context: nextContext,\n decision: nextDecision,\n warnings: [],\n };\n } catch {\n return {\n overridden: false,\n context: baseContext,\n decision: baseDecision,\n warnings: [`extension_preflight_override_failed:${matched.layer}:${matched.name}`],\n };\n }\n}\n\n\nfunction resolveDefaultServiceResult(context: ServiceOverrideContext): ServiceOverrideResult {\n return {\n handled: false,\n result: context.payload,\n warnings: [],\n };\n}\n\nexport function runServiceOverrideSync(\n services: ExtensionServiceRegistry,\n context: ServiceOverrideContext,\n): ServiceOverrideResult {\n const matches = [...services.overrides].reverse().filter((entry) => entry.service === context.service);\n if (matches.length === 0) {\n return resolveDefaultServiceResult(context);\n }\n\n const warnings: string[] = [];\n for (const matched of matches) {\n try {\n const serviceContext = {\n service: context.service,\n command: context.command ? normalizeCommandName(context.command) : undefined,\n args: context.args ? cloneContextSnapshot(context.args) : undefined,\n options: context.options ? cloneCommandOptionsSnapshot(context.options) : undefined,\n global: context.global ? cloneGlobalOptionsSnapshot(context.global) : undefined,\n pm_root: context.pm_root,\n payload: cloneContextSnapshot(context.payload),\n };\n const result = matched.run(serviceContext);\n if (result instanceof Promise) {\n warnings.push(`extension_service_override_async_unsupported:${matched.layer}:${matched.name}:${matched.service}`);\n continue;\n }\n if (context.service === \"output_format\" && (result === null || result === undefined || result === serviceContext.payload)) {\n continue;\n }\n return {\n handled: true,\n result,\n warnings,\n };\n } catch {\n warnings.push(`extension_service_override_failed:${matched.layer}:${matched.name}:${matched.service}`);\n }\n }\n return {\n handled: false,\n result: context.payload,\n warnings,\n };\n}\n\nexport async function runServiceOverride(\n services: ExtensionServiceRegistry,\n context: ServiceOverrideContext,\n): Promise<ServiceOverrideResult> {\n const matches = [...services.overrides].reverse().filter((entry) => entry.service === context.service);\n if (matches.length === 0) {\n return resolveDefaultServiceResult(context);\n }\n\n const warnings: string[] = [];\n for (const matched of matches) {\n try {\n const serviceContext = {\n service: context.service,\n command: context.command ? normalizeCommandName(context.command) : undefined,\n args: context.args ? cloneContextSnapshot(context.args) : undefined,\n options: context.options ? cloneCommandOptionsSnapshot(context.options) : undefined,\n global: context.global ? cloneGlobalOptionsSnapshot(context.global) : undefined,\n pm_root: context.pm_root,\n payload: cloneContextSnapshot(context.payload),\n };\n const result = await Promise.resolve(matched.run(serviceContext));\n if (context.service === \"output_format\" && (result === null || result === undefined || result === serviceContext.payload)) {\n continue;\n }\n return {\n handled: true,\n result,\n warnings,\n };\n } catch {\n warnings.push(`extension_service_override_failed:${matched.layer}:${matched.name}:${matched.service}`);\n }\n }\n return {\n handled: false,\n result: context.payload,\n warnings,\n };\n}\n\nexport function runCommandOverride(\n commands: ExtensionCommandRegistry,\n context: CommandOverrideContext,\n): CommandOverrideResult {\n const command = normalizeCommandName(context.command);\n if (command.length === 0) {\n return {\n overridden: false,\n result: context.result,\n warnings: [],\n };\n }\n\n const matched = [...commands.overrides].reverse().find((entry) => entry.command === command);\n if (!matched) {\n return {\n overridden: false,\n result: context.result,\n warnings: [],\n };\n }\n\n try {\n const overrideOptions = cloneCommandOptionsSnapshot(context.options);\n const overrideGlobal = cloneGlobalOptionsSnapshot(context.global);\n const overrideResult = matched.run({\n command,\n args: cloneContextSnapshot(context.args),\n options: overrideOptions,\n global: overrideGlobal,\n pm_root: context.pm_root,\n result: cloneContextSnapshot(context.result),\n });\n if (overrideResult instanceof Promise) {\n return {\n overridden: false,\n result: context.result,\n warnings: [`extension_command_override_async_unsupported:${matched.layer}:${matched.name}:${matched.command}`],\n };\n }\n return {\n overridden: true,\n result: overrideResult,\n warnings: [],\n };\n } catch {\n return {\n overridden: false,\n result: context.result,\n warnings: [`extension_command_override_failed:${matched.layer}:${matched.name}:${matched.command}`],\n };\n }\n}\n\n\nexport function runRendererOverride(\n renderers: ExtensionRendererRegistry,\n context: RendererOverrideContext,\n): RendererOverrideResult {\n const matched = [...renderers.overrides].reverse().find((entry) => entry.format === context.format);\n if (!matched) {\n return {\n overridden: false,\n rendered: null,\n warnings: [],\n };\n }\n\n try {\n const rendererCommand = typeof context.command === \"string\" ? normalizeCommandName(context.command) : \"\";\n const rendererArgs = Array.isArray(context.args) ? cloneContextSnapshot(context.args) : [];\n const rendererOptions = cloneCommandOptionsSnapshot(context.options);\n const rendererGlobal = cloneGlobalOptionsSnapshot(context.global);\n const rendererPmRoot = typeof context.pm_root === \"string\" ? context.pm_root : \"\";\n const rendered = matched.run({\n format: context.format,\n command: rendererCommand,\n args: rendererArgs,\n options: rendererOptions,\n global: rendererGlobal,\n pm_root: rendererPmRoot,\n result: cloneContextSnapshot(context.result),\n });\n if (typeof rendered !== \"string\") {\n return {\n overridden: false,\n rendered: null,\n warnings: [`extension_renderer_invalid_result:${matched.layer}:${matched.name}:${matched.format}`],\n };\n }\n return {\n overridden: true,\n rendered,\n warnings: [],\n };\n } catch {\n return {\n overridden: false,\n rendered: null,\n warnings: [`extension_renderer_failed:${matched.layer}:${matched.name}:${matched.format}`],\n };\n }\n}\n", "import fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { pathToFileURL } from \"node:url\";\nimport { pathExists } from \"../fs/fs-utils.js\";\nimport { isPathWithinDirectory } from \"../fs/path-utils.js\";\nimport { resolveGlobalPmRoot } from \"../store/paths.js\";\nimport type { GlobalOptions } from \"../shared/command-types.js\";\nimport { asRecordLoose } from \"../shared/primitives.js\";\nimport type { PmSettings } from \"../../types/index.js\";\n// Cohesive helper groups now live in sibling modules. They are imported for the\n// discovery/activation code that stays here and re-exported below so existing\n// import sites (sdk/index.ts, commands/extension.ts, health.ts, tests, …) keep\n// importing everything from \"./loader.js\" unchanged.\nimport {\n normalizeNames,\n isKnownExtensionCapability,\n collectUnknownExtensionCapabilities,\n resolveLegacyExtensionCapabilityAlias,\n normalizeManifestCapabilities,\n suggestKnownExtensionCapability,\n formatUnknownExtensionCapabilityWarning,\n formatLegacyExtensionCapabilityAliasWarning,\n} from \"./extension-capability-aliases.js\";\nimport {\n normalizeExtensionPolicy,\n serializeExtensionPolicy,\n hydrateExtensionPolicy,\n normalizePolicySandboxProfile,\n evaluateExtensionPolicyForExtension,\n evaluateExtensionPolicyForCapability,\n evaluateExtensionPolicyForRegistration,\n type NormalizedExtensionPolicy,\n type PolicyExtensionRef,\n} from \"./extension-policy.js\";\nimport {\n createEmptyExtensionHookRegistry,\n createEmptyExtensionCommandRegistry,\n createEmptyExtensionParserRegistry,\n createEmptyExtensionPreflightRegistry,\n createEmptyExtensionServiceRegistry,\n createEmptyExtensionRendererRegistry,\n createEmptyExtensionRegistrationRegistry,\n} from \"./extension-registries.js\";\nimport {\n normalizeCommandName,\n cloneContextSnapshot,\n cloneCommandOptionsSnapshot,\n cloneGlobalOptionsSnapshot,\n} from \"./extension-runtime-helpers.js\";\nexport {\n parseUnknownExtensionCapabilityWarning,\n parseLegacyExtensionCapabilityAliasWarning,\n} from \"./extension-capability-aliases.js\";\nexport {\n createEmptyExtensionHookRegistry,\n createEmptyExtensionCommandRegistry,\n createEmptyExtensionParserRegistry,\n createEmptyExtensionPreflightRegistry,\n createEmptyExtensionServiceRegistry,\n createEmptyExtensionRendererRegistry,\n createEmptyExtensionRegistrationRegistry,\n} from \"./extension-registries.js\";\nexport {\n runBeforeCommandHooks,\n runAfterCommandHooks,\n runOnWriteHooks,\n runOnReadHooks,\n runOnIndexHooks,\n runCommandHandler,\n runParserOverride,\n runPreflightOverride,\n runServiceOverrideSync,\n runServiceOverride,\n runCommandOverride,\n runRendererOverride,\n} from \"./extension-hook-runtime.js\";\nimport {\n KNOWN_EXTENSION_SERVICE_NAMES,\n createDefaultExtensionGovernancePolicy,\n type ExtensionCapability,\n type ExtensionPolicyMode,\n type ExtensionPolicySurface,\n type ExtensionSandboxProfile,\n type ExtensionGovernancePolicy,\n type ExtensionTrustMode,\n type ExtensionLayer,\n type ExtensionStatus,\n type ExtensionManifest,\n type ExtensionDiagnostic,\n type EffectiveExtension,\n type ExtensionDiscoveryResult,\n type LoadedExtension,\n type FailedExtensionLoad,\n type ExtensionLoadResult,\n type BeforeCommandHookContext,\n type AfterCommandHookContext,\n type OnWriteHookContext,\n type OnReadHookContext,\n type OnIndexHookContext,\n type BeforeCommandHook,\n type AfterCommandHook,\n type OnWriteHook,\n type OnReadHook,\n type OnIndexHook,\n type OutputRendererFormat,\n type CommandOverride,\n type RendererOverride,\n type CommandHandler,\n type ParserOverride,\n type PreflightOverride,\n type ServiceOverride,\n type ExtensionHookRegistry,\n type CommandOverrideContext,\n type RendererOverrideContext,\n type CommandHandlerContext,\n type ParserOverrideContext,\n type ParserOverrideDelta,\n type PreflightOverrideContext,\n type PreflightRuntimeDecision,\n type PreflightOverrideDelta,\n type ExtensionServiceName,\n type ServiceOverrideContext,\n type ExtensionCommandArgumentDefinition,\n type CommandDefinition,\n type FlagValueType,\n type FlagDefinition,\n type SchemaFieldDefinition,\n type SchemaItemTypeCommandOptionPolicyDefinition,\n type SchemaItemTypeOptionDefinition,\n type SchemaItemTypeDefinition,\n type SchemaMigrationRunContext,\n type SchemaMigrationRunner,\n type SchemaMigrationDefinition,\n type ImportExportContext,\n type Importer,\n type Exporter,\n type ExtensionSearchMode,\n type SearchProviderQueryContext,\n type SearchProviderHit,\n type SearchProviderQueryResult,\n type SearchProviderEmbedBatchContext,\n type SearchProviderEmbedContext,\n type SearchProviderDefinition,\n type VectorStoreQueryHit,\n type VectorStoreQueryContext,\n type VectorStoreUpsertPoint,\n type VectorStoreUpsertContext,\n type VectorStoreDeleteContext,\n type VectorStoreAdapterDefinition,\n type RegisteredExtensionCommandOverride,\n type RegisteredExtensionCommandHandler,\n type RegisteredExtensionParserOverride,\n type RegisteredExtensionPreflightOverride,\n type RegisteredExtensionServiceOverride,\n type RegisteredExtensionRendererOverride,\n type ExtensionCommandRegistry,\n type ExtensionParserRegistry,\n type ExtensionPreflightRegistry,\n type ExtensionServiceRegistry,\n type ExtensionRendererRegistry,\n type RegisteredExtensionFlagDefinitions,\n type RegisteredExtensionCommandDefinition,\n type RegisteredExtensionSchemaFieldDefinitions,\n type RegisteredExtensionSchemaItemTypeDefinitions,\n type RegisteredExtensionSchemaMigrationDefinition,\n type RegisteredExtensionImporter,\n type RegisteredExtensionExporter,\n type RegisteredExtensionSearchProvider,\n type RegisteredExtensionVectorStoreAdapter,\n type ExtensionRegistrationRegistry,\n type ExtensionRegistrationCounts,\n type ExtensionApi,\n type FailedExtensionActivation,\n type ExtensionActivationFailureTrace,\n type ExtensionActivationResult,\n type ExtensionCandidate,\n type ExtensionLayerScanResult,\n type ScannedExtensionDirectory,\n type LegacyExtensionCapabilityAliasMapping,\n type DiscoverExtensionsOptions,\n type ActivatableExtension,\n type ServiceOverrideResult,\n type CommandOverrideResult,\n type CommandHandlerResult,\n type ParserOverrideResult,\n type PreflightOverrideResult,\n type RendererOverrideResult,\n type UnknownExtensionCapabilityWarningDetails,\n type RegisteredExtensionHook,\n} from \"./extension-types.js\";\nexport * from \"./extension-types.js\";\n\nconst DEFAULT_EXTENSION_PRIORITY = 100;\n\n/* Types now in extension-types.ts - re-exported via `export * from \"./extension-types.js\"` above */\n\nconst DEFAULT_EXTENSION_POLICY: ExtensionGovernancePolicy = Object.freeze(createDefaultExtensionGovernancePolicy());\n\nlet extensionReloadEpoch = 0;\n\nexport function nextExtensionReloadToken(seed = Date.now()): string {\n extensionReloadEpoch += 1;\n return `${extensionReloadEpoch}-${seed}`;\n}\n\nfunction parseManifest(raw: unknown): ExtensionManifest | null {\n if (typeof raw !== \"object\" || raw === null) {\n return null;\n }\n\n const candidate = raw as Record<string, unknown>;\n if (typeof candidate.name !== \"string\" || candidate.name.trim().length === 0) {\n return null;\n }\n if (typeof candidate.version !== \"string\" || candidate.version.trim().length === 0) {\n return null;\n }\n if (typeof candidate.entry !== \"string\" || candidate.entry.trim().length === 0) {\n return null;\n }\n\n let priority = DEFAULT_EXTENSION_PRIORITY;\n if (\"priority\" in candidate && candidate.priority !== undefined && candidate.priority !== null) {\n if (typeof candidate.priority !== \"number\" || !Number.isInteger(candidate.priority)) {\n return null;\n }\n priority = candidate.priority;\n }\n\n let manifestVersion: number | undefined;\n if (\"manifest_version\" in candidate && candidate.manifest_version !== undefined && candidate.manifest_version !== null) {\n if (typeof candidate.manifest_version !== \"number\" || !Number.isInteger(candidate.manifest_version)) {\n return null;\n }\n manifestVersion = candidate.manifest_version;\n }\n\n let trusted: boolean | undefined;\n if (\"trusted\" in candidate && candidate.trusted !== undefined && candidate.trusted !== null) {\n if (typeof candidate.trusted !== \"boolean\") {\n return null;\n }\n trusted = candidate.trusted;\n }\n\n let sandboxProfile: ExtensionSandboxProfile | undefined;\n if (\"sandbox_profile\" in candidate && candidate.sandbox_profile !== undefined && candidate.sandbox_profile !== null) {\n if (typeof candidate.sandbox_profile !== \"string\") {\n return null;\n }\n const normalizedProfile = normalizePolicySandboxProfile(candidate.sandbox_profile);\n if (normalizedProfile !== candidate.sandbox_profile.trim().toLowerCase()) {\n return null;\n }\n sandboxProfile = normalizedProfile;\n }\n\n let provenance: ExtensionManifest[\"provenance\"] | undefined;\n if (\"provenance\" in candidate && candidate.provenance !== undefined && candidate.provenance !== null) {\n const provenanceRecord = asRecordLoose(candidate.provenance);\n if (!provenanceRecord) {\n return null;\n }\n const source =\n typeof provenanceRecord.source === \"string\" && provenanceRecord.source.trim().length > 0\n ? provenanceRecord.source.trim()\n : undefined;\n const signature =\n typeof provenanceRecord.signature === \"string\" && provenanceRecord.signature.trim().length > 0\n ? provenanceRecord.signature.trim()\n : undefined;\n const attestation =\n typeof provenanceRecord.attestation === \"string\" && provenanceRecord.attestation.trim().length > 0\n ? provenanceRecord.attestation.trim()\n : undefined;\n const verified =\n provenanceRecord.verified === undefined || provenanceRecord.verified === null\n ? undefined\n : typeof provenanceRecord.verified === \"boolean\"\n ? provenanceRecord.verified\n : null;\n if (verified === null) {\n return null;\n }\n provenance = {\n ...(source ? { source } : {}),\n ...(signature ? { signature } : {}),\n ...(attestation ? { attestation } : {}),\n ...(typeof verified === \"boolean\" ? { verified } : {}),\n };\n }\n\n let permissions: ExtensionManifest[\"permissions\"] | undefined;\n if (\"permissions\" in candidate && candidate.permissions !== undefined && candidate.permissions !== null) {\n const permissionsRecord = asRecordLoose(candidate.permissions);\n if (!permissionsRecord) {\n return null;\n }\n const parseOptionalBoolean = (value: unknown): boolean | undefined | null => {\n if (value === undefined || value === null) {\n return undefined;\n }\n if (typeof value !== \"boolean\") {\n return null;\n }\n return value;\n };\n const fsRead = parseOptionalBoolean(permissionsRecord.fs_read);\n const fsWrite = parseOptionalBoolean(permissionsRecord.fs_write);\n const network = parseOptionalBoolean(permissionsRecord.network);\n const envRead = parseOptionalBoolean(permissionsRecord.env_read);\n const envWrite = parseOptionalBoolean(permissionsRecord.env_write);\n const processSpawn = parseOptionalBoolean(permissionsRecord.process_spawn);\n if ([fsRead, fsWrite, network, envRead, envWrite, processSpawn].includes(null)) {\n return null;\n }\n permissions = {\n ...(typeof fsRead === \"boolean\" ? { fs_read: fsRead } : {}),\n ...(typeof fsWrite === \"boolean\" ? { fs_write: fsWrite } : {}),\n ...(typeof network === \"boolean\" ? { network } : {}),\n ...(typeof envRead === \"boolean\" ? { env_read: envRead } : {}),\n ...(typeof envWrite === \"boolean\" ? { env_write: envWrite } : {}),\n ...(typeof processSpawn === \"boolean\" ? { process_spawn: processSpawn } : {}),\n };\n }\n\n let capabilities: string[] = [];\n let legacyCapabilityAliases: LegacyExtensionCapabilityAliasMapping[] = [];\n if (\"capabilities\" in candidate && candidate.capabilities !== undefined && candidate.capabilities !== null) {\n if (!Array.isArray(candidate.capabilities) || candidate.capabilities.some((value) => typeof value !== \"string\")) {\n return null;\n }\n const normalizedCapabilities = normalizeManifestCapabilities(candidate.capabilities as string[]);\n capabilities = normalizedCapabilities.capabilities;\n legacyCapabilityAliases = normalizedCapabilities.legacy_aliases;\n }\n\n return {\n name: candidate.name.trim(),\n version: candidate.version.trim(),\n entry: candidate.entry.trim(),\n priority,\n manifest_version: manifestVersion,\n trusted,\n provenance,\n sandbox_profile: sandboxProfile,\n permissions,\n capabilities,\n legacy_capability_aliases: legacyCapabilityAliases.length > 0 ? legacyCapabilityAliases : undefined,\n };\n}\n\nfunction shouldEnable(name: string, enabled: Set<string>, disabled: Set<string>): boolean {\n if (disabled.has(name)) {\n return false;\n }\n if (enabled.size === 0) {\n return true;\n }\n return enabled.has(name);\n}\n\nasync function isCanonicalPathWithinDirectory(directory: string, targetPath: string): Promise<boolean> {\n const [resolvedDirectory, resolvedTargetPath] = await Promise.all([fs.realpath(directory), fs.realpath(targetPath)]);\n return isPathWithinDirectory(resolvedDirectory, resolvedTargetPath);\n}\n\nexport function resolveExtensionRoots(pmRoot: string, cwd = process.cwd()): { global: string; project: string } {\n return {\n global: path.join(resolveGlobalPmRoot(cwd), \"extensions\"),\n project: path.join(pmRoot, \"extensions\"),\n };\n}\n\nasync function listExtensionDirectories(extensionsRoot: string): Promise<string[]> {\n try {\n const entries = await fs.readdir(extensionsRoot, { withFileTypes: true });\n return entries\n .filter((entry) => entry.isDirectory())\n .map((entry) => entry.name)\n .sort((a, b) => a.localeCompare(b));\n } catch {\n return [];\n }\n}\n\nfunction summarizeCandidate(candidate: ExtensionCandidate): EffectiveExtension {\n return {\n layer: candidate.layer,\n directory: candidate.directory,\n manifest_path: candidate.manifest_path,\n name: candidate.manifest.name,\n version: candidate.manifest.version,\n entry: candidate.manifest.entry,\n priority: candidate.manifest.priority,\n entry_path: candidate.entry_path,\n manifest_version: candidate.manifest.manifest_version,\n trusted: candidate.manifest.trusted,\n provenance: candidate.manifest.provenance,\n sandbox_profile: candidate.manifest.sandbox_profile,\n permissions: candidate.manifest.permissions,\n capabilities: [...candidate.manifest.capabilities],\n };\n}\n\nfunction sortCandidates(candidates: ExtensionCandidate[]): ExtensionCandidate[] {\n return [...candidates].sort((left, right) => {\n if (left.manifest.priority !== right.manifest.priority) {\n return left.manifest.priority - right.manifest.priority;\n }\n const byName = left.manifest.name.localeCompare(right.manifest.name);\n if (byName !== 0) {\n return byName;\n }\n return left.directory.localeCompare(right.directory);\n });\n}\n\nfunction buildEffectiveExtensions(\n globalCandidates: ExtensionCandidate[],\n projectCandidates: ExtensionCandidate[],\n): ExtensionCandidate[] {\n const ordered = [...sortCandidates(globalCandidates), ...sortCandidates(projectCandidates)];\n const effective: ExtensionCandidate[] = [];\n for (const candidate of ordered) {\n const existingIndex = effective.findIndex((entry) => entry.manifest.name === candidate.manifest.name);\n if (existingIndex >= 0) {\n effective.splice(existingIndex, 1);\n }\n effective.push(candidate);\n }\n return effective;\n}\n\nasync function scanExtensionLayer(\n layer: ExtensionLayer,\n extensionsRoot: string,\n enabled: Set<string>,\n disabled: Set<string>,\n): Promise<ExtensionLayerScanResult> {\n const diagnostics: ExtensionDiagnostic[] = [];\n const warnings: string[] = [];\n const candidates: ExtensionCandidate[] = [];\n const directories = await listExtensionDirectories(extensionsRoot);\n\n for (const directory of directories) {\n const scanned = await scanExtensionDirectory(layer, extensionsRoot, directory, enabled, disabled);\n diagnostics.push(scanned.diagnostic);\n warnings.push(...scanned.warnings);\n if (scanned.candidate) {\n candidates.push(scanned.candidate);\n }\n }\n\n return { diagnostics, warnings, candidates };\n}\n\nasync function scanExtensionDirectory(\n layer: ExtensionLayer,\n extensionsRoot: string,\n directory: string,\n enabled: Set<string>,\n disabled: Set<string>,\n): Promise<ScannedExtensionDirectory> {\n const extensionDir = path.join(extensionsRoot, directory);\n const manifestPath = path.join(extensionDir, \"manifest.json\");\n if (!(await pathExists(manifestPath))) {\n return {\n diagnostic: {\n layer,\n directory,\n manifest_path: manifestPath,\n name: null,\n version: null,\n entry: null,\n priority: null,\n entry_path: null,\n enabled: null,\n status: \"warn\",\n },\n warnings: [`extension_manifest_missing:${layer}:${directory}`],\n candidate: null,\n };\n }\n\n let manifest: ExtensionManifest | null = null;\n try {\n const parsed = JSON.parse(await fs.readFile(manifestPath, \"utf8\")) as unknown;\n manifest = parseManifest(parsed);\n } catch {\n manifest = null;\n }\n\n if (!manifest) {\n return {\n diagnostic: {\n layer,\n directory,\n manifest_path: manifestPath,\n name: null,\n version: null,\n entry: null,\n priority: null,\n entry_path: null,\n enabled: null,\n status: \"warn\",\n },\n warnings: [`extension_manifest_invalid:${layer}:${directory}`],\n candidate: null,\n };\n }\n\n const entryPath = path.resolve(extensionDir, manifest.entry);\n const entryWithinDirectoryByPath = isPathWithinDirectory(extensionDir, entryPath);\n const entryExists = entryWithinDirectoryByPath ? await pathExists(entryPath) : false;\n const entryWithinDirectory =\n entryWithinDirectoryByPath && entryExists\n ? await isCanonicalPathWithinDirectory(extensionDir, entryPath)\n : entryWithinDirectoryByPath;\n const enabledForLoad = shouldEnable(manifest.name, enabled, disabled);\n const extensionWarnings: string[] = [];\n if (Array.isArray(manifest.legacy_capability_aliases) && manifest.legacy_capability_aliases.length > 0) {\n extensionWarnings.push(\n formatLegacyExtensionCapabilityAliasWarning(layer, manifest.name, manifest.legacy_capability_aliases),\n );\n }\n for (const capability of collectUnknownExtensionCapabilities(manifest.capabilities)) {\n extensionWarnings.push(formatUnknownExtensionCapabilityWarning(layer, manifest.name, capability));\n }\n if (!entryWithinDirectory) {\n extensionWarnings.push(`extension_entry_outside_extension:${layer}:${manifest.name}`);\n } else if (!entryExists) {\n extensionWarnings.push(`extension_entry_missing:${layer}:${manifest.name}`);\n }\n\n return {\n diagnostic: {\n layer,\n directory,\n manifest_path: manifestPath,\n name: manifest.name,\n version: manifest.version,\n entry: manifest.entry,\n priority: manifest.priority,\n entry_path: entryPath,\n enabled: enabledForLoad,\n status: entryWithinDirectory && entryExists ? \"ok\" : \"warn\",\n },\n warnings: extensionWarnings,\n candidate:\n entryWithinDirectory && entryExists && enabledForLoad\n ? {\n layer,\n directory,\n manifest_path: manifestPath,\n entry_path: entryPath,\n manifest,\n }\n : null,\n };\n}\n\n\nexport async function discoverExtensions(options: DiscoverExtensionsOptions): Promise<ExtensionDiscoveryResult> {\n const roots = resolveExtensionRoots(options.pmRoot, options.cwd ?? process.cwd());\n const configured_enabled = normalizeNames(options.settings.extensions.enabled);\n const configured_disabled = normalizeNames(options.settings.extensions.disabled);\n const policy = normalizeExtensionPolicy(options.settings);\n const serializedPolicy = serializeExtensionPolicy(policy);\n\n if (options.noExtensions) {\n return {\n disabled_by_flag: true,\n roots,\n configured_enabled,\n configured_disabled,\n discovered: [],\n effective: [],\n warnings: [...policy.warnings],\n policy: serializedPolicy,\n };\n }\n\n const enabled = new Set(configured_enabled);\n const disabled = new Set(configured_disabled);\n const globalScan = await scanExtensionLayer(\"global\", roots.global, enabled, disabled);\n const projectScan = await scanExtensionLayer(\"project\", roots.project, enabled, disabled);\n const policyWarnings: string[] = [...policy.warnings];\n const effectiveCandidates = buildEffectiveExtensions(globalScan.candidates, projectScan.candidates);\n const effective: EffectiveExtension[] = [];\n for (const candidate of effectiveCandidates) {\n const extensionRef = {\n layer: candidate.layer,\n name: candidate.manifest.name,\n trusted: candidate.manifest.trusted === true,\n provenanceVerified: candidate.manifest.provenance?.verified === true,\n sandboxProfile: candidate.manifest.sandbox_profile,\n permissions:\n candidate.manifest.permissions && typeof candidate.manifest.permissions === \"object\"\n ? {\n fs_read: candidate.manifest.permissions.fs_read,\n fs_write: candidate.manifest.permissions.fs_write,\n network: candidate.manifest.permissions.network,\n env_read: candidate.manifest.permissions.env_read,\n env_write: candidate.manifest.permissions.env_write,\n process_spawn: candidate.manifest.permissions.process_spawn,\n }\n : undefined,\n };\n const extensionDecision = evaluateExtensionPolicyForExtension(policy, extensionRef);\n if (extensionDecision.warning) {\n policyWarnings.push(extensionDecision.warning);\n }\n if (!extensionDecision.allowed) {\n continue;\n }\n for (const capability of candidate.manifest.capabilities) {\n const capabilityDecision = evaluateExtensionPolicyForCapability(policy, extensionRef, capability);\n if (capabilityDecision.warning) {\n policyWarnings.push(capabilityDecision.warning);\n }\n }\n effective.push(summarizeCandidate(candidate));\n }\n\n return {\n disabled_by_flag: false,\n roots,\n configured_enabled,\n configured_disabled,\n discovered: [...globalScan.diagnostics, ...projectScan.diagnostics],\n effective,\n warnings: [...new Set([...globalScan.warnings, ...projectScan.warnings, ...policyWarnings])],\n policy: serializedPolicy,\n };\n}\n\nfunction formatUnknownError(error: unknown): string {\n if (error instanceof Error && error.message.trim().length > 0) {\n return error.message;\n }\n return String(error);\n}\n\nasync function fingerprintPath(pathToInspect: string): Promise<string> {\n try {\n const stats = await fs.stat(pathToInspect);\n return `${Math.trunc(stats.mtimeMs)}-${stats.size}`;\n } catch {\n return \"missing\";\n }\n}\n\nasync function resolveExtensionImportHref(\n extension: EffectiveExtension,\n options: DiscoverExtensionsOptions,\n): Promise<string> {\n const baseUrl = new URL(pathToFileURL(extension.entry_path).href);\n const shouldCacheBust = options.cache_bust === true || typeof options.reload_token === \"string\";\n if (!shouldCacheBust) {\n return baseUrl.href;\n }\n const [entryFingerprint, manifestFingerprint] = await Promise.all([\n fingerprintPath(extension.entry_path),\n fingerprintPath(extension.manifest_path),\n ]);\n const reloadToken = options.reload_token ?? nextExtensionReloadToken();\n baseUrl.searchParams.set(\"pm_ext_reload\", reloadToken);\n baseUrl.searchParams.set(\"pm_ext_entry\", entryFingerprint);\n baseUrl.searchParams.set(\"pm_ext_manifest\", manifestFingerprint);\n return baseUrl.href;\n}\n\nexport async function loadExtensions(options: DiscoverExtensionsOptions): Promise<ExtensionLoadResult> {\n const discovery = await discoverExtensions(options);\n const loaded: LoadedExtension[] = [];\n const failed: FailedExtensionLoad[] = [];\n const warnings = [...discovery.warnings];\n\n if (discovery.disabled_by_flag) {\n return {\n ...discovery,\n warnings,\n loaded,\n failed,\n };\n }\n\n for (const extension of discovery.effective) {\n try {\n const importHref = await resolveExtensionImportHref(extension, options);\n const module = await import(importHref);\n loaded.push({\n ...extension,\n module,\n });\n } catch (error: unknown) {\n warnings.push(`extension_load_failed:${extension.layer}:${extension.name}`);\n failed.push({\n layer: extension.layer,\n name: extension.name,\n entry_path: extension.entry_path,\n error: formatUnknownError(error),\n });\n }\n }\n\n return {\n ...discovery,\n warnings,\n loaded,\n failed,\n };\n}\n\ntype HookName = keyof ExtensionHookRegistry;\n\nfunction resolveActivatableExtension(module: unknown): ActivatableExtension | null {\n const moduleRecord = asRecordLoose(module);\n if (!moduleRecord) {\n return null;\n }\n\n if (typeof moduleRecord.activate === \"function\") {\n return {\n activate: moduleRecord.activate as ActivatableExtension[\"activate\"],\n };\n }\n\n const defaultExport = asRecordLoose(moduleRecord.default);\n if (defaultExport && typeof defaultExport.activate === \"function\") {\n return {\n activate: defaultExport.activate as ActivatableExtension[\"activate\"],\n };\n }\n\n return null;\n}\n\nfunction isOutputRendererFormat(value: string): value is OutputRendererFormat {\n return value === \"toon\" || value === \"json\";\n}\n\nfunction isExtensionServiceName(value: string): value is ExtensionServiceName {\n return KNOWN_EXTENSION_SERVICE_NAMES.includes(value as ExtensionServiceName);\n}\n\nfunction assertHookHandler(hookName: string, hook: unknown): void {\n if (typeof hook !== \"function\") {\n throw new TypeError(`api.hooks.${hookName} requires a function handler`);\n }\n}\n\nfunction assertNonEmptyString(name: string, value: unknown): string {\n if (typeof value !== \"string\" || value.trim().length === 0) {\n throw new TypeError(`${name} requires a non-empty string`);\n }\n return value.trim();\n}\n\nfunction assertFunctionHandler(name: string, value: unknown): void {\n if (typeof value !== \"function\") {\n throw new TypeError(`${name} requires a function handler`);\n }\n}\n\nfunction normalizeRegistrationName(name: string): string {\n return name\n .trim()\n .toLowerCase()\n .split(/\\s+/)\n .filter((part) => part.length > 0)\n .join(\" \");\n}\n\nfunction toRegistrationCommandPath(name: string, action: \"import\" | \"export\"): string {\n return normalizeCommandName(`${name} ${action}`);\n}\n\nfunction sanitizeRegistrationValue(value: unknown): unknown {\n if (value === null) {\n return null;\n }\n if (Array.isArray(value)) {\n return value.map((entry) => sanitizeRegistrationValue(entry));\n }\n if (typeof value === \"function\") {\n return \"[Function]\";\n }\n if (typeof value === \"bigint\") {\n return value.toString();\n }\n if (typeof value === \"symbol\") {\n return value.toString();\n }\n if (typeof value === \"object\") {\n const record = value as Record<string, unknown>;\n const normalized: Record<string, unknown> = {};\n const keys = Object.keys(record).sort((left, right) => left.localeCompare(right));\n for (const key of keys) {\n normalized[key] = sanitizeRegistrationValue(record[key]);\n }\n return normalized;\n }\n return value;\n}\n\nfunction cloneRuntimeRegistrationValue(value: unknown): unknown {\n if (Array.isArray(value)) {\n return value.map((entry) => cloneRuntimeRegistrationValue(entry));\n }\n if (typeof value === \"object\" && value !== null) {\n const record = value as Record<string, unknown>;\n const cloned: Record<string, unknown> = {};\n for (const key of Object.keys(record).sort((left, right) => left.localeCompare(right))) {\n cloned[key] = cloneRuntimeRegistrationValue(record[key]);\n }\n return cloned;\n }\n return value;\n}\n\nconst EXTENSION_REGISTRATION_TRACE_SYMBOL = Symbol(\"extension_registration_trace\");\n\ntype RegistrationTraceCarrier = Error & {\n [EXTENSION_REGISTRATION_TRACE_SYMBOL]?: ExtensionActivationFailureTrace;\n};\n\nfunction createRegistrationValidationError(message: string, trace: ExtensionActivationFailureTrace): TypeError {\n const error = new TypeError(message) as RegistrationTraceCarrier;\n Object.defineProperty(error, EXTENSION_REGISTRATION_TRACE_SYMBOL, {\n value: trace,\n enumerable: false,\n configurable: false,\n writable: false,\n });\n return error;\n}\n\nfunction extractRegistrationValidationTrace(error: unknown): ExtensionActivationFailureTrace | undefined {\n if (!(error instanceof Error)) {\n return undefined;\n }\n return (error as RegistrationTraceCarrier)[EXTENSION_REGISTRATION_TRACE_SYMBOL];\n}\n\nfunction normalizeRegistrationRecord(name: string, value: unknown): Record<string, unknown> {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n throw new TypeError(`${name} requires an object definition`);\n }\n return sanitizeRegistrationValue(value) as Record<string, unknown>;\n}\n\nfunction normalizeRuntimeRegistrationRecord(name: string, value: unknown): Record<string, unknown> {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n throw new TypeError(`${name} requires an object definition`);\n }\n return cloneRuntimeRegistrationValue(value) as Record<string, unknown>;\n}\n\nfunction normalizeRegistrationRecordList(name: string, value: unknown): Array<Record<string, unknown>> {\n if (!Array.isArray(value)) {\n throw new TypeError(`${name} requires an array of object definitions`);\n }\n return value.map((entry) => normalizeRegistrationRecord(name, entry));\n}\n\nfunction asRegistrationRecord(name: string, value: unknown): Record<string, unknown> {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n throw new TypeError(`${name} requires an object definition`);\n }\n return value as Record<string, unknown>;\n}\n\nfunction assertOptionalBooleanField(name: string, value: unknown): void {\n if (value !== undefined && typeof value !== \"boolean\") {\n throw new TypeError(`${name} must be a boolean when provided`);\n }\n}\n\nfunction assertOptionalStringField(name: string, value: unknown): void {\n if (value === undefined) {\n return;\n }\n if (typeof value !== \"string\" || value.trim().length === 0) {\n throw new TypeError(`${name} must be a non-empty string when provided`);\n }\n}\n\nfunction assertOptionalStringArrayField(name: string, value: unknown): void {\n if (value === undefined) {\n return;\n }\n if (!Array.isArray(value)) {\n throw new TypeError(`${name} must be an array of non-empty strings when provided`);\n }\n for (const [index, entry] of value.entries()) {\n if (typeof entry !== \"string\" || entry.trim().length === 0) {\n throw new TypeError(`${name}[${index}] must be a non-empty string`);\n }\n }\n}\n\nfunction normalizeOptionalStringArrayField(name: string, value: unknown): string[] {\n assertOptionalStringArrayField(name, value);\n if (!Array.isArray(value)) {\n return [];\n }\n const normalized: string[] = [];\n const seen = new Set<string>();\n for (const entry of value) {\n const trimmed = entry.trim();\n if (trimmed.length === 0 || seen.has(trimmed)) {\n continue;\n }\n seen.add(trimmed);\n normalized.push(trimmed);\n }\n return normalized;\n}\n\nfunction normalizeCommandActionName(value: string): string {\n return value\n .trim()\n .toLowerCase()\n .replace(/[\\s_]+/g, \"-\")\n .replace(/[^a-z0-9-]/g, \"-\")\n .replace(/-+/g, \"-\")\n .replace(/^-+|-+$/g, \"\");\n}\n\nfunction resolveCommandDefinitionAction(commandPath: string, action: unknown): string {\n if (action === undefined) {\n return commandPath.replace(/\\s+/g, \"-\");\n }\n if (typeof action !== \"string\" || action.trim().length === 0) {\n throw new TypeError(\"registerCommand definition.action must be a non-empty string when provided\");\n }\n const normalized = normalizeCommandActionName(action);\n if (normalized.length === 0) {\n throw new TypeError(\"registerCommand definition.action must contain alphanumeric characters\");\n }\n return normalized;\n}\n\nfunction normalizeCommandDefinitionArguments(value: unknown): ExtensionCommandArgumentDefinition[] {\n if (value === undefined) {\n return [];\n }\n if (!Array.isArray(value)) {\n throw new TypeError(\"registerCommand definition.arguments must be an array when provided\");\n }\n const normalized: ExtensionCommandArgumentDefinition[] = [];\n for (const [index, entry] of value.entries()) {\n const record = asRegistrationRecord(`registerCommand definition.arguments[${index}]`, entry);\n const name = assertNonEmptyString(`registerCommand definition.arguments[${index}].name`, record.name);\n assertOptionalBooleanField(`registerCommand definition.arguments[${index}].required`, record.required);\n assertOptionalBooleanField(`registerCommand definition.arguments[${index}].variadic`, record.variadic);\n assertOptionalStringField(`registerCommand definition.arguments[${index}].description`, record.description);\n if (name.includes(\" \")) {\n throw new TypeError(`registerCommand definition.arguments[${index}].name must not contain spaces`);\n }\n const definition: ExtensionCommandArgumentDefinition = {\n name,\n };\n if (record.required === true) {\n definition.required = true;\n }\n if (record.variadic === true) {\n definition.variadic = true;\n }\n if (typeof record.description === \"string\") {\n const trimmedDescription = record.description.trim();\n if (trimmedDescription.length > 0) {\n definition.description = trimmedDescription;\n }\n }\n normalized.push(definition);\n }\n\n let variadicCount = 0;\n for (const [index, argument] of normalized.entries()) {\n if (!argument.variadic) {\n continue;\n }\n variadicCount += 1;\n if (variadicCount > 1) {\n throw new TypeError(\"registerCommand definition.arguments supports at most one variadic argument\");\n }\n if (index !== normalized.length - 1) {\n throw new TypeError(\"registerCommand definition.arguments variadic argument must be the final argument\");\n }\n }\n\n return normalized;\n}\n\nfunction validateFlagDefinitions(flags: unknown): void {\n if (!Array.isArray(flags)) {\n throw new TypeError(\"registerFlags flags requires an array of object definitions\");\n }\n for (const [index, raw] of flags.entries()) {\n const record = asRegistrationRecord(`registerFlags flags[${index}]`, raw);\n const long = record.long;\n const short = record.short;\n if (long === undefined && short === undefined) {\n throw new TypeError(`registerFlags flags[${index}] requires at least one of long or short`);\n }\n assertOptionalStringField(`registerFlags flags[${index}].long`, long);\n assertOptionalStringField(`registerFlags flags[${index}].short`, short);\n assertOptionalStringField(`registerFlags flags[${index}].value_name`, record.value_name);\n assertOptionalStringField(`registerFlags flags[${index}].description`, record.description);\n assertOptionalBooleanField(`registerFlags flags[${index}].required`, record.required);\n assertOptionalBooleanField(`registerFlags flags[${index}].enabled`, record.enabled);\n assertOptionalBooleanField(`registerFlags flags[${index}].visible`, record.visible);\n }\n}\n\nfunction validateItemFieldDefinitions(fields: unknown): void {\n if (!Array.isArray(fields)) {\n throw new TypeError(\"registerItemFields fields requires an array of object definitions\");\n }\n for (const [index, raw] of fields.entries()) {\n const record = asRegistrationRecord(`registerItemFields fields[${index}]`, raw);\n assertNonEmptyString(`registerItemFields fields[${index}].name`, record.name);\n assertNonEmptyString(`registerItemFields fields[${index}].type`, record.type);\n assertOptionalBooleanField(`registerItemFields fields[${index}].optional`, record.optional);\n }\n}\n\nfunction validateItemTypeDefinitions(types: unknown): void {\n if (!Array.isArray(types)) {\n throw new TypeError(\"registerItemTypes types requires an array of object definitions\");\n }\n for (const [typeIndex, raw] of types.entries()) {\n const record = asRegistrationRecord(`registerItemTypes types[${typeIndex}]`, raw);\n assertNonEmptyString(`registerItemTypes types[${typeIndex}].name`, record.name);\n assertOptionalStringField(`registerItemTypes types[${typeIndex}].folder`, record.folder);\n assertOptionalStringArrayField(`registerItemTypes types[${typeIndex}].aliases`, record.aliases);\n assertOptionalStringArrayField(\n `registerItemTypes types[${typeIndex}].required_create_fields`,\n record.required_create_fields,\n );\n assertOptionalStringArrayField(\n `registerItemTypes types[${typeIndex}].required_create_repeatables`,\n record.required_create_repeatables,\n );\n\n if (record.command_option_policies !== undefined) {\n if (!Array.isArray(record.command_option_policies)) {\n throw new TypeError(\n `registerItemTypes types[${typeIndex}].command_option_policies must be an array when provided`,\n );\n }\n for (const [policyIndex, rawPolicy] of record.command_option_policies.entries()) {\n const policy = asRegistrationRecord(\n `registerItemTypes types[${typeIndex}].command_option_policies[${policyIndex}]`,\n rawPolicy,\n );\n assertNonEmptyString(\n `registerItemTypes types[${typeIndex}].command_option_policies[${policyIndex}].command`,\n policy.command,\n );\n assertNonEmptyString(\n `registerItemTypes types[${typeIndex}].command_option_policies[${policyIndex}].option`,\n policy.option,\n );\n assertOptionalBooleanField(\n `registerItemTypes types[${typeIndex}].command_option_policies[${policyIndex}].enabled`,\n policy.enabled,\n );\n assertOptionalBooleanField(\n `registerItemTypes types[${typeIndex}].command_option_policies[${policyIndex}].required`,\n policy.required,\n );\n assertOptionalBooleanField(\n `registerItemTypes types[${typeIndex}].command_option_policies[${policyIndex}].visible`,\n policy.visible,\n );\n }\n }\n\n if (record.options !== undefined) {\n if (!Array.isArray(record.options)) {\n throw new TypeError(`registerItemTypes types[${typeIndex}].options must be an array when provided`);\n }\n for (const [optionIndex, rawOption] of record.options.entries()) {\n const option = asRegistrationRecord(`registerItemTypes types[${typeIndex}].options[${optionIndex}]`, rawOption);\n assertNonEmptyString(`registerItemTypes types[${typeIndex}].options[${optionIndex}].key`, option.key);\n assertOptionalStringArrayField(`registerItemTypes types[${typeIndex}].options[${optionIndex}].values`, option.values);\n assertOptionalBooleanField(`registerItemTypes types[${typeIndex}].options[${optionIndex}].required`, option.required);\n assertOptionalStringArrayField(\n `registerItemTypes types[${typeIndex}].options[${optionIndex}].aliases`,\n option.aliases,\n );\n }\n }\n }\n}\n\nfunction validateMigrationDefinition(definition: unknown): void {\n const record = asRegistrationRecord(\"registerMigration definition\", definition);\n if (record.id !== undefined && typeof record.id !== \"string\") {\n throw new TypeError(\"registerMigration definition.id must be a string when provided\");\n }\n if (record.description !== undefined && typeof record.description !== \"string\") {\n throw new TypeError(\"registerMigration definition.description must be a string when provided\");\n }\n if (record.status !== undefined && typeof record.status !== \"string\") {\n throw new TypeError(\"registerMigration definition.status must be a string when provided\");\n }\n assertOptionalBooleanField(\"registerMigration definition.mandatory\", record.mandatory);\n if (record.run !== undefined && typeof record.run !== \"function\") {\n throw new TypeError(\"registerMigration definition.run must be a function when provided\");\n }\n}\n\nfunction attachRuntimeDefinition<TEntry extends { definition: Record<string, unknown> }>(\n entry: TEntry,\n runtimeDefinition: Record<string, unknown>,\n): TEntry {\n Object.defineProperty(entry, \"runtime_definition\", {\n value: runtimeDefinition,\n enumerable: false,\n writable: false,\n configurable: false,\n });\n return entry;\n}\n\nfunction getDeclaredExtensionCapabilities(extension: LoadedExtension): Set<ExtensionCapability> | null {\n if (!Array.isArray(extension.capabilities)) {\n return null;\n }\n const declared = new Set<ExtensionCapability>();\n for (const capability of extension.capabilities) {\n const normalized = capability.trim().toLowerCase();\n if (isKnownExtensionCapability(normalized)) {\n declared.add(normalized);\n }\n }\n return declared;\n}\n\nfunction assertExtensionCapability(extension: LoadedExtension, capability: ExtensionCapability, method: string): void {\n const declared = getDeclaredExtensionCapabilities(extension);\n // Keep direct unit tests that construct LoadedExtension fixtures without\n // capability metadata backwards-compatible while enforcing manifest-declared\n // capabilities for runtime-loaded extensions.\n if (declared === null) {\n return;\n }\n if (!declared.has(capability)) {\n throw new TypeError(\n `${method} requires capability '${capability}' in extension manifest capabilities`,\n );\n }\n}\n\nfunction createExtensionApi(\n extension: LoadedExtension,\n hooks: ExtensionHookRegistry,\n commands: ExtensionCommandRegistry,\n parsers: ExtensionParserRegistry,\n preflight: ExtensionPreflightRegistry,\n services: ExtensionServiceRegistry,\n renderers: ExtensionRendererRegistry,\n registrations: ExtensionRegistrationRegistry,\n activationWarnings: string[],\n policy: NormalizedExtensionPolicy,\n): ExtensionApi {\n const extensionRef: PolicyExtensionRef = {\n layer: extension.layer,\n name: extension.name,\n trusted: extension.trusted === true,\n provenanceVerified: extension.provenance?.verified === true,\n sandboxProfile: extension.sandbox_profile,\n permissions:\n extension.permissions && typeof extension.permissions === \"object\"\n ? {\n fs_read: extension.permissions.fs_read,\n fs_write: extension.permissions.fs_write,\n network: extension.permissions.network,\n env_read: extension.permissions.env_read,\n env_write: extension.permissions.env_write,\n process_spawn: extension.permissions.process_spawn,\n }\n : undefined,\n };\n const pushPolicyWarning = (warning: string | null): void => {\n if (warning) {\n activationWarnings.push(warning);\n }\n };\n const allowRegistration = (\n surface: ExtensionPolicySurface,\n method: string,\n capability?: ExtensionCapability,\n details?: {\n command?: string;\n action?: string;\n service?: string;\n },\n ): boolean => {\n const decision = evaluateExtensionPolicyForRegistration(policy, extensionRef, surface, method, capability, details);\n pushPolicyWarning(decision.warning);\n return decision.allowed;\n };\n const registerCommandTrace = (\n mode: \"override\" | \"definition\",\n command: string | undefined,\n expectedSchema: string,\n received: unknown,\n hint?: string,\n ): ExtensionActivationFailureTrace => ({\n method: \"registerCommand\",\n registration_index: mode === \"override\" ? commands.overrides.length : commands.handlers.length,\n command,\n expected_schema: expectedSchema,\n received: sanitizeRegistrationValue(received),\n hint,\n });\n\n const registerCommand = (commandOrDefinition: string | CommandDefinition, override?: CommandOverride): void => {\n assertExtensionCapability(extension, \"commands\", \"registerCommand\");\n if (typeof commandOrDefinition === \"string\") {\n const normalizedCommand = normalizeCommandName(commandOrDefinition);\n if (normalizedCommand.length === 0) {\n throw createRegistrationValidationError(\n \"registerCommand requires a non-empty command name\",\n registerCommandTrace(\n \"override\",\n commandOrDefinition,\n 'registerCommand(\"<command>\", (context) => unknown)',\n commandOrDefinition,\n \"Provide a non-empty command path as the first argument.\",\n ),\n );\n }\n if (typeof override !== \"function\") {\n const trace = registerCommandTrace(\n \"override\",\n normalizedCommand,\n 'registerCommand(\"<command>\", (context) => unknown)',\n { command: commandOrDefinition, override },\n \"Provide a function as the second registerCommand argument.\",\n );\n throw createRegistrationValidationError(\n `registerCommand requires an override function when command name is provided (command=\"${normalizedCommand}\", registration_index=${trace.registration_index})`,\n trace,\n );\n }\n if (!allowRegistration(\"commands.override\", \"registerCommand\", \"commands\", { command: normalizedCommand })) {\n return;\n }\n commands.overrides.push({\n layer: extension.layer,\n name: extension.name,\n command: normalizedCommand,\n run: override,\n });\n return;\n }\n if (typeof commandOrDefinition !== \"object\" || commandOrDefinition === null) {\n throw createRegistrationValidationError(\n \"registerCommand requires a command definition object\",\n registerCommandTrace(\n \"definition\",\n undefined,\n \"{ name: string; run: (context) => unknown; }\",\n commandOrDefinition,\n \"Use registerCommand({ name: \\\"command path\\\", run: (context) => ... }).\",\n ),\n );\n }\n if (typeof commandOrDefinition.name !== \"string\") {\n throw createRegistrationValidationError(\n \"registerCommand requires a command definition name\",\n registerCommandTrace(\n \"definition\",\n undefined,\n \"{ name: string; run: (context) => unknown; }\",\n commandOrDefinition,\n \"Set command definition.name to a non-empty string command path.\",\n ),\n );\n }\n\n const normalizedCommand = normalizeCommandName(commandOrDefinition.name);\n if (normalizedCommand.length === 0) {\n throw createRegistrationValidationError(\n \"registerCommand requires a non-empty command definition name\",\n registerCommandTrace(\n \"definition\",\n commandOrDefinition.name,\n \"{ name: string; run: (context) => unknown; }\",\n commandOrDefinition,\n \"Ensure command definition.name contains a non-empty command path.\",\n ),\n );\n }\n const runHandler = typeof commandOrDefinition.run === \"function\" ? commandOrDefinition.run : undefined;\n const legacyHandler = typeof commandOrDefinition.handler === \"function\" ? commandOrDefinition.handler : undefined;\n if (!runHandler && legacyHandler) {\n activationWarnings.push(\n `extension_command_definition_legacy_handler_alias:${extension.layer}:${extension.name}:${normalizedCommand}`,\n );\n }\n const resolvedHandler = runHandler ?? legacyHandler;\n if (typeof resolvedHandler !== \"function\") {\n const trace = registerCommandTrace(\n \"definition\",\n normalizedCommand,\n \"{ name: string; run: (context) => unknown; }\",\n commandOrDefinition,\n \"Define command definition.run as a function.\",\n );\n throw createRegistrationValidationError(\n `registerCommand requires a command definition run handler (command=\"${normalizedCommand}\", registration_index=${trace.registration_index})`,\n trace,\n );\n }\n try {\n assertOptionalStringField(\"registerCommand definition.action\", commandOrDefinition.action);\n assertOptionalStringField(\"registerCommand definition.description\", commandOrDefinition.description);\n assertOptionalStringField(\"registerCommand definition.intent\", commandOrDefinition.intent);\n const action = resolveCommandDefinitionAction(normalizedCommand, commandOrDefinition.action);\n if (!allowRegistration(\"commands.handler\", \"registerCommand\", \"commands\", { command: normalizedCommand, action })) {\n return;\n }\n const description = commandOrDefinition.description?.trim();\n const intent = commandOrDefinition.intent?.trim();\n const examples = normalizeOptionalStringArrayField(\"registerCommand definition.examples\", commandOrDefinition.examples);\n const failureHints = normalizeOptionalStringArrayField(\n \"registerCommand definition.failure_hints\",\n commandOrDefinition.failure_hints,\n );\n const argumentsDefinition = normalizeCommandDefinitionArguments(commandOrDefinition.arguments);\n\n if (commandOrDefinition.flags !== undefined) {\n assertExtensionCapability(extension, \"schema\", \"registerCommand flags\");\n validateFlagDefinitions(commandOrDefinition.flags);\n registrations.flags.push({\n layer: extension.layer,\n name: extension.name,\n target_command: normalizedCommand,\n flags: normalizeRegistrationRecordList(\"registerCommand definition.flags\", commandOrDefinition.flags),\n });\n }\n\n const registration: RegisteredExtensionCommandDefinition = {\n layer: extension.layer,\n name: extension.name,\n command: normalizedCommand,\n action,\n examples,\n failure_hints: failureHints,\n arguments: argumentsDefinition,\n };\n if (description) {\n registration.description = description;\n }\n if (intent) {\n registration.intent = intent;\n }\n registrations.commands.push(registration);\n } catch (error: unknown) {\n const reason = error instanceof Error ? error.message : \"registerCommand definition validation failed\";\n const trace = registerCommandTrace(\n \"definition\",\n normalizedCommand,\n \"{ name: string; run: (context) => unknown; action?: string; arguments?: object[]; flags?: object[]; }\",\n commandOrDefinition,\n \"Use schema-style metadata (action/arguments/flags/examples/intent) with valid values.\",\n );\n throw createRegistrationValidationError(\n `registerCommand definition metadata invalid (command=\"${normalizedCommand}\", registration_index=${trace.registration_index}): ${reason}`,\n trace,\n );\n }\n commands.handlers.push({\n layer: extension.layer,\n name: extension.name,\n command: normalizedCommand,\n run: resolvedHandler,\n });\n };\n const registerParser = (command: string, override: ParserOverride): void => {\n assertExtensionCapability(extension, \"parser\", \"registerParser\");\n if (!allowRegistration(\"parser.override\", \"registerParser\", \"parser\")) {\n return;\n }\n const normalizedCommand = normalizeCommandName(assertNonEmptyString(\"registerParser command\", command));\n assertFunctionHandler(\"registerParser override\", override);\n parsers.overrides.push({\n layer: extension.layer,\n name: extension.name,\n command: normalizedCommand,\n run: override,\n });\n };\n const registerPreflight = (override: PreflightOverride): void => {\n assertExtensionCapability(extension, \"preflight\", \"registerPreflight\");\n if (!allowRegistration(\"preflight.override\", \"registerPreflight\", \"preflight\")) {\n return;\n }\n assertFunctionHandler(\"registerPreflight override\", override);\n preflight.overrides.push({\n layer: extension.layer,\n name: extension.name,\n run: override,\n });\n };\n const registerService = (service: ExtensionServiceName, override: ServiceOverride): void => {\n assertExtensionCapability(extension, \"services\", \"registerService\");\n const normalizedService = String(service).trim().toLowerCase();\n if (!isExtensionServiceName(normalizedService)) {\n throw new TypeError(`registerService service must be one of: ${KNOWN_EXTENSION_SERVICE_NAMES.join(\", \")}`);\n }\n if (!allowRegistration(\"services.override\", \"registerService\", \"services\", { service: normalizedService })) {\n return;\n }\n assertFunctionHandler(\"registerService override\", override);\n services.overrides.push({\n layer: extension.layer,\n name: extension.name,\n service: normalizedService as ExtensionServiceName,\n run: override,\n });\n };\n const registerRenderer = (format: OutputRendererFormat, renderer: RendererOverride): void => {\n assertExtensionCapability(extension, \"renderers\", \"registerRenderer\");\n if (!allowRegistration(\"renderers.override\", \"registerRenderer\", \"renderers\")) {\n return;\n }\n if (typeof renderer !== \"function\") {\n throw new TypeError(\"registerRenderer requires a renderer function\");\n }\n const normalizedFormat = String(format).trim().toLowerCase();\n if (!isOutputRendererFormat(normalizedFormat)) {\n throw new Error(`registerRenderer format must be toon|json, received: ${String(format)}`);\n }\n renderers.overrides.push({\n layer: extension.layer,\n name: extension.name,\n format: normalizedFormat,\n run: renderer,\n });\n };\n const registerFlags = (targetCommand: string, flags: FlagDefinition[]): void => {\n assertExtensionCapability(extension, \"schema\", \"registerFlags\");\n if (!allowRegistration(\"schema.flags\", \"registerFlags\", \"schema\")) {\n return;\n }\n const normalizedTargetCommand = normalizeCommandName(assertNonEmptyString(\"registerFlags targetCommand\", targetCommand));\n validateFlagDefinitions(flags);\n const normalizedFlags = normalizeRegistrationRecordList(\"registerFlags flags\", flags);\n if (normalizedFlags.length === 0) {\n throw new TypeError(\"registerFlags requires at least one flag definition\");\n }\n registrations.flags.push({\n layer: extension.layer,\n name: extension.name,\n target_command: normalizedTargetCommand,\n flags: normalizedFlags,\n });\n };\n const registerItemFields = (fields: SchemaFieldDefinition[]): void => {\n assertExtensionCapability(extension, \"schema\", \"registerItemFields\");\n if (!allowRegistration(\"schema.itemfields\", \"registerItemFields\", \"schema\")) {\n return;\n }\n validateItemFieldDefinitions(fields);\n const normalizedFields = normalizeRegistrationRecordList(\n \"registerItemFields fields\",\n fields,\n ) as SchemaFieldDefinition[];\n if (normalizedFields.length === 0) {\n throw new TypeError(\"registerItemFields requires at least one field definition\");\n }\n registrations.item_fields.push({\n layer: extension.layer,\n name: extension.name,\n fields: normalizedFields,\n });\n };\n const registerItemTypes = (types: SchemaItemTypeDefinition[]): void => {\n assertExtensionCapability(extension, \"schema\", \"registerItemTypes\");\n if (!allowRegistration(\"schema.itemtypes\", \"registerItemTypes\", \"schema\")) {\n return;\n }\n validateItemTypeDefinitions(types);\n const normalizedTypes = normalizeRegistrationRecordList(\n \"registerItemTypes types\",\n types,\n ) as SchemaItemTypeDefinition[];\n if (normalizedTypes.length === 0) {\n throw new TypeError(\"registerItemTypes requires at least one type definition\");\n }\n registrations.item_types.push({\n layer: extension.layer,\n name: extension.name,\n types: normalizedTypes,\n });\n };\n const registerMigration = (definition: SchemaMigrationDefinition): void => {\n assertExtensionCapability(extension, \"schema\", \"registerMigration\");\n if (!allowRegistration(\"schema.migrations\", \"registerMigration\", \"schema\")) {\n return;\n }\n validateMigrationDefinition(definition);\n const runtimeDefinition = normalizeRuntimeRegistrationRecord(\"registerMigration definition\", definition);\n registrations.migrations.push(\n attachRuntimeDefinition(\n {\n layer: extension.layer,\n name: extension.name,\n definition: normalizeRegistrationRecord(\"registerMigration definition\", definition),\n },\n runtimeDefinition,\n ) as RegisteredExtensionSchemaMigrationDefinition,\n );\n };\n const registerImporter = (name: string, importer: Importer): void => {\n assertExtensionCapability(extension, \"importers\", \"registerImporter\");\n if (!allowRegistration(\"importers.importer\", \"registerImporter\", \"importers\")) {\n return;\n }\n const normalizedName = normalizeRegistrationName(assertNonEmptyString(\"registerImporter name\", name));\n assertFunctionHandler(\"registerImporter importer\", importer);\n const commandPath = toRegistrationCommandPath(normalizedName, \"import\");\n registrations.importers.push({\n layer: extension.layer,\n name: extension.name,\n importer: normalizedName,\n });\n commands.handlers.push({\n layer: extension.layer,\n name: extension.name,\n command: commandPath,\n run: async (context) =>\n importer({\n registration: normalizedName,\n action: \"import\",\n command: context.command,\n args: cloneContextSnapshot(context.args),\n options: cloneContextSnapshot(context.options),\n global: cloneContextSnapshot(context.global),\n pm_root: context.pm_root,\n }),\n });\n };\n const registerExporter = (name: string, exporter: Exporter): void => {\n assertExtensionCapability(extension, \"importers\", \"registerExporter\");\n if (!allowRegistration(\"importers.exporter\", \"registerExporter\", \"importers\")) {\n return;\n }\n const normalizedName = normalizeRegistrationName(assertNonEmptyString(\"registerExporter name\", name));\n assertFunctionHandler(\"registerExporter exporter\", exporter);\n const commandPath = toRegistrationCommandPath(normalizedName, \"export\");\n registrations.exporters.push({\n layer: extension.layer,\n name: extension.name,\n exporter: normalizedName,\n });\n commands.handlers.push({\n layer: extension.layer,\n name: extension.name,\n command: commandPath,\n run: async (context) =>\n exporter({\n registration: normalizedName,\n action: \"export\",\n command: context.command,\n args: cloneContextSnapshot(context.args),\n options: cloneContextSnapshot(context.options),\n global: cloneContextSnapshot(context.global),\n pm_root: context.pm_root,\n }),\n });\n };\n const registerSearchProvider = (provider: SearchProviderDefinition): void => {\n assertExtensionCapability(extension, \"search\", \"registerSearchProvider\");\n if (!allowRegistration(\"search.provider\", \"registerSearchProvider\", \"search\")) {\n return;\n }\n const runtimeDefinition = normalizeRuntimeRegistrationRecord(\"registerSearchProvider provider\", provider);\n registrations.search_providers.push(\n attachRuntimeDefinition(\n {\n layer: extension.layer,\n name: extension.name,\n definition: normalizeRegistrationRecord(\"registerSearchProvider provider\", provider),\n },\n runtimeDefinition,\n ) as RegisteredExtensionSearchProvider,\n );\n };\n const registerVectorStoreAdapter = (adapter: VectorStoreAdapterDefinition): void => {\n assertExtensionCapability(extension, \"search\", \"registerVectorStoreAdapter\");\n if (!allowRegistration(\"search.vectorstore\", \"registerVectorStoreAdapter\", \"search\")) {\n return;\n }\n const runtimeDefinition = normalizeRuntimeRegistrationRecord(\"registerVectorStoreAdapter adapter\", adapter);\n registrations.vector_store_adapters.push(\n attachRuntimeDefinition(\n {\n layer: extension.layer,\n name: extension.name,\n definition: normalizeRegistrationRecord(\"registerVectorStoreAdapter adapter\", adapter),\n },\n runtimeDefinition,\n ) as RegisteredExtensionVectorStoreAdapter,\n );\n };\n const registerBeforeCommand = (hook: BeforeCommandHook): void => {\n assertExtensionCapability(extension, \"hooks\", \"api.hooks.beforeCommand\");\n if (!allowRegistration(\"hooks.beforecommand\", \"api.hooks.beforeCommand\", \"hooks\")) {\n return;\n }\n assertHookHandler(\"beforeCommand\", hook);\n hooks.beforeCommand.push({\n layer: extension.layer,\n name: extension.name,\n run: hook,\n });\n };\n const registerAfterCommand = (hook: AfterCommandHook): void => {\n assertExtensionCapability(extension, \"hooks\", \"api.hooks.afterCommand\");\n if (!allowRegistration(\"hooks.aftercommand\", \"api.hooks.afterCommand\", \"hooks\")) {\n return;\n }\n assertHookHandler(\"afterCommand\", hook);\n hooks.afterCommand.push({\n layer: extension.layer,\n name: extension.name,\n run: hook,\n });\n };\n const registerOnWrite = (hook: OnWriteHook): void => {\n assertExtensionCapability(extension, \"hooks\", \"api.hooks.onWrite\");\n if (!allowRegistration(\"hooks.onwrite\", \"api.hooks.onWrite\", \"hooks\")) {\n return;\n }\n assertHookHandler(\"onWrite\", hook);\n hooks.onWrite.push({\n layer: extension.layer,\n name: extension.name,\n run: hook,\n });\n };\n const registerOnRead = (hook: OnReadHook): void => {\n assertExtensionCapability(extension, \"hooks\", \"api.hooks.onRead\");\n if (!allowRegistration(\"hooks.onread\", \"api.hooks.onRead\", \"hooks\")) {\n return;\n }\n assertHookHandler(\"onRead\", hook);\n hooks.onRead.push({\n layer: extension.layer,\n name: extension.name,\n run: hook,\n });\n };\n const registerOnIndex = (hook: OnIndexHook): void => {\n assertExtensionCapability(extension, \"hooks\", \"api.hooks.onIndex\");\n if (!allowRegistration(\"hooks.onindex\", \"api.hooks.onIndex\", \"hooks\")) {\n return;\n }\n assertHookHandler(\"onIndex\", hook);\n hooks.onIndex.push({\n layer: extension.layer,\n name: extension.name,\n run: hook,\n });\n };\n\n return {\n registerCommand,\n registerParser,\n registerPreflight,\n registerService,\n registerFlags,\n registerItemFields,\n registerItemTypes,\n registerMigration,\n registerRenderer,\n registerImporter,\n registerExporter,\n registerSearchProvider,\n registerVectorStoreAdapter,\n hooks: {\n beforeCommand: registerBeforeCommand,\n afterCommand: registerAfterCommand,\n onWrite: registerOnWrite,\n onRead: registerOnRead,\n onIndex: registerOnIndex,\n },\n };\n}\n\nfunction getRegistrationCounts(registrations: ExtensionRegistrationRegistry): ExtensionRegistrationCounts {\n const commandCount = registrations.commands.length;\n const flagCount = registrations.flags.reduce((total, entry) => total + entry.flags.length, 0);\n const itemFieldCount = registrations.item_fields.reduce((total, entry) => total + entry.fields.length, 0);\n const itemTypeCount = registrations.item_types.reduce((total, entry) => total + entry.types.length, 0);\n return {\n commands: commandCount,\n flags: flagCount,\n item_fields: itemFieldCount,\n item_types: itemTypeCount,\n migrations: registrations.migrations.length,\n importers: registrations.importers.length,\n exporters: registrations.exporters.length,\n search_providers: registrations.search_providers.length,\n vector_store_adapters: registrations.vector_store_adapters.length,\n };\n}\n\nfunction collectCommandCollisionWarnings(commands: ExtensionCommandRegistry): string[] {\n const warnings: string[] = [];\n const collectByCommand = <TEntry extends { layer: ExtensionLayer; name: string; command: string }>(\n entries: TEntry[],\n codePrefix: string,\n ): void => {\n const grouped = new Map<string, TEntry[]>();\n for (const entry of entries) {\n const bucket = grouped.get(entry.command) ?? [];\n bucket.push(entry);\n grouped.set(entry.command, bucket);\n }\n for (const command of [...grouped.keys()].sort((left, right) => left.localeCompare(right))) {\n const bucket = grouped.get(command) ?? [];\n if (bucket.length <= 1) {\n continue;\n }\n const winner = bucket[bucket.length - 1];\n for (const displaced of bucket.slice(0, -1)) {\n warnings.push(\n `${codePrefix}:${command}:${winner.layer}:${winner.name}:${displaced.layer}:${displaced.name}`,\n );\n }\n }\n };\n\n collectByCommand(commands.handlers, \"extension_command_handler_collision\");\n collectByCommand(commands.overrides, \"extension_command_override_collision\");\n\n const handlerCommands = new Set(commands.handlers.map((entry) => entry.command));\n const overlapCommands = [...new Set(commands.overrides.map((entry) => entry.command))]\n .filter((command) => handlerCommands.has(command))\n .sort((left, right) => left.localeCompare(right));\n for (const command of overlapCommands) {\n warnings.push(`extension_command_override_handler_overlap:${command}`);\n }\n\n return warnings;\n}\n\nfunction collectRendererCollisionWarnings(renderers: ExtensionRendererRegistry): string[] {\n const grouped = new Map<OutputRendererFormat, RegisteredExtensionRendererOverride[]>();\n for (const entry of renderers.overrides) {\n const bucket = grouped.get(entry.format) ?? [];\n bucket.push(entry);\n grouped.set(entry.format, bucket);\n }\n const warnings: string[] = [];\n for (const format of [...grouped.keys()].sort((left, right) => left.localeCompare(right))) {\n const bucket = grouped.get(format) ?? [];\n if (bucket.length <= 1) {\n continue;\n }\n const winner = bucket[bucket.length - 1];\n for (const displaced of bucket.slice(0, -1)) {\n warnings.push(\n `extension_renderer_collision:${format}:${winner.layer}:${winner.name}:${displaced.layer}:${displaced.name}`,\n );\n }\n }\n return warnings;\n}\n\nfunction collectParserCollisionWarnings(parsers: ExtensionParserRegistry): string[] {\n const warnings: string[] = [];\n const grouped = new Map<string, RegisteredExtensionParserOverride[]>();\n for (const entry of parsers.overrides) {\n const bucket = grouped.get(entry.command) ?? [];\n bucket.push(entry);\n grouped.set(entry.command, bucket);\n }\n for (const command of [...grouped.keys()].sort((left, right) => left.localeCompare(right))) {\n const bucket = grouped.get(command) ?? [];\n if (bucket.length <= 1) {\n continue;\n }\n const winner = bucket[bucket.length - 1];\n for (const displaced of bucket.slice(0, -1)) {\n warnings.push(\n `extension_parser_override_collision:${command}:${winner.layer}:${winner.name}:${displaced.layer}:${displaced.name}`,\n );\n }\n }\n return warnings;\n}\n\nfunction collectPreflightCollisionWarnings(preflight: ExtensionPreflightRegistry): string[] {\n if (preflight.overrides.length <= 1) {\n return [];\n }\n const winner = preflight.overrides[preflight.overrides.length - 1];\n return preflight.overrides.slice(0, -1).map(\n (displaced) =>\n `extension_preflight_override_collision:${winner.layer}:${winner.name}:${displaced.layer}:${displaced.name}`,\n );\n}\n\n// Services whose runtime semantics are chain/fall-through (each override gets a chance);\n// for those, registering multiple overrides is by design, not a collision.\nconst CHAINED_SERVICE_NAMES: ReadonlySet<ExtensionServiceName> = new Set<ExtensionServiceName>([\n \"output_format\",\n]);\n\nfunction collectServiceCollisionWarnings(services: ExtensionServiceRegistry): string[] {\n const warnings: string[] = [];\n const grouped = new Map<ExtensionServiceName, RegisteredExtensionServiceOverride[]>();\n for (const entry of services.overrides) {\n const bucket = grouped.get(entry.service) ?? [];\n bucket.push(entry);\n grouped.set(entry.service, bucket);\n }\n for (const service of [...grouped.keys()].sort((left, right) => left.localeCompare(right))) {\n const bucket = grouped.get(service) ?? [];\n if (bucket.length <= 1) {\n continue;\n }\n if (CHAINED_SERVICE_NAMES.has(service)) {\n continue;\n }\n const winner = bucket[bucket.length - 1];\n for (const displaced of bucket.slice(0, -1)) {\n warnings.push(\n `extension_service_override_collision:${service}:${winner.layer}:${winner.name}:${displaced.layer}:${displaced.name}`,\n );\n }\n }\n return warnings;\n}\n\nexport async function activateExtensions(loadResult: ExtensionLoadResult): Promise<ExtensionActivationResult> {\n const policy = hydrateExtensionPolicy(loadResult.policy ?? DEFAULT_EXTENSION_POLICY);\n const hooks = createEmptyExtensionHookRegistry();\n const commands = createEmptyExtensionCommandRegistry();\n const parsers = createEmptyExtensionParserRegistry();\n const preflight = createEmptyExtensionPreflightRegistry();\n const services = createEmptyExtensionServiceRegistry();\n const renderers = createEmptyExtensionRendererRegistry();\n const registrations = createEmptyExtensionRegistrationRegistry();\n const failed: FailedExtensionActivation[] = [];\n const warnings: string[] = [];\n\n for (const extension of loadResult.loaded) {\n const activatable = resolveActivatableExtension(extension.module);\n if (!activatable) {\n continue;\n }\n\n try {\n await activatable.activate(\n createExtensionApi(\n extension,\n hooks,\n commands,\n parsers,\n preflight,\n services,\n renderers,\n registrations,\n warnings,\n policy,\n ),\n );\n } catch (error: unknown) {\n warnings.push(`extension_activate_failed:${extension.layer}:${extension.name}`);\n const trace = extractRegistrationValidationTrace(error);\n failed.push({\n layer: extension.layer,\n name: extension.name,\n entry_path: extension.entry_path,\n error: formatUnknownError(error),\n trace,\n });\n }\n }\n\n const collisionWarnings = [\n ...collectCommandCollisionWarnings(commands),\n ...collectParserCollisionWarnings(parsers),\n ...collectPreflightCollisionWarnings(preflight),\n ...collectServiceCollisionWarnings(services),\n ...collectRendererCollisionWarnings(renderers),\n ];\n const mergedWarnings = [...new Set([...warnings, ...collisionWarnings])];\n\n return {\n hooks,\n commands,\n parsers,\n preflight,\n services,\n renderers,\n registrations,\n failed,\n warnings: mergedWarnings,\n hook_counts: {\n before_command: hooks.beforeCommand.length,\n after_command: hooks.afterCommand.length,\n on_write: hooks.onWrite.length,\n on_read: hooks.onRead.length,\n on_index: hooks.onIndex.length,\n },\n command_override_count: commands.overrides.length,\n command_handler_count: commands.handlers.length,\n parser_override_count: parsers.overrides.length,\n preflight_override_count: preflight.overrides.length,\n service_override_count: services.overrides.length,\n renderer_override_count: renderers.overrides.length,\n registration_counts: getRegistrationCounts(registrations),\n };\n}\n\n", "import path from \"path\";\n\nexport function isPathWithinDirectory(directory: string, targetPath: string): boolean {\n const relative = path.relative(directory, targetPath);\n if (relative.length === 0) {\n return true;\n }\n return !relative.startsWith(\"..\") && !path.isAbsolute(relative);\n}\n", "import {\n KNOWN_EXTENSION_CAPABILITIES,\n EXTENSION_CAPABILITY_CONTRACT_VERSION,\n EXTENSION_CAPABILITY_LEGACY_ALIASES,\n type ExtensionCapability,\n type ExtensionLayer,\n type LegacyExtensionCapabilityAliasMapping,\n type UnknownExtensionCapabilityWarningDetails,\n} from \"./extension-types.js\";\n\nexport function normalizeNames(values: string[]): string[] {\n return [...new Set(values.map((value) => value.trim()).filter((value) => value.length > 0))].sort((a, b) =>\n a.localeCompare(b),\n );\n}\n\nexport function isKnownExtensionCapability(value: string): value is ExtensionCapability {\n return (KNOWN_EXTENSION_CAPABILITIES as readonly string[]).includes(value);\n}\n\nexport function collectUnknownExtensionCapabilities(capabilities: readonly string[]): string[] {\n return capabilities.filter((capability) => !isKnownExtensionCapability(capability));\n}\n\nexport function resolveLegacyExtensionCapabilityAlias(capability: string): ExtensionCapability | null {\n const normalized = capability.trim().toLowerCase();\n if (normalized.length === 0) {\n return null;\n }\n return EXTENSION_CAPABILITY_LEGACY_ALIASES[normalized] ?? null;\n}\n\nexport function normalizeManifestCapabilities(rawCapabilities: readonly string[]): {\n capabilities: string[];\n legacy_aliases: LegacyExtensionCapabilityAliasMapping[];\n} {\n const normalizedCapabilities = normalizeNames([...rawCapabilities].map((value) => value.toLowerCase()));\n const remappedCapabilities: string[] = [];\n const legacyAliases: LegacyExtensionCapabilityAliasMapping[] = [];\n for (const capability of normalizedCapabilities) {\n const legacyAliasTarget = resolveLegacyExtensionCapabilityAlias(capability);\n if (legacyAliasTarget) {\n remappedCapabilities.push(legacyAliasTarget);\n legacyAliases.push({\n alias: capability,\n target: legacyAliasTarget,\n });\n continue;\n }\n remappedCapabilities.push(capability);\n }\n const dedupedLegacyAliases = [...new Map(legacyAliases.map((entry) => [`${entry.alias}>${entry.target}`, entry])).values()].sort(\n (left, right) => left.alias.localeCompare(right.alias),\n );\n return {\n capabilities: normalizeNames(remappedCapabilities),\n legacy_aliases: dedupedLegacyAliases,\n };\n}\n\nfunction levenshteinDistance(left: string, right: string): number {\n if (left === right) {\n return 0;\n }\n if (left.length === 0) {\n return right.length;\n }\n if (right.length === 0) {\n return left.length;\n }\n const previous = new Array<number>(right.length + 1);\n const current = new Array<number>(right.length + 1);\n for (let j = 0; j <= right.length; j += 1) {\n previous[j] = j;\n }\n for (let i = 1; i <= left.length; i += 1) {\n current[0] = i;\n for (let j = 1; j <= right.length; j += 1) {\n const substitutionCost = left[i - 1] === right[j - 1] ? 0 : 1;\n current[j] = Math.min(\n previous[j] + 1,\n current[j - 1] + 1,\n previous[j - 1] + substitutionCost,\n );\n }\n for (let j = 0; j <= right.length; j += 1) {\n previous[j] = current[j];\n }\n }\n return previous[right.length] ?? left.length;\n}\n\nexport function suggestKnownExtensionCapability(capability: string): string | null {\n const normalized = capability.trim().toLowerCase();\n if (normalized.length === 0) {\n return null;\n }\n const legacyAlias = resolveLegacyExtensionCapabilityAlias(normalized);\n if (legacyAlias) {\n return legacyAlias;\n }\n let bestMatch: string | null = null;\n let bestDistance = Number.POSITIVE_INFINITY;\n for (const candidate of KNOWN_EXTENSION_CAPABILITIES) {\n const distance = levenshteinDistance(normalized, candidate);\n if (distance < bestDistance) {\n bestDistance = distance;\n bestMatch = candidate;\n }\n }\n const maxDistance = Math.max(1, Math.floor(normalized.length * 0.34));\n return bestMatch !== null && bestDistance <= maxDistance ? bestMatch : null;\n}\n\nexport function formatUnknownExtensionCapabilityWarning(layer: ExtensionLayer, name: string, capability: string): string {\n const allowed = KNOWN_EXTENSION_CAPABILITIES.join(\",\");\n const suggested = suggestKnownExtensionCapability(capability) ?? \"none\";\n return `extension_capability_unknown:${layer}:${name}:${capability}:allowed=${allowed}:suggested=${suggested}`;\n}\n\nexport function formatLegacyExtensionCapabilityAliasWarning(\n layer: ExtensionLayer,\n name: string,\n aliases: readonly LegacyExtensionCapabilityAliasMapping[],\n): string {\n const aliasesToken = aliases.map((entry) => `${entry.alias}>${entry.target}`).join(\",\");\n return `extension_capability_legacy_alias:${layer}:${name}:aliases=${aliasesToken}`;\n}\n\n\nexport function parseUnknownExtensionCapabilityWarning(\n warning: string,\n): UnknownExtensionCapabilityWarningDetails | null {\n const match = /^extension_capability_unknown:(global|project):([^:]+):([^:]+):allowed=([^:]+):suggested=([^:]+)$/.exec(\n warning.trim(),\n );\n if (!match) {\n return null;\n }\n const [, layerRaw, name, capability, allowedRaw, suggestedRaw] = match;\n const layer = layerRaw as ExtensionLayer;\n const allowed_capabilities = allowedRaw\n .split(\",\")\n .map((value) => value.trim())\n .filter((value) => value.length > 0);\n const legacyAlias = resolveLegacyExtensionCapabilityAlias(capability);\n const suggestedFromWarning = suggestedRaw === \"none\" ? undefined : suggestedRaw;\n const suggested_capability = suggestedFromWarning ?? legacyAlias ?? undefined;\n const suggestion_source = suggested_capability\n ? legacyAlias === suggested_capability\n ? \"legacy_alias\"\n : \"nearest_match\"\n : undefined;\n return {\n layer,\n name,\n capability,\n allowed_capabilities,\n capability_contract_version: EXTENSION_CAPABILITY_CONTRACT_VERSION,\n suggested_capability,\n suggestion_source,\n legacy_alias_target: legacyAlias ?? undefined,\n };\n}\n\nexport function parseLegacyExtensionCapabilityAliasWarning(warning: string): UnknownExtensionCapabilityWarningDetails[] {\n const match = /^extension_capability_legacy_alias:(global|project):([^:]+):aliases=(.+)$/.exec(warning.trim());\n if (!match) {\n return [];\n }\n const [, layerRaw, name, aliasesRaw] = match;\n const layer = layerRaw as ExtensionLayer;\n const allowedCapabilities = [...KNOWN_EXTENSION_CAPABILITIES];\n const parsed: UnknownExtensionCapabilityWarningDetails[] = [];\n for (const token of aliasesRaw.split(\",\")) {\n const [rawAlias, rawTarget] = token.split(\">\");\n const alias = rawAlias?.trim();\n const target = rawTarget?.trim().toLowerCase();\n if (!alias || !target || !isKnownExtensionCapability(target)) {\n continue;\n }\n parsed.push({\n layer,\n name,\n capability: alias,\n allowed_capabilities: allowedCapabilities,\n capability_contract_version: EXTENSION_CAPABILITY_CONTRACT_VERSION,\n suggested_capability: target,\n suggestion_source: \"legacy_alias\",\n legacy_alias_target: target,\n });\n }\n return parsed;\n}\n", "import {\n KNOWN_EXTENSION_POLICY_MODES,\n KNOWN_EXTENSION_POLICY_SURFACES,\n KNOWN_EXTENSION_SANDBOX_PROFILES,\n KNOWN_EXTENSION_TRUST_MODES,\n type ExtensionCapability,\n type ExtensionGovernancePolicy,\n type ExtensionLayer,\n type ExtensionPolicyMode,\n type ExtensionPolicyOverride,\n type ExtensionPolicySurface,\n type ExtensionSandboxProfile,\n type ExtensionTrustMode,\n} from \"./extension-types.js\";\nimport { isKnownExtensionCapability } from \"./extension-capability-aliases.js\";\nimport { normalizeCommandName } from \"./extension-runtime-helpers.js\";\nimport type { PmSettings } from \"../../types/index.js\";\n\ninterface NormalizedExtensionPolicyOverride {\n name: string;\n disabled: boolean;\n requireTrusted: boolean;\n requireProvenance: boolean;\n sandboxProfile?: ExtensionSandboxProfile;\n allowedCapabilities: Set<string>;\n blockedCapabilities: Set<string>;\n allowedSurfaces: Set<string>;\n blockedSurfaces: Set<string>;\n allowedCommands: Set<string>;\n blockedCommands: Set<string>;\n allowedActions: Set<string>;\n blockedActions: Set<string>;\n allowedServices: Set<string>;\n blockedServices: Set<string>;\n}\n\nexport interface NormalizedExtensionPolicy {\n mode: ExtensionPolicyMode;\n trustMode: ExtensionTrustMode;\n requireProvenance: boolean;\n trustedExtensions: Set<string>;\n defaultSandboxProfile: ExtensionSandboxProfile;\n allowedExtensions: Set<string>;\n blockedExtensions: Set<string>;\n allowedCapabilities: Set<string>;\n blockedCapabilities: Set<string>;\n allowedSurfaces: Set<string>;\n blockedSurfaces: Set<string>;\n allowedCommands: Set<string>;\n blockedCommands: Set<string>;\n allowedActions: Set<string>;\n blockedActions: Set<string>;\n allowedServices: Set<string>;\n blockedServices: Set<string>;\n overridesByName: Map<string, NormalizedExtensionPolicyOverride>;\n warnings: string[];\n}\n\nexport interface PolicyExtensionRef {\n layer: ExtensionLayer;\n name: string;\n trusted?: boolean;\n provenanceVerified?: boolean;\n sandboxProfile?: ExtensionSandboxProfile;\n permissions?: Record<string, boolean | undefined>;\n}\n\nfunction normalizePolicyName(value: string | undefined): string {\n if (typeof value !== \"string\") {\n return \"\";\n }\n return value.trim().toLowerCase();\n}\n\nfunction normalizePolicyStringSet(values: readonly string[] | undefined): Set<string> {\n return new Set(\n (values ?? [])\n .map((value) => value.trim().toLowerCase())\n .filter((value) => value.length > 0),\n );\n}\n\nfunction normalizePolicySurfaceToken(value: string): string {\n const normalized = value.trim().toLowerCase();\n if (normalized.length === 0) {\n return \"\";\n }\n const segments = normalized\n .split(/[.:/]/)\n .map((segment) => segment.replace(/[\\s_-]+/g, \"\"))\n .filter((segment) => segment.length > 0);\n if (segments.length === 0) {\n return \"\";\n }\n if (segments.length === 1) {\n return segments[0];\n }\n return `${segments[0]}.${segments.slice(1).join(\"\")}`;\n}\n\nfunction normalizePolicySurfaceSet(values: readonly string[] | undefined): Set<string> {\n return new Set(\n (values ?? [])\n .map((value) => normalizePolicySurfaceToken(value))\n .filter((value) => value.length > 0),\n );\n}\n\nfunction normalizePolicyMode(value: string | undefined): ExtensionPolicyMode {\n const normalized = normalizePolicyName(value);\n if ((KNOWN_EXTENSION_POLICY_MODES as readonly string[]).includes(normalized)) {\n return normalized as ExtensionPolicyMode;\n }\n return \"off\";\n}\n\nfunction normalizePolicyTrustMode(value: string | undefined): ExtensionTrustMode {\n const normalized = normalizePolicyName(value);\n if ((KNOWN_EXTENSION_TRUST_MODES as readonly string[]).includes(normalized)) {\n return normalized as ExtensionTrustMode;\n }\n return \"off\";\n}\n\nexport function normalizePolicySandboxProfile(value: string | undefined): ExtensionSandboxProfile {\n const normalized = normalizePolicyName(value);\n if ((KNOWN_EXTENSION_SANDBOX_PROFILES as readonly string[]).includes(normalized)) {\n return normalized as ExtensionSandboxProfile;\n }\n return \"none\";\n}\n\nfunction toSortedList(values: Iterable<string>): string[] {\n return [...new Set(values)].sort((left, right) => left.localeCompare(right));\n}\n\nfunction buildExtensionPolicyOverride(\n rawOverride: ExtensionPolicyOverride,\n): { name: string; normalized: NormalizedExtensionPolicyOverride } | null {\n const name = normalizePolicyName(rawOverride.name);\n if (name.length === 0) {\n return null;\n }\n return {\n name,\n normalized: {\n name,\n disabled: rawOverride.disabled === true,\n requireTrusted: rawOverride.require_trusted === true,\n requireProvenance: rawOverride.require_provenance === true,\n sandboxProfile:\n rawOverride.sandbox_profile !== undefined\n ? normalizePolicySandboxProfile(rawOverride.sandbox_profile)\n : undefined,\n allowedCapabilities: normalizePolicyStringSet(rawOverride.allowed_capabilities),\n blockedCapabilities: normalizePolicyStringSet(rawOverride.blocked_capabilities),\n allowedSurfaces: normalizePolicySurfaceSet(rawOverride.allowed_surfaces),\n blockedSurfaces: normalizePolicySurfaceSet(rawOverride.blocked_surfaces),\n allowedCommands: normalizePolicyStringSet(rawOverride.allowed_commands),\n blockedCommands: normalizePolicyStringSet(rawOverride.blocked_commands),\n allowedActions: normalizePolicyStringSet(rawOverride.allowed_actions),\n blockedActions: normalizePolicyStringSet(rawOverride.blocked_actions),\n allowedServices: normalizePolicyStringSet(rawOverride.allowed_services),\n blockedServices: normalizePolicyStringSet(rawOverride.blocked_services),\n },\n };\n}\n\nfunction collectExtensionPolicyOverrides(\n rawOverrides: readonly ExtensionPolicyOverride[] | undefined,\n): Map<string, NormalizedExtensionPolicyOverride> {\n const overridesByName = new Map<string, NormalizedExtensionPolicyOverride>();\n for (const rawOverride of rawOverrides ?? []) {\n const built = buildExtensionPolicyOverride(rawOverride);\n if (built) {\n overridesByName.set(built.name, built.normalized);\n }\n }\n return overridesByName;\n}\n\nexport function normalizeExtensionPolicy(settings: PmSettings): NormalizedExtensionPolicy {\n const policy = settings.extensions.policy;\n const mode = normalizePolicyMode(policy?.mode);\n const trustMode = normalizePolicyTrustMode(policy?.trust_mode);\n const requireProvenance = policy?.require_provenance === true;\n const trustedExtensions = normalizePolicyStringSet(policy?.trusted_extensions);\n const defaultSandboxProfile = normalizePolicySandboxProfile(policy?.default_sandbox_profile);\n const allowedExtensions = normalizePolicyStringSet(policy?.allowed_extensions);\n const blockedExtensions = normalizePolicyStringSet(policy?.blocked_extensions);\n const allowedCapabilities = normalizePolicyStringSet(policy?.allowed_capabilities);\n const blockedCapabilities = normalizePolicyStringSet(policy?.blocked_capabilities);\n const allowedSurfaces = normalizePolicySurfaceSet(policy?.allowed_surfaces);\n const blockedSurfaces = normalizePolicySurfaceSet(policy?.blocked_surfaces);\n const allowedCommands = normalizePolicyStringSet(policy?.allowed_commands);\n const blockedCommands = normalizePolicyStringSet(policy?.blocked_commands);\n const allowedActions = normalizePolicyStringSet(policy?.allowed_actions);\n const blockedActions = normalizePolicyStringSet(policy?.blocked_actions);\n const allowedServices = normalizePolicyStringSet(policy?.allowed_services);\n const blockedServices = normalizePolicyStringSet(policy?.blocked_services);\n const overridesByName = collectExtensionPolicyOverrides(policy?.extension_overrides);\n\n const warnings: string[] = [];\n for (const capability of toSortedList([...allowedCapabilities, ...blockedCapabilities])) {\n if (!isKnownExtensionCapability(capability)) {\n warnings.push(`extension_policy_unknown_capability:${capability}`);\n }\n }\n for (const override of [...overridesByName.values()].sort((left, right) => left.name.localeCompare(right.name))) {\n for (const capability of toSortedList([...override.allowedCapabilities, ...override.blockedCapabilities])) {\n if (!isKnownExtensionCapability(capability)) {\n warnings.push(`extension_policy_unknown_capability:${override.name}:${capability}`);\n }\n }\n }\n const knownSurfaces = new Set<string>(KNOWN_EXTENSION_POLICY_SURFACES);\n for (const surface of toSortedList([...allowedSurfaces, ...blockedSurfaces])) {\n if (!knownSurfaces.has(surface)) {\n warnings.push(`extension_policy_unknown_surface:${surface}`);\n }\n }\n for (const override of [...overridesByName.values()].sort((left, right) => left.name.localeCompare(right.name))) {\n for (const surface of toSortedList([...override.allowedSurfaces, ...override.blockedSurfaces])) {\n if (!knownSurfaces.has(surface)) {\n warnings.push(`extension_policy_unknown_surface:${override.name}:${surface}`);\n }\n }\n }\n\n return {\n mode,\n trustMode,\n requireProvenance,\n trustedExtensions,\n defaultSandboxProfile,\n allowedExtensions,\n blockedExtensions,\n allowedCapabilities,\n blockedCapabilities,\n allowedSurfaces,\n blockedSurfaces,\n allowedCommands,\n blockedCommands,\n allowedActions,\n blockedActions,\n allowedServices,\n blockedServices,\n overridesByName,\n warnings: [...new Set(warnings)].sort((left, right) => left.localeCompare(right)),\n };\n}\n\nexport function serializeExtensionPolicy(policy: NormalizedExtensionPolicy): ExtensionGovernancePolicy {\n const overrides = [...policy.overridesByName.values()]\n .sort((left, right) => left.name.localeCompare(right.name))\n .map((override) => ({\n name: override.name,\n ...(override.disabled ? { disabled: true } : {}),\n ...(override.requireTrusted ? { require_trusted: true } : {}),\n ...(override.requireProvenance ? { require_provenance: true } : {}),\n ...(override.sandboxProfile ? { sandbox_profile: override.sandboxProfile } : {}),\n ...(override.allowedCapabilities.size > 0 ? { allowed_capabilities: toSortedList(override.allowedCapabilities) } : {}),\n ...(override.blockedCapabilities.size > 0 ? { blocked_capabilities: toSortedList(override.blockedCapabilities) } : {}),\n ...(override.allowedSurfaces.size > 0 ? { allowed_surfaces: toSortedList(override.allowedSurfaces) } : {}),\n ...(override.blockedSurfaces.size > 0 ? { blocked_surfaces: toSortedList(override.blockedSurfaces) } : {}),\n ...(override.allowedCommands.size > 0 ? { allowed_commands: toSortedList(override.allowedCommands) } : {}),\n ...(override.blockedCommands.size > 0 ? { blocked_commands: toSortedList(override.blockedCommands) } : {}),\n ...(override.allowedActions.size > 0 ? { allowed_actions: toSortedList(override.allowedActions) } : {}),\n ...(override.blockedActions.size > 0 ? { blocked_actions: toSortedList(override.blockedActions) } : {}),\n ...(override.allowedServices.size > 0 ? { allowed_services: toSortedList(override.allowedServices) } : {}),\n ...(override.blockedServices.size > 0 ? { blocked_services: toSortedList(override.blockedServices) } : {}),\n }));\n return {\n mode: policy.mode,\n trust_mode: policy.trustMode,\n require_provenance: policy.requireProvenance,\n trusted_extensions: toSortedList(policy.trustedExtensions),\n default_sandbox_profile: policy.defaultSandboxProfile,\n allowed_extensions: toSortedList(policy.allowedExtensions),\n blocked_extensions: toSortedList(policy.blockedExtensions),\n allowed_capabilities: toSortedList(policy.allowedCapabilities),\n blocked_capabilities: toSortedList(policy.blockedCapabilities),\n allowed_surfaces: toSortedList(policy.allowedSurfaces),\n blocked_surfaces: toSortedList(policy.blockedSurfaces),\n allowed_commands: toSortedList(policy.allowedCommands),\n blocked_commands: toSortedList(policy.blockedCommands),\n allowed_actions: toSortedList(policy.allowedActions),\n blocked_actions: toSortedList(policy.blockedActions),\n allowed_services: toSortedList(policy.allowedServices),\n blocked_services: toSortedList(policy.blockedServices),\n extension_overrides: overrides,\n };\n}\n\nexport function hydrateExtensionPolicy(policy: ExtensionGovernancePolicy): NormalizedExtensionPolicy {\n const overridesByName = collectExtensionPolicyOverrides(policy.extension_overrides);\n return {\n mode: normalizePolicyMode(policy.mode),\n trustMode: normalizePolicyTrustMode(policy.trust_mode),\n requireProvenance: policy.require_provenance === true,\n trustedExtensions: normalizePolicyStringSet(policy.trusted_extensions),\n defaultSandboxProfile: normalizePolicySandboxProfile(policy.default_sandbox_profile),\n allowedExtensions: normalizePolicyStringSet(policy.allowed_extensions),\n blockedExtensions: normalizePolicyStringSet(policy.blocked_extensions),\n allowedCapabilities: normalizePolicyStringSet(policy.allowed_capabilities),\n blockedCapabilities: normalizePolicyStringSet(policy.blocked_capabilities),\n allowedSurfaces: normalizePolicySurfaceSet(policy.allowed_surfaces),\n blockedSurfaces: normalizePolicySurfaceSet(policy.blocked_surfaces),\n allowedCommands: normalizePolicyStringSet(policy.allowed_commands),\n blockedCommands: normalizePolicyStringSet(policy.blocked_commands),\n allowedActions: normalizePolicyStringSet(policy.allowed_actions),\n blockedActions: normalizePolicyStringSet(policy.blocked_actions),\n allowedServices: normalizePolicyStringSet(policy.allowed_services),\n blockedServices: normalizePolicyStringSet(policy.blocked_services),\n overridesByName,\n warnings: [],\n };\n}\n\nfunction resolvePolicyOverride(\n policy: NormalizedExtensionPolicy,\n extensionName: string,\n): NormalizedExtensionPolicyOverride | null {\n return policy.overridesByName.get(normalizePolicyName(extensionName)) ?? null;\n}\n\nfunction evaluatePolicySet(\n allowed: Set<string>,\n blocked: Set<string>,\n value: string,\n notAllowlistedReason: string,\n blockedReason: string,\n): string | null {\n if (blocked.has(value)) {\n return blockedReason;\n }\n if (allowed.size > 0 && !allowed.has(value)) {\n return notAllowlistedReason;\n }\n return null;\n}\n\nfunction resolvePolicyCapabilityReason(\n policy: NormalizedExtensionPolicy,\n extension: PolicyExtensionRef,\n capability: string,\n): string | null {\n const normalizedCapability = capability.trim().toLowerCase();\n const override = resolvePolicyOverride(policy, extension.name);\n const allowed = override && override.allowedCapabilities.size > 0 ? override.allowedCapabilities : policy.allowedCapabilities;\n const blocked = new Set<string>([\n ...policy.blockedCapabilities,\n ...(override ? override.blockedCapabilities : []),\n ]);\n return evaluatePolicySet(\n allowed,\n blocked,\n normalizedCapability,\n \"capability_not_allowlisted\",\n \"capability_blocked\",\n );\n}\n\nfunction resolvePolicySurfaceReason(\n policy: NormalizedExtensionPolicy,\n extension: PolicyExtensionRef,\n surface: ExtensionPolicySurface,\n): string | null {\n const override = resolvePolicyOverride(policy, extension.name);\n const allowed = override && override.allowedSurfaces.size > 0 ? override.allowedSurfaces : policy.allowedSurfaces;\n const blocked = new Set<string>([\n ...policy.blockedSurfaces,\n ...(override ? override.blockedSurfaces : []),\n ]);\n return evaluatePolicySet(allowed, blocked, surface, \"surface_not_allowlisted\", \"surface_blocked\");\n}\n\nfunction resolvePolicyCommandReason(\n policy: NormalizedExtensionPolicy,\n extension: PolicyExtensionRef,\n command: string,\n): string | null {\n const normalizedCommand = normalizeCommandName(command);\n if (normalizedCommand.length === 0) {\n return null;\n }\n const override = resolvePolicyOverride(policy, extension.name);\n const allowed = override && override.allowedCommands.size > 0 ? override.allowedCommands : policy.allowedCommands;\n const blocked = new Set<string>([\n ...policy.blockedCommands,\n ...(override ? override.blockedCommands : []),\n ]);\n return evaluatePolicySet(allowed, blocked, normalizedCommand, \"command_not_allowlisted\", \"command_blocked\");\n}\n\nfunction resolvePolicyActionReason(\n policy: NormalizedExtensionPolicy,\n extension: PolicyExtensionRef,\n action: string,\n): string | null {\n const normalizedAction = normalizePolicyName(action).replace(/\\s+/g, \"-\");\n if (normalizedAction.length === 0) {\n return null;\n }\n const override = resolvePolicyOverride(policy, extension.name);\n const allowed = override && override.allowedActions.size > 0 ? override.allowedActions : policy.allowedActions;\n const blocked = new Set<string>([\n ...policy.blockedActions,\n ...(override ? override.blockedActions : []),\n ]);\n return evaluatePolicySet(allowed, blocked, normalizedAction, \"action_not_allowlisted\", \"action_blocked\");\n}\n\nfunction resolvePolicyServiceReason(\n policy: NormalizedExtensionPolicy,\n extension: PolicyExtensionRef,\n service: string,\n): string | null {\n const normalizedService = normalizePolicyName(service);\n if (normalizedService.length === 0) {\n return null;\n }\n const override = resolvePolicyOverride(policy, extension.name);\n const allowed = override && override.allowedServices.size > 0 ? override.allowedServices : policy.allowedServices;\n const blocked = new Set<string>([\n ...policy.blockedServices,\n ...(override ? override.blockedServices : []),\n ]);\n return evaluatePolicySet(allowed, blocked, normalizedService, \"service_not_allowlisted\", \"service_blocked\");\n}\n\nfunction resolvePolicyExtensionReason(policy: NormalizedExtensionPolicy, extension: PolicyExtensionRef): string | null {\n const name = normalizePolicyName(extension.name);\n const override = resolvePolicyOverride(policy, extension.name);\n if (override?.disabled === true) {\n return \"extension_override_disabled\";\n }\n return evaluatePolicySet(\n policy.allowedExtensions,\n policy.blockedExtensions,\n name,\n \"extension_not_allowlisted\",\n \"extension_blocked\",\n );\n}\n\nfunction resolvePolicyTrustReason(policy: NormalizedExtensionPolicy, extension: PolicyExtensionRef): string | null {\n if (policy.trustMode === \"off\") {\n return null;\n }\n const override = resolvePolicyOverride(policy, extension.name);\n const name = normalizePolicyName(extension.name);\n const trusted = extension.trusted === true;\n const provenanceVerified = extension.provenanceVerified === true;\n\n if (policy.trustedExtensions.size > 0 && !policy.trustedExtensions.has(name)) {\n return \"extension_not_trusted\";\n }\n if ((override?.requireTrusted === true || policy.trustMode === \"warn\" || policy.trustMode === \"enforce\") && !trusted) {\n return \"extension_untrusted\";\n }\n if ((policy.requireProvenance || override?.requireProvenance === true) && !provenanceVerified) {\n return \"provenance_missing_or_unverified\";\n }\n return null;\n}\n\nfunction resolvePolicySandboxReason(policy: NormalizedExtensionPolicy, extension: PolicyExtensionRef): string | null {\n if (policy.mode === \"off\") {\n return null;\n }\n const override = resolvePolicyOverride(policy, extension.name);\n const profile = override?.sandboxProfile ?? extension.sandboxProfile ?? policy.defaultSandboxProfile;\n if (profile === \"none\") {\n return null;\n }\n const permissions = extension.permissions;\n if (!permissions) {\n return \"sandbox_permissions_missing\";\n }\n\n const hasPermission = (name: keyof typeof permissions): boolean => permissions[name] === true;\n if (profile === \"restricted\") {\n if (hasPermission(\"process_spawn\")) {\n return \"sandbox_restricted_disallows_process_spawn\";\n }\n if (hasPermission(\"env_write\")) {\n return \"sandbox_restricted_disallows_env_write\";\n }\n return null;\n }\n\n if (profile === \"strict\") {\n if (hasPermission(\"process_spawn\")) {\n return \"sandbox_strict_disallows_process_spawn\";\n }\n if (hasPermission(\"network\")) {\n return \"sandbox_strict_disallows_network\";\n }\n if (hasPermission(\"fs_write\")) {\n return \"sandbox_strict_disallows_fs_write\";\n }\n if (hasPermission(\"env_write\")) {\n return \"sandbox_strict_disallows_env_write\";\n }\n }\n return null;\n}\n\nfunction buildPolicyWarning(\n mode: \"blocked\" | \"violation\",\n scope: \"extension\" | \"capability\" | \"registration\" | \"trust\",\n extension: PolicyExtensionRef,\n reason: string,\n details: Record<string, string> = {},\n): string {\n const tokens = Object.entries(details)\n .sort((left, right) => left[0].localeCompare(right[0]))\n .map(([key, value]) => `${key}=${value}`)\n .join(\":\");\n const suffix = tokens.length > 0 ? `:${tokens}` : \"\";\n return `extension_policy_${mode}_${scope}:${extension.layer}:${extension.name}:reason=${reason}${suffix}`;\n}\n\nexport function evaluateExtensionPolicyForExtension(\n policy: NormalizedExtensionPolicy,\n extension: PolicyExtensionRef,\n): { allowed: boolean; warning: string | null } {\n if (policy.mode === \"off\" && policy.trustMode === \"off\") {\n return { allowed: true, warning: null };\n }\n const reason = resolvePolicyExtensionReason(policy, extension);\n const trustReason = resolvePolicyTrustReason(policy, extension);\n const sandboxReason = resolvePolicySandboxReason(policy, extension);\n const extensionEnforced = reason && policy.mode === \"enforce\";\n const trustEnforced = trustReason && policy.trustMode === \"enforce\";\n const sandboxEnforced = sandboxReason && policy.mode === \"enforce\";\n if (!reason && !trustReason && !sandboxReason) {\n return { allowed: true, warning: null };\n }\n if (extensionEnforced) {\n return {\n allowed: false,\n warning: buildPolicyWarning(\"blocked\", \"extension\", extension, reason),\n };\n }\n if (trustEnforced) {\n return {\n allowed: false,\n warning: buildPolicyWarning(\"blocked\", \"trust\", extension, trustReason),\n };\n }\n if (sandboxEnforced) {\n return {\n allowed: false,\n warning: buildPolicyWarning(\"blocked\", \"extension\", extension, sandboxReason),\n };\n }\n if (reason && policy.mode === \"warn\") {\n return {\n allowed: true,\n warning: buildPolicyWarning(\"violation\", \"extension\", extension, reason),\n };\n }\n if (trustReason && policy.trustMode === \"warn\") {\n return {\n allowed: true,\n warning: buildPolicyWarning(\"violation\", \"trust\", extension, trustReason),\n };\n }\n if (sandboxReason && policy.mode === \"warn\") {\n return {\n allowed: true,\n warning: buildPolicyWarning(\"violation\", \"extension\", extension, sandboxReason),\n };\n }\n return {\n allowed: true,\n warning: null,\n };\n}\n\nexport function evaluateExtensionPolicyForCapability(\n policy: NormalizedExtensionPolicy,\n extension: PolicyExtensionRef,\n capability: string,\n): { allowed: boolean; warning: string | null } {\n if (policy.mode === \"off\") {\n return { allowed: true, warning: null };\n }\n const reason = resolvePolicyCapabilityReason(policy, extension, capability);\n if (!reason) {\n return { allowed: true, warning: null };\n }\n return {\n allowed: policy.mode === \"warn\",\n warning: buildPolicyWarning(\n policy.mode === \"warn\" ? \"violation\" : \"blocked\",\n \"capability\",\n extension,\n reason,\n { capability: capability.trim().toLowerCase() },\n ),\n };\n}\n\nexport function evaluateExtensionPolicyForRegistration(\n policy: NormalizedExtensionPolicy,\n extension: PolicyExtensionRef,\n surface: ExtensionPolicySurface,\n method: string,\n capability?: ExtensionCapability,\n details?: {\n command?: string;\n action?: string;\n service?: string;\n },\n): { allowed: boolean; warning: string | null } {\n if (policy.mode === \"off\") {\n return { allowed: true, warning: null };\n }\n const capabilityReason =\n typeof capability === \"string\" ? resolvePolicyCapabilityReason(policy, extension, capability) : null;\n const surfaceReason = resolvePolicySurfaceReason(policy, extension, surface);\n const commandReason = details?.command ? resolvePolicyCommandReason(policy, extension, details.command) : null;\n const actionReason = details?.action ? resolvePolicyActionReason(policy, extension, details.action) : null;\n const serviceReason = details?.service ? resolvePolicyServiceReason(policy, extension, details.service) : null;\n const reason = capabilityReason ?? surfaceReason ?? commandReason ?? actionReason ?? serviceReason;\n if (!reason) {\n return { allowed: true, warning: null };\n }\n const warningDetails: Record<string, string> = {\n method: normalizePolicyName(method).replace(/\\s+/g, \"_\"),\n surface,\n };\n if (capability) {\n warningDetails.capability = capability;\n }\n if (details?.command) {\n warningDetails.command = normalizeCommandName(details.command);\n }\n if (details?.action) {\n warningDetails.action = normalizePolicyName(details.action).replace(/\\s+/g, \"-\");\n }\n if (details?.service) {\n warningDetails.service = normalizePolicyName(details.service);\n }\n const warning = buildPolicyWarning(\n policy.mode === \"warn\" ? \"violation\" : \"blocked\",\n \"registration\",\n extension,\n reason,\n warningDetails,\n );\n return {\n allowed: policy.mode === \"warn\",\n warning,\n };\n}\n", "import type {\n ExtensionHookRegistry,\n ExtensionCommandRegistry,\n ExtensionParserRegistry,\n ExtensionPreflightRegistry,\n ExtensionServiceRegistry,\n ExtensionRendererRegistry,\n ExtensionRegistrationRegistry,\n} from \"./extension-types.js\";\n\nexport function createEmptyExtensionHookRegistry(): ExtensionHookRegistry {\n return {\n beforeCommand: [],\n afterCommand: [],\n onWrite: [],\n onRead: [],\n onIndex: [],\n };\n}\n\nexport function createEmptyExtensionCommandRegistry(): ExtensionCommandRegistry {\n return {\n overrides: [],\n handlers: [],\n };\n}\n\nexport function createEmptyExtensionParserRegistry(): ExtensionParserRegistry {\n return {\n overrides: [],\n };\n}\n\nexport function createEmptyExtensionPreflightRegistry(): ExtensionPreflightRegistry {\n return {\n overrides: [],\n };\n}\n\nexport function createEmptyExtensionServiceRegistry(): ExtensionServiceRegistry {\n return {\n overrides: [],\n };\n}\n\nexport function createEmptyExtensionRendererRegistry(): ExtensionRendererRegistry {\n return {\n overrides: [],\n };\n}\n\nexport function createEmptyExtensionRegistrationRegistry(): ExtensionRegistrationRegistry {\n return {\n commands: [],\n flags: [],\n item_fields: [],\n item_types: [],\n migrations: [],\n importers: [],\n exporters: [],\n search_providers: [],\n vector_store_adapters: [],\n };\n}\n", "import {\n runCommandHandler,\n runCommandOverride,\n runOnIndexHooks,\n runParserOverride,\n runPreflightOverride,\n runOnReadHooks,\n runRendererOverride,\n runServiceOverride,\n runServiceOverrideSync,\n runOnWriteHooks,\n type CommandHandlerContext,\n type CommandHandlerResult,\n type CommandOverrideContext,\n type CommandOverrideResult,\n type ExtensionCommandRegistry,\n type ExtensionHookRegistry,\n type ExtensionParserRegistry,\n type ExtensionPreflightRegistry,\n type ExtensionRegistrationRegistry,\n type ExtensionRendererRegistry,\n type ExtensionServiceName,\n type ExtensionServiceRegistry,\n type OnIndexHookContext,\n type OnReadHookContext,\n type OnWriteHookContext,\n type OutputRendererFormat,\n type ParserOverrideContext,\n type ParserOverrideResult,\n type PreflightOverrideContext,\n type PreflightOverrideResult,\n type RendererOverrideResult,\n type ServiceOverrideResult,\n} from \"./loader.js\";\n\nlet activeExtensionHooks: ExtensionHookRegistry | null = null;\nlet activeExtensionCommands: ExtensionCommandRegistry | null = null;\nlet activeExtensionParsers: ExtensionParserRegistry | null = null;\nlet activeExtensionPreflight: ExtensionPreflightRegistry | null = null;\nlet activeExtensionServices: ExtensionServiceRegistry | null = null;\nlet activeExtensionRenderers: ExtensionRendererRegistry | null = null;\nlet activeExtensionRegistrations: ExtensionRegistrationRegistry | null = null;\nlet activeCommandContext: Omit<CommandOverrideContext, \"result\"> | null = null;\nlet activeCommandResult: unknown = undefined;\n\nexport function setActiveExtensionHooks(hooks: ExtensionHookRegistry | null): void {\n activeExtensionHooks = hooks;\n}\n\nexport function setActiveExtensionCommands(commands: ExtensionCommandRegistry | null): void {\n activeExtensionCommands = commands;\n}\n\nexport function setActiveExtensionParsers(parsers: ExtensionParserRegistry | null): void {\n activeExtensionParsers = parsers;\n}\n\nexport function setActiveExtensionPreflight(preflight: ExtensionPreflightRegistry | null): void {\n activeExtensionPreflight = preflight;\n}\n\nexport function setActiveExtensionServices(services: ExtensionServiceRegistry | null): void {\n activeExtensionServices = services;\n}\n\nexport function setActiveExtensionRenderers(renderers: ExtensionRendererRegistry | null): void {\n activeExtensionRenderers = renderers;\n}\n\nexport function setActiveExtensionRegistrations(registrations: ExtensionRegistrationRegistry | null): void {\n activeExtensionRegistrations = registrations;\n}\n\nexport function getActiveExtensionRegistrations(): ExtensionRegistrationRegistry | null {\n return activeExtensionRegistrations;\n}\n\nexport function setActiveCommandContext(context: Omit<CommandOverrideContext, \"result\"> | null): void {\n activeCommandContext = context;\n}\n\nexport function setActiveCommandResult(result: unknown): void {\n activeCommandResult = result;\n}\n\nexport function getActiveCommandResult(): unknown {\n return activeCommandResult;\n}\n\nexport function clearActiveExtensionHooks(): void {\n activeExtensionHooks = null;\n activeExtensionCommands = null;\n activeExtensionParsers = null;\n activeExtensionPreflight = null;\n activeExtensionServices = null;\n activeExtensionRenderers = null;\n activeExtensionRegistrations = null;\n activeCommandContext = null;\n activeCommandResult = undefined;\n}\n\nexport async function runActiveOnWriteHooks(context: OnWriteHookContext): Promise<string[]> {\n if (!activeExtensionHooks) {\n return [];\n }\n return runOnWriteHooks(activeExtensionHooks, context);\n}\n\nexport async function runActiveOnReadHooks(context: OnReadHookContext): Promise<string[]> {\n if (!activeExtensionHooks) {\n return [];\n }\n return runOnReadHooks(activeExtensionHooks, context);\n}\n\n/**\n * Synchronous fast-path predicate: true only when at least one onRead hook is\n * registered. Bulk readers (e.g. the metadata cache scanning hundreds of files)\n * use this to skip per-file `await runActiveOnReadHooks(...)` calls entirely when\n * no extension observes reads, avoiding hundreds of needless microtasks.\n */\nexport function hasActiveOnReadHooks(): boolean {\n return (activeExtensionHooks?.onRead?.length ?? 0) > 0;\n}\n\nexport async function runActiveOnIndexHooks(context: OnIndexHookContext): Promise<string[]> {\n if (!activeExtensionHooks) {\n return [];\n }\n return runOnIndexHooks(activeExtensionHooks, context);\n}\n\nexport function runActiveCommandOverride(result: unknown): CommandOverrideResult {\n if (!activeExtensionCommands || !activeCommandContext) {\n return {\n overridden: false,\n result,\n warnings: [],\n };\n }\n return runCommandOverride(activeExtensionCommands, {\n command: activeCommandContext.command,\n args: [...activeCommandContext.args],\n options: activeCommandContext.options ? { ...activeCommandContext.options } : {},\n global: activeCommandContext.global ? { ...activeCommandContext.global } : undefined,\n pm_root: activeCommandContext.pm_root,\n result,\n });\n}\n\nexport async function runActiveCommandHandler(context: CommandHandlerContext): Promise<CommandHandlerResult> {\n if (!activeExtensionCommands) {\n return {\n handled: false,\n result: null,\n warnings: [],\n };\n }\n return runCommandHandler(activeExtensionCommands, context);\n}\n\nexport async function runActiveParserOverride(context: ParserOverrideContext): Promise<ParserOverrideResult> {\n if (!activeExtensionParsers) {\n return {\n overridden: false,\n context: {\n command: context.command,\n args: [...context.args],\n options: { ...context.options },\n global: { ...context.global },\n pm_root: context.pm_root,\n },\n warnings: [],\n };\n }\n return runParserOverride(activeExtensionParsers, context);\n}\n\nexport async function runActivePreflightOverride(context: PreflightOverrideContext): Promise<PreflightOverrideResult> {\n if (!activeExtensionPreflight) {\n return {\n overridden: false,\n context: {\n command: context.command,\n args: [...context.args],\n options: { ...context.options },\n global: { ...context.global },\n pm_root: context.pm_root,\n },\n decision: { ...context.decision },\n warnings: [],\n };\n }\n return runPreflightOverride(activeExtensionPreflight, context);\n}\n\nexport function runActiveRendererOverride(format: OutputRendererFormat, result: unknown): RendererOverrideResult {\n if (!activeExtensionRenderers) {\n return {\n overridden: false,\n rendered: null,\n warnings: [],\n };\n }\n return runRendererOverride(activeExtensionRenderers, {\n format,\n command: activeCommandContext?.command,\n args: activeCommandContext ? [...activeCommandContext.args] : [],\n options: activeCommandContext?.options ? { ...activeCommandContext.options } : {},\n global: activeCommandContext?.global ? { ...activeCommandContext.global } : undefined,\n pm_root: activeCommandContext?.pm_root,\n result,\n });\n}\n\nfunction buildServiceContext(service: ExtensionServiceName, payload: unknown) {\n return {\n service,\n command: activeCommandContext?.command,\n args: activeCommandContext ? [...activeCommandContext.args] : [],\n options: activeCommandContext?.options ? { ...activeCommandContext.options } : {},\n global: activeCommandContext?.global ? { ...activeCommandContext.global } : undefined,\n pm_root: activeCommandContext?.pm_root,\n payload,\n };\n}\n\nexport async function runActiveServiceOverride(\n service: ExtensionServiceName,\n payload: unknown,\n): Promise<ServiceOverrideResult> {\n if (!activeExtensionServices) {\n return {\n handled: false,\n result: payload,\n warnings: [],\n };\n }\n return runServiceOverride(activeExtensionServices, buildServiceContext(service, payload));\n}\n\nexport function runActiveServiceOverrideSync(service: ExtensionServiceName, payload: unknown): ServiceOverrideResult {\n if (!activeExtensionServices) {\n return {\n handled: false,\n result: payload,\n warnings: [],\n };\n }\n return runServiceOverrideSync(activeExtensionServices, buildServiceContext(service, payload));\n}\n\nexport * from \"./loader.js\";\n", "export const BUILTIN_ITEM_TYPE_VALUES = [\n \"Epic\",\n \"Feature\",\n \"Task\",\n \"Chore\",\n \"Issue\",\n \"Decision\",\n \"Event\",\n \"Reminder\",\n \"Milestone\",\n \"Meeting\",\n \"Plan\",\n] as const;\nexport const ITEM_TYPE_VALUES = BUILTIN_ITEM_TYPE_VALUES;\nexport type BuiltinItemType = (typeof BUILTIN_ITEM_TYPE_VALUES)[number];\nexport type ItemType = string;\n\nexport const STATUS_VALUES = [\n \"draft\",\n \"open\",\n \"in_progress\",\n \"blocked\",\n \"closed\",\n \"canceled\",\n] as const;\nexport type ItemStatus = string;\n\nexport const RUNTIME_STATUS_ROLE_VALUES = [\n \"draft\",\n \"active\",\n \"blocked\",\n \"terminal\",\n \"terminal_done\",\n \"terminal_canceled\",\n \"default_open\",\n \"default_close\",\n \"default_cancel\",\n] as const;\nexport type RuntimeStatusRole = (typeof RUNTIME_STATUS_ROLE_VALUES)[number];\n\nexport const RUNTIME_FIELD_TYPE_VALUES = [\"string\", \"number\", \"boolean\", \"string_array\"] as const;\nexport type RuntimeFieldType = (typeof RUNTIME_FIELD_TYPE_VALUES)[number];\n\nexport const RUNTIME_FIELD_COMMAND_VALUES = [\"create\", \"update\", \"update_many\", \"list\", \"search\", \"calendar\", \"context\"] as const;\nexport type RuntimeFieldCommand = (typeof RUNTIME_FIELD_COMMAND_VALUES)[number];\n\nexport const RUNTIME_UNKNOWN_FIELD_POLICY_VALUES = [\"allow\", \"warn\", \"reject\"] as const;\nexport type RuntimeUnknownFieldPolicy = (typeof RUNTIME_UNKNOWN_FIELD_POLICY_VALUES)[number];\n\nexport const DEPENDENCY_KIND_VALUES = [\n \"blocks\",\n \"parent\",\n \"child\",\n \"parent_child\",\n \"child_of\",\n \"related\",\n \"related_to\",\n \"discovered_from\",\n \"blocked_by\",\n \"incident_from\",\n \"epic\",\n \"supersedes\",\n \"task\",\n] as const;\nexport type DependencyKind = (typeof DEPENDENCY_KIND_VALUES)[number];\n\nexport const SCOPE_VALUES = [\"project\", \"global\"] as const;\nexport type LinkScope = (typeof SCOPE_VALUES)[number];\n\nexport const RISK_VALUES = [\"low\", \"medium\", \"high\", \"critical\"] as const;\nexport type RiskLevel = (typeof RISK_VALUES)[number];\n\nexport const ISSUE_SEVERITY_VALUES = [\"low\", \"medium\", \"high\", \"critical\"] as const;\nexport type IssueSeverity = (typeof ISSUE_SEVERITY_VALUES)[number];\n\nexport const CONFIDENCE_TEXT_VALUES = [\"low\", \"medium\", \"high\"] as const;\nexport type ConfidenceTextLevel = (typeof CONFIDENCE_TEXT_VALUES)[number];\nexport type ConfidenceValue = number | ConfidenceTextLevel;\n\nexport const ITEM_FORMAT_VALUES = [\"toon\", \"json_markdown\"] as const;\nexport type ItemFormat = (typeof ITEM_FORMAT_VALUES)[number];\n\nexport const SPRINT_RELEASE_FORMAT_POLICY_VALUES = [\"warn\", \"strict_error\"] as const;\nexport type SprintReleaseFormatPolicy = (typeof SPRINT_RELEASE_FORMAT_POLICY_VALUES)[number];\nexport const PARENT_REFERENCE_POLICY_VALUES = [\"warn\", \"strict_error\"] as const;\nexport type ParentReferencePolicy = (typeof PARENT_REFERENCE_POLICY_VALUES)[number];\nexport const VALIDATE_METADATA_PROFILE_VALUES = [\"core\", \"strict\", \"custom\"] as const;\nexport type ValidateMetadataProfile = (typeof VALIDATE_METADATA_PROFILE_VALUES)[number];\nexport const GOVERNANCE_PRESET_VALUES = [\"minimal\", \"default\", \"strict\", \"custom\"] as const;\nexport type GovernancePreset = (typeof GOVERNANCE_PRESET_VALUES)[number];\nexport const GOVERNANCE_OWNERSHIP_ENFORCEMENT_VALUES = [\"none\", \"warn\", \"strict\"] as const;\nexport type GovernanceOwnershipEnforcement = (typeof GOVERNANCE_OWNERSHIP_ENFORCEMENT_VALUES)[number];\nexport const GOVERNANCE_CREATE_MODE_DEFAULT_VALUES = [\"progressive\", \"strict\"] as const;\nexport type GovernanceCreateModeDefault = (typeof GOVERNANCE_CREATE_MODE_DEFAULT_VALUES)[number];\nexport const GOVERNANCE_CLOSE_VALIDATION_DEFAULT_VALUES = [\"off\", \"warn\", \"strict\"] as const;\nexport type GovernanceCloseValidationDefault = (typeof GOVERNANCE_CLOSE_VALIDATION_DEFAULT_VALUES)[number];\nexport const VALIDATE_METADATA_REQUIRED_FIELD_VALUES = [\n \"author\",\n \"acceptance_criteria\",\n \"estimated_minutes\",\n \"close_reason\",\n \"reviewer\",\n \"risk\",\n \"confidence\",\n \"sprint\",\n \"release\",\n] as const;\nexport type ValidateMetadataRequiredField = (typeof VALIDATE_METADATA_REQUIRED_FIELD_VALUES)[number];\n\nexport const RECURRENCE_FREQUENCY_VALUES = [\"daily\", \"weekly\", \"monthly\", \"yearly\"] as const;\nexport type RecurrenceFrequency = (typeof RECURRENCE_FREQUENCY_VALUES)[number];\n\nexport const RECURRENCE_WEEKDAY_VALUES = [\"mon\", \"tue\", \"wed\", \"thu\", \"fri\", \"sat\", \"sun\"] as const;\nexport type RecurrenceWeekday = (typeof RECURRENCE_WEEKDAY_VALUES)[number];\n\n/**\n * Canonical week-order index for a recurrence weekday (mon=0 .. sun=6).\n * Shared by item serialization, create/update parsing, and calendar expansion\n * so weekday ordering cannot drift between those modules.\n */\nexport function weekdayOrderIndex(value: RecurrenceWeekday): number {\n return RECURRENCE_WEEKDAY_VALUES.indexOf(value);\n}\n\nexport interface Dependency {\n id: string;\n kind: DependencyKind;\n created_at: string;\n author?: string;\n source_kind?: string;\n}\n\nexport interface Comment {\n created_at: string;\n author: string;\n text: string;\n}\n\nexport interface LogNote {\n created_at: string;\n author: string;\n text: string;\n}\n\nexport interface LinkedFile {\n path: string;\n scope: LinkScope;\n note?: string;\n}\n\nexport interface LinkedTest {\n command?: string;\n path?: string;\n scope: LinkScope;\n timeout_seconds?: number;\n pm_context_mode?: \"schema\" | \"tracker\" | \"auto\";\n env_set?: Record<string, string>;\n env_clear?: string[];\n shared_host_safe?: boolean;\n assert_stdout_contains?: string[];\n assert_stdout_regex?: string[];\n assert_stderr_contains?: string[];\n assert_stderr_regex?: string[];\n assert_stdout_min_lines?: number;\n assert_json_field_equals?: Record<string, string>;\n assert_json_field_gte?: Record<string, number>;\n note?: string;\n}\n\nexport interface LinkedDoc {\n path: string;\n scope: LinkScope;\n note?: string;\n}\n\nexport interface Reminder {\n at: string;\n text: string;\n}\n\nexport interface RecurrenceRule {\n freq: RecurrenceFrequency;\n interval?: number;\n count?: number;\n until?: string;\n by_weekday?: RecurrenceWeekday[];\n by_month_day?: number[];\n exdates?: string[];\n}\n\nexport interface CalendarEvent {\n start_at: string;\n end_at?: string;\n title?: string;\n description?: string;\n location?: string;\n all_day?: boolean;\n timezone?: string;\n recurrence?: RecurrenceRule;\n}\n\nexport const PLAN_MODE_VALUES = [\n \"draft\",\n \"research\",\n \"review\",\n \"approved\",\n \"executing\",\n \"paused\",\n \"completed\",\n \"superseded\",\n] as const;\nexport type PlanMode = (typeof PLAN_MODE_VALUES)[number];\n\nexport const PLAN_STEP_STATUS_VALUES = [\n \"pending\",\n \"in_progress\",\n \"completed\",\n \"blocked\",\n \"skipped\",\n \"superseded\",\n] as const;\nexport type PlanStepStatus = (typeof PLAN_STEP_STATUS_VALUES)[number];\n\nexport const PLAN_HARNESS_VALUES = [\"codex\", \"claude-code\", \"cursor\", \"generic\"] as const;\nexport type PlanHarness = (typeof PLAN_HARNESS_VALUES)[number];\n\nexport const PLAN_STEP_LINK_KIND_VALUES = [\n \"related\",\n \"blocks\",\n \"blocked_by\",\n \"depends_on\",\n \"discovered_from\",\n \"implements\",\n \"verifies\",\n \"supersedes\",\n] as const;\nexport type PlanStepLinkKind = (typeof PLAN_STEP_LINK_KIND_VALUES)[number];\n\nexport interface PlanStepLink {\n id: string;\n kind: PlanStepLinkKind;\n note?: string;\n required_before_step?: boolean;\n}\n\nexport interface PlanStepFile {\n path: string;\n scope?: LinkScope;\n note?: string;\n}\n\nexport interface PlanStepTest {\n command?: string;\n path?: string;\n note?: string;\n}\n\nexport interface PlanStepDoc {\n path: string;\n scope?: LinkScope;\n note?: string;\n}\n\nexport interface PlanStep {\n id: string;\n order: number;\n title: string;\n body?: string;\n status: PlanStepStatus;\n owner?: string;\n evidence?: string;\n blocked_reason?: string;\n superseded_by?: string;\n linked_items?: PlanStepLink[];\n files?: PlanStepFile[];\n tests?: PlanStepTest[];\n docs?: PlanStepDoc[];\n created_at: string;\n updated_at: string;\n completed_at?: string;\n}\n\nexport interface PlanDecision {\n ts: string;\n author: string;\n decision: string;\n rationale?: string;\n evidence?: string;\n step_id?: string;\n}\n\nexport interface PlanDiscovery {\n ts: string;\n author: string;\n text: string;\n step_id?: string;\n}\n\nexport interface PlanValidationCheck {\n text: string;\n command?: string;\n expected?: string;\n}\n\nexport interface ItemTypeOptionDefinition {\n key: string;\n values: string[];\n required?: boolean;\n aliases?: string[];\n description?: string;\n}\n\nexport interface ItemTypeCommandOptionPolicy {\n command: \"create\" | \"update\";\n option: string;\n required?: boolean;\n visible?: boolean;\n enabled?: boolean;\n}\n\nexport interface ItemTypeDefinition {\n name: string;\n folder?: string;\n aliases?: string[];\n required_create_fields?: string[];\n required_create_repeatables?: string[];\n options?: ItemTypeOptionDefinition[];\n command_option_policies?: ItemTypeCommandOptionPolicy[];\n}\n\nexport interface RuntimeStatusDefinition {\n id: string;\n aliases?: string[];\n roles?: RuntimeStatusRole[];\n description?: string;\n order?: number;\n}\n\nexport interface RuntimeFieldDefinition {\n key: string;\n metadata_key?: string;\n /**\n * @deprecated Use metadata_key.\n */\n front_matter_key?: string;\n cli_flag?: string;\n cli_aliases?: string[];\n description?: string;\n type?: RuntimeFieldType;\n commands?: RuntimeFieldCommand[];\n repeatable?: boolean;\n required?: boolean;\n required_on_create?: boolean;\n required_types?: string[];\n allow_unset?: boolean;\n}\n\nexport interface RuntimeWorkflowDefinition {\n draft_status?: string;\n open_status?: string;\n in_progress_status?: string;\n blocked_status?: string;\n close_status?: string;\n canceled_status?: string;\n}\n\nexport interface RuntimeSchemaFileConfig {\n types?: string;\n statuses?: string;\n fields?: string;\n workflows?: string;\n}\n\nexport interface RuntimeSchemaSettings {\n version: number;\n files: RuntimeSchemaFileConfig;\n statuses: RuntimeStatusDefinition[];\n fields: RuntimeFieldDefinition[];\n workflow: RuntimeWorkflowDefinition;\n unknown_field_policy: RuntimeUnknownFieldPolicy;\n}\n\nexport interface ItemTestRunSummary {\n run_id: string;\n kind: \"test\" | \"test-all\";\n status: \"passed\" | \"failed\" | \"stopped\" | \"canceled\";\n started_at: string;\n finished_at: string;\n recorded_at: string;\n attempt?: number;\n resumed_from?: string;\n passed: number;\n failed: number;\n skipped: number;\n items?: number;\n linked_tests?: number;\n fail_on_skipped_triggered?: boolean;\n}\n\nexport interface ItemMetadata {\n id: string;\n title: string;\n description: string;\n type: ItemType;\n source_type?: string;\n type_options?: Record<string, string>;\n status: ItemStatus;\n priority: 0 | 1 | 2 | 3 | 4;\n tags: string[];\n created_at: string;\n updated_at: string;\n deadline?: string;\n reminders?: Reminder[];\n events?: CalendarEvent[];\n closed_at?: string;\n assignee?: string;\n source_owner?: string;\n author?: string;\n estimated_minutes?: number;\n acceptance_criteria?: string;\n design?: string;\n external_ref?: string;\n definition_of_ready?: string;\n order?: number;\n goal?: string;\n objective?: string;\n value?: string;\n impact?: string;\n outcome?: string;\n why_now?: string;\n parent?: string;\n reviewer?: string;\n risk?: \"low\" | \"medium\" | \"high\" | \"critical\";\n confidence?: ConfidenceValue;\n sprint?: string;\n release?: string;\n blocked_by?: string;\n blocked_reason?: string;\n unblock_note?: string;\n reporter?: string;\n severity?: IssueSeverity;\n environment?: string;\n repro_steps?: string;\n resolution?: string;\n expected_result?: string;\n actual_result?: string;\n affected_version?: string;\n fixed_version?: string;\n component?: string;\n regression?: boolean;\n customer_impact?: string;\n dependencies?: Dependency[];\n comments?: Comment[];\n notes?: LogNote[];\n learnings?: LogNote[];\n files?: LinkedFile[];\n tests?: LinkedTest[];\n test_runs?: ItemTestRunSummary[];\n docs?: LinkedDoc[];\n close_reason?: string;\n plan_mode?: PlanMode;\n plan_scope?: string;\n plan_harness?: PlanHarness;\n plan_steps?: PlanStep[];\n plan_decisions?: PlanDecision[];\n plan_discoveries?: PlanDiscovery[];\n plan_validation?: PlanValidationCheck[];\n plan_resume_context?: string;\n [key: string]: unknown;\n}\n\n/**\n * @deprecated Use ItemMetadata.\n */\nexport type ItemFrontMatter = ItemMetadata;\n\nexport interface ItemDocument {\n metadata: ItemMetadata;\n body: string;\n}\n\nexport interface HistoryPatchOp {\n op: \"add\" | \"remove\" | \"replace\" | \"move\" | \"copy\" | \"test\";\n path: string;\n from?: string;\n value?: unknown;\n}\n\nexport interface HistoryEntry {\n ts: string;\n author: string;\n op: string;\n patch: HistoryPatchOp[];\n before_hash: string;\n after_hash: string;\n message?: string;\n}\n\nexport const CONTEXT_DEPTH_VALUES = [\"brief\", \"standard\", \"deep\"] as const;\nexport type ContextDepth = (typeof CONTEXT_DEPTH_VALUES)[number];\n\nexport const CONTEXT_SECTION_VALUES = [\n \"hierarchy\",\n \"activity\",\n \"progress\",\n \"blockers\",\n \"files\",\n \"workload\",\n \"staleness\",\n \"tests\",\n] as const;\nexport type ContextSectionName = (typeof CONTEXT_SECTION_VALUES)[number];\n\nexport interface ContextSectionSettings {\n hierarchy: boolean;\n activity: boolean;\n progress: boolean;\n blockers: boolean;\n files: boolean;\n workload: boolean;\n staleness: boolean;\n tests: boolean;\n}\n\nexport interface ContextSettings {\n default_depth: ContextDepth;\n activity_limit: number;\n stale_threshold_days: number;\n sections: ContextSectionSettings;\n}\n\nexport interface GovernanceSettings {\n preset: GovernancePreset;\n ownership_enforcement: GovernanceOwnershipEnforcement;\n create_mode_default: GovernanceCreateModeDefault;\n close_validation_default: GovernanceCloseValidationDefault;\n parent_reference: ParentReferencePolicy;\n metadata_profile: ValidateMetadataProfile;\n force_required_for_stale_lock: boolean;\n create_default_type?: string;\n}\n\nexport type ExtensionPolicyMode = \"off\" | \"warn\" | \"enforce\";\nexport type ExtensionTrustMode = \"off\" | \"warn\" | \"enforce\";\nexport type ExtensionSandboxProfile = \"none\" | \"restricted\" | \"strict\";\n\nexport interface ExtensionPolicyOverrideSettings {\n name: string;\n disabled?: boolean;\n require_trusted?: boolean;\n require_provenance?: boolean;\n sandbox_profile?: ExtensionSandboxProfile;\n allowed_capabilities?: string[];\n blocked_capabilities?: string[];\n allowed_surfaces?: string[];\n blocked_surfaces?: string[];\n allowed_commands?: string[];\n blocked_commands?: string[];\n allowed_actions?: string[];\n blocked_actions?: string[];\n allowed_services?: string[];\n blocked_services?: string[];\n}\n\nexport interface ExtensionPolicySettings {\n mode: ExtensionPolicyMode;\n trust_mode: ExtensionTrustMode;\n require_provenance: boolean;\n trusted_extensions: string[];\n default_sandbox_profile: ExtensionSandboxProfile;\n allowed_extensions: string[];\n blocked_extensions: string[];\n allowed_capabilities: string[];\n blocked_capabilities: string[];\n allowed_surfaces: string[];\n blocked_surfaces: string[];\n allowed_commands: string[];\n blocked_commands: string[];\n allowed_actions: string[];\n blocked_actions: string[];\n allowed_services: string[];\n blocked_services: string[];\n extension_overrides: ExtensionPolicyOverrideSettings[];\n}\n\nexport interface AgentGuidanceSettings {\n prompt_completed: boolean;\n declined: boolean;\n declined_at: string;\n template_version: number;\n last_checked_files: string[];\n}\n\nexport type SearchMutationRefreshPolicy = \"cache_only\" | \"semantic_configured\" | \"semantic_auto\";\n\nexport interface PmSettings {\n version: number;\n id_prefix: string;\n author_default: string;\n item_format: ItemFormat;\n locks: {\n ttl_seconds: number;\n };\n output: {\n default_format: \"toon\" | \"json\";\n };\n history: {\n missing_stream: \"auto_create\" | \"strict_error\";\n };\n validation: {\n sprint_release_format: SprintReleaseFormatPolicy;\n parent_reference: ParentReferencePolicy;\n metadata_profile: ValidateMetadataProfile;\n metadata_required_fields: ValidateMetadataRequiredField[];\n lifecycle_stale_blocker_reason_patterns: string[];\n lifecycle_closure_like_blocked_reason_patterns: string[];\n lifecycle_closure_like_resolution_patterns: string[];\n lifecycle_closure_like_actual_result_patterns: string[];\n };\n governance: GovernanceSettings;\n workflow: {\n definition_of_done: string[];\n };\n testing: {\n record_results_to_items: boolean;\n };\n telemetry: {\n enabled: boolean;\n first_run_prompt_completed: boolean;\n capture_level: \"minimal\" | \"redacted\" | \"max\";\n endpoint: string;\n installation_id: string;\n retention_days: number;\n };\n agent_guidance: AgentGuidanceSettings;\n item_types: {\n definitions: ItemTypeDefinition[];\n };\n schema: RuntimeSchemaSettings;\n extensions: {\n enabled: string[];\n disabled: string[];\n policy: ExtensionPolicySettings;\n };\n search: {\n score_threshold: number;\n hybrid_semantic_weight: number;\n max_results: number;\n embedding_model: string;\n embedding_batch_size: number;\n embedding_timeout_ms: number;\n scanner_max_batch_retries: number;\n provider?: string;\n mutation_refresh_policy: SearchMutationRefreshPolicy;\n tuning?: {\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 dependencies_weight?: number;\n linked_content_weight?: number;\n };\n };\n providers: {\n openai: {\n base_url: string;\n api_key: string;\n model: string;\n };\n ollama: {\n base_url: string;\n model: string;\n };\n };\n context: ContextSettings;\n vector_store: {\n adapter?: string;\n qdrant: {\n url: string;\n api_key: string;\n };\n lancedb: {\n path: string;\n };\n };\n}\n", "import type {\n ItemTypeCommandOptionPolicy,\n ItemTypeDefinition,\n ItemTypeOptionDefinition,\n} from \"../../types/index.js\";\n\n/**\n * Shared, pure normalization for {@link ItemTypeDefinition} objects, single-sourced\n * across the runtime item-type registry and settings persistence (pm-v798).\n *\n * The only genuine difference between the two callers is how a command-option\n * policy's `command` field is resolved:\n * - the runtime registry consumes untrusted extension/file definitions, so it\n * must trim+lowercase and reject anything that is not \"create\"/\"update\";\n * - settings persistence operates on already-validated definitions, so it keeps\n * the typed `command` value verbatim.\n *\n * That single difference is injected via {@link NormalizeItemTypeDefinitionOptions.resolvePolicyCommand};\n * everything else (name trim, optional folder, aliases, required_create_* fields,\n * options normalization, policy dedupe key + stable sort) is shared.\n */\n\n/** Dedupe + sort a string list: trim, drop blanks, unique, locale-sorted. */\nexport function normalizeItemTypeStringList(values: string[] | undefined): string[] {\n return [...new Set((values ?? []).map((value) => value.trim()).filter((value) => value.length > 0))].sort(\n (left, right) => left.localeCompare(right),\n );\n}\n\n/** Normalize one type-option definition, or null when its key is blank. */\nexport function normalizeItemTypeOption(option: ItemTypeOptionDefinition): ItemTypeOptionDefinition | null {\n const key = option.key.trim();\n if (key.length === 0) {\n return null;\n }\n const aliases = normalizeItemTypeStringList(option.aliases);\n const description = option.description?.trim();\n return {\n key,\n values: normalizeItemTypeStringList(option.values),\n required: option.required === true ? true : undefined,\n aliases: aliases.length > 0 ? aliases : undefined,\n description: description && description.length > 0 ? description : undefined,\n };\n}\n\n/**\n * Resolves a raw policy `command` value to the canonical \"create\"/\"update\" type,\n * or null to drop the policy. Lets each layer plug in its own strictness.\n */\nexport type ResolvePolicyCommand = (command: string) => ItemTypeCommandOptionPolicy[\"command\"] | null;\n\n/**\n * Pass-through resolver used by settings persistence: the value is already typed\n * \"create\" | \"update\" by the settings validator, so it is kept verbatim.\n */\nexport const keepPolicyCommand: ResolvePolicyCommand = (command) =>\n command as ItemTypeCommandOptionPolicy[\"command\"];\n\n/**\n * Strict resolver used by the runtime registry: trims + lowercases and rejects\n * anything other than \"create\"/\"update\".\n */\nexport const strictPolicyCommand: ResolvePolicyCommand = (command) => {\n const normalized = command.trim().toLowerCase();\n return normalized === \"create\" || normalized === \"update\" ? normalized : null;\n};\n\n/** Normalize one command-option policy, or null when invalid (blank option / rejected command). */\nexport function normalizeItemTypeCommandOptionPolicy(\n policy: ItemTypeCommandOptionPolicy,\n resolvePolicyCommand: ResolvePolicyCommand,\n): ItemTypeCommandOptionPolicy | null {\n const command = resolvePolicyCommand(policy.command);\n if (command === null) {\n return null;\n }\n const option = policy.option.trim();\n if (option.length === 0) {\n return null;\n }\n return {\n command,\n option,\n required: policy.required,\n visible: policy.visible,\n enabled: policy.enabled,\n };\n}\n\n/** Dedupe by `${command}:${option-lowercased}` and stable-sort by command then option. */\nexport function normalizeItemTypeCommandOptionPolicies(\n policies: ItemTypeCommandOptionPolicy[] | undefined,\n resolvePolicyCommand: ResolvePolicyCommand,\n): ItemTypeCommandOptionPolicy[] {\n const dedupedByKey = new Map<string, ItemTypeCommandOptionPolicy>();\n for (const policy of policies ?? []) {\n const normalized = normalizeItemTypeCommandOptionPolicy(policy, resolvePolicyCommand);\n if (!normalized) {\n continue;\n }\n dedupedByKey.set(`${normalized.command}:${normalized.option.toLowerCase()}`, normalized);\n }\n return [...dedupedByKey.values()].sort((left, right) =>\n left.command === right.command\n ? left.option.localeCompare(right.option)\n : left.command.localeCompare(right.command),\n );\n}\n\nexport interface NormalizeItemTypeDefinitionOptions {\n /** How to resolve a raw policy `command` value (defaults to {@link keepPolicyCommand}). */\n resolvePolicyCommand?: ResolvePolicyCommand;\n}\n\n/**\n * Normalize a full {@link ItemTypeDefinition}, returning null when the name is blank.\n *\n * Optional collection fields (`folder`, `aliases`, `required_create_fields`,\n * `required_create_repeatables`, `options`, `command_option_policies`) are only\n * emitted when present on the input (presence-preserving) so the distinction\n * between \"unset\" and \"set-but-empty\" survives the round-trip.\n */\nexport function normalizeItemTypeDefinition(\n definition: ItemTypeDefinition,\n options: NormalizeItemTypeDefinitionOptions = {},\n): ItemTypeDefinition | null {\n const resolvePolicyCommand = options.resolvePolicyCommand ?? keepPolicyCommand;\n const name = definition.name.trim();\n if (name.length === 0) {\n return null;\n }\n\n const hasRequiredCreateFields = definition.required_create_fields !== undefined;\n const hasRequiredCreateRepeatables = definition.required_create_repeatables !== undefined;\n const hasOptions = definition.options !== undefined;\n const hasCommandOptionPolicies = definition.command_option_policies !== undefined;\n\n const folder = definition.folder?.trim();\n const aliases = normalizeItemTypeStringList(definition.aliases);\n const normalizedOptions = (definition.options ?? [])\n .map((option) => normalizeItemTypeOption(option))\n .filter((option): option is ItemTypeOptionDefinition => option !== null)\n .sort((left, right) => left.key.localeCompare(right.key));\n const commandOptionPolicies = normalizeItemTypeCommandOptionPolicies(\n definition.command_option_policies,\n resolvePolicyCommand,\n );\n\n return {\n name,\n folder: folder && folder.length > 0 ? folder : undefined,\n aliases: aliases.length > 0 ? aliases : undefined,\n required_create_fields: hasRequiredCreateFields\n ? normalizeItemTypeStringList(definition.required_create_fields)\n : undefined,\n required_create_repeatables: hasRequiredCreateRepeatables\n ? normalizeItemTypeStringList(definition.required_create_repeatables)\n : undefined,\n options: hasOptions ? normalizedOptions : undefined,\n command_option_policies: hasCommandOptionPolicies ? commandOptionPolicies : undefined,\n };\n}\n", "import { TYPE_TO_FOLDER } from \"../shared/constants.js\";\nimport type { ExtensionRegistrationRegistry } from \"../extensions/loader.js\";\nimport type {\n ItemTypeCommandOptionPolicy,\n ItemTypeDefinition,\n ItemTypeOptionDefinition,\n PmSettings,\n} from \"../../types/index.js\";\nimport { ITEM_TYPE_VALUES } from \"../../types/index.js\";\nimport {\n normalizeItemTypeDefinition as normalizeSharedItemTypeDefinition,\n normalizeItemTypeStringList,\n strictPolicyCommand,\n} from \"./item-type-definition.js\";\n\nexport const DEFAULT_REQUIRED_CREATE_FIELDS = [\n \"title\",\n \"description\",\n \"status\",\n \"priority\",\n \"tags\",\n \"body\",\n \"deadline\",\n \"estimatedMinutes\",\n \"acceptanceCriteria\",\n \"author\",\n \"message\",\n \"assignee\",\n] as const;\n\nexport const DEFAULT_REQUIRED_CREATE_REPEATABLES = [\"dep\", \"comment\", \"note\", \"learning\", \"file\", \"test\", \"doc\"] as const;\n\nexport type CommandOptionPolicyCommand = \"create\" | \"update\";\n\nconst CREATE_COMMAND_OPTION_KEYS = [\n \"title\",\n \"description\",\n \"type\",\n \"status\",\n \"priority\",\n \"tags\",\n \"body\",\n \"deadline\",\n \"estimatedMinutes\",\n \"acceptanceCriteria\",\n \"definitionOfReady\",\n \"order\",\n \"goal\",\n \"objective\",\n \"value\",\n \"impact\",\n \"outcome\",\n \"whyNow\",\n \"author\",\n \"message\",\n \"assignee\",\n \"parent\",\n \"reviewer\",\n \"risk\",\n \"confidence\",\n \"sprint\",\n \"release\",\n \"blockedBy\",\n \"blockedReason\",\n \"unblockNote\",\n \"reporter\",\n \"severity\",\n \"environment\",\n \"reproSteps\",\n \"resolution\",\n \"expectedResult\",\n \"actualResult\",\n \"affectedVersion\",\n \"fixedVersion\",\n \"component\",\n \"regression\",\n \"customerImpact\",\n \"dep\",\n \"comment\",\n \"note\",\n \"learning\",\n \"file\",\n \"test\",\n \"doc\",\n \"reminder\",\n \"event\",\n \"typeOption\",\n] as const;\n\nconst UPDATE_COMMAND_OPTION_KEYS = [\n \"title\",\n \"description\",\n \"body\",\n \"status\",\n \"closeReason\",\n \"priority\",\n \"type\",\n \"tags\",\n \"deadline\",\n \"estimatedMinutes\",\n \"acceptanceCriteria\",\n \"definitionOfReady\",\n \"order\",\n \"goal\",\n \"objective\",\n \"value\",\n \"impact\",\n \"outcome\",\n \"whyNow\",\n \"author\",\n \"message\",\n \"assignee\",\n \"parent\",\n \"reviewer\",\n \"risk\",\n \"confidence\",\n \"sprint\",\n \"release\",\n \"blockedBy\",\n \"blockedReason\",\n \"unblockNote\",\n \"reporter\",\n \"severity\",\n \"environment\",\n \"reproSteps\",\n \"resolution\",\n \"expectedResult\",\n \"actualResult\",\n \"affectedVersion\",\n \"fixedVersion\",\n \"component\",\n \"regression\",\n \"customerImpact\",\n \"comment\",\n \"note\",\n \"learning\",\n \"file\",\n \"test\",\n \"doc\",\n \"reminder\",\n \"event\",\n \"typeOption\",\n \"allowAuditUpdate\",\n \"force\",\n] as const;\n\nconst SHARED_COMMAND_OPTION_ALIASES: Record<string, string> = {\n \"close-reason\": \"closeReason\",\n close_reason: \"closeReason\",\n \"estimated-minutes\": \"estimatedMinutes\",\n estimated_minutes: \"estimatedMinutes\",\n estimate: \"estimatedMinutes\",\n \"acceptance-criteria\": \"acceptanceCriteria\",\n acceptance_criteria: \"acceptanceCriteria\",\n ac: \"acceptanceCriteria\",\n \"definition-of-ready\": \"definitionOfReady\",\n definition_of_ready: \"definitionOfReady\",\n rank: \"order\",\n \"why-now\": \"whyNow\",\n why_now: \"whyNow\",\n \"blocked-by\": \"blockedBy\",\n blocked_by: \"blockedBy\",\n \"blocked-reason\": \"blockedReason\",\n blocked_reason: \"blockedReason\",\n \"unblock-note\": \"unblockNote\",\n unblock_note: \"unblockNote\",\n \"repro-steps\": \"reproSteps\",\n repro_steps: \"reproSteps\",\n \"expected-result\": \"expectedResult\",\n expected_result: \"expectedResult\",\n \"actual-result\": \"actualResult\",\n actual_result: \"actualResult\",\n \"affected-version\": \"affectedVersion\",\n affected_version: \"affectedVersion\",\n \"fixed-version\": \"fixedVersion\",\n fixed_version: \"fixedVersion\",\n \"customer-impact\": \"customerImpact\",\n customer_impact: \"customerImpact\",\n \"type-option\": \"typeOption\",\n type_option: \"typeOption\",\n type_options: \"typeOption\",\n};\n\nconst CREATE_COMMAND_OPTION_ALIASES: Record<string, string> = {\n ...SHARED_COMMAND_OPTION_ALIASES,\n};\n\nconst UPDATE_COMMAND_OPTION_ALIASES: Record<string, string> = {\n ...SHARED_COMMAND_OPTION_ALIASES,\n \"allow-audit-update\": \"allowAuditUpdate\",\n allow_audit_update: \"allowAuditUpdate\",\n};\n\nconst CREATE_COMMAND_OPTION_FLAG_LABELS: Record<string, string> = {\n title: \"--title\",\n description: \"--description\",\n type: \"--type\",\n status: \"--status\",\n priority: \"--priority\",\n tags: \"--tags\",\n body: \"--body\",\n deadline: \"--deadline\",\n estimatedMinutes: \"--estimate/--estimated-minutes\",\n acceptanceCriteria: \"--acceptance-criteria/--ac\",\n definitionOfReady: \"--definition-of-ready\",\n order: \"--order/--rank\",\n goal: \"--goal\",\n objective: \"--objective\",\n value: \"--value\",\n impact: \"--impact\",\n outcome: \"--outcome\",\n whyNow: \"--why-now\",\n author: \"--author\",\n message: \"--message\",\n assignee: \"--assignee\",\n parent: \"--parent\",\n reviewer: \"--reviewer\",\n risk: \"--risk\",\n confidence: \"--confidence\",\n sprint: \"--sprint\",\n release: \"--release\",\n blockedBy: \"--blocked-by\",\n blockedReason: \"--blocked-reason\",\n unblockNote: \"--unblock-note\",\n reporter: \"--reporter\",\n severity: \"--severity\",\n environment: \"--environment\",\n reproSteps: \"--repro-steps\",\n resolution: \"--resolution\",\n expectedResult: \"--expected-result\",\n actualResult: \"--actual-result\",\n affectedVersion: \"--affected-version\",\n fixedVersion: \"--fixed-version\",\n component: \"--component\",\n regression: \"--regression\",\n customerImpact: \"--customer-impact\",\n dep: \"--dep\",\n comment: \"--comment\",\n note: \"--note\",\n learning: \"--learning\",\n file: \"--file\",\n test: \"--test\",\n doc: \"--doc\",\n reminder: \"--reminder\",\n event: \"--event\",\n typeOption: \"--type-option\",\n};\n\nconst UPDATE_COMMAND_OPTION_FLAG_LABELS: Record<string, string> = {\n title: \"--title\",\n description: \"--description\",\n body: \"--body\",\n status: \"--status\",\n closeReason: \"--close-reason\",\n priority: \"--priority\",\n type: \"--type\",\n tags: \"--tags\",\n deadline: \"--deadline\",\n estimatedMinutes: \"--estimate/--estimated-minutes\",\n acceptanceCriteria: \"--acceptance-criteria/--ac\",\n definitionOfReady: \"--definition-of-ready\",\n order: \"--order/--rank\",\n goal: \"--goal\",\n objective: \"--objective\",\n value: \"--value\",\n impact: \"--impact\",\n outcome: \"--outcome\",\n whyNow: \"--why-now\",\n assignee: \"--assignee\",\n parent: \"--parent\",\n reviewer: \"--reviewer\",\n risk: \"--risk\",\n confidence: \"--confidence\",\n sprint: \"--sprint\",\n release: \"--release\",\n blockedBy: \"--blocked-by\",\n blockedReason: \"--blocked-reason\",\n unblockNote: \"--unblock-note\",\n reporter: \"--reporter\",\n severity: \"--severity\",\n environment: \"--environment\",\n reproSteps: \"--repro-steps\",\n resolution: \"--resolution\",\n expectedResult: \"--expected-result\",\n actualResult: \"--actual-result\",\n affectedVersion: \"--affected-version\",\n fixedVersion: \"--fixed-version\",\n component: \"--component\",\n regression: \"--regression\",\n customerImpact: \"--customer-impact\",\n comment: \"--comment\",\n note: \"--note\",\n learning: \"--learning\",\n file: \"--file\",\n test: \"--test\",\n doc: \"--doc\",\n reminder: \"--reminder\",\n event: \"--event\",\n typeOption: \"--type-option\",\n allowAuditUpdate: \"--allow-audit-update\",\n author: \"--author\",\n message: \"--message\",\n force: \"--force\",\n};\n\nexport interface CommandOptionPolicyState {\n required: string[];\n hidden: string[];\n disabled: string[];\n errors: string[];\n}\n\nexport interface ResolvedItemTypeDefinition {\n name: string;\n folder: string;\n aliases: string[];\n required_create_fields: string[];\n required_create_repeatables: string[];\n options: ItemTypeOptionDefinition[];\n command_option_policies: ItemTypeCommandOptionPolicy[];\n}\n\nexport interface ItemTypeRegistry {\n types: string[];\n folders: string[];\n type_to_folder: Record<string, string>;\n by_type: Record<string, ResolvedItemTypeDefinition>;\n alias_to_type: Record<string, string>;\n}\n\nfunction normalizeCommandOptionToken(value: string): string {\n return value.trim().replace(/^--+/, \"\").toLowerCase();\n}\n\nfunction commandOptionKeys(command: CommandOptionPolicyCommand): readonly string[] {\n return command === \"create\" ? CREATE_COMMAND_OPTION_KEYS : UPDATE_COMMAND_OPTION_KEYS;\n}\n\nfunction commandOptionAliases(command: CommandOptionPolicyCommand): Record<string, string> {\n return command === \"create\" ? CREATE_COMMAND_OPTION_ALIASES : UPDATE_COMMAND_OPTION_ALIASES;\n}\n\nexport function canonicalizeCommandOptionKey(\n command: CommandOptionPolicyCommand,\n rawOption: string,\n): string | undefined {\n const normalizedToken = normalizeCommandOptionToken(rawOption);\n if (normalizedToken.length === 0) {\n return undefined;\n }\n const aliased = commandOptionAliases(command)[normalizedToken];\n if (aliased) {\n return aliased;\n }\n return commandOptionKeys(command).find((candidate) => candidate.toLowerCase() === normalizedToken);\n}\n\nexport function commandOptionFlagLabel(command: CommandOptionPolicyCommand, optionKey: string): string {\n const labels = command === \"create\" ? CREATE_COMMAND_OPTION_FLAG_LABELS : UPDATE_COMMAND_OPTION_FLAG_LABELS;\n return labels[optionKey] ?? `--${optionKey.replace(/([A-Z])/g, \"-$1\").toLowerCase()}`;\n}\n\nfunction toDefaultFolder(name: string): string {\n const normalized = name\n .trim()\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, \"-\")\n .replace(/^-+|-+$/g, \"\");\n if (normalized.length === 0) {\n return \"items\";\n }\n return normalized.endsWith(\"s\") ? normalized : `${normalized}s`;\n}\n\n// Runtime registry consumes untrusted extension/file definitions, so it uses the\n// strict policy-command resolver (trim + lowercase, reject non-create/update). All\n// other normalization is single-sourced from ./item-type-definition.ts (pm-v798).\nfunction normalizeTypeDefinition(definition: ItemTypeDefinition): ItemTypeDefinition | null {\n return normalizeSharedItemTypeDefinition(definition, { resolvePolicyCommand: strictPolicyCommand });\n}\n\nfunction coerceTypeDefinitionFromUnknown(raw: unknown): ItemTypeDefinition | null {\n if (typeof raw !== \"object\" || raw === null || Array.isArray(raw)) {\n return null;\n }\n const record = raw as Record<string, unknown>;\n const name = typeof record.name === \"string\" ? record.name : \"\";\n if (name.trim().length === 0) {\n return null;\n }\n const folder = typeof record.folder === \"string\" ? record.folder : undefined;\n const aliases = Array.isArray(record.aliases) ? record.aliases.filter((value): value is string => typeof value === \"string\") : undefined;\n const requiredCreateFields = Array.isArray(record.required_create_fields)\n ? record.required_create_fields.filter((value): value is string => typeof value === \"string\")\n : undefined;\n const requiredCreateRepeatables = Array.isArray(record.required_create_repeatables)\n ? record.required_create_repeatables.filter((value): value is string => typeof value === \"string\")\n : undefined;\n let options: ItemTypeOptionDefinition[] | undefined;\n if (Array.isArray(record.options)) {\n options = [];\n for (const entry of record.options) {\n if (typeof entry !== \"object\" || entry === null || Array.isArray(entry)) {\n continue;\n }\n const optionRecord = entry as Record<string, unknown>;\n if (typeof optionRecord.key !== \"string\") {\n continue;\n }\n options.push({\n key: optionRecord.key,\n values: Array.isArray(optionRecord.values)\n ? optionRecord.values.filter((value): value is string => typeof value === \"string\")\n : [],\n required: optionRecord.required === undefined ? undefined : Boolean(optionRecord.required),\n aliases: Array.isArray(optionRecord.aliases)\n ? optionRecord.aliases.filter((value): value is string => typeof value === \"string\")\n : undefined,\n description: typeof optionRecord.description === \"string\" ? optionRecord.description : undefined,\n });\n }\n }\n let commandOptionPolicies: ItemTypeCommandOptionPolicy[] | undefined;\n if (Array.isArray(record.command_option_policies)) {\n commandOptionPolicies = [];\n for (const entry of record.command_option_policies) {\n if (typeof entry !== \"object\" || entry === null || Array.isArray(entry)) {\n continue;\n }\n const policyRecord = entry as Record<string, unknown>;\n if (typeof policyRecord.command !== \"string\" || typeof policyRecord.option !== \"string\") {\n continue;\n }\n const normalizedCommand = policyRecord.command.trim().toLowerCase();\n if (normalizedCommand !== \"create\" && normalizedCommand !== \"update\") {\n continue;\n }\n commandOptionPolicies.push({\n command: normalizedCommand,\n option: policyRecord.option,\n required: policyRecord.required === undefined ? undefined : Boolean(policyRecord.required),\n visible: policyRecord.visible === undefined ? undefined : Boolean(policyRecord.visible),\n enabled: policyRecord.enabled === undefined ? undefined : Boolean(policyRecord.enabled),\n });\n }\n }\n return {\n name,\n folder,\n aliases,\n required_create_fields: requiredCreateFields,\n required_create_repeatables: requiredCreateRepeatables,\n options,\n command_option_policies: commandOptionPolicies,\n };\n}\n\nfunction applyTypeDefinitions(\n source: ItemTypeDefinition[],\n target: Map<string, ResolvedItemTypeDefinition>,\n preserveBuiltinDefaults: boolean,\n): void {\n for (const rawDefinition of source) {\n const normalizedDefinition = normalizeTypeDefinition(rawDefinition);\n if (!normalizedDefinition) {\n continue;\n }\n const lowerName = normalizedDefinition.name.toLowerCase();\n const existing = target.get(lowerName);\n const keepName = existing?.name ?? normalizedDefinition.name;\n const folder = normalizedDefinition.folder ?? existing?.folder ?? toDefaultFolder(keepName);\n const aliases = normalizeItemTypeStringList([\n ...(existing?.aliases ?? []),\n ...(normalizedDefinition.aliases ?? []),\n ]);\n const requiredCreateFields = normalizedDefinition.required_create_fields\n ? normalizeItemTypeStringList(normalizedDefinition.required_create_fields)\n : existing?.required_create_fields ??\n (preserveBuiltinDefaults ? [...DEFAULT_REQUIRED_CREATE_FIELDS] : []);\n const requiredCreateRepeatables = normalizedDefinition.required_create_repeatables\n ? normalizeItemTypeStringList(normalizedDefinition.required_create_repeatables)\n : existing?.required_create_repeatables ??\n (preserveBuiltinDefaults ? [...DEFAULT_REQUIRED_CREATE_REPEATABLES] : []);\n const options = normalizedDefinition.options\n ? normalizedDefinition.options\n : existing?.options\n ? [...existing.options]\n : [];\n const commandOptionPolicies = normalizedDefinition.command_option_policies\n ? normalizedDefinition.command_option_policies\n : existing?.command_option_policies\n ? [...existing.command_option_policies]\n : [];\n target.set(lowerName, {\n name: keepName,\n folder,\n aliases,\n required_create_fields: requiredCreateFields,\n required_create_repeatables: requiredCreateRepeatables,\n options,\n command_option_policies: commandOptionPolicies,\n });\n }\n}\n\nfunction collectExtensionTypeDefinitions(registrations: ExtensionRegistrationRegistry | null | undefined): ItemTypeDefinition[] {\n if (!registrations) {\n return [];\n }\n const definitions: ItemTypeDefinition[] = [];\n for (const registration of registrations.item_types ?? []) {\n const typeDefinitionsRaw = (registration as { types?: unknown[] }).types;\n if (!Array.isArray(typeDefinitionsRaw)) {\n continue;\n }\n for (const rawDefinition of typeDefinitionsRaw) {\n const normalized = coerceTypeDefinitionFromUnknown(rawDefinition);\n if (normalized) {\n definitions.push(normalized);\n }\n }\n }\n return definitions;\n}\n\nexport function resolveItemTypeRegistry(\n settings: PmSettings,\n extensionRegistrations: ExtensionRegistrationRegistry | null | undefined = null,\n): ItemTypeRegistry {\n const byLowerName = new Map<string, ResolvedItemTypeDefinition>();\n for (const builtin of ITEM_TYPE_VALUES) {\n byLowerName.set(builtin.toLowerCase(), {\n name: builtin,\n folder: TYPE_TO_FOLDER[builtin],\n aliases: [],\n required_create_fields: [...DEFAULT_REQUIRED_CREATE_FIELDS],\n required_create_repeatables: [...DEFAULT_REQUIRED_CREATE_REPEATABLES],\n options: [],\n command_option_policies: [],\n });\n }\n\n applyTypeDefinitions(settings.item_types?.definitions ?? [], byLowerName, false);\n applyTypeDefinitions(collectExtensionTypeDefinitions(extensionRegistrations), byLowerName, false);\n\n const definitions = [...byLowerName.values()].sort((left, right) => left.name.localeCompare(right.name));\n const byType: Record<string, ResolvedItemTypeDefinition> = {};\n const aliasToType: Record<string, string> = {};\n const typeToFolder: Record<string, string> = {};\n for (const definition of definitions) {\n byType[definition.name] = definition;\n typeToFolder[definition.name] = definition.folder;\n aliasToType[definition.name.toLowerCase()] = definition.name;\n for (const alias of definition.aliases) {\n aliasToType[alias.toLowerCase()] = definition.name;\n }\n }\n const folders = [...new Set(definitions.map((definition) => definition.folder))].sort((left, right) => left.localeCompare(right));\n return {\n types: definitions.map((definition) => definition.name),\n folders,\n type_to_folder: typeToFolder,\n by_type: byType,\n alias_to_type: aliasToType,\n };\n}\n\nexport function resolveTypeName(rawType: string | undefined, registry: ItemTypeRegistry): string | undefined {\n if (rawType === undefined) {\n return undefined;\n }\n return registry.alias_to_type[rawType.trim().toLowerCase()];\n}\n\nexport function resolveTypeDefinition(\n typeName: string | undefined,\n registry: ItemTypeRegistry,\n): ResolvedItemTypeDefinition | undefined {\n const resolvedName = resolveTypeName(typeName, registry);\n if (!resolvedName) {\n return undefined;\n }\n return registry.by_type[resolvedName];\n}\n\nexport function resolveCommandOptionPolicyState(\n typeDefinition: ResolvedItemTypeDefinition,\n command: CommandOptionPolicyCommand,\n baseRequiredOptions: Iterable<string>,\n): CommandOptionPolicyState {\n const errors: string[] = [];\n const required = new Set<string>();\n const hidden = new Set<string>();\n const disabled = new Set<string>();\n\n for (const rawBase of baseRequiredOptions) {\n const canonical = canonicalizeCommandOptionKey(command, rawBase);\n if (!canonical) {\n errors.push(\n `Unsupported base required option \"${rawBase}\" for command \"${command}\" on type \"${typeDefinition.name}\"`,\n );\n continue;\n }\n required.add(canonical);\n }\n\n for (const policy of typeDefinition.command_option_policies) {\n if (policy.command !== command) {\n continue;\n }\n const canonical = canonicalizeCommandOptionKey(command, policy.option);\n if (!canonical) {\n errors.push(\n `Unsupported command_option_policies option \"${policy.option}\" for command \"${command}\" on type \"${typeDefinition.name}\"`,\n );\n continue;\n }\n if (policy.required !== undefined) {\n if (policy.required) {\n required.add(canonical);\n } else {\n required.delete(canonical);\n }\n }\n if (policy.visible !== undefined) {\n if (policy.visible) {\n hidden.delete(canonical);\n } else {\n hidden.add(canonical);\n }\n }\n if (policy.enabled !== undefined) {\n if (policy.enabled) {\n disabled.delete(canonical);\n } else {\n disabled.add(canonical);\n }\n }\n }\n\n for (const option of required) {\n if (disabled.has(option)) {\n errors.push(\n `Option \"${option}\" cannot be both required and disabled for command \"${command}\" on type \"${typeDefinition.name}\"`,\n );\n }\n }\n\n return {\n required: [...required],\n hidden: [...hidden].sort((left, right) => left.localeCompare(right)),\n disabled: [...disabled].sort((left, right) => left.localeCompare(right)),\n errors,\n };\n}\n\nexport function validateTypeOptions(\n typeName: string,\n rawTypeOptions: Record<string, string> | undefined,\n registry: ItemTypeRegistry,\n): { normalized: Record<string, string> | undefined; errors: string[] } {\n const typeDefinition = resolveTypeDefinition(typeName, registry);\n if (!typeDefinition) {\n return {\n normalized: undefined,\n errors: [`Unknown type \"${typeName}\"`],\n };\n }\n const errors: string[] = [];\n const optionByAlias = new Map<string, ItemTypeOptionDefinition>();\n for (const option of typeDefinition.options) {\n optionByAlias.set(option.key.toLowerCase(), option);\n for (const alias of option.aliases ?? []) {\n optionByAlias.set(alias.toLowerCase(), option);\n }\n }\n\n const normalized: Record<string, string> = {};\n for (const [rawKey, rawValue] of Object.entries(rawTypeOptions ?? {})) {\n const trimmedKey = rawKey.trim();\n const trimmedValue = rawValue.trim();\n if (trimmedKey.length === 0) {\n errors.push(\"type option keys must not be empty\");\n continue;\n }\n if (trimmedValue.length === 0) {\n errors.push(`type option \"${trimmedKey}\" must not be empty`);\n continue;\n }\n const optionDefinition = optionByAlias.get(trimmedKey.toLowerCase());\n if (!optionDefinition) {\n const allowed = typeDefinition.options.map((option) => option.key).join(\", \");\n errors.push(\n typeDefinition.options.length > 0\n ? `Unknown type option \"${trimmedKey}\" for type \"${typeDefinition.name}\". Allowed: ${allowed}`\n : `Type \"${typeDefinition.name}\" does not define any configurable type options`,\n );\n continue;\n }\n const allowedValues = optionDefinition.values;\n let resolvedValue = trimmedValue;\n if (allowedValues.length > 0) {\n const valueLookup = new Map(allowedValues.map((value) => [value.toLowerCase(), value]));\n const canonical = valueLookup.get(trimmedValue.toLowerCase());\n if (!canonical) {\n errors.push(\n `Invalid value \"${trimmedValue}\" for type option \"${optionDefinition.key}\". Allowed: ${allowedValues.join(\", \")}`,\n );\n continue;\n }\n resolvedValue = canonical;\n }\n normalized[optionDefinition.key] = resolvedValue;\n }\n\n for (const option of typeDefinition.options) {\n if (option.required && !(option.key in normalized)) {\n errors.push(`Missing required type option \"${option.key}\" for type \"${typeDefinition.name}\"`);\n }\n }\n\n const sortedKeys = Object.keys(normalized).sort((left, right) => left.localeCompare(right));\n if (sortedKeys.length === 0) {\n return {\n normalized: undefined,\n errors,\n };\n }\n return {\n normalized: Object.fromEntries(sortedKeys.map((key) => [key, normalized[key]])),\n errors,\n };\n}\n", "import path from \"node:path\";\nimport { pathExists, readFileIfExists, writeFileAtomic } from \"../fs/fs-utils.js\";\nimport { DEFAULT_STATUS_DEFINITIONS, DEFAULT_WORKFLOW_DEFINITION } from \"../shared/constants.js\";\nimport {\n RUNTIME_FIELD_COMMAND_VALUES,\n RUNTIME_FIELD_TYPE_VALUES,\n RUNTIME_STATUS_ROLE_VALUES,\n RUNTIME_UNKNOWN_FIELD_POLICY_VALUES,\n STATUS_VALUES,\n} from \"../../types/index.js\";\nimport type {\n ItemTypeDefinition,\n RuntimeFieldCommand,\n RuntimeFieldDefinition,\n RuntimeFieldType,\n RuntimeSchemaSettings,\n RuntimeStatusDefinition,\n RuntimeStatusRole,\n RuntimeWorkflowDefinition,\n} from \"../../types/index.js\";\n\nexport type { RuntimeFieldCommand } from \"../../types/index.js\";\n\nexport const DEFAULT_RUNTIME_SCHEMA_FILE_PATHS = Object.freeze({\n types: \"schema/types.json\",\n statuses: \"schema/statuses.json\",\n fields: \"schema/fields.json\",\n workflows: \"schema/workflows.json\",\n});\n\n// Default lifecycle status model and workflow role mapping live in\n// src/core/shared/constants.ts as the single source of truth (also referenced\n// by SETTINGS_DEFAULTS). Re-exported here under the historical names.\nexport const DEFAULT_RUNTIME_WORKFLOW: RuntimeWorkflowDefinition = DEFAULT_WORKFLOW_DEFINITION;\n\nexport const DEFAULT_RUNTIME_STATUS_DEFINITIONS: ReadonlyArray<RuntimeStatusDefinition> = DEFAULT_STATUS_DEFINITIONS;\n\nconst DEFAULT_RUNTIME_FIELD_COMMANDS: RuntimeFieldCommand[] = [\"create\", \"update\"];\n\nexport interface RuntimeStatusDefinitionResolved {\n id: string;\n aliases: string[];\n roles: RuntimeStatusRole[];\n description?: string;\n order: number;\n}\n\nexport interface RuntimeFieldDefinitionResolved {\n key: string;\n metadata_key: string;\n cli_flag: string;\n cli_aliases: string[];\n description?: string;\n type: RuntimeFieldType;\n commands: RuntimeFieldCommand[];\n repeatable: boolean;\n required: boolean;\n required_on_create: boolean;\n required_types: string[];\n allow_unset: boolean;\n}\n\nexport interface RuntimeStatusRegistry {\n definitions: RuntimeStatusDefinitionResolved[];\n by_id: Map<string, RuntimeStatusDefinitionResolved>;\n alias_to_id: Map<string, string>;\n terminal_statuses: Set<string>;\n terminal_done_statuses: Set<string>;\n terminal_canceled_statuses: Set<string>;\n active_statuses: Set<string>;\n blocked_statuses: Set<string>;\n draft_statuses: Set<string>;\n open_status: string;\n close_status: string;\n canceled_status: string;\n}\n\nexport interface RuntimeFieldRegistry {\n definitions: RuntimeFieldDefinitionResolved[];\n by_key: Map<string, RuntimeFieldDefinitionResolved>;\n by_cli_token: Map<string, RuntimeFieldDefinitionResolved>;\n command_to_fields: Map<RuntimeFieldCommand, RuntimeFieldDefinitionResolved[]>;\n}\n\nexport interface RuntimeSchemaFileBootstrapResult {\n created_paths: string[];\n}\n\nexport interface LoadedRuntimeSchemaSections {\n schema: RuntimeSchemaSettings;\n type_definitions_from_file: ItemTypeDefinition[] | undefined;\n warnings: string[];\n created_paths: string[];\n}\n\nconst RUNTIME_STATUS_ROLE_SET = new Set<string>(RUNTIME_STATUS_ROLE_VALUES);\nconst RUNTIME_FIELD_TYPE_SET = new Set<string>(RUNTIME_FIELD_TYPE_VALUES);\nconst RUNTIME_FIELD_COMMAND_SET = new Set<string>(RUNTIME_FIELD_COMMAND_VALUES);\nconst RUNTIME_UNKNOWN_FIELD_POLICY_SET = new Set<string>(RUNTIME_UNKNOWN_FIELD_POLICY_VALUES);\n\nfunction normalizeStringList(values: string[] | undefined): string[] {\n const candidates = Array.isArray(values) ? values : [];\n return [...new Set(candidates.map((value) => (typeof value === \"string\" ? value.trim() : \"\")).filter((value) => value.length > 0))]\n .sort((left, right) => left.localeCompare(right));\n}\n\nfunction normalizeStatusToken(value: unknown): string {\n return typeof value === \"string\" ? value.trim().toLowerCase().replaceAll(/[\\s-]+/g, \"_\") : \"\";\n}\n\nfunction normalizeStatusId(value: unknown): string | undefined {\n if (typeof value !== \"string\" || value.length === 0) {\n return undefined;\n }\n const normalized = normalizeStatusToken(value);\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction stripFlagPrefix(value: string): string {\n return value.startsWith(\"--\") ? value.slice(2) : value;\n}\n\nfunction normalizeCliToken(value: unknown): string {\n return typeof value === \"string\" ? stripFlagPrefix(value.trim().toLowerCase().replaceAll(/[\\s_]+/g, \"-\")) : \"\";\n}\n\nfunction keyToDefaultCliFlag(value: string): string {\n return value.replaceAll(\"_\", \"-\");\n}\n\nfunction toCamelCase(input: string): string {\n const segments = input\n .replaceAll(/[^A-Za-z0-9]+/g, \" \")\n .trim()\n .split(/\\s+/)\n .filter((segment) => segment.length > 0)\n .map((segment) => segment.toLowerCase());\n if (segments.length === 0) {\n return input;\n }\n const [first, ...rest] = segments;\n return `${first}${rest.map((segment) => `${segment.slice(0, 1).toUpperCase()}${segment.slice(1)}`).join(\"\")}`;\n}\n\nfunction normalizeRuntimeStatusDefinition(\n definition: RuntimeStatusDefinition,\n fallbackOrder: number,\n): RuntimeStatusDefinitionResolved | null {\n const id = normalizeStatusId(definition.id);\n if (!id) {\n return null;\n }\n const aliases = normalizeStringList(definition.aliases).map((value) => normalizeStatusToken(value)).filter((value) => value !== id);\n const roles = normalizeStringList(definition.roles).filter((value): value is RuntimeStatusRole => RUNTIME_STATUS_ROLE_SET.has(value));\n const description = definition.description?.trim();\n const order = typeof definition.order === \"number\" && Number.isFinite(definition.order) ? definition.order : fallbackOrder;\n return {\n id,\n aliases,\n roles,\n description: description && description.length > 0 ? description : undefined,\n order,\n };\n}\n\nfunction normalizeRuntimeWorkflow(workflow: RuntimeWorkflowDefinition | undefined): RuntimeWorkflowDefinition {\n return {\n draft_status: normalizeStatusId(workflow?.draft_status),\n open_status: normalizeStatusId(workflow?.open_status),\n in_progress_status: normalizeStatusId(workflow?.in_progress_status),\n blocked_status: normalizeStatusId(workflow?.blocked_status),\n close_status: normalizeStatusId(workflow?.close_status),\n canceled_status: normalizeStatusId(workflow?.canceled_status),\n };\n}\n\nfunction normalizeRuntimeFieldDefinition(definition: RuntimeFieldDefinition): RuntimeFieldDefinitionResolved | null {\n const key = normalizeStatusToken(definition.key ?? \"\");\n if (!key) {\n return null;\n }\n const metadataKey = normalizeStatusToken(definition.metadata_key ?? definition.front_matter_key ?? key);\n const cliFlag = normalizeCliToken(definition.cli_flag ?? keyToDefaultCliFlag(key));\n if (!cliFlag) {\n return null;\n }\n const cliAliases = normalizeStringList(definition.cli_aliases)\n .map((value) => normalizeCliToken(value))\n .filter((value) => value.length > 0 && value !== cliFlag);\n const typeCandidate = typeof definition.type === \"string\" ? definition.type.trim().toLowerCase() : \"string\";\n const type = RUNTIME_FIELD_TYPE_SET.has(typeCandidate) ? (typeCandidate as RuntimeFieldType) : \"string\";\n const commands = (() => {\n const normalized = normalizeStringList(definition.commands).filter((value): value is RuntimeFieldCommand =>\n RUNTIME_FIELD_COMMAND_SET.has(value),\n );\n if (normalized.length > 0) {\n return normalized;\n }\n return [...DEFAULT_RUNTIME_FIELD_COMMANDS];\n })();\n const description = definition.description?.trim();\n const requiredTypes = normalizeStringList(definition.required_types);\n return {\n key,\n metadata_key: metadataKey,\n cli_flag: cliFlag,\n cli_aliases: cliAliases,\n description: description && description.length > 0 ? description : undefined,\n type,\n commands,\n repeatable: definition.repeatable === true || type === \"string_array\",\n required: definition.required === true,\n required_on_create: definition.required_on_create === true,\n required_types: requiredTypes,\n allow_unset: definition.allow_unset !== false,\n };\n}\n\nexport function normalizeRuntimeSchemaSettings(schema: Partial<RuntimeSchemaSettings> | undefined): RuntimeSchemaSettings {\n const files = {\n ...DEFAULT_RUNTIME_SCHEMA_FILE_PATHS,\n ...(schema?.files ?? {}),\n };\n const statusesSource = schema?.statuses && schema.statuses.length > 0 ? schema.statuses : DEFAULT_RUNTIME_STATUS_DEFINITIONS;\n const normalizedStatuses = (() => {\n const dedupedById = new Map<string, RuntimeStatusDefinitionResolved>();\n for (const [index, definition] of statusesSource.entries()) {\n const normalized = normalizeRuntimeStatusDefinition(definition, index);\n if (!normalized) {\n continue;\n }\n dedupedById.set(normalized.id, normalized);\n }\n const values = [...dedupedById.values()].sort((left, right) =>\n left.order === right.order ? left.id.localeCompare(right.id) : left.order - right.order,\n );\n if (values.length > 0) {\n return values;\n }\n return DEFAULT_RUNTIME_STATUS_DEFINITIONS.map((definition, index) =>\n normalizeRuntimeStatusDefinition(definition, index),\n ).filter((definition): definition is RuntimeStatusDefinitionResolved => definition !== null);\n })();\n const normalizedFields = (() => {\n const dedupedByKey = new Map<string, RuntimeFieldDefinitionResolved>();\n for (const definition of schema?.fields ?? []) {\n const normalized = normalizeRuntimeFieldDefinition(definition);\n if (!normalized) {\n continue;\n }\n dedupedByKey.set(normalized.key, normalized);\n }\n return [...dedupedByKey.values()].sort((left, right) => left.key.localeCompare(right.key));\n })();\n const unknownFieldPolicyCandidate =\n typeof schema?.unknown_field_policy === \"string\" ? schema.unknown_field_policy.trim().toLowerCase() : \"allow\";\n const unknownFieldPolicy = RUNTIME_UNKNOWN_FIELD_POLICY_SET.has(unknownFieldPolicyCandidate)\n ? unknownFieldPolicyCandidate\n : \"allow\";\n return {\n version: typeof schema?.version === \"number\" && Number.isFinite(schema.version) ? Math.floor(schema.version) : 1,\n files,\n statuses: normalizedStatuses.map((definition) => ({\n id: definition.id,\n aliases: definition.aliases.length > 0 ? [...definition.aliases] : undefined,\n roles: definition.roles.length > 0 ? [...definition.roles] : undefined,\n description: definition.description,\n order: definition.order,\n })),\n fields: normalizedFields.map((definition) => ({\n key: definition.key,\n metadata_key: definition.metadata_key !== definition.key ? definition.metadata_key : undefined,\n cli_flag: definition.cli_flag !== keyToDefaultCliFlag(definition.key) ? definition.cli_flag : undefined,\n cli_aliases: definition.cli_aliases.length > 0 ? [...definition.cli_aliases] : undefined,\n description: definition.description,\n type: definition.type,\n commands: [...definition.commands],\n repeatable: definition.repeatable === true ? true : undefined,\n required: definition.required === true ? true : undefined,\n required_on_create: definition.required_on_create === true ? true : undefined,\n required_types: definition.required_types.length > 0 ? [...definition.required_types] : undefined,\n allow_unset: definition.allow_unset === false ? false : undefined,\n })),\n workflow: {\n ...DEFAULT_RUNTIME_WORKFLOW,\n ...normalizeRuntimeWorkflow(schema?.workflow),\n },\n unknown_field_policy: unknownFieldPolicy as RuntimeSchemaSettings[\"unknown_field_policy\"],\n };\n}\n\nfunction serializeJson(value: unknown): string {\n return `${JSON.stringify(value, null, 2)}\\n`;\n}\n\nfunction buildTypesFileSeed(): unknown {\n return {\n definitions: [],\n };\n}\n\nfunction buildStatusesFileSeed(): unknown {\n return {\n statuses: DEFAULT_RUNTIME_STATUS_DEFINITIONS,\n };\n}\n\nfunction buildFieldsFileSeed(): unknown {\n return {\n fields: [],\n };\n}\n\nfunction buildWorkflowsFileSeed(): unknown {\n return {\n workflow: DEFAULT_RUNTIME_WORKFLOW,\n };\n}\n\nfunction parseOptionalJson(raw: string, warningKey: string, warnings: string[]): unknown | undefined {\n try {\n return JSON.parse(raw) as unknown;\n } catch {\n warnings.push(warningKey);\n return undefined;\n }\n}\n\nfunction readTypeDefinitionsFromSchemaFile(parsed: unknown): ItemTypeDefinition[] | undefined {\n if (Array.isArray(parsed)) {\n return parsed as ItemTypeDefinition[];\n }\n if (typeof parsed !== \"object\" || parsed === null) {\n return undefined;\n }\n const record = parsed as Record<string, unknown>;\n if (Array.isArray(record.definitions)) {\n return record.definitions as ItemTypeDefinition[];\n }\n if (typeof record.item_types === \"object\" && record.item_types !== null) {\n const itemTypesRecord = record.item_types as Record<string, unknown>;\n if (Array.isArray(itemTypesRecord.definitions)) {\n return itemTypesRecord.definitions as ItemTypeDefinition[];\n }\n }\n return undefined;\n}\n\nfunction readStatusesFromSchemaFile(parsed: unknown): RuntimeStatusDefinition[] | undefined {\n if (Array.isArray(parsed)) {\n return parsed as RuntimeStatusDefinition[];\n }\n if (typeof parsed !== \"object\" || parsed === null) {\n return undefined;\n }\n const record = parsed as Record<string, unknown>;\n if (Array.isArray(record.statuses)) {\n return record.statuses as RuntimeStatusDefinition[];\n }\n if (Array.isArray(record.definitions)) {\n return record.definitions as RuntimeStatusDefinition[];\n }\n return undefined;\n}\n\nfunction readFieldsFromSchemaFile(parsed: unknown): RuntimeFieldDefinition[] | undefined {\n if (Array.isArray(parsed)) {\n return parsed as RuntimeFieldDefinition[];\n }\n if (typeof parsed !== \"object\" || parsed === null) {\n return undefined;\n }\n const record = parsed as Record<string, unknown>;\n if (Array.isArray(record.fields)) {\n return record.fields as RuntimeFieldDefinition[];\n }\n if (Array.isArray(record.definitions)) {\n return record.definitions as RuntimeFieldDefinition[];\n }\n return undefined;\n}\n\nfunction readWorkflowFromSchemaFile(parsed: unknown): RuntimeWorkflowDefinition | undefined {\n if (typeof parsed !== \"object\" || parsed === null || Array.isArray(parsed)) {\n return undefined;\n }\n const record = parsed as Record<string, unknown>;\n if (typeof record.workflow === \"object\" && record.workflow !== null && !Array.isArray(record.workflow)) {\n return record.workflow as RuntimeWorkflowDefinition;\n }\n if (typeof record.workflows === \"object\" && record.workflows !== null && !Array.isArray(record.workflows)) {\n return record.workflows as RuntimeWorkflowDefinition;\n }\n return record as RuntimeWorkflowDefinition;\n}\n\nexport function filePathForSchemaSection(pmRoot: string, configuredPath: string | undefined, fallbackPath: string): string {\n const normalized = configuredPath?.trim() || fallbackPath;\n if (path.isAbsolute(normalized)) {\n return normalized;\n }\n return path.join(pmRoot, normalized);\n}\n\nexport async function ensureRuntimeSchemaFileScaffold(\n pmRoot: string,\n schema: RuntimeSchemaSettings,\n): Promise<RuntimeSchemaFileBootstrapResult> {\n const normalizedSchema = normalizeRuntimeSchemaSettings(schema);\n const specs: Array<{ path: string; seed: unknown }> = [\n {\n path: filePathForSchemaSection(pmRoot, normalizedSchema.files.types, DEFAULT_RUNTIME_SCHEMA_FILE_PATHS.types),\n seed: buildTypesFileSeed(),\n },\n {\n path: filePathForSchemaSection(pmRoot, normalizedSchema.files.statuses, DEFAULT_RUNTIME_SCHEMA_FILE_PATHS.statuses),\n seed: buildStatusesFileSeed(),\n },\n {\n path: filePathForSchemaSection(pmRoot, normalizedSchema.files.fields, DEFAULT_RUNTIME_SCHEMA_FILE_PATHS.fields),\n seed: buildFieldsFileSeed(),\n },\n {\n path: filePathForSchemaSection(pmRoot, normalizedSchema.files.workflows, DEFAULT_RUNTIME_SCHEMA_FILE_PATHS.workflows),\n seed: buildWorkflowsFileSeed(),\n },\n ];\n const createdPaths: string[] = [];\n for (const spec of specs) {\n if (await pathExists(spec.path)) {\n continue;\n }\n await writeFileAtomic(spec.path, serializeJson(spec.seed));\n createdPaths.push(spec.path);\n }\n return {\n created_paths: createdPaths,\n };\n}\n\nexport async function loadRuntimeSchemaFromOptionalFiles(\n pmRoot: string,\n schema: RuntimeSchemaSettings,\n): Promise<LoadedRuntimeSchemaSections> {\n const normalizedSchema = normalizeRuntimeSchemaSettings(schema);\n const warnings: string[] = [];\n const typeFilePath = filePathForSchemaSection(pmRoot, normalizedSchema.files.types, DEFAULT_RUNTIME_SCHEMA_FILE_PATHS.types);\n const statusFilePath = filePathForSchemaSection(\n pmRoot,\n normalizedSchema.files.statuses,\n DEFAULT_RUNTIME_SCHEMA_FILE_PATHS.statuses,\n );\n const fieldsFilePath = filePathForSchemaSection(pmRoot, normalizedSchema.files.fields, DEFAULT_RUNTIME_SCHEMA_FILE_PATHS.fields);\n const workflowsFilePath = filePathForSchemaSection(\n pmRoot,\n normalizedSchema.files.workflows,\n DEFAULT_RUNTIME_SCHEMA_FILE_PATHS.workflows,\n );\n\n const typeDefinitionsFromFile = (() => {\n return undefined as ItemTypeDefinition[] | undefined;\n })();\n let loadedTypeDefinitions = typeDefinitionsFromFile;\n let loadedStatuses: RuntimeStatusDefinition[] | undefined;\n let loadedFields: RuntimeFieldDefinition[] | undefined;\n let loadedWorkflow: RuntimeWorkflowDefinition | undefined;\n\n const readAndParse = async (targetPath: string, warningKey: string): Promise<unknown | undefined> => {\n const raw = await readFileIfExists(targetPath);\n if (raw === null) {\n return undefined;\n }\n return parseOptionalJson(raw, warningKey, warnings);\n };\n\n const parsedTypes = await readAndParse(typeFilePath, \"runtime_schema_types_invalid_json\");\n if (parsedTypes !== undefined) {\n loadedTypeDefinitions = readTypeDefinitionsFromSchemaFile(parsedTypes);\n if (loadedTypeDefinitions === undefined) {\n warnings.push(\"runtime_schema_types_invalid_shape\");\n }\n }\n\n const parsedStatuses = await readAndParse(statusFilePath, \"runtime_schema_statuses_invalid_json\");\n if (parsedStatuses !== undefined) {\n loadedStatuses = readStatusesFromSchemaFile(parsedStatuses);\n if (loadedStatuses === undefined) {\n warnings.push(\"runtime_schema_statuses_invalid_shape\");\n }\n }\n\n const parsedFields = await readAndParse(fieldsFilePath, \"runtime_schema_fields_invalid_json\");\n if (parsedFields !== undefined) {\n loadedFields = readFieldsFromSchemaFile(parsedFields);\n if (loadedFields === undefined) {\n warnings.push(\"runtime_schema_fields_invalid_shape\");\n }\n }\n\n const parsedWorkflow = await readAndParse(workflowsFilePath, \"runtime_schema_workflows_invalid_json\");\n if (parsedWorkflow !== undefined) {\n loadedWorkflow = readWorkflowFromSchemaFile(parsedWorkflow);\n if (loadedWorkflow === undefined) {\n warnings.push(\"runtime_schema_workflows_invalid_shape\");\n }\n }\n\n const mergedSchema = normalizeRuntimeSchemaSettings({\n ...normalizedSchema,\n statuses: [...normalizedSchema.statuses, ...(loadedStatuses ?? [])],\n fields: [...normalizedSchema.fields, ...(loadedFields ?? [])],\n workflow: {\n ...normalizedSchema.workflow,\n ...(loadedWorkflow ?? {}),\n },\n });\n\n return {\n schema: mergedSchema,\n type_definitions_from_file: loadedTypeDefinitions,\n warnings,\n created_paths: [],\n };\n}\n\nfunction preferredStatusForRole(\n definitions: RuntimeStatusDefinitionResolved[],\n role: RuntimeStatusRole,\n fallbackValues: string[],\n): string | undefined {\n const withRole = definitions.filter((definition) => definition.roles.includes(role));\n if (withRole.length > 0) {\n return withRole[0].id;\n }\n for (const value of fallbackValues) {\n const normalized = normalizeStatusId(value);\n if (!normalized) {\n continue;\n }\n if (definitions.some((definition) => definition.id === normalized)) {\n return normalized;\n }\n }\n return definitions[0]?.id;\n}\n\nexport function resolveRuntimeStatusRegistry(schema: RuntimeSchemaSettings): RuntimeStatusRegistry {\n const normalizedSchema = normalizeRuntimeSchemaSettings(schema);\n const definitions = normalizedSchema.statuses.map((definition, index) =>\n normalizeRuntimeStatusDefinition(definition, index),\n ).filter((definition): definition is RuntimeStatusDefinitionResolved => definition !== null);\n const aliasToId = new Map<string, string>();\n const byId = new Map<string, RuntimeStatusDefinitionResolved>();\n for (const definition of definitions) {\n byId.set(definition.id, definition);\n aliasToId.set(definition.id, definition.id);\n aliasToId.set(definition.id.replaceAll(\"_\", \"-\"), definition.id);\n aliasToId.set(definition.id.replaceAll(\"_\", \" \"), definition.id);\n for (const alias of definition.aliases) {\n aliasToId.set(alias, definition.id);\n aliasToId.set(alias.replaceAll(\"_\", \"-\"), definition.id);\n aliasToId.set(alias.replaceAll(\"_\", \" \"), definition.id);\n }\n }\n const terminalStatuses = new Set<string>();\n const terminalDoneStatuses = new Set<string>();\n const terminalCanceledStatuses = new Set<string>();\n const activeStatuses = new Set<string>();\n const blockedStatuses = new Set<string>();\n const draftStatuses = new Set<string>();\n for (const definition of definitions) {\n const roles = new Set(definition.roles);\n if (roles.has(\"terminal\") || roles.has(\"terminal_done\") || roles.has(\"terminal_canceled\")) {\n terminalStatuses.add(definition.id);\n }\n if (roles.has(\"terminal_done\")) {\n terminalDoneStatuses.add(definition.id);\n }\n if (roles.has(\"terminal_canceled\")) {\n terminalCanceledStatuses.add(definition.id);\n }\n if (roles.has(\"active\")) {\n activeStatuses.add(definition.id);\n }\n if (roles.has(\"blocked\")) {\n blockedStatuses.add(definition.id);\n }\n if (roles.has(\"draft\")) {\n draftStatuses.add(definition.id);\n }\n }\n const workflow = normalizedSchema.workflow;\n const openStatus =\n normalizeStatusId(workflow.open_status) ??\n preferredStatusForRole(definitions, \"default_open\", [\"open\", \"in_progress\", STATUS_VALUES[0] ?? \"open\"]);\n const closeStatus =\n normalizeStatusId(workflow.close_status) ??\n preferredStatusForRole(definitions, \"default_close\", [\"closed\", \"done\", \"complete\"]);\n const canceledStatus =\n normalizeStatusId(workflow.canceled_status) ??\n preferredStatusForRole(definitions, \"default_cancel\", [\"canceled\", \"cancelled\"]);\n\n return {\n definitions,\n by_id: byId,\n alias_to_id: aliasToId,\n terminal_statuses: terminalStatuses,\n terminal_done_statuses: terminalDoneStatuses,\n terminal_canceled_statuses: terminalCanceledStatuses,\n active_statuses: activeStatuses,\n blocked_statuses: blockedStatuses,\n draft_statuses: draftStatuses,\n open_status: openStatus ?? definitions[0]?.id ?? \"open\",\n close_status: closeStatus ?? definitions[0]?.id ?? \"closed\",\n canceled_status: canceledStatus ?? definitions[0]?.id ?? \"canceled\",\n };\n}\n\nexport function normalizeStatusInputWithRegistry(value: unknown, registry: RuntimeStatusRegistry): string | undefined {\n const normalized = normalizeStatusToken(value);\n if (!normalized) {\n return undefined;\n }\n return registry.alias_to_id.get(normalized);\n}\n\nexport function resolveRuntimeFieldRegistry(schema: RuntimeSchemaSettings): RuntimeFieldRegistry {\n const normalizedSchema = normalizeRuntimeSchemaSettings(schema);\n const dedupedByKey = new Map<string, RuntimeFieldDefinitionResolved>();\n for (const definition of normalizedSchema.fields) {\n const normalized = normalizeRuntimeFieldDefinition(definition);\n if (!normalized) {\n continue;\n }\n dedupedByKey.set(normalized.key, normalized);\n }\n const definitions = [...dedupedByKey.values()].sort((left, right) => left.key.localeCompare(right.key));\n const byKey = new Map<string, RuntimeFieldDefinitionResolved>();\n const byCliToken = new Map<string, RuntimeFieldDefinitionResolved>();\n const commandToFields = new Map<RuntimeFieldCommand, RuntimeFieldDefinitionResolved[]>();\n for (const definition of definitions) {\n byKey.set(definition.key, definition);\n byCliToken.set(definition.cli_flag, definition);\n for (const alias of definition.cli_aliases) {\n byCliToken.set(alias, definition);\n }\n for (const command of definition.commands) {\n const existing = commandToFields.get(command) ?? [];\n existing.push(definition);\n commandToFields.set(command, existing);\n }\n }\n for (const [command, fieldDefinitions] of commandToFields.entries()) {\n fieldDefinitions.sort((left, right) => left.key.localeCompare(right.key));\n commandToFields.set(command, fieldDefinitions);\n }\n return {\n definitions,\n by_key: byKey,\n by_cli_token: byCliToken,\n command_to_fields: commandToFields,\n };\n}\n\nexport function runtimeFieldOptionTarget(field: RuntimeFieldDefinitionResolved): string {\n return toCamelCase(field.key);\n}\n\nexport function statusIsTerminal(status: string, registry: RuntimeStatusRegistry): boolean {\n const normalized = normalizeStatusInputWithRegistry(status, registry);\n if (!normalized) {\n return false;\n }\n return registry.terminal_statuses.has(normalized);\n}\n", "export interface PmCliErrorRecoveryPayload {\n attempted_command?: string;\n normalized_args?: string[];\n provided_fields?: string[];\n missing?: string[];\n suggested_retry?: string;\n}\n\nexport interface PmCliErrorContext {\n code?: string;\n type?: string;\n required?: string;\n why?: string;\n examples?: string[];\n nextSteps?: string[];\n recovery?: PmCliErrorRecoveryPayload;\n}\n\nexport class PmCliError extends Error {\n public readonly exitCode: number;\n public readonly context: PmCliErrorContext;\n\n constructor(message: string, exitCode: number, context: PmCliErrorContext = {}) {\n super(message);\n this.name = \"PmCliError\";\n this.exitCode = exitCode;\n this.context = context;\n }\n}\n", "/**\n * Shared projection helper for mutation command results.\n *\n * Mutation commands (create/update/close/append/update-many) return a result\n * envelope that carries a `changed_fields` string array. On create this array simply\n * re-lists every field the command just set, which the item echo above it already\n * shows, so for high-volume agent loops it is ~50% redundant payload. This helper\n * lets the CLI (`--no-changed-fields`) and the MCP agent path trim that array down\n * to a deterministic `changed_field_count` without losing mutation evidence.\n *\n * Compaction is deliberately scoped to the mutation envelope only:\n * - the envelope's own top-level `changed_fields` (create/update/close/append), and\n * - `rows[*].changed_fields` (update-many reports its delta per row).\n * It does NOT recurse into arbitrary nested objects, so unrelated payloads that\n * legitimately carry `changed_fields` (for example `pm history --diff` entries, or a\n * custom runtime metadata field) are left untouched.\n *\n * The helper is pure and side-effect free, reused by both the output layer and the\n * MCP server, and returns the original reference unchanged when nothing is compacted.\n */\n\nexport type ChangedFieldsMode = \"full\" | \"compact\";\n\nexport interface MutationProjectionOptions {\n /** Defaults to \"full\" (unchanged output). \"compact\" drops the array, keeping a count. */\n changedFields?: ChangedFieldsMode;\n}\n\nconst CHANGED_FIELDS_KEY = \"changed_fields\";\nconst CHANGED_FIELD_COUNT_KEY = \"changed_field_count\";\nconst ROWS_KEY = \"rows\";\nconst UPDATE_MANY_MUTATION_MODES = new Set([\"apply\", \"rollback\"]);\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) {\n return false;\n }\n const proto = Object.getPrototypeOf(value);\n return proto === null || proto === Object.prototype;\n}\n\n/** Replace a single envelope's own top-level `changed_fields` array with a count. */\nfunction compactOwnChangedFields(envelope: Record<string, unknown>): Record<string, unknown> | null {\n const changedFields = envelope[CHANGED_FIELDS_KEY];\n if (!Array.isArray(changedFields)) {\n return null;\n }\n const projected: Record<string, unknown> =\n Object.getPrototypeOf(envelope) === null ? Object.create(null) : {};\n for (const [key, value] of Object.entries(envelope)) {\n if (key !== CHANGED_FIELDS_KEY) {\n projected[key] = value;\n }\n }\n projected[CHANGED_FIELD_COUNT_KEY] = changedFields.length;\n return projected;\n}\n\nfunction isMutationEnvelope(value: Record<string, unknown>): boolean {\n return \"item\" in value && Array.isArray(value[CHANGED_FIELDS_KEY]);\n}\n\nfunction isUpdateManyMutationEnvelope(value: Record<string, unknown>): boolean {\n return (\n typeof value.mode === \"string\" &&\n UPDATE_MANY_MUTATION_MODES.has(value.mode) &&\n Array.isArray(value[ROWS_KEY])\n );\n}\n\nfunction replaceRows(envelope: Record<string, unknown>, rows: unknown[]): Record<string, unknown> {\n const projected: Record<string, unknown> =\n Object.getPrototypeOf(envelope) === null ? Object.create(null) : {};\n Object.assign(projected, envelope);\n projected[ROWS_KEY] = rows;\n return projected;\n}\n\n/**\n * Returns a copy of a mutation result with the envelope `changed_fields` arrays\n * replaced by `changed_field_count` when compact mode is requested. Inputs that are\n * not a mutation envelope (or full mode) are returned unchanged (same reference).\n */\nexport function projectMutationResult(result: unknown, options: MutationProjectionOptions = {}): unknown {\n const mode = options.changedFields ?? \"full\";\n if (mode === \"full\" || !isPlainObject(result)) {\n return result;\n }\n\n let changed = false;\n let projected: Record<string, unknown> = result;\n\n const compactedTop = isMutationEnvelope(result) ? compactOwnChangedFields(result) : null;\n if (compactedTop !== null) {\n projected = compactedTop;\n changed = true;\n }\n\n // update-many reports its per-item delta under rows[*].changed_fields.\n const rows = isUpdateManyMutationEnvelope(projected) ? projected[ROWS_KEY] : undefined;\n if (Array.isArray(rows)) {\n let rowsChanged = false;\n const nextRows = rows.map((row) => {\n if (!isPlainObject(row)) {\n return row;\n }\n const compactedRow = compactOwnChangedFields(row);\n if (compactedRow) {\n rowsChanged = true;\n return compactedRow;\n }\n return row;\n });\n if (rowsChanged) {\n projected = replaceRows(projected, nextRows);\n changed = true;\n }\n }\n\n return changed ? projected : result;\n}\n", "import {\n runActiveCommandOverride,\n runActiveRendererOverride,\n runActiveServiceOverrideSync,\n setActiveCommandResult,\n} from \"../extensions/index.js\";\nimport { EXIT_CODE } from \"../shared/constants.js\";\nimport { projectMutationResult } from \"./mutation-projection.js\";\n\nexport interface OutputOptions {\n json?: boolean;\n quiet?: boolean;\n /** When true, mutation results drop the verbose changed_fields array (keeps changed_field_count). */\n noChangedFields?: boolean;\n defaultOutputFormat?: \"toon\" | \"json\";\n command?: string;\n commandArgs?: string[];\n commandOptions?: Record<string, unknown>;\n pmRoot?: string;\n}\n\ninterface NodeLikeError {\n code?: string;\n}\n\nlet streamErrorHandlersInstalled = false;\ntype OutputStreamTarget = \"stdout\" | \"stderr\";\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n return typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isBrokenPipeError(error: unknown): boolean {\n return typeof error === \"object\" && error !== null && (error as NodeLikeError).code === \"EPIPE\";\n}\n\nfunction markStdoutBrokenPipeExitCode(): void {\n if (process.exitCode === undefined || process.exitCode === EXIT_CODE.SUCCESS) {\n process.exitCode = EXIT_CODE.SUCCESS;\n }\n}\n\nfunction markStderrBrokenPipeExitCode(): void {\n if (process.exitCode === undefined || process.exitCode === EXIT_CODE.SUCCESS) {\n process.exitCode = EXIT_CODE.GENERIC_FAILURE;\n }\n}\n\nfunction markBrokenPipeExitCode(target: OutputStreamTarget): void {\n if (target === \"stdout\") {\n markStdoutBrokenPipeExitCode();\n return;\n }\n markStderrBrokenPipeExitCode();\n}\n\nfunction handleUnhandledStreamError(error: unknown): void {\n const unhandled = error instanceof Error ? error : new Error(String(error));\n setImmediate(() => {\n throw unhandled;\n });\n}\n\nfunction installStreamErrorHandlers(): void {\n if (streamErrorHandlersInstalled) {\n return;\n }\n streamErrorHandlersInstalled = true;\n process.stdout.on(\"error\", (error: unknown) => {\n if (isBrokenPipeError(error)) {\n markBrokenPipeExitCode(\"stdout\");\n return;\n }\n handleUnhandledStreamError(error);\n });\n process.stderr.on(\"error\", (error: unknown) => {\n if (isBrokenPipeError(error)) {\n markBrokenPipeExitCode(\"stderr\");\n return;\n }\n handleUnhandledStreamError(error);\n });\n}\n\nfunction writeToStream(target: OutputStreamTarget, text: string): boolean {\n installStreamErrorHandlers();\n try {\n if (target === \"stdout\") {\n process.stdout.write(text);\n } else {\n process.stderr.write(text);\n }\n return true;\n } catch (error: unknown) {\n if (isBrokenPipeError(error)) {\n markBrokenPipeExitCode(target);\n return false;\n }\n throw error;\n }\n}\n\nexport function writeStdout(text: string): boolean {\n return writeToStream(\"stdout\", text);\n}\n\nexport function writeStderr(text: string): boolean {\n return writeToStream(\"stderr\", text);\n}\n\nfunction renderScalar(value: unknown): string {\n if (typeof value === \"string\") return JSON.stringify(value);\n if (typeof value === \"number\" || typeof value === \"boolean\") return String(value);\n if (value === null) return \"null\";\n return JSON.stringify(value);\n}\n\nfunction compactToonValue(value: unknown): unknown | undefined {\n if (value === null || value === undefined) {\n return undefined;\n }\n\n if (Array.isArray(value)) {\n const compactedEntries = value\n .map((entry) => compactToonValue(entry))\n .filter((entry): entry is unknown => entry !== undefined);\n return compactedEntries.length > 0 ? compactedEntries : undefined;\n }\n\n if (isPlainObject(value)) {\n const compacted: Record<string, unknown> = {};\n for (const [key, entry] of Object.entries(value)) {\n const compactedEntry = compactToonValue(entry);\n if (compactedEntry !== undefined) {\n compacted[key] = compactedEntry;\n }\n }\n return Object.keys(compacted).length > 0 ? compacted : undefined;\n }\n\n return value;\n}\n\nfunction renderToonValue(value: unknown, depth: number): string {\n const indent = \" \".repeat(depth);\n\n if (Array.isArray(value)) {\n if (value.length === 0) return \"[]\";\n return value\n .map((entry) => {\n if (!isPlainObject(entry) && !Array.isArray(entry)) {\n return `${indent}- ${renderScalar(entry)}`;\n }\n const rendered = renderToonValue(entry, depth + 1);\n const lines = rendered.split(\"\\n\");\n const [firstLine, ...rest] = lines;\n if (rest.length === 0) {\n return `${indent}- ${firstLine.trimStart()}`;\n }\n return `${indent}- ${firstLine.trimStart()}\\n${rest.join(\"\\n\")}`;\n })\n .join(\"\\n\");\n }\n\n if (isPlainObject(value)) {\n const entries = Object.entries(value);\n if (entries.length === 0) return \"{}\";\n return entries\n .map(([key, entry]) => {\n if (!isPlainObject(entry) && !Array.isArray(entry)) {\n return `${indent}${key}: ${renderScalar(entry)}`;\n }\n if (Array.isArray(entry) && entry.length === 0) {\n return `${indent}${key}: []`;\n }\n if (isPlainObject(entry) && Object.keys(entry).length === 0) {\n return `${indent}${key}: {}`;\n }\n return `${indent}${key}:\\n${renderToonValue(entry, depth + 1)}`;\n })\n .join(\"\\n\");\n }\n\n return `${indent}${renderScalar(value)}`;\n}\n\nfunction renderDefaultMarkdownResult(value: unknown): string | null {\n if (!isPlainObject(value) || value.output_default !== \"markdown\") {\n return null;\n }\n if (typeof value.view !== \"string\" || !Array.isArray(value.events) || !Array.isArray(value.days)) {\n return null;\n }\n const lines = [`# pm calendar (${value.view})`, \"\"];\n const summary = isPlainObject(value.summary) ? value.summary : {};\n lines.push(`- events: ${String(summary.events ?? 0)}`);\n lines.push(\"\");\n if (value.events.length === 0) {\n lines.push(\"No calendar events matched the selected filters.\");\n return `${lines.join(\"\\n\")}\\n`;\n }\n for (const event of value.events) {\n if (!isPlainObject(event)) {\n continue;\n }\n const kind = typeof event.kind === \"string\" ? event.kind : \"event\";\n const title = typeof event.item_title === \"string\" ? event.item_title : \"\";\n const itemId = typeof event.item_id === \"string\" ? event.item_id : \"\";\n const reminderText = typeof event.reminder_text === \"string\" && event.reminder_text.length > 0 ? ` ${event.reminder_text}` : \"\";\n lines.push(`- [${kind}] ${itemId} ${title}${reminderText}`.trim());\n }\n return `${lines.join(\"\\n\")}\\n`;\n}\n\nexport function formatOutput(result: unknown, options: OutputOptions): string {\n const commandOverride = runActiveCommandOverride(result);\n const effectiveResult = commandOverride.result;\n setActiveCommandResult(effectiveResult);\n const format =\n options.json === true\n ? \"json\"\n : options.json === false\n ? \"toon\"\n : options.defaultOutputFormat === \"json\"\n ? \"json\"\n : \"toon\";\n const serviceOverride = runActiveServiceOverrideSync(\"output_format\", {\n command: options.command,\n args: options.commandArgs,\n command_options: options.commandOptions,\n global: { ...options },\n pm_root: options.pmRoot,\n format,\n options: { ...options },\n result: effectiveResult,\n });\n if (serviceOverride.handled && typeof serviceOverride.result === \"string\") {\n return serviceOverride.result.endsWith(\"\\n\") ? serviceOverride.result : `${serviceOverride.result}\\n`;\n }\n const outputResult = serviceOverride.handled ? serviceOverride.result : effectiveResult;\n if (format === \"toon\") {\n const markdownDefault = renderDefaultMarkdownResult(outputResult);\n if (markdownDefault !== null) {\n return markdownDefault;\n }\n }\n const rendererOverride = runActiveRendererOverride(format, outputResult);\n if (rendererOverride.rendered !== null) {\n return rendererOverride.rendered.endsWith(\"\\n\") ? rendererOverride.rendered : `${rendererOverride.rendered}\\n`;\n }\n if (format === \"json\") {\n return `${JSON.stringify(outputResult, null, 2)}\\n`;\n }\n const compactedToon = compactToonValue(outputResult);\n if (compactedToon === undefined) {\n return \"{}\\n\";\n }\n return `${renderToonValue(compactedToon, 0)}\\n`;\n}\n\nexport function printResult(result: unknown, options: OutputOptions): void {\n const projected = options.noChangedFields ? projectMutationResult(result, { changedFields: \"compact\" }) : result;\n const rendered = formatOutput(projected, options);\n if (options.quiet) {\n return;\n }\n writeStdout(rendered);\n}\n\nexport function printError(message: string): void {\n const override = runActiveServiceOverrideSync(\"error_format\", {\n message,\n });\n const rendered = override.handled && typeof override.result === \"string\" ? override.result : message;\n writeStderr(rendered.endsWith(\"\\n\") ? rendered : `${rendered}\\n`);\n}\n", "/**\n * Dependency-free settings validator.\n *\n * Mirrors the previous `zod` schema for `settings.json` exactly (type checks,\n * required-vs-optional fields, integer/positive constraints, literal unions, and\n * unknown-key stripping with all-or-nothing failure semantics) without paying\n * the ~85ms cost of importing `zod` on every command's hot read path.\n *\n * The validator intentionally reproduces the zod schema's shape — including\n * fields that `PmSettings` carries but the schema does not (e.g. `search.tuning`)\n * are stripped here just as zod stripped them — so settings behavior is\n * byte-identical to the previous implementation.\n */\nimport {\n GOVERNANCE_PRESET_VALUES,\n RUNTIME_FIELD_COMMAND_VALUES,\n RUNTIME_FIELD_TYPE_VALUES,\n RUNTIME_STATUS_ROLE_VALUES,\n RUNTIME_UNKNOWN_FIELD_POLICY_VALUES,\n} from \"../../types.js\";\nimport type {\n AgentGuidanceSettings,\n ExtensionPolicySettings,\n GovernanceSettings,\n ItemTypeDefinition,\n RuntimeSchemaSettings,\n} from \"../../types.js\";\n\n/** Validated, unknown-key-stripped settings input (pre-merge), matching the legacy zod inference. */\nexport interface ParsedSettings {\n version: number;\n id_prefix: string;\n author_default: string;\n item_format?: \"toon\" | \"json_markdown\";\n locks: { ttl_seconds: number };\n output: { default_format: \"toon\" | \"json\" };\n history?: { missing_stream: \"auto_create\" | \"strict_error\" };\n validation?: {\n sprint_release_format: \"warn\" | \"strict_error\";\n parent_reference?: \"warn\" | \"strict_error\";\n metadata_profile?: \"core\" | \"strict\" | \"custom\";\n metadata_required_fields?: string[];\n lifecycle_stale_blocker_reason_patterns?: string[];\n lifecycle_closure_like_blocked_reason_patterns?: string[];\n lifecycle_closure_like_resolution_patterns?: string[];\n lifecycle_closure_like_actual_result_patterns?: string[];\n };\n governance?: Partial<GovernanceSettings>;\n workflow?: { definition_of_done: string[] };\n testing?: { record_results_to_items: boolean };\n telemetry?: {\n enabled: boolean;\n first_run_prompt_completed?: boolean;\n capture_level?: \"minimal\" | \"redacted\" | \"max\";\n endpoint?: string;\n installation_id?: string;\n retention_days?: number;\n };\n agent_guidance?: Partial<AgentGuidanceSettings>;\n item_types?: { definitions: ItemTypeDefinition[] };\n schema?: Partial<RuntimeSchemaSettings>;\n context?: {\n default_depth?: \"brief\" | \"standard\" | \"deep\";\n activity_limit?: number;\n stale_threshold_days?: number;\n sections?: {\n hierarchy?: boolean;\n activity?: boolean;\n progress?: boolean;\n blockers?: boolean;\n files?: boolean;\n workload?: boolean;\n staleness?: boolean;\n tests?: boolean;\n };\n };\n extensions: {\n enabled: string[];\n disabled: string[];\n policy?: Partial<ExtensionPolicySettings>;\n };\n search: {\n score_threshold: number;\n hybrid_semantic_weight?: number;\n max_results: number;\n embedding_model: string;\n embedding_batch_size: number;\n embedding_timeout_ms?: number;\n scanner_max_batch_retries: number;\n provider?: string;\n mutation_refresh_policy?: \"cache_only\" | \"semantic_configured\" | \"semantic_auto\";\n };\n providers: {\n openai: { base_url: string; api_key: string; model: string };\n ollama: { base_url: string; model: string };\n };\n vector_store: {\n adapter?: string;\n qdrant: { url: string; api_key: string };\n lancedb: { path: string };\n };\n}\n\nexport type SettingsValidationResult = { success: true; data: ParsedSettings } | { success: false };\n\ntype Outcome<T> = { ok: true; value: T } | { ok: false };\ntype Check<T> = (input: unknown) => Outcome<T>;\n\n// Generic over `never` so it is assignable to every `Outcome<T>`.\nconst FAIL: Outcome<never> = { ok: false };\n\nconst vString: Check<string> = (input) => (typeof input === \"string\" ? { ok: true, value: input } : FAIL);\nconst vBoolean: Check<boolean> = (input) => (typeof input === \"boolean\" ? { ok: true, value: input } : FAIL);\n\nfunction vNumber(options: { int?: boolean; positive?: boolean } = {}): Check<number> {\n return (input) => {\n // `Number.isFinite` rejects non-numbers, NaN, and ±Infinity in one check.\n if (typeof input !== \"number\" || !Number.isFinite(input)) {\n return FAIL;\n }\n if (options.int && (!Number.isInteger(input) || !Number.isSafeInteger(input))) {\n return FAIL;\n }\n if (options.positive && input <= 0) {\n return FAIL;\n }\n return { ok: true, value: input };\n };\n}\n\nfunction vLiteral<const T extends string>(...allowed: readonly T[]): Check<T> {\n return (input) =>\n typeof input === \"string\" && (allowed as readonly string[]).includes(input)\n ? { ok: true, value: input as T }\n : FAIL;\n}\n\nfunction vArray<T>(item: Check<T>): Check<T[]> {\n return (input) => {\n if (!Array.isArray(input)) {\n return FAIL;\n }\n const value: T[] = [];\n for (const element of input) {\n const result = item(element);\n if (!result.ok) {\n return FAIL;\n }\n value.push(result.value);\n }\n return { ok: true, value };\n };\n}\n\nfunction vOptional<T>(inner: Check<T>): Check<T | undefined> {\n return (input) => (input === undefined ? { ok: true, value: undefined } : inner(input));\n}\n\nfunction vObject(shape: Record<string, Check<unknown>>): Check<Record<string, unknown>> {\n return (input) => {\n if (typeof input !== \"object\" || input === null || Array.isArray(input)) {\n return FAIL;\n }\n const record = input as Record<string, unknown>;\n const value: Record<string, unknown> = {};\n for (const [key, check] of Object.entries(shape)) {\n const result = check(record[key]);\n if (!result.ok) {\n return FAIL;\n }\n // Mirror zod: absent optional keys are omitted; unknown keys are dropped.\n if (result.value !== undefined) {\n value[key] = result.value;\n }\n }\n return { ok: true, value };\n };\n}\n\nconst itemTypeOption = vObject({\n key: vString,\n values: vArray(vString),\n required: vOptional(vBoolean),\n aliases: vOptional(vArray(vString)),\n description: vOptional(vString),\n});\n\nconst itemTypeCommandOptionPolicy = vObject({\n command: vLiteral(\"create\", \"update\"),\n option: vString,\n required: vOptional(vBoolean),\n visible: vOptional(vBoolean),\n enabled: vOptional(vBoolean),\n});\n\nconst itemTypeDefinition = vObject({\n name: vString,\n folder: vOptional(vString),\n aliases: vOptional(vArray(vString)),\n required_create_fields: vOptional(vArray(vString)),\n required_create_repeatables: vOptional(vArray(vString)),\n options: vOptional(vArray(itemTypeOption)),\n command_option_policies: vOptional(vArray(itemTypeCommandOptionPolicy)),\n});\n\nconst runtimeStatusDefinition = vObject({\n id: vString,\n aliases: vOptional(vArray(vString)),\n roles: vOptional(vArray(vLiteral(...RUNTIME_STATUS_ROLE_VALUES))),\n description: vOptional(vString),\n order: vOptional(vNumber()),\n});\n\nconst runtimeFieldDefinition = vObject({\n key: vString,\n metadata_key: vOptional(vString),\n front_matter_key: vOptional(vString),\n cli_flag: vOptional(vString),\n cli_aliases: vOptional(vArray(vString)),\n description: vOptional(vString),\n type: vOptional(vLiteral(...RUNTIME_FIELD_TYPE_VALUES)),\n commands: vOptional(vArray(vLiteral(...RUNTIME_FIELD_COMMAND_VALUES))),\n repeatable: vOptional(vBoolean),\n required: vOptional(vBoolean),\n required_on_create: vOptional(vBoolean),\n required_types: vOptional(vArray(vString)),\n allow_unset: vOptional(vBoolean),\n});\n\nconst runtimeSchemaSettings = vOptional(\n vObject({\n version: vOptional(vNumber({ int: true })),\n files: vOptional(\n vObject({\n types: vOptional(vString),\n statuses: vOptional(vString),\n fields: vOptional(vString),\n workflows: vOptional(vString),\n }),\n ),\n statuses: vOptional(vArray(runtimeStatusDefinition)),\n fields: vOptional(vArray(runtimeFieldDefinition)),\n workflow: vOptional(\n vObject({\n draft_status: vOptional(vString),\n open_status: vOptional(vString),\n in_progress_status: vOptional(vString),\n blocked_status: vOptional(vString),\n close_status: vOptional(vString),\n canceled_status: vOptional(vString),\n }),\n ),\n unknown_field_policy: vOptional(vLiteral(...RUNTIME_UNKNOWN_FIELD_POLICY_VALUES)),\n }),\n);\n\nconst governanceSettings = vOptional(\n vObject({\n preset: vOptional(vLiteral(...GOVERNANCE_PRESET_VALUES)),\n ownership_enforcement: vOptional(vLiteral(\"none\", \"warn\", \"strict\")),\n create_mode_default: vOptional(vLiteral(\"progressive\", \"strict\")),\n close_validation_default: vOptional(vLiteral(\"off\", \"warn\", \"strict\")),\n parent_reference: vOptional(vLiteral(\"warn\", \"strict_error\")),\n metadata_profile: vOptional(vLiteral(\"core\", \"strict\", \"custom\")),\n force_required_for_stale_lock: vOptional(vBoolean),\n create_default_type: vOptional(vString),\n }),\n);\n\nconst extensionPolicyOverride = vObject({\n name: vString,\n disabled: vOptional(vBoolean),\n require_trusted: vOptional(vBoolean),\n require_provenance: vOptional(vBoolean),\n sandbox_profile: vOptional(vLiteral(\"none\", \"restricted\", \"strict\")),\n allowed_capabilities: vOptional(vArray(vString)),\n blocked_capabilities: vOptional(vArray(vString)),\n allowed_surfaces: vOptional(vArray(vString)),\n blocked_surfaces: vOptional(vArray(vString)),\n allowed_commands: vOptional(vArray(vString)),\n blocked_commands: vOptional(vArray(vString)),\n allowed_actions: vOptional(vArray(vString)),\n blocked_actions: vOptional(vArray(vString)),\n allowed_services: vOptional(vArray(vString)),\n blocked_services: vOptional(vArray(vString)),\n});\n\nconst extensionPolicy = vOptional(\n vObject({\n mode: vOptional(vLiteral(\"off\", \"warn\", \"enforce\")),\n trust_mode: vOptional(vLiteral(\"off\", \"warn\", \"enforce\")),\n require_provenance: vOptional(vBoolean),\n trusted_extensions: vOptional(vArray(vString)),\n default_sandbox_profile: vOptional(vLiteral(\"none\", \"restricted\", \"strict\")),\n allowed_extensions: vOptional(vArray(vString)),\n blocked_extensions: vOptional(vArray(vString)),\n allowed_capabilities: vOptional(vArray(vString)),\n blocked_capabilities: vOptional(vArray(vString)),\n allowed_surfaces: vOptional(vArray(vString)),\n blocked_surfaces: vOptional(vArray(vString)),\n allowed_commands: vOptional(vArray(vString)),\n blocked_commands: vOptional(vArray(vString)),\n allowed_actions: vOptional(vArray(vString)),\n blocked_actions: vOptional(vArray(vString)),\n allowed_services: vOptional(vArray(vString)),\n blocked_services: vOptional(vArray(vString)),\n extension_overrides: vOptional(vArray(extensionPolicyOverride)),\n }),\n);\n\nconst settingsCheck = vObject({\n version: vNumber({ int: true }),\n id_prefix: vString,\n author_default: vString,\n item_format: vOptional(vLiteral(\"toon\", \"json_markdown\")),\n locks: vObject({ ttl_seconds: vNumber({ int: true }) }),\n output: vObject({ default_format: vLiteral(\"toon\", \"json\") }),\n history: vOptional(vObject({ missing_stream: vLiteral(\"auto_create\", \"strict_error\") })),\n validation: vOptional(\n vObject({\n sprint_release_format: vLiteral(\"warn\", \"strict_error\"),\n parent_reference: vOptional(vLiteral(\"warn\", \"strict_error\")),\n metadata_profile: vOptional(vLiteral(\"core\", \"strict\", \"custom\")),\n metadata_required_fields: vOptional(vArray(vString)),\n lifecycle_stale_blocker_reason_patterns: vOptional(vArray(vString)),\n lifecycle_closure_like_blocked_reason_patterns: vOptional(vArray(vString)),\n lifecycle_closure_like_resolution_patterns: vOptional(vArray(vString)),\n lifecycle_closure_like_actual_result_patterns: vOptional(vArray(vString)),\n }),\n ),\n governance: governanceSettings,\n workflow: vOptional(vObject({ definition_of_done: vArray(vString) })),\n testing: vOptional(vObject({ record_results_to_items: vBoolean })),\n telemetry: vOptional(\n vObject({\n enabled: vBoolean,\n first_run_prompt_completed: vOptional(vBoolean),\n capture_level: vOptional(vLiteral(\"minimal\", \"redacted\", \"max\")),\n endpoint: vOptional(vString),\n installation_id: vOptional(vString),\n retention_days: vOptional(vNumber({ int: true, positive: true })),\n }),\n ),\n agent_guidance: vOptional(\n vObject({\n prompt_completed: vOptional(vBoolean),\n declined: vOptional(vBoolean),\n declined_at: vOptional(vString),\n template_version: vOptional(vNumber({ int: true, positive: true })),\n last_checked_files: vOptional(vArray(vString)),\n }),\n ),\n item_types: vOptional(vObject({ definitions: vArray(itemTypeDefinition) })),\n schema: runtimeSchemaSettings,\n context: vOptional(\n vObject({\n default_depth: vOptional(vLiteral(\"brief\", \"standard\", \"deep\")),\n activity_limit: vOptional(vNumber({ int: true, positive: true })),\n stale_threshold_days: vOptional(vNumber({ int: true, positive: true })),\n sections: vOptional(\n vObject({\n hierarchy: vOptional(vBoolean),\n activity: vOptional(vBoolean),\n progress: vOptional(vBoolean),\n blockers: vOptional(vBoolean),\n files: vOptional(vBoolean),\n workload: vOptional(vBoolean),\n staleness: vOptional(vBoolean),\n tests: vOptional(vBoolean),\n }),\n ),\n }),\n ),\n extensions: vObject({\n enabled: vArray(vString),\n disabled: vArray(vString),\n policy: extensionPolicy,\n }),\n search: vObject({\n score_threshold: vNumber(),\n hybrid_semantic_weight: vOptional(vNumber()),\n max_results: vNumber({ int: true }),\n embedding_model: vString,\n embedding_batch_size: vNumber({ int: true }),\n embedding_timeout_ms: vOptional(vNumber({ int: true })),\n scanner_max_batch_retries: vNumber({ int: true }),\n provider: vOptional(vString),\n mutation_refresh_policy: vOptional(vLiteral(\"cache_only\", \"semantic_configured\", \"semantic_auto\")),\n }),\n providers: vObject({\n openai: vObject({ base_url: vString, api_key: vString, model: vString }),\n ollama: vObject({ base_url: vString, model: vString }),\n }),\n vector_store: vObject({\n adapter: vOptional(vString),\n qdrant: vObject({ url: vString, api_key: vString }),\n lancedb: vObject({ path: vString }),\n }),\n});\n\n/** Validate raw settings, returning stripped, type-checked data or failure (matching the legacy zod safeParse). */\nexport function validateSettings(raw: unknown): SettingsValidationResult {\n const result = settingsCheck(raw);\n if (!result.ok) {\n return { success: false };\n }\n return { success: true, data: result.value as unknown as ParsedSettings };\n}\n", "import crypto from \"node:crypto\";\n\ntype JsonValue = null | boolean | number | string | JsonValue[] | { [key: string]: JsonValue };\n\nfunction sortObjectKeys(value: unknown): JsonValue {\n if (value === null) return null;\n if (typeof value === \"string\" || typeof value === \"number\" || typeof value === \"boolean\") {\n return value;\n }\n if (typeof value === \"bigint\") {\n return value.toString();\n }\n if (value === undefined) {\n return \"undefined\";\n }\n if (typeof value === \"symbol\") {\n return value.toString();\n }\n if (typeof value === \"function\") {\n return `[function:${value.name || \"anonymous\"}]`;\n }\n if (Array.isArray(value)) {\n return value.map((entry) => sortObjectKeys(entry));\n }\n if (value instanceof Date) {\n return value.toISOString();\n }\n const maybeJson = value as { toJSON?: () => unknown };\n if (typeof maybeJson.toJSON === \"function\") {\n const normalized = maybeJson.toJSON();\n if (normalized !== value) {\n return sortObjectKeys(normalized);\n }\n }\n const obj = value as Record<string, unknown>;\n const sortedKeys = Object.keys(obj).sort((a, b) => a.localeCompare(b));\n const result: Record<string, JsonValue> = {};\n for (const key of sortedKeys) {\n const nested = obj[key];\n if (nested === undefined) {\n continue;\n }\n result[key] = sortObjectKeys(nested);\n }\n return result;\n}\n\nexport function stableStringify(value: unknown): string {\n return JSON.stringify(sortObjectKeys(value));\n}\n\nexport function sha256Hex(value: string): string {\n return crypto.createHash(\"sha256\").update(value, \"utf8\").digest(\"hex\");\n}\n\nexport function orderObject<T extends Record<string, unknown>>(\n value: T,\n keyOrder: ReadonlyArray<string>,\n): Record<string, unknown> {\n const ordered: Record<string, unknown> = {};\n\n for (const key of keyOrder) {\n const entry = value[key];\n if (entry !== undefined) {\n ordered[key] = entry;\n }\n }\n\n const unknownKeys = Object.keys(value)\n .filter((key) => !keyOrder.includes(key))\n .sort((a, b) => a.localeCompare(b));\n\n for (const key of unknownKeys) {\n const entry = value[key];\n if (entry !== undefined) {\n ordered[key] = entry;\n }\n }\n\n return ordered;\n}\n", "import { validateSettings, type ParsedSettings } from \"./settings-validator.js\";\nimport { runActiveOnReadHooks, runActiveOnWriteHooks } from \"../extensions/index.js\";\nimport { GOVERNANCE_PRESET_DEFAULTS, SETTINGS_DEFAULTS } from \"../shared/constants.js\";\nimport { readFileIfExists, writeFileAtomic } from \"../fs/fs-utils.js\";\nimport {\n ensureRuntimeSchemaFileScaffold,\n loadRuntimeSchemaFromOptionalFiles,\n normalizeRuntimeSchemaSettings,\n} from \"../schema/runtime-schema.js\";\nimport { getSettingsPath } from \"./paths.js\";\nimport { orderObject } from \"../shared/serialization.js\";\nimport { normalizeItemTypeDefinition } from \"../item/item-type-definition.js\";\nimport type {\n ExtensionSandboxProfile,\n ExtensionPolicyMode,\n ExtensionPolicyOverrideSettings,\n ExtensionPolicySettings,\n ExtensionTrustMode,\n GovernanceSettings,\n ItemTypeDefinition,\n PmSettings,\n GovernancePreset,\n SearchMutationRefreshPolicy,\n ValidateMetadataRequiredField,\n} from \"../../types/index.js\";\n\nconst SETTINGS_WRITE_OP = \"settings:write\";\n\nexport interface SettingsReadMetadata {\n has_explicit_item_format: boolean;\n}\n\nexport interface SettingsReadResult {\n settings: PmSettings;\n metadata: SettingsReadMetadata;\n warnings: string[];\n}\n\nfunction resolveGovernanceKnobsFromPreset(preset: Exclude<GovernancePreset, \"custom\">): Omit<GovernanceSettings, \"preset\"> {\n return structuredClone(GOVERNANCE_PRESET_DEFAULTS[preset]);\n}\n\nfunction normalizeGovernancePreset(value: GovernancePreset | undefined): GovernancePreset {\n if (value === \"minimal\" || value === \"default\" || value === \"strict\" || value === \"custom\") {\n return value;\n }\n return SETTINGS_DEFAULTS.governance.preset;\n}\n\nfunction normalizeGovernanceForPersist(governance: GovernanceSettings): Partial<GovernanceSettings> & { preset: GovernancePreset } {\n if (governance.preset === \"custom\") {\n return {\n preset: \"custom\",\n ownership_enforcement: governance.ownership_enforcement,\n create_mode_default: governance.create_mode_default,\n close_validation_default: governance.close_validation_default,\n parent_reference: governance.parent_reference,\n metadata_profile: governance.metadata_profile,\n force_required_for_stale_lock: governance.force_required_for_stale_lock,\n };\n }\n return {\n preset: governance.preset,\n };\n}\n\nexport function resolveGovernanceKnobs(\n settings: Pick<PmSettings, \"governance\"> | { governance?: Partial<GovernanceSettings> },\n): GovernanceSettings {\n const rawGovernance = settings.governance ?? {};\n const preset = normalizeGovernancePreset(rawGovernance.preset);\n if (preset === \"custom\") {\n const baseline = resolveGovernanceKnobsFromPreset(\"default\");\n return {\n preset,\n ownership_enforcement: rawGovernance.ownership_enforcement ?? baseline.ownership_enforcement,\n create_mode_default: rawGovernance.create_mode_default ?? baseline.create_mode_default,\n close_validation_default: rawGovernance.close_validation_default ?? baseline.close_validation_default,\n parent_reference: rawGovernance.parent_reference ?? baseline.parent_reference,\n metadata_profile: rawGovernance.metadata_profile ?? baseline.metadata_profile,\n force_required_for_stale_lock: rawGovernance.force_required_for_stale_lock ?? baseline.force_required_for_stale_lock,\n };\n }\n return {\n preset,\n ...resolveGovernanceKnobsFromPreset(preset),\n };\n}\n\nfunction cloneDefaults(): PmSettings {\n return structuredClone(SETTINGS_DEFAULTS);\n}\n\nfunction normalizeSearchMutationRefreshPolicy(value: unknown): SearchMutationRefreshPolicy {\n if (value === \"cache_only\" || value === \"semantic_configured\" || value === \"semantic_auto\") {\n return value;\n }\n return SETTINGS_DEFAULTS.search.mutation_refresh_policy;\n}\n\nfunction buildFallbackSettingsReadResult(warning?: string): SettingsReadResult {\n return {\n settings: cloneDefaults(),\n metadata: {\n has_explicit_item_format: false,\n },\n warnings: warning ? [warning] : [],\n };\n}\n\nfunction hasExplicitItemFormat(raw: unknown): boolean {\n if (typeof raw !== \"object\" || raw === null || Array.isArray(raw)) {\n return false;\n }\n const itemFormat = (raw as Record<string, unknown>).item_format;\n return itemFormat === \"toon\" || itemFormat === \"json_markdown\";\n}\n\nfunction normalizeStringList(values: string[] | undefined): string[] {\n return [...new Set((values ?? []).map((value) => value.trim()).filter((value) => value.length > 0))].sort((left, right) =>\n left.localeCompare(right),\n );\n}\n\nfunction normalizeAgentGuidanceSettings(\n value: Partial<PmSettings[\"agent_guidance\"]> | undefined,\n): PmSettings[\"agent_guidance\"] {\n const defaults = SETTINGS_DEFAULTS.agent_guidance;\n const templateVersion = value?.template_version;\n return {\n prompt_completed: value?.prompt_completed === true,\n declined: value?.declined === true,\n declined_at: typeof value?.declined_at === \"string\" ? value.declined_at : defaults.declined_at,\n template_version:\n typeof templateVersion === \"number\" && Number.isInteger(templateVersion) && templateVersion > 0\n ? templateVersion\n : defaults.template_version,\n last_checked_files: normalizeStringList(value?.last_checked_files ?? defaults.last_checked_files),\n };\n}\n\nfunction normalizeLowerStringList(values: string[] | undefined): string[] {\n return [...new Set((values ?? []).map((value) => value.trim().toLowerCase()).filter((value) => value.length > 0))].sort(\n (left, right) => left.localeCompare(right),\n );\n}\n\nfunction normalizeExtensionPolicyMode(value: ExtensionPolicyMode | undefined): ExtensionPolicyMode {\n if (value === \"off\" || value === \"warn\" || value === \"enforce\") {\n return value;\n }\n return SETTINGS_DEFAULTS.extensions.policy.mode;\n}\n\nfunction normalizeExtensionTrustMode(value: ExtensionTrustMode | undefined): ExtensionTrustMode {\n if (value === \"off\" || value === \"warn\" || value === \"enforce\") {\n return value;\n }\n return SETTINGS_DEFAULTS.extensions.policy.trust_mode;\n}\n\nfunction normalizeExtensionSandboxProfile(value: ExtensionSandboxProfile | undefined): ExtensionSandboxProfile {\n if (value === \"none\" || value === \"restricted\" || value === \"strict\") {\n return value;\n }\n return SETTINGS_DEFAULTS.extensions.policy.default_sandbox_profile;\n}\n\nfunction normalizeExtensionPolicyOverride(\n override: ExtensionPolicyOverrideSettings,\n): ExtensionPolicyOverrideSettings | null {\n const name = override.name.trim().toLowerCase();\n if (name.length === 0) {\n return null;\n }\n const normalized: ExtensionPolicyOverrideSettings = {\n name,\n };\n if (override.disabled === true) {\n normalized.disabled = true;\n }\n if (override.require_trusted === true) {\n normalized.require_trusted = true;\n }\n if (override.require_provenance === true) {\n normalized.require_provenance = true;\n }\n if (override.sandbox_profile !== undefined) {\n normalized.sandbox_profile = normalizeExtensionSandboxProfile(override.sandbox_profile);\n }\n const allowedCapabilities = normalizeLowerStringList(override.allowed_capabilities);\n const blockedCapabilities = normalizeLowerStringList(override.blocked_capabilities);\n const allowedSurfaces = normalizeLowerStringList(override.allowed_surfaces);\n const blockedSurfaces = normalizeLowerStringList(override.blocked_surfaces);\n const allowedCommands = normalizeLowerStringList(override.allowed_commands);\n const blockedCommands = normalizeLowerStringList(override.blocked_commands);\n const allowedActions = normalizeLowerStringList(override.allowed_actions);\n const blockedActions = normalizeLowerStringList(override.blocked_actions);\n const allowedServices = normalizeLowerStringList(override.allowed_services);\n const blockedServices = normalizeLowerStringList(override.blocked_services);\n if (allowedCapabilities.length > 0) {\n normalized.allowed_capabilities = allowedCapabilities;\n }\n if (blockedCapabilities.length > 0) {\n normalized.blocked_capabilities = blockedCapabilities;\n }\n if (allowedSurfaces.length > 0) {\n normalized.allowed_surfaces = allowedSurfaces;\n }\n if (blockedSurfaces.length > 0) {\n normalized.blocked_surfaces = blockedSurfaces;\n }\n if (allowedCommands.length > 0) {\n normalized.allowed_commands = allowedCommands;\n }\n if (blockedCommands.length > 0) {\n normalized.blocked_commands = blockedCommands;\n }\n if (allowedActions.length > 0) {\n normalized.allowed_actions = allowedActions;\n }\n if (blockedActions.length > 0) {\n normalized.blocked_actions = blockedActions;\n }\n if (allowedServices.length > 0) {\n normalized.allowed_services = allowedServices;\n }\n if (blockedServices.length > 0) {\n normalized.blocked_services = blockedServices;\n }\n return normalized;\n}\n\nfunction normalizeExtensionPolicyOverrides(\n overrides: ExtensionPolicyOverrideSettings[] | undefined,\n): ExtensionPolicyOverrideSettings[] {\n const dedupedByName = new Map<string, ExtensionPolicyOverrideSettings>();\n for (const override of overrides ?? []) {\n const normalized = normalizeExtensionPolicyOverride(override);\n if (!normalized) {\n continue;\n }\n dedupedByName.set(normalized.name, normalized);\n }\n return [...dedupedByName.values()].sort((left, right) => left.name.localeCompare(right.name));\n}\n\nfunction normalizeExtensionPolicySettings(policy: Partial<ExtensionPolicySettings> | undefined): ExtensionPolicySettings {\n const defaults = SETTINGS_DEFAULTS.extensions.policy;\n return {\n mode: normalizeExtensionPolicyMode(policy?.mode),\n trust_mode: normalizeExtensionTrustMode(policy?.trust_mode),\n require_provenance: policy?.require_provenance === true,\n trusted_extensions: normalizeLowerStringList(policy?.trusted_extensions ?? defaults.trusted_extensions),\n default_sandbox_profile: normalizeExtensionSandboxProfile(policy?.default_sandbox_profile),\n allowed_extensions: normalizeLowerStringList(policy?.allowed_extensions ?? defaults.allowed_extensions),\n blocked_extensions: normalizeLowerStringList(policy?.blocked_extensions ?? defaults.blocked_extensions),\n allowed_capabilities: normalizeLowerStringList(policy?.allowed_capabilities ?? defaults.allowed_capabilities),\n blocked_capabilities: normalizeLowerStringList(policy?.blocked_capabilities ?? defaults.blocked_capabilities),\n allowed_surfaces: normalizeLowerStringList(policy?.allowed_surfaces ?? defaults.allowed_surfaces),\n blocked_surfaces: normalizeLowerStringList(policy?.blocked_surfaces ?? defaults.blocked_surfaces),\n allowed_commands: normalizeLowerStringList(policy?.allowed_commands ?? defaults.allowed_commands),\n blocked_commands: normalizeLowerStringList(policy?.blocked_commands ?? defaults.blocked_commands),\n allowed_actions: normalizeLowerStringList(policy?.allowed_actions ?? defaults.allowed_actions),\n blocked_actions: normalizeLowerStringList(policy?.blocked_actions ?? defaults.blocked_actions),\n allowed_services: normalizeLowerStringList(policy?.allowed_services ?? defaults.allowed_services),\n blocked_services: normalizeLowerStringList(policy?.blocked_services ?? defaults.blocked_services),\n extension_overrides: normalizeExtensionPolicyOverrides(policy?.extension_overrides ?? defaults.extension_overrides),\n };\n}\n\nfunction normalizeValidationMetadataRequiredFields(values: string[] | undefined): ValidateMetadataRequiredField[] {\n const normalized = [...new Set((values ?? []).map((value) => value.trim().toLowerCase().replaceAll(\"-\", \"_\")))]\n .filter((value) => value.length > 0)\n .sort((left, right) => left.localeCompare(right));\n return normalized.filter((value): value is ValidateMetadataRequiredField =>\n [\n \"author\",\n \"acceptance_criteria\",\n \"estimated_minutes\",\n \"close_reason\",\n \"reviewer\",\n \"risk\",\n \"confidence\",\n \"sprint\",\n \"release\",\n ].includes(value),\n );\n}\n\nfunction normalizeValidationPatternList(values: string[] | undefined): string[] {\n return [...new Set((values ?? []).map((value) => value.trim().toLowerCase()).filter((value) => value.length > 0))].sort(\n (left, right) => left.localeCompare(right),\n );\n}\n\nexport function normalizeItemTypeDefinitions(definitions: ItemTypeDefinition[] | undefined): ItemTypeDefinition[] {\n const normalized = (definitions ?? [])\n .map((definition) => normalizeItemTypeDefinition(definition))\n .filter((definition): definition is ItemTypeDefinition => definition !== null);\n const dedupedByName = new Map<string, ItemTypeDefinition>();\n for (const definition of normalized) {\n dedupedByName.set(definition.name.toLowerCase(), definition);\n }\n return [...dedupedByName.values()].sort((left, right) => left.name.localeCompare(right.name));\n}\n\nfunction mergeSettings(settings: ParsedSettings): PmSettings {\n const defaults = cloneDefaults();\n const governance = resolveGovernanceKnobs({\n governance: settings.governance ?? { preset: \"default\" },\n });\n return {\n ...defaults,\n ...settings,\n item_format: settings.item_format === \"json_markdown\" ? \"toon\" : (settings.item_format ?? defaults.item_format),\n locks: { ...defaults.locks, ...settings.locks },\n output: { ...defaults.output, ...settings.output },\n history: { ...defaults.history, ...(settings.history ?? {}) },\n validation: {\n ...defaults.validation,\n ...(settings.validation ?? {}),\n parent_reference: governance.parent_reference,\n metadata_profile: governance.metadata_profile,\n metadata_required_fields: normalizeValidationMetadataRequiredFields(settings.validation?.metadata_required_fields),\n lifecycle_stale_blocker_reason_patterns: normalizeValidationPatternList(\n settings.validation?.lifecycle_stale_blocker_reason_patterns ??\n defaults.validation.lifecycle_stale_blocker_reason_patterns,\n ),\n lifecycle_closure_like_blocked_reason_patterns: normalizeValidationPatternList(\n settings.validation?.lifecycle_closure_like_blocked_reason_patterns ??\n defaults.validation.lifecycle_closure_like_blocked_reason_patterns,\n ),\n lifecycle_closure_like_resolution_patterns: normalizeValidationPatternList(\n settings.validation?.lifecycle_closure_like_resolution_patterns ??\n defaults.validation.lifecycle_closure_like_resolution_patterns,\n ),\n lifecycle_closure_like_actual_result_patterns: normalizeValidationPatternList(\n settings.validation?.lifecycle_closure_like_actual_result_patterns ??\n defaults.validation.lifecycle_closure_like_actual_result_patterns,\n ),\n },\n governance,\n workflow: {\n definition_of_done: [...(settings.workflow?.definition_of_done ?? defaults.workflow.definition_of_done)],\n },\n testing: {\n record_results_to_items: settings.testing?.record_results_to_items ?? defaults.testing.record_results_to_items,\n },\n telemetry: {\n enabled: settings.telemetry?.enabled ?? defaults.telemetry.enabled,\n first_run_prompt_completed:\n settings.telemetry?.first_run_prompt_completed ?? defaults.telemetry.first_run_prompt_completed,\n capture_level: settings.telemetry?.capture_level ?? defaults.telemetry.capture_level,\n endpoint: settings.telemetry?.endpoint ?? defaults.telemetry.endpoint,\n installation_id: settings.telemetry?.installation_id ?? defaults.telemetry.installation_id,\n retention_days: settings.telemetry?.retention_days ?? defaults.telemetry.retention_days,\n },\n agent_guidance: normalizeAgentGuidanceSettings(settings.agent_guidance ?? defaults.agent_guidance),\n item_types: {\n definitions: normalizeItemTypeDefinitions(settings.item_types?.definitions),\n },\n schema: normalizeRuntimeSchemaSettings(settings.schema ?? defaults.schema),\n context: {\n default_depth: settings.context?.default_depth ?? defaults.context.default_depth,\n activity_limit: settings.context?.activity_limit ?? defaults.context.activity_limit,\n stale_threshold_days: settings.context?.stale_threshold_days ?? defaults.context.stale_threshold_days,\n sections: {\n ...defaults.context.sections,\n ...(settings.context?.sections ?? {}),\n },\n },\n extensions: {\n enabled: [...settings.extensions.enabled],\n disabled: [...settings.extensions.disabled],\n policy: normalizeExtensionPolicySettings(settings.extensions.policy ?? defaults.extensions.policy),\n },\n search: {\n ...defaults.search,\n ...settings.search,\n mutation_refresh_policy: normalizeSearchMutationRefreshPolicy(settings.search?.mutation_refresh_policy),\n },\n providers: {\n openai: { ...defaults.providers.openai, ...settings.providers.openai },\n ollama: { ...defaults.providers.ollama, ...settings.providers.ollama },\n },\n vector_store: {\n adapter: settings.vector_store.adapter ?? defaults.vector_store.adapter,\n qdrant: { ...defaults.vector_store.qdrant, ...settings.vector_store.qdrant },\n lancedb: { ...defaults.vector_store.lancedb, ...settings.vector_store.lancedb },\n },\n };\n}\n\nexport function serializeSettings(settings: PmSettings): string {\n const governance = resolveGovernanceKnobs(settings);\n const normalizedSettings: PmSettings = {\n ...settings,\n item_format: \"toon\",\n validation: {\n ...settings.validation,\n parent_reference: governance.parent_reference,\n metadata_profile: governance.metadata_profile,\n metadata_required_fields: normalizeValidationMetadataRequiredFields(settings.validation?.metadata_required_fields),\n lifecycle_stale_blocker_reason_patterns: normalizeValidationPatternList(\n settings.validation?.lifecycle_stale_blocker_reason_patterns ??\n SETTINGS_DEFAULTS.validation.lifecycle_stale_blocker_reason_patterns,\n ),\n lifecycle_closure_like_blocked_reason_patterns: normalizeValidationPatternList(\n settings.validation?.lifecycle_closure_like_blocked_reason_patterns ??\n SETTINGS_DEFAULTS.validation.lifecycle_closure_like_blocked_reason_patterns,\n ),\n lifecycle_closure_like_resolution_patterns: normalizeValidationPatternList(\n settings.validation?.lifecycle_closure_like_resolution_patterns ??\n SETTINGS_DEFAULTS.validation.lifecycle_closure_like_resolution_patterns,\n ),\n lifecycle_closure_like_actual_result_patterns: normalizeValidationPatternList(\n settings.validation?.lifecycle_closure_like_actual_result_patterns ??\n SETTINGS_DEFAULTS.validation.lifecycle_closure_like_actual_result_patterns,\n ),\n },\n governance,\n agent_guidance: normalizeAgentGuidanceSettings(settings.agent_guidance),\n item_types: {\n definitions: normalizeItemTypeDefinitions(settings.item_types?.definitions),\n },\n schema: normalizeRuntimeSchemaSettings(settings.schema),\n search: {\n ...SETTINGS_DEFAULTS.search,\n ...settings.search,\n mutation_refresh_policy: normalizeSearchMutationRefreshPolicy(settings.search?.mutation_refresh_policy),\n },\n context: {\n default_depth: settings.context?.default_depth ?? SETTINGS_DEFAULTS.context.default_depth,\n activity_limit: settings.context?.activity_limit ?? SETTINGS_DEFAULTS.context.activity_limit,\n stale_threshold_days: settings.context?.stale_threshold_days ?? SETTINGS_DEFAULTS.context.stale_threshold_days,\n sections: {\n ...SETTINGS_DEFAULTS.context.sections,\n ...(settings.context?.sections ?? {}),\n },\n },\n extensions: {\n enabled: normalizeStringList(settings.extensions?.enabled),\n disabled: normalizeStringList(settings.extensions?.disabled),\n policy: normalizeExtensionPolicySettings(settings.extensions?.policy),\n },\n };\n const ordered = orderObject(\n {\n ...(normalizedSettings as unknown as Record<string, unknown>),\n governance: normalizeGovernanceForPersist(governance) as unknown,\n },\n [\n \"version\",\n \"id_prefix\",\n \"author_default\",\n \"item_format\",\n \"locks\",\n \"output\",\n \"history\",\n \"validation\",\n \"governance\",\n \"workflow\",\n \"testing\",\n \"telemetry\",\n \"agent_guidance\",\n \"item_types\",\n \"schema\",\n \"context\",\n \"extensions\",\n \"search\",\n \"providers\",\n \"vector_store\",\n ],\n );\n\n ordered.locks = orderObject(ordered.locks as Record<string, unknown>, [\"ttl_seconds\"]);\n ordered.output = orderObject(ordered.output as Record<string, unknown>, [\"default_format\"]);\n ordered.history = orderObject(ordered.history as Record<string, unknown>, [\"missing_stream\"]);\n ordered.validation = orderObject(ordered.validation as Record<string, unknown>, [\n \"sprint_release_format\",\n \"parent_reference\",\n \"metadata_profile\",\n \"metadata_required_fields\",\n \"lifecycle_stale_blocker_reason_patterns\",\n \"lifecycle_closure_like_blocked_reason_patterns\",\n \"lifecycle_closure_like_resolution_patterns\",\n \"lifecycle_closure_like_actual_result_patterns\",\n ]);\n ordered.governance = orderObject(ordered.governance as Record<string, unknown>, [\n \"preset\",\n \"ownership_enforcement\",\n \"create_mode_default\",\n \"close_validation_default\",\n \"parent_reference\",\n \"metadata_profile\",\n \"force_required_for_stale_lock\",\n ]);\n ordered.workflow = orderObject(ordered.workflow as Record<string, unknown>, [\"definition_of_done\"]);\n ordered.testing = orderObject(ordered.testing as Record<string, unknown>, [\"record_results_to_items\"]);\n ordered.telemetry = orderObject(ordered.telemetry as Record<string, unknown>, [\n \"enabled\",\n \"first_run_prompt_completed\",\n \"capture_level\",\n \"endpoint\",\n \"installation_id\",\n \"retention_days\",\n ]);\n ordered.agent_guidance = orderObject(ordered.agent_guidance as Record<string, unknown>, [\n \"prompt_completed\",\n \"declined\",\n \"declined_at\",\n \"template_version\",\n \"last_checked_files\",\n ]);\n ordered.item_types = orderObject(ordered.item_types as Record<string, unknown>, [\"definitions\"]);\n ordered.schema = orderObject(ordered.schema as Record<string, unknown>, [\n \"version\",\n \"files\",\n \"statuses\",\n \"fields\",\n \"workflow\",\n \"unknown_field_policy\",\n ]);\n (ordered.schema as Record<string, unknown>).files = orderObject(\n ((ordered.schema as Record<string, unknown>).files ?? {}) as Record<string, unknown>,\n [\"types\", \"statuses\", \"fields\", \"workflows\"],\n );\n (ordered.schema as Record<string, unknown>).workflow = orderObject(\n ((ordered.schema as Record<string, unknown>).workflow ?? {}) as Record<string, unknown>,\n [\"draft_status\", \"open_status\", \"in_progress_status\", \"blocked_status\", \"close_status\", \"canceled_status\"],\n );\n ordered.context = orderObject(ordered.context as Record<string, unknown>, [\n \"default_depth\",\n \"activity_limit\",\n \"stale_threshold_days\",\n \"sections\",\n ]);\n (ordered.context as Record<string, unknown>).sections = orderObject(\n ((ordered.context as Record<string, unknown>).sections ?? {}) as Record<string, unknown>,\n [\"hierarchy\", \"activity\", \"progress\", \"blockers\", \"files\", \"workload\", \"staleness\", \"tests\"],\n );\n ordered.extensions = orderObject(ordered.extensions as Record<string, unknown>, [\"enabled\", \"disabled\", \"policy\"]);\n (ordered.extensions as Record<string, unknown>).policy = orderObject(\n (((ordered.extensions as Record<string, unknown>).policy ?? {}) as Record<string, unknown>),\n [\n \"mode\",\n \"trust_mode\",\n \"require_provenance\",\n \"trusted_extensions\",\n \"default_sandbox_profile\",\n \"allowed_extensions\",\n \"blocked_extensions\",\n \"allowed_capabilities\",\n \"blocked_capabilities\",\n \"allowed_surfaces\",\n \"blocked_surfaces\",\n \"allowed_commands\",\n \"blocked_commands\",\n \"allowed_actions\",\n \"blocked_actions\",\n \"allowed_services\",\n \"blocked_services\",\n \"extension_overrides\",\n ],\n );\n ((ordered.extensions as Record<string, unknown>).policy as Record<string, unknown>).extension_overrides = (\n (((ordered.extensions as Record<string, unknown>).policy as Record<string, unknown>).extension_overrides ?? []) as unknown[]\n ).map((entry) =>\n orderObject((entry ?? {}) as Record<string, unknown>, [\n \"name\",\n \"disabled\",\n \"require_trusted\",\n \"require_provenance\",\n \"sandbox_profile\",\n \"allowed_capabilities\",\n \"blocked_capabilities\",\n \"allowed_surfaces\",\n \"blocked_surfaces\",\n \"allowed_commands\",\n \"blocked_commands\",\n \"allowed_actions\",\n \"blocked_actions\",\n \"allowed_services\",\n \"blocked_services\",\n ]),\n );\n ordered.search = orderObject(ordered.search as Record<string, unknown>, [\n \"score_threshold\",\n \"hybrid_semantic_weight\",\n \"max_results\",\n \"embedding_model\",\n \"embedding_batch_size\",\n \"embedding_timeout_ms\",\n \"scanner_max_batch_retries\",\n \"provider\",\n \"mutation_refresh_policy\",\n ]);\n ordered.providers = orderObject(ordered.providers as Record<string, unknown>, [\"openai\", \"ollama\"]);\n (ordered.providers as Record<string, unknown>).openai = orderObject(\n ((ordered.providers as Record<string, unknown>).openai ?? {}) as Record<string, unknown>,\n [\"base_url\", \"api_key\", \"model\"],\n );\n (ordered.providers as Record<string, unknown>).ollama = orderObject(\n ((ordered.providers as Record<string, unknown>).ollama ?? {}) as Record<string, unknown>,\n [\"base_url\", \"model\"],\n );\n ordered.vector_store = orderObject(ordered.vector_store as Record<string, unknown>, [\"adapter\", \"qdrant\", \"lancedb\"]);\n (ordered.vector_store as Record<string, unknown>).qdrant = orderObject(\n ((ordered.vector_store as Record<string, unknown>).qdrant ?? {}) as Record<string, unknown>,\n [\"url\", \"api_key\"],\n );\n (ordered.vector_store as Record<string, unknown>).lancedb = orderObject(\n ((ordered.vector_store as Record<string, unknown>).lancedb ?? {}) as Record<string, unknown>,\n [\"path\"],\n );\n\n return `${JSON.stringify(ordered, null, 2)}\\n`;\n}\n\nexport async function readSettingsWithMetadata(pmRoot: string): Promise<SettingsReadResult> {\n const settingsPath = getSettingsPath(pmRoot);\n const raw = await readFileIfExists(settingsPath);\n if (raw === null) {\n return buildFallbackSettingsReadResult();\n }\n await runActiveOnReadHooks({\n path: settingsPath,\n scope: \"project\",\n });\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw) as unknown;\n } catch {\n return buildFallbackSettingsReadResult(\"settings_read_invalid_json\");\n }\n\n const validated = validateSettings(parsed);\n if (!validated.success) {\n return buildFallbackSettingsReadResult(\"settings_read_invalid_schema\");\n }\n\n try {\n const mergedSettings = mergeSettings(validated.data);\n const schemaScaffold = await ensureRuntimeSchemaFileScaffold(pmRoot, mergedSettings.schema);\n const loadedSchemaSections = await loadRuntimeSchemaFromOptionalFiles(pmRoot, mergedSettings.schema);\n const settings = {\n ...mergedSettings,\n item_types: {\n definitions: normalizeItemTypeDefinitions([\n ...mergedSettings.item_types.definitions,\n ...(loadedSchemaSections.type_definitions_from_file ?? []),\n ]),\n },\n schema: loadedSchemaSections.schema,\n };\n return {\n settings,\n metadata: {\n has_explicit_item_format: hasExplicitItemFormat(parsed),\n },\n warnings: [\n ...(validated.data.item_format === \"json_markdown\"\n ? [\"settings_item_format_legacy_json_markdown_coerced_to_toon\"]\n : []),\n ...schemaScaffold.created_paths.map((createdPath) => `runtime_schema_bootstrap_created:${createdPath}`),\n ...loadedSchemaSections.warnings,\n ],\n };\n } catch {\n return buildFallbackSettingsReadResult(\"settings_read_merge_failed\");\n }\n}\n\nexport async function readSettings(pmRoot: string): Promise<PmSettings> {\n return (await readSettingsWithMetadata(pmRoot)).settings;\n}\n\nexport async function writeSettings(pmRoot: string, settings: PmSettings, op = SETTINGS_WRITE_OP): Promise<void> {\n const settingsPath = getSettingsPath(pmRoot);\n await writeFileAtomic(settingsPath, serializeSettings(settings));\n await runActiveOnWriteHooks({\n path: settingsPath,\n scope: \"project\",\n op,\n });\n}\n", "import { STATUS_VALUES } from \"../../types/index.js\";\nimport type { ItemStatus } from \"../../types/index.js\";\nimport { normalizeStatusInputWithRegistry, type RuntimeStatusRegistry } from \"../schema/runtime-schema.js\";\n\nconst STATUS_ALIAS_MAP: Readonly<Record<string, ItemStatus>> = {\n \"in-progress\": \"in_progress\",\n cancelled: \"canceled\",\n};\n\nexport function normalizeStatusInput(value: unknown, registry?: RuntimeStatusRegistry): ItemStatus | undefined {\n if (registry) {\n const normalizedFromRegistry = normalizeStatusInputWithRegistry(value, registry);\n if (normalizedFromRegistry) {\n return normalizedFromRegistry;\n }\n }\n if (typeof value !== \"string\") {\n return undefined;\n }\n const normalized = value.trim().toLowerCase();\n if (!normalized) {\n return undefined;\n }\n const canonical = STATUS_ALIAS_MAP[normalized] ?? normalized;\n if (!(STATUS_VALUES as readonly string[]).includes(canonical)) {\n return undefined;\n }\n return canonical as ItemStatus;\n}\n\n/**\n * Normalize a status against the runtime registry, falling back to the original\n * value when normalization does not resolve to a known status. This preserves\n * the long-standing `normalizeStatusInput(status, registry) ?? status` pattern\n * used by query commands so that unknown/custom statuses still compare against\n * registry sets by their raw value.\n */\nexport function normalizeStatusForRegistry(status: ItemStatus, registry: RuntimeStatusRegistry): ItemStatus {\n return normalizeStatusInput(status, registry) ?? status;\n}\n\n/**\n * Determine whether a status is terminal according to the runtime status\n * registry, applying registry-aware normalization first (with raw fallback).\n */\nexport function isTerminalStatus(status: ItemStatus, registry: RuntimeStatusRegistry): boolean {\n return registry.terminal_statuses.has(normalizeStatusForRegistry(status, registry));\n}\n", "import type { CommanderOptionAliasContract, CommanderOptionRegistrationContract } from \"./commander-types.js\";\n\nexport const CREATE_COMMANDER_OPTION_REGISTRATION_CONTRACTS: CommanderOptionRegistrationContract[] = [\n {\n target: \"title\",\n keys: [\"title\"],\n option: \"--title, -t <value>\",\n description: \"Item title [required] (or pass title as the first positional argument)\",\n },\n {\n target: \"description\",\n keys: [\"description\"],\n option: \"--description, -d <value>\",\n description: \"Item description (allow empty string)\",\n },\n { target: \"type\", keys: [\"type\"], option: \"--type <value>\", description: \"Item type (built-ins plus any configured custom types)\" },\n { target: \"template\", keys: [\"template\"], option: \"--template <value>\", description: \"Apply named create template defaults before explicit flags\" },\n {\n target: \"createMode\",\n keys: [\"createMode\", \"create_mode\"],\n option: \"--create-mode <value>\",\n description: \"Create required-option policy mode: strict|progressive\",\n aliasOptions: [{ option: \"--create_mode <value>\", description: \"Alias for --create-mode\" }],\n },\n {\n target: \"schedulePreset\",\n keys: [\"schedulePreset\", \"schedule_preset\"],\n option: \"--schedule-preset <value>\",\n description: \"Scheduling preset for Reminder|Meeting|Event: lightweight\",\n aliasOptions: [{ option: \"--schedule_preset <value>\", description: \"Alias for --schedule-preset\" }],\n },\n { target: \"status\", keys: [\"status\"], option: \"--status, -s <value>\", description: \"Item status\" },\n { target: \"priority\", keys: [\"priority\"], option: \"--priority, -p <value>\", description: \"Priority 0..4\" },\n { target: \"tags\", keys: [\"tags\"], option: \"--tags <value>\", description: \"Comma-separated tags\" },\n {\n target: \"addTags\",\n keys: [\"addTags\", \"add_tags\"],\n option: \"--add-tags <value>\",\n description: \"Add tags additively on top of --tags (repeatable; CSV accepted)\",\n repeatable: true,\n aliasOptions: [{ option: \"--add_tags <value>\", description: \"Alias for --add-tags\" }],\n },\n { target: \"body\", keys: [\"body\"], option: \"--body, -b <value>\", description: \"Item markdown body (allow empty string)\" },\n { target: \"deadline\", keys: [\"deadline\"], option: \"--deadline <value>\", description: \"Deadline (ISO/date string or relative +6h/+1d/+2w/+6m)\" },\n {\n target: \"estimatedMinutes\",\n keys: [\"estimate\", \"estimatedMinutes\", \"estimated_minutes\"],\n option: \"--estimate, --estimated-minutes <value>\",\n description: \"Estimated minutes\",\n aliasOptions: [{ option: \"--estimated_minutes <value>\", description: \"Alias for --estimated-minutes\" }],\n },\n {\n target: \"acceptanceCriteria\",\n keys: [\"acceptanceCriteria\", \"acceptance_criteria\", \"ac\"],\n option: \"--acceptance-criteria <value>\",\n description: \"Acceptance criteria (allow empty string)\",\n aliasOptions: [\n { option: \"--acceptance_criteria <value>\", description: \"Alias for --acceptance-criteria\" },\n { option: \"--ac <value>\", description: \"Alias for --acceptance-criteria\" },\n ],\n },\n {\n target: \"definitionOfReady\",\n keys: [\"definitionOfReady\", \"definition_of_ready\"],\n option: \"--definition-of-ready <value>\",\n description: \"Definition of ready (allow empty string)\",\n aliasOptions: [{ option: \"--definition_of_ready <value>\", description: \"Alias for --definition-of-ready\" }],\n },\n { target: \"order\", keys: [\"order\"], option: \"--order <value>\", description: \"Planning order/rank integer\" },\n { target: \"rank\", keys: [\"rank\"], option: \"--rank <value>\", description: \"Alias for --order\" },\n { target: \"goal\", keys: [\"goal\"], option: \"--goal <value>\", description: \"Goal identifier\" },\n { target: \"objective\", keys: [\"objective\"], option: \"--objective <value>\", description: \"Objective identifier\" },\n { target: \"value\", keys: [\"value\"], option: \"--value <value>\", description: \"Business value summary\" },\n { target: \"impact\", keys: [\"impact\"], option: \"--impact <value>\", description: \"Business impact summary\" },\n { target: \"outcome\", keys: [\"outcome\"], option: \"--outcome <value>\", description: \"Expected outcome summary\" },\n {\n target: \"whyNow\",\n keys: [\"whyNow\", \"why_now\"],\n option: \"--why-now <value>\",\n description: \"Why-now rationale\",\n aliasOptions: [{ option: \"--why_now <value>\", description: \"Alias for --why-now\" }],\n },\n { target: \"author\", keys: [\"author\"], option: \"--author <value>\", description: \"Mutation author\" },\n { target: \"message\", keys: [\"message\"], option: \"--message <value>\", description: \"History message (allow empty string)\" },\n { target: \"assignee\", keys: [\"assignee\"], option: \"--assignee <value>\", description: \"Item assignee\" },\n { target: \"parent\", keys: [\"parent\"], option: \"--parent <value>\", description: \"Parent item ID\" },\n { target: \"reviewer\", keys: [\"reviewer\"], option: \"--reviewer <value>\", description: \"Reviewer\" },\n { target: \"risk\", keys: [\"risk\"], option: \"--risk <value>\", description: \"Risk level: low|med|medium|high|critical (med persists as medium)\" },\n {\n target: \"confidence\",\n keys: [\"confidence\"],\n option: \"--confidence <value>\",\n description: \"Confidence level: 0..100|low|med|medium|high (med persists as medium)\",\n },\n { target: \"sprint\", keys: [\"sprint\"], option: \"--sprint <value>\", description: \"Sprint identifier\" },\n { target: \"release\", keys: [\"release\"], option: \"--release <value>\", description: \"Release identifier\" },\n {\n target: \"blockedBy\",\n keys: [\"blockedBy\", \"blocked_by\"],\n option: \"--blocked-by <value>\",\n description: \"Blocked-by item ID or reason\",\n aliasOptions: [{ option: \"--blocked_by <value>\", description: \"Alias for --blocked-by\" }],\n },\n {\n target: \"blockedReason\",\n keys: [\"blockedReason\", \"blocked_reason\"],\n option: \"--blocked-reason <value>\",\n description: \"Blocked reason\",\n aliasOptions: [{ option: \"--blocked_reason <value>\", description: \"Alias for --blocked-reason\" }],\n },\n {\n target: \"unblockNote\",\n keys: [\"unblockNote\", \"unblock_note\"],\n option: \"--unblock-note <value>\",\n description: \"Unblock rationale note\",\n aliasOptions: [{ option: \"--unblock_note <value>\", description: \"Alias for --unblock-note\" }],\n },\n { target: \"reporter\", keys: [\"reporter\"], option: \"--reporter <value>\", description: \"Issue reporter\" },\n {\n target: \"severity\",\n keys: [\"severity\"],\n option: \"--severity <value>\",\n description: \"Issue severity: low|med|medium|high|critical (med persists as medium)\",\n },\n { target: \"environment\", keys: [\"environment\"], option: \"--environment <value>\", description: \"Issue environment context\" },\n {\n target: \"reproSteps\",\n keys: [\"reproSteps\", \"repro_steps\"],\n option: \"--repro-steps <value>\",\n description: \"Issue reproduction steps\",\n aliasOptions: [{ option: \"--repro_steps <value>\", description: \"Alias for --repro-steps\" }],\n },\n { target: \"resolution\", keys: [\"resolution\"], option: \"--resolution <value>\", description: \"Issue resolution summary\" },\n {\n target: \"expectedResult\",\n keys: [\"expectedResult\", \"expected_result\", \"expected\"],\n option: \"--expected-result <value>\",\n description: \"Issue expected behavior\",\n aliasOptions: [\n { option: \"--expected_result <value>\", description: \"Alias for --expected-result\" },\n { option: \"--expected <value>\", description: \"Short alias for --expected-result\" },\n ],\n },\n {\n target: \"actualResult\",\n keys: [\"actualResult\", \"actual_result\", \"actual\"],\n option: \"--actual-result <value>\",\n description: \"Issue observed behavior\",\n aliasOptions: [\n { option: \"--actual_result <value>\", description: \"Alias for --actual-result\" },\n { option: \"--actual <value>\", description: \"Short alias for --actual-result\" },\n ],\n },\n {\n target: \"affectedVersion\",\n keys: [\"affectedVersion\", \"affected_version\"],\n option: \"--affected-version <value>\",\n description: \"Affected version identifier\",\n aliasOptions: [{ option: \"--affected_version <value>\", description: \"Alias for --affected-version\" }],\n },\n {\n target: \"fixedVersion\",\n keys: [\"fixedVersion\", \"fixed_version\"],\n option: \"--fixed-version <value>\",\n description: \"Fixed version identifier\",\n aliasOptions: [{ option: \"--fixed_version <value>\", description: \"Alias for --fixed-version\" }],\n },\n { target: \"component\", keys: [\"component\"], option: \"--component <value>\", description: \"Issue component ownership\" },\n { target: \"regression\", keys: [\"regression\"], option: \"--regression <value>\", description: \"Regression marker: true|false|1|0\" },\n {\n target: \"customerImpact\",\n keys: [\"customerImpact\", \"customer_impact\"],\n option: \"--customer-impact <value>\",\n description: \"Customer impact summary\",\n aliasOptions: [{ option: \"--customer_impact <value>\", description: \"Alias for --customer-impact\" }],\n },\n {\n target: \"dep\",\n keys: [\"dep\"],\n option: \"--dep <value>\",\n description: \"Seed dependency entry (key=value CSV, markdown key:value lines, or - for stdin; repeatable)\",\n repeatable: true,\n },\n {\n target: \"typeOption\",\n keys: [\"typeOption\", \"type_option\"],\n option: \"--type-option <value>\",\n description: \"Type option key=value or key=<name>,value=<value> (also accepts key:value and markdown pairs; use - for stdin; repeatable)\",\n repeatable: true,\n aliasOptions: [{ option: \"--type_option <value>\", description: \"Alias for --type-option\" }],\n },\n {\n target: \"unset\",\n keys: [\"unset\"],\n option: \"--unset <field>\",\n description: \"Clear scalar metadata field by name (repeatable)\",\n repeatable: true,\n },\n {\n target: \"reminder\",\n keys: [\"reminder\"],\n option: \"--reminder <value>\",\n description: \"Seed reminder entry at=<iso|relative>,text=<text> (also accepts markdown pairs and - for stdin; repeatable)\",\n repeatable: true,\n },\n {\n target: \"event\",\n keys: [\"event\"],\n option: \"--event <value>\",\n description: \"Seed event entry start=<iso|relative>,end=<iso|relative>,title=<text>,all_day=<true|false>,recur_* fields (also accepts markdown pairs and - for stdin; repeatable)\",\n repeatable: true,\n },\n {\n target: \"comment\",\n keys: [\"comment\"],\n option: \"--comment <value>\",\n description: \"Seed comment entry (text=<value> CSV/markdown pairs or - for stdin; repeatable)\",\n repeatable: true,\n },\n {\n target: \"note\",\n keys: [\"note\"],\n option: \"--note <value>\",\n description: \"Seed note entry (text=<value> CSV/markdown pairs or - for stdin; repeatable)\",\n repeatable: true,\n },\n {\n target: \"learning\",\n keys: [\"learning\"],\n option: \"--learning <value>\",\n description: \"Seed learning entry (text=<value> CSV/markdown pairs or - for stdin; repeatable)\",\n repeatable: true,\n },\n {\n target: \"file\",\n keys: [\"file\"],\n option: \"--file <value>\",\n description: \"Seed linked file entry (CSV/markdown pairs or - for stdin; repeatable)\",\n repeatable: true,\n },\n {\n target: \"test\",\n keys: [\"test\"],\n option: \"--test <value>\",\n description: \"Seed linked test entry (CSV/markdown pairs or - for stdin; repeatable)\",\n repeatable: true,\n },\n {\n target: \"doc\",\n keys: [\"doc\"],\n option: \"--doc <value>\",\n description: \"Seed linked doc entry (CSV/markdown pairs or - for stdin; repeatable)\",\n repeatable: true,\n },\n];\n\nexport const CREATE_COMMANDER_STRING_OPTION_CONTRACTS: CommanderOptionAliasContract[] = CREATE_COMMANDER_OPTION_REGISTRATION_CONTRACTS\n .filter((entry) => entry.repeatable !== true)\n .map((entry) => ({ target: entry.target, keys: entry.keys }));\n\nexport const CREATE_COMMANDER_REPEATABLE_OPTION_CONTRACTS: CommanderOptionAliasContract[] =\n CREATE_COMMANDER_OPTION_REGISTRATION_CONTRACTS\n .filter((entry) => entry.repeatable === true)\n .map((entry) => ({ target: entry.target, keys: entry.keys }));\n\nexport const UPDATE_COMMANDER_OPTION_REGISTRATION_CONTRACTS: CommanderOptionRegistrationContract[] = [\n { target: \"title\", keys: [\"title\"], option: \"--title, -t <value>\", description: \"Set title\" },\n { target: \"description\", keys: [\"description\"], option: \"--description, -d <value>\", description: \"Set description\" },\n { target: \"body\", keys: [\"body\"], option: \"--body, -b <value>\", description: \"Set body (allow empty string)\" },\n { target: \"status\", keys: [\"status\"], option: \"--status, -s <value>\", description: \"Set status (use close command for closed)\" },\n {\n target: \"closeReason\",\n keys: [\"closeReason\", \"close_reason\"],\n option: \"--close-reason <value>\",\n description: \"Set close reason\",\n aliasOptions: [{ option: \"--close_reason <value>\", description: \"Alias for --close-reason\" }],\n },\n { target: \"priority\", keys: [\"priority\"], option: \"--priority, -p <value>\", description: \"Set priority\" },\n { target: \"type\", keys: [\"type\"], option: \"--type <value>\", description: \"Set type\" },\n { target: \"tags\", keys: [\"tags\"], option: \"--tags <value>\", description: \"Set comma-separated tags (replaces existing). Use --add-tags / --remove-tags to mutate additively.\" },\n {\n target: \"addTags\",\n keys: [\"addTags\", \"add_tags\"],\n option: \"--add-tags <value>\",\n description: \"Add tags to the existing list without replacing it (repeatable; CSV accepted)\",\n repeatable: true,\n aliasOptions: [{ option: \"--add_tags <value>\", description: \"Alias for --add-tags\" }],\n },\n {\n target: \"removeTags\",\n keys: [\"removeTags\", \"remove_tags\"],\n option: \"--remove-tags <value>\",\n description: \"Remove tags from the existing list (repeatable; CSV accepted)\",\n repeatable: true,\n aliasOptions: [{ option: \"--remove_tags <value>\", description: \"Alias for --remove-tags\" }],\n },\n { target: \"deadline\", keys: [\"deadline\"], option: \"--deadline <value>\", description: \"Set deadline (ISO/date string or relative)\" },\n {\n target: \"estimatedMinutes\",\n keys: [\"estimate\", \"estimatedMinutes\", \"estimated_minutes\"],\n option: \"--estimate, --estimated-minutes <value>\",\n description: \"Set estimated minutes\",\n aliasOptions: [{ option: \"--estimated_minutes <value>\", description: \"Alias for --estimated-minutes\" }],\n },\n {\n target: \"acceptanceCriteria\",\n keys: [\"acceptanceCriteria\", \"acceptance_criteria\", \"ac\"],\n option: \"--acceptance-criteria <value>\",\n description: \"Set acceptance criteria\",\n aliasOptions: [\n { option: \"--acceptance_criteria <value>\", description: \"Alias for --acceptance-criteria\" },\n { option: \"--ac <value>\", description: \"Alias for --acceptance-criteria\" },\n ],\n },\n {\n target: \"definitionOfReady\",\n keys: [\"definitionOfReady\", \"definition_of_ready\"],\n option: \"--definition-of-ready <value>\",\n description: \"Set definition of ready\",\n aliasOptions: [{ option: \"--definition_of_ready <value>\", description: \"Alias for --definition-of-ready\" }],\n },\n { target: \"order\", keys: [\"order\"], option: \"--order <value>\", description: \"Set planning order/rank integer\" },\n { target: \"rank\", keys: [\"rank\"], option: \"--rank <value>\", description: \"Alias for --order\" },\n { target: \"goal\", keys: [\"goal\"], option: \"--goal <value>\", description: \"Set goal identifier\" },\n { target: \"objective\", keys: [\"objective\"], option: \"--objective <value>\", description: \"Set objective identifier\" },\n { target: \"value\", keys: [\"value\"], option: \"--value <value>\", description: \"Set business value summary\" },\n { target: \"impact\", keys: [\"impact\"], option: \"--impact <value>\", description: \"Set business impact summary\" },\n { target: \"outcome\", keys: [\"outcome\"], option: \"--outcome <value>\", description: \"Set expected outcome summary\" },\n {\n target: \"whyNow\",\n keys: [\"whyNow\", \"why_now\"],\n option: \"--why-now <value>\",\n description: \"Set why-now rationale\",\n aliasOptions: [{ option: \"--why_now <value>\", description: \"Alias for --why-now\" }],\n },\n { target: \"author\", keys: [\"author\"], option: \"--author <value>\", description: \"Mutation author\" },\n { target: \"message\", keys: [\"message\"], option: \"--message <value>\", description: \"Mutation message\" },\n { target: \"assignee\", keys: [\"assignee\"], option: \"--assignee <value>\", description: \"Set assignee\" },\n { target: \"parent\", keys: [\"parent\"], option: \"--parent <value>\", description: \"Set parent item ID\" },\n { target: \"reviewer\", keys: [\"reviewer\"], option: \"--reviewer <value>\", description: \"Set reviewer\" },\n { target: \"risk\", keys: [\"risk\"], option: \"--risk <value>\", description: \"Set risk level: low|med|medium|high|critical (med persists as medium)\" },\n {\n target: \"confidence\",\n keys: [\"confidence\"],\n option: \"--confidence <value>\",\n description: \"Set confidence level: 0..100|low|med|medium|high (med persists as medium)\",\n },\n { target: \"sprint\", keys: [\"sprint\"], option: \"--sprint <value>\", description: \"Set sprint identifier\" },\n { target: \"release\", keys: [\"release\"], option: \"--release <value>\", description: \"Set release identifier\" },\n {\n target: \"blockedBy\",\n keys: [\"blockedBy\", \"blocked_by\"],\n option: \"--blocked-by <value>\",\n description: \"Set blocked-by item ID or reason\",\n aliasOptions: [{ option: \"--blocked_by <value>\", description: \"Alias for --blocked-by\" }],\n },\n {\n target: \"blockedReason\",\n keys: [\"blockedReason\", \"blocked_reason\"],\n option: \"--blocked-reason <value>\",\n description: \"Set blocked reason\",\n aliasOptions: [{ option: \"--blocked_reason <value>\", description: \"Alias for --blocked-reason\" }],\n },\n {\n target: \"unblockNote\",\n keys: [\"unblockNote\", \"unblock_note\"],\n option: \"--unblock-note <value>\",\n description: \"Set unblock rationale note\",\n aliasOptions: [{ option: \"--unblock_note <value>\", description: \"Alias for --unblock-note\" }],\n },\n { target: \"reporter\", keys: [\"reporter\"], option: \"--reporter <value>\", description: \"Set issue reporter\" },\n {\n target: \"severity\",\n keys: [\"severity\"],\n option: \"--severity <value>\",\n description: \"Set issue severity: low|med|medium|high|critical (med persists as medium)\",\n },\n { target: \"environment\", keys: [\"environment\"], option: \"--environment <value>\", description: \"Set issue environment context\" },\n {\n target: \"reproSteps\",\n keys: [\"reproSteps\", \"repro_steps\"],\n option: \"--repro-steps <value>\",\n description: \"Set issue reproduction steps\",\n aliasOptions: [{ option: \"--repro_steps <value>\", description: \"Alias for --repro-steps\" }],\n },\n { target: \"resolution\", keys: [\"resolution\"], option: \"--resolution <value>\", description: \"Set issue resolution summary\" },\n {\n target: \"expectedResult\",\n keys: [\"expectedResult\", \"expected_result\", \"expected\"],\n option: \"--expected-result <value>\",\n description: \"Set issue expected behavior\",\n aliasOptions: [\n { option: \"--expected_result <value>\", description: \"Alias for --expected-result\" },\n { option: \"--expected <value>\", description: \"Short alias for --expected-result\" },\n ],\n },\n {\n target: \"actualResult\",\n keys: [\"actualResult\", \"actual_result\", \"actual\"],\n option: \"--actual-result <value>\",\n description: \"Set issue observed behavior\",\n aliasOptions: [\n { option: \"--actual_result <value>\", description: \"Alias for --actual-result\" },\n { option: \"--actual <value>\", description: \"Short alias for --actual-result\" },\n ],\n },\n {\n target: \"affectedVersion\",\n keys: [\"affectedVersion\", \"affected_version\"],\n option: \"--affected-version <value>\",\n description: \"Set affected version identifier\",\n aliasOptions: [{ option: \"--affected_version <value>\", description: \"Alias for --affected-version\" }],\n },\n {\n target: \"fixedVersion\",\n keys: [\"fixedVersion\", \"fixed_version\"],\n option: \"--fixed-version <value>\",\n description: \"Set fixed version identifier\",\n aliasOptions: [{ option: \"--fixed_version <value>\", description: \"Alias for --fixed-version\" }],\n },\n { target: \"component\", keys: [\"component\"], option: \"--component <value>\", description: \"Set issue component ownership\" },\n { target: \"regression\", keys: [\"regression\"], option: \"--regression <value>\", description: \"Set regression marker: true|false|1|0\" },\n {\n target: \"customerImpact\",\n keys: [\"customerImpact\", \"customer_impact\"],\n option: \"--customer-impact <value>\",\n description: \"Set customer impact summary\",\n aliasOptions: [{ option: \"--customer_impact <value>\", description: \"Alias for --customer-impact\" }],\n },\n {\n target: \"dep\",\n keys: [\"dep\"],\n option: \"--dep <value>\",\n description: \"Add dependency entries id=<id>,kind=<value>,author=<value>,created_at=<iso|now>,source_kind=<value> (repeatable)\",\n repeatable: true,\n },\n {\n target: \"depRemove\",\n keys: [\"depRemove\", \"dep_remove\"],\n option: \"--dep-remove <value>\",\n description: \"Remove dependencies by id or id=<id>,kind=<value>,source_kind=<value> selectors (repeatable)\",\n repeatable: true,\n aliasOptions: [{ option: \"--dep_remove <value>\", description: \"Alias for --dep-remove\" }],\n },\n {\n target: \"comment\",\n keys: [\"comment\"],\n option: \"--comment <value>\",\n description: \"Append comment seed author=<value>,created_at=<iso|now>,text=<value> (also accepts markdown pairs and - for stdin; repeatable)\",\n repeatable: true,\n },\n {\n target: \"note\",\n keys: [\"note\"],\n option: \"--note <value>\",\n description: \"Append note seed author=<value>,created_at=<iso|now>,text=<value> (also accepts markdown pairs and - for stdin; repeatable)\",\n repeatable: true,\n },\n {\n target: \"learning\",\n keys: [\"learning\"],\n option: \"--learning <value>\",\n description: \"Append learning seed author=<value>,created_at=<iso|now>,text=<value> (also accepts markdown pairs and - for stdin; repeatable)\",\n repeatable: true,\n },\n {\n target: \"file\",\n keys: [\"file\"],\n option: \"--file <value>\",\n description: \"Append linked file path=<value>,scope=<project|global>,note=<text> (also accepts markdown pairs and - for stdin; repeatable)\",\n repeatable: true,\n },\n {\n target: \"test\",\n keys: [\"test\"],\n option: \"--test <value>\",\n description: \"Append linked test command=<value>,path=<value>,scope=<project|global>,timeout_seconds=<n>,pm_context_mode=<schema|tracker|auto> (also accepts markdown pairs and - for stdin; repeatable)\",\n repeatable: true,\n },\n {\n target: \"doc\",\n keys: [\"doc\"],\n option: \"--doc <value>\",\n description: \"Append linked doc path=<value>,scope=<project|global>,note=<text> (also accepts markdown pairs and - for stdin; repeatable)\",\n repeatable: true,\n },\n {\n target: \"reminder\",\n keys: [\"reminder\"],\n option: \"--reminder <value>\",\n description: \"Set reminders at=<iso|relative>,text=<text> (also accepts markdown pairs and - for stdin; repeatable)\",\n repeatable: true,\n },\n {\n target: \"event\",\n keys: [\"event\"],\n option: \"--event <value>\",\n description: \"Set events start=<iso|relative>,end=<iso|relative>,title=<text>,all_day=<true|false>,recur_* fields (also accepts markdown pairs and - for stdin; repeatable)\",\n repeatable: true,\n },\n {\n target: \"typeOption\",\n keys: [\"typeOption\", \"type_option\"],\n option: \"--type-option <value>\",\n description: \"Set type options key=value or key=<name>,value=<value> (also accepts key:value and markdown pairs; use - for stdin; repeatable)\",\n repeatable: true,\n aliasOptions: [{ option: \"--type_option <value>\", description: \"Alias for --type-option\" }],\n },\n {\n target: \"unset\",\n keys: [\"unset\"],\n option: \"--unset <field>\",\n description: \"Clear scalar metadata field by name (repeatable)\",\n repeatable: true,\n },\n];\n\nexport const UPDATE_COMMANDER_STRING_OPTION_CONTRACTS: CommanderOptionAliasContract[] = UPDATE_COMMANDER_OPTION_REGISTRATION_CONTRACTS\n .filter((entry) => entry.repeatable !== true)\n .map((entry) => ({ target: entry.target, keys: entry.keys }));\n\nexport const UPDATE_COMMANDER_REPEATABLE_OPTION_CONTRACTS: CommanderOptionAliasContract[] =\n UPDATE_COMMANDER_OPTION_REGISTRATION_CONTRACTS\n .filter((entry) => entry.repeatable === true)\n .map((entry) => ({ target: entry.target, keys: entry.keys }));\n", "export interface CommanderOptionAliasContract {\n target: string;\n keys: readonly string[];\n}\n\nexport interface CommanderOptionRegistrationContract extends CommanderOptionAliasContract {\n option: string;\n description: string;\n required?: boolean;\n repeatable?: boolean;\n aliasOptions?: Array<{\n option: string;\n description: string;\n }>;\n}\n\nexport const LIST_COMMANDER_STRING_OPTION_CONTRACTS: CommanderOptionAliasContract[] = [\n { target: \"status\", keys: [\"status\"] },\n { target: \"type\", keys: [\"type\"] },\n { target: \"tag\", keys: [\"tag\"] },\n { target: \"priority\", keys: [\"priority\"] },\n { target: \"deadlineBefore\", keys: [\"deadlineBefore\"] },\n { target: \"deadlineAfter\", keys: [\"deadlineAfter\"] },\n { target: \"assignee\", keys: [\"assignee\"] },\n { target: \"assigneeFilter\", keys: [\"assigneeFilter\", \"assignee_filter\"] },\n { target: \"parent\", keys: [\"parent\"] },\n { target: \"sprint\", keys: [\"sprint\"] },\n { target: \"release\", keys: [\"release\"] },\n { target: \"limit\", keys: [\"limit\"] },\n { target: \"offset\", keys: [\"offset\"] },\n { target: \"fields\", keys: [\"fields\"] },\n { target: \"sort\", keys: [\"sort\"] },\n { target: \"order\", keys: [\"order\"] },\n];\n\nexport const SEARCH_COMMANDER_STRING_OPTION_CONTRACTS: CommanderOptionAliasContract[] = [\n { target: \"mode\", keys: [\"mode\"] },\n { target: \"type\", keys: [\"type\"] },\n { target: \"tag\", keys: [\"tag\"] },\n { target: \"priority\", keys: [\"priority\"] },\n { target: \"deadlineBefore\", keys: [\"deadlineBefore\"] },\n { target: \"deadlineAfter\", keys: [\"deadlineAfter\"] },\n { target: \"fields\", keys: [\"fields\"] },\n { target: \"limit\", keys: [\"limit\"] },\n];\n\nexport const CALENDAR_COMMANDER_STRING_OPTION_CONTRACTS: CommanderOptionAliasContract[] = [\n { target: \"view\", keys: [\"view\"] },\n { target: \"date\", keys: [\"date\"] },\n { target: \"from\", keys: [\"from\"] },\n { target: \"to\", keys: [\"to\"] },\n { target: \"limit\", keys: [\"limit\"] },\n { target: \"type\", keys: [\"type\"] },\n { target: \"tag\", keys: [\"tag\"] },\n { target: \"priority\", keys: [\"priority\"] },\n { target: \"status\", keys: [\"status\"] },\n { target: \"assignee\", keys: [\"assignee\"] },\n { target: \"assigneeFilter\", keys: [\"assigneeFilter\", \"assignee_filter\"] },\n { target: \"sprint\", keys: [\"sprint\"] },\n { target: \"release\", keys: [\"release\"] },\n { target: \"include\", keys: [\"include\"] },\n { target: \"recurrenceLookaheadDays\", keys: [\"recurrenceLookaheadDays\", \"recurrence_lookahead_days\"] },\n { target: \"recurrenceLookbackDays\", keys: [\"recurrenceLookbackDays\", \"recurrence_lookback_days\"] },\n { target: \"occurrenceLimit\", keys: [\"occurrenceLimit\", \"occurrence_limit\"] },\n { target: \"format\", keys: [\"format\"] },\n];\n\nexport const CONTEXT_COMMANDER_STRING_OPTION_CONTRACTS: CommanderOptionAliasContract[] = [\n { target: \"date\", keys: [\"date\"] },\n { target: \"from\", keys: [\"from\"] },\n { target: \"to\", keys: [\"to\"] },\n { target: \"type\", keys: [\"type\"] },\n { target: \"tag\", keys: [\"tag\"] },\n { target: \"priority\", keys: [\"priority\"] },\n { target: \"assignee\", keys: [\"assignee\"] },\n { target: \"assigneeFilter\", keys: [\"assigneeFilter\", \"assignee_filter\"] },\n { target: \"sprint\", keys: [\"sprint\"] },\n { target: \"release\", keys: [\"release\"] },\n { target: \"limit\", keys: [\"limit\"] },\n { target: \"format\", keys: [\"format\"] },\n { target: \"depth\", keys: [\"depth\"] },\n { target: \"activityLimit\", keys: [\"activityLimit\", \"activity_limit\"] },\n { target: \"staleThreshold\", keys: [\"staleThreshold\", \"stale_threshold\"] },\n];\n\nexport const ACTIVITY_COMMANDER_STRING_OPTION_CONTRACTS: CommanderOptionAliasContract[] = [\n { target: \"id\", keys: [\"id\"] },\n { target: \"op\", keys: [\"op\"] },\n { target: \"author\", keys: [\"author\"] },\n { target: \"from\", keys: [\"from\"] },\n { target: \"to\", keys: [\"to\"] },\n { target: \"limit\", keys: [\"limit\"] },\n];\n\nexport function readFirstStringFromCommanderOptions(\n options: Record<string, unknown>,\n contract: CommanderOptionAliasContract,\n): string | undefined {\n for (const key of contract.keys) {\n const candidate = options[key];\n if (typeof candidate === \"string\") {\n return candidate;\n }\n }\n return undefined;\n}\n\nexport function readStringArrayFromCommanderOptions(\n options: Record<string, unknown>,\n contract: CommanderOptionAliasContract,\n): string[] | undefined {\n for (const key of contract.keys) {\n const candidate = options[key];\n if (Array.isArray(candidate)) {\n return candidate as string[];\n }\n }\n return undefined;\n}\n", "import {\n KNOWN_EXTENSION_CAPABILITIES,\n KNOWN_EXTENSION_POLICY_MODES,\n KNOWN_EXTENSION_POLICY_SURFACES,\n KNOWN_EXTENSION_SANDBOX_PROFILES,\n KNOWN_EXTENSION_SERVICE_NAMES,\n KNOWN_EXTENSION_TRUST_MODES,\n} from \"../../core/extensions/extension-types.js\";\n\nexport const PM_EXTENSION_CAPABILITY_CONTRACTS = [...KNOWN_EXTENSION_CAPABILITIES] as const;\n\nexport type PmExtensionCapabilityContract = (typeof PM_EXTENSION_CAPABILITY_CONTRACTS)[number];\n\nexport const PM_EXTENSION_SERVICE_NAME_CONTRACTS = [...KNOWN_EXTENSION_SERVICE_NAMES] as const;\n\nexport type PmExtensionServiceNameContract = (typeof PM_EXTENSION_SERVICE_NAME_CONTRACTS)[number];\n\nexport const PM_EXTENSION_POLICY_MODE_CONTRACTS = [...KNOWN_EXTENSION_POLICY_MODES] as const;\nexport type PmExtensionPolicyModeContract = (typeof PM_EXTENSION_POLICY_MODE_CONTRACTS)[number];\nexport const PM_EXTENSION_TRUST_MODE_CONTRACTS = [...KNOWN_EXTENSION_TRUST_MODES] as const;\nexport type PmExtensionTrustModeContract = (typeof PM_EXTENSION_TRUST_MODE_CONTRACTS)[number];\nexport const PM_EXTENSION_SANDBOX_PROFILE_CONTRACTS = [...KNOWN_EXTENSION_SANDBOX_PROFILES] as const;\nexport type PmExtensionSandboxProfileContract = (typeof PM_EXTENSION_SANDBOX_PROFILE_CONTRACTS)[number];\n\nexport const PM_EXTENSION_POLICY_SURFACE_CONTRACTS = [...KNOWN_EXTENSION_POLICY_SURFACES] as const;\nexport type PmExtensionPolicySurfaceContract = (typeof PM_EXTENSION_POLICY_SURFACE_CONTRACTS)[number];\n\nexport const PM_CORE_COMMAND_NAMES = [\n \"init\",\n \"config\",\n \"extension\",\n \"package\",\n \"packages\",\n \"install\",\n \"upgrade\",\n \"create\",\n \"list\",\n \"list-all\",\n \"list-draft\",\n \"list-open\",\n \"list-in-progress\",\n \"list-blocked\",\n \"list-closed\",\n \"list-canceled\",\n \"aggregate\",\n \"context\",\n \"ctx\",\n \"get\",\n \"search\",\n \"history\",\n \"history-redact\",\n \"history-repair\",\n \"schema\",\n \"activity\",\n \"restore\",\n \"update\",\n \"update-many\",\n \"close\",\n \"delete\",\n \"append\",\n \"comments\",\n \"notes\",\n \"learnings\",\n \"files\",\n \"docs\",\n \"deps\",\n \"plan\",\n \"test\",\n \"test-all\",\n \"stats\",\n \"health\",\n \"validate\",\n \"gc\",\n \"contracts\",\n \"claim\",\n \"release\",\n \"start-task\",\n \"pause-task\",\n \"close-task\",\n \"help\",\n] as const;\n\nexport const PM_TOOL_ACTIONS = [\n \"init\",\n \"config\",\n \"extension-init\",\n \"extension-install\",\n \"extension-uninstall\",\n \"extension-explore\",\n \"extension-manage\",\n \"extension-reload\",\n \"extension-doctor\",\n \"extension-catalog\",\n \"extension-adopt\",\n \"extension-adopt-all\",\n \"extension-activate\",\n \"extension-deactivate\",\n \"extension\",\n \"package-init\",\n \"package-install\",\n \"package-uninstall\",\n \"package-explore\",\n \"package-manage\",\n \"package-reload\",\n \"package-doctor\",\n \"package-catalog\",\n \"package-adopt\",\n \"package-adopt-all\",\n \"package-activate\",\n \"package-deactivate\",\n \"package\",\n \"install\",\n \"upgrade\",\n \"create\",\n \"list\",\n \"list-all\",\n \"list-draft\",\n \"list-open\",\n \"list-in-progress\",\n \"list-blocked\",\n \"list-closed\",\n \"list-canceled\",\n \"aggregate\",\n \"context\",\n \"ctx\",\n \"get\",\n \"search\",\n \"history\",\n \"history-redact\",\n \"history-repair\",\n \"schema\",\n \"activity\",\n \"restore\",\n \"update\",\n \"update-many\",\n \"close\",\n \"delete\",\n \"append\",\n \"comments\",\n \"plan\",\n \"notes\",\n \"learnings\",\n \"files\",\n \"docs\",\n \"deps\",\n \"test\",\n \"test-all\",\n \"stats\",\n \"health\",\n \"validate\",\n \"gc\",\n \"contracts\",\n \"claim\",\n \"release\",\n \"start-task\",\n \"pause-task\",\n \"close-task\",\n] as const;\n\nexport type PmToolAction = (typeof PM_TOOL_ACTIONS)[number];\n\nexport function isPmToolAction(value: string): value is PmToolAction {\n return PM_TOOL_ACTIONS.includes(value as PmToolAction);\n}\n\nexport function isPmExtensionCapabilityContract(value: string): value is PmExtensionCapabilityContract {\n return PM_EXTENSION_CAPABILITY_CONTRACTS.includes(value as PmExtensionCapabilityContract);\n}\n\nexport function isPmExtensionServiceNameContract(value: string): value is PmExtensionServiceNameContract {\n return PM_EXTENSION_SERVICE_NAME_CONTRACTS.includes(value as PmExtensionServiceNameContract);\n}\n\nexport function isPmExtensionPolicyModeContract(value: string): value is PmExtensionPolicyModeContract {\n return PM_EXTENSION_POLICY_MODE_CONTRACTS.includes(value as PmExtensionPolicyModeContract);\n}\n\nexport function isPmExtensionPolicySurfaceContract(value: string): value is PmExtensionPolicySurfaceContract {\n return PM_EXTENSION_POLICY_SURFACE_CONTRACTS.includes(value as PmExtensionPolicySurfaceContract);\n}\n", "import type { ToolOptionFlagContract } from \"../cli-contracts.js\";\n\nexport const TOOL_LIST_FILTER_OPTION_CONTRACTS: ToolOptionFlagContract[] = [\n { param: \"status\", flag: \"--status\" },\n { param: \"type\", flag: \"--type\" },\n { param: \"tag\", flag: \"--tag\" },\n { param: \"priority\", flag: \"--priority\" },\n { param: \"deadlineBefore\", flag: \"--deadline-before\" },\n { param: \"deadlineAfter\", flag: \"--deadline-after\" },\n { param: \"assignee\", flag: \"--assignee\" },\n { param: \"assigneeFilter\", flag: \"--assignee-filter\" },\n { param: \"parent\", flag: \"--parent\" },\n { param: \"sprint\", flag: \"--sprint\" },\n { param: \"release\", flag: \"--release\" },\n { param: \"limit\", flag: \"--limit\" },\n { param: \"offset\", flag: \"--offset\" },\n { param: \"fields\", flag: \"--fields\" },\n { param: \"sort\", flag: \"--sort\" },\n { param: \"order\", flag: \"--order\" },\n];\n\nexport const TOOL_AGGREGATE_OPTION_CONTRACTS: ToolOptionFlagContract[] = [\n { param: \"groupBy\", flag: \"--group-by\" },\n { param: \"status\", flag: \"--status\" },\n { param: \"type\", flag: \"--type\" },\n { param: \"tag\", flag: \"--tag\" },\n { param: \"priority\", flag: \"--priority\" },\n { param: \"deadlineBefore\", flag: \"--deadline-before\" },\n { param: \"deadlineAfter\", flag: \"--deadline-after\" },\n { param: \"assignee\", flag: \"--assignee\" },\n { param: \"assigneeFilter\", flag: \"--assignee-filter\" },\n { param: \"parent\", flag: \"--parent\" },\n { param: \"sprint\", flag: \"--sprint\" },\n { param: \"release\", flag: \"--release\" },\n];\n\nexport const TOOL_DEDUPE_AUDIT_OPTION_CONTRACTS: ToolOptionFlagContract[] = [\n { param: \"mode\", flag: \"--mode\" },\n { param: \"limit\", flag: \"--limit\" },\n { param: \"threshold\", flag: \"--threshold\" },\n { param: \"status\", flag: \"--status\" },\n { param: \"type\", flag: \"--type\" },\n { param: \"tag\", flag: \"--tag\" },\n { param: \"priority\", flag: \"--priority\" },\n { param: \"deadlineBefore\", flag: \"--deadline-before\" },\n { param: \"deadlineAfter\", flag: \"--deadline-after\" },\n { param: \"assignee\", flag: \"--assignee\" },\n { param: \"assigneeFilter\", flag: \"--assignee-filter\" },\n { param: \"parent\", flag: \"--parent\" },\n { param: \"sprint\", flag: \"--sprint\" },\n { param: \"release\", flag: \"--release\" },\n];\n\nexport const TOOL_SEARCH_FILTER_OPTION_CONTRACTS: ToolOptionFlagContract[] = [\n { param: \"type\", flag: \"--type\" },\n { param: \"tag\", flag: \"--tag\" },\n { param: \"priority\", flag: \"--priority\" },\n { param: \"deadlineBefore\", flag: \"--deadline-before\" },\n { param: \"deadlineAfter\", flag: \"--deadline-after\" },\n { param: \"fields\", flag: \"--fields\" },\n { param: \"limit\", flag: \"--limit\" },\n];\n\nexport const TOOL_SHARED_CREATE_UPDATE_OPTION_CONTRACTS: ToolOptionFlagContract[] = [\n { param: \"parent\", flag: \"--parent\" },\n { param: \"reviewer\", flag: \"--reviewer\" },\n { param: \"risk\", flag: \"--risk\" },\n { param: \"confidence\", flag: \"--confidence\" },\n { param: \"sprint\", flag: \"--sprint\" },\n { param: \"release\", flag: \"--release\" },\n { param: \"blockedBy\", flag: \"--blocked-by\" },\n { param: \"blockedReason\", flag: \"--blocked-reason\" },\n { param: \"unblockNote\", flag: \"--unblock-note\" },\n { param: \"reporter\", flag: \"--reporter\" },\n { param: \"severity\", flag: \"--severity\" },\n { param: \"environment\", flag: \"--environment\" },\n { param: \"reproSteps\", flag: \"--repro-steps\" },\n { param: \"resolution\", flag: \"--resolution\" },\n { param: \"expectedResult\", flag: \"--expected-result\" },\n { param: \"actualResult\", flag: \"--actual-result\" },\n { param: \"affectedVersion\", flag: \"--affected-version\" },\n { param: \"fixedVersion\", flag: \"--fixed-version\" },\n { param: \"component\", flag: \"--component\" },\n { param: \"regression\", flag: \"--regression\", booleanish: true },\n { param: \"customerImpact\", flag: \"--customer-impact\" },\n { param: \"definitionOfReady\", flag: \"--definition-of-ready\", allowEmpty: true },\n { param: \"order\", flag: \"--order\" },\n { param: \"goal\", flag: \"--goal\" },\n { param: \"objective\", flag: \"--objective\" },\n { param: \"value\", flag: \"--value\" },\n { param: \"impact\", flag: \"--impact\" },\n { param: \"outcome\", flag: \"--outcome\" },\n { param: \"whyNow\", flag: \"--why-now\" },\n];\n\nexport const TOOL_CREATE_OPTION_CONTRACTS: ToolOptionFlagContract[] = [\n { param: \"title\", flag: \"--title\" },\n { param: \"description\", flag: \"--description\", allowEmpty: true },\n { param: \"type\", flag: \"--type\" },\n { param: \"template\", flag: \"--template\" },\n { param: \"createMode\", flag: \"--create-mode\" },\n { param: \"schedulePreset\", flag: \"--schedule-preset\" },\n { param: \"status\", flag: \"--status\" },\n { param: \"priority\", flag: \"--priority\" },\n { param: \"tags\", flag: \"--tags\", allowEmpty: true },\n { param: \"addTags\", flag: \"--add-tags\", repeatable: true },\n { param: \"body\", flag: \"--body\", allowEmpty: true },\n { param: \"deadline\", flag: \"--deadline\" },\n { param: \"estimate\", flag: \"--estimate\" },\n { param: \"acceptanceCriteria\", flag: \"--acceptance-criteria\", allowEmpty: true },\n { param: \"author\", flag: \"--author\" },\n { param: \"message\", flag: \"--message\", allowEmpty: true },\n { param: \"assignee\", flag: \"--assignee\" },\n { param: \"reminder\", flag: \"--reminder\", repeatable: true },\n { param: \"event\", flag: \"--event\", repeatable: true },\n { param: \"typeOption\", flag: \"--type-option\", repeatable: true },\n { param: \"dep\", flag: \"--dep\", repeatable: true },\n { param: \"comment\", flag: \"--comment\", repeatable: true },\n { param: \"note\", flag: \"--note\", repeatable: true },\n { param: \"learning\", flag: \"--learning\", repeatable: true },\n { param: \"linkedFile\", flag: \"--file\", repeatable: true },\n { param: \"linkedTest\", flag: \"--test\", repeatable: true },\n { param: \"doc\", flag: \"--doc\", repeatable: true },\n { param: \"unset\", flag: \"--unset\", repeatable: true },\n { param: \"clearDeps\", flag: \"--clear-deps\" },\n { param: \"clearComments\", flag: \"--clear-comments\" },\n { param: \"clearNotes\", flag: \"--clear-notes\" },\n { param: \"clearLearnings\", flag: \"--clear-learnings\" },\n { param: \"clearFiles\", flag: \"--clear-files\" },\n { param: \"clearTests\", flag: \"--clear-tests\" },\n { param: \"clearDocs\", flag: \"--clear-docs\" },\n { param: \"clearReminders\", flag: \"--clear-reminders\" },\n { param: \"clearEvents\", flag: \"--clear-events\" },\n { param: \"clearTypeOptions\", flag: \"--clear-type-options\" },\n];\n\nexport const TOOL_UPDATE_OPTION_CONTRACTS: ToolOptionFlagContract[] = [\n { param: \"title\", flag: \"--title\" },\n { param: \"description\", flag: \"--description\", allowEmpty: true },\n { param: \"body\", flag: \"--body\", allowEmpty: true },\n { param: \"status\", flag: \"--status\" },\n { param: \"closeReason\", flag: \"--close-reason\" },\n { param: \"priority\", flag: \"--priority\" },\n { param: \"type\", flag: \"--type\" },\n { param: \"tags\", flag: \"--tags\", allowEmpty: true },\n { param: \"addTags\", flag: \"--add-tags\", repeatable: true },\n { param: \"removeTags\", flag: \"--remove-tags\", repeatable: true },\n { param: \"deadline\", flag: \"--deadline\" },\n { param: \"estimate\", flag: \"--estimate\" },\n { param: \"acceptanceCriteria\", flag: \"--acceptance-criteria\", allowEmpty: true },\n { param: \"author\", flag: \"--author\" },\n { param: \"message\", flag: \"--message\", allowEmpty: true },\n { param: \"assignee\", flag: \"--assignee\" },\n { param: \"dep\", flag: \"--dep\", repeatable: true },\n { param: \"depRemove\", flag: \"--dep-remove\", repeatable: true },\n { param: \"replaceDeps\", flag: \"--replace-deps\" },\n { param: \"replaceTests\", flag: \"--replace-tests\" },\n { param: \"comment\", flag: \"--comment\", repeatable: true },\n { param: \"note\", flag: \"--note\", repeatable: true },\n { param: \"learning\", flag: \"--learning\", repeatable: true },\n { param: \"linkedFile\", flag: \"--file\", repeatable: true },\n { param: \"linkedTest\", flag: \"--test\", repeatable: true },\n { param: \"doc\", flag: \"--doc\", repeatable: true },\n { param: \"reminder\", flag: \"--reminder\", repeatable: true },\n { param: \"event\", flag: \"--event\", repeatable: true },\n { param: \"typeOption\", flag: \"--type-option\", repeatable: true },\n { param: \"unset\", flag: \"--unset\", repeatable: true },\n { param: \"clearDeps\", flag: \"--clear-deps\" },\n { param: \"clearComments\", flag: \"--clear-comments\" },\n { param: \"clearNotes\", flag: \"--clear-notes\" },\n { param: \"clearLearnings\", flag: \"--clear-learnings\" },\n { param: \"clearFiles\", flag: \"--clear-files\" },\n { param: \"clearTests\", flag: \"--clear-tests\" },\n { param: \"clearDocs\", flag: \"--clear-docs\" },\n { param: \"clearReminders\", flag: \"--clear-reminders\" },\n { param: \"clearEvents\", flag: \"--clear-events\" },\n { param: \"clearTypeOptions\", flag: \"--clear-type-options\" },\n { param: \"allowAuditUpdate\", flag: \"--allow-audit-update\" },\n { param: \"allowAuditDepUpdate\", flag: \"--allow-audit-dep-update\" },\n];\n\nexport const TOOL_UPDATE_MANY_FILTER_OPTION_CONTRACTS: ToolOptionFlagContract[] = [\n { param: \"filterStatus\", flag: \"--filter-status\" },\n { param: \"filterType\", flag: \"--filter-type\" },\n { param: \"filterTag\", flag: \"--filter-tag\" },\n { param: \"filterPriority\", flag: \"--filter-priority\" },\n { param: \"filterDeadlineBefore\", flag: \"--filter-deadline-before\" },\n { param: \"filterDeadlineAfter\", flag: \"--filter-deadline-after\" },\n { param: \"filterAssignee\", flag: \"--filter-assignee\" },\n { param: \"filterAssigneeFilter\", flag: \"--filter-assignee-filter\" },\n { param: \"filterParent\", flag: \"--filter-parent\" },\n { param: \"filterSprint\", flag: \"--filter-sprint\" },\n { param: \"filterRelease\", flag: \"--filter-release\" },\n { param: \"limit\", flag: \"--limit\" },\n { param: \"offset\", flag: \"--offset\" },\n];\n\nexport const TOOL_NORMALIZE_FILTER_OPTION_CONTRACTS: ToolOptionFlagContract[] = [...TOOL_UPDATE_MANY_FILTER_OPTION_CONTRACTS];\n\nexport const TOOL_CALENDAR_OPTION_CONTRACTS: ToolOptionFlagContract[] = [\n { param: \"view\", flag: \"--view\" },\n { param: \"date\", flag: \"--date\" },\n { param: \"from\", flag: \"--from\" },\n { param: \"to\", flag: \"--to\" },\n { param: \"type\", flag: \"--type\" },\n { param: \"tag\", flag: \"--tag\" },\n { param: \"priority\", flag: \"--priority\" },\n { param: \"status\", flag: \"--status\" },\n { param: \"assignee\", flag: \"--assignee\" },\n { param: \"assigneeFilter\", flag: \"--assignee-filter\" },\n { param: \"sprint\", flag: \"--sprint\" },\n { param: \"release\", flag: \"--release\" },\n { param: \"include\", flag: \"--include\" },\n { param: \"recurrenceLookaheadDays\", flag: \"--recurrence-lookahead-days\" },\n { param: \"recurrenceLookbackDays\", flag: \"--recurrence-lookback-days\" },\n { param: \"occurrenceLimit\", flag: \"--occurrence-limit\" },\n { param: \"limit\", flag: \"--limit\" },\n { param: \"format\", flag: \"--format\" },\n];\n\nexport const TOOL_ACTIVITY_OPTION_CONTRACTS: ToolOptionFlagContract[] = [\n { param: \"id\", flag: \"--id\" },\n { param: \"op\", flag: \"--op\" },\n { param: \"author\", flag: \"--author\" },\n { param: \"from\", flag: \"--from\" },\n { param: \"to\", flag: \"--to\" },\n { param: \"limit\", flag: \"--limit\" },\n { param: \"compact\", flag: \"--compact\" },\n { param: \"full\", flag: \"--full\" },\n];\n\nexport const TOOL_CONTEXT_OPTION_CONTRACTS: ToolOptionFlagContract[] = [\n { param: \"date\", flag: \"--date\" },\n { param: \"from\", flag: \"--from\" },\n { param: \"to\", flag: \"--to\" },\n { param: \"type\", flag: \"--type\" },\n { param: \"tag\", flag: \"--tag\" },\n { param: \"priority\", flag: \"--priority\" },\n { param: \"assignee\", flag: \"--assignee\" },\n { param: \"assigneeFilter\", flag: \"--assignee-filter\" },\n { param: \"sprint\", flag: \"--sprint\" },\n { param: \"release\", flag: \"--release\" },\n { param: \"limit\", flag: \"--limit\" },\n { param: \"format\", flag: \"--format\" },\n { param: \"depth\", flag: \"--depth\" },\n { param: \"section\", flag: \"--section\", repeatable: true },\n { param: \"activityLimit\", flag: \"--activity-limit\" },\n { param: \"staleThreshold\", flag: \"--stale-threshold\" },\n];\n\nexport const TOOL_DEPS_OPTION_CONTRACTS: ToolOptionFlagContract[] = [\n { param: \"format\", flag: \"--format\" },\n { param: \"maxDepth\", flag: \"--max-depth\" },\n { param: \"collapse\", flag: \"--collapse\" },\n { param: \"summary\", flag: \"--summary\" },\n];\n", "import {\n PLAN_HARNESS_VALUES,\n PLAN_MODE_VALUES,\n PLAN_STEP_LINK_KIND_VALUES,\n PLAN_STEP_STATUS_VALUES,\n} from \"../../types/index.js\";\n\nexport const PM_TOOL_PARAMETER_PROPERTIES: Record<string, unknown> = {\n json: { type: \"boolean\", default: true },\n quiet: { type: \"boolean\" },\n profile: { type: \"boolean\" },\n noExtensions: { type: \"boolean\" },\n noPager: { type: \"boolean\" },\n path: { type: \"string\" },\n pmExecutable: { type: \"string\" },\n timeoutMs: { type: \"number\" },\n id: { type: \"string\" },\n target: { type: \"string\" },\n github: { type: \"string\" },\n ref: { type: \"string\" },\n query: { type: \"string\" },\n keywords: { type: \"string\" },\n fields: { type: \"string\" },\n sort: { type: \"string\", enum: [\"priority\", \"deadline\", \"updated_at\", \"created_at\", \"title\", \"parent\"] },\n prefix: { type: \"string\" },\n preset: { type: \"string\", enum: [\"minimal\", \"default\", \"strict\", \"custom\"] },\n defaults: { type: \"boolean\" },\n agentGuidance: { type: \"string\", enum: [\"ask\", \"add\", \"skip\", \"status\"] },\n withPackages: { type: \"boolean\" },\n scope: { type: \"string\", enum: [\"project\", \"global\"] },\n contractAction: { type: \"string\" },\n command: { type: \"string\" },\n schemaOnly: { type: \"boolean\" },\n flagsOnly: { type: \"boolean\" },\n availabilityOnly: { type: \"boolean\" },\n runtimeOnly: { type: \"boolean\" },\n activeOnly: { type: \"boolean\" },\n eagerTags: { type: \"boolean\" },\n configAction: { type: \"string\", enum: [\"get\", \"set\", \"list\", \"export\"] },\n key: { type: \"string\" },\n title: { type: \"string\" },\n description: { type: \"string\" },\n type: { type: \"string\" },\n template: { type: \"string\" },\n createMode: { type: \"string\", enum: [\"strict\", \"progressive\"] },\n schedulePreset: { type: \"string\", enum: [\"lightweight\"] },\n status: { type: \"string\", enum: [\"draft\", \"open\", \"in_progress\", \"blocked\", \"closed\", \"canceled\", \"in-progress\"] },\n filterStatus: { type: \"string\" },\n filterType: { type: \"string\" },\n filterTag: { type: \"string\" },\n filterPriority: { anyOf: [{ type: \"string\" }, { type: \"number\" }] },\n filterDeadlineBefore: { type: \"string\" },\n filterDeadlineAfter: { type: \"string\" },\n filterAssignee: { type: \"string\" },\n filterAssigneeFilter: { type: \"string\", enum: [\"assigned\", \"unassigned\"] },\n filterParent: { type: \"string\" },\n filterSprint: { type: \"string\" },\n filterRelease: { type: \"string\" },\n closeReason: { type: \"string\" },\n priority: { anyOf: [{ type: \"string\" }, { type: \"number\" }] },\n tags: { type: \"string\" },\n addTags: { type: \"array\", items: { type: \"string\" } },\n removeTags: { type: \"array\", items: { type: \"string\" } },\n body: { type: \"string\" },\n deadline: { type: \"string\" },\n estimate: { anyOf: [{ type: \"string\" }, { type: \"number\" }] },\n acceptanceCriteria: { type: \"string\" },\n author: { type: \"string\" },\n message: { type: \"string\" },\n assignee: { type: \"string\" },\n assigneeFilter: { type: \"string\", enum: [\"assigned\", \"unassigned\"] },\n parent: { type: \"string\" },\n reviewer: { type: \"string\" },\n risk: { type: \"string\" },\n confidence: { anyOf: [{ type: \"string\" }, { type: \"number\" }] },\n sprint: { type: \"string\" },\n release: { type: \"string\" },\n blockedBy: { type: \"string\" },\n blockedReason: { type: \"string\" },\n unblockNote: { type: \"string\" },\n reporter: { type: \"string\" },\n severity: { type: \"string\" },\n environment: { type: \"string\" },\n reproSteps: { type: \"string\" },\n resolution: { type: \"string\" },\n expectedResult: { type: \"string\" },\n actualResult: { type: \"string\" },\n affectedVersion: { type: \"string\" },\n fixedVersion: { type: \"string\" },\n component: { type: \"string\" },\n regression: { anyOf: [{ type: \"boolean\" }, { type: \"string\" }, { type: \"number\" }] },\n customerImpact: { type: \"string\" },\n definitionOfReady: { type: \"string\" },\n order: { anyOf: [{ type: \"string\" }, { type: \"number\" }] },\n goal: { type: \"string\" },\n objective: { type: \"string\" },\n value: { type: \"string\" },\n impact: { type: \"string\" },\n outcome: { type: \"string\" },\n whyNow: { type: \"string\" },\n mode: {\n type: \"string\",\n enum: [\"keyword\", \"semantic\", \"hybrid\", \"title_exact\", \"title_fuzzy\", \"parent_scope\"],\n },\n op: { type: \"string\" },\n compact: { type: \"boolean\" },\n brief: { type: \"boolean\" },\n full: { type: \"boolean\" },\n view: { type: \"string\", enum: [\"agenda\", \"day\", \"week\", \"month\"] },\n date: { type: \"string\" },\n from: { type: \"string\" },\n to: { type: \"string\" },\n past: { type: \"boolean\" },\n fullPeriod: { type: \"boolean\" },\n include: { type: \"string\" },\n recurrenceLookaheadDays: { anyOf: [{ type: \"string\" }, { type: \"number\" }] },\n recurrenceLookbackDays: { anyOf: [{ type: \"string\" }, { type: \"number\" }] },\n occurrenceLimit: { anyOf: [{ type: \"string\" }, { type: \"number\" }] },\n includeLinked: { type: \"boolean\" },\n semantic: { type: \"boolean\" },\n hybrid: { type: \"boolean\" },\n titleExact: { type: \"boolean\" },\n phraseExact: { type: \"boolean\" },\n includeBody: { type: \"boolean\" },\n tag: { type: \"string\" },\n deadlineBefore: { type: \"string\" },\n deadlineAfter: { type: \"string\" },\n limit: { anyOf: [{ type: \"string\" }, { type: \"number\" }] },\n limitItems: { anyOf: [{ type: \"string\" }, { type: \"number\" }] },\n fullHistory: { type: \"boolean\" },\n latest: { anyOf: [{ type: \"string\" }, { type: \"number\" }] },\n offset: { anyOf: [{ type: \"string\" }, { type: \"number\" }] },\n progress: { type: \"boolean\" },\n background: { type: \"boolean\" },\n runId: { type: \"string\" },\n stream: {\n anyOf: [{ type: \"boolean\" }, { type: \"string\", enum: [\"stdout\", \"stderr\", \"both\", \"rows\", \"ndjson\", \"jsonl\"] }],\n },\n tail: { anyOf: [{ type: \"string\" }, { type: \"number\" }] },\n envSet: { type: \"array\", items: { type: \"string\" } },\n envClear: { type: \"array\", items: { type: \"string\" } },\n sharedHostSafe: { type: \"boolean\" },\n detail: { type: \"string\", enum: [\"summary\", \"deep\"] },\n trace: { type: \"boolean\" },\n reload: { type: \"boolean\" },\n watch: { type: \"boolean\" },\n runtimeProbe: { type: \"boolean\" },\n fixManagedState: { type: \"boolean\" },\n pmContext: { type: \"string\", enum: [\"schema\", \"tracker\", \"auto\"] },\n overrideLinkedPmContext: { type: \"boolean\" },\n failOnContextMismatch: { type: \"boolean\" },\n failOnSkipped: { type: \"boolean\" },\n failOnEmptyTestRun: { type: \"boolean\" },\n requireAssertionsForPm: { type: \"boolean\" },\n checkContext: { type: \"boolean\" },\n autoPmContext: { type: \"boolean\" },\n diff: { type: \"boolean\" },\n verify: { type: \"boolean\" },\n literal: { type: \"array\", items: { type: \"string\" } },\n regex: { type: \"array\", items: { type: \"string\" } },\n replacement: { type: \"string\" },\n timeout: { anyOf: [{ type: \"string\" }, { type: \"number\" }] },\n validateClose: { type: \"string\", enum: [\"off\", \"warn\", \"strict\"] },\n checkMetadata: { type: \"boolean\" },\n metadataProfile: { type: \"string\", enum: [\"core\", \"strict\", \"custom\"] },\n checkResolution: { type: \"boolean\" },\n checkLifecycle: { type: \"boolean\" },\n checkStaleBlockers: { type: \"boolean\" },\n dependencyCycleSeverity: { type: \"string\", enum: [\"off\", \"warn\", \"error\"] },\n checkFiles: { type: \"boolean\" },\n strictDirectories: { type: \"boolean\" },\n checkOnly: { type: \"boolean\" },\n checkTelemetry: { type: \"boolean\" },\n noRefresh: { type: \"boolean\" },\n refreshVectors: { type: \"boolean\" },\n verboseStaleItems: { type: \"boolean\" },\n skipVectors: { type: \"boolean\" },\n skipIntegrity: { type: \"boolean\" },\n skipDrift: { type: \"boolean\" },\n verboseDiagnostics: { type: \"boolean\" },\n scanMode: { type: \"string\", enum: [\"default\", \"tracked-all\", \"tracked-all-strict\"] },\n includePmInternals: { type: \"boolean\" },\n verboseFileLists: { type: \"boolean\" },\n strictExit: { type: \"boolean\" },\n failOnWarn: { type: \"boolean\" },\n checkHistoryDrift: { type: \"boolean\" },\n checkCommandReferences: { type: \"boolean\" },\n allowAuditNote: { type: \"boolean\" },\n allowAuditLearning: { type: \"boolean\" },\n allowAuditComment: { type: \"boolean\" },\n allowAuditUpdate: { type: \"boolean\" },\n allowAuditDepUpdate: { type: \"boolean\" },\n allowAuditRelease: { type: \"boolean\" },\n dryRun: { type: \"boolean\" },\n cliOnly: { type: \"boolean\" },\n packagesOnly: { type: \"boolean\" },\n repair: { type: \"boolean\" },\n packageName: { type: \"string\" },\n rollback: { type: \"string\" },\n noCheckpoint: { type: \"boolean\" },\n force: { type: \"boolean\" },\n run: { type: \"boolean\" },\n count: { type: \"boolean\" },\n includeUnparented: { type: \"boolean\" },\n gcScope: {\n type: \"array\",\n items: { type: \"string\", enum: [\"index\", \"embeddings\", \"runtime\"] },\n },\n maxDepth: { anyOf: [{ type: \"string\" }, { type: \"number\" }] },\n collapse: { type: \"string\", enum: [\"none\", \"repeated\"] },\n summary: { type: \"boolean\" },\n shell: { type: \"string\", enum: [\"bash\", \"zsh\", \"fish\"] },\n stdin: { type: \"boolean\" },\n file: { type: \"string\" },\n preserveSourceIds: { type: \"boolean\" },\n folder: { type: \"string\" },\n subcommand: { type: \"string\" },\n name: { type: \"string\" },\n defaultStatus: { type: \"string\" },\n alias: { type: \"array\", items: { type: \"string\" } },\n text: { type: \"string\" },\n add: { type: \"array\", items: { type: \"string\" } },\n addGlob: { type: \"array\", items: { type: \"string\" } },\n remove: { type: \"array\", items: { type: \"string\" } },\n migrate: { type: \"array\", items: { type: \"string\" } },\n discover: { type: \"boolean\" },\n apply: { type: \"boolean\" },\n discoveryNote: { type: \"string\" },\n appendStable: { type: \"boolean\" },\n validatePaths: { type: \"boolean\" },\n audit: { type: \"boolean\" },\n dep: { type: \"array\", items: { type: \"string\" } },\n depRemove: { type: \"array\", items: { type: \"string\" } },\n replaceDeps: { type: \"boolean\" },\n replaceTests: { type: \"boolean\" },\n comment: { type: \"array\", items: { type: \"string\" } },\n note: { type: \"array\", items: { type: \"string\" } },\n learning: { type: \"array\", items: { type: \"string\" } },\n linkedFile: { type: \"array\", items: { type: \"string\" } },\n linkedTest: { type: \"array\", items: { type: \"string\" } },\n doc: { type: \"array\", items: { type: \"string\" } },\n reminder: { type: \"array\", items: { type: \"string\" } },\n event: { type: \"array\", items: { type: \"string\" } },\n typeOption: { type: \"array\", items: { type: \"string\" } },\n unset: { type: \"array\", items: { type: \"string\" } },\n clearDeps: { type: \"boolean\" },\n clearComments: { type: \"boolean\" },\n clearNotes: { type: \"boolean\" },\n clearLearnings: { type: \"boolean\" },\n clearFiles: { type: \"boolean\" },\n clearTests: { type: \"boolean\" },\n clearDocs: { type: \"boolean\" },\n clearReminders: { type: \"boolean\" },\n clearEvents: { type: \"boolean\" },\n clearTypeOptions: { type: \"boolean\" },\n criterion: { type: \"array\", items: { type: \"string\" } },\n clearCriteria: { type: \"boolean\" },\n groupBy: { type: \"string\" },\n threshold: { anyOf: [{ type: \"string\" }, { type: \"number\" }] },\n format: { type: \"string\" },\n depth: { type: \"string\", enum: [\"brief\", \"standard\", \"deep\"] },\n section: { type: \"array\", items: { type: \"string\", enum: [\"hierarchy\", \"activity\", \"progress\", \"blockers\", \"files\", \"workload\", \"staleness\", \"tests\"] } },\n activityLimit: { anyOf: [{ type: \"string\" }, { type: \"number\" }] },\n staleThreshold: { type: \"string\" },\n policy: { type: \"string\" },\n};\n\nexport const PLAN_SUBCOMMAND_VALUES = [\n \"create\",\n \"show\",\n \"add-step\",\n \"update-step\",\n \"complete-step\",\n \"block-step\",\n \"reorder-step\",\n \"remove-step\",\n \"link\",\n \"unlink\",\n \"decision\",\n \"discovery\",\n \"validation\",\n \"resume\",\n \"approve\",\n \"materialize\",\n] as const;\n\nexport const PLAN_ACTION_PARAMETER_PROPERTIES: Record<string, unknown> = {\n subcommand: { type: \"string\", enum: [...PLAN_SUBCOMMAND_VALUES] },\n stepRef: { type: \"string\" },\n reorderTo: { anyOf: [{ type: \"string\" }, { type: \"number\" }] },\n scope: { type: \"string\" },\n harness: { type: \"string\", enum: [...PLAN_HARNESS_VALUES] },\n mode: { type: \"string\", enum: [...PLAN_MODE_VALUES] },\n resumeContext: { type: \"string\" },\n related: { type: \"string\" },\n blocks: { type: \"string\" },\n claim: { type: \"boolean\" },\n fromSearch: { type: \"string\" },\n stepTitle: { type: \"string\" },\n stepBody: { type: \"string\" },\n stepOwner: { type: \"string\" },\n stepStatus: { type: \"string\", enum: [...PLAN_STEP_STATUS_VALUES] },\n stepEvidence: { type: \"string\" },\n stepBlockedReason: { type: \"string\" },\n stepReplacement: { type: \"string\" },\n dependsOn: { type: \"string\" },\n link: { type: \"string\" },\n linkKind: { type: \"string\", enum: [...PLAN_STEP_LINK_KIND_VALUES] },\n linkNote: { type: \"string\" },\n promoteToItemDep: { type: \"boolean\" },\n allowMultipleActive: { type: \"boolean\" },\n file: { anyOf: [{ type: \"string\" }, { type: \"array\", items: { type: \"string\" } }] },\n test: { anyOf: [{ type: \"string\" }, { type: \"array\", items: { type: \"string\" } }] },\n doc: { anyOf: [{ type: \"string\" }, { type: \"array\", items: { type: \"string\" } }] },\n decisionText: { type: \"string\" },\n decision: { type: \"string\" },\n decisionRationale: { type: \"string\" },\n decisionEvidence: { type: \"string\" },\n discoveryText: { type: \"string\" },\n discovery: { type: \"string\" },\n validationText: { type: \"string\" },\n validation: { type: \"string\" },\n validationCommand: { type: \"string\" },\n validationExpected: { type: \"string\" },\n steps: { type: \"array\", items: { type: \"string\" } },\n materializeType: { type: \"string\" },\n materializeParent: { type: \"string\" },\n materializeTags: { type: \"string\" },\n};\n\nexport const PLAN_ACTION_PARAMETER_METADATA: Record<string, { description: string; examples?: unknown[] }> = {\n subcommand: {\n description: \"Plan workflow operation to run.\",\n examples: [\"create\", \"show\", \"add-step\", \"approve\"],\n },\n stepRef: {\n description: \"Plan step id or order for step lifecycle subcommands.\",\n examples: [\"plan-step-001\", \"1\"],\n },\n reorderTo: {\n description: \"New integer order for reorder-step.\",\n examples: [1, \"2\"],\n },\n scope: {\n description: \"Short free-text scope statement describing what the Plan covers.\",\n examples: [\"Release readiness audit\", \"Search package migration\"],\n },\n mode: {\n description: \"Plan lifecycle mode.\",\n examples: [\"draft\", \"research\", \"approved\"],\n },\n file: {\n description: \"File link to attach while creating or materializing a Plan.\",\n examples: [\"path=src/cli.ts,note=implementation surface\"],\n },\n test: {\n description: \"Test command link to attach while creating or materializing a Plan.\",\n examples: [\"command=pnpm build,timeout_seconds=300\"],\n },\n doc: {\n description: \"Documentation link to attach while creating or materializing a Plan.\",\n examples: [\"path=docs/SDK.md,note=public API reference\"],\n },\n};\n\nexport const PM_TOOL_PARAMETER_METADATA: Record<string, { description: string; examples?: unknown[] }> = {\n action: {\n description: \"Tool action to execute.\",\n },\n path: {\n description: \"Optional PM data root override for this invocation.\",\n examples: [\".agents/pm\"],\n },\n scope: {\n description: \"Scope selector for commands that operate on project or global state. Linked files, docs, and tests default to project scope when omitted.\",\n examples: [\"project\", \"global\"],\n },\n detail: {\n description: \"Detail mode for commands that support concise and deep diagnostics.\",\n examples: [\"summary\", \"deep\"],\n },\n trace: {\n description: \"When true for extension-doctor, include actionable registration traces in deep diagnostics.\",\n },\n reload: {\n description: \"When true for extension action payloads, trigger cache-busted extension module reload.\",\n },\n watch: {\n description: \"When true for extension-reload/extension action payloads, enable watch mode semantics.\",\n },\n runtimeProbe: {\n description: \"When true for extension-manage, run a doctor-like runtime activation probe for parity fields.\",\n },\n fixManagedState: {\n description: \"When true for extension-manage/extension-doctor, adopt unmanaged extensions before diagnostics/update checks.\",\n },\n target: {\n description: \"Positional target argument for the selected action (ID, source, package source, or extension name).\",\n examples: [\"pm-a1b2\", \".agents/pm/extensions/sample\", \"sample-extension\"],\n },\n github: {\n description: \"GitHub shorthand owner/repo[/path] source for package/extension install actions.\",\n examples: [\"org/repo/extensions/sample\"],\n },\n ref: {\n description: \"Git ref/branch/tag used when installing from GitHub shorthand/URL sources.\",\n examples: [\"main\", \"v1.0.0\"],\n },\n cliOnly: {\n description: \"Restrict upgrade to the pm CLI/SDK npm package.\",\n },\n packagesOnly: {\n description: \"Restrict upgrade to managed installable pm packages.\",\n },\n repair: {\n description: \"Force npm global reinstall semantics when upgrading the pm CLI/SDK.\",\n },\n tag: {\n description: \"npm version or dist-tag used for CLI and registry package upgrades.\",\n examples: [\"latest\", \"next\", \"2026.5.11\"],\n },\n packageName: {\n description: \"Override the pm CLI package name for self-upgrade automation and tests.\",\n examples: [\"@unbrained/pm-cli\"],\n },\n json: {\n description: \"Emit machine-readable JSON output.\",\n },\n quiet: {\n description: \"Suppress stdout payload output.\",\n },\n noExtensions: {\n description: \"Disable extension loading for this invocation.\",\n },\n noPager: {\n description: \"Disable pager integration for help and long output.\",\n },\n profile: {\n description: \"Emit deterministic timing diagnostics to stderr.\",\n },\n timeoutMs: {\n description: \"Tool execution timeout in milliseconds.\",\n examples: [120000],\n },\n id: {\n description: \"Item identifier for read or mutation actions.\",\n examples: [\"pm-a1b2\"],\n },\n runId: {\n description: \"Background test run identifier.\",\n examples: [\"tr-kq9x3f-93acde\"],\n },\n title: {\n description: \"Item title text.\",\n },\n description: {\n description: \"Item description text.\",\n },\n type: {\n description: \"Item type name from the active runtime type registry.\",\n examples: [\"Task\", \"Feature\"],\n },\n subcommand: {\n description: \"Subcommand for the schema action.\",\n examples: [\"add-type\"],\n },\n name: {\n description: \"Custom item type name to register (for schema add-type).\",\n examples: [\"Spike\"],\n },\n defaultStatus: {\n description: \"Default status hint recorded for a custom item type.\",\n examples: [\"open\"],\n },\n alias: {\n description: \"Aliases for the custom item type (repeatable).\",\n examples: [[\"spike\", \"research\"]],\n },\n preset: {\n description: \"Governance preset for initialization flows.\",\n examples: [\"minimal\", \"default\", \"strict\"],\n },\n defaults: {\n description: \"Use non-interactive setup defaults during initialization.\",\n },\n agentGuidance: {\n description: \"Control AGENTS.md/CLAUDE.md guidance behavior during init: ask, add, skip, or status.\",\n examples: [\"ask\", \"add\", \"skip\", \"status\"],\n },\n withPackages: {\n description: \"Install all bundled first-party pm packages during initialization.\",\n },\n createMode: {\n description: \"Create required-option policy mode.\",\n examples: [\"strict\", \"progressive\"],\n },\n schedulePreset: {\n description: \"Schedule-centric create preset for Reminder, Meeting, and Event types.\",\n examples: [\"lightweight\"],\n },\n status: {\n description: \"Item status value.\",\n examples: [\"open\", \"in_progress\"],\n },\n priority: {\n description: \"Priority value in range 0..4.\",\n examples: [0, 1, \"2\"],\n },\n order: {\n description: \"Planning order/rank value for create/update, or sort direction (asc|desc) for list-family sorting.\",\n examples: [0, 1, \"2\", \"asc\", \"desc\"],\n },\n sort: {\n description: \"List-family sort field selector.\",\n examples: [\"priority\", \"deadline\", \"updated_at\", \"created_at\", \"title\", \"parent\"],\n },\n tags: {\n description: \"Comma-delimited tag list.\",\n examples: [\"pm-cli,agent-ux\"],\n },\n addTags: {\n description: \"Tags to add to the existing list without replacing it. Each entry may be CSV or a JSON array.\",\n examples: [[\"agent-ux\"], [\"fix\", \"security\"]],\n },\n removeTags: {\n description: \"Tags to remove from the existing list. Each entry may be CSV or a JSON array.\",\n examples: [[\"stale\"], [\"legacy\", \"wontfix\"]],\n },\n deadline: {\n description: \"ISO/date timestamp or relative offset (+6h/+1d/+2w/+6m).\",\n examples: [\"2026-04-01T00:00:00.000Z\", \"+1d\"],\n },\n estimate: {\n description: \"Estimated effort in minutes.\",\n examples: [60, \"120\"],\n },\n acceptanceCriteria: {\n description: \"Acceptance criteria text.\",\n },\n author: {\n description: \"Mutation author identity.\",\n examples: [\"codex-agent\"],\n },\n message: {\n description: \"History message for mutation audit trail.\",\n },\n assignee: {\n description: \"Assignee identity.\",\n examples: [\"codex-agent\"],\n },\n assigneeFilter: {\n description: \"Assignee presence selector for list/calendar/context/comments-audit filters.\",\n examples: [\"assigned\", \"unassigned\"],\n },\n parent: {\n description: \"Parent item ID filter for hierarchical list queries.\",\n examples: [\"pm-epic01\"],\n },\n unset: {\n description: \"Repeatable list of front-matter fields to clear explicitly during create/update mutations.\",\n examples: [[\"deadline\", \"assignee\"], [\"close-reason\"]],\n },\n clearDeps: {\n description: \"When true, clear linked dependencies.\",\n },\n replaceDeps: {\n description: \"When true for update, atomically replace dependencies with the supplied --dep values.\",\n },\n replaceTests: {\n description: \"When true for update, atomically replace linked tests with the supplied --test values.\",\n },\n clearComments: {\n description: \"When true, clear item comments.\",\n },\n clearNotes: {\n description: \"When true, clear item notes.\",\n },\n clearLearnings: {\n description: \"When true, clear item learnings.\",\n },\n clearFiles: {\n description: \"When true, clear linked files.\",\n },\n clearTests: {\n description: \"When true, clear linked tests.\",\n },\n clearDocs: {\n description: \"When true, clear linked docs.\",\n },\n clearReminders: {\n description: \"When true, clear reminders.\",\n },\n clearEvents: {\n description: \"When true, clear events.\",\n },\n clearTypeOptions: {\n description: \"When true, clear type option metadata.\",\n },\n clearCriteria: {\n description:\n \"When true for config set criteria-list keys (definition-of-done, metadata-required-fields, lifecycle pattern lists), clear the criteria list.\",\n },\n mode: {\n description:\n \"Mode selector for search/reindex (keyword|semantic|hybrid) and dedupe-audit (title_exact|title_fuzzy|parent_scope).\",\n examples: [\"keyword\", \"hybrid\", \"title_exact\"],\n },\n op: {\n description: \"History operation filter for activity output.\",\n examples: [\"create\", \"update\", \"close\", \"update_audit\"],\n },\n fullPeriod: {\n description: \"For day/week/month calendar views, include the full anchored period instead of clipping the start to now.\",\n },\n progress: {\n description: \"Emit progress diagnostics to stderr for long-running operations.\",\n },\n background: {\n description: \"Run linked tests in managed background mode.\",\n },\n envSet: {\n description: \"Repeatable runtime environment KEY=VALUE overrides for linked-test execution.\",\n examples: [[\"PORT=0\", \"PLAYWRIGHT_HTML_OPEN=never\"]],\n },\n envClear: {\n description: \"Repeatable runtime environment variable names to clear before linked-test execution.\",\n examples: [[\"PLAYWRIGHT_BASE_URL\"]],\n },\n sharedHostSafe: {\n description: \"Apply additive shared-host-safe runtime defaults during linked-test execution.\",\n },\n pmContext: {\n description:\n \"PM linked-test context mode (schema keeps isolated tracker data; tracker seeds source tracker data; auto uses tracker for PM tracker-read linked commands).\",\n examples: [\"schema\", \"tracker\", \"auto\"],\n },\n overrideLinkedPmContext: {\n description: \"Force run-level --pm-context to override per-linked-test pm_context_mode metadata for all linked-test entries.\",\n },\n failOnContextMismatch: {\n description: \"Fail linked PM command runs when source and sandbox tracker item counts differ.\",\n },\n failOnSkipped: {\n description: \"Treat skipped linked tests as dependency-failed policy violations.\",\n },\n failOnEmptyTestRun: {\n description: \"Treat successful linked-test commands that report zero executed tests as failures.\",\n },\n requireAssertionsForPm: {\n description: \"Require assertion metadata for linked PM command test entries during run execution.\",\n },\n checkContext: {\n description: \"Run linked PM command context preflight diagnostics before command execution.\",\n },\n autoPmContext: {\n description:\n \"Auto-remediate PM tracker-read linked commands by routing those entries through tracker context regardless of linked-test pm_context_mode overrides.\",\n },\n dryRun: {\n description: \"Preview command effects without mutating storage artifacts.\",\n },\n gcScope: {\n description: \"Repeatable gc scope selector values (index, embeddings, runtime).\",\n examples: [[\"index\", \"embeddings\"], [\"runtime\"]],\n },\n offset: {\n description: \"Number of matching rows to skip before limit is applied.\",\n examples: [0, 50, \"100\"],\n },\n limitItems: {\n description: \"Maximum number of filtered items to include in comments-audit output (alias: --limit).\",\n examples: [10, \"25\"],\n },\n fullHistory: {\n description: \"When true for comments-audit, export full per-item comment history rows; cannot be combined with latest.\",\n },\n latest: {\n description: \"Number of most recent comments to include per item in comments-audit output (use 0 for summary-only item rows).\",\n examples: [0, 1, \"3\"],\n },\n literal: {\n description: \"Repeatable literal matcher used by history-redact to scrub exact string values.\",\n examples: [\"[redacted_path_prefix]/private/path\"],\n },\n regex: {\n description:\n \"Repeatable regex matcher used by history-redact. Accepts either /pattern/flags or a raw pattern (global mode is auto-enabled).\",\n examples: [\"/192\\\\\\\\.168\\\\\\\\.[0-9.]+/g\", \"token=[A-Za-z0-9_-]+\"],\n },\n replacement: {\n description: 'Replacement text used by history-redact (defaults to \"[redacted]\").',\n examples: [\"[scrubbed_path]\"],\n },\n validateClose: {\n description: 'Close-time metadata validation mode (\"off\", \"warn\", or \"strict\").',\n examples: [\"off\", \"warn\", \"strict\"],\n },\n checkMetadata: {\n description: \"Run metadata completeness checks.\",\n },\n metadataProfile: {\n description: \"Select metadata validation profile for --check-metadata.\",\n examples: [\"core\", \"strict\", \"custom\"],\n },\n checkResolution: {\n description: \"Run closed-item resolution metadata checks.\",\n },\n checkLifecycle: {\n description: \"Run active-item lifecycle governance drift checks.\",\n },\n checkStaleBlockers: {\n description: \"Include stale blocker-pattern diagnostics in lifecycle checks.\",\n },\n dependencyCycleSeverity: {\n description: \"Set dependency-cycle warning policy for lifecycle checks.\",\n examples: [\"off\", \"warn\", \"error\"],\n },\n checkFiles: {\n description: \"Run linked-file and orphaned-file checks.\",\n },\n strictDirectories: {\n description: \"Treat optional item-type directories as required health failures.\",\n },\n checkOnly: {\n description: \"For health action, run read-only diagnostics without refreshing vectors.\",\n },\n checkTelemetry: {\n description: \"For health action, probe telemetry endpoint health and include network diagnostics.\",\n },\n noRefresh: {\n description: \"For health action, skip vector refresh while still running checks.\",\n },\n refreshVectors: {\n description: \"For health action, explicitly refresh stale vectors.\",\n },\n verboseStaleItems: {\n description: \"For health action, include full stale-item arrays in vectorization details.\",\n },\n skipVectors: {\n description: \"For health action, skip vectorization checks for a faster diagnostic run.\",\n },\n skipIntegrity: {\n description: \"For health action, skip item/history file integrity checks for a faster diagnostic run.\",\n },\n skipDrift: {\n description: \"For health action, skip history drift hash checks for a faster diagnostic run.\",\n },\n scanMode: {\n description: \"Select file candidate scan mode for --check-files.\",\n examples: [\"default\", \"tracked-all\", \"tracked-all-strict\"],\n },\n includePmInternals: {\n description: \"Include PM storage internals in tracked-all candidate scans.\",\n },\n verboseFileLists: {\n description: \"For validate action, include full file-path lists for --check-files details.\",\n },\n verboseDiagnostics: {\n description: \"For validate action, include full diagnostic ID lists instead of compact summaries.\",\n },\n strictExit: {\n description: \"Return non-zero exit when health/validate/extension-doctor warnings are present.\",\n },\n failOnWarn: {\n description: \"Alias for strictExit in health/validate/extension-doctor action payloads.\",\n },\n checkHistoryDrift: {\n description: \"Run item/history hash drift checks.\",\n },\n checkCommandReferences: {\n description: \"Run linked-command PM-ID reference checks.\",\n },\n allowAuditNote: {\n description: \"For notes action, allow non-owner append-only note audits without requiring --force.\",\n },\n allowAuditLearning: {\n description: \"For learnings action, allow non-owner append-only learning audits without requiring --force.\",\n },\n allowAuditComment: {\n description: \"For comments action, allow non-owner append-only comment audits without requiring --force.\",\n },\n stdin: {\n description: \"When true for comments action, read comment text from piped stdin (supports multiline markdown).\",\n },\n file: {\n description: \"Path to input file for actions that read payload text, such as comments --file.\",\n examples: [\"notes/comment.md\"],\n },\n allowAuditUpdate: {\n description: \"Allow non-owner metadata-only update audits without requiring --force.\",\n },\n allowAuditDepUpdate: {\n description: \"Allow non-owner append-only dependency update audits without requiring --force.\",\n },\n allowAuditRelease: {\n description: \"Allow non-owner release handoffs that clear assignee metadata without requiring --force.\",\n },\n preserveSourceIds: {\n description: \"Preserve explicit source IDs during Beads imports instead of normalizing to tracker prefix.\",\n examples: [true],\n },\n appendStable: {\n description: \"When true for files action, preserve existing linked-file order and append new links without full-array resorting.\",\n },\n discover: {\n description: \"When true for files action, use `pm files discover <id>` to scan item text for referenced file paths.\",\n },\n apply: {\n description: \"When true for files discovery, add missing discovered file links instead of returning a dry-run preview.\",\n },\n discoveryNote: {\n description: \"Note attached to file links added by files discovery.\",\n examples: [\"discovered from item text\"],\n },\n stream: {\n description:\n \"Stream selector: test-runs logs accepts stdout|stderr|both; activity accepts boolean/rows|ndjson|jsonl for line-delimited output.\",\n examples: [\"stderr\", \"stdout\", \"both\", \"rows\", \"ndjson\", \"jsonl\", true],\n },\n tail: {\n description: \"Number of lines to tail for background run logs.\",\n examples: [100],\n },\n query: {\n description: \"Search query text for search action.\",\n },\n keywords: {\n description: \"Alias for query in search action payloads.\",\n },\n includeLinked: {\n description: \"Include readable linked docs/files/tests content in keyword and hybrid lexical scoring.\",\n },\n titleExact: {\n description: \"For search action, require exact normalized title match for the full query string.\",\n },\n phraseExact: {\n description: \"For search action, require exact normalized query phrase match in item text fields.\",\n },\n includeBody: {\n description: \"When true for list-family actions, include item body text in projected rows.\",\n },\n compact: {\n description: \"Render compact projection output for search and list-family actions.\",\n },\n full: {\n description: \"Enable command-specific full/detail output mode when supported, such as deep item reads for get or full payload mode for search/history.\",\n },\n fields: {\n description: \"Comma-separated projection fields for get, search, or list-family outputs.\",\n examples: [\"id,title,status,parent,type\", \"id,title,score,matched_fields\"],\n },\n groupBy: {\n description:\n \"Comma-separated aggregate grouping fields (supported: parent,type,priority,status,assignee,tags,sprint,release).\",\n examples: [\"parent,type\", \"type,status\", \"priority,assignee\", \"tags\", \"sprint,release\"],\n },\n count: {\n description: \"Enable grouped count output for aggregate action.\",\n },\n includeUnparented: {\n description: \"Include unparented rows when aggregate grouping includes parent.\",\n },\n maxDepth: {\n description: \"Maximum dependency traversal depth for deps action (0 keeps only the root node).\",\n examples: [0, 1, \"2\"],\n },\n collapse: {\n description: 'Dependency tree collapse mode for deps action (\"none\" or \"repeated\").',\n examples: [\"none\", \"repeated\"],\n },\n summary: {\n description: \"When true for deps action, return counts only without full tree/graph payloads.\",\n },\n threshold: {\n description: \"Dedupe-audit fuzzy title similarity threshold between 0 and 1.\",\n examples: [0.5, \"0.75\"],\n },\n shell: {\n description: \"Shell target for completion generation.\",\n examples: [\"bash\"],\n },\n eagerTags: {\n description: \"When true for completion, eagerly embed current tracker tags into generated scripts (legacy mode).\",\n },\n contractAction: {\n description: \"Filter contracts schema to one tool action.\",\n examples: [\"create\", \"update\"],\n },\n command: {\n description: \"Scope contracts output to one CLI command name; action/schema surfaces narrow by default.\",\n examples: [\"create\", \"search\", \"list\"],\n },\n schemaOnly: {\n description: \"When true, contracts action returns schema-focused payloads (mutually exclusive with flagsOnly/availabilityOnly).\",\n },\n flagsOnly: {\n description: \"When true, contracts action returns only command flag surface payloads (mutually exclusive projection mode).\",\n },\n availabilityOnly: {\n description: \"When true, contracts action returns only action availability payloads (mutually exclusive projection mode).\",\n },\n runtimeOnly: {\n description: \"When true, contracts action only includes actions invocable in the current runtime.\",\n },\n activeOnly: {\n description: \"Alias for runtimeOnly in contracts action payloads.\",\n },\n depth: {\n description: \"Context depth level controlling how many sections are included (brief=focus+agenda, standard=+hierarchy/activity/progress/workload, deep=all sections).\",\n examples: [\"brief\", \"standard\", \"deep\"],\n },\n section: {\n description: \"Repeatable section selector for context; overrides --depth when provided.\",\n examples: [[\"hierarchy\", \"activity\"], [\"blockers\", \"files\", \"staleness\"]],\n },\n activityLimit: {\n description: \"Maximum number of recent activity entries to include in context output.\",\n examples: [5, 10, \"20\"],\n },\n staleThreshold: {\n description: \"Staleness cutoff in days for context staleness section (e.g. 7 or 7d).\",\n examples: [\"7\", \"14d\", \"30\"],\n },\n};\n", "export type { CommanderOptionAliasContract, CommanderOptionRegistrationContract } from \"./cli-contracts/commander-types.js\";\nexport {\n ACTIVITY_COMMANDER_STRING_OPTION_CONTRACTS,\n CALENDAR_COMMANDER_STRING_OPTION_CONTRACTS,\n CONTEXT_COMMANDER_STRING_OPTION_CONTRACTS,\n LIST_COMMANDER_STRING_OPTION_CONTRACTS,\n SEARCH_COMMANDER_STRING_OPTION_CONTRACTS,\n readFirstStringFromCommanderOptions,\n readStringArrayFromCommanderOptions,\n} from \"./cli-contracts/commander-types.js\";\nexport {\n CREATE_COMMANDER_OPTION_REGISTRATION_CONTRACTS,\n CREATE_COMMANDER_REPEATABLE_OPTION_CONTRACTS,\n CREATE_COMMANDER_STRING_OPTION_CONTRACTS,\n UPDATE_COMMANDER_OPTION_REGISTRATION_CONTRACTS,\n UPDATE_COMMANDER_REPEATABLE_OPTION_CONTRACTS,\n UPDATE_COMMANDER_STRING_OPTION_CONTRACTS,\n} from \"./cli-contracts/commander-mutation-options.js\";\n// PM_* enum/guard contracts and the bulk tool-parameter property/metadata data\n// tables live in sibling modules and are re-exported here so existing import\n// sites (sdk/index.ts, mcp/server.ts, commands/contracts.ts, completion.ts, …)\n// keep importing everything from \"./cli-contracts.js\" unchanged.\nexport {\n PM_EXTENSION_CAPABILITY_CONTRACTS,\n PM_EXTENSION_SERVICE_NAME_CONTRACTS,\n PM_EXTENSION_POLICY_MODE_CONTRACTS,\n PM_EXTENSION_TRUST_MODE_CONTRACTS,\n PM_EXTENSION_SANDBOX_PROFILE_CONTRACTS,\n PM_EXTENSION_POLICY_SURFACE_CONTRACTS,\n PM_CORE_COMMAND_NAMES,\n PM_TOOL_ACTIONS,\n isPmToolAction,\n isPmExtensionCapabilityContract,\n isPmExtensionServiceNameContract,\n isPmExtensionPolicyModeContract,\n isPmExtensionPolicySurfaceContract,\n} from \"./cli-contracts/enum-contracts.js\";\nexport type {\n PmExtensionCapabilityContract,\n PmExtensionServiceNameContract,\n PmExtensionPolicyModeContract,\n PmExtensionTrustModeContract,\n PmExtensionSandboxProfileContract,\n PmExtensionPolicySurfaceContract,\n PmToolAction,\n} from \"./cli-contracts/enum-contracts.js\";\nexport {\n TOOL_LIST_FILTER_OPTION_CONTRACTS,\n TOOL_AGGREGATE_OPTION_CONTRACTS,\n TOOL_DEDUPE_AUDIT_OPTION_CONTRACTS,\n TOOL_SEARCH_FILTER_OPTION_CONTRACTS,\n TOOL_SHARED_CREATE_UPDATE_OPTION_CONTRACTS,\n TOOL_CREATE_OPTION_CONTRACTS,\n TOOL_UPDATE_OPTION_CONTRACTS,\n TOOL_UPDATE_MANY_FILTER_OPTION_CONTRACTS,\n TOOL_NORMALIZE_FILTER_OPTION_CONTRACTS,\n TOOL_CALENDAR_OPTION_CONTRACTS,\n TOOL_ACTIVITY_OPTION_CONTRACTS,\n TOOL_CONTEXT_OPTION_CONTRACTS,\n TOOL_DEPS_OPTION_CONTRACTS,\n} from \"./cli-contracts/tool-option-contracts.js\";\nimport { PM_TOOL_ACTIONS, type PmToolAction } from \"./cli-contracts/enum-contracts.js\";\nimport {\n TOOL_CREATE_OPTION_CONTRACTS,\n TOOL_SHARED_CREATE_UPDATE_OPTION_CONTRACTS,\n TOOL_UPDATE_OPTION_CONTRACTS,\n TOOL_UPDATE_MANY_FILTER_OPTION_CONTRACTS,\n TOOL_NORMALIZE_FILTER_OPTION_CONTRACTS,\n TOOL_CONTEXT_OPTION_CONTRACTS,\n TOOL_ACTIVITY_OPTION_CONTRACTS,\n TOOL_LIST_FILTER_OPTION_CONTRACTS,\n TOOL_AGGREGATE_OPTION_CONTRACTS,\n TOOL_DEDUPE_AUDIT_OPTION_CONTRACTS,\n TOOL_SEARCH_FILTER_OPTION_CONTRACTS,\n} from \"./cli-contracts/tool-option-contracts.js\";\nimport {\n PM_TOOL_PARAMETER_PROPERTIES,\n PM_TOOL_PARAMETER_METADATA,\n PLAN_ACTION_PARAMETER_PROPERTIES,\n PLAN_ACTION_PARAMETER_METADATA,\n} from \"./cli-contracts/tool-parameter-tables.js\";\n\nexport interface CliFlagContract {\n flag: string;\n short?: string;\n aliases?: string[];\n description?: string;\n required?: boolean;\n repeatable?: boolean;\n /**\n * Comma-separated multi-value flag whose repeated occurrences should\n * accumulate (e.g. `--tag a --tag b` ≡ `--tags a,b`). Argv normalization\n * coalesces repeats of these into one comma-joined token to avoid\n * scalar keep-last data loss in Commander.\n */\n list?: boolean;\n value_name?: string;\n value_type?: \"string\" | \"number\" | \"boolean\";\n}\n\nexport interface ToolOptionFlagContract {\n param: string;\n flag: string;\n allowEmpty?: boolean;\n repeatable?: boolean;\n booleanish?: boolean;\n}\n\nfunction normalizeUniqueStringList(values: Iterable<string>): string[] {\n return [...new Set(Array.from(values).filter((value) => value.trim().length > 0))];\n}\n\nfunction normalizeFlagAliasKey(flag: string): string {\n if (!flag.startsWith(\"--\")) {\n return flag;\n }\n return `--${flag.slice(2).replaceAll(\"_\", \"-\")}`;\n}\n\nexport function withFlagAliasMetadata(flagContracts: CliFlagContract[]): CliFlagContract[] {\n const aliasesByCanonical = new Map<string, Set<string>>();\n for (const contract of flagContracts) {\n const canonical = normalizeFlagAliasKey(contract.flag);\n const bucket = aliasesByCanonical.get(canonical) ?? new Set<string>();\n if (contract.flag !== canonical) {\n bucket.add(contract.flag);\n }\n for (const alias of contract.aliases ?? []) {\n if (alias !== canonical) {\n bucket.add(alias);\n }\n }\n aliasesByCanonical.set(canonical, bucket);\n }\n\n return flagContracts.map((contract) => {\n const canonical = normalizeFlagAliasKey(contract.flag);\n if (contract.flag !== canonical) {\n return contract;\n }\n const aliases = normalizeUniqueStringList([...(contract.aliases ?? []), ...(aliasesByCanonical.get(canonical) ?? [])]).filter(\n (alias) => alias !== canonical,\n );\n if (aliases.length === 0) {\n return contract;\n }\n return {\n ...contract,\n aliases,\n };\n });\n}\n\nexport function compactFlagAliasContracts(flagContracts: CliFlagContract[]): CliFlagContract[] {\n const withAliases = withFlagAliasMetadata(flagContracts);\n const canonicalFlags = new Set(withAliases.map((contract) => contract.flag));\n return withAliases.filter((contract) => {\n const canonical = normalizeFlagAliasKey(contract.flag);\n return contract.flag === canonical || !canonicalFlags.has(canonical);\n });\n}\n\nexport const SUBCOMMAND_GLOBAL_FLAG_CONTRACTS: CliFlagContract[] = [\n { flag: \"--json\" },\n { flag: \"--quiet\" },\n { flag: \"--no-changed-fields\" },\n { flag: \"--path\" },\n { flag: \"--no-extensions\" },\n { flag: \"--no-pager\" },\n { flag: \"--profile\" },\n { flag: \"--help\" },\n];\n\nexport const GLOBAL_FLAG_CONTRACTS: CliFlagContract[] = [\n ...SUBCOMMAND_GLOBAL_FLAG_CONTRACTS,\n { flag: \"--version\" },\n];\n\nexport const LIST_FILTER_FLAG_CONTRACTS: CliFlagContract[] = [\n { flag: \"--status\", list: true },\n { flag: \"--type\" },\n { flag: \"--tag\" },\n { flag: \"--priority\" },\n { flag: \"--deadline-before\" },\n { flag: \"--deadline-after\" },\n { flag: \"--assignee\" },\n { flag: \"--assignee-filter\" },\n { flag: \"--assignee_filter\" },\n { flag: \"--parent\" },\n { flag: \"--sprint\" },\n { flag: \"--release\" },\n { flag: \"--limit\" },\n { flag: \"--offset\" },\n { flag: \"--compact\" },\n { flag: \"--brief\" },\n { flag: \"--full\" },\n { flag: \"--fields\", list: true },\n { flag: \"--sort\" },\n { flag: \"--order\" },\n { flag: \"--include-body\" },\n { flag: \"--stream\" },\n];\n\nexport const AGGREGATE_FLAG_CONTRACTS: CliFlagContract[] = [\n { flag: \"--group-by\", list: true },\n { flag: \"--count\" },\n { flag: \"--include-unparented\" },\n { flag: \"--include_unparented\" },\n { flag: \"--status\" },\n { flag: \"--type\" },\n { flag: \"--tag\" },\n { flag: \"--priority\" },\n { flag: \"--deadline-before\" },\n { flag: \"--deadline-after\" },\n { flag: \"--assignee\" },\n { flag: \"--assignee-filter\" },\n { flag: \"--assignee_filter\" },\n { flag: \"--parent\" },\n { flag: \"--sprint\" },\n { flag: \"--release\" },\n];\n\nexport const DEDUPE_AUDIT_FLAG_CONTRACTS: CliFlagContract[] = [\n { flag: \"--mode\" },\n { flag: \"--limit\" },\n { flag: \"--threshold\" },\n { flag: \"--status\" },\n { flag: \"--type\" },\n { flag: \"--tag\" },\n { flag: \"--priority\" },\n { flag: \"--deadline-before\" },\n { flag: \"--deadline-after\" },\n { flag: \"--assignee\" },\n { flag: \"--assignee-filter\" },\n { flag: \"--assignee_filter\" },\n { flag: \"--parent\" },\n { flag: \"--sprint\" },\n { flag: \"--release\" },\n];\n\nexport const COMMENTS_AUDIT_FLAG_CONTRACTS: CliFlagContract[] = [\n { flag: \"--status\" },\n { flag: \"--type\" },\n { flag: \"--assignee\" },\n { flag: \"--assignee-filter\" },\n { flag: \"--assignee_filter\" },\n { flag: \"--parent\" },\n { flag: \"--tag\" },\n { flag: \"--sprint\" },\n { flag: \"--release\" },\n { flag: \"--priority\" },\n { flag: \"--limit-items\" },\n { flag: \"--limit\" },\n { flag: \"--full-history\" },\n { flag: \"--latest\" },\n];\n\nexport const COMMENTS_FLAG_CONTRACTS: CliFlagContract[] = [\n { flag: \"--add\", aliases: [\"--comment\"] },\n { flag: \"--stdin\" },\n { flag: \"--file\" },\n { flag: \"--limit\" },\n { flag: \"--author\" },\n { flag: \"--message\" },\n { flag: \"--allow-audit-comment\" },\n { flag: \"--force\" },\n];\n\nexport const NOTES_FLAG_CONTRACTS: CliFlagContract[] = [\n { flag: \"--add\", aliases: [\"--note\"] },\n { flag: \"--limit\" },\n { flag: \"--author\" },\n { flag: \"--message\" },\n { flag: \"--allow-audit-note\" },\n { flag: \"--allow-audit-comment\" },\n { flag: \"--force\" },\n];\n\nexport const LEARNINGS_FLAG_CONTRACTS: CliFlagContract[] = [\n { flag: \"--add\", aliases: [\"--learning\"] },\n { flag: \"--limit\" },\n { flag: \"--author\" },\n { flag: \"--message\" },\n { flag: \"--allow-audit-learning\" },\n { flag: \"--allow-audit-comment\" },\n { flag: \"--force\" },\n];\n\nexport const FILES_FLAG_CONTRACTS: CliFlagContract[] = [\n { flag: \"--add\" },\n { flag: \"--add-glob\" },\n { flag: \"--remove\" },\n { flag: \"--migrate\" },\n { flag: \"--list\" },\n { flag: \"--append-stable\" },\n { flag: \"--validate-paths\" },\n { flag: \"--audit\" },\n { flag: \"--author\" },\n { flag: \"--message\" },\n { flag: \"--force\" },\n];\n\nexport const DOCS_FLAG_CONTRACTS: CliFlagContract[] = [\n { flag: \"--add\" },\n { flag: \"--add-glob\" },\n { flag: \"--remove\" },\n { flag: \"--migrate\" },\n { flag: \"--validate-paths\" },\n { flag: \"--audit\" },\n { flag: \"--author\" },\n { flag: \"--message\" },\n { flag: \"--force\" },\n];\n\nexport const HISTORY_FLAG_CONTRACTS: CliFlagContract[] = [\n { flag: \"--limit\" },\n { flag: \"--compact\" },\n { flag: \"--full\" },\n { flag: \"--diff\" },\n { flag: \"--verify\" },\n];\n\nexport const HISTORY_REDACT_FLAG_CONTRACTS: CliFlagContract[] = [\n { flag: \"--literal\" },\n { flag: \"--regex\" },\n { flag: \"--replacement\" },\n { flag: \"--dry-run\" },\n { flag: \"--author\" },\n { flag: \"--message\" },\n { flag: \"--force\" },\n];\n\nexport const HISTORY_REPAIR_FLAG_CONTRACTS: CliFlagContract[] = [\n { flag: \"--dry-run\" },\n { flag: \"--author\" },\n { flag: \"--message\" },\n { flag: \"--force\" },\n];\n\nexport const SCHEMA_FLAG_CONTRACTS: CliFlagContract[] = [\n { flag: \"--description\" },\n { flag: \"--default-status\", aliases: [\"--default_status\"] },\n { flag: \"--folder\" },\n { flag: \"--alias\" },\n { flag: \"--author\" },\n { flag: \"--force\" },\n];\n\nexport const PLAN_FLAG_CONTRACTS: CliFlagContract[] = [\n { flag: \"--title\" },\n { flag: \"--description\" },\n { flag: \"--scope\" },\n { flag: \"--parent\" },\n { flag: \"--related\" },\n { flag: \"--blocks\" },\n { flag: \"--blocked-by\", aliases: [\"--blocked_by\"] },\n { flag: \"--harness\" },\n { flag: \"--mode\" },\n { flag: \"--resume-context\", aliases: [\"--resume_context\"] },\n { flag: \"--tags\", list: true },\n { flag: \"--priority\" },\n { flag: \"--body\" },\n { flag: \"--claim\" },\n { flag: \"--from-search\", aliases: [\"--from_search\"] },\n { flag: \"--step-title\", aliases: [\"--step\", \"--step_title\"] },\n { flag: \"--step-body\", aliases: [\"--step_body\"] },\n { flag: \"--step-owner\", aliases: [\"--step_owner\"] },\n { flag: \"--step-status\", aliases: [\"--step_status\"] },\n { flag: \"--step-evidence\", aliases: [\"--step_evidence\"] },\n { flag: \"--step-blocked-reason\", aliases: [\"--step_blocked_reason\"] },\n { flag: \"--step-replacement\", aliases: [\"--step_replacement\"] },\n { flag: \"--depends-on\", aliases: [\"--depends_on\"] },\n { flag: \"--link\" },\n { flag: \"--link-kind\", aliases: [\"--link_kind\"] },\n { flag: \"--link-note\", aliases: [\"--link_note\"] },\n { flag: \"--promote-to-item-dep\", aliases: [\"--promote_to_item_dep\"] },\n { flag: \"--allow-multiple-active\", aliases: [\"--allow_multiple_active\"] },\n { flag: \"--file\" },\n { flag: \"--test\" },\n { flag: \"--doc\" },\n { flag: \"--decision-text\", aliases: [\"--decision_text\", \"--decision\"] },\n { flag: \"--decision-rationale\", aliases: [\"--decision_rationale\"] },\n { flag: \"--decision-evidence\", aliases: [\"--decision_evidence\"] },\n { flag: \"--discovery-text\", aliases: [\"--discovery_text\", \"--discovery\"] },\n { flag: \"--validation-text\", aliases: [\"--validation_text\", \"--validation\"] },\n { flag: \"--validation-command\", aliases: [\"--validation_command\"] },\n { flag: \"--validation-expected\", aliases: [\"--validation_expected\"] },\n { flag: \"--depth\" },\n { flag: \"--fields\", list: true },\n { flag: \"--steps\" },\n { flag: \"--materialize-type\", aliases: [\"--materialize_type\"] },\n { flag: \"--materialize-parent\", aliases: [\"--materialize_parent\"] },\n { flag: \"--materialize-tags\", aliases: [\"--materialize_tags\"] },\n { flag: \"--author\" },\n { flag: \"--message\" },\n { flag: \"--force\" },\n];\n\nexport const INIT_FLAG_CONTRACTS: CliFlagContract[] = [\n { flag: \"--preset\" },\n { flag: \"--defaults\", short: \"-y\", aliases: [\"--yes\"] },\n { flag: \"--author\" },\n { flag: \"--agent-guidance\" },\n { flag: \"--with-packages\" },\n { flag: \"--verbose\" },\n];\n\nexport const CONFIG_FLAG_CONTRACTS: CliFlagContract[] = [\n { flag: \"--criterion\" },\n { flag: \"--clear-criteria\" },\n { flag: \"--format\" },\n { flag: \"--policy\" },\n { flag: \"--default-depth\" },\n { flag: \"--activity-limit\" },\n { flag: \"--stale-threshold-days\" },\n { flag: \"--section-hierarchy\" },\n { flag: \"--section-activity\" },\n { flag: \"--section-progress\" },\n { flag: \"--section-blockers\" },\n { flag: \"--section-files\" },\n { flag: \"--section-workload\" },\n { flag: \"--section-staleness\" },\n { flag: \"--section-tests\" },\n];\n\nexport const EXTENSION_FLAG_CONTRACTS: CliFlagContract[] = [\n { flag: \"--init\" },\n { flag: \"--scaffold\" },\n { flag: \"--install\" },\n { flag: \"--uninstall\" },\n { flag: \"--explore\" },\n { flag: \"--list\" },\n { flag: \"--manage\" },\n { flag: \"--reload\" },\n { flag: \"--watch\" },\n { flag: \"--doctor\" },\n { flag: \"--catalog\" },\n { flag: \"--adopt\" },\n { flag: \"--adopt-all\" },\n { flag: \"--activate\" },\n { flag: \"--deactivate\" },\n { flag: \"--project\" },\n { flag: \"--local\" },\n { flag: \"--global\" },\n { flag: \"--gh\" },\n { flag: \"--github\" },\n { flag: \"--ref\" },\n { flag: \"--detail\" },\n { flag: \"--trace\" },\n { flag: \"--runtime-probe\" },\n { flag: \"--fix-managed-state\" },\n { flag: \"--strict-exit\" },\n { flag: \"--fail-on-warn\" },\n];\n\nexport const INSTALL_FLAG_CONTRACTS: CliFlagContract[] = [\n { flag: \"--project\" },\n { flag: \"--local\" },\n { flag: \"--global\" },\n { flag: \"--gh\" },\n { flag: \"--github\" },\n { flag: \"--ref\" },\n];\n\nexport const UPGRADE_FLAG_CONTRACTS: CliFlagContract[] = [\n { flag: \"--dry-run\" },\n { flag: \"--cli-only\" },\n { flag: \"--packages-only\" },\n { flag: \"--project\" },\n { flag: \"--local\" },\n { flag: \"--global\" },\n { flag: \"--repair\" },\n { flag: \"--tag\" },\n { flag: \"--package-name\" },\n];\n\nexport const REINDEX_FLAG_CONTRACTS: CliFlagContract[] = [\n { flag: \"--mode\" },\n { flag: \"--progress\" },\n];\n\nexport const CLOSE_FLAG_CONTRACTS: CliFlagContract[] = [\n { flag: \"--reason\" },\n { flag: \"--close-reason\" },\n { flag: \"--author\" },\n { flag: \"--message\" },\n { flag: \"--validate-close\" },\n // pm-fl0c #11 (2026-05-28) + Codex P2 follow-up: inline closure-validation\n // fields. Surface them through the contract so `pm contracts --command\n // close`, the JSON help payload, and bootstrap flag normalization /\n // suggestions all stay consistent with the commander registration.\n { flag: \"--resolution\" },\n { flag: \"--expected-result\", aliases: [\"--expected_result\", \"--expected\"] },\n { flag: \"--actual-result\", aliases: [\"--actual_result\", \"--actual\"] },\n { flag: \"--force\" },\n];\n\nexport const APPEND_FLAG_CONTRACTS: CliFlagContract[] = [\n { flag: \"--body\", short: \"-b\" },\n { flag: \"--author\" },\n { flag: \"--message\" },\n { flag: \"--force\" },\n];\n\nexport const CLAIM_FLAG_CONTRACTS: CliFlagContract[] = [\n { flag: \"--author\" },\n { flag: \"--message\" },\n { flag: \"--force\" },\n];\n\nexport const RESTORE_FLAG_CONTRACTS: CliFlagContract[] = [\n { flag: \"--author\" },\n { flag: \"--message\" },\n { flag: \"--force\" },\n];\n\nexport const DELETE_FLAG_CONTRACTS: CliFlagContract[] = [\n { flag: \"--dry-run\" },\n { flag: \"--author\" },\n { flag: \"--message\" },\n { flag: \"--force\" },\n];\n\nexport const RELEASE_FLAG_CONTRACTS: CliFlagContract[] = [\n { flag: \"--author\" },\n { flag: \"--message\" },\n { flag: \"--allow-audit-release\" },\n { flag: \"--force\" },\n];\n\nexport const START_TASK_FLAG_CONTRACTS: CliFlagContract[] = [\n { flag: \"--author\" },\n { flag: \"--message\" },\n { flag: \"--force\" },\n];\n\nexport const PAUSE_TASK_FLAG_CONTRACTS: CliFlagContract[] = [\n { flag: \"--author\" },\n { flag: \"--message\" },\n { flag: \"--force\" },\n];\n\nexport const CLOSE_TASK_FLAG_CONTRACTS: CliFlagContract[] = [\n { flag: \"--author\" },\n { flag: \"--message\" },\n { flag: \"--validate-close\" },\n { flag: \"--force\" },\n];\n\nexport const TEST_FLAG_CONTRACTS: CliFlagContract[] = [\n { flag: \"--add\" },\n { flag: \"--remove\" },\n { flag: \"--run\" },\n { flag: \"--background\" },\n { flag: \"--timeout\" },\n { flag: \"--progress\" },\n { flag: \"--env-set\" },\n { flag: \"--env-clear\" },\n { flag: \"--shared-host-safe\" },\n { flag: \"--pm-context\" },\n { flag: \"--override-linked-pm-context\" },\n { flag: \"--fail-on-context-mismatch\" },\n { flag: \"--fail-on-skipped\" },\n { flag: \"--fail-on-empty-test-run\" },\n { flag: \"--require-assertions-for-pm\" },\n { flag: \"--check-context\" },\n { flag: \"--auto-pm-context\" },\n { flag: \"--author\" },\n { flag: \"--message\" },\n { flag: \"--force\" },\n];\n\nexport const TEST_ALL_FLAG_CONTRACTS: CliFlagContract[] = [\n { flag: \"--status\" },\n { flag: \"--limit\" },\n { flag: \"--offset\" },\n { flag: \"--background\" },\n { flag: \"--timeout\" },\n { flag: \"--progress\" },\n { flag: \"--env-set\" },\n { flag: \"--env-clear\" },\n { flag: \"--shared-host-safe\" },\n { flag: \"--pm-context\" },\n { flag: \"--override-linked-pm-context\" },\n { flag: \"--fail-on-context-mismatch\" },\n { flag: \"--fail-on-skipped\" },\n { flag: \"--fail-on-empty-test-run\" },\n { flag: \"--require-assertions-for-pm\" },\n { flag: \"--check-context\" },\n { flag: \"--auto-pm-context\" },\n];\n\nexport const TEST_RUNS_FLAG_CONTRACTS: CliFlagContract[] = [\n { flag: \"--status\" },\n { flag: \"--limit\" },\n { flag: \"--stream\" },\n { flag: \"--tail\" },\n { flag: \"--force\" },\n { flag: \"--author\" },\n];\n\nexport const GC_FLAG_CONTRACTS: CliFlagContract[] = [\n { flag: \"--dry-run\" },\n { flag: \"--scope\" },\n];\n\nexport const HEALTH_FLAG_CONTRACTS: CliFlagContract[] = [\n { flag: \"--strict-directories\" },\n { flag: \"--strict-exit\" },\n { flag: \"--fail-on-warn\" },\n { flag: \"--check-only\" },\n { flag: \"--check-telemetry\" },\n { flag: \"--no-refresh\" },\n { flag: \"--refresh-vectors\" },\n { flag: \"--verbose-stale-items\" },\n { flag: \"--brief\" },\n { flag: \"--summary\" },\n { flag: \"--skip-vectors\" },\n { flag: \"--skip-integrity\" },\n { flag: \"--skip-drift\" },\n { flag: \"--full\" },\n];\n\nexport const VALIDATE_FLAG_CONTRACTS: CliFlagContract[] = [\n { flag: \"--check-metadata\" },\n { flag: \"--metadata-profile\" },\n { flag: \"--check-resolution\" },\n { flag: \"--check-lifecycle\" },\n { flag: \"--check-stale-blockers\" },\n { flag: \"--dependency-cycle-severity\" },\n { flag: \"--check-files\" },\n { flag: \"--scan-mode\" },\n { flag: \"--include-pm-internals\" },\n { flag: \"--verbose-file-lists\" },\n { flag: \"--verbose-diagnostics\" },\n { flag: \"--strict-exit\" },\n { flag: \"--fail-on-warn\" },\n { flag: \"--check-history-drift\" },\n { flag: \"--check-command-references\" },\n];\n\nexport const CREATE_FLAG_CONTRACTS: CliFlagContract[] = [\n { short: \"-t\", flag: \"--title\" },\n { short: \"-d\", flag: \"--description\" },\n { flag: \"--type\" },\n { flag: \"--template\" },\n { flag: \"--create-mode\" },\n { flag: \"--create_mode\" },\n { flag: \"--schedule-preset\" },\n { flag: \"--schedule_preset\" },\n { short: \"-s\", flag: \"--status\" },\n { short: \"-p\", flag: \"--priority\" },\n { flag: \"--tags\", list: true },\n // NOT list:true — these use Commander's repeatable collector. Marking them\n // list:true would make the bootstrap coalescer comma-join repeated\n // occurrences (`--add-tags '[\"a\",\"b\"]' --add-tags c` -> `[\"a\",\"b\"],c`),\n // corrupting the JSON-array value form before parseTags sees it.\n { flag: \"--add-tags\", aliases: [\"--add_tags\"] },\n { short: \"-b\", flag: \"--body\" },\n { flag: \"--deadline\" },\n { flag: \"--estimate\" },\n { flag: \"--estimated-minutes\" },\n { flag: \"--estimated_minutes\" },\n { flag: \"--acceptance-criteria\" },\n { flag: \"--acceptance_criteria\" },\n { flag: \"--ac\" },\n { flag: \"--author\" },\n { flag: \"--message\" },\n { flag: \"--assignee\" },\n { flag: \"--parent\" },\n { flag: \"--reviewer\" },\n { flag: \"--risk\" },\n { flag: \"--confidence\" },\n { flag: \"--sprint\" },\n { flag: \"--release\" },\n { flag: \"--blocked-by\" },\n { flag: \"--blocked-reason\" },\n { flag: \"--unblock-note\" },\n { flag: \"--reporter\" },\n { flag: \"--severity\" },\n { flag: \"--environment\" },\n { flag: \"--repro-steps\" },\n { flag: \"--resolution\" },\n { flag: \"--expected-result\" },\n { flag: \"--actual-result\" },\n { flag: \"--affected-version\" },\n { flag: \"--fixed-version\" },\n { flag: \"--component\" },\n { flag: \"--regression\" },\n { flag: \"--customer-impact\" },\n { flag: \"--customer_impact\" },\n { flag: \"--definition-of-ready\" },\n { flag: \"--definition_of_ready\" },\n { flag: \"--order\" },\n { flag: \"--rank\" },\n { flag: \"--goal\" },\n { flag: \"--objective\" },\n { flag: \"--value\" },\n { flag: \"--impact\" },\n { flag: \"--outcome\" },\n { flag: \"--why-now\" },\n { flag: \"--why_now\" },\n { flag: \"--blocked_by\" },\n { flag: \"--blocked_reason\" },\n { flag: \"--unblock_note\" },\n { flag: \"--repro_steps\" },\n { flag: \"--expected_result\" },\n { flag: \"--actual_result\" },\n { flag: \"--expected\" },\n { flag: \"--actual\" },\n { flag: \"--affected_version\" },\n { flag: \"--fixed_version\" },\n { flag: \"--dep\" },\n { flag: \"--type-option\" },\n { flag: \"--type_option\" },\n { flag: \"--reminder\" },\n { flag: \"--event\" },\n { flag: \"--comment\" },\n { flag: \"--note\" },\n { flag: \"--learning\" },\n { flag: \"--file\" },\n { flag: \"--test\" },\n { flag: \"--doc\" },\n { flag: \"--unset\" },\n { flag: \"--clear-deps\" },\n { flag: \"--clear-comments\" },\n { flag: \"--clear-notes\" },\n { flag: \"--clear-learnings\" },\n { flag: \"--clear-files\" },\n { flag: \"--clear-tests\" },\n { flag: \"--clear-docs\" },\n { flag: \"--clear-reminders\" },\n { flag: \"--clear-events\" },\n { flag: \"--clear-type-options\" },\n];\n\nexport const UPDATE_FLAG_CONTRACTS: CliFlagContract[] = [\n { short: \"-t\", flag: \"--title\" },\n { short: \"-d\", flag: \"--description\" },\n { short: \"-b\", flag: \"--body\" },\n { short: \"-s\", flag: \"--status\" },\n { flag: \"--close-reason\" },\n { flag: \"--close_reason\" },\n { short: \"-p\", flag: \"--priority\" },\n { flag: \"--type\" },\n { flag: \"--tags\", list: true },\n // NOT list:true — Commander's repeatable collector accumulates these, so\n // bootstrap coalescing must not comma-join repeated occurrences (it would\n // corrupt JSON-array values like `--add-tags '[\"a\",\"b\"]' --add-tags c`).\n { flag: \"--add-tags\", aliases: [\"--add_tags\"] },\n { flag: \"--remove-tags\", aliases: [\"--remove_tags\"] },\n { flag: \"--deadline\" },\n { flag: \"--estimate\" },\n { flag: \"--estimated-minutes\" },\n { flag: \"--estimated_minutes\" },\n { flag: \"--acceptance-criteria\" },\n { flag: \"--acceptance_criteria\" },\n { flag: \"--ac\" },\n { flag: \"--assignee\" },\n { flag: \"--parent\" },\n { flag: \"--reviewer\" },\n { flag: \"--risk\" },\n { flag: \"--confidence\" },\n { flag: \"--sprint\" },\n { flag: \"--release\" },\n { flag: \"--blocked-by\" },\n { flag: \"--blocked-reason\" },\n { flag: \"--unblock-note\" },\n { flag: \"--reporter\" },\n { flag: \"--severity\" },\n { flag: \"--environment\" },\n { flag: \"--repro-steps\" },\n { flag: \"--resolution\" },\n { flag: \"--expected-result\" },\n { flag: \"--actual-result\" },\n { flag: \"--affected-version\" },\n { flag: \"--fixed-version\" },\n { flag: \"--fixed_version\" },\n { flag: \"--component\" },\n { flag: \"--regression\" },\n { flag: \"--customer-impact\" },\n { flag: \"--customer_impact\" },\n { flag: \"--definition-of-ready\" },\n { flag: \"--definition_of_ready\" },\n { flag: \"--order\" },\n { flag: \"--rank\" },\n { flag: \"--goal\" },\n { flag: \"--objective\" },\n { flag: \"--value\" },\n { flag: \"--impact\" },\n { flag: \"--outcome\" },\n { flag: \"--why-now\" },\n { flag: \"--why_now\" },\n { flag: \"--author\" },\n { flag: \"--message\" },\n { flag: \"--blocked_by\" },\n { flag: \"--blocked_reason\" },\n { flag: \"--unblock_note\" },\n { flag: \"--repro_steps\" },\n { flag: \"--expected_result\" },\n { flag: \"--actual_result\" },\n { flag: \"--expected\" },\n { flag: \"--actual\" },\n { flag: \"--affected_version\" },\n { flag: \"--dep\" },\n { flag: \"--dep-remove\" },\n { flag: \"--dep_remove\" },\n { flag: \"--replace-deps\" },\n { flag: \"--replace-tests\" },\n { flag: \"--comment\" },\n { flag: \"--note\" },\n { flag: \"--learning\" },\n { flag: \"--file\" },\n { flag: \"--test\" },\n { flag: \"--doc\" },\n { flag: \"--reminder\" },\n { flag: \"--event\" },\n { flag: \"--type-option\" },\n { flag: \"--type_option\" },\n { flag: \"--unset\" },\n { flag: \"--clear-deps\" },\n { flag: \"--clear-comments\" },\n { flag: \"--clear-notes\" },\n { flag: \"--clear-learnings\" },\n { flag: \"--clear-files\" },\n { flag: \"--clear-tests\" },\n { flag: \"--clear-docs\" },\n { flag: \"--clear-reminders\" },\n { flag: \"--clear-events\" },\n { flag: \"--clear-type-options\" },\n { flag: \"--allow-audit-update\" },\n { flag: \"--allow_audit_update\" },\n { flag: \"--allow-audit-dep-update\" },\n { flag: \"--allow_audit_dep_update\" },\n { flag: \"--force\" },\n];\n\nexport const UPDATE_MANY_FLAG_CONTRACTS: CliFlagContract[] = [\n { flag: \"--filter-status\" },\n { flag: \"--filter-type\" },\n { flag: \"--filter-tag\" },\n { flag: \"--filter-priority\" },\n { flag: \"--filter-deadline-before\" },\n { flag: \"--filter-deadline-after\" },\n { flag: \"--filter-assignee\" },\n { flag: \"--filter-assignee-filter\" },\n { flag: \"--filter-assignee_filter\" },\n { flag: \"--filter-parent\" },\n { flag: \"--filter-sprint\" },\n { flag: \"--filter-release\" },\n { flag: \"--limit\" },\n { flag: \"--offset\" },\n { flag: \"--dry-run\" },\n { flag: \"--rollback\" },\n { flag: \"--no-checkpoint\" },\n { short: \"-t\", flag: \"--title\" },\n { short: \"-d\", flag: \"--description\" },\n { short: \"-b\", flag: \"--body\" },\n { short: \"-p\", flag: \"--priority\" },\n { flag: \"--type\" },\n { flag: \"--tags\", list: true },\n // NOT list:true — Commander's repeatable collector accumulates these, so\n // bootstrap coalescing must not comma-join repeated occurrences (it would\n // corrupt JSON-array values like `--add-tags '[\"a\",\"b\"]' --add-tags c`).\n { flag: \"--add-tags\", aliases: [\"--add_tags\"] },\n { flag: \"--remove-tags\", aliases: [\"--remove_tags\"] },\n { flag: \"--deadline\" },\n { flag: \"--estimate\" },\n { flag: \"--estimated-minutes\" },\n { flag: \"--estimated_minutes\" },\n { flag: \"--acceptance-criteria\" },\n { flag: \"--acceptance_criteria\" },\n { flag: \"--ac\" },\n { flag: \"--definition-of-ready\" },\n { flag: \"--definition_of_ready\" },\n { flag: \"--order\" },\n { flag: \"--rank\" },\n { flag: \"--goal\" },\n { flag: \"--objective\" },\n { flag: \"--value\" },\n { flag: \"--impact\" },\n { flag: \"--outcome\" },\n { flag: \"--why-now\" },\n { flag: \"--why_now\" },\n { flag: \"--reviewer\" },\n { flag: \"--risk\" },\n { flag: \"--confidence\" },\n { flag: \"--sprint\" },\n { flag: \"--release\" },\n { flag: \"--reporter\" },\n { flag: \"--severity\" },\n { flag: \"--environment\" },\n { flag: \"--repro-steps\" },\n { flag: \"--repro_steps\" },\n { flag: \"--resolution\" },\n { flag: \"--expected-result\" },\n { flag: \"--expected_result\" },\n { flag: \"--expected\" },\n { flag: \"--actual-result\" },\n { flag: \"--actual_result\" },\n { flag: \"--actual\" },\n { flag: \"--affected-version\" },\n { flag: \"--affected_version\" },\n { flag: \"--fixed-version\" },\n { flag: \"--fixed_version\" },\n { flag: \"--component\" },\n { flag: \"--regression\" },\n { flag: \"--customer-impact\" },\n { flag: \"--customer_impact\" },\n { flag: \"--dep\" },\n { flag: \"--dep-remove\" },\n { flag: \"--dep_remove\" },\n { flag: \"--replace-deps\" },\n { flag: \"--replace-tests\" },\n { flag: \"--comment\" },\n { flag: \"--note\" },\n { flag: \"--learning\" },\n { flag: \"--file\" },\n { flag: \"--test\" },\n { flag: \"--doc\" },\n { flag: \"--reminder\" },\n { flag: \"--event\" },\n { flag: \"--type-option\" },\n { flag: \"--type_option\" },\n { flag: \"--unset\" },\n { flag: \"--clear-deps\" },\n { flag: \"--clear-comments\" },\n { flag: \"--clear-notes\" },\n { flag: \"--clear-learnings\" },\n { flag: \"--clear-files\" },\n { flag: \"--clear-tests\" },\n { flag: \"--clear-docs\" },\n { flag: \"--clear-reminders\" },\n { flag: \"--clear-events\" },\n { flag: \"--clear-type-options\" },\n { flag: \"--allow-audit-update\" },\n { flag: \"--allow_audit_update\" },\n { flag: \"--allow-audit-dep-update\" },\n { flag: \"--allow_audit_dep_update\" },\n { flag: \"--author\" },\n { flag: \"--message\" },\n { flag: \"--force\" },\n];\n\nexport const NORMALIZE_FLAG_CONTRACTS: CliFlagContract[] = [\n { flag: \"--filter-status\" },\n { flag: \"--filter-type\" },\n { flag: \"--filter-tag\" },\n { flag: \"--filter-priority\" },\n { flag: \"--filter-deadline-before\" },\n { flag: \"--filter-deadline-after\" },\n { flag: \"--filter-assignee\" },\n { flag: \"--filter-assignee-filter\" },\n { flag: \"--filter-assignee_filter\" },\n { flag: \"--filter-parent\" },\n { flag: \"--filter-sprint\" },\n { flag: \"--filter-release\" },\n { flag: \"--limit\" },\n { flag: \"--offset\" },\n { flag: \"--dry-run\" },\n { flag: \"--apply\" },\n { flag: \"--author\" },\n { flag: \"--message\" },\n { flag: \"--allow-audit-update\" },\n { flag: \"--allow_audit_update\" },\n { flag: \"--force\" },\n];\n\nexport const CALENDAR_FLAG_CONTRACTS: CliFlagContract[] = [\n { flag: \"--view\" },\n { flag: \"--date\" },\n { flag: \"--from\" },\n { flag: \"--to\" },\n { flag: \"--past\" },\n { flag: \"--full-period\" },\n { flag: \"--full_period\" },\n { flag: \"--type\" },\n { flag: \"--tag\" },\n { flag: \"--priority\" },\n { flag: \"--status\" },\n { flag: \"--assignee\" },\n { flag: \"--assignee-filter\" },\n { flag: \"--assignee_filter\" },\n { flag: \"--sprint\" },\n { flag: \"--release\" },\n { flag: \"--include\" },\n { flag: \"--recurrence-lookahead-days\" },\n { flag: \"--recurrence-lookback-days\" },\n { flag: \"--occurrence-limit\" },\n { flag: \"--limit\" },\n { flag: \"--format\" },\n];\n\nexport const ACTIVITY_FLAG_CONTRACTS: CliFlagContract[] = [\n { flag: \"--id\" },\n { flag: \"--op\" },\n { flag: \"--author\" },\n { flag: \"--from\" },\n { flag: \"--to\" },\n { flag: \"--limit\" },\n { flag: \"--compact\" },\n { flag: \"--full\" },\n { flag: \"--stream\" },\n];\n\nexport const CONTEXT_FLAG_CONTRACTS: CliFlagContract[] = [\n { flag: \"--date\" },\n { flag: \"--from\" },\n { flag: \"--to\" },\n { flag: \"--past\" },\n { flag: \"--type\" },\n { flag: \"--tag\" },\n { flag: \"--priority\" },\n { flag: \"--assignee\" },\n { flag: \"--assignee-filter\" },\n { flag: \"--assignee_filter\" },\n { flag: \"--sprint\" },\n { flag: \"--release\" },\n { flag: \"--limit\" },\n { flag: \"--format\" },\n { flag: \"--depth\" },\n { flag: \"--section\" },\n { flag: \"--activity-limit\" },\n { flag: \"--stale-threshold\" },\n];\n\nexport const GET_FLAG_CONTRACTS: CliFlagContract[] = [\n { flag: \"--depth\" },\n { flag: \"--full\" },\n { flag: \"--fields\", list: true },\n];\n\nexport const GUIDE_FLAG_CONTRACTS: CliFlagContract[] = [\n { flag: \"--list\" },\n { flag: \"--format\" },\n { flag: \"--depth\" },\n];\n\nexport const DEPS_FLAG_CONTRACTS: CliFlagContract[] = [\n { flag: \"--format\" },\n { flag: \"--max-depth\" },\n { flag: \"--collapse\" },\n { flag: \"--summary\" },\n];\n\nexport const SEARCH_FLAG_CONTRACTS: CliFlagContract[] = [\n { flag: \"--mode\" },\n { flag: \"--semantic\" },\n { flag: \"--hybrid\" },\n { flag: \"--include-linked\" },\n { flag: \"--title-exact\" },\n { flag: \"--phrase-exact\" },\n { flag: \"--compact\" },\n { flag: \"--full\" },\n { flag: \"--fields\", list: true },\n { flag: \"--limit\" },\n { flag: \"--type\" },\n { flag: \"--tag\" },\n { flag: \"--priority\" },\n { flag: \"--deadline-before\" },\n { flag: \"--deadline-after\" },\n];\n\nexport const CONTRACTS_FLAG_CONTRACTS: CliFlagContract[] = [\n { flag: \"--action\" },\n { flag: \"--command\" },\n { flag: \"--schema-only\" },\n { flag: \"--flags-only\" },\n { flag: \"--availability-only\" },\n { flag: \"--runtime-only\" },\n { flag: \"--active-only\" },\n { flag: \"--full\" },\n];\n\nexport const COMPLETION_FLAG_CONTRACTS: CliFlagContract[] = [\n { flag: \"--eager-tags\" },\n];\n\nfunction toUniqueFlagContracts(contracts: CliFlagContract[]): CliFlagContract[] {\n const seen = new Set<string>();\n const unique: CliFlagContract[] = [];\n for (const contract of contracts) {\n const aliasKey = (contract.aliases ?? []).join(\",\");\n const key = `${contract.flag}|${contract.short ?? \"\"}|${aliasKey}`;\n if (seen.has(key)) {\n continue;\n }\n seen.add(key);\n unique.push(contract);\n }\n return unique;\n}\n\nfunction withSubcommandGlobalFlags(contracts: CliFlagContract[]): CliFlagContract[] {\n return withFlagAliasMetadata(toUniqueFlagContracts([...SUBCOMMAND_GLOBAL_FLAG_CONTRACTS, ...contracts]));\n}\n\nconst LIST_COMMAND_NAME_CONTRACTS = new Set([\n \"list\",\n \"list-all\",\n \"list-draft\",\n \"list-open\",\n \"list-in-progress\",\n \"list-blocked\",\n \"list-closed\",\n \"list-canceled\",\n]);\n\nconst NO_SURFACE_COMMAND_NAME_CONTRACTS = new Set([\n \"stats\",\n \"reindex\",\n \"help\",\n]);\n\nfunction normalizeCommandNameForContracts(commandName: string | undefined): string {\n if (typeof commandName !== \"string\") {\n return \"\";\n }\n return commandName.trim().toLowerCase();\n}\n\nexport function resolveSubcommandFlagContractsForCommand(commandName: string | undefined): CliFlagContract[] {\n const normalized = normalizeCommandNameForContracts(commandName);\n if (normalized.length === 0) {\n return withSubcommandGlobalFlags([]);\n }\n if (LIST_COMMAND_NAME_CONTRACTS.has(normalized)) {\n return withSubcommandGlobalFlags(LIST_FILTER_FLAG_CONTRACTS);\n }\n if (NO_SURFACE_COMMAND_NAME_CONTRACTS.has(normalized)) {\n return withSubcommandGlobalFlags([]);\n }\n if (normalized === \"templates\") {\n return withSubcommandGlobalFlags(CREATE_FLAG_CONTRACTS);\n }\n if (normalized === \"cal\") {\n return withSubcommandGlobalFlags(CALENDAR_FLAG_CONTRACTS);\n }\n if (normalized === \"ctx\") {\n return withSubcommandGlobalFlags(CONTEXT_FLAG_CONTRACTS);\n }\n if (normalized === \"test-runs-worker\") {\n return withSubcommandGlobalFlags(TEST_RUNS_FLAG_CONTRACTS);\n }\n switch (normalized) {\n case \"init\":\n return withSubcommandGlobalFlags(INIT_FLAG_CONTRACTS);\n case \"config\":\n return withSubcommandGlobalFlags(CONFIG_FLAG_CONTRACTS);\n case \"extension\":\n case \"package\":\n case \"packages\":\n return withSubcommandGlobalFlags(EXTENSION_FLAG_CONTRACTS);\n case \"install\":\n return withSubcommandGlobalFlags(INSTALL_FLAG_CONTRACTS);\n case \"upgrade\":\n return withSubcommandGlobalFlags(UPGRADE_FLAG_CONTRACTS);\n case \"create\":\n return withSubcommandGlobalFlags(CREATE_FLAG_CONTRACTS);\n case \"aggregate\":\n return withSubcommandGlobalFlags(AGGREGATE_FLAG_CONTRACTS);\n case \"calendar\":\n return withSubcommandGlobalFlags(CALENDAR_FLAG_CONTRACTS);\n case \"context\":\n return withSubcommandGlobalFlags(CONTEXT_FLAG_CONTRACTS);\n case \"get\":\n return withSubcommandGlobalFlags(GET_FLAG_CONTRACTS);\n case \"search\":\n return withSubcommandGlobalFlags(SEARCH_FLAG_CONTRACTS);\n case \"history\":\n return withSubcommandGlobalFlags(HISTORY_FLAG_CONTRACTS);\n case \"history-redact\":\n return withSubcommandGlobalFlags(HISTORY_REDACT_FLAG_CONTRACTS);\n case \"history-repair\":\n return withSubcommandGlobalFlags(HISTORY_REPAIR_FLAG_CONTRACTS);\n case \"schema\":\n return withSubcommandGlobalFlags(SCHEMA_FLAG_CONTRACTS);\n case \"plan\":\n return withSubcommandGlobalFlags(PLAN_FLAG_CONTRACTS);\n case \"activity\":\n return withSubcommandGlobalFlags(ACTIVITY_FLAG_CONTRACTS);\n case \"restore\":\n return withSubcommandGlobalFlags(RESTORE_FLAG_CONTRACTS);\n case \"update\":\n return withSubcommandGlobalFlags(UPDATE_FLAG_CONTRACTS);\n case \"update-many\":\n return withSubcommandGlobalFlags(UPDATE_MANY_FLAG_CONTRACTS);\n case \"close\":\n return withSubcommandGlobalFlags(CLOSE_FLAG_CONTRACTS);\n case \"delete\":\n return withSubcommandGlobalFlags(DELETE_FLAG_CONTRACTS);\n case \"append\":\n return withSubcommandGlobalFlags(APPEND_FLAG_CONTRACTS);\n case \"comments\":\n return withSubcommandGlobalFlags(COMMENTS_FLAG_CONTRACTS);\n case \"notes\":\n return withSubcommandGlobalFlags(NOTES_FLAG_CONTRACTS);\n case \"learnings\":\n return withSubcommandGlobalFlags(LEARNINGS_FLAG_CONTRACTS);\n case \"files\":\n return withSubcommandGlobalFlags(FILES_FLAG_CONTRACTS);\n case \"docs\":\n return withSubcommandGlobalFlags(DOCS_FLAG_CONTRACTS);\n case \"deps\":\n return withSubcommandGlobalFlags(DEPS_FLAG_CONTRACTS);\n case \"test\":\n return withSubcommandGlobalFlags(TEST_FLAG_CONTRACTS);\n case \"test-all\":\n return withSubcommandGlobalFlags(TEST_ALL_FLAG_CONTRACTS);\n case \"health\":\n return withSubcommandGlobalFlags(HEALTH_FLAG_CONTRACTS);\n case \"validate\":\n return withSubcommandGlobalFlags(VALIDATE_FLAG_CONTRACTS);\n case \"gc\":\n return withSubcommandGlobalFlags(GC_FLAG_CONTRACTS);\n case \"contracts\":\n return withSubcommandGlobalFlags(CONTRACTS_FLAG_CONTRACTS);\n case \"claim\":\n return withSubcommandGlobalFlags(CLAIM_FLAG_CONTRACTS);\n case \"release\":\n return withSubcommandGlobalFlags(RELEASE_FLAG_CONTRACTS);\n case \"start-task\":\n return withSubcommandGlobalFlags(START_TASK_FLAG_CONTRACTS);\n case \"pause-task\":\n return withSubcommandGlobalFlags(PAUSE_TASK_FLAG_CONTRACTS);\n case \"close-task\":\n return withSubcommandGlobalFlags(CLOSE_TASK_FLAG_CONTRACTS);\n default:\n return withSubcommandGlobalFlags([]);\n }\n}\n\nexport function toCompletionFlagString(flagContracts: CliFlagContract[], includeGlobal = true): string {\n const aliasAwareContracts = withFlagAliasMetadata(flagContracts);\n const scoped = aliasAwareContracts\n .flatMap((entry) => [entry.short, entry.flag, ...(entry.aliases ?? [])])\n .filter((value): value is string => Boolean(value));\n const all = includeGlobal\n ? [\n ...scoped,\n ...SUBCOMMAND_GLOBAL_FLAG_CONTRACTS.flatMap((entry) => [entry.short, entry.flag]).filter((value): value is string => Boolean(value)),\n ]\n : scoped;\n return normalizeUniqueStringList(all).join(\" \");\n}\n\n\nconst PM_TOOL_GLOBAL_PARAMETER_KEYS = [\"json\", \"quiet\", \"profile\", \"noExtensions\", \"noPager\", \"path\", \"pmExecutable\", \"timeoutMs\"] as const;\n\nexport interface PmActionSchemaContract {\n required?: string[];\n optional?: string[];\n anyOfRequired?: Array<string[]>;\n}\n\nfunction toSchemaKeyList(values: string[]): string[] {\n return normalizeUniqueStringList(values);\n}\n\nconst CREATE_CONTRACT_PARAMETER_KEYS = toSchemaKeyList([\n ...TOOL_CREATE_OPTION_CONTRACTS.map((entry) => entry.param),\n ...TOOL_SHARED_CREATE_UPDATE_OPTION_CONTRACTS.map((entry) => entry.param),\n \"assignee\",\n]);\n\nconst UPDATE_CONTRACT_PARAMETER_KEYS = toSchemaKeyList([\n ...TOOL_UPDATE_OPTION_CONTRACTS.map((entry) => entry.param),\n ...TOOL_SHARED_CREATE_UPDATE_OPTION_CONTRACTS.map((entry) => entry.param),\n \"force\",\n]);\n\nconst UPDATE_MANY_CONTRACT_PARAMETER_KEYS = toSchemaKeyList([\n ...TOOL_UPDATE_MANY_FILTER_OPTION_CONTRACTS.map((entry) => entry.param),\n ...UPDATE_CONTRACT_PARAMETER_KEYS,\n \"dryRun\",\n \"rollback\",\n \"noCheckpoint\",\n]);\n\nconst NORMALIZE_CONTRACT_PARAMETER_KEYS = toSchemaKeyList([\n ...TOOL_NORMALIZE_FILTER_OPTION_CONTRACTS.map((entry) => entry.param),\n \"dryRun\",\n \"apply\",\n \"author\",\n \"message\",\n \"allowAuditUpdate\",\n \"force\",\n]);\n\nconst CONTEXT_CONTRACT_PARAMETER_KEYS = toSchemaKeyList([\n ...TOOL_CONTEXT_OPTION_CONTRACTS.map((entry) => entry.param),\n \"past\",\n \"section\",\n]);\n\nconst ACTIVITY_CONTRACT_PARAMETER_KEYS = toSchemaKeyList([\n ...TOOL_ACTIVITY_OPTION_CONTRACTS.map((entry) => entry.param),\n \"stream\",\n]);\n\nconst LIST_CONTRACT_PARAMETER_KEYS = toSchemaKeyList([\n ...TOOL_LIST_FILTER_OPTION_CONTRACTS.map((entry) => entry.param),\n \"includeBody\",\n \"compact\",\n \"brief\",\n \"full\",\n]);\nconst AGGREGATE_CONTRACT_PARAMETER_KEYS = toSchemaKeyList([\n ...TOOL_AGGREGATE_OPTION_CONTRACTS.map((entry) => entry.param),\n \"count\",\n \"includeUnparented\",\n]);\nconst DEDUPE_AUDIT_CONTRACT_PARAMETER_KEYS = toSchemaKeyList(TOOL_DEDUPE_AUDIT_OPTION_CONTRACTS.map((entry) => entry.param));\nconst SEARCH_CONTRACT_PARAMETER_KEYS = toSchemaKeyList([\n \"query\",\n \"keywords\",\n \"mode\",\n \"semantic\",\n \"hybrid\",\n \"includeLinked\",\n \"titleExact\",\n \"phraseExact\",\n \"compact\",\n \"full\",\n ...TOOL_SEARCH_FILTER_OPTION_CONTRACTS.map((entry) => entry.param),\n]);\n\nconst AUTHOR_MESSAGE_FORCE_PARAMETER_KEYS = [\"author\", \"message\", \"force\"];\n\nconst PM_TOOL_ACTION_SCHEMA_CONTRACTS: Record<string, PmActionSchemaContract> = {\n init: { optional: [\"prefix\", \"preset\", \"defaults\", \"author\", \"agentGuidance\", \"withPackages\"] },\n config: {\n required: [\"scope\", \"configAction\"],\n optional: [\"key\", \"value\", \"criterion\", \"clearCriteria\", \"format\", \"policy\"],\n },\n \"extension-init\": { required: [\"target\"], optional: [\"scope\"] },\n \"extension-install\": {\n optional: [\"target\", \"github\", \"scope\", \"ref\"],\n anyOfRequired: [[\"target\"], [\"github\"]],\n },\n \"extension-uninstall\": { required: [\"target\"], optional: [\"scope\"] },\n \"extension-explore\": { optional: [\"scope\"] },\n \"extension-manage\": { optional: [\"scope\", \"runtimeProbe\", \"fixManagedState\"] },\n \"extension-reload\": { optional: [\"scope\", \"watch\"] },\n \"extension-doctor\": { optional: [\"scope\", \"detail\", \"trace\", \"fixManagedState\", \"strictExit\", \"failOnWarn\"] },\n \"extension-catalog\": { optional: [\"scope\"] },\n \"extension-adopt\": { required: [\"target\"], optional: [\"scope\", \"github\", \"ref\"] },\n \"extension-adopt-all\": { optional: [\"scope\"] },\n \"extension-activate\": { required: [\"target\"], optional: [\"scope\"] },\n \"extension-deactivate\": { required: [\"target\"], optional: [\"scope\"] },\n extension: {\n optional: [\n \"target\",\n \"scope\",\n \"github\",\n \"ref\",\n \"init\",\n \"install\",\n \"uninstall\",\n \"explore\",\n \"manage\",\n \"reload\",\n \"doctor\",\n \"catalog\",\n \"adopt\",\n \"adoptAll\",\n \"activate\",\n \"deactivate\",\n \"runtimeProbe\",\n \"fixManagedState\",\n \"detail\",\n \"trace\",\n \"watch\",\n \"strictExit\",\n \"failOnWarn\",\n ],\n },\n \"package-init\": { required: [\"target\"], optional: [\"scope\"] },\n \"package-install\": {\n optional: [\"target\", \"github\", \"scope\", \"ref\"],\n anyOfRequired: [[\"target\"], [\"github\"]],\n },\n \"package-uninstall\": { required: [\"target\"], optional: [\"scope\"] },\n \"package-explore\": { optional: [\"scope\"] },\n \"package-manage\": { optional: [\"scope\", \"runtimeProbe\", \"fixManagedState\"] },\n \"package-reload\": { optional: [\"scope\", \"watch\"] },\n \"package-doctor\": { optional: [\"scope\", \"detail\", \"trace\", \"fixManagedState\", \"strictExit\", \"failOnWarn\"] },\n \"package-catalog\": { optional: [\"scope\"] },\n \"package-adopt\": { required: [\"target\"], optional: [\"scope\", \"github\", \"ref\"] },\n \"package-adopt-all\": { optional: [\"scope\"] },\n \"package-activate\": { required: [\"target\"], optional: [\"scope\"] },\n \"package-deactivate\": { required: [\"target\"], optional: [\"scope\"] },\n package: {\n optional: [\n \"target\",\n \"scope\",\n \"github\",\n \"ref\",\n \"init\",\n \"install\",\n \"uninstall\",\n \"explore\",\n \"manage\",\n \"reload\",\n \"doctor\",\n \"catalog\",\n \"adopt\",\n \"adoptAll\",\n \"activate\",\n \"deactivate\",\n \"runtimeProbe\",\n \"fixManagedState\",\n \"detail\",\n \"trace\",\n \"watch\",\n \"strictExit\",\n \"failOnWarn\",\n ],\n },\n install: {\n optional: [\"target\", \"github\", \"scope\", \"ref\"],\n anyOfRequired: [[\"target\"], [\"github\"]],\n },\n upgrade: {\n optional: [\"target\", \"scope\", \"dryRun\", \"cliOnly\", \"packagesOnly\", \"repair\", \"tag\", \"packageName\"],\n },\n create: {\n required: [\"title\", \"description\", \"type\", \"status\", \"priority\", \"message\"],\n optional: CREATE_CONTRACT_PARAMETER_KEYS,\n },\n list: { optional: LIST_CONTRACT_PARAMETER_KEYS },\n \"list-all\": { optional: LIST_CONTRACT_PARAMETER_KEYS },\n \"list-draft\": { optional: LIST_CONTRACT_PARAMETER_KEYS },\n \"list-open\": { optional: LIST_CONTRACT_PARAMETER_KEYS },\n \"list-in-progress\": { optional: LIST_CONTRACT_PARAMETER_KEYS },\n \"list-blocked\": { optional: LIST_CONTRACT_PARAMETER_KEYS },\n \"list-closed\": { optional: LIST_CONTRACT_PARAMETER_KEYS },\n \"list-canceled\": { optional: LIST_CONTRACT_PARAMETER_KEYS },\n aggregate: { optional: AGGREGATE_CONTRACT_PARAMETER_KEYS },\n \"dedupe-audit\": { optional: DEDUPE_AUDIT_CONTRACT_PARAMETER_KEYS },\n guide: { optional: [\"format\", \"depth\"] },\n context: { optional: CONTEXT_CONTRACT_PARAMETER_KEYS },\n ctx: { optional: CONTEXT_CONTRACT_PARAMETER_KEYS },\n get: { required: [\"id\"], optional: [\"depth\", \"full\", \"fields\"] },\n search: {\n optional: SEARCH_CONTRACT_PARAMETER_KEYS,\n anyOfRequired: [[\"query\"], [\"keywords\"]],\n },\n reindex: { optional: [\"mode\", \"progress\"] },\n history: { required: [\"id\"], optional: [\"limit\", \"compact\", \"full\", \"diff\", \"verify\"] },\n \"history-redact\": {\n required: [\"id\"],\n optional: [\"literal\", \"regex\", \"replacement\", \"dryRun\", ...AUTHOR_MESSAGE_FORCE_PARAMETER_KEYS],\n anyOfRequired: [[\"literal\"], [\"regex\"]],\n },\n \"history-repair\": {\n required: [\"id\"],\n optional: [\"dryRun\", ...AUTHOR_MESSAGE_FORCE_PARAMETER_KEYS],\n },\n schema: {\n required: [\"subcommand\", \"name\"],\n // No --message: schema add-type writes a config file, not item history.\n optional: [\"description\", \"defaultStatus\", \"folder\", \"alias\", \"author\", \"force\"],\n },\n plan: {\n required: [\"subcommand\"],\n optional: [\n \"id\",\n \"stepRef\",\n \"reorderTo\",\n \"title\",\n \"description\",\n \"scope\",\n \"parent\",\n \"related\",\n \"blocks\",\n \"blockedBy\",\n \"harness\",\n \"mode\",\n \"resumeContext\",\n \"tags\",\n \"priority\",\n \"body\",\n \"claim\",\n \"fromSearch\",\n \"stepTitle\",\n \"stepBody\",\n \"stepOwner\",\n \"stepStatus\",\n \"stepEvidence\",\n \"stepBlockedReason\",\n \"stepReplacement\",\n \"dependsOn\",\n \"link\",\n \"linkKind\",\n \"linkNote\",\n \"promoteToItemDep\",\n \"allowMultipleActive\",\n \"file\",\n \"test\",\n \"doc\",\n \"decisionText\",\n \"decision\",\n \"decisionRationale\",\n \"decisionEvidence\",\n \"discoveryText\",\n \"discovery\",\n \"validationText\",\n \"validation\",\n \"validationCommand\",\n \"validationExpected\",\n \"depth\",\n \"fields\",\n \"steps\",\n \"materializeType\",\n \"materializeParent\",\n \"materializeTags\",\n ...AUTHOR_MESSAGE_FORCE_PARAMETER_KEYS,\n ],\n },\n activity: { optional: ACTIVITY_CONTRACT_PARAMETER_KEYS },\n restore: { required: [\"id\", \"target\"], optional: AUTHOR_MESSAGE_FORCE_PARAMETER_KEYS },\n update: { required: [\"id\"], optional: UPDATE_CONTRACT_PARAMETER_KEYS },\n \"update-many\": { optional: UPDATE_MANY_CONTRACT_PARAMETER_KEYS },\n normalize: { optional: NORMALIZE_CONTRACT_PARAMETER_KEYS },\n close: { required: [\"id\", \"text\"], optional: [\"validateClose\", ...AUTHOR_MESSAGE_FORCE_PARAMETER_KEYS] },\n delete: { required: [\"id\"], optional: [\"dryRun\", ...AUTHOR_MESSAGE_FORCE_PARAMETER_KEYS] },\n append: { required: [\"id\", \"body\"], optional: AUTHOR_MESSAGE_FORCE_PARAMETER_KEYS },\n comments: {\n required: [\"id\"],\n optional: [\"text\", \"add\", \"stdin\", \"file\", \"limit\", \"allowAuditComment\", ...AUTHOR_MESSAGE_FORCE_PARAMETER_KEYS],\n },\n \"comments-audit\": {\n optional: [\n \"status\",\n \"type\",\n \"assignee\",\n \"assigneeFilter\",\n \"parent\",\n \"tag\",\n \"sprint\",\n \"release\",\n \"priority\",\n \"limitItems\",\n \"limit\",\n \"fullHistory\",\n \"latest\",\n ],\n },\n notes: {\n required: [\"id\"],\n optional: [\"text\", \"add\", \"limit\", \"allowAuditNote\", \"allowAuditComment\", ...AUTHOR_MESSAGE_FORCE_PARAMETER_KEYS],\n },\n learnings: {\n required: [\"id\"],\n optional: [\"text\", \"add\", \"limit\", \"allowAuditLearning\", \"allowAuditComment\", ...AUTHOR_MESSAGE_FORCE_PARAMETER_KEYS],\n },\n files: {\n required: [\"id\"],\n optional: [\n \"add\",\n \"addGlob\",\n \"remove\",\n \"migrate\",\n \"discover\",\n \"apply\",\n \"discoveryNote\",\n \"appendStable\",\n \"validatePaths\",\n \"audit\",\n ...AUTHOR_MESSAGE_FORCE_PARAMETER_KEYS,\n ],\n },\n docs: {\n required: [\"id\"],\n optional: [\"add\", \"addGlob\", \"remove\", \"migrate\", \"validatePaths\", \"audit\", ...AUTHOR_MESSAGE_FORCE_PARAMETER_KEYS],\n },\n deps: { required: [\"id\"], optional: [\"format\", \"maxDepth\", \"collapse\", \"summary\"] },\n test: {\n required: [\"id\"],\n optional: [\n \"add\",\n \"remove\",\n \"run\",\n \"background\",\n \"timeout\",\n \"progress\",\n \"envSet\",\n \"envClear\",\n \"sharedHostSafe\",\n \"pmContext\",\n \"overrideLinkedPmContext\",\n \"failOnContextMismatch\",\n \"failOnSkipped\",\n \"failOnEmptyTestRun\",\n \"requireAssertionsForPm\",\n \"checkContext\",\n \"autoPmContext\",\n ...AUTHOR_MESSAGE_FORCE_PARAMETER_KEYS,\n ],\n },\n \"test-all\": {\n optional: [\n \"status\",\n \"limit\",\n \"offset\",\n \"background\",\n \"timeout\",\n \"progress\",\n \"envSet\",\n \"envClear\",\n \"sharedHostSafe\",\n \"pmContext\",\n \"overrideLinkedPmContext\",\n \"failOnContextMismatch\",\n \"failOnSkipped\",\n \"failOnEmptyTestRun\",\n \"requireAssertionsForPm\",\n \"checkContext\",\n \"autoPmContext\",\n ],\n },\n \"test-runs-list\": {\n optional: [\"status\", \"limit\"],\n },\n \"test-runs-status\": {\n required: [\"runId\"],\n },\n \"test-runs-logs\": {\n required: [\"runId\"],\n optional: [\"stream\", \"tail\"],\n },\n \"test-runs-stop\": {\n required: [\"runId\"],\n optional: [\"force\"],\n },\n \"test-runs-resume\": {\n required: [\"runId\"],\n optional: [\"author\"],\n },\n stats: {},\n health: {\n optional: [\n \"strictDirectories\",\n \"strictExit\",\n \"failOnWarn\",\n \"checkOnly\",\n \"checkTelemetry\",\n \"noRefresh\",\n \"refreshVectors\",\n \"verboseStaleItems\",\n \"summary\",\n \"skipVectors\",\n \"skipIntegrity\",\n \"skipDrift\",\n \"full\",\n ],\n },\n validate: {\n optional: [\n \"checkMetadata\",\n \"metadataProfile\",\n \"checkResolution\",\n \"checkLifecycle\",\n \"checkStaleBlockers\",\n \"dependencyCycleSeverity\",\n \"checkFiles\",\n \"scanMode\",\n \"includePmInternals\",\n \"verboseFileLists\",\n \"verboseDiagnostics\",\n \"strictExit\",\n \"failOnWarn\",\n \"checkHistoryDrift\",\n \"checkCommandReferences\",\n ],\n },\n gc: { optional: [\"dryRun\", \"gcScope\"] },\n contracts: { optional: [\"contractAction\", \"command\", \"schemaOnly\", \"flagsOnly\", \"availabilityOnly\", \"runtimeOnly\", \"activeOnly\"] },\n completion: { required: [\"shell\"], optional: [\"eagerTags\"] },\n claim: { required: [\"id\"], optional: AUTHOR_MESSAGE_FORCE_PARAMETER_KEYS },\n release: { required: [\"id\"], optional: [\"allowAuditRelease\", ...AUTHOR_MESSAGE_FORCE_PARAMETER_KEYS] },\n \"start-task\": { required: [\"id\"], optional: AUTHOR_MESSAGE_FORCE_PARAMETER_KEYS },\n \"pause-task\": { required: [\"id\"], optional: AUTHOR_MESSAGE_FORCE_PARAMETER_KEYS },\n \"close-task\": { required: [\"id\", \"text\"], optional: AUTHOR_MESSAGE_FORCE_PARAMETER_KEYS },\n};\n\nexport const PM_TOOL_ACTION_PARAMETER_CONTRACTS: Readonly<Record<PmToolAction, PmActionSchemaContract>> =\n Object.freeze(\n Object.fromEntries(PM_TOOL_ACTIONS.map((action) => [action, PM_TOOL_ACTION_SCHEMA_CONTRACTS[action]])),\n ) as Readonly<Record<PmToolAction, PmActionSchemaContract>>;\n\nfunction fallbackToolParameterDescription(key: string): string {\n return key\n .replace(/([a-z0-9])([A-Z])/g, \"$1 $2\")\n .replace(/[_-]/g, \" \")\n .trim()\n .replace(/^./, (value) => value.toUpperCase())\n .concat(\".\");\n}\n\nfunction decorateToolParameterDefinition(key: string, definition: unknown): Record<string, unknown> {\n const baseDefinition = typeof definition === \"object\" && definition !== null ? { ...(definition as Record<string, unknown>) } : {};\n const metadata = PM_TOOL_PARAMETER_METADATA[key];\n return {\n ...baseDefinition,\n description: metadata?.description ?? fallbackToolParameterDescription(key),\n ...(metadata?.examples ? { examples: metadata.examples } : {}),\n };\n}\n\nfunction actionScopedToolParameterMetadata(\n action: PmToolAction,\n key: string,\n): { description: string; examples?: unknown[] } | undefined {\n if (action === \"plan\" && Object.prototype.hasOwnProperty.call(PLAN_ACTION_PARAMETER_METADATA, key)) {\n return PLAN_ACTION_PARAMETER_METADATA[key];\n }\n return PM_TOOL_PARAMETER_METADATA[key];\n}\n\nfunction decorateActionScopedToolParameterDefinition(\n action: PmToolAction,\n key: string,\n definition: unknown,\n): Record<string, unknown> {\n const baseDefinition = typeof definition === \"object\" && definition !== null ? { ...(definition as Record<string, unknown>) } : {};\n const metadata = actionScopedToolParameterMetadata(action, key);\n return {\n ...baseDefinition,\n description: metadata?.description ?? fallbackToolParameterDescription(key),\n ...(metadata?.examples ? { examples: metadata.examples } : {}),\n };\n}\n\nfunction actionScopedToolParameterDefinition(action: PmToolAction, key: string): unknown {\n if (action === \"plan\" && Object.prototype.hasOwnProperty.call(PLAN_ACTION_PARAMETER_PROPERTIES, key)) {\n return PLAN_ACTION_PARAMETER_PROPERTIES[key];\n }\n return PM_TOOL_PARAMETER_PROPERTIES[key];\n}\n\nfunction buildActionScopedToolSchema(action: PmToolAction): Record<string, unknown> {\n const contract = PM_TOOL_ACTION_SCHEMA_CONTRACTS[action];\n const required = toSchemaKeyList(contract.required ?? []);\n const optional = toSchemaKeyList(contract.optional ?? []);\n const allowedKeys = toSchemaKeyList([...PM_TOOL_GLOBAL_PARAMETER_KEYS, ...required, ...optional]);\n const properties: Record<string, unknown> = {\n action: {\n const: action,\n description: PM_TOOL_PARAMETER_METADATA.action?.description ?? \"Tool action to execute.\",\n },\n };\n for (const key of allowedKeys) {\n if (key === \"action\") {\n continue;\n }\n const definition = actionScopedToolParameterDefinition(action, key);\n if (definition) {\n properties[key] = decorateActionScopedToolParameterDefinition(action, key, definition);\n }\n }\n const schema: Record<string, unknown> = {\n type: \"object\",\n additionalProperties: false,\n required: [\"action\", ...required],\n title: `pm action \"${action}\" parameters`,\n properties,\n };\n if (contract.anyOfRequired && contract.anyOfRequired.length > 0) {\n schema.anyOf = contract.anyOfRequired.map((requiredFields) => ({\n required: [...requiredFields],\n }));\n }\n return schema;\n}\n\nexport const PM_TOOL_PARAMETERS_SCHEMA: Record<string, unknown> = {\n $schema: \"https://json-schema.org/draft/2020-12/schema\",\n $id: \"https://schema.unbrained.dev/pm-cli/tool-parameters-v4.schema.json\",\n title: \"pm-cli tool parameters (action-scoped strict schema)\",\n \"x-schema-version\": \"4.0.1\",\n type: \"object\",\n oneOf: PM_TOOL_ACTIONS.map((action) => buildActionScopedToolSchema(action)),\n};\n\nfunction toProviderCompatibleParameterDefinition(key: string, definition: unknown): Record<string, unknown> {\n const decorated = decorateToolParameterDefinition(key, definition);\n if (typeof decorated.type === \"string\") {\n return decorated;\n }\n const anyOf = Array.isArray(decorated.anyOf) ? (decorated.anyOf as Array<Record<string, unknown>>) : [];\n const firstTypedVariant = anyOf.find((variant) => typeof variant.type === \"string\");\n if (firstTypedVariant) {\n const { anyOf: _anyOf, ...rest } = decorated;\n return {\n ...rest,\n type: firstTypedVariant.type,\n };\n }\n const { anyOf: _anyOf, ...rest } = decorated;\n return {\n ...rest,\n type: \"string\",\n };\n}\n\nfunction buildProviderCompatibleToolSchema(): Record<string, unknown> {\n const properties: Record<string, unknown> = {\n action: {\n type: \"string\",\n description: PM_TOOL_PARAMETER_METADATA.action?.description ?? \"Tool action to execute.\",\n },\n options: {\n type: \"object\",\n additionalProperties: true,\n description: \"Advanced command options object forwarded to the selected pm action.\",\n },\n };\n for (const key of Object.keys(PM_TOOL_PARAMETER_PROPERTIES).sort()) {\n properties[key] = toProviderCompatibleParameterDefinition(key, PM_TOOL_PARAMETER_PROPERTIES[key]);\n }\n return {\n title: \"pm-cli tool parameters (provider-compatible flat schema)\",\n \"x-schema-version\": \"1.0.0\",\n type: \"object\",\n additionalProperties: false,\n required: [\"action\"],\n properties,\n };\n}\n\nexport const PM_PROVIDER_TOOL_PARAMETERS_SCHEMA: Record<string, unknown> = buildProviderCompatibleToolSchema();\n", "import { PmCliError } from \"./errors.js\";\nimport { EXIT_CODE } from \"./constants.js\";\n\nconst RELATIVE_DEADLINE = /^([+-]?)(\\d+)([hdwm])$/i;\nconst COMPOUND_RELATIVE_DEADLINE = /^[+-]?\\d+[hdwm](?:[+-]\\d+[hdwm])+$/i;\nconst COMPACT_DATE = /^(\\d{4})(\\d{2})(\\d{2})$/;\nconst COMPACT_DATETIME = /^(\\d{4})(\\d{2})(\\d{2})(?:[T\\s]?)(\\d{2})(\\d{2})(\\d{2})?([.,]\\d{1,3})?(Z|[+-]\\d{2}:?\\d{2})?$/i;\nconst HYPHEN_TIME = /^(\\d{4}-\\d{2}-\\d{2})[T\\s](\\d{2})-(\\d{2})(?:-(\\d{2}))?([.,]\\d{1,3})?(Z|[+-]\\d{2}:?\\d{2})?$/i;\nconst COMPACT_TIME = /^(\\d{4}-\\d{2}-\\d{2})[T\\s](\\d{2})(\\d{2})(\\d{2})?([.,]\\d{1,3})?(Z|[+-]\\d{2}:?\\d{2})?$/i;\n\nexport function nowIso(): string {\n return new Date().toISOString();\n}\n\nexport function isTimestampLiteral(input: string): boolean {\n return Number.isFinite(Date.parse(input));\n}\n\nexport function compareTimestampStrings(left: string, right: string): number {\n const leftMs = Date.parse(left);\n const rightMs = Date.parse(right);\n if (Number.isFinite(leftMs) && Number.isFinite(rightMs) && leftMs !== rightMs) {\n return leftMs - rightMs;\n }\n return left.localeCompare(right);\n}\n\nfunction normalizeFraction(raw: string | undefined): string {\n if (!raw) return \"\";\n const digits = raw.slice(1);\n return `.${digits.padEnd(3, \"0\").slice(0, 3)}`;\n}\n\nfunction normalizeOffset(raw: string | undefined): string {\n if (!raw) return \"\";\n if (raw.toUpperCase() === \"Z\") return \"Z\";\n const compact = /^([+-]\\d{2})(\\d{2})$/.exec(raw);\n if (compact) return `${compact[1]}:${compact[2]}`;\n return raw;\n}\n\nfunction normalizeTimestampCandidates(input: string): string[] {\n const candidates: string[] = [];\n const push = (value: string | undefined): void => {\n if (!value || value === input || candidates.includes(value)) return;\n candidates.push(value);\n };\n\n const compactDate = COMPACT_DATE.exec(input);\n if (compactDate) {\n const [, year, month, day] = compactDate;\n push(`${year}-${month}-${day}`);\n }\n\n const compactDateTime = COMPACT_DATETIME.exec(input);\n if (compactDateTime) {\n const [, year, month, day, hour, minute, secondRaw, fractionRaw, offsetRaw] = compactDateTime;\n const second = secondRaw ? `:${secondRaw}` : \"\";\n push(\n `${year}-${month}-${day}T${hour}:${minute}${second}${normalizeFraction(fractionRaw)}${normalizeOffset(offsetRaw)}`,\n );\n }\n\n const hyphenTime = HYPHEN_TIME.exec(input);\n if (hyphenTime) {\n const [, datePart, hour, minute, secondRaw, fractionRaw, offsetRaw] = hyphenTime;\n const second = secondRaw ? `:${secondRaw}` : \"\";\n push(`${datePart}T${hour}:${minute}${second}${normalizeFraction(fractionRaw)}${normalizeOffset(offsetRaw)}`);\n }\n\n const compactTime = COMPACT_TIME.exec(input);\n if (compactTime) {\n const [, datePart, hour, minute, secondRaw, fractionRaw, offsetRaw] = compactTime;\n const second = secondRaw ? `:${secondRaw}` : \"\";\n push(`${datePart}T${hour}:${minute}${second}${normalizeFraction(fractionRaw)}${normalizeOffset(offsetRaw)}`);\n }\n\n const spaceDateTime = /^(\\d{4}-\\d{2}-\\d{2})\\s+(.+)$/.exec(input);\n if (spaceDateTime) {\n const [, datePart, timePart] = spaceDateTime;\n push(`${datePart}T${timePart}`);\n }\n\n return candidates;\n}\n\nfunction parseTimestampWithFallbacks(input: string): number {\n const direct = Date.parse(input);\n if (Number.isFinite(direct)) return direct;\n for (const candidate of normalizeTimestampCandidates(input)) {\n const parsed = Date.parse(candidate);\n if (Number.isFinite(parsed)) return parsed;\n }\n return Number.NaN;\n}\n\nfunction daysInUtcMonth(year: number, monthIndex: number): number {\n return new Date(Date.UTC(year, monthIndex + 1, 0)).getUTCDate();\n}\n\nconst MONTH_NAMES = [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\",\n] as const;\n\n// Leading literal calendar date in either hyphenated (`2026-02-30`) or compact\n// (`20260230`) form, optionally followed by any time/zone component. We validate\n// the digits the caller actually typed — not the parsed instant — so timezone\n// offsets never produce a false \"impossible date\" rejection. The hyphenated form\n// is unambiguous, so anything may follow (`T`/space time, `Z`, `+/-` offset). The\n// compact form must be followed by end-of-string or a time digit (with an optional\n// `T`/space separator) so a no-separator compact datetime like `20260230135900Z`\n// is still guarded and a 7-digit non-date is not misread as a date.\nconst LEADING_HYPHEN_DATE = /^(\\d{4})-(\\d{2})-(\\d{2})/;\nconst LEADING_COMPACT_DATE = /^(\\d{4})(\\d{2})(\\d{2})(?:[T ]?\\d{2}|$)/;\n\n/**\n * Reject literal calendar dates whose day cannot exist (e.g. `2026-02-30`, which JS\n * `Date` silently rolls forward to March 2). Without this, agents that pass an\n * impossible deadline get a silently-wrong stored date instead of an actionable\n * error. Only triggers on a leading literal date; relative tokens, \"now\", and pure\n * times are untouched. Month 00 / >12 is also rejected with a clear message rather\n * than falling through to the generic \"invalid value\" path.\n */\nfunction assertRealCalendarDate(originalInput: string, trimmed: string, fieldLabel: string): void {\n const match = LEADING_HYPHEN_DATE.exec(trimmed) ?? LEADING_COMPACT_DATE.exec(trimmed);\n if (!match) {\n return;\n }\n const year = Number.parseInt(match[1], 10);\n const month = Number.parseInt(match[2], 10);\n const day = Number.parseInt(match[3], 10);\n const label = fieldLabel?.trim() || \"deadline\";\n if (month < 1 || month > 12) {\n throw new PmCliError(\n `Invalid ${label} value \"${originalInput}\". Month \"${match[2]}\" is out of range — use a month between 01 and 12.`,\n EXIT_CODE.USAGE,\n );\n }\n const maxDay = daysInUtcMonth(year, month - 1);\n if (day < 1 || day > maxDay) {\n throw new PmCliError(\n `Invalid ${label} value \"${originalInput}\". ${MONTH_NAMES[month - 1]} ${year} has ${maxDay} days, so day \"${match[3]}\" does not exist. Use a real YYYY-MM-DD calendar date.`,\n EXIT_CODE.USAGE,\n );\n }\n}\n\nfunction addUtcMonths(now: Date, amount: number): Date {\n const result = new Date(now.getTime());\n const startDay = result.getUTCDate();\n const targetMonthIndex = result.getUTCMonth() + amount;\n const targetYear = result.getUTCFullYear() + Math.floor(targetMonthIndex / 12);\n const targetMonth = ((targetMonthIndex % 12) + 12) % 12;\n const day = Math.min(startDay, daysInUtcMonth(targetYear, targetMonth));\n result.setUTCFullYear(targetYear, targetMonth, day);\n return result;\n}\n\nexport function resolveIsoOrRelative(\n input: string,\n now: Date = new Date(),\n fieldLabel = \"deadline\",\n): string {\n const trimmed = input.trim();\n if (trimmed.toLowerCase() === \"now\") {\n return now.toISOString();\n }\n const relative = RELATIVE_DEADLINE.exec(trimmed);\n if (relative) {\n const sign = relative[1] === \"-\" ? -1 : 1;\n const amount = Number.parseInt(relative[2], 10) * sign;\n const unit = relative[3].toLowerCase();\n if (unit === \"m\") {\n return addUtcMonths(now, amount).toISOString();\n }\n const msPerUnit = unit === \"h\" ? 60 * 60 * 1000 : unit === \"d\" ? 24 * 60 * 60 * 1000 : 7 * 24 * 60 * 60 * 1000;\n return new Date(now.getTime() + amount * msPerUnit).toISOString();\n }\n\n assertRealCalendarDate(input, trimmed, fieldLabel);\n\n const timestamp = parseTimestampWithFallbacks(trimmed);\n if (!Number.isFinite(timestamp)) {\n const normalizedLabel = fieldLabel.trim().length > 0 ? fieldLabel.trim() : \"deadline\";\n const guidance = COMPOUND_RELATIVE_DEADLINE.test(trimmed)\n ? \"Compound relative expressions like +3d+1h are not supported; use a single relative token (for example +3d) or an ISO/date string.\"\n : 'Use ISO/date string input, \"now\", or relative +6h/-6h/+1d/-1d/+2w/-2w/+6m/-6m.';\n throw new PmCliError(\n `Invalid ${normalizedLabel} value \"${input}\". ${guidance}`,\n EXIT_CODE.USAGE,\n );\n }\n return new Date(timestamp).toISOString();\n}\n", "import { EXIT_CODE } from \"../shared/constants.js\";\nimport { PmCliError } from \"../shared/errors.js\";\nimport { runtimeFieldOptionTarget, type RuntimeFieldDefinitionResolved, type RuntimeFieldRegistry } from \"./runtime-schema.js\";\n\nfunction toCamelToken(value: string): string {\n const segments = value\n .trim()\n .replaceAll(/[^A-Za-z0-9]+/g, \" \")\n .split(/\\s+/)\n .filter((segment) => segment.length > 0)\n .map((segment) => segment.toLowerCase());\n if (segments.length === 0) {\n return value;\n }\n const [first, ...rest] = segments;\n return `${first}${rest.map((segment) => `${segment.slice(0, 1).toUpperCase()}${segment.slice(1)}`).join(\"\")}`;\n}\n\nfunction resolveCandidateOptionKeys(definition: RuntimeFieldDefinitionResolved): string[] {\n return [...new Set([\n runtimeFieldOptionTarget(definition),\n toCamelToken(definition.key),\n toCamelToken(definition.cli_flag),\n ...definition.cli_aliases.map((alias) => toCamelToken(alias)),\n ])];\n}\n\nexport function readRuntimeFieldOptionValue(\n options: Record<string, unknown>,\n definition: RuntimeFieldDefinitionResolved,\n): unknown {\n for (const candidateKey of resolveCandidateOptionKeys(definition)) {\n if (!Object.hasOwn(options, candidateKey)) {\n continue;\n }\n const value = options[candidateKey];\n if (value !== undefined) {\n return value;\n }\n }\n return undefined;\n}\n\nfunction normalizeStringArrayValue(value: unknown): string[] {\n if (Array.isArray(value)) {\n return value\n .flatMap((entry) => normalizeStringArrayValue(entry))\n .map((entry) => entry.trim())\n .filter((entry) => entry.length > 0);\n }\n if (typeof value === \"string\") {\n return value\n .split(/[,\\n|]/)\n .map((entry) => entry.trim())\n .filter((entry) => entry.length > 0);\n }\n if (value === undefined || value === null) {\n return [];\n }\n return [String(value).trim()].filter((entry) => entry.length > 0);\n}\n\nfunction parseBooleanValue(raw: unknown, label: string): boolean {\n if (typeof raw === \"boolean\") {\n return raw;\n }\n if (typeof raw === \"number\") {\n if (raw === 1) {\n return true;\n }\n if (raw === 0) {\n return false;\n }\n }\n if (typeof raw === \"string\") {\n const normalized = raw.trim().toLowerCase();\n if (normalized === \"true\" || normalized === \"1\" || normalized === \"yes\") {\n return true;\n }\n if (normalized === \"false\" || normalized === \"0\" || normalized === \"no\") {\n return false;\n }\n }\n throw new PmCliError(`${label} must be one of true|false|1|0|yes|no`, EXIT_CODE.USAGE);\n}\n\nfunction parseNumberValue(raw: unknown, label: string): number {\n if (typeof raw === \"number\" && Number.isFinite(raw)) {\n return raw;\n }\n const candidate = typeof raw === \"string\" ? raw.trim() : String(raw);\n const parsed = Number(candidate);\n if (!Number.isFinite(parsed)) {\n throw new PmCliError(`${label} must be a number`, EXIT_CODE.USAGE);\n }\n return parsed;\n}\n\nexport function coerceRuntimeFieldValue(\n definition: RuntimeFieldDefinitionResolved,\n rawValue: unknown,\n labelOverride?: string,\n): unknown {\n const label = labelOverride ?? `--${definition.cli_flag}`;\n if (definition.repeatable || definition.type === \"string_array\") {\n const values = normalizeStringArrayValue(rawValue);\n if (definition.type === \"number\") {\n return values.map((value) => parseNumberValue(value, label));\n }\n if (definition.type === \"boolean\") {\n return values.map((value) => parseBooleanValue(value, label));\n }\n return values;\n }\n\n const scalarRaw = Array.isArray(rawValue) ? rawValue[rawValue.length - 1] : rawValue;\n if (scalarRaw === undefined) {\n return undefined;\n }\n if (definition.type === \"number\") {\n return parseNumberValue(scalarRaw, label);\n }\n if (definition.type === \"boolean\") {\n return parseBooleanValue(scalarRaw, label);\n }\n return typeof scalarRaw === \"string\" ? scalarRaw : String(scalarRaw);\n}\n\nfunction shouldRequireFieldOnCreate(definition: RuntimeFieldDefinitionResolved, itemTypeName: string | undefined): boolean {\n if (!definition.required && !definition.required_on_create) {\n return false;\n }\n if (definition.required_types.length === 0) {\n return true;\n }\n if (!itemTypeName) {\n return false;\n }\n return definition.required_types.map((value) => value.toLowerCase()).includes(itemTypeName.trim().toLowerCase());\n}\n\nexport function collectRuntimeCreateFieldValues(\n options: Record<string, unknown>,\n fieldRegistry: RuntimeFieldRegistry,\n itemTypeName: string | undefined,\n): { values: Record<string, unknown>; missing_required_flags: string[] } {\n const values: Record<string, unknown> = {};\n const missingRequiredFlags: string[] = [];\n for (const definition of fieldRegistry.command_to_fields.get(\"create\") ?? []) {\n const rawValue = readRuntimeFieldOptionValue(options, definition);\n if (rawValue === undefined) {\n if (shouldRequireFieldOnCreate(definition, itemTypeName)) {\n missingRequiredFlags.push(`--${definition.cli_flag}`);\n }\n continue;\n }\n values[definition.metadata_key] = coerceRuntimeFieldValue(definition, rawValue);\n }\n return {\n values,\n missing_required_flags: [...new Set(missingRequiredFlags)].sort((left, right) => left.localeCompare(right)),\n };\n}\n\nexport function collectRuntimeUpdateFieldValues(\n options: Record<string, unknown>,\n fieldRegistry: RuntimeFieldRegistry,\n): Record<string, unknown> {\n const values: Record<string, unknown> = {};\n for (const definition of fieldRegistry.command_to_fields.get(\"update\") ?? []) {\n const rawValue = readRuntimeFieldOptionValue(options, definition);\n if (rawValue === undefined) {\n continue;\n }\n values[definition.metadata_key] = coerceRuntimeFieldValue(definition, rawValue);\n }\n return values;\n}\n", "export interface ConflictMarkerMatch {\n line: number;\n marker: \"<<<<<<<\" | \"=======\" | \">>>>>>>\";\n text: string;\n}\n\nconst CONFLICT_MARKER_PATTERN = /^\\s*(<<<<<<<|=======|>>>>>>>)(?:\\s.*)?$/;\n\nexport function findMergeConflictMarkers(content: string): ConflictMarkerMatch[] {\n if (content.length === 0) {\n return [];\n }\n const lines = content.split(/\\r?\\n/);\n const matches: ConflictMarkerMatch[] = [];\n for (let index = 0; index < lines.length; index += 1) {\n const line = lines[index] ?? \"\";\n const markerMatch = line.match(CONFLICT_MARKER_PATTERN);\n if (!markerMatch) {\n continue;\n }\n const marker = markerMatch[1] as ConflictMarkerMatch[\"marker\"];\n matches.push({\n line: index + 1,\n marker,\n text: line,\n });\n }\n return matches;\n}\n\nexport function findFirstMergeConflictMarker(content: string): ConflictMarkerMatch | undefined {\n const matches = findMergeConflictMarkers(content);\n return matches[0];\n}\n", "import { encode as encodeToon } from \"@toon-format/toon\";\nimport type {\n CalendarEvent,\n Comment,\n Dependency,\n ItemDocument,\n ItemMetadata,\n RuntimeSchemaSettings,\n ItemTestRunSummary,\n LinkedDoc,\n LinkedFile,\n LinkedTest,\n LogNote,\n PlanDecision,\n PlanDiscovery,\n PlanStep,\n PlanStepDoc,\n PlanStepFile,\n PlanStepLink,\n PlanStepStatus,\n PlanValidationCheck,\n RecurrenceRule,\n Reminder,\n} from \"../../types/index.js\";\nimport type { ItemFormat } from \"../../types/index.js\";\nimport {\n CONFIDENCE_TEXT_VALUES,\n ISSUE_SEVERITY_VALUES,\n RECURRENCE_FREQUENCY_VALUES,\n RECURRENCE_WEEKDAY_VALUES,\n STATUS_VALUES,\n weekdayOrderIndex,\n} from \"../../types/index.js\";\nimport { coerceRuntimeFieldValue } from \"../schema/runtime-field-values.js\";\nimport {\n resolveRuntimeFieldRegistry,\n resolveRuntimeStatusRegistry,\n type RuntimeFieldRegistry,\n type RuntimeStatusRegistry,\n} from \"../schema/runtime-schema.js\";\nimport { normalizeStatusInput } from \"./status.js\";\nimport { decodeToonItemContent } from \"./toon-decode.js\";\nimport { EXIT_CODE, FRONT_MATTER_KEY_ORDER } from \"../shared/constants.js\";\nimport { findFirstMergeConflictMarker } from \"../shared/conflict-markers.js\";\nimport { PmCliError } from \"../shared/errors.js\";\nimport { orderObject } from \"../shared/serialization.js\";\nimport { compareTimestampStrings, isTimestampLiteral } from \"../shared/time.js\";\n\nconst LINKED_TEST_PM_CONTEXT_MODE_VALUES = new Set([\"schema\", \"tracker\", \"auto\"]);\n\nfunction normalizePathValue(value: string): string {\n return value.replaceAll(\"\\\\\", \"/\");\n}\n\nconst REQUIRED_STRING_FIELDS = [\n \"id\",\n \"title\",\n \"description\",\n \"created_at\",\n \"updated_at\",\n] as const;\n\nconst STATIC_FRONT_MATTER_FIELD_SET = new Set(FRONT_MATTER_KEY_ORDER);\n\ninterface RuntimeSchemaValidationContext {\n statusRegistry?: RuntimeStatusRegistry;\n fieldRegistry?: RuntimeFieldRegistry;\n unknownFieldPolicy: \"allow\" | \"warn\" | \"reject\";\n onWarning?: (warning: string) => void;\n}\n\nexport interface ItemDocumentFormatOptions {\n format?: ItemFormat;\n schema?: RuntimeSchemaSettings;\n onWarning?: (warning: string) => void;\n}\n\nfunction resolveRuntimeSchemaValidationContext(\n options: ItemDocumentFormatOptions | undefined,\n): RuntimeSchemaValidationContext | undefined {\n if (!options?.schema) {\n return undefined;\n }\n return {\n statusRegistry: resolveRuntimeStatusRegistry(options.schema),\n fieldRegistry: resolveRuntimeFieldRegistry(options.schema),\n unknownFieldPolicy: options.schema.unknown_field_policy ?? \"allow\",\n onWarning: options.onWarning,\n };\n}\n\nfunction runtimeFieldRequiredForType(definition: RuntimeFieldRegistry[\"definitions\"][number], typeName: string): boolean {\n if (!definition.required) {\n return false;\n }\n if (definition.required_types.length === 0) {\n return true;\n }\n return definition.required_types.map((value) => value.toLowerCase()).includes(typeName.trim().toLowerCase());\n}\n\nfunction validationError(message: string): never {\n throw new PmCliError(`Invalid item front matter: ${message}`, EXIT_CODE.GENERIC_FAILURE);\n}\n\nfunction assertFrontMatterCondition(condition: boolean, message: string): void {\n if (!condition) {\n validationError(message);\n }\n}\n\nfunction assertTimestampField(record: Record<string, unknown>, fieldName: \"created_at\" | \"updated_at\" | \"deadline\"): void {\n const rawValue = record[fieldName];\n assertFrontMatterCondition(typeof rawValue === \"string\", `${fieldName} must be a string`);\n const timestamp = rawValue as string;\n assertFrontMatterCondition(isTimestampLiteral(timestamp), `${fieldName} must be a valid ISO timestamp`);\n}\n\nfunction assertValidRecurrenceRule(recurrence: unknown): void {\n assertFrontMatterCondition(\n typeof recurrence === \"object\" && recurrence !== null && !Array.isArray(recurrence),\n \"event.recurrence must be an object\",\n );\n const recurrenceRecord = recurrence as Record<string, unknown>;\n assertFrontMatterCondition(typeof recurrenceRecord.freq === \"string\", \"event.recurrence.freq must be a string\");\n const frequency = (recurrenceRecord.freq as string).trim().toLowerCase();\n assertFrontMatterCondition(\n RECURRENCE_FREQUENCY_VALUES.includes(frequency as (typeof RECURRENCE_FREQUENCY_VALUES)[number]),\n `event.recurrence.freq must be one of: ${RECURRENCE_FREQUENCY_VALUES.join(\", \")}`,\n );\n\n if (recurrenceRecord.interval !== undefined) {\n assertFrontMatterCondition(\n typeof recurrenceRecord.interval === \"number\" &&\n Number.isInteger(recurrenceRecord.interval) &&\n (recurrenceRecord.interval as number) >= 1,\n \"event.recurrence.interval must be an integer >= 1\",\n );\n }\n\n if (recurrenceRecord.count !== undefined) {\n assertFrontMatterCondition(\n typeof recurrenceRecord.count === \"number\" && Number.isInteger(recurrenceRecord.count) && (recurrenceRecord.count as number) >= 1,\n \"event.recurrence.count must be an integer >= 1\",\n );\n }\n\n if (recurrenceRecord.until !== undefined) {\n assertFrontMatterCondition(typeof recurrenceRecord.until === \"string\", \"event.recurrence.until must be a string\");\n assertFrontMatterCondition(\n isTimestampLiteral(recurrenceRecord.until as string),\n \"event.recurrence.until must be a valid ISO timestamp\",\n );\n }\n\n if (recurrenceRecord.by_weekday !== undefined) {\n assertFrontMatterCondition(Array.isArray(recurrenceRecord.by_weekday), \"event.recurrence.by_weekday must be an array\");\n for (const weekday of recurrenceRecord.by_weekday as unknown[]) {\n assertFrontMatterCondition(typeof weekday === \"string\", \"event.recurrence.by_weekday entries must be strings\");\n const normalizedWeekday = (weekday as string).trim().toLowerCase();\n assertFrontMatterCondition(\n RECURRENCE_WEEKDAY_VALUES.includes(normalizedWeekday as (typeof RECURRENCE_WEEKDAY_VALUES)[number]),\n `event.recurrence.by_weekday entries must be one of: ${RECURRENCE_WEEKDAY_VALUES.join(\", \")}`,\n );\n }\n }\n\n if (recurrenceRecord.by_month_day !== undefined) {\n assertFrontMatterCondition(Array.isArray(recurrenceRecord.by_month_day), \"event.recurrence.by_month_day must be an array\");\n for (const day of recurrenceRecord.by_month_day as unknown[]) {\n assertFrontMatterCondition(\n typeof day === \"number\" && Number.isInteger(day) && day >= 1 && day <= 31,\n \"event.recurrence.by_month_day entries must be integers 1..31\",\n );\n }\n }\n\n if (recurrenceRecord.exdates !== undefined) {\n assertFrontMatterCondition(Array.isArray(recurrenceRecord.exdates), \"event.recurrence.exdates must be an array\");\n for (const exdate of recurrenceRecord.exdates as unknown[]) {\n assertFrontMatterCondition(typeof exdate === \"string\", \"event.recurrence.exdates entries must be strings\");\n assertFrontMatterCondition(isTimestampLiteral(exdate as string), \"event.recurrence.exdates entries must be valid ISO timestamps\");\n }\n }\n}\n\nfunction assertValidFrontMatter(\n frontMatter: unknown,\n runtimeContext?: RuntimeSchemaValidationContext,\n): asserts frontMatter is ItemMetadata {\n assertFrontMatterCondition(\n typeof frontMatter === \"object\" && frontMatter !== null && !Array.isArray(frontMatter),\n \"front matter must be an object\",\n );\n\n const record = frontMatter as Record<string, unknown>;\n for (const fieldName of REQUIRED_STRING_FIELDS) {\n assertFrontMatterCondition(typeof record[fieldName] === \"string\", `${fieldName} is required and must be a string`);\n }\n\n const itemType = record.type;\n assertFrontMatterCondition(typeof itemType === \"string\" && itemType.trim().length > 0, \"type must be a non-empty string\");\n\n const status = record.status;\n assertFrontMatterCondition(\n typeof status === \"string\" && status.trim().length > 0,\n \"status must be a non-empty string\",\n );\n const statusRegistry = runtimeContext?.statusRegistry;\n const normalizedStatus = normalizeStatusInput(status as string, statusRegistry);\n const statusDomain = statusRegistry\n ? statusRegistry.definitions.map((definition) => definition.id)\n : [...STATUS_VALUES];\n assertFrontMatterCondition(normalizedStatus !== undefined, `status must be one of: ${statusDomain.join(\", \")}`);\n\n const priority = record.priority;\n assertFrontMatterCondition(\n typeof priority === \"number\" && Number.isInteger(priority) && [0, 1, 2, 3, 4].includes(priority),\n \"priority must be an integer 0..4\",\n );\n\n const tags = record.tags;\n assertFrontMatterCondition(Array.isArray(tags), \"tags must be an array\");\n for (const tag of tags as unknown[]) {\n assertFrontMatterCondition(typeof tag === \"string\", \"tags entries must be strings\");\n }\n\n const confidence = record.confidence;\n if (confidence !== undefined) {\n if (typeof confidence === \"number\") {\n assertFrontMatterCondition(\n Number.isInteger(confidence) && confidence >= 0 && confidence <= 100,\n \"confidence number value must be an integer 0..100\",\n );\n } else if (typeof confidence === \"string\") {\n const normalizedConfidence = confidence.trim().toLowerCase();\n const isKnownTextConfidence =\n normalizedConfidence === \"med\" || CONFIDENCE_TEXT_VALUES.includes(normalizedConfidence as (typeof CONFIDENCE_TEXT_VALUES)[number]);\n assertFrontMatterCondition(\n isKnownTextConfidence,\n `confidence string value must be one of: ${[...CONFIDENCE_TEXT_VALUES, \"med\"].join(\", \")}`,\n );\n } else {\n assertFrontMatterCondition(false, \"confidence must be a number or string\");\n }\n }\n\n const severity = record.severity;\n if (severity !== undefined) {\n if (typeof severity !== \"string\") {\n validationError(\"severity must be a string\");\n }\n const normalizedSeverity = severity.trim().toLowerCase();\n const isKnownSeverity =\n normalizedSeverity === \"med\" || ISSUE_SEVERITY_VALUES.includes(normalizedSeverity as (typeof ISSUE_SEVERITY_VALUES)[number]);\n assertFrontMatterCondition(\n isKnownSeverity,\n `severity value must be one of: ${[...ISSUE_SEVERITY_VALUES, \"med\"].join(\", \")}`,\n );\n }\n\n const regression = record.regression;\n if (regression !== undefined) {\n if (typeof regression !== \"boolean\") {\n validationError(\"regression must be a boolean\");\n }\n }\n\n assertTimestampField(record, \"created_at\");\n assertTimestampField(record, \"updated_at\");\n if (record.deadline !== undefined) {\n assertTimestampField(record, \"deadline\");\n }\n if (record.reminders !== undefined) {\n const reminders = record.reminders;\n assertFrontMatterCondition(Array.isArray(reminders), \"reminders must be an array\");\n for (const reminder of reminders as unknown[]) {\n assertFrontMatterCondition(typeof reminder === \"object\" && reminder !== null && !Array.isArray(reminder), \"reminders entries must be objects\");\n const reminderRecord = reminder as Record<string, unknown>;\n assertFrontMatterCondition(typeof reminderRecord.at === \"string\", \"reminder.at must be a string\");\n assertFrontMatterCondition(isTimestampLiteral(reminderRecord.at as string), \"reminder.at must be a valid ISO timestamp\");\n assertFrontMatterCondition(typeof reminderRecord.text === \"string\", \"reminder.text must be a string\");\n assertFrontMatterCondition((reminderRecord.text as string).trim().length > 0, \"reminder.text must not be empty\");\n }\n }\n if (record.events !== undefined) {\n const events = record.events;\n assertFrontMatterCondition(Array.isArray(events), \"events must be an array\");\n for (const event of events as unknown[]) {\n assertFrontMatterCondition(typeof event === \"object\" && event !== null && !Array.isArray(event), \"events entries must be objects\");\n const eventRecord = event as Record<string, unknown>;\n assertFrontMatterCondition(typeof eventRecord.start_at === \"string\", \"event.start_at must be a string\");\n assertFrontMatterCondition(isTimestampLiteral(eventRecord.start_at as string), \"event.start_at must be a valid ISO timestamp\");\n\n if (eventRecord.end_at !== undefined) {\n assertFrontMatterCondition(typeof eventRecord.end_at === \"string\", \"event.end_at must be a string\");\n assertFrontMatterCondition(isTimestampLiteral(eventRecord.end_at as string), \"event.end_at must be a valid ISO timestamp\");\n assertFrontMatterCondition(\n compareTimestampStrings(eventRecord.end_at as string, eventRecord.start_at as string) > 0,\n \"event.end_at must be after event.start_at\",\n );\n }\n\n for (const stringField of [\"title\", \"description\", \"location\", \"timezone\"] as const) {\n if (eventRecord[stringField] !== undefined) {\n assertFrontMatterCondition(typeof eventRecord[stringField] === \"string\", `event.${stringField} must be a string`);\n assertFrontMatterCondition(\n (eventRecord[stringField] as string).trim().length > 0,\n `event.${stringField} must not be empty`,\n );\n }\n }\n\n if (eventRecord.all_day !== undefined) {\n assertFrontMatterCondition(typeof eventRecord.all_day === \"boolean\", \"event.all_day must be a boolean\");\n }\n\n if (eventRecord.recurrence !== undefined) {\n assertValidRecurrenceRule(eventRecord.recurrence);\n if ((eventRecord.recurrence as Record<string, unknown>).until !== undefined) {\n assertFrontMatterCondition(\n compareTimestampStrings(\n (eventRecord.recurrence as Record<string, unknown>).until as string,\n eventRecord.start_at as string,\n ) >= 0,\n \"event.recurrence.until must be at or after event.start_at\",\n );\n }\n }\n }\n }\n if (record.closed_at !== undefined) {\n const closedAt = record.closed_at;\n assertFrontMatterCondition(typeof closedAt === \"string\", \"closed_at must be a string\");\n assertFrontMatterCondition(isTimestampLiteral(closedAt as string), \"closed_at must be a valid ISO timestamp\");\n }\n for (const fieldName of [\"source_type\", \"source_owner\", \"design\", \"external_ref\"] as const) {\n const value = record[fieldName];\n if (value !== undefined) {\n assertFrontMatterCondition(typeof value === \"string\", `${fieldName} must be a string`);\n }\n }\n const typeOptions = record.type_options;\n if (typeOptions !== undefined) {\n assertFrontMatterCondition(\n typeof typeOptions === \"object\" && typeOptions !== null && !Array.isArray(typeOptions),\n \"type_options must be an object\",\n );\n for (const [optionKey, optionValue] of Object.entries(typeOptions as Record<string, unknown>)) {\n assertFrontMatterCondition(optionKey.trim().length > 0, \"type_options keys must be non-empty\");\n assertFrontMatterCondition(typeof optionValue === \"string\", \"type_options values must be strings\");\n const optionText = optionValue as string;\n assertFrontMatterCondition(optionText.trim().length > 0, \"type_options values must be non-empty strings\");\n }\n }\n\n if (runtimeContext?.fieldRegistry) {\n for (const definition of runtimeContext.fieldRegistry.definitions) {\n const fieldValue = record[definition.metadata_key];\n if (fieldValue === undefined) {\n if (runtimeFieldRequiredForType(definition, itemType as string)) {\n validationError(`missing required schema field: ${definition.metadata_key}`);\n }\n continue;\n }\n try {\n record[definition.metadata_key] = coerceRuntimeFieldValue(\n definition,\n fieldValue,\n `metadata field \"${definition.metadata_key}\"`,\n );\n } catch (error: unknown) {\n validationError(\n error instanceof Error ? error.message.replace(/^Invalid\\s+/u, \"\") : `invalid ${definition.metadata_key} value`,\n );\n }\n }\n }\n\n if (runtimeContext && runtimeContext.unknownFieldPolicy !== \"allow\") {\n const knownKeys = new Set(STATIC_FRONT_MATTER_FIELD_SET);\n for (const definition of runtimeContext.fieldRegistry?.definitions ?? []) {\n knownKeys.add(definition.metadata_key);\n }\n const unknownKeys = Object.keys(record).filter((key) => !knownKeys.has(key)).sort((left, right) => left.localeCompare(right));\n if (unknownKeys.length > 0) {\n if (runtimeContext.unknownFieldPolicy === \"reject\") {\n validationError(`unknown schema fields are not allowed: ${unknownKeys.join(\", \")}`);\n } else {\n runtimeContext.onWarning?.(`item_unknown_schema_fields:${unknownKeys.join(\",\")}`);\n }\n }\n }\n}\n\nfunction sortDependencies(values: Dependency[] | undefined): Dependency[] | undefined {\n if (!values || values.length === 0) return undefined;\n return [...values]\n .map((value) => ({\n id: value.id.trim().toLowerCase(),\n kind: value.kind,\n created_at: value.created_at,\n author: value.author?.trim() || undefined,\n source_kind: value.source_kind?.trim() || undefined,\n }))\n .sort((a, b) => {\n const byCreated = compareTimestampStrings(a.created_at, b.created_at);\n if (byCreated !== 0) return byCreated;\n const byId = a.id.localeCompare(b.id);\n if (byId !== 0) return byId;\n const byKind = a.kind.localeCompare(b.kind);\n if (byKind !== 0) return byKind;\n return (a.source_kind ?? \"\").localeCompare(b.source_kind ?? \"\");\n });\n}\n\nfunction sortLogValues<T extends Comment | LogNote>(values: T[] | undefined): T[] | undefined {\n if (!values || values.length === 0) return undefined;\n return [...values].sort((a, b) => {\n const byCreated = compareTimestampStrings(a.created_at, b.created_at);\n if (byCreated !== 0) return byCreated;\n const byText = a.text.localeCompare(b.text);\n if (byText !== 0) return byText;\n return a.author.localeCompare(b.author);\n });\n}\n\nfunction sortReminders(values: Reminder[] | undefined): Reminder[] | undefined {\n if (!values || values.length === 0) return undefined;\n const normalized = [...values]\n .map((value) => ({\n at: value.at,\n text: value.text.trim(),\n }))\n .filter((value) => value.text.length > 0)\n .sort((a, b) => {\n const byAt = compareTimestampStrings(a.at, b.at);\n if (byAt !== 0) return byAt;\n return a.text.localeCompare(b.text);\n });\n return normalized.length === 0 ? undefined : normalized;\n}\n\nfunction normalizeRecurrenceRule(value: RecurrenceRule | undefined): RecurrenceRule | undefined {\n if (!value) {\n return undefined;\n }\n const normalizedFrequency = value.freq.trim().toLowerCase();\n if (!RECURRENCE_FREQUENCY_VALUES.includes(normalizedFrequency as (typeof RECURRENCE_FREQUENCY_VALUES)[number])) {\n return undefined;\n }\n\n const byWeekday = Array.from(\n new Set(\n (value.by_weekday ?? [])\n .map((weekday) => weekday.trim().toLowerCase())\n .filter((weekday) => RECURRENCE_WEEKDAY_VALUES.includes(weekday as (typeof RECURRENCE_WEEKDAY_VALUES)[number])),\n ),\n ).sort(\n (a, b) =>\n weekdayOrderIndex(a as (typeof RECURRENCE_WEEKDAY_VALUES)[number]) -\n weekdayOrderIndex(b as (typeof RECURRENCE_WEEKDAY_VALUES)[number]),\n );\n\n const byMonthDay = Array.from(\n new Set(\n (value.by_month_day ?? [])\n .filter((day) => Number.isInteger(day) && day >= 1 && day <= 31)\n .map((day) => day as number),\n ),\n ).sort((a, b) => a - b);\n\n const exdates = Array.from(\n new Set(\n (value.exdates ?? [])\n .map((timestamp) => timestamp.trim())\n .filter((timestamp) => isTimestampLiteral(timestamp)),\n ),\n ).sort((a, b) => compareTimestampStrings(a, b));\n\n const normalized: RecurrenceRule = {\n freq: normalizedFrequency as (typeof RECURRENCE_FREQUENCY_VALUES)[number],\n interval: value.interval !== undefined && value.interval > 1 ? value.interval : undefined,\n count: value.count,\n until: value.until?.trim() || undefined,\n by_weekday: byWeekday.length > 0 ? (byWeekday as (typeof RECURRENCE_WEEKDAY_VALUES)[number][]) : undefined,\n by_month_day: byMonthDay.length > 0 ? byMonthDay : undefined,\n exdates: exdates.length > 0 ? exdates : undefined,\n };\n for (const [key, fieldValue] of Object.entries(normalized)) {\n if (fieldValue === undefined) {\n delete (normalized as unknown as Record<string, unknown>)[key];\n }\n }\n return normalized;\n}\n\nfunction sortEvents(values: CalendarEvent[] | undefined): CalendarEvent[] | undefined {\n if (!values || values.length === 0) {\n return undefined;\n }\n const normalized = [...values]\n .map((value) => {\n const event: CalendarEvent = {\n start_at: value.start_at,\n end_at: value.end_at || undefined,\n title: value.title?.trim() || undefined,\n description: value.description?.trim() || undefined,\n location: value.location?.trim() || undefined,\n all_day: value.all_day,\n timezone: value.timezone?.trim() || undefined,\n recurrence: normalizeRecurrenceRule(value.recurrence),\n };\n for (const [key, fieldValue] of Object.entries(event)) {\n if (fieldValue === undefined) {\n delete (event as unknown as Record<string, unknown>)[key];\n }\n }\n return event;\n })\n .sort((a, b) => {\n const byStart = compareTimestampStrings(a.start_at, b.start_at);\n if (byStart !== 0) return byStart;\n const byEnd = (a.end_at ?? \"\").localeCompare(b.end_at ?? \"\");\n if (byEnd !== 0) return byEnd;\n const byTitle = (a.title ?? \"\").localeCompare(b.title ?? \"\");\n if (byTitle !== 0) return byTitle;\n const byAllDay = Number(Boolean(a.all_day)) - Number(Boolean(b.all_day));\n if (byAllDay !== 0) return byAllDay;\n const byTimezone = (a.timezone ?? \"\").localeCompare(b.timezone ?? \"\");\n if (byTimezone !== 0) return byTimezone;\n const byLocation = (a.location ?? \"\").localeCompare(b.location ?? \"\");\n if (byLocation !== 0) return byLocation;\n const byDescription = (a.description ?? \"\").localeCompare(b.description ?? \"\");\n if (byDescription !== 0) return byDescription;\n return JSON.stringify(a.recurrence ?? {}).localeCompare(JSON.stringify(b.recurrence ?? {}));\n });\n return normalized;\n}\n\nfunction normalizeFiles(values: LinkedFile[] | undefined): LinkedFile[] | undefined {\n if (!values || values.length === 0) return undefined;\n return values\n .map((value) => ({\n path: normalizePathValue(value.path),\n scope: value.scope,\n note: value.note?.trim() || undefined,\n }));\n}\n\nfunction normalizeTestRunSummaries(values: ItemTestRunSummary[] | undefined): ItemTestRunSummary[] | undefined {\n if (!values || values.length === 0) return undefined;\n const normalized = values\n .map((value) => {\n const runId = typeof value.run_id === \"string\" ? value.run_id.trim() : \"\";\n const kind = value.kind === \"test\" || value.kind === \"test-all\" ? value.kind : \"test\";\n const status =\n value.status === \"passed\" || value.status === \"failed\" || value.status === \"stopped\" || value.status === \"canceled\"\n ? value.status\n : \"failed\";\n const startedAt = typeof value.started_at === \"string\" ? value.started_at : \"\";\n const finishedAt = typeof value.finished_at === \"string\" ? value.finished_at : \"\";\n const recordedAt = typeof value.recorded_at === \"string\" ? value.recorded_at : \"\";\n const passed = typeof value.passed === \"number\" && Number.isFinite(value.passed) ? Math.max(0, Math.floor(value.passed)) : 0;\n const failed = typeof value.failed === \"number\" && Number.isFinite(value.failed) ? Math.max(0, Math.floor(value.failed)) : 0;\n const skipped = typeof value.skipped === \"number\" && Number.isFinite(value.skipped) ? Math.max(0, Math.floor(value.skipped)) : 0;\n return {\n run_id: runId,\n kind,\n status,\n started_at: startedAt,\n finished_at: finishedAt,\n recorded_at: recordedAt,\n attempt:\n typeof value.attempt === \"number\" && Number.isFinite(value.attempt) && value.attempt >= 1\n ? Math.floor(value.attempt)\n : undefined,\n resumed_from: value.resumed_from?.trim() || undefined,\n passed,\n failed,\n skipped,\n items:\n typeof value.items === \"number\" && Number.isFinite(value.items) && value.items >= 0\n ? Math.floor(value.items)\n : undefined,\n linked_tests:\n typeof value.linked_tests === \"number\" && Number.isFinite(value.linked_tests) && value.linked_tests >= 0\n ? Math.floor(value.linked_tests)\n : undefined,\n fail_on_skipped_triggered: value.fail_on_skipped_triggered === true ? true : undefined,\n };\n })\n .filter((value) => value.run_id.length > 0 && value.started_at.length > 0 && value.finished_at.length > 0 && value.recorded_at.length > 0)\n .sort((a, b) => {\n const byRecorded = compareTimestampStrings(a.recorded_at, b.recorded_at);\n if (byRecorded !== 0) return byRecorded;\n const byRunId = a.run_id.localeCompare(b.run_id);\n if (byRunId !== 0) return byRunId;\n return a.kind.localeCompare(b.kind);\n });\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction sortTests(values: LinkedTest[] | undefined): LinkedTest[] | undefined {\n if (!values || values.length === 0) return undefined;\n return [...values]\n .map((value) => ({\n command: value.command?.trim() || undefined,\n path: value.path ? normalizePathValue(value.path) : undefined,\n scope: value.scope,\n timeout_seconds:\n typeof value.timeout_seconds === \"number\" && Number.isFinite(value.timeout_seconds) && value.timeout_seconds > 0\n ? value.timeout_seconds\n : undefined,\n pm_context_mode: (() => {\n const normalized = value.pm_context_mode?.trim().toLowerCase();\n if (!normalized || !LINKED_TEST_PM_CONTEXT_MODE_VALUES.has(normalized)) {\n return undefined;\n }\n return normalized as LinkedTest[\"pm_context_mode\"];\n })(),\n env_set: value.env_set\n ? Object.fromEntries(\n Object.entries(value.env_set)\n .map(([key, envValue]) => [key.trim(), String(envValue).trim()] as const)\n .filter(([key, envValue]) => key.length > 0 && envValue.length > 0)\n .sort(([left], [right]) => left.localeCompare(right)),\n )\n : undefined,\n env_clear: value.env_clear\n ? [...new Set(value.env_clear.map((entry) => entry.trim()).filter((entry) => entry.length > 0))].sort((a, b) =>\n a.localeCompare(b),\n )\n : undefined,\n shared_host_safe: value.shared_host_safe === true ? true : undefined,\n assert_stdout_contains: value.assert_stdout_contains\n ? [...new Set(value.assert_stdout_contains.map((entry) => entry.trim()).filter((entry) => entry.length > 0))].sort((a, b) =>\n a.localeCompare(b),\n )\n : undefined,\n assert_stdout_regex: value.assert_stdout_regex\n ? [...new Set(value.assert_stdout_regex.map((entry) => entry.trim()).filter((entry) => entry.length > 0))].sort((a, b) =>\n a.localeCompare(b),\n )\n : undefined,\n assert_stderr_contains: value.assert_stderr_contains\n ? [...new Set(value.assert_stderr_contains.map((entry) => entry.trim()).filter((entry) => entry.length > 0))].sort((a, b) =>\n a.localeCompare(b),\n )\n : undefined,\n assert_stderr_regex: value.assert_stderr_regex\n ? [...new Set(value.assert_stderr_regex.map((entry) => entry.trim()).filter((entry) => entry.length > 0))].sort((a, b) =>\n a.localeCompare(b),\n )\n : undefined,\n assert_stdout_min_lines:\n typeof value.assert_stdout_min_lines === \"number\" &&\n Number.isFinite(value.assert_stdout_min_lines) &&\n value.assert_stdout_min_lines >= 0\n ? Math.floor(value.assert_stdout_min_lines)\n : undefined,\n assert_json_field_equals: value.assert_json_field_equals\n ? Object.fromEntries(\n Object.entries(value.assert_json_field_equals)\n .map(([key, expectedValue]) => [key.trim(), String(expectedValue).trim()] as const)\n .filter(([key, expectedValue]) => key.length > 0 && expectedValue.length > 0)\n .sort(([left], [right]) => left.localeCompare(right)),\n )\n : undefined,\n assert_json_field_gte: value.assert_json_field_gte\n ? Object.fromEntries(\n Object.entries(value.assert_json_field_gte)\n .map(([key, expectedValue]) => [key.trim(), Number(expectedValue)] as const)\n .filter(([key, expectedValue]) => key.length > 0 && Number.isFinite(expectedValue))\n .sort(([left], [right]) => left.localeCompare(right)),\n )\n : undefined,\n note: value.note?.trim() || undefined,\n }))\n .sort((a, b) => {\n const byScope = a.scope.localeCompare(b.scope);\n if (byScope !== 0) return byScope;\n const byPath = (a.path ?? \"\").localeCompare(b.path ?? \"\");\n if (byPath !== 0) return byPath;\n const byCommand = (a.command ?? \"\").localeCompare(b.command ?? \"\");\n if (byCommand !== 0) return byCommand;\n const byTimeout = (a.timeout_seconds ?? 0) - (b.timeout_seconds ?? 0);\n if (byTimeout !== 0) return byTimeout;\n const byPmContext = (a.pm_context_mode ?? \"\").localeCompare(b.pm_context_mode ?? \"\");\n if (byPmContext !== 0) return byPmContext;\n const bySharedHostSafe = Number(Boolean(a.shared_host_safe)) - Number(Boolean(b.shared_host_safe));\n if (bySharedHostSafe !== 0) return bySharedHostSafe;\n const byEnvClear = JSON.stringify(a.env_clear ?? []).localeCompare(JSON.stringify(b.env_clear ?? []));\n if (byEnvClear !== 0) return byEnvClear;\n const byEnvSet = JSON.stringify(a.env_set ?? {}).localeCompare(JSON.stringify(b.env_set ?? {}));\n if (byEnvSet !== 0) return byEnvSet;\n const byStdoutContains = JSON.stringify(a.assert_stdout_contains ?? []).localeCompare(\n JSON.stringify(b.assert_stdout_contains ?? []),\n );\n if (byStdoutContains !== 0) return byStdoutContains;\n const byStdoutRegex = JSON.stringify(a.assert_stdout_regex ?? []).localeCompare(\n JSON.stringify(b.assert_stdout_regex ?? []),\n );\n if (byStdoutRegex !== 0) return byStdoutRegex;\n const byStderrContains = JSON.stringify(a.assert_stderr_contains ?? []).localeCompare(\n JSON.stringify(b.assert_stderr_contains ?? []),\n );\n if (byStderrContains !== 0) return byStderrContains;\n const byStderrRegex = JSON.stringify(a.assert_stderr_regex ?? []).localeCompare(\n JSON.stringify(b.assert_stderr_regex ?? []),\n );\n if (byStderrRegex !== 0) return byStderrRegex;\n const byStdoutMinLines = (a.assert_stdout_min_lines ?? 0) - (b.assert_stdout_min_lines ?? 0);\n if (byStdoutMinLines !== 0) return byStdoutMinLines;\n const byJsonFieldEquals = JSON.stringify(a.assert_json_field_equals ?? {}).localeCompare(\n JSON.stringify(b.assert_json_field_equals ?? {}),\n );\n if (byJsonFieldEquals !== 0) return byJsonFieldEquals;\n const byJsonFieldGte = JSON.stringify(a.assert_json_field_gte ?? {}).localeCompare(\n JSON.stringify(b.assert_json_field_gte ?? {}),\n );\n if (byJsonFieldGte !== 0) return byJsonFieldGte;\n return (a.note ?? \"\").localeCompare(b.note ?? \"\");\n });\n}\n\nfunction sortDocs(values: LinkedDoc[] | undefined): LinkedDoc[] | undefined {\n if (!values || values.length === 0) return undefined;\n return [...values]\n .map((value) => ({\n path: normalizePathValue(value.path),\n scope: value.scope,\n note: value.note?.trim() || undefined,\n }))\n .sort((a, b) => {\n const byScope = a.scope.localeCompare(b.scope);\n if (byScope !== 0) return byScope;\n const byPath = a.path.localeCompare(b.path);\n if (byPath !== 0) return byPath;\n return (a.note ?? \"\").localeCompare(b.note ?? \"\");\n });\n}\n\nfunction trimStringOrUndefined(value: unknown): string | undefined {\n if (typeof value !== \"string\") return undefined;\n const trimmed = value.trim();\n return trimmed.length > 0 ? trimmed : undefined;\n}\n\nfunction normalizePlanStepLinks(value: unknown): PlanStepLink[] | undefined {\n if (!Array.isArray(value)) return undefined;\n const out: PlanStepLink[] = [];\n for (const entry of value) {\n if (entry === null || typeof entry !== \"object\") continue;\n const record = entry as Record<string, unknown>;\n const id = trimStringOrUndefined(record.id);\n const kind = trimStringOrUndefined(record.kind);\n if (!id || !kind) continue;\n const link: PlanStepLink = { id, kind: kind as PlanStepLink[\"kind\"] };\n const note = trimStringOrUndefined(record.note);\n if (note) link.note = note;\n if (record.required_before_step === true) link.required_before_step = true;\n out.push(link);\n }\n return out.length > 0 ? out : undefined;\n}\n\nfunction normalizePlanStepFiles(value: unknown): PlanStepFile[] | undefined {\n if (!Array.isArray(value)) return undefined;\n const out: PlanStepFile[] = [];\n for (const entry of value) {\n if (entry === null || typeof entry !== \"object\") continue;\n const record = entry as Record<string, unknown>;\n const path = trimStringOrUndefined(record.path);\n if (!path) continue;\n const file: PlanStepFile = { path: normalizePathValue(path) };\n if (record.scope === \"project\" || record.scope === \"global\") file.scope = record.scope;\n const note = trimStringOrUndefined(record.note);\n if (note) file.note = note;\n out.push(file);\n }\n return out.length > 0 ? out : undefined;\n}\n\nfunction normalizePlanStepTests(value: unknown): { command?: string; path?: string; note?: string }[] | undefined {\n if (!Array.isArray(value)) return undefined;\n const out: { command?: string; path?: string; note?: string }[] = [];\n for (const entry of value) {\n if (entry === null || typeof entry !== \"object\") continue;\n const record = entry as Record<string, unknown>;\n const command = trimStringOrUndefined(record.command);\n const path = trimStringOrUndefined(record.path);\n if (!command && !path) continue;\n const test: { command?: string; path?: string; note?: string } = {};\n if (command) test.command = command;\n if (path) test.path = normalizePathValue(path);\n const note = trimStringOrUndefined(record.note);\n if (note) test.note = note;\n out.push(test);\n }\n return out.length > 0 ? out : undefined;\n}\n\nfunction normalizePlanStepDocs(value: unknown): PlanStepDoc[] | undefined {\n if (!Array.isArray(value)) return undefined;\n const out: PlanStepDoc[] = [];\n for (const entry of value) {\n if (entry === null || typeof entry !== \"object\") continue;\n const record = entry as Record<string, unknown>;\n const path = trimStringOrUndefined(record.path);\n if (!path) continue;\n const doc: PlanStepDoc = { path: normalizePathValue(path) };\n if (record.scope === \"project\" || record.scope === \"global\") doc.scope = record.scope;\n const note = trimStringOrUndefined(record.note);\n if (note) doc.note = note;\n out.push(doc);\n }\n return out.length > 0 ? out : undefined;\n}\n\nfunction normalizePlanSteps(value: unknown): PlanStep[] | undefined {\n if (!Array.isArray(value)) return undefined;\n const out: PlanStep[] = [];\n for (const entry of value) {\n if (entry === null || typeof entry !== \"object\") continue;\n const record = entry as Record<string, unknown>;\n const id = trimStringOrUndefined(record.id);\n const title = trimStringOrUndefined(record.title);\n const status = trimStringOrUndefined(record.status);\n const orderRaw = record.order;\n const order = typeof orderRaw === \"number\" && Number.isFinite(orderRaw) ? orderRaw : Number(orderRaw);\n if (!id || !title || !status || !Number.isFinite(order)) continue;\n const created_at = typeof record.created_at === \"string\" ? record.created_at : \"\";\n const updated_at = typeof record.updated_at === \"string\" ? record.updated_at : \"\";\n if (!created_at || !updated_at) continue;\n const step: PlanStep = {\n id,\n order,\n title,\n status: status as PlanStepStatus,\n created_at,\n updated_at,\n };\n const body = trimStringOrUndefined(record.body);\n if (body) step.body = body;\n const owner = trimStringOrUndefined(record.owner);\n if (owner) step.owner = owner;\n const evidence = trimStringOrUndefined(record.evidence);\n if (evidence) step.evidence = evidence;\n const blockedReason = trimStringOrUndefined(record.blocked_reason);\n if (blockedReason) step.blocked_reason = blockedReason;\n const supersededBy = trimStringOrUndefined(record.superseded_by);\n if (supersededBy) step.superseded_by = supersededBy;\n const completedAt = typeof record.completed_at === \"string\" ? record.completed_at : undefined;\n if (completedAt && completedAt.length > 0) step.completed_at = completedAt;\n const links = normalizePlanStepLinks(record.linked_items);\n if (links) step.linked_items = links;\n const files = normalizePlanStepFiles(record.files);\n if (files) step.files = files;\n const tests = normalizePlanStepTests(record.tests);\n if (tests) step.tests = tests;\n const docs = normalizePlanStepDocs(record.docs);\n if (docs) step.docs = docs;\n out.push(step);\n }\n out.sort((left, right) => left.order - right.order);\n return out.length > 0 ? out : undefined;\n}\n\nfunction normalizePlanDecisions(value: unknown): PlanDecision[] | undefined {\n if (!Array.isArray(value)) return undefined;\n const out: PlanDecision[] = [];\n for (const entry of value) {\n if (entry === null || typeof entry !== \"object\") continue;\n const record = entry as Record<string, unknown>;\n const ts = typeof record.ts === \"string\" ? record.ts : \"\";\n const author = typeof record.author === \"string\" ? record.author : \"\";\n const decision = trimStringOrUndefined(record.decision);\n if (!ts || !author || !decision) continue;\n const item: PlanDecision = { ts, author, decision };\n const rationale = trimStringOrUndefined(record.rationale);\n if (rationale) item.rationale = rationale;\n const evidence = trimStringOrUndefined(record.evidence);\n if (evidence) item.evidence = evidence;\n const stepId = trimStringOrUndefined(record.step_id);\n if (stepId) item.step_id = stepId;\n out.push(item);\n }\n return out.length > 0 ? out : undefined;\n}\n\nfunction normalizePlanDiscoveries(value: unknown): PlanDiscovery[] | undefined {\n if (!Array.isArray(value)) return undefined;\n const out: PlanDiscovery[] = [];\n for (const entry of value) {\n if (entry === null || typeof entry !== \"object\") continue;\n const record = entry as Record<string, unknown>;\n const ts = typeof record.ts === \"string\" ? record.ts : \"\";\n const author = typeof record.author === \"string\" ? record.author : \"\";\n const text = trimStringOrUndefined(record.text);\n if (!ts || !author || !text) continue;\n const item: PlanDiscovery = { ts, author, text };\n const stepId = trimStringOrUndefined(record.step_id);\n if (stepId) item.step_id = stepId;\n out.push(item);\n }\n return out.length > 0 ? out : undefined;\n}\n\nfunction normalizePlanValidation(value: unknown): PlanValidationCheck[] | undefined {\n if (!Array.isArray(value)) return undefined;\n const out: PlanValidationCheck[] = [];\n for (const entry of value) {\n if (entry === null || typeof entry !== \"object\") continue;\n const record = entry as Record<string, unknown>;\n const text = trimStringOrUndefined(record.text);\n if (!text) continue;\n const item: PlanValidationCheck = { text };\n const command = trimStringOrUndefined(record.command);\n if (command) item.command = command;\n const expected = trimStringOrUndefined(record.expected);\n if (expected) item.expected = expected;\n out.push(item);\n }\n return out.length > 0 ? out : undefined;\n}\n\nfunction normalizeTypeOptions(values: Record<string, string> | undefined): Record<string, string> | undefined {\n if (!values) {\n return undefined;\n }\n const normalizedEntries = Object.entries(values)\n .map(([key, value]) => [key.trim(), value.trim()] as const)\n .filter(([key, value]) => key.length > 0 && value.length > 0)\n .sort((left, right) => left[0].localeCompare(right[0]));\n if (normalizedEntries.length === 0) {\n return undefined;\n }\n return Object.fromEntries(normalizedEntries);\n}\n\nfunction normalizeBody(body: string): string {\n return body.replace(/^\\n+/, \"\").replace(/\\s+$/, \"\");\n}\n\nfunction normalizeConfidenceValue(value: ItemMetadata[\"confidence\"] | undefined): ItemMetadata[\"confidence\"] | undefined {\n if (value === undefined) {\n return undefined;\n }\n if (typeof value === \"number\") {\n return value;\n }\n const normalized = value.trim().toLowerCase();\n if (normalized === \"med\") {\n return \"medium\";\n }\n if (CONFIDENCE_TEXT_VALUES.includes(normalized as (typeof CONFIDENCE_TEXT_VALUES)[number])) {\n return normalized as (typeof CONFIDENCE_TEXT_VALUES)[number];\n }\n return undefined;\n}\n\nfunction normalizeSeverityValue(value: ItemMetadata[\"severity\"] | undefined): ItemMetadata[\"severity\"] | undefined {\n if (value === undefined) {\n return undefined;\n }\n const normalized = value.trim().toLowerCase();\n if (normalized === \"med\") {\n return \"medium\";\n }\n if (ISSUE_SEVERITY_VALUES.includes(normalized as (typeof ISSUE_SEVERITY_VALUES)[number])) {\n return normalized as (typeof ISSUE_SEVERITY_VALUES)[number];\n }\n return undefined;\n}\n\nexport function normalizeFrontMatter(\n frontMatter: ItemMetadata,\n options: Pick<ItemDocumentFormatOptions, \"schema\" | \"onWarning\"> = {},\n): ItemMetadata {\n const runtimeContext = resolveRuntimeSchemaValidationContext(options);\n const normalizedStatus = normalizeStatusInput(frontMatter.status, runtimeContext?.statusRegistry) ?? frontMatter.status;\n const tags = Array.from(new Set(frontMatter.tags.map((tag) => tag.trim().toLowerCase()).filter(Boolean))).sort((a, b) =>\n a.localeCompare(b),\n );\n const normalized: ItemMetadata = {\n id: frontMatter.id,\n title: frontMatter.title,\n description: frontMatter.description,\n type: frontMatter.type,\n source_type: frontMatter.source_type?.trim() || undefined,\n type_options: normalizeTypeOptions(frontMatter.type_options),\n status: normalizedStatus,\n priority: frontMatter.priority,\n tags,\n created_at: frontMatter.created_at,\n updated_at: frontMatter.updated_at,\n dependencies: sortDependencies(frontMatter.dependencies),\n comments: sortLogValues(frontMatter.comments),\n notes: sortLogValues(frontMatter.notes),\n learnings: sortLogValues(frontMatter.learnings),\n files: normalizeFiles(frontMatter.files),\n tests: sortTests(frontMatter.tests),\n test_runs: normalizeTestRunSummaries(frontMatter.test_runs),\n docs: sortDocs(frontMatter.docs),\n deadline: frontMatter.deadline || undefined,\n reminders: sortReminders(frontMatter.reminders),\n events: sortEvents(frontMatter.events),\n closed_at: frontMatter.closed_at || undefined,\n assignee: frontMatter.assignee?.trim() || undefined,\n source_owner: frontMatter.source_owner?.trim() || undefined,\n author: frontMatter.author || undefined,\n estimated_minutes: frontMatter.estimated_minutes,\n acceptance_criteria: frontMatter.acceptance_criteria ?? undefined,\n design: frontMatter.design ?? undefined,\n external_ref: frontMatter.external_ref ?? undefined,\n definition_of_ready: frontMatter.definition_of_ready?.trim() || undefined,\n order: frontMatter.order,\n goal: frontMatter.goal?.trim() || undefined,\n objective: frontMatter.objective?.trim() || undefined,\n value: frontMatter.value?.trim() || undefined,\n impact: frontMatter.impact?.trim() || undefined,\n outcome: frontMatter.outcome?.trim() || undefined,\n why_now: frontMatter.why_now?.trim() || undefined,\n parent: frontMatter.parent?.trim() || undefined,\n reviewer: frontMatter.reviewer?.trim() || undefined,\n risk: frontMatter.risk ?? undefined,\n confidence: normalizeConfidenceValue(frontMatter.confidence),\n sprint: frontMatter.sprint?.trim() || undefined,\n release: frontMatter.release?.trim() || undefined,\n blocked_by: frontMatter.blocked_by?.trim() || undefined,\n blocked_reason: frontMatter.blocked_reason?.trim() || undefined,\n unblock_note: frontMatter.unblock_note?.trim() || undefined,\n reporter: frontMatter.reporter?.trim() || undefined,\n severity: normalizeSeverityValue(frontMatter.severity),\n environment: frontMatter.environment?.trim() || undefined,\n repro_steps: frontMatter.repro_steps?.trim() || undefined,\n resolution: frontMatter.resolution?.trim() || undefined,\n expected_result: frontMatter.expected_result?.trim() || undefined,\n actual_result: frontMatter.actual_result?.trim() || undefined,\n affected_version: frontMatter.affected_version?.trim() || undefined,\n fixed_version: frontMatter.fixed_version?.trim() || undefined,\n component: frontMatter.component?.trim() || undefined,\n regression: frontMatter.regression,\n customer_impact: frontMatter.customer_impact?.trim() || undefined,\n close_reason: frontMatter.close_reason || undefined,\n plan_mode: trimStringOrUndefined(frontMatter.plan_mode) as ItemMetadata[\"plan_mode\"],\n plan_scope: trimStringOrUndefined(frontMatter.plan_scope),\n plan_harness: trimStringOrUndefined(frontMatter.plan_harness) as ItemMetadata[\"plan_harness\"],\n plan_resume_context: trimStringOrUndefined(frontMatter.plan_resume_context),\n plan_steps: normalizePlanSteps(frontMatter.plan_steps),\n plan_decisions: normalizePlanDecisions(frontMatter.plan_decisions),\n plan_discoveries: normalizePlanDiscoveries(frontMatter.plan_discoveries),\n plan_validation: normalizePlanValidation(frontMatter.plan_validation),\n };\n const sourceRecord = frontMatter as unknown as Record<string, unknown>;\n for (const [key, value] of Object.entries(sourceRecord)) {\n if (Object.prototype.hasOwnProperty.call(normalized, key) || value === undefined) {\n continue;\n }\n (normalized as unknown as Record<string, unknown>)[key] = value;\n }\n\n if (runtimeContext?.fieldRegistry) {\n for (const definition of runtimeContext.fieldRegistry.definitions) {\n const currentValue = (normalized as unknown as Record<string, unknown>)[definition.metadata_key];\n if (currentValue === undefined) {\n continue;\n }\n (normalized as unknown as Record<string, unknown>)[definition.metadata_key] = coerceRuntimeFieldValue(\n definition,\n currentValue,\n `metadata field \"${definition.metadata_key}\"`,\n );\n }\n }\n\n if (runtimeContext && runtimeContext.unknownFieldPolicy !== \"allow\") {\n const knownKeys = new Set(STATIC_FRONT_MATTER_FIELD_SET);\n for (const definition of runtimeContext.fieldRegistry?.definitions ?? []) {\n knownKeys.add(definition.metadata_key);\n }\n const unknownKeys = Object.keys(normalized as unknown as Record<string, unknown>)\n .filter((key) => !knownKeys.has(key))\n .sort((left, right) => left.localeCompare(right));\n if (unknownKeys.length > 0) {\n if (runtimeContext.unknownFieldPolicy === \"reject\") {\n validationError(`unknown schema fields are not allowed: ${unknownKeys.join(\", \")}`);\n }\n }\n }\n\n for (const [key, value] of Object.entries(normalized)) {\n if (value === undefined) {\n delete (normalized as unknown as Record<string, unknown>)[key];\n }\n }\n return normalized;\n}\n\nfunction orderFrontMatter(frontMatter: ItemMetadata): Record<string, unknown> {\n return orderObject(frontMatter as unknown as Record<string, unknown>, FRONT_MATTER_KEY_ORDER);\n}\n\nfunction findJsonObjectEnd(content: string): number {\n let depth = 0;\n let inString = false;\n let escaped = false;\n\n for (let i = 0; i < content.length; i += 1) {\n const char = content[i];\n if (inString) {\n if (escaped) {\n escaped = false;\n continue;\n }\n if (char === \"\\\\\") {\n escaped = true;\n continue;\n }\n if (char === \"\\\"\") {\n inString = false;\n }\n continue;\n }\n if (char === \"\\\"\") {\n inString = true;\n continue;\n }\n if (char === \"{\") {\n depth += 1;\n continue;\n }\n if (char === \"}\") {\n depth -= 1;\n if (depth === 0) {\n return i;\n }\n }\n }\n\n return -1;\n}\n\nexport function splitFrontMatter(content: string): { frontMatter: string; body: string } {\n if (!content.startsWith(\"{\")) {\n return { frontMatter: \"\", body: content };\n }\n const end = findJsonObjectEnd(content);\n if (end < 0) {\n return { frontMatter: \"\", body: content };\n }\n const frontMatter = content.slice(0, end + 1);\n const body = content.slice(end + 1).replace(/^\\r?\\n+/, \"\");\n return { frontMatter, body };\n}\n\nfunction stripLeadingYamlDocument(content: string): { content: string; stripped: boolean } {\n const normalizedContent = content.charCodeAt(0) === 0xfeff ? content.slice(1) : content;\n const opener = normalizedContent.match(/^[ \\t]*---[ \\t]*(?:\\r?\\n|$)/);\n if (!opener) {\n return { content: normalizedContent, stripped: false };\n }\n\n let cursor = opener[0].length;\n while (cursor < normalizedContent.length) {\n const nextNewline = normalizedContent.indexOf(\"\\n\", cursor);\n const lineEnd = nextNewline === -1 ? normalizedContent.length : nextNewline;\n const line = normalizedContent.slice(cursor, lineEnd).replace(/\\r$/, \"\");\n const afterLine = nextNewline === -1 ? lineEnd : lineEnd + 1;\n if (line.trim() === \"---\") {\n return { content: normalizedContent.slice(afterLine).replace(/^\\s+/, \"\"), stripped: true };\n }\n cursor = afterLine;\n }\n\n return { content: normalizedContent, stripped: false };\n}\n\nfunction parseJsonMarkdownItemDocument(\n content: string,\n runtimeContext?: RuntimeSchemaValidationContext,\n options: Pick<ItemDocumentFormatOptions, \"schema\" | \"onWarning\"> = {},\n): ItemDocument {\n const normalized = stripLeadingYamlDocument(content);\n if (normalized.stripped) {\n options.onWarning?.(\"json_markdown_leading_yaml_frontmatter_ignored\");\n }\n const { frontMatter, body } = splitFrontMatter(normalized.content);\n if (!frontMatter) {\n const trimmed = content.trimStart();\n if (trimmed.startsWith(\"{\")) {\n validationError(\"JSON front matter is not valid JSON\");\n }\n validationError(\"missing JSON front matter\");\n }\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(frontMatter);\n } catch {\n validationError(\"JSON front matter is not valid JSON\");\n }\n assertValidFrontMatter(parsed, runtimeContext);\n\n return {\n metadata: normalizeFrontMatter(parsed, options),\n body: normalizeBody(body),\n };\n}\n\nfunction parseToonItemDocument(\n content: string,\n runtimeContext?: RuntimeSchemaValidationContext,\n options: Pick<ItemDocumentFormatOptions, \"schema\" | \"onWarning\"> = {},\n): ItemDocument {\n let parsed: unknown;\n try {\n // decodeToonItemContent transparently recovers documents that the upstream\n // strict decoder rejects (bracketed-token-then-colon inside a quoted value;\n // see toon-decode.ts). The recovery is lossless, so it stays silent rather\n // than emitting a per-read warning that would perpetually flip pm health\n // red for legacy files. The behavior is pinned by toon-decode.spec.ts.\n parsed = decodeToonItemContent(content).value;\n } catch {\n validationError(\"TOON item document is not valid TOON\");\n }\n assertFrontMatterCondition(\n typeof parsed === \"object\" && parsed !== null && !Array.isArray(parsed),\n \"TOON item document must be an object\",\n );\n const record = parsed as Record<string, unknown>;\n\n if (Object.prototype.hasOwnProperty.call(record, \"front_matter\")) {\n assertValidFrontMatter(record.front_matter, runtimeContext);\n assertFrontMatterCondition(\n record.body === undefined || typeof record.body === \"string\",\n \"TOON item document body must be a string\",\n );\n return {\n metadata: normalizeFrontMatter(record.front_matter, options),\n body: normalizeBody(typeof record.body === \"string\" ? record.body : \"\"),\n };\n }\n\n const { body, ...frontMatterRecord } = record;\n assertFrontMatterCondition(\n body === undefined || typeof body === \"string\",\n \"TOON item document body must be a string\",\n );\n assertValidFrontMatter(frontMatterRecord, runtimeContext);\n return {\n metadata: normalizeFrontMatter(frontMatterRecord, options),\n body: normalizeBody(typeof body === \"string\" ? body : \"\"),\n };\n}\n\nfunction serializeJsonMarkdownItemDocument(\n document: ItemDocument,\n options: Pick<ItemDocumentFormatOptions, \"schema\" | \"onWarning\"> = {},\n): string {\n const normalizedFrontMatter = normalizeFrontMatter(document.metadata, options);\n const orderedFrontMatter = orderFrontMatter(normalizedFrontMatter);\n const serializedFrontMatter = JSON.stringify(orderedFrontMatter, null, 2);\n const normalizedBody = normalizeBody(document.body ?? \"\");\n if (!normalizedBody) {\n return `${serializedFrontMatter}\\n`;\n }\n return `${serializedFrontMatter}\\n\\n${normalizedBody}\\n`;\n}\n\nfunction serializeToonItemDocument(\n document: ItemDocument,\n options: Pick<ItemDocumentFormatOptions, \"schema\" | \"onWarning\"> = {},\n): string {\n const normalizedFrontMatter = normalizeFrontMatter(document.metadata, options);\n const orderedFrontMatter = orderFrontMatter(normalizedFrontMatter);\n const normalizedBody = normalizeBody(document.body ?? \"\");\n return `${encodeToon({ ...orderedFrontMatter, body: normalizedBody })}\\n`;\n}\n\nexport function parseItemDocument(content: string, options: ItemDocumentFormatOptions = {}): ItemDocument {\n const conflictMarker = findFirstMergeConflictMarker(content);\n if (conflictMarker) {\n throw new PmCliError(\n `Merge conflict markers detected in item document at line ${conflictMarker.line} (${conflictMarker.marker}). Resolve <<<<<<< ======= >>>>>>> markers and retry.`,\n EXIT_CODE.GENERIC_FAILURE,\n {\n code: \"merge_conflict_markers_detected\",\n required: \"Resolve merge-conflict markers in the item file before parsing or mutation commands.\",\n why: \"Partially merged documents can corrupt item metadata and history integrity.\",\n examples: [\"git status\", \"git add <resolved-file> && git commit\"],\n nextSteps: [\"Resolve conflicts, save the file, then rerun the pm command.\"],\n },\n );\n }\n const format = options.format ?? \"toon\";\n const runtimeContext = resolveRuntimeSchemaValidationContext(options);\n return format === \"toon\"\n ? parseToonItemDocument(content, runtimeContext, options)\n : parseJsonMarkdownItemDocument(content, runtimeContext, options);\n}\n\nexport function serializeItemDocument(document: ItemDocument, options: ItemDocumentFormatOptions = {}): string {\n const format = options.format ?? \"toon\";\n return format === \"toon\" ? serializeToonItemDocument(document, options) : serializeJsonMarkdownItemDocument(document, options);\n}\n\nexport function canonicalDocument(document: ItemDocument, options: Pick<ItemDocumentFormatOptions, \"schema\" | \"onWarning\"> = {}): ItemDocument {\n return {\n metadata: normalizeFrontMatter(document.metadata, options),\n body: normalizeBody(document.body ?? \"\"),\n };\n}\n", "import { decode as decodeToon } from \"@toon-format/toon\";\n\nexport interface ToonDecodeResult {\n /** The decoded TOON document. */\n value: unknown;\n /** True when the strict decode required the scalar-bracket escape workaround. */\n usedScalarBracketEscape: boolean;\n}\n\n/**\n * Escape `[` as `\\u005b` inside quoted scalar values so the upstream\n * `@toon-format/toon` strict decoder cannot mis-read them.\n *\n * The upstream bug: the strict decoder's array-header detection scans the whole\n * line for an opening bracket when the key is unquoted, so a quoted scalar value\n * that contains a bracketed token followed (anywhere later on the line) by a\n * colon, e.g. `body: \"POST [redacted]: ok\"` or `desc: \"sntr[ysu]_ ... :\"`, is\n * mis-detected as a `key`+bracket+colon array header and throws. The library's\n * own `encode()` emits exactly this otherwise-correctly-quoted form, so strict\n * decode cannot read the encoder's own output for such values.\n *\n * A line is treated as a scalar `key: value` (not an array header) only when its\n * `\": \"` key/value separator occurs before the first `[`; array-header lines\n * (`tags[3]:`, `comments[6]{...}:`) have the bracket first and are left\n * untouched, as are non-string (unquoted) values. Within a matched quoted value\n * every `[` becomes `\\u005b`, which the decoder unescapes back to `[`, so the\n * decoded value is byte-for-byte identical. Crucially, this neutralises only the\n * bracket trigger and nothing else, so the retry stays in strict mode and every\n * other strict invariant (duplicate sibling keys, array-count mismatches, tabs\n * in indentation, ...) is still enforced.\n */\nfunction escapeBracketsInQuotedScalars(content: string): string {\n return content\n .split(\"\\n\")\n .map((line) => {\n const separatorIndex = line.indexOf(\": \");\n const bracketIndex = line.indexOf(\"[\");\n if (separatorIndex === -1 || bracketIndex === -1 || bracketIndex < separatorIndex) {\n return line;\n }\n const key = line.slice(0, separatorIndex + 2);\n const value = line.slice(separatorIndex + 2);\n if (!value.startsWith('\"')) {\n return line;\n }\n return key + value.replaceAll(\"[\", \"\\\\u005b\");\n })\n .join(\"\\n\");\n}\n\n/**\n * Decode a TOON item document, working around the upstream bracket mis-parse\n * bug described in {@link escapeBracketsInQuotedScalars}.\n *\n * Strict decode is attempted first (the fast path for all well-formed\n * documents). Only if it fails is the scalar-bracket escape applied and strict\n * decode retried, so the workaround never relaxes strict validation; it only\n * removes the specific trigger. If the escaped content is identical to the\n * original (no quoted-scalar bracket to neutralise) the original strict error is\n * surfaced unchanged; if the retry itself fails the document has a genuine\n * problem beyond the bracket bug and that error propagates.\n */\nexport function decodeToonItemContent(content: string): ToonDecodeResult {\n try {\n return { value: decodeToon(content), usedScalarBracketEscape: false };\n } catch (strictError) {\n const escaped = escapeBracketsInQuotedScalars(content);\n if (escaped === content) {\n throw strictError;\n }\n return { value: decodeToon(escaped), usedScalarBracketEscape: true };\n }\n}\n", "import type { ItemMetadata } from \"../../types/index.js\";\n\n/**\n * Bridge a typed item record into the generic `Record<string, unknown>` shape\n * consumed by formatters, field projections, history canonicalization, and\n * JSON output paths.\n *\n * `ItemMetadata` carries an index signature, but the structural mismatch on its\n * concretely-typed fields means TypeScript still requires a double cast to widen\n * it. Centralizing that `as unknown as Record<string, unknown>` widening here\n * gives the type bridge a single, named, documented home instead of scattering\n * the cast across command and core modules.\n *\n * This is a compile-time-only widening: the returned value is the very same\n * object reference, with no runtime transformation. (It is intentionally\n * distinct from the runtime `asRecord*` guards in `core/shared/primitives.ts`,\n * which validate `typeof` at runtime.) `ItemFrontMatter` is an alias of\n * `ItemMetadata`, so front-matter values are accepted as-is.\n */\nexport function toItemRecord(item: ItemMetadata): Record<string, unknown> {\n return item as unknown as Record<string, unknown>;\n}\n", "import jsonPatch from \"fast-json-patch\";\nimport { FRONT_MATTER_KEY_ORDER } from \"../shared/constants.js\";\nimport { runActiveServiceOverride } from \"../extensions/index.js\";\nimport { appendLineAtomic } from \"../fs/fs-utils.js\";\nimport { canonicalDocument } from \"../item/item-format.js\";\nimport { toItemRecord } from \"../item/item-record.js\";\nimport { orderObject, sha256Hex, stableStringify } from \"../shared/serialization.js\";\nimport type { HistoryEntry, HistoryPatchOp, ItemDocument } from \"../../types/index.js\";\n\nconst EMPTY_LEGACY_HASH_DOCUMENT = {\n front_matter: {},\n body: \"\",\n};\n\nfunction decodeJsonPointer(path: string): string[] {\n if (!path || path === \"/\") {\n return [];\n }\n if (!path.startsWith(\"/\")) {\n return [];\n }\n return path\n .slice(1)\n .split(\"/\")\n .map((segment) => segment.replaceAll(\"~1\", \"/\").replaceAll(\"~0\", \"~\"));\n}\n\nfunction isDefinedPointerPath(document: unknown, path: string): boolean {\n const segments = decodeJsonPointer(path);\n if (segments.length === 0) {\n return true;\n }\n let cursor: unknown = document;\n for (const segment of segments) {\n if (Array.isArray(cursor)) {\n if (segment === \"-\" || !/^(0|[1-9]\\d*)$/.test(segment)) {\n return false;\n }\n const index = Number(segment);\n if (!Number.isInteger(index) || index < 0 || index >= cursor.length) {\n return false;\n }\n const next = cursor[index];\n if (next === undefined) {\n return false;\n }\n cursor = next;\n continue;\n }\n if (typeof cursor !== \"object\" || cursor === null) {\n return false;\n }\n if (!Object.prototype.hasOwnProperty.call(cursor, segment)) {\n return false;\n }\n const next = (cursor as Record<string, unknown>)[segment];\n if (next === undefined) {\n return false;\n }\n cursor = next;\n }\n return true;\n}\n\nfunction normalizeHistoryPatchOps(\n beforeDocument: { metadata: Record<string, unknown>; body: string },\n patch: HistoryPatchOp[],\n): HistoryPatchOp[] {\n const normalized: HistoryPatchOp[] = [];\n let replayCursor: unknown = structuredClone(beforeDocument);\n for (const operation of patch) {\n const normalizedOperation =\n operation.op === \"replace\" && !isDefinedPointerPath(replayCursor, operation.path)\n ? ({ ...operation, op: \"add\" } as HistoryPatchOp)\n : operation;\n normalized.push(normalizedOperation);\n replayCursor = jsonPatch.applyPatch(\n replayCursor,\n [normalizedOperation as jsonPatch.Operation],\n true,\n true,\n ).newDocument as unknown;\n }\n return normalized;\n}\n\nfunction canonicalHashDocument(document: ItemDocument): { front_matter: Record<string, unknown>; body: string } {\n const hasMetadata = document.metadata && Object.keys(document.metadata).length > 0;\n if (!hasMetadata) {\n return {\n front_matter: {},\n body: document.body ?? \"\",\n };\n }\n const canonical = canonicalDocument(document);\n const orderedFrontMatter = orderObject(toItemRecord(canonical.metadata), FRONT_MATTER_KEY_ORDER);\n return {\n front_matter: orderedFrontMatter,\n body: canonical.body,\n };\n}\n\nfunction canonicalPatchDocument(document: ItemDocument): { metadata: Record<string, unknown>; body: string } {\n const hasMetadata = document.metadata && Object.keys(document.metadata).length > 0;\n if (!hasMetadata) {\n return {\n metadata: {},\n body: document.body ?? \"\",\n };\n }\n const canonical = canonicalDocument(document);\n const orderedMetadata = orderObject(toItemRecord(canonical.metadata), FRONT_MATTER_KEY_ORDER);\n return {\n metadata: orderedMetadata,\n body: canonical.body,\n };\n}\n\nexport function hashDocument(document: ItemDocument): string {\n return sha256Hex(stableStringify(canonicalHashDocument(document)));\n}\n\nexport function hashEmptyDocument(): string {\n return sha256Hex(stableStringify(EMPTY_LEGACY_HASH_DOCUMENT));\n}\n\nexport function createHistoryEntry(params: {\n nowIso: string;\n author: string;\n op: string;\n before: ItemDocument;\n after: ItemDocument;\n message?: string;\n}): HistoryEntry {\n const beforeHashCanonical = canonicalHashDocument(params.before);\n const afterHashCanonical = canonicalHashDocument(params.after);\n const beforePatchCanonical = canonicalPatchDocument(params.before);\n const afterPatchCanonical = canonicalPatchDocument(params.after);\n const rawPatch = jsonPatch.compare(beforePatchCanonical, afterPatchCanonical) as HistoryPatchOp[];\n const patch = normalizeHistoryPatchOps(beforePatchCanonical, rawPatch);\n\n return {\n ts: params.nowIso,\n author: params.author,\n op: params.op,\n patch,\n before_hash: sha256Hex(stableStringify(beforeHashCanonical)),\n after_hash: sha256Hex(stableStringify(afterHashCanonical)),\n message: params.message === undefined ? undefined : params.message,\n };\n}\n\nexport async function appendHistoryEntry(historyPath: string, entry: HistoryEntry): Promise<void> {\n const override = await runActiveServiceOverride(\"history_append\", {\n history_path: historyPath,\n entry,\n });\n if (override.handled) {\n if (override.result === false) {\n return;\n }\n if (typeof override.result === \"string\") {\n await appendLineAtomic(historyPath, override.result);\n return;\n }\n if (typeof override.result === \"object\" && override.result !== null) {\n const record = override.result as {\n history_path?: unknown;\n entry?: unknown;\n line?: unknown;\n skip?: unknown;\n };\n if (record.skip === true) {\n return;\n }\n const nextHistoryPath = typeof record.history_path === \"string\" ? record.history_path : historyPath;\n if (typeof record.line === \"string\") {\n await appendLineAtomic(nextHistoryPath, record.line);\n return;\n }\n const nextEntry = (record.entry ?? entry) as HistoryEntry;\n await appendLineAtomic(nextHistoryPath, JSON.stringify(nextEntry));\n return;\n }\n }\n await appendLineAtomic(historyPath, JSON.stringify(entry));\n}\n", "import fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { runActiveOnWriteHooks } from \"../extensions/index.js\";\nimport { ensureDir, pathExists } from \"../fs/fs-utils.js\";\nimport { EXIT_CODE } from \"../shared/constants.js\";\nimport { PmCliError } from \"../shared/errors.js\";\nimport { getHistoryPath } from \"../store/paths.js\";\nimport type { PmSettings } from \"../../types/index.js\";\n\ninterface HistoryStreamPolicyParams {\n pmRoot: string;\n settings: PmSettings;\n itemId: string;\n commandLabel: string;\n}\n\ninterface HistoryStreamPolicyManyParams {\n pmRoot: string;\n settings: PmSettings;\n itemIds: string[];\n commandLabel: string;\n}\n\nexport interface HistoryStreamPolicyResult {\n auto_created_ids: string[];\n warnings: string[];\n}\n\nfunction toSortedUniqueItemIds(itemIds: string[]): string[] {\n return [...new Set(itemIds.filter((value) => value.trim().length > 0))].sort((left, right) => left.localeCompare(right));\n}\n\nfunction strictMissingStreamError(itemId: string, commandLabel: string): PmCliError {\n return new PmCliError(\n `Missing history stream for ${itemId}. ${commandLabel} requires history streams when settings.history.missing_stream is strict_error.`,\n EXIT_CODE.NOT_FOUND,\n );\n}\n\nasync function createStream(historyPath: string, commandLabel: string): Promise<string[]> {\n await ensureDir(path.dirname(historyPath));\n const handle = await fs.open(historyPath, \"a\");\n await handle.close();\n return runActiveOnWriteHooks({\n path: historyPath,\n scope: \"project\",\n op: `${commandLabel}:history:auto_create`,\n });\n}\n\nexport async function enforceHistoryStreamPolicyForItem(params: HistoryStreamPolicyParams): Promise<HistoryStreamPolicyResult> {\n return enforceHistoryStreamPolicyForItems({\n pmRoot: params.pmRoot,\n settings: params.settings,\n itemIds: [params.itemId],\n commandLabel: params.commandLabel,\n });\n}\n\nexport async function enforceHistoryStreamPolicyForItems(\n params: HistoryStreamPolicyManyParams,\n): Promise<HistoryStreamPolicyResult> {\n const ids = toSortedUniqueItemIds(params.itemIds);\n const autoCreated: string[] = [];\n const warnings: string[] = [];\n\n for (const itemId of ids) {\n const historyPath = getHistoryPath(params.pmRoot, itemId);\n if (await pathExists(historyPath)) {\n continue;\n }\n if (params.settings.history.missing_stream === \"strict_error\") {\n throw strictMissingStreamError(itemId, params.commandLabel);\n }\n warnings.push(...(await createStream(historyPath, params.commandLabel)));\n warnings.push(`history_stream_auto_created:${itemId}`);\n autoCreated.push(itemId);\n }\n\n return {\n auto_created_ids: autoCreated,\n warnings,\n };\n}\n", "import fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { runActiveOnReadHooks, runActiveOnWriteHooks, runActiveServiceOverride } from \"../extensions/index.js\";\nimport { EXIT_CODE } from \"../shared/constants.js\";\nimport { PmCliError } from \"../shared/errors.js\";\nimport { toErrorMessage } from \"../shared/primitives.js\";\nimport { getLockPath } from \"../store/paths.js\";\nimport { nowIso } from \"../shared/time.js\";\n\ninterface LockInfo {\n id: string;\n pid: number;\n owner: string;\n created_at: string;\n ttl_seconds: number;\n}\n\ntype LockWriteOp = \"lock:create\" | \"lock:release\" | \"lock:stale_remove\";\n\ninterface LockReadResult {\n info: LockInfo | null;\n warnings: string[];\n}\n\nfunction parseLockInfo(raw: string): LockReadResult {\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw) as unknown;\n } catch {\n return {\n info: null,\n warnings: [\"lock_info_invalid_json\"],\n };\n }\n if (typeof parsed !== \"object\" || parsed === null || Array.isArray(parsed)) {\n return {\n info: null,\n warnings: [\"lock_info_invalid_shape\"],\n };\n }\n const candidate = parsed as Record<string, unknown>;\n const id = candidate.id;\n const pid = candidate.pid;\n const owner = candidate.owner;\n const createdAt = candidate.created_at;\n const ttlSeconds = candidate.ttl_seconds;\n if (\n typeof id !== \"string\" ||\n typeof pid !== \"number\" ||\n !Number.isFinite(pid) ||\n typeof owner !== \"string\" ||\n typeof createdAt !== \"string\" ||\n typeof ttlSeconds !== \"number\" ||\n !Number.isFinite(ttlSeconds)\n ) {\n return {\n info: null,\n warnings: [\"lock_info_invalid_shape\"],\n };\n }\n return {\n info: {\n id,\n pid,\n owner,\n created_at: createdAt,\n ttl_seconds: ttlSeconds,\n },\n warnings: [],\n };\n}\n\nasync function readLockInfo(lockPath: string): Promise<LockReadResult> {\n try {\n const raw = await fs.readFile(lockPath, \"utf8\");\n await runActiveOnReadHooks({\n path: lockPath,\n scope: \"project\",\n });\n return parseLockInfo(raw);\n } catch (error: unknown) {\n if (isErrno(error, \"ENOENT\")) {\n return {\n info: null,\n warnings: [],\n };\n }\n return {\n info: null,\n warnings: [\"lock_info_read_failed\"],\n };\n }\n}\n\nfunction isErrno(error: unknown, code: string): boolean {\n return typeof error === \"object\" && error !== null && \"code\" in error && (error as { code?: string }).code === code;\n}\n\nasync function emitLockWriteHook(lockPath: string, op: LockWriteOp): Promise<void> {\n await runActiveOnWriteHooks({\n path: lockPath,\n scope: \"project\",\n op,\n });\n}\n\nfunction buildLockPayload(id: string, owner: string, ttlSeconds: number): LockInfo {\n return {\n id,\n pid: process.pid,\n owner,\n created_at: nowIso(),\n ttl_seconds: ttlSeconds,\n };\n}\n\nasync function createLockFile(lockPath: string, id: string, owner: string, ttlSeconds: number): Promise<void> {\n await fs.mkdir(path.dirname(lockPath), { recursive: true });\n const handle = await fs.open(lockPath, \"wx\");\n try {\n await handle.writeFile(`${JSON.stringify(buildLockPayload(id, owner, ttlSeconds), null, 2)}\\n`, \"utf8\");\n } finally {\n await handle.close();\n }\n await emitLockWriteHook(lockPath, \"lock:create\");\n}\n\nasync function unlinkLockWithHook(lockPath: string, op: \"lock:release\" | \"lock:stale_remove\"): Promise<void> {\n try {\n await fs.unlink(lockPath);\n await emitLockWriteHook(lockPath, op);\n } catch {\n // Lock cleanup is best-effort.\n }\n}\n\nfunction isStaleLock(info: LockInfo | null, ttlSeconds: number): boolean {\n const createdAtMs = info?.created_at ? Date.parse(info.created_at) : Number.NaN;\n const ageMs = Number.isFinite(createdAtMs) ? Date.now() - createdAtMs : Number.POSITIVE_INFINITY;\n return ageMs > ttlSeconds * 1000;\n}\n\nfunction lockOwnerSuffix(info: LockInfo | null): string {\n return info?.owner ? ` (owner ${info.owner})` : \"\";\n}\n\nasync function handleExistingLock(\n lockPath: string,\n id: string,\n ttlSeconds: number,\n force: boolean,\n forceRequiredForStaleLock: boolean,\n): Promise<void> {\n const lockInfo = await readLockInfo(lockPath);\n if (!isStaleLock(lockInfo.info, ttlSeconds)) {\n throw new PmCliError(`Item ${id} is locked${lockOwnerSuffix(lockInfo.info)}`, EXIT_CODE.CONFLICT);\n }\n\n if (!force && forceRequiredForStaleLock) {\n const warningSuffix = lockInfo.warnings.length > 0 ? ` (${lockInfo.warnings.join(\",\")})` : \"\";\n throw new PmCliError(\n `Item ${id} lock is stale${warningSuffix}; rerun with --force when supported for this command`,\n EXIT_CODE.CONFLICT,\n );\n }\n\n await unlinkLockWithHook(lockPath, \"lock:stale_remove\");\n}\n\n\nexport async function acquireLock(\n pmRoot: string,\n id: string,\n ttlSeconds: number,\n owner: string,\n force = false,\n forceRequiredForStaleLock = true,\n): Promise<() => Promise<void>> {\n const lockOverride = await runActiveServiceOverride(\"lock_acquire\", {\n pm_root: pmRoot,\n id,\n ttl_seconds: ttlSeconds,\n owner,\n force,\n force_required_for_stale_lock: forceRequiredForStaleLock,\n });\n if (lockOverride.handled) {\n const releaseFromFunction = typeof lockOverride.result === \"function\" ? lockOverride.result : null;\n const releaseFromObject =\n typeof lockOverride.result === \"object\" &&\n lockOverride.result !== null &&\n \"release\" in lockOverride.result &&\n typeof (lockOverride.result as { release?: unknown }).release === \"function\"\n ? ((lockOverride.result as { release: () => Promise<void> | void }).release as () => Promise<void> | void)\n : null;\n const release = releaseFromFunction ?? releaseFromObject;\n if (release) {\n return async () => {\n await Promise.resolve(release());\n await runActiveServiceOverride(\"lock_release\", {\n pm_root: pmRoot,\n id,\n owner,\n });\n };\n }\n }\n\n const lockPath = getLockPath(pmRoot, id);\n\n for (let attempt = 0; attempt < 3; attempt += 1) {\n try {\n await createLockFile(lockPath, id, owner, ttlSeconds);\n return async () => {\n await unlinkLockWithHook(lockPath, \"lock:release\");\n await runActiveServiceOverride(\"lock_release\", {\n pm_root: pmRoot,\n id,\n owner,\n });\n };\n } catch (error: unknown) {\n if (!isErrno(error, \"EEXIST\")) {\n throw new PmCliError(`Failed to acquire lock for ${id}: ${toErrorMessage(error)}`, EXIT_CODE.GENERIC_FAILURE);\n }\n await handleExistingLock(lockPath, id, ttlSeconds, force, forceRequiredForStaleLock);\n }\n }\n\n throw new PmCliError(`Failed to acquire lock for ${id}`, EXIT_CODE.CONFLICT);\n}\n", "import crypto from \"node:crypto\";\nimport path from \"node:path\";\nimport { TYPE_TO_FOLDER } from \"../shared/constants.js\";\nimport { pathExists } from \"../fs/fs-utils.js\";\n\nexport function normalizePrefix(input: string | undefined): string {\n const normalized = (input ?? \"\").trim().toLowerCase();\n if (!normalized) return \"pm-\";\n return normalized.endsWith(\"-\") ? normalized : `${normalized}-`;\n}\n\nexport function normalizeRawItemId(input: string): string {\n let normalized = input.trim().toLowerCase();\n if (normalized.startsWith(\"#\")) {\n normalized = normalized.slice(1);\n }\n return normalized;\n}\n\nexport function normalizeItemId(input: string, prefix: string): string {\n const canonicalPrefix = normalizePrefix(prefix);\n const normalized = normalizeRawItemId(input);\n if (normalized.startsWith(canonicalPrefix)) {\n return normalized;\n }\n return `${canonicalPrefix}${normalized}`;\n}\n\nfunction randomToken(length: number): string {\n const bytes = crypto.randomBytes(length);\n let token = \"\";\n for (const byte of bytes) {\n token += (byte % 36).toString(36);\n }\n return token;\n}\n\nasync function idExists(pmRoot: string, id: string): Promise<boolean> {\n const checks = Object.values(TYPE_TO_FOLDER).flatMap((folder) => [\n path.join(pmRoot, folder, `${id}.md`),\n path.join(pmRoot, folder, `${id}.toon`),\n ]);\n for (const target of checks) {\n if (await pathExists(target)) {\n return true;\n }\n }\n return false;\n}\n\nexport async function generateItemId(pmRoot: string, prefix: string): Promise<string> {\n let tokenLength = 4;\n let attempts = 0;\n\n while (tokenLength <= 10) {\n for (let i = 0; i < 32; i += 1) {\n const id = `${normalizePrefix(prefix)}${randomToken(tokenLength)}`;\n if (!(await idExists(pmRoot, id))) {\n return id;\n }\n attempts += 1;\n }\n tokenLength += 1;\n }\n\n throw new Error(`Unable to generate unique id after ${attempts} attempts`);\n}\n", "import fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { createHash } from \"node:crypto\";\nimport { hasActiveOnReadHooks, runActiveOnReadHooks } from \"../extensions/index.js\";\nimport { parseItemDocument } from \"../item/item-format.js\";\nimport { writeFileAtomic } from \"../fs/fs-utils.js\";\nimport { ITEM_FILE_EXTENSIONS, getItemFormatFromPath } from \"./paths.js\";\nimport type { ItemDocument, ItemFormat, ItemMetadata, ItemType, RuntimeSchemaSettings } from \"../../types/index.js\";\n\nconst CACHE_VERSION = 6;\nconst CACHE_FILENAME = \"metadata-cache.json\";\nconst BODY_CACHE_FILENAME = \"metadata-cache-bodies.json\";\nconst COLLECTIONS_CACHE_FILENAME = \"metadata-cache-collections.json\";\n\n/**\n * Heavy \"collection\" front-matter fields. These arrays dominate the on-disk cache\n * (e.g. a single item's comment thread can be hundreds of KB) yet the hot list path\n * (`pm list`, stats, deps, activity, calendar, close) never reads them. They are\n * stored in a separate collections cache that is parsed only when a caller opts in\n * (`includeCollections`), keeping the always-loaded light cache an order of magnitude\n * smaller and its JSON.parse correspondingly cheaper.\n */\nexport const HEAVY_METADATA_KEYS = [\n \"comments\",\n \"notes\",\n \"learnings\",\n \"files\",\n \"tests\",\n \"test_runs\",\n \"docs\",\n] as const;\n\ninterface StatSignature {\n mtime_ms: number;\n ctime_ms: number;\n size: number;\n}\n\ninterface CachedEntry extends StatSignature {\n metadata: ItemMetadata;\n body_length: number;\n}\n\ninterface CachedBody extends StatSignature {\n body: string;\n}\n\ninterface CachedCollections extends StatSignature {\n collections: Record<string, unknown>;\n}\n\ninterface CacheEnvelope {\n version: number;\n context_fingerprint: string;\n entries: Record<string, CachedEntry>;\n}\n\ninterface BodyCacheEnvelope {\n version: number;\n context_fingerprint: string;\n bodies: Record<string, CachedBody>;\n}\n\ninterface CollectionsCacheEnvelope {\n version: number;\n context_fingerprint: string;\n collections: Record<string, CachedCollections>;\n}\n\n/**\n * Split parsed front-matter into the light scalar/small fields (everything except the\n * heavy collection arrays) and the heavy collection fields. Only keys that are actually\n * present are moved, so an item without comments stays without comments in both tiers.\n */\nfunction splitHeavyMetadata(metadata: ItemMetadata): {\n light: ItemMetadata;\n heavy: Record<string, unknown>;\n} {\n const light = { ...metadata } as Record<string, unknown>;\n const heavy: Record<string, unknown> = {};\n for (const key of HEAVY_METADATA_KEYS) {\n if (key in light) {\n heavy[key] = light[key];\n delete light[key];\n }\n }\n return { light: light as ItemMetadata, heavy };\n}\n\n/**\n * Recombine light metadata with cached heavy collection fields. Key order differs from\n * the on-disk document, but every downstream hash/serialization canonicalizes and\n * sorts keys (`stableStringify`), so the merged record is byte-identical once hashed.\n */\nfunction mergeHeavyMetadata(light: ItemMetadata, heavy: Record<string, unknown> | undefined): ItemMetadata {\n if (!heavy || Object.keys(heavy).length === 0) {\n return light;\n }\n return { ...light, ...heavy } as ItemMetadata;\n}\n\nexport interface CachedDocumentCandidate {\n metadata: ItemMetadata;\n body?: string;\n item_format: ItemFormat;\n item_path: string;\n}\n\nfunction computeContextFingerprint(\n preferredFormat: ItemFormat | undefined,\n typeToFolder: Record<string, string>,\n schema: RuntimeSchemaSettings | undefined,\n): string {\n const hash = createHash(\"sha256\");\n hash.update(`format:${preferredFormat ?? \"default\"}`);\n const sortedTypes = Object.entries(typeToFolder)\n .sort(([a], [b]) => a.localeCompare(b))\n .map(([type, folder]) => `${type}=${folder}`)\n .join(\",\");\n hash.update(`|types:${sortedTypes}`);\n if (schema) {\n hash.update(`|schema:${JSON.stringify(schema)}`);\n }\n return hash.digest(\"hex\").slice(0, 16);\n}\n\nfunction getCachePath(pmRoot: string): string {\n return path.join(pmRoot, \"runtime\", CACHE_FILENAME);\n}\n\nfunction getBodyCachePath(pmRoot: string): string {\n return path.join(pmRoot, \"runtime\", BODY_CACHE_FILENAME);\n}\n\nfunction getCollectionsCachePath(pmRoot: string): string {\n return path.join(pmRoot, \"runtime\", COLLECTIONS_CACHE_FILENAME);\n}\n\nasync function loadCache(pmRoot: string): Promise<CacheEnvelope | null> {\n try {\n const raw = await fs.readFile(getCachePath(pmRoot), \"utf8\");\n const parsed = JSON.parse(raw) as CacheEnvelope;\n if (parsed.version !== CACHE_VERSION || typeof parsed.entries !== \"object\" || parsed.entries === null) {\n return null;\n }\n return parsed;\n } catch {\n return null;\n }\n}\n\nasync function loadBodyCache(pmRoot: string): Promise<BodyCacheEnvelope | null> {\n try {\n const raw = await fs.readFile(getBodyCachePath(pmRoot), \"utf8\");\n const parsed = JSON.parse(raw) as BodyCacheEnvelope;\n if (parsed.version !== CACHE_VERSION || typeof parsed.bodies !== \"object\" || parsed.bodies === null) {\n return null;\n }\n return parsed;\n } catch {\n return null;\n }\n}\n\nasync function loadCollectionsCache(pmRoot: string): Promise<CollectionsCacheEnvelope | null> {\n try {\n const raw = await fs.readFile(getCollectionsCachePath(pmRoot), \"utf8\");\n const parsed = JSON.parse(raw) as CollectionsCacheEnvelope;\n if (parsed.version !== CACHE_VERSION || typeof parsed.collections !== \"object\" || parsed.collections === null) {\n return null;\n }\n return parsed;\n } catch {\n return null;\n }\n}\n\nasync function persistCache(\n cachePath: string,\n envelope: CacheEnvelope | BodyCacheEnvelope | CollectionsCacheEnvelope,\n): Promise<void> {\n await fs.mkdir(path.dirname(cachePath), { recursive: true });\n await writeFileAtomic(cachePath, JSON.stringify(envelope));\n}\n\nfunction appendWarning(warnings: string[] | undefined, warning: string): void {\n if (warnings && !warnings.includes(warning)) {\n warnings.push(warning);\n }\n}\n\nfunction statMatches(signature: StatSignature, mtimeMs: number, ctimeMs: number, size: number): boolean {\n return signature.mtime_ms === mtimeMs && signature.ctime_ms === ctimeMs && signature.size === size;\n}\n\nexport interface ListCacheOptions {\n /**\n * When false, item bodies are neither loaded from nor written to the separate\n * body cache. Metadata-only callers (`pm list`, stats, deps, activity, …) skip\n * the large body cache entirely; only body consumers (search/reindex) pay for it.\n */\n includeBody?: boolean;\n /**\n * When false, heavy collection fields (comments/notes/learnings/files/tests/\n * test_runs/docs) are neither loaded from nor written to the separate collections\n * cache, and are absent from the returned metadata. Light-only callers (`pm list`\n * compact, stats, deps, activity, calendar, close) skip the large collections cache\n * entirely. Defaults to true so any caller that does read those fields stays correct.\n */\n includeCollections?: boolean;\n}\n\n/**\n * List all item documents using a persistent on-disk metadata cache.\n *\n * Metadata and bodies are stored in two separate cache files so the hot path\n * (`pm list` and friends, which discard bodies) never loads or rewrites the much\n * larger body payload. Each file is rewritten only when its contents actually\n * change, and per-file onRead hooks are dispatched only when an extension\n * registers one. Only files whose mtime/ctime/size changed since the last run are\n * re-parsed.\n */\nexport async function listAllDocumentCandidatesCached(\n pmRoot: string,\n preferredFormat: ItemFormat | undefined,\n typeToFolder: Record<string, string>,\n warnings: string[] | undefined,\n schema: RuntimeSchemaSettings | undefined,\n options: ListCacheOptions = {},\n): Promise<CachedDocumentCandidate[]> {\n const includeBody = options.includeBody !== false;\n const includeCollections = options.includeCollections !== false;\n const contextFingerprint = computeContextFingerprint(preferredFormat, typeToFolder, schema);\n\n const existingCache = await loadCache(pmRoot);\n const previousEntries: Record<string, CachedEntry> =\n existingCache && existingCache.context_fingerprint === contextFingerprint ? existingCache.entries : {};\n\n const existingBodyCache = includeBody ? await loadBodyCache(pmRoot) : null;\n const previousBodies: Record<string, CachedBody> =\n existingBodyCache && existingBodyCache.context_fingerprint === contextFingerprint ? existingBodyCache.bodies : {};\n\n const existingCollectionsCache = includeCollections ? await loadCollectionsCache(pmRoot) : null;\n const previousCollections: Record<string, CachedCollections> =\n existingCollectionsCache && existingCollectionsCache.context_fingerprint === contextFingerprint\n ? existingCollectionsCache.collections\n : {};\n\n const entries = Object.entries(typeToFolder) as Array<[ItemType, string]>;\n const dirResults = await Promise.all(\n entries.map(async ([, folder]) => {\n const dirPath = path.join(pmRoot, folder);\n try {\n const files = await fs.readdir(dirPath);\n return { folder, dirPath, files };\n } catch (error: unknown) {\n if (typeof error === \"object\" && error !== null && \"code\" in error && (error as { code?: string }).code !== \"ENOENT\") {\n appendWarning(warnings, `item_list_directory_read_failed:${folder}`);\n }\n return { folder, dirPath, files: [] as string[] };\n }\n }),\n );\n\n const dispatchReadHooks = hasActiveOnReadHooks();\n const newEntries: Record<string, CachedEntry> = {};\n const newBodies: Record<string, CachedBody> = {};\n const newCollections: Record<string, CachedCollections> = {};\n const documentsById = new Map<string, { candidate: CachedDocumentCandidate; itemFormat: ItemFormat }>();\n let metadataMiss = false;\n let bodyMiss = false;\n let collectionsMiss = false;\n\n const parseTasks: Array<Promise<void>> = [];\n\n for (const { folder, dirPath, files } of dirResults) {\n for (const file of files) {\n if (!ITEM_FILE_EXTENSIONS.some((ext) => file.toLowerCase().endsWith(ext))) {\n continue;\n }\n const filePath = path.join(dirPath, file);\n const relativePath = path.relative(pmRoot, filePath);\n\n parseTasks.push(\n (async () => {\n try {\n const stat = await fs.stat(filePath);\n const mtimeMs = stat.mtimeMs;\n const ctimeMs = stat.ctimeMs;\n const { size } = stat;\n const itemFormat = getItemFormatFromPath(filePath) as ItemFormat;\n\n // Preserve onRead hook semantics even when served from cache, but only\n // when an extension actually observes reads. Surface hook warnings so\n // read-hook failures are not silently hidden.\n if (dispatchReadHooks) {\n for (const warning of await runActiveOnReadHooks({ path: filePath, scope: \"project\" })) {\n appendWarning(warnings, warning);\n }\n }\n\n const cachedEntry = previousEntries[relativePath];\n const metadataCached = cachedEntry !== undefined && statMatches(cachedEntry, mtimeMs, ctimeMs, size);\n const cachedBody = previousBodies[relativePath];\n const bodyCached = cachedBody !== undefined && statMatches(cachedBody, mtimeMs, ctimeMs, size);\n const cachedCollections = previousCollections[relativePath];\n const collectionsCached =\n cachedCollections !== undefined && statMatches(cachedCollections, mtimeMs, ctimeMs, size);\n\n const needRead =\n !metadataCached || (includeBody && !bodyCached) || (includeCollections && !collectionsCached);\n let lightMetadata: ItemMetadata;\n let heavyMetadata: Record<string, unknown> | undefined;\n let bodyLength: number;\n let body: string | undefined;\n\n if (needRead) {\n const raw = await fs.readFile(filePath, \"utf8\");\n const parsed = parseItemDocument(raw, {\n format: itemFormat,\n schema,\n onWarning: (w) => appendWarning(warnings, w),\n });\n const split = splitHeavyMetadata(parsed.metadata);\n lightMetadata = metadataCached ? cachedEntry.metadata : split.light;\n bodyLength = metadataCached ? cachedEntry.body_length : parsed.body.length;\n body = includeBody ? parsed.body : undefined;\n if (includeCollections) {\n heavyMetadata = collectionsCached ? cachedCollections.collections : split.heavy;\n }\n if (!metadataCached) {\n metadataMiss = true;\n }\n if (includeBody && !bodyCached) {\n bodyMiss = true;\n }\n if (includeCollections && !collectionsCached) {\n collectionsMiss = true;\n }\n } else {\n lightMetadata = cachedEntry.metadata;\n bodyLength = cachedEntry.body_length;\n body = includeBody ? cachedBody.body : undefined;\n heavyMetadata = includeCollections && cachedCollections ? cachedCollections.collections : undefined;\n }\n\n newEntries[relativePath] = {\n mtime_ms: mtimeMs,\n ctime_ms: ctimeMs,\n size,\n metadata: lightMetadata,\n body_length: bodyLength,\n };\n if (includeBody && body !== undefined) {\n newBodies[relativePath] = { mtime_ms: mtimeMs, ctime_ms: ctimeMs, size, body };\n }\n if (includeCollections && heavyMetadata !== undefined) {\n newCollections[relativePath] = { mtime_ms: mtimeMs, ctime_ms: ctimeMs, size, collections: heavyMetadata };\n }\n\n const metadata = includeCollections ? mergeHeavyMetadata(lightMetadata, heavyMetadata) : lightMetadata;\n const existing = documentsById.get(metadata.id);\n const candidate: CachedDocumentCandidate = {\n metadata,\n body,\n item_format: itemFormat,\n item_path: filePath,\n };\n if (!existing) {\n documentsById.set(metadata.id, { candidate, itemFormat });\n } else {\n const shouldReplace = preferredFormat\n ? itemFormat === preferredFormat && existing.itemFormat !== preferredFormat\n : itemFormat === \"toon\" && existing.itemFormat !== \"toon\";\n if (shouldReplace) {\n documentsById.set(metadata.id, { candidate, itemFormat });\n }\n }\n } catch {\n appendWarning(warnings, `item_list_item_read_failed:${folder}/${file}`);\n }\n })(),\n );\n }\n }\n\n await Promise.all(parseTasks);\n\n // Rewrite a cache file only when its contents changed: any re-parsed (missing or\n // stale) entry, or a different set of keys (additions/deletions).\n const metadataDirty = metadataMiss || Object.keys(previousEntries).length !== Object.keys(newEntries).length;\n if (metadataDirty || existingCache === null || existingCache.context_fingerprint !== contextFingerprint) {\n await persistCache(getCachePath(pmRoot), {\n version: CACHE_VERSION,\n context_fingerprint: contextFingerprint,\n entries: newEntries,\n }).catch(() => {});\n }\n\n if (includeBody) {\n const bodyDirty = bodyMiss || Object.keys(previousBodies).length !== Object.keys(newBodies).length;\n if (bodyDirty || existingBodyCache === null || existingBodyCache.context_fingerprint !== contextFingerprint) {\n await persistCache(getBodyCachePath(pmRoot), {\n version: CACHE_VERSION,\n context_fingerprint: contextFingerprint,\n bodies: newBodies,\n }).catch(() => {});\n }\n }\n\n if (includeCollections) {\n const collectionsDirty =\n collectionsMiss || Object.keys(previousCollections).length !== Object.keys(newCollections).length;\n if (\n collectionsDirty ||\n existingCollectionsCache === null ||\n existingCollectionsCache.context_fingerprint !== contextFingerprint\n ) {\n await persistCache(getCollectionsCachePath(pmRoot), {\n version: CACHE_VERSION,\n context_fingerprint: contextFingerprint,\n collections: newCollections,\n }).catch(() => {});\n }\n }\n\n return [...documentsById.values()]\n .sort((left, right) => left.candidate.metadata.id.localeCompare(right.candidate.metadata.id))\n .map((entry) => entry.candidate);\n}\n\nexport async function listAllDocumentsCached(\n pmRoot: string,\n preferredFormat: ItemFormat | undefined,\n typeToFolder: Record<string, string>,\n warnings: string[] | undefined,\n schema: RuntimeSchemaSettings | undefined,\n): Promise<ItemDocument[]> {\n const candidates = await listAllDocumentCandidatesCached(pmRoot, preferredFormat, typeToFolder, warnings, schema, {\n includeBody: false,\n });\n return candidates.map((candidate) => ({\n metadata: candidate.metadata,\n body: candidate.body ?? \"\",\n }));\n}\n\n/**\n * Light variant of {@link listAllDocumentsCached}: returns metadata WITHOUT the heavy\n * collection fields (comments/notes/learnings/files/tests/test_runs/docs), skipping the\n * large collections cache entirely. Only safe for callers that read just the light\n * scalar/small fields (id/title/status/type/priority/parent/tags/dates/dependencies/…).\n */\nexport async function listAllDocumentsCachedLight(\n pmRoot: string,\n preferredFormat: ItemFormat | undefined,\n typeToFolder: Record<string, string>,\n warnings: string[] | undefined,\n schema: RuntimeSchemaSettings | undefined,\n): Promise<ItemDocument[]> {\n const candidates = await listAllDocumentCandidatesCached(pmRoot, preferredFormat, typeToFolder, warnings, schema, {\n includeBody: false,\n includeCollections: false,\n });\n return candidates.map((candidate) => ({\n metadata: candidate.metadata,\n body: candidate.body ?? \"\",\n }));\n}\n", "import fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport {\n getActiveExtensionRegistrations,\n runActiveOnReadHooks,\n runActiveOnWriteHooks,\n runActiveServiceOverride,\n} from \"../extensions/index.js\";\nimport { EMPTY_CANONICAL_DOCUMENT, EXIT_CODE, TYPE_TO_FOLDER } from \"../shared/constants.js\";\nimport { PmCliError } from \"../shared/errors.js\";\nimport { appendHistoryEntry, createHistoryEntry } from \"../history/history.js\";\nimport { enforceHistoryStreamPolicyForItem } from \"../history/history-stream-policy.js\";\nimport { canonicalDocument, parseItemDocument, serializeItemDocument } from \"../item/item-format.js\";\nimport { resolveItemTypeRegistry } from \"../item/type-registry.js\";\nimport { acquireLock } from \"../lock/lock.js\";\nimport { writeFileAtomic } from \"../fs/fs-utils.js\";\nimport { normalizeItemId, normalizeRawItemId } from \"../item/id.js\";\nimport { listAllDocumentCandidatesCached, listAllDocumentsCached, listAllDocumentsCachedLight } from \"./front-matter-cache.js\";\nimport { getHistoryPath, getItemFormatFromPath, getItemPath, ITEM_FILE_EXTENSIONS } from \"./paths.js\";\nimport { resolveGovernanceKnobs } from \"./settings.js\";\nimport { nowIso } from \"../shared/time.js\";\nimport type { ItemDocument, ItemFormat, ItemFrontMatter, ItemType, PmSettings, RuntimeSchemaSettings } from \"../../types/index.js\";\n\nexport interface LocatedItem {\n id: string;\n type: ItemType;\n itemPath: string;\n item_format: ItemFormat;\n}\n\nasync function fileExists(targetPath: string): Promise<boolean> {\n try {\n await fs.access(targetPath);\n return true;\n } catch {\n return false;\n }\n}\n\nfunction isErrno(error: unknown, code: string): boolean {\n return typeof error === \"object\" && error !== null && \"code\" in error && (error as { code?: string }).code === code;\n}\n\nfunction appendWarning(warnings: string[] | undefined, warning: string): void {\n if (!warnings) {\n return;\n }\n if (!warnings.includes(warning)) {\n warnings.push(warning);\n }\n}\n\nfunction resolveItemFormatSearchOrder(preferredFormat?: ItemFormat): ItemFormat[] {\n if (preferredFormat === \"toon\") {\n return [\"toon\", \"json_markdown\"];\n }\n if (preferredFormat === \"json_markdown\") {\n return [\"json_markdown\", \"toon\"];\n }\n return [\"toon\", \"json_markdown\"];\n}\n\nexport async function locateItem(\n pmRoot: string,\n rawId: string,\n idPrefix: string,\n preferredFormat?: ItemFormat,\n typeToFolder: Record<string, string> = TYPE_TO_FOLDER,\n): Promise<LocatedItem | null> {\n const normalizedId = normalizeItemId(rawId, idPrefix);\n const rawNormalizedId = normalizeRawItemId(rawId);\n const candidateIds = normalizedId === rawNormalizedId ? [normalizedId] : [normalizedId, rawNormalizedId];\n const entries = Object.entries(typeToFolder) as Array<[ItemType, string]>;\n const searchOrder = resolveItemFormatSearchOrder(preferredFormat);\n for (const candidateId of candidateIds) {\n for (const [type] of entries) {\n for (const itemFormat of searchOrder) {\n const itemPath = getItemPath(pmRoot, type, candidateId, itemFormat, typeToFolder);\n if (await fileExists(itemPath)) {\n return {\n id: candidateId,\n type,\n itemPath,\n item_format: itemFormat,\n };\n }\n }\n }\n }\n return null;\n}\n\nexport async function readLocatedItem(\n item: LocatedItem,\n options: { schema?: RuntimeSchemaSettings; warnings?: string[] } = {},\n): Promise<{ raw: string; document: ItemDocument }> {\n const raw = await fs.readFile(item.itemPath, \"utf8\");\n await runActiveOnReadHooks({\n path: item.itemPath,\n scope: \"project\",\n });\n const document = parseItemDocument(raw, {\n format: item.item_format,\n schema: options.schema,\n onWarning: (warning) => appendWarning(options.warnings, warning),\n });\n return { raw, document };\n}\n\nexport async function listAllFrontMatter(\n pmRoot: string,\n preferredFormat?: ItemFormat,\n typeToFolder: Record<string, string> = TYPE_TO_FOLDER,\n warnings?: string[],\n schema?: RuntimeSchemaSettings,\n): Promise<ItemFrontMatter[]> {\n const documents = await listAllDocumentsCached(pmRoot, preferredFormat, typeToFolder, warnings, schema);\n return documents.map((document) => document.metadata);\n}\n\n/**\n * Light variant of {@link listAllFrontMatter}: returns front-matter WITHOUT the heavy\n * collection fields (comments/notes/learnings/files/tests/test_runs/docs). Skips the\n * large collections cache so the hot list path stays cheap. Only use for callers that\n * read just the light scalar/small fields — see {@link listAllDocumentsCachedLight}.\n */\nexport async function listAllFrontMatterLight(\n pmRoot: string,\n preferredFormat?: ItemFormat,\n typeToFolder: Record<string, string> = TYPE_TO_FOLDER,\n warnings?: string[],\n schema?: RuntimeSchemaSettings,\n): Promise<ItemFrontMatter[]> {\n const documents = await listAllDocumentsCachedLight(pmRoot, preferredFormat, typeToFolder, warnings, schema);\n return documents.map((document) => document.metadata);\n}\n\nexport async function listAllFrontMatterWithBody(\n pmRoot: string,\n preferredFormat?: ItemFormat,\n typeToFolder: Record<string, string> = TYPE_TO_FOLDER,\n warnings?: string[],\n schema?: RuntimeSchemaSettings,\n): Promise<Array<ItemFrontMatter & { body: string }>> {\n const candidates = await listAllDocumentCandidatesCached(\n pmRoot,\n preferredFormat,\n typeToFolder,\n warnings,\n schema,\n { includeBody: true },\n );\n return candidates.map((candidate) => ({\n ...candidate.metadata,\n body: candidate.body ?? \"\",\n }));\n}\n\nasync function listKnownItemIds(\n pmRoot: string,\n typeToFolder: Record<string, string>,\n): Promise<string[]> {\n const folders = new Set(Object.values(typeToFolder));\n const allIds: string[] = [];\n await Promise.all(\n [...folders].map(async (folder) => {\n try {\n const entries = await fs.readdir(path.join(pmRoot, folder));\n for (const entry of entries) {\n for (const ext of ITEM_FILE_EXTENSIONS) {\n if (entry.toLowerCase().endsWith(ext)) {\n allIds.push(entry.slice(0, -ext.length));\n break;\n }\n }\n }\n } catch {\n // ignore missing folders\n }\n }),\n );\n return allIds;\n}\n\nfunction levenshtein(a: string, b: string): number {\n if (a === b) return 0;\n if (a.length === 0) return b.length;\n if (b.length === 0) return a.length;\n let prev = Array.from({ length: b.length + 1 }, (_, i) => i);\n for (let i = 1; i <= a.length; i++) {\n const curr = [i];\n for (let j = 1; j <= b.length; j++) {\n const cost = a[i - 1] === b[j - 1] ? 0 : 1;\n curr.push(Math.min(curr[j - 1] + 1, prev[j] + 1, prev[j - 1] + cost));\n }\n prev = curr;\n }\n return prev[b.length];\n}\n\nasync function buildDidYouMeanSuggestions(\n pmRoot: string,\n badId: string,\n idPrefix: string,\n typeToFolder: Record<string, string>,\n): Promise<string[]> {\n const normalized = normalizeItemId(badId, idPrefix);\n const ids = await listKnownItemIds(pmRoot, typeToFolder);\n if (ids.length === 0) return [];\n const scored = ids\n .map((id) => ({ id, distance: levenshtein(id, normalized) }))\n .filter((entry) => entry.distance <= Math.max(3, Math.floor(normalized.length / 2)))\n .sort((left, right) => left.distance - right.distance)\n .slice(0, 3)\n .map((entry) => entry.id);\n return scored;\n}\n\nexport async function buildItemNotFoundError(\n pmRoot: string,\n badId: string,\n idPrefix: string,\n typeToFolder: Record<string, string>,\n): Promise<PmCliError> {\n const suggestions = await buildDidYouMeanSuggestions(pmRoot, badId, idPrefix, typeToFolder);\n const nextSteps: string[] = [\"Confirm the active --path/PM_PATH scope, then retry with a valid id.\"];\n if (suggestions.length > 0) {\n nextSteps.unshift(`Did you mean one of: ${suggestions.join(\", \")}?`);\n }\n return new PmCliError(`Item ${badId} not found`, EXIT_CODE.NOT_FOUND, { nextSteps });\n}\n\nfunction bypassesAssigneeConflict(\n op: string,\n bypassAssigneeConflict?: boolean,\n): boolean {\n return (\n op === \"claim\" ||\n (bypassAssigneeConflict === true &&\n (op === \"comment_add\" ||\n op === \"note_add\" ||\n op === \"learning_add\" ||\n op === \"release\" ||\n op === \"update\" ||\n op === \"update_audit\"))\n );\n}\n\nasync function prepareLockedItem(params: {\n pmRoot: string;\n settings: PmSettings;\n id: string;\n op: string;\n author: string;\n force?: boolean;\n bypassAssigneeConflict?: boolean;\n typeToFolder?: Record<string, string>;\n}): Promise<{\n typeToFolder: Record<string, string>;\n located: LocatedItem;\n originalRaw: string;\n document: ItemDocument;\n warnings: string[];\n releaseLock: () => Promise<void>;\n}> {\n const typeToFolder =\n params.typeToFolder ??\n resolveItemTypeRegistry(params.settings, getActiveExtensionRegistrations())\n .type_to_folder;\n const located = await locateItem(\n params.pmRoot,\n params.id,\n params.settings.id_prefix,\n params.settings.item_format,\n typeToFolder,\n );\n if (!located) {\n throw await buildItemNotFoundError(\n params.pmRoot,\n params.id,\n params.settings.id_prefix,\n typeToFolder,\n );\n }\n\n const releaseLock = await acquireLock(\n params.pmRoot,\n located.id,\n params.settings.locks.ttl_seconds,\n params.author,\n Boolean(params.force),\n params.settings.governance.force_required_for_stale_lock,\n );\n\n try {\n const warnings: string[] = [];\n const { raw: originalRaw, document } = await readLocatedItem(located, {\n schema: params.settings.schema,\n warnings,\n });\n\n const assigned = document.metadata.assignee?.trim();\n const governance = resolveGovernanceKnobs(params.settings);\n const hasOwnershipConflict =\n assigned &&\n assigned !== params.author &&\n !params.force &&\n !bypassesAssigneeConflict(params.op, params.bypassAssigneeConflict);\n if (hasOwnershipConflict) {\n if (governance.ownership_enforcement === \"strict\") {\n throw new PmCliError(\n `Item ${located.id} is assigned to ${assigned}. Use --force to override.`,\n EXIT_CODE.CONFLICT,\n );\n }\n if (governance.ownership_enforcement === \"warn\") {\n warnings.push(\n `ownership_warning:assignee_conflict:${located.id}:${assigned}`,\n );\n }\n }\n\n return {\n typeToFolder,\n located,\n originalRaw,\n document,\n warnings,\n releaseLock,\n };\n } catch (error: unknown) {\n await releaseLock();\n throw error;\n }\n}\n\nexport async function mutateItem(params: {\n pmRoot: string;\n settings: PmSettings;\n id: string;\n op: string;\n author: string;\n message?: string;\n force?: boolean;\n bypassAssigneeConflict?: boolean;\n typeToFolder?: Record<string, string>;\n mutate: (document: ItemDocument) => {\n changedFields: string[];\n warnings?: string[];\n };\n}): Promise<{\n item: ItemFrontMatter;\n body: string;\n changedFields: string[];\n warnings: string[];\n}> {\n const prepared = await prepareLockedItem({\n pmRoot: params.pmRoot,\n settings: params.settings,\n id: params.id,\n op: params.op,\n author: params.author,\n force: params.force,\n bypassAssigneeConflict: params.bypassAssigneeConflict,\n typeToFolder: params.typeToFolder,\n });\n const {\n typeToFolder,\n located,\n originalRaw,\n document,\n warnings: parseWarnings,\n releaseLock,\n } = prepared;\n\n try {\n const historyPolicy = await enforceHistoryStreamPolicyForItem({\n pmRoot: params.pmRoot,\n settings: params.settings,\n itemId: located.id,\n commandLabel: params.op,\n });\n\n const beforeDocument = canonicalDocument(document, { schema: params.settings.schema });\n const mutableDocument = canonicalDocument(structuredClone(document), { schema: params.settings.schema });\n const mutation = params.mutate(mutableDocument);\n mutableDocument.metadata.updated_at = nowIso();\n const afterDocument = canonicalDocument(mutableDocument, { schema: params.settings.schema });\n const targetItemFormat: ItemFormat = \"toon\";\n const serializedAfter = serializeItemDocument(afterDocument, {\n format: targetItemFormat,\n schema: params.settings.schema,\n });\n const targetItemPath = getItemPath(\n params.pmRoot,\n afterDocument.metadata.type,\n located.id,\n targetItemFormat,\n typeToFolder,\n );\n const historyPath = getHistoryPath(params.pmRoot, located.id);\n const serviceWriteOverride = await runActiveServiceOverride(\"item_store_write\", {\n op: params.op,\n pm_root: params.pmRoot,\n item_id: located.id,\n source_item_path: located.itemPath,\n target_item_path: targetItemPath,\n history_path: historyPath,\n item_format: targetItemFormat,\n before: beforeDocument,\n after: afterDocument,\n contents: serializedAfter,\n });\n let effectiveTargetItemPath = targetItemPath;\n let effectiveSerializedAfter = serializedAfter;\n let skipItemWrite = false;\n if (\n serviceWriteOverride.handled &&\n typeof serviceWriteOverride.result === \"object\" &&\n serviceWriteOverride.result !== null\n ) {\n const overrideRecord = serviceWriteOverride.result as {\n target_item_path?: unknown;\n contents?: unknown;\n skip_write?: unknown;\n };\n if (typeof overrideRecord.target_item_path === \"string\" && overrideRecord.target_item_path.trim().length > 0) {\n effectiveTargetItemPath = overrideRecord.target_item_path;\n }\n if (typeof overrideRecord.contents === \"string\") {\n effectiveSerializedAfter = overrideRecord.contents;\n }\n if (overrideRecord.skip_write === true) {\n skipItemWrite = true;\n }\n }\n\n if (!skipItemWrite) {\n await writeFileAtomic(effectiveTargetItemPath, effectiveSerializedAfter);\n }\n if (!skipItemWrite && effectiveTargetItemPath !== located.itemPath) {\n await fs.rm(located.itemPath);\n }\n const entry = createHistoryEntry({\n nowIso: afterDocument.metadata.updated_at,\n author: params.author,\n op: params.op,\n before: beforeDocument,\n after: afterDocument,\n message: params.message,\n });\n\n try {\n await appendHistoryEntry(historyPath, entry);\n } catch (error: unknown) {\n if (!skipItemWrite && effectiveTargetItemPath !== located.itemPath) {\n await writeFileAtomic(located.itemPath, originalRaw);\n await fs.rm(effectiveTargetItemPath, { force: true });\n } else if (!skipItemWrite) {\n await writeFileAtomic(located.itemPath, originalRaw);\n }\n throw error;\n }\n const hookWarnings = [\n ...(await runActiveOnWriteHooks({\n path: effectiveTargetItemPath,\n scope: \"project\",\n op: params.op,\n })),\n ...(await runActiveOnWriteHooks({\n path: historyPath,\n scope: \"project\",\n op: `${params.op}:history`,\n })),\n ];\n\n return {\n item: afterDocument.metadata,\n body: afterDocument.body,\n changedFields: mutation.changedFields,\n warnings: [\n ...parseWarnings,\n ...(mutation.warnings ?? []),\n ...historyPolicy.warnings,\n ...serviceWriteOverride.warnings,\n ...hookWarnings,\n ],\n };\n } finally {\n await releaseLock();\n }\n}\n\nexport async function deleteItem(params: {\n pmRoot: string;\n settings: PmSettings;\n id: string;\n author: string;\n message?: string;\n force?: boolean;\n dryRun?: boolean;\n}): Promise<{ item: ItemFrontMatter; changedFields: string[]; warnings: string[]; targetPath?: string }> {\n const prepared = await prepareLockedItem({\n pmRoot: params.pmRoot,\n settings: params.settings,\n id: params.id,\n op: \"delete\",\n author: params.author,\n force: params.force,\n });\n const { located, originalRaw, document, warnings: parseWarnings, releaseLock } = prepared;\n\n try {\n const historyPolicy = await enforceHistoryStreamPolicyForItem({\n pmRoot: params.pmRoot,\n settings: params.settings,\n itemId: located.id,\n commandLabel: \"delete\",\n });\n\n const beforeDocument = canonicalDocument(document, { schema: params.settings.schema });\n const deletionTimestamp = nowIso();\n const tombstoneDocument = EMPTY_CANONICAL_DOCUMENT as unknown as ItemDocument;\n const historyEntry = createHistoryEntry({\n nowIso: deletionTimestamp,\n author: params.author,\n op: \"delete\",\n before: beforeDocument,\n after: tombstoneDocument,\n message: params.message,\n });\n const historyPath = getHistoryPath(params.pmRoot, located.id);\n const serviceDeleteOverride = await runActiveServiceOverride(\"item_store_delete\", {\n op: \"delete\",\n pm_root: params.pmRoot,\n item_id: located.id,\n item_path: located.itemPath,\n history_path: historyPath,\n before: beforeDocument,\n });\n let effectiveItemPath = located.itemPath;\n let skipDelete = false;\n if (\n serviceDeleteOverride.handled &&\n typeof serviceDeleteOverride.result === \"object\" &&\n serviceDeleteOverride.result !== null\n ) {\n const overrideRecord = serviceDeleteOverride.result as {\n item_path?: unknown;\n skip_delete?: unknown;\n };\n if (typeof overrideRecord.item_path === \"string\" && overrideRecord.item_path.trim().length > 0) {\n effectiveItemPath = overrideRecord.item_path;\n }\n if (overrideRecord.skip_delete === true) {\n skipDelete = true;\n }\n }\n\n if (params.dryRun === true) {\n return {\n item: beforeDocument.metadata,\n changedFields: [\"deleted\"],\n targetPath: effectiveItemPath,\n warnings: [...parseWarnings, ...historyPolicy.warnings, ...serviceDeleteOverride.warnings],\n };\n }\n\n if (!skipDelete) {\n await fs.rm(effectiveItemPath);\n }\n try {\n await appendHistoryEntry(historyPath, historyEntry);\n } catch (error: unknown) {\n if (!skipDelete) {\n await writeFileAtomic(effectiveItemPath, originalRaw);\n }\n throw error;\n }\n\n const hookWarnings = [\n ...(await runActiveOnWriteHooks({\n path: effectiveItemPath,\n scope: \"project\",\n op: \"delete\",\n })),\n ...(await runActiveOnWriteHooks({\n path: historyPath,\n scope: \"project\",\n op: \"delete:history\",\n })),\n ];\n\n return {\n item: beforeDocument.metadata,\n changedFields: [\"deleted\"],\n warnings: [...parseWarnings, ...historyPolicy.warnings, ...serviceDeleteOverride.warnings, ...hookWarnings],\n };\n } finally {\n await releaseLock();\n }\n}\n", "import { toErrorMessage } from \"../shared/primitives.js\";\n\nexport const DEFAULT_SEARCH_HTTP_TIMEOUT_MS = 30_000;\n\nexport interface SearchHttpResponse {\n ok: boolean;\n status: number;\n statusText: string;\n json(): Promise<unknown>;\n text(): Promise<string>;\n}\n\nexport interface SearchHttpRequestInit {\n method: \"POST\";\n headers: Record<string, string>;\n body: string;\n signal: AbortSignal;\n}\n\nexport type SearchHttpFetcher<ResponseType extends SearchHttpResponse = SearchHttpResponse> = (\n url: string,\n init: SearchHttpRequestInit,\n) => Promise<ResponseType>;\n\nexport interface ExecuteSearchJsonRequestOptions<ResponseType extends SearchHttpResponse = SearchHttpResponse> {\n endpoint: string;\n method: \"POST\";\n headers: Record<string, string>;\n body: Record<string, unknown>;\n timeoutMs: number;\n fetcher: SearchHttpFetcher<ResponseType>;\n requestLabel: string;\n responseLabel: string;\n}\n\nexport function normalizeSearchHttpTimeoutMs(\n timeoutMs: number | undefined,\n requestLabel: string,\n defaultTimeoutMs = DEFAULT_SEARCH_HTTP_TIMEOUT_MS,\n): number {\n const resolved = timeoutMs ?? defaultTimeoutMs;\n if (!Number.isFinite(resolved) || resolved <= 0) {\n throw new Error(`${requestLabel} timeout must be a positive finite number`);\n }\n return Math.floor(resolved);\n}\n\nexport function resolveSearchHttpFetcher<ResponseType extends SearchHttpResponse>(\n fetcher: SearchHttpFetcher<ResponseType> | undefined,\n requestLabel: string,\n): SearchHttpFetcher<ResponseType> {\n if (fetcher) {\n return fetcher;\n }\n if (typeof globalThis.fetch === \"function\") {\n return globalThis.fetch.bind(globalThis) as unknown as SearchHttpFetcher<ResponseType>;\n }\n throw new Error(`${requestLabel} execution requires a fetch implementation`);\n}\n\nexport async function readFailedSearchHttpResponseBody(response: SearchHttpResponse): Promise<string> {\n try {\n return (await response.text()).replaceAll(/\\s+/g, \" \").trim();\n } catch (error) {\n return `(failed to read response body: ${toErrorMessage(error)})`;\n }\n}\n\nexport async function executeSearchJsonRequest<ResponseType extends SearchHttpResponse>(\n options: ExecuteSearchJsonRequestOptions<ResponseType>,\n): Promise<unknown> {\n const controller = new AbortController();\n const timeoutHandle = setTimeout(() => {\n controller.abort();\n }, options.timeoutMs);\n\n try {\n let response: ResponseType;\n try {\n response = await options.fetcher(options.endpoint, {\n method: options.method,\n headers: options.headers,\n body: JSON.stringify(options.body),\n signal: controller.signal,\n });\n } catch (error) {\n if (error instanceof Error && error.name === \"AbortError\") {\n throw new Error(`${options.requestLabel} timed out after ${options.timeoutMs}ms`);\n }\n throw new Error(`${options.requestLabel} execution failed: ${toErrorMessage(error)}`);\n }\n\n if (!response.ok) {\n const responseBody = await readFailedSearchHttpResponseBody(response);\n const detail = responseBody.length > 0 ? `: ${responseBody}` : \"\";\n throw new Error(`${options.requestLabel} failed with status ${response.status} ${response.statusText}${detail}`);\n }\n\n try {\n return await response.json();\n } catch (error) {\n throw new Error(`${options.responseLabel} JSON parse failed: ${toErrorMessage(error)}`);\n }\n } finally {\n clearTimeout(timeoutHandle);\n }\n}\n", "import type { PmSettings } from \"../../types/index.js\";\nimport {\n executeSearchJsonRequest,\n normalizeSearchHttpTimeoutMs,\n resolveSearchHttpFetcher,\n} from \"./http-client.js\";\nimport type { SearchHttpFetcher, SearchHttpResponse } from \"./http-client.js\";\nimport {\n isFiniteNumberArray,\n toNonEmptyString,\n trimTrailingSlashes,\n} from \"../shared/primitives.js\";\n\nexport type EmbeddingProviderName = \"openai\" | \"ollama\";\n\nexport interface EmbeddingProviderConfig {\n name: EmbeddingProviderName;\n base_url: string;\n model: string;\n api_key?: string;\n}\n\nexport interface EmbeddingProviderResolution {\n active: EmbeddingProviderConfig | null;\n available: EmbeddingProviderConfig[];\n}\n\nexport interface EmbeddingRequestTarget {\n provider: EmbeddingProviderName;\n endpoint: string;\n model: string;\n}\n\nexport interface EmbeddingRequestPlan {\n target: EmbeddingRequestTarget;\n method: \"POST\";\n headers: Record<string, string>;\n body: Record<string, unknown>;\n}\n\nexport type EmbeddingHttpResponse = SearchHttpResponse;\n\nexport type EmbeddingRequestFetcher = SearchHttpFetcher<EmbeddingHttpResponse>;\n\nexport interface ExecuteEmbeddingRequestOptions {\n timeout_ms?: number;\n fetcher?: EmbeddingRequestFetcher;\n}\n\ntype ProviderSettingsInput = {\n providers?: {\n openai?: {\n base_url?: string;\n api_key?: string;\n model?: string;\n };\n ollama?: {\n base_url?: string;\n model?: string;\n };\n };\n};\n\nfunction normalizeOpenAiEmbeddingsEndpoint(baseUrl: string): string {\n const normalizedBaseUrl = trimTrailingSlashes(baseUrl);\n const normalizedLower = normalizedBaseUrl.toLowerCase();\n if (normalizedLower.endsWith(\"/embeddings\")) {\n return normalizedBaseUrl;\n }\n if (normalizedLower.endsWith(\"/v1\")) {\n return `${normalizedBaseUrl}/embeddings`;\n }\n return `${normalizedBaseUrl}/v1/embeddings`;\n}\n\nfunction resolveSearchEmbeddingModelOverride(settings: ProviderSettingsInput): string | null {\n // `settings.search.embedding_model` is documented as overriding the\n // provider-specific model when set (see CONFIG_KEY_ALIASES for\n // `search_embedding_model` in src/core/config/nested-settings.ts). Each\n // provider resolver picks this up after its own model is read so the\n // override applies to whichever built-in is selected.\n const candidate = (settings as { search?: { embedding_model?: unknown } }).search?.embedding_model;\n return toNonEmptyString(candidate) || null;\n}\n\nfunction resolveOpenAiProvider(settings: ProviderSettingsInput): EmbeddingProviderConfig | null {\n const baseUrl = toNonEmptyString(settings.providers?.openai?.base_url);\n const model = toNonEmptyString(settings.providers?.openai?.model);\n if (!baseUrl || !model) {\n return null;\n }\n const override = resolveSearchEmbeddingModelOverride(settings);\n const apiKey = toNonEmptyString(settings.providers?.openai?.api_key);\n return {\n name: \"openai\",\n base_url: baseUrl,\n model: override ?? model,\n ...(apiKey ? { api_key: apiKey } : {}),\n };\n}\n\nfunction resolveOllamaProvider(settings: ProviderSettingsInput): EmbeddingProviderConfig | null {\n const baseUrl = toNonEmptyString(settings.providers?.ollama?.base_url);\n const model = toNonEmptyString(settings.providers?.ollama?.model);\n if (!baseUrl || !model) {\n return null;\n }\n const override = resolveSearchEmbeddingModelOverride(settings);\n return {\n name: \"ollama\",\n base_url: baseUrl,\n model: override ?? model,\n };\n}\n\nfunction normalizeEmbeddingInputs(input: string | string[]): string[] {\n const inputs = (Array.isArray(input) ? input : [input])\n .map((entry) => entry.trim())\n .filter((entry) => entry.length > 0);\n if (inputs.length === 0) {\n throw new Error(\"Embedding input must include at least one non-empty string\");\n }\n return inputs;\n}\n\ninterface DedupedEmbeddingInputs {\n uniqueInputs: string[];\n originalToUniqueIndex: number[];\n}\n\nfunction dedupeEmbeddingInputs(inputs: string[]): DedupedEmbeddingInputs {\n const uniqueInputs: string[] = [];\n const originalToUniqueIndex: number[] = [];\n const uniqueIndexByInput = new Map<string, number>();\n for (const entry of inputs) {\n const existingUniqueIndex = uniqueIndexByInput.get(entry);\n if (existingUniqueIndex === undefined) {\n const nextUniqueIndex = uniqueInputs.length;\n uniqueInputs.push(entry);\n uniqueIndexByInput.set(entry, nextUniqueIndex);\n originalToUniqueIndex.push(nextUniqueIndex);\n continue;\n }\n originalToUniqueIndex.push(existingUniqueIndex);\n }\n return {\n uniqueInputs,\n originalToUniqueIndex,\n };\n}\n\ninterface OpenAiEmbeddingResponseEntry {\n embedding: unknown;\n index: unknown;\n position: number;\n}\n\nfunction buildOrderedOpenAiEntries(data: unknown[]): OpenAiEmbeddingResponseEntry[] {\n const openAiEntries = data.map((entry, position) => ({\n embedding: (entry as { embedding?: unknown }).embedding,\n index: (entry as { index?: unknown }).index,\n position,\n }));\n const hasExplicitIndex = openAiEntries.some((entry) => entry.index !== undefined);\n if (hasExplicitIndex) {\n for (const entry of openAiEntries) {\n if (!Number.isInteger(entry.index)) {\n throw new TypeError(`OpenAI embedding response entry at position ${entry.position} is missing a valid integer index`);\n }\n }\n return [...openAiEntries].sort((a, b) => {\n const byIndex = (a.index as number) - (b.index as number);\n if (byIndex !== 0) {\n return byIndex;\n }\n return a.position - b.position;\n });\n }\n return openAiEntries;\n}\n\nexport function resolveEmbeddingProviders(settings: PmSettings | ProviderSettingsInput): EmbeddingProviderResolution {\n const openAi = resolveOpenAiProvider(settings);\n const ollama = resolveOllamaProvider(settings);\n const available = [openAi, ollama].filter((entry): entry is EmbeddingProviderConfig => entry !== null);\n // Honor `settings.search.provider` when set: if both built-in providers are\n // configured, the preferred name wins; otherwise fall back to the first\n // available entry (preserves the previous tie-break: openai > ollama).\n // Match case-insensitively so \"OpenAI\" / \"Ollama\" / \"OLLAMA\" all work.\n const preferredName = toNonEmptyString(\n (settings as { search?: { provider?: unknown } }).search?.provider,\n );\n const preferredKey = preferredName ? preferredName.toLowerCase() : null;\n const preferred = preferredKey\n ? available.find((entry) => entry.name === preferredKey)\n : undefined;\n return {\n active: preferred ?? available[0] ?? null,\n available,\n };\n}\n\nexport function resolveEmbeddingRequestTarget(provider: EmbeddingProviderConfig): EmbeddingRequestTarget {\n const baseUrl = trimTrailingSlashes(provider.base_url);\n if (provider.name === \"openai\") {\n return {\n provider: \"openai\",\n endpoint: normalizeOpenAiEmbeddingsEndpoint(baseUrl),\n model: provider.model,\n };\n }\n return {\n provider: \"ollama\",\n endpoint: `${baseUrl}/api/embed`,\n model: provider.model,\n };\n}\n\nexport function buildEmbeddingRequestPlan(provider: EmbeddingProviderConfig, input: string | string[]): EmbeddingRequestPlan {\n const normalizedInputs = normalizeEmbeddingInputs(input);\n if (provider.name === \"openai\") {\n return {\n target: resolveEmbeddingRequestTarget(provider),\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n ...(provider.api_key ? { authorization: `Bearer ${provider.api_key}` } : {}),\n },\n body: {\n model: provider.model,\n input: normalizedInputs.length === 1 ? normalizedInputs[0] : normalizedInputs,\n },\n };\n }\n return {\n target: resolveEmbeddingRequestTarget(provider),\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n },\n body: {\n model: provider.model,\n input: normalizedInputs,\n },\n };\n}\n\nexport function normalizeEmbeddingResponse(provider: EmbeddingProviderConfig, response: unknown): number[][] {\n if (provider.name === \"openai\") {\n const data = (response as { data?: unknown }).data;\n if (!Array.isArray(data) || data.length === 0) {\n throw new Error(\"OpenAI embedding response must include a non-empty data array\");\n }\n const orderedEntries = buildOrderedOpenAiEntries(data);\n\n return orderedEntries.map((entry, index) => {\n const embedding = entry.embedding;\n if (!isFiniteNumberArray(embedding)) {\n throw new Error(`OpenAI embedding response entry at index ${index} is missing a numeric embedding vector`);\n }\n return [...embedding];\n });\n }\n\n const singleEmbedding = (response as { embedding?: unknown }).embedding;\n if (isFiniteNumberArray(singleEmbedding)) {\n return [[...singleEmbedding]];\n }\n\n const multipleEmbeddings = (response as { embeddings?: unknown }).embeddings;\n if (Array.isArray(multipleEmbeddings) && multipleEmbeddings.length > 0) {\n return multipleEmbeddings.map((entry, index) => {\n if (!isFiniteNumberArray(entry)) {\n throw new Error(`Ollama embedding response entry at index ${index} is missing a numeric embedding vector`);\n }\n return [...entry];\n });\n }\n\n throw new Error(\"Ollama embedding response must include embedding or embeddings vectors\");\n}\n\nexport async function executeEmbeddingRequest(\n provider: EmbeddingProviderConfig,\n input: string | string[],\n options: ExecuteEmbeddingRequestOptions = {},\n): Promise<number[][]> {\n const timeoutMs = normalizeSearchHttpTimeoutMs(options.timeout_ms, \"Embedding request\");\n const fetcher = resolveSearchHttpFetcher(options.fetcher, \"Embedding request\");\n const normalizedInputs = normalizeEmbeddingInputs(input);\n const dedupedInputs = dedupeEmbeddingInputs(normalizedInputs);\n const requestPlan = buildEmbeddingRequestPlan(provider, dedupedInputs.uniqueInputs);\n const payload = await executeSearchJsonRequest({\n endpoint: requestPlan.target.endpoint,\n method: requestPlan.method,\n headers: requestPlan.headers,\n body: requestPlan.body,\n timeoutMs,\n fetcher,\n requestLabel: \"Embedding request\",\n responseLabel: \"Embedding response\",\n });\n const vectors = normalizeEmbeddingResponse(provider, payload);\n if (vectors.length !== dedupedInputs.uniqueInputs.length) {\n throw new Error(\n `Embedding response cardinality mismatch: expected ${dedupedInputs.uniqueInputs.length} vector(s), received ${vectors.length}`,\n );\n }\n return dedupedInputs.originalToUniqueIndex.map((uniqueIndex) => [...vectors[uniqueIndex]]);\n}\n", "import type { ItemDocument, ItemMetadata } from \"../../types/index.js\";\n\nexport const DEFAULT_SEMANTIC_CORPUS_INPUT_MAX_CHARACTERS = 8_000;\nexport const OLLAMA_SEMANTIC_CORPUS_INPUT_MAX_CHARACTERS = 3_200;\nexport const SEMANTIC_CORPUS_TRUNCATION_SUFFIX = \"...[semantic corpus truncated]\";\n\nfunction compactParts(parts: Array<string | boolean | number | null | undefined>): string {\n return parts\n .map((part) => (part === undefined || part === null ? \"\" : String(part).trim()))\n .filter((part) => part.length > 0)\n .join(\" \");\n}\n\nexport function buildReminderCorpus(item: ItemMetadata): string[] {\n return (item.reminders ?? []).map((reminder) => compactParts([reminder.at, reminder.text]));\n}\n\nexport function buildEventCorpus(item: ItemMetadata): string[] {\n return (item.events ?? []).map((event) =>\n compactParts([\n event.start_at,\n event.end_at,\n event.title,\n event.description,\n event.location,\n event.all_day === true ? \"all day\" : undefined,\n event.timezone,\n event.recurrence?.freq,\n event.recurrence?.interval,\n event.recurrence?.count,\n event.recurrence?.until,\n event.recurrence?.by_weekday?.join(\" \"),\n event.recurrence?.by_month_day?.join(\" \"),\n event.recurrence?.exdates?.join(\" \"),\n ]),\n );\n}\n\nexport function buildPlanFlatCorpus(item: ItemMetadata): string {\n const segments: Array<string | undefined> = [];\n segments.push(item.plan_mode, item.plan_scope, item.plan_harness, item.plan_resume_context);\n for (const step of item.plan_steps ?? []) {\n segments.push(step.title, step.body, step.status, step.owner, step.evidence, step.blocked_reason, step.superseded_by);\n for (const link of step.linked_items ?? []) {\n segments.push(`${link.kind} ${link.id}`, link.note);\n }\n for (const file of step.files ?? []) segments.push(file.path, file.note);\n for (const test of step.tests ?? []) segments.push(test.command, test.path, test.note);\n for (const doc of step.docs ?? []) segments.push(doc.path, doc.note);\n }\n for (const decision of item.plan_decisions ?? []) {\n segments.push(decision.decision, decision.rationale, decision.evidence);\n }\n for (const discovery of item.plan_discoveries ?? []) {\n segments.push(discovery.text);\n }\n for (const check of item.plan_validation ?? []) {\n segments.push(check.text, check.command, check.expected);\n }\n return segments.filter((segment): segment is string => typeof segment === \"string\" && segment.length > 0).join(\" \");\n}\n\nexport function buildPlanCorpus(item: ItemMetadata): Record<string, unknown> | undefined {\n const steps = (item.plan_steps ?? []).map((step) =>\n compactParts([\n step.order,\n step.id,\n step.title,\n step.body,\n step.status,\n step.owner,\n step.evidence,\n step.blocked_reason,\n step.superseded_by,\n (step.linked_items ?? []).map((link) => compactParts([link.kind, link.id, link.note])).join(\" \"),\n (step.files ?? []).map((file) => compactParts([file.path, file.note])).join(\" \"),\n (step.tests ?? []).map((test) => compactParts([test.command, test.path, test.note])).join(\" \"),\n (step.docs ?? []).map((doc) => compactParts([doc.path, doc.note])).join(\" \"),\n ]),\n );\n const decisions = (item.plan_decisions ?? []).map((entry) =>\n compactParts([entry.decision, entry.rationale, entry.evidence, entry.step_id]),\n );\n const discoveries = (item.plan_discoveries ?? []).map((entry) => compactParts([entry.text, entry.step_id]));\n const validation = (item.plan_validation ?? []).map((entry) =>\n compactParts([entry.text, entry.command, entry.expected]),\n );\n const hasPlanContent =\n item.plan_mode !== undefined ||\n item.plan_scope !== undefined ||\n item.plan_harness !== undefined ||\n item.plan_resume_context !== undefined ||\n steps.length > 0 ||\n decisions.length > 0 ||\n discoveries.length > 0 ||\n validation.length > 0;\n if (!hasPlanContent) {\n return undefined;\n }\n return {\n mode: item.plan_mode,\n scope: item.plan_scope,\n harness: item.plan_harness,\n resume_context: item.plan_resume_context,\n steps,\n decisions,\n discoveries,\n validation,\n };\n}\n\nexport function buildSearchCorpus(document: ItemDocument): Record<string, unknown> {\n const item = document.metadata;\n const plan = buildPlanCorpus(item);\n const corpus: Record<string, unknown> = {\n title: item.title,\n description: item.description,\n tags: item.tags,\n status: item.status,\n body: document.body,\n comments: (item.comments ?? []).map((entry) => entry.text),\n notes: (item.notes ?? []).map((entry) => entry.text),\n learnings: (item.learnings ?? []).map((entry) => entry.text),\n reminders: buildReminderCorpus(item),\n events: buildEventCorpus(item),\n dependencies: (item.dependencies ?? []).map((entry) => ({\n id: entry.id,\n kind: entry.kind,\n })),\n };\n if (plan) {\n corpus.plan = plan;\n }\n return corpus;\n}\n\nfunction resolveSemanticCorpusInputMaxCharacters(candidate: number | undefined): number {\n if (Number.isFinite(candidate) && Number(candidate) > 0) {\n return Math.floor(Number(candidate));\n }\n return DEFAULT_SEMANTIC_CORPUS_INPUT_MAX_CHARACTERS;\n}\n\nexport function resolveSemanticCorpusInputCharacterLimit(providerName: string | undefined): number {\n if (providerName?.trim().toLowerCase() === \"ollama\") {\n return OLLAMA_SEMANTIC_CORPUS_INPUT_MAX_CHARACTERS;\n }\n return DEFAULT_SEMANTIC_CORPUS_INPUT_MAX_CHARACTERS;\n}\n\nexport interface SemanticCorpusInputOptions {\n providerName?: string;\n maxCharacters?: number;\n}\n\nexport function buildSemanticCorpusInput(document: ItemDocument, options: SemanticCorpusInputOptions = {}): string {\n const serialized = JSON.stringify(buildSearchCorpus(document));\n const maxCharacters = resolveSemanticCorpusInputMaxCharacters(\n options.maxCharacters ?? resolveSemanticCorpusInputCharacterLimit(options.providerName),\n );\n if (serialized.length <= maxCharacters) {\n return serialized;\n }\n if (maxCharacters <= SEMANTIC_CORPUS_TRUNCATION_SUFFIX.length) {\n return SEMANTIC_CORPUS_TRUNCATION_SUFFIX.slice(0, maxCharacters);\n }\n const keepLength = Math.max(0, maxCharacters - SEMANTIC_CORPUS_TRUNCATION_SUFFIX.length);\n return `${serialized.slice(0, keepLength)}${SEMANTIC_CORPUS_TRUNCATION_SUFFIX}`;\n}\n", "import { spawnSync } from \"node:child_process\";\nimport type { PmSettings } from \"../../types/index.js\";\nimport { toNonEmptyString } from \"../shared/primitives.js\";\n\nconst DISABLE_AUTO_DEFAULTS_ENV = \"PM_DISABLE_OLLAMA_AUTO_DEFAULTS\";\nconst OLLAMA_MODEL_ENV = \"PM_OLLAMA_MODEL\";\nconst DEFAULT_OLLAMA_BASE_URL = \"http://localhost:11434\";\nconst DEFAULT_OLLAMA_MODEL = \"qwen3-embedding:0.6b\";\nconst DEFAULT_LANCEDB_PATH = \".agents/pm/search/lancedb/\";\nconst OLLAMA_VERSION_TIMEOUT_MS = 1_500;\nconst OLLAMA_LIST_TIMEOUT_MS = 2_500;\nconst QWEN_EMBEDDING_MODEL_PATTERN = /qwen.*(?:embed|embedding)|(?:embed|embedding).*qwen/i;\nconst EMBEDDING_MODEL_PATTERN = /embed|embedding/i;\n\nexport interface SemanticRuntimeDefaultsResolution {\n settings: PmSettings;\n auto_ollama_defaults_applied: boolean;\n}\n\nconst toOptionalNonEmptyString = toNonEmptyString;\n\nfunction isAutoDefaultsDisabled(): boolean {\n const raw = toOptionalNonEmptyString(process.env[DISABLE_AUTO_DEFAULTS_ENV]);\n if (!raw) {\n return false;\n }\n const normalized = raw.toLowerCase();\n return normalized === \"1\" || normalized === \"true\" || normalized === \"yes\";\n}\n\n/**\n * True only when the user has opted into a provider/store that COMPETES with the\n * Ollama + LanceDB auto-default stack: an explicit non-Ollama search provider, a\n * non-LanceDB vector adapter, or any OpenAI/Qdrant credentials. A partial Ollama\n * setup (e.g. only `ollama.base_url`) is NOT competing — its missing leaves are\n * filled per-field below so a single config write can never silently disable\n * semantic search and then hard-error `pm reindex`.\n */\nfunction hasCompetingSemanticConfiguration(settings: PmSettings): boolean {\n const provider = toOptionalNonEmptyString(settings.search?.provider);\n if (provider && provider.toLowerCase() !== \"ollama\") {\n return true;\n }\n const adapter = toOptionalNonEmptyString(settings.vector_store?.adapter);\n if (adapter && adapter.toLowerCase() !== \"lancedb\") {\n return true;\n }\n const openaiConfigured = [\n settings.providers?.openai?.base_url,\n settings.providers?.openai?.model,\n settings.providers?.openai?.api_key,\n ].some((entry) => toOptionalNonEmptyString(entry) !== null);\n if (openaiConfigured) {\n return true;\n }\n const qdrantConfigured = [\n settings.vector_store?.qdrant?.url,\n settings.vector_store?.qdrant?.api_key,\n ].some((entry) => toOptionalNonEmptyString(entry) !== null);\n return qdrantConfigured;\n}\n\nfunction isOllamaInstalled(): boolean {\n const result = spawnSync(\"ollama\", [\"--version\"], {\n encoding: \"utf8\",\n timeout: OLLAMA_VERSION_TIMEOUT_MS,\n });\n if (result.error) {\n return false;\n }\n return result.status === 0;\n}\n\nfunction parseOllamaModelList(output: string): string | null {\n const lines = output\n .split(/\\r?\\n/)\n .map((line) => line.trim())\n .filter((line) => line.length > 0);\n if (lines.length === 0) {\n return null;\n }\n const models = lines\n .map((line) => line.split(/\\s+/)[0]?.trim())\n .filter((entry): entry is string => Boolean(entry && entry.length > 0))\n .filter((entry) => entry.toUpperCase() !== \"NAME\");\n if (models.length === 0) {\n return null;\n }\n const preferredQwenEmbeddingModel = models.find((entry) => QWEN_EMBEDDING_MODEL_PATTERN.test(entry));\n if (preferredQwenEmbeddingModel) {\n return preferredQwenEmbeddingModel;\n }\n const embeddingModel = models.find((entry) => EMBEDDING_MODEL_PATTERN.test(entry));\n return embeddingModel ?? null;\n}\n\nfunction resolveAutoOllamaModel(settings: PmSettings): string {\n const settingsModel = toOptionalNonEmptyString(settings.providers?.ollama?.model);\n if (settingsModel) {\n return settingsModel;\n }\n const envModel = toOptionalNonEmptyString(process.env[OLLAMA_MODEL_ENV]);\n if (envModel) {\n return envModel;\n }\n const listed = spawnSync(\"ollama\", [\"list\"], {\n encoding: \"utf8\",\n timeout: OLLAMA_LIST_TIMEOUT_MS,\n });\n if (!listed.error && listed.status === 0) {\n const listedModel = parseOllamaModelList(typeof listed.stdout === \"string\" ? listed.stdout : \"\");\n if (listedModel) {\n return listedModel;\n }\n }\n return DEFAULT_OLLAMA_MODEL;\n}\n\nexport function resolveSettingsWithSemanticRuntimeDefaults(settings: PmSettings): SemanticRuntimeDefaultsResolution {\n const unchanged: SemanticRuntimeDefaultsResolution = {\n settings,\n auto_ollama_defaults_applied: false,\n };\n if (isAutoDefaultsDisabled()) {\n return unchanged;\n }\n if (hasCompetingSemanticConfiguration(settings)) {\n return unchanged;\n }\n\n const needsBaseUrl = toOptionalNonEmptyString(settings.providers?.ollama?.base_url) === null;\n const needsModel = toOptionalNonEmptyString(settings.providers?.ollama?.model) === null;\n const needsLancedbPath = toOptionalNonEmptyString(settings.vector_store?.lancedb?.path) === null;\n const needsEmbeddingModel = toOptionalNonEmptyString(settings.search?.embedding_model) === null;\n if (!needsBaseUrl && !needsModel && !needsLancedbPath && !needsEmbeddingModel) {\n // A fully-configured Ollama/LanceDB stack — nothing to fill, and no need to\n // probe for Ollama at all.\n return unchanged;\n }\n\n // Auto-discovering the embedding model (via `ollama list`) is the only step that\n // requires Ollama to be installed. When a model is already configured we mirror it\n // into the remaining leaves without forcing an Ollama probe; when it is missing we\n // require Ollama to actually be present rather than writing an unusable default.\n if (needsModel && !isOllamaInstalled()) {\n return unchanged;\n }\n\n const nextSettings = structuredClone(settings);\n const resolvedModel = resolveAutoOllamaModel(nextSettings);\n // `readSettings` always normalizes these nested objects, but this function is\n // exported and runs on the search hot path with caller-supplied settings, so a\n // partial object (e.g. providers/vector_store set but no `search` block) must\n // fill the missing leaf rather than throwing on an undefined parent.\n if (needsBaseUrl || needsModel) {\n const providers = (nextSettings.providers ??= {} as PmSettings[\"providers\"]);\n const ollama = (providers.ollama ??= {} as PmSettings[\"providers\"][\"ollama\"]);\n if (needsBaseUrl) {\n ollama.base_url = DEFAULT_OLLAMA_BASE_URL;\n }\n if (needsModel) {\n ollama.model = resolvedModel;\n }\n }\n if (needsLancedbPath) {\n const vectorStore = (nextSettings.vector_store ??= {} as PmSettings[\"vector_store\"]);\n const lancedb = (vectorStore.lancedb ??= {} as PmSettings[\"vector_store\"][\"lancedb\"]);\n lancedb.path = DEFAULT_LANCEDB_PATH;\n }\n if (needsEmbeddingModel) {\n const search = (nextSettings.search ??= {} as PmSettings[\"search\"]);\n search.embedding_model = resolvedModel;\n }\n return {\n settings: nextSettings,\n auto_ollama_defaults_applied: true,\n };\n}\n", "import type { PmSettings } from \"../../types/index.js\";\nimport { mkdir, readFile, rename, stat, unlink, writeFile } from \"node:fs/promises\";\nimport { basename, dirname, join, resolve } from \"node:path\";\nimport {\n executeSearchJsonRequest,\n normalizeSearchHttpTimeoutMs,\n resolveSearchHttpFetcher,\n} from \"./http-client.js\";\nimport type { SearchHttpFetcher, SearchHttpResponse } from \"./http-client.js\";\nimport {\n isFiniteNumberArray,\n toErrorMessage,\n toNonEmptyString,\n trimTrailingSlashes,\n} from \"../shared/primitives.js\";\n\nexport type VectorStoreName = \"qdrant\" | \"lancedb\";\n\nexport interface QdrantVectorStoreConfig {\n name: \"qdrant\";\n url: string;\n api_key?: string;\n}\n\nexport interface LanceDbVectorStoreConfig {\n name: \"lancedb\";\n path: string;\n}\n\nexport type VectorStoreConfig = QdrantVectorStoreConfig | LanceDbVectorStoreConfig;\n\nexport interface VectorStoreResolution {\n active: VectorStoreConfig | null;\n available: VectorStoreConfig[];\n}\n\nexport interface VectorStoreRequestTarget {\n store: VectorStoreName;\n query_target: string;\n upsert_target: string;\n}\n\nexport interface VectorQueryPlan {\n target: VectorStoreRequestTarget;\n method: \"POST\" | \"LOCAL\";\n headers: Record<string, string>;\n body: Record<string, unknown>;\n}\n\nexport interface VectorRecord {\n id: string;\n vector: number[];\n payload?: Record<string, unknown>;\n}\n\nexport interface VectorUpsertPlan {\n target: VectorStoreRequestTarget;\n method: \"POST\" | \"LOCAL\";\n headers: Record<string, string>;\n body: Record<string, unknown>;\n}\n\nexport interface VectorDeletePlan {\n target: VectorStoreRequestTarget;\n method: \"POST\" | \"LOCAL\";\n headers: Record<string, string>;\n body: Record<string, unknown>;\n}\n\nexport interface VectorQueryHit {\n id: string;\n score: number;\n payload?: Record<string, unknown>;\n}\n\nexport interface VectorUpsertResult {\n status: string;\n}\n\nexport type VectorHttpResponse = SearchHttpResponse;\n\nexport type VectorRequestFetcher = SearchHttpFetcher<VectorHttpResponse>;\n\nexport interface ExecuteVectorRequestOptions {\n timeout_ms?: number;\n fetcher?: VectorRequestFetcher;\n warnings?: string[];\n}\n\ntype VectorSettingsInput = {\n vector_store?: {\n qdrant?: {\n url?: string;\n api_key?: string;\n };\n lancedb?: {\n path?: string;\n };\n };\n};\n\nconst DEFAULT_COLLECTION = \"pm_items\";\nconst LANCE_DB_LOCAL_SNAPSHOT_DIR = \".pm-cli-local-vectors\";\nconst LANCE_DB_LOCAL_SNAPSHOT_VERSION = 1;\ninterface LanceDbLocalTableCacheEntry {\n records: Map<string, VectorRecord>;\n mtimeMs: number | null;\n size: number | null;\n}\n\nconst lanceDbLocalTables = new Map<string, LanceDbLocalTableCacheEntry>();\n\nfunction normalizeVector(value: unknown): number[] {\n if (!isFiniteNumberArray(value) || value.length === 0) {\n throw new Error(\"Vector values must be a non-empty numeric array\");\n }\n return [...value];\n}\n\nfunction normalizeLimit(value: number): number {\n if (!Number.isFinite(value) || value <= 0) {\n throw new Error(\"Vector query limit must be a positive number\");\n }\n return Math.floor(value);\n}\n\nfunction normalizeQdrantQueryResponse(payload: unknown): VectorQueryHit[] {\n const result = (payload as { result?: unknown }).result;\n if (!Array.isArray(result)) {\n throw new TypeError(\"Qdrant query response must include a result array\");\n }\n const hits = result.map((entry, index) => {\n const idValue = (entry as { id?: unknown }).id;\n const idCandidate = typeof idValue === \"number\" ? String(idValue) : idValue;\n const id = toNonEmptyString(idCandidate);\n if (!id) {\n throw new Error(`Qdrant query response entry at index ${index} is missing a non-empty id`);\n }\n\n const score = (entry as { score?: unknown }).score;\n if (typeof score !== \"number\" || !Number.isFinite(score)) {\n throw new TypeError(`Qdrant query response entry at index ${index} is missing a finite numeric score`);\n }\n\n const payloadValue = (entry as { payload?: unknown }).payload;\n if (\n payloadValue !== undefined &&\n (typeof payloadValue !== \"object\" || payloadValue === null || Array.isArray(payloadValue))\n ) {\n throw new Error(`Qdrant query response entry at index ${index} must provide payload as an object when set`);\n }\n\n return {\n id,\n score,\n ...(payloadValue ? { payload: payloadValue as Record<string, unknown> } : {}),\n };\n });\n hits.sort((left, right) => {\n if (left.score !== right.score) {\n return right.score - left.score;\n }\n return left.id.localeCompare(right.id);\n });\n return hits;\n}\n\nfunction normalizeQdrantUpsertResponse(payload: unknown): VectorUpsertResult {\n const nestedStatus = toNonEmptyString((payload as { result?: { status?: unknown } }).result?.status);\n if (nestedStatus) {\n return { status: nestedStatus };\n }\n const topLevelStatus = toNonEmptyString((payload as { status?: unknown }).status);\n if (topLevelStatus) {\n return { status: topLevelStatus };\n }\n throw new Error(\"Qdrant upsert response must include status metadata\");\n}\n\nasync function executeRemoteVectorPlan(\n endpoint: string,\n plan: {\n method: \"POST\";\n headers: Record<string, string>;\n body: Record<string, unknown>;\n },\n timeoutMs: number,\n fetcher: VectorRequestFetcher,\n requestKind: \"query\" | \"upsert\" | \"delete\",\n): Promise<unknown> {\n return await executeSearchJsonRequest({\n endpoint,\n method: plan.method,\n headers: plan.headers,\n body: plan.body,\n timeoutMs,\n fetcher,\n requestLabel: `Vector ${requestKind} request`,\n responseLabel: `Vector ${requestKind} response`,\n });\n}\n\nfunction resolveQdrantStore(settings: VectorSettingsInput): QdrantVectorStoreConfig | null {\n const url = toNonEmptyString(settings.vector_store?.qdrant?.url);\n if (!url) {\n return null;\n }\n const apiKey = toNonEmptyString(settings.vector_store?.qdrant?.api_key);\n return {\n name: \"qdrant\",\n url,\n ...(apiKey ? { api_key: apiKey } : {}),\n };\n}\n\nfunction resolveLanceDbStore(settings: VectorSettingsInput): LanceDbVectorStoreConfig | null {\n const lancedbPath = toNonEmptyString(settings.vector_store?.lancedb?.path);\n if (!lancedbPath) {\n return null;\n }\n return {\n name: \"lancedb\",\n path: lancedbPath,\n };\n}\n\nfunction normalizeVectorRecords(records: VectorRecord[]): VectorRecord[] {\n if (!Array.isArray(records) || records.length === 0) {\n throw new Error(\"Vector upsert records must include at least one entry\");\n }\n return records.map((record, index) => {\n const id = toNonEmptyString(record.id);\n if (!id) {\n throw new Error(`Vector upsert record at index ${index} is missing a non-empty id`);\n }\n const vector = normalizeVector(record.vector);\n const payload = record.payload;\n if (payload !== undefined && (typeof payload !== \"object\" || payload === null || Array.isArray(payload))) {\n throw new Error(`Vector upsert record at index ${index} must provide payload as an object when set`);\n }\n return {\n id,\n vector,\n ...(payload ? { payload } : {}),\n };\n });\n}\n\nfunction normalizeVectorDeleteIds(ids: string[]): string[] {\n if (!Array.isArray(ids) || ids.length === 0) {\n throw new Error(\"Vector delete ids must include at least one entry\");\n }\n const normalizedIds = ids\n .map((id, index) => {\n const normalized = toNonEmptyString(id);\n if (!normalized) {\n throw new Error(`Vector delete id at index ${index} is missing a non-empty value`);\n }\n return normalized;\n })\n .sort((left, right) => left.localeCompare(right));\n const uniqueIds: string[] = [];\n for (const id of normalizedIds) {\n if (uniqueIds.at(-1) !== id) {\n uniqueIds.push(id);\n }\n }\n return uniqueIds;\n}\n\nfunction resolveQdrantDeleteTarget(upsertTarget: string): string {\n return upsertTarget.replace(/\\/points\\?wait=true$/, \"/points/delete?wait=true\");\n}\n\nfunction getLanceDbLocalTableKey(storePath: string, table: string): string {\n return getLanceDbSnapshotPath(storePath, table);\n}\n\nfunction getLanceDbSnapshotPath(storePath: string, table: string): string {\n return join(resolve(storePath), LANCE_DB_LOCAL_SNAPSHOT_DIR, `${table}.json`);\n}\n\nfunction isNodeErrorWithCode(error: unknown, code: string): boolean {\n return typeof error === \"object\" && error !== null && (error as { code?: unknown }).code === code;\n}\n\nfunction normalizeSnapshotRecord(entry: unknown, index: number, snapshotPath: string): VectorRecord {\n const id = toNonEmptyString((entry as { id?: unknown }).id);\n if (!id) {\n throw new Error(`LanceDB local snapshot '${snapshotPath}' record at index ${index} is missing a non-empty id`);\n }\n const vector = normalizeVector((entry as { vector?: unknown }).vector);\n const payload = (entry as { payload?: unknown }).payload;\n if (payload !== undefined && (typeof payload !== \"object\" || payload === null || Array.isArray(payload))) {\n throw new Error(\n `LanceDB local snapshot '${snapshotPath}' record '${id}' must provide payload as an object when set`,\n );\n }\n return {\n id,\n vector,\n ...(payload ? { payload: payload as Record<string, unknown> } : {}),\n };\n}\n\nfunction parseLanceDbSnapshot(snapshotPath: string, expectedTable: string, raw: string): Map<string, VectorRecord> {\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw) as unknown;\n } catch (error) {\n throw new Error(`LanceDB local snapshot at '${snapshotPath}' is not valid JSON: ${toErrorMessage(error)}`);\n }\n if (typeof parsed !== \"object\" || parsed === null || Array.isArray(parsed)) {\n throw new Error(`LanceDB local snapshot at '${snapshotPath}' must be a JSON object`);\n }\n\n const version = (parsed as { version?: unknown }).version;\n if (version !== LANCE_DB_LOCAL_SNAPSHOT_VERSION) {\n throw new Error(\n `LanceDB local snapshot at '${snapshotPath}' must include version=${LANCE_DB_LOCAL_SNAPSHOT_VERSION}`,\n );\n }\n\n const table = toNonEmptyString((parsed as { table?: unknown }).table);\n if (!table) {\n throw new Error(`LanceDB local snapshot at '${snapshotPath}' must include a non-empty table value`);\n }\n if (table !== expectedTable) {\n throw new Error(\n `LanceDB local snapshot at '${snapshotPath}' table mismatch: expected '${expectedTable}', received '${table}'`,\n );\n }\n\n const recordsValue = (parsed as { records?: unknown }).records;\n if (!Array.isArray(recordsValue)) {\n throw new TypeError(`LanceDB local snapshot at '${snapshotPath}' must include a records array`);\n }\n\n const tableRecords = new Map<string, VectorRecord>();\n for (let index = 0; index < recordsValue.length; index += 1) {\n const record = normalizeSnapshotRecord(recordsValue[index], index, snapshotPath);\n tableRecords.set(record.id, record);\n }\n return tableRecords;\n}\n\nasync function loadLanceDbLocalTable(storePath: string, table: string): Promise<Map<string, VectorRecord>> {\n const key = getLanceDbLocalTableKey(storePath, table);\n const snapshotPath = getLanceDbSnapshotPath(storePath, table);\n let snapshotStats: { mtimeMs: number; size: number } | null = null;\n try {\n const stats = await stat(snapshotPath);\n snapshotStats = { mtimeMs: stats.mtimeMs, size: stats.size };\n } catch (error) {\n if (!isNodeErrorWithCode(error, \"ENOENT\")) {\n throw error;\n }\n }\n\n const cached = lanceDbLocalTables.get(key);\n if (cached && !snapshotStats) {\n if (cached.mtimeMs === null && cached.size === null && cached.records.size === 0) {\n return cached.records;\n }\n const loaded = new Map<string, VectorRecord>();\n lanceDbLocalTables.set(key, { records: loaded, mtimeMs: null, size: null });\n return loaded;\n }\n if (\n cached &&\n snapshotStats &&\n cached.mtimeMs === snapshotStats.mtimeMs &&\n cached.size === snapshotStats.size\n ) {\n return cached.records;\n }\n\n let loaded = new Map<string, VectorRecord>();\n try {\n const raw = await readFile(snapshotPath, \"utf8\");\n loaded = parseLanceDbSnapshot(snapshotPath, table, raw);\n } catch (error) {\n if (!isNodeErrorWithCode(error, \"ENOENT\")) {\n throw error;\n }\n }\n lanceDbLocalTables.set(key, {\n records: loaded,\n mtimeMs: snapshotStats?.mtimeMs ?? null,\n size: snapshotStats?.size ?? null,\n });\n return loaded;\n}\n\nfunction buildSnapshotRecords(table: Map<string, VectorRecord>): VectorRecord[] {\n const records = [...table.values()];\n records.sort((left, right) => left.id.localeCompare(right.id));\n return records.map((record) => ({\n id: record.id,\n vector: [...record.vector],\n ...(record.payload ? { payload: record.payload } : {}),\n }));\n}\n\nasync function removeSnapshotFile(snapshotPath: string): Promise<void> {\n try {\n await unlink(snapshotPath);\n } catch (error) {\n if (!isNodeErrorWithCode(error, \"ENOENT\")) {\n throw new Error(`LanceDB local snapshot delete failed at '${snapshotPath}': ${toErrorMessage(error)}`);\n }\n }\n}\n\nasync function persistLanceDbLocalTable(storePath: string, tableName: string, table: Map<string, VectorRecord>): Promise<void> {\n const snapshotPath = getLanceDbSnapshotPath(storePath, tableName);\n if (table.size === 0) {\n await removeSnapshotFile(snapshotPath);\n return;\n }\n\n const snapshotDir = dirname(snapshotPath);\n try {\n await mkdir(snapshotDir, { recursive: true });\n } catch (error) {\n throw new Error(\n `LanceDB local snapshot directory create failed at '${snapshotDir}': ${toErrorMessage(error)}`,\n );\n }\n\n const tempPath = join(\n snapshotDir,\n `${basename(snapshotPath)}.tmp-${process.pid}-${Date.now()}-${Math.random().toString(16).slice(2)}`,\n );\n const serialized = `${JSON.stringify(\n {\n version: LANCE_DB_LOCAL_SNAPSHOT_VERSION,\n table: tableName,\n records: buildSnapshotRecords(table),\n },\n null,\n 2,\n )}\\n`;\n try {\n await writeFile(tempPath, serialized, \"utf8\");\n await rename(tempPath, snapshotPath);\n } catch (error) {\n await unlink(tempPath).catch(() => {});\n throw new Error(`LanceDB local snapshot write failed at '${snapshotPath}': ${toErrorMessage(error)}`);\n }\n}\n\nfunction l2Norm(vector: number[]): number {\n let sumSq = 0;\n for (let index = 0; index < vector.length; index += 1) {\n sumSq += vector[index] * vector[index];\n }\n return Math.sqrt(sumSq);\n}\n\nfunction cosineSimilarity(left: number[], right: number[]): number {\n let dotProd = 0;\n for (let index = 0; index < left.length; index += 1) {\n dotProd += left[index] * right[index];\n }\n const leftNorm = l2Norm(left);\n const rightNorm = l2Norm(right);\n if (leftNorm === 0 || rightNorm === 0) {\n return 0;\n }\n return dotProd / (leftNorm * rightNorm);\n}\n\nexport function resolveVectorStores(settings: PmSettings | VectorSettingsInput): VectorStoreResolution {\n const qdrant = resolveQdrantStore(settings);\n const lancedb = resolveLanceDbStore(settings);\n const available = [qdrant, lancedb].filter((entry): entry is VectorStoreConfig => entry !== null);\n // Honor `settings.vector_store.adapter` when set: if both built-in stores\n // are configured, the preferred adapter wins; otherwise fall back to the\n // first available entry (preserves the previous tie-break: qdrant > lancedb).\n // Match case-insensitively so \"Qdrant\" / \"LanceDB\" / \"lancedb\" all work.\n const preferredName = toNonEmptyString(\n (settings as { vector_store?: { adapter?: unknown } }).vector_store?.adapter,\n );\n const preferredKey = preferredName ? preferredName.toLowerCase() : null;\n const preferred = preferredKey\n ? available.find((entry) => entry.name === preferredKey)\n : undefined;\n return {\n active: preferred ?? available[0] ?? null,\n available,\n };\n}\n\nexport function resolveVectorStoreRequestTarget(store: VectorStoreConfig): VectorStoreRequestTarget {\n if (store.name === \"qdrant\") {\n const baseUrl = trimTrailingSlashes(store.url);\n return {\n store: \"qdrant\",\n query_target: `${baseUrl}/collections/${DEFAULT_COLLECTION}/points/search`,\n upsert_target: `${baseUrl}/collections/${DEFAULT_COLLECTION}/points?wait=true`,\n };\n }\n const encodedPath = encodeURIComponent(store.path);\n return {\n store: \"lancedb\",\n query_target: `lancedb://${encodedPath}#${DEFAULT_COLLECTION}`,\n upsert_target: `lancedb://${encodedPath}#${DEFAULT_COLLECTION}`,\n };\n}\n\nexport function buildVectorQueryPlan(store: VectorStoreConfig, vector: number[], limit: number): VectorQueryPlan {\n const target = resolveVectorStoreRequestTarget(store);\n const normalizedVector = normalizeVector(vector);\n const normalizedLimit = normalizeLimit(limit);\n if (store.name === \"qdrant\") {\n return {\n target,\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n ...(store.api_key ? { \"api-key\": store.api_key } : {}),\n },\n body: {\n vector: normalizedVector,\n limit: normalizedLimit,\n with_payload: true,\n },\n };\n }\n return {\n target,\n method: \"LOCAL\",\n headers: {},\n body: {\n table: DEFAULT_COLLECTION,\n vector: normalizedVector,\n limit: normalizedLimit,\n },\n };\n}\n\nexport function buildVectorUpsertPlan(store: VectorStoreConfig, records: VectorRecord[]): VectorUpsertPlan {\n const target = resolveVectorStoreRequestTarget(store);\n const normalizedRecords = normalizeVectorRecords(records);\n if (store.name === \"qdrant\") {\n return {\n target,\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n ...(store.api_key ? { \"api-key\": store.api_key } : {}),\n },\n body: {\n points: normalizedRecords,\n },\n };\n }\n return {\n target,\n method: \"LOCAL\",\n headers: {},\n body: {\n table: DEFAULT_COLLECTION,\n records: normalizedRecords,\n },\n };\n}\n\nexport function buildVectorDeletePlan(store: VectorStoreConfig, ids: string[]): VectorDeletePlan {\n const target = resolveVectorStoreRequestTarget(store);\n const normalizedIds = normalizeVectorDeleteIds(ids);\n if (store.name === \"qdrant\") {\n return {\n target,\n method: \"POST\",\n headers: {\n \"content-type\": \"application/json\",\n ...(store.api_key ? { \"api-key\": store.api_key } : {}),\n },\n body: {\n points: normalizedIds,\n },\n };\n }\n return {\n target,\n method: \"LOCAL\",\n headers: {},\n body: {\n table: DEFAULT_COLLECTION,\n ids: normalizedIds,\n },\n };\n}\n\nexport async function executeVectorQuery(\n store: VectorStoreConfig,\n vector: number[],\n limit: number,\n options: ExecuteVectorRequestOptions = {},\n): Promise<VectorQueryHit[]> {\n const plan = buildVectorQueryPlan(store, vector, limit);\n if (plan.method === \"LOCAL\") {\n const lanceDbStore = store as LanceDbVectorStoreConfig;\n const queryBody = plan.body as {\n table: string;\n vector: number[];\n limit: number;\n };\n const table = await loadLanceDbLocalTable(lanceDbStore.path, queryBody.table);\n if (table.size === 0) {\n return [];\n }\n const queryVector = normalizeVector(queryBody.vector);\n const queryLimit = normalizeLimit(queryBody.limit);\n const hits: VectorQueryHit[] = [];\n let dimensionMismatchCount = 0;\n for (const record of table.values()) {\n if (record.vector.length !== queryVector.length) {\n dimensionMismatchCount++;\n continue;\n }\n hits.push({\n id: record.id,\n score: cosineSimilarity(queryVector, record.vector),\n ...(record.payload ? { payload: record.payload } : {}),\n });\n }\n if (dimensionMismatchCount > 0 && options.warnings) {\n options.warnings.push(\n `vector_dimension_mismatch:${dimensionMismatchCount} records skipped (expected ${queryVector.length} dimensions)`,\n );\n }\n hits.sort((left, right) => {\n if (left.score !== right.score) {\n return right.score - left.score;\n }\n return left.id.localeCompare(right.id);\n });\n return hits.slice(0, queryLimit);\n }\n const timeoutMs = normalizeSearchHttpTimeoutMs(options.timeout_ms, \"Vector request\");\n const fetcher = resolveSearchHttpFetcher(options.fetcher, \"Vector request\");\n const payload = await executeRemoteVectorPlan(\n plan.target.query_target,\n {\n method: \"POST\",\n headers: plan.headers,\n body: plan.body,\n },\n timeoutMs,\n fetcher,\n \"query\",\n );\n return normalizeQdrantQueryResponse(payload);\n}\n\nexport async function executeVectorUpsert(\n store: VectorStoreConfig,\n records: VectorRecord[],\n options: ExecuteVectorRequestOptions = {},\n): Promise<VectorUpsertResult> {\n const plan = buildVectorUpsertPlan(store, records);\n if (plan.method === \"LOCAL\") {\n const lanceDbStore = store as LanceDbVectorStoreConfig;\n const upsertBody = plan.body as {\n table: string;\n records: VectorRecord[];\n };\n const key = getLanceDbLocalTableKey(lanceDbStore.path, upsertBody.table);\n const table = await loadLanceDbLocalTable(lanceDbStore.path, upsertBody.table);\n for (const record of upsertBody.records) {\n table.set(record.id, record);\n }\n await persistLanceDbLocalTable(lanceDbStore.path, upsertBody.table, table);\n const snapshotPath = getLanceDbSnapshotPath(lanceDbStore.path, upsertBody.table);\n const snapshotStats = await stat(snapshotPath);\n lanceDbLocalTables.set(key, {\n records: table,\n mtimeMs: snapshotStats.mtimeMs,\n size: snapshotStats.size,\n });\n return { status: \"ok\" };\n }\n const timeoutMs = normalizeSearchHttpTimeoutMs(options.timeout_ms, \"Vector request\");\n const fetcher = resolveSearchHttpFetcher(options.fetcher, \"Vector request\");\n const payload = await executeRemoteVectorPlan(\n plan.target.upsert_target,\n {\n method: \"POST\",\n headers: plan.headers,\n body: plan.body,\n },\n timeoutMs,\n fetcher,\n \"upsert\",\n );\n return normalizeQdrantUpsertResponse(payload);\n}\n\nexport async function executeVectorDelete(\n store: VectorStoreConfig,\n ids: string[],\n options: ExecuteVectorRequestOptions = {},\n): Promise<VectorUpsertResult> {\n const plan = buildVectorDeletePlan(store, ids);\n if (plan.method === \"LOCAL\") {\n const lanceDbStore = store as LanceDbVectorStoreConfig;\n const deleteBody = plan.body as {\n table: string;\n ids: string[];\n };\n const key = getLanceDbLocalTableKey(lanceDbStore.path, deleteBody.table);\n const table = await loadLanceDbLocalTable(lanceDbStore.path, deleteBody.table);\n if (table.size === 0) {\n return { status: \"ok\" };\n }\n for (const id of deleteBody.ids) {\n table.delete(id);\n }\n await persistLanceDbLocalTable(lanceDbStore.path, deleteBody.table, table);\n if (table.size === 0) {\n lanceDbLocalTables.delete(key);\n } else {\n const snapshotPath = getLanceDbSnapshotPath(lanceDbStore.path, deleteBody.table);\n const snapshotStats = await stat(snapshotPath);\n lanceDbLocalTables.set(key, {\n records: table,\n mtimeMs: snapshotStats.mtimeMs,\n size: snapshotStats.size,\n });\n }\n return { status: \"ok\" };\n }\n const timeoutMs = normalizeSearchHttpTimeoutMs(options.timeout_ms, \"Vector request\");\n const fetcher = resolveSearchHttpFetcher(options.fetcher, \"Vector request\");\n const payload = await executeRemoteVectorPlan(\n resolveQdrantDeleteTarget(plan.target.upsert_target),\n {\n method: \"POST\",\n headers: plan.headers,\n body: plan.body,\n },\n timeoutMs,\n fetcher,\n \"delete\",\n );\n return normalizeQdrantUpsertResponse(payload);\n}\n", "import path from \"node:path\";\nimport { getActiveExtensionRegistrations } from \"../extensions/index.js\";\nimport { pathExists, readFileIfExists, removeFileIfExists, writeFileAtomic } from \"../fs/fs-utils.js\";\nimport { resolveItemTypeRegistry } from \"../item/type-registry.js\";\nimport { toErrorMessage } from \"../shared/primitives.js\";\nimport { locateItem, readLocatedItem } from \"../store/item-store.js\";\nimport { getSettingsPath } from \"../store/paths.js\";\nimport { readSettings } from \"../store/settings.js\";\nimport { executeEmbeddingBatchesWithRetry } from \"./embedding-batches.js\";\nimport { buildSemanticCorpusInput } from \"./corpus.js\";\nimport { resolveEmbeddingProviders } from \"./providers.js\";\nimport type { EmbeddingProviderConfig } from \"./providers.js\";\nimport { resolveSettingsWithSemanticRuntimeDefaults } from \"./semantic-defaults.js\";\nimport { executeVectorDelete, executeVectorUpsert, resolveVectorStores } from \"./vector-stores.js\";\nimport type { VectorStoreConfig } from \"./vector-stores.js\";\nimport { nowIso } from \"../shared/time.js\";\nimport type { ItemDocument, ItemFrontMatter } from \"../../types/index.js\";\n\nexport const SEARCH_CACHE_ARTIFACT_PATHS = [\"index/manifest.json\", \"search/embeddings.jsonl\"] as const;\nexport const VECTORIZATION_STATUS_LEDGER_PATH = \"search/vectorization-status.json\";\n\nexport interface SearchCacheInvalidationResult {\n invalidated: string[];\n warnings: string[];\n}\n\nexport interface SemanticMutationRefreshResult {\n refreshed: string[];\n skipped: string[];\n warnings: string[];\n}\n\nexport interface SearchMutationArtifactRefreshResult extends SearchCacheInvalidationResult {\n refreshed: string[];\n skipped: string[];\n}\n\nexport interface SemanticRefreshOptions {\n settings?: Awaited<ReturnType<typeof readSettings>>;\n apply_runtime_defaults?: boolean;\n}\n\nexport interface VectorizationStatusLedgerReadResult {\n entries: Record<string, string>;\n warnings: string[];\n}\n\nfunction formatInvalidationWarning(relativePath: string, error: unknown): string {\n return `search_cache_invalidation_failed:${relativePath}:${String(error)}`;\n}\n\n\nfunction toUniqueSorted(values: Iterable<string>): string[] {\n return [...new Set([...values].map((value) => value.trim()).filter((value) => value.length > 0))]\n .sort((left, right) => left.localeCompare(right));\n}\n\nfunction isValidUpdatedAt(value: unknown): value is string {\n return typeof value === \"string\" && value.trim().length > 0 && Number.isFinite(Date.parse(value));\n}\n\nfunction normalizeVectorizationLedgerEntries(entries: Record<string, string>): Record<string, string> {\n const normalized = new Map<string, string>();\n for (const [rawId, rawUpdatedAt] of Object.entries(entries)) {\n const id = rawId.trim();\n if (id.length === 0 || !isValidUpdatedAt(rawUpdatedAt)) {\n continue;\n }\n normalized.set(id, rawUpdatedAt);\n }\n return Object.fromEntries([...normalized.entries()].sort((left, right) => left[0].localeCompare(right[0])));\n}\n\nexport async function readVectorizationStatusLedger(pmRoot: string): Promise<VectorizationStatusLedgerReadResult> {\n const ledgerPath = path.join(pmRoot, VECTORIZATION_STATUS_LEDGER_PATH);\n const raw = await readFileIfExists(ledgerPath);\n if (raw === null || raw.trim().length === 0) {\n return {\n entries: {},\n warnings: [],\n };\n }\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw) as unknown;\n } catch {\n return {\n entries: {},\n warnings: [\"search_vectorization_status_ledger_invalid\"],\n };\n }\n\n if (\n typeof parsed !== \"object\" ||\n parsed === null ||\n (parsed as { version?: unknown }).version !== 1 ||\n !Array.isArray((parsed as { items?: unknown }).items)\n ) {\n return {\n entries: {},\n warnings: [\"search_vectorization_status_ledger_invalid\"],\n };\n }\n\n const mapped = new Map<string, string>();\n for (const entry of (parsed as { items: unknown[] }).items) {\n if (typeof entry !== \"object\" || entry === null) {\n return {\n entries: {},\n warnings: [\"search_vectorization_status_ledger_invalid\"],\n };\n }\n const id = (entry as { id?: unknown }).id;\n const updatedAt = (entry as { updated_at?: unknown }).updated_at;\n if (typeof id !== \"string\" || id.trim().length === 0 || !isValidUpdatedAt(updatedAt)) {\n return {\n entries: {},\n warnings: [\"search_vectorization_status_ledger_invalid\"],\n };\n }\n mapped.set(id.trim(), updatedAt);\n }\n\n return {\n entries: Object.fromEntries([...mapped.entries()].sort((left, right) => left[0].localeCompare(right[0]))),\n warnings: [],\n };\n}\n\nexport async function writeVectorizationStatusLedger(pmRoot: string, entries: Record<string, string>): Promise<void> {\n const normalizedEntries = normalizeVectorizationLedgerEntries(entries);\n const ledgerPath = path.join(pmRoot, VECTORIZATION_STATUS_LEDGER_PATH);\n const serialized = `${JSON.stringify(\n {\n version: 1,\n generated_at: nowIso(),\n items: Object.entries(normalizedEntries).map(([id, updated_at]) => ({\n id,\n updated_at,\n })),\n },\n null,\n 2,\n )}\\n`;\n await writeFileAtomic(ledgerPath, serialized);\n}\n\nfunction buildVectorPayload(item: ItemFrontMatter): Record<string, unknown> {\n return {\n id: item.id,\n type: item.type,\n status: item.status,\n priority: item.priority,\n updated_at: item.updated_at,\n };\n}\n\ninterface SemanticRefreshRuntimeContext {\n settings: Awaited<ReturnType<typeof readSettings>>;\n provider: EmbeddingProviderConfig;\n vectorStore: VectorStoreConfig;\n}\n\ninterface SemanticRefreshWorkload {\n documents: Array<{ id: string; document: ItemDocument }>;\n missingIds: string[];\n skippedIds: string[];\n warnings: string[];\n}\n\ninterface SemanticRefreshOperationResult {\n refreshed: string[];\n skipped: string[];\n warnings: string[];\n}\n\nfunction buildSkippedSemanticRefreshResult(itemIds: string[], warning: string): SemanticMutationRefreshResult {\n return {\n refreshed: [],\n skipped: itemIds,\n warnings: [warning],\n };\n}\n\nasync function resolveSemanticRefreshRuntimeContext(\n pmRoot: string,\n normalizedItemIds: string[],\n options: SemanticRefreshOptions,\n): Promise<SemanticRefreshRuntimeContext | SemanticMutationRefreshResult> {\n if (!options.settings && !(await pathExists(getSettingsPath(pmRoot)))) {\n return buildSkippedSemanticRefreshResult(normalizedItemIds, \"search_semantic_refresh_skipped:settings_not_initialized\");\n }\n\n let settings: Awaited<ReturnType<typeof readSettings>>;\n try {\n settings = options.settings ?? (await readSettings(pmRoot));\n } catch (error: unknown) {\n return buildSkippedSemanticRefreshResult(\n normalizedItemIds,\n `search_semantic_refresh_skipped:settings_read_failed:${toErrorMessage(error)}`,\n );\n }\n const effectiveSettings = options.apply_runtime_defaults\n ? resolveSettingsWithSemanticRuntimeDefaults(settings).settings\n : settings;\n\n const provider = resolveEmbeddingProviders(effectiveSettings).active;\n if (!provider) {\n return buildSkippedSemanticRefreshResult(normalizedItemIds, \"search_semantic_refresh_skipped:provider_unconfigured\");\n }\n const vectorStore = resolveVectorStores(effectiveSettings).active;\n if (!vectorStore) {\n return buildSkippedSemanticRefreshResult(normalizedItemIds, \"search_semantic_refresh_skipped:vector_store_unconfigured\");\n }\n\n return {\n settings: effectiveSettings,\n provider,\n vectorStore,\n };\n}\n\nasync function collectSemanticRefreshWorkload(\n pmRoot: string,\n idPrefix: string,\n preferredFormat: \"toon\" | \"json_markdown\",\n normalizedItemIds: string[],\n typeToFolder: Record<string, string>,\n schema: Awaited<ReturnType<typeof readSettings>>[\"schema\"],\n): Promise<SemanticRefreshWorkload> {\n const warnings: string[] = [];\n const skipped = new Set<string>();\n const missing = new Set<string>();\n const documents: Array<{ id: string; document: ItemDocument }> = [];\n\n for (const itemId of normalizedItemIds) {\n const located = await locateItem(pmRoot, itemId, idPrefix, preferredFormat, typeToFolder);\n if (!located) {\n missing.add(itemId);\n continue;\n }\n\n try {\n const loaded = await readLocatedItem(located, { schema });\n documents.push({\n id: loaded.document.metadata.id,\n document: loaded.document,\n });\n } catch (error: unknown) {\n skipped.add(located.id);\n warnings.push(`search_semantic_refresh_item_read_failed:${located.id}:${toErrorMessage(error)}`);\n }\n }\n\n documents.sort((left, right) => left.id.localeCompare(right.id));\n return {\n documents,\n missingIds: toUniqueSorted(missing),\n skippedIds: toUniqueSorted(skipped),\n warnings,\n };\n}\n\nasync function refreshLocatedSemanticVectors(\n settings: Awaited<ReturnType<typeof readSettings>>,\n provider: EmbeddingProviderConfig,\n vectorStore: VectorStoreConfig,\n documents: Array<{ id: string; document: ItemDocument }>,\n): Promise<SemanticRefreshOperationResult> {\n if (documents.length === 0) {\n return { refreshed: [], skipped: [], warnings: [] };\n }\n\n try {\n const corpusInputs = documents.map((entry) =>\n buildSemanticCorpusInput(entry.document, {\n providerName: provider.name,\n }),\n );\n const embeddingResult = await executeEmbeddingBatchesWithRetry(provider, settings, corpusInputs);\n await executeVectorUpsert(\n vectorStore,\n documents.map((entry, index) => ({\n id: entry.id,\n vector: embeddingResult.vectors[index],\n payload: buildVectorPayload(entry.document.metadata),\n })),\n );\n return {\n refreshed: documents.map((entry) => entry.id),\n skipped: [],\n warnings: embeddingResult.warnings,\n };\n } catch (error: unknown) {\n return {\n refreshed: [],\n skipped: documents.map((entry) => entry.id),\n warnings: [`search_semantic_refresh_failed:${toErrorMessage(error)}`],\n };\n }\n}\n\nasync function pruneMissingSemanticVectors(\n vectorStore: VectorStoreConfig,\n missingIds: string[],\n): Promise<SemanticRefreshOperationResult> {\n if (missingIds.length === 0) {\n return { refreshed: [], skipped: [], warnings: [] };\n }\n try {\n await executeVectorDelete(vectorStore, missingIds);\n return {\n refreshed: [],\n skipped: [],\n warnings: [],\n };\n } catch (error: unknown) {\n return {\n refreshed: [],\n skipped: missingIds,\n warnings: [`search_semantic_refresh_delete_failed:${toErrorMessage(error)}`],\n };\n }\n}\n\nexport async function invalidateSearchCacheArtifacts(pmRoot: string): Promise<SearchCacheInvalidationResult> {\n const invalidated: string[] = [];\n const warnings: string[] = [];\n\n for (const relativePath of SEARCH_CACHE_ARTIFACT_PATHS) {\n const artifactPath = path.join(pmRoot, relativePath);\n try {\n if (!(await pathExists(artifactPath))) {\n continue;\n }\n await removeFileIfExists(artifactPath);\n invalidated.push(relativePath);\n } catch (error: unknown) {\n warnings.push(formatInvalidationWarning(relativePath, error));\n }\n }\n\n return {\n invalidated,\n warnings,\n };\n}\n\nexport async function refreshSemanticEmbeddingsForMutatedItems(\n pmRoot: string,\n itemIds: string[],\n options: SemanticRefreshOptions = {},\n): Promise<SemanticMutationRefreshResult> {\n const normalizedItemIds = toUniqueSorted(itemIds);\n if (normalizedItemIds.length === 0) {\n return {\n refreshed: [],\n skipped: [],\n warnings: [],\n };\n }\n\n const runtimeContext = await resolveSemanticRefreshRuntimeContext(pmRoot, normalizedItemIds, options);\n if (!(\"settings\" in runtimeContext)) {\n return runtimeContext;\n }\n const typeRegistry = resolveItemTypeRegistry(runtimeContext.settings, getActiveExtensionRegistrations());\n const workload = await collectSemanticRefreshWorkload(\n pmRoot,\n runtimeContext.settings.id_prefix,\n runtimeContext.settings.item_format,\n normalizedItemIds,\n typeRegistry.type_to_folder,\n runtimeContext.settings.schema,\n );\n const refreshedResult = await refreshLocatedSemanticVectors(\n runtimeContext.settings,\n runtimeContext.provider,\n runtimeContext.vectorStore,\n workload.documents,\n );\n const pruneResult = await pruneMissingSemanticVectors(runtimeContext.vectorStore, workload.missingIds);\n const refreshedIdSet = new Set(refreshedResult.refreshed);\n const refreshedEntries = Object.fromEntries(\n workload.documents\n .filter((entry) => refreshedIdSet.has(entry.id))\n .map((entry) => [entry.id, entry.document.metadata.updated_at]),\n );\n const ledgerWarnings: string[] = [];\n if (Object.keys(refreshedEntries).length > 0 || workload.missingIds.length > 0) {\n const ledgerRead = await readVectorizationStatusLedger(pmRoot);\n const nextEntries = {\n ...ledgerRead.entries,\n ...normalizeVectorizationLedgerEntries(refreshedEntries),\n };\n for (const missingId of workload.missingIds) {\n delete nextEntries[missingId];\n }\n try {\n await writeVectorizationStatusLedger(pmRoot, nextEntries);\n } catch (error: unknown) {\n ledgerWarnings.push(`search_vectorization_status_ledger_write_failed:${toErrorMessage(error)}`);\n }\n ledgerWarnings.push(...ledgerRead.warnings);\n }\n\n return {\n refreshed: toUniqueSorted([...refreshedResult.refreshed, ...pruneResult.refreshed]),\n skipped: toUniqueSorted([...workload.skippedIds, ...refreshedResult.skipped, ...pruneResult.skipped]),\n warnings: [...workload.warnings, ...refreshedResult.warnings, ...pruneResult.warnings, ...ledgerWarnings],\n };\n}\n\nexport async function refreshSearchArtifactsForMutation(\n pmRoot: string,\n itemIds: string[],\n): Promise<SearchMutationArtifactRefreshResult> {\n const invalidation = await invalidateSearchCacheArtifacts(pmRoot);\n const normalizedItemIds = toUniqueSorted(itemIds);\n if (normalizedItemIds.length === 0) {\n return {\n invalidated: invalidation.invalidated,\n refreshed: [],\n skipped: [],\n warnings: invalidation.warnings,\n };\n }\n\n if (!(await pathExists(getSettingsPath(pmRoot)))) {\n const semanticRefresh = await refreshSemanticEmbeddingsForMutatedItems(pmRoot, normalizedItemIds);\n return {\n invalidated: invalidation.invalidated,\n refreshed: semanticRefresh.refreshed,\n skipped: semanticRefresh.skipped,\n warnings: [...invalidation.warnings, ...semanticRefresh.warnings],\n };\n }\n\n let settings: Awaited<ReturnType<typeof readSettings>>;\n try {\n settings = await readSettings(pmRoot);\n } catch (error: unknown) {\n return {\n invalidated: invalidation.invalidated,\n refreshed: [],\n skipped: normalizedItemIds,\n warnings: [\n ...invalidation.warnings,\n `search_semantic_refresh_skipped:settings_read_failed:${toErrorMessage(error)}`,\n ],\n };\n }\n\n if (settings.search.mutation_refresh_policy === \"cache_only\") {\n return {\n invalidated: invalidation.invalidated,\n refreshed: [],\n skipped: normalizedItemIds,\n warnings: invalidation.warnings,\n };\n }\n\n const semanticRefresh = await refreshSemanticEmbeddingsForMutatedItems(pmRoot, normalizedItemIds, {\n settings,\n apply_runtime_defaults: settings.search.mutation_refresh_policy === \"semantic_auto\",\n });\n return {\n invalidated: invalidation.invalidated,\n refreshed: semanticRefresh.refreshed,\n skipped: semanticRefresh.skipped,\n warnings: [...invalidation.warnings, ...semanticRefresh.warnings],\n };\n}\n", "import type { PmSettings } from \"../../types/index.js\";\nimport { executeEmbeddingRequest } from \"./providers.js\";\nimport type { EmbeddingProviderConfig } from \"./providers.js\";\nimport { toErrorMessage } from \"../shared/primitives.js\";\nimport {\n DEFAULT_SEMANTIC_CORPUS_INPUT_MAX_CHARACTERS,\n OLLAMA_SEMANTIC_CORPUS_INPUT_MAX_CHARACTERS,\n SEMANTIC_CORPUS_TRUNCATION_SUFFIX,\n} from \"./corpus.js\";\n\nexport interface EmbeddingBatchExecutionResult {\n vectors: number[][];\n warnings: string[];\n}\n\nexport interface EmbeddingBatchProgressEvent {\n batch_index: number;\n batch_total: number;\n batch_size: number;\n completed_inputs: number;\n total_inputs: number;\n attempt?: number;\n phase: \"start\" | \"complete\";\n}\n\nexport interface EmbeddingBatchExecutionOptions {\n onProgress?: (event: EmbeddingBatchProgressEvent) => void;\n}\n\ninterface EmbeddingBatchRuntime {\n batchSize: number;\n timeoutMs: number;\n maxRetries: number;\n maxBatchInputCharacters: number;\n maxInputCharacters: number;\n}\n\nfunction resolveBatchRuntime(settings: PmSettings): EmbeddingBatchRuntime {\n const batchSizeCandidate = settings.search.embedding_batch_size;\n const timeoutMsCandidate = settings.search.embedding_timeout_ms;\n const maxRetriesCandidate = settings.search.scanner_max_batch_retries;\n const batchSize = Number.isFinite(batchSizeCandidate) && batchSizeCandidate > 0 ? Math.floor(batchSizeCandidate) : 1;\n const timeoutMs =\n Number.isFinite(timeoutMsCandidate) && timeoutMsCandidate > 0 ? Math.floor(timeoutMsCandidate) : 30_000;\n const maxRetries = Number.isFinite(maxRetriesCandidate) && maxRetriesCandidate >= 0 ? Math.floor(maxRetriesCandidate) : 0;\n return {\n batchSize,\n timeoutMs,\n maxRetries,\n maxBatchInputCharacters: Number.POSITIVE_INFINITY,\n maxInputCharacters: DEFAULT_SEMANTIC_CORPUS_INPUT_MAX_CHARACTERS,\n };\n}\n\nfunction createBatches(inputs: string[], batchSize: number, maxBatchInputCharacters: number): string[][] {\n const batches: string[][] = [];\n let currentBatch: string[] = [];\n let currentCharacters = 0;\n for (const input of inputs) {\n const wouldExceedCount = currentBatch.length >= batchSize;\n const wouldExceedCharacters =\n currentBatch.length > 0 &&\n Number.isFinite(maxBatchInputCharacters) &&\n currentCharacters + input.length > maxBatchInputCharacters;\n if (wouldExceedCount || wouldExceedCharacters) {\n batches.push(currentBatch);\n currentBatch = [];\n currentCharacters = 0;\n }\n currentBatch.push(input);\n currentCharacters += input.length;\n }\n batches.push(currentBatch);\n return batches;\n}\n\nfunction resolveProviderBatchRuntime(provider: EmbeddingProviderConfig, runtime: EmbeddingBatchRuntime): EmbeddingBatchRuntime {\n if (provider.name !== \"ollama\") {\n return runtime;\n }\n return {\n ...runtime,\n maxBatchInputCharacters: OLLAMA_SEMANTIC_CORPUS_INPUT_MAX_CHARACTERS,\n maxInputCharacters: OLLAMA_SEMANTIC_CORPUS_INPUT_MAX_CHARACTERS,\n };\n}\n\nfunction truncateInputForRuntime(input: string, maxInputCharacters: number): string {\n if (!Number.isFinite(maxInputCharacters) || maxInputCharacters <= 0 || input.length <= maxInputCharacters) {\n return input;\n }\n const keepLength = Math.max(0, maxInputCharacters - SEMANTIC_CORPUS_TRUNCATION_SUFFIX.length);\n return `${input.slice(0, keepLength)}${SEMANTIC_CORPUS_TRUNCATION_SUFFIX}`.slice(0, maxInputCharacters);\n}\n\nfunction isEmbeddingTimeoutError(error: unknown): boolean {\n const message = toErrorMessage(error).toLowerCase();\n return message.includes(\"timed out\") || message.includes(\"timeout\");\n}\n\nfunction buildEmbeddingFailureMessage(\n provider: EmbeddingProviderConfig,\n batchLabel: string,\n batchSize: number,\n timeoutMs: number,\n attempts: number,\n error: unknown,\n): string {\n const base = `Embedding batch ${batchLabel} failed after ${attempts} attempt(s): ${toErrorMessage(error)}`;\n const details = `provider=${provider.name} model=${provider.model} batch_size=${batchSize} timeout_ms=${timeoutMs}`;\n if (!isEmbeddingTimeoutError(error)) {\n return `${base} (${details})`;\n }\n return `${base} (${details}; guidance=check provider availability or lower search.embedding_batch_size, raise search.embedding_timeout_ms, or run keyword search while semantic indexing catches up)`;\n}\n\nasync function executeBatchWithAdaptiveSplit(\n provider: EmbeddingProviderConfig,\n batch: string[],\n batchLabel: string,\n timeoutMs: number,\n maxRetries: number,\n warnings: string[],\n): Promise<number[][]> {\n let lastError: unknown = null;\n for (let attempt = 0; attempt <= maxRetries; attempt += 1) {\n try {\n const batchVectors = await executeEmbeddingRequest(provider, batch, { timeout_ms: timeoutMs });\n if (attempt > 0) {\n warnings.push(\n `search_embedding_batch_retry_succeeded:batch=${batchLabel}:attempt=${attempt + 1}:size=${batch.length}`,\n );\n }\n return batchVectors;\n } catch (error: unknown) {\n lastError = error;\n if (isEmbeddingTimeoutError(error) && batch.length > 1) {\n const midpoint = Math.ceil(batch.length / 2);\n const left = batch.slice(0, midpoint);\n const right = batch.slice(midpoint);\n warnings.push(\n `search_embedding_batch_split_after_timeout:batch=${batchLabel}:size=${batch.length}:parts=${left.length}|${right.length}`,\n );\n return [\n ...(await executeBatchWithAdaptiveSplit(provider, left, `${batchLabel}.1`, timeoutMs, maxRetries, warnings)),\n ...(await executeBatchWithAdaptiveSplit(provider, right, `${batchLabel}.2`, timeoutMs, maxRetries, warnings)),\n ];\n }\n if (attempt < maxRetries) {\n const delayMs = Math.min(1000 * 2 ** attempt, 8000);\n await new Promise((resolve) => setTimeout(resolve, delayMs));\n }\n }\n }\n throw new Error(buildEmbeddingFailureMessage(provider, batchLabel, batch.length, timeoutMs, maxRetries + 1, lastError));\n}\n\nexport async function executeEmbeddingBatchesWithRetry(\n provider: EmbeddingProviderConfig,\n settings: PmSettings,\n inputs: string[],\n options: EmbeddingBatchExecutionOptions = {},\n): Promise<EmbeddingBatchExecutionResult> {\n if (inputs.length === 0) {\n return {\n vectors: [],\n warnings: [],\n };\n }\n const runtime = resolveProviderBatchRuntime(provider, resolveBatchRuntime(settings));\n const warnings: string[] = [];\n let truncatedInputCount = 0;\n const normalizedInputs = inputs.map((input) => {\n const normalized = truncateInputForRuntime(input, runtime.maxInputCharacters);\n if (normalized.length < input.length) {\n truncatedInputCount += 1;\n }\n return normalized;\n });\n if (truncatedInputCount > 0) {\n warnings.push(`search_embedding_input_truncated:count=${truncatedInputCount}:max_characters=${runtime.maxInputCharacters}`);\n }\n const batches = createBatches(normalizedInputs, runtime.batchSize, runtime.maxBatchInputCharacters);\n const vectors: number[][] = [];\n let completedInputs = 0;\n for (let batchIndex = 0; batchIndex < batches.length; batchIndex += 1) {\n const batch = batches[batchIndex];\n options.onProgress?.({\n batch_index: batchIndex + 1,\n batch_total: batches.length,\n batch_size: batch.length,\n completed_inputs: completedInputs,\n total_inputs: normalizedInputs.length,\n phase: \"start\",\n });\n vectors.push(\n ...(await executeBatchWithAdaptiveSplit(\n provider,\n batch,\n String(batchIndex + 1),\n runtime.timeoutMs,\n runtime.maxRetries,\n warnings,\n )),\n );\n completedInputs += batch.length;\n options.onProgress?.({\n batch_index: batchIndex + 1,\n batch_total: batches.length,\n batch_size: batch.length,\n completed_inputs: completedInputs,\n total_inputs: normalizedInputs.length,\n phase: \"complete\",\n });\n }\n return {\n vectors,\n warnings,\n };\n}\n"],
|
|
5
|
+
"mappings": "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ACd,iBAAiB;CAClB;AAEM,IAAM,aAAa;AACnB,IAAM,oBAAoB;AAE1B,IAAM,2BAA2B;EACtC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGK,IAAM,2BAA2B;EACtC;EACA;EACA;EACA;EACA;EACA;;AAGK,IAAM,sBAAsB,CAAC,GAAG,0BAA0B,GAAG,wBAAwB;AAErF,IAAM,iBAAkD;EAC7D,MAAM;EACN,SAAS;EACT,MAAM;EACN,OAAO;EACP,OAAO;EACP,UAAU;EACV,OAAO;EACP,UAAU;EACV,WAAW;EACX,SAAS;EACT,MAAM;;AAGD,IAAM,yBAAgD;EAC3D;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAKK,IAAM,6BAAkG;EAC7G,SAAS;IACP,uBAAuB;IACvB,qBAAqB;IACrB,0BAA0B;IAC1B,kBAAkB;IAClB,kBAAkB;IAClB,+BAA+B;;EAEjC,SAAS;IACP,uBAAuB;IACvB,qBAAqB;IACrB,0BAA0B;IAC1B,kBAAkB;IAClB,kBAAkB;IAClB,+BAA+B;;EAEjC,QAAQ;IACN,uBAAuB;IACvB,qBAAqB;IACrB,0BAA0B;IAC1B,kBAAkB;IAClB,kBAAkB;IAClB,+BAA+B;;;AAI5B,IAAM,iDAAiD;EAC5D;EACA;EACA;EACA;;AAGK,IAAM,wDAAwD;EACnE,gBAAgB,CAAC,4CAA4C,gBAAgB;EAC7E,YAAY,CAAC,uCAAuC,qCAAqC,+BAA+B,gBAAgB;EACxI,eAAe,CAAC,uBAAuB,kBAAkB,6BAA6B;;AAGxF,SAAS,mBAAsB,QAAgC;AAC7D,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B,uCAC5B,WAAW,yBACX,oBAAoB;AAGtB,SAAO;IACL;IACA,QAAQ,UAAU,OAAO,SAAS,IAAI,SAAS;IAC/C,SAAS,QAAQ,SAAS,IAAI,UAAU;IACxC,wBAAwB,0BACpB,4BAA4B,WAAW,sBAAsB,IAC7D;IACJ,6BAA6B,+BACzB,4BAA4B,WAAW,2BAA2B,IAClE;IACJ,SAAS,aAAa,oBAAoB;IAC1C,yBAAyB,2BAA2B,wBAAwB;;AAEhF;;;;;;;;;;ACnJO,IAAM,iCAAiC;EAC5C;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGK,IAAM,sCAAsC,CAAC,OAAO,WAAW,QAAQ,YAAY,QAAQ,QAAQ,KAAK;AAI/G,IAAM,6BAA6B;EACjC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF,IAAM,6BAA6B;EACjC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;AAGF,IAAM,gCAAwD;EAC5D,gBAAgB;EAChB,cAAc;EACd,qBAAqB;EACrB,mBAAmB;EACnB,UAAU;EACV,uBAAuB;EACvB,qBAAqB;EACrB,IAAI;EACJ,uBAAuB;EACvB,qBAAqB;EACrB,MAAM;EACN,WAAW;EACX,SAAS;EACT,cAAc;EACd,YAAY;EACZ,kBAAkB;EAClB,gBAAgB;EAChB,gBAAgB;EACh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",
|
|
6
|
+
"names": ["path", "pathExists", "path", "fs", "path", "path", "fs", "path", "normalizedCommand", "path", "path", "isPlainObject", "crypto", "normalizeStringList", "_anyOf", "rest", "path", "path", "next", "fs", "path", "path", "fs", "fs", "path", "fs", "isErrno", "path", "crypto", "path", "crypto", "path", "fs", "path", "path", "fs", "stat", "fs", "path", "fs", "appendWarning", "fs", "path", "loaded", "path", "resolve", "path", "semanticRefresh"]
|
|
7
|
+
}
|