@agentuity/cli 2.0.14 → 2.0.15

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 (85) hide show
  1. package/dist/agent-detection.d.ts.map +1 -1
  2. package/dist/agent-detection.js +3 -6
  3. package/dist/agent-detection.js.map +1 -1
  4. package/dist/ai-help.js +10 -10
  5. package/dist/ai-help.js.map +1 -1
  6. package/dist/cmd/ai/capabilities/show.d.ts.map +1 -1
  7. package/dist/cmd/ai/capabilities/show.js +6 -0
  8. package/dist/cmd/ai/capabilities/show.js.map +1 -1
  9. package/dist/cmd/ai/intro.d.ts.map +1 -1
  10. package/dist/cmd/ai/intro.js +1 -0
  11. package/dist/cmd/ai/intro.js.map +1 -1
  12. package/dist/cmd/cloud/aigateway/complete.d.ts +7 -0
  13. package/dist/cmd/cloud/aigateway/complete.d.ts.map +1 -0
  14. package/dist/cmd/cloud/aigateway/complete.js +386 -0
  15. package/dist/cmd/cloud/aigateway/complete.js.map +1 -0
  16. package/dist/cmd/cloud/aigateway/index.d.ts +3 -0
  17. package/dist/cmd/cloud/aigateway/index.d.ts.map +1 -0
  18. package/dist/cmd/cloud/aigateway/index.js +20 -0
  19. package/dist/cmd/cloud/aigateway/index.js.map +1 -0
  20. package/dist/cmd/cloud/aigateway/model-cache.d.ts +4 -0
  21. package/dist/cmd/cloud/aigateway/model-cache.d.ts.map +1 -0
  22. package/dist/cmd/cloud/aigateway/model-cache.js +72 -0
  23. package/dist/cmd/cloud/aigateway/model-cache.js.map +1 -0
  24. package/dist/cmd/cloud/aigateway/models.d.ts +2 -0
  25. package/dist/cmd/cloud/aigateway/models.d.ts.map +1 -0
  26. package/dist/cmd/cloud/aigateway/models.js +193 -0
  27. package/dist/cmd/cloud/aigateway/models.js.map +1 -0
  28. package/dist/cmd/cloud/aigateway/util.d.ts +20 -0
  29. package/dist/cmd/cloud/aigateway/util.d.ts.map +1 -0
  30. package/dist/cmd/cloud/aigateway/util.js +58 -0
  31. package/dist/cmd/cloud/aigateway/util.js.map +1 -0
  32. package/dist/cmd/cloud/index.d.ts.map +1 -1
  33. package/dist/cmd/cloud/index.js +2 -0
  34. package/dist/cmd/cloud/index.js.map +1 -1
  35. package/dist/cmd/coder/skill/create.d.ts +2 -0
  36. package/dist/cmd/coder/skill/create.d.ts.map +1 -0
  37. package/dist/cmd/coder/skill/create.js +104 -0
  38. package/dist/cmd/coder/skill/create.js.map +1 -0
  39. package/dist/cmd/coder/skill/index.d.ts.map +1 -1
  40. package/dist/cmd/coder/skill/index.js +12 -1
  41. package/dist/cmd/coder/skill/index.js.map +1 -1
  42. package/dist/cmd/coder/workspace/common.d.ts +22 -2
  43. package/dist/cmd/coder/workspace/common.d.ts.map +1 -1
  44. package/dist/cmd/coder/workspace/common.js +38 -2
  45. package/dist/cmd/coder/workspace/common.js.map +1 -1
  46. package/dist/cmd/coder/workspace/create.d.ts.map +1 -1
  47. package/dist/cmd/coder/workspace/create.js +34 -2
  48. package/dist/cmd/coder/workspace/create.js.map +1 -1
  49. package/dist/cmd/coder/workspace/update.d.ts.map +1 -1
  50. package/dist/cmd/coder/workspace/update.js +33 -1
  51. package/dist/cmd/coder/workspace/update.js.map +1 -1
  52. package/dist/cmd/dev/download.d.ts +8 -0
  53. package/dist/cmd/dev/download.d.ts.map +1 -1
  54. package/dist/cmd/dev/download.js +27 -1
  55. package/dist/cmd/dev/download.js.map +1 -1
  56. package/dist/cmd/dev/index.d.ts.map +1 -1
  57. package/dist/cmd/dev/index.js +18 -7
  58. package/dist/cmd/dev/index.js.map +1 -1
  59. package/dist/config.d.ts.map +1 -1
  60. package/dist/config.js +3 -0
  61. package/dist/config.js.map +1 -1
  62. package/dist/types.d.ts +3 -2
  63. package/dist/types.d.ts.map +1 -1
  64. package/dist/types.js +1 -0
  65. package/dist/types.js.map +1 -1
  66. package/package.json +7 -7
  67. package/src/agent-detection.ts +3 -6
  68. package/src/ai-help.ts +10 -10
  69. package/src/cmd/ai/capabilities/show.ts +6 -0
  70. package/src/cmd/ai/intro.ts +1 -0
  71. package/src/cmd/cloud/aigateway/complete.ts +461 -0
  72. package/src/cmd/cloud/aigateway/index.ts +21 -0
  73. package/src/cmd/cloud/aigateway/model-cache.ts +89 -0
  74. package/src/cmd/cloud/aigateway/models.ts +219 -0
  75. package/src/cmd/cloud/aigateway/util.ts +86 -0
  76. package/src/cmd/cloud/index.ts +2 -0
  77. package/src/cmd/coder/skill/create.ts +122 -0
  78. package/src/cmd/coder/skill/index.ts +14 -1
  79. package/src/cmd/coder/workspace/common.ts +46 -2
  80. package/src/cmd/coder/workspace/create.ts +34 -1
  81. package/src/cmd/coder/workspace/update.ts +33 -0
  82. package/src/cmd/dev/download.ts +32 -1
  83. package/src/cmd/dev/index.ts +24 -8
  84. package/src/config.ts +3 -0
  85. package/src/types.ts +1 -0
