@kevin5251984/guild 0.2.12

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 (70) hide show
  1. package/LICENSE +21 -0
  2. package/bin/guildd.mjs +20 -0
  3. package/cordis.yml +24 -0
  4. package/package.json +52 -0
  5. package/src/agent-file.ts +125 -0
  6. package/src/browser.ts +668 -0
  7. package/src/catalog/default-bots.ts +263 -0
  8. package/src/catalog/skills.ts +128 -0
  9. package/src/catalog/subagents.ts +70 -0
  10. package/src/chat-parts.ts +71 -0
  11. package/src/cli-args.ts +75 -0
  12. package/src/cli.ts +60 -0
  13. package/src/compact.ts +355 -0
  14. package/src/cordis.d.ts +40 -0
  15. package/src/db.ts +653 -0
  16. package/src/generate.ts +673 -0
  17. package/src/handlers.ts +1623 -0
  18. package/src/harness.ts +326 -0
  19. package/src/host-agents.ts +137 -0
  20. package/src/host-browse.ts +199 -0
  21. package/src/host-skills.ts +150 -0
  22. package/src/image-gen.ts +270 -0
  23. package/src/index.ts +12 -0
  24. package/src/llm.ts +993 -0
  25. package/src/mcp.ts +563 -0
  26. package/src/memory.ts +159 -0
  27. package/src/mention.ts +176 -0
  28. package/src/oauth.ts +1474 -0
  29. package/src/plugins/api.ts +8 -0
  30. package/src/plugins/chat.ts +31 -0
  31. package/src/plugins/harness.ts +77 -0
  32. package/src/plugins/llm.ts +50 -0
  33. package/src/plugins/mcp.ts +58 -0
  34. package/src/plugins/memory.ts +42 -0
  35. package/src/plugins/oauth.ts +47 -0
  36. package/src/plugins/server.ts +126 -0
  37. package/src/plugins/store.ts +29 -0
  38. package/src/plugins/tools.ts +79 -0
  39. package/src/public/buddy.js +432 -0
  40. package/src/public/chat.css +3045 -0
  41. package/src/public/chat.html +5834 -0
  42. package/src/public/favicon-16.png +0 -0
  43. package/src/public/favicon-16.svg +10 -0
  44. package/src/public/favicon-32.png +0 -0
  45. package/src/public/favicon.ico +0 -0
  46. package/src/public/favicon.svg +13 -0
  47. package/src/public/i18n.js +663 -0
  48. package/src/public/index.html +143 -0
  49. package/src/public/library.html +678 -0
  50. package/src/public/mcp-add.html +126 -0
  51. package/src/public/md.js +332 -0
  52. package/src/public/rpg/inn-street.jpg +0 -0
  53. package/src/public/settings.html +795 -0
  54. package/src/public/skills-add.html +212 -0
  55. package/src/public/studio.html +1181 -0
  56. package/src/public/style.css +1678 -0
  57. package/src/public/subagents-add.html +152 -0
  58. package/src/router.ts +978 -0
  59. package/src/send-budget.ts +52 -0
  60. package/src/server.ts +1 -0
  61. package/src/skill-import.ts +250 -0
  62. package/src/slash.ts +15 -0
  63. package/src/start.ts +103 -0
  64. package/src/store.ts +1208 -0
  65. package/src/subagent.ts +355 -0
  66. package/src/tools.ts +818 -0
  67. package/src/trajectory.ts +339 -0
  68. package/src/usage.ts +111 -0
  69. package/vendor/protocol/package.json +19 -0
  70. package/vendor/protocol/src/index.ts +159 -0
