@passioncode-ai/passioncode 0.2.54 → 0.2.56

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,26 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.2.56 - 2026-11-03
4
+
5
+ ### Fixed
6
+
7
+ - `setup` in a terminal that asked, changed nothing and left install offers untaken, such as Fabric
8
+ offered without Docker (an offer that defaults to no), says "Nothing was changed: Fabric was
9
+ offered and not installed. The checks below still stand." instead of "Everything this command can
10
+ set up is in place" (PC-92). It does not say "declined": pressing Enter on an offer that defaults
11
+ to no is not declining (PC-89, as its test `a run nobody agreed to saves no train` holds). A run that answered no to every offer, at least one of them
12
+ defaulting to yes, still says "You declined every offer" (PC-91).
13
+
14
+ ## 0.2.55 - 2026-11-03
15
+
16
+ ### Fixed
17
+
18
+ - `help` lists every flag each command accepts and the command aliases (PC-98): `--offline` for
19
+ `setup` and `doctor`, `-y` for `setup`, `--quiet` for `update`, `--json` for `restore`,
20
+ `uninstall` and `config`, and that `onboard` is another name for `setup` and `install` for
21
+ `update`. It also says what `--offline` and `--quiet` do. A test fails when a flag in the parser's
22
+ lists is missing from its command's line.
23
+
3
24
  ## 0.2.54 - 2026-11-02
4
25
 
5
26
  ### Changed
