@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.
- package/CONTRIBUTING.md +82 -0
- package/README.md +83 -72
- package/agents/ti-pro.md +1 -1
- package/commands/ti-audit.md +2 -2
- package/docs/examples.md +91 -0
- package/docs/knowledge-index.md +57 -0
- package/lib/commands/uninstall.js +19 -16
- package/lib/commands/update.js +1 -1
- package/lib/downloader.js +1 -1
- package/lib/utils.js +2 -0
- package/package.json +4 -2
- package/skills/purgetss/references/multi-density-images.md +1 -1
- package/skills/ti-admob-unified/SKILL.md +21 -7
- package/skills/ti-admob-unified/assets/example/app.js +229 -25
- package/skills/ti-admob-unified/assets/example/lib/ads.js +30 -2
- package/skills/ti-admob-unified/assets/example/library-usage.js +33 -1
- package/skills/ti-admob-unified/references/api-reference.md +39 -16
- package/skills/ti-admob-unified/references/banners.md +9 -9
- package/skills/ti-admob-unified/references/contributing.md +14 -9
- package/skills/ti-admob-unified/references/dependencies.md +31 -25
- package/skills/ti-admob-unified/references/fullscreen.md +43 -28
- package/skills/ti-admob-unified/references/game-monetization.md +138 -7
- package/skills/ti-admob-unified/references/getting-started.md +75 -31
- package/skills/ti-admob-unified/references/index.md +5 -2
- package/skills/ti-admob-unified/references/integration.md +8 -6
- package/skills/ti-admob-unified/references/library.md +41 -10
- package/skills/ti-admob-unified/references/mediation-parity.md +17 -0
- package/skills/ti-admob-unified/references/mediation.md +22 -9
- package/skills/ti-admob-unified/references/migration.md +11 -7
- package/skills/ti-admob-unified/references/module-changelog.md +41 -11
- package/skills/ti-admob-unified/references/privacy.md +35 -8
- package/skills/ti-admob-unified/references/production.md +67 -0
- package/skills/ti-admob-unified/references/rewarded-interstitial.md +101 -0
- package/skills/ti-admob-unified/references/roadmap.md +28 -31
- package/skills/ti-admob-unified/references/source-notes.md +51 -4
- package/skills/ti-admob-unified/references/source-snapshot.json +249 -45
- package/skills/ti-admob-unified/references/third-party-notices.md +4 -4
- package/skills/ti-game/SKILL.md +23 -6
- package/skills/ti-game/references/api.md +34 -30
- package/skills/ti-game/references/debugging-performance.md +18 -9
- package/skills/ti-game/references/examples.md +103 -20
- package/skills/ti-game/references/input.md +101 -0
- package/skills/ti-game/references/patterns.md +39 -15
- package/skills/ti-game/references/physics.md +80 -52
- package/skills/ti-game/references/project-setup.md +118 -56
- package/skills/ti-game/references/recipes-action.md +107 -8
- package/skills/ti-game/references/recipes-adventure-effects.md +41 -9
- package/skills/ti-game/references/roadmap.md +10 -3
- package/skills/ti-game/references/source-notes.md +81 -0
- package/skills/ti-game/references/tilemaps.md +12 -4
- package/skills/ti-synthengine/SKILL.md +81 -95
- package/skills/ti-synthengine/assets/example/README.md +84 -0
- package/skills/ti-synthengine/assets/example/app.js +1178 -0
- package/skills/ti-synthengine/assets/example/lib/sequenceOwner.js +83 -0
- package/skills/ti-synthengine/assets/example/lib/sequenceScore.js +25 -0
- package/skills/ti-synthengine/references/advanced-examples.md +174 -0
- package/skills/ti-synthengine/references/android-sim80-correction-evidence.zip +0 -0
- package/skills/ti-synthengine/references/android-sim80-correction.json +162 -0
- package/skills/ti-synthengine/references/api.md +434 -380
- package/skills/ti-synthengine/references/audio-engine.md +157 -230
- package/skills/ti-synthengine/references/bypass-physical-recheck-evidence.zip +0 -0
- package/skills/ti-synthengine/references/examples.md +123 -253
- package/skills/ti-synthengine/references/frontier-android-evidence.zip +0 -0
- package/skills/ti-synthengine/references/frontier-ipad-evidence.zip +0 -0
- package/skills/ti-synthengine/references/frontier-physical-validation.json +1918 -0
- package/skills/ti-synthengine/references/guide.md +188 -156
- package/skills/ti-synthengine/references/performance-review-evidence.zip +0 -0
- package/skills/ti-synthengine/references/performance-review.json +1146 -0
- package/skills/ti-synthengine/references/physical-validation.json +1457 -0
- package/skills/ti-synthengine/references/recipes-interaction.md +549 -0
- package/skills/ti-synthengine/references/recipes.md +423 -599
- package/skills/ti-synthengine/references/recommendations.md +63 -113
- package/skills/ti-synthengine/references/sound-design.md +134 -258
- package/skills/ti-synthengine/references/source-notes.md +93 -105
- package/skills/ti-synthengine/references/source-snapshot.json +379 -32
- package/skills/ti-synthengine/references/stats-performance.md +64 -20
- package/skills/ti-synthengine/references/studio-validation.json +6202 -0
- package/skills/ti-synthengine/references/troubleshooting.md +109 -121
- package/skills/ti-synthengine/references/unified-bypass-performance.json +22425 -0
- package/skills/ti-synthengine/references/unified-validation.json +314 -0
- package/AGENTS-VERCEL-RESEARCH.md +0 -175
package/CONTRIBUTING.md
ADDED
|
@@ -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
|
-
|
|
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
|
-
###
|
|
118
|
+
### Reference discovery
|
|
119
119
|
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
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
|
|
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
|
|
195
|
-
- `ti-synthengine` translates
|
|
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
|
|
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
|
|
238
|
-
| Preloaded Skills | All
|
|
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
|
|
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
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
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
|
-
|
|
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
|
-
-
|
|
540
|
-
-
|
|
541
|
-
-
|
|
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
|
-
"
|
|
547
|
-
"
|
|
548
|
-
"
|
|
549
|
-
"
|
|
550
|
-
"
|
|
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
|
-
-
|
|
555
|
-
-
|
|
556
|
-
-
|
|
557
|
-
- `
|
|
558
|
-
-
|
|
559
|
-
-
|
|
560
|
-
-
|
|
561
|
-
- Start after
|
|
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
|
-
|
|
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 |
|
|
866
|
-
| purgetss | Setup + Critical Rules |
|
|
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 |
|
|
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 |
|
|
871
|
-
| ti-synthengine | Native Sound Synthesis |
|
|
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
|
-
|
|
956
|
-
|
|
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
|
|
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
|
package/commands/ti-audit.md
CHANGED
|
@@ -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
|
|
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
|
|
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
|
|
package/docs/examples.md
ADDED
|
@@ -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(
|
|
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
|
|
90
|
-
choices.push({
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
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
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
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
|
-
|
|
232
|
-
|
|
233
|
-
|
|
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');
|
package/lib/commands/update.js
CHANGED
|
@@ -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., '
|
|
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>}
|