@leejungkiin/awkit 1.1.0 → 1.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (119) hide show
  1. package/README.md +3 -3
  2. package/VERSION +1 -1
  3. package/bin/awf.js +1 -1
  4. package/bin/awk.js +237 -26
  5. package/core/AGENTS.md +8 -9
  6. package/core/GEMINI.md +74 -199
  7. package/package.json +3 -2
  8. package/skill-packs/neural-memory/skills/nm-memory-sync/SKILL.md +2 -2
  9. package/skills/CATALOG.md +3 -2
  10. package/skills/README.md +109 -0
  11. package/skills/android-re-analyzer/SKILL.md +238 -0
  12. package/skills/android-re-analyzer/references/api-extraction-patterns.md +119 -0
  13. package/skills/android-re-analyzer/references/call-flow-analysis.md +176 -0
  14. package/skills/android-re-analyzer/references/fernflower-usage.md +115 -0
  15. package/skills/android-re-analyzer/references/jadx-usage.md +116 -0
  16. package/skills/android-re-analyzer/references/setup-guide.md +221 -0
  17. package/skills/android-re-analyzer/scripts/check-deps.sh +129 -0
  18. package/skills/android-re-analyzer/scripts/decompile.sh +375 -0
  19. package/skills/android-re-analyzer/scripts/find-api-calls.sh +118 -0
  20. package/skills/android-re-analyzer/scripts/install-dep.sh +448 -0
  21. package/skills/awf-session-restore/SKILL.md +108 -184
  22. package/skills/beads-manager/SKILL.md +2 -2
  23. package/skills/brainstorm-agent/SKILL.md +47 -2
  24. package/skills/gemini-conductor/SKILL.md +234 -0
  25. package/skills/memory-sync/SKILL.md +29 -1
  26. package/skills/nm-memory-sync/SKILL.md +2 -2
  27. package/skills/orchestrator/SKILL.md +29 -155
  28. package/skills/skills/nm-memory-sync/SKILL.md +2 -2
  29. package/skills/smali-to-kotlin/SKILL.md +1 -1
  30. package/skills/smali-to-swift/SKILL.md +1 -1
  31. package/skills/swiftui-pro/SKILL.md +108 -0
  32. package/skills/swiftui-pro/agents/openai.yaml +10 -0
  33. package/skills/swiftui-pro/assets/swiftui-pro-icon.png +0 -0
  34. package/skills/swiftui-pro/assets/swiftui-pro-icon.svg +29 -0
  35. package/skills/swiftui-pro/references/accessibility.md +13 -0
  36. package/skills/swiftui-pro/references/api.md +39 -0
  37. package/skills/swiftui-pro/references/data.md +43 -0
  38. package/skills/swiftui-pro/references/design.md +31 -0
  39. package/skills/swiftui-pro/references/hygiene.md +9 -0
  40. package/skills/swiftui-pro/references/navigation.md +14 -0
  41. package/skills/swiftui-pro/references/performance.md +46 -0
  42. package/skills/swiftui-pro/references/swift.md +56 -0
  43. package/skills/swiftui-pro/references/views.md +35 -0
  44. package/skills/symphony-enforcer/SKILL.md +362 -0
  45. package/skills/symphony-orchestrator/SKILL.md +301 -0
  46. package/skills/telegram-notify/SKILL.md +57 -0
  47. package/symphony/LICENSE +21 -0
  48. package/symphony/README.md +178 -0
  49. package/symphony/app/api/agents/route.js +152 -0
  50. package/symphony/app/api/events/route.js +22 -0
  51. package/symphony/app/api/knowledge/route.js +253 -0
  52. package/symphony/app/api/locks/route.js +29 -0
  53. package/symphony/app/api/notes/route.js +125 -0
  54. package/symphony/app/api/preflight/route.js +23 -0
  55. package/symphony/app/api/projects/route.js +116 -0
  56. package/symphony/app/api/roles/route.js +134 -0
  57. package/symphony/app/api/skills/route.js +82 -0
  58. package/symphony/app/api/status/route.js +18 -0
  59. package/symphony/app/api/tasks/route.js +157 -0
  60. package/symphony/app/api/workflows/route.js +61 -0
  61. package/symphony/app/api/workspaces/route.js +15 -0
  62. package/symphony/app/globals.css +2605 -0
  63. package/symphony/app/layout.js +20 -0
  64. package/symphony/app/page.js +2122 -0
  65. package/symphony/cli/index.js +1060 -0
  66. package/symphony/core/agent-manager.js +357 -0
  67. package/symphony/core/context-bus.js +100 -0
  68. package/symphony/core/db.js +223 -0
  69. package/symphony/core/file-lock-manager.js +154 -0
  70. package/symphony/core/merge-pipeline.js +234 -0
  71. package/symphony/core/orchestrator.js +236 -0
  72. package/symphony/core/task-manager.js +335 -0
  73. package/symphony/core/workspace-manager.js +168 -0
  74. package/symphony/jsconfig.json +7 -0
  75. package/symphony/lib/core.mjs +1034 -0
  76. package/symphony/mcp/index.js +29 -0
  77. package/symphony/mcp/server.js +110 -0
  78. package/symphony/mcp/tools/context.js +80 -0
  79. package/symphony/mcp/tools/locks.js +99 -0
  80. package/symphony/mcp/tools/status.js +82 -0
  81. package/symphony/mcp/tools/tasks.js +216 -0
  82. package/symphony/mcp/tools/workspace.js +143 -0
  83. package/symphony/next.config.mjs +7 -0
  84. package/symphony/package.json +53 -0
  85. package/symphony/scripts/postinstall.js +49 -0
  86. package/symphony/symphony.config.js +41 -0
  87. package/templates/conductor-tracks.md +38 -0
  88. package/templates/specs/PROJECT.md +50 -0
  89. package/templates/specs/ROADMAP.md +79 -0
  90. package/templates/specs/TECH-SPEC.md +81 -0
  91. package/templates/specs/task-spec-template.xml +65 -0
  92. package/templates/workflow_dual_mode_template.md +5 -5
  93. package/workflows/_uncategorized/AGENTS.md +38 -0
  94. package/workflows/_uncategorized/decompile.md +67 -0
  95. package/workflows/_uncategorized/skill-health.md +7 -7
  96. package/workflows/ads/ads-audit.md +5 -5
  97. package/workflows/ads/ads-optimize.md +10 -10
  98. package/workflows/ads/adsExpert.md +7 -7
  99. package/workflows/conductor.md +97 -0
  100. package/workflows/context/auto-implement.md +4 -4
  101. package/workflows/context/codebase-sync.md +19 -8
  102. package/workflows/context/next.md +27 -27
  103. package/workflows/context/user-intent-analysis-workflow.md +4 -4
  104. package/workflows/expert/codeExpert.md +28 -31
  105. package/workflows/expert/debugExpert.md +11 -11
  106. package/workflows/expert/planExpert.md +21 -36
  107. package/workflows/git/smart-git-ops.md +49 -6
  108. package/workflows/lifecycle/debug.md +7 -7
  109. package/workflows/lifecycle/deploy.md +10 -10
  110. package/workflows/lifecycle/init.md +103 -91
  111. package/workflows/lifecycle/master-code-workflow.md +3 -3
  112. package/workflows/lifecycle/plan.md +19 -21
  113. package/workflows/quality/audit.md +1 -1
  114. package/workflows/quality/project-audit.md +1 -1
  115. package/workflows/roles/vibe-coding-master-workflow.md +2 -2
  116. package/workflows/smart-git-ops.md +146 -0
  117. package/workflows/ui/app-screen-analyzer.md +4 -4
  118. package/workflows/ui/create-feature.md +8 -8
  119. 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,7 @@
