howone 0.2.0 → 0.2.2

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 (34) hide show
  1. package/bin/index.mjs +1 -1
  2. package/package.json +1 -1
  3. package/templates/vite/.howone/skills/howone/01-architect/01-app-generation.md +19 -16
  4. package/templates/vite/.howone/skills/howone/03-ai-capabilities/01-ai-capability-architecture.md +14 -24
  5. package/templates/vite/.howone/skills/howone/03-ai-capabilities/02-workflow-contract-rules.md +0 -107
  6. package/templates/vite/.howone/skills/howone/03-ai-capabilities/03-service-capability-catalog.md +26 -101
  7. package/templates/vite/.howone/skills/howone/03-ai-capabilities/04-workflow-operations.md +23 -17
  8. package/templates/vite/.howone/skills/howone/03-ai-capabilities/05-ai-feature-playbooks.md +1 -66
  9. package/templates/vite/.howone/skills/howone/SKILL.md +5 -4
  10. package/templates/vite/.howone/skills/design-taste-frontend/SKILL.md +0 -1206
  11. package/templates/vite/.howone/skills/web-clone/LICENSE +0 -21
  12. package/templates/vite/.howone/skills/web-clone/README.md +0 -179
  13. package/templates/vite/.howone/skills/web-clone/SKILL.md +0 -243
  14. package/templates/vite/.howone/skills/web-clone/references/assessment.md +0 -77
  15. package/templates/vite/.howone/skills/web-clone/references/complex-playbooks.md +0 -46
  16. package/templates/vite/.howone/skills/web-clone/references/deliverables.md +0 -144
  17. package/templates/vite/.howone/skills/web-clone/references/design-dna.md +0 -125
  18. package/templates/vite/.howone/skills/web-clone/references/effect-extraction.md +0 -73
  19. package/templates/vite/.howone/skills/web-clone/references/marbles-case.md +0 -31
  20. package/templates/vite/.howone/skills/web-clone/references/reverse-engineering.md +0 -34
  21. package/templates/vite/.howone/skills/web-clone/references/static-mirror.md +0 -72
  22. package/templates/vite/.howone/skills/web-clone/scripts/asset-harvest.mjs +0 -101
  23. package/templates/vite/.howone/skills/web-clone/scripts/audit-clone.mjs +0 -151
  24. package/templates/vite/.howone/skills/web-clone/scripts/compare-recon.mjs +0 -265
  25. package/templates/vite/.howone/skills/web-clone/scripts/dna-scaffold.mjs +0 -214
  26. package/templates/vite/.howone/skills/web-clone/scripts/init-clone.mjs +0 -136
  27. package/templates/vite/.howone/skills/web-clone/scripts/interaction-probe.mjs +0 -314
  28. package/templates/vite/.howone/skills/web-clone/scripts/lib/playwright-loader.mjs +0 -39
  29. package/templates/vite/.howone/skills/web-clone/scripts/mirror-site.mjs +0 -121
  30. package/templates/vite/.howone/skills/web-clone/scripts/network-capture.mjs +0 -127
  31. package/templates/vite/.howone/skills/web-clone/scripts/recon-site.mjs +0 -235
  32. package/templates/vite/.howone/skills/web-clone/scripts/route-crawl.mjs +0 -228
  33. package/templates/vite/.howone/skills/web-clone/scripts/sourcemap-hunt.mjs +0 -112
  34. package/templates/vite/.howone/skills/web-clone/scripts/visual-diff.mjs +0 -161
package/bin/index.mjs CHANGED
@@ -359,7 +359,7 @@ async function readCapabilityRunInput(options) {
359
359
  }
360
360
  }
361
361
  function resolveHowoneApiUrl(options) {
362
- return (options.apiUrl ?? process.env.HOWONE_API_URL ?? process.env.NEXT_PUBLIC_SERVER_URL ?? "https://howone.dev").replace(/\/+$/, "");
362
+ return (options.apiUrl ?? "https://howone.dev").replace(/\/+$/, "");
363
363
  }
