@cydm/happy-elves 0.1.0-beta.311 → 0.1.0-beta.312

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.
@@ -116,8 +116,15 @@ const booleanFlags = new Set([
116
116
  ]);
117
117
  const knownFlags = new Set([...valueFlags, ...booleanFlags]);
118
118
  const dashPrefixedValueFlags = new Set(["secret"]);
119
+ const repeatableValueFlags = new Set([
120
+ "tag",
121
+ "tags",
122
+ "release-tag",
123
+ "reviewer-tag",
124
+ "dogfood-tag",
125
+ ]);
119
126
  export function parseCliFlags(argv) {
120
- const parsed = parseSharedFlags(argv, { valueFlags, dashPrefixedValueFlags });
127
+ const parsed = parseSharedFlags(argv, { valueFlags, dashPrefixedValueFlags, repeatableValueFlags });
121
128
  const unknown = Object.keys(parsed.flags).filter((flag) => !knownFlags.has(flag));
122
129
  if (unknown.length > 0) {
123
130
  throw new CliError(`Unknown flag: --${unknown[0]}`, "UNKNOWN_FLAG");
@@ -14,7 +14,10 @@ export async function topLevelStatus(flags) {
14
14
  const relayError = snapshotResult.status === "rejected"
15
15
  ? snapshotResult.reason instanceof Error ? snapshotResult.reason.message : String(snapshotResult.reason)
16
16
  : undefined;
17
- const latestSession = snapshot ? [...snapshot.sessions].sort((left, right) => right.updatedAt - left.updatedAt)[0] : undefined;
17
+ const visibleSessions = snapshot
18
+ ? await visibleStatusSessions(client, snapshot.sessions)
19
+ : [];
20
+ const latestSession = [...visibleSessions].sort((left, right) => right.updatedAt - left.updatedAt)[0];
18
21
  const latestOutput = latestSession ? await readStoredTurnOutput(latestSession.id).catch(() => undefined) : undefined;
19
22
  const latestRelayOutput = latestSession && !latestOutput
20
23
  ? lastAssistantOutput(await client.history(latestSession.id, 200).catch(() => []))
@@ -31,8 +34,8 @@ export async function topLevelStatus(flags) {
31
34
  onlineCount: snapshot?.machines.filter((machine) => machine.online).length ?? 0,
32
35
  },
33
36
  sessions: {
34
- count: snapshot?.sessions.length ?? 0,
35
- runningCount: snapshot?.sessions.filter((session) => session.status === "running").length ?? 0,
37
+ count: visibleSessions.length,
38
+ runningCount: visibleSessions.filter((session) => session.status === "running").length,
36
39
  },
37
40
  latestSession: latestSession ? {
38
41
  sessionId: latestSession.id,
@@ -64,4 +67,13 @@ export async function topLevelStatus(flags) {
64
67
  if (!data.relay.ok)
65
68
  process.exitCode = 1;
66
69
  }
70
+ async function visibleStatusSessions(client, sessions) {
71
+ const projected = await Promise.all(sessions.map(async (session) => ({
72
+ session,
73
+ metadata: await client.decodeSessionMetadata(session).catch(() => ({})),
74
+ })));
75
+ return projected
76
+ .filter(({ session, metadata }) => session.status !== "closed" && metadata.hiddenFromWorkspace !== true && metadata.source !== "dogfood")
77
+ .map(({ session }) => session);
78
+ }
67
79
  //# sourceMappingURL=status.js.map
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cydm/happy-elves-cli",
3
- "version": "0.1.0-beta.311",
3
+ "version": "0.1.0-beta.312",
4
4
  "private": true,
5
5
  "type": "module"
6
6
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cydm/happy-elves-daemon",
3
- "version": "0.1.0-beta.311",
3
+ "version": "0.1.0-beta.312",
4
4
  "private": true,
5
5
  "type": "module"
6
6
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cydm/happy-elves",
3
- "version": "0.1.0-beta.311",
3
+ "version": "0.1.0-beta.312",
4
4
  "description": "Remote controller for local coding agents with hosted or self-hosted relay support.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -5,6 +5,7 @@ export type ParsedArgs = {
5
5
  export type ParseFlagsOptions = {
6
6
  valueFlags?: Iterable<string>;
7
7
  dashPrefixedValueFlags?: Iterable<string>;
8
+ repeatableValueFlags?: Iterable<string>;
8
9
  };
9
10
  export declare function parseFlags(argv: string[], options?: ParseFlagsOptions): ParsedArgs;
10
11
  //# sourceMappingURL=args.d.ts.map
@@ -1,6 +1,7 @@
1
1
  export function parseFlags(argv, options = {}) {
2
2
  const valueFlags = new Set(options.valueFlags ?? []);
3
3
  const dashPrefixedValueFlags = new Set(options.dashPrefixedValueFlags ?? []);
4
+ const repeatableValueFlags = new Set(options.repeatableValueFlags ?? []);
4
5
  const positional = [];
5
6
  const flags = {};
6
7
  for (let i = 0; i < argv.length; i++) {
@@ -19,17 +20,22 @@ export function parseFlags(argv, options = {}) {
19
20
  flags[key] = true;
20
21
  }
21
22
  else if (valueFlags.has(key) && (!next.startsWith("--") || dashPrefixedValueFlags.has(key))) {
22
- flags[key] = next;
23
+ flags[key] = appendFlagValue(flags[key], next, repeatableValueFlags.has(key));
23
24
  i++;
24
25
  }
25
26
  else if (next.startsWith("--")) {
26
27
  flags[key] = true;
27
28
  }
28
29
  else {
29
- flags[key] = next;
30
+ flags[key] = appendFlagValue(flags[key], next, repeatableValueFlags.has(key));
30
31
  i++;
31
32
  }
32
33
  }
33
34
  return { positional, flags };
34
35
  }
36
+ function appendFlagValue(previous, next, repeatable) {
37
+ if (!repeatable || previous === undefined || previous === true || previous === false)
38
+ return next;
39
+ return `${previous},${next}`;
40
+ }
35
41
  //# sourceMappingURL=args.js.map