@my-life-buddies/cli 0.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (158) hide show
  1. package/README.md +314 -0
  2. package/dist/bin/buddy.js +443 -0
  3. package/dist/bin/buddy.js.map +7 -0
  4. package/dist/bin/core.js +5638 -0
  5. package/dist/bin/core.js.map +7 -0
  6. package/dist/bin/preview.js +1429 -0
  7. package/dist/bin/preview.js.map +7 -0
  8. package/dist/web/app.css +508 -0
  9. package/dist/web/app.js +724 -0
  10. package/dist/web/assets/developer-platform-icon.png.base64 +1 -0
  11. package/dist/web/brand.css +100 -0
  12. package/dist/web/index.html +236 -0
  13. package/dist/web/tokens.css +15 -0
  14. package/package.json +45 -0
  15. package/resources/README.md +52 -0
  16. package/resources/agent-template/package-lock.json +1726 -0
  17. package/resources/agent-template/package.json +16 -0
  18. package/resources/brand/README.md +11 -0
  19. package/resources/brand/login-result.css +25 -0
  20. package/resources/brand/logo.png +0 -0
  21. package/resources/brand/tokens.css +100 -0
  22. package/resources/buddy-creator/INSTALL.md +25 -0
  23. package/resources/buddy-creator/PATCHES.md +33 -0
  24. package/resources/buddy-creator/SKILL.md +66 -0
  25. package/resources/buddy-creator/THIRD_PARTY_NOTICES.md +154 -0
  26. package/resources/buddy-creator/agents/openai.yaml +4 -0
  27. package/resources/buddy-creator/assets/licenses/bail.txt +26 -0
  28. package/resources/buddy-creator/assets/licenses/ccount.txt +26 -0
  29. package/resources/buddy-creator/assets/licenses/character-entities-html4.txt +26 -0
  30. package/resources/buddy-creator/assets/licenses/character-entities-legacy.txt +26 -0
  31. package/resources/buddy-creator/assets/licenses/character-entities.txt +26 -0
  32. package/resources/buddy-creator/assets/licenses/character-reference-invalid.txt +26 -0
  33. package/resources/buddy-creator/assets/licenses/comma-separated-tokens.txt +26 -0
  34. package/resources/buddy-creator/assets/licenses/debug.txt +24 -0
  35. package/resources/buddy-creator/assets/licenses/decode-named-character-reference.txt +26 -0
  36. package/resources/buddy-creator/assets/licenses/dequal.txt +25 -0
  37. package/resources/buddy-creator/assets/licenses/devlop.txt +26 -0
  38. package/resources/buddy-creator/assets/licenses/escape-string-regexp.txt +13 -0
  39. package/resources/buddy-creator/assets/licenses/estree-util-is-identifier-name.txt +26 -0
  40. package/resources/buddy-creator/assets/licenses/extend.txt +27 -0
  41. package/resources/buddy-creator/assets/licenses/hast-util-to-jsx-runtime.txt +26 -0
  42. package/resources/buddy-creator/assets/licenses/hast-util-whitespace.txt +26 -0
  43. package/resources/buddy-creator/assets/licenses/html-url-attributes.txt +25 -0
  44. package/resources/buddy-creator/assets/licenses/inline-style-parser.txt +13 -0
  45. package/resources/buddy-creator/assets/licenses/is-alphabetical.txt +26 -0
  46. package/resources/buddy-creator/assets/licenses/is-alphanumerical.txt +26 -0
  47. package/resources/buddy-creator/assets/licenses/is-decimal.txt +26 -0
  48. package/resources/buddy-creator/assets/licenses/is-hexadecimal.txt +26 -0
  49. package/resources/buddy-creator/assets/licenses/is-plain-obj.txt +13 -0
  50. package/resources/buddy-creator/assets/licenses/longest-streak.txt +26 -0
  51. package/resources/buddy-creator/assets/licenses/markdown-table.txt +26 -0
  52. package/resources/buddy-creator/assets/licenses/mdast-util-find-and-replace.txt +26 -0
  53. package/resources/buddy-creator/assets/licenses/mdast-util-from-markdown.txt +26 -0
  54. package/resources/buddy-creator/assets/licenses/mdast-util-gfm-autolink-literal.txt +26 -0
  55. package/resources/buddy-creator/assets/licenses/mdast-util-gfm-footnote.txt +26 -0
  56. package/resources/buddy-creator/assets/licenses/mdast-util-gfm-strikethrough.txt +26 -0
  57. package/resources/buddy-creator/assets/licenses/mdast-util-gfm-table.txt +26 -0
  58. package/resources/buddy-creator/assets/licenses/mdast-util-gfm-task-list-item.txt +26 -0
  59. package/resources/buddy-creator/assets/licenses/mdast-util-gfm.txt +26 -0
  60. package/resources/buddy-creator/assets/licenses/mdast-util-mdx-expression.txt +26 -0
  61. package/resources/buddy-creator/assets/licenses/mdast-util-mdx-jsx.txt +26 -0
  62. package/resources/buddy-creator/assets/licenses/mdast-util-mdxjs-esm.txt +26 -0
  63. package/resources/buddy-creator/assets/licenses/mdast-util-phrasing.txt +27 -0
  64. package/resources/buddy-creator/assets/licenses/mdast-util-to-hast.txt +26 -0
  65. package/resources/buddy-creator/assets/licenses/mdast-util-to-markdown.txt +26 -0
  66. package/resources/buddy-creator/assets/licenses/mdast-util-to-string.txt +26 -0
  67. package/resources/buddy-creator/assets/licenses/micromark-core-commonmark.txt +26 -0
  68. package/resources/buddy-creator/assets/licenses/micromark-extension-gfm-autolink-literal.txt +26 -0
  69. package/resources/buddy-creator/assets/licenses/micromark-extension-gfm-footnote.txt +26 -0
  70. package/resources/buddy-creator/assets/licenses/micromark-extension-gfm-strikethrough.txt +26 -0
  71. package/resources/buddy-creator/assets/licenses/micromark-extension-gfm-table.txt +26 -0
  72. package/resources/buddy-creator/assets/licenses/micromark-extension-gfm-tagfilter.txt +26 -0
  73. package/resources/buddy-creator/assets/licenses/micromark-extension-gfm-task-list-item.txt +26 -0
  74. package/resources/buddy-creator/assets/licenses/micromark-extension-gfm.txt +26 -0
  75. package/resources/buddy-creator/assets/licenses/micromark-factory-destination.txt +26 -0
  76. package/resources/buddy-creator/assets/licenses/micromark-factory-label.txt +26 -0
  77. package/resources/buddy-creator/assets/licenses/micromark-factory-space.txt +26 -0
  78. package/resources/buddy-creator/assets/licenses/micromark-factory-title.txt +26 -0
  79. package/resources/buddy-creator/assets/licenses/micromark-factory-whitespace.txt +26 -0
  80. package/resources/buddy-creator/assets/licenses/micromark-util-character.txt +26 -0
  81. package/resources/buddy-creator/assets/licenses/micromark-util-chunked.txt +26 -0
  82. package/resources/buddy-creator/assets/licenses/micromark-util-classify-character.txt +26 -0
  83. package/resources/buddy-creator/assets/licenses/micromark-util-combine-extensions.txt +26 -0
  84. package/resources/buddy-creator/assets/licenses/micromark-util-decode-numeric-character-reference.txt +26 -0
  85. package/resources/buddy-creator/assets/licenses/micromark-util-decode-string.txt +26 -0
  86. package/resources/buddy-creator/assets/licenses/micromark-util-encode.txt +26 -0
  87. package/resources/buddy-creator/assets/licenses/micromark-util-html-tag-name.txt +26 -0
  88. package/resources/buddy-creator/assets/licenses/micromark-util-normalize-identifier.txt +26 -0
  89. package/resources/buddy-creator/assets/licenses/micromark-util-resolve-all.txt +26 -0
  90. package/resources/buddy-creator/assets/licenses/micromark-util-sanitize-uri.txt +26 -0
  91. package/resources/buddy-creator/assets/licenses/micromark-util-subtokenize.txt +26 -0
  92. package/resources/buddy-creator/assets/licenses/micromark-util-symbol.txt +26 -0
  93. package/resources/buddy-creator/assets/licenses/micromark-util-types.txt +26 -0
  94. package/resources/buddy-creator/assets/licenses/micromark.txt +26 -0
  95. package/resources/buddy-creator/assets/licenses/ms.txt +25 -0
  96. package/resources/buddy-creator/assets/licenses/parse-entities.txt +26 -0
  97. package/resources/buddy-creator/assets/licenses/phosphor-icons--react.txt +25 -0
  98. package/resources/buddy-creator/assets/licenses/property-information.txt +26 -0
  99. package/resources/buddy-creator/assets/licenses/react-dom.txt +25 -0
  100. package/resources/buddy-creator/assets/licenses/react-markdown.txt +25 -0
  101. package/resources/buddy-creator/assets/licenses/react.txt +25 -0
  102. package/resources/buddy-creator/assets/licenses/remark-gfm.txt +26 -0
  103. package/resources/buddy-creator/assets/licenses/remark-parse.txt +25 -0
  104. package/resources/buddy-creator/assets/licenses/remark-rehype.txt +26 -0
  105. package/resources/buddy-creator/assets/licenses/remark-stringify.txt +25 -0
  106. package/resources/buddy-creator/assets/licenses/scheduler.txt +25 -0
  107. package/resources/buddy-creator/assets/licenses/space-separated-tokens.txt +26 -0
  108. package/resources/buddy-creator/assets/licenses/stringify-entities.txt +26 -0
  109. package/resources/buddy-creator/assets/licenses/style-to-js.txt +26 -0
  110. package/resources/buddy-creator/assets/licenses/style-to-object.txt +26 -0
  111. package/resources/buddy-creator/assets/licenses/trim-lines.txt +26 -0
  112. package/resources/buddy-creator/assets/licenses/trough.txt +25 -0
  113. package/resources/buddy-creator/assets/licenses/types--debug.txt +25 -0
  114. package/resources/buddy-creator/assets/licenses/types--estree-jsx.txt +25 -0
  115. package/resources/buddy-creator/assets/licenses/types--estree.txt +25 -0
  116. package/resources/buddy-creator/assets/licenses/types--hast.txt +25 -0
  117. package/resources/buddy-creator/assets/licenses/types--mdast.txt +25 -0
  118. package/resources/buddy-creator/assets/licenses/types--ms.txt +25 -0
  119. package/resources/buddy-creator/assets/licenses/types--unist.txt +25 -0
  120. package/resources/buddy-creator/assets/licenses/ungap--structured-clone.txt +19 -0
  121. package/resources/buddy-creator/assets/licenses/unified.txt +25 -0
  122. package/resources/buddy-creator/assets/licenses/unist-util-is.txt +26 -0
  123. package/resources/buddy-creator/assets/licenses/unist-util-position.txt +26 -0
  124. package/resources/buddy-creator/assets/licenses/unist-util-stringify-position.txt +26 -0
  125. package/resources/buddy-creator/assets/licenses/unist-util-visit-parents.txt +26 -0
  126. package/resources/buddy-creator/assets/licenses/unist-util-visit.txt +26 -0
  127. package/resources/buddy-creator/assets/licenses/vfile-message.txt +26 -0
  128. package/resources/buddy-creator/assets/licenses/vfile.txt +25 -0
  129. package/resources/buddy-creator/assets/licenses/zwitch.txt +26 -0
  130. package/resources/buddy-creator/assets/preview/assets/index-B5VmkoSx.js +39 -0
  131. package/resources/buddy-creator/assets/preview/assets/index-DWKP6b-3.css +4 -0
  132. package/resources/buddy-creator/assets/preview/brand-logo.png +0 -0
  133. package/resources/buddy-creator/assets/preview/brand.css +100 -0
  134. package/resources/buddy-creator/assets/preview/index.html +5 -0
  135. package/resources/buddy-creator/assets/preview/reader.css +165 -0
  136. package/resources/buddy-creator/assets/preview/reader.js +135 -0
  137. package/resources/buddy-creator/references/artifact-schema.md +68 -0
  138. package/resources/buddy-creator/references/catalog.json +401 -0
  139. package/resources/buddy-creator/references/definition.md +24 -0
  140. package/resources/buddy-creator/references/dialogue-examples.md +133 -0
  141. package/resources/buddy-creator/references/host-guide.md +213 -0
  142. package/resources/buddy-creator/references/interview.md +235 -0
  143. package/resources/buddy-creator/references/knowledge.md +40 -0
  144. package/resources/buddy-creator/references/methods.md +77 -0
  145. package/resources/buddy-creator/references/opening.md +14 -0
  146. package/resources/buddy-creator/references/preview-panel.md +66 -0
  147. package/resources/buddy-creator/references/recovery.md +43 -0
  148. package/resources/buddy-creator/references/service.md +74 -0
  149. package/resources/buddy-creator/scripts/buddy.py +108 -0
  150. package/resources/buddy-creator/scripts/buddy_client.py +67 -0
  151. package/resources/buddy-creator/scripts/buddy_core.py +803 -0
  152. package/resources/buddy-creator/scripts/completion.py +240 -0
  153. package/resources/buddy-creator/scripts/interview.py +215 -0
  154. package/resources/buddy-creator/scripts/preview.py +577 -0
  155. package/resources/buddy-creator/scripts/preview_panel.py +80 -0
  156. package/resources/buddy-creator/scripts/sources.py +239 -0
  157. package/resources/buddy-creator/version.json +8 -0
  158. package/resources/buddy-creator.manifest.json +696 -0
