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 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.73.0` SDK contract. Development applications declare
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;
@@ -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.72.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 is written."
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "arcane-os",
3
- "version": "0.73.0",
3
+ "version": "0.74.0",
4
4
  "description": "Arcane OS JavaScript SDK, project-local CLI, browser runtime, and repository-portable application packager.",
5
5
  "type": "module",
6
6
  "main": "./src/index.mjs",
@@ -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(