windows-development-sandbox 1.11.6 → 1.12.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/README.md +12 -6
- package/config.example.json +4 -3
- package/dist/app/features/apps/apps-rows.d.ts +4 -1
- package/dist/app/features/apps/apps-rows.js +7 -2
- package/dist/app/features/apps/apps.def.d.ts +19 -0
- package/dist/app/features/apps/apps.def.js +49 -12
- package/dist/app/features/apps/apps.run.d.ts +2 -0
- package/dist/app/features/apps/apps.run.js +1 -1
- package/dist/app/features/audit/audit.def.d.ts +341 -0
- package/dist/app/features/audit/audit.def.js +454 -0
- package/dist/app/features/audit/audit.run.d.ts +107 -0
- package/dist/app/features/audit/audit.run.js +133 -0
- package/dist/app/features/audit/index.d.ts +2 -0
- package/dist/app/features/audit/index.js +3 -0
- package/dist/app/features/defs.d.ts +194 -1
- package/dist/app/features/defs.js +4 -0
- package/dist/app/features/projects/projects.def.js +1 -1
- package/dist/app/features/settings/settings.run.d.ts +3 -0
- package/dist/app/features/settings/settings.run.js +16 -2
- package/dist/app/features/updates/update-lines.d.ts +1 -1
- package/dist/app/features/updates/update-lines.js +3 -7
- package/dist/app/features/updates/updates.def.js +1 -1
- package/dist/app/kernel/define.d.ts +12 -1
- package/dist/app/registry.js +2 -0
- package/dist/cli/args.d.ts +0 -3
- package/dist/cli/args.js +3 -4
- package/dist/cli/commands/index.d.ts +1 -1
- package/dist/cli/commands/index.js +1 -1
- package/dist/cli/commands/launch/prepare.js +1 -1
- package/dist/cli/commands/maintenance/index.d.ts +0 -1
- package/dist/cli/commands/maintenance/index.js +0 -1
- package/dist/cli/commands/registry.js +1 -2
- package/dist/cli/manifest.d.ts +0 -41
- package/dist/cli/manifest.js +0 -14
- package/dist/cli/menu/pages/apps-page.js +2 -15
- package/dist/cli/menu/pages/maintenance-page.d.ts +4 -0
- package/dist/cli/menu/pages/maintenance-page.js +51 -8
- package/dist/cli/menu/views.js +2 -0
- package/dist/core/config/defaults.js +1 -1
- package/dist/core/schema/apps.d.ts +9 -0
- package/dist/core/schema/apps.js +9 -0
- package/dist/core/schema/config.d.ts +1 -0
- package/dist/core/schema/config.js +3 -3
- package/dist/core/schema/sandbox.d.ts +1 -0
- package/dist/core/schema/sandbox.js +11 -3
- package/dist/guest/apps/app-installer.js +50 -4
- package/dist/guest/apps/index.d.ts +1 -1
- package/dist/guest/apps/index.js +1 -1
- package/dist/guest/apps/sources.js +1 -1
- package/dist/guest/audit/parse.d.ts +32 -2
- package/dist/guest/audit/parse.js +43 -5
- package/dist/guest/audit/process-audit.d.ts +3 -1
- package/dist/guest/audit/process-audit.js +9 -6
- package/dist/guest/boot/boot.js +12 -3
- package/dist/guest/boot/guide.d.ts +1 -1
- package/dist/guest/boot/guide.js +27 -3
- package/dist/guest/daemon/sessions.d.ts +7 -0
- package/dist/guest/daemon/sessions.js +27 -2
- package/dist/guest/entries/daemon.js +2 -1
- package/dist/guest/setup/addon-mcp.d.ts +2 -0
- package/dist/guest/setup/addon-mcp.js +49 -0
- package/dist/guest/setup/agent-addons.d.ts +9 -0
- package/dist/guest/setup/agent-addons.js +22 -0
- package/dist/guest/setup/headroom.d.ts +7 -0
- package/dist/guest/setup/headroom.js +60 -0
- package/dist/guest/setup/managed-policy.d.ts +2 -1
- package/dist/guest/setup/managed-policy.js +15 -6
- package/dist/guest/toolchains/plan.js +8 -3
- package/dist/host/audit/attribute.d.ts +46 -0
- package/dist/host/audit/attribute.js +76 -0
- package/dist/host/audit/collect.d.ts +29 -3
- package/dist/host/audit/collect.js +256 -61
- package/dist/host/audit/git-commits.d.ts +29 -0
- package/dist/host/audit/git-commits.js +157 -0
- package/dist/host/audit/index.d.ts +5 -0
- package/dist/host/audit/index.js +6 -0
- package/dist/host/audit/log.d.ts +44 -7
- package/dist/host/audit/log.js +148 -45
- package/dist/host/audit/redact.d.ts +2 -0
- package/dist/host/audit/redact.js +67 -0
- package/dist/host/update/decision.d.ts +3 -2
- package/dist/host/update/decision.js +2 -3
- package/dist/host/update/updater.d.ts +4 -1
- package/dist/host/update/updater.js +11 -6
- package/dist/runtime/agent.js +110 -15
- package/dist/runtime/daemon.js +569 -316
- package/dist/runtime/db.js +110 -15
- package/dist/runtime/main.js +1011 -672
- package/dist/runtime/netproxy.js +110 -15
- package/dist/runtime/view.js +110 -15
- package/dist/selftest/app.test.js +25 -1
- package/dist/selftest/audit.test.js +354 -47
- package/dist/selftest/hcs.test.js +35 -0
- package/dist/selftest/menu-screens.js +1 -1
- package/dist/selftest/menu.test.js +3 -3
- package/dist/selftest/support/engine-golden.js +9 -0
- package/dist/selftest/support/fixtures.d.ts +1 -0
- package/dist/selftest/support/web-preview.js +94 -0
- package/dist/selftest/toolchains.test.js +147 -2
- package/dist/selftest/update-service.test.js +0 -7
- package/dist/selftest/update.test.js +4 -4
- package/dist/shared/apps/agent-addons.d.ts +64 -0
- package/dist/shared/apps/agent-addons.js +95 -0
- package/dist/shared/apps/catalogue.d.ts +33 -2
- package/dist/shared/apps/catalogue.js +102 -11
- package/dist/shared/apps/index.d.ts +3 -2
- package/dist/shared/apps/index.js +3 -2
- package/dist/shared/apps/selection.d.ts +2 -0
- package/dist/shared/apps/selection.js +7 -0
- package/dist/sync/watcher.js +9 -1
- package/dist/web/index.html +2 -2
- package/dist/web/{main-RQFN4WBY.css → main-UAQPI5XD.css} +1 -1
- package/dist/web/{main-QL7KHCEE.js → main-UD4QCXZR.js} +66 -66
- package/native/csharp/HcsHost/AssemblyInfo.cs +5 -3
- package/native/csharp/HcsHost/Hcs.cs +9 -0
- package/native/csharp/HcsHost/Program.cs +26 -1
- package/native/csharp/HcsHost/Share.cs +173 -0
- package/native/csharp/HostTools/AssemblyInfo.cs +3 -3
- package/package.json +1 -1
- package/sandbox/addons/ccusage/package-lock.json +111 -0
- package/sandbox/addons/ccusage/package.json +7 -0
- package/sandbox/addons/context7/package-lock.json +1313 -0
- package/sandbox/addons/context7/package.json +7 -0
- package/sandbox/addons/headroom/requirements.in +1 -0
- package/sandbox/addons/headroom/requirements.txt +2922 -0
- package/sandbox/addons/playwright-mcp/package-lock.json +56 -0
- package/sandbox/addons/playwright-mcp/package.json +7 -0
- package/schemas/config.schema.json +13 -4
- package/schemas/sandbox-config.schema.json +2 -2
- package/dist/cli/commands/maintenance/audit.d.ts +0 -3
- package/dist/cli/commands/maintenance/audit.js +0 -58
|
@@ -8,7 +8,9 @@ using System.Runtime.InteropServices;
|
|
|
8
8
|
[assembly: AssemblyCompany("windows-development-sandbox (open source)")]
|
|
9
9
|
[assembly: AssemblyProduct("Windows Development Sandbox")]
|
|
10
10
|
[assembly: AssemblyCopyright("MIT License, windows-development-sandbox contributors")]
|
|
11
|
-
[assembly: AssemblyVersion("1.
|
|
12
|
-
[assembly: AssemblyFileVersion("1.
|
|
13
|
-
[assembly: AssemblyInformationalVersion("1.
|
|
11
|
+
[assembly: AssemblyVersion("1.12.0.0")]
|
|
12
|
+
[assembly: AssemblyFileVersion("1.12.0.0")]
|
|
13
|
+
[assembly: AssemblyInformationalVersion("1.12.0")]
|
|
14
14
|
[assembly: ComVisible(false)]
|
|
15
|
+
// computecore.dll and computestorage.dll are not KnownDLLs: load them from System32 only, never from the exe's folder.
|
|
16
|
+
[assembly: DefaultDllImportSearchPaths(DllImportSearchPath.System32)]
|
|
@@ -100,6 +100,9 @@ namespace AgentSandbox.HcsHost
|
|
|
100
100
|
[DllImport("computecore.dll", ExactSpelling = true, CharSet = CharSet.Unicode)]
|
|
101
101
|
public static extern int HcsGetComputeSystemProperties(IntPtr computeSystem, IntPtr operation, string propertyQuery);
|
|
102
102
|
|
|
103
|
+
[DllImport("computecore.dll", ExactSpelling = true, CharSet = CharSet.Unicode)]
|
|
104
|
+
public static extern int HcsModifyComputeSystem(IntPtr computeSystem, IntPtr operation, string configuration, IntPtr identity);
|
|
105
|
+
|
|
103
106
|
[DllImport("computecore.dll", ExactSpelling = true)]
|
|
104
107
|
public static extern void HcsCloseComputeSystem(IntPtr computeSystem);
|
|
105
108
|
|
|
@@ -245,6 +248,12 @@ namespace AgentSandbox.HcsHost
|
|
|
245
248
|
return WithSystem(id, QueryMs, delegate(IntPtr system, IntPtr op) { return NativeMethods.HcsGetComputeSystemProperties(system, op, queryJson); });
|
|
246
249
|
}
|
|
247
250
|
|
|
251
|
+
/// <summary>Applies one ModifySettingRequest to a running system (HcsModifyComputeSystem, no identity token).</summary>
|
|
252
|
+
public static HcsReply Modify(string id, string modifySettingRequest)
|
|
253
|
+
{
|
|
254
|
+
return WithSystem(id, ChangeMs, delegate(IntPtr system, IntPtr op) { return NativeMethods.HcsModifyComputeSystem(system, op, modifySettingRequest, IntPtr.Zero); });
|
|
255
|
+
}
|
|
256
|
+
|
|
248
257
|
/// <summary>Lets the virtual machine `vmId` open the file (its disk). The file must exist.</summary>
|
|
249
258
|
public static HcsReply GrantVmAccess(string vmId, string filePath)
|
|
250
259
|
{
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// HcsHost.exe <verb> [arguments] --out <response.json>
|
|
2
2
|
// Verbs: check, enumerate, properties <id>, create <request.json>, start <id>, terminate <id>,
|
|
3
|
-
// grant-vm-access <vmId> <file>, create-vhdx <path> <maxGb
|
|
3
|
+
// grant-vm-access <vmId> <file>, create-vhdx <path> <maxGb>, share <request.json> (prototype).
|
|
4
4
|
// The answer is one JSON file (see Json.Response); exit code 0 = ok, 1 = failed, 2 = wrong use. A create request is
|
|
5
5
|
// {"id": "...", "document": "<the HCS document as a JSON string>"}. Never attaches a disk to this PC.
|
|
6
6
|
using System;
|
|
@@ -109,6 +109,10 @@ namespace AgentSandbox.HcsHost
|
|
|
109
109
|
}
|
|
110
110
|
return FromReply(verb == "start" ? Hcs.Start(args[1]) : Hcs.Terminate(args[1]), null, out response);
|
|
111
111
|
}
|
|
112
|
+
if (verb == "share" && args.Count == 2)
|
|
113
|
+
{
|
|
114
|
+
return Share(args[1], out response);
|
|
115
|
+
}
|
|
112
116
|
if (verb == "grant-vm-access" && args.Count == 3)
|
|
113
117
|
{
|
|
114
118
|
if (Refused(Guard.IdProblem(args[1]), out response) || Refused(Guard.DiskProblem(args[2]), out response))
|
|
@@ -170,6 +174,27 @@ namespace AgentSandbox.HcsHost
|
|
|
170
174
|
return FromReply(Hcs.Create((string)id, (string)document), null, out response);
|
|
171
175
|
}
|
|
172
176
|
|
|
177
|
+
/// <summary>
|
|
178
|
+
/// PROTOTYPE (docs/design/hcs-live-folders.md): adds or removes a vSMB share on a running system of OURS (id
|
|
179
|
+
/// prefix and Owner, as for start/terminate). Windows Sandbox's own system is refused like any other.
|
|
180
|
+
/// </summary>
|
|
181
|
+
private static int Share(string requestFile, out string response)
|
|
182
|
+
{
|
|
183
|
+
string problem;
|
|
184
|
+
ShareRequest request = ShareRequest.Read(requestFile, out problem);
|
|
185
|
+
if (Refused(problem, out response))
|
|
186
|
+
{
|
|
187
|
+
return ExitUsage;
|
|
188
|
+
}
|
|
189
|
+
if (Refused(Guard.IdProblem(request.Id), out response) || Refused(Guard.OwnerProblem(request.Id), out response))
|
|
190
|
+
{
|
|
191
|
+
return ExitUsage;
|
|
192
|
+
}
|
|
193
|
+
Dictionary<string, string> values = new Dictionary<string, string>();
|
|
194
|
+
values["request"] = request.ToModifySettingRequest();
|
|
195
|
+
return FromReply(Hcs.Modify(request.Id, values["request"]), values, out response);
|
|
196
|
+
}
|
|
197
|
+
|
|
173
198
|
/// <summary>True (with the refusal as the response) when `problem` says why the request is not allowed.</summary>
|
|
174
199
|
private static bool Refused(string problem, out string response)
|
|
175
200
|
{
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
// Live folders (PROTOTYPE, not wired into the CLI; docs/design/hcs-live-folders.md): a vSMB share added to or removed
|
|
2
|
+
// from a RUNNING compute system with HcsModifyComputeSystem. The request is built here from checked fields, never
|
|
3
|
+
// passed through: only ResourcePath "VirtualMachine/Devices/VirtualSmb/Shares", only Add or Remove, a share name with
|
|
4
|
+
// this tool's prefix, and fixed options (NoDirectmap always; read-only unless asked; never TakeBackupPrivilege,
|
|
5
|
+
// UseShareRootIdentity, AllowedFiles or any other option that changes whose rights the guest uses).
|
|
6
|
+
using System;
|
|
7
|
+
using System.Collections.Generic;
|
|
8
|
+
using System.IO;
|
|
9
|
+
using System.Text;
|
|
10
|
+
using System.Text.RegularExpressions;
|
|
11
|
+
using System.Web.Script.Serialization;
|
|
12
|
+
|
|
13
|
+
namespace AgentSandbox.HcsHost
|
|
14
|
+
{
|
|
15
|
+
/// <summary>One checked share request: {"id", "action": "add"|"remove", "name", "path", "readOnly"}.</summary>
|
|
16
|
+
public sealed class ShareRequest
|
|
17
|
+
{
|
|
18
|
+
public const string ResourcePath = "VirtualMachine/Devices/VirtualSmb/Shares";
|
|
19
|
+
/// <summary>Our share names: never the 64-hex names Windows Sandbox gives its own shares.</summary>
|
|
20
|
+
private static readonly Regex SafeName = new Regex("^agentsbx-[0-9a-f]{8,32}$");
|
|
21
|
+
private const long MaxRequestBytes = 64 * 1024;
|
|
22
|
+
|
|
23
|
+
public string Id;
|
|
24
|
+
public bool Add;
|
|
25
|
+
public string Name;
|
|
26
|
+
public string Path;
|
|
27
|
+
public bool ReadOnly = true;
|
|
28
|
+
|
|
29
|
+
/// <summary>Reads and checks a request file. Null with `problem` set when it is not allowed.</summary>
|
|
30
|
+
public static ShareRequest Read(string file, out string problem)
|
|
31
|
+
{
|
|
32
|
+
FileInfo info = new FileInfo(file);
|
|
33
|
+
if (!info.Exists || info.Length > MaxRequestBytes)
|
|
34
|
+
{
|
|
35
|
+
problem = "the request must be a file of at most 64 KB";
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
Dictionary<string, object> raw;
|
|
39
|
+
try
|
|
40
|
+
{
|
|
41
|
+
raw = new JavaScriptSerializer().Deserialize<Dictionary<string, object>>(File.ReadAllText(file, Encoding.UTF8));
|
|
42
|
+
}
|
|
43
|
+
catch (ArgumentException)
|
|
44
|
+
{
|
|
45
|
+
problem = "the request is not JSON";
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
48
|
+
catch (InvalidOperationException)
|
|
49
|
+
{
|
|
50
|
+
problem = "the request is not JSON";
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
ShareRequest r = new ShareRequest();
|
|
54
|
+
r.Id = Text(raw, "id");
|
|
55
|
+
string action = Text(raw, "action");
|
|
56
|
+
r.Name = Text(raw, "name");
|
|
57
|
+
r.Path = Text(raw, "path");
|
|
58
|
+
object ro;
|
|
59
|
+
if (raw != null && raw.TryGetValue("readOnly", out ro))
|
|
60
|
+
{
|
|
61
|
+
if (!(ro is bool))
|
|
62
|
+
{
|
|
63
|
+
problem = "readOnly must be true or false";
|
|
64
|
+
return null;
|
|
65
|
+
}
|
|
66
|
+
r.ReadOnly = (bool)ro;
|
|
67
|
+
}
|
|
68
|
+
if (action != "add" && action != "remove")
|
|
69
|
+
{
|
|
70
|
+
problem = "action must be add or remove";
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
r.Add = action == "add";
|
|
74
|
+
if (r.Name == null || !SafeName.IsMatch(r.Name))
|
|
75
|
+
{
|
|
76
|
+
problem = "the share name must look like agentsbx-<8 to 32 hex digits>";
|
|
77
|
+
return null;
|
|
78
|
+
}
|
|
79
|
+
problem = r.Add ? FolderProblem(r.Path) : null;
|
|
80
|
+
return problem == null ? r : null;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
private static string Text(Dictionary<string, object> raw, string key)
|
|
84
|
+
{
|
|
85
|
+
object value;
|
|
86
|
+
if (raw == null || !raw.TryGetValue(key, out value))
|
|
87
|
+
{
|
|
88
|
+
return null;
|
|
89
|
+
}
|
|
90
|
+
return value as string;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/// <summary>
|
|
94
|
+
/// Null when `path` is a full local path to an existing folder (not a drive root, no link anywhere on the way);
|
|
95
|
+
/// otherwise why not. The host's TypeScript checks the same and more (which folders may be shared at all).
|
|
96
|
+
/// </summary>
|
|
97
|
+
public static string FolderProblem(string path)
|
|
98
|
+
{
|
|
99
|
+
// No '/', no ':' after the drive (streams), no wildcards or control characters.
|
|
100
|
+
if (string.IsNullOrEmpty(path) || path.Length > 240 || !Regex.IsMatch(path, "^[A-Za-z]:\\\\[^<>\"|?*:/\\x00-\\x1f]+$"))
|
|
101
|
+
{
|
|
102
|
+
return "only a full local path to a folder can be shared (C:\\...)";
|
|
103
|
+
}
|
|
104
|
+
string trimmed = path.TrimEnd('\\');
|
|
105
|
+
foreach (string part in trimmed.Substring(3).Split('\\'))
|
|
106
|
+
{
|
|
107
|
+
if (part.Length == 0 || part == "." || part == ".." || part.EndsWith(".") || part.EndsWith(" ") || part.Contains("~"))
|
|
108
|
+
{
|
|
109
|
+
return "the path must be in its plain long form (no . or .. parts, trailing dots or spaces, or short names)";
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
string full;
|
|
113
|
+
try
|
|
114
|
+
{
|
|
115
|
+
full = System.IO.Path.GetFullPath(trimmed);
|
|
116
|
+
}
|
|
117
|
+
catch (Exception)
|
|
118
|
+
{
|
|
119
|
+
return "the path cannot be read";
|
|
120
|
+
}
|
|
121
|
+
if (!string.Equals(full, trimmed, StringComparison.Ordinal))
|
|
122
|
+
{
|
|
123
|
+
return "the path must already be in its full form";
|
|
124
|
+
}
|
|
125
|
+
DriveInfo drive = new DriveInfo(trimmed.Substring(0, 1));
|
|
126
|
+
if (drive.DriveType != DriveType.Fixed)
|
|
127
|
+
{
|
|
128
|
+
// A subst drive still reports Fixed: the wsb-share verb adds a QueryDosDevice check (design note).
|
|
129
|
+
return "only folders on a fixed local drive can be shared (not network or removable drives)";
|
|
130
|
+
}
|
|
131
|
+
DirectoryInfo dir = new DirectoryInfo(trimmed);
|
|
132
|
+
if (!dir.Exists)
|
|
133
|
+
{
|
|
134
|
+
return "the folder does not exist";
|
|
135
|
+
}
|
|
136
|
+
if (dir.Parent == null)
|
|
137
|
+
{
|
|
138
|
+
return "a whole drive cannot be shared";
|
|
139
|
+
}
|
|
140
|
+
for (DirectoryInfo d = dir; d != null && d.Parent != null; d = d.Parent)
|
|
141
|
+
{
|
|
142
|
+
if ((d.Attributes & FileAttributes.ReparsePoint) != 0)
|
|
143
|
+
{
|
|
144
|
+
return "the folder or one above it is a link: " + d.FullName;
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
return null;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
/// <summary>The ModifySettingRequest (HCS schema; learn.microsoft.com .../hcsmodifycomputesystem).</summary>
|
|
151
|
+
public string ToModifySettingRequest()
|
|
152
|
+
{
|
|
153
|
+
StringBuilder sb = new StringBuilder();
|
|
154
|
+
sb.Append("{\"ResourcePath\":").Append(Json.Quote(ResourcePath));
|
|
155
|
+
sb.Append(",\"RequestType\":").Append(Json.Quote(Add ? "Add" : "Remove"));
|
|
156
|
+
sb.Append(",\"Settings\":{\"Name\":").Append(Json.Quote(Name));
|
|
157
|
+
if (Add)
|
|
158
|
+
{
|
|
159
|
+
sb.Append(",\"Path\":").Append(Json.Quote(System.IO.Path.GetFullPath(Path.TrimEnd('\\'))));
|
|
160
|
+
// hcsshim's read-only defaults (internal/uvm/vsmb.go DefaultVSMBOptions) plus NoDirectmap: a share that
|
|
161
|
+
// was never direct-mapped can be removed again while the system runs.
|
|
162
|
+
sb.Append(",\"Options\":{\"NoDirectmap\":true");
|
|
163
|
+
if (ReadOnly)
|
|
164
|
+
{
|
|
165
|
+
sb.Append(",\"ReadOnly\":true,\"ShareRead\":true,\"CacheIo\":true,\"PseudoOplocks\":true");
|
|
166
|
+
}
|
|
167
|
+
sb.Append("}");
|
|
168
|
+
}
|
|
169
|
+
sb.Append("}}");
|
|
170
|
+
return sb.ToString();
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
}
|
|
@@ -8,7 +8,7 @@ using System.Runtime.InteropServices;
|
|
|
8
8
|
[assembly: AssemblyCompany("windows-development-sandbox (open source)")]
|
|
9
9
|
[assembly: AssemblyProduct("Windows Development Sandbox")]
|
|
10
10
|
[assembly: AssemblyCopyright("MIT License, windows-development-sandbox contributors")]
|
|
11
|
-
[assembly: AssemblyVersion("1.
|
|
12
|
-
[assembly: AssemblyFileVersion("1.
|
|
13
|
-
[assembly: AssemblyInformationalVersion("1.
|
|
11
|
+
[assembly: AssemblyVersion("1.12.0.0")]
|
|
12
|
+
[assembly: AssemblyFileVersion("1.12.0.0")]
|
|
13
|
+
[assembly: AssemblyInformationalVersion("1.12.0")]
|
|
14
14
|
[assembly: ComVisible(false)]
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "windows-development-sandbox",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.12.0",
|
|
4
4
|
"description": "A disposable Windows Sandbox for development, with or without an AI agent (Claude Code, Codex, Gemini, opencode, ...): the folder you run it from is the workspace, toolchains and databases for your project install themselves, and nothing else on your PC is reachable.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "sandbox-addon-ccusage",
|
|
3
|
+
"lockfileVersion": 3,
|
|
4
|
+
"requires": true,
|
|
5
|
+
"packages": {
|
|
6
|
+
"": {
|
|
7
|
+
"name": "sandbox-addon-ccusage",
|
|
8
|
+
"dependencies": {
|
|
9
|
+
"ccusage": "20.0.36"
|
|
10
|
+
}
|
|
11
|
+
},
|
|
12
|
+
"node_modules/@ccusage/ccusage-darwin-arm64": {
|
|
13
|
+
"version": "20.0.36",
|
|
14
|
+
"resolved": "https://registry.npmjs.org/@ccusage/ccusage-darwin-arm64/-/ccusage-darwin-arm64-20.0.36.tgz",
|
|
15
|
+
"integrity": "sha512-vG0jeRvKee/WJLwISk6j3OH1uzDHjgwTLD4ozZIP17ccMwmNj9+XFiCLulfqPAUw5DXAM7sfdCoZ/6VSev/FOw==",
|
|
16
|
+
"cpu": [
|
|
17
|
+
"arm64"
|
|
18
|
+
],
|
|
19
|
+
"license": "MIT",
|
|
20
|
+
"optional": true,
|
|
21
|
+
"os": [
|
|
22
|
+
"darwin"
|
|
23
|
+
]
|
|
24
|
+
},
|
|
25
|
+
"node_modules/@ccusage/ccusage-darwin-x64": {
|
|
26
|
+
"version": "20.0.36",
|
|
27
|
+
"resolved": "https://registry.npmjs.org/@ccusage/ccusage-darwin-x64/-/ccusage-darwin-x64-20.0.36.tgz",
|
|
28
|
+
"integrity": "sha512-0leQpdmb0YQyHclvJIX7yp/BR/tqyyDgGZz9pUhMKOu+Mj/NQT6mrgetcYPkV1L0PxqDJCW9uLe1ORDAgwE3rA==",
|
|
29
|
+
"cpu": [
|
|
30
|
+
"x64"
|
|
31
|
+
],
|
|
32
|
+
"license": "MIT",
|
|
33
|
+
"optional": true,
|
|
34
|
+
"os": [
|
|
35
|
+
"darwin"
|
|
36
|
+
]
|
|
37
|
+
},
|
|
38
|
+
"node_modules/@ccusage/ccusage-linux-arm64": {
|
|
39
|
+
"version": "20.0.36",
|
|
40
|
+
"resolved": "https://registry.npmjs.org/@ccusage/ccusage-linux-arm64/-/ccusage-linux-arm64-20.0.36.tgz",
|
|
41
|
+
"integrity": "sha512-4Z8x2E3QRq7Dioj6EbWwKIjE8D54QjN6uzDMo21nCr4igyQFi3f3vPGisWhaq7oLHS7dS4ICPPI0QmLf8BXV+g==",
|
|
42
|
+
"cpu": [
|
|
43
|
+
"arm64"
|
|
44
|
+
],
|
|
45
|
+
"license": "MIT",
|
|
46
|
+
"optional": true,
|
|
47
|
+
"os": [
|
|
48
|
+
"linux"
|
|
49
|
+
]
|
|
50
|
+
},
|
|
51
|
+
"node_modules/@ccusage/ccusage-linux-x64": {
|
|
52
|
+
"version": "20.0.36",
|
|
53
|
+
"resolved": "https://registry.npmjs.org/@ccusage/ccusage-linux-x64/-/ccusage-linux-x64-20.0.36.tgz",
|
|
54
|
+
"integrity": "sha512-j64jRL4cwqMUC7KLNggHvQr+DDv/Uh5MFRFgUNhk0+Z9WdcQFXSwMZqWWZ7nzTasEJFA1SuuJNEZ5r5WcDA5Vw==",
|
|
55
|
+
"cpu": [
|
|
56
|
+
"x64"
|
|
57
|
+
],
|
|
58
|
+
"license": "MIT",
|
|
59
|
+
"optional": true,
|
|
60
|
+
"os": [
|
|
61
|
+
"linux"
|
|
62
|
+
]
|
|
63
|
+
},
|
|
64
|
+
"node_modules/@ccusage/ccusage-win32-arm64": {
|
|
65
|
+
"version": "20.0.36",
|
|
66
|
+
"resolved": "https://registry.npmjs.org/@ccusage/ccusage-win32-arm64/-/ccusage-win32-arm64-20.0.36.tgz",
|
|
67
|
+
"integrity": "sha512-stKmGB8Y2TQTYDxm2WgDqe1G1/FcVxn3uT+b1r/WAGkhx1H/kaf6mLYHOVnTOL99y1faLCLQ+7OeoOUPiSWJOw==",
|
|
68
|
+
"cpu": [
|
|
69
|
+
"arm64"
|
|
70
|
+
],
|
|
71
|
+
"license": "MIT",
|
|
72
|
+
"optional": true,
|
|
73
|
+
"os": [
|
|
74
|
+
"win32"
|
|
75
|
+
]
|
|
76
|
+
},
|
|
77
|
+
"node_modules/@ccusage/ccusage-win32-x64": {
|
|
78
|
+
"version": "20.0.36",
|
|
79
|
+
"resolved": "https://registry.npmjs.org/@ccusage/ccusage-win32-x64/-/ccusage-win32-x64-20.0.36.tgz",
|
|
80
|
+
"integrity": "sha512-Z3S+5BsEDy4ztkZpsjjFHZ1COf8NVts7f2lQqSuFluh75G/0kC5dxHkCGOdJFsiWQjUDwfb7x00hDsgc33z1Vg==",
|
|
81
|
+
"cpu": [
|
|
82
|
+
"x64"
|
|
83
|
+
],
|
|
84
|
+
"license": "MIT",
|
|
85
|
+
"optional": true,
|
|
86
|
+
"os": [
|
|
87
|
+
"win32"
|
|
88
|
+
]
|
|
89
|
+
},
|
|
90
|
+
"node_modules/ccusage": {
|
|
91
|
+
"version": "20.0.36",
|
|
92
|
+
"resolved": "https://registry.npmjs.org/ccusage/-/ccusage-20.0.36.tgz",
|
|
93
|
+
"integrity": "sha512-V2XNlZCv5k/Tal91CoaglDq5m9YBt+MRNpgfrhAAUqkk84AMj3lS9WgKOWBJf+3ygUYm7GXOJ2XqF4Lxe1D7xQ==",
|
|
94
|
+
"license": "MIT",
|
|
95
|
+
"bin": {
|
|
96
|
+
"ccusage": "src/cli.js"
|
|
97
|
+
},
|
|
98
|
+
"funding": {
|
|
99
|
+
"url": "https://github.com/sponsors/ryoppippi"
|
|
100
|
+
},
|
|
101
|
+
"optionalDependencies": {
|
|
102
|
+
"@ccusage/ccusage-darwin-arm64": "20.0.36",
|
|
103
|
+
"@ccusage/ccusage-darwin-x64": "20.0.36",
|
|
104
|
+
"@ccusage/ccusage-linux-arm64": "20.0.36",
|
|
105
|
+
"@ccusage/ccusage-linux-x64": "20.0.36",
|
|
106
|
+
"@ccusage/ccusage-win32-arm64": "20.0.36",
|
|
107
|
+
"@ccusage/ccusage-win32-x64": "20.0.36"
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|