@lmzhen/dsh-evolution-commands 0.17.1 → 0.18.0

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.
@@ -1,4 +1,4 @@
1
- import { type ScopedProbeReport } from '@lmzhen/dsh-evolution-core';
1
+ import { type PlatformServiceProbe, type ScopedProbeReport } from '@lmzhen/dsh-evolution-core';
2
2
  /** P2-20 (audit): the TS-side copy of the install-target tails. The script
3
3
  * side (install-layered.mjs, verify-profile-bundles.mjs) imports the list
4
4
  * from packages/scripts/lib-family-packages.mjs; guard-scripts.spec.ts pins
@@ -99,6 +99,10 @@ export interface DoctorReport {
99
99
  * still written, and E3 rows whose owner publishes no user layer here. Empty
100
100
  * when the settings service is absent (nothing to compare). */
101
101
  paramIssues: string[];
102
+ /** O-2 (S3.4/A99): the family probes 26 platform services optionally — the platform has no
103
+ * formalized optional dependency, so an ABSENT one is a silent downgrade and this section is the
104
+ * only place a reader learns about it. Empty (and therefore not rendered) is the healthy answer. */
105
+ capabilityAbsence: readonly PlatformServiceProbe[];
102
106
  services: {
103
107
  review: boolean;
104
108
  curator: boolean;
@@ -28,6 +28,35 @@ export declare function presetProfileTarget(ctx: {
28
28
  * which is what a profile carrying a family row is recognized by when the table itself cannot be
29
29
  * read. */
30
30
  export declare const FAMILY_PRESET_ID_STEM = "evolution";
31
+ /** One base-table row's ability fields — the part `evolution-agent/bases.json` declares and every
32
+ * entry point reads. */
33
+ export interface BaseAbilityRow {
34
+ /** Base name, as `--base` spells it. */
35
+ readonly name: string;
36
+ /** The registration note that makes a base unsupported (it carries no family landing surface). */
37
+ readonly unsupported?: string;
38
+ /** The runtime service the base's platform composition injects. */
39
+ readonly requires?: {
40
+ readonly service?: string;
41
+ };
42
+ }
43
+ /**
44
+ * The ONE host-side answer to "can this base be used here?".
45
+ *
46
+ * Both host entry points ask it: `/evolution preset install` refuses a base through this function,
47
+ * and `/evolution doctor` enumerates the installable bases through it, with the SAME probe — the
48
+ * runtime's own answer (`ctx.get(<service>)`), which is exactly the reason a later mount would
49
+ * refuse. A doctor that infers the answer from bundle names instead (it did until v46 S2.8) can
50
+ * disagree with the write entry it tells the operator to run: a deployment that mounts the web-app
51
+ * bundle while the service's own row is disabled installs nothing, yet reads as installable. The
52
+ * source-checkout installer runs outside the host and cannot read the service store; it asks the
53
+ * target profile's bundle rows instead and says so (`install-layered.mjs`'s
54
+ * `baseUnavailableReason`).
55
+ * @param entry - the table row.
56
+ * @param servicePresent - whether a service name resolves in this deployment.
57
+ * @returns the refusal text, or undefined when the base is usable here.
58
+ */
59
+ export declare function baseRefusalReason(entry: BaseAbilityRow, servicePresent: (name: string) => boolean): string | undefined;
31
60
  /**
32
61
  * Resolve the platform base preset patch one `--base` composes.
33
62
  *
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@lmzhen/dsh-evolution-commands",
3
3
  "description": "Human commands for the evolution family (/evolution pending|curator|maintain|doctor) (community build)",
4
- "version": "0.17.1",
4
+ "version": "0.18.0",
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
@@ -26,13 +26,13 @@
26
26
  ],
27
27
  "license": "MIT",
28
28
  "dependencies": {
29
- "@deepseek-ai/schemastery": "^3.18.1",
30
- "@lmzhen/dsh-evolution-approval": "^0.17.1",
31
- "@lmzhen/dsh-evolution-core": "^0.17.1",
32
- "@lmzhen/dsh-evolution-maintenance": "^0.17.1"
29
+ "@deepseek-ai/schemastery": "^3.18.4",
30
+ "@lmzhen/dsh-evolution-approval": "^0.18.0",
31
+ "@lmzhen/dsh-evolution-core": "^0.18.0",
32
+ "@lmzhen/dsh-evolution-maintenance": "^0.18.0"
33
33
  },
34
34
  "optionalDependencies": {
35
- "@lmzhen/dsh-evolution-agent-preset": "^0.17.1"
35
+ "@lmzhen/dsh-evolution-agent-preset": "^0.18.0"
36
36
  },
37
37
  "peerDependencies": {
38
38
  "@deepseek-ai/cordis": "^4.0.1",