@walwal-harness/cli 7.1.8 → 7.1.9
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/README.md +40 -0
- package/apps/harness-dashboard/app/api/env/route.ts +62 -0
- package/apps/harness-dashboard/app/api/log/route.ts +19 -0
- package/apps/harness-dashboard/app/api/missions/route.ts +15 -0
- package/apps/harness-dashboard/app/api/snapshot/route.ts +15 -0
- package/apps/harness-dashboard/app/api/stream/route.ts +71 -0
- package/apps/harness-dashboard/app/globals.css +17 -0
- package/apps/harness-dashboard/app/layout.tsx +29 -0
- package/apps/harness-dashboard/app/page.tsx +35 -0
- package/apps/harness-dashboard/components/Drawer.tsx +97 -0
- package/apps/harness-dashboard/components/Header.tsx +40 -0
- package/apps/harness-dashboard/components/MissionTimeline.tsx +210 -0
- package/apps/harness-dashboard/components/OrgTree.tsx +330 -0
- package/apps/harness-dashboard/components/Scene.tsx +563 -0
- package/apps/harness-dashboard/components/Wordmark.tsx +14 -0
- package/apps/harness-dashboard/components/drawer/AgentLogTab.tsx +56 -0
- package/apps/harness-dashboard/components/drawer/GotchasTab.tsx +89 -0
- package/apps/harness-dashboard/components/drawer/HypothesisTab.tsx +42 -0
- package/apps/harness-dashboard/components/drawer/IncidentsTab.tsx +50 -0
- package/apps/harness-dashboard/components/drawer/MissionDocTab.tsx +92 -0
- package/apps/harness-dashboard/components/drawer/MissionFlowTab.tsx +517 -0
- package/apps/harness-dashboard/components/drawer/OwnerHistoryTab.tsx +156 -0
- package/apps/harness-dashboard/components/drawer/RoomMetricsTab.tsx +90 -0
- package/apps/harness-dashboard/components/drawer/TracksTab.tsx +47 -0
- package/apps/harness-dashboard/components/three/ArchiveBoxes.tsx +95 -0
- package/apps/harness-dashboard/components/three/DeptBoard.tsx +175 -0
- package/apps/harness-dashboard/components/three/Floor3D.tsx +404 -0
- package/apps/harness-dashboard/components/three/GoalCard3D.tsx +123 -0
- package/apps/harness-dashboard/components/three/HypothesisCards.tsx +71 -0
- package/apps/harness-dashboard/components/three/MeetingWhiteboard.tsx +98 -0
- package/apps/harness-dashboard/components/three/Minifig3D.tsx +391 -0
- package/apps/harness-dashboard/components/three/OpsSiren.tsx +99 -0
- package/apps/harness-dashboard/components/three/Stage3D.tsx +104 -0
- package/apps/harness-dashboard/components/three/TrackRibbons.tsx +81 -0
- package/apps/harness-dashboard/hooks/useHarnessStream.ts +53 -0
- package/apps/harness-dashboard/lib/__tests__/company-flow.test.ts +270 -0
- package/apps/harness-dashboard/lib/__tests__/harness-state.test.ts +194 -0
- package/apps/harness-dashboard/lib/__tests__/i18n.test.ts +16 -0
- package/apps/harness-dashboard/lib/__tests__/iso.test.ts +42 -0
- package/apps/harness-dashboard/lib/__tests__/safe-json.test.ts +46 -0
- package/apps/harness-dashboard/lib/__tests__/state-mapping.test.ts +159 -0
- package/apps/harness-dashboard/lib/__tests__/watcher.test.ts +48 -0
- package/apps/harness-dashboard/lib/agent-roster.ts +42 -0
- package/apps/harness-dashboard/lib/furniture.ts +165 -0
- package/apps/harness-dashboard/lib/harness-root.ts +20 -0
- package/apps/harness-dashboard/lib/harness-state.ts +1162 -0
- package/apps/harness-dashboard/lib/i18n.ts +26 -0
- package/apps/harness-dashboard/lib/iso.ts +150 -0
- package/apps/harness-dashboard/lib/log-filter.ts +23 -0
- package/apps/harness-dashboard/lib/markdown.tsx +306 -0
- package/apps/harness-dashboard/lib/path-planning.ts +72 -0
- package/apps/harness-dashboard/lib/safe-json.ts +24 -0
- package/apps/harness-dashboard/lib/state-mapping.ts +126 -0
- package/apps/harness-dashboard/lib/types.ts +329 -0
- package/apps/harness-dashboard/lib/watcher.ts +64 -0
- package/apps/harness-dashboard/next-env.d.ts +6 -0
- package/apps/harness-dashboard/next.config.mjs +9 -0
- package/apps/harness-dashboard/package-lock.json +4280 -0
- package/apps/harness-dashboard/package.json +38 -0
- package/apps/harness-dashboard/playwright.config.ts +23 -0
- package/apps/harness-dashboard/postcss.config.js +6 -0
- package/apps/harness-dashboard/tailwind.config.ts +49 -0
- package/apps/harness-dashboard/tsconfig.json +24 -0
- package/apps/harness-dashboard/vitest.config.ts +15 -0
- package/package.json +11 -1
- package/scripts/harness-dashboard-up.sh +24 -4
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@walwal-harness/dashboard",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"private": true,
|
|
5
|
+
"description": "Brick Office — walwal-harness 라이브 대시보드 (Phase C)",
|
|
6
|
+
"scripts": {
|
|
7
|
+
"dev:dashboard": "next dev -p 3001",
|
|
8
|
+
"build": "next build",
|
|
9
|
+
"start": "next start -p 3001",
|
|
10
|
+
"lint": "next lint",
|
|
11
|
+
"test": "vitest run",
|
|
12
|
+
"test:watch": "vitest",
|
|
13
|
+
"typecheck": "tsc --noEmit",
|
|
14
|
+
"e2e": "playwright test"
|
|
15
|
+
},
|
|
16
|
+
"dependencies": {
|
|
17
|
+
"@react-three/drei": "^10.7.7",
|
|
18
|
+
"@react-three/fiber": "^9.6.1",
|
|
19
|
+
"chokidar": "^4.0.0",
|
|
20
|
+
"next": "^15.0.0",
|
|
21
|
+
"react": "^19.0.0",
|
|
22
|
+
"react-dom": "^19.0.0",
|
|
23
|
+
"three": "^0.184.0"
|
|
24
|
+
},
|
|
25
|
+
"devDependencies": {
|
|
26
|
+
"@playwright/test": "^1.48.0",
|
|
27
|
+
"@types/node": "^22.0.0",
|
|
28
|
+
"@types/react": "^19.0.0",
|
|
29
|
+
"@types/react-dom": "^19.0.0",
|
|
30
|
+
"@types/three": "^0.184.1",
|
|
31
|
+
"@vitest/ui": "^2.1.0",
|
|
32
|
+
"autoprefixer": "^10.4.0",
|
|
33
|
+
"postcss": "^8.4.0",
|
|
34
|
+
"tailwindcss": "^3.4.0",
|
|
35
|
+
"typescript": "^5.6.0",
|
|
36
|
+
"vitest": "^2.1.0"
|
|
37
|
+
}
|
|
38
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { defineConfig, devices } from "@playwright/test";
|
|
2
|
+
|
|
3
|
+
export default defineConfig({
|
|
4
|
+
testDir: "./e2e",
|
|
5
|
+
timeout: 30_000,
|
|
6
|
+
expect: { timeout: 5_000 },
|
|
7
|
+
fullyParallel: false,
|
|
8
|
+
retries: 0,
|
|
9
|
+
reporter: [["list"]],
|
|
10
|
+
use: {
|
|
11
|
+
baseURL: "http://localhost:3001",
|
|
12
|
+
trace: "off",
|
|
13
|
+
},
|
|
14
|
+
webServer: {
|
|
15
|
+
command: "npm run dev:dashboard",
|
|
16
|
+
url: "http://localhost:3001",
|
|
17
|
+
reuseExistingServer: true,
|
|
18
|
+
timeout: 60_000,
|
|
19
|
+
},
|
|
20
|
+
projects: [
|
|
21
|
+
{ name: "chromium", use: { ...devices["Desktop Chrome"] } },
|
|
22
|
+
],
|
|
23
|
+
});
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { Config } from "tailwindcss";
|
|
2
|
+
|
|
3
|
+
const config: Config = {
|
|
4
|
+
content: [
|
|
5
|
+
"./app/**/*.{ts,tsx}",
|
|
6
|
+
"./components/**/*.{ts,tsx}",
|
|
7
|
+
"./hooks/**/*.{ts,tsx}",
|
|
8
|
+
"./lib/**/*.{ts,tsx}",
|
|
9
|
+
],
|
|
10
|
+
theme: {
|
|
11
|
+
extend: {
|
|
12
|
+
colors: {
|
|
13
|
+
"brick-bg": "#0b1020",
|
|
14
|
+
"brick-floor": "#1a2236",
|
|
15
|
+
"brick-wall": "#2a3450",
|
|
16
|
+
"aura-idle": "#4b5563",
|
|
17
|
+
"aura-typing": "#22d3ee",
|
|
18
|
+
"aura-talking": "#fbbf24",
|
|
19
|
+
"aura-alert": "#ef4444",
|
|
20
|
+
},
|
|
21
|
+
fontFamily: {
|
|
22
|
+
mono: ["ui-monospace", "Menlo", "monospace"],
|
|
23
|
+
},
|
|
24
|
+
keyframes: {
|
|
25
|
+
"aura-pulse": {
|
|
26
|
+
"0%, 100%": { opacity: "0.6" },
|
|
27
|
+
"50%": { opacity: "1" },
|
|
28
|
+
},
|
|
29
|
+
"aura-blink": {
|
|
30
|
+
"0%, 100%": { opacity: "0.4" },
|
|
31
|
+
"50%": { opacity: "1" },
|
|
32
|
+
},
|
|
33
|
+
"alert-shake": {
|
|
34
|
+
"0%, 100%": { transform: "translateX(0)" },
|
|
35
|
+
"25%": { transform: "translateX(-1px)" },
|
|
36
|
+
"75%": { transform: "translateX(1px)" },
|
|
37
|
+
},
|
|
38
|
+
},
|
|
39
|
+
animation: {
|
|
40
|
+
"aura-pulse": "aura-pulse 1.4s ease-in-out infinite",
|
|
41
|
+
"aura-blink": "aura-blink 0.8s ease-in-out infinite",
|
|
42
|
+
"alert-shake": "alert-shake 0.3s ease-in-out infinite",
|
|
43
|
+
},
|
|
44
|
+
},
|
|
45
|
+
},
|
|
46
|
+
plugins: [],
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
export default config;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "ES2022",
|
|
4
|
+
"lib": ["dom", "dom.iterable", "esnext"],
|
|
5
|
+
"allowJs": false,
|
|
6
|
+
"skipLibCheck": true,
|
|
7
|
+
"strict": true,
|
|
8
|
+
"noEmit": true,
|
|
9
|
+
"esModuleInterop": true,
|
|
10
|
+
"module": "esnext",
|
|
11
|
+
"moduleResolution": "bundler",
|
|
12
|
+
"resolveJsonModule": true,
|
|
13
|
+
"isolatedModules": true,
|
|
14
|
+
"jsx": "preserve",
|
|
15
|
+
"incremental": true,
|
|
16
|
+
"plugins": [{ "name": "next" }],
|
|
17
|
+
"paths": {
|
|
18
|
+
"@/*": ["./*"]
|
|
19
|
+
},
|
|
20
|
+
"types": ["node", "vitest/globals"]
|
|
21
|
+
},
|
|
22
|
+
"include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"],
|
|
23
|
+
"exclude": ["node_modules"]
|
|
24
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { defineConfig } from "vitest/config";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
|
|
4
|
+
export default defineConfig({
|
|
5
|
+
test: {
|
|
6
|
+
environment: "node",
|
|
7
|
+
globals: true,
|
|
8
|
+
include: ["lib/**/*.test.ts", "lib/__tests__/**/*.test.ts"],
|
|
9
|
+
},
|
|
10
|
+
resolve: {
|
|
11
|
+
alias: {
|
|
12
|
+
"@": path.resolve(__dirname, "."),
|
|
13
|
+
},
|
|
14
|
+
},
|
|
15
|
+
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@walwal-harness/cli",
|
|
3
|
-
"version": "7.1.
|
|
3
|
+
"version": "7.1.9",
|
|
4
4
|
"description": "Company-style AI agent harness for Claude and Codex. Installs commands, CXX agents, skills, HR-Resource hiring pool, and project-local .harness runtime state.",
|
|
5
5
|
"bin": {
|
|
6
6
|
"walwal-harness": "bin/init.js"
|
|
@@ -43,6 +43,16 @@
|
|
|
43
43
|
"files": [
|
|
44
44
|
"bin/",
|
|
45
45
|
"HR-Resource/",
|
|
46
|
+
"apps/harness-dashboard/app/",
|
|
47
|
+
"apps/harness-dashboard/components/",
|
|
48
|
+
"apps/harness-dashboard/hooks/",
|
|
49
|
+
"apps/harness-dashboard/lib/",
|
|
50
|
+
"apps/harness-dashboard/public/",
|
|
51
|
+
"apps/harness-dashboard/*.json",
|
|
52
|
+
"apps/harness-dashboard/*.js",
|
|
53
|
+
"apps/harness-dashboard/*.mjs",
|
|
54
|
+
"apps/harness-dashboard/*.ts",
|
|
55
|
+
"apps/harness-dashboard/*.tsx",
|
|
46
56
|
"scripts/",
|
|
47
57
|
"commands/",
|
|
48
58
|
"assets/",
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
# walwal-harness — Brick Office dashboard launcher
|
|
3
3
|
#
|
|
4
4
|
# 처음 쓰는 사용자도 한 줄로 대시보드를 띄워볼 수 있게 만든 helper.
|
|
5
|
-
#
|
|
6
|
-
#
|
|
7
|
-
#
|
|
5
|
+
# npm 패키지에 포함된 apps/harness-dashboard 를 사용자 프로젝트 외부
|
|
6
|
+
# (~/.walwal-harness/dashboard/<project-key>) 에 격리 복사 후 dev 실행한다.
|
|
7
|
+
# 구버전 호환을 위해 패키지에 dashboard 가 없으면 git sparse-checkout 으로 fallback 한다.
|
|
8
8
|
#
|
|
9
9
|
# Usage:
|
|
10
10
|
# bash scripts/harness-dashboard-up.sh # install + dev (port 3001)
|
|
@@ -16,6 +16,7 @@ REPO_URL="${WALWAL_HARNESS_REPO:-https://github.com/30eggis/walwal-harness.git}"
|
|
|
16
16
|
DASHBOARD_PATH="apps/harness-dashboard"
|
|
17
17
|
PORT="${PORT:-3001}"
|
|
18
18
|
REINSTALL=false
|
|
19
|
+
PACKAGE_VERSION="unknown"
|
|
19
20
|
|
|
20
21
|
while [[ $# -gt 0 ]]; do
|
|
21
22
|
case "$1" in
|
|
@@ -40,6 +41,13 @@ fi
|
|
|
40
41
|
PROJECT_KEY="$(printf '%s' "${HARNESS_ROOT}" | shasum -a 1 | awk '{print substr($1,1,12)}')"
|
|
41
42
|
PROJECT_NAME="$(basename "${HARNESS_ROOT}")"
|
|
42
43
|
LOCAL_DIR="${HOME}/.walwal-harness/dashboard/${PROJECT_NAME}-${PROJECT_KEY}"
|
|
44
|
+
VERSION_FILE="${LOCAL_DIR}/.walwal-dashboard-version"
|
|
45
|
+
|
|
46
|
+
PACKAGE_ROOT="${HARNESS_ROOT}/node_modules/@walwal-harness/cli"
|
|
47
|
+
PACKAGED_DASHBOARD="${PACKAGE_ROOT}/${DASHBOARD_PATH}"
|
|
48
|
+
if [[ -f "${PACKAGE_ROOT}/package.json" ]]; then
|
|
49
|
+
PACKAGE_VERSION="$(node -p "require('${PACKAGE_ROOT}/package.json').version" 2>/dev/null || echo unknown)"
|
|
50
|
+
fi
|
|
43
51
|
|
|
44
52
|
if [[ "$REINSTALL" == "true" ]]; then
|
|
45
53
|
rm -rf "$LOCAL_DIR"
|
|
@@ -48,7 +56,19 @@ fi
|
|
|
48
56
|
echo "[brick-office] HARNESS_ROOT = ${HARNESS_ROOT}"
|
|
49
57
|
echo "[brick-office] dashboard 격리 경로 = ${LOCAL_DIR}"
|
|
50
58
|
|
|
51
|
-
if [[
|
|
59
|
+
if [[ -d "${PACKAGED_DASHBOARD}" ]]; then
|
|
60
|
+
INSTALLED_VERSION=""
|
|
61
|
+
if [[ -f "${VERSION_FILE}" ]]; then
|
|
62
|
+
INSTALLED_VERSION="$(cat "${VERSION_FILE}" 2>/dev/null || true)"
|
|
63
|
+
fi
|
|
64
|
+
if [[ ! -d "${LOCAL_DIR}/${DASHBOARD_PATH}" || "${INSTALLED_VERSION}" != "${PACKAGE_VERSION}" ]]; then
|
|
65
|
+
echo "[brick-office] dashboard sync from npm package @walwal-harness/cli@${PACKAGE_VERSION}"
|
|
66
|
+
rm -rf "${LOCAL_DIR:?}/${DASHBOARD_PATH}"
|
|
67
|
+
mkdir -p "${LOCAL_DIR}/apps"
|
|
68
|
+
cp -R "${PACKAGED_DASHBOARD}" "${LOCAL_DIR}/apps/"
|
|
69
|
+
printf '%s\n' "${PACKAGE_VERSION}" > "${VERSION_FILE}"
|
|
70
|
+
fi
|
|
71
|
+
elif [[ ! -d "${LOCAL_DIR}/${DASHBOARD_PATH}" ]]; then
|
|
52
72
|
echo "[brick-office] 첫 실행 — git sparse-checkout 으로 dashboard 만 가져옵니다 (~5MB)."
|
|
53
73
|
mkdir -p "${LOCAL_DIR}"
|
|
54
74
|
cd "${LOCAL_DIR}"
|