@vwork/cli 0.1.3 → 0.1.4

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/codegen.js CHANGED
@@ -36,16 +36,32 @@ export async function runCodegenCommand(command, client, config) {
36
36
  const bindingNames = arrayFlag(command.flags.binding);
37
37
  const sourceCode = stringFlag(command.flags["source-code"]);
38
38
  const draftInvoke = draftInvokeInput(command);
39
- return {
40
- value: await client.request("POST", `${appPath}/functions/${encodeURIComponent(functionName)}/codegen`, {
41
- prompt,
42
- auth_required: command.flags["no-auth"] === true ? false : true,
43
- ...(bindingNames.length > 0 ? { binding_names: bindingNames } : {}),
44
- ...(sourceCode ? { source_code: sourceCode } : {}),
45
- ...(command.flags.repair === true ? { repair: { enabled: true, max_attempts: 2 } } : {}),
46
- ...(draftInvoke ? { draft_invoke: draftInvoke } : {})
47
- })
39
+ const session = await client.request("POST", `${appPath}/codegen-sessions`, {
40
+ target: `workerd_function:${functionName}`,
41
+ title: `${functionName} codegen`,
42
+ description: prompt
43
+ });
44
+ const requestBody = {
45
+ session_id: String(session.id),
46
+ prompt,
47
+ auth_required: command.flags["no-auth"] === true ? false : true,
48
+ ...(bindingNames.length > 0 ? { binding_names: bindingNames } : {}),
49
+ ...(sourceCode ? { source_code: sourceCode } : {}),
50
+ ...(command.flags.repair === true ? { repair: { enabled: true, max_attempts: 2 } } : {}),
51
+ ...(draftInvoke ? { draft_invoke: draftInvoke } : {})
48
52
  };
53
+ try {
54
+ return {
55
+ value: await client.request("POST", `${appPath}/functions/${encodeURIComponent(functionName)}/codegen`, requestBody)
56
+ };
57
+ }
58
+ catch (error) {
59
+ if (!isGatewayTimeout(error))
60
+ throw error;
61
+ return {
62
+ value: await waitForCodegenSessionRun(client, appPath, String(session.id))
63
+ };
64
+ }
49
65
  }
50
66
  if (group === "runs" && action === "list") {
51
67
  const body = await client.request("GET", `${appPath}/code-generations`);
@@ -100,7 +116,8 @@ function draftInvokeInput(command) {
100
116
  return {
101
117
  enabled: true,
102
118
  ...(body ? { body } : {}),
103
- ...(bindings ? { bindings } : {})
119
+ ...(bindings ? { bindings } : {}),
120
+ response_contract: "vwork_function_output_v1"
104
121
  };
105
122
  }
106
123
  function optionalJsonObjectFlag(command, key) {
@@ -113,6 +130,24 @@ function optionalJsonObjectFlag(command, key) {
113
130
  }
114
131
  return parsed;
115
132
  }
133
+ async function waitForCodegenSessionRun(client, appPath, sessionId) {
134
+ const deadline = Date.now() + 180_000;
135
+ let lastRuns = [];
136
+ do {
137
+ const body = await client.request("GET", `${appPath}/codegen-sessions/${encodeURIComponent(sessionId)}/runs`);
138
+ lastRuns = body.code_generations;
139
+ if (lastRuns.length > 0)
140
+ return lastRuns[0];
141
+ await sleep(3_000);
142
+ } while (Date.now() < deadline);
143
+ throw new Error(`Timed out waiting for codegen run in session ${sessionId}`);
144
+ }
145
+ function isGatewayTimeout(error) {
146
+ return Boolean(error && typeof error === "object" && "status" in error && error.status === 524);
147
+ }
148
+ function sleep(ms) {
149
+ return new Promise((resolve) => setTimeout(resolve, ms));
150
+ }
116
151
  function mcpConfigSnippet(command, config) {
117
152
  const workspace = stringFlag(command.flags.workspace) ?? process.cwd();
118
153
  const appId = stringFlag(command.flags.app) ?? config.appId;
package/dist/index.js CHANGED
@@ -1,4 +1,6 @@
1
1
  #!/usr/bin/env node
2
+ import { realpathSync } from "node:fs";
3
+ import { resolve } from "node:path";
2
4
  import { fileURLToPath } from "node:url";
3
5
  import { runOclifCli } from "./oclif-command.js";
4
6
  export async function runCli(argv, env, cwd) {
@@ -8,10 +10,21 @@ export async function runCli(argv, env, cwd) {
8
10
  export function isDirectCliEntrypoint(moduleUrl, argvPath) {
9
11
  if (!argvPath)
10
12
  return false;
11
- return normalizePath(fileURLToPath(moduleUrl)) === normalizePath(argvPath);
13
+ const argvPaths = new Set(candidatePaths(argvPath));
14
+ return candidatePaths(fileURLToPath(moduleUrl)).some((candidate) => argvPaths.has(candidate));
12
15
  }
13
16
  function normalizePath(value) {
14
- return value.replace(/\\/g, "/");
17
+ return resolve(value).replace(/\\/g, "/").toLowerCase();
18
+ }
19
+ function candidatePaths(value) {
20
+ const paths = new Set([normalizePath(value)]);
21
+ try {
22
+ paths.add(normalizePath(realpathSync.native(value)));
23
+ }
24
+ catch {
25
+ // Keep the direct normalized path when realpath cannot resolve.
26
+ }
27
+ return [...paths];
15
28
  }
16
29
  function withRuntime(env, cwd, run) {
17
30
  const originalEnv = process.env;
package/package.json CHANGED
@@ -1,31 +1,31 @@
1
- {
2
- "name": "@vwork/cli",
3
- "version": "0.1.3",
4
- "type": "module",
5
- "files": [
6
- "dist/*.js",
7
- "dist/auth/*.js",
8
- "package.json"
9
- ],
10
- "publishConfig": {
11
- "registry": "https://registry.npmjs.org/"
12
- },
13
- "bin": {
14
- "vwork": "dist/index.js"
15
- },
16
- "dependencies": {
17
- "@oclif/core": "^4.11.7",
1
+ {
2
+ "name": "@vwork/cli",
3
+ "version": "0.1.4",
4
+ "type": "module",
5
+ "files": [
6
+ "dist/*.js",
7
+ "dist/auth/*.js",
8
+ "package.json"
9
+ ],
10
+ "publishConfig": {
11
+ "registry": "https://registry.npmjs.org/"
12
+ },
13
+ "bin": {
14
+ "vwork": "dist/index.js"
15
+ },
16
+ "scripts": {
17
+ "dev": "tsx src/index.ts",
18
+ "build": "tsc -p tsconfig.json",
19
+ "test": "pnpm --filter @vwork/platform-client build && tsx --test src/test/*.test.ts",
20
+ "typecheck": "pnpm --filter @vwork/platform-client build && tsc -p tsconfig.json --noEmit"
21
+ },
22
+ "dependencies": {
23
+ "@oclif/core": "^4.11.7",
18
24
  "@vwork/platform-client": "^0.1.0"
19
- },
20
- "devDependencies": {
21
- "@types/node": "^22.10.2",
22
- "tsx": "^4.19.2",
23
- "typescript": "^5.7.2"
24
- },
25
- "scripts": {
26
- "dev": "tsx src/index.ts",
27
- "build": "tsc -p tsconfig.json",
28
- "test": "pnpm --filter @vwork/platform-client build && tsx --test src/test/*.test.ts",
29
- "typecheck": "pnpm --filter @vwork/platform-client build && tsc -p tsconfig.json --noEmit"
30
- }
31
- }
25
+ },
26
+ "devDependencies": {
27
+ "@types/node": "^22.10.2",
28
+ "tsx": "^4.19.2",
29
+ "typescript": "^5.7.2"
30
+ }
31
+ }