@maccesar/titools 5.2.0 → 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.
Files changed (81) hide show
  1. package/CONTRIBUTING.md +82 -0
  2. package/README.md +83 -72
  3. package/agents/ti-pro.md +1 -1
  4. package/commands/ti-audit.md +2 -2
  5. package/docs/examples.md +91 -0
  6. package/docs/knowledge-index.md +57 -0
  7. package/lib/commands/uninstall.js +19 -16
  8. package/lib/commands/update.js +1 -1
  9. package/lib/downloader.js +1 -1
  10. package/lib/utils.js +2 -0
  11. package/package.json +4 -2
  12. package/skills/purgetss/references/multi-density-images.md +1 -1
  13. package/skills/ti-admob-unified/SKILL.md +21 -7
  14. package/skills/ti-admob-unified/assets/example/app.js +229 -25
  15. package/skills/ti-admob-unified/assets/example/lib/ads.js +30 -2
  16. package/skills/ti-admob-unified/assets/example/library-usage.js +33 -1
  17. package/skills/ti-admob-unified/references/api-reference.md +39 -16
  18. package/skills/ti-admob-unified/references/banners.md +9 -9
  19. package/skills/ti-admob-unified/references/contributing.md +14 -9
  20. package/skills/ti-admob-unified/references/dependencies.md +31 -25
  21. package/skills/ti-admob-unified/references/fullscreen.md +43 -28
  22. package/skills/ti-admob-unified/references/game-monetization.md +138 -7
  23. package/skills/ti-admob-unified/references/getting-started.md +75 -31
  24. package/skills/ti-admob-unified/references/index.md +5 -2
  25. package/skills/ti-admob-unified/references/integration.md +8 -6
  26. package/skills/ti-admob-unified/references/library.md +41 -10
  27. package/skills/ti-admob-unified/references/mediation-parity.md +17 -0
  28. package/skills/ti-admob-unified/references/mediation.md +22 -9
  29. package/skills/ti-admob-unified/references/migration.md +11 -7
  30. package/skills/ti-admob-unified/references/module-changelog.md +41 -11
  31. package/skills/ti-admob-unified/references/privacy.md +35 -8
  32. package/skills/ti-admob-unified/references/production.md +67 -0
  33. package/skills/ti-admob-unified/references/rewarded-interstitial.md +101 -0
  34. package/skills/ti-admob-unified/references/roadmap.md +28 -31
  35. package/skills/ti-admob-unified/references/source-notes.md +51 -4
  36. package/skills/ti-admob-unified/references/source-snapshot.json +249 -45
  37. package/skills/ti-admob-unified/references/third-party-notices.md +4 -4
  38. package/skills/ti-game/SKILL.md +23 -6
  39. package/skills/ti-game/references/api.md +34 -30
  40. package/skills/ti-game/references/debugging-performance.md +18 -9
  41. package/skills/ti-game/references/examples.md +103 -20
  42. package/skills/ti-game/references/input.md +101 -0
  43. package/skills/ti-game/references/patterns.md +39 -15
  44. package/skills/ti-game/references/physics.md +80 -52
  45. package/skills/ti-game/references/project-setup.md +118 -56
  46. package/skills/ti-game/references/recipes-action.md +107 -8
  47. package/skills/ti-game/references/recipes-adventure-effects.md +41 -9
  48. package/skills/ti-game/references/roadmap.md +10 -3
  49. package/skills/ti-game/references/source-notes.md +81 -0
  50. package/skills/ti-game/references/tilemaps.md +12 -4
  51. package/skills/ti-synthengine/SKILL.md +81 -95
  52. package/skills/ti-synthengine/assets/example/README.md +84 -0
  53. package/skills/ti-synthengine/assets/example/app.js +1178 -0
  54. package/skills/ti-synthengine/assets/example/lib/sequenceOwner.js +83 -0
  55. package/skills/ti-synthengine/assets/example/lib/sequenceScore.js +25 -0
  56. package/skills/ti-synthengine/references/advanced-examples.md +174 -0
  57. package/skills/ti-synthengine/references/android-sim80-correction-evidence.zip +0 -0
  58. package/skills/ti-synthengine/references/android-sim80-correction.json +162 -0
  59. package/skills/ti-synthengine/references/api.md +434 -380
  60. package/skills/ti-synthengine/references/audio-engine.md +157 -230
  61. package/skills/ti-synthengine/references/bypass-physical-recheck-evidence.zip +0 -0
  62. package/skills/ti-synthengine/references/examples.md +123 -253
  63. package/skills/ti-synthengine/references/frontier-android-evidence.zip +0 -0
  64. package/skills/ti-synthengine/references/frontier-ipad-evidence.zip +0 -0
  65. package/skills/ti-synthengine/references/frontier-physical-validation.json +1918 -0
  66. package/skills/ti-synthengine/references/guide.md +188 -156
  67. package/skills/ti-synthengine/references/performance-review-evidence.zip +0 -0
  68. package/skills/ti-synthengine/references/performance-review.json +1146 -0
  69. package/skills/ti-synthengine/references/physical-validation.json +1457 -0
  70. package/skills/ti-synthengine/references/recipes-interaction.md +549 -0
  71. package/skills/ti-synthengine/references/recipes.md +423 -599
  72. package/skills/ti-synthengine/references/recommendations.md +63 -113
  73. package/skills/ti-synthengine/references/sound-design.md +134 -258
  74. package/skills/ti-synthengine/references/source-notes.md +93 -105
  75. package/skills/ti-synthengine/references/source-snapshot.json +379 -32
  76. package/skills/ti-synthengine/references/stats-performance.md +64 -20
  77. package/skills/ti-synthengine/references/studio-validation.json +6202 -0
  78. package/skills/ti-synthengine/references/troubleshooting.md +109 -121
  79. package/skills/ti-synthengine/references/unified-bypass-performance.json +22425 -0
  80. package/skills/ti-synthengine/references/unified-validation.json +314 -0
  81. package/AGENTS-VERCEL-RESEARCH.md +0 -175
