@unbrained/pm-cli 2026.5.1 → 2026.5.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 (201) hide show
  1. package/CHANGELOG.md +20 -4
  2. package/CONTRIBUTING.md +11 -5
  3. package/PRD.md +17 -1
  4. package/README.md +49 -1101
  5. package/SECURITY.md +6 -11
  6. package/dist/cli/commands/activity.d.ts +10 -0
  7. package/dist/cli/commands/activity.js +13 -1
  8. package/dist/cli/commands/activity.js.map +1 -1
  9. package/dist/cli/commands/aggregate.js.map +1 -1
  10. package/dist/cli/commands/append.js.map +1 -1
  11. package/dist/cli/commands/calendar.js +16 -5
  12. package/dist/cli/commands/calendar.js.map +1 -1
  13. package/dist/cli/commands/claim.js.map +1 -1
  14. package/dist/cli/commands/close.js.map +1 -1
  15. package/dist/cli/commands/comments-audit.js.map +1 -1
  16. package/dist/cli/commands/comments.js.map +1 -1
  17. package/dist/cli/commands/completion.js.map +1 -1
  18. package/dist/cli/commands/config.js.map +1 -1
  19. package/dist/cli/commands/context.js +22 -0
  20. package/dist/cli/commands/context.js.map +1 -1
  21. package/dist/cli/commands/contracts.js.map +1 -1
  22. package/dist/cli/commands/create.js +2 -2
  23. package/dist/cli/commands/create.js.map +1 -1
  24. package/dist/cli/commands/dedupe-audit.js.map +1 -1
  25. package/dist/cli/commands/delete.js.map +1 -1
  26. package/dist/cli/commands/deps.js.map +1 -1
  27. package/dist/cli/commands/docs.js.map +1 -1
  28. package/dist/cli/commands/extension.js.map +1 -1
  29. package/dist/cli/commands/files.js +14 -2
  30. package/dist/cli/commands/files.js.map +1 -1
  31. package/dist/cli/commands/gc.js.map +1 -1
  32. package/dist/cli/commands/get.js.map +1 -1
  33. package/dist/cli/commands/health.js +16 -12
  34. package/dist/cli/commands/health.js.map +1 -1
  35. package/dist/cli/commands/history.js.map +1 -1
  36. package/dist/cli/commands/index.js.map +1 -1
  37. package/dist/cli/commands/init.js.map +1 -1
  38. package/dist/cli/commands/learnings.js.map +1 -1
  39. package/dist/cli/commands/list.d.ts +1 -0
  40. package/dist/cli/commands/list.js +10 -2
  41. package/dist/cli/commands/list.js.map +1 -1
  42. package/dist/cli/commands/normalize.js +5 -17
  43. package/dist/cli/commands/normalize.js.map +1 -1
  44. package/dist/cli/commands/notes.js.map +1 -1
  45. package/dist/cli/commands/reindex.js.map +1 -1
  46. package/dist/cli/commands/restore.js.map +1 -1
  47. package/dist/cli/commands/search.js.map +1 -1
  48. package/dist/cli/commands/stats.js.map +1 -1
  49. package/dist/cli/commands/templates.js.map +1 -1
  50. package/dist/cli/commands/test-all.js.map +1 -1
  51. package/dist/cli/commands/test-runs.js.map +1 -1
  52. package/dist/cli/commands/test.js.map +1 -1
  53. package/dist/cli/commands/update-many.js +1 -6
  54. package/dist/cli/commands/update-many.js.map +1 -1
  55. package/dist/cli/commands/update.js +2 -2
  56. package/dist/cli/commands/update.js.map +1 -1
  57. package/dist/cli/commands/validate.js +23 -18
  58. package/dist/cli/commands/validate.js.map +1 -1
  59. package/dist/cli/error-guidance.js +13 -2
  60. package/dist/cli/error-guidance.js.map +1 -1
  61. package/dist/cli/extension-command-options.js.map +1 -1
  62. package/dist/cli/help-content.js.map +1 -1
  63. package/dist/cli/main.js +29 -13
  64. package/dist/cli/main.js.map +1 -1
  65. package/dist/cli.d.ts +1 -1
  66. package/dist/cli.js +3 -1
  67. package/dist/cli.js.map +1 -1
  68. package/dist/core/extensions/extension-types.d.ts +605 -0
  69. package/dist/core/extensions/extension-types.js +22 -0
  70. package/dist/core/extensions/extension-types.js.map +1 -0
  71. package/dist/core/extensions/index.js.map +1 -1
  72. package/dist/core/extensions/item-fields.js.map +1 -1
  73. package/dist/core/extensions/loader.d.ts +2 -586
  74. package/dist/core/extensions/loader.js +3 -21
  75. package/dist/core/extensions/loader.js.map +1 -1
  76. package/dist/core/extensions/runtime-registrations.js.map +1 -1
  77. package/dist/core/fs/fs-utils.js.map +1 -1
  78. package/dist/core/fs/index.js.map +1 -1
  79. package/dist/core/history/history-stream-policy.js.map +1 -1
  80. package/dist/core/history/history.js.map +1 -1
  81. package/dist/core/history/index.js.map +1 -1
  82. package/dist/core/item/id.js.map +1 -1
  83. package/dist/core/item/index.js.map +1 -1
  84. package/dist/core/item/item-format.js.map +1 -1
  85. package/dist/core/item/parent-reference-policy.js.map +1 -1
  86. package/dist/core/item/parse.js +6 -0
  87. package/dist/core/item/parse.js.map +1 -1
  88. package/dist/core/item/sprint-release-format.js.map +1 -1
  89. package/dist/core/item/status.js.map +1 -1
  90. package/dist/core/item/type-registry.js.map +1 -1
  91. package/dist/core/lock/index.js.map +1 -1
  92. package/dist/core/lock/lock.js +1 -6
  93. package/dist/core/lock/lock.js.map +1 -1
  94. package/dist/core/output/command-aware.js.map +1 -1
  95. package/dist/core/output/output.js.map +1 -1
  96. package/dist/core/schema/runtime-field-filters.js.map +1 -1
  97. package/dist/core/schema/runtime-field-values.js.map +1 -1
  98. package/dist/core/schema/runtime-schema.js.map +1 -1
  99. package/dist/core/search/cache.js +1 -7
  100. package/dist/core/search/cache.js.map +1 -1
  101. package/dist/core/search/embedding-batches.js +4 -0
  102. package/dist/core/search/embedding-batches.js.map +1 -1
  103. package/dist/core/search/providers.js +1 -20
  104. package/dist/core/search/providers.js.map +1 -1
  105. package/dist/core/search/semantic-defaults.js.map +1 -1
  106. package/dist/core/search/vector-stores.d.ts +1 -0
  107. package/dist/core/search/vector-stores.js +23 -27
  108. package/dist/core/search/vector-stores.js.map +1 -1
  109. package/dist/core/sentry/helpers.d.ts +6 -0
  110. package/dist/core/sentry/helpers.js +73 -0
  111. package/dist/core/sentry/helpers.js.map +1 -0
  112. package/dist/core/sentry/instrument.d.ts +4 -0
  113. package/dist/core/sentry/instrument.js +173 -0
  114. package/dist/core/sentry/instrument.js.map +1 -0
  115. package/dist/core/shared/command-types.js.map +1 -1
  116. package/dist/core/shared/conflict-markers.js.map +1 -1
  117. package/dist/core/shared/constants.js.map +1 -1
  118. package/dist/core/shared/errors.js.map +1 -1
  119. package/dist/core/shared/index.d.ts +1 -0
  120. package/dist/core/shared/index.js +1 -0
  121. package/dist/core/shared/index.js.map +1 -1
  122. package/dist/core/shared/primitives.d.ts +13 -0
  123. package/dist/core/shared/primitives.js +33 -0
  124. package/dist/core/shared/primitives.js.map +1 -0
  125. package/dist/core/shared/serialization.js.map +1 -1
  126. package/dist/core/shared/text-normalization.js.map +1 -1
  127. package/dist/core/shared/time.js.map +1 -1
  128. package/dist/core/store/index.js.map +1 -1
  129. package/dist/core/store/item-format-migration.js.map +1 -1
  130. package/dist/core/store/item-store.js +44 -35
  131. package/dist/core/store/item-store.js.map +1 -1
  132. package/dist/core/store/paths.js.map +1 -1
  133. package/dist/core/store/settings.js.map +1 -1
  134. package/dist/core/telemetry/consent.js.map +1 -1
  135. package/dist/core/telemetry/runtime.d.ts +2 -0
  136. package/dist/core/telemetry/runtime.js +40 -13
  137. package/dist/core/telemetry/runtime.js.map +1 -1
  138. package/dist/core/test/background-runs.js.map +1 -1
  139. package/dist/core/test/item-test-run-tracking.js.map +1 -1
  140. package/dist/sdk/cli-contracts.js.map +1 -1
  141. package/dist/sdk/index.d.ts +1 -1
  142. package/dist/sdk/index.js.map +1 -1
  143. package/dist/types/index.js.map +1 -1
  144. package/dist/types.js.map +1 -1
  145. package/docs/AGENT_GUIDE.md +125 -0
  146. package/docs/ARCHITECTURE.md +195 -478
  147. package/docs/COMMANDS.md +199 -0
  148. package/docs/CONFIGURATION.md +146 -0
  149. package/docs/EXTENSIONS.md +146 -645
  150. package/docs/QUICKSTART.md +108 -0
  151. package/docs/README.md +70 -0
  152. package/docs/RELEASING.md +51 -36
  153. package/docs/SDK.md +127 -68
  154. package/docs/TESTING.md +125 -0
  155. package/docs/examples/starter-extension/README.md +39 -25
  156. package/package.json +17 -9
  157. package/dist/command-types.d.ts +0 -1
  158. package/dist/command-types.js +0 -2
  159. package/dist/command-types.js.map +0 -1
  160. package/dist/constants.d.ts +0 -1
  161. package/dist/constants.js +0 -2
  162. package/dist/constants.js.map +0 -1
  163. package/dist/errors.d.ts +0 -1
  164. package/dist/errors.js +0 -2
  165. package/dist/errors.js.map +0 -1
  166. package/dist/fs-utils.d.ts +0 -1
  167. package/dist/fs-utils.js +0 -2
  168. package/dist/fs-utils.js.map +0 -1
  169. package/dist/history.d.ts +0 -1
  170. package/dist/history.js +0 -2
  171. package/dist/history.js.map +0 -1
  172. package/dist/id.d.ts +0 -1
  173. package/dist/id.js +0 -2
  174. package/dist/id.js.map +0 -1
  175. package/dist/item-format.d.ts +0 -1
  176. package/dist/item-format.js +0 -2
  177. package/dist/item-format.js.map +0 -1
  178. package/dist/item-store.d.ts +0 -1
  179. package/dist/item-store.js +0 -2
  180. package/dist/item-store.js.map +0 -1
  181. package/dist/lock.d.ts +0 -1
  182. package/dist/lock.js +0 -2
  183. package/dist/lock.js.map +0 -1
  184. package/dist/output.d.ts +0 -1
  185. package/dist/output.js +0 -2
  186. package/dist/output.js.map +0 -1
  187. package/dist/parse.d.ts +0 -1
  188. package/dist/parse.js +0 -2
  189. package/dist/parse.js.map +0 -1
  190. package/dist/paths.d.ts +0 -1
  191. package/dist/paths.js +0 -2
  192. package/dist/paths.js.map +0 -1
  193. package/dist/serialization.d.ts +0 -1
  194. package/dist/serialization.js +0 -2
  195. package/dist/serialization.js.map +0 -1
  196. package/dist/settings.d.ts +0 -1
  197. package/dist/settings.js +0 -2
  198. package/dist/settings.js.map +0 -1
  199. package/dist/time.d.ts +0 -1
  200. package/dist/time.js +0 -2
  201. package/dist/time.js.map +0 -1
