@forloop-cc/forloop-cli 0.2.4 → 0.2.5
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 +17 -9
- package/dist/forloop +14 -6
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -8,7 +8,6 @@ Command-line interface for the [ForLoop](https://forloop.cc) AI development plat
|
|
|
8
8
|
- [Installation](#installation)
|
|
9
9
|
- [Quick Start](#quick-start)
|
|
10
10
|
- [Authentication](#authentication)
|
|
11
|
-
- [Environments](#environments)
|
|
12
11
|
- [Commands](#commands)
|
|
13
12
|
- [Sprint Operations](#sprint-operations)
|
|
14
13
|
- [Story Operations](#story-operations)
|
|
@@ -63,7 +62,7 @@ npm install -g @forloop-cc/forloop-cli
|
|
|
63
62
|
|
|
64
63
|
```bash
|
|
65
64
|
forloop --version
|
|
66
|
-
# Output: forloop 0.2.
|
|
65
|
+
# Output: forloop 0.2.4
|
|
67
66
|
```
|
|
68
67
|
|
|
69
68
|
---
|
|
@@ -129,10 +128,6 @@ forloop auth logout # Remove saved token
|
|
|
129
128
|
|
|
130
129
|
---
|
|
131
130
|
|
|
132
|
-
---
|
|
133
|
-
|
|
134
|
-
## Commands
|
|
135
|
-
|
|
136
131
|
### Sprint Operations
|
|
137
132
|
|
|
138
133
|
Work with sprints — the containers that hold your stories and track development cycles.
|
|
@@ -141,11 +136,14 @@ Work with sprints — the containers that hold your stories and track developmen
|
|
|
141
136
|
# List all sprints you have access to
|
|
142
137
|
forloop sprint list
|
|
143
138
|
forloop sprint list --org-id 1
|
|
139
|
+
forloop sprint list --include-system-org # Include system organization sprints
|
|
140
|
+
forloop sprint list --output json # Structured JSON output
|
|
144
141
|
|
|
145
142
|
# Get sprint details, including all stories
|
|
146
143
|
forloop sprint get --id 66
|
|
147
144
|
forloop sprint get --id 66 --no-stories # Exclude stories
|
|
148
145
|
forloop sprint get --id 66 --no-files # Exclude files
|
|
146
|
+
forloop sprint get --id 66 --output json # Structured JSON output
|
|
149
147
|
|
|
150
148
|
# Create a new sprint
|
|
151
149
|
forloop sprint create \
|
|
@@ -193,6 +191,7 @@ forloop story create \
|
|
|
193
191
|
# Read story details, including developer comments
|
|
194
192
|
forloop story get --id 229
|
|
195
193
|
forloop story get --id 229 --no-comments
|
|
194
|
+
forloop story get --id 229 --output json # Structured JSON output
|
|
196
195
|
|
|
197
196
|
# Update a story
|
|
198
197
|
forloop story update --id 229 --status in_progress
|
|
@@ -210,7 +209,11 @@ Templates define the structure of your stories. List available templates to see
|
|
|
210
209
|
|
|
211
210
|
```bash
|
|
212
211
|
forloop template list
|
|
213
|
-
#
|
|
212
|
+
# Built-in templates: Basic Task (basic-task), Basic Note (basic-note)
|
|
213
|
+
# Server templates: Schedule Meeting (schedule-meeting), New Folder (doc-folder)
|
|
214
|
+
|
|
215
|
+
# JSON output:
|
|
216
|
+
forloop template list --output json
|
|
214
217
|
```
|
|
215
218
|
|
|
216
219
|
### Agent Operations
|
|
@@ -220,6 +223,7 @@ Interact with ForLoop's AI agents — check their progress, trigger new work, an
|
|
|
220
223
|
```bash
|
|
221
224
|
# See what AI agents have discussed in the past
|
|
222
225
|
forloop agent history --sprint 66 --limit 20
|
|
226
|
+
forloop agent history --sprint 66 --output json
|
|
223
227
|
|
|
224
228
|
# Check if a developer task is running, completed, or failed
|
|
225
229
|
forloop agent developer-status --sprint 66
|
|
@@ -241,9 +245,11 @@ Organizations group sprints and control access for teams.
|
|
|
241
245
|
# List organizations you belong to
|
|
242
246
|
forloop org list
|
|
243
247
|
forloop org list --owned-only # Only orgs you own
|
|
248
|
+
forloop org list --output json # Structured JSON output
|
|
244
249
|
|
|
245
250
|
# View organization details
|
|
246
251
|
forloop org get --id 1
|
|
252
|
+
forloop org get --id 1 --output json
|
|
247
253
|
|
|
248
254
|
# Create an organization (requires Team or Enterprise tier)
|
|
249
255
|
forloop org create \
|
|
@@ -261,14 +267,15 @@ Check your profile, limits, and usage.
|
|
|
261
267
|
```bash
|
|
262
268
|
# View your profile
|
|
263
269
|
forloop user profile
|
|
264
|
-
|
|
270
|
+
forloop user profile --output json
|
|
265
271
|
|
|
266
272
|
# Check your quota limits and current usage
|
|
267
273
|
forloop user quotas
|
|
268
|
-
|
|
274
|
+
forloop user quotas --output json
|
|
269
275
|
|
|
270
276
|
# Check quota usage for a specific organization
|
|
271
277
|
forloop org quotas --org-id 1
|
|
278
|
+
forloop org quotas --org-id 1 --output json
|
|
272
279
|
```
|
|
273
280
|
|
|
274
281
|
### File Operations
|
|
@@ -282,6 +289,7 @@ forloop file upload --path ./mockup.png --sprint 66 --folder designs
|
|
|
282
289
|
|
|
283
290
|
# List all files in a sprint
|
|
284
291
|
forloop file list --sprint 66
|
|
292
|
+
forloop file list --sprint 66 --output json
|
|
285
293
|
|
|
286
294
|
# Generate a download link
|
|
287
295
|
forloop file download --id 84
|
package/dist/forloop
CHANGED
|
@@ -1688,7 +1688,8 @@ function createFileUploadCommand() {
|
|
|
1688
1688
|
{ flag: "--path <path>", description: "Local file path", required: true },
|
|
1689
1689
|
{ flag: "--sprint <id>", description: "Target sprint ID", required: true, type: "number" },
|
|
1690
1690
|
{ flag: "--description <text>", description: "File description" },
|
|
1691
|
-
{ flag: "--folder <text>", description: "S3 folder within sprint" }
|
|
1691
|
+
{ flag: "--folder <text>", description: "S3 folder within sprint" },
|
|
1692
|
+
{ flag: "--story-id <id>", description: "Link file to a story (e.g., doc_folder story)", type: "number" }
|
|
1692
1693
|
],
|
|
1693
1694
|
examples: ["forloop file upload --path ./report.pdf --sprint 1 --folder docs"],
|
|
1694
1695
|
async run(config, flags) {
|
|
@@ -1725,7 +1726,10 @@ function createFileUploadCommand() {
|
|
|
1725
1726
|
originalName: fileName,
|
|
1726
1727
|
fileType: contentType,
|
|
1727
1728
|
size: fileContent.length,
|
|
1728
|
-
folder: flags.folder
|
|
1729
|
+
folder: flags.folder,
|
|
1730
|
+
x: 0,
|
|
1731
|
+
y: 0,
|
|
1732
|
+
storyId: flags.storyId
|
|
1729
1733
|
});
|
|
1730
1734
|
print(config, { fileName, size: fileContent.length, url: complete.url, fileId: complete.id }, `File uploaded: ${fileName} (${formatSize(fileContent.length)})`);
|
|
1731
1735
|
}
|
|
@@ -1898,7 +1902,7 @@ function createAivyDocGetCommand() {
|
|
|
1898
1902
|
{ flag: "--title <text>", description: 'Doc folder title (default: "forloop Aivy doc")' }
|
|
1899
1903
|
],
|
|
1900
1904
|
examples: ["forloop sync aivy-doc-get --sprint 1"],
|
|
1901
|
-
async run(
|
|
1905
|
+
async run(config, flags) {
|
|
1902
1906
|
const resolved = await getClient7();
|
|
1903
1907
|
if (!resolved) return;
|
|
1904
1908
|
const { client } = resolved;
|
|
@@ -1912,9 +1916,9 @@ function createAivyDocGetCommand() {
|
|
|
1912
1916
|
const stories = Array.isArray(sprint?.stories) ? sprint.stories : [];
|
|
1913
1917
|
const existing = stories.find((s) => s.type === "doc_folder" && s.title?.toLowerCase() === title.toLowerCase());
|
|
1914
1918
|
if (existing?.id) {
|
|
1915
|
-
|
|
1919
|
+
print(config, { docFolderId: existing.id, exists: true, title: existing.title, sprintId: resolution.sprintId }, `Doc folder: #${existing.id} "${existing.title}" (Sprint #${resolution.sprintId})`);
|
|
1916
1920
|
} else {
|
|
1917
|
-
|
|
1921
|
+
print(config, { exists: false, sprintId: resolution.sprintId }, `Doc folder not found. Run: forloop sync aivy-folder --sprint ${resolution.sprintId}`);
|
|
1918
1922
|
}
|
|
1919
1923
|
}
|
|
1920
1924
|
});
|
|
@@ -1977,6 +1981,7 @@ function createLocalToS3Command() {
|
|
|
1977
1981
|
{ flag: "--path <path>", description: "Local file path", required: true },
|
|
1978
1982
|
{ flag: "--sprint <id>", description: "Target sprint ID", type: "number" },
|
|
1979
1983
|
{ flag: "--folder <text>", description: "Remote folder (e.g., project/plans)" },
|
|
1984
|
+
{ flag: "--story-id <id>", description: "Link file to a story (e.g., doc_folder story)", type: "number" },
|
|
1980
1985
|
{ flag: "--delete", description: "Delete remote file instead of uploading" }
|
|
1981
1986
|
],
|
|
1982
1987
|
examples: ["forloop sync local-to-s3 --path ~/.forloop/sprint-1/plan/plan.md --sprint 1"],
|
|
@@ -2015,7 +2020,10 @@ function createLocalToS3Command() {
|
|
|
2015
2020
|
originalName: fileName,
|
|
2016
2021
|
fileType: contentType,
|
|
2017
2022
|
size: fileBuf.length,
|
|
2018
|
-
folder
|
|
2023
|
+
folder,
|
|
2024
|
+
x: 0,
|
|
2025
|
+
y: 0,
|
|
2026
|
+
storyId: flags.storyId
|
|
2019
2027
|
});
|
|
2020
2028
|
console.log(`Synced: ${fileName} -> Sprint #${resolution.sprintId}`);
|
|
2021
2029
|
}
|