@aigne/doc-smith 0.5.1 → 0.7.0

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 (42) hide show
  1. package/.github/workflows/ci.yml +46 -0
  2. package/.github/workflows/reviewer.yml +2 -1
  3. package/CHANGELOG.md +17 -0
  4. package/agents/chat.yaml +30 -0
  5. package/agents/check-detail-result.mjs +2 -1
  6. package/agents/check-detail.mjs +1 -0
  7. package/agents/check-structure-plan.mjs +1 -1
  8. package/agents/docs-fs.yaml +25 -0
  9. package/agents/exit.mjs +6 -0
  10. package/agents/feedback-refiner.yaml +5 -1
  11. package/agents/find-items-by-paths.mjs +10 -4
  12. package/agents/fs.mjs +60 -0
  13. package/agents/input-generator.mjs +159 -90
  14. package/agents/load-config.mjs +0 -5
  15. package/agents/load-sources.mjs +119 -12
  16. package/agents/publish-docs.mjs +28 -11
  17. package/agents/retranslate.yaml +1 -1
  18. package/agents/team-publish-docs.yaml +2 -2
  19. package/aigne.yaml +1 -0
  20. package/package.json +13 -10
  21. package/prompts/content-detail-generator.md +12 -4
  22. package/prompts/document/custom-components.md +80 -0
  23. package/prompts/document/d2-chart/diy-examples.md +44 -0
  24. package/prompts/document/d2-chart/official-examples.md +708 -0
  25. package/prompts/document/d2-chart/rules.md +48 -0
  26. package/prompts/document/detail-generator.md +13 -15
  27. package/prompts/document/structure-planning.md +1 -3
  28. package/prompts/feedback-refiner.md +81 -60
  29. package/prompts/structure-planning.md +20 -3
  30. package/tests/check-detail-result.test.mjs +50 -2
  31. package/tests/conflict-resolution.test.mjs +237 -0
  32. package/tests/input-generator.test.mjs +940 -0
  33. package/tests/load-sources.test.mjs +627 -3
  34. package/tests/preferences-utils.test.mjs +94 -0
  35. package/tests/save-value-to-config.test.mjs +182 -5
  36. package/tests/utils.test.mjs +49 -0
  37. package/utils/auth-utils.mjs +1 -1
  38. package/utils/conflict-detector.mjs +72 -1
  39. package/utils/constants.mjs +139 -126
  40. package/utils/kroki-utils.mjs +162 -0
  41. package/utils/markdown-checker.mjs +175 -67
  42. package/utils/utils.mjs +97 -29
