@unbrained/pm-cli 2026.5.11 → 2026.5.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +3 -116
- package/CHANGELOG.md +18 -0
- package/PRD.md +18 -39
- package/README.md +8 -5
- package/dist/cli/commander-usage.js +27 -0
- package/dist/cli/commander-usage.js.map +1 -1
- package/dist/cli/commands/activity.js +19 -4
- package/dist/cli/commands/activity.js.map +1 -1
- package/dist/cli/commands/calendar.js +5 -2
- package/dist/cli/commands/calendar.js.map +1 -1
- package/dist/cli/commands/contracts.js +63 -19
- package/dist/cli/commands/contracts.js.map +1 -1
- package/dist/cli/commands/create.js +58 -3
- package/dist/cli/commands/create.js.map +1 -1
- package/dist/cli/commands/extension.d.ts +14 -3
- package/dist/cli/commands/extension.js +481 -95
- package/dist/cli/commands/extension.js.map +1 -1
- package/dist/cli/commands/index.d.ts +1 -8
- package/dist/cli/commands/index.js +1 -8
- package/dist/cli/commands/index.js.map +1 -1
- package/dist/cli/commands/reindex.d.ts +8 -0
- package/dist/cli/commands/reindex.js +96 -23
- package/dist/cli/commands/reindex.js.map +1 -1
- package/dist/cli/commands/search.js +51 -25
- package/dist/cli/commands/search.js.map +1 -1
- package/dist/cli/commands/test.js +14 -6
- package/dist/cli/commands/test.js.map +1 -1
- package/dist/cli/commands/upgrade.d.ts +63 -0
- package/dist/cli/commands/upgrade.js +260 -0
- package/dist/cli/commands/upgrade.js.map +1 -0
- package/dist/cli/guide-topics.js +18 -16
- package/dist/cli/guide-topics.js.map +1 -1
- package/dist/cli/help-content.js +57 -18
- package/dist/cli/help-content.js.map +1 -1
- package/dist/cli/main.js +73 -7
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/register-list-query.js +24 -142
- package/dist/cli/register-list-query.js.map +1 -1
- package/dist/cli/register-mutation.js +49 -257
- package/dist/cli/register-mutation.js.map +1 -1
- package/dist/cli/register-operations.js +29 -198
- package/dist/cli/register-operations.js.map +1 -1
- package/dist/cli/register-setup.js +181 -204
- package/dist/cli/register-setup.js.map +1 -1
- package/dist/cli/registration-helpers.d.ts +2 -2
- package/dist/cli/registration-helpers.js +1 -19
- package/dist/cli/registration-helpers.js.map +1 -1
- package/dist/core/extensions/loader.js +7 -1
- package/dist/core/extensions/loader.js.map +1 -1
- package/dist/core/packages/manifest.d.ts +38 -0
- package/dist/core/packages/manifest.js +221 -0
- package/dist/core/packages/manifest.js.map +1 -0
- package/dist/core/search/embedding-batches.d.ts +13 -1
- package/dist/core/search/embedding-batches.js +19 -1
- package/dist/core/search/embedding-batches.js.map +1 -1
- package/dist/core/store/front-matter-cache.d.ts +8 -1
- package/dist/core/store/front-matter-cache.js +20 -11
- package/dist/core/store/front-matter-cache.js.map +1 -1
- package/dist/mcp/server.d.ts +8 -0
- package/dist/mcp/server.js +100 -43
- package/dist/mcp/server.js.map +1 -1
- package/dist/sdk/cli-contracts/commander-mutation-options.d.ts +7 -0
- package/dist/sdk/cli-contracts/commander-mutation-options.js +477 -0
- package/dist/sdk/cli-contracts/commander-mutation-options.js.map +1 -0
- package/dist/sdk/cli-contracts/commander-types.d.ts +21 -0
- package/dist/sdk/cli-contracts/commander-types.js +92 -0
- package/dist/sdk/cli-contracts/commander-types.js.map +1 -0
- package/dist/sdk/cli-contracts.d.ts +22 -32
- package/dist/sdk/cli-contracts.js +155 -296
- package/dist/sdk/cli-contracts.js.map +1 -1
- package/dist/sdk/index.d.ts +2 -0
- package/dist/sdk/index.js +2 -0
- package/dist/sdk/index.js.map +1 -1
- package/dist/sdk/runtime.d.ts +29 -0
- package/dist/sdk/runtime.js +28 -0
- package/dist/sdk/runtime.js.map +1 -0
- package/docs/ARCHITECTURE.md +1 -1
- package/docs/COMMANDS.md +17 -1
- package/docs/EXTENSIONS.md +169 -61
- package/docs/QUICKSTART.md +11 -2
- package/docs/README.md +4 -6
- package/docs/RELEASING.md +4 -2
- package/docs/SDK.md +79 -438
- package/package.json +6 -23
- package/packages/pm-beads/README.md +10 -0
- package/packages/pm-beads/extensions/beads/index.js +113 -0
- package/{.agents/pm/extensions/beads/index.js → packages/pm-beads/extensions/beads/index.ts} +42 -20
- package/{.agents/pm → packages/pm-beads}/extensions/beads/runtime.js +2 -17
- package/{.agents/pm → packages/pm-beads}/extensions/beads/runtime.ts +41 -18
- package/packages/pm-beads/package.json +50 -0
- package/packages/pm-calendar/README.md +13 -0
- package/packages/pm-calendar/extensions/calendar/index.js +56 -0
- package/packages/pm-calendar/extensions/calendar/index.ts +62 -0
- package/packages/pm-calendar/extensions/calendar/manifest.json +7 -0
- package/packages/pm-calendar/extensions/calendar/runtime.js +95 -0
- package/packages/pm-calendar/extensions/calendar/runtime.ts +104 -0
- package/packages/pm-calendar/package.json +51 -0
- package/packages/pm-governance-audit/README.md +23 -0
- package/packages/pm-governance-audit/extensions/governance-audit/index.js +117 -0
- package/packages/pm-governance-audit/extensions/governance-audit/index.ts +118 -0
- package/packages/pm-governance-audit/extensions/governance-audit/manifest.json +7 -0
- package/packages/pm-governance-audit/extensions/governance-audit/runtime.js +159 -0
- package/packages/pm-governance-audit/extensions/governance-audit/runtime.ts +176 -0
- package/packages/pm-governance-audit/package.json +52 -0
- package/packages/pm-guide-shell/README.md +23 -0
- package/packages/pm-guide-shell/extensions/guide-shell/index.js +76 -0
- package/packages/pm-guide-shell/extensions/guide-shell/index.ts +81 -0
- package/packages/pm-guide-shell/extensions/guide-shell/manifest.json +7 -0
- package/packages/pm-guide-shell/extensions/guide-shell/runtime.js +263 -0
- package/packages/pm-guide-shell/extensions/guide-shell/runtime.ts +327 -0
- package/packages/pm-guide-shell/package.json +52 -0
- package/packages/pm-linked-test-adapters/README.md +24 -0
- package/packages/pm-linked-test-adapters/extensions/linked-test-adapters/index.js +101 -0
- package/packages/pm-linked-test-adapters/extensions/linked-test-adapters/index.ts +102 -0
- package/packages/pm-linked-test-adapters/extensions/linked-test-adapters/manifest.json +7 -0
- package/packages/pm-linked-test-adapters/extensions/linked-test-adapters/runtime.js +142 -0
- package/packages/pm-linked-test-adapters/extensions/linked-test-adapters/runtime.ts +173 -0
- package/packages/pm-linked-test-adapters/package.json +53 -0
- package/packages/pm-search-advanced/README.md +27 -0
- package/packages/pm-search-advanced/extensions/search-advanced/index.js +93 -0
- package/packages/pm-search-advanced/extensions/search-advanced/index.ts +94 -0
- package/packages/pm-search-advanced/extensions/search-advanced/manifest.json +7 -0
- package/packages/pm-search-advanced/extensions/search-advanced/runtime.js +120 -0
- package/packages/pm-search-advanced/extensions/search-advanced/runtime.ts +144 -0
- package/packages/pm-search-advanced/package.json +54 -0
- package/packages/pm-templates/README.md +20 -0
- package/packages/pm-templates/extensions/templates/index.js +101 -0
- package/packages/pm-templates/extensions/templates/index.ts +109 -0
- package/packages/pm-templates/extensions/templates/manifest.json +7 -0
- package/packages/pm-templates/extensions/templates/runtime.js +226 -0
- package/packages/pm-templates/extensions/templates/runtime.ts +283 -0
- package/packages/pm-templates/package.json +50 -0
- package/packages/pm-todos/README.md +11 -0
- package/packages/pm-todos/extensions/todos/index.js +130 -0
- package/{.agents/pm/extensions/todos/index.js → packages/pm-todos/extensions/todos/index.ts} +47 -23
- package/{.agents/pm → packages/pm-todos}/extensions/todos/runtime.js +3 -18
- package/{.agents/pm → packages/pm-todos}/extensions/todos/runtime.ts +42 -20
- package/packages/pm-todos/package.json +51 -0
- package/plugins/pm-cli-claude/README.md +1 -2
- package/plugins/pm-cli-claude/hooks/session-start.mjs +4 -55
- package/plugins/pm-cli-claude/scripts/pm-mcp-server.mjs +4 -2
- package/plugins/pm-cli-codex/scripts/pm-mcp-server.mjs +4 -2
- package/.agents/pm/extensions/.managed-extensions.json +0 -42
- package/.agents/skills/HARNESS_COMPATIBILITY.md +0 -45
- package/.agents/skills/README.md +0 -21
- package/.agents/skills/pm-developer/SKILL.md +0 -73
- package/.agents/skills/pm-developer/references/COMMAND_PLAYBOOK.md +0 -48
- package/.agents/skills/pm-developer/references/PROMPTS.md +0 -17
- package/.agents/skills/pm-extensions/SKILL.md +0 -57
- package/.agents/skills/pm-extensions/references/LIFECYCLE.md +0 -40
- package/.agents/skills/pm-extensions/references/TROUBLESHOOTING.md +0 -25
- package/.agents/skills/pm-sdk/SKILL.md +0 -50
- package/.agents/skills/pm-sdk/references/INTEGRATION_CHECKLIST.md +0 -31
- package/.agents/skills/pm-sdk/references/PROMPTS.md +0 -13
- package/.agents/skills/pm-user/SKILL.md +0 -59
- package/.agents/skills/pm-user/references/PROMPTS.md +0 -17
- package/.agents/skills/pm-user/references/WORKFLOWS.md +0 -35
- package/.pi/README.md +0 -35
- package/.pi/agents/pm-triage-agent.md +0 -19
- package/.pi/agents/pm-verification-agent.md +0 -21
- package/.pi/chains/pm-native-delivery.chain.md +0 -11
- package/.pi/extensions/pm-cli/index.js +0 -387
- package/.pi/prompts/pm-workflow.md +0 -5
- package/.pi/skills/pm-native/SKILL.md +0 -44
- package/.pi/skills/pm-release/SKILL.md +0 -35
- package/dist/pi/native.d.ts +0 -5
- package/dist/pi/native.js +0 -236
- package/dist/pi/native.js.map +0 -1
- package/docs/PI_PACKAGE.md +0 -141
- /package/{.agents/pm → packages/pm-beads}/extensions/beads/manifest.json +0 -0
- /package/{.agents/pm → packages/pm-todos}/extensions/todos/manifest.json +0 -0
|
@@ -724,6 +724,9 @@ export async function runCalendar(options, global) {
|
|
|
724
724
|
const hasExplicitBounds = options.to !== undefined || explicitLookahead !== undefined || occurrenceLimit !== undefined;
|
|
725
725
|
const eventsOnlyCapApplied = eventsOnly && !hasExplicitBounds;
|
|
726
726
|
const recurrenceLookaheadDays = eventsOnlyCapApplied ? DEFAULT_EVENTS_ONLY_LOOKAHEAD_DAYS : explicitLookahead;
|
|
727
|
+
const recurrenceLookbackWindowDays = eventsOnlyCapApplied && recurrenceLookbackDays === undefined
|
|
728
|
+
? 0
|
|
729
|
+
: recurrenceLookbackDays;
|
|
727
730
|
const settings = await readSettings(pmRoot);
|
|
728
731
|
const statusRegistry = resolveRuntimeStatusRegistry(settings.schema);
|
|
729
732
|
const runtimeFieldRegistry = resolveRuntimeFieldRegistry(settings.schema);
|
|
@@ -731,11 +734,11 @@ export async function runCalendar(options, global) {
|
|
|
731
734
|
const typeRegistry = resolveItemTypeRegistry(settings, getActiveExtensionRegistrations());
|
|
732
735
|
const listWarnings = [];
|
|
733
736
|
if (eventsOnlyCapApplied) {
|
|
734
|
-
listWarnings.push(`recurring_events_default_cap_applied
|
|
737
|
+
listWarnings.push(`recurring_events_default_cap_applied:lookback=0d,lookahead=${DEFAULT_EVENTS_ONLY_LOOKAHEAD_DAYS}d -- use --recurrence-lookback-days/--recurrence-lookahead-days or --to for wider range`);
|
|
735
738
|
}
|
|
736
739
|
const items = await listAllFrontMatter(pmRoot, settings.item_format, typeRegistry.type_to_folder, listWarnings, settings.schema);
|
|
737
740
|
const filteredItems = filterItems(items, options, typeRegistry, statusRegistry, runtimeFieldFilters);
|
|
738
|
-
const recurringWindow = buildRecurringEventWindow(rangeBounds.start, rangeBounds.end, nowValue,
|
|
741
|
+
const recurringWindow = buildRecurringEventWindow(rangeBounds.start, rangeBounds.end, nowValue, recurrenceLookbackWindowDays, recurrenceLookaheadDays);
|
|
739
742
|
const seededEvents = buildEventSeed(filteredItems, recurringWindow, includeSources, occurrenceLimit);
|
|
740
743
|
const rangedEvents = seededEvents.filter((event) => includeEventInWindow(event, rangeBounds.start, rangeBounds.end));
|
|
741
744
|
const limitedEvents = limit === undefined ? rangedEvents : rangedEvents.slice(0, limit);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"calendar.js","sourceRoot":"/","sources":["cli/commands/calendar.ts"],"names":[],"mappings":"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","sourcesContent":["import { pathExists } from \"../../core/fs/fs-utils.js\";\nimport { getActiveExtensionRegistrations } from \"../../core/extensions/index.js\";\nimport { resolveItemTypeRegistry, type ItemTypeRegistry } from \"../../core/item/type-registry.js\";\nimport { parseIntegerLimit, parsePriority, parseType } from \"../shared-parsers.js\";\nimport { normalizeStatusInput } from \"../../core/item/status.js\";\nimport { collectRuntimeFilterValues, matchesRuntimeFilters } from \"../../core/schema/runtime-field-filters.js\";\nimport {\n resolveRuntimeFieldRegistry,\n resolveRuntimeStatusRegistry,\n type RuntimeStatusRegistry,\n} from \"../../core/schema/runtime-schema.js\";\nimport { EXIT_CODE } from \"../../core/shared/constants.js\";\nimport type { GlobalOptions } from \"../../core/shared/command-types.js\";\nimport { PmCliError } from \"../../core/shared/errors.js\";\nimport { compareTimestampStrings, nowIso, resolveIsoOrRelative } from \"../../core/shared/time.js\";\nimport { listAllFrontMatter } from \"../../core/store/item-store.js\";\nimport { getSettingsPath, resolvePmRoot } from \"../../core/store/paths.js\";\nimport { readSettings } from \"../../core/store/settings.js\";\nimport type { ItemFrontMatter, ItemStatus, ItemType, RecurrenceRule } from \"../../types/index.js\";\nimport { RECURRENCE_WEEKDAY_VALUES } from \"../../types/index.js\";\n\nexport const CALENDAR_VIEW_VALUES = [\"agenda\", \"day\", \"week\", \"month\"] as const;\nexport type CalendarView = (typeof CALENDAR_VIEW_VALUES)[number];\n\nexport const CALENDAR_OUTPUT_VALUES = [\"markdown\", \"toon\", \"json\"] as const;\nexport type CalendarOutputFormat = (typeof CALENDAR_OUTPUT_VALUES)[number];\n\nexport interface CalendarOptions {\n view?: string;\n date?: string;\n from?: string;\n to?: string;\n past?: boolean;\n fullPeriod?: boolean;\n limit?: string;\n type?: string;\n tag?: string;\n priority?: string;\n status?: string;\n assignee?: string;\n assigneeFilter?: string;\n sprint?: string;\n release?: string;\n include?: string;\n recurrenceLookaheadDays?: string;\n recurrenceLookbackDays?: string;\n occurrenceLimit?: string;\n format?: string;\n [key: string]: unknown;\n}\n\nexport interface CalendarRow {\n at: string;\n date: string;\n kind: \"deadline\" | \"reminder\" | \"event\";\n reminder_text: string | null;\n event_title: string | null;\n event_end: string | null;\n event_location: string | null;\n event_all_day: boolean | null;\n event_timezone: string | null;\n event_recurring: boolean | null;\n event_recurrence_rule: string | null;\n item_id: string;\n item_title: string;\n item_type: ItemType;\n item_status: ItemStatus;\n item_priority: number;\n item_assignee: string | null;\n item_deadline: string | null;\n item_tags: string[];\n}\n\nexport interface CalendarDayBucket {\n date: string;\n count: number;\n events: CalendarRow[];\n}\n\nexport interface CalendarResult {\n view: CalendarView;\n output_default: \"markdown\";\n now: string;\n anchor: string;\n range: {\n start: string | null;\n end: string | null;\n period_start: string | null;\n period_end: string | null;\n full_period: boolean;\n past: boolean;\n from: string | null;\n to: string | null;\n };\n filters: {\n type: string | null;\n tag: string | null;\n priority: string | null;\n status: string | null;\n assignee: string | null;\n assignee_filter: string | null;\n sprint: string | null;\n release: string | null;\n runtime_filters?: Record<string, unknown>;\n limit: string | null;\n include: string | null;\n full_period: string | null;\n recurrence_lookahead_days: string | null;\n recurrence_lookback_days: string | null;\n occurrence_limit: string | null;\n };\n summary: {\n events: number;\n items: number;\n deadlines: number;\n reminders: number;\n scheduled: number;\n by_kind: {\n deadline: number;\n reminder: number;\n event: number;\n };\n by_type: Record<string, number>;\n by_status: Record<string, number>;\n recurring_events: number;\n };\n events: CalendarRow[];\n days: CalendarDayBucket[];\n warnings?: string[];\n}\n\nconst UTC_DAY_TO_WEEKDAY = [\"sun\", \"mon\", \"tue\", \"wed\", \"thu\", \"fri\", \"sat\"] as const;\nconst DEFAULT_RECURRENCE_LOOKAHEAD_DAYS = 365;\nconst DEFAULT_RECURRENCE_LOOKBACK_DAYS = 365;\nconst DEFAULT_EVENTS_ONLY_LOOKAHEAD_DAYS = 28;\nconst MAX_RECURRENCE_OCCURRENCES = 1000;\n\nfunction weekdayOrderIndex(value: (typeof RECURRENCE_WEEKDAY_VALUES)[number]): number {\n return RECURRENCE_WEEKDAY_VALUES.indexOf(value);\n}\n\nfunction parseNonNegativeInteger(raw: string | undefined, label: string): number | undefined {\n if (raw === undefined) return undefined;\n const parsed = Number(raw);\n if (!Number.isInteger(parsed) || parsed < 0) {\n throw new PmCliError(`${label} must be a non-negative integer`, EXIT_CODE.USAGE);\n }\n return parsed;\n}\n\ntype CalendarIncludeKind = \"deadlines\" | \"reminders\" | \"events\";\n\nfunction parseIncludeSources(raw: string | undefined): Set<CalendarIncludeKind> {\n if (!raw) {\n return new Set([\"deadlines\", \"reminders\", \"events\"]);\n }\n const normalized = raw.trim().toLowerCase();\n if (normalized === \"all\") {\n return new Set([\"deadlines\", \"reminders\", \"events\"]);\n }\n const values = normalized\n .split(/[\\|,]/)\n .map((value) => value.trim())\n .filter((value) => value.length > 0);\n if (values.length === 0) {\n throw new PmCliError(\"Calendar include filter must not be empty\", EXIT_CODE.USAGE);\n }\n const include = new Set<CalendarIncludeKind>();\n for (const value of values) {\n if (value === \"deadlines\" || value === \"deadline\") {\n include.add(\"deadlines\");\n continue;\n }\n if (value === \"reminders\" || value === \"reminder\") {\n include.add(\"reminders\");\n continue;\n }\n if (value === \"events\" || value === \"event\" || value === \"scheduled\") {\n include.add(\"events\");\n continue;\n }\n throw new PmCliError(\"Calendar include filter must be deadlines|reminders|events|scheduled|all\", EXIT_CODE.USAGE);\n }\n return include;\n}\n\nfunction parseView(raw: string | undefined): CalendarView {\n if (!raw) return \"agenda\";\n const normalized = raw.trim().toLowerCase();\n if (!CALENDAR_VIEW_VALUES.includes(normalized as CalendarView)) {\n throw new PmCliError(\"Calendar view must be one of agenda|day|week|month\", EXIT_CODE.USAGE);\n }\n return normalized as CalendarView;\n}\n\nfunction parseOutputFormat(raw: string | undefined): CalendarOutputFormat | undefined {\n if (!raw) return undefined;\n const normalized = raw.trim().toLowerCase();\n if (!CALENDAR_OUTPUT_VALUES.includes(normalized as CalendarOutputFormat)) {\n throw new PmCliError(\"Calendar format must be one of markdown|toon|json\", EXIT_CODE.USAGE);\n }\n return normalized as CalendarOutputFormat;\n}\n\nexport function resolveCalendarOutputFormat(options: CalendarOptions, global: GlobalOptions): CalendarOutputFormat {\n const commandFormat = parseOutputFormat(options.format);\n if (global.json && commandFormat && commandFormat !== \"json\") {\n throw new PmCliError(\"Cannot combine --json with --format markdown|toon\", EXIT_CODE.USAGE);\n }\n if (global.json) {\n return \"json\";\n }\n return commandFormat ?? \"markdown\";\n}\n\nfunction parseStatus(raw: string | undefined, statusRegistry: RuntimeStatusRegistry): ItemStatus | undefined {\n if (raw === undefined) return undefined;\n const normalized = normalizeStatusInput(raw, statusRegistry);\n if (!normalized) {\n const allowedStatuses = statusRegistry.definitions.map((definition) => definition.id);\n throw new PmCliError(`Calendar status filter must be one of ${allowedStatuses.join(\"|\")}`, EXIT_CODE.USAGE);\n }\n return normalized;\n}\n\nfunction parseAssigneeFilter(raw: string | undefined): \"assigned\" | \"unassigned\" | undefined {\n if (raw === undefined) {\n return undefined;\n }\n const normalized = raw.trim().toLowerCase();\n if (!normalized) {\n throw new PmCliError(\"Calendar assignee filter must be one of assigned|unassigned\", EXIT_CODE.USAGE);\n }\n if (normalized !== \"assigned\" && normalized !== \"unassigned\") {\n throw new PmCliError(`Invalid calendar assignee filter \"${raw}\". Allowed: assigned|unassigned`, EXIT_CODE.USAGE);\n }\n return normalized;\n}\n\nfunction toUtcDayKey(timestamp: string): string {\n return new Date(timestamp).toISOString().slice(0, 10);\n}\n\nfunction startOfUtcDay(timestamp: string): string {\n const date = new Date(timestamp);\n return new Date(Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), 0, 0, 0, 0)).toISOString();\n}\n\nfunction addUtcDays(timestamp: string, days: number): string {\n const date = new Date(timestamp);\n return new Date(date.getTime() + days * 24 * 60 * 60 * 1000).toISOString();\n}\n\nfunction startOfUtcWeekMonday(timestamp: string): string {\n const base = new Date(startOfUtcDay(timestamp));\n const day = base.getUTCDay();\n const delta = day === 0 ? -6 : 1 - day;\n return addUtcDays(base.toISOString(), delta);\n}\n\nfunction startOfUtcMonth(timestamp: string): string {\n const date = new Date(timestamp);\n return new Date(Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), 1, 0, 0, 0, 0)).toISOString();\n}\n\nfunction startOfNextUtcMonth(timestamp: string): string {\n const date = new Date(timestamp);\n return new Date(Date.UTC(date.getUTCFullYear(), date.getUTCMonth() + 1, 1, 0, 0, 0, 0)).toISOString();\n}\n\nfunction maxTimestamp(left: string, right: string): string {\n return compareTimestampStrings(left, right) >= 0 ? left : right;\n}\n\nfunction toSortedCountRecord(values: Map<string, number>): Record<string, number> {\n return Object.fromEntries([...values.entries()].sort(([left], [right]) => left.localeCompare(right)));\n}\n\nfunction incrementCount(values: Map<string, number>, key: string): void {\n values.set(key, (values.get(key) ?? 0) + 1);\n}\n\nfunction formatRecurrenceRuleForSummary(rule: RecurrenceRule | undefined): string | null {\n if (!rule) {\n return null;\n }\n const parts: string[] = [`freq=${rule.freq}`];\n if (rule.interval !== undefined) {\n parts.push(`interval=${rule.interval}`);\n }\n if (rule.count !== undefined) {\n parts.push(`count=${rule.count}`);\n }\n if (rule.until) {\n parts.push(`until=${rule.until}`);\n }\n if (rule.by_weekday && rule.by_weekday.length > 0) {\n const weekdays = [...rule.by_weekday].sort((left, right) => weekdayOrderIndex(left) - weekdayOrderIndex(right));\n parts.push(`by_weekday=${weekdays.join(\"|\")}`);\n }\n if (rule.by_month_day && rule.by_month_day.length > 0) {\n const monthDays = [...rule.by_month_day].sort((left, right) => left - right);\n parts.push(`by_month_day=${monthDays.join(\"|\")}`);\n }\n if (rule.exdates && rule.exdates.length > 0) {\n const exdates = [...rule.exdates].sort((left, right) => left.localeCompare(right));\n parts.push(`exdates=${exdates.join(\"|\")}`);\n }\n return parts.join(\",\");\n}\n\nfunction buildUtcTimestamp(year: number, month: number, day: number, timeSource: Date): string | undefined {\n const candidate = new Date(\n Date.UTC(\n year,\n month,\n day,\n timeSource.getUTCHours(),\n timeSource.getUTCMinutes(),\n timeSource.getUTCSeconds(),\n timeSource.getUTCMilliseconds(),\n ),\n );\n if (candidate.getUTCFullYear() !== year || candidate.getUTCMonth() !== month || candidate.getUTCDate() !== day) {\n return undefined;\n }\n return candidate.toISOString();\n}\n\nfunction weekdayToken(timestamp: string): (typeof UTC_DAY_TO_WEEKDAY)[number] {\n return UTC_DAY_TO_WEEKDAY[new Date(timestamp).getUTCDay()];\n}\n\nfunction buildRecurringEventWindow(\n start: string | undefined,\n end: string | undefined,\n nowValue: string,\n lookbackDays: number | undefined,\n lookaheadDays: number | undefined,\n): { start: string; end: string } {\n const windowStart = start ?? addUtcDays(nowValue, -(lookbackDays ?? DEFAULT_RECURRENCE_LOOKBACK_DAYS));\n const windowEnd = end ?? addUtcDays(start ?? nowValue, lookaheadDays ?? DEFAULT_RECURRENCE_LOOKAHEAD_DAYS);\n return {\n start: windowStart,\n end: compareTimestampStrings(windowEnd, windowStart) > 0 ? windowEnd : addUtcDays(windowStart, 1),\n };\n}\n\nfunction expandRecurringOccurrences(\n startAt: string,\n recurrence: RecurrenceRule,\n window: { start: string; end: string },\n occurrenceLimit: number | undefined,\n): string[] {\n const maxOccurrences = occurrenceLimit ?? MAX_RECURRENCE_OCCURRENCES;\n const interval = recurrence.interval ?? 1;\n const countLimit = recurrence.count ?? Number.POSITIVE_INFINITY;\n const until = recurrence.until;\n const excluded = new Set(recurrence.exdates ?? []);\n const recurrenceWeekdays =\n recurrence.by_weekday && recurrence.by_weekday.length > 0 ? [...recurrence.by_weekday] : [weekdayToken(startAt)];\n const recurrenceMonthDays =\n recurrence.by_month_day && recurrence.by_month_day.length > 0 ? [...recurrence.by_month_day] : [new Date(startAt).getUTCDate()];\n const weekdayFilter = recurrence.by_weekday ? new Set(recurrence.by_weekday) : undefined;\n const monthDayFilter = recurrence.by_month_day ? new Set(recurrence.by_month_day) : undefined;\n const sortedWeekdays = [...new Set(recurrenceWeekdays)].sort(\n (left, right) =>\n weekdayOrderIndex(left as (typeof RECURRENCE_WEEKDAY_VALUES)[number]) -\n weekdayOrderIndex(right as (typeof RECURRENCE_WEEKDAY_VALUES)[number]),\n );\n const sortedMonthDays = [...new Set(recurrenceMonthDays)].sort((left, right) => left - right);\n\n const occurrences: string[] = [];\n let produced = 0;\n const consumeCandidate = (candidateAt: string): \"continue\" | \"stop\" => {\n if (compareTimestampStrings(candidateAt, startAt) < 0) {\n return \"continue\";\n }\n if (until && compareTimestampStrings(candidateAt, until) > 0) {\n return \"stop\";\n }\n if (compareTimestampStrings(candidateAt, window.end) >= 0) {\n return \"stop\";\n }\n if (excluded.has(candidateAt)) {\n return \"continue\";\n }\n produced += 1;\n if (compareTimestampStrings(candidateAt, window.start) >= 0) {\n occurrences.push(candidateAt);\n }\n if (produced >= countLimit) {\n return \"stop\";\n }\n return \"continue\";\n };\n\n const startDate = new Date(startAt);\n if (recurrence.freq === \"daily\") {\n let candidateAt = startAt;\n for (let iteration = 0; iteration < maxOccurrences; iteration += 1) {\n const candidateWeekday = weekdayToken(candidateAt);\n const candidateMonthDay = new Date(candidateAt).getUTCDate();\n const weekdayMatches = !weekdayFilter || weekdayFilter.has(candidateWeekday);\n const monthDayMatches = !monthDayFilter || monthDayFilter.has(candidateMonthDay);\n if (weekdayMatches && monthDayMatches && consumeCandidate(candidateAt) === \"stop\") {\n break;\n }\n candidateAt = addUtcDays(candidateAt, interval);\n }\n return occurrences;\n }\n\n if (recurrence.freq === \"weekly\") {\n const weekStart = startOfUtcWeekMonday(startAt);\n for (let step = 0; step < maxOccurrences; step += 1) {\n const candidateWeekStart = addUtcDays(weekStart, step * interval * 7);\n for (const weekday of sortedWeekdays) {\n const dayOffset = weekdayOrderIndex(weekday as (typeof RECURRENCE_WEEKDAY_VALUES)[number]);\n const candidateDay = addUtcDays(candidateWeekStart, dayOffset);\n const dayDate = new Date(candidateDay);\n const candidateAt = new Date(\n Date.UTC(\n dayDate.getUTCFullYear(),\n dayDate.getUTCMonth(),\n dayDate.getUTCDate(),\n startDate.getUTCHours(),\n startDate.getUTCMinutes(),\n startDate.getUTCSeconds(),\n startDate.getUTCMilliseconds(),\n ),\n ).toISOString();\n const candidateMonthDay = dayDate.getUTCDate();\n if (monthDayFilter && !monthDayFilter.has(candidateMonthDay)) {\n continue;\n }\n const consumed = consumeCandidate(candidateAt);\n if (consumed === \"stop\") {\n return occurrences;\n }\n }\n }\n return occurrences;\n }\n\n if (recurrence.freq === \"monthly\") {\n const startYear = startDate.getUTCFullYear();\n const startMonth = startDate.getUTCMonth();\n for (let step = 0; step < maxOccurrences; step += 1) {\n const monthAnchor = new Date(Date.UTC(startYear, startMonth + step * interval, 1, 0, 0, 0, 0));\n const year = monthAnchor.getUTCFullYear();\n const month = monthAnchor.getUTCMonth();\n for (const monthDay of sortedMonthDays) {\n const candidateAt = buildUtcTimestamp(year, month, monthDay, startDate);\n if (!candidateAt) {\n continue;\n }\n const candidateWeekday = weekdayToken(candidateAt);\n if (weekdayFilter && !weekdayFilter.has(candidateWeekday)) {\n continue;\n }\n const consumed = consumeCandidate(candidateAt);\n if (consumed === \"stop\") {\n return occurrences;\n }\n }\n }\n return occurrences;\n }\n\n const year = startDate.getUTCFullYear();\n const month = startDate.getUTCMonth();\n for (let step = 0; step < maxOccurrences; step += 1) {\n const candidateYear = year + step * interval;\n for (const monthDay of sortedMonthDays) {\n const candidateAt = buildUtcTimestamp(candidateYear, month, monthDay, startDate);\n if (!candidateAt) {\n continue;\n }\n const candidateWeekday = weekdayToken(candidateAt);\n if (weekdayFilter && !weekdayFilter.has(candidateWeekday)) {\n continue;\n }\n const consumed = consumeCandidate(candidateAt);\n if (consumed === \"stop\") {\n return occurrences;\n }\n }\n }\n\n return occurrences;\n}\n\nfunction sortEvents(values: CalendarRow[]): CalendarRow[] {\n return [...values].sort((a, b) => {\n const byAt = compareTimestampStrings(a.at, b.at);\n if (byAt !== 0) return byAt;\n const byPriority = a.item_priority - b.item_priority;\n if (byPriority !== 0) return byPriority;\n const byId = a.item_id.localeCompare(b.item_id);\n if (byId !== 0) return byId;\n const byKind = a.kind.localeCompare(b.kind);\n if (byKind !== 0) return byKind;\n const byEventTitle = String(a.event_title).localeCompare(String(b.event_title));\n if (byEventTitle !== 0) return byEventTitle;\n return String(a.reminder_text).localeCompare(String(b.reminder_text));\n });\n}\n\nfunction buildEventSeed(\n items: ItemFrontMatter[],\n recurringWindow: { start: string; end: string },\n includeSources: Set<CalendarIncludeKind>,\n occurrenceLimit: number | undefined,\n): CalendarRow[] {\n const events: CalendarRow[] = [];\n for (const item of items) {\n if (includeSources.has(\"deadlines\") && item.deadline) {\n events.push({\n at: item.deadline,\n date: toUtcDayKey(item.deadline),\n kind: \"deadline\",\n reminder_text: null,\n event_title: null,\n event_end: null,\n event_location: null,\n event_all_day: null,\n event_timezone: null,\n event_recurring: null,\n event_recurrence_rule: null,\n item_id: item.id,\n item_title: item.title,\n item_type: item.type,\n item_status: item.status,\n item_priority: item.priority,\n item_assignee: item.assignee ?? null,\n item_deadline: item.deadline,\n item_tags: item.tags,\n });\n }\n for (const reminder of includeSources.has(\"reminders\") ? (item.reminders ?? []) : []) {\n events.push({\n at: reminder.at,\n date: toUtcDayKey(reminder.at),\n kind: \"reminder\",\n reminder_text: reminder.text,\n event_title: null,\n event_end: null,\n event_location: null,\n event_all_day: null,\n event_timezone: null,\n event_recurring: null,\n event_recurrence_rule: null,\n item_id: item.id,\n item_title: item.title,\n item_type: item.type,\n item_status: item.status,\n item_priority: item.priority,\n item_assignee: item.assignee ?? null,\n item_deadline: item.deadline ?? null,\n item_tags: item.tags,\n });\n }\n for (const event of includeSources.has(\"events\") ? (item.events ?? []) : []) {\n const recurrenceRuleSummary = formatRecurrenceRuleForSummary(event.recurrence);\n const recurringDurationMs = (() => {\n if (!event.end_at) {\n return null;\n }\n const duration = Date.parse(event.end_at) - Date.parse(event.start_at);\n return Number.isFinite(duration) && duration > 0 ? duration : null;\n })();\n const occurrences = event.recurrence\n ? expandRecurringOccurrences(event.start_at, event.recurrence, recurringWindow, occurrenceLimit)\n : [event.start_at];\n for (const occurrenceAt of occurrences) {\n const occurrenceEnd =\n event.recurrence && recurringDurationMs !== null\n ? new Date(new Date(occurrenceAt).getTime() + recurringDurationMs).toISOString()\n : (event.end_at ?? null);\n events.push({\n at: occurrenceAt,\n date: toUtcDayKey(occurrenceAt),\n kind: \"event\",\n reminder_text: event.description ?? null,\n event_title: event.title ?? item.title,\n event_end: occurrenceEnd,\n event_location: event.location ?? null,\n event_all_day: event.all_day ?? null,\n event_timezone: event.timezone ?? null,\n event_recurring: event.recurrence ? true : false,\n event_recurrence_rule: recurrenceRuleSummary,\n item_id: item.id,\n item_title: item.title,\n item_type: item.type,\n item_status: item.status,\n item_priority: item.priority,\n item_assignee: item.assignee ?? null,\n item_deadline: item.deadline ?? null,\n item_tags: item.tags,\n });\n }\n }\n }\n return sortEvents(events);\n}\n\nfunction filterItems(\n items: ItemFrontMatter[],\n options: CalendarOptions,\n typeRegistry: ItemTypeRegistry,\n statusRegistry: RuntimeStatusRegistry,\n runtimeFieldFilters: Record<string, unknown>,\n): ItemFrontMatter[] {\n const typeFilter = parseType(options.type, typeRegistry);\n const tagFilter = options.tag?.trim().toLowerCase();\n const priorityFilter = parsePriority(options.priority);\n const statusFilter = parseStatus(options.status, statusRegistry);\n const assigneeFilter = options.assignee?.trim();\n const assigneeModeFilter = parseAssigneeFilter(options.assigneeFilter);\n const sprintFilter = options.sprint?.trim();\n const releaseFilter = options.release?.trim();\n\n if (assigneeFilter && (assigneeFilter.toLowerCase() === \"none\" || assigneeFilter.toLowerCase() === \"null\")) {\n throw new PmCliError(\n '--assignee no longer accepts \"none\" or \"null\". Use --assignee-filter unassigned.',\n EXIT_CODE.USAGE,\n );\n }\n if (assigneeFilter !== undefined && assigneeModeFilter === \"unassigned\") {\n throw new PmCliError(\"Cannot combine --assignee with --assignee-filter unassigned\", EXIT_CODE.USAGE);\n }\n\n return items.filter((item) => {\n if (typeFilter && item.type !== typeFilter) return false;\n if (tagFilter && !item.tags.some((tag) => tag.trim().toLowerCase() === tagFilter)) return false;\n if (priorityFilter !== undefined && item.priority !== priorityFilter) return false;\n if (statusFilter && item.status !== statusFilter) return false;\n if (assigneeModeFilter === \"assigned\" && !item.assignee) return false;\n if (assigneeModeFilter === \"unassigned\" && item.assignee) return false;\n if (assigneeFilter !== undefined && item.assignee !== assigneeFilter) {\n return false;\n }\n if (sprintFilter !== undefined && item.sprint !== sprintFilter) return false;\n if (releaseFilter !== undefined && item.release !== releaseFilter) return false;\n if (!matchesRuntimeFilters(item as Record<string, unknown>, runtimeFieldFilters)) return false;\n return true;\n });\n}\n\nfunction includeEventInWindow(event: CalendarRow, start: string | undefined, end: string | undefined): boolean {\n if (start && compareTimestampStrings(event.at, start) < 0) {\n return false;\n }\n if (end && compareTimestampStrings(event.at, end) >= 0) {\n return false;\n }\n return true;\n}\n\nfunction resolveCalendarBoundaryInput(raw: string, nowValue: string, fieldLabel: \"--date\" | \"--from\" | \"--to\"): string {\n if (raw.trim().toLowerCase() === \"today\") {\n return startOfUtcDay(nowValue);\n }\n return resolveIsoOrRelative(raw, new Date(nowValue), fieldLabel);\n}\n\nfunction buildRange(\n view: CalendarView,\n options: CalendarOptions,\n nowValue: string,\n): {\n anchor: string;\n start?: string;\n end?: string;\n periodStart?: string;\n periodEnd?: string;\n fullPeriod: boolean;\n} {\n const anchor = options.date ? resolveCalendarBoundaryInput(options.date, nowValue, \"--date\") : nowValue;\n const includePast = options.past === true;\n const fullPeriodRequested = options.fullPeriod === true;\n\n const from = options.from ? resolveCalendarBoundaryInput(options.from, nowValue, \"--from\") : undefined;\n const to = options.to ? resolveCalendarBoundaryInput(options.to, nowValue, \"--to\") : undefined;\n if (from && to && compareTimestampStrings(from, to) >= 0) {\n throw new PmCliError(\"Calendar --from must be before --to\", EXIT_CODE.USAGE);\n }\n\n if (view !== \"agenda\" && (options.from !== undefined || options.to !== undefined)) {\n throw new PmCliError(\"--from and --to are only supported for --view agenda\", EXIT_CODE.USAGE);\n }\n\n if (view === \"agenda\") {\n if (fullPeriodRequested) {\n throw new PmCliError(\n \"--full-period is only supported for --view day|week|month. For agenda windows, use --from and --to.\",\n EXIT_CODE.USAGE,\n );\n }\n const start = from ?? (options.date ? anchor : includePast ? undefined : nowValue);\n return {\n anchor,\n start,\n end: to,\n fullPeriod: false,\n };\n }\n\n if (view === \"day\") {\n const dayStart = startOfUtcDay(anchor);\n const fullPeriod = includePast || fullPeriodRequested;\n const start = fullPeriod ? dayStart : maxTimestamp(dayStart, nowValue);\n return {\n anchor,\n start,\n end: addUtcDays(dayStart, 1),\n periodStart: dayStart,\n periodEnd: addUtcDays(dayStart, 1),\n fullPeriod,\n };\n }\n\n if (view === \"week\") {\n const weekStart = startOfUtcWeekMonday(anchor);\n const fullPeriod = includePast || fullPeriodRequested;\n const start = fullPeriod ? weekStart : maxTimestamp(weekStart, nowValue);\n return {\n anchor,\n start,\n end: addUtcDays(weekStart, 7),\n periodStart: weekStart,\n periodEnd: addUtcDays(weekStart, 7),\n fullPeriod,\n };\n }\n\n const monthStart = startOfUtcMonth(anchor);\n const monthEnd = startOfNextUtcMonth(anchor);\n const fullPeriod = includePast || fullPeriodRequested;\n const start = fullPeriod ? monthStart : maxTimestamp(monthStart, nowValue);\n return {\n anchor,\n start,\n end: monthEnd,\n periodStart: monthStart,\n periodEnd: monthEnd,\n fullPeriod,\n };\n}\n\nfunction bucketEventsByDay(events: CalendarRow[]): CalendarDayBucket[] {\n const dayMap = new Map<string, CalendarRow[]>();\n for (const event of events) {\n const list = dayMap.get(event.date) ?? [];\n list.push(event);\n dayMap.set(event.date, list);\n }\n return [...dayMap.entries()]\n .sort(([left], [right]) => left.localeCompare(right))\n .map(([date, dayEvents]) => ({\n date,\n count: dayEvents.length,\n events: sortEvents(dayEvents),\n }));\n}\n\nfunction summarize(events: CalendarRow[]): CalendarResult[\"summary\"] {\n const itemIds = new Set<string>();\n const byType = new Map<string, number>();\n const byStatus = new Map<string, number>();\n let deadlines = 0;\n let reminders = 0;\n let scheduled = 0;\n let recurringEvents = 0;\n for (const event of events) {\n itemIds.add(event.item_id);\n incrementCount(byType, event.item_type);\n incrementCount(byStatus, event.item_status);\n if (event.kind === \"deadline\") {\n deadlines += 1;\n } else if (event.kind === \"reminder\") {\n reminders += 1;\n } else {\n scheduled += 1;\n if (event.event_recurring === true) {\n recurringEvents += 1;\n }\n }\n }\n return {\n events: events.length,\n items: itemIds.size,\n deadlines,\n reminders,\n scheduled,\n by_kind: {\n deadline: deadlines,\n reminder: reminders,\n event: scheduled,\n },\n by_type: toSortedCountRecord(byType),\n by_status: toSortedCountRecord(byStatus),\n recurring_events: recurringEvents,\n };\n}\n\nfunction formatWindow(range: CalendarResult[\"range\"]): string {\n const start = range.start ?? \"unbounded\";\n const end = range.end ?? \"unbounded\";\n return `${start} -> ${end}`;\n}\n\nfunction formatClock(timestamp: string): string {\n return `${new Date(timestamp).toISOString().slice(11, 16)}Z`;\n}\n\nfunction formatSummaryCountRecord(values: Record<string, number>): string {\n const entries = Object.entries(values);\n if (entries.length === 0) {\n return \"empty\";\n }\n return entries.map(([key, value]) => `${key}=${value}`).join(\", \");\n}\n\nfunction formatEventEnd(event: CalendarRow): string | null {\n if (!event.event_end) {\n return null;\n }\n if (event.event_all_day === true) {\n return event.event_end.slice(0, 10);\n }\n if (event.date === toUtcDayKey(event.event_end)) {\n return formatClock(event.event_end);\n }\n return event.event_end;\n}\n\nfunction formatEventLine(event: CalendarRow): string {\n const core = `${formatClock(event.at)} [${event.kind}] ${event.item_id} type=${event.item_type} p${event.item_priority} ${event.item_status} ${event.item_title}`;\n if (event.kind === \"reminder\") {\n const reminderText = event.reminder_text ?? \"\";\n return `${core} — ${reminderText} reminder=${JSON.stringify(reminderText)}`;\n }\n if (event.kind === \"event\") {\n const details: string[] = [];\n const title = event.event_title ?? event.item_title;\n const titleDiffers = event.event_title !== null && event.event_title !== event.item_title;\n if (titleDiffers) {\n details.push(title);\n details.push(`title=${JSON.stringify(title)}`);\n }\n if (event.event_recurring) {\n details.push(\"(recurring)\");\n details.push(\"recurring=true\");\n }\n const end = formatEventEnd(event);\n if (end) {\n details.push(`end=${end}`);\n }\n if (event.event_all_day !== null) {\n details.push(`all_day=${event.event_all_day ? \"true\" : \"false\"}`);\n }\n if (event.event_timezone) {\n details.push(`timezone=${event.event_timezone}`);\n }\n if (event.event_location) {\n details.push(`@ ${event.event_location}`);\n details.push(`location=${JSON.stringify(event.event_location)}`);\n }\n if (event.event_recurrence_rule) {\n details.push(`recurrence=${event.event_recurrence_rule}`);\n }\n if (event.reminder_text) {\n details.push(`description=${JSON.stringify(event.reminder_text)}`);\n }\n return `${core} — ${details.join(\" \")}`;\n }\n return core;\n}\n\nexport function renderCalendarMarkdown(result: CalendarResult): string {\n const lines: string[] = [];\n lines.push(`# pm calendar (${result.view})`);\n lines.push(\"\");\n lines.push(`- now: ${result.now}`);\n lines.push(`- window: ${formatWindow(result.range)}`);\n if (result.range.period_start && result.range.period_end) {\n lines.push(`- period: ${result.range.period_start} -> ${result.range.period_end}`);\n lines.push(`- period-mode: ${result.range.full_period ? \"full-period\" : \"active-window\"}`);\n }\n lines.push(\n `- events: ${result.summary.events} (deadlines: ${result.summary.deadlines}, reminders: ${result.summary.reminders}, scheduled: ${result.summary.scheduled})`,\n );\n lines.push(`- items: ${result.summary.items}`);\n lines.push(`- by-kind: ${formatSummaryCountRecord(result.summary.by_kind)}`);\n lines.push(`- by-type: ${formatSummaryCountRecord(result.summary.by_type)}`);\n lines.push(`- by-status: ${formatSummaryCountRecord(result.summary.by_status)}`);\n lines.push(`- recurring-events: ${result.summary.recurring_events}`);\n lines.push(\"\");\n\n if (result.events.length === 0) {\n lines.push(\"No calendar events matched the selected filters.\");\n return lines.join(\"\\n\");\n }\n\n for (const day of result.days) {\n lines.push(`## ${day.date} (${day.count})`);\n for (const event of day.events) {\n lines.push(`- ${formatEventLine(event)}`);\n }\n lines.push(\"\");\n }\n if (result.warnings && result.warnings.length > 0) {\n lines.push(\"### warnings\");\n for (const warning of result.warnings) {\n lines.push(`- ${warning}`);\n }\n lines.push(\"\");\n }\n return lines.join(\"\\n\").replace(/\\n+$/, \"\");\n}\n\nexport async function runCalendar(options: CalendarOptions, global: GlobalOptions): Promise<CalendarResult> {\n const pmRoot = resolvePmRoot(process.cwd(), global.path);\n if (!(await pathExists(getSettingsPath(pmRoot)))) {\n throw new PmCliError(`Tracker is not initialized at ${pmRoot}. Run pm init first.`, EXIT_CODE.NOT_FOUND);\n }\n\n const nowValue = nowIso();\n const view = parseView(options.view);\n const rangeBounds = buildRange(view, options, nowValue);\n const limit = parseIntegerLimit(options.limit);\n const includeSources = parseIncludeSources(options.include);\n const explicitLookahead = parseNonNegativeInteger(options.recurrenceLookaheadDays, \"Calendar recurrence lookahead days\");\n const recurrenceLookbackDays = parseNonNegativeInteger(options.recurrenceLookbackDays, \"Calendar recurrence lookback days\");\n const occurrenceLimit = parseNonNegativeInteger(options.occurrenceLimit, \"Calendar occurrence limit\");\n if (occurrenceLimit !== undefined && occurrenceLimit < 1) {\n throw new PmCliError(\"Calendar occurrence limit must be >= 1\", EXIT_CODE.USAGE);\n }\n\n const eventsOnly = includeSources.has(\"events\") && !includeSources.has(\"deadlines\") && !includeSources.has(\"reminders\");\n const hasExplicitBounds = options.to !== undefined || explicitLookahead !== undefined || occurrenceLimit !== undefined;\n const eventsOnlyCapApplied = eventsOnly && !hasExplicitBounds;\n const recurrenceLookaheadDays = eventsOnlyCapApplied ? DEFAULT_EVENTS_ONLY_LOOKAHEAD_DAYS : explicitLookahead;\n\n const settings = await readSettings(pmRoot);\n const statusRegistry = resolveRuntimeStatusRegistry(settings.schema);\n const runtimeFieldRegistry = resolveRuntimeFieldRegistry(settings.schema);\n const runtimeFieldFilters = collectRuntimeFilterValues(options as Record<string, unknown>, runtimeFieldRegistry, \"calendar\");\n const typeRegistry = resolveItemTypeRegistry(settings, getActiveExtensionRegistrations());\n const listWarnings: string[] = [];\n if (eventsOnlyCapApplied) {\n listWarnings.push(\n `recurring_events_default_cap_applied:${DEFAULT_EVENTS_ONLY_LOOKAHEAD_DAYS}d -- use --recurrence-lookahead-days or --to for wider range`,\n );\n }\n const items = await listAllFrontMatter(pmRoot, settings.item_format, typeRegistry.type_to_folder, listWarnings, settings.schema);\n const filteredItems = filterItems(items, options, typeRegistry, statusRegistry, runtimeFieldFilters);\n const recurringWindow = buildRecurringEventWindow(\n rangeBounds.start,\n rangeBounds.end,\n nowValue,\n recurrenceLookbackDays,\n recurrenceLookaheadDays,\n );\n const seededEvents = buildEventSeed(filteredItems, recurringWindow, includeSources, occurrenceLimit);\n const rangedEvents = seededEvents.filter((event) => includeEventInWindow(event, rangeBounds.start, rangeBounds.end));\n const limitedEvents = limit === undefined ? rangedEvents : rangedEvents.slice(0, limit);\n const days = bucketEventsByDay(limitedEvents);\n const warnings = [...new Set(listWarnings)].sort((left, right) => left.localeCompare(right));\n\n return {\n view,\n output_default: \"markdown\",\n now: nowValue,\n anchor: rangeBounds.anchor,\n range: {\n start: rangeBounds.start ?? null,\n end: rangeBounds.end ?? null,\n period_start: rangeBounds.periodStart ?? null,\n period_end: rangeBounds.periodEnd ?? null,\n full_period: rangeBounds.fullPeriod,\n past: options.past === true,\n from: options.from ?? null,\n to: options.to ?? null,\n },\n filters: {\n type: options.type ?? null,\n tag: options.tag ?? null,\n priority: options.priority ?? null,\n status: options.status ?? null,\n assignee: options.assignee ?? null,\n assignee_filter: options.assigneeFilter ?? null,\n sprint: options.sprint ?? null,\n release: options.release ?? null,\n runtime_filters: runtimeFieldFilters,\n limit: options.limit ?? null,\n include: options.include ?? null,\n full_period: options.fullPeriod === true ? \"true\" : null,\n recurrence_lookahead_days: options.recurrenceLookaheadDays ?? null,\n recurrence_lookback_days: options.recurrenceLookbackDays ?? null,\n occurrence_limit: options.occurrenceLimit ?? null,\n },\n summary: summarize(limitedEvents),\n events: limitedEvents,\n days,\n ...(warnings.length > 0 ? { warnings } : {}),\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"calendar.js","sourceRoot":"/","sources":["cli/commands/calendar.ts"],"names":[],"mappings":"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","sourcesContent":["import { pathExists } from \"../../core/fs/fs-utils.js\";\nimport { getActiveExtensionRegistrations } from \"../../core/extensions/index.js\";\nimport { resolveItemTypeRegistry, type ItemTypeRegistry } from \"../../core/item/type-registry.js\";\nimport { parseIntegerLimit, parsePriority, parseType } from \"../shared-parsers.js\";\nimport { normalizeStatusInput } from \"../../core/item/status.js\";\nimport { collectRuntimeFilterValues, matchesRuntimeFilters } from \"../../core/schema/runtime-field-filters.js\";\nimport {\n resolveRuntimeFieldRegistry,\n resolveRuntimeStatusRegistry,\n type RuntimeStatusRegistry,\n} from \"../../core/schema/runtime-schema.js\";\nimport { EXIT_CODE } from \"../../core/shared/constants.js\";\nimport type { GlobalOptions } from \"../../core/shared/command-types.js\";\nimport { PmCliError } from \"../../core/shared/errors.js\";\nimport { compareTimestampStrings, nowIso, resolveIsoOrRelative } from \"../../core/shared/time.js\";\nimport { listAllFrontMatter } from \"../../core/store/item-store.js\";\nimport { getSettingsPath, resolvePmRoot } from \"../../core/store/paths.js\";\nimport { readSettings } from \"../../core/store/settings.js\";\nimport type { ItemFrontMatter, ItemStatus, ItemType, RecurrenceRule } from \"../../types/index.js\";\nimport { RECURRENCE_WEEKDAY_VALUES } from \"../../types/index.js\";\n\nexport const CALENDAR_VIEW_VALUES = [\"agenda\", \"day\", \"week\", \"month\"] as const;\nexport type CalendarView = (typeof CALENDAR_VIEW_VALUES)[number];\n\nexport const CALENDAR_OUTPUT_VALUES = [\"markdown\", \"toon\", \"json\"] as const;\nexport type CalendarOutputFormat = (typeof CALENDAR_OUTPUT_VALUES)[number];\n\nexport interface CalendarOptions {\n view?: string;\n date?: string;\n from?: string;\n to?: string;\n past?: boolean;\n fullPeriod?: boolean;\n limit?: string;\n type?: string;\n tag?: string;\n priority?: string;\n status?: string;\n assignee?: string;\n assigneeFilter?: string;\n sprint?: string;\n release?: string;\n include?: string;\n recurrenceLookaheadDays?: string;\n recurrenceLookbackDays?: string;\n occurrenceLimit?: string;\n format?: string;\n [key: string]: unknown;\n}\n\nexport interface CalendarRow {\n at: string;\n date: string;\n kind: \"deadline\" | \"reminder\" | \"event\";\n reminder_text: string | null;\n event_title: string | null;\n event_end: string | null;\n event_location: string | null;\n event_all_day: boolean | null;\n event_timezone: string | null;\n event_recurring: boolean | null;\n event_recurrence_rule: string | null;\n item_id: string;\n item_title: string;\n item_type: ItemType;\n item_status: ItemStatus;\n item_priority: number;\n item_assignee: string | null;\n item_deadline: string | null;\n item_tags: string[];\n}\n\nexport interface CalendarDayBucket {\n date: string;\n count: number;\n events: CalendarRow[];\n}\n\nexport interface CalendarResult {\n view: CalendarView;\n output_default: \"markdown\";\n now: string;\n anchor: string;\n range: {\n start: string | null;\n end: string | null;\n period_start: string | null;\n period_end: string | null;\n full_period: boolean;\n past: boolean;\n from: string | null;\n to: string | null;\n };\n filters: {\n type: string | null;\n tag: string | null;\n priority: string | null;\n status: string | null;\n assignee: string | null;\n assignee_filter: string | null;\n sprint: string | null;\n release: string | null;\n runtime_filters?: Record<string, unknown>;\n limit: string | null;\n include: string | null;\n full_period: string | null;\n recurrence_lookahead_days: string | null;\n recurrence_lookback_days: string | null;\n occurrence_limit: string | null;\n };\n summary: {\n events: number;\n items: number;\n deadlines: number;\n reminders: number;\n scheduled: number;\n by_kind: {\n deadline: number;\n reminder: number;\n event: number;\n };\n by_type: Record<string, number>;\n by_status: Record<string, number>;\n recurring_events: number;\n };\n events: CalendarRow[];\n days: CalendarDayBucket[];\n warnings?: string[];\n}\n\nconst UTC_DAY_TO_WEEKDAY = [\"sun\", \"mon\", \"tue\", \"wed\", \"thu\", \"fri\", \"sat\"] as const;\nconst DEFAULT_RECURRENCE_LOOKAHEAD_DAYS = 365;\nconst DEFAULT_RECURRENCE_LOOKBACK_DAYS = 365;\nconst DEFAULT_EVENTS_ONLY_LOOKAHEAD_DAYS = 28;\nconst MAX_RECURRENCE_OCCURRENCES = 1000;\n\nfunction weekdayOrderIndex(value: (typeof RECURRENCE_WEEKDAY_VALUES)[number]): number {\n return RECURRENCE_WEEKDAY_VALUES.indexOf(value);\n}\n\nfunction parseNonNegativeInteger(raw: string | undefined, label: string): number | undefined {\n if (raw === undefined) return undefined;\n const parsed = Number(raw);\n if (!Number.isInteger(parsed) || parsed < 0) {\n throw new PmCliError(`${label} must be a non-negative integer`, EXIT_CODE.USAGE);\n }\n return parsed;\n}\n\ntype CalendarIncludeKind = \"deadlines\" | \"reminders\" | \"events\";\n\nfunction parseIncludeSources(raw: string | undefined): Set<CalendarIncludeKind> {\n if (!raw) {\n return new Set([\"deadlines\", \"reminders\", \"events\"]);\n }\n const normalized = raw.trim().toLowerCase();\n if (normalized === \"all\") {\n return new Set([\"deadlines\", \"reminders\", \"events\"]);\n }\n const values = normalized\n .split(/[\\|,]/)\n .map((value) => value.trim())\n .filter((value) => value.length > 0);\n if (values.length === 0) {\n throw new PmCliError(\"Calendar include filter must not be empty\", EXIT_CODE.USAGE);\n }\n const include = new Set<CalendarIncludeKind>();\n for (const value of values) {\n if (value === \"deadlines\" || value === \"deadline\") {\n include.add(\"deadlines\");\n continue;\n }\n if (value === \"reminders\" || value === \"reminder\") {\n include.add(\"reminders\");\n continue;\n }\n if (value === \"events\" || value === \"event\" || value === \"scheduled\") {\n include.add(\"events\");\n continue;\n }\n throw new PmCliError(\"Calendar include filter must be deadlines|reminders|events|scheduled|all\", EXIT_CODE.USAGE);\n }\n return include;\n}\n\nfunction parseView(raw: string | undefined): CalendarView {\n if (!raw) return \"agenda\";\n const normalized = raw.trim().toLowerCase();\n if (!CALENDAR_VIEW_VALUES.includes(normalized as CalendarView)) {\n throw new PmCliError(\"Calendar view must be one of agenda|day|week|month\", EXIT_CODE.USAGE);\n }\n return normalized as CalendarView;\n}\n\nfunction parseOutputFormat(raw: string | undefined): CalendarOutputFormat | undefined {\n if (!raw) return undefined;\n const normalized = raw.trim().toLowerCase();\n if (!CALENDAR_OUTPUT_VALUES.includes(normalized as CalendarOutputFormat)) {\n throw new PmCliError(\"Calendar format must be one of markdown|toon|json\", EXIT_CODE.USAGE);\n }\n return normalized as CalendarOutputFormat;\n}\n\nexport function resolveCalendarOutputFormat(options: CalendarOptions, global: GlobalOptions): CalendarOutputFormat {\n const commandFormat = parseOutputFormat(options.format);\n if (global.json && commandFormat && commandFormat !== \"json\") {\n throw new PmCliError(\"Cannot combine --json with --format markdown|toon\", EXIT_CODE.USAGE);\n }\n if (global.json) {\n return \"json\";\n }\n return commandFormat ?? \"markdown\";\n}\n\nfunction parseStatus(raw: string | undefined, statusRegistry: RuntimeStatusRegistry): ItemStatus | undefined {\n if (raw === undefined) return undefined;\n const normalized = normalizeStatusInput(raw, statusRegistry);\n if (!normalized) {\n const allowedStatuses = statusRegistry.definitions.map((definition) => definition.id);\n throw new PmCliError(`Calendar status filter must be one of ${allowedStatuses.join(\"|\")}`, EXIT_CODE.USAGE);\n }\n return normalized;\n}\n\nfunction parseAssigneeFilter(raw: string | undefined): \"assigned\" | \"unassigned\" | undefined {\n if (raw === undefined) {\n return undefined;\n }\n const normalized = raw.trim().toLowerCase();\n if (!normalized) {\n throw new PmCliError(\"Calendar assignee filter must be one of assigned|unassigned\", EXIT_CODE.USAGE);\n }\n if (normalized !== \"assigned\" && normalized !== \"unassigned\") {\n throw new PmCliError(`Invalid calendar assignee filter \"${raw}\". Allowed: assigned|unassigned`, EXIT_CODE.USAGE);\n }\n return normalized;\n}\n\nfunction toUtcDayKey(timestamp: string): string {\n return new Date(timestamp).toISOString().slice(0, 10);\n}\n\nfunction startOfUtcDay(timestamp: string): string {\n const date = new Date(timestamp);\n return new Date(Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), 0, 0, 0, 0)).toISOString();\n}\n\nfunction addUtcDays(timestamp: string, days: number): string {\n const date = new Date(timestamp);\n return new Date(date.getTime() + days * 24 * 60 * 60 * 1000).toISOString();\n}\n\nfunction startOfUtcWeekMonday(timestamp: string): string {\n const base = new Date(startOfUtcDay(timestamp));\n const day = base.getUTCDay();\n const delta = day === 0 ? -6 : 1 - day;\n return addUtcDays(base.toISOString(), delta);\n}\n\nfunction startOfUtcMonth(timestamp: string): string {\n const date = new Date(timestamp);\n return new Date(Date.UTC(date.getUTCFullYear(), date.getUTCMonth(), 1, 0, 0, 0, 0)).toISOString();\n}\n\nfunction startOfNextUtcMonth(timestamp: string): string {\n const date = new Date(timestamp);\n return new Date(Date.UTC(date.getUTCFullYear(), date.getUTCMonth() + 1, 1, 0, 0, 0, 0)).toISOString();\n}\n\nfunction maxTimestamp(left: string, right: string): string {\n return compareTimestampStrings(left, right) >= 0 ? left : right;\n}\n\nfunction toSortedCountRecord(values: Map<string, number>): Record<string, number> {\n return Object.fromEntries([...values.entries()].sort(([left], [right]) => left.localeCompare(right)));\n}\n\nfunction incrementCount(values: Map<string, number>, key: string): void {\n values.set(key, (values.get(key) ?? 0) + 1);\n}\n\nfunction formatRecurrenceRuleForSummary(rule: RecurrenceRule | undefined): string | null {\n if (!rule) {\n return null;\n }\n const parts: string[] = [`freq=${rule.freq}`];\n if (rule.interval !== undefined) {\n parts.push(`interval=${rule.interval}`);\n }\n if (rule.count !== undefined) {\n parts.push(`count=${rule.count}`);\n }\n if (rule.until) {\n parts.push(`until=${rule.until}`);\n }\n if (rule.by_weekday && rule.by_weekday.length > 0) {\n const weekdays = [...rule.by_weekday].sort((left, right) => weekdayOrderIndex(left) - weekdayOrderIndex(right));\n parts.push(`by_weekday=${weekdays.join(\"|\")}`);\n }\n if (rule.by_month_day && rule.by_month_day.length > 0) {\n const monthDays = [...rule.by_month_day].sort((left, right) => left - right);\n parts.push(`by_month_day=${monthDays.join(\"|\")}`);\n }\n if (rule.exdates && rule.exdates.length > 0) {\n const exdates = [...rule.exdates].sort((left, right) => left.localeCompare(right));\n parts.push(`exdates=${exdates.join(\"|\")}`);\n }\n return parts.join(\",\");\n}\n\nfunction buildUtcTimestamp(year: number, month: number, day: number, timeSource: Date): string | undefined {\n const candidate = new Date(\n Date.UTC(\n year,\n month,\n day,\n timeSource.getUTCHours(),\n timeSource.getUTCMinutes(),\n timeSource.getUTCSeconds(),\n timeSource.getUTCMilliseconds(),\n ),\n );\n if (candidate.getUTCFullYear() !== year || candidate.getUTCMonth() !== month || candidate.getUTCDate() !== day) {\n return undefined;\n }\n return candidate.toISOString();\n}\n\nfunction weekdayToken(timestamp: string): (typeof UTC_DAY_TO_WEEKDAY)[number] {\n return UTC_DAY_TO_WEEKDAY[new Date(timestamp).getUTCDay()];\n}\n\nfunction buildRecurringEventWindow(\n start: string | undefined,\n end: string | undefined,\n nowValue: string,\n lookbackDays: number | undefined,\n lookaheadDays: number | undefined,\n): { start: string; end: string } {\n const windowStart = start ?? addUtcDays(nowValue, -(lookbackDays ?? DEFAULT_RECURRENCE_LOOKBACK_DAYS));\n const windowEnd = end ?? addUtcDays(start ?? nowValue, lookaheadDays ?? DEFAULT_RECURRENCE_LOOKAHEAD_DAYS);\n return {\n start: windowStart,\n end: compareTimestampStrings(windowEnd, windowStart) > 0 ? windowEnd : addUtcDays(windowStart, 1),\n };\n}\n\nfunction expandRecurringOccurrences(\n startAt: string,\n recurrence: RecurrenceRule,\n window: { start: string; end: string },\n occurrenceLimit: number | undefined,\n): string[] {\n const maxOccurrences = occurrenceLimit ?? MAX_RECURRENCE_OCCURRENCES;\n const interval = recurrence.interval ?? 1;\n const countLimit = recurrence.count ?? Number.POSITIVE_INFINITY;\n const until = recurrence.until;\n const excluded = new Set(recurrence.exdates ?? []);\n const recurrenceWeekdays =\n recurrence.by_weekday && recurrence.by_weekday.length > 0 ? [...recurrence.by_weekday] : [weekdayToken(startAt)];\n const recurrenceMonthDays =\n recurrence.by_month_day && recurrence.by_month_day.length > 0 ? [...recurrence.by_month_day] : [new Date(startAt).getUTCDate()];\n const weekdayFilter = recurrence.by_weekday ? new Set(recurrence.by_weekday) : undefined;\n const monthDayFilter = recurrence.by_month_day ? new Set(recurrence.by_month_day) : undefined;\n const sortedWeekdays = [...new Set(recurrenceWeekdays)].sort(\n (left, right) =>\n weekdayOrderIndex(left as (typeof RECURRENCE_WEEKDAY_VALUES)[number]) -\n weekdayOrderIndex(right as (typeof RECURRENCE_WEEKDAY_VALUES)[number]),\n );\n const sortedMonthDays = [...new Set(recurrenceMonthDays)].sort((left, right) => left - right);\n\n const occurrences: string[] = [];\n let produced = 0;\n const consumeCandidate = (candidateAt: string): \"continue\" | \"stop\" => {\n if (compareTimestampStrings(candidateAt, startAt) < 0) {\n return \"continue\";\n }\n if (until && compareTimestampStrings(candidateAt, until) > 0) {\n return \"stop\";\n }\n if (compareTimestampStrings(candidateAt, window.end) >= 0) {\n return \"stop\";\n }\n if (excluded.has(candidateAt)) {\n return \"continue\";\n }\n produced += 1;\n if (compareTimestampStrings(candidateAt, window.start) >= 0) {\n occurrences.push(candidateAt);\n }\n if (produced >= countLimit) {\n return \"stop\";\n }\n return \"continue\";\n };\n\n const startDate = new Date(startAt);\n if (recurrence.freq === \"daily\") {\n let candidateAt = startAt;\n for (let iteration = 0; iteration < maxOccurrences; iteration += 1) {\n const candidateWeekday = weekdayToken(candidateAt);\n const candidateMonthDay = new Date(candidateAt).getUTCDate();\n const weekdayMatches = !weekdayFilter || weekdayFilter.has(candidateWeekday);\n const monthDayMatches = !monthDayFilter || monthDayFilter.has(candidateMonthDay);\n if (weekdayMatches && monthDayMatches && consumeCandidate(candidateAt) === \"stop\") {\n break;\n }\n candidateAt = addUtcDays(candidateAt, interval);\n }\n return occurrences;\n }\n\n if (recurrence.freq === \"weekly\") {\n const weekStart = startOfUtcWeekMonday(startAt);\n for (let step = 0; step < maxOccurrences; step += 1) {\n const candidateWeekStart = addUtcDays(weekStart, step * interval * 7);\n for (const weekday of sortedWeekdays) {\n const dayOffset = weekdayOrderIndex(weekday as (typeof RECURRENCE_WEEKDAY_VALUES)[number]);\n const candidateDay = addUtcDays(candidateWeekStart, dayOffset);\n const dayDate = new Date(candidateDay);\n const candidateAt = new Date(\n Date.UTC(\n dayDate.getUTCFullYear(),\n dayDate.getUTCMonth(),\n dayDate.getUTCDate(),\n startDate.getUTCHours(),\n startDate.getUTCMinutes(),\n startDate.getUTCSeconds(),\n startDate.getUTCMilliseconds(),\n ),\n ).toISOString();\n const candidateMonthDay = dayDate.getUTCDate();\n if (monthDayFilter && !monthDayFilter.has(candidateMonthDay)) {\n continue;\n }\n const consumed = consumeCandidate(candidateAt);\n if (consumed === \"stop\") {\n return occurrences;\n }\n }\n }\n return occurrences;\n }\n\n if (recurrence.freq === \"monthly\") {\n const startYear = startDate.getUTCFullYear();\n const startMonth = startDate.getUTCMonth();\n for (let step = 0; step < maxOccurrences; step += 1) {\n const monthAnchor = new Date(Date.UTC(startYear, startMonth + step * interval, 1, 0, 0, 0, 0));\n const year = monthAnchor.getUTCFullYear();\n const month = monthAnchor.getUTCMonth();\n for (const monthDay of sortedMonthDays) {\n const candidateAt = buildUtcTimestamp(year, month, monthDay, startDate);\n if (!candidateAt) {\n continue;\n }\n const candidateWeekday = weekdayToken(candidateAt);\n if (weekdayFilter && !weekdayFilter.has(candidateWeekday)) {\n continue;\n }\n const consumed = consumeCandidate(candidateAt);\n if (consumed === \"stop\") {\n return occurrences;\n }\n }\n }\n return occurrences;\n }\n\n const year = startDate.getUTCFullYear();\n const month = startDate.getUTCMonth();\n for (let step = 0; step < maxOccurrences; step += 1) {\n const candidateYear = year + step * interval;\n for (const monthDay of sortedMonthDays) {\n const candidateAt = buildUtcTimestamp(candidateYear, month, monthDay, startDate);\n if (!candidateAt) {\n continue;\n }\n const candidateWeekday = weekdayToken(candidateAt);\n if (weekdayFilter && !weekdayFilter.has(candidateWeekday)) {\n continue;\n }\n const consumed = consumeCandidate(candidateAt);\n if (consumed === \"stop\") {\n return occurrences;\n }\n }\n }\n\n return occurrences;\n}\n\nfunction sortEvents(values: CalendarRow[]): CalendarRow[] {\n return [...values].sort((a, b) => {\n const byAt = compareTimestampStrings(a.at, b.at);\n if (byAt !== 0) return byAt;\n const byPriority = a.item_priority - b.item_priority;\n if (byPriority !== 0) return byPriority;\n const byId = a.item_id.localeCompare(b.item_id);\n if (byId !== 0) return byId;\n const byKind = a.kind.localeCompare(b.kind);\n if (byKind !== 0) return byKind;\n const byEventTitle = String(a.event_title).localeCompare(String(b.event_title));\n if (byEventTitle !== 0) return byEventTitle;\n return String(a.reminder_text).localeCompare(String(b.reminder_text));\n });\n}\n\nfunction buildEventSeed(\n items: ItemFrontMatter[],\n recurringWindow: { start: string; end: string },\n includeSources: Set<CalendarIncludeKind>,\n occurrenceLimit: number | undefined,\n): CalendarRow[] {\n const events: CalendarRow[] = [];\n for (const item of items) {\n if (includeSources.has(\"deadlines\") && item.deadline) {\n events.push({\n at: item.deadline,\n date: toUtcDayKey(item.deadline),\n kind: \"deadline\",\n reminder_text: null,\n event_title: null,\n event_end: null,\n event_location: null,\n event_all_day: null,\n event_timezone: null,\n event_recurring: null,\n event_recurrence_rule: null,\n item_id: item.id,\n item_title: item.title,\n item_type: item.type,\n item_status: item.status,\n item_priority: item.priority,\n item_assignee: item.assignee ?? null,\n item_deadline: item.deadline,\n item_tags: item.tags,\n });\n }\n for (const reminder of includeSources.has(\"reminders\") ? (item.reminders ?? []) : []) {\n events.push({\n at: reminder.at,\n date: toUtcDayKey(reminder.at),\n kind: \"reminder\",\n reminder_text: reminder.text,\n event_title: null,\n event_end: null,\n event_location: null,\n event_all_day: null,\n event_timezone: null,\n event_recurring: null,\n event_recurrence_rule: null,\n item_id: item.id,\n item_title: item.title,\n item_type: item.type,\n item_status: item.status,\n item_priority: item.priority,\n item_assignee: item.assignee ?? null,\n item_deadline: item.deadline ?? null,\n item_tags: item.tags,\n });\n }\n for (const event of includeSources.has(\"events\") ? (item.events ?? []) : []) {\n const recurrenceRuleSummary = formatRecurrenceRuleForSummary(event.recurrence);\n const recurringDurationMs = (() => {\n if (!event.end_at) {\n return null;\n }\n const duration = Date.parse(event.end_at) - Date.parse(event.start_at);\n return Number.isFinite(duration) && duration > 0 ? duration : null;\n })();\n const occurrences = event.recurrence\n ? expandRecurringOccurrences(event.start_at, event.recurrence, recurringWindow, occurrenceLimit)\n : [event.start_at];\n for (const occurrenceAt of occurrences) {\n const occurrenceEnd =\n event.recurrence && recurringDurationMs !== null\n ? new Date(new Date(occurrenceAt).getTime() + recurringDurationMs).toISOString()\n : (event.end_at ?? null);\n events.push({\n at: occurrenceAt,\n date: toUtcDayKey(occurrenceAt),\n kind: \"event\",\n reminder_text: event.description ?? null,\n event_title: event.title ?? item.title,\n event_end: occurrenceEnd,\n event_location: event.location ?? null,\n event_all_day: event.all_day ?? null,\n event_timezone: event.timezone ?? null,\n event_recurring: event.recurrence ? true : false,\n event_recurrence_rule: recurrenceRuleSummary,\n item_id: item.id,\n item_title: item.title,\n item_type: item.type,\n item_status: item.status,\n item_priority: item.priority,\n item_assignee: item.assignee ?? null,\n item_deadline: item.deadline ?? null,\n item_tags: item.tags,\n });\n }\n }\n }\n return sortEvents(events);\n}\n\nfunction filterItems(\n items: ItemFrontMatter[],\n options: CalendarOptions,\n typeRegistry: ItemTypeRegistry,\n statusRegistry: RuntimeStatusRegistry,\n runtimeFieldFilters: Record<string, unknown>,\n): ItemFrontMatter[] {\n const typeFilter = parseType(options.type, typeRegistry);\n const tagFilter = options.tag?.trim().toLowerCase();\n const priorityFilter = parsePriority(options.priority);\n const statusFilter = parseStatus(options.status, statusRegistry);\n const assigneeFilter = options.assignee?.trim();\n const assigneeModeFilter = parseAssigneeFilter(options.assigneeFilter);\n const sprintFilter = options.sprint?.trim();\n const releaseFilter = options.release?.trim();\n\n if (assigneeFilter && (assigneeFilter.toLowerCase() === \"none\" || assigneeFilter.toLowerCase() === \"null\")) {\n throw new PmCliError(\n '--assignee no longer accepts \"none\" or \"null\". Use --assignee-filter unassigned.',\n EXIT_CODE.USAGE,\n );\n }\n if (assigneeFilter !== undefined && assigneeModeFilter === \"unassigned\") {\n throw new PmCliError(\"Cannot combine --assignee with --assignee-filter unassigned\", EXIT_CODE.USAGE);\n }\n\n return items.filter((item) => {\n if (typeFilter && item.type !== typeFilter) return false;\n if (tagFilter && !item.tags.some((tag) => tag.trim().toLowerCase() === tagFilter)) return false;\n if (priorityFilter !== undefined && item.priority !== priorityFilter) return false;\n if (statusFilter && item.status !== statusFilter) return false;\n if (assigneeModeFilter === \"assigned\" && !item.assignee) return false;\n if (assigneeModeFilter === \"unassigned\" && item.assignee) return false;\n if (assigneeFilter !== undefined && item.assignee !== assigneeFilter) {\n return false;\n }\n if (sprintFilter !== undefined && item.sprint !== sprintFilter) return false;\n if (releaseFilter !== undefined && item.release !== releaseFilter) return false;\n if (!matchesRuntimeFilters(item as Record<string, unknown>, runtimeFieldFilters)) return false;\n return true;\n });\n}\n\nfunction includeEventInWindow(event: CalendarRow, start: string | undefined, end: string | undefined): boolean {\n if (start && compareTimestampStrings(event.at, start) < 0) {\n return false;\n }\n if (end && compareTimestampStrings(event.at, end) >= 0) {\n return false;\n }\n return true;\n}\n\nfunction resolveCalendarBoundaryInput(raw: string, nowValue: string, fieldLabel: \"--date\" | \"--from\" | \"--to\"): string {\n if (raw.trim().toLowerCase() === \"today\") {\n return startOfUtcDay(nowValue);\n }\n return resolveIsoOrRelative(raw, new Date(nowValue), fieldLabel);\n}\n\nfunction buildRange(\n view: CalendarView,\n options: CalendarOptions,\n nowValue: string,\n): {\n anchor: string;\n start?: string;\n end?: string;\n periodStart?: string;\n periodEnd?: string;\n fullPeriod: boolean;\n} {\n const anchor = options.date ? resolveCalendarBoundaryInput(options.date, nowValue, \"--date\") : nowValue;\n const includePast = options.past === true;\n const fullPeriodRequested = options.fullPeriod === true;\n\n const from = options.from ? resolveCalendarBoundaryInput(options.from, nowValue, \"--from\") : undefined;\n const to = options.to ? resolveCalendarBoundaryInput(options.to, nowValue, \"--to\") : undefined;\n if (from && to && compareTimestampStrings(from, to) >= 0) {\n throw new PmCliError(\"Calendar --from must be before --to\", EXIT_CODE.USAGE);\n }\n\n if (view !== \"agenda\" && (options.from !== undefined || options.to !== undefined)) {\n throw new PmCliError(\"--from and --to are only supported for --view agenda\", EXIT_CODE.USAGE);\n }\n\n if (view === \"agenda\") {\n if (fullPeriodRequested) {\n throw new PmCliError(\n \"--full-period is only supported for --view day|week|month. For agenda windows, use --from and --to.\",\n EXIT_CODE.USAGE,\n );\n }\n const start = from ?? (options.date ? anchor : includePast ? undefined : nowValue);\n return {\n anchor,\n start,\n end: to,\n fullPeriod: false,\n };\n }\n\n if (view === \"day\") {\n const dayStart = startOfUtcDay(anchor);\n const fullPeriod = includePast || fullPeriodRequested;\n const start = fullPeriod ? dayStart : maxTimestamp(dayStart, nowValue);\n return {\n anchor,\n start,\n end: addUtcDays(dayStart, 1),\n periodStart: dayStart,\n periodEnd: addUtcDays(dayStart, 1),\n fullPeriod,\n };\n }\n\n if (view === \"week\") {\n const weekStart = startOfUtcWeekMonday(anchor);\n const fullPeriod = includePast || fullPeriodRequested;\n const start = fullPeriod ? weekStart : maxTimestamp(weekStart, nowValue);\n return {\n anchor,\n start,\n end: addUtcDays(weekStart, 7),\n periodStart: weekStart,\n periodEnd: addUtcDays(weekStart, 7),\n fullPeriod,\n };\n }\n\n const monthStart = startOfUtcMonth(anchor);\n const monthEnd = startOfNextUtcMonth(anchor);\n const fullPeriod = includePast || fullPeriodRequested;\n const start = fullPeriod ? monthStart : maxTimestamp(monthStart, nowValue);\n return {\n anchor,\n start,\n end: monthEnd,\n periodStart: monthStart,\n periodEnd: monthEnd,\n fullPeriod,\n };\n}\n\nfunction bucketEventsByDay(events: CalendarRow[]): CalendarDayBucket[] {\n const dayMap = new Map<string, CalendarRow[]>();\n for (const event of events) {\n const list = dayMap.get(event.date) ?? [];\n list.push(event);\n dayMap.set(event.date, list);\n }\n return [...dayMap.entries()]\n .sort(([left], [right]) => left.localeCompare(right))\n .map(([date, dayEvents]) => ({\n date,\n count: dayEvents.length,\n events: sortEvents(dayEvents),\n }));\n}\n\nfunction summarize(events: CalendarRow[]): CalendarResult[\"summary\"] {\n const itemIds = new Set<string>();\n const byType = new Map<string, number>();\n const byStatus = new Map<string, number>();\n let deadlines = 0;\n let reminders = 0;\n let scheduled = 0;\n let recurringEvents = 0;\n for (const event of events) {\n itemIds.add(event.item_id);\n incrementCount(byType, event.item_type);\n incrementCount(byStatus, event.item_status);\n if (event.kind === \"deadline\") {\n deadlines += 1;\n } else if (event.kind === \"reminder\") {\n reminders += 1;\n } else {\n scheduled += 1;\n if (event.event_recurring === true) {\n recurringEvents += 1;\n }\n }\n }\n return {\n events: events.length,\n items: itemIds.size,\n deadlines,\n reminders,\n scheduled,\n by_kind: {\n deadline: deadlines,\n reminder: reminders,\n event: scheduled,\n },\n by_type: toSortedCountRecord(byType),\n by_status: toSortedCountRecord(byStatus),\n recurring_events: recurringEvents,\n };\n}\n\nfunction formatWindow(range: CalendarResult[\"range\"]): string {\n const start = range.start ?? \"unbounded\";\n const end = range.end ?? \"unbounded\";\n return `${start} -> ${end}`;\n}\n\nfunction formatClock(timestamp: string): string {\n return `${new Date(timestamp).toISOString().slice(11, 16)}Z`;\n}\n\nfunction formatSummaryCountRecord(values: Record<string, number>): string {\n const entries = Object.entries(values);\n if (entries.length === 0) {\n return \"empty\";\n }\n return entries.map(([key, value]) => `${key}=${value}`).join(\", \");\n}\n\nfunction formatEventEnd(event: CalendarRow): string | null {\n if (!event.event_end) {\n return null;\n }\n if (event.event_all_day === true) {\n return event.event_end.slice(0, 10);\n }\n if (event.date === toUtcDayKey(event.event_end)) {\n return formatClock(event.event_end);\n }\n return event.event_end;\n}\n\nfunction formatEventLine(event: CalendarRow): string {\n const core = `${formatClock(event.at)} [${event.kind}] ${event.item_id} type=${event.item_type} p${event.item_priority} ${event.item_status} ${event.item_title}`;\n if (event.kind === \"reminder\") {\n const reminderText = event.reminder_text ?? \"\";\n return `${core} — ${reminderText} reminder=${JSON.stringify(reminderText)}`;\n }\n if (event.kind === \"event\") {\n const details: string[] = [];\n const title = event.event_title ?? event.item_title;\n const titleDiffers = event.event_title !== null && event.event_title !== event.item_title;\n if (titleDiffers) {\n details.push(title);\n details.push(`title=${JSON.stringify(title)}`);\n }\n if (event.event_recurring) {\n details.push(\"(recurring)\");\n details.push(\"recurring=true\");\n }\n const end = formatEventEnd(event);\n if (end) {\n details.push(`end=${end}`);\n }\n if (event.event_all_day !== null) {\n details.push(`all_day=${event.event_all_day ? \"true\" : \"false\"}`);\n }\n if (event.event_timezone) {\n details.push(`timezone=${event.event_timezone}`);\n }\n if (event.event_location) {\n details.push(`@ ${event.event_location}`);\n details.push(`location=${JSON.stringify(event.event_location)}`);\n }\n if (event.event_recurrence_rule) {\n details.push(`recurrence=${event.event_recurrence_rule}`);\n }\n if (event.reminder_text) {\n details.push(`description=${JSON.stringify(event.reminder_text)}`);\n }\n return `${core} — ${details.join(\" \")}`;\n }\n return core;\n}\n\nexport function renderCalendarMarkdown(result: CalendarResult): string {\n const lines: string[] = [];\n lines.push(`# pm calendar (${result.view})`);\n lines.push(\"\");\n lines.push(`- now: ${result.now}`);\n lines.push(`- window: ${formatWindow(result.range)}`);\n if (result.range.period_start && result.range.period_end) {\n lines.push(`- period: ${result.range.period_start} -> ${result.range.period_end}`);\n lines.push(`- period-mode: ${result.range.full_period ? \"full-period\" : \"active-window\"}`);\n }\n lines.push(\n `- events: ${result.summary.events} (deadlines: ${result.summary.deadlines}, reminders: ${result.summary.reminders}, scheduled: ${result.summary.scheduled})`,\n );\n lines.push(`- items: ${result.summary.items}`);\n lines.push(`- by-kind: ${formatSummaryCountRecord(result.summary.by_kind)}`);\n lines.push(`- by-type: ${formatSummaryCountRecord(result.summary.by_type)}`);\n lines.push(`- by-status: ${formatSummaryCountRecord(result.summary.by_status)}`);\n lines.push(`- recurring-events: ${result.summary.recurring_events}`);\n lines.push(\"\");\n\n if (result.events.length === 0) {\n lines.push(\"No calendar events matched the selected filters.\");\n return lines.join(\"\\n\");\n }\n\n for (const day of result.days) {\n lines.push(`## ${day.date} (${day.count})`);\n for (const event of day.events) {\n lines.push(`- ${formatEventLine(event)}`);\n }\n lines.push(\"\");\n }\n if (result.warnings && result.warnings.length > 0) {\n lines.push(\"### warnings\");\n for (const warning of result.warnings) {\n lines.push(`- ${warning}`);\n }\n lines.push(\"\");\n }\n return lines.join(\"\\n\").replace(/\\n+$/, \"\");\n}\n\nexport async function runCalendar(options: CalendarOptions, global: GlobalOptions): Promise<CalendarResult> {\n const pmRoot = resolvePmRoot(process.cwd(), global.path);\n if (!(await pathExists(getSettingsPath(pmRoot)))) {\n throw new PmCliError(`Tracker is not initialized at ${pmRoot}. Run pm init first.`, EXIT_CODE.NOT_FOUND);\n }\n\n const nowValue = nowIso();\n const view = parseView(options.view);\n const rangeBounds = buildRange(view, options, nowValue);\n const limit = parseIntegerLimit(options.limit);\n const includeSources = parseIncludeSources(options.include);\n const explicitLookahead = parseNonNegativeInteger(options.recurrenceLookaheadDays, \"Calendar recurrence lookahead days\");\n const recurrenceLookbackDays = parseNonNegativeInteger(options.recurrenceLookbackDays, \"Calendar recurrence lookback days\");\n const occurrenceLimit = parseNonNegativeInteger(options.occurrenceLimit, \"Calendar occurrence limit\");\n if (occurrenceLimit !== undefined && occurrenceLimit < 1) {\n throw new PmCliError(\"Calendar occurrence limit must be >= 1\", EXIT_CODE.USAGE);\n }\n\n const eventsOnly = includeSources.has(\"events\") && !includeSources.has(\"deadlines\") && !includeSources.has(\"reminders\");\n const hasExplicitBounds = options.to !== undefined || explicitLookahead !== undefined || occurrenceLimit !== undefined;\n const eventsOnlyCapApplied = eventsOnly && !hasExplicitBounds;\n const recurrenceLookaheadDays = eventsOnlyCapApplied ? DEFAULT_EVENTS_ONLY_LOOKAHEAD_DAYS : explicitLookahead;\n const recurrenceLookbackWindowDays =\n eventsOnlyCapApplied && recurrenceLookbackDays === undefined\n ? 0\n : recurrenceLookbackDays;\n\n const settings = await readSettings(pmRoot);\n const statusRegistry = resolveRuntimeStatusRegistry(settings.schema);\n const runtimeFieldRegistry = resolveRuntimeFieldRegistry(settings.schema);\n const runtimeFieldFilters = collectRuntimeFilterValues(options as Record<string, unknown>, runtimeFieldRegistry, \"calendar\");\n const typeRegistry = resolveItemTypeRegistry(settings, getActiveExtensionRegistrations());\n const listWarnings: string[] = [];\n if (eventsOnlyCapApplied) {\n listWarnings.push(\n `recurring_events_default_cap_applied:lookback=0d,lookahead=${DEFAULT_EVENTS_ONLY_LOOKAHEAD_DAYS}d -- use --recurrence-lookback-days/--recurrence-lookahead-days or --to for wider range`,\n );\n }\n const items = await listAllFrontMatter(pmRoot, settings.item_format, typeRegistry.type_to_folder, listWarnings, settings.schema);\n const filteredItems = filterItems(items, options, typeRegistry, statusRegistry, runtimeFieldFilters);\n const recurringWindow = buildRecurringEventWindow(\n rangeBounds.start,\n rangeBounds.end,\n nowValue,\n recurrenceLookbackWindowDays,\n recurrenceLookaheadDays,\n );\n const seededEvents = buildEventSeed(filteredItems, recurringWindow, includeSources, occurrenceLimit);\n const rangedEvents = seededEvents.filter((event) => includeEventInWindow(event, rangeBounds.start, rangeBounds.end));\n const limitedEvents = limit === undefined ? rangedEvents : rangedEvents.slice(0, limit);\n const days = bucketEventsByDay(limitedEvents);\n const warnings = [...new Set(listWarnings)].sort((left, right) => left.localeCompare(right));\n\n return {\n view,\n output_default: \"markdown\",\n now: nowValue,\n anchor: rangeBounds.anchor,\n range: {\n start: rangeBounds.start ?? null,\n end: rangeBounds.end ?? null,\n period_start: rangeBounds.periodStart ?? null,\n period_end: rangeBounds.periodEnd ?? null,\n full_period: rangeBounds.fullPeriod,\n past: options.past === true,\n from: options.from ?? null,\n to: options.to ?? null,\n },\n filters: {\n type: options.type ?? null,\n tag: options.tag ?? null,\n priority: options.priority ?? null,\n status: options.status ?? null,\n assignee: options.assignee ?? null,\n assignee_filter: options.assigneeFilter ?? null,\n sprint: options.sprint ?? null,\n release: options.release ?? null,\n runtime_filters: runtimeFieldFilters,\n limit: options.limit ?? null,\n include: options.include ?? null,\n full_period: options.fullPeriod === true ? \"true\" : null,\n recurrence_lookahead_days: options.recurrenceLookaheadDays ?? null,\n recurrence_lookback_days: options.recurrenceLookbackDays ?? null,\n occurrence_limit: options.occurrenceLimit ?? null,\n },\n summary: summarize(limitedEvents),\n events: limitedEvents,\n days,\n ...(warnings.length > 0 ? { warnings } : {}),\n };\n}\n"]}
|
|
@@ -6,7 +6,7 @@ import { commandOptionFlagLabel, resolveCommandOptionPolicyState, resolveItemTyp
|
|
|
6
6
|
import { resolveRuntimeFieldRegistry, resolveRuntimeStatusRegistry, } from "../../core/schema/runtime-schema.js";
|
|
7
7
|
import { getSettingsPath, resolvePmRoot } from "../../core/store/paths.js";
|
|
8
8
|
import { readSettings } from "../../core/store/settings.js";
|
|
9
|
-
import { ACTIVITY_COMMANDER_STRING_OPTION_CONTRACTS, ACTIVITY_FLAG_CONTRACTS, AGGREGATE_FLAG_CONTRACTS, APPEND_FLAG_CONTRACTS, CALENDAR_COMMANDER_STRING_OPTION_CONTRACTS, CALENDAR_FLAG_CONTRACTS, CLAIM_FLAG_CONTRACTS, CLOSE_TASK_FLAG_CONTRACTS, COMMENTS_FLAG_CONTRACTS, COMMENTS_AUDIT_FLAG_CONTRACTS, CLOSE_FLAG_CONTRACTS, COMPLETION_FLAG_CONTRACTS, CONFIG_FLAG_CONTRACTS, CONTRACTS_FLAG_CONTRACTS, CONTEXT_COMMANDER_STRING_OPTION_CONTRACTS, CONTEXT_FLAG_CONTRACTS, CREATE_COMMANDER_REPEATABLE_OPTION_CONTRACTS, CREATE_COMMANDER_STRING_OPTION_CONTRACTS, CREATE_FLAG_CONTRACTS, DELETE_FLAG_CONTRACTS, DEPS_FLAG_CONTRACTS, DEDUPE_AUDIT_FLAG_CONTRACTS, DOCS_FLAG_CONTRACTS, EXTENSION_FLAG_CONTRACTS, FILES_FLAG_CONTRACTS, GC_FLAG_CONTRACTS, GUIDE_FLAG_CONTRACTS, GLOBAL_FLAG_CONTRACTS, HEALTH_FLAG_CONTRACTS, HISTORY_FLAG_CONTRACTS, LEARNINGS_FLAG_CONTRACTS, LIST_COMMANDER_STRING_OPTION_CONTRACTS, LIST_FILTER_FLAG_CONTRACTS, NORMALIZE_FLAG_CONTRACTS, NOTES_FLAG_CONTRACTS, PM_EXTENSION_CAPABILITY_CONTRACTS, PM_EXTENSION_POLICY_MODE_CONTRACTS, PM_EXTENSION_POLICY_SURFACE_CONTRACTS, PM_EXTENSION_SANDBOX_PROFILE_CONTRACTS, PM_EXTENSION_SERVICE_NAME_CONTRACTS, PM_EXTENSION_TRUST_MODE_CONTRACTS, PM_CORE_COMMAND_NAMES, PM_TOOL_ACTIONS, PM_TOOL_PARAMETERS_SCHEMA, REINDEX_FLAG_CONTRACTS, RELEASE_FLAG_CONTRACTS, RESTORE_FLAG_CONTRACTS, SEARCH_COMMANDER_STRING_OPTION_CONTRACTS, SEARCH_FLAG_CONTRACTS, START_TASK_FLAG_CONTRACTS, PAUSE_TASK_FLAG_CONTRACTS, TEST_ALL_FLAG_CONTRACTS, TEST_FLAG_CONTRACTS, TEST_RUNS_FLAG_CONTRACTS, UPDATE_COMMANDER_REPEATABLE_OPTION_CONTRACTS, UPDATE_COMMANDER_STRING_OPTION_CONTRACTS, UPDATE_FLAG_CONTRACTS, UPDATE_MANY_FLAG_CONTRACTS, VALIDATE_FLAG_CONTRACTS,
|
|
9
|
+
import { ACTIVITY_COMMANDER_STRING_OPTION_CONTRACTS, ACTIVITY_FLAG_CONTRACTS, AGGREGATE_FLAG_CONTRACTS, APPEND_FLAG_CONTRACTS, CALENDAR_COMMANDER_STRING_OPTION_CONTRACTS, CALENDAR_FLAG_CONTRACTS, CLAIM_FLAG_CONTRACTS, CLOSE_TASK_FLAG_CONTRACTS, COMMENTS_FLAG_CONTRACTS, COMMENTS_AUDIT_FLAG_CONTRACTS, CLOSE_FLAG_CONTRACTS, COMPLETION_FLAG_CONTRACTS, CONFIG_FLAG_CONTRACTS, CONTRACTS_FLAG_CONTRACTS, CONTEXT_COMMANDER_STRING_OPTION_CONTRACTS, CONTEXT_FLAG_CONTRACTS, CREATE_COMMANDER_REPEATABLE_OPTION_CONTRACTS, CREATE_COMMANDER_STRING_OPTION_CONTRACTS, CREATE_FLAG_CONTRACTS, DELETE_FLAG_CONTRACTS, DEPS_FLAG_CONTRACTS, DEDUPE_AUDIT_FLAG_CONTRACTS, DOCS_FLAG_CONTRACTS, EXTENSION_FLAG_CONTRACTS, FILES_FLAG_CONTRACTS, GC_FLAG_CONTRACTS, GUIDE_FLAG_CONTRACTS, GLOBAL_FLAG_CONTRACTS, HEALTH_FLAG_CONTRACTS, HISTORY_FLAG_CONTRACTS, LEARNINGS_FLAG_CONTRACTS, LIST_COMMANDER_STRING_OPTION_CONTRACTS, LIST_FILTER_FLAG_CONTRACTS, NORMALIZE_FLAG_CONTRACTS, NOTES_FLAG_CONTRACTS, PM_EXTENSION_CAPABILITY_CONTRACTS, PM_EXTENSION_POLICY_MODE_CONTRACTS, PM_EXTENSION_POLICY_SURFACE_CONTRACTS, PM_EXTENSION_SANDBOX_PROFILE_CONTRACTS, PM_EXTENSION_SERVICE_NAME_CONTRACTS, PM_EXTENSION_TRUST_MODE_CONTRACTS, PM_CORE_COMMAND_NAMES, PM_TOOL_ACTIONS, PM_TOOL_PARAMETERS_SCHEMA, REINDEX_FLAG_CONTRACTS, RELEASE_FLAG_CONTRACTS, RESTORE_FLAG_CONTRACTS, SEARCH_COMMANDER_STRING_OPTION_CONTRACTS, SEARCH_FLAG_CONTRACTS, START_TASK_FLAG_CONTRACTS, PAUSE_TASK_FLAG_CONTRACTS, TEST_ALL_FLAG_CONTRACTS, TEST_FLAG_CONTRACTS, TEST_RUNS_FLAG_CONTRACTS, UPDATE_COMMANDER_REPEATABLE_OPTION_CONTRACTS, UPDATE_COMMANDER_STRING_OPTION_CONTRACTS, UPDATE_FLAG_CONTRACTS, UPDATE_MANY_FLAG_CONTRACTS, UPGRADE_FLAG_CONTRACTS, VALIDATE_FLAG_CONTRACTS, compactFlagAliasContracts, } from "../../sdk/cli-contracts.js";
|
|
10
10
|
const LIST_COMMAND_NAMES = new Set([
|
|
11
11
|
"list",
|
|
12
12
|
"list-all",
|
|
@@ -17,22 +17,54 @@ const LIST_COMMAND_NAMES = new Set([
|
|
|
17
17
|
"list-closed",
|
|
18
18
|
"list-canceled",
|
|
19
19
|
]);
|
|
20
|
-
const
|
|
21
|
-
"
|
|
22
|
-
"
|
|
23
|
-
"
|
|
24
|
-
|
|
20
|
+
const PACKAGE_OWNED_ACTIONS = new Set([
|
|
21
|
+
"calendar",
|
|
22
|
+
"dedupe-audit",
|
|
23
|
+
"guide",
|
|
24
|
+
"reindex",
|
|
25
|
+
"normalize",
|
|
26
|
+
"comments-audit",
|
|
27
|
+
"completion",
|
|
28
|
+
"test-runs-list",
|
|
29
|
+
"test-runs-status",
|
|
30
|
+
"test-runs-logs",
|
|
31
|
+
"test-runs-stop",
|
|
32
|
+
"test-runs-resume",
|
|
33
|
+
"templates-list",
|
|
34
|
+
"templates-save",
|
|
35
|
+
"templates-show",
|
|
36
|
+
]);
|
|
37
|
+
const PACKAGE_OWNED_COMMANDS = new Set([
|
|
38
|
+
"cal",
|
|
39
|
+
"calendar",
|
|
40
|
+
"comments-audit",
|
|
41
|
+
"completion",
|
|
42
|
+
"completion-tags",
|
|
43
|
+
"dedupe-audit",
|
|
44
|
+
"guide",
|
|
45
|
+
"normalize",
|
|
46
|
+
"reindex",
|
|
47
|
+
"templates",
|
|
48
|
+
"templates list",
|
|
49
|
+
"templates save",
|
|
50
|
+
"templates show",
|
|
51
|
+
"test-runs",
|
|
52
|
+
"test-runs list",
|
|
53
|
+
"test-runs status",
|
|
54
|
+
"test-runs logs",
|
|
55
|
+
"test-runs stop",
|
|
56
|
+
"test-runs resume",
|
|
57
|
+
]);
|
|
25
58
|
function resolveActionCommandPath(action) {
|
|
26
|
-
const extensionCommandPath = EXTENSION_ACTION_COMMAND_PATHS[action];
|
|
27
|
-
if (extensionCommandPath) {
|
|
28
|
-
return normalizeCommandPath(extensionCommandPath);
|
|
29
|
-
}
|
|
30
59
|
if (PM_CORE_COMMAND_NAMES.includes(action)) {
|
|
31
60
|
return normalizeCommandPath(action);
|
|
32
61
|
}
|
|
33
62
|
if (action.startsWith("extension-")) {
|
|
34
63
|
return normalizeCommandPath(`extension ${action.slice("extension-".length)}`);
|
|
35
64
|
}
|
|
65
|
+
if (action.startsWith("package-")) {
|
|
66
|
+
return normalizeCommandPath(`package ${action.slice("package-".length)}`);
|
|
67
|
+
}
|
|
36
68
|
if (action.startsWith("test-runs-")) {
|
|
37
69
|
return normalizeCommandPath(`test-runs ${action.slice("test-runs-".length)}`);
|
|
38
70
|
}
|
|
@@ -420,12 +452,14 @@ async function resolveRuntimeExtensionActionProbe(global) {
|
|
|
420
452
|
function collectActionContractDescriptors(extensionContracts) {
|
|
421
453
|
const descriptors = new Map();
|
|
422
454
|
for (const action of PM_TOOL_ACTIONS) {
|
|
423
|
-
|
|
455
|
+
if (PACKAGE_OWNED_ACTIONS.has(action)) {
|
|
456
|
+
continue;
|
|
457
|
+
}
|
|
424
458
|
const commandPath = resolveActionCommandPath(action);
|
|
425
459
|
descriptors.set(action, {
|
|
426
460
|
action,
|
|
427
|
-
provider:
|
|
428
|
-
requires_extension:
|
|
461
|
+
provider: "core",
|
|
462
|
+
requires_extension: false,
|
|
429
463
|
command_path: commandPath,
|
|
430
464
|
});
|
|
431
465
|
}
|
|
@@ -478,7 +512,7 @@ function resolveCoreCommandFlags(command) {
|
|
|
478
512
|
if (command === "config") {
|
|
479
513
|
return CONFIG_FLAG_CONTRACTS;
|
|
480
514
|
}
|
|
481
|
-
if (command === "extension") {
|
|
515
|
+
if (command === "extension" || command === "package" || command === "packages" || command === "install") {
|
|
482
516
|
return EXTENSION_FLAG_CONTRACTS;
|
|
483
517
|
}
|
|
484
518
|
if (command === "create") {
|
|
@@ -490,6 +524,9 @@ function resolveCoreCommandFlags(command) {
|
|
|
490
524
|
if (command === "update-many") {
|
|
491
525
|
return UPDATE_MANY_FLAG_CONTRACTS;
|
|
492
526
|
}
|
|
527
|
+
if (command === "upgrade") {
|
|
528
|
+
return UPGRADE_FLAG_CONTRACTS;
|
|
529
|
+
}
|
|
493
530
|
if (command === "normalize") {
|
|
494
531
|
return NORMALIZE_FLAG_CONTRACTS;
|
|
495
532
|
}
|
|
@@ -670,7 +707,7 @@ function buildRuntimeFieldFlagContracts(fieldRegistry) {
|
|
|
670
707
|
}
|
|
671
708
|
const result = new Map();
|
|
672
709
|
for (const [command, bucket] of buckets.entries()) {
|
|
673
|
-
result.set(command,
|
|
710
|
+
result.set(command, compactFlagAliasContracts(bucket.flags));
|
|
674
711
|
}
|
|
675
712
|
return result;
|
|
676
713
|
}
|
|
@@ -685,12 +722,13 @@ function mergeFlagContracts(primary, secondary) {
|
|
|
685
722
|
seen.add(key);
|
|
686
723
|
merged.push(contract);
|
|
687
724
|
}
|
|
688
|
-
return
|
|
725
|
+
return compactFlagAliasContracts(merged);
|
|
689
726
|
}
|
|
690
727
|
function buildCommandFlagSurface(commands, extensionFlagMap, runtimeFieldFlagMap) {
|
|
691
728
|
return commands
|
|
692
729
|
.map((command) => {
|
|
693
|
-
const isCoreCommand = PM_CORE_COMMAND_NAMES.includes(command)
|
|
730
|
+
const isCoreCommand = PM_CORE_COMMAND_NAMES.includes(command) &&
|
|
731
|
+
!PACKAGE_OWNED_COMMANDS.has(command);
|
|
694
732
|
const coreFlags = isCoreCommand ? resolveCoreCommandFlags(command) : [];
|
|
695
733
|
const runtimeFlags = runtimeFieldFlagMap.get(normalizeCommandForRuntimeFieldFlags(command)) ?? [];
|
|
696
734
|
const extensionFlags = extensionFlagMap.get(command);
|
|
@@ -828,7 +866,12 @@ export async function runContracts(options, global) {
|
|
|
828
866
|
if (selectedAction && !actionNames.has(selectedAction)) {
|
|
829
867
|
throw new PmCliError(`Unknown action: "${options.action}".`, EXIT_CODE.USAGE);
|
|
830
868
|
}
|
|
831
|
-
const commandCatalog = [
|
|
869
|
+
const commandCatalog = [
|
|
870
|
+
...new Set([
|
|
871
|
+
...PM_CORE_COMMAND_NAMES.filter((entry) => !PACKAGE_OWNED_COMMANDS.has(entry)),
|
|
872
|
+
...extensionContracts.map((entry) => entry.command),
|
|
873
|
+
]),
|
|
874
|
+
]
|
|
832
875
|
.map((entry) => normalizeCommandPath(entry))
|
|
833
876
|
.filter((entry) => entry.length > 0)
|
|
834
877
|
.sort((left, right) => left.localeCompare(right));
|
|
@@ -875,11 +918,12 @@ export async function runContracts(options, global) {
|
|
|
875
918
|
const allActionAvailability = scopedActionDescriptors.map((descriptor) => resolveActionAvailability(descriptor, runtimeProbe));
|
|
876
919
|
const actionAvailability = runtimeOnly && !selectedAction ? allActionAvailability.filter((entry) => entry.invocable) : allActionAvailability;
|
|
877
920
|
const actions = actionAvailability.map((entry) => entry.action);
|
|
921
|
+
const descriptorActionSet = new Set(actionDescriptors.map((descriptor) => descriptor.action));
|
|
878
922
|
let filteredSchema = selectedAction
|
|
879
923
|
? filterSchemaByAction(mergedSchema, selectedAction)
|
|
880
924
|
: selectedCommand
|
|
881
925
|
? filterSchemaByActions(mergedSchema, new Set(scopedActionDescriptors.map((descriptor) => descriptor.action)))
|
|
882
|
-
: mergedSchema;
|
|
926
|
+
: filterSchemaByActions(mergedSchema, descriptorActionSet);
|
|
883
927
|
if (runtimeOnly && !selectedAction) {
|
|
884
928
|
filteredSchema = filterSchemaByActions(filteredSchema, new Set(actions));
|
|
885
929
|
}
|