@celsoft/coordinator 0.0.0 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (131) hide show
  1. package/CHANGELOG.md +11 -0
  2. package/README.md +107 -0
  3. package/THIRD_PARTY_NOTICES.md +2005 -0
  4. package/agents/console.md +20 -0
  5. package/agents/free.md +110 -0
  6. package/build/0-JP6XL6LB.js +17 -0
  7. package/build/1-A52YZWNS.js +17 -0
  8. package/build/2-CLH2NM6F.js +32 -0
  9. package/build/3-4N467IB6.js +45 -0
  10. package/build/4-WL5H4LUW.js +29 -0
  11. package/build/_layout.svelte-KPUSX7LQ.js +27 -0
  12. package/build/_page.svelte-22H56UR6.js +7972 -0
  13. package/build/_page.svelte-CVWUNRQC.js +135 -0
  14. package/build/_page.svelte-LTZXBHMT.js +57 -0
  15. package/build/_server.ts-3KVBYN6P.js +20 -0
  16. package/build/_server.ts-3POPKVEM.js +47 -0
  17. package/build/_server.ts-5735T2V5.js +31 -0
  18. package/build/_server.ts-5VXGNWV2.js +38 -0
  19. package/build/_server.ts-645KP7WP.js +42 -0
  20. package/build/_server.ts-A3AA24Z2.js +28 -0
  21. package/build/_server.ts-CITUOEM6.js +58 -0
  22. package/build/_server.ts-I7HMTPOA.js +25 -0
  23. package/build/_server.ts-M5BQ4LLX.js +30 -0
  24. package/build/_server.ts-OB4O27HF.js +683 -0
  25. package/build/_server.ts-OJT7HE7M.js +15 -0
  26. package/build/_server.ts-OYGWVLZM.js +12 -0
  27. package/build/_server.ts-T75UVMQP.js +38 -0
  28. package/build/_server.ts-WYZYNHUZ.js +28 -0
  29. package/build/_server.ts-Z26EB47B.js +486 -0
  30. package/build/chunk-4CIG53L5.js +33 -0
  31. package/build/chunk-BJTJS3XY.js +338 -0
  32. package/build/chunk-F2CNWJZM.js +14 -0
  33. package/build/chunk-HGYE3UTU.js +416 -0
  34. package/build/chunk-KAYW2W7H.js +1311 -0
  35. package/build/chunk-LFP3UPCM.js +10 -0
  36. package/build/chunk-M44JEFEH.js +62 -0
  37. package/build/chunk-MC5AGLMY.js +39 -0
  38. package/build/chunk-NCZ77J5E.js +19798 -0
  39. package/build/chunk-NVNLDPUJ.js +2122 -0
  40. package/build/chunk-PDCON4KS.js +494 -0
  41. package/build/chunk-Q4OQNY5M.js +25 -0
  42. package/build/chunk-QCUOR2U5.js +75 -0
  43. package/build/chunk-R6RYZZWA.js +46 -0
  44. package/build/chunk-SOJTASZC.js +51 -0
  45. package/build/chunk-SU26PJVX.js +410 -0
  46. package/build/chunk-U5BSBG4R.js +506 -0
  47. package/build/chunk-UEKOZGRO.js +37 -0
  48. package/build/chunk-W6EFUWJ2.js +9 -0
  49. package/build/chunk-WOPREK6Q.js +117 -0
  50. package/build/chunk-WWJ3F4QS.js +127 -0
  51. package/build/chunk-ZGZJEEE3.js +1091 -0
  52. package/build/client/_app/immutable/assets/0.BGa5ZNDM.css +1 -0
  53. package/build/client/_app/immutable/chunks/BUrrLYDt.js +2 -0
  54. package/build/client/_app/immutable/chunks/BgFr_EyZ.js +4 -0
  55. package/build/client/_app/immutable/chunks/Bjy-W4x2.js +82 -0
  56. package/build/client/_app/immutable/chunks/C8qZab0y.js +56 -0
  57. package/build/client/_app/immutable/chunks/C90fLsA5.js +4 -0
  58. package/build/client/_app/immutable/chunks/CRzLMJPS.js +1 -0
  59. package/build/client/_app/immutable/chunks/DLT1iIlz.js +2 -0
  60. package/build/client/_app/immutable/chunks/pIrVVOVY.js +2 -0
  61. package/build/client/_app/immutable/entry/app.0DERehLW.js +3 -0
  62. package/build/client/_app/immutable/entry/payload.DSmR2FwN.js +2 -0
  63. package/build/client/_app/immutable/entry/start.B7srFiqh.js +3 -0
  64. package/build/client/_app/immutable/nodes/0.aD9vJoxR.js +2 -0
  65. package/build/client/_app/immutable/nodes/1.Br4FL91i.js +2 -0
  66. package/build/client/_app/immutable/nodes/2.vl6OYfu3.js +8 -0
  67. package/build/client/_app/immutable/nodes/3.VYqJOLAF.js +2 -0
  68. package/build/client/_app/immutable/nodes/4.jF9UVlFN.js +2 -0
  69. package/build/client/_app/version.json +1 -0
  70. package/build/client/apple-touch-icon.png +0 -0
  71. package/build/client/favicon.ico +0 -0
  72. package/build/client/favicon.svg +48 -0
  73. package/build/client/icon-192.png +0 -0
  74. package/build/client/icon-512.png +0 -0
  75. package/build/client/icon-maskable-512.png +0 -0
  76. package/build/client/icon.svg +44 -0
  77. package/build/client/manifest.webmanifest +15 -0
  78. package/build/error.svelte-JXZDY65F.js +51 -0
  79. package/build/handler.js +716 -0
  80. package/build/hooks.server-34IMHRKC.js +43 -0
  81. package/build/instance-NP3FJIWW.js +2967 -0
  82. package/client/client.mjs +28 -0
  83. package/client/hooks.mjs +7 -0
  84. package/client/register.mjs +5 -0
  85. package/dist/cli.js +62826 -0
  86. package/dist/port.js +36691 -0
  87. package/package.json +20 -1
  88. package/skills/agents/.claude-plugin/plugin.json +5 -0
  89. package/skills/agents/hooks/hooks.json +1 -0
  90. package/skills/agents/hooks/register.ts +57 -0
  91. package/skills/agents/skills/bus-work/SKILL.md +66 -0
  92. package/skills/agents/skills/plan/SKILL.md +98 -0
  93. package/skills/console/.claude-plugin/plugin.json +5 -0
  94. package/skills/console/hooks/hooks.json +1 -0
  95. package/skills/console/hooks/register.ts +10 -0
  96. package/skills/console/skills/bus/SKILL.md +61 -0
  97. package/skills/default/.claude-plugin/plugin.json +5 -0
  98. package/skills/default/skills/git-workflow/SKILL.md +294 -0
  99. package/skills/default/skills/git-workflow/mise-tasks/_lib.sh +107 -0
  100. package/skills/default/skills/git-workflow/mise-tasks/clone +36 -0
  101. package/skills/default/skills/git-workflow/mise-tasks/repo-list +8 -0
  102. package/skills/default/skills/git-workflow/mise-tasks/unpushed +26 -0
  103. package/skills/default/skills/git-workflow/mise-tasks/worktree-add +60 -0
  104. package/skills/default/skills/github/SKILL.md +208 -0
  105. package/skills/default/skills/github/scripts/gh-org +196 -0
  106. package/skills/default/skills/plan-page/SKILL.md +300 -0
  107. package/skills/default/skills/plan-page/assets/index.html +854 -0
  108. package/skills/default/skills/plan-page/scripts/inline +46 -0
  109. package/skills/default/skills/plan-page/scripts/stage +26 -0
  110. package/skills/default/skills/secrets/SKILL.md +134 -0
  111. package/skills/default/skills/secrets/scripts/secrets-check +87 -0
  112. package/skills/default/skills/writing-style/SKILL.md +45 -0
  113. package/skills/extra/.claude-plugin/plugin.json +5 -0
  114. package/skills/extra/skills/artifacts/SKILL.md +52 -0
  115. package/skills/extra/skills/github-actions/SKILL.md +78 -0
  116. package/skills/extra/skills/github-actions/scan +32 -0
  117. package/skills/extra/skills/markdown-review/SKILL.md +70 -0
  118. package/skills/extra/skills/markdown-review/assets/index.html +201 -0
  119. package/skills/extra/skills/markdown-review/scripts/stage +36 -0
  120. package/skills/extra/skills/mise-usage/SKILL.md +155 -0
  121. package/skills/extra/skills/plugin-authoring/SKILL.md +317 -0
  122. package/skills/extra/skills/project-conventions/SKILL.md +64 -0
  123. package/skills/extra/skills/questions/SKILL.md +156 -0
  124. package/skills/extra/skills/questions/assets/index.html +376 -0
  125. package/skills/extra/skills/questions/scripts/stage +26 -0
  126. package/skills/extra/skills/serve/SKILL.md +165 -0
  127. package/skills/extra/skills/serve/scripts/serve +268 -0
  128. package/skills/extra/skills/serve/scripts/server.py +345 -0
  129. package/skills/extra/skills/skill-dependencies/SKILL.md +65 -0
  130. package/skills/extra/skills/skill-maintenance/SKILL.md +101 -0
  131. package/skills/extra/skills/ticketing/SKILL.md +125 -0
