@tmddev/tmd 0.3.1 → 0.3.3

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
@@ -102,7 +102,7 @@ Optional:
102
102
  - **`pnpm build:native`** — Rebuild only the `tmd-skills` Rust binary (faster when only Rust code changed).
103
103
  - **`./bin/agent-browser install`** — When using the agent-browser skill, install the agent-browser CLI if this script is provided (e.g. by the agent-browser project; skip if not present).
104
104
 
105
- Example: install a skill from an ecosystem repo (defaults to `npx skills`), then sync into TMD layout + DB:
105
+ Example: install a skill from an ecosystem repo (defaults to `npx skills`), then re-index into the skills DB:
106
106
 
107
107
  ```bash
108
108
  # List skills in a repo
@@ -111,8 +111,8 @@ tmd skills add vercel-labs/agent-skills --list
111
111
  # Install a specific skill to the current project (non-interactive)
112
112
  tmd skills add vercel-labs/agent-skills --skill web-design-guidelines -y
113
113
 
114
- # If the skill was installed outside the detected canonical store, or the Desktop UI doesn't show it yet:
115
- tmd skills sync --all
114
+ # If the Desktop UI doesn't show it yet:
115
+ tmd skills sync
116
116
  ```
117
117
 
118
118
  ## Quick Start
@@ -219,13 +219,10 @@ tmd act <task-id>
219
219
 
220
220
  ### Skills (npx-first)
221
221
 
222
- - `tmd skills add <source>` defaults to the ecosystem CLI (`npx skills add`) and then syncs to:
223
- - `{project_root}/.agents/skills/<name>`
224
- - `{project_root}/.tmd/skills/<name>`
225
- - `{project_root}/.tmd/skills.db`
226
- - `tmd skills sync` re-syncs the detected canonical store into TMD layout + DB.
222
+ - `tmd skills add <source>` defaults to the ecosystem CLI (`npx skills add`), installs skills under `{project_root}/.agents/skills/<name>`, and then indexes them into `{project_root}/.tmd/skills.db`.
223
+ - `tmd skills sync` re-indexes `{project_root}/.agents/skills/` into `{project_root}/.tmd/skills.db`.
227
224
 
228
- See [`docs/skills.md`](docs/skills.md) for commands, flags, canonical store discovery rules, and troubleshooting.
225
+ See [`docs/skills.md`](docs/skills.md) for commands, flags, and troubleshooting.
229
226
 
230
227
  ### Desktop
231
228
 
@@ -251,9 +248,13 @@ See [`docs/skills.md`](docs/skills.md) for commands, flags, canonical store disc
251
248
  │ └── [task-id]/
252
249
  │ ├── improvement.md
253
250
  │ └── standardization.md
251
+ ```
252
+
253
+ ```
254
+ .agents/
254
255
  └── skills/
255
256
  └── [skill-name]/
256
- ├── skill.md
257
+ ├── SKILL.md
257
258
  ├── steps.yaml
258
259
  ├── config.yaml
259
260
  └── metadata.yaml
package/dist/cli.js CHANGED
@@ -168,14 +168,13 @@ program
168
168
  .option('--input <params>', 'Input parameters for invoke')
169
169
  .option('--skill <skill-name>', 'Skill name (npx skills add --skill)')
170
170
  .option('-a, --agent <agent>', 'Target agent for npx skills (repeatable)', (v, prev) => (prev ?? []).concat([v]))
171
- .option('-g, --global', 'Use global scope for npx skills')
172
171
  .option('-y, --yes', 'Skip prompts for npx skills')
173
172
  .option('-l, --list', 'List skills in a repository (npx skills add --list)')
174
173
  .option('--description <desc>', 'Description for create/update')
175
174
  .option('--tags <t1,t2>', 'Comma-separated tags for create/update')
176
175
  .option('--tag <tag>', 'Filter list by tag (repeatable)', (v, prev) => (prev ?? []).concat([v]))
