@my-life-buddies/buddy-creator-skill 1.6.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.
- package/INSTALL.md +25 -0
- package/PATCHES.md +57 -0
- package/README.md +76 -0
- package/SKILL.md +78 -0
- package/THIRD_PARTY_NOTICES.md +154 -0
- package/agents/openai.yaml +4 -0
- package/assets/licenses/bail.txt +26 -0
- package/assets/licenses/ccount.txt +26 -0
- package/assets/licenses/character-entities-html4.txt +26 -0
- package/assets/licenses/character-entities-legacy.txt +26 -0
- package/assets/licenses/character-entities.txt +26 -0
- package/assets/licenses/character-reference-invalid.txt +26 -0
- package/assets/licenses/comma-separated-tokens.txt +26 -0
- package/assets/licenses/debug.txt +24 -0
- package/assets/licenses/decode-named-character-reference.txt +26 -0
- package/assets/licenses/dequal.txt +25 -0
- package/assets/licenses/devlop.txt +26 -0
- package/assets/licenses/escape-string-regexp.txt +13 -0
- package/assets/licenses/estree-util-is-identifier-name.txt +26 -0
- package/assets/licenses/extend.txt +27 -0
- package/assets/licenses/hast-util-to-jsx-runtime.txt +26 -0
- package/assets/licenses/hast-util-whitespace.txt +26 -0
- package/assets/licenses/html-url-attributes.txt +25 -0
- package/assets/licenses/inline-style-parser.txt +13 -0
- package/assets/licenses/is-alphabetical.txt +26 -0
- package/assets/licenses/is-alphanumerical.txt +26 -0
- package/assets/licenses/is-decimal.txt +26 -0
- package/assets/licenses/is-hexadecimal.txt +26 -0
- package/assets/licenses/is-plain-obj.txt +13 -0
- package/assets/licenses/longest-streak.txt +26 -0
- package/assets/licenses/markdown-table.txt +26 -0
- package/assets/licenses/mdast-util-find-and-replace.txt +26 -0
- package/assets/licenses/mdast-util-from-markdown.txt +26 -0
- package/assets/licenses/mdast-util-gfm-autolink-literal.txt +26 -0
- package/assets/licenses/mdast-util-gfm-footnote.txt +26 -0
- package/assets/licenses/mdast-util-gfm-strikethrough.txt +26 -0
- package/assets/licenses/mdast-util-gfm-table.txt +26 -0
- package/assets/licenses/mdast-util-gfm-task-list-item.txt +26 -0
- package/assets/licenses/mdast-util-gfm.txt +26 -0
- package/assets/licenses/mdast-util-mdx-expression.txt +26 -0
- package/assets/licenses/mdast-util-mdx-jsx.txt +26 -0
- package/assets/licenses/mdast-util-mdxjs-esm.txt +26 -0
- package/assets/licenses/mdast-util-phrasing.txt +27 -0
- package/assets/licenses/mdast-util-to-hast.txt +26 -0
- package/assets/licenses/mdast-util-to-markdown.txt +26 -0
- package/assets/licenses/mdast-util-to-string.txt +26 -0
- package/assets/licenses/micromark-core-commonmark.txt +26 -0
- package/assets/licenses/micromark-extension-gfm-autolink-literal.txt +26 -0
- package/assets/licenses/micromark-extension-gfm-footnote.txt +26 -0
- package/assets/licenses/micromark-extension-gfm-strikethrough.txt +26 -0
- package/assets/licenses/micromark-extension-gfm-table.txt +26 -0
- package/assets/licenses/micromark-extension-gfm-tagfilter.txt +26 -0
- package/assets/licenses/micromark-extension-gfm-task-list-item.txt +26 -0
- package/assets/licenses/micromark-extension-gfm.txt +26 -0
- package/assets/licenses/micromark-factory-destination.txt +26 -0
- package/assets/licenses/micromark-factory-label.txt +26 -0
- package/assets/licenses/micromark-factory-space.txt +26 -0
- package/assets/licenses/micromark-factory-title.txt +26 -0
- package/assets/licenses/micromark-factory-whitespace.txt +26 -0
- package/assets/licenses/micromark-util-character.txt +26 -0
- package/assets/licenses/micromark-util-chunked.txt +26 -0
- package/assets/licenses/micromark-util-classify-character.txt +26 -0
- package/assets/licenses/micromark-util-combine-extensions.txt +26 -0
- package/assets/licenses/micromark-util-decode-numeric-character-reference.txt +26 -0
- package/assets/licenses/micromark-util-decode-string.txt +26 -0
- package/assets/licenses/micromark-util-encode.txt +26 -0
- package/assets/licenses/micromark-util-html-tag-name.txt +26 -0
- package/assets/licenses/micromark-util-normalize-identifier.txt +26 -0
- package/assets/licenses/micromark-util-resolve-all.txt +26 -0
- package/assets/licenses/micromark-util-sanitize-uri.txt +26 -0
- package/assets/licenses/micromark-util-subtokenize.txt +26 -0
- package/assets/licenses/micromark-util-symbol.txt +26 -0
- package/assets/licenses/micromark-util-types.txt +26 -0
- package/assets/licenses/micromark.txt +26 -0
- package/assets/licenses/ms.txt +25 -0
- package/assets/licenses/parse-entities.txt +26 -0
- package/assets/licenses/phosphor-icons--react.txt +25 -0
- package/assets/licenses/property-information.txt +26 -0
- package/assets/licenses/react-dom.txt +25 -0
- package/assets/licenses/react-markdown.txt +25 -0
- package/assets/licenses/react.txt +25 -0
- package/assets/licenses/remark-gfm.txt +26 -0
- package/assets/licenses/remark-parse.txt +25 -0
- package/assets/licenses/remark-rehype.txt +26 -0
- package/assets/licenses/remark-stringify.txt +25 -0
- package/assets/licenses/scheduler.txt +25 -0
- package/assets/licenses/space-separated-tokens.txt +26 -0
- package/assets/licenses/stringify-entities.txt +26 -0
- package/assets/licenses/style-to-js.txt +26 -0
- package/assets/licenses/style-to-object.txt +26 -0
- package/assets/licenses/trim-lines.txt +26 -0
- package/assets/licenses/trough.txt +25 -0
- package/assets/licenses/types--debug.txt +25 -0
- package/assets/licenses/types--estree-jsx.txt +25 -0
- package/assets/licenses/types--estree.txt +25 -0
- package/assets/licenses/types--hast.txt +25 -0
- package/assets/licenses/types--mdast.txt +25 -0
- package/assets/licenses/types--ms.txt +25 -0
- package/assets/licenses/types--unist.txt +25 -0
- package/assets/licenses/ungap--structured-clone.txt +19 -0
- package/assets/licenses/unified.txt +25 -0
- package/assets/licenses/unist-util-is.txt +26 -0
- package/assets/licenses/unist-util-position.txt +26 -0
- package/assets/licenses/unist-util-stringify-position.txt +26 -0
- package/assets/licenses/unist-util-visit-parents.txt +26 -0
- package/assets/licenses/unist-util-visit.txt +26 -0
- package/assets/licenses/vfile-message.txt +26 -0
- package/assets/licenses/vfile.txt +25 -0
- package/assets/licenses/zwitch.txt +26 -0
- package/assets/preview/assets/index-B5VmkoSx.js +39 -0
- package/assets/preview/assets/index-DWKP6b-3.css +4 -0
- package/assets/preview/brand-logo.png +0 -0
- package/assets/preview/brand.css +100 -0
- package/assets/preview/index.html +7 -0
- package/assets/preview/reader.css +165 -0
- package/assets/preview/reader.js +135 -0
- package/assets/preview/widgets.css +1 -0
- package/assets/preview/widgets.js +168 -0
- package/assets/widget-reference/conversation.png +0 -0
- package/assets/widget-reference/expanded.png +0 -0
- package/assets/widget-v2/app.js +62 -0
- package/assets/widget-v2/style.css +1 -0
- package/assets/widget-v3/app.js +65 -0
- package/assets/widget-v3/style.css +103 -0
- package/assets/widget-v4/app.js +66 -0
- package/assets/widget-v4/style.css +187 -0
- package/package.json +37 -0
- package/references/artifact-schema.md +70 -0
- package/references/catalog.json +401 -0
- package/references/cli-workflow.md +15 -0
- package/references/definition.md +24 -0
- package/references/dialogue-examples.md +133 -0
- package/references/host-guide.md +219 -0
- package/references/interview.md +235 -0
- package/references/knowledge.md +40 -0
- package/references/methods-protocol.md +60 -0
- package/references/methods.md +98 -0
- package/references/opening.md +14 -0
- package/references/preview-panel.md +66 -0
- package/references/recovery.md +46 -0
- package/references/service.md +76 -0
- package/references/widgets-protocol.md +83 -0
- package/references/widgets.md +99 -0
- package/scripts/buddy.py +108 -0
- package/scripts/buddy_client.py +67 -0
- package/scripts/buddy_core.py +908 -0
- package/scripts/completion.py +296 -0
- package/scripts/interview.py +218 -0
- package/scripts/methods.py +181 -0
- package/scripts/preview.py +631 -0
- package/scripts/preview_panel.py +80 -0
- package/scripts/sources.py +239 -0
- package/scripts/widget_render.py +66 -0
- package/scripts/widget_render_v1.py +176 -0
- package/scripts/widget_render_v2.py +98 -0
- package/scripts/widget_render_v3.py +86 -0
- package/scripts/widget_render_v4.py +121 -0
- package/scripts/widgets.py +227 -0
- package/version.json +8 -0
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
* { box-sizing: border-box; }
|
|
2
|
+
html, body { margin: 0; width: 100%; height: 100%; background: #fff; }
|
|
3
|
+
button { font: inherit; color: inherit; border: 0; cursor: pointer; }
|
|
4
|
+
button, summary { -webkit-tap-highlight-color: transparent; }
|
|
5
|
+
button:focus-visible, summary:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; }
|
|
6
|
+
[hidden] { display: none !important; }
|
|
7
|
+
h1, h2, h3, p { margin: 0; }
|
|
8
|
+
h1, h2, h3 { font-size: var(--title-size, 16px); font-weight: 500; }
|
|
9
|
+
.screen { font: 400 16px/1.5 -apple-system, BlinkMacSystemFont, "PingFang SC", "Segoe UI", sans-serif; color: #202733; position: relative; width: 100%; height: 100%; overflow: hidden; background: #fff; --accent: #326BC4; --muted: #7C8490; --line: #E9EDF2; }
|
|
10
|
+
.icon { display: block; flex: none; width: 22px; height: 22px; stroke: currentColor; stroke-width: 1.6; fill: none; stroke-linecap: round; stroke-linejoin: round; }
|
|
11
|
+
.statusbar { height: 40px; padding: 10px 25px 0; display: flex; align-items: center; justify-content: space-between; font-size: 13px; font-weight: 500; }
|
|
12
|
+
.device { display: flex; gap: 5px; }
|
|
13
|
+
.device .icon { width: 16px; height: 16px; }
|
|
14
|
+
.chat-header { height: 56px; padding: 0 20px 10px; display: flex; align-items: center; gap: 16px; border-bottom: 1px solid var(--line); }
|
|
15
|
+
.chat-header strong { flex: 1; text-align: center; font-size: 16px; font-weight: 500; }
|
|
16
|
+
.back { font-size: 28px; line-height: 1; }
|
|
17
|
+
.chat-body { height: calc(100% - 176px); overflow-y: auto; padding: 20px 16px 28px; scrollbar-width: none; }
|
|
18
|
+
.chat-date { color: #9299A3; text-align: center; font-size: 11px; margin-bottom: 18px; }
|
|
19
|
+
.message { display: flex; gap: 9px; align-items: flex-start; margin: 14px 0; }
|
|
20
|
+
.avatar { flex: none; width: 26px; height: 26px; border-radius: 8px; background: #E9F0FB; color: var(--accent); display: grid; place-items: center; font-size: 12px; font-weight: 500; margin-top: 3px; }
|
|
21
|
+
.bubble { max-width: calc(100% - 38px); font-size: 16px; line-height: 1.65; padding: 12px 14px; border-radius: 12px; white-space: pre-wrap; overflow-wrap: anywhere; }
|
|
22
|
+
.user { justify-content: flex-end; }
|
|
23
|
+
.user .bubble { background: #EAF1FB; border-top-right-radius: 3px; }
|
|
24
|
+
.assistant .bubble { background: #F4F5F7; border-top-left-radius: 3px; }
|
|
25
|
+
.chat-card { margin: 16px 0 0 35px; border: 1px solid #DFE5ED; border-radius: 14px; background: #fff; overflow: hidden; }
|
|
26
|
+
.card-content { padding: 17px 16px 18px; }
|
|
27
|
+
.card-kind { font-size: 12px; color: var(--accent); margin-bottom: 8px; }
|
|
28
|
+
.chat-card h1 { font-size: 16px; font-weight: 500; line-height: 1.45; }
|
|
29
|
+
.card-summary { font-size: 16px; line-height: 1.65; color: #66707E; margin-top: 9px; white-space: pre-wrap; overflow-wrap: anywhere; }
|
|
30
|
+
.open-sheet { width: 100%; padding: 12px 16px; display: flex; align-items: center; justify-content: space-between; border-top: 1px solid var(--line); background: #fff; color: var(--accent); font-size: 14px; font-weight: 500; }
|
|
31
|
+
.open-sheet .icon { width: 17px; height: 17px; }
|
|
32
|
+
.open-sheet:hover { background: #F6F8FC; }
|
|
33
|
+
.composer { position: absolute; bottom: 19px; left: 16px; right: 16px; display: flex; align-items: center; gap: 10px; min-height: 49px; padding: 12px; border: 1px solid #E6E9EF; border-radius: 14px; background: #fff; color: #9299A3; font-size: 12px; }
|
|
34
|
+
.composer span { flex: 1; }
|
|
35
|
+
.home-indicator { position: absolute; bottom: 7px; left: 36%; right: 36%; height: 4px; border-radius: 8px; background: #252C37; }
|
|
36
|
+
.overlay { position: absolute; inset: 0; z-index: 2; background: #17243B45; display: grid; place-items: center; }
|
|
37
|
+
.sheet { width: calc(100% - 32px); height: 65%; border-radius: 22px; background: #fff; display: flex; flex-direction: column; overflow: hidden; position: relative; box-shadow: 0 12px 36px #192B4720; outline: none; }
|
|
38
|
+
.sheet-header { flex: none; height: 60px; display: flex; align-items: center; padding: 0 16px 0 20px; border-bottom: 1px solid var(--line); }
|
|
39
|
+
.sheet-header h2 { flex: 1; font-size: 16px; font-weight: 500; }
|
|
40
|
+
.close { width: 32px; height: 32px; background: transparent; color: #8490A0; border-radius: 8px; display: grid; place-items: center; flex: none; }
|
|
41
|
+
.close .icon { width: 20px; height: 20px; }
|
|
42
|
+
.close:hover { background: #F3F5F8; color: #26344C; }
|
|
43
|
+
.sheet-body { flex: 1; min-height: 0; overflow-y: auto; overscroll-behavior: contain; padding: 0 20px 20px; scrollbar-width: thin; scrollbar-color: #D5DBE5 transparent; }
|
|
44
|
+
.overview { padding: 22px 0 15px; }
|
|
45
|
+
.overview h3 { font-size: 20px; line-height: 1.4; font-weight: 500; letter-spacing: -.4px; }
|
|
46
|
+
.overview-subtitle { color: var(--muted); font-size: 13px; margin-top: 6px; line-height: 1.6; white-space: pre-wrap; }
|
|
47
|
+
.reading-meta { color: #606E81; font-size: 13px; margin-top: 12px; }
|
|
48
|
+
.overview-metrics { display: grid; grid-template-columns: repeat(var(--metric-count), 1fr); gap: 16px; margin-top: 22px; }
|
|
49
|
+
.metric-label { display: block; font-size: 12px; color: var(--muted); }
|
|
50
|
+
.metric-value { display: block; font-size: 20px; font-weight: 500; line-height: 1.4; margin-top: 4px; letter-spacing: -.3px; font-variant-numeric: tabular-nums; overflow-wrap: anywhere; }
|
|
51
|
+
.overview-metrics .metric:first-child .metric-value { color: var(--accent); }
|
|
52
|
+
.progress-track { height: 3px; overflow: hidden; background: #ECF0F5; margin-top: 16px; }
|
|
53
|
+
.progress-track > div { height: 100%; background: var(--accent); }
|
|
54
|
+
.progress-caption { font-size: 11px; color: var(--muted); margin-top: 7px; }
|
|
55
|
+
.reading-nav { position: sticky; top: 0; z-index: 1; display: flex; gap: 22px; background: #fff; border-bottom: 1px solid var(--line); overflow-x: auto; scrollbar-width: none; }
|
|
56
|
+
.reading-nav button { flex: none; position: relative; padding: 12px 0; font-size: 14px; background: transparent; color: #8A93A1; white-space: nowrap; }
|
|
57
|
+
.reading-nav button[aria-pressed=true] { color: var(--accent); font-weight: 500; }
|
|
58
|
+
.reading-nav button[aria-pressed=true]:after { position: absolute; content: ""; height: 2px; background: var(--accent); left: 0; right: 0; bottom: 0; }
|
|
59
|
+
.reading-nav button:hover { color: var(--accent); }
|
|
60
|
+
.section { margin: 20px 0 24px; }
|
|
61
|
+
.section-heading { display: flex; align-items: center; gap: 8px; margin-bottom: 7px; color: #8A93A1; font-size: 12px; font-weight: 400; line-height: 1.5; list-style: none; }
|
|
62
|
+
.section-heading::-webkit-details-marker { display: none; }
|
|
63
|
+
summary.section-heading { cursor: pointer; padding: 4px 0; }
|
|
64
|
+
.section-heading .icon { margin-left: auto; width: 13px; height: 13px; }
|
|
65
|
+
details[open] > summary .icon { transform: rotate(90deg); }
|
|
66
|
+
.row { display: flex; align-items: flex-start; gap: 10px; padding: 15px 0; border-bottom: 1px solid var(--line); }
|
|
67
|
+
.row:last-child { border-bottom: none; }
|
|
68
|
+
.row-content { flex: 1; min-width: 0; }
|
|
69
|
+
.row-label { font-size: 16px; font-weight: 500; line-height: 1.5; overflow-wrap: anywhere; }
|
|
70
|
+
.row-value { font-size: 16px; font-weight: 400; line-height: 1.6; margin-top: 4px; color: #263243; white-space: pre-wrap; overflow-wrap: anywhere; }
|
|
71
|
+
.row-caption { font-size: 13px; color: #87909D; line-height: 1.6; margin-top: 6px; white-space: pre-wrap; overflow-wrap: anywhere; }
|
|
72
|
+
.status { display: inline-block; font-size: 12px; line-height: 1.5; color: #8893A2; margin-top: 8px; }
|
|
73
|
+
.status.pending { color: #956B40; }
|
|
74
|
+
.status.changed { color: var(--accent); }
|
|
75
|
+
.detail-open { min-height: 38px; width: 26px; background: transparent; color: #9BA5B3; display: grid; place-items: center; padding: 0; flex: none; border-radius: 5px; }
|
|
76
|
+
.detail-open .icon { width: 15px; height: 15px; }
|
|
77
|
+
.timeline .row { position: relative; border: 0; gap: 21px; padding: 9px 0 23px; min-height: 82px; }
|
|
78
|
+
.timeline .time { flex: none; width: 36px; color: #738196; font-size: 12px; font-variant-numeric: tabular-nums; line-height: 1.6; padding-top: 3px; overflow-wrap: anywhere; }
|
|
79
|
+
.timeline .row:before { position: absolute; content: ""; left: 45px; top: 19px; bottom: -11px; width: 1px; background: #E2EAF6; }
|
|
80
|
+
.timeline .row:last-child:before { display: none; }
|
|
81
|
+
.timeline .row:after { position: absolute; content: ""; left: 43px; top: 17px; width: 5px; height: 5px; border-radius: 50%; background: var(--accent); }
|
|
82
|
+
.timeline .row-value { margin-top: 0; }
|
|
83
|
+
.cards .row { padding: 16px 0 18px; }
|
|
84
|
+
.cards .row-value { color: #68758A; }
|
|
85
|
+
.ledger .row-content { display: grid; grid-template-columns: minmax(0, 1fr) auto; column-gap: 12px; align-items: baseline; }
|
|
86
|
+
.ledger .row-label { font-size: 16px; font-weight: 400; }
|
|
87
|
+
.ledger .row-value { margin: 0; text-align: right; font-variant-numeric: tabular-nums; }
|
|
88
|
+
.ledger .row-caption, .ledger .status { grid-column: 1 / -1; }
|
|
89
|
+
.checklist .row-value { color: #718098; }
|
|
90
|
+
.note { border-top: 1px solid var(--line); padding-top: 14px; color: #A1A8B2; font-size: 11px; }
|
|
91
|
+
.detail-layer { position: absolute; inset: 0; z-index: 3; background: #17243B45; display: grid; place-items: center; }
|
|
92
|
+
.detail-box { width: calc(100% - 32px); max-height: 65%; overflow-y: auto; padding: 20px; border-radius: 22px; background: #fff; box-shadow: 0 12px 36px #192B4720; }
|
|
93
|
+
.detail-head { display: flex; align-items: center; gap: 10px; margin-bottom: 18px; }
|
|
94
|
+
.detail-head h3 { flex: 1; font-size: 16px; }
|
|
95
|
+
.detail-text { font-size: 16px; line-height: 1.75; white-space: pre-wrap; overflow-wrap: anywhere; }
|
|
96
|
+
.detail-foot { color: var(--muted); font-size: 11px; border-top: 1px solid var(--line); margin-top: 20px; padding-top: 14px; }
|
|
97
|
+
@media (prefers-reduced-motion: no-preference) {
|
|
98
|
+
button { transition: color .15s, background .15s; }
|
|
99
|
+
button:active { opacity: .7; }
|
|
100
|
+
.sheet, .detail-box { animation: enter .18s ease-out both; }
|
|
101
|
+
@keyframes enter { from { transform: translateY(6px); opacity: .5; } to { transform: none; opacity: 1; } }
|
|
102
|
+
}
|
|
103
|
+
.svg-export * { animation: none !important; transition: none !important; }
|
|
104
|
+
|
|
105
|
+
/* A calendar, travel slips, a receipt, a packing index and a change log. */
|
|
106
|
+
.calendar-strip { display: grid; grid-template-columns: repeat(auto-fit, minmax(55px, 1fr)); gap: 0; margin: 17px -16px 14px; padding: 12px 16px; background: #F0F5FD; }
|
|
107
|
+
.calendar-strip > div { padding: 0 8px; border-left: 1px solid #D6E2F4; min-width: 0; }
|
|
108
|
+
.calendar-strip > div:first-child { padding-left: 0; border-left: none; }
|
|
109
|
+
.calendar-strip span { display: block; color: var(--accent); font-size: 14px; font-weight: 500; }
|
|
110
|
+
.calendar-strip small { display: block; font-size: 11px; line-height: 1.5; margin-top: 5px; color: #8290A4; overflow-wrap: anywhere; }
|
|
111
|
+
.timeline .chat-card { border-top: 3px solid var(--accent); }
|
|
112
|
+
.timeline .overview { padding-bottom: 20px; }
|
|
113
|
+
.timeline .reading-nav { gap: 0; border: 1px solid #E0E9F6; background: #F7FAFE; border-radius: 9px; }
|
|
114
|
+
.timeline .reading-nav button { flex: 1; padding: 10px 14px; display: flex; align-items: center; gap: 8px; font-size: 12px; border-right: 1px solid #E0E9F6; }
|
|
115
|
+
.timeline .reading-nav button:last-child { border-right: none; }
|
|
116
|
+
.timeline .day-number { font-size: 20px; font-weight: 500; line-height: 1.3; font-variant-numeric: tabular-nums; }
|
|
117
|
+
.timeline .reading-nav button[aria-pressed=true] { background: #EAF2FE; }
|
|
118
|
+
.timeline .reading-nav button[aria-pressed=true]:after { left: 13px; right: 13px; }
|
|
119
|
+
.timeline .time { color: var(--accent); }
|
|
120
|
+
.timeline .row { min-height: 90px; }
|
|
121
|
+
|
|
122
|
+
.cards .chat-card { border-style: solid; border-color: #D6E2F2; border-radius: 5px 17px 17px 5px; }
|
|
123
|
+
.cards .card-kind { border-left: 3px solid var(--accent); padding-left: 9px; }
|
|
124
|
+
.booking-reference { display: flex; gap: 13px; align-items: center; border-top: 1px dashed #D3DDEC; margin-top: 16px; padding: 13px 0 5px; }
|
|
125
|
+
.booking-reference span { color: #8390A5; font-size: 12px; border-right: 1px solid #DFE5EF; padding-right: 12px; }
|
|
126
|
+
.booking-reference p { font-size: 16px; }
|
|
127
|
+
.cards .open-sheet { border-top-style: dashed; }
|
|
128
|
+
.cards .sheet-body { background: #F4F7FC; padding-left: 16px; padding-right: 16px; }
|
|
129
|
+
.cards .overview { padding-left: 4px; }
|
|
130
|
+
.cards .reading-nav { background: #F4F7FC; }
|
|
131
|
+
.cards .section { background: #fff; border: 1px solid #DDE5F0; border-radius: 5px 15px 15px 5px; margin-top: 16px; padding: 0 14px; }
|
|
132
|
+
.cards summary.section-heading, .cards h3.section-heading { color: var(--accent); font-size: 14px; font-weight: 500; padding: 12px 0; margin: 0; border-bottom: 1px dashed #D5DEEB; }
|
|
133
|
+
.cards details:not([open]) summary { border-bottom: none; }
|
|
134
|
+
.cards .row { padding: 13px 0; }
|
|
135
|
+
.cards .row-label { font-weight: 500; }
|
|
136
|
+
.cards .row-value { color: #6A788C; }
|
|
137
|
+
.cards .note { border: 0; }
|
|
138
|
+
|
|
139
|
+
.ledger .chat-card { border-radius: 3px; border: 1px solid #DDE4ED; border-top: 3px double var(--accent); }
|
|
140
|
+
.receipt-totals { display: grid; grid-template-columns: repeat(var(--metric-count), minmax(0, 1fr)); gap: 12px; margin: 16px 0 13px; border-block: 1px dashed #CCD7E8; padding: 13px 0; }
|
|
141
|
+
.receipt-totals .metric-value { font-size: 20px; font-weight: 500; font-variant-numeric: tabular-nums; }
|
|
142
|
+
.receipt-totals .metric:first-child .metric-value { color: var(--accent); }
|
|
143
|
+
.ledger .open-sheet { border-top: 1px dashed #CCD7E8; }
|
|
144
|
+
.ledger .overview { border-bottom: 1px dashed #C4D2E5; padding-bottom: 19px; }
|
|
145
|
+
.ledger .overview-metrics { margin-top: 18px; }
|
|
146
|
+
.ledger .reading-nav { margin-top: 8px; }
|
|
147
|
+
.ledger .section-heading { font-size: 12px; letter-spacing: .5px; color: #7C8EA9; }
|
|
148
|
+
.ledger .row { border-bottom: 1px dashed var(--line); }
|
|
149
|
+
.ledger .row:last-child { border-bottom: 0; }
|
|
150
|
+
.ledger .row-value { color: #234B83; font-variant-numeric: tabular-nums; }
|
|
151
|
+
.ledger .note { border-top-style: dashed; }
|
|
152
|
+
|
|
153
|
+
.checklist .chat-card { border-radius: 14px; background: #F8FAFE; }
|
|
154
|
+
.packing-index { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); margin: 16px 0 13px; border-top: 1px solid #DBE4F2; border-left: 1px solid #DBE4F2; }
|
|
155
|
+
.packing-index > div { border-right: 1px solid #DBE4F2; border-bottom: 1px solid #DBE4F2; padding: 10px; }
|
|
156
|
+
.packing-index small { display: block; color: var(--accent); font-size: 11px; }
|
|
157
|
+
.packing-index p { font-size: 16px; line-height: 1.5; margin-top: 5px; overflow-wrap: anywhere; }
|
|
158
|
+
.checklist .overview { position: relative; padding-left: 15px; border-left: 3px solid var(--accent); margin: 22px 0 15px; padding-top: 0; padding-bottom: 0; }
|
|
159
|
+
.checklist .progress-track { height: 3px; }
|
|
160
|
+
.checklist .section { position: relative; min-height: 65px; padding-left: 76px; margin: 24px 0; border-bottom: 1px solid #E3EAF3; padding-bottom: 20px; }
|
|
161
|
+
.checklist .section-heading { position: absolute; left: 0; top: 5px; width: 59px; flex-wrap: wrap; align-content: flex-start; color: var(--accent); font-size: 12px; line-height: 1.7; padding: 0; margin: 0; overflow-wrap: anywhere; }
|
|
162
|
+
.checklist .section-heading .icon { margin: 5px 0 0; width: 12px; height: 12px; }
|
|
163
|
+
.checklist .row { padding-top: 0; }
|
|
164
|
+
.checklist .row-label { font-weight: 500; }
|
|
165
|
+
.checklist .row:last-child { padding-bottom: 0; }
|
|
166
|
+
.checklist .note { border: 0; padding-top: 0; }
|
|
167
|
+
|
|
168
|
+
.changes .chat-card { border-radius: 13px; border-left: 3px solid var(--accent); }
|
|
169
|
+
.change-preview { margin-top: 16px; }
|
|
170
|
+
.change-preview-label { font-size: 12px; color: #7D8CA2; margin-bottom: 9px; }
|
|
171
|
+
.change-pair { display: grid; grid-template-columns: minmax(0, 1fr) 16px minmax(0, 1fr); align-items: stretch; gap: 8px; margin-top: 12px; }
|
|
172
|
+
.change-pair .before, .change-pair .after { padding: 10px; min-width: 0; }
|
|
173
|
+
.change-pair .before { background: #F4F5F7; color: #929AA7; }
|
|
174
|
+
.change-pair .after { background: #EDF3FC; color: #315D9B; border-left: 2px solid #7EAAE5; }
|
|
175
|
+
.change-pair small { font-size: 11px; display: block; margin-bottom: 4px; color: #8896AA; }
|
|
176
|
+
.change-pair p { font-size: 16px; line-height: 1.55; overflow-wrap: anywhere; }
|
|
177
|
+
.change-arrow { font-size: 13px; color: #A1AEC0; align-self: center; }
|
|
178
|
+
.changes .card-summary { font-size: 16px; margin-top: 14px; }
|
|
179
|
+
.changes .overview { padding-bottom: 17px; border-bottom: 1px solid #E5EAF3; }
|
|
180
|
+
.changes .section { border-left: 2px solid #DCE6F5; padding-left: 13px; }
|
|
181
|
+
.changes .section-heading { color: #7C8FAC; }
|
|
182
|
+
.changes .row { position: relative; padding: 13px 0 20px; }
|
|
183
|
+
.changes .change-heading { display: flex; align-items: baseline; justify-content: space-between; gap: 12px; }
|
|
184
|
+
.change-time { font-size: 11px; color: #8A98AB; font-variant-numeric: tabular-nums; flex: none; }
|
|
185
|
+
.changes .row-caption { color: #8792A3; }
|
|
186
|
+
.changes .detail-open { position: absolute; right: -5px; bottom: 9px; min-height: 28px; }
|
|
187
|
+
.changes .status { margin-top: 10px; padding-right: 20px; }
|
package/package.json
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@my-life-buddies/buddy-creator-skill",
|
|
3
|
+
"version": "1.6.0",
|
|
4
|
+
"description": "Buddy Creator Skill:创作规则、Python 工具与预览资源",
|
|
5
|
+
"license": "UNLICENSED",
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "git+ssh://git@code.devops.xiaohongshu.com/dada/buddy-creator-skill.git"
|
|
9
|
+
},
|
|
10
|
+
"publishConfig": {
|
|
11
|
+
"access": "public",
|
|
12
|
+
"registry": "https://registry.npmjs.org/"
|
|
13
|
+
},
|
|
14
|
+
"files": [
|
|
15
|
+
"SKILL.md",
|
|
16
|
+
"INSTALL.md",
|
|
17
|
+
"THIRD_PARTY_NOTICES.md",
|
|
18
|
+
"PATCHES.md",
|
|
19
|
+
"version.json",
|
|
20
|
+
"agents",
|
|
21
|
+
"assets",
|
|
22
|
+
"references",
|
|
23
|
+
"scripts"
|
|
24
|
+
],
|
|
25
|
+
"scripts": {
|
|
26
|
+
"test": "PYTHONDONTWRITEBYTECODE=1 python3 -B -m unittest discover -s development -p \"test_*.py\"",
|
|
27
|
+
"prepack": "python3 -B development/verify_package.py"
|
|
28
|
+
},
|
|
29
|
+
"buddySkill": {
|
|
30
|
+
"protocolVersion": 1,
|
|
31
|
+
"entrypoint": "scripts/buddy.py",
|
|
32
|
+
"skill": "SKILL.md",
|
|
33
|
+
"workflow": "references/cli-workflow.md",
|
|
34
|
+
"workspaceFormat": "buddy-creator-1",
|
|
35
|
+
"python": ">=3.9"
|
|
36
|
+
}
|
|
37
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# 产物与服务蓝图字段
|
|
2
|
+
|
|
3
|
+
四册之后新增独立 stage=interaction 的 widget-catalog、widget-prototype、widget-acceptance 三类产物。它们不是章节,不计入固定 27 章;字段和确认顺序见 [小挂件协议](widgets-protocol.md)。
|
|
4
|
+
|
|
5
|
+
此文件只在形成章节、方法候选、案例或服务方案时读取。所有内容由当前项目真实原话和来源生成;这里定义字段,不提供默认作品或默认服务方案。
|
|
6
|
+
|
|
7
|
+
## 公共产物结构
|
|
8
|
+
|
|
9
|
+
每个 artifacts 数组元素严格包含以下必填字段:
|
|
10
|
+
|
|
11
|
+
- id、stage、kind、title、markdown:字符串。
|
|
12
|
+
- evidence:Ref 数组,记录真实输入或资料依据。
|
|
13
|
+
- dependencies:Ref 数组,记录已确认的上游产物。
|
|
14
|
+
- unresolved:影响当前版本确认的未决事项字符串数组;一般非空时禁止正式确认。方法阶段用户明确结束是唯一例外:程序绑定有效收口记录并将待补写入五章正文,用户确认的是有范围限制的版本,不是确认未验证案例。已经明确排除在本次范围外的后续版本计划写入正文的范围说明,不重复放入此数组。仍影响当前结论的缺口必须保留。
|
|
15
|
+
- data:可选对象;没有特殊结构时使用 {}。
|
|
16
|
+
|
|
17
|
+
不要提交 hash 或 revision,工具负责计算。evidence 或 dependencies 至少有一项实际依据。知识、方法、服务产物的 dependencies 应分别引用每个上游阶段实际使用的已确认章节;下游章节还要引用实际使用的方法候选、场景或蓝图。引用对象 hash 必须是当前版本。未决项如允许延后,应在正文准确说明缺口并让创作者校准这个范围;不能为了确认清空仍待解决的具体问题。
|
|
18
|
+
|
|
19
|
+
| kind | stage | 固定 id | data |
|
|
20
|
+
| --- | --- | --- | --- |
|
|
21
|
+
| chapter | definition | definition.1 至 definition.6 | 可留 {},正文对应 catalog 的六章 |
|
|
22
|
+
| chapter | knowledge | knowledge.1 至 knowledge.7 | 可留 {},正文对应七章 |
|
|
23
|
+
| chapter | methods | methods.1 至 methods.5 | 可留 {},正文对应五章 |
|
|
24
|
+
| chapter | service | service.1 至 service.9 | 可留 {},正文对应九章 |
|
|
25
|
+
| hypothesis | methods | hypothesis.H1、H2… | 可留 {};先登记对应 H01、H02… 目标 |
|
|
26
|
+
| scenario | methods | scenario.M01、M02…;scenario.E01、E02… | 具体执行写 markdown |
|
|
27
|
+
| blueprint | service | service.blueprint | 使用下节结构 |
|
|
28
|
+
| transition | service | transition.acquisition-paid、transition.acquisition-maintenance、transition.paid-paid、transition.paid-maintenance | trigger、rightsChange、dataInheritance、message 均为非空字符串 |
|
|
29
|
+
|
|
30
|
+
四册是固定章节的组合,没有 kind:booklet 产物,也不使用 data.chapters。整册确认通过 delivery.confirmationScope=booklet 和该册全部章节 ID;逐章确认用 scope=object 及对应章节。一次不能跨册。
|
|
31
|
+
|
|
32
|
+
方法候选正式反馈使用 decision:accepted 或 rejected,其他对象使用 confirmed。新作品按 [方法访谈协议](methods-protocol.md) 动态登记目标;案例必须依赖实际 accepted 的方法候选及定义、知识章节。基础场景可在创作者回答足够具体时忠实记录,其 data.capture=faithful_user_answer 仅用于刚回答的对应 M 目标,必须引用本轮精确原话,正文不能新增条件、顺序或推断。新增推导应走正常展示、下一轮确认。E 场景必须依赖对应的已确认 M 场景;每次只变一个条件,无须等待其他独立基础案例。五章的 data.methodConclusion 由程序绑定当前收口记录,宿主不能拿旧章确认新的收口范围。
|
|
33
|
+
|
|
34
|
+
## service.blueprint 的 data
|
|
35
|
+
|
|
36
|
+
可以先保存带未决项的草案;以下字段与业务判断齐备后才能正式确认。字段是内部记录格式,不把这张表变成一次询问用户的清单。智能规划基于已有信息给完整建议,只有实际缺口才追问。
|
|
37
|
+
|
|
38
|
+
| 字段 | 形状与含义 |
|
|
39
|
+
| --- | --- |
|
|
40
|
+
| platformRules | 原样使用 context.catalog.serviceRules;不能复制旧限制 |
|
|
41
|
+
| valueStatement | 非空字符串:持续使用能得到什么 |
|
|
42
|
+
| recurrenceDrivers | 非空字符串数组:持续求助的真实原因 |
|
|
43
|
+
| renewalEvidence | 非空字符串数组:1—3 项可观察成果、变化或下一周期目标 |
|
|
44
|
+
| serviceLoop | 对象,trigger、requiredInput、decision、action、result、feedback、nextCycleUpdate 均为非空字符串 |
|
|
45
|
+
| acquisitionContract | 对象,trigger、requiredInput、completionCriteria、conversionBridge 均为非空字符串;includedSteps 非空字符串数组;excludedSteps 字符串数组,可为 [] |
|
|
46
|
+
| stages | acquisition、paid、maintenance 三个阶段对象;各用 result/service/limit 描述帮助和范围,付费阶段不能将 limit 写成 AI 对话次数 |
|
|
47
|
+
| transitions | 五个键:acquisition-paid、acquisition-maintenance、paid-paid、paid-maintenance、maintenance-paid;每项含 trigger、rightsChange、dataInheritance、message 非空字符串,可另给 title |
|
|
48
|
+
| billingCycle | 严格为 {count:正整数,unit:"day"或"week"或"month"或"year"};用户定义,不默认月度 |
|
|
49
|
+
| price | 这一整个订阅周期对应的正数价格 |
|
|
50
|
+
| cadence | 非空字符串:交付频率,与订阅周期分开 |
|
|
51
|
+
| deliveries | 非空字符串:交付内容与明确时间范围;不能限制普通 AI 对话 |
|
|
52
|
+
| toolLimit | 非空字符串:工具范围及对应时间,未使用额度限制时如实说明,不变相限制聊天 |
|
|
53
|
+
| conversationLimit | 固定为 "unlimited" |
|
|
54
|
+
| humanConversationLimit | 真人服务次数、时长和响应安排的具体说明,与 AI 对话分开;没有真人服务如实说明 |
|
|
55
|
+
| maintenanceContract | basicConversation:true;allowedQuestions 非空字符串,说明实际可答的基础问题,不能只留历史或付费提示 |
|
|
56
|
+
| humanReview | 布尔值,表示是否创作者本人复核 |
|
|
57
|
+
| reviewCapacity | 有本人复核时必填非空字符串,基于真实产能与时间范围;没有依据则保留未决,不能编造 |
|
|
58
|
+
| multiUser | 固定 false,当前单用户单档订阅设计 |
|
|
59
|
+
| experienceMode | "conversation" 或 "custom-component";后者另填 customComponentDescription 具体说明组件 |
|
|
60
|
+
| semanticChecks | 下节各项公开业务判断与真实证据 |
|
|
61
|
+
|
|
62
|
+
semanticChecks 包含 coherentLoop、paidDeliverable、freeScopeAgreed、maintenanceBoundary、transitionsConfirmed、valueBeforePaywall、executableContract;存在本人复核时还包含 creatorCapacity。每项结构为 `{pass:布尔值,evidence:Ref数组}`。pass=true 必须有非空真实依据,不能靠通过结构校验证明语义正确。未通过写 false 并在产物 unresolved 说明待明确内容。
|
|
63
|
+
|
|
64
|
+
guided 模式需四条非默认 transition 产物逐条有效确认,其 data 与 blueprint.data.transitions 中对应对象保持一致。maintenance-paid 为恢复订阅默认路径,保留完整权益与历史继承说明,不新增第五组采访。smart 模式整体展示蓝图、根据反馈修订;正式确认前仍核对五条路径、产能和服务约定,不以模型推测替代创作者意见。
|
|
65
|
+
|
|
66
|
+
为避免重复生成路径正文,提交 blueprint 时,`data.transitions` 中的四条非默认路径可以使用对应已确认产物的 Ref:`{type:"artifact",id:"transition.paid-paid",hash:已保存版本hash}`。例如宿主可将 `client.artifact_ref('transition.paid-paid')` 赋给 `blueprint['data']['transitions']['paid-paid']`。工具验证 ID、hash 和有效确认后,复制该产物的完整 data,并登记版本依赖,再计算蓝图 hash。保存、预览、导出仍使用展开后的原有蓝图结构;引用不改写源路径,也不会代替用户确认。旧版提交完整路径对象的方式继续有效。
|
|
67
|
+
|
|
68
|
+
引用必须对应同名路径;不存在、已失效或尚未确认的版本会被拒绝。maintenance-paid 仍提交完整路径对象。显式提交的完整对象不会被工具悄悄纠正;出现“每周”与“每 7 天”等文字差异时,仍按版本一致性门槛拒绝,并返回具体字段差异。路径确实需要变化时,先修订路径并重新展示确认,再据新版本整理蓝图。
|
|
69
|
+
|
|
70
|
+
服务蓝图正式确认且门槛满足后,才能定稿九章服务手册。订阅时长变化同步核对价格、交付、工具或真人额度和路径文案,不自动等比例涨价或扩大承诺。付费 AI 对话不限次数、维持基础对话与历史、免费范围可持续跟进始终有效。
|