rvlib-shipkit 1.1.1 → 1.3.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/CHANGELOG.md +130 -0
- package/README.md +1 -1
- package/package.json +3 -1
- package/src/assets/run-assets.ts +3 -8
- package/src/check.ts +40 -2
- package/src/checks/SK001-package-json-shape.check.ts +14 -3
- package/src/checks/SK002-contracts-fulfillness.check.ts +3 -3
- package/src/checks/SK004-gitignore-policy.check.ts +11 -3
- package/src/checks/SK005-rvlib-versions.check.ts +13 -1
- package/src/checks/SK006-npm-publish-safety.check.ts +5 -0
- package/src/checks/SK007-github-visibility.check.ts +9 -9
- package/src/checks/SK008-reviewer-agent.check.ts +14 -8
- package/src/checks/SK009-commit-ai-tells.check.ts +29 -5
- package/src/checks/SK013-one-way-in-policy.check.ts +10 -2
- package/src/checks/SK015-nested-repo.check.ts +5 -1
- package/src/checks/SK017-vscode-hub-task.check.ts +7 -0
- package/src/checks/SK022-machine-runs-the-pin.check.ts +47 -0
- package/src/checks/SK024-identity-colors.check.ts +54 -0
- package/src/checks/SK025-release-drift.check.ts +58 -0
- package/src/checks/SK026-asks-autoclose.check.ts +44 -0
- package/src/checks/SK027-agent-wiki-links.check.ts +28 -0
- package/src/checks/SK028-readme.check.ts +79 -0
- package/src/cli/cmd_Assets.ts +1 -1
- package/src/cli/cmd_Check.ts +26 -1
- package/src/cli/cmd_Ci.ts +23 -5
- package/src/cli/cmd_CrossRepoActivity.ts +116 -0
- package/src/cli/cmd_GlobalProcesses.ts +155 -0
- package/src/cli/cmd_Home.ts +170 -0
- package/src/cli/cmd_Keys.ts +17 -3
- package/src/cli/cmd_Overview.ts +98 -0
- package/src/cli/cmd_Planned.ts +117 -0
- package/src/cli.ts +30 -2
- package/src/collections/checks.ts +3 -2
- package/src/collections/providers.ts +1 -1
- package/src/collections/test-time.ts +10 -1
- package/src/comfy/comfy-panel.ts +1 -16
- package/src/core/agent-spawn.ts +46 -0
- package/src/core/archived.ts +82 -0
- package/src/core/attach.ts +14 -9
- package/src/core/canonical-scripts.ts +12 -3
- package/src/core/check-file-names.ts +8 -0
- package/src/core/check-runner.ts +80 -30
- package/src/core/discover-checks.ts +38 -18
- package/src/core/file-stamp.ts +20 -0
- package/src/{checks/SK021-github-login.check.ts → core/gh-login.ts} +45 -54
- package/src/core/identity-color.ts +203 -0
- package/src/core/identity.ts +91 -0
- package/src/core/job-follow.ts +102 -0
- package/src/core/job-run.ts +27 -0
- package/src/core/jobs.ts +87 -27
- package/src/core/legacy-shapes.ts +1 -14
- package/src/core/machine-db.ts +83 -0
- package/src/core/one-lib.ts +85 -0
- package/src/core/port-holders.ts +43 -0
- package/src/core/repo-facts.ts +14 -0
- package/src/core/retention.ts +222 -0
- package/src/core/retired-checks.ts +7 -0
- package/src/core/run-check.ts +12 -4
- package/src/core/run-ci.ts +46 -12
- package/src/core/run-fix.ts +7 -2
- package/src/core/run-fixers.ts +10 -6
- package/src/core/slots.ts +5 -0
- package/src/core/statement-end.ts +17 -0
- package/src/core/wire.ts +11 -0
- package/src/fleet/scan-fleet.ts +2 -1
- package/src/home/activity-shape.ts +135 -0
- package/src/home/activity.ts +249 -0
- package/src/home/attach.ts +95 -0
- package/src/home/autostart.ts +108 -0
- package/src/home/global-units.ts +87 -0
- package/src/home/gui-app/ShipkitGui.swift +159 -0
- package/src/home/gui-app.ts +99 -0
- package/src/home/handoff.ts +51 -0
- package/src/home/home-launchd.ts +104 -0
- package/src/home/home-paths.ts +88 -0
- package/src/home/home-routes.ts +235 -0
- package/src/home/home-start.ts +105 -0
- package/src/home/home-state.ts +43 -0
- package/src/home/home-words.ts +12 -0
- package/src/home/hubs.ts +286 -0
- package/src/home/lib-watch.ts +139 -0
- package/src/home/machine-stores.ts +115 -0
- package/src/home/open-app.ts +16 -0
- package/src/home/pm-config.ts +37 -0
- package/src/home/pm.ts +174 -0
- package/src/home/process-rows.ts +205 -0
- package/src/home/resources.ts +365 -0
- package/src/home/run-daemon.ts +137 -0
- package/src/home/run-pm.ts +150 -0
- package/src/home/run-unit-action.ts +25 -0
- package/src/home/run-web.ts +37 -0
- package/src/home/serve-daemon.ts +31 -0
- package/src/home/serve-web.ts +175 -0
- package/src/home/supervise.ts +361 -0
- package/src/home/via-hub.ts +142 -0
- package/src/home/widget-text.ts +119 -0
- package/src/home/widgets.ts +102 -0
- package/src/hooks/run-hooks.ts +20 -3
- package/src/ledger/check-stats.ts +19 -45
- package/src/ledger/db.ts +69 -17
- package/src/ledger/gate-checks.ts +22 -3
- package/src/ledger/git-scan.ts +31 -7
- package/src/ledger/house-runs.ts +43 -0
- package/src/ledger/ledger.ts +40 -14
- package/src/ledger/live-timeline.ts +4 -19
- package/src/ledger/run-log.ts +92 -28
- package/src/ledger/store.ts +245 -103
- package/src/ledger/world-cache.ts +64 -15
- package/src/plan/cadence.ts +253 -0
- package/src/plan/catch-up.ts +37 -0
- package/src/plan/plan-timeline.ts +99 -0
- package/src/plan/planner.ts +428 -0
- package/src/plan/repo-source.ts +212 -0
- package/src/problems/problem-line.ts +1 -1
- package/src/release/run-release.ts +9 -2
- package/src/release/unit-resolve.ts +8 -12
- package/src/repo-config.ts +61 -4
- package/src/serve/house-runs.ts +53 -0
- package/src/serve/hub-app/activity-st.ts +168 -0
- package/src/serve/hub-app/activity-view.tsx +218 -0
- package/src/serve/hub-app/activity.css +78 -0
- package/src/serve/hub-app/admin-svc.ts +41 -0
- package/src/serve/hub-app/admin-view.tsx +42 -0
- package/src/serve/hub-app/chart-view.ts +12 -5
- package/src/serve/hub-app/check-view.tsx +9 -9
- package/src/serve/hub-app/check-words.ts +3 -1
- package/src/serve/hub-app/checks-svc.ts +12 -8
- package/src/serve/hub-app/col-card.tsx +4 -4
- package/src/serve/hub-app/cols-svc.ts +92 -13
- package/src/serve/hub-app/comfy-svc.ts +12 -6
- package/src/serve/hub-app/comfy-view.tsx +3 -3
- package/src/serve/hub-app/controls.css +32 -0
- package/src/serve/hub-app/cycle-button.tsx +36 -0
- package/src/serve/hub-app/dock-anim.ts +25 -0
- package/src/serve/hub-app/dock-st.ts +329 -0
- package/src/serve/hub-app/dock-view.tsx +68 -0
- package/src/serve/hub-app/dock.css +35 -0
- package/src/serve/hub-app/floating.tsx +49 -0
- package/src/serve/hub-app/geometry-view.tsx +4 -4
- package/src/serve/hub-app/hash-route.ts +8 -2
- package/src/serve/hub-app/header-bar.tsx +102 -95
- package/src/serve/hub-app/health-svc.ts +3 -3
- package/src/serve/hub-app/help.tsx +10 -7
- package/src/serve/hub-app/home-st.ts +278 -0
- package/src/serve/hub-app/home-strip.css +113 -0
- package/src/serve/hub-app/home-strip.tsx +376 -0
- package/src/serve/hub-app/home.html +21 -0
- package/src/serve/hub-app/hub-app.tsx +221 -177
- package/src/serve/hub-app/hub-types.ts +0 -3
- package/src/serve/hub-app/hub.css +112 -52
- package/src/serve/hub-app/icons.tsx +34 -0
- package/src/serve/hub-app/index.html +7 -1
- package/src/serve/hub-app/keys.ts +60 -0
- package/src/serve/hub-app/layout-st.ts +55 -0
- package/src/serve/hub-app/live-svc.ts +35 -72
- package/src/serve/hub-app/machine-st.ts +333 -0
- package/src/serve/hub-app/md.ts +38 -5
- package/src/serve/hub-app/media-svc.ts +63 -44
- package/src/serve/hub-app/media-view.tsx +20 -20
- package/src/serve/hub-app/next-run.ts +24 -30
- package/src/serve/hub-app/palette-st.ts +92 -0
- package/src/serve/hub-app/palette-view.tsx +47 -0
- package/src/serve/hub-app/pill-row.tsx +65 -0
- package/src/serve/hub-app/planned-st.ts +107 -0
- package/src/serve/hub-app/planned-view.tsx +114 -0
- package/src/serve/hub-app/planned.css +42 -0
- package/src/serve/hub-app/processes-svc.ts +63 -0
- package/src/serve/hub-app/project-list.css +119 -0
- package/src/serve/hub-app/project-list.tsx +266 -0
- package/src/serve/hub-app/projects-svc.ts +253 -23
- package/src/serve/hub-app/prose-hits-st.ts +3 -3
- package/src/serve/hub-app/prose-hits-view.tsx +6 -6
- package/src/serve/hub-app/readme-svc.ts +38 -0
- package/src/serve/hub-app/readme-view.tsx +19 -0
- package/src/serve/hub-app/readme.css +11 -0
- package/src/serve/hub-app/repo-sections.tsx +61 -0
- package/src/serve/hub-app/repo-st.ts +340 -0
- package/src/serve/hub-app/runs-tabs.ts +1 -1
- package/src/serve/hub-app/screen-cache.ts +74 -0
- package/src/serve/hub-app/sidebar.tsx +84 -0
- package/src/serve/hub-app/test-view.tsx +4 -4
- package/src/serve/hub-app/tests-svc.ts +3 -3
- package/src/serve/hub-app/tests-view.tsx +41 -14
- package/src/serve/hub-app/timeline-chart.tsx +55 -39
- package/src/serve/hub-app/timeline-geometry.ts +40 -5
- package/src/serve/hub-app/timeline-svc.ts +7 -6
- package/src/serve/hub-app/timeline-view.tsx +33 -16
- package/src/serve/hub-app/tree-row.tsx +2 -2
- package/src/serve/hub-app/tree-svc.ts +2 -2
- package/src/serve/hub-app/wikis-view.tsx +10 -6
- package/src/serve/hub-runtime.ts +550 -0
- package/src/serve/other-repos.ts +8 -45
- package/src/serve/project-gutter-route.ts +121 -20
- package/src/serve/project-gutter.ts +33 -11
- package/src/serve/readme-route.ts +57 -0
- package/src/serve/repo-processes.ts +89 -0
- package/src/serve/run-serve.ts +110 -402
- package/src/serve/serve-hub.ts +155 -52
- package/src/serve/stale-restart.ts +5 -0
- package/src/serve/{gate-trigger.ts → tracked-watch.ts} +37 -65
- package/src/serve/warm-cell.ts +95 -0
- package/src/shipkit-files.ts +130 -0
- package/src/shipkit.ts +2 -1
- package/src/suite/kept-timings.ts +1 -1
- package/src/wiki/graph-positions.ts +1 -1
- package/src/checks/contracts.check.ts +0 -20
- package/src/serve/health-schedule.ts +0 -102
- package/src/serve/hub-app/hub-st.ts +0 -250
- package/src/serve/hub-app/project-gutter.css +0 -65
- package/src/serve/hub-app/project-gutter.tsx +0 -128
|
@@ -1,128 +0,0 @@
|
|
|
1
|
-
// the project gutter: one icon per repo that shares this hub's house wiki,
|
|
2
|
-
// down the far left of the page. The face stays quiet (faceOf): at most one
|
|
3
|
-
// badge, the open asks; the icon dims while VS Code does not have the folder
|
|
4
|
-
// open; a thin edge pulses while Claude sessions run in it; the selected
|
|
5
|
-
// background marks this hub's own repo. Everything else is the hover card,
|
|
6
|
-
// shown at once to the right of the icon. A click opens the folder in VS
|
|
7
|
-
// Code, a drag reorders the rail, and the button on top sorts it once by
|
|
8
|
-
// last activity. Fixed position, so it takes no cell of the page grid
|
|
9
|
-
// (project-gutter.css).
|
|
10
|
-
import { observer } from 'mobx-react-lite'
|
|
11
|
-
import { useEffect, useLayoutEffect, useRef } from 'react'
|
|
12
|
-
import type { HubSt } from './hub-st.ts'
|
|
13
|
-
import { cardModel, faceOf, hueOf, type Project } from './projects-svc.ts'
|
|
14
|
-
|
|
15
|
-
export const Tile = observer(({ app, p, i }: { app: HubSt; p: Project; i: number }) => {
|
|
16
|
-
const s = app.projects
|
|
17
|
-
const gap = s.shownGap
|
|
18
|
-
const face = faceOf(p)
|
|
19
|
-
// the drop line rides on a tile edge, so showing it moves nothing
|
|
20
|
-
const edge = gap === i ? ' dropb' : gap === i + 1 && i === s.list.length - 1 ? ' dropa' : ''
|
|
21
|
-
const cls = `pgt${p.current ? ' cur' : ''}${face.dim ? ' dim' : ''}${s.drag === p.name ? ' dragging' : ''}${edge}`
|
|
22
|
-
return (
|
|
23
|
-
<button className={cls} aria-label={p.name}
|
|
24
|
-
draggable onClick={() => void s.open(p.name)}
|
|
25
|
-
onMouseEnter={(e) => {
|
|
26
|
-
const r = e.currentTarget.getBoundingClientRect()
|
|
27
|
-
s.hoverIn(p.name, r.top + r.height / 2)
|
|
28
|
-
}}
|
|
29
|
-
onMouseLeave={() => s.hoverOut(p.name)}
|
|
30
|
-
onDragStart={(e) => {
|
|
31
|
-
e.dataTransfer.effectAllowed = 'move'
|
|
32
|
-
e.dataTransfer.setData('text/plain', p.name)
|
|
33
|
-
s.dragStart(p.name)
|
|
34
|
-
}}
|
|
35
|
-
onDragOver={(e) => {
|
|
36
|
-
if (s.drag == null) return
|
|
37
|
-
e.preventDefault()
|
|
38
|
-
const r = e.currentTarget.getBoundingClientRect()
|
|
39
|
-
s.dragOver(i, e.clientY - r.top, r.height)
|
|
40
|
-
}}
|
|
41
|
-
onDrop={(e) => {
|
|
42
|
-
e.preventDefault()
|
|
43
|
-
s.drop()
|
|
44
|
-
}}
|
|
45
|
-
onDragEnd={() => s.dragEnd()}>
|
|
46
|
-
<Face p={p} />
|
|
47
|
-
{face.badge != null ? <b className="pga">{face.badge}</b> : null}
|
|
48
|
-
{face.busy ? <i className="pgs" /> : null}
|
|
49
|
-
</button>
|
|
50
|
-
)
|
|
51
|
-
})
|
|
52
|
-
|
|
53
|
-
const Face = ({ p }: { p: Project }) => (p.icon != null
|
|
54
|
-
? <img src={p.icon} alt="" draggable={false} />
|
|
55
|
-
: <span className={`pgi h${hueOf(p.name)}`}>{(p.name.match(/[a-zA-Z]/)?.[0] ?? p.name.charAt(0)).toUpperCase()}</span>)
|
|
56
|
-
|
|
57
|
-
/** the card for one repo: header, what needs a human, then the fact rows,
|
|
58
|
-
* in the label and value shape the check page's WHAT widget uses */
|
|
59
|
-
export const Card = ({ p, now }: { p: Project; now: number }) => {
|
|
60
|
-
const m = cardModel(p, now)
|
|
61
|
-
return (
|
|
62
|
-
<>
|
|
63
|
-
<div className="pgch">
|
|
64
|
-
<span className="pgcface"><Face p={p} /></span>
|
|
65
|
-
<b className="pgcname">{m.head.name}{m.head.current ? <span className="pgcthis"> this hub</span> : null}</b>
|
|
66
|
-
{m.head.version == null ? null : <span className="pgcver">v{m.head.version.replace(/^v/, '')}</span>}
|
|
67
|
-
</div>
|
|
68
|
-
{m.head.branch == null ? null : <div className="pgcline">{m.head.branch}</div>}
|
|
69
|
-
{m.head.description == null ? null : <div className="pgcdesc">{m.head.description}</div>}
|
|
70
|
-
{m.needs == null ? null : (
|
|
71
|
-
<div className="pgcneeds">
|
|
72
|
-
{m.needs.asks == null ? null : (
|
|
73
|
-
<div className="pgcneed">
|
|
74
|
-
<span className="pgcask">{m.needs.asks.count} ask{m.needs.asks.count === 1 ? '' : 's'}: {m.needs.asks.titles.join(' · ')}</span>
|
|
75
|
-
{m.needs.asks.more > 0 ? <span className="pgcmore">+{m.needs.asks.more}</span> : null}
|
|
76
|
-
</div>
|
|
77
|
-
)}
|
|
78
|
-
{m.needs.gate == null ? null : <div className="pgcneed red">{m.needs.gate}</div>}
|
|
79
|
-
</div>
|
|
80
|
-
)}
|
|
81
|
-
{m.facts.length === 0 ? null : (
|
|
82
|
-
<div className="pgcfacts">
|
|
83
|
-
{m.facts.map((f) => (
|
|
84
|
-
<div key={f.k} className="wfact">
|
|
85
|
-
<span className="wk">{f.k}</span>
|
|
86
|
-
<span className={`wv${f.tone == null ? '' : ` ${f.tone}`}`}>{f.v}</span>
|
|
87
|
-
</div>
|
|
88
|
-
))}
|
|
89
|
-
</div>
|
|
90
|
-
)}
|
|
91
|
-
</>
|
|
92
|
-
)
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
/** the one hover card: right of the rail, centred on the icon's row, then
|
|
96
|
-
* clamped into the viewport once its own height is known */
|
|
97
|
-
export const HoverCard = observer(({ app }: { app: HubSt }) => {
|
|
98
|
-
const s = app.projects
|
|
99
|
-
const p = s.hovered
|
|
100
|
-
const y = s.hover?.y ?? 0
|
|
101
|
-
const ref = useRef<HTMLDivElement>(null)
|
|
102
|
-
useLayoutEffect(() => {
|
|
103
|
-
const el = ref.current
|
|
104
|
-
if (el == null) return
|
|
105
|
-
const h = el.offsetHeight
|
|
106
|
-
el.style.top = `${Math.max(8, Math.min(y - h / 2, window.innerHeight - h - 8))}px`
|
|
107
|
-
})
|
|
108
|
-
if (p == null) return null
|
|
109
|
-
return (
|
|
110
|
-
<div ref={ref} className="pgcard" role="tooltip">
|
|
111
|
-
<Card p={p} now={Date.now()} />
|
|
112
|
-
</div>
|
|
113
|
-
)
|
|
114
|
-
})
|
|
115
|
-
|
|
116
|
-
export const ProjectGutter = observer(({ app }: { app: HubSt }) => {
|
|
117
|
-
useEffect(() => app.projects.start(), [app])
|
|
118
|
-
const s = app.projects
|
|
119
|
-
if (s.list.length === 0 && s.error === '') return null
|
|
120
|
-
return (
|
|
121
|
-
<nav className="pgut" aria-label="projects">
|
|
122
|
-
<button className="pgsort" title="sort by last activity, once: the result is the new manual order" onClick={() => s.sortByActivity()}>⇅</button>
|
|
123
|
-
{s.list.map((p, i) => <Tile key={p.name} app={app} p={p} i={i} />)}
|
|
124
|
-
{s.error !== '' ? <span className="pgerr" title={s.error}>!</span> : null}
|
|
125
|
-
<HoverCard app={app} />
|
|
126
|
-
</nav>
|
|
127
|
-
)
|
|
128
|
-
})
|