@musashishao/agent-kit 1.9.0 → 1.9.1
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/.agent/agents/ai-asset-factory.md +700 -0
- package/.agent/agents/ai-audio-factory.md +503 -0
- package/.agent/agents/game-developer.md +4 -4
- package/.agent/agents/orchestrator.md +113 -3
- package/.agent/agents/project-planner.md +67 -0
- package/.agent/agents/unity-mobile-master.md +949 -0
- package/.agent/mcp/config/registry.json +65 -51
- package/.agent/mcp/servers/notebooklm/README.md +114 -0
- package/.agent/mcp/servers/notebooklm/package.json +35 -0
- package/.agent/mcp/servers/notebooklm/src/auth/chrome.ts +225 -0
- package/.agent/mcp/servers/notebooklm/src/auth/index.ts +1 -0
- package/.agent/mcp/servers/notebooklm/src/index.ts +516 -0
- package/.agent/mcp/servers/notebooklm/src/services/index.ts +3 -0
- package/.agent/mcp/servers/notebooklm/src/services/library.ts +217 -0
- package/.agent/mcp/servers/notebooklm/src/services/notebooklm.ts +380 -0
- package/.agent/mcp/servers/notebooklm/tsconfig.json +15 -0
- package/.agent/mcp-gateway/README.md +169 -20
- package/.agent/mcp-gateway/package.json +22 -7
- package/.agent/mcp-gateway/src/auth/index.ts +55 -0
- package/.agent/mcp-gateway/src/auth/middleware.ts +242 -0
- package/.agent/mcp-gateway/src/auth/oauth.ts +462 -0
- package/.agent/mcp-gateway/src/auth/scopes.ts +227 -0
- package/.agent/mcp-gateway/src/index.ts +252 -105
- package/.agent/mcp-gateway/src/observability/index.ts +5 -0
- package/.agent/mcp-gateway/src/observability/otel.ts +405 -0
- package/.agent/mcp-gateway/src/transports/index.ts +5 -0
- package/.agent/mcp-gateway/src/transports/streamableHttp.ts +235 -0
- package/.agent/rules/CODEX.md +89 -0
- package/.agent/rules/CODE_RULES.md +73 -0
- package/.agent/rules/GEMINI.md +25 -0
- package/.agent/rules/MEMORY_STATE.md +110 -0
- package/.agent/rules/REFERENCE.md +33 -141
- package/.agent/rules/REF_SKILLS.md +116 -0
- package/.agent/rules/REF_WORKFLOWS.md +81 -0
- package/.agent/scripts/ak_cli.py +106 -5
- package/.agent/scripts/memory_manager.py +48 -9
- package/.agent/skills/anti-hallucination/SKILL.md +295 -0
- package/.agent/skills/anti-hallucination/scripts/check_hallucination.py +299 -0
- package/.agent/skills/bifurcation-analysis/SKILL.md +56 -0
- package/.agent/skills/brainstorming/SKILL.md +80 -6
- package/.agent/skills/decision-memory/SKILL.md +317 -0
- package/.agent/skills/emergence-detector/SKILL.md +230 -0
- package/.agent/skills/emergence-detector/scripts/check_emergence.py +265 -0
- package/.agent/skills/explained-qa/SKILL.md +142 -0
- package/.agent/skills/explained-qa/game-terminology.md +214 -0
- package/.agent/skills/game-development/ai-dialogue-engine/SKILL.md +442 -0
- package/.agent/skills/game-development/ai-graphics-generator/SKILL.md +463 -0
- package/.agent/skills/game-development/ai-playtest-framework/SKILL.md +570 -0
- package/.agent/skills/game-development/camera-systems/SKILL.md +607 -0
- package/.agent/skills/game-development/card-battle-engine/SKILL.md +618 -0
- package/.agent/skills/game-development/character-controller-3d/SKILL.md +908 -0
- package/.agent/skills/game-development/cloud-save-sync/SKILL.md +527 -0
- package/.agent/skills/game-development/combat-system/SKILL.md +748 -0
- package/.agent/skills/game-development/compliance-rating/SKILL.md +277 -0
- package/.agent/skills/game-development/crossplatform-build/SKILL.md +386 -0
- package/.agent/skills/game-development/cultivation-progression/SKILL.md +520 -0
- package/.agent/skills/game-development/data-driven-balance/SKILL.md +535 -0
- package/.agent/skills/game-development/game-analytics-integrator/SKILL.md +410 -0
- package/.agent/skills/game-development/game-audio-advanced/SKILL.md +646 -0
- package/.agent/skills/game-development/game-economy-designer/SKILL.md +375 -0
- package/.agent/skills/game-development/game-marketing/SKILL.md +85 -0
- package/.agent/skills/game-development/game-state-manager/SKILL.md +883 -0
- package/.agent/skills/game-development/hybrid-game-spec/SKILL.md +220 -0
- package/.agent/skills/game-development/inventory-quest/SKILL.md +747 -0
- package/.agent/skills/game-development/liveops/SKILL.md +308 -0
- package/.agent/skills/game-development/localization/SKILL.md +286 -0
- package/.agent/skills/game-development/mobile-input-patterns/SKILL.md +343 -0
- package/.agent/skills/game-development/monetization-strategy/SKILL.md +94 -0
- package/.agent/skills/game-development/multiplayer-master/SKILL.md +727 -0
- package/.agent/skills/game-development/narrative-branching/SKILL.md +593 -0
- package/.agent/skills/game-development/procedural-level-ai/SKILL.md +367 -0
- package/.agent/skills/game-development/prototyping-rapid/SKILL.md +205 -0
- package/.agent/skills/game-development/spec-ecosystem/SKILL.md +155 -0
- package/.agent/skills/game-development/spec-ecosystem/decision-log-format.md +129 -0
- package/.agent/skills/game-development/spec-ecosystem/templates/PLAN-template.md +178 -0
- package/.agent/skills/game-development/spec-ecosystem/templates/SPEC-template.md +110 -0
- package/.agent/skills/game-development/spec-ecosystem/templates/TASKS-template.md +156 -0
- package/.agent/skills/game-development/survival-systems/SKILL.md +493 -0
- package/.agent/skills/game-development/testing-qa/SKILL.md +270 -0
- package/.agent/skills/game-development/unity-mobile-optimization/SKILL.md +271 -0
- package/.agent/skills/intent-capture/SKILL.md +65 -0
- package/.agent/skills/mcp-composition/SKILL.md +362 -0
- package/.agent/skills/mcp-observability/SKILL.md +323 -0
- package/.agent/skills/mcp-security/SKILL.md +314 -0
- package/.agent/skills/trust-spectrum/SKILL.md +291 -0
- package/.agent/skills/vibe-coding-guard/SKILL.md +328 -0
- package/.agent/templates/AGENTS.game.md +63 -0
- package/.agent/templates/docs/WORKFLOW_GUIDE.en.md +100 -0
- package/.agent/templates/docs/WORKFLOW_GUIDE.vi.md +100 -0
- package/.agent/workflows/ai-agent.md +2 -0
- package/.agent/workflows/autofix.md +1 -0
- package/.agent/workflows/brainstorm.md +1 -0
- package/.agent/workflows/context.md +1 -0
- package/.agent/workflows/create.md +39 -8
- package/.agent/workflows/dashboard.md +1 -0
- package/.agent/workflows/debug.md +14 -0
- package/.agent/workflows/deploy.md +14 -0
- package/.agent/workflows/enhance.md +44 -0
- package/.agent/workflows/gamekit-init.md +177 -0
- package/.agent/workflows/gamekit-launch.md +338 -0
- package/.agent/workflows/gamekit-plan.md +204 -0
- package/.agent/workflows/gamekit-qa.md +153 -0
- package/.agent/workflows/gamekit-spec.md +243 -0
- package/.agent/workflows/gamekit-tasks.md +208 -0
- package/.agent/workflows/marketing.md +2 -0
- package/.agent/workflows/next.md +1 -0
- package/.agent/workflows/orchestrate.md +12 -0
- package/.agent/workflows/pentest.md +2 -0
- package/.agent/workflows/plan.md +42 -0
- package/.agent/workflows/preview.md +1 -0
- package/.agent/workflows/quality.md +1 -0
- package/.agent/workflows/saas.md +2 -0
- package/.agent/workflows/spec.md +42 -0
- package/.agent/workflows/status.md +1 -0
- package/.agent/workflows/test.md +14 -0
- package/.agent/workflows/ui-ux-pro-max.md +1 -0
- package/bin/cli.js +411 -111
- package/package.json +1 -2
- package/.agent/agents/game-asset-curator.md +0 -317
- package/.agent/agents/game-narrative-designer.md +0 -310
- package/.agent/agents/game-qa-agent.md +0 -441
- package/.agent/workflows/game-prototype.md +0 -154
- package/docs/AI_DATA_INFRASTRUCTURE.md +0 -288
- package/docs/CHANGELOG_AI_INFRA.md +0 -141
- package/docs/MIGRATION_GUIDE_V1.9.md +0 -55
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: testing-qa
|
|
3
|
+
description: Comprehensive QA and testing patterns for games. Playtesting, alpha/beta phases, bug triage, performance testing, and automated testing for Unity.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Game Testing & QA Skill
|
|
7
|
+
|
|
8
|
+
> **Purpose**: Systematic quality assurance for game development.
|
|
9
|
+
|
|
10
|
+
## When to Use
|
|
11
|
+
- Preparing for alpha/beta release
|
|
12
|
+
- Setting up automated test suites
|
|
13
|
+
- Organizing playtesting sessions
|
|
14
|
+
- Debugging production issues
|
|
15
|
+
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
## 1. Testing Phases
|
|
19
|
+
|
|
20
|
+
```
|
|
21
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
22
|
+
│ TESTING LIFECYCLE │
|
|
23
|
+
├─────────────────────────────────────────────────────────────┤
|
|
24
|
+
│ DEV TEST → ALPHA → CLOSED BETA → OPEN BETA → RELEASE │
|
|
25
|
+
│ ↓ ↓ ↓ ↓ ↓ │
|
|
26
|
+
│ Internal Friends Invited Public Everyone │
|
|
27
|
+
│ Team only & Family Testers Testers │
|
|
28
|
+
└─────────────────────────────────────────────────────────────┘
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
### Phase Goals
|
|
32
|
+
| Phase | Focus | Testers |
|
|
33
|
+
|-------|-------|---------|
|
|
34
|
+
| **Dev Test** | Core mechanics work | Team only |
|
|
35
|
+
| **Alpha** | Feature complete, major bugs | 10-50 |
|
|
36
|
+
| **Closed Beta** | Balance, UX, edge cases | 100-1000 |
|
|
37
|
+
| **Open Beta** | Scale, server load, final polish | Unlimited |
|
|
38
|
+
|
|
39
|
+
---
|
|
40
|
+
|
|
41
|
+
## 2. Playtesting Sessions
|
|
42
|
+
|
|
43
|
+
### Session Structure
|
|
44
|
+
```markdown
|
|
45
|
+
## Playtest Session Plan
|
|
46
|
+
|
|
47
|
+
**Duration**: 30-60 minutes
|
|
48
|
+
**Testers**: [X] people
|
|
49
|
+
**Build**: v[X.X.X]
|
|
50
|
+
|
|
51
|
+
### Pre-Session (5 min)
|
|
52
|
+
- Explain purpose (not testing player, testing game)
|
|
53
|
+
- No hints during play
|
|
54
|
+
- Think-aloud protocol
|
|
55
|
+
|
|
56
|
+
### Observation (20-40 min)
|
|
57
|
+
- Silent observation
|
|
58
|
+
- Note confusion points
|
|
59
|
+
- Track completion times
|
|
60
|
+
|
|
61
|
+
### Post-Session (10-15 min)
|
|
62
|
+
- Open questions first
|
|
63
|
+
- Then specific questions
|
|
64
|
+
- Collect written feedback
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### Observation Checklist
|
|
68
|
+
- [ ] Where did player get stuck?
|
|
69
|
+
- [ ] What did player try that didn't work?
|
|
70
|
+
- [ ] What did player miss?
|
|
71
|
+
- [ ] What caused frustration?
|
|
72
|
+
- [ ] What caused joy?
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
## 3. Bug Triage System
|
|
77
|
+
|
|
78
|
+
### Severity Classification
|
|
79
|
+
| Severity | Definition | Response Time |
|
|
80
|
+
|----------|------------|---------------|
|
|
81
|
+
| **S1 - Critical** | Game unplayable, data loss, crash | Immediate |
|
|
82
|
+
| **S2 - Major** | Feature broken, blocking progression | 24 hours |
|
|
83
|
+
| **S3 - Minor** | Annoying but workaround exists | Next sprint |
|
|
84
|
+
| **S4 - Trivial** | Cosmetic, typo, minor polish | Backlog |
|
|
85
|
+
|
|
86
|
+
### Bug Report Template
|
|
87
|
+
```markdown
|
|
88
|
+
## Bug: [Short Description]
|
|
89
|
+
|
|
90
|
+
**Severity**: S[1-4]
|
|
91
|
+
**Platform**: [iOS/Android/PC]
|
|
92
|
+
**Build**: v[X.X.X]
|
|
93
|
+
|
|
94
|
+
### Steps to Reproduce
|
|
95
|
+
1. [Step 1]
|
|
96
|
+
2. [Step 2]
|
|
97
|
+
3. [Step 3]
|
|
98
|
+
|
|
99
|
+
### Expected Behavior
|
|
100
|
+
[What should happen]
|
|
101
|
+
|
|
102
|
+
### Actual Behavior
|
|
103
|
+
[What actually happens]
|
|
104
|
+
|
|
105
|
+
### Evidence
|
|
106
|
+
[Screenshot/Video/Logs]
|
|
107
|
+
|
|
108
|
+
### Additional Context
|
|
109
|
+
[Device, OS version, etc.]
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
## 4. Performance Testing
|
|
115
|
+
|
|
116
|
+
### Target Metrics
|
|
117
|
+
| Metric | Mobile Target | PC Target |
|
|
118
|
+
|--------|---------------|-----------|
|
|
119
|
+
| **FPS** | 30-60 stable | 60+ stable |
|
|
120
|
+
| **Frame Time** | <33ms | <16ms |
|
|
121
|
+
| **Memory** | <500MB | <2GB |
|
|
122
|
+
| **Load Time** | <5s | <3s |
|
|
123
|
+
| **Battery Drain** | <10%/hour | N/A |
|
|
124
|
+
|
|
125
|
+
### Performance Test Checklist
|
|
126
|
+
- [ ] Profile on lowest target device
|
|
127
|
+
- [ ] Test full session (30+ min)
|
|
128
|
+
- [ ] Monitor thermal throttling
|
|
129
|
+
- [ ] Check memory leaks
|
|
130
|
+
- [ ] Measure after 100 entity spawns
|
|
131
|
+
|
|
132
|
+
### Unity Profiler Commands
|
|
133
|
+
```csharp
|
|
134
|
+
// Frame timing
|
|
135
|
+
Profiler.BeginSample("MySystem");
|
|
136
|
+
// ... code ...
|
|
137
|
+
Profiler.EndSample();
|
|
138
|
+
|
|
139
|
+
// Memory snapshot
|
|
140
|
+
UnityEngine.Profiling.Memory.Experimental.MemoryProfiler.TakeSnapshot();
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
---
|
|
144
|
+
|
|
145
|
+
## 5. Automated Testing (Unity)
|
|
146
|
+
|
|
147
|
+
### Test Types
|
|
148
|
+
|
|
149
|
+
| Type | Purpose | Location |
|
|
150
|
+
|------|---------|----------|
|
|
151
|
+
| **Edit Mode** | Logic, utilities, pure C# | `Tests/Editor/` |
|
|
152
|
+
| **Play Mode** | Runtime, MonoBehaviour | `Tests/Runtime/` |
|
|
153
|
+
| **Integration** | Full systems together | `Tests/Integration/` |
|
|
154
|
+
|
|
155
|
+
### Edit Mode Test Example
|
|
156
|
+
```csharp
|
|
157
|
+
// Tests/Editor/CombatTests.cs
|
|
158
|
+
using NUnit.Framework;
|
|
159
|
+
|
|
160
|
+
[TestFixture]
|
|
161
|
+
public class CombatTests
|
|
162
|
+
{
|
|
163
|
+
[Test]
|
|
164
|
+
public void Damage_ReducesHealth()
|
|
165
|
+
{
|
|
166
|
+
var health = new HealthComponent(100);
|
|
167
|
+
health.TakeDamage(25);
|
|
168
|
+
Assert.AreEqual(75, health.CurrentHealth);
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
[Test]
|
|
172
|
+
public void Damage_CannotGoBelowZero()
|
|
173
|
+
{
|
|
174
|
+
var health = new HealthComponent(50);
|
|
175
|
+
health.TakeDamage(100);
|
|
176
|
+
Assert.AreEqual(0, health.CurrentHealth);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
### Play Mode Test Example
|
|
182
|
+
```csharp
|
|
183
|
+
// Tests/Runtime/PlayerMovementTests.cs
|
|
184
|
+
using System.Collections;
|
|
185
|
+
using NUnit.Framework;
|
|
186
|
+
using UnityEngine;
|
|
187
|
+
using UnityEngine.TestTools;
|
|
188
|
+
|
|
189
|
+
public class PlayerMovementTests
|
|
190
|
+
{
|
|
191
|
+
private GameObject _player;
|
|
192
|
+
|
|
193
|
+
[SetUp]
|
|
194
|
+
public void Setup()
|
|
195
|
+
{
|
|
196
|
+
_player = new GameObject("Player");
|
|
197
|
+
_player.AddComponent<PlayerController>();
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
[TearDown]
|
|
201
|
+
public void Teardown()
|
|
202
|
+
{
|
|
203
|
+
Object.Destroy(_player);
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
[UnityTest]
|
|
207
|
+
public IEnumerator Player_MovesRight_WhenInputPositive()
|
|
208
|
+
{
|
|
209
|
+
var controller = _player.GetComponent<PlayerController>();
|
|
210
|
+
var startPos = _player.transform.position;
|
|
211
|
+
|
|
212
|
+
controller.SimulateInput(Vector2.right);
|
|
213
|
+
yield return new WaitForSeconds(0.5f);
|
|
214
|
+
|
|
215
|
+
Assert.Greater(_player.transform.position.x, startPos.x);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
```
|
|
219
|
+
|
|
220
|
+
---
|
|
221
|
+
|
|
222
|
+
## 6. Regression Testing
|
|
223
|
+
|
|
224
|
+
### When to Run
|
|
225
|
+
- Before every release
|
|
226
|
+
- After major feature merge
|
|
227
|
+
- After engine update
|
|
228
|
+
- After platform SDK update
|
|
229
|
+
|
|
230
|
+
### Regression Checklist
|
|
231
|
+
- [ ] All save files load correctly
|
|
232
|
+
- [ ] Tutorial completes without errors
|
|
233
|
+
- [ ] IAP flow works (sandbox)
|
|
234
|
+
- [ ] Ads display and reward correctly
|
|
235
|
+
- [ ] Analytics events fire
|
|
236
|
+
- [ ] All levels completable
|
|
237
|
+
- [ ] No new crashes in crash reporter
|
|
238
|
+
|
|
239
|
+
---
|
|
240
|
+
|
|
241
|
+
## 7. Test Coverage Guidelines
|
|
242
|
+
|
|
243
|
+
| System | Required Coverage |
|
|
244
|
+
|--------|-------------------|
|
|
245
|
+
| **Save/Load** | 90%+ (critical) |
|
|
246
|
+
| **Economy** | 80%+ (balance-sensitive) |
|
|
247
|
+
| **Combat** | 70%+ (core mechanic) |
|
|
248
|
+
| **UI Navigation** | 50%+ (regression) |
|
|
249
|
+
| **Visual Polish** | Manual only |
|
|
250
|
+
|
|
251
|
+
---
|
|
252
|
+
|
|
253
|
+
## Anti-Patterns
|
|
254
|
+
|
|
255
|
+
| ❌ Don't | ✅ Do |
|
|
256
|
+
|----------|-------|
|
|
257
|
+
| Test only happy path | Test edge cases |
|
|
258
|
+
| Skip low-end device testing | Test on min spec |
|
|
259
|
+
| Rely only on team testing | Use external testers |
|
|
260
|
+
| Fix all bugs at once | Prioritize by severity |
|
|
261
|
+
| Ship without regression | Run full suite before release |
|
|
262
|
+
|
|
263
|
+
---
|
|
264
|
+
|
|
265
|
+
## Related Skills
|
|
266
|
+
- `game-development/game-analytics-integrator`
|
|
267
|
+
- `game-development/unity-integration`
|
|
268
|
+
|
|
269
|
+
## Related Workflows
|
|
270
|
+
- `/game-launch` - Includes pre-launch audit
|
|
@@ -0,0 +1,271 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: unity-mobile-optimization
|
|
3
|
+
description: Mobile-specific optimization for Unity games. Battery, thermal, memory management, build size, and platform-specific optimizations for iOS and Android.
|
|
4
|
+
allowed-tools: Read, Write, Edit, Bash, Grep, WebSearch
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Unity Mobile Optimization Skill
|
|
8
|
+
|
|
9
|
+
> Expert-level mobile optimization patterns for Unity 6 targeting iOS and Android.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## When to Use
|
|
14
|
+
|
|
15
|
+
- Optimizing Unity games for mobile devices
|
|
16
|
+
- Debugging performance issues on phones/tablets
|
|
17
|
+
- Reducing battery drain and heat
|
|
18
|
+
- Minimizing build size for app stores
|
|
19
|
+
- Platform-specific tuning (iOS Metal, Android Vulkan)
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Performance Targets
|
|
24
|
+
|
|
25
|
+
| Metric | iOS Target | Android Target | Tool |
|
|
26
|
+
|--------|------------|----------------|------|
|
|
27
|
+
| **FPS** | 60 stable | 30-60 stable | Profiler |
|
|
28
|
+
| **Frame Time** | < 16.67ms | < 33ms | Profiler |
|
|
29
|
+
| **Draw Calls** | < 100 | < 80 | Frame Debugger |
|
|
30
|
+
| **SetPass Calls** | < 50 | < 40 | Frame Debugger |
|
|
31
|
+
| **Memory** | < 500MB | < 400MB | Memory Profiler |
|
|
32
|
+
| **Battery** | < 5%/hour | < 8%/hour | Device monitor |
|
|
33
|
+
| **Build Size** | < 200MB | < 150MB AAB | Build Report |
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## Battery Optimization
|
|
38
|
+
|
|
39
|
+
### Frame Rate Management
|
|
40
|
+
```csharp
|
|
41
|
+
public class BatteryManager : MonoBehaviour
|
|
42
|
+
{
|
|
43
|
+
[SerializeField] private int _gameplayFPS = 60;
|
|
44
|
+
[SerializeField] private int _menuFPS = 30;
|
|
45
|
+
[SerializeField] private int _backgroundFPS = 5;
|
|
46
|
+
|
|
47
|
+
public void SetGameState(GameState state)
|
|
48
|
+
{
|
|
49
|
+
Application.targetFrameRate = state switch
|
|
50
|
+
{
|
|
51
|
+
GameState.Playing => _gameplayFPS,
|
|
52
|
+
GameState.Menu => _menuFPS,
|
|
53
|
+
GameState.Paused => _backgroundFPS,
|
|
54
|
+
_ => _gameplayFPS
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
void OnApplicationPause(bool paused)
|
|
59
|
+
{
|
|
60
|
+
Application.targetFrameRate = paused ? 1 : _gameplayFPS;
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### GPU Throttling Detection
|
|
66
|
+
```csharp
|
|
67
|
+
public class ThermalManager : MonoBehaviour
|
|
68
|
+
{
|
|
69
|
+
private float _lastFrameTime;
|
|
70
|
+
private int _consecutiveSlowFrames;
|
|
71
|
+
|
|
72
|
+
void Update()
|
|
73
|
+
{
|
|
74
|
+
float frameTime = Time.deltaTime;
|
|
75
|
+
|
|
76
|
+
// Detect thermal throttling
|
|
77
|
+
if (frameTime > 0.02f) // >20ms
|
|
78
|
+
{
|
|
79
|
+
_consecutiveSlowFrames++;
|
|
80
|
+
if (_consecutiveSlowFrames > 60) // 1 second of slow frames
|
|
81
|
+
{
|
|
82
|
+
ReduceQuality();
|
|
83
|
+
_consecutiveSlowFrames = 0;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
else
|
|
87
|
+
{
|
|
88
|
+
_consecutiveSlowFrames = 0;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
void ReduceQuality()
|
|
93
|
+
{
|
|
94
|
+
QualitySettings.DecreaseLevel();
|
|
95
|
+
Application.targetFrameRate = 30;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
---
|
|
101
|
+
|
|
102
|
+
## Memory Management
|
|
103
|
+
|
|
104
|
+
### Addressables Best Practices
|
|
105
|
+
```csharp
|
|
106
|
+
public class AssetLoader : MonoBehaviour
|
|
107
|
+
{
|
|
108
|
+
private Dictionary<string, AsyncOperationHandle> _loadedAssets = new();
|
|
109
|
+
|
|
110
|
+
public async UniTask<T> LoadAsset<T>(string key) where T : Object
|
|
111
|
+
{
|
|
112
|
+
if (_loadedAssets.TryGetValue(key, out var handle))
|
|
113
|
+
return (T)handle.Result;
|
|
114
|
+
|
|
115
|
+
var newHandle = Addressables.LoadAssetAsync<T>(key);
|
|
116
|
+
await newHandle.ToUniTask();
|
|
117
|
+
|
|
118
|
+
_loadedAssets[key] = newHandle;
|
|
119
|
+
return newHandle.Result as T;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
public void UnloadAsset(string key)
|
|
123
|
+
{
|
|
124
|
+
if (_loadedAssets.TryGetValue(key, out var handle))
|
|
125
|
+
{
|
|
126
|
+
Addressables.Release(handle);
|
|
127
|
+
_loadedAssets.Remove(key);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
public void UnloadAll()
|
|
132
|
+
{
|
|
133
|
+
foreach (var handle in _loadedAssets.Values)
|
|
134
|
+
Addressables.Release(handle);
|
|
135
|
+
_loadedAssets.Clear();
|
|
136
|
+
|
|
137
|
+
Resources.UnloadUnusedAssets();
|
|
138
|
+
GC.Collect();
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
### Texture Compression Guide
|
|
144
|
+
| Platform | Format | Quality | Use Case |
|
|
145
|
+
|----------|--------|---------|----------|
|
|
146
|
+
| iOS | ASTC 6x6 | High | Characters, UI |
|
|
147
|
+
| iOS | ASTC 8x8 | Medium | Backgrounds |
|
|
148
|
+
| Android | ETC2 | Good | Universal |
|
|
149
|
+
| Android | ASTC | Best | High-end only |
|
|
150
|
+
|
|
151
|
+
---
|
|
152
|
+
|
|
153
|
+
## Build Size Optimization
|
|
154
|
+
|
|
155
|
+
### Code Stripping
|
|
156
|
+
```csharp
|
|
157
|
+
// link.xml - Prevent stripping needed assemblies
|
|
158
|
+
<linker>
|
|
159
|
+
<assembly fullname="UnityEngine">
|
|
160
|
+
<type fullname="UnityEngine.Networking.*" preserve="all"/>
|
|
161
|
+
</assembly>
|
|
162
|
+
</linker>
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
### Build Settings
|
|
166
|
+
```
|
|
167
|
+
Player Settings:
|
|
168
|
+
- Scripting Backend: IL2CPP
|
|
169
|
+
- Managed Stripping Level: High
|
|
170
|
+
- Engine Code Stripping: Enabled
|
|
171
|
+
- Compress Meshes: Enabled
|
|
172
|
+
- Vertex Compression: Everything
|
|
173
|
+
|
|
174
|
+
Android:
|
|
175
|
+
- Build App Bundle (AAB)
|
|
176
|
+
- Split Application Binary
|
|
177
|
+
- Target Architectures: ARM64 only
|
|
178
|
+
|
|
179
|
+
iOS:
|
|
180
|
+
- App Thinning: Automatic
|
|
181
|
+
- Strip Engine Code: Enabled
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
---
|
|
185
|
+
|
|
186
|
+
## Platform-Specific
|
|
187
|
+
|
|
188
|
+
### iOS Metal
|
|
189
|
+
```csharp
|
|
190
|
+
// Check Metal support
|
|
191
|
+
if (SystemInfo.graphicsDeviceType == GraphicsDeviceType.Metal)
|
|
192
|
+
{
|
|
193
|
+
// Metal-specific optimizations
|
|
194
|
+
QualitySettings.antiAliasing = 0; // Use FXAA instead
|
|
195
|
+
}
|
|
196
|
+
```
|
|
197
|
+
|
|
198
|
+
### Android Vulkan
|
|
199
|
+
```csharp
|
|
200
|
+
// Prefer Vulkan, fallback to GLES
|
|
201
|
+
// Set in Player Settings: Auto Graphics API
|
|
202
|
+
|
|
203
|
+
#if UNITY_ANDROID
|
|
204
|
+
void Start()
|
|
205
|
+
{
|
|
206
|
+
bool isVulkan = SystemInfo.graphicsDeviceType == GraphicsDeviceType.Vulkan;
|
|
207
|
+
Debug.Log($"Graphics API: {(isVulkan ? "Vulkan" : "OpenGL ES")}");
|
|
208
|
+
}
|
|
209
|
+
#endif
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
---
|
|
213
|
+
|
|
214
|
+
## Profiling Workflow
|
|
215
|
+
|
|
216
|
+
### Step 1: Profile on Device
|
|
217
|
+
```
|
|
218
|
+
1. Build Development Build with Autoconnect Profiler
|
|
219
|
+
2. Connect device via USB/WiFi
|
|
220
|
+
3. Run game and capture frames
|
|
221
|
+
4. Focus on:
|
|
222
|
+
- GC.Alloc column
|
|
223
|
+
- Rendering time
|
|
224
|
+
- Scripts time
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
### Step 2: Identify Hotspots
|
|
228
|
+
```csharp
|
|
229
|
+
// Use profiler markers
|
|
230
|
+
using (new ProfilerMarker("MyExpensiveFunction").Auto())
|
|
231
|
+
{
|
|
232
|
+
// Code to profile
|
|
233
|
+
}
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
### Step 3: Fix Priority
|
|
237
|
+
1. GC Allocations (causes stutters)
|
|
238
|
+
2. Draw calls (GPU bound)
|
|
239
|
+
3. Physics (CPU heavy)
|
|
240
|
+
4. Scripts (logic overhead)
|
|
241
|
+
|
|
242
|
+
---
|
|
243
|
+
|
|
244
|
+
## Quick Wins Checklist
|
|
245
|
+
|
|
246
|
+
- [ ] `Application.targetFrameRate` set explicitly
|
|
247
|
+
- [ ] All `GetComponent` calls cached
|
|
248
|
+
- [ ] Object pooling for bullets/effects
|
|
249
|
+
- [ ] Static batching enabled
|
|
250
|
+
- [ ] Texture compression correct per platform
|
|
251
|
+
- [ ] No `Resources.Load` in gameplay
|
|
252
|
+
- [ ] `CompareTag` instead of `tag ==`
|
|
253
|
+
- [ ] `NonAlloc` physics methods used
|
|
254
|
+
- [ ] StringBuilder for string operations
|
|
255
|
+
- [ ] No LINQ in Update loops
|
|
256
|
+
|
|
257
|
+
---
|
|
258
|
+
|
|
259
|
+
## Anti-Patterns
|
|
260
|
+
|
|
261
|
+
| ❌ Don't | ✅ Do |
|
|
262
|
+
|----------|-------|
|
|
263
|
+
| Max quality everywhere | Adjust by device tier |
|
|
264
|
+
| Ignore battery/heat | Monitor and adapt |
|
|
265
|
+
| 4K textures on mobile | Max 2K, usually 1K |
|
|
266
|
+
| Full mesh colliders | Simple primitives |
|
|
267
|
+
| Sync asset loading | Async with loading screen |
|
|
268
|
+
|
|
269
|
+
---
|
|
270
|
+
|
|
271
|
+
> **Remember:** Profile first, optimize second. Don't guess.
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: intent-capture
|
|
3
|
+
description: "High-resolution intent extraction for Vibe Coding. Extracts explicit requests, implicit needs, unknown needs, and anti-goals."
|
|
4
|
+
version: "1.0.0"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# 🎯 Intent Capture
|
|
8
|
+
|
|
9
|
+
> **"Capture the vibe, not just the command"**
|
|
10
|
+
|
|
11
|
+
This skill ensures that as an AI agent, you understand not just what the user said, but what they actually need to succeed in the 2026 Vibe Coding era.
|
|
12
|
+
|
|
13
|
+
---
|
|
14
|
+
|
|
15
|
+
## The Intent Matrix
|
|
16
|
+
|
|
17
|
+
When a user makes a request, analyze it across these 4 dimensions:
|
|
18
|
+
|
|
19
|
+
| Dimension | Question | Example |
|
|
20
|
+
|-----------|----------|---------|
|
|
21
|
+
| **Explicit** | What did they literally ask for? | "Create a login page" |
|
|
22
|
+
| **Implicit** | What is required based on context? | "Must be mobile-responsive, use Tailwind" |
|
|
23
|
+
| **Unknown** | What haven't they considered yet? | "Need CSRF protection, rate limiting" |
|
|
24
|
+
| **Anti-Goals** | What do they specifically NOT want? | "No social logins, no third-party cookies" |
|
|
25
|
+
|
|
26
|
+
---
|
|
27
|
+
|
|
28
|
+
## 📋 Pre-Flight Intent Checklist
|
|
29
|
+
|
|
30
|
+
Before moving to the B (Bifurcation) stage of VIBES, verify:
|
|
31
|
+
|
|
32
|
+
- [ ] **Problem Understanding**: Why is the user asking for this?
|
|
33
|
+
- [ ] **Success Criteria**: What does "done" look like to them? (Outcome vs Process)
|
|
34
|
+
- [ ] **Hidden Constraints**: Any tech stack or performance limits?
|
|
35
|
+
- [ ] **Risk Level**: Is this a prototype or production-critical?
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## 🎼 CONDUCTOR Integration
|
|
40
|
+
|
|
41
|
+
As a CONDUCTOR, your role in Intent Capture is:
|
|
42
|
+
|
|
43
|
+
1. **Context Provision**: Feed the agent related files and past decisions.
|
|
44
|
+
2. **Socratic Probing**: Ask ONE high-leverage question at a time to fill gaps.
|
|
45
|
+
3. **Synthesis**: Summarize the intent back to the user to confirm alignment.
|
|
46
|
+
|
|
47
|
+
---
|
|
48
|
+
|
|
49
|
+
## Usage Patterns
|
|
50
|
+
|
|
51
|
+
### For New Features
|
|
52
|
+
Run intent extraction before any architecture planning.
|
|
53
|
+
|
|
54
|
+
### For Bug Fixes
|
|
55
|
+
Identify the *intended behavior* versus the *actual behavior* before proposing a solution.
|
|
56
|
+
|
|
57
|
+
### For Refactors
|
|
58
|
+
Identify the *underlying goal* (performance? maintainability?) to avoid circular refactoring.
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
## Related Skills
|
|
63
|
+
- `brainstorming` - The communication engine for intent capture
|
|
64
|
+
- `bifurcation-analysis` - The next step in VIBES
|
|
65
|
+
- `vibe-coding-guard` - The overall framework
|