@clawmasons/mason 0.1.1 → 0.1.3

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 (155) hide show
  1. package/dist/acp/bridge.d.ts +92 -0
  2. package/dist/acp/bridge.d.ts.map +1 -0
  3. package/dist/acp/bridge.js +266 -0
  4. package/dist/acp/bridge.js.map +1 -0
  5. package/dist/acp/logger.d.ts +18 -0
  6. package/dist/acp/logger.d.ts.map +1 -0
  7. package/dist/acp/logger.js +35 -0
  8. package/dist/acp/logger.js.map +1 -0
  9. package/dist/acp/matcher.d.ts +60 -0
  10. package/dist/acp/matcher.d.ts.map +1 -0
  11. package/dist/acp/matcher.js +101 -0
  12. package/dist/acp/matcher.js.map +1 -0
  13. package/dist/acp/rewriter.d.ts +35 -0
  14. package/dist/acp/rewriter.d.ts.map +1 -0
  15. package/dist/acp/rewriter.js +46 -0
  16. package/dist/acp/rewriter.js.map +1 -0
  17. package/dist/acp/session.d.ts +202 -0
  18. package/dist/acp/session.d.ts.map +1 -0
  19. package/dist/acp/session.js +444 -0
  20. package/dist/acp/session.js.map +1 -0
  21. package/dist/acp/warnings.d.ts +24 -0
  22. package/dist/acp/warnings.d.ts.map +1 -0
  23. package/dist/acp/warnings.js +32 -0
  24. package/dist/acp/warnings.js.map +1 -0
  25. package/dist/cli/bin.d.ts +3 -0
  26. package/dist/cli/bin.d.ts.map +1 -0
  27. package/dist/cli/bin.js +4 -0
  28. package/dist/cli/bin.js.map +1 -0
  29. package/dist/cli/commands/build.d.ts +22 -0
  30. package/dist/cli/commands/build.d.ts.map +1 -0
  31. package/dist/cli/commands/build.js +107 -0
  32. package/dist/cli/commands/build.js.map +1 -0
  33. package/dist/cli/commands/docker-utils.d.ts +16 -0
  34. package/dist/cli/commands/docker-utils.d.ts.map +1 -0
  35. package/dist/cli/commands/docker-utils.js +54 -0
  36. package/dist/cli/commands/docker-utils.js.map +1 -0
  37. package/dist/cli/commands/index.d.ts +11 -0
  38. package/dist/cli/commands/index.d.ts.map +1 -0
  39. package/dist/cli/commands/index.js +89 -0
  40. package/dist/cli/commands/index.js.map +1 -0
  41. package/dist/cli/commands/list.d.ts +8 -0
  42. package/dist/cli/commands/list.d.ts.map +1 -0
  43. package/dist/cli/commands/list.js +60 -0
  44. package/dist/cli/commands/list.js.map +1 -0
  45. package/dist/cli/commands/package.d.ts +14 -0
  46. package/dist/cli/commands/package.d.ts.map +1 -0
  47. package/dist/cli/commands/package.js +252 -0
  48. package/dist/cli/commands/package.js.map +1 -0
  49. package/dist/cli/commands/permissions.d.ts +8 -0
  50. package/dist/cli/commands/permissions.d.ts.map +1 -0
  51. package/dist/cli/commands/permissions.js +60 -0
  52. package/dist/cli/commands/permissions.js.map +1 -0
  53. package/dist/cli/commands/proxy.d.ts +12 -0
  54. package/dist/cli/commands/proxy.d.ts.map +1 -0
  55. package/dist/cli/commands/proxy.js +253 -0
  56. package/dist/cli/commands/proxy.js.map +1 -0
  57. package/dist/cli/commands/run-agent.d.ts +171 -0
  58. package/dist/cli/commands/run-agent.d.ts.map +1 -0
  59. package/dist/cli/commands/run-agent.js +1180 -0
  60. package/dist/cli/commands/run-agent.js.map +1 -0
  61. package/dist/cli/commands/validate.d.ts +10 -0
  62. package/dist/cli/commands/validate.d.ts.map +1 -0
  63. package/dist/cli/commands/validate.js +138 -0
  64. package/dist/cli/commands/validate.js.map +1 -0
  65. package/dist/cli/index.d.ts +5 -0
  66. package/dist/cli/index.d.ts.map +1 -0
  67. package/dist/cli/index.js +18 -0
  68. package/dist/cli/index.js.map +1 -0
  69. package/dist/cli/proxy-entry.d.ts +8 -0
  70. package/dist/cli/proxy-entry.d.ts.map +1 -0
  71. package/dist/cli/proxy-entry.js +25 -0
  72. package/dist/cli/proxy-entry.js.map +1 -0
  73. package/dist/generator/agent-dockerfile.d.ts +38 -0
  74. package/dist/generator/agent-dockerfile.d.ts.map +1 -0
  75. package/dist/generator/agent-dockerfile.js +129 -0
  76. package/dist/generator/agent-dockerfile.js.map +1 -0
  77. package/dist/generator/credential-service-dockerfile.d.ts +14 -0
  78. package/dist/generator/credential-service-dockerfile.d.ts.map +1 -0
  79. package/dist/generator/credential-service-dockerfile.js +44 -0
  80. package/dist/generator/credential-service-dockerfile.js.map +1 -0
  81. package/dist/generator/index.d.ts +6 -0
  82. package/dist/generator/index.d.ts.map +1 -0
  83. package/dist/generator/index.js +6 -0
  84. package/dist/generator/index.js.map +1 -0
  85. package/dist/generator/mount-volumes.d.ts +30 -0
  86. package/dist/generator/mount-volumes.d.ts.map +1 -0
  87. package/dist/generator/mount-volumes.js +39 -0
  88. package/dist/generator/mount-volumes.js.map +1 -0
  89. package/dist/generator/proxy-dockerfile.d.ts +19 -0
  90. package/dist/generator/proxy-dockerfile.d.ts.map +1 -0
  91. package/dist/generator/proxy-dockerfile.js +59 -0
  92. package/dist/generator/proxy-dockerfile.js.map +1 -0
  93. package/dist/index.d.ts +8 -0
  94. package/dist/index.d.ts.map +1 -0
  95. package/dist/index.js +8 -0
  96. package/dist/index.js.map +1 -0
  97. package/dist/materializer/common.d.ts +17 -0
  98. package/dist/materializer/common.d.ts.map +1 -0
  99. package/dist/materializer/common.js +37 -0
  100. package/dist/materializer/common.js.map +1 -0
  101. package/dist/materializer/docker-generator.d.ts +258 -0
  102. package/dist/materializer/docker-generator.d.ts.map +1 -0
  103. package/dist/materializer/docker-generator.js +529 -0
  104. package/dist/materializer/docker-generator.js.map +1 -0
  105. package/dist/materializer/index.d.ts +9 -0
  106. package/dist/materializer/index.d.ts.map +1 -0
  107. package/dist/materializer/index.js +7 -0
  108. package/dist/materializer/index.js.map +1 -0
  109. package/dist/materializer/proxy-dependencies.d.ts +43 -0
  110. package/dist/materializer/proxy-dependencies.d.ts.map +1 -0
  111. package/dist/materializer/proxy-dependencies.js +452 -0
  112. package/dist/materializer/proxy-dependencies.js.map +1 -0
  113. package/dist/materializer/role-materializer.d.ts +56 -0
  114. package/dist/materializer/role-materializer.d.ts.map +1 -0
  115. package/dist/materializer/role-materializer.js +119 -0
  116. package/dist/materializer/role-materializer.js.map +1 -0
  117. package/dist/materializer/types.d.ts +2 -0
  118. package/dist/materializer/types.d.ts.map +1 -0
  119. package/dist/materializer/types.js +2 -0
  120. package/dist/materializer/types.js.map +1 -0
  121. package/dist/proxy-bundle.cjs +17 -4
  122. package/dist/proxy-bundle.cjs.map +4 -4
  123. package/dist/resolver/discover.d.ts +7 -0
  124. package/dist/resolver/discover.d.ts.map +1 -0
  125. package/dist/resolver/discover.js +102 -0
  126. package/dist/resolver/discover.js.map +1 -0
  127. package/dist/resolver/errors.d.ts +35 -0
  128. package/dist/resolver/errors.d.ts.map +1 -0
  129. package/dist/resolver/errors.js +62 -0
  130. package/dist/resolver/errors.js.map +1 -0
  131. package/dist/resolver/index.d.ts +5 -0
  132. package/dist/resolver/index.d.ts.map +1 -0
  133. package/dist/resolver/index.js +4 -0
  134. package/dist/resolver/index.js.map +1 -0
  135. package/dist/resolver/resolve.d.ts +8 -0
  136. package/dist/resolver/resolve.d.ts.map +1 -0
  137. package/dist/resolver/resolve.js +177 -0
  138. package/dist/resolver/resolve.js.map +1 -0
  139. package/dist/runtime/gitignore.d.ts +16 -0
  140. package/dist/runtime/gitignore.d.ts.map +1 -0
  141. package/dist/runtime/gitignore.js +37 -0
  142. package/dist/runtime/gitignore.js.map +1 -0
  143. package/dist/validator/index.d.ts +3 -0
  144. package/dist/validator/index.d.ts.map +1 -0
  145. package/dist/validator/index.js +2 -0
  146. package/dist/validator/index.js.map +1 -0
  147. package/dist/validator/types.d.ts +48 -0
  148. package/dist/validator/types.d.ts.map +1 -0
  149. package/dist/validator/types.js +2 -0
  150. package/dist/validator/types.js.map +1 -0
  151. package/dist/validator/validate.d.ts +8 -0
  152. package/dist/validator/validate.d.ts.map +1 -0
  153. package/dist/validator/validate.js +217 -0
  154. package/dist/validator/validate.js.map +1 -0
  155. package/package.json +10 -9
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Utility for resolving role-declared mount volumes into Docker Compose
3
+ * volume strings.
4
+ *
5
+ * Mount sources may contain `${VAR}` references which are resolved from
6
+ * `process.env` at generation time. Unresolvable variables are left as-is
7
+ * (so Docker Compose's own env substitution can pick them up).
8
+ */
9
+ export interface RoleMount {
10
+ source: string;
11
+ target: string;
12
+ readonly: boolean;
13
+ }
14
+ /**
15
+ * Resolve `${VAR}` placeholders in a string using the given environment map.
16
+ * Unresolvable references are left as-is.
17
+ */
18
+ export declare function resolveEnvVars(value: string, env?: Record<string, string | undefined>): string;
19
+ /**
20
+ * Convert role mounts into Docker Compose volume strings.
21
+ *
22
+ * Each mount becomes `"<resolved-source>:<target>"` or
23
+ * `"<resolved-source>:<target>:ro"` if readonly is true.
24
+ *
25
+ * @param mounts Role mount declarations (may be undefined/empty).
26
+ * @param env Environment map for `${VAR}` resolution (defaults to process.env).
27
+ * @returns Array of volume strings ready for YAML output.
28
+ */
29
+ export declare function resolveRoleMountVolumes(mounts: RoleMount[] | undefined, env?: Record<string, string | undefined>): string[];
30
+ //# sourceMappingURL=mount-volumes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mount-volumes.d.ts","sourceRoot":"","sources":["../../src/generator/mount-volumes.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,MAAM,EACb,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAe,GACpD,MAAM,CAKR;AAED;;;;;;;;;GASG;AACH,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,SAAS,EAAE,GAAG,SAAS,EAC/B,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GACvC,MAAM,EAAE,CASV"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Utility for resolving role-declared mount volumes into Docker Compose
3
+ * volume strings.
4
+ *
5
+ * Mount sources may contain `${VAR}` references which are resolved from
6
+ * `process.env` at generation time. Unresolvable variables are left as-is
7
+ * (so Docker Compose's own env substitution can pick them up).
8
+ */
9
+ /**
10
+ * Resolve `${VAR}` placeholders in a string using the given environment map.
11
+ * Unresolvable references are left as-is.
12
+ */
13
+ export function resolveEnvVars(value, env = process.env) {
14
+ return value.replace(/\$\{([^}]+)\}/g, (_match, varName) => {
15
+ const resolved = env[varName];
16
+ return resolved !== undefined ? resolved : `\${${varName}}`;
17
+ });
18
+ }
19
+ /**
20
+ * Convert role mounts into Docker Compose volume strings.
21
+ *
22
+ * Each mount becomes `"<resolved-source>:<target>"` or
23
+ * `"<resolved-source>:<target>:ro"` if readonly is true.
24
+ *
25
+ * @param mounts Role mount declarations (may be undefined/empty).
26
+ * @param env Environment map for `${VAR}` resolution (defaults to process.env).
27
+ * @returns Array of volume strings ready for YAML output.
28
+ */
29
+ export function resolveRoleMountVolumes(mounts, env) {
30
+ if (!mounts || mounts.length === 0)
31
+ return [];
32
+ return mounts.map((mount) => {
33
+ const source = resolveEnvVars(mount.source, env);
34
+ const target = resolveEnvVars(mount.target, env);
35
+ const suffix = mount.readonly ? ":ro" : "";
36
+ return `${source}:${target}${suffix}`;
37
+ });
38
+ }
39
+ //# sourceMappingURL=mount-volumes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mount-volumes.js","sourceRoot":"","sources":["../../src/generator/mount-volumes.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAQH;;;GAGG;AACH,MAAM,UAAU,cAAc,CAC5B,KAAa,EACb,MAA0C,OAAO,CAAC,GAAG;IAErD,OAAO,KAAK,CAAC,OAAO,CAAC,gBAAgB,EAAE,CAAC,MAAM,EAAE,OAAe,EAAE,EAAE;QACjE,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC;QAC9B,OAAO,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,OAAO,GAAG,CAAC;IAC9D,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;;GASG;AACH,MAAM,UAAU,uBAAuB,CACrC,MAA+B,EAC/B,GAAwC;IAExC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAE9C,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QAC1B,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACjD,MAAM,MAAM,GAAG,cAAc,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACjD,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3C,OAAO,GAAG,MAAM,IAAI,MAAM,GAAG,MAAM,EAAE,CAAC;IACxC,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,19 @@
1
+ import type { ResolvedRole } from "@clawmasons/shared";
2
+ /**
3
+ * Generate a Dockerfile for a proxy container that serves a single role.
4
+ *
5
+ * The proxy image installs all mason packages from the local
6
+ * `docker/node_modules/` build context (no registry pulls). It boots
7
+ * `mason proxy` configured for the given agent, which discovers
8
+ * packages at runtime from node_modules/.
9
+ *
10
+ * All proxy images run as `USER mason`.
11
+ *
12
+ * The generated Dockerfile uses `docker/` as its build context
13
+ * (the Dockerfile lives at `docker/proxy/<role-name>/Dockerfile`).
14
+ *
15
+ * @param role The resolved role this proxy serves.
16
+ * @param agentName The agent package name (passed to `mason proxy --agent`).
17
+ */
18
+ export declare function generateProxyDockerfile(role: ResolvedRole, agentName: string): string;
19
+ //# sourceMappingURL=proxy-dockerfile.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proxy-dockerfile.d.ts","sourceRoot":"","sources":["../../src/generator/proxy-dockerfile.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGvD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,YAAY,EAClB,SAAS,EAAE,MAAM,GAChB,MAAM,CAyCR"}
@@ -0,0 +1,59 @@
1
+ import { getAppShortName } from "@clawmasons/shared";
2
+ /**
3
+ * Generate a Dockerfile for a proxy container that serves a single role.
4
+ *
5
+ * The proxy image installs all mason packages from the local
6
+ * `docker/node_modules/` build context (no registry pulls). It boots
7
+ * `mason proxy` configured for the given agent, which discovers
8
+ * packages at runtime from node_modules/.
9
+ *
10
+ * All proxy images run as `USER mason`.
11
+ *
12
+ * The generated Dockerfile uses `docker/` as its build context
13
+ * (the Dockerfile lives at `docker/proxy/<role-name>/Dockerfile`).
14
+ *
15
+ * @param role The resolved role this proxy serves.
16
+ * @param agentName The agent package name (passed to `mason proxy --agent`).
17
+ */
18
+ export function generateProxyDockerfile(role, agentName) {
19
+ const roleShortName = getAppShortName(role.name);
20
+ return `# Proxy Dockerfile for role: ${roleShortName}
21
+ # Generated by mason chapter build
22
+ FROM node:22-slim
23
+
24
+ WORKDIR /app
25
+
26
+ # Cache V8-compiled bytecode across container restarts
27
+ ENV NODE_COMPILE_CACHE=/app/.cache/v8
28
+ # Direct npm/npx package cache into the persistent .cache volume
29
+ ENV NPM_CONFIG_CACHE=/app/.cache/npm
30
+
31
+ # Install build tools for native addons (e.g., better-sqlite3)
32
+ RUN apt-get update && apt-get install -y python3 make g++ && rm -rf /var/lib/apt/lists/*
33
+
34
+ # Copy esbuild-bundled proxy entry point (single file, fast boot)
35
+ COPY proxy-bundle.cjs ./
36
+
37
+ # Copy pre-populated node_modules (native addons + package.json for discovery)
38
+ COPY package.json ./
39
+ COPY node_modules/ ./node_modules/
40
+
41
+ # Rebuild native addons for the container platform
42
+ RUN npm rebuild better-sqlite3
43
+
44
+ # Create mason user with host-matching UID/GID
45
+ ARG HOST_UID=1000
46
+ ARG HOST_GID=1000
47
+ RUN (getent group $HOST_GID | cut -d: -f1 | xargs -r groupdel 2>/dev/null || true) \\
48
+ && (getent passwd $HOST_UID | cut -d: -f1 | xargs -r userdel 2>/dev/null || true) \\
49
+ && groupadd -g $HOST_GID mason && useradd -m -u $HOST_UID -g $HOST_GID mason \\
50
+ && mkdir -p /home/mason/data /logs /app/.cache/v8 /app/.cache/npm \\
51
+ && chown -R mason:mason /app /home/mason/data /logs
52
+
53
+ USER mason
54
+
55
+ ENTRYPOINT ["node", "proxy-bundle.cjs"]
56
+ CMD ["--agent", "${agentName}", "--transport", "streamable-http"]
57
+ `;
58
+ }
59
+ //# sourceMappingURL=proxy-dockerfile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"proxy-dockerfile.js","sourceRoot":"","sources":["../../src/generator/proxy-dockerfile.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,uBAAuB,CACrC,IAAkB,EAClB,SAAiB;IAEjB,MAAM,aAAa,GAAG,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEjD,OAAO,gCAAgC,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAoCnC,SAAS;CAC3B,CAAC;AACF,CAAC"}
@@ -0,0 +1,8 @@
1
+ export { appChapterFieldSchema, type AppChapterField, skillChapterFieldSchema, type SkillChapterField, taskChapterFieldSchema, type TaskChapterField, roleChapterFieldSchema, type RoleChapterField, parseChapterField, type ChapterField, type DiscoveredPackage, type ResolvedAgent, type ResolvedApp, type ResolvedRole, type ResolvedSkill, type ResolvedTask, computeToolFilters, getAppShortName, type ToolFilter, } from "@clawmasons/shared";
2
+ export { PackageNotFoundError, InvalidChapterFieldError, CircularDependencyError, TypeMismatchError, discoverPackages, resolveRolePackage, } from "./resolver/index.js";
3
+ export { validateAgent, type ValidationResult, type ValidationError, type ValidationErrorCategory, type ValidationWarning, type ValidationWarningCategory, } from "./validator/index.js";
4
+ export { claudeCodeMaterializer, piCodingAgentMaterializer, mcpAgentMaterializer, PROVIDER_ENV_VARS, ACP_RUNTIME_COMMANDS, type RuntimeMaterializer, type MaterializationResult, type MaterializeOptions, } from "./materializer/index.js";
5
+ export { default as claudeCodeAgent } from "@clawmasons/claude-code-agent";
6
+ export { default as piCodingAgentPkg } from "@clawmasons/pi-coding-agent";
7
+ export type { AgentPackage } from "@clawmasons/agent-sdk";
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EACrB,KAAK,eAAe,EACpB,uBAAuB,EACvB,KAAK,iBAAiB,EACtB,sBAAsB,EACtB,KAAK,gBAAgB,EACrB,sBAAsB,EACtB,KAAK,gBAAgB,EACrB,iBAAiB,EACjB,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAClB,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,aAAa,EAClB,KAAK,YAAY,EACjB,kBAAkB,EAClB,eAAe,EACf,KAAK,UAAU,GAChB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACxB,uBAAuB,EACvB,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,aAAa,EACb,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,uBAAuB,EAC5B,KAAK,iBAAiB,EACtB,KAAK,yBAAyB,GAC/B,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,sBAAsB,EACtB,yBAAyB,EACzB,oBAAoB,EACpB,iBAAiB,EACjB,oBAAoB,EACpB,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,EAC1B,KAAK,kBAAkB,GACxB,MAAM,yBAAyB,CAAC;AAGjC,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAC3E,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC1E,YAAY,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,8 @@
1
+ export { appChapterFieldSchema, skillChapterFieldSchema, taskChapterFieldSchema, roleChapterFieldSchema, parseChapterField, computeToolFilters, getAppShortName, } from "@clawmasons/shared";
2
+ export { PackageNotFoundError, InvalidChapterFieldError, CircularDependencyError, TypeMismatchError, discoverPackages, resolveRolePackage, } from "./resolver/index.js";
3
+ export { validateAgent, } from "./validator/index.js";
4
+ export { claudeCodeMaterializer, piCodingAgentMaterializer, mcpAgentMaterializer, PROVIDER_ENV_VARS, ACP_RUNTIME_COMMANDS, } from "./materializer/index.js";
5
+ // Re-export agent packages for consumers
6
+ export { default as claudeCodeAgent } from "@clawmasons/claude-code-agent";
7
+ export { default as piCodingAgentPkg } from "@clawmasons/pi-coding-agent";
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,EAErB,uBAAuB,EAEvB,sBAAsB,EAEtB,sBAAsB,EAEtB,iBAAiB,EAQjB,kBAAkB,EAClB,eAAe,GAEhB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACL,oBAAoB,EACpB,wBAAwB,EACxB,uBAAuB,EACvB,iBAAiB,EACjB,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,aAAa,GAMd,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,sBAAsB,EACtB,yBAAyB,EACzB,oBAAoB,EACpB,iBAAiB,EACjB,oBAAoB,GAIrB,MAAM,yBAAyB,CAAC;AAEjC,yCAAyC;AACzC,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAC3E,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,6BAA6B,CAAC"}
@@ -0,0 +1,17 @@
1
+ export { PROVIDER_ENV_VARS, formatPermittedTools, findRolesForTask, collectAllSkills, collectAllTasks, generateSkillReadme, } from "@clawmasons/agent-sdk";
2
+ export type { LaunchCredentialConfig } from "@clawmasons/agent-sdk";
3
+ /**
4
+ * Legacy ACP_RUNTIME_COMMANDS map.
5
+ * @deprecated Use AgentPackage.acp.command instead via the agent registry.
6
+ */
7
+ export declare const ACP_RUNTIME_COMMANDS: Record<string, string>;
8
+ /**
9
+ * Generate agent-launch.json content.
10
+ *
11
+ * Legacy wrapper that resolves the AgentPackage from the registry
12
+ * and delegates to the SDK's generateAgentLaunchJson.
13
+ *
14
+ * @deprecated Import from agent packages directly.
15
+ */
16
+ export declare function generateAgentLaunchJson(runtime: string, roleCredentials: string[], acpMode?: boolean, instructions?: string): string;
17
+ //# sourceMappingURL=common.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/materializer/common.ts"],"names":[],"mappings":"AACA,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,mBAAmB,GACpB,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAQpE;;;GAGG;AACH,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAKvD,CAAC;AAEF;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,MAAM,EACf,eAAe,EAAE,MAAM,EAAE,EACzB,OAAO,CAAC,EAAE,OAAO,EACjB,YAAY,CAAC,EAAE,MAAM,GACpB,MAAM,CAcR"}
@@ -0,0 +1,37 @@
1
+ // Re-export helpers from the agent SDK for backward compatibility
2
+ export { PROVIDER_ENV_VARS, formatPermittedTools, findRolesForTask, collectAllSkills, collectAllTasks, generateSkillReadme, } from "@clawmasons/agent-sdk";
3
+ import { generateAgentLaunchJson as sdkGenerateAgentLaunchJson } from "@clawmasons/agent-sdk";
4
+ import { getAgentFromRegistry } from "./role-materializer.js";
5
+ /**
6
+ * Legacy ACP_RUNTIME_COMMANDS map.
7
+ * @deprecated Use AgentPackage.acp.command instead via the agent registry.
8
+ */
9
+ export const ACP_RUNTIME_COMMANDS = {
10
+ "claude-code-agent": "claude-agent-acp",
11
+ "pi-coding-agent": "pi-agent-acp",
12
+ "node": "node src/index.js --acp",
13
+ "mcp-agent": "mcp-agent --acp",
14
+ };
15
+ /**
16
+ * Generate agent-launch.json content.
17
+ *
18
+ * Legacy wrapper that resolves the AgentPackage from the registry
19
+ * and delegates to the SDK's generateAgentLaunchJson.
20
+ *
21
+ * @deprecated Import from agent packages directly.
22
+ */
23
+ export function generateAgentLaunchJson(runtime, roleCredentials, acpMode, instructions) {
24
+ const agentPkg = getAgentFromRegistry(runtime);
25
+ if (agentPkg) {
26
+ return sdkGenerateAgentLaunchJson(agentPkg, roleCredentials, acpMode, instructions);
27
+ }
28
+ // Fallback for unknown runtimes: create a minimal AgentPackage-like object
29
+ const fallbackPkg = {
30
+ name: runtime,
31
+ materializer: { name: runtime, materializeWorkspace: () => new Map() },
32
+ runtime: { command: runtime },
33
+ acp: ACP_RUNTIME_COMMANDS[runtime] ? { command: ACP_RUNTIME_COMMANDS[runtime] } : undefined,
34
+ };
35
+ return sdkGenerateAgentLaunchJson(fallbackPkg, roleCredentials, acpMode, instructions);
36
+ }
37
+ //# sourceMappingURL=common.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common.js","sourceRoot":"","sources":["../../src/materializer/common.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,OAAO,EACL,iBAAiB,EACjB,oBAAoB,EACpB,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,mBAAmB,GACpB,MAAM,uBAAuB,CAAC;AAM/B,OAAO,EAAE,uBAAuB,IAAI,0BAA0B,EAAE,MAAM,uBAAuB,CAAC;AAC9F,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAA2B;IAC1D,mBAAmB,EAAE,kBAAkB;IACvC,iBAAiB,EAAE,cAAc;IACjC,MAAM,EAAE,yBAAyB;IACjC,WAAW,EAAE,iBAAiB;CAC/B,CAAC;AAEF;;;;;;;GAOG;AACH,MAAM,UAAU,uBAAuB,CACrC,OAAe,EACf,eAAyB,EACzB,OAAiB,EACjB,YAAqB;IAErB,MAAM,QAAQ,GAAG,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAC/C,IAAI,QAAQ,EAAE,CAAC;QACb,OAAO,0BAA0B,CAAC,QAAQ,EAAE,eAAe,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;IACtF,CAAC;IAED,2EAA2E;IAC3E,MAAM,WAAW,GAAiB;QAChC,IAAI,EAAE,OAAO;QACb,YAAY,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,oBAAoB,EAAE,GAAG,EAAE,CAAC,IAAI,GAAG,EAAE,EAAE;QACtE,OAAO,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE;QAC7B,GAAG,EAAE,oBAAoB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,oBAAoB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS;KAC5F,CAAC;IACF,OAAO,0BAA0B,CAAC,WAAW,EAAE,eAAe,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;AACzF,CAAC"}
@@ -0,0 +1,258 @@
1
+ /**
2
+ * Role-centric Docker build directory and session generation.
3
+ *
4
+ * Generates:
5
+ * 1. Docker build directories at `.mason/docker/<role-name>/` (PRD §7.1)
6
+ * 2. Volume masking for container.ignore.paths (PRD §7.3)
7
+ * 3. Sentinel empty file for file-level volume masking
8
+ * 4. Session directories with self-contained compose files (PRD §7.5)
9
+ *
10
+ * @module docker-generator
11
+ */
12
+ import type { Role } from "@clawmasons/shared";
13
+ import { type RoleMount } from "../generator/mount-volumes.js";
14
+ import type { DevContainerCustomizations } from "@clawmasons/agent-sdk";
15
+ /**
16
+ * Get the current host user's UID and GID.
17
+ * Returns string values suitable for Docker build args.
18
+ */
19
+ export declare function getHostIds(): {
20
+ uid: string;
21
+ gid: string;
22
+ };
23
+ export interface VolumeMaskEntry {
24
+ /** Whether this mask targets a directory or a file. */
25
+ type: "directory" | "file";
26
+ /** The original path from container.ignore.paths. */
27
+ hostPath: string;
28
+ /** The container path (under project mount). */
29
+ containerPath: string;
30
+ /** Named volume name for directory masks. */
31
+ volumeName?: string;
32
+ }
33
+ /**
34
+ * Sanitize a path into a valid Docker volume name.
35
+ *
36
+ * Replaces non-alphanumeric characters with hyphens, strips leading/trailing
37
+ * hyphens, and prefixes with "ignore-".
38
+ */
39
+ export declare function sanitizeVolumeName(ignorePath: string): string;
40
+ /**
41
+ * Classify ignore paths and generate volume mask entries.
42
+ *
43
+ * - Paths ending with `/` are classified as directories (masked with named empty volumes).
44
+ * - Paths without trailing `/` are classified as files (masked with bind mount of sentinel file).
45
+ *
46
+ * All container paths target the project mount at `/home/mason/workspace/project/`.
47
+ *
48
+ * @param ignorePaths - Array of paths from container.ignore.paths
49
+ * @returns Array of VolumeMaskEntry objects
50
+ */
51
+ export declare function generateVolumeMasks(ignorePaths: string[]): VolumeMaskEntry[];
52
+ /**
53
+ * Ensure the sentinel empty file exists at `.mason/empty-file`.
54
+ *
55
+ * The file is 0 bytes with permissions `0o444` (read-only for all).
56
+ * Idempotent — does nothing if the file already exists.
57
+ *
58
+ * @param projectDir - Absolute path to the project root
59
+ * @returns Absolute path to the sentinel file
60
+ */
61
+ export declare function ensureSentinelFile(projectDir: string, fsDeps?: {
62
+ existsSync?: (p: string) => boolean;
63
+ mkdirSync?: (p: string, opts?: {
64
+ recursive?: boolean;
65
+ }) => void;
66
+ writeFileSync?: (p: string, data: string, opts?: {
67
+ mode?: number;
68
+ }) => void;
69
+ chmodSync?: (p: string, mode: number) => void;
70
+ }): string;
71
+ export interface GenerateBuildDirOptions {
72
+ /** The resolved Role to generate for. */
73
+ role: Role;
74
+ /** Target agent type (e.g., "claude-code-agent"). */
75
+ agentType: string;
76
+ /** Absolute path to the project root. */
77
+ projectDir: string;
78
+ /** Root of docker build output (defaults to `<projectDir>/.mason/docker`). */
79
+ dockerBuildRoot?: string;
80
+ /** Agent name for the proxy CMD (the npm agent package name). */
81
+ agentName: string;
82
+ /** Optional: override the proxy endpoint for workspace materialization. */
83
+ proxyEndpoint?: string;
84
+ /** Dev-container customizations to embed in the agent Dockerfile LABEL. */
85
+ devContainerCustomizations?: DevContainerCustomizations;
86
+ /** Additional credential env var keys from agent config (.mason/config.json) to include in agent-launch.json. */
87
+ agentConfigCredentials?: string[];
88
+ /** Extra args from alias config to append to the agent invocation. */
89
+ agentArgs?: string[];
90
+ }
91
+ export interface BuildDirResult {
92
+ /** Absolute path to the generated build directory. */
93
+ buildDir: string;
94
+ /** Relative path from build dir to the agent Dockerfile. */
95
+ agentDockerfilePath: string;
96
+ /** Relative path from build dir to the proxy Dockerfile. */
97
+ proxyDockerfilePath: string;
98
+ }
99
+ /**
100
+ * Generate the role-centric Docker build directory at
101
+ * `.mason/docker/<role-name>/`.
102
+ *
103
+ * Structure (PRD §7.1):
104
+ * ```
105
+ * <role-name>/
106
+ * ├── <agent-type>/
107
+ * │ ├── Dockerfile
108
+ * │ └── workspace/
109
+ * │ └── (materialized files)
110
+ * ├── mcp-proxy/
111
+ * │ └── Dockerfile
112
+ * └── docker-compose.yaml
113
+ * ```
114
+ */
115
+ export declare function generateRoleDockerBuildDir(opts: GenerateBuildDirOptions, fsDeps?: {
116
+ mkdirSync?: (p: string, opts?: {
117
+ recursive?: boolean;
118
+ }) => void;
119
+ writeFileSync?: (p: string, data: string) => void;
120
+ }): BuildDirResult;
121
+ export interface SessionComposeOptions {
122
+ /** Absolute path to the project root. */
123
+ projectDir: string;
124
+ /** Absolute path to the role's Docker build directory. */
125
+ dockerBuildDir: string;
126
+ /** Absolute path to the docker/ dir (for proxy build context). */
127
+ dockerDir: string;
128
+ /** Role short name. */
129
+ roleName: string;
130
+ /** Agent type (e.g., "claude-code-agent"). */
131
+ agentType: string;
132
+ /** Agent name for service naming. */
133
+ agentName: string;
134
+ /** Proxy authentication token. */
135
+ proxyToken: string;
136
+ /** Credential proxy token. */
137
+ credentialProxyToken: string;
138
+ /** Proxy port on host. */
139
+ proxyPort?: number;
140
+ /** Volume mask entries from generateVolumeMasks(). */
141
+ volumeMasks?: VolumeMaskEntry[];
142
+ /** Role-declared extra mounts. */
143
+ roleMounts?: RoleMount[];
144
+ /** Declared credential keys. */
145
+ credentialKeys?: string[];
146
+ /** Session type (e.g., "interactive", "acp"). */
147
+ sessionType?: string;
148
+ /** ACP command args. */
149
+ acpCommand?: string[];
150
+ /** Absolute path to the session directory (for relative path computation). */
151
+ sessionDir: string;
152
+ /** Absolute path to logs directory. */
153
+ logsDir: string;
154
+ /** Absolute path to the materialized agent home directory (if exists). */
155
+ homePath?: string;
156
+ /** Host user UID for container user matching. */
157
+ hostUid?: string;
158
+ /** Host user GID for container user matching. */
159
+ hostGid?: string;
160
+ /** Absolute path to {agentDir}/workspace/ — live-mounted to /home/mason/workspace/. */
161
+ workspacePath?: string;
162
+ /** Absolute path to {agentDir}/build/workspace/project/ — files here get per-entry overlay mounts. */
163
+ buildWorkspaceProjectPath?: string;
164
+ /** File entries inside buildWorkspaceProjectPath — mounted via Docker Compose configs (VirtioFS-safe). */
165
+ buildWorkspaceProjectFileEntries?: string[];
166
+ /** Directory entries inside buildWorkspaceProjectPath — mounted as bind-mount overlays. */
167
+ buildWorkspaceProjectDirEntries?: string[];
168
+ /** Override bind-mount path for /home/mason/ (e.g. --home flag). */
169
+ homeOverride?: string;
170
+ /** VS Code server host path to mount at /home/mason/.vscode-server. */
171
+ vscodeServerHostPath?: string;
172
+ /** Set AGENT_COMMAND_OVERRIDE=bash in agent environment. */
173
+ bashMode?: boolean;
174
+ /** Set AGENT_ENTRY_VERBOSE=1 in agent environment. */
175
+ verbose?: boolean;
176
+ }
177
+ /**
178
+ * Generate a self-contained docker-compose.yaml for a session directory.
179
+ *
180
+ * All paths are relative to the session directory, making the session dir
181
+ * a fully functional Docker Compose project. Users can run:
182
+ * - `docker compose logs -f`
183
+ * - `docker compose ps`
184
+ * - `docker compose exec agent sh`
185
+ * - `docker compose down`
186
+ *
187
+ * from the session directory.
188
+ */
189
+ export declare function generateSessionComposeYml(opts: SessionComposeOptions): string;
190
+ export interface CreateSessionOptions {
191
+ /** Absolute path to the project root. */
192
+ projectDir: string;
193
+ /** Absolute path to the role's Docker build directory. */
194
+ dockerBuildDir: string;
195
+ /** Absolute path to the docker/ dir (for proxy build context). */
196
+ dockerDir: string;
197
+ /** Role definition. */
198
+ role: Role;
199
+ /** Agent type (e.g., "claude-code-agent"). */
200
+ agentType: string;
201
+ /** Agent name for proxy CMD. */
202
+ agentName: string;
203
+ /** Proxy port. */
204
+ proxyPort?: number;
205
+ /** Role-declared mounts. */
206
+ roleMounts?: RoleMount[];
207
+ /** Declared credential keys. */
208
+ credentialKeys?: string[];
209
+ /** Session type. */
210
+ sessionType?: string;
211
+ /** ACP command args. */
212
+ acpCommand?: string[];
213
+ /** Host user UID for container user matching. */
214
+ hostUid?: string;
215
+ /** Host user GID for container user matching. */
216
+ hostGid?: string;
217
+ /** Override bind-mount path for /home/mason/ (e.g. --home flag). */
218
+ homeOverride?: string;
219
+ /** VS Code server host path to mount at /home/mason/.vscode-server. */
220
+ vscodeServerHostPath?: string;
221
+ /** Set AGENT_COMMAND_OVERRIDE=bash in agent environment. */
222
+ bashMode?: boolean;
223
+ /** Set AGENT_ENTRY_VERBOSE=1 in agent environment. */
224
+ verbose?: boolean;
225
+ /** Pre-determined session ID (overrides random generation, for testing). */
226
+ sessionId?: string;
227
+ }
228
+ export interface SessionResult {
229
+ /** Unique session ID. */
230
+ sessionId: string;
231
+ /** Absolute path to the session directory. */
232
+ sessionDir: string;
233
+ /** Absolute path to the compose file. */
234
+ composeFile: string;
235
+ /** Absolute path to the logs directory. */
236
+ logsDir: string;
237
+ /** Generated proxy token. */
238
+ proxyToken: string;
239
+ /** Generated credential proxy token. */
240
+ credentialProxyToken: string;
241
+ /** Proxy service name. */
242
+ proxyServiceName: string;
243
+ /** Agent service name. */
244
+ agentServiceName: string;
245
+ }
246
+ /**
247
+ * Create a session directory with a self-contained docker-compose.yaml.
248
+ *
249
+ * @returns Session metadata including paths, tokens, and service names.
250
+ */
251
+ export declare function createSessionDirectory(opts: CreateSessionOptions, fsDeps?: {
252
+ mkdirSync?: (p: string, opts?: {
253
+ recursive?: boolean;
254
+ }) => void;
255
+ writeFileSync?: (p: string, data: string) => void;
256
+ randomBytes?: (n: number) => Buffer;
257
+ }): SessionResult;
258
+ //# sourceMappingURL=docker-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"docker-generator.d.ts","sourceRoot":"","sources":["../../src/materializer/docker-generator.ts"],"names":[],"mappings":"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"}