@unbrained/pm-cli 2026.9.30 → 2026.10.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (134) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/CHANGELOG.md +20 -0
  3. package/dist/cli/error-guidance.d.ts +5 -0
  4. package/dist/cli/error-guidance.js +1 -1
  5. package/dist/cli/main.js +2 -2
  6. package/dist/cli/register-list-query.d.ts +8 -5
  7. package/dist/cli/register-list-query.js +2 -2
  8. package/dist/cli/register-structured-mutation.d.ts +2 -0
  9. package/dist/cli/register-structured-mutation.js +1 -1
  10. package/dist/cli/runtime/projection-retry.d.ts +9 -0
  11. package/dist/cli/runtime/projection-retry.js +2 -0
  12. package/dist/cli/runtime/selection.d.ts +5 -1
  13. package/dist/cli/runtime/selection.js +1 -1
  14. package/dist/cli-bundle/bundle-manifest.json +157 -157
  15. package/dist/cli-bundle/chunks/{chunk-EGAIIWI3.js → chunk-7FUEQOYG.js} +2 -2
  16. package/dist/cli-bundle/chunks/chunk-7NL3A2BY.js +2 -0
  17. package/dist/cli-bundle/chunks/chunk-CZLAWXDR.js +8 -0
  18. package/dist/cli-bundle/chunks/chunk-HY6M34B4.js +2 -0
  19. package/dist/cli-bundle/chunks/{chunk-O23CQ5T4.js → chunk-MTJMOI4I.js} +14 -14
  20. package/dist/cli-bundle/chunks/chunk-R4TUD355.js +6 -0
  21. package/dist/cli-bundle/chunks/chunk-R7ULWMBG.js +238 -0
  22. package/dist/cli-bundle/chunks/chunk-SV7CZEVV.js +20 -0
  23. package/dist/cli-bundle/chunks/chunk-TRYXVQ7W.js +3 -0
  24. package/dist/cli-bundle/chunks/{chunk-BTCE36JS.js → chunk-WP6NRH72.js} +2 -2
  25. package/dist/cli-bundle/chunks/{chunk-XRN3JYNN.js → chunk-XOUBIF6Z.js} +38 -38
  26. package/dist/cli-bundle/chunks/chunk-Z2GYDSAO.js +3 -0
  27. package/dist/cli-bundle/chunks/{chunk-6YEET7XI.js → chunk-ZI7F3FVE.js} +47 -47
  28. package/dist/cli-bundle/chunks/{register-list-query-SYNBVMNG.js → register-list-query-R4PHNB7W.js} +6 -6
  29. package/dist/cli-bundle/chunks/register-mutation-PDDAUDYV.js +20 -0
  30. package/dist/cli-bundle/chunks/{register-operations-7FCJUC4Z.js → register-operations-A5HJT46K.js} +2 -2
  31. package/dist/cli-bundle/chunks/{register-setup-YTWW2KL5.js → register-setup-EZ2F25JI.js} +2 -2
  32. package/dist/cli-bundle/focused-chunks/{chunk-MOUCTR72.js → chunk-3BIYG72P.js} +2 -2
  33. package/dist/cli-bundle/focused-chunks/{chunk-T4PZJQG4.js → chunk-4FFPGNCJ.js} +2 -2
  34. package/dist/cli-bundle/focused-chunks/{chunk-AKB3JN57.js → chunk-BLCTBSGT.js} +45 -45
  35. package/dist/cli-bundle/focused-chunks/{chunk-XUCXRZZZ.js → chunk-DBD4W4QP.js} +2 -2
  36. package/dist/cli-bundle/focused-chunks/{chunk-KZULQIAG.js → chunk-E754JDLY.js} +2 -2
  37. package/dist/cli-bundle/focused-chunks/{chunk-4AORVUT4.js → chunk-EJN7DY3B.js} +2 -2
  38. package/dist/cli-bundle/focused-chunks/{chunk-OMBDUJWZ.js → chunk-FKK2HI3S.js} +2 -2
  39. package/dist/cli-bundle/focused-chunks/chunk-GBD4EN6S.js +12 -0
  40. package/dist/cli-bundle/focused-chunks/{chunk-ZJ3CLTV4.js → chunk-GMYUNHST.js} +2 -2
  41. package/dist/cli-bundle/focused-chunks/chunk-IR4UXLRP.js +20 -0
  42. package/dist/cli-bundle/focused-chunks/{chunk-RIJQQOEZ.js → chunk-UTRSM3ZK.js} +2 -2
  43. package/dist/cli-bundle/focused-chunks/{chunk-EVMH4SKN.js → chunk-VVWYI2X7.js} +2 -2
  44. package/dist/cli-bundle/focused-chunks/chunk-WCY6HRZO.js +30 -0
  45. package/dist/cli-bundle/focused-chunks/{chunk-XB5Q2P7Z.js → chunk-XRSCIYHR.js} +2 -2
  46. package/dist/cli-bundle/focused-chunks/chunk-YC32ZSLS.js +165 -0
  47. package/dist/cli-bundle/focused-chunks/{chunk-IQBFYQF2.js → chunk-ZIXFMIUL.js} +2 -2
  48. package/dist/cli-bundle/main.js +22 -22
  49. package/dist/cli-bundle/sdk-authoring.js +1 -1
  50. package/dist/cli-bundle/sdk-contracts.js +2 -2
  51. package/dist/cli-bundle/sdk-core.js +2 -2
  52. package/dist/cli-bundle/sdk-governance.js +1 -1
  53. package/dist/cli-bundle/sdk-graph.js +1 -1
  54. package/dist/cli-bundle/sdk-merge.js +48 -48
  55. package/dist/cli-bundle/sdk-query.js +1 -1
  56. package/dist/cli-bundle/sdk-runtime.js +1 -1
  57. package/dist/cli-bundle/sdk-testing.js +1 -1
  58. package/dist/cli-bundle/sdk.js +7 -7
  59. package/dist/core/fs/fs-utils.d.ts +11 -0
  60. package/dist/core/fs/fs-utils.js +2 -2
  61. package/dist/core/shared/errors.d.ts +9 -0
  62. package/dist/core/shared/errors.js +1 -1
  63. package/dist/core/store/settings.d.ts +15 -5
  64. package/dist/core/store/settings.js +3 -3
  65. package/dist/core/telemetry/runtime.js +3 -3
  66. package/dist/mcp/server.js +1 -1
  67. package/dist/sdk/agent/closed-domain-contracts.js +1 -1
  68. package/dist/sdk/generated/generated-error-code-catalog-part-1.js +1 -1
  69. package/dist/sdk/generated/generated-error-code-catalog-part-2.js +1 -1
  70. package/dist/sdk/item-transaction.d.ts +11 -0
  71. package/dist/sdk/item-transaction.js +1 -1
  72. package/dist/sdk/merge/install.d.ts +2 -2
  73. package/dist/sdk/merge/install.js +1 -1
  74. package/dist/sdk/pagination.js +1 -1
  75. package/dist/sdk/public-surface.json +1 -1
  76. package/dist/sdk/query/context.d.ts +2 -0
  77. package/dist/sdk/query/context.js +1 -1
  78. package/dist/sdk/query/get.d.ts +19 -15
  79. package/dist/sdk/query/get.js +1 -1
  80. package/dist/sdk/query/list.js +1 -1
  81. package/dist/sdk/query/search-contracts.js +1 -1
  82. package/dist/sdk/query/search-pagination.d.ts +4 -0
  83. package/dist/sdk/query/search-pagination.js +1 -1
  84. package/dist/sdk/query/search.js +1 -1
  85. package/dist/sdk/read-output/options.d.ts +14 -0
  86. package/dist/sdk/read-output/options.js +2 -0
  87. package/dist/sdk/read-output-budget.js +1 -1
  88. package/dist/sdk/read-output-contracts.js +1 -1
  89. package/dist/sdk/read-output-rows.d.ts +4 -0
  90. package/dist/sdk/read-output-rows.js +1 -1
  91. package/dist/sdk/runtime-primitives.d.ts +2 -2
  92. package/dist/sdk/runtime-primitives.js +1 -1
  93. package/dist/sdk/runtime.js +1 -1
  94. package/dist/sdk/workspace-transaction.d.ts +2 -0
  95. package/dist/sdk/workspace-transaction.js +2 -2
  96. package/docs/BOUNDED_CONTEXT_READS.md +10 -7
  97. package/docs/COMMANDS.md +1 -1
  98. package/docs/MERGE_SAFETY.md +12 -6
  99. package/docs/OUTPUT_PROJECTION_CONTRACTS.md +27 -0
  100. package/docs/SDK.md +98 -0
  101. package/docs/generated/REFUSAL_CLOSURE_CENSUS.md +6 -3
  102. package/marketplace.json +2 -2
  103. package/package.json +1 -1
  104. package/packages/pm-beads/package.json +1 -1
  105. package/packages/pm-calendar/package.json +1 -1
  106. package/packages/pm-command-kit/package.json +1 -1
  107. package/packages/pm-digital-twin/package.json +1 -1
  108. package/packages/pm-governance-audit/package.json +1 -1
  109. package/packages/pm-guide-shell/package.json +1 -1
  110. package/packages/pm-kanban/package.json +1 -1
  111. package/packages/pm-lifecycle-hooks/package.json +1 -1
  112. package/packages/pm-linked-test-adapters/package.json +1 -1
  113. package/packages/pm-search-advanced/package.json +1 -1
  114. package/packages/pm-templates/package.json +1 -1
  115. package/packages/pm-todos/package.json +1 -1
  116. package/packages/pm-vcs/package.json +1 -1
  117. package/plugins/pm-claude/.claude-plugin/plugin.json +1 -1
  118. package/plugins/pm-claude/package.json +2 -2
  119. package/plugins/pm-codex/.codex-plugin/plugin.json +1 -1
  120. package/plugins/pm-codex/package.json +2 -2
  121. package/plugins/pm-codex/plugin.json +1 -1
  122. package/dist/cli-bundle/chunks/chunk-6XTJLOKW.js +0 -3
  123. package/dist/cli-bundle/chunks/chunk-A6NDNRCK.js +0 -6
  124. package/dist/cli-bundle/chunks/chunk-BNAT4EYR.js +0 -20
  125. package/dist/cli-bundle/chunks/chunk-BX4LEJX4.js +0 -8
  126. package/dist/cli-bundle/chunks/chunk-FYTXVVZG.js +0 -2
  127. package/dist/cli-bundle/chunks/chunk-UIAH7UFK.js +0 -238
  128. package/dist/cli-bundle/chunks/chunk-USTAFHIM.js +0 -2
  129. package/dist/cli-bundle/chunks/chunk-YM342ELM.js +0 -3
  130. package/dist/cli-bundle/chunks/register-mutation-4GSUK23D.js +0 -20
  131. package/dist/cli-bundle/focused-chunks/chunk-3CAZ7Z4R.js +0 -30
  132. package/dist/cli-bundle/focused-chunks/chunk-EFD4ATS7.js +0 -12
  133. package/dist/cli-bundle/focused-chunks/chunk-IDB6E3ZV.js +0 -165
  134. package/dist/cli-bundle/focused-chunks/chunk-UPOMLSW7.js +0 -20
