@unbrained/pm-web 2026.9.1 → 2026.9.6
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 +6 -0
- package/dist/index.js +1 -1
- package/dist/services/fleet-snapshot.d.ts +115 -0
- package/dist/services/fleet-snapshot.js +99 -0
- package/dist/services/fleet-snapshot.js.map +1 -0
- package/dist/services/package-catalog.js +19 -0
- package/dist/services/package-catalog.js.map +1 -1
- package/manifest.json +1 -1
- package/package.json +2 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,11 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 2026.9.5 - 2026-09-05
|
|
4
|
+
|
|
5
|
+
### Fixed
|
|
6
|
+
|
|
7
|
+
- The catalog completeness gate cannot fail in CI, and a package it should have caught has been missing since it was created ([pm-web-z1vm](https://github.com/unbraind/pm-web/blob/main/.agents/pm/issues/pm-web-z1vm.toon))
|
|
8
|
+
|
|
3
9
|
## 2026.9.1 - 2026-09-01
|
|
4
10
|
|
|
5
11
|
### Other
|
package/dist/index.js
CHANGED
|
@@ -262,7 +262,7 @@ function processAlive(pid) {
|
|
|
262
262
|
}
|
|
263
263
|
export default defineExtension({
|
|
264
264
|
name: "pm-web",
|
|
265
|
-
version: "2026.9.
|
|
265
|
+
version: "2026.9.6",
|
|
266
266
|
activate(api) {
|
|
267
267
|
// -----------------------------------------------------------------------
|
|
268
268
|
// Command: pm web [--port <port>] [--detach]
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The fleet's own account of which pm extensions exist, and how the catalog
|
|
3
|
+
* completeness gate reads it in an environment without the sibling packages.
|
|
4
|
+
*
|
|
5
|
+
* pm-web must offer every pm package that exists, so the catalog needs a gate
|
|
6
|
+
* asserting the converse of "every catalog entry is real": that every real
|
|
7
|
+
* extension is catalogued. The authoritative answer lives in the sibling
|
|
8
|
+
* package directories, and a standalone CI checkout of pm-web has none of them.
|
|
9
|
+
* A gate that reads them directly therefore skips itself precisely where it
|
|
10
|
+
* guards the merge.
|
|
11
|
+
*
|
|
12
|
+
* The resolution is a committed snapshot, generated from the live fleet and
|
|
13
|
+
* read by the gate. The snapshot is an input, never the source of truth: a
|
|
14
|
+
* companion assertion re-derives it from the siblings wherever they resolve, so
|
|
15
|
+
* a snapshot that stopped matching the fleet fails loudly instead of quietly
|
|
16
|
+
* narrowing what CI checks.
|
|
17
|
+
*/
|
|
18
|
+
/** Repository-relative location of the committed fleet snapshot. */
|
|
19
|
+
export declare const FLEET_SNAPSHOT_PATH = "test/fleet-extensions.snapshot.json";
|
|
20
|
+
/**
|
|
21
|
+
* A directory the derivation could not read as it expected.
|
|
22
|
+
*
|
|
23
|
+
* Returned rather than swallowed. A silent skip is the failure mode this whole
|
|
24
|
+
* mechanism exists to remove: an extension omitted because its manifest failed
|
|
25
|
+
* to parse looks exactly like an extension that is not there, and because the
|
|
26
|
+
* generator and the freshness assertion run the *same* derivation, both would
|
|
27
|
+
* agree on the same wrong answer and neither would report it.
|
|
28
|
+
*/
|
|
29
|
+
export interface FleetProblem {
|
|
30
|
+
/** Directory the problem was found in. */
|
|
31
|
+
name: string;
|
|
32
|
+
/** What could not be read, in terms a reader can act on. */
|
|
33
|
+
reason: string;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* What the fleet directories alone can say about one extension.
|
|
37
|
+
*
|
|
38
|
+
* Split from {@link FleetExtension} deliberately: every field here is derivable
|
|
39
|
+
* offline from files on disk, which is what the freshness assertion can
|
|
40
|
+
* re-derive and compare. Registry state cannot be, so it lives only on the
|
|
41
|
+
* snapshot type.
|
|
42
|
+
*/
|
|
43
|
+
export interface LocalFleetExtension {
|
|
44
|
+
/** Directory and package name, e.g. `pm-ado`. */
|
|
45
|
+
name: string;
|
|
46
|
+
/** The manifest's description, which a product extension's catalog entry mirrors exactly. */
|
|
47
|
+
description: string;
|
|
48
|
+
/**
|
|
49
|
+
* The package.json description.
|
|
50
|
+
*
|
|
51
|
+
* An authoring template's catalog entry mirrors this rather than the manifest
|
|
52
|
+
* description: the manifest carries a longer, capability-enumerating blurb
|
|
53
|
+
* that is too verbose for a one-line catalog card, while package.json holds
|
|
54
|
+
* the concise summary. Both are captured so the gate can apply the same rule
|
|
55
|
+
* the live-fleet assertion does without knowing anything about categories.
|
|
56
|
+
*/
|
|
57
|
+
packageDescription: string;
|
|
58
|
+
/** Capability names the manifest declares, sorted for a stable comparison. */
|
|
59
|
+
capabilities: string[];
|
|
60
|
+
/**
|
|
61
|
+
* Whether the package declares `publishConfig`.
|
|
62
|
+
*
|
|
63
|
+
* A local, offline signal of *intent* to publish. It is deliberately not the
|
|
64
|
+
* thing the catalog's `availability` is checked against, because it answers
|
|
65
|
+
* the wrong question: a package can declare `publishConfig` and be absent
|
|
66
|
+
* from npm, which is exactly how this fleet came to have a catalog entry
|
|
67
|
+
* promising an install for a package the registry answers 404 for.
|
|
68
|
+
*/
|
|
69
|
+
publishable: boolean;
|
|
70
|
+
}
|
|
71
|
+
/** One fleet extension as the committed snapshot records it. */
|
|
72
|
+
export interface FleetExtension extends LocalFleetExtension {
|
|
73
|
+
/**
|
|
74
|
+
* Whether the npm registry actually serves this package.
|
|
75
|
+
*
|
|
76
|
+
* Recorded at generation time, when the network is available and regenerating
|
|
77
|
+
* the snapshot is a deliberate act, so the offline gate can assert against a
|
|
78
|
+
* fact rather than a proxy. Generation refuses to write when the registry
|
|
79
|
+
* could not be reached, so this is never a guess: an unreachable registry
|
|
80
|
+
* would otherwise relabel every package as unpublished the moment a runner
|
|
81
|
+
* lost the network.
|
|
82
|
+
*/
|
|
83
|
+
npmPublished: boolean;
|
|
84
|
+
}
|
|
85
|
+
/** The filesystem calls {@link readFleetExtensions} needs, injected so the
|
|
86
|
+
* derivation can be exercised against a synthetic tree. */
|
|
87
|
+
export interface FleetFs {
|
|
88
|
+
existsSync: (p: string) => boolean;
|
|
89
|
+
readdirSync: (p: string, options: {
|
|
90
|
+
withFileTypes: true;
|
|
91
|
+
}) => {
|
|
92
|
+
name: string;
|
|
93
|
+
isDirectory: () => boolean;
|
|
94
|
+
}[];
|
|
95
|
+
readFileSync: (p: string, encoding: "utf8") => string;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Derive every pm extension present under `fleetRoot`.
|
|
99
|
+
*
|
|
100
|
+
* A directory is a pm extension exactly when it ships a `manifest.json`
|
|
101
|
+
* declaring a non-empty `capabilities` array. That rule is the definition
|
|
102
|
+
* rather than a heuristic: it is what makes a package installable into pm at
|
|
103
|
+
* all, so deriving membership from it cannot drift from reality the way a
|
|
104
|
+
* second hardcoded list would.
|
|
105
|
+
*
|
|
106
|
+
* @param fleetRoot - Directory holding the sibling package directories.
|
|
107
|
+
* @param fs - Filesystem accessors to read the tree with.
|
|
108
|
+
* @returns Every extension found, sorted by name; empty when the fleet root
|
|
109
|
+
* holds none, which callers must treat as "not resolvable here"
|
|
110
|
+
* rather than as "the fleet is empty".
|
|
111
|
+
*/
|
|
112
|
+
export declare function readFleetExtensions(fleetRoot: string, fs: FleetFs): {
|
|
113
|
+
extensions: LocalFleetExtension[];
|
|
114
|
+
problems: FleetProblem[];
|
|
115
|
+
};
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The fleet's own account of which pm extensions exist, and how the catalog
|
|
3
|
+
* completeness gate reads it in an environment without the sibling packages.
|
|
4
|
+
*
|
|
5
|
+
* pm-web must offer every pm package that exists, so the catalog needs a gate
|
|
6
|
+
* asserting the converse of "every catalog entry is real": that every real
|
|
7
|
+
* extension is catalogued. The authoritative answer lives in the sibling
|
|
8
|
+
* package directories, and a standalone CI checkout of pm-web has none of them.
|
|
9
|
+
* A gate that reads them directly therefore skips itself precisely where it
|
|
10
|
+
* guards the merge.
|
|
11
|
+
*
|
|
12
|
+
* The resolution is a committed snapshot, generated from the live fleet and
|
|
13
|
+
* read by the gate. The snapshot is an input, never the source of truth: a
|
|
14
|
+
* companion assertion re-derives it from the siblings wherever they resolve, so
|
|
15
|
+
* a snapshot that stopped matching the fleet fails loudly instead of quietly
|
|
16
|
+
* narrowing what CI checks.
|
|
17
|
+
*/
|
|
18
|
+
/** Repository-relative location of the committed fleet snapshot. */
|
|
19
|
+
export const FLEET_SNAPSHOT_PATH = "test/fleet-extensions.snapshot.json";
|
|
20
|
+
/**
|
|
21
|
+
* Directories under the fleet root that are not extensions of the CLI.
|
|
22
|
+
*
|
|
23
|
+
* `pm-web` is the host and cannot install itself; `pm-cli` is the CLI rather
|
|
24
|
+
* than an extension of it.
|
|
25
|
+
*/
|
|
26
|
+
const CATALOG_HOSTS = new Set(["pm-web", "pm-cli"]);
|
|
27
|
+
/**
|
|
28
|
+
* Derive every pm extension present under `fleetRoot`.
|
|
29
|
+
*
|
|
30
|
+
* A directory is a pm extension exactly when it ships a `manifest.json`
|
|
31
|
+
* declaring a non-empty `capabilities` array. That rule is the definition
|
|
32
|
+
* rather than a heuristic: it is what makes a package installable into pm at
|
|
33
|
+
* all, so deriving membership from it cannot drift from reality the way a
|
|
34
|
+
* second hardcoded list would.
|
|
35
|
+
*
|
|
36
|
+
* @param fleetRoot - Directory holding the sibling package directories.
|
|
37
|
+
* @param fs - Filesystem accessors to read the tree with.
|
|
38
|
+
* @returns Every extension found, sorted by name; empty when the fleet root
|
|
39
|
+
* holds none, which callers must treat as "not resolvable here"
|
|
40
|
+
* rather than as "the fleet is empty".
|
|
41
|
+
*/
|
|
42
|
+
export function readFleetExtensions(fleetRoot, fs) {
|
|
43
|
+
if (!fs.existsSync(fleetRoot))
|
|
44
|
+
return { extensions: [], problems: [] };
|
|
45
|
+
const found = [];
|
|
46
|
+
const problems = [];
|
|
47
|
+
for (const entry of fs.readdirSync(fleetRoot, { withFileTypes: true })) {
|
|
48
|
+
if (!entry.isDirectory() || !entry.name.startsWith("pm-") || CATALOG_HOSTS.has(entry.name))
|
|
49
|
+
continue;
|
|
50
|
+
const manifestPath = `${fleetRoot}/${entry.name}/manifest.json`;
|
|
51
|
+
if (!fs.existsSync(manifestPath))
|
|
52
|
+
continue;
|
|
53
|
+
let manifest;
|
|
54
|
+
try {
|
|
55
|
+
manifest = JSON.parse(fs.readFileSync(manifestPath, "utf8"));
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
// A manifest that exists and does not parse is a defect in that package,
|
|
59
|
+
// not evidence that it is not an extension. Reporting it is the whole
|
|
60
|
+
// point: skipping silently is indistinguishable from absence.
|
|
61
|
+
problems.push({ name: entry.name, reason: "manifest.json exists but is not valid JSON" });
|
|
62
|
+
continue;
|
|
63
|
+
}
|
|
64
|
+
const capabilities = manifest.capabilities;
|
|
65
|
+
if (!Array.isArray(capabilities)) {
|
|
66
|
+
problems.push({ name: entry.name, reason: "manifest.json declares no capabilities array" });
|
|
67
|
+
continue;
|
|
68
|
+
}
|
|
69
|
+
if (capabilities.length === 0)
|
|
70
|
+
continue;
|
|
71
|
+
let publishable = false;
|
|
72
|
+
let packageDescription = "";
|
|
73
|
+
const packageJsonPath = `${fleetRoot}/${entry.name}/package.json`;
|
|
74
|
+
if (fs.existsSync(packageJsonPath)) {
|
|
75
|
+
try {
|
|
76
|
+
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, "utf8"));
|
|
77
|
+
publishable = packageJson.publishConfig !== undefined;
|
|
78
|
+
packageDescription =
|
|
79
|
+
typeof packageJson.description === "string" ? packageJson.description : "";
|
|
80
|
+
}
|
|
81
|
+
catch {
|
|
82
|
+
publishable = false;
|
|
83
|
+
problems.push({ name: entry.name, reason: "package.json exists but is not valid JSON" });
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
found.push({
|
|
87
|
+
name: entry.name,
|
|
88
|
+
description: typeof manifest.description === "string" ? manifest.description : "",
|
|
89
|
+
packageDescription,
|
|
90
|
+
capabilities: [...capabilities].map(String).sort(),
|
|
91
|
+
publishable,
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
return {
|
|
95
|
+
extensions: found.sort((a, b) => a.name.localeCompare(b.name)),
|
|
96
|
+
problems: problems.sort((a, b) => a.name.localeCompare(b.name)),
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
//# sourceMappingURL=fleet-snapshot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fleet-snapshot.js","sourceRoot":"","sources":["../../src/services/fleet-snapshot.ts"],"names":[],"mappings":"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"}
|
|
@@ -47,6 +47,25 @@ export const PACKAGE_CATALOG = [
|
|
|
47
47
|
category: "extension",
|
|
48
48
|
requiresService: { name: "Neo4j", optional: true },
|
|
49
49
|
},
|
|
50
|
+
{
|
|
51
|
+
name: "pm-ado",
|
|
52
|
+
npmSpec: "npm:pm-ado",
|
|
53
|
+
title: "Azure DevOps",
|
|
54
|
+
description: "Azure DevOps work-item sync for pm-cli. Every remote write carries a System.Rev assertion in its JSON Patch document, so a concurrent edit is rejected atomically instead of silently overwritten - the compare-and-swap that lets many agents sync one project at once. Maps work item revisions onto pm item history, typed work item relations onto pm parent and dependency kinds, and batches reads through the work item batch endpoint.",
|
|
55
|
+
capabilities: ["commands", "schema", "importers", "hooks", "preflight"],
|
|
56
|
+
category: "extension",
|
|
57
|
+
// Release-gated behind vars.PM_RELEASE_APPROVED and absent from npm, so no
|
|
58
|
+
// install spec resolves. Listed rather than hidden: a user reading the fleet
|
|
59
|
+
// on GitHub can plainly see this package, and omitting it would make the
|
|
60
|
+
// catalogue look complete while the UI never mentioned it.
|
|
61
|
+
availability: "unreleased",
|
|
62
|
+
requiresCredentials: [
|
|
63
|
+
{
|
|
64
|
+
label: "Azure DevOps credentials (organization URL, project, and a personal access token)",
|
|
65
|
+
envVars: ["ADO_ORG_URL", "ADO_PROJECT", "ADO_TOKEN"],
|
|
66
|
+
},
|
|
67
|
+
],
|
|
68
|
+
},
|
|
50
69
|
{
|
|
51
70
|
name: "pm-beads",
|
|
52
71
|
npmSpec: "npm:pm-beads",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"package-catalog.js","sourceRoot":"","sources":["../../src/services/package-catalog.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,8EAA8E;AAC9E,kEAAkE;AAClE,EAAE;AACF,2EAA2E;AAC3E,uEAAuE;AACvE,4EAA4E;AAC5E,0EAA0E;AAC1E,2EAA2E;AAC3E,8EAA8E;AAC9E,oEAAoE;AACpE,EAAE;AACF,4EAA4E;AAC5E,sEAAsE;AACtE,gEAAgE;AAChE,yEAAyE;AACzE,wEAAwE;AACxE,6EAA6E;AAC7E,mEAAmE;AACnE,8EAA8E;AAC9E,8DAA8D;AAC9D,EAAE;AACF,iEAAiE;AACjE,0EAA0E;AAC1E,6EAA6E;AAC7E,8EAA8E;AAC9E,6DAA6D;AAC7D,gFAAgF;AAChF,0EAA0E;AAC1E,8EAA8E;AAC9E,UAAU;AAkHV;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,eAAe,GAAmC;IAC7D;QACE,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,cAAc;QACvB,KAAK,EAAE,OAAO;QACd,WAAW,EACT,iGAAiG;QACnG,YAAY,EAAE,CAAC,UAAU,EAAE,WAAW,EAAE,UAAU,CAAC;QACnD,QAAQ,EAAE,WAAW;QACrB,eAAe,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE;KACnD;IACD;QACE,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,cAAc;QACvB,KAAK,EAAE,OAAO;QACd,WAAW,EACT,oKAAoK;QACtK,YAAY,EAAE,CAAC,UAAU,EAAE,QAAQ,EAAE,WAAW,CAAC;QACjD,QAAQ,EAAE,WAAW;KACtB;IACD;QACE,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,cAAc;QACvB,KAAK,EAAE,OAAO;QACd,WAAW,EACT,mEAAmE;QACrE,YAAY,EAAE,CAAC,UAAU,EAAE,WAAW,EAAE,QAAQ,CAAC;QACjD,QAAQ,EAAE,WAAW;KACtB;IACD;QACE,IAAI,EAAE,cAAc;QACpB,OAAO,EAAE,kBAAkB;QAC3B,KAAK,EAAE,WAAW;QAClB,WAAW,EAAE,uDAAuD;QACpE,YAAY,EAAE,CAAC,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,CAAC;QAC9D,QAAQ,EAAE,WAAW;KACtB;IACD;QACE,IAAI,EAAE,YAAY;QAClB,OAAO,EAAE,gBAAgB;QACzB,KAAK,EAAE,SAAS;QAChB,WAAW,EACT,wFAAwF;QAC1F,YAAY,EAAE,CAAC,UAAU,EAAE,WAAW,EAAE,QAAQ,CAAC;QACjD,QAAQ,EAAE,WAAW;KACtB;IACD;QACE,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,YAAY;QACrB,KAAK,EAAE,KAAK;QACZ,WAAW,EAAE,sCAAsC;QACnD,YAAY,EAAE,CAAC,UAAU,EAAE,WAAW,EAAE,QAAQ,CAAC;QACjD,QAAQ,EAAE,WAAW;KACtB;IACD;QACE,IAAI,EAAE,gBAAgB;QACtB,OAAO,EAAE,oBAAoB;QAC7B,KAAK,EAAE,aAAa;QACpB,WAAW,EACT,+DAA+D;QACjE,YAAY,EAAE,CAAC,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,CAAC;QAC9D,QAAQ,EAAE,WAAW;KACtB;IACD;QACE,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,eAAe;QACxB,KAAK,EAAE,QAAQ;QACf,WAAW,EACT,2VAA2V;QAC7V,YAAY,EAAE,CAAC,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,QAAQ,CAAC;QACjF,QAAQ,EAAE,WAAW;QACrB,mBAAmB,EAAE;YACnB;gBACE,KAAK,EAAE,gEAAgE;gBACvE,OAAO,EAAE,CAAC,cAAc,EAAE,UAAU,CAAC;gBACrC,QAAQ,EAAE,IAAI;aACf;SACF;KACF;IACD;QACE,IAAI,EAAE,SAAS;QACf,OAAO,EAAE,aAAa;QACtB,KAAK,EAAE,MAAM;QACb,WAAW,EAAE,4BAA4B;QACzC,YAAY,EAAE,CAAC,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,CAAC;QACvE,QAAQ,EAAE,WAAW;QACrB,mBAAmB,EAAE;YACnB;gBACE,KAAK,EAAE,iEAAiE;gBACxE,OAAO,EAAE,CAAC,eAAe,EAAE,YAAY,EAAE,gBAAgB,CAAC;aAC3D;SACF;KACF;IACD;QACE,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,eAAe;QACxB,KAAK,EAAE,QAAQ;QACf,WAAW,EAAE,kCAAkC;QAC/C,YAAY,EAAE,CAAC,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,CAAC;QAC9D,QAAQ,EAAE,WAAW;QACrB,mBAAmB,EAAE;YACnB;gBACE,KAAK,EAAE,sEAAsE;gBAC7E,OAAO,EAAE,CAAC,gBAAgB,CAAC;aAC5B;SACF;KACF;IACD;QACE,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,YAAY;QACrB,KAAK,EAAE,KAAK;QACZ,WAAW,EAAE,wCAAwC;QACrD,YAAY,EAAE,CAAC,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,CAAC;QACvE,QAAQ,EAAE,WAAW;KACtB;IACD;QACE,IAAI,EAAE,YAAY;QAClB,OAAO,EAAE,gBAAgB;QACzB,KAAK,EAAE,SAAS;QAChB,WAAW,EACT,sJAAsJ;QACxJ,YAAY,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC;QACpC,QAAQ,EAAE,WAAW;KACtB;IACD;QACE,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,cAAc;QACvB,KAAK,EAAE,OAAO;QACd,WAAW,EAAE,kDAAkD;QAC/D,YAAY,EAAE,CAAC,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,CAAC;QAC1D,QAAQ,EAAE,WAAW;QACrB,mBAAmB,EAAE;YACnB;gBACE,KAAK,EAAE,2CAA2C;gBAClD,OAAO,EAAE,CAAC,kBAAkB,CAAC;aAC9B;SACF;KACF;IACD;QACE,IAAI,EAAE,kBAAkB;QACxB,OAAO,EAAE,sBAAsB;QAC/B,KAAK,EAAE,eAAe;QACtB,WAAW,EAAE,4CAA4C;QACzD,YAAY,EAAE,CAAC,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,UAAU,CAAC;QAC1E,QAAQ,EAAE,WAAW;QACrB,mBAAmB,EAAE;YACnB;gBACE,KAAK,EAAE,yCAAyC;gBAChD,OAAO,EAAE,CAAC,kBAAkB,CAAC;aAC9B;SACF;KACF;IACD;QACE,IAAI,EAAE,UAAU;QAChB,OAAO,EAAE,cAAc;QACvB,KAAK,EAAE,OAAO;QACd,WAAW,EACT,gIAAgI;QAClI,YAAY,EAAE,CAAC,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,CAAC;QAC9D,QAAQ,EAAE,WAAW;KACtB;IACD;QACE,IAAI,EAAE,YAAY;QAClB,OAAO,EAAE,gBAAgB;QACzB,KAAK,EAAE,SAAS;QAChB,WAAW,EACT,6EAA6E;QAC/E,YAAY,EAAE;YACZ,UAAU;YACV,WAAW;YACX,OAAO;YACP,QAAQ;YACR,WAAW;YACX,QAAQ;YACR,QAAQ;YACR,WAAW;YACX,UAAU;SACX;QACD,QAAQ,EAAE,UAAU;KACrB;IACD;QACE,IAAI,EAAE,eAAe;QACrB,OAAO,EAAE,mBAAmB;QAC5B,KAAK,EAAE,oBAAoB;QAC3B,WAAW,EACT,yEAAyE;QAC3E,YAAY,EAAE;YACZ,UAAU;YACV,WAAW;YACX,OAAO;YACP,QAAQ;YACR,WAAW;YACX,QAAQ;YACR,QAAQ;YACR,WAAW;YACX,UAAU;SACX;QACD,QAAQ,EAAE,UAAU;KACrB;IACD;QACE,IAAI,EAAE,QAAQ;QACd,OAAO,EAAE,YAAY;QACrB,KAAK,EAAE,KAAK;QACZ,WAAW,EACT,mRAAmR;QACrR,YAAY,EAAE,CAAC,UAAU,EAAE,QAAQ,CAAC;QACpC,QAAQ,EAAE,WAAW;QACrB,YAAY,EAAE,YAAY;KAC3B;IACD;QACE,IAAI,EAAE,OAAO;QACb,OAAO,EAAE,WAAW;QACpB,KAAK,EAAE,IAAI;QACX,WAAW,EACT,qdAAqd;QACvd,YAAY,EAAE,CAAC,UAAU,EAAE,OAAO,EAAE,QAAQ,CAAC;QAC7C,QAAQ,EAAE,WAAW;QACrB,YAAY,EAAE,YAAY;KAC3B;CACF,CAAC;AAEF,kEAAkE;AAClE,MAAM,eAAe,GAA6C,IAAI,GAAG,CACvE,eAAe,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAU,CAAC,CAC7D,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,OAAO,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AACnC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,MAAM,KAAK,GAAG,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACxC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,YAAY,KAAK,YAAY;QAAE,OAAO,IAAI,CAAC;IAC/D,OAAO,KAAK,CAAC,OAAO,CAAC;AACvB,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,YAAY;IAC1B,OAAO,eAAe,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AACpD,CAAC"}
|
|
1
|
+
{"version":3,"file":"package-catalog.js","sourceRoot":"","sources":["../../src/services/package-catalog.ts"],"names":[],"mappings":"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"}
|
package/manifest.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pm-web",
|
|
3
|
-
"version": "2026.9.
|
|
3
|
+
"version": "2026.9.6",
|
|
4
4
|
"description": "Full web UI for pm-cli — browse, create, update, search and manage pm projects in the browser. Self-hosted via Docker or Node.js.",
|
|
5
5
|
"author": "@unbraind",
|
|
6
6
|
"entry": "./dist/index.js",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@unbrained/pm-web",
|
|
3
|
-
"version": "2026.9.
|
|
3
|
+
"version": "2026.9.6",
|
|
4
4
|
"description": "Full web UI for pm-cli — browse, create, update, search and manage pm projects in the browser. Self-hosted via Docker or Node.js.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"files": [
|
|
@@ -25,6 +25,7 @@
|
|
|
25
25
|
"docstring": "node scripts/docstring-gate.ts",
|
|
26
26
|
"audit:prod": "node --input-type=module -e \"import { spawnSync } from 'node:child_process'; import { devNull } from 'node:os'; const env = { ...process.env, npm_config_userconfig: devNull, NPM_CONFIG_USERCONFIG: devNull }; for (const key of Object.keys(env)) if (key.toLowerCase() === 'npm_config_allow_scripts') delete env[key]; const win = process.platform === 'win32'; const r = spawnSync(win ? 'npm.cmd' : 'npm', ['audit', '--omit=dev', '--ignore-scripts'], { stdio: 'inherit', env, shell: win }); process.exit(r.status ?? 1);\"",
|
|
27
27
|
"accept:packed": "node scripts/accept-packed.ts",
|
|
28
|
+
"fleet:snapshot": "node scripts/generate-fleet-snapshot.ts",
|
|
28
29
|
"pack:dry-run": "npm pack --dry-run",
|
|
29
30
|
"changelog": "pm-changelog --pm-root .agents/pm --pm-arg=--output-budget --pm-arg=unbounded --pm-arg=--output-limit --pm-arg=unbounded --mode prepend --output CHANGELOG.md --release-version-from-package --date-from-version --since-previous-tag --until-release-tag --item-url-base https://github.com/unbraind/pm-web/blob/main/.agents/pm --respect-item-release --pm-bin ./node_modules/.bin/pm",
|
|
30
31
|
"changelog:full": "pm-changelog --pm-root .agents/pm --pm-arg=--output-budget --pm-arg=unbounded --pm-arg=--output-limit --pm-arg=unbounded --mode replace --output CHANGELOG.md --all-release-tags --release-version-from-package --date-from-version --item-url-base https://github.com/unbraind/pm-web/blob/main/.agents/pm --respect-item-release --pm-bin ./node_modules/.bin/pm",
|