364
364
  function resolveHowoneApiToken(options) {
365
365
  return options.token ?? process.env.HOWONE_API_TOKEN ?? process.env.HOWONE_AGENT_TOKEN;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "howone",
3
- "version": "0.2.0",
3
+ "version": "0.2.2",
4
4
  "private": false,
5
5
  "description": "HowOne command line tools for creating app templates.",
6
6
  "type": "module",
@@ -4,7 +4,7 @@ Read immediately after `skill(name="howone")` and before platform design tools,
4
4
  edits, or implementation guesses.
5
5
 
6
6
  HowOne is a generated app platform. This file classifies **user scope**, separates **platform
7
- contracts** from **app-owned integrations**, and routes to backend, AI, or SDK tracks. Keep design
7
+ contracts** from explicit user-owned integrations, and routes to backend, AI, or SDK tracks. Keep design
8
8
  tracks separate: backend design does not require SDK references; AI design does not require SDK
9
9
  references until the synced AI manifest is ready for code.
10
10
 
@@ -19,15 +19,14 @@ Map the user request to surfaces. Include only what they need.
19
19
  | HowOne AI features | `03-ai-capabilities/` → sync → external workflow | Verify catalog before design |
20
20
  | SDK wiring, auth, UI calls | `04-app-sdk/` | Only after manifests exist when contracts apply |
21
21
  | UI only, no HowOne data/AI | App code under `{appRoot}` | No schema/AI design tools |
22
- | External systems the user provides | App code + config | Not platform contracts unless combined with rows above |
22
+ | Explicit user-owned integrations | App code + config | Only when the user explicitly asks to connect something outside HowOne |
23
23
 
24
24
  **Mixed scope:** read at least one file per touched track (`SKILL.md` index) before writing.
25
25
 
26
26
  ## HowOne platform boundary
27
27
 
28
- Use this decision model for **any** user request. Do not maintain a mental deny-list of technologies
29
- (K8s, message buses, custom protocols, etc.). Ask whether the ask is a **platform contract surface**
30
- or **app-owned**.
28
+ Use this decision model for **any** user request. Ask whether the ask is a **platform contract
29
+ surface** or an explicit user-owned integration.
31
30
 
32
31
  ### Platform provides (evidence required)
33
32
 
@@ -42,15 +41,17 @@ If none of these surfaces can express the user's **platform** requirement after
42
41
  catalog, and tool schemas, it is a **platform gap**—not an automatic ban on whatever technology the
43
42
  user named.
44
43
 
45
- ### App-owned (not platform gap)
44
+ ### Explicit user-owned integration (not platform gap)
46
45
 
47
- Anything the user runs, hosts, or buys **outside** HowOne contracts: orchestration, clusters,
48
- custom APIs, message systems, identity products, analytics, payment gateways, etc.
46
+ Use this path only when the user explicitly asks to connect something they run, host, or configure
47
+ outside HowOne contracts. Do not apply it to ordinary generated app requests such as "AI image
48
+ generation app", "AI story app", "login", "cloud sync", or "history"; first check the HowOne
49
+ platform tracks.
49
50
 
50
51
  - Implement in application code and configuration under `{appRoot}`.
51
52
  - **Do not refuse** because HowOne does not provision it.
52
53
  - **Do not** call platform design tools to fake it as entities, AI capabilities, or manifest fields.
53
- - **Do not** tell the user they cannot use their own stack—only clarify it is outside HowOne platform scope.
54
+ - **Do not** tell the user they cannot use their own stack—only clarify it is outside HowOne platform scope when they explicitly asked for that stack.
54
55
 
55
56
  ### Boundary decision (always)
56
57
 
@@ -58,9 +59,9 @@ custom APIs, message systems, identity products, analytics, payment gateways, et
58
59
  1. What did the user ask for?
59
60
  2. Does it require HowOne persisted data? → entity-schema path or skip
60
61
  3. Does it require HowOne AI? → catalog + ai-capabilities path or skip
61
- 4. Is it only their external infrastructure? → app-owned; wire in UI/config
62
+ 4. Did they explicitly ask to connect something outside HowOne? → app-owned; wire in UI/config
62
63
  5. Did they ask for a platform feature with no contract evidence? → platform stop (generic)
63
- 6. Mixed? → platform parts via tracks; app-owned parts in app code
64
+ 6. Mixed? → platform parts via tracks; explicit integrations in app code
64
65
  ```
65
66
 
66
67
  ### Platform scope rules
@@ -69,7 +70,8 @@ custom APIs, message systems, identity products, analytics, payment gateways, et
69
70
  - **No invalid shortcuts:** Do not handwrite `.howone/` metadata or guess version/workflow identifiers.
70
71
  - **Stop wording:** Name the **missing contract surface** (e.g. no catalog family, no manifest binding, no tool operation)—not the user's technology choice.
71
72
 
72
- When stopping a platform path, separate what HowOne can provide from what remains possible via app-owned integration.
73
+ When stopping a platform path, separate what HowOne can provide from any explicit integration the
74
+ user requested.
73
75
 
74
76
  Inspect-only platform reads do not replace this file before the first **design write**.
75
77
 
@@ -149,9 +151,10 @@ without default) need explicit user alignment before applying the final patch.
149
151
  1. Read architecture + **catalog** (feasibility) + contract rules; use playbooks when they match.
150
152
  2. Apply one complete capability patch → `sync_ai_artifacts`.
151
153
  3. External workflow create/update per workflow-operations reference; keep job/request IDs from tool results.
152
- 4. Read `{appRoot}/.howone/ai/manifest.json`.
153
- 5. Stop AI design. Read SDK references only if implementing app calls.
154
- 6. If persistence required: entity workflow after output contract is fixed.
154
+ 4. Wait for the terminal result. A successful update promotes its new workflow ID in the backend capability version.
155
+ 5. Run `sync_ai_artifacts` again, then read `{appRoot}/.howone/ai/manifest.json`.
156
+ 6. Stop AI design. Read SDK references only if implementing app calls.
157
+ 7. If persistence required: entity workflow after output contract is fixed.
155
158
 
156
159
  Do not fake catalog-backed AI. Platform gap → stop AI design path, explain generically.
157
160
  No AI capability dry-run step. Design the contract from the skill references, then apply the final
@@ -169,7 +172,7 @@ capability patch.
169
172
 
170
173
  ## Checklist before implementation
171
174
 
172
- - [ ] Scope explicit: which tracks apply; app-owned vs platform clear
175
+ - [ ] Scope explicit: which tracks apply; explicit integration vs platform clear
173
176
  - [ ] Data and auth posture chosen when data in scope
174
177
  - [ ] AI requirements verified against catalog when AI in scope
175
178
  - [ ] Manifests synced before SDK codegen
@@ -10,14 +10,6 @@ belongs?** For schema details read `02-workflow-contract-rules.md`. For workflow
10
10
 
11
11
  ## Platform Mental Model
12
12
 
13
- HowOne workflow-service AI is a bounded catalog, not a general automation runtime. Before designing
14
- an AI contract, verify the requested behavior matches the supported action families in
15
- `03-service-capability-catalog.md`.
16
-
17
- Streaming is not supported for AI workflow capability design. Do not design streaming execution,
18
- streaming partial results, realtime tokens, or stream-based workflow contracts. Use non-streaming
19
- status/result UI in app code when progress feedback is needed.
20
-
21
13
  HowOne AI has five distinct layers:
22
14
 
23
15
  | Layer | Owns | Does not own |
@@ -43,7 +35,8 @@ user request = intent
43
35
  agent AI contract proposal = draft
44
36
  applied AI capability version = validated contract
45
37
  .howone/ai/manifest.json = local synced source for workflow submit and later SDK codegen
46
- external-ai-capability result = job/task/config mapping and possible manifest workflowId update
38
+ external-ai-capability submission = job/task/config mapping; update IDs remain pending
39
+ terminal background finalizer = promotes successful update IDs in the backend capability version
47
40
  SDK/UI implementation = separate app-sdk track after AI design is complete
48
41
  entity schema = persistence contract, separate from AI contract
49
42
  ```
@@ -62,10 +55,11 @@ Use this flow for new AI features:
62
55
  6. Sync `.howone/ai/manifest.json`.
63
56
  7. Submit workflow create/update through `external-ai-capability` from the synced manifest.
64
57
  8. Store returned job/task IDs and submitted config IDs for polling/debugging.
65
- 9. Poll status until `completed` or `failed`.
66
- 10. Re-read `.howone/ai/manifest.json`; update operations may have written fresh `workflowId` values.
67
- 11. Leave AI design. If app code must call the workflow, read the SDK track and generate bindings.
68
- 12. If output must persist, design entity schema after the output contract is fixed.
58
+ 9. Let the host poll status until `completed` or `failed`.
59
+ 10. On success, the background finalizer promotes successful update IDs in the backend capability version. Failed operations keep their previous IDs.
60
+ 11. Run `sync_ai_artifacts` again, then re-read `.howone/ai/manifest.json`.
61
+ 12. Leave AI design. If app code must call the workflow, read the SDK track and generate bindings.
62
+ 13. If output must persist, design entity schema after the output contract is fixed.
69
63
 
70
64
  Do not submit external workflow create/update from a hand-written schema. It should come from the
71
65
  synced manifest.
@@ -105,11 +99,13 @@ create:
105
99
  update:
106
100
  previous config = current manifest capability.workflowId
107
101
  new config = freshly generated UUID
108
- manifest = rewritten so capability.workflowId is the fresh UUID
102
+ submitted state = local manifest remains unchanged while EAX runs
103
+ completed state = backend capability version receives the fresh UUID
109
104
  ```
110
105
 
111
- The SDK execution binding uses the manifest `workflowId`, which is the EAX config id. After update,
112
- the new manifest `workflowId` is the only value that should be copied into `src/lib/sdk.ts`.
106
+ The SDK execution binding uses the synced manifest `workflowId`, which is the EAX config id. After
107
+ update completion, run `sync_ai_artifacts`; only the newly synced manifest value should be copied
108
+ into `src/lib/sdk.ts`.
113
109
  Do not invent IDs; let the AI design/sync/external workflow tools generate and persist them.
114
110
 
115
111
  ## Workflow Count Rule
@@ -137,19 +133,15 @@ Workflow may do:
137
133
 
138
134
  - generate, summarize, translate, classify, extract;
139
135
  - search/crawl and synthesize;
140
- - fetch RSS feeds by RSS URL;
141
- - generate/edit/analyze images;
142
- - generate video, concatenate videos, and extract first/last video frames;
143
- - generate TTS audio, transcribe speech, and concatenate audio files;
136
+ - generate/edit/analyze images, video, and audio;
144
137
  - retrieve financial or academic data;
145
- - create or modify supported files: text, PDF, DOCX, PPTX, and XLSX.
138
+ - save/read generated files through URL-based storage.
146
139
 
147
140
  Workflow must not do:
148
141
 
149
142
  - database create/read/update/delete;
150
143
  - authentication/session logic;
151
144
  - file upload from browser raw bytes;
152
- - streaming output or realtime event delivery;
153
145
  - payment processing;
154
146
  - owner assignment or permissions;
155
147
  - app navigation, UI state, toast, or modal logic.
@@ -176,7 +168,6 @@ Do not:
176
168
  - hide the unsupported part;
177
169
  - build a UI that pretends the workflow exists;
178
170
  - replace the requested capability with a different one without saying so;
179
- - imply streaming/realtime AI behavior is available;
180
171
  - assume private APIs, external datasets, or providers that are not listed.
181
172
 
182
173
  Correct response:
@@ -213,7 +204,6 @@ The description can be human readable. The ID must be stable for codegen.
213
204
  Before editing files:
214
205
 
215
206
  - Feature maps to available workflow capabilities.
216
- - Streaming/realtime output is not required.
217
207
  - One workflow per feature unless RAG.
218
208
  - Description says what the user gets, not how tools run.
219
209
  - Input schema accepts URLs for files, not raw bytes.
@@ -41,19 +41,6 @@ service reject the request or produce a workflow the runtime cannot execute reli
41
41
  }
42
42
  ```
43
43
 
44
- ## Supported Capability Boundary
45
-
46
- Design contracts only for capability families listed in `03-service-capability-catalog.md`.
47
- Do not invent general workflow powers beyond that catalog. In particular:
48
-
49
- - streaming execution and realtime partial results are not supported;
50
- - file work is limited to creating or modifying text, PDF, DOCX, PPTX, and XLSX outputs;
51
- - video work is limited to generation, concatenation, and first/last-frame extraction;
52
- - audio work is limited to TTS, speech recognition, and concatenating audio files.
53
-
54
- If the requested behavior needs anything outside the catalog, stop the AI workflow path and explain
55
- the missing capability or ask the user to narrow the feature.
56
-
57
44
  ## Loose JSON Schema
58
45
 
59
46
  The workflow engine is agentic. Overly strict schemas reduce reliability.
@@ -244,21 +231,6 @@ Instead:
244
231
  2. app code persists through the entity runtime after SDK handoff;
245
232
  3. durable fields map to the entity contract.
246
233
 
247
- ## No Streaming Contracts
248
-
249
- HowOne AI workflow capability contracts are non-streaming. Do not add schema fields or descriptions
250
- that imply:
251
-
252
- - token streaming;
253
- - realtime audio/video processing;
254
- - incremental chunks;
255
- - event streams;
256
- - SSE/WebSocket workflow output;
257
- - live progress messages from the workflow.
258
-
259
- If the app needs progress UX, keep it app-owned: show pending/running/completed/failed states around
260
- the non-streaming workflow result.
261
-
262
234
  ## External Data Assumptions
263
235
 
264
236
  Do not require user-provided datasets unless the user said they have them.
@@ -442,84 +414,6 @@ Bad:
442
414
  }