@@ -0,0 +1,82 @@
1
+ # Contributing to TiTools
2
+
3
+ TiTools distributes thirteen Titanium SDK skills, a research agent and slash
4
+ commands through an npm CLI and a Claude Code marketplace plugin. Product
5
+ content lives in `skills/`, `agents/` and `commands/`; CLI source lives in
6
+ `bin/` and `lib/`. Both channels use this source tree.
7
+
8
+ ## Development
9
+
10
+ Use Node.js 18 or newer. Install dependencies with `npm ci`.
11
+
12
+ Run the tests that cover a change first:
13
+
14
+ ```sh
15
+ node --test test/manifest.test.js
16
+ npm run lint
17
+ ```
18
+
19
+ Tests use Node's built-in runner. Asset-helper checks additionally require the
20
+ Python dependencies in `skills/ti-game-assets/scripts/requirements.txt`.
21
+ Scripts under `scripts/` maintain reference navigation, fences and snapshots;
22
+ they are repository tooling and are not installed as CLI commands.
23
+
24
+ ## Skill and command changes
25
+
26
+ - A skill's directory and frontmatter `name` must match, using kebab-case.
27
+ - Descriptions explain when to load the skill, stay within 1,024 characters and
28
+ begin with "Use when". Skill names have a 64-character limit.
29
+ - Register new public skills in `lib/config.js`, the `ti-pro` agent and the
30
+ `ti-audit` applicability list. Update the README and add at least two requests
31
+ to [the public examples](docs/examples.md).
32
+ - Keep entry points concise and put detail in linked references. Preserve
33
+ operational prerequisites, defaults, platform differences and cleanup.
34
+ - Verify factual guidance against official documentation and implementation;
35
+ identify source revisions and distinguish source/host checks from device
36
+ acceptance. Preserve declared source-mirror transformations and raw assets.
37
+ - Slash commands belong under `commands/`, where both channels can serve them.
38
+ - CLI modules use ESM imports with explicit `.js` extensions. Use asynchronous
39
+ child processes inside spinners so the UI remains responsive.
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
+
54
+ ## Public repository boundaries
55
+
56
+ Commit product source, public guides, tests, reusable maintenance scripts and
57
+ GitHub/marketplace configuration. Keep personal scratch notes, assistant/editor
58
+ workspace files, session state and unpublished audit conversations local.
59
+
60
+ The ignored `.agents/`, `.claude/`, `docs/project/` and root assistant instruction
61
+ files are private workspace material. `.claude-plugin/` and `.github/workflows/`
62
+ are public product infrastructure. A leading dot does not make a tracked path
63
+ private. The npm `files` allowlist is intentionally narrower than the repository.
64
+
65
+ The supported installation methods are npm and the Claude Code marketplace,
66
+ as described in the README. The obsolete standalone shell installer is retired.
67
+
68
+ ## Release checklist
69
+
70
+ The `.github/workflows/publish.yml` workflow publishes with npm trusted
71
+ publishing (OIDC). Do not publish manually from a maintainer machine.
72
+
73
+ 1. Run `npm test` and the required lint checks for a release.
74
+ 2. Add the release entry to `CHANGELOG.md`.
75
+ 3. Bump `package.json`, its lockfile and `.claude-plugin/plugin.json` together.
76
+ 4. Commit the release and tag that commit `vX.Y.Z`.
77
+ 5. Push `main` and the version tag. The tag triggers `publish.yml`.
78
+ 6. Verify the workflow and the npm registry version; a tag alone does not prove publication.
79
+ 7. Verify the plugin manifest on the default branch, which is also used by marketplace updates.
80
+
81
+ Do not include private workspace files merely to obtain a clean working tree.
82
+ Review the staged paths and actual npm payload before publishing.
package/README.md CHANGED
@@ -12,7 +12,7 @@ The reference files are maintained against official documentation whenever an of
12
12
 
13
13
  Without TiTools, assistants rely on general training data. That data can be outdated or too generic for Titanium work. With TiTools, the assistant can look up Alloy architecture, memory cleanup patterns, PurgeTSS utility classes, and platform-specific APIs.
14
14
 
15
- Vercel's AGENTS.md evaluation reports a 100% pass rate for the knowledge index approach, compared to 53-79% using skills alone.
15
+ The optional knowledge index helps assistants discover the installed reference documents. See [skills and the knowledge index](docs/knowledge-index.md).
16
16
 
17
17
  ---
18
18
 
@@ -115,20 +115,12 @@ All three platforms use the Agent Skills open standard: a `SKILL.md` file with Y
115
115
 
116
116
  The knowledge index is a compressed documentation map that gets injected into your project's instruction files. It tells the AI where Titanium reference docs are, so it can pull accurate information from the installed references instead of relying on general training data.
117
117
 
118
- ### Why it works
118
+ ### Reference discovery
119
119
 