@@ -0,0 +1,193 @@
1
+ import { z } from 'zod';
2
+ import { createCommand } from '../../../types';
3
+ import * as tui from '../../../tui';
4
+ import { getCommand } from '../../../command-prefix';
5
+ import { getExecutingAgent } from '../../../agent-detection';
6
+ import { createPublicAIGatewayService, getAIGatewayUrl } from './util';
7
+ import { getCachedAIGatewayModels, setCachedAIGatewayModels } from './model-cache';
8
+ const ModelRowSchema = z.object({
9
+ provider: z.string(),
10
+ id: z.string(),
11
+ name: z.string(),
12
+ api: z.string().optional(),
13
+ reasoning: z.boolean().optional(),
14
+ contextWindow: z.number().optional(),
15
+ maxOutputTokens: z.number().optional(),
16
+ });
17
+ const ModelsResponseSchema = z.object({
18
+ models: z.array(ModelRowSchema),
19
+ count: z.number(),
20
+ model: ModelRowSchema.nullable().optional(),
21
+ });
22
+ const recommendedModels = [
23
+ { use: 'fast', candidates: ['openai/gpt-4o-mini', 'openai/gpt-4.1-mini'] },
24
+ { use: 'reasoning', candidates: ['openai/gpt-5-mini', 'openai/o4-mini'] },
25
+ { use: 'coding', candidates: ['anthropic/claude-opus-4-7', 'openai/gpt-5-codex'] },
26
+ { use: 'cheap', candidates: ['openai/gpt-4.1-nano', 'openai/gpt-5-nano'] },
27
+ ];
28
+ function isAgentOutputMode() {
29
+ return Boolean(getExecutingAgent()) && process.env.AGENTUITY_AIGATEWAY_AGENT_OUTPUT !== 'false';
30
+ }
31
+ function getRecommendations(rows) {
32
+ const byId = new Map(rows.map((row) => [normalizeModelId(row.id), row]));
33
+ return recommendedModels
34
+ .map((rec) => {
35
+ const model = rec.candidates.map((id) => byId.get(normalizeModelId(id))).find(Boolean);
36
+ return model ? { use: rec.use, model: model.id, name: model.name } : undefined;
37
+ })
38
+ .filter((row) => Boolean(row));
39
+ }
40
+ function normalizeModelId(id) {
41
+ const normalized = id.toLowerCase();
42
+ const parts = normalized.split('/');
43
+ return parts.length > 1 ? (parts.at(-1) ?? normalized) : normalized;
44
+ }
45
+ function matchesProviderFilter(provider, modelId, providerFilter) {
46
+ if (!providerFilter) {
47
+ return true;
48
+ }
49
+ return provider === providerFilter || modelId.startsWith(`${providerFilter}/`);
50
+ }
51
+ function matchesModelFilter(provider, modelId, modelFilter) {
52
+ if (!modelFilter) {
53
+ return true;
54
+ }
55
+ return modelId === modelFilter || `${provider}/${modelId}` === modelFilter;
56
+ }
57
+ function matchesNameFilter(modelId, modelName, nameFilter) {
58
+ if (!nameFilter) {
59
+ return true;
60
+ }
61
+ const normalized = nameFilter.toLowerCase();
62
+ return (modelId.toLowerCase() === normalized ||
63
+ modelId.split('/').pop()?.toLowerCase() === normalized ||
64
+ modelName.toLowerCase() === normalized);
65
+ }
66
+ export const modelsSubcommand = createCommand({
67
+ name: 'models',
68
+ aliases: ['list', 'ls'],
69
+ description: 'List AI Gateway models',
70
+ tags: ['read-only', 'fast'],
71
+ idempotent: true,
72
+ examples: [
73
+ { command: getCommand('cloud aigateway models'), description: 'List all models' },
74
+ {
75
+ command: getCommand('cloud aigateway models --provider openai'),
76
+ description: 'List OpenAI models',
77
+ },
78
+ {
79
+ command: getCommand('cloud aigateway models --model anthropic/claude-opus-4-7'),
80
+ description: 'Show one model by id',
81
+ },
82
+ ],
83
+ schema: {
84
+ options: z.object({
85
+ model: z.string().optional().describe('show one model by full provider/id'),
86
+ provider: z.string().optional().describe('filter by provider'),
87
+ name: z
88
+ .string()
89
+ .optional()
90
+ .describe('show one model by id or display name with --provider'),
91
+ reasoning: z.boolean().optional().describe('only show reasoning models'),
92
+ input: z.string().optional().describe('filter by input modality, such as text or image'),
93
+ output: z.string().optional().describe('filter by output modality, such as text or image'),
94
+ ids: z.boolean().optional().describe('only print model ids'),
95
+ simple: z.boolean().optional().describe('print a compact model list'),
96
+ recommended: z.boolean().optional().describe('show recommended models for common uses'),
97
+ refreshModels: z
98
+ .boolean()
99
+ .optional()
100
+ .describe('refresh the cached AI Gateway model catalog'),
101
+ }),
102
+ response: ModelsResponseSchema,
103
+ },
104
+ async handler(ctx) {
105
+ const service = createPublicAIGatewayService(ctx);
106
+ const profile = ctx.config?.name ?? 'default';
107
+ const cacheKey = getAIGatewayUrl(ctx.region, ctx.config?.overrides);
108
+ const cached = ctx.opts.refreshModels
109
+ ? null
110
+ : await getCachedAIGatewayModels(profile, cacheKey);
111
+ const catalog = cached ?? (await service.listModels());
112
+ if (!cached) {
113
+ await setCachedAIGatewayModels(profile, cacheKey, catalog);
114
+ }
115
+ const rows = Object.entries(catalog).flatMap(([provider, models]) => models
116
+ .filter((model) => matchesProviderFilter(provider, model.id, ctx.opts.provider))
117
+ .filter((model) => matchesModelFilter(provider, model.id, ctx.opts.model))
118
+ .filter((model) => matchesNameFilter(model.id, model.name, ctx.opts.name))
119
+ .filter((model) => !ctx.opts.reasoning || model.reasoning)
120
+ .filter((model) => !ctx.opts.input || model.input_modalities?.includes(ctx.opts.input))
121
+ .filter((model) => !ctx.opts.output || model.output_modalities?.includes(ctx.opts.output))
122
+ .map((model) => ({
123
+ provider,
124
+ id: model.id,
125
+ name: model.name,
126
+ api: model.api,
127
+ reasoning: model.reasoning,
128
+ contextWindow: model.context_window,
129
+ maxOutputTokens: model.max_output_tokens,
130
+ })));
131
+ const singleLookup = Boolean(ctx.opts.model || ctx.opts.name);
132
+ const selectedModel = singleLookup ? (rows[0] ?? null) : undefined;
133
+ const agentOutput = isAgentOutputMode();
134
+ if (ctx.options.json || agentOutput) {
135
+ if (agentOutput && !ctx.options.json) {
136
+ if (ctx.opts.ids) {
137
+ console.log(JSON.stringify({ ids: rows.map((row) => row.id), count: rows.length }, null, 2));
138
+ }
139
+ else if (ctx.opts.recommended) {
140
+ console.log(JSON.stringify({ recommendations: getRecommendations(rows) }, null, 2));
141
+ }
142
+ else if (singleLookup) {
143
+ console.log(JSON.stringify({ model: selectedModel, models: rows, count: rows.length }, null, 2));
144
+ }
145
+ else {
146
+ console.log(JSON.stringify({ models: rows, count: rows.length }, null, 2));
147
+ }
148
+ }
149
+ }
150
+ else {
151
+ if (rows.length === 0) {
152
+ tui.info('No AI Gateway models found');
153
+ }
154
+ else if (ctx.opts.ids) {
155
+ for (const row of rows) {
156
+ console.log(row.id);
157
+ }
158
+ }
159
+ else if (ctx.opts.recommended) {
160
+ const recommendations = getRecommendations(rows).map((row) => ({
161
+ Use: row.use,
162
+ Model: row.model,
163
+ Name: row.name,
164
+ }));
165
+ if (recommendations.length === 0) {
166
+ tui.info('No recommended AI Gateway models found');
167
+ }
168
+ else {
169
+ tui.table(recommendations, ['Use', 'Model', 'Name']);
170
+ }
171
+ }
172
+ else if (ctx.opts.simple) {
173
+ tui.table(rows.map((row) => ({
174
+ Model: row.id,
175
+ Name: row.name,
176
+ })), ['Model', 'Name']);
177
+ }
178
+ else {
179
+ tui.info(`Found ${rows.length} AI Gateway model(s):`);
180
+ tui.table(rows.map((row) => ({
181
+ Provider: row.provider,
182
+ Model: row.id,
183
+ Name: row.name,
184
+ API: row.api ?? '-',
185
+ Reasoning: row.reasoning ? 'yes' : 'no',
186
+ Context: row.contextWindow ?? '-',
187
+ })), ['Provider', 'Model', 'Name', 'API', 'Reasoning', 'Context']);
188
+ }
189
+ }
190
+ return { models: rows, count: rows.length, model: selectedModel };
191
+ },
192
+ });
193
+ //# sourceMappingURL=models.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.js","sourceRoot":"","sources":["../../../../src/cmd/cloud/aigateway/models.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import { AIGatewayService, type Logger } from '@agentuity/core';
2
+ import type { AuthData, Config, GlobalOptions, ProjectConfig } from '../../../types';
3
+ export declare function getAIGatewayUrl(region?: string, overrides?: {
4
+ aigateway_url?: string;
5
+ } | null): string;
6
+ export declare function createAIGatewayService(ctx: {
7
+ logger: Logger;
8
+ auth: AuthData;
9
+ region?: string;
10
+ project?: ProjectConfig;
11
+ config: Config | null;
12
+ options: GlobalOptions;
13
+ }): AIGatewayService;
14
+ export declare function createPublicAIGatewayService(ctx: {
15
+ logger: Logger;
16
+ region?: string;
17
+ config: Config | null;
18
+ }): AIGatewayService;
19
+ export declare function getCompletionText(response: unknown): string;
20
+ //# sourceMappingURL=util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../../src/cmd/cloud/aigateway/util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,KAAK,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAGhE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAIrF,wBAAgB,eAAe,CAC9B,MAAM,CAAC,EAAE,MAAM,EACf,SAAS,CAAC,EAAE;IAAE,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,GAC3C,MAAM,CASR;AAED,wBAAgB,sBAAsB,CAAC,GAAG,EAAE;IAC3C,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,QAAQ,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,OAAO,EAAE,aAAa,CAAC;CACvB,oBAsBA;AAED,wBAAgB,4BAA4B,CAAC,GAAG,EAAE;IACjD,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACtB,oBAGA;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,OAAO,GAAG,MAAM,CAwB3D"}
@@ -0,0 +1,58 @@
1
+ import { AIGatewayService } from '@agentuity/core';
2
+ import { createServerFetchAdapter, getServiceUrls } from '@agentuity/server';
3
+ import * as tui from '../../../tui';
4
+ const defaultAIGatewayRegion = 'usc';
5
+ export function getAIGatewayUrl(region, overrides) {
6
+ if (process.env.AGENTUITY_AIGATEWAY_URL) {
7
+ return process.env.AGENTUITY_AIGATEWAY_URL;
8
+ }
9
+ if (overrides?.aigateway_url) {
10
+ return overrides.aigateway_url;
11
+ }
12
+ return getServiceUrls(region || process.env.AGENTUITY_REGION || defaultAIGatewayRegion)
13
+ .aigateway;
14
+ }
15
+ export function createAIGatewayService(ctx) {
16
+ const orgId = ctx.project?.orgId ??
17
+ ctx.options.orgId ??
18
+ (process.env.AGENTUITY_CLOUD_ORG_ID || ctx.config?.preferences?.orgId);
19
+ if (!orgId) {
20
+ tui.fatal('Organization ID is required. Either run from a project directory or use --org-id flag.');
21
+ }
22
+ const adapter = createServerFetchAdapter({
23
+ headers: {
24
+ Authorization: `Bearer ${ctx.auth.apiKey}`,
25
+ 'x-agentuity-orgid': orgId,
26
+ },
27
+ }, ctx.logger);
28
+ return new AIGatewayService(getAIGatewayUrl(ctx.region, ctx.config?.overrides), adapter);
29
+ }
30
+ export function createPublicAIGatewayService(ctx) {
31
+ const adapter = createServerFetchAdapter({ headers: {} }, ctx.logger);
32
+ return new AIGatewayService(getAIGatewayUrl(ctx.region, ctx.config?.overrides), adapter);
33
+ }
34
+ export function getCompletionText(response) {
35
+ const choices = response.choices;
36
+ const first = Array.isArray(choices) && choices.length > 0
37
+ ? choices[0]
38
+ : undefined;
39
+ const content = first?.message?.content ?? first?.text ?? response.content;
40
+ if (typeof content === 'string') {
41
+ return content;
42
+ }
43
+ if (Array.isArray(content)) {
44
+ return content
45
+ .map((part) => {
46
+ if (typeof part === 'string')
47
+ return part;
48
+ if (part && typeof part === 'object' && 'text' in part) {
49
+ const text = part.text;
50
+ return typeof text === 'string' ? text : '';
51
+ }
52
+ return '';
53
+ })
54
+ .join('');
55
+ }
56
+ return '';
57
+ }
58
+ //# sourceMappingURL=util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../../../../src/cmd/cloud/aigateway/util.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cmd/cloud/index.ts"],"names":[],"mappings":"AAgCA,eAAO,MAAM,OAAO,mCAwClB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/cmd/cloud/index.ts"],"names":[],"mappings":"AAiCA,eAAO,MAAM,OAAO,mCAyClB,CAAC"}
@@ -14,6 +14,7 @@ import webhookCommand from './webhook';
14
14
  import { agentCommand } from './agent';
