@polardbx/pxbaas 0.1.0-beta.8 → 0.1.0-beta.9

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/README.md CHANGED
@@ -46,10 +46,11 @@ developing, deploying, verifying and sharing an app — instance binding,
46
46
  capability checks, scoped approvals, stage-by-stage failure recovery, and
47
47
  network/whitelist handling — without needing credentials or network access.
48
48
  Then install the bundled skills (`pxbaas skill install --host
49
- <qoder|claude|cursor|qwen|hermes>`, or `--dir <path>` for other agent hosts)
50
- and follow `pxbaas-cli` / `pxbaas-app-spec`. `pxbaas login` needs a human TTY;
51
- agents should bind instances with `pxbaas profile import <env-file>` or, with
52
- user approval, `pxbaas provision`.
49
+ <qoder|claude|cursor|qwen|hermes|codex|gemini|copilot|qwenworkcn|agents>`, or
50
+ `--dir <path>` / `--scope project` for other agent hosts and repo-local
51
+ conventions) and follow `pxbaas-cli` / `pxbaas-app-spec`. `pxbaas login` needs
52
+ a human TTY; agents should bind instances with `pxbaas profile import
53
+ <env-file>` or, with user approval, `pxbaas provision`.
53
54
 
54
55
  Every command accepts `--json` for machine-readable output, and `--profile <name>` to select a profile per invocation (`pxbaas profile ls / use / rm / import` manage them).
55
56
 
@@ -13,5 +13,5 @@
13
13
  /** Short pointer appended to the top-level `pxbaas --help`. */
14
14
  export declare const TOP_LEVEL_AGENT_GUIDE = "\nDevelop and deploy an app with pxbaas?\n Run 'pxbaas guide' for the recommended end-to-end workflow\n (skills, instance, capabilities, code, build, init, deploy, verify, share).\n";
15
15
  /** Full recommended workflow printed by `pxbaas guide`. */
16
- export declare const WORKFLOW_GUIDE = "\nRECOMMENDED WORKFLOW (humans and coding agents)\n\n1. Load the bundled skills\n pxbaas skill install --host <qoder|claude|cursor|qwen|hermes>\n (other agent hosts: pxbaas skill install --dir <skills-dir>, then read the files)\n Read pxbaas-cli/SKILL.md and pxbaas-app-spec/SKILL.md. They define the command\n surface, runtime contract, templates and deploy rules. Use <command> --help for\n exact syntax; never invent flags.\n\n2. Bind an instance (agents must not run 'pxbaas login'; it needs a TTY)\n pxbaas profile ls --json\n pxbaas profile import <env-file> --name <profile> --json # env file from the user\n pxbaas provision --name <profile> --json # only with user approval\n Multi-tenant instance: never deploy into the default or shared tenant and\n never use global keys. With my explicit approval, read DASHBOARD_USERNAME /\n DASHBOARD_PASSWORD only from my env file, pipe them via stdin (never echo),\n and create one isolated tenant bound to a fresh profile:\n printf '%s\\n%s\\n' \"$DASHBOARD_USERNAME\" \"$DASHBOARD_PASSWORD\" | \\\n pxbaas tenant login --endpoint <endpoint> --user-stdin --password-stdin --json\n pxbaas tenant create --generate-id --dry-run --json # preview first\n pxbaas tenant create --generate-id --yes --as-profile --json # after approval\n Continue every later step with that new tenant profile. Without dashboard\n credentials: ask the operator for a tenant access file; never reuse an\n existing tenant or its keys.\n pxbaas --profile <profile> doctor --json # require 0 fail first\n\n3. Check instance capabilities before writing code\n pxbaas --profile <profile> app capabilities --json\n Confirm schemaVersion 2 webapp delivery, Deno/Hono support and the SSR library\n allow-list. Unsupported requirement: stop and report; do not downgrade silently.\n\n4. Scaffold and implement inside the spec\n pxbaas app templates --json\n Pick by each template's meta (delivery/render/frontend/backend/session/\n hasDb/coldStart); spa|api|mpa are legacy workers, not webapps.\n pxbaas app new <name> --template <id> --dir <apps-dir> --json\n Follow pxbaas-app-spec: prebuilt frontend only, Deno backend, no outbound egress,\n no credentials in code or artifacts. Build the frontend when the template needs it.\n\n5. Preview database changes, then get one scoped approval\n pxbaas --profile <profile> app db-init <name> --dir <apps-dir> --dry-run --json\n Table names are fixed by the template: a new app name does not isolate data. Stop\n on unrelated existing tables. After approval:\n pxbaas --profile <profile> app db-init <name> --dir <apps-dir> --yes --json\n\n6. Preflight, then deploy\n pxbaas --profile <profile> app deploy <name> --dir <apps-dir> --dry-run --json\n pxbaas --profile <profile> app deploy <name> --dir <apps-dir> --json\n\n7. Recover by stage, never by restarting everything\n Upload ok but publish timed out (APP_SSR_PROBE_FAILED): retry the SAME candidate,\n max 3 times, 10s apart: pxbaas app publish <name> --dir <apps-dir> --json\n APP_MOUNT_CONFLICT: recover the real mount id from this run's output or local\n state; adopt/destroy only with explicit approval. Never guess ids or generations.\n\n8. Verify and deliver\n pxbaas --profile <profile> app verify <name> --dir <apps-dir> --json\n pxbaas --profile <profile> app url <name> --dir <apps-dir> --json\n Report the returned URL with its Public/Preview classification. A local HTTP 200\n does not prove access from other networks.\n\nCOMMON FAILURES AND THE ONLY SANCTIONED RESPONSES\n- No active profile or not logged in: bind an instance per step 2; never run\n 'pxbaas login' and never paste keys into chat.\n- doctor fail or expired key: stop and report; do not swap in other\n credentials or hand-edit the env file.\n- TENANT_CREDENTIAL_GAP on import: the env lacks tenant-level keys; with my\n approval use the Studio-credential tenant-create chain in step 2, or ask the\n operator for a tenant access file; never use global keys or the default tenant.\n- 401/403 on data or management calls: wrong role or tenant for this profile;\n re-check 'pxbaas whoami --json'; do not broaden privileges.\n- APP_CAPABILITY_UNSUPPORTED or a missing ssrLibs entry: this instance cannot\n run the app shape; stop and report; do not downgrade template or mode.\n- spec-lint blocker: fix the code per the cited pxbaas-app-spec reference;\n --skip-spec-check is never a fix.\n- Quota blocker, or 429/503 from Zero provisioning: stop; do not loop retries\n and do not delete functions to free slots without approval.\n- db-init stops on the first error and never rolls back: report which\n statements completed; do not re-run blindly or hand-write rollback SQL.\n- 409 'Candidate is already active': confirm it is this run's candidate, then\n treat the publish as success.\n- APP_PUBLISH_CONFLICT (stale generation): stop and reconcile from server\n state; never guess a generation.\n- 502/503 right after publish: sandbox cold start; retry the read request\n only, up to 3 times; do not redeploy.\n- Endpoint unreachable or doctor connectivity fail: separate DNS/firewall\n problems from intranet-only endpoints; re-check with 'pxbaas status --json';\n import VPC-internal URLs with --intranet; do not hand-edit the endpoint.\n- Zero instance rejects this machine: the instance is IP-whitelisted to the\n claiming egress IP; run pxbaas on the claiming machine or re-provision with\n --whitelist-ip; do not treat it as an app defect.\n- Others cannot open the URL while you can: IP whitelist or Preview exposure;\n state the limitation in the report; do not promise public access.\n\nSafety: never print or embed credentials; never use --skip-spec-check; never delete\nor adopt resources to work around a blocker.\n";
16
+ export declare const WORKFLOW_GUIDE = "\nRECOMMENDED WORKFLOW (humans and coding agents)\n\n1. Load the bundled skills\n pxbaas skill install --host <agent-id> # user scope (default)\n pxbaas skill install --host <agent-id> --scope project # repo-local, travels with code\n user ids: qoder|claude|cursor|qwen|hermes|codex|gemini|copilot|qwenworkcn|agents\n project ids add: trae|codebuddy|cline; other hosts: --dir <skills-dir>\n Read pxbaas-cli/SKILL.md and pxbaas-app-spec/SKILL.md. They define the command\n surface, runtime contract, templates and deploy rules. Use <command> --help for\n exact syntax; never invent flags.\n\n2. Bind an instance (agents must not run 'pxbaas login'; it needs a TTY)\n pxbaas profile ls --json\n pxbaas profile import <env-file> --name <profile> --json # env file from the user\n pxbaas provision --name <profile> --json # only with user approval\n Multi-tenant instance: never deploy into the default or shared tenant and\n never use global keys. With my explicit approval, read DASHBOARD_USERNAME /\n DASHBOARD_PASSWORD only from my env file, pipe them via stdin (never echo),\n and create one isolated tenant bound to a fresh profile:\n printf '%s\\n%s\\n' \"$DASHBOARD_USERNAME\" \"$DASHBOARD_PASSWORD\" | \\\n pxbaas tenant login --endpoint <endpoint> --user-stdin --password-stdin --json\n pxbaas tenant create --generate-id --dry-run --json # preview first\n pxbaas tenant create --generate-id --yes --as-profile --json # after approval\n Continue every later step with that new tenant profile. Without dashboard\n credentials: ask the operator for a tenant access file; never reuse an\n existing tenant or its keys.\n pxbaas --profile <profile> doctor --json # require 0 fail first\n\n3. Check instance capabilities before writing code\n pxbaas --profile <profile> app capabilities --json\n Confirm schemaVersion 2 webapp delivery, Deno/Hono support and the SSR library\n allow-list. Unsupported requirement: stop and report; do not downgrade silently.\n\n4. Scaffold and implement inside the spec\n pxbaas app templates --json\n Pick by each template's meta (delivery/render/frontend/backend/session/\n hasDb/coldStart); spa|api|mpa are legacy workers, not webapps.\n pxbaas app new <name> --template <id> --dir <apps-dir> --json\n Follow pxbaas-app-spec: prebuilt frontend only, Deno backend, no outbound egress,\n no credentials in code or artifacts. Build the frontend when the template needs it.\n\n5. Preview database changes, then get one scoped approval\n pxbaas --profile <profile> app db-init <name> --dir <apps-dir> --dry-run --json\n Table names are fixed by the template: a new app name does not isolate data. Stop\n on unrelated existing tables. After approval:\n pxbaas --profile <profile> app db-init <name> --dir <apps-dir> --yes --json\n\n6. Preflight, then deploy\n pxbaas --profile <profile> app deploy <name> --dir <apps-dir> --dry-run --json\n pxbaas --profile <profile> app deploy <name> --dir <apps-dir> --json\n\n7. Recover by stage, never by restarting everything\n Upload ok but publish timed out (APP_SSR_PROBE_FAILED): retry the SAME candidate,\n max 3 times, 10s apart: pxbaas app publish <name> --dir <apps-dir> --json\n APP_MOUNT_CONFLICT: recover the real mount id from this run's output or local\n state; adopt/destroy only with explicit approval. Never guess ids or generations.\n\n8. Verify and deliver\n pxbaas --profile <profile> app verify <name> --dir <apps-dir> --json\n pxbaas --profile <profile> app url <name> --dir <apps-dir> --json\n Report the returned URL with its Public/Preview classification. A local HTTP 200\n does not prove access from other networks.\n\nCOMMON FAILURES AND THE ONLY SANCTIONED RESPONSES\n- No active profile or not logged in: bind an instance per step 2; never run\n 'pxbaas login' and never paste keys into chat.\n- doctor fail or expired key: stop and report; do not swap in other\n credentials or hand-edit the env file.\n- TENANT_CREDENTIAL_GAP on import: the env lacks tenant-level keys; with my\n approval use the Studio-credential tenant-create chain in step 2, or ask the\n operator for a tenant access file; never use global keys or the default tenant.\n- 401/403 on data or management calls: wrong role or tenant for this profile;\n re-check 'pxbaas whoami --json'; do not broaden privileges.\n- APP_CAPABILITY_UNSUPPORTED or a missing ssrLibs entry: this instance cannot\n run the app shape; stop and report; do not downgrade template or mode.\n- spec-lint blocker: fix the code per the cited pxbaas-app-spec reference;\n --skip-spec-check is never a fix.\n- Quota blocker, or 429/503 from Zero provisioning: stop; do not loop retries\n and do not delete functions to free slots without approval.\n- db-init stops on the first error and never rolls back: report which\n statements completed; do not re-run blindly or hand-write rollback SQL.\n- 409 'Candidate is already active': confirm it is this run's candidate, then\n treat the publish as success.\n- APP_PUBLISH_CONFLICT (stale generation): stop and reconcile from server\n state; never guess a generation.\n- 502/503 right after publish: sandbox cold start; retry the read request\n only, up to 3 times; do not redeploy.\n- Endpoint unreachable or doctor connectivity fail: separate DNS/firewall\n problems from intranet-only endpoints; re-check with 'pxbaas status --json';\n import VPC-internal URLs with --intranet; do not hand-edit the endpoint.\n- Zero instance rejects this machine: the instance is IP-whitelisted to the\n claiming egress IP; run pxbaas on the claiming machine or re-provision with\n --whitelist-ip; do not treat it as an app defect.\n- Others cannot open the URL while you can: IP whitelist or Preview exposure;\n state the limitation in the report; do not promise public access.\n\nSafety: never print or embed credentials; never use --skip-spec-check; never delete\nor adopt resources to work around a blocker.\n";
17
17
  //# sourceMappingURL=help-guides.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"help-guides.d.ts","sourceRoot":"","sources":["../../src/cli/help-guides.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,+DAA+D;AAC/D,eAAO,MAAM,qBAAqB,4LAIjC,CAAC;AAEF,2DAA2D;AAC3D,eAAO,MAAM,cAAc,6vLAiG1B,CAAC"}
1
+ {"version":3,"file":"help-guides.d.ts","sourceRoot":"","sources":["../../src/cli/help-guides.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,+DAA+D;AAC/D,eAAO,MAAM,qBAAqB,4LAIjC,CAAC;AAEF,2DAA2D;AAC3D,eAAO,MAAM,cAAc,o7LAmG1B,CAAC"}
@@ -21,8 +21,10 @@ export const WORKFLOW_GUIDE = `
21
21
  RECOMMENDED WORKFLOW (humans and coding agents)
