@agentuity/migrate 2.0.11 → 3.0.0-alpha.1

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 (52) hide show
  1. package/bin/migrate.ts +93 -10
  2. package/dist/detect-v3.d.ts +92 -0
  3. package/dist/detect-v3.d.ts.map +1 -0
  4. package/dist/detect-v3.js +675 -0
  5. package/dist/detect-v3.js.map +1 -0
  6. package/dist/index.d.ts +2 -0
  7. package/dist/index.d.ts.map +1 -1
  8. package/dist/index.js +4 -0
  9. package/dist/index.js.map +1 -1
  10. package/dist/migrate-v3.d.ts +38 -0
  11. package/dist/migrate-v3.d.ts.map +1 -0
  12. package/dist/migrate-v3.js +448 -0
  13. package/dist/migrate-v3.js.map +1 -0
  14. package/dist/report.d.ts +3 -0
  15. package/dist/report.d.ts.map +1 -1
  16. package/dist/report.js +64 -0
  17. package/dist/report.js.map +1 -1
  18. package/dist/transforms/v3/agents.d.ts +33 -0
  19. package/dist/transforms/v3/agents.d.ts.map +1 -0
  20. package/dist/transforms/v3/agents.js +335 -0
  21. package/dist/transforms/v3/agents.js.map +1 -0
  22. package/dist/transforms/v3/dev-setup.d.ts +27 -0
  23. package/dist/transforms/v3/dev-setup.d.ts.map +1 -0
  24. package/dist/transforms/v3/dev-setup.js +103 -0
  25. package/dist/transforms/v3/dev-setup.js.map +1 -0
  26. package/dist/transforms/v3/entry-point.d.ts +23 -0
  27. package/dist/transforms/v3/entry-point.d.ts.map +1 -0
  28. package/dist/transforms/v3/entry-point.js +67 -0
  29. package/dist/transforms/v3/entry-point.js.map +1 -0
  30. package/dist/transforms/v3/package-json.d.ts +28 -0
  31. package/dist/transforms/v3/package-json.d.ts.map +1 -0
  32. package/dist/transforms/v3/package-json.js +151 -0
  33. package/dist/transforms/v3/package-json.js.map +1 -0
  34. package/dist/transforms/v3/routes.d.ts +37 -0
  35. package/dist/transforms/v3/routes.d.ts.map +1 -0
  36. package/dist/transforms/v3/routes.js +146 -0
  37. package/dist/transforms/v3/routes.js.map +1 -0
  38. package/dist/transforms/v3/services.d.ts +19 -0
  39. package/dist/transforms/v3/services.d.ts.map +1 -0
  40. package/dist/transforms/v3/services.js +61 -0
  41. package/dist/transforms/v3/services.js.map +1 -0
  42. package/package.json +10 -5
  43. package/src/detect-v3.ts +867 -0
  44. package/src/index.ts +13 -0
  45. package/src/migrate-v3.ts +539 -0
  46. package/src/report.ts +86 -0
  47. package/src/transforms/v3/agents.ts +434 -0
  48. package/src/transforms/v3/dev-setup.ts +137 -0
  49. package/src/transforms/v3/entry-point.ts +90 -0
  50. package/src/transforms/v3/package-json.ts +183 -0
  51. package/src/transforms/v3/routes.ts +185 -0
  52. package/src/transforms/v3/services.ts +76 -0
package/bin/migrate.ts CHANGED
@@ -9,14 +9,18 @@
9
9
  * Options:
10
10
  * --yes, -y Skip interactive confirmation prompts
11
11
  * --dry-run Print migration report without modifying any files
12
+ * --v1-to-v2 Force v1 → v2 migration mode
13
+ * --v2-to-v3 Force v2 → v3 migration mode
12
14
  * --help, -h Show this help message
13
15
  */
14
16
 
17
+ export {};
18
+
15
19
  const args = process.argv.slice(2);
16
20
 