177
176
  .option('--force', 'Remove without confirmation, or overwrite existing skill on add')
178
- .option('--all', 'With remove: also delete agent/IDE links. With create/add/update: also create symlinks under .cursor, .agents, .codex, .opencode, etc. so the skill is available to those IDEs')
177
+ .option('--all', 'For add: install all skills from a repository (npx skills add --all)')
179
178
  .option('--github', 'Import skill from GitHub repository')
180
179
  .option('--branch <branch>', 'GitHub branch to fetch from (default: main/master)')
181
180
  .option('--path <path>', 'Custom path to skill file in repository')
@@ -59,27 +59,6 @@ export async function skillsCommand(action, name, options) {
59
59
  const cwd = process.cwd();
60
60
  const base = () => ['--project-root', cwd];
61
61
  if (!action || action === 'list') {
62
- // Default: show npx canonical store (project `./skills/` or `~/skills/` with --global).
63
- const outNpx = runTmdSkills([
64
- 'list-npx',
65
- ...base(),
66
- ...(options?.global ? ['--global'] : []),
67
- ...tagArgs(options?.tag),
68
- ]);
69
- const canonical = JSON.parse(outNpx || '[]');
70
- if (canonical.length > 0) {
71
- console.log(chalk.bold('\nInstalled Skills (canonical store):'));
72
- console.log('─'.repeat(60));
73
- for (const s of canonical) {
74
- console.log(` ${chalk.cyan(s.name)}`);
75
- if (s.description)
76
- console.log(` ${chalk.gray(s.description)}`);
77
- }
78
- console.log('─'.repeat(60));
79
- console.log(chalk.gray(`Total: ${String(canonical.length)} skill(s)`));
80
- return;
81
- }
82
- // Fallback: show TMD-managed skills (useful for skills created via tmd).
83
62
  const out = runTmdSkills(['list', ...base(), ...tagArgs(options?.tag)]);
84
63
  const skills = JSON.parse(out || '[]');
85
64
  if (skills.length === 0) {
@@ -87,7 +66,7 @@ export async function skillsCommand(action, name, options) {
87
66
  console.log(chalk.gray('Install with: tmd skills add <owner/repo>'));
88
67
  return;
89
68
  }
90
- console.log(chalk.bold('\nAvailable Skills (tmd-managed):'));
69
+ console.log(chalk.bold('\nInstalled Skills:'));
91
70
  console.log('─'.repeat(60));
92
71
  for (const s of skills) {
93
72
  const sourceTag = s.source === 'github' ? chalk.blue(' [github]') : '';
@@ -191,19 +170,14 @@ export async function skillsCommand(action, name, options) {
191
170
  return;
192
171
  }
193
172
  else if (action === 'sync') {
194
- // Sync npx canonical store into .agents/.tmd and upsert to .tmd/skills.db.
195
- // - default source store: ./skills
196
- // - with -g/--global: ~/skills
173
+ // Re-index skills from `.agents/skills` into `.tmd/skills.db`.
197
174
  const out = runTmdSkills([
198
175
  'sync-npx',
199
176
  ...base(),
200
177
  ...(name ? ['--source', name] : []),
201
- ...(options?.global ? ['--global'] : []),
202
- ...(options?.all ? ['--all'] : []),
203
- ...(options?.force ? ['--force'] : []),
204
178
  ]);
205
179
  const skills = JSON.parse(out || '[]');
206
- console.log(chalk.green(`✓ Synced ${String(skills.length)} skill(s) from npx canonical store`));
180
+ console.log(chalk.green(`✓ Re-indexed ${String(skills.length)} skill(s)`));
207
181
  return;
208
182
  }
209
183
  else if (action === 'add') {
@@ -225,7 +199,6 @@ export async function skillsCommand(action, name, options) {
225
199
  ...(options?.skill ? ['--skill', options.skill] : []),
226
200
  ...(options?.branch ? ['--branch', options.branch] : []),
227
201
  ...(options?.force ? ['--force'] : []),
228
- ...(options?.all ? ['--all'] : []),
229
202
  ];
230
203
  const out = runTmdSkills(ghArgs);
231
204
  const skill = JSON.parse(out);
@@ -233,13 +206,12 @@ export async function skillsCommand(action, name, options) {
233
206
  console.log(chalk.gray(` Location: ${getSkillDir(skill.name)}`));
234
207
  return;
235
208
  }
236
- // Default: use Rust `tmd-skills npx-add` (it invokes npx, syncs to .tmd/.agents, and upserts to .tmd/skills.db;
209
+ // Default: use Rust `tmd-skills npx-add` (it invokes npx, then re-indexes `.agents/skills` into `.tmd/skills.db`;
237
210
  // if npx fails, it falls back to GitHub import inside the Rust binary).
238
211
  const args = [
239
212
  'npx-add',
240
213
  name,
241
214
  ...base(),
242
- ...(options?.global ? ['--global'] : []),
243
215
  ...(options?.yes ? ['--yes'] : []),
244
216
  ...(options?.list ? ['--list'] : []),
245
217
  ...(options?.all ? ['--all'] : []),
@@ -261,7 +233,14 @@ export async function skillsCommand(action, name, options) {
261
233
  console.error(chalk.red('✗ Skill name required for create'));
262
234
  process.exit(1);
263
235
  }
264
- const args = ['create', '--name', name, ...base(), ...(options?.description ? ['--description', options.description] : []), ...(options?.tags ? ['--tags', parseTags(options.tags).join(',')] : []), ...(options?.all ? ['--all'] : [])];
236
+ const args = [
237
+ 'create',
238
+ '--name',
239
+ name,
240
+ ...base(),
241
+ ...(options?.description ? ['--description', options.description] : []),
242
+ ...(options?.tags ? ['--tags', parseTags(options.tags).join(',')] : []),
243
+ ];
265
244
  runTmdSkills(args);
266
245
  console.log(chalk.green(`✓ Skill created: ${name}`));
267
246
  console.log(chalk.gray(` Location: ${getSkillDir(name)}`));
@@ -274,9 +253,7 @@ export async function skillsCommand(action, name, options) {
274
253
  const out = runTmdSkills([
275
254
  'npx-update',
276
255
  ...base(),
277
- ...(options?.global ? ['--global'] : []),
278
256
  ...(options?.yes ? ['--yes'] : []),
279
- ...(options?.all ? ['--all'] : []),
280
257
  ...(options?.agent ? options.agent.flatMap((a) => ['--agent', a]) : []),
281
258
  ]);
282
259
  const synced = JSON.parse(out || '[]');
package/dist/tmd-config CHANGED
Binary file
Binary file
package/dist/tmd-plan-gen CHANGED
Binary file
package/dist/tmd-skills CHANGED
Binary file
package/dist/types.d.ts CHANGED
@@ -38,7 +38,6 @@ export interface SkillsCommandOptions {
38
38
  input?: string;
39
39
  skill?: string;
40
40
  agent?: string[];
41
- global?: boolean;
42
41
  yes?: boolean;
43
42
  list?: boolean;
44
43
  description?: string;
@@ -36,7 +36,7 @@ export function getActDir(taskId) {
36
36
  return getTaskDir('act', taskId);
37
37
  }
38
38
  export function getSkillsDir() {
39
- return join(TMD_DIR, 'skills');
39
+ return join(AGENTS_DIR, 'skills');
40
40
  }
41
41
  export function getSkillDir(skillName) {
42
42
  return join(getSkillsDir(), skillName);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tmddev/tmd",
3
- "version": "0.3.1",
3
+ "version": "0.3.3",
4
4
  "description": "Task Markdown Driven - A lightweight PDCA cycle management framework integrated with OpenSpec",
5
5
  "type": "module",
6
6
  "publishConfig": {