lua-cli 3.2.0-alpha.2 → 3.3.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/dist/api/agent.api.service.js +1 -0
- package/dist/api/agent.api.service.js.map +1 -0
- package/dist/api/auth.api.service.js +1 -0
- package/dist/api/auth.api.service.js.map +1 -0
- package/dist/api/basket.api.service.js +1 -0
- package/dist/api/basket.api.service.js.map +1 -0
- package/dist/api/cdn.api.service.js +1 -0
- package/dist/api/cdn.api.service.js.map +1 -0
- package/dist/api/chat.api.service.js +1 -0
- package/dist/api/chat.api.service.js.map +1 -0
- package/dist/api/credentials.js +1 -0
- package/dist/api/credentials.js.map +1 -0
- package/dist/api/custom.data.api.service.js +1 -0
- package/dist/api/custom.data.api.service.js.map +1 -0
- package/dist/api/developer.api.service.js +1 -0
- package/dist/api/developer.api.service.js.map +1 -0
- package/dist/api/job.api.service.js +1 -0
- package/dist/api/job.api.service.js.map +1 -0
- package/dist/api/lazy-instances.js +1 -0
- package/dist/api/lazy-instances.js.map +1 -0
- package/dist/api/logs.api.service.d.ts +1 -1
- package/dist/api/logs.api.service.js +1 -0
- package/dist/api/logs.api.service.js.map +1 -0
- package/dist/api/marketplace.api.service.js +1 -0
- package/dist/api/marketplace.api.service.js.map +1 -0
- package/dist/api/order.api.service.js +1 -0
- package/dist/api/order.api.service.js.map +1 -0
- package/dist/api/persona.api.service.js +1 -0
- package/dist/api/persona.api.service.js.map +1 -0
- package/dist/api/postprocessor.api.service.js +1 -0
- package/dist/api/postprocessor.api.service.js.map +1 -0
- package/dist/api/preprocessor.api.service.js +1 -0
- package/dist/api/preprocessor.api.service.js.map +1 -0
- package/dist/api/products.api.service.d.ts +17 -5
- package/dist/api/products.api.service.js +22 -9
- package/dist/api/products.api.service.js.map +1 -0
- package/dist/api/skills.api.service.js +1 -0
- package/dist/api/skills.api.service.js.map +1 -0
- package/dist/api/tool.api.service.js +1 -0
- package/dist/api/tool.api.service.js.map +1 -0
- package/dist/api/user.data.api.service.js +1 -0
- package/dist/api/user.data.api.service.js.map +1 -0
- package/dist/api/webhook.api.service.js +1 -0
- package/dist/api/webhook.api.service.js.map +1 -0
- package/dist/api/whatsapp-templates.api.service.js +1 -0
- package/dist/api/whatsapp-templates.api.service.js.map +1 -0
- package/dist/api-exports.d.ts +23 -6
- package/dist/api-exports.js +27 -5
- package/dist/api-exports.js.map +1 -0
- package/dist/cli/command-definitions.js +321 -88
- package/dist/cli/command-definitions.js.map +1 -0
- package/dist/commands/admin.js +1 -0
- package/dist/commands/admin.js.map +1 -0
- package/dist/commands/agents.js +1 -0
- package/dist/commands/agents.js.map +1 -0
- package/dist/commands/apiKey.d.ts +5 -2
- package/dist/commands/apiKey.js +9 -2
- package/dist/commands/apiKey.js.map +1 -0
- package/dist/commands/channels.d.ts +4 -9
- package/dist/commands/channels.js +141 -84
- package/dist/commands/channels.js.map +1 -0
- package/dist/commands/chat.d.ts +4 -2
- package/dist/commands/chat.js +127 -32
- package/dist/commands/chat.js.map +1 -0
- package/dist/commands/chatClear.d.ts +3 -2
- package/dist/commands/chatClear.js +17 -15
- package/dist/commands/chatClear.js.map +1 -0
- package/dist/commands/compile.js +68 -4
- package/dist/commands/compile.js.map +1 -0
- package/dist/commands/completion.js +1 -0
- package/dist/commands/completion.js.map +1 -0
- package/dist/commands/configure.js +1 -0
- package/dist/commands/configure.js.map +1 -0
- package/dist/commands/deploy.d.ts +5 -24
- package/dist/commands/deploy.js +76 -48
- package/dist/commands/deploy.js.map +1 -0
- package/dist/commands/destroy.d.ts +5 -2
- package/dist/commands/destroy.js +15 -2
- package/dist/commands/destroy.js.map +1 -0
- package/dist/commands/dev.js +1 -0
- package/dist/commands/dev.js.map +1 -0
- package/dist/commands/docs.js +1 -0
- package/dist/commands/docs.js.map +1 -0
- package/dist/commands/env.d.ts +3 -1
- package/dist/commands/env.js +323 -122
- package/dist/commands/env.js.map +1 -0
- package/dist/commands/evals.js +1 -0
- package/dist/commands/evals.js.map +1 -0
- package/dist/commands/features.d.ts +5 -9
- package/dist/commands/features.js +250 -129
- package/dist/commands/features.js.map +1 -0
- package/dist/commands/index.js +1 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/init.d.ts +7 -1
- package/dist/commands/init.js +252 -65
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/jobs.d.ts +5 -13
- package/dist/commands/jobs.js +450 -364
- package/dist/commands/jobs.js.map +1 -0
- package/dist/commands/logs.d.ts +5 -10
- package/dist/commands/logs.js +260 -103
- package/dist/commands/logs.js.map +1 -0
- package/dist/commands/marketplace.d.ts +23 -2
- package/dist/commands/marketplace.js +531 -7
- package/dist/commands/marketplace.js.map +1 -0
- package/dist/commands/mcp.d.ts +5 -11
- package/dist/commands/mcp.js +304 -288
- package/dist/commands/mcp.js.map +1 -0
- package/dist/commands/persona.d.ts +5 -9
- package/dist/commands/persona.js +350 -232
- package/dist/commands/persona.js.map +1 -0
- package/dist/commands/postprocessors.d.ts +6 -2
- package/dist/commands/postprocessors.js +388 -280
- package/dist/commands/postprocessors.js.map +1 -0
- package/dist/commands/preprocessors.d.ts +6 -2
- package/dist/commands/preprocessors.js +388 -280
- package/dist/commands/preprocessors.js.map +1 -0
- package/dist/commands/production.d.ts +5 -8
- package/dist/commands/production.js +318 -228
- package/dist/commands/production.js.map +1 -0
- package/dist/commands/push.js +386 -427
- package/dist/commands/push.js.map +1 -0
- package/dist/commands/resources.d.ts +5 -10
- package/dist/commands/resources.js +220 -154
- package/dist/commands/resources.js.map +1 -0
- package/dist/commands/skills.d.ts +5 -9
- package/dist/commands/skills.js +355 -278
- package/dist/commands/skills.js.map +1 -0
- package/dist/commands/sync.d.ts +10 -8
- package/dist/commands/sync.js +111 -19
- package/dist/commands/sync.js.map +1 -0
- package/dist/commands/test.d.ts +1 -11
- package/dist/commands/test.js +396 -438
- package/dist/commands/test.js.map +1 -0
- package/dist/commands/webhooks.d.ts +5 -11
- package/dist/commands/webhooks.js +357 -290
- package/dist/commands/webhooks.js.map +1 -0
- package/dist/common/basket.instance.js +1 -0
- package/dist/common/basket.instance.js.map +1 -0
- package/dist/common/data.entry.instance.js +1 -0
- package/dist/common/data.entry.instance.js.map +1 -0
- package/dist/common/http.client.js +1 -0
- package/dist/common/http.client.js.map +1 -0
- package/dist/common/job.instance.js +1 -0
- package/dist/common/job.instance.js.map +1 -0
- package/dist/common/order.instance.js +1 -0
- package/dist/common/order.instance.js.map +1 -0
- package/dist/common/product.instance.js +1 -0
- package/dist/common/product.instance.js.map +1 -0
- package/dist/common/product.pagination.instance.js +1 -0
- package/dist/common/product.pagination.instance.js.map +1 -0
- package/dist/common/product.search.instance.js +1 -0
- package/dist/common/product.search.instance.js.map +1 -0
- package/dist/common/user.instance.js +1 -0
- package/dist/common/user.instance.js.map +1 -0
- package/dist/config/auth.constants.js +1 -0
- package/dist/config/auth.constants.js.map +1 -0
- package/dist/config/compile.constants.js +1 -0
- package/dist/config/compile.constants.js.map +1 -0
- package/dist/config/constants.js +1 -0
- package/dist/config/constants.js.map +1 -0
- package/dist/config/dev.constants.js +1 -0
- package/dist/config/dev.constants.js.map +1 -0
- package/dist/config/init.constants.d.ts +0 -8
- package/dist/config/init.constants.js +1 -24
- package/dist/config/init.constants.js.map +1 -0
- package/dist/errors/auth.error.js +1 -0
- package/dist/errors/auth.error.js.map +1 -0
- package/dist/errors/index.js +1 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -0
- package/dist/interfaces/admin.js +1 -0
- package/dist/interfaces/admin.js.map +1 -0
- package/dist/interfaces/agent.d.ts +2 -27
- package/dist/interfaces/agent.js +1 -0
- package/dist/interfaces/agent.js.map +1 -0
- package/dist/interfaces/baskets.js +1 -0
- package/dist/interfaces/baskets.js.map +1 -0
- package/dist/interfaces/cdn.js +1 -0
- package/dist/interfaces/cdn.js.map +1 -0
- package/dist/interfaces/chat.js +1 -0
- package/dist/interfaces/chat.js.map +1 -0
- package/dist/interfaces/common.js +1 -0
- package/dist/interfaces/common.js.map +1 -0
- package/dist/interfaces/compile.js +1 -0
- package/dist/interfaces/compile.js.map +1 -0
- package/dist/interfaces/custom.data.js +1 -0
- package/dist/interfaces/custom.data.js.map +1 -0
- package/dist/interfaces/deploy.js +1 -0
- package/dist/interfaces/deploy.js.map +1 -0
- package/dist/interfaces/dev.js +1 -0
- package/dist/interfaces/dev.js.map +1 -0
- package/dist/interfaces/index.js +1 -0
- package/dist/interfaces/index.js.map +1 -0
- package/dist/interfaces/init.d.ts +0 -19
- package/dist/interfaces/init.js +1 -0
- package/dist/interfaces/init.js.map +1 -0
- package/dist/interfaces/jobs.js +1 -0
- package/dist/interfaces/jobs.js.map +1 -0
- package/dist/interfaces/logs.js +1 -0
- package/dist/interfaces/logs.js.map +1 -0
- package/dist/interfaces/lua.d.ts +11 -1
- package/dist/interfaces/lua.js +1 -0
- package/dist/interfaces/lua.js.map +1 -0
- package/dist/interfaces/marketplace.js +1 -0
- package/dist/interfaces/marketplace.js.map +1 -0
- package/dist/interfaces/mcp.d.ts +28 -1
- package/dist/interfaces/mcp.js +1 -0
- package/dist/interfaces/mcp.js.map +1 -0
- package/dist/interfaces/message.js +1 -0
- package/dist/interfaces/message.js.map +1 -0
- package/dist/interfaces/orders.js +1 -0
- package/dist/interfaces/orders.js.map +1 -0
- package/dist/interfaces/persona.js +1 -0
- package/dist/interfaces/persona.js.map +1 -0
- package/dist/interfaces/postprocessors.js +1 -0
- package/dist/interfaces/postprocessors.js.map +1 -0
- package/dist/interfaces/preprocessors.js +1 -0
- package/dist/interfaces/preprocessors.js.map +1 -0
- package/dist/interfaces/product.d.ts +26 -0
- package/dist/interfaces/product.js +1 -0
- package/dist/interfaces/product.js.map +1 -0
- package/dist/interfaces/push.js +1 -0
- package/dist/interfaces/push.js.map +1 -0
- package/dist/interfaces/skills.js +1 -0
- package/dist/interfaces/skills.js.map +1 -0
- package/dist/interfaces/test.js +1 -0
- package/dist/interfaces/test.js.map +1 -0
- package/dist/interfaces/user.js +1 -0
- package/dist/interfaces/user.js.map +1 -0
- package/dist/interfaces/webhooks.js +1 -0
- package/dist/interfaces/webhooks.js.map +1 -0
- package/dist/interfaces/whatsapp-templates.js +1 -0
- package/dist/interfaces/whatsapp-templates.js.map +1 -0
- package/dist/services/auth.js +1 -0
- package/dist/services/auth.js.map +1 -0
- package/dist/types/api-contracts.d.ts +8 -4
- package/dist/types/api-contracts.js +1 -0
- package/dist/types/api-contracts.js.map +1 -0
- package/dist/types/compile.types.js +1 -0
- package/dist/types/compile.types.js.map +1 -0
- package/dist/types/index.d.ts +3 -3
- package/dist/types/index.js +1 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/skill.d.ts +92 -17
- package/dist/types/skill.js +16 -11
- package/dist/types/skill.js.map +1 -0
- package/dist/types/tool-validation.js +1 -0
- package/dist/types/tool-validation.js.map +1 -0
- package/dist/utils/agent-code-utils.d.ts +2 -1
- package/dist/utils/agent-code-utils.js +14 -3
- package/dist/utils/agent-code-utils.js.map +1 -0
- package/dist/utils/auth-flows.js +1 -0
- package/dist/utils/auth-flows.js.map +1 -0
- package/dist/utils/bundling.d.ts +17 -0
- package/dist/utils/bundling.js +146 -12
- package/dist/utils/bundling.js.map +1 -0
- package/dist/utils/cli.js +1 -0
- package/dist/utils/cli.js.map +1 -0
- package/dist/utils/compile.d.ts +5 -0
- package/dist/utils/compile.js +154 -15
- package/dist/utils/compile.js.map +1 -0
- package/dist/utils/deploy-api.js +1 -0
- package/dist/utils/deploy-api.js.map +1 -0
- package/dist/utils/deploy-helpers.js +1 -0
- package/dist/utils/deploy-helpers.js.map +1 -0
- package/dist/utils/deployment.js +1 -0
- package/dist/utils/deployment.js.map +1 -0
- package/dist/utils/dev-api.js +1 -0
- package/dist/utils/dev-api.js.map +1 -0
- package/dist/utils/dev-helpers.d.ts +3 -2
- package/dist/utils/dev-helpers.js +4 -5
- package/dist/utils/dev-helpers.js.map +1 -0
- package/dist/utils/dev-server.js +1 -0
- package/dist/utils/dev-server.js.map +1 -0
- package/dist/utils/dev-watcher.js +1 -0
- package/dist/utils/dev-watcher.js.map +1 -0
- package/dist/utils/env-loader.utils.js +1 -0
- package/dist/utils/env-loader.utils.js.map +1 -0
- package/dist/utils/files.js +1 -0
- package/dist/utils/files.js.map +1 -0
- package/dist/utils/init-agent.d.ts +4 -4
- package/dist/utils/init-agent.js +12 -14
- package/dist/utils/init-agent.js.map +1 -0
- package/dist/utils/init-helpers.js +1 -0
- package/dist/utils/init-helpers.js.map +1 -0
- package/dist/utils/init-prompts.d.ts +10 -6
- package/dist/utils/init-prompts.js +41 -75
- package/dist/utils/init-prompts.js.map +1 -0
- package/dist/utils/job-management.js +1 -0
- package/dist/utils/job-management.js.map +1 -0
- package/dist/utils/mcp-server-management.d.ts +1 -1
- package/dist/utils/mcp-server-management.js +14 -14
- package/dist/utils/mcp-server-management.js.map +1 -0
- package/dist/utils/postprocessor-management.js +1 -0
- package/dist/utils/postprocessor-management.js.map +1 -0
- package/dist/utils/pre-bundle-jobs.js +1 -0
- package/dist/utils/pre-bundle-jobs.js.map +1 -0
- package/dist/utils/preprocessor-management.js +1 -0
- package/dist/utils/preprocessor-management.js.map +1 -0
- package/dist/utils/prompt-handler.js +1 -0
- package/dist/utils/prompt-handler.js.map +1 -0
- package/dist/utils/push-api.js +1 -0
- package/dist/utils/push-api.js.map +1 -0
- package/dist/utils/push-helpers.js +1 -0
- package/dist/utils/push-helpers.js.map +1 -0
- package/dist/utils/sandbox-storage.js +1 -0
- package/dist/utils/sandbox-storage.js.map +1 -0
- package/dist/utils/sandbox.d.ts +1 -0
- package/dist/utils/sandbox.js +2 -0
- package/dist/utils/sandbox.js.map +1 -0
- package/dist/utils/semver.js +1 -0
- package/dist/utils/semver.js.map +1 -0
- package/dist/utils/skill-management.js +1 -0
- package/dist/utils/skill-management.js.map +1 -0
- package/dist/utils/sync-helpers.js +23 -4
- package/dist/utils/sync-helpers.js.map +1 -0
- package/dist/utils/test-helpers.js +1 -0
- package/dist/utils/test-helpers.js.map +1 -0
- package/dist/utils/test-prompts.js +1 -0
- package/dist/utils/test-prompts.js.map +1 -0
- package/dist/utils/tool-detection.js +1 -0
- package/dist/utils/tool-detection.js.map +1 -0
- package/dist/utils/webhook-management.js +1 -0
- package/dist/utils/webhook-management.js.map +1 -0
- package/package.json +2 -1
- package/template/package.json +1 -1
package/dist/commands/skills.js
CHANGED
|
@@ -8,20 +8,23 @@ import { withErrorHandling, writeProgress, writeSuccess, writeInfo } from '../ut
|
|
|
8
8
|
import { BASE_URLS } from '../config/constants.js';
|
|
9
9
|
import { safePrompt } from '../utils/prompt-handler.js';
|
|
10
10
|
import { validateConfig, validateAgentConfig, } from '../utils/dev-helpers.js';
|
|
11
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
12
|
+
// Main Command Entry
|
|
13
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
11
14
|
/**
|
|
12
|
-
* Main skills command - manages agent skills
|
|
15
|
+
* Main skills command - manages agent skills.
|
|
13
16
|
*
|
|
14
|
-
*
|
|
15
|
-
* -
|
|
16
|
-
* -
|
|
17
|
-
* - Production: view deployed skills, versions, and deploy new versions
|
|
18
|
-
*
|
|
19
|
-
* @param env - Optional environment argument ('sandbox', 'staging', or 'production')
|
|
20
|
-
* @returns Promise that resolves when command completes
|
|
17
|
+
* Supports both interactive and non-interactive modes:
|
|
18
|
+
* - Interactive: prompts for environment and action
|
|
19
|
+
* - Non-interactive: use action argument with -i and -v flags
|
|
21
20
|
*/
|
|
22
|
-
export async function skillsCommand(
|
|
21
|
+
export async function skillsCommand(actionOrEnv, cmdObj) {
|
|
23
22
|
return withErrorHandling(async () => {
|
|
24
|
-
|
|
23
|
+
const options = {
|
|
24
|
+
skillName: cmdObj?.skillName || null,
|
|
25
|
+
skillVersion: cmdObj?.skillVersion || null,
|
|
26
|
+
};
|
|
27
|
+
// Step 1: Load configuration
|
|
25
28
|
const config = readSkillConfig();
|
|
26
29
|
validateConfig(config);
|
|
27
30
|
validateAgentConfig(config);
|
|
@@ -34,62 +37,304 @@ export async function skillsCommand(env) {
|
|
|
34
37
|
}
|
|
35
38
|
await checkApiKey(apiKey);
|
|
36
39
|
writeProgress("✅ Authenticated");
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
const
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
console.log(' lua skills - Interactive selection');
|
|
52
|
-
console.log(' lua skills sandbox - View sandbox skills directly');
|
|
53
|
-
console.log(' lua skills staging - View staging skills (alias for sandbox)');
|
|
54
|
-
console.log(' lua skills production - Manage production skills directly');
|
|
55
|
-
process.exit(1);
|
|
40
|
+
// Step 3: Determine mode based on argument
|
|
41
|
+
const validActions = ['view', 'versions', 'deploy'];
|
|
42
|
+
const validEnvs = ['sandbox', 'staging', 'production'];
|
|
43
|
+
if (actionOrEnv) {
|
|
44
|
+
const normalized = actionOrEnv.toLowerCase();
|
|
45
|
+
// Check if it's a non-interactive action
|
|
46
|
+
if (validActions.includes(normalized)) {
|
|
47
|
+
const context = {
|
|
48
|
+
environment: 'production',
|
|
49
|
+
agentId,
|
|
50
|
+
apiKey,
|
|
51
|
+
};
|
|
52
|
+
await executeNonInteractive(context, config, normalized, options);
|
|
53
|
+
return;
|
|
56
54
|
}
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
55
|
+
// Check if it's an environment selection
|
|
56
|
+
if (validEnvs.includes(normalized)) {
|
|
57
|
+
const selectedEnvironment = (normalized === 'sandbox' || normalized === 'staging') ? 'sandbox' : 'production';
|
|
58
|
+
const context = {
|
|
59
|
+
environment: selectedEnvironment,
|
|
60
|
+
agentId,
|
|
61
|
+
apiKey,
|
|
62
|
+
};
|
|
63
|
+
if (selectedEnvironment === 'sandbox') {
|
|
64
|
+
await manageSandboxSkillsInteractive(context, config);
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
await manageProductionSkillsInteractive(context, config);
|
|
69
68
|
}
|
|
70
|
-
]);
|
|
71
|
-
if (!envAnswer)
|
|
72
69
|
return;
|
|
73
|
-
|
|
70
|
+
}
|
|
71
|
+
// Invalid argument
|
|
72
|
+
console.error(`❌ Invalid argument: "${actionOrEnv}"`);
|
|
73
|
+
console.log('\nUsage:');
|
|
74
|
+
console.log(' lua skills Interactive selection');
|
|
75
|
+
console.log(' lua skills sandbox View sandbox skills');
|
|
76
|
+
console.log(' lua skills production Manage production skills');
|
|
77
|
+
console.log(' lua skills view List all production skills');
|
|
78
|
+
console.log(' lua skills deploy -i mySkill -v 1.0.3 Deploy specific version');
|
|
79
|
+
process.exit(1);
|
|
74
80
|
}
|
|
81
|
+
// Interactive mode - prompt for environment
|
|
82
|
+
const envAnswer = await safePrompt([
|
|
83
|
+
{
|
|
84
|
+
type: 'list',
|
|
85
|
+
name: 'environment',
|
|
86
|
+
message: 'Select environment:',
|
|
87
|
+
choices: [
|
|
88
|
+
{ name: '🔧 Sandbox (local skills)', value: 'sandbox' },
|
|
89
|
+
{ name: '🚀 Production (deployed skills)', value: 'production' }
|
|
90
|
+
]
|
|
91
|
+
}
|
|
92
|
+
]);
|
|
93
|
+
if (!envAnswer)
|
|
94
|
+
return;
|
|
75
95
|
const context = {
|
|
76
|
-
environment:
|
|
96
|
+
environment: envAnswer.environment,
|
|
77
97
|
agentId,
|
|
78
98
|
apiKey,
|
|
79
99
|
};
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
await manageSandboxSkills(context, config);
|
|
100
|
+
if (context.environment === 'sandbox') {
|
|
101
|
+
await manageSandboxSkillsInteractive(context, config);
|
|
83
102
|
}
|
|
84
103
|
else {
|
|
85
|
-
await
|
|
104
|
+
await manageProductionSkillsInteractive(context, config);
|
|
86
105
|
}
|
|
87
106
|
}, "skills");
|
|
88
107
|
}
|
|
108
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
109
|
+
// Shared Core Functions
|
|
110
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
111
|
+
/**
|
|
112
|
+
* Displays all skills with their current status.
|
|
113
|
+
*/
|
|
114
|
+
async function displaySkillsCore(context, skills) {
|
|
115
|
+
console.log("\n" + "=".repeat(60));
|
|
116
|
+
console.log("⚙️ Production Skills");
|
|
117
|
+
console.log("=".repeat(60) + "\n");
|
|
118
|
+
for (const skill of skills) {
|
|
119
|
+
try {
|
|
120
|
+
const response = await fetch(`${BASE_URLS.API}/developer/skills/${context.agentId}/${skill.skillId}/versions`, {
|
|
121
|
+
method: 'GET',
|
|
122
|
+
headers: {
|
|
123
|
+
'Authorization': `Bearer ${context.apiKey}`,
|
|
124
|
+
'Content-Type': 'application/json'
|
|
125
|
+
}
|
|
126
|
+
});
|
|
127
|
+
if (response.ok) {
|
|
128
|
+
const data = await response.json();
|
|
129
|
+
const versions = data.data?.versions || data.versions || [];
|
|
130
|
+
const activeVersionId = data.data?.activeVersionId || data.activeVersionId;
|
|
131
|
+
const activeVersion = versions.find((v) => v.skillId === activeVersionId);
|
|
132
|
+
console.log(`📦 ${skill.name}`);
|
|
133
|
+
console.log(` Skill ID: ${skill.skillId}`);
|
|
134
|
+
if (activeVersion) {
|
|
135
|
+
console.log(` Deployed Version: ${activeVersion.version} ⭐`);
|
|
136
|
+
console.log(` Deployed: ${new Date(activeVersion.createdAt).toLocaleString()}`);
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
console.log(` Deployed Version: Not deployed`);
|
|
140
|
+
}
|
|
141
|
+
console.log(` Total Versions: ${versions.length}`);
|
|
142
|
+
console.log();
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
displaySkillError(skill, "Unable to fetch version info");
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
catch {
|
|
149
|
+
displaySkillError(skill, "Error loading versions");
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
console.log("=".repeat(60));
|
|
153
|
+
}
|
|
154
|
+
function displaySkillError(skill, status) {
|
|
155
|
+
console.log(`📦 ${skill.name}`);
|
|
156
|
+
console.log(` Skill ID: ${skill.skillId}`);
|
|
157
|
+
console.log(` Status: ${status}`);
|
|
158
|
+
console.log();
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* Fetches and returns sorted skill versions.
|
|
162
|
+
*/
|
|
163
|
+
async function fetchVersionsCore(context, skill) {
|
|
164
|
+
const response = await fetch(`${BASE_URLS.API}/developer/skills/${context.agentId}/${skill.skillId}/versions`, {
|
|
165
|
+
method: 'GET',
|
|
166
|
+
headers: {
|
|
167
|
+
'Authorization': `Bearer ${context.apiKey}`,
|
|
168
|
+
'Content-Type': 'application/json'
|
|
169
|
+
}
|
|
170
|
+
});
|
|
171
|
+
if (!response.ok) {
|
|
172
|
+
console.error(`❌ Failed to fetch versions: HTTP ${response.status}`);
|
|
173
|
+
return null;
|
|
174
|
+
}
|
|
175
|
+
const data = await response.json();
|
|
176
|
+
const versions = (data.data?.versions || data.versions || []).sort((a, b) => new Date(b.createdAt).getTime() - new Date(a.createdAt).getTime());
|
|
177
|
+
return { versions, activeVersionId: data.data?.activeVersionId || data.activeVersionId };
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Displays versions for a skill.
|
|
181
|
+
*/
|
|
182
|
+
function displayVersionsCore(skill, versions, activeVersionId) {
|
|
183
|
+
console.log("\n" + "=".repeat(60));
|
|
184
|
+
console.log(`📜 Versions for ${skill.name}`);
|
|
185
|
+
console.log("=".repeat(60) + "\n");
|
|
186
|
+
versions.forEach((version, index) => {
|
|
187
|
+
const isActive = version.skillId === activeVersionId;
|
|
188
|
+
console.log(`${index + 1}. Version ${version.version}${isActive ? ' ⭐ DEPLOYED' : ''}`);
|
|
189
|
+
console.log(` Created: ${new Date(version.createdAt).toLocaleString()}`);
|
|
190
|
+
console.log(` Version ID: ${version.skillId}`);
|
|
191
|
+
console.log();
|
|
192
|
+
});
|
|
193
|
+
console.log("=".repeat(60));
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Deploys a specific version of a skill.
|
|
197
|
+
*/
|
|
198
|
+
async function deployVersionCore(context, skill, version) {
|
|
199
|
+
writeProgress(`🔄 Deploying version ${version} of "${skill.name}"...`);
|
|
200
|
+
const deployResponse = await fetch(`${BASE_URLS.API}/developer/skills/${context.agentId}/${skill.skillId}/${version}/publish`, {
|
|
201
|
+
method: 'PUT',
|
|
202
|
+
headers: {
|
|
203
|
+
'Authorization': `Bearer ${context.apiKey}`,
|
|
204
|
+
'Content-Type': 'application/json'
|
|
205
|
+
}
|
|
206
|
+
});
|
|
207
|
+
if (!deployResponse.ok) {
|
|
208
|
+
const errorText = await deployResponse.text();
|
|
209
|
+
console.error(`❌ Deploy Error: ${deployResponse.status} - ${errorText}`);
|
|
210
|
+
return false;
|
|
211
|
+
}
|
|
212
|
+
writeSuccess(`✅ Version ${version} of "${skill.name}" deployed successfully`);
|
|
213
|
+
writeInfo("💡 The new version is now active for all users.");
|
|
214
|
+
return true;
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Resolves a version string to an actual version, supporting "latest".
|
|
218
|
+
*/
|
|
219
|
+
function resolveVersion(versions, versionArg) {
|
|
220
|
+
if (versionArg.toLowerCase() === 'latest') {
|
|
221
|
+
return versions[0].version;
|
|
222
|
+
}
|
|
223
|
+
const exists = versions.some((v) => v.version === versionArg);
|
|
224
|
+
if (!exists) {
|
|
225
|
+
console.error(`❌ Version "${versionArg}" not found`);
|
|
226
|
+
console.log('\nAvailable versions:');
|
|
227
|
+
versions.slice(0, 5).forEach((v) => console.log(` - ${v.version}`));
|
|
228
|
+
return null;
|
|
229
|
+
}
|
|
230
|
+
return versionArg;
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Prompts user to select a skill from a list.
|
|
234
|
+
*/
|
|
235
|
+
async function promptSkillSelection(skills, message) {
|
|
236
|
+
const answer = await safePrompt([
|
|
237
|
+
{
|
|
238
|
+
type: 'list',
|
|
239
|
+
name: 'selectedSkill',
|
|
240
|
+
message,
|
|
241
|
+
choices: skills.map((skill) => ({
|
|
242
|
+
name: `${skill.name} (${skill.skillId})`,
|
|
243
|
+
value: skill
|
|
244
|
+
}))
|
|
245
|
+
}
|
|
246
|
+
]);
|
|
247
|
+
return answer?.selectedSkill || null;
|
|
248
|
+
}
|
|
89
249
|
/**
|
|
90
|
-
*
|
|
250
|
+
* Prompts user to select a version from a list.
|
|
91
251
|
*/
|
|
92
|
-
async function
|
|
252
|
+
async function promptVersionSelection(versions, activeVersionId) {
|
|
253
|
+
const answer = await safePrompt([
|
|
254
|
+
{
|
|
255
|
+
type: 'list',
|
|
256
|
+
name: 'selectedVersion',
|
|
257
|
+
message: 'Select a version to deploy:',
|
|
258
|
+
choices: versions.map((version) => {
|
|
259
|
+
const isActive = version.skillId === activeVersionId;
|
|
260
|
+
return {
|
|
261
|
+
name: `Version ${version.version} (${new Date(version.createdAt).toLocaleDateString()})${isActive ? ' ⭐ CURRENT' : ''}`,
|
|
262
|
+
value: version
|
|
263
|
+
};
|
|
264
|
+
})
|
|
265
|
+
}
|
|
266
|
+
]);
|
|
267
|
+
return answer?.selectedVersion || null;
|
|
268
|
+
}
|
|
269
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
270
|
+
// Non-Interactive Mode
|
|
271
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
272
|
+
async function executeNonInteractive(context, config, action, options) {
|
|
273
|
+
const skills = config.skills || [];
|
|
274
|
+
// View action doesn't require skill selection
|
|
275
|
+
if (action === 'view') {
|
|
276
|
+
if (skills.length === 0) {
|
|
277
|
+
console.log("ℹ️ No skills found in configuration.");
|
|
278
|
+
return;
|
|
279
|
+
}
|
|
280
|
+
await displaySkillsCore(context, skills);
|
|
281
|
+
return;
|
|
282
|
+
}
|
|
283
|
+
// All other actions require skill selection
|
|
284
|
+
if (!options.skillName) {
|
|
285
|
+
console.error(`❌ --skill-name is required for action "${action}"`);
|
|
286
|
+
console.log(`\nUsage: lua skills ${action} --skill-name <name>`);
|
|
287
|
+
process.exit(1);
|
|
288
|
+
}
|
|
289
|
+
const selectedSkill = skills.find((s) => s.skillId === options.skillName || s.name === options.skillName);
|
|
290
|
+
if (!selectedSkill) {
|
|
291
|
+
console.error(`❌ Skill "${options.skillName}" not found`);
|
|
292
|
+
console.log('\nAvailable skills:');
|
|
293
|
+
skills.forEach((s) => console.log(` - ${s.name} (${s.skillId})`));
|
|
294
|
+
process.exit(1);
|
|
295
|
+
}
|
|
296
|
+
switch (action) {
|
|
297
|
+
case 'versions': {
|
|
298
|
+
const data = await fetchVersionsCore(context, selectedSkill);
|
|
299
|
+
if (!data)
|
|
300
|
+
process.exit(1);
|
|
301
|
+
if (data.versions.length === 0) {
|
|
302
|
+
console.log(`ℹ️ No versions found for ${selectedSkill.name}.`);
|
|
303
|
+
console.log("💡 Push a version first using 'lua push skill'.");
|
|
304
|
+
return;
|
|
305
|
+
}
|
|
306
|
+
displayVersionsCore(selectedSkill, data.versions, data.activeVersionId);
|
|
307
|
+
break;
|
|
308
|
+
}
|
|
309
|
+
case 'deploy': {
|
|
310
|
+
if (!options.skillVersion) {
|
|
311
|
+
console.error('❌ --skill-version is required for deploy action');
|
|
312
|
+
console.log('\nUsage: lua skills deploy --skill-name mySkill --skill-version 1.0.3');
|
|
313
|
+
console.log(' lua skills deploy -i mySkill -v latest');
|
|
314
|
+
process.exit(1);
|
|
315
|
+
}
|
|
316
|
+
const data = await fetchVersionsCore(context, selectedSkill);
|
|
317
|
+
if (!data)
|
|
318
|
+
process.exit(1);
|
|
319
|
+
if (data.versions.length === 0) {
|
|
320
|
+
console.error(`❌ No versions found for ${selectedSkill.name}.`);
|
|
321
|
+
console.log("💡 Push a version first using 'lua push skill'.");
|
|
322
|
+
process.exit(1);
|
|
323
|
+
}
|
|
324
|
+
const resolvedVersion = resolveVersion(data.versions, options.skillVersion);
|
|
325
|
+
if (!resolvedVersion)
|
|
326
|
+
process.exit(1);
|
|
327
|
+
const success = await deployVersionCore(context, selectedSkill, resolvedVersion);
|
|
328
|
+
if (!success)
|
|
329
|
+
process.exit(1);
|
|
330
|
+
break;
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
335
|
+
// Interactive Mode
|
|
336
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
337
|
+
async function manageSandboxSkillsInteractive(context, config) {
|
|
93
338
|
let continueManaging = true;
|
|
94
339
|
while (continueManaging) {
|
|
95
340
|
console.log("\n" + "=".repeat(60));
|
|
@@ -127,7 +372,6 @@ async function manageSandboxSkills(context, config) {
|
|
|
127
372
|
const { action } = actionAnswer;
|
|
128
373
|
switch (action) {
|
|
129
374
|
case 'refresh':
|
|
130
|
-
// Reload config
|
|
131
375
|
const newConfig = readSkillConfig();
|
|
132
376
|
config.skills = newConfig.skills;
|
|
133
377
|
break;
|
|
@@ -146,10 +390,7 @@ async function manageSandboxSkills(context, config) {
|
|
|
146
390
|
}
|
|
147
391
|
}
|
|
148
392
|
}
|
|
149
|
-
|
|
150
|
-
* Manage production skills - view and deploy versions
|
|
151
|
-
*/
|
|
152
|
-
async function manageProductionSkills(context, config) {
|
|
393
|
+
async function manageProductionSkillsInteractive(context, config) {
|
|
153
394
|
let continueManaging = true;
|
|
154
395
|
while (continueManaging) {
|
|
155
396
|
console.log("\n" + "=".repeat(60));
|
|
@@ -173,13 +414,13 @@ async function manageProductionSkills(context, config) {
|
|
|
173
414
|
const { action } = actionAnswer;
|
|
174
415
|
switch (action) {
|
|
175
416
|
case 'view':
|
|
176
|
-
await
|
|
417
|
+
await viewSkillsInteractive(context, config);
|
|
177
418
|
break;
|
|
178
419
|
case 'versions':
|
|
179
|
-
await
|
|
420
|
+
await viewVersionsInteractive(context, config);
|
|
180
421
|
break;
|
|
181
422
|
case 'deploy':
|
|
182
|
-
await
|
|
423
|
+
await deployVersionInteractive(context, config);
|
|
183
424
|
break;
|
|
184
425
|
case 'exit':
|
|
185
426
|
continueManaging = false;
|
|
@@ -188,251 +429,87 @@ async function manageProductionSkills(context, config) {
|
|
|
188
429
|
}
|
|
189
430
|
}
|
|
190
431
|
}
|
|
191
|
-
|
|
192
|
-
* View deployed skills in production
|
|
193
|
-
*/
|
|
194
|
-
async function viewDeployedSkills(context, config) {
|
|
432
|
+
async function viewSkillsInteractive(context, config) {
|
|
195
433
|
writeProgress("🔄 Loading skill information...");
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
console.log("\nℹ️ No skills found in configuration.\n");
|
|
200
|
-
await safePrompt([{ type: 'input', name: 'continue', message: 'Press Enter to continue...' }]);
|
|
201
|
-
return;
|
|
202
|
-
}
|
|
203
|
-
console.log("\n" + "=".repeat(60));
|
|
204
|
-
console.log("⚙️ Production Skills");
|
|
205
|
-
console.log("=".repeat(60) + "\n");
|
|
206
|
-
// Fetch version info for each skill
|
|
207
|
-
for (const skill of skills) {
|
|
208
|
-
try {
|
|
209
|
-
const response = await fetch(`${BASE_URLS.API}/developer/skills/${context.agentId}/${skill.skillId}/versions`, {
|
|
210
|
-
method: 'GET',
|
|
211
|
-
headers: {
|
|
212
|
-
'Authorization': `Bearer ${context.apiKey}`,
|
|
213
|
-
'Content-Type': 'application/json'
|
|
214
|
-
}
|
|
215
|
-
});
|
|
216
|
-
if (response.ok) {
|
|
217
|
-
const data = await response.json();
|
|
218
|
-
const versions = data.data?.versions || data.versions || [];
|
|
219
|
-
const activeVersionId = data.data?.activeVersionId || data.activeVersionId;
|
|
220
|
-
// Find active version
|
|
221
|
-
const activeVersion = versions.find((v) => v.skillId === activeVersionId);
|
|
222
|
-
console.log(`📦 ${skill.name}`);
|
|
223
|
-
console.log(` Skill ID: ${skill.skillId}`);
|
|
224
|
-
if (activeVersion) {
|
|
225
|
-
console.log(` Deployed Version: ${activeVersion.version} ⭐`);
|
|
226
|
-
const date = new Date(activeVersion.createdAt);
|
|
227
|
-
console.log(` Deployed: ${date.toLocaleString()}`);
|
|
228
|
-
}
|
|
229
|
-
else {
|
|
230
|
-
console.log(` Deployed Version: Not deployed`);
|
|
231
|
-
}
|
|
232
|
-
console.log(` Total Versions: ${versions.length}`);
|
|
233
|
-
console.log();
|
|
234
|
-
}
|
|
235
|
-
else {
|
|
236
|
-
console.log(`📦 ${skill.name}`);
|
|
237
|
-
console.log(` Skill ID: ${skill.skillId}`);
|
|
238
|
-
console.log(` Status: Unable to fetch version info`);
|
|
239
|
-
console.log();
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
catch (error) {
|
|
243
|
-
console.log(`📦 ${skill.name}`);
|
|
244
|
-
console.log(` Skill ID: ${skill.skillId}`);
|
|
245
|
-
console.log(` Status: Error loading versions`);
|
|
246
|
-
console.log();
|
|
247
|
-
}
|
|
248
|
-
}
|
|
249
|
-
console.log("=".repeat(60) + "\n");
|
|
250
|
-
await safePrompt([{ type: 'input', name: 'continue', message: 'Press Enter to continue...' }]);
|
|
434
|
+
const skills = config.skills || [];
|
|
435
|
+
if (skills.length === 0) {
|
|
436
|
+
console.log("\nℹ️ No skills found in configuration.\n");
|
|
251
437
|
}
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
438
|
+
else {
|
|
439
|
+
await displaySkillsCore(context, skills);
|
|
440
|
+
console.log();
|
|
255
441
|
}
|
|
442
|
+
await safePrompt([{ type: 'input', name: 'continue', message: 'Press Enter to continue...' }]);
|
|
256
443
|
}
|
|
257
|
-
|
|
258
|
-
* View versions for a specific skill
|
|
259
|
-
*/
|
|
260
|
-
async function viewSkillVersions(context, config) {
|
|
444
|
+
async function viewVersionsInteractive(context, config) {
|
|
261
445
|
const skills = config.skills || [];
|
|
262
446
|
if (skills.length === 0) {
|
|
263
447
|
console.log("\nℹ️ No skills found in configuration.\n");
|
|
264
448
|
await safePrompt([{ type: 'input', name: 'continue', message: 'Press Enter to continue...' }]);
|
|
265
449
|
return;
|
|
266
450
|
}
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
{
|
|
270
|
-
type: 'list',
|
|
271
|
-
name: 'selectedSkill',
|
|
272
|
-
message: 'Select a skill to view versions:',
|
|
273
|
-
choices: skills.map((skill) => ({
|
|
274
|
-
name: `${skill.name} (${skill.skillId})`,
|
|
275
|
-
value: skill
|
|
276
|
-
}))
|
|
277
|
-
}
|
|
278
|
-
]);
|
|
279
|
-
if (!skillAnswer)
|
|
451
|
+
const selectedSkill = await promptSkillSelection(skills, 'Select a skill to view versions:');
|
|
452
|
+
if (!selectedSkill)
|
|
280
453
|
return;
|
|
281
|
-
const selectedSkill = skillAnswer.selectedSkill;
|
|
282
454
|
writeProgress(`🔄 Loading versions for ${selectedSkill.name}...`);
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
method: 'GET',
|
|
286
|
-
headers: {
|
|
287
|
-
'Authorization': `Bearer ${context.apiKey}`,
|
|
288
|
-
'Content-Type': 'application/json'
|
|
289
|
-
}
|
|
290
|
-
});
|
|
291
|
-
if (!response.ok) {
|
|
292
|
-
throw new Error(`HTTP error! status: ${response.status}`);
|
|
293
|
-
}
|
|
294
|
-
const data = await response.json();
|
|
295
|
-
const versions = data.data?.versions || data.versions || [];
|
|
296
|
-
const activeVersionId = data.data?.activeVersionId || data.activeVersionId;
|
|
297
|
-
if (versions.length === 0) {
|
|
298
|
-
console.log(`\nℹ️ No versions found for ${selectedSkill.name}.\n`);
|
|
299
|
-
console.log("💡 Push a version first using 'lua push skill'.\n");
|
|
300
|
-
await safePrompt([{ type: 'input', name: 'continue', message: 'Press Enter to continue...' }]);
|
|
301
|
-
return;
|
|
302
|
-
}
|
|
303
|
-
console.log("\n" + "=".repeat(60));
|
|
304
|
-
console.log(`📜 Versions for ${selectedSkill.name}`);
|
|
305
|
-
console.log("=".repeat(60) + "\n");
|
|
306
|
-
// Sort versions by date (newest first)
|
|
307
|
-
const sortedVersions = versions.sort((a, b) => {
|
|
308
|
-
const dateA = new Date(a.createdAt).getTime();
|
|
309
|
-
const dateB = new Date(b.createdAt).getTime();
|
|
310
|
-
return dateB - dateA;
|
|
311
|
-
});
|
|
312
|
-
sortedVersions.forEach((version, index) => {
|
|
313
|
-
const isActive = version.skillId === activeVersionId;
|
|
314
|
-
const date = new Date(version.createdAt);
|
|
315
|
-
console.log(`${index + 1}. Version ${version.version}${isActive ? ' ⭐ DEPLOYED' : ''}`);
|
|
316
|
-
console.log(` Created: ${date.toLocaleString()}`);
|
|
317
|
-
console.log(` Version ID: ${version.skillId}`);
|
|
318
|
-
console.log();
|
|
319
|
-
});
|
|
320
|
-
console.log("=".repeat(60) + "\n");
|
|
455
|
+
const data = await fetchVersionsCore(context, selectedSkill);
|
|
456
|
+
if (!data) {
|
|
321
457
|
await safePrompt([{ type: 'input', name: 'continue', message: 'Press Enter to continue...' }]);
|
|
458
|
+
return;
|
|
322
459
|
}
|
|
323
|
-
|
|
324
|
-
console.
|
|
325
|
-
|
|
460
|
+
if (data.versions.length === 0) {
|
|
461
|
+
console.log(`\nℹ️ No versions found for ${selectedSkill.name}.\n`);
|
|
462
|
+
console.log("💡 Push a version first using 'lua push skill'.\n");
|
|
326
463
|
}
|
|
464
|
+
else {
|
|
465
|
+
displayVersionsCore(selectedSkill, data.versions, data.activeVersionId);
|
|
466
|
+
console.log();
|
|
467
|
+
}
|
|
468
|
+
await safePrompt([{ type: 'input', name: 'continue', message: 'Press Enter to continue...' }]);
|
|
327
469
|
}
|
|
328
|
-
|
|
329
|
-
* Deploy a skill version to production
|
|
330
|
-
*/
|
|
331
|
-
async function deploySkillVersion(context, config) {
|
|
470
|
+
async function deployVersionInteractive(context, config) {
|
|
332
471
|
const skills = config.skills || [];
|
|
333
472
|
if (skills.length === 0) {
|
|
334
473
|
console.log("\nℹ️ No skills found in configuration.\n");
|
|
335
474
|
await safePrompt([{ type: 'input', name: 'continue', message: 'Press Enter to continue...' }]);
|
|
336
475
|
return;
|
|
337
476
|
}
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
{
|
|
341
|
-
type: 'list',
|
|
342
|
-
name: 'selectedSkill',
|
|
343
|
-
message: 'Select a skill to deploy:',
|
|
344
|
-
choices: skills.map((skill) => ({
|
|
345
|
-
name: `${skill.name} (${skill.skillId})`,
|
|
346
|
-
value: skill
|
|
347
|
-
}))
|
|
348
|
-
}
|
|
349
|
-
]);
|
|
350
|
-
if (!skillAnswer)
|
|
477
|
+
const selectedSkill = await promptSkillSelection(skills, 'Select a skill to deploy:');
|
|
478
|
+
if (!selectedSkill)
|
|
351
479
|
return;
|
|
352
|
-
const selectedSkill = skillAnswer.selectedSkill;
|
|
353
480
|
writeProgress(`🔄 Loading versions for ${selectedSkill.name}...`);
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
method: 'GET',
|
|
357
|
-
headers: {
|
|
358
|
-
'Authorization': `Bearer ${context.apiKey}`,
|
|
359
|
-
'Content-Type': 'application/json'
|
|
360
|
-
}
|
|
361
|
-
});
|
|
362
|
-
if (!response.ok) {
|
|
363
|
-
throw new Error(`HTTP error! status: ${response.status}`);
|
|
364
|
-
}
|
|
365
|
-
const data = await response.json();
|
|
366
|
-
const versions = data.data?.versions || data.versions || [];
|
|
367
|
-
const activeVersionId = data.data?.activeVersionId || data.activeVersionId;
|
|
368
|
-
if (versions.length === 0) {
|
|
369
|
-
console.log(`\nℹ️ No versions found for ${selectedSkill.name}.\n`);
|
|
370
|
-
console.log("💡 Push a version first using 'lua push skill'.\n");
|
|
371
|
-
await safePrompt([{ type: 'input', name: 'continue', message: 'Press Enter to continue...' }]);
|
|
372
|
-
return;
|
|
373
|
-
}
|
|
374
|
-
// Sort versions by date (newest first)
|
|
375
|
-
const sortedVersions = versions.sort((a, b) => {
|
|
376
|
-
const dateA = new Date(a.createdAt).getTime();
|
|
377
|
-
const dateB = new Date(b.createdAt).getTime();
|
|
378
|
-
return dateB - dateA;
|
|
379
|
-
});
|
|
380
|
-
// Prompt to select a version
|
|
381
|
-
const versionAnswer = await safePrompt([
|
|
382
|
-
{
|
|
383
|
-
type: 'list',
|
|
384
|
-
name: 'selectedVersion',
|
|
385
|
-
message: 'Select a version to deploy:',
|
|
386
|
-
choices: sortedVersions.map((version) => {
|
|
387
|
-
const isActive = version.skillId === activeVersionId;
|
|
388
|
-
const date = new Date(version.createdAt);
|
|
389
|
-
return {
|
|
390
|
-
name: `Version ${version.version} (${date.toLocaleDateString()})${isActive ? ' ⭐ CURRENT' : ''}`,
|
|
391
|
-
value: version
|
|
392
|
-
};
|
|
393
|
-
})
|
|
394
|
-
}
|
|
395
|
-
]);
|
|
396
|
-
if (!versionAnswer)
|
|
397
|
-
return;
|
|
398
|
-
const selectedVersion = versionAnswer.selectedVersion;
|
|
399
|
-
// Show warning
|
|
400
|
-
console.log("\n⚠️ WARNING: You are about to deploy to PRODUCTION!");
|
|
401
|
-
console.log("⚠️ This will affect ALL users immediately.\n");
|
|
402
|
-
console.log(`Skill: ${selectedSkill.name}`);
|
|
403
|
-
console.log(`Version: ${selectedVersion.version}\n`);
|
|
404
|
-
const confirmAnswer = await safePrompt([
|
|
405
|
-
{
|
|
406
|
-
type: 'confirm',
|
|
407
|
-
name: 'confirm',
|
|
408
|
-
message: 'Are you absolutely sure you want to deploy this version?',
|
|
409
|
-
default: false
|
|
410
|
-
}
|
|
411
|
-
]);
|
|
412
|
-
if (!confirmAnswer || !confirmAnswer.confirm) {
|
|
413
|
-
console.log("\n❌ Deployment cancelled.\n");
|
|
414
|
-
return;
|
|
415
|
-
}
|
|
416
|
-
writeProgress("🔄 Deploying version...");
|
|
417
|
-
const deployResponse = await fetch(`${BASE_URLS.API}/developer/skills/${context.agentId}/${selectedSkill.skillId}/${selectedVersion.version}/publish`, {
|
|
418
|
-
method: 'POST',
|
|
419
|
-
headers: {
|
|
420
|
-
'Authorization': `Bearer ${context.apiKey}`,
|
|
421
|
-
'Content-Type': 'application/json'
|
|
422
|
-
},
|
|
423
|
-
body: JSON.stringify({})
|
|
424
|
-
});
|
|
425
|
-
if (!deployResponse.ok) {
|
|
426
|
-
const errorText = await deployResponse.text();
|
|
427
|
-
console.error(`\n❌ Deploy Error: ${deployResponse.status} - ${errorText}\n`);
|
|
428
|
-
throw new Error(`HTTP error! status: ${deployResponse.status}`);
|
|
429
|
-
}
|
|
430
|
-
writeSuccess(`\n✅ Version ${selectedVersion.version} of "${selectedSkill.name}" deployed successfully to production\n`);
|
|
431
|
-
writeInfo("💡 The new version is now active for all users.");
|
|
481
|
+
const data = await fetchVersionsCore(context, selectedSkill);
|
|
482
|
+
if (!data) {
|
|
432
483
|
await safePrompt([{ type: 'input', name: 'continue', message: 'Press Enter to continue...' }]);
|
|
484
|
+
return;
|
|
433
485
|
}
|
|
434
|
-
|
|
435
|
-
console.
|
|
486
|
+
if (data.versions.length === 0) {
|
|
487
|
+
console.log(`\nℹ️ No versions found for ${selectedSkill.name}.\n`);
|
|
488
|
+
console.log("💡 Push a version first using 'lua push skill'.\n");
|
|
436
489
|
await safePrompt([{ type: 'input', name: 'continue', message: 'Press Enter to continue...' }]);
|
|
490
|
+
return;
|
|
491
|
+
}
|
|
492
|
+
const selectedVersion = await promptVersionSelection(data.versions, data.activeVersionId);
|
|
493
|
+
if (!selectedVersion)
|
|
494
|
+
return;
|
|
495
|
+
// Show warning and confirm
|
|
496
|
+
console.log("\n⚠️ WARNING: You are about to deploy to PRODUCTION!");
|
|
497
|
+
console.log("⚠️ This will affect ALL users immediately.\n");
|
|
498
|
+
console.log(`Skill: ${selectedSkill.name}`);
|
|
499
|
+
console.log(`Version: ${selectedVersion.version}\n`);
|
|
500
|
+
const confirmAnswer = await safePrompt([
|
|
501
|
+
{
|
|
502
|
+
type: 'confirm',
|
|
503
|
+
name: 'confirm',
|
|
504
|
+
message: 'Are you absolutely sure you want to deploy this version?',
|
|
505
|
+
default: false
|
|
506
|
+
}
|
|
507
|
+
]);
|
|
508
|
+
if (!confirmAnswer || !confirmAnswer.confirm) {
|
|
509
|
+
console.log("\n❌ Deployment cancelled.\n");
|
|
510
|
+
return;
|
|
437
511
|
}
|
|
512
|
+
await deployVersionCore(context, selectedSkill, selectedVersion.version);
|
|
513
|
+
await safePrompt([{ type: 'input', name: 'continue', message: 'Press Enter to continue...' }]);
|
|
438
514
|
}
|
|
515
|
+
//# sourceMappingURL=skills.js.map
|