@rigkit/provider-vscode 0.2.1 → 0.2.3
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/extension.cjs +155 -59
- package/package.json +2 -2
- package/src/extension.ts +2 -24
- package/src/input.test.ts +1 -6
- package/src/version.ts +1 -1
package/dist/extension.cjs
CHANGED
|
@@ -30126,6 +30126,7 @@ function runtimeClientSchema(schema2) {
|
|
|
30126
30126
|
}
|
|
30127
30127
|
var RuntimeHandleEffectSchema = exports_Schema.Struct({
|
|
30128
30128
|
projectId: exports_Schema.String,
|
|
30129
|
+
runtimeFingerprint: exports_Schema.optional(exports_Schema.String),
|
|
30129
30130
|
projectDir: exports_Schema.String,
|
|
30130
30131
|
configPath: exports_Schema.String,
|
|
30131
30132
|
statePath: exports_Schema.optional(exports_Schema.String),
|
|
@@ -30145,6 +30146,7 @@ var RuntimeReadyEffectSchema = exports_Schema.Struct({
|
|
|
30145
30146
|
var RuntimeHealthEffectSchema = exports_Schema.Struct({
|
|
30146
30147
|
ok: exports_Schema.Boolean,
|
|
30147
30148
|
projectId: exports_Schema.String,
|
|
30149
|
+
runtimeFingerprint: exports_Schema.optional(exports_Schema.String),
|
|
30148
30150
|
projectDir: exports_Schema.optional(exports_Schema.String),
|
|
30149
30151
|
configPath: exports_Schema.optional(exports_Schema.String),
|
|
30150
30152
|
statePath: exports_Schema.optional(exports_Schema.String),
|
|
@@ -30175,6 +30177,7 @@ var OptionalString = exports_Schema.optional(exports_Schema.String);
|
|
|
30175
30177
|
var RuntimeControlHealthEffectSchema = exports_Schema.Struct({
|
|
30176
30178
|
ok: exports_Schema.Boolean,
|
|
30177
30179
|
projectId: exports_Schema.String,
|
|
30180
|
+
runtimeFingerprint: OptionalString,
|
|
30178
30181
|
projectDir: exports_Schema.String,
|
|
30179
30182
|
configPath: exports_Schema.String,
|
|
30180
30183
|
statePath: OptionalString,
|
|
@@ -30202,14 +30205,6 @@ var RuntimeControlProjectInfoEffectSchema = exports_Schema.Struct({
|
|
|
30202
30205
|
workflow: exports_Schema.optional(RuntimeControlWorkflowSummaryEffectSchema),
|
|
30203
30206
|
workflows: exports_Schema.Array(RuntimeControlWorkflowSummaryEffectSchema)
|
|
30204
30207
|
}).annotations({ identifier: "ProjectInfo" });
|
|
30205
|
-
var RuntimeControlHostMethodRequirementEffectSchema = exports_Schema.Struct({
|
|
30206
|
-
id: exports_Schema.String,
|
|
30207
|
-
modes: exports_Schema.optional(exports_Schema.Array(exports_Schema.String))
|
|
30208
|
-
}).annotations({ identifier: "HostMethodRequirement" });
|
|
30209
|
-
var RuntimeControlHostCapabilityRequirementEffectSchema = exports_Schema.Struct({
|
|
30210
|
-
id: exports_Schema.String,
|
|
30211
|
-
schemaHash: OptionalString
|
|
30212
|
-
}).annotations({ identifier: "HostCapabilityRequirement" });
|
|
30213
30208
|
var RuntimeControlOperationCliEffectSchema = exports_Schema.Struct({
|
|
30214
30209
|
positionals: exports_Schema.optional(exports_Schema.Array(exports_Schema.Struct({
|
|
30215
30210
|
name: exports_Schema.String,
|
|
@@ -30232,21 +30227,12 @@ var RuntimeControlOperationEffectSchema = exports_Schema.Struct({
|
|
|
30232
30227
|
title: exports_Schema.String,
|
|
30233
30228
|
description: exports_Schema.String,
|
|
30234
30229
|
createsWorkspace: exports_Schema.optional(exports_Schema.Boolean),
|
|
30235
|
-
requiredHostMethods: exports_Schema.optional(exports_Schema.Array(RuntimeControlHostMethodRequirementEffectSchema)),
|
|
30236
|
-
requiredHostCapabilities: exports_Schema.optional(exports_Schema.Array(RuntimeControlHostCapabilityRequirementEffectSchema)),
|
|
30237
30230
|
cli: exports_Schema.optional(RuntimeControlOperationCliEffectSchema),
|
|
30238
30231
|
inputSchema: UnknownRecord
|
|
30239
30232
|
}).annotations({ identifier: "RuntimeOperation" });
|
|
30240
30233
|
var RuntimeControlOperationsManifestEffectSchema = exports_Schema.Struct({
|
|
30241
|
-
|
|
30242
|
-
|
|
30243
|
-
requiredByOperations: exports_Schema.Record({ key: exports_Schema.String, value: exports_Schema.Array(exports_Schema.String) })
|
|
30244
|
-
}),
|
|
30245
|
-
hostCapabilities: exports_Schema.Struct({
|
|
30246
|
-
optional: exports_Schema.Array(RuntimeControlHostCapabilityRequirementEffectSchema),
|
|
30247
|
-
requiredByOperations: exports_Schema.Record({ key: exports_Schema.String, value: exports_Schema.Array(exports_Schema.String) })
|
|
30248
|
-
}),
|
|
30249
|
-
operations: exports_Schema.Array(RuntimeControlOperationEffectSchema)
|
|
30234
|
+
operations: exports_Schema.Array(RuntimeControlOperationEffectSchema),
|
|
30235
|
+
workspaceOperations: exports_Schema.Array(RuntimeControlOperationEffectSchema)
|
|
30250
30236
|
}).annotations({ identifier: "OperationsManifest" });
|
|
30251
30237
|
var RuntimeControlWorkflowsResponseEffectSchema = exports_Schema.Struct({
|
|
30252
30238
|
workflows: exports_Schema.Array(RuntimeControlWorkflowSummaryEffectSchema)
|
|
@@ -30254,14 +30240,8 @@ var RuntimeControlWorkflowsResponseEffectSchema = exports_Schema.Struct({
|
|
|
30254
30240
|
var RuntimeControlWorkspaceEffectSchema = exports_Schema.Struct({
|
|
30255
30241
|
id: exports_Schema.String,
|
|
30256
30242
|
name: exports_Schema.String,
|
|
30257
|
-
providerId: exports_Schema.String,
|
|
30258
30243
|
workflow: exports_Schema.String,
|
|
30259
|
-
|
|
30260
|
-
snapshotId: OptionalString,
|
|
30261
|
-
sourceRef: exports_Schema.Unknown,
|
|
30262
|
-
context: UnknownRecord,
|
|
30263
|
-
metadata: UnknownRecord,
|
|
30264
|
-
data: UnknownRecord,
|
|
30244
|
+
ctx: UnknownRecord,
|
|
30265
30245
|
createdAt: exports_Schema.String,
|
|
30266
30246
|
updatedAt: exports_Schema.String
|
|
30267
30247
|
}).annotations({ identifier: "Workspace" });
|
|
@@ -30549,12 +30529,18 @@ async function getOrStartRuntimeUnsafe(options7) {
|
|
|
30549
30529
|
statePath,
|
|
30550
30530
|
source: options7.source
|
|
30551
30531
|
});
|
|
30532
|
+
const runtimeFingerprint = runtimeFingerprintFor({
|
|
30533
|
+
projectDir,
|
|
30534
|
+
configPath,
|
|
30535
|
+
statePath,
|
|
30536
|
+
source: options7.source
|
|
30537
|
+
});
|
|
30552
30538
|
const paths = runtimePaths(projectId, options7.rigkitHome);
|
|
30553
|
-
const existing = await tryExistingRuntime(paths, projectId);
|
|
30539
|
+
const existing = await tryExistingRuntime(paths, projectId, runtimeFingerprint);
|
|
30554
30540
|
if (existing)
|
|
30555
30541
|
return existing;
|
|
30556
30542
|
await withRuntimeLock(paths.lockPath, async () => {
|
|
30557
|
-
const secondCheck = await tryExistingRuntime(paths, projectId);
|
|
30543
|
+
const secondCheck = await tryExistingRuntime(paths, projectId, runtimeFingerprint);
|
|
30558
30544
|
if (secondCheck)
|
|
30559
30545
|
return;
|
|
30560
30546
|
await startRuntime({
|
|
@@ -30563,10 +30549,11 @@ async function getOrStartRuntimeUnsafe(options7) {
|
|
|
30563
30549
|
configPath,
|
|
30564
30550
|
statePath,
|
|
30565
30551
|
projectId,
|
|
30552
|
+
runtimeFingerprint,
|
|
30566
30553
|
paths
|
|
30567
30554
|
});
|
|
30568
30555
|
});
|
|
30569
|
-
const started = await tryExistingRuntime(paths, projectId);
|
|
30556
|
+
const started = await tryExistingRuntime(paths, projectId, runtimeFingerprint);
|
|
30570
30557
|
if (!started) {
|
|
30571
30558
|
throw new RuntimeStartupError({
|
|
30572
30559
|
reason: "unhealthy-after-start",
|
|
@@ -30582,12 +30569,33 @@ function projectIdFor(options7) {
|
|
|
30582
30569
|
hash2.update(JSON.stringify({
|
|
30583
30570
|
projectDir: import_node_path.resolve(options7.projectDir),
|
|
30584
30571
|
configPath,
|
|
30585
|
-
configHash: configHashFor(configPath),
|
|
30586
30572
|
statePath: options7.statePath ? import_node_path.resolve(options7.statePath) : null,
|
|
30587
30573
|
source: options7.source ?? null
|
|
30588
30574
|
}));
|
|
30589
30575
|
return `sha256-${hash2.digest("hex").slice(0, 32)}`;
|
|
30590
30576
|
}
|
|
30577
|
+
function runtimeFingerprintFor(options7) {
|
|
30578
|
+
const projectDir = import_node_path.resolve(options7.projectDir);
|
|
30579
|
+
const configPath = import_node_path.resolve(options7.configPath);
|
|
30580
|
+
const statePath = options7.statePath ? import_node_path.resolve(options7.statePath) : null;
|
|
30581
|
+
const hash2 = import_node_crypto.createHash("sha256");
|
|
30582
|
+
hash2.update("project\x00");
|
|
30583
|
+
hash2.update(projectDir);
|
|
30584
|
+
hash2.update("\x00config\x00");
|
|
30585
|
+
hash2.update(configPath);
|
|
30586
|
+
hash2.update("\x00state\x00");
|
|
30587
|
+
hash2.update(statePath ?? "");
|
|
30588
|
+
hash2.update("\x00source\x00");
|
|
30589
|
+
hash2.update(JSON.stringify(options7.source ?? null));
|
|
30590
|
+
updateFileFingerprint(hash2, "config", configPath);
|
|
30591
|
+
for (const file2 of dotenvFilesFor(projectDir))
|
|
30592
|
+
updateFileFingerprint(hash2, "dotenv", file2);
|
|
30593
|
+
for (const file2 of projectFingerprintFiles(projectDir))
|
|
30594
|
+
updateFileFingerprint(hash2, "project-file", file2);
|
|
30595
|
+
updateProjectSurfaceFingerprint(hash2, projectDir);
|
|
30596
|
+
updateRigkitPackageFingerprint(hash2, import_node_path.join(projectDir, "node_modules", "@rigkit"));
|
|
30597
|
+
return `sha256-${hash2.digest("hex")}`;
|
|
30598
|
+
}
|
|
30591
30599
|
function runtimePaths(projectId, rigkitHome = defaultRigkitHome()) {
|
|
30592
30600
|
const root = import_node_path.join(rigkitHome, "runtimes");
|
|
30593
30601
|
return {
|
|
@@ -30600,13 +30608,20 @@ function runtimePaths(projectId, rigkitHome = defaultRigkitHome()) {
|
|
|
30600
30608
|
function defaultRigkitHome() {
|
|
30601
30609
|
return process.env.RIGKIT_HOME ? import_node_path.resolve(process.env.RIGKIT_HOME) : import_node_path.join(import_node_os.homedir(), ".rigkit");
|
|
30602
30610
|
}
|
|
30603
|
-
async function tryExistingRuntime(paths, projectId) {
|
|
30611
|
+
async function tryExistingRuntime(paths, projectId, runtimeFingerprint) {
|
|
30604
30612
|
const handle = readHandle(paths.handlePath);
|
|
30605
30613
|
if (!handle || handle.projectId !== projectId)
|
|
30606
30614
|
return;
|
|
30607
30615
|
const token = readToken(handle.tokenPath);
|
|
30608
|
-
if (!token)
|
|
30616
|
+
if (!token) {
|
|
30617
|
+
removeStale(paths);
|
|
30618
|
+
return;
|
|
30619
|
+
}
|
|
30620
|
+
if (handle.runtimeFingerprint !== runtimeFingerprint) {
|
|
30621
|
+
await shutdownRuntime(handle, token);
|
|
30622
|
+
removeStale(paths);
|
|
30609
30623
|
return;
|
|
30624
|
+
}
|
|
30610
30625
|
try {
|
|
30611
30626
|
const body = await createRuntimeHttpClient({ baseUrl: handle.url, token }).health();
|
|
30612
30627
|
if (body.projectId !== projectId) {
|
|
@@ -30616,6 +30631,13 @@ async function tryExistingRuntime(paths, projectId) {
|
|
|
30616
30631
|
message: `runtime project mismatch`
|
|
30617
30632
|
});
|
|
30618
30633
|
}
|
|
30634
|
+
if (body.runtimeFingerprint !== runtimeFingerprint) {
|
|
30635
|
+
throw new RuntimeConnectionError({
|
|
30636
|
+
method: "GET",
|
|
30637
|
+
path: "/health",
|
|
30638
|
+
message: `runtime fingerprint mismatch`
|
|
30639
|
+
});
|
|
30640
|
+
}
|
|
30619
30641
|
return createClient(handle, paths, token);
|
|
30620
30642
|
} catch (error) {
|
|
30621
30643
|
if (error instanceof RuntimeApiVersionError)
|
|
@@ -30632,6 +30654,8 @@ async function startRuntime(input) {
|
|
|
30632
30654
|
"serve",
|
|
30633
30655
|
"--project-id",
|
|
30634
30656
|
input.projectId,
|
|
30657
|
+
"--runtime-fingerprint",
|
|
30658
|
+
input.runtimeFingerprint,
|
|
30635
30659
|
"--project-dir",
|
|
30636
30660
|
input.projectDir,
|
|
30637
30661
|
"--config",
|
|
@@ -30783,7 +30807,7 @@ function readReadyLine(proc, paths, projectDir) {
|
|
|
30783
30807
|
reason: "startup-timeout",
|
|
30784
30808
|
projectDir,
|
|
30785
30809
|
message: `Timed out waiting for Rigkit runtime to start`
|
|
30786
|
-
}));
|
|
30810
|
+
}), { kill: true });
|
|
30787
30811
|
}, 15000);
|
|
30788
30812
|
const cleanup = () => {
|
|
30789
30813
|
clearTimeout(timer);
|
|
@@ -30800,11 +30824,14 @@ function readReadyLine(proc, paths, projectDir) {
|
|
|
30800
30824
|
cleanup();
|
|
30801
30825
|
resolvePromise(line);
|
|
30802
30826
|
};
|
|
30803
|
-
function fail15(error) {
|
|
30827
|
+
function fail15(error, options7 = {}) {
|
|
30804
30828
|
if (settled)
|
|
30805
30829
|
return;
|
|
30806
30830
|
settled = true;
|
|
30807
30831
|
cleanup();
|
|
30832
|
+
if (options7.kill)
|
|
30833
|
+
killRuntimeProcess(proc);
|
|
30834
|
+
removeStale(paths);
|
|
30808
30835
|
rejectPromise(error);
|
|
30809
30836
|
}
|
|
30810
30837
|
function onData(chunk3) {
|
|
@@ -30839,15 +30866,100 @@ function readReadyLine(proc, paths, projectDir) {
|
|
|
30839
30866
|
proc.once("exit", onExit4);
|
|
30840
30867
|
});
|
|
30841
30868
|
}
|
|
30869
|
+
function killRuntimeProcess(proc) {
|
|
30870
|
+
if (!proc.pid)
|
|
30871
|
+
return;
|
|
30872
|
+
try {
|
|
30873
|
+
proc.kill("SIGTERM");
|
|
30874
|
+
} catch {}
|
|
30875
|
+
}
|
|
30842
30876
|
function removeStale(paths) {
|
|
30843
30877
|
import_node_fs.rmSync(paths.handlePath, { force: true });
|
|
30844
30878
|
}
|
|
30845
|
-
function
|
|
30846
|
-
|
|
30847
|
-
|
|
30848
|
-
|
|
30849
|
-
|
|
30850
|
-
|
|
30879
|
+
async function shutdownRuntime(handle, token) {
|
|
30880
|
+
try {
|
|
30881
|
+
await createRuntimeHttpClient({ baseUrl: handle.url, token }).shutdown();
|
|
30882
|
+
} catch {
|
|
30883
|
+
if (handle.pid !== process.pid) {
|
|
30884
|
+
try {
|
|
30885
|
+
process.kill(handle.pid);
|
|
30886
|
+
} catch {}
|
|
30887
|
+
}
|
|
30888
|
+
}
|
|
30889
|
+
}
|
|
30890
|
+
function updateFileFingerprint(hash2, label, path) {
|
|
30891
|
+
hash2.update(`\x00${label}\x00${path}\x00`);
|
|
30892
|
+
if (!import_node_fs.existsSync(path)) {
|
|
30893
|
+
hash2.update("missing");
|
|
30894
|
+
return;
|
|
30895
|
+
}
|
|
30896
|
+
const stat = import_node_fs.statSync(path);
|
|
30897
|
+
if (!stat.isFile()) {
|
|
30898
|
+
hash2.update(`not-file:${stat.mode}`);
|
|
30899
|
+
return;
|
|
30900
|
+
}
|
|
30901
|
+
hash2.update(import_node_fs.readFileSync(path));
|
|
30902
|
+
}
|
|
30903
|
+
function projectFingerprintFiles(projectDir) {
|
|
30904
|
+
return [
|
|
30905
|
+
"package.json",
|
|
30906
|
+
"bun.lock",
|
|
30907
|
+
"bun.lockb",
|
|
30908
|
+
"pnpm-lock.yaml",
|
|
30909
|
+
"package-lock.json",
|
|
30910
|
+
"yarn.lock"
|
|
30911
|
+
].map((file2) => import_node_path.join(projectDir, file2));
|
|
30912
|
+
}
|
|
30913
|
+
function updateProjectSurfaceFingerprint(hash2, projectDir) {
|
|
30914
|
+
if (!import_node_fs.existsSync(projectDir))
|
|
30915
|
+
return;
|
|
30916
|
+
const ignored = new Set([".git", ".rigkit", "node_modules", "dist", "build", ".next", ".astro"]);
|
|
30917
|
+
const entries2 = import_node_fs.readdirSync(projectDir, { withFileTypes: true }).filter((entry) => !ignored.has(entry.name)).map((entry) => `${entry.name}:${entry.isDirectory() ? "dir" : entry.isFile() ? "file" : "other"}`).sort();
|
|
30918
|
+
hash2.update("\x00project-surface\x00");
|
|
30919
|
+
hash2.update(entries2.join(`
|
|
30920
|
+
`));
|
|
30921
|
+
}
|
|
30922
|
+
function updateRigkitPackageFingerprint(hash2, scopeDir) {
|
|
30923
|
+
if (!import_node_fs.existsSync(scopeDir))
|
|
30924
|
+
return;
|
|
30925
|
+
const packageDirs = import_node_fs.readdirSync(scopeDir, { withFileTypes: true }).filter((entry) => entry.isDirectory() || entry.isSymbolicLink()).map((entry) => import_node_path.join(scopeDir, entry.name)).sort();
|
|
30926
|
+
for (const packageDir of packageDirs) {
|
|
30927
|
+
updateFileFingerprint(hash2, "rigkit-package", import_node_path.join(packageDir, "package.json"));
|
|
30928
|
+
for (const file2 of collectFiles(import_node_path.join(packageDir, "src"))) {
|
|
30929
|
+
updateFileFingerprint(hash2, "rigkit-source", file2);
|
|
30930
|
+
}
|
|
30931
|
+
}
|
|
30932
|
+
}
|
|
30933
|
+
function collectFiles(root) {
|
|
30934
|
+
if (!import_node_fs.existsSync(root))
|
|
30935
|
+
return [];
|
|
30936
|
+
const out = [];
|
|
30937
|
+
const visit = (dir) => {
|
|
30938
|
+
for (const entry of import_node_fs.readdirSync(dir, { withFileTypes: true })) {
|
|
30939
|
+
const path = import_node_path.join(dir, entry.name);
|
|
30940
|
+
if (entry.isDirectory()) {
|
|
30941
|
+
visit(path);
|
|
30942
|
+
} else if (entry.isFile()) {
|
|
30943
|
+
out.push(path);
|
|
30944
|
+
}
|
|
30945
|
+
}
|
|
30946
|
+
};
|
|
30947
|
+
visit(root);
|
|
30948
|
+
return out.sort();
|
|
30949
|
+
}
|
|
30950
|
+
function dotenvFilesFor(projectDir) {
|
|
30951
|
+
const files = [];
|
|
30952
|
+
let current = projectDir;
|
|
30953
|
+
while (true) {
|
|
30954
|
+
const candidate = import_node_path.join(current, ".env");
|
|
30955
|
+
if (import_node_fs.existsSync(candidate))
|
|
30956
|
+
files.unshift(candidate);
|
|
30957
|
+
const parent = import_node_path.dirname(current);
|
|
30958
|
+
if (parent === current)
|
|
30959
|
+
break;
|
|
30960
|
+
current = parent;
|
|
30961
|
+
}
|
|
30962
|
+
return files;
|
|
30851
30963
|
}
|
|
30852
30964
|
function isFileExistsError(error) {
|
|
30853
30965
|
return Boolean(error && typeof error === "object" && error.code === "EEXIST");
|
|
@@ -30973,7 +31085,7 @@ function findConfigUp(startDir, fileExists = import_node_fs2.existsSync) {
|
|
|
30973
31085
|
}
|
|
30974
31086
|
|
|
30975
31087
|
// src/version.ts
|
|
30976
|
-
var RIGKIT_PROVIDER_VSCODE_VERSION = "0.2.
|
|
31088
|
+
var RIGKIT_PROVIDER_VSCODE_VERSION = "0.2.3";
|
|
30977
31089
|
|
|
30978
31090
|
// src/extension.ts
|
|
30979
31091
|
var VSCODE_HOST_METHODS = [
|
|
@@ -31022,11 +31134,6 @@ class RigkitVsCodeHost {
|
|
|
31022
31134
|
const selected = operation ?? await pickOperation(operations);
|
|
31023
31135
|
if (!selected)
|
|
31024
31136
|
return;
|
|
31025
|
-
const unsupported = unsupportedRequirements(selected);
|
|
31026
|
-
if (unsupported) {
|
|
31027
|
-
await vscode.window.showErrorMessage(unsupported);
|
|
31028
|
-
return;
|
|
31029
|
-
}
|
|
31030
31137
|
const workspaces = await this.listWorkspaces();
|
|
31031
31138
|
const input = await collectOperationInput(selected, workspaces, operationPrompt(presetWorkspace));
|
|
31032
31139
|
if (!input)
|
|
@@ -31148,7 +31255,7 @@ class WorkspacesProvider {
|
|
|
31148
31255
|
getTreeItem(workspace2) {
|
|
31149
31256
|
const item = new vscode.TreeItem(workspace2.name, vscode.TreeItemCollapsibleState.None);
|
|
31150
31257
|
item.description = workspace2.workflow;
|
|
31151
|
-
item.tooltip = workspace2.
|
|
31258
|
+
item.tooltip = workspace2.name;
|
|
31152
31259
|
item.iconPath = new vscode.ThemeIcon("server");
|
|
31153
31260
|
item.contextValue = "rigkitWorkspace";
|
|
31154
31261
|
item.command = {
|
|
@@ -31212,7 +31319,7 @@ async function pickWorkspace(title, workspaces) {
|
|
|
31212
31319
|
const items = workspaces.map((workspace2) => ({
|
|
31213
31320
|
label: workspace2.name,
|
|
31214
31321
|
description: workspace2.workflow,
|
|
31215
|
-
detail: workspace2.
|
|
31322
|
+
detail: workspace2.createdAt,
|
|
31216
31323
|
workspace: workspace2
|
|
31217
31324
|
}));
|
|
31218
31325
|
const picked = await vscode.window.showQuickPick(items, { title, ignoreFocusOut: true });
|
|
@@ -31301,17 +31408,6 @@ async function openExternal(params2) {
|
|
|
31301
31408
|
await vscode.env.openExternal(vscode.Uri.parse(target));
|
|
31302
31409
|
return null;
|
|
31303
31410
|
}
|
|
31304
|
-
function unsupportedRequirements(operation) {
|
|
31305
|
-
const unsupportedCapability = operation.requiredHostCapabilities?.[0];
|
|
31306
|
-
if (unsupportedCapability) {
|
|
31307
|
-
return `Operation "${operation.id}" requires host capability "${unsupportedCapability.id}". VS Code does not support that capability.`;
|
|
31308
|
-
}
|
|
31309
|
-
const unsupportedMethod = operation.requiredHostMethods?.find((method) => !VSCODE_HOST_METHODS.some((supported) => supported.id === method.id && (!method.modes?.length || method.modes.every((mode) => supported.modes?.includes(mode)))));
|
|
31310
|
-
if (unsupportedMethod) {
|
|
31311
|
-
return `Operation "${operation.id}" requires host method "${unsupportedMethod.id}".`;
|
|
31312
|
-
}
|
|
31313
|
-
return;
|
|
31314
|
-
}
|
|
31315
31411
|
function isHostRequestMessage(value3) {
|
|
31316
31412
|
return isRecord3(value3) && value3.type === "host.request" && typeof value3.id === "string" && typeof value3.method === "string";
|
|
31317
31413
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rigkit/provider-vscode",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.3",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -57,7 +57,7 @@
|
|
|
57
57
|
"README.md"
|
|
58
58
|
],
|
|
59
59
|
"dependencies": {
|
|
60
|
-
"@rigkit/runtime-client": "0.2.
|
|
60
|
+
"@rigkit/runtime-client": "0.2.3"
|
|
61
61
|
},
|
|
62
62
|
"devDependencies": {
|
|
63
63
|
"@types/bun": "latest",
|
package/src/extension.ts
CHANGED
|
@@ -82,12 +82,6 @@ class RigkitVsCodeHost {
|
|
|
82
82
|
const selected = operation ?? await pickOperation(operations);
|
|
83
83
|
if (!selected) return;
|
|
84
84
|
|
|
85
|
-
const unsupported = unsupportedRequirements(selected);
|
|
86
|
-
if (unsupported) {
|
|
87
|
-
await vscode.window.showErrorMessage(unsupported);
|
|
88
|
-
return;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
85
|
const workspaces = await this.listWorkspaces();
|
|
92
86
|
const input = await collectOperationInput(selected, workspaces, operationPrompt(presetWorkspace));
|
|
93
87
|
if (!input) return;
|
|
@@ -213,7 +207,7 @@ class WorkspacesProvider implements vscode.TreeDataProvider<RuntimeControlWorksp
|
|
|
213
207
|
getTreeItem(workspace: RuntimeControlWorkspace): vscode.TreeItem {
|
|
214
208
|
const item = new vscode.TreeItem(workspace.name, vscode.TreeItemCollapsibleState.None);
|
|
215
209
|
item.description = workspace.workflow;
|
|
216
|
-
item.tooltip = workspace.
|
|
210
|
+
item.tooltip = workspace.name;
|
|
217
211
|
item.iconPath = new vscode.ThemeIcon("server");
|
|
218
212
|
item.contextValue = "rigkitWorkspace";
|
|
219
213
|
item.command = {
|
|
@@ -286,7 +280,7 @@ async function pickWorkspace(
|
|
|
286
280
|
const items = workspaces.map((workspace) => ({
|
|
287
281
|
label: workspace.name,
|
|
288
282
|
description: workspace.workflow,
|
|
289
|
-
detail: workspace.
|
|
283
|
+
detail: workspace.createdAt,
|
|
290
284
|
workspace,
|
|
291
285
|
}));
|
|
292
286
|
const picked = await vscode.window.showQuickPick(items, { title, ignoreFocusOut: true });
|
|
@@ -381,22 +375,6 @@ async function openExternal(params: unknown): Promise<null> {
|
|
|
381
375
|
return null;
|
|
382
376
|
}
|
|
383
377
|
|
|
384
|
-
function unsupportedRequirements(operation: RuntimeControlOperation): string | undefined {
|
|
385
|
-
const unsupportedCapability = operation.requiredHostCapabilities?.[0];
|
|
386
|
-
if (unsupportedCapability) {
|
|
387
|
-
return `Operation "${operation.id}" requires host capability "${unsupportedCapability.id}". VS Code does not support that capability.`;
|
|
388
|
-
}
|
|
389
|
-
const unsupportedMethod = operation.requiredHostMethods?.find((method) =>
|
|
390
|
-
!VSCODE_HOST_METHODS.some((supported) =>
|
|
391
|
-
supported.id === method.id && (!method.modes?.length || method.modes.every((mode) => supported.modes?.includes(mode)))
|
|
392
|
-
)
|
|
393
|
-
);
|
|
394
|
-
if (unsupportedMethod) {
|
|
395
|
-
return `Operation "${operation.id}" requires host method "${unsupportedMethod.id}".`;
|
|
396
|
-
}
|
|
397
|
-
return undefined;
|
|
398
|
-
}
|
|
399
|
-
|
|
400
378
|
function isHostRequestMessage(value: unknown): value is HostRequestMessage {
|
|
401
379
|
return isRecord(value) &&
|
|
402
380
|
value.type === "host.request" &&
|
package/src/input.test.ts
CHANGED
|
@@ -71,13 +71,8 @@ function workspaceRecord(name: string): RuntimeControlWorkspace {
|
|
|
71
71
|
return {
|
|
72
72
|
id: `ws-${name}`,
|
|
73
73
|
name,
|
|
74
|
-
providerId: "test",
|
|
75
74
|
workflow: "test",
|
|
76
|
-
|
|
77
|
-
sourceRef: null,
|
|
78
|
-
context: {},
|
|
79
|
-
metadata: {},
|
|
80
|
-
data: {},
|
|
75
|
+
ctx: {},
|
|
81
76
|
createdAt: "2026-05-10T00:00:00.000Z",
|
|
82
77
|
updatedAt: "2026-05-10T00:00:00.000Z",
|
|
83
78
|
};
|
package/src/version.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const RIGKIT_PROVIDER_VSCODE_VERSION = "0.2.
|
|
1
|
+
export const RIGKIT_PROVIDER_VSCODE_VERSION = "0.2.3";
|