@uasyraf/helm 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.
- package/.claude-plugin/plugin.json +9 -0
- package/.mcp.json +8 -0
- package/LICENSE +21 -0
- package/README.md +114 -0
- package/dashboard/build/client/_app/immutable/assets/0.DPthOi2j.css +1 -0
- package/dashboard/build/client/_app/immutable/assets/0.DPthOi2j.css.br +0 -0
- package/dashboard/build/client/_app/immutable/assets/0.DPthOi2j.css.gz +0 -0
- package/dashboard/build/client/_app/immutable/chunks/B3NJzl7g.js +1 -0
- package/dashboard/build/client/_app/immutable/chunks/B3NJzl7g.js.br +0 -0
- package/dashboard/build/client/_app/immutable/chunks/B3NJzl7g.js.gz +0 -0
- package/dashboard/build/client/_app/immutable/chunks/Bvgn0Gys.js +1 -0
- package/dashboard/build/client/_app/immutable/chunks/Bvgn0Gys.js.br +0 -0
- package/dashboard/build/client/_app/immutable/chunks/Bvgn0Gys.js.gz +0 -0
- package/dashboard/build/client/_app/immutable/chunks/C72aErMY.js +3 -0
- package/dashboard/build/client/_app/immutable/chunks/C72aErMY.js.br +0 -0
- package/dashboard/build/client/_app/immutable/chunks/C72aErMY.js.gz +0 -0
- package/dashboard/build/client/_app/immutable/chunks/CjpPs8iz.js +1 -0
- package/dashboard/build/client/_app/immutable/chunks/CjpPs8iz.js.br +0 -0
- package/dashboard/build/client/_app/immutable/chunks/CjpPs8iz.js.gz +0 -0
- package/dashboard/build/client/_app/immutable/chunks/DNLp8810.js +1 -0
- package/dashboard/build/client/_app/immutable/chunks/DNLp8810.js.br +0 -0
- package/dashboard/build/client/_app/immutable/chunks/DNLp8810.js.gz +0 -0
- package/dashboard/build/client/_app/immutable/chunks/DYkFpqG7.js +1 -0
- package/dashboard/build/client/_app/immutable/chunks/DYkFpqG7.js.br +0 -0
- package/dashboard/build/client/_app/immutable/chunks/DYkFpqG7.js.gz +0 -0
- package/dashboard/build/client/_app/immutable/chunks/DsiL0ppy.js +2 -0
- package/dashboard/build/client/_app/immutable/chunks/DsiL0ppy.js.br +0 -0
- package/dashboard/build/client/_app/immutable/chunks/DsiL0ppy.js.gz +0 -0
- package/dashboard/build/client/_app/immutable/chunks/bJX5vhEj.js +1 -0
- package/dashboard/build/client/_app/immutable/chunks/bJX5vhEj.js.br +0 -0
- package/dashboard/build/client/_app/immutable/chunks/bJX5vhEj.js.gz +0 -0
- package/dashboard/build/client/_app/immutable/chunks/gQDp4_Ul.js +1 -0
- package/dashboard/build/client/_app/immutable/chunks/gQDp4_Ul.js.br +0 -0
- package/dashboard/build/client/_app/immutable/chunks/gQDp4_Ul.js.gz +0 -0
- package/dashboard/build/client/_app/immutable/entry/app.D4j9hUjJ.js +2 -0
- package/dashboard/build/client/_app/immutable/entry/app.D4j9hUjJ.js.br +0 -0
- package/dashboard/build/client/_app/immutable/entry/app.D4j9hUjJ.js.gz +0 -0
- package/dashboard/build/client/_app/immutable/entry/start.D59wIHuS.js +1 -0
- package/dashboard/build/client/_app/immutable/entry/start.D59wIHuS.js.br +2 -0
- package/dashboard/build/client/_app/immutable/entry/start.D59wIHuS.js.gz +0 -0
- package/dashboard/build/client/_app/immutable/nodes/0.HocD0HAQ.js +1 -0
- package/dashboard/build/client/_app/immutable/nodes/0.HocD0HAQ.js.br +0 -0
- package/dashboard/build/client/_app/immutable/nodes/0.HocD0HAQ.js.gz +0 -0
- package/dashboard/build/client/_app/immutable/nodes/1.xo_a-jPh.js +1 -0
- package/dashboard/build/client/_app/immutable/nodes/1.xo_a-jPh.js.br +0 -0
- package/dashboard/build/client/_app/immutable/nodes/1.xo_a-jPh.js.gz +0 -0
- package/dashboard/build/client/_app/immutable/nodes/2.BwywD4n3.js +1 -0
- package/dashboard/build/client/_app/immutable/nodes/2.BwywD4n3.js.br +0 -0
- package/dashboard/build/client/_app/immutable/nodes/2.BwywD4n3.js.gz +0 -0
- package/dashboard/build/client/_app/immutable/nodes/3.BGY0bNfC.js +1 -0
- package/dashboard/build/client/_app/immutable/nodes/3.BGY0bNfC.js.br +0 -0
- package/dashboard/build/client/_app/immutable/nodes/3.BGY0bNfC.js.gz +0 -0
- package/dashboard/build/client/_app/immutable/nodes/4.C7uIivCS.js +1 -0
- package/dashboard/build/client/_app/immutable/nodes/4.C7uIivCS.js.br +0 -0
- package/dashboard/build/client/_app/immutable/nodes/4.C7uIivCS.js.gz +0 -0
- package/dashboard/build/client/_app/immutable/nodes/5.YszfczJW.js +1 -0
- package/dashboard/build/client/_app/immutable/nodes/5.YszfczJW.js.br +0 -0
- package/dashboard/build/client/_app/immutable/nodes/5.YszfczJW.js.gz +0 -0
- package/dashboard/build/client/_app/immutable/nodes/6.7fhKcbBK.js +1 -0
- package/dashboard/build/client/_app/immutable/nodes/6.7fhKcbBK.js.br +0 -0
- package/dashboard/build/client/_app/immutable/nodes/6.7fhKcbBK.js.gz +0 -0
- package/dashboard/build/client/_app/version.json +1 -0
- package/dashboard/build/client/_app/version.json.br +0 -0
- package/dashboard/build/client/_app/version.json.gz +0 -0
- package/dashboard/build/env.js +94 -0
- package/dashboard/build/handler.js +1494 -0
- package/dashboard/build/index.js +345 -0
- package/dashboard/build/server/chunks/0-DUUsxI66.js +40 -0
- package/dashboard/build/server/chunks/0-DUUsxI66.js.map +1 -0
- package/dashboard/build/server/chunks/1-BDkdOGL6.js +9 -0
- package/dashboard/build/server/chunks/1-BDkdOGL6.js.map +1 -0
- package/dashboard/build/server/chunks/2-BLt1vNET.js +51 -0
- package/dashboard/build/server/chunks/2-BLt1vNET.js.map +1 -0
- package/dashboard/build/server/chunks/3-B-4sxMk4.js +41 -0
- package/dashboard/build/server/chunks/3-B-4sxMk4.js.map +1 -0
- package/dashboard/build/server/chunks/4-CRZIwHJO.js +39 -0
- package/dashboard/build/server/chunks/4-CRZIwHJO.js.map +1 -0
- package/dashboard/build/server/chunks/5-CwiVOtz6.js +30 -0
- package/dashboard/build/server/chunks/5-CwiVOtz6.js.map +1 -0
- package/dashboard/build/server/chunks/6-mID2_gX2.js +53 -0
- package/dashboard/build/server/chunks/6-mID2_gX2.js.map +1 -0
- package/dashboard/build/server/chunks/_layout.svelte-DeOKequ-.js +31 -0
- package/dashboard/build/server/chunks/_layout.svelte-DeOKequ-.js.map +1 -0
- package/dashboard/build/server/chunks/_page.svelte-BGS-bwra.js +65 -0
- package/dashboard/build/server/chunks/_page.svelte-BGS-bwra.js.map +1 -0
- package/dashboard/build/server/chunks/_page.svelte-BiRjdIbl.js +35 -0
- package/dashboard/build/server/chunks/_page.svelte-BiRjdIbl.js.map +1 -0
- package/dashboard/build/server/chunks/_page.svelte-C_NO0kPy.js +49 -0
- package/dashboard/build/server/chunks/_page.svelte-C_NO0kPy.js.map +1 -0
- package/dashboard/build/server/chunks/_page.svelte-DvSQBjcA.js +80 -0
- package/dashboard/build/server/chunks/_page.svelte-DvSQBjcA.js.map +1 -0
- package/dashboard/build/server/chunks/_page.svelte-ZUq8J-ew.js +33 -0
- package/dashboard/build/server/chunks/_page.svelte-ZUq8J-ew.js.map +1 -0
- package/dashboard/build/server/chunks/error.svelte-DJ3O9Tia.js +12 -0
- package/dashboard/build/server/chunks/error.svelte-DJ3O9Tia.js.map +1 -0
- package/dashboard/build/server/chunks/exports-BnaAAAnL.js +3262 -0
- package/dashboard/build/server/chunks/exports-BnaAAAnL.js.map +1 -0
- package/dashboard/build/server/chunks/index-DwR_KaNY.js +44 -0
- package/dashboard/build/server/chunks/index-DwR_KaNY.js.map +1 -0
- package/dashboard/build/server/chunks/index-lhTMmBNn.js +207 -0
- package/dashboard/build/server/chunks/index-lhTMmBNn.js.map +1 -0
- package/dashboard/build/server/chunks/queries-DGWi-KlP.js +198 -0
- package/dashboard/build/server/chunks/queries-DGWi-KlP.js.map +1 -0
- package/dashboard/build/server/chunks/renderer-DdMvhZZr.js +1930 -0
- package/dashboard/build/server/chunks/renderer-DdMvhZZr.js.map +1 -0
- package/dashboard/build/server/index.js +5911 -0
- package/dashboard/build/server/index.js.map +1 -0
- package/dashboard/build/server/manifest.js +78 -0
- package/dashboard/build/server/manifest.js.map +1 -0
- package/dashboard/build/shims.js +32 -0
- package/dashboard/package.json +29 -0
- package/dashboard/svelte.config.js +15 -0
- package/dist/bin/helm.d.ts +2 -0
- package/dist/bin/helm.js +167 -0
- package/dist/bin/helm.js.map +1 -0
- package/dist/server/src/banner.d.ts +1 -0
- package/dist/server/src/banner.js +34 -0
- package/dist/server/src/banner.js.map +1 -0
- package/dist/server/src/config/load.d.ts +14 -0
- package/dist/server/src/config/load.js +43 -0
- package/dist/server/src/config/load.js.map +1 -0
- package/dist/server/src/dashboard.d.ts +5 -0
- package/dist/server/src/dashboard.js +79 -0
- package/dist/server/src/dashboard.js.map +1 -0
- package/dist/server/src/db/bootstrap.d.ts +2 -0
- package/dist/server/src/db/bootstrap.js +106 -0
- package/dist/server/src/db/bootstrap.js.map +1 -0
- package/dist/server/src/db/client.d.ts +14 -0
- package/dist/server/src/db/client.js +32 -0
- package/dist/server/src/db/client.js.map +1 -0
- package/dist/server/src/db/open-project.d.ts +17 -0
- package/dist/server/src/db/open-project.js +27 -0
- package/dist/server/src/db/open-project.js.map +1 -0
- package/dist/server/src/db/open-repo.d.ts +8 -0
- package/dist/server/src/db/open-repo.js +45 -0
- package/dist/server/src/db/open-repo.js.map +1 -0
- package/dist/server/src/db/pg-bootstrap.d.ts +4 -0
- package/dist/server/src/db/pg-bootstrap.js +106 -0
- package/dist/server/src/db/pg-bootstrap.js.map +1 -0
- package/dist/server/src/db/pg-client.d.ts +10 -0
- package/dist/server/src/db/pg-client.js +42 -0
- package/dist/server/src/db/pg-client.js.map +1 -0
- package/dist/server/src/db/repo-pg.d.ts +3 -0
- package/dist/server/src/db/repo-pg.js +245 -0
- package/dist/server/src/db/repo-pg.js.map +1 -0
- package/dist/server/src/db/repo-sqlite.d.ts +3 -0
- package/dist/server/src/db/repo-sqlite.js +224 -0
- package/dist/server/src/db/repo-sqlite.js.map +1 -0
- package/dist/server/src/db/repo.d.ts +54 -0
- package/dist/server/src/db/repo.js +2 -0
- package/dist/server/src/db/repo.js.map +1 -0
- package/dist/server/src/db/schema-pg.d.ts +2712 -0
- package/dist/server/src/db/schema-pg.js +107 -0
- package/dist/server/src/db/schema-pg.js.map +1 -0
- package/dist/server/src/db/schema.d.ts +2721 -0
- package/dist/server/src/db/schema.js +107 -0
- package/dist/server/src/db/schema.js.map +1 -0
- package/dist/server/src/events/emit.d.ts +21 -0
- package/dist/server/src/events/emit.js +17 -0
- package/dist/server/src/events/emit.js.map +1 -0
- package/dist/server/src/http/server.d.ts +10 -0
- package/dist/server/src/http/server.js +119 -0
- package/dist/server/src/http/server.js.map +1 -0
- package/dist/server/src/index.d.ts +2 -0
- package/dist/server/src/index.js +13 -0
- package/dist/server/src/index.js.map +1 -0
- package/dist/server/src/init.d.ts +12 -0
- package/dist/server/src/init.js +59 -0
- package/dist/server/src/init.js.map +1 -0
- package/dist/server/src/install.d.ts +8 -0
- package/dist/server/src/install.js +100 -0
- package/dist/server/src/install.js.map +1 -0
- package/dist/server/src/project/bootstrap.d.ts +9 -0
- package/dist/server/src/project/bootstrap.js +83 -0
- package/dist/server/src/project/bootstrap.js.map +1 -0
- package/dist/server/src/project/detect.d.ts +10 -0
- package/dist/server/src/project/detect.js +82 -0
- package/dist/server/src/project/detect.js.map +1 -0
- package/dist/server/src/project/identity.d.ts +8 -0
- package/dist/server/src/project/identity.js +42 -0
- package/dist/server/src/project/identity.js.map +1 -0
- package/dist/server/src/server.d.ts +8 -0
- package/dist/server/src/server.js +22 -0
- package/dist/server/src/server.js.map +1 -0
- package/dist/server/src/tools/debt.d.ts +2 -0
- package/dist/server/src/tools/debt.js +88 -0
- package/dist/server/src/tools/debt.js.map +1 -0
- package/dist/server/src/tools/decision.d.ts +2 -0
- package/dist/server/src/tools/decision.js +39 -0
- package/dist/server/src/tools/decision.js.map +1 -0
- package/dist/server/src/tools/epic.d.ts +2 -0
- package/dist/server/src/tools/epic.js +95 -0
- package/dist/server/src/tools/epic.js.map +1 -0
- package/dist/server/src/tools/index.d.ts +3 -0
- package/dist/server/src/tools/index.js +21 -0
- package/dist/server/src/tools/index.js.map +1 -0
- package/dist/server/src/tools/nelson.d.ts +2 -0
- package/dist/server/src/tools/nelson.js +28 -0
- package/dist/server/src/tools/nelson.js.map +1 -0
- package/dist/server/src/tools/progress.d.ts +2 -0
- package/dist/server/src/tools/progress.js +45 -0
- package/dist/server/src/tools/progress.js.map +1 -0
- package/dist/server/src/tools/sprint.d.ts +2 -0
- package/dist/server/src/tools/sprint.js +98 -0
- package/dist/server/src/tools/sprint.js.map +1 -0
- package/dist/server/src/tools/status.d.ts +2 -0
- package/dist/server/src/tools/status.js +31 -0
- package/dist/server/src/tools/status.js.map +1 -0
- package/dist/server/src/tools/story.d.ts +2 -0
- package/dist/server/src/tools/story.js +155 -0
- package/dist/server/src/tools/story.js.map +1 -0
- package/dist/server/src/tools/task.d.ts +2 -0
- package/dist/server/src/tools/task.js +90 -0
- package/dist/server/src/tools/task.js.map +1 -0
- package/dist/server/src/tools/types.d.ts +15 -0
- package/dist/server/src/tools/types.js +11 -0
- package/dist/server/src/tools/types.js.map +1 -0
- package/dist/server/src/util/git.d.ts +8 -0
- package/dist/server/src/util/git.js +51 -0
- package/dist/server/src/util/git.js.map +1 -0
- package/dist/server/src/util/ids.d.ts +2 -0
- package/dist/server/src/util/ids.js +8 -0
- package/dist/server/src/util/ids.js.map +1 -0
- package/dist/server/src/util/paths.d.ts +2 -0
- package/dist/server/src/util/paths.js +9 -0
- package/dist/server/src/util/paths.js.map +1 -0
- package/dist/server/src/worker/client.d.ts +12 -0
- package/dist/server/src/worker/client.js +89 -0
- package/dist/server/src/worker/client.js.map +1 -0
- package/dist/server/src/worker/hook.d.ts +1 -0
- package/dist/server/src/worker/hook.js +36 -0
- package/dist/server/src/worker/hook.js.map +1 -0
- package/dist/server/src/worker/ingest.d.ts +14 -0
- package/dist/server/src/worker/ingest.js +86 -0
- package/dist/server/src/worker/ingest.js.map +1 -0
- package/dist/server/src/worker/markers/any-type.d.ts +6 -0
- package/dist/server/src/worker/markers/any-type.js +19 -0
- package/dist/server/src/worker/markers/any-type.js.map +1 -0
- package/dist/server/src/worker/markers/debt.d.ts +11 -0
- package/dist/server/src/worker/markers/debt.js +53 -0
- package/dist/server/src/worker/markers/debt.js.map +1 -0
- package/dist/server/src/worker/markers/file-size.d.ts +5 -0
- package/dist/server/src/worker/markers/file-size.js +32 -0
- package/dist/server/src/worker/markers/file-size.js.map +1 -0
- package/dist/server/src/worker/scanner.d.ts +23 -0
- package/dist/server/src/worker/scanner.js +23 -0
- package/dist/server/src/worker/scanner.js.map +1 -0
- package/dist/server/src/worker/server.d.ts +1 -0
- package/dist/server/src/worker/server.js +137 -0
- package/dist/server/src/worker/server.js.map +1 -0
- package/dist/server/src/worker/socket.d.ts +3 -0
- package/dist/server/src/worker/socket.js +12 -0
- package/dist/server/src/worker/socket.js.map +1 -0
- package/hooks/hooks.json +33 -0
- package/package.json +56 -0
- package/skills/backlog/SKILL.md +18 -0
- package/skills/debt/SKILL.md +39 -0
- package/skills/epic/SKILL.md +22 -0
- package/skills/nelson-integration/SKILL.md +44 -0
- package/skills/project-tracker/SKILL.md +60 -0
- package/skills/review/SKILL.md +27 -0
- package/skills/sprint/SKILL.md +23 -0
- package/skills/story/SKILL.md +29 -0
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
const manifest = (() => {
|
|
2
|
+
function __memo(fn) {
|
|
3
|
+
let value;
|
|
4
|
+
return () => value ??= (value = fn());
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
return {
|
|
8
|
+
appDir: "_app",
|
|
9
|
+
appPath: "_app",
|
|
10
|
+
assets: new Set([]),
|
|
11
|
+
mimeTypes: {},
|
|
12
|
+
_: {
|
|
13
|
+
client: {start:"_app/immutable/entry/start.D59wIHuS.js",app:"_app/immutable/entry/app.D4j9hUjJ.js",imports:["_app/immutable/entry/start.D59wIHuS.js","_app/immutable/chunks/C72aErMY.js","_app/immutable/chunks/CjpPs8iz.js","_app/immutable/chunks/DYkFpqG7.js","_app/immutable/entry/app.D4j9hUjJ.js","_app/immutable/chunks/CjpPs8iz.js","_app/immutable/chunks/DsiL0ppy.js","_app/immutable/chunks/DYkFpqG7.js","_app/immutable/chunks/B3NJzl7g.js","_app/immutable/chunks/Bvgn0Gys.js"],stylesheets:[],fonts:[],uses_env_dynamic_public:false},
|
|
14
|
+
nodes: [
|
|
15
|
+
__memo(() => import('./chunks/0-DUUsxI66.js')),
|
|
16
|
+
__memo(() => import('./chunks/1-BDkdOGL6.js')),
|
|
17
|
+
__memo(() => import('./chunks/2-BLt1vNET.js')),
|
|
18
|
+
__memo(() => import('./chunks/3-B-4sxMk4.js')),
|
|
19
|
+
__memo(() => import('./chunks/4-CRZIwHJO.js')),
|
|
20
|
+
__memo(() => import('./chunks/5-CwiVOtz6.js')),
|
|
21
|
+
__memo(() => import('./chunks/6-mID2_gX2.js'))
|
|
22
|
+
],
|
|
23
|
+
remotes: {
|
|
24
|
+
|
|
25
|
+
},
|
|
26
|
+
routes: [
|
|
27
|
+
{
|
|
28
|
+
id: "/",
|
|
29
|
+
pattern: /^\/$/,
|
|
30
|
+
params: [],
|
|
31
|
+
page: { layouts: [0,], errors: [1,], leaf: 2 },
|
|
32
|
+
endpoint: null
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
id: "/debt",
|
|
36
|
+
pattern: /^\/debt\/?$/,
|
|
37
|
+
params: [],
|
|
38
|
+
page: { layouts: [0,], errors: [1,], leaf: 3 },
|
|
39
|
+
endpoint: null
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
id: "/decisions",
|
|
43
|
+
pattern: /^\/decisions\/?$/,
|
|
44
|
+
params: [],
|
|
45
|
+
page: { layouts: [0,], errors: [1,], leaf: 4 },
|
|
46
|
+
endpoint: null
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
id: "/sprints",
|
|
50
|
+
pattern: /^\/sprints\/?$/,
|
|
51
|
+
params: [],
|
|
52
|
+
page: { layouts: [0,], errors: [1,], leaf: 5 },
|
|
53
|
+
endpoint: null
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
id: "/sprints/[id]",
|
|
57
|
+
pattern: /^\/sprints\/([^/]+?)\/?$/,
|
|
58
|
+
params: [{"name":"id","optional":false,"rest":false,"chained":false}],
|
|
59
|
+
page: { layouts: [0,], errors: [1,], leaf: 6 },
|
|
60
|
+
endpoint: null
|
|
61
|
+
}
|
|
62
|
+
],
|
|
63
|
+
prerendered_routes: new Set([]),
|
|
64
|
+
matchers: async () => {
|
|
65
|
+
|
|
66
|
+
return { };
|
|
67
|
+
},
|
|
68
|
+
server_assets: {}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
})();
|
|
72
|
+
|
|
73
|
+
const prerendered = new Set([]);
|
|
74
|
+
|
|
75
|
+
const base = "";
|
|
76
|
+
|
|
77
|
+
export { base, manifest, prerendered };
|
|
78
|
+
//# sourceMappingURL=manifest.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"manifest.js","sources":["../../.svelte-kit/adapter-node/manifest.js"],"sourcesContent":["export const manifest = (() => {\nfunction __memo(fn) {\n\tlet value;\n\treturn () => value ??= (value = fn());\n}\n\nreturn {\n\tappDir: \"_app\",\n\tappPath: \"_app\",\n\tassets: new Set([]),\n\tmimeTypes: {},\n\t_: {\n\t\tclient: {start:\"_app/immutable/entry/start.D59wIHuS.js\",app:\"_app/immutable/entry/app.D4j9hUjJ.js\",imports:[\"_app/immutable/entry/start.D59wIHuS.js\",\"_app/immutable/chunks/C72aErMY.js\",\"_app/immutable/chunks/CjpPs8iz.js\",\"_app/immutable/chunks/DYkFpqG7.js\",\"_app/immutable/entry/app.D4j9hUjJ.js\",\"_app/immutable/chunks/CjpPs8iz.js\",\"_app/immutable/chunks/DsiL0ppy.js\",\"_app/immutable/chunks/DYkFpqG7.js\",\"_app/immutable/chunks/B3NJzl7g.js\",\"_app/immutable/chunks/Bvgn0Gys.js\"],stylesheets:[],fonts:[],uses_env_dynamic_public:false},\n\t\tnodes: [\n\t\t\t__memo(() => import('./nodes/0.js')),\n\t\t\t__memo(() => import('./nodes/1.js')),\n\t\t\t__memo(() => import('./nodes/2.js')),\n\t\t\t__memo(() => import('./nodes/3.js')),\n\t\t\t__memo(() => import('./nodes/4.js')),\n\t\t\t__memo(() => import('./nodes/5.js')),\n\t\t\t__memo(() => import('./nodes/6.js'))\n\t\t],\n\t\tremotes: {\n\t\t\t\n\t\t},\n\t\troutes: [\n\t\t\t{\n\t\t\t\tid: \"/\",\n\t\t\t\tpattern: /^\\/$/,\n\t\t\t\tparams: [],\n\t\t\t\tpage: { layouts: [0,], errors: [1,], leaf: 2 },\n\t\t\t\tendpoint: null\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/debt\",\n\t\t\t\tpattern: /^\\/debt\\/?$/,\n\t\t\t\tparams: [],\n\t\t\t\tpage: { layouts: [0,], errors: [1,], leaf: 3 },\n\t\t\t\tendpoint: null\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/decisions\",\n\t\t\t\tpattern: /^\\/decisions\\/?$/,\n\t\t\t\tparams: [],\n\t\t\t\tpage: { layouts: [0,], errors: [1,], leaf: 4 },\n\t\t\t\tendpoint: null\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/sprints\",\n\t\t\t\tpattern: /^\\/sprints\\/?$/,\n\t\t\t\tparams: [],\n\t\t\t\tpage: { layouts: [0,], errors: [1,], leaf: 5 },\n\t\t\t\tendpoint: null\n\t\t\t},\n\t\t\t{\n\t\t\t\tid: \"/sprints/[id]\",\n\t\t\t\tpattern: /^\\/sprints\\/([^/]+?)\\/?$/,\n\t\t\t\tparams: [{\"name\":\"id\",\"optional\":false,\"rest\":false,\"chained\":false}],\n\t\t\t\tpage: { layouts: [0,], errors: [1,], leaf: 6 },\n\t\t\t\tendpoint: null\n\t\t\t}\n\t\t],\n\t\tprerendered_routes: new Set([]),\n\t\tmatchers: async () => {\n\t\t\t\n\t\t\treturn { };\n\t\t},\n\t\tserver_assets: {}\n\t}\n}\n})();\n\nexport const prerendered = new Set([]);\n\nexport const base = \"\";"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import buffer from 'node:buffer';
|
|
2
|
+
import { webcrypto } from 'node:crypto';
|
|
3
|
+
|
|
4
|
+
// `buffer.File` was added in Node 18.13.0 while the `File` global was added in Node 20.0.0
|
|
5
|
+
const File = /** @type {import('node:buffer') & { File?: File}} */ (buffer).File;
|
|
6
|
+
|
|
7
|
+
/** @type {Record<string, any>} */
|
|
8
|
+
const globals = {
|
|
9
|
+
crypto: webcrypto,
|
|
10
|
+
File
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
// exported for dev/preview and node environments
|
|
14
|
+
/**
|
|
15
|
+
* Make various web APIs available as globals:
|
|
16
|
+
* - `crypto`
|
|
17
|
+
* - `File`
|
|
18
|
+
*/
|
|
19
|
+
function installPolyfills() {
|
|
20
|
+
for (const name in globals) {
|
|
21
|
+
if (name in globalThis) continue;
|
|
22
|
+
|
|
23
|
+
Object.defineProperty(globalThis, name, {
|
|
24
|
+
enumerable: true,
|
|
25
|
+
configurable: true,
|
|
26
|
+
writable: true,
|
|
27
|
+
value: globals[name]
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
installPolyfills();
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@uasyraf/helm-dashboard",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"private": true,
|
|
6
|
+
"engines": {
|
|
7
|
+
"node": ">=22.0.0"
|
|
8
|
+
},
|
|
9
|
+
"scripts": {
|
|
10
|
+
"dev": "vite dev",
|
|
11
|
+
"build": "vite build",
|
|
12
|
+
"preview": "vite preview",
|
|
13
|
+
"start": "node build/index.js",
|
|
14
|
+
"check": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json"
|
|
15
|
+
},
|
|
16
|
+
"dependencies": {
|
|
17
|
+
"@libsql/client": "^0.14.0",
|
|
18
|
+
"drizzle-orm": "^0.36.0"
|
|
19
|
+
},
|
|
20
|
+
"devDependencies": {
|
|
21
|
+
"@sveltejs/adapter-node": "^5.2.0",
|
|
22
|
+
"@sveltejs/kit": "^2.7.0",
|
|
23
|
+
"@sveltejs/vite-plugin-svelte": "^4.0.0",
|
|
24
|
+
"svelte": "^5.0.0",
|
|
25
|
+
"svelte-check": "^4.0.0",
|
|
26
|
+
"typescript": "^5.6.0",
|
|
27
|
+
"vite": "^5.4.0"
|
|
28
|
+
}
|
|
29
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import adapter from "@sveltejs/adapter-node";
|
|
2
|
+
import { vitePreprocess } from "@sveltejs/vite-plugin-svelte";
|
|
3
|
+
|
|
4
|
+
/** @type {import('@sveltejs/kit').Config} */
|
|
5
|
+
const config = {
|
|
6
|
+
preprocess: vitePreprocess(),
|
|
7
|
+
kit: {
|
|
8
|
+
adapter: adapter(),
|
|
9
|
+
alias: {
|
|
10
|
+
$helm: "../server/src",
|
|
11
|
+
},
|
|
12
|
+
},
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
export default config;
|
package/dist/bin/helm.js
ADDED
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
3
|
+
import { buildServer } from "../server/src/server.js";
|
|
4
|
+
import { renderBanner } from "../server/src/banner.js";
|
|
5
|
+
import { installHooks, installSkills } from "../server/src/install.js";
|
|
6
|
+
import { runWorker } from "../server/src/worker/server.js";
|
|
7
|
+
import { runPostToolUseHook } from "../server/src/worker/hook.js";
|
|
8
|
+
import { runDashboard } from "../server/src/dashboard.js";
|
|
9
|
+
import { startHttpServer } from "../server/src/http/server.js";
|
|
10
|
+
import { runInit } from "../server/src/init.js";
|
|
11
|
+
function parseCommand(argv) {
|
|
12
|
+
const cmd = argv[0];
|
|
13
|
+
if (!cmd)
|
|
14
|
+
return "serve";
|
|
15
|
+
switch (cmd) {
|
|
16
|
+
case "serve":
|
|
17
|
+
case "banner":
|
|
18
|
+
case "install-hooks":
|
|
19
|
+
case "install-skills":
|
|
20
|
+
case "worker":
|
|
21
|
+
case "hook":
|
|
22
|
+
case "dashboard":
|
|
23
|
+
case "init":
|
|
24
|
+
return cmd;
|
|
25
|
+
case "-h":
|
|
26
|
+
case "--help":
|
|
27
|
+
case "help":
|
|
28
|
+
return "help";
|
|
29
|
+
default:
|
|
30
|
+
return "help";
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
function flagValue(name) {
|
|
34
|
+
const argv = process.argv.slice(2);
|
|
35
|
+
for (let i = 0; i < argv.length; i++) {
|
|
36
|
+
const a = argv[i];
|
|
37
|
+
if (a === `--${name}`)
|
|
38
|
+
return argv[i + 1];
|
|
39
|
+
if (a?.startsWith(`--${name}=`))
|
|
40
|
+
return a.slice(name.length + 3);
|
|
41
|
+
}
|
|
42
|
+
return undefined;
|
|
43
|
+
}
|
|
44
|
+
function flagPresent(name) {
|
|
45
|
+
return process.argv.includes(`--${name}`);
|
|
46
|
+
}
|
|
47
|
+
async function runServe() {
|
|
48
|
+
if (flagPresent("http")) {
|
|
49
|
+
const portStr = flagValue("port");
|
|
50
|
+
const host = flagValue("host");
|
|
51
|
+
const handle = await startHttpServer({
|
|
52
|
+
port: portStr ? Number(portStr) : undefined,
|
|
53
|
+
host,
|
|
54
|
+
});
|
|
55
|
+
await new Promise((resolve) => {
|
|
56
|
+
const shutdown = async () => {
|
|
57
|
+
await handle.close();
|
|
58
|
+
resolve();
|
|
59
|
+
};
|
|
60
|
+
process.on("SIGINT", shutdown);
|
|
61
|
+
process.on("SIGTERM", shutdown);
|
|
62
|
+
});
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
const handle = await buildServer();
|
|
66
|
+
const transport = new StdioServerTransport();
|
|
67
|
+
await handle.server.connect(transport);
|
|
68
|
+
}
|
|
69
|
+
async function runInitCmd() {
|
|
70
|
+
const team = flagPresent("team");
|
|
71
|
+
const syncUrl = flagValue("sync-url");
|
|
72
|
+
const syncToken = flagValue("sync-token");
|
|
73
|
+
const nonInteractive = flagPresent("non-interactive") || (syncUrl !== undefined);
|
|
74
|
+
const result = await runInit({ team, syncUrl, syncToken, nonInteractive });
|
|
75
|
+
if (result.wrote) {
|
|
76
|
+
process.stdout.write(`[helm] wrote ${result.configPath}\n`);
|
|
77
|
+
}
|
|
78
|
+
else if (!team) {
|
|
79
|
+
process.stdout.write("[helm] init currently only supports --team (sync config writer)\n");
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
async function runBanner() {
|
|
83
|
+
try {
|
|
84
|
+
const line = await renderBanner();
|
|
85
|
+
process.stdout.write(line + "\n");
|
|
86
|
+
}
|
|
87
|
+
catch (err) {
|
|
88
|
+
process.stderr.write(`[helm] banner failed: ${err.message}\n`);
|
|
89
|
+
process.exit(0);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
function runInstallHooks() {
|
|
93
|
+
const result = installHooks();
|
|
94
|
+
if (result.installed.length > 0) {
|
|
95
|
+
process.stdout.write(`[helm] installed hooks (${result.installed.join(", ")}) at ${result.path}\n`);
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
process.stdout.write(`[helm] hooks already present at ${result.path}\n`);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
function runInstallSkills() {
|
|
102
|
+
const result = installSkills();
|
|
103
|
+
if (result.installed.length > 0) {
|
|
104
|
+
process.stdout.write(`[helm] linked skills: ${result.installed.join(", ")}\n`);
|
|
105
|
+
}
|
|
106
|
+
if (result.skipped.length > 0) {
|
|
107
|
+
process.stdout.write(`[helm] skipped: ${result.skipped.join(", ")}\n`);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
function runHelp() {
|
|
111
|
+
process.stdout.write([
|
|
112
|
+
"helm — durable, multi-developer project state for Claude Code",
|
|
113
|
+
"",
|
|
114
|
+
"usage:",
|
|
115
|
+
" helm start MCP server on stdio (default)",
|
|
116
|
+
" helm serve same as above",
|
|
117
|
+
" helm serve --http [--port N] serve MCP over HTTP for team mode (auth via HELM_API_TOKEN)",
|
|
118
|
+
" helm banner print one-line SessionStart banner",
|
|
119
|
+
" helm worker run the PostToolUse scanner daemon (foreground)",
|
|
120
|
+
" helm hook post-tool-use hook entry: reads stdin, forwards to worker",
|
|
121
|
+
" helm dashboard [--dev] launch the SvelteKit dashboard (built mode or vite dev)",
|
|
122
|
+
" helm init --team write .helm/config.json with shared Turso sync URL",
|
|
123
|
+
" helm install-hooks wire SessionStart + PostToolUse + statusline into ~/.claude/settings.json",
|
|
124
|
+
" helm install-skills symlink bundled skills/* (project-tracker + 7 slash commands) into ~/.claude/skills/",
|
|
125
|
+
" helm help show this message",
|
|
126
|
+
"",
|
|
127
|
+
].join("\n"));
|
|
128
|
+
}
|
|
129
|
+
async function main() {
|
|
130
|
+
const command = parseCommand(process.argv.slice(2));
|
|
131
|
+
switch (command) {
|
|
132
|
+
case "serve":
|
|
133
|
+
await runServe();
|
|
134
|
+
return;
|
|
135
|
+
case "banner":
|
|
136
|
+
await runBanner();
|
|
137
|
+
return;
|
|
138
|
+
case "worker":
|
|
139
|
+
await runWorker();
|
|
140
|
+
return;
|
|
141
|
+
case "hook":
|
|
142
|
+
await runPostToolUseHook();
|
|
143
|
+
return;
|
|
144
|
+
case "dashboard": {
|
|
145
|
+
const dev = process.argv.includes("--dev");
|
|
146
|
+
const code = await runDashboard({ dev });
|
|
147
|
+
process.exit(code);
|
|
148
|
+
}
|
|
149
|
+
case "init":
|
|
150
|
+
await runInitCmd();
|
|
151
|
+
return;
|
|
152
|
+
case "install-hooks":
|
|
153
|
+
runInstallHooks();
|
|
154
|
+
return;
|
|
155
|
+
case "install-skills":
|
|
156
|
+
runInstallSkills();
|
|
157
|
+
return;
|
|
158
|
+
case "help":
|
|
159
|
+
runHelp();
|
|
160
|
+
return;
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
main().catch((err) => {
|
|
164
|
+
process.stderr.write(`[helm] fatal: ${err.message}\n`);
|
|
165
|
+
process.exit(1);
|
|
166
|
+
});
|
|
167
|
+
//# sourceMappingURL=helm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helm.js","sourceRoot":"","sources":["../../bin/helm.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACvE,OAAO,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAC/D,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAIhD,SAAS,YAAY,CAAC,IAAuB;IAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,IAAI,CAAC,GAAG;QAAE,OAAO,OAAO,CAAC;IACzB,QAAQ,GAAG,EAAE,CAAC;QACZ,KAAK,OAAO,CAAC;QACb,KAAK,QAAQ,CAAC;QACd,KAAK,eAAe,CAAC;QACrB,KAAK,gBAAgB,CAAC;QACtB,KAAK,QAAQ,CAAC;QACd,KAAK,MAAM,CAAC;QACZ,KAAK,WAAW,CAAC;QACjB,KAAK,MAAM;YACT,OAAO,GAAG,CAAC;QACb,KAAK,IAAI,CAAC;QACV,KAAK,QAAQ,CAAC;QACd,KAAK,MAAM;YACT,OAAO,MAAM,CAAC;QAChB;YACE,OAAO,MAAM,CAAC;IAClB,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,IAAY;IAC7B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,IAAI,CAAC,KAAK,KAAK,IAAI,EAAE;YAAE,OAAO,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1C,IAAI,CAAC,EAAE,UAAU,CAAC,KAAK,IAAI,GAAG,CAAC;YAAE,OAAO,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IACnE,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,WAAW,CAAC,IAAY;IAC/B,OAAO,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;AAC5C,CAAC;AAED,KAAK,UAAU,QAAQ;IACrB,IAAI,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;QACxB,MAAM,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;QAClC,MAAM,IAAI,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC;QAC/B,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC;YACnC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS;YAC3C,IAAI;SACL,CAAC,CAAC;QACH,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;YAClC,MAAM,QAAQ,GAAG,KAAK,IAAmB,EAAE;gBACzC,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;gBACrB,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC;YACF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;YAC/B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,WAAW,EAAE,CAAC;IACnC,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;AACzC,CAAC;AAED,KAAK,UAAU,UAAU;IACvB,MAAM,IAAI,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IACjC,MAAM,OAAO,GAAG,SAAS,CAAC,UAAU,CAAC,CAAC;IACtC,MAAM,SAAS,GAAG,SAAS,CAAC,YAAY,CAAC,CAAC;IAC1C,MAAM,cAAc,GAAG,WAAW,CAAC,iBAAiB,CAAC,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC;IACjF,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC,CAAC;IAC3E,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,gBAAgB,MAAM,CAAC,UAAU,IAAI,CAAC,CAAC;IAC9D,CAAC;SAAM,IAAI,CAAC,IAAI,EAAE,CAAC;QACjB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,mEAAmE,CAAC,CAAC;IAC5F,CAAC;AACH,CAAC;AAED,KAAK,UAAU,SAAS;IACtB,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,YAAY,EAAE,CAAC;QAClC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;IACpC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,yBAA0B,GAAa,CAAC,OAAO,IAAI,CAAC,CAAC;QAC1E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,SAAS,eAAe;IACtB,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;IAC9B,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,2BAA2B,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC;IACtG,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,mCAAmC,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC;IAC3E,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB;IACvB,MAAM,MAAM,GAAG,aAAa,EAAE,CAAC;IAC/B,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,yBAAyB,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjF,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,mBAAmB,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACzE,CAAC;AACH,CAAC;AAED,SAAS,OAAO;IACd,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB;QACE,+DAA+D;QAC/D,EAAE;QACF,QAAQ;QACR,qEAAqE;QACrE,+CAA+C;QAC/C,6FAA6F;QAC7F,oEAAoE;QACpE,iFAAiF;QACjF,6EAA6E;QAC7E,yFAAyF;QACzF,oFAAoF;QACpF,2GAA2G;QAC3G,sHAAsH;QACtH,mDAAmD;QACnD,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CACb,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IACpD,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,OAAO;YACV,MAAM,QAAQ,EAAE,CAAC;YACjB,OAAO;QACT,KAAK,QAAQ;YACX,MAAM,SAAS,EAAE,CAAC;YAClB,OAAO;QACT,KAAK,QAAQ;YACX,MAAM,SAAS,EAAE,CAAC;YAClB,OAAO;QACT,KAAK,MAAM;YACT,MAAM,kBAAkB,EAAE,CAAC;YAC3B,OAAO;QACT,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAC3C,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;YACzC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC;QACD,KAAK,MAAM;YACT,MAAM,UAAU,EAAE,CAAC;YACnB,OAAO;QACT,KAAK,eAAe;YAClB,eAAe,EAAE,CAAC;YAClB,OAAO;QACT,KAAK,gBAAgB;YACnB,gBAAgB,EAAE,CAAC;YACnB,OAAO;QACT,KAAK,MAAM;YACT,OAAO,EAAE,CAAC;YACV,OAAO;IACX,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,iBAAkB,GAAa,CAAC,OAAO,IAAI,CAAC,CAAC;IAClE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function renderBanner(cwd?: string): Promise<string>;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { openProjectRepo } from "./db/open-repo.js";
|
|
2
|
+
import { bootstrapSession } from "./project/bootstrap.js";
|
|
3
|
+
export async function renderBanner(cwd = process.cwd()) {
|
|
4
|
+
const { handle } = await openProjectRepo(cwd);
|
|
5
|
+
try {
|
|
6
|
+
const session = await bootstrapSession(handle.repo, cwd);
|
|
7
|
+
return await formatBanner(handle.repo, session);
|
|
8
|
+
}
|
|
9
|
+
finally {
|
|
10
|
+
await handle.close();
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
async function formatBanner(repo, session) {
|
|
14
|
+
const sprintRow = session.activeSprint;
|
|
15
|
+
const lengthDays = session.project.sprintLengthDays;
|
|
16
|
+
const day = sprintDayNumber(sprintRow.startedAt);
|
|
17
|
+
const byStatus = await repo.countStoriesInSprintByStatus(sprintRow.id);
|
|
18
|
+
const total = Object.values(byStatus).reduce((a, b) => a + b, 0);
|
|
19
|
+
const done = byStatus.done ?? 0;
|
|
20
|
+
const debt = await repo.countOpenDebtByProject(session.project.id);
|
|
21
|
+
const opened = await repo.countEventsByKindInSprint(sprintRow.id, "debt.opened");
|
|
22
|
+
const closed = await repo.countEventsByKindInSprint(sprintRow.id, "debt.closed");
|
|
23
|
+
const delta = opened - closed;
|
|
24
|
+
const sign = delta > 0 ? `+${delta}` : `${delta}`;
|
|
25
|
+
return `[helm] ${sprintRow.name} (d${day}/${lengthDays}) | stories: ${done}/${total} done | debt: ${debt} (Δ${sign})`;
|
|
26
|
+
}
|
|
27
|
+
function sprintDayNumber(startedAt) {
|
|
28
|
+
const start = Date.parse(startedAt);
|
|
29
|
+
if (Number.isNaN(start))
|
|
30
|
+
return 1;
|
|
31
|
+
const diffMs = Date.now() - start;
|
|
32
|
+
return Math.max(1, Math.floor(diffMs / 86_400_000) + 1);
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=banner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"banner.js","sourceRoot":"","sources":["../../../server/src/banner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAuB,MAAM,wBAAwB,CAAC;AAG/E,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,MAAc,OAAO,CAAC,GAAG,EAAE;IAC5D,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,eAAe,CAAC,GAAG,CAAC,CAAC;IAC9C,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACzD,OAAO,MAAM,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAClD,CAAC;YAAS,CAAC;QACT,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACvB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,IAAc,EAAE,OAAuB;IACjE,MAAM,SAAS,GAAG,OAAO,CAAC,YAAY,CAAC;IACvC,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC;IACpD,MAAM,GAAG,GAAG,eAAe,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;IAEjD,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,4BAA4B,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IACvE,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IACjE,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,IAAI,CAAC,CAAC;IAChC,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,sBAAsB,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACnE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,yBAAyB,CAAC,SAAS,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC;IACjF,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,yBAAyB,CAAC,SAAS,CAAC,EAAE,EAAE,aAAa,CAAC,CAAC;IACjF,MAAM,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC;IAC9B,MAAM,IAAI,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,EAAE,CAAC;IAElD,OAAO,UAAU,SAAS,CAAC,IAAI,MAAM,GAAG,IAAI,UAAU,gBAAgB,IAAI,IAAI,KAAK,iBAAiB,IAAI,MAAM,IAAI,GAAG,CAAC;AACxH,CAAC;AAED,SAAS,eAAe,CAAC,SAAiB;IACxC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;IACpC,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IAClC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC;IAClC,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;AAC1D,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface SyncConfig {
|
|
2
|
+
url: string;
|
|
3
|
+
authToken?: string;
|
|
4
|
+
syncIntervalMs?: number;
|
|
5
|
+
}
|
|
6
|
+
export interface ServerConfig {
|
|
7
|
+
url?: string;
|
|
8
|
+
apiToken?: string;
|
|
9
|
+
}
|
|
10
|
+
export interface HelmConfig {
|
|
11
|
+
sync: SyncConfig | null;
|
|
12
|
+
server: ServerConfig | null;
|
|
13
|
+
}
|
|
14
|
+
export declare function loadConfig(cwd: string): HelmConfig;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
2
|
+
import { dirname, join } from "node:path";
|
|
3
|
+
export function loadConfig(cwd) {
|
|
4
|
+
const fromFile = findAndLoadConfigFile(cwd);
|
|
5
|
+
const sync = resolveSync(fromFile?.sync);
|
|
6
|
+
const server = resolveServer(fromFile?.server);
|
|
7
|
+
return { sync, server };
|
|
8
|
+
}
|
|
9
|
+
function resolveSync(fileSync) {
|
|
10
|
+
const url = process.env.HELM_SYNC_URL ?? fileSync?.url;
|
|
11
|
+
if (!url)
|
|
12
|
+
return null;
|
|
13
|
+
const authToken = process.env.HELM_SYNC_TOKEN ?? fileSync?.authToken;
|
|
14
|
+
const intervalStr = process.env.HELM_SYNC_INTERVAL_MS;
|
|
15
|
+
const syncIntervalMs = intervalStr ? Number(intervalStr) : fileSync?.syncIntervalMs ?? 5000;
|
|
16
|
+
return { url, authToken, syncIntervalMs };
|
|
17
|
+
}
|
|
18
|
+
function resolveServer(fileServer) {
|
|
19
|
+
const url = process.env.HELM_SERVER_URL ?? fileServer?.url;
|
|
20
|
+
const apiToken = process.env.HELM_API_TOKEN ?? fileServer?.apiToken;
|
|
21
|
+
if (!url && !apiToken)
|
|
22
|
+
return null;
|
|
23
|
+
return { url, apiToken };
|
|
24
|
+
}
|
|
25
|
+
function findAndLoadConfigFile(cwd) {
|
|
26
|
+
let dir = cwd;
|
|
27
|
+
while (true) {
|
|
28
|
+
const candidate = join(dir, ".helm", "config.json");
|
|
29
|
+
if (existsSync(candidate)) {
|
|
30
|
+
try {
|
|
31
|
+
return JSON.parse(readFileSync(candidate, "utf8"));
|
|
32
|
+
}
|
|
33
|
+
catch {
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
const parent = dirname(dir);
|
|
38
|
+
if (parent === dir)
|
|
39
|
+
return null;
|
|
40
|
+
dir = parent;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=load.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"load.js","sourceRoot":"","sources":["../../../../server/src/config/load.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAkB1C,MAAM,UAAU,UAAU,CAAC,GAAW;IACpC,MAAM,QAAQ,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC;IAC5C,MAAM,IAAI,GAAG,WAAW,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,aAAa,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;IAC/C,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;AAC1B,CAAC;AAED,SAAS,WAAW,CAAC,QAAyC;IAC5D,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,IAAI,QAAQ,EAAE,GAAG,CAAC;IACvD,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,QAAQ,EAAE,SAAS,CAAC;IACrE,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC;IACtD,MAAM,cAAc,GAAG,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,cAAc,IAAI,IAAI,CAAC;IAC5F,OAAO,EAAE,GAAG,EAAE,SAAS,EAAE,cAAc,EAAE,CAAC;AAC5C,CAAC;AAED,SAAS,aAAa,CAAC,UAA6C;IAClE,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,UAAU,EAAE,GAAG,CAAC;IAC3D,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,UAAU,EAAE,QAAQ,CAAC;IACpE,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IACnC,OAAO,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC;AAC3B,CAAC;AAOD,SAAS,qBAAqB,CAAC,GAAW;IACxC,IAAI,GAAG,GAAG,GAAG,CAAC;IACd,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;QACpD,IAAI,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YAC1B,IAAI,CAAC;gBACH,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAc,CAAC;YAClE,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QACD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,MAAM,KAAK,GAAG;YAAE,OAAO,IAAI,CAAC;QAChC,GAAG,GAAG,MAAM,CAAC;IACf,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
|
+
import { existsSync } from "node:fs";
|
|
3
|
+
import { join, dirname } from "node:path";
|
|
4
|
+
import { fileURLToPath } from "node:url";
|
|
5
|
+
import { detectProject } from "./project/detect.js";
|
|
6
|
+
import { openProjectRepo } from "./db/open-repo.js";
|
|
7
|
+
import { bootstrapSession } from "./project/bootstrap.js";
|
|
8
|
+
function packageRoot() {
|
|
9
|
+
const here = dirname(fileURLToPath(import.meta.url));
|
|
10
|
+
let dir = here;
|
|
11
|
+
while (true) {
|
|
12
|
+
if (existsSync(join(dir, "package.json")) && existsSync(join(dir, "dashboard")))
|
|
13
|
+
return dir;
|
|
14
|
+
const parent = dirname(dir);
|
|
15
|
+
if (parent === dir)
|
|
16
|
+
return here;
|
|
17
|
+
dir = parent;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
export async function runDashboard(opts) {
|
|
21
|
+
const cwd = opts.cwd ?? process.cwd();
|
|
22
|
+
const detected = detectProject(cwd);
|
|
23
|
+
const { handle } = await openProjectRepo(cwd);
|
|
24
|
+
await bootstrapSession(handle.repo, cwd);
|
|
25
|
+
await handle.close();
|
|
26
|
+
const dashboardDir = join(packageRoot(), "dashboard");
|
|
27
|
+
if (!existsSync(dashboardDir)) {
|
|
28
|
+
throw new Error(`dashboard directory not found at ${dashboardDir}`);
|
|
29
|
+
}
|
|
30
|
+
const env = {
|
|
31
|
+
...process.env,
|
|
32
|
+
HELM_PROJECT_SLUG: detected.slug,
|
|
33
|
+
HOST: process.env.HELM_DASHBOARD_HOST ?? "127.0.0.1",
|
|
34
|
+
PORT: process.env.HELM_DASHBOARD_PORT ?? "4400",
|
|
35
|
+
};
|
|
36
|
+
const stdio = "inherit";
|
|
37
|
+
if (opts.dev) {
|
|
38
|
+
return await spawnAndWait("npm", ["run", "dev"], { cwd: dashboardDir, env, stdio });
|
|
39
|
+
}
|
|
40
|
+
const buildEntry = join(dashboardDir, "build", "index.js");
|
|
41
|
+
if (!existsSync(buildEntry)) {
|
|
42
|
+
const buildExit = await spawnAndWait("npm", ["run", "build"], { cwd: dashboardDir, env, stdio });
|
|
43
|
+
if (buildExit !== 0)
|
|
44
|
+
return buildExit;
|
|
45
|
+
}
|
|
46
|
+
return await spawnAndWait(process.execPath, [buildEntry], { env, stdio });
|
|
47
|
+
}
|
|
48
|
+
function spawnAndWait(cmd, args, opts) {
|
|
49
|
+
return new Promise((resolve, reject) => {
|
|
50
|
+
const child = spawn(cmd, args, opts);
|
|
51
|
+
const forward = forwardSignalsTo(child);
|
|
52
|
+
child.on("error", (err) => {
|
|
53
|
+
forward.dispose();
|
|
54
|
+
reject(err);
|
|
55
|
+
});
|
|
56
|
+
child.on("exit", (code) => {
|
|
57
|
+
forward.dispose();
|
|
58
|
+
resolve(code ?? 0);
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
function forwardSignalsTo(child) {
|
|
63
|
+
const signals = ["SIGINT", "SIGTERM", "SIGHUP"];
|
|
64
|
+
const handlers = signals.map((sig) => {
|
|
65
|
+
const handler = () => {
|
|
66
|
+
if (!child.killed)
|
|
67
|
+
child.kill(sig);
|
|
68
|
+
};
|
|
69
|
+
process.on(sig, handler);
|
|
70
|
+
return { sig, handler };
|
|
71
|
+
});
|
|
72
|
+
return {
|
|
73
|
+
dispose() {
|
|
74
|
+
for (const { sig, handler } of handlers)
|
|
75
|
+
process.off(sig, handler);
|
|
76
|
+
},
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=dashboard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dashboard.js","sourceRoot":"","sources":["../../../server/src/dashboard.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
const STATEMENTS = [
|
|
2
|
+
`CREATE TABLE IF NOT EXISTS project (
|
|
3
|
+
id TEXT PRIMARY KEY,
|
|
4
|
+
slug TEXT NOT NULL UNIQUE,
|
|
5
|
+
name TEXT NOT NULL,
|
|
6
|
+
git_remote TEXT,
|
|
7
|
+
dod TEXT,
|
|
8
|
+
sprint_length_days INTEGER NOT NULL DEFAULT 14,
|
|
9
|
+
wip_enabled INTEGER NOT NULL DEFAULT 0,
|
|
10
|
+
estimation_enabled INTEGER NOT NULL DEFAULT 1,
|
|
11
|
+
created_at TEXT NOT NULL
|
|
12
|
+
)`,
|
|
13
|
+
`CREATE TABLE IF NOT EXISTS developer (
|
|
14
|
+
id TEXT PRIMARY KEY,
|
|
15
|
+
project_id TEXT NOT NULL REFERENCES project(id),
|
|
16
|
+
handle TEXT NOT NULL,
|
|
17
|
+
email TEXT,
|
|
18
|
+
last_seen_at TEXT NOT NULL
|
|
19
|
+
)`,
|
|
20
|
+
`CREATE TABLE IF NOT EXISTS sprint (
|
|
21
|
+
id TEXT PRIMARY KEY,
|
|
22
|
+
project_id TEXT NOT NULL REFERENCES project(id),
|
|
23
|
+
name TEXT NOT NULL,
|
|
24
|
+
goal TEXT,
|
|
25
|
+
started_at TEXT NOT NULL,
|
|
26
|
+
ended_at TEXT,
|
|
27
|
+
status TEXT NOT NULL,
|
|
28
|
+
wip_limit INTEGER
|
|
29
|
+
)`,
|
|
30
|
+
`CREATE TABLE IF NOT EXISTS epic (
|
|
31
|
+
id TEXT PRIMARY KEY,
|
|
32
|
+
project_id TEXT NOT NULL REFERENCES project(id),
|
|
33
|
+
title TEXT NOT NULL,
|
|
34
|
+
description TEXT,
|
|
35
|
+
status TEXT NOT NULL DEFAULT 'open',
|
|
36
|
+
priority INTEGER NOT NULL DEFAULT 3,
|
|
37
|
+
target_sprint_id TEXT REFERENCES sprint(id),
|
|
38
|
+
created_at TEXT NOT NULL
|
|
39
|
+
)`,
|
|
40
|
+
`CREATE TABLE IF NOT EXISTS story (
|
|
41
|
+
id TEXT PRIMARY KEY,
|
|
42
|
+
epic_id TEXT REFERENCES epic(id),
|
|
43
|
+
sprint_id TEXT REFERENCES sprint(id),
|
|
44
|
+
title TEXT NOT NULL,
|
|
45
|
+
description TEXT,
|
|
46
|
+
acceptance TEXT,
|
|
47
|
+
status TEXT NOT NULL DEFAULT 'backlog',
|
|
48
|
+
size TEXT,
|
|
49
|
+
assignee_id TEXT REFERENCES developer(id),
|
|
50
|
+
priority INTEGER NOT NULL DEFAULT 3,
|
|
51
|
+
started_at TEXT,
|
|
52
|
+
completed_at TEXT,
|
|
53
|
+
created_at TEXT NOT NULL
|
|
54
|
+
)`,
|
|
55
|
+
`CREATE TABLE IF NOT EXISTS task (
|
|
56
|
+
id TEXT PRIMARY KEY,
|
|
57
|
+
story_id TEXT NOT NULL REFERENCES story(id),
|
|
58
|
+
assignee_id TEXT REFERENCES developer(id),
|
|
59
|
+
title TEXT NOT NULL,
|
|
60
|
+
status TEXT NOT NULL DEFAULT 'todo',
|
|
61
|
+
blocked_by TEXT,
|
|
62
|
+
created_at TEXT NOT NULL
|
|
63
|
+
)`,
|
|
64
|
+
`CREATE TABLE IF NOT EXISTS tech_debt (
|
|
65
|
+
id TEXT PRIMARY KEY,
|
|
66
|
+
project_id TEXT NOT NULL REFERENCES project(id),
|
|
67
|
+
title TEXT NOT NULL,
|
|
68
|
+
description TEXT,
|
|
69
|
+
severity TEXT NOT NULL DEFAULT 'med',
|
|
70
|
+
location TEXT,
|
|
71
|
+
owner_id TEXT REFERENCES developer(id),
|
|
72
|
+
expires_at TEXT,
|
|
73
|
+
opened_at TEXT NOT NULL,
|
|
74
|
+
closed_at TEXT,
|
|
75
|
+
linked_story_id TEXT REFERENCES story(id)
|
|
76
|
+
)`,
|
|
77
|
+
`CREATE TABLE IF NOT EXISTS decision (
|
|
78
|
+
id TEXT PRIMARY KEY,
|
|
79
|
+
project_id TEXT NOT NULL REFERENCES project(id),
|
|
80
|
+
title TEXT NOT NULL,
|
|
81
|
+
context TEXT,
|
|
82
|
+
decision TEXT NOT NULL,
|
|
83
|
+
status TEXT NOT NULL DEFAULT 'accepted',
|
|
84
|
+
decided_at TEXT NOT NULL
|
|
85
|
+
)`,
|
|
86
|
+
`CREATE TABLE IF NOT EXISTS progress_event (
|
|
87
|
+
id TEXT PRIMARY KEY,
|
|
88
|
+
project_id TEXT NOT NULL REFERENCES project(id),
|
|
89
|
+
developer_id TEXT REFERENCES developer(id),
|
|
90
|
+
sprint_id TEXT REFERENCES sprint(id),
|
|
91
|
+
kind TEXT NOT NULL,
|
|
92
|
+
ref_id TEXT,
|
|
93
|
+
summary TEXT NOT NULL,
|
|
94
|
+
ts TEXT NOT NULL
|
|
95
|
+
)`,
|
|
96
|
+
`CREATE INDEX IF NOT EXISTS idx_progress_event_ts ON progress_event(ts DESC)`,
|
|
97
|
+
`CREATE INDEX IF NOT EXISTS idx_story_sprint ON story(sprint_id)`,
|
|
98
|
+
`CREATE INDEX IF NOT EXISTS idx_story_status ON story(status)`,
|
|
99
|
+
`CREATE INDEX IF NOT EXISTS idx_tech_debt_closed ON tech_debt(closed_at)`,
|
|
100
|
+
];
|
|
101
|
+
export async function bootstrap(client) {
|
|
102
|
+
for (const sql of STATEMENTS) {
|
|
103
|
+
await client.execute(sql);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
//# sourceMappingURL=bootstrap.js.map
|