-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.html
More file actions
1136 lines (1098 loc) · 93.4 KB
/
Copy pathindex.html
File metadata and controls
1136 lines (1098 loc) · 93.4 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>PromptDog 提示词提示狗 — 把说不清的需求,变成能上岗的 Agent</title>
<style>
:root{
--bg:#faf9f7; --card:#ffffff; --ink:#1f2328; --sub:#57606a;
--accent:#d97706; --accent-soft:#fef3e2; --line:#e8e4de;
--good:#1a7f37; --code:#f5f2ec;
--hi:#dc2626; --mid:#d97706; --lo:#2563eb; --ok:#16a34a;
--mono:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
}
@media (prefers-color-scheme: dark){
:root{ --bg:#14161a; --card:#1d2025; --ink:#e8eaed; --sub:#9aa4af;
--accent:#f0a24b; --accent-soft:#3a2c17; --line:#31353c; --code:#23262c; }
}
*{margin:0;padding:0;box-sizing:border-box}
html,body{overflow-x:hidden;max-width:100%}
body{background:var(--bg);color:var(--ink);
font-family:-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Hiragino Sans GB","Microsoft YaHei",sans-serif;
line-height:1.7}
.wrap{max-width:1120px;margin:0 auto;padding:0 24px}
section{padding:56px 0}
h2{font-size:1.7rem;margin-bottom:8px}
.kicker{color:var(--accent);font-weight:700;font-size:.85rem;letter-spacing:.12em;text-transform:uppercase}
.lead{color:var(--sub);margin-bottom:32px;max-width:720px}
.hero{padding:80px 0 56px;text-align:center;background:radial-gradient(ellipse 70% 60% at 50% 0%, var(--accent-soft), transparent)}
.hero .dog{font-size:4rem;line-height:1}
.hero h1{font-size:2.6rem;margin:12px 0 4px}
.hero h1 em{font-style:normal;color:var(--accent)}
.hero .tagline{font-size:1.25rem;font-weight:600;margin:10px 0 6px}
.hero .sub{color:var(--sub);max-width:640px;margin:0 auto 28px}
.btns{display:flex;gap:12px;justify-content:center;flex-wrap:wrap}
.btn{display:inline-block;padding:10px 22px;border-radius:10px;text-decoration:none;font-weight:600;
border:1.5px solid var(--accent);transition:transform .15s}
.btn:hover{transform:translateY(-2px)}
.btn.primary{background:var(--accent);color:#fff}
.btn.ghost{color:var(--accent)}
.grid{display:grid;gap:18px}
.g3{grid-template-columns:repeat(auto-fit,minmax(260px,1fr))}
.card{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:22px}
.card h3{font-size:1.05rem;margin-bottom:8px}
.card p{color:var(--sub);font-size:.93rem}
.card .n{display:inline-flex;width:30px;height:30px;border-radius:8px;background:var(--accent-soft);
color:var(--accent);font-weight:800;align-items:center;justify-content:center;margin-bottom:10px}
.tblwrap{overflow-x:auto;border:1px solid var(--line);border-radius:14px;background:var(--card)}
table{border-collapse:collapse;width:100%;min-width:640px;font-size:.92rem}
th,td{padding:12px 16px;text-align:left;border-bottom:1px solid var(--line);vertical-align:top}
thead th{background:var(--accent-soft);color:var(--ink);font-size:.9rem}
tbody tr:last-child td{border-bottom:none}
td.old{color:var(--sub)} td.new{font-weight:550} td.new b{color:var(--accent)}
.pipe{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:14px}
.lv{font-size:.72rem;font-weight:800;color:var(--accent);letter-spacing:.08em}
pre{background:var(--code);border:1px solid var(--line);border-radius:12px;padding:18px;
overflow-x:auto;font-size:.82rem;line-height:1.6;font-family:var(--mono)}
.chips{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px}
.chip{background:var(--accent-soft);color:var(--accent);border-radius:999px;padding:4px 14px;font-size:.82rem;font-weight:600}
.stepline{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin:14px 0}
.step{background:var(--card);border:1px solid var(--line);border-radius:8px;padding:6px 12px;font-size:.85rem}
.arrow{color:var(--accent);font-weight:700}
ul.clean{list-style:none}
ul.clean li{padding-left:1.4em;position:relative;margin-bottom:8px;font-size:.93rem}
ul.clean li::before{content:"✓";position:absolute;left:0;color:var(--good);font-weight:700}
ul.redline li::before{content:"✕";color:#c93c37}
footer{border-top:1px solid var(--line);padding:36px 0;text-align:center;color:var(--sub);font-size:.9rem}
footer a{color:var(--accent)}
.center{text-align:center}
/* ============ 内嵌工作台(固定浅色,像产品实拍) ============ */
.appframe{max-width:100%;margin:0 auto;border-radius:16px;overflow:hidden;
box-shadow:0 24px 64px rgba(0,0,0,.18);border:1px solid #d8dbe2;background:#fff}
.app{display:grid;grid-template-columns:200px 1fr 430px;grid-template-rows:auto 1fr;height:auto;
grid-template-areas:"side top top" "side chat out";color:#1e232b;min-width:0;max-width:100%}
@media(max-width:980px){
.app{grid-template-columns:1fr;grid-template-rows:auto auto auto;height:auto;
grid-template-areas:"top" "chat" "out"}
.app .side{display:none}
.app .d-out{border-left:none;border-top:1px solid #e5e8ee}
}
.d-top{grid-area:top;background:#fff;border-bottom:1px solid #e5e8ee;display:flex;align-items:center;
gap:8px;padding:9px 14px;flex-wrap:wrap}
.d-top .title{font-weight:700;font-size:.9rem}
.badge-demo{font-size:.68rem;background:#d97706;color:#fff;border-radius:5px;padding:2px 8px;font-weight:700}
.tabs{display:flex;gap:6px;flex-wrap:wrap}
.tab{border:1px solid #e5e8ee;background:#f7f8fa;border-radius:8px;padding:4px 11px;font-size:.78rem;
cursor:pointer;color:#68707c;transition:.2s;font-family:inherit}
.tab.on{background:#fdf0dd;border-color:#d97706;color:#d97706;font-weight:700}
.replay{margin-left:auto;border:1px solid #d97706;color:#d97706;background:none;border-radius:8px;
padding:4px 14px;font-size:.78rem;cursor:pointer;font-weight:600;font-family:inherit}
.replay:hover{background:#fdf0dd}
.side{grid-area:side;background:#1b1f27;color:#c8cdd6;padding:14px 8px;overflow:hidden}
.logo{display:flex;align-items:center;gap:8px;padding:2px 8px 12px;color:#fff;font-weight:800;font-size:.9rem}
.ag{display:flex;gap:9px;align-items:center;padding:8px 9px;border-radius:10px;font-size:.78rem;margin-bottom:2px}
.ag .av{width:28px;height:28px;border-radius:8px;display:flex;align-items:center;justify-content:center;
font-size:.95rem;background:#2a303c;flex-shrink:0}
.ag.on{background:#2e3542;color:#fff}
.ag small{display:block;font-size:.64rem;color:#7b8494;margin-top:1px}
.side .sec{font-size:.64rem;letter-spacing:.1em;color:#5d6572;padding:10px 9px 5px}
.d-chat{grid-area:chat;display:flex;flex-direction:column;background:#f7f8fa;min-width:0}
.stream{flex:1;min-width:0;min-height:200px;padding:18px 22px;display:flex;flex-direction:column;gap:12px}
.inputbar{padding:10px 18px;background:#fff;border-top:1px solid #e5e8ee;display:flex;gap:10px}
.inputbar .box{flex:1;border:1px solid #e5e8ee;border-radius:10px;padding:8px 13px;color:#68707c;font-size:.8rem;background:#f7f8fa}
.inputbar .send{width:34px;height:34px;border-radius:10px;background:#d97706;border:none;color:#fff;font-size:.95rem}
.msg{max-width:84%;overflow-wrap:anywhere;padding:10px 14px;border-radius:14px;font-size:.84rem;line-height:1.6;animation:pop .3s ease;word-break:break-word}
@keyframes pop{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
.u{align-self:flex-end;background:#d97706;color:#fff;border-bottom-right-radius:4px}
.b{align-self:flex-start;background:#fff;border:1px solid #e5e8ee;border-bottom-left-radius:4px}
.b .who{font-size:.7rem;font-weight:800;color:#d97706;margin-bottom:3px}
.b small{color:#68707c}
.filechip{display:inline-flex;gap:8px;align-items:center;background:rgba(255,255,255,.18);border-radius:8px;
padding:5px 11px;margin-bottom:5px;font-size:.78rem}
.typing{align-self:flex-start;background:#fff;border:1px solid #e5e8ee;border-radius:14px;padding:11px 16px;display:flex;gap:5px}
.typing i{width:6px;height:6px;border-radius:50%;background:#68707c;animation:blink 1s infinite}
.typing i:nth-child(2){animation-delay:.2s}.typing i:nth-child(3){animation-delay:.4s}
@keyframes blink{0%,100%{opacity:.25}50%{opacity:1}}
.stages{align-self:stretch;background:#fff;border:1px solid #e5e8ee;border-radius:14px;padding:14px 16px;animation:pop .3s ease}
.stages h4{font-size:.78rem;margin-bottom:8px;color:#68707c;font-weight:600}
.st{display:flex;gap:9px;align-items:baseline;padding:4px 0;font-size:.82rem;opacity:.32;transition:.3s}
.st.run,.st.done{opacity:1}
.st .ic{width:18px;flex-shrink:0;text-align:center}
.st.run .ic{animation:spin 1s linear infinite;display:inline-block}
@keyframes spin{to{transform:rotate(360deg)}}
.st .detail{color:#68707c;font-size:.73rem;margin-left:auto;text-align:right;opacity:0;transition:.4s}
.st.done .detail{opacity:1}
.st.done .ic{color:#16a34a}
.ccard{align-self:stretch;background:#fff;border:1.5px solid #d97706;border-radius:14px;padding:14px 16px;animation:pop .3s ease}
.ccard .h{font-size:.75rem;color:#d97706;font-weight:800;margin-bottom:7px}
.q{margin-bottom:9px;font-size:.82rem}
.q b{display:block;margin-bottom:4px}
.opt{display:flex;gap:8px;align-items:center;padding:3px 8px;border-radius:8px;font-size:.79rem;color:#68707c;transition:.3s}
.opt .dot{width:13px;height:13px;border-radius:50%;border:1.5px solid #e5e8ee;flex-shrink:0;transition:.3s}
.opt.pick{background:#fdf0dd;color:#1e232b}
.opt.pick .dot{border-color:#d97706;background:#d97706;box-shadow:inset 0 0 0 3px #fff}
.opt .star{color:#d97706;font-weight:700}
.d-out{grid-area:out;background:#fff;border-left:1px solid #e5e8ee;display:flex;flex-direction:column;min-width:0}
.d-out .head{padding:11px 18px;border-bottom:1px solid #e5e8ee;display:flex;align-items:center;gap:8px}
.d-out .head .t{font-weight:700;font-size:.82rem}
.d-out .head .live{margin-left:auto;font-size:.66rem;color:#16a34a;font-weight:700}
.d-out .head .live::before{content:"●";margin-right:4px;animation:blink 1.2s infinite}
.outbody{flex:1;min-width:0;min-height:160px;padding:16px 18px}
.placeholder{color:#9aa4af;font-size:.82rem;text-align:center;margin-top:45%}
.rep-h{animation:pop .4s ease;margin-bottom:12px}
.rep-h .name{font-weight:800;font-size:.95rem}
.rep-h .meta{color:#68707c;font-size:.72rem;margin-top:2px}
.tiles{display:grid;grid-template-columns:repeat(4,1fr);gap:7px;margin-bottom:14px}
.tile{border:1px solid #e5e8ee;border-radius:10px;padding:8px 5px;text-align:center;animation:pop .4s ease}
.tile .v{font-weight:800;font-size:1.05rem}
.tile .k{font-size:.63rem;color:#68707c}
.tile.hi .v{color:#dc2626}.tile.mid .v{color:#d97706}.tile.lo .v{color:#2563eb}.tile.ok .v{color:#16a34a}
.risk{border:1px solid #e5e8ee;border-left:4px solid #e5e8ee;border-radius:10px;padding:11px 13px;
margin-bottom:11px;animation:pop .4s ease;font-size:.79rem}
.risk.hi{border-left-color:#dc2626}.risk.mid{border-left-color:#d97706}
.risk.lo{border-left-color:#2563eb}.risk.ok{border-left-color:#16a34a}
.risk .rh{display:flex;gap:7px;align-items:center;margin-bottom:5px;flex-wrap:wrap}
.risk .rid{font-family:var(--mono);font-weight:700;font-size:.74rem}
.risk .lvl{font-size:.64rem;border-radius:5px;padding:1px 7px;color:#fff;font-weight:700}
.risk.hi .lvl{background:#dc2626}.risk.mid .lvl{background:#d97706}
.risk.lo .lvl{background:#2563eb}.risk.ok .lvl{background:#16a34a}
.risk .loc{margin-left:auto;color:#68707c;font-size:.68rem;font-family:var(--mono)}
.risk .quote{background:#f7f8fa;border-radius:8px;padding:7px 9px;color:#68707c;font-size:.75rem;
margin:5px 0;border-left:3px solid #e5e8ee}
.risk .fix{background:#f0faf2;border-radius:8px;padding:7px 9px;font-size:.75rem;margin-top:5px;border-left:3px solid #16a34a}
.risk .fix b{color:#16a34a;font-size:.68rem}
.risk .why{color:#68707c}
.risk .tag-check{display:inline-block;font-size:.64rem;background:#fdf0dd;color:#d97706;border-radius:5px;
padding:1px 7px;font-weight:700;margin-top:5px}
.ft{font-family:var(--mono);font-size:.75rem;line-height:1.9;color:#1e232b;overflow-x:auto}
.ft div{opacity:0;transform:translateX(-6px);transition:.35s}
.ft div.show{opacity:1;transform:none}
.ft .dir{color:#d97706;font-weight:700}
.ft .cm{color:#68707c;font-size:.68rem}
.score{display:grid;grid-template-columns:5.2em 1fr 2em;gap:5px 9px;align-items:center;font-size:.75rem;
margin-bottom:14px;animation:pop .4s ease;color:#1e232b}
.sbar{height:7px;background:#f0f1f4;border-radius:4px;overflow:hidden}
.sbar i{display:block;height:100%;width:0;background:#16a34a;border-radius:4px;transition:width .8s ease}
.sbar.low i{background:#dc2626}
.sbar.md i{background:#d97706}
.imp{background:#f7f8fa;border-radius:10px;padding:11px 13px;font-size:.77rem;line-height:1.85;
animation:pop .4s ease;margin-bottom:11px;color:#1e232b}
.imp mark{background:#fdf0dd;color:#b45309;font-weight:700;padding:0 3px;border-radius:3px}
.chart{display:flex;gap:9px;align-items:flex-end;height:110px;padding:8px 6px 22px;border:1px solid #e5e8ee;
border-radius:10px;margin-bottom:12px;animation:pop .4s ease}
.bar{flex:1;background:#fde8c8;border-radius:4px 4px 0 0;position:relative;height:0;transition:height .7s ease}
.bar.hl{background:#d97706}
.bar span{position:absolute;bottom:-19px;left:0;right:0;text-align:center;font-size:.6rem;color:#68707c}
.bar em{position:absolute;top:-16px;left:0;right:0;text-align:center;font-size:.58rem;color:#68707c;font-style:normal}
.punch{align-self:center;background:linear-gradient(100deg,#d97706,#f59e0b);color:#fff;border-radius:14px;
padding:12px 24px;text-align:center;font-weight:700;animation:pop .5s ease;box-shadow:0 8px 24px rgba(217,119,6,.35);font-size:.9rem}
.punch small{display:block;font-weight:500;opacity:.9;font-size:.73rem;margin-top:3px}
.stream::-webkit-scrollbar,.outbody::-webkit-scrollbar{width:8px}
.stream::-webkit-scrollbar-thumb,.outbody::-webkit-scrollbar-thumb{background:#e5e8ee;border-radius:4px}
.roles{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:14px;max-width:920px;margin:0 auto 14px}
.role{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:16px 18px;text-align:left}
.role .rt{font-weight:800;margin-bottom:4px}
.role .rt .em{color:var(--accent)}
.role p{color:var(--sub);font-size:.88rem}
.genflow{display:flex;flex-wrap:wrap;gap:8px;justify-content:center;align-items:center;margin:6px auto 10px;font-size:.85rem}
.genflow .gstep{background:var(--card);border:1px solid var(--line);border-radius:999px;padding:5px 14px}
.genflow .ga{color:var(--accent);font-weight:700}
.qualbar{max-width:880px;margin:0 auto 26px;text-align:center;font-size:.86rem;color:var(--sub);
background:var(--accent-soft);border-radius:12px;padding:10px 18px}
.qualbar b{color:var(--accent)}
.tgroup{font-size:.68rem;font-weight:800;color:#68707c;align-self:center;padding:0 2px;letter-spacing:.05em}
@media(max-width:640px){
.wrap{padding:0 18px}
section{padding:40px 0}
.hero{padding:56px 0 40px}
.hero h1{font-size:2rem}
.hero .tagline{font-size:1.05rem}
.hero .sub{font-size:.92rem}
h2{font-size:1.4rem}
pre{white-space:pre-wrap;word-break:break-word;font-size:.76rem}
#cmp .grid{grid-template-columns:1fr!important}
}
</style>
<style>
[data-lang-page][hidden]{display:none!important}
</style>
</head>
<body>
<div id="zhPage" data-lang-page="zh">
<div class="hero">
<div class="wrap">
<div class="dog">🐕</div>
<h1>Prompt<em>Dog</em> · 提示词提示狗</h1>
<div class="tagline">把说不清的需求,变成能上岗的 Agent。</div>
<p class="sub">装进你的 AI(Codex、Claude Code、WorkBuddy、SoWork…),说一句想干的事,它帮你把它变成一个调好的 agent——不用自己啃提示词。</p>
<p class="sub" style="margin-top:-14px;font-size:.95rem">写给已经在用 AI 干活、但 agent 总差一口气的人。</p>
<div class="btns">
<a class="btn primary" href="#demo">▶ 观看工作台演示</a>
<a class="btn ghost" href="https://github.com/shandianT/Prompt-dog" target="_blank" rel="noopener">GitHub 仓库</a>
<a class="btn ghost" href="https://github.com/shandianT" target="_blank" rel="noopener"><img src="data:image/jpeg;base64,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" alt="Orcastao" style="width:22px;height:22px;border-radius:50%;vertical-align:-5px;margin-right:7px;border:1px solid var(--line)">作者 Orcastao</a>
<a class="btn ghost" href="#start">快速开始</a>
<a class="btn ghost" href="#en" onclick="setLang('en');return false;">EN</a>
</div>
</div>
</div>
<div class="wrap" style="max-width:860px;margin:-26px auto 0;position:relative;z-index:2">
<div style="background:var(--card);border:1.5px dashed var(--accent);border-radius:14px;padding:14px 22px;font-size:.95rem;text-align:center">
先说清它是什么:<b>PromptDog 不是网站、不是 APP,不用注册</b>——它是一个<b>装进你 AI 里的技能包(skill)</b>。
下载文件夹 → 丢给你的 Codex / Claude Code / SoWork → 之后随口一句「造一只做周报的工作狗」它就开工。<span style="color:var(--sub)">本页只是演示。</span>
</div>
</div>
<section>
<div class="wrap">
<div class="kicker">问题</div>
<h2>让 AI 干活,最累的是把话说清楚</h2>
<p class="lead">PromptDog 把「说清楚」这活儿也接了——它先猜、你只管挑。为什么现在的用法累:</p>
<div class="grid g3">
<div class="card"><span class="n">1</span><h3>要交代的太多,懒得写</h3><p>你说「帮我写个工作总结」,它回你一串问题:重点讲哪几块?有什么成果数据?写给谁看?——光把这些交代清楚就得打半天字,麻烦,还不如自己写。</p></div>
<div class="card"><span class="n">2</span><h3>复杂活也只回一段话</h3><p>审合同、筛简历这种要走流程的事,它只回一段「看起来很专业」的话——哪里漏了、对不对,你没法判断。</p></div>
<div class="card"><span class="n">3</span><h3>调好的经验存不下来</h3><p>这次好不容易调顺了,下次换个任务又从头再来——你的使用经验全蒸发在聊天记录里。</p></div>
</div>
</div>
</section>
<section id="demo" style="padding-top:24px">
<div class="wrap" style="max-width:1240px">
<div class="center" style="margin-bottom:16px">
<div class="kicker">LIVE DEMO</div>
<h2>一只提示狗,一群工作狗</h2>
<p class="lead" style="margin:8px auto 18px">先看懂两个角色,再看它们各自上场干活——自动播放 · 可切换场景与重播。</p>
</div>
<div class="roles">
<div class="role"><div class="rt">🐕 提示狗 <span class="em">PromptDog</span> —— 造 agent 的 skill</div>
<p>你说一句模糊需求,它出选择题替你确认行业细节,然后生成完整的 Agent 资产包。<b>演示 ① 是它自己在干活。</b></p></div>
<div class="role"><div class="rt">🐾 工作狗 —— 提示狗产出的场景专用 Agent</div>
<p>资产包拖进工作台就上岗,专职一个场景,住在犬舍(kennel/)里,越用越准。<b>演示 ②③④ 是三只已上岗的工作狗。</b></p></div>
</div>
<div class="genflow">
<span class="gstep">你的一句话</span><span class="ga">→</span>
<span class="gstep">🐕 选择题确认</span><span class="ga">→</span>
<span class="gstep">生成资产包</span><span class="ga">→</span>
<span class="gstep">拖进工作台</span><span class="ga">→</span>
<span class="gstep">🐾 工作狗上岗</span>
</div>
<div class="qualbar">一样的大模型,为什么工作狗更靠谱?普通 agent 一段提示词一口气写完、好不好看运气;工作狗<b>拆成几步走、先讲清什么算好、留一步专门挑错、用一次准一次</b>。</div>
<div class="appframe">
<div class="app">
<aside class="side">
<div class="logo">🐕 PromptDog</div>
<div class="sec">我的数字员工</div>
<div class="ag" id="ag-dog"><span class="av">🐕</span><span>提示狗<small>提示词 · SOP · 工作流</small></span></div>
<div class="ag" id="ag-law"><span class="av">⚖️</span><span>合同审查助手<small>粘贴合同,自动初审</small></span></div>
<div class="ag" id="ag-hr"><span class="av">🧑💼</span><span>招聘筛选官<small>简历包 → 必面名单</small></span></div>
<div class="ag" id="ag-bid"><span class="av">📑</span><span>标书撰写<small>招标文件 → 投标初稿</small></span></div>
<div class="ag"><span class="av">📊</span><span>数据看板<small>Excel → 经营分析</small></span></div>
</aside>
<header class="d-top">
<span class="title">PromptDog 工作台</span><span class="badge-demo">DEMO</span>
<div class="tabs">
<span class="tgroup">🐕 提示狗</span>
<button class="tab" id="tabA" onclick="play('A')">① 一句话造工作狗</button>
<span class="tgroup">🐾 工作狗</span>
<button class="tab" id="tabC" onclick="play('C')">② 合同审查</button>
<button class="tab" id="tabD" onclick="play('D')">③ 招聘筛选</button>
<button class="tab" id="tabE" onclick="play('E')">④ 标书撰写</button>
</div>
<button class="replay" onclick="replay()">↻ 重播</button>
</header>
<main class="d-chat">
<div class="stream" id="stream"></div>
<div class="inputbar"><div class="box">观看自动演示中…(可切换场景 / 重播)</div><button class="send">↑</button></div>
</main>
<aside class="d-out">
<div class="head"><span class="t" id="outtitle">交付物预览</span><span class="live" id="live" style="display:none">实时生成</span></div>
<div class="outbody" id="outbody"></div>
</aside>
</div>
</div>
</div>
</section>
<section>
<div class="wrap">
<div class="kicker">不同之处</div>
<h2>PromptDog vs 传统提示词优化</h2>
<p class="lead">核心翻转:永远提案让用户挑,不提问让用户答。</p>
<div class="tblwrap"><table>
<thead><tr><th style="width:110px"></th><th>传统提示词优化</th><th>PromptDog</th></tr></thead>
<tbody>
<tr><td>需求澄清</td><td class="old">开放式提问,用户从零描述</td><td class="new"><b>选择题 + ★推荐默认值</b>,行业做法由它先猜、你来挑,回「都按推荐」即放行</td></tr>
<tr><td>复杂度</td><td class="old">一律输出一段提示词</td><td class="new"><b>六信号判级</b>:L1 提示词 / L2 SOP / L3 提示链 / L4 多智能体,能简单绝不复杂</td></tr>
<tr><td>质量</td><td class="old">「看起来更好了」</td><td class="new"><b>验收标准先行</b>,按错误代价配验证(自我一致性 / 交叉核查 / 来源强制 / 对抗审查 / 人工确认点)</td></tr>
<tr><td>迭代</td><td class="old">无限改稿</td><td class="new"><b>闭环有终点</b>:最大轮数 + 可度量止损,绝不空转</td></tr>
<tr><td>交付</td><td class="old">一段文字,用完即散</td><td class="new"><b>资产包文件夹</b>:路由 + 渐进式加载 + 启动指令 + 复盘 + 回归测试</td></tr>
<tr><td>改现有提示词</td><td class="old">凭感觉给意见</td><td class="new"><b>十维评分诊断</b>:零提问打分 → 一张卡片确认 → 改进版全文 + 回归对照</td></tr>
</tbody>
</table></div>
</div>
</section>
<section style="background:var(--accent-soft)"><div class="wrap">
<div class="kicker">别混淆</div>
<h2>「提示词优化」和「工作狗」是两回事</h2>
<p class="lead">前者把一句话改好;后者把一件事,变成一个调好、能反复用的 agent。同一个任务,差别长这样:</p>
<div style="background:var(--card);border:1px solid var(--line);border-radius:14px;padding:8px 20px;margin-bottom:16px">
<div style="font-weight:700;padding:12px 0 6px">📄 任务:审一份采购合同</div>
<div class="grid" style="grid-template-columns:1fr 1fr;gap:16px;padding-bottom:14px">
<div>
<div style="font-size:.8rem;color:var(--sub);font-weight:700;margin-bottom:6px">普通 AI 一问一答</div>
<ul class="clean redline" style="font-size:.9rem">
<li>贴进去问「有什么风险」,回你一段笼统的话</li>
<li>可能漏关键条款,也可能编出不存在的法条</li>
<li>这次问完,下一份合同又从头再来</li>
</ul>
</div>
<div>
<div style="font-size:.8rem;color:var(--accent);font-weight:700;margin-bottom:6px">🐾 合同审查工作狗</div>
<ul class="clean" style="font-size:.9rem">
<li>拆成 7 步走,风险定位到「第 11 页 §7.2」并附可直接用的修改文本</li>
<li>有一步专门拦「编法条」,编的直接标「待律师核查」</li>
<li>结果存成报告,下份同类合同直接复用、越用越准</li>
</ul>
</div>
</div>
</div>
<p style="color:var(--sub);font-size:.9rem">招聘筛选、数据分析、标书撰写、竞品周报……每个反复做的场景,都能这样变成一只工作狗——这才是它跟「改提示词」的本质区别。</p>
</div></section>
<section>
<div class="wrap">
<div class="kicker">机制</div>
<h2>先量活儿,再干活儿</h2>
<p class="lead">收到需求,它先掂量这活儿有多复杂,再决定给你什么——小事不小题大做,大事不敷衍了事。</p>
<div class="pipe">
<div class="card"><div class="lv">小事</div><h3>一段好提示词</h3><p>复制粘贴就能用,一句都不多问</p></div>
<div class="card"><div class="lv">多步的事</div><h3>一份操作手册</h3><p>照着一步一步做,每步都有检查点</p></div>
<div class="card"><div class="lv">复杂的事</div><h3>一条流水线</h3><p>多环节接力干活,环环有质检</p></div>
<div class="card"><div class="lv">大工程</div><h3>一支 AI 团队</h3><p>多个角色分工协作,互相把关</p></div>
</div>
<div class="chips">
<span class="chip">动手前先说清「什么算好」</span><span class="chip">关键结论多方核对</span>
<span class="chip">交付前有人专门找茬</span><span class="chip">改三轮不行就止损,绝不空转</span>
</div>
<p style="color:var(--sub);font-size:.82rem;margin-top:14px">背后是一套「六信号判级」模型,对原理感兴趣可看仓库里的方法论文档。</p>
</div>
</section>
<section>
<div class="wrap">
<div class="kicker">交付形态</div>
<h2>产出不是一段话,是能上岗的资产包</h2>
<p class="lead">理念:skill 是资产的存放形态,agent 是资产的上岗形态。文件夹平台无关,拖进任意 Agent 工作区就是一个专职数字员工。</p>
<pre><场景名>Agent/
├── AGENTS.md 路由 + 渐进式加载(执行到环节 N 才读环节 N)
├── 主控.md 系统提示词 / 验收标准 / 环节表 / 闭环终止
├── prompts/ 每环节一个提示词文件,按需加载
├── templates/ 交付模板,交付环节才读
├── 启动指令.md 固定触发话术,复制改参数即用
├── 复盘/ 四指标回填:漏审 / 误报 / 定位失败 / 虚构来源
├── 回归测试/ 改版必跑,「漏审=0、虚构来源=0」才许发布
└── 输入/ 输出/ 工作目录,交付物统一落盘</pre>
</div>
</section>
<section>
<div class="wrap">
<div class="kicker">犬舍案例</div>
<h2>明星工作狗:标书撰写 📑</h2>
<p class="lead">B2B 世界最熬人的活——通宵赶标书。让工作狗先干八成:拆评分标准、对着评分点写、废标项逐条核对,人只做判断和润色。</p>
<div class="stepline">
<span class="step">1 招标文件解析</span><span class="arrow">→</span>
<span class="step">2 评分标准拆解</span><span class="arrow">→</span>
<span class="step">3 应答矩阵</span><span class="arrow">→</span>
<span class="step">4 分章撰写</span><span class="arrow">→</span>
<span class="step">5 合规自查</span><span class="arrow">→</span>
<span class="step">6 模拟评审</span><span class="arrow">→</span>
<span class="step">7 整装交付</span>
</div>
<div class="grid g3" style="margin-top:18px">
<div class="card"><h3>三件套交付</h3>
<ul class="clean"><li>标书初稿(按评分点组织章节)</li><li>应答偏离表(逐条对应招标要求)</li><li>评分点自查清单(含扣分风险)</li></ul></div>
<div class="card"><h3>投标级红线</h3>
<ul class="clean redline"><li>资质、业绩数据只用素材库真实材料</li><li>硬性废标项逐条核对打钩</li><li>引用招标文件原文可追溯到页码</li></ul></div>
<div class="card"><h3>自带飞轮</h3>
<ul class="clean"><li>中标 / 落标复盘回填</li><li>评审意见入库变成下次弹药</li><li>历史标书模块化复用</li></ul></div>
</div>
<p style="color:var(--sub);font-size:.85rem;margin-top:14px">犬舍同款还有:合同审查(演示②)、招聘筛选(演示③)、内容营销——每只都是同一套方法造出来的资产包。</p>
</div>
</section>
<section id="start">
<div class="wrap">
<div class="kicker">怎么用</div>
<h2>不用自己配,把这句话发给你的 AI</h2>
<p class="lead">别去找 AGENTS.md、别改配置——那些交给 AI。你只要把下面这段发给 Codex / Claude Code:</p>
<pre style="border-color:var(--accent)">去 GitHub clone shandianT/Prompt-dog,读它的 SKILL.md。
以后我让你写提示词、优化提示词、或设计工作流时,就按这个 skill 的流程来。
clone 和配置你自己搞定,装好了告诉我怎么用。</pre>
<p style="color:var(--sub);font-size:.9rem;margin-top:8px">它会自己完成 clone、找到 AGENTS.md、加好路由。装不明白,就再问它一句。</p>
<div class="grid g3" style="margin-top:26px">
<div class="card"><span class="n">✓</span><h3>用豆包 / 网页版 AI</h3>
<p>没有文件系统也能用:复制仓库里 <code>assets/system-prompt.md</code> 分隔线以下那段,贴进对话第一条即可。</p></div>
<div class="card"><span class="n">✓</span><h3>直接领一只现成工作狗</h3>
<p>标书撰写、合同审查……在 <code>kennel/</code> 里。整个文件夹拖进工作区,发一句话就上岗。</p></div>
<div class="card"><span class="n">✓</span><h3>SoWork 用户</h3>
<p>把工作狗文件夹选进工作空间,几只 agent 就能在一个工作区里接力协作。</p></div>
</div>
<div class="center" style="margin-top:32px">
<a class="btn primary" href="https://github.com/shandianT/Prompt-dog" target="_blank" rel="noopener">打开 GitHub 仓库 →</a>
</div>
</div>
</section>
<footer>
<div class="wrap">
<p>PromptDog 🐕 提示词提示狗 — 把说不清的需求,变成能上岗的 Agent。</p>
<p style="margin-top:6px">作者:<a href="https://github.com/shandianT" target="_blank" rel="noopener"><img src="data:image/jpeg;base64,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" alt="Orcastao" style="width:18px;height:18px;border-radius:50%;vertical-align:-4px;margin-right:5px;border:1px solid var(--line)">Orcastao</a> · <a href="https://github.com/shandianT/Prompt-dog" target="_blank" rel="noopener">GitHub 仓库</a></p>
</div>
</footer>
<script>
const $=s=>document.querySelector(s);
const stream=$('#stream'), out=$('#outbody');
let token=0;
const sleep=(ms,t)=>new Promise(r=>setTimeout(()=>r(t===token),ms));
function scrollChat(){stream.scrollTop=stream.scrollHeight}
function scrollOut(){out.scrollTop=out.scrollHeight}
function userMsg(html){const d=document.createElement('div');d.className='msg u';d.innerHTML=html;stream.appendChild(d);scrollChat()}
async function botMsg(t,html,who='提示狗 🐕'){
const ty=document.createElement('div');ty.className='typing';ty.innerHTML='<i></i><i></i><i></i>';
stream.appendChild(ty);scrollChat();
const ok=await sleep(850,t); ty.remove();
if(!ok)return false;
const d=document.createElement('div');d.className='msg b';d.innerHTML=`<div class="who">${who}</div>`+html;
stream.appendChild(d);scrollChat();return true;
}
function el(cls,html,parent){const d=document.createElement('div');d.className=cls;d.innerHTML=html;(parent||stream).appendChild(d);return d}
function liveOn(){$('#live').style.display='';const p=$('#ph');if(p)p.remove()}
async function runStages(t,title,defs,hook){
const sc=el('stages',`<h4>⚙️ ${title}</h4>`);
const rows=defs.map(s=>{const r=document.createElement('div');r.className='st';
r.innerHTML=`<span class="ic">◌</span><span>${s[0]}</span><span class="detail">${s[1]}</span>`;sc.appendChild(r);return r});
scrollChat();
for(let i=0;i<defs.length;i++){
rows[i].className='st run';rows[i].querySelector('.ic').textContent='⟳';
if(!await sleep(defs[i][2],t))return false;
rows[i].className='st done';rows[i].querySelector('.ic').textContent='✓';scrollChat();
if(hook)hook(i);
}
return true;
}
function setAgent(id){document.querySelectorAll('.ag').forEach(a=>a.classList.remove('on'));
const a=$('#'+id);if(a)a.classList.add('on')}
/* ===== ① 造 Agent ===== */
const TREE=[
['dir','竞品分析Agent/'],
['','├── AGENTS.md <span class="cm">路由 + 渐进式加载</span>'],
['','├── 分析流程.md <span class="cm">主控:验收标准 + 环节表</span>'],
['','├── prompts/ <span class="cm">环节1 采集 … 环节5 成稿</span>'],
['','├── templates/ <span class="cm">周报模板 + JSON 契约</span>'],
['','├── 启动指令.md <span class="cm">每周一句话触发</span>'],
['','├── 复盘/ <span class="cm">四指标回填 → 越用越准</span>'],
['','├── 回归测试/ <span class="cm">改版必跑,达标才发布</span>'],
['','└── 输出/ <span class="cm">周报自动落盘</span>']
];
async function scnA(t){
setAgent('ag-dog');$('#outtitle').textContent='交付物预览 · Agent 资产包';
userMsg('我想要一个每周自动做竞品分析报告的工作流');
if(!await sleep(900,t))return;
if(!await botMsg(t,'这是个定时、多来源采集的任务,我按<b>提示链方案</b>设计。确认 4 件事——回「都按推荐」可直接通过:'))return;
if(!await sleep(400,t))return;
const card=el('ccard',`<div class="h">确认卡片(仅 1 轮)</div>
<div class="q"><b>Q1 竞品范围?</b>
<div class="opt" data-s="1"><span class="dot"></span>A. 固定 3–5 家核心竞品 <span class="star">★ 范围稳定才能做周环比</span></div>
<div class="opt"><span class="dot"></span>B. 每周自动发现新玩家</div></div>
<div class="q"><b>Q2 报告受众?</b>
<div class="opt" data-s="1"><span class="dot"></span>A. 高管摘要 + 团队附录 <span class="star">★ 一份两用</span></div>
<div class="opt"><span class="dot"></span>B. 仅内部参考</div></div>
<div class="q"><b>Q3 信息来源?</b>(可多选)
<div class="opt" data-s="1"><span class="dot"></span>A. 官网/公告 + B. 行业媒体 <span class="star">★ 公开信息可溯源</span></div>
<div class="opt"><span class="dot"></span>C. 应用商店评价</div></div>
<div class="q"><b>Q4 在哪里运行?</b>
<div class="opt" data-s="1"><span class="dot"></span>B. 带工具的 Agent 工作台 <span class="star">★ 你提到了"自动"</span></div>
<div class="opt"><span class="dot"></span>A. 普通对话窗口</div></div>`);
scrollChat();
if(!await sleep(1300,t))return;
card.querySelectorAll('.opt[data-s]').forEach((o,i)=>setTimeout(()=>o.classList.add('pick'),i*260));
if(!await sleep(1400,t))return;
userMsg('都按推荐');
if(!await sleep(700,t))return;
if(!await botMsg(t,'生效:全部 ★。开始构建<b>资产包</b>——右侧实时生成。'))return;
liveOn();
el('rep-h',`<div class="name">📦 竞品分析Agent · 资产包</div>
<div class="meta">L3 提示链 · 5 环节 · 含复盘飞轮与回归门槛 · v1.0</div>`,out);
const ft=el('ft','',out);
for(const [c,txt] of TREE){
const d=document.createElement('div');d.className=c;d.innerHTML=txt;ft.appendChild(d);
if(!await sleep(230,t))return;
d.classList.add('show');scrollOut();
}
if(!await sleep(450,t))return;
el('tiles',`<div class="tile ok"><div class="v">✓</div><div class="k">验收标准先行</div></div>
<div class="tile ok"><div class="v">✓</div><div class="k">来源强制引用</div></div>
<div class="tile ok"><div class="v">✓</div><div class="k">闭环有终点</div></div>
<div class="tile ok"><div class="v">✓</div><div class="k">拖入即上岗</div></div>`,out);scrollOut();
if(!await sleep(550,t))return;
if(!await botMsg(t,`资产包就绪 📦 一只新的「竞品分析工作狗」已入犬舍——文件夹拖进工作台即上岗,每周一说一句「跑竞品周报」。<br>
<small>想调整任何环节,说编号就行(如「环节 2 加个价格监控」)。</small>`))return;
if(!await sleep(650,t))return;
el('punch',`🐕 一句话,养出一只能上岗的工作狗<small>42 秒 · 只答了一次选择题 · 资产入犬舍,可复用、可迭代、可迁移</small>`);
scrollChat();
}
/* ===== ② 合同审查 ===== */
const LAWSTAGES=[
['1 文件解析','28 页 · 识别 142 个条款',900],
['2 事实提取','事实卡 14 项 · 3 项标【合同未约定】',1000],
['3 风险扫描','发现 7 个风险(高 2 · 中 3 · 低 2)',1500],
['4 法律核查','官方来源 2 条 · 1 项标【待律师核查】',1100],
['5 条款建议','生成 5 条示范修改文本',950],
['6 对抗审查','复核修正 2 处风险等级',950],
['7 交付生成','三件套已输出 → 右侧',650]
];
const RISKS=[
{lv:'hi',id:'R-001',loc:'§7.2 · 第 11 页',t:'逾期付款违约金畸高(责任失衡)',
q:'「甲方逾期付款的,每逾期一日按合同金额的 5% 向乙方支付违约金。」',
w:'日 5% 年化超 1800%。虽可请求法院调减,但谈判与诉讼中我方全程被动。',
f:'按逾期<b>金额</b>的 0.05%/日 计付,且累计不超过合同总额的 10%。'},
{lv:'hi',id:'R-002',loc:'§5.3 · 第 8 页',t:'乙方逾期交付完全免责(救济被架空)',
q:'「乙方逾期交付的,不承担任何责任。」',
w:'对方违约零成本,我方核心救济条款形同虚设。',
f:'删除免责表述;增加对等违约金【待填写比例】及逾期 30 日我方单方解除权。'},
{lv:'mid',id:'R-003',loc:'验收条款 · 缺失',t:'未约定验收标准与异议期',
q:'【合同未约定】全文无验收标准、验收程序及异议期条款。',
w:'交付质量争议时我方举证困难,付款条件也失去抓手。',
f:'补充:验收清单、到货后 7 日书面异议期、逾期未异议视为验收通过。'},
{lv:'mid',id:'R-004',loc:'§12.1 · 第 19 页',t:'争议管辖约定在对方所在地仲裁',
q:'「因本合同发生的争议,提交乙方所在地仲裁委员会仲裁。」',
w:'异地仲裁维权成本高、程序不可上诉。',check:1,
f:'谈判改为我方所在地或标的物所在地法院管辖【待律师确认策略】。'}
];
async function scnC(t){
setAgent('ag-law');$('#outtitle').textContent='交付物预览 · 合同风险审查报告';
userMsg(`<div class="filechip">📄 设备采购合同.pdf · 2.4 MB</div>审查这份合同。立场:<b>甲方风险优先</b>,委托方:华南智造。`);
if(!await sleep(900,t))return;
if(!await botMsg(t,'收到。多步骤、高错误代价的审查任务,按<b>七环节提示链</b>执行——交付物在右侧实时生成。','合同审查工作狗 ⚖️'))return;
if(!await sleep(400,t))return;
liveOn();
const ok=await runStages(t,'审查流水线',LAWSTAGES,i=>{
if(i===1)el('rep-h',`<div class="name">合同风险审查报告 <span style="font-size:.68rem;color:#68707c">v1.0</span></div>
<div class="meta">设备采购合同 · 立场:甲方风险优先 · 委托方:华南智造</div>`,out),scrollOut();
if(i===2)el('tiles',`<div class="tile hi"><div class="v">2</div><div class="k">高风险</div></div>
<div class="tile mid"><div class="v">3</div><div class="k">中风险</div></div>
<div class="tile lo"><div class="v">2</div><div class="k">低风险</div></div>
<div class="tile ok"><div class="v">3</div><div class="k">待律师确认</div></div>`,out),scrollOut();
if(i>=2&&i<=5){const r=RISKS[i-2];if(r){
el('risk '+r.lv,`<div class="rh"><span class="rid">${r.id}</span><span class="lvl">${r.lv==='hi'?'高风险':'中风险'}</span>
<span class="loc">${r.loc}</span></div><b>${r.t}</b>
<div class="quote">${r.q}</div><div class="why">${r.w}</div>
<div class="fix"><b>示范修改</b> ${r.f}</div>${r.check?'<span class="tag-check">待律师核查</span>':''}`,out);scrollOut();}}
});
if(!ok)return;
if(!await sleep(450,t))return;
if(!await botMsg(t,`审查完成 ✅ 三件套已生成:<b>审查报告</b>(右侧)、<b>原文逐条批注</b>、<b>JSON 风险清单</b>。3 项已列入待律师确认清单。<br><small>本报告为律师初审工作底稿,不构成最终法律意见。</small>`,'合同审查工作狗 ⚖️'))return;
if(!await sleep(650,t))return;
el('punch',`⚡ 全流程 3 分钟(演示已加速)<small>相当于人工初审 2–3 小时 · 风险定位到页码条款 · 修改文本直接可用</small>`);
scrollChat();
}
/* ===== ③ 招聘筛选 ===== */
const HRSTAGES=[
['1 JD 解析','硬性条件 4 项 · 加分项 3 项',850],
['2 简历解析','86 份 · 提取年限/技术栈/稳定性',1300],
['3 硬性初筛','淘汰 65 份,每份附可追溯理由',1200],
['4 加分排序','评分模型:技能 50% + 经验 30% + 稳定性 20%',1100],
['5 交付','A/B 分级名单 + 每人定制面试题',700]
];
const CANDS=[
{lv:'ok',id:'A 级',n:'张某',s:'92',t:'8 年 Java · Spring Cloud 微服务 · 千万级并发订单系统 · 带过 6 人小组',
w:'与 JD 的高并发 + 带队要求双匹配,近三年技术栈无断档。',
f:'定制面试题:请他拆解一次线上高并发事故的处置链路(简历第 2 段项目)。',check:'建议深挖:近 2 年 2 次跳槽原因'},
{lv:'ok',id:'A 级',n:'李某',s:'88',t:'6 年 · 双一流硕士 · 开源中间件贡献者 · 亿级日志系统',
w:'技术深度突出;管理经验为 0,与「带小团队优先」部分错配。',
f:'定制面试题:如何看待从 IC 转 TL——考察管理意愿而非经验。'},
{lv:'mid',id:'B 级',n:'王某',s:'76',t:'4 年经验 · 技术栈完全匹配 · 曾获公司年度技术之星',
w:'年限不满硬性 5 年,但其余项全绿。',
f:'【待 HR 确认】是否放宽年限;若放宽则升 A 级。',check:'需人工决策'}
];
async function scnD(t){
setAgent('ag-hr');$('#outtitle').textContent='交付物预览 · 简历筛选报告';
userMsg(`<div class="filechip">🗂️ 简历包.zip · 86 份</div>筛选「高级 Java 工程师」:5 年以上、微服务、高并发经验,能带小团队优先。`);
if(!await sleep(900,t))return;
if(!await botMsg(t,'收到。按 JD 拆<b>硬性条件 / 加分项</b>两层筛选,每条淘汰理由可追溯——名单在右侧实时生成。','招聘筛选工作狗 🧑💼'))return;
if(!await sleep(400,t))return;
liveOn();
const ok=await runStages(t,'筛选流水线',HRSTAGES,i=>{
if(i===0)el('rep-h',`<div class="name">简历筛选报告 · 高级 Java 工程师</div>
<div class="meta">硬性:5 年+ / 微服务 / 高并发 / 本科+ · 加分:带队 / 开源 / 大厂背景</div>`,out),scrollOut();
if(i===2)el('tiles',`<div class="tile"><div class="v">86</div><div class="k">收到简历</div></div>
<div class="tile ok"><div class="v">7</div><div class="k">A 级必面</div></div>
<div class="tile mid"><div class="v">14</div><div class="k">B 级待定</div></div>
<div class="tile hi"><div class="v">65</div><div class="k">淘汰(附理由)</div></div>`,out),scrollOut();
if(i>=2&&i<=4){const c=CANDS[i-2];if(c){
el('risk '+c.lv,`<div class="rh"><span class="rid">${c.id} · ${c.n}</span><span class="lvl">匹配 ${c.s} 分</span></div>
<b>${c.t}</b><div class="why">${c.w}</div>
<div class="fix"><b>面试准备</b> ${c.f}</div>${c.check?`<span class="tag-check">${c.check}</span>`:''}`,out);scrollOut();}}
});
if(!ok)return;
if(!await sleep(450,t))return;
if(!await botMsg(t,`筛选完成 ✅ A 级 7 人(右侧为前 2)+ B 级 14 人待定。<br>每条淘汰理由均可追溯到 JD 条款,<b>未使用性别 / 年龄 / 地域等歧视性因素</b>。<br><small>B 级中 3 人涉硬性条件放宽,已标注待 HR 决策。</small>`,'招聘筛选工作狗 🧑💼'))return;
if(!await sleep(650,t))return;
el('punch',`🧑💼 86 份简历 → 7 个必面的人<small>3 分钟 · 每人自带定制面试题 · 淘汰理由全部可追溯</small>`);
scrollChat();
}
/* ===== ④ 标书撰写 ===== */
const BIDSTAGES=[
['1 招标文件解析','118 页 · 提取评分表 + 资格要求',1000],
['2 评分点矩阵','技术 55 · 商务 25 · 报价 20,逐项映射',1000],
['3 废标项检查','21 项硬性要求 · 2 项标红提醒',1100],
['4 按评分点撰写','技术方案逐条对标评分细则成稿',1300],
['5 模拟评标','以评委视角打分 82 → 补强后 89',900]
];
const BIDS=[
{lv:'hi',id:'废标风险 1',t:'近三年同类业绩证明材料不全',
w:'招标文件 §3.2 资格审查为一票否决项:需同类项目合同 + 验收证明各 3 份,缺一即废标。',
f:'已列入必办清单:补齐 3 份合同关键页扫描件 + 对应验收单。'},
{lv:'hi',id:'废标风险 2',t:'保证金到账截止早于截标 48 小时',
w:'§2.7 要求投标保证金在开标前 2 个工作日到账,逾期视为无效投标——最容易栽的坑。',
f:'提醒财务:最迟下周五 17:00 前汇出,回执归入商务标附件。'},
{lv:'ok',id:'技术标 · 得分点',t:'实施方案(20 分)按评分细则 6 小项逐条成稿',
w:'每小项单独成节、节标题与评分表措辞一致——评委按表找点,看得见才给分。'}
];
async function scnE(t){
setAgent('ag-bid');$('#outtitle').textContent='交付物预览 · 投标文件初稿';
userMsg(`<div class="filechip">📑 智慧园区项目招标文件.pdf · 118 页</div>下周二截标。按这份招标文件出投标初稿,重点保技术分。`);
if(!await sleep(900,t))return;
if(!await botMsg(t,'收到。先拆评分表再动笔——<b>每一段都对着评分点写</b>,废标项单独过一遍。初稿在右侧实时生成。','标书撰写工作狗 📑'))return;
if(!await sleep(400,t))return;
liveOn();
const ok=await runStages(t,'投标流水线',BIDSTAGES,i=>{
if(i===0)el('rep-h',`<div class="name">投标文件初稿 · 智慧园区项目</div>
<div class="meta">技术 55 · 商务 25 · 报价 20 · 距截标 6 天</div>`,out),scrollOut();
if(i===2){
el('tiles',`<div class="tile ok"><div class="v">37</div><div class="k">评分点全覆盖</div></div>
<div class="tile"><div class="v">21</div><div class="k">硬性要求已核</div></div>
<div class="tile hi"><div class="v">2</div><div class="k">废标风险标红</div></div>
<div class="tile mid"><div class="v">5</div><div class="k">需补证明材料</div></div>`,out);scrollOut();
BIDS.slice(0,2).forEach((b,j)=>setTimeout(()=>{
el('risk '+b.lv,`<div class="rh"><span class="rid">${b.id}</span><span class="lvl">一票否决</span></div><b>${b.t}</b>
<div class="why">${b.w}</div><div class="fix"><b>处理</b> ${b.f}</div>`,out);scrollOut();
},j*350));
}
if(i===3){const b=BIDS[2];
el('risk '+b.lv,`<div class="rh"><span class="rid">${b.id}</span></div><b>${b.t}</b><div class="why">${b.w}</div>`,out);scrollOut();}
if(i===4)el('tiles',`<div class="tile hi"><div class="v">82</div><div class="k">首轮模拟分</div></div>
<div class="tile ok"><div class="v">89</div><div class="k">补强后模拟分</div></div>
<div class="tile ok"><div class="v">3</div><div class="k">补强建议</div></div>
<div class="tile ok"><div class="v">✓</div><div class="k">废标零遗漏</div></div>`,out),scrollOut();
});
if(!ok)return;
if(!await sleep(700,t))return;
if(!await botMsg(t,`初稿完成 ✅ 技术方案 37 个评分点全覆盖;2 个废标风险已标红并附办理清单;<b>模拟评标 89 分</b>,3 条补强建议附在文末。<br><small>商务与报价部分需贵司确认后填入;标红处务必人工复核。</small>`,'标书撰写工作狗 📑'))return;
if(!await sleep(650,t))return;
el('punch',`📑 118 页招标文件 → 对着评分表写的投标初稿<small>3 分钟 · 废标项零遗漏 · 每一段都对应到一个评分点</small>`);
scrollChat();
}
/* ===== 控制 ===== */
const SCN={A:scnA,C:scnC,D:scnD,E:scnE};
let current='A';
function reset(){stream.innerHTML='';out.innerHTML='<div class="placeholder" id="ph">交付物将在这里实时生成</div>';
$('#live').style.display='none'}
function play(s){current=s;token++;const t=token;reset();
['A','C','D','E'].forEach(k=>$('#tab'+k).classList.toggle('on',k===s));
SCN[s](t)}
function replay(){play(current)}
/* 进入视口才开播 */
let started=false;
const io=new IntersectionObserver(es=>{es.forEach(e=>{if(e.isIntersecting&&!started){started=true;play('A');io.disconnect()}})},{threshold:.25});
io.observe($('#demo'));
</script>
</div>
<div id="enPage" data-lang-page="en" hidden>
<div class="hero"><div class="wrap">
<div class="dog">🐕</div>
<h1>Prompt<em>Dog</em></h1>
<div class="tagline">Turns what you can't articulate into agents that work.</div>
<p class="sub">A meta-agent that designs agents. Say one vague sentence — it confirms the details with multiple-choice cards, then delivers a ready-to-use prompt, SOP, or a full agent asset package with built-in QA.</p>
<div class="btns">
<a class="btn primary" href="https://github.com/shandianT/Prompt-dog" target="_blank" rel="noopener">GitHub</a>
<a class="btn ghost" href="https://github.com/shandianT" target="_blank" rel="noopener"><img src="data:image/jpeg;base64,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" alt="Orcastao" style="width:22px;height:22px;border-radius:50%;vertical-align:-5px;margin-right:7px;border:1px solid var(--line)">Author · Orcastao</a>
<a class="btn ghost" href="#zh" onclick="setLang('zh');return false;">🐕 Live Demo (中文)</a>
<a class="btn ghost" href="#zh" onclick="setLang('zh');return false;">中文</a>
</div>
</div></div>
<div class="wrap" style="max-width:860px;margin:-20px auto 0;position:relative;z-index:2">
<div style="background:var(--card);border:1.5px dashed var(--accent);border-radius:14px;padding:14px 22px;font-size:.93rem;text-align:center">
What this is: <b>PromptDog isn't a website or an app</b> — it's a <b>skill package you install into your AI</b> (Codex / Claude Code).
Download the folder, hand it to your agent, then just say "build me a WorkDog for weekly reports." <span style="color:var(--sub)">This page is only a demo.</span>
</div>
</div>
<section><div class="wrap">
<div class="kicker">The problem</div>
<h2>The hardest part of putting AI to work is spelling things out</h2>
<p class="lead">PromptDog takes the spelling-out off your plate — it guesses first, you just pick. Why the current way is exhausting:</p>
<div class="grid">
<div class="card"><span class="n">1</span><h3>Too much to explain</h3><p>Say “write my work summary” and it fires back: which highlights? what metrics? for whom? — typing all that out is more work than just writing it yourself.</p></div>
<div class="card"><span class="n">2</span><h3>Complex work gets one paragraph</h3><p>Contract review, resume screening — process jobs — and it returns one professional-sounding paragraph. What got missed? Is it right? You can't tell.</p></div>
<div class="card"><span class="n">3</span><h3>Tuned-in experience doesn't stick</h3><p>You finally got it dialed in; the next task starts from zero. Your know-how evaporates into chat history.</p></div>
</div>
</div></section>
<section id="en-demo" style="padding-top:8px"><div class="wrap" style="max-width:1240px">
<div class="center" style="margin-bottom:16px">
<div class="kicker">LIVE DEMO</div>
<h2>One PromptDog, many WorkDogs</h2>
<p class="lead" style="margin:8px auto 18px">Meet the two roles first, then watch each one work — auto-plays · switch scenarios · replay.</p>
</div>
<div class="roles">
<div class="role"><div class="rt">🐕 PromptDog — <span class="em">the skill that builds agents</span></div>
<p>Say a vague need; it asks multiple-choice questions to lock the industry details, then generates a complete agent asset package. <b>Demo ① is PromptDog itself at work.</b></p></div>
<div class="role"><div class="rt">🐾 WorkDog — the scenario-specific agent it produces</div>
<p>Drop the folder into your workspace and it's on duty — dedicated to one scenario, living in the kennel/, getting sharper with use. <b>Demos ②③④ are three WorkDogs already on the job.</b></p></div>
</div>
<div class="genflow">
<span class="gstep">Your one line</span><span class="ga">→</span>
<span class="gstep">🐕 multiple-choice confirm</span><span class="ga">→</span>
<span class="gstep">generate asset package</span><span class="ga">→</span>
<span class="gstep">drop into workspace</span><span class="ga">→</span>
<span class="gstep">🐾 WorkDog on duty</span>
</div>
<div class="qualbar">Same model — why is a WorkDog better than a plain agent? A plain agent dumps one prompt in one shot and hopes. A WorkDog <b>runs in stages, sets acceptance criteria first, has an adversarial reviewer hunt for flaws, and sharpens through retros & regression</b> — quality is designed, not lucked into.</div>
<div class="appframe">
<div class="app">
<aside class="side">
<div class="logo">🐕 PromptDog</div>
<div class="sec">My digital employees</div>
<div class="ag" id="en-ag-dog"><span class="av">🐕</span><span>PromptDog<small>Prompts · SOPs · Workflows</small></span></div>
<div class="ag" id="en-ag-law"><span class="av">⚖️</span><span>Contract Review<small>Paste a contract, auto first-pass</small></span></div>
<div class="ag" id="en-ag-hr"><span class="av">🧑💼</span><span>Recruiting Screener<small>Resume batch → shortlist</small></span></div>
<div class="ag" id="en-ag-bid"><span class="av">📑</span><span>Bid Writing<small>Tender → bid draft</small></span></div>
<div class="ag"><span class="av">📊</span><span>Data Dashboard<small>Excel → business analysis</small></span></div>
</aside>
<header class="d-top">
<span class="title">PromptDog Workbench</span><span class="badge-demo">DEMO</span>
<div class="tabs">
<span class="tgroup">🐕 PromptDog</span>
<button class="tab" id="en-tabA" onclick="enPlay('A')">① Build a WorkDog</button>
<span class="tgroup">🐾 WorkDogs</span>
<button class="tab" id="en-tabC" onclick="enPlay('C')">② Contract review</button>
<button class="tab" id="en-tabD" onclick="enPlay('D')">③ Recruiting</button>
<button class="tab" id="en-tabE" onclick="enPlay('E')">④ Bid writing</button>
</div>
<button class="replay" onclick="enReplay()">↻ Replay</button>
</header>
<main class="d-chat">
<div class="stream" id="en-stream"></div>
<div class="inputbar"><div class="box">Auto-playing demo… (switch scenarios / replay)</div><button class="send">↑</button></div>
</main>
<aside class="d-out">
<div class="head"><span class="t" id="en-outtitle">Deliverable preview</span><span class="live" id="en-live" style="display:none">Generating live</span></div>
<div class="outbody" id="en-outbody"></div>
</aside>
</div>
</div>
</div></section>
<section><div class="wrap">
<div class="kicker">Quality by design</div>
<h2>It sizes the job before doing the job</h2>
<div class="grid" style="margin-top:20px">
<div class="card"><h3>Small ask</h3><p>One great prompt — copy, paste, done. No questions asked.</p></div>
<div class="card"><h3>Multi-step</h3><p>An SOP with a checkpoint at every step.</p></div>
<div class="card"><h3>Complex</h3><p>A staged pipeline — clean context per stage, checks between stages.</p></div>
<div class="card"><h3>Heavy</h3><p>An AI team with divided roles that review each other.</p></div>
</div>
<p class="lead" style="margin-top:22px">Four safeguards on every delivery: acceptance criteria agreed up front · critical claims cross-checked · an adversarial reviewer before shipping · a hard stop-loss after three rounds. Quality is designed, not lucked into.</p>
</div></section>
<section><div class="wrap">
<div class="kicker">The kennel</div>
<h2>Ready-to-work WorkDogs</h2>
<div class="tblwrap"><table>
<thead><tr><th>WorkDog</th><th>What it does</th></tr></thead>
<tbody>
<tr><td>📑 <b>Bid Writing</b></td><td>Parses the tender, builds a scoring matrix, drafts per scoring point, checks every knockout clause, runs a mock evaluation.</td></tr>
<tr><td>⚖️ <b>Contract Review</b></td><td>7-stage first-pass review with law-firm red lines; delivers report + clause annotations + structured JSON.</td></tr>
<tr><td>✍️ <b>Content Marketing</b></td><td>"Trust through transparency" methodology; corpus-grounded — it never fabricates a number; tri-cut per platform.</td></tr>
</tbody>
</table></div>
<p class="lead" style="margin-top:18px">Every WorkDog ships with launch commands, a retro flywheel and regression gates — the more you use it, the sharper it gets.</p>
<div class="center" style="margin-top:26px"><a class="btn primary" href="https://github.com/shandianT/Prompt-dog" target="_blank" rel="noopener">Get PromptDog →</a></div>
</div></section>
<footer><div class="wrap">
<p>PromptDog 🐕 — Turns what you can't articulate into agents that work.</p>
<p style="margin-top:6px">Author: <a href="https://github.com/shandianT" target="_blank" rel="noopener"><img src="data:image/jpeg;base64,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" alt="Orcastao" style="width:18px;height:18px;border-radius:50%;vertical-align:-4px;margin-right:5px;border:1px solid var(--line)">Orcastao</a> · <a href="https://github.com/shandianT/Prompt-dog" target="_blank" rel="noopener">GitHub</a> · <a href="#zh" onclick="setLang('zh');return false;">中文版</a></p>
</div></footer>
</div>
<script>
(function(){
function applyLang(lang, shouldScroll){
var zh=document.getElementById('zhPage');
var en=document.getElementById('enPage');
if(!zh || !en) return;
var isEn=lang==='en';
zh.hidden=isEn;
en.hidden=!isEn;
document.documentElement.lang=isEn?'en':'zh-CN';
document.title=isEn
? 'PromptDog — Turns what you cannot articulate into agents that work'
: 'PromptDog 提示词提示狗 — 把说不清的需求,变成能上岗的 Agent';
if(location.hash !== (isEn ? '#en' : '#zh')) history.replaceState(null,'',isEn?'#en':'#zh');
try{localStorage.setItem('promptdog_lang', isEn?'en':'zh');}catch(e){}
if(isEn && window.enStart) setTimeout(window.enStart,60);
if(shouldScroll !== false) window.scrollTo({top:0,behavior:'smooth'});
}
window.setLang=applyLang;
document.addEventListener('DOMContentLoaded', function(){
var saved='zh';
try{saved=localStorage.getItem('promptdog_lang') || 'zh';}catch(e){}
var lang=location.hash==='#en'?'en':(location.hash==='#zh'?'zh':saved);
applyLang(lang,false);
});
})();
</script>
<script>
/* ===== English demo engine (scoped to #enPage, isolated via IIFE) ===== */
(function(){
const R=document.getElementById('enPage'); if(!R) return;
const $=sel=>R.querySelector(sel);
const stream=$('#en-stream'), out=$('#en-outbody');
let token=0;
const sleep=(ms,t)=>new Promise(r=>setTimeout(()=>r(t===token),ms));
const scrollChat=()=>{stream.scrollTop=stream.scrollHeight};
const scrollOut=()=>{out.scrollTop=out.scrollHeight};
function userMsg(html){const d=document.createElement('div');d.className='msg u';d.innerHTML=html;stream.appendChild(d);scrollChat()}
async function botMsg(t,html,who='PromptDog 🐕'){
const ty=document.createElement('div');ty.className='typing';ty.innerHTML='<i></i><i></i><i></i>';
stream.appendChild(ty);scrollChat();const ok=await sleep(850,t);ty.remove();if(!ok)return false;
const d=document.createElement('div');d.className='msg b';d.innerHTML=`<div class="who">${who}</div>`+html;
stream.appendChild(d);scrollChat();return true;
}
function el(cls,html,parent){const d=document.createElement('div');d.className=cls;d.innerHTML=html;(parent||stream).appendChild(d);return d}
function liveOn(){$('#en-live').style.display='';const p=$('#en-ph');if(p)p.remove()}
async function runStages(t,title,defs,hook){
const sc=el('stages',`<h4>⚙️ ${title}</h4>`);
const rows=defs.map(x=>{const r=document.createElement('div');r.className='st';
r.innerHTML=`<span class="ic">◌</span><span>${x[0]}</span><span class="detail">${x[1]}</span>`;sc.appendChild(r);return r});
scrollChat();
for(let i=0;i<defs.length;i++){
rows[i].className='st run';rows[i].querySelector('.ic').textContent='⟳';
if(!await sleep(defs[i][2],t))return false;
rows[i].className='st done';rows[i].querySelector('.ic').textContent='✓';scrollChat();
if(hook)hook(i);
}
return true;
}
function setAgent(id){R.querySelectorAll('.ag').forEach(a=>a.classList.remove('on'));const a=$('#'+id);if(a)a.classList.add('on')}
/* ① Build a WorkDog */
const TREE=[
['dir','CompetitorAnalysisAgent/'],
['','├── AGENTS.md <span class="cm">routing + progressive loading</span>'],
['','├── analysis-flow.md <span class="cm">controller: acceptance criteria + stage table</span>'],
['','├── prompts/ <span class="cm">stage 1 collect … stage 5 draft</span>'],
['','├── templates/ <span class="cm">weekly report + JSON contract</span>'],
['','├── launch-commands.md <span class="cm">one line, triggered weekly</span>'],
['','├── retro/ <span class="cm">4-metric refill → sharper with use</span>'],
['','├── regression/ <span class="cm">must-run on changes; ship only if it passes</span>'],
['','└── output/ <span class="cm">reports auto-saved</span>']
];
async function scnA(t){
setAgent('en-ag-dog');$('#en-outtitle').textContent='Deliverable preview · Agent asset package';
userMsg('I want a workflow that auto-produces a weekly competitor analysis report');
if(!await sleep(900,t))return;
if(!await botMsg(t,'A scheduled, multi-source task — I’ll design it as a <b>prompt chain</b>. Confirm 4 things — reply “all recommended” to pass:'))return;
if(!await sleep(400,t))return;
const card=el('ccard',`<div class="h">Confirmation card (1 round)</div>
<div class="q"><b>Q1 Competitor scope?</b>
<div class="opt" data-s="1"><span class="dot"></span>A. Fixed 3–5 core competitors <span class="star">★ stable scope enables week-over-week</span></div>
<div class="opt"><span class="dot"></span>B. Auto-discover new players weekly</div></div>
<div class="q"><b>Q2 Report audience?</b>
<div class="opt" data-s="1"><span class="dot"></span>A. Exec summary + team appendix <span class="star">★ one report, two uses</span></div>
<div class="opt"><span class="dot"></span>B. Internal reference only</div></div>
<div class="q"><b>Q3 Sources?</b> (multi-select)
<div class="opt" data-s="1"><span class="dot"></span>A. Official sites + B. Industry media <span class="star">★ public, traceable</span></div>
<div class="opt"><span class="dot"></span>C. App-store reviews</div></div>
<div class="q"><b>Q4 Where does it run?</b>
<div class="opt" data-s="1"><span class="dot"></span>B. Tool-enabled agent workspace <span class="star">★ you said “auto”</span></div>
<div class="opt"><span class="dot"></span>A. Plain chat window</div></div>`);
scrollChat();
if(!await sleep(1300,t))return;
card.querySelectorAll('.opt[data-s]').forEach((o,i)=>setTimeout(()=>o.classList.add('pick'),i*260));
if(!await sleep(1400,t))return;
userMsg('all recommended');
if(!await sleep(700,t))return;
if(!await botMsg(t,'Effective: all ★. Building the <b>asset package</b> — generating live on the right.'))return;
liveOn();
el('rep-h',`<div class="name">📦 Competitor-Analysis Agent · asset package</div>
<div class="meta">L3 prompt chain · 5 stages · retro flywheel + regression gate · v1.0</div>`,out);
const ft=el('ft','',out);
for(const [c,txt] of TREE){const d=document.createElement('div');d.className=c;d.innerHTML=txt;ft.appendChild(d);
if(!await sleep(230,t))return;d.classList.add('show');scrollOut();}
if(!await sleep(450,t))return;
el('tiles',`<div class="tile ok"><div class="v">✓</div><div class="k">Criteria-first</div></div>
<div class="tile ok"><div class="v">✓</div><div class="k">Sources enforced</div></div>
<div class="tile ok"><div class="v">✓</div><div class="k">Loop with an end</div></div>
<div class="tile ok"><div class="v">✓</div><div class="k">Drop-in ready</div></div>`,out);scrollOut();
if(!await sleep(550,t))return;
if(!await botMsg(t,`Asset package ready 📦 A new “Competitor-Analysis WorkDog” is in the kennel — drop the folder in and it’s on duty; every Monday just say “run the weekly competitor report.”<br><small>Want to tweak a stage? Just name the number (e.g. “add price monitoring to stage 2”).</small>`))return;
if(!await sleep(650,t))return;
el('punch',`🐕 One line → a WorkDog ready for duty<small>42 sec · one multiple-choice answer · asset in the kennel — reusable, iterable, portable</small>`);
scrollChat();
}
/* ② Contract review */
const LAWSTAGES=[
['1 Parse document','28 pages · 142 clauses identified',900],
['2 Extract facts','14 fact items · 3 marked [not specified]',1000],
['3 Scan risks','7 risks found (2 high · 3 mid · 2 low)',1500],
['4 Legal check','2 official sources · 1 [pending lawyer review]',1100],
['5 Clause suggestions','5 sample revisions drafted',950],
['6 Adversarial review','2 risk levels re-checked & fixed',950],
['7 Generate delivery','three-piece set output → right',650]
];
const RISKS=[
{lv:'hi',id:'R-001',loc:'§7.2 · p.11',t:'Excessive late-payment penalty (imbalanced liability)',
q:'“If Party A pays late, it shall pay Party B 5% of the contract amount per day of delay.”',
w:'5%/day annualizes to over 1800%. Courts may reduce it, but you’re on the back foot throughout negotiation and litigation.',
f:'Charge 0.05%/day of the <b>overdue amount</b>, capped at 10% of total contract value.'},
{lv:'hi',id:'R-002',loc:'§5.3 · p.8',t:'Party B fully exempt for late delivery (remedy gutted)',
q:'“Party B shall bear no liability for late delivery.”',
w:'The counterparty breaches at zero cost; your core remedy clause is void in effect.',
f:'Delete the exemption; add a reciprocal penalty [rate TBD] and your unilateral termination right after 30 days’ delay.'},
{lv:'mid',id:'R-003',loc:'Acceptance clause · missing',t:'No acceptance standard or objection period',
q:'[not specified] No acceptance standard, procedure, or objection-period clause anywhere.',
w:'Hard to prove quality disputes; payment conditions lose their anchor too.',
f:'Add: acceptance checklist, 7-day written objection window after delivery, deemed accepted if no objection.'},
{lv:'mid',id:'R-004',loc:'§12.1 · p.19',t:'Disputes arbitrated at the counterparty’s location',
q:'“Disputes shall be arbitrated by the commission at Party B’s location.”',
w:'Cross-region arbitration is costly and non-appealable.',check:1,
f:'Negotiate to a court at your location or the goods’ location [strategy pending lawyer].'}
];
async function scnC(t){
setAgent('en-ag-law');$('#en-outtitle').textContent='Deliverable preview · Contract risk review report';
userMsg(`<div class="filechip">📄 Equipment-Purchase-Contract.pdf · 2.4 MB</div>Review this contract. Position: <b>Party A risk priority</b>, client: South China Intelligent Mfg.`);
if(!await sleep(900,t))return;
if(!await botMsg(t,'Got it. A multi-step, high-error-cost review — running the <b>7-stage prompt chain</b>; deliverables generate live on the right.','Contract Review WorkDog ⚖️'))return;
if(!await sleep(400,t))return;
liveOn();