@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.
Files changed (3) hide show
  1. package/README.md +17 -9
  2. package/dist/forloop +14 -6
  3. 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.1
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
- # Output shows: Basic Task, Basic Note, Schedule Meeting, New Folder
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
- # Output: User: TOSHI WORKSHOP JP, Email: ..., Tier: free
270
+ forloop user profile --output json
265
271
 
266
272
  # Check your quota limits and current usage
267
273
  forloop user quotas
268
- # Output: Stories used: 23/100, Storage used: 17KB/3GB, etc.
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(_config, flags) {
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
- console.log(`Doc folder: #${existing.id} "${existing.title}" (Sprint #${resolution.sprintId})`);
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
- console.log(`Doc folder not found. Run: forloop sync aivy-folder --sprint ${resolution.sprintId}`);
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
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@forloop-cc/forloop-cli",
3
- "version": "0.2.4",
3
+ "version": "0.2.5",
4
4
  "description": "Command-line interface for the ForLoop AI development platform",
5
5
  "type": "module",
6
6
  "license": "MIT",