@1claw/cli 0.37.0 → 0.37.1

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 (170) hide show
  1. package/dist/bundled-templates/registry.yaml +62 -0
  2. package/dist/bundled-templates/templates/agentkit/Dockerfile +28 -0
  3. package/dist/bundled-templates/templates/agentkit/README.md +36 -0
  4. package/dist/bundled-templates/templates/agentkit/agent.py +83 -0
  5. package/dist/bundled-templates/templates/agentkit/entrypoint.sh +34 -0
  6. package/dist/bundled-templates/templates/agentkit/requirements.txt +5 -0
  7. package/dist/bundled-templates/templates/agentkit/template.yaml +24 -0
  8. package/dist/bundled-templates/templates/agno/Dockerfile +28 -0
  9. package/dist/bundled-templates/templates/agno/README.md +36 -0
  10. package/dist/bundled-templates/templates/agno/agent.py +86 -0
  11. package/dist/bundled-templates/templates/agno/entrypoint.sh +34 -0
  12. package/dist/bundled-templates/templates/agno/requirements.txt +2 -0
  13. package/dist/bundled-templates/templates/agno/template.yaml +24 -0
  14. package/dist/bundled-templates/templates/coder/Dockerfile +28 -0
  15. package/dist/bundled-templates/templates/coder/README.md +36 -0
  16. package/dist/bundled-templates/templates/coder/agent.py +119 -0
  17. package/dist/bundled-templates/templates/coder/entrypoint.sh +34 -0
  18. package/dist/bundled-templates/templates/coder/requirements.txt +4 -0
  19. package/dist/bundled-templates/templates/coder/template.yaml +24 -0
  20. package/dist/bundled-templates/templates/crewai/Dockerfile +28 -0
  21. package/dist/bundled-templates/templates/crewai/README.md +29 -0
  22. package/dist/bundled-templates/templates/crewai/agent.py +109 -0
  23. package/dist/bundled-templates/templates/crewai/entrypoint.sh +34 -0
  24. package/dist/bundled-templates/templates/crewai/requirements.txt +3 -0
  25. package/dist/bundled-templates/templates/crewai/template.yaml +24 -0
  26. package/dist/bundled-templates/templates/elizaos/Dockerfile +31 -0
  27. package/dist/bundled-templates/templates/elizaos/README.md +36 -0
  28. package/dist/bundled-templates/templates/elizaos/agent.ts +100 -0
  29. package/dist/bundled-templates/templates/elizaos/entrypoint.sh +34 -0
  30. package/dist/bundled-templates/templates/elizaos/package.json +18 -0
  31. package/dist/bundled-templates/templates/elizaos/template.yaml +25 -0
  32. package/dist/bundled-templates/templates/elizaos/tsconfig.json +12 -0
  33. package/dist/bundled-templates/templates/langchain/Dockerfile +28 -0
  34. package/dist/bundled-templates/templates/langchain/README.md +37 -0
  35. package/dist/bundled-templates/templates/langchain/agent.py +115 -0
  36. package/dist/bundled-templates/templates/langchain/entrypoint.sh +36 -0
  37. package/dist/bundled-templates/templates/langchain/requirements.txt +4 -0
  38. package/dist/bundled-templates/templates/langchain/template.yaml +24 -0
  39. package/dist/bundled-templates/templates/llamaindex/Dockerfile +28 -0
  40. package/dist/bundled-templates/templates/llamaindex/README.md +36 -0
  41. package/dist/bundled-templates/templates/llamaindex/agent.py +97 -0
  42. package/dist/bundled-templates/templates/llamaindex/entrypoint.sh +34 -0
  43. package/dist/bundled-templates/templates/llamaindex/requirements.txt +3 -0
  44. package/dist/bundled-templates/templates/llamaindex/template.yaml +24 -0
  45. package/dist/bundled-templates/templates/mastra/Dockerfile +31 -0
  46. package/dist/bundled-templates/templates/mastra/README.md +31 -0
  47. package/dist/bundled-templates/templates/mastra/agent.ts +112 -0
  48. package/dist/bundled-templates/templates/mastra/entrypoint.sh +34 -0
  49. package/dist/bundled-templates/templates/mastra/package.json +17 -0
  50. package/dist/bundled-templates/templates/mastra/template.yaml +25 -0
  51. package/dist/bundled-templates/templates/mastra/tsconfig.json +12 -0
  52. package/dist/bundled-templates/templates/openai-agents/Dockerfile +28 -0
  53. package/dist/bundled-templates/templates/openai-agents/README.md +29 -0
  54. package/dist/bundled-templates/templates/openai-agents/agent.py +98 -0
  55. package/dist/bundled-templates/templates/openai-agents/entrypoint.sh +34 -0
  56. package/dist/bundled-templates/templates/openai-agents/requirements.txt +3 -0
  57. package/dist/bundled-templates/templates/openai-agents/template.yaml +24 -0
  58. package/dist/bundled-templates/templates/pydantic-ai/Dockerfile +28 -0
  59. package/dist/bundled-templates/templates/pydantic-ai/README.md +36 -0
  60. package/dist/bundled-templates/templates/pydantic-ai/agent.py +110 -0
  61. package/dist/bundled-templates/templates/pydantic-ai/entrypoint.sh +34 -0
  62. package/dist/bundled-templates/templates/pydantic-ai/requirements.txt +2 -0
  63. package/dist/bundled-templates/templates/pydantic-ai/template.yaml +24 -0
  64. package/dist/bundled-templates/templates/smolagents/Dockerfile +28 -0
  65. package/dist/bundled-templates/templates/smolagents/README.md +36 -0
  66. package/dist/bundled-templates/templates/smolagents/agent.py +97 -0
  67. package/dist/bundled-templates/templates/smolagents/entrypoint.sh +34 -0
  68. package/dist/bundled-templates/templates/smolagents/requirements.txt +2 -0
  69. package/dist/bundled-templates/templates/smolagents/template.yaml +24 -0
  70. package/dist/bundled-templates/templates/typescript-sdk/Dockerfile +31 -0
  71. package/dist/bundled-templates/templates/typescript-sdk/README.md +29 -0
  72. package/dist/bundled-templates/templates/typescript-sdk/agent.ts +130 -0
  73. package/dist/bundled-templates/templates/typescript-sdk/entrypoint.sh +34 -0
  74. package/dist/bundled-templates/templates/typescript-sdk/package.json +17 -0
  75. package/dist/bundled-templates/templates/typescript-sdk/template.yaml +25 -0
  76. package/dist/bundled-templates/templates/typescript-sdk/tsconfig.json +12 -0
  77. package/dist/src/commands/init.d.ts.map +1 -1
  78. package/dist/src/commands/init.js +6 -1
  79. package/dist/src/commands/init.js.map +1 -1
  80. package/dist/src/commands/spawn.d.ts.map +1 -1
  81. package/dist/src/commands/spawn.js +5 -1
  82. package/dist/src/commands/spawn.js.map +1 -1
  83. package/dist/src/lib/module-deprecation.d.ts +8 -0
  84. package/dist/src/lib/module-deprecation.d.ts.map +1 -0
  85. package/dist/src/lib/module-deprecation.js +15 -0
  86. package/dist/src/lib/module-deprecation.js.map +1 -0
  87. package/dist/src/lib/paths.d.ts +5 -4
  88. package/dist/src/lib/paths.d.ts.map +1 -1
  89. package/dist/src/lib/paths.js +27 -13
  90. package/dist/src/lib/paths.js.map +1 -1
  91. package/dist/src/registry.yaml +62 -0
  92. package/dist/src/templates/agentkit/Dockerfile +34 -0
  93. package/dist/src/templates/agentkit/README.md +36 -0
  94. package/dist/src/templates/agentkit/agent.py +83 -0
  95. package/dist/src/templates/agentkit/entrypoint.sh +34 -0
  96. package/dist/src/templates/agentkit/requirements.txt +5 -0
  97. package/dist/src/templates/agentkit/template.yaml +24 -0
  98. package/dist/src/templates/agno/Dockerfile +34 -0
  99. package/dist/src/templates/agno/README.md +36 -0
  100. package/dist/src/templates/agno/agent.py +86 -0
  101. package/dist/src/templates/agno/entrypoint.sh +34 -0
  102. package/dist/src/templates/agno/requirements.txt +2 -0
  103. package/dist/src/templates/agno/template.yaml +24 -0
  104. package/dist/src/templates/coder/Dockerfile +34 -0
  105. package/dist/src/templates/coder/README.md +36 -0
  106. package/dist/src/templates/coder/agent.py +119 -0
  107. package/dist/src/templates/coder/entrypoint.sh +34 -0
  108. package/dist/src/templates/coder/requirements.txt +4 -0
  109. package/dist/src/templates/coder/template.yaml +24 -0
  110. package/dist/src/templates/crewai/Dockerfile +34 -0
  111. package/dist/src/templates/crewai/README.md +29 -0
  112. package/dist/src/templates/crewai/agent.py +109 -0
  113. package/dist/src/templates/crewai/entrypoint.sh +34 -0
  114. package/dist/src/templates/crewai/requirements.txt +3 -0
  115. package/dist/src/templates/crewai/template.yaml +24 -0
  116. package/dist/src/templates/elizaos/Dockerfile +31 -0
  117. package/dist/src/templates/elizaos/README.md +36 -0
  118. package/dist/src/templates/elizaos/agent.ts +100 -0
  119. package/dist/src/templates/elizaos/entrypoint.sh +34 -0
  120. package/dist/src/templates/elizaos/package.json +18 -0
  121. package/dist/src/templates/elizaos/template.yaml +25 -0
  122. package/dist/src/templates/elizaos/tsconfig.json +12 -0
  123. package/dist/src/templates/fetcher.d.ts.map +1 -1
  124. package/dist/src/templates/fetcher.js +34 -15
  125. package/dist/src/templates/fetcher.js.map +1 -1
  126. package/dist/src/templates/langchain/Dockerfile +34 -0
  127. package/dist/src/templates/langchain/README.md +37 -0
  128. package/dist/src/templates/langchain/agent.py +115 -0
  129. package/dist/src/templates/langchain/entrypoint.sh +36 -0
  130. package/dist/src/templates/langchain/requirements.txt +4 -0
  131. package/dist/src/templates/langchain/template.yaml +24 -0
  132. package/dist/src/templates/llamaindex/Dockerfile +34 -0
  133. package/dist/src/templates/llamaindex/README.md +36 -0
  134. package/dist/src/templates/llamaindex/agent.py +97 -0
  135. package/dist/src/templates/llamaindex/entrypoint.sh +34 -0
  136. package/dist/src/templates/llamaindex/requirements.txt +3 -0
  137. package/dist/src/templates/llamaindex/template.yaml +24 -0
  138. package/dist/src/templates/mastra/Dockerfile +31 -0
  139. package/dist/src/templates/mastra/README.md +31 -0
  140. package/dist/src/templates/mastra/agent.ts +112 -0
  141. package/dist/src/templates/mastra/entrypoint.sh +34 -0
  142. package/dist/src/templates/mastra/package.json +17 -0
  143. package/dist/src/templates/mastra/template.yaml +25 -0
  144. package/dist/src/templates/mastra/tsconfig.json +12 -0
  145. package/dist/src/templates/openai-agents/Dockerfile +34 -0
  146. package/dist/src/templates/openai-agents/README.md +29 -0
  147. package/dist/src/templates/openai-agents/agent.py +98 -0
  148. package/dist/src/templates/openai-agents/entrypoint.sh +34 -0
  149. package/dist/src/templates/openai-agents/requirements.txt +3 -0
  150. package/dist/src/templates/openai-agents/template.yaml +24 -0
  151. package/dist/src/templates/pydantic-ai/Dockerfile +34 -0
  152. package/dist/src/templates/pydantic-ai/README.md +36 -0
  153. package/dist/src/templates/pydantic-ai/agent.py +110 -0
  154. package/dist/src/templates/pydantic-ai/entrypoint.sh +34 -0
  155. package/dist/src/templates/pydantic-ai/requirements.txt +2 -0
  156. package/dist/src/templates/pydantic-ai/template.yaml +24 -0
  157. package/dist/src/templates/smolagents/Dockerfile +34 -0
  158. package/dist/src/templates/smolagents/README.md +36 -0
  159. package/dist/src/templates/smolagents/agent.py +97 -0
  160. package/dist/src/templates/smolagents/entrypoint.sh +34 -0
  161. package/dist/src/templates/smolagents/requirements.txt +2 -0
  162. package/dist/src/templates/smolagents/template.yaml +24 -0
  163. package/dist/src/templates/typescript-sdk/Dockerfile +31 -0
  164. package/dist/src/templates/typescript-sdk/README.md +29 -0
  165. package/dist/src/templates/typescript-sdk/agent.ts +130 -0
  166. package/dist/src/templates/typescript-sdk/entrypoint.sh +34 -0
  167. package/dist/src/templates/typescript-sdk/package.json +17 -0
  168. package/dist/src/templates/typescript-sdk/template.yaml +25 -0
  169. package/dist/src/templates/typescript-sdk/tsconfig.json +12 -0
  170. package/package.json +1 -1
