@a5c-ai/babysitter-omp 5.1.1-staging.fee05906043b → 6.0.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.
- package/bin/install-shared.cjs +1 -1
- package/commands/blueprints.md +2 -2
- package/commands/plugins.md +8 -8
- package/hooks/babysitter-proxied-before-provider-request.js +27 -0
- package/hooks/babysitter-proxied-before-provider-request.sh +3 -0
- package/hooks/babysitter-proxied-prompt.js +27 -0
- package/hooks/babysitter-proxied-prompt.sh +3 -0
- package/hooks/babysitter-proxied-session-end.js +27 -0
- package/hooks/babysitter-proxied-session-end.sh +3 -0
- package/hooks/babysitter-proxied-session-start.js +27 -0
- package/hooks/babysitter-proxied-session-start.sh +11 -0
- package/hooks/babysitter-proxied-stop.js +27 -0
- package/hooks/babysitter-proxied-stop.sh +3 -0
- package/hooks/babysitter-proxied-tool-call.js +27 -0
- package/hooks/babysitter-proxied-tool-call.sh +3 -0
- package/hooks/babysitter-proxied-tool-result.js +27 -0
- package/hooks/babysitter-proxied-tool-result.sh +3 -0
- package/package.json +3 -2
- package/skills/blueprints/SKILL.md +2 -2
- package/skills/plugins/SKILL.md +8 -8
- package/versions.json +2 -2
package/bin/install-shared.cjs
CHANGED
|
@@ -104,7 +104,7 @@ function ensureMarketplaceEntry(marketplacePath, pluginRoot) {
|
|
|
104
104
|
name: PLUGIN_NAME,
|
|
105
105
|
source: relSource,
|
|
106
106
|
description: "Orchestrate complex, multi-step workflows with event-sourced state management, hook-based extensibility, and human-in-the-loop approval",
|
|
107
|
-
version: "
|
|
107
|
+
version: "6.0.0",
|
|
108
108
|
author: { name: "a5c.ai" },
|
|
109
109
|
};
|
|
110
110
|
if (idx >= 0) marketplace.plugins[idx] = entry;
|
package/commands/blueprints.md
CHANGED
|
@@ -31,12 +31,12 @@ babysitter blueprints:update-marketplace --marketplace-name <name> [--marketplac
|
|
|
31
31
|
### List blueprints in a marketplace
|
|
32
32
|
|
|
33
33
|
```bash
|
|
34
|
-
babysitter blueprints:list-
|
|
34
|
+
babysitter blueprints:list-blueprints --marketplace-name <name> --global|--project [--json]
|
|
35
35
|
```
|
|
36
36
|
|
|
37
37
|
## Blueprint Lifecycle
|
|
38
38
|
|
|
39
|
-
For `blueprint:install`, `blueprint:update`, `blueprint:configure`, and `blueprint:list-
|
|
39
|
+
For `blueprint:install`, `blueprint:update`, `blueprint:configure`, and `blueprint:list-blueprints`, the `--marketplace-name` flag is auto-detected when only one marketplace is cloned for the selected scope.
|
|
40
40
|
|
|
41
41
|
```bash
|
|
42
42
|
babysitter blueprints:install --plugin-name <name> [--marketplace-name <mp>] --global|--project [--json]
|
package/commands/plugins.md
CHANGED
|
@@ -5,16 +5,16 @@ argument-hint: Blueprint action and options.
|
|
|
5
5
|
|
|
6
6
|
This command is a deprecated alias for `/babysitter:blueprints`.
|
|
7
7
|
|
|
8
|
-
For Babysitter marketplace installables, use blueprints terminology and the `babysitter
|
|
8
|
+
For Babysitter marketplace installables, use blueprints terminology and the `babysitter blueprints:*` CLI command family:
|
|
9
9
|
|
|
10
10
|
```bash
|
|
11
|
-
babysitter
|
|
12
|
-
babysitter
|
|
13
|
-
babysitter
|
|
14
|
-
babysitter
|
|
15
|
-
babysitter
|
|
16
|
-
babysitter
|
|
17
|
-
babysitter
|
|
11
|
+
babysitter blueprints:list-installed --global|--project [--json]
|
|
12
|
+
babysitter blueprints:add-marketplace --marketplace-url <url> [--marketplace-path <relative-path>] --global|--project [--json]
|
|
13
|
+
babysitter blueprints:list-blueprints --marketplace-name <name> --global|--project [--json]
|
|
14
|
+
babysitter blueprints:install --plugin-name <name> [--marketplace-name <mp>] --global|--project [--json]
|
|
15
|
+
babysitter blueprints:update --plugin-name <name> [--marketplace-name <mp>] --global|--project [--json]
|
|
16
|
+
babysitter blueprints:configure --plugin-name <name> [--marketplace-name <mp>] --global|--project [--json]
|
|
17
|
+
babysitter blueprints:uninstall --plugin-name <name> [--marketplace-name <mp>] --global|--project [--json]
|
|
18
18
|
```
|
|
19
19
|
|
|
20
20
|
The `--plugin-name` flag remains for CLI compatibility with existing marketplace manifests. Describe the installable as a blueprint in user-facing text.
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
var execSync = require("child_process").execSync;
|
|
4
|
+
var path = require("path");
|
|
5
|
+
var readFileSync = require("fs").readFileSync;
|
|
6
|
+
|
|
7
|
+
var PLUGIN_ROOT = process.env.OMP_PLUGIN_ROOT || process.env.PLUGIN_ROOT || path.resolve(__dirname, "..");
|
|
8
|
+
var stdin = "";
|
|
9
|
+
try { stdin = readFileSync(0, "utf8"); } catch (e) { process.stderr.write("[extensions-adapter] stdin read failed: " + (e instanceof Error ? e.message : String(e)) + "\n"); }
|
|
10
|
+
try {
|
|
11
|
+
var result = execSync("bash " + JSON.stringify(path.join(PLUGIN_ROOT, "hooks/before-provider-request.sh")), {
|
|
12
|
+
input: stdin,
|
|
13
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
14
|
+
timeout: 30000,
|
|
15
|
+
env: Object.assign({}, process.env, {
|
|
16
|
+
HOOK_TYPE: process.env.HOOK_TYPE || "",
|
|
17
|
+
ADAPTER_NAME: process.env.ADAPTER_NAME || "omp",
|
|
18
|
+
PLUGIN_ROOT: PLUGIN_ROOT,
|
|
19
|
+
CLAUDE_PLUGIN_ROOT: PLUGIN_ROOT
|
|
20
|
+
})
|
|
21
|
+
});
|
|
22
|
+
process.stdout.write(result);
|
|
23
|
+
} catch (e) {
|
|
24
|
+
process.stderr.write("[extensions-adapter] hook execution failed: " + (e instanceof Error ? e.message : String(e)) + "\n");
|
|
25
|
+
process.stdout.write(JSON.stringify({ error: e instanceof Error ? e.message : String(e) }) + "\n");
|
|
26
|
+
process.exit(1);
|
|
27
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
var execSync = require("child_process").execSync;
|
|
4
|
+
var path = require("path");
|
|
5
|
+
var readFileSync = require("fs").readFileSync;
|
|
6
|
+
|
|
7
|
+
var PLUGIN_ROOT = process.env.OMP_PLUGIN_ROOT || process.env.PLUGIN_ROOT || path.resolve(__dirname, "..");
|
|
8
|
+
var stdin = "";
|
|
9
|
+
try { stdin = readFileSync(0, "utf8"); } catch (e) { process.stderr.write("[extensions-adapter] stdin read failed: " + (e instanceof Error ? e.message : String(e)) + "\n"); }
|
|
10
|
+
try {
|
|
11
|
+
var result = execSync("bash " + JSON.stringify(path.join(PLUGIN_ROOT, "hooks/user-prompt-submit.sh")), {
|
|
12
|
+
input: stdin,
|
|
13
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
14
|
+
timeout: 30000,
|
|
15
|
+
env: Object.assign({}, process.env, {
|
|
16
|
+
HOOK_TYPE: process.env.HOOK_TYPE || "",
|
|
17
|
+
ADAPTER_NAME: process.env.ADAPTER_NAME || "omp",
|
|
18
|
+
PLUGIN_ROOT: PLUGIN_ROOT,
|
|
19
|
+
CLAUDE_PLUGIN_ROOT: PLUGIN_ROOT
|
|
20
|
+
})
|
|
21
|
+
});
|
|
22
|
+
process.stdout.write(result);
|
|
23
|
+
} catch (e) {
|
|
24
|
+
process.stderr.write("[extensions-adapter] hook execution failed: " + (e instanceof Error ? e.message : String(e)) + "\n");
|
|
25
|
+
process.stdout.write(JSON.stringify({ error: e instanceof Error ? e.message : String(e) }) + "\n");
|
|
26
|
+
process.exit(1);
|
|
27
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
var execSync = require("child_process").execSync;
|
|
4
|
+
var path = require("path");
|
|
5
|
+
var readFileSync = require("fs").readFileSync;
|
|
6
|
+
|
|
7
|
+
var PLUGIN_ROOT = process.env.OMP_PLUGIN_ROOT || process.env.PLUGIN_ROOT || path.resolve(__dirname, "..");
|
|
8
|
+
var stdin = "";
|
|
9
|
+
try { stdin = readFileSync(0, "utf8"); } catch (e) { process.stderr.write("[extensions-adapter] stdin read failed: " + (e instanceof Error ? e.message : String(e)) + "\n"); }
|
|
10
|
+
try {
|
|
11
|
+
var result = execSync("bash " + JSON.stringify(path.join(PLUGIN_ROOT, "hooks/session-end.sh")), {
|
|
12
|
+
input: stdin,
|
|
13
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
14
|
+
timeout: 30000,
|
|
15
|
+
env: Object.assign({}, process.env, {
|
|
16
|
+
HOOK_TYPE: process.env.HOOK_TYPE || "",
|
|
17
|
+
ADAPTER_NAME: process.env.ADAPTER_NAME || "omp",
|
|
18
|
+
PLUGIN_ROOT: PLUGIN_ROOT,
|
|
19
|
+
CLAUDE_PLUGIN_ROOT: PLUGIN_ROOT
|
|
20
|
+
})
|
|
21
|
+
});
|
|
22
|
+
process.stdout.write(result);
|
|
23
|
+
} catch (e) {
|
|
24
|
+
process.stderr.write("[extensions-adapter] hook execution failed: " + (e instanceof Error ? e.message : String(e)) + "\n");
|
|
25
|
+
process.stdout.write(JSON.stringify({ error: e instanceof Error ? e.message : String(e) }) + "\n");
|
|
26
|
+
process.exit(1);
|
|
27
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
var execSync = require("child_process").execSync;
|
|
4
|
+
var path = require("path");
|
|
5
|
+
var readFileSync = require("fs").readFileSync;
|
|
6
|
+
|
|
7
|
+
var PLUGIN_ROOT = process.env.OMP_PLUGIN_ROOT || process.env.PLUGIN_ROOT || path.resolve(__dirname, "..");
|
|
8
|
+
var stdin = "";
|
|
9
|
+
try { stdin = readFileSync(0, "utf8"); } catch (e) { process.stderr.write("[extensions-adapter] stdin read failed: " + (e instanceof Error ? e.message : String(e)) + "\n"); }
|
|
10
|
+
try {
|
|
11
|
+
var result = execSync("bash " + JSON.stringify(path.join(PLUGIN_ROOT, "hooks/session-start.sh")), {
|
|
12
|
+
input: stdin,
|
|
13
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
14
|
+
timeout: 30000,
|
|
15
|
+
env: Object.assign({}, process.env, {
|
|
16
|
+
HOOK_TYPE: process.env.HOOK_TYPE || "",
|
|
17
|
+
ADAPTER_NAME: process.env.ADAPTER_NAME || "omp",
|
|
18
|
+
PLUGIN_ROOT: PLUGIN_ROOT,
|
|
19
|
+
CLAUDE_PLUGIN_ROOT: PLUGIN_ROOT
|
|
20
|
+
})
|
|
21
|
+
});
|
|
22
|
+
process.stdout.write(result);
|
|
23
|
+
} catch (e) {
|
|
24
|
+
process.stderr.write("[extensions-adapter] hook execution failed: " + (e instanceof Error ? e.message : String(e)) + "\n");
|
|
25
|
+
process.stdout.write(JSON.stringify({ error: e instanceof Error ? e.message : String(e) }) + "\n");
|
|
26
|
+
process.exit(1);
|
|
27
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Session Start — installs SDK if needed, then runs hook handler.
|
|
3
|
+
set -euo pipefail
|
|
4
|
+
PLUGIN_ROOT="${PLUGIN_ROOT:-${CLAUDE_PLUGIN_ROOT:-$(cd "$(dirname "$0")/.." && pwd)}}"
|
|
5
|
+
SDK_VERSION=$(node -e "try{console.log(JSON.parse(require('fs').readFileSync('${PLUGIN_ROOT}/versions.json','utf8')).sdkVersion||'latest')}catch{console.log('latest')}" 2>/dev/null || echo "latest")
|
|
6
|
+
if ! command -v babysitter &>/dev/null; then
|
|
7
|
+
npm i -g "@a5c-ai/babysitter-sdk@${SDK_VERSION}" --loglevel=error 2>/dev/null || \
|
|
8
|
+
npm i -g "@a5c-ai/babysitter-sdk@${SDK_VERSION}" --prefix "$HOME/.local" --loglevel=error 2>/dev/null || true
|
|
9
|
+
[ -d "$HOME/.local/bin" ] && export PATH="$HOME/.local/bin:$PATH"
|
|
10
|
+
fi
|
|
11
|
+
babysitter hook:run --harness unified --hook-type session-start --json
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
var execSync = require("child_process").execSync;
|
|
4
|
+
var path = require("path");
|
|
5
|
+
var readFileSync = require("fs").readFileSync;
|
|
6
|
+
|
|
7
|
+
var PLUGIN_ROOT = process.env.OMP_PLUGIN_ROOT || process.env.PLUGIN_ROOT || path.resolve(__dirname, "..");
|
|
8
|
+
var stdin = "";
|
|
9
|
+
try { stdin = readFileSync(0, "utf8"); } catch (e) { process.stderr.write("[extensions-adapter] stdin read failed: " + (e instanceof Error ? e.message : String(e)) + "\n"); }
|
|
10
|
+
try {
|
|
11
|
+
var result = execSync("bash " + JSON.stringify(path.join(PLUGIN_ROOT, "hooks/stop.sh")), {
|
|
12
|
+
input: stdin,
|
|
13
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
14
|
+
timeout: 30000,
|
|
15
|
+
env: Object.assign({}, process.env, {
|
|
16
|
+
HOOK_TYPE: process.env.HOOK_TYPE || "",
|
|
17
|
+
ADAPTER_NAME: process.env.ADAPTER_NAME || "omp",
|
|
18
|
+
PLUGIN_ROOT: PLUGIN_ROOT,
|
|
19
|
+
CLAUDE_PLUGIN_ROOT: PLUGIN_ROOT
|
|
20
|
+
})
|
|
21
|
+
});
|
|
22
|
+
process.stdout.write(result);
|
|
23
|
+
} catch (e) {
|
|
24
|
+
process.stderr.write("[extensions-adapter] hook execution failed: " + (e instanceof Error ? e.message : String(e)) + "\n");
|
|
25
|
+
process.stdout.write(JSON.stringify({ error: e instanceof Error ? e.message : String(e) }) + "\n");
|
|
26
|
+
process.exit(1);
|
|
27
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
var execSync = require("child_process").execSync;
|
|
4
|
+
var path = require("path");
|
|
5
|
+
var readFileSync = require("fs").readFileSync;
|
|
6
|
+
|
|
7
|
+
var PLUGIN_ROOT = process.env.OMP_PLUGIN_ROOT || process.env.PLUGIN_ROOT || path.resolve(__dirname, "..");
|
|
8
|
+
var stdin = "";
|
|
9
|
+
try { stdin = readFileSync(0, "utf8"); } catch (e) { process.stderr.write("[extensions-adapter] stdin read failed: " + (e instanceof Error ? e.message : String(e)) + "\n"); }
|
|
10
|
+
try {
|
|
11
|
+
var result = execSync("bash " + JSON.stringify(path.join(PLUGIN_ROOT, "hooks/pre-tool-use.sh")), {
|
|
12
|
+
input: stdin,
|
|
13
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
14
|
+
timeout: 30000,
|
|
15
|
+
env: Object.assign({}, process.env, {
|
|
16
|
+
HOOK_TYPE: process.env.HOOK_TYPE || "",
|
|
17
|
+
ADAPTER_NAME: process.env.ADAPTER_NAME || "omp",
|
|
18
|
+
PLUGIN_ROOT: PLUGIN_ROOT,
|
|
19
|
+
CLAUDE_PLUGIN_ROOT: PLUGIN_ROOT
|
|
20
|
+
})
|
|
21
|
+
});
|
|
22
|
+
process.stdout.write(result);
|
|
23
|
+
} catch (e) {
|
|
24
|
+
process.stderr.write("[extensions-adapter] hook execution failed: " + (e instanceof Error ? e.message : String(e)) + "\n");
|
|
25
|
+
process.stdout.write(JSON.stringify({ error: e instanceof Error ? e.message : String(e) }) + "\n");
|
|
26
|
+
process.exit(1);
|
|
27
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
"use strict";
|
|
3
|
+
var execSync = require("child_process").execSync;
|
|
4
|
+
var path = require("path");
|
|
5
|
+
var readFileSync = require("fs").readFileSync;
|
|
6
|
+
|
|
7
|
+
var PLUGIN_ROOT = process.env.OMP_PLUGIN_ROOT || process.env.PLUGIN_ROOT || path.resolve(__dirname, "..");
|
|
8
|
+
var stdin = "";
|
|
9
|
+
try { stdin = readFileSync(0, "utf8"); } catch (e) { process.stderr.write("[extensions-adapter] stdin read failed: " + (e instanceof Error ? e.message : String(e)) + "\n"); }
|
|
10
|
+
try {
|
|
11
|
+
var result = execSync("bash " + JSON.stringify(path.join(PLUGIN_ROOT, "hooks/post-tool-use.sh")), {
|
|
12
|
+
input: stdin,
|
|
13
|
+
stdio: ["pipe", "pipe", "pipe"],
|
|
14
|
+
timeout: 30000,
|
|
15
|
+
env: Object.assign({}, process.env, {
|
|
16
|
+
HOOK_TYPE: process.env.HOOK_TYPE || "",
|
|
17
|
+
ADAPTER_NAME: process.env.ADAPTER_NAME || "omp",
|
|
18
|
+
PLUGIN_ROOT: PLUGIN_ROOT,
|
|
19
|
+
CLAUDE_PLUGIN_ROOT: PLUGIN_ROOT
|
|
20
|
+
})
|
|
21
|
+
});
|
|
22
|
+
process.stdout.write(result);
|
|
23
|
+
} catch (e) {
|
|
24
|
+
process.stderr.write("[extensions-adapter] hook execution failed: " + (e instanceof Error ? e.message : String(e)) + "\n");
|
|
25
|
+
process.stdout.write(JSON.stringify({ error: e instanceof Error ? e.message : String(e) }) + "\n");
|
|
26
|
+
process.exit(1);
|
|
27
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@a5c-ai/babysitter-omp",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "6.0.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Orchestrate complex, multi-step workflows with event-sourced state management, hook-based extensibility, and human-in-the-loop approval — oh-my-pi",
|
|
6
6
|
"keywords": [
|
|
@@ -37,7 +37,8 @@
|
|
|
37
37
|
"extensions/",
|
|
38
38
|
"skills/",
|
|
39
39
|
"commands/",
|
|
40
|
-
"scripts/"
|
|
40
|
+
"scripts/",
|
|
41
|
+
"hooks/"
|
|
41
42
|
],
|
|
42
43
|
"author": "a5c.ai",
|
|
43
44
|
"license": "MIT",
|
|
@@ -33,12 +33,12 @@ babysitter blueprints:update-marketplace --marketplace-name <name> [--marketplac
|
|
|
33
33
|
### List blueprints in a marketplace
|
|
34
34
|
|
|
35
35
|
```bash
|
|
36
|
-
babysitter blueprints:list-
|
|
36
|
+
babysitter blueprints:list-blueprints --marketplace-name <name> --global|--project [--json]
|
|
37
37
|
```
|
|
38
38
|
|
|
39
39
|
## Blueprint Lifecycle
|
|
40
40
|
|
|
41
|
-
For `blueprint:install`, `blueprint:update`, `blueprint:configure`, and `blueprint:list-
|
|
41
|
+
For `blueprint:install`, `blueprint:update`, `blueprint:configure`, and `blueprint:list-blueprints`, the `--marketplace-name` flag is auto-detected when only one marketplace is cloned for the selected scope.
|
|
42
42
|
|
|
43
43
|
```bash
|
|
44
44
|
babysitter blueprints:install --plugin-name <name> [--marketplace-name <mp>] --global|--project [--json]
|
package/skills/plugins/SKILL.md
CHANGED
|
@@ -7,16 +7,16 @@ description: deprecated alias for the Babysitter blueprints command. Use /babysi
|
|
|
7
7
|
|
|
8
8
|
This command is a deprecated alias for `/babysitter:blueprints`.
|
|
9
9
|
|
|
10
|
-
For Babysitter marketplace installables, use blueprints terminology and the `babysitter
|
|
10
|
+
For Babysitter marketplace installables, use blueprints terminology and the `babysitter blueprints:*` CLI command family:
|
|
11
11
|
|
|
12
12
|
```bash
|
|
13
|
-
babysitter
|
|
14
|
-
babysitter
|
|
15
|
-
babysitter
|
|
16
|
-
babysitter
|
|
17
|
-
babysitter
|
|
18
|
-
babysitter
|
|
19
|
-
babysitter
|
|
13
|
+
babysitter blueprints:list-installed --global|--project [--json]
|
|
14
|
+
babysitter blueprints:add-marketplace --marketplace-url <url> [--marketplace-path <relative-path>] --global|--project [--json]
|
|
15
|
+
babysitter blueprints:list-blueprints --marketplace-name <name> --global|--project [--json]
|
|
16
|
+
babysitter blueprints:install --plugin-name <name> [--marketplace-name <mp>] --global|--project [--json]
|
|
17
|
+
babysitter blueprints:update --plugin-name <name> [--marketplace-name <mp>] --global|--project [--json]
|
|
18
|
+
babysitter blueprints:configure --plugin-name <name> [--marketplace-name <mp>] --global|--project [--json]
|
|
19
|
+
babysitter blueprints:uninstall --plugin-name <name> [--marketplace-name <mp>] --global|--project [--json]
|
|
20
20
|
```
|
|
21
21
|
|
|
22
22
|
The `--plugin-name` flag remains for CLI compatibility with existing marketplace manifests. Describe the installable as a blueprint in user-facing text.
|
package/versions.json
CHANGED