443
415
  ```
444
416
 
445
- ### RSS feed extraction
446
-
447
- ```json
448
- {
449
- "inputSchema": {
450
- "type": "object",
451
- "properties": {
452
- "rss_url": {
453
- "type": "string",
454
- "format": "uri",
455
- "description": "RSS feed URL to fetch and parse."
456
- },
457
- "language": {
458
- "type": "string",
459
- "description": "Language for any generated summary text."
460
- }
461
- },
462
- "required": ["rss_url"]
463
- },
464
- "outputSchema": {
465
- "type": "object",
466
- "properties": {
467
- "items": {
468
- "type": "array",
469
- "description": "RSS feed items with title, URL, published date, and summary in the requested language when generated.",
470
- "items": {
471
- "type": "object",
472
- "properties": {
473
- "title": { "type": "string" },
474
- "url": { "type": "string", "format": "uri" },
475
- "published_at": { "type": "string" },
476
- "summary": { "type": "string" }
477
- }
478
- }
479
- }
480
- },
481
- "required": ["items"]
482
- }
483
- }
484
- ```
485
-
486
- ### File creation or modification
487
-
488
- ```json
489
- {
490
- "inputSchema": {
491
- "type": "object",
492
- "properties": {
493
- "file_type": {
494
- "type": "string",
495
- "description": "Target file type: txt, md, pdf, docx, pptx, or xlsx."
496
- },
497
- "content_or_instruction": {
498
- "type": "string",
499
- "description": "Content to create or instruction for modifying the source file."
500
- },
501
- "source_file_url": {
502
- "type": "string",
503
- "format": "uri",
504
- "description": "Optional URL of an existing file to modify."
505
- }
506
- },
507
- "required": ["file_type", "content_or_instruction"]
508
- },
509
- "outputSchema": {
510
- "type": "object",
511
- "properties": {
512
- "file_url": {
513
- "type": "string",
514
- "format": "uri",
515
- "description": "Public URL of the created or modified file."
516
- }
517
- },
518
- "required": ["file_url"]
519
- }
520
- }
521
- ```
522
-
523
417
  ## Contract Checklist
524
418
 
525
419
  - Required inputs are essential only.
@@ -528,7 +422,6 @@ Bad:
528
422
  - Input/output property names do not overlap.
529
423
  - Text output descriptions specify language.
530
424
  - Description says what, not how.
531
- - Contract does not imply streaming, realtime output, or event delivery.
532
425
  - No CRUD/auth/upload/payment/app-state requirements.
533
426
  - Feature fits an available capability.
534
427
  - Schema is raw valid JSON.
@@ -3,41 +3,29 @@
3
3
  Use this reference **only** for HowOne **workflow-service AI** feasibility. It lists what the current
4
4
  workflow service supports—not everything a full product may use.
5
5
 
6
- Infrastructure or products the user operates themselves (clusters, custom servers, third-party
7
- APIs, etc.) are **app-owned** per `01-architect/01-app-generation.md`. They are out of scope for
8
- this catalog and must not be rejected as "AI not supported" when the user only needs to connect to them in app code.
6
+ Explicit user-owned integrations are outside this catalog per
7
+ `01-architect/01-app-generation.md`. Use that exception only when the user explicitly asks to
8
+ connect something outside HowOne. Ordinary generated AI app requests should be checked against this
9
+ catalog first.
9
10
 
10
11
  Source: `docs/ai-capability.md`.
11
12
 
12
- ## Global Boundaries
13
-
14
- Streaming is not supported. Do not design token streams, realtime audio/video processing,
15
- incremental workflow chunks, SSE/WebSocket workflow output, or live workflow progress events as
16
- HowOne AI capability. Progress UI is app-owned around a non-streaming workflow result.
17
-
18
- If the requested behavior is not listed in this catalog, do not simulate it or silently approximate
19
- it. State the missing capability and offer the closest supported version only when it preserves the
20
- user's original goal.
21
-
22
13
  ## Quick Selection Table
23
14
 
24
15
  | User asks for | Use capability family | Typical inputs | Typical outputs |
25
16
  |---|---|---|---|
26
17
  | Latest info, research, source-backed answer | Web search / crawling | `topic`, `prompt`, `url`, `search_level` | `answer`, `sources`, `page_content` |
27
- | Parse posts from an RSS feed | Fetch RSS feed from RSS URL | `rss_url`, optional filters | `items`, `source_metadata` |
28
- | Generate or transform text | Text generation / transformation | `prompt`, `source_text`, `language`, format instructions | `generated_text` or structured JSON |
29
18
  | Generate artwork/photo/logo/mockup | Image generation | `image_description`, `style_preference`, optional references | `generated_image_url` |
30
19
  | Edit an image | Image editing | `source_image_url`, `edit_instruction` | `edited_image_url` |
31
20
  | OCR or visual analysis | Image analysis / OCR | `image_urls`, `analysis_prompt` | `analysis_result` or `extracted_text` |
32
21
  | Generate short video | Video generation | `video_prompt`, aspect/duration/frame URLs | `video_url` |
33
- | Join video clips | Concatenate videos | `video_urls` | `merged_video_url` |
34
- | Extract first/last frame | Extract first and last frame | `source_video_url` | `first_frame_image_url`, `last_frame_image_url` |
35
- | Text to speech | TTS / text-to-speech | `text_to_generate`, `language`, `voice_hint` | `audio_url` |
36
- | Speech to text | Speech recognition | `source_audio_url`, `language` | `transcript_text`, optional `utterances` |
37
- | Merge audio | Concatenate audio files | `audio_urls` | `merged_audio_url` |
22
+ | Join clips / extract frames | Video editing | `video_urls` or `video_url` | `video_url` or `image_url` |
23
+ | Text to speech | Audio generation | `text_to_generate`, `language`, `voice_hint` | `audio_url` |
24
+ | Speech to text | Audio recognition | `source_audio_url`, `language` | `transcript_text`, optional `utterances` |
25
+ | Merge audio | Audio merging | `audio_urls` | `merged_audio_url` |
38
26
  | Stock/index history | Financial data retrieval | `trading_symbol`, `unit`, `start`, `end` | `price_history` |
39
27
  | Literature search/citations | Academic research | `query` | `papers`, `bibtex` |
40
- | Create or modify documents/spreadsheets/slides | File creation / modification | `file_type`, `content_or_instruction`, optional `source_file_url` | `file_url` |
28
+ | Save generated file | File storage | `file_type`, `content` | `file_url` |
41
29
 
42
30
  If the requested behavior is not in this table or the detailed sections below, do not invent it.
43
31
 
@@ -65,46 +53,6 @@ Rules:
65
53
  - Do not use search as an outbound API caller.
66
54
  - Include source links in output when the product promises research.
67
55
 
68
- ## RSS Feed Fetching
69
-
70
- Use for fetching and parsing a specific RSS feed URL.
71
-
72
- Inputs:
73
-
74
- - `rss_url`: URL of the RSS feed;
75
- - optional filtering instructions, item limit, language, or summary instruction.
76
-
77
- Outputs:
78
-
79
- - feed `items` with title, URL, date, and optional summary;
80
- - source/feed metadata when useful.
81
-
82
- Rules:
83
-
84
- - Use RSS only when the user has or asks for an RSS URL.
85
- - Use web search/crawling when the user asks for general latest information without a feed URL.
86
- - Do not treat RSS fetching as arbitrary API integration.
87
-
88
- ## Text Generation And Transformation
89
-
90
- Use for writing, rewriting, summarizing, translating, classifying, extracting, and structured JSON
91
- generation when no specialized media/retrieval capability is needed.
92
-
93
- Inputs:
94
-
95
- - `prompt` or `source_text`;
96
- - optional `language`, audience, tone, format, or transformation instruction.
97
-
98
- Outputs:
99
-
100
- - generated text or structured JSON fields needed by the product.
101
-
102
- Rules:
103
-
104
- - Text outputs must specify language behavior.
105
- - Keep structured outputs minimal and product-facing.
106
- - Do not claim streaming tokens or realtime generation.
107
-
108
56
  ## Image Generation
109
57
 
110
58
  Use for new images from prompts or prompt + reference URLs.
@@ -189,12 +137,12 @@ Rules:
189
137
 
190
138
  - Keep individual clips short, generally 5-10 seconds.
191
139
  - For consistency, generate/use a first-frame image.
192
- - For longer videos, generate clips and concatenate via video composition utilities.
140
+ - For longer videos, generate clips and concatenate via video editing.
193
141
  - Audio in video works best with one speaker per clip.
194
142
 
195
- ## Video Composition Utilities
143
+ ## Video Editing
196
144
 
197
- Use only for concatenating video clips or extracting first/last frames.
145
+ Use for concatenating clips or extracting first/last frames.
198
146
 
199
147
  Inputs:
200
148
 
@@ -203,16 +151,14 @@ Inputs:
203
151
 
204
152
  Outputs:
205
153
 
206
- - concatenate: `merged_video_url`;
207
- - frame extraction: `first_frame_image_url`, `last_frame_image_url`.
154
+ - `merged_video_url` or `frame_image_url`.
208
155
 
209
156
  Rules:
210
157
 
211
158
  - Inputs must be accessible URLs.
212
159
  - Best results when clips share resolution/aspect ratio.
213
- - Do not claim arbitrary video editing beyond concatenation and first/last-frame extraction.
214
160
 
215
- ## Text To Speech
161
+ ## Audio Generation
216
162
 
217
163
  Use for text-to-speech.
218
164
 
@@ -231,10 +177,10 @@ Outputs:
231
177
  Rules:
232
178
 
233
179
  - Single speaker per call.
234
- - For dialogue, generate each speaker line and concatenate audio files.
180
+ - For dialogue, generate each speaker line and merge audio.
235
181
  - `audio_hint` should describe voice in English.
236
182
 
237
- ## Speech Recognition
183
+ ## Audio Recognition
238
184
 
239
185
  Use for speech-to-text.
240
186
 
@@ -253,24 +199,6 @@ Rules:
253
199
 
254
200
  - Audio must be URL-accessible.
255
201
  - Silent or low-quality audio can produce empty/poor transcript.
256
- - Do not promise realtime transcription or streaming captions.
257
-
258
- ## Audio Concatenation
259
-
260
- Use for joining multiple audio files in order.
261
-
262
- Inputs:
263
-
264
- - `audio_urls`: two or more accessible audio URLs.
265
-
266
- Outputs:
267
-
268
- - `merged_audio_url`.
269
-
270
- Rules:
271
-
272
- - Use this after separate TTS calls for multi-speaker dialogue.
273
- - Do not claim arbitrary audio editing beyond concatenation.
274
202
 
275
203
  ## Financial Data Retrieval
276
204
 
@@ -315,15 +243,14 @@ Rules:
315
243
  - Availability varies by academic source.
316
244
  - PDF assets should be handled as URLs.
317
245
 
318
- ## File Creation And Modification
246
+ ## File Storage
319
247
 
320
- Use when the workflow needs to create or modify supported files.
248
+ Use when workflow needs to save generated content into a file.
321
249
 
322
250
  Inputs:
323
251
 
324
- - `file_type`: `txt`, `md`, `pdf`, `docx`, `pptx`, or `xlsx`;
325
- - `content_or_instruction`: content to create or instruction for modification;
326
- - optional `source_file_url`: URL of an existing file to modify.
252
+ - `file_type`: `json`, `yaml`, `csv`, `pdf`, `md`, or `txt`;
253
+ - `content`: string content to save.
327
254
 
328
255
  Outputs:
329
256
 
@@ -331,20 +258,18 @@ Outputs:
331
258
 
332
259
  Rules:
333
260
 
334
- - Supported file work is create/modify only for text, PDF, DOCX, PPTX, and XLSX.
335
- - Do not use file output as a database.
336
- - If app needs records/history, persist file URLs through entities.
337
- - Do not claim arbitrary binary editing, ZIP manipulation, or filesystem access.
261
+ - Structured content must be serialized to string before saving.
262
+ - Do not use file storage as a database.
263
+ - If app needs records/history, persist file URL through entities.
338
264
 
339
265
  ## Composition Patterns
340
266
 
341
267
  | Pattern | Workflow design |
342
268
  |---|---|
343
269
  | Image -> Video | generate first-frame image, pass as `first_frame_url` to video generation |
344
- | Multi-clip video | generate short clips, concatenate via video composition utilities |
345
- | Dialogue audio | generate each speaker line, concatenate audio files |
346
- | RSS -> Digest | fetch RSS feed, synthesize a digest, optionally create a supported file |
347
- | Search -> Report | web search/crawl, synthesize structured report, optionally create a supported file |
270
+ | Multi-clip video | generate short clips, concatenate via video editing |
271
+ | Dialogue audio | generate each speaker line, merge audio |
272
+ | Search -> Report | web search/crawl, synthesize structured report, optionally save file |
348
273
  | Video -> Image edit -> Video | extract frame, edit frame, use as next reference |
349
274
  | RAG document chat | indexing workflow + query workflow |
350
275
 
@@ -3,22 +3,19 @@
3
3
  Use this reference when submitting HowOne external AI workflow create/update operations through
4
4
  `external-ai-capability`. This is an AI workflow design reference, not an app SDK guide.
5
5
 
6
- Workflow create/update/status operations are asynchronous control-plane operations. They are not
7
- runtime streaming support. Do not use job polling, task IDs, SSE, or background status as evidence
8
- that a user-facing AI workflow can stream partial results.
9
-
10
6
  ## Current Tool Contract
11
7
 
12
8
  Do not hand-build raw workflow HTTP requests in generated app work. Use `external-ai-capability`
13
9
  after `.howone/ai/manifest.json` has been synced.
14
10
 
15
- The tool performs:
11
+ The foreground tool performs:
16
12
 
17
13
  ```text
