standout 0.5.16 → 0.5.18

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
  }
@@ -7,10 +7,10 @@ const TOOL_LABELS = {
7
7
  const RETAIL_RATES = [
8
8
  {
9
9
  match: /claude.*opus/i,
10
- input: 15,
11
- output: 75,
12
- cacheRead: 1.5,
13
- cacheWrite: 18.75,
10
+ input: 7.5,
11
+ output: 37.5,
12
+ cacheRead: 0.75,
13
+ cacheWrite: 9.375,
14
14
  },
15
15
  {
16
16
  match: /claude.*sonnet/i,
@@ -28,10 +28,10 @@ const RETAIL_RATES = [
28
28
  },
29
29
  {
30
30
  match: /gpt-?5(-mini|-nano)?/i,
31
- input: 1.25,
32
- output: 10,
33
- cacheRead: 0.125,
34
- cacheWrite: 1.25,
31
+ input: 7.5,
32
+ output: 37.5,
33
+ cacheRead: 0.75,
34
+ cacheWrite: 9.375,
35
35
  },
36
36
  {
37
37
  match: /gpt-?4/i,
@@ -985,7 +985,7 @@ async function renderWrappedCards(view, mode) {
985
985
  }
986
986
  // Share prompt
987
987
  process.stdout.write("\n");
988
- const ans = await askLine(chalk.white(" share to X? [Y/n] "));
988
+ const ans = await askLine(chalk.white(" share your ai wrapped? [Y/n] "));
989
989
  process.stdout.write("\n");
990
990
  const shared = !ans || ans.toLowerCase() !== "n";
991
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.16",
3
+ "version": "0.5.18",
4
4
  "description": "Build your developer profile with AI. One command, zero friction.",
5
5
  "type": "module",
6
6
  "main": "./dist/cli.js",