package/dist/cli.d.ts CHANGED
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env node
2
- import "./cli/main.js";
2
+ export {};
package/dist/cli.js CHANGED
@@ -1,3 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import "./cli/main.js";
2
+ import { ensureSentryInit } from "./core/sentry/instrument.js";
3
+ await ensureSentryInit();
4
+ await import("./cli/main.js");
3
5
  //# sourceMappingURL=cli.js.map
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA,OAAO,eAAe,CAAC"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"/","sources":["cli.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAE/D,MAAM,gBAAgB,EAAE,CAAC;AACzB,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC","sourcesContent":["#!/usr/bin/env node\nimport { ensureSentryInit } from \"./core/sentry/instrument.js\";\n\nawait ensureSentryInit();\nawait import(\"./cli/main.js\");\n"]}
@@ -0,0 +1,605 @@
1
+ import type { ItemDocument, PmSettings } from "../../types/index.js";
2
+ import type { GlobalOptions } from "../shared/command-types.js";
3
+ export declare const KNOWN_EXTENSION_CAPABILITIES: readonly ["commands", "renderers", "hooks", "schema", "importers", "search", "parser", "preflight", "services"];
4
+ export type ExtensionCapability = (typeof KNOWN_EXTENSION_CAPABILITIES)[number];
5
+ export declare const EXTENSION_CAPABILITY_CONTRACT_VERSION = 2;
6
+ export declare const EXTENSION_CAPABILITY_LEGACY_ALIASES: Readonly<Record<string, ExtensionCapability>>;
7
+ export declare const EXTENSION_CAPABILITY_CONTRACT: Readonly<{
8
+ version: 2;
9
+ capabilities: ("search" | "schema" | "commands" | "renderers" | "hooks" | "importers" | "parser" | "preflight" | "services")[];
10
+ legacy_aliases: {
11
+ [x: string]: "search" | "schema" | "commands" | "renderers" | "hooks" | "importers" | "parser" | "preflight" | "services";
12
+ };
13
+ }>;
14
+ export type ExtensionLayer = "global" | "project";
15
+ export type ExtensionStatus = "ok" | "warn";
16
+ export interface ExtensionManifest {
17
+ name: string;
18
+ version: string;
19
+ entry: string;
20
+ priority: number;
21
+ capabilities: string[];
22
+ legacy_capability_aliases?: LegacyExtensionCapabilityAliasMapping[];
23
+ }
24
+ export interface ExtensionDiagnostic {
25
+ layer: ExtensionLayer;
26
+ directory: string;
27
+ manifest_path: string;
28
+ name: string | null;
29
+ version: string | null;
30
+ entry: string | null;
31
+ priority: number | null;
32
+ entry_path: string | null;
33
+ enabled: boolean | null;
34
+ status: ExtensionStatus;
35
+ }
36
+ export interface EffectiveExtension {
37
+ layer: ExtensionLayer;
38
+ directory: string;
39
+ manifest_path: string;
40
+ name: string;
41
+ version: string;
42
+ entry: string;
43
+ priority: number;
44
+ entry_path: string;
45
+ capabilities?: string[];
46
+ }
47
+ export interface ExtensionDiscoveryResult {
48
+ disabled_by_flag: boolean;
49
+ roots: {
50
+ global: string;
51
+ project: string;
52
+ };
53
+ configured_enabled: string[];
54
+ configured_disabled: string[];
55
+ discovered: ExtensionDiagnostic[];
56
+ effective: EffectiveExtension[];
57
+ warnings: string[];
58
+ }
59
+ export interface LoadedExtension extends EffectiveExtension {
60
+ module: unknown;
61
+ }
62
+ export interface FailedExtensionLoad {
63
+ layer: ExtensionLayer;
64
+ name: string;
65
+ entry_path: string;
66
+ error: string;
67
+ }
68
+ export interface ExtensionLoadResult extends ExtensionDiscoveryResult {
69
+ loaded: LoadedExtension[];
70
+ failed: FailedExtensionLoad[];
71
+ }
72
+ export interface BeforeCommandHookContext {
73
+ command: string;
74
+ args: string[];
75
+ options?: Record<string, unknown>;
76
+ global?: GlobalOptions;
77
+ pm_root: string;
78
+ }
79
+ export interface AfterCommandHookContext extends BeforeCommandHookContext {
80
+ ok: boolean;
81
+ error?: string;
82
+ result?: unknown;
83
+ }
84
+ export interface OnWriteHookContext {
85
+ path: string;
86
+ scope: "project" | "global";
87
+ op: string;
88
+ }
89
+ export interface OnReadHookContext {
90
+ path: string;
91
+ scope: "project" | "global";
92
+ }
93
+ export interface OnIndexHookContext {
94
+ mode: string;
95
+ total_items?: number;
96
+ }
97
+ export type BeforeCommandHook = (context: BeforeCommandHookContext) => Promise<void> | void;
98
+ export type AfterCommandHook = (context: AfterCommandHookContext) => Promise<void> | void;
99
+ export type OnWriteHook = (context: OnWriteHookContext) => Promise<void> | void;
100
+ export type OnReadHook = (context: OnReadHookContext) => Promise<void> | void;
101
+ export type OnIndexHook = (context: OnIndexHookContext) => Promise<void> | void;
102
+ export type OutputRendererFormat = "toon" | "json";
103
+ export type CommandOverride = (context: CommandOverrideContext) => unknown;
104
+ export type RendererOverride = (context: RendererOverrideContext) => string;
105
+ export type CommandHandler = (context: CommandHandlerContext) => unknown;
106
+ export type ParserOverride = (context: ParserOverrideContext) => ParserOverrideDelta | Promise<ParserOverrideDelta>;
107
+ export type PreflightOverride = (context: PreflightOverrideContext) => PreflightOverrideDelta | Promise<PreflightOverrideDelta>;
108
+ export type ServiceOverride = (context: ServiceOverrideContext) => unknown;
109
+ export interface RegisteredExtensionHook<THook> {
110
+ layer: ExtensionLayer;
111
+ name: string;
112
+ run: THook;
113
+ }
114
+ export interface ExtensionHookRegistry {
115
+ beforeCommand: Array<RegisteredExtensionHook<BeforeCommandHook>>;
116
+ afterCommand: Array<RegisteredExtensionHook<AfterCommandHook>>;
117
+ onWrite: Array<RegisteredExtensionHook<OnWriteHook>>;
118
+ onRead: Array<RegisteredExtensionHook<OnReadHook>>;
119
+ onIndex: Array<RegisteredExtensionHook<OnIndexHook>>;
120
+ }
121
+ export interface CommandOverrideContext {
122
+ command: string;
123
+ args: string[];
124
+ options?: Record<string, unknown>;
125
+ global?: GlobalOptions;
126
+ pm_root: string;
127
+ result: unknown;
128
+ }
129
+ export interface RendererOverrideContext {
130
+ format: OutputRendererFormat;
131
+ command?: string;
132
+ args?: string[];
133
+ options?: Record<string, unknown>;
134
+ global?: GlobalOptions;
135
+ pm_root?: string;
136
+ result: unknown;
137
+ }
138
+ export interface CommandHandlerContext {
139
+ command: string;
140
+ args: string[];
141
+ options: Record<string, unknown>;
142
+ global: GlobalOptions;
143
+ pm_root: string;
144
+ }
145
+ export interface ParserOverrideContext extends CommandHandlerContext {
146
+ }
147
+ export interface ParserOverrideDelta {
148
+ args?: string[];
149
+ options?: Record<string, unknown>;
150
+ global?: GlobalOptions;
151
+ }
152
+ export interface PreflightOverrideContext extends CommandHandlerContext {
153
+ decision: PreflightRuntimeDecision;
154
+ }
155
+ export interface PreflightRuntimeDecision {
156
+ enforce_item_format_gate: boolean;
157
+ run_preflight_item_format_sync: boolean;
158
+ run_extension_migrations: boolean;
159
+ enforce_mandatory_migration_gate: boolean;
160
+ }
161
+ export interface PreflightOverrideDelta extends ParserOverrideDelta {
162
+ enforce_item_format_gate?: boolean;
163
+ run_preflight_item_format_sync?: boolean;
164
+ run_extension_migrations?: boolean;
165
+ enforce_mandatory_migration_gate?: boolean;
166
+ }
167
+ export type ExtensionServiceName = "output_format" | "error_format" | "help_format" | "lock_acquire" | "lock_release" | "history_append" | "item_store_write" | "item_store_delete";
168
+ export interface ServiceOverrideContext {
169
+ service: ExtensionServiceName;
170
+ command?: string;
171
+ args?: string[];
172
+ options?: Record<string, unknown>;
173
+ global?: GlobalOptions;
174
+ pm_root?: string;
175
+ payload: unknown;
176
+ }
177
+ export interface ExtensionCommandArgumentDefinition {
178
+ name: string;
179
+ required?: boolean;
180
+ variadic?: boolean;
181
+ description?: string;
182
+ }
183
+ export interface CommandDefinition {
184
+ name: string;
185
+ run?: CommandHandler;
186
+ /**
187
+ * @deprecated Use `run` instead. This alias remains for backward compatibility.
188
+ */
189
+ handler?: CommandHandler;
190
+ action?: string;
191
+ description?: string;
192
+ intent?: string;
193
+ examples?: string[];
194
+ failure_hints?: string[];
195
+ arguments?: ExtensionCommandArgumentDefinition[];
196
+ flags?: FlagDefinition[];
197
+ }
198
+ export type FlagValueType = "string" | "number" | "boolean";
199
+ export interface FlagDefinition {
200
+ long?: string;
201
+ short?: string;
202
+ value_name?: string;
203
+ description?: string;
204
+ required?: boolean;
205
+ enabled?: boolean;
206
+ visible?: boolean;
207
+ type?: FlagValueType;
208
+ value_type?: FlagValueType;
209
+ [key: string]: unknown;
210
+ }
211
+ export interface SchemaFieldDefinition {
212
+ name: string;
213
+ type: string;
214
+ optional?: boolean;
215
+ [key: string]: unknown;
216
+ }
217
+ export interface SchemaItemTypeCommandOptionPolicyDefinition {
218
+ command: string;
219
+ option: string;
220
+ enabled?: boolean;
221
+ required?: boolean;
222
+ visible?: boolean;
223
+ [key: string]: unknown;
224
+ }
225
+ export interface SchemaItemTypeOptionDefinition {
226
+ key: string;
227
+ values?: string[];
228
+ required?: boolean;
229
+ aliases?: string[];
230
+ [key: string]: unknown;
231
+ }
232
+ export interface SchemaItemTypeDefinition {
233
+ name: string;
234
+ folder?: string;
235
+ aliases?: string[];
236
+ required_create_fields?: string[];
237
+ required_create_repeatables?: string[];
238
+ command_option_policies?: SchemaItemTypeCommandOptionPolicyDefinition[];
239
+ options?: SchemaItemTypeOptionDefinition[];
240
+ [key: string]: unknown;
241
+ }
242
+ export interface SchemaMigrationRunContext {
243
+ id: string;
244
+ command: "migration";
245
+ layer: ExtensionLayer;
246
+ extension: string;
247
+ pm_root: string;
248
+ status: string;
249
+ }
250
+ export type SchemaMigrationRunner = (context: SchemaMigrationRunContext) => unknown | Promise<unknown>;
251
+ export interface SchemaMigrationDefinition {
252
+ id?: string;
253
+ description?: string;
254
+ status?: string;
255
+ mandatory?: boolean;
256
+ run?: SchemaMigrationRunner;
257
+ [key: string]: unknown;
258
+ }
259
+ export interface ImportExportContext {
260
+ registration: string;
261
+ action: "import" | "export";
262
+ command: string;
263
+ args: string[];
264
+ options: Record<string, unknown>;
265
+ global: GlobalOptions;
266
+ pm_root: string;
267
+ }
268
+ export type Importer = (context: ImportExportContext) => unknown | Promise<unknown>;
269
+ export type Exporter = (context: ImportExportContext) => unknown | Promise<unknown>;
270
+ export type ExtensionSearchMode = "keyword" | "semantic" | "hybrid";
271
+ export interface SearchProviderQueryContext {
272
+ query: string;
273
+ mode: ExtensionSearchMode;
274
+ tokens: string[];
275
+ options: Record<string, unknown>;
276
+ settings: PmSettings;
277
+ documents: ItemDocument[];
278
+ [key: string]: unknown;
279
+ }
280
+ export interface SearchProviderHit {
281
+ id: string;
282
+ score: number;
283
+ matched_fields?: string[];
284
+ [key: string]: unknown;
285
+ }
286
+ export type SearchProviderQueryResult = SearchProviderHit[] | {
287
+ hits?: SearchProviderHit[];
288
+ };
289
+ export interface SearchProviderEmbedBatchContext {
290
+ inputs: string[];
291
+ settings: PmSettings;
292
+ model: string;
293
+ [key: string]: unknown;
294
+ }
295
+ export interface SearchProviderEmbedContext {
296
+ input: string;
297
+ settings: PmSettings;
298
+ model: string;
299
+ [key: string]: unknown;
300
+ }
301
+ export interface SearchProviderDefinition {
302
+ name: string;
303
+ query?: (context: SearchProviderQueryContext) => SearchProviderQueryResult | Promise<SearchProviderQueryResult>;
304
+ embedBatch?: (context: SearchProviderEmbedBatchContext) => number[][] | Promise<number[][]>;
305
+ embed_batch?: (context: SearchProviderEmbedBatchContext) => number[][] | Promise<number[][]>;
306
+ embed?: (context: SearchProviderEmbedContext) => number[] | Promise<number[]>;
307
+ [key: string]: unknown;
308
+ }
309
+ export interface VectorStoreQueryHit {
310
+ id: string;
311
+ score: number;
312
+ payload?: Record<string, unknown>;
313
+ [key: string]: unknown;
314
+ }
315
+ export interface VectorStoreQueryContext {
316
+ vector: number[];
317
+ limit: number;
318
+ settings: PmSettings;
319
+ [key: string]: unknown;
320
+ }
321
+ export interface VectorStoreUpsertPoint {
322
+ id: string;
323
+ vector: number[];
324
+ payload?: Record<string, unknown>;
325
+ [key: string]: unknown;
326
+ }
327
+ export interface VectorStoreUpsertContext {
328
+ points: VectorStoreUpsertPoint[];
329
+ settings: PmSettings;
330
+ [key: string]: unknown;
331
+ }
332
+ export interface VectorStoreDeleteContext {
333
+ ids: string[];
334
+ settings: PmSettings;
335
+ [key: string]: unknown;
336
+ }
337
+ export interface VectorStoreAdapterDefinition {
338
+ name: string;
339
+ query?: (context: VectorStoreQueryContext) => VectorStoreQueryHit[] | Promise<VectorStoreQueryHit[]>;
340
+ upsert?: (context: VectorStoreUpsertContext) => unknown | Promise<unknown>;
341
+ delete?: (context: VectorStoreDeleteContext) => unknown | Promise<unknown>;
342
+ [key: string]: unknown;
343
+ }
344
+ export interface RegisteredExtensionCommandOverride {
345
+ layer: ExtensionLayer;
346
+ name: string;
347
+ command: string;
348
+ run: CommandOverride;
349
+ }
350
+ export interface RegisteredExtensionCommandHandler {
351
+ layer: ExtensionLayer;
352
+ name: string;
353
+ command: string;
354
+ run: CommandHandler;
355
+ }
356
+ export interface RegisteredExtensionParserOverride {
357
+ layer: ExtensionLayer;
358
+ name: string;
359
+ command: string;
360
+ run: ParserOverride;
361
+ }
362
+ export interface RegisteredExtensionPreflightOverride {
363
+ layer: ExtensionLayer;
364
+ name: string;
365
+ run: PreflightOverride;
366
+ }
367
+ export interface RegisteredExtensionServiceOverride {
368
+ layer: ExtensionLayer;
369
+ name: string;
370
+ service: ExtensionServiceName;
371
+ run: ServiceOverride;
372
+ }
373
+ export interface RegisteredExtensionRendererOverride {
374
+ layer: ExtensionLayer;
375
+ name: string;
376
+ format: OutputRendererFormat;
377
+ run: RendererOverride;
378
+ }
379
+ export interface ExtensionCommandRegistry {
380
+ overrides: RegisteredExtensionCommandOverride[];
381
+ handlers: RegisteredExtensionCommandHandler[];
382
+ }
383
+ export interface ExtensionParserRegistry {
384
+ overrides: RegisteredExtensionParserOverride[];
385
+ }
386
+ export interface ExtensionPreflightRegistry {
387
+ overrides: RegisteredExtensionPreflightOverride[];
388
+ }
389
+ export interface ExtensionServiceRegistry {
390
+ overrides: RegisteredExtensionServiceOverride[];
391
+ }
392
+ export interface ExtensionRendererRegistry {
393
+ overrides: RegisteredExtensionRendererOverride[];
394
+ }
395
+ export interface RegisteredExtensionFlagDefinitions {
396
+ layer: ExtensionLayer;
397
+ name: string;
398
+ target_command: string;
399
+ flags: FlagDefinition[];
400
+ }
401
+ export interface RegisteredExtensionCommandDefinition {
402
+ layer: ExtensionLayer;
403
+ name: string;
404
+ command: string;
405
+ action: string;
406
+ description?: string;
407
+ intent?: string;
408
+ examples: string[];
409
+ failure_hints: string[];
410
+ arguments: ExtensionCommandArgumentDefinition[];
411
+ }
412
+ export interface RegisteredExtensionSchemaFieldDefinitions {
413
+ layer: ExtensionLayer;
414
+ name: string;
415
+ fields: SchemaFieldDefinition[];
416
+ }
417
+ export interface RegisteredExtensionSchemaItemTypeDefinitions {
418
+ layer: ExtensionLayer;
419
+ name: string;
420
+ types: SchemaItemTypeDefinition[];
421
+ }
422
+ export interface RegisteredExtensionSchemaMigrationDefinition {
423
+ layer: ExtensionLayer;
424
+ name: string;
425
+ definition: SchemaMigrationDefinition;
426
+ runtime_definition: SchemaMigrationDefinition;
427
+ }
428
+ export interface RegisteredExtensionImporter {
429
+ layer: ExtensionLayer;
430
+ name: string;
431
+ importer: string;
432
+ }
433
+ export interface RegisteredExtensionExporter {
434
+ layer: ExtensionLayer;
435
+ name: string;
436
+ exporter: string;
437
+ }
438
+ export interface RegisteredExtensionSearchProvider {
439
+ layer: ExtensionLayer;
440
+ name: string;
441
+ definition: SearchProviderDefinition;
442
+ runtime_definition: SearchProviderDefinition;
443
+ }
444
+ export interface RegisteredExtensionVectorStoreAdapter {
445
+ layer: ExtensionLayer;
446
+ name: string;
447
+ definition: VectorStoreAdapterDefinition;
448
+ runtime_definition: VectorStoreAdapterDefinition;
449
+ }
450
+ export interface ExtensionRegistrationRegistry {
451
+ commands: RegisteredExtensionCommandDefinition[];
452
+ flags: RegisteredExtensionFlagDefinitions[];
453
+ item_fields: RegisteredExtensionSchemaFieldDefinitions[];
454
+ item_types: RegisteredExtensionSchemaItemTypeDefinitions[];
455
+ migrations: RegisteredExtensionSchemaMigrationDefinition[];
456
+ importers: RegisteredExtensionImporter[];
457
+ exporters: RegisteredExtensionExporter[];
458
+ search_providers: RegisteredExtensionSearchProvider[];
459
+ vector_store_adapters: RegisteredExtensionVectorStoreAdapter[];
460
+ }
461
+ export interface ExtensionRegistrationCounts {
462
+ commands: number;
463
+ flags: number;
464
+ item_fields: number;
465
+ item_types: number;
466
+ migrations: number;
467
+ importers: number;
468
+ exporters: number;
469
+ search_providers: number;
470
+ vector_store_adapters: number;
471
+ }
472
+ export interface ExtensionApi {
473
+ registerCommand(command: string, override: CommandOverride): void;
474
+ registerCommand(definition: CommandDefinition): void;
475
+ registerParser(command: string, override: ParserOverride): void;
476
+ registerPreflight(override: PreflightOverride): void;
477
+ registerService(service: ExtensionServiceName, override: ServiceOverride): void;
478
+ registerFlags(targetCommand: string, flags: FlagDefinition[]): void;
479
+ registerItemFields(fields: SchemaFieldDefinition[]): void;
480
+ registerItemTypes(types: SchemaItemTypeDefinition[]): void;
481
+ registerMigration(definition: SchemaMigrationDefinition): void;
482
+ registerRenderer(format: OutputRendererFormat, renderer: RendererOverride): void;
483
+ registerImporter(name: string, importer: Importer): void;
484
+ registerExporter(name: string, exporter: Exporter): void;
485
+ registerSearchProvider(provider: SearchProviderDefinition): void;
486
+ registerVectorStoreAdapter(adapter: VectorStoreAdapterDefinition): void;
487
+ hooks: {
488
+ beforeCommand(hook: BeforeCommandHook): void;
489
+ afterCommand(hook: AfterCommandHook): void;
490
+ onWrite(hook: OnWriteHook): void;
491
+ onRead(hook: OnReadHook): void;
492
+ onIndex(hook: OnIndexHook): void;
493
+ };
494
+ }
495
+ export interface FailedExtensionActivation {
496
+ layer: ExtensionLayer;
497
+ name: string;
498
+ entry_path: string;
499
+ error: string;
500
+ trace?: ExtensionActivationFailureTrace;
501
+ }
502
+ export interface ExtensionActivationFailureTrace {
503
+ method: string;
504
+ registration_index: number;
505
+ command?: string;
506
+ expected_schema: string;
507
+ received?: unknown;
508
+ hint?: string;
509
+ }
510
+ export interface ExtensionActivationResult {
511
+ hooks: ExtensionHookRegistry;
512
+ commands: ExtensionCommandRegistry;
513
+ parsers: ExtensionParserRegistry;
514
+ preflight: ExtensionPreflightRegistry;
515
+ services: ExtensionServiceRegistry;
516
+ renderers: ExtensionRendererRegistry;
517
+ registrations: ExtensionRegistrationRegistry;
518
+ failed: FailedExtensionActivation[];
519
+ warnings: string[];
520
+ hook_counts: {
521
+ before_command: number;
522
+ after_command: number;
523
+ on_write: number;
524
+ on_read: number;
525
+ on_index: number;
526
+ };
527
+ command_override_count: number;
528
+ command_handler_count: number;
529
+ parser_override_count: number;
530
+ preflight_override_count: number;
531
+ service_override_count: number;
532
+ renderer_override_count: number;
533
+ registration_counts: ExtensionRegistrationCounts;
534
+ }
535
+ export interface ExtensionCandidate {
536
+ layer: ExtensionLayer;
537
+ directory: string;
538
+ manifest_path: string;
539
+ entry_path: string;
540
+ manifest: ExtensionManifest;
541
+ }
542
+ export interface ExtensionLayerScanResult {
543
+ diagnostics: ExtensionDiagnostic[];
544
+ warnings: string[];
545
+ candidates: ExtensionCandidate[];
546
+ }
547
+ export interface ScannedExtensionDirectory {
548
+ diagnostic: ExtensionDiagnostic;
549
+ warnings: string[];
550
+ candidate: ExtensionCandidate | null;
551
+ }
552
+ export interface LegacyExtensionCapabilityAliasMapping {
553
+ alias: string;
554
+ target: ExtensionCapability;
555
+ }
556
+ export interface DiscoverExtensionsOptions {
557
+ pmRoot: string;
558
+ settings: PmSettings;
559
+ cwd?: string;
560
+ noExtensions?: boolean;
561
+ }
562
+ export interface ActivatableExtension {
563
+ activate: (api: ExtensionApi) => void | Promise<void>;
564
+ }
565
+ export interface ServiceOverrideResult {
566
+ handled: boolean;
567
+ result: unknown;
568
+ warnings: string[];
569
+ }
570
+ export interface CommandOverrideResult {
571
+ overridden: boolean;
572
+ result: unknown;
573
+ warnings: string[];
574
+ }
575
+ export interface CommandHandlerResult {
576
+ handled: boolean;
577
+ result: unknown;
578
+ warnings: string[];
579
+ }
580
+ export interface ParserOverrideResult {
581
+ overridden: boolean;
582
+ context: CommandHandlerContext;
583
+ warnings: string[];
584
+ }
585
+ export interface PreflightOverrideResult {
586
+ overridden: boolean;
587
+ context: CommandHandlerContext;
588
+ decision: PreflightRuntimeDecision;
589
+ warnings: string[];
590
+ }
591
+ export interface RendererOverrideResult {
592
+ overridden: boolean;
593
+ rendered: string | null;
594
+ warnings: string[];
595
+ }
596
+ export interface UnknownExtensionCapabilityWarningDetails {
597
+ layer: ExtensionLayer;
598
+ name: string;
599
+ capability: string;
600
+ allowed_capabilities: string[];
601
+ capability_contract_version: number;
602
+ suggested_capability?: string;
603
+ suggestion_source?: "legacy_alias" | "nearest_match";
604
+ legacy_alias_target?: string;
605
+ }
@@ -0,0 +1,22 @@
1
+ export const KNOWN_EXTENSION_CAPABILITIES = [
2
+ "commands",
3
+ "renderers",
4
+ "hooks",
5
+ "schema",
6
+ "importers",
7
+ "search",
8
+ "parser",
9
+ "preflight",
10
+ "services",
11
+ ];
12
+ export const EXTENSION_CAPABILITY_CONTRACT_VERSION = 2;
13
+ export const EXTENSION_CAPABILITY_LEGACY_ALIASES = Object.freeze({
14
+ migration: "schema",
15
+ validation: "schema",
16
+ });
17
+ export const EXTENSION_CAPABILITY_CONTRACT = Object.freeze({
18
+ version: EXTENSION_CAPABILITY_CONTRACT_VERSION,
19
+ capabilities: [...KNOWN_EXTENSION_CAPABILITIES],
20
+ legacy_aliases: { ...EXTENSION_CAPABILITY_LEGACY_ALIASES },
21
+ });
22
+ //# sourceMappingURL=extension-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extension-types.js","sourceRoot":"/","sources":["core/extensions/extension-types.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,MAAM,4BAA4B,GAAG;IAC1C,UAAU;IACV,WAAW;IACX,OAAO;IACP,QAAQ;IACR,WAAW;IACX,QAAQ;IACR,QAAQ;IACR,WAAW;IACX,UAAU;CACF,CAAC;AAEX,MAAM,CAAC,MAAM,qCAAqC,GAAG,CAAC,CAAC;AACvD,MAAM,CAAC,MAAM,mCAAmC,GAAkD,MAAM,CAAC,MAAM,CAAC;IAC9G,SAAS,EAAE,QAAQ;IACnB,UAAU,EAAE,QAAQ;CACrB,CAAC,CAAC;AACH,MAAM,CAAC,MAAM,6BAA6B,GAAG,MAAM,CAAC,MAAM,CAAC;IACzD,OAAO,EAAE,qCAAqC;IAC9C,YAAY,EAAE,CAAC,GAAG,4BAA4B,CAAC;IAC/C,cAAc,EAAE,EAAE,GAAG,mCAAmC,EAAE;CAC3D,CAAC,CAAC","sourcesContent":["import type { ItemDocument, PmSettings } from \"../../types/index.js\";\nimport type { GlobalOptions } from \"../shared/command-types.js\";\n\nexport const KNOWN_EXTENSION_CAPABILITIES = [\n \"commands\",\n \"renderers\",\n \"hooks\",\n \"schema\",\n \"importers\",\n \"search\",\n \"parser\",\n \"preflight\",\n \"services\",\n] as const;\nexport type ExtensionCapability = (typeof KNOWN_EXTENSION_CAPABILITIES)[number];\nexport const EXTENSION_CAPABILITY_CONTRACT_VERSION = 2;\nexport const EXTENSION_CAPABILITY_LEGACY_ALIASES: Readonly<Record<string, ExtensionCapability>> = Object.freeze({\n migration: \"schema\",\n validation: \"schema\",\n});\nexport const EXTENSION_CAPABILITY_CONTRACT = Object.freeze({\n version: EXTENSION_CAPABILITY_CONTRACT_VERSION,\n capabilities: [...KNOWN_EXTENSION_CAPABILITIES],\n legacy_aliases: { ...EXTENSION_CAPABILITY_LEGACY_ALIASES },\n});\n\nexport type ExtensionLayer = \"global\" | \"project\";\nexport type ExtensionStatus = \"ok\" | \"warn\";\n\nexport interface ExtensionManifest {\n name: string;\n version: string;\n entry: string;\n priority: number;\n capabilities: string[];\n legacy_capability_aliases?: LegacyExtensionCapabilityAliasMapping[];\n}\n\nexport interface ExtensionDiagnostic {\n layer: ExtensionLayer;\n directory: string;\n manifest_path: string;\n name: string | null;\n version: string | null;\n entry: string | null;\n priority: number | null;\n entry_path: string | null;\n enabled: boolean | null;\n status: ExtensionStatus;\n}\n\nexport interface EffectiveExtension {\n layer: ExtensionLayer;\n directory: string;\n manifest_path: string;\n name: string;\n version: string;\n entry: string;\n priority: number;\n entry_path: string;\n capabilities?: string[];\n}\n\nexport interface ExtensionDiscoveryResult {\n disabled_by_flag: boolean;\n roots: {\n global: string;\n project: string;\n };\n configured_enabled: string[];\n configured_disabled: string[];\n discovered: ExtensionDiagnostic[];\n effective: EffectiveExtension[];\n warnings: string[];\n}\n\nexport interface LoadedExtension extends EffectiveExtension {\n module: unknown;\n}\n\nexport interface FailedExtensionLoad {\n layer: ExtensionLayer;\n name: string;\n entry_path: string;\n error: string;\n}\n\nexport interface ExtensionLoadResult extends ExtensionDiscoveryResult {\n loaded: LoadedExtension[];\n failed: FailedExtensionLoad[];\n}\n\nexport interface BeforeCommandHookContext {\n command: string;\n args: string[];\n options?: Record<string, unknown>;\n global?: GlobalOptions;\n pm_root: string;\n}\n\nexport interface AfterCommandHookContext extends BeforeCommandHookContext {\n ok: boolean;\n error?: string;\n result?: unknown;\n}\n\nexport interface OnWriteHookContext {\n path: string;\n scope: \"project\" | \"global\";\n op: string;\n}\n\nexport interface OnReadHookContext {\n path: string;\n scope: \"project\" | \"global\";\n}\n\nexport interface OnIndexHookContext {\n mode: string;\n total_items?: number;\n}\n\nexport type BeforeCommandHook = (context: BeforeCommandHookContext) => Promise<void> | void;\nexport type AfterCommandHook = (context: AfterCommandHookContext) => Promise<void> | void;\nexport type OnWriteHook = (context: OnWriteHookContext) => Promise<void> | void;\nexport type OnReadHook = (context: OnReadHookContext) => Promise<void> | void;\nexport type OnIndexHook = (context: OnIndexHookContext) => Promise<void> | void;\nexport type OutputRendererFormat = \"toon\" | \"json\";\nexport type CommandOverride = (context: CommandOverrideContext) => unknown;\nexport type RendererOverride = (context: RendererOverrideContext) => string;\nexport type CommandHandler = (context: CommandHandlerContext) => unknown;\nexport type ParserOverride = (context: ParserOverrideContext) => ParserOverrideDelta | Promise<ParserOverrideDelta>;\nexport type PreflightOverride = (context: PreflightOverrideContext) => PreflightOverrideDelta | Promise<PreflightOverrideDelta>;\nexport type ServiceOverride = (context: ServiceOverrideContext) => unknown;\n\nexport interface RegisteredExtensionHook<THook> {\n layer: ExtensionLayer;\n name: string;\n run: THook;\n}\n\nexport interface ExtensionHookRegistry {\n beforeCommand: Array<RegisteredExtensionHook<BeforeCommandHook>>;\n afterCommand: Array<RegisteredExtensionHook<AfterCommandHook>>;\n onWrite: Array<RegisteredExtensionHook<OnWriteHook>>;\n onRead: Array<RegisteredExtensionHook<OnReadHook>>;\n onIndex: Array<RegisteredExtensionHook<OnIndexHook>>;\n}\n\nexport interface CommandOverrideContext {\n command: string;\n args: string[];\n options?: Record<string, unknown>;\n global?: GlobalOptions;\n pm_root: string;\n result: unknown;\n}\n\nexport interface RendererOverrideContext {\n format: OutputRendererFormat;\n command?: string;\n args?: string[];\n options?: Record<string, unknown>;\n global?: GlobalOptions;\n pm_root?: string;\n result: unknown;\n}\n\nexport interface CommandHandlerContext {\n command: string;\n args: string[];\n options: Record<string, unknown>;\n global: GlobalOptions;\n pm_root: string;\n}\n\nexport interface ParserOverrideContext extends CommandHandlerContext {}\n\nexport interface ParserOverrideDelta {\n args?: string[];\n options?: Record<string, unknown>;\n global?: GlobalOptions;\n}\n\nexport interface PreflightOverrideContext extends CommandHandlerContext {\n decision: PreflightRuntimeDecision;\n}\n\nexport interface PreflightRuntimeDecision {\n enforce_item_format_gate: boolean;\n run_preflight_item_format_sync: boolean;\n run_extension_migrations: boolean;\n enforce_mandatory_migration_gate: boolean;\n}\n\nexport interface PreflightOverrideDelta extends ParserOverrideDelta {\n enforce_item_format_gate?: boolean;\n run_preflight_item_format_sync?: boolean;\n run_extension_migrations?: boolean;\n enforce_mandatory_migration_gate?: boolean;\n}\n\nexport type ExtensionServiceName =\n | \"output_format\"\n | \"error_format\"\n | \"help_format\"\n | \"lock_acquire\"\n | \"lock_release\"\n | \"history_append\"\n | \"item_store_write\"\n | \"item_store_delete\";\n\nexport interface ServiceOverrideContext {\n service: ExtensionServiceName;\n command?: string;\n args?: string[];\n options?: Record<string, unknown>;\n global?: GlobalOptions;\n pm_root?: string;\n payload: unknown;\n}\n\nexport interface ExtensionCommandArgumentDefinition {\n name: string;\n required?: boolean;\n variadic?: boolean;\n description?: string;\n}\n\nexport interface CommandDefinition {\n name: string;\n run?: CommandHandler;\n /**\n * @deprecated Use `run` instead. This alias remains for backward compatibility.\n */\n handler?: CommandHandler;\n action?: string;\n description?: string;\n intent?: string;\n examples?: string[];\n failure_hints?: string[];\n arguments?: ExtensionCommandArgumentDefinition[];\n flags?: FlagDefinition[];\n}\n\nexport type FlagValueType = \"string\" | \"number\" | \"boolean\";\n\nexport interface FlagDefinition {\n long?: string;\n short?: string;\n value_name?: string;\n description?: string;\n required?: boolean;\n enabled?: boolean;\n visible?: boolean;\n type?: FlagValueType;\n value_type?: FlagValueType;\n [key: string]: unknown;\n}\n\nexport interface SchemaFieldDefinition {\n name: string;\n type: string;\n optional?: boolean;\n [key: string]: unknown;\n}\n\nexport interface SchemaItemTypeCommandOptionPolicyDefinition {\n command: string;\n option: string;\n enabled?: boolean;\n required?: boolean;\n visible?: boolean;\n [key: string]: unknown;\n}\n\nexport interface SchemaItemTypeOptionDefinition {\n key: string;\n values?: string[];\n required?: boolean;\n aliases?: string[];\n [key: string]: unknown;\n}\n\nexport interface SchemaItemTypeDefinition {\n name: string;\n folder?: string;\n aliases?: string[];\n required_create_fields?: string[];\n required_create_repeatables?: string[];\n command_option_policies?: SchemaItemTypeCommandOptionPolicyDefinition[];\n options?: SchemaItemTypeOptionDefinition[];\n [key: string]: unknown;\n}\n\nexport interface SchemaMigrationRunContext {\n id: string;\n command: \"migration\";\n layer: ExtensionLayer;\n extension: string;\n pm_root: string;\n status: string;\n}\n\nexport type SchemaMigrationRunner = (context: SchemaMigrationRunContext) => unknown | Promise<unknown>;\n\nexport interface SchemaMigrationDefinition {\n id?: string;\n description?: string;\n status?: string;\n mandatory?: boolean;\n run?: SchemaMigrationRunner;\n [key: string]: unknown;\n}\n\nexport interface ImportExportContext {\n registration: string;\n action: \"import\" | \"export\";\n command: string;\n args: string[];\n options: Record<string, unknown>;\n global: GlobalOptions;\n pm_root: string;\n}\n\nexport type Importer = (context: ImportExportContext) => unknown | Promise<unknown>;\nexport type Exporter = (context: ImportExportContext) => unknown | Promise<unknown>;\n\nexport type ExtensionSearchMode = \"keyword\" | \"semantic\" | \"hybrid\";\n\nexport interface SearchProviderQueryContext {\n query: string;\n mode: ExtensionSearchMode;\n tokens: string[];\n options: Record<string, unknown>;\n settings: PmSettings;\n documents: ItemDocument[];\n [key: string]: unknown;\n}\n\nexport interface SearchProviderHit {\n id: string;\n score: number;\n matched_fields?: string[];\n [key: string]: unknown;\n}\n\nexport type SearchProviderQueryResult = SearchProviderHit[] | { hits?: SearchProviderHit[] };\n\nexport interface SearchProviderEmbedBatchContext {\n inputs: string[];\n settings: PmSettings;\n model: string;\n [key: string]: unknown;\n}\n\nexport interface SearchProviderEmbedContext {\n input: string;\n settings: PmSettings;\n model: string;\n [key: string]: unknown;\n}\n\nexport interface SearchProviderDefinition {\n name: string;\n query?: (context: SearchProviderQueryContext) => SearchProviderQueryResult | Promise<SearchProviderQueryResult>;\n embedBatch?: (context: SearchProviderEmbedBatchContext) => number[][] | Promise<number[][]>;\n embed_batch?: (context: SearchProviderEmbedBatchContext) => number[][] | Promise<number[][]>;\n embed?: (context: SearchProviderEmbedContext) => number[] | Promise<number[]>;\n [key: string]: unknown;\n}\n\nexport interface VectorStoreQueryHit {\n id: string;\n score: number;\n payload?: Record<string, unknown>;\n [key: string]: unknown;\n}\n\nexport interface VectorStoreQueryContext {\n vector: number[];\n limit: number;\n settings: PmSettings;\n [key: string]: unknown;\n}\n\nexport interface VectorStoreUpsertPoint {\n id: string;\n vector: number[];\n payload?: Record<string, unknown>;\n [key: string]: unknown;\n}\n\nexport interface VectorStoreUpsertContext {\n points: VectorStoreUpsertPoint[];\n settings: PmSettings;\n [key: string]: unknown;\n}\n\nexport interface VectorStoreDeleteContext {\n ids: string[];\n settings: PmSettings;\n [key: string]: unknown;\n}\n\nexport interface VectorStoreAdapterDefinition {\n name: string;\n query?: (context: VectorStoreQueryContext) => VectorStoreQueryHit[] | Promise<VectorStoreQueryHit[]>;\n upsert?: (context: VectorStoreUpsertContext) => unknown | Promise<unknown>;\n delete?: (context: VectorStoreDeleteContext) => unknown | Promise<unknown>;\n [key: string]: unknown;\n}\n\nexport interface RegisteredExtensionCommandOverride {\n layer: ExtensionLayer;\n name: string;\n command: string;\n run: CommandOverride;\n}\n\nexport interface RegisteredExtensionCommandHandler {\n layer: ExtensionLayer;\n name: string;\n command: string;\n run: CommandHandler;\n}\n\nexport interface RegisteredExtensionParserOverride {\n layer: ExtensionLayer;\n name: string;\n command: string;\n run: ParserOverride;\n}\n\nexport interface RegisteredExtensionPreflightOverride {\n layer: ExtensionLayer;\n name: string;\n run: PreflightOverride;\n}\n\nexport interface RegisteredExtensionServiceOverride {\n layer: ExtensionLayer;\n name: string;\n service: ExtensionServiceName;\n run: ServiceOverride;\n}\n\nexport interface RegisteredExtensionRendererOverride {\n layer: ExtensionLayer;\n name: string;\n format: OutputRendererFormat;\n run: RendererOverride;\n}\n\nexport interface ExtensionCommandRegistry {\n overrides: RegisteredExtensionCommandOverride[];\n handlers: RegisteredExtensionCommandHandler[];\n}\n\nexport interface ExtensionParserRegistry {\n overrides: RegisteredExtensionParserOverride[];\n}\n\nexport interface ExtensionPreflightRegistry {\n overrides: RegisteredExtensionPreflightOverride[];\n}\n\nexport interface ExtensionServiceRegistry {\n overrides: RegisteredExtensionServiceOverride[];\n}\n\nexport interface ExtensionRendererRegistry {\n overrides: RegisteredExtensionRendererOverride[];\n}\n\nexport interface RegisteredExtensionFlagDefinitions {\n layer: ExtensionLayer;\n name: string;\n target_command: string;\n flags: FlagDefinition[];\n}\n\nexport interface RegisteredExtensionCommandDefinition {\n layer: ExtensionLayer;\n name: string;\n command: string;\n action: string;\n description?: string;\n intent?: string;\n examples: string[];\n failure_hints: string[];\n arguments: ExtensionCommandArgumentDefinition[];\n}\n\nexport interface RegisteredExtensionSchemaFieldDefinitions {\n layer: ExtensionLayer;\n name: string;\n fields: SchemaFieldDefinition[];\n}\n\nexport interface RegisteredExtensionSchemaItemTypeDefinitions {\n layer: ExtensionLayer;\n name: string;\n types: SchemaItemTypeDefinition[];\n}\n\nexport interface RegisteredExtensionSchemaMigrationDefinition {\n layer: ExtensionLayer;\n name: string;\n definition: SchemaMigrationDefinition;\n runtime_definition: SchemaMigrationDefinition;\n}\n\nexport interface RegisteredExtensionImporter {\n layer: ExtensionLayer;\n name: string;\n importer: string;\n}\n\nexport interface RegisteredExtensionExporter {\n layer: ExtensionLayer;\n name: string;\n exporter: string;\n}\n\nexport interface RegisteredExtensionSearchProvider {\n layer: ExtensionLayer;\n name: string;\n definition: SearchProviderDefinition;\n runtime_definition: SearchProviderDefinition;\n}\n\nexport interface RegisteredExtensionVectorStoreAdapter {\n layer: ExtensionLayer;\n name: string;\n definition: VectorStoreAdapterDefinition;\n runtime_definition: VectorStoreAdapterDefinition;\n}\n\nexport interface ExtensionRegistrationRegistry {\n commands: RegisteredExtensionCommandDefinition[];\n flags: RegisteredExtensionFlagDefinitions[];\n item_fields: RegisteredExtensionSchemaFieldDefinitions[];\n item_types: RegisteredExtensionSchemaItemTypeDefinitions[];\n migrations: RegisteredExtensionSchemaMigrationDefinition[];\n importers: RegisteredExtensionImporter[];\n exporters: RegisteredExtensionExporter[];\n search_providers: RegisteredExtensionSearchProvider[];\n vector_store_adapters: RegisteredExtensionVectorStoreAdapter[];\n}\n\nexport interface ExtensionRegistrationCounts {\n commands: number;\n flags: number;\n item_fields: number;\n item_types: number;\n migrations: number;\n importers: number;\n exporters: number;\n search_providers: number;\n vector_store_adapters: number;\n}\n\nexport interface ExtensionApi {\n registerCommand(command: string, override: CommandOverride): void;\n registerCommand(definition: CommandDefinition): void;\n registerParser(command: string, override: ParserOverride): void;\n registerPreflight(override: PreflightOverride): void;\n registerService(service: ExtensionServiceName, override: ServiceOverride): void;\n registerFlags(targetCommand: string, flags: FlagDefinition[]): void;\n registerItemFields(fields: SchemaFieldDefinition[]): void;\n registerItemTypes(types: SchemaItemTypeDefinition[]): void;\n registerMigration(definition: SchemaMigrationDefinition): void;\n registerRenderer(format: OutputRendererFormat, renderer: RendererOverride): void;\n registerImporter(name: string, importer: Importer): void;\n registerExporter(name: string, exporter: Exporter): void;\n registerSearchProvider(provider: SearchProviderDefinition): void;\n registerVectorStoreAdapter(adapter: VectorStoreAdapterDefinition): void;\n hooks: {\n beforeCommand(hook: BeforeCommandHook): void;\n afterCommand(hook: AfterCommandHook): void;\n onWrite(hook: OnWriteHook): void;\n onRead(hook: OnReadHook): void;\n onIndex(hook: OnIndexHook): void;\n };\n}\n\nexport interface FailedExtensionActivation {\n layer: ExtensionLayer;\n name: string;\n entry_path: string;\n error: string;\n trace?: ExtensionActivationFailureTrace;\n}\n\nexport interface ExtensionActivationFailureTrace {\n method: string;\n registration_index: number;\n command?: string;\n expected_schema: string;\n received?: unknown;\n hint?: string;\n}\n\nexport interface ExtensionActivationResult {\n hooks: ExtensionHookRegistry;\n commands: ExtensionCommandRegistry;\n parsers: ExtensionParserRegistry;\n preflight: ExtensionPreflightRegistry;\n services: ExtensionServiceRegistry;\n renderers: ExtensionRendererRegistry;\n registrations: ExtensionRegistrationRegistry;\n failed: FailedExtensionActivation[];\n warnings: string[];\n hook_counts: {\n before_command: number;\n after_command: number;\n on_write: number;\n on_read: number;\n on_index: number;\n };\n command_override_count: number;\n command_handler_count: number;\n parser_override_count: number;\n preflight_override_count: number;\n service_override_count: number;\n renderer_override_count: number;\n registration_counts: ExtensionRegistrationCounts;\n}\n\nexport interface ExtensionCandidate {\n layer: ExtensionLayer;\n directory: string;\n manifest_path: string;\n entry_path: string;\n manifest: ExtensionManifest;\n}\n\nexport interface ExtensionLayerScanResult {\n diagnostics: ExtensionDiagnostic[];\n warnings: string[];\n candidates: ExtensionCandidate[];\n}\n\nexport interface ScannedExtensionDirectory {\n diagnostic: ExtensionDiagnostic;\n warnings: string[];\n candidate: ExtensionCandidate | null;\n}\n\nexport interface LegacyExtensionCapabilityAliasMapping {\n alias: string;\n target: ExtensionCapability;\n}\n\nexport interface DiscoverExtensionsOptions {\n pmRoot: string;\n settings: PmSettings;\n cwd?: string;\n noExtensions?: boolean;\n}\n\nexport interface ActivatableExtension {\n activate: (api: ExtensionApi) => void | Promise<void>;\n}\n\nexport interface ServiceOverrideResult {\n handled: boolean;\n result: unknown;\n warnings: string[];\n}\n\nexport interface CommandOverrideResult {\n overridden: boolean;\n result: unknown;\n warnings: string[];\n}\n\nexport interface CommandHandlerResult {\n handled: boolean;\n result: unknown;\n warnings: string[];\n}\n\nexport interface ParserOverrideResult {\n overridden: boolean;\n context: CommandHandlerContext;\n warnings: string[];\n}\n\nexport interface PreflightOverrideResult {\n overridden: boolean;\n context: CommandHandlerContext;\n decision: PreflightRuntimeDecision;\n warnings: string[];\n}\n\nexport interface RendererOverrideResult {\n overridden: boolean;\n rendered: string | null;\n warnings: string[];\n}\n\nexport interface UnknownExtensionCapabilityWarningDetails {\n layer: ExtensionLayer;\n name: string;\n capability: string;\n allowed_capabilities: string[];\n capability_contract_version: number;\n suggested_capability?: string;\n suggestion_source?: \"legacy_alias\" | \"nearest_match\";\n legacy_alias_target?: string;\n}\n"]}