@@ -1,2 +1,2 @@
1
- !(function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="9957767d-cc97-58ad-a46e-3f88a18a3c8c")}catch(e2){}})();import{assertInitializedTracker}from"../environment/tracker-preflight.js";import{getActiveExtensionRegistrations,hasActiveOnReadHooks}from"../../core/extensions/index.js";import{toItemRecord}from"../../core/item/item-record.js";import{isTerminalStatus}from"../../core/item/status.js";import{collectDependencyBlockedIds}from"../actionability.js";import{isStatusAllFilterInput,parseStatusFilterCsv}from"../../core/item/status-filter.js";import{resolveItemTypeRegistry}from"../../core/item/type-registry.js";import{parseIntegerLimit}from"./parsers.js";import{parsePriorityFilterSet,parseStringFilterSet,parseTypeFilterSet}from"./multi-value-filters.js";import{collectRuntimeFilterValues,matchesRuntimeFilters}from"../../core/schema/runtime-field-filters.js";import{hasMissingMetadataFilter,itemMatchesMissingMetadata,lifecycleClassifierFromStatusRegistry}from"../../core/governance/metadata-coverage.js";import{contentFiltersNeedBody,contentFiltersNeedCollections,hasContentFieldFilter,itemMatchesContentFilters}from"../../core/governance/content-fields.js";import{resolveRuntimeFieldRegistry,resolveRuntimeStatusRegistry}from"../../core/schema/runtime-schema.js";import{EXIT_CODE}from"../../core/shared/constants.js";import{PmCliError}from"../../core/shared/errors.js";import{compareTimestampStrings,matchesTimestampFilters,nowIso,resolveIsoOrRelative}from"../../core/shared/time.js";import{listAllItemMetadata,listAllItemMetadataLight,listAllItemMetadataWithBody}from"../../core/store/item-store.js";import{HEAVY_METADATA_KEYS,readItemMetadataDerivedIndexState}from"../../core/store/item-metadata-cache.js";import{queryItemMetadataIndex}from"../../core/store/item-metadata-query-index.js";import{resolvePmRoot}from"../../core/store/paths.js";import{readSettings}from"../../core/store/settings.js";import{LIST_FILTER_FLAG_CONTRACTS}from"../cli-contracts/flag-contracts.js";import{resolveWorkspaceRelationshipKindRegistry}from"../graph/assembly.js";import{collectHierarchyRelations,indexHierarchyRelations}from"../graph/hierarchy-integrity.js";import{createQueryFingerprint,encodeQueryCursor,resolveQueryCursorStart,selectCursorSemanticOptions}from"../pagination.js";import{BRIEF_LIST_FIELDS,DEFAULT_COMPACT_LIST_FIELDS,listListProjectionFields}from"./projection-contracts.js";import{BRIEF_LIST_FIELDS as BRIEF_LIST_FIELDS2,DEFAULT_COMPACT_LIST_FIELDS as DEFAULT_COMPACT_LIST_FIELDS2,LIST_COMMAND_DEFAULT_PROJECTIONS,listListProjectionFields as listListProjectionFields2}from"./projection-contracts.js";const resolveMissingMetadataFilters=options=>{return{acMissing:options.filterAcMissing===true,estimatesMissing:options.filterEstimatesMissing===true,resolutionMissing:options.filterResolutionMissing===true,metadataMissing:options.filterMetadataMissing===true,reviewerMissing:options.filterReviewerMissing===true,riskMissing:options.filterRiskMissing===true,confidenceMissing:options.filterConfidenceMissing===true,sprintMissing:options.filterSprintMissing===true,releaseMissing:options.filterReleaseMissing===true}};const CONTENT_FIELD_FLAG_MAPPINGS=[{field:"notes",presentKey:"hasNotes",absentKey:"noNotes",presentFlag:"--has-notes",absentFlag:"--no-notes"},{field:"learnings",presentKey:"hasLearnings",absentKey:"noLearnings",presentFlag:"--has-learnings",absentFlag:"--no-learnings"},{field:"files",presentKey:"hasFiles",absentKey:"noFiles",presentFlag:"--has-files",absentFlag:"--no-files"},{field:"docs",presentKey:"hasDocs",absentKey:"noDocs",presentFlag:"--has-docs",absentFlag:"--no-docs"},{field:"tests",presentKey:"hasTests",absentKey:"noTests",presentFlag:"--has-tests",absentFlag:"--no-tests"},{field:"comments",presentKey:"hasComments",absentKey:"noComments",presentFlag:"--has-comments",absentFlag:"--no-comments"},{field:"deps",presentKey:"hasDeps",absentKey:"noDeps",presentFlag:"--has-deps",absentFlag:"--no-deps"},{field:"body",presentKey:"hasBody",absentKey:"emptyBody",presentFlag:"--has-body",absentFlag:"--empty-body"},{field:"linked_command",presentKey:"hasLinkedCommand",absentKey:"noLinkedCommand",presentFlag:"--has-linked-command",absentFlag:"--no-linked-command"}];const resolveContentFieldFilters=options=>{const conflict=CONTENT_FIELD_FLAG_MAPPINGS.find(mapping=>options[mapping.presentKey]===true&&options[mapping.absentKey]===true);if(conflict){throw new PmCliError(`Cannot combine ${conflict.presentFlag} with ${conflict.absentFlag} for the same field.`,EXIT_CODE.USAGE)}return Object.fromEntries(CONTENT_FIELD_FLAG_MAPPINGS.flatMap(mapping=>{if(options[mapping.presentKey]===true){return[[mapping.field,"present"]]}return options[mapping.absentKey]===true?[[mapping.field,"absent"]]:[]}))};const LIST_SORT_FIELDS=["priority","deadline","updated_at","created_at","title","parent"];const LIST_SORT_ORDER_VALUES=["asc","desc"];const HEAVY_PROJECTION_FIELDS=new Set(HEAVY_METADATA_KEYS);function resolveListCompleteness(warnings,indexed,strict){const unreadableItemCount=warnings.filter(warning=>warning.startsWith("item_list_item_read_failed:")).length;const unreadableDirectoryCount=warnings.filter(warning=>warning.startsWith("item_list_directory_read_failed:")).length;const completeness={status:indexed?"unchecked":unreadableItemCount+unreadableDirectoryCount>0?"partial":"complete",unreadable_item_count:unreadableItemCount,unreadable_directory_count:unreadableDirectoryCount};if(strict&&completeness.status==="partial"){throw new PmCliError(`List source is incomplete: ${unreadableItemCount} item document(s) and ${unreadableDirectoryCount} item directory/directories could not be read.`,EXIT_CODE.GENERIC_FAILURE,{code:"list_source_incomplete",why:"Strict list reads fail closed so agents and SDK consumers never treat an omitted item as a complete workspace.",nextSteps:["Run pm validate --check-storage-integrity to locate unreadable tracker artifacts.","Repair the reported files or align the installed decoder version, then retry."]})}return completeness}function isNonEmptyRecord(value){return typeof value==="object"&&value!==null&&!Array.isArray(value)&&Object.keys(value).length>0}const CONTENT_FILTER_ECHO_ENTRIES=[{key:"hasNotes",summaryKey:"has_notes"},{key:"hasLearnings",summaryKey:"has_learnings"},{key:"hasFiles",summaryKey:"has_files"},{key:"hasDocs",summaryKey:"has_docs"},{key:"hasTests",summaryKey:"has_tests"},{key:"hasComments",summaryKey:"has_comments"},{key:"hasDeps",summaryKey:"has_deps"},{key:"hasBody",summaryKey:"has_body"},{key:"hasLinkedCommand",summaryKey:"has_linked_command"},{key:"noNotes",summaryKey:"no_notes"},{key:"noLearnings",summaryKey:"no_learnings"},{key:"noFiles",summaryKey:"no_files"},{key:"noDocs",summaryKey:"no_docs"},{key:"noTests",summaryKey:"no_tests"},{key:"noComments",summaryKey:"no_comments"},{key:"noDeps",summaryKey:"no_deps"},{key:"emptyBody",summaryKey:"empty_body"},{key:"noLinkedCommand",summaryKey:"no_linked_command"}];const GOVERNANCE_MISSING_ECHO_ENTRIES=[{key:"filterReviewerMissing",summaryKey:"filter_reviewer_missing"},{key:"filterRiskMissing",summaryKey:"filter_risk_missing"},{key:"filterConfidenceMissing",summaryKey:"filter_confidence_missing"},{key:"filterSprintMissing",summaryKey:"filter_sprint_missing"},{key:"filterReleaseMissing",summaryKey:"filter_release_missing"}];function applyContentFilterEcho(filters,options){for(const entry of CONTENT_FILTER_ECHO_ENTRIES){if(options[entry.key]===true){filters[entry.summaryKey]=true}}}function applyGovernanceMissingFilterEcho(filters,options){for(const entry of GOVERNANCE_MISSING_ECHO_ENTRIES){if(options[entry.key]===true){filters[entry.summaryKey]=true}}}function applyFilterValueEcho(filters,options,entries){for(const entry of entries){const value=options[entry.optionKey];if(value!==void 0){filters[entry.summaryKey]=entry.normalize?entry.normalize(value):value}}}function buildContentFilterEcho(options){const echo={};applyContentFilterEcho(echo,options);return echo}function buildGovernanceMissingFilterEcho(options){const echo={};applyGovernanceMissingFilterEcho(echo,options);return echo}const COMPACT_LIST_VALUE_FILTER_ECHO_ENTRIES=[{optionKey:"type",summaryKey:"type"},{optionKey:"tag",summaryKey:"tag"},{optionKey:"priority",summaryKey:"priority"},{optionKey:"deadlineBefore",summaryKey:"deadline_before"},{optionKey:"deadlineAfter",summaryKey:"deadline_after"},{optionKey:"updatedAfter",summaryKey:"updated_after"},{optionKey:"updatedBefore",summaryKey:"updated_before"},{optionKey:"createdAfter",summaryKey:"created_after"},{optionKey:"createdBefore",summaryKey:"created_before"},{optionKey:"ids",summaryKey:"ids"},{optionKey:"assignee",summaryKey:"assignee"},{optionKey:"assigneeFilter",summaryKey:"assignee_filter"},{optionKey:"parent",summaryKey:"parent"},{optionKey:"sprint",summaryKey:"sprint"},{optionKey:"release",summaryKey:"release"}];const VERBOSE_LIST_VALUE_FILTER_ECHO_ENTRIES=[{optionKey:"type",summaryKey:"type"},{optionKey:"tag",summaryKey:"tag"},{optionKey:"priority",summaryKey:"priority"},{optionKey:"deadlineBefore",summaryKey:"deadline_before"},{optionKey:"deadlineAfter",summaryKey:"deadline_after"},{optionKey:"updatedAfter",summaryKey:"updated_after"},{optionKey:"updatedBefore",summaryKey:"updated_before"},{optionKey:"createdAfter",summaryKey:"created_after"},{optionKey:"createdBefore",summaryKey:"created_before"},{optionKey:"ids",summaryKey:"ids"},{optionKey:"assignee",summaryKey:"assignee"},{optionKey:"assigneeFilter",summaryKey:"assignee_filter"},{optionKey:"parent",summaryKey:"parent"},{optionKey:"sprint",summaryKey:"sprint"},{optionKey:"release",summaryKey:"release"},{optionKey:"limit",summaryKey:"limit"},{optionKey:"offset",summaryKey:"offset"},{optionKey:"includeBody",summaryKey:"include_body"},{optionKey:"compact",summaryKey:"compact"},{optionKey:"fields",summaryKey:"fields"}];const VERBOSE_LIST_BOOLEAN_FILTER_ECHO_ENTRIES=[{key:"filterAcMissing",summaryKey:"filter_ac_missing"},{key:"filterEstimatesMissing",summaryKey:"filter_estimates_missing"},{key:"filterResolutionMissing",summaryKey:"filter_resolution_missing"},{key:"filterMetadataMissing",summaryKey:"filter_metadata_missing"}];const LIST_RECENT_WINDOW="-7d";function buildCompactListFilterSummary(params){const{filtersStatus,options,treeEnabled,treeDepth,sortField,sortOrder,runtimeFieldFilters}=params;const filters={};if(filtersStatus!==null){filters.status=filtersStatus}if(options.dependencyBlocked===true){filters.blocked_semantics="status_or_dependency"}applyFilterValueEcho(filters,options,COMPACT_LIST_VALUE_FILTER_ECHO_ENTRIES);applyListWindowFilterEcho(filters,options);if(options.filterAcMissing===true){filters.filter_ac_missing=true}if(options.filterEstimatesMissing===true){filters.filter_estimates_missing=true}if(options.filterResolutionMissing===true){filters.filter_resolution_missing=true}if(options.filterMetadataMissing===true){filters.filter_metadata_missing=true}applyGovernanceMissingFilterEcho(filters,options);applyContentFilterEcho(filters,options);if(options.limit!==void 0){filters.limit=options.limit}if(options.offset!==void 0){filters.offset=options.offset}if(options.includeBody===true){filters.include_body=true}if(options.fields!==void 0){filters.fields=options.fields}if(treeEnabled){filters.tree=true;if(treeDepth!==void 0){filters.tree_depth=treeDepth}}if(sortField!==void 0){filters.sort=sortField;filters.order=sortOrder}if(isNonEmptyRecord(runtimeFieldFilters)){filters.runtime_filters=runtimeFieldFilters}return filters}function compareDefaultSort(left,right,statusRegistry){const leftTerminal=isTerminalStatus(left.status,statusRegistry);const rightTerminal=isTerminalStatus(right.status,statusRegistry);if(leftTerminal!==rightTerminal){return leftTerminal?1:-1}const byPriority=left.priority-right.priority;if(byPriority!==0){return byPriority}const byUpdated=compareTimestampStrings(right.updated_at,left.updated_at);if(byUpdated!==0){return byUpdated}return(left.id??"").localeCompare(right.id??"")}function sortItemsDefault(items,statusRegistry){return[...items].sort((left,right)=>compareDefaultSort(left,right,statusRegistry))}function parseDeadline(raw,fieldLabel){if(raw===void 0)return void 0;return resolveIsoOrRelative(raw,new Date,fieldLabel)}function parseTimestampWindow(raw,fieldLabel){if(raw==null)return void 0;const value=String(raw).trim();if(value.length===0)return void 0;return resolveIsoOrRelative(value,new Date,fieldLabel)}function resolveListUpdatedAfter(options){const hasUpdatedAfter=options.updatedAfter!=null&&String(options.updatedAfter).trim().length>0;const selectedWindows=[options.today===true,options.recent===true,hasUpdatedAfter].filter(selected=>selected).length;if(selectedWindows>1){throw new PmCliError("Choose only one updated_at window: --today, --recent, or --updated-after.",EXIT_CODE.USAGE)}if(options.today===true){const today=new Date;today.setHours(0,0,0,0);return today.toISOString()}if(options.recent===true){return parseTimestampWindow(LIST_RECENT_WINDOW,"recent")}return parseTimestampWindow(options.updatedAfter,"updated-after")}function applyListWindowFilterEcho(filters,options){if(options.today===true){filters.today=true}if(options.recent===true){filters.recent=true}}function parseIdsFilter(raw){if(raw==null)return void 0;const value=String(raw).trim();if(value.length===0){throw new PmCliError("--ids requires at least one non-empty item ID",EXIT_CODE.USAGE)}const ids=value.split(",").map(entry=>entry.trim()).filter(entry=>entry.length>0);if(ids.length===0){throw new PmCliError("--ids requires at least one non-empty item ID",EXIT_CODE.USAGE)}return new Set(ids)}function parseOffset(raw){if(raw===void 0)return void 0;const normalized=String(raw).trim();const parsed=normalized.length===0?Number.NaN:Number(normalized);if(!Number.isInteger(parsed)||parsed<0){throw new PmCliError("Offset filter must be a non-negative integer",EXIT_CODE.USAGE)}return parsed}function parseFieldSelectors(raw){if(raw===void 0){return void 0}const selectors=raw.split(",").map(entry=>entry.trim()).filter(entry=>entry.length>0);if(selectors.length===0){throw new PmCliError("List --fields requires a comma-separated list of field names",EXIT_CODE.USAGE)}return[...new Set(selectors)]}function parseProjectionConfig(options,invokedCommand=options.projectionCommand??"list"){const compactRequested=options.compact===true;const briefRequested=options.brief===true;const fullRequested=options.full===true;const fieldSelectors=parseFieldSelectors(options.fields);const enabledModes=Number(compactRequested)+Number(briefRequested)+Number(fullRequested)+Number(fieldSelectors!==void 0);if(enabledModes>1){throw new PmCliError("List projection options are mutually exclusive. Use one of --compact, --brief, --full, or --fields.",EXIT_CODE.USAGE,{code:"projection_options_mutually_exclusive",recovery:{suggested_retry:`pm ${invokedCommand} --brief`,suggested_retry_args:[invokedCommand,"--brief"]}})}if(fullRequested){return{mode:"full",fields:[]}}if(briefRequested){return{mode:"brief",fields:[...BRIEF_LIST_FIELDS]}}if(compactRequested){return{mode:"compact",fields:[...DEFAULT_COMPACT_LIST_FIELDS]}}if(fieldSelectors){return{mode:"fields",fields:[...new Set(fieldSelectors.map(field=>normalizeProjectionField(field)))]}}return{mode:"full",fields:[]}}function normalizeProjectionField(field){return field.startsWith("item.")?field.slice("item.".length):field}function validateListProjectionFields(projection,runtimeMetadataKeys,invokedCommand){if(projection.mode!=="fields"){return}const allowedValues=listListProjectionFields(runtimeMetadataKeys);const allowed=new Set(allowedValues.map(field=>normalizeProjectionField(field)));const unknown=projection.fields.filter(field=>!allowed.has(normalizeProjectionField(field)));if(unknown.length>0){throw new PmCliError(`Unknown list --fields value(s): ${unknown.join(", ")}`,EXIT_CODE.USAGE,{code:"unknown_field_projection",examples:["pm list-open --fields id,title,status,type,updated_at","pm list --fields id,title,parent,priority --limit 10","pm list-all --fields id,title,body --limit 5"],recovery:{allowed_values:allowedValues,suggested_retry:`pm ${invokedCommand} --fields id,title,status --limit 10`,suggested_retry_args:[invokedCommand,"--fields","id,title,status","--limit","10"]}})}}const LIST_SORT_FIELD_ALIASES=new Map([["updated","updated_at"],["update","updated_at"],["modified","updated_at"],["created","created_at"],["create","created_at"]]);function parseSortField(raw){if(raw===void 0){return void 0}const normalized=raw.trim().toLowerCase();const aliased=LIST_SORT_FIELD_ALIASES.get(normalized);if(aliased){return aliased}if(!LIST_SORT_FIELDS.includes(normalized)){throw new PmCliError(`Sort field must be one of ${LIST_SORT_FIELDS.join("|")} (aliases: updated->updated_at, created->created_at)`,EXIT_CODE.USAGE)}return normalized}function parseSortOrder(raw){if(raw===void 0){return void 0}const normalized=raw.trim().toLowerCase();if(!LIST_SORT_ORDER_VALUES.includes(normalized)){throw new PmCliError(`Sort order must be one of ${LIST_SORT_ORDER_VALUES.join("|")}`,EXIT_CODE.USAGE)}return normalized}function parseTreeDepth(raw){return parseIntegerLimit(raw,"--tree-depth")}function parseAssigneeFilter(raw){if(raw===void 0){return void 0}const normalized=raw.trim().toLowerCase();if(!normalized){throw new PmCliError("Assignee filter must be one of assigned|unassigned",EXIT_CODE.USAGE)}if(normalized!=="assigned"&&normalized!=="unassigned"){throw new PmCliError(`Invalid assignee filter "${raw}". Allowed: assigned|unassigned`,EXIT_CODE.USAGE)}return normalized}function resolveStatusFilter(status,statusRegistry){return parseStatusFilterCsv(status,statusRegistry,{strict:true})}function parseListTagFilters(raw){return parseStringFilterSet(raw,{label:"--tag",normalize:tag=>tag.toLowerCase()})}function appendUnknownTagWarning(items,rawTags,warnings){const requestedTags=parseListTagFilters(rawTags);if(requestedTags===void 0){return}const knownTags=new Set(items.flatMap(item=>item.tags.map(tag=>tag.trim().toLowerCase())));const unknownTags=[...requestedTags].filter(tag=>!knownTags.has(tag));if(unknownTags.length>0){warnings.push(`unknown_tags:${unknownTags.join(",")}`)}}function assertListAssigneeFilters(assigneeFilter,assigneeModeFilter){if(assigneeFilter&&[...assigneeFilter].some(value=>value.toLowerCase()==="none"||value.toLowerCase()==="null")){throw new PmCliError('--assignee no longer accepts "none" or "null". Use --assignee-filter unassigned.',EXIT_CODE.USAGE)}if(assigneeFilter!==void 0&&assigneeModeFilter==="unassigned"){throw new PmCliError("Cannot combine --assignee with --assignee-filter unassigned",EXIT_CODE.USAGE)}}function resolveListFilterSet(status,options,typeRegistry,statusRegistry){const assigneeFilter=parseStringFilterSet(options.assignee,{label:"--assignee"});const assigneeModeFilter=parseAssigneeFilter(options.assigneeFilter);assertListAssigneeFilters(assigneeFilter,assigneeModeFilter);const missingMetadataFilters=resolveMissingMetadataFilters(options);const contentFieldFilters=resolveContentFieldFilters(options);return{idsFilter:parseIdsFilter(options.ids),statusSet:status&&status.length>0?new Set(status):void 0,excludeTerminal:options.excludeTerminal===true,typeFilter:parseTypeFilterSet(options.type,typeRegistry),tagFilters:parseListTagFilters(options.tag),priorityFilter:parsePriorityFilterSet(options.priority),deadlineBefore:parseDeadline(options.deadlineBefore,"deadline-before"),deadlineAfter:parseDeadline(options.deadlineAfter,"deadline-after"),updatedAfter:resolveListUpdatedAfter(options),updatedBefore:parseTimestampWindow(options.updatedBefore,"updated-before"),createdAfter:parseTimestampWindow(options.createdAfter,"created-after"),createdBefore:parseTimestampWindow(options.createdBefore,"created-before"),assigneeFilter,assigneeModeFilter,parentFilter:options.parent?.trim(),treeEnabled:options.tree===true,sprintFilter:parseStringFilterSet(options.sprint,{label:"--sprint"}),releaseFilter:parseStringFilterSet(options.release,{label:"--release"}),missingMetadataFilters,missingMetadataActive:hasMissingMetadataFilter(missingMetadataFilters),lifecycleClassifier:lifecycleClassifierFromStatusRegistry(statusRegistry),contentFieldFilters,contentFiltersActive:hasContentFieldFilter(contentFieldFilters)}}function matchesListIdentityFilters(item,filters,statusRegistry){if(filters.idsFilter&&!filters.idsFilter.has(item.id))return false;if(filters.statusSet&&!filters.statusSet.has(item.status))return false;if(filters.excludeTerminal&&isTerminalStatus(item.status,statusRegistry))return false;if(filters.typeFilter&&!filters.typeFilter.has(item.type))return false;if(filters.tagFilters&&![...filters.tagFilters].some(tag=>(item.tags??[]).some(candidate=>candidate.trim().toLowerCase()===tag))){return false}return filters.priorityFilter===void 0||filters.priorityFilter.has(item.priority)}function matchesListDateFilters(item,filters){return matchesTimestampFilters(item,filters)}function matchesListAssigneeFilterSet(item,filters){if(filters.assigneeModeFilter==="assigned"&&!item.assignee)return false;if(filters.assigneeModeFilter==="unassigned"&&item.assignee)return false;return filters.assigneeFilter===void 0||item.assignee!==void 0&&filters.assigneeFilter.has(item.assignee)}function matchesListScopeFilters(item,filters,parentsByChild){const scalarParent=item.parent?.trim().toLowerCase();const logicalParentIds=[...new Set([...parentsByChild?.get(item.id.trim().toLowerCase())??[],...scalarParent?[scalarParent]:[]])];if(filters.parentFilter!==void 0&&!filters.treeEnabled&&!logicalParentIds.includes(filters.parentFilter.trim().toLowerCase()))return false;if(filters.sprintFilter!==void 0&&(item.sprint===void 0||!filters.sprintFilter.has(item.sprint)))return false;return filters.releaseFilter===void 0||item.release!==void 0&&filters.releaseFilter.has(item.release)}function matchesListFilterSet(item,filters,statusRegistry,runtimeFieldFilters,parentsByChild){if(!matchesListIdentityFilters(item,filters,statusRegistry)||!matchesListDateFilters(item,filters)||!matchesListAssigneeFilterSet(item,filters)||!matchesListScopeFilters(item,filters,parentsByChild)){return false}if(filters.missingMetadataActive&&!itemMatchesMissingMetadata(item,filters.missingMetadataFilters,filters.lifecycleClassifier)){return false}if(filters.contentFiltersActive&&!itemMatchesContentFilters(item,filters.contentFieldFilters)){return false}if(!matchesRuntimeFilters(item,runtimeFieldFilters)){return false}return true}function applyFilters(items,status,options,typeRegistry,statusRegistry,runtimeFieldFilters,parentsByChild){const filters=resolveListFilterSet(status,options,typeRegistry,statusRegistry);return items.filter(item=>matchesListFilterSet(item,filters,statusRegistry,runtimeFieldFilters,parentsByChild))}function trimNonEmpty(value){if(typeof value!=="string"){return void 0}const trimmed=value.trim();return trimmed.length>0?trimmed:void 0}function withTreeMetadata(item,depth,childCount,parentId){const itemRecord=toItemRecord(item);const title=typeof itemRecord.title==="string"?itemRecord.title:"";const parent=parentId??trimNonEmpty(typeof itemRecord.parent==="string"?itemRecord.parent:void 0)??null;return{...item,tree_depth:depth,tree_parent:parent,tree_children:childCount,tree_title:`${" ".repeat(depth)}${title}`}}function buildListTreeIndexes(sortedItems,hierarchyIndexes){const byId=new Map;const childrenByParent=new Map;for(const item of sortedItems){const itemId=item.id.trim().toLowerCase();byId.set(itemId,item);const parentIds=hierarchyIndexes?hierarchyIndexes.parents_by_child.get(itemId)??[]:[trimNonEmpty(item.parent)?.toLowerCase()].filter(value=>value!==void 0);for(const parentId of parentIds){const children=childrenByParent.get(parentId)??[];children.push(item);childrenByParent.set(parentId,children)}}return{byId,childrenByParent}}function resolveListTreeRoots(sortedItems,parentRoot,byId,childrenByParent,hierarchyIndexes){return parentRoot?[...childrenByParent.get(parentRoot.toLowerCase())??[]]:sortedItems.filter(item=>{const parentIds=hierarchyIndexes?hierarchyIndexes.parents_by_child.get(item.id.trim().toLowerCase())??[]:[trimNonEmpty(item.parent)?.toLowerCase()].filter(value=>value!==void 0);return parentIds.every(parentId=>!byId.has(parentId))})}function orderItemsAsTree(sortedItems,parentRoot,maxDepth,hierarchyIndexes,completeItems=sortedItems){const{byId,childrenByParent}=buildListTreeIndexes(sortedItems,hierarchyIndexes);const roots=resolveListTreeRoots(sortedItems,parentRoot,byId,childrenByParent,hierarchyIndexes);const ordered=[];const visited=new Set;const canonicalIdByLowercase=new Map(completeItems.map(item=>[item.id.trim().toLowerCase(),item.id.trim()]));const pending=[...roots].reverse().map(node=>({node,depth:0,parentId:parentRoot===void 0?void 0:canonicalIdByLowercase.get(parentRoot.trim().toLowerCase())??parentRoot.trim()}));while(pending.length>0){const{node,depth,parentId}=pending.pop();const nodeId=node.id.trim().toLowerCase();if(visited.has(nodeId))continue;visited.add(nodeId);const children=childrenByParent.get(nodeId)??[];ordered.push(withTreeMetadata(node,depth,children.length,parentId));if(maxDepth!==void 0&&depth>=maxDepth)continue;for(const child of[...children].reverse()){pending.push({node:child,depth:depth+1,parentId:canonicalIdByLowercase.get(nodeId)})}}if(parentRoot===void 0&&maxDepth===void 0){for(const item of sortedItems){const itemId=item.id.trim().toLowerCase();if(visited.has(itemId))continue;visited.add(itemId);ordered.push(withTreeMetadata(item,0,childrenByParent.get(itemId)?.length??0))}}return ordered}function compareNullableString(left,right){if(left===right){return 0}if(left===null){return 1}if(right===null){return-1}return left.localeCompare(right)}function compareNullableTimestamp(left,right){if(left===right){return 0}if(left===null){return 1}if(right===null){return-1}return compareTimestampStrings(left,right)}function compareBySortField(left,right,field){switch(field){case"priority":return left.priority-right.priority;case"deadline":return compareNullableTimestamp(left.deadline??null,right.deadline??null);case"updated_at":return compareTimestampStrings(left.updated_at,right.updated_at);case"created_at":return compareTimestampStrings(left.created_at,right.created_at);case"title":return(left.title??"").localeCompare(right.title??"");case"parent":return compareNullableString(left.parent??null,right.parent??null);default:return 0}}function sortItems(items,sortField,sortOrder,statusRegistry){if(!sortField){return sortItemsDefault(items,statusRegistry)}return[...items].sort((left,right)=>{const byField=compareBySortField(left,right,sortField);if(byField!==0){return sortOrder==="desc"?-byField:byField}const fallback=compareDefaultSort(left,right,statusRegistry);return sortOrder==="desc"?-fallback:fallback})}function readListFieldValue(item,field,treeMode=false){const normalized=normalizeProjectionField(field.trim());if(normalized.length===0){return null}const itemRecord=toItemRecord(item);if(treeMode&&normalized==="title"&&typeof itemRecord.tree_title==="string"){return itemRecord.tree_title}if(Object.prototype.hasOwnProperty.call(itemRecord,normalized)){return itemRecord[normalized]??null}return null}function projectListItems(items,projection,treeMode=false){if(projection.mode==="full"){return items}return items.map(item=>{const projected={};for(const field of projection.fields){projected[field]=readListFieldValue(item,field,treeMode)}return projected})}function runtimeMetadataKeysForProjection(definitions){const keys=[];for(const field of definitions){keys.push(field.metadata_key)}return keys}function resolveListPageLimit(options,totalRows){if(options.noTruncate===true){return void 0}return parseIntegerLimit(options.limit)??(totalRows>=1e4?20:void 0)}function resolveListPageStart(ordered,options,cursorFingerprint){if(options.after===void 0){return parseOffset(options.offset)??0}return resolveQueryCursorStart(ordered,options.after,cursorFingerprint,item=>item.id)}function buildListPageExtras(limit,hasMore,nextCursor){return{...limit!==void 0?{applied_limit:limit}:{},has_more:hasMore,truncated:hasMore,next_cursor:nextCursor??null}}async function resolveListRuntimeContext(options,global2){const pmRoot=resolvePmRoot(process.cwd(),global2.path);await assertInitializedTracker(pmRoot);const settings=await readSettings(pmRoot);const statusRegistry=resolveRuntimeStatusRegistry(settings.schema);const runtimeFieldRegistry=resolveRuntimeFieldRegistry(settings.schema);const invokedCommand=options.projectionCommand??"list";const projection=parseProjectionConfig(options,invokedCommand);validateListProjectionFields(projection,runtimeMetadataKeysForProjection(runtimeFieldRegistry.definitions),invokedCommand);return{pmRoot,settings,statusRegistry,runtimeFieldFilters:collectRuntimeFilterValues(options,runtimeFieldRegistry,"list"),typeRegistry:resolveItemTypeRegistry(settings,getActiveExtensionRegistrations()),projection}}async function loadListItems(options,runtime,listWarnings){const projectionNeedsBody=runtime.projection.fields.some(field=>normalizeProjectionField(field)==="body");const projectionNeedsCollections=runtime.projection.mode==="full"||runtime.projection.fields.some(field=>HEAVY_PROJECTION_FIELDS.has(normalizeProjectionField(field)));const contentFieldFilters=resolveContentFieldFilters(options);const contentNeedsCollections=contentFiltersNeedCollections(contentFieldFilters);const contentNeedsBody=contentFiltersNeedBody(contentFieldFilters);if(options.includeBody||projectionNeedsBody||contentNeedsBody){return await listAllItemMetadataWithBody(runtime.pmRoot,runtime.settings.item_format,runtime.typeRegistry.type_to_folder,listWarnings,runtime.settings.schema)}if(projectionNeedsCollections||contentNeedsCollections){return await listAllItemMetadata(runtime.pmRoot,runtime.settings.item_format,runtime.typeRegistry.type_to_folder,listWarnings,runtime.settings.schema)}return await listAllItemMetadataLight(runtime.pmRoot,runtime.settings.item_format,runtime.typeRegistry.type_to_folder,listWarnings,runtime.settings.schema)}function resolveListOrderingOptions(options){const sortField=parseSortField(options.sort);const sortOrder=parseSortOrder(options.order)??"asc";const treeEnabled=options.tree===true;if(!treeEnabled&&options.treeDepth!==void 0){throw new PmCliError("List --tree-depth requires --tree",EXIT_CODE.USAGE)}if(!sortField&&options.order!==void 0){throw new PmCliError("List --order requires --sort",EXIT_CODE.USAGE)}return{sortField,sortOrder,treeEnabled,treeDepth:treeEnabled?parseTreeDepth(options.treeDepth):void 0,parentRoot:treeEnabled?trimNonEmpty(options.parent):void 0}}function resolveListStatusSelection(status,options,statusRegistry){const explicitStatus=resolveStatusFilter(options.status,statusRegistry);let lifecycleStatus;if(options.lifecycleBucket==="in_progress"){lifecycleStatus=[statusRegistry.in_progress_status]}else if(options.lifecycleBucket==="open"){lifecycleStatus=[...statusRegistry.active_statuses].filter(entry=>entry!==statusRegistry.in_progress_status).sort((left,right)=>left.localeCompare(right))}const resolvedStatus=explicitStatus??lifecycleStatus??resolveStatusFilter(status,statusRegistry);const explicitAllStatuses=isStatusAllFilterInput(options.status);const effectiveOptions=explicitStatus||explicitAllStatuses?{...options,excludeTerminal:false}:options;let filtersStatus="all";if(explicitAllStatuses){filtersStatus="all"}else if(explicitStatus!==void 0){filtersStatus=explicitStatus.length===1?explicitStatus[0]:explicitStatus}else if(options.lifecycleBucket!==void 0){filtersStatus=options.lifecycleBucket}else if(resolvedStatus!==void 0){filtersStatus=resolvedStatus.length===1?resolvedStatus[0]:resolvedStatus}else if(effectiveOptions.excludeTerminal===true){filtersStatus=null}return{resolvedStatus,explicitAllStatuses,effectiveOptions,filtersStatus}}function pageAndProjectListItems(ordered,options,projection,treeEnabled,cursorFingerprint){if(options.after!==void 0&&options.offset!==void 0){throw new PmCliError("List --after cannot be combined with --offset.",EXIT_CODE.USAGE)}const limit=resolveListPageLimit(options,ordered.length);const offset=resolveListPageStart(ordered,options,cursorFingerprint);const limited=limit===void 0?ordered.slice(offset):ordered.slice(offset,offset+limit);const projected=projectListItems(limited,projection,treeEnabled);const totalMatched=ordered.length;const hasMore=limited.length>0&&offset+limited.length<totalMatched;const nextCursor=hasMore&&limited.length>0?encodeQueryCursor(cursorFingerprint,limited[limited.length-1].id,offset+limited.length-1):void 0;return{projected,totalMatched,pageExtras:buildListPageExtras(limit,hasMore,nextCursor)}}function buildListCursorFingerprint(status,options,ordering){return createQueryFingerprint("list",{status,options:selectCursorSemanticOptions(options,LIST_FILTER_FLAG_CONTRACTS),sort:ordering.sortField??"default",order:ordering.sortOrder,tree:ordering.treeEnabled,tree_depth:ordering.treeDepth??null})}async function tryLoadIndexedListPage(params){const{options,runtime,statusSelection,ordering}=params;const supportedOptionKeys=new Set(["status","limit","offset","compact","brief","full","fields","format","stream","includeBody","excludeTerminal","dependencyBlocked","lifecycleBucket","noTruncate","projectionCommand","truncate","notes","learnings","files","docs","tests","comments","deps","linkedCommand"]);const projectionNeedsHeavyData=[runtime.projection.mode==="full",runtime.projection.fields.some(field=>{const normalized=normalizeProjectionField(field);return normalized==="body"||HEAVY_PROJECTION_FIELDS.has(normalized)})].includes(true);const requiresFallback=[options.limit===void 0,options.after!==void 0,options.noTruncate===true,options.includeBody===true,options.dependencyBlocked===true,options.strictRead===true,ordering.treeEnabled,ordering.sortField!==void 0,projectionNeedsHeavyData,hasActiveOnReadHooks(),Object.keys(runtime.runtimeFieldFilters).length>0,Object.entries(options).some(([key,value])=>value!==void 0&&!supportedOptionKeys.has(key))].includes(true);if(requiresFallback){return null}const indexState=await readItemMetadataDerivedIndexState(runtime.pmRoot,[...new Set(Object.values(runtime.typeRegistry.type_to_folder))]);if(!indexState)return null;const limit=parseIntegerLimit(options.limit);const offset=parseOffset(options.offset)??0;const indexed=await queryItemMetadataIndex({pmRoot:runtime.pmRoot,expectedSourceCursor:indexState.source_cursor,query:{statuses:statusSelection.resolvedStatus,excludeStatuses:statusSelection.resolvedStatus===void 0&&statusSelection.effectiveOptions.excludeTerminal===true?[...runtime.statusRegistry.terminal_statuses]:void 0,terminalStatuses:[...runtime.statusRegistry.terminal_statuses],limit,offset}});if(!indexed)return null;const hasMore=indexed.items.length>0&&offset+indexed.items.length<indexed.total;const nextCursor=hasMore?encodeQueryCursor(buildListCursorFingerprint(statusSelection.filtersStatus,options,ordering),indexed.items.at(-1).id,offset+indexed.items.length-1):void 0;return{projected:projectListItems(indexed.items,runtime.projection,false),totalMatched:indexed.total,pageExtras:buildListPageExtras(limit,hasMore,nextCursor)}}function buildVerboseListFilters(params){const{filtersStatus,options,noTruncate,treeEnabled,treeDepth,sortField,sortOrder,runtimeFieldFilters}=params;const filters={};if(filtersStatus!==null){filters.status=filtersStatus}if(options.dependencyBlocked===true){filters.blocked_semantics="status_or_dependency"}const optionRecord=options;for(const entry of VERBOSE_LIST_VALUE_FILTER_ECHO_ENTRIES){const value=optionRecord[entry.optionKey];if(value!==void 0&&value!==null){filters[entry.summaryKey]=value}}for(const entry of VERBOSE_LIST_BOOLEAN_FILTER_ECHO_ENTRIES){if(optionRecord[entry.key]===true){filters[entry.summaryKey]=true}}Object.assign(filters,buildGovernanceMissingFilterEcho(options),buildContentFilterEcho(options));applyListWindowFilterEcho(filters,options);if(noTruncate){filters.no_truncate=true}if(options.strictRead===true){filters.strict_read=true}if(treeEnabled){filters.tree=true;if(treeDepth!==void 0){filters.tree_depth=treeDepth}}if(sortField!==void 0){filters.sort=sortField;filters.order=sortOrder}filters.runtime_filters=runtimeFieldFilters;return filters}async function runList(status,options,global2){const runtime=await resolveListRuntimeContext(options,global2);const listWarnings=[];const ordering=resolveListOrderingOptions(options);const statusSelection=resolveListStatusSelection(status,options,runtime.statusRegistry);const noTruncate=options.noTruncate===true;const indexedPage=await tryLoadIndexedListPage({options,runtime,statusSelection,ordering});let page=indexedPage;if(!page){const items=await loadListItems(options,runtime,listWarnings);const needsHierarchyIndexes=ordering.treeEnabled||trimNonEmpty(options.parent)!==void 0;const hierarchyIndexes=needsHierarchyIndexes?indexHierarchyRelations(collectHierarchyRelations(items,resolveWorkspaceRelationshipKindRegistry())):void 0;appendUnknownTagWarning(items,options.tag,listWarnings);const filtered=applyFilters(items,statusSelection.resolvedStatus,statusSelection.effectiveOptions,runtime.typeRegistry,runtime.statusRegistry,runtime.runtimeFieldFilters,hierarchyIndexes?.parents_by_child);const scoped=options.dependencyBlocked===true?(()=>{const blockedIds=collectDependencyBlockedIds(items,runtime.statusRegistry);return filtered.filter(item=>blockedIds.has(item.id.trim().toLowerCase()))})():filtered;const sorted=sortItems(scoped,ordering.sortField,ordering.sortOrder,runtime.statusRegistry);const ordered=ordering.treeEnabled?orderItemsAsTree(sorted,ordering.parentRoot,ordering.treeDepth,hierarchyIndexes,items):sorted;page=pageAndProjectListItems(ordered,options,runtime.projection,ordering.treeEnabled,buildListCursorFingerprint(statusSelection.filtersStatus,options,ordering))}const now=nowIso();const warnings=[...new Set(listWarnings)].sort((left,right)=>left.localeCompare(right));const completeness=resolveListCompleteness(warnings,indexedPage!==null,options.strictRead===true);const projectionFields=runtime.projection.mode==="full"?null:[...runtime.projection.fields];const compactSummaryMode=runtime.projection.mode==="compact"&&options.compact===true;if(compactSummaryMode){const compactFilters=buildCompactListFilterSummary({filtersStatus:statusSelection.filtersStatus,options,treeEnabled:ordering.treeEnabled,treeDepth:ordering.treeDepth,sortField:ordering.sortField,sortOrder:ordering.sortOrder,runtimeFieldFilters:runtime.runtimeFieldFilters});return{items:page.projected,count:page.projected.length,total:page.totalMatched,...page.pageExtras,completeness,filters:compactFilters,projection:{mode:"compact",fields:projectionFields},...warnings.length>0?{warnings}:{}}}return{items:page.projected,count:page.projected.length,total:page.totalMatched,...page.pageExtras,completeness,filters:buildVerboseListFilters({filtersStatus:statusSelection.filtersStatus,options,noTruncate,treeEnabled:ordering.treeEnabled,treeDepth:ordering.treeDepth,sortField:ordering.sortField,sortOrder:ordering.sortOrder,runtimeFieldFilters:runtime.runtimeFieldFilters}),projection:{mode:runtime.projection.mode,fields:projectionFields},sorting:{sort:ordering.sortField??"default",order:ordering.sortField?ordering.sortOrder:"asc"},now,...warnings.length>0?{warnings}:{}}}const _testOnly={applyFilters,buildCompactListFilterSummary,buildContentFilterEcho,buildGovernanceMissingFilterEcho,resolveContentFieldFilters,resolveMissingMetadataFilters,compareBySortField,compareDefaultSort,compareNullableString,compareNullableTimestamp,normalizeProjectionField,parseAssigneeFilter,parseFieldSelectors,parseIdsFilter,parseOffset,parseProjectionConfig,resolveListUpdatedAfter,resolveListPageLimit,parseSortField,parseSortOrder,orderItemsAsTree,projectListItems,readListFieldValue,runtimeMetadataKeysForProjection,sortItems,trimNonEmpty,withTreeMetadata};export{BRIEF_LIST_FIELDS2 as BRIEF_LIST_FIELDS,DEFAULT_COMPACT_LIST_FIELDS2 as DEFAULT_COMPACT_LIST_FIELDS,LIST_COMMAND_DEFAULT_PROJECTIONS,LIST_SORT_FIELDS,LIST_SORT_ORDER_VALUES,_testOnly,applyFilterValueEcho,buildContentFilterEcho,buildGovernanceMissingFilterEcho,listListProjectionFields2 as listListProjectionFields,resolveContentFieldFilters,resolveMissingMetadataFilters,runList};
1
+ !(function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="723dbf85-08e7-5aae-9b73-0d44c80eb9ac")}catch(e2){}})();import{renderPmCommand}from"../command-line.js";import{assertInitializedTracker}from"../environment/tracker-preflight.js";import{getActiveExtensionRegistrations,hasActiveOnReadHooks}from"../../core/extensions/index.js";import{toItemRecord}from"../../core/item/item-record.js";import{isTerminalStatus}from"../../core/item/status.js";import{collectDependencyBlockedIds}from"../actionability.js";import{isStatusAllFilterInput,parseStatusFilterCsv}from"../../core/item/status-filter.js";import{resolveItemTypeRegistry}from"../../core/item/type-registry.js";import{parseIntegerLimit}from"./parsers.js";import{parsePriorityFilterSet,parseStringFilterSet,parseTypeFilterSet}from"./multi-value-filters.js";import{collectRuntimeFilterValues,matchesRuntimeFilters}from"../../core/schema/runtime-field-filters.js";import{hasMissingMetadataFilter,itemMatchesMissingMetadata,lifecycleClassifierFromStatusRegistry}from"../../core/governance/metadata-coverage.js";import{contentFiltersNeedBody,contentFiltersNeedCollections,hasContentFieldFilter,itemMatchesContentFilters}from"../../core/governance/content-fields.js";import{resolveRuntimeFieldRegistry,resolveRuntimeStatusRegistry}from"../../core/schema/runtime-schema.js";import{EXIT_CODE}from"../../core/shared/constants.js";import{PmCliError}from"../../core/shared/errors.js";import{compareTimestampStrings,matchesTimestampFilters,nowIso,resolveIsoOrRelative}from"../../core/shared/time.js";import{listAllItemMetadata,listAllItemMetadataLight,listAllItemMetadataWithBody}from"../../core/store/item-store.js";import{HEAVY_METADATA_KEYS,readItemMetadataDerivedIndexState}from"../../core/store/item-metadata-cache.js";import{queryItemMetadataIndex}from"../../core/store/item-metadata-query-index.js";import{resolvePmRoot}from"../../core/store/paths.js";import{readSettings}from"../../core/store/settings.js";import{LIST_FILTER_FLAG_CONTRACTS}from"../cli-contracts/flag-contracts.js";import{resolveWorkspaceRelationshipKindRegistry}from"../graph/assembly.js";import{collectHierarchyRelations,indexHierarchyRelations}from"../graph/hierarchy-integrity.js";import{createQueryFingerprint,encodeQueryCursor,resolveQueryCursorStart,selectCursorSemanticOptions}from"../pagination.js";import{BRIEF_LIST_FIELDS,DEFAULT_COMPACT_LIST_FIELDS,listListProjectionFields}from"./projection-contracts.js";import{BRIEF_LIST_FIELDS as BRIEF_LIST_FIELDS2,DEFAULT_COMPACT_LIST_FIELDS as DEFAULT_COMPACT_LIST_FIELDS2,LIST_COMMAND_DEFAULT_PROJECTIONS,listListProjectionFields as listListProjectionFields2}from"./projection-contracts.js";const resolveMissingMetadataFilters=options=>{return{acMissing:options.filterAcMissing===true,estimatesMissing:options.filterEstimatesMissing===true,resolutionMissing:options.filterResolutionMissing===true,metadataMissing:options.filterMetadataMissing===true,reviewerMissing:options.filterReviewerMissing===true,riskMissing:options.filterRiskMissing===true,confidenceMissing:options.filterConfidenceMissing===true,sprintMissing:options.filterSprintMissing===true,releaseMissing:options.filterReleaseMissing===true}};const CONTENT_FIELD_FLAG_MAPPINGS=[{field:"notes",presentKey:"hasNotes",absentKey:"noNotes",presentFlag:"--has-notes",absentFlag:"--no-notes"},{field:"learnings",presentKey:"hasLearnings",absentKey:"noLearnings",presentFlag:"--has-learnings",absentFlag:"--no-learnings"},{field:"files",presentKey:"hasFiles",absentKey:"noFiles",presentFlag:"--has-files",absentFlag:"--no-files"},{field:"docs",presentKey:"hasDocs",absentKey:"noDocs",presentFlag:"--has-docs",absentFlag:"--no-docs"},{field:"tests",presentKey:"hasTests",absentKey:"noTests",presentFlag:"--has-tests",absentFlag:"--no-tests"},{field:"comments",presentKey:"hasComments",absentKey:"noComments",presentFlag:"--has-comments",absentFlag:"--no-comments"},{field:"deps",presentKey:"hasDeps",absentKey:"noDeps",presentFlag:"--has-deps",absentFlag:"--no-deps"},{field:"body",presentKey:"hasBody",absentKey:"emptyBody",presentFlag:"--has-body",absentFlag:"--empty-body"},{field:"linked_command",presentKey:"hasLinkedCommand",absentKey:"noLinkedCommand",presentFlag:"--has-linked-command",absentFlag:"--no-linked-command"}];const resolveContentFieldFilters=options=>{const conflict=CONTENT_FIELD_FLAG_MAPPINGS.find(mapping=>options[mapping.presentKey]===true&&options[mapping.absentKey]===true);if(conflict){throw new PmCliError(`Cannot combine ${conflict.presentFlag} with ${conflict.absentFlag} for the same field.`,EXIT_CODE.USAGE)}return Object.fromEntries(CONTENT_FIELD_FLAG_MAPPINGS.flatMap(mapping=>{if(options[mapping.presentKey]===true){return[[mapping.field,"present"]]}return options[mapping.absentKey]===true?[[mapping.field,"absent"]]:[]}))};const LIST_SORT_FIELDS=["priority","deadline","updated_at","created_at","title","parent"];const LIST_SORT_ORDER_VALUES=["asc","desc"];const HEAVY_PROJECTION_FIELDS=new Set(HEAVY_METADATA_KEYS);function resolveListCompleteness(warnings,indexed,strict){const unreadableItemCount=warnings.filter(warning=>warning.startsWith("item_list_item_read_failed:")).length;const unreadableDirectoryCount=warnings.filter(warning=>warning.startsWith("item_list_directory_read_failed:")).length;const completeness={status:indexed?"unchecked":unreadableItemCount+unreadableDirectoryCount>0?"partial":"complete",unreadable_item_count:unreadableItemCount,unreadable_directory_count:unreadableDirectoryCount};if(strict&&completeness.status==="partial"){throw new PmCliError(`List source is incomplete: ${unreadableItemCount} item document(s) and ${unreadableDirectoryCount} item directory/directories could not be read.`,EXIT_CODE.GENERIC_FAILURE,{code:"list_source_incomplete",why:"Strict list reads fail closed so agents and SDK consumers never treat an omitted item as a complete workspace.",nextSteps:["Run pm validate --check-storage-integrity to locate unreadable tracker artifacts.","Repair the reported files or align the installed decoder version, then retry."]})}return completeness}function isNonEmptyRecord(value){return typeof value==="object"&&value!==null&&!Array.isArray(value)&&Object.keys(value).length>0}const CONTENT_FILTER_ECHO_ENTRIES=[{key:"hasNotes",summaryKey:"has_notes"},{key:"hasLearnings",summaryKey:"has_learnings"},{key:"hasFiles",summaryKey:"has_files"},{key:"hasDocs",summaryKey:"has_docs"},{key:"hasTests",summaryKey:"has_tests"},{key:"hasComments",summaryKey:"has_comments"},{key:"hasDeps",summaryKey:"has_deps"},{key:"hasBody",summaryKey:"has_body"},{key:"hasLinkedCommand",summaryKey:"has_linked_command"},{key:"noNotes",summaryKey:"no_notes"},{key:"noLearnings",summaryKey:"no_learnings"},{key:"noFiles",summaryKey:"no_files"},{key:"noDocs",summaryKey:"no_docs"},{key:"noTests",summaryKey:"no_tests"},{key:"noComments",summaryKey:"no_comments"},{key:"noDeps",summaryKey:"no_deps"},{key:"emptyBody",summaryKey:"empty_body"},{key:"noLinkedCommand",summaryKey:"no_linked_command"}];const GOVERNANCE_MISSING_ECHO_ENTRIES=[{key:"filterReviewerMissing",summaryKey:"filter_reviewer_missing"},{key:"filterRiskMissing",summaryKey:"filter_risk_missing"},{key:"filterConfidenceMissing",summaryKey:"filter_confidence_missing"},{key:"filterSprintMissing",summaryKey:"filter_sprint_missing"},{key:"filterReleaseMissing",summaryKey:"filter_release_missing"}];function applyContentFilterEcho(filters,options){for(const entry of CONTENT_FILTER_ECHO_ENTRIES){if(options[entry.key]===true){filters[entry.summaryKey]=true}}}function applyGovernanceMissingFilterEcho(filters,options){for(const entry of GOVERNANCE_MISSING_ECHO_ENTRIES){if(options[entry.key]===true){filters[entry.summaryKey]=true}}}function applyFilterValueEcho(filters,options,entries){for(const entry of entries){const value=options[entry.optionKey];if(value!==void 0){filters[entry.summaryKey]=entry.normalize?entry.normalize(value):value}}}function buildContentFilterEcho(options){const echo={};applyContentFilterEcho(echo,options);return echo}function buildGovernanceMissingFilterEcho(options){const echo={};applyGovernanceMissingFilterEcho(echo,options);return echo}const COMPACT_LIST_VALUE_FILTER_ECHO_ENTRIES=[{optionKey:"type",summaryKey:"type"},{optionKey:"tag",summaryKey:"tag"},{optionKey:"priority",summaryKey:"priority"},{optionKey:"deadlineBefore",summaryKey:"deadline_before"},{optionKey:"deadlineAfter",summaryKey:"deadline_after"},{optionKey:"updatedAfter",summaryKey:"updated_after"},{optionKey:"updatedBefore",summaryKey:"updated_before"},{optionKey:"createdAfter",summaryKey:"created_after"},{optionKey:"createdBefore",summaryKey:"created_before"},{optionKey:"ids",summaryKey:"ids"},{optionKey:"assignee",summaryKey:"assignee"},{optionKey:"assigneeFilter",summaryKey:"assignee_filter"},{optionKey:"parent",summaryKey:"parent"},{optionKey:"sprint",summaryKey:"sprint"},{optionKey:"release",summaryKey:"release"}];const VERBOSE_LIST_VALUE_FILTER_ECHO_ENTRIES=[{optionKey:"type",summaryKey:"type"},{optionKey:"tag",summaryKey:"tag"},{optionKey:"priority",summaryKey:"priority"},{optionKey:"deadlineBefore",summaryKey:"deadline_before"},{optionKey:"deadlineAfter",summaryKey:"deadline_after"},{optionKey:"updatedAfter",summaryKey:"updated_after"},{optionKey:"updatedBefore",summaryKey:"updated_before"},{optionKey:"createdAfter",summaryKey:"created_after"},{optionKey:"createdBefore",summaryKey:"created_before"},{optionKey:"ids",summaryKey:"ids"},{optionKey:"assignee",summaryKey:"assignee"},{optionKey:"assigneeFilter",summaryKey:"assignee_filter"},{optionKey:"parent",summaryKey:"parent"},{optionKey:"sprint",summaryKey:"sprint"},{optionKey:"release",summaryKey:"release"},{optionKey:"limit",summaryKey:"limit"},{optionKey:"offset",summaryKey:"offset"},{optionKey:"includeBody",summaryKey:"include_body"},{optionKey:"compact",summaryKey:"compact"},{optionKey:"fields",summaryKey:"fields"}];const VERBOSE_LIST_BOOLEAN_FILTER_ECHO_ENTRIES=[{key:"filterAcMissing",summaryKey:"filter_ac_missing"},{key:"filterEstimatesMissing",summaryKey:"filter_estimates_missing"},{key:"filterResolutionMissing",summaryKey:"filter_resolution_missing"},{key:"filterMetadataMissing",summaryKey:"filter_metadata_missing"}];const LIST_RECENT_WINDOW="-7d";function buildCompactListFilterSummary(params){const{filtersStatus,options,treeEnabled,treeDepth,sortField,sortOrder,runtimeFieldFilters}=params;const filters={};if(filtersStatus!==null){filters.status=filtersStatus}if(options.dependencyBlocked===true){filters.blocked_semantics="status_or_dependency"}applyFilterValueEcho(filters,options,COMPACT_LIST_VALUE_FILTER_ECHO_ENTRIES);applyListWindowFilterEcho(filters,options);if(options.filterAcMissing===true){filters.filter_ac_missing=true}if(options.filterEstimatesMissing===true){filters.filter_estimates_missing=true}if(options.filterResolutionMissing===true){filters.filter_resolution_missing=true}if(options.filterMetadataMissing===true){filters.filter_metadata_missing=true}applyGovernanceMissingFilterEcho(filters,options);applyContentFilterEcho(filters,options);if(options.limit!==void 0){filters.limit=options.limit}if(options.offset!==void 0){filters.offset=options.offset}if(options.includeBody===true){filters.include_body=true}if(options.fields!==void 0){filters.fields=options.fields}if(treeEnabled){filters.tree=true;if(treeDepth!==void 0){filters.tree_depth=treeDepth}}if(sortField!==void 0){filters.sort=sortField;filters.order=sortOrder}if(isNonEmptyRecord(runtimeFieldFilters)){filters.runtime_filters=runtimeFieldFilters}return filters}function compareDefaultSort(left,right,statusRegistry){const leftTerminal=isTerminalStatus(left.status,statusRegistry);const rightTerminal=isTerminalStatus(right.status,statusRegistry);if(leftTerminal!==rightTerminal){return leftTerminal?1:-1}const byPriority=left.priority-right.priority;if(byPriority!==0){return byPriority}const byUpdated=compareTimestampStrings(right.updated_at,left.updated_at);if(byUpdated!==0){return byUpdated}return(left.id??"").localeCompare(right.id??"")}function sortItemsDefault(items,statusRegistry){return[...items].sort((left,right)=>compareDefaultSort(left,right,statusRegistry))}function parseDeadline(raw,fieldLabel){if(raw===void 0)return void 0;return resolveIsoOrRelative(raw,new Date,fieldLabel)}function parseTimestampWindow(raw,fieldLabel){if(raw==null)return void 0;const value=String(raw).trim();if(value.length===0)return void 0;return resolveIsoOrRelative(value,new Date,fieldLabel)}function resolveListUpdatedAfter(options){const hasUpdatedAfter=options.updatedAfter!=null&&String(options.updatedAfter).trim().length>0;const selectedWindows=[options.today===true,options.recent===true,hasUpdatedAfter].filter(selected=>selected).length;if(selectedWindows>1){throw new PmCliError("Choose only one updated_at window: --today, --recent, or --updated-after.",EXIT_CODE.USAGE)}if(options.today===true){const today=new Date;today.setHours(0,0,0,0);return today.toISOString()}if(options.recent===true){return parseTimestampWindow(LIST_RECENT_WINDOW,"recent")}return parseTimestampWindow(options.updatedAfter,"updated-after")}function applyListWindowFilterEcho(filters,options){if(options.today===true){filters.today=true}if(options.recent===true){filters.recent=true}}function parseIdsFilter(raw){if(raw==null)return void 0;const value=String(raw).trim();if(value.length===0){throw new PmCliError("--ids requires at least one non-empty item ID",EXIT_CODE.USAGE)}const ids=value.split(",").map(entry=>entry.trim()).filter(entry=>entry.length>0);if(ids.length===0){throw new PmCliError("--ids requires at least one non-empty item ID",EXIT_CODE.USAGE)}return new Set(ids)}function parseOffset(raw){if(raw===void 0)return void 0;const normalized=String(raw).trim();const parsed=normalized.length===0?Number.NaN:Number(normalized);if(!Number.isInteger(parsed)||parsed<0){throw new PmCliError("Offset filter must be a non-negative integer",EXIT_CODE.USAGE)}return parsed}function parseFieldSelectors(raw){if(raw===void 0){return void 0}const selectors=raw.split(",").map(entry=>entry.trim()).filter(entry=>entry.length>0);if(selectors.length===0){throw new PmCliError("List --fields requires a comma-separated list of field names",EXIT_CODE.USAGE)}return[...new Set(selectors)]}function parseProjectionConfig(options,invokedCommand=options.projectionCommand??"list"){const compactRequested=options.compact===true;const briefRequested=options.brief===true;const fullRequested=options.full===true;const fieldSelectors=parseFieldSelectors(options.fields);const enabledModes=Number(compactRequested)+Number(briefRequested)+Number(fullRequested)+Number(fieldSelectors!==void 0);if(enabledModes>1){throw new PmCliError("List projection options are mutually exclusive. Use one of --compact, --brief, --full, or --fields.",EXIT_CODE.USAGE,{code:"projection_options_mutually_exclusive",recovery:{suggested_retry:`pm ${invokedCommand} --brief`,suggested_retry_args:[invokedCommand,"--brief"]}})}if(fullRequested){return{mode:"full",fields:[]}}if(briefRequested){return{mode:"brief",fields:[...BRIEF_LIST_FIELDS]}}if(compactRequested){return{mode:"compact",fields:[...DEFAULT_COMPACT_LIST_FIELDS]}}if(fieldSelectors){return{mode:"fields",fields:[...new Set(fieldSelectors.map(field=>normalizeProjectionField(field)))]}}return{mode:"full",fields:[]}}function normalizeProjectionField(field){return field.startsWith("item.")?field.slice("item.".length):field}function validateListProjectionFields(projection,runtimeMetadataKeys,invokedCommand){if(projection.mode!=="fields"){return}const allowedValues=listListProjectionFields(runtimeMetadataKeys);const allowed=new Set(allowedValues.map(field=>normalizeProjectionField(field)));const unknown=projection.fields.filter(field=>!allowed.has(normalizeProjectionField(field)));if(unknown.length>0){const suggestedRetryArguments=[invokedCommand,"--fields",projection.fields.filter(field=>!unknown.includes(field)).join(",")||"id,title,status"];throw new PmCliError(`Unknown list --fields value(s): ${unknown.join(", ")}`,EXIT_CODE.USAGE,{code:"unknown_field_projection",examples:["pm list-open --fields id,title,status,type,updated_at","pm list --fields id,title,parent,priority --limit 10","pm list-all --fields id,title,body --limit 5"],recovery:{allowed_values:allowedValues,suggested_retry:renderPmCommand(suggestedRetryArguments),suggested_retry_args:suggestedRetryArguments}})}}const LIST_SORT_FIELD_ALIASES=new Map([["updated","updated_at"],["update","updated_at"],["modified","updated_at"],["created","created_at"],["create","created_at"]]);function parseSortField(raw){if(raw===void 0){return void 0}const normalized=raw.trim().toLowerCase();const aliased=LIST_SORT_FIELD_ALIASES.get(normalized);if(aliased){return aliased}if(!LIST_SORT_FIELDS.includes(normalized)){throw new PmCliError(`Sort field must be one of ${LIST_SORT_FIELDS.join("|")} (aliases: updated->updated_at, created->created_at)`,EXIT_CODE.USAGE)}return normalized}function parseSortOrder(raw){if(raw===void 0){return void 0}const normalized=raw.trim().toLowerCase();if(!LIST_SORT_ORDER_VALUES.includes(normalized)){throw new PmCliError(`Sort order must be one of ${LIST_SORT_ORDER_VALUES.join("|")}`,EXIT_CODE.USAGE)}return normalized}function parseTreeDepth(raw){return parseIntegerLimit(raw,"--tree-depth")}function parseAssigneeFilter(raw){if(raw===void 0){return void 0}const normalized=raw.trim().toLowerCase();if(!normalized){throw new PmCliError("Assignee filter must be one of assigned|unassigned",EXIT_CODE.USAGE)}if(normalized!=="assigned"&&normalized!=="unassigned"){throw new PmCliError(`Invalid assignee filter "${raw}". Allowed: assigned|unassigned`,EXIT_CODE.USAGE)}return normalized}function resolveStatusFilter(status,statusRegistry){return parseStatusFilterCsv(status,statusRegistry,{strict:true})}function parseListTagFilters(raw){return parseStringFilterSet(raw,{label:"--tag",normalize:tag=>tag.toLowerCase()})}function appendUnknownTagWarning(items,rawTags,warnings){const requestedTags=parseListTagFilters(rawTags);if(requestedTags===void 0){return}const knownTags=new Set(items.flatMap(item=>item.tags.map(tag=>tag.trim().toLowerCase())));const unknownTags=[...requestedTags].filter(tag=>!knownTags.has(tag));if(unknownTags.length>0){warnings.push(`unknown_tags:${unknownTags.join(",")}`)}}function assertListAssigneeFilters(assigneeFilter,assigneeModeFilter){if(assigneeFilter&&[...assigneeFilter].some(value=>value.toLowerCase()==="none"||value.toLowerCase()==="null")){throw new PmCliError('--assignee no longer accepts "none" or "null". Use --assignee-filter unassigned.',EXIT_CODE.USAGE)}if(assigneeFilter!==void 0&&assigneeModeFilter==="unassigned"){throw new PmCliError("Cannot combine --assignee with --assignee-filter unassigned",EXIT_CODE.USAGE)}}function resolveListFilterSet(status,options,typeRegistry,statusRegistry){const assigneeFilter=parseStringFilterSet(options.assignee,{label:"--assignee"});const assigneeModeFilter=parseAssigneeFilter(options.assigneeFilter);assertListAssigneeFilters(assigneeFilter,assigneeModeFilter);const missingMetadataFilters=resolveMissingMetadataFilters(options);const contentFieldFilters=resolveContentFieldFilters(options);return{idsFilter:parseIdsFilter(options.ids),statusSet:status&&status.length>0?new Set(status):void 0,excludeTerminal:options.excludeTerminal===true,typeFilter:parseTypeFilterSet(options.type,typeRegistry),tagFilters:parseListTagFilters(options.tag),priorityFilter:parsePriorityFilterSet(options.priority),deadlineBefore:parseDeadline(options.deadlineBefore,"deadline-before"),deadlineAfter:parseDeadline(options.deadlineAfter,"deadline-after"),updatedAfter:resolveListUpdatedAfter(options),updatedBefore:parseTimestampWindow(options.updatedBefore,"updated-before"),createdAfter:parseTimestampWindow(options.createdAfter,"created-after"),createdBefore:parseTimestampWindow(options.createdBefore,"created-before"),assigneeFilter,assigneeModeFilter,parentFilter:options.parent?.trim(),treeEnabled:options.tree===true,sprintFilter:parseStringFilterSet(options.sprint,{label:"--sprint"}),releaseFilter:parseStringFilterSet(options.release,{label:"--release"}),missingMetadataFilters,missingMetadataActive:hasMissingMetadataFilter(missingMetadataFilters),lifecycleClassifier:lifecycleClassifierFromStatusRegistry(statusRegistry),contentFieldFilters,contentFiltersActive:hasContentFieldFilter(contentFieldFilters)}}function matchesListIdentityFilters(item,filters,statusRegistry){if(filters.idsFilter&&!filters.idsFilter.has(item.id))return false;if(filters.statusSet&&!filters.statusSet.has(item.status))return false;if(filters.excludeTerminal&&isTerminalStatus(item.status,statusRegistry))return false;if(filters.typeFilter&&!filters.typeFilter.has(item.type))return false;if(filters.tagFilters&&![...filters.tagFilters].some(tag=>(item.tags??[]).some(candidate=>candidate.trim().toLowerCase()===tag))){return false}return filters.priorityFilter===void 0||filters.priorityFilter.has(item.priority)}function matchesListDateFilters(item,filters){return matchesTimestampFilters(item,filters)}function matchesListAssigneeFilterSet(item,filters){if(filters.assigneeModeFilter==="assigned"&&!item.assignee)return false;if(filters.assigneeModeFilter==="unassigned"&&item.assignee)return false;return filters.assigneeFilter===void 0||item.assignee!==void 0&&filters.assigneeFilter.has(item.assignee)}function matchesListScopeFilters(item,filters,parentsByChild){const scalarParent=item.parent?.trim().toLowerCase();const logicalParentIds=[...new Set([...parentsByChild?.get(item.id.trim().toLowerCase())??[],...scalarParent?[scalarParent]:[]])];if(filters.parentFilter!==void 0&&!filters.treeEnabled&&!logicalParentIds.includes(filters.parentFilter.trim().toLowerCase()))return false;if(filters.sprintFilter!==void 0&&(item.sprint===void 0||!filters.sprintFilter.has(item.sprint)))return false;return filters.releaseFilter===void 0||item.release!==void 0&&filters.releaseFilter.has(item.release)}function matchesListFilterSet(item,filters,statusRegistry,runtimeFieldFilters,parentsByChild){if(!matchesListIdentityFilters(item,filters,statusRegistry)||!matchesListDateFilters(item,filters)||!matchesListAssigneeFilterSet(item,filters)||!matchesListScopeFilters(item,filters,parentsByChild)){return false}if(filters.missingMetadataActive&&!itemMatchesMissingMetadata(item,filters.missingMetadataFilters,filters.lifecycleClassifier)){return false}if(filters.contentFiltersActive&&!itemMatchesContentFilters(item,filters.contentFieldFilters)){return false}if(!matchesRuntimeFilters(item,runtimeFieldFilters)){return false}return true}function applyFilters(items,status,options,typeRegistry,statusRegistry,runtimeFieldFilters,parentsByChild){const filters=resolveListFilterSet(status,options,typeRegistry,statusRegistry);return items.filter(item=>matchesListFilterSet(item,filters,statusRegistry,runtimeFieldFilters,parentsByChild))}function trimNonEmpty(value){if(typeof value!=="string"){return void 0}const trimmed=value.trim();return trimmed.length>0?trimmed:void 0}function withTreeMetadata(item,depth,childCount,parentId){const itemRecord=toItemRecord(item);const title=typeof itemRecord.title==="string"?itemRecord.title:"";const parent=parentId??trimNonEmpty(typeof itemRecord.parent==="string"?itemRecord.parent:void 0)??null;return{...item,tree_depth:depth,tree_parent:parent,tree_children:childCount,tree_title:`${" ".repeat(depth)}${title}`}}function buildListTreeIndexes(sortedItems,hierarchyIndexes){const byId=new Map;const childrenByParent=new Map;for(const item of sortedItems){const itemId=item.id.trim().toLowerCase();byId.set(itemId,item);const parentIds=hierarchyIndexes?hierarchyIndexes.parents_by_child.get(itemId)??[]:[trimNonEmpty(item.parent)?.toLowerCase()].filter(value=>value!==void 0);for(const parentId of parentIds){const children=childrenByParent.get(parentId)??[];children.push(item);childrenByParent.set(parentId,children)}}return{byId,childrenByParent}}function resolveListTreeRoots(sortedItems,parentRoot,byId,childrenByParent,hierarchyIndexes){return parentRoot?[...childrenByParent.get(parentRoot.toLowerCase())??[]]:sortedItems.filter(item=>{const parentIds=hierarchyIndexes?hierarchyIndexes.parents_by_child.get(item.id.trim().toLowerCase())??[]:[trimNonEmpty(item.parent)?.toLowerCase()].filter(value=>value!==void 0);return parentIds.every(parentId=>!byId.has(parentId))})}function orderItemsAsTree(sortedItems,parentRoot,maxDepth,hierarchyIndexes,completeItems=sortedItems){const{byId,childrenByParent}=buildListTreeIndexes(sortedItems,hierarchyIndexes);const roots=resolveListTreeRoots(sortedItems,parentRoot,byId,childrenByParent,hierarchyIndexes);const ordered=[];const visited=new Set;const canonicalIdByLowercase=new Map(completeItems.map(item=>[item.id.trim().toLowerCase(),item.id.trim()]));const pending=[...roots].reverse().map(node=>({node,depth:0,parentId:parentRoot===void 0?void 0:canonicalIdByLowercase.get(parentRoot.trim().toLowerCase())??parentRoot.trim()}));while(pending.length>0){const{node,depth,parentId}=pending.pop();const nodeId=node.id.trim().toLowerCase();if(visited.has(nodeId))continue;visited.add(nodeId);const children=childrenByParent.get(nodeId)??[];ordered.push(withTreeMetadata(node,depth,children.length,parentId));if(maxDepth!==void 0&&depth>=maxDepth)continue;for(const child of[...children].reverse()){pending.push({node:child,depth:depth+1,parentId:canonicalIdByLowercase.get(nodeId)})}}if(parentRoot===void 0&&maxDepth===void 0){for(const item of sortedItems){const itemId=item.id.trim().toLowerCase();if(visited.has(itemId))continue;visited.add(itemId);ordered.push(withTreeMetadata(item,0,childrenByParent.get(itemId)?.length??0))}}return ordered}function compareNullableString(left,right){if(left===right){return 0}if(left===null){return 1}if(right===null){return-1}return left.localeCompare(right)}function compareNullableTimestamp(left,right){if(left===right){return 0}if(left===null){return 1}if(right===null){return-1}return compareTimestampStrings(left,right)}function compareBySortField(left,right,field){switch(field){case"priority":return left.priority-right.priority;case"deadline":return compareNullableTimestamp(left.deadline??null,right.deadline??null);case"updated_at":return compareTimestampStrings(left.updated_at,right.updated_at);case"created_at":return compareTimestampStrings(left.created_at,right.created_at);case"title":return(left.title??"").localeCompare(right.title??"");case"parent":return compareNullableString(left.parent??null,right.parent??null);default:return 0}}function sortItems(items,sortField,sortOrder,statusRegistry){if(!sortField){return sortItemsDefault(items,statusRegistry)}return[...items].sort((left,right)=>{const byField=compareBySortField(left,right,sortField);if(byField!==0){return sortOrder==="desc"?-byField:byField}const fallback=compareDefaultSort(left,right,statusRegistry);return sortOrder==="desc"?-fallback:fallback})}function readListFieldValue(item,field,treeMode=false){const normalized=normalizeProjectionField(field.trim());if(normalized.length===0){return null}const itemRecord=toItemRecord(item);if(treeMode&&normalized==="title"&&typeof itemRecord.tree_title==="string"){return itemRecord.tree_title}if(Object.prototype.hasOwnProperty.call(itemRecord,normalized)){return itemRecord[normalized]??null}return null}function projectListItems(items,projection,treeMode=false){if(projection.mode==="full"){return items}return items.map(item=>{const projected={};for(const field of projection.fields){projected[field]=readListFieldValue(item,field,treeMode)}return projected})}function runtimeMetadataKeysForProjection(definitions){const keys=[];for(const field of definitions){keys.push(field.metadata_key)}return keys}function resolveListPageLimit(options,totalRows){if(options.noTruncate===true){return void 0}return parseIntegerLimit(options.limit)??(totalRows>=1e4?20:void 0)}function resolveListPageStart(ordered,options,cursorFingerprint){if(options.after===void 0){return parseOffset(options.offset)??0}return resolveQueryCursorStart(ordered,options.after,cursorFingerprint,item=>item.id)}function buildListPageExtras(limit,hasMore,nextCursor){return{...limit!==void 0?{applied_limit:limit}:{},has_more:hasMore,truncated:hasMore,next_cursor:nextCursor??null}}async function resolveListRuntimeContext(options,global2){const pmRoot=resolvePmRoot(process.cwd(),global2.path);await assertInitializedTracker(pmRoot);const settings=await readSettings(pmRoot);const statusRegistry=resolveRuntimeStatusRegistry(settings.schema);const runtimeFieldRegistry=resolveRuntimeFieldRegistry(settings.schema);const invokedCommand=options.projectionCommand??"list";const projection=parseProjectionConfig(options,invokedCommand);validateListProjectionFields(projection,runtimeMetadataKeysForProjection(runtimeFieldRegistry.definitions),invokedCommand);return{pmRoot,settings,statusRegistry,runtimeFieldFilters:collectRuntimeFilterValues(options,runtimeFieldRegistry,"list"),typeRegistry:resolveItemTypeRegistry(settings,getActiveExtensionRegistrations()),projection}}async function loadListItems(options,runtime,listWarnings){const projectionNeedsBody=runtime.projection.fields.some(field=>normalizeProjectionField(field)==="body");const projectionNeedsCollections=runtime.projection.mode==="full"||runtime.projection.fields.some(field=>HEAVY_PROJECTION_FIELDS.has(normalizeProjectionField(field)));const contentFieldFilters=resolveContentFieldFilters(options);const contentNeedsCollections=contentFiltersNeedCollections(contentFieldFilters);const contentNeedsBody=contentFiltersNeedBody(contentFieldFilters);if(options.includeBody||projectionNeedsBody||contentNeedsBody){return await listAllItemMetadataWithBody(runtime.pmRoot,runtime.settings.item_format,runtime.typeRegistry.type_to_folder,listWarnings,runtime.settings.schema)}if(projectionNeedsCollections||contentNeedsCollections){return await listAllItemMetadata(runtime.pmRoot,runtime.settings.item_format,runtime.typeRegistry.type_to_folder,listWarnings,runtime.settings.schema)}return await listAllItemMetadataLight(runtime.pmRoot,runtime.settings.item_format,runtime.typeRegistry.type_to_folder,listWarnings,runtime.settings.schema)}function resolveListOrderingOptions(options){const sortField=parseSortField(options.sort);const sortOrder=parseSortOrder(options.order)??"asc";const treeEnabled=options.tree===true;if(!treeEnabled&&options.treeDepth!==void 0){throw new PmCliError("List --tree-depth requires --tree",EXIT_CODE.USAGE)}if(!sortField&&options.order!==void 0){throw new PmCliError("List --order requires --sort",EXIT_CODE.USAGE)}return{sortField,sortOrder,treeEnabled,treeDepth:treeEnabled?parseTreeDepth(options.treeDepth):void 0,parentRoot:treeEnabled?trimNonEmpty(options.parent):void 0}}function resolveListStatusSelection(status,options,statusRegistry){const explicitStatus=resolveStatusFilter(options.status,statusRegistry);let lifecycleStatus;if(options.lifecycleBucket==="in_progress"){lifecycleStatus=[statusRegistry.in_progress_status]}else if(options.lifecycleBucket==="open"){lifecycleStatus=[...statusRegistry.active_statuses].filter(entry=>entry!==statusRegistry.in_progress_status).sort((left,right)=>left.localeCompare(right))}const resolvedStatus=explicitStatus??lifecycleStatus??resolveStatusFilter(status,statusRegistry);const explicitAllStatuses=isStatusAllFilterInput(options.status);const effectiveOptions=explicitStatus||explicitAllStatuses?{...options,excludeTerminal:false}:options;let filtersStatus="all";if(explicitAllStatuses){filtersStatus="all"}else if(explicitStatus!==void 0){filtersStatus=explicitStatus.length===1?explicitStatus[0]:explicitStatus}else if(options.lifecycleBucket!==void 0){filtersStatus=options.lifecycleBucket}else if(resolvedStatus!==void 0){filtersStatus=resolvedStatus.length===1?resolvedStatus[0]:resolvedStatus}else if(effectiveOptions.excludeTerminal===true){filtersStatus=null}return{resolvedStatus,explicitAllStatuses,effectiveOptions,filtersStatus}}function pageAndProjectListItems(ordered,options,projection,treeEnabled,cursorFingerprint){if(options.after!==void 0&&options.offset!==void 0){throw new PmCliError("List --after cannot be combined with --offset.",EXIT_CODE.USAGE)}const limit=resolveListPageLimit(options,ordered.length);const offset=resolveListPageStart(ordered,options,cursorFingerprint);const limited=limit===void 0?ordered.slice(offset):ordered.slice(offset,offset+limit);const projected=projectListItems(limited,projection,treeEnabled);const totalMatched=ordered.length;const hasMore=limited.length>0&&offset+limited.length<totalMatched;const nextCursor=hasMore&&limited.length>0?encodeQueryCursor(cursorFingerprint,limited[limited.length-1].id,offset+limited.length-1):void 0;return{projected,totalMatched,pageExtras:buildListPageExtras(limit,hasMore,nextCursor)}}function buildListCursorFingerprint(status,options,ordering,pmRoot){return createQueryFingerprint("list",{pmRoot,status,options:selectCursorSemanticOptions(options,LIST_FILTER_FLAG_CONTRACTS),sort:ordering.sortField??"default",order:ordering.sortOrder,tree:ordering.treeEnabled,tree_depth:ordering.treeDepth??null})}async function tryLoadIndexedListPage(params){const{options,runtime,statusSelection,ordering}=params;const supportedOptionKeys=new Set(["status","limit","offset","compact","brief","full","fields","format","stream","includeBody","excludeTerminal","dependencyBlocked","lifecycleBucket","noTruncate","projectionCommand","truncate","notes","learnings","files","docs","tests","comments","deps","linkedCommand"]);const projectionNeedsHeavyData=[runtime.projection.mode==="full",runtime.projection.fields.some(field=>{const normalized=normalizeProjectionField(field);return normalized==="body"||HEAVY_PROJECTION_FIELDS.has(normalized)})].includes(true);const requiresFallback=[options.limit===void 0,options.after!==void 0,options.noTruncate===true,options.includeBody===true,options.dependencyBlocked===true,options.strictRead===true,ordering.treeEnabled,ordering.sortField!==void 0,projectionNeedsHeavyData,hasActiveOnReadHooks(),Object.keys(runtime.runtimeFieldFilters).length>0,Object.entries(options).some(([key,value])=>value!==void 0&&!supportedOptionKeys.has(key))].includes(true);if(requiresFallback){return null}const indexState=await readItemMetadataDerivedIndexState(runtime.pmRoot,[...new Set(Object.values(runtime.typeRegistry.type_to_folder))]);if(!indexState)return null;const limit=parseIntegerLimit(options.limit);const offset=parseOffset(options.offset)??0;const indexed=await queryItemMetadataIndex({pmRoot:runtime.pmRoot,expectedSourceCursor:indexState.source_cursor,query:{statuses:statusSelection.resolvedStatus,excludeStatuses:statusSelection.resolvedStatus===void 0&&statusSelection.effectiveOptions.excludeTerminal===true?[...runtime.statusRegistry.terminal_statuses]:void 0,terminalStatuses:[...runtime.statusRegistry.terminal_statuses],limit,offset}});if(!indexed)return null;const hasMore=indexed.items.length>0&&offset+indexed.items.length<indexed.total;const nextCursor=hasMore?encodeQueryCursor(buildListCursorFingerprint(statusSelection.filtersStatus,options,ordering,runtime.pmRoot),indexed.items.at(-1).id,offset+indexed.items.length-1):void 0;return{projected:projectListItems(indexed.items,runtime.projection,false),totalMatched:indexed.total,pageExtras:buildListPageExtras(limit,hasMore,nextCursor)}}function buildVerboseListFilters(params){const{filtersStatus,options,noTruncate,treeEnabled,treeDepth,sortField,sortOrder,runtimeFieldFilters}=params;const filters={};if(filtersStatus!==null){filters.status=filtersStatus}if(options.dependencyBlocked===true){filters.blocked_semantics="status_or_dependency"}const optionRecord=options;for(const entry of VERBOSE_LIST_VALUE_FILTER_ECHO_ENTRIES){const value=optionRecord[entry.optionKey];if(value!==void 0&&value!==null){filters[entry.summaryKey]=value}}for(const entry of VERBOSE_LIST_BOOLEAN_FILTER_ECHO_ENTRIES){if(optionRecord[entry.key]===true){filters[entry.summaryKey]=true}}Object.assign(filters,buildGovernanceMissingFilterEcho(options),buildContentFilterEcho(options));applyListWindowFilterEcho(filters,options);if(noTruncate){filters.no_truncate=true}if(options.strictRead===true){filters.strict_read=true}if(treeEnabled){filters.tree=true;if(treeDepth!==void 0){filters.tree_depth=treeDepth}}if(sortField!==void 0){filters.sort=sortField;filters.order=sortOrder}filters.runtime_filters=runtimeFieldFilters;return filters}async function runList(status,options,global2){const runtime=await resolveListRuntimeContext(options,global2);const listWarnings=[];const ordering=resolveListOrderingOptions(options);const statusSelection=resolveListStatusSelection(status,options,runtime.statusRegistry);const noTruncate=options.noTruncate===true;const indexedPage=await tryLoadIndexedListPage({options,runtime,statusSelection,ordering});let page=indexedPage;if(!page){const items=await loadListItems(options,runtime,listWarnings);const needsHierarchyIndexes=ordering.treeEnabled||trimNonEmpty(options.parent)!==void 0;const hierarchyIndexes=needsHierarchyIndexes?indexHierarchyRelations(collectHierarchyRelations(items,resolveWorkspaceRelationshipKindRegistry())):void 0;appendUnknownTagWarning(items,options.tag,listWarnings);const filtered=applyFilters(items,statusSelection.resolvedStatus,statusSelection.effectiveOptions,runtime.typeRegistry,runtime.statusRegistry,runtime.runtimeFieldFilters,hierarchyIndexes?.parents_by_child);const scoped=options.dependencyBlocked===true?(()=>{const blockedIds=collectDependencyBlockedIds(items,runtime.statusRegistry);return filtered.filter(item=>blockedIds.has(item.id.trim().toLowerCase()))})():filtered;const sorted=sortItems(scoped,ordering.sortField,ordering.sortOrder,runtime.statusRegistry);const ordered=ordering.treeEnabled?orderItemsAsTree(sorted,ordering.parentRoot,ordering.treeDepth,hierarchyIndexes,items):sorted;page=pageAndProjectListItems(ordered,options,runtime.projection,ordering.treeEnabled,buildListCursorFingerprint(statusSelection.filtersStatus,options,ordering,runtime.pmRoot))}const now=nowIso();const warnings=[...new Set(listWarnings)].sort((left,right)=>left.localeCompare(right));const completeness=resolveListCompleteness(warnings,indexedPage!==null,options.strictRead===true);const projectionFields=runtime.projection.mode==="full"?null:[...runtime.projection.fields];const compactSummaryMode=runtime.projection.mode==="compact"&&options.compact===true;if(compactSummaryMode){const compactFilters=buildCompactListFilterSummary({filtersStatus:statusSelection.filtersStatus,options,treeEnabled:ordering.treeEnabled,treeDepth:ordering.treeDepth,sortField:ordering.sortField,sortOrder:ordering.sortOrder,runtimeFieldFilters:runtime.runtimeFieldFilters});return{items:page.projected,count:page.projected.length,total:page.totalMatched,...page.pageExtras,completeness,filters:compactFilters,projection:{mode:"compact",fields:projectionFields},...warnings.length>0?{warnings}:{}}}return{items:page.projected,count:page.projected.length,total:page.totalMatched,...page.pageExtras,completeness,filters:buildVerboseListFilters({filtersStatus:statusSelection.filtersStatus,options,noTruncate,treeEnabled:ordering.treeEnabled,treeDepth:ordering.treeDepth,sortField:ordering.sortField,sortOrder:ordering.sortOrder,runtimeFieldFilters:runtime.runtimeFieldFilters}),projection:{mode:runtime.projection.mode,fields:projectionFields},sorting:{sort:ordering.sortField??"default",order:ordering.sortField?ordering.sortOrder:"asc"},now,...warnings.length>0?{warnings}:{}}}const _testOnly={applyFilters,buildCompactListFilterSummary,buildContentFilterEcho,buildGovernanceMissingFilterEcho,resolveContentFieldFilters,resolveMissingMetadataFilters,compareBySortField,compareDefaultSort,compareNullableString,compareNullableTimestamp,normalizeProjectionField,parseAssigneeFilter,parseFieldSelectors,parseIdsFilter,parseOffset,parseProjectionConfig,resolveListUpdatedAfter,resolveListPageLimit,parseSortField,parseSortOrder,orderItemsAsTree,projectListItems,readListFieldValue,runtimeMetadataKeysForProjection,sortItems,trimNonEmpty,withTreeMetadata};export{BRIEF_LIST_FIELDS2 as BRIEF_LIST_FIELDS,DEFAULT_COMPACT_LIST_FIELDS2 as DEFAULT_COMPACT_LIST_FIELDS,LIST_COMMAND_DEFAULT_PROJECTIONS,LIST_SORT_FIELDS,LIST_SORT_ORDER_VALUES,_testOnly,applyFilterValueEcho,buildContentFilterEcho,buildGovernanceMissingFilterEcho,listListProjectionFields2 as listListProjectionFields,resolveContentFieldFilters,resolveMissingMetadataFilters,runList};
2
2
  //# sourceMappingURL=list.js.map
