@skaile/workspaces 0.17.1 → 0.19.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.
Files changed (79) hide show
  1. package/CHANGELOG.md +36 -0
  2. package/dist/{asset-feeds-CQU46DYQ.js → asset-feeds-OFMOTPTX.js} +4 -4
  3. package/dist/{asset-feeds-CQU46DYQ.js.map → asset-feeds-OFMOTPTX.js.map} +1 -1
  4. package/dist/asset-manager/index.js +1 -1
  5. package/dist/base-assets/connectors/deploy.js +1 -1
  6. package/dist/base-assets/connectors/devserver.js +1 -1
  7. package/dist/base-assets/connectors/flow/adapter.js +1 -1
  8. package/dist/base-assets/connectors/flow/run-flow.js +2 -2
  9. package/dist/base-assets/connectors/flow.js +1 -1
  10. package/dist/base-assets/connectors/git/driver.d.ts +6 -2
  11. package/dist/base-assets/connectors/git/driver.d.ts.map +1 -1
  12. package/dist/base-assets/connectors/git.js +1 -1
  13. package/dist/base-assets/connectors/gmail.js +1 -1
  14. package/dist/base-assets/connectors/googledrive.js +1 -1
  15. package/dist/base-assets/connectors/local.js +1 -1
  16. package/dist/base-assets/connectors/mattermost.js +1 -1
  17. package/dist/base-assets/connectors/memory.js +1 -1
  18. package/dist/base-assets/connectors/minio.js +1 -1
  19. package/dist/base-assets/connectors/postgres.js +1 -1
  20. package/dist/base-assets/connectors/redis.js +1 -1
  21. package/dist/base-assets/connectors/s3.js +1 -1
  22. package/dist/base-assets/connectors/sharepoint.js +1 -1
  23. package/dist/base-assets/connectors/sqlite.js +1 -1
  24. package/dist/base-assets/connectors/static-server.js +1 -1
  25. package/dist/base-assets/connectors/tunnel.js +1 -1
  26. package/dist/base-assets/connectors/webdav.js +1 -1
  27. package/dist/base-assets/connectors/xstate-store.js +1 -1
  28. package/dist/base-assets/connectors/xstate.js +1 -1
  29. package/dist/base-assets/connectors/yjs.js +1 -1
  30. package/dist/{chunk-2GX7BE7Q.js → chunk-4S4TZDCD.js} +50 -11
  31. package/dist/chunk-4S4TZDCD.js.map +1 -0
  32. package/dist/{chunk-D6GE2WA2.js → chunk-63Y7YN33.js} +2 -2
  33. package/dist/{chunk-D6GE2WA2.js.map → chunk-63Y7YN33.js.map} +1 -1
  34. package/dist/{chunk-B3XHLXGD.js → chunk-BSY56QS7.js} +9 -5
  35. package/dist/chunk-BSY56QS7.js.map +1 -0
  36. package/dist/{chunk-RVPZOFSQ.js → chunk-GVBPAIGF.js} +4 -4
  37. package/dist/{chunk-RVPZOFSQ.js.map → chunk-GVBPAIGF.js.map} +1 -1
  38. package/dist/{chunk-G5E44VG7.js → chunk-HS2FNSCF.js} +3 -3
  39. package/dist/{chunk-G5E44VG7.js.map → chunk-HS2FNSCF.js.map} +1 -1
  40. package/dist/{chunk-JMB6VR3I.js → chunk-I7HGX4ZE.js} +71 -4
  41. package/dist/chunk-I7HGX4ZE.js.map +1 -0
  42. package/dist/{chunk-PBBGKI3L.js → chunk-NCUTHLRV.js} +4 -4
  43. package/dist/{chunk-PBBGKI3L.js.map → chunk-NCUTHLRV.js.map} +1 -1
  44. package/dist/{chunk-F6RXWVRE.js → chunk-YVX66WNQ.js} +2 -2
  45. package/dist/{chunk-F6RXWVRE.js.map → chunk-YVX66WNQ.js.map} +1 -1
  46. package/dist/cli/index.js +50 -52
  47. package/dist/cli/index.js.map +1 -1
  48. package/dist/cli/src/commands/source.d.ts.map +1 -1
  49. package/dist/connectors/index.js +1 -1
  50. package/dist/connectors/src/fleet-utils.d.ts +6 -9
  51. package/dist/connectors/src/fleet-utils.d.ts.map +1 -1
  52. package/dist/discovery/index.js +1 -1
  53. package/dist/discovery/src/discover-manifest.d.ts +1 -1
  54. package/dist/discovery/src/discover-manifest.d.ts.map +1 -1
  55. package/dist/discovery/src/discover.d.ts +8 -0
  56. package/dist/discovery/src/discover.d.ts.map +1 -1
  57. package/dist/discovery/src/index.d.ts +1 -1
  58. package/dist/discovery/src/index.d.ts.map +1 -1
  59. package/dist/discovery/src/source-config.d.ts +16 -0
  60. package/dist/discovery/src/source-config.d.ts.map +1 -1
  61. package/dist/discovery/src/tree-entries.d.ts +7 -0
  62. package/dist/discovery/src/tree-entries.d.ts.map +1 -1
  63. package/dist/{ensure-sources-HA6L3FBS.js → ensure-sources-EU45HFKA.js} +4 -4
  64. package/dist/{ensure-sources-HA6L3FBS.js.map → ensure-sources-EU45HFKA.js.map} +1 -1
  65. package/dist/library/index.js +2 -2
  66. package/dist/library/src/local/local-catalog-source.d.ts +6 -1
  67. package/dist/library/src/local/local-catalog-source.d.ts.map +1 -1
  68. package/dist/{open-library-ICKZYC5K.js → open-library-IOYWFK7M.js} +5 -5
  69. package/dist/{open-library-ICKZYC5K.js.map → open-library-IOYWFK7M.js.map} +1 -1
  70. package/dist/runner/index.js +3 -3
  71. package/dist/sdk/asset-manager.js +1 -1
  72. package/dist/sdk/index.js +3 -3
  73. package/dist/sdk/runner.js +3 -3
  74. package/dist/tui/index.js +3 -3
  75. package/dist/workspace-plugin/index.js +1 -1
  76. package/package.json +1 -1
  77. package/dist/chunk-2GX7BE7Q.js.map +0 -1
  78. package/dist/chunk-B3XHLXGD.js.map +0 -1
  79. package/dist/chunk-JMB6VR3I.js.map +0 -1
