@maccesar/titools 5.2.1 → 5.2.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.
package/CONTRIBUTING.md CHANGED
@@ -38,6 +38,19 @@ they are repository tooling and are not installed as CLI commands.
38
38
  - CLI modules use ESM imports with explicit `.js` extensions. Use asynchronous
39
39
  child processes inside spinners so the UI remains responsive.
40
40
 
41
+ ## Shared CLI engine
42
+
43
+ TiTools and [AISkills](https://github.com/macCesar/aiskills) share the installer,
44
+ updater, cache, prompts, marketplace detection, cleanup and release machinery.
45
+ For shared changes, port behavior and relevant regression tests in both directions
46
+ before closing the work. Verify each repository independently with focused checks
47
+ and record corresponding implementation/test paths, results and justified product
48
+ exceptions. Existing equivalent behavior must be inspected and verified too.
49
+ An incomplete port or failed verification blocks completion and the affected
50
+ release. Catalogs, Titanium project detection, ti-pro and Knowledge Index remain
51
+ product-specific; version numbers and publication authorization stay separate.
52
+ Keep private audit/session evidence outside public commits.
53
+
41
54
  ## Public repository boundaries
42
55
 
43
56
  Commit product source, public guides, tests, reusable maintenance scripts and
package/README.md CHANGED
@@ -824,6 +824,9 @@ What it does:
824
824
  - Knowledge index blocks from instruction files (`AGENTS.md`, `CLAUDE.md`, `GEMINI.md`)
825
825
  - Skills from global (`~/.agents/skills/`) or project directory
826
826
  - Platform symlinks from global or project directory
827
+ - Current or retired slash commands, selected separately for home and project
828
+ - Home and project mirror selections always target their named directory, including with `--local`
829
+ - Mirror removal is not preselected
827
830
  - Removes both current and legacy artifacts
828
831
  - Removes Claude Code auto-update hook
829
832
  - Cleans up cache directory (`~/.titools/`)
@@ -40,14 +40,13 @@ export async function uninstallCommand(options) {
40
40
 
41
41
  const projectDir = resolve(process.cwd());
42
42
  const isProject = isTitaniumProject(projectDir);
43
- const baseDir = options.local ? projectDir : undefined;
44
43
  if (options.local) {
45
44
  console.log(chalk.cyan('Mode: Local uninstallation (current project)'));
46
45
  console.log('');
47
46
  }
48
47
 
49
48
  // Detect installed platforms
50
- const detectedPlatforms = detectPlatforms(baseDir);
49
+ const detectedPlatforms = detectPlatforms();
51
50
 
52
51
  const knowledgeFiles = ['AGENTS.md', 'CLAUDE.md', 'GEMINI.md'];
53
52
  const existingKnowledgeFiles = knowledgeFiles
@@ -86,12 +85,11 @@ export async function uninstallCommand(options) {
86
85
  if (hasHomeAgents || hasProjectAgents) {
87
86
  choices.push({ name: '`ti-pro` for Claude Code', value: 'agents', checked: true });
88
87
  }
89
- if (hasHomeCommands || hasProjectCommands) {
90
- choices.push({
91
- name: 'Slash commands for Claude Code (`/ti-check`, `/ti-new-screen`, `/ti-audit`)',
92
- value: 'commands',
93
- checked: true,
94
- });
88
+ if (hasHomeCommands) {
89
+ choices.push({ name: 'Slash commands from `home` directory', value: 'commands-home', checked: true });
90
+ }
91
+ if (hasProjectCommands) {
92
+ choices.push({ name: 'Slash commands from `project` directory', value: 'commands-project', checked: false });
95
93
  }
96
94
  if (hasKnowledgeBlocks) {
97
95
  choices.push({ name: 'Knowledge index from context files', value: 'knowledge', checked: true });
@@ -220,17 +218,22 @@ export async function uninstallCommand(options) {
220
218
  }
221
219
  }
222
220
 
223
- if (targets.includes('commands')) {
221
+ if (targets.includes('commands-home')) {
224
222
  spinner.start('Removing slash commands...');
225
- const results = [];
226
- results.push(removeCommands(undefined));
227
- if (isProject) {
228
- results.push(removeCommands(projectDir));
223
+ const result = removeCommands(undefined);
224
+ if (result.removed.length > 0) {
225
+ spinner.succeed(`${result.removed.length} slash commands removed`);
226
+ actionTaken = true;
227
+ } else {
228
+ spinner.info('No slash commands to remove');
229
229
  }
230
+ }
230
231
 
231
- const removed = results.flatMap((r) => r.removed);
232
- if (removed.length > 0) {
233
- spinner.succeed(`${removed.length} slash command${removed.length !== 1 ? 's' : ''} removed`);
232
+ if (targets.includes('commands-project')) {
233
+ spinner.start('Removing slash commands...');
234
+ const result = removeCommands(projectDir);
235
+ if (result.removed.length > 0) {
236
+ spinner.succeed(`${result.removed.length} slash commands removed`);
234
237
  actionTaken = true;
235
238
  } else {
236
239
  spinner.info('No slash commands to remove');
@@ -227,7 +227,7 @@ export async function updateCommand(options) {
227
227
  console.log('');
228
228
  console.log(chalk.red('Error: Could not locate skills source directory.'));
229
229
  console.log('Try reinstalling with:');
230
- console.log(` ${chalk.cyan('npm install -g titools')}`);
230
+ console.log(` ${chalk.cyan('npm install -g @maccesar/titools')}`);
231
231
  return;
232
232
  }
233
233
 
package/lib/utils.js CHANGED
@@ -271,6 +271,8 @@ export function compareVersions(v1, v2) {
271
271
  }
272
272
 
273
273
  export default {
274
+ readSkillDescription,
275
+ shortenSkillDescription,
274
276
  blockExists,
275
277
  removeOldBlock,
276
278
  createKnowledgeBlock,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@maccesar/titools",
3
- "version": "5.2.1",
3
+ "version": "5.2.2",
4
4
  "description": "Titanium SDK skills and agents for AI coding assistants, including native game and sound synthesis modules",
5
5
  "main": "lib/index.js",
6
6
  "type": "module",