@agentuity/cli 0.1.15 → 0.1.16

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 (114) hide show
  1. package/dist/cli.d.ts.map +1 -1
  2. package/dist/cli.js +15 -1
  3. package/dist/cli.js.map +1 -1
  4. package/dist/cmd/ai/opencode/install.js +1 -1
  5. package/dist/cmd/ai/opencode/install.js.map +1 -1
  6. package/dist/cmd/cloud/env/delete.d.ts.map +1 -1
  7. package/dist/cmd/cloud/env/delete.js +87 -34
  8. package/dist/cmd/cloud/env/delete.js.map +1 -1
  9. package/dist/cmd/cloud/env/get.d.ts.map +1 -1
  10. package/dist/cmd/cloud/env/get.js +50 -16
  11. package/dist/cmd/cloud/env/get.js.map +1 -1
  12. package/dist/cmd/cloud/env/import.d.ts.map +1 -1
  13. package/dist/cmd/cloud/env/import.js +76 -32
  14. package/dist/cmd/cloud/env/import.js.map +1 -1
  15. package/dist/cmd/cloud/env/index.d.ts.map +1 -1
  16. package/dist/cmd/cloud/env/index.js +6 -2
  17. package/dist/cmd/cloud/env/index.js.map +1 -1
  18. package/dist/cmd/cloud/env/list.d.ts.map +1 -1
  19. package/dist/cmd/cloud/env/list.js +94 -23
  20. package/dist/cmd/cloud/env/list.js.map +1 -1
  21. package/dist/cmd/cloud/env/org-util.d.ts +16 -0
  22. package/dist/cmd/cloud/env/org-util.d.ts.map +1 -0
  23. package/dist/cmd/cloud/env/org-util.js +28 -0
  24. package/dist/cmd/cloud/env/org-util.js.map +1 -0
  25. package/dist/cmd/cloud/env/pull.d.ts.map +1 -1
  26. package/dist/cmd/cloud/env/pull.js +61 -29
  27. package/dist/cmd/cloud/env/pull.js.map +1 -1
  28. package/dist/cmd/cloud/env/push.d.ts.map +1 -1
  29. package/dist/cmd/cloud/env/push.js +69 -23
  30. package/dist/cmd/cloud/env/push.js.map +1 -1
  31. package/dist/cmd/cloud/env/set.d.ts.map +1 -1
  32. package/dist/cmd/cloud/env/set.js +69 -26
  33. package/dist/cmd/cloud/env/set.js.map +1 -1
  34. package/dist/cmd/cloud/keyvalue/create-namespace.js +1 -1
  35. package/dist/cmd/cloud/keyvalue/create-namespace.js.map +1 -1
  36. package/dist/cmd/cloud/keyvalue/delete-namespace.js +2 -2
  37. package/dist/cmd/cloud/keyvalue/delete-namespace.js.map +1 -1
  38. package/dist/cmd/cloud/keyvalue/delete.js +1 -1
  39. package/dist/cmd/cloud/keyvalue/delete.js.map +1 -1
  40. package/dist/cmd/cloud/keyvalue/get.js +1 -1
  41. package/dist/cmd/cloud/keyvalue/get.js.map +1 -1
  42. package/dist/cmd/cloud/keyvalue/index.js +1 -1
  43. package/dist/cmd/cloud/keyvalue/index.js.map +1 -1
  44. package/dist/cmd/cloud/keyvalue/keys.js +1 -1
  45. package/dist/cmd/cloud/keyvalue/keys.js.map +1 -1
  46. package/dist/cmd/cloud/keyvalue/list-namespaces.js +1 -1
  47. package/dist/cmd/cloud/keyvalue/list-namespaces.js.map +1 -1
  48. package/dist/cmd/cloud/keyvalue/repl.d.ts.map +1 -1
  49. package/dist/cmd/cloud/keyvalue/repl.js +8 -5
  50. package/dist/cmd/cloud/keyvalue/repl.js.map +1 -1
  51. package/dist/cmd/cloud/keyvalue/search.js +1 -1
  52. package/dist/cmd/cloud/keyvalue/search.js.map +1 -1
  53. package/dist/cmd/cloud/keyvalue/set.js +1 -1
  54. package/dist/cmd/cloud/keyvalue/set.js.map +1 -1
  55. package/dist/cmd/cloud/keyvalue/stats.js +1 -1
  56. package/dist/cmd/cloud/keyvalue/stats.js.map +1 -1
  57. package/dist/cmd/cloud/keyvalue/util.d.ts +4 -4
  58. package/dist/cmd/cloud/keyvalue/util.d.ts.map +1 -1
  59. package/dist/cmd/cloud/keyvalue/util.js +4 -9
  60. package/dist/cmd/cloud/keyvalue/util.js.map +1 -1
  61. package/dist/cmd/project/create.d.ts.map +1 -1
  62. package/dist/cmd/project/create.js +12 -0
  63. package/dist/cmd/project/create.js.map +1 -1
  64. package/dist/cmd/project/template-flow.d.ts +3 -0
  65. package/dist/cmd/project/template-flow.d.ts.map +1 -1
  66. package/dist/cmd/project/template-flow.js +157 -68
  67. package/dist/cmd/project/template-flow.js.map +1 -1
  68. package/dist/cmd/setup/index.d.ts.map +1 -1
  69. package/dist/cmd/setup/index.js +2 -1
  70. package/dist/cmd/setup/index.js.map +1 -1
  71. package/dist/onboarding/agentPrompt.d.ts +8 -0
  72. package/dist/onboarding/agentPrompt.d.ts.map +1 -0
  73. package/dist/onboarding/agentPrompt.js +263 -0
  74. package/dist/onboarding/agentPrompt.js.map +1 -0
  75. package/dist/schema-generator.d.ts +1 -1
  76. package/dist/schema-generator.d.ts.map +1 -1
  77. package/dist/schema-parser.d.ts +1 -1
  78. package/dist/schema-parser.d.ts.map +1 -1
  79. package/dist/schema-parser.js +36 -1
  80. package/dist/schema-parser.js.map +1 -1
  81. package/dist/tui.d.ts.map +1 -1
  82. package/dist/tui.js +17 -7
  83. package/dist/tui.js.map +1 -1
  84. package/package.json +6 -6
  85. package/src/cli.ts +14 -1
  86. package/src/cmd/ai/opencode/install.ts +1 -1
  87. package/src/cmd/cloud/env/delete.ts +100 -41
  88. package/src/cmd/cloud/env/get.ts +53 -16
  89. package/src/cmd/cloud/env/import.ts +86 -37
  90. package/src/cmd/cloud/env/index.ts +6 -2
  91. package/src/cmd/cloud/env/list.ts +102 -27
  92. package/src/cmd/cloud/env/org-util.ts +37 -0
  93. package/src/cmd/cloud/env/pull.ts +67 -31
  94. package/src/cmd/cloud/env/push.ts +81 -28
  95. package/src/cmd/cloud/env/set.ts +82 -33
  96. package/src/cmd/cloud/keyvalue/create-namespace.ts +1 -1
  97. package/src/cmd/cloud/keyvalue/delete-namespace.ts +2 -2
  98. package/src/cmd/cloud/keyvalue/delete.ts +1 -1
  99. package/src/cmd/cloud/keyvalue/get.ts +1 -1
  100. package/src/cmd/cloud/keyvalue/index.ts +1 -1
  101. package/src/cmd/cloud/keyvalue/keys.ts +1 -1
  102. package/src/cmd/cloud/keyvalue/list-namespaces.ts +1 -1
  103. package/src/cmd/cloud/keyvalue/repl.ts +8 -5
  104. package/src/cmd/cloud/keyvalue/search.ts +1 -1
  105. package/src/cmd/cloud/keyvalue/set.ts +1 -1
  106. package/src/cmd/cloud/keyvalue/stats.ts +1 -1
  107. package/src/cmd/cloud/keyvalue/util.ts +8 -17
  108. package/src/cmd/project/create.ts +12 -0
  109. package/src/cmd/project/template-flow.ts +183 -69
  110. package/src/cmd/setup/index.ts +2 -1
  111. package/src/onboarding/agentPrompt.ts +263 -0
  112. package/src/schema-generator.ts +1 -1
  113. package/src/schema-parser.ts +42 -3
  114. package/src/tui.ts +19 -9
