@skaile/workspaces 0.12.2 → 0.14.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 (106) hide show
  1. package/CHANGELOG.md +47 -0
  2. package/dist/asset-manager/index.js +4 -6
  3. package/dist/asset-manager/installer.js +1 -2
  4. package/dist/asset-manager/src/index.d.ts +1 -2
  5. package/dist/asset-manager/src/index.d.ts.map +1 -1
  6. package/dist/asset-manager/src/{scaffold/layers/agents.d.ts → install-agent.d.ts} +11 -33
  7. package/dist/asset-manager/src/install-agent.d.ts.map +1 -0
  8. package/dist/base-assets/connectors/deploy.js +2 -2
  9. package/dist/base-assets/connectors/devserver.js +2 -2
  10. package/dist/base-assets/connectors/flow/adapter.js +2 -2
  11. package/dist/base-assets/connectors/flow/run-flow.js +3 -3
  12. package/dist/base-assets/connectors/flow.js +2 -2
  13. package/dist/base-assets/connectors/git.js +2 -2
  14. package/dist/base-assets/connectors/gmail.js +2 -2
  15. package/dist/base-assets/connectors/googledrive/driver.d.ts +47 -0
  16. package/dist/base-assets/connectors/googledrive/driver.d.ts.map +1 -0
  17. package/dist/base-assets/connectors/googledrive.js +20 -0
  18. package/dist/base-assets/connectors/googledrive.js.map +1 -0
  19. package/dist/base-assets/connectors/local.js +2 -2
  20. package/dist/base-assets/connectors/mattermost.js +2 -2
  21. package/dist/base-assets/connectors/memory.js +2 -2
  22. package/dist/base-assets/connectors/minio.js +2 -2
  23. package/dist/base-assets/connectors/postgres.js +2 -2
  24. package/dist/base-assets/connectors/redis.js +2 -2
  25. package/dist/base-assets/connectors/s3.js +2 -2
  26. package/dist/base-assets/connectors/sharepoint/driver.d.ts.map +1 -1
  27. package/dist/base-assets/connectors/sharepoint.js +2 -2
  28. package/dist/base-assets/connectors/sqlite.js +2 -2
  29. package/dist/base-assets/connectors/static-server.js +2 -2
  30. package/dist/base-assets/connectors/tunnel.js +2 -2
  31. package/dist/base-assets/connectors/webdav/driver.d.ts.map +1 -1
  32. package/dist/base-assets/connectors/webdav.js +2 -2
  33. package/dist/base-assets/connectors/xstate-store.js +2 -2
  34. package/dist/base-assets/connectors/xstate.js +2 -2
  35. package/dist/base-assets/connectors/yjs.js +2 -2
  36. package/dist/{chunk-M2NLRGIX.js → chunk-4GEVGRWB.js} +159 -6
  37. package/dist/chunk-4GEVGRWB.js.map +1 -0
  38. package/dist/{chunk-EARKGKKB.js → chunk-7R4WLTZW.js} +5 -5
  39. package/dist/{chunk-EARKGKKB.js.map → chunk-7R4WLTZW.js.map} +1 -1
  40. package/dist/{chunk-UTKGPNLV.js → chunk-DN5476SV.js} +5 -5
  41. package/dist/{chunk-UTKGPNLV.js.map → chunk-DN5476SV.js.map} +1 -1
  42. package/dist/{chunk-Z5PO7ZVP.js → chunk-G7O7WDXX.js} +2 -2
  43. package/dist/{chunk-Z5PO7ZVP.js.map → chunk-G7O7WDXX.js.map} +1 -1
  44. package/dist/{chunk-EAJKY27M.js → chunk-HSOEX3TA.js} +250 -92
  45. package/dist/chunk-HSOEX3TA.js.map +1 -0
  46. package/dist/{chunk-DDVKNST3.js → chunk-OIFGKFZY.js} +3 -3
  47. package/dist/{chunk-DDVKNST3.js.map → chunk-OIFGKFZY.js.map} +1 -1
  48. package/dist/chunk-QAVZOJCV.js +72 -0
  49. package/dist/chunk-QAVZOJCV.js.map +1 -0
  50. package/dist/cli/index.js +93 -33
  51. package/dist/cli/index.js.map +1 -1
  52. package/dist/connectors/index.js +2 -2
  53. package/dist/connectors/rclone-config.js +1 -1
  54. package/dist/connectors/src/connector-registry.d.ts.map +1 -1
  55. package/dist/connectors/src/fleet-utils.d.ts +35 -0
  56. package/dist/connectors/src/fleet-utils.d.ts.map +1 -0
  57. package/dist/connectors/src/index.d.ts +2 -1
  58. package/dist/connectors/src/index.d.ts.map +1 -1
  59. package/dist/connectors/src/rclone-config/googledrive.d.ts +59 -0
  60. package/dist/connectors/src/rclone-config/googledrive.d.ts.map +1 -0
  61. package/dist/connectors/src/rclone-config/index.d.ts +1 -0
  62. package/dist/connectors/src/rclone-config/index.d.ts.map +1 -1
  63. package/dist/connectors/src/rclone-config/onedrive.d.ts +1 -0
  64. package/dist/connectors/src/rclone-config/onedrive.d.ts.map +1 -1
  65. package/dist/connectors/src/rclone-config/sanitize.d.ts +9 -0
  66. package/dist/connectors/src/rclone-config/sanitize.d.ts.map +1 -0
  67. package/dist/connectors/src/rclone-config/webdav.d.ts +1 -0
  68. package/dist/connectors/src/rclone-config/webdav.d.ts.map +1 -1
  69. package/dist/runner/index.js +5 -5
  70. package/dist/sdk/asset-manager.js +4 -6
  71. package/dist/sdk/index.js +5 -5
  72. package/dist/sdk/runner.js +5 -5
  73. package/dist/tui/index.js +5 -5
  74. package/dist/workspace-plugin/index.js +1 -1
  75. package/package.json +7 -7
  76. package/dist/asset-manager/scaffold.js +0 -18
  77. package/dist/asset-manager/scaffold.js.map +0 -1
  78. package/dist/asset-manager/src/scaffold/index.d.ts +0 -19
  79. package/dist/asset-manager/src/scaffold/index.d.ts.map +0 -1
  80. package/dist/asset-manager/src/scaffold/layers/agents.d.ts.map +0 -1
  81. package/dist/asset-manager/src/scaffold/layers/base.d.ts +0 -17
  82. package/dist/asset-manager/src/scaffold/layers/base.d.ts.map +0 -1
  83. package/dist/asset-manager/src/scaffold/layers/connectors.d.ts +0 -18
  84. package/dist/asset-manager/src/scaffold/layers/connectors.d.ts.map +0 -1
  85. package/dist/asset-manager/src/scaffold/layers/container.d.ts +0 -16
  86. package/dist/asset-manager/src/scaffold/layers/container.d.ts.map +0 -1
  87. package/dist/asset-manager/src/scaffold/layers/driver-target.d.ts +0 -17
  88. package/dist/asset-manager/src/scaffold/layers/driver-target.d.ts.map +0 -1
  89. package/dist/asset-manager/src/scaffold/layers/hooks.d.ts +0 -22
  90. package/dist/asset-manager/src/scaffold/layers/hooks.d.ts.map +0 -1
  91. package/dist/asset-manager/src/scaffold/layers/skills.d.ts +0 -31
  92. package/dist/asset-manager/src/scaffold/layers/skills.d.ts.map +0 -1
  93. package/dist/asset-manager/src/scaffold/layers/template.d.ts +0 -16
  94. package/dist/asset-manager/src/scaffold/layers/template.d.ts.map +0 -1
  95. package/dist/asset-manager/src/scaffold/scaffolder.d.ts +0 -77
  96. package/dist/asset-manager/src/scaffold/scaffolder.d.ts.map +0 -1
  97. package/dist/asset-manager/src/scaffold/types.d.ts +0 -241
  98. package/dist/asset-manager/src/scaffold/types.d.ts.map +0 -1
  99. package/dist/chunk-DIKFRNCS.js +0 -195
  100. package/dist/chunk-DIKFRNCS.js.map +0 -1
  101. package/dist/chunk-EAJKY27M.js.map +0 -1
  102. package/dist/chunk-GCRKAFH7.js +0 -40
  103. package/dist/chunk-GCRKAFH7.js.map +0 -1
  104. package/dist/chunk-M2NLRGIX.js.map +0 -1
  105. package/dist/chunk-YHXBQLXX.js +0 -546
  106. package/dist/chunk-YHXBQLXX.js.map +0 -1
