standout 0.5.15 → 0.5.17

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/dist/cli.js CHANGED
@@ -9,7 +9,7 @@ import { SYSTEM_PROMPT } from "./prompt.js";
9
9
  import { TOOLS, executeTool } from "./tools.js";
10
10
  import { renderWrappedAll } from "./wrapped/render.js";
11
11
  import { createWrapped } from "./wrapped-client.js";
12
- import { openShareToX } from "./wrapped-share.js";
12
+ import { openWrapped } from "./wrapped-share.js";
13
13
  const MAX_TURNS = 40;
14
14
  // The post-wrapped agent chat (interactive profile-building Q&A) is OFF by
15
15
  // default so the command runs to completion non-interactively (e.g. invoked
@@ -105,21 +105,21 @@ async function maybeShareWrapped(wrapped) {
105
105
  process.stderr.write(` your wrapped: ${wrapped.share_url}\n\n`);
106
106
  return;
107
107
  }
108
- const ans = await askLine(chalk.white(" share to X? [Y/n] "));
108
+ const ans = await askLine(chalk.white(" share your ai wrapped? [Y/n] "));
109
109
  process.stderr.write("\n");
110
110
  const shared = !ans || ans.toLowerCase() !== "n";
111
111
  if (!shared) {
112
112
  process.stderr.write(` your wrapped: ${wrapped.share_url}\n\n`);
113
113
  return;
114
114
  }
115
- process.stderr.write(" opening x.com to share...\n");
115
+ process.stderr.write(" opening your wrapped...\n");
116
116
  try {
117
- await openShareToX(wrapped.view);
117
+ await openWrapped(wrapped.share_url);
118
118
  await markWrappedShared(wrapped.id);
119
- process.stderr.write(" browser opened with prefilled tweet.\n\n");
119
+ process.stderr.write(` opened: ${wrapped.share_url}\n\n`);
120
120
  }
121
121
  catch (err) {
122
- process.stderr.write(` couldn't open browser — share manually: ${wrapped.share_url}\n`);
122
+ process.stderr.write(` couldn't open browser — open it manually: ${wrapped.share_url}\n`);
123
123
  process.stderr.write(` (${err instanceof Error ? err.message : err})\n\n`);
124
124
  }
125
125
  }
@@ -200,9 +200,6 @@ async function runAgent(jobId) {
200
200
  process.stderr.write(" (couldn't generate wrapped right now — continuing profile setup.)\n\n");
201
201
  }
202
202
  if (!profileChatEnabled()) {
203
- if (wrappedId) {
204
- process.stderr.write(" Profile chat disabled — run with --chat (or STANDOUT_PROFILE_CHAT=1) to build a full profile.\n\n");
205
- }
206
203
  return;
207
204
  }
208
205
  const jobInstruction = jobId
@@ -843,8 +843,6 @@ export function cardProficiency(view) {
843
843
  ` ${archetype}`,
844
844
  "",
845
845
  ` ${chalk.italic.white(`"${view.zinger}"`)}`,
846
- "",
847
- chalk.dim(" " + view.share_url),
848
846
  ].join("\n"), { borderColor: "yellow" });
849
847
  }
850
848
  const scoreTop = topPercentNumber(p.score_percentile ?? null);
@@ -890,8 +888,6 @@ export function cardProficiency(view) {
890
888
  "",
891
889
  ...bars,
892
890
  ...commentLines,
893
- "",
894
- centerText(view.share_url, chalk.dim),
895
891
  ].filter((l) => l !== null);
896
892
  return box(lines.join("\n"), { borderColor: "yellow" });
897
893
  }
@@ -989,7 +985,7 @@ async function renderWrappedCards(view, mode) {
989
985
  }
990
986
  // Share prompt
991
987
  process.stdout.write("\n");
992
- const ans = await askLine(chalk.white(" share to X? [Y/n] "));
988
+ const ans = await askLine(chalk.white(" share your ai wrapped? [Y/n] "));
993
989
  process.stdout.write("\n");
994
990
  const shared = !ans || ans.toLowerCase() !== "n";
995
991
  return { shared, cancelled: false };
@@ -42,7 +42,7 @@ const CURIOUS_CAT = ` |\\__/,| (\`\\
42
42
  const GINGERBREAD = ` ,--.
43
43
  _(*_*)_
44
44
  (_ o _)
45
- / o \\
45
+ / o \\
46
46
  (_/ \\_)`;
47
47
  // Ordered low → high; tierForScore walks from the top down.
48
48
  export const TIERS = [
@@ -1,3 +1 @@
1
- import type { WrappedAggregateView } from "./wrapped/types.js";
2
- export declare function buildTweetText(view: WrappedAggregateView): string;
3
- export declare function openShareToX(view: WrappedAggregateView): Promise<void>;
1
+ export declare function openWrapped(shareUrl: string): Promise<void>;
@@ -1,27 +1,6 @@
1
1
  import open from "open";
2
- const TWEET_INTENT = "https://x.com/intent/post";
3
- const PAW = "🐾";
4
- export function buildTweetText(view) {
5
- const peakLine = view.peak_hour !== null
6
- ? `peak ${view.peak_hour.toString().padStart(2, "0")}:00`
7
- : null;
8
- const aiLine = view.ai_assisted_pct > 0
9
- ? `${Math.round(view.ai_assisted_pct * 100)}% AI-assisted`
10
- : null;
11
- const stack = view.frameworks.length > 0 ? view.frameworks.slice(0, 3).join(" · ") : null;
12
- const stats = [peakLine, aiLine, stack].filter(Boolean).join(" · ");
13
- const lines = [
14
- `just got my @standoutwork wrapped ${PAW}`,
15
- stats ||
16
- `${Math.round(view.total_hours)} hours in claude code last 30 days`,
17
- view.zinger ? `apparently i'm the kind who ${view.zinger}` : null,
18
- ].filter(Boolean);
19
- return lines.join("\n");
20
- }
21
- export async function openShareToX(view) {
22
- const text = buildTweetText(view);
23
- const intent = new URL(TWEET_INTENT);
24
- intent.searchParams.set("text", text);
25
- intent.searchParams.set("url", view.share_url);
26
- await open(intent.toString());
2
+ // Open the shareable wrapped page in the browser. The page itself carries the
3
+ // share affordances; we just take the user there.
4
+ export async function openWrapped(shareUrl) {
5
+ await open(shareUrl);
27
6
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "standout",
3
- "version": "0.5.15",
3
+ "version": "0.5.17",
4
4
  "description": "Build your developer profile with AI. One command, zero friction.",
5
5
  "type": "module",
6
6
  "main": "./dist/cli.js",