@@ -19,19 +19,20 @@ function cachedNpmStatus({ latest, checkedAt, installed }) {
19
19
 
20
20
  const HELP = `passioncode sets up and checks PassionCode.ai on this machine: the apps, their MCP servers, the skills
21
21
 
22
- npx @passioncode-ai/passioncode@latest setup [--yes] [--with ids] [--without ids] [--train name|none] [--no-apps] [--no-open] [--dry-run] [--json]
22
+ npx @passioncode-ai/passioncode@latest setup [--yes|-y] [--with ids] [--without ids] [--train name|none] [--no-apps] [--no-open] [--dry-run] [--offline] [--json]
23
23
  a new machine: install and configure everything; an existing one: check, repair, check again
24
- npx @passioncode-ai/passioncode@latest doctor [--fix] [--json] check everything (read-only); --fix repairs as setup does
25
- npx @passioncode-ai/passioncode@latest update [--dry-run] [--json] install or update the skill set and the apps' MCP registrations
26
- npx @passioncode-ai/passioncode@latest status [--json] what is installed where
27
- npx @passioncode-ai/passioncode@latest restore put back what the last update moved aside
28
- npx @passioncode-ai/passioncode@latest config set update.auto on|off background updates at session start
29
- npx @passioncode-ai/passioncode@latest uninstall remove the set (quarantined items stay restorable)
24
+ npx @passioncode-ai/passioncode@latest doctor [--fix] [--offline] [--json] check everything (read-only); --fix repairs as setup does
25
+ npx @passioncode-ai/passioncode@latest update [--dry-run] [--quiet] [--json] install or update the skill set and the apps' MCP registrations
26
+ npx @passioncode-ai/passioncode@latest status [--json] what is installed where
27
+ npx @passioncode-ai/passioncode@latest restore [--json] put back what the last update moved aside
28
+ npx @passioncode-ai/passioncode@latest config set update.auto on|off [--json] background updates at session start
29
+ npx @passioncode-ai/passioncode@latest uninstall [--json] remove the set (quarantined items stay restorable)
30
30
 
31
- App ids: switchboard, dashboards, observatory, inbox, fabric. Exit codes: 0 nothing failed,
32
- 1 a check or a step failed, 2 bad arguments. Claude Code gets plugins from the local
33
- "passioncode" marketplace; other agents get the same skills through ~/.agents/skills.
34
- Restart your agent after a change.`;
31
+ onboard is another name for setup, install for update. --offline skips the check for newer app
32
+ releases; --quiet prints nothing when an update succeeds. App ids: switchboard, dashboards,
33
+ observatory, inbox, fabric. Exit codes: 0 nothing failed, 1 a check or a step failed, 2 bad
34
+ arguments. Claude Code gets plugins from the local "passioncode" marketplace; other agents get
35
+ the same skills through ~/.agents/skills. Restart your agent after a change.`;
35
36
 
36
37
  const IDS = ['switchboard', 'dashboards', 'observatory', 'inbox', 'fabric'];
37
38
 
package/lib/setup.js CHANGED
@@ -174,6 +174,15 @@ async function setup({
174
174
  // Said so in the report: an empty run after "no" to every offer is not a machine with nothing to set
175
175
  // up. Forgetting a train (`--train none`) is still a change, so that run is not "declined".
176
176
  if (declinedAll && !result.actions.length) result.declined = true;
177
+ // PC-92: a run that asked, changed nothing and was not "declined" left install offers untaken
178
+ // (each defaulting to no, like Fabric without Docker): it names them rather than calling the
179
+ // machine set up. Pressing Enter on a default-no offer is not declining (PC-89, the test beginning
180
+ // `PC-89: a run nobody agreed to`), so it says
181
+ // "not installed", not "declined".
182
+ if (asked && !result.declined && !result.actions.length && !items.some((i) => i.selected)) {
183
+ const untaken = items.filter((i) => i.kind === 'install' && !i.selected).map((i) => catalog.byId(i.product).name);
184
+ if (untaken.length) result.notTaken = untaken;
185
+ }
177
186
 
178
187
  const act = (kind, detail, product = null) => {
179
188
  const a = { kind, detail, product, outcome: 'done' };
@@ -275,6 +284,7 @@ function finish(result, home, checks) {
275
284
  }
276
285
 
277
286
  const DECLINED = 'You declined every offer; nothing was changed. The checks below still stand.';
287
+ const notTaken = (names) => `Nothing was changed: ${names.join(' and ')} ${names.length > 1 ? 'were' : 'was'} offered and not installed. The checks below still stand.`;
278
288
 
279
289
  function render(result, { repairOnly = false } = {}) {
280
290
  const lines = [];
@@ -288,7 +298,7 @@ function render(result, { repairOnly = false } = {}) {
288
298
  if (result.trainNotSaved) lines.push('', `The release train (${result.trainNotSaved}) was not saved${result.declined ? '.' : ': run it with --yes, or answer in a terminal.'}`);
289
299
  if (todo.length) lines.push('', 'Run it with --yes to apply, or in a terminal to answer one question per app.');
290
300
  } else if (!result.actions.length) {
291
- lines.push('', result.declined ? DECLINED : 'Everything this command can set up is in place; nothing was changed.');
301
+ lines.push('', result.declined ? DECLINED : result.notTaken ? notTaken(result.notTaken) : 'Everything this command can set up is in place; nothing was changed.');
292
302
  } else {
293
303
  lines.push('', 'Done:');
294
304
  for (const x of result.actions) lines.push(` ${x.outcome === 'failed' ? 'FAILED' : 'done '} ${x.detail}${x.error ? `\n ${x.error}` : ''}`);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@passioncode-ai/passioncode",
3
- "version": "0.2.54",
3
+ "version": "0.2.56",
4
4
  "description": "Set up PassionCode.ai on a computer with one command: the apps from their verified releases, their MCP servers for every coding agent and the PassionCode.ai skills. Check and repair it with the same command or `doctor`.",
5
5
  "bin": {
6
6
  "passioncode": "bin/passioncode.js"
@@ -35,7 +35,7 @@
35
35
  "name": "passioncode",
36
36
  "displayName": "PassionCode.ai",
37
37
  "source": "./plugins/passioncode",
38
- "version": "0.2.54",
38
+ "version": "0.2.56",
39
39
  "description": "Set up and check PassionCode.ai on a computer with one command (setting-up-passioncode), the organisation's working rules for every contributor's agent (working-in-passioncode), and a once-a-day check that keeps the PassionCode.ai set current.",
40
40
  "author": {
41
41
  "name": "PassionCode.ai",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "family": "passioncode",
3
- "version": "0.2.54",
3
+ "version": "0.2.56",
4
4
  "release": true,
5
5
  "members": [
6
6
  {
@@ -62,9 +62,9 @@
62
62
  "name": "passioncode",
63
63
  "displayName": "PassionCode.ai",
64
64
  "repo": "passioncode-ai/passioncode",
65
- "ref": "v0.2.54",
65
+ "ref": "v0.2.56",
66
66
  "commit": null,
67
- "version": "0.2.54",
67
+ "version": "0.2.56",
68
68
  "via": "this repository",
69
69
  "skills": [
70
70
  "setting-up-passioncode",
@@ -72,7 +72,7 @@
72
72
  ],
73
73
  "legacyPluginIds": [],
74
74
  "legacyMarketplaces": [],
75
- "contentHash": "sha256:379eb53c61c9f908239f21f901fd7112c352454725f262dd731f1b7425fb8785",
75
+ "contentHash": "sha256:74cc82e781ba9b34e48e223ad2cb87c0e2d512d486cf1a204fbf08a2a95571cc",
76
76
  "description": "Set up and check PassionCode.ai on a computer with one command (setting-up-passioncode), the organisation's working rules for every contributor's agent (working-in-passioncode), and a once-a-day check that keeps the PassionCode.ai set current.",
77
77
  "author": {
78
78
  "name": "PassionCode.ai",
@@ -2,7 +2,7 @@
2
2
  "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json",
3
3
  "name": "passioncode",
4
4
  "displayName": "PassionCode.ai",
5
- "version": "0.2.54",
5
+ "version": "0.2.56",
6
6
  "description": "Set up and check PassionCode.ai on a computer with one command (setting-up-passioncode), the organisation's working rules for every contributor's agent (working-in-passioncode), and a once-a-day check at session start that keeps the PassionCode.ai skill set current.",
7
7
  "author": {
8
8
  "name": "PassionCode.ai",