22
22
 
23
23
  1. Load the bundled skills
24
- pxbaas skill install --host <qoder|claude|cursor|qwen|hermes>
25
- (other agent hosts: pxbaas skill install --dir <skills-dir>, then read the files)
24
+ pxbaas skill install --host <agent-id> # user scope (default)
25
+ pxbaas skill install --host <agent-id> --scope project # repo-local, travels with code
26
+ user ids: qoder|claude|cursor|qwen|hermes|codex|gemini|copilot|qwenworkcn|agents
27
+ project ids add: trae|codebuddy|cline; other hosts: --dir <skills-dir>
26
28
  Read pxbaas-cli/SKILL.md and pxbaas-app-spec/SKILL.md. They define the command
27
29
  surface, runtime contract, templates and deploy rules. Use <command> --help for
28
30
  exact syntax; never invent flags.
@@ -1 +1 @@
1
- {"version":3,"file":"help-guides.js","sourceRoot":"","sources":["../../src/cli/help-guides.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,+DAA+D;AAC/D,MAAM,CAAC,MAAM,qBAAqB,GAAG;;;;CAIpC,CAAC;AAEF,2DAA2D;AAC3D,MAAM,CAAC,MAAM,cAAc,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiG7B,CAAC"}
1
+ {"version":3,"file":"help-guides.js","sourceRoot":"","sources":["../../src/cli/help-guides.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,+DAA+D;AAC/D,MAAM,CAAC,MAAM,qBAAqB,GAAG;;;;CAIpC,CAAC;AAEF,2DAA2D;AAC3D,MAAM,CAAC,MAAM,cAAc,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAmG7B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/skill/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAuD5D"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/skill/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkBpC;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA2D5D"}
@@ -1,6 +1,7 @@
1
1
  import { formatError, formatSuccess, formatWarning } from '../../credentials/index.js';
2
2
  import { SkillManager } from '../../skill/installer.js';
3
- import { isHostName, SUPPORTED_HOSTS } from '../../skill/hosts.js';
3
+ import { isHostName, isProjectHost, PROJECT_HOSTS, PROJECT_SKILL_DIR, SUPPORTED_HOSTS, } from '../../skill/hosts.js';
4
+ import { agentsMdBlockPresent, removeAgentsMdBlock, upsertAgentsMdBlock, } from '../../skill/agents-md.js';
4
5
  /**
5
6
  * `pxbaas skill` — install/list/remove ALL bundled Agent Skills (pxbaas-cli,
6
7
  * pxbaas-app-spec, ...) into supported Agent hosts (~/.qoder, ~/.claude,
@@ -17,12 +18,14 @@ export function registerSkillCommands(program) {
17
18
  skillCmd
18
19
  .command('install')
19
20
  .description('Install/update all bundled skills into an Agent host skills directory')
20
- .option('--host <host>', `Target host (${SUPPORTED_HOSTS.join('|')})`)
21
- .option('--all', 'Install to every detected host')
21
+ .option('--host <host>', `Target host (${SUPPORTED_HOSTS.join('|')}; project scope also: ${PROJECT_HOSTS.filter((h) => !SUPPORTED_HOSTS.includes(h)).join('|')})`)
22
+ .option('--all', 'Install to every detected host (user scope; excludes the neutral "agents" location)')
23
+ .option('--scope <scope>', 'Install scope: user (~/.<host>/skills, default) or project (repo-level convention)')
22
24
  .option('--dir <path>', 'Custom skills-root directory (each skill goes under <dir>/<skill>)')
23
25
  .option('--skill <name>', 'Install only this bundled skill (default: all)')
24
26
  .option('--dry-run', 'Show what would be written without touching disk')
25
27
  .option('--force', 'Back up and overwrite a foreign (non-baas) directory')
28
+ .option('--agents-md', 'With --scope project: also write/update the managed pxbaas block in AGENTS.md')
26
29
  .option('--json', 'Output in JSON format')
27
30
  .action(async (options) => {
28
31
  try {
@@ -49,12 +52,14 @@ export function registerSkillCommands(program) {
49
52
  skillCmd
50
53
  .command('remove')
51
54
  .description('Remove bundled skills from a host (only baas-managed dirs; two-phase)')
52
- .option('--host <host>', `Target host (${SUPPORTED_HOSTS.join('|')})`)
53
- .option('--all', 'Remove from every detected host')
55
+ .option('--host <host>', `Target host (${SUPPORTED_HOSTS.join('|')}; project scope also: ${PROJECT_HOSTS.filter((h) => !SUPPORTED_HOSTS.includes(h)).join('|')})`)
56
+ .option('--all', 'Remove from every detected host (user scope)')
57
+ .option('--scope <scope>', 'Remove scope: user (default) or project')
54
58
  .option('--dir <path>', 'Custom skills-root directory to remove from')
55
59
  .option('--skill <name>', 'Remove only this bundled skill (default: all)')
56
60
  .option('--dry-run', 'Preview what would be removed')
57
61
  .option('--confirm', 'Actually perform the removal (required to delete)')
62
+ .option('--agents-md', 'With --scope project --confirm: also remove the managed pxbaas block from AGENTS.md')
58
63
  .option('--json', 'Output in JSON format')
59
64
  .action(async (options) => {
60
65
  try {
@@ -75,14 +80,28 @@ function handleError(error, json) {
75
80
  }
76
81
  process.exit(1);
77
82
  }
78
- function resolveHost(host) {
83
+ function resolveHost(host, scope) {
79
84
  if (!host)
80
85
  return undefined;
86
+ if (scope === 'project') {
87
+ if (!isProjectHost(host)) {
88
+ throw new Error(`Unsupported project-scope host "${host}". Supported: ${PROJECT_HOSTS.join(', ')}.`);
89
+ }
90
+ return host;
91
+ }
81
92
  if (!isHostName(host)) {
82
93
  throw new Error(`Unsupported host "${host}". Supported: ${SUPPORTED_HOSTS.join(', ')}.`);
83
94
  }
84
95
  return host;
85
96
  }
97
+ function parseScope(scope) {
98
+ if (!scope)
99
+ return 'user';
100
+ if (scope !== 'user' && scope !== 'project') {
101
+ throw new Error(`Invalid --scope "${scope}". Supported: user, project.`);
102
+ }
103
+ return scope;
104
+ }
86
105
  function isJson(options, program) {
87
106
  return Boolean(options.json || program.opts().json);
88
107
  }
@@ -95,7 +114,8 @@ function emit(results, json, output) {
95
114
  return;
96
115
  }
97
116
  for (const r of results) {
98
- const line = `${r.host}/${r.skill}: ${r.status} -> ${r.targetDir}`;
117
+ const scopeTag = r.scope && r.scope !== 'user' ? `:${r.scope}` : '';
118
+ const line = `${r.host}${scopeTag}/${r.skill}: ${r.status} -> ${r.targetDir}`;
99
119
  if (r.status === 'error' || r.status === 'skipped-foreign') {
100
120
  console.log(formatWarning(line + (r.reason ? ` (${r.reason})` : '')));
101
121
  }
@@ -112,10 +132,39 @@ function emit(results, json, output) {
112
132
  }
113
133
  async function handleInstall(options, program) {
114
134
  const json = isJson(options, program);
135
+ const scope = parseScope(options.scope);
136
+ if (options.agentsMd && scope !== 'project') {
137
+ throw new Error('--agents-md requires --scope project.');
138
+ }
115
139
  const manager = await SkillManager.create();
116
- const targets = manager.resolveTargets({ host: resolveHost(options.host), all: options.all, dir: options.dir });
140
+ const targets = manager.resolveTargets({
141
+ host: resolveHost(options.host, scope),
142
+ all: options.all,
143
+ dir: options.dir,
144
+ scope,
145
+ });
117
146
  const results = await manager.install(targets, { dryRun: options.dryRun, force: options.force, skills: skillFilter(options.skill) });
118
- emit(results, json, { action: 'install', dryRun: Boolean(options.dryRun), skills: await manager.bundledSkills(), results });
147
+ let agentsMd;
148
+ if (options.agentsMd && !options.dryRun) {
149
+ const dirs = [...new Set(targets
150
+ .filter((t) => isProjectHost(t.host))
151
+ .map((t) => PROJECT_SKILL_DIR[t.host]))];
152
+ agentsMd = await upsertAgentsMdBlock(process.cwd(), [
153
+ `- pxbaas skills: ${dirs.join(', ')}`,
154
+ '- Run `pxbaas guide` for the end-to-end develop/deploy/verify/share workflow.',
155
+ ]);
156
+ }
157
+ emit(results, json, {
158
+ action: 'install',
159
+ scope,
160
+ dryRun: Boolean(options.dryRun),
161
+ skills: await manager.bundledSkills(),
162
+ ...(agentsMd ? { agentsMd } : {}),
163
+ results,
164
+ });
165
+ if (agentsMd && !json) {
166
+ console.log(formatSuccess(`AGENTS.md block ${agentsMd.created ? 'created' : 'updated'}: ${agentsMd.path}`));
167
+ }
119
168
  if (results.some((r) => r.status === 'error'))
120
169
  process.exit(1);
121
170
  }
@@ -123,27 +172,53 @@ async function handleList(options, program) {
123
172
  const json = isJson(options, program);
124
173
  const manager = await SkillManager.create();
125
174
  const bundled = await manager.bundledSkills();
126
- const results = await manager.list();
175
+ const results = [...(await manager.list()), ...(await manager.listProject())];
176
+ const agentsMd = await agentsMdBlockPresent(process.cwd());
127
177
  if (json) {
128
- console.log(JSON.stringify({ action: 'list', skills: bundled, results }, null, 2));
178
+ console.log(JSON.stringify({ action: 'list', skills: bundled, agentsMd, results }, null, 2));
129
179
  return;
130
180
  }
131
181
  console.log(`Bundled skills: ${bundled.join(', ')}`);
182
+ console.log(`AGENTS.md managed block: ${agentsMd ? 'present' : 'absent'}`);
132
183
  if (results.length === 0) {
133
184
  console.log(formatWarning('No supported host directories detected.'));
134
185
  return;
135
186
  }
136
187
  for (const r of results) {
188
+ const scopeTag = r.scope && r.scope !== 'user' ? `:${r.scope}` : '';
137
189
  const detail = r.status === 'installed' ? ` (v${r.skillVersion}, ${r.installedAt})` : '';
138
- console.log(`${r.host}/${r.skill}: ${r.status}${detail} -> ${r.targetDir}`);
190
+ console.log(`${r.host}${scopeTag}/${r.skill}: ${r.status}${detail} -> ${r.targetDir}`);
139
191
  }
140
192
  }
141
193
  async function handleRemove(options, program) {
142
194
  const json = isJson(options, program);
195
+ const scope = parseScope(options.scope);
196
+ if (options.agentsMd && scope !== 'project') {
197
+ throw new Error('--agents-md requires --scope project.');
198
+ }
143
199
  const manager = await SkillManager.create();
144
- const targets = manager.resolveTargets({ host: resolveHost(options.host), all: options.all, dir: options.dir });
200
+ const targets = manager.resolveTargets({
201
+ host: resolveHost(options.host, scope),
202
+ all: options.all,
203
+ dir: options.dir,
204
+ scope,
205
+ });
145
206
  const results = await manager.remove(targets, { dryRun: options.dryRun, confirm: options.confirm, skills: skillFilter(options.skill) });
146
- emit(results, json, { action: 'remove', dryRun: Boolean(options.dryRun), confirm: Boolean(options.confirm), results });
207
+ let agentsMd;
208
+ if (options.agentsMd && options.confirm && !options.dryRun) {
209
+ agentsMd = await removeAgentsMdBlock(process.cwd());
210
+ }
211
+ emit(results, json, {
212
+ action: 'remove',
213
+ scope,
214
+ dryRun: Boolean(options.dryRun),
215
+ confirm: Boolean(options.confirm),
216
+ ...(agentsMd ? { agentsMd } : {}),
217
+ results,
218
+ });
219
+ if (agentsMd && !json && agentsMd.removed) {
220
+ console.log(formatSuccess(`AGENTS.md block removed: ${agentsMd.path}`));
221
+ }
147
222
  if (!options.confirm && !options.dryRun && results.some((r) => r.status === 'dry-run')) {
148
223
  console.error(formatWarning('Preview only. Re-run with --confirm to remove.'));
149
224
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/skill/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/skill/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Managed AGENTS.md block for agents without a SKILL.md convention.
3
+ *
4
+ * Cloud agents (Devin, Jules, Copilot coding agent) and guideline-only tools
5
+ * (Junie, Comate, CodeArts, Windsurf, Kiro steering) read repository-level
6
+ * AGENTS.md. `pxbaas skill install --scope project --agents-md` writes a small
7
+ * marker-delimited block pointing at the exported skill directories and
8
+ * `pxbaas guide`. Everything outside the markers is never touched, and the
9
+ * block is idempotently replaced on re-install.
10
+ */
11
+ export declare const AGENTS_MD_FILE = "AGENTS.md";
12
+ export declare const BEGIN_MARKER = "<!-- BEGIN pxbaas-skills (managed by pxbaas skill install; do not edit) -->";
13
+ export declare const END_MARKER = "<!-- END pxbaas-skills -->";
14
+ export declare function renderBlock(lines: string[]): string;
15
+ export declare function upsertAgentsMdBlock(projectRoot: string, lines: string[]): Promise<{
16
+ path: string;
17
+ created: boolean;
18
+ }>;
19
+ export declare function removeAgentsMdBlock(projectRoot: string): Promise<{
20
+ path: string;
21
+ removed: boolean;
22
+ deletedFile: boolean;
23
+ }>;
24
+ export declare function agentsMdBlockPresent(projectRoot: string): Promise<boolean>;
25
+ //# sourceMappingURL=agents-md.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agents-md.d.ts","sourceRoot":"","sources":["../../src/skill/agents-md.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAMH,eAAO,MAAM,cAAc,cAAc,CAAC;AAC1C,eAAO,MAAM,YAAY,gFACsD,CAAC;AAChF,eAAO,MAAM,UAAU,+BAA+B,CAAC;AAUvD,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAEnD;AAED,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EAAE,GACd,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CAa7C;AAED,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAC;IAAC,WAAW,EAAE,OAAO,CAAA;CAAE,CAAC,CAYnE;AAED,wBAAsB,oBAAoB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAKhF"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * Managed AGENTS.md block for agents without a SKILL.md convention.
3
+ *
4
+ * Cloud agents (Devin, Jules, Copilot coding agent) and guideline-only tools
5
+ * (Junie, Comate, CodeArts, Windsurf, Kiro steering) read repository-level
6
+ * AGENTS.md. `pxbaas skill install --scope project --agents-md` writes a small
7
+ * marker-delimited block pointing at the exported skill directories and
8
+ * `pxbaas guide`. Everything outside the markers is never touched, and the
9
+ * block is idempotently replaced on re-install.
10
+ */
11
+ import { readFile, writeFile, rm } from 'node:fs/promises';
12
+ import { existsSync } from 'node:fs';
13
+ import { join } from 'node:path';
14
+ export const AGENTS_MD_FILE = 'AGENTS.md';
15
+ export const BEGIN_MARKER = '<!-- BEGIN pxbaas-skills (managed by pxbaas skill install; do not edit) -->';
16
+ export const END_MARKER = '<!-- END pxbaas-skills -->';
17
+ function escapeRe(s) {
18
+ return s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
19
+ }
20
+ function blockRegex() {
21
+ return new RegExp(`\\n*${escapeRe(BEGIN_MARKER)}[\\s\\S]*?${escapeRe(END_MARKER)}\\n*`);
22
+ }
23
+ export function renderBlock(lines) {
24
+ return [BEGIN_MARKER, ...lines, END_MARKER].join('\n');
25
+ }
26
+ export async function upsertAgentsMdBlock(projectRoot, lines) {
27
+ const path = join(projectRoot, AGENTS_MD_FILE);
28
+ const block = renderBlock(lines);
29
+ if (!existsSync(path)) {
30
+ await writeFile(path, `${block}\n`, 'utf8');
31
+ return { path, created: true };
32
+ }
33
+ const content = await readFile(path, 'utf8');
34
+ const updated = blockRegex().test(content)
35
+ ? content.replace(blockRegex(), `${block}\n`)
36
+ : `${content.replace(/\s*$/, '')}\n\n${block}\n`;
37
+ await writeFile(path, updated, 'utf8');
38
+ return { path, created: false };
39
+ }
40
+ export async function removeAgentsMdBlock(projectRoot) {
41
+ const path = join(projectRoot, AGENTS_MD_FILE);
42
+ if (!existsSync(path))
43
+ return { path, removed: false, deletedFile: false };
44
+ const content = await readFile(path, 'utf8');
45
+ if (!blockRegex().test(content))
46
+ return { path, removed: false, deletedFile: false };
47
+ const stripped = content.replace(blockRegex(), '');
48
+ if (stripped.trim() === '') {
49
+ await rm(path);
50
+ return { path, removed: true, deletedFile: true };
51
+ }
52
+ await writeFile(path, stripped, 'utf8');
53
+ return { path, removed: true, deletedFile: false };
54
+ }
55
+ export async function agentsMdBlockPresent(projectRoot) {
56
+ const path = join(projectRoot, AGENTS_MD_FILE);
57
+ if (!existsSync(path))
58
+ return false;
59
+ const content = await readFile(path, 'utf8');
60
+ return blockRegex().test(content);
61
+ }
62
+ //# sourceMappingURL=agents-md.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agents-md.js","sourceRoot":"","sources":["../../src/skill/agents-md.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,MAAM,CAAC,MAAM,cAAc,GAAG,WAAW,CAAC;AAC1C,MAAM,CAAC,MAAM,YAAY,GACvB,6EAA6E,CAAC;AAChF,MAAM,CAAC,MAAM,UAAU,GAAG,4BAA4B,CAAC;AAEvD,SAAS,QAAQ,CAAC,CAAS;IACzB,OAAO,CAAC,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;AAClD,CAAC;AAED,SAAS,UAAU;IACjB,OAAO,IAAI,MAAM,CAAC,OAAO,QAAQ,CAAC,YAAY,CAAC,aAAa,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;AAC1F,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,KAAe;IACzC,OAAO,CAAC,YAAY,EAAE,GAAG,KAAK,EAAE,UAAU,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,WAAmB,EACnB,KAAe;IAEf,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IAC/C,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;IACjC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,MAAM,SAAS,CAAC,IAAI,EAAE,GAAG,KAAK,IAAI,EAAE,MAAM,CAAC,CAAC;QAC5C,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IACjC,CAAC;IACD,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC7C,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC;QACxC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,GAAG,KAAK,IAAI,CAAC;QAC7C,CAAC,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,OAAO,KAAK,IAAI,CAAC;IACnD,MAAM,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IACvC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AAClC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,WAAmB;IAEnB,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IAC/C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;IAC3E,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC7C,IAAI,CAAC,UAAU,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;IACrF,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;IACnD,IAAI,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QAC3B,MAAM,EAAE,CAAC,IAAI,CAAC,CAAC;QACf,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;IACpD,CAAC;IACD,MAAM,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IACxC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC;AACrD,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,WAAmB;IAC5D,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IAC/C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,KAAK,CAAC;IACpC,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC7C,OAAO,UAAU,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACpC,CAAC"}
@@ -2,20 +2,44 @@
2
2
  * Skill host mapping & detection.
3
3
  *
4
4
  * Mirrors the ctxdb0 `#skillTarget` convention: each supported Agent host keeps
5
- * its skills under `~/.<host>/skills/<skill>/`. Codex (plugin marketplace) is
6
- * intentionally out of scope for M1.
5
+ * its skills under `~/.<host>/skills/<skill>/`. User-level hosts are verified
6
+ * against vendor docs; unverified locations are NOT hardcoded here.
7
+ *
8
+ * Two install scopes exist:
9
+ * - `user` (default): the per-host directory under $HOME.
10
+ * - `project`: the repository-level convention (e.g. `.agents/skills`), so the
11
+ * skills travel with the code and cloud agents cloning the repo pick them up.
12
+ *
13
+ * The vendor-neutral key `agents` maps to `~/.agents/skills` / `.agents/skills`,
14
+ * which Codex scans and Copilot reads. It is intentionally excluded from `--all`
15
+ * (install it explicitly) to avoid duplicate copies next to per-host installs.
7
16
  */
8
- export type HostName = 'qoder' | 'claude' | 'cursor' | 'qwen' | 'hermes';
9
- /** Hosts supported by `pxbaas skill install` (M1). */
17
+ export type HostName = 'qoder' | 'claude' | 'cursor' | 'qwen' | 'hermes' | 'codex' | 'gemini' | 'copilot' | 'qwenworkcn' | 'agents';
18
+ /** Hosts supported by `pxbaas skill install --scope user`. */
10
19
  export declare const SUPPORTED_HOSTS: HostName[];
20
+ /** Neutral locations: never installed by `--all`, only by explicit `--host`. */
21
+ export declare const ALL_EXCLUDED_HOSTS: HostName[];
22
+ /**
23
+ * Host keys accepted for `--scope project`. Some (trae/codebuddy/cline) publish
24
+ * only a repository-level convention, so they are project-scope only.
25
+ * Every path below is taken from vendor documentation; do not add guesses.
26
+ */
27
+ export type ProjectHost = 'claude' | 'qwen' | 'codex' | 'agents' | 'gemini' | 'copilot' | 'trae' | 'codebuddy' | 'cline';
28
+ export declare const PROJECT_HOSTS: ProjectHost[];
29
+ /** Repository-relative skills directory per project-scope host. */
30
+ export declare const PROJECT_SKILL_DIR: Record<ProjectHost, string>;
11
31
  export declare function isHostName(value: string): value is HostName;
12
- /** `~/.<host>/skills` root for a host. */
32
+ export declare function isProjectHost(value: string): value is ProjectHost;
33
+ /** `~/.<host>/skills` root for a user-scope host. */
13
34
  export declare function hostSkillsRoot(host: HostName, homeDir: string): string;
14
- /** Full target directory for the pxbaas-cli skill under a host. */
35
+ /** Full target directory for a skill under a user-scope host. */
15
36
  export declare function hostSkillDir(host: HostName, homeDir: string, skillName?: string): string;
37
+ /** Repository-level skills root for a project-scope host. */
38
+ export declare function projectSkillsRoot(host: ProjectHost, projectRoot: string): string;
16
39
  /**
17
40
  * Detect which supported hosts already have a `~/.<host>` directory, i.e. hosts
18
- * the user plausibly uses. Used for auto-selection and `--all`.
41
+ * the user plausibly uses. Used for auto-selection and `--all` (which further
42
+ * excludes ALL_EXCLUDED_HOSTS at the caller).
19
43
  */
20
44
  export declare function detectInstalledHosts(homeDir: string): HostName[];
21
45
  //# sourceMappingURL=hosts.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"hosts.d.ts","sourceRoot":"","sources":["../../src/skill/hosts.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,CAAC;AAEzE,sDAAsD;AACtD,eAAO,MAAM,eAAe,EAAE,QAAQ,EAAoD,CAAC;AAW3F,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,QAAQ,CAE3D;AAED,0CAA0C;AAC1C,wBAAgB,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAEtE;AAED,mEAAmE;AACnE,wBAAgB,YAAY,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,SAAe,GAAG,MAAM,CAE9F;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,EAAE,CAEhE"}
1
+ {"version":3,"file":"hosts.d.ts","sourceRoot":"","sources":["../../src/skill/hosts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAKH,MAAM,MAAM,QAAQ,GAChB,OAAO,GACP,QAAQ,GACR,QAAQ,GACR,MAAM,GACN,QAAQ,GACR,OAAO,GACP,QAAQ,GACR,SAAS,GACT,YAAY,GACZ,QAAQ,CAAC;AAEb,8DAA8D;AAC9D,eAAO,MAAM,eAAe,EAAE,QAAQ,EAWrC,CAAC;AAEF,gFAAgF;AAChF,eAAO,MAAM,kBAAkB,EAAE,QAAQ,EAAe,CAAC;AAgBzD;;;;GAIG;AACH,MAAM,MAAM,WAAW,GACnB,QAAQ,GACR,MAAM,GACN,OAAO,GACP,QAAQ,GACR,QAAQ,GACR,SAAS,GACT,MAAM,GACN,WAAW,GACX,OAAO,CAAC;AAEZ,eAAO,MAAM,aAAa,EAAE,WAAW,EAUtC,CAAC;AAEF,mEAAmE;AACnE,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,WAAW,EAAE,MAAM,CAUzD,CAAC;AAEF,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,QAAQ,CAE3D;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,WAAW,CAEjE;AAED,qDAAqD;AACrD,wBAAgB,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAEtE;AAED,iEAAiE;AACjE,wBAAgB,YAAY,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,SAAe,GAAG,MAAM,CAE9F;AAED,6DAA6D;AAC7D,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAEhF;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,EAAE,CAEhE"}
@@ -2,13 +2,35 @@
2
2
  * Skill host mapping & detection.
3
3
  *
4
4
  * Mirrors the ctxdb0 `#skillTarget` convention: each supported Agent host keeps
5
- * its skills under `~/.<host>/skills/<skill>/`. Codex (plugin marketplace) is
6
- * intentionally out of scope for M1.
5
+ * its skills under `~/.<host>/skills/<skill>/`. User-level hosts are verified
6
+ * against vendor docs; unverified locations are NOT hardcoded here.
7
+ *
8
+ * Two install scopes exist:
9
+ * - `user` (default): the per-host directory under $HOME.
10
+ * - `project`: the repository-level convention (e.g. `.agents/skills`), so the
11
+ * skills travel with the code and cloud agents cloning the repo pick them up.
12
+ *
13
+ * The vendor-neutral key `agents` maps to `~/.agents/skills` / `.agents/skills`,
14
+ * which Codex scans and Copilot reads. It is intentionally excluded from `--all`
15
+ * (install it explicitly) to avoid duplicate copies next to per-host installs.
7
16
  */
8
17
  import { existsSync } from 'node:fs';
9
18
  import { join } from 'node:path';
10
- /** Hosts supported by `pxbaas skill install` (M1). */
11
- export const SUPPORTED_HOSTS = ['qoder', 'claude', 'cursor', 'qwen', 'hermes'];
19
+ /** Hosts supported by `pxbaas skill install --scope user`. */
20
+ export const SUPPORTED_HOSTS = [
21
+ 'qoder',
22
+ 'claude',
23
+ 'cursor',
24
+ 'qwen',
25
+ 'hermes',
26
+ 'codex',
27
+ 'gemini',
28
+ 'copilot',
29
+ 'qwenworkcn',
30
+ 'agents',
31
+ ];
32
+ /** Neutral locations: never installed by `--all`, only by explicit `--host`. */
33
+ export const ALL_EXCLUDED_HOSTS = ['agents'];
12
34
  /** Host name -> the dot-directory under $HOME that hosts its config/skills. */
13
35
  const HOST_DIR = {
14
36
  qoder: '.qoder',
@@ -16,21 +38,57 @@ const HOST_DIR = {
16
38
  cursor: '.cursor',
17
39
  qwen: '.qwen',
18
40
  hermes: '.hermes',
41
+ codex: '.codex',
42
+ gemini: '.gemini',
43
+ copilot: '.copilot',
44
+ qwenworkcn: '.qwenworkcn',
45
+ agents: '.agents',
46
+ };
47
+ export const PROJECT_HOSTS = [
48
+ 'claude',
49
+ 'qwen',
50
+ 'codex',
51
+ 'agents',
52
+ 'gemini',
53
+ 'copilot',
54
+ 'trae',
55
+ 'codebuddy',
56
+ 'cline',
57
+ ];
58
+ /** Repository-relative skills directory per project-scope host. */
59
+ export const PROJECT_SKILL_DIR = {
60
+ claude: '.claude/skills',
61
+ qwen: '.qwen/skills',
62
+ codex: '.agents/skills',
63
+ agents: '.agents/skills',
64
+ gemini: '.gemini/skills',
65
+ copilot: '.github/skills',
66
+ trae: '.trae/skills',
67
+ codebuddy: '.codebuddy/skills',
68
+ cline: '.cline/skills',
19
69
  };
20
70
  export function isHostName(value) {
21
71
  return SUPPORTED_HOSTS.includes(value);
22
72
  }
23
- /** `~/.<host>/skills` root for a host. */
73
+ export function isProjectHost(value) {
74
+ return PROJECT_HOSTS.includes(value);
75
+ }
76
+ /** `~/.<host>/skills` root for a user-scope host. */
24
77
  export function hostSkillsRoot(host, homeDir) {
25
78
  return join(homeDir, HOST_DIR[host], 'skills');
26
79
  }
27
- /** Full target directory for the pxbaas-cli skill under a host. */
80
+ /** Full target directory for a skill under a user-scope host. */
28
81
  export function hostSkillDir(host, homeDir, skillName = 'pxbaas-cli') {
29
82
  return join(hostSkillsRoot(host, homeDir), skillName);
30
83
  }
84
+ /** Repository-level skills root for a project-scope host. */
85
+ export function projectSkillsRoot(host, projectRoot) {
86
+ return join(projectRoot, PROJECT_SKILL_DIR[host]);
87
+ }
31
88
  /**
32
89
  * Detect which supported hosts already have a `~/.<host>` directory, i.e. hosts
33
- * the user plausibly uses. Used for auto-selection and `--all`.
90
+ * the user plausibly uses. Used for auto-selection and `--all` (which further
91
+ * excludes ALL_EXCLUDED_HOSTS at the caller).
34
92
  */
35
93
  export function detectInstalledHosts(homeDir) {
36
94
  return SUPPORTED_HOSTS.filter((host) => existsSync(join(homeDir, HOST_DIR[host])));
@@ -1 +1 @@
1
- {"version":3,"file":"hosts.js","sourceRoot":"","sources":["../../src/skill/hosts.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAIjC,sDAAsD;AACtD,MAAM,CAAC,MAAM,eAAe,GAAe,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;AAE3F,+EAA+E;AAC/E,MAAM,QAAQ,GAA6B;IACzC,KAAK,EAAE,QAAQ;IACf,MAAM,EAAE,SAAS;IACjB,MAAM,EAAE,SAAS;IACjB,IAAI,EAAE,OAAO;IACb,MAAM,EAAE,SAAS;CAClB,CAAC;AAEF,MAAM,UAAU,UAAU,CAAC,KAAa;IACtC,OAAQ,eAA4B,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACvD,CAAC;AAED,0CAA0C;AAC1C,MAAM,UAAU,cAAc,CAAC,IAAc,EAAE,OAAe;IAC5D,OAAO,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,CAAC;AACjD,CAAC;AAED,mEAAmE;AACnE,MAAM,UAAU,YAAY,CAAC,IAAc,EAAE,OAAe,EAAE,SAAS,GAAG,YAAY;IACpF,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,SAAS,CAAC,CAAC;AACxD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAe;IAClD,OAAO,eAAe,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACrF,CAAC"}
1
+ {"version":3,"file":"hosts.js","sourceRoot":"","sources":["../../src/skill/hosts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAcjC,8DAA8D;AAC9D,MAAM,CAAC,MAAM,eAAe,GAAe;IACzC,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,MAAM;IACN,QAAQ;IACR,OAAO;IACP,QAAQ;IACR,SAAS;IACT,YAAY;IACZ,QAAQ;CACT,CAAC;AAEF,gFAAgF;AAChF,MAAM,CAAC,MAAM,kBAAkB,GAAe,CAAC,QAAQ,CAAC,CAAC;AAEzD,+EAA+E;AAC/E,MAAM,QAAQ,GAA6B;IACzC,KAAK,EAAE,QAAQ;IACf,MAAM,EAAE,SAAS;IACjB,MAAM,EAAE,SAAS;IACjB,IAAI,EAAE,OAAO;IACb,MAAM,EAAE,SAAS;IACjB,KAAK,EAAE,QAAQ;IACf,MAAM,EAAE,SAAS;IACjB,OAAO,EAAE,UAAU;IACnB,UAAU,EAAE,aAAa;IACzB,MAAM,EAAE,SAAS;CAClB,CAAC;AAkBF,MAAM,CAAC,MAAM,aAAa,GAAkB;IAC1C,QAAQ;IACR,MAAM;IACN,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,SAAS;IACT,MAAM;IACN,WAAW;IACX,OAAO;CACR,CAAC;AAEF,mEAAmE;AACnE,MAAM,CAAC,MAAM,iBAAiB,GAAgC;IAC5D,MAAM,EAAE,gBAAgB;IACxB,IAAI,EAAE,cAAc;IACpB,KAAK,EAAE,gBAAgB;IACvB,MAAM,EAAE,gBAAgB;IACxB,MAAM,EAAE,gBAAgB;IACxB,OAAO,EAAE,gBAAgB;IACzB,IAAI,EAAE,cAAc;IACpB,SAAS,EAAE,mBAAmB;IAC9B,KAAK,EAAE,eAAe;CACvB,CAAC;AAEF,MAAM,UAAU,UAAU,CAAC,KAAa;IACtC,OAAQ,eAA4B,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACvD,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,KAAa;IACzC,OAAQ,aAA0B,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACrD,CAAC;AAED,qDAAqD;AACrD,MAAM,UAAU,cAAc,CAAC,IAAc,EAAE,OAAe;IAC5D,OAAO,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,CAAC;AACjD,CAAC;AAED,iEAAiE;AACjE,MAAM,UAAU,YAAY,CAAC,IAAc,EAAE,OAAe,EAAE,SAAS,GAAG,YAAY;IACpF,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,SAAS,CAAC,CAAC;AACxD,CAAC;AAED,6DAA6D;AAC7D,MAAM,UAAU,iBAAiB,CAAC,IAAiB,EAAE,WAAmB;IACtE,OAAO,IAAI,CAAC,WAAW,EAAE,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC;AACpD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAe;IAClD,OAAO,eAAe,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;AACrF,CAAC"}
@@ -9,7 +9,7 @@
9
9
  * Layout: each host has a skills root (`~/.<host>/skills`); every bundled skill is
10
10
  * installed into `<skillsRoot>/<skillName>/` with its own fail-closed owner marker.
11
11
  */
12
- import { type HostName } from './hosts.js';
12
+ export type InstallScope = 'user' | 'project';
13
13
  export type InstallStatus = 'installed' | 'updated' | 'skipped-foreign' | 'dry-run' | 'error';
14
14
  export type RemoveStatus = 'removed' | 'not-installed' | 'skipped-foreign' | 'dry-run' | 'error';
15
15
  export type ListStatus = 'installed' | 'not-installed' | 'foreign';
@@ -18,6 +18,7 @@ export interface SkillResult {
18
18
  skill: string;
19
19
  targetDir: string;
20
20
  status: InstallStatus | RemoveStatus | ListStatus;
21
+ scope?: InstallScope;
21
22
  filesWritten?: string[];
22
23
  skillVersion?: string;
23
24
  installedAt?: string;
@@ -30,6 +31,8 @@ export interface SkillManagerOptions {
30
31
  skillsRoot?: string;
31
32
  /** CLI version stamped into markers (defaults to readCliVersion()). */
32
33
  cliVersion?: string;
34
+ /** Repository root for `--scope project` targets (defaults to process.cwd()). */
35
+ projectRoot?: string;
33
36
  }
34
37
  export interface InstallOptions {
35
38
  dryRun?: boolean;
@@ -46,11 +49,13 @@ export interface RemoveOptions {
46
49
  export interface ResolvedTarget {
47
50
  host: string;
48
51
  destRoot: string;
52
+ scope: InstallScope;
49
53
  }
50
54
  export declare class SkillManager {
51
55
  private readonly homeDir;
52
56
  private readonly skillsRoot;
53
57
  private readonly cliVersion;
58
+ private readonly projectRoot;
54
59
  private skillsCache;
55
60
  constructor(options?: SkillManagerOptions);
56
61
  /** Async factory that resolves the CLI version from package.json. */
@@ -61,14 +66,17 @@ export declare class SkillManager {
61
66
  /**
62
67
  * Resolve which host skills-roots to act on.
63
68
  * - `--dir` wins (single custom skills-root, host label "custom")
64
- * - `--all` → every detected host (those with an existing ~/.<host>)
69
+ * - `--scope project` requires `--host` (a ProjectHost) or `--dir`; `--all` is
70
+ * user-scope only because writing every vendor repo directory is spammy
71
+ * - `--all` (user scope) → every detected host except ALL_EXCLUDED_HOSTS
65
72
  * - `--host <h>` → that host
66
73
  * - none → auto-detect: exactly one detected host is used; 0 or >1 is an error
67
74
  */
68
75
  resolveTargets(opts: {
69
- host?: HostName;
76
+ host?: string;
70
77
  all?: boolean;
71
78
  dir?: string;
79
+ scope?: InstallScope;
72
80
  }): ResolvedTarget[];
73
81
  /** Install all (or selected) bundled skills into each target's skills root. */
74
82
  install(targets: ResolvedTarget[], options?: InstallOptions): Promise<SkillResult[]>;
@@ -77,6 +85,10 @@ export declare class SkillManager {
77
85
  list(options?: {
78
86
  skills?: string[];
79
87
  }): Promise<SkillResult[]>;
88
+ /** Report install state of bundled skills in repository-level directories. */
89
+ listProject(options?: {
90
+ skills?: string[];
91
+ }): Promise<SkillResult[]>;
80
92
  private listOne;
81
93
  /**
82
94
  * Remove bundled skills from each target. Only removes directories owned by
@@ -1 +1 @@
1
- {"version":3,"file":"installer.d.ts","sourceRoot":"","sources":["../../src/skill/installer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAQH,OAAO,EAAwC,KAAK,QAAQ,EAAE,MAAM,YAAY,CAAC;AAGjF,MAAM,MAAM,aAAa,GAAG,WAAW,GAAG,SAAS,GAAG,iBAAiB,GAAG,SAAS,GAAG,OAAO,CAAC;AAC9F,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,eAAe,GAAG,iBAAiB,GAAG,SAAS,GAAG,OAAO,CAAC;AACjG,MAAM,MAAM,UAAU,GAAG,WAAW,GAAG,eAAe,GAAG,SAAS,CAAC;AAEnE,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,aAAa,GAAG,YAAY,GAAG,UAAU,CAAC;IAClD,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IAClC,4EAA4E;IAC5E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iFAAiF;IACjF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,uEAAuE;IACvE,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,sEAAsE;IACtE,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,qFAAqF;AACrF,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAS;IACpC,OAAO,CAAC,WAAW,CAAyB;gBAEhC,OAAO,GAAE,mBAAwB;IAM7C,qEAAqE;WACxD,MAAM,CAAC,OAAO,GAAE,mBAAwB,GAAG,OAAO,CAAC,YAAY,CAAC;IAK7E,sCAAsC;IAChC,aAAa,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YAO1B,cAAc;IAU5B;;;;;;OAMG;IACH,cAAc,CAAC,IAAI,EAAE;QAAE,IAAI,CAAC,EAAE,QAAQ,CAAC;QAAC,GAAG,CAAC,EAAE,OAAO,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,cAAc,EAAE;IA0BxF,+EAA+E;IACzE,OAAO,CAAC,OAAO,EAAE,cAAc,EAAE,EAAE,OAAO,GAAE,cAAmB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;YAmBhF,UAAU;IA+DxB,6EAA6E;IACvE,IAAI,CAAC,OAAO,GAAE;QAAE,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;KAAO,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;YAYzD,OAAO;IAUrB;;;OAGG;IACG,MAAM,CAAC,OAAO,EAAE,cAAc,EAAE,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;YAW9E,SAAS;CAgBxB"}
1
+ {"version":3,"file":"installer.d.ts","sourceRoot":"","sources":["../../src/skill/installer.ts"],"names":[],"mappings":"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"}
@@ -14,17 +14,19 @@ import { existsSync } from 'node:fs';
14
14
  import { homedir } from 'node:os';
15
15
  import { dirname, join } from 'node:path';
16
16
  import { listBundledSkillsIn, listSkillFiles, readCliVersion, resolveSkillsRoot } from './assets.js';
17
- import { detectInstalledHosts, hostSkillsRoot } from './hosts.js';
17
+ import { ALL_EXCLUDED_HOSTS, detectInstalledHosts, hostSkillsRoot, projectSkillsRoot, PROJECT_HOSTS, } from './hosts.js';
18
18
  import { classifyTarget, readMarker, sha256File, writeMarker } from './ownership.js';
19
19
  export class SkillManager {
20
20
  homeDir;
21
21
  skillsRoot;
22
22
  cliVersion;
23
+ projectRoot;
23
24
  skillsCache = null;
24
25
  constructor(options = {}) {
25
26
  this.homeDir = options.homeDir ?? homedir();
26
27
  this.skillsRoot = options.skillsRoot ?? resolveSkillsRoot();
27
28
  this.cliVersion = options.cliVersion ?? 'unknown';
29
+ this.projectRoot = options.projectRoot ?? process.cwd();
28
30
  }
29
31
  /** Async factory that resolves the CLI version from package.json. */
30
32
  static async create(options = {}) {
@@ -51,27 +53,43 @@ export class SkillManager {
51
53
  /**
52
54
  * Resolve which host skills-roots to act on.
53
55
  * - `--dir` wins (single custom skills-root, host label "custom")
54
- * - `--all` → every detected host (those with an existing ~/.<host>)
56
+ * - `--scope project` requires `--host` (a ProjectHost) or `--dir`; `--all` is
57
+ * user-scope only because writing every vendor repo directory is spammy
58
+ * - `--all` (user scope) → every detected host except ALL_EXCLUDED_HOSTS
55
59
  * - `--host <h>` → that host
56
60
  * - none → auto-detect: exactly one detected host is used; 0 or >1 is an error
57
61
  */
58
62
  resolveTargets(opts) {
63
+ const scope = opts.scope ?? 'user';
64
+ if (scope === 'project') {
65
+ if (opts.all) {
66
+ throw new Error(`--all is user-scope only. For --scope project pass --host <${PROJECT_HOSTS.join('|')}> or --dir <path>.`);
67
+ }
68
+ if (opts.dir) {
69
+ return [{ host: 'custom', destRoot: opts.dir, scope }];
70
+ }
71
+ if (!opts.host || !PROJECT_HOSTS.includes(opts.host)) {
72
+ throw new Error(`--scope project requires --host <${PROJECT_HOSTS.join('|')}> (or --dir <path>).`);
73
+ }
74
+ const host = opts.host;
75
+ return [{ host, destRoot: projectSkillsRoot(host, this.projectRoot), scope }];
76
+ }
59
77
  if (opts.dir) {
60
- return [{ host: 'custom', destRoot: opts.dir }];
78
+ return [{ host: 'custom', destRoot: opts.dir, scope }];
61
79
  }
62
80
  if (opts.all) {
63
- const detected = detectInstalledHosts(this.homeDir);
81
+ const detected = detectInstalledHosts(this.homeDir).filter((h) => !ALL_EXCLUDED_HOSTS.includes(h));
64
82
  if (detected.length === 0) {
65
83
  throw new Error(`No supported host directory found under ${this.homeDir}. Pass --host <name> or --dir <path>.`);
66
84
  }
67
- return detected.map((host) => ({ host, destRoot: hostSkillsRoot(host, this.homeDir) }));
85
+ return detected.map((host) => ({ host, destRoot: hostSkillsRoot(host, this.homeDir), scope }));
68
86
  }
69
87
  if (opts.host) {
70
- return [{ host: opts.host, destRoot: hostSkillsRoot(opts.host, this.homeDir) }];
88
+ return [{ host: opts.host, destRoot: hostSkillsRoot(opts.host, this.homeDir), scope }];
71
89
  }
72
90
  const detected = detectInstalledHosts(this.homeDir);
73
91
  if (detected.length === 1) {
74
- return [{ host: detected[0], destRoot: hostSkillsRoot(detected[0], this.homeDir) }];
92
+ return [{ host: detected[0], destRoot: hostSkillsRoot(detected[0], this.homeDir), scope }];
75
93
  }
76
94
  if (detected.length === 0) {
77
95
  throw new Error(`No supported host directory found under ${this.homeDir}. Pass --host <name> or --dir <path>.`);
@@ -89,12 +107,12 @@ export class SkillManager {
89
107
  for (const target of targets) {
90
108
  for (const skill of skills) {
91
109
  const destDir = join(target.destRoot, skill);
92
- results.push(await this.installOne(target.host, skill, destDir, filesBySkill.get(skill) ?? [], options));
110
+ results.push(await this.installOne(target.host, skill, destDir, filesBySkill.get(skill) ?? [], options, target.scope));
93
111
  }
94
112
  }
95
113
  return results;
96
114
  }
97
- async installOne(host, skill, targetDir, files, options) {
115
+ async installOne(host, skill, targetDir, files, options, scope = 'user') {
98
116
  const assetDir = join(this.skillsRoot, skill);
99
117
  const state = await classifyTarget(targetDir);
100
118
  if (state === 'foreign' && !options.force) {
@@ -103,13 +121,14 @@ export class SkillManager {
103
121
  skill,
104
122
  targetDir,
105
123
  status: 'skipped-foreign',
124
+ scope,
106
125
  reason: 'Directory exists but is not managed by pxbaas-cli. Re-run with --force to back it up and overwrite.',
107
126
  };
108
127
  }
109
128
  const plannedStatus = state === 'owned' ? 'updated' : 'installed';
110
129
  if (options.dryRun) {
111
130
  const verb = state === 'owned' ? 'update' : 'install';
112
- return { host, skill, targetDir, status: 'dry-run', filesWritten: files, reason: `would ${verb}` };
131
+ return { host, skill, targetDir, status: 'dry-run', scope, filesWritten: files, reason: `would ${verb}` };
113
132
  }
114
133
  try {
115
134
  if (state === 'foreign' && options.force) {
@@ -139,10 +158,10 @@ export class SkillManager {
139
158
  throw new Error(`Verification failed: missing ${rel} after copy`);
140
159
  }
141
160
  }
142
- return { host, skill, targetDir, status: plannedStatus, filesWritten: files, skillVersion: this.cliVersion };
161
+ return { host, skill, targetDir, status: plannedStatus, scope, filesWritten: files, skillVersion: this.cliVersion };
143
162
  }
144
163
  catch (err) {
145
- return { host, skill, targetDir, status: 'error', reason: err instanceof Error ? err.message : String(err) };
164
+ return { host, skill, targetDir, status: 'error', scope, reason: err instanceof Error ? err.message : String(err) };
146
165
  }
147
166
  }
148
167
  /** Report install state of every bundled skill across all detected hosts. */
@@ -152,20 +171,39 @@ export class SkillManager {
152
171
  for (const host of detectInstalledHosts(this.homeDir)) {
153
172
  const destRoot = hostSkillsRoot(host, this.homeDir);
154
173
  for (const skill of skills) {
155
- results.push(await this.listOne(host, skill, join(destRoot, skill)));
174
+ results.push(await this.listOne(host, skill, join(destRoot, skill), 'user'));
175
+ }
176
+ }
177
+ return results;
178
+ }
179
+ /** Report install state of bundled skills in repository-level directories. */
180
+ async listProject(options = {}) {
181
+ const skills = await this.selectedSkills(options.skills);
182
+ const results = [];
183
+ const seenRoots = new Set();
184
+ for (const host of PROJECT_HOSTS) {
185
+ const destRoot = projectSkillsRoot(host, this.projectRoot);
186
+ // codex and the neutral `agents` key share .agents/skills: report once.
187
+ if (seenRoots.has(destRoot))
188
+ continue;
189
+ seenRoots.add(destRoot);
190
+ if (!existsSync(destRoot))
191
+ continue;
192
+ for (const skill of skills) {
193
+ results.push(await this.listOne(host, skill, join(destRoot, skill), 'project'));
156
194
  }
157
195
  }
158
196
  return results;
159
197
  }
160
- async listOne(host, skill, targetDir) {
198
+ async listOne(host, skill, targetDir, scope = 'user') {
161
199
  const state = await classifyTarget(targetDir);
162
200
  if (state === 'absent')
163
- return { host, skill, targetDir, status: 'not-installed' };
201
+ return { host, skill, targetDir, status: 'not-installed', scope };
164
202
  if (state === 'foreign') {
165
- return { host, skill, targetDir, status: 'foreign', reason: 'directory exists but is not managed by pxbaas-cli' };
203
+ return { host, skill, targetDir, status: 'foreign', scope, reason: 'directory exists but is not managed by pxbaas-cli' };
166
204
  }
167
205
  const marker = await readMarker(targetDir);
168
- return { host, skill, targetDir, status: 'installed', skillVersion: marker?.skillVersion, installedAt: marker?.installedAt };
206
+ return { host, skill, targetDir, status: 'installed', scope, skillVersion: marker?.skillVersion, installedAt: marker?.installedAt };
169
207
  }
170
208
  /**
171
209
  * Remove bundled skills from each target. Only removes directories owned by
@@ -176,27 +214,27 @@ export class SkillManager {
176
214
  const results = [];
177
215
  for (const target of targets) {
178
216
  for (const skill of skills) {
179
- results.push(await this.removeOne(target.host, skill, join(target.destRoot, skill), options));
217
+ results.push(await this.removeOne(target.host, skill, join(target.destRoot, skill), options, target.scope));
180
218
  }
181
219
  }
182
220
  return results;
183
221
  }
184
- async removeOne(host, skill, targetDir, options) {
222
+ async removeOne(host, skill, targetDir, options, scope = 'user') {
185
223
  const state = await classifyTarget(targetDir);
186
224
  if (state === 'absent')
187
- return { host, skill, targetDir, status: 'not-installed' };
225
+ return { host, skill, targetDir, status: 'not-installed', scope };
188
226
  if (state === 'foreign') {
189
- return { host, skill, targetDir, status: 'skipped-foreign', reason: 'Directory is not managed by pxbaas-cli; refusing to delete.' };
227
+ return { host, skill, targetDir, status: 'skipped-foreign', scope, reason: 'Directory is not managed by pxbaas-cli; refusing to delete.' };
190
228
  }
191
229
  if (options.dryRun || !options.confirm) {
192
- return { host, skill, targetDir, status: 'dry-run', reason: options.dryRun ? 'would remove' : 'pass --confirm to remove' };
230
+ return { host, skill, targetDir, status: 'dry-run', scope, reason: options.dryRun ? 'would remove' : 'pass --confirm to remove' };
193
231
  }
194
232
  try {
195
233
  await rm(targetDir, { recursive: true, force: true });
196
- return { host, skill, targetDir, status: 'removed' };
234
+ return { host, skill, targetDir, status: 'removed', scope };
197
235
  }
198
236
  catch (err) {
199
- return { host, skill, targetDir, status: 'error', reason: err instanceof Error ? err.message : String(err) };
237
+ return { host, skill, targetDir, status: 'error', scope, reason: err instanceof Error ? err.message : String(err) };
200
238
  }
201
239
  }
202
240
  }
@@ -1 +1 @@
1
- {"version":3,"file":"installer.js","sourceRoot":"","sources":["../../src/skill/installer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"installer.js","sourceRoot":"","sources":["../../src/skill/installer.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@polardbx/pxbaas",
3
- "version": "0.1.0-beta.8",
3
+ "version": "0.1.0-beta.9",
4
4
  "description": "PolarDB-X BaaS CLI application",
5
5
  "keywords": [
6
6
  "polardbx",
@@ -35,7 +35,7 @@
35
35
  "inquirer": "^9.2.0",
36
36
  "jsonwebtoken": "^9.0.0",
37
37
  "keytar": "^7.9.0",
38
- "@polardbx/pxbaas-client": "0.1.0-beta.8"
38
+ "@polardbx/pxbaas-client": "0.1.0-beta.9"
39
39
  },
40
40
  "devDependencies": {
41
41
  "@types/inquirer": "^9.0.0",
@@ -178,6 +178,6 @@ For provisioning / multi-instance selection see **provision.md**; for the `pxbaa
178
178
  ## Installing / updating these skills
179
179
 
180
180
  The CLI ships **two** bundled skills — `pxbaas-cli` (this one) and `pxbaas-app-spec` (webapp authoring) — installable into Agent hosts (offline, no login):
181
- `pxbaas skill install --host <qoder|claude|cursor|qwen|hermes>` (or `--all`) installs **all** bundled skills; `--skill <name>` installs just one. Also `pxbaas skill list` and `pxbaas skill remove`. These are setup/meta commands, not part of the data-plane surface above.
181
+ `pxbaas skill install --host <qoder|claude|cursor|qwen|hermes|codex|gemini|copilot|qwenworkcn|agents>` (or `--all`, which skips the neutral `agents` location) installs **all** bundled skills; `--skill <name>` installs just one. `--scope project` writes repository-level conventions instead (`.agents/skills`, `.gemini/skills`, `.github/skills`, `.claude/skills`, `.qwen/skills`, `.trae/skills`, `.codebuddy/skills`, `.cline/skills`), so skills travel with the code; with `--agents-md` it also maintains a managed pointer block in AGENTS.md for agents without a SKILL.md convention. Also `pxbaas skill list` and `pxbaas skill remove` (two-phase). These are setup/meta commands, not part of the data-plane surface above.
182
182
 
183
183
  > The command surface above is derived from the actual source (`apps/baas/src`). When commands change, update this skill and the references accordingly.