@@ -13,7 +13,7 @@ export interface ParsedArgs {
13
13
  export interface ParsedOption {
14
14
  name: string;
15
15
  description?: string;
16
- type: 'string' | 'number' | 'boolean' | 'array';
16
+ type: 'string' | 'number' | 'boolean' | 'array' | 'optionalString';
17
17
  hasDefault?: boolean;
18
18
  defaultValue?: unknown;
19
19
  enumValues?: string[];
@@ -57,6 +57,42 @@ function unwrapSchema(schema: unknown): unknown {
57
57
  return current;
58
58
  }
59
59
 
60
+ /**
61
+ * Check if a schema is a union of boolean and string (for optional string flags like --org [value])
62
+ * This pattern is used when a flag can be used as a boolean (--org) or with a value (--org=myOrgId)
63
+ */
64
+ function isBooleanStringUnion(schema: unknown): boolean {
65
+ const unwrapped = unwrapSchema(schema) as ZodTypeInternal;
66
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
67
+ const def = unwrapped?._def as any;
68
+ // Zod 3 uses typeName, Zod 4 uses type
69
+ const typeId = def?.typeName || def?.type;
70
+
71
+ if (typeId !== 'ZodUnion' && typeId !== 'union') {
72
+ return false;
73
+ }
74
+
75
+ // Zod 3 uses _def.options, Zod 4 uses .options directly on the schema or _def.options
76
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
77
+ const options = def?.options || (unwrapped as any)?.options;
78
+ if (!Array.isArray(options) || options.length !== 2) {
79
+ return false;
80
+ }
81
+
82
+ const types = new Set<string>();
83
+ for (const opt of options) {
84
+ // Zod 4: type is directly on the object as .type
85
+ // Zod 3: type is _def.typeName
86
+ const optUnknown = opt as unknown as Record<string, unknown>;
87
+ const optDef = optUnknown?._def as Record<string, unknown> | undefined;
88
+ const optType = (optUnknown?.type as string) || (optDef?.typeName as string) || (optDef?.type as string);
89
+ types.add(optType);
90
+ }
91
+
92
+ return (types.has('boolean') || types.has('ZodBoolean')) &&
93
+ (types.has('string') || types.has('ZodString'));
94
+ }
95
+
60
96
  function getShape(schema: ZodType): Record<string, unknown> {
61
97
  const unwrapped = unwrapSchema(schema) as ZodTypeInternal;
62
98
  const typeId = unwrapped?._def?.typeName || unwrapped?._def?.type;
@@ -182,9 +218,12 @@ export function parseOptionsSchema(schema: ZodType): ParsedOption[] {
182
218
  }
183
219
  }
184
220
 
185
- let type: 'string' | 'number' | 'boolean' | 'array' = 'string';
221
+ let type: 'string' | 'number' | 'boolean' | 'array' | 'optionalString' = 'string';
186
222
  let enumValues: string[] | undefined;
187
- if (typeId === 'ZodNumber' || typeId === 'number') {
223
+ if (isBooleanStringUnion(value)) {
224
+ // z.union([z.boolean(), z.string()]) - flag can be used as --flag or --flag=value
225
+ type = 'optionalString';
226
+ } else if (typeId === 'ZodNumber' || typeId === 'number') {
188
227
  type = 'number';
189
228
  } else if (typeId === 'ZodBoolean' || typeId === 'boolean') {
190
229
  type = 'boolean';
package/src/tui.ts CHANGED
@@ -1759,23 +1759,33 @@ export async function selectOrganization(
1759
1759
  return orgs[0].id;
1760
1760
  }
1761
1761
 
1762
- if (!process.stdin.isTTY) {
1763
- if (initial) {
1764
- return initial;
1762
+ // Use saved preference if available (regardless of TTY mode)
1763
+ // This allows consistent behavior without prompting on every command
1764
+ if (initial) {
1765
+ const initialOrg = orgs.find((o) => o.id === initial);
1766
+ if (initialOrg) {
1767
+ return initialOrg.id;
1765
1768
  }
1766
- fatal(
1767
- 'Organization selection required but cannot prompt in non-interactive environment. Set AGENTUITY_CLOUD_ORG_ID or provide a default organization using --org-id'
1768
- );
1769
1769
  }
1770
1770
 
1771
- // Find the index of the initial org to pre-select it in the list
1772
- const initialIndex = initial ? orgs.findIndex((o) => o.id === initial) : -1;
1771
+ // Check for non-interactive environment (check both stdin and stdout)
1772
+ const isNonInteractive = !process.stdin.isTTY || !process.stdout.isTTY;
1773
+ if (isNonInteractive) {
1774
+ // In non-interactive mode with multiple orgs, auto-select first org
1775
+ // This allows scripts and CI/CD to work without explicit org selection
1776
+ warning(
1777
+ `Multiple organizations found. Auto-selecting first org: ${orgs[0].name}. ` +
1778
+ `Set AGENTUITY_CLOUD_ORG_ID or use --org-id to specify a different org.`
1779
+ );
1780
+ return orgs[0].id;
1781
+ }
1773
1782
 
1783
+ // Interactive mode with no saved preference - prompt user
1774
1784
  const response = await enquirer.prompt<{ action: string }>({
1775
1785
  type: 'select',
1776
1786
  name: 'action',
1777
1787
  message: 'Select an organization',
1778
- initial: initialIndex >= 0 ? initialIndex : 0,
1788
+ initial: 0,
1779
1789
  choices: orgs.map((o) => ({ message: o.name, name: o.id })),
1780
1790
  });
1781
1791