18
14
  POST /workflows
19
- GET /jobs/{job_id}
20
15
  ```
21
16
 
17
+ The host-owned background poller performs `GET /jobs/{job_id}` and finalizes successful bindings.
18
+
22
19
  The tool reads the synced manifest and submits operations for selected capabilities.
23
20
 
24
21
  ## Create
@@ -69,16 +66,21 @@ Tool behavior:
69
66
 
70
67
  ```text
71
68
  previous config = current manifest capability.workflowId
72
- new config = freshly generated UUID
69
+ new config = freshly generated UUID sent as config_id
73
70
  mode = update
74
- manifest = rewritten so capability.workflowId is the fresh UUID
71
+ original_config_id = previous config sent to EAX
72
+ workflow code = regenerated by EAX from the current capability contract and updatePrompt
73
+ submitted state = local manifest remains unchanged while EAX runs
74
+ completed state = backend capability version receives the fresh UUID
75
75
  ```
76
76
 
77
- After update, re-read `.howone/ai/manifest.json`. The new manifest `workflowId` is the value used by
78
- SDK bindings and future execution.
77
+ After a completed update, run `sync_ai_artifacts` and then re-read `.howone/ai/manifest.json`. The
78
+ newly synced `workflowId` is the value used by SDK bindings and future execution. Failed operations
79
+ keep their previous backend and local manifest bindings.
79
80
 
80
- Do not pass stale `workflowConfigID` values from old docs or older status payloads. The current
81
- tool owns config rotation and manifest write-back.
81
+ Do not pass stale `workflowConfigID` values from old docs or older status payloads. Agents should
82
+ not pass `original_config_id` directly either; the current tool derives it from the manifest and
83
+ owns config rotation; the background finalizer owns backend binding promotion.
82
84
 
83
85
  ## Selection Rules
84
86
 
@@ -106,9 +108,6 @@ Terminal result meaning:
106
108
  | `completed` | workflow operation completed |
107
109
  | `failed` / `canceled` / `timed_out` | report error and do not pretend workflow is ready |
108
110
 
109
- For generated apps, progress UI is app-owned and should model non-streaming states such as
110
- pending/running/completed/failed around the final workflow result.
111
-
112
111
  ## Standard Flow
113
112
 
114
113
  New AI feature:
@@ -117,6 +116,8 @@ New AI feature:
117
116
  ai-capability-design apply_capability_patch
118
117
  sync_ai_artifacts
119
118
  external-ai-capability { cwd, capabilityNames }
119
+ wait for terminal result
120
+ sync_ai_artifacts
120
121
  read .howone/ai/manifest.json
121
122
  ```