15
15
  import envCommand from './env';
16
16
  import apikeyCommand from './apikey';
17
+ import { aigatewayCommand } from './aigateway';
17
18
  import oidcCommand from './oidc';
18
19
  import streamCommand from './stream';
19
20
  import vectorCommand from './vector';
@@ -40,6 +41,7 @@ export const command = createCommand({
40
41
  ],
41
42
  subcommands: [
42
43
  apikeyCommand,
44
+ aigatewayCommand,
43
45
  oidcCommand,
44
46
  keyvalueCommand,
45
47
  queueCommand,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cmd/cloud/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,eAAe,MAAM,YAAY,CAAC;AACzC,OAAO,YAAY,MAAM,SAAS,CAAC;AACnC,OAAO,cAAc,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,UAAU,MAAM,OAAO,CAAC;AAC/B,OAAO,aAAa,MAAM,UAAU,CAAC;AACrC,OAAO,WAAW,MAAM,QAAQ,CAAC;AACjC,OAAO,aAAa,MAAM,UAAU,CAAC;AACrC,OAAO,aAAa,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,WAAW,MAAM,QAAQ,CAAC;AACjC,OAAO,cAAc,MAAM,WAAW,CAAC;AACvC,OAAO,eAAe,MAAM,YAAY,CAAC;AACzC,OAAO,eAAe,MAAM,YAAY,CAAC;AACzC,OAAO,eAAe,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD,MAAM,CAAC,MAAM,OAAO,GAAG,aAAa,CAAC;IACpC,IAAI,EAAE,OAAO;IACb,WAAW,EAAE,wBAAwB;IACrC,IAAI,EAAE,CAAC,MAAM,EAAE,eAAe,CAAC;IAC/B,QAAQ,EAAE;QACT,EAAE,OAAO,EAAE,UAAU,CAAC,cAAc,CAAC,EAAE,WAAW,EAAE,gCAAgC,EAAE;QACtF,EAAE,OAAO,EAAE,UAAU,CAAC,uBAAuB,CAAC,EAAE,WAAW,EAAE,sBAAsB,EAAE;QACrF,EAAE,OAAO,EAAE,UAAU,CAAC,qBAAqB,CAAC,EAAE,WAAW,EAAE,oBAAoB,EAAE;KACjF;IACD,WAAW,EAAE;QACZ,aAAa;QACb,WAAW;QACX,eAAe;QACf,YAAY;QACZ,cAAc;QACd,WAAW;QACX,YAAY;QACZ,aAAa;QACb,YAAY;QACZ,aAAa;QACb,cAAc;QACd,eAAe;QACf,eAAe;QACf,UAAU;QACV,WAAW;QACX,cAAc;QACd,gBAAgB;QAChB,SAAS;QACT,YAAY;QACZ,cAAc;QACd,eAAe;QACf,cAAc;QACd,aAAa;QACb,aAAa;QACb,aAAa;QACb,iBAAiB;QACjB,iBAAiB;QACjB,gBAAgB;QAChB,cAAc;KACd;CACD,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/cmd/cloud/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,SAAS,EAAE,MAAM,MAAM,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACjD,OAAO,eAAe,MAAM,YAAY,CAAC;AACzC,OAAO,YAAY,MAAM,SAAS,CAAC;AACnC,OAAO,cAAc,MAAM,WAAW,CAAC;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,UAAU,MAAM,OAAO,CAAC;AAC/B,OAAO,aAAa,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,WAAW,MAAM,QAAQ,CAAC;AACjC,OAAO,aAAa,MAAM,UAAU,CAAC;AACrC,OAAO,aAAa,MAAM,UAAU,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,WAAW,MAAM,QAAQ,CAAC;AACjC,OAAO,cAAc,MAAM,WAAW,CAAC;AACvC,OAAO,eAAe,MAAM,YAAY,CAAC;AACzC,OAAO,eAAe,MAAM,YAAY,CAAC;AACzC,OAAO,eAAe,MAAM,YAAY,CAAC;AACzC,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAElD,MAAM,CAAC,MAAM,OAAO,GAAG,aAAa,CAAC;IACpC,IAAI,EAAE,OAAO;IACb,WAAW,EAAE,wBAAwB;IACrC,IAAI,EAAE,CAAC,MAAM,EAAE,eAAe,CAAC;IAC/B,QAAQ,EAAE;QACT,EAAE,OAAO,EAAE,UAAU,CAAC,cAAc,CAAC,EAAE,WAAW,EAAE,gCAAgC,EAAE;QACtF,EAAE,OAAO,EAAE,UAAU,CAAC,uBAAuB,CAAC,EAAE,WAAW,EAAE,sBAAsB,EAAE;QACrF,EAAE,OAAO,EAAE,UAAU,CAAC,qBAAqB,CAAC,EAAE,WAAW,EAAE,oBAAoB,EAAE;KACjF;IACD,WAAW,EAAE;QACZ,aAAa;QACb,gBAAgB;QAChB,WAAW;QACX,eAAe;QACf,YAAY;QACZ,cAAc;QACd,WAAW;QACX,YAAY;QACZ,aAAa;QACb,YAAY;QACZ,aAAa;QACb,cAAc;QACd,eAAe;QACf,eAAe;QACf,UAAU;QACV,WAAW;QACX,cAAc;QACd,gBAAgB;QAChB,SAAS;QACT,YAAY;QACZ,cAAc;QACd,eAAe;QACf,cAAc;QACd,aAAa;QACb,aAAa;QACb,aAAa;QACb,iBAAiB;QACjB,iBAAiB;QACjB,gBAAgB;QAChB,cAAc;KACd;CACD,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare const createCustomSkillSubcommand: import("../../..").SubcommandDefinition;
2
+ //# sourceMappingURL=create.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../../src/cmd/coder/skill/create.ts"],"names":[],"mappings":"AA+BA,eAAO,MAAM,2BAA2B,yCA0FtC,CAAC"}
@@ -0,0 +1,104 @@
1
+ import { z } from 'zod';
2
+ import { CoderClient } from '@agentuity/core/coder';
3
+ import { ValidationOutputError } from '@agentuity/core';
4
+ import { createSubcommand } from '../../../types';
5
+ import * as tui from '../../../tui';
6
+ import { getCommand } from '../../../command-prefix';
7
+ import { ErrorCode } from '../../../errors';
8
+ async function readSkillContent(input) {
9
+ if (input.content !== undefined && input.contentFile) {
10
+ throw new Error('Use either --content or --content-file, not both.');
11
+ }
12
+ if (input.content !== undefined)
13
+ return input.content;
14
+ if (!input.contentFile) {
15
+ throw new Error('Provide --content or --content-file.');
16
+ }
17
+ try {
18
+ return await Bun.file(input.contentFile).text();
19
+ }
20
+ catch (error) {
21
+ throw new Error(`Failed to read content file "${input.contentFile}": ${error instanceof Error ? error.message : String(error)}`, { cause: error });
22
+ }
23
+ }
24
+ export const createCustomSkillSubcommand = createSubcommand({
25
+ name: 'create',
26
+ aliases: ['new'],
27
+ description: 'Create a custom SKILL.md-backed skill',
28
+ tags: ['mutating', 'requires-auth'],
29
+ requires: { auth: true, org: true },
30
+ examples: [
31
+ {
32
+ command: getCommand('coder skill create --skill-id release-checklist --name "Release checklist" --content-file ./SKILL.md'),
33
+ description: 'Create a custom skill from a SKILL.md file',
34
+ },
35
+ {
36
+ command: getCommand('coder skill create --skill-id release-checklist --name "Release checklist" --content "# Release checklist" --json'),
37
+ description: 'Create a custom skill from inline content and return JSON',
38
+ },
39
+ ],
40
+ schema: {
41
+ options: z.object({
42
+ url: z.string().optional().describe('Coder API URL override'),
43
+ skillId: z.string().describe('Skill identifier'),
44
+ name: z.string().describe('Skill name'),
45
+ description: z.string().optional().describe('Skill description'),
46
+ content: z.string().optional().describe('Inline SKILL.md content'),
47
+ contentFile: z.string().optional().describe('Path to a SKILL.md file'),
48
+ }),
49
+ },
50
+ async handler(ctx) {
51
+ const { opts, options } = ctx;
52
+ const client = new CoderClient({
53
+ apiKey: ctx.auth.apiKey,
54
+ url: opts?.url,
55
+ orgId: ctx.orgId,
56
+ });
57
+ let content;
58
+ try {
59
+ content = await readSkillContent({
60
+ content: opts?.content,
61
+ contentFile: opts?.contentFile,
62
+ });
63
+ }
64
+ catch (err) {
65
+ const msg = err instanceof Error ? err.message : String(err);
66
+ tui.fatal(`Failed to create custom skill: ${msg}`, ErrorCode.VALIDATION_FAILED);
67
+ return;
68
+ }
69
+ if (!content.trim()) {
70
+ tui.fatal('Failed to create custom skill: SKILL.md content cannot be empty.', ErrorCode.VALIDATION_FAILED);
71
+ return;
72
+ }
73
+ try {
74
+ const saved = await client.createCustomSkill({
75
+ skillId: opts.skillId,
76
+ name: opts.name,
77
+ ...(opts?.description !== undefined ? { description: opts.description } : {}),
78
+ content,
79
+ });
80
+ if (options.json) {
81
+ return saved;
82
+ }
83
+ tui.success(`Custom skill ${saved.id} created.`);
84
+ tui.newline();
85
+ tui.output(` Name: ${tui.bold(saved.name)}`);
86
+ tui.output(` Skill ID: ${saved.skillId}`);
87
+ tui.output(` Source: ${saved.source}`);
88
+ if (saved.description) {
89
+ tui.output(` Desc: ${saved.description}`);
90
+ }
91
+ return saved;
92
+ }
93
+ catch (err) {
94
+ if (err instanceof ValidationOutputError) {
95
+ ctx.logger.trace('Validation response URL: %s', err.url ?? 'unknown');
96
+ ctx.logger.trace('Validation issues: %s', JSON.stringify(err.issues, null, 2));
97
+ tui.fatal(`Failed to create custom skill: ${err.message}`, ErrorCode.VALIDATION_FAILED);
98
+ }
99
+ const msg = err instanceof Error ? err.message : String(err);
100
+ tui.fatal(`Failed to create custom skill: ${msg}`, ErrorCode.NETWORK_ERROR);
101
+ }
102
+ },
103
+ });
104
+ //# sourceMappingURL=create.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.js","sourceRoot":"","sources":["../../../../src/cmd/coder/skill/create.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/cmd/coder/skill/index.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,YAAY,sCA2BvB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/cmd/coder/skill/index.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,YAAY,sCAuCvB,CAAC"}
@@ -1,5 +1,6 @@
1
1
  import { createCommand } from '../../../types';
2
2
  import { listSubcommand } from './list';
3
+ import { createCustomSkillSubcommand } from './create';
3
4
  import { saveSkillSubcommand } from './save';
4
5
  import { deleteSkillSubcommand } from './delete';
5
6
  import { bucketsSubcommand } from './buckets';
@@ -15,6 +16,10 @@ export const skillCommand = createCommand({
15
16
  command: getCommand('coder skill list'),
16
17
  description: 'List saved skills',
17
18
  },
19
+ {
20
+ command: getCommand('coder skill create --skill-id release-checklist --name "Release checklist" --content-file ./SKILL.md'),
21
+ description: 'Create a custom skill',
22
+ },
18
23
  {
19
24
  command: getCommand('coder skill save --repo org/repo --skill-id sk_abc --name "My Skill"'),
20
25
  description: 'Save a skill to your library',
@@ -28,6 +33,12 @@ export const skillCommand = createCommand({
28
33
  description: 'List skill buckets',
29
34
  },
30
35
  ],
31
- subcommands: [listSubcommand, saveSkillSubcommand, deleteSkillSubcommand, bucketsSubcommand],
36
+ subcommands: [
37
+ listSubcommand,
38
+ createCustomSkillSubcommand,
39
+ saveSkillSubcommand,
40
+ deleteSkillSubcommand,
41
+ bucketsSubcommand,
42
+ ],
32
43
  });
33
44
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/cmd/coder/skill/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,mBAAmB,EAAE,MAAM,QAAQ,CAAC;AAC7C,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAErD,MAAM,CAAC,MAAM,YAAY,GAAG,aAAa,CAAC;IACzC,IAAI,EAAE,OAAO;IACb,OAAO,EAAE,CAAC,QAAQ,CAAC;IACnB,WAAW,EAAE,6CAA6C;IAC1D,IAAI,EAAE,CAAC,eAAe,CAAC;IACvB,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE;IACnC,QAAQ,EAAE;QACT;YACC,OAAO,EAAE,UAAU,CAAC,kBAAkB,CAAC;YACvC,WAAW,EAAE,mBAAmB;SAChC;QACD;YACC,OAAO,EAAE,UAAU,CAClB,sEAAsE,CACtE;YACD,WAAW,EAAE,8BAA8B;SAC3C;QACD;YACC,OAAO,EAAE,UAAU,CAAC,8BAA8B,CAAC;YACnD,WAAW,EAAE,sBAAsB;SACnC;QACD;YACC,OAAO,EAAE,UAAU,CAAC,qBAAqB,CAAC;YAC1C,WAAW,EAAE,oBAAoB;SACjC;KACD;IACD,WAAW,EAAE,CAAC,cAAc,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,iBAAiB,CAAC;CAC5F,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/cmd/coder/skill/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAE,2BAA2B,EAAE,MAAM,UAAU,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,QAAQ,CAAC;AAC7C,OAAO,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AACjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAErD,MAAM,CAAC,MAAM,YAAY,GAAG,aAAa,CAAC;IACzC,IAAI,EAAE,OAAO;IACb,OAAO,EAAE,CAAC,QAAQ,CAAC;IACnB,WAAW,EAAE,6CAA6C;IAC1D,IAAI,EAAE,CAAC,eAAe,CAAC;IACvB,QAAQ,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE;IACnC,QAAQ,EAAE;QACT;YACC,OAAO,EAAE,UAAU,CAAC,kBAAkB,CAAC;YACvC,WAAW,EAAE,mBAAmB;SAChC;QACD;YACC,OAAO,EAAE,UAAU,CAClB,sGAAsG,CACtG;YACD,WAAW,EAAE,uBAAuB;SACpC;QACD;YACC,OAAO,EAAE,UAAU,CAClB,sEAAsE,CACtE;YACD,WAAW,EAAE,8BAA8B;SAC3C;QACD;YACC,OAAO,EAAE,UAAU,CAAC,8BAA8B,CAAC;YACnD,WAAW,EAAE,sBAAsB;SACnC;QACD;YACC,OAAO,EAAE,UAAU,CAAC,qBAAqB,CAAC;YAC1C,WAAW,EAAE,oBAAoB;SACjC;KACD;IACD,WAAW,EAAE;QACZ,cAAc;QACd,2BAA2B;QAC3B,mBAAmB;QACnB,qBAAqB;QACrB,iBAAiB;KACjB;CACD,CAAC,CAAC"}
@@ -1,5 +1,5 @@
1
- import { type CoderCreateWorkspaceRequest, type CoderUpdateWorkspaceRequest, type CoderWorkspaceDetail } from '@agentuity/core/coder';
2
- export declare const EMPTY_WORKSPACE_ERROR = "A workspace needs at least one repo, dependency, setup script, saved skill, skill bucket, or agent";
1
+ import { type CoderCreateWorkspaceRequest, type CoderUpdateWorkspaceRequest, type CoderWorkspaceDetail, type CoderWorkspaceSystemPromptMode } from '@agentuity/core/coder';
2
+ export declare const EMPTY_WORKSPACE_ERROR = "A workspace needs at least one repo, dependency, setup script, system prompt, saved skill, skill bucket, or agent";
3
3
  export declare const SetupScriptValidationError: {
4
4
  new (args?: ({
5
5
  message: string;
@@ -15,11 +15,31 @@ export declare const SetupScriptValidationError: {
15
15
  }>;
16
16
  readonly defaultMessage?: string;
17
17
  };
18
+ export declare const SystemPromptValidationError: {
19
+ new (args?: ({
20
+ message: string;
21
+ path?: string;
22
+ } & {
23
+ message?: string;
24
+ cause?: unknown;
25
+ }) | undefined): import("@agentuity/core").RichError & {
26
+ readonly _tag: "SystemPromptValidationError";
27
+ } & Readonly<{
28
+ message: string;
29
+ path?: string;
30
+ }>;
31
+ readonly defaultMessage?: string;
32
+ };
33
+ export declare function normalizeSystemPromptMode(value?: string): CoderWorkspaceSystemPromptMode | undefined;
18
34
  export declare function parseCommaList(value?: string): string[];
19
35
  export declare function readSetupScript(input: {
20
36
  setupScript?: string;
21
37
  setupScriptFile?: string;
22
38
  }): Promise<string | undefined>;
39
+ export declare function readSystemPrompt(input: {
40
+ systemPrompt?: string;
41
+ systemPromptFile?: string;
42
+ }): Promise<string | undefined>;
23
43
  export declare function hasWorkspaceSelections(input: CoderCreateWorkspaceRequest): boolean;
24
44
  export declare function hasWorkspaceUpdate(input: CoderUpdateWorkspaceRequest): boolean;
25
45
  export declare function formatWorkspaceValidationMessage(issues: Array<{
@@ -1 +1 @@
1
- {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../../../src/cmd/coder/workspace/common.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,KAAK,2BAA2B,EAChC,KAAK,2BAA2B,EAChC,KAAK,oBAAoB,EACzB,MAAM,uBAAuB,CAAC;AAI/B,eAAO,MAAM,qBAAqB,uGACmE,CAAC;AACtG,eAAO,MAAM,0BAA0B;;iBAC7B,MAAM;eACR,MAAM;;;;;;;iBADJ,MAAM;eACR,MAAM;;;CACV,CAAC;AAEL,wBAAgB,cAAc,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAOvD;AAED,wBAAsB,eAAe,CAAC,KAAK,EAAE;IAC5C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;CACzB,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAmB9B;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,2BAA2B,GAAG,OAAO,CASlF;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,2BAA2B,GAAG,OAAO,CAE9E;AAED,wBAAgB,gCAAgC,CAAC,MAAM,EAAE,KAAK,CAAC;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,MAAM,CAS3F;AAED,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,oBAAoB,GAAG,IAAI,CA4B3E"}
1
+ {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../../../src/cmd/coder/workspace/common.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,KAAK,2BAA2B,EAChC,KAAK,2BAA2B,EAChC,KAAK,oBAAoB,EACzB,KAAK,8BAA8B,EACnC,MAAM,uBAAuB,CAAC;AAI/B,eAAO,MAAM,qBAAqB,sHACkF,CAAC;AACrH,eAAO,MAAM,0BAA0B;;iBAC7B,MAAM;eACR,MAAM;;;;;;;iBADJ,MAAM;eACR,MAAM;;;CACV,CAAC;AACL,eAAO,MAAM,2BAA2B;;iBAC9B,MAAM;eACR,MAAM;;;;;;;iBADJ,MAAM;eACR,MAAM;;;CACV,CAAC;AAEL,wBAAgB,yBAAyB,CACxC,KAAK,CAAC,EAAE,MAAM,GACZ,8BAA8B,GAAG,SAAS,CAO5C;AAED,wBAAgB,cAAc,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAOvD;AAED,wBAAsB,eAAe,CAAC,KAAK,EAAE;IAC5C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;CACzB,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAmB9B;AAED,wBAAsB,gBAAgB,CAAC,KAAK,EAAE;IAC7C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC1B,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAmB9B;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,2BAA2B,GAAG,OAAO,CAUlF;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,2BAA2B,GAAG,OAAO,CAE9E;AAED,wBAAgB,gCAAgC,CAAC,MAAM,EAAE,KAAK,CAAC;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,MAAM,CAS3F;AAED,wBAAgB,qBAAqB,CAAC,SAAS,EAAE,oBAAoB,GAAG,IAAI,CA+B3E"}
@@ -1,7 +1,18 @@
1
1
  import { StructuredError } from '@agentuity/core';
2
2
  import * as tui from '../../../tui';
3
- export const EMPTY_WORKSPACE_ERROR = 'A workspace needs at least one repo, dependency, setup script, saved skill, skill bucket, or agent';
3
+ export const EMPTY_WORKSPACE_ERROR = 'A workspace needs at least one repo, dependency, setup script, system prompt, saved skill, skill bucket, or agent';
4
4
  export const SetupScriptValidationError = StructuredError('SetupScriptValidationError')();
5
+ export const SystemPromptValidationError = StructuredError('SystemPromptValidationError')();
6
+ export function normalizeSystemPromptMode(value) {
7
+ if (value === undefined)
8
+ return undefined;
9
+ const normalized = value.trim().toLowerCase();
10
+ if (normalized === 'append' || normalized === 'overwrite')
11
+ return normalized;
12
+ throw new SystemPromptValidationError({
13
+ message: 'Use --system-prompt-mode append or --system-prompt-mode overwrite.',
14
+ });
15
+ }
5
16
  export function parseCommaList(value) {
6
17
  return value
7
18
  ? value
@@ -31,10 +42,32 @@ export async function readSetupScript(input) {
31
42
  });
32
43
  }
33
44
  }
45
+ export async function readSystemPrompt(input) {
46
+ if (input.systemPrompt !== undefined && input.systemPromptFile) {
47
+ throw new SystemPromptValidationError({
48
+ message: 'Use either --system-prompt or --system-prompt-file, not both.',
49
+ });
50
+ }
51
+ if (input.systemPrompt !== undefined)
52
+ return input.systemPrompt;
53
+ if (!input.systemPromptFile)
54
+ return undefined;
55
+ try {
56
+ return await Bun.file(input.systemPromptFile).text();
57
+ }
58
+ catch (error) {
59
+ throw new SystemPromptValidationError({
60
+ message: `Failed to read system prompt file "${input.systemPromptFile}": ${error instanceof Error ? error.message : String(error)}`,
61
+ path: input.systemPromptFile,
62
+ cause: error,
63
+ });
64
+ }
65
+ }
34
66
  export function hasWorkspaceSelections(input) {
35
67
  return ((input.repos?.length ?? 0) > 0 ||
36
68
  (input.dependencies?.length ?? 0) > 0 ||
37
69
  Boolean(input.setupScript?.trim()) ||
70
+ Boolean(input.systemPrompt?.trim()) ||
38
71
  (input.savedSkillIds?.length ?? 0) > 0 ||
39
72
  (input.skillBucketIds?.length ?? 0) > 0 ||
40
73
  (input.enabledAgents?.length ?? 0) > 0);
@@ -48,7 +81,7 @@ export function formatWorkspaceValidationMessage(issues) {
48
81
  return 'Invalid workspace configuration';
49
82
  }
50
83
  if (messages.includes(EMPTY_WORKSPACE_ERROR)) {
51
- return `${EMPTY_WORKSPACE_ERROR}. Use --repo, --dependency, --setup-script, or --enabled-agents.`;
84
+ return `${EMPTY_WORKSPACE_ERROR}. Use --repo, --dependency, --setup-script, --system-prompt, or --enabled-agents.`;
52
85
  }
53
86
  return messages.join('; ');
54
87
  }
@@ -73,6 +106,9 @@ export function printWorkspaceSummary(workspace) {
73
106
  if (workspace.setupScript) {
74
107
  tui.output(' Setup: configured');
75
108
  }
109
+ if (workspace.systemPrompt) {
110
+ tui.output(` Prompt: configured (${workspace.systemPromptMode})`);
111
+ }
76
112
  if (workspace.snapshot?.status) {
77
113
  tui.output(` Snapshot: ${workspace.snapshot.status}`);
78
114
  }