@skaile/workspaces 0.22.0-beta.2 → 0.22.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 +295 -0
- package/dist/{asset-feeds-2M6UKEJ7.js → asset-feeds-Y2CDCM3W.js} +8 -8
- package/dist/{asset-feeds-2M6UKEJ7.js.map → asset-feeds-Y2CDCM3W.js.map} +1 -1
- package/dist/asset-manager/index.js +6 -6
- package/dist/asset-manager/installer.js +5 -5
- package/dist/base-assets/connectors/deploy.js +6 -6
- package/dist/base-assets/connectors/devserver.js +6 -6
- package/dist/base-assets/connectors/flow/adapter.js +6 -6
- package/dist/base-assets/connectors/flow/run-flow.js +7 -7
- package/dist/base-assets/connectors/flow.js +6 -6
- package/dist/base-assets/connectors/git.js +6 -6
- package/dist/base-assets/connectors/gmail.js +6 -6
- package/dist/base-assets/connectors/googledrive.js +6 -6
- package/dist/base-assets/connectors/local.js +6 -6
- package/dist/base-assets/connectors/mattermost.js +6 -6
- package/dist/base-assets/connectors/memory.js +6 -6
- package/dist/base-assets/connectors/minio.js +6 -6
- package/dist/base-assets/connectors/postgres.js +6 -6
- package/dist/base-assets/connectors/s3.js +6 -6
- package/dist/base-assets/connectors/sharepoint.js +6 -6
- package/dist/base-assets/connectors/sqlite.js +6 -6
- package/dist/base-assets/connectors/static-server.js +6 -6
- package/dist/base-assets/connectors/tunnel.js +6 -6
- package/dist/base-assets/connectors/webdav.js +6 -6
- package/dist/base-assets/connectors/xstate-store.js +6 -6
- package/dist/base-assets/connectors/xstate.js +6 -6
- package/dist/{chunk-LDLZFYLR.js → chunk-2RYQERIT.js} +4 -4
- package/dist/{chunk-LDLZFYLR.js.map → chunk-2RYQERIT.js.map} +1 -1
- package/dist/{chunk-3KLWGHDE.js → chunk-53UNDY6K.js} +5 -5
- package/dist/{chunk-3KLWGHDE.js.map → chunk-53UNDY6K.js.map} +1 -1
- package/dist/{chunk-TWQPDBHB.js → chunk-7HSXUKNB.js} +6 -6
- package/dist/{chunk-TWQPDBHB.js.map → chunk-7HSXUKNB.js.map} +1 -1
- package/dist/{chunk-P4FYHEHW.js → chunk-ETMUGBHF.js} +3 -3
- package/dist/{chunk-P4FYHEHW.js.map → chunk-ETMUGBHF.js.map} +1 -1
- package/dist/{chunk-CEUHU3C4.js → chunk-JN2CUVSU.js} +3 -3
- package/dist/{chunk-CEUHU3C4.js.map → chunk-JN2CUVSU.js.map} +1 -1
- package/dist/{chunk-UBLTUFFI.js → chunk-K2HDYSAM.js} +4 -4
- package/dist/{chunk-UBLTUFFI.js.map → chunk-K2HDYSAM.js.map} +1 -1
- package/dist/{chunk-NQL3T75I.js → chunk-K7WPR77X.js} +21 -3
- package/dist/chunk-K7WPR77X.js.map +1 -0
- package/dist/{chunk-I5SGBFMM.js → chunk-MNAHNDUI.js} +3 -3
- package/dist/{chunk-I5SGBFMM.js.map → chunk-MNAHNDUI.js.map} +1 -1
- package/dist/{chunk-M5JDVO6D.js → chunk-NBJ5TOEC.js} +3 -3
- package/dist/{chunk-M5JDVO6D.js.map → chunk-NBJ5TOEC.js.map} +1 -1
- package/dist/{chunk-FIHVQFXB.js → chunk-NDD5VMN5.js} +2 -2
- package/dist/{chunk-FIHVQFXB.js.map → chunk-NDD5VMN5.js.map} +1 -1
- package/dist/{chunk-6SA2SIOU.js → chunk-OJN25VJO.js} +4 -4
- package/dist/{chunk-6SA2SIOU.js.map → chunk-OJN25VJO.js.map} +1 -1
- package/dist/{chunk-74GTZ4TJ.js → chunk-PFOXL4SH.js} +4 -4
- package/dist/{chunk-74GTZ4TJ.js.map → chunk-PFOXL4SH.js.map} +1 -1
- package/dist/{chunk-NICAMYPV.js → chunk-SKXCTV55.js} +8 -8
- package/dist/{chunk-NICAMYPV.js.map → chunk-SKXCTV55.js.map} +1 -1
- package/dist/{chunk-LDYPQVRU.js → chunk-V5TBKO5Q.js} +44 -11
- package/dist/chunk-V5TBKO5Q.js.map +1 -0
- package/dist/{chunk-FVZLCBSX.js → chunk-WH2EB2SF.js} +3 -3
- package/dist/{chunk-FVZLCBSX.js.map → chunk-WH2EB2SF.js.map} +1 -1
- package/dist/cli/index.js +41 -36
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/src/commands/manage.d.ts +1 -1
- package/dist/cli/src/commands/manage.d.ts.map +1 -1
- package/dist/connectors/config.js +5 -5
- package/dist/connectors/index.js +6 -6
- package/dist/core/index.js +4 -4
- package/dist/core/manifest.js +1 -1
- package/dist/core/runtime-assets.js +3 -3
- package/dist/core/src/index.d.ts +2 -2
- package/dist/core/src/index.d.ts.map +1 -1
- package/dist/core/src/manifest.d.ts +16 -0
- package/dist/core/src/manifest.d.ts.map +1 -1
- package/dist/core/src/repo-manager.d.ts.map +1 -1
- package/dist/core/src/walker.d.ts +4 -0
- package/dist/core/src/walker.d.ts.map +1 -1
- package/dist/core/src/workspace-config.d.ts +14 -0
- package/dist/core/src/workspace-config.d.ts.map +1 -1
- package/dist/core/workspace-config.js +2 -2
- package/dist/deploy/index.js +4 -4
- package/dist/discovery/index.js +2 -2
- package/dist/{ensure-sources-ALTI5PXR.js → ensure-sources-REWWBH2K.js} +8 -8
- package/dist/{ensure-sources-ALTI5PXR.js.map → ensure-sources-REWWBH2K.js.map} +1 -1
- package/dist/library/index.js +3 -3
- package/dist/{open-library-EEGG6RDN.js → open-library-CT4VVESU.js} +6 -6
- package/dist/{open-library-EEGG6RDN.js.map → open-library-CT4VVESU.js.map} +1 -1
- package/dist/{plugin-store-G277ZX3B.js → plugin-store-QS7TC5HY.js} +6 -6
- package/dist/{plugin-store-G277ZX3B.js.map → plugin-store-QS7TC5HY.js.map} +1 -1
- package/dist/runner/index.js +8 -8
- package/dist/sdk/asset-manager.js +6 -6
- package/dist/sdk/core.js +4 -4
- package/dist/sdk/index.js +8 -8
- package/dist/sdk/runner.js +8 -8
- package/dist/{setup-REX4I5NE.js → setup-F6DGKL7J.js} +6 -6
- package/dist/{setup-REX4I5NE.js.map → setup-F6DGKL7J.js.map} +1 -1
- package/dist/store-client-JP642EEI.js +14 -0
- package/dist/{store-client-IX3Y67NK.js.map → store-client-JP642EEI.js.map} +1 -1
- package/dist/tui/index.js +8 -8
- package/dist/workspace-plugin/index.js +1 -1
- package/package.json +1 -1
- package/dist/chunk-LDYPQVRU.js.map +0 -1
- package/dist/chunk-NQL3T75I.js.map +0 -1
- package/dist/store-client-IX3Y67NK.js +0 -14
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,300 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.22.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- [#70](https://github.com/skaile-ai/workspaces/pull/70) [`f44674b`](https://github.com/skaile-ai/workspaces/commit/f44674bd72f9231f1d429152ba683ae1e4dc20df) Thanks [@Frozen666](https://github.com/Frozen666)! - Add `network: NetworkPolicy` field on `AgentPermissions` (modes `open` /
|
|
8
|
+
`off` / `allowlist`). Consumed by the platform's per-session egress
|
|
9
|
+
firewall; the codec is permissive (round-trips unknown shapes) and emits
|
|
10
|
+
warning diagnostics for unrecognized `mode` values and for `allowlist`
|
|
11
|
+
entries set under non-`allowlist` modes.
|
|
12
|
+
|
|
13
|
+
- [`cd5b3b3`](https://github.com/skaile-ai/workspaces/commit/cd5b3b39ed6e65f0124d5cda81fc791ddd1c25e5) Thanks [@mortegro](https://github.com/mortegro)! - Asset display: regroup the `skaile manage` TUI as **publisher → repo → asset**.
|
|
14
|
+
|
|
15
|
+
The derived `domain` axis (first-level directory of a scanned repo) is replaced
|
|
16
|
+
by `repo` — the real `"<org>/<repo>"` GitHub coordinate. `category` is demoted
|
|
17
|
+
out of the tree to a row badge.
|
|
18
|
+
|
|
19
|
+
- `plugins` — `CatalogAsset` gains optional `repo?`.
|
|
20
|
+
- `core` — `CatalogEntry` drops `domain`, gains `repo?` and `category?`.
|
|
21
|
+
`entryFromRaw` reads `repo` with a one-release legacy-`domain` read-fallback
|
|
22
|
+
(stale `catalog.yaml` caches self-heal on next write). `scanRepo` derives
|
|
23
|
+
`repo` once from the scanned root's git remote (`repoSlugFromGitRemote`) and
|
|
24
|
+
stamps it onto every entry; `scanDirectory` no longer emits a per-asset
|
|
25
|
+
`domain`.
|
|
26
|
+
- `library` — `RemoteCatalogSource` threads the store's `repo` through.
|
|
27
|
+
- `cli` — `manage` regroups to publisher → repo → asset with category badges;
|
|
28
|
+
the `asset-feeds` store mapping now carries `publisher`/`repo`/`category`
|
|
29
|
+
(fixing the bug that mis-shelved every remote asset under `other`).
|
|
30
|
+
|
|
31
|
+
Local libraries with no git remote (and non-GitHub sources) have no `repo`;
|
|
32
|
+
their assets group directly under the publisher.
|
|
33
|
+
|
|
34
|
+
- [#71](https://github.com/skaile-ai/workspaces/pull/71) [`fb32a60`](https://github.com/skaile-ai/workspaces/commit/fb32a6028ce1c0639c3339e8561ba72dcd24388f) Thanks [@mortegro](https://github.com/mortegro)! - Deploy contract: add a generic per-session injection channel and a built-in
|
|
35
|
+
`nix` target, so a host (e.g. skaile-platform) can drive every deploy target
|
|
36
|
+
uniformly without forking the decision in its own code.
|
|
37
|
+
|
|
38
|
+
- `DeployContext` gains optional `mounts` / `labels` / `resources`
|
|
39
|
+
(`@skaile/workspaces/plugin-registry`, with new `DeployMount` / `DeployResources`
|
|
40
|
+
types). Container built-ins (`docker` / `podman`) map them to `-v` / `--label`
|
|
41
|
+
/ `--cpus` / `--memory` / `--pids-limit`; the process built-ins ignore mounts.
|
|
42
|
+
Target-specific policy (apparmor, FUSE, fleet binds, …) stays in each target's
|
|
43
|
+
own `configSchema` — it never enters this shared context.
|
|
44
|
+
- `local` now also merges `ctx.env` into the spawned process env (`config.env`
|
|
45
|
+
still wins).
|
|
46
|
+
- New built-in `nixDeployTarget` (id `nix`) runs `skaile serve` inside a
|
|
47
|
+
`nix shell` over `ws://127.0.0.1:<port>`; registered by
|
|
48
|
+
`registerBuiltinDeployTargets()`. Exports `nixDeployTarget` + the pure
|
|
49
|
+
`buildNixArgs()` from `@skaile/workspaces/deploy`. Generic on purpose
|
|
50
|
+
(`flakeRef` + `stackAttr` only).
|
|
51
|
+
|
|
52
|
+
- [`ce3f33f`](https://github.com/skaile-ai/workspaces/commit/ce3f33f5b85f81d1c80689a99a8e63cf0c2afc07) Thanks [@mortegro](https://github.com/mortegro)! - Fix deploy-handle readiness timeout + dedupe deploy-target helpers.
|
|
53
|
+
|
|
54
|
+
- **Fix:** `DeployHandle.waitReady(timeoutMs)` silently ignored its `timeoutMs`
|
|
55
|
+
argument in the fly / k8s / vercel-sandbox targets, always using a hard-coded
|
|
56
|
+
internal deadline. The caller's timeout is now honored.
|
|
57
|
+
- **Fix (`@skaile/provider-fly`):** `deleteMachine` swallowed _all_ errors while
|
|
58
|
+
only intending to ignore a 404, so `stop()` could falsely report success on a
|
|
59
|
+
still-running (still-billing) machine. Non-404 errors now propagate.
|
|
60
|
+
- **Added (`@skaile/workspaces/plugin-registry`):** shared deploy helpers —
|
|
61
|
+
`buildStrategySchema` / `BuildStrategy`, abort-aware `sleep`, generic
|
|
62
|
+
`pollUntil`, and the `makeDeployHandle` factory — replacing the per-provider
|
|
63
|
+
copies of the sleep loop, handle wrapper, and build-strategy enum.
|
|
64
|
+
|
|
65
|
+
- [#65](https://github.com/skaile-ai/workspaces/pull/65) [`2af2e52`](https://github.com/skaile-ai/workspaces/commit/2af2e525588648e45a14fb8acdfde72f1ebb57e8) Thanks [@mortegro](https://github.com/mortegro)! - Add `listDeployTargets()` / `getDeployTarget()` to
|
|
66
|
+
`@skaile/workspaces/plugin-registry`, the symmetric counterparts to
|
|
67
|
+
`listDrivers()` / `listConnectors()` so UIs can enumerate all three plugin kinds
|
|
68
|
+
uniformly. Both default to the process-wide `pluginRegistry`;
|
|
69
|
+
`listDeployTargets()` returns lightweight `{ id, displayName }` rows and
|
|
70
|
+
`getDeployTarget(id)` returns the full target without the override/yaml/default
|
|
71
|
+
precedence `resolveDeployTarget` applies.
|
|
72
|
+
|
|
73
|
+
Docs (`docs/deploy/`): documented the container-target image lifecycle — that
|
|
74
|
+
`buildStrategy: "local"` is bring-your-own-image (`create()` never builds), how
|
|
75
|
+
`pullPolicy` interacts with a locally-built vs. registry-published image, that
|
|
76
|
+
`workspace.container.{packages,agent_clis,stack,nix}` are image-build inputs
|
|
77
|
+
distinct from the deploy `config.image` (with skaile-platform's
|
|
78
|
+
`skaile-vm-agent:thin` / Nix-stack model as the reference), and that the
|
|
79
|
+
in-process runtime is deliberately out of scope for the deploy abstraction
|
|
80
|
+
(no `wsUrl`).
|
|
81
|
+
|
|
82
|
+
- [#67](https://github.com/skaile-ai/workspaces/pull/67) [`c67a381`](https://github.com/skaile-ai/workspaces/commit/c67a381f1029bec547531e238d235636eef16740) Thanks [@mortegro](https://github.com/mortegro)! - Canonical-identity manifest architecture (BREAKING).
|
|
83
|
+
|
|
84
|
+
Schema:
|
|
85
|
+
|
|
86
|
+
- `skaile.yaml` top-level keys `repositories:` and `ai_resources:` are removed
|
|
87
|
+
and now throw a parse error pointing at `docs/concepts/manifest-schema.md` and
|
|
88
|
+
the `migrate-skaile-manifest` skill.
|
|
89
|
+
- New publication half: `publisher`, `version`, `assets[]`.
|
|
90
|
+
- New consumption half: collapsed `sources:[{url, pin?}]` (no `name`),
|
|
91
|
+
`stores:[{url}]`, `dependencies:[<kind>:<name>@<publisher>[#pin]]`,
|
|
92
|
+
`overrides:[{ref, source, reason}]` with required `reason:`.
|
|
93
|
+
|
|
94
|
+
Dep ref grammar:
|
|
95
|
+
|
|
96
|
+
- Canonical form `kind:name@<publisher>[#pin]`. `publisher` is required and
|
|
97
|
+
GitHub-shaped. Pins accept SemVer constraints (^, ~, x), exact SemVer, a
|
|
98
|
+
40-char SHA, or absent. Floating refs (main/latest/HEAD) throw.
|
|
99
|
+
|
|
100
|
+
Resolution:
|
|
101
|
+
|
|
102
|
+
- The resolver collects candidates from every source clone (via the new
|
|
103
|
+
provenance-index walker) and optionally every store. Divergent sha256 at the
|
|
104
|
+
same (publisher, kind, name, version) is a hard error
|
|
105
|
+
(`CanonicalRefConflictError`) with a dep-chain walk. `overrides[]` pin a
|
|
106
|
+
chosen source and flag `override_applied: true` on the lock entry. A cheap
|
|
107
|
+
`catalog.getCanonicalDigest` probe cross-checks source vs store at the same
|
|
108
|
+
version. `resolveAll` is now async.
|
|
109
|
+
|
|
110
|
+
Lock file:
|
|
111
|
+
|
|
112
|
+
- Schema v2. Keys are canonical refs `<publisher>/<kind>:<name>@<version>`;
|
|
113
|
+
values carry `sha256`, `source.{url, commit}`, `files[]`, `override_applied`.
|
|
114
|
+
Top-level `sources:` records every contributing URL+commit. Old v1 lockfiles
|
|
115
|
+
must be deleted and regenerated; the reader emits a clear error.
|
|
116
|
+
|
|
117
|
+
Types:
|
|
118
|
+
|
|
119
|
+
- `AssetRef.repository` → `AssetRef.publisher` (and `CatalogEntry.publisher`).
|
|
120
|
+
- `RepositoryDeclaration` → `SourceDeclaration`.
|
|
121
|
+
- `LockEntry` reshaped; new `LockSourceEntry`, `LockFileEntry`,
|
|
122
|
+
`StoreEntry`, `AssetEntry`, `OverrideEntry`.
|
|
123
|
+
- `RemoteCatalogSource.getCanonicalDigest(ref)` added.
|
|
124
|
+
|
|
125
|
+
Migration:
|
|
126
|
+
|
|
127
|
+
- No `skaile manifest migrate` CLI command. The transform is performed by the
|
|
128
|
+
`migrate-skaile-manifest` skill (lives in `ai-assets`).
|
|
129
|
+
|
|
130
|
+
- [#53](https://github.com/skaile-ai/workspaces/pull/53) [`4e3c2b2`](https://github.com/skaile-ai/workspaces/commit/4e3c2b27ed6a004e7b9c3d60b0ae3754a8192eb5) Thanks [@peteralbert](https://github.com/peteralbert)! - Support the BYO-flake recipe form on `AssetRecipe`.
|
|
131
|
+
|
|
132
|
+
- `AssetRecipe` gains optional `flake` (the asset's own flake: `"."` or a flake URL) and
|
|
133
|
+
`publisher` fields; `attr` is now optional and defaults to `"default"` for the flake form
|
|
134
|
+
(the legacy `{ attr }` platform-flake form is unchanged and still requires `attr`).
|
|
135
|
+
- New `validateAssetRecipeFlake` validates the flake source shape (`"."`, `github:`,
|
|
136
|
+
`git+https://`, `git+ssh://`, `path:`; rejects bare paths, traversal, unknown schemes, and
|
|
137
|
+
shell metacharacters). Exported alongside `DEFAULT_RECIPE_ATTR`.
|
|
138
|
+
- `mcpDeclFromCatalogEntry` carries `flake`/`publisher` onto the decl; an invalid flake drops
|
|
139
|
+
the whole recipe (no silent fall back to a platform-flake attr).
|
|
140
|
+
- The runner resolves a flake-sourced recipe by `mcps.<id>` (the recipe id) rather than `attr`,
|
|
141
|
+
since BYO-flake recipes all build `#default` and `attr` is not a unique map key.
|
|
142
|
+
|
|
143
|
+
- [`edaca8f`](https://github.com/skaile-ai/workspaces/commit/edaca8f351dd4d044bc2034c8f10b394a8ab9f43) Thanks [@mortegro](https://github.com/mortegro)! - Restore transitive bundle-member expansion in the canonical-identity resolver.
|
|
144
|
+
|
|
145
|
+
The resolver rewrite dropped the requires/dependencies recursion, so adding a
|
|
146
|
+
bundle resolved only the bundle marker and deployed **zero** members. The
|
|
147
|
+
provenance walker now populates `ProvenanceCandidate.deps` for bundle
|
|
148
|
+
candidates (parsed from the `.bundle.yaml` / `BUNDLE.md` `requires` +
|
|
149
|
+
`dependencies`), and `resolveAll` recurses into them — so a tier bundle pulls
|
|
150
|
+
its full inheritance chain and every leaf skill (arbitrary depth, deduped via
|
|
151
|
+
the existing `seen` set). Bare transitive refs inherit the parent bundle's
|
|
152
|
+
publisher.
|
|
153
|
+
|
|
154
|
+
- `core/manifest` — new `bundleDepRefs(filePath)` returns a bundle's raw
|
|
155
|
+
canonical dep refs (publisher/pin preserved; unlike `parseRequires`).
|
|
156
|
+
- `core/walker` — `ProvenanceCandidate` gains `deps?: string[]`, populated for
|
|
157
|
+
bundles in both the manifest and filename-convention walk paths.
|
|
158
|
+
- `core/repo-manager` — `resolveAll.visit` recurses into `chosen.deps`,
|
|
159
|
+
qualifying bare refs with the parent publisher.
|
|
160
|
+
|
|
161
|
+
Non-bundle candidates are unaffected (no `deps`), so legacy skill frontmatter
|
|
162
|
+
`requires` are not auto-expanded.
|
|
163
|
+
|
|
164
|
+
- [`e219bf1`](https://github.com/skaile-ai/workspaces/commit/e219bf1a483538b2e6a8538ab87bda8c5063ad21) Thanks [@mortegro](https://github.com/mortegro)! - CLI: `skaile source add` now accepts GitHub shorthand — a bare `<name>`
|
|
165
|
+
resolves to `git@github.com:skaile-ai/<name>.git` and `<owner>/<repo>` to
|
|
166
|
+
`git@github.com:<owner>/<repo>.git`; full URLs and scp-style specs pass through
|
|
167
|
+
unchanged.
|
|
168
|
+
|
|
169
|
+
CLI: fixed `skaile npx skills add <url> --skill <name>` (the npx compatibility
|
|
170
|
+
shim) under the canonical-identity model. It now clones into the canonical
|
|
171
|
+
sources cache (`~/.skaile/sources/<slug>`), registers the source in the
|
|
172
|
+
project's `skaile.yaml` `sources[]`, builds a publisher-qualified ref
|
|
173
|
+
(`skill:<name>@<publisher>`, publisher from the source's `skaile.yaml` or its
|
|
174
|
+
GitHub org), and maps a requested SKILL.md `name:` to the directory the
|
|
175
|
+
canonical resolver keys by.
|
|
176
|
+
|
|
177
|
+
- [#54](https://github.com/skaile-ai/workspaces/pull/54) [`7bdaf11`](https://github.com/skaile-ai/workspaces/commit/7bdaf115c251136288a94a7f880b3a0f52145be8) Thanks [@mortegro](https://github.com/mortegro)! - Unified plugin registry + deploy providers.
|
|
178
|
+
|
|
179
|
+
**Breaking**
|
|
180
|
+
|
|
181
|
+
- Removed the external `registerDriver` / `registerConnector` APIs. Register a
|
|
182
|
+
typed target via `pluginRegistry.register(kind, target)` instead
|
|
183
|
+
(`@skaile/workspaces/plugin-registry`). `createDriver` / `getConnector` /
|
|
184
|
+
`listConnectors` survive as resolve-only wrappers.
|
|
185
|
+
- Dropped `ioredis` and `yjs` runtime deps and the bundled `redis` / `yjs`
|
|
186
|
+
connectors. Install `@skaile/connector-redis` / `@skaile/connector-yjs` via
|
|
187
|
+
`skaile plugin install`.
|
|
188
|
+
- Renamed the coding-agent adapter command `skaile plugin` →
|
|
189
|
+
`skaile integration` (install/uninstall/enable/disable/status/hook). The
|
|
190
|
+
`skaile plugin` name now manages registry plugins.
|
|
191
|
+
|
|
192
|
+
**Added**
|
|
193
|
+
|
|
194
|
+
- `@skaile/workspaces/plugin-registry` — one process-wide `pluginRegistry` with
|
|
195
|
+
three kinds (driver / connector / deployTarget), the Target contracts,
|
|
196
|
+
`DeployHandle` / `DeployContext`, and `resolveDeployTarget` (override > yaml >
|
|
197
|
+
default precedence).
|
|
198
|
+
- `@skaile/workspaces/deploy` — built-in `local` / `docker` / `podman` deploy
|
|
199
|
+
targets (loopback-only), `registerBuiltinDeployTargets()`, and the
|
|
200
|
+
`.skaile/deploy/handle.json` store.
|
|
201
|
+
- `@skaile/workspaces/connectors-shared` — minimal public connector API for
|
|
202
|
+
extracted connector plugins.
|
|
203
|
+
- `skaile.yaml` gains `plugins:` (project-local plugin store) and `deploy:`
|
|
204
|
+
blocks; `skaile.lock.yaml` gains a `plugins:` slice.
|
|
205
|
+
- CLI: `skaile deploy [up|down|status|logs]` and `skaile plugin
|
|
206
|
+
[install|remove|list]`.
|
|
207
|
+
- `DRIVER_CATALOG` → `BUILTIN_DRIVER_CATALOG` (old name kept as an alias); new
|
|
208
|
+
`BUILTIN_CONNECTOR_CATALOG`.
|
|
209
|
+
|
|
210
|
+
See `docs/migration-v2-to-v3.md`.
|
|
211
|
+
</content>
|
|
212
|
+
|
|
213
|
+
- [#71](https://github.com/skaile-ai/workspaces/pull/71) [`fb32a60`](https://github.com/skaile-ai/workspaces/commit/fb32a6028ce1c0639c3339e8561ba72dcd24388f) Thanks [@mortegro](https://github.com/mortegro)! - WebSocket transport: enforce a bearer auth token end-to-end so a deploy target's
|
|
214
|
+
issued `wsAuth` actually gates the socket.
|
|
215
|
+
|
|
216
|
+
- `WebSocketServerTransport` accepts `authToken`. When set, every upgrade must
|
|
217
|
+
present the matching token via the `skaile-bearer.<base64url>` subprotocol or
|
|
218
|
+
the handshake is rejected with HTTP 401 (before any command handler runs).
|
|
219
|
+
When unset, behaviour is unchanged (back-compatible).
|
|
220
|
+
- `WebSocketClientTransport` accepts `auth`; sends it as the WS subprotocol
|
|
221
|
+
(the one handshake field a browser client can populate).
|
|
222
|
+
- `startAgentServer` threads `opts.authToken ?? SKAILE_WS_AUTH_TOKEN` into the
|
|
223
|
+
default server, so `skaile serve` enforces the token from the environment.
|
|
224
|
+
- New `@skaile/workspaces/transport` exports: `encodeBearerSubprotocol`,
|
|
225
|
+
`decodeBearerFromHeader`, `tokensEqual`, `BEARER_SUBPROTOCOL_PREFIX`.
|
|
226
|
+
- Robustness fix: `WebSocketClientTransport.connect()` now rejects when the
|
|
227
|
+
socket closes or errors before opening (a rejected auth upgrade, or a refused
|
|
228
|
+
port) instead of hanging until the connect timeout.
|
|
229
|
+
|
|
230
|
+
### Patch Changes
|
|
231
|
+
|
|
232
|
+
- [#60](https://github.com/skaile-ai/workspaces/pull/60) [`69f9924`](https://github.com/skaile-ai/workspaces/commit/69f99243cff137da1f835777e298e0779dec45e2) Thanks [@peteralbert](https://github.com/peteralbert)! - Emit sidecar `.d.ts` files next to each tsup `.js` output so consumers and
|
|
233
|
+
tools that look for a declaration file adjacent to the `.js` (classic node
|
|
234
|
+
resolution, some bundlers, IDE quick-lookups, ad-hoc `grep` audits) find one.
|
|
235
|
+
|
|
236
|
+
Previously, tsup emitted JS at `dist/<entry>.js` (e.g.
|
|
237
|
+
`dist/core/workspace-config.js`) while `tsc` emitted `.d.ts` at the
|
|
238
|
+
source-preserving path `dist/<src>/<entry>.d.ts` (e.g.
|
|
239
|
+
`dist/core/src/workspace-config.d.ts`). The package.json `exports` map
|
|
240
|
+
bridged these with separate `types` and `import` conditions — correct for
|
|
241
|
+
node16/nodenext/bundler resolvers, but invisible to anything looking
|
|
242
|
+
adjacent to the `.js`. A new post-build step (`build:dts-sidecars`) writes a
|
|
243
|
+
thin re-export shim at the tsup output path that points at the canonical
|
|
244
|
+
tsc-emitted declaration, eliminating the apparent stale-types mismatch
|
|
245
|
+
reported on `@skaile/workspaces/core/workspace-config`.
|
|
246
|
+
|
|
247
|
+
- [#66](https://github.com/skaile-ai/workspaces/pull/66) [`90a2c61`](https://github.com/skaile-ai/workspaces/commit/90a2c61564b4dd91ff54a96d3dcff213c35e465f) Thanks [@mortegro](https://github.com/mortegro)! - deploy(container): make `isRunning()` async so the docker/podman `inspect` round-trip stays off the event loop. Previously `health()`/`restore()` called a synchronous `portableSpawnSync` inspect, freezing log pumps and other connections on each status poll.
|
|
248
|
+
|
|
249
|
+
- [#73](https://github.com/skaile-ai/workspaces/pull/73) [`6aaac33`](https://github.com/skaile-ai/workspaces/commit/6aaac33e1ccf98c846c51b6ae57b305ebb558cf8) Thanks [@mortegro](https://github.com/mortegro)! - Fix `skaile manage` TUI row overflow when assets carry a `category`.
|
|
250
|
+
|
|
251
|
+
The category badge (`[category] `) sits between the asset name and the
|
|
252
|
+
description but its visible width was never subtracted from the description's
|
|
253
|
+
truncation budget, so categorized rows ran past the terminal width and wrapped.
|
|
254
|
+
The desc budget now accounts for the badge width.
|
|
255
|
+
|
|
256
|
+
- [#68](https://github.com/skaile-ai/workspaces/pull/68) [`4073406`](https://github.com/skaile-ai/workspaces/commit/407340687ce038c9ae8a71cc8b80e237545a4db9) Thanks [@Frozen666](https://github.com/Frozen666)! - fix(base-assets/git): recurse into submodules on clone and pull. Git mounts cloned without `--recurse-submodules` and never ran `submodule update`, leaving submodule directories empty or stale on upstream pointer bumps. A `syncSubmodules()` helper now runs after every ref-changing operation (clone, bootstrap, session-branch checkout, sync pull, merge-on-close, periodic auto-pull/rebase); it no-ops when `.gitmodules` is absent and swallows submodule failures so a broken submodule remote can't abort the parent mount.
|
|
257
|
+
|
|
258
|
+
- [#64](https://github.com/skaile-ai/workspaces/pull/64) [`f1b14f3`](https://github.com/skaile-ai/workspaces/commit/f1b14f3f9bed870efe6f8c7de2819cfbeeb444a2) Thanks [@mortegro](https://github.com/mortegro)! - fix(sdk): InProcessTransport now tracks real readiness and never drops commands
|
|
259
|
+
|
|
260
|
+
`InProcessTransport.connected` previously returned a hard-coded `true`, so
|
|
261
|
+
`LocalRuntime.isRunning` reported `true` even before `start()`. It now reflects
|
|
262
|
+
whether a command handler is actually registered.
|
|
263
|
+
|
|
264
|
+
`inject()` also silently dropped commands sent before the runner wired its
|
|
265
|
+
`onCommand` handler (e.g. a `debug`/`prompt` issued during the ~50ms `start()`
|
|
266
|
+
window, or against a lazily-started runtime), which made debug queries hang
|
|
267
|
+
until their own timeout. Such commands are now buffered and flushed to the
|
|
268
|
+
first handler, so none are lost.
|
|
269
|
+
|
|
270
|
+
`LocalRuntime` gains `whenReady()`, a promise resolved once `startAgentServer`
|
|
271
|
+
returns, so consumers can await wiring before issuing reply-expecting commands.
|
|
272
|
+
|
|
273
|
+
- [`03d1b69`](https://github.com/skaile-ai/workspaces/commit/03d1b6986fed2b586aede659c702575040cecfa3) Thanks [@mortegro](https://github.com/mortegro)! - Fix `skaile manage` TUI emitting publisher-less asset refs that crash on apply.
|
|
274
|
+
|
|
275
|
+
`assetRefOf` built `kind:name`, dropping the entry's publisher. Under the
|
|
276
|
+
canonical-identity schema `parseAssetRef` requires a publisher, so applying a
|
|
277
|
+
selection called `AssetManager.add("bundle:complex-app")` and threw
|
|
278
|
+
_"publisher required in asset ref"_. It now emits the canonical
|
|
279
|
+
`kind:name@<publisher>` via `assetRefToStr`. Entries with no publisher have no
|
|
280
|
+
canonical identity and are no longer selectable (returns `null`) instead of
|
|
281
|
+
producing a ref that throws; `repoAssetRefs`/`sourceAssetRefs` filter those out.
|
|
282
|
+
|
|
283
|
+
- [#60](https://github.com/skaile-ai/workspaces/pull/60) [`69f9924`](https://github.com/skaile-ai/workspaces/commit/69f99243cff137da1f835777e298e0779dec45e2) Thanks [@peteralbert](https://github.com/peteralbert)! - Add `unregister(kind, id)` to `PluginRegistry` so tests can swap a built-in
|
|
284
|
+
target (e.g. the real `local` / `git` connector) for a fake within the
|
|
285
|
+
process-wide singleton. Production callers should rarely reach for it —
|
|
286
|
+
built-ins and loaded plugins register once at startup and live for the
|
|
287
|
+
process — but the hook is needed for test isolation across describe blocks
|
|
288
|
+
that share the registry.
|
|
289
|
+
|
|
290
|
+
- [`cd3bee2`](https://github.com/skaile-ai/workspaces/commit/cd3bee27bd6e182b4d8f8d08f1816820edd2b0a7) Thanks [@mortegro](https://github.com/mortegro)! - Auto-clone url-backed source caches on miss. `ensureRepo` now clones a remote
|
|
291
|
+
source into its managed `~/.skaile/sources/<slug>` cache dir when the clone is
|
|
292
|
+
absent, instead of throwing `Local repository path not found` — so `skaile
|
|
293
|
+
install` works without a pre-populated clone. The source pin is no longer
|
|
294
|
+
mis-encoded as a clone `--branch` (tag/SHA pins now reach `checkoutPin`), and a
|
|
295
|
+
clone/auth failure surfaces as `missing: ["source:<slug> (<reason>)"]` rather
|
|
296
|
+
than a bare slug.
|
|
297
|
+
|
|
3
298
|
## 0.22.0-beta.2
|
|
4
299
|
|
|
5
300
|
### Minor Changes
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import './chunk-
|
|
1
|
+
import './chunk-ETMUGBHF.js';
|
|
2
2
|
import './chunk-K5GBV4SA.js';
|
|
3
3
|
import './chunk-KLNL7QHN.js';
|
|
4
|
-
import './chunk-
|
|
5
|
-
import { scanRepo } from './chunk-
|
|
6
|
-
import './chunk-
|
|
4
|
+
import './chunk-PFOXL4SH.js';
|
|
5
|
+
import { scanRepo } from './chunk-V5TBKO5Q.js';
|
|
6
|
+
import './chunk-K7WPR77X.js';
|
|
7
7
|
import './chunk-VUCPJBAG.js';
|
|
8
8
|
import './chunk-JKNWJ64A.js';
|
|
9
9
|
import './chunk-O4JH3KUE.js';
|
|
@@ -16,7 +16,7 @@ async function libraryAssets() {
|
|
|
16
16
|
const notes = [];
|
|
17
17
|
try {
|
|
18
18
|
const [{ openLibraryManager }, { skaileHomeDir }] = await Promise.all([
|
|
19
|
-
import('./open-library-
|
|
19
|
+
import('./open-library-CT4VVESU.js'),
|
|
20
20
|
import('./library/index.js')
|
|
21
21
|
]);
|
|
22
22
|
const { manager, close } = await openLibraryManager();
|
|
@@ -45,7 +45,7 @@ async function libraryAssets() {
|
|
|
45
45
|
async function storeAssets(projectDir) {
|
|
46
46
|
const notes = [];
|
|
47
47
|
try {
|
|
48
|
-
const { resolveCatalogSource } = await import('./open-library-
|
|
48
|
+
const { resolveCatalogSource } = await import('./open-library-CT4VVESU.js');
|
|
49
49
|
const { source, close } = await resolveCatalogSource({ projectDir });
|
|
50
50
|
try {
|
|
51
51
|
const assets = await source.listAssets();
|
|
@@ -85,5 +85,5 @@ async function gatherAssetFeeds(am, projectDir) {
|
|
|
85
85
|
}
|
|
86
86
|
|
|
87
87
|
export { gatherAssetFeeds, sourceAssets };
|
|
88
|
-
//# sourceMappingURL=asset-feeds-
|
|
89
|
-
//# sourceMappingURL=asset-feeds-
|
|
88
|
+
//# sourceMappingURL=asset-feeds-Y2CDCM3W.js.map
|
|
89
|
+
//# sourceMappingURL=asset-feeds-Y2CDCM3W.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../cli/src/asset-feeds.ts"],"names":[],"mappings":"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","file":"asset-feeds-
|
|
1
|
+
{"version":3,"sources":["../cli/src/asset-feeds.ts"],"names":[],"mappings":"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","file":"asset-feeds-Y2CDCM3W.js","sourcesContent":["/**\n * asset-feeds.ts — gather installable assets from every feed the manage TUI\n * surfaces.\n *\n * Three feeds, normalized into `CatalogEntry`:\n * - **Project sources** — `skaile.yaml` `sources:` entries (scanned via\n * `AssetManager.search()`; the new `sources:` field is merged into the\n * legacy repositories map in `AssetManager.loadConfig`).\n * - **Local libraries** — user authoring places from `LocalIndex` (filesystem\n * scan of each library's `path`).\n * - **Remote store** — the configured catalog source when `catalog.url` is\n * not `local`. Failures are non-fatal — they surface as notes.\n */\n\nimport { existsSync } from \"node:fs\";\nimport * as path from \"node:path\";\nimport { type AssetKind, type CatalogEntry, scanRepo } from \"@skaile/workspaces/core\";\n\n/** One non-fatal note returned to the caller for surfacing in the UI. */\nexport interface FeedNote {\n feed: \"sources\" | \"libraries\" | \"store\";\n message: string;\n}\n\nexport interface AssetFeedResult {\n entries: CatalogEntry[];\n notes: FeedNote[];\n}\n\n/**\n * Pull assets from local libraries (the authoring places under\n * `~/.skaile/libraries/<name>/`, not the `~/.skaile/sources/` cache). Each\n * library's `path` is scanned with `scanRepo` and tagged with\n * `repository = \"library:<name>\"` so the manage TUI groups them into their\n * own headers.\n */\nasync function libraryAssets(): Promise<{ entries: CatalogEntry[]; notes: FeedNote[] }> {\n const notes: FeedNote[] = [];\n try {\n const [{ openLibraryManager }, { skaileHomeDir }] = await Promise.all([\n import(\"./open-library.ts\"),\n import(\"@skaile/workspaces/library\"),\n ]);\n const { manager, close } = await openLibraryManager();\n try {\n const sourcesDir = path.join(skaileHomeDir(), \"sources\");\n const libs = (await manager.listLibraries()).filter((l) => !l.path.startsWith(sourcesDir));\n const entries: CatalogEntry[] = [];\n for (const lib of libs) {\n if (!existsSync(lib.path)) continue;\n for (const e of scanRepo(lib.path, `library:${lib.name}`)) {\n entries.push(e);\n }\n }\n return { entries, notes };\n } finally {\n close();\n }\n } catch (err) {\n notes.push({\n feed: \"libraries\",\n message: err instanceof Error ? err.message : String(err),\n });\n return { entries: [], notes };\n }\n}\n\n/**\n * Pull a (best-effort) snapshot of the connected remote store catalog.\n *\n * - Returns no entries when the resolved catalog is local-only or the host\n * is unreachable (the failure becomes a note, not an exception).\n * - Maps `CatalogAsset` → `CatalogEntry`, carrying `publisher`, `repo`, and\n * `category` straight through and using `source = \"store://<id>\"`; per-file\n * `source` paths are not available for remote assets so the canonical ref is\n * a stable placeholder.\n */\nasync function storeAssets(projectDir: string): Promise<{\n entries: CatalogEntry[];\n notes: FeedNote[];\n}> {\n const notes: FeedNote[] = [];\n try {\n const { resolveCatalogSource } = await import(\"./open-library.ts\");\n const { source, close } = await resolveCatalogSource({ projectDir });\n try {\n const assets = await source.listAssets();\n const entries: CatalogEntry[] = assets.map((a) => ({\n name: a.name,\n kind: (a.kind as AssetKind) ?? \"skill\",\n description: a.description ?? \"\",\n source: `store://${a.id}`,\n publisher: a.publisher,\n repo: a.repo,\n category: a.category,\n version: a.version,\n requires: [],\n dependencies: [],\n }));\n return { entries, notes };\n } finally {\n close();\n }\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n // Local-only catalog throws a recognizable message — silence it; absence\n // is the user's choice, not an error.\n if (!/local/i.test(msg)) {\n notes.push({ feed: \"store\", message: msg });\n }\n return { entries: [], notes };\n }\n}\n\n/**\n * Project-source feed: leans on `AssetManager.search()`, which now merges\n * `skaile.yaml`'s `sources:` field into the repositories map. Provided as a\n * function rather than an inline call so the caller can supply a fresh\n * `AssetManager` instance.\n */\nexport function sourceAssets(am: { search: () => CatalogEntry[] }): CatalogEntry[] {\n return am.search();\n}\n\n/**\n * Run all three feeds and return a single normalized result.\n *\n * Feeds run in parallel where possible — the store fetch is the slow one\n * (one HTTP call) and is fired alongside the local library walk.\n */\nexport async function gatherAssetFeeds(\n am: { search: () => CatalogEntry[] },\n projectDir: string,\n): Promise<AssetFeedResult> {\n const [libs, store] = await Promise.all([libraryAssets(), storeAssets(projectDir)]);\n return {\n entries: [...sourceAssets(am), ...libs.entries, ...store.entries],\n notes: [...libs.notes, ...store.notes],\n };\n}\n"]}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
export { AssetManager } from '../chunk-
|
|
2
|
-
export { createScaffold, deployAll, installAgent, removeAsset } from '../chunk-
|
|
3
|
-
import '../chunk-
|
|
1
|
+
export { AssetManager } from '../chunk-7HSXUKNB.js';
|
|
2
|
+
export { createScaffold, deployAll, installAgent, removeAsset } from '../chunk-2RYQERIT.js';
|
|
3
|
+
import '../chunk-ETMUGBHF.js';
|
|
4
4
|
import '../chunk-K5GBV4SA.js';
|
|
5
5
|
import '../chunk-KLNL7QHN.js';
|
|
6
|
-
import '../chunk-
|
|
7
|
-
import '../chunk-
|
|
8
|
-
import '../chunk-
|
|
6
|
+
import '../chunk-PFOXL4SH.js';
|
|
7
|
+
import '../chunk-V5TBKO5Q.js';
|
|
8
|
+
import '../chunk-K7WPR77X.js';
|
|
9
9
|
import '../chunk-VUCPJBAG.js';
|
|
10
10
|
import '../chunk-JKNWJ64A.js';
|
|
11
11
|
import '../chunk-O4JH3KUE.js';
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
export { createScaffold, deployAll, deployAsset, removeAsset } from '../chunk-
|
|
2
|
-
import '../chunk-
|
|
1
|
+
export { createScaffold, deployAll, deployAsset, removeAsset } from '../chunk-2RYQERIT.js';
|
|
2
|
+
import '../chunk-ETMUGBHF.js';
|
|
3
3
|
import '../chunk-K5GBV4SA.js';
|
|
4
4
|
import '../chunk-KLNL7QHN.js';
|
|
5
|
-
import '../chunk-
|
|
6
|
-
import '../chunk-
|
|
7
|
-
import '../chunk-
|
|
5
|
+
import '../chunk-PFOXL4SH.js';
|
|
6
|
+
import '../chunk-V5TBKO5Q.js';
|
|
7
|
+
import '../chunk-K7WPR77X.js';
|
|
8
8
|
import '../chunk-VUCPJBAG.js';
|
|
9
9
|
import '../chunk-JKNWJ64A.js';
|
|
10
10
|
import '../chunk-O4JH3KUE.js';
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
export { DeployConnector, createConnector19 as createConnector } from '../../chunk-
|
|
2
|
-
import '../../chunk-
|
|
1
|
+
export { DeployConnector, createConnector19 as createConnector } from '../../chunk-OJN25VJO.js';
|
|
2
|
+
import '../../chunk-NBJ5TOEC.js';
|
|
3
3
|
import '../../chunk-6MB7CRME.js';
|
|
4
4
|
import '../../chunk-QAVZOJCV.js';
|
|
5
5
|
import '../../chunk-6E6PKKAD.js';
|
|
6
6
|
import '../../chunk-ICS76R4T.js';
|
|
7
7
|
import '../../chunk-GZWJGNNN.js';
|
|
8
8
|
import '../../chunk-FVTV7M76.js';
|
|
9
|
-
import '../../chunk-
|
|
9
|
+
import '../../chunk-ETMUGBHF.js';
|
|
10
10
|
import '../../chunk-K5GBV4SA.js';
|
|
11
11
|
import '../../chunk-KLNL7QHN.js';
|
|
12
|
-
import '../../chunk-
|
|
13
|
-
import '../../chunk-
|
|
14
|
-
import '../../chunk-
|
|
12
|
+
import '../../chunk-PFOXL4SH.js';
|
|
13
|
+
import '../../chunk-V5TBKO5Q.js';
|
|
14
|
+
import '../../chunk-K7WPR77X.js';
|
|
15
15
|
import '../../chunk-VUCPJBAG.js';
|
|
16
16
|
import '../../chunk-JKNWJ64A.js';
|
|
17
17
|
import '../../chunk-O4JH3KUE.js';
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
export { DevServerConnector, createConnector16 as createConnector } from '../../chunk-
|
|
2
|
-
import '../../chunk-
|
|
1
|
+
export { DevServerConnector, createConnector16 as createConnector } from '../../chunk-OJN25VJO.js';
|
|
2
|
+
import '../../chunk-NBJ5TOEC.js';
|
|
3
3
|
import '../../chunk-6MB7CRME.js';
|
|
4
4
|
import '../../chunk-QAVZOJCV.js';
|
|
5
5
|
import '../../chunk-6E6PKKAD.js';
|
|
6
6
|
import '../../chunk-ICS76R4T.js';
|
|
7
7
|
import '../../chunk-GZWJGNNN.js';
|
|
8
8
|
import '../../chunk-FVTV7M76.js';
|
|
9
|
-
import '../../chunk-
|
|
9
|
+
import '../../chunk-ETMUGBHF.js';
|
|
10
10
|
import '../../chunk-K5GBV4SA.js';
|
|
11
11
|
import '../../chunk-KLNL7QHN.js';
|
|
12
|
-
import '../../chunk-
|
|
13
|
-
import '../../chunk-
|
|
14
|
-
import '../../chunk-
|
|
12
|
+
import '../../chunk-PFOXL4SH.js';
|
|
13
|
+
import '../../chunk-V5TBKO5Q.js';
|
|
14
|
+
import '../../chunk-K7WPR77X.js';
|
|
15
15
|
import '../../chunk-VUCPJBAG.js';
|
|
16
16
|
import '../../chunk-JKNWJ64A.js';
|
|
17
17
|
import '../../chunk-O4JH3KUE.js';
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
export { FlowAdapter, createConnector } from '../../../chunk-
|
|
2
|
-
import '../../../chunk-
|
|
1
|
+
export { FlowAdapter, createConnector } from '../../../chunk-OJN25VJO.js';
|
|
2
|
+
import '../../../chunk-NBJ5TOEC.js';
|
|
3
3
|
import '../../../chunk-6MB7CRME.js';
|
|
4
4
|
import '../../../chunk-QAVZOJCV.js';
|
|
5
5
|
import '../../../chunk-6E6PKKAD.js';
|
|
6
6
|
export { isBlocking } from '../../../chunk-ICS76R4T.js';
|
|
7
7
|
import '../../../chunk-GZWJGNNN.js';
|
|
8
8
|
import '../../../chunk-FVTV7M76.js';
|
|
9
|
-
import '../../../chunk-
|
|
9
|
+
import '../../../chunk-ETMUGBHF.js';
|
|
10
10
|
import '../../../chunk-K5GBV4SA.js';
|
|
11
11
|
import '../../../chunk-KLNL7QHN.js';
|
|
12
|
-
import '../../../chunk-
|
|
13
|
-
import '../../../chunk-
|
|
14
|
-
import '../../../chunk-
|
|
12
|
+
import '../../../chunk-PFOXL4SH.js';
|
|
13
|
+
import '../../../chunk-V5TBKO5Q.js';
|
|
14
|
+
import '../../../chunk-K7WPR77X.js';
|
|
15
15
|
import '../../../chunk-VUCPJBAG.js';
|
|
16
16
|
import '../../../chunk-JKNWJ64A.js';
|
|
17
17
|
import '../../../chunk-O4JH3KUE.js';
|
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
export { resumeFlow, runFlow } from '../../../chunk-
|
|
1
|
+
export { resumeFlow, runFlow } from '../../../chunk-53UNDY6K.js';
|
|
2
2
|
import '../../../chunk-GCJXPUHG.js';
|
|
3
3
|
import '../../../chunk-IPUYL6TD.js';
|
|
4
|
-
import '../../../chunk-
|
|
5
|
-
import '../../../chunk-
|
|
4
|
+
import '../../../chunk-OJN25VJO.js';
|
|
5
|
+
import '../../../chunk-NBJ5TOEC.js';
|
|
6
6
|
import '../../../chunk-6MB7CRME.js';
|
|
7
7
|
import '../../../chunk-QAVZOJCV.js';
|
|
8
8
|
import '../../../chunk-6E6PKKAD.js';
|
|
9
9
|
import '../../../chunk-ICS76R4T.js';
|
|
10
10
|
import '../../../chunk-GZWJGNNN.js';
|
|
11
11
|
import '../../../chunk-FVTV7M76.js';
|
|
12
|
-
import '../../../chunk-
|
|
12
|
+
import '../../../chunk-ETMUGBHF.js';
|
|
13
13
|
import '../../../chunk-K5GBV4SA.js';
|
|
14
14
|
import '../../../chunk-KLNL7QHN.js';
|
|
15
|
-
import '../../../chunk-
|
|
16
|
-
import '../../../chunk-
|
|
17
|
-
import '../../../chunk-
|
|
15
|
+
import '../../../chunk-PFOXL4SH.js';
|
|
16
|
+
import '../../../chunk-V5TBKO5Q.js';
|
|
17
|
+
import '../../../chunk-K7WPR77X.js';
|
|
18
18
|
import '../../../chunk-VUCPJBAG.js';
|
|
19
19
|
import '../../../chunk-JKNWJ64A.js';
|
|
20
20
|
import '../../../chunk-O4JH3KUE.js';
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
export { FlowAdapter, createConnector } from '../../chunk-
|
|
2
|
-
import '../../chunk-
|
|
1
|
+
export { FlowAdapter, createConnector } from '../../chunk-OJN25VJO.js';
|
|
2
|
+
import '../../chunk-NBJ5TOEC.js';
|
|
3
3
|
import '../../chunk-6MB7CRME.js';
|
|
4
4
|
import '../../chunk-QAVZOJCV.js';
|
|
5
5
|
import '../../chunk-6E6PKKAD.js';
|
|
6
6
|
import '../../chunk-ICS76R4T.js';
|
|
7
7
|
import '../../chunk-GZWJGNNN.js';
|
|
8
8
|
import '../../chunk-FVTV7M76.js';
|
|
9
|
-
import '../../chunk-
|
|
9
|
+
import '../../chunk-ETMUGBHF.js';
|
|
10
10
|
import '../../chunk-K5GBV4SA.js';
|
|
11
11
|
import '../../chunk-KLNL7QHN.js';
|
|
12
|
-
import '../../chunk-
|
|
13
|
-
import '../../chunk-
|
|
14
|
-
import '../../chunk-
|
|
12
|
+
import '../../chunk-PFOXL4SH.js';
|
|
13
|
+
import '../../chunk-V5TBKO5Q.js';
|
|
14
|
+
import '../../chunk-K7WPR77X.js';
|
|
15
15
|
import '../../chunk-VUCPJBAG.js';
|
|
16
16
|
import '../../chunk-JKNWJ64A.js';
|
|
17
17
|
import '../../chunk-O4JH3KUE.js';
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
export { GitConnector, createConnector2 as createConnector } from '../../chunk-
|
|
2
|
-
import '../../chunk-
|
|
1
|
+
export { GitConnector, createConnector2 as createConnector } from '../../chunk-OJN25VJO.js';
|
|
2
|
+
import '../../chunk-NBJ5TOEC.js';
|
|
3
3
|
import '../../chunk-6MB7CRME.js';
|
|
4
4
|
import '../../chunk-QAVZOJCV.js';
|
|
5
5
|
import '../../chunk-6E6PKKAD.js';
|
|
6
6
|
import '../../chunk-ICS76R4T.js';
|
|
7
7
|
import '../../chunk-GZWJGNNN.js';
|
|
8
8
|
import '../../chunk-FVTV7M76.js';
|
|
9
|
-
import '../../chunk-
|
|
9
|
+
import '../../chunk-ETMUGBHF.js';
|
|
10
10
|
import '../../chunk-K5GBV4SA.js';
|
|
11
11
|
import '../../chunk-KLNL7QHN.js';
|
|
12
|
-
import '../../chunk-
|
|
13
|
-
import '../../chunk-
|
|
14
|
-
import '../../chunk-
|
|
12
|
+
import '../../chunk-PFOXL4SH.js';
|
|
13
|
+
import '../../chunk-V5TBKO5Q.js';
|
|
14
|
+
import '../../chunk-K7WPR77X.js';
|
|
15
15
|
import '../../chunk-VUCPJBAG.js';
|
|
16
16
|
import '../../chunk-JKNWJ64A.js';
|
|
17
17
|
import '../../chunk-O4JH3KUE.js';
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
export { GmailConnector, createConnector14 as createConnector } from '../../chunk-
|
|
2
|
-
import '../../chunk-
|
|
1
|
+
export { GmailConnector, createConnector14 as createConnector } from '../../chunk-OJN25VJO.js';
|
|
2
|
+
import '../../chunk-NBJ5TOEC.js';
|
|
3
3
|
import '../../chunk-6MB7CRME.js';
|
|
4
4
|
import '../../chunk-QAVZOJCV.js';
|
|
5
5
|
import '../../chunk-6E6PKKAD.js';
|
|
6
6
|
import '../../chunk-ICS76R4T.js';
|
|
7
7
|
import '../../chunk-GZWJGNNN.js';
|
|
8
8
|
import '../../chunk-FVTV7M76.js';
|
|
9
|
-
import '../../chunk-
|
|
9
|
+
import '../../chunk-ETMUGBHF.js';
|
|
10
10
|
import '../../chunk-K5GBV4SA.js';
|
|
11
11
|
import '../../chunk-KLNL7QHN.js';
|
|
12
|
-
import '../../chunk-
|
|
13
|
-
import '../../chunk-
|
|
14
|
-
import '../../chunk-
|
|
12
|
+
import '../../chunk-PFOXL4SH.js';
|
|
13
|
+
import '../../chunk-V5TBKO5Q.js';
|
|
14
|
+
import '../../chunk-K7WPR77X.js';
|
|
15
15
|
import '../../chunk-VUCPJBAG.js';
|
|
16
16
|
import '../../chunk-JKNWJ64A.js';
|
|
17
17
|
import '../../chunk-O4JH3KUE.js';
|
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
export { GoogleDriveConnector, createConnector7 as createConnector, parseAuthBlob } from '../../chunk-
|
|
2
|
-
import '../../chunk-
|
|
1
|
+
export { GoogleDriveConnector, createConnector7 as createConnector, parseAuthBlob } from '../../chunk-OJN25VJO.js';
|
|
2
|
+
import '../../chunk-NBJ5TOEC.js';
|
|
3
3
|
import '../../chunk-6MB7CRME.js';
|
|
4
4
|
import '../../chunk-QAVZOJCV.js';
|
|
5
5
|
import '../../chunk-6E6PKKAD.js';
|
|
6
6
|
import '../../chunk-ICS76R4T.js';
|
|
7
7
|
import '../../chunk-GZWJGNNN.js';
|
|
8
8
|
import '../../chunk-FVTV7M76.js';
|
|
9
|
-
import '../../chunk-
|
|
9
|
+
import '../../chunk-ETMUGBHF.js';
|
|
10
10
|
import '../../chunk-K5GBV4SA.js';
|
|
11
11
|
import '../../chunk-KLNL7QHN.js';
|
|
12
|
-
import '../../chunk-
|
|
13
|
-
import '../../chunk-
|
|
14
|
-
import '../../chunk-
|
|
12
|
+
import '../../chunk-PFOXL4SH.js';
|
|
13
|
+
import '../../chunk-V5TBKO5Q.js';
|
|
14
|
+
import '../../chunk-K7WPR77X.js';
|
|
15
15
|
import '../../chunk-VUCPJBAG.js';
|
|
16
16
|
import '../../chunk-JKNWJ64A.js';
|
|
17
17
|
import '../../chunk-O4JH3KUE.js';
|