@@ -1,2 +1,2 @@
1
- !(function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="6a84083a-153e-590f-bb9b-cde96ed09a74")}catch(e2){}})();import{coerceNumberInRange}from"../../core/shared/primitives.js";import{resolveIsoOrRelative}from"../../core/shared/time.js";import{renderPmCommand}from"../command-line.js";import{EXIT_CODE,PmCliError}from"../runtime-primitives.js";import{DEFAULT_COMPACT_SEARCH_FIELDS,listSearchProjectionFields}from"./projection-contracts.js";function parseSearchMode(raw){if(raw===void 0)return"keyword";const normalized=raw.trim().toLowerCase();if(normalized!=="keyword"&&normalized!=="semantic"&&normalized!=="hybrid"){throw new PmCliError("Search mode must be one of keyword|semantic|hybrid",EXIT_CODE.USAGE)}return normalized}function parseSearchBoolean(raw){return raw===true}function parseSemanticWeightOverride(raw){return coerceNumberInRange(raw,0,1)??void 0}function parseSearchMatchMode(raw){if(raw===void 0)return"or";const normalized=raw.trim().toLowerCase();if(normalized!=="and"&&normalized!=="or"&&normalized!=="exact"){throw new PmCliError("Search --match-mode must be one of and|or|exact",EXIT_CODE.USAGE)}return normalized}function parseMinScoreOverride(raw){if(raw===void 0||raw===null||raw==="")return void 0;const parsed=typeof raw==="number"?raw:Number(String(raw).trim());if(!Number.isFinite(parsed)||parsed<0){throw new PmCliError("Search --min-score must be a finite number >= 0",EXIT_CODE.USAGE)}return parsed}function parseTimestampWindow(raw,fieldLabel){if(raw==null)return void 0;const value=String(raw).trim();if(value.length===0)return void 0;return resolveIsoOrRelative(value,new Date,fieldLabel)}function normalizeSearchPhrase(value){return value.toLowerCase().replace(/\s+/g," ").trim()}function parseSearchDeadline(raw,fieldLabel){if(raw===void 0)return void 0;return resolveIsoOrRelative(raw,new Date,fieldLabel)}function parseFieldSelectors(raw){if(raw===void 0)return void 0;const selectors=raw.split(",").map(entry=>entry.trim()).filter(entry=>entry.length>0);if(selectors.length===0){throw new PmCliError("Search --fields requires a comma-separated list of field names",EXIT_CODE.USAGE)}return[...new Set(selectors)]}function parseSearchProjection(options,query="<query>"){const compactRequested=options.compact===true;const fullRequested=options.full===true;const fieldSelectors=parseFieldSelectors(options.fields);const enabledModes=Number(compactRequested)+Number(fullRequested)+Number(fieldSelectors!==void 0);if(enabledModes>1){throw new PmCliError("Search projection options are mutually exclusive. Use one of --compact, --full, or --fields.",EXIT_CODE.USAGE,{code:"projection_options_mutually_exclusive",recovery:{suggested_retry:renderPmCommand(["search",query,"--full"]),suggested_retry_args:["search",query,"--full"]}})}if(compactRequested){return{mode:"compact",fields:[...DEFAULT_COMPACT_SEARCH_FIELDS]}}if(fullRequested)return{mode:"full",fields:[]};if(fieldSelectors)return{mode:"fields",fields:fieldSelectors};return{mode:"full",fields:[]}}function validateSearchProjectionFields(projection,runtimeFieldRegistry,query="<query>"){if(projection.mode!=="fields")return;const allowedValues=listSearchProjectionFields(runtimeFieldRegistry.definitions.flatMap(field=>[field.key,field.metadata_key]));const allowed=new Set(allowedValues);const unknown=projection.fields.filter(field=>{const normalized=field.trim();return!allowed.has(normalized)});if(unknown.length>0){const suggestedRetryArguments=["search",query,"--fields","id,title,status,score"];throw new PmCliError(`Unknown search --fields value(s): ${unknown.join(", ")}`,EXIT_CODE.USAGE,{code:"unknown_field_projection",examples:["pm search <query> --fields id,title,status,score","pm search <query> --fields id,title,item.description,matched_fields"],nextSteps:["Use item.<field> for explicit item metadata fields, or run pm search --help for projection examples."],recovery:{allowed_values:allowedValues,suggested_retry:renderPmCommand(suggestedRetryArguments),suggested_retry_args:suggestedRetryArguments}})}}function parseSearchTokens(query){const normalized=normalizeSearchPhrase(query);if(!normalized){throw new PmCliError("Search query must not be empty",EXIT_CODE.USAGE)}return normalized.split(/\s+/u).filter(Boolean)}function resolveSearchMaxResults(settings){const candidate=settings.search?.max_results;if(typeof candidate==="number"&&Number.isFinite(candidate)&&candidate>0){return Math.floor(candidate)}return 50}const SEARCH_DEFAULT_MODE_VALUES=["auto","keyword","semantic","hybrid"];function resolveSearchDefaultModeSetting(settings){const candidate=settings.search?.default_mode;if(typeof candidate!=="string"){return"auto"}const normalized=candidate.trim().toLowerCase();return SEARCH_DEFAULT_MODE_VALUES.includes(normalized)?normalized:"auto"}function resolveEffectiveSearchMode(params){if(typeof params.requested==="string"&&params.requested.trim().length>0){return{mode:parseSearchMode(params.requested),source:"explicit"}}const declared=resolveSearchDefaultModeSetting(params.settings);if(declared!=="auto"){return{mode:declared,source:"settings"}}return{mode:params.semanticRunnable?"hybrid":"keyword",source:"auto"}}function resolveSearchScoreThreshold(settings){const candidate=settings.search?.score_threshold;return typeof candidate==="number"&&Number.isFinite(candidate)?candidate:0}function resolveHybridSemanticWeight(settings){const candidate=settings.search?.hybrid_semantic_weight;if(typeof candidate==="number"&&Number.isFinite(candidate)&&candidate>=0&&candidate<=1){return candidate}return .7}function resolveSearchTuning(settings){const defaults={title_exact_bonus:10,title_weight:48,description_weight:5,tags_weight:6,status_weight:2,body_weight:1,comments_weight:1,notes_weight:1,learnings_weight:1,reminders_weight:2,events_weight:2,dependencies_weight:3,linked_content_weight:1};const tuning=settings.search?.tuning;if(!tuning)return defaults;const resolveWeight=(candidate,fallback)=>typeof candidate==="number"&&Number.isFinite(candidate)&&candidate>=0?candidate:fallback;return{title_exact_bonus:resolveWeight(tuning.title_exact_bonus,defaults.title_exact_bonus),title_weight:resolveWeight(tuning.title_weight,defaults.title_weight),description_weight:resolveWeight(tuning.description_weight,defaults.description_weight),tags_weight:resolveWeight(tuning.tags_weight,defaults.tags_weight),status_weight:resolveWeight(tuning.status_weight,defaults.status_weight),body_weight:resolveWeight(tuning.body_weight,defaults.body_weight),comments_weight:resolveWeight(tuning.comments_weight,defaults.comments_weight),notes_weight:resolveWeight(tuning.notes_weight,defaults.notes_weight),learnings_weight:resolveWeight(tuning.learnings_weight,defaults.learnings_weight),reminders_weight:resolveWeight(tuning.reminders_weight,defaults.reminders_weight),events_weight:resolveWeight(tuning.events_weight,defaults.events_weight),dependencies_weight:resolveWeight(tuning.dependencies_weight,defaults.dependencies_weight),linked_content_weight:resolveWeight(tuning.linked_content_weight,defaults.linked_content_weight)}}export{SEARCH_DEFAULT_MODE_VALUES,normalizeSearchPhrase,parseMinScoreOverride,parseSearchBoolean,parseSearchDeadline,parseSearchMatchMode,parseSearchMode,parseSearchProjection,parseSearchTokens,parseSemanticWeightOverride,parseTimestampWindow,resolveEffectiveSearchMode,resolveHybridSemanticWeight,resolveSearchDefaultModeSetting,resolveSearchMaxResults,resolveSearchScoreThreshold,resolveSearchTuning,validateSearchProjectionFields};
1
+ !(function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="8920d604-004f-5546-a855-a192e7a86e0a")}catch(e2){}})();import{coerceNumberInRange}from"../../core/shared/primitives.js";import{resolveIsoOrRelative}from"../../core/shared/time.js";import{renderPmCommand}from"../command-line.js";import{EXIT_CODE,PmCliError}from"../runtime-primitives.js";import{DEFAULT_COMPACT_SEARCH_FIELDS,listSearchProjectionFields}from"./projection-contracts.js";function parseSearchMode(raw){if(raw===void 0)return"keyword";const normalized=raw.trim().toLowerCase();if(normalized!=="keyword"&&normalized!=="semantic"&&normalized!=="hybrid"){throw new PmCliError("Search mode must be one of keyword|semantic|hybrid",EXIT_CODE.USAGE)}return normalized}function parseSearchBoolean(raw){return raw===true}function parseSemanticWeightOverride(raw){return coerceNumberInRange(raw,0,1)??void 0}function parseSearchMatchMode(raw){if(raw===void 0)return"or";const normalized=raw.trim().toLowerCase();if(normalized!=="and"&&normalized!=="or"&&normalized!=="exact"){throw new PmCliError("Search --match-mode must be one of and|or|exact",EXIT_CODE.USAGE)}return normalized}function parseMinScoreOverride(raw){if(raw===void 0||raw===null||raw==="")return void 0;const parsed=typeof raw==="number"?raw:Number(String(raw).trim());if(!Number.isFinite(parsed)||parsed<0){throw new PmCliError("Search --min-score must be a finite number >= 0",EXIT_CODE.USAGE)}return parsed}function parseTimestampWindow(raw,fieldLabel){if(raw==null)return void 0;const value=String(raw).trim();if(value.length===0)return void 0;return resolveIsoOrRelative(value,new Date,fieldLabel)}function normalizeSearchPhrase(value){return value.toLowerCase().replace(/\s+/g," ").trim()}function parseSearchDeadline(raw,fieldLabel){if(raw===void 0)return void 0;return resolveIsoOrRelative(raw,new Date,fieldLabel)}function parseFieldSelectors(raw){if(raw===void 0)return void 0;const selectors=raw.split(",").map(entry=>entry.trim()).filter(entry=>entry.length>0);if(selectors.length===0){throw new PmCliError("Search --fields requires a comma-separated list of field names",EXIT_CODE.USAGE)}return[...new Set(selectors)]}function parseSearchProjection(options,query="<query>"){const compactRequested=options.compact===true;const fullRequested=options.full===true;const fieldSelectors=parseFieldSelectors(options.fields);const enabledModes=Number(compactRequested)+Number(fullRequested)+Number(fieldSelectors!==void 0);if(enabledModes>1){throw new PmCliError("Search projection options are mutually exclusive. Use one of --compact, --full, or --fields.",EXIT_CODE.USAGE,{code:"projection_options_mutually_exclusive",recovery:{suggested_retry:renderPmCommand(["search",query,"--full"]),suggested_retry_args:["search",query,"--full"]}})}if(compactRequested){return{mode:"compact",fields:[...DEFAULT_COMPACT_SEARCH_FIELDS]}}if(fullRequested)return{mode:"full",fields:[]};if(fieldSelectors)return{mode:"fields",fields:fieldSelectors};return{mode:"full",fields:[]}}function validateSearchProjectionFields(projection,runtimeFieldRegistry,query="<query>"){if(projection.mode!=="fields")return;const allowedValues=listSearchProjectionFields(runtimeFieldRegistry.definitions.flatMap(field=>[field.key,field.metadata_key]));const allowed=new Set(allowedValues);const unknown=projection.fields.filter(field=>{const normalized=field.trim();return!allowed.has(normalized)});if(unknown.length>0){const suggestedRetryArguments=["search",query,"--fields",projection.fields.filter(field=>!unknown.includes(field)).join(",")||"id,title,status,score"];throw new PmCliError(`Unknown search --fields value(s): ${unknown.join(", ")}`,EXIT_CODE.USAGE,{code:"unknown_field_projection",examples:["pm search <query> --fields id,title,status,score","pm search <query> --fields id,title,item.description,matched_fields"],nextSteps:["Use item.<field> for explicit item metadata fields, or run pm search --help for projection examples."],recovery:{allowed_values:allowedValues,suggested_retry:renderPmCommand(suggestedRetryArguments),suggested_retry_args:suggestedRetryArguments}})}}function parseSearchTokens(query){const normalized=normalizeSearchPhrase(query);if(!normalized){throw new PmCliError("Search query must not be empty",EXIT_CODE.USAGE)}return normalized.split(/\s+/u).filter(Boolean)}function resolveSearchMaxResults(settings){const candidate=settings.search?.max_results;if(typeof candidate==="number"&&Number.isFinite(candidate)&&candidate>0){return Math.floor(candidate)}return 50}const SEARCH_DEFAULT_MODE_VALUES=["auto","keyword","semantic","hybrid"];function resolveSearchDefaultModeSetting(settings){const candidate=settings.search?.default_mode;if(typeof candidate!=="string"){return"auto"}const normalized=candidate.trim().toLowerCase();return SEARCH_DEFAULT_MODE_VALUES.includes(normalized)?normalized:"auto"}function resolveEffectiveSearchMode(params){if(typeof params.requested==="string"&&params.requested.trim().length>0){return{mode:parseSearchMode(params.requested),source:"explicit"}}const declared=resolveSearchDefaultModeSetting(params.settings);if(declared!=="auto"){return{mode:declared,source:"settings"}}return{mode:params.semanticRunnable?"hybrid":"keyword",source:"auto"}}function resolveSearchScoreThreshold(settings){const candidate=settings.search?.score_threshold;return typeof candidate==="number"&&Number.isFinite(candidate)?candidate:0}function resolveHybridSemanticWeight(settings){const candidate=settings.search?.hybrid_semantic_weight;if(typeof candidate==="number"&&Number.isFinite(candidate)&&candidate>=0&&candidate<=1){return candidate}return .7}function resolveSearchTuning(settings){const defaults={title_exact_bonus:10,title_weight:48,description_weight:5,tags_weight:6,status_weight:2,body_weight:1,comments_weight:1,notes_weight:1,learnings_weight:1,reminders_weight:2,events_weight:2,dependencies_weight:3,linked_content_weight:1};const tuning=settings.search?.tuning;if(!tuning)return defaults;const resolveWeight=(candidate,fallback)=>typeof candidate==="number"&&Number.isFinite(candidate)&&candidate>=0?candidate:fallback;return{title_exact_bonus:resolveWeight(tuning.title_exact_bonus,defaults.title_exact_bonus),title_weight:resolveWeight(tuning.title_weight,defaults.title_weight),description_weight:resolveWeight(tuning.description_weight,defaults.description_weight),tags_weight:resolveWeight(tuning.tags_weight,defaults.tags_weight),status_weight:resolveWeight(tuning.status_weight,defaults.status_weight),body_weight:resolveWeight(tuning.body_weight,defaults.body_weight),comments_weight:resolveWeight(tuning.comments_weight,defaults.comments_weight),notes_weight:resolveWeight(tuning.notes_weight,defaults.notes_weight),learnings_weight:resolveWeight(tuning.learnings_weight,defaults.learnings_weight),reminders_weight:resolveWeight(tuning.reminders_weight,defaults.reminders_weight),events_weight:resolveWeight(tuning.events_weight,defaults.events_weight),dependencies_weight:resolveWeight(tuning.dependencies_weight,defaults.dependencies_weight),linked_content_weight:resolveWeight(tuning.linked_content_weight,defaults.linked_content_weight)}}export{SEARCH_DEFAULT_MODE_VALUES,normalizeSearchPhrase,parseMinScoreOverride,parseSearchBoolean,parseSearchDeadline,parseSearchMatchMode,parseSearchMode,parseSearchProjection,parseSearchTokens,parseSemanticWeightOverride,parseTimestampWindow,resolveEffectiveSearchMode,resolveHybridSemanticWeight,resolveSearchDefaultModeSetting,resolveSearchMaxResults,resolveSearchScoreThreshold,resolveSearchTuning,validateSearchProjectionFields};
2
2
  //# sourceMappingURL=search-contracts.js.map