package/CHANGELOG.md CHANGED
@@ -1,5 +1,41 @@
1
1
  # Changelog
2
2
 
3
+ ## 0.19.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#44](https://github.com/skaile-ai/workspaces/pull/44) [`bd14e1b`](https://github.com/skaile-ai/workspaces/commit/bd14e1be7d8af0819bb21581fc33e5308d199517) Thanks [@mortegro](https://github.com/mortegro)! - Add `dev_paths` to `.skaile-source.yaml` and an `includeDev` discovery option.
8
+
9
+ Assets under a source config's `dev_paths` (e.g. `ai-assets-dev/`) are now
10
+ excluded from a normal discovery run and re-included only when discovery is
11
+ invoked with `includeDev`. This lets a package ship public, consumer-facing
12
+ skills in `ai-assets/` while keeping project-development skills in
13
+ `ai-assets-dev/` out of a normal install. Honored by the glob walker, the
14
+ author-shipped manifest path, and the virtual-tree walker; threaded through
15
+ `LocalCatalogSource.sync({ includeDev })` and surfaced as `--dev` on
16
+ `skaile source sync` / `skaile source add`.
17
+
18
+ ### Patch Changes
19
+
20
+ - [#46](https://github.com/skaile-ai/workspaces/pull/46) [`90bf67c`](https://github.com/skaile-ai/workspaces/commit/90bf67cb6a529ba0814bf6400a0206c56ae2476c) Thanks [@peteralbert](https://github.com/peteralbert)! - fix(discovery): default versionless assets to `0.1.0` instead of `0.0.0`
21
+
22
+ Assets whose manifest declares no `version` field now default to `0.1.0` — a
23
+ real, adoptable version — rather than the `0.0.0` placeholder. The Catalog
24
+ rejects `0.0.0` at publish time, so the old default produced unpublishable
25
+ (and therefore unadoptable) catalog entries. Both discovery paths are fixed:
26
+ the local-FS orchestrator (`discover.ts`) and the virtual-tree orchestrator
27
+ (`tree-entries.ts`).
28
+
29
+ ## 0.18.0
30
+
31
+ ### Minor Changes
32
+
33
+ - [#42](https://github.com/skaile-ai/workspaces/pull/42) [`ecdc900`](https://github.com/skaile-ai/workspaces/commit/ecdc900790773d93b3f18983b785acea15c600db) Thanks [@peteralbert](https://github.com/peteralbert)! - Add fleet-managed short-circuit to the in-container git connector driver.
34
+
35
+ When `SKAILE_FLEET_MANAGED_MOUNTS` lists the connector's mount id, the host's `GitFleetService` has already cloned the bare repo and bind-mounted a shared worktree at `ctx.mountTarget`. The driver now verifies the bind via the existing `ensureFleetMounted` helper, records the current branch for diagnostics, and starts a watcher so the workspace explorer still surfaces changes — then short-circuits `sync` / `onHibernate` / `onSessionClose` and the watcher / managed-credential teardown in `disconnect`. Host supervisor owns clone, fetch, commit, push, and merge.
36
+
37
+ Standalone (non-fleet) sessions are unchanged: when the env does not list the mount id, the driver falls through to the existing clone path.
38
+
3
39
  ## 0.17.1
4
40
 
5
41
  ### Patch Changes
@@ -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-ICKZYC5K.js'),
19
+ import('./open-library-IOYWFK7M.js'),
20
20
  import('./library/index.js')
21
21
  ]);
22
22
  const { manager, close } = await openLibraryManager();
