howone 0.1.53 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. package/bin/index.mjs +362 -5
  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/web-clone/LICENSE +0 -21
  11. package/templates/vite/.howone/skills/web-clone/README.md +0 -179
  12. package/templates/vite/.howone/skills/web-clone/SKILL.md +0 -243
  13. package/templates/vite/.howone/skills/web-clone/references/assessment.md +0 -77
  14. package/templates/vite/.howone/skills/web-clone/references/complex-playbooks.md +0 -46
  15. package/templates/vite/.howone/skills/web-clone/references/deliverables.md +0 -144
  16. package/templates/vite/.howone/skills/web-clone/references/design-dna.md +0 -125
  17. package/templates/vite/.howone/skills/web-clone/references/effect-extraction.md +0 -73
  18. package/templates/vite/.howone/skills/web-clone/references/marbles-case.md +0 -31
  19. package/templates/vite/.howone/skills/web-clone/references/reverse-engineering.md +0 -34
  20. package/templates/vite/.howone/skills/web-clone/references/static-mirror.md +0 -72
  21. package/templates/vite/.howone/skills/web-clone/scripts/asset-harvest.mjs +0 -101
  22. package/templates/vite/.howone/skills/web-clone/scripts/audit-clone.mjs +0 -151
  23. package/templates/vite/.howone/skills/web-clone/scripts/compare-recon.mjs +0 -265
  24. package/templates/vite/.howone/skills/web-clone/scripts/dna-scaffold.mjs +0 -214
  25. package/templates/vite/.howone/skills/web-clone/scripts/init-clone.mjs +0 -136
  26. package/templates/vite/.howone/skills/web-clone/scripts/interaction-probe.mjs +0 -314
  27. package/templates/vite/.howone/skills/web-clone/scripts/lib/playwright-loader.mjs +0 -39
  28. package/templates/vite/.howone/skills/web-clone/scripts/mirror-site.mjs +0 -121
  29. package/templates/vite/.howone/skills/web-clone/scripts/network-capture.mjs +0 -127
  30. package/templates/vite/.howone/skills/web-clone/scripts/recon-site.mjs +0 -235
  31. package/templates/vite/.howone/skills/web-clone/scripts/route-crawl.mjs +0 -228
  32. package/templates/vite/.howone/skills/web-clone/scripts/sourcemap-hunt.mjs +0 -112
  33. package/templates/vite/.howone/skills/web-clone/scripts/visual-diff.mjs +0 -161
@@ -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.
@@ -138,30 +138,6 @@ Rules:
138
138
  - output descriptions must specify language;
139
139
  - if user asks for latest/current, this workflow must retrieve data internally.
140
140
 
141
- ## Playbook: RSS Digest
142
-
143
- Use when the user provides or asks for a specific RSS feed URL and wants feed items, summaries, or
144
- a digest.
145
-
146
- Inputs:
147
-
148
- - `rss_url`;
149
- - optional `item_limit`;
150
- - optional `language`;
151
- - optional `summary_instruction`.
152
-
153
- Outputs:
154
-
155
- - `items` with title, URL, published date, and optional summary;
156
- - optional `digest` when the product needs a synthesized overview.
157
-
158
- Rules:
159
-
160
- - use RSS feed fetching only for explicit RSS URLs;
161
- - use web search/crawling for general latest news without an RSS URL;
162
- - do not treat RSS as arbitrary third-party API integration;
163
- - if users need saved feed history, persist items or digests through entities.
164
-
165
141
  ## Playbook: Stock Analysis
166
142
 
167
143
  Use for historical price analysis.
@@ -245,7 +221,7 @@ Output:
245
221
  Rules:
246
222
 
247
223
  - single speaker per call;
248
- - dialogue should generate multiple clips and concatenate audio files;
224
+ - dialogue should generate multiple clips and merge;
249
225
  - persist audio URL through entity if user needs library/history.
250
226
 
251
227
  ## Playbook: Video Generator
@@ -269,46 +245,6 @@ Rules:
269
245
  - for longer output, compose multiple clips and concatenate;
270
246
  - first-frame image helps consistency.
271
247
 
