@agentuity/cli 0.0.101 → 0.0.102

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 (210) hide show
  1. package/AGENTS.md +19 -188
  2. package/bin/cli.ts +13 -6
  3. package/dist/cli.d.ts.map +1 -1
  4. package/dist/cli.js +41 -12
  5. package/dist/cli.js.map +1 -1
  6. package/dist/cmd/ai/index.d.ts.map +1 -1
  7. package/dist/cmd/ai/index.js +6 -1
  8. package/dist/cmd/ai/index.js.map +1 -1
  9. package/dist/cmd/ai/prompt/agent.d.ts +7 -0
  10. package/dist/cmd/ai/prompt/agent.d.ts.map +1 -1
  11. package/dist/cmd/ai/prompt/agent.js +12 -323
  12. package/dist/cmd/ai/prompt/agent.js.map +1 -1
  13. package/dist/cmd/ai/prompt/api.d.ts +7 -0
  14. package/dist/cmd/ai/prompt/api.d.ts.map +1 -1
  15. package/dist/cmd/ai/prompt/api.js +12 -260
  16. package/dist/cmd/ai/prompt/api.js.map +1 -1
  17. package/dist/cmd/ai/prompt/version.d.ts +35 -0
  18. package/dist/cmd/ai/prompt/version.d.ts.map +1 -0
  19. package/dist/cmd/ai/prompt/version.js +55 -0
  20. package/dist/cmd/ai/prompt/version.js.map +1 -0
  21. package/dist/cmd/ai/prompt/web.d.ts +7 -0
  22. package/dist/cmd/ai/prompt/web.d.ts.map +1 -1
  23. package/dist/cmd/ai/prompt/web.js +12 -283
  24. package/dist/cmd/ai/prompt/web.js.map +1 -1
  25. package/dist/cmd/ai/skills/generate.d.ts +3 -0
  26. package/dist/cmd/ai/skills/generate.d.ts.map +1 -0
  27. package/dist/cmd/ai/skills/generate.js +65 -0
  28. package/dist/cmd/ai/skills/generate.js.map +1 -0
  29. package/dist/cmd/ai/skills/generator.d.ts +4 -0
  30. package/dist/cmd/ai/skills/generator.d.ts.map +1 -0
  31. package/dist/cmd/ai/skills/generator.js +402 -0
  32. package/dist/cmd/ai/skills/generator.js.map +1 -0
  33. package/dist/cmd/ai/skills/index.d.ts +4 -0
  34. package/dist/cmd/ai/skills/index.d.ts.map +1 -0
  35. package/dist/cmd/ai/skills/index.js +21 -0
  36. package/dist/cmd/ai/skills/index.js.map +1 -0
  37. package/dist/cmd/auth/signup.d.ts.map +1 -1
  38. package/dist/cmd/auth/signup.js +1 -0
  39. package/dist/cmd/auth/signup.js.map +1 -1
  40. package/dist/cmd/build/entry-generator.d.ts.map +1 -1
  41. package/dist/cmd/build/entry-generator.js +40 -5
  42. package/dist/cmd/build/entry-generator.js.map +1 -1
  43. package/dist/cmd/build/vite/bun-dev-server.d.ts +7 -1
  44. package/dist/cmd/build/vite/bun-dev-server.d.ts.map +1 -1
  45. package/dist/cmd/build/vite/bun-dev-server.js +52 -26
  46. package/dist/cmd/build/vite/bun-dev-server.js.map +1 -1
  47. package/dist/cmd/build/vite/metadata-generator.d.ts.map +1 -1
  48. package/dist/cmd/build/vite/metadata-generator.js +58 -7
  49. package/dist/cmd/build/vite/metadata-generator.js.map +1 -1
  50. package/dist/cmd/build/vite/prompt-generator.d.ts +23 -0
  51. package/dist/cmd/build/vite/prompt-generator.d.ts.map +1 -0
  52. package/dist/cmd/build/vite/prompt-generator.js +123 -0
  53. package/dist/cmd/build/vite/prompt-generator.js.map +1 -0
  54. package/dist/cmd/build/vite/registry-generator.d.ts.map +1 -1
  55. package/dist/cmd/build/vite/registry-generator.js +28 -11
  56. package/dist/cmd/build/vite/registry-generator.js.map +1 -1
  57. package/dist/cmd/build/vite/server-bundler.d.ts +4 -0
  58. package/dist/cmd/build/vite/server-bundler.d.ts.map +1 -1
  59. package/dist/cmd/build/vite/server-bundler.js +45 -16
  60. package/dist/cmd/build/vite/server-bundler.js.map +1 -1
  61. package/dist/cmd/build/vite/vite-asset-server-config.d.ts.map +1 -1
  62. package/dist/cmd/build/vite/vite-asset-server-config.js +4 -0
  63. package/dist/cmd/build/vite/vite-asset-server-config.js.map +1 -1
  64. package/dist/cmd/build/vite/vite-builder.d.ts.map +1 -1
  65. package/dist/cmd/build/vite/vite-builder.js +99 -87
  66. package/dist/cmd/build/vite/vite-builder.js.map +1 -1
  67. package/dist/cmd/cloud/deploy.d.ts.map +1 -1
  68. package/dist/cmd/cloud/deploy.js +78 -27
  69. package/dist/cmd/cloud/deploy.js.map +1 -1
  70. package/dist/cmd/cloud/keyvalue/create-namespace.d.ts.map +1 -1
  71. package/dist/cmd/cloud/keyvalue/create-namespace.js +3 -1
  72. package/dist/cmd/cloud/keyvalue/create-namespace.js.map +1 -1
  73. package/dist/cmd/cloud/keyvalue/delete-namespace.d.ts.map +1 -1
  74. package/dist/cmd/cloud/keyvalue/delete-namespace.js +3 -1
  75. package/dist/cmd/cloud/keyvalue/delete-namespace.js.map +1 -1
  76. package/dist/cmd/cloud/keyvalue/delete.d.ts.map +1 -1
  77. package/dist/cmd/cloud/keyvalue/delete.js +3 -1
  78. package/dist/cmd/cloud/keyvalue/delete.js.map +1 -1
  79. package/dist/cmd/cloud/keyvalue/set.d.ts.map +1 -1
  80. package/dist/cmd/cloud/keyvalue/set.js +4 -2
  81. package/dist/cmd/cloud/keyvalue/set.js.map +1 -1
  82. package/dist/cmd/cloud/stream/get.d.ts.map +1 -1
  83. package/dist/cmd/cloud/stream/get.js +2 -13
  84. package/dist/cmd/cloud/stream/get.js.map +1 -1
  85. package/dist/cmd/cloud/vector/delete-namespace.d.ts +3 -0
  86. package/dist/cmd/cloud/vector/delete-namespace.d.ts.map +1 -0
  87. package/dist/cmd/cloud/vector/delete-namespace.js +77 -0
  88. package/dist/cmd/cloud/vector/delete-namespace.js.map +1 -0
  89. package/dist/cmd/cloud/vector/index.d.ts.map +1 -1
  90. package/dist/cmd/cloud/vector/index.js +21 -4
  91. package/dist/cmd/cloud/vector/index.js.map +1 -1
  92. package/dist/cmd/cloud/vector/list-namespaces.d.ts +3 -0
  93. package/dist/cmd/cloud/vector/list-namespaces.d.ts.map +1 -0
  94. package/dist/cmd/cloud/vector/list-namespaces.js +42 -0
  95. package/dist/cmd/cloud/vector/list-namespaces.js.map +1 -0
  96. package/dist/cmd/cloud/vector/stats.d.ts +3 -0
  97. package/dist/cmd/cloud/vector/stats.d.ts.map +1 -0
  98. package/dist/cmd/cloud/vector/stats.js +142 -0
  99. package/dist/cmd/cloud/vector/stats.js.map +1 -0
  100. package/dist/cmd/cloud/vector/upsert.d.ts +3 -0
  101. package/dist/cmd/cloud/vector/upsert.d.ts.map +1 -0
  102. package/dist/cmd/cloud/vector/upsert.js +192 -0
  103. package/dist/cmd/cloud/vector/upsert.js.map +1 -0
  104. package/dist/cmd/dev/file-watcher.d.ts.map +1 -1
  105. package/dist/cmd/dev/file-watcher.js +90 -31
  106. package/dist/cmd/dev/file-watcher.js.map +1 -1
  107. package/dist/cmd/dev/index.d.ts.map +1 -1
  108. package/dist/cmd/dev/index.js +213 -57
  109. package/dist/cmd/dev/index.js.map +1 -1
  110. package/dist/cmd/dev/skills.d.ts +10 -0
  111. package/dist/cmd/dev/skills.d.ts.map +1 -0
  112. package/dist/cmd/dev/skills.js +57 -0
  113. package/dist/cmd/dev/skills.js.map +1 -0
  114. package/dist/cmd/dev/sync.js +7 -7
  115. package/dist/cmd/dev/sync.js.map +1 -1
  116. package/dist/cmd/index.d.ts.map +1 -1
  117. package/dist/cmd/index.js +1 -0
  118. package/dist/cmd/index.js.map +1 -1
  119. package/dist/cmd/project/create.d.ts.map +1 -1
  120. package/dist/cmd/project/create.js +3 -0
  121. package/dist/cmd/project/create.js.map +1 -1
  122. package/dist/cmd/project/template-flow.d.ts +1 -0
  123. package/dist/cmd/project/template-flow.d.ts.map +1 -1
  124. package/dist/cmd/project/template-flow.js +30 -5
  125. package/dist/cmd/project/template-flow.js.map +1 -1
  126. package/dist/cmd/setup/index.d.ts.map +1 -1
  127. package/dist/cmd/setup/index.js +1 -0
  128. package/dist/cmd/setup/index.js.map +1 -1
  129. package/dist/cmd/upgrade/index.d.ts +15 -0
  130. package/dist/cmd/upgrade/index.d.ts.map +1 -1
  131. package/dist/cmd/upgrade/index.js +59 -4
  132. package/dist/cmd/upgrade/index.js.map +1 -1
  133. package/dist/domain.d.ts +45 -0
  134. package/dist/domain.d.ts.map +1 -0
  135. package/dist/domain.js +200 -0
  136. package/dist/domain.js.map +1 -0
  137. package/dist/schema-generator.d.ts +2 -0
  138. package/dist/schema-generator.d.ts.map +1 -1
  139. package/dist/schema-generator.js +18 -0
  140. package/dist/schema-generator.js.map +1 -1
  141. package/dist/steps.d.ts +1 -1
  142. package/dist/steps.d.ts.map +1 -1
  143. package/dist/steps.js +16 -5
  144. package/dist/steps.js.map +1 -1
  145. package/dist/tui/prompt.d.ts +1 -2
  146. package/dist/tui/prompt.d.ts.map +1 -1
  147. package/dist/tui/prompt.js +8 -4
  148. package/dist/tui/prompt.js.map +1 -1
  149. package/dist/tui.d.ts +16 -0
  150. package/dist/tui.d.ts.map +1 -1
  151. package/dist/tui.js +23 -2
  152. package/dist/tui.js.map +1 -1
  153. package/dist/types.d.ts +9 -2
  154. package/dist/types.d.ts.map +1 -1
  155. package/dist/types.js +3 -3
  156. package/dist/types.js.map +1 -1
  157. package/package.json +4 -4
  158. package/src/cli.ts +47 -12
  159. package/src/cmd/ai/index.ts +6 -1
  160. package/src/cmd/ai/prompt/agent.md +306 -0
  161. package/src/cmd/ai/prompt/agent.ts +12 -322
  162. package/src/cmd/ai/prompt/api.md +360 -0
  163. package/src/cmd/ai/prompt/api.ts +13 -260
  164. package/src/cmd/ai/prompt/version.ts +61 -0
  165. package/src/cmd/ai/prompt/web.md +509 -0
  166. package/src/cmd/ai/prompt/web.ts +12 -282
  167. package/src/cmd/ai/skills/generate.ts +75 -0
  168. package/src/cmd/ai/skills/generator.ts +519 -0
  169. package/src/cmd/ai/skills/index.ts +23 -0
  170. package/src/cmd/auth/signup.ts +1 -0
  171. package/src/cmd/build/entry-generator.ts +43 -7
  172. package/src/cmd/build/vite/bun-dev-server.ts +57 -27
  173. package/src/cmd/build/vite/metadata-generator.ts +73 -7
  174. package/src/cmd/build/vite/prompt-generator.ts +169 -0
  175. package/src/cmd/build/vite/registry-generator.ts +33 -10
  176. package/src/cmd/build/vite/server-bundler.ts +53 -22
  177. package/src/cmd/build/vite/vite-asset-server-config.ts +5 -0
  178. package/src/cmd/build/vite/vite-builder.ts +107 -87
  179. package/src/cmd/cloud/deploy.ts +99 -31
  180. package/src/cmd/cloud/keyvalue/create-namespace.ts +3 -1
  181. package/src/cmd/cloud/keyvalue/delete-namespace.ts +3 -1
  182. package/src/cmd/cloud/keyvalue/delete.ts +3 -1
  183. package/src/cmd/cloud/keyvalue/set.ts +4 -2
  184. package/src/cmd/cloud/stream/get.ts +2 -9
  185. package/src/cmd/cloud/vector/delete-namespace.ts +89 -0
  186. package/src/cmd/cloud/vector/index.ts +21 -4
  187. package/src/cmd/cloud/vector/list-namespaces.ts +46 -0
  188. package/src/cmd/cloud/vector/stats.ts +160 -0
  189. package/src/cmd/cloud/vector/upsert.ts +216 -0
  190. package/src/cmd/dev/file-watcher.ts +101 -32
  191. package/src/cmd/dev/index.ts +304 -111
  192. package/src/cmd/dev/skills.ts +82 -0
  193. package/src/cmd/dev/sync.ts +7 -7
  194. package/src/cmd/index.ts +1 -0
  195. package/src/cmd/project/create.ts +3 -0
  196. package/src/cmd/project/template-flow.ts +37 -5
  197. package/src/cmd/setup/index.ts +1 -0
  198. package/src/cmd/upgrade/index.ts +68 -4
  199. package/src/domain.ts +273 -0
  200. package/src/schema-generator.ts +23 -0
  201. package/src/steps.ts +16 -5
  202. package/src/tui/prompt.ts +11 -5
  203. package/src/tui.ts +21 -2
  204. package/src/types/md.d.ts +8 -0
  205. package/src/types.ts +12 -3
  206. package/dist/cmd/cloud/domain.d.ts +0 -17
  207. package/dist/cmd/cloud/domain.d.ts.map +0 -1
  208. package/dist/cmd/cloud/domain.js +0 -79
  209. package/dist/cmd/cloud/domain.js.map +0 -1
  210. package/src/cmd/cloud/domain.ts +0 -100
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Prompt file versioning utilities.
3
+ *
4
+ * Hash format at end of file: <!-- prompt_hash: [hash] -->
5
+ *
6
+ * - hash: SHA256 of file content (excluding the hash line)
7
+ *
8
+ * This allows detecting if the source template has changed.
9
+ */
10
+ const HASH_REGEX = /\n?<!-- prompt_hash: ([a-f0-9]+) -->$/;
11
+ /**
12
+ * Compute SHA256 hash of content using Bun's built-in hasher.
13
+ */
14
+ export function computeHash(content) {
15
+ const hasher = new Bun.CryptoHasher('sha256');
16
+ hasher.update(content);
17
+ return hasher.digest().toHex();
18
+ }
19
+ /**
20
+ * Strip the hash comment from content.
21
+ */
22
+ export function stripHashComment(content) {
23
+ return content.replace(HASH_REGEX, '');
24
+ }
25
+ /**
26
+ * Extract hash from file content.
27
+ * Returns null if no hash comment found.
28
+ */
29
+ export function extractHash(content) {
30
+ const match = content.match(HASH_REGEX);
31
+ return match ? match[1] : null;
32
+ }
33
+ /**
34
+ * Generate content with hash comment appended.
35
+ */
36
+ export function appendHashComment(content) {
37
+ const hash = computeHash(content);
38
+ return `${content}\n<!-- prompt_hash: ${hash} -->`;
39
+ }
40
+ /**
41
+ * Check if a file needs to be updated based on hash comparison.
42
+ *
43
+ * @param fileContent - Current file content (with hash comment)
44
+ * @param sourceContent - Source template content (without hash comment)
45
+ * @returns true if file needs to be updated (hashes differ)
46
+ */
47
+ export function needsUpdate(fileContent, sourceContent) {
48
+ const fileHash = extractHash(fileContent);
49
+ if (!fileHash) {
50
+ return true;
51
+ }
52
+ const sourceHash = computeHash(sourceContent);
53
+ return fileHash !== sourceHash;
54
+ }
55
+ //# sourceMappingURL=version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../../../../src/cmd/ai/prompt/version.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,UAAU,GAAG,uCAAuC,CAAC;AAE3D;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,OAAe;IAC1C,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC9C,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACvB,OAAO,MAAM,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC;AAChC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,OAAe;IAC/C,OAAO,OAAO,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;AACxC,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,WAAW,CAAC,OAAe;IAC1C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACxC,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAChC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAAe;IAChD,MAAM,IAAI,GAAG,WAAW,CAAC,OAAO,CAAC,CAAC;IAClC,OAAO,GAAG,OAAO,uBAAuB,IAAI,MAAM,CAAC;AACpD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CAAC,WAAmB,EAAE,aAAqB;IACrE,MAAM,QAAQ,GAAG,WAAW,CAAC,WAAW,CAAC,CAAC;IAC1C,IAAI,CAAC,QAAQ,EAAE,CAAC;QACf,OAAO,IAAI,CAAC;IACb,CAAC;IAED,MAAM,UAAU,GAAG,WAAW,CAAC,aAAa,CAAC,CAAC;IAC9C,OAAO,QAAQ,KAAK,UAAU,CAAC;AAChC,CAAC"}
@@ -1,3 +1,10 @@
1
1
  export declare const webSubcommand: import("../../..").SubcommandDefinition;