@@ -0,0 +1,143 @@
1
+ <!doctype html>
2
+ <html lang="zh-Hant">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
+ <link rel="icon" href="/favicon.ico" sizes="32x32" />
7
+ <link rel="icon" href="/favicon.svg" type="image/svg+xml" />
8
+ <link rel="icon" href="/favicon-32.png" type="image/png" sizes="32x32" />
9
+ <link rel="icon" href="/favicon-16.png" type="image/png" sizes="16x16" />
10
+ <title>Guild — Talent bench</title>
11
+ <link rel="preconnect" href="https://fonts.googleapis.com" />
12
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
13
+ <link
14
+ href="https://fonts.googleapis.com/css2?family=Press+Start+2P&family=VT323&display=swap"
15
+ rel="stylesheet"
16
+ />
17
+ <link rel="stylesheet" href="/style.css" />
18
+ <script src="/buddy.js"></script>
19
+ </head>
20
+ <body class="office-page">
21
+ <header class="appbar">
22
+ <a class="logo" href="/">Guild</a>
23
+ <nav>
24
+ <a class="nav-link on" href="/">Bench</a>
25
+ <a class="nav-link" href="/chat">訊息</a>
26
+ <a class="nav-link" href="/library">工坊</a>
27
+ <a class="nav-link" href="/studio">Bot Studio</a>
28
+ </nav>
29
+ </header>
30
+ <main class="office-shell">
31
+ <div class="office-hud">
32
+ <p class="eyebrow">Guild HQ</p>
33
+ <h1>Talent bench</h1>
34
+ <p class="lede">點工位上的人就能改設定。空位去 Studio 招人。</p>
35
+ <p id="status" class="muted">Connecting…</p>
36
+ </div>
37
+ <div class="office">
38
+ <div class="wall">
39
+ <div class="window"></div>
40
+ <div class="window"></div>
41
+ <div class="window"></div>
42
+ <span class="banner">GUILD HQ</span>
43
+ <span class="clock">22:00</span>
44
+ </div>
45
+ <div class="nook nook-l">
46
+ <div class="prop plant" title="盆栽"></div>
47
+ <div class="prop cooler" title="飲水機"></div>
48
+ </div>
49
+ <div id="bench" class="floor"></div>
50
+ <div class="nook nook-r">
51
+ <div class="prop coffee" title="咖啡機"></div>
52
+ <div class="prop board" title="白板"></div>
53
+ </div>
54
+ <div class="dialogue" id="dialogue">滑過工位看介紹。點進去就能設定。</div>
55
+ </div>
56
+ </main>
57
+ <script>
58
+ function seedOf(key) {
59
+ let n = 0;
60
+ for (const ch of key) n = (n + ch.charCodeAt(0) * 17) % 997;
61
+ return n;
62
+ }
63
+ function shirtColor(key) {
64
+ const colors = ["#7c6af7", "#5b8def", "#2ea887", "#e07a3d", "#d4537e"];
65
+ return colors[seedOf(key) % colors.length];
66
+ }
67
+
68
+ function escapeHtml(value) {
69
+ return String(value)
70
+ .replace(/&/g, "&amp;")
71
+ .replace(/</g, "&lt;")
72
+ .replace(/>/g, "&gt;")
73
+ .replace(/"/g, "&quot;");
74
+ }
75
+ function stationHtml(bot) {
76
+ const line = bot.oneLiner || "點我設定";
77
+ return (
78
+ '<a class="station" href="/edit/' +
79
+ encodeURIComponent(bot.id) +
80
+ '" data-line="@' +
81
+ escapeHtml(bot.handle) +
82
+ " · " +
83
+ escapeHtml(line) +
84
+ '">' +
85
+ '<canvas class="buddy" data-handle="' +
86
+ escapeHtml(bot.handle) +
87
+ '"></canvas>' +
88
+ '<div class="desk-sprite"><span class="monitor"></span></div>' +
89
+ '<span class="nameplate">' +
90
+ escapeHtml(bot.name) +
91
+ "</span></a>"
92
+ );
93
+ }
94
+
95
+ function bindDialogue(root) {
96
+ const box = document.getElementById("dialogue");
97
+ const idle = "滑過工位看介紹。點進去就能設定。";
98
+ root.querySelectorAll(".station").forEach((el) => {
99
+ el.addEventListener("mouseenter", () => {
100
+ box.textContent = el.getAttribute("data-line") || idle;
101
+ });
102
+ el.addEventListener("focus", () => {
103
+ box.textContent = el.getAttribute("data-line") || idle;
104
+ });
105
+ });
106
+ root.addEventListener("mouseleave", () => {
107
+ box.textContent = idle;
108
+ });
109
+ }
110
+
111
+ Promise.all([fetch("/health").then((r) => r.json()), fetch("/bots").then((r) => r.json())])
112
+ .then(([health, bench]) => {
113
+ const status = document.getElementById("status");
114
+ status.className = "health";
115
+ status.textContent = health.service + " · " + health.status;
116
+ const root = document.getElementById("bench");
117
+ const bots = Array.isArray(bench) ? bench : [];
118
+ if (bots.length === 0) {
119
+ root.innerHTML =
120
+ '<a class="station vacant" href="/studio" data-line="到 Bot Studio 招人">' +
121
+ '<div class="desk-sprite"><span class="monitor"></span></div>' +
122
+ '<span class="nameplate">空位</span></a>';
123
+ bindDialogue(root);
124
+ return;
125
+ }
126
+ root.innerHTML =
127
+ bots.map(stationHtml).join("") +
128
+ '<a class="station vacant" href="/studio" data-line="到 Bot Studio 招人">' +
129
+ '<div class="desk-sprite"><span class="monitor"></span></div>' +
130
+ '<span class="nameplate">空位</span></a>';
131
+ root.querySelectorAll("canvas.buddy").forEach((canvas) => {
132
+ const handle = canvas.getAttribute("data-handle") || "";
133
+ drawBuddy(canvas, shirtColor(handle), seedOf(handle));
134
+ });
135
+ bindDialogue(root);
136
+ })
137
+ .catch((err) => {
138
+ document.getElementById("status").className = "error";
139
+ document.getElementById("status").textContent = err.message;
140
+ });
141
+ </script>
142
+ </body>
143
+ </html>