pm-changelog 2026.9.2 → 2026.9.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # Changelog
2
2
 
3
+ ## 2026.9.6 - 2026-09-06
4
+
5
+ ### Other
6
+
7
+ - Pin pm-cli 2026.9.5 and rename extension --explain ([pmc-662o](https://github.com/unbraind/pm-changelog/blob/main/.agents/pm/chores/pmc-662o.toon))
8
+
3
9
  ## 2026.9.2 - 2026-09-02
4
10
 
5
11
  ### Fixed
@@ -1 +1 @@
1
- {"version":3,"file":"extension.d.ts","sourceRoot":"","sources":["../src/extension.ts"],"names":[],"mappings":"AAGA,OAAO,EAGL,UAAU,EACV,eAAe,EACf,YAAY,EACZ,uBAAuB,EAGxB,MAAM,uBAAuB,CAAC;AAU/B,OAAO,KAAK,EAAoB,qBAAqB,EAAsB,MAAM,EAAE,MAAM,YAAY,CAAC;AAEtG;;;;;GAKG;AACH,UAAU,qBAAqB;IAC7B,mBAAmB,EAAE,IAAI,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,0FAA0F;AAC1F,UAAU,0BAA0B;IAClC,YAAY,EAAE,OAAO,YAAY,CAAC;IAClC,uBAAuB,EAAE,OAAO,uBAAuB,CAAC;IACxD,UAAU,EAAE,OAAO,UAAU,CAAC;IAC9B,eAAe,EAAE,OAAO,eAAe,CAAC;CACzC;AASD,+FAA+F;AAC/F,iBAAS,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,qBAAqB,CAS/E;AAED,2FAA2F;AAC3F,iBAAS,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,qBAAqB,CAUpE;AAED,wFAAwF;AACxF,iBAAS,mBAAmB,CAAC,OAAO,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAErF;;;;;;;AAyYD;;;;;;GAMG;AACH,iBAAe,gBAAgB,CAC7B,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EAAE,EACf,YAAY,GAAE,0BAAyD,GACtE,OAAO,CAAC,IAAI,CAAC,CAqCf;AAED;;;;;GAKG;AACH,iBAAS,yBAAyB,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,CASzD;AAED;;qEAEqE;AACrE,iBAAS,6BAA6B,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,CAQ7D;AAED,iBAAS,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAG9G;AAED,iBAAS,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEpG;AAED;;;2EAG2E;AAC3E,iBAAS,kBAAkB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,qBAAqB,GAAG,SAAS,CAQ/F;AAED;;iBAEiB;AACjB,iBAAS,iBAAiB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,EAAE,GAAG,SAAS,CAQjF;AAED;;;;+EAI+E;AAC/E,iBAAS,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,GAAG,SAAS,CAQ9E;AAED;;;sDAGsD;AACtD,iBAAS,sBAAsB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,GAAG,SAAS,CAQpF;AAED,gFAAgF;AAChF,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;CAchC,CAAC"}
1
+ {"version":3,"file":"extension.d.ts","sourceRoot":"","sources":["../src/extension.ts"],"names":[],"mappings":"AAGA,OAAO,EAGL,UAAU,EACV,eAAe,EACf,YAAY,EACZ,uBAAuB,EAGxB,MAAM,uBAAuB,CAAC;AAU/B,OAAO,KAAK,EAAoB,qBAAqB,EAAsB,MAAM,EAAE,MAAM,YAAY,CAAC;AAEtG;;;;;GAKG;AACH,UAAU,qBAAqB;IAC7B,mBAAmB,EAAE,IAAI,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,0FAA0F;AAC1F,UAAU,0BAA0B;IAClC,YAAY,EAAE,OAAO,YAAY,CAAC;IAClC,uBAAuB,EAAE,OAAO,uBAAuB,CAAC;IACxD,UAAU,EAAE,OAAO,UAAU,CAAC;IAC9B,eAAe,EAAE,OAAO,eAAe,CAAC;CACzC;AASD,+FAA+F;AAC/F,iBAAS,uBAAuB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,qBAAqB,CAS/E;AAED,2FAA2F;AAC3F,iBAAS,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG,qBAAqB,CAUpE;AAED,wFAAwF;AACxF,iBAAS,mBAAmB,CAAC,OAAO,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,SAAS,GAAG,MAAM,GAAG,IAAI,CAErF;;;;;;;AA8YD;;;;;;GAMG;AACH,iBAAe,gBAAgB,CAC7B,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,EAAE,EACf,YAAY,GAAE,0BAAyD,GACtE,OAAO,CAAC,IAAI,CAAC,CAqCf;AAED;;;;;GAKG;AACH,iBAAS,yBAAyB,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,CASzD;AAED;;qEAEqE;AACrE,iBAAS,6BAA6B,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,CAQ7D;AAED,iBAAS,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAG9G;AAED,iBAAS,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAEpG;AAED;;;2EAG2E;AAC3E,iBAAS,kBAAkB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,qBAAqB,GAAG,SAAS,CAQ/F;AAED;;iBAEiB;AACjB,iBAAS,iBAAiB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,EAAE,GAAG,SAAS,CAQjF;AAED;;;;+EAI+E;AAC/E,iBAAS,gBAAgB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,GAAG,SAAS,CAQ9E;AAED;;;sDAGsD;AACtD,iBAAS,sBAAsB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,GAAG,SAAS,CAQpF;AAED,gFAAgF;AAChF,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;CAchC,CAAC"}
package/dist/extension.js CHANGED
@@ -36,7 +36,7 @@ function renderCommandResult(context) {
36
36
  }
37
37
  export default defineExtension({
38
38
  name: "pm-changelog",
39
- version: "2026.9.2",
39
+ version: "2026.9.8",
40
40
  activate(api) {
41
41
  api.registerCommand({
42
42
  name: "changelog generate",
@@ -50,6 +50,7 @@ export default defineExtension({
50
50
  "pm changelog generate --output RELEASE_NOTES.md --since 2026-05-01",
51
51
  "pm changelog generate --stdout --group-by release",
52
52
  "pm changelog generate --stdout --group-by milestone",
53
+ "pm changelog generate --stdout --explain-selection",
53
54
  "pm changelog generate --check --mode prepend --release-version 1.2.0",
54
55
  ],
55
56
  flags: [
@@ -80,7 +81,7 @@ export default defineExtension({
80
81
  { long: "--emoji-prefix", description: "Prefix section headings with conventional emoji (Added 🎉, Fixed 🐛, ...)" },
81
82
  { long: "--include-metadata", description: "Append compact item metadata (type/status/priority/release/milestone) to each entry" },
82
83
  { long: "--changelog-json", description: "Return the full structured changelog document (releases->sections->items)" },
83
- { long: "--explain", description: "Return item-selection diagnostics (counts, exclusions, hints)" },
84
+ { long: "--explain-selection", description: "Return item-selection diagnostics (counts, exclusions, hints)" },
84
85
  { long: "--summary", description: "Return a compact one-line-per-change summary instead of full markdown" },
85
86
  { long: "--format", value_name: "md|json", description: "Output format: md (default) or json for machine-readable output" },
86
87
  { long: "--mode", value_name: "mode", description: "replace or prepend existing changelog (default: replace)" },
@@ -200,7 +201,11 @@ export default defineExtension({
200
201
  respectItemRelease: booleanOption(ctx.options, "respect-item-release", "respectItemRelease"),
201
202
  excludeTags: excludeTagsOption(ctx.options),
202
203
  };
203
- const selectionReport = booleanOption(ctx.options, "explain", "explain")
204
+ // pm-cli 2026.9.5 owns `--explain` as root-help expansion, so the
205
+ // extension cannot declare that spelling. Selection diagnostics stay
206
+ // available under `--explain-selection`; the standalone CLI keeps
207
+ // `--explain` because it is not a pm subcommand.
208
+ const selectionReport = booleanOption(ctx.options, "explain-selection", "explainSelection")
204
209
  ? explainChangelogSelection(generationOptions)
205
210
  : undefined;
206
211
  // OPT-IN (`--format json` without `--summary`): alias for the structured
@@ -1 +1 @@
1
- {"version":3,"file":"extension.js","sourceRoot":"","sources":["../src/extension.ts"],"names":[],"mappings":"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","sourcesContent":["import { writeFileSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\n\nimport {\n defineExtension,\n listAllItemMetadata,\n locateItem,\n readLocatedItem,\n readSettings,\n resolveItemTypeRegistry,\n EXIT_CODE,\n PmCliError,\n} from \"@unbrained/pm-cli/sdk\";\nimport type { ImportExportRegistrationOptions } from \"@unbrained/pm-cli/sdk/authoring\";\n\nimport { buildChangelogDocument, createChangelog, createChangelogSummary, explainChangelogSelection, formatSummaryLine, mergeChangelog, suggestSemver, writeChangelog } from \"./generator.ts\";\nimport {\n MissingTagHistoryError,\n resolveGenerationReleaseWindows,\n resolveReleaseContext,\n resolveReleaseTagWindowResolution,\n} from \"./release-context.ts\";\nimport type { ChangelogGroupBy, ChangelogItemRefStyle, ChangelogSectionBy, PmItem } from \"./types.ts\";\n\n/**\n * Marks a command result as JSON text that pm-changelog has already rendered.\n *\n * Scoped host ownership ensures only changelog commands can route this marker\n * to the extension's toon and JSON renderer callbacks.\n */\ninterface RenderedCommandResult {\n pmChangelogRendered: true;\n output: string;\n}\n\n/** SDK operations used to enrich body previews, injectable at the filesystem boundary. */\ninterface BodyEnrichmentDependencies {\n readSettings: typeof readSettings;\n resolveItemTypeRegistry: typeof resolveItemTypeRegistry;\n locateItem: typeof locateItem;\n readLocatedItem: typeof readLocatedItem;\n}\n\nconst BODY_ENRICHMENT_DEPENDENCIES: BodyEnrichmentDependencies = {\n readSettings,\n resolveItemTypeRegistry,\n locateItem,\n readLocatedItem,\n};\n\n/** Determine whether an unknown command result carries valid pre-rendered changelog output. */\nfunction isRenderedCommandResult(value: unknown): value is RenderedCommandResult {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"pmChangelogRendered\" in value &&\n value.pmChangelogRendered === true &&\n \"output\" in value &&\n typeof value.output === \"string\"\n );\n}\n\n/** Serialize a structured changelog value into the marker consumed by scoped renderers. */\nfunction renderedCommandResult(value: unknown): RenderedCommandResult {\n // `value` is `unknown`, so `undefined`/functions/symbols are reachable inputs;\n // `JSON.stringify` returns `undefined` for those, which would print the literal\n // string \"undefined\" instead of JSON. Reject rather than emit invalid output.\n const serialized = JSON.stringify(value, null, 2);\n if (serialized === undefined) {\n throw new TypeError(\"Rendered changelog value is not JSON-serializable\");\n }\n const output = `${serialized}\\n`;\n return { pmChangelogRendered: true, output };\n}\n\n/** Return owned pre-rendered output or defer unrelated results to the host renderer. */\nfunction renderCommandResult(context: { result?: unknown } | undefined): string | null {\n return isRenderedCommandResult(context?.result) ? context.result.output : null;\n}\n\nexport default defineExtension({\n name: \"pm-changelog\",\n version: \"2026.9.2\",\n\n activate(api) {\n api.registerCommand({\n name: \"changelog generate\",\n description: \"Generate a CHANGELOG.md file from pm items.\",\n intent: \"generate changelog release notes from completed pm items\",\n examples: [\n \"pm changelog generate\",\n \"pm changelog generate --release-version 1.2.0\",\n \"pm changelog generate --release-version-from-package --since-previous-tag --until-release-tag\",\n \"pm changelog generate --all-release-tags --mode replace\",\n \"pm changelog generate --output RELEASE_NOTES.md --since 2026-05-01\",\n \"pm changelog generate --stdout --group-by release\",\n \"pm changelog generate --stdout --group-by milestone\",\n \"pm changelog generate --check --mode prepend --release-version 1.2.0\",\n ],\n flags: [\n { long: \"--output\", value_name: \"file\", description: \"Output file path (default: CHANGELOG.md)\" },\n { long: \"--stdout\", description: \"Return markdown instead of writing a file\" },\n { long: \"--title\", value_name: \"text\", description: \"Changelog title (default: Changelog)\" },\n { long: \"--release-version\", value_name: \"version\", description: \"Release/version heading (default: Unreleased)\" },\n { long: \"--release-version-from-package\", description: \"Read release/version heading from nearest package.json\" },\n { long: \"--date\", value_name: \"date\", description: \"Unconditional release heading date override (recommended: YYYY-MM-DD)\" },\n { long: \"--date-fallback\", value_name: \"date\", description: \"Use this heading date only when no release tag exists\" },\n { long: \"--date-from-version\", description: \"Derive the no-tag fallback from a YYYY.M.D release version\" },\n { long: \"--since\", value_name: \"date\", description: \"Include items changed on or after this date\" },\n { long: \"--since-previous-tag\", description: \"Derive --since from the previous git tag\" },\n { long: \"--until\", value_name: \"date\", description: \"Include items changed on or before this date\" },\n { long: \"--until-release-tag\", description: \"Derive --until from the current release tag when it exists\" },\n { long: \"--all-release-tags\", description: \"Rebuild full history from git release tag windows\" },\n { long: \"--release-tag-pattern\", value_name: \"glob\", description: \"Git tag glob for --all-release-tags (default: v*)\" },\n { long: \"--status\", value_name: \"list\", description: \"Comma-separated statuses (default: closed)\" },\n { long: \"--group-by\", value_name: \"mode\", description: \"version, release, or milestone (default: version)\" },\n { long: \"--section-by\", value_name: \"mode\", description: \"Within-release grouping: category, type, status, or label (default: category)\" },\n { long: \"--conventional\", description: \"Use Conventional-Commits headings (Features/Bug Fixes/...) for category grouping\" },\n { long: \"--contributors\", description: \"Append a Contributors list per release from item assignee/author\" },\n { long: \"--limit\", value_name: \"n\", description: \"Keep only the most recent N release sections (history modes only)\" },\n { long: \"--since-version\", value_name: \"version\", description: \"Keep only releases at or newer than this version (history modes only)\" },\n { long: \"--breaking-changes\", description: \"Emit a Breaking Changes section listing items detected as breaking\" },\n { long: \"--suggest-semver\", description: \"Return a suggested semver bump (major/minor/patch); never writes the changelog\" },\n { long: \"--body-preview\", value_name: \"n\", description: \"Append the first N chars of each item body to its entry\" },\n { long: \"--emoji-prefix\", description: \"Prefix section headings with conventional emoji (Added 🎉, Fixed 🐛, ...)\" },\n { long: \"--include-metadata\", description: \"Append compact item metadata (type/status/priority/release/milestone) to each entry\" },\n { long: \"--changelog-json\", description: \"Return the full structured changelog document (releases->sections->items)\" },\n { long: \"--explain\", description: \"Return item-selection diagnostics (counts, exclusions, hints)\" },\n { long: \"--summary\", description: \"Return a compact one-line-per-change summary instead of full markdown\" },\n { long: \"--format\", value_name: \"md|json\", description: \"Output format: md (default) or json for machine-readable output\" },\n { long: \"--mode\", value_name: \"mode\", description: \"replace or prepend existing changelog (default: replace)\" },\n { long: \"--include-empty\", description: \"Emit an empty release section when no items match\" },\n { long: \"--include-links\", description: \"Include item URLs in generated entries (default: false)\" },\n { long: \"--item-url-base\", value_name: \"url\", description: \"Make item IDs clickable links to .toon files under the base URL\" },\n { long: \"--item-ref-style\", value_name: \"style\", description: \"How item IDs render: auto (default), label (neutral/public-safe), toon (force blob link), github (public issue/PR link from gh:owner/repo#N provenance tag)\" },\n { long: \"--exclude-tag\", value_name: \"list\", description: \"Omit items carrying any of these comma-separated tags (ignore convention, e.g. changelog:ignore)\" },\n { long: \"--respect-item-release\", description: \"Treat an item release field as the authority for its single version window: keep it when it matches the release version regardless of timestamps, drop it otherwise (--all-release-tags always honors the field)\" },\n { long: \"--no-pending-release\", description: \"Nothing is being released right now: suppress the pending release window for an untagged package version\" },\n { long: \"--check\", description: \"Do not write; report whether the changelog would change\" },\n ],\n async run(ctx) {\n const output = (ctx.options[\"output\"] as string | undefined) ?? \"CHANGELOG.md\";\n const stdout = Boolean(ctx.options[\"stdout\"]);\n const groupByOption = stringOption(ctx.options, \"group-by\", \"groupBy\") ?? \"version\";\n const modeOption = (ctx.options[\"mode\"] as string | undefined) ?? \"replace\";\n\n // Throw (with a numeric exitCode) rather than returning { error }: the\n // runtime treats a returned object as a successful run (exit 0), so a\n // returned error silently passed validation failures. A PmCliError\n // carries its exitCode so the handler exits non-zero and runs once.\n if (groupByOption !== \"version\" && groupByOption !== \"release\" && groupByOption !== \"milestone\") {\n throw new PmCliError(\"--group-by must be 'version', 'release', or 'milestone'\", EXIT_CODE.USAGE);\n }\n if (modeOption !== \"replace\" && modeOption !== \"prepend\") {\n throw new PmCliError(\"--mode must be 'replace' or 'prepend'\", EXIT_CODE.USAGE);\n }\n const sectionByOption = stringOption(ctx.options, \"section-by\", \"sectionBy\") ?? \"category\";\n if (sectionByOption !== \"category\" && sectionByOption !== \"type\" && sectionByOption !== \"status\" && sectionByOption !== \"label\") {\n throw new PmCliError(\"--section-by must be 'category', 'type', 'status', or 'label'\", EXIT_CODE.USAGE);\n }\n // Validate --format up front (matching `changelog export`) instead of\n // silently treating unsupported values as the default markdown output.\n const formatOption = stringOption(ctx.options, \"format\", \"format\");\n const normalizedFormat = formatOption?.trim().toLowerCase();\n if (normalizedFormat !== undefined && normalizedFormat !== \"md\" && normalizedFormat !== \"markdown\" && normalizedFormat !== \"json\") {\n throw new PmCliError(\"--format must be 'md' or 'json'\", EXIT_CODE.USAGE);\n }\n const wantsJsonFormat = normalizedFormat === \"json\";\n const limitValue = parseLimitOption(ctx.options);\n const groupBy: ChangelogGroupBy = groupByOption;\n const sectionBy: ChangelogSectionBy = sectionByOption;\n const mode: \"replace\" | \"prepend\" = modeOption;\n\n const statuses = (ctx.options[\"status\"] as string | undefined)\n ?.split(\",\")\n .map((status) => status.trim())\n .filter(Boolean);\n\n const allReleaseTags = booleanOption(ctx.options, \"all-release-tags\", \"allReleaseTags\");\n const releaseVersion = stringOption(ctx.options, \"release-version\", \"releaseVersion\");\n const titleOption = stringOption(ctx.options, \"title\", \"title\");\n const dateOption = stringOption(ctx.options, \"date\", \"date\");\n const dateFallback = stringOption(ctx.options, \"date-fallback\", \"dateFallback\");\n const dateFromVersion = booleanOption(ctx.options, \"date-from-version\", \"dateFromVersion\");\n const sinceOption = stringOption(ctx.options, \"since\", \"since\");\n const untilOption = stringOption(ctx.options, \"until\", \"until\");\n const releaseContext = withReleaseContextDiagnostics(() => resolveReleaseContext({\n cwd: ctx.pm_root,\n version: releaseVersion,\n versionFromPackage: booleanOption(ctx.options, \"release-version-from-package\", \"releaseVersionFromPackage\"),\n dateFallback,\n dateFromVersion,\n since: sinceOption,\n sincePreviousTag: booleanOption(ctx.options, \"since-previous-tag\", \"sincePreviousTag\"),\n until: untilOption,\n untilReleaseTag: booleanOption(ctx.options, \"until-release-tag\", \"untilReleaseTag\"),\n }));\n // Same policy as the CLI: forward the resolved windows and the\n // suppressed pending release (so items declaring that version land\n // under `Unreleased`, not an older real release), spelling an empty\n // resolution as absent history so a pre-first-release repository keeps\n // the single-section `## Unreleased` fallback.\n const windowResolution = allReleaseTags\n ? withTagHistoryDiagnostics(() => resolveReleaseTagWindowResolution({\n cwd: ctx.pm_root,\n tagPattern: stringOption(ctx.options, \"release-tag-pattern\", \"releaseTagPattern\"),\n includeOrphaned: true,\n pendingVersion: releaseContext.version,\n pendingTimestamp: untilOption ?? dateOption ?? releaseContext.date,\n pendingRelease: booleanOption(ctx.options, \"no-pending-release\", \"noPendingRelease\") ? false : undefined,\n }))\n : undefined;\n const { releaseWindows, suppressedPendingRelease } = windowResolution\n ? resolveGenerationReleaseWindows(windowResolution)\n : {};\n\n const items = await listAllItemMetadata(ctx.pm_root);\n const bodyPreview = parseBodyPreviewOption(ctx.options);\n // listAllItemMetadata omits item bodies, so --body-preview would silently\n // render nothing (GH #27). Load bodies on demand only when previewing.\n if (bodyPreview !== undefined && bodyPreview > 0) {\n await enrichItemBodies(ctx.pm_root, items);\n }\n const generationOptions = {\n items,\n title: titleOption,\n version: releaseContext.version,\n date: dateOption ?? releaseContext.date,\n since: releaseContext.since,\n until: releaseContext.until,\n releaseWindows,\n suppressedPendingRelease,\n includeStatuses: statuses,\n groupBy,\n sectionBy,\n conventional: booleanOption(ctx.options, \"conventional\", \"conventional\"),\n contributors: booleanOption(ctx.options, \"contributors\", \"contributors\"),\n limit: limitValue,\n sinceVersion: stringOption(ctx.options, \"since-version\", \"sinceVersion\"),\n breakingChanges: booleanOption(ctx.options, \"breaking-changes\", \"breakingChanges\"),\n bodyPreview,\n emojiPrefix: booleanOption(ctx.options, \"emoji-prefix\", \"emojiPrefix\"),\n includeMetadata: booleanOption(ctx.options, \"include-metadata\", \"includeMetadata\"),\n suggestSemver: booleanOption(ctx.options, \"suggest-semver\", \"suggestSemver\"),\n includeEmpty: booleanOption(ctx.options, \"include-empty\", \"includeEmpty\"),\n includeLinks: booleanOption(ctx.options, \"include-links\", \"includeLinks\"),\n itemUrlBase: stringOption(ctx.options, \"item-url-base\", \"itemUrlBase\"),\n itemRefStyle: itemRefStyleOption(ctx.options),\n respectItemRelease: booleanOption(ctx.options, \"respect-item-release\", \"respectItemRelease\"),\n excludeTags: excludeTagsOption(ctx.options),\n };\n const selectionReport = booleanOption(ctx.options, \"explain\", \"explain\")\n ? explainChangelogSelection(generationOptions)\n : undefined;\n\n // OPT-IN (`--format json` without `--summary`): alias for the structured\n // --changelog-json document so agents have a single --format flag.\n const summaryOption = booleanOption(ctx.options, \"summary\", \"summary\");\n\n // OPT-IN (`--summary`): compact one-line-per-change output for quick\n // agent scanning. Never writes a file.\n if (summaryOption) {\n const entries = createChangelogSummary(generationOptions);\n if (wantsJsonFormat) {\n return renderedCommandResult({\n entries,\n format: \"json\",\n item_count: entries.length,\n ...(selectionReport ? { selection_report: selectionReport } : {}),\n });\n }\n const lines = entries.map((entry) => formatSummaryLine(entry));\n return {\n summary: lines.join(\"\\n\"),\n format: \"text\",\n item_count: entries.length,\n ...(selectionReport ? { selection_report: selectionReport } : {}),\n };\n }\n\n // OPT-IN (`--changelog-json` or `--format json`): structured document;\n // never writes a file. `--suggest-semver` keeps its dedicated JSON shape\n // below instead of being aliased to the full document.\n const suggestSemverOption = booleanOption(ctx.options, \"suggest-semver\", \"suggestSemver\");\n if (booleanOption(ctx.options, \"changelog-json\", \"changelogJson\") || (wantsJsonFormat && !suggestSemverOption)) {\n const document = buildChangelogDocument(generationOptions);\n return renderedCommandResult({\n document,\n format: \"json\",\n item_count: document.item_count,\n ...(selectionReport ? { selection_report: selectionReport } : {}),\n });\n }\n\n // OPT-IN (`--suggest-semver`) standalone: emit only the semver analysis;\n // never writes a file and never alters default markdown.\n if (suggestSemverOption) {\n const suggestion = suggestSemver(generationOptions);\n return renderedCommandResult({\n suggested_semver: suggestion,\n format: \"json\",\n ...(selectionReport ? { selection_report: selectionReport } : {}),\n });\n }\n\n const generated = createChangelog(generationOptions);\n\n if (stdout) {\n const merged = mode === \"prepend\"\n ? mergeChangelog(undefined, generated.markdown, { title: titleOption })\n : { markdown: generated.markdown, action: \"replaced\" as const, changed: true };\n return {\n changelog: merged.markdown,\n action: merged.action,\n changed: merged.changed,\n item_count: generated.itemCount,\n ...(selectionReport ? { selection_report: selectionReport } : {}),\n };\n }\n\n const result = writeChangelog({\n ...generationOptions,\n output,\n mode,\n check: Boolean(ctx.options[\"check\"]),\n });\n if (result.changed && Boolean(ctx.options[\"check\"])) {\n throw new PmCliError(`Changelog is out of date: ${result.output}`, EXIT_CODE.GENERIC_FAILURE);\n }\n return {\n file: result.output,\n action: result.action,\n changed: result.changed,\n item_count: result.itemCount,\n bytes: result.bytes,\n check: Boolean(ctx.options[\"check\"]),\n ...(selectionReport ? { selection_report: selectionReport } : {}),\n };\n },\n });\n\n // -----------------------------------------------------------------------\n // Exporter: `pm changelog export` — native export pipeline.\n // Reuses the same generation core as `changelog generate` (whose default\n // output is intentionally left byte-identical). Adds --format md|json and a\n // --release-notes concise mode. Does NOT write CHANGELOG.md unless --output\n // is given, so it is side-effect free by default.\n // -----------------------------------------------------------------------\n const changelogExportMetadata: ImportExportRegistrationOptions = {\n description: \"Export changelog or release notes through the pm import/export pipeline.\",\n intent: \"export changelog release notes as markdown or json\",\n examples: [\n \"pm changelog export\",\n \"pm changelog export --format json\",\n \"pm changelog export --release-notes --since-previous-tag --until-release-tag\",\n \"pm changelog export --output RELEASE_NOTES.md --release-version-from-package\",\n ],\n flags: [\n { long: \"--format\", value_name: \"md|json\", description: \"Export format (default: md)\" },\n { long: \"--output\", value_name: \"file\", description: \"Write output to a file instead of stdout\" },\n { long: \"--release-notes\", description: \"Use a concise release-notes title and output shape\" },\n { long: \"--title\", value_name: \"text\", description: \"Output title (default: Changelog or Release Notes)\" },\n { long: \"--release-version\", value_name: \"version\", description: \"Release/version heading (default: Unreleased)\" },\n { long: \"--release-version-from-package\", description: \"Read release/version heading from nearest package.json\" },\n { long: \"--date\", value_name: \"date\", description: \"Unconditional release heading date override (recommended: YYYY-MM-DD)\" },\n { long: \"--date-fallback\", value_name: \"date\", description: \"Use this heading date only when no release tag exists\" },\n { long: \"--date-from-version\", description: \"Derive the no-tag fallback from a YYYY.M.D release version\" },\n { long: \"--since\", value_name: \"date\", description: \"Include items changed on or after this date\" },\n { long: \"--since-previous-tag\", description: \"Derive --since from the previous git tag\" },\n { long: \"--until\", value_name: \"date\", description: \"Include items changed on or before this date\" },\n { long: \"--until-release-tag\", description: \"Derive --until from the current release tag when it exists\" },\n { long: \"--status\", value_name: \"list\", description: \"Comma-separated statuses (default: closed)\" },\n { long: \"--group-by\", value_name: \"mode\", description: \"version, release, or milestone (default: version)\" },\n { long: \"--include-empty\", description: \"Emit an empty release section when no items match\" },\n { long: \"--include-links\", description: \"Include item URLs in generated entries (default: false)\" },\n { long: \"--include-metadata\", description: \"Append compact item metadata (type/status/priority/release/milestone) to each entry\" },\n { long: \"--item-url-base\", value_name: \"url\", description: \"Make item IDs clickable links to .toon files under the base URL\" },\n { long: \"--item-ref-style\", value_name: \"style\", description: \"How item IDs render: auto (default), label (neutral/public-safe), toon (force blob link), github (public issue/PR link from gh:owner/repo#N provenance tag)\" },\n { long: \"--exclude-tag\", value_name: \"list\", description: \"Omit items carrying any of these comma-separated tags (ignore convention, e.g. changelog:ignore)\" },\n { long: \"--respect-item-release\", description: \"Treat an item release field as the authority for its single version window: keep it when it matches the release version regardless of timestamps, drop it otherwise (--all-release-tags always honors the field)\" },\n ],\n };\n\n api.registerExporter(\"changelog\", async (ctx) => {\n const format = (stringOption(ctx.options, \"format\", \"format\") ?? \"md\").toLowerCase();\n if (format !== \"md\" && format !== \"markdown\" && format !== \"json\") {\n throw new PmCliError(\"--format must be 'md' or 'json'\", EXIT_CODE.USAGE);\n }\n const groupByOption = stringOption(ctx.options, \"group-by\", \"groupBy\") ?? \"version\";\n if (groupByOption !== \"version\" && groupByOption !== \"release\" && groupByOption !== \"milestone\") {\n throw new PmCliError(\"--group-by must be 'version', 'release', or 'milestone'\", EXIT_CODE.USAGE);\n }\n const releaseNotes = booleanOption(ctx.options, \"release-notes\", \"releaseNotes\");\n const releaseVersion = stringOption(ctx.options, \"release-version\", \"releaseVersion\");\n const sinceOption = stringOption(ctx.options, \"since\", \"since\");\n const untilOption = stringOption(ctx.options, \"until\", \"until\");\n const statuses = (ctx.options[\"status\"] as string | undefined)\n ?.split(\",\").map((s) => s.trim()).filter(Boolean);\n\n const releaseContext = withReleaseContextDiagnostics(() => resolveReleaseContext({\n cwd: ctx.pm_root,\n version: releaseVersion,\n versionFromPackage: booleanOption(ctx.options, \"release-version-from-package\", \"releaseVersionFromPackage\"),\n dateFallback: stringOption(ctx.options, \"date-fallback\", \"dateFallback\"),\n dateFromVersion: booleanOption(ctx.options, \"date-from-version\", \"dateFromVersion\"),\n since: sinceOption,\n sincePreviousTag: booleanOption(ctx.options, \"since-previous-tag\", \"sincePreviousTag\"),\n until: untilOption,\n untilReleaseTag: booleanOption(ctx.options, \"until-release-tag\", \"untilReleaseTag\"),\n }));\n\n const items = await listAllItemMetadata(ctx.pm_root);\n const generated = createChangelog({\n items,\n title: stringOption(ctx.options, \"title\", \"title\") ?? (releaseNotes ? \"Release Notes\" : undefined),\n version: releaseContext.version,\n date: stringOption(ctx.options, \"date\", \"date\") ?? releaseContext.date,\n since: releaseContext.since,\n until: releaseContext.until,\n includeStatuses: statuses,\n groupBy: groupByOption as ChangelogGroupBy,\n includeEmpty: booleanOption(ctx.options, \"include-empty\", \"includeEmpty\"),\n includeLinks: booleanOption(ctx.options, \"include-links\", \"includeLinks\"),\n includeMetadata: booleanOption(ctx.options, \"include-metadata\", \"includeMetadata\"),\n itemUrlBase: stringOption(ctx.options, \"item-url-base\", \"itemUrlBase\"),\n itemRefStyle: itemRefStyleOption(ctx.options),\n respectItemRelease: booleanOption(ctx.options, \"respect-item-release\", \"respectItemRelease\"),\n excludeTags: excludeTagsOption(ctx.options),\n });\n\n const outputPath = stringOption(ctx.options, \"output\", \"output\");\n if (format === \"json\") {\n const payload = {\n version: releaseContext.version ?? \"Unreleased\",\n item_count: generated.itemCount,\n group_by: groupByOption,\n markdown: generated.markdown,\n };\n if (outputPath) {\n writeFileSync(resolve(outputPath), JSON.stringify(payload, null, 2) + \"\\n\", \"utf-8\");\n return { file: outputPath, format: \"json\", item_count: generated.itemCount };\n }\n return renderedCommandResult(payload);\n }\n\n if (outputPath) {\n writeFileSync(resolve(outputPath), generated.markdown, \"utf-8\");\n return { file: outputPath, format: \"markdown\", item_count: generated.itemCount };\n }\n return { changelog: generated.markdown, format: \"markdown\", item_count: generated.itemCount };\n }, changelogExportMetadata);\n\n // Register renderer overrides so json-mode results print verbatim JSON to\n // stdout under both the default (toon) and global --json renderers. The host\n // enforces command and result ownership before invoking either callback.\n if (typeof api.registerRenderer === \"function\") {\n // Pass the ownership object straight to registerRenderer — no cast — so\n // TypeScript validates it against pm-cli 2026.7.24's registerRenderer\n // signature (the ownership param type is not re-exported from /sdk, but the\n // call site is still fully checked). The host enforces `commands` +\n // `resultDiscriminator` before invoking either callback.\n const rendererOwnership = {\n commands: [\"changelog generate\", \"changelog export\"],\n resultDiscriminator: isRenderedCommandResult,\n };\n api.registerRenderer(\"toon\", renderCommandResult, rendererOwnership);\n api.registerRenderer(\"json\", renderCommandResult, rendererOwnership);\n }\n },\n});\n\n/**\n * Best-effort enrichment of item metadata with the on-disk body, used so\n * `--body-preview` renders real body content in the extension path (GH #27).\n * `listAllItemMetadata` omits bodies, so each item is re-read via the public SDK\n * locate/read helpers. Items already carrying a body are skipped, and any\n * per-item read failure is swallowed so changelog generation never breaks.\n */\nasync function enrichItemBodies(\n pmRoot: string,\n items: PmItem[],\n dependencies: BodyEnrichmentDependencies = BODY_ENRICHMENT_DEPENDENCIES,\n): Promise<void> {\n let typeToFolder: Record<string, string>;\n let idPrefix: string;\n let format: Awaited<ReturnType<typeof readSettings>>[\"item_format\"];\n try {\n const settings = await dependencies.readSettings(pmRoot);\n typeToFolder = dependencies.resolveItemTypeRegistry(settings).type_to_folder;\n idPrefix = settings.id_prefix;\n format = settings.item_format;\n } catch {\n return; // cannot resolve settings/registry → leave item metadata as-is\n }\n\n /** Fill one item's body from its stored document, leaving an already-populated\n * or unreadable item untouched. Best-effort by design: a single unreadable\n * item must not fail an entire generation. */\n const loadBody = async (item: PmItem): Promise<void> => {\n if (!item.id) return;\n if (typeof item.body === \"string\" && item.body.trim() !== \"\") return;\n try {\n const located = await dependencies.locateItem(pmRoot, item.id, idPrefix, format, typeToFolder);\n if (!located) return;\n const { document } = await dependencies.readLocatedItem(located);\n if (typeof document.body === \"string\" && document.body.trim() !== \"\") {\n item.body = document.body;\n }\n } catch {\n // best-effort: a single unreadable item must not fail generation\n }\n };\n\n // Bound concurrency so a large workspace can't exhaust file descriptors\n // (EMFILE) by issuing one locate+read per item all at once.\n const CONCURRENCY_LIMIT = 16;\n for (let i = 0; i < items.length; i += CONCURRENCY_LIMIT) {\n await Promise.all(items.slice(i, i + CONCURRENCY_LIMIT).map(loadBody));\n }\n}\n\n/**\n * Missing git tag history is an environment prerequisite failure, not a usage\n * error: rethrow the structured diagnostic as a PmCliError with a non-zero\n * exit so release gates stop instead of misreporting a correct CHANGELOG.md as\n * stale (the CLI path surfaces the same message via its main() error handler).\n */\nfunction withTagHistoryDiagnostics<T>(resolve: () => T): T {\n try {\n return resolve();\n } catch (error) {\n if (error instanceof MissingTagHistoryError) {\n throw new PmCliError(error.message, EXIT_CODE.GENERIC_FAILURE);\n }\n throw error;\n }\n}\n\n/** Render release-context option failures as real CLI usage errors.\n * The SDK host converts ordinary thrown errors into warnings, which would let\n * an invalid fallback invocation appear successful to automation. */\nfunction withReleaseContextDiagnostics<T>(resolve: () => T): T {\n try {\n return withTagHistoryDiagnostics(resolve);\n } catch (error) {\n if (error instanceof PmCliError) throw error;\n if (error instanceof Error) throw new PmCliError(error.message, EXIT_CODE.USAGE);\n throw error;\n }\n}\n\nfunction stringOption(options: Record<string, unknown>, kebabKey: string, camelKey: string): string | undefined {\n const value = options[kebabKey] ?? options[camelKey];\n return typeof value === \"string\" ? value : undefined;\n}\n\nfunction booleanOption(options: Record<string, unknown>, kebabKey: string, camelKey: string): boolean {\n return Boolean(options[kebabKey] ?? options[camelKey]);\n}\n\n/** OPT-IN (`--item-ref-style`): how each entry cites its pm item. Rejects any\n * spelling outside the four supported styles rather than silently falling back,\n * so a typo surfaces as a usage error instead of a differently-rendered\n * changelog. Absent → `undefined`, leaving the generator's own default. */\nfunction itemRefStyleOption(options: Record<string, unknown>): ChangelogItemRefStyle | undefined {\n const value = stringOption(options, \"item-ref-style\", \"itemRefStyle\");\n if (value === undefined) return undefined;\n const normalized = value.trim().toLowerCase();\n if (normalized === \"auto\" || normalized === \"label\" || normalized === \"toon\" || normalized === \"github\") {\n return normalized;\n }\n throw new PmCliError(\"--item-ref-style must be 'auto', 'label', 'toon', or 'github'\", EXIT_CODE.USAGE);\n}\n\n/** OPT-IN (`--exclude-tag`): comma-separated tag list, or an array when the host\n * passes a repeated flag. Absent/blank → `undefined`, which leaves generation\n * unfiltered. */\nfunction excludeTagsOption(options: Record<string, unknown>): string[] | undefined {\n const raw = options[\"exclude-tag\"] ?? options[\"excludeTag\"] ?? options[\"exclude-tags\"] ?? options[\"excludeTags\"];\n if (raw === undefined || raw === null) return undefined;\n const values = (Array.isArray(raw) ? raw : [raw])\n .flatMap((entry) => String(entry).split(\",\"))\n .map((tag) => tag.trim())\n .filter(Boolean);\n return values.length > 0 ? values : undefined;\n}\n\n/** OPT-IN (`--limit`): how many of the most recent release sections to keep,\n * applying only where release windows produced the sections - it is not a cap\n * on items. Accepts the host's number or its string spelling, and rejects zero,\n * negatives, and fractions as usage errors so an unusable value never silently\n * truncates a changelog. Absent/blank → `undefined`, meaning every release. */\nfunction parseLimitOption(options: Record<string, unknown>): number | undefined {\n const raw = options[\"limit\"];\n if (raw === undefined || raw === null || raw === \"\") return undefined;\n const parsed = typeof raw === \"number\" ? raw : Number.parseInt(String(raw), 10);\n if (!Number.isInteger(parsed) || parsed < 1) {\n throw new PmCliError(\"--limit must be a positive integer\", EXIT_CODE.USAGE);\n }\n return parsed;\n}\n\n/** OPT-IN (`--body-preview`): how many characters of an item's body to inline\n * beneath its entry. Validated exactly like `--limit`, so a malformed width is\n * a usage error rather than a truncated-to-nothing preview. Absent/blank →\n * `undefined`, which omits body previews entirely. */\nfunction parseBodyPreviewOption(options: Record<string, unknown>): number | undefined {\n const raw = options[\"body-preview\"] ?? options[\"bodyPreview\"];\n if (raw === undefined || raw === null || raw === \"\") return undefined;\n const parsed = typeof raw === \"number\" ? raw : Number.parseInt(String(raw), 10);\n if (!Number.isInteger(parsed) || parsed < 1) {\n throw new PmCliError(\"--body-preview must be a positive integer\", EXIT_CODE.USAGE);\n }\n return parsed;\n}\n\n/** Internal behavior surface used by package-local extension coverage tests. */\nexport const extensionTestSurface = {\n bodyEnrichmentDependencies: BODY_ENRICHMENT_DEPENDENCIES,\n booleanOption,\n enrichItemBodies,\n excludeTagsOption,\n isRenderedCommandResult,\n itemRefStyleOption,\n parseBodyPreviewOption,\n parseLimitOption,\n renderCommandResult,\n renderedCommandResult,\n stringOption,\n withReleaseContextDiagnostics,\n withTagHistoryDiagnostics,\n};\n"]}
1
+ {"version":3,"file":"extension.js","sourceRoot":"","sources":["../src/extension.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EACL,eAAe,EACf,mBAAmB,EACnB,UAAU,EACV,eAAe,EACf,YAAY,EACZ,uBAAuB,EACvB,SAAS,EACT,UAAU,GACX,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EAAE,sBAAsB,EAAE,eAAe,EAAE,sBAAsB,EAAE,yBAAyB,EAAE,iBAAiB,EAAE,cAAc,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC9L,OAAO,EACL,sBAAsB,EACtB,+BAA+B,EAC/B,qBAAqB,EACrB,iCAAiC,GAClC,MAAM,sBAAsB,CAAC;AAsB9B,MAAM,4BAA4B,GAA+B;IAC/D,YAAY;IACZ,uBAAuB;IACvB,UAAU;IACV,eAAe;CAChB,CAAC;AAEF,+FAA+F;AAC/F,SAAS,uBAAuB,CAAC,KAAc;IAC7C,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,qBAAqB,IAAI,KAAK;QAC9B,KAAK,CAAC,mBAAmB,KAAK,IAAI;QAClC,QAAQ,IAAI,KAAK;QACjB,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,CACjC,CAAC;AACJ,CAAC;AAED,2FAA2F;AAC3F,SAAS,qBAAqB,CAAC,KAAc;IAC3C,+EAA+E;IAC/E,gFAAgF;IAChF,8EAA8E;IAC9E,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAClD,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC7B,MAAM,IAAI,SAAS,CAAC,mDAAmD,CAAC,CAAC;IAC3E,CAAC;IACD,MAAM,MAAM,GAAG,GAAG,UAAU,IAAI,CAAC;IACjC,OAAO,EAAE,mBAAmB,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AAC/C,CAAC;AAED,wFAAwF;AACxF,SAAS,mBAAmB,CAAC,OAAyC;IACpE,OAAO,uBAAuB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC;AACjF,CAAC;AAED,eAAe,eAAe,CAAC;IAC7B,IAAI,EAAE,cAAc;IACpB,OAAO,EAAE,UAAU;IAEnB,QAAQ,CAAC,GAAG;QACV,GAAG,CAAC,eAAe,CAAC;YAClB,IAAI,EAAE,oBAAoB;YAC1B,WAAW,EAAE,6CAA6C;YAC1D,MAAM,EAAE,0DAA0D;YAClE,QAAQ,EAAE;gBACR,uBAAuB;gBACvB,+CAA+C;gBAC/C,+FAA+F;gBAC/F,yDAAyD;gBACzD,oEAAoE;gBACpE,mDAAmD;gBACnD,qDAAqD;gBACrD,oDAAoD;gBACpD,sEAAsE;aACvE;YACD,KAAK,EAAE;gBACL,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,0CAA0C,EAAE;gBACjG,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,2CAA2C,EAAE;gBAC9E,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,sCAAsC,EAAE;gBAC5F,EAAE,IAAI,EAAE,mBAAmB,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,+CAA+C,EAAE;gBAClH,EAAE,IAAI,EAAE,gCAAgC,EAAE,WAAW,EAAE,wDAAwD,EAAE;gBACjH,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,uEAAuE,EAAE;gBAC5H,EAAE,IAAI,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,uDAAuD,EAAE;gBACrH,EAAE,IAAI,EAAE,qBAAqB,EAAE,WAAW,EAAE,4DAA4D,EAAE;gBAC1G,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,6CAA6C,EAAE;gBACnG,EAAE,IAAI,EAAE,sBAAsB,EAAE,WAAW,EAAE,0CAA0C,EAAE;gBACzF,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,8CAA8C,EAAE;gBACpG,EAAE,IAAI,EAAE,qBAAqB,EAAE,WAAW,EAAE,4DAA4D,EAAE;gBAC1G,EAAE,IAAI,EAAE,oBAAoB,EAAE,WAAW,EAAE,mDAAmD,EAAE;gBAChG,EAAE,IAAI,EAAE,uBAAuB,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,mDAAmD,EAAE;gBACvH,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,4CAA4C,EAAE;gBACnG,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,mDAAmD,EAAE;gBAC5G,EAAE,IAAI,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,+EAA+E,EAAE;gBAC1I,EAAE,IAAI,EAAE,gBAAgB,EAAE,WAAW,EAAE,kFAAkF,EAAE;gBAC3H,EAAE,IAAI,EAAE,gBAAgB,EAAE,WAAW,EAAE,kEAAkE,EAAE;gBAC3G,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,EAAE,WAAW,EAAE,mEAAmE,EAAE;gBACtH,EAAE,IAAI,EAAE,iBAAiB,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,uEAAuE,EAAE;gBACxI,EAAE,IAAI,EAAE,oBAAoB,EAAE,WAAW,EAAE,oEAAoE,EAAE;gBACjH,EAAE,IAAI,EAAE,kBAAkB,EAAE,WAAW,EAAE,gFAAgF,EAAE;gBAC3H,EAAE,IAAI,EAAE,gBAAgB,EAAE,UAAU,EAAE,GAAG,EAAE,WAAW,EAAE,yDAAyD,EAAE;gBACnH,EAAE,IAAI,EAAE,gBAAgB,EAAE,WAAW,EAAE,2EAA2E,EAAE;gBACpH,EAAE,IAAI,EAAE,oBAAoB,EAAE,WAAW,EAAE,qFAAqF,EAAE;gBAClI,EAAE,IAAI,EAAE,kBAAkB,EAAE,WAAW,EAAE,2EAA2E,EAAE;gBACtH,EAAE,IAAI,EAAE,qBAAqB,EAAE,WAAW,EAAE,+DAA+D,EAAE;gBAC7G,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,uEAAuE,EAAE;gBAC3G,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,iEAAiE,EAAE;gBAC3H,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,0DAA0D,EAAE;gBAC/G,EAAE,IAAI,EAAE,iBAAiB,EAAE,WAAW,EAAE,mDAAmD,EAAE;gBAC7F,EAAE,IAAI,EAAE,iBAAiB,EAAE,WAAW,EAAE,yDAAyD,EAAE;gBACnG,EAAE,IAAI,EAAE,iBAAiB,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,iEAAiE,EAAE;gBAC9H,EAAE,IAAI,EAAE,kBAAkB,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,6JAA6J,EAAE;gBAC7N,EAAE,IAAI,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,kGAAkG,EAAE;gBAC9J,EAAE,IAAI,EAAE,wBAAwB,EAAE,WAAW,EAAE,kNAAkN,EAAE;gBACnQ,EAAE,IAAI,EAAE,sBAAsB,EAAE,WAAW,EAAE,0GAA0G,EAAE;gBACzJ,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,yDAAyD,EAAE;aAC5F;YACD,KAAK,CAAC,GAAG,CAAC,GAAG;gBACX,MAAM,MAAM,GAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAwB,IAAI,cAAc,CAAC;gBAC/E,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAC9C,MAAM,aAAa,GAAG,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,UAAU,EAAE,SAAS,CAAC,IAAI,SAAS,CAAC;gBACpF,MAAM,UAAU,GAAI,GAAG,CAAC,OAAO,CAAC,MAAM,CAAwB,IAAI,SAAS,CAAC;gBAE5E,uEAAuE;gBACvE,sEAAsE;gBACtE,mEAAmE;gBACnE,oEAAoE;gBACpE,IAAI,aAAa,KAAK,SAAS,IAAI,aAAa,KAAK,SAAS,IAAI,aAAa,KAAK,WAAW,EAAE,CAAC;oBAChG,MAAM,IAAI,UAAU,CAAC,yDAAyD,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;gBACnG,CAAC;gBACD,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;oBACzD,MAAM,IAAI,UAAU,CAAC,uCAAuC,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;gBACjF,CAAC;gBACD,MAAM,eAAe,GAAG,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,YAAY,EAAE,WAAW,CAAC,IAAI,UAAU,CAAC;gBAC3F,IAAI,eAAe,KAAK,UAAU,IAAI,eAAe,KAAK,MAAM,IAAI,eAAe,KAAK,QAAQ,IAAI,eAAe,KAAK,OAAO,EAAE,CAAC;oBAChI,MAAM,IAAI,UAAU,CAAC,+DAA+D,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;gBACzG,CAAC;gBACD,sEAAsE;gBACtE,uEAAuE;gBACvE,MAAM,YAAY,GAAG,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;gBACnE,MAAM,gBAAgB,GAAG,YAAY,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;gBAC5D,IAAI,gBAAgB,KAAK,SAAS,IAAI,gBAAgB,KAAK,IAAI,IAAI,gBAAgB,KAAK,UAAU,IAAI,gBAAgB,KAAK,MAAM,EAAE,CAAC;oBAClI,MAAM,IAAI,UAAU,CAAC,iCAAiC,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;gBAC3E,CAAC;gBACD,MAAM,eAAe,GAAG,gBAAgB,KAAK,MAAM,CAAC;gBACpD,MAAM,UAAU,GAAG,gBAAgB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBACjD,MAAM,OAAO,GAAqB,aAAa,CAAC;gBAChD,MAAM,SAAS,GAAuB,eAAe,CAAC;gBACtD,MAAM,IAAI,GAA0B,UAAU,CAAC;gBAE/C,MAAM,QAAQ,GAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAwB;oBAC5D,EAAE,KAAK,CAAC,GAAG,CAAC;qBACX,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;qBAC9B,MAAM,CAAC,OAAO,CAAC,CAAC;gBAEnB,MAAM,cAAc,GAAG,aAAa,CAAC,GAAG,CAAC,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,CAAC,CAAC;gBACxF,MAAM,cAAc,GAAG,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,CAAC,CAAC;gBACtF,MAAM,WAAW,GAAG,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;gBAChE,MAAM,UAAU,GAAG,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;gBAC7D,MAAM,YAAY,GAAG,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,eAAe,EAAE,cAAc,CAAC,CAAC;gBAChF,MAAM,eAAe,GAAG,aAAa,CAAC,GAAG,CAAC,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,CAAC,CAAC;gBAC3F,MAAM,WAAW,GAAG,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;gBAChE,MAAM,WAAW,GAAG,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;gBAChE,MAAM,cAAc,GAAG,6BAA6B,CAAC,GAAG,EAAE,CAAC,qBAAqB,CAAC;oBAC/E,GAAG,EAAE,GAAG,CAAC,OAAO;oBAChB,OAAO,EAAE,cAAc;oBACvB,kBAAkB,EAAE,aAAa,CAAC,GAAG,CAAC,OAAO,EAAE,8BAA8B,EAAE,2BAA2B,CAAC;oBAC3G,YAAY;oBACZ,eAAe;oBACf,KAAK,EAAE,WAAW;oBAClB,gBAAgB,EAAE,aAAa,CAAC,GAAG,CAAC,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,CAAC;oBACtF,KAAK,EAAE,WAAW;oBAClB,eAAe,EAAE,aAAa,CAAC,GAAG,CAAC,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,CAAC;iBACpF,CAAC,CAAC,CAAC;gBACJ,+DAA+D;gBAC/D,mEAAmE;gBACnE,oEAAoE;gBACpE,uEAAuE;gBACvE,+CAA+C;gBAC/C,MAAM,gBAAgB,GAAG,cAAc;oBACrC,CAAC,CAAC,yBAAyB,CAAC,GAAG,EAAE,CAAC,iCAAiC,CAAC;wBAChE,GAAG,EAAE,GAAG,CAAC,OAAO;wBAChB,UAAU,EAAE,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,qBAAqB,EAAE,mBAAmB,CAAC;wBACjF,eAAe,EAAE,IAAI;wBACrB,cAAc,EAAE,cAAc,CAAC,OAAO;wBACtC,gBAAgB,EAAE,WAAW,IAAI,UAAU,IAAI,cAAc,CAAC,IAAI;wBAClE,cAAc,EAAE,aAAa,CAAC,GAAG,CAAC,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;qBACzG,CAAC,CAAC;oBACL,CAAC,CAAC,SAAS,CAAC;gBACd,MAAM,EAAE,cAAc,EAAE,wBAAwB,EAAE,GAAG,gBAAgB;oBACnE,CAAC,CAAC,+BAA+B,CAAC,gBAAgB,CAAC;oBACnD,CAAC,CAAC,EAAE,CAAC;gBAEP,MAAM,KAAK,GAAG,MAAM,mBAAmB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBACrD,MAAM,WAAW,GAAG,sBAAsB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBACxD,0EAA0E;gBAC1E,uEAAuE;gBACvE,IAAI,WAAW,KAAK,SAAS,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;oBACjD,MAAM,gBAAgB,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;gBAC7C,CAAC;gBACD,MAAM,iBAAiB,GAAG;oBACxB,KAAK;oBACL,KAAK,EAAE,WAAW;oBAClB,OAAO,EAAE,cAAc,CAAC,OAAO;oBAC/B,IAAI,EAAE,UAAU,IAAI,cAAc,CAAC,IAAI;oBACvC,KAAK,EAAE,cAAc,CAAC,KAAK;oBAC3B,KAAK,EAAE,cAAc,CAAC,KAAK;oBAC3B,cAAc;oBACd,wBAAwB;oBACxB,eAAe,EAAE,QAAQ;oBACzB,OAAO;oBACP,SAAS;oBACT,YAAY,EAAE,aAAa,CAAC,GAAG,CAAC,OAAO,EAAE,cAAc,EAAE,cAAc,CAAC;oBACxE,YAAY,EAAE,aAAa,CAAC,GAAG,CAAC,OAAO,EAAE,cAAc,EAAE,cAAc,CAAC;oBACxE,KAAK,EAAE,UAAU;oBACjB,YAAY,EAAE,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,eAAe,EAAE,cAAc,CAAC;oBACxE,eAAe,EAAE,aAAa,CAAC,GAAG,CAAC,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,CAAC;oBAClF,WAAW;oBACX,WAAW,EAAE,aAAa,CAAC,GAAG,CAAC,OAAO,EAAE,cAAc,EAAE,aAAa,CAAC;oBACtE,eAAe,EAAE,aAAa,CAAC,GAAG,CAAC,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,CAAC;oBAClF,aAAa,EAAE,aAAa,CAAC,GAAG,CAAC,OAAO,EAAE,gBAAgB,EAAE,eAAe,CAAC;oBAC5E,YAAY,EAAE,aAAa,CAAC,GAAG,CAAC,OAAO,EAAE,eAAe,EAAE,cAAc,CAAC;oBACzE,YAAY,EAAE,aAAa,CAAC,GAAG,CAAC,OAAO,EAAE,eAAe,EAAE,cAAc,CAAC;oBACzE,WAAW,EAAE,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,eAAe,EAAE,aAAa,CAAC;oBACtE,YAAY,EAAE,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC;oBAC7C,kBAAkB,EAAE,aAAa,CAAC,GAAG,CAAC,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,CAAC;oBAC5F,WAAW,EAAE,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC;iBAC5C,CAAC;gBACF,kEAAkE;gBAClE,qEAAqE;gBACrE,kEAAkE;gBAClE,iDAAiD;gBACjD,MAAM,eAAe,GAAG,aAAa,CAAC,GAAG,CAAC,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,CAAC;oBACzF,CAAC,CAAC,yBAAyB,CAAC,iBAAiB,CAAC;oBAC9C,CAAC,CAAC,SAAS,CAAC;gBAEd,yEAAyE;gBACzE,mEAAmE;gBACnE,MAAM,aAAa,GAAG,aAAa,CAAC,GAAG,CAAC,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;gBAEvE,qEAAqE;gBACrE,uCAAuC;gBACvC,IAAI,aAAa,EAAE,CAAC;oBAClB,MAAM,OAAO,GAAG,sBAAsB,CAAC,iBAAiB,CAAC,CAAC;oBAC1D,IAAI,eAAe,EAAE,CAAC;wBACpB,OAAO,qBAAqB,CAAC;4BAC3B,OAAO;4BACP,MAAM,EAAE,MAAM;4BACd,UAAU,EAAE,OAAO,CAAC,MAAM;4BAC1B,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;yBAClE,CAAC,CAAC;oBACL,CAAC;oBACD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;oBAC/D,OAAO;wBACL,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;wBACzB,MAAM,EAAE,MAAM;wBACd,UAAU,EAAE,OAAO,CAAC,MAAM;wBAC1B,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;qBAClE,CAAC;gBACJ,CAAC;gBAED,uEAAuE;gBACvE,yEAAyE;gBACzE,uDAAuD;gBACvD,MAAM,mBAAmB,GAAG,aAAa,CAAC,GAAG,CAAC,OAAO,EAAE,gBAAgB,EAAE,eAAe,CAAC,CAAC;gBAC1F,IAAI,aAAa,CAAC,GAAG,CAAC,OAAO,EAAE,gBAAgB,EAAE,eAAe,CAAC,IAAI,CAAC,eAAe,IAAI,CAAC,mBAAmB,CAAC,EAAE,CAAC;oBAC/G,MAAM,QAAQ,GAAG,sBAAsB,CAAC,iBAAiB,CAAC,CAAC;oBAC3D,OAAO,qBAAqB,CAAC;wBAC3B,QAAQ;wBACR,MAAM,EAAE,MAAM;wBACd,UAAU,EAAE,QAAQ,CAAC,UAAU;wBAC/B,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;qBAClE,CAAC,CAAC;gBACL,CAAC;gBAED,yEAAyE;gBACzE,yDAAyD;gBACzD,IAAI,mBAAmB,EAAE,CAAC;oBACxB,MAAM,UAAU,GAAG,aAAa,CAAC,iBAAiB,CAAC,CAAC;oBACpD,OAAO,qBAAqB,CAAC;wBAC3B,gBAAgB,EAAE,UAAU;wBAC5B,MAAM,EAAE,MAAM;wBACd,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;qBAClE,CAAC,CAAC;gBACL,CAAC;gBAED,MAAM,SAAS,GAAG,eAAe,CAAC,iBAAiB,CAAC,CAAC;gBAErD,IAAI,MAAM,EAAE,CAAC;oBACX,MAAM,MAAM,GAAG,IAAI,KAAK,SAAS;wBAC/B,CAAC,CAAC,cAAc,CAAC,SAAS,EAAE,SAAS,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;wBACvE,CAAC,CAAC,EAAE,QAAQ,EAAE,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAmB,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;oBACjF,OAAO;wBACL,SAAS,EAAE,MAAM,CAAC,QAAQ;wBAC1B,MAAM,EAAE,MAAM,CAAC,MAAM;wBACrB,OAAO,EAAE,MAAM,CAAC,OAAO;wBACvB,UAAU,EAAE,SAAS,CAAC,SAAS;wBAC/B,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;qBAClE,CAAC;gBACJ,CAAC;gBAED,MAAM,MAAM,GAAG,cAAc,CAAC;oBAC5B,GAAG,iBAAiB;oBACpB,MAAM;oBACN,IAAI;oBACJ,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;iBACrC,CAAC,CAAC;gBACH,IAAI,MAAM,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC;oBACpD,MAAM,IAAI,UAAU,CAAC,6BAA6B,MAAM,CAAC,MAAM,EAAE,EAAE,SAAS,CAAC,eAAe,CAAC,CAAC;gBAChG,CAAC;gBACD,OAAO;oBACL,IAAI,EAAE,MAAM,CAAC,MAAM;oBACnB,MAAM,EAAE,MAAM,CAAC,MAAM;oBACrB,OAAO,EAAE,MAAM,CAAC,OAAO;oBACvB,UAAU,EAAE,MAAM,CAAC,SAAS;oBAC5B,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;oBACpC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAClE,CAAC;YACJ,CAAC;SACF,CAAC,CAAC;QAEH,0EAA0E;QAC1E,4DAA4D;QAC5D,yEAAyE;QACzE,4EAA4E;QAC5E,4EAA4E;QAC5E,kDAAkD;QAClD,0EAA0E;QAC1E,MAAM,uBAAuB,GAAoC;YAC/D,WAAW,EAAE,0EAA0E;YACvF,MAAM,EAAE,oDAAoD;YAC5D,QAAQ,EAAE;gBACR,qBAAqB;gBACrB,mCAAmC;gBACnC,8EAA8E;gBAC9E,8EAA8E;aAC/E;YACD,KAAK,EAAE;gBACL,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,6BAA6B,EAAE;gBACvF,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,0CAA0C,EAAE;gBACjG,EAAE,IAAI,EAAE,iBAAiB,EAAE,WAAW,EAAE,oDAAoD,EAAE;gBAC9F,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,oDAAoD,EAAE;gBAC1G,EAAE,IAAI,EAAE,mBAAmB,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,+CAA+C,EAAE;gBAClH,EAAE,IAAI,EAAE,gCAAgC,EAAE,WAAW,EAAE,wDAAwD,EAAE;gBACjH,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,uEAAuE,EAAE;gBAC5H,EAAE,IAAI,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,uDAAuD,EAAE;gBACrH,EAAE,IAAI,EAAE,qBAAqB,EAAE,WAAW,EAAE,4DAA4D,EAAE;gBAC1G,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,6CAA6C,EAAE;gBACnG,EAAE,IAAI,EAAE,sBAAsB,EAAE,WAAW,EAAE,0CAA0C,EAAE;gBACzF,EAAE,IAAI,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,8CAA8C,EAAE;gBACpG,EAAE,IAAI,EAAE,qBAAqB,EAAE,WAAW,EAAE,4DAA4D,EAAE;gBAC1G,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,4CAA4C,EAAE;gBACnG,EAAE,IAAI,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,mDAAmD,EAAE;gBAC5G,EAAE,IAAI,EAAE,iBAAiB,EAAE,WAAW,EAAE,mDAAmD,EAAE;gBAC7F,EAAE,IAAI,EAAE,iBAAiB,EAAE,WAAW,EAAE,yDAAyD,EAAE;gBACnG,EAAE,IAAI,EAAE,oBAAoB,EAAE,WAAW,EAAE,qFAAqF,EAAE;gBAClI,EAAE,IAAI,EAAE,iBAAiB,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,iEAAiE,EAAE;gBAC9H,EAAE,IAAI,EAAE,kBAAkB,EAAE,UAAU,EAAE,OAAO,EAAE,WAAW,EAAE,6JAA6J,EAAE;gBAC7N,EAAE,IAAI,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,kGAAkG,EAAE;gBAC9J,EAAE,IAAI,EAAE,wBAAwB,EAAE,WAAW,EAAE,kNAAkN,EAAE;aACpQ;SACF,CAAC;QAEF,GAAG,CAAC,gBAAgB,CAAC,WAAW,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;YAC9C,MAAM,MAAM,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,IAAI,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;YACrF,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,UAAU,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;gBAClE,MAAM,IAAI,UAAU,CAAC,iCAAiC,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;YAC3E,CAAC;YACD,MAAM,aAAa,GAAG,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,UAAU,EAAE,SAAS,CAAC,IAAI,SAAS,CAAC;YACpF,IAAI,aAAa,KAAK,SAAS,IAAI,aAAa,KAAK,SAAS,IAAI,aAAa,KAAK,WAAW,EAAE,CAAC;gBAChG,MAAM,IAAI,UAAU,CAAC,yDAAyD,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;YACnG,CAAC;YACD,MAAM,YAAY,GAAG,aAAa,CAAC,GAAG,CAAC,OAAO,EAAE,eAAe,EAAE,cAAc,CAAC,CAAC;YACjF,MAAM,cAAc,GAAG,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,CAAC,CAAC;YACtF,MAAM,WAAW,GAAG,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;YAChE,MAAM,WAAW,GAAG,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;YAChE,MAAM,QAAQ,GAAI,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAwB;gBAC5D,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YAEpD,MAAM,cAAc,GAAG,6BAA6B,CAAC,GAAG,EAAE,CAAC,qBAAqB,CAAC;gBAC/E,GAAG,EAAE,GAAG,CAAC,OAAO;gBAChB,OAAO,EAAE,cAAc;gBACvB,kBAAkB,EAAE,aAAa,CAAC,GAAG,CAAC,OAAO,EAAE,8BAA8B,EAAE,2BAA2B,CAAC;gBAC3G,YAAY,EAAE,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,eAAe,EAAE,cAAc,CAAC;gBACxE,eAAe,EAAE,aAAa,CAAC,GAAG,CAAC,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,CAAC;gBACnF,KAAK,EAAE,WAAW;gBAClB,gBAAgB,EAAE,aAAa,CAAC,GAAG,CAAC,OAAO,EAAE,oBAAoB,EAAE,kBAAkB,CAAC;gBACtF,KAAK,EAAE,WAAW;gBAClB,eAAe,EAAE,aAAa,CAAC,GAAG,CAAC,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,CAAC;aACpF,CAAC,CAAC,CAAC;YAEJ,MAAM,KAAK,GAAG,MAAM,mBAAmB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YACrD,MAAM,SAAS,GAAG,eAAe,CAAC;gBAChC,KAAK;gBACL,KAAK,EAAE,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,SAAS,CAAC;gBAClG,OAAO,EAAE,cAAc,CAAC,OAAO;gBAC/B,IAAI,EAAE,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,cAAc,CAAC,IAAI;gBACtE,KAAK,EAAE,cAAc,CAAC,KAAK;gBAC3B,KAAK,EAAE,cAAc,CAAC,KAAK;gBAC3B,eAAe,EAAE,QAAQ;gBACzB,OAAO,EAAE,aAAiC;gBAC1C,YAAY,EAAE,aAAa,CAAC,GAAG,CAAC,OAAO,EAAE,eAAe,EAAE,cAAc,CAAC;gBACzE,YAAY,EAAE,aAAa,CAAC,GAAG,CAAC,OAAO,EAAE,eAAe,EAAE,cAAc,CAAC;gBACzE,eAAe,EAAE,aAAa,CAAC,GAAG,CAAC,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,CAAC;gBAClF,WAAW,EAAE,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,eAAe,EAAE,aAAa,CAAC;gBACtE,YAAY,EAAE,kBAAkB,CAAC,GAAG,CAAC,OAAO,CAAC;gBAC7C,kBAAkB,EAAE,aAAa,CAAC,GAAG,CAAC,OAAO,EAAE,sBAAsB,EAAE,oBAAoB,CAAC;gBAC5F,WAAW,EAAE,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAC;aAC5C,CAAC,CAAC;YAEH,MAAM,UAAU,GAAG,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;YACjE,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;gBACtB,MAAM,OAAO,GAAG;oBACd,OAAO,EAAE,cAAc,CAAC,OAAO,IAAI,YAAY;oBAC/C,UAAU,EAAE,SAAS,CAAC,SAAS;oBAC/B,QAAQ,EAAE,aAAa;oBACvB,QAAQ,EAAE,SAAS,CAAC,QAAQ;iBAC7B,CAAC;gBACF,IAAI,UAAU,EAAE,CAAC;oBACf,aAAa,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,OAAO,CAAC,CAAC;oBACrF,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,CAAC,SAAS,EAAE,CAAC;gBAC/E,CAAC;gBACD,OAAO,qBAAqB,CAAC,OAAO,CAAC,CAAC;YACxC,CAAC;YAED,IAAI,UAAU,EAAE,CAAC;gBACf,aAAa,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBAChE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,CAAC,SAAS,EAAE,CAAC;YACnF,CAAC;YACD,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,CAAC,SAAS,EAAE,CAAC;QAChG,CAAC,EAAE,uBAAuB,CAAC,CAAC;QAE5B,0EAA0E;QAC1E,6EAA6E;QAC7E,yEAAyE;QACzE,IAAI,OAAO,GAAG,CAAC,gBAAgB,KAAK,UAAU,EAAE,CAAC;YAC/C,wEAAwE;YACxE,sEAAsE;YACtE,4EAA4E;YAC5E,oEAAoE;YACpE,yDAAyD;YACzD,MAAM,iBAAiB,GAAG;gBACxB,QAAQ,EAAE,CAAC,oBAAoB,EAAE,kBAAkB,CAAC;gBACpD,mBAAmB,EAAE,uBAAuB;aAC7C,CAAC;YACF,GAAG,CAAC,gBAAgB,CAAC,MAAM,EAAE,mBAAmB,EAAE,iBAAiB,CAAC,CAAC;YACrE,GAAG,CAAC,gBAAgB,CAAC,MAAM,EAAE,mBAAmB,EAAE,iBAAiB,CAAC,CAAC;QACvE,CAAC;IACH,CAAC;CACF,CAAC,CAAC;AAEH;;;;;;GAMG;AACH,KAAK,UAAU,gBAAgB,CAC7B,MAAc,EACd,KAAe,EACf,YAAY,GAA+B,4BAA4B;IAEvE,IAAI,YAAoC,CAAC;IACzC,IAAI,QAAgB,CAAC;IACrB,IAAI,MAA+D,CAAC;IACpE,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QACzD,YAAY,GAAG,YAAY,CAAC,uBAAuB,CAAC,QAAQ,CAAC,CAAC,cAAc,CAAC;QAC7E,QAAQ,GAAG,QAAQ,CAAC,SAAS,CAAC;QAC9B,MAAM,GAAG,QAAQ,CAAC,WAAW,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,+DAA+D;IACzE,CAAC;IAED;;kDAE8C;IAC9C,MAAM,QAAQ,GAAG,KAAK,EAAE,IAAY,EAAiB,EAAE;QACrD,IAAI,CAAC,IAAI,CAAC,EAAE;YAAE,OAAO;QACrB,IAAI,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE;YAAE,OAAO;QACrE,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC;YAC/F,IAAI,CAAC,OAAO;gBAAE,OAAO;YACrB,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,YAAY,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;YACjE,IAAI,OAAO,QAAQ,CAAC,IAAI,KAAK,QAAQ,IAAI,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;gBACrE,IAAI,CAAC,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC;YAC5B,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,iEAAiE;QACnE,CAAC;IACH,CAAC,CAAC;IAEF,wEAAwE;IACxE,4DAA4D;IAC5D,MAAM,iBAAiB,GAAG,EAAE,CAAC;IAC7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,iBAAiB,EAAE,CAAC;QACzD,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,iBAAiB,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;IACzE,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,SAAS,yBAAyB,CAAI,OAAgB;IACpD,IAAI,CAAC;QACH,OAAO,OAAO,EAAE,CAAC;IACnB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,sBAAsB,EAAE,CAAC;YAC5C,MAAM,IAAI,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE,SAAS,CAAC,eAAe,CAAC,CAAC;QACjE,CAAC;QACD,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED;;qEAEqE;AACrE,SAAS,6BAA6B,CAAI,OAAgB;IACxD,IAAI,CAAC;QACH,OAAO,yBAAyB,CAAC,OAAO,CAAC,CAAC;IAC5C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,UAAU;YAAE,MAAM,KAAK,CAAC;QAC7C,IAAI,KAAK,YAAY,KAAK;YAAE,MAAM,IAAI,UAAU,CAAC,KAAK,CAAC,OAAO,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;QACjF,MAAM,KAAK,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,YAAY,CAAC,OAAgC,EAAE,QAAgB,EAAE,QAAgB;IACxF,MAAM,KAAK,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC;IACrD,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AACvD,CAAC;AAED,SAAS,aAAa,CAAC,OAAgC,EAAE,QAAgB,EAAE,QAAgB;IACzF,OAAO,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;AACzD,CAAC;AAED;;;2EAG2E;AAC3E,SAAS,kBAAkB,CAAC,OAAgC;IAC1D,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,EAAE,gBAAgB,EAAE,cAAc,CAAC,CAAC;IACtE,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC1C,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC9C,IAAI,UAAU,KAAK,MAAM,IAAI,UAAU,KAAK,OAAO,IAAI,UAAU,KAAK,MAAM,IAAI,UAAU,KAAK,QAAQ,EAAE,CAAC;QACxG,OAAO,UAAU,CAAC;IACpB,CAAC;IACD,MAAM,IAAI,UAAU,CAAC,+DAA+D,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;AACzG,CAAC;AAED;;iBAEiB;AACjB,SAAS,iBAAiB,CAAC,OAAgC;IACzD,MAAM,GAAG,GAAG,OAAO,CAAC,aAAa,CAAC,IAAI,OAAO,CAAC,YAAY,CAAC,IAAI,OAAO,CAAC,cAAc,CAAC,IAAI,OAAO,CAAC,aAAa,CAAC,CAAC;IACjH,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IACxD,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;SAC9C,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;SAC5C,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;SACxB,MAAM,CAAC,OAAO,CAAC,CAAC;IACnB,OAAO,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;AAChD,CAAC;AAED;;;;+EAI+E;AAC/E,SAAS,gBAAgB,CAAC,OAAgC;IACxD,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAC7B,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,EAAE;QAAE,OAAO,SAAS,CAAC;IACtE,MAAM,MAAM,GAAG,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;IAChF,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5C,MAAM,IAAI,UAAU,CAAC,oCAAoC,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;IAC9E,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;sDAGsD;AACtD,SAAS,sBAAsB,CAAC,OAAgC;IAC9D,MAAM,GAAG,GAAG,OAAO,CAAC,cAAc,CAAC,IAAI,OAAO,CAAC,aAAa,CAAC,CAAC;IAC9D,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,EAAE;QAAE,OAAO,SAAS,CAAC;IACtE,MAAM,MAAM,GAAG,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC;IAChF,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5C,MAAM,IAAI,UAAU,CAAC,2CAA2C,EAAE,SAAS,CAAC,KAAK,CAAC,CAAC;IACrF,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,gFAAgF;AAChF,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,0BAA0B,EAAE,4BAA4B;IACxD,aAAa;IACb,gBAAgB;IAChB,iBAAiB;IACjB,uBAAuB;IACvB,kBAAkB;IAClB,sBAAsB;IACtB,gBAAgB;IAChB,mBAAmB;IACnB,qBAAqB;IACrB,YAAY;IACZ,6BAA6B;IAC7B,yBAAyB;CAC1B,CAAC","sourcesContent":["import { writeFileSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\n\nimport {\n defineExtension,\n listAllItemMetadata,\n locateItem,\n readLocatedItem,\n readSettings,\n resolveItemTypeRegistry,\n EXIT_CODE,\n PmCliError,\n} from \"@unbrained/pm-cli/sdk\";\nimport type { ImportExportRegistrationOptions } from \"@unbrained/pm-cli/sdk/authoring\";\n\nimport { buildChangelogDocument, createChangelog, createChangelogSummary, explainChangelogSelection, formatSummaryLine, mergeChangelog, suggestSemver, writeChangelog } from \"./generator.ts\";\nimport {\n MissingTagHistoryError,\n resolveGenerationReleaseWindows,\n resolveReleaseContext,\n resolveReleaseTagWindowResolution,\n} from \"./release-context.ts\";\nimport type { ChangelogGroupBy, ChangelogItemRefStyle, ChangelogSectionBy, PmItem } from \"./types.ts\";\n\n/**\n * Marks a command result as JSON text that pm-changelog has already rendered.\n *\n * Scoped host ownership ensures only changelog commands can route this marker\n * to the extension's toon and JSON renderer callbacks.\n */\ninterface RenderedCommandResult {\n pmChangelogRendered: true;\n output: string;\n}\n\n/** SDK operations used to enrich body previews, injectable at the filesystem boundary. */\ninterface BodyEnrichmentDependencies {\n readSettings: typeof readSettings;\n resolveItemTypeRegistry: typeof resolveItemTypeRegistry;\n locateItem: typeof locateItem;\n readLocatedItem: typeof readLocatedItem;\n}\n\nconst BODY_ENRICHMENT_DEPENDENCIES: BodyEnrichmentDependencies = {\n readSettings,\n resolveItemTypeRegistry,\n locateItem,\n readLocatedItem,\n};\n\n/** Determine whether an unknown command result carries valid pre-rendered changelog output. */\nfunction isRenderedCommandResult(value: unknown): value is RenderedCommandResult {\n return (\n typeof value === \"object\" &&\n value !== null &&\n \"pmChangelogRendered\" in value &&\n value.pmChangelogRendered === true &&\n \"output\" in value &&\n typeof value.output === \"string\"\n );\n}\n\n/** Serialize a structured changelog value into the marker consumed by scoped renderers. */\nfunction renderedCommandResult(value: unknown): RenderedCommandResult {\n // `value` is `unknown`, so `undefined`/functions/symbols are reachable inputs;\n // `JSON.stringify` returns `undefined` for those, which would print the literal\n // string \"undefined\" instead of JSON. Reject rather than emit invalid output.\n const serialized = JSON.stringify(value, null, 2);\n if (serialized === undefined) {\n throw new TypeError(\"Rendered changelog value is not JSON-serializable\");\n }\n const output = `${serialized}\\n`;\n return { pmChangelogRendered: true, output };\n}\n\n/** Return owned pre-rendered output or defer unrelated results to the host renderer. */\nfunction renderCommandResult(context: { result?: unknown } | undefined): string | null {\n return isRenderedCommandResult(context?.result) ? context.result.output : null;\n}\n\nexport default defineExtension({\n name: \"pm-changelog\",\n version: \"2026.9.8\",\n\n activate(api) {\n api.registerCommand({\n name: \"changelog generate\",\n description: \"Generate a CHANGELOG.md file from pm items.\",\n intent: \"generate changelog release notes from completed pm items\",\n examples: [\n \"pm changelog generate\",\n \"pm changelog generate --release-version 1.2.0\",\n \"pm changelog generate --release-version-from-package --since-previous-tag --until-release-tag\",\n \"pm changelog generate --all-release-tags --mode replace\",\n \"pm changelog generate --output RELEASE_NOTES.md --since 2026-05-01\",\n \"pm changelog generate --stdout --group-by release\",\n \"pm changelog generate --stdout --group-by milestone\",\n \"pm changelog generate --stdout --explain-selection\",\n \"pm changelog generate --check --mode prepend --release-version 1.2.0\",\n ],\n flags: [\n { long: \"--output\", value_name: \"file\", description: \"Output file path (default: CHANGELOG.md)\" },\n { long: \"--stdout\", description: \"Return markdown instead of writing a file\" },\n { long: \"--title\", value_name: \"text\", description: \"Changelog title (default: Changelog)\" },\n { long: \"--release-version\", value_name: \"version\", description: \"Release/version heading (default: Unreleased)\" },\n { long: \"--release-version-from-package\", description: \"Read release/version heading from nearest package.json\" },\n { long: \"--date\", value_name: \"date\", description: \"Unconditional release heading date override (recommended: YYYY-MM-DD)\" },\n { long: \"--date-fallback\", value_name: \"date\", description: \"Use this heading date only when no release tag exists\" },\n { long: \"--date-from-version\", description: \"Derive the no-tag fallback from a YYYY.M.D release version\" },\n { long: \"--since\", value_name: \"date\", description: \"Include items changed on or after this date\" },\n { long: \"--since-previous-tag\", description: \"Derive --since from the previous git tag\" },\n { long: \"--until\", value_name: \"date\", description: \"Include items changed on or before this date\" },\n { long: \"--until-release-tag\", description: \"Derive --until from the current release tag when it exists\" },\n { long: \"--all-release-tags\", description: \"Rebuild full history from git release tag windows\" },\n { long: \"--release-tag-pattern\", value_name: \"glob\", description: \"Git tag glob for --all-release-tags (default: v*)\" },\n { long: \"--status\", value_name: \"list\", description: \"Comma-separated statuses (default: closed)\" },\n { long: \"--group-by\", value_name: \"mode\", description: \"version, release, or milestone (default: version)\" },\n { long: \"--section-by\", value_name: \"mode\", description: \"Within-release grouping: category, type, status, or label (default: category)\" },\n { long: \"--conventional\", description: \"Use Conventional-Commits headings (Features/Bug Fixes/...) for category grouping\" },\n { long: \"--contributors\", description: \"Append a Contributors list per release from item assignee/author\" },\n { long: \"--limit\", value_name: \"n\", description: \"Keep only the most recent N release sections (history modes only)\" },\n { long: \"--since-version\", value_name: \"version\", description: \"Keep only releases at or newer than this version (history modes only)\" },\n { long: \"--breaking-changes\", description: \"Emit a Breaking Changes section listing items detected as breaking\" },\n { long: \"--suggest-semver\", description: \"Return a suggested semver bump (major/minor/patch); never writes the changelog\" },\n { long: \"--body-preview\", value_name: \"n\", description: \"Append the first N chars of each item body to its entry\" },\n { long: \"--emoji-prefix\", description: \"Prefix section headings with conventional emoji (Added 🎉, Fixed 🐛, ...)\" },\n { long: \"--include-metadata\", description: \"Append compact item metadata (type/status/priority/release/milestone) to each entry\" },\n { long: \"--changelog-json\", description: \"Return the full structured changelog document (releases->sections->items)\" },\n { long: \"--explain-selection\", description: \"Return item-selection diagnostics (counts, exclusions, hints)\" },\n { long: \"--summary\", description: \"Return a compact one-line-per-change summary instead of full markdown\" },\n { long: \"--format\", value_name: \"md|json\", description: \"Output format: md (default) or json for machine-readable output\" },\n { long: \"--mode\", value_name: \"mode\", description: \"replace or prepend existing changelog (default: replace)\" },\n { long: \"--include-empty\", description: \"Emit an empty release section when no items match\" },\n { long: \"--include-links\", description: \"Include item URLs in generated entries (default: false)\" },\n { long: \"--item-url-base\", value_name: \"url\", description: \"Make item IDs clickable links to .toon files under the base URL\" },\n { long: \"--item-ref-style\", value_name: \"style\", description: \"How item IDs render: auto (default), label (neutral/public-safe), toon (force blob link), github (public issue/PR link from gh:owner/repo#N provenance tag)\" },\n { long: \"--exclude-tag\", value_name: \"list\", description: \"Omit items carrying any of these comma-separated tags (ignore convention, e.g. changelog:ignore)\" },\n { long: \"--respect-item-release\", description: \"Treat an item release field as the authority for its single version window: keep it when it matches the release version regardless of timestamps, drop it otherwise (--all-release-tags always honors the field)\" },\n { long: \"--no-pending-release\", description: \"Nothing is being released right now: suppress the pending release window for an untagged package version\" },\n { long: \"--check\", description: \"Do not write; report whether the changelog would change\" },\n ],\n async run(ctx) {\n const output = (ctx.options[\"output\"] as string | undefined) ?? \"CHANGELOG.md\";\n const stdout = Boolean(ctx.options[\"stdout\"]);\n const groupByOption = stringOption(ctx.options, \"group-by\", \"groupBy\") ?? \"version\";\n const modeOption = (ctx.options[\"mode\"] as string | undefined) ?? \"replace\";\n\n // Throw (with a numeric exitCode) rather than returning { error }: the\n // runtime treats a returned object as a successful run (exit 0), so a\n // returned error silently passed validation failures. A PmCliError\n // carries its exitCode so the handler exits non-zero and runs once.\n if (groupByOption !== \"version\" && groupByOption !== \"release\" && groupByOption !== \"milestone\") {\n throw new PmCliError(\"--group-by must be 'version', 'release', or 'milestone'\", EXIT_CODE.USAGE);\n }\n if (modeOption !== \"replace\" && modeOption !== \"prepend\") {\n throw new PmCliError(\"--mode must be 'replace' or 'prepend'\", EXIT_CODE.USAGE);\n }\n const sectionByOption = stringOption(ctx.options, \"section-by\", \"sectionBy\") ?? \"category\";\n if (sectionByOption !== \"category\" && sectionByOption !== \"type\" && sectionByOption !== \"status\" && sectionByOption !== \"label\") {\n throw new PmCliError(\"--section-by must be 'category', 'type', 'status', or 'label'\", EXIT_CODE.USAGE);\n }\n // Validate --format up front (matching `changelog export`) instead of\n // silently treating unsupported values as the default markdown output.\n const formatOption = stringOption(ctx.options, \"format\", \"format\");\n const normalizedFormat = formatOption?.trim().toLowerCase();\n if (normalizedFormat !== undefined && normalizedFormat !== \"md\" && normalizedFormat !== \"markdown\" && normalizedFormat !== \"json\") {\n throw new PmCliError(\"--format must be 'md' or 'json'\", EXIT_CODE.USAGE);\n }\n const wantsJsonFormat = normalizedFormat === \"json\";\n const limitValue = parseLimitOption(ctx.options);\n const groupBy: ChangelogGroupBy = groupByOption;\n const sectionBy: ChangelogSectionBy = sectionByOption;\n const mode: \"replace\" | \"prepend\" = modeOption;\n\n const statuses = (ctx.options[\"status\"] as string | undefined)\n ?.split(\",\")\n .map((status) => status.trim())\n .filter(Boolean);\n\n const allReleaseTags = booleanOption(ctx.options, \"all-release-tags\", \"allReleaseTags\");\n const releaseVersion = stringOption(ctx.options, \"release-version\", \"releaseVersion\");\n const titleOption = stringOption(ctx.options, \"title\", \"title\");\n const dateOption = stringOption(ctx.options, \"date\", \"date\");\n const dateFallback = stringOption(ctx.options, \"date-fallback\", \"dateFallback\");\n const dateFromVersion = booleanOption(ctx.options, \"date-from-version\", \"dateFromVersion\");\n const sinceOption = stringOption(ctx.options, \"since\", \"since\");\n const untilOption = stringOption(ctx.options, \"until\", \"until\");\n const releaseContext = withReleaseContextDiagnostics(() => resolveReleaseContext({\n cwd: ctx.pm_root,\n version: releaseVersion,\n versionFromPackage: booleanOption(ctx.options, \"release-version-from-package\", \"releaseVersionFromPackage\"),\n dateFallback,\n dateFromVersion,\n since: sinceOption,\n sincePreviousTag: booleanOption(ctx.options, \"since-previous-tag\", \"sincePreviousTag\"),\n until: untilOption,\n untilReleaseTag: booleanOption(ctx.options, \"until-release-tag\", \"untilReleaseTag\"),\n }));\n // Same policy as the CLI: forward the resolved windows and the\n // suppressed pending release (so items declaring that version land\n // under `Unreleased`, not an older real release), spelling an empty\n // resolution as absent history so a pre-first-release repository keeps\n // the single-section `## Unreleased` fallback.\n const windowResolution = allReleaseTags\n ? withTagHistoryDiagnostics(() => resolveReleaseTagWindowResolution({\n cwd: ctx.pm_root,\n tagPattern: stringOption(ctx.options, \"release-tag-pattern\", \"releaseTagPattern\"),\n includeOrphaned: true,\n pendingVersion: releaseContext.version,\n pendingTimestamp: untilOption ?? dateOption ?? releaseContext.date,\n pendingRelease: booleanOption(ctx.options, \"no-pending-release\", \"noPendingRelease\") ? false : undefined,\n }))\n : undefined;\n const { releaseWindows, suppressedPendingRelease } = windowResolution\n ? resolveGenerationReleaseWindows(windowResolution)\n : {};\n\n const items = await listAllItemMetadata(ctx.pm_root);\n const bodyPreview = parseBodyPreviewOption(ctx.options);\n // listAllItemMetadata omits item bodies, so --body-preview would silently\n // render nothing (GH #27). Load bodies on demand only when previewing.\n if (bodyPreview !== undefined && bodyPreview > 0) {\n await enrichItemBodies(ctx.pm_root, items);\n }\n const generationOptions = {\n items,\n title: titleOption,\n version: releaseContext.version,\n date: dateOption ?? releaseContext.date,\n since: releaseContext.since,\n until: releaseContext.until,\n releaseWindows,\n suppressedPendingRelease,\n includeStatuses: statuses,\n groupBy,\n sectionBy,\n conventional: booleanOption(ctx.options, \"conventional\", \"conventional\"),\n contributors: booleanOption(ctx.options, \"contributors\", \"contributors\"),\n limit: limitValue,\n sinceVersion: stringOption(ctx.options, \"since-version\", \"sinceVersion\"),\n breakingChanges: booleanOption(ctx.options, \"breaking-changes\", \"breakingChanges\"),\n bodyPreview,\n emojiPrefix: booleanOption(ctx.options, \"emoji-prefix\", \"emojiPrefix\"),\n includeMetadata: booleanOption(ctx.options, \"include-metadata\", \"includeMetadata\"),\n suggestSemver: booleanOption(ctx.options, \"suggest-semver\", \"suggestSemver\"),\n includeEmpty: booleanOption(ctx.options, \"include-empty\", \"includeEmpty\"),\n includeLinks: booleanOption(ctx.options, \"include-links\", \"includeLinks\"),\n itemUrlBase: stringOption(ctx.options, \"item-url-base\", \"itemUrlBase\"),\n itemRefStyle: itemRefStyleOption(ctx.options),\n respectItemRelease: booleanOption(ctx.options, \"respect-item-release\", \"respectItemRelease\"),\n excludeTags: excludeTagsOption(ctx.options),\n };\n // pm-cli 2026.9.5 owns `--explain` as root-help expansion, so the\n // extension cannot declare that spelling. Selection diagnostics stay\n // available under `--explain-selection`; the standalone CLI keeps\n // `--explain` because it is not a pm subcommand.\n const selectionReport = booleanOption(ctx.options, \"explain-selection\", \"explainSelection\")\n ? explainChangelogSelection(generationOptions)\n : undefined;\n\n // OPT-IN (`--format json` without `--summary`): alias for the structured\n // --changelog-json document so agents have a single --format flag.\n const summaryOption = booleanOption(ctx.options, \"summary\", \"summary\");\n\n // OPT-IN (`--summary`): compact one-line-per-change output for quick\n // agent scanning. Never writes a file.\n if (summaryOption) {\n const entries = createChangelogSummary(generationOptions);\n if (wantsJsonFormat) {\n return renderedCommandResult({\n entries,\n format: \"json\",\n item_count: entries.length,\n ...(selectionReport ? { selection_report: selectionReport } : {}),\n });\n }\n const lines = entries.map((entry) => formatSummaryLine(entry));\n return {\n summary: lines.join(\"\\n\"),\n format: \"text\",\n item_count: entries.length,\n ...(selectionReport ? { selection_report: selectionReport } : {}),\n };\n }\n\n // OPT-IN (`--changelog-json` or `--format json`): structured document;\n // never writes a file. `--suggest-semver` keeps its dedicated JSON shape\n // below instead of being aliased to the full document.\n const suggestSemverOption = booleanOption(ctx.options, \"suggest-semver\", \"suggestSemver\");\n if (booleanOption(ctx.options, \"changelog-json\", \"changelogJson\") || (wantsJsonFormat && !suggestSemverOption)) {\n const document = buildChangelogDocument(generationOptions);\n return renderedCommandResult({\n document,\n format: \"json\",\n item_count: document.item_count,\n ...(selectionReport ? { selection_report: selectionReport } : {}),\n });\n }\n\n // OPT-IN (`--suggest-semver`) standalone: emit only the semver analysis;\n // never writes a file and never alters default markdown.\n if (suggestSemverOption) {\n const suggestion = suggestSemver(generationOptions);\n return renderedCommandResult({\n suggested_semver: suggestion,\n format: \"json\",\n ...(selectionReport ? { selection_report: selectionReport } : {}),\n });\n }\n\n const generated = createChangelog(generationOptions);\n\n if (stdout) {\n const merged = mode === \"prepend\"\n ? mergeChangelog(undefined, generated.markdown, { title: titleOption })\n : { markdown: generated.markdown, action: \"replaced\" as const, changed: true };\n return {\n changelog: merged.markdown,\n action: merged.action,\n changed: merged.changed,\n item_count: generated.itemCount,\n ...(selectionReport ? { selection_report: selectionReport } : {}),\n };\n }\n\n const result = writeChangelog({\n ...generationOptions,\n output,\n mode,\n check: Boolean(ctx.options[\"check\"]),\n });\n if (result.changed && Boolean(ctx.options[\"check\"])) {\n throw new PmCliError(`Changelog is out of date: ${result.output}`, EXIT_CODE.GENERIC_FAILURE);\n }\n return {\n file: result.output,\n action: result.action,\n changed: result.changed,\n item_count: result.itemCount,\n bytes: result.bytes,\n check: Boolean(ctx.options[\"check\"]),\n ...(selectionReport ? { selection_report: selectionReport } : {}),\n };\n },\n });\n\n // -----------------------------------------------------------------------\n // Exporter: `pm changelog export` — native export pipeline.\n // Reuses the same generation core as `changelog generate` (whose default\n // output is intentionally left byte-identical). Adds --format md|json and a\n // --release-notes concise mode. Does NOT write CHANGELOG.md unless --output\n // is given, so it is side-effect free by default.\n // -----------------------------------------------------------------------\n const changelogExportMetadata: ImportExportRegistrationOptions = {\n description: \"Export changelog or release notes through the pm import/export pipeline.\",\n intent: \"export changelog release notes as markdown or json\",\n examples: [\n \"pm changelog export\",\n \"pm changelog export --format json\",\n \"pm changelog export --release-notes --since-previous-tag --until-release-tag\",\n \"pm changelog export --output RELEASE_NOTES.md --release-version-from-package\",\n ],\n flags: [\n { long: \"--format\", value_name: \"md|json\", description: \"Export format (default: md)\" },\n { long: \"--output\", value_name: \"file\", description: \"Write output to a file instead of stdout\" },\n { long: \"--release-notes\", description: \"Use a concise release-notes title and output shape\" },\n { long: \"--title\", value_name: \"text\", description: \"Output title (default: Changelog or Release Notes)\" },\n { long: \"--release-version\", value_name: \"version\", description: \"Release/version heading (default: Unreleased)\" },\n { long: \"--release-version-from-package\", description: \"Read release/version heading from nearest package.json\" },\n { long: \"--date\", value_name: \"date\", description: \"Unconditional release heading date override (recommended: YYYY-MM-DD)\" },\n { long: \"--date-fallback\", value_name: \"date\", description: \"Use this heading date only when no release tag exists\" },\n { long: \"--date-from-version\", description: \"Derive the no-tag fallback from a YYYY.M.D release version\" },\n { long: \"--since\", value_name: \"date\", description: \"Include items changed on or after this date\" },\n { long: \"--since-previous-tag\", description: \"Derive --since from the previous git tag\" },\n { long: \"--until\", value_name: \"date\", description: \"Include items changed on or before this date\" },\n { long: \"--until-release-tag\", description: \"Derive --until from the current release tag when it exists\" },\n { long: \"--status\", value_name: \"list\", description: \"Comma-separated statuses (default: closed)\" },\n { long: \"--group-by\", value_name: \"mode\", description: \"version, release, or milestone (default: version)\" },\n { long: \"--include-empty\", description: \"Emit an empty release section when no items match\" },\n { long: \"--include-links\", description: \"Include item URLs in generated entries (default: false)\" },\n { long: \"--include-metadata\", description: \"Append compact item metadata (type/status/priority/release/milestone) to each entry\" },\n { long: \"--item-url-base\", value_name: \"url\", description: \"Make item IDs clickable links to .toon files under the base URL\" },\n { long: \"--item-ref-style\", value_name: \"style\", description: \"How item IDs render: auto (default), label (neutral/public-safe), toon (force blob link), github (public issue/PR link from gh:owner/repo#N provenance tag)\" },\n { long: \"--exclude-tag\", value_name: \"list\", description: \"Omit items carrying any of these comma-separated tags (ignore convention, e.g. changelog:ignore)\" },\n { long: \"--respect-item-release\", description: \"Treat an item release field as the authority for its single version window: keep it when it matches the release version regardless of timestamps, drop it otherwise (--all-release-tags always honors the field)\" },\n ],\n };\n\n api.registerExporter(\"changelog\", async (ctx) => {\n const format = (stringOption(ctx.options, \"format\", \"format\") ?? \"md\").toLowerCase();\n if (format !== \"md\" && format !== \"markdown\" && format !== \"json\") {\n throw new PmCliError(\"--format must be 'md' or 'json'\", EXIT_CODE.USAGE);\n }\n const groupByOption = stringOption(ctx.options, \"group-by\", \"groupBy\") ?? \"version\";\n if (groupByOption !== \"version\" && groupByOption !== \"release\" && groupByOption !== \"milestone\") {\n throw new PmCliError(\"--group-by must be 'version', 'release', or 'milestone'\", EXIT_CODE.USAGE);\n }\n const releaseNotes = booleanOption(ctx.options, \"release-notes\", \"releaseNotes\");\n const releaseVersion = stringOption(ctx.options, \"release-version\", \"releaseVersion\");\n const sinceOption = stringOption(ctx.options, \"since\", \"since\");\n const untilOption = stringOption(ctx.options, \"until\", \"until\");\n const statuses = (ctx.options[\"status\"] as string | undefined)\n ?.split(\",\").map((s) => s.trim()).filter(Boolean);\n\n const releaseContext = withReleaseContextDiagnostics(() => resolveReleaseContext({\n cwd: ctx.pm_root,\n version: releaseVersion,\n versionFromPackage: booleanOption(ctx.options, \"release-version-from-package\", \"releaseVersionFromPackage\"),\n dateFallback: stringOption(ctx.options, \"date-fallback\", \"dateFallback\"),\n dateFromVersion: booleanOption(ctx.options, \"date-from-version\", \"dateFromVersion\"),\n since: sinceOption,\n sincePreviousTag: booleanOption(ctx.options, \"since-previous-tag\", \"sincePreviousTag\"),\n until: untilOption,\n untilReleaseTag: booleanOption(ctx.options, \"until-release-tag\", \"untilReleaseTag\"),\n }));\n\n const items = await listAllItemMetadata(ctx.pm_root);\n const generated = createChangelog({\n items,\n title: stringOption(ctx.options, \"title\", \"title\") ?? (releaseNotes ? \"Release Notes\" : undefined),\n version: releaseContext.version,\n date: stringOption(ctx.options, \"date\", \"date\") ?? releaseContext.date,\n since: releaseContext.since,\n until: releaseContext.until,\n includeStatuses: statuses,\n groupBy: groupByOption as ChangelogGroupBy,\n includeEmpty: booleanOption(ctx.options, \"include-empty\", \"includeEmpty\"),\n includeLinks: booleanOption(ctx.options, \"include-links\", \"includeLinks\"),\n includeMetadata: booleanOption(ctx.options, \"include-metadata\", \"includeMetadata\"),\n itemUrlBase: stringOption(ctx.options, \"item-url-base\", \"itemUrlBase\"),\n itemRefStyle: itemRefStyleOption(ctx.options),\n respectItemRelease: booleanOption(ctx.options, \"respect-item-release\", \"respectItemRelease\"),\n excludeTags: excludeTagsOption(ctx.options),\n });\n\n const outputPath = stringOption(ctx.options, \"output\", \"output\");\n if (format === \"json\") {\n const payload = {\n version: releaseContext.version ?? \"Unreleased\",\n item_count: generated.itemCount,\n group_by: groupByOption,\n markdown: generated.markdown,\n };\n if (outputPath) {\n writeFileSync(resolve(outputPath), JSON.stringify(payload, null, 2) + \"\\n\", \"utf-8\");\n return { file: outputPath, format: \"json\", item_count: generated.itemCount };\n }\n return renderedCommandResult(payload);\n }\n\n if (outputPath) {\n writeFileSync(resolve(outputPath), generated.markdown, \"utf-8\");\n return { file: outputPath, format: \"markdown\", item_count: generated.itemCount };\n }\n return { changelog: generated.markdown, format: \"markdown\", item_count: generated.itemCount };\n }, changelogExportMetadata);\n\n // Register renderer overrides so json-mode results print verbatim JSON to\n // stdout under both the default (toon) and global --json renderers. The host\n // enforces command and result ownership before invoking either callback.\n if (typeof api.registerRenderer === \"function\") {\n // Pass the ownership object straight to registerRenderer — no cast — so\n // TypeScript validates it against pm-cli 2026.7.24's registerRenderer\n // signature (the ownership param type is not re-exported from /sdk, but the\n // call site is still fully checked). The host enforces `commands` +\n // `resultDiscriminator` before invoking either callback.\n const rendererOwnership = {\n commands: [\"changelog generate\", \"changelog export\"],\n resultDiscriminator: isRenderedCommandResult,\n };\n api.registerRenderer(\"toon\", renderCommandResult, rendererOwnership);\n api.registerRenderer(\"json\", renderCommandResult, rendererOwnership);\n }\n },\n});\n\n/**\n * Best-effort enrichment of item metadata with the on-disk body, used so\n * `--body-preview` renders real body content in the extension path (GH #27).\n * `listAllItemMetadata` omits bodies, so each item is re-read via the public SDK\n * locate/read helpers. Items already carrying a body are skipped, and any\n * per-item read failure is swallowed so changelog generation never breaks.\n */\nasync function enrichItemBodies(\n pmRoot: string,\n items: PmItem[],\n dependencies: BodyEnrichmentDependencies = BODY_ENRICHMENT_DEPENDENCIES,\n): Promise<void> {\n let typeToFolder: Record<string, string>;\n let idPrefix: string;\n let format: Awaited<ReturnType<typeof readSettings>>[\"item_format\"];\n try {\n const settings = await dependencies.readSettings(pmRoot);\n typeToFolder = dependencies.resolveItemTypeRegistry(settings).type_to_folder;\n idPrefix = settings.id_prefix;\n format = settings.item_format;\n } catch {\n return; // cannot resolve settings/registry → leave item metadata as-is\n }\n\n /** Fill one item's body from its stored document, leaving an already-populated\n * or unreadable item untouched. Best-effort by design: a single unreadable\n * item must not fail an entire generation. */\n const loadBody = async (item: PmItem): Promise<void> => {\n if (!item.id) return;\n if (typeof item.body === \"string\" && item.body.trim() !== \"\") return;\n try {\n const located = await dependencies.locateItem(pmRoot, item.id, idPrefix, format, typeToFolder);\n if (!located) return;\n const { document } = await dependencies.readLocatedItem(located);\n if (typeof document.body === \"string\" && document.body.trim() !== \"\") {\n item.body = document.body;\n }\n } catch {\n // best-effort: a single unreadable item must not fail generation\n }\n };\n\n // Bound concurrency so a large workspace can't exhaust file descriptors\n // (EMFILE) by issuing one locate+read per item all at once.\n const CONCURRENCY_LIMIT = 16;\n for (let i = 0; i < items.length; i += CONCURRENCY_LIMIT) {\n await Promise.all(items.slice(i, i + CONCURRENCY_LIMIT).map(loadBody));\n }\n}\n\n/**\n * Missing git tag history is an environment prerequisite failure, not a usage\n * error: rethrow the structured diagnostic as a PmCliError with a non-zero\n * exit so release gates stop instead of misreporting a correct CHANGELOG.md as\n * stale (the CLI path surfaces the same message via its main() error handler).\n */\nfunction withTagHistoryDiagnostics<T>(resolve: () => T): T {\n try {\n return resolve();\n } catch (error) {\n if (error instanceof MissingTagHistoryError) {\n throw new PmCliError(error.message, EXIT_CODE.GENERIC_FAILURE);\n }\n throw error;\n }\n}\n\n/** Render release-context option failures as real CLI usage errors.\n * The SDK host converts ordinary thrown errors into warnings, which would let\n * an invalid fallback invocation appear successful to automation. */\nfunction withReleaseContextDiagnostics<T>(resolve: () => T): T {\n try {\n return withTagHistoryDiagnostics(resolve);\n } catch (error) {\n if (error instanceof PmCliError) throw error;\n if (error instanceof Error) throw new PmCliError(error.message, EXIT_CODE.USAGE);\n throw error;\n }\n}\n\nfunction stringOption(options: Record<string, unknown>, kebabKey: string, camelKey: string): string | undefined {\n const value = options[kebabKey] ?? options[camelKey];\n return typeof value === \"string\" ? value : undefined;\n}\n\nfunction booleanOption(options: Record<string, unknown>, kebabKey: string, camelKey: string): boolean {\n return Boolean(options[kebabKey] ?? options[camelKey]);\n}\n\n/** OPT-IN (`--item-ref-style`): how each entry cites its pm item. Rejects any\n * spelling outside the four supported styles rather than silently falling back,\n * so a typo surfaces as a usage error instead of a differently-rendered\n * changelog. Absent → `undefined`, leaving the generator's own default. */\nfunction itemRefStyleOption(options: Record<string, unknown>): ChangelogItemRefStyle | undefined {\n const value = stringOption(options, \"item-ref-style\", \"itemRefStyle\");\n if (value === undefined) return undefined;\n const normalized = value.trim().toLowerCase();\n if (normalized === \"auto\" || normalized === \"label\" || normalized === \"toon\" || normalized === \"github\") {\n return normalized;\n }\n throw new PmCliError(\"--item-ref-style must be 'auto', 'label', 'toon', or 'github'\", EXIT_CODE.USAGE);\n}\n\n/** OPT-IN (`--exclude-tag`): comma-separated tag list, or an array when the host\n * passes a repeated flag. Absent/blank → `undefined`, which leaves generation\n * unfiltered. */\nfunction excludeTagsOption(options: Record<string, unknown>): string[] | undefined {\n const raw = options[\"exclude-tag\"] ?? options[\"excludeTag\"] ?? options[\"exclude-tags\"] ?? options[\"excludeTags\"];\n if (raw === undefined || raw === null) return undefined;\n const values = (Array.isArray(raw) ? raw : [raw])\n .flatMap((entry) => String(entry).split(\",\"))\n .map((tag) => tag.trim())\n .filter(Boolean);\n return values.length > 0 ? values : undefined;\n}\n\n/** OPT-IN (`--limit`): how many of the most recent release sections to keep,\n * applying only where release windows produced the sections - it is not a cap\n * on items. Accepts the host's number or its string spelling, and rejects zero,\n * negatives, and fractions as usage errors so an unusable value never silently\n * truncates a changelog. Absent/blank → `undefined`, meaning every release. */\nfunction parseLimitOption(options: Record<string, unknown>): number | undefined {\n const raw = options[\"limit\"];\n if (raw === undefined || raw === null || raw === \"\") return undefined;\n const parsed = typeof raw === \"number\" ? raw : Number.parseInt(String(raw), 10);\n if (!Number.isInteger(parsed) || parsed < 1) {\n throw new PmCliError(\"--limit must be a positive integer\", EXIT_CODE.USAGE);\n }\n return parsed;\n}\n\n/** OPT-IN (`--body-preview`): how many characters of an item's body to inline\n * beneath its entry. Validated exactly like `--limit`, so a malformed width is\n * a usage error rather than a truncated-to-nothing preview. Absent/blank →\n * `undefined`, which omits body previews entirely. */\nfunction parseBodyPreviewOption(options: Record<string, unknown>): number | undefined {\n const raw = options[\"body-preview\"] ?? options[\"bodyPreview\"];\n if (raw === undefined || raw === null || raw === \"\") return undefined;\n const parsed = typeof raw === \"number\" ? raw : Number.parseInt(String(raw), 10);\n if (!Number.isInteger(parsed) || parsed < 1) {\n throw new PmCliError(\"--body-preview must be a positive integer\", EXIT_CODE.USAGE);\n }\n return parsed;\n}\n\n/** Internal behavior surface used by package-local extension coverage tests. */\nexport const extensionTestSurface = {\n bodyEnrichmentDependencies: BODY_ENRICHMENT_DEPENDENCIES,\n booleanOption,\n enrichItemBodies,\n excludeTagsOption,\n isRenderedCommandResult,\n itemRefStyleOption,\n parseBodyPreviewOption,\n parseLimitOption,\n renderCommandResult,\n renderedCommandResult,\n stringOption,\n withReleaseContextDiagnostics,\n withTagHistoryDiagnostics,\n};\n"]}
package/docs/usage.md CHANGED
@@ -33,7 +33,7 @@ pm changelog generate --mode prepend --release-version "$GITHUB_REF_NAME"
33
33
  pm changelog generate --check --mode prepend --release-version "$GITHUB_REF_NAME"
34
34
  ```
35
35
 
36
- The extension command uses `--release-version` because `pm --version` is a global CLI flag.
36
+ The extension command uses `--release-version` because `pm --version` is a global CLI flag. The same applies to `--explain`: `pm --explain` expands root help, so the extension exposes selection diagnostics as `--explain-selection`. The standalone CLI keeps `--explain`.
37
37
 
38
38
  ## Standalone CLI
39
39
 
@@ -235,7 +235,7 @@ The same flags are available on the pm extension command:
235
235
  pm changelog generate --stdout --section-by status
236
236
  pm changelog generate --stdout --conventional --contributors
237
237
  pm changelog generate --changelog-json
238
- pm changelog generate --stdout --explain
238
+ pm changelog generate --stdout --explain-selection
239
239
  ```
240
240
 
241
241
  Attribute work to the release that actually shipped it, instead of to whenever the tracker was closed:
package/manifest.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pm-changelog",
3
- "version": "2026.9.2",
3
+ "version": "2026.9.8",
4
4
  "manifest_version": 2,
5
5
  "description": "Generate CHANGELOG.md release notes from pm-cli items",
6
6
  "author": "@unbraind",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pm-changelog",
3
- "version": "2026.9.2",
3
+ "version": "2026.9.8",
4
4
  "description": "Generate CHANGELOG.md files from pm-cli items for local and CI usage",
5
5
  "repository": {
6
6
  "type": "git",
@@ -103,8 +103,8 @@
103
103
  },
104
104
  "devDependencies": {
105
105
  "@types/node": "^26.1.1",
106
- "@unbrained/pm-cli": "2026.8.31",
107
- "pm-ops": "2026.8.17",
106
+ "@unbrained/pm-cli": "2026.9.5",
107
+ "pm-ops": "^2026.9.7",
108
108
  "typescript": "^7.0.2",
109
109
  "typescript5": "npm:typescript@^5.9.3"
110
110
  },
@@ -131,7 +131,6 @@
131
131
  "scripts/prepare-merge-driver.ts",
132
132
  "scripts/sync-version.ts",
133
133
  "scripts/main-invocation.ts",
134
- "scripts/shell-command-scan.ts",
135
134
  "scripts/verify-release-publish-attestation.ts"
136
135
  ],
137
136
  "tests": [