2
+ /**
3
+ * Get the raw prompt content without hash.
4
+ */
5
+ export declare function getPromptContent(): string;
6
+ /**
7
+ * Generate the web prompt with hash comment.
8
+ */
2
9
  export declare function generateLLMPrompt(): string;
3
10
  //# sourceMappingURL=web.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"web.d.ts","sourceRoot":"","sources":["../../../../src/cmd/ai/prompt/web.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,aAAa,yCAUxB,CAAC;AAEH,wBAAgB,iBAAiB,IAAI,MAAM,CA4R1C"}
1
+ {"version":3,"file":"web.d.ts","sourceRoot":"","sources":["../../../../src/cmd/ai/prompt/web.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,aAAa,yCAUxB,CAAC;AAEH;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAED;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C"}
@@ -1,5 +1,7 @@
1
1
  import { createSubcommand } from '../../../types';
2
2
  import { getCommand } from '../../../command-prefix';
3
+ import { appendHashComment } from './version';
4
+ import webPromptContent from './web.md' with { type: 'text' };
3
5
  export const webSubcommand = createSubcommand({
4
6
  name: 'web',
5
7
  description: 'Generate a comprehensive prompt for LLM agents for the web folder',
@@ -11,289 +13,16 @@ export const webSubcommand = createSubcommand({
11
13
  console.log(prompt);
12
14
  },
13
15
  });
14
- export function generateLLMPrompt() {
15
- return `# Web Folder Guide
16
-
17
- This folder contains your React-based web application that communicates with your Agentuity agents.
18
-
19
- ## Directory Structure
20
-
21
- Required files:
22
- - **App.tsx** (required) - Main React application component
23
- - **frontend.tsx** (required) - Frontend entry point with client-side rendering
24
- - **index.html** (required) - HTML template
25
- - **public/** (optional) - Static assets (images, CSS, JS files)
26
-
27
- Example structure:
28
- \`\`\`
29
- src/web/
30
- ├── App.tsx
31
- ├── frontend.tsx
32
- ├── index.html
33
- └── public/
34
- ├── styles.css
35
- ├── logo.svg
36
- └── script.js
37
- \`\`\`
38
-
39
- ## Creating the Web App
40
-
41
- ### App.tsx - Main Component
42
-
43
- \`\`\`typescript
44
- import { AgentuityProvider, useAgent } from '@agentuity/react';
45
- import { useState } from 'react';
46
-
47
- export function App() {
48
- const [name, setName] = useState('World');
49
- const { run, running, data: greeting } = useAgent('hello');
50
-
51
- return (
52
- <div style={{ fontFamily: 'sans-serif', padding: '2rem' }}>
53
- <AgentuityProvider>
54
- <h1>Welcome to Agentuity</h1>
55
-
56
- <input
57
- type="text"
58
- value={name}
59
- onChange={(e) => setName(e.target.value)}
60
- disabled={running}
61
- />
62
-
63
- <button
64
- onClick={() => run({ name })}
65
- disabled={running}
66
- >
67
- {running ? 'Running...' : 'Say Hello'}
68
- </button>
69
-
70
- <div>{greeting ?? 'Waiting for response'}</div>
71
- </AgentuityProvider>
72
- </div>
73
- );
74
- }
75
- \`\`\`
76
-
77
- ### frontend.tsx - Entry Point
78
-
79
- \`\`\`typescript
80
- import { createRoot } from 'react-dom/client';
81
- import { App } from './App';
82
-
83
- const root = document.getElementById('root');
84
- if (!root) throw new Error('Root element not found');
85
-
86
- createRoot(root).render(<App />);
87
- \`\`\`
88
-
89
- ### index.html - HTML Template
90
-
91
- \`\`\`html
92
- <!DOCTYPE html>
93
- <html lang="en">
94
- <head>
95
- <meta charset="UTF-8">
96
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
97
- <title>My Agentuity App</title>
98
- </head>
99
- <body>
100
- <div id="root"></div>
101
- <script type="module" src="/web/frontend.tsx"></script>
102
- </body>
103
- </html>
104
- \`\`\`
105
-
106
- ## React Hooks
107
-
108
- ### useAgent - Call Agents
109
-
110
- \`\`\`typescript
111
- import { useAgent } from '@agentuity/react';
112
-
113
- function MyComponent() {
114
- const { run, running, data, error } = useAgent('myAgent');
115
-
116
- return (
117
- <button onClick={() => run({ input: 'value' })}>
118
- {running ? 'Running...' : 'Call Agent'}
119
- </button>
120
- );
121
- }
122
- \`\`\`
123
-
124
- ### useAgentWebsocket - WebSocket Connection
125
-
126
- \`\`\`typescript
127
- import { useAgentWebsocket } from '@agentuity/react';
128
-
129
- function MyComponent() {
130
- const { connected, send, data } = useAgentWebsocket('websocket');
131
-
132
- return (
133
- <div>
134
- <p>Status: {connected ? 'Connected' : 'Disconnected'}</p>
135
- <button onClick={() => send('Hello')}>Send Message</button>
136
- <p>Received: {data}</p>
137
- </div>
138
- );
139
- }
140
- \`\`\`
141
-
142
- ### useAgentEventStream - Server-Sent Events
143
-
144
- \`\`\`typescript
145
- import { useAgentEventStream } from '@agentuity/react';
146
-
147
- function MyComponent() {
148
- const { connected, data, error } = useAgentEventStream('sse');
149
-
150
- return (
151
- <div>
152
- <p>Connected: {connected ? 'Yes' : 'No'}</p>
153
- {error && <p>Error: {error.message}</p>}
154
- <p>Data: {data}</p>
155
- </div>
156
- );
16
+ /**
17
+ * Get the raw prompt content without hash.
18
+ */
19
+ export function getPromptContent() {
20
+ return webPromptContent;
157
21
  }
158
- \`\`\`
159
-
160
- ## Complete Example
161
-
162
- \`\`\`typescript
163
- import { AgentuityProvider, useAgent, useAgentWebsocket } from '@agentuity/react';
164
- import { useEffect, useState } from 'react';
165
-
166
- export function App() {
167
- const [count, setCount] = useState(0);
168
- const { run, data: agentResult } = useAgent('simple');
169
- const { connected, send, data: wsMessage } = useAgentWebsocket('websocket');
170
-
171
- useEffect(() => {
172
- // Send WebSocket message every second
173
- const interval = setInterval(() => {
174
- send(\`Message at \${new Date().toISOString()}\`);
175
- }, 1000);
176
- return () => clearInterval(interval);
177
- }, [send]);
178
-
179
- return (
180
- <div style={{ fontFamily: 'sans-serif', padding: '2rem' }}>
181
- <AgentuityProvider>
182
- <h1>My Agentuity App</h1>
183
-
184
- <div>
185
- <p>Count: {count}</p>
186
- <button onClick={() => setCount(c => c + 1)}>
187
- Increment
188
- </button>
189
- </div>
190
-
191
- <div>
192
- <button onClick={() => run({ name: 'Jeff', age: 30 })}>
193
- Call Agent
194
- </button>
195
- <p>{agentResult}</p>
196
- </div>
197
-
198
- <div>
199
- <strong>WebSocket:</strong>
200
- {connected ? JSON.stringify(wsMessage) : 'Not connected'}
201
- </div>
202
- </AgentuityProvider>
203
- </div>
204
- );
205
- }
206
- \`\`\`
207
-
208
- ## Static Assets
209
-
210
- Place static files in the **public/** folder:
211
-
212
- \`\`\`
213
- src/web/public/
214
- ├── logo.svg
215
- ├── styles.css
216
- └── script.js
217
- \`\`\`
218
-
219
- Reference them in your HTML or components:
220
-
221
- \`\`\`html
222
- <!-- In index.html -->
223
- <link rel="stylesheet" href="/public/styles.css">
224
- <script src="/public/script.js"></script>
225
- \`\`\`
226
-
227
- \`\`\`typescript
228
- // In React components
229
- <img src="/public/logo.svg" alt="Logo" />
230
- \`\`\`
231
-
232
- ## Styling
233
-
234
- ### Inline Styles
235
-
236
- \`\`\`typescript
237
- <div style={{ backgroundColor: '#000', color: '#fff', padding: '1rem' }}>
238
- Styled content
239
- </div>
240
- \`\`\`
241
-
242
- ### CSS Files
243
-
244
- Create \`public/styles.css\`:
245
-
246
- \`\`\`css
247
- body {
248
- background-color: #09090b;
249
- color: #fff;
250
- font-family: sans-serif;
251
- }
252
- \`\`\`
253
-
254
- Import in \`index.html\`:
255
-
256
- \`\`\`html
257
- <link rel="stylesheet" href="/public/styles.css">
258
- \`\`\`
259
-
260
- ### Style Tag in Component
261
-
262
- \`\`\`typescript
263
- <div>
264
- <button className="glow-btn">Click me</button>
265
- <style>{\`
266
- .glow-btn {
267
- background: linear-gradient(to right, #155e75, #3b82f6);
268
- border: none;
269
- padding: 0.75rem 1.5rem;
270
- color: white;
271
- cursor: pointer;
272
- }
273
- \`}</style>
274
- </div>
275
- \`\`\`
276
-
277
- ## Best Practices
278
-
279
- - Wrap your app with **AgentuityProvider** for hooks to work
280
- - Use **useAgent** for one-off agent calls
281
- - Use **useAgentWebsocket** for bidirectional real-time communication
282
- - Use **useAgentEventStream** for server-to-client streaming
283
- - Place reusable components in separate files
284
- - Keep static assets in the **public/** folder
285
- - Use TypeScript for type safety
286
- - Handle loading and error states in UI
287
-
288
- ## Rules
289
-
290
- - **App.tsx** must export a function named \`App\`
291
- - **frontend.tsx** must render the \`App\` component to \`#root\`
292
- - **index.html** must have a \`<div id="root"></div>\`
293
- - All agents are accessible via \`useAgent('agentName')\`
294
- - The web app is served at \`/\` by default
295
- - Static files in \`public/\` are served at \`/public/*\`
296
- - Module script tag: \`<script type="module" src="/web/frontend.tsx"></script>\`
297
- `;
22
+ /**
23
+ * Generate the web prompt with hash comment.
24
+ */
25
+ export function generateLLMPrompt() {
26
+ return appendHashComment(webPromptContent);
298
27
  }
299
28
  //# sourceMappingURL=web.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"web.js","sourceRoot":"","sources":["../../../../src/cmd/ai/prompt/web.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAElD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAErD,MAAM,CAAC,MAAM,aAAa,GAAG,gBAAgB,CAAC;IAC7C,IAAI,EAAE,KAAK;IACX,WAAW,EAAE,mEAAmE;IAChF,IAAI,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC;IAC3B,UAAU,EAAE,IAAI;IAChB,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,UAAU,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,iBAAiB,EAAE,CAAC;IACjF,KAAK,CAAC,OAAO,CAAC,IAAoB;QACjC,MAAM,MAAM,GAAG,iBAAiB,EAAE,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACrB,CAAC;CACD,CAAC,CAAC;AAEH,MAAM,UAAU,iBAAiB;IAChC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0RP,CAAC;AACF,CAAC"}
1
+ {"version":3,"file":"web.js","sourceRoot":"","sources":["../../../../src/cmd/ai/prompt/web.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAElD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAC9C,OAAO,gBAAgB,MAAM,UAAU,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAE9D,MAAM,CAAC,MAAM,aAAa,GAAG,gBAAgB,CAAC;IAC7C,IAAI,EAAE,KAAK;IACX,WAAW,EAAE,mEAAmE;IAChF,IAAI,EAAE,CAAC,WAAW,EAAE,MAAM,CAAC;IAC3B,UAAU,EAAE,IAAI;IAChB,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,UAAU,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,iBAAiB,EAAE,CAAC;IACjF,KAAK,CAAC,OAAO,CAAC,IAAoB;QACjC,MAAM,MAAM,GAAG,iBAAiB,EAAE,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACrB,CAAC;CACD,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,UAAU,gBAAgB;IAC/B,OAAO,gBAAgB,CAAC;AACzB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB;IAChC,OAAO,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;AAC5C,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare const generateSubcommand: import("../../..").SubcommandDefinition;
2
+ export default generateSubcommand;
3
+ //# sourceMappingURL=generate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../../../src/cmd/ai/skills/generate.ts"],"names":[],"mappings":"AAcA,eAAO,MAAM,kBAAkB,yCA0D7B,CAAC;AAEH,eAAe,kBAAkB,CAAC"}
@@ -0,0 +1,65 @@
1
+ import { z } from 'zod';
2
+ import { createSubcommand } from '../../../types';
3
+ import { getCommand } from '../../../command-prefix';
4
+ import { ErrorCode } from '../../../errors';
5
+ import * as tui from '../../../tui';
6
+ import * as path from 'node:path';
7
+ import { generateSkills, collectSkillsForPreview } from './generator';
8
+ const OptionsSchema = z.object({
9
+ output: z.string().describe('Output directory for generated skills'),
10
+ includeHidden: z.boolean().default(false).describe('Include hidden commands'),
11
+ });
12
+ export const generateSubcommand = createSubcommand({
13
+ name: 'generate',
14
+ description: 'Generate Agent Skills from CLI schema',
15
+ tags: ['fast'],
16
+ idempotent: true,
17
+ examples: [
18
+ {
19
+ command: getCommand('ai skills generate --output ./skills'),
20
+ description: 'Generate skills to a directory',
21
+ },
22
+ {
23
+ command: getCommand('--dry-run ai skills generate --output ./skills'),
24
+ description: 'Preview without writing files',
25
+ },
26
+ {
27
+ command: getCommand('ai skills generate --output ./skills --include-hidden'),
28
+ description: 'Include hidden commands',
29
+ },
30
+ ],
31
+ schema: {
32
+ options: OptionsSchema,
33
+ },
34
+ async handler(ctx) {
35
+ const { logger, opts, options } = ctx;
36
+ const { output, includeHidden } = opts;
37
+ const dryRun = options.dryRun === true;
38
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
39
+ const schema = global.__CLI_SCHEMA__;
40
+ if (!schema) {
41
+ return logger.fatal('Schema not available. This is a CLI bug.', ErrorCode.INTERNAL_ERROR);
42
+ }
43
+ const baseDir = path.join(output, 'skills', 'agentuity', 'cli');
44
+ if (dryRun) {
45
+ const skills = collectSkillsForPreview(schema, output, includeHidden);
46
+ if (skills.length === 0) {
47
+ logger.warn('No skills to generate');
48
+ return;
49
+ }
50
+ tui.info(`Would generate ${skills.length} skills:`);
51
+ for (const skillPath of skills) {
52
+ console.log(tui.muted(` ${skillPath}`));
53
+ }
54
+ return;
55
+ }
56
+ const created = await generateSkills(schema, output, includeHidden);
57
+ if (created === 0) {
58
+ logger.warn('No skills to generate');
59
+ return;
60
+ }
61
+ tui.success(`Generated ${created} skills to ${baseDir}`);
62
+ },
63
+ });
64
+ export default generateSubcommand;
65
+ //# sourceMappingURL=generate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../../src/cmd/ai/skills/generate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { CLISchema } from '../../../schema-generator';
2
+ export declare function collectSkillsForPreview(schema: CLISchema, outputDir: string, includeHidden: boolean): string[];
3
+ export declare function generateSkills(schema: CLISchema, outputDir: string, includeHidden: boolean): Promise<number>;
4
+ //# sourceMappingURL=generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../../../src/cmd/ai/skills/generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,SAAS,EAIT,MAAM,2BAA2B,CAAC;AAydnC,wBAAgB,uBAAuB,CACtC,MAAM,EAAE,SAAS,EACjB,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,OAAO,GACpB,MAAM,EAAE,CAGV;AAED,wBAAsB,cAAc,CACnC,MAAM,EAAE,SAAS,EACjB,SAAS,EAAE,MAAM,EACjB,aAAa,EAAE,OAAO,GACpB,OAAO,CAAC,MAAM,CAAC,CA2BjB"}