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.
- package/bin/index.mjs +1 -1
- package/package.json +1 -1
- package/templates/vite/.howone/skills/howone/01-architect/01-app-generation.md +19 -16
- package/templates/vite/.howone/skills/howone/03-ai-capabilities/01-ai-capability-architecture.md +14 -24
- package/templates/vite/.howone/skills/howone/03-ai-capabilities/02-workflow-contract-rules.md +0 -107
- package/templates/vite/.howone/skills/howone/03-ai-capabilities/03-service-capability-catalog.md +26 -101
- package/templates/vite/.howone/skills/howone/03-ai-capabilities/04-workflow-operations.md +23 -17
- package/templates/vite/.howone/skills/howone/03-ai-capabilities/05-ai-feature-playbooks.md +1 -66
- package/templates/vite/.howone/skills/howone/SKILL.md +5 -4
- package/templates/vite/.howone/skills/design-taste-frontend/SKILL.md +0 -1206
- package/templates/vite/.howone/skills/web-clone/LICENSE +0 -21
- package/templates/vite/.howone/skills/web-clone/README.md +0 -179
- package/templates/vite/.howone/skills/web-clone/SKILL.md +0 -243
- package/templates/vite/.howone/skills/web-clone/references/assessment.md +0 -77
- package/templates/vite/.howone/skills/web-clone/references/complex-playbooks.md +0 -46
- package/templates/vite/.howone/skills/web-clone/references/deliverables.md +0 -144
- package/templates/vite/.howone/skills/web-clone/references/design-dna.md +0 -125
- package/templates/vite/.howone/skills/web-clone/references/effect-extraction.md +0 -73
- package/templates/vite/.howone/skills/web-clone/references/marbles-case.md +0 -31
- package/templates/vite/.howone/skills/web-clone/references/reverse-engineering.md +0 -34
- package/templates/vite/.howone/skills/web-clone/references/static-mirror.md +0 -72
- package/templates/vite/.howone/skills/web-clone/scripts/asset-harvest.mjs +0 -101
- package/templates/vite/.howone/skills/web-clone/scripts/audit-clone.mjs +0 -151
- package/templates/vite/.howone/skills/web-clone/scripts/compare-recon.mjs +0 -265
- package/templates/vite/.howone/skills/web-clone/scripts/dna-scaffold.mjs +0 -214
- package/templates/vite/.howone/skills/web-clone/scripts/init-clone.mjs +0 -136
- package/templates/vite/.howone/skills/web-clone/scripts/interaction-probe.mjs +0 -314
- package/templates/vite/.howone/skills/web-clone/scripts/lib/playwright-loader.mjs +0 -39
- package/templates/vite/.howone/skills/web-clone/scripts/mirror-site.mjs +0 -121
- package/templates/vite/.howone/skills/web-clone/scripts/network-capture.mjs +0 -127
- package/templates/vite/.howone/skills/web-clone/scripts/recon-site.mjs +0 -235
- package/templates/vite/.howone/skills/web-clone/scripts/route-crawl.mjs +0 -228
- package/templates/vite/.howone/skills/web-clone/scripts/sourcemap-hunt.mjs +0 -112
- 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 ??
|
|
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
|
@@ -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
|
|
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
|
-
|
|
|
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.
|
|
29
|
-
|
|
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
|
-
###
|
|
44
|
+
### Explicit user-owned integration (not platform gap)
|
|
46
45
|
|
|
47
|
-
|
|
48
|
-
|
|
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.
|
|
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;
|
|
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
|
|
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.
|
|
153
|
-
5.
|
|
154
|
-
6.
|
|
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;
|
|
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
|
package/templates/vite/.howone/skills/howone/03-ai-capabilities/01-ai-capability-architecture.md
CHANGED
|
@@ -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
|
|
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.
|
|
66
|
-
10.
|
|
67
|
-
11.
|
|
68
|
-
12. If
|
|
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
|
-
|
|
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
|
|
112
|
-
|
|
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
|
-
-
|
|
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
|
-
-
|
|
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.
|
package/templates/vite/.howone/skills/howone/03-ai-capabilities/02-workflow-contract-rules.md
CHANGED
|
@@ -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.
|
package/templates/vite/.howone/skills/howone/03-ai-capabilities/03-service-capability-catalog.md
CHANGED
|
@@ -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
|
-
|
|
7
|
-
|
|
8
|
-
|
|
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
|
|
34
|
-
|
|
|
35
|
-
|
|
|
36
|
-
|
|
|
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
|
-
|
|
|
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
|
|
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
|
|
143
|
+
## Video Editing
|
|
196
144
|
|
|
197
|
-
Use
|
|
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
|
-
-
|
|
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
|
-
##
|
|
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
|
|
180
|
+
- For dialogue, generate each speaker line and merge audio.
|
|
235
181
|
- `audio_hint` should describe voice in English.
|
|
236
182
|
|
|
237
|
-
##
|
|
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
|
|
246
|
+
## File Storage
|
|
319
247
|
|
|
320
|
-
Use when
|
|
248
|
+
Use when workflow needs to save generated content into a file.
|
|
321
249
|
|
|
322
250
|
Inputs:
|
|
323
251
|
|
|
324
|
-
- `file_type`: `
|
|
325
|
-
- `
|
|
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
|
-
-
|
|
335
|
-
- Do not use file
|
|
336
|
-
- If app needs records/history, persist file
|
|
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
|
|
345
|
-
| Dialogue audio | generate each speaker line,
|
|
346
|
-
|
|
|
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
|
-
|
|
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
|
|
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.
|
|
81
|
-
tool
|
|
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
|
|
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.
|