@topmindspace/tms-skills 2.0.0 → 2.0.2

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.
Files changed (99) hide show
  1. package/CHANGELOG.md +139 -123
  2. package/README.md +126 -103
  3. package/bin/tms-skills.js +160 -160
  4. package/package.json +48 -48
  5. package/top-ppt-html/README.md +254 -253
  6. package/top-ppt-html/SKILL.md +111 -111
  7. package/top-ppt-html/assets/examples/2026-09-09-architecture-graphite-dark.html +3873 -3926
  8. package/top-ppt-html/assets/examples/2026-09-09-architecture-graphite-dark.model.json +167 -167
  9. package/top-ppt-html/assets/examples/2026-09-09-architecture-spectrum.html +3873 -3926
  10. package/top-ppt-html/assets/examples/2026-09-09-architecture-spectrum.model.json +167 -167
  11. package/top-ppt-html/assets/examples/2026-09-09-presentation-apple-mono.html +4272 -4325
  12. package/top-ppt-html/assets/examples/2026-09-09-presentation-apple-mono.model.json +320 -320
  13. package/top-ppt-html/assets/examples/2026-09-09-presentation-brand-red.html +4272 -4325
  14. package/top-ppt-html/assets/examples/2026-09-09-presentation-brand-red.model.json +320 -320
  15. package/top-ppt-html/assets/examples/2026-09-09-presentation-business-blue.html +4272 -4325
  16. package/top-ppt-html/assets/examples/2026-09-09-presentation-business-blue.model.json +320 -320
  17. package/top-ppt-html/assets/examples/2026-09-09-research-deep-teal.html +5474 -5527
  18. package/top-ppt-html/assets/examples/2026-09-09-research-deep-teal.model.json +913 -913
  19. package/top-ppt-html/assets/examples/2026-09-09-research-indigo-violet.html +5474 -5527
  20. package/top-ppt-html/assets/examples/2026-09-09-research-indigo-violet.model.json +913 -913
  21. package/top-ppt-html/assets/examples/2026-09-09-research-mckinsey.html +5474 -5527
  22. package/top-ppt-html/assets/examples/2026-09-09-research-mckinsey.model.json +913 -913
  23. package/top-ppt-html/assets/examples/2026-09-09-research-warm-sand.html +5474 -5527
  24. package/top-ppt-html/assets/examples/2026-09-09-research-warm-sand.model.json +913 -913
  25. package/top-ppt-html/assets/pptx-export.js +1944 -1944
  26. package/top-ppt-html/assets/style-gallery.html +559 -589
  27. package/top-ppt-html/assets/templates/architecture.html +3675 -3728
  28. package/top-ppt-html/assets/templates/engine.css +787 -840
  29. package/top-ppt-html/assets/templates/presentation.html +3685 -3738
  30. package/top-ppt-html/assets/templates/research.html +3964 -4017
  31. package/top-ppt-html/assets/templates/ui.js +520 -520
  32. package/top-ppt-html/assets/theme-overview-architecture.png +0 -0
  33. package/top-ppt-html/assets/theme-overview-presentation.png +0 -0
  34. package/top-ppt-html/assets/theme-overview-research.png +0 -0
  35. package/top-ppt-html/assets/theme-overview.png +0 -0
  36. package/top-ppt-html/evals/prompts.csv +15 -15
  37. package/top-ppt-html/evals/rubric.schema.json +25 -25
  38. package/top-ppt-html/evals/run_evals.py +220 -220
  39. package/top-ppt-html/evals/trace.example.json +16 -16
  40. package/top-ppt-html/package-lock.json +175 -0
  41. package/top-ppt-html/package.json +30 -35
  42. package/top-ppt-html/references/charts-basic.md +624 -624
  43. package/top-ppt-html/references/charts-discipline.md +108 -108
  44. package/top-ppt-html/references/charts-extended.md +482 -482
  45. package/top-ppt-html/references/charts.md +28 -28
  46. package/top-ppt-html/references/components-atoms.md +624 -624
  47. package/top-ppt-html/references/components.md +30 -30
  48. package/top-ppt-html/references/content-rules.md +490 -490
  49. package/top-ppt-html/references/design-system-engine.md +235 -235
  50. package/top-ppt-html/references/design-system.md +471 -478
  51. package/top-ppt-html/references/failure-modes.md +214 -214
  52. package/top-ppt-html/references/high-fidelity.md +127 -127
  53. package/top-ppt-html/references/icons.md +397 -397
  54. package/top-ppt-html/references/industry-benchmark.md +105 -105
  55. package/top-ppt-html/references/infographics-stats.md +308 -308
  56. package/top-ppt-html/references/infographics-structure.md +226 -226
  57. package/top-ppt-html/references/infographics.md +43 -43
  58. package/top-ppt-html/references/layout-grammar.md +315 -315
  59. package/top-ppt-html/references/layouts-architecture.md +108 -108
  60. package/top-ppt-html/references/layouts-combo.md +600 -600
  61. package/top-ppt-html/references/layouts-research.md +160 -160
  62. package/top-ppt-html/references/modes.md +254 -254
  63. package/top-ppt-html/references/outline-design.md +275 -275
  64. package/top-ppt-html/references/playbook.md +266 -266
  65. package/top-ppt-html/references/pptx-export.md +209 -209
  66. package/top-ppt-html/references/reform-plan.md +252 -252
  67. package/top-ppt-html/references/styles.md +336 -370
  68. package/top-ppt-html/references/tech-design.md +138 -138
  69. package/top-ppt-html/scripts/audit_css.py +109 -109
  70. package/top-ppt-html/scripts/audit_docs.py +176 -176
  71. package/top-ppt-html/scripts/audit_skill.py +220 -220
  72. package/top-ppt-html/scripts/audit_styles.py +293 -351
  73. package/top-ppt-html/scripts/build_examples.py +2276 -2276
  74. package/top-ppt-html/scripts/build_pptx.js +2380 -2380
  75. package/top-ppt-html/scripts/capture_theme_overview.js +78 -78
  76. package/top-ppt-html/scripts/checks_html.py +127 -127
  77. package/top-ppt-html/scripts/cross_verify.py +294 -294
  78. package/top-ppt-html/scripts/env_probe.py +158 -158
  79. package/top-ppt-html/scripts/extract_model.py +210 -210
  80. package/top-ppt-html/scripts/extract_snippet.py +374 -374
  81. package/top-ppt-html/scripts/gen_channel_a.js +214 -214
  82. package/top-ppt-html/scripts/layout-constants.json +3309 -3377
  83. package/top-ppt-html/scripts/layout_slots.json +830 -830
  84. package/top-ppt-html/scripts/lib_layout_regions.js +412 -412
  85. package/top-ppt-html/scripts/measure_height.py +178 -178
  86. package/top-ppt-html/scripts/model-schema.json +547 -547
  87. package/top-ppt-html/scripts/negative_tests.py +307 -307
  88. package/top-ppt-html/scripts/package_skill.py +291 -291
  89. package/top-ppt-html/scripts/prepare_images.py +341 -341
  90. package/top-ppt-html/scripts/probe_image_export.py +188 -188
  91. package/top-ppt-html/scripts/quality_gate.py +301 -301
  92. package/top-ppt-html/scripts/regression.py +307 -308
  93. package/top-ppt-html/scripts/render_compare.py +275 -275
  94. package/top-ppt-html/scripts/render_from_model.py +698 -698
  95. package/top-ppt-html/scripts/scaffold_report.py +1054 -1054
  96. package/top-ppt-html/scripts/section-file-map.json +104 -104
  97. package/top-ppt-html/scripts/sync_runtime.py +662 -662
  98. package/top-ppt-html/scripts/validate_pptx.py +1510 -1510
  99. package/top-ppt-html/scripts/validate_report.py +1456 -1456