@@ -5,6 +5,8 @@ export declare function createSearchCursorFingerprint(options: {
5
5
  query: string;
6
6
  mode: SearchMode;
7
7
  searchOptions: SearchOptions;
8
+ /** Resolved tracker scope when invoked by the query runtime. */
9
+ pmRoot?: string;
8
10
  }): string;
9
11
  /** Page ranked search hits without coupling cursor mechanics to search scoring. */
10
12
  export declare function resolveSearchPage(options: {
@@ -13,6 +15,8 @@ export declare function resolveSearchPage(options: {
13
15
  mode: SearchMode;
14
16
  searchOptions: SearchOptions;
15
17
  limit: number;
18
+ /** Resolved tracker scope when invoked by the query runtime. */
19
+ pmRoot?: string;
16
20
  }): {
17
21
  limited: SearchHit[];
18
22
  pageExtras: {
@@ -1,2 +1,2 @@
1
- !(function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="91b01dd0-6a8d-5b97-96d2-c27f4044c009")}catch(e2){}})();import{createQueryFingerprint,paginateQueryRows,selectCursorSemanticOptions}from"../pagination.js";import{SEARCH_FLAG_CONTRACTS}from"../cli-contracts/flag-contracts.js";function createSearchCursorFingerprint(options){return createQueryFingerprint("search",{query:options.query.trim(),mode:options.mode,options:selectCursorSemanticOptions(options.searchOptions,SEARCH_FLAG_CONTRACTS)})}function resolveSearchPage(options){const page=paginateQueryRows(options.sorted,{cursor:options.searchOptions.after,fingerprint:createSearchCursorFingerprint(options),limit:options.limit,readId:hit=>hit.item.id});return{limited:page.rows,pageExtras:{applied_limit:options.limit,...page.has_more?{has_more:true,truncated:true}:{},...page.next_cursor?{next_cursor:page.next_cursor}:{}}}}export{createSearchCursorFingerprint,resolveSearchPage};
1
+ !(function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="18c21143-96a8-5031-b288-42f6188f8821")}catch(e2){}})();import{createQueryFingerprint,paginateQueryRows,selectCursorSemanticOptions}from"../pagination.js";import{SEARCH_FLAG_CONTRACTS}from"../cli-contracts/flag-contracts.js";function createSearchCursorFingerprint(options){return createQueryFingerprint("search",{pmRoot:options.pmRoot,query:options.query.trim(),mode:options.mode,options:selectCursorSemanticOptions(options.searchOptions,SEARCH_FLAG_CONTRACTS)})}function resolveSearchPage(options){const page=paginateQueryRows(options.sorted,{cursor:options.searchOptions.after,fingerprint:createSearchCursorFingerprint(options),limit:options.limit,readId:hit=>hit.item.id});return{limited:page.rows,pageExtras:{applied_limit:options.limit,...page.has_more?{has_more:true,truncated:true}:{},...page.next_cursor?{next_cursor:page.next_cursor}:{}}}}export{createSearchCursorFingerprint,resolveSearchPage};
2
2
  //# sourceMappingURL=search-pagination.js.map