120
- | Approach | Reported Pass Rate |
121
- | ---------------- | ------------------ |
122
- | No documentation | 53% |
123
- | Skills only | 53-79% |
124
- | Knowledge index | 100% |
125
-
126
- Per Vercel's evaluation:
127
- - No decision point: information is present without needing to invoke skills
128
- - Consistent availability: available in every turn, not async-loaded
129
- - No ordering issues: avoids "read docs first vs explore project first"
130
-
131
- For details, see `AGENTS-VERCEL-RESEARCH.md`.
120
+ Skills provide task-specific workflows; the knowledge index makes their reference
121
+ locations discoverable from your project's instruction files. Load the relevant
122
+ references before relying on an API, platform requirement or module contract.
123
+ See [how the index works](docs/knowledge-index.md).
132
124
 
133
125
  ### What gets generated
134
126
 
@@ -178,9 +170,9 @@ The knowledge index is based on the latest Titanium SDK documentation. If your p
178
170
  | ti-expert | Architecture and implementation | Starting point for most tasks |
179
171
  | purgetss | Alloy styling + asset automation | Utility classes; Alloy/Classic branding, images, colors, fonts and modules |
180
172
  | ti-ui | UI/UX patterns | Complex layouts, ListViews, platform UI |
181
- | ti-game | 2D games with the `ti.game` module | Sprites, physics, tile layers, wall jumps, pathfinding, text/performance HUDs, particles, camera |
173
+ | ti-game | 2D games with the `ti.game` module | Sprites, physics, tile maps, HUDs, camera, focused keyboard/mouse/gamepad actions, Apple Metal/Catalyst |
182
174
  | ti-game-assets | Visual and sound assets | Image generation/editing, synthesis variants, stereo placement, alpha cleanup, manifests, parallax and complete exports |
183
- | ti-synthengine | Sound design with `ti.synthengine` | Tones, chords, retro/UI effects, alarms, sweeps, patterns, ADSR envelopes, resonant filters, FM, detune, binaural positioning, engine statistics, mixing and troubleshooting |
175
+ | ti-synthengine | Sound design with `ti.synthengine` | Tones, chords, retro/UI effects, alarms, sweeps, patterns, ADSR envelopes, resonant filters, FM, detune, binaural positioning, held voices, native sequences, master effects, voice LFOs, engine statistics, mixing and troubleshooting |
184
176
  | ti-admob-unified | Advertising, privacy and mediation | Official `ti.admob.unified` guides, copy-ready library, banners/fullscreen, UMP/ATT and selected-provider configuration |
185
177
  | ti-api | Complete Titanium API reference | Looking up properties, methods, events |
186
178
  | ti-guides | SDK fundamentals | tiapp.xml, Hyperloop, distribution, JDK/Xcode compatibility, release notes |
@@ -191,8 +183,8 @@ The knowledge index is based on the latest Titanium SDK documentation. If your p
191
183
  Notes:
192
184
  - The first eight (`ti-reuse-first`, `ti-expert`, `purgetss`, `ti-ui`, `ti-game`, `ti-game-assets`, `ti-synthengine`, `ti-admob-unified`) are specialist workflow skills reflecting TiTools' Titanium conventions and native-module contracts.
193
185
  - `ti-reuse-first` runs before the others. It asks whether a thing needs to exist and what already does it — a search order that stops at the first rung that holds — and sweeps an existing `app/` for near-identical controllers, single-listener events, wrappers around one call, and layout recomputed in JavaScript. It is deliberately two-sided: it says when adding a module or a Widget is the right answer, so the bias does not simply invert.
194
- - `ti-game` documents the `ti.game` native module (2D sprite engine on OpenGL ES 2.0, Android and iOS). Its API reference was verified against the module source and tracks upstream `main` (the module ships features ahead of its manifest version); it applies to Alloy and Classic projects alike and does not depend on PurgeTSS.
195
- - `ti-synthengine` translates aesthetic sound requests into strict, production-ready JavaScript for the cross-platform `ti.synthengine` 1.0.0 beta module. Eight references preserve official documentation, accompanied by raw statistics benchmark trials; curated recipes add retro effects, xylophone interaction, memory pads, polyphony and timer ownership. The reviewed source includes eleven public methods with optional diagnostics; feature detection remains necessary for older beta binaries. Maintenance notes and a hash manifest distinguish the reviewed working tree from its base commit and published packages, track preserved navigation and state audit limits.
186
+ - `ti-game` documents the `ti.game` native module (2D sprite engine using OpenGL ES 2.0 on Android and Metal on iPhone, iPad and Mac Catalyst). Its API reference was verified against the module source and records the reviewed upstream commit and fork documentation snapshot; it applies to Alloy and Classic projects alike and does not depend on PurgeTSS.
187
+ - `ti-synthengine` translates sound requests into checked JavaScript for the public Android/iOS `ti.synthengine` 1.0.0 release. Its nineteen-method contract covers timed/held voices, identified native sequences, global tempo, selective categories/sends, master effects, live spatial/noise/filter controls and diagnostics. Two curated recipe guides cover retro cues and interactive instruments. Complete official-source mirrors, validation reports, bundled examples and raw evidence retain provenance; reversible errata correct source prose against native behavior. The clean reviewed commit, platform differences and scoped listening/performance acceptance are explicit in source notes.
196
188
  - `ti-game-assets` treats images and sounds as essential game assets. It coordinates integrated `image_gen` artwork with `ti-synthengine` sound design, variants and stereo placement, and ships Pillow helpers for conservative alpha cleanup and per-world visual/audio manifests.
