{"_id":"@27aaron/dsh-wakatime-ui","_rev":"2-94df88d07a322367a05bd8407b52c7db","name":"@27aaron/dsh-wakatime-ui","dist-tags":{"next":"0.3.0","latest":"0.4.0"},"versions":{"0.3.0":{"name":"@27aaron/dsh-wakatime-ui","version":"0.3.0","keywords":["deepseek-harness","dsh","dsh-plugin","wakatime","dashboard","settings-page","ai-coding"],"author":"Aaron","license":"MIT","_id":"@27aaron/dsh-wakatime-ui@0.3.0","maintainers":[{"name":"27aaron","email":"niceboy@duck.com"}],"homepage":"https://github.com/27Aaron/agent-toolkit/tree/main/plugins/dsh-wakatime-ui#readme","bugs":{"url":"https://github.com/27Aaron/agent-toolkit/issues"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-ui-slots","@deepseek-ai/dsh-client-locale"],"platform":"web"}},"dist":{"shasum":"95e4b19705819ad738f2b3d1be430c062635df4f","tarball":"https://registry.npmjs.org/@27aaron/dsh-wakatime-ui/-/dsh-wakatime-ui-0.3.0.tgz","fileCount":10,"integrity":"sha512-/mA1Tpe/Dqdihd9EF/nyRl8MQ76Gl3Hjl0rQC15kWnVYqXATQVgHrfJsRD8IPnNggnxTctqHnaByXuNCtTNsuw==","signatures":[{"sig":"MEUCIQC1eyOaq+oPRu8wd33CuAhQOQWR9TFv1xFF5rRj3AiBtQIgZfIJD5Lbr6vsQY0OiX9rks1gIAdKf85y62zQ1ehr1rc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":393411},"main":"lib/index.js","type":"module","types":"lib/types/index.d.ts","engines":{"node":"^22.19.0 || >=24.0.0"},"exports":{".":{"types":"./lib/types/index.d.ts","default":"./lib/index.js"},"./client":{"types":"./lib/types/client.d.ts","default":"./lib/client.js"},"./package.json":"./package.json"},"scripts":{"test":"vitest run","build":"tsc -p tsconfig.build.json && tsdown","check":"pnpm run typecheck && pnpm run test && pnpm run build && pnpm exec publint","typecheck":"tsc --noEmit"},"_npmUser":{"name":"27aaron","email":"niceboy@duck.com"},"repository":{"url":"git+https://github.com/27Aaron/agent-toolkit.git","type":"git","directory":"plugins/dsh-wakatime-ui"},"description":"Web dashboard and settings page for @27aaron/dsh-wakatime on DeepSeek Harness","directories":{},"_nodeVersion":"26.7.0","dependencies":{"@27aaron/dsh-wakatime":"^0.3.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"react":"18.3.1","tsdown":"^0.22.2","vitest":"^4.1.8","publint":"^0.3.21","typescript":"^5.9.3","@types/node":"^22.20.0","@types/react":"^18.3.0","@vitest/coverage-v8":"^4.1.8","react-test-renderer":"18.3.1","@types/react-test-renderer":"18.3.1"},"peerDependencies":{"react":">=18.2.0 <19","@deepseek-ai/cordis":">=4.0.1 <5","@deepseek-ai/dsh-client-locale":">=0.1.1-rc.2 <0.2","@deepseek-ai/dsh-client-runtime":">=0.1.1-rc.2 <0.2","@deepseek-ai/dsh-client-ui-slots":">=0.1.1-rc.2 <0.2","@deepseek-ai/dsh-client-connection":">=0.1.1-rc.2 <0.2","@deepseek-ai/dsh-client-ui-settings":">=0.1.1-rc.2 <0.2"},"peerDependenciesMeta":{"react":{"optional":true},"@deepseek-ai/cordis":{"optional":true},"@deepseek-ai/dsh-client-locale":{"optional":true},"@deepseek-ai/dsh-client-runtime":{"optional":true},"@deepseek-ai/dsh-client-ui-slots":{"optional":true},"@deepseek-ai/dsh-client-connection":{"optional":true},"@deepseek-ai/dsh-client-ui-settings":{"optional":true}},"_npmOperationalInternal":{"tmp":"tmp/dsh-wakatime-ui_0.3.0_1787823394414_0.8869622077001871","host":"s3://npm-registry-packages-npm-production"}},"0.4.0":{"name":"@27aaron/dsh-wakatime-ui","version":"0.4.0","description":"Web dashboard and settings page for @27aaron/dsh-wakatime on DeepSeek Harness","author":"Aaron","license":"MIT","type":"module","main":"lib/index.js","types":"lib/types/index.d.ts","exports":{".":{"types":"./lib/types/index.d.ts","default":"./lib/index.js"},"./client":{"types":"./lib/types/client.d.ts","default":"./lib/client.js"},"./package.json":"./package.json"},"dsh":{"bundle":{"patch":"./cordis.patch.yml"},"client":{"inject":["@deepseek-ai/dsh-client-connection","@deepseek-ai/dsh-client-runtime","@deepseek-ai/dsh-client-ui-settings","@deepseek-ai/dsh-client-ui-slots","@deepseek-ai/dsh-client-locale"],"platform":"web"}},"repository":{"type":"git","url":"git+https://github.com/27Aaron/agent-toolkit.git","directory":"plugins/dsh-wakatime-ui"},"homepage":"https://github.com/27Aaron/agent-toolkit/tree/main/plugins/dsh-wakatime-ui#readme","bugs":{"url":"https://github.com/27Aaron/agent-toolkit/issues"},"publishConfig":{"access":"public"},"engines":{"node":"^22.19.0 || >=24.0.0"},"dependencies":{"@27aaron/dsh-wakatime":"^0.4.0"},"peerDependencies":{"@deepseek-ai/cordis":">=4.0.1 <5","@deepseek-ai/dsh-client-connection":">=0.1.1-rc.2 <0.2","@deepseek-ai/dsh-client-locale":">=0.1.1-rc.2 <0.2","@deepseek-ai/dsh-client-runtime":">=0.1.1-rc.2 <0.2","@deepseek-ai/dsh-client-ui-settings":">=0.1.1-rc.2 <0.2","@deepseek-ai/dsh-client-ui-slots":">=0.1.1-rc.2 <0.2","react":">=18.2.0 <19"},"peerDependenciesMeta":{"@deepseek-ai/cordis":{"optional":true},"@deepseek-ai/dsh-client-connection":{"optional":true},"@deepseek-ai/dsh-client-locale":{"optional":true},"@deepseek-ai/dsh-client-runtime":{"optional":true},"@deepseek-ai/dsh-client-ui-settings":{"optional":true},"@deepseek-ai/dsh-client-ui-slots":{"optional":true},"react":{"optional":true}},"devDependencies":{"@types/node":"^22.20.0","@types/react":"^18.3.0","@types/react-test-renderer":"18.3.1","@vitest/coverage-v8":"^4.1.8","publint":"^0.3.21","react":"18.3.1","react-test-renderer":"18.3.1","tsdown":"^0.22.2","typescript":"^5.9.3","vitest":"^4.1.8"},"keywords":["deepseek-harness","dsh","dsh-plugin","wakatime","dashboard","settings-page","ai-coding"],"scripts":{"build":"tsc -p tsconfig.build.json && tsdown","check":"pnpm run typecheck && pnpm run test && pnpm run build && pnpm exec publint","test":"vitest run","typecheck":"tsc --noEmit"},"_nodeVersion":"26.7.0","_id":"@27aaron/dsh-wakatime-ui@0.4.0","dist":{"integrity":"sha512-cqrbHjJGAdnOXgxnEhBEFUA6iwJb4QvceNl9hy0JlI9uxszReoxEQhiba0+xE6Ocqc1lQ8EnDvyf6PI7YhtJog==","shasum":"1ba8be68d2635d626098cb3abcc3fdb7c300a72c","tarball":"https://registry.npmjs.org/@27aaron/dsh-wakatime-ui/-/dsh-wakatime-ui-0.4.0.tgz","fileCount":10,"unpackedSize":384789,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEQCIFtphjJwUBOvFpjtoX+QjBPQ0cNi9QN2wAfa+HNy+wqTAiBq4OIF0yu9AyCLBr1H7Vvsmr9UizBRec2VmxYc9zgDHw=="}]},"_npmUser":{"name":"27aaron","email":"niceboy@duck.com"},"directories":{},"maintainers":[{"name":"27aaron","email":"niceboy@duck.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/dsh-wakatime-ui_0.4.0_1787880725285_0.6866392351761015"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-27T09:36:34.219Z","modified":"2026-08-28T01:32:05.610Z","0.3.0":"2026-08-27T09:36:34.547Z","0.4.0":"2026-08-28T01:32:05.461Z"},"bugs":{"url":"https://github.com/27Aaron/agent-toolkit/issues"},"author":"Aaron","license":"MIT","homepage":"https://github.com/27Aaron/agent-toolkit/tree/main/plugins/dsh-wakatime-ui#readme","keywords":["deepseek-harness","dsh","dsh-plugin","wakatime","dashboard","settings-page","ai-coding"],"repository":{"type":"git","url":"git+https://github.com/27Aaron/agent-toolkit.git","directory":"plugins/dsh-wakatime-ui"},"description":"Web dashboard and settings page for @27aaron/dsh-wakatime on DeepSeek Harness","maintainers":[{"name":"27aaron","email":"niceboy@duck.com"}],"readme":"# DSH WakaTime UI\n\n[中文](README.zh.md)\n\nWeb dashboard and settings page for [DeepSeek Harness](https://github.com/deepseek-ai/deepseek-harness) on top of [`@27aaron/dsh-wakatime`](../dsh-wakatime). Install this bundle instead of the core package when you want tracking **and** the GUI; it installs the core transitively and re-exports its plugin, so host-side behavior is identical to [`@27aaron/dsh-wakatime`](../dsh-wakatime)'s. See that package for the full configuration reference.\n\nActivity sync is native-only: the core schedules sync from `session/event`, awaits Harness's session flush, then runs `--sync-ai-activity` and a separate `--sync-offline-activity`. Prompt-only sessions do not need a later tool call or another editor to trigger sync.\n\n## Highlights\n\n- Adds **Settings → Plugins → WakaTime** with a dashboard following the official WakaTime structure: activity overview, AI Coding, models, editors, languages, operating systems, machines, and AI-versus-human trends.\n- The Projects page contains project/category charts, today's activity breakdown, and project cards with AI details; AI and Insights provide prompt, token, model, weekday, and daily AI-share detail.\n- Insights defaults to the last year and uses WakaTime's read-only `stats`, `days`, `ai_days`, and `weekdays` endpoints for long-range heatmaps; it does not use team, billing, or other paid-only APIs.\n- Writes the API key to WakaTime's standard `.wakatime.cfg` with restrictive local permissions. UI-managed plugin options are stored under the WakaTime data directory shared with the core package.\n- The page only receives a boolean indicating whether an API key is configured; it never reads the existing key back into the browser.\n- Usage requests are made by the Host process and cached briefly to avoid repeated API calls. Summaries supply range-level data, and the selected end date is also queried through WakaTime's durations endpoint for a focused “today” breakdown; if that endpoint is unavailable, the page falls back to summary data.\n- Host-side background refresh starts only after the first dashboard interaction; nothing polls WakaTime before then.\n\n## Requirements\n\nSame as the core package: DeepSeek Harness `>= 0.1.1-rc.2 < 0.2`, Node.js `^22.19.0 || >=24.0.0`, a stable `wakatime-cli >= v2.25.0`, and a WakaTime API key configured as described there. Older, prerelease, or unknown CLI versions are not treated as supported, and there is no local parser fallback. Only meaningful in web profiles; headless profiles simply never load the browser half.\n\n## Install from npm\n\nInstall this bundle instead of the tracking-only core package:\n\n```sh\ndsh plugin --profile web add @27aaron/dsh-wakatime-ui\ndsh --profile web --dump-config\ndsh web\n```\n\nThe matching `@27aaron/dsh-wakatime` core is installed transitively. Do not also add the core bundle to the same profile.\n\n## Install from this repository\n\n```sh\npnpm install\npnpm build\ndsh plugin --profile web add ./plugins/dsh-wakatime-ui\ndsh --profile web --dump-config\ndsh web\n```\n\nFor a registry-backed tarball, publish the matching `@27aaron/dsh-wakatime` version first, then run `pnpm --filter @27aaron/dsh-wakatime-ui pack` and install the tarball with `dsh plugin --profile <name> add <file.tgz>`. The UI tarball keeps the core as a normal dependency rather than embedding it; use the local-directory command above while the core version is not available from your configured registry.\n\nPick one wakatime variant per profile. Installing both composes two rows; the first row activated owns tracking and the second stands down quietly, but the duplication is best avoided. Switching variants keeps settings because both share the same persisted configuration paths.\n\n## Configuration\n\nThe bundle inserts a row with id `wakatime-ui`. It re-exports the exact Schemastery schema of `@27aaron/dsh-wakatime`, so the full option table lives in [that README](../dsh-wakatime#configuration). Override this id in `$DSH_HOME/profiles/<name>/cordis.patch.yml`, `$DSH_HOME/cordis.patch.yml`, or a later `--patch` layer:\n\n```yaml\n- id: wakatime-ui\n  config:\n    heartbeatIntervalMs: 60000\n    heartbeatTimeoutMs: 30000\n    cliUpdateCheckIntervalMs: 14400000\n    cliDownloadTimeoutMs: 120000\n    autoInstall: false\n    client: dsh\n    debug: false\n```\n\nHarness replaces a row's whole `config` value when applying a later layer; omitted keys are filled from the schema rather than merged from the bundle patch.\n\n`heartbeatIntervalMs` is the global native-sync interval across sessions; `heartbeatTimeoutMs` applies to each CLI process separately. `client` qualifies the CLI's `--plugin` tag.\n\nStandard WakaTime network settings (`proxy`, `no_ssl_verify`, `debug`) keep coming from `.wakatime.cfg`.\n\n## Tracking limits\n\nThe CLI reads local `session.jsonl` / `session.jsonl.zstd` under `$DSH_HOME/sessions`; this bundle does not parse remote-only or in-memory sessions. File coverage follows upstream: v2.25.0 does not yet attribute Code Mode `tool/code-dispatch` subcalls to files or line changes, although session prompts and tokens can still sync. See the core's [limitations](../dsh-wakatime#limitations). CLI sync success is not a guarantee of immediate dashboard delivery.\n\n## Development\n\n```sh\npnpm typecheck\npnpm test\npnpm build\npnpm check\n```\n\nThe browser bundle imports its RPC contract from `@27aaron/dsh-wakatime/ui-contract`; the client build inlines that subpath (`deps.alwaysBundle`) because the browser module table cannot resolve cross-package requires at runtime.\n","readmeFilename":""}