@@ -0,0 +1,100 @@
1
+ /* Dada product palette: cool white, ink and the supplied cyan brand mark.
2
+ Controls: 12px; content panels: 20px; brand surfaces: 28px; status: pill. */
3
+ :root {
4
+ color-scheme: light;
5
+ --color-paper: #f4f8fc;
6
+ --color-paper-soft: #eaf1f7;
7
+ --color-paper-raised: #ffffff;
8
+ --color-ink: #203344;
9
+ --color-ink-strong: #102738;
10
+ --color-ink-soft: #506577;
11
+ --color-muted: #566d80;
12
+ --color-rule: #dce6ee;
13
+ --color-rule-strong: #b5c9d8;
14
+ --color-accent: #007399;
15
+ --color-accent-hover: #006889;
16
+ --color-accent-soft: #e0f5fd;
17
+ --color-accent-ink: #ffffff;
18
+ --color-brand-bright: #24c9f1;
19
+ --color-brand-panel: #e3f5fc;
20
+ --color-focus: #007399;
21
+ --color-success: #13704e;
22
+ --color-success-soft: #e5f5ed;
23
+ --color-warning: #85531b;
24
+ --color-warning-soft: #fff1da;
25
+ --color-danger: #b33845;
26
+ --color-danger-soft: #ffedf0;
27
+ --color-overlay: rgb(12 31 48 / 38%);
28
+ --color-shadow: rgb(27 74 106 / 8%);
29
+ --color-transparent: transparent;
30
+ --font-display: "SF Pro Display", "PingFang SC", "Microsoft YaHei", sans-serif;
31
+ --font-body: "SF Pro Text", "PingFang SC", "Microsoft YaHei", sans-serif;
32
+ --font-mono: "SFMono-Regular", Consolas, monospace;
33
+ --space-3xs: .125rem;
34
+ --space-2xs: .25rem;
35
+ --space-xs: .5rem;
36
+ --space-sm: .75rem;
37
+ --space-md: 1rem;
38
+ --space-lg: 1.5rem;
39
+ --space-xl: 2.5rem;
40
+ --space-2xl: 4rem;
41
+ --space-3xl: 6rem;
42
+ --space-4xl: 9rem;
43
+ --text-xs: .75rem;
44
+ --text-sm: .875rem;
45
+ --text-base: 1rem;
46
+ --text-md: 1.125rem;
47
+ --text-lg: 1.25rem;
48
+ --text-xl: 1.625rem;
49
+ --text-2xl: 2rem;
50
+ --text-display: clamp(2rem, 3.2vw, 2.75rem);
51
+ --ease-out: cubic-bezier(.16, 1, .3, 1);
52
+ --dur-micro: 100ms;
53
+ --dur-short: 180ms;
54
+ --dur-long: 320ms;
55
+ --rule-thin: 1px;
56
+ --radius-xs: .5rem;
57
+ --radius-sm: .75rem;
58
+ --radius-md: .75rem;
59
+ --radius-lg: 1.25rem;
60
+ --radius-xl: 1.75rem;
61
+ --radius-pill: 999px;
62
+ --control-height: 3rem;
63
+ --shadow-whisper: 0 4px 16px var(--color-shadow);
64
+ --shadow-sheet: 0 16px 48px var(--color-shadow);
65
+ --z-base: 1;
66
+ --z-raised: 10;
67
+ --z-dropdown: 100;
68
+ --z-sticky: 200;
69
+ --z-modal: 400;
70
+ --z-toast: 500;
71
+ --z-tooltip: 600;
72
+ }
73
+ @media (prefers-color-scheme: dark) {
74
+ :root {
75
+ color-scheme: dark;
76
+ --color-paper: #101922;
77
+ --color-paper-soft: #203240;
78
+ --color-paper-raised: #17242f;
79
+ --color-ink: #e3edf5;
80
+ --color-ink-strong: #f4faff;
81
+ --color-ink-soft: #b1c3d1;
82
+ --color-muted: #98afc0;
83
+ --color-rule: #2d4252;
84
+ --color-rule-strong: #4b677b;
85
+ --color-accent: #46cef0;
86
+ --color-accent-hover: #82e5ff;
87
+ --color-accent-soft: #143b4b;
88
+ --color-accent-ink: #092e3b;
89
+ --color-brand-panel: #14303f;
90
+ --color-focus: #46cef0;
91
+ --color-success: #7ae0b0;
92
+ --color-success-soft: #173b31;
93
+ --color-warning: #efc787;
94
+ --color-warning-soft: #3b3021;
95
+ --color-danger: #ff9aa5;
96
+ --color-danger-soft: #402a33;
97
+ --color-overlay: rgb(2 10 18 / 65%);
98
+ --color-shadow: rgb(0 8 18 / 25%);
99
+ }
100
+ }
@@ -0,0 +1,236 @@
1
+ <!doctype html>
2
+ <html lang="zh-CN">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
6
+ <meta name="color-scheme" content="light dark">
7
+ <meta name="theme-color" content="#f4f8fc" media="(prefers-color-scheme: light)">
8
+ <meta name="theme-color" content="#101922" media="(prefers-color-scheme: dark)">
9
+ <title>搭搭本地调试</title>
10
+ <link rel="icon" type="image/png" href="/assets/developer-platform-icon.png">
11
+ <link rel="stylesheet" href="/assets/brand.css">
12
+ <link rel="stylesheet" href="/assets/tokens.css">
13
+ <link rel="stylesheet" href="/assets/app.css">
14
+ <script src="/assets/iphone-16-max.js" defer></script>
15
+ <script src="/assets/app.js" defer></script>
16
+ </head>
17
+ <body>
18
+ <a class="skip-link" href="#debug-content">跳到调试内容</a>
19
+
20
+ <div class="app-shell">
21
+ <aside class="sidebar" aria-label="预览调试导航">
22
+ <div class="brand" aria-label="搭搭本地调试">
23
+ <img class="brand-mark" src="/assets/developer-platform-icon.png" alt="">
24
+ <span class="brand-name">搭搭本地调试</span>
25
+ </div>
26
+
27
+ <div class="sidebar-section">
28
+ <p class="sidebar-label">开发调试</p>
29
+ <nav class="debug-tabs" role="tablist" aria-label="本地回合调试视图">
30
+ <button id="tab-overview" role="tab" aria-selected="true" aria-controls="panel-overview" tabindex="0">
31
+ <svg aria-hidden="true" viewBox="0 0 24 24"><rect x="4" y="4" width="7" height="7" rx="1.5"/><rect x="13" y="4" width="7" height="7" rx="1.5"/><rect x="4" y="13" width="7" height="7" rx="1.5"/><rect x="13" y="13" width="7" height="7" rx="1.5"/></svg><span>概览</span>
32
+ </button>
33
+ <button id="tab-timeline" role="tab" aria-selected="false" aria-controls="panel-timeline" tabindex="-1">
34
+ <svg aria-hidden="true" viewBox="0 0 24 24"><circle cx="12" cy="12" r="8"/><path d="M12 7v5l3.5 2"/></svg><span>执行时间线</span>
35
+ </button>
36
+ <button id="tab-context" role="tab" aria-selected="false" aria-controls="panel-context" tabindex="-1">
37
+ <svg aria-hidden="true" viewBox="0 0 24 24"><path d="M4 5h13v10H9l-4 4v-4H4Z"/><path d="M8 9h5M8 12h3M18 8h2v10h-7"/></svg><span>对话记录</span>
38
+ </button>
39
+ <button id="tab-protocol" role="tab" aria-selected="false" aria-controls="panel-protocol" tabindex="-1">
40
+ <svg aria-hidden="true" viewBox="0 0 24 24"><rect x="3.5" y="5" width="17" height="14" rx="2"/><path d="m7.5 9 3 3-3 3M13 15h3.5"/></svg><span>协议日志</span>
41
+ </button>
42
+ </nav>
43
+ </div>
44
+
45
+ </aside>
46
+
47
+ <div class="application">
48
+ <header class="topbar">
49
+ <div class="project-heading">
50
+ <h1 id="project-name">正在读取项目…</h1>
51
+ </div>
52
+
53
+ <div class="topbar-actions">
54
+ <div class="connection-state" id="connection-state" data-phase="idle" aria-live="polite">
55
+ <span class="connection-dot" aria-hidden="true"></span>
56
+ <span id="connection-label">未启动</span>
57
+ </div>
58
+ <button class="button button-primary" id="dev-control" type="button">启动 DEV</button>
59
+ </div>
60
+ </header>
61
+
62
+ <aside class="pairing-panel" id="pairing-panel" aria-labelledby="pairing-title" hidden>
63
+ <div>
64
+ <p class="eyebrow">Device preview</p>
65
+ <h2 id="pairing-title">在搭搭 App 中继续</h2>
66
+ </div>
67
+ <button class="icon-button" id="close-pairing" type="button" aria-label="关闭真机预览面板">
68
+ <svg aria-hidden="true" viewBox="0 0 24 24"><path d="m6 6 12 12M18 6 6 18"/></svg>
69
+ </button>
70
+ <div class="pairing-body" id="pairing-body">
71
+ <div class="pairing-placeholder" aria-hidden="true"><span></span><span></span><span></span><span></span></div>
72
+ <div>
73
+ <p class="pairing-status">正在读取真机入口…</p>
74
+ <p class="pairing-hint">真机将打开当前搭子的 DEV 详情页。</p>
75
+ </div>
76
+ </div>
77
+ </aside>
78
+
79
+ <div class="error-banner" id="error-banner" role="alert" hidden>
80
+ <span id="error-message"></span>
81
+ <button type="button" id="dismiss-error">知道了</button>
82
+ </div>
83
+
84
+ <main class="workspace" id="debug-content">
85
+ <section class="debugger" aria-label="本地回合调试器">
86
+ <div class="run-strip">
87
+ <div class="run-heading">
88
+ <div class="run-identity">
89
+ <p class="eyebrow">当前回合</p>
90
+ <div class="run-title-line">
91
+ <h2 id="run-title">尚无本地回合</h2>
92
+ <span class="status-pill" id="run-status" data-status="idle">等待消息</span>
93
+ </div>
94
+ <div class="run-reference" id="run-reference" hidden>
95
+ <span id="run-id"></span>
96
+ <button type="button" class="text-button" id="copy-run-id" disabled>复制 ID</button>
97
+ </div>
98
+ </div>
99
+ <div class="run-controls">
100
+ <label class="run-picker-label" for="run-picker">切换回合</label>
101
+ <div class="run-navigation">
102
+ <button type="button" class="run-step" id="previous-run" aria-label="上一轮" title="上一轮" disabled>←</button>
103
+ <select id="run-picker" class="run-picker" disabled>
104
+ <option value="">尚无运行记录</option>
105
+ </select>
106
+ <button type="button" class="run-step" id="next-run" aria-label="下一轮" title="下一轮" disabled>→</button>
107
+ </div>
108
+ <label class="run-follow"><input type="checkbox" id="follow-latest-run" checked>跟随最新回合</label>
109
+ </div>
110
+ </div>
111
+
112
+ <dl class="run-metrics" aria-label="本地回合指标">
113
+ <div><dt>接收</dt><dd id="metric-accept">—</dd></div>
114
+ <div><dt>首段文字</dt><dd id="metric-first">—</dd></div>
115
+ <div><dt>完整耗时</dt><dd id="metric-response">—</dd></div>
116
+ <div><dt>消息</dt><dd id="metric-messages">0</dd></div>
117
+ </dl>
118
+
119
+ </div>
120
+
121
+ <div class="debug-panels">
122
+ <section id="panel-overview" class="debug-panel" role="tabpanel" aria-labelledby="tab-overview">
123
+ <div class="overview-grid">
124
+ <article class="run-summary">
125
+ <div class="section-heading">
126
+ <div><h3>这一次发生了什么</h3><p>从消息到回复,按真实事件还原。</p></div>
127
+ <span class="source-label">本机观测</span>
128
+ </div>
129
+ <div class="empty-state" id="overview-empty">
130
+ <span class="empty-glyph" aria-hidden="true">↗</span>
131
+ <h4>发一条消息,开始记录</h4>
132
+ <p>这里会按本地回合展示真实的接收、首段文字、生成过程和完成状态。</p>
133
+ </div>
134
+ <div id="overview-content" hidden>
135
+ <div class="waterfall" id="waterfall" aria-label="本地回合耗时分布"></div>
136
+ <p class="run-summary-copy" id="run-summary-copy"></p>
137
+ </div>
138
+ </article>
139
+
140
+ <article class="environment-note">
141
+ <p class="eyebrow">运行环境</p>
142
+ <h3>DEV · 私聊</h3>
143
+ <dl>
144
+ <div><dt>Agent</dt><dd id="environment-agent">等待启动</dd></div>
145
+ <div><dt>Runtime</dt><dd id="environment-runtime">—</dd></div>
146
+ <div><dt>模型</dt><dd id="environment-model">—</dd></div>
147
+ </dl>
148
+ </article>
149
+ </div>
150
+ </section>
151
+
152
+ <section id="panel-timeline" class="debug-panel" role="tabpanel" aria-labelledby="tab-timeline" hidden>
153
+ <div class="section-heading">
154
+ <div><h3>执行时间线</h3><p>按发生顺序查看消息发送、流式输出和会话状态。</p></div>
155
+ <span class="source-label">真实事件</span>
156
+ </div>
157
+ <ol class="timeline" id="timeline-list"></ol>
158
+ </section>
159
+
160
+ <section id="panel-context" class="debug-panel" role="tabpanel" aria-labelledby="tab-context" hidden>
161
+ <div class="section-heading">
162
+ <div><h3>当前对话记录</h3><p>展示平台保存的当前对话消息。</p></div>
163
+ <span class="source-label" id="context-source">平台聊天记录</span>
164
+ </div>
165
+ <div class="context-list" id="context-list"></div>
166
+ </section>
167
+
168
+ <section id="panel-protocol" class="debug-panel" role="tabpanel" aria-labelledby="tab-protocol" hidden>
169
+ <div class="section-heading">
170
+ <div><h3>协议日志</h3><p>Runtime 输出、错误堆栈与 MLB 通信事件。</p></div>
171
+ <button class="text-button" id="copy-protocol" type="button">复制可见日志</button>
172
+ </div>
173
+ <div class="protocol-log" id="protocol-log" role="log" aria-live="polite"></div>
174
+ </section>
175
+ </div>
176
+ </section>
177
+
178
+ <section class="simulator-area" aria-label="搭搭 App 模拟器">
179
+ <div class="simulator-caption">
180
+ <h2>模拟私聊场景</h2>
181
+ <button class="simulator-device" id="pair-device" type="button" aria-expanded="false" aria-controls="pairing-panel">
182
+ <svg aria-hidden="true" viewBox="0 0 24 24"><path d="M8 2.75h8A2.25 2.25 0 0 1 18.25 5v14A2.25 2.25 0 0 1 16 21.25H8A2.25 2.25 0 0 1 5.75 19V5A2.25 2.25 0 0 1 8 2.75Z"/><path d="M10 18.25h4"/></svg>
183
+ <span>真机预览</span>
184
+ </button>
185
+ </div>
186
+
187
+ <div class="device-stage">
188
+ <div class="phone" aria-label="iPhone 模拟器">
189
+ <iphone-16-max mode="light">
190
+ <div class="phone-screen">
191
+ <header class="chat-navigation">
192
+ <button class="back-chevron" type="button" aria-label="返回(预览中不可用)" disabled>
193
+ <svg aria-hidden="true" viewBox="0 0 24 24"><path d="m15 18-6-6 6-6"/></svg>
194
+ </button>
195
+ <div class="buddy-identity"><h3 id="buddy-name">我的搭子</h3><p id="buddy-status" class="sr-only">DEV 未连接</p></div>
196
+ <div class="chat-navigation-actions" aria-hidden="true">
197
+ <button class="chat-widgets" type="button" aria-label="查看 Widget(预览中不可用)" disabled tabindex="-1">
198
+ <svg viewBox="0 0 24 24"><rect x="4" y="4" width="6" height="6" rx="1.5"/><rect x="14" y="4" width="6" height="6" rx="1.5"/><rect x="4" y="14" width="6" height="6" rx="1.5"/><rect x="14" y="14" width="6" height="6" rx="1.5"/></svg>
199
+ </button>
200
+ <button class="chat-more" type="button" aria-label="更多(预览中不可用)" disabled tabindex="-1">
201
+ <svg viewBox="0 0 24 24"><circle cx="5" cy="12" r="1.3"/><circle cx="12" cy="12" r="1.3"/><circle cx="19" cy="12" r="1.3"/></svg>
202
+ </button>
203
+ </div>
204
+ </header>
205
+
206
+ <div class="chat-messages" id="chat-messages" aria-live="polite" aria-label="模拟器聊天记录">
207
+ <div class="chat-empty" id="chat-empty" aria-label="暂无消息"></div>
208
+ </div>
209
+
210
+ <form class="composer" id="composer">
211
+ <button class="composer-tool composer-add" type="button" aria-label="添加内容(预览中不可用)" disabled tabindex="-1">
212
+ <svg aria-hidden="true" viewBox="0 0 24 24"><path d="M12 5v14M5 12h14"/></svg>
213
+ </button>
214
+ <label class="sr-only" for="message-input">发送消息</label>
215
+ <textarea id="message-input" rows="1" maxlength="32768" placeholder="发消息或长按发送语音" disabled></textarea>
216
+ <button class="composer-tool composer-voice" type="button" aria-label="发送语音(预览中不可用)" disabled tabindex="-1">
217
+ <svg aria-hidden="true" viewBox="0 0 24 24"><rect x="9" y="3" width="6" height="12" rx="3"/><path d="M6 11a6 6 0 0 0 12 0M12 17v4M9 21h6"/></svg>
218
+ </button>
219
+ <button class="send-button" id="send-message" type="submit" aria-label="发送消息" disabled>
220
+ <svg aria-hidden="true" viewBox="0 0 24 24"><path d="m6 12 6-6 6 6M12 6v12"/></svg>
221
+ </button>
222
+ </form>
223
+ <div class="home-indicator" aria-hidden="true"></div>
224
+ </div>
225
+ </iphone-16-max>
226
+ </div>
227
+ </div>
228
+ <p class="keyboard-hint"><kbd>Enter</kbd> 发送 · 回复期间请等待</p>
229
+ </section>
230
+ </main>
231
+ </div>
232
+ </div>
233
+
234
+ <div class="toast" id="toast" role="status" aria-live="polite" hidden></div>
235
+ </body>
236
+ </html>
@@ -0,0 +1,15 @@
1
+ /* Preview-only tokens. Shared brand tokens are loaded first from brand.css. */
2
+ :root {
3
+ --color-error: var(--color-danger);
4
+ --color-error-soft: var(--color-danger-soft);
5
+ /* The simulated phone preserves the App appearance in either desktop theme. */
6
+ --color-phone-paper: #ffffff;
7
+ --color-phone-surface: #f3f4f6;
8
+ --color-phone-ink: #20242a;
9
+ --color-phone-muted: #66727d;
10
+ --color-phone-accent: #24c9f1;
11
+ --rule-hair: 1px;
12
+ --page-gutter: clamp(1.25rem, 3vw, 3rem);
13
+ --ease-in-out: cubic-bezier(.65, 0, .35, 1);
14
+ --shadow-phone: 0 1.5rem 3rem var(--color-shadow);
15
+ }
package/package.json ADDED
@@ -0,0 +1,45 @@
1
+ {
2
+ "name": "@my-life-buddies/cli",
3
+ "version": "0.1.2",
4
+ "type": "module",
5
+ "description": "搭搭 Developer Platform 命令行工具",
6
+ "publishConfig": {
7
+ "access": "public",
8
+ "registry": "https://registry.npmjs.org/"
9
+ },
10
+ "engines": {
11
+ "node": ">=24"
12
+ },
13
+ "os": [
14
+ "darwin"
15
+ ],
16
+ "bin": {
17
+ "buddy-cli": "dist/bin/buddy.js"
18
+ },
19
+ "files": [
20
+ "dist/bin",
21
+ "dist/web",
22
+ "resources",
23
+ "README.md"
24
+ ],
25
+ "exports": {
26
+ "./package.json": "./package.json"
27
+ },
28
+ "scripts": {
29
+ "build": "tsc -p tsconfig.json && node ../../scripts/build-cli-package.mjs",
30
+ "prepack": "npm run build -w @buddy/cli-core && npm run build -w @buddy/preview && npm run build",
31
+ "test": "npm run build -w @buddy/cli-core && npm run build -w @buddy/preview && npm run build --silent && node --test test/*.test.mjs",
32
+ "typecheck": "tsc -p tsconfig.json --noEmit"
33
+ },
34
+ "dependencies": {
35
+ "ajv": "^8.20.0",
36
+ "tar-stream": "^3.2.1",
37
+ "@sneas/telephone": "1.1.2",
38
+ "qrcode": "1.5.4",
39
+ "ws": "8.21.3"
40
+ },
41
+ "devDependencies": {
42
+ "@buddy/cli-core": "0.1.2",
43
+ "@buddy/preview": "0.1.2"
44
+ }
45
+ }
@@ -0,0 +1,52 @@
1
+ # CLI 内置的 Creator Skill
2
+
3
+ 开发者运行 `buddy-cli init --mode create` 后,CLI 返回一份接续说明,让 Coding Agent 使用这里的 Skill 完成需求创作。这个目录保存可随包分发的程序与规则,不保存开发者作品。
4
+
5
+ ## 安装时带走什么,创作时留下什么
6
+
7
+ | 内容 | 保存位置 | 谁使用或修改 |
8
+ | --- | --- | --- |
9
+ | Skill 规则、Python 工具、预览资源 | 安装包内的 `resources/buddy-creator/` | Coding Agent 读取和执行;维护者随版本升级 |
10
+ | 来源与文件摘要 | [buddy-creator.manifest.json](buddy-creator.manifest.json) | 构建过程校验 |
11
+ | 云端身份绑定、初始背景、接续说明、作品与 Booklet | 开发者工程的 `.buddy/creator/` | CLI 创建绑定,Coding Agent 继续创作 |
12
+
13
+ 例如学习搭子的采访中断了,开发者在同一目录重新运行 create,继续使用原来的作品路径。无需再下载 Skill,也不把作品写进全局 CLI 安装目录。
14
+
15
+ CLI 只准备接续,不执行采访推理,也不把准备成功当成手册完成。Skill 返回 `creator_complete` 后,当前 Coding Agent 退出采访,按接续说明继续开发;已经明确的技术选择直接沿用,缺少必要选择时主动询问。没有常驻 CLI 进程替 Coding Agent 编写代码。操作流程见 [CLI 使用说明](../../../apps/cli/README.md#想法还模糊时先梳理需求)。
16
+
17
+ ## 这份快照来自哪里
18
+
19
+ 来源是 [Buddy-Creator-Skill](https://github.com/my-life-buddies/Buddy-Creator-Skill),固定 `main` 提交为 `f642ddd59e1c30a5d4d3a2e9f6a6811f61ce1f2f`,产品版本 **1.3.0**。
20
+
21
+ 这次更新引入更自然的提问规则、按具体缺口记录的追问边界,以及无新增信息时的收口处理。`scripts/interview.py` 负责计数与状态,Coding Agent 根据真实回答提交 `interview.assessment`;它不是新的采访模型服务。详细字段见 [宿主协议](buddy-creator/references/host-guide.md)。
22
+
23
+ 收录范围按上游安装清单确定:四个顶层文件和 `agents`、`assets`、`references`、`scripts`。Git 元数据、开发打包工具和用户作品不在其中;第三方许可证保留。
24
+
25
+ 当前保留两项本地补丁:
26
+
27
+ - `initial-context-opening`:CLI 把登记资料写入 `initial-context.json`,Skill 接收后由 Coding Agent 按已有主题准备开场。新登记的资料须由用户提供、确认或授权代定;平台快照本身不证明用户确认,旧记录还可能包含未经确认的暂拟文案。基础资料也不算采访回答或四册确认。开场使用 1.3.0 的问题与缺口绑定;缺省 gapId 和旧开场记录都能安全重试。
28
+ - `completion-return`:Skill 显式报告创作完成或成果待恢复,CLI 接续说明负责把当前 Coding Agent 带回开发流程。手册缺失、失效或项目暂停时不进入开发;用户只要设计时也不自动扩展任务。
29
+
30
+ manifest 的 revision 指向上游基线,localPatches 标记本地调整,文件摘要对应实际分发内容。
31
+
32
+ `cli-core/package.json.files` 显式包含 resources。构建时的 [校验脚本](../scripts/verify-creator-skill.mjs) 比对文件清单、大小和 SHA-256,不联网下载,也不执行 Python。
33
+
34
+ ## 执行工具时的约定
35
+
36
+ Coding Agent 使用 Python 3.9+,带 `-B` 并设置 `PYTHONDONTWRITEBYTECODE=1`,让预览子进程也不向安装目录写字节码缓存。创作文件始终写入指定工作区。
37
+
38
+ 资源缺失或损坏时,CLI 提示修复安装,不临时从网络下载另一版。Skill 可以不经下载直接使用,不代表登录和平台身份登记可以离线。
39
+
40
+ 早期下载版项目会迁移未被用户修改的接续说明,并保留备份、旧 Skill 文件和作品;用户自己改过的说明不自动覆盖。迁移实现位于 [creator.ts](../src/init/creator.ts)。
41
+
42
+ 1.0.0 的已有作品仍用原 workspace 接续,不重置回答、确认和进度。只打开不会迁移访谈记录;第一次新提交时按历史回答补齐内部缺口信息。Coding Agent 需要重新读取新版 Skill 和宿主协议,回答旧问题时也按新协议提交 assessment。
43
+
44
+ ## 维护者怎样升级
45
+
46
+ 先审核上游提交差异,再整体更新快照、来源信息和 manifest;逐项检查 localPatches 是否仍需保留。本地修订也要同步补丁说明和文件摘要,不能把修改后的资源标为未改动的上游快照。
47
+
48
+ 升级后,在仓库根目录执行 `npm run check` 和 `npm run verify:package`。后者检查真实 npm 安装后资源是否完整,并在禁用资源下载的条件下验证 create、重试和同身份 direct 衔接。它验证接入流程,不代替人工评审一次完整采访的效果。
49
+
50
+ [上游访谈测试](../../../tests/fixtures/creator-upstream-interview.py) 从同一提交的 `development/test_interview.py` 原样收录,只用于测试,不进入 CLI 安装包。[测试入口](../../../tests/creator-context.test.mjs) 让它运行在实际内置资源上,同时检查我们的背景传递与旧项目兼容。
51
+
52
+ [完成交接测试](../../../tests/fixtures/creator-completion.py) 验证最后一轮、旧项目恢复、成果损坏和暂停等边界;CLI 集成测试继续验证完成后 direct 复用同一个云端身份。它们不等同于一次真实 Coding Agent 的完整创作与开发体验。