rinco-pi-hud 1.0.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.
Files changed (45) hide show
  1. package/LICENSE +21 -0
  2. package/NOTICE +18 -0
  3. package/README.md +204 -0
  4. package/docs/CONTRIBUTING.md +110 -0
  5. package/docs/README.zh-CN.md +204 -0
  6. package/docs/footer.md +139 -0
  7. package/extensions/hud/commands/settings.ts +765 -0
  8. package/extensions/hud/config/config-counts.ts +87 -0
  9. package/extensions/hud/config/config.ts +65 -0
  10. package/extensions/hud/config/file-io.ts +128 -0
  11. package/extensions/hud/config/normalize.ts +374 -0
  12. package/extensions/hud/config/persist.ts +277 -0
  13. package/extensions/hud/config/schema.ts +303 -0
  14. package/extensions/hud/footer/format.ts +279 -0
  15. package/extensions/hud/footer/index.ts +543 -0
  16. package/extensions/hud/footer/layout.ts +183 -0
  17. package/extensions/hud/footer/render-labels.ts +305 -0
  18. package/extensions/hud/index.ts +466 -0
  19. package/extensions/hud/segments/extension-status.ts +88 -0
  20. package/extensions/hud/segments/git.ts +384 -0
  21. package/extensions/hud/segments/mcp-status.ts +25 -0
  22. package/extensions/hud/segments/package-version.ts +651 -0
  23. package/extensions/hud/segments/project-state.ts +67 -0
  24. package/extensions/hud/segments/runtime-definitions.ts +695 -0
  25. package/extensions/hud/segments/runtime.ts +167 -0
  26. package/extensions/hud/segments/skill-activity.ts +152 -0
  27. package/extensions/hud/session/context.ts +19 -0
  28. package/extensions/hud/session/lifecycle.ts +60 -0
  29. package/extensions/hud/session/live-context.ts +75 -0
  30. package/extensions/hud/state/index.ts +67 -0
  31. package/extensions/hud/state/project-refresh.ts +104 -0
  32. package/extensions/hud/state/telemetry.ts +261 -0
  33. package/extensions/hud/telemetry/codex-usage/LICENSE +21 -0
  34. package/extensions/hud/telemetry/codex-usage/app-server-client.ts +231 -0
  35. package/extensions/hud/telemetry/codex-usage/format.ts +278 -0
  36. package/extensions/hud/telemetry/codex-usage/index.ts +462 -0
  37. package/extensions/hud/telemetry/codex-usage/normalize.ts +264 -0
  38. package/extensions/hud/telemetry/codex-usage/query.ts +207 -0
  39. package/extensions/hud/telemetry/codex-usage/safety.ts +27 -0
  40. package/extensions/hud/telemetry/codex-usage/types.ts +137 -0
  41. package/extensions/hud/telemetry/format.ts +434 -0
  42. package/extensions/hud/telemetry/token-switch.ts +114 -0
  43. package/extensions/hud/ui/icons.ts +239 -0
  44. package/extensions/hud/ui/style.ts +276 -0
  45. package/package.json +56 -0
@@ -0,0 +1,67 @@
1
+ import type { GitReadResult } from "./git.js";
2
+ import { emptyGitStatus } from "./git.js";
3
+ import type { PackageVersionReadResult } from "./package-version.js";
4
+ import type { RuntimeReadResult } from "./runtime.js";
5
+ import type { FooterState } from "../state/index.js";
6
+
7
+ /**
8
+ * Apply a project refresh (git + runtime) onto footer state, preserving
9
+ * last-good values on transient errors and clearing on cwd change / not-a-repo.
10
+ *
11
+ * Deliberately mutates `state` in place rather than returning a new object:
12
+ * this runs on every project-refresh tick of a long-lived render loop, and
13
+ * `FooterState` is a single shared, non-reactive mutable record read
14
+ * directly by the footer's `render()` — allocating a fresh object per tick
15
+ * would add churn with no observable benefit. This is the one place in the
16
+ * codebase that intentionally diverges from the immutable-update convention
17
+ * used elsewhere (e.g. `state/telemetry.ts`).
18
+ *
19
+ * Returns the cwd to store as `previousCwd` for the next refresh.
20
+ */
21
+ export function applyProjectRefreshToState(
22
+ state: FooterState,
23
+ args: {
24
+ cwd: string;
25
+ previousCwd: string | undefined;
26
+ git: GitReadResult;
27
+ runtime: RuntimeReadResult;
28
+ packageVersion?: PackageVersionReadResult;
29
+ },
30
+ ): string {
31
+ const cwdChanged = args.previousCwd !== undefined && args.previousCwd !== args.cwd;
32
+
33
+ if (cwdChanged) {
34
+ Object.assign(state, emptyGitStatus());
35
+ state.runtime = undefined;
36
+ state.packageVersion = undefined;
37
+ }
38
+
39
+ if (args.git.kind === "ok") {
40
+ Object.assign(state, args.git.status);
41
+ } else if (args.git.kind === "not_a_repo") {
42
+ Object.assign(state, emptyGitStatus());
43
+ }
44
+ // kind === "error": keep previous git fields (unless cwdChanged already cleared)
45
+
46
+ if (args.runtime.kind === "ok") {
47
+ state.runtime = args.runtime.runtime;
48
+ } else if (cwdChanged && args.runtime.kind === "error") {
49
+ // Already cleared above; keep undefined.
50
+ state.runtime = undefined;
51
+ }
52
+ // error + same cwd: keep previous runtime
53
+
54
+ if (args.packageVersion !== undefined) {
55
+ if (args.packageVersion.kind === "ok") {
56
+ // `null` means "no manifest in this cwd"; clear so the segment disappears
57
+ // even on the same cwd when the user removes their manifest.
58
+ state.packageVersion = args.packageVersion.result ?? undefined;
59
+ } else if (!cwdChanged) {
60
+ // error + same cwd: keep previous packageVersion (last-good semantics)
61
+ } else {
62
+ state.packageVersion = undefined;
63
+ }
64
+ }
65
+
66
+ return args.cwd;
67
+ }