@vincenthanxiaodu/pi-web 1.202608.74 → 1.202608.76

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.
@@ -144,7 +144,7 @@
144
144
  that is not there. Scale belongs to the app's own control. */
145
145
  html { touch-action: pan-x pan-y; }
146
146
  </style>
147
- <script type="module" crossorigin src="./assets/index-CeU8-JId.js"></script>
147
+ <script type="module" crossorigin src="./assets/index-lagKqPPU.js"></script>
148
148
  </head>
149
149
  <body>
150
150
  <pi-web-app></pi-web-app>
@@ -1,5 +1,5 @@
1
1
  import { readFile, readdir } from "node:fs/promises";
2
- import { join } from "node:path";
2
+ import { isAbsolute, join, relative } from "node:path";
3
3
  import { parseGoalFile, sortGoalSummaries } from "./goalFile.js";
4
4
  /**
5
5
  * Directory, relative to a workspace, where `pi-goal-x` keeps its records.
@@ -37,7 +37,15 @@ export async function readWorkspaceGoals(workspacePath, options = {}, now = () =
37
37
  generatedAt: now().toISOString(),
38
38
  });
39
39
  const sessionCwd = options.sessionCwd;
40
- const sessionRoot = sessionCwd !== undefined && sessionCwd !== "" && sessionCwd !== workspacePath ? sessionCwd : undefined;
40
+ const candidate = sessionCwd !== undefined && sessionCwd !== "" && sessionCwd !== workspacePath ? sessionCwd : undefined;
41
+ // A session cwd contributes goals only when it answers for this workspace:
42
+ // a cwd inside the root (a session working in a subdirectory). The selected
43
+ // session is global state that can lag the workspace selection, so an
44
+ // outside cwd here means another project's session — unioning its goal
45
+ // directory presented another project's goal on this panel with live
46
+ // controls.
47
+ const contained = candidate !== undefined && isInsideRoot(workspacePath, candidate);
48
+ const sessionRoot = contained ? candidate : undefined;
41
49
  const workspaceGoals = await readGoalsFromRoot(workspacePath);
42
50
  if (sessionRoot === undefined)
43
51
  return response(workspaceGoals);
@@ -94,4 +102,9 @@ async function readGoalsFromRoot(root) {
94
102
  }
95
103
  return [...byId.values()];
96
104
  }
105
+ /** True when candidate is workspacePath itself or a path beneath it. */
106
+ function isInsideRoot(workspacePath, candidate) {
107
+ const rel = relative(workspacePath, candidate);
108
+ return rel !== "" && !rel.startsWith("..") && !isAbsolute(rel);
109
+ }
97
110
  //# sourceMappingURL=goalStore.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"goalStore.js","sourceRoot":"","sources":["../../../src/server/goals/goalStore.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"goalStore.js","sourceRoot":"","sources":["../../../src/server/goals/goalStore.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
1
  import { statSync } from "node:fs";
2
+ import { sessionActivityLabel } from "./sessionActivityLabel.js";
2
3
  import { announceUnsupportedSurface, withUnsupportedSurfaceAnnouncement } from "./unsupportedSurface.js";
3
4
  import { EMPTY_HOST_CONTRIBUTIONS } from "./hostContributions.js";
4
5
  import { takeUnfiledWarnings } from "./warningFiling.js";
@@ -3490,19 +3491,14 @@ export class PiSessionService {
3490
3491
  }
3491
3492
  }
3492
3493
  activityLabelFromStatus(session) {
3493
- if (this.treeNavigations.has(session))
3494
- return "navigating session tree";
3495
- if (this.isSessionEntryMutationActive(session))
3496
- return "updating session";
3497
- if (session.isCompacting)
3498
- return "compacting";
3499
- if (session.isBashRunning)
3500
- return "running bash";
3501
- if (session.isStreaming)
3502
- return "agent running";
3503
- if (this.pendingMessageCount(session) > 0)
3504
- return "queued";
3505
- return "active";
3494
+ return sessionActivityLabel({
3495
+ treeNavigationActive: this.treeNavigations.has(session),
3496
+ entryMutationActive: this.isSessionEntryMutationActive(session),
3497
+ isCompacting: session.isCompacting,
3498
+ isBashRunning: session.isBashRunning,
3499
+ isStreaming: session.isStreaming,
3500
+ pendingMessageCount: this.pendingMessageCount(session),
3501
+ });
3506
3502
  }
3507
3503
  hasActiveWork(session) {
3508
3504
  return this.treeNavigations.has(session)