@prmichaelsen/acp-visualizer 0.1.1 → 0.1.3
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/bin/visualize.mjs +22 -1
- package/package.json +1 -1
- package/src/components/ExtraFieldsBadge.tsx +1 -1
- package/src/components/FilterBar.tsx +1 -1
- package/src/components/Header.tsx +1 -1
- package/src/components/MilestoneTable.tsx +1 -1
- package/src/components/MilestoneTree.tsx +2 -2
- package/src/components/StatusBadge.tsx +1 -1
- package/src/components/StatusDot.tsx +1 -1
- package/src/components/TaskList.tsx +1 -1
- package/src/routes/__root.tsx +5 -5
- package/src/routes/api/watch.ts +1 -1
- package/src/routes/index.tsx +2 -2
- package/src/routes/milestones.tsx +7 -7
- package/src/routes/search.tsx +4 -4
- package/src/routes/tasks.tsx +3 -3
- package/src/services/progress-database.service.ts +3 -3
package/bin/visualize.mjs
CHANGED
|
@@ -60,8 +60,29 @@ console.log(`\n ACP Progress Visualizer`)
|
|
|
60
60
|
console.log(` Loading: ${progressPath}`)
|
|
61
61
|
console.log(` Port: ${port}\n`)
|
|
62
62
|
|
|
63
|
+
// Resolve vite binary — check package's own node_modules first,
|
|
64
|
+
// then walk up (npx hoists deps to a shared node_modules)
|
|
65
|
+
function findViteBin() {
|
|
66
|
+
// Local development: package has its own node_modules
|
|
67
|
+
const local = resolve(packageRoot, 'node_modules', '.bin', 'vite')
|
|
68
|
+
if (existsSync(local)) return local
|
|
69
|
+
|
|
70
|
+
// npx: deps hoisted — walk up from package root to find node_modules/.bin
|
|
71
|
+
let dir = packageRoot
|
|
72
|
+
while (dir !== '/') {
|
|
73
|
+
const candidate = resolve(dir, 'node_modules', '.bin', 'vite')
|
|
74
|
+
if (existsSync(candidate)) return candidate
|
|
75
|
+
dir = resolve(dir, '..')
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
// Fallback: hope it's on PATH
|
|
79
|
+
return 'vite'
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
const viteBin = findViteBin()
|
|
83
|
+
|
|
63
84
|
// Start vite dev server from the package directory
|
|
64
|
-
const child = spawn(
|
|
85
|
+
const child = spawn(viteBin, ['dev', '--port', port, '--host'], {
|
|
65
86
|
cwd: packageRoot,
|
|
66
87
|
stdio: 'inherit',
|
|
67
88
|
env: {
|
package/package.json
CHANGED
|
@@ -11,7 +11,7 @@ import { ChevronDown, ChevronRight, ArrowUpDown } from 'lucide-react'
|
|
|
11
11
|
import { StatusBadge } from './StatusBadge'
|
|
12
12
|
import { ProgressBar } from './ProgressBar'
|
|
13
13
|
import { TaskList } from './TaskList'
|
|
14
|
-
import type { Milestone, Task } from '
|
|
14
|
+
import type { Milestone, Task } from '../lib/types'
|
|
15
15
|
|
|
16
16
|
const columnHelper = createColumnHelper<Milestone>()
|
|
17
17
|
|
|
@@ -3,8 +3,8 @@ import { ChevronDown, ChevronRight } from 'lucide-react'
|
|
|
3
3
|
import { StatusBadge } from './StatusBadge'
|
|
4
4
|
import { ProgressBar } from './ProgressBar'
|
|
5
5
|
import { TaskList } from './TaskList'
|
|
6
|
-
import { useCollapse } from '
|
|
7
|
-
import type { Milestone, Task } from '
|
|
6
|
+
import { useCollapse } from '../lib/useCollapse'
|
|
7
|
+
import type { Milestone, Task } from '../lib/types'
|
|
8
8
|
|
|
9
9
|
interface MilestoneTreeProps {
|
|
10
10
|
milestones: Milestone[]
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { StatusDot } from './StatusDot'
|
|
2
2
|
import { ExtraFieldsBadge } from './ExtraFieldsBadge'
|
|
3
|
-
import type { Task } from '
|
|
3
|
+
import type { Task } from '../lib/types'
|
|
4
4
|
|
|
5
5
|
export function TaskList({ tasks }: { tasks: Task[] }) {
|
|
6
6
|
if (tasks.length === 0) {
|
package/src/routes/__root.tsx
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { HeadContent, Scripts, createRootRoute, Outlet } from '@tanstack/react-router'
|
|
2
|
-
import { useAutoRefresh } from '
|
|
3
|
-
import { Sidebar } from '
|
|
4
|
-
import { Header } from '
|
|
5
|
-
import { ProgressDatabaseService } from '
|
|
6
|
-
import type { ProgressData } from '
|
|
2
|
+
import { useAutoRefresh } from '../lib/useAutoRefresh'
|
|
3
|
+
import { Sidebar } from '../components/Sidebar'
|
|
4
|
+
import { Header } from '../components/Header'
|
|
5
|
+
import { ProgressDatabaseService } from '../services/progress-database.service'
|
|
6
|
+
import type { ProgressData } from '../lib/types'
|
|
7
7
|
|
|
8
8
|
import appCss from '../styles.css?url'
|
|
9
9
|
|
package/src/routes/api/watch.ts
CHANGED
package/src/routes/index.tsx
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { createFileRoute } from '@tanstack/react-router'
|
|
2
|
-
import { StatusBadge } from '
|
|
3
|
-
import { ProgressBar } from '
|
|
2
|
+
import { StatusBadge } from '../components/StatusBadge'
|
|
3
|
+
import { ProgressBar } from '../components/ProgressBar'
|
|
4
4
|
|
|
5
5
|
export const Route = createFileRoute('/')({
|
|
6
6
|
component: HomePage,
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import { createFileRoute } from '@tanstack/react-router'
|
|
2
2
|
import { useState } from 'react'
|
|
3
|
-
import { MilestoneTable } from '
|
|
4
|
-
import { MilestoneTree } from '
|
|
5
|
-
import { ViewToggle } from '
|
|
6
|
-
import { FilterBar } from '
|
|
7
|
-
import { SearchInput } from '
|
|
8
|
-
import { useFilteredData } from '
|
|
9
|
-
import type { Status } from '
|
|
3
|
+
import { MilestoneTable } from '../components/MilestoneTable'
|
|
4
|
+
import { MilestoneTree } from '../components/MilestoneTree'
|
|
5
|
+
import { ViewToggle } from '../components/ViewToggle'
|
|
6
|
+
import { FilterBar } from '../components/FilterBar'
|
|
7
|
+
import { SearchInput } from '../components/SearchInput'
|
|
8
|
+
import { useFilteredData } from '../lib/useFilteredData'
|
|
9
|
+
import type { Status } from '../lib/types'
|
|
10
10
|
|
|
11
11
|
export const Route = createFileRoute('/milestones')({
|
|
12
12
|
component: MilestonesPage,
|
package/src/routes/search.tsx
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { createFileRoute } from '@tanstack/react-router'
|
|
2
2
|
import { useState, useMemo } from 'react'
|
|
3
|
-
import { SearchInput } from '
|
|
4
|
-
import { StatusBadge } from '
|
|
5
|
-
import { StatusDot } from '
|
|
6
|
-
import { buildSearchIndex } from '
|
|
3
|
+
import { SearchInput } from '../components/SearchInput'
|
|
4
|
+
import { StatusBadge } from '../components/StatusBadge'
|
|
5
|
+
import { StatusDot } from '../components/StatusDot'
|
|
6
|
+
import { buildSearchIndex } from '../lib/search'
|
|
7
7
|
|
|
8
8
|
export const Route = createFileRoute('/search')({
|
|
9
9
|
component: SearchPage,
|
package/src/routes/tasks.tsx
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createFileRoute } from '@tanstack/react-router'
|
|
2
|
-
import { StatusDot } from '
|
|
3
|
-
import { ExtraFieldsBadge } from '
|
|
4
|
-
import type { Task } from '
|
|
2
|
+
import { StatusDot } from '../components/StatusDot'
|
|
3
|
+
import { ExtraFieldsBadge } from '../components/ExtraFieldsBadge'
|
|
4
|
+
import type { Task } from '../lib/types'
|
|
5
5
|
|
|
6
6
|
export const Route = createFileRoute('/tasks')({
|
|
7
7
|
component: TasksPage,
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { readFileSync } from 'fs'
|
|
2
|
-
import { parseProgressYaml } from '
|
|
3
|
-
import { getProgressYamlPath } from '
|
|
4
|
-
import type { ProgressData } from '
|
|
2
|
+
import { parseProgressYaml } from '../lib/yaml-loader'
|
|
3
|
+
import { getProgressYamlPath } from '../lib/config'
|
|
4
|
+
import type { ProgressData } from '../lib/types'
|
|
5
5
|
|
|
6
6
|
export type ProgressResult =
|
|
7
7
|
| { ok: true; data: ProgressData }
|