@@ -1,2 +1,2 @@
1
- !(function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="9e7719a0-9efa-59c2-85d5-e7a5eb30d8e3")}catch(e2){}})();import{getActiveExtensionRegistrations}from"../../core/extensions/index.js";import{lifecycleClassifierFromStatusRegistry}from"../../core/governance/metadata-coverage.js";import{parseStatusFilterCsv}from"../../core/item/status-filter.js";import{resolveItemTypeRegistry}from"../../core/item/type-registry.js";import{collectRuntimeFilterValues}from"../../core/schema/runtime-field-filters.js";import{resolveRuntimeFieldRegistry,resolveRuntimeStatusRegistry}from"../../core/schema/runtime-schema.js";import{resolveBm25Params}from"../../core/search/bm25.js";import{resolveSearchCorpusFields}from"../../core/search/corpus.js";import{resolveEmbeddingProviders,resolveProviderConfigSource}from"../../core/search/providers.js";import{resolveQueryExpansionConfig,resolveRerankConfig}from"../../core/search/relevance.js";import{resolveSettingsWithSemanticRuntimeDefaults}from"../../core/search/semantic-defaults.js";import{resolveVectorStores}from"../../core/search/vector-stores.js";import{EXIT_CODE}from"../../core/shared/constants.js";import{PmCliError}from"../../core/shared/errors.js";import{nowIso}from"../../core/shared/time.js";import{resolvePmRoot}from"../../core/store/paths.js";import{readSettings}from"../../core/store/settings.js";import{assertInitializedTracker}from"../environment/tracker-preflight.js";import{readWorkspaceMemory,searchWorkspaceMemoryReadResult}from"../workspace-memory.js";import{parseSearchProjection,parseSearchTokens,parseSemanticWeightOverride,parseTimestampWindow,resolveEffectiveSearchMode,resolveHybridSemanticWeight,resolveSearchMaxResults,resolveSearchScoreThreshold,resolveSearchTuning,validateSearchProjectionFields}from"./search-contracts.js";import{resolveSearchPage}from"./search-pagination.js";import{buildCompactSearchFilterSummary,buildVerboseSearchFilters}from"./search-rendering.js";import{collectLinkedCorpusById,collectLinkedPaths,loadDocuments,loadLinkedCorpus,resolveLinkedCorpusRoots}from"./search/corpus.js";import{applyExactQueryFilters,applyFilters,collectExactPhraseFields,dependencyEntries,documentContainsExactPhrase,stringArray,textEntries}from"./search/filters.js";import{applyInlineQueryFilters,assertSearchPagingOptions,parseInlineQueryFilters,prepareSearchInput}from"./search/input.js";import{buildHitHighlights,buildHybridLexicalScore,countOccurrences,highlightFieldSnippet,markTokenRuns,normalizeScoreMap,scoreDocument,sortHits}from"./search/lexical.js";import{attachSearchHighlights,buildCountOnlySearchResult,buildEmptySearchResultFromContext,buildSearchResultForHits,emptySearchResult,projectSearchHits,readSearchFieldValue,withSearchWorkspaceMemory}from"./search/response.js";import{buildExplicitSemanticFallbackWarning,buildRerankCorpus,buildSemanticHits,classifyImplicitSemanticFallbackReason,collectErrorCauseCodes,combineHybridHits,computeBuiltInBm25Hits,computeSemanticOrHybridHits,maybeEmitVectorIndexStaleWarning,mergeVectorHitsById,normalizeExtensionProviderHits,requireSemanticDependencies,resolveBuiltInBm25Mode,resolveExtensionSearchProvider,resolveExtensionSearchProviderByName,resolveExtensionVectorAdapter,resolveQueryExpansionExtension,resolveRerankExtension,toOptionalNonEmptyString}from"./search/semantic.js";import{resolveEffectiveSearchMode as resolveEffectiveSearchMode2,resolveHybridSemanticWeight as resolveHybridSemanticWeight2,resolveSearchMaxResults as resolveSearchMaxResults2,resolveSearchScoreThreshold as resolveSearchScoreThreshold2,resolveSearchTuning as resolveSearchTuning2}from"./search-contracts.js";import{classifyImplicitSemanticFallbackReason as classifyImplicitSemanticFallbackReason2,collectErrorCauseCodes as collectErrorCauseCodes2,formatVectorIndexRecoveryWarnings,resolveVectorIndexRecovery}from"./search/semantic.js";const _testOnlySearchCommand={applyFilters,applyExactQueryFilters,applyInlineQueryFilters,buildHitHighlights,buildVerboseSearchFilters,buildExplicitSemanticFallbackWarning,buildCompactSearchFilterSummary,buildHybridLexicalScore,buildRerankCorpus,buildSemanticHits,classifyImplicitSemanticFallbackReason,collectErrorCauseCodes,collectExactPhraseFields,collectLinkedPaths,combineHybridHits,computeBuiltInBm25Hits,computeSemanticOrHybridHits,resolveBuiltInBm25Mode,countOccurrences,dependencyEntries,documentContainsExactPhrase,emptySearchResult,highlightFieldSnippet,loadDocuments,markTokenRuns,parseInlineQueryFilters,maybeEmitVectorIndexStaleWarning,loadLinkedCorpus,mergeVectorHitsById,normalizeExtensionProviderHits,normalizeScoreMap,parseProjectionConfig:parseSearchProjection,parseTimestampWindow,parseTokens:parseSearchTokens,projectSearchHits,readSearchFieldValue,requireSemanticDependencies,resolveExtensionSearchProvider,resolveExtensionSearchProviderByName,resolveExtensionVectorAdapter,resolveLinkedCorpusRoots,scoreDocument,sortHits,stringArray,textEntries,validateSearchProjectionFields};async function resolveSearchRuntimeContext(prepared,global2){const pmRoot=resolvePmRoot(process.cwd(),global2.path);await assertInitializedTracker(pmRoot);const storedSettings=await readSettings(pmRoot);const settings=resolveSettingsWithSemanticRuntimeDefaults(storedSettings).settings;const statusRegistry=resolveRuntimeStatusRegistry(settings.schema);const runtimeFieldRegistry=resolveRuntimeFieldRegistry(settings.schema);validateSearchProjectionFields(prepared.projection,runtimeFieldRegistry,prepared.query);const runtimeFieldFilters=collectRuntimeFilterValues(prepared.options,runtimeFieldRegistry,"search");const typeRegistry=resolveItemTypeRegistry(settings,getActiveExtensionRegistrations());const providerResolution=resolveEmbeddingProviders(settings);const vectorResolution=resolveVectorStores(settings,pmRoot);const extensionSearchProvider=resolveExtensionSearchProvider(settings);const extensionVectorAdapter=resolveExtensionVectorAdapter(settings);const semanticWeightOverride=parseSemanticWeightOverride(prepared.options.semanticWeight);const queryExpansion=resolveQueryExpansionConfig(settings,providerResolution.active?.name??null);const rerank=resolveRerankConfig(settings,providerResolution.active?.model??toOptionalNonEmptyString(settings.search?.embedding_model)??"text-embedding-3-small");return{pmRoot,settings,statusRegistry,runtimeFieldRegistry,runtimeFieldFilters,typeRegistry,maxResults:resolveSearchMaxResults(settings),scoreThreshold:prepared.minScoreOverride??resolveSearchScoreThreshold(settings),semanticWeightProvided:prepared.options.semanticWeight!==void 0,semanticWeightOverride,hybridSemanticWeight:semanticWeightOverride??resolveHybridSemanticWeight(settings),tuning:resolveSearchTuning(settings),providerResolution,vectorResolution,extensionSearchProvider,extensionVectorAdapter,bm25Mode:resolveBuiltInBm25Mode({configuredProvider:toOptionalNonEmptyString(settings.search?.provider),hasEmbeddingProvider:providerResolution.active!==null,hasExtensionSearchProvider:extensionSearchProvider!==null}),queryExpansion,queryExpansionExtension:resolveQueryExpansionExtension(queryExpansion),rerank,rerankExtension:resolveRerankExtension(settings),...resolveRuntimeSearchMode({requested:prepared.options.mode,settings,configuredProvider:storedSettings.search?.provider??null,providerResolution,vectorResolution,extensionSearchProvider,extensionVectorAdapter})}}function resolveRuntimeSearchMode(params){const providerConfigured=resolveProviderConfigSource(params.providerResolution.active?.name,params.configuredProvider)==="configured";const builtInRunnable=providerConfigured&&(params.vectorResolution.active!==null||params.extensionVectorAdapter!==null);const semanticRunnable=params.extensionSearchProvider!==null||builtInRunnable;const resolution=resolveEffectiveSearchMode({requested:params.requested,settings:params.settings,semanticRunnable});return{effectiveMode:resolution.mode,modeSource:resolution.source}}async function loadFilteredSearchCorpus(prepared,runtime){const loadedDocuments=await loadDocuments(runtime.pmRoot,runtime.settings.item_format??"toon",runtime.typeRegistry.type_to_folder,runtime.settings.schema);const statusFilter=parseStatusFilterCsv(typeof prepared.options.status==="string"?prepared.options.status:void 0,runtime.statusRegistry,{strict:true});const lifecycleClassifier=lifecycleClassifierFromStatusRegistry(runtime.statusRegistry);const metadataFilteredDocuments=applyFilters(loadedDocuments.documents,prepared.options,runtime.typeRegistry,runtime.runtimeFieldFilters,statusFilter,lifecycleClassifier);return{warnings:loadedDocuments.warnings,allDocuments:loadedDocuments.documents,filteredDocuments:applyExactQueryFilters(metadataFilteredDocuments,prepared.normalizedQuery,{titleExact:prepared.titleExact,phraseExact:prepared.phraseExact||prepared.matchMode==="exact"})}}async function computeKeywordSearchHits(prepared,runtime,filteredDocuments){const linkedCorpusById=await collectLinkedCorpusById(prepared.includeLinked,runtime.effectiveMode,filteredDocuments);const applyCoverageBonus=prepared.matchMode==="or";return filteredDocuments.map(document=>buildHybridLexicalScore(document,prepared.tokens,prepared.normalizedQuery,prepared.includeLinked,linkedCorpusById,runtime.tuning,runtime.settings.id_prefix,applyCoverageBonus)).filter(entry=>entry!==null).filter(entry=>prepared.matchMode!=="and"||entry.matched_all_terms===true)}async function executeBuiltInBm25Search(prepared,runtime,filteredDocuments,keywordHits,warnings){if(runtime.bm25Mode===null||runtime.effectiveMode==="keyword"){return null}const hits=computeBuiltInBm25Hits({requestedMode:runtime.effectiveMode,query:prepared.query,filteredDocuments,keywordHits,corpusFields:resolveSearchCorpusFields(runtime.settings),bm25Params:resolveBm25Params(runtime.settings),hybridSemanticWeight:runtime.hybridSemanticWeight});if(runtime.bm25Mode==="auto-fallback"){warnings.push(`search_${runtime.effectiveMode}_offline_bm25:no_embedding_provider:using_lexical_bm25`)}return hits}async function executeExtensionSearchProvider(prepared,runtime,filteredDocuments,filteredById){if(!runtime.extensionSearchProvider){return null}const canUseBuiltInSemantic=runtime.providerResolution.active!==null&&(runtime.vectorResolution.active!==null||runtime.extensionVectorAdapter!==null);try{const providerResponse=await Promise.resolve(runtime.extensionSearchProvider.query({query:prepared.query,mode:runtime.effectiveMode,tokens:prepared.tokens,options:prepared.options,settings:runtime.settings,documents:filteredDocuments}));return normalizeExtensionProviderHits(runtime.extensionSearchProvider.providerName,providerResponse,filteredById)}catch(error){if(!canUseBuiltInSemantic){throw new PmCliError(`Extension search provider "${runtime.extensionSearchProvider.providerName}" failed: ${error instanceof Error?error.message:String(error)}`,EXIT_CODE.GENERIC_FAILURE)}return null}}function maybeApplyNoVectorFallback(effectiveMode,semanticResult,keywordHits,warnings){if(semanticResult.vectorMatchCount>0){return semanticResult.hits}warnings.push(`search_${effectiveMode}_degraded:no_vector_matches:results_are_lexical`);return effectiveMode==="semantic"?keywordHits:semanticResult.hits}async function prepareBuiltInSemanticSearch(runtime,effectiveMode,filteredDocuments,warnings,modeWasExplicit){const builtInSemanticWillRun=!runtime.extensionSearchProvider&&runtime.providerResolution.active!==null&&(runtime.vectorResolution.active!==null||runtime.extensionVectorAdapter!==null);if(modeWasExplicit&&builtInSemanticWillRun){await maybeEmitVectorIndexStaleWarning(runtime.pmRoot,filteredDocuments,warnings)}if(!runtime.extensionSearchProvider){requireSemanticDependencies(effectiveMode,runtime.providerResolution,runtime.vectorResolution,runtime.extensionVectorAdapter!==null)}}async function executeSemanticSearch(input){const{prepared,runtime,filteredDocuments,keywordHits,warnings,modeWasExplicit}=input;let hits=keywordHits;const bm25Hits=await executeBuiltInBm25Search(prepared,runtime,filteredDocuments,keywordHits,warnings);const semanticMode=runtime.effectiveMode;if(bm25Hits!==null||semanticMode==="keyword"){return{effectiveMode:runtime.effectiveMode,hits:bm25Hits??hits}}try{await prepareBuiltInSemanticSearch(runtime,semanticMode,filteredDocuments,warnings,modeWasExplicit);if(filteredDocuments.length===0||prepared.limit===0){return{effectiveMode:runtime.effectiveMode,hits:[]}}const filteredById=new Map(filteredDocuments.map(document=>[document.metadata.id,document]));hits=await executeExtensionSearchProvider(prepared,runtime,filteredDocuments,filteredById)??hits;if(hits===keywordHits){const{provider,vectorStore}=requireSemanticDependencies(semanticMode,runtime.providerResolution,runtime.vectorResolution,runtime.extensionVectorAdapter!==null);const semanticResult=await computeSemanticOrHybridHits({requestedMode:semanticMode,query:prepared.query,filteredDocuments,keywordHits,hybridSemanticWeight:runtime.hybridSemanticWeight,limit:prepared.limit,maxResults:runtime.maxResults,provider,vectorStore,extensionVectorAdapter:runtime.extensionVectorAdapter,queryExpansion:runtime.queryExpansion,queryExpansionExtension:runtime.queryExpansionExtension,rerank:runtime.rerank,rerankExtension:runtime.rerankExtension,warnings,settings:runtime.settings});hits=maybeApplyNoVectorFallback(semanticMode,semanticResult,keywordHits,warnings)}return{effectiveMode:runtime.effectiveMode,hits}}catch(error){warnings.push(buildExplicitSemanticFallbackWarning(runtime.effectiveMode,error));return{effectiveMode:"keyword",hits:keywordHits}}}async function runSearch(rawQuery,rawOptions,global2){assertSearchPagingOptions(rawOptions);const prepared=prepareSearchInput(rawQuery,rawOptions);const runtime=await resolveSearchRuntimeContext(prepared,global2);const corpus=await loadFilteredSearchCorpus(prepared,runtime);const warnings=corpus.warnings;warnings.push(...prepared.inlineWarnings);const workspaceMemory=await readWorkspaceMemory(corpus.allDocuments.map(document=>document.metadata),{pmRoot:runtime.pmRoot,statusRegistry:runtime.statusRegistry,now:nowIso()});warnings.push(...workspaceMemory.warnings);const workspaceMemoryResult=searchWorkspaceMemoryReadResult(workspaceMemory,prepared.query);if(runtime.effectiveMode==="hybrid"&&runtime.semanticWeightProvided&&runtime.semanticWeightOverride===void 0){warnings.push("search_hybrid_semantic_weight_override_invalid:using_settings_default")}const responseBase={query:prepared.query,modeSource:runtime.modeSource,matchMode:prepared.matchMode,options:prepared.options,includeLinked:prepared.includeLinked,titleExact:prepared.titleExact,phraseExact:prepared.phraseExact,scoreThreshold:runtime.scoreThreshold,hybridSemanticWeight:runtime.hybridSemanticWeight,queryExpansion:runtime.queryExpansion,rerank:runtime.rerank,projection:prepared.projection,warnings,runtimeFieldFilters:runtime.runtimeFieldFilters};if(runtime.effectiveMode==="keyword"&&(corpus.filteredDocuments.length===0||prepared.limit===0&&!prepared.countOnly)){return withSearchWorkspaceMemory(buildEmptySearchResultFromContext({...responseBase,effectiveMode:runtime.effectiveMode},prepared.countOnly),workspaceMemoryResult)}const keywordHits=await computeKeywordSearchHits(prepared,runtime,corpus.filteredDocuments);const modeResult=await executeSemanticSearch({prepared,runtime,filteredDocuments:corpus.filteredDocuments,keywordHits,warnings,modeWasExplicit:prepared.modeWasExplicit});if(modeResult.effectiveMode!=="keyword"&&modeResult.hits.length===0&&(corpus.filteredDocuments.length===0||prepared.limit===0&&!prepared.countOnly)){return withSearchWorkspaceMemory(buildEmptySearchResultFromContext({...responseBase,effectiveMode:modeResult.effectiveMode},prepared.countOnly),workspaceMemoryResult)}const thresholded=modeResult.hits.filter(entry=>entry.exact_id_match===true||entry.score>=runtime.scoreThreshold);const sorted=sortHits(thresholded,runtime.statusRegistry);const total=sorted.length;const page=resolveSearchPage({sorted,query:prepared.query,mode:modeResult.effectiveMode,searchOptions:prepared.options,limit:prepared.limit??runtime.maxResults});const response={...responseBase,effectiveMode:modeResult.effectiveMode};if(prepared.countOnly){return withSearchWorkspaceMemory(buildCountOnlySearchResult(response,total),workspaceMemoryResult)}const{hits:projectedHits,projection:effectiveProjection}=attachSearchHighlights(prepared,corpus.filteredDocuments,page.limited);const projectedItems=projectSearchHits(projectedHits,effectiveProjection);return withSearchWorkspaceMemory(buildSearchResultForHits(response,projectedItems,total,page.limited.length,effectiveProjection,page.pageExtras),workspaceMemoryResult)}export{_testOnlySearchCommand,classifyImplicitSemanticFallbackReason2 as classifyImplicitSemanticFallbackReason,collectErrorCauseCodes2 as collectErrorCauseCodes,formatVectorIndexRecoveryWarnings,resolveEffectiveSearchMode2 as resolveEffectiveSearchMode,resolveHybridSemanticWeight2 as resolveHybridSemanticWeight,resolveSearchMaxResults2 as resolveSearchMaxResults,resolveSearchScoreThreshold2 as resolveSearchScoreThreshold,resolveSearchTuning2 as resolveSearchTuning,resolveVectorIndexRecovery,runSearch};
1
+ !(function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="59612a0b-e84f-5a7c-b9ae-a26ec9a939e2")}catch(e2){}})();import{getActiveExtensionRegistrations}from"../../core/extensions/index.js";import{lifecycleClassifierFromStatusRegistry}from"../../core/governance/metadata-coverage.js";import{parseStatusFilterCsv}from"../../core/item/status-filter.js";import{resolveItemTypeRegistry}from"../../core/item/type-registry.js";import{collectRuntimeFilterValues}from"../../core/schema/runtime-field-filters.js";import{resolveRuntimeFieldRegistry,resolveRuntimeStatusRegistry}from"../../core/schema/runtime-schema.js";import{resolveBm25Params}from"../../core/search/bm25.js";import{resolveSearchCorpusFields}from"../../core/search/corpus.js";import{resolveEmbeddingProviders,resolveProviderConfigSource}from"../../core/search/providers.js";import{resolveQueryExpansionConfig,resolveRerankConfig}from"../../core/search/relevance.js";import{resolveSettingsWithSemanticRuntimeDefaults}from"../../core/search/semantic-defaults.js";import{resolveVectorStores}from"../../core/search/vector-stores.js";import{EXIT_CODE}from"../../core/shared/constants.js";import{PmCliError}from"../../core/shared/errors.js";import{nowIso}from"../../core/shared/time.js";import{resolvePmRoot}from"../../core/store/paths.js";import{readSettings}from"../../core/store/settings.js";import{assertInitializedTracker}from"../environment/tracker-preflight.js";import{readWorkspaceMemory,searchWorkspaceMemoryReadResult}from"../workspace-memory.js";import{parseSearchProjection,parseSearchTokens,parseSemanticWeightOverride,parseTimestampWindow,resolveEffectiveSearchMode,resolveHybridSemanticWeight,resolveSearchMaxResults,resolveSearchScoreThreshold,resolveSearchTuning,validateSearchProjectionFields}from"./search-contracts.js";import{createSearchCursorFingerprint,resolveSearchPage}from"./search-pagination.js";import{decodeQueryCursor}from"../pagination.js";import{buildCompactSearchFilterSummary,buildVerboseSearchFilters}from"./search-rendering.js";import{collectLinkedCorpusById,collectLinkedPaths,loadDocuments,loadLinkedCorpus,resolveLinkedCorpusRoots}from"./search/corpus.js";import{applyExactQueryFilters,applyFilters,collectExactPhraseFields,dependencyEntries,documentContainsExactPhrase,stringArray,textEntries}from"./search/filters.js";import{applyInlineQueryFilters,assertSearchPagingOptions,parseInlineQueryFilters,prepareSearchInput}from"./search/input.js";import{buildHitHighlights,buildHybridLexicalScore,countOccurrences,highlightFieldSnippet,markTokenRuns,normalizeScoreMap,scoreDocument,sortHits}from"./search/lexical.js";import{attachSearchHighlights,buildCountOnlySearchResult,buildEmptySearchResultFromContext,buildSearchResultForHits,emptySearchResult,projectSearchHits,readSearchFieldValue,withSearchWorkspaceMemory}from"./search/response.js";import{buildExplicitSemanticFallbackWarning,buildRerankCorpus,buildSemanticHits,classifyImplicitSemanticFallbackReason,collectErrorCauseCodes,combineHybridHits,computeBuiltInBm25Hits,computeSemanticOrHybridHits,maybeEmitVectorIndexStaleWarning,mergeVectorHitsById,normalizeExtensionProviderHits,requireSemanticDependencies,resolveBuiltInBm25Mode,resolveExtensionSearchProvider,resolveExtensionSearchProviderByName,resolveExtensionVectorAdapter,resolveQueryExpansionExtension,resolveRerankExtension,toOptionalNonEmptyString}from"./search/semantic.js";import{resolveEffectiveSearchMode as resolveEffectiveSearchMode2,resolveHybridSemanticWeight as resolveHybridSemanticWeight2,resolveSearchMaxResults as resolveSearchMaxResults2,resolveSearchScoreThreshold as resolveSearchScoreThreshold2,resolveSearchTuning as resolveSearchTuning2}from"./search-contracts.js";import{classifyImplicitSemanticFallbackReason as classifyImplicitSemanticFallbackReason2,collectErrorCauseCodes as collectErrorCauseCodes2,formatVectorIndexRecoveryWarnings,resolveVectorIndexRecovery}from"./search/semantic.js";const _testOnlySearchCommand={applyFilters,applyExactQueryFilters,applyInlineQueryFilters,buildHitHighlights,buildVerboseSearchFilters,buildExplicitSemanticFallbackWarning,buildCompactSearchFilterSummary,buildHybridLexicalScore,buildRerankCorpus,buildSemanticHits,classifyImplicitSemanticFallbackReason,collectErrorCauseCodes,collectExactPhraseFields,collectLinkedPaths,combineHybridHits,computeBuiltInBm25Hits,computeSemanticOrHybridHits,resolveBuiltInBm25Mode,countOccurrences,dependencyEntries,documentContainsExactPhrase,emptySearchResult,highlightFieldSnippet,loadDocuments,markTokenRuns,parseInlineQueryFilters,maybeEmitVectorIndexStaleWarning,loadLinkedCorpus,mergeVectorHitsById,normalizeExtensionProviderHits,normalizeScoreMap,parseProjectionConfig:parseSearchProjection,parseTimestampWindow,parseTokens:parseSearchTokens,projectSearchHits,readSearchFieldValue,requireSemanticDependencies,resolveExtensionSearchProvider,resolveExtensionSearchProviderByName,resolveExtensionVectorAdapter,resolveLinkedCorpusRoots,scoreDocument,sortHits,stringArray,textEntries,validateSearchProjectionFields};async function resolveSearchRuntimeContext(prepared,global2){const pmRoot=resolvePmRoot(process.cwd(),global2.path);await assertInitializedTracker(pmRoot);const storedSettings=await readSettings(pmRoot);const settings=resolveSettingsWithSemanticRuntimeDefaults(storedSettings).settings;const statusRegistry=resolveRuntimeStatusRegistry(settings.schema);const runtimeFieldRegistry=resolveRuntimeFieldRegistry(settings.schema);validateSearchProjectionFields(prepared.projection,runtimeFieldRegistry,prepared.query);const runtimeFieldFilters=collectRuntimeFilterValues(prepared.options,runtimeFieldRegistry,"search");const typeRegistry=resolveItemTypeRegistry(settings,getActiveExtensionRegistrations());const providerResolution=resolveEmbeddingProviders(settings);const vectorResolution=resolveVectorStores(settings,pmRoot);const extensionSearchProvider=resolveExtensionSearchProvider(settings);const extensionVectorAdapter=resolveExtensionVectorAdapter(settings);const semanticWeightOverride=parseSemanticWeightOverride(prepared.options.semanticWeight);const queryExpansion=resolveQueryExpansionConfig(settings,providerResolution.active?.name??null);const rerank=resolveRerankConfig(settings,providerResolution.active?.model??toOptionalNonEmptyString(settings.search?.embedding_model)??"text-embedding-3-small");return{pmRoot,settings,statusRegistry,runtimeFieldRegistry,runtimeFieldFilters,typeRegistry,maxResults:resolveSearchMaxResults(settings),scoreThreshold:prepared.minScoreOverride??resolveSearchScoreThreshold(settings),semanticWeightProvided:prepared.options.semanticWeight!==void 0,semanticWeightOverride,hybridSemanticWeight:semanticWeightOverride??resolveHybridSemanticWeight(settings),tuning:resolveSearchTuning(settings),providerResolution,vectorResolution,extensionSearchProvider,extensionVectorAdapter,bm25Mode:resolveBuiltInBm25Mode({configuredProvider:toOptionalNonEmptyString(settings.search?.provider),hasEmbeddingProvider:providerResolution.active!==null,hasExtensionSearchProvider:extensionSearchProvider!==null}),queryExpansion,queryExpansionExtension:resolveQueryExpansionExtension(queryExpansion),rerank,rerankExtension:resolveRerankExtension(settings),...resolveRuntimeSearchMode({requested:prepared.options.mode,settings,configuredProvider:storedSettings.search?.provider??null,providerResolution,vectorResolution,extensionSearchProvider,extensionVectorAdapter})}}function resolveRuntimeSearchMode(params){const providerConfigured=resolveProviderConfigSource(params.providerResolution.active?.name,params.configuredProvider)==="configured";const builtInRunnable=providerConfigured&&(params.vectorResolution.active!==null||params.extensionVectorAdapter!==null);const semanticRunnable=params.extensionSearchProvider!==null||builtInRunnable;const resolution=resolveEffectiveSearchMode({requested:params.requested,settings:params.settings,semanticRunnable});return{effectiveMode:resolution.mode,modeSource:resolution.source}}async function loadFilteredSearchCorpus(prepared,runtime){const loadedDocuments=await loadDocuments(runtime.pmRoot,runtime.settings.item_format??"toon",runtime.typeRegistry.type_to_folder,runtime.settings.schema);const statusFilter=parseStatusFilterCsv(typeof prepared.options.status==="string"?prepared.options.status:void 0,runtime.statusRegistry,{strict:true});const lifecycleClassifier=lifecycleClassifierFromStatusRegistry(runtime.statusRegistry);const metadataFilteredDocuments=applyFilters(loadedDocuments.documents,prepared.options,runtime.typeRegistry,runtime.runtimeFieldFilters,statusFilter,lifecycleClassifier);return{warnings:loadedDocuments.warnings,allDocuments:loadedDocuments.documents,filteredDocuments:applyExactQueryFilters(metadataFilteredDocuments,prepared.normalizedQuery,{titleExact:prepared.titleExact,phraseExact:prepared.phraseExact||prepared.matchMode==="exact"})}}async function computeKeywordSearchHits(prepared,runtime,filteredDocuments){const linkedCorpusById=await collectLinkedCorpusById(prepared.includeLinked,runtime.effectiveMode,filteredDocuments);const applyCoverageBonus=prepared.matchMode==="or";return filteredDocuments.map(document=>buildHybridLexicalScore(document,prepared.tokens,prepared.normalizedQuery,prepared.includeLinked,linkedCorpusById,runtime.tuning,runtime.settings.id_prefix,applyCoverageBonus)).filter(entry=>entry!==null).filter(entry=>prepared.matchMode!=="and"||entry.matched_all_terms===true)}async function executeBuiltInBm25Search(prepared,runtime,filteredDocuments,keywordHits,warnings){if(runtime.bm25Mode===null||runtime.effectiveMode==="keyword"){return null}const hits=computeBuiltInBm25Hits({requestedMode:runtime.effectiveMode,query:prepared.query,filteredDocuments,keywordHits,corpusFields:resolveSearchCorpusFields(runtime.settings),bm25Params:resolveBm25Params(runtime.settings),hybridSemanticWeight:runtime.hybridSemanticWeight});if(runtime.bm25Mode==="auto-fallback"){warnings.push(`search_${runtime.effectiveMode}_offline_bm25:no_embedding_provider:using_lexical_bm25`)}return hits}async function executeExtensionSearchProvider(prepared,runtime,filteredDocuments,filteredById){if(!runtime.extensionSearchProvider){return null}const canUseBuiltInSemantic=runtime.providerResolution.active!==null&&(runtime.vectorResolution.active!==null||runtime.extensionVectorAdapter!==null);try{const providerResponse=await Promise.resolve(runtime.extensionSearchProvider.query({query:prepared.query,mode:runtime.effectiveMode,tokens:prepared.tokens,options:prepared.options,settings:runtime.settings,documents:filteredDocuments}));return normalizeExtensionProviderHits(runtime.extensionSearchProvider.providerName,providerResponse,filteredById)}catch(error){if(!canUseBuiltInSemantic){throw new PmCliError(`Extension search provider "${runtime.extensionSearchProvider.providerName}" failed: ${error instanceof Error?error.message:String(error)}`,EXIT_CODE.GENERIC_FAILURE)}return null}}function maybeApplyNoVectorFallback(effectiveMode,semanticResult,keywordHits,warnings){if(semanticResult.vectorMatchCount>0){return semanticResult.hits}warnings.push(`search_${effectiveMode}_degraded:no_vector_matches:results_are_lexical`);return effectiveMode==="semantic"?keywordHits:semanticResult.hits}async function prepareBuiltInSemanticSearch(runtime,effectiveMode,filteredDocuments,warnings,modeWasExplicit){const builtInSemanticWillRun=!runtime.extensionSearchProvider&&runtime.providerResolution.active!==null&&(runtime.vectorResolution.active!==null||runtime.extensionVectorAdapter!==null);if(modeWasExplicit&&builtInSemanticWillRun){await maybeEmitVectorIndexStaleWarning(runtime.pmRoot,filteredDocuments,warnings)}if(!runtime.extensionSearchProvider){requireSemanticDependencies(effectiveMode,runtime.providerResolution,runtime.vectorResolution,runtime.extensionVectorAdapter!==null)}}async function executeSemanticSearch(input){const{prepared,runtime,filteredDocuments,keywordHits,warnings,modeWasExplicit}=input;let hits=keywordHits;const bm25Hits=await executeBuiltInBm25Search(prepared,runtime,filteredDocuments,keywordHits,warnings);const semanticMode=runtime.effectiveMode;if(bm25Hits!==null||semanticMode==="keyword"){return{effectiveMode:runtime.effectiveMode,hits:bm25Hits??hits}}try{await prepareBuiltInSemanticSearch(runtime,semanticMode,filteredDocuments,warnings,modeWasExplicit);if(filteredDocuments.length===0||prepared.limit===0){return{effectiveMode:runtime.effectiveMode,hits:[]}}const filteredById=new Map(filteredDocuments.map(document=>[document.metadata.id,document]));hits=await executeExtensionSearchProvider(prepared,runtime,filteredDocuments,filteredById)??hits;if(hits===keywordHits){const{provider,vectorStore}=requireSemanticDependencies(semanticMode,runtime.providerResolution,runtime.vectorResolution,runtime.extensionVectorAdapter!==null);const semanticResult=await computeSemanticOrHybridHits({requestedMode:semanticMode,query:prepared.query,filteredDocuments,keywordHits,hybridSemanticWeight:runtime.hybridSemanticWeight,limit:prepared.limit,maxResults:runtime.maxResults,provider,vectorStore,extensionVectorAdapter:runtime.extensionVectorAdapter,queryExpansion:runtime.queryExpansion,queryExpansionExtension:runtime.queryExpansionExtension,rerank:runtime.rerank,rerankExtension:runtime.rerankExtension,warnings,settings:runtime.settings});hits=maybeApplyNoVectorFallback(semanticMode,semanticResult,keywordHits,warnings)}return{effectiveMode:runtime.effectiveMode,hits}}catch(error){warnings.push(buildExplicitSemanticFallbackWarning(runtime.effectiveMode,error));return{effectiveMode:"keyword",hits:keywordHits}}}function validateEmptySearchCursor(options){if(options.searchOptions.after!==void 0){decodeQueryCursor(options.searchOptions.after,createSearchCursorFingerprint(options))}}async function runSearch(rawQuery,rawOptions,global2){assertSearchPagingOptions(rawOptions);const prepared=prepareSearchInput(rawQuery,rawOptions);const runtime=await resolveSearchRuntimeContext(prepared,global2);const corpus=await loadFilteredSearchCorpus(prepared,runtime);const warnings=corpus.warnings;warnings.push(...prepared.inlineWarnings);const workspaceMemory=await readWorkspaceMemory(corpus.allDocuments.map(document=>document.metadata),{pmRoot:runtime.pmRoot,statusRegistry:runtime.statusRegistry,now:nowIso()});warnings.push(...workspaceMemory.warnings);const workspaceMemoryResult=searchWorkspaceMemoryReadResult(workspaceMemory,prepared.query);if(runtime.effectiveMode==="hybrid"&&runtime.semanticWeightProvided&&runtime.semanticWeightOverride===void 0){warnings.push("search_hybrid_semantic_weight_override_invalid:using_settings_default")}const responseBase={query:prepared.query,modeSource:runtime.modeSource,matchMode:prepared.matchMode,options:prepared.options,includeLinked:prepared.includeLinked,titleExact:prepared.titleExact,phraseExact:prepared.phraseExact,scoreThreshold:runtime.scoreThreshold,hybridSemanticWeight:runtime.hybridSemanticWeight,queryExpansion:runtime.queryExpansion,rerank:runtime.rerank,projection:prepared.projection,warnings,runtimeFieldFilters:runtime.runtimeFieldFilters};if(runtime.effectiveMode==="keyword"&&(corpus.filteredDocuments.length===0||prepared.limit===0&&!prepared.countOnly)){validateEmptySearchCursor({query:prepared.query,mode:runtime.effectiveMode,searchOptions:prepared.options,pmRoot:runtime.pmRoot});return withSearchWorkspaceMemory(buildEmptySearchResultFromContext({...responseBase,effectiveMode:runtime.effectiveMode},prepared.countOnly),workspaceMemoryResult)}const keywordHits=await computeKeywordSearchHits(prepared,runtime,corpus.filteredDocuments);const modeResult=await executeSemanticSearch({prepared,runtime,filteredDocuments:corpus.filteredDocuments,keywordHits,warnings,modeWasExplicit:prepared.modeWasExplicit});if(modeResult.effectiveMode!=="keyword"&&modeResult.hits.length===0&&(corpus.filteredDocuments.length===0||prepared.limit===0&&!prepared.countOnly)){validateEmptySearchCursor({query:prepared.query,mode:modeResult.effectiveMode,searchOptions:prepared.options,pmRoot:runtime.pmRoot});return withSearchWorkspaceMemory(buildEmptySearchResultFromContext({...responseBase,effectiveMode:modeResult.effectiveMode},prepared.countOnly),workspaceMemoryResult)}const thresholded=modeResult.hits.filter(entry=>entry.exact_id_match===true||entry.score>=runtime.scoreThreshold);const sorted=sortHits(thresholded,runtime.statusRegistry);const total=sorted.length;const page=resolveSearchPage({pmRoot:runtime.pmRoot,sorted,query:prepared.query,mode:modeResult.effectiveMode,searchOptions:prepared.options,limit:prepared.limit??runtime.maxResults});const response={...responseBase,effectiveMode:modeResult.effectiveMode};if(prepared.countOnly){return withSearchWorkspaceMemory(buildCountOnlySearchResult(response,total),workspaceMemoryResult)}const{hits:projectedHits,projection:effectiveProjection}=attachSearchHighlights(prepared,corpus.filteredDocuments,page.limited);const projectedItems=projectSearchHits(projectedHits,effectiveProjection);return withSearchWorkspaceMemory(buildSearchResultForHits(response,projectedItems,total,page.limited.length,effectiveProjection,page.pageExtras),workspaceMemoryResult)}export{_testOnlySearchCommand,classifyImplicitSemanticFallbackReason2 as classifyImplicitSemanticFallbackReason,collectErrorCauseCodes2 as collectErrorCauseCodes,formatVectorIndexRecoveryWarnings,resolveEffectiveSearchMode2 as resolveEffectiveSearchMode,resolveHybridSemanticWeight2 as resolveHybridSemanticWeight,resolveSearchMaxResults2 as resolveSearchMaxResults,resolveSearchScoreThreshold2 as resolveSearchScoreThreshold,resolveSearchTuning2 as resolveSearchTuning,resolveVectorIndexRecovery,runSearch};
2
2
  //# sourceMappingURL=search.js.map