17
21
  if (args.includes('--help') || args.includes('-h')) {
18
22
  console.log(`
19
- ${'\x1b[1m'}@agentuity/migrate${'\x1b[0m'} — Migrate an Agentuity SDK v1 project to v2
23
+ ${'\x1b[1m'}@agentuity/migrate${'\x1b[0m'} — Migrate Agentuity SDK projects
20
24
 
21
25
  ${'\x1b[2m'}Usage:${'\x1b[0m'}
22
26
  npx @agentuity/migrate [project-dir] [options]
@@ -27,17 +31,29 @@ if (args.includes('--help') || args.includes('-h')) {
27
31
  ${'\x1b[2m'}Options:${'\x1b[0m'}
28
32
  --yes, -y Skip interactive confirmation prompts
29
33
  --dry-run Print the migration report without modifying any files
34
+ --v1-to-v2 Force v1 → v2 migration mode
35
+ --v2-to-v3 Force v2 → v3 migration mode
30
36
  --help, -h Show this help message
31
37
 
32
- ${'\x1b[2m'}What it does:${'\x1b[0m'}
33
- Detects v1 patterns (generated dir, old createApp config, mutable routes…)
34
- Prints a categorised report: auto-fixable, guided, and manual changes
35
- Asks for confirmation, then applies mechanical codemods
38
+ ${'\x1b[2m'}Auto-detection:${'\x1b[0m'}
39
+ The tool reads package.json and picks the right migration automatically:
40
+ @agentuity/runtime ^1.x runs v1 v2 migration
41
+ @agentuity/runtime ^2.x runs v2 v3 migration
42
+ • Use --v1-to-v2 or --v2-to-v3 to override detection
43
+
44
+ ${'\x1b[2m'}v1 → v2 migration:${'\x1b[0m'}
36
45
  • Rewrites route files to chained new Hono<Env>() style
37
46
  • Generates src/api/index.ts and src/agent/index.ts barrel files
38
47
  • Removes src/generated/ directory
39
- Guides you to delete agentuity.config.ts (config now in createApp/vite.config)
40
- • Runs tsc --noEmit to verify no type errors were introduced
48
+ Updates @agentuity/* packages to ^2.0.0
49
+
50
+ ${'\x1b[2m'}v2 → v3 migration:${'\x1b[0m'}
51
+ • Replaces createApp() with plain Hono app + @agentuity/hono middleware
52
+ • Converts simple agents to plain exported functions
53
+ • Generates src/services.ts with singleton service clients
54
+ • Rewrites c.var.*/ctx.* service access to direct imports
55
+ • Moves entry point from app.ts → src/index.ts
56
+ • Removes @agentuity/runtime, adds hono + service packages
41
57
 
42
58
  ${'\x1b[2m'}Safety:${'\x1b[0m'}
43
59
  The tool checks that your git worktree is clean before making any changes,
@@ -49,12 +65,79 @@ if (args.includes('--help') || args.includes('-h')) {
49
65
  // Parse flags
50
66
  const yes = args.includes('--yes') || args.includes('-y');
51
67
  const dryRun = args.includes('--dry-run');
68
+ const forceV1toV2 = args.includes('--v1-to-v2');
69
+ const forceV2toV3 = args.includes('--v2-to-v3');
52
70
 
53
71
  // First non-flag argument is the project dir
54
72
  const projectDir = args.find((a) => !a.startsWith('-')) ?? process.cwd();
55
73
 
56
- const { migrate } = await import('../src/migrate');
74
+ // ---------------------------------------------------------------------------
75
+ // Auto-detect migration mode from package.json
76
+ // ---------------------------------------------------------------------------
77
+
78
+ async function detectMigrationMode(dir: string): Promise<'v1-to-v2' | 'v2-to-v3' | null> {
79
+ try {
80
+ const pkgPath = `${dir}/package.json`;
81
+ const file = Bun.file(pkgPath);
82
+ if (!(await file.exists())) return null;
83
+
84
+ const pkg = JSON.parse(await file.text());
85
+ const deps = { ...pkg.dependencies, ...pkg.devDependencies };
86
+ const runtimeVersion = deps['@agentuity/runtime'];
87
+
88
+ if (!runtimeVersion) return null;
89
+
90
+ // ^1.x or 1.x → v1 to v2
91
+ if (/^[~^]?1\./.test(runtimeVersion) || runtimeVersion === '1') {
92
+ return 'v1-to-v2';
93
+ }
57
94
 
58
- const result = await migrate({ projectDir, yes, dryRun });
95
+ // ^2.x or 2.x or latest or * or workspace:* → v2 to v3
96
+ if (
97
+ /^[~^]?2\./.test(runtimeVersion) ||
98
+ runtimeVersion === 'latest' ||
99
+ runtimeVersion === '*' ||
100
+ runtimeVersion.startsWith('workspace:')
101
+ ) {
102
+ return 'v2-to-v3';
103
+ }
59
104
 
60
- process.exit(result.ok ? 0 : 1);
105
+ return null;
106
+ } catch {
107
+ return null;
108
+ }
109
+ }
110
+
111
+ // Determine which migration to run
112
+ let mode: 'v1-to-v2' | 'v2-to-v3';
113
+
114
+ if (forceV1toV2) {
115
+ mode = 'v1-to-v2';
116
+ } else if (forceV2toV3) {
117
+ mode = 'v2-to-v3';
118
+ } else {
119
+ const detected = await detectMigrationMode(projectDir);
120
+ if (!detected) {
121
+ console.error(
122
+ '\n \x1b[31m✗\x1b[0m Could not detect migration mode.\n\n' +
123
+ ' No @agentuity/runtime found in package.json, or version is not\n' +
124
+ ' recognized as v1.x or v2.x.\n\n' +
125
+ ' Use --v1-to-v2 or --v2-to-v3 to specify the migration explicitly.\n'
126
+ );
127
+ process.exit(1);
128
+ }
129
+ mode = detected;
130
+ }
131
+
132
+ // Run the appropriate migration
133
+ if (mode === 'v1-to-v2') {
134
+ console.log('\n \x1b[36mℹ\x1b[0m Detected v1 project — running v1 → v2 migration\n');
135
+ const { migrate } = await import('../src/migrate');
136
+ const result = await migrate({ projectDir, yes, dryRun });
137
+ process.exit(result.ok ? 0 : 1);
138
+ } else {
139
+ console.log('\n \x1b[36mℹ\x1b[0m Detected v2 project — running v2 → v3 migration\n');
140
+ const { migrateV3 } = await import('../src/migrate-v3');
141
+ const result = await migrateV3({ projectDir, yes, dryRun });
142
+ process.exit(result.ok ? 0 : 1);
143
+ }
@@ -0,0 +1,92 @@
1
+ /**
2
+ * V2 → V3 pattern detection.
3
+ *
4
+ * Analyses a project directory and returns a structured report of every v2
5
+ * artefact that needs to be migrated to v3 (framework-agnostic Hono).
6
+ * No files are modified here.
7
+ */
8
+ export type Severity = 'auto' | 'guided' | 'manual';
9
+ export interface V3Finding {
10
+ id: string;
11
+ severity: Severity;
12
+ message: string;
13
+ file?: string;
14
+ hint?: string;
15
+ }
16
+ /** Classification of agent complexity */
17
+ export type AgentComplexity = 'simple' | 'complex';
18
+ /** Detected agent file */
19
+ export interface AgentFile {
20
+ /** Absolute path */
21
+ path: string;
22
+ /** Relative path from project root */
23
+ relativePath: string;
24
+ /** Agent name passed to createAgent() */
25
+ name: string;
26
+ /** Whether the agent is simple (handler+schema only) or complex */
27
+ complexity: AgentComplexity;
28
+ /** Reason for complexity classification (if complex) */
29
+ complexityReason?: string;
30
+ /** Whether the agent uses schema validation */
31
+ hasSchema: boolean;
32
+ /** Services accessed via ctx.* */
33
+ ctxServices: string[];
34
+ }
35
+ /** Detected service usage in a file */
36
+ export interface ServiceUsage {
37
+ /** Absolute path */
38
+ path: string;
39
+ /** Relative path from project root */
40
+ relativePath: string;
41
+ /** Services used: 'kv' | 'vector' | 'stream' | 'queue' | 'email' | 'task' | 'schedule' | 'sandbox' | 'logger' */
42
+ services: string[];
43
+ /** Access pattern: 'ctx' (agent context) | 'c.var' (Hono context) */
44
+ accessPattern: 'ctx' | 'c.var';
45
+ }
46
+ /** Outdated package that needs version update */
47
+ export interface V3OutdatedPackage {
48
+ name: string;
49
+ currentVersion: string;
50
+ section: 'dependencies' | 'devDependencies';
51
+ }
52
+ export interface V3DetectionResult {
53
+ projectDir: string;
54
+ findings: V3Finding[];
55
+ /** Whether the project has @agentuity/runtime in package.json */
56
+ hasRuntimeDep: boolean;
57
+ /** Version of @agentuity/runtime if found */
58
+ runtimeVersion?: string;
59
+ /** Absolute path to app.ts, if found */
60
+ appTsPath?: string;
61
+ /** Whether app.ts uses createApp from @agentuity/runtime */
62
+ hasCreateApp: boolean;
63
+ /** Properties passed to createApp() */
64
+ createAppProps: string[];
65
+ /** Detected agent files */
66
+ agentFiles: AgentFile[];
67
+ /** Whether src/agent/index.ts barrel exists */
68
+ hasAgentBarrel: boolean;
69
+ /** Service usage across all scanned files */
70
+ serviceUsages: ServiceUsage[];
71
+ /** Deduplicated set of all services used anywhere */
72
+ allServicesUsed: string[];
73
+ /** Whether src/web/ exists (SPA) */
74
+ hasFrontend: boolean;
75
+ /** Whether agentuity.config.ts exists */
76
+ hasAgentuityConfig: boolean;
77
+ /** Whether vite.config.ts exists */
78
+ hasViteConfig: boolean;
79
+ /** @agentuity/* packages that need version upgrade */
80
+ outdatedPackages: V3OutdatedPackage[];
81
+ /** Whether @agentuity/react is used */
82
+ hasReactPackage: boolean;
83
+ /** Whether @agentuity/frontend is used */
84
+ hasFrontendPackage: boolean;
85
+ }
86
+ /** Map from service name to package */
87
+ export declare const SERVICE_PACKAGE_MAP: Record<string, {
88
+ pkg: string;
89
+ client: string;
90
+ }>;
91
+ export declare function detectV3(projectDir: string): Promise<V3DetectionResult>;
92
+ //# sourceMappingURL=detect-v3.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"detect-v3.d.ts","sourceRoot":"","sources":["../src/detect-v3.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAUH,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEpD,MAAM,WAAW,SAAS;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACd;AAED,yCAAyC;AACzC,MAAM,MAAM,eAAe,GAAG,QAAQ,GAAG,SAAS,CAAC;AAEnD,0BAA0B;AAC1B,MAAM,WAAW,SAAS;IACzB,oBAAoB;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,sCAAsC;IACtC,YAAY,EAAE,MAAM,CAAC;IACrB,yCAAyC;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,mEAAmE;IACnE,UAAU,EAAE,eAAe,CAAC;IAC5B,wDAAwD;IACxD,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,+CAA+C;IAC/C,SAAS,EAAE,OAAO,CAAC;IACnB,kCAAkC;IAClC,WAAW,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,uCAAuC;AACvC,MAAM,WAAW,YAAY;IAC5B,oBAAoB;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,sCAAsC;IACtC,YAAY,EAAE,MAAM,CAAC;IACrB,iHAAiH;IACjH,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,qEAAqE;IACrE,aAAa,EAAE,KAAK,GAAG,OAAO,CAAC;CAC/B;AAED,iDAAiD;AACjD,MAAM,WAAW,iBAAiB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,CAAC;IACvB,OAAO,EAAE,cAAc,GAAG,iBAAiB,CAAC;CAC5C;AAED,MAAM,WAAW,iBAAiB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,SAAS,EAAE,CAAC;IAEtB,iEAAiE;IACjE,aAAa,EAAE,OAAO,CAAC;IACvB,6CAA6C;IAC7C,cAAc,CAAC,EAAE,MAAM,CAAC;IAExB,wCAAwC;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4DAA4D;IAC5D,YAAY,EAAE,OAAO,CAAC;IACtB,uCAAuC;IACvC,cAAc,EAAE,MAAM,EAAE,CAAC;IAEzB,2BAA2B;IAC3B,UAAU,EAAE,SAAS,EAAE,CAAC;IACxB,+CAA+C;IAC/C,cAAc,EAAE,OAAO,CAAC;IAExB,6CAA6C;IAC7C,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,qDAAqD;IACrD,eAAe,EAAE,MAAM,EAAE,CAAC;IAE1B,oCAAoC;IACpC,WAAW,EAAE,OAAO,CAAC;IACrB,yCAAyC;IACzC,kBAAkB,EAAE,OAAO,CAAC;IAC5B,oCAAoC;IACpC,aAAa,EAAE,OAAO,CAAC;IAEvB,sDAAsD;IACtD,gBAAgB,EAAE,iBAAiB,EAAE,CAAC;IAEtC,uCAAuC;IACvC,eAAe,EAAE,OAAO,CAAC;IACzB,0CAA0C;IAC1C,kBAAkB,EAAE,OAAO,CAAC;CAC5B;AAoBD,uCAAuC;AACvC,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAS/E,CAAC;AA0UF,wBAAsB,QAAQ,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAgZ7E"}