@@ -1,31 +0,0 @@
1
- /**
2
- * Skills layer — installs AI resources into the workspace using the asset manager.
3
- *
4
- * Now that this layer lives inside @skaile/asset-manager, the AssetManager class
5
- * is loaded via a lazy import from the parent package index (no more dynamic
6
- * external dependency hack).
7
- *
8
- * When a scopeDir is specified, the asset manager operates against that directory
9
- * instead of the default project directory.
10
- */
11
- import type { SkillsLayerConfig } from "../types.js";
12
- /** Result of the skills scaffold layer. */
13
- export interface SkillsInstallResult {
14
- /** Asset refs (`kind:name`) installed by `skaile install` during scaffolding. */
15
- installed: string[];
16
- /** Non-fatal warnings (e.g. `skaile.yaml` not found, install failure). */
17
- warnings: string[];
18
- }
19
- /**
20
- * Apply the skills scaffold layer — runs `skaile install` to deploy all declared asset dependencies.
21
- *
22
- * Only runs when `config.autoInstall` is `true`. Skips silently when `skaile.yaml` is absent.
23
- *
24
- * @param dest - Absolute path to the workspace root.
25
- * @param config - Skills layer configuration from the template manifest.
26
- * @param log - Optional logger callback for progress messages.
27
- * @returns {@link SkillsInstallResult} with installed refs and warnings.
28
- * @docLink packages/asset-manager/concepts#scaffold-layers
29
- */
30
- export declare function applySkillsLayer(dest: string, config: SkillsLayerConfig | undefined, log?: (msg: string) => void): Promise<SkillsInstallResult>;
31
- //# sourceMappingURL=skills.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"skills.d.ts","sourceRoot":"","sources":["../../../../../asset-manager/src/scaffold/layers/skills.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAErD,2CAA2C;AAC3C,MAAM,WAAW,mBAAmB;IAClC,iFAAiF;IACjF,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,0EAA0E;IAC1E,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAeD;;;;;;;;;;GAUG;AACH,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,iBAAiB,GAAG,SAAS,EACrC,GAAG,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,GAC1B,OAAO,CAAC,mBAAmB,CAAC,CAqC9B"}
@@ -1,16 +0,0 @@
1
- /**
2
- * Template layer — applies agent definition files (SOUL.md, RULES.md, knowledge/)
3
- * and any additional template files.
4
- */
5
- import type { TemplateLayerConfig } from "../types.js";
6
- /**
7
- * Apply the template overlay layer — copies agent definition files (`SOUL.md`, `RULES.md`, `knowledge/`) and additional static template files into the workspace.
8
- *
9
- * @param dest - Absolute path to the workspace root.
10
- * @param config - Template layer configuration from the template manifest.
11
- * @param templateDir - Absolute path to the template directory (used to resolve relative `files[].src` paths).
12
- * @returns Array of created file paths relative to `dest`.
13
- * @docLink packages/asset-manager/concepts#scaffold-layers
14
- */
15
- export declare function applyTemplateLayer(dest: string, config: TemplateLayerConfig | undefined, templateDir?: string): string[];
16
- //# sourceMappingURL=template.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"template.d.ts","sourceRoot":"","sources":["../../../../../asset-manager/src/scaffold/layers/template.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAkBvD;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,mBAAmB,GAAG,SAAS,EACvC,WAAW,CAAC,EAAE,MAAM,GACnB,MAAM,EAAE,CAwEV"}
@@ -1,77 +0,0 @@
1
- /**
2
- * Main scaffolder — loads a workspace template (workspace.yaml) and applies
3
- * all configured layers in order: base → framework → template → skills → hooks → container.
4
- */
5
- import type { ScaffoldOptions, ScaffoldResult, TemplateManifest } from "./types.js";
6
- /**
7
- * Override the built-in templates directory. Call this from apps that bundle
8
- * skaile-agent-workspace (e.g. Nitro/Nuxt) where `import.meta.url` doesn't
9
- * resolve to the source package.
10
- *
11
- * @param dir - Absolute path to the custom templates directory.
12
- * @docLink packages/asset-manager/concepts#scaffolder
13
- */
14
- export declare function setTemplatesDir(dir: string): void;
15
- /**
16
- * Resolve a template name or path to an absolute path to `workspace.yaml`.
17
- *
18
- * Lookup order:
19
- * 1. Absolute or relative path to a `workspace.yaml` file.
20
- * 2. Directory containing `workspace.yaml`.
21
- * 3. Built-in template name matching `templates/<name>/workspace.yaml`.
22
- *
23
- * @param template - Template name (e.g. `"minimal"`) or path to a `workspace.yaml` / directory.
24
- * @returns Absolute path to `workspace.yaml`, or `null` when the template cannot be found.
25
- * @docLink packages/asset-manager/concepts#scaffolder
26
- */
27
- export declare function resolveTemplatePath(template: string): string | null;
28
- /**
29
- * Load and merge a template manifest, following `extends` chains.
30
- *
31
- * @param templatePath - Absolute path to a `workspace.yaml` template file.
32
- * @returns Merged `TemplateManifest` with parent sections folded in, and the template directory.
33
- * @docLink packages/asset-manager/concepts#scaffolder
34
- */
35
- export declare function loadTemplate(templatePath: string): {
36
- manifest: TemplateManifest;
37
- dir: string;
38
- };
39
- /**
40
- * List all available built-in templates.
41
- *
42
- * @returns Array of objects with `name`, `description`, and `path` for each available template.
43
- * @docLink packages/asset-manager/concepts#scaffolder
44
- */
45
- export declare function listTemplates(): Array<{
46
- name: string;
47
- description: string;
48
- path: string;
49
- }>;
50
- /**
51
- * Scaffold a new Skaile workspace from a template, applying layers in order.
52
- *
53
- * Layer application order:
54
- * 1. **Base** — creates `.skaile/`, `settings.json`, and `skaile.yaml`
55
- * 2. **Connectors** — writes connector declarations to `skaile.yaml`
56
- * 3. **Driver target** — creates framework-specific directories (`.claude/`, `.omp/`, etc.)
57
- * 4. **Template** — copies agent definition files and static template overlays
58
- * 5. **Agents** — renders and installs GitAgent packages
59
- * 6. **Skills** — runs `skaile install` (unless `opts.skipInstall` is `true`)
60
- * 7. **Hooks** — runs `git init`, writes `.gitignore`, executes setup scripts
61
- * 8. **Container** — generates `Dockerfile` and `docker-compose.yml` (when enabled)
62
- *
63
- * @param opts - Scaffold options including destination, template, and layer overrides.
64
- * @returns {@link ScaffoldResult} with created paths, installed skills, and warnings.
65
- * @example
66
- * ```ts
67
- * const result = await scaffoldWorkspace({
68
- * dest: "./my-workspace",
69
- * template: "minimal",
70
- * driverTarget: "claude-code",
71
- * });
72
- * console.log(`Created ${result.created.length} files`);
73
- * ```
74
- * @docLink packages/asset-manager/concepts#scaffolder
75
- */
76
- export declare function scaffoldWorkspace(opts: ScaffoldOptions): Promise<ScaffoldResult>;
77
- //# sourceMappingURL=scaffolder.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scaffolder.d.ts","sourceRoot":"","sources":["../../../../asset-manager/src/scaffold/scaffolder.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAeH,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAgBpF;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAEjD;AAID;;;;;;;;;;;GAWG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAiBnE;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,YAAY,EAAE,MAAM,GAAG;IAAE,QAAQ,EAAE,gBAAgB,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAwB9F;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,IAAI,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAwB1F;AAID;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC,CAsGtF"}
@@ -1,241 +0,0 @@
1
- /**
2
- * Workspace scaffolder types.
3
- */
4
- import type { DriverTarget } from "@skaile/workspaces/core";
5
- /**
6
- * A `workspace.yaml` template manifest that drives workspace scaffolding.
7
- *
8
- * @docLink packages/asset-manager/concepts#scaffold-types
9
- */
10
- export interface TemplateManifest {
11
- /** Human-readable template name shown in `skaile workspace list`. */
12
- name: string;
13
- /** One-line description of the template. */
14
- description: string;
15
- /** Semantic version of the template. */
16
- version: string;
17
- /** Base template to extend (layered inheritance). */
18
- extends?: string;
19
- /** Initial `.skaile/settings.json` values written during scaffolding. */
20
- settings?: Record<string, unknown>;
21
- /** AI resource config written to `skaile.yaml` (sources, requires). */
22
- "ai-assets"?: AiResourcesLayerConfig;
23
- /**
24
- * Framework scaffold config. `default-target` is the single source of truth
25
- * for the agent framework — used both to write `skaile.yaml` and to
26
- * create framework-specific directories (`.claude/`, `.omp/`, etc.).
27
- */
28
- framework?: DriverTargetLayerConfig;
29
- /** Connector declarations written to the `skaile.yaml` resources section. */
30
- connectors?: ConnectorEntry[];
31
- /** Template overlay layer config: agent definition files and static file copies. */
32
- template?: TemplateLayerConfig;
33
- /** Agent installation layer config: GitAgent packages to install. */
34
- agents?: AgentsLayerConfig;
35
- /** Skills installation layer config: asset-manager resource installation. */
36
- skills?: SkillsLayerConfig;
37
- /** Hooks layer config: git init, gitignore, and setup scripts. */
38
- hooks?: HooksLayerConfig;
39
- /** Container layer config: Dockerfile and docker-compose generation. */
40
- container?: ContainerLayerConfig;
41
- }
42
- /**
43
- * AI resource configuration written to the `skaile.yaml` `ai_resources` section.
44
- *
45
- * @docLink packages/asset-manager/concepts#scaffold-types
46
- */
47
- export interface AiResourcesLayerConfig {
48
- /** Skill/agent source repository declarations (name, local path, optional branch). */
49
- resources?: Array<{
50
- name: string;
51
- path: string;
52
- branch?: string;
53
- }>;
54
- /** Asset refs (`kind:name`) that must be installed in this workspace. */
55
- requires?: string[];
56
- }
57
- /**
58
- * Framework scaffold config that controls which agent directories are created.
59
- *
60
- * @docLink packages/asset-manager/concepts#scaffold-types
61
- */
62
- export interface DriverTargetLayerConfig {
63
- /**
64
- * Default agent driver target (e.g. `"claude-code"`, `"omp"`).
65
- * Single source of truth — controls both the `skaile.yaml` framework field and
66
- * the framework-specific directories created during scaffolding (`.claude/`, `.omp/`, etc.).
67
- * YAML key: `default-target`.
68
- */
69
- "default-target": string;
70
- /** Additional directories to create inside the workspace root (beyond framework defaults). */
71
- extras?: string[];
72
- }
73
- /**
74
- * Template overlay layer configuration.
75
- *
76
- * @docLink packages/asset-manager/concepts#scaffold-types
77
- */
78
- export interface TemplateLayerConfig {
79
- /** Path to the agent definition directory containing `SOUL.md`, `RULES.md`, and `knowledge/`. Relative to the template dir. */
80
- agentDir?: string;
81
- /** Inline `SOUL.md` content (alternative to `agentDir` when the soul is embedded in the manifest). */
82
- soul?: string;
83
- /** Inline `RULES.md` content. */
84
- rules?: string;
85
- /** Static files to copy from the template directory into the workspace root. */
86
- files?: Array<{
87
- src: string;
88
- dest: string;
89
- condition?: string;
90
- }>;
91
- }
92
- /**
93
- * A single agent installation entry in the `agents.install` list.
94
- *
95
- * @docLink packages/asset-manager/concepts#scaffold-types
96
- */
97
- export interface AgentInstallEntry {
98
- /** Path to the agent source directory (contains agent.yaml). Relative to template dir or absolute. */
99
- src: string;
100
- /** Install name override. Defaults to the name field in agent.yaml. */
101
- name?: string;
102
- /**
103
- * Whether to resolve and install sub-agents from agent.yaml requires[].
104
- * Each required agent is mounted at {agentDir}/{mount}. Default: true.
105
- */
106
- includeSubAgents?: boolean;
107
- }
108
- /**
109
- * Agent installation layer configuration.
110
- *
111
- * @docLink packages/asset-manager/concepts#scaffold-layers
112
- */
113
- export interface AgentsLayerConfig {
114
- /** GitAgent packages to install into the framework's agent deploy directory. */
115
- install?: AgentInstallEntry[];
116
- }
117
- /**
118
- * Skills installation layer configuration.
119
- *
120
- * @docLink packages/asset-manager/concepts#scaffold-layers
121
- */
122
- export interface SkillsLayerConfig {
123
- /** Run `skaile install` automatically after scaffolding to deploy all declared dependencies. */
124
- autoInstall?: boolean;
125
- /** Catalog scope directory for asset manager operations. Defaults to project-level scope. */
126
- scopeDir?: string;
127
- }
128
- /**
129
- * Hooks layer configuration: git initialization and post-scaffold scripts.
130
- *
131
- * @docLink packages/asset-manager/concepts#scaffold-layers
132
- */
133
- export interface HooksLayerConfig {
134
- /** Run `git init` in the scaffolded workspace. */
135
- gitInit?: boolean;
136
- /** Lines to append to `.gitignore` (entries that don't already exist are added). */
137
- gitignore?: string[];
138
- /** Shell commands to run sequentially after all layers complete. */
139
- setupScripts?: Array<{
140
- name: string;
141
- run: string;
142
- cwd?: string;
143
- }>;
144
- }
145
- /**
146
- * Container layer configuration for Dockerfile and docker-compose generation.
147
- *
148
- * @docLink packages/asset-manager/concepts#scaffold-layers
149
- */
150
- export interface ContainerLayerConfig {
151
- /** Set to `true` to generate `Dockerfile` and `docker-compose.yml`. */
152
- enabled?: boolean;
153
- /** Base Docker image (e.g. `"node:22-alpine"`). */
154
- baseImage?: string;
155
- /** Agent CLI package names to pre-install in the container image. */
156
- agents?: string[];
157
- /** Alpine system packages to install via `apk add`. */
158
- packages?: string[];
159
- /** Volume or bind-mount definitions passed to docker-compose. */
160
- mounts?: Array<{
161
- type: "bind" | "volume";
162
- source: string;
163
- target: string;
164
- }>;
165
- /** Ports to expose from the container (e.g. `["3000:3000"]`). */
166
- ports?: string[];
167
- /** Environment variable names to pass through from the host to the container. */
168
- env?: string[];
169
- /** WebSocket port used for agent IPC inside the container. */
170
- wsPort?: number;
171
- }
172
- /**
173
- * A connector declaration written to the `skaile.yaml` resources section.
174
- *
175
- * @docLink packages/asset-manager/concepts#scaffold-types
176
- */
177
- export interface ConnectorEntry {
178
- /** Unique connector ID used to reference the connector in tools and configs. */
179
- id: string;
180
- /** Connector driver type (e.g. `"postgres"`, `"redis"`, `"sqlite"`, `"webdav"`). */
181
- driver: string;
182
- /** Data access level enforced at runtime. Defaults to `"read-only"`. */
183
- access?: "read-only" | "read-write";
184
- /** Authentication method identifier for the connector. */
185
- auth?: string;
186
- /** When `true`, mount the connector automatically on session start. */
187
- autoMount?: boolean;
188
- /** Filesystem path where the connector's mount is mounted. */
189
- mountPath?: string;
190
- /** Driver-specific options passed through to the connector adapter. */
191
- options?: Record<string, unknown>;
192
- }
193
- /**
194
- * Options for {@link scaffoldWorkspace}. All fields except `dest` and `template` are overrides that win over the template manifest.
195
- *
196
- * @docLink packages/asset-manager/concepts#scaffolder
197
- */
198
- export interface ScaffoldOptions {
199
- /** Absolute or relative path to the target directory to scaffold into. */
200
- dest: string;
201
- /** Built-in template name (e.g. `"minimal"`) or path to a `workspace.yaml` file. */
202
- template: string;
203
- /** Project name written to `skaile.yaml`. Defaults to `basename(dest)`. */
204
- name?: string;
205
- /** Settings merged over template defaults and written to `.skaile/settings.json`. */
206
- settings?: Record<string, unknown>;
207
- /** Override the agent driver target declared in the template. */
208
- driverTarget?: DriverTarget;
209
- /** Override the AI resource repository sources declared in the template. */
210
- resources?: Array<{
211
- name: string;
212
- path: string;
213
- branch?: string;
214
- }>;
215
- /** Override the skill requirements declared in the template. */
216
- requires?: string[];
217
- /** GitAgent packages to install (overrides the template `agents.install` list). */
218
- agentInstall?: AgentInstallEntry[];
219
- /** Skip the asset install step even when the template has `skills.autoInstall: true`. */
220
- skipInstall?: boolean;
221
- /** Enable Docker support even when the template does not declare a container layer. */
222
- docker?: boolean;
223
- /** Optional logger callback for layer-by-layer progress messages. */
224
- log?: (msg: string) => void;
225
- }
226
- /**
227
- * Result of a completed {@link scaffoldWorkspace} call.
228
- *
229
- * @docLink packages/asset-manager/concepts#scaffolder
230
- */
231
- export interface ScaffoldResult {
232
- /** Absolute path to the scaffolded workspace. */
233
- path: string;
234
- /** Paths to files and directories created, relative to `dest`. */
235
- created: string[];
236
- /** Asset refs installed by the skills layer (empty when `skipInstall` is `true`). */
237
- installed: string[];
238
- /** Non-fatal warnings collected across all layers. */
239
- warnings: string[];
240
- }
241
- //# sourceMappingURL=types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../asset-manager/src/scaffold/types.ts"],"names":[],"mappings":"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"}
@@ -1,195 +0,0 @@
1
- import { DRIVER_TARGETS } from './chunk-O4JH3KUE.js';
2
- import { renderAgentToFramework } from './chunk-6FNCZYJY.js';
3
- import { resolveFragments, loadPromptExtensions } from './chunk-CGYEHQOX.js';
4
- import { existsSync, readFileSync } from 'fs';
5
- import { resolve, basename, join, relative, isAbsolute } from 'path';
6
- import { parse } from 'yaml';
7
-
8
- function readManifest(agentDir) {
9
- const yamlPath = join(agentDir, "agent.yaml");
10
- if (!existsSync(yamlPath)) return null;
11
- try {
12
- return parse(readFileSync(yamlPath, "utf-8"));
13
- } catch {
14
- return null;
15
- }
16
- }
17
- function readFile(agentDir, name) {
18
- const p = join(agentDir, name);
19
- if (!existsSync(p)) return null;
20
- try {
21
- return readFileSync(p, "utf-8");
22
- } catch {
23
- return null;
24
- }
25
- }
26
- function parseFrontmatter(content) {
27
- const match = content.match(/^---\n([\s\S]*?)\n---/);
28
- if (!match) return {};
29
- try {
30
- return parse(match[1]) ?? {};
31
- } catch {
32
- return {};
33
- }
34
- }
35
- function mergeManifests(parent, child) {
36
- const result = { ...parent };
37
- for (const [k, val] of Object.entries(child)) {
38
- if (val === void 0) continue;
39
- const parentVal = result[k];
40
- if (Array.isArray(val) && Array.isArray(parentVal)) {
41
- result[k] = [.../* @__PURE__ */ new Set([...parentVal, ...val])];
42
- } else {
43
- result[k] = val;
44
- }
45
- }
46
- return result;
47
- }
48
- function installAgent(srcDir, agentDeployDir, workspaceRoot, driverTarget, skillsRelDir, nameOverride, includeSubAgents, visited, wsConfig, log) {
49
- const created = [];
50
- const warnings = [];
51
- const realSrc = resolve(srcDir);
52
- if (visited.has(realSrc)) return { created, warnings };
53
- visited.add(realSrc);
54
- let manifest = readManifest(srcDir);
55
- if (!manifest) {
56
- warnings.push(`${srcDir} has no agent.yaml \u2014 skipping (not a valid GitAgent package)`);
57
- return { created, warnings };
58
- }
59
- if (manifest.extends) {
60
- const parentDir = resolve(srcDir, manifest.extends);
61
- const parentManifest = readManifest(parentDir);
62
- if (parentManifest) {
63
- manifest = mergeManifests(parentManifest, manifest);
64
- } else {
65
- warnings.push(
66
- `extends: parent agent not found at "${manifest.extends}" (from ${srcDir}) \u2014 skipping inheritance`
67
- );
68
- }
69
- }
70
- const agentName = nameOverride ?? manifest.name ?? basename(srcDir);
71
- log?.(`Installing git-agent: ${agentName} (${driverTarget})`);
72
- const abilityRefs = [];
73
- for (const name of manifest.abilities ?? []) {
74
- const skillMdPath = join(workspaceRoot, skillsRelDir, name, "SKILL.md");
75
- if (!existsSync(skillMdPath)) continue;
76
- try {
77
- const fm = parseFrontmatter(readFileSync(skillMdPath, "utf-8"));
78
- const desc = typeof fm.description === "string" ? fm.description : void 0;
79
- if (desc) abilityRefs.push({ name, description: desc });
80
- } catch {
81
- }
82
- }
83
- const contractRefs = [];
84
- for (const name of manifest.contracts ?? []) {
85
- const contractAbsPath = join(workspaceRoot, skillsRelDir, name, "CONTRACT.md");
86
- if (!existsSync(contractAbsPath)) continue;
87
- contractRefs.push({ name, relativePath: relative(workspaceRoot, contractAbsPath) });
88
- }
89
- const subAgentNames = (manifest.requires ?? []).filter((r) => r.name).map((r) => r.name);
90
- const connectors = (wsConfig?.connectors ?? []).map((c) => ({
91
- id: c.id,
92
- driver: c.driver,
93
- access: c.access ?? "read-write"
94
- }));
95
- const agentsRelDir = DRIVER_TARGETS[driverTarget]?.local.agent ?? "";
96
- const fragmentCtx = {
97
- framework: driverTarget,
98
- skillsDir: skillsRelDir,
99
- agentsDir: agentsRelDir,
100
- subAgents: subAgentNames,
101
- connectors,
102
- abilityRefs,
103
- contractRefs
104
- };
105
- const frameworkFragments = resolveFragments(
106
- fragmentCtx,
107
- wsConfig?.agent?.fragments,
108
- workspaceRoot
109
- );
110
- const promptExtensions = loadPromptExtensions(
111
- wsConfig?.agent?.["prompt-extensions"],
112
- workspaceRoot
113
- );
114
- const input = {
115
- manifest,
116
- soul: readFile(srcDir, "SOUL.md"),
117
- rules: readFile(srcDir, "RULES.md"),
118
- duties: readFile(srcDir, "DUTIES.md"),
119
- agentName,
120
- agentDeployDir,
121
- workspaceRoot,
122
- abilityRefs,
123
- contractRefs,
124
- frameworkFragments,
125
- promptExtensions
126
- };
127
- const result = renderAgentToFramework(input, driverTarget, log);
128
- created.push(...result.created);
129
- warnings.push(...result.warnings);
130
- if (includeSubAgents) {
131
- for (const req of manifest.requires ?? []) {
132
- if (!req.source || !req.name) continue;
133
- const subSrc = isAbsolute(req.source) ? req.source : resolve(srcDir, req.source);
134
- if (!existsSync(subSrc)) {
135
- warnings.push(`Sub-agent source not found: ${req.source} (from ${agentName})`);
136
- continue;
137
- }
138
- const sub = installAgent(
139
- subSrc,
140
- agentDeployDir,
141
- workspaceRoot,
142
- driverTarget,
143
- skillsRelDir,
144
- void 0,
145
- // use sub-agent's own name from its agent.yaml
146
- includeSubAgents,
147
- visited,
148
- wsConfig,
149
- log
150
- );
151
- created.push(...sub.created);
152
- warnings.push(...sub.warnings);
153
- }
154
- }
155
- return { created, warnings };
156
- }
157
- async function applyAgentsLayer(dest, config, driverTarget, templateDir, wsConfig, log) {
158
- const created = [];
159
- const warnings = [];
160
- if (!config?.install?.length) return { created, warnings };
161
- const targetMap = DRIVER_TARGETS[driverTarget];
162
- if (!targetMap) {
163
- warnings.push(`Unknown driver target "${driverTarget}" \u2014 skipping agent install`);
164
- return { created, warnings };
165
- }
166
- const agentDeployDir = join(dest, targetMap.local.agent);
167
- const skillsRelDir = targetMap.local.skill;
168
- const visited = /* @__PURE__ */ new Set();
169
- for (const entry of config.install) {
170
- const srcDir = isAbsolute(entry.src) ? entry.src : resolve(templateDir, entry.src);
171
- if (!existsSync(srcDir)) {
172
- warnings.push(`Agent source not found: ${entry.src}`);
173
- continue;
174
- }
175
- const r = installAgent(
176
- srcDir,
177
- agentDeployDir,
178
- dest,
179
- driverTarget,
180
- skillsRelDir,
181
- entry.name,
182
- entry.includeSubAgents ?? true,
183
- visited,
184
- wsConfig,
185
- log
186
- );
187
- created.push(...r.created);
188
- warnings.push(...r.warnings);
189
- }
190
- return { created, warnings };
191
- }
192
-
193
- export { applyAgentsLayer, installAgent };
194
- //# sourceMappingURL=chunk-DIKFRNCS.js.map
195
- //# sourceMappingURL=chunk-DIKFRNCS.js.map
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../asset-manager/src/scaffold/layers/agents.ts"],"names":["parseYaml"],"mappings":"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","file":"chunk-DIKFRNCS.js","sourcesContent":["/**\n * Agents layer — installs GitAgent packages into framework-native sub-agent formats.\n *\n * A GitAgent package (agent.yaml + SOUL.md + RULES.md) is transformed by a\n * framework-specific renderer into the file format the target framework natively reads.\n *\n * Supported backends (must have a bridge driver):\n * claude-code → .claude/agents/<name>.md\n * omp → .omp/agents/<name>/ (directory with agent.yaml + SOUL.md)\n * codex → .codex/agents/<name>.toml\n *\n * Sub-agents: when includeSubAgents is true (default), requires[] entries in agent.yaml\n * are resolved and installed as separate top-level agents in the same deploy directory.\n * All frameworks flatten sub-agents — there is no nesting.\n *\n * System prompt phases (per agent):\n * 1. extends merge — inherit from parent agent.yaml if manifest.extends is set\n * 2. ability refs — read SKILL.md frontmatter from installed skills dir\n * 3. contract refs — locate CONTRACT.md files in the installed skills dir\n * 4. fragments — resolve framework fragments (agent-mode, handoff, etc.)\n * 5. prompt-extensions — load per-project markdown extensions from skaile.yaml\n */\n\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { basename, isAbsolute, join, relative, resolve } from \"node:path\";\nimport { DRIVER_TARGETS } from \"@skaile/workspaces/core\";\nimport type { DriverTarget, SkWorkspaceConfig } from \"@skaile/workspaces/core\";\nimport { parse as parseYaml } from \"yaml\";\nimport type { AgentsLayerConfig } from \"../types.js\";\nimport {\n type AbilityRef,\n type ConnectorRef,\n type ContractRef,\n type FragmentContext,\n loadPromptExtensions,\n resolveFragments,\n} from \"../../fragments.js\";\nimport {\n type AgentManifest,\n type AgentRenderInput,\n renderAgentToFramework,\n} from \"../../renderers.js\";\n\n// ── Helpers ───────────────────────────────────────────────────────────────────\n\nfunction readManifest(agentDir: string): AgentManifest | null {\n const yamlPath = join(agentDir, \"agent.yaml\");\n if (!existsSync(yamlPath)) return null;\n try {\n return parseYaml(readFileSync(yamlPath, \"utf-8\")) as AgentManifest;\n } catch {\n return null;\n }\n}\n\nfunction readFile(agentDir: string, name: string): string | null {\n const p = join(agentDir, name);\n if (!existsSync(p)) return null;\n try {\n return readFileSync(p, \"utf-8\");\n } catch {\n return null;\n }\n}\n\n/** Extract YAML frontmatter from a markdown file (content between first two --- delimiters). */\nfunction parseFrontmatter(content: string): Record<string, unknown> {\n const match = content.match(/^---\\n([\\s\\S]*?)\\n---/);\n if (!match) return {};\n try {\n return (parseYaml(match[1]!) as Record<string, unknown>) ?? {};\n } catch {\n return {};\n }\n}\n\n/**\n * Merge parent and child agent manifests.\n * Scalars: child wins. Arrays: parent + child, deduplicated.\n */\nfunction mergeManifests(parent: AgentManifest, child: AgentManifest): AgentManifest {\n const result: AgentManifest = { ...parent };\n for (const [k, val] of Object.entries(child) as [keyof AgentManifest, unknown][]) {\n if (val === undefined) continue;\n const parentVal = result[k as keyof AgentManifest];\n if (Array.isArray(val) && Array.isArray(parentVal)) {\n (result as Record<string, unknown>)[k] = [...new Set([...parentVal, ...val])];\n } else {\n (result as Record<string, unknown>)[k] = val;\n }\n }\n return result;\n}\n\n// ── Core installation ─────────────────────────────────────────────────────────\n\n/**\n * Install a single GitAgent source directory using the appropriate renderer.\n *\n * When `includeSubAgents` is `true`, recursively installs `requires[]` entries as\n * separate flat agents in the same deploy directory (no nesting). Tracks visited\n * directories to prevent infinite loops in `requires[]` cycles.\n *\n * @param srcDir - Absolute path to the GitAgent source directory (contains `agent.yaml`).\n * @param agentDeployDir - Absolute path to the framework's agent deploy directory.\n * @param workspaceRoot - Absolute path to the workspace root.\n * @param driverTarget - Agent framework ID used to select the renderer.\n * @param skillsRelDir - Relative path to the installed skills dir (e.g. `\".claude/skills\"`).\n * @param nameOverride - Override name for the installed agent. Defaults to `manifest.name`.\n * @param includeSubAgents - When `true`, recursively install `requires[]` sub-agents.\n * @param visited - Set of resolved source paths already processed (cycle guard).\n * @param wsConfig - Workspace config from `skaile.yaml` (fragments, connectors, extensions).\n * @param log - Optional logger callback for progress messages.\n * @returns Object with `created` file paths and `warnings` list.\n * @docLink packages/asset-manager/concepts#scaffold-layers\n */\nexport function installAgent(\n srcDir: string,\n agentDeployDir: string,\n workspaceRoot: string,\n driverTarget: string,\n /** Relative path to the installed skills dir (e.g. \".claude/skills\") */\n skillsRelDir: string,\n nameOverride: string | undefined,\n includeSubAgents: boolean,\n visited: Set<string>,\n wsConfig: SkWorkspaceConfig | undefined,\n log?: (msg: string) => void,\n): { created: string[]; warnings: string[] } {\n const created: string[] = [];\n const warnings: string[] = [];\n\n const realSrc = resolve(srcDir);\n if (visited.has(realSrc)) return { created, warnings };\n visited.add(realSrc);\n\n let manifest = readManifest(srcDir);\n if (!manifest) {\n warnings.push(`${srcDir} has no agent.yaml — skipping (not a valid GitAgent package)`);\n return { created, warnings };\n }\n\n // Phase 1: extends merge — inherit scalars/arrays from parent agent\n if (manifest.extends) {\n const parentDir = resolve(srcDir, manifest.extends);\n const parentManifest = readManifest(parentDir);\n if (parentManifest) {\n manifest = mergeManifests(parentManifest, manifest);\n } else {\n warnings.push(\n `extends: parent agent not found at \"${manifest.extends}\" (from ${srcDir}) — skipping inheritance`,\n );\n }\n }\n\n const agentName = nameOverride ?? manifest.name ?? basename(srcDir);\n\n log?.(`Installing git-agent: ${agentName} (${driverTarget})`);\n\n // Phase 2: resolve ability refs — read description from installed SKILL.md files\n const abilityRefs: AbilityRef[] = [];\n for (const name of manifest.abilities ?? []) {\n const skillMdPath = join(workspaceRoot, skillsRelDir, name, \"SKILL.md\");\n if (!existsSync(skillMdPath)) continue;\n try {\n const fm = parseFrontmatter(readFileSync(skillMdPath, \"utf-8\"));\n const desc = typeof fm.description === \"string\" ? fm.description : undefined;\n if (desc) abilityRefs.push({ name, description: desc });\n } catch {\n // skip unreadable SKILL.md\n }\n }\n\n // Phase 3: resolve contract refs — locate CONTRACT.md files in the skills dir\n const contractRefs: ContractRef[] = [];\n for (const name of manifest.contracts ?? []) {\n const contractAbsPath = join(workspaceRoot, skillsRelDir, name, \"CONTRACT.md\");\n if (!existsSync(contractAbsPath)) continue;\n contractRefs.push({ name, relativePath: relative(workspaceRoot, contractAbsPath) });\n }\n\n // Phase 4: build fragment context and resolve framework fragments + prompt extensions\n const subAgentNames = (manifest.requires ?? []).filter((r) => r.name).map((r) => r.name);\n\n const connectors: ConnectorRef[] = (wsConfig?.connectors ?? []).map((c) => ({\n id: c.id,\n driver: c.driver,\n access: c.access ?? \"read-write\",\n }));\n\n const agentsRelDir = DRIVER_TARGETS[driverTarget as DriverTarget]?.local.agent ?? \"\";\n\n const fragmentCtx: FragmentContext = {\n framework: driverTarget,\n skillsDir: skillsRelDir,\n agentsDir: agentsRelDir,\n subAgents: subAgentNames,\n connectors,\n abilityRefs,\n contractRefs,\n };\n\n const frameworkFragments = resolveFragments(\n fragmentCtx,\n wsConfig?.agent?.fragments,\n workspaceRoot,\n );\n const promptExtensions = loadPromptExtensions(\n wsConfig?.agent?.[\"prompt-extensions\"],\n workspaceRoot,\n );\n\n const input: AgentRenderInput = {\n manifest,\n soul: readFile(srcDir, \"SOUL.md\"),\n rules: readFile(srcDir, \"RULES.md\"),\n duties: readFile(srcDir, \"DUTIES.md\"),\n agentName,\n agentDeployDir,\n workspaceRoot,\n abilityRefs,\n contractRefs,\n frameworkFragments,\n promptExtensions,\n };\n\n const result = renderAgentToFramework(input, driverTarget, log);\n created.push(...result.created);\n warnings.push(...result.warnings);\n\n // Recursively install sub-agents from requires[] as flat top-level agents\n if (includeSubAgents) {\n for (const req of manifest.requires ?? []) {\n if (!req.source || !req.name) continue;\n\n const subSrc = isAbsolute(req.source) ? req.source : resolve(srcDir, req.source);\n\n if (!existsSync(subSrc)) {\n warnings.push(`Sub-agent source not found: ${req.source} (from ${agentName})`);\n continue;\n }\n\n const sub = installAgent(\n subSrc,\n agentDeployDir,\n workspaceRoot,\n driverTarget,\n skillsRelDir,\n undefined, // use sub-agent's own name from its agent.yaml\n includeSubAgents,\n visited,\n wsConfig,\n log,\n );\n created.push(...sub.created);\n warnings.push(...sub.warnings);\n }\n }\n\n return { created, warnings };\n}\n\n// ── Public layer function ─────────────────────────────────────────────────────\n\n/**\n * Apply the agents scaffold layer — installs all GitAgent entries from `config.install` into the framework deploy directory.\n *\n * @param dest - Absolute path to the workspace root being scaffolded.\n * @param config - Agents layer configuration from the template manifest (or `ScaffoldOptions`).\n * @param driverTarget - Agent framework to render agents for.\n * @param templateDir - Absolute path to the template directory (used to resolve relative `src` paths).\n * @param wsConfig - Workspace config from the scaffolded `skaile.yaml`.\n * @param log - Optional logger callback.\n * @returns Object with `created` file paths and `warnings` list.\n * @docLink packages/asset-manager/concepts#scaffold-layers\n */\nexport async function applyAgentsLayer(\n dest: string,\n config: AgentsLayerConfig | undefined,\n driverTarget: DriverTarget,\n templateDir: string,\n wsConfig?: SkWorkspaceConfig,\n log?: (msg: string) => void,\n): Promise<{ created: string[]; warnings: string[] }> {\n const created: string[] = [];\n const warnings: string[] = [];\n\n if (!config?.install?.length) return { created, warnings };\n\n const targetMap = DRIVER_TARGETS[driverTarget];\n if (!targetMap) {\n warnings.push(`Unknown driver target \"${driverTarget}\" — skipping agent install`);\n return { created, warnings };\n }\n\n const agentDeployDir = join(dest, targetMap.local.agent);\n const skillsRelDir = targetMap.local.skill;\n const visited = new Set<string>();\n\n for (const entry of config.install) {\n const srcDir = isAbsolute(entry.src) ? entry.src : resolve(templateDir, entry.src);\n\n if (!existsSync(srcDir)) {\n warnings.push(`Agent source not found: ${entry.src}`);\n continue;\n }\n\n const r = installAgent(\n srcDir,\n agentDeployDir,\n dest,\n driverTarget,\n skillsRelDir,\n entry.name,\n entry.includeSubAgents ?? true,\n visited,\n wsConfig,\n log,\n );\n created.push(...r.created);\n warnings.push(...r.warnings);\n }\n\n return { created, warnings };\n}\n"]}