122
123
 
@@ -126,6 +127,8 @@ Schema-changing AI update:
126
127
  ai-capability-design apply_capability_patch
127
128
  sync_ai_artifacts
128
129
  external-ai-capability { cwd, updates: [{ capabilityName, updatePrompt }] }
130
+ wait for terminal result
131
+ sync_ai_artifacts
129
132
  read .howone/ai/manifest.json
130
133
  ```
131
134
 
@@ -133,7 +136,10 @@ Behavior-only update:
133
136
 
134
137
  ```text
135
138
  external-ai-capability { cwd, updates: [{ capabilityName, updatePrompt }] }
139
+ wait for terminal result
140
+ sync_ai_artifacts
136
141
  read .howone/ai/manifest.json
142
+ update SDK workflowId bindings from the newly synced manifest
137
143
  ```
138
144
 
139
145
  SDK/code work happens after these steps and belongs to the SDK track.
@@ -144,6 +150,6 @@ SDK/code work happens after these steps and belongs to the SDK track.
144
150
  - Create uses the existing manifest `workflowId`.
145
151
  - Update lets the tool generate a fresh config UUID.
146
152
  - Update has a concrete `updatePrompt`.
147
- - The manifest is re-read after update.
153
+ - The backend capability version is finalized before local artifacts are synced again.
154
+ - The manifest is re-read only after the post-completion sync.
148
155
  - SDK bindings are copied from manifest, not from memory or old status IDs.
149
- - Status polling is not streaming workflow output.