arcane-os 0.73.0 → 0.74.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/CHANGELOG.md +10 -0
- package/README.md +1 -1
- package/docs/reference/README.md +1 -0
- package/docs/reference/core-repositories.md +38 -1
- package/docs/reference/inventory/package-api.json +3 -3
- package/docs/reference/sdk-api.md +10 -1
- package/package.json +1 -1
- package/src/core/repositories.mjs +9 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.74.0
|
|
4
|
+
|
|
5
|
+
- Add optional `longPaths` to `createRepositoryWorkspace()` for newly cloned
|
|
6
|
+
Windows repositories. Explicit true or false selects clone-local
|
|
7
|
+
`core.longpaths` before the first checkout and persists it in the new target.
|
|
8
|
+
- Preserve inherited and template configuration when the option is omitted,
|
|
9
|
+
existing repositories, non-Windows commands, and the ordinary single-clone
|
|
10
|
+
identity, progress, cancellation and hook lifecycle. No global setting,
|
|
11
|
+
repository migration, filename transformation or dependency change is added.
|
|
12
|
+
|
|
3
13
|
## 0.73.0
|
|
4
14
|
|
|
5
15
|
- Add public `resolvePwaRetirementResponse({workspaceRoot, appId})` for existing
|
package/README.md
CHANGED
|
@@ -20,7 +20,7 @@ selected SDK projection or an explicit live SDK source mount. Both profiles
|
|
|
20
20
|
share the theme, packaging, event, cancellation,
|
|
21
21
|
and browser run contracts while retaining their selected application layout.
|
|
22
22
|
|
|
23
|
-
This checkout defines the `0.
|
|
23
|
+
This checkout defines the `0.74.0` SDK contract. Development applications declare
|
|
24
24
|
`arcane-os` as `latest` and retain their lockfile. Exact SDK pins begin when Roshi
|
|
25
25
|
designates a production build. Follow [Consumer updates](docs/consumer-updates.md)
|
|
26
26
|
to refresh and compare the installed SDK and lockfile with the published channel;
|
package/docs/reference/README.md
CHANGED
|
@@ -44,6 +44,7 @@ alone does not make bare module names resolve in a browser.
|
|
|
44
44
|
| Install an app and cache selected resources offline | [Progressive web applications](pwa.md) |
|
|
45
45
|
| Disable source PWA generation or explicitly retire confirmed generated output | [Source PWA retirement](pwa.md#disable-source-pwa-generation-and-retire-generated-output) |
|
|
46
46
|
| Retire the prior worker after explicitly disabling standalone source PWA | [Disabled-worker browser lifecycle](pwa.md#disabled-worker-retirement-on-the-source-server) |
|
|
47
|
+
| Retire a disabled worker through an existing custom source host | [Public PWA retirement response](pwa.md#retirement-through-an-existing-custom-host) |
|
|
47
48
|
| Generate named browser imports or inspect the selected physical runtime | [`arcane import-map`](cli.md#arcane-import-map) and [browser runtime delivery](protocols.md#browser-runtime-delivery) |
|
|
48
49
|
| Connect an application through the shared WebSocket transport | [Shared WebSocket clients](websocket-client.md) |
|
|
49
50
|
| Choose browser, native, cloud, or cross-host behavior | [Availability and normalization](availability-and-normalization.md) |
|
|
@@ -47,7 +47,7 @@ const status = await repository.status({signal});
|
|
|
47
47
|
await repository.close();
|
|
48
48
|
```
|
|
49
49
|
|
|
50
|
-
`createRepositoryWorkspace({name,directory,dataRoot,remote,branch,gitIdentity,onEvent,run}={})`
|
|
50
|
+
`createRepositoryWorkspace({name,directory,dataRoot,remote,branch,longPaths,gitIdentity,onEvent,run}={})`
|
|
51
51
|
returns `{directory,open,status,configuration,pull,push,write,close,drain,dispose}`. The `directory`
|
|
52
52
|
property is the absolute selected working path.
|
|
53
53
|
|
|
@@ -63,6 +63,11 @@ property is the absolute selected working path.
|
|
|
63
63
|
`branch`, when supplied, is passed unchanged to Git's `clone --branch` option;
|
|
64
64
|
otherwise Git selects the remote's default branch. Existing checkouts keep
|
|
65
65
|
their own branch, remote, tracked files, untracked files and local changes.
|
|
66
|
+
- Optional `longPaths` is a boolean for newly cloned Windows checkouts. Explicit
|
|
67
|
+
`true` or `false` supplies `clone --config core.longpaths=<value>`, so Git
|
|
68
|
+
writes that choice to the new repository before its first checkout. Omission
|
|
69
|
+
leaves Git's configuration unchanged. The option does not rewrite an existing
|
|
70
|
+
checkout, change a global setting, or alter non-Windows clone commands.
|
|
66
71
|
- `onEvent` and optional `run` use the existing SDK process owner. The default
|
|
67
72
|
adapter is `runProcess`; Git must be available on PATH. Credentials and
|
|
68
73
|
authentication remain with Git and the native host. The SDK adds no download,
|
|
@@ -90,6 +95,38 @@ A failed or cancelled clone reports the actual failure; any remaining directory
|
|
|
90
95
|
is retained for application-owned inspection. There is no automatic deletion or
|
|
91
96
|
destructive retry. Filesystem failures and complete Git diagnostics propagate.
|
|
92
97
|
|
|
98
|
+
### Windows long paths for a new checkout
|
|
99
|
+
|
|
100
|
+
Select the option in the application's native repository connection:
|
|
101
|
+
|
|
102
|
+
```javascript
|
|
103
|
+
const repository = createRepositoryWorkspace({
|
|
104
|
+
name: 'moon-cheese-dispatches',
|
|
105
|
+
remote: applicationConnection.remote,
|
|
106
|
+
longPaths: true
|
|
107
|
+
});
|
|
108
|
+
await repository.open({signal});
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
This remains one ordinary Git clone, including its branch/tag selection,
|
|
112
|
+
progress, hooks, cancellation and empty-remote behavior. It does not clone
|
|
113
|
+
without checkout and run a second initialization sequence. The boolean is
|
|
114
|
+
captured when the owner is constructed; later edits to the options object
|
|
115
|
+
cannot change an accepted connection.
|
|
116
|
+
|
|
117
|
+
An explicit value intentionally selects the new repository's local
|
|
118
|
+
`core.longpaths` setting. Git's ordinary configuration precedence still applies,
|
|
119
|
+
including higher-priority command-scope settings supplied by the native host.
|
|
120
|
+
Omit the option to retain inherited or template configuration without an SDK
|
|
121
|
+
override. Existing repositories retain their settings even if this option is
|
|
122
|
+
supplied; there is no configuration migration or repair pass.
|
|
123
|
+
|
|
124
|
+
[Git documents clone-local configuration before the initial checkout](https://git-scm.com/docs/git-clone#OPTIONS).
|
|
125
|
+
[Git for Windows describes long-path support](https://gitforwindows.org/git-cannot-create-a-file-or-directory-with-a-long-path.html)
|
|
126
|
+
for its native commands; unrelated editors, scripts and host tools may have
|
|
127
|
+
their own path limitations. This option changes no filenames or payloads and
|
|
128
|
+
does not change the SDK's persistent directory selection.
|
|
129
|
+
|
|
93
130
|
## Existing checkout configuration and selected targets
|
|
94
131
|
|
|
95
132
|
`configuration({signal}={})` observes an existing checkout without invoking
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 1,
|
|
3
|
-
"sdkVersion": "0.
|
|
3
|
+
"sdkVersion": "0.73.0",
|
|
4
4
|
"environment": {
|
|
5
5
|
"runtime": "Node.js for Node entrypoints; browser for browser-only entrypoints",
|
|
6
6
|
"minimumVersion": "22.23.2 for Node entrypoints",
|
|
@@ -199,14 +199,14 @@
|
|
|
199
199
|
"name": "createRepositoryWorkspace",
|
|
200
200
|
"displayName": "createRepositoryWorkspace()",
|
|
201
201
|
"kind": "function",
|
|
202
|
-
"signature": "createRepositoryWorkspace({name,directory,dataRoot,remote,branch,gitIdentity,onEvent,run=runProcess}={})",
|
|
202
|
+
"signature": "createRepositoryWorkspace({name,directory,dataRoot,remote,branch,longPaths,gitIdentity,onEvent,run=runProcess}={})",
|
|
203
203
|
"entrypoints": ["arcane-os/core/repositories"],
|
|
204
204
|
"primaryImport": "arcane-os/core/repositories",
|
|
205
205
|
"group": "Native repository workspaces",
|
|
206
206
|
"summary": "Owns one selected native working checkout with ArcaneData/Repos defaults and existing Git/process lifecycle.",
|
|
207
207
|
"availability": "Node with Git on Windows, Linux and macOS; Android requires host process adaptation",
|
|
208
208
|
"protocol": "Git working repository and SDK process adapter",
|
|
209
|
-
"normalization": "Returns directory, open, status, configuration, pull, push, write and identical close/drain/dispose hooks. Only missing or empty destinations clone; existing roots are preserved. configuration observes the existing root, symbolic HEAD, origin URL/pushURL arrays and branch remote/merge/upstream URL arrays without clone/init/fetch, preserving unset, empty and repeated values. Explicit paths remain selected. Same-directory operations serialize within the process; cancellation and shutdown join accepted process work. pull/push/write accept a captured target {remote,ref} for current-branch fast-forward pull or non-force current-HEAD selected-ref push; omission retains ordinary configured behavior. write snapshots exact text and paths, stages/commits only literal owned paths and preserves unrelated staged files and Git filters. Complete outputs and causal failures retain confirmed local/committed/pushed and uncertain outcomes plus the supplied target. Optional gitIdentity captures name/email/username for child Git operations only; omitted fields remain inherited and no config file
|
|
209
|
+
"normalization": "Returns directory, open, status, configuration, pull, push, write and identical close/drain/dispose hooks. Only missing or empty destinations clone; existing roots are preserved. Optional longPaths captures a boolean: explicit Windows true/false supplies clone-local core.longpaths before the first checkout, persisting only in the new repository under ordinary Git configuration precedence. Omission preserves configuration; existing repositories and non-Windows clone commands remain unchanged. No global setting or migration. configuration observes the existing root, symbolic HEAD, origin URL/pushURL arrays and branch remote/merge/upstream URL arrays without clone/init/fetch, preserving unset, empty and repeated values. Explicit paths remain selected. Same-directory operations serialize within the process; cancellation and shutdown join accepted process work. pull/push/write accept a captured target {remote,ref} for current-branch fast-forward pull or non-force current-HEAD selected-ref push; omission retains ordinary configured behavior. write snapshots exact text and paths, stages/commits only literal owned paths and preserves unrelated staged files and Git filters. Complete outputs and causal failures retain confirmed local/committed/pushed and uncertain outcomes plus the supplied target. Optional gitIdentity captures name/email/username for child Git operations only; omitted fields remain inherited and identity selection writes no config file."
|
|
210
210
|
},
|
|
211
211
|
{
|
|
212
212
|
"id": "core-repositories:readGitIdentity",
|
|
@@ -319,6 +319,7 @@ The remaining data-only subpaths are eight JSON Schemas and package metadata.
|
|
|
319
319
|
| `repositoryPush()` | function | `arcane-os` | Workspace, doctor, repository, and server | Node; network-assisted Git |
|
|
320
320
|
| `repositoryStatus()` | function | `arcane-os` | Workspace, doctor, repository, and server | Node |
|
|
321
321
|
| `resolveNativeBuildOutputRoot()` | function | `arcane-os` | Targets, native plans, and providers | Node; selected browser/native target or provider as documented |
|
|
322
|
+
| `resolvePwaRetirementResponse()` | function | `arcane-os` | Workspace, doctor, repository, and server | Node; browser service-worker lifecycle remains browser-owned |
|
|
322
323
|
| `resolveWorkspace()` | function | `arcane-os` | Workspace, doctor, repository, and server | Node |
|
|
323
324
|
| `ROOT_CONFIG_NAME` | constant | `arcane-os/packager` | Packaging and release bundles | Node |
|
|
324
325
|
| `discoverApps()` | function | `arcane-os` | Workspace, doctor, repository, and server | Node |
|
|
@@ -8095,7 +8096,7 @@ explicit existing path. The application owns the remote, branch and Core API.
|
|
|
8095
8096
|
### Signature and result
|
|
8096
8097
|
|
|
8097
8098
|
```text
|
|
8098
|
-
createRepositoryWorkspace({name,directory,dataRoot,remote,branch,gitIdentity,onEvent,run=runProcess}={})
|
|
8099
|
+
createRepositoryWorkspace({name,directory,dataRoot,remote,branch,longPaths,gitIdentity,onEvent,run=runProcess}={})
|
|
8099
8100
|
```
|
|
8100
8101
|
|
|
8101
8102
|
Returns `{directory,open,status,configuration,pull,push,write,close,drain,dispose}`. Construction does
|
|
@@ -8106,6 +8107,14 @@ work and preserves the checkout. No CLI cwd, launch state, preference, snapshot
|
|
|
8106
8107
|
cache or existing user-data location changes. See the [complete inputs, results,
|
|
8107
8108
|
errors and lifecycle](core-repositories.md#one-connected-working-checkout).
|
|
8108
8109
|
|
|
8110
|
+
Optional `longPaths` captures a boolean for new Windows clones. Explicit true
|
|
8111
|
+
or false supplies clone-local `core.longpaths` before the first checkout and
|
|
8112
|
+
persists it only in the new repository. Omission preserves inherited/template
|
|
8113
|
+
configuration. Existing repositories and non-Windows clone commands remain
|
|
8114
|
+
unchanged; no global setting or data migration is performed. Git's ordinary
|
|
8115
|
+
configuration precedence, hooks and single-clone lifecycle remain in effect.
|
|
8116
|
+
See [Windows long paths](core-repositories.md#windows-long-paths-for-a-new-checkout).
|
|
8117
|
+
|
|
8109
8118
|
Optional `gitIdentity:{name?,email?,username?}` captures explicit non-secret
|
|
8110
8119
|
settings for child Git operations without writing global/local configuration.
|
|
8111
8120
|
Selected author fields override inherited child author/committer fields;
|
package/package.json
CHANGED
|
@@ -45,7 +45,7 @@ export function resolveArcaneDataPaths({dataRoot} = {}) {
|
|
|
45
45
|
|
|
46
46
|
/** One connected checkout, composed into an application's own Core service. */
|
|
47
47
|
export function createRepositoryWorkspace(
|
|
48
|
-
{name, directory, dataRoot, remote, branch, gitIdentity, onEvent, run = runProcess} = {}
|
|
48
|
+
{name, directory, dataRoot, remote, branch, longPaths, gitIdentity, onEvent, run = runProcess} = {}
|
|
49
49
|
) {
|
|
50
50
|
let selected = directory;
|
|
51
51
|
if (selected === undefined) {
|
|
@@ -58,6 +58,9 @@ export function createRepositoryWorkspace(
|
|
|
58
58
|
requireString(selected, 'directory');
|
|
59
59
|
if (remote !== undefined) requireString(remote, 'remote');
|
|
60
60
|
if (branch !== undefined) requireString(branch, 'branch');
|
|
61
|
+
if (longPaths !== undefined && !is.boolean(longPaths)) {
|
|
62
|
+
throw new TypeError('longPaths must be a boolean when supplied.');
|
|
63
|
+
}
|
|
61
64
|
if (!is.function(run)) throw new TypeError('run must implement the SDK process adapter.');
|
|
62
65
|
const execute = createGitIdentityRunner(run, gitIdentity);
|
|
63
66
|
const repositoryDirectory = path.resolve(selected);
|
|
@@ -100,6 +103,11 @@ export function createRepositoryWorkspace(
|
|
|
100
103
|
await mkdir(path.dirname(repositoryDirectory), {recursive: true});
|
|
101
104
|
throwIfAborted(signal);
|
|
102
105
|
const arguments_ = ['clone', '--progress'];
|
|
106
|
+
// Clone-local configuration persists before the first checkout. Omission
|
|
107
|
+
// leaves inherited settings alone; existing repositories never reach here.
|
|
108
|
+
if (process.platform === 'win32' && longPaths !== undefined) {
|
|
109
|
+
arguments_.push('--config', `core.longpaths=${longPaths}`);
|
|
110
|
+
}
|
|
103
111
|
if (branch !== undefined) arguments_.push('--branch', branch);
|
|
104
112
|
arguments_.push('--', remote, repositoryDirectory);
|
|
105
113
|
const result = await prepareRun(
|