@@ -0,0 +1,12 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2022",
4
+ "module": "ESNext",
5
+ "moduleResolution": "bundler",
6
+ "esModuleInterop": true,
7
+ "strict": true,
8
+ "skipLibCheck": true,
9
+ "outDir": "dist"
10
+ },
11
+ "include": ["*.ts"]
12
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"fetcher.d.ts","sourceRoot":"","sources":["../../../src/templates/fetcher.ts"],"names":[],"mappings":"AA0CA,gEAAgE;AAChE,wBAAgB,YAAY,IAAI,OAAO,CAKtC;AAED;;;;;;;GAOG;AACH,wBAAsB,eAAe,CAAC,IAAI,CAAC,EAAE;IACzC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CACtC,GAAG,OAAO,CAAC,MAAM,CAAC,CA6ClB;AAiGD;;;GAGG;AACH,wBAAsB,mBAAmB,CACrC,IAAI,EAAE,MAAM,EACZ,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,GACnC,OAAO,CAAC,MAAM,CAAC,CAejB"}
1
+ {"version":3,"file":"fetcher.d.ts","sourceRoot":"","sources":["../../../src/templates/fetcher.ts"],"names":[],"mappings":"AAuDA,gEAAgE;AAChE,wBAAgB,YAAY,IAAI,OAAO,CAKtC;AAED;;;;;;;GAOG;AACH,wBAAsB,eAAe,CAAC,IAAI,CAAC,EAAE;IACzC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CACtC,GAAG,OAAO,CAAC,MAAM,CAAC,CAuClB;AAyHD;;;GAGG;AACH,wBAAsB,mBAAmB,CACrC,IAAI,EAAE,MAAM,EACZ,UAAU,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,IAAI,GACnC,OAAO,CAAC,MAAM,CAAC,CAejB"}
@@ -1,6 +1,17 @@
1
1
  import { existsSync, mkdirSync, writeFileSync, readFileSync, readdirSync, statSync, cpSync, } from "node:fs";
