@leejungkiin/awkit 1.0.9 → 1.1.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/README.md +3 -3
- package/VERSION +1 -1
- package/bin/awf.js +1 -1
- package/bin/awk.js +287 -34
- package/core/AGENTS.md +8 -9
- package/core/GEMINI.md +77 -199
- package/package.json +2 -1
- package/skill-packs/neural-memory/skills/nm-memory-sync/SKILL.md +2 -2
- package/skills/CATALOG.md +3 -2
- package/skills/README.md +109 -0
- package/skills/android-re-analyzer/SKILL.md +238 -0
- package/skills/android-re-analyzer/references/api-extraction-patterns.md +119 -0
- package/skills/android-re-analyzer/references/call-flow-analysis.md +176 -0
- package/skills/android-re-analyzer/references/fernflower-usage.md +115 -0
- package/skills/android-re-analyzer/references/jadx-usage.md +116 -0
- package/skills/android-re-analyzer/references/setup-guide.md +221 -0
- package/skills/android-re-analyzer/scripts/check-deps.sh +129 -0
- package/skills/android-re-analyzer/scripts/decompile.sh +375 -0
- package/skills/android-re-analyzer/scripts/find-api-calls.sh +118 -0
- package/skills/android-re-analyzer/scripts/install-dep.sh +448 -0
- package/skills/awf-session-restore/SKILL.md +108 -184
- package/skills/beads-manager/SKILL.md +2 -2
- package/skills/brainstorm-agent/SKILL.md +47 -2
- package/skills/gemini-conductor/SKILL.md +234 -0
- package/skills/memory-sync/SKILL.md +29 -1
- package/skills/nm-memory-sync/SKILL.md +2 -2
- package/skills/orchestrator/SKILL.md +32 -154
- package/skills/skills/nm-memory-sync/SKILL.md +2 -2
- package/skills/smali-to-kotlin/SKILL.md +1 -1
- package/skills/smali-to-swift/SKILL.md +1 -1
- package/skills/swiftui-pro/SKILL.md +108 -0
- package/skills/swiftui-pro/agents/openai.yaml +10 -0
- package/skills/swiftui-pro/assets/swiftui-pro-icon.png +0 -0
- package/skills/swiftui-pro/assets/swiftui-pro-icon.svg +29 -0
- package/skills/swiftui-pro/references/accessibility.md +13 -0
- package/skills/swiftui-pro/references/api.md +39 -0
- package/skills/swiftui-pro/references/data.md +43 -0
- package/skills/swiftui-pro/references/design.md +31 -0
- package/skills/swiftui-pro/references/hygiene.md +9 -0
- package/skills/swiftui-pro/references/navigation.md +14 -0
- package/skills/swiftui-pro/references/performance.md +46 -0
- package/skills/swiftui-pro/references/swift.md +56 -0
- package/skills/swiftui-pro/references/views.md +35 -0
- package/skills/symphony-enforcer/SKILL.md +227 -0
- package/skills/symphony-orchestrator/SKILL.md +301 -0
- package/skills/telegram-notify/SKILL.md +57 -0
- package/symphony/LICENSE +21 -0
- package/symphony/README.md +178 -0
- package/symphony/app/api/agents/route.js +152 -0
- package/symphony/app/api/events/route.js +22 -0
- package/symphony/app/api/knowledge/route.js +253 -0
- package/symphony/app/api/locks/route.js +29 -0
- package/symphony/app/api/notes/route.js +125 -0
- package/symphony/app/api/preflight/route.js +23 -0
- package/symphony/app/api/projects/route.js +116 -0
- package/symphony/app/api/roles/route.js +134 -0
- package/symphony/app/api/skills/route.js +82 -0
- package/symphony/app/api/status/route.js +18 -0
- package/symphony/app/api/tasks/route.js +157 -0
- package/symphony/app/api/workflows/route.js +61 -0
- package/symphony/app/api/workspaces/route.js +15 -0
- package/symphony/app/globals.css +2605 -0
- package/symphony/app/layout.js +20 -0
- package/symphony/app/page.js +2122 -0
- package/symphony/cli/index.js +1060 -0
- package/symphony/core/agent-manager.js +357 -0
- package/symphony/core/context-bus.js +100 -0
- package/symphony/core/db.js +223 -0
- package/symphony/core/file-lock-manager.js +154 -0
- package/symphony/core/merge-pipeline.js +234 -0
- package/symphony/core/orchestrator.js +236 -0
- package/symphony/core/task-manager.js +335 -0
- package/symphony/core/workspace-manager.js +168 -0
- package/symphony/jsconfig.json +7 -0
- package/symphony/lib/core.mjs +1034 -0
- package/symphony/mcp/index.js +29 -0
- package/symphony/mcp/server.js +110 -0
- package/symphony/mcp/tools/context.js +80 -0
- package/symphony/mcp/tools/locks.js +99 -0
- package/symphony/mcp/tools/status.js +82 -0
- package/symphony/mcp/tools/tasks.js +216 -0
- package/symphony/mcp/tools/workspace.js +143 -0
- package/symphony/next.config.mjs +7 -0
- package/symphony/package.json +53 -0
- package/symphony/scripts/postinstall.js +49 -0
- package/symphony/symphony.config.js +41 -0
- package/templates/conductor-tracks.md +38 -0
- package/templates/workflow_dual_mode_template.md +5 -5
- package/workflows/_uncategorized/AGENTS.md +38 -0
- package/workflows/_uncategorized/decompile.md +67 -0
- package/workflows/_uncategorized/skill-health.md +7 -7
- package/workflows/ads/ads-audit.md +5 -5
- package/workflows/ads/ads-optimize.md +10 -10
- package/workflows/ads/adsExpert.md +7 -7
- package/workflows/conductor.md +97 -0
- package/workflows/context/auto-implement.md +4 -4
- package/workflows/context/codebase-sync.md +19 -8
- package/workflows/context/next.md +27 -27
- package/workflows/context/user-intent-analysis-workflow.md +4 -4
- package/workflows/expert/codeExpert.md +28 -31
- package/workflows/expert/debugExpert.md +11 -11
- package/workflows/expert/planExpert.md +21 -36
- package/workflows/git/smart-git-ops.md +49 -6
- package/workflows/lifecycle/debug.md +7 -7
- package/workflows/lifecycle/deploy.md +10 -10
- package/workflows/lifecycle/master-code-workflow.md +3 -3
- package/workflows/lifecycle/plan.md +19 -21
- package/workflows/quality/audit.md +1 -1
- package/workflows/quality/project-audit.md +1 -1
- package/workflows/roles/vibe-coding-master-workflow.md +2 -2
- package/workflows/smart-git-ops.md +146 -0
- package/workflows/ui/app-screen-analyzer.md +4 -4
- package/workflows/ui/create-feature.md +8 -8
- package/workflows/ui/create-spec-architect.md +11 -11
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Symphony MCP Tools — Workspace Management
|
|
3
|
+
*
|
|
4
|
+
* Tools for workspace/git operations:
|
|
5
|
+
* - symphony_workspace_status: Get workspace info + diff stats
|
|
6
|
+
* - symphony_merge_task: Trigger auto-merge pipeline
|
|
7
|
+
*/
|
|
8
|
+
const { z } = require('zod');
|
|
9
|
+
const workspaceManager = require('../../core/workspace-manager');
|
|
10
|
+
const mergePipeline = require('../../core/merge-pipeline');
|
|
11
|
+
|
|
12
|
+
const tools = [];
|
|
13
|
+
|
|
14
|
+
// ─── symphony_workspace_status ──────────────────────────────────────────────
|
|
15
|
+
|
|
16
|
+
tools.push({
|
|
17
|
+
name: 'symphony_workspace_status',
|
|
18
|
+
description: 'Get workspace info for a task — branch, path, diff stats, and commit log.',
|
|
19
|
+
schema: {
|
|
20
|
+
task_id: z.string().describe('Task ID to check workspace for'),
|
|
21
|
+
},
|
|
22
|
+
handler: async ({ task_id }) => {
|
|
23
|
+
try {
|
|
24
|
+
const ws = workspaceManager.getWorkspace(task_id);
|
|
25
|
+
|
|
26
|
+
if (!ws) {
|
|
27
|
+
return {
|
|
28
|
+
content: [{
|
|
29
|
+
type: 'text',
|
|
30
|
+
text: JSON.stringify({
|
|
31
|
+
exists: false,
|
|
32
|
+
message: `No active workspace for task ${task_id}`,
|
|
33
|
+
}),
|
|
34
|
+
}],
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
// Get repo path from workspace path
|
|
39
|
+
const path = require('path');
|
|
40
|
+
const repoPath = getRepoPath(ws.path);
|
|
41
|
+
|
|
42
|
+
const diff = mergePipeline.getDiff(task_id, repoPath);
|
|
43
|
+
const log = mergePipeline.getBranchLog(task_id, repoPath);
|
|
44
|
+
const conflicts = mergePipeline.checkConflicts(task_id, repoPath);
|
|
45
|
+
|
|
46
|
+
return {
|
|
47
|
+
content: [{
|
|
48
|
+
type: 'text',
|
|
49
|
+
text: JSON.stringify({
|
|
50
|
+
exists: true,
|
|
51
|
+
workspace: {
|
|
52
|
+
id: ws.id,
|
|
53
|
+
path: ws.path,
|
|
54
|
+
branch: ws.branch,
|
|
55
|
+
type: ws.type,
|
|
56
|
+
created_at: ws.created_at,
|
|
57
|
+
},
|
|
58
|
+
diff: {
|
|
59
|
+
files: diff.files,
|
|
60
|
+
insertions: diff.insertions,
|
|
61
|
+
deletions: diff.deletions,
|
|
62
|
+
},
|
|
63
|
+
commits: log.length,
|
|
64
|
+
commitLog: log.slice(0, 10),
|
|
65
|
+
hasConflicts: conflicts.hasConflicts,
|
|
66
|
+
conflictingFiles: conflicts.conflictingFiles,
|
|
67
|
+
}),
|
|
68
|
+
}],
|
|
69
|
+
};
|
|
70
|
+
} catch (error) {
|
|
71
|
+
return {
|
|
72
|
+
content: [{ type: 'text', text: JSON.stringify({ error: error.message }) }],
|
|
73
|
+
isError: true,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
},
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
// ─── symphony_merge_task ────────────────────────────────────────────────────
|
|
80
|
+
|
|
81
|
+
tools.push({
|
|
82
|
+
name: 'symphony_merge_task',
|
|
83
|
+
description: 'Run auto-merge pipeline for a completed task: rebase → merge → cleanup.',
|
|
84
|
+
schema: {
|
|
85
|
+
task_id: z.string().describe('Task ID to merge'),
|
|
86
|
+
repo_path: z.string().optional().describe('Repository path (auto-detected if omitted)'),
|
|
87
|
+
},
|
|
88
|
+
handler: async ({ task_id, repo_path }) => {
|
|
89
|
+
try {
|
|
90
|
+
const ws = workspaceManager.getWorkspace(task_id);
|
|
91
|
+
if (!ws) {
|
|
92
|
+
return {
|
|
93
|
+
content: [{
|
|
94
|
+
type: 'text',
|
|
95
|
+
text: JSON.stringify({
|
|
96
|
+
status: 'error',
|
|
97
|
+
message: `No active workspace for task ${task_id}`,
|
|
98
|
+
}),
|
|
99
|
+
}],
|
|
100
|
+
isError: true,
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
const repoPath = repo_path || getRepoPath(ws.path);
|
|
105
|
+
const result = mergePipeline.autoMerge(task_id, repoPath);
|
|
106
|
+
|
|
107
|
+
return {
|
|
108
|
+
content: [{
|
|
109
|
+
type: 'text',
|
|
110
|
+
text: JSON.stringify(result),
|
|
111
|
+
}],
|
|
112
|
+
isError: result.status === 'error',
|
|
113
|
+
};
|
|
114
|
+
} catch (error) {
|
|
115
|
+
return {
|
|
116
|
+
content: [{ type: 'text', text: JSON.stringify({ error: error.message }) }],
|
|
117
|
+
isError: true,
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
},
|
|
121
|
+
});
|
|
122
|
+
|
|
123
|
+
// ─── Helper ─────────────────────────────────────────────────────────────────
|
|
124
|
+
|
|
125
|
+
/**
|
|
126
|
+
* Derive the main repo path from a workspace path.
|
|
127
|
+
* Workspaces are typically in .symphony/workspaces/<task-id> relative to repo.
|
|
128
|
+
*/
|
|
129
|
+
function getRepoPath(wsPath) {
|
|
130
|
+
const path = require('path');
|
|
131
|
+
// Walk up from workspace to find .git
|
|
132
|
+
let current = path.dirname(wsPath);
|
|
133
|
+
for (let i = 0; i < 5; i++) {
|
|
134
|
+
const gitDir = path.join(current, '.git');
|
|
135
|
+
const fs = require('fs');
|
|
136
|
+
if (fs.existsSync(gitDir)) return current;
|
|
137
|
+
current = path.dirname(current);
|
|
138
|
+
}
|
|
139
|
+
// Fallback: assume workspace is in .symphony/workspaces/ under repo root
|
|
140
|
+
return path.resolve(wsPath, '..', '..', '..');
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
module.exports = tools;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "awkit-symphony",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Multi-Agent Orchestration for AI Coding Assistants — task management, git isolation, file locking, and real-time dashboard",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"ai",
|
|
7
|
+
"multi-agent",
|
|
8
|
+
"orchestration",
|
|
9
|
+
"mcp",
|
|
10
|
+
"git",
|
|
11
|
+
"worktree",
|
|
12
|
+
"dashboard",
|
|
13
|
+
"coding-assistant"
|
|
14
|
+
],
|
|
15
|
+
"license": "MIT",
|
|
16
|
+
"main": "core/orchestrator.js",
|
|
17
|
+
"bin": {
|
|
18
|
+
"symphony": "./cli/index.js"
|
|
19
|
+
},
|
|
20
|
+
"files": [
|
|
21
|
+
"core/",
|
|
22
|
+
"cli/",
|
|
23
|
+
"mcp/",
|
|
24
|
+
"lib/",
|
|
25
|
+
"app/",
|
|
26
|
+
"scripts/",
|
|
27
|
+
"symphony.config.js",
|
|
28
|
+
"next.config.mjs",
|
|
29
|
+
"jsconfig.json",
|
|
30
|
+
"README.md"
|
|
31
|
+
],
|
|
32
|
+
"engines": {
|
|
33
|
+
"node": ">=20.0.0"
|
|
34
|
+
},
|
|
35
|
+
"scripts": {
|
|
36
|
+
"dev": "next dev -p 3100",
|
|
37
|
+
"build": "next build",
|
|
38
|
+
"start": "next start -p 3100",
|
|
39
|
+
"postinstall": "node scripts/postinstall.js",
|
|
40
|
+
"cli": "node cli/index.js",
|
|
41
|
+
"mcp": "node mcp/server.js"
|
|
42
|
+
},
|
|
43
|
+
"dependencies": {
|
|
44
|
+
"@modelcontextprotocol/sdk": "^1.27.1",
|
|
45
|
+
"better-sqlite3": "^12.6.2",
|
|
46
|
+
"commander": "^14.0.3",
|
|
47
|
+
"nanoid": "^3.3.11",
|
|
48
|
+
"next": "16.1.6",
|
|
49
|
+
"react": "19.2.3",
|
|
50
|
+
"react-dom": "19.2.3",
|
|
51
|
+
"zod": "^4.3.6"
|
|
52
|
+
}
|
|
53
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Symphony Postinstall Script
|
|
5
|
+
* Automatically builds the Next.js dashboard after `npm install`.
|
|
6
|
+
* Skips build during development (when running from source directory).
|
|
7
|
+
*/
|
|
8
|
+
const { execSync } = require('child_process');
|
|
9
|
+
const path = require('path');
|
|
10
|
+
const fs = require('fs');
|
|
11
|
+
|
|
12
|
+
const ROOT = path.join(__dirname, '..');
|
|
13
|
+
|
|
14
|
+
// Skip if .next/ already exists (already built)
|
|
15
|
+
if (fs.existsSync(path.join(ROOT, '.next'))) {
|
|
16
|
+
console.log('✅ Symphony dashboard already built — skipping.');
|
|
17
|
+
process.exit(0);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
// Skip if we're in a CI environment that doesn't need the dashboard
|
|
21
|
+
if (process.env.CI || process.env.SYMPHONY_SKIP_BUILD) {
|
|
22
|
+
console.log('⏭️ Skipping Symphony build (CI or SYMPHONY_SKIP_BUILD set).');
|
|
23
|
+
process.exit(0);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
console.log('');
|
|
27
|
+
console.log('🎼 Symphony — Building dashboard...');
|
|
28
|
+
console.log(' This only happens once after installation.');
|
|
29
|
+
console.log('');
|
|
30
|
+
|
|
31
|
+
try {
|
|
32
|
+
execSync('npx next build', {
|
|
33
|
+
cwd: ROOT,
|
|
34
|
+
stdio: 'inherit',
|
|
35
|
+
env: { ...process.env, NODE_ENV: 'production' },
|
|
36
|
+
});
|
|
37
|
+
console.log('');
|
|
38
|
+
console.log('✅ Symphony dashboard built successfully!');
|
|
39
|
+
console.log(' Run `symphony start` to launch.');
|
|
40
|
+
console.log('');
|
|
41
|
+
} catch (err) {
|
|
42
|
+
console.error('');
|
|
43
|
+
console.error('⚠️ Symphony dashboard build failed.');
|
|
44
|
+
console.error(' You can manually build later with: symphony build');
|
|
45
|
+
console.error(' The CLI commands will still work without the dashboard.');
|
|
46
|
+
console.error('');
|
|
47
|
+
// Don't fail the install — CLI/MCP still work without dashboard
|
|
48
|
+
process.exit(0);
|
|
49
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Symphony Configuration
|
|
3
|
+
* Default settings for the AWKit Symphony orchestration platform.
|
|
4
|
+
*/
|
|
5
|
+
module.exports = {
|
|
6
|
+
// Server
|
|
7
|
+
port: 3100,
|
|
8
|
+
|
|
9
|
+
// Concurrency
|
|
10
|
+
maxAgents: 3,
|
|
11
|
+
|
|
12
|
+
// Workspace
|
|
13
|
+
workspace: {
|
|
14
|
+
root: '.symphony/workspaces',
|
|
15
|
+
type: 'hybrid', // 'worktree' | 'clone' | 'hybrid'
|
|
16
|
+
cloneThreshold: 30, // files > 30 → full clone instead of worktree
|
|
17
|
+
},
|
|
18
|
+
|
|
19
|
+
// Git
|
|
20
|
+
git: {
|
|
21
|
+
autoMerge: true,
|
|
22
|
+
targetBranch: 'main',
|
|
23
|
+
branchPrefix: 'symphony/',
|
|
24
|
+
},
|
|
25
|
+
|
|
26
|
+
// File Locks
|
|
27
|
+
locks: {
|
|
28
|
+
strategy: 'pessimistic',
|
|
29
|
+
autoRelease: 3600, // seconds — auto-release stuck locks
|
|
30
|
+
},
|
|
31
|
+
|
|
32
|
+
// Dashboard
|
|
33
|
+
dashboard: {
|
|
34
|
+
theme: 'dark',
|
|
35
|
+
},
|
|
36
|
+
|
|
37
|
+
// Database
|
|
38
|
+
db: {
|
|
39
|
+
path: null, // null = auto-detect (~/.symphony/symphony.db or .symphony/symphony.db)
|
|
40
|
+
},
|
|
41
|
+
};
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# 🎼 Strategic Tracks — Conductor Roadmap
|
|
2
|
+
|
|
3
|
+
> This file is managed by the Conductor (Gemini CLI).
|
|
4
|
+
> Antigravity IDE reads this for context. CLI writes strategic updates.
|
|
5
|
+
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
## Active Tracks
|
|
9
|
+
|
|
10
|
+
### Track 1: [Track Name]
|
|
11
|
+
- **Goal:** [What we're trying to achieve]
|
|
12
|
+
- **Status:** 🔵 Planning | 🟢 In Progress | ✅ Done
|
|
13
|
+
- **Milestones:**
|
|
14
|
+
- [ ] Milestone 1
|
|
15
|
+
- [ ] Milestone 2
|
|
16
|
+
- [ ] Milestone 3
|
|
17
|
+
- **Key Decisions:**
|
|
18
|
+
- [Decision 1 — rationale]
|
|
19
|
+
- **Notes:**
|
|
20
|
+
- [Any important context]
|
|
21
|
+
|
|
22
|
+
---
|
|
23
|
+
|
|
24
|
+
## Completed Tracks
|
|
25
|
+
|
|
26
|
+
<!-- Move completed tracks here for reference -->
|
|
27
|
+
|
|
28
|
+
---
|
|
29
|
+
|
|
30
|
+
## Decision Log
|
|
31
|
+
|
|
32
|
+
| Date | Decision | Rationale | Track |
|
|
33
|
+
|------|----------|-----------|-------|
|
|
34
|
+
| YYYY-MM-DD | ... | ... | #1 |
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
*Last updated by Conductor: [timestamp]*
|
|
@@ -34,7 +34,7 @@ description: [Short description of the workflow]
|
|
|
34
34
|
### Phase 1: Context & Setup
|
|
35
35
|
1. **Understand Intent:**
|
|
36
36
|
- "Bạn muốn làm gì với [Command]?"
|
|
37
|
-
- (AI analyzes context from `.project-identity` & `.
|
|
37
|
+
- (AI analyzes context from `.project-identity` & `.symphony`)
|
|
38
38
|
|
|
39
39
|
2. **Configuration:**
|
|
40
40
|
- [Question 1]
|
|
@@ -68,7 +68,7 @@ description: [Short description of the workflow]
|
|
|
68
68
|
- Locations of artifacts.
|
|
69
69
|
|
|
70
70
|
2. **Memory Sync:**
|
|
71
|
-
- Auto-sync with
|
|
71
|
+
- Auto-sync with Symphony (Task) & Brain (Knowledge).
|
|
72
72
|
|
|
73
73
|
3. **Next Steps Menu:**
|
|
74
74
|
```markdown
|
|
@@ -79,9 +79,9 @@ description: [Short description of the workflow]
|
|
|
79
79
|
|
|
80
80
|
---
|
|
81
81
|
|
|
82
|
-
## 🧠 Brain &
|
|
82
|
+
## 🧠 Brain & Symphony Integration
|
|
83
83
|
|
|
84
|
-
- **Input:** Check `
|
|
84
|
+
- **Input:** Check `symphony_available_tasks(filter="my")` to resume context.
|
|
85
85
|
- **Output:**
|
|
86
|
-
- Create/Update
|
|
86
|
+
- Create/Update Symphony task.
|
|
87
87
|
- Create Brain memory file if knowledge is valuable.
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# Agent Instructions
|
|
2
|
+
|
|
3
|
+
This project uses **Symphony** for task management and issue tracking.
|
|
4
|
+
|
|
5
|
+
## Quick Reference
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
symphony_available_tasks # Find available work
|
|
9
|
+
symphony_claim_task <id> # Claim a task
|
|
10
|
+
symphony_report_progress <id> # Report progress
|
|
11
|
+
symphony_complete_task <id> # Complete work
|
|
12
|
+
symphony_status # Check system status
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
## Landing the Plane (Session Completion)
|
|
16
|
+
|
|
17
|
+
**When ending a work session**, you MUST complete ALL steps below. Work is NOT complete until `git push` succeeds.
|
|
18
|
+
|
|
19
|
+
**MANDATORY WORKFLOW:**
|
|
20
|
+
|
|
21
|
+
1. **File issues for remaining work** — Create tasks for anything that needs follow-up
|
|
22
|
+
2. **Run quality gates** (if code changed) — Tests, linters, builds
|
|
23
|
+
3. **Update task status** — Complete finished work, update in-progress items
|
|
24
|
+
4. **PUSH TO REMOTE** — This is MANDATORY:
|
|
25
|
+
```bash
|
|
26
|
+
git pull --rebase
|
|
27
|
+
git push
|
|
28
|
+
git status # MUST show "up to date with origin"
|
|
29
|
+
```
|
|
30
|
+
5. **Clean up** — Clear stashes, prune remote branches
|
|
31
|
+
6. **Verify** — All changes committed AND pushed
|
|
32
|
+
7. **Hand off** — Provide context for next session
|
|
33
|
+
|
|
34
|
+
**CRITICAL RULES:**
|
|
35
|
+
- Work is NOT complete until `git push` succeeds
|
|
36
|
+
- NEVER stop before pushing — that leaves work stranded locally
|
|
37
|
+
- NEVER say "ready to push when you are" — YOU must push
|
|
38
|
+
- If push fails, resolve and retry until it succeeds
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: 📦 Decompile APK/XAPK/JAR/AAR Android và phân tích cấu trúc + trích xuất API
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# /decompile — Android Reverse Engineering & API Extraction
|
|
6
|
+
|
|
7
|
+
// turbo-all
|
|
8
|
+
|
|
9
|
+
## Workflow
|
|
10
|
+
|
|
11
|
+
### 1. Xác định file target
|
|
12
|
+
|
|
13
|
+
Nếu user cung cấp đường dẫn file → dùng luôn.
|
|
14
|
+
Nếu không → hỏi user đường dẫn đến file `.apk`, `.xapk`, `.jar`, hoặc `.aar`.
|
|
15
|
+
|
|
16
|
+
### 2. Kiểm tra & cài đặt dependencies
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
bash ~/.gemini/antigravity/skills/android-re-analyzer/scripts/check-deps.sh
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Parse output tìm `INSTALL_REQUIRED:` và `INSTALL_OPTIONAL:`.
|
|
23
|
+
|
|
24
|
+
**Nếu thiếu required deps**, cài từng cái:
|
|
25
|
+
```bash
|
|
26
|
+
bash ~/.gemini/antigravity/skills/android-re-analyzer/scripts/install-dep.sh java
|
|
27
|
+
bash ~/.gemini/antigravity/skills/android-re-analyzer/scripts/install-dep.sh jadx
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
**Nếu thiếu optional deps** (vineflower, dex2jar), hỏi user có muốn cài không. Khuyến nghị cài cả hai.
|
|
31
|
+
|
|
32
|
+
Sau khi cài, chạy lại `check-deps.sh` để verify. KHÔNG tiếp tục nếu required deps chưa OK.
|
|
33
|
+
|
|
34
|
+
### 3. Decompile
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
# APK/XAPK → dùng jadx (xử lý resources tốt)
|
|
38
|
+
bash ~/.gemini/antigravity/skills/android-re-analyzer/scripts/decompile.sh <file>
|
|
39
|
+
|
|
40
|
+
# JAR/AAR + có Fernflower → ưu tiên fernflower
|
|
41
|
+
bash ~/.gemini/antigravity/skills/android-re-analyzer/scripts/decompile.sh --engine fernflower <file>
|
|
42
|
+
|
|
43
|
+
# Nếu jadx có warnings hoặc muốn chất lượng cao nhất → chạy cả hai
|
|
44
|
+
bash ~/.gemini/antigravity/skills/android-re-analyzer/scripts/decompile.sh --engine both <file>
|
|
45
|
+
|
|
46
|
+
# Cho app bị obfuscate → thêm --deobf
|
|
47
|
+
bash ~/.gemini/antigravity/skills/android-re-analyzer/scripts/decompile.sh --deobf <file>
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### 4. Phân tích cấu trúc
|
|
51
|
+
|
|
52
|
+
1. Đọc `AndroidManifest.xml` từ resources directory
|
|
53
|
+
2. Nếu XAPK, review `xapk-manifest.json`
|
|
54
|
+
3. List package structure top-level
|
|
55
|
+
4. Xác định Activity chính, Application class, architecture pattern
|
|
56
|
+
5. Báo cáo summary cho user
|
|
57
|
+
|
|
58
|
+
### 5. Đề xuất bước tiếp theo
|
|
59
|
+
|
|
60
|
+
Hỏi user muốn làm gì tiếp:
|
|
61
|
+
- **Trace call flows**: "Tôi có thể theo luồng thực thi từ Activity đến API calls"
|
|
62
|
+
- **Extract APIs**: "Tôi có thể tìm tất cả HTTP endpoints và tài liệu hóa"
|
|
63
|
+
```bash
|
|
64
|
+
bash ~/.gemini/antigravity/skills/android-re-analyzer/scripts/find-api-calls.sh <output>/sources/
|
|
65
|
+
```
|
|
66
|
+
- **Phân tích class cụ thể**: "Chỉ cho tôi class hoặc feature cần phân tích"
|
|
67
|
+
- **Rebuild app**: "Muốn rebuild thành Kotlin hiện đại? → chuyển sang skill `smali-to-kotlin`"
|
|
@@ -4,9 +4,9 @@ description: 🩺 Kiểm tra tình trạng độ bền và sự ổn định c
|
|
|
4
4
|
|
|
5
5
|
# 🩺 AWK Skill & Workflow Health Check
|
|
6
6
|
|
|
7
|
-
> **Workflow này tính toán độ "Health" (khỏe mạnh) của các agentic workflows dựa trên dữ liệu từ
|
|
7
|
+
> **Workflow này tính toán độ "Health" (khỏe mạnh) của các agentic workflows dựa trên dữ liệu từ Symphony và Linting.**
|
|
8
8
|
> - Phát hiện Token Creep (khi SKILL.md phình to).
|
|
9
|
-
> - Phát hiện High Correction Rate (khi 1
|
|
9
|
+
> - Phát hiện High Correction Rate (khi 1 task in_progress quá lâu hoặc có comment phàn nàn).
|
|
10
10
|
|
|
11
11
|
---
|
|
12
12
|
|
|
@@ -18,12 +18,12 @@ awkit lint || true
|
|
|
18
18
|
```
|
|
19
19
|
Nếu có cảnh báo, khuyên User sử dụng `/refactor` để chẻ nhỏ files nhằm tiết kiệm Context Window.
|
|
20
20
|
|
|
21
|
-
## 2. Kiểm tra hiệu suất chạy (
|
|
22
|
-
Lấy top 5
|
|
21
|
+
## 2. Kiểm tra hiệu suất chạy (Symphony-Driven)
|
|
22
|
+
Lấy top 5 tasks mới nhất ở trạng thái `done` hoặc `in_progress` để đánh giá thời gian chênh lệch:
|
|
23
23
|
|
|
24
|
-
```
|
|
25
|
-
|
|
26
|
-
|
|
24
|
+
```
|
|
25
|
+
symphony_available_tasks(filter="all")
|
|
26
|
+
symphony_status()
|
|
27
27
|
```
|
|
28
28
|
|
|
29
29
|
**Phân tích của hệ thống AI**:
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
description: 📊 Tự động phân tích & báo cáo hiệu suất Google Ads hàng ngày (Dual-Mode v5.0)
|
|
3
3
|
---
|
|
4
4
|
|
|
5
|
-
# WORKFLOW: /ads-audit - The Ads Analyst (Dual-Mode +
|
|
5
|
+
# WORKFLOW: /ads-audit - The Ads Analyst (Dual-Mode + Symphony)
|
|
6
6
|
|
|
7
7
|
> **Mode A (Expert):** `/adsExpert [id]` -> Auto check & create tasks.
|
|
8
8
|
> **Mode B (Guided):** `/ads-audit` -> Chọn Account -> Phân tích -> Hướng dẫn chi tiết.
|
|
@@ -49,16 +49,16 @@ User nhận được tóm tắt và menu chọn hành động:
|
|
|
49
49
|
|
|
50
50
|
➡️ **Chiến lược tiếp theo:**
|
|
51
51
|
1️⃣ 🧹 Dọn dẹp rác ngay (Review & Pause)
|
|
52
|
-
2️⃣
|
|
52
|
+
2️⃣ 🎵 Tạo task Symphony để xử lý sau
|
|
53
53
|
3️⃣ 📝 Xem báo cáo đầy đủ
|
|
54
54
|
4️⃣ 🔍 Phân tích sâu hơn (`/ads-analyst`)
|
|
55
55
|
```
|
|
56
56
|
|
|
57
|
-
### Phase 5:
|
|
57
|
+
### Phase 5: Symphony Integration
|
|
58
58
|
- Nếu chọn **2 (Create Task)**:
|
|
59
59
|
- AI tự động tạo các tasks:
|
|
60
|
-
- `
|
|
61
|
-
- `
|
|
60
|
+
- `symphony_create_task(title="Pause Keyword X (Waste 200k)")`
|
|
61
|
+
- `symphony_create_task(title="Review Campaign Y (CPA too high)")`
|
|
62
62
|
|
|
63
63
|
---
|
|
64
64
|
|
|
@@ -37,21 +37,21 @@ User chọn mục tiêu:
|
|
|
37
37
|
|
|
38
38
|
### Phase 3: Action Execution
|
|
39
39
|
- AI thực hiện thay đổi thông qua MCP (nếu tool hỗ trợ write).
|
|
40
|
-
- Nếu MCP chưa hỗ trợ write (an toàn): -> **Tạo
|
|
40
|
+
- Nếu MCP chưa hỗ trợ write (an toàn): -> **Tạo Symphony Task hướng dẫn chi tiết.**
|
|
41
41
|
|
|
42
|
-
### Phase 4:
|
|
42
|
+
### Phase 4: Symphony Integration (Task Generation)
|
|
43
43
|
|
|
44
|
-
**Tạo Action Plan trong
|
|
44
|
+
**Tạo Action Plan trong Symphony:**
|
|
45
45
|
|
|
46
|
-
```
|
|
46
|
+
```
|
|
47
47
|
# Example: Cut Waste Plan
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
48
|
+
symphony_create_task(title="Ads Optimization: Cut Waste [Date]", priority=1)
|
|
49
|
+
symphony_create_task(title="Add 5 Negative Keywords", description="burn, hack, free,...")
|
|
50
|
+
symphony_create_task(title="Exclude 10 Mobile App Placements")
|
|
51
51
|
|
|
52
52
|
# Example: Scale Plan
|
|
53
|
-
|
|
54
|
-
|
|
53
|
+
symphony_create_task(title="Ads Optimization: Scale Up [Date]", priority=2)
|
|
54
|
+
symphony_create_task(title="Increase Budget: Campaign A (+20%)")
|
|
55
55
|
```
|
|
56
56
|
|
|
57
57
|
---
|
|
@@ -92,6 +92,6 @@ Sau khi hoàn thành workflow, AI **PHẢI** ghi log vào file `brain/ads_histor
|
|
|
92
92
|
|
|
93
93
|
## ⚠️ NEXT STEPS:
|
|
94
94
|
```
|
|
95
|
-
1️⃣ Xác nhận task trong
|
|
95
|
+
1️⃣ Xác nhận task trong Symphony (`/todo`)
|
|
96
96
|
2️⃣ Kiểm tra lại Audit (`/ads-audit`)
|
|
97
97
|
```
|
|
@@ -49,23 +49,23 @@ AI tự động check các rules sau:
|
|
|
49
49
|
|
|
50
50
|
**Without `--auto-fix`:**
|
|
51
51
|
- Tổng hợp lỗi vào Report.
|
|
52
|
-
- Tạo
|
|
52
|
+
- Tạo Symphony Tasks cho các lỗi R1, R2.
|
|
53
53
|
|
|
54
54
|
**With `--auto-fix`:**
|
|
55
55
|
- **R1 (Wasted Spend):** Auto-pause Keyword/Ad Group.
|
|
56
|
-
- **R2, R3, R4:** Tạo
|
|
56
|
+
- **R2, R3, R4:** Tạo Symphony Task.
|
|
57
57
|
|
|
58
|
-
### 4.
|
|
58
|
+
### 4. Symphony Integration
|
|
59
59
|
|
|
60
60
|
```bash
|
|
61
61
|
# R1: Wasted Spend -> Critical Task
|
|
62
|
-
|
|
62
|
+
symphony_create_task(title="Pause Waste: [Keyword] ($$ Spend, 0 Conv)", priority=1)
|
|
63
63
|
|
|
64
64
|
# R2: High CPA -> Investigation Task
|
|
65
|
-
|
|
65
|
+
symphony_create_task(title="Investigate High CPA: [Campaign] (CPA: $$)", priority=1)
|
|
66
66
|
|
|
67
67
|
# R5: Good Mover -> Scale Task
|
|
68
|
-
|
|
68
|
+
symphony_create_task(title="Scale Up: [Campaign] (ROAS: 2.5)", priority=1)
|
|
69
69
|
```
|
|
70
70
|
|
|
71
71
|
### 5. Report Generation
|
|
@@ -83,7 +83,7 @@ Tạo file: `reports/ads/[date]_expert_audit.md`
|
|
|
83
83
|
## 🚨 Actions Taken (Auto-Fix)
|
|
84
84
|
- Paused Keyword: "free download" (Spent 200k, 0 conv)
|
|
85
85
|
|
|
86
|
-
## 📿
|
|
86
|
+
## 📿 Symphony Tasks Created
|
|
87
87
|
1. [P0] Pause Waste: "cheat codes" (Spent 150k, 0 conv) #123
|
|
88
88
|
2. [P1] Investigate High CPA: "Competitor Campaign" #124
|
|
89
89
|
3. [P1] Scale Up: "Brand Campaign" #125
|