@@ -0,0 +1,338 @@
1
+ import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
2
+ import {
3
+ resolveIcon
4
+ } from "./chunk-M44JEFEH.js";
5
+ import {
6
+ attr_class,
7
+ attributes,
8
+ bind_props,
9
+ clsx,
10
+ derived,
11
+ getContext,
12
+ html,
13
+ setContext
14
+ } from "./chunk-KAYW2W7H.js";
15
+
16
+ // build/server/chunks/Button.js
17
+ function Icon($$renderer, $$props) {
18
+ $$renderer.component(($$renderer2) => {
19
+ let { name, class: className = "" } = $$props;
20
+ const icon = derived(() => resolveIcon(name));
21
+ if (icon() && "component" in icon()) {
22
+ $$renderer2.push("<!--[0-->");
23
+ if (icon().component) {
24
+ $$renderer2.push("<!--[-->");
25
+ icon().component($$renderer2, {
26
+ class: ["sd-icon", className],
27
+ size: 16,
28
+ strokeWidth: 2,
29
+ "aria-hidden": "true"
30
+ });
31
+ $$renderer2.push("<!--]-->");
32
+ } else {
33
+ $$renderer2.push("<!--[!-->");
34
+ $$renderer2.push("<!--]-->");
35
+ }
36
+ } else $$renderer2.push(`<!--[-1--><svg${attr_class(clsx(["sd-icon", className]))} viewBox="0 0 24 24" aria-hidden="true">${html(icon() && "markup" in icon() ? icon().markup : "")}</svg>`);
37
+ $$renderer2.push(`<!--]-->`);
38
+ });
39
+ }
40
+ var timing = {
41
+ spinnerAfter: 400,
42
+ spinnerAtLeast: 300,
43
+ slowAfter: 1e4,
44
+ debounce: 500
45
+ };
46
+ var messages = {
47
+ working: "Working",
48
+ slow: "Still working",
49
+ saved: "Saved",
50
+ checking: "Checking the code",
51
+ failed: "That didn't work. Try again."
52
+ };
53
+ var sleep = (ms) => new Promise((r) => setTimeout(r, ms));
54
+ var isThenable = (v) => v != null && typeof v.then === "function";
55
+ var newKey = () => globalThis.crypto?.randomUUID?.() ?? Array.from(crypto.getRandomValues(/* @__PURE__ */ new Uint8Array(16)), (b) => b.toString(16).padStart(2, "0")).join("");
56
+ var region;
57
+ function announce(text) {
58
+ if (typeof document === "undefined" || !text) return;
59
+ if (!region || !region.isConnected) {
60
+ region = document.createElement("div");
61
+ region.className = "sd-sr";
62
+ region.setAttribute("aria-live", "polite");
63
+ region.setAttribute("aria-atomic", "true");
64
+ region.dataset.sdAnnouncer = "";
65
+ document.body.append(region);
66
+ }
67
+ region.textContent = "";
68
+ setTimeout(() => region.textContent = text, 30);
69
+ }
70
+ var dev = () => globalThis.__SERVICE_DARK_DEV__ ?? false;
71
+ var watch = {
72
+ until: 0,
73
+ name: "",
74
+ inside: false,
75
+ saw: false
76
+ };
77
+ var fetchWatched = false;
78
+ function watchFetch() {
79
+ if (fetchWatched || typeof globalThis.fetch !== "function") return;
80
+ fetchWatched = true;
81
+ const original = globalThis.fetch;
82
+ globalThis.fetch = function(...args) {
83
+ if (watch.inside) watch.saw = true;
84
+ else if (performance.now() < watch.until) warnUnreturned(watch.name);
85
+ return original.apply(this, args);
86
+ };
87
+ }
88
+ function warnUnreturned(name) {
89
+ watch.until = 0;
90
+ console.warn(`Service Dark: ${name} started a request but its handler returned nothing, so nothing waited for it. Return the promise: () => save(), not () => { save(); }.`);
91
+ }
92
+ function call(fn, arg, name) {
93
+ if (!dev()) return fn(arg);
94
+ watchFetch();
95
+ watch.inside = true;
96
+ watch.saw = false;
97
+ let result;
98
+ try {
99
+ result = fn(arg);
100
+ } finally {
101
+ watch.inside = false;
102
+ }
103
+ if (!isThenable(result)) {
104
+ if (watch.saw) warnUnreturned(name);
105
+ else watch = {
106
+ until: performance.now() + 50,
107
+ name,
108
+ inside: false,
109
+ saw: false
110
+ };
111
+ }
112
+ return result;
113
+ }
114
+ var Pending = class {
115
+ /** True from the moment the wait starts: block repeats and edits. */
116
+ busy = false;
117
+ /** True once the wait passes timing.spinnerAfter: show the spinner. */
118
+ spinning = false;
119
+ /** True once the wait passes timing.slowAfter: say "Still working". */
120
+ slow = false;
121
+ /** The sentence from the last failed wait, until the next one starts. */
122
+ error = "";
123
+ #controller = null;
124
+ #key = null;
125
+ /**
126
+ * @param {object} [options]
127
+ * @param {string} [options.name] Names the component in dev warnings.
128
+ * @param {boolean} [options.abortable] Cancel and Escape may stop the wait instead of being blocked.
129
+ * @param {boolean} [options.speak] Announce "Working", "Still working" and errors. Default true.
130
+ */
131
+ constructor({ name = "A Service Dark handler", abortable = false, speak = true } = {}) {
132
+ this.name = name;
133
+ this.abortable = abortable;
134
+ this.speak = speak;
135
+ }
136
+ /**
137
+ * Run fn once; a call while busy is ignored.
138
+ * @param {(wait: { signal: AbortSignal, key: string }) => unknown} fn
139
+ * @returns {Promise<{ ok: boolean, error?: string, aborted?: boolean, skipped?: boolean, value?: unknown }>}
140
+ */
141
+ async run(fn) {
142
+ if (this.busy) return {
143
+ ok: false,
144
+ skipped: true
145
+ };
146
+ this.busy = true;
147
+ this.error = "";
148
+ const controller = new AbortController();
149
+ this.#controller = controller;
150
+ const key = this.#key ??= newKey();
151
+ let shownAt = 0;
152
+ const spin = setTimeout(() => {
153
+ this.spinning = true;
154
+ shownAt = performance.now();
155
+ if (this.speak) announce(messages.working);
156
+ }, timing.spinnerAfter);
157
+ const slow = setTimeout(() => {
158
+ this.slow = true;
159
+ if (this.speak) announce(messages.slow);
160
+ }, timing.slowAfter);
161
+ let outcome;
162
+ let unknown = false;
163
+ try {
164
+ const returned = call(fn, {
165
+ signal: controller.signal,
166
+ key
167
+ }, this.name);
168
+ outcome = isThenable(returned) ? await returned : void 0;
169
+ } catch (e) {
170
+ if (!controller.signal.aborted) {
171
+ unknown = true;
172
+ console.error(e);
173
+ outcome = messages.failed;
174
+ }
175
+ }
176
+ clearTimeout(spin);
177
+ clearTimeout(slow);
178
+ if (shownAt) {
179
+ const left = timing.spinnerAtLeast - (performance.now() - shownAt);
180
+ if (left > 0) await sleep(left);
181
+ }
182
+ this.busy = false;
183
+ this.spinning = false;
184
+ this.slow = false;
185
+ this.#controller = null;
186
+ if (!unknown) this.#key = null;
187
+ if (controller.signal.aborted) return {
188
+ ok: false,
189
+ aborted: true
190
+ };
191
+ if (outcome === false) return { ok: false };
192
+ if (typeof outcome === "string" && outcome) {
193
+ this.error = outcome;
194
+ if (this.speak) announce(outcome);
195
+ return {
196
+ ok: false,
197
+ error: outcome
198
+ };
199
+ }
200
+ return {
201
+ ok: true,
202
+ value: outcome
203
+ };
204
+ }
205
+ /** Stop waiting: the signal aborts, and the result is ignored. The server may still finish the request. */
206
+ abort() {
207
+ this.#controller?.abort();
208
+ }
209
+ /**
210
+ * For SvelteKit forms: <form method="POST" use:enhance={wait.enhance()} use:busy={wait.busy}>.
211
+ * A failure's `message` (from fail(400, { message })) becomes the error.
212
+ * @param {{ reset?: boolean, invalidateAll?: boolean }} [options] passed to update()
213
+ */
214
+ enhance(options) {
215
+ return ({ cancel, controller }) => {
216
+ if (this.busy) return cancel();
217
+ let finish;
218
+ const answered = new Promise((r) => finish = r);
219
+ this.run(({ signal }) => {
220
+ signal.addEventListener("abort", () => controller.abort());
221
+ return answered;
222
+ });
223
+ return async ({ result, update }) => {
224
+ await update(options);
225
+ if (result.type === "failure") finish(typeof result.data?.message === "string" ? result.data.message : messages.failed);
226
+ else if (result.type === "error") finish(messages.failed);
227
+ else finish();
228
+ };
229
+ };
230
+ }
231
+ };
232
+ var Latest = class {
233
+ pending;
234
+ #next = null;
235
+ /** @param {(result: Awaited<ReturnType<Pending["run"]>>) => void} onsettle called only for the latest send */
236
+ constructor(onsettle, name) {
237
+ this.pending = new Pending({
238
+ name,
239
+ speak: false
240
+ });
241
+ this.onsettle = onsettle;
242
+ }
243
+ /** @param {(wait: { signal: AbortSignal, key: string, seq: number }) => unknown} fn */
244
+ send(fn) {
245
+ const seq = nextSeq();
246
+ if (this.pending.busy) this.#next = {
247
+ fn,
248
+ seq
249
+ };
250
+ else this.#go({
251
+ fn,
252
+ seq
253
+ });
254
+ }
255
+ async #go({ fn, seq }) {
256
+ const result = await this.pending.run((wait) => fn({
257
+ ...wait,
258
+ seq
259
+ }));
260
+ const next = this.#next;
261
+ this.#next = null;
262
+ if (next) this.#go(next);
263
+ else this.onsettle?.(result);
264
+ }
265
+ };
266
+ var lastSeq = 0;
267
+ function nextSeq() {
268
+ lastSeq = Math.max(lastSeq + 1, Math.floor((performance.timeOrigin + performance.now()) * 1e3));
269
+ return lastSeq;
270
+ }
271
+ var KEY = Symbol("sd-pending");
272
+ function providePending(p) {
273
+ setContext(KEY, p);
274
+ return p;
275
+ }
276
+ function pendingContext() {
277
+ return getContext(KEY);
278
+ }
279
+ function buttonState({ own, form, submit, cancel }) {
280
+ if (submit && form) return {
281
+ blocked: form.busy,
282
+ spinning: form.spinning
283
+ };
284
+ return {
285
+ blocked: own.busy || !!form?.busy && !(cancel && form.abortable),
286
+ spinning: own.spinning
287
+ };
288
+ }
289
+ function Button($$renderer, $$props) {
290
+ $$renderer.component(($$renderer2) => {
291
+ let { variant = "secondary", size = "md", icon, block = false, type = "button", cancel = false, error = "", onclick, class: className, children, $$slots, $$events, ...rest } = $$props;
292
+ const own = new Pending({ name: "A Button onclick" });
293
+ const form = pendingContext();
294
+ const state = derived(() => buttonState({
295
+ own,
296
+ form,
297
+ submit: type === "submit",
298
+ cancel
299
+ }));
300
+ $$renderer2.push(`<button${attributes({
301
+ type,
302
+ class: clsx([
303
+ "sd-btn",
304
+ `sd-btn-${variant}`,
305
+ size === "sm" && "sd-btn-sm",
306
+ block && "sd-btn-block",
307
+ state().spinning && "sd-btn-spinning",
308
+ !icon && "sd-btn-plain",
309
+ className
310
+ ]),
311
+ "aria-disabled": state().blocked ? "true" : void 0,
312
+ "aria-busy": state().spinning ? "true" : void 0,
313
+ ...rest
314
+ })}>`);
315
+ if (state().spinning) $$renderer2.push(`<!--[0--><span class="sd-spinner" aria-hidden="true"></span>`);
316
+ else if (icon) {
317
+ $$renderer2.push("<!--[1-->");
318
+ Icon($$renderer2, { name: icon });
319
+ } else $$renderer2.push("<!--[-1-->");
320
+ $$renderer2.push(`<!--]--> <span class="sd-btn-label">`);
321
+ children?.($$renderer2);
322
+ $$renderer2.push(`<!----></span></button>`);
323
+ bind_props($$props, { error });
324
+ });
325
+ }
326
+
327
+ export {
328
+ Icon,
329
+ timing,
330
+ messages,
331
+ Pending,
332
+ Latest,
333
+ nextSeq,
334
+ providePending,
335
+ pendingContext,
336
+ buttonState,
337
+ Button
338
+ };
@@ -0,0 +1,14 @@
1
+ import { createRequire as __cr } from 'node:module'; const require = __cr(import.meta.url);
2
+
3
+ // build/server/chunks/via.js
4
+ import { AsyncLocalStorage } from "node:async_hooks";
5
+ var PAGE = "page";
6
+ var store = new AsyncLocalStorage();
7
+ function throughVia(via, act) {
8
+ return store.run(via, act);
9
+ }
10
+
11
+ export {
12
+ PAGE,
13
+ throughVia
14
+ };