planflow-plugin 0.1.0
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/LICENSE +21 -0
- package/README.md +93 -0
- package/bin/cli.js +169 -0
- package/bin/postinstall.js +87 -0
- package/commands/pfActivity/SKILL.md +725 -0
- package/commands/pfAssign/SKILL.md +623 -0
- package/commands/pfCloudLink/SKILL.md +192 -0
- package/commands/pfCloudList/SKILL.md +222 -0
- package/commands/pfCloudNew/SKILL.md +187 -0
- package/commands/pfCloudUnlink/SKILL.md +152 -0
- package/commands/pfComment/SKILL.md +227 -0
- package/commands/pfComments/SKILL.md +159 -0
- package/commands/pfConnectionStatus/SKILL.md +433 -0
- package/commands/pfDiscord/SKILL.md +740 -0
- package/commands/pfGithubBranch/SKILL.md +672 -0
- package/commands/pfGithubIssue/SKILL.md +963 -0
- package/commands/pfGithubLink/SKILL.md +859 -0
- package/commands/pfGithubPr/SKILL.md +1335 -0
- package/commands/pfGithubUnlink/SKILL.md +401 -0
- package/commands/pfLive/SKILL.md +185 -0
- package/commands/pfLogin/SKILL.md +249 -0
- package/commands/pfLogout/SKILL.md +155 -0
- package/commands/pfMyTasks/SKILL.md +198 -0
- package/commands/pfNotificationSettings/SKILL.md +619 -0
- package/commands/pfNotifications/SKILL.md +420 -0
- package/commands/pfNotificationsClear/SKILL.md +421 -0
- package/commands/pfReact/SKILL.md +232 -0
- package/commands/pfSlack/SKILL.md +659 -0
- package/commands/pfSyncPull/SKILL.md +210 -0
- package/commands/pfSyncPush/SKILL.md +299 -0
- package/commands/pfSyncStatus/SKILL.md +212 -0
- package/commands/pfTeamInvite/SKILL.md +161 -0
- package/commands/pfTeamList/SKILL.md +253 -0
- package/commands/pfTeamRemove/SKILL.md +115 -0
- package/commands/pfTeamRole/SKILL.md +160 -0
- package/commands/pfTestWebhooks/SKILL.md +722 -0
- package/commands/pfUnassign/SKILL.md +134 -0
- package/commands/pfWhoami/SKILL.md +258 -0
- package/commands/pfWorkload/SKILL.md +219 -0
- package/commands/planExportCsv/SKILL.md +106 -0
- package/commands/planExportGithub/SKILL.md +222 -0
- package/commands/planExportJson/SKILL.md +159 -0
- package/commands/planExportSummary/SKILL.md +158 -0
- package/commands/planNew/SKILL.md +641 -0
- package/commands/planNext/SKILL.md +1200 -0
- package/commands/planSettingsAutoSync/SKILL.md +199 -0
- package/commands/planSettingsLanguage/SKILL.md +201 -0
- package/commands/planSettingsReset/SKILL.md +237 -0
- package/commands/planSettingsShow/SKILL.md +482 -0
- package/commands/planSpec/SKILL.md +929 -0
- package/commands/planUpdate/SKILL.md +2518 -0
- package/commands/team/SKILL.md +740 -0
- package/locales/en.json +1499 -0
- package/locales/ka.json +1499 -0
- package/package.json +48 -0
- package/templates/PROJECT_PLAN.template.md +157 -0
- package/templates/backend-api.template.md +562 -0
- package/templates/frontend-spa.template.md +610 -0
- package/templates/fullstack.template.md +397 -0
- package/templates/ka/backend-api.template.md +562 -0
- package/templates/ka/frontend-spa.template.md +610 -0
- package/templates/ka/fullstack.template.md +397 -0
- package/templates/sections/architecture.md +21 -0
- package/templates/sections/overview.md +15 -0
- package/templates/sections/tasks.md +22 -0
- package/templates/sections/tech-stack.md +19 -0
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pfCloudLink
|
|
3
|
+
description: Link local directory to a PlanFlow cloud project
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# PlanFlow Cloud Link
|
|
7
|
+
|
|
8
|
+
Link local directory to a PlanFlow cloud project with selection interface.
|
|
9
|
+
|
|
10
|
+
## Usage
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
/pfCloudLink # Interactive project selection
|
|
14
|
+
/pfCloudLink <project-id> # Link to specific project
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Step 0: Load Configuration
|
|
18
|
+
|
|
19
|
+
```javascript
|
|
20
|
+
function getConfig() {
|
|
21
|
+
const localConfigPath = "./.plan-config.json"
|
|
22
|
+
let localConfig = {}
|
|
23
|
+
if (fileExists(localConfigPath)) {
|
|
24
|
+
try { localConfig = JSON.parse(readFile(localConfigPath)) } catch {}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
const globalConfigPath = expandPath("~/.config/claude/plan-plugin-config.json")
|
|
28
|
+
let globalConfig = {}
|
|
29
|
+
if (fileExists(globalConfigPath)) {
|
|
30
|
+
try { globalConfig = JSON.parse(readFile(globalConfigPath)) } catch {}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
return { ...globalConfig, ...localConfig, _localConfig: localConfig, _globalConfig: globalConfig }
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
const config = getConfig()
|
|
37
|
+
const language = config.language || "en"
|
|
38
|
+
const cloudConfig = config.cloud || {}
|
|
39
|
+
const isAuthenticated = !!cloudConfig.apiToken
|
|
40
|
+
const currentProjectId = cloudConfig.projectId
|
|
41
|
+
const apiUrl = cloudConfig.apiUrl || "https://api.planflow.tools"
|
|
42
|
+
|
|
43
|
+
const t = JSON.parse(readFile(`locales/${language}.json`))
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## Step 1: Parse Arguments
|
|
47
|
+
|
|
48
|
+
```javascript
|
|
49
|
+
const projectIdArg = commandArgs.trim() // project ID if provided
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
## Step 2: Validate Authentication
|
|
53
|
+
|
|
54
|
+
If not authenticated, display error card:
|
|
55
|
+
|
|
56
|
+
```
|
|
57
|
+
╭──────────────────────────────────────────────────────────────────────────────╮
|
|
58
|
+
│ ❌ ERROR │
|
|
59
|
+
├──────────────────────────────────────────────────────────────────────────────┤
|
|
60
|
+
│ │
|
|
61
|
+
│ {t.commands.sync.notAuthenticated} │
|
|
62
|
+
│ │
|
|
63
|
+
│ You must be logged in to link projects. │
|
|
64
|
+
│ │
|
|
65
|
+
│ 💡 {t.ui.labels.nextSteps} │
|
|
66
|
+
│ • /pfLogin Sign in to PlanFlow │
|
|
67
|
+
│ │
|
|
68
|
+
╰──────────────────────────────────────────────────────────────────────────────╯
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## Step 3: Check Current Link
|
|
72
|
+
|
|
73
|
+
**If already linked, display warning card:**
|
|
74
|
+
|
|
75
|
+
```
|
|
76
|
+
╭──────────────────────────────────────────────────────────────────────────────╮
|
|
77
|
+
│ ⚠️ WARNING │
|
|
78
|
+
├──────────────────────────────────────────────────────────────────────────────┤
|
|
79
|
+
│ │
|
|
80
|
+
│ Already linked to: {projectName} │
|
|
81
|
+
│ │
|
|
82
|
+
│ Project ID: {currentProjectId} │
|
|
83
|
+
│ │
|
|
84
|
+
│ To switch projects, unlink first. │
|
|
85
|
+
│ │
|
|
86
|
+
│ 💡 {t.ui.labels.nextSteps} │
|
|
87
|
+
│ • /pfCloudUnlink Unlink current project │
|
|
88
|
+
│ │
|
|
89
|
+
╰──────────────────────────────────────────────────────────────────────────────╯
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
## Step 4: Select Project
|
|
93
|
+
|
|
94
|
+
**If no ID provided, show selection card:**
|
|
95
|
+
|
|
96
|
+
```
|
|
97
|
+
╭──────────────────────────────────────────────────────────────────────────────╮
|
|
98
|
+
│ 🔗 Link to Cloud Project │
|
|
99
|
+
├──────────────────────────────────────────────────────────────────────────────┤
|
|
100
|
+
│ │
|
|
101
|
+
│ ── Available Projects ────────────────────────────────────────────────── │
|
|
102
|
+
│ │
|
|
103
|
+
│ [1] E-commerce App │
|
|
104
|
+
│ ID: abc123 | 24/45 tasks | 53% │
|
|
105
|
+
│ │
|
|
106
|
+
│ [2] Mobile API │
|
|
107
|
+
│ ID: def456 | 12/18 tasks | 67% │
|
|
108
|
+
│ │
|
|
109
|
+
│ [3] Dashboard │
|
|
110
|
+
│ ID: ghi789 | 8/12 tasks | 75% │
|
|
111
|
+
│ │
|
|
112
|
+
╰──────────────────────────────────────────────────────────────────────────────╯
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
Use AskUserQuestion to select:
|
|
116
|
+
```javascript
|
|
117
|
+
AskUserQuestion({
|
|
118
|
+
questions: [{
|
|
119
|
+
question: t.commands.cloud.selectProject,
|
|
120
|
+
header: "Project",
|
|
121
|
+
multiSelect: false,
|
|
122
|
+
options: projects.map(p => ({
|
|
123
|
+
label: p.name,
|
|
124
|
+
description: `ID: ${p.id} | ${p.tasksDone}/${p.tasksTotal} tasks`
|
|
125
|
+
}))
|
|
126
|
+
}]
|
|
127
|
+
})
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
**If ID provided:**
|
|
131
|
+
Verify project exists via API call.
|
|
132
|
+
|
|
133
|
+
## Step 5: Save Link
|
|
134
|
+
|
|
135
|
+
**Save to local config (`.plan-config.json`):**
|
|
136
|
+
```json
|
|
137
|
+
{
|
|
138
|
+
"cloud": {
|
|
139
|
+
"projectId": "selected-uuid"
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
## Step 6: Show Success Card
|
|
145
|
+
|
|
146
|
+
```
|
|
147
|
+
╭──────────────────────────────────────────────────────────────────────────────╮
|
|
148
|
+
│ ✅ SUCCESS │
|
|
149
|
+
├──────────────────────────────────────────────────────────────────────────────┤
|
|
150
|
+
│ │
|
|
151
|
+
│ {t.commands.cloud.linked} │
|
|
152
|
+
│ │
|
|
153
|
+
│ ── Project Details ───────────────────────────────────────────────────── │
|
|
154
|
+
│ │
|
|
155
|
+
│ 📁 Project: E-commerce App │
|
|
156
|
+
│ 🆔 ID: abc123 │
|
|
157
|
+
│ 📊 Tasks: 24/45 (53%) │
|
|
158
|
+
│ │
|
|
159
|
+
│ ╭────────────────╮ │
|
|
160
|
+
│ │ ✓ Linked │ │
|
|
161
|
+
│ ╰────────────────╯ │
|
|
162
|
+
│ │
|
|
163
|
+
├──────────────────────────────────────────────────────────────────────────────┤
|
|
164
|
+
│ │
|
|
165
|
+
│ 💡 {t.ui.labels.nextSteps} │
|
|
166
|
+
│ • /pfSyncPull Download cloud plan to local │
|
|
167
|
+
│ • /pfSyncPush Upload local plan to cloud │
|
|
168
|
+
│ • /pfSyncStatus Check sync status │
|
|
169
|
+
│ │
|
|
170
|
+
╰──────────────────────────────────────────────────────────────────────────────╯
|
|
171
|
+
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
## Error Handling
|
|
175
|
+
|
|
176
|
+
**Project not found card:**
|
|
177
|
+
|
|
178
|
+
```
|
|
179
|
+
╭──────────────────────────────────────────────────────────────────────────────╮
|
|
180
|
+
│ ❌ ERROR │
|
|
181
|
+
├──────────────────────────────────────────────────────────────────────────────┤
|
|
182
|
+
│ │
|
|
183
|
+
│ Project not found: {id} │
|
|
184
|
+
│ │
|
|
185
|
+
│ The project ID doesn't exist or you don't have access. │
|
|
186
|
+
│ │
|
|
187
|
+
│ 💡 {t.ui.labels.nextSteps} │
|
|
188
|
+
│ • /pfCloudList View available projects │
|
|
189
|
+
│ • /pfCloudNew Create a new project │
|
|
190
|
+
│ │
|
|
191
|
+
╰──────────────────────────────────────────────────────────────────────────────╯
|
|
192
|
+
```
|
|
@@ -0,0 +1,222 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pfCloudList
|
|
3
|
+
description: List all cloud projects in your PlanFlow account
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# PlanFlow Cloud List
|
|
7
|
+
|
|
8
|
+
List all cloud projects in your PlanFlow account with project cards grid.
|
|
9
|
+
|
|
10
|
+
## Usage
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
/pfCloudList
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
## Step 0: Load Configuration
|
|
17
|
+
|
|
18
|
+
```javascript
|
|
19
|
+
function getConfig() {
|
|
20
|
+
const localConfigPath = "./.plan-config.json"
|
|
21
|
+
let localConfig = {}
|
|
22
|
+
if (fileExists(localConfigPath)) {
|
|
23
|
+
try { localConfig = JSON.parse(readFile(localConfigPath)) } catch {}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
const globalConfigPath = expandPath("~/.config/claude/plan-plugin-config.json")
|
|
27
|
+
let globalConfig = {}
|
|
28
|
+
if (fileExists(globalConfigPath)) {
|
|
29
|
+
try { globalConfig = JSON.parse(readFile(globalConfigPath)) } catch {}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
return { ...globalConfig, ...localConfig, _localConfig: localConfig, _globalConfig: globalConfig }
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
const config = getConfig()
|
|
36
|
+
const language = config.language || "en"
|
|
37
|
+
const cloudConfig = config.cloud || {}
|
|
38
|
+
const isAuthenticated = !!cloudConfig.apiToken
|
|
39
|
+
const currentProjectId = cloudConfig.projectId
|
|
40
|
+
const apiUrl = cloudConfig.apiUrl || "https://api.planflow.tools"
|
|
41
|
+
|
|
42
|
+
const t = JSON.parse(readFile(`locales/${language}.json`))
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Step 1: Validate Authentication
|
|
46
|
+
|
|
47
|
+
If not authenticated, display error card:
|
|
48
|
+
|
|
49
|
+
```
|
|
50
|
+
╭──────────────────────────────────────────────────────────────────────────────╮
|
|
51
|
+
│ ❌ ERROR │
|
|
52
|
+
├──────────────────────────────────────────────────────────────────────────────┤
|
|
53
|
+
│ │
|
|
54
|
+
│ {t.commands.sync.notAuthenticated} │
|
|
55
|
+
│ │
|
|
56
|
+
│ You must be logged in to view cloud projects. │
|
|
57
|
+
│ │
|
|
58
|
+
│ 💡 {t.ui.labels.nextSteps} │
|
|
59
|
+
│ • /pfLogin Sign in to PlanFlow │
|
|
60
|
+
│ │
|
|
61
|
+
╰──────────────────────────────────────────────────────────────────────────────╯
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## Step 2: Fetch Projects (with Loading)
|
|
65
|
+
|
|
66
|
+
**Loading Card:**
|
|
67
|
+
|
|
68
|
+
```
|
|
69
|
+
╭──────────────────────────────────────────────────────────────────────────────╮
|
|
70
|
+
│ ☁️ Cloud Projects │
|
|
71
|
+
├──────────────────────────────────────────────────────────────────────────────┤
|
|
72
|
+
│ │
|
|
73
|
+
│ ⠹ {t.ui.labels.fetching} │
|
|
74
|
+
│ │
|
|
75
|
+
╰──────────────────────────────────────────────────────────────────────────────╯
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
**API Call:**
|
|
79
|
+
```bash
|
|
80
|
+
curl -s \
|
|
81
|
+
-H "Authorization: Bearer {TOKEN}" \
|
|
82
|
+
"https://api.planflow.tools/projects"
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
## Step 3: Display Projects Card
|
|
86
|
+
|
|
87
|
+
```
|
|
88
|
+
╭──────────────────────────────────────────────────────────────────────────────╮
|
|
89
|
+
│ ☁️ {t.commands.cloud.listProjects} │
|
|
90
|
+
├──────────────────────────────────────────────────────────────────────────────┤
|
|
91
|
+
│ │
|
|
92
|
+
│ ── Your Projects ({count}) ───────────────────────────────────────────── │
|
|
93
|
+
│ │
|
|
94
|
+
│ ┌─────────┬─────────────────────────┬─────────┬─────────────────────────┐ │
|
|
95
|
+
│ │ ID │ Name │ Tasks │ Progress │ │
|
|
96
|
+
│ ├─────────┼─────────────────────────┼─────────┼─────────────────────────┤ │
|
|
97
|
+
│ │ abc123 │ E-commerce App │ 24/45 │ ██████████░░░░░░░░ 53% │ │
|
|
98
|
+
│ │ def456 │ Mobile API │ 12/18 │ █████████████░░░░░ 67% │ │
|
|
99
|
+
│ │ ghi789 │ Dashboard │ 8/12 │ ███████████████░░░ 75% │ │
|
|
100
|
+
│ └─────────┴─────────────────────────┴─────────┴─────────────────────────┘ │
|
|
101
|
+
│ │
|
|
102
|
+
│ ── Current Link ──────────────────────────────────────────────────────── │
|
|
103
|
+
│ │
|
|
104
|
+
│ ╭─────────────────────────────────╮ │
|
|
105
|
+
│ │ ✓ abc123 (E-commerce App) │ │
|
|
106
|
+
│ ╰─────────────────────────────────╯ │
|
|
107
|
+
│ │
|
|
108
|
+
├──────────────────────────────────────────────────────────────────────────────┤
|
|
109
|
+
│ │
|
|
110
|
+
│ 💡 {t.ui.labels.commands} │
|
|
111
|
+
│ • /pfCloudLink <id> Link to a project │
|
|
112
|
+
│ • /pfCloudUnlink Disconnect current │
|
|
113
|
+
│ • /pfCloudNew Create new project │
|
|
114
|
+
│ │
|
|
115
|
+
╰──────────────────────────────────────────────────────────────────────────────╯
|
|
116
|
+
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
**Example Output (English):**
|
|
120
|
+
|
|
121
|
+
```
|
|
122
|
+
╭──────────────────────────────────────────────────────────────────────────────╮
|
|
123
|
+
│ ☁️ Cloud Projects │
|
|
124
|
+
├──────────────────────────────────────────────────────────────────────────────┤
|
|
125
|
+
│ │
|
|
126
|
+
│ ── Your Projects (3) ─────────────────────────────────────────────────── │
|
|
127
|
+
│ │
|
|
128
|
+
│ ┌─────────┬─────────────────────────┬─────────┬─────────────────────────┐ │
|
|
129
|
+
│ │ ID │ Name │ Tasks │ Progress │ │
|
|
130
|
+
│ ├─────────┼─────────────────────────┼─────────┼─────────────────────────┤ │
|
|
131
|
+
│ │ abc123 │ E-commerce App │ 24/45 │ ██████████░░░░░░░░ 53% │ │
|
|
132
|
+
│ │ def456 │ Mobile API │ 12/18 │ █████████████░░░░░ 67% │ │
|
|
133
|
+
│ │ ghi789 │ Dashboard │ 8/12 │ ███████████████░░░ 75% │ │
|
|
134
|
+
│ └─────────┴─────────────────────────┴─────────┴─────────────────────────┘ │
|
|
135
|
+
│ │
|
|
136
|
+
│ ── Current Link ──────────────────────────────────────────────────────── │
|
|
137
|
+
│ │
|
|
138
|
+
│ ╭─────────────────────────────────╮ │
|
|
139
|
+
│ │ ✓ abc123 (E-commerce App) │ │
|
|
140
|
+
│ ╰─────────────────────────────────╯ │
|
|
141
|
+
│ │
|
|
142
|
+
├──────────────────────────────────────────────────────────────────────────────┤
|
|
143
|
+
│ │
|
|
144
|
+
│ 💡 Commands: │
|
|
145
|
+
│ • /pfCloudLink <id> Link to a project │
|
|
146
|
+
│ • /pfCloudUnlink Disconnect current │
|
|
147
|
+
│ • /pfCloudNew Create new project │
|
|
148
|
+
│ │
|
|
149
|
+
╰──────────────────────────────────────────────────────────────────────────────╯
|
|
150
|
+
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
**No Projects Card:**
|
|
154
|
+
|
|
155
|
+
```
|
|
156
|
+
╭──────────────────────────────────────────────────────────────────────────────╮
|
|
157
|
+
│ ☁️ Cloud Projects │
|
|
158
|
+
├──────────────────────────────────────────────────────────────────────────────┤
|
|
159
|
+
│ │
|
|
160
|
+
│ ── Your Projects (0) ─────────────────────────────────────────────────── │
|
|
161
|
+
│ │
|
|
162
|
+
│ No cloud projects yet. │
|
|
163
|
+
│ │
|
|
164
|
+
│ Create your first project to start syncing your plans! │
|
|
165
|
+
│ │
|
|
166
|
+
├──────────────────────────────────────────────────────────────────────────────┤
|
|
167
|
+
│ │
|
|
168
|
+
│ 💡 Next Steps: │
|
|
169
|
+
│ • /pfCloudNew Create a new project │
|
|
170
|
+
│ │
|
|
171
|
+
╰──────────────────────────────────────────────────────────────────────────────╯
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
**Example Output (Georgian):**
|
|
175
|
+
|
|
176
|
+
```
|
|
177
|
+
╭──────────────────────────────────────────────────────────────────────────────╮
|
|
178
|
+
│ ☁️ Cloud პროექტები │
|
|
179
|
+
├──────────────────────────────────────────────────────────────────────────────┤
|
|
180
|
+
│ │
|
|
181
|
+
│ ── თქვენი პროექტები (3) ──────────────────────────────────────────────── │
|
|
182
|
+
│ │
|
|
183
|
+
│ ┌─────────┬─────────────────────────┬─────────┬─────────────────────────┐ │
|
|
184
|
+
│ │ ID │ სახელი │ ამოცანები│ პროგრესი │ │
|
|
185
|
+
│ ├─────────┼─────────────────────────┼─────────┼─────────────────────────┤ │
|
|
186
|
+
│ │ abc123 │ E-commerce App │ 24/45 │ ██████████░░░░░░░░ 53% │ │
|
|
187
|
+
│ │ def456 │ Mobile API │ 12/18 │ █████████████░░░░░ 67% │ │
|
|
188
|
+
│ │ ghi789 │ Dashboard │ 8/12 │ ███████████████░░░ 75% │ │
|
|
189
|
+
│ └─────────┴─────────────────────────┴─────────┴─────────────────────────┘ │
|
|
190
|
+
│ │
|
|
191
|
+
│ ── მიმდინარე კავშირი ─────────────────────────────────────────────────── │
|
|
192
|
+
│ │
|
|
193
|
+
│ ╭─────────────────────────────────╮ │
|
|
194
|
+
│ │ ✓ abc123 (E-commerce App) │ │
|
|
195
|
+
│ ╰─────────────────────────────────╯ │
|
|
196
|
+
│ │
|
|
197
|
+
├──────────────────────────────────────────────────────────────────────────────┤
|
|
198
|
+
│ │
|
|
199
|
+
│ 💡 ბრძანებები: │
|
|
200
|
+
│ • /pfCloudLink <id> პროექტთან დაკავშირება │
|
|
201
|
+
│ • /pfCloudUnlink გათიშვა │
|
|
202
|
+
│ • /pfCloudNew ახალი პროექტის შექმნა │
|
|
203
|
+
│ │
|
|
204
|
+
╰──────────────────────────────────────────────────────────────────────────────╯
|
|
205
|
+
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
## Error Handling
|
|
209
|
+
|
|
210
|
+
**Network Error Card:**
|
|
211
|
+
|
|
212
|
+
```
|
|
213
|
+
╭──────────────────────────────────────────────────────────────────────────────╮
|
|
214
|
+
│ ❌ ERROR │
|
|
215
|
+
├──────────────────────────────────────────────────────────────────────────────┤
|
|
216
|
+
│ │
|
|
217
|
+
│ Network error. Could not connect to PlanFlow API. │
|
|
218
|
+
│ │
|
|
219
|
+
│ Please check your internet connection and try again. │
|
|
220
|
+
│ │
|
|
221
|
+
╰──────────────────────────────────────────────────────────────────────────────╯
|
|
222
|
+
```
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pfCloudNew
|
|
3
|
+
description: Create a new cloud project in PlanFlow
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# PlanFlow Cloud New
|
|
7
|
+
|
|
8
|
+
Create a new cloud project in PlanFlow with creation wizard.
|
|
9
|
+
|
|
10
|
+
## Usage
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
/pfCloudNew # Create from local plan (uses plan name)
|
|
14
|
+
/pfCloudNew "Project Name" # Create with custom name
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Step 0: Load Configuration
|
|
18
|
+
|
|
19
|
+
```javascript
|
|
20
|
+
function getConfig() {
|
|
21
|
+
const localConfigPath = "./.plan-config.json"
|
|
22
|
+
let localConfig = {}
|
|
23
|
+
if (fileExists(localConfigPath)) {
|
|
24
|
+
try { localConfig = JSON.parse(readFile(localConfigPath)) } catch {}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
const globalConfigPath = expandPath("~/.config/claude/plan-plugin-config.json")
|
|
28
|
+
let globalConfig = {}
|
|
29
|
+
if (fileExists(globalConfigPath)) {
|
|
30
|
+
try { globalConfig = JSON.parse(readFile(globalConfigPath)) } catch {}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
return { ...globalConfig, ...localConfig, _localConfig: localConfig, _globalConfig: globalConfig }
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
const config = getConfig()
|
|
37
|
+
const language = config.language || "en"
|
|
38
|
+
const cloudConfig = config.cloud || {}
|
|
39
|
+
const isAuthenticated = !!cloudConfig.apiToken
|
|
40
|
+
const apiUrl = cloudConfig.apiUrl || "https://api.planflow.tools"
|
|
41
|
+
|
|
42
|
+
const t = JSON.parse(readFile(`locales/${language}.json`))
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
## Step 1: Parse Arguments
|
|
46
|
+
|
|
47
|
+
```javascript
|
|
48
|
+
const projectName = commandArgs.trim().replace(/^["']|["']$/g, '') || null
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
## Step 2: Validate Authentication
|
|
52
|
+
|
|
53
|
+
If not authenticated, display error card:
|
|
54
|
+
|
|
55
|
+
```
|
|
56
|
+
╭──────────────────────────────────────────────────────────────────────────────╮
|
|
57
|
+
│ ❌ ERROR │
|
|
58
|
+
├──────────────────────────────────────────────────────────────────────────────┤
|
|
59
|
+
│ │
|
|
60
|
+
│ {t.commands.sync.notAuthenticated} │
|
|
61
|
+
│ │
|
|
62
|
+
│ You must be logged in to create projects. │
|
|
63
|
+
│ │
|
|
64
|
+
│ 💡 {t.ui.labels.nextSteps} │
|
|
65
|
+
│ • /pfLogin Sign in to PlanFlow │
|
|
66
|
+
│ │
|
|
67
|
+
╰──────────────────────────────────────────────────────────────────────────────╯
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## Step 3: Check for PROJECT_PLAN.md
|
|
71
|
+
|
|
72
|
+
**If no PROJECT_PLAN.md:**
|
|
73
|
+
|
|
74
|
+
```
|
|
75
|
+
╭──────────────────────────────────────────────────────────────────────────────╮
|
|
76
|
+
│ ❌ ERROR │
|
|
77
|
+
├──────────────────────────────────────────────────────────────────────────────┤
|
|
78
|
+
│ │
|
|
79
|
+
│ {t.commands.cloud.noPlan} │
|
|
80
|
+
│ │
|
|
81
|
+
│ No PROJECT_PLAN.md found in current directory. │
|
|
82
|
+
│ │
|
|
83
|
+
│ Create a project plan first before syncing to cloud. │
|
|
84
|
+
│ │
|
|
85
|
+
│ 💡 {t.ui.labels.nextSteps} │
|
|
86
|
+
│ • /planNew Create a new project plan │
|
|
87
|
+
│ │
|
|
88
|
+
╰──────────────────────────────────────────────────────────────────────────────╯
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
## Step 4: Show Creation Card
|
|
92
|
+
|
|
93
|
+
```
|
|
94
|
+
╭──────────────────────────────────────────────────────────────────────────────╮
|
|
95
|
+
│ ☁️ Create Cloud Project │
|
|
96
|
+
├──────────────────────────────────────────────────────────────────────────────┤
|
|
97
|
+
│ │
|
|
98
|
+
│ ⠹ Creating project on cloud... │
|
|
99
|
+
│ │
|
|
100
|
+
│ Project name: {projectName} │
|
|
101
|
+
│ │
|
|
102
|
+
╰──────────────────────────────────────────────────────────────────────────────╯
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
**API Call:**
|
|
106
|
+
```bash
|
|
107
|
+
curl -s -X POST \
|
|
108
|
+
-H "Content-Type: application/json" \
|
|
109
|
+
-H "Authorization: Bearer {TOKEN}" \
|
|
110
|
+
-d '{"name": "Project Name"}' \
|
|
111
|
+
"https://api.planflow.tools/projects"
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
## Step 5: Link and Push
|
|
115
|
+
|
|
116
|
+
1. Link to new project (save projectId to config)
|
|
117
|
+
2. Push current plan
|
|
118
|
+
|
|
119
|
+
**Progress Card:**
|
|
120
|
+
|
|
121
|
+
```
|
|
122
|
+
╭──────────────────────────────────────────────────────────────────────────────╮
|
|
123
|
+
│ ☁️ Create Cloud Project │
|
|
124
|
+
├──────────────────────────────────────────────────────────────────────────────┤
|
|
125
|
+
│ │
|
|
126
|
+
│ ✓ Step 1: Project created │
|
|
127
|
+
│ ✓ Step 2: Project linked │
|
|
128
|
+
│ ⠹ Step 3: Uploading plan... │
|
|
129
|
+
│ │
|
|
130
|
+
│ Progress: ██████████████████████░░░░░░░░ 66% │
|
|
131
|
+
│ │
|
|
132
|
+
╰──────────────────────────────────────────────────────────────────────────────╯
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
## Step 6: Show Success Card
|
|
136
|
+
|
|
137
|
+
```
|
|
138
|
+
╭──────────────────────────────────────────────────────────────────────────────╮
|
|
139
|
+
│ ✅ SUCCESS │
|
|
140
|
+
├──────────────────────────────────────────────────────────────────────────────┤
|
|
141
|
+
│ │
|
|
142
|
+
│ {t.commands.cloud.created} │
|
|
143
|
+
│ │
|
|
144
|
+
│ ── Project Details ───────────────────────────────────────────────────── │
|
|
145
|
+
│ │
|
|
146
|
+
│ 📁 Project: My New Project │
|
|
147
|
+
│ 🆔 ID: xyz789 │
|
|
148
|
+
│ 📊 Tasks: 15 │
|
|
149
|
+
│ │
|
|
150
|
+
│ ── Sync Status ───────────────────────────────────────────────────────── │
|
|
151
|
+
│ │
|
|
152
|
+
│ ╭─────────────────╮ │
|
|
153
|
+
│ │ ✓ Synced │ │
|
|
154
|
+
│ ╰─────────────────╯ │
|
|
155
|
+
│ │
|
|
156
|
+
│ 🔗 View at: https://app.planflow.tools/projects/xyz789 │
|
|
157
|
+
│ │
|
|
158
|
+
├──────────────────────────────────────────────────────────────────────────────┤
|
|
159
|
+
│ │
|
|
160
|
+
│ 💡 {t.ui.labels.nextSteps} │
|
|
161
|
+
│ • /pfTeamInvite Invite team members │
|
|
162
|
+
│ • /planNext Get task recommendation │
|
|
163
|
+
│ • /planSettingsAutoSync Enable auto-sync │
|
|
164
|
+
│ │
|
|
165
|
+
╰──────────────────────────────────────────────────────────────────────────────╯
|
|
166
|
+
░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
## Error Handling
|
|
170
|
+
|
|
171
|
+
**API Error Card:**
|
|
172
|
+
|
|
173
|
+
```
|
|
174
|
+
╭──────────────────────────────────────────────────────────────────────────────╮
|
|
175
|
+
│ ❌ ERROR │
|
|
176
|
+
├──────────────────────────────────────────────────────────────────────────────┤
|
|
177
|
+
│ │
|
|
178
|
+
│ Failed to create project. │
|
|
179
|
+
│ │
|
|
180
|
+
│ The server returned an error. Please try again. │
|
|
181
|
+
│ │
|
|
182
|
+
│ 💡 {t.ui.labels.nextSteps} │
|
|
183
|
+
│ • Check your internet connection │
|
|
184
|
+
│ • Try again later │
|
|
185
|
+
│ │
|
|
186
|
+
╰──────────────────────────────────────────────────────────────────────────────╯
|
|
187
|
+
```
|