@sylphx/flow 3.22.0 → 3.24.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/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # @sylphx/flow
2
2
 
3
+ ## 3.24.0 (2026-02-15)
4
+
5
+ ### ✨ Features
6
+
7
+ - **agent:** replace Drizzle migrations with Atlas in builder prompt ([e3b7367](https://github.com/SylphxAI/flow/commit/e3b7367c10860e3f8d8c7bf9ec2d5682a75df73a))
8
+
9
+ ## 3.23.0 (2026-02-14)
10
+
11
+ ### ✨ Features
12
+
13
+ - **flow:** add --resume flag to resume Claude Code sessions ([17e4189](https://github.com/SylphxAI/flow/commit/17e41893275c7fff8f43f63d2353294bfc333c6f))
14
+
3
15
  ## 3.22.0 (2026-02-09)
4
16
 
5
17
  Add fal.ai MCP server for generative AI models (image, video, audio)
@@ -74,7 +74,7 @@ State-of-the-art industrial standard. Every time. Would you stake your reputatio
74
74
 
75
75
  **Tooling:** Biome (lint/format), Bunup (build), Bun test
76
76
 
77
- **CLI:** Vercel CLI, Neon CLI, Modal CLI, GitHub CLI — use directly, install if missing, never ask user to run manually
77
+ **CLI:** Vercel CLI, Neon CLI, Atlas CLI, Modal CLI, GitHub CLI — use directly, install if missing, never ask user to run manually
78
78
 
79
79
  ## Execution
80
80
 
@@ -185,17 +185,30 @@ Errors should be:
185
185
  - E2E tests for critical user flows
186
186
  - Test the behavior, not the implementation
187
187
 
188
- ## Database (Drizzle)
188
+ ## Database (Atlas)
189
189
 
190
- **Source of truth = migration SQL, not schema.**
190
+ **Schema management via Atlas.** Drizzle ORM is for queries only — never use `drizzle-kit` for migrations.
191
191
 
192
- Write migration SQL directly. Update `_journal.json`. Skip `drizzle-kit generate` it's not AI-friendly.
192
+ **Source of truth = `schema.sql`** (or `.hcl`) in the repo. Atlas diffs it against the live database and generates migrations.
193
+
194
+ ```bash
195
+ # Generate migration from schema changes
196
+ atlas migrate diff --env local
197
+
198
+ # Apply pending migrations
199
+ atlas migrate apply --env local
200
+
201
+ # Lint migrations for safety (destructive changes, locks)
202
+ atlas migrate lint --env local --latest 1
203
+ ```
204
+
205
+ **`atlas.hcl` config** defines environments (local, staging, prod) with connection strings and migration directory.
193
206
 
194
207
  **Build-time verification:**
195
208
  ```bash
196
- drizzle-kit migrate && drizzle-kit push --dry-run
209
+ atlas migrate lint --env ci --latest 1
197
210
  ```
198
- If there's any diff, migration is incomplete — fail the build.
211
+ If lint fails (data loss, long locks), block the deploy.
199
212
 
200
213
  ## Hono RPC
201
214
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sylphx/flow",
3
- "version": "3.22.0",
3
+ "version": "3.24.0",
4
4
  "description": "One CLI to rule them all. Unified orchestration layer for AI coding assistants. Auto-detection, auto-installation, auto-upgrade.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -306,6 +306,7 @@ export async function executeFlowV2(
306
306
  prompt,
307
307
  print: options.print,
308
308
  continue: options.continue,
309
+ resume: options.resume,
309
310
  };
310
311
 
311
312
  // Suppress SIGINT in parent — child process handles its own Ctrl+C.
@@ -26,6 +26,7 @@ export interface FlowOptions {
26
26
  // Execution modes
27
27
  print?: boolean;
28
28
  continue?: boolean;
29
+ resume?: string | boolean;
29
30
 
30
31
  // Attach strategy
31
32
  merge?: boolean; // Merge with user settings instead of replacing (default: replace)
@@ -27,6 +27,7 @@ export const flowCommand = new Command('flow')
27
27
  .option('--dry-run', 'Show what would be done without making changes')
28
28
  .option('-p, --print', 'Headless print mode (output only, no interactive)')
29
29
  .option('-c, --continue', 'Continue previous conversation (requires print mode)')
30
+ .option('-r, --resume [session-id]', 'Resume a previous Claude Code session')
30
31
  .option('--merge', 'Merge Flow settings with existing settings (default: replace all)')
31
32
 
32
33
  // Prompt argument
package/src/index.ts CHANGED
@@ -58,6 +58,7 @@ export function createCLI(): Command {
58
58
  .option('--dry-run', 'Show what would be done without making changes')
59
59
  .option('-p, --print', 'Headless print mode (output only, no interactive)')
60
60
  .option('-c, --continue', 'Continue previous conversation (requires print mode)')
61
+ .option('-r, --resume [session-id]', 'Resume a previous Claude Code session')
61
62
  .option('--merge', 'Merge Flow settings with existing settings (default: replace all)')
62
63
 
63
64
  .action(async (prompt, options) => {
@@ -199,7 +199,7 @@ export const claudeCodeTarget: Target = {
199
199
  async executeCommand(
200
200
  systemPrompt: string,
201
201
  userPrompt: string,
202
- options: { verbose?: boolean; dryRun?: boolean; print?: boolean; continue?: boolean } = {}
202
+ options: { verbose?: boolean; dryRun?: boolean; print?: boolean; continue?: boolean; resume?: string | boolean } = {}
203
203
  ): Promise<void> {
204
204
  // Sanitize and validate inputs
205
205
  const sanitizedSystemPrompt = sanitize.yamlContent(systemPrompt);
@@ -220,6 +220,12 @@ Please begin your response with a comprehensive summary of all the instructions
220
220
  if (options.continue) {
221
221
  dryRunArgs.push('-c');
222
222
  }
223
+ if (options.resume) {
224
+ dryRunArgs.push('--resume');
225
+ if (typeof options.resume === 'string') {
226
+ dryRunArgs.push(options.resume);
227
+ }
228
+ }
223
229
  dryRunArgs.push('--system-prompt', '"<agent content>"');
224
230
  if (sanitizedUserPrompt.trim() !== '') {
225
231
  dryRunArgs.push(`"${sanitizedUserPrompt}"`);
@@ -247,6 +253,12 @@ Please begin your response with a comprehensive summary of all the instructions
247
253
  if (options.continue) {
248
254
  args.push('-c');
249
255
  }
256
+ if (options.resume) {
257
+ args.push('--resume');
258
+ if (typeof options.resume === 'string') {
259
+ args.push(options.resume);
260
+ }
261
+ }
250
262
 
251
263
  args.push('--system-prompt', enhancedSystemPrompt);
252
264
  if (options.verbose) {
@@ -84,4 +84,5 @@ export interface RunCommandOptions {
84
84
  prompt?: string;
85
85
  print?: boolean; // Headless print mode
86
86
  continue?: boolean; // Continue previous conversation
87
+ resume?: string | boolean; // Resume a previous session
87
88
  }