@@ -0,0 +1,708 @@
1
+ 以下是 d2 官方提供的一些示例,拥有比较好的展示效果,在实际生成图表的时候,可以参考官方示例的使用方式,来提升图表的表现力
2
+
3
+ - Bank Securities
4
+ ```d2
5
+ bank: {
6
+ style.fill: white
7
+ Corporate: {
8
+ style.fill: white
9
+ app14506: Data Source\ntco: 100,000\nowner: Lakshmi {
10
+ style: {
11
+ fill: '#fce7c6'
12
+ }
13
+ }
14
+ }
15
+ Equities: {
16
+ app14491: Risk Global\ntco: 600,000\nowner: Wendy {
17
+ style: {
18
+ fill: '#f6c889'
19
+ }
20
+ }
21
+ app14492: Credit guard\ntco: 100,000\nowner: Lakshmi {
22
+ style: {
23
+ fill: '#fce7c6'
24
+ }
25
+ }
26
+ app14520: Seven heaven\ntco: 100,000\nowner: Tomos {
27
+ style: {
28
+ fill: '#fce7c6'
29
+ }
30
+ }
31
+ app14522: Apac Ace\ntco: 400,000\nowner: Wendy {
32
+ style: {
33
+ fill: '#f9d8a7'
34
+ }
35
+ }
36
+ app14527: Risk Global\ntco: 900,000\nowner: Tomos {
37
+ style: {
38
+ fill: '#f4b76c'
39
+ }
40
+ }
41
+ }
42
+ Securities: {
43
+ style.fill: white
44
+ app14517: Zone out\ntco: 500,000\nowner: Wendy {
45
+ style: {
46
+ fill: '#f6c889'
47
+ }
48
+ }
49
+ }
50
+ Finance: {
51
+ style.fill: white
52
+ app14488: Credit guard\ntco: 700,000\nowner: India {
53
+ style: {
54
+ fill: '#f6c889'
55
+ }
56
+ }
57
+ app14502: Ark Crypto\ntco: 1,500,000\nowner: Wendy {
58
+ style: {
59
+ fill: '#ed800c'
60
+ }
61
+ }
62
+ app14510: Data Solar\ntco: 1,200,000\nowner: Deepak {
63
+ style: {
64
+ fill: '#f1a64f'
65
+ }
66
+ }
67
+ }
68
+ Risk: {
69
+ style.fill: white
70
+ app14490: Seven heaven\ntco: 0\nowner: Joesph {
71
+ style: {
72
+ fill: '#fce7c6'
73
+ }
74
+ }
75
+ app14507: Crypto Bot\ntco: 1,100,000\nowner: Wendy {
76
+ style: {
77
+ fill: '#f1a64f'
78
+ }
79
+ }
80
+ }
81
+ Funds: {
82
+ style.fill: white
83
+ app14497: Risk Global\ntco: 500,000\nowner: Joesph {
84
+ style: {
85
+ fill: '#f6c889'
86
+ }
87
+ }
88
+ }
89
+ Fixed Income: {
90
+ style.fill: white
91
+ app14523: ARC3\ntco: 600,000\nowner: Wendy {
92
+ style: {
93
+ fill: '#f6c889'
94
+ }
95
+ }
96
+ app14500: Acmaze\ntco: 100,000\nowner: Tomos {
97
+ style: {
98
+ fill: '#fce7c6'
99
+ }
100
+ }
101
+ }
102
+ }
103
+ bank.Risk.app14490 -> bank.Equities.app14527: client master
104
+ bank.Equities.app14491 -> bank.Equities.app14527: greeks {
105
+ style: {
106
+ stroke-dash: 5
107
+ animated: true
108
+ stroke: red
109
+ }
110
+ }
111
+ bank.Funds.app14497 -> bank.Equities.app14520: allocations {
112
+ style: {
113
+ stroke-dash: 5
114
+ animated: true
115
+ stroke: brown
116
+ }
117
+ }
118
+ bank.Equities.app14527 -> bank.Corporate.app14506: trades {
119
+ style: {
120
+ stroke-dash: 5
121
+ animated: false
122
+ stroke: blue
123
+ }
124
+ }
125
+ bank.Fixed Income.app14523 -> bank.Equities.app14491: orders {
126
+ style: {
127
+ stroke-dash: 10
128
+ animated: false
129
+ stroke: green
130
+ }
131
+ }
132
+ bank.Finance.app14488 -> bank.Equities.app14527: greeks {
133
+ style: {
134
+ stroke-dash: 5
135
+ animated: true
136
+ stroke: red
137
+ }
138
+ }
139
+ bank.Equities.app14527 -> bank.Equities.app14522: orders {
140
+ style: {
141
+ stroke-dash: 10
142
+ animated: false
143
+ stroke: green
144
+ }
145
+ }
146
+ bank.Equities.app14522 -> bank.Finance.app14510: orders {
147
+ style: {
148
+ stroke-dash: 10
149
+ animated: false
150
+ stroke: green
151
+ }
152
+ }
153
+ bank.Equities.app14527 -> bank.Finance.app14502: greeks {
154
+ style: {
155
+ stroke-dash: 5
156
+ animated: true
157
+ stroke: red
158
+ }
159
+ }
160
+ bank.Equities.app14527 -> bank.Risk.app14507: allocations {
161
+ style: {
162
+ stroke-dash: 5
163
+ animated: true
164
+ stroke: brown
165
+ }
166
+ }
167
+ bank.Securities.app14517 -> bank.Equities.app14492: trades {
168
+ style: {
169
+ stroke-dash: 5
170
+ animated: false
171
+ stroke: blue
172
+ }
173
+ }
174
+ bank.Equities.app14522 -> bank.Fixed Income.app14500: security reference
175
+ ```
176
+ - Udp Tunnel
177
+ ```d2
178
+ shape: sequence_diagram
179
+
180
+ backend_server
181
+ local_server
182
+ ssh_server
183
+ other_server
184
+
185
+ 启动阶段: {
186
+ local_server->ssh_server:ssh_login
187
+ local_server<-ssh_server:ssh 登录成功
188
+ local_server->ssh_server:sftp_copy 辅助转发服务器
189
+ local_server->ssh_server:ssh 启动转发服务器
190
+ }
191
+
192
+ 启动成功运行阶段:{
193
+ other_server->ssh_server.a:请求udp packet{
194
+ style.animated: true
195
+ style.stroke: red
196
+ }
197
+
198
+ ssh_server.a->local_server.a:udp forward 发送给 udp client {
199
+ style.animated: true
200
+ style.stroke: red
201
+ }
202
+
203
+ local_server.a->backend_server.a: "udp 转发给 udp server"{
204
+ style.animated: true
205
+ style.stroke: red
206
+ }
207
+
208
+ backend_server.b->local_server.b:发送ok字符串给 udp的请求端{
209
+ style.animated: true
210
+ style.stroke: green
211
+ }
212
+
213
+ ssh_server.b<-local_server.b: 发送给 ssh 所在的 udp forawrd {
214
+ style.animated: true
215
+ style.stroke: green
216
+ }
217
+
218
+ other_server<-ssh_server.b:返回udp 请求回复{
219
+ style.animated: true
220
+ style.stroke:green
221
+ }
222
+ other_server.一次交互完成
223
+ }
224
+ ```
225
+ - Llm Framework Architecture
226
+ ```d2
227
+ vars: {
228
+ d2-config: {
229
+ theme-id: 3 # terrastruct
230
+ sketch: true
231
+ layout-engine: elk
232
+ }
233
+ colors: {
234
+ c2: "#C7F1FF" # light turkuaz
235
+ c3: "#B5AFF6" # dark purple
236
+ c4: "#DEE1EB" # gray
237
+ c5: "#88DCF7" # turkuaz
238
+ c6: "#E4DBFE" # purple
239
+ }
240
+ }
241
+
242
+ LangUnits: {
243
+ style.fill: ${colors.c6}
244
+ RegexVal: {
245
+ ds
246
+ }
247
+ SQLSelect: {
248
+ ds
249
+ }
250
+ PythonTr: {
251
+ ds
252
+ }
253
+ langunit ₙ: {
254
+ style.multiple: true
255
+ style.stroke-dash: 10
256
+ style.stroke: black
257
+ style.animated: 1
258
+ "... ds"
259
+ }
260
+ }
261
+
262
+ LangUnits <- ExperimentHost.Dataset: "load dataset"
263
+ Dataset UI -> LangUnits: "manage datasets"
264
+
265
+ Dataset UI: {
266
+ style.fill: ${colors.c4}
267
+ }
268
+
269
+ ExperimentHost: {
270
+ style.fill: ${colors.c4}
271
+ Experiment: {
272
+ style.multiple: true
273
+ }
274
+ Dataset
275
+ # Experiment <-> Dataset
276
+ }
277
+ ExperimentHost.Experiment -> Experiment
278
+
279
+ Experiment.ModelConfigurations: {
280
+ style.multiple: true
281
+ }
282
+ Experiment.LangUnit
283
+
284
+ Experiment.ModelConfigurations -> ModelConfiguration
285
+
286
+ ModelConfiguration.Prompting
287
+ ModelConfiguration.Model
288
+ ModelConfiguration.LangUnit
289
+ ```
290
+ - 综合案例 - Terraform Resources:
291
+ ```d2
292
+ vars: {
293
+ d2-config: {
294
+ layout-engine: elk
295
+ }
296
+ }
297
+
298
+ *.style.font-size: 22
299
+ *.*.style.font-size: 22
300
+
301
+ title: |md
302
+ # Terraform resources (v1.0.0)
303
+ | {near: top-center}
304
+
305
+ direction: right
306
+
307
+ project_connection: {
308
+ style: {
309
+ fill: "#C5C6C7"
310
+ stroke: grey
311
+ }
312
+ }
313
+
314
+ privatelink_endpoint: {tooltip: Datasource only}
315
+ group
316
+ group_partial_permissions
317
+ service_token
318
+ job: {
319
+ style: {
320
+ fill: "#ACE1AF"
321
+ stroke: green
322
+ }
323
+ }
324
+
325
+ conns: Connections (will be removed in the future,\nuse global_connection) {
326
+ bigquery_connection
327
+ fabric_connection
328
+ connection
329
+
330
+ bigquery_connection.style.fill: "#C5C6C7"
331
+ fabric_connection.style.fill: "#C5C6C7"
332
+ connection.style.fill: "#C5C6C7"
333
+ }
334
+ conns.style.fill: "#C5C6C7"
335
+
336
+ env_creds: Environment Credentials {
337
+ grid-columns: 2
338
+ athena_credential
339
+ databricks_credential
340
+ snowflake_credential
341
+ bigquery_credential
342
+ fabric_credential
343
+ postgres_credential: {tooltip: Is used for Redshift as well}
344
+ teradata_credential
345
+ }
346
+
347
+ service_token -- project: can scope to {
348
+ style: {
349
+ stroke-dash: 3
350
+ }
351
+ }
352
+ group -- project
353
+ group_partial_permissions -- project
354
+ user_groups -- group
355
+ user_groups -- group_partial_permissions
356
+ project -- environment
357
+ project -- snowflake_semantic_layer_credential
358
+ job -- environment
359
+ job -- environment_variable_job_override
360
+ notification -- job
361
+ partial_notification -- job
362
+
363
+ webhook -- job: triggered by {
364
+ style: {
365
+ stroke-dash: 3
366
+ }
367
+ }
368
+ environment -- global_connection
369
+ environment -- conns
370
+ global_connection -- privatelink_endpoint
371
+ global_connection -- oauth_configuration
372
+
373
+ environment -- env_creds
374
+ conns -- privatelink_endpoint
375
+ project -- project_repository
376
+ lineage_integration -- project
377
+ project_repository -- repository
378
+ environment -- environment_variable
379
+ environment -- partial_environment_variable
380
+ environment -- extended_attributes
381
+ environment -- semantic_layer_configuration
382
+ model_notifications -- environment
383
+
384
+ project -- project_connection {
385
+ style: {
386
+ stroke: "#C5C6C7"
387
+ }
388
+ }
389
+ project_connection -- conns {
390
+ style: {
391
+ stroke: "#C5C6C7"
392
+ }
393
+ }
394
+
395
+ (job -- *)[*].style.stroke: green
396
+ (* -- job)[*].style.stroke: green
397
+
398
+ account_level_settings: "Account level settings" {
399
+ account_features
400
+ ip_restrictions_rule
401
+ license_map
402
+ partial_license_map
403
+ }
404
+ account_level_settings.style.fill-pattern: dots
405
+ ```
406
+ - Game State Sequence
407
+ ```d2
408
+ shape: sequence_diagram
409
+
410
+ User
411
+ Session
412
+ Lua
413
+
414
+ User."Init"
415
+
416
+ User.t1 -> Session.t1: "SetupFight()"
417
+ Session.t1 -> Session.t1: "Create clean fight state"
418
+ Session.t1 -> Lua: "Trigger OnPlayerTurn"
419
+ User.t1 <- Session.t1
420
+
421
+ User."Repeat"
422
+
423
+ User.mid -> Session.mid: "PlayerCastHand() etc."
424
+ Session.mid -> Lua: "Trigger OnDamage etc."
425
+ User.mid <- Session.mid
426
+
427
+ User.t2 -> Session.t2: "FinishPlayerTurn()"
428
+ Session.t2 -> Lua: "Trigger OnTurn"
429
+ Session.t2 -> Session.t2: "Update and remove status effects"
430
+ Session.t2 -> Lua: "Trigger OnPlayerTurn"
431
+ User.t2 <- Session.t2
432
+ ```
433
+ - Golang Queue
434
+ ```d2
435
+ direction: right
436
+
437
+ classes: {
438
+ base: {
439
+ style: {
440
+ bold: true
441
+ font-size: 28
442
+ }
443
+ }
444
+
445
+ person: {
446
+ shape: person
447
+ }
448
+
449
+ animated: {
450
+ style: {
451
+ animated: true
452
+ }
453
+ }
454
+
455
+ multiple: {
456
+ style: {
457
+ multiple: true
458
+ }
459
+ }
460
+
461
+ enqueue: {
462
+ label: Enqueue Task
463
+ }
464
+
465
+ dispatch: {
466
+ label: Dispatch Task
467
+ }
468
+
469
+ library: {
470
+ style: {
471
+ bold: true
472
+ font-size: 32
473
+ fill: PapayaWhip
474
+ fill-pattern: grain
475
+ border-radius: 8
476
+ font: mono
477
+ }
478
+ }
479
+
480
+ task: {
481
+ style: {
482
+ bold: true
483
+ font-size: 32
484
+ }
485
+ }
486
+ }
487
+
488
+ user01: {
489
+ label: User01
490
+ class: [base; person; multiple]
491
+ }
492
+
493
+ user02: {
494
+ label: User02
495
+ class: [base; person; multiple]
496
+ }
497
+
498
+ user03: {
499
+ label: User03
500
+ class: [base; person; multiple]
501
+ }
502
+
503
+ user01 -> container.task01: {
504
+ label: Create Task
505
+ class: [base; animated]
506
+ }
507
+ user02 -> container.task02: {
508
+ label: Create Task
509
+ class: [base; animated]
510
+ }
511
+ user03 -> container.task03: {
512
+ label: Create Task
513
+ class: [base; animated]
514
+ }
515
+
516
+ container: Application {
517
+ direction: right
518
+ style: {
519
+ bold: true
520
+ font-size: 28
521
+ }
522
+ icon: https://icons.terrastruct.com/dev%2Fgo.svg
523
+
524
+ task01: {
525
+ icon: https://icons.terrastruct.com/essentials%2F092-graph%20bar.svg
526
+ class: [task; multiple]
527
+ }
528
+
529
+ task02: {
530
+ icon: https://icons.terrastruct.com/essentials%2F095-download.svg
531
+ class: [task; multiple]
532
+ }
533
+
534
+ task03: {
535
+ icon: https://icons.terrastruct.com/essentials%2F195-attachment.svg
536
+ class: [task; multiple]
537
+ }
538
+
539
+ queue: {
540
+ label: Queue Library
541
+ icon: https://icons.terrastruct.com/dev%2Fgo.svg
542
+ style: {
543
+ bold: true
544
+ font-size: 32
545
+ fill: honeydew
546
+ }
547
+
548
+ producer: {
549
+ label: Producer
550
+ class: library
551
+ }
552
+
553
+ consumer: {
554
+ label: Consumer
555
+ class: library
556
+ }
557
+
558
+ database: {
559
+ label: Ring\nBuffer
560
+ shape: cylinder
561
+ style: {
562
+ bold: true
563
+ font-size: 32
564
+ fill-pattern: lines
565
+ font: mono
566
+ }
567
+ }
568
+
569
+ producer -> database
570
+ database -> consumer
571
+ }
572
+
573
+ worker01: {
574
+ icon: https://icons.terrastruct.com/essentials%2F092-graph%20bar.svg
575
+ class: [task]
576
+ }
577
+
578
+ worker02: {
579
+ icon: https://icons.terrastruct.com/essentials%2F095-download.svg
580
+ class: [task]
581
+ }
582
+
583
+ worker03: {
584
+ icon: https://icons.terrastruct.com/essentials%2F092-graph%20bar.svg
585
+ class: [task]
586
+ }
587
+
588
+ worker04: {
589
+ icon: https://icons.terrastruct.com/essentials%2F195-attachment.svg
590
+ class: [task]
591
+ }
592
+
593
+ task01 -> queue.producer: {
594
+ class: [base; enqueue]
595
+ }
596
+ task02 -> queue.producer: {
597
+ class: [base; enqueue]
598
+ }
599
+ task03 -> queue.producer: {
600
+ class: [base; enqueue]
601
+ }
602
+ queue.consumer -> worker01: {
603
+ class: [base; dispatch]
604
+ }
605
+ queue.consumer -> worker02: {
606
+ class: [base; dispatch]
607
+ }
608
+ queue.consumer -> worker03: {
609
+ class: [base; dispatch]
610
+ }
611
+ queue.consumer -> worker04: {
612
+ class: [base; dispatch]
613
+ }
614
+ }
615
+ ```
616
+ - Lambda Infra
617
+ ```d2
618
+ direction: right
619
+
620
+ github: GitHub {
621
+ shape: image
622
+ icon: https://icons.terrastruct.com/dev%2Fgithub.svg
623
+ style: {
624
+ font-color: green
625
+ font-size: 30
626
+ }
627
+ }
628
+
629
+ github_actions: GitHub Actions {
630
+ lambda_action: Lambda Action {
631
+ icon: https://icons.terrastruct.com/dev%2Fgithub.svg
632
+ style.multiple: true
633
+ }
634
+ style: {
635
+ stroke: blue
636
+ font-color: purple
637
+ stroke-dash: 3
638
+ fill: white
639
+ }
640
+ }
641
+
642
+ aws: AWS Cloud VPC {
643
+ style: {
644
+ font-color: purple
645
+ fill: white
646
+ opacity: 0.5
647
+ }
648
+ lambda01: Lambda01 {
649
+ icon: https://icons.terrastruct.com/aws%2FCompute%2FAWS-Lambda.svg
650
+ shape: parallelogram
651
+ style.fill: "#B6DDF6"
652
+ }
653
+ lambda02: Lambda02 {
654
+ icon: https://icons.terrastruct.com/aws%2FCompute%2FAWS-Lambda.svg
655
+ shape: parallelogram
656
+ style.fill: "#B6DDF6"
657
+ }
658
+ lambda03: Lambda03 {
659
+ icon: https://icons.terrastruct.com/aws%2FCompute%2FAWS-Lambda.svg
660
+ shape: parallelogram
661
+ style.fill: "#B6DDF6"
662
+ }
663
+ }
664
+
665
+ github -> github_actions: GitHub Action Flow {
666
+ style: {
667
+ animated: true
668
+ font-size: 20
669
+ }
670
+ }
671
+ github_actions -> aws.lambda01: Update Lambda {
672
+ style: {
673
+ animated: true
674
+ font-size: 20
675
+ }
676
+ }
677
+ github_actions -> aws.lambda02: Update Lambda {
678
+ style: {
679
+ animated: true
680
+ font-size: 20
681
+ }
682
+ }
683
+ github_actions -> aws.lambda03: Update Lambda {
684
+ style: {
685
+ animated: true
686
+ font-size: 20
687
+ }
688
+ }
689
+
690
+ explanation: |md
691
+ ```yaml
692
+ deploy_source:
693
+ name: deploy lambda from source
694
+ runs-on: ubuntu-latest
695
+ steps:
696
+ - name: checkout source code
697
+ uses: actions/checkout@v3
698
+ - name: default deploy
699
+ uses: appleboy/lambda-action@v0.1.7
700
+ with:
701
+ aws_access_key_id: ${{ secrets.AWS_ACCESS_KEY_ID }}
702
+ aws_secret_access_key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
703
+ aws_region: ${{ secrets.AWS_REGION }}
704
+ function_name: gorush
705
+ source: example/index.js
706
+ ```
707
+ | {near: bottom-center}
708
+ ```