@unbrained/pm-cli 2026.5.6 → 2026.5.10
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/.agents/pm/extensions/.managed-extensions.json +2 -2
- package/.agents/pm/extensions/beads/runtime.js +4 -4
- package/.agents/pm/extensions/beads/runtime.ts +5 -5
- package/.agents/pm/extensions/todos/runtime.js +7 -7
- package/.agents/pm/extensions/todos/runtime.ts +10 -10
- package/.agents/skills/HARNESS_COMPATIBILITY.md +45 -0
- package/.agents/skills/README.md +21 -0
- package/.agents/skills/pm-developer/SKILL.md +73 -0
- package/.agents/skills/pm-developer/references/COMMAND_PLAYBOOK.md +48 -0
- package/.agents/skills/pm-developer/references/PROMPTS.md +17 -0
- package/.agents/skills/pm-extensions/SKILL.md +57 -0
- package/.agents/skills/pm-extensions/references/LIFECYCLE.md +40 -0
- package/.agents/skills/pm-extensions/references/TROUBLESHOOTING.md +25 -0
- package/.agents/skills/pm-sdk/SKILL.md +50 -0
- package/.agents/skills/pm-sdk/references/INTEGRATION_CHECKLIST.md +31 -0
- package/.agents/skills/pm-sdk/references/PROMPTS.md +13 -0
- package/.agents/skills/pm-user/SKILL.md +59 -0
- package/.agents/skills/pm-user/references/PROMPTS.md +17 -0
- package/.agents/skills/pm-user/references/WORKFLOWS.md +35 -0
- package/.claude-plugin/marketplace.json +38 -0
- package/.pi/README.md +26 -0
- package/.pi/extensions/pm-cli/index.js +147 -0
- package/.pi/prompts/pm-workflow.md +5 -0
- package/.pi/skills/pm-native/SKILL.md +40 -0
- package/.pi/skills/pm-release/SKILL.md +35 -0
- package/AGENTS.md +1 -1
- package/CHANGELOG.md +6 -0
- package/PRD.md +16 -16
- package/README.md +22 -4
- package/dist/cli/commands/claim.js +6 -6
- package/dist/cli/commands/claim.js.map +1 -1
- package/dist/cli/commands/close.js +9 -9
- package/dist/cli/commands/close.js.map +1 -1
- package/dist/cli/commands/comments.d.ts +2 -0
- package/dist/cli/commands/comments.js +57 -8
- package/dist/cli/commands/comments.js.map +1 -1
- package/dist/cli/commands/completion.js +33 -4
- package/dist/cli/commands/completion.js.map +1 -1
- package/dist/cli/commands/config.js +6 -3
- package/dist/cli/commands/config.js.map +1 -1
- package/dist/cli/commands/contracts.js +4 -1
- package/dist/cli/commands/contracts.js.map +1 -1
- package/dist/cli/commands/create.d.ts +2 -2
- package/dist/cli/commands/create.js +4 -4
- package/dist/cli/commands/create.js.map +1 -1
- package/dist/cli/commands/docs.js +4 -4
- package/dist/cli/commands/docs.js.map +1 -1
- package/dist/cli/commands/files.js +10 -10
- package/dist/cli/commands/files.js.map +1 -1
- package/dist/cli/commands/get.js +5 -5
- package/dist/cli/commands/get.js.map +1 -1
- package/dist/cli/commands/guide.d.ts +55 -0
- package/dist/cli/commands/guide.js +260 -0
- package/dist/cli/commands/guide.js.map +1 -0
- package/dist/cli/commands/health.js +1 -1
- package/dist/cli/commands/health.js.map +1 -1
- package/dist/cli/commands/history.js +30 -10
- package/dist/cli/commands/history.js.map +1 -1
- package/dist/cli/commands/index.d.ts +1 -0
- package/dist/cli/commands/index.js +1 -0
- package/dist/cli/commands/index.js.map +1 -1
- package/dist/cli/commands/learnings.js +3 -3
- package/dist/cli/commands/learnings.js.map +1 -1
- package/dist/cli/commands/notes.js +3 -3
- package/dist/cli/commands/notes.js.map +1 -1
- package/dist/cli/commands/reindex.js +18 -32
- package/dist/cli/commands/reindex.js.map +1 -1
- package/dist/cli/commands/restore.d.ts +2 -2
- package/dist/cli/commands/restore.js +44 -24
- package/dist/cli/commands/restore.js.map +1 -1
- package/dist/cli/commands/search.d.ts +2 -0
- package/dist/cli/commands/search.js +30 -21
- package/dist/cli/commands/search.js.map +1 -1
- package/dist/cli/commands/test-all.d.ts +2 -0
- package/dist/cli/commands/test-all.js +2 -0
- package/dist/cli/commands/test-all.js.map +1 -1
- package/dist/cli/commands/test.d.ts +1 -0
- package/dist/cli/commands/test.js +4 -3
- package/dist/cli/commands/test.js.map +1 -1
- package/dist/cli/commands/update.js +118 -118
- package/dist/cli/commands/update.js.map +1 -1
- package/dist/cli/commands/validate.js +1 -1
- package/dist/cli/commands/validate.js.map +1 -1
- package/dist/cli/guide-topics.d.ts +25 -0
- package/dist/cli/guide-topics.js +283 -0
- package/dist/cli/guide-topics.js.map +1 -0
- package/dist/cli/help-content.js +25 -1
- package/dist/cli/help-content.js.map +1 -1
- package/dist/cli/register-list-query.js +38 -1
- package/dist/cli/register-list-query.js.map +1 -1
- package/dist/cli/register-mutation.js +17 -4
- package/dist/cli/register-mutation.js.map +1 -1
- package/dist/cli/register-setup.js +1 -1
- package/dist/cli/register-setup.js.map +1 -1
- package/dist/core/history/history.js +32 -11
- package/dist/core/history/history.js.map +1 -1
- package/dist/core/item/item-format.d.ts +2 -2
- package/dist/core/item/item-format.js +16 -16
- package/dist/core/item/item-format.js.map +1 -1
- package/dist/core/schema/runtime-field-filters.js +1 -1
- package/dist/core/schema/runtime-field-filters.js.map +1 -1
- package/dist/core/schema/runtime-field-values.js +2 -2
- package/dist/core/schema/runtime-field-values.js.map +1 -1
- package/dist/core/schema/runtime-schema.d.ts +1 -1
- package/dist/core/schema/runtime-schema.js +3 -3
- package/dist/core/schema/runtime-schema.js.map +1 -1
- package/dist/core/search/cache.js +7 -21
- package/dist/core/search/cache.js.map +1 -1
- package/dist/core/search/corpus.d.ts +13 -0
- package/dist/core/search/corpus.js +74 -0
- package/dist/core/search/corpus.js.map +1 -0
- package/dist/core/search/embedding-batches.js +90 -30
- package/dist/core/search/embedding-batches.js.map +1 -1
- package/dist/core/sentry/instrument.d.ts +3 -1
- package/dist/core/sentry/instrument.js +93 -9
- package/dist/core/sentry/instrument.js.map +1 -1
- package/dist/core/shared/constants.d.ts +1 -1
- package/dist/core/shared/constants.js +1 -1
- package/dist/core/shared/constants.js.map +1 -1
- package/dist/core/store/front-matter-cache.d.ts +1 -1
- package/dist/core/store/front-matter-cache.js +13 -13
- package/dist/core/store/front-matter-cache.js.map +1 -1
- package/dist/core/store/item-format-migration.js +5 -2
- package/dist/core/store/item-format-migration.js.map +1 -1
- package/dist/core/store/item-store.js +16 -15
- package/dist/core/store/item-store.js.map +1 -1
- package/dist/core/store/paths.js +1 -1
- package/dist/core/store/paths.js.map +1 -1
- package/dist/core/store/settings.js +6 -1
- package/dist/core/store/settings.js.map +1 -1
- package/dist/core/test/item-test-run-tracking.js +2 -2
- package/dist/core/test/item-test-run-tracking.js.map +1 -1
- package/dist/mcp/server.d.ts +2 -0
- package/dist/mcp/server.js +405 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/pi/native.d.ts +5 -0
- package/dist/pi/native.js +183 -0
- package/dist/pi/native.js.map +1 -0
- package/dist/sdk/cli-contracts.d.ts +3 -1
- package/dist/sdk/cli-contracts.js +67 -2
- package/dist/sdk/cli-contracts.js.map +1 -1
- package/dist/types.d.ts +10 -2
- package/dist/types.js.map +1 -1
- package/docs/AGENT_GUIDE.md +15 -0
- package/docs/ARCHITECTURE.md +2 -2
- package/docs/CLAUDE_CODE_PLUGIN.md +186 -0
- package/docs/CODEX_PLUGIN.md +33 -0
- package/docs/COMMANDS.md +6 -2
- package/docs/CONFIGURATION.md +2 -8
- package/docs/EXTENSIONS.md +1 -0
- package/docs/PI_PACKAGE.md +56 -0
- package/docs/QUICKSTART.md +1 -0
- package/docs/README.md +30 -1
- package/docs/RELEASING.md +4 -2
- package/docs/SDK.md +3 -2
- package/marketplace.json +34 -0
- package/package.json +38 -4
- package/plugins/pm-cli-claude/.claude-plugin/plugin.json +23 -0
- package/plugins/pm-cli-claude/.mcp.json +12 -0
- package/plugins/pm-cli-claude/README.md +184 -0
- package/plugins/pm-cli-claude/agents/pm-coordinator.md +48 -0
- package/plugins/pm-cli-claude/commands/pm-audit.md +39 -0
- package/plugins/pm-cli-claude/commands/pm-calendar.md +41 -0
- package/plugins/pm-cli-claude/commands/pm-close-task.md +20 -0
- package/plugins/pm-cli-claude/commands/pm-developer.md +38 -0
- package/plugins/pm-cli-claude/commands/pm-init.md +44 -0
- package/plugins/pm-cli-claude/commands/pm-list.md +39 -0
- package/plugins/pm-cli-claude/commands/pm-new.md +36 -0
- package/plugins/pm-cli-claude/commands/pm-planner.md +51 -0
- package/plugins/pm-cli-claude/commands/pm-release.md +41 -0
- package/plugins/pm-cli-claude/commands/pm-search.md +21 -0
- package/plugins/pm-cli-claude/commands/pm-start-task.md +27 -0
- package/plugins/pm-cli-claude/commands/pm-status.md +15 -0
- package/plugins/pm-cli-claude/commands/pm-triage.md +35 -0
- package/plugins/pm-cli-claude/commands/pm-workflow.md +49 -0
- package/plugins/pm-cli-claude/hooks/hooks.json +17 -0
- package/plugins/pm-cli-claude/hooks/session-start.mjs +55 -0
- package/plugins/pm-cli-claude/scripts/pm-mcp-server.mjs +60 -0
- package/plugins/pm-cli-claude/skills/pm-audit/SKILL.md +88 -0
- package/plugins/pm-cli-claude/skills/pm-developer/SKILL.md +116 -0
- package/plugins/pm-cli-claude/skills/pm-planner/SKILL.md +118 -0
- package/plugins/pm-cli-claude/skills/pm-release/SKILL.md +83 -0
- package/plugins/pm-cli-claude/skills/pm-workflow/SKILL.md +148 -0
- package/plugins/pm-cli-codex/.codex-plugin/plugin.json +45 -0
- package/plugins/pm-cli-codex/.mcp.json +14 -0
- package/plugins/pm-cli-codex/README.md +30 -0
- package/plugins/pm-cli-codex/assets/pm-cli-small.svg +4 -0
- package/plugins/pm-cli-codex/commands/pm-audit.md +8 -0
- package/plugins/pm-cli-codex/commands/pm-close-task.md +9 -0
- package/plugins/pm-cli-codex/commands/pm-start-task.md +9 -0
- package/plugins/pm-cli-codex/scripts/pm-mcp-server.mjs +54 -0
- package/plugins/pm-cli-codex/skills/pm-auditor/SKILL.md +21 -0
- package/plugins/pm-cli-codex/skills/pm-auditor/agents/openai.yaml +6 -0
- package/plugins/pm-cli-codex/skills/pm-native/SKILL.md +57 -0
- package/plugins/pm-cli-codex/skills/pm-native/agents/openai.yaml +6 -0
- package/plugins/pm-cli-codex/skills/pm-release/SKILL.md +19 -0
- package/plugins/pm-cli-codex/skills/pm-release/agents/openai.yaml +6 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"health.js","sourceRoot":"/","sources":["cli/commands/health.ts"],"names":[],"mappings":"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","sourcesContent":["import fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { resolveItemTypeRegistry } from \"../../core/item/type-registry.js\";\nimport { pathExists, readFileIfExists } from \"../../core/fs/fs-utils.js\";\nimport { activateExtensions, getActiveExtensionRegistrations, loadExtensions, runActiveOnReadHooks } from \"../../core/extensions/index.js\";\nimport {\n EXTENSION_CAPABILITY_CONTRACT,\n KNOWN_EXTENSION_CAPABILITIES,\n parseLegacyExtensionCapabilityAliasWarning,\n parseUnknownExtensionCapabilityWarning,\n type LoadedExtension,\n type UnknownExtensionCapabilityWarningDetails,\n} from \"../../core/extensions/loader.js\";\nimport { hashDocument } from \"../../core/history/history.js\";\nimport { enforceHistoryStreamPolicyForItems } from \"../../core/history/history-stream-policy.js\";\nimport {\n readVectorizationStatusLedger,\n refreshSemanticEmbeddingsForMutatedItems,\n} from \"../../core/search/cache.js\";\nimport { resolveEmbeddingProviders } from \"../../core/search/providers.js\";\nimport { resolveSettingsWithSemanticRuntimeDefaults } from \"../../core/search/semantic-defaults.js\";\nimport { resolveVectorStores } from \"../../core/search/vector-stores.js\";\nimport { EXIT_CODE, PM_CORE_REQUIRED_SUBDIRS, PM_OPTIONAL_TYPE_SUBDIRS } from \"../../core/shared/constants.js\";\nimport { findFirstMergeConflictMarker } from \"../../core/shared/conflict-markers.js\";\nimport type { GlobalOptions } from \"../../core/shared/command-types.js\";\nimport { PmCliError } from \"../../core/shared/errors.js\";\nimport { toNonEmptyStringOrUndefined } from \"../../core/shared/primitives.js\";\nimport { nowIso } from \"../../core/shared/time.js\";\nimport { parseItemDocument } from \"../../core/item/item-format.js\";\nimport { listAllFrontMatterWithBody } from \"../../core/store/item-store.js\";\nimport {\n getHistoryPath,\n getItemFormatFromPath,\n getSettingsPath,\n ITEM_FILE_EXTENSIONS,\n resolveGlobalPmRoot,\n resolvePmRoot,\n} from \"../../core/store/paths.js\";\nimport { readSettingsWithMetadata } from \"../../core/store/settings.js\";\nimport type { ItemFormat, PmSettings } from \"../../types/index.js\";\nimport { readManagedExtensionState } from \"./extension.js\";\n\ntype HealthStatus = \"ok\" | \"warn\";\ntype MigrationRuntimeStatus = \"pending\" | \"failed\" | \"applied\";\n\nexport interface HealthCheck {\n name:\n | \"settings\"\n | \"directories\"\n | \"settings_values\"\n | \"telemetry\"\n | \"extensions\"\n | \"storage\"\n | \"integrity\"\n | \"history_drift\"\n | \"vectorization\";\n status: HealthStatus;\n details: Record<string, unknown>;\n}\n\nexport interface HealthResult {\n ok: boolean;\n checks: HealthCheck[];\n warnings: string[];\n generated_at: string;\n}\n\nexport interface RunHealthOptions {\n strictDirectories?: boolean;\n checkOnly?: boolean;\n checkTelemetry?: boolean;\n noRefresh?: boolean;\n refreshVectors?: boolean;\n verboseStaleItems?: boolean;\n}\n\ninterface MigrationStatusEntry {\n layer: \"global\" | \"project\";\n name: string;\n id: string;\n status: MigrationRuntimeStatus;\n reason?: string;\n}\n\ninterface MigrationStatusSummary {\n applied: MigrationStatusEntry[];\n pending: MigrationStatusEntry[];\n failed: MigrationStatusEntry[];\n applied_count: number;\n pending_count: number;\n failed_count: number;\n}\n\ninterface ExtensionHealthTriageSummary {\n status: \"ok\" | \"warn\";\n warning_count: number;\n warning_codes: string[];\n load_failure_count: number;\n activation_failure_count: number;\n migration_failed_count: number;\n migration_pending_count: number;\n managed_state_warning_count: number;\n managed_extension_entries_count: number;\n unmanaged_loaded_extension_count: number;\n unmanaged_loaded_extensions: string[];\n unmanaged_expected_extension_count: number;\n unmanaged_expected_extensions: string[];\n unmanaged_action_required_extension_count: number;\n unmanaged_action_required_extensions: string[];\n update_health_coverage: \"full\" | \"partial\";\n update_health_partial: boolean;\n unknown_capability_count: number;\n top_warnings: string[];\n remediation: string[];\n}\n\ntype ItemWithBody = Awaited<ReturnType<typeof listAllFrontMatterWithBody>>[number];\nconst STALE_VECTORIZATION_SUMMARY_LIMIT = 25;\nconst TELEMETRY_QUEUE_RELATIVE_PATH = path.join(\"runtime\", \"telemetry\", \"events.jsonl\");\nconst TELEMETRY_STATE_RELATIVE_PATH = path.join(\"runtime\", \"telemetry\", \"state.json\");\nconst TELEMETRY_ENDPOINT_PROBE_TIMEOUT_MS = 2_500;\nconst TELEMETRY_QUEUE_HIGH_WATER_MARK = 500;\n\nfunction warningCode(value: string): string {\n const normalized = value.trim();\n const separator = normalized.indexOf(\":\");\n if (separator === -1) {\n return normalized;\n }\n return normalized.slice(0, separator);\n}\n\nfunction collectUnknownCapabilityGuidance(warnings: string[]): UnknownExtensionCapabilityWarningDetails[] {\n const seen = new Set<string>();\n const guidance: UnknownExtensionCapabilityWarningDetails[] = [];\n for (const warning of warnings) {\n const parsedDetails = (() => {\n const unknownWarning = parseUnknownExtensionCapabilityWarning(warning);\n if (unknownWarning) {\n return [unknownWarning];\n }\n return parseLegacyExtensionCapabilityAliasWarning(warning);\n })();\n for (const parsed of parsedDetails) {\n const key = `${parsed.layer}:${parsed.name}:${parsed.capability}`;\n if (seen.has(key)) {\n continue;\n }\n seen.add(key);\n guidance.push(parsed);\n }\n }\n return guidance;\n}\n\nfunction buildCapabilityContractMetadata(): {\n version: number;\n capabilities: string[];\n legacy_aliases: Record<string, string>;\n} {\n return {\n version: EXTENSION_CAPABILITY_CONTRACT.version,\n capabilities: [...EXTENSION_CAPABILITY_CONTRACT.capabilities],\n legacy_aliases: { ...EXTENSION_CAPABILITY_CONTRACT.legacy_aliases },\n };\n}\n\nfunction normalizeExtensionNameForMatch(value: string): string {\n return value.trim().toLowerCase();\n}\n\nfunction isExpectedUnmanagedExtension(name: string, directory: string): boolean {\n const normalizedName = normalizeExtensionNameForMatch(name);\n const normalizedDirectory = normalizeExtensionNameForMatch(directory);\n if (normalizedName.startsWith(\"builtin-\")) {\n return true;\n }\n return normalizedDirectory === \"beads\" || normalizedDirectory === \"todos\";\n}\n\nasync function isDirectory(targetPath: string): Promise<boolean> {\n try {\n const stats = await fs.stat(targetPath);\n return stats.isDirectory();\n } catch {\n return false;\n }\n}\n\nasync function countHistoryStreams(pmRoot: string): Promise<{ count: number; warnings: string[] }> {\n const historyDir = path.join(pmRoot, \"history\");\n if (!(await isDirectory(historyDir))) {\n return {\n count: 0,\n warnings: [],\n };\n }\n const historyFiles = (await fs.readdir(historyDir))\n .filter((entry) => entry.endsWith(\".jsonl\"))\n .sort((left, right) => left.localeCompare(right));\n\n const warnings: string[] = [];\n for (const fileName of historyFiles) {\n warnings.push(\n ...(await runActiveOnReadHooks({\n path: path.join(historyDir, fileName),\n scope: \"project\",\n })),\n );\n }\n\n return {\n count: historyFiles.length,\n warnings,\n };\n}\n\nfunction normalizeRelativePath(pmRoot: string, targetPath: string): string {\n return path.relative(pmRoot, targetPath).replaceAll(\"\\\\\", \"/\");\n}\n\nasync function listItemDocumentPaths(pmRoot: string, typeToFolder: Record<string, string>): Promise<string[]> {\n const folders = [...new Set(Object.values(typeToFolder))].sort((left, right) => left.localeCompare(right));\n const itemPaths: string[] = [];\n for (const folder of folders) {\n const directoryPath = path.join(pmRoot, folder);\n let entries: string[] = [];\n try {\n entries = await fs.readdir(directoryPath);\n } catch (error: unknown) {\n if (typeof error === \"object\" && error !== null && \"code\" in error && (error as { code?: string }).code === \"ENOENT\") {\n continue;\n }\n continue;\n }\n for (const entry of entries) {\n if (!ITEM_FILE_EXTENSIONS.some((extension) => entry.toLowerCase().endsWith(extension))) {\n continue;\n }\n itemPaths.push(path.join(directoryPath, entry));\n }\n }\n itemPaths.sort((left, right) => normalizeRelativePath(pmRoot, left).localeCompare(normalizeRelativePath(pmRoot, right)));\n return itemPaths;\n}\n\nasync function buildIntegrityCheck(\n pmRoot: string,\n typeToFolder: Record<string, string>,\n schema: PmSettings[\"schema\"],\n): Promise<{ check: HealthCheck; warnings: string[] }> {\n const itemPaths = await listItemDocumentPaths(pmRoot, typeToFolder);\n const itemUnreadable: string[] = [];\n const itemConflictMarkers: Array<{ path: string; line: number; marker: string }> = [];\n const itemParseFailures: string[] = [];\n\n for (const itemPath of itemPaths) {\n const relativePath = normalizeRelativePath(pmRoot, itemPath);\n let raw = \"\";\n try {\n raw = await fs.readFile(itemPath, \"utf8\");\n } catch {\n itemUnreadable.push(relativePath);\n continue;\n }\n const conflictMarker = findFirstMergeConflictMarker(raw);\n if (conflictMarker) {\n itemConflictMarkers.push({\n path: relativePath,\n line: conflictMarker.line,\n marker: conflictMarker.marker,\n });\n continue;\n }\n try {\n parseItemDocument(raw, { format: getItemFormatFromPath(itemPath) as ItemFormat, schema });\n } catch {\n itemParseFailures.push(relativePath);\n }\n }\n\n const historyDir = path.join(pmRoot, \"history\");\n const historyUnreadable: string[] = [];\n const historyConflictMarkers: Array<{ id: string; line: number; marker: string }> = [];\n const historyInvalidJson: Array<{ id: string; line: number }> = [];\n let historyFiles: string[] = [];\n try {\n historyFiles = (await fs.readdir(historyDir)).filter((entry) => entry.endsWith(\".jsonl\")).sort((left, right) => left.localeCompare(right));\n } catch (error: unknown) {\n if (!(typeof error === \"object\" && error !== null && \"code\" in error && (error as { code?: string }).code === \"ENOENT\")) {\n historyUnreadable.push(\"history\");\n }\n }\n for (const fileName of historyFiles) {\n const itemId = fileName.slice(0, -\".jsonl\".length);\n const historyPath = path.join(historyDir, fileName);\n let raw = \"\";\n try {\n raw = await fs.readFile(historyPath, \"utf8\");\n } catch {\n historyUnreadable.push(itemId);\n continue;\n }\n const conflictMarker = findFirstMergeConflictMarker(raw);\n if (conflictMarker) {\n historyConflictMarkers.push({\n id: itemId,\n line: conflictMarker.line,\n marker: conflictMarker.marker,\n });\n continue;\n }\n const lines = raw.split(/\\r?\\n/);\n for (let index = 0; index < lines.length; index += 1) {\n const line = lines[index]?.trim();\n if (!line) {\n continue;\n }\n try {\n JSON.parse(line);\n } catch {\n historyInvalidJson.push({\n id: itemId,\n line: index + 1,\n });\n }\n }\n }\n\n const warnings = [\n ...itemUnreadable.map((entry) => `integrity_item_unreadable:${entry}`),\n ...itemConflictMarkers.map((entry) => `integrity_item_conflict_marker:${entry.path}:L${entry.line}`),\n ...itemParseFailures.map((entry) => `integrity_item_parse_failed:${entry}`),\n ...historyUnreadable.map((entry) => `integrity_history_unreadable:${entry}`),\n ...historyConflictMarkers.map((entry) => `integrity_history_conflict_marker:${entry.id}:L${entry.line}`),\n ...historyInvalidJson.map((entry) => `integrity_history_invalid_json:${entry.id}:L${entry.line}`),\n ];\n const normalizedWarnings = [...new Set(warnings)].sort((left, right) => left.localeCompare(right));\n\n return {\n check: {\n name: \"integrity\",\n status: normalizedWarnings.length === 0 ? \"ok\" : \"warn\",\n details: {\n checked_item_files: itemPaths.length,\n checked_history_streams: historyFiles.length,\n counts: {\n item_unreadable: itemUnreadable.length,\n item_conflict_markers: itemConflictMarkers.length,\n item_parse_failures: itemParseFailures.length,\n history_unreadable: historyUnreadable.length,\n history_conflict_markers: historyConflictMarkers.length,\n history_invalid_json: historyInvalidJson.length,\n },\n item_unreadable: itemUnreadable,\n item_conflict_markers: itemConflictMarkers,\n item_parse_failures: itemParseFailures,\n history_unreadable: historyUnreadable,\n history_conflict_markers: historyConflictMarkers,\n history_invalid_json: historyInvalidJson,\n },\n },\n warnings: normalizedWarnings,\n };\n}\n\nfunction hasActivateExport(moduleRecord: Record<string, unknown>): boolean {\n if (typeof moduleRecord.activate === \"function\") {\n return true;\n }\n const defaultExport = moduleRecord.default;\n if (typeof defaultExport !== \"object\" || defaultExport === null) {\n return false;\n }\n return typeof (defaultExport as Record<string, unknown>).activate === \"function\";\n}\n\nfunction summarizeLoadedExtension(extension: LoadedExtension): Record<string, unknown> {\n const summary: Record<string, unknown> = {\n layer: extension.layer,\n directory: extension.directory,\n manifest_path: extension.manifest_path,\n name: extension.name,\n version: extension.version,\n entry: extension.entry,\n priority: extension.priority,\n entry_path: extension.entry_path,\n has_activate: hasActivateExport(extension.module as Record<string, unknown>),\n };\n if (Array.isArray(extension.capabilities)) {\n summary.capabilities = [...extension.capabilities];\n }\n return summary;\n}\n\nfunction resolveMigrationId(definition: Record<string, unknown>, fallbackIndex: number): string {\n const explicitId = toNonEmptyStringOrUndefined(definition.id);\n if (explicitId) {\n return explicitId;\n }\n return `migration-${String(fallbackIndex + 1).padStart(3, \"0\")}`;\n}\n\nfunction resolveMigrationStatus(definition: Record<string, unknown>): MigrationRuntimeStatus {\n const rawStatus = toNonEmptyStringOrUndefined(definition.status);\n const normalized = rawStatus?.toLowerCase();\n if (normalized === \"failed\") {\n return \"failed\";\n }\n if (normalized === \"applied\") {\n return \"applied\";\n }\n return \"pending\";\n}\n\nfunction resolveMigrationFailureReason(definition: Record<string, unknown>): string | undefined {\n return toNonEmptyStringOrUndefined(definition.reason) ?? toNonEmptyStringOrUndefined(definition.error) ?? toNonEmptyStringOrUndefined(definition.message);\n}\n\nfunction compareMigrationEntries(left: MigrationStatusEntry, right: MigrationStatusEntry): number {\n const byLayer = left.layer.localeCompare(right.layer);\n if (byLayer !== 0) {\n return byLayer;\n }\n const byName = left.name.localeCompare(right.name);\n if (byName !== 0) {\n return byName;\n }\n return left.id.localeCompare(right.id);\n}\n\nfunction summarizeMigrationStatuses(\n migrations: Array<{\n layer: \"global\" | \"project\";\n name: string;\n definition: Record<string, unknown>;\n }>,\n): { summary: MigrationStatusSummary; warnings: string[] } {\n const applied: MigrationStatusEntry[] = [];\n const pending: MigrationStatusEntry[] = [];\n const failed: MigrationStatusEntry[] = [];\n\n migrations.forEach((migration, index) => {\n const id = resolveMigrationId(migration.definition, index);\n const status = resolveMigrationStatus(migration.definition);\n if (status === \"applied\") {\n applied.push({\n layer: migration.layer,\n name: migration.name,\n id,\n status,\n });\n return;\n }\n if (status === \"failed\") {\n failed.push({\n layer: migration.layer,\n name: migration.name,\n id,\n status,\n reason: resolveMigrationFailureReason(migration.definition),\n });\n return;\n }\n pending.push({\n layer: migration.layer,\n name: migration.name,\n id,\n status,\n });\n });\n\n applied.sort(compareMigrationEntries);\n pending.sort(compareMigrationEntries);\n failed.sort(compareMigrationEntries);\n\n const warnings = [\n ...failed.map((entry) => `extension_migration_failed:${entry.layer}:${entry.name}:${entry.id}`),\n ...pending.map((entry) => `extension_migration_pending:${entry.layer}:${entry.name}:${entry.id}`),\n ];\n\n return {\n summary: {\n applied,\n pending,\n failed,\n applied_count: applied.length,\n pending_count: pending.length,\n failed_count: failed.length,\n },\n warnings,\n };\n}\n\nfunction buildExtensionHealthTriageSummary(\n warnings: string[],\n loadFailureCount: number,\n activationFailureCount: number,\n migrationStatus: MigrationStatusSummary,\n managedStateWarningCount: number,\n managedExtensionEntriesCount: number,\n unmanagedLoadedExtensions: string[],\n unmanagedExpectedExtensions: string[],\n unmanagedActionRequiredExtensions: string[],\n): ExtensionHealthTriageSummary {\n const normalizedWarnings = [...new Set(warnings)].sort((left, right) => left.localeCompare(right));\n const warningCodes = [...new Set(normalizedWarnings.map((value) => warningCode(value)))].sort((left, right) =>\n left.localeCompare(right),\n );\n const unknownCapabilityCount = normalizedWarnings.filter((warning) => warning.startsWith(\"extension_capability_unknown:\")).length;\n const updateHealthPartial = unmanagedActionRequiredExtensions.length > 0;\n const updateHealthCoverage = updateHealthPartial ? \"partial\" : \"full\";\n const remediation: string[] = [];\n if (loadFailureCount > 0) {\n remediation.push(\"Run pm extension --explore --project and pm extension --explore --global to inspect load failures.\");\n }\n if (activationFailureCount > 0) {\n remediation.push(\"Review checks[name=extensions].details.activation.failed in pm health --json for activation error details.\");\n }\n if (migrationStatus.failed_count > 0 || migrationStatus.pending_count > 0) {\n remediation.push(\"Resolve pending/failed extension migrations before write commands; use --force only when policy allows.\");\n }\n if (managedStateWarningCount > 0) {\n remediation.push(\"Run pm extension --manage --project and pm extension --manage --global to refresh managed-state diagnostics.\");\n }\n if (unknownCapabilityCount > 0) {\n remediation.push(\n `Unknown extension capabilities detected. Allowed capabilities: ${KNOWN_EXTENSION_CAPABILITIES.join(\", \")}. ` +\n \"Review extension_capability_unknown warning details for suggested replacements.\",\n );\n }\n if (normalizedWarnings.some((warning) => warning.startsWith(\"extension_capability_legacy_alias:\"))) {\n remediation.push(\n \"Legacy extension capability aliases were auto-remapped to canonical capabilities. \" +\n \"Update manifests to canonical names (migration/validation -> schema).\",\n );\n }\n if (normalizedWarnings.some((warning) => warning.startsWith(\"extension_command_definition_legacy_handler_alias:\"))) {\n remediation.push(\n \"Extension command definitions using legacy handler were auto-remapped. \" +\n \"Update command definitions to use run: (context) => ... for forward compatibility.\",\n );\n }\n if (updateHealthPartial) {\n remediation.push(\n \"Update-check coverage is partial because unmanaged extensions need adoption. Adopt existing installs via pm extension --manage --project/--global --fix-managed-state, pm extension --adopt-all --project/--global, or pm extension --adopt <name>.\",\n );\n } else if (unmanagedLoadedExtensions.length > 0) {\n remediation.push(\n \"Loaded unmanaged extensions are currently treated as informational. Use pm extension --manage --project/--global --fix-managed-state to adopt them for update checks.\",\n );\n }\n if (remediation.length === 0) {\n remediation.push(\"No immediate action required. Re-run pm health after extension configuration changes.\");\n }\n return {\n status: normalizedWarnings.length === 0 ? \"ok\" : \"warn\",\n warning_count: normalizedWarnings.length,\n warning_codes: warningCodes,\n load_failure_count: loadFailureCount,\n activation_failure_count: activationFailureCount,\n migration_failed_count: migrationStatus.failed_count,\n migration_pending_count: migrationStatus.pending_count,\n managed_state_warning_count: managedStateWarningCount,\n managed_extension_entries_count: managedExtensionEntriesCount,\n unmanaged_loaded_extension_count: unmanagedLoadedExtensions.length,\n unmanaged_loaded_extensions: unmanagedLoadedExtensions,\n unmanaged_expected_extension_count: unmanagedExpectedExtensions.length,\n unmanaged_expected_extensions: unmanagedExpectedExtensions,\n unmanaged_action_required_extension_count: unmanagedActionRequiredExtensions.length,\n unmanaged_action_required_extensions: unmanagedActionRequiredExtensions,\n update_health_coverage: updateHealthCoverage,\n update_health_partial: updateHealthPartial,\n unknown_capability_count: unknownCapabilityCount,\n top_warnings: normalizedWarnings.slice(0, 8),\n remediation,\n };\n}\n\nasync function buildExtensionCheck(\n pmRoot: string,\n settings: PmSettings,\n noExtensionsFlag: boolean,\n): Promise<{ check: HealthCheck; warnings: string[] }> {\n const loadResult = await loadExtensions({\n pmRoot,\n settings,\n cwd: process.cwd(),\n noExtensions: noExtensionsFlag,\n });\n const loadedSummaries = loadResult.loaded.map((extension) => summarizeLoadedExtension(extension));\n const activationResult = await activateExtensions({\n ...loadResult,\n loaded: loadResult.loaded,\n });\n const [projectManagedState, globalManagedState] = await Promise.all([\n readManagedExtensionState(loadResult.roots.project),\n readManagedExtensionState(loadResult.roots.global),\n ]);\n const migrationStatus = summarizeMigrationStatuses(activationResult.registrations.migrations);\n const activationDetails = {\n failed: activationResult.failed,\n warnings: activationResult.warnings,\n hook_counts: activationResult.hook_counts,\n command_override_count: activationResult.command_override_count,\n command_handler_count: activationResult.command_handler_count,\n parser_override_count: activationResult.parser_override_count,\n preflight_override_count: activationResult.preflight_override_count,\n service_override_count: activationResult.service_override_count,\n renderer_override_count: activationResult.renderer_override_count,\n registration_counts: activationResult.registration_counts,\n registrations: activationResult.registrations,\n migration_status: migrationStatus.summary,\n managed_extensions: {\n project: {\n path: projectManagedState.path,\n count: projectManagedState.state.entries.length,\n entries: projectManagedState.state.entries,\n },\n global: {\n path: globalManagedState.path,\n count: globalManagedState.state.entries.length,\n entries: globalManagedState.state.entries,\n },\n },\n };\n const managedProjectNames = new Set(\n projectManagedState.state.entries.map((entry) => normalizeExtensionNameForMatch(entry.name)),\n );\n const managedGlobalNames = new Set(globalManagedState.state.entries.map((entry) => normalizeExtensionNameForMatch(entry.name)));\n const unmanagedLoadedEntries = [\n ...new Map(\n loadResult.loaded\n .filter((entry) => {\n const managedNames = entry.layer === \"project\" ? managedProjectNames : managedGlobalNames;\n return !managedNames.has(normalizeExtensionNameForMatch(entry.name));\n })\n .map((entry) => [\n `${entry.layer}:${entry.name}`,\n {\n layer: entry.layer,\n name: entry.name,\n directory: entry.directory,\n },\n ]),\n ).values(),\n ].sort((left, right) => {\n const leftKey = `${left.layer}:${left.name}`;\n const rightKey = `${right.layer}:${right.name}`;\n return leftKey.localeCompare(rightKey);\n });\n const unmanagedLoadedExtensions = unmanagedLoadedEntries\n .map((entry) => `${entry.layer}:${entry.name}`)\n .sort((left, right) => left.localeCompare(right));\n const unmanagedExpectedExtensions = unmanagedLoadedEntries\n .filter((entry) => isExpectedUnmanagedExtension(entry.name, entry.directory))\n .map((entry) => `${entry.layer}:${entry.name}`)\n .sort((left, right) => left.localeCompare(right));\n const unmanagedActionRequiredExtensions = unmanagedLoadedEntries\n .filter((entry) => !isExpectedUnmanagedExtension(entry.name, entry.directory))\n .map((entry) => `${entry.layer}:${entry.name}`)\n .sort((left, right) => left.localeCompare(right));\n const updateCoverageWarnings =\n unmanagedActionRequiredExtensions.length > 0\n ? [`extension_update_health_partial_coverage:skipped_unmanaged:${unmanagedActionRequiredExtensions.length}`]\n : [];\n const extensionWarnings = [\n ...loadResult.warnings,\n ...activationDetails.warnings,\n ...migrationStatus.warnings,\n ...projectManagedState.warnings,\n ...globalManagedState.warnings,\n ...updateCoverageWarnings,\n ];\n const capabilityGuidance = collectUnknownCapabilityGuidance(extensionWarnings);\n const capabilityContract = buildCapabilityContractMetadata();\n const extensionTriage = buildExtensionHealthTriageSummary(\n extensionWarnings,\n loadResult.failed.length,\n activationResult.failed.length,\n migrationStatus.summary,\n projectManagedState.warnings.length + globalManagedState.warnings.length,\n projectManagedState.state.entries.length + globalManagedState.state.entries.length,\n unmanagedLoadedExtensions,\n unmanagedExpectedExtensions,\n unmanagedActionRequiredExtensions,\n );\n\n return {\n check: {\n name: \"extensions\",\n status: extensionWarnings.length === 0 ? \"ok\" : \"warn\",\n details: {\n ...loadResult,\n loaded: loadedSummaries,\n warnings: extensionWarnings,\n activation: activationDetails,\n triage: extensionTriage,\n capability_contract: capabilityContract,\n capability_guidance: capabilityGuidance,\n } as Record<string, unknown>,\n },\n warnings: extensionWarnings,\n };\n}\n\nfunction collectStaleVectorizationIds(items: ItemWithBody[], ledgerEntries: Record<string, string>): string[] {\n return items\n .filter((item) => {\n const trackedUpdatedAt = ledgerEntries[item.id];\n return trackedUpdatedAt !== item.updated_at;\n })\n .map((item) => item.id)\n .sort((left, right) => left.localeCompare(right));\n}\n\nfunction summarizeList(values: string[], limit: number): { values: string[]; truncated: boolean } {\n if (values.length <= limit) {\n return { values, truncated: false };\n }\n return {\n values: values.slice(0, limit),\n truncated: true,\n };\n}\n\nfunction selectStaleItemDetail(\n values: string[],\n verboseStaleItems: boolean,\n): {\n values: string[];\n truncated: boolean;\n total: number;\n} {\n if (verboseStaleItems) {\n return {\n values,\n truncated: false,\n total: values.length,\n };\n }\n const summary = summarizeList(values, STALE_VECTORIZATION_SUMMARY_LIMIT);\n return {\n values: summary.values,\n truncated: summary.truncated,\n total: values.length,\n };\n}\n\ninterface TelemetryRuntimeStateRecord {\n endpoint?: string;\n queue_entries?: number;\n last_attempted_flush_at?: string;\n last_successful_flush_at?: string;\n last_failed_flush_at?: string;\n last_failed_flush_error?: string;\n}\n\nfunction telemetryEnvFlagEnabled(envKey: \"PM_TELEMETRY_DISABLED\" | \"PM_TELEMETRY_OTEL_DISABLED\"): boolean {\n const value = (process.env[envKey] ?? \"\").trim().toLowerCase();\n return value === \"1\" || value === \"true\" || value === \"yes\" || value === \"on\";\n}\n\nfunction normalizeEndpointForDisplay(rawEndpoint: string): string {\n const trimmed = rawEndpoint.trim();\n if (trimmed.length === 0) {\n return \"\";\n }\n try {\n const parsed = new URL(trimmed);\n parsed.username = \"\";\n parsed.password = \"\";\n parsed.search = \"\";\n parsed.hash = \"\";\n return parsed.toString();\n } catch {\n return trimmed;\n }\n}\n\nfunction parseTelemetryQueue(raw: string): { validEntries: number; invalidRows: number; totalRows: number } {\n let validEntries = 0;\n let invalidRows = 0;\n let totalRows = 0;\n for (const line of raw.split(\"\\n\")) {\n const trimmed = line.trim();\n if (trimmed.length === 0) {\n continue;\n }\n totalRows += 1;\n try {\n const parsed = JSON.parse(trimmed) as Record<string, unknown>;\n if (typeof parsed === \"object\" && parsed !== null && typeof parsed.attempts === \"number\") {\n validEntries += 1;\n } else {\n invalidRows += 1;\n }\n } catch {\n invalidRows += 1;\n }\n }\n return {\n validEntries,\n invalidRows,\n totalRows,\n };\n}\n\nasync function probeTelemetryEndpointHealth(endpoint: string): Promise<{\n probe_url: string;\n ok: boolean;\n status?: number;\n error?: string;\n}> {\n let probeUrl = endpoint;\n try {\n const parsed = new URL(endpoint);\n parsed.pathname = \"/healthz\";\n parsed.search = \"\";\n parsed.hash = \"\";\n probeUrl = parsed.toString();\n } catch {\n // keep original endpoint when URL parsing fails\n }\n try {\n const response = await fetch(probeUrl, {\n method: \"GET\",\n signal: AbortSignal.timeout(TELEMETRY_ENDPOINT_PROBE_TIMEOUT_MS),\n });\n return {\n probe_url: normalizeEndpointForDisplay(probeUrl),\n ok: response.ok,\n status: response.status,\n };\n } catch (error: unknown) {\n return {\n probe_url: normalizeEndpointForDisplay(probeUrl),\n ok: false,\n error: error instanceof Error ? error.message : \"probe_failed\",\n };\n }\n}\n\nasync function buildTelemetryCheck(\n settings: PmSettings,\n options: { checkTelemetry: boolean },\n): Promise<{ check: HealthCheck; warnings: string[] }> {\n const globalPmRoot = resolveGlobalPmRoot(process.cwd());\n const queuePath = path.join(globalPmRoot, TELEMETRY_QUEUE_RELATIVE_PATH);\n const statePath = path.join(globalPmRoot, TELEMETRY_STATE_RELATIVE_PATH);\n\n const queueRaw = await readFileIfExists(queuePath);\n const queueExists = queueRaw !== null;\n const queueSizeBytes = queueRaw ? Buffer.byteLength(queueRaw, \"utf8\") : 0;\n const queueSummary = queueRaw ? parseTelemetryQueue(queueRaw) : { validEntries: 0, invalidRows: 0, totalRows: 0 };\n\n const stateRaw = await readFileIfExists(statePath);\n let runtimeState: TelemetryRuntimeStateRecord = {};\n let stateParseFailed = false;\n if (stateRaw && stateRaw.trim().length > 0) {\n try {\n const parsed = JSON.parse(stateRaw) as TelemetryRuntimeStateRecord;\n if (typeof parsed === \"object\" && parsed !== null && !Array.isArray(parsed)) {\n runtimeState = parsed;\n } else {\n stateParseFailed = true;\n }\n } catch {\n stateParseFailed = true;\n }\n }\n\n const endpoint = settings.telemetry.endpoint.trim();\n const endpointDisplay = normalizeEndpointForDisplay(endpoint);\n let endpointProbe:\n | {\n attempted: boolean;\n probe_url: string;\n ok: boolean;\n status?: number;\n error?: string;\n }\n | undefined;\n if (options.checkTelemetry && settings.telemetry.enabled && endpoint.length > 0) {\n const probe = await probeTelemetryEndpointHealth(endpoint);\n endpointProbe = {\n attempted: true,\n ...probe,\n };\n }\n\n const warnings: string[] = [];\n if (stateParseFailed) {\n warnings.push(\"telemetry_state_invalid_json\");\n }\n if (queueSummary.invalidRows > 0) {\n warnings.push(`telemetry_queue_invalid_rows:${queueSummary.invalidRows}`);\n }\n const queueHasEntries = settings.telemetry.enabled && queueSummary.validEntries > 0;\n if (queueHasEntries) {\n const lastSuccess = runtimeState.last_successful_flush_at;\n const lastFailure = runtimeState.last_failed_flush_at;\n const activeFailure = lastFailure && (!lastSuccess || lastFailure > lastSuccess);\n const neverFlushed = !lastSuccess;\n const highWater = queueSummary.validEntries >= TELEMETRY_QUEUE_HIGH_WATER_MARK;\n if (activeFailure || neverFlushed || highWater) {\n warnings.push(`telemetry_queue_pending:${queueSummary.validEntries}`);\n }\n }\n if (endpointProbe && !endpointProbe.ok) {\n if (typeof endpointProbe.status === \"number\") {\n warnings.push(`telemetry_endpoint_probe_http_status:${endpointProbe.status}`);\n } else {\n warnings.push(\"telemetry_endpoint_probe_failed\");\n }\n }\n\n return {\n check: {\n name: \"telemetry\",\n status: warnings.length === 0 ? \"ok\" : \"warn\",\n details: {\n enabled: settings.telemetry.enabled,\n capture_level: settings.telemetry.capture_level,\n endpoint: endpointDisplay,\n global_pm_root: globalPmRoot,\n queue_path: queuePath,\n queue_exists: queueExists,\n queue_entries: queueSummary.validEntries,\n queue_draining: queueHasEntries && warnings.every((w) => !w.startsWith(\"telemetry_queue_pending:\")),\n queue_invalid_rows: queueSummary.invalidRows,\n queue_rows_total: queueSummary.totalRows,\n queue_size_bytes: queueSizeBytes,\n runtime_state_path: statePath,\n last_attempted_flush_at: runtimeState.last_attempted_flush_at ?? null,\n last_successful_flush_at: runtimeState.last_successful_flush_at ?? null,\n last_failed_flush_at: runtimeState.last_failed_flush_at ?? null,\n last_failed_flush_error: runtimeState.last_failed_flush_error ?? null,\n endpoint_probe: endpointProbe ?? {\n attempted: false,\n },\n env_overrides: {\n telemetry_disabled: telemetryEnvFlagEnabled(\"PM_TELEMETRY_DISABLED\"),\n telemetry_otel_disabled: telemetryEnvFlagEnabled(\"PM_TELEMETRY_OTEL_DISABLED\"),\n },\n },\n },\n warnings,\n };\n}\n\nasync function buildHistoryDriftCheck(\n pmRoot: string,\n items: ItemWithBody[],\n): Promise<{ check: HealthCheck; warnings: string[] }> {\n const missingStreams: string[] = [];\n const unreadableStreams: string[] = [];\n const hashMismatches: string[] = [];\n\n for (const item of items) {\n const historyPath = getHistoryPath(pmRoot, item.id);\n let latestAfterHash: string | null = null;\n try {\n const raw = await fs.readFile(historyPath, \"utf8\");\n if (raw.trim().length === 0) {\n missingStreams.push(item.id);\n continue;\n }\n const lines = raw.split(/\\r?\\n/);\n for (const line of lines) {\n const trimmed = line.trim();\n if (trimmed.length === 0) {\n continue;\n }\n const parsed = JSON.parse(trimmed) as { after_hash?: unknown };\n if (typeof parsed.after_hash !== \"string\" || parsed.after_hash.trim().length === 0) {\n throw new Error(\"missing after_hash\");\n }\n latestAfterHash = parsed.after_hash;\n }\n } catch (error: unknown) {\n if (typeof error === \"object\" && error !== null && \"code\" in error && (error as { code?: string }).code === \"ENOENT\") {\n missingStreams.push(item.id);\n } else {\n unreadableStreams.push(item.id);\n }\n continue;\n }\n if (!latestAfterHash) {\n missingStreams.push(item.id);\n continue;\n }\n const { body, ...frontMatter } = item;\n const currentHash = hashDocument({\n front_matter: frontMatter,\n body,\n });\n if (latestAfterHash !== currentHash) {\n hashMismatches.push(item.id);\n }\n }\n\n const driftedItems = [...new Set([...missingStreams, ...unreadableStreams, ...hashMismatches])].sort((a, b) =>\n a.localeCompare(b),\n );\n const warnings = [\n ...missingStreams.map((id) => `history_drift_missing_stream:${id}`),\n ...unreadableStreams.map((id) => `history_drift_unreadable_stream:${id}`),\n ...hashMismatches.map((id) => `history_drift_hash_mismatch:${id}`),\n ];\n\n return {\n check: {\n name: \"history_drift\",\n status: warnings.length === 0 ? \"ok\" : \"warn\",\n details: {\n checked_items: items.length,\n drifted_items: driftedItems,\n counts: {\n drifted: driftedItems.length,\n missing_streams: missingStreams.length,\n unreadable_streams: unreadableStreams.length,\n hash_mismatches: hashMismatches.length,\n },\n missing_streams: missingStreams,\n unreadable_streams: unreadableStreams,\n hash_mismatches: hashMismatches,\n },\n },\n warnings,\n };\n}\n\nasync function buildVectorizationCheck(\n pmRoot: string,\n settings: PmSettings,\n items: ItemWithBody[],\n refreshPolicy: {\n enabled: boolean;\n checkOnly: boolean;\n noRefresh: boolean;\n refreshVectors: boolean;\n },\n verboseStaleItems: boolean,\n): Promise<{ check: HealthCheck; warnings: string[] }> {\n const runtimeDefaults = resolveSettingsWithSemanticRuntimeDefaults(settings);\n const providerResolution = resolveEmbeddingProviders(runtimeDefaults.settings);\n const vectorStoreResolution = resolveVectorStores(runtimeDefaults.settings);\n const semanticRuntimeAvailable = Boolean(providerResolution.active && vectorStoreResolution.active);\n const ledgerBefore = await readVectorizationStatusLedger(pmRoot);\n const staleBefore = semanticRuntimeAvailable ? collectStaleVectorizationIds(items, ledgerBefore.entries) : [];\n let refreshResult: Awaited<ReturnType<typeof refreshSemanticEmbeddingsForMutatedItems>> = {\n refreshed: [],\n skipped: [],\n warnings: [],\n };\n if (refreshPolicy.enabled && semanticRuntimeAvailable && staleBefore.length > 0) {\n refreshResult = await refreshSemanticEmbeddingsForMutatedItems(pmRoot, staleBefore, {\n settings: runtimeDefaults.settings,\n apply_runtime_defaults: false,\n });\n }\n const ledgerAfter = await readVectorizationStatusLedger(pmRoot);\n const staleAfter = semanticRuntimeAvailable ? collectStaleVectorizationIds(items, ledgerAfter.entries) : [];\n const strictVectorizationWarnings = !runtimeDefaults.auto_ollama_defaults_applied;\n const warningSet = new Set<string>([...ledgerBefore.warnings, ...ledgerAfter.warnings]);\n if (strictVectorizationWarnings) {\n for (const warning of refreshResult.warnings) {\n warningSet.add(warning);\n }\n }\n if (strictVectorizationWarnings && semanticRuntimeAvailable && staleAfter.length > 0) {\n warningSet.add(`vectorization_stale_items_remaining:${staleAfter.length}`);\n }\n const warnings = [...warningSet].sort((left, right) => left.localeCompare(right));\n const staleBeforeDetail = selectStaleItemDetail(staleBefore, verboseStaleItems);\n const staleAfterDetail = selectStaleItemDetail(staleAfter, verboseStaleItems);\n\n return {\n check: {\n name: \"vectorization\",\n status: warnings.length === 0 ? \"ok\" : \"warn\",\n details: {\n semantic_runtime_available: semanticRuntimeAvailable,\n compatibility_mode_auto_defaults: runtimeDefaults.auto_ollama_defaults_applied,\n auto_ollama_defaults_applied: runtimeDefaults.auto_ollama_defaults_applied,\n refresh_policy: {\n enabled: refreshPolicy.enabled,\n check_only: refreshPolicy.checkOnly,\n no_refresh: refreshPolicy.noRefresh,\n refresh_vectors: refreshPolicy.refreshVectors,\n },\n provider_active: providerResolution.active?.name ?? null,\n vector_store_active: vectorStoreResolution.active?.name ?? null,\n items: items.length,\n ledger_entries_before: Object.keys(ledgerBefore.entries).length,\n stale_items_detail_mode: verboseStaleItems ? \"full\" : \"summary\",\n stale_items_summary_limit: STALE_VECTORIZATION_SUMMARY_LIMIT,\n stale_items_before_total: staleBeforeDetail.total,\n stale_items_before: staleBeforeDetail.values,\n stale_items_before_truncated: staleBeforeDetail.truncated,\n refresh_attempted: refreshPolicy.enabled && staleBefore.length > 0 && semanticRuntimeAvailable,\n refresh_skipped_reason:\n refreshPolicy.enabled && semanticRuntimeAvailable && staleBefore.length > 0\n ? null\n : !refreshPolicy.enabled\n ? \"refresh_disabled\"\n : !semanticRuntimeAvailable\n ? \"semantic_runtime_unavailable\"\n : \"no_stale_items\",\n refresh_result: refreshResult,\n ledger_entries_after: Object.keys(ledgerAfter.entries).length,\n stale_items_after_total: staleAfterDetail.total,\n stale_items_after: staleAfterDetail.values,\n stale_items_after_truncated: staleAfterDetail.truncated,\n },\n },\n warnings,\n };\n}\n\nfunction validateSettingsValues(settings: PmSettings): string[] {\n const warnings: string[] = [];\n if (settings.id_prefix.trim().length === 0) {\n warnings.push(\"settings:id_prefix_empty\");\n }\n if (settings.locks.ttl_seconds <= 0) {\n warnings.push(\"settings:locks_ttl_non_positive\");\n }\n return warnings;\n}\n\nfunction resolveVectorRefreshPolicy(options: RunHealthOptions): {\n enabled: boolean;\n checkOnly: boolean;\n noRefresh: boolean;\n refreshVectors: boolean;\n} {\n const checkOnly = options.checkOnly === true;\n const noRefresh = options.noRefresh === true || checkOnly;\n const refreshVectors = options.refreshVectors === true;\n if (refreshVectors && checkOnly) {\n throw new PmCliError(\"--check-only cannot be combined with --refresh-vectors\", EXIT_CODE.USAGE);\n }\n if (refreshVectors && options.noRefresh === true) {\n throw new PmCliError(\"--no-refresh cannot be combined with --refresh-vectors\", EXIT_CODE.USAGE);\n }\n return {\n enabled: refreshVectors || !noRefresh,\n checkOnly,\n noRefresh,\n refreshVectors,\n };\n}\n\nexport async function runHealth(global: GlobalOptions, options: RunHealthOptions = {}): Promise<HealthResult> {\n const pmRoot = resolvePmRoot(process.cwd(), global.path);\n const settingsPath = getSettingsPath(pmRoot);\n if (!(await pathExists(settingsPath))) {\n throw new PmCliError(`Tracker is not initialized at ${pmRoot}. Run pm init first.`, EXIT_CODE.NOT_FOUND);\n }\n\n const { settings, warnings: settingsReadWarnings } = await readSettingsWithMetadata(pmRoot);\n const normalizedSettingsReadWarnings = [...new Set(settingsReadWarnings)];\n const typeRegistry = resolveItemTypeRegistry(settings, getActiveExtensionRegistrations());\n const strictDirectories = options.strictDirectories === true;\n const refreshPolicy = resolveVectorRefreshPolicy(options);\n const optionalBuiltinDirs = new Set<string>(PM_OPTIONAL_TYPE_SUBDIRS.filter((entry) => entry.length > 0));\n const requiredDirSet = new Set<string>(PM_CORE_REQUIRED_SUBDIRS.filter((entry) => entry.length > 0));\n const optionalDirSet = new Set<string>();\n for (const folder of typeRegistry.folders) {\n if (optionalBuiltinDirs.has(folder)) {\n optionalDirSet.add(folder);\n continue;\n }\n requiredDirSet.add(folder);\n }\n const requiredDirs = [...requiredDirSet].sort((left, right) => left.localeCompare(right));\n const optionalDirs = [...optionalDirSet].sort((left, right) => left.localeCompare(right));\n const missingRequiredDirs: string[] = [];\n const missingOptionalDirs: string[] = [];\n const hookWarnings: string[] = [];\n for (const relativeDir of [...requiredDirs, ...optionalDirs]) {\n const directoryPath = path.join(pmRoot, relativeDir);\n hookWarnings.push(\n ...(await runActiveOnReadHooks({\n path: directoryPath,\n scope: \"project\",\n })),\n );\n if (!(await isDirectory(directoryPath))) {\n if (optionalDirSet.has(relativeDir)) {\n missingOptionalDirs.push(relativeDir);\n } else {\n missingRequiredDirs.push(relativeDir);\n }\n }\n }\n const missingDirs = strictDirectories ? [...missingRequiredDirs, ...missingOptionalDirs] : [...missingRequiredDirs];\n\n const settingWarnings = validateSettingsValues(settings);\n const telemetryCheck = await buildTelemetryCheck(settings, {\n checkTelemetry: options.checkTelemetry === true,\n });\n const extensionCheck = await buildExtensionCheck(pmRoot, settings, Boolean(global.noExtensions));\n const itemReadWarnings: string[] = [];\n const items = await listAllFrontMatterWithBody(\n pmRoot,\n settings.item_format,\n typeRegistry.type_to_folder,\n itemReadWarnings,\n settings.schema,\n );\n const normalizedItemReadWarnings = [...new Set(itemReadWarnings)];\n const historyPolicy = await enforceHistoryStreamPolicyForItems({\n pmRoot,\n settings,\n itemIds: items.map((item) => item.id),\n commandLabel: \"health\",\n });\n const historySummary = await countHistoryStreams(pmRoot);\n const integrityCheck = await buildIntegrityCheck(pmRoot, typeRegistry.type_to_folder, settings.schema);\n const historyDriftCheck = await buildHistoryDriftCheck(pmRoot, items);\n const vectorizationCheck = await buildVectorizationCheck(\n pmRoot,\n settings,\n items,\n refreshPolicy,\n options.verboseStaleItems === true,\n );\n\n const checks: HealthCheck[] = [\n {\n name: \"settings\",\n status: normalizedSettingsReadWarnings.length === 0 ? \"ok\" : \"warn\",\n details: {\n path: settingsPath,\n version: settings.version,\n id_prefix: settings.id_prefix,\n locks_ttl_seconds: settings.locks.ttl_seconds,\n warnings: normalizedSettingsReadWarnings,\n },\n },\n {\n name: \"directories\",\n status: missingDirs.length === 0 ? \"ok\" : \"warn\",\n details: {\n required: requiredDirs,\n optional: optionalDirs,\n missing_required: missingRequiredDirs,\n missing_optional: missingOptionalDirs,\n missing: missingDirs,\n strict_directories: strictDirectories,\n },\n },\n {\n name: \"settings_values\",\n status: settingWarnings.length === 0 ? \"ok\" : \"warn\",\n details: {\n warnings: settingWarnings,\n },\n },\n telemetryCheck.check,\n extensionCheck.check,\n {\n name: \"storage\",\n status: \"ok\",\n details: {\n items: items.length,\n history_streams: historySummary.count,\n },\n },\n integrityCheck.check,\n historyDriftCheck.check,\n vectorizationCheck.check,\n ];\n\n const warnings = [\n ...missingDirs.map((dir) => `missing_directory:${dir}`),\n ...normalizedSettingsReadWarnings,\n ...settingWarnings,\n ...normalizedItemReadWarnings,\n ...telemetryCheck.warnings,\n ...extensionCheck.warnings,\n ...historyPolicy.warnings,\n ...historySummary.warnings,\n ...integrityCheck.warnings,\n ...historyDriftCheck.warnings,\n ...vectorizationCheck.warnings,\n ...hookWarnings,\n ];\n const normalizedWarnings = [...new Set(warnings)];\n return {\n ok: normalizedWarnings.length === 0,\n checks,\n warnings: normalizedWarnings,\n generated_at: nowIso(),\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"health.js","sourceRoot":"/","sources":["cli/commands/health.ts"],"names":[],"mappings":"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","sourcesContent":["import fs from \"node:fs/promises\";\nimport path from \"node:path\";\nimport { resolveItemTypeRegistry } from \"../../core/item/type-registry.js\";\nimport { pathExists, readFileIfExists } from \"../../core/fs/fs-utils.js\";\nimport { activateExtensions, getActiveExtensionRegistrations, loadExtensions, runActiveOnReadHooks } from \"../../core/extensions/index.js\";\nimport {\n EXTENSION_CAPABILITY_CONTRACT,\n KNOWN_EXTENSION_CAPABILITIES,\n parseLegacyExtensionCapabilityAliasWarning,\n parseUnknownExtensionCapabilityWarning,\n type LoadedExtension,\n type UnknownExtensionCapabilityWarningDetails,\n} from \"../../core/extensions/loader.js\";\nimport { hashDocument } from \"../../core/history/history.js\";\nimport { enforceHistoryStreamPolicyForItems } from \"../../core/history/history-stream-policy.js\";\nimport {\n readVectorizationStatusLedger,\n refreshSemanticEmbeddingsForMutatedItems,\n} from \"../../core/search/cache.js\";\nimport { resolveEmbeddingProviders } from \"../../core/search/providers.js\";\nimport { resolveSettingsWithSemanticRuntimeDefaults } from \"../../core/search/semantic-defaults.js\";\nimport { resolveVectorStores } from \"../../core/search/vector-stores.js\";\nimport { EXIT_CODE, PM_CORE_REQUIRED_SUBDIRS, PM_OPTIONAL_TYPE_SUBDIRS } from \"../../core/shared/constants.js\";\nimport { findFirstMergeConflictMarker } from \"../../core/shared/conflict-markers.js\";\nimport type { GlobalOptions } from \"../../core/shared/command-types.js\";\nimport { PmCliError } from \"../../core/shared/errors.js\";\nimport { toNonEmptyStringOrUndefined } from \"../../core/shared/primitives.js\";\nimport { nowIso } from \"../../core/shared/time.js\";\nimport { parseItemDocument } from \"../../core/item/item-format.js\";\nimport { listAllFrontMatterWithBody } from \"../../core/store/item-store.js\";\nimport {\n getHistoryPath,\n getItemFormatFromPath,\n getSettingsPath,\n ITEM_FILE_EXTENSIONS,\n resolveGlobalPmRoot,\n resolvePmRoot,\n} from \"../../core/store/paths.js\";\nimport { readSettingsWithMetadata } from \"../../core/store/settings.js\";\nimport type { ItemFormat, PmSettings } from \"../../types/index.js\";\nimport { readManagedExtensionState } from \"./extension.js\";\n\ntype HealthStatus = \"ok\" | \"warn\";\ntype MigrationRuntimeStatus = \"pending\" | \"failed\" | \"applied\";\n\nexport interface HealthCheck {\n name:\n | \"settings\"\n | \"directories\"\n | \"settings_values\"\n | \"telemetry\"\n | \"extensions\"\n | \"storage\"\n | \"integrity\"\n | \"history_drift\"\n | \"vectorization\";\n status: HealthStatus;\n details: Record<string, unknown>;\n}\n\nexport interface HealthResult {\n ok: boolean;\n checks: HealthCheck[];\n warnings: string[];\n generated_at: string;\n}\n\nexport interface RunHealthOptions {\n strictDirectories?: boolean;\n checkOnly?: boolean;\n checkTelemetry?: boolean;\n noRefresh?: boolean;\n refreshVectors?: boolean;\n verboseStaleItems?: boolean;\n}\n\ninterface MigrationStatusEntry {\n layer: \"global\" | \"project\";\n name: string;\n id: string;\n status: MigrationRuntimeStatus;\n reason?: string;\n}\n\ninterface MigrationStatusSummary {\n applied: MigrationStatusEntry[];\n pending: MigrationStatusEntry[];\n failed: MigrationStatusEntry[];\n applied_count: number;\n pending_count: number;\n failed_count: number;\n}\n\ninterface ExtensionHealthTriageSummary {\n status: \"ok\" | \"warn\";\n warning_count: number;\n warning_codes: string[];\n load_failure_count: number;\n activation_failure_count: number;\n migration_failed_count: number;\n migration_pending_count: number;\n managed_state_warning_count: number;\n managed_extension_entries_count: number;\n unmanaged_loaded_extension_count: number;\n unmanaged_loaded_extensions: string[];\n unmanaged_expected_extension_count: number;\n unmanaged_expected_extensions: string[];\n unmanaged_action_required_extension_count: number;\n unmanaged_action_required_extensions: string[];\n update_health_coverage: \"full\" | \"partial\";\n update_health_partial: boolean;\n unknown_capability_count: number;\n top_warnings: string[];\n remediation: string[];\n}\n\ntype ItemWithBody = Awaited<ReturnType<typeof listAllFrontMatterWithBody>>[number];\nconst STALE_VECTORIZATION_SUMMARY_LIMIT = 25;\nconst TELEMETRY_QUEUE_RELATIVE_PATH = path.join(\"runtime\", \"telemetry\", \"events.jsonl\");\nconst TELEMETRY_STATE_RELATIVE_PATH = path.join(\"runtime\", \"telemetry\", \"state.json\");\nconst TELEMETRY_ENDPOINT_PROBE_TIMEOUT_MS = 2_500;\nconst TELEMETRY_QUEUE_HIGH_WATER_MARK = 500;\n\nfunction warningCode(value: string): string {\n const normalized = value.trim();\n const separator = normalized.indexOf(\":\");\n if (separator === -1) {\n return normalized;\n }\n return normalized.slice(0, separator);\n}\n\nfunction collectUnknownCapabilityGuidance(warnings: string[]): UnknownExtensionCapabilityWarningDetails[] {\n const seen = new Set<string>();\n const guidance: UnknownExtensionCapabilityWarningDetails[] = [];\n for (const warning of warnings) {\n const parsedDetails = (() => {\n const unknownWarning = parseUnknownExtensionCapabilityWarning(warning);\n if (unknownWarning) {\n return [unknownWarning];\n }\n return parseLegacyExtensionCapabilityAliasWarning(warning);\n })();\n for (const parsed of parsedDetails) {\n const key = `${parsed.layer}:${parsed.name}:${parsed.capability}`;\n if (seen.has(key)) {\n continue;\n }\n seen.add(key);\n guidance.push(parsed);\n }\n }\n return guidance;\n}\n\nfunction buildCapabilityContractMetadata(): {\n version: number;\n capabilities: string[];\n legacy_aliases: Record<string, string>;\n} {\n return {\n version: EXTENSION_CAPABILITY_CONTRACT.version,\n capabilities: [...EXTENSION_CAPABILITY_CONTRACT.capabilities],\n legacy_aliases: { ...EXTENSION_CAPABILITY_CONTRACT.legacy_aliases },\n };\n}\n\nfunction normalizeExtensionNameForMatch(value: string): string {\n return value.trim().toLowerCase();\n}\n\nfunction isExpectedUnmanagedExtension(name: string, directory: string): boolean {\n const normalizedName = normalizeExtensionNameForMatch(name);\n const normalizedDirectory = normalizeExtensionNameForMatch(directory);\n if (normalizedName.startsWith(\"builtin-\")) {\n return true;\n }\n return normalizedDirectory === \"beads\" || normalizedDirectory === \"todos\";\n}\n\nasync function isDirectory(targetPath: string): Promise<boolean> {\n try {\n const stats = await fs.stat(targetPath);\n return stats.isDirectory();\n } catch {\n return false;\n }\n}\n\nasync function countHistoryStreams(pmRoot: string): Promise<{ count: number; warnings: string[] }> {\n const historyDir = path.join(pmRoot, \"history\");\n if (!(await isDirectory(historyDir))) {\n return {\n count: 0,\n warnings: [],\n };\n }\n const historyFiles = (await fs.readdir(historyDir))\n .filter((entry) => entry.endsWith(\".jsonl\"))\n .sort((left, right) => left.localeCompare(right));\n\n const warnings: string[] = [];\n for (const fileName of historyFiles) {\n warnings.push(\n ...(await runActiveOnReadHooks({\n path: path.join(historyDir, fileName),\n scope: \"project\",\n })),\n );\n }\n\n return {\n count: historyFiles.length,\n warnings,\n };\n}\n\nfunction normalizeRelativePath(pmRoot: string, targetPath: string): string {\n return path.relative(pmRoot, targetPath).replaceAll(\"\\\\\", \"/\");\n}\n\nasync function listItemDocumentPaths(pmRoot: string, typeToFolder: Record<string, string>): Promise<string[]> {\n const folders = [...new Set(Object.values(typeToFolder))].sort((left, right) => left.localeCompare(right));\n const itemPaths: string[] = [];\n for (const folder of folders) {\n const directoryPath = path.join(pmRoot, folder);\n let entries: string[] = [];\n try {\n entries = await fs.readdir(directoryPath);\n } catch (error: unknown) {\n if (typeof error === \"object\" && error !== null && \"code\" in error && (error as { code?: string }).code === \"ENOENT\") {\n continue;\n }\n continue;\n }\n for (const entry of entries) {\n if (!ITEM_FILE_EXTENSIONS.some((extension) => entry.toLowerCase().endsWith(extension))) {\n continue;\n }\n itemPaths.push(path.join(directoryPath, entry));\n }\n }\n itemPaths.sort((left, right) => normalizeRelativePath(pmRoot, left).localeCompare(normalizeRelativePath(pmRoot, right)));\n return itemPaths;\n}\n\nasync function buildIntegrityCheck(\n pmRoot: string,\n typeToFolder: Record<string, string>,\n schema: PmSettings[\"schema\"],\n): Promise<{ check: HealthCheck; warnings: string[] }> {\n const itemPaths = await listItemDocumentPaths(pmRoot, typeToFolder);\n const itemUnreadable: string[] = [];\n const itemConflictMarkers: Array<{ path: string; line: number; marker: string }> = [];\n const itemParseFailures: string[] = [];\n\n for (const itemPath of itemPaths) {\n const relativePath = normalizeRelativePath(pmRoot, itemPath);\n let raw = \"\";\n try {\n raw = await fs.readFile(itemPath, \"utf8\");\n } catch {\n itemUnreadable.push(relativePath);\n continue;\n }\n const conflictMarker = findFirstMergeConflictMarker(raw);\n if (conflictMarker) {\n itemConflictMarkers.push({\n path: relativePath,\n line: conflictMarker.line,\n marker: conflictMarker.marker,\n });\n continue;\n }\n try {\n parseItemDocument(raw, { format: getItemFormatFromPath(itemPath) as ItemFormat, schema });\n } catch {\n itemParseFailures.push(relativePath);\n }\n }\n\n const historyDir = path.join(pmRoot, \"history\");\n const historyUnreadable: string[] = [];\n const historyConflictMarkers: Array<{ id: string; line: number; marker: string }> = [];\n const historyInvalidJson: Array<{ id: string; line: number }> = [];\n let historyFiles: string[] = [];\n try {\n historyFiles = (await fs.readdir(historyDir)).filter((entry) => entry.endsWith(\".jsonl\")).sort((left, right) => left.localeCompare(right));\n } catch (error: unknown) {\n if (!(typeof error === \"object\" && error !== null && \"code\" in error && (error as { code?: string }).code === \"ENOENT\")) {\n historyUnreadable.push(\"history\");\n }\n }\n for (const fileName of historyFiles) {\n const itemId = fileName.slice(0, -\".jsonl\".length);\n const historyPath = path.join(historyDir, fileName);\n let raw = \"\";\n try {\n raw = await fs.readFile(historyPath, \"utf8\");\n } catch {\n historyUnreadable.push(itemId);\n continue;\n }\n const conflictMarker = findFirstMergeConflictMarker(raw);\n if (conflictMarker) {\n historyConflictMarkers.push({\n id: itemId,\n line: conflictMarker.line,\n marker: conflictMarker.marker,\n });\n continue;\n }\n const lines = raw.split(/\\r?\\n/);\n for (let index = 0; index < lines.length; index += 1) {\n const line = lines[index]?.trim();\n if (!line) {\n continue;\n }\n try {\n JSON.parse(line);\n } catch {\n historyInvalidJson.push({\n id: itemId,\n line: index + 1,\n });\n }\n }\n }\n\n const warnings = [\n ...itemUnreadable.map((entry) => `integrity_item_unreadable:${entry}`),\n ...itemConflictMarkers.map((entry) => `integrity_item_conflict_marker:${entry.path}:L${entry.line}`),\n ...itemParseFailures.map((entry) => `integrity_item_parse_failed:${entry}`),\n ...historyUnreadable.map((entry) => `integrity_history_unreadable:${entry}`),\n ...historyConflictMarkers.map((entry) => `integrity_history_conflict_marker:${entry.id}:L${entry.line}`),\n ...historyInvalidJson.map((entry) => `integrity_history_invalid_json:${entry.id}:L${entry.line}`),\n ];\n const normalizedWarnings = [...new Set(warnings)].sort((left, right) => left.localeCompare(right));\n\n return {\n check: {\n name: \"integrity\",\n status: normalizedWarnings.length === 0 ? \"ok\" : \"warn\",\n details: {\n checked_item_files: itemPaths.length,\n checked_history_streams: historyFiles.length,\n counts: {\n item_unreadable: itemUnreadable.length,\n item_conflict_markers: itemConflictMarkers.length,\n item_parse_failures: itemParseFailures.length,\n history_unreadable: historyUnreadable.length,\n history_conflict_markers: historyConflictMarkers.length,\n history_invalid_json: historyInvalidJson.length,\n },\n item_unreadable: itemUnreadable,\n item_conflict_markers: itemConflictMarkers,\n item_parse_failures: itemParseFailures,\n history_unreadable: historyUnreadable,\n history_conflict_markers: historyConflictMarkers,\n history_invalid_json: historyInvalidJson,\n },\n },\n warnings: normalizedWarnings,\n };\n}\n\nfunction hasActivateExport(moduleRecord: Record<string, unknown>): boolean {\n if (typeof moduleRecord.activate === \"function\") {\n return true;\n }\n const defaultExport = moduleRecord.default;\n if (typeof defaultExport !== \"object\" || defaultExport === null) {\n return false;\n }\n return typeof (defaultExport as Record<string, unknown>).activate === \"function\";\n}\n\nfunction summarizeLoadedExtension(extension: LoadedExtension): Record<string, unknown> {\n const summary: Record<string, unknown> = {\n layer: extension.layer,\n directory: extension.directory,\n manifest_path: extension.manifest_path,\n name: extension.name,\n version: extension.version,\n entry: extension.entry,\n priority: extension.priority,\n entry_path: extension.entry_path,\n has_activate: hasActivateExport(extension.module as Record<string, unknown>),\n };\n if (Array.isArray(extension.capabilities)) {\n summary.capabilities = [...extension.capabilities];\n }\n return summary;\n}\n\nfunction resolveMigrationId(definition: Record<string, unknown>, fallbackIndex: number): string {\n const explicitId = toNonEmptyStringOrUndefined(definition.id);\n if (explicitId) {\n return explicitId;\n }\n return `migration-${String(fallbackIndex + 1).padStart(3, \"0\")}`;\n}\n\nfunction resolveMigrationStatus(definition: Record<string, unknown>): MigrationRuntimeStatus {\n const rawStatus = toNonEmptyStringOrUndefined(definition.status);\n const normalized = rawStatus?.toLowerCase();\n if (normalized === \"failed\") {\n return \"failed\";\n }\n if (normalized === \"applied\") {\n return \"applied\";\n }\n return \"pending\";\n}\n\nfunction resolveMigrationFailureReason(definition: Record<string, unknown>): string | undefined {\n return toNonEmptyStringOrUndefined(definition.reason) ?? toNonEmptyStringOrUndefined(definition.error) ?? toNonEmptyStringOrUndefined(definition.message);\n}\n\nfunction compareMigrationEntries(left: MigrationStatusEntry, right: MigrationStatusEntry): number {\n const byLayer = left.layer.localeCompare(right.layer);\n if (byLayer !== 0) {\n return byLayer;\n }\n const byName = left.name.localeCompare(right.name);\n if (byName !== 0) {\n return byName;\n }\n return left.id.localeCompare(right.id);\n}\n\nfunction summarizeMigrationStatuses(\n migrations: Array<{\n layer: \"global\" | \"project\";\n name: string;\n definition: Record<string, unknown>;\n }>,\n): { summary: MigrationStatusSummary; warnings: string[] } {\n const applied: MigrationStatusEntry[] = [];\n const pending: MigrationStatusEntry[] = [];\n const failed: MigrationStatusEntry[] = [];\n\n migrations.forEach((migration, index) => {\n const id = resolveMigrationId(migration.definition, index);\n const status = resolveMigrationStatus(migration.definition);\n if (status === \"applied\") {\n applied.push({\n layer: migration.layer,\n name: migration.name,\n id,\n status,\n });\n return;\n }\n if (status === \"failed\") {\n failed.push({\n layer: migration.layer,\n name: migration.name,\n id,\n status,\n reason: resolveMigrationFailureReason(migration.definition),\n });\n return;\n }\n pending.push({\n layer: migration.layer,\n name: migration.name,\n id,\n status,\n });\n });\n\n applied.sort(compareMigrationEntries);\n pending.sort(compareMigrationEntries);\n failed.sort(compareMigrationEntries);\n\n const warnings = [\n ...failed.map((entry) => `extension_migration_failed:${entry.layer}:${entry.name}:${entry.id}`),\n ...pending.map((entry) => `extension_migration_pending:${entry.layer}:${entry.name}:${entry.id}`),\n ];\n\n return {\n summary: {\n applied,\n pending,\n failed,\n applied_count: applied.length,\n pending_count: pending.length,\n failed_count: failed.length,\n },\n warnings,\n };\n}\n\nfunction buildExtensionHealthTriageSummary(\n warnings: string[],\n loadFailureCount: number,\n activationFailureCount: number,\n migrationStatus: MigrationStatusSummary,\n managedStateWarningCount: number,\n managedExtensionEntriesCount: number,\n unmanagedLoadedExtensions: string[],\n unmanagedExpectedExtensions: string[],\n unmanagedActionRequiredExtensions: string[],\n): ExtensionHealthTriageSummary {\n const normalizedWarnings = [...new Set(warnings)].sort((left, right) => left.localeCompare(right));\n const warningCodes = [...new Set(normalizedWarnings.map((value) => warningCode(value)))].sort((left, right) =>\n left.localeCompare(right),\n );\n const unknownCapabilityCount = normalizedWarnings.filter((warning) => warning.startsWith(\"extension_capability_unknown:\")).length;\n const updateHealthPartial = unmanagedActionRequiredExtensions.length > 0;\n const updateHealthCoverage = updateHealthPartial ? \"partial\" : \"full\";\n const remediation: string[] = [];\n if (loadFailureCount > 0) {\n remediation.push(\"Run pm extension --explore --project and pm extension --explore --global to inspect load failures.\");\n }\n if (activationFailureCount > 0) {\n remediation.push(\"Review checks[name=extensions].details.activation.failed in pm health --json for activation error details.\");\n }\n if (migrationStatus.failed_count > 0 || migrationStatus.pending_count > 0) {\n remediation.push(\"Resolve pending/failed extension migrations before write commands; use --force only when policy allows.\");\n }\n if (managedStateWarningCount > 0) {\n remediation.push(\"Run pm extension --manage --project and pm extension --manage --global to refresh managed-state diagnostics.\");\n }\n if (unknownCapabilityCount > 0) {\n remediation.push(\n `Unknown extension capabilities detected. Allowed capabilities: ${KNOWN_EXTENSION_CAPABILITIES.join(\", \")}. ` +\n \"Review extension_capability_unknown warning details for suggested replacements.\",\n );\n }\n if (normalizedWarnings.some((warning) => warning.startsWith(\"extension_capability_legacy_alias:\"))) {\n remediation.push(\n \"Legacy extension capability aliases were auto-remapped to canonical capabilities. \" +\n \"Update manifests to canonical names (migration/validation -> schema).\",\n );\n }\n if (normalizedWarnings.some((warning) => warning.startsWith(\"extension_command_definition_legacy_handler_alias:\"))) {\n remediation.push(\n \"Extension command definitions using legacy handler were auto-remapped. \" +\n \"Update command definitions to use run: (context) => ... for forward compatibility.\",\n );\n }\n if (updateHealthPartial) {\n remediation.push(\n \"Update-check coverage is partial because unmanaged extensions need adoption. Adopt existing installs via pm extension --manage --project/--global --fix-managed-state, pm extension --adopt-all --project/--global, or pm extension --adopt <name>.\",\n );\n } else if (unmanagedLoadedExtensions.length > 0) {\n remediation.push(\n \"Loaded unmanaged extensions are currently treated as informational. Use pm extension --manage --project/--global --fix-managed-state to adopt them for update checks.\",\n );\n }\n if (remediation.length === 0) {\n remediation.push(\"No immediate action required. Re-run pm health after extension configuration changes.\");\n }\n return {\n status: normalizedWarnings.length === 0 ? \"ok\" : \"warn\",\n warning_count: normalizedWarnings.length,\n warning_codes: warningCodes,\n load_failure_count: loadFailureCount,\n activation_failure_count: activationFailureCount,\n migration_failed_count: migrationStatus.failed_count,\n migration_pending_count: migrationStatus.pending_count,\n managed_state_warning_count: managedStateWarningCount,\n managed_extension_entries_count: managedExtensionEntriesCount,\n unmanaged_loaded_extension_count: unmanagedLoadedExtensions.length,\n unmanaged_loaded_extensions: unmanagedLoadedExtensions,\n unmanaged_expected_extension_count: unmanagedExpectedExtensions.length,\n unmanaged_expected_extensions: unmanagedExpectedExtensions,\n unmanaged_action_required_extension_count: unmanagedActionRequiredExtensions.length,\n unmanaged_action_required_extensions: unmanagedActionRequiredExtensions,\n update_health_coverage: updateHealthCoverage,\n update_health_partial: updateHealthPartial,\n unknown_capability_count: unknownCapabilityCount,\n top_warnings: normalizedWarnings.slice(0, 8),\n remediation,\n };\n}\n\nasync function buildExtensionCheck(\n pmRoot: string,\n settings: PmSettings,\n noExtensionsFlag: boolean,\n): Promise<{ check: HealthCheck; warnings: string[] }> {\n const loadResult = await loadExtensions({\n pmRoot,\n settings,\n cwd: process.cwd(),\n noExtensions: noExtensionsFlag,\n });\n const loadedSummaries = loadResult.loaded.map((extension) => summarizeLoadedExtension(extension));\n const activationResult = await activateExtensions({\n ...loadResult,\n loaded: loadResult.loaded,\n });\n const [projectManagedState, globalManagedState] = await Promise.all([\n readManagedExtensionState(loadResult.roots.project),\n readManagedExtensionState(loadResult.roots.global),\n ]);\n const migrationStatus = summarizeMigrationStatuses(activationResult.registrations.migrations);\n const activationDetails = {\n failed: activationResult.failed,\n warnings: activationResult.warnings,\n hook_counts: activationResult.hook_counts,\n command_override_count: activationResult.command_override_count,\n command_handler_count: activationResult.command_handler_count,\n parser_override_count: activationResult.parser_override_count,\n preflight_override_count: activationResult.preflight_override_count,\n service_override_count: activationResult.service_override_count,\n renderer_override_count: activationResult.renderer_override_count,\n registration_counts: activationResult.registration_counts,\n registrations: activationResult.registrations,\n migration_status: migrationStatus.summary,\n managed_extensions: {\n project: {\n path: projectManagedState.path,\n count: projectManagedState.state.entries.length,\n entries: projectManagedState.state.entries,\n },\n global: {\n path: globalManagedState.path,\n count: globalManagedState.state.entries.length,\n entries: globalManagedState.state.entries,\n },\n },\n };\n const managedProjectNames = new Set(\n projectManagedState.state.entries.map((entry) => normalizeExtensionNameForMatch(entry.name)),\n );\n const managedGlobalNames = new Set(globalManagedState.state.entries.map((entry) => normalizeExtensionNameForMatch(entry.name)));\n const unmanagedLoadedEntries = [\n ...new Map(\n loadResult.loaded\n .filter((entry) => {\n const managedNames = entry.layer === \"project\" ? managedProjectNames : managedGlobalNames;\n return !managedNames.has(normalizeExtensionNameForMatch(entry.name));\n })\n .map((entry) => [\n `${entry.layer}:${entry.name}`,\n {\n layer: entry.layer,\n name: entry.name,\n directory: entry.directory,\n },\n ]),\n ).values(),\n ].sort((left, right) => {\n const leftKey = `${left.layer}:${left.name}`;\n const rightKey = `${right.layer}:${right.name}`;\n return leftKey.localeCompare(rightKey);\n });\n const unmanagedLoadedExtensions = unmanagedLoadedEntries\n .map((entry) => `${entry.layer}:${entry.name}`)\n .sort((left, right) => left.localeCompare(right));\n const unmanagedExpectedExtensions = unmanagedLoadedEntries\n .filter((entry) => isExpectedUnmanagedExtension(entry.name, entry.directory))\n .map((entry) => `${entry.layer}:${entry.name}`)\n .sort((left, right) => left.localeCompare(right));\n const unmanagedActionRequiredExtensions = unmanagedLoadedEntries\n .filter((entry) => !isExpectedUnmanagedExtension(entry.name, entry.directory))\n .map((entry) => `${entry.layer}:${entry.name}`)\n .sort((left, right) => left.localeCompare(right));\n const updateCoverageWarnings =\n unmanagedActionRequiredExtensions.length > 0\n ? [`extension_update_health_partial_coverage:skipped_unmanaged:${unmanagedActionRequiredExtensions.length}`]\n : [];\n const extensionWarnings = [\n ...loadResult.warnings,\n ...activationDetails.warnings,\n ...migrationStatus.warnings,\n ...projectManagedState.warnings,\n ...globalManagedState.warnings,\n ...updateCoverageWarnings,\n ];\n const capabilityGuidance = collectUnknownCapabilityGuidance(extensionWarnings);\n const capabilityContract = buildCapabilityContractMetadata();\n const extensionTriage = buildExtensionHealthTriageSummary(\n extensionWarnings,\n loadResult.failed.length,\n activationResult.failed.length,\n migrationStatus.summary,\n projectManagedState.warnings.length + globalManagedState.warnings.length,\n projectManagedState.state.entries.length + globalManagedState.state.entries.length,\n unmanagedLoadedExtensions,\n unmanagedExpectedExtensions,\n unmanagedActionRequiredExtensions,\n );\n\n return {\n check: {\n name: \"extensions\",\n status: extensionWarnings.length === 0 ? \"ok\" : \"warn\",\n details: {\n ...loadResult,\n loaded: loadedSummaries,\n warnings: extensionWarnings,\n activation: activationDetails,\n triage: extensionTriage,\n capability_contract: capabilityContract,\n capability_guidance: capabilityGuidance,\n } as Record<string, unknown>,\n },\n warnings: extensionWarnings,\n };\n}\n\nfunction collectStaleVectorizationIds(items: ItemWithBody[], ledgerEntries: Record<string, string>): string[] {\n return items\n .filter((item) => {\n const trackedUpdatedAt = ledgerEntries[item.id];\n return trackedUpdatedAt !== item.updated_at;\n })\n .map((item) => item.id)\n .sort((left, right) => left.localeCompare(right));\n}\n\nfunction summarizeList(values: string[], limit: number): { values: string[]; truncated: boolean } {\n if (values.length <= limit) {\n return { values, truncated: false };\n }\n return {\n values: values.slice(0, limit),\n truncated: true,\n };\n}\n\nfunction selectStaleItemDetail(\n values: string[],\n verboseStaleItems: boolean,\n): {\n values: string[];\n truncated: boolean;\n total: number;\n} {\n if (verboseStaleItems) {\n return {\n values,\n truncated: false,\n total: values.length,\n };\n }\n const summary = summarizeList(values, STALE_VECTORIZATION_SUMMARY_LIMIT);\n return {\n values: summary.values,\n truncated: summary.truncated,\n total: values.length,\n };\n}\n\ninterface TelemetryRuntimeStateRecord {\n endpoint?: string;\n queue_entries?: number;\n last_attempted_flush_at?: string;\n last_successful_flush_at?: string;\n last_failed_flush_at?: string;\n last_failed_flush_error?: string;\n}\n\nfunction telemetryEnvFlagEnabled(envKey: \"PM_TELEMETRY_DISABLED\" | \"PM_TELEMETRY_OTEL_DISABLED\"): boolean {\n const value = (process.env[envKey] ?? \"\").trim().toLowerCase();\n return value === \"1\" || value === \"true\" || value === \"yes\" || value === \"on\";\n}\n\nfunction normalizeEndpointForDisplay(rawEndpoint: string): string {\n const trimmed = rawEndpoint.trim();\n if (trimmed.length === 0) {\n return \"\";\n }\n try {\n const parsed = new URL(trimmed);\n parsed.username = \"\";\n parsed.password = \"\";\n parsed.search = \"\";\n parsed.hash = \"\";\n return parsed.toString();\n } catch {\n return trimmed;\n }\n}\n\nfunction parseTelemetryQueue(raw: string): { validEntries: number; invalidRows: number; totalRows: number } {\n let validEntries = 0;\n let invalidRows = 0;\n let totalRows = 0;\n for (const line of raw.split(\"\\n\")) {\n const trimmed = line.trim();\n if (trimmed.length === 0) {\n continue;\n }\n totalRows += 1;\n try {\n const parsed = JSON.parse(trimmed) as Record<string, unknown>;\n if (typeof parsed === \"object\" && parsed !== null && typeof parsed.attempts === \"number\") {\n validEntries += 1;\n } else {\n invalidRows += 1;\n }\n } catch {\n invalidRows += 1;\n }\n }\n return {\n validEntries,\n invalidRows,\n totalRows,\n };\n}\n\nasync function probeTelemetryEndpointHealth(endpoint: string): Promise<{\n probe_url: string;\n ok: boolean;\n status?: number;\n error?: string;\n}> {\n let probeUrl = endpoint;\n try {\n const parsed = new URL(endpoint);\n parsed.pathname = \"/healthz\";\n parsed.search = \"\";\n parsed.hash = \"\";\n probeUrl = parsed.toString();\n } catch {\n // keep original endpoint when URL parsing fails\n }\n try {\n const response = await fetch(probeUrl, {\n method: \"GET\",\n signal: AbortSignal.timeout(TELEMETRY_ENDPOINT_PROBE_TIMEOUT_MS),\n });\n return {\n probe_url: normalizeEndpointForDisplay(probeUrl),\n ok: response.ok,\n status: response.status,\n };\n } catch (error: unknown) {\n return {\n probe_url: normalizeEndpointForDisplay(probeUrl),\n ok: false,\n error: error instanceof Error ? error.message : \"probe_failed\",\n };\n }\n}\n\nasync function buildTelemetryCheck(\n settings: PmSettings,\n options: { checkTelemetry: boolean },\n): Promise<{ check: HealthCheck; warnings: string[] }> {\n const globalPmRoot = resolveGlobalPmRoot(process.cwd());\n const queuePath = path.join(globalPmRoot, TELEMETRY_QUEUE_RELATIVE_PATH);\n const statePath = path.join(globalPmRoot, TELEMETRY_STATE_RELATIVE_PATH);\n\n const queueRaw = await readFileIfExists(queuePath);\n const queueExists = queueRaw !== null;\n const queueSizeBytes = queueRaw ? Buffer.byteLength(queueRaw, \"utf8\") : 0;\n const queueSummary = queueRaw ? parseTelemetryQueue(queueRaw) : { validEntries: 0, invalidRows: 0, totalRows: 0 };\n\n const stateRaw = await readFileIfExists(statePath);\n let runtimeState: TelemetryRuntimeStateRecord = {};\n let stateParseFailed = false;\n if (stateRaw && stateRaw.trim().length > 0) {\n try {\n const parsed = JSON.parse(stateRaw) as TelemetryRuntimeStateRecord;\n if (typeof parsed === \"object\" && parsed !== null && !Array.isArray(parsed)) {\n runtimeState = parsed;\n } else {\n stateParseFailed = true;\n }\n } catch {\n stateParseFailed = true;\n }\n }\n\n const endpoint = settings.telemetry.endpoint.trim();\n const endpointDisplay = normalizeEndpointForDisplay(endpoint);\n let endpointProbe:\n | {\n attempted: boolean;\n probe_url: string;\n ok: boolean;\n status?: number;\n error?: string;\n }\n | undefined;\n if (options.checkTelemetry && settings.telemetry.enabled && endpoint.length > 0) {\n const probe = await probeTelemetryEndpointHealth(endpoint);\n endpointProbe = {\n attempted: true,\n ...probe,\n };\n }\n\n const warnings: string[] = [];\n if (stateParseFailed) {\n warnings.push(\"telemetry_state_invalid_json\");\n }\n if (queueSummary.invalidRows > 0) {\n warnings.push(`telemetry_queue_invalid_rows:${queueSummary.invalidRows}`);\n }\n const queueHasEntries = settings.telemetry.enabled && queueSummary.validEntries > 0;\n if (queueHasEntries) {\n const lastSuccess = runtimeState.last_successful_flush_at;\n const lastFailure = runtimeState.last_failed_flush_at;\n const activeFailure = lastFailure && (!lastSuccess || lastFailure > lastSuccess);\n const neverFlushed = !lastSuccess;\n const highWater = queueSummary.validEntries >= TELEMETRY_QUEUE_HIGH_WATER_MARK;\n if (activeFailure || neverFlushed || highWater) {\n warnings.push(`telemetry_queue_pending:${queueSummary.validEntries}`);\n }\n }\n if (endpointProbe && !endpointProbe.ok) {\n if (typeof endpointProbe.status === \"number\") {\n warnings.push(`telemetry_endpoint_probe_http_status:${endpointProbe.status}`);\n } else {\n warnings.push(\"telemetry_endpoint_probe_failed\");\n }\n }\n\n return {\n check: {\n name: \"telemetry\",\n status: warnings.length === 0 ? \"ok\" : \"warn\",\n details: {\n enabled: settings.telemetry.enabled,\n capture_level: settings.telemetry.capture_level,\n endpoint: endpointDisplay,\n global_pm_root: globalPmRoot,\n queue_path: queuePath,\n queue_exists: queueExists,\n queue_entries: queueSummary.validEntries,\n queue_draining: queueHasEntries && warnings.every((w) => !w.startsWith(\"telemetry_queue_pending:\")),\n queue_invalid_rows: queueSummary.invalidRows,\n queue_rows_total: queueSummary.totalRows,\n queue_size_bytes: queueSizeBytes,\n runtime_state_path: statePath,\n last_attempted_flush_at: runtimeState.last_attempted_flush_at ?? null,\n last_successful_flush_at: runtimeState.last_successful_flush_at ?? null,\n last_failed_flush_at: runtimeState.last_failed_flush_at ?? null,\n last_failed_flush_error: runtimeState.last_failed_flush_error ?? null,\n endpoint_probe: endpointProbe ?? {\n attempted: false,\n },\n env_overrides: {\n telemetry_disabled: telemetryEnvFlagEnabled(\"PM_TELEMETRY_DISABLED\"),\n telemetry_otel_disabled: telemetryEnvFlagEnabled(\"PM_TELEMETRY_OTEL_DISABLED\"),\n },\n },\n },\n warnings,\n };\n}\n\nasync function buildHistoryDriftCheck(\n pmRoot: string,\n items: ItemWithBody[],\n): Promise<{ check: HealthCheck; warnings: string[] }> {\n const missingStreams: string[] = [];\n const unreadableStreams: string[] = [];\n const hashMismatches: string[] = [];\n\n for (const item of items) {\n const historyPath = getHistoryPath(pmRoot, item.id);\n let latestAfterHash: string | null = null;\n try {\n const raw = await fs.readFile(historyPath, \"utf8\");\n if (raw.trim().length === 0) {\n missingStreams.push(item.id);\n continue;\n }\n const lines = raw.split(/\\r?\\n/);\n for (const line of lines) {\n const trimmed = line.trim();\n if (trimmed.length === 0) {\n continue;\n }\n const parsed = JSON.parse(trimmed) as { after_hash?: unknown };\n if (typeof parsed.after_hash !== \"string\" || parsed.after_hash.trim().length === 0) {\n throw new Error(\"missing after_hash\");\n }\n latestAfterHash = parsed.after_hash;\n }\n } catch (error: unknown) {\n if (typeof error === \"object\" && error !== null && \"code\" in error && (error as { code?: string }).code === \"ENOENT\") {\n missingStreams.push(item.id);\n } else {\n unreadableStreams.push(item.id);\n }\n continue;\n }\n if (!latestAfterHash) {\n missingStreams.push(item.id);\n continue;\n }\n const { body, ...frontMatter } = item;\n const currentHash = hashDocument({\n metadata: frontMatter,\n body,\n });\n if (latestAfterHash !== currentHash) {\n hashMismatches.push(item.id);\n }\n }\n\n const driftedItems = [...new Set([...missingStreams, ...unreadableStreams, ...hashMismatches])].sort((a, b) =>\n a.localeCompare(b),\n );\n const warnings = [\n ...missingStreams.map((id) => `history_drift_missing_stream:${id}`),\n ...unreadableStreams.map((id) => `history_drift_unreadable_stream:${id}`),\n ...hashMismatches.map((id) => `history_drift_hash_mismatch:${id}`),\n ];\n\n return {\n check: {\n name: \"history_drift\",\n status: warnings.length === 0 ? \"ok\" : \"warn\",\n details: {\n checked_items: items.length,\n drifted_items: driftedItems,\n counts: {\n drifted: driftedItems.length,\n missing_streams: missingStreams.length,\n unreadable_streams: unreadableStreams.length,\n hash_mismatches: hashMismatches.length,\n },\n missing_streams: missingStreams,\n unreadable_streams: unreadableStreams,\n hash_mismatches: hashMismatches,\n },\n },\n warnings,\n };\n}\n\nasync function buildVectorizationCheck(\n pmRoot: string,\n settings: PmSettings,\n items: ItemWithBody[],\n refreshPolicy: {\n enabled: boolean;\n checkOnly: boolean;\n noRefresh: boolean;\n refreshVectors: boolean;\n },\n verboseStaleItems: boolean,\n): Promise<{ check: HealthCheck; warnings: string[] }> {\n const runtimeDefaults = resolveSettingsWithSemanticRuntimeDefaults(settings);\n const providerResolution = resolveEmbeddingProviders(runtimeDefaults.settings);\n const vectorStoreResolution = resolveVectorStores(runtimeDefaults.settings);\n const semanticRuntimeAvailable = Boolean(providerResolution.active && vectorStoreResolution.active);\n const ledgerBefore = await readVectorizationStatusLedger(pmRoot);\n const staleBefore = semanticRuntimeAvailable ? collectStaleVectorizationIds(items, ledgerBefore.entries) : [];\n let refreshResult: Awaited<ReturnType<typeof refreshSemanticEmbeddingsForMutatedItems>> = {\n refreshed: [],\n skipped: [],\n warnings: [],\n };\n if (refreshPolicy.enabled && semanticRuntimeAvailable && staleBefore.length > 0) {\n refreshResult = await refreshSemanticEmbeddingsForMutatedItems(pmRoot, staleBefore, {\n settings: runtimeDefaults.settings,\n apply_runtime_defaults: false,\n });\n }\n const ledgerAfter = await readVectorizationStatusLedger(pmRoot);\n const staleAfter = semanticRuntimeAvailable ? collectStaleVectorizationIds(items, ledgerAfter.entries) : [];\n const strictVectorizationWarnings = !runtimeDefaults.auto_ollama_defaults_applied;\n const warningSet = new Set<string>([...ledgerBefore.warnings, ...ledgerAfter.warnings]);\n if (strictVectorizationWarnings) {\n for (const warning of refreshResult.warnings) {\n warningSet.add(warning);\n }\n }\n if (strictVectorizationWarnings && semanticRuntimeAvailable && staleAfter.length > 0) {\n warningSet.add(`vectorization_stale_items_remaining:${staleAfter.length}`);\n }\n const warnings = [...warningSet].sort((left, right) => left.localeCompare(right));\n const staleBeforeDetail = selectStaleItemDetail(staleBefore, verboseStaleItems);\n const staleAfterDetail = selectStaleItemDetail(staleAfter, verboseStaleItems);\n\n return {\n check: {\n name: \"vectorization\",\n status: warnings.length === 0 ? \"ok\" : \"warn\",\n details: {\n semantic_runtime_available: semanticRuntimeAvailable,\n compatibility_mode_auto_defaults: runtimeDefaults.auto_ollama_defaults_applied,\n auto_ollama_defaults_applied: runtimeDefaults.auto_ollama_defaults_applied,\n refresh_policy: {\n enabled: refreshPolicy.enabled,\n check_only: refreshPolicy.checkOnly,\n no_refresh: refreshPolicy.noRefresh,\n refresh_vectors: refreshPolicy.refreshVectors,\n },\n provider_active: providerResolution.active?.name ?? null,\n vector_store_active: vectorStoreResolution.active?.name ?? null,\n items: items.length,\n ledger_entries_before: Object.keys(ledgerBefore.entries).length,\n stale_items_detail_mode: verboseStaleItems ? \"full\" : \"summary\",\n stale_items_summary_limit: STALE_VECTORIZATION_SUMMARY_LIMIT,\n stale_items_before_total: staleBeforeDetail.total,\n stale_items_before: staleBeforeDetail.values,\n stale_items_before_truncated: staleBeforeDetail.truncated,\n refresh_attempted: refreshPolicy.enabled && staleBefore.length > 0 && semanticRuntimeAvailable,\n refresh_skipped_reason:\n refreshPolicy.enabled && semanticRuntimeAvailable && staleBefore.length > 0\n ? null\n : !refreshPolicy.enabled\n ? \"refresh_disabled\"\n : !semanticRuntimeAvailable\n ? \"semantic_runtime_unavailable\"\n : \"no_stale_items\",\n refresh_result: refreshResult,\n ledger_entries_after: Object.keys(ledgerAfter.entries).length,\n stale_items_after_total: staleAfterDetail.total,\n stale_items_after: staleAfterDetail.values,\n stale_items_after_truncated: staleAfterDetail.truncated,\n },\n },\n warnings,\n };\n}\n\nfunction validateSettingsValues(settings: PmSettings): string[] {\n const warnings: string[] = [];\n if (settings.id_prefix.trim().length === 0) {\n warnings.push(\"settings:id_prefix_empty\");\n }\n if (settings.locks.ttl_seconds <= 0) {\n warnings.push(\"settings:locks_ttl_non_positive\");\n }\n return warnings;\n}\n\nfunction resolveVectorRefreshPolicy(options: RunHealthOptions): {\n enabled: boolean;\n checkOnly: boolean;\n noRefresh: boolean;\n refreshVectors: boolean;\n} {\n const checkOnly = options.checkOnly === true;\n const noRefresh = options.noRefresh === true || checkOnly;\n const refreshVectors = options.refreshVectors === true;\n if (refreshVectors && checkOnly) {\n throw new PmCliError(\"--check-only cannot be combined with --refresh-vectors\", EXIT_CODE.USAGE);\n }\n if (refreshVectors && options.noRefresh === true) {\n throw new PmCliError(\"--no-refresh cannot be combined with --refresh-vectors\", EXIT_CODE.USAGE);\n }\n return {\n enabled: refreshVectors || !noRefresh,\n checkOnly,\n noRefresh,\n refreshVectors,\n };\n}\n\nexport async function runHealth(global: GlobalOptions, options: RunHealthOptions = {}): Promise<HealthResult> {\n const pmRoot = resolvePmRoot(process.cwd(), global.path);\n const settingsPath = getSettingsPath(pmRoot);\n if (!(await pathExists(settingsPath))) {\n throw new PmCliError(`Tracker is not initialized at ${pmRoot}. Run pm init first.`, EXIT_CODE.NOT_FOUND);\n }\n\n const { settings, warnings: settingsReadWarnings } = await readSettingsWithMetadata(pmRoot);\n const normalizedSettingsReadWarnings = [...new Set(settingsReadWarnings)];\n const typeRegistry = resolveItemTypeRegistry(settings, getActiveExtensionRegistrations());\n const strictDirectories = options.strictDirectories === true;\n const refreshPolicy = resolveVectorRefreshPolicy(options);\n const optionalBuiltinDirs = new Set<string>(PM_OPTIONAL_TYPE_SUBDIRS.filter((entry) => entry.length > 0));\n const requiredDirSet = new Set<string>(PM_CORE_REQUIRED_SUBDIRS.filter((entry) => entry.length > 0));\n const optionalDirSet = new Set<string>();\n for (const folder of typeRegistry.folders) {\n if (optionalBuiltinDirs.has(folder)) {\n optionalDirSet.add(folder);\n continue;\n }\n requiredDirSet.add(folder);\n }\n const requiredDirs = [...requiredDirSet].sort((left, right) => left.localeCompare(right));\n const optionalDirs = [...optionalDirSet].sort((left, right) => left.localeCompare(right));\n const missingRequiredDirs: string[] = [];\n const missingOptionalDirs: string[] = [];\n const hookWarnings: string[] = [];\n for (const relativeDir of [...requiredDirs, ...optionalDirs]) {\n const directoryPath = path.join(pmRoot, relativeDir);\n hookWarnings.push(\n ...(await runActiveOnReadHooks({\n path: directoryPath,\n scope: \"project\",\n })),\n );\n if (!(await isDirectory(directoryPath))) {\n if (optionalDirSet.has(relativeDir)) {\n missingOptionalDirs.push(relativeDir);\n } else {\n missingRequiredDirs.push(relativeDir);\n }\n }\n }\n const missingDirs = strictDirectories ? [...missingRequiredDirs, ...missingOptionalDirs] : [...missingRequiredDirs];\n\n const settingWarnings = validateSettingsValues(settings);\n const telemetryCheck = await buildTelemetryCheck(settings, {\n checkTelemetry: options.checkTelemetry === true,\n });\n const extensionCheck = await buildExtensionCheck(pmRoot, settings, Boolean(global.noExtensions));\n const itemReadWarnings: string[] = [];\n const items = await listAllFrontMatterWithBody(\n pmRoot,\n settings.item_format,\n typeRegistry.type_to_folder,\n itemReadWarnings,\n settings.schema,\n );\n const normalizedItemReadWarnings = [...new Set(itemReadWarnings)];\n const historyPolicy = await enforceHistoryStreamPolicyForItems({\n pmRoot,\n settings,\n itemIds: items.map((item) => item.id),\n commandLabel: \"health\",\n });\n const historySummary = await countHistoryStreams(pmRoot);\n const integrityCheck = await buildIntegrityCheck(pmRoot, typeRegistry.type_to_folder, settings.schema);\n const historyDriftCheck = await buildHistoryDriftCheck(pmRoot, items);\n const vectorizationCheck = await buildVectorizationCheck(\n pmRoot,\n settings,\n items,\n refreshPolicy,\n options.verboseStaleItems === true,\n );\n\n const checks: HealthCheck[] = [\n {\n name: \"settings\",\n status: normalizedSettingsReadWarnings.length === 0 ? \"ok\" : \"warn\",\n details: {\n path: settingsPath,\n version: settings.version,\n id_prefix: settings.id_prefix,\n locks_ttl_seconds: settings.locks.ttl_seconds,\n warnings: normalizedSettingsReadWarnings,\n },\n },\n {\n name: \"directories\",\n status: missingDirs.length === 0 ? \"ok\" : \"warn\",\n details: {\n required: requiredDirs,\n optional: optionalDirs,\n missing_required: missingRequiredDirs,\n missing_optional: missingOptionalDirs,\n missing: missingDirs,\n strict_directories: strictDirectories,\n },\n },\n {\n name: \"settings_values\",\n status: settingWarnings.length === 0 ? \"ok\" : \"warn\",\n details: {\n warnings: settingWarnings,\n },\n },\n telemetryCheck.check,\n extensionCheck.check,\n {\n name: \"storage\",\n status: \"ok\",\n details: {\n items: items.length,\n history_streams: historySummary.count,\n },\n },\n integrityCheck.check,\n historyDriftCheck.check,\n vectorizationCheck.check,\n ];\n\n const warnings = [\n ...missingDirs.map((dir) => `missing_directory:${dir}`),\n ...normalizedSettingsReadWarnings,\n ...settingWarnings,\n ...normalizedItemReadWarnings,\n ...telemetryCheck.warnings,\n ...extensionCheck.warnings,\n ...historyPolicy.warnings,\n ...historySummary.warnings,\n ...integrityCheck.warnings,\n ...historyDriftCheck.warnings,\n ...vectorizationCheck.warnings,\n ...hookWarnings,\n ];\n const normalizedWarnings = [...new Set(warnings)];\n return {\n ok: normalizedWarnings.length === 0,\n checks,\n warnings: normalizedWarnings,\n generated_at: nowIso(),\n };\n}\n"]}
|
|
@@ -13,7 +13,7 @@ import { getHistoryPath, getSettingsPath, resolvePmRoot } from "../../core/store
|
|
|
13
13
|
import { readSettings } from "../../core/store/settings.js";
|
|
14
14
|
import { parseLimit } from "../shared-parsers.js";
|
|
15
15
|
const EMPTY_REPLAY_DOCUMENT = {
|
|
16
|
-
|
|
16
|
+
metadata: {},
|
|
17
17
|
body: "",
|
|
18
18
|
};
|
|
19
19
|
function limitEntries(values, limit) {
|
|
@@ -28,10 +28,13 @@ function patchPathToChangedField(path) {
|
|
|
28
28
|
if (path === "/body" || path.startsWith("/body/")) {
|
|
29
29
|
return "body";
|
|
30
30
|
}
|
|
31
|
-
if (path === "/
|
|
32
|
-
|
|
31
|
+
if (path === "/metadata" ||
|
|
32
|
+
path.startsWith("/metadata/") ||
|
|
33
|
+
path === "/front_matter" ||
|
|
34
|
+
path.startsWith("/front_matter/")) {
|
|
35
|
+
const segment = path.replace(/^\/(?:metadata|front_matter)\/?/, "").split("/")[0];
|
|
33
36
|
if (!segment) {
|
|
34
|
-
return "
|
|
37
|
+
return "metadata";
|
|
35
38
|
}
|
|
36
39
|
return decodeJsonPointerSegment(segment);
|
|
37
40
|
}
|
|
@@ -59,26 +62,43 @@ function buildDiffEntries(entries, startIndex) {
|
|
|
59
62
|
}
|
|
60
63
|
function replayHash(document) {
|
|
61
64
|
const itemDocument = {
|
|
62
|
-
|
|
65
|
+
metadata: document.metadata,
|
|
63
66
|
body: document.body,
|
|
64
67
|
};
|
|
65
68
|
return hashDocument(itemDocument);
|
|
66
69
|
}
|
|
70
|
+
function normalizeReplayPatchPath(path) {
|
|
71
|
+
if (path === "/front_matter") {
|
|
72
|
+
return "/metadata";
|
|
73
|
+
}
|
|
74
|
+
if (path.startsWith("/front_matter/")) {
|
|
75
|
+
return `/metadata/${path.slice("/front_matter/".length)}`;
|
|
76
|
+
}
|
|
77
|
+
return path;
|
|
78
|
+
}
|
|
79
|
+
function normalizeReplayPatchOps(patch) {
|
|
80
|
+
return patch.map((operation) => ({
|
|
81
|
+
...operation,
|
|
82
|
+
path: normalizeReplayPatchPath(operation.path),
|
|
83
|
+
from: operation.from ? normalizeReplayPatchPath(operation.from) : undefined,
|
|
84
|
+
}));
|
|
85
|
+
}
|
|
67
86
|
function applyHistoryPatch(current, patch, entryNumber) {
|
|
68
87
|
try {
|
|
69
|
-
const
|
|
88
|
+
const normalizedPatch = normalizeReplayPatchOps(patch);
|
|
89
|
+
const applied = jsonPatch.applyPatch(structuredClone(current), normalizedPatch, true, false).newDocument;
|
|
70
90
|
if (typeof applied !== "object" ||
|
|
71
91
|
applied === null ||
|
|
72
|
-
!("
|
|
92
|
+
!("metadata" in applied) ||
|
|
73
93
|
!("body" in applied) ||
|
|
74
94
|
typeof applied.body !== "string" ||
|
|
75
|
-
typeof applied.
|
|
76
|
-
applied.
|
|
95
|
+
typeof applied.metadata !== "object" ||
|
|
96
|
+
applied.metadata === null) {
|
|
77
97
|
throw new PmCliError(`History replay produced an invalid document shape at entry ${entryNumber}.`, EXIT_CODE.GENERIC_FAILURE);
|
|
78
98
|
}
|
|
79
99
|
const replay = applied;
|
|
80
100
|
return {
|
|
81
|
-
|
|
101
|
+
metadata: replay.metadata,
|
|
82
102
|
body: replay.body,
|
|
83
103
|
};
|
|
84
104
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"history.js","sourceRoot":"/","sources":["cli/commands/history.ts"],"names":[],"mappings":"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","sourcesContent":["import jsonPatch from \"fast-json-patch\";\nimport { pathExists, readFileIfExists } from \"../../core/fs/fs-utils.js\";\nimport { hashDocument, hashEmptyDocument } from \"../../core/history/history.js\";\nimport { enforceHistoryStreamPolicyForItem } from \"../../core/history/history-stream-policy.js\";\nimport { EXIT_CODE } from \"../../core/shared/constants.js\";\nimport { findFirstMergeConflictMarker } from \"../../core/shared/conflict-markers.js\";\nimport type { GlobalOptions } from \"../../core/shared/command-types.js\";\nimport { PmCliError } from \"../../core/shared/errors.js\";\nimport { getActiveExtensionRegistrations, runActiveOnReadHooks } from \"../../core/extensions/index.js\";\nimport { normalizeItemId } from \"../../core/item/id.js\";\nimport { resolveItemTypeRegistry } from \"../../core/item/type-registry.js\";\nimport { locateItem, readLocatedItem } from \"../../core/store/item-store.js\";\nimport { getHistoryPath, getSettingsPath, resolvePmRoot } from \"../../core/store/paths.js\";\nimport { readSettings } from \"../../core/store/settings.js\";\nimport { parseLimit } from \"../shared-parsers.js\";\nimport type { HistoryEntry, HistoryPatchOp, ItemDocument } from \"../../types/index.js\";\n\nexport interface HistoryCommandOptions {\n limit?: string;\n diff?: boolean;\n verify?: boolean;\n}\n\nexport interface HistoryDiffEntry {\n index: number;\n ts: string;\n op: string;\n author: string;\n patch_ops: number;\n changed_fields: string[];\n}\n\nexport interface HistoryVerificationResult {\n ok: boolean;\n entries: number;\n errors: string[];\n latest_after_hash?: string;\n current_item_hash?: string;\n current_matches_latest?: boolean;\n}\n\nexport interface HistoryResult {\n id: string;\n history: HistoryEntry[];\n count: number;\n limit: number | null;\n diff?: HistoryDiffEntry[];\n verification?: HistoryVerificationResult;\n}\n\ninterface ReplayDocument {\n front_matter: Record<string, unknown>;\n body: string;\n}\n\nconst EMPTY_REPLAY_DOCUMENT: ReplayDocument = {\n front_matter: {},\n body: \"\",\n};\n\nfunction limitEntries<T>(values: T[], limit: number | undefined): T[] {\n if (limit === undefined) return values;\n return values.slice(Math.max(0, values.length - limit));\n}\n\nfunction decodeJsonPointerSegment(segment: string): string {\n return segment.replaceAll(\"~1\", \"/\").replaceAll(\"~0\", \"~\");\n}\n\nfunction patchPathToChangedField(path: string): string {\n if (path === \"/body\" || path.startsWith(\"/body/\")) {\n return \"body\";\n }\n if (path === \"/front_matter\" || path.startsWith(\"/front_matter/\")) {\n const segment = path.replace(/^\\/front_matter\\/?/, \"\").split(\"/\")[0];\n if (!segment) {\n return \"front_matter\";\n }\n return decodeJsonPointerSegment(segment);\n }\n const segment = path.replace(/^\\//, \"\").split(\"/\")[0];\n return segment ? decodeJsonPointerSegment(segment) : \"root\";\n}\n\nfunction buildDiffEntries(entries: HistoryEntry[], startIndex: number): HistoryDiffEntry[] {\n return entries.map((entry, index) => {\n const changedFields = new Set<string>();\n for (const op of entry.patch) {\n changedFields.add(patchPathToChangedField(op.path));\n if (op.from) {\n changedFields.add(patchPathToChangedField(op.from));\n }\n }\n return {\n index: startIndex + index + 1,\n ts: entry.ts,\n op: entry.op,\n author: entry.author,\n patch_ops: entry.patch.length,\n changed_fields: [...changedFields].sort((left, right) => left.localeCompare(right)),\n };\n });\n}\n\nfunction replayHash(document: ReplayDocument): string {\n const itemDocument: ItemDocument = {\n front_matter: document.front_matter as unknown as ItemDocument[\"front_matter\"],\n body: document.body,\n };\n return hashDocument(itemDocument);\n}\n\nfunction applyHistoryPatch(current: ReplayDocument, patch: HistoryPatchOp[], entryNumber: number): ReplayDocument {\n try {\n const applied = jsonPatch.applyPatch(structuredClone(current), patch as jsonPatch.Operation[], true, false).newDocument as unknown;\n if (\n typeof applied !== \"object\" ||\n applied === null ||\n !(\"front_matter\" in applied) ||\n !(\"body\" in applied) ||\n typeof (applied as { body: unknown }).body !== \"string\" ||\n typeof (applied as { front_matter: unknown }).front_matter !== \"object\" ||\n (applied as { front_matter: unknown }).front_matter === null\n ) {\n throw new PmCliError(\n `History replay produced an invalid document shape at entry ${entryNumber}.`,\n EXIT_CODE.GENERIC_FAILURE,\n );\n }\n const replay = applied as { front_matter: Record<string, unknown>; body: string };\n return {\n front_matter: replay.front_matter,\n body: replay.body,\n };\n } catch {\n throw new PmCliError(`Failed to apply history patch at entry ${entryNumber}.`, EXIT_CODE.GENERIC_FAILURE);\n }\n}\n\nfunction verifyHistoryChain(entries: HistoryEntry[]): { ok: boolean; errors: string[] } {\n let replay: ReplayDocument = structuredClone(EMPTY_REPLAY_DOCUMENT);\n for (let index = 0; index < entries.length; index += 1) {\n const entry = entries[index];\n const beforeHash = replayHash(replay);\n if (beforeHash !== entry.before_hash) {\n return {\n ok: false,\n errors: [`verify_failed:before_hash_mismatch:entry_${index + 1}`],\n };\n }\n replay = applyHistoryPatch(replay, entry.patch, index + 1);\n const afterHash = replayHash(replay);\n if (afterHash !== entry.after_hash) {\n return {\n ok: false,\n errors: [`verify_failed:after_hash_mismatch:entry_${index + 1}`],\n };\n }\n }\n return {\n ok: true,\n errors: [],\n };\n}\n\nexport async function readHistoryEntries(historyPath: string, itemId: string): Promise<HistoryEntry[]> {\n const raw = await readFileIfExists(historyPath);\n if (raw === null) {\n return [];\n }\n await runActiveOnReadHooks({\n path: historyPath,\n scope: \"project\",\n });\n if (raw.trim() === \"\") {\n return [];\n }\n const conflictMarker = findFirstMergeConflictMarker(raw);\n if (conflictMarker) {\n throw new PmCliError(\n `History for ${itemId} contains merge conflict markers at line ${conflictMarker.line} (${conflictMarker.marker}). Resolve <<<<<<< ======= >>>>>>> markers and retry.`,\n EXIT_CODE.GENERIC_FAILURE,\n {\n code: \"history_merge_conflict_markers_detected\",\n required: \"Repair the history stream by resolving merge-conflict markers.\",\n why: \"Conflict markers break JSONL parsing and invalidate deterministic audit history.\",\n examples: [`pm history ${itemId}`, `pm restore ${itemId} <timestamp-or-version>`],\n nextSteps: [\"Resolve or restore the history file, then rerun the command.\"],\n },\n );\n }\n\n const entries: HistoryEntry[] = [];\n const lines = raw.split(/\\r?\\n/);\n for (let index = 0; index < lines.length; index += 1) {\n const line = lines[index]?.trim();\n if (!line) continue;\n try {\n entries.push(JSON.parse(line) as HistoryEntry);\n } catch {\n throw new PmCliError(\n `History for ${itemId} contains invalid JSON at line ${index + 1}. Repair or restore the history stream and retry.`,\n EXIT_CODE.GENERIC_FAILURE,\n );\n }\n }\n return entries;\n}\n\nexport async function runHistory(id: string, options: HistoryCommandOptions, global: GlobalOptions): Promise<HistoryResult> {\n const pmRoot = resolvePmRoot(process.cwd(), global.path);\n if (!(await pathExists(getSettingsPath(pmRoot)))) {\n throw new PmCliError(`Tracker is not initialized at ${pmRoot}. Run pm init first.`, EXIT_CODE.NOT_FOUND);\n }\n\n const limit = parseLimit(options.limit);\n const settings = await readSettings(pmRoot);\n const typeRegistry = resolveItemTypeRegistry(settings, getActiveExtensionRegistrations());\n const normalizedId = normalizeItemId(id, settings.id_prefix);\n const located = await locateItem(\n pmRoot,\n normalizedId,\n settings.id_prefix,\n settings.item_format,\n typeRegistry.type_to_folder,\n );\n const resolvedId = located?.id ?? normalizedId;\n const historyPath = getHistoryPath(pmRoot, resolvedId);\n if (!located && !(await pathExists(historyPath))) {\n throw new PmCliError(`Item ${id} not found`, EXIT_CODE.NOT_FOUND);\n }\n if (located) {\n await enforceHistoryStreamPolicyForItem({\n pmRoot,\n settings,\n itemId: located.id,\n commandLabel: \"history\",\n });\n }\n\n const fullHistory = await readHistoryEntries(historyPath, resolvedId);\n const history = limitEntries(fullHistory, limit);\n const result: HistoryResult = {\n id: resolvedId,\n history,\n count: history.length,\n limit: limit ?? null,\n };\n\n if (options.diff) {\n result.diff = buildDiffEntries(history, Math.max(0, fullHistory.length - history.length));\n }\n\n if (options.verify) {\n const verification = verifyHistoryChain(fullHistory);\n const latestAfterHash = fullHistory.length > 0 ? fullHistory[fullHistory.length - 1].after_hash : hashEmptyDocument();\n let currentItemHash: string | undefined;\n let currentMatchesLatest: boolean | undefined;\n const errors = [...verification.errors];\n\n if (located) {\n const loaded = await readLocatedItem(located, { schema: settings.schema });\n currentItemHash = hashDocument(loaded.document);\n currentMatchesLatest = currentItemHash === latestAfterHash;\n if (!currentMatchesLatest) {\n errors.push(\"verify_failed:current_item_hash_mismatch\");\n }\n }\n\n result.verification = {\n ok: errors.length === 0,\n entries: fullHistory.length,\n errors,\n latest_after_hash: fullHistory.length > 0 ? fullHistory[fullHistory.length - 1].after_hash : undefined,\n current_item_hash: currentItemHash,\n current_matches_latest: currentMatchesLatest,\n };\n }\n\n return result;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"history.js","sourceRoot":"/","sources":["cli/commands/history.ts"],"names":[],"mappings":"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","sourcesContent":["import jsonPatch from \"fast-json-patch\";\nimport { pathExists, readFileIfExists } from \"../../core/fs/fs-utils.js\";\nimport { hashDocument, hashEmptyDocument } from \"../../core/history/history.js\";\nimport { enforceHistoryStreamPolicyForItem } from \"../../core/history/history-stream-policy.js\";\nimport { EXIT_CODE } from \"../../core/shared/constants.js\";\nimport { findFirstMergeConflictMarker } from \"../../core/shared/conflict-markers.js\";\nimport type { GlobalOptions } from \"../../core/shared/command-types.js\";\nimport { PmCliError } from \"../../core/shared/errors.js\";\nimport { getActiveExtensionRegistrations, runActiveOnReadHooks } from \"../../core/extensions/index.js\";\nimport { normalizeItemId } from \"../../core/item/id.js\";\nimport { resolveItemTypeRegistry } from \"../../core/item/type-registry.js\";\nimport { locateItem, readLocatedItem } from \"../../core/store/item-store.js\";\nimport { getHistoryPath, getSettingsPath, resolvePmRoot } from \"../../core/store/paths.js\";\nimport { readSettings } from \"../../core/store/settings.js\";\nimport { parseLimit } from \"../shared-parsers.js\";\nimport type { HistoryEntry, HistoryPatchOp, ItemDocument } from \"../../types/index.js\";\n\nexport interface HistoryCommandOptions {\n limit?: string;\n diff?: boolean;\n verify?: boolean;\n}\n\nexport interface HistoryDiffEntry {\n index: number;\n ts: string;\n op: string;\n author: string;\n patch_ops: number;\n changed_fields: string[];\n}\n\nexport interface HistoryVerificationResult {\n ok: boolean;\n entries: number;\n errors: string[];\n latest_after_hash?: string;\n current_item_hash?: string;\n current_matches_latest?: boolean;\n}\n\nexport interface HistoryResult {\n id: string;\n history: HistoryEntry[];\n count: number;\n limit: number | null;\n diff?: HistoryDiffEntry[];\n verification?: HistoryVerificationResult;\n}\n\ninterface ReplayDocument {\n metadata: Record<string, unknown>;\n body: string;\n}\n\nconst EMPTY_REPLAY_DOCUMENT: ReplayDocument = {\n metadata: {},\n body: \"\",\n};\n\nfunction limitEntries<T>(values: T[], limit: number | undefined): T[] {\n if (limit === undefined) return values;\n return values.slice(Math.max(0, values.length - limit));\n}\n\nfunction decodeJsonPointerSegment(segment: string): string {\n return segment.replaceAll(\"~1\", \"/\").replaceAll(\"~0\", \"~\");\n}\n\nfunction patchPathToChangedField(path: string): string {\n if (path === \"/body\" || path.startsWith(\"/body/\")) {\n return \"body\";\n }\n if (\n path === \"/metadata\" ||\n path.startsWith(\"/metadata/\") ||\n path === \"/front_matter\" ||\n path.startsWith(\"/front_matter/\")\n ) {\n const segment = path.replace(/^\\/(?:metadata|front_matter)\\/?/, \"\").split(\"/\")[0];\n if (!segment) {\n return \"metadata\";\n }\n return decodeJsonPointerSegment(segment);\n }\n const segment = path.replace(/^\\//, \"\").split(\"/\")[0];\n return segment ? decodeJsonPointerSegment(segment) : \"root\";\n}\n\nfunction buildDiffEntries(entries: HistoryEntry[], startIndex: number): HistoryDiffEntry[] {\n return entries.map((entry, index) => {\n const changedFields = new Set<string>();\n for (const op of entry.patch) {\n changedFields.add(patchPathToChangedField(op.path));\n if (op.from) {\n changedFields.add(patchPathToChangedField(op.from));\n }\n }\n return {\n index: startIndex + index + 1,\n ts: entry.ts,\n op: entry.op,\n author: entry.author,\n patch_ops: entry.patch.length,\n changed_fields: [...changedFields].sort((left, right) => left.localeCompare(right)),\n };\n });\n}\n\nfunction replayHash(document: ReplayDocument): string {\n const itemDocument: ItemDocument = {\n metadata: document.metadata as unknown as ItemDocument[\"metadata\"],\n body: document.body,\n };\n return hashDocument(itemDocument);\n}\n\nfunction normalizeReplayPatchPath(path: string): string {\n if (path === \"/front_matter\") {\n return \"/metadata\";\n }\n if (path.startsWith(\"/front_matter/\")) {\n return `/metadata/${path.slice(\"/front_matter/\".length)}`;\n }\n return path;\n}\n\nfunction normalizeReplayPatchOps(patch: HistoryPatchOp[]): HistoryPatchOp[] {\n return patch.map((operation) => ({\n ...operation,\n path: normalizeReplayPatchPath(operation.path),\n from: operation.from ? normalizeReplayPatchPath(operation.from) : undefined,\n }));\n}\n\nfunction applyHistoryPatch(current: ReplayDocument, patch: HistoryPatchOp[], entryNumber: number): ReplayDocument {\n try {\n const normalizedPatch = normalizeReplayPatchOps(patch);\n const applied = jsonPatch.applyPatch(\n structuredClone(current),\n normalizedPatch as jsonPatch.Operation[],\n true,\n false,\n ).newDocument as unknown;\n if (\n typeof applied !== \"object\" ||\n applied === null ||\n !(\"metadata\" in applied) ||\n !(\"body\" in applied) ||\n typeof (applied as { body: unknown }).body !== \"string\" ||\n typeof (applied as { metadata: unknown }).metadata !== \"object\" ||\n (applied as { metadata: unknown }).metadata === null\n ) {\n throw new PmCliError(\n `History replay produced an invalid document shape at entry ${entryNumber}.`,\n EXIT_CODE.GENERIC_FAILURE,\n );\n }\n const replay = applied as { metadata: Record<string, unknown>; body: string };\n return {\n metadata: replay.metadata,\n body: replay.body,\n };\n } catch {\n throw new PmCliError(`Failed to apply history patch at entry ${entryNumber}.`, EXIT_CODE.GENERIC_FAILURE);\n }\n}\n\nfunction verifyHistoryChain(entries: HistoryEntry[]): { ok: boolean; errors: string[] } {\n let replay: ReplayDocument = structuredClone(EMPTY_REPLAY_DOCUMENT);\n for (let index = 0; index < entries.length; index += 1) {\n const entry = entries[index];\n const beforeHash = replayHash(replay);\n if (beforeHash !== entry.before_hash) {\n return {\n ok: false,\n errors: [`verify_failed:before_hash_mismatch:entry_${index + 1}`],\n };\n }\n replay = applyHistoryPatch(replay, entry.patch, index + 1);\n const afterHash = replayHash(replay);\n if (afterHash !== entry.after_hash) {\n return {\n ok: false,\n errors: [`verify_failed:after_hash_mismatch:entry_${index + 1}`],\n };\n }\n }\n return {\n ok: true,\n errors: [],\n };\n}\n\nexport async function readHistoryEntries(historyPath: string, itemId: string): Promise<HistoryEntry[]> {\n const raw = await readFileIfExists(historyPath);\n if (raw === null) {\n return [];\n }\n await runActiveOnReadHooks({\n path: historyPath,\n scope: \"project\",\n });\n if (raw.trim() === \"\") {\n return [];\n }\n const conflictMarker = findFirstMergeConflictMarker(raw);\n if (conflictMarker) {\n throw new PmCliError(\n `History for ${itemId} contains merge conflict markers at line ${conflictMarker.line} (${conflictMarker.marker}). Resolve <<<<<<< ======= >>>>>>> markers and retry.`,\n EXIT_CODE.GENERIC_FAILURE,\n {\n code: \"history_merge_conflict_markers_detected\",\n required: \"Repair the history stream by resolving merge-conflict markers.\",\n why: \"Conflict markers break JSONL parsing and invalidate deterministic audit history.\",\n examples: [`pm history ${itemId}`, `pm restore ${itemId} <timestamp-or-version>`],\n nextSteps: [\"Resolve or restore the history file, then rerun the command.\"],\n },\n );\n }\n\n const entries: HistoryEntry[] = [];\n const lines = raw.split(/\\r?\\n/);\n for (let index = 0; index < lines.length; index += 1) {\n const line = lines[index]?.trim();\n if (!line) continue;\n try {\n entries.push(JSON.parse(line) as HistoryEntry);\n } catch {\n throw new PmCliError(\n `History for ${itemId} contains invalid JSON at line ${index + 1}. Repair or restore the history stream and retry.`,\n EXIT_CODE.GENERIC_FAILURE,\n );\n }\n }\n return entries;\n}\n\nexport async function runHistory(id: string, options: HistoryCommandOptions, global: GlobalOptions): Promise<HistoryResult> {\n const pmRoot = resolvePmRoot(process.cwd(), global.path);\n if (!(await pathExists(getSettingsPath(pmRoot)))) {\n throw new PmCliError(`Tracker is not initialized at ${pmRoot}. Run pm init first.`, EXIT_CODE.NOT_FOUND);\n }\n\n const limit = parseLimit(options.limit);\n const settings = await readSettings(pmRoot);\n const typeRegistry = resolveItemTypeRegistry(settings, getActiveExtensionRegistrations());\n const normalizedId = normalizeItemId(id, settings.id_prefix);\n const located = await locateItem(\n pmRoot,\n normalizedId,\n settings.id_prefix,\n settings.item_format,\n typeRegistry.type_to_folder,\n );\n const resolvedId = located?.id ?? normalizedId;\n const historyPath = getHistoryPath(pmRoot, resolvedId);\n if (!located && !(await pathExists(historyPath))) {\n throw new PmCliError(`Item ${id} not found`, EXIT_CODE.NOT_FOUND);\n }\n if (located) {\n await enforceHistoryStreamPolicyForItem({\n pmRoot,\n settings,\n itemId: located.id,\n commandLabel: \"history\",\n });\n }\n\n const fullHistory = await readHistoryEntries(historyPath, resolvedId);\n const history = limitEntries(fullHistory, limit);\n const result: HistoryResult = {\n id: resolvedId,\n history,\n count: history.length,\n limit: limit ?? null,\n };\n\n if (options.diff) {\n result.diff = buildDiffEntries(history, Math.max(0, fullHistory.length - history.length));\n }\n\n if (options.verify) {\n const verification = verifyHistoryChain(fullHistory);\n const latestAfterHash = fullHistory.length > 0 ? fullHistory[fullHistory.length - 1].after_hash : hashEmptyDocument();\n let currentItemHash: string | undefined;\n let currentMatchesLatest: boolean | undefined;\n const errors = [...verification.errors];\n\n if (located) {\n const loaded = await readLocatedItem(located, { schema: settings.schema });\n currentItemHash = hashDocument(loaded.document);\n currentMatchesLatest = currentItemHash === latestAfterHash;\n if (!currentMatchesLatest) {\n errors.push(\"verify_failed:current_item_hash_mismatch\");\n }\n }\n\n result.verification = {\n ok: errors.length === 0,\n entries: fullHistory.length,\n errors,\n latest_after_hash: fullHistory.length > 0 ? fullHistory[fullHistory.length - 1].after_hash : undefined,\n current_item_hash: currentItemHash,\n current_matches_latest: currentMatchesLatest,\n };\n }\n\n return result;\n}\n"]}
|
|
@@ -15,6 +15,7 @@ export { runDelete, type DeleteCommandOptions, type DeleteResult } from "./delet
|
|
|
15
15
|
export { runDeps, DEPS_FORMAT_VALUES, type DepsCommandOptions, type DepsFormat, type DepsResult } from "./deps.js";
|
|
16
16
|
export { runDedupeAudit, DEDUPE_AUDIT_MODES, type DedupeAuditMode, type DedupeAuditOptions, type DedupeAuditResult } from "./dedupe-audit.js";
|
|
17
17
|
export { runDocs } from "./docs.js";
|
|
18
|
+
export { GUIDE_DEPTH_VALUES, GUIDE_OUTPUT_VALUES, renderGuideMarkdown, resolveGuideOutputFormat, runGuide, type GuideDepth, type GuideOptions, type GuideOutputFormat, type GuideResult, } from "./guide.js";
|
|
18
19
|
export { runExtension, type ExtensionCommandOptions, type ExtensionCommandResult } from "./extension.js";
|
|
19
20
|
export { runFiles, runFilesDiscover } from "./files.js";
|
|
20
21
|
export { runGc } from "./gc.js";
|
|
@@ -15,6 +15,7 @@ export { runDelete } from "./delete.js";
|
|
|
15
15
|
export { runDeps, DEPS_FORMAT_VALUES } from "./deps.js";
|
|
16
16
|
export { runDedupeAudit, DEDUPE_AUDIT_MODES } from "./dedupe-audit.js";
|
|
17
17
|
export { runDocs } from "./docs.js";
|
|
18
|
+
export { GUIDE_DEPTH_VALUES, GUIDE_OUTPUT_VALUES, renderGuideMarkdown, resolveGuideOutputFormat, runGuide, } from "./guide.js";
|
|
18
19
|
export { runExtension } from "./extension.js";
|
|
19
20
|
export { runFiles, runFilesDiscover } from "./files.js";
|
|
20
21
|
export { runGc } from "./gc.js";
|