197
189
  - The latter five are documentation-mirror skills, audited against official sources via the internal `titools-skill-auditor`. See [Where the references come from](#where-the-references-come-from).
198
190
  - `purgetss` reference files are audited against the official PurgeTSS documentation and against the package source (the CLI and the generated `utilities.tss`), but its workflow conventions are opinionated.
@@ -228,14 +220,14 @@ In addition to skills, this repository includes sub-agents for Claude Code. Sub-
228
220
 
229
221
  ### ti-pro
230
222
 
231
- Deep-dive research specialist that can combine the complete 10-skill TiTools catalog.
223
+ Deep-dive research specialist that can combine the complete 13-skill TiTools catalog.
232
224
 
233
225
  | Aspect | Details |
234
226
  | ---------------- | ------------------------------------------------ |
235
227
  | Location | `~/.claude/agents/ti-pro.md` |
236
228
  | Model | Sonnet (comprehensive analysis) |
237
- | Tools | Read-only (Read, Grep, Glob) |
238
- | Preloaded Skills | All 10 skills registered in `lib/config.js` |
229
+ | Tools | Read, Grep, Glob, Bash |
230
+ | Preloaded Skills | All 13 skills registered in `lib/config.js` |
239
231
 
240
232
  When to use the agent vs skills:
241
233
 
@@ -460,7 +452,7 @@ Key rules:
460
452
 
461
453
  ### ti-game
462
454
 
463
- 2D game development with the `ti.game` native module — a sprite engine rendered with OpenGL ES 2.0, same JS API on Android and iOS. Works in Alloy and Classic projects.
455
+ 2D game development with the `ti.game` native module — a sprite engine rendered with OpenGL ES 2.0 on Android and Metal on iPhone, iPad and Mac Catalyst, with a mostly shared JS API. Works in Alloy and Classic projects.
464
456
 
465
457
  When it activates:
466
458
  - `tiapp.xml` declares `ti.game`, or any file calls `require('ti.game')`
@@ -478,6 +470,7 @@ When it activates:
478
470
  - Native `TileLayer` maps with visible-cell rendering, Tiled GIDs, solid/one-way cells, live edits and A* integration
479
471
  - Collision-shape overlays plus the expandable performance HUD and opt-in `performance` telemetry event
480
472
  - Drag & drop, pinch, rotate, multitouch controls
473
+ - Focused keyboard/mouse/gamepad actions, input contexts, canvas focus and native text-field ownership
481
474
 
482
475
  Example prompts:
483
476
  ```
@@ -524,41 +517,71 @@ Raster drawing generation/editing uses integrated `image_gen`. Authored SVG/proc
524
517
 
525
518
  ### ti-admob-unified
526
519
 
527
- Integrate César's `ti.admob.unified` module in Alloy or Classic using its official documentation for installation, API, UMP/ATT, privacy options, banner layout, fullscreen lifecycle and mediation. The skill includes the official copy-ready application library and guides for AppLovin, Meta, InMobi, Unity and Liftoff. The module's first public 1.0.0 release is under preparation at this snapshot.
528
-
529
- Source commit, per-file hashes and rebased links are recorded. Future updates use the maintainer auditor's source map and the read-only check `node scripts/verify-module-snapshot.mjs --source /path/to/ti.admob.unified`; new, changed or removed docs are reported before updating. Community guidance remains separate from official mirrors.
530
-
531
- Installing an adapter does not configure a publisher account or prove delivery. The skill distinguishes build/linking, Google test ads, each provider's test delivery and physical-device acceptance; it preserves the game's selected frequency policy instead of enabling every format.
520
+ Integrate public **ti.admob.unified 1.0.0** in Alloy or Classic with its official
521
+ [repository](https://github.com/macCesar/ti.admob.unified),
522
+ [Android downloads](https://github.com/macCesar/ti.admob.unified/releases/tag/android-1.0.0)
523
+ and [iOS downloads](https://github.com/macCesar/ti.admob.unified/releases/tag/ios-1.0.0).
524
+ Install the core ZIP for each target and only the mediation complements you use.
525
+ Requires Titanium SDK 13.4.1.GA, iOS 15+, Android API 24+ and compile SDK 36;
526
+ this Apple module does not support Mac Catalyst.
527
+
528
+ The skill covers consent-first UMP/ATT, synchronous tracking-status queries,
529
+ standard/adaptive banners, interstitial, rewarded, rewarded interstitial and
530
+ app-open ads. It includes the unchanged copy-ready integration library and
531
+ AppLovin, Meta, InMobi, Unity and Liftoff setup/dependency/parity guides.
532
+ Rewarded interstitial guidance includes an accurate reward introduction,
533
+ visible Skip, SDK-reported rewards and cancellation tied to the presentation
534
+ context. Loading an ad alone does not authorize showing it.
535
+
536
+ The [skill entry point](skills/ti-admob-unified/SKILL.md) routes exact API,
537
+ installation, lifecycle and [production guidance](skills/ti-admob-unified/references/production.md)
538
+ for app IDs, units, app-ads.txt, privacy options and AdMob/store readiness.
539
+ [Source notes](skills/ti-admob-unified/references/source-notes.md) record reviewed
540
+ source `0348432`, platform ZIP hashes and native-backed corrections.
541
+
542
+ A packaged adapter or Google test ad does not prove provider delivery or
543
+ production eligibility. Keep configuration/linking, each selected provider's
544
+ test delivery and physical-device visual/lifecycle acceptance separate. Game
545
+ frequency and pause/audio/input ownership remain application policies.
532
546
 
533
547
  ### ti-synthengine
534
548
 
535
- Cross-platform sound design and synthesis with the native `ti.synthengine` 1.0.0 beta module for Android and iOS.
549
+ Sound design and synthesis with the public native `ti.synthengine` 1.0.0 release for Android and iOS. Read the [skill entry point](skills/ti-synthengine/SKILL.md) for task routing, exact API references and current source provenance.
550
+
551
+ Public repository: [macCesar/TiSynthEngine](https://github.com/macCesar/TiSynthEngine).
552
+ Download [Android 1.0.0](https://github.com/macCesar/TiSynthEngine/releases/tag/android-1.0.0)
553
+ and [iOS 1.0.0](https://github.com/macCesar/TiSynthEngine/releases/tag/ios-1.0.0),
554
+ copy the ZIPs into the Titanium app root and follow the [installation guide](skills/ti-synthengine/references/guide.md).
555
+ Requires Titanium SDK 13.2.0.GA+, Android compile API35+, and iOS 15+; the Apple package also supports Mac Catalyst.
536
556
 
537
557
  When it activates:
538
558
  - `tiapp.xml` declares `ti.synthengine`, or code calls `require('ti.synthengine')`
539
- - The app needs generated UI feedback, game cues, retro/chiptune effects, alarms, chords, pads, noise percussion, sweeps, panning, or vibrato
540
- - A synth call returns `false`, the first sound glitches, a pattern stops, a chord pumps, or output changes after a route switch
541
- - The app needs voice/queue/rejection counters, optional render-load/output meters, or help interpreting host benchmark evidence
559
+ - Generated UI/game cues, instruments, alarms, chords, percussion, sweeps or binaural headphone placement
560
+ - Sustained voices, simultaneous native sequences, shared tempo, selective effects/sends, priorities or live voice controls
561
+ - Rejected calls, startup glitches, voice/queue diagnostics, render-load measurements or source/artifact compatibility questions
542
562
 
543
563
  Example prompts:
544
564
  ```
545
565
  "Create a short sci-fi laser that sweeps left to right with ti.synthengine."
546
- "Design a clean two-note success cue for a Titanium button."
547
- "Build a playable xylophone that can glide across bars without retriggering the same note on every touchmove."
548
- "Create a layered 12-voice chord and stop its repeating pulse cleanly when the window closes."
549
- "Why does playTone return false when the object looks valid?"
550
- "Start the engine safely after my Alloy window lays out and clean it up on close."
566
+ "Build a playable xylophone without retriggering a bar on every touchmove."
567
+ "Move a held spatial motor and change its noise clock and low-pass cutoff without restarting it."
568
+ "Run music and a victory cue as independent native sequences, then cancel only the cue."
569
+ "Apply reverb to music while keeping UI dry, and change the global tempo."
570
+ "Explain what the Android Sim80 headphone result proves about performance."
551
571
  ```
552
572
 
553
573
  Key rules:
554
- - Option objects are closed contracts. Unsupported keys, invalid types, non-finite values, or broken envelopes reject the whole call
555
- - Read waveform constants from `synth.getDefaults().waveTypes`; never guess numeric values or option names
556
- - `playTone` accepts `note` or `frequency`, never both; `playChord` accepts `notes` or `frequencies`, never both
557
- - `duration` includes attack, the full-level middle, and release, so explicit envelope times must intersect correctly
558
- - Use `frequencyEnd` for sweeps, `panEnd` for stereo movement, and `lfoFreq`/`lfoDepth` for pitch vibrato
559
- - Binaural headphone positioning uses `spatialX`/`spatialY` from -1 to 1, without pan fields. Omit both to keep stereo; check installed coordinate limits because older 1.0.0 builds lack this beta addition
560
- - Curated recipes cover retro effects, playable xylophone gestures, four-pad memory cues, controlled waveform comparisons, layered chords and cancellable repetition
561
- - Start after the first layout settles, keep one lifecycle owner, check Boolean returns, and call `shutdown()` on cleanup
574
+ - Read constants and exact ranges from the API; strict option dictionaries reject invalid fields or conflicting pitch sources
575
+ - Timed tone/chord `duration` includes release. Native sequence intervals and note lengths are separate; held voices release through their IDs
576
+ - Schedule successive sounds with `playSequence`, retain positive accepted IDs and cancel the owner's sequence. `stopAll()` is global panic
577
+ - `setTempo` drives beat-based transport and synchronized modulation; millisecond sequences keep fixed timing
578
+ - `bus`/`applyTo` select processed categories; explicit `effectSend` overrides that selection. One shared chain and final limiter remain global
579
+ - Held spatial position, noise clock and one-pole cutoff support compatible 10 ms updates. A stereo voice cannot become spatial through an update
580
+ - Omit both spatial coordinates for stereo; zero coordinates enable binaural center. Do not combine binaural coordinates with stereo pan fields
581
+ - Start after layout, keep one lifecycle owner, handle Boolean acceptance and sequence IDs, release held notes on cancellation and shut down during teardown
582
+ - Current platform metadata, zero-envelope and diagnostic differences are documented. Host checks and a short accepted listening scene do not establish complete physical maximum-load acceptance
583
+
584
+ The [retro recipes](skills/ti-synthengine/references/recipes.md) and [interaction/instrument recipes](skills/ti-synthengine/references/recipes-interaction.md) preserve acoustic intent, overlap budgets and cleanup. [Source notes](skills/ti-synthengine/references/source-notes.md) identify the reviewed native commit and evidence limits.
562
585
 
563
586
  ---
564
587
 
@@ -627,7 +650,7 @@ Codebase analysis (using agent):
627
650
  4. Mention constraints. "Build a settings screen. Must work offline and sync when connected."
628
651
  5. Reference existing code. "Here's my current controller. How can I improve memory management?"
629
652
 
630
- More examples: See [Example Prompts](EXAMPLE-PROMPTS.md) for detailed prompts that test each skill's capabilities.
653
+ See [example prompts](docs/examples.md) for requests covering every public skill.
631
654
 
632
655
  ---
633
656
 
@@ -801,6 +824,9 @@ What it does:
801
824
  - Knowledge index blocks from instruction files (`AGENTS.md`, `CLAUDE.md`, `GEMINI.md`)
802
825
  - Skills from global (`~/.agents/skills/`) or project directory
803
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
804
830
  - Removes both current and legacy artifacts
805
831
  - Removes Claude Code auto-update hook
806
832
  - Cleans up cache directory (`~/.titools/`)
@@ -862,13 +888,18 @@ This pattern is documented across four bundled TiTools skills: `ti-ui`, `ti-expe
862
888
  | Skill | SKILL.md | References |
863
889
  | --------- | ----------------------------- | ----------------------------------------------------- |
864
890
  | ti-reuse-first | Reuse Before You Write | 5 files (the ladder, Alloy reuse, indirection, PurgeTSS reuse, diagnostics) |
865
- | ti-expert | Architecture + Implementation | 26 files (patterns, feedback surfaces, file type association, sharing, testing, security, etc.) |
866
- | purgetss | Setup + Critical Rules | 34 files (Classic compatibility, grid, animations, icons, class-index, SVG pipeline, etc.) |
891
+ | ti-expert | Architecture + Implementation | 27 files (patterns, feedback surfaces, file type association, sharing, testing, security, etc.) |
892
+ | purgetss | Setup + Critical Rules | 39 files (Classic compatibility, grid, animations, icons, class-index, SVG pipeline, etc.) |
867
893
  | ti-ui | UI Rules + Platform Diffs | 14 files (layouts, lists, gestures, etc.) |
868
- | ti-game | Native 2D Game Workflow | 9 files (API, setup, patterns, recipes, tile maps, debugging, roadmap) |
894
+ | ti-game | Native 2D Game Workflow | 12 files (API, input, source notes, setup, physics, patterns, recipes, tile maps, debugging, roadmap) |
869
895
  | ti-game-assets | Visual and Sound Assets | 10 guides and a manifest example; alpha and contract validation scripts |
870
- | ti-admob-unified | Unified Advertising | 11 official module guides, source/hash update checks, official example library and game integration guidance |
871
- | ti-synthengine | Native Sound Synthesis | 10 Markdown references (8 official, curated recipes, maintenance notes), raw statistics trials and a source hash manifest |
896
+ | ti-admob-unified | Unified Advertising | 20 Markdown references including production, rewarded interstitial, mediation parity, integration library guidance, provenance and game monetization; source/hash checks and official example assets |
897
+ | ti-synthengine | Native Sound Synthesis | 12 Markdown references (9 official parts, 2 curated recipe guides, maintenance notes), complete validation reports/evidence and a reversible source hash manifest |
898
+ | ti-api | Titanium API | 20 references for core/platform APIs and native modules |
899
+ | ti-guides | SDK Fundamentals | 16 references for setup, configuration, CLI and distribution |
900
+ | ti-howtos | Native Integrations | 18 references for platform features and integration workflows |
901
+ | alloy-guides | Alloy MVC | 11 references for controllers, views, models, styling and widgets |
902
+ | alloy-howtos | Alloy CLI and Debugging | 6 references for commands, configuration and practical workflows |
872
903
 
873
904
  ---
874
905
 
@@ -952,28 +983,8 @@ Note: `titools remove` can remove the knowledge index blocks from your project f
952
983
 
953
984
  ## Contributing
954
985
 
955
- 1. Fork the repository
956
- 2. Improve SKILL.md or reference files
957
- 3. Test with your preferred AI coding assistant
958
- 4. Submit a pull request
959
-
960
- ### Guidelines
961
- - Keep SKILL.md concise (<500 lines)
962
- - Use progressive disclosure (details in references)
963
- - Include concrete examples
964
- - Test with real sessions
965
-
966
- ---
967
-
968
- ## Legacy installation (not recommended)
969
-
970
- The bash installer is maintained for backward compatibility but NPM installation is recommended.
971
-
972
- ```bash
973
- curl -fsSL https://raw.githubusercontent.com/macCesar/titools/main/install.sh | bash
974
- ```
975
-
976
- Use this only if you cannot use NPM for any reason.
986
+ See [CONTRIBUTING.md](CONTRIBUTING.md) for development, skill registration,
987
+ public repository boundaries and the release workflow.
977
988
 
978
989
  ---
979
990
 
package/agents/ti-pro.md CHANGED
@@ -33,7 +33,7 @@ When invoked, research complex topics by consulting the applicable skills from t
33
33
  - `ti-ui` - UI/UX patterns, layouts, gestures
34
34
  - `ti-game-assets` - Visual and sound asset contracts, raster generation, alpha/export validation, synthesis variants and stereo coordination when assets are involved
35
35
  - `ti-game` - Native `ti.game` architecture and API when the module is declared
36
- - `ti-synthengine` - Native sound synthesis and strict `ti.synthengine` contract when the module is declared
36
+ - `ti-synthengine` - Native synthesis, held voices, identified sequences/tempo, selective processing, live controls and platform/evidence limits when the module is declared or requested
37
37
  - `ti-admob-unified` - Official unified advertising/privacy/mediation module contract and provider setup when declared or requested
38
38
  - `ti-api`, `ti-guides`, `ti-howtos` - Exact Titanium APIs, SDK fundamentals and native integrations
39
39
  - `alloy-guides`, `alloy-howtos` - Alloy MVC, CLI, configuration and compiler workflows when the project is Alloy
@@ -23,11 +23,11 @@ Project-type audit:
23
23
  Native-module audit:
24
24
 
25
25
  10. If the project declares `ti.game`, invoke `ti-game` — check for sprites moved from timers instead of native properties, levels sized from `Ti.Platform.displayCaps` instead of the `resize` event, sprites added one by one instead of in one array, and timers or sounds left running when the window closes.
26
- 11. If the project declares `ti.synthengine`, invoke `ti-synthengine` — check strict option names and types, mutually exclusive pitch fields, valid envelope intersections, checked Boolean results, one clear lifecycle owner, delayed startup after layout, app-owned timer cancellation, and `shutdown()` cleanup.
26
+ 11. If the project declares `ti.synthengine`, invoke `ti-synthengine` — check exact option/pitch/envelope contracts, Boolean acceptance and positive sequence IDs, native successive-note scheduling, per-owner sequence cancellation, held-note release/cancellation and compatible live updates. Check shared tempo versus millisecond timing, category/send selection, overlap/priority budgets, one lifecycle owner, delayed startup and teardown. Consult current source notes before assuming platform metadata/envelopes or rejection diagnostics match; separate host/load reports from scoped physical listening acceptance.
27
27
 
28
28
  12. If the project has game art/sound inventories or asset-generation/export workflows, invoke `ti-game-assets` — check contracts per set, master provenance/transparency, protected alpha cleanup, frame/pivot alignment, complete derived exports, parallax layers, sound variants and semantic event bindings. Consult `ti-game` and `ti-synthengine` equally in their applicable domains; do not require module installation or new sounds for an image-only task.
29
29
 
30
- 13. If the project declares `ti.admob.unified`/mediation complements or implements an ad flow through this module, invoke `ti-admob-unified` — verify official module APIs, consent/request eligibility/initialization, test IDs, banner layout and refresh ownership, deliberate fullscreen presentation, callback cleanup and selected-provider mappings. Separate linking, Google test ads, provider delivery and physical acceptance. In games preserve native pause/audio/input ownership and the existing frequency policy.
30
+ 13. If the project declares `ti.admob.unified`/mediation complements or uses this module, invoke `ti-admob-unified` — verify public release/platform requirements, consent/request eligibility/initialization, ATT status versus permission, test IDs, independent banner lifecycle and deliberate fullscreen ownership. Check rewarded interstitial's reward introduction, visible Skip, reward-event credit and pending-context cancellation. Use the production guide for app IDs, app-ads.txt, privacy entry points and account readiness. Separate linking, Google test ads, selected-provider delivery and physical acceptance; preserve game frequency and pause/audio/input policy.
31
31
 
32
32
  If a conditional skill does not apply, record it as `not applicable` with the detected reason instead of inventing findings from it.
33
33
 
@@ -0,0 +1,91 @@
1
+ # Example prompts
2
+
3
+ Use these requests as starting points with an assistant that has TiTools installed.
4
+ Mention the framework, module and platform involved. Conditional skills apply
5
+ when the project uses that technology; an image request does not require adding
6
+ an audio or advertising module.
7
+
8
+ ## Reuse and simplification — ti-reuse-first
9
+
10
+ - "Find whether this Alloy project already has a suitable confirmation panel before adding another one."
11
+ - "Review these repeated controller wrappers and explain which can be simplified without changing behavior."
12
+
13
+ ## Architecture — ti-expert
14
+
15
+ - "Organize this Alloy screen so navigation, data access and view state have clear owners."
16
+ - "Review this controller for timer, listener and window lifecycle leaks."
17
+
18
+ ## PurgeTSS — purgetss
19
+
20
+ - "Style this Alloy layout with the PurgeTSS classes supported by the installed version."
21
+ - "Prepare responsive images for this Classic Titanium project using the supported PurgeTSS asset workflow."
22
+
23
+ ## Native UI — ti-ui
24
+
25
+ - "Build a ListView with reusable templates and predictable row heights."
26
+ - "Check this window's safe-area, orientation and gesture handling on Android and iOS."
27
+
28
+ ## Native games — ti-game
29
+
30
+ - "Build a platformer using native velocity, gravity and collision events instead of a JavaScript frame loop."
31
+ - "Map keyboard and gamepad input to named actions while keeping native text-field focus usable."
32
+
33
+ ## Visual and sound assets — ti-game-assets
34
+
35
+ - "Prepare a consistent sprite sheet, animation frames and three-layer parallax set for this game."
36
+ - "Create three related pickup sound variants and an asset manifest with export and listening checks."
37
+
38
+ ## Native synthesis — ti-synthengine
39
+
40
+ - "Install the public TiSynthEngine 1.0.0 Android/iOS packages and start audio after the window layout settles."
41
+ - "Move a held spatial motor, process only music with reverb, and stop one native sequence without cancelling unrelated sounds."
42
+
43
+ Use the [synthesis skill](../skills/ti-synthengine/SKILL.md) for exact options,
44
+ public downloads and scoped performance evidence. Native sequence scheduling,
45
+ held-voice ownership and historical/private artifacts have distinct contracts.
46
+
47
+ ## Advertising — ti-admob-unified
48
+
49
+ - "Install public ti.admob.unified 1.0.0 on Android/iOS and configure consent-first startup with the official integration library."
50
+ - "Offer a rewarded interstitial at a natural transition with a clear reward, a visible Skip option and cancellation when the screen changes."
51
+ - "Check selected mediation providers and production readiness, including app IDs, app-ads.txt and privacy options, without treating Google test ads as provider acceptance."
52
+
53
+ Use the [public Android](https://github.com/macCesar/ti.admob.unified/releases/tag/android-1.0.0)
54
+ and [iOS](https://github.com/macCesar/ti.admob.unified/releases/tag/ios-1.0.0)
55
+ packages and the [module skill](../skills/ti-admob-unified/SKILL.md). A synchronous
56
+ ATT query is separate from UMP eligibility; Android's ATT convention is not
57
+ permission for general tracking. Real account/provider delivery needs its own
58
+ validation beyond the module's publication.
59
+
60
+ ## Exact Titanium APIs — ti-api
61
+
62
+ - "Verify the supported properties and event payloads for this Titanium ListView implementation."
63
+ - "Check this platform-specific API call against the SDK version used by the project."
64
+
65
+ ## SDK fundamentals — ti-guides
66
+
67
+ - "Check this tiapp.xml and explain the relevant build and platform requirements."
68
+ - "Set up the CommonJS modules and assets for a maintainable Classic Titanium project."
69
+
70
+ ## Native integrations — ti-howtos
71
+
72
+ - "Implement location permissions and lifecycle handling for this Android/iOS app."
73
+ - "Review this camera and file-sharing flow, including its required platform configuration."
74
+
75
+ ## Alloy MVC — alloy-guides
76
+
77
+ - "Separate the controller, XML view and TSS responsibilities on this Alloy screen."
78
+ - "Explain how this model collection, binding and cleanup should work."
79
+
80
+ ## Alloy tools — alloy-howtos
81
+
82
+ - "Generate an Alloy controller and place its files according to the documented project structure."
83
+ - "Diagnose this Alloy compilation error and check the relevant CLI and configuration options."
84
+
85
+ ## Combining skills
86
+
87
+ "Review an Alloy game that uses PurgeTSS, ti.game and ti.synthengine. Start with
88
+ existing components, then check scene input, native audio ownership and cleanup
89
+ using the appropriate references."
90
+
91
+ See [how the knowledge index works](knowledge-index.md) for reference discovery.
@@ -0,0 +1,57 @@
1
+ # Skills and the knowledge index
2
+
3
+ TiTools provides task-oriented skills and reference documents for Titanium SDK,
4
+ Alloy and related native modules. A skill describes when its workflow applies;
5
+ its references supply the details needed for that task.
6
+
7
+ The optional knowledge index helps an assistant find the available references
8
+ from the consuming project's instruction files. It is navigation, not a copy
9
+ of every reference and not a promise about an assistant's answer accuracy.
10
+
11
+ ## Generate an index
12
+
13
+ From a Titanium project containing `tiapp.xml`, run:
14
+
15
+ ```sh
16
+ titools sync
17
+ ```
18
+
19
+ Select the applicable instruction files, such as `AGENTS.md`, `CLAUDE.md` or
20
+ `GEMINI.md`. TiTools maintains a delimited index block rather than replacing the
21
+ project's other instructions. Re-running sync updates that block.
22
+
23
+ Do not run project sync from the TiTools source repository. Installing skills
24
+ and generating an index in a consuming app are separate operations.
25
+
26
+ ## Choose the relevant skills
27
+
28
+ The catalog contains thirteen public skills:
29
+
30
+ | Task | Skill |
31
+ | --- | --- |
32
+ | Reuse and simplification | `ti-reuse-first` |
33
+ | Architecture and implementation | `ti-expert` |
34
+ | PurgeTSS styling and assets | `purgetss` |
35
+ | Titanium UI | `ti-ui` |
36
+ | Native game behavior | `ti-game` |
37
+ | Visual and sound asset production | `ti-game-assets` |
38
+ | Native synthesis | `ti-synthengine` |
39
+ | Unified advertising | `ti-admob-unified` |
40
+ | Exact Titanium APIs | `ti-api` |
41
+ | SDK fundamentals | `ti-guides` |
42
+ | Native integrations | `ti-howtos` |
43
+ | Alloy MVC | `alloy-guides` |
44
+ | Alloy CLI and debugging | `alloy-howtos` |
45
+
46
+ Conditional scopes depend on the app. A Titanium project does not automatically
47
+ need PurgeTSS, games, synthesis or advertising. The `ti-pro` research agent can
48
+ combine the relevant references for questions that cross those boundaries.
49
+
50
+ ## Keep references current
51
+
52
+ Update the installed TiTools package and use `titools update` to refresh installed
53
+ content. Use `titools status` and `titools doctor` to inspect installation health.
54
+ An index cannot establish which native module binary is installed: check that
55
+ module's release and artifact contract separately.
56
+
57
+ See [example prompts](examples.md) and the [CLI documentation](../README.md).
@@ -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/downloader.js CHANGED
@@ -99,7 +99,7 @@ export async function downloadRepoArchive(destDir, ref = 'main') {
99
99
 
100
100
  /**
101
101
  * Download a single file from GitHub raw content
102
- * @param {string} filePath - Path in repository (e.g., 'AGENTS-VERCEL-RESEARCH.md')
102
+ * @param {string} filePath - Path in repository (e.g., 'docs/knowledge-index.md')
103
103
  * @param {string} destPath - Local destination path
104
104
  * @param {string} ref - Git ref (branch, tag, commit)
105
105
  * @returns {Promise<void>}