@leejungkiin/awkit 1.1.6 → 1.1.9
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 +51 -1
- package/bin/awk.js +2 -2
- package/core/GEMINI.md +45 -7
- package/package.json +8 -5
- package/skill-packs/neural-memory/skills/nm-memory-sync/SKILL.md +14 -1
- package/skills/ab-test-store-listing/SKILL.md +220 -0
- package/skills/android-aso/SKILL.md +197 -0
- package/skills/app-analytics/SKILL.md +210 -0
- package/skills/app-clips/SKILL.md +163 -0
- package/skills/app-icon-optimization/SKILL.md +170 -0
- package/skills/app-launch/SKILL.md +153 -0
- package/skills/app-marketing-context/SKILL.md +129 -0
- package/skills/app-store-featured/SKILL.md +213 -0
- package/skills/apple-search-ads/SKILL.md +205 -0
- package/skills/asc-metrics/SKILL.md +157 -0
- package/skills/aso-audit/SKILL.md +179 -0
- package/skills/competitor-analysis/SKILL.md +163 -0
- package/skills/competitor-tracking/SKILL.md +185 -0
- package/skills/crash-analytics/SKILL.md +181 -0
- package/skills/gitnexus-intelligence/SKILL.md +224 -0
- package/skills/in-app-events/SKILL.md +176 -0
- package/skills/keyword-research/SKILL.md +141 -0
- package/skills/localization/SKILL.md +165 -0
- package/skills/market-movers/SKILL.md +137 -0
- package/skills/market-pulse/SKILL.md +170 -0
- package/skills/metadata-optimization/SKILL.md +170 -0
- package/skills/monetization-strategy/SKILL.md +175 -0
- package/skills/onboarding-optimization/SKILL.md +194 -0
- package/skills/orchestrator/SKILL.md +306 -25
- package/skills/press-and-pr/SKILL.md +204 -0
- package/skills/rating-prompt-strategy/SKILL.md +184 -0
- package/skills/retention-optimization/SKILL.md +165 -0
- package/skills/review-management/SKILL.md +154 -0
- package/skills/screenshot-optimization/SKILL.md +167 -0
- package/skills/seasonal-aso/SKILL.md +141 -0
- package/skills/spec-gate/SKILL.md +312 -0
- package/skills/subscription-lifecycle/SKILL.md +206 -0
- package/skills/swiftui-pro/references/design.md +44 -0
- package/skills/symphony-enforcer/SKILL.md +92 -11
- package/skills/symphony-orchestrator/SKILL.md +9 -7
- package/skills/systematic-debugging/SKILL.md +32 -7
- package/skills/ua-campaign/SKILL.md +207 -0
- package/skills/verification-gate/SKILL.md +23 -2
- package/workflows/gitnexus.md +123 -0
- package/symphony/LICENSE +0 -21
- package/symphony/README.md +0 -178
- package/symphony/app/api/agents/route.js +0 -152
- package/symphony/app/api/events/route.js +0 -22
- package/symphony/app/api/knowledge/route.js +0 -253
- package/symphony/app/api/locks/route.js +0 -29
- package/symphony/app/api/notes/route.js +0 -125
- package/symphony/app/api/preflight/route.js +0 -23
- package/symphony/app/api/projects/route.js +0 -116
- package/symphony/app/api/roles/route.js +0 -134
- package/symphony/app/api/skills/route.js +0 -82
- package/symphony/app/api/status/route.js +0 -18
- package/symphony/app/api/tasks/route.js +0 -157
- package/symphony/app/api/workflows/route.js +0 -61
- package/symphony/app/api/workspaces/route.js +0 -15
- package/symphony/app/globals.css +0 -2605
- package/symphony/app/layout.js +0 -20
- package/symphony/app/page.js +0 -2122
- package/symphony/cli/index.js +0 -1060
- package/symphony/core/agent-manager.js +0 -357
- package/symphony/core/context-bus.js +0 -100
- package/symphony/core/db.js +0 -223
- package/symphony/core/file-lock-manager.js +0 -154
- package/symphony/core/merge-pipeline.js +0 -234
- package/symphony/core/orchestrator.js +0 -236
- package/symphony/core/task-manager.js +0 -335
- package/symphony/core/workspace-manager.js +0 -168
- package/symphony/jsconfig.json +0 -7
- package/symphony/lib/core.mjs +0 -1034
- package/symphony/mcp/index.js +0 -29
- package/symphony/mcp/server.js +0 -110
- package/symphony/mcp/tools/context.js +0 -80
- package/symphony/mcp/tools/locks.js +0 -99
- package/symphony/mcp/tools/status.js +0 -82
- package/symphony/mcp/tools/tasks.js +0 -216
- package/symphony/mcp/tools/workspace.js +0 -143
- package/symphony/next.config.mjs +0 -7
- package/symphony/package.json +0 -53
- package/symphony/scripts/postinstall.js +0 -49
- package/symphony/symphony.config.js +0 -41
|
@@ -1,143 +0,0 @@
|
|
|
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;
|
package/symphony/next.config.mjs
DELETED
package/symphony/package.json
DELETED
|
@@ -1,53 +0,0 @@
|
|
|
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
|
-
}
|
|
@@ -1,49 +0,0 @@
|
|
|
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
|
-
}
|
|
@@ -1,41 +0,0 @@
|
|
|
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
|
-
};
|