1
+ /** @type {import('next').NextConfig} */
2
+ const nextConfig = {
3
+ // Allow requiring CommonJS core modules from API routes
4
+ serverExternalPackages: ['better-sqlite3'],
5
+ };
6
+
7
+ export default nextConfig;
@@ -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]*
@@ -0,0 +1,50 @@
1
+ # {{PROJECT_NAME}} — Project Spec
2
+
3
+ > Created: {{DATE}} | Last Updated: {{DATE}}
4
+
5
+ ## Vision
6
+
7
+ [1-2 sentences describing the core purpose and value proposition of this project.]
8
+
9
+ ## Goals
10
+
11
+ 1. **Primary Goal:** [What is the #1 thing this project must achieve?]
12
+ 2. **Secondary Goal:** [What else matters?]
13
+ 3. **Stretch Goal:** [Nice-to-have if time permits]
14
+
15
+ ## Target Audience
16
+
17
+ | Segment | Description | Pain Point |
18
+ |---------|-------------|------------|
19
+ | Primary | [Who is the main user?] | [What problem do they face?] |
20
+ | Secondary | [Other user group] | [Their specific need] |
21
+
22
+ ## Success Metrics
23
+
24
+ - [ ] **Metric 1:** [e.g., 1000 DAU within 3 months]
25
+ - [ ] **Metric 2:** [e.g., 4.5+ App Store rating]
26
+ - [ ] **Metric 3:** [e.g., < 2s cold start time]
27
+
28
+ ## Scope
29
+
30
+ ### In Scope (v1)
31
+ - Feature A
32
+ - Feature B
33
+ - Feature C
34
+
35
+ ### Out of Scope (v1)
36
+ - Feature X (deferred to v2)
37
+ - Feature Y (requires further research)
38
+
39
+ ## Key Decisions
40
+
41
+ | Decision | Choice | Rationale |
42
+ |----------|--------|-----------|
43
+ | [e.g., Backend] | [e.g., Firebase] | [Why this choice] |
44
+ | [e.g., State Mgmt] | [e.g., SwiftUI @Observable] | [Why] |
45
+
46
+ ## References
47
+
48
+ - [Design inspiration link]
49
+ - [Competitor analysis link]
50
+ - [Technical reference]
@@ -0,0 +1,79 @@
1
+ # {{PROJECT_NAME}} — Roadmap
2
+
3
+ > Created: {{DATE}} | Last Updated: {{DATE}}
4
+ > Source of truth: PROJECT.md
5
+
6
+ ## Overview
7
+
8
+ | Phase | Title | Status | Priority |
9
+ |-------|-------|--------|----------|
10
+ | 1 | [Phase title] | 🔲 Not Started | P0 |
11
+ | 2 | [Phase title] | 🔲 Not Started | P1 |
12
+ | 3 | [Phase title] | 🔲 Not Started | P2 |
13
+
14
+ ---
15
+
16
+ ## Phase 1: [Title] — [Target Date]
17
+
18
+ **Goal:** [What this phase delivers in 1 sentence]
19
+
20
+ **Requirements Covered:** REQUIREMENTS.md § R1, R2
21
+
22
+ ### Features
23
+ - [ ] Feature 1.1 — [Short description]
24
+ - [ ] Feature 1.2 — [Short description]
25
+ - [ ] Feature 1.3 — [Short description]
26
+
27
+ ### Dependencies
28
+ - [External service / API / library needed]
29
+
30
+ ### Definition of Done
31
+ - [ ] All features functional
32
+ - [ ] Core tests passing
33
+ - [ ] No P0 bugs
34
+
35
+ ---
36
+
37
+ ## Phase 2: [Title] — [Target Date]
38
+
39
+ **Goal:** [What this phase delivers]
40
+
41
+ **Requirements Covered:** REQUIREMENTS.md § R3, R4
42
+
43
+ ### Features
44
+ - [ ] Feature 2.1
45
+ - [ ] Feature 2.2
46
+
47
+ ### Dependencies
48
+ - Phase 1 complete
49
+
50
+ ### Definition of Done
51
+ - [ ] All features functional
52
+ - [ ] Integration tests passing
53
+
54
+ ---
55
+
56
+ ## Phase 3: [Title] — [Target Date]
57
+
58
+ **Goal:** [What this phase delivers]
59
+
60
+ **Requirements Covered:** REQUIREMENTS.md § R5+
61
+
62
+ ### Features
63
+ - [ ] Feature 3.1
64
+ - [ ] Feature 3.2
65
+
66
+ ### Definition of Done
67
+ - [ ] All features functional
68
+ - [ ] Performance benchmarks met
69
+ - [ ] Ready for production release
70
+
71
+ ---
72
+
73
+ ## Milestone Tracking
74
+
75
+ | Milestone | Target | Actual | Status |
76
+ |-----------|--------|--------|--------|
77
+ | MVP (Phase 1) | [Date] | — | 🔲 |
78
+ | Beta (Phase 2) | [Date] | — | 🔲 |
79
+ | Launch (Phase 3) | [Date] | — | 🔲 |
@@ -0,0 +1,81 @@
1
+ # {{PROJECT_NAME}} — Technical Specification
2
+
3
+ > Created: {{DATE}} | Last Updated: {{DATE}}
4
+ > Companion to: PROJECT.md, REQUIREMENTS.md
5
+
6
+ ## Architecture Overview
7
+
8
+ [1-2 sentences describing the high-level architecture pattern being used.]
9
+
10
+ ```
11
+ [Simple ASCII diagram of the system architecture]
12
+ ```
13
+
14
+ ## Tech Stack
15
+
16
+ | Layer | Technology | Version | Rationale |
17
+ |-------|-----------|---------|-----------|
18
+ | Language | [e.g., Swift] | [e.g., 6.0] | [Why] |
19
+ | Framework | [e.g., SwiftUI] | [e.g., iOS 17+] | [Why] |
20
+ | Backend | [e.g., Firebase] | [e.g., v11] | [Why] |
21
+ | Database | [e.g., GRDB] | [e.g., 7.x] | [Why] |
22
+ | AI/ML | [e.g., Gemini 2.5] | — | [Why] |
23
+ | Analytics | [e.g., Firebase Analytics] | — | [Why] |
24
+
25
+ ## Architecture Decisions
26
+
27
+ ### AD-1: [Decision Title]
28
+
29
+ **Context:** [What problem or question prompted this decision?]
30
+ **Decision:** [What was decided]
31
+ **Consequences:** [What trade-offs or implications does this have?]
32
+ **Alternatives Considered:** [What else was evaluated?]
33
+
34
+ ### AD-2: [Decision Title]
35
+
36
+ **Context:** [...]
37
+ **Decision:** [...]
38
+ **Consequences:** [...]
39
+
40
+ ## Patterns & Conventions
41
+
42
+ ### Code Organization
43
+ ```
44
+ [Folder structure with descriptions]
45
+ ```
46
+
47
+ ### Naming Conventions
48
+ - Files: [e.g., PascalCase for types, camelCase for functions]
49
+ - Modules: [e.g., feature-based grouping]
50
+ - Tests: [e.g., Test suffix, describe/it pattern]
51
+
52
+ ### Error Handling
53
+ [Standard error handling approach for the project]
54
+
55
+ ### State Management
56
+ [How state is managed across the app]
57
+
58
+ ## Constraints & Non-Negotiables
59
+
60
+ > [!CAUTION]
61
+ > These constraints MUST be followed in ALL implementation plans.
62
+
63
+ 1. **[Constraint 1]:** [e.g., All network calls must have offline fallback]
64
+ 2. **[Constraint 2]:** [e.g., No hardcoded strings — use localization]
65
+ 3. **[Constraint 3]:** [e.g., All AI calls must respect quota limits]
66
+ 4. **[Constraint 4]:** [e.g., Minimum iOS 17 / Android 14 support]
67
+
68
+ ## Security Requirements
69
+
70
+ - Authentication: [e.g., Firebase Auth with Apple/Google Sign-In]
71
+ - Data at rest: [e.g., Keychain for sensitive data]
72
+ - API keys: [e.g., Firebase Remote Config, never hardcoded]
73
+
74
+ ## Performance Targets
75
+
76
+ | Metric | Target | How to Measure |
77
+ |--------|--------|----------------|
78
+ | Cold start | < [X]s | Instruments / Profiler |
79
+ | API response | < [X]ms | Network logs |
80
+ | Memory | < [X]MB | Memory profiler |
81
+ | App size | < [X]MB | Archive build |
@@ -0,0 +1,65 @@
1
+ <!--
2
+ AWF Task Spec Template (XML Format)
3
+
4
+ Usage: Copy this structure into implementation_plan.md for each task.
5
+ AI parses these blocks precisely during EXECUTION mode.
6
+
7
+ Attributes:
8
+ type="auto" → AI executes without user interaction
9
+ type="manual" → Requires user action (e.g., config, credentials)
10
+
11
+ Elements:
12
+ <name> → Short task title
13
+ <files> → Comma-separated list of files to create/modify
14
+ <spec_ref> → Reference to REQUIREMENTS.md or TECH-SPEC.md section
15
+ <depends_on> → Task names this depends on (for wave grouping)
16
+ <action> → Specific implementation instructions
17
+ <verify> → Command or check to verify task completion
18
+ <done> → Expected final state description
19
+ -->
20
+
21
+ <!-- Example: Single independent task -->
22
+ <task type="auto">
23
+ <name>Create User model</name>
24
+ <files>Models/User.swift, Models/UserRepository.swift</files>
25
+ <spec_ref>REQUIREMENTS.md § R1, TECH-SPEC.md § AD-1</spec_ref>
26
+ <depends_on>none</depends_on>
27
+ <action>
28
+ Create User struct with Codable conformance.
29
+ Implement UserRepository with GRDB persistence.
30
+ Follow offline-first pattern from TECH-SPEC.md.
31
+ </action>
32
+ <verify>Unit test: UserRepositoryTests — insert, fetch, delete pass</verify>
33
+ <done>User model persists to local DB with full CRUD</done>
34
+ </task>
35
+
36
+ <!-- Example: Dependent task -->
37
+ <task type="auto">
38
+ <name>Create login endpoint</name>
39
+ <files>Services/AuthService.swift, ViewModels/LoginViewModel.swift</files>
40
+ <spec_ref>REQUIREMENTS.md § R2</spec_ref>
41
+ <depends_on>Create User model</depends_on>
42
+ <action>
43
+ Use Firebase Auth for authentication.
44
+ Store session in Keychain per TECH-SPEC.md § Security.
45
+ Handle offline: queue login attempt, retry on connectivity.
46
+ </action>
47
+ <verify>Login with test credentials returns valid session token</verify>
48
+ <done>User can log in; session persists across app restarts</done>
49
+ </task>
50
+
51
+ <!-- Example: Manual task -->
52
+ <task type="manual">
53
+ <name>Configure Firebase project</name>
54
+ <files>GoogleService-Info.plist</files>
55
+ <spec_ref>TECH-SPEC.md § Tech Stack</spec_ref>
56
+ <depends_on>none</depends_on>
57
+ <action>
58
+ User must:
59
+ 1. Create Firebase project at console.firebase.google.com
60
+ 2. Download GoogleService-Info.plist
61
+ 3. Add to Xcode project root
62
+ </action>
63
+ <verify>FirebaseApp.configure() succeeds without crash</verify>
64
+ <done>Firebase SDK initialized on app launch</done>
65
+ </task>
@@ -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` & `.beads`)
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 Beads (Task) & Brain (Knowledge).
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 & Beads Integration
82
+ ## 🧠 Brain & Symphony Integration
83
83
 
84
- - **Input:** Check `bd list --status in_progress` to resume context.
84
+ - **Input:** Check `symphony_available_tasks(filter="my")` to resume context.
85
85
  - **Output:**
86
- - Create/Update Beads task.
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