272
- ## Playbook: Video Frame Utility
273
-
274
- Use when the product needs a first frame and last frame from a video URL.
275
-
276
- Inputs:
277
-
278
- - `source_video_url`.
279
-
280
- Outputs:
281
-
282
- - `first_frame_image_url`;
283
- - `last_frame_image_url`.
284
-
285
- Rules:
286
-
287
- - use this only for first/last-frame extraction;
288
- - do not promise arbitrary frame-by-frame analysis or video editing;
289
- - persist extracted image URLs through entities if the app needs history.
290
-
291
- ## Playbook: File Creator / Modifier
292
-
293
- Use when the product needs to create or modify a supported file: text, PDF, DOCX, PPTX, or XLSX.
294
-
295
- Inputs:
296
-
297
- - `file_type`: txt, md, pdf, docx, pptx, or xlsx;
298
- - `content_or_instruction`;
299
- - optional `source_file_url` for modification.
300
-
301
- Output:
302
-
303
- - `file_url`.
304
-
305
- Rules:
306
-
307
- - create/modify supported file types only;
308
- - app uploads source files first and passes URLs;
309
- - do not use generated files as a database;
310
- - persist file URLs through entities if users need history, folders, sharing, or review.
311
-
312
248
  ## RAG Playbook
313
249
 
314
250
  Use only when app needs question answering over user/project documents.
@@ -334,7 +270,6 @@ Rules:
334
270
  - Verify capability exists in `03-service-capability-catalog.md`.
335
271
  - Use URL inputs for files/media.
336
272
  - Keep outputs minimal and product-facing.
337
- - Do not design streaming/realtime AI output.
338
273
  - Decide persistence separately.
339
274
  - Generate SDK bindings only after manifest sync and external workflow submit.
340
275
  - Use app-owned UI for progress/errors.
@@ -17,7 +17,7 @@ Load only the track needed for the user's request. Do not read SDK files while d
17
17
 
18
18
  Use this skill before work when any condition is true:
19
19
 
20
- - You need to decide whether HowOne can satisfy the user's request, whether it is app-owned, or whether the request needs clarification before handoff.
20
+ - You need to decide whether HowOne can satisfy the user's request, whether an explicit user-owned integration is outside platform contracts, or whether the request needs clarification before handoff.
21
21
  - The user asks for persisted app data, backend schema, entity fields, access, indexes, public pages, private history, or Mongo-backed records.
22
22
  - The user asks for HowOne AI behavior, capability contracts, workflow generation/update/status, or `external-ai`.
23
23
  - The work reads or writes `.howone/database/*`, `.howone/ai/*`, `src/lib/sdk.ts`, or app code using `@howone/sdk` / `howone.*`.
@@ -37,7 +37,7 @@ Classify the request before tool writes:
37
37
  | Add/change HowOne AI behavior | AI | `ai-capability-design`, `sync_ai_artifacts`, `external-ai-capability`, `03-ai-capabilities/*` |
38
38
  | Call HowOne from generated app code | SDK | `src/lib/sdk.ts`, synced manifests, `04-app-sdk/*` |
39
39
  | UI only, no HowOne data or AI | None | edit app code only |
40
- | User-owned external services | App-owned | integrate in app code/config; do not fake platform contracts |
40
+ | Explicit user-owned integrations | App-owned | only when the user explicitly asks to connect something outside HowOne; do not reclassify ordinary AI/data/auth app requests |
41
41
 
42
42
  If multiple tracks apply, process them in dependency order:
43
43
 
@@ -72,7 +72,8 @@ get_current_schema -> apply_schema_patch -> sync_schema_artifacts -> read .howon
72
72
  AI contract:
73
73
 
74
74
  ```text
75
- get_current_ai_capabilities -> apply_capability_patch -> sync_ai_artifacts -> external-ai-capability -> read .howone/ai/manifest.json
75
+ get_current_ai_capabilities -> apply_capability_patch -> sync_ai_artifacts -> external-ai-capability
76
+ -> wait for terminal result -> sync_ai_artifacts -> read .howone/ai/manifest.json
76
77
  ```
77
78
 
78
79
  No contract dry-run step. Normal generation applies one well-formed patch directly. For destructive,
@@ -144,5 +145,5 @@ read synced manifests -> update src/lib/sdk.ts -> implement UI/server code using
144
145
  - Backend and AI design references must not include SDK implementation work.
145
146
  - SDK references must not invent backend or AI contracts; they consume synced manifests.
146
147
  - AI workflows must not perform database CRUD; persistence is app code through entities.
147
- - User-owned infrastructure is app code, not a platform gap.
148
+ - Explicit user-owned integrations are app code, not a platform gap.
148
149
  - Platform gap means missing HowOne contract/tool/catalog support, not an unsupported technology name.
@@ -1,21 +0,0 @@
1
- MIT License
2
-
3
- Copyright (c) 2026 Jane (@xiaoerzhan / 小耳)
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.