2
2
  import { join } from "node:path";
3
3
  import { templatesCacheDir, bundledTemplatesDir } from "../lib/paths.js";
4
+ function dirHasTemplateManifests(root) {
5
+ if (!existsSync(root))
6
+ return false;
7
+ try {
8
+ return readdirSync(root).some((d) => statSync(join(root, d)).isDirectory() &&
9
+ existsSync(join(root, d, "template.yaml")));
10
+ }
11
+ catch {
12
+ return false;
13
+ }
14
+ }
4
15
  const REPO_OWNER = "1clawAI";
5
16
  const REPO_NAME = "agent-templates";
6
17
  const BRANCH = "main";
@@ -47,16 +58,13 @@ export async function ensureTemplates(opts) {
47
58
  // Bundled templates always take priority (submodule is the source of truth)
48
59
  const bundled = bundledTemplatesDir();
49
60
  if (bundled && existsSync(bundled)) {
50
- const hasTemplates = readdirSync(bundled).some((d) => statSync(join(bundled, d)).isDirectory() &&
51
- existsSync(join(bundled, d, "template.yaml")));
52
- if (hasTemplates) {
53
- // Copy to cache so everything resolves from one place
61
+ if (dirHasTemplateManifests(bundled)) {
54
62
  syncBundledToCache(bundled);
55
63
  return bundled;
56
64
  }
57
65
  }
58
66
  const cacheDir = templatesCacheDir();
59
- if (!force && isCacheFresh()) {
67
+ if (!force && isCacheFresh() && dirHasTemplateManifests(cacheDir)) {
60
68
  return cacheDir;
61
69
  }
62
70
  // Try fetching from GitHub
@@ -103,6 +111,19 @@ async function fetchFromGitHub(cacheDir, onProgress) {
103
111
  etag: registryRes.headers.get("etag") ?? undefined,
104
112
  });
105
113
  }
114
+ /** Required files for every spawn template (build will fail without these). */
115
+ const REQUIRED_TEMPLATE_FILES = [
116
+ "template.yaml",
117
+ "Dockerfile",
118
+ "entrypoint.sh",
119
+ ];
120
+ function assertTemplateComplete(templateDir, name) {
121
+ const missing = REQUIRED_TEMPLATE_FILES.filter((f) => !existsSync(join(templateDir, f)));
122
+ if (missing.length > 0) {
123
+ throw new Error(`Template "${name}" is incomplete (missing: ${missing.join(", ")}).\n` +
124
+ ` Run \`1claw spawn --refresh\` or initialize packages/agent-templates.`);
125
+ }
126
+ }
106
127
  /** Fetch a single template's files from GitHub into the cache. */
107
128
  async function fetchTemplate(cacheDir, name) {
108
129
  const templateDir = join(cacheDir, name);
@@ -112,22 +133,20 @@ async function fetchTemplate(cacheDir, name) {
112
133
  const res = await fetch(contentsUrl, {
113
134
  headers: { Accept: "application/vnd.github.v3+json" },
114
135
  });
115
- if (!res.ok)
116
- return; // skip if not found
136
+ if (!res.ok) {
137
+ throw new Error(`Failed to fetch template "${name}" from GitHub: ${res.status} ${res.statusText}`);
138
+ }
117
139
  const files = (await res.json());
118
140
  for (const file of files) {
119
141
  if (file.type !== "file" || !file.download_url)
120
142
  continue;
121
- try {
122
- const fileRes = await fetch(file.download_url);
123
- if (fileRes.ok) {
124
- writeFileSync(join(templateDir, file.name), await fileRes.text());
125
- }
126
- }
127
- catch {
128
- // best-effort per file
143
+ const fileRes = await fetch(file.download_url);
144
+ if (!fileRes.ok) {
145
+ throw new Error(`Failed to download ${name}/${file.name}: ${fileRes.status}`);
129
146
  }
147
+ writeFileSync(join(templateDir, file.name), await fileRes.text());
130
148
  }
149
+ assertTemplateComplete(templateDir, name);
131
150
  }
132
151
  /** Copy bundled templates (from submodule) into the cache directory. */
133
152
  function syncBundledToCache(bundledDir) {
@@ -1 +1 @@
1
- {"version":3,"file":"fetcher.js","sourceRoot":"","sources":["../../../src/templates/fetcher.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,UAAU,EACV,SAAS,EACT,aAAa,EACb,YAAY,EACZ,WAAW,EACX,QAAQ,EACR,MAAM,GACT,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,iBAAiB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAEzE,MAAM,UAAU,GAAG,SAAS,CAAC;AAC7B,MAAM,SAAS,GAAG,iBAAiB,CAAC;AACpC,MAAM,MAAM,GAAG,MAAM,CAAC;AACtB,MAAM,gBAAgB,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,WAAW;AAOzD,SAAS,aAAa;IAClB,OAAO,IAAI,CAAC,iBAAiB,EAAE,EAAE,kBAAkB,CAAC,CAAC;AACzD,CAAC;AAED,SAAS,aAAa;IAClB,MAAM,CAAC,GAAG,aAAa,EAAE,CAAC;IAC1B,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IAChC,IAAI,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC,CAAc,CAAC;IAC7D,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,IAAI,CAAC;IAChB,CAAC;AACL,CAAC;AAED,SAAS,cAAc,CAAC,IAAe;IACnC,MAAM,GAAG,GAAG,iBAAiB,EAAE,CAAC;IAChC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;QAAE,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1D,aAAa,CAAC,aAAa,EAAE,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAClE,CAAC;AAED,gEAAgE;AAChE,MAAM,UAAU,YAAY;IACxB,MAAM,IAAI,GAAG,aAAa,EAAE,CAAC;IAC7B,IAAI,CAAC,IAAI;QAAE,OAAO,KAAK,CAAC;IACxB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC;IAC5D,OAAO,GAAG,GAAG,gBAAgB,CAAC;AAClC,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAGrC;IACG,MAAM,KAAK,GAAG,IAAI,EAAE,KAAK,IAAI,KAAK,CAAC;IACnC,MAAM,UAAU,GAAG,IAAI,EAAE,UAAU,CAAC;IAEpC,4EAA4E;IAC5E,MAAM,OAAO,GAAG,mBAAmB,EAAE,CAAC;IACtC,IAAI,OAAO,IAAI,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QACjC,MAAM,YAAY,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC,IAAI,CAC1C,CAAC,CAAC,EAAE,EAAE,CACF,QAAQ,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;YACxC,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,eAAe,CAAC,CAAC,CACpD,CAAC;QACF,IAAI,YAAY,EAAE,CAAC;YACf,sDAAsD;YACtD,kBAAkB,CAAC,OAAO,CAAC,CAAC;YAC5B,OAAO,OAAO,CAAC;QACnB,CAAC;IACL,CAAC;IAED,MAAM,QAAQ,GAAG,iBAAiB,EAAE,CAAC;IAErC,IAAI,CAAC,KAAK,IAAI,YAAY,EAAE,EAAE,CAAC;QAC3B,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED,2BAA2B;IAC3B,IAAI,CAAC;QACD,UAAU,EAAE,CAAC,mCAAmC,CAAC,CAAC;QAClD,MAAM,eAAe,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QAC5C,OAAO,QAAQ,CAAC;IACpB,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACX,oEAAoE;QACpE,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,WAAW,CAAC,QAAQ,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3D,UAAU,EAAE,CACR,8CAA8C,CACjD,CAAC;YACF,OAAO,QAAQ,CAAC;QACpB,CAAC;QACD,MAAM,IAAI,KAAK,CACX,qDAAqD;YACjD,YAAY,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI;YAChE,sCAAsC;YACtC,uGAAuG,CAC9G,CAAC;IACN,CAAC;AACL,CAAC;AAED,gEAAgE;AAChE,KAAK,UAAU,eAAe,CAC1B,QAAgB,EAChB,UAAkC;IAElC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEpE,sBAAsB;IACtB,MAAM,WAAW,GAAG,qCAAqC,UAAU,IAAI,SAAS,IAAI,MAAM,gBAAgB,CAAC;IAC3G,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,WAAW,CAAC,CAAC;IAC7C,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CACX,kCAAkC,WAAW,CAAC,MAAM,IAAI,WAAW,CAAC,UAAU,EAAE,CACnF,CAAC;IACN,CAAC;IACD,MAAM,eAAe,GAAG,MAAM,WAAW,CAAC,IAAI,EAAE,CAAC;IACjD,aAAa,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,eAAe,CAAC,EAAE,eAAe,CAAC,CAAC;IAEtE,6BAA6B;IAC7B,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC;IACvC,MAAM,QAAQ,GAAG,KAAK,CAAC,eAAe,CAErC,CAAC;IACF,MAAM,aAAa,GACf,QAAQ,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;IAEjD,0DAA0D;IAC1D,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;QAC/B,UAAU,EAAE,CAAC,sBAAsB,IAAI,EAAE,CAAC,CAAC;QAC3C,MAAM,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IACxC,CAAC;IAED,cAAc,CAAC;QACX,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,IAAI,EAAE,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,SAAS;KACrD,CAAC,CAAC;AACP,CAAC;AAED,kEAAkE;AAClE,KAAK,UAAU,aAAa,CACxB,QAAgB,EAChB,IAAY;IAEZ,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IACzC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC;QAAE,SAAS,CAAC,WAAW,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE1E,MAAM,WAAW,GAAG,gCAAgC,UAAU,IAAI,SAAS,uBAAuB,IAAI,QAAQ,MAAM,EAAE,CAAC;IACvH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,WAAW,EAAE;QACjC,OAAO,EAAE,EAAE,MAAM,EAAE,gCAAgC,EAAE;KACxD,CAAC,CAAC;IACH,IAAI,CAAC,GAAG,CAAC,EAAE;QAAE,OAAO,CAAC,oBAAoB;IAEzC,MAAM,KAAK,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAI5B,CAAC;IAEJ,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACvB,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,IAAI,CAAC,YAAY;YAAE,SAAS;QACzD,IAAI,CAAC;YACD,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAC/C,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC;gBACb,aAAa,CACT,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,EAC5B,MAAM,OAAO,CAAC,IAAI,EAAE,CACvB,CAAC;YACN,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACL,uBAAuB;QAC3B,CAAC;IACL,CAAC;AACL,CAAC;AAED,wEAAwE;AACxE,SAAS,kBAAkB,CAAC,UAAkB;IAC1C,MAAM,QAAQ,GAAG,iBAAiB,EAAE,CAAC;IACrC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEpE,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,UAAU,CAAC,EAAE,CAAC;QACzC,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;QACnC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE;YAAE,SAAS;QAC3C,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;YAAE,SAAS;QAEtD,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAClC,IAAI,CAAC;YACD,MAAM,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACxD,CAAC;QAAC,MAAM,CAAC;YACL,cAAc;QAClB,CAAC;IACL,CAAC;IAED,cAAc,CAAC,EAAE,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;AAC5D,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACrC,IAAY,EACZ,UAAkC;IAElC,MAAM,QAAQ,GAAG,iBAAiB,EAAE,CAAC;IACrC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,SAAS,CAAC,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEpE,UAAU,EAAE,CAAC,sBAAsB,IAAI,EAAE,CAAC,CAAC;IAC3C,MAAM,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAEpC,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IACjC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC;QAC1C,MAAM,IAAI,KAAK,CACX,aAAa,IAAI,yCAAyC;YACtD,0DAA0D,CACjE,CAAC;IACN,CAAC;IACD,OAAO,GAAG,CAAC;AACf,CAAC"}
1
+ {"version":3,"file":"fetcher.js","sourceRoot":"","sources":["../../../src/templates/fetcher.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,34 @@
1
+ FROM python:3.12-slim
2
+
3
+ RUN apt-get update && apt-get install -y --no-install-recommends \
4
+ curl tini && \
5
+ rm -rf /var/lib/apt/lists/*
6
+
7
+ WORKDIR /app
8
+
9
+ COPY requirements.txt .
10
+ RUN pip install --no-cache-dir -r requirements.txt
11
+
12
+ RUN pip install --no-cache-dir 1claw-mcp 2>/dev/null || \
13
+ (apt-get update && apt-get install -y --no-install-recommends nodejs npm && \
14
+ npm install -g @1claw/mcp@latest && \
15
+ rm -rf /var/lib/apt/lists/*) || \
16
+ echo "WARN: 1claw-mcp install deferred to runtime"
17
+
18
+ COPY agent.py .
19
+ COPY entrypoint.sh .
20
+ RUN chmod +x entrypoint.sh
21
+
22
+ RUN mkdir -p /run/1claw
23
+
24
+ ENV NODE_ENV=production
25
+ ENV ONECLAW_DAEMON_SOCKET=/run/1claw/daemon.sock
26
+ ENV ONECLAW_FRAMEWORK=langchain
27
+
28
+ EXPOSE 3000
29
+
30
+ HEALTHCHECK --interval=10s --timeout=3s --start-period=10s --retries=5 \
31
+ CMD curl -sf http://localhost:3000/health || exit 1
32
+
33
+ ENTRYPOINT ["tini", "--"]
34
+ CMD ["./entrypoint.sh"]
@@ -0,0 +1,37 @@
1
+ # LangChain / LangGraph Template
2
+
3
+ A Python agent using [LangChain](https://python.langchain.com) with 1Claw MCP
4
+ for secrets management and on-chain signing.
5
+
6
+ ## Quick start
7
+
8
+ ```bash
9
+ 1claw spawn langchain
10
+ ```
11
+
12
+ Or with your own API key:
13
+
14
+ ```bash
15
+ 1claw spawn langchain --llm-api-key sk-...
16
+ ```
17
+
18
+ ## What's included
19
+
20
+ - **agent.py** — Starter LangChain agent with tool calling (hello_world, list_env_vars)
21
+ - **Flask server** on port 3000 with `/chat` and `/health` endpoints
22
+ - **Shroud integration** — LLM calls are routed through Shroud for inspection
23
+ - **MCP server** — started automatically for tool access to 1Claw vault
24
+
25
+ ## Customizing
26
+
27
+ Edit `agent.py` to add your own tools, change the prompt, or swap the LLM
28
+ provider. The agent uses `ChatOpenAI` pointed at Shroud, which handles
29
+ provider routing transparently.
30
+
31
+ ## LLM authentication
32
+
33
+ The template supports three methods (configured at spawn time):
34
+
35
+ 1. **BYOK** — `1claw spawn langchain --llm-api-key sk-...`
36
+ 2. **Token Billing** — enable in Dashboard, no key needed
37
+ 3. **Anthropic WIF** — OIDC federation for Anthropic models
@@ -0,0 +1,115 @@
1
+ """
2
+ LangChain agent pre-wired with 1Claw MCP for secrets and signing.
3
+
4
+ LLM calls are routed through Shroud when ONECLAW_LLM_VIA_SHROUD is set.
5
+ The container never sees raw API keys — they are injected by the host daemon.
6
+ """
7
+
8
+ import os
9
+ import threading
10
+ from flask import Flask, request, jsonify
11
+ from langchain_openai import ChatOpenAI
12
+ from langchain.agents import AgentExecutor, create_tool_calling_agent
13
+ from langchain_core.prompts import ChatPromptTemplate
14
+ from langchain_core.tools import tool
15
+
16
+ app = Flask(__name__)
17
+
18
+ SHROUD_URL = os.environ.get("ONECLAW_SHROUD_URL", "https://shroud.1claw.xyz")
19
+ LLM_VIA_SHROUD = os.environ.get("ONECLAW_LLM_VIA_SHROUD", "").lower() == "true"
20
+ PROVIDER = os.environ.get("ONECLAW_SHROUD_PROVIDER", "openai")
21
+ MODEL = os.environ.get("ONECLAW_SHROUD_MODEL", "gpt-4o-mini")
22
+
23
+ conversation_history: list[dict] = []
24
+
25
+
26
+ @tool
27
+ def hello_world(name: str) -> str:
28
+ """Say hello to someone."""
29
+ return f"Hello, {name}! I'm a LangChain agent running inside 1Claw."
30
+
31
+
32
+ @tool
33
+ def list_env_vars() -> str:
34
+ """List 1Claw-related environment variables (values redacted)."""
35
+ prefix = "ONECLAW_"
36
+ vars_list = [k for k in sorted(os.environ) if k.startswith(prefix)]
37
+ return "\n".join(f" {k}=***" for k in vars_list) if vars_list else "No ONECLAW_* vars set."
38
+
39
+
40
+ def create_agent() -> AgentExecutor | None:
41
+ """Build the LangChain agent. Returns None if no LLM is configured."""
42
+ if not LLM_VIA_SHROUD:
43
+ return None
44
+
45
+ llm = ChatOpenAI(
46
+ model=MODEL,
47
+ base_url=f"{SHROUD_URL}/v1",
48
+ api_key="shroud-injected",
49
+ )
50
+
51
+ tools = [hello_world, list_env_vars]
52
+
53
+ prompt = ChatPromptTemplate.from_messages([
54
+ ("system", "You are a helpful AI agent running inside a secure 1Claw container. "
55
+ "You have access to tools for greeting and inspecting the environment."),
56
+ ("placeholder", "{chat_history}"),
57
+ ("human", "{input}"),
58
+ ("placeholder", "{agent_scratchpad}"),
59
+ ])
60
+
61
+ agent = create_tool_calling_agent(llm, tools, prompt)
62
+ return AgentExecutor(agent=agent, tools=tools, verbose=False)
63
+
64
+
65
+ agent_executor = create_agent()
66
+
67
+
68
+ @app.route("/health")
69
+ def health():
70
+ return jsonify({"status": "ok", "framework": "langchain", "llm_wired": LLM_VIA_SHROUD})
71
+
72
+
73
+ @app.route("/chat", methods=["POST"])
74
+ def chat():
75
+ data = request.get_json(silent=True) or {}
76
+ message = data.get("message", "").strip()
77
+ if not message:
78
+ return jsonify({"error": "No message provided"}), 400
79
+
80
+ if not agent_executor:
81
+ return jsonify({
82
+ "response": "No LLM configured. Use --llm-api-key or enable Token Billing.",
83
+ "framework": "langchain",
84
+ })
85
+
86
+ try:
87
+ result = agent_executor.invoke({
88
+ "input": message,
89
+ "chat_history": conversation_history,
90
+ })
91
+ output = result.get("output", str(result))
92
+ conversation_history.append({"role": "user", "content": message})
93
+ conversation_history.append({"role": "assistant", "content": output})
94
+ return jsonify({"response": output, "framework": "langchain"})
95
+ except Exception as e:
96
+ return jsonify({"error": str(e)}), 500
97
+
98
+
99
+ @app.route("/")
100
+ def index():
101
+ return """<!DOCTYPE html>
102
+ <html><head><title>1Claw LangChain Agent</title></head>
103
+ <body style="font-family:system-ui;max-width:600px;margin:40px auto;padding:0 20px">
104
+ <h1>1Claw LangChain Agent</h1>
105
+ <p>Send messages via <code>POST /chat</code> with <code>{"message": "..."}</code></p>
106
+ <p>Health: <a href="/health">/health</a></p>
107
+ <p style="color:#666;font-size:0.9em">
108
+ Credentials stay in the host daemon — this container never sees secret values.
109
+ </p></body></html>"""
110
+
111
+
112
+ if __name__ == "__main__":
113
+ port = int(os.environ.get("CHAT_UI_PORT", "3000"))
114
+ print(f"LangChain agent listening on http://0.0.0.0:{port}")
115
+ app.run(host="0.0.0.0", port=port)
@@ -0,0 +1,36 @@
1
+ #!/bin/sh
2
+ set -e
3
+
4
+ DAEMON_SOCKET="${ONECLAW_DAEMON_SOCKET:-/run/1claw/daemon.sock}"
5
+ CHAT_UI_PORT="${CHAT_UI_PORT:-3000}"
6
+
7
+ echo "─────────────────────────────────────────────"
8
+ echo " 1Claw LangChain Agent"
9
+ echo " Framework: langchain"
10
+ echo " Agent ID: ${ONECLAW_AGENT_ID:-not set}"
11
+
12
+ if [ -S "$DAEMON_SOCKET" ]; then
13
+ echo " Mode: ${ONECLAW_MODE:-cloud} (daemon socket)"
14
+ echo " Socket: $DAEMON_SOCKET"
15
+ else
16
+ echo " Mode: standalone (no daemon socket)"
17
+ fi
18
+ echo "─────────────────────────────────────────────"
19
+
20
+ # Route LLM calls through Shroud (transparent to application code)
21
+ if [ "$ONECLAW_LLM_VIA_SHROUD" = "true" ]; then
22
+ export OPENAI_BASE_URL="${ONECLAW_SHROUD_URL}/v1"
23
+ echo "LLM routed through Shroud: ${ONECLAW_SHROUD_PROVIDER}/${ONECLAW_SHROUD_MODEL}"
24
+ fi
25
+
26
+ # Start MCP server in background (best-effort)
27
+ if [ -S "$DAEMON_SOCKET" ]; then
28
+ if command -v 1claw-mcp >/dev/null 2>&1; then
29
+ ONECLAW_LOCAL_VAULT=true ONECLAW_DAEMON_SOCKET="$DAEMON_SOCKET" \
30
+ 1claw-mcp --local 2>/tmp/mcp.log &
31
+ echo "MCP server started in background."
32
+ fi
33
+ fi
34
+
35
+ echo "Ready: http://0.0.0.0:${CHAT_UI_PORT}"
36
+ exec python agent.py
@@ -0,0 +1,4 @@
1
+ langchain>=0.3.0
2
+ langchain-openai>=0.2.0
3
+ langgraph>=0.2.0
4
+ flask>=3.0.0
@@ -0,0 +1,24 @@
1
+ name: langchain
2
+ display_name: "LangChain / LangGraph"
3
+ version: 1.0.0
4
+ description: "Python agent using LangChain with 1Claw MCP for secrets and signing"
5
+ author: 1Claw
6
+ language: python
7
+ homepage: https://python.langchain.com
8
+
9
+ docker:
10
+ base_image: python:3.12-slim
11
+ context_files:
12
+ - Dockerfile
13
+ - requirements.txt
14
+ - agent.py
15
+ - entrypoint.sh
16
+ env:
17
+ ONECLAW_FRAMEWORK: langchain
18
+ health_endpoint: /health
19
+ health_port: 3000
20
+
21
+ post_spawn_message: |
22
+ Edit agent.py to customize your LangChain agent.
23
+ Your 1Claw MCP server is available at the daemon socket.
24
+ LLM calls are routed through Shroud for inspection and redaction.
@@ -0,0 +1,34 @@
1
+ FROM python:3.12-slim
2
+
3
+ RUN apt-get update && apt-get install -y --no-install-recommends \
4
+ curl tini && \
5
+ rm -rf /var/lib/apt/lists/*
6
+
7
+ WORKDIR /app
8
+
9
+ COPY requirements.txt .
10
+ RUN pip install --no-cache-dir -r requirements.txt
11
+
12
+ RUN pip install --no-cache-dir 1claw-mcp 2>/dev/null || \
13
+ (apt-get update && apt-get install -y --no-install-recommends nodejs npm && \
14
+ npm install -g @1claw/mcp@latest && \
15
+ rm -rf /var/lib/apt/lists/*) || \
16
+ echo "WARN: 1claw-mcp install deferred to runtime"
17
+
18
+ COPY agent.py .
19
+ COPY entrypoint.sh .
20
+ RUN chmod +x entrypoint.sh
21
+
22
+ RUN mkdir -p /run/1claw
23
+
24
+ ENV NODE_ENV=production
25
+ ENV ONECLAW_DAEMON_SOCKET=/run/1claw/daemon.sock
26
+ ENV ONECLAW_FRAMEWORK=llamaindex
27
+
28
+ EXPOSE 3000
29
+
30
+ HEALTHCHECK --interval=10s --timeout=3s --start-period=10s --retries=5 \
31
+ CMD curl -sf http://localhost:3000/health || exit 1
32
+
33
+ ENTRYPOINT ["tini", "--"]
34
+ CMD ["./entrypoint.sh"]
@@ -0,0 +1,36 @@
1
+ # LlamaIndex Template
2
+
3
+ A Python agent using [LlamaIndex](https://docs.llamaindex.ai) with 1Claw MCP for secrets management and on-chain signing.
4
+
5
+ ## Quick start
6
+
7
+ ```bash
8
+ 1claw spawn llamaindex
9
+ ```
10
+
11
+ Or with your own API key:
12
+
13
+ ```bash
14
+ 1claw spawn llamaindex --llm-api-key sk-...
15
+ ```
16
+
17
+ ## What's included
18
+
19
+ - **agent.py** — LlamaIndex ReActAgent with example tools (hello_world, list_env_vars)
20
+ - **Flask server** on port 3000 with `/chat` and `/health` endpoints
21
+ - **Shroud integration** — LLM calls are routed through Shroud for inspection
22
+ - **MCP server** — started automatically for tool access to 1Claw vault
23
+
24
+ ## Customizing
25
+
26
+ Edit `agent.py` to add custom tools, connect data sources (documents,
27
+ APIs, databases), or switch to a different agent type. LlamaIndex
28
+ supports RAG, structured output, and multi-step reasoning.
29
+
30
+ ## LLM authentication
31
+
32
+ The template supports three methods (configured at spawn time):
33
+
34
+ 1. **BYOK** — `1claw spawn llamaindex --llm-api-key sk-...`
35
+ 2. **Token Billing** — enable in Dashboard, no key needed
36
+ 3. **Anthropic WIF** — OIDC federation for Anthropic models
@@ -0,0 +1,97 @@
1
+ """
2
+ LlamaIndex agent pre-wired with 1Claw MCP for secrets and signing.
3
+
4
+ LLM calls are routed through Shroud when ONECLAW_LLM_VIA_SHROUD is set.
5
+ The container never sees raw API keys — they are injected by the host daemon.
6
+ """
7
+
8
+ import os
9
+ from flask import Flask, request, jsonify
10
+ from llama_index.core.agent import ReActAgent
11
+ from llama_index.core.tools import FunctionTool
12
+ from llama_index.llms.openai_like import OpenAILike
13
+
14
+ app = Flask(__name__)
15
+
16
+ SHROUD_URL = os.environ.get("ONECLAW_SHROUD_URL", "https://shroud.1claw.xyz")
17
+ LLM_VIA_SHROUD = os.environ.get("ONECLAW_LLM_VIA_SHROUD", "").lower() == "true"
18
+ MODEL = os.environ.get("ONECLAW_SHROUD_MODEL", "gpt-4o-mini")
19
+
20
+
21
+ def hello_world(name: str) -> str:
22
+ """Say hello to someone."""
23
+ return f"Hello, {name}! I'm a LlamaIndex agent running inside 1Claw."
24
+
25
+
26
+ def list_env_vars() -> str:
27
+ """List 1Claw-related environment variables (values redacted)."""
28
+ prefix = "ONECLAW_"
29
+ vars_list = [k for k in sorted(os.environ) if k.startswith(prefix)]
30
+ return "\n".join(f" {k}=***" for k in vars_list) if vars_list else "No ONECLAW_* vars set."
31
+
32
+
33
+ def create_agent():
34
+ """Build the LlamaIndex ReAct agent. Returns None if no LLM."""
35
+ if not LLM_VIA_SHROUD:
36
+ return None
37
+
38
+ llm = OpenAILike(
39
+ model=MODEL,
40
+ api_base=f"{SHROUD_URL}/v1",
41
+ api_key="shroud-injected",
42
+ is_chat_model=True,
43
+ )
44
+
45
+ tools = [
46
+ FunctionTool.from_defaults(fn=hello_world),
47
+ FunctionTool.from_defaults(fn=list_env_vars),
48
+ ]
49
+
50
+ return ReActAgent.from_tools(tools, llm=llm, verbose=False)
51
+
52
+
53
+ agent = create_agent()
54
+
55
+
56
+ @app.route("/health")
57
+ def health():
58
+ return jsonify({"status": "ok", "framework": "llamaindex", "llm_wired": LLM_VIA_SHROUD})
59
+
60
+
61
+ @app.route("/chat", methods=["POST"])
62
+ def chat():
63
+ data = request.get_json(silent=True) or {}
64
+ message = data.get("message", "").strip()
65
+ if not message:
66
+ return jsonify({"error": "No message provided"}), 400
67
+
68
+ if not agent:
69
+ return jsonify({
70
+ "response": "No LLM configured. Use --llm-api-key or enable Token Billing.",
71
+ "framework": "llamaindex",
72
+ })
73
+
74
+ try:
75
+ response = agent.chat(message)
76
+ return jsonify({"response": str(response), "framework": "llamaindex"})
77
+ except Exception as e:
78
+ return jsonify({"error": str(e)}), 500
79
+
80
+
81
+ @app.route("/")
82
+ def index():
83
+ return """<!DOCTYPE html>
84
+ <html><head><title>1Claw LlamaIndex Agent</title></head>
85
+ <body style="font-family:system-ui;max-width:600px;margin:40px auto;padding:0 20px">
86
+ <h1>1Claw LlamaIndex Agent</h1>
87
+ <p>Send messages via <code>POST /chat</code> with <code>{"message": "..."}</code></p>
88
+ <p>Health: <a href="/health">/health</a></p>
89
+ <p style="color:#666;font-size:0.9em">
90
+ Credentials stay in the host daemon — this container never sees secret values.
91
+ </p></body></html>"""
92
+
93
+
94
+ if __name__ == "__main__":
95
+ port = int(os.environ.get("CHAT_UI_PORT", "3000"))
96
+ print(f"LlamaIndex agent listening on http://0.0.0.0:{port}")
97
+ app.run(host="0.0.0.0", port=port)
@@ -0,0 +1,34 @@
1
+ #!/bin/sh
2
+ set -e
3
+
4
+ DAEMON_SOCKET="${ONECLAW_DAEMON_SOCKET:-/run/1claw/daemon.sock}"
5
+ CHAT_UI_PORT="${CHAT_UI_PORT:-3000}"
6
+
7
+ echo "─────────────────────────────────────────────"
8
+ echo " 1Claw LlamaIndex Agent"
9
+ echo " Framework: llamaindex"
10
+ echo " Agent ID: ${ONECLAW_AGENT_ID:-not set}"
11
+
12
+ if [ -S "$DAEMON_SOCKET" ]; then
13
+ echo " Mode: ${ONECLAW_MODE:-cloud} (daemon socket)"
14
+ echo " Socket: $DAEMON_SOCKET"
15
+ else
16
+ echo " Mode: standalone (no daemon socket)"
17
+ fi
18
+ echo "─────────────────────────────────────────────"
19
+
20
+ if [ "$ONECLAW_LLM_VIA_SHROUD" = "true" ]; then
21
+ export OPENAI_BASE_URL="${ONECLAW_SHROUD_URL}/v1"
22
+ echo "LLM routed through Shroud: ${ONECLAW_SHROUD_PROVIDER}/${ONECLAW_SHROUD_MODEL}"
23
+ fi
24
+
25
+ if [ -S "$DAEMON_SOCKET" ]; then
26
+ if command -v 1claw-mcp >/dev/null 2>&1; then
27
+ ONECLAW_LOCAL_VAULT=true ONECLAW_DAEMON_SOCKET="$DAEMON_SOCKET" \
28
+ 1claw-mcp --local 2>/tmp/mcp.log &
29
+ echo "MCP server started in background."
30
+ fi
31
+ fi
32
+
33
+ echo "Ready: http://0.0.0.0:${CHAT_UI_PORT}"
34
+ exec python agent.py
@@ -0,0 +1,3 @@
1
+ llama-index-core>=0.12.0
2
+ llama-index-llms-openai-like>=0.3.0
3
+ flask>=3.0.0
@@ -0,0 +1,24 @@
1
+ name: llamaindex
2
+ display_name: "LlamaIndex"
3
+ version: 1.0.0
4
+ description: "LlamaIndex agent with tool integration and 1Claw MCP"
5
+ author: 1Claw
6
+ language: python
7
+ homepage: https://docs.llamaindex.ai
8
+
9
+ docker:
10
+ base_image: python:3.12-slim
11
+ context_files:
12
+ - Dockerfile
13
+ - requirements.txt
14
+ - agent.py
15
+ - entrypoint.sh
16
+ env:
17
+ ONECLAW_FRAMEWORK: llamaindex
18
+ health_endpoint: /health
19
+ health_port: 3000
20
+
21
+ post_spawn_message: |
22
+ Edit agent.py to customize your LlamaIndex agent's tools and data sources.
23
+ Your 1Claw MCP server is available at the daemon socket.
24
+ LLM calls are routed through Shroud for inspection and redaction.
@@ -0,0 +1,31 @@
1
+ FROM node:22-slim
2
+
3
+ RUN apt-get update && apt-get install -y --no-install-recommends \
4
+ curl tini && \
5
+ rm -rf /var/lib/apt/lists/*
6
+
7
+ WORKDIR /app
8
+
9
+ COPY package.json tsconfig.json ./
10
+ RUN npm install --omit=dev 2>/dev/null || npm install
11
+
12
+ RUN npm install -g @1claw/mcp@latest 2>/dev/null || \
13
+ echo "WARN: @1claw/mcp install deferred to runtime"
14
+
15
+ COPY agent.ts .
16
+ COPY entrypoint.sh .
17
+ RUN chmod +x entrypoint.sh
18
+
19
+ RUN mkdir -p /run/1claw
20
+
21
+ ENV NODE_ENV=production
22
+ ENV ONECLAW_DAEMON_SOCKET=/run/1claw/daemon.sock
23
+ ENV ONECLAW_FRAMEWORK=mastra
24
+
25
+ EXPOSE 3000
26
+
27
+ HEALTHCHECK --interval=10s --timeout=3s --start-period=10s --retries=5 \
28
+ CMD curl -sf http://localhost:3000/health || exit 1
29
+
30
+ ENTRYPOINT ["tini", "--"]
31
+ CMD ["./entrypoint.sh"]