@@ -47,7 +47,7 @@ async function libraryAssets() {
47
47
  async function storeAssets(projectDir) {
48
48
  const notes = [];
49
49
  try {
50
- const { resolveCatalogSource } = await import('./open-library-ICKZYC5K.js');
50
+ const { resolveCatalogSource } = await import('./open-library-IOYWFK7M.js');
51
51
  const { source, close } = await resolveCatalogSource({ projectDir });
52
52
  try {
53
53
  const assets = await source.listAssets();
@@ -86,5 +86,5 @@ async function gatherAssetFeeds(am, projectDir) {
86
86
  }
87
87
 
88
88
  export { gatherAssetFeeds, sourceAssets };
89
- //# sourceMappingURL=asset-feeds-CQU46DYQ.js.map
90
- //# sourceMappingURL=asset-feeds-CQU46DYQ.js.map
89
+ //# sourceMappingURL=asset-feeds-OFMOTPTX.js.map
90
+ //# sourceMappingURL=asset-feeds-OFMOTPTX.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../cli/src/asset-feeds.ts"],"names":[],"mappings":"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","file":"asset-feeds-CQU46DYQ.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(\n (l) => !l.path.startsWith(sourcesDir),\n );\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` with `repository = \"store\"` and\n * `source = \"store://<id>\"`; per-file `source` paths are not available\n * for remote assets so we use the canonical ref as 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 repository: \"store\",\n domain: a.publisher,\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
+ {"version":3,"sources":["../cli/src/asset-feeds.ts"],"names":[],"mappings":"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","file":"asset-feeds-OFMOTPTX.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(\n (l) => !l.path.startsWith(sourcesDir),\n );\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` with `repository = \"store\"` and\n * `source = \"store://<id>\"`; per-file `source` paths are not available\n * for remote assets so we use the canonical ref as 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 repository: \"store\",\n domain: a.publisher,\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,4 +1,4 @@
1
- export { AssetManager } from '../chunk-F6RXWVRE.js';
1
+ export { AssetManager } from '../chunk-YVX66WNQ.js';
2
2
  export { createScaffold, deployAll, installAgent, removeAsset } from '../chunk-KIGZYGCM.js';
3
3
  import '../chunk-ATTIX7H2.js';
4
4
  import '../chunk-JKNWJ64A.js';
@@ -1,4 +1,4 @@
1
- export { DeployConnector, createConnector21 as createConnector } from '../../chunk-JMB6VR3I.js';
1
+ export { DeployConnector, createConnector21 as createConnector } from '../../chunk-I7HGX4ZE.js';
2
2
  import '../../chunk-VMUQAISH.js';
3
3
  import '../../chunk-6MB7CRME.js';
4
4
  import '../../chunk-QAVZOJCV.js';
@@ -1,4 +1,4 @@
1
- export { DevServerConnector, createConnector18 as createConnector } from '../../chunk-JMB6VR3I.js';
1
+ export { DevServerConnector, createConnector18 as createConnector } from '../../chunk-I7HGX4ZE.js';
2
2
  import '../../chunk-VMUQAISH.js';
3
3
  import '../../chunk-6MB7CRME.js';
4
4
  import '../../chunk-QAVZOJCV.js';
@@ -1,4 +1,4 @@
1
- export { FlowAdapter, createConnector } from '../../../chunk-JMB6VR3I.js';
1
+ export { FlowAdapter, createConnector } from '../../../chunk-I7HGX4ZE.js';
2
2
  import '../../../chunk-VMUQAISH.js';
3
3
  import '../../../chunk-6MB7CRME.js';
4
4
  import '../../../chunk-QAVZOJCV.js';
@@ -1,7 +1,7 @@
1
- export { resumeFlow, runFlow } from '../../../chunk-G5E44VG7.js';
1
+ export { resumeFlow, runFlow } from '../../../chunk-HS2FNSCF.js';
2
2
  import '../../../chunk-GCJXPUHG.js';
3
3
  import '../../../chunk-IPUYL6TD.js';
4
- import '../../../chunk-JMB6VR3I.js';
4
+ import '../../../chunk-I7HGX4ZE.js';
5
5
  import '../../../chunk-VMUQAISH.js';
6
6
  import '../../../chunk-6MB7CRME.js';
7
7
  import '../../../chunk-QAVZOJCV.js';
@@ -1,4 +1,4 @@
1
- export { FlowAdapter, createConnector } from '../../chunk-JMB6VR3I.js';
1
+ export { FlowAdapter, createConnector } from '../../chunk-I7HGX4ZE.js';
2
2
  import '../../chunk-VMUQAISH.js';
3
3
  import '../../chunk-6MB7CRME.js';
4
4
  import '../../chunk-QAVZOJCV.js';
@@ -3,8 +3,7 @@
3
3
  * Mounts a git repo by cloning/pulling to a local directory.
4
4
  * Session-aware: auto-branching, lifecycle hooks (hibernate/close), periodic fetch/rebase.
5
5
  */
6
- import type { WatchHandle, WatchOptions } from "@skaile/workspaces/connectors";
7
- import type { ConnectContext, ConnectorChangeEvent, ConnectorDeclaration, ConnectorHandle, FilesystemFace } from "@skaile/workspaces/connectors";
6
+ import type { ConnectContext, ConnectorChangeEvent, ConnectorDeclaration, ConnectorHandle, FilesystemFace, WatchHandle, WatchOptions } from "@skaile/workspaces/connectors";
8
7
  import { AbstractConnector } from "@skaile/workspaces/connectors";
9
8
  /**
10
9
  * Filesystem-face connector for git repositories — clones or pulls on connect, supports
@@ -24,6 +23,11 @@ export declare class GitConnector extends AbstractConnector {
24
23
  readonly name = "git";
25
24
  readonly filesystem: FilesystemFace;
26
25
  connect(declaration: ConnectorDeclaration, ctx: ConnectContext): Promise<ConnectorHandle>;
26
+ /**
27
+ * Fleet-managed connect: verify the host bind, register an explorer watcher,
28
+ * no-op every git lifecycle hook. Spec: `_devlog/specs/2026-05-28-git-fleet-mode-design.md`.
29
+ */
30
+ private connectFleetManaged;
27
31
  /**
28
32
  * Public refresh entry-point used by the runner's wake-mid-401 handler when
29
33
  * the credential-helper script touches the workspace refresh-flag. Calls
@@ -1 +1 @@
1
- {"version":3,"file":"driver.d.ts","sourceRoot":"","sources":["../../../../base-assets/connectors/git/driver.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAkBH,OAAO,KAAK,EAGV,WAAW,EACX,YAAY,EACb,MAAM,+BAA+B,CAAC;AACvC,OAAO,KAAK,EACV,cAAc,EACd,oBAAoB,EACpB,oBAAoB,EACpB,eAAe,EACf,cAAc,EACf,MAAM,+BAA+B,CAAC;AAEvC,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AA2MlE;;;;;;;;;;;;;GAaG;AACH,qBAAa,YAAa,SAAQ,iBAAiB;IACjD,QAAQ,CAAC,IAAI,SAAS;IAEtB,QAAQ,CAAC,UAAU,EAAE,cAAc,CAIjC;IAEI,OAAO,CAAC,WAAW,EAAE,oBAAoB,EAAE,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC;IAuK/F;;;;;;;;;;;;;;;OAeG;IACG,wBAAwB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAmCrF,UAAU,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;YAc1C,KAAK;IAeV,KAAK,CACZ,MAAM,EAAE,eAAe,EACvB,QAAQ,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,IAAI,EAC/C,OAAO,CAAC,EAAE,YAAY,GACrB,WAAW;IA0BC,WAAW,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAwBjE,cAAc,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAiDnF;;;;;;;OAOG;IACH,OAAO,CAAC,eAAe;IASvB;;;;;;;;;;;;;;;OAeG;YACW,mBAAmB;IA8DjC,OAAO,CAAC,uBAAuB;IAmG/B;;;;;;;OAOG;IACH,OAAO,CAAC,eAAe;YAcT,wBAAwB;IAmDtC,OAAO,CAAC,yBAAyB;IA8BjC;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;IACH,OAAO,CAAC,WAAW;IAgBnB;;;;;;;;OAQG;IACH,OAAO,CAAC,qBAAqB;IAS7B;;;;;;;;;;;;;;;;;;;OAmBG;IACH,OAAO,CAAC,mBAAmB;IAyB3B;;;;;;;;;;;;;;OAcG;IACH,OAAO,CAAC,4BAA4B;IAkCpC,OAAO,CAAC,OAAO;IAYf,OAAO,CAAC,kBAAkB;IAwB1B;;;;OAIG;IACH,OAAO,CAAC,uBAAuB;IAkD/B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAkC3B,OAAO,CAAC,qBAAqB;IAM7B,OAAO,CAAC,oBAAoB;IAQ5B,OAAO,CAAC,iBAAiB;IAiBzB,OAAO,CAAC,qBAAqB;CAa9B;AAED;;;;GAIG;AACH,wBAAgB,eAAe,IAAI,YAAY,CAE9C"}
1
+ {"version":3,"file":"driver.d.ts","sourceRoot":"","sources":["../../../../base-assets/connectors/git/driver.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAYH,OAAO,KAAK,EACV,cAAc,EACd,oBAAoB,EACpB,oBAAoB,EACpB,eAAe,EACf,cAAc,EAMd,WAAW,EACX,YAAY,EACb,MAAM,+BAA+B,CAAC;AACvC,OAAO,EACL,iBAAiB,EAUlB,MAAM,+BAA+B,CAAC;AAyMvC;;;;;;;;;;;;;GAaG;AACH,qBAAa,YAAa,SAAQ,iBAAiB;IACjD,QAAQ,CAAC,IAAI,SAAS;IAEtB,QAAQ,CAAC,UAAU,EAAE,cAAc,CAIjC;IAEI,OAAO,CAAC,WAAW,EAAE,oBAAoB,EAAE,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,eAAe,CAAC;IAgL/F;;;OAGG;YACW,mBAAmB;IA2CjC;;;;;;;;;;;;;;;OAeG;IACG,wBAAwB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAmCrF,UAAU,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;YAqB1C,KAAK;IAqBV,KAAK,CACZ,MAAM,EAAE,eAAe,EACvB,QAAQ,EAAE,CAAC,KAAK,EAAE,oBAAoB,KAAK,IAAI,EAC/C,OAAO,CAAC,EAAE,YAAY,GACrB,WAAW;IAsCC,WAAW,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IA4BjE,cAAc,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAsDnF;;;;;;;OAOG;IACH,OAAO,CAAC,eAAe;IASvB;;;;;;;;;;;;;;;OAeG;YACW,mBAAmB;IA8DjC,OAAO,CAAC,uBAAuB;IAmG/B;;;;;;;OAOG;IACH,OAAO,CAAC,eAAe;YAcT,wBAAwB;IAmDtC,OAAO,CAAC,yBAAyB;IA8BjC;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;IACH,OAAO,CAAC,WAAW;IAgBnB;;;;;;;;OAQG;IACH,OAAO,CAAC,qBAAqB;IAS7B;;;;;;;;;;;;;;;;;;;OAmBG;IACH,OAAO,CAAC,mBAAmB;IAyB3B;;;;;;;;;;;;;;OAcG;IACH,OAAO,CAAC,4BAA4B;IAkCpC,OAAO,CAAC,OAAO;IAYf,OAAO,CAAC,kBAAkB;IAwB1B;;;;OAIG;IACH,OAAO,CAAC,uBAAuB;IAkD/B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAkC3B,OAAO,CAAC,qBAAqB;IAM7B,OAAO,CAAC,oBAAoB;IAQ5B,OAAO,CAAC,iBAAiB;IAiBzB,OAAO,CAAC,qBAAqB;CAa9B;AAED;;;;GAIG;AACH,wBAAgB,eAAe,IAAI,YAAY,CAE9C"}
@@ -1,4 +1,4 @@
1
- export { GitConnector, createConnector2 as createConnector } from '../../chunk-JMB6VR3I.js';
1
+ export { GitConnector, createConnector2 as createConnector } from '../../chunk-I7HGX4ZE.js';
2
2
  import '../../chunk-VMUQAISH.js';
3
3
  import '../../chunk-6MB7CRME.js';
4
4
  import '../../chunk-QAVZOJCV.js';
@@ -1,4 +1,4 @@
1
- export { GmailConnector, createConnector16 as createConnector } from '../../chunk-JMB6VR3I.js';
1
+ export { GmailConnector, createConnector16 as createConnector } from '../../chunk-I7HGX4ZE.js';
2
2
  import '../../chunk-VMUQAISH.js';
3
3
  import '../../chunk-6MB7CRME.js';
4
4
  import '../../chunk-QAVZOJCV.js';
@@ -1,4 +1,4 @@
1
- export { GoogleDriveConnector, createConnector7 as createConnector, parseAuthBlob } from '../../chunk-JMB6VR3I.js';
1
+ export { GoogleDriveConnector, createConnector7 as createConnector, parseAuthBlob } from '../../chunk-I7HGX4ZE.js';
2
2
  import '../../chunk-VMUQAISH.js';
3
3
  import '../../chunk-6MB7CRME.js';
4
4
  import '../../chunk-QAVZOJCV.js';
@@ -1,4 +1,4 @@
1
- export { LocalConnector, createConnector3 as createConnector } from '../../chunk-JMB6VR3I.js';
1
+ export { LocalConnector, createConnector3 as createConnector } from '../../chunk-I7HGX4ZE.js';
2
2
  import '../../chunk-VMUQAISH.js';
3
3
  import '../../chunk-6MB7CRME.js';
4
4
  import '../../chunk-QAVZOJCV.js';
@@ -1,4 +1,4 @@
1
- export { MattermostConnector, createConnector17 as createConnector } from '../../chunk-JMB6VR3I.js';
1
+ export { MattermostConnector, createConnector17 as createConnector } from '../../chunk-I7HGX4ZE.js';
2
2
  import '../../chunk-VMUQAISH.js';
3
3
  import '../../chunk-6MB7CRME.js';
4
4
  import '../../chunk-QAVZOJCV.js';
@@ -1,4 +1,4 @@
1
- export { MemoryConnector, createConnector8 as createConnector } from '../../chunk-JMB6VR3I.js';
1
+ export { MemoryConnector, createConnector8 as createConnector } from '../../chunk-I7HGX4ZE.js';
2
2
  import '../../chunk-VMUQAISH.js';
3
3
  import '../../chunk-6MB7CRME.js';
4
4
  import '../../chunk-QAVZOJCV.js';
@@ -1,4 +1,4 @@
1
- export { MinIOConnector, createConnector12 as createConnector } from '../../chunk-JMB6VR3I.js';
1
+ export { MinIOConnector, createConnector12 as createConnector } from '../../chunk-I7HGX4ZE.js';
2
2
  import '../../chunk-VMUQAISH.js';
3
3
  import '../../chunk-6MB7CRME.js';
4
4
  import '../../chunk-QAVZOJCV.js';
@@ -1,4 +1,4 @@
1
- export { PostgresConnector, createConnector9 as createConnector } from '../../chunk-JMB6VR3I.js';
1
+ export { PostgresConnector, createConnector9 as createConnector } from '../../chunk-I7HGX4ZE.js';
2
2
  import '../../chunk-VMUQAISH.js';
3
3
  import '../../chunk-6MB7CRME.js';
4
4
  import '../../chunk-QAVZOJCV.js';
@@ -1,4 +1,4 @@
1
- export { RedisConnector, createConnector10 as createConnector } from '../../chunk-JMB6VR3I.js';
1
+ export { RedisConnector, createConnector10 as createConnector } from '../../chunk-I7HGX4ZE.js';
2
2
  import '../../chunk-VMUQAISH.js';
3
3
  import '../../chunk-6MB7CRME.js';
4
4
  import '../../chunk-QAVZOJCV.js';
@@ -1,4 +1,4 @@
1
- export { S3Connector, createConnector4 as createConnector } from '../../chunk-JMB6VR3I.js';
1
+ export { S3Connector, createConnector4 as createConnector } from '../../chunk-I7HGX4ZE.js';
2
2
  import '../../chunk-VMUQAISH.js';
3
3
  import '../../chunk-6MB7CRME.js';
4
4
  import '../../chunk-QAVZOJCV.js';
@@ -1,4 +1,4 @@
1
- export { SharePointConnector, createConnector6 as createConnector } from '../../chunk-JMB6VR3I.js';
1
+ export { SharePointConnector, createConnector6 as createConnector } from '../../chunk-I7HGX4ZE.js';
2
2
  import '../../chunk-VMUQAISH.js';
3
3
  import '../../chunk-6MB7CRME.js';
4
4
  import '../../chunk-QAVZOJCV.js';
@@ -1,4 +1,4 @@
1
- export { SQLiteConnector, createConnector11 as createConnector } from '../../chunk-JMB6VR3I.js';
1
+ export { SQLiteConnector, createConnector11 as createConnector } from '../../chunk-I7HGX4ZE.js';
2
2
  import '../../chunk-VMUQAISH.js';
3
3
  import '../../chunk-6MB7CRME.js';
4
4
  import '../../chunk-QAVZOJCV.js';
@@ -1,4 +1,4 @@
1
- export { StaticServerConnector, createConnector19 as createConnector } from '../../chunk-JMB6VR3I.js';
1
+ export { StaticServerConnector, createConnector19 as createConnector } from '../../chunk-I7HGX4ZE.js';
2
2
  import '../../chunk-VMUQAISH.js';
3
3
  import '../../chunk-6MB7CRME.js';
4
4
  import '../../chunk-QAVZOJCV.js';
@@ -1,4 +1,4 @@
1
- export { TunnelConnector, createConnector20 as createConnector } from '../../chunk-JMB6VR3I.js';
1
+ export { TunnelConnector, createConnector20 as createConnector } from '../../chunk-I7HGX4ZE.js';
2
2
  import '../../chunk-VMUQAISH.js';
3
3
  import '../../chunk-6MB7CRME.js';
4
4
  import '../../chunk-QAVZOJCV.js';
@@ -1,4 +1,4 @@
1
- export { WebDAVConnector, createConnector5 as createConnector } from '../../chunk-JMB6VR3I.js';
1
+ export { WebDAVConnector, createConnector5 as createConnector } from '../../chunk-I7HGX4ZE.js';
2
2
  import '../../chunk-VMUQAISH.js';
3
3
  import '../../chunk-6MB7CRME.js';
4
4
  import '../../chunk-QAVZOJCV.js';
@@ -1,4 +1,4 @@
1
- export { XStateStoreConnector, createConnector14 as createConnector } from '../../chunk-JMB6VR3I.js';
1
+ export { XStateStoreConnector, createConnector14 as createConnector } from '../../chunk-I7HGX4ZE.js';
2
2
  import '../../chunk-VMUQAISH.js';
3
3
  import '../../chunk-6MB7CRME.js';
4
4
  import '../../chunk-QAVZOJCV.js';
@@ -1,4 +1,4 @@
1
- export { XStateConnector, createConnector13 as createConnector } from '../../chunk-JMB6VR3I.js';
1
+ export { XStateConnector, createConnector13 as createConnector } from '../../chunk-I7HGX4ZE.js';
2
2
  import '../../chunk-VMUQAISH.js';
3
3
  import '../../chunk-6MB7CRME.js';
4
4
  import '../../chunk-QAVZOJCV.js';
@@ -1,4 +1,4 @@
1
- export { YjsConnector, createConnector15 as createConnector } from '../../chunk-JMB6VR3I.js';
1
+ export { YjsConnector, createConnector15 as createConnector } from '../../chunk-I7HGX4ZE.js';
2
2
  import '../../chunk-VMUQAISH.js';
3
3
  import '../../chunk-6MB7CRME.js';
4
4
  import '../../chunk-QAVZOJCV.js';
@@ -516,6 +516,14 @@ var SourceConfigSchema = z.object({
516
516
  default_ref: z.string().min(1).default("main"),
517
517
  /** Per-path publisher overrides. Evaluated in order; first match wins. */
518
518
  publisher_overrides: z.array(PublisherOverrideSchema).default([]),
519
+ /**
520
+ * Repo-relative path prefixes holding assets meant only for developing the
521
+ * project itself (e.g. `ai-assets-dev/`). Excluded from a normal discovery
522
+ * run; re-included only when discovery is invoked with `includeDev` (the
523
+ * `--dev` flag on `skaile source sync` / `source add`). Conventionally a
524
+ * single top-level folder. See `docs/discovery/dev-assets.md`.
525
+ */
526
+ dev_paths: z.array(z.string().min(1)).default([]),
519
527
  /** Optional sync configuration for the catalog backend. */
520
528
  sync: SyncConfigSchema.optional(),
521
529
  /**
@@ -553,6 +561,16 @@ function loadSourceConfig(yamlText) {
553
561
  function isManifestMode(config) {
554
562
  return config.version === 2 && Array.isArray(config.assets);
555
563
  }
564
+ function isExcludedDevPath(relativePath, devPaths) {
565
+ if (devPaths.length === 0) return false;
566
+ const rel = relativePath.replace(/^\.\//, "").replace(/\/+$/, "");
567
+ for (const raw of devPaths) {
568
+ const dp = raw.replace(/^\.\//, "").replace(/\/+$/, "");
569
+ if (dp.length === 0) continue;
570
+ if (rel === dp || rel.startsWith(`${dp}/`)) return true;
571
+ }
572
+ return false;
573
+ }
556
574
  function collectWarnings(config) {
557
575
  const warnings = [];
558
576
  if (Array.isArray(config.assets) && config.publisher_overrides.length > 0) {
@@ -574,6 +592,9 @@ function mergeSourceConfigs(base, overlay) {
574
592
  if (Array.isArray(overlay.publisher_overrides) && overlay.publisher_overrides.length > 0) {
575
593
  merged.publisher_overrides = overlay.publisher_overrides;
576
594
  }
595
+ if (Array.isArray(overlay.dev_paths) && overlay.dev_paths.length > 0) {
596
+ merged.dev_paths = overlay.dev_paths;
597
+ }
577
598
  if (overlay.default_ref && overlay.default_ref.length > 0) {
578
599
  merged.default_ref = overlay.default_ref;
579
600
  }
@@ -607,7 +628,8 @@ function loadMergedSourceConfig(rootPath, sidecarPath) {
607
628
  version: 2,
608
629
  publisher_default: "@<domain>",
609
630
  default_ref: "main",
610
- publisher_overrides: []
631
+ publisher_overrides: [],
632
+ dev_paths: []
611
633
  }
612
634
  };
613
635
  }
@@ -671,12 +693,14 @@ function computeDeterministicHashDetailed(assetRoot, files) {
671
693
  }
672
694
  return { sha256: hash.digest("hex"), present, missing };
673
695
  }
674
- function discoverFromManifest(rootPath, sourceConfig, registry) {
696
+ function discoverFromManifest(rootPath, sourceConfig, registry, includeDev = false) {
675
697
  const assets = [];
676
698
  const errors = [];
677
699
  const allEdges = [];
700
+ const devPaths = sourceConfig.dev_paths ?? [];
678
701
  const sortedEntries = [...sourceConfig.assets].sort((a, b) => a.path < b.path ? -1 : 1);
679
702
  for (const entry of sortedEntries) {
703
+ if (!includeDev && isExcludedDevPath(entry.path, devPaths)) continue;
680
704
  const result = processEntry(rootPath, entry, registry);
681
705
  if (result.errors.length > 0) {
682
706
  errors.push(...result.errors);
@@ -852,10 +876,12 @@ function discoverAssetsInTree(rootPath, optionsOrSourceConfig) {
852
876
  let sourceConfig;
853
877
  let registry;
854
878
  let sidecarPath;
855
- if (optionsOrSourceConfig && ("registry" in optionsOrSourceConfig || "sourceConfig" in optionsOrSourceConfig || "sidecarPath" in optionsOrSourceConfig)) {
879
+ let includeDev = false;
880
+ if (optionsOrSourceConfig && ("registry" in optionsOrSourceConfig || "sourceConfig" in optionsOrSourceConfig || "sidecarPath" in optionsOrSourceConfig || "includeDev" in optionsOrSourceConfig)) {
856
881
  sourceConfig = optionsOrSourceConfig.sourceConfig;
857
882
  registry = optionsOrSourceConfig.registry;
858
883
  sidecarPath = optionsOrSourceConfig.sidecarPath;
884
+ includeDev = optionsOrSourceConfig.includeDev ?? false;
859
885
  } else {
860
886
  sourceConfig = optionsOrSourceConfig;
861
887
  }
@@ -869,13 +895,15 @@ function discoverAssetsInTree(rootPath, optionsOrSourceConfig) {
869
895
  }
870
896
  }
871
897
  if (sourceConfig && isManifestMode(sourceConfig)) {
872
- return discoverFromManifest(rootPath, sourceConfig, registry);
898
+ return discoverFromManifest(rootPath, sourceConfig, registry, includeDev);
873
899
  }
874
900
  const assets = [];
875
901
  const errors = [];
876
902
  const allEdges = [];
903
+ const devPaths = sourceConfig?.dev_paths ?? [];
877
904
  const seen = /* @__PURE__ */ new Set();
878
905
  for (const { absPath, relativePath } of walkTree(rootPath)) {
906
+ if (!includeDev && isExcludedDevPath(relativePath, devPaths)) continue;
879
907
  let kind;
880
908
  try {
881
909
  kind = registry.resolveKind(relativePath);
@@ -899,7 +927,7 @@ function discoverAssetsInTree(rootPath, optionsOrSourceConfig) {
899
927
  }
900
928
  const publisher = resolvePublisher(relativePath, sourceConfig);
901
929
  const name = deriveName(relativePath, kind, manifest);
902
- const version = typeof manifest.version === "string" ? manifest.version : "0.0.0";
930
+ const version = typeof manifest.version === "string" ? manifest.version : "0.1.0";
903
931
  const ref = `${publisher}/${name}@${version}`;
904
932
  const fileFilter = registry.defaultFileFilter(kind, absPath) ?? {
905
933
  assetRoot: path.dirname(absPath),
@@ -1016,6 +1044,7 @@ function deriveName(relativePath, kind, manifest) {
1016
1044
  }
1017
1045
  async function discoverAssetsInTreeEntries(entries, options) {
1018
1046
  const registry = options.registry ?? createDefaultRegistry();
1047
+ const includeDev = options.includeDev ?? false;
1019
1048
  const blobByPath = /* @__PURE__ */ new Map();
1020
1049
  for (const entry of entries) {
1021
1050
  if (entry.type === "blob") {
@@ -1029,8 +1058,15 @@ async function discoverAssetsInTreeEntries(entries, options) {
1029
1058
  );
1030
1059
  const resolvedSourceConfig = options.sidecarSourceConfig ? mergeSourceConfigs(baseSourceConfig, options.sidecarSourceConfig) : baseSourceConfig;
1031
1060
  if (resolvedSourceConfig && isManifestMode(resolvedSourceConfig)) {
1032
- return discoverFromManifestTree(resolvedSourceConfig, blobByPath, options.fetchBlob, registry);
1061
+ return discoverFromManifestTree(
1062
+ resolvedSourceConfig,
1063
+ blobByPath,
1064
+ options.fetchBlob,
1065
+ registry,
1066
+ includeDev
1067
+ );
1033
1068
  }
1069
+ const devPaths = resolvedSourceConfig?.dev_paths ?? [];
1034
1070
  const sortedBlobPaths = [...blobByPath.keys()].sort();
1035
1071
  const assets = [];
1036
1072
  const errors = [];
@@ -1040,6 +1076,7 @@ async function discoverAssetsInTreeEntries(entries, options) {
1040
1076
  if (relativePath.startsWith(".git/") || relativePath.startsWith("node_modules/") || relativePath.startsWith(".skaile/") || relativePath.includes("/.git/") || relativePath.includes("/node_modules/") || relativePath.includes("/.skaile/")) {
1041
1077
  continue;
1042
1078
  }
1079
+ if (!includeDev && isExcludedDevPath(relativePath, devPaths)) continue;
1043
1080
  let kind;
1044
1081
  try {
1045
1082
  kind = registry.resolveKind(relativePath);
@@ -1082,7 +1119,7 @@ async function discoverAssetsInTreeEntries(entries, options) {
1082
1119
  }
1083
1120
  const publisher = resolvePublisher2(relativePath, resolvedSourceConfig);
1084
1121
  const name = deriveName2(relativePath, kind, manifest);
1085
- const version = typeof manifest.version === "string" ? manifest.version : "0.0.0";
1122
+ const version = typeof manifest.version === "string" ? manifest.version : "0.1.0";
1086
1123
  const ref = `${publisher}/${name}@${version}`;
1087
1124
  const fileFilter = computeFileFilter(kind, relativePath, blobByPath);
1088
1125
  let sha256;
@@ -1305,12 +1342,14 @@ async function resolveSourceConfigFromTree(explicit, blobByPath, fetchBlob) {
1305
1342
  const result = loadSourceConfig(bytes.toString("utf-8"));
1306
1343
  return result.ok ? result.config : void 0;
1307
1344
  }
1308
- async function discoverFromManifestTree(sourceConfig, blobByPath, fetchBlob, registry) {
1345
+ async function discoverFromManifestTree(sourceConfig, blobByPath, fetchBlob, registry, includeDev = false) {
1309
1346
  const assets = [];
1310
1347
  const errors = [];
1311
1348
  const allEdges = [];
1349
+ const devPaths = sourceConfig.dev_paths ?? [];
1312
1350
  const sortedEntries = [...sourceConfig.assets].sort((a, b) => a.path < b.path ? -1 : 1);
1313
1351
  for (const entry of sortedEntries) {
1352
+ if (!includeDev && isExcludedDevPath(entry.path, devPaths)) continue;
1314
1353
  const result = await processManifestEntryTree(entry, blobByPath, fetchBlob, registry);
1315
1354
  if (result.errors.length > 0) {
1316
1355
  errors.push(...result.errors);
@@ -1484,6 +1523,6 @@ function validateRequiresSyntax2(requires) {
1484
1523
  // discovery/src/index.ts
1485
1524
  var VERSION = "0.0.0";
1486
1525
 
1487
- export { AssetKindRegistry, BUILTIN_PROVIDERS, SEMVER_RE, SourceConfigSchema, VERSION, agentProvider, buildRequiresGraph, computeDeterministicHash, computeDeterministicHashDetailed, connectorProvider, contractProvider, createDefaultRegistry, detectCycles, discoverAssetsInTree, discoverAssetsInTreeEntries, discoverFromManifest, extractRequires, isManifestMode, loadMergedSourceConfig, loadSourceConfig, mcpServerProvider, mergeSourceConfigs, parseSourceConfig, personaProvider, presetProvider, promptProvider, rulesetProvider, skillProvider, validateSourceConfig };
1488
- //# sourceMappingURL=chunk-2GX7BE7Q.js.map
1489
- //# sourceMappingURL=chunk-2GX7BE7Q.js.map
1526
+ export { AssetKindRegistry, BUILTIN_PROVIDERS, SEMVER_RE, SourceConfigSchema, VERSION, agentProvider, buildRequiresGraph, computeDeterministicHash, computeDeterministicHashDetailed, connectorProvider, contractProvider, createDefaultRegistry, detectCycles, discoverAssetsInTree, discoverAssetsInTreeEntries, discoverFromManifest, extractRequires, isExcludedDevPath, isManifestMode, loadMergedSourceConfig, loadSourceConfig, mcpServerProvider, mergeSourceConfigs, parseSourceConfig, personaProvider, presetProvider, promptProvider, rulesetProvider, skillProvider, validateSourceConfig };
1527
+ //# sourceMappingURL=chunk-4S4TZDCD.js.map
1528
+ //# sourceMappingURL=chunk-4S4TZDCD.js.map