pm-starter 2026.5.31 → 2026.6.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # Changelog
2
2
 
3
+ ## 2026.06.02 - 2026-06-02
4
+
5
+ ### Added
6
+
7
+ - Make pm-starter the canonical full ExtensionApi reference ([pm-starter-oi1i](https://github.com/unbraind/pm-starter/blob/main/.agents/pm/features/pm-starter-oi1i.toon))
8
+
3
9
  ## 2026.05.28 - 2026-05-28
4
10
 
5
11
  ### Added
package/dist/index.d.ts CHANGED
@@ -1,3 +1,26 @@
1
+ export declare const EXIT_CODE: {
2
+ readonly GENERIC_FAILURE: 1;
3
+ readonly USAGE: 2;
4
+ readonly NOT_FOUND: 3;
5
+ };
6
+ export declare class CommandError extends Error {
7
+ exitCode: number;
8
+ constructor(message: string, exitCode?: number);
9
+ }
10
+ /**
11
+ * Read a boolean option honoring both the kebab-case long flag and the
12
+ * camelCase key the runtime may normalize it to (e.g. `--dry-run` -> `dryRun`).
13
+ * Without this, `ctx.options["dry-run"]` can silently be `undefined`.
14
+ */
15
+ export declare function optionEnabled(options: Record<string, unknown>, ...keys: string[]): boolean;
16
+ /** Read a string option, trying multiple key spellings; returns undefined if absent. */
17
+ export declare function optionString(options: Record<string, unknown>, ...keys: string[]): string | undefined;
18
+ /**
19
+ * Safely read all items from the workspace by shelling out to `pm`. Returns an
20
+ * empty array on any failure so demos never throw at activation/read time.
21
+ * This is the SAFE read pattern every demo reuses.
22
+ */
23
+ export declare function readPmItems(pmRoot: string): Array<Record<string, any>>;
1
24
  declare const _default: {
2
25
  name: string;
3
26
  version: string;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":";;;kBAuRgB,GAAG;;AAJnB,wBAmBG"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AA+DA,eAAO,MAAM,SAAS;;;;CAIZ,CAAC;AAEX,qBAAa,YAAa,SAAQ,KAAK;IACrC,QAAQ,EAAE,MAAM,CAAC;gBACL,OAAO,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAkC;CAK1E;AAMD;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAK1F;AAED,wFAAwF;AACxF,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,SAAS,CAMpG;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CActE;;;;kBA0Ye,GAAG;;AAJnB,wBAkBG"}
package/dist/index.js CHANGED
@@ -1,258 +1,492 @@
1
- // pm-starter — Complete scaffold for pm-cli extensions
2
- // Demonstrates all capability types. Copy this file to start a new extension.
1
+ // pm-starter — the CANONICAL reference extension for pm-cli.
3
2
  //
4
- // CAPABILITIES OVERVIEW:
5
- // 1. commands — Add custom CLI commands
6
- // 2. schema — Provide validation schemas
7
- // 3. hooks — React to lifecycle events (before/after create, update, close)
8
- // 4. importers — Programmatic data import
9
- // 5. renderers — Custom output formatting
10
- // 6. search — Custom search providers
11
- // 7. preflight — Pre-flight checks before commands run
12
- // 8. services — Background services and health checks
3
+ // This file is a learning template: it demonstrates EVERY capability of the
4
+ // pm-cli ExtensionApi with a small, SAFE, heavily-commented example of each.
5
+ // Copy the pattern you need into your own extension and delete the rest.
13
6
  //
14
- // To create a new extension from this scaffold:
15
- // 1. Copy this directory
16
- // 2. Update manifest.json name and capabilities
17
- // 3. Delete capabilities you don't need
18
- // 4. Implement your logic
19
- // 5. npm install && npm run build
20
- // 6. pm install ./your-extension
7
+ // Each demonstration is labelled in comments as "DEMO: <capability>" and is
8
+ // deliberately INERT — no destructive behavior and no network access. The demos
9
+ // only read (via `pm ... --json`), print, or return data; they never delete or
10
+ // mutate your workspace on their own.
11
+ //
12
+ // ---------------------------------------------------------------------------
13
+ // CAPABILITY → setup function → manifest capability (see README for the full
14
+ // copy-paste matrix):
15
+ //
16
+ // registerCommand setupCommands "commands"
17
+ // registerRenderer setupRenderers "renderers"
18
+ // hooks.before/after/ setupHooks "hooks"
19
+ // onWrite/onRead/onIndex
20
+ // registerItemFields setupSchema "schema"
21
+ // registerItemTypes setupSchema "schema"
22
+ // registerMigration setupSchema "schema"
23
+ // registerImporter setupImportExport "importers"
24
+ // registerExporter setupImportExport "importers"
25
+ // registerSearchProvider setupSearch "search"
26
+ // registerVectorStoreAdapter setupSearch "search"
27
+ // registerParser setupParser "parser"
28
+ // registerPreflight setupPreflight "preflight"
29
+ // registerService setupServices "services"
30
+ // registerFlags setupFlags "commands"
31
+ //
32
+ // NOTE on naming / collisions: `registerImporter("starter-demo")` auto-creates
33
+ // the command path `pm starter-demo import`, and `registerExporter("starter-demo")`
34
+ // creates `pm starter-demo export`. We therefore namespace our human-facing
35
+ // commands under `pm starter ...` (greet/summary/demo) so they never collide
36
+ // with the importer/exporter command paths under `pm starter-demo ...`.
37
+ // `pm extension doctor` reports 0 collisions as a result.
38
+ //
39
+ // ---------------------------------------------------------------------------
40
+ import { spawnSync } from "node:child_process";
41
+ // Standalone-installed extensions load ONLY their own `dist/` at runtime, so
42
+ // `@unbrained/pm-cli` is not resolvable as a runtime value. We therefore use the
43
+ // zero-runtime-coupling pattern: import `defineExtension` as a TYPE only and
44
+ // provide a trivial identity implementation. The real CLI supplies the live
45
+ // `api` object at activation time.
21
46
  const defineExtension = ((extension) => extension);
22
47
  // ---------------------------------------------------------------------------
23
- // CAPABILITY 1: COMMANDS
48
+ // Error contract (re-implemented locally — DO NOT import from the SDK)
49
+ //
50
+ // pm's extension command runtime only treats a thrown error as a cleanly
51
+ // handled non-zero exit when the error carries a numeric `exitCode` property
52
+ // (see @unbrained/pm-cli runCommandHandler). A plain `Error` makes the runtime
53
+ // fall through to its "unhandled" path, which RE-INVOKES the command handler a
54
+ // second time — doubling side effects and exiting with a generic code instead
55
+ // of a semantic one. We mirror the SDK's EXIT_CODE contract here rather than
56
+ // importing it, because standalone extensions cannot resolve the SDK at runtime.
57
+ // ---------------------------------------------------------------------------
58
+ export const EXIT_CODE = {
59
+ GENERIC_FAILURE: 1,
60
+ USAGE: 2,
61
+ NOT_FOUND: 3,
62
+ };
63
+ export class CommandError extends Error {
64
+ exitCode;
65
+ constructor(message, exitCode = EXIT_CODE.GENERIC_FAILURE) {
66
+ super(message);
67
+ this.name = "CommandError";
68
+ this.exitCode = exitCode;
69
+ }
70
+ }
71
+ // ---------------------------------------------------------------------------
72
+ // Shared helpers
73
+ // ---------------------------------------------------------------------------
74
+ /**
75
+ * Read a boolean option honoring both the kebab-case long flag and the
76
+ * camelCase key the runtime may normalize it to (e.g. `--dry-run` -> `dryRun`).
77
+ * Without this, `ctx.options["dry-run"]` can silently be `undefined`.
78
+ */
79
+ export function optionEnabled(options, ...keys) {
80
+ return keys.some((k) => {
81
+ const v = options[k];
82
+ return v === true || v === "true" || v === "1";
83
+ });
84
+ }
85
+ /** Read a string option, trying multiple key spellings; returns undefined if absent. */
86
+ export function optionString(options, ...keys) {
87
+ for (const k of keys) {
88
+ const v = options[k];
89
+ if (typeof v === "string" && v.trim().length > 0)
90
+ return v.trim();
91
+ }
92
+ return undefined;
93
+ }
94
+ /**
95
+ * Safely read all items from the workspace by shelling out to `pm`. Returns an
96
+ * empty array on any failure so demos never throw at activation/read time.
97
+ * This is the SAFE read pattern every demo reuses.
98
+ */
99
+ export function readPmItems(pmRoot) {
100
+ const result = spawnSync("pm", ["--path", pmRoot, "list-all", "--json", "--include-body"], { encoding: "utf-8" });
101
+ if (result.status !== 0)
102
+ return [];
103
+ try {
104
+ const parsed = JSON.parse(result.stdout);
105
+ if (Array.isArray(parsed))
106
+ return parsed;
107
+ return parsed.items ?? parsed.results ?? [];
108
+ }
109
+ catch {
110
+ return [];
111
+ }
112
+ }
113
+ // ---------------------------------------------------------------------------
114
+ // DEMO: commands (registerCommand)
115
+ //
116
+ // Three commands, all under the `pm starter ...` namespace so they never
117
+ // collide with the importer/exporter command paths (`pm starter-demo ...`).
118
+ // `greet` and `summary` are kept for backward compatibility.
24
119
  // ---------------------------------------------------------------------------
25
120
  function setupCommands(api) {
26
- // Example: a simple greeting command with flags
121
+ // DEMO: registerCommand — a self-contained command with typed flags.
122
+ // Because this command declares a `flags` array, the manifest MUST also list
123
+ // the "schema" capability (the flag schema), in addition to "commands".
27
124
  api.registerCommand({
28
125
  name: "starter greet",
29
126
  description: "A demo greeting command from the starter extension.",
30
- intent: "demonstrate command registration",
127
+ intent: "demonstrate command registration with flags",
31
128
  examples: [
32
129
  "pm starter greet",
33
130
  "pm starter greet --name Developer",
34
- "pm starter greet --name Dev --emoji 🚀",
131
+ "pm starter greet --name Dev --uppercase",
35
132
  ],
36
133
  flags: [
37
- { long: "--name", value_name: "name", description: "Name to greet (default: World)" },
38
- { long: "--emoji", value_name: "emoji", description: "Emoji to include (default: 👋)" },
39
- { long: "--uppercase", description: "Uppercase the output" },
134
+ { long: "--name", value_name: "name", description: "Name to greet (default: World)", type: "string" },
135
+ { long: "--emoji", value_name: "emoji", description: "Emoji to include (default: wave)", type: "string" },
136
+ { long: "--uppercase", description: "Uppercase the output", type: "boolean" },
40
137
  ],
41
138
  async run(ctx) {
42
- const name = ctx.options["name"] || "World";
43
- const emoji = ctx.options["emoji"] || "👋";
44
- const upper = Boolean(ctx.options["uppercase"]);
45
- let msg = `${emoji} Hello, ${name}!`;
139
+ const name = optionString(ctx.options, "name") || "World";
140
+ const emoji = optionString(ctx.options, "emoji") || "👋";
141
+ const upper = optionEnabled(ctx.options, "uppercase");
142
+ let message = `${emoji} Hello, ${name}!`;
46
143
  if (upper)
47
- msg = msg.toUpperCase();
48
- console.error(msg);
49
- return { message: msg };
144
+ message = message.toUpperCase();
145
+ // Print human output to stderr; return structured data for --json hosts.
146
+ console.error(message);
147
+ return { message };
50
148
  },
51
149
  });
52
- // Example: a command that demonstrates pm interaction
150
+ // DEMO: registerCommand — a command that calls back into `pm` (read-only).
53
151
  api.registerCommand({
54
152
  name: "starter summary",
55
- description: "Show a quick workspace summary using pm stats.",
153
+ description: "Show a quick workspace summary using `pm stats`.",
56
154
  intent: "demonstrate calling pm from an extension",
57
- examples: ["pm starter summary"],
155
+ examples: ["pm starter summary", "pm starter summary --verbose"],
58
156
  flags: [
59
- { long: "--verbose", description: "Include detailed breakdown" },
157
+ { long: "--verbose", description: "Include a per-type breakdown", type: "boolean" },
60
158
  ],
61
159
  async run(ctx) {
62
- const { spawnSync } = await import("node:child_process");
63
160
  const result = spawnSync("pm", ["--path", ctx.pm_root, "stats", "--json"], {
64
161
  encoding: "utf-8",
65
162
  });
66
163
  if (result.status !== 0) {
67
- console.error("Failed to get stats");
68
- return { error: "pm stats failed" };
164
+ // Throw a CommandError (carrying an exitCode) so the CLI exits non-zero
165
+ // exactly ONCE rather than re-invoking this handler.
166
+ throw new CommandError("`pm stats` failed", EXIT_CODE.GENERIC_FAILURE);
69
167
  }
168
+ let stats;
70
169
  try {
71
- const stats = JSON.parse(result.stdout);
72
- const total = stats.totals?.items ?? 0;
73
- const byStatus = stats.by_status ?? {};
74
- console.error(`\n Workspace Summary`);
75
- console.error(` ================`);
76
- console.error(` Total items: ${total}`);
77
- for (const [status, count] of Object.entries(byStatus)) {
78
- if (count > 0) {
79
- console.error(` ${status}: ${count}`);
80
- }
81
- }
82
- if (ctx.options["verbose"] && stats.by_type) {
83
- console.error(`\n By type:`);
84
- for (const [type, count] of Object.entries(stats.by_type)) {
85
- if (count > 0) {
86
- console.error(` ${type}: ${count}`);
87
- }
88
- }
89
- }
90
- return stats;
170
+ stats = JSON.parse(result.stdout);
91
171
  }
92
172
  catch {
93
- console.error("Could not parse stats output");
94
- return { error: "parse failed" };
173
+ throw new CommandError("Could not parse `pm stats --json` output.");
174
+ }
175
+ const total = stats.totals?.items ?? 0;
176
+ const byStatus = stats.by_status ?? {};
177
+ console.error(`\n Workspace Summary\n =================`);
178
+ console.error(` Total items: ${total}`);
179
+ for (const [status, count] of Object.entries(byStatus)) {
180
+ if (count > 0)
181
+ console.error(` ${status}: ${count}`);
182
+ }
183
+ if (optionEnabled(ctx.options, "verbose") && stats.by_type) {
184
+ console.error(`\n By type:`);
185
+ for (const [type, count] of Object.entries(stats.by_type)) {
186
+ if (count > 0)
187
+ console.error(` ${type}: ${count}`);
188
+ }
95
189
  }
190
+ return stats;
191
+ },
192
+ });
193
+ // DEMO: registerCommand — a command whose RESULT is reshaped by our renderer
194
+ // override (see setupRenderers). Run `pm starter demo --json` /
195
+ // `pm --toon starter demo` to see the custom rendering kick in.
196
+ api.registerCommand({
197
+ name: "starter demo",
198
+ description: "Emit a small structured result that the starter renderer reshapes.",
199
+ intent: "demonstrate a command result flowing through a custom renderer",
200
+ examples: ["pm starter demo", "pm starter demo --json"],
201
+ async run(ctx) {
202
+ const items = readPmItems(ctx.pm_root);
203
+ // Return a small, predictable shape the renderer override can recognize.
204
+ return {
205
+ starter_demo: true,
206
+ item_count: items.length,
207
+ sample: items.slice(0, 3).map((i) => ({ id: i.id, title: i.title, status: i.status })),
208
+ };
96
209
  },
97
210
  });
98
211
  }
99
212
  // ---------------------------------------------------------------------------
100
- // CAPABILITY 2: SCHEMA
213
+ // DEMO: renderers (registerRenderer)
214
+ //
215
+ // A renderer override receives the command RESULT and returns the final string
216
+ // the CLI prints. Valid formats are ONLY "toon" and "json". We make both
217
+ // pass-through-safe: if we don't recognize the payload, we fall back to the
218
+ // default serialization so we never break unrelated commands.
101
219
  // ---------------------------------------------------------------------------
102
- function setupSchema(api) {
103
- if (typeof api.registerSchema !== "function")
104
- return;
105
- api.registerSchema({
106
- name: "starter-title-required",
107
- description: "Ensures items have a non-empty title",
108
- validate(item) {
109
- const errors = [];
110
- if (!item.title || item.title.trim().length === 0) {
111
- errors.push("Title is required");
112
- }
113
- if (item.title && item.title.length > 200) {
114
- errors.push("Title must be ≤ 200 characters");
115
- }
116
- return { valid: errors.length === 0, errors };
117
- },
220
+ function setupRenderers(api) {
221
+ // DEMO: registerRenderer("json") — reshape ONLY our own `starter demo`
222
+ // payload. A renderer override is registered per-format and is invoked for
223
+ // EVERY command using that format, so for anything that isn't our payload we
224
+ // return a non-string (null): pm then falls through to its native renderer
225
+ // and no other command's output is altered. This is the safe pattern — never
226
+ // globally hijack toon/json output from a shared extension.
227
+ api.registerRenderer("json", (ctx) => {
228
+ const result = ctx.result;
229
+ if (result && typeof result === "object" && result.starter_demo) {
230
+ return JSON.stringify({ rendered_by: "pm-starter", ...result }, null, 2);
231
+ }
232
+ return null; // not ours → native rendering
233
+ });
234
+ // DEMO: registerRenderer("toon") — a compact line view for OUR payload only;
235
+ // null for everything else so native TOON rendering is preserved.
236
+ api.registerRenderer("toon", (ctx) => {
237
+ const result = ctx.result;
238
+ if (result && typeof result === "object" && result.starter_demo) {
239
+ const r = result;
240
+ const lines = [`pm-starter demo — ${r.item_count} item(s)`];
241
+ for (const s of r.sample ?? [])
242
+ lines.push(` ${s.id}\t${s.status}\t${s.title}`);
243
+ return lines.join("\n");
244
+ }
245
+ return null; // not ours → native rendering
118
246
  });
119
247
  }
120
248
  // ---------------------------------------------------------------------------
121
- // CAPABILITY 3: HOOKS
249
+ // DEMO: hooks (all five)
250
+ //
251
+ // Hooks are observe-only here. They print to stderr only when the opt-in
252
+ // env var PM_STARTER_HOOKS is set, so installing the reference extension never
253
+ // adds noise to an unrelated workspace.
122
254
  // ---------------------------------------------------------------------------
123
255
  function setupHooks(api) {
124
- if (typeof api.registerHook !== "function")
125
- return;
126
- // Hook: runs after any item is created
127
- api.registerHook("afterCreate", (ctx) => {
128
- const item = ctx.item;
129
- if (item) {
130
- console.error(`[starter] ✨ Item created: #${item.id} "${item.title}" (${item.type}/${item.status})`);
131
- }
256
+ const enabled = () => Boolean(process.env.PM_STARTER_HOOKS);
257
+ const log = (msg) => { if (enabled())
258
+ console.error(`[pm-starter] ${msg}`); };
259
+ // DEMO: hooks.beforeCommand — runs before any command handler.
260
+ api.hooks.beforeCommand((ctx) => {
261
+ log(`beforeCommand: ${ctx.command} ${(ctx.args ?? []).join(" ")}`.trimEnd());
132
262
  });
133
- // Hook: runs after any item is closed
134
- api.registerHook("afterClose", (ctx) => {
135
- const item = ctx.item;
136
- if (item) {
137
- console.error(`[starter] ✅ Item closed: #${item.id} "${item.title}"`);
138
- }
263
+ // DEMO: hooks.afterCommand — runs after a command, with ok/error/result.
264
+ api.hooks.afterCommand((ctx) => {
265
+ log(`afterCommand: ${ctx.command} -> ${ctx.ok ? "ok" : `error: ${ctx.error ?? "?"}`}`);
266
+ });
267
+ // DEMO: hooks.onWrite — fires when pm writes an item file to disk.
268
+ api.hooks.onWrite((ctx) => {
269
+ log(`onWrite: ${ctx.op} ${ctx.scope} ${ctx.path}`);
139
270
  });
140
- // Hook: runs before an item is updated
141
- api.registerHook("beforeUpdate", (ctx) => {
142
- // Could validate changes, log, or modify the update
143
- // Return false to prevent the update
271
+ // DEMO: hooks.onRead — fires when pm reads an item file.
272
+ api.hooks.onRead((ctx) => {
273
+ log(`onRead: ${ctx?.path ?? "(item)"}`);
274
+ });
275
+ // DEMO: hooks.onIndex — fires when pm (re)indexes items for search.
276
+ api.hooks.onIndex((ctx) => {
277
+ log(`onIndex: ${(ctx && (ctx.count ?? ctx.path)) ?? "(index event)"}`);
144
278
  });
145
279
  }
146
280
  // ---------------------------------------------------------------------------
147
- // CAPABILITY 4: IMPORTERS
281
+ // DEMO: schema (registerItemFields + registerItemTypes + registerMigration)
282
+ //
283
+ // All three are declarative and additive. They teach the workspace about new
284
+ // fields/types and a no-op migration; nothing is mutated until a user opts in
285
+ // by creating items of the new type.
148
286
  // ---------------------------------------------------------------------------
149
- function setupImporters(api) {
150
- if (typeof api.registerImporter !== "function")
151
- return;
152
- api.registerImporter("starter-demo", async (ctx) => {
153
- console.error("[starter] Demo importer running with config:", JSON.stringify(ctx.options));
154
- // Replace with real import logic:
155
- // 1. Read data from ctx.options.file or ctx.options.url
156
- // 2. Parse/transform
157
- // 3. Call pm create for each item
287
+ function setupSchema(api) {
288
+ // DEMO: registerItemFields — declare optional custom fields so the workspace
289
+ // knows about them (and tooling/validation can surface them).
290
+ api.registerItemFields([
291
+ { name: "starter_origin", type: "string", optional: true },
292
+ { name: "starter_score", type: "number", optional: true },
293
+ ]);
294
+ // DEMO: registerItemTypes — declare a custom item type. `folder` keeps its
295
+ // markdown under a dedicated directory; `aliases` give short CLI handles.
296
+ api.registerItemTypes([
297
+ {
298
+ name: "StarterNote",
299
+ folder: "starter-notes",
300
+ aliases: ["snote"],
301
+ required_create_fields: ["title"],
302
+ },
303
+ ]);
304
+ // DEMO: registerMigration — a safe, idempotent, no-op migration. A real
305
+ // migration would transform existing items; this one only records that it
306
+ // ran so authors can see the migration plumbing without risking data.
307
+ api.registerMigration({
308
+ id: "pm-starter-0001-noop",
309
+ description: "DEMO: inert starter migration (no-op; records that it ran).",
310
+ // The runtime calls up() during migration runs. We do nothing destructive.
311
+ up(_ctx) {
312
+ // Intentionally a no-op. Return a benign summary.
313
+ return { migrated: 0, note: "pm-starter demo migration is a no-op" };
314
+ },
158
315
  });
159
316
  }
160
317
  // ---------------------------------------------------------------------------
161
- // CAPABILITY 5: RENDERERS
318
+ // DEMO: importers + exporters (registerImporter / registerExporter)
319
+ //
320
+ // registerImporter("starter-demo") creates `pm starter-demo import`.
321
+ // registerExporter("starter-demo") creates `pm starter-demo export`.
322
+ // Both are safe: the importer only previews (never writes unless explicitly
323
+ // told to with --commit, which we deliberately do NOT implement here to keep
324
+ // the reference inert); the exporter only reads and prints.
162
325
  // ---------------------------------------------------------------------------
163
- function setupRenderers(api) {
164
- if (typeof api.registerRenderer !== "function")
165
- return;
166
- // Override the "json" format to add a compact table view
167
- api.registerRenderer("json", (items) => {
168
- return items
169
- .map((item) => `${item.id}\t${item.type?.padEnd(8)}\t${item.status?.padEnd(12)}\t${item.title}`)
170
- .join("\n");
326
+ function setupImportExport(api) {
327
+ // DEMO: registerImporter — `pm starter-demo import`.
328
+ // Inert by design: it describes what a real importer WOULD do and returns a
329
+ // dry-run-style summary. Swap the body for real parse + `pm create` calls.
330
+ api.registerImporter("starter-demo", async (ctx) => {
331
+ const source = optionString(ctx.options || {}, "file", "url") || "(no source given)";
332
+ console.error(`[pm-starter] DEMO importer: would import from ${source}. ` +
333
+ "This reference importer is inert — implement parse + `pm create` here.");
334
+ return { imported: 0, dryRun: true, source };
171
335
  });
172
- // Override the "toon" format with a markdown table
173
- api.registerRenderer("toon", (items) => {
174
- const header = "| ID | Type | Status | Title |";
175
- const sep = "|---|---|---|---|";
176
- const rows = items.map((item) => `| ${item.id} | ${item.type || ""} | ${item.status || ""} | ${item.title} |`);
177
- return [header, sep, ...rows].join("\n");
336
+ // DEMO: registerExporter — `pm starter-demo export`.
337
+ // Read-only: serializes the current items to a compact JSON payload and
338
+ // prints it (or returns it for --json hosts). Never writes to disk.
339
+ api.registerExporter("starter-demo", async (ctx) => {
340
+ const items = readPmItems(ctx.pm_root);
341
+ const payload = items.map((i) => ({
342
+ id: i.id,
343
+ title: i.title,
344
+ type: i.type,
345
+ status: i.status,
346
+ }));
347
+ console.log(JSON.stringify(payload, null, 2));
348
+ return { exported: payload.length, format: "json" };
178
349
  });
179
350
  }
180
351
  // ---------------------------------------------------------------------------
181
- // CAPABILITY 6: SEARCH
352
+ // DEMO: search (registerSearchProvider + registerVectorStoreAdapter)
182
353
  // ---------------------------------------------------------------------------
183
354
  function setupSearch(api) {
184
- if (typeof api.registerSearchProvider !== "function")
185
- return;
186
- // Simple substring search provider
355
+ // DEMO: registerSearchProvider — a simple, dependency-free substring matcher
356
+ // over title + body. Reads items via `pm` and filters in-process.
187
357
  api.registerSearchProvider({
188
358
  name: "starter-substring",
189
359
  async query(ctx) {
190
- const query = ctx.query ?? "";
191
- const { spawnSync } = await import("node:child_process");
192
- const result = spawnSync("pm", ["--path", ctx.pm_root ?? ".", "list-all", "--json"], {
193
- encoding: "utf-8",
194
- });
195
- if (result.status !== 0)
196
- return { results: [] };
197
- const data = JSON.parse(result.stdout);
198
- const q = query.toLowerCase();
199
- const items = (data.items || []).filter((item) => {
200
- const title = (item.title || "").toLowerCase();
201
- const desc = (item.description || "").toLowerCase();
202
- return title.includes(q) || desc.includes(q);
203
- });
204
- return { results: items, query };
360
+ const q = String(ctx?.query ?? "").toLowerCase();
361
+ const items = readPmItems(ctx?.pm_root ?? ".");
362
+ const results = !q
363
+ ? []
364
+ : items.filter((i) => {
365
+ const hay = `${i.title ?? ""} ${i.body ?? ""} ${i.description ?? ""}`.toLowerCase();
366
+ return hay.includes(q);
367
+ });
368
+ return { results, query: q };
205
369
  },
206
370
  });
371
+ // DEMO: registerVectorStoreAdapter — an in-memory, deterministic adapter so
372
+ // authors can see the vector-store contract without an external service.
373
+ // It produces a tiny hashed pseudo-embedding (NOT a real model) and keeps
374
+ // vectors in a Map for the lifetime of the process.
375
+ const store = new Map();
376
+ const pseudoEmbed = (text, dims = 8) => {
377
+ const vec = new Array(dims).fill(0);
378
+ for (let i = 0; i < text.length; i++)
379
+ vec[i % dims] += text.charCodeAt(i) % 17;
380
+ return vec;
381
+ };
382
+ api.registerVectorStoreAdapter({
383
+ name: "starter-memory",
384
+ async upsert(ctx) {
385
+ const id = String(ctx?.id ?? "");
386
+ const text = String(ctx?.text ?? ctx?.title ?? "");
387
+ if (id)
388
+ store.set(id, pseudoEmbed(text));
389
+ return { upserted: id ? 1 : 0 };
390
+ },
391
+ async query(ctx) {
392
+ // Return nearest by simple dot-product over the in-memory vectors.
393
+ const qVec = pseudoEmbed(String(ctx?.query ?? ""));
394
+ const scored = [...store.entries()].map(([id, v]) => ({
395
+ id,
396
+ score: v.reduce((s, x, i) => s + x * (qVec[i] ?? 0), 0),
397
+ }));
398
+ scored.sort((a, b) => b.score - a.score);
399
+ return { results: scored.slice(0, ctx?.limit ?? 5) };
400
+ },
401
+ });
402
+ }
403
+ // ---------------------------------------------------------------------------
404
+ // DEMO: parser (registerParser)
405
+ //
406
+ // A parser override can pre-normalize args/options for a NATIVE command before
407
+ // its handler runs. We attach to `list` and pass everything through unchanged
408
+ // (a safe identity transform) so the reference never alters real behavior.
409
+ // ---------------------------------------------------------------------------
410
+ function setupParser(api) {
411
+ // DEMO: registerParser — identity pass-through for the native `list` command.
412
+ api.registerParser("list", (ctx) => {
413
+ // A real override might inject a default flag, e.g. force --json. Here we
414
+ // simply return args/options unchanged so behavior is identical.
415
+ return { args: ctx?.args ?? [], options: ctx?.options ?? {} };
416
+ });
207
417
  }
208
418
  // ---------------------------------------------------------------------------
209
- // CAPABILITY 7: PREFLIGHT
419
+ // DEMO: preflight (registerPreflight)
420
+ //
421
+ // A preflight override can adjust the gate decisions the CLI makes before a
422
+ // command runs. We return a conservative pass-through that preserves the
423
+ // runtime's existing decision (or sane defaults), changing nothing.
210
424
  // ---------------------------------------------------------------------------
211
425
  function setupPreflight(api) {
212
- if (typeof api.registerPreflight !== "function")
213
- return;
214
- // Preflight override — can modify preflight decisions before a command runs
215
- api.registerPreflight(async (ctx) => {
216
- console.error(`[starter] Preflight check for workspace: ${ctx.pm_root ?? "unknown"}`);
217
- // Return the current decision unchanged (pass-through)
426
+ // DEMO: registerPreflight — pass-through decision (no behavior change).
427
+ api.registerPreflight((ctx) => {
428
+ const d = ctx?.decision ?? {};
218
429
  return {
219
- enforce_item_format_gate: ctx.decision?.enforce_item_format_gate ?? true,
220
- run_preflight_item_format_sync: ctx.decision?.run_preflight_item_format_sync ?? false,
221
- run_extension_migrations: ctx.decision?.run_extension_migrations ?? true,
222
- enforce_mandatory_migration_gate: ctx.decision?.enforce_mandatory_migration_gate ?? false,
430
+ enforce_item_format_gate: d.enforce_item_format_gate ?? true,
431
+ run_preflight_item_format_sync: d.run_preflight_item_format_sync ?? false,
432
+ run_extension_migrations: d.run_extension_migrations ?? true,
433
+ enforce_mandatory_migration_gate: d.enforce_mandatory_migration_gate ?? false,
223
434
  };
224
435
  });
225
436
  }
226
437
  // ---------------------------------------------------------------------------
227
- // CAPABILITY 8: SERVICES
438
+ // DEMO: services (registerService)
439
+ //
440
+ // A service override lets an extension supply/augment a named internal service.
441
+ // We override "output_format" with an inert pass-through that returns the
442
+ // existing/default format, demonstrating the hook point without changing output.
228
443
  // ---------------------------------------------------------------------------
229
444
  function setupServices(api) {
230
- if (typeof api.registerService !== "function")
231
- return;
232
- // Override the output_format service to add custom formatting
233
- api.registerService("output_format", async (ctx) => {
234
- console.error("[starter] output_format service override active");
235
- return { format: "toon" };
445
+ // DEMO: registerService — a TRUE pass-through for the "output_format"
446
+ // service. A service override replaces a core service for the whole CLI, so
447
+ // the only safe demonstration is to return the incoming payload UNCHANGED
448
+ // (returning a fabricated value here would corrupt every command's output).
449
+ api.registerService("output_format", (ctx) => {
450
+ return ctx?.payload;
236
451
  });
237
452
  }
238
453
  // ---------------------------------------------------------------------------
454
+ // DEMO: flags (registerFlags)
455
+ //
456
+ // registerFlags adds extra flags to an EXISTING native command (here, `list`).
457
+ // The flag is observe-only: native `list` ignores unknown options, and our
458
+ // parser/hook demos don't act on it — it exists purely to show the wiring.
459
+ // ---------------------------------------------------------------------------
460
+ function setupFlags(api) {
461
+ // DEMO: registerFlags — augment the native `list` command with a demo flag.
462
+ api.registerFlags("list", [
463
+ {
464
+ long: "--starter-tag",
465
+ value_name: "tag",
466
+ description: "DEMO flag added by pm-starter (inert; illustrates registerFlags).",
467
+ type: "string",
468
+ },
469
+ ]);
470
+ }
471
+ // ---------------------------------------------------------------------------
239
472
  // EXTENSION ENTRY POINT
240
473
  // ---------------------------------------------------------------------------
241
474
  export default defineExtension({
242
475
  name: "pm-starter",
243
- version: "2026.5.31",
476
+ version: "2026.6.3",
244
477
  activate(api) {
245
- console.error("[pm-starter] Activating...");
246
- setupCommands(api);
247
- setupSchema(api);
248
- setupHooks(api);
249
- setupImporters(api);
250
- setupRenderers(api);
251
- setupSearch(api);
252
- setupPreflight(api);
253
- setupServices(api);
254
- console.error("[pm-starter] All 8 capabilities registered.");
255
- console.error("[pm-starter] Commands: pm starter greet, pm starter summary");
478
+ // Register every capability group. Each helper is defensive enough to be
479
+ // safely deleted when you fork this scaffold for a real extension.
480
+ setupCommands(api); // registerCommand
481
+ setupRenderers(api); // registerRenderer (toon|json)
482
+ setupHooks(api); // hooks.before/after/onWrite/onRead/onIndex
483
+ setupSchema(api); // registerItemFields/registerItemTypes/registerMigration
484
+ setupImportExport(api); // registerImporter/registerExporter
485
+ setupSearch(api); // registerSearchProvider/registerVectorStoreAdapter
486
+ setupParser(api); // registerParser
487
+ setupPreflight(api); // registerPreflight
488
+ setupServices(api); // registerService
489
+ setupFlags(api); // registerFlags
256
490
  },
257
491
  });
258
492
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"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"}
package/manifest.json CHANGED
@@ -1,18 +1,19 @@
1
1
  {
2
2
  "name": "pm-starter",
3
- "version": "2026.5.31",
3
+ "version": "2026.6.3",
4
4
  "description": "Complete scaffold showing all 8 capability types: commands, schema, hooks, importers, renderers, preflight, search, services. Use as a starting template for new extensions.",
5
5
  "author": "@unbraind",
6
6
  "entry": "./dist/index.js",
7
7
  "priority": 99,
8
8
  "capabilities": [
9
9
  "commands",
10
- "schema",
10
+ "renderers",
11
11
  "hooks",
12
+ "schema",
12
13
  "importers",
13
- "renderers",
14
- "preflight",
15
14
  "search",
15
+ "parser",
16
+ "preflight",
16
17
  "services"
17
18
  ],
18
19
  "pm": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pm-starter",
3
- "version": "2026.5.31",
3
+ "version": "2026.6.3",
4
4
  "description": "Complete starter/scaffold extension for pm-cli showing all capability types",
5
5
  "repository": {
6
6
  "type": "git",
@@ -34,12 +34,12 @@
34
34
  "release:check": "npm run typecheck && npm run build && npm run audit:prod && npm run pack:dry-run && npm run changelog:check"
35
35
  },
36
36
  "peerDependencies": {
37
- "@unbrained/pm-cli": ">=2026.5.29"
37
+ "@unbrained/pm-cli": ">=2026.5.31"
38
38
  },
39
39
  "devDependencies": {
40
40
  "@types/node": "^25.9.1",
41
- "@unbrained/pm-cli": "^2026.5.29",
42
- "pm-changelog": "^2026.5.29-2",
41
+ "@unbrained/pm-cli": "^2026.5.31",
42
+ "pm-changelog": "^2026.6.2",
43
43
  "typescript": "^6.0.3"
44
44
  },
45
45
  "keywords": [