package/bin/tms-skills.js CHANGED
@@ -1,160 +1,160 @@
1
- #!/usr/bin/env node
2
- /**
3
- * tms-skills — TopMindspace agent skills installer
4
- *
5
- * Usage (GitHub is the primary install source — npm publish is optional):
6
- * npx github:topmindspace/tms-skills list
7
- * npx github:topmindspace/tms-skills install top-ppt-html
8
- * npx github:topmindspace/tms-skills install top-ppt-html --to ./skills-out
9
- * npx @topmindspace/tms-skills install top-ppt-html # only after npm publish
10
- */
11
- 'use strict';
12
-
13
- const fs = require('fs');
14
- const path = require('path');
15
-
16
- const ROOT = path.resolve(__dirname, '..');
17
- // Skills live at repo root (one directory per skill with SKILL.md).
18
- const INFRA_DIRS = new Set(['bin', 'docs', 'scripts', 'node_modules', 'dist', 'release-assets']);
19
-
20
- function die(msg, code = 1) {
21
- console.error(msg);
22
- process.exit(code);
23
- }
24
-
25
- function skillDir(skillId) {
26
- return path.join(ROOT, skillId);
27
- }
28
-
29
- function listSkillIds() {
30
- return fs
31
- .readdirSync(ROOT, { withFileTypes: true })
32
- .filter((d) => d.isDirectory() && !INFRA_DIRS.has(d.name) && !d.name.startsWith('.'))
33
- .filter((d) => fs.existsSync(path.join(ROOT, d.name, 'SKILL.md')))
34
- .map((d) => d.name)
35
- .sort();
36
- }
37
-
38
- function readSkillMeta(skillId) {
39
- const skillPath = skillDir(skillId);
40
- const skillMd = path.join(skillPath, 'SKILL.md');
41
- if (!fs.existsSync(skillMd)) return { id: skillId, description: '' };
42
- const text = fs.readFileSync(skillMd, 'utf8');
43
- const m = text.match(/^---\r?\n([\s\S]*?)\r?\n---/);
44
- if (!m) return { id: skillId, description: '' };
45
- const desc = (m[1].match(/^description:\s*"(.*)"\s*$/m) || m[1].match(/^description:\s*(.+)\s*$/m) || [])[1] || '';
46
- return { id: skillId, description: String(desc).slice(0, 120) };
47
- }
48
-
49
- function resolveDefaultTarget() {
50
- const candidates = [
51
- path.join(process.cwd(), '.agents', 'skills'),
52
- path.join(process.cwd(), '.claude', 'skills'),
53
- path.join(process.cwd(), '.mimocode', 'skills'),
54
- path.join(process.env.HOME || process.env.USERPROFILE || '', '.claude', 'skills'),
55
- path.join(process.env.HOME || process.env.USERPROFILE || '', '.agents', 'skills'),
56
- ];
57
- for (const dir of candidates) {
58
- if (dir && fs.existsSync(path.dirname(dir))) {
59
- return dir;
60
- }
61
- }
62
- return path.join(process.cwd(), '.agents', 'skills');
63
- }
64
-
65
- function copyDir(src, dest) {
66
- fs.mkdirSync(dest, { recursive: true });
67
- for (const entry of fs.readdirSync(src, { withFileTypes: true })) {
68
- const s = path.join(src, entry.name);
69
- const d = path.join(dest, entry.name);
70
- if (entry.isDirectory()) {
71
- if (entry.name === 'node_modules' || entry.name === 'dist' || entry.name === '__pycache__') continue;
72
- copyDir(s, d);
73
- } else if (entry.isFile()) {
74
- if (entry.name.endsWith('.pyc')) continue;
75
- fs.copyFileSync(s, d);
76
- }
77
- }
78
- }
79
-
80
- function install(skillId, targetRoot) {
81
- const src = skillDir(skillId);
82
- if (!fs.existsSync(path.join(src, 'SKILL.md'))) {
83
- die(`Skill not found: ${skillId}\nAvailable: ${listSkillIds().join(', ') || '(none)'}`);
84
- }
85
- const dest = path.join(targetRoot, skillId);
86
- fs.mkdirSync(targetRoot, { recursive: true });
87
- if (fs.existsSync(dest)) {
88
- fs.rmSync(dest, { recursive: true, force: true });
89
- }
90
- copyDir(src, dest);
91
- console.log(`Installed ${skillId}`);
92
- console.log(` from ${src}`);
93
- console.log(` to ${dest}`);
94
- console.log('');
95
- console.log('Optional (PPTX export only):');
96
- console.log(` cd "${dest}" && npm install`);
97
- }
98
-
99
- function usage() {
100
- console.log(`tms-skills — install TopMindspace agent skills
101
-
102
- Usage:
103
- tms-skills list
104
- tms-skills install <skill-id> [--to <dir>]
105
- tms-skills help
106
-
107
- Examples:
108
- npx github:topmindspace/tms-skills list
109
- npx github:topmindspace/tms-skills install top-ppt-html
110
- npx github:topmindspace/tms-skills install top-ppt-html --to ./.agents/skills
111
-
112
- # Optional npm package (only after @topmindspace/tms-skills is published):
113
- npx @topmindspace/tms-skills install top-ppt-html
114
- `);
115
- }
116
-
117
- function main(argv) {
118
- const args = argv.slice(2);
119
- const cmd = args[0];
120
-
121
- if (!cmd || cmd === 'help' || cmd === '--help' || cmd === '-h') {
122
- usage();
123
- return;
124
- }
125
-
126
- if (cmd === 'list' || cmd === 'ls') {
127
- const ids = listSkillIds();
128
- if (!ids.length) {
129
- console.log('No skills found in package.');
130
- return;
131
- }
132
- for (const id of ids) {
133
- const meta = readSkillMeta(id);
134
- console.log(`${id}`);
135
- if (meta.description) console.log(` ${meta.description}…`);
136
- }
137
- return;
138
- }
139
-
140
- if (cmd === 'install') {
141
- const skillId = args[1];
142
- if (!skillId || skillId.startsWith('-')) {
143
- die('Missing skill id.\n\n' + usage());
144
- }
145
- let to = null;
146
- for (let i = 2; i < args.length; i++) {
147
- if (args[i] === '--to' || args[i] === '-t') {
148
- to = args[++i];
149
- if (!to) die('Option --to requires a directory path.');
150
- }
151
- }
152
- const targetRoot = to ? path.resolve(to) : resolveDefaultTarget();
153
- install(skillId, targetRoot);
154
- return;
155
- }
156
-
157
- die(`Unknown command: ${cmd}\n\n` + usage());
158
- }
159
-
160
- main(process.argv);
1
+ #!/usr/bin/env node
2
+ /**
3
+ * tms-skills — TopMindspace agent skills installer
4
+ *
5
+ * Usage (GitHub is the primary install source — npm publish is optional):
6
+ * npx github:topmindspace/tms-skills list
7
+ * npx github:topmindspace/tms-skills install top-ppt-html
8
+ * npx github:topmindspace/tms-skills install top-ppt-html --to ./skills-out
9
+ * npx @topmindspace/tms-skills install top-ppt-html # only after npm publish
10
+ */
11
+ 'use strict';
12
+
13
+ const fs = require('fs');
14
+ const path = require('path');
15
+
16
+ const ROOT = path.resolve(__dirname, '..');
17
+ // Skills live at repo root (one directory per skill with SKILL.md).
18
+ const INFRA_DIRS = new Set(['bin', 'docs', 'scripts', 'node_modules', 'dist', 'release-assets']);
19
+
20
+ function die(msg, code = 1) {
21
+ console.error(msg);
22
+ process.exit(code);
23
+ }
24
+
25
+ function skillDir(skillId) {
26
+ return path.join(ROOT, skillId);
27
+ }
28
+
29
+ function listSkillIds() {
30
+ return fs
31
+ .readdirSync(ROOT, { withFileTypes: true })
32
+ .filter((d) => d.isDirectory() && !INFRA_DIRS.has(d.name) && !d.name.startsWith('.'))
33
+ .filter((d) => fs.existsSync(path.join(ROOT, d.name, 'SKILL.md')))
34
+ .map((d) => d.name)
35
+ .sort();
36
+ }
37
+
38
+ function readSkillMeta(skillId) {
39
+ const skillPath = skillDir(skillId);
40
+ const skillMd = path.join(skillPath, 'SKILL.md');
41
+ if (!fs.existsSync(skillMd)) return { id: skillId, description: '' };
42
+ const text = fs.readFileSync(skillMd, 'utf8');
43
+ const m = text.match(/^---\r?\n([\s\S]*?)\r?\n---/);
44
+ if (!m) return { id: skillId, description: '' };
45
+ const desc = (m[1].match(/^description:\s*"(.*)"\s*$/m) || m[1].match(/^description:\s*(.+)\s*$/m) || [])[1] || '';
46
+ return { id: skillId, description: String(desc).slice(0, 120) };
47
+ }
48
+
49
+ function resolveDefaultTarget() {
50
+ const candidates = [
51
+ path.join(process.cwd(), '.agents', 'skills'),
52
+ path.join(process.cwd(), '.claude', 'skills'),
53
+ path.join(process.cwd(), '.mimocode', 'skills'),
54
+ path.join(process.env.HOME || process.env.USERPROFILE || '', '.claude', 'skills'),
55
+ path.join(process.env.HOME || process.env.USERPROFILE || '', '.agents', 'skills'),
56
+ ];
57
+ for (const dir of candidates) {
58
+ if (dir && fs.existsSync(path.dirname(dir))) {
59
+ return dir;
60
+ }
61
+ }
62
+ return path.join(process.cwd(), '.agents', 'skills');
63
+ }
64
+
65
+ function copyDir(src, dest) {
66
+ fs.mkdirSync(dest, { recursive: true });
67
+ for (const entry of fs.readdirSync(src, { withFileTypes: true })) {
68
+ const s = path.join(src, entry.name);
69
+ const d = path.join(dest, entry.name);
70
+ if (entry.isDirectory()) {
71
+ if (entry.name === 'node_modules' || entry.name === 'dist' || entry.name === '__pycache__') continue;
72
+ copyDir(s, d);
73
+ } else if (entry.isFile()) {
74
+ if (entry.name.endsWith('.pyc')) continue;
75
+ fs.copyFileSync(s, d);
76
+ }
77
+ }
78
+ }
79
+
80
+ function install(skillId, targetRoot) {
81
+ const src = skillDir(skillId);
82
+ if (!fs.existsSync(path.join(src, 'SKILL.md'))) {
83
+ die(`Skill not found: ${skillId}\nAvailable: ${listSkillIds().join(', ') || '(none)'}`);
84
+ }
85
+ const dest = path.join(targetRoot, skillId);
86
+ fs.mkdirSync(targetRoot, { recursive: true });
87
+ if (fs.existsSync(dest)) {
88
+ fs.rmSync(dest, { recursive: true, force: true });
89
+ }
90
+ copyDir(src, dest);
91
+ console.log(`Installed ${skillId}`);
92
+ console.log(` from ${src}`);
93
+ console.log(` to ${dest}`);
94
+ console.log('');
95
+ console.log('Optional (PPTX export only):');
96
+ console.log(` cd "${dest}" && npm install`);
97
+ }
98
+
99
+ function usage() {
100
+ console.log(`tms-skills — install TopMindspace agent skills
101
+
102
+ Usage:
103
+ tms-skills list
104
+ tms-skills install <skill-id> [--to <dir>]
105
+ tms-skills help
106
+
107
+ Examples:
108
+ npx github:topmindspace/tms-skills list
109
+ npx github:topmindspace/tms-skills install top-ppt-html
110
+ npx github:topmindspace/tms-skills install top-ppt-html --to ./.agents/skills
111
+
112
+ # Optional npm package (only after @topmindspace/tms-skills is published):
113
+ npx @topmindspace/tms-skills install top-ppt-html
114
+ `);
115
+ }
116
+
117
+ function main(argv) {
118
+ const args = argv.slice(2);
119
+ const cmd = args[0];
120
+
121
+ if (!cmd || cmd === 'help' || cmd === '--help' || cmd === '-h') {
122
+ usage();
123
+ return;
124
+ }
125
+
126
+ if (cmd === 'list' || cmd === 'ls') {
127
+ const ids = listSkillIds();
128
+ if (!ids.length) {
129
+ console.log('No skills found in package.');
130
+ return;
131
+ }
132
+ for (const id of ids) {
133
+ const meta = readSkillMeta(id);
134
+ console.log(`${id}`);
135
+ if (meta.description) console.log(` ${meta.description}…`);
136
+ }
137
+ return;
138
+ }
139
+
140
+ if (cmd === 'install') {
141
+ const skillId = args[1];
142
+ if (!skillId || skillId.startsWith('-')) {
143
+ die('Missing skill id.\n\n' + usage());
144
+ }
145
+ let to = null;
146
+ for (let i = 2; i < args.length; i++) {
147
+ if (args[i] === '--to' || args[i] === '-t') {
148
+ to = args[++i];
149
+ if (!to) die('Option --to requires a directory path.');
150
+ }
151
+ }
152
+ const targetRoot = to ? path.resolve(to) : resolveDefaultTarget();
153
+ install(skillId, targetRoot);
154
+ return;
155
+ }
156
+
157
+ die(`Unknown command: ${cmd}\n\n` + usage());
158
+ }
159
+
160
+ main(process.argv);
package/package.json CHANGED
@@ -1,48 +1,48 @@
1
- {
2
- "name": "@topmindspace/tms-skills",
3
- "version": "2.0.0",
4
- "description": "TopMindspace 智能体技能 monorepo — 通过 GitHub npx 安装技能(top-ppt-html 等)。",
5
- "license": "MIT",
6
- "author": "TopMindspace",
7
- "repository": {
8
- "type": "git",
9
- "url": "git+https://github.com/topmindspace/tms-skills.git"
10
- },
11
- "homepage": "https://github.com/topmindspace/tms-skills#readme",
12
- "bugs": {
13
- "url": "https://github.com/topmindspace/tms-skills/issues"
14
- },
15
- "keywords": [
16
- "agent-skills",
17
- "ai-skills",
18
- "slides",
19
- "pptx",
20
- "report",
21
- "top-ppt-html"
22
- ],
23
- "type": "commonjs",
24
- "bin": {
25
- "tms-skills": "bin/tms-skills.js"
26
- },
27
- "files": [
28
- "bin",
29
- "top-ppt-html",
30
- "README.md",
31
- "LICENSE",
32
- "CHANGELOG.md"
33
- ],
34
- "engines": {
35
- "node": ">=18"
36
- },
37
- "scripts": {
38
- "list": "node bin/tms-skills.js list",
39
- "install:skills": "node bin/tms-skills.js install top-ppt-html",
40
- "check": "python top-ppt-html/scripts/package_skill.py --check",
41
- "privacy": "python scripts/ci_privacy_scan.py",
42
- "audit": "python top-ppt-html/scripts/audit_styles.py && python top-ppt-html/scripts/audit_docs.py && python top-ppt-html/scripts/audit_skill.py && python top-ppt-html/scripts/audit_css.py",
43
- "package:skill": "python top-ppt-html/scripts/package_skill.py"
44
- },
45
- "publishConfig": {
46
- "access": "public"
47
- }
48
- }
1
+ {
2
+ "name": "@topmindspace/tms-skills",
3
+ "version": "2.0.2",
4
+ "description": "TopMindspace 智能体技能 monorepo — 通过 GitHub npx 安装技能(top-ppt-html 等)。",
5
+ "license": "MIT",
6
+ "author": "TopMindspace",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/topmindspace/tms-skills.git"
10
+ },
11
+ "homepage": "https://github.com/topmindspace/tms-skills#readme",
12
+ "bugs": {
13
+ "url": "https://github.com/topmindspace/tms-skills/issues"
14
+ },
15
+ "keywords": [
16
+ "agent-skills",
17
+ "ai-skills",
18
+ "slides",
19
+ "pptx",
20
+ "report",
21
+ "top-ppt-html"
22
+ ],
23
+ "type": "commonjs",
24
+ "bin": {
25
+ "tms-skills": "bin/tms-skills.js"
26
+ },
27
+ "files": [
28
+ "bin",
29
+ "top-ppt-html",
30
+ "README.md",
31
+ "LICENSE",
32
+ "CHANGELOG.md"
33
+ ],
34
+ "engines": {
35
+ "node": ">=18"
36
+ },
37
+ "scripts": {
38
+ "list": "node bin/tms-skills.js list",
39
+ "install:skills": "node bin/tms-skills.js install top-ppt-html",
40
+ "check": "python top-ppt-html/scripts/package_skill.py --check",
41
+ "privacy": "python scripts/ci_privacy_scan.py",
42
+ "audit": "python top-ppt-html/scripts/audit_styles.py && python top-ppt-html/scripts/audit_docs.py && python top-ppt-html/scripts/audit_skill.py && python top-ppt-html/scripts/audit_css.py",
43
+ "package:skill": "python top-ppt-html/scripts/package_skill.py"
44
+ },
45
+ "publishConfig": {
46
+ "access": "public"
47
+ }
48
+ }