@@ -0,0 +1,14 @@
1
+ /**
2
+ * @module sdk/read-output/options
3
+ *
4
+ * Shares universal presentation controls without loading read execution code.
5
+ */
6
+ /** Canonical field, amount, cost and encoding controls for every read surface. */
7
+ export declare const READ_OUTPUT_DIMENSION_FLAGS: {
8
+ readonly include: "--output-include";
9
+ readonly amount: "--output-limit";
10
+ readonly cost: "--output-budget";
11
+ readonly encoding: "--output-format";
12
+ };
13
+ /** Presentation-only controls composing universal output shaping across calls. */
14
+ export declare const READ_OUTPUT_COMPOSITION_FLAGS: readonly ["--output-session", "--output-cursor", "--output-row-contract"];
@@ -0,0 +1,2 @@
1
+ !(function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="d2e9c5c4-d817-511d-b719-1d4eb70d0b42")}catch(e2){}})();const READ_OUTPUT_DIMENSION_FLAGS={include:"--output-include",amount:"--output-limit",cost:"--output-budget",encoding:"--output-format"};const READ_OUTPUT_COMPOSITION_FLAGS=Object.freeze(["--output-session","--output-cursor","--output-row-contract"]);export{READ_OUTPUT_COMPOSITION_FLAGS,READ_OUTPUT_DIMENSION_FLAGS};
2
+ //# sourceMappingURL=options.js.map
@@ -1,2 +1,2 @@
1
- !(function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="f960f91a-c5a7-5114-b4d2-7d562a8b6fdb")}catch(e2){}})();import{formatBuiltInOutput}from"../core/output/output.js";import{countReadOutputRows,readOutputBudgetCollections}from"./read-output-rows.js";const MAX_ESTIMATE_ITERATIONS=8;const MAX_COMPACTION_ITERATIONS=64;const RECOVERY_MARGIN_NUMERATOR=5;const RECOVERY_MARGIN_DENOMINATOR=4;const RECOVERY_ROUNDING_TOKENS=100;function projectReadOutputItemToBrief(command,options,result){if(command!=="get"||!isRecord(result.item)||["fields","outputInclude","output_include","outputCursor","output_cursor"].some(key=>options[key]!==void 0)||options.full===true||options.tree===true||options.depth!==void 0&&options.depth!=="standard")return void 0;const item=result.item;const sections=["linked","claim_state","schedule"];const omitted=sections.filter(key=>Object.hasOwn(result,key));const projected=Object.fromEntries(Object.entries(result).filter(([key])=>!sections.includes(key)));projected.item=Object.fromEntries(Object.entries(item).filter(([key])=>key!=="body"));if(Object.hasOwn(item,"body"))omitted.push("body");const previous=isRecord(result.omission_receipt)&&Array.isArray(result.omission_receipt.omitted_field_groups)?result.omission_receipt.omitted_field_groups:[];const groups=[...previous,...omitted.map(name=>({name,restore_with:`--fields ${name}`}))];projected.omission_receipt={has_omissions:groups.length>0,omitted_field_group_count:groups.length,omitted_field_groups:groups};return projected}function resolveReadOutputRecoveryBudget(input){const binding=Math.trunc(input.effective_budget_tokens);const measured=Math.trunc(input.measured_result_tokens);if(!Number.isSafeInteger(binding)||binding<=0||!Number.isSafeInteger(measured)||measured<=0){return{output_budget:"unbounded",recovery_budget_multiplier:null,rule_version:"v1"}}const baseline=Math.max(binding+1,measured);const withMargin=Math.ceil(baseline*RECOVERY_MARGIN_NUMERATOR/RECOVERY_MARGIN_DENOMINATOR);const rounded=Math.ceil(withMargin/RECOVERY_ROUNDING_TOKENS)*RECOVERY_ROUNDING_TOKENS;if(!Number.isSafeInteger(rounded)){return{output_budget:"unbounded",recovery_budget_multiplier:null,rule_version:"v1"}}return{output_budget:rounded,recovery_budget_multiplier:rounded/binding,rule_version:"v1"}}function preserveReadOutputRowContract(source,target,suppress=false){const descriptor=Object.getOwnPropertyDescriptor(source,"row_contract");if(descriptor&&(suppress||descriptor.enumerable===false)){Object.defineProperty(target,"row_contract",{...descriptor,enumerable:false})}}function estimateReadOutputTokens(result,format){const rendered=format===void 0?JSON.stringify(result):formatBuiltInOutput(result,format);return Math.ceil(Buffer.byteLength(rendered,"utf8")/4)}function isRecord(value){return value!==null&&typeof value==="object"&&!Array.isArray(value)}function compactStrings(value,state,preserveStrings=false){if(typeof value==="string"){if(preserveStrings||value.length<=240)return value;state.compacted=true;return`${value.slice(0,240)}\u2026`}if(Array.isArray(value)){return value.map(entry=>compactStrings(entry,state,preserveStrings))}if(!isRecord(value))return value;return Object.fromEntries(Object.entries(value).map(([key,entry])=>[key,compactStrings(entry,state,preserveStrings)]))}function updateReadOutputReceiptEstimate(result,receipt,format){let estimate=receipt.estimated_tokens;for(let iteration=0;iteration<MAX_ESTIMATE_ITERATIONS;iteration+=1){receipt.estimated_tokens=estimate;const measured=estimateReadOutputTokens(result,format);if(measured===estimate)return;estimate=measured}receipt.estimated_tokens=estimate}function selectCompactionCollection(result,minimumRowsByPath){return readOutputBudgetCollections(result).filter(collection=>{const length=Array.isArray(collection.value)?collection.value.length:Object.keys(collection.value).length;return length>Math.max(1,minimumRowsByPath.get(collection.path)??0)}).map(collection=>({collection,length:Array.isArray(collection.value)?collection.value.length:Object.keys(collection.value).length})).sort((left,right)=>right.length-left.length||left.collection.path.localeCompare(right.collection.path))[0]?.collection}function compactRowsToBudget(result,receipt,budget,minimumRowsByPath,format,finalize){for(let iteration=0;iteration<MAX_COMPACTION_ITERATIONS;iteration+=1){finalize?.(result);updateReadOutputReceiptEstimate(result,receipt,format);if(receipt.estimated_tokens<=budget)return;const candidate=selectCompactionCollection(result,minimumRowsByPath);if(!candidate)return;const minimumRows=Math.max(1,minimumRowsByPath.get(candidate.path)??0);const values=Array.isArray(candidate.value)?[...candidate.value]:Object.entries(candidate.value);const retainPrefix=length=>{if(Array.isArray(candidate.value)){candidate.value.length=length;for(let index=0;index<length;index+=1)candidate.value[index]=values[index]}else{for(const key of Object.keys(candidate.value))delete candidate.value[key];Object.defineProperties(candidate.value,Object.getOwnPropertyDescriptors(Object.fromEntries(values.slice(0,length))))}if(typeof result.count==="number")result.count=countReadOutputRows(result);if(candidate.path==="items")result.applied_limit=length;finalize?.(result);updateReadOutputReceiptEstimate(result,receipt,format)};receipt.rows_compacted=true;receipt.compacted_row_paths=[...new Set([...receipt.compacted_row_paths??[],candidate.path])].sort((left,right)=>left.localeCompare(right));result.has_more=true;result.truncated=true;let low=minimumRows;let high=values.length-1;let retained=minimumRows;while(low<=high){const middle=Math.floor((low+high)/2);retainPrefix(middle);if(receipt.estimated_tokens<=budget){retained=middle;low=middle+1}else{high=middle-1}}retainPrefix(retained)}}function compactReadOutputToBudget(result,receipt,budget,minimumRowsByPath=new Map,format,finalize,preserveStrings=false){const stringCompactionState={compacted:false};const compacted=Object.fromEntries(Object.entries(result).map(([key,value])=>[key,compactStrings(value,stringCompactionState,preserveStrings&&key==="diff")]));preserveReadOutputRowContract(result,compacted);receipt.strings_compacted=stringCompactionState.compacted;compacted.read_output=receipt;compactRowsToBudget(compacted,receipt,budget,minimumRowsByPath,format,finalize);updateReadOutputReceiptEstimate(compacted,receipt,format);return compacted}export{compactReadOutputToBudget,estimateReadOutputTokens,preserveReadOutputRowContract,projectReadOutputItemToBrief,resolveReadOutputRecoveryBudget,updateReadOutputReceiptEstimate};
1
+ !(function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=new e.Error().stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="29f010b6-6214-5669-8c2e-0a0833496df3")}catch(e2){}})();import{formatBuiltInOutput}from"../core/output/output.js";import{countReadOutputRows,readOutputBudgetCollections}from"./read-output-rows.js";const MAX_ESTIMATE_ITERATIONS=8;const MAX_COMPACTION_ITERATIONS=64;const RECOVERY_MARGIN_NUMERATOR=5;const RECOVERY_MARGIN_DENOMINATOR=4;const RECOVERY_ROUNDING_TOKENS=100;function projectReadOutputItemToBrief(command,options,result){if(command!=="get"||!isRecord(result.item)||["fields","outputInclude","output_include","outputCursor","output_cursor"].some(key=>options[key]!==void 0)||options.full===true||options.tree===true||options.depth!==void 0&&options.depth!=="standard")return void 0;const item=result.item;const sections=["linked","claim_state","schedule"];const omitted=sections.filter(key=>Object.hasOwn(result,key));const projected=Object.fromEntries(Object.entries(result).filter(([key])=>!sections.includes(key)));projected.item=Object.fromEntries(Object.entries(item).filter(([key])=>key!=="body"));if(Object.hasOwn(item,"body"))omitted.push("body");const previous=isRecord(result.omission_receipt)&&Array.isArray(result.omission_receipt.omitted_field_groups)?result.omission_receipt.omitted_field_groups:[];const groups=[...previous,...omitted.map(name=>({name,restore_with:`--fields ${name}`}))];projected.omission_receipt={has_omissions:groups.length>0,omitted_field_group_count:groups.length,omitted_field_groups:groups};return projected}function resolveReadOutputRecoveryBudget(input){const binding=Math.trunc(input.effective_budget_tokens);const measured=Math.trunc(input.measured_result_tokens);if(!Number.isSafeInteger(binding)||binding<=0||!Number.isSafeInteger(measured)||measured<=0){return{output_budget:"unbounded",recovery_budget_multiplier:null,rule_version:"v1"}}const baseline=Math.max(binding+1,measured);const withMargin=Math.ceil(baseline*RECOVERY_MARGIN_NUMERATOR/RECOVERY_MARGIN_DENOMINATOR);const rounded=Math.ceil(withMargin/RECOVERY_ROUNDING_TOKENS)*RECOVERY_ROUNDING_TOKENS;if(!Number.isSafeInteger(rounded)){return{output_budget:"unbounded",recovery_budget_multiplier:null,rule_version:"v1"}}return{output_budget:rounded,recovery_budget_multiplier:rounded/binding,rule_version:"v1"}}function preserveReadOutputRowContract(source,target,suppress=false){const descriptor=Object.getOwnPropertyDescriptor(source,"row_contract");if(descriptor&&(suppress||descriptor.enumerable===false)){Object.defineProperty(target,"row_contract",{...descriptor,enumerable:false})}}function estimateReadOutputTokens(result,format){const rendered=format===void 0?JSON.stringify(result):formatBuiltInOutput(result,format);return Math.ceil(Buffer.byteLength(rendered,"utf8")/4)}function isRecord(value){return value!==null&&typeof value==="object"&&!Array.isArray(value)}function compactStrings(value,state,preserveStrings=false){if(typeof value==="string"){if(preserveStrings||value.length<=240)return value;state.compacted=true;return`${value.slice(0,240)}\u2026`}if(Array.isArray(value)){return value.map(entry=>compactStrings(entry,state,preserveStrings))}if(!isRecord(value))return value;return Object.fromEntries(Object.entries(value).map(([key,entry])=>[key,compactStrings(entry,state,preserveStrings||key==="focus_row_states")]))}function updateReadOutputReceiptEstimate(result,receipt,format){let estimate=receipt.estimated_tokens;for(let iteration=0;iteration<MAX_ESTIMATE_ITERATIONS;iteration+=1){receipt.estimated_tokens=estimate;const measured=estimateReadOutputTokens(result,format);if(measured===estimate)return;estimate=measured}receipt.estimated_tokens=estimate}function selectCompactionCollection(result,minimumRowsByPath){return readOutputBudgetCollections(result).filter(collection=>{const length=Array.isArray(collection.value)?collection.value.length:Object.keys(collection.value).length;return length>Math.max(1,minimumRowsByPath.get(collection.path)??0)}).map(collection=>({collection,length:Array.isArray(collection.value)?collection.value.length:Object.keys(collection.value).length})).sort((left,right)=>right.length-left.length||left.collection.path.localeCompare(right.collection.path))[0]?.collection}function compactRowsToBudget(result,receipt,budget,minimumRowsByPath,format,finalize){for(let iteration=0;iteration<MAX_COMPACTION_ITERATIONS;iteration+=1){finalize?.(result);updateReadOutputReceiptEstimate(result,receipt,format);if(receipt.estimated_tokens<=budget)return;const candidate=selectCompactionCollection(result,minimumRowsByPath);if(!candidate)return;const minimumRows=Math.max(1,minimumRowsByPath.get(candidate.path)??0);const values=Array.isArray(candidate.value)?[...candidate.value]:Object.entries(candidate.value);const retainPrefix=length=>{if(Array.isArray(candidate.value)){candidate.value.length=length;for(let index=0;index<length;index+=1)candidate.value[index]=values[index]}else{for(const key of Object.keys(candidate.value))delete candidate.value[key];Object.defineProperties(candidate.value,Object.getOwnPropertyDescriptors(Object.fromEntries(values.slice(0,length))))}if(typeof result.count==="number")result.count=countReadOutputRows(result);if(candidate.path==="items")result.applied_limit=length;finalize?.(result);updateReadOutputReceiptEstimate(result,receipt,format)};receipt.rows_compacted=true;receipt.compacted_row_paths=[...new Set([...receipt.compacted_row_paths??[],candidate.path])].sort((left,right)=>left.localeCompare(right));result.has_more=true;result.truncated=true;let low=minimumRows;let high=values.length-1;let retained=minimumRows;while(low<=high){const middle=Math.floor((low+high)/2);retainPrefix(middle);if(receipt.estimated_tokens<=budget){retained=middle;low=middle+1}else{high=middle-1}}retainPrefix(retained)}}function compactReadOutputToBudget(result,receipt,budget,minimumRowsByPath=new Map,format,finalize,preserveStrings=false){const stringCompactionState={compacted:false};const compacted=Object.fromEntries(Object.entries(result).map(([key,value])=>[key,compactStrings(value,stringCompactionState,preserveStrings&&key==="diff")]));preserveReadOutputRowContract(result,compacted);receipt.strings_compacted=stringCompactionState.compacted;compacted.read_output=receipt;compactRowsToBudget(compacted,receipt,budget,minimumRowsByPath,format,finalize);updateReadOutputReceiptEstimate(compacted,receipt,format);return compacted}export{compactReadOutputToBudget,estimateReadOutputTokens,preserveReadOutputRowContract,projectReadOutputItemToBrief,resolveReadOutputRecoveryBudget,updateReadOutputReceiptEstimate};
2
2
  //# sourceMappingURL=read-output-budget.js.map