codeep 3.2.0 → 3.2.1

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.
@@ -456,14 +456,17 @@ export async function executeAgentTask(task, dryRun, ctx) {
456
456
  // even if the user switched model mid-session. Only this run's delta
457
457
  // (since tokenReportStart) is reported; the cumulative store is preserved.
458
458
  const costBreakdown = getCostBreakdown(tokenReportStart);
459
+ // Consumed exactly once per run, before anything branches on it: the notice
460
+ // path is conditional (no credentials, or a run too short to notify), and
461
+ // reading it inside that branch left the stat blind on every run that did
462
+ // not send a notification.
463
+ const startedFromPhone = takeRunFromPhone();
459
464
  // Told once the run is over, and only when it ran long enough that you
460
465
  // could plausibly have stopped watching. Awaited so the process does not
461
466
  // exit from under the request, but never allowed to fail the run.
462
467
  if (noticeCredentials) {
463
468
  const elapsedMs = Date.now() - runStartedAt;
464
- // Consumed once per run either way, so a phone-started run cannot leave
465
- // the flag set for whatever the terminal does next.
466
- const fromPhone = takeRunFromPhone();
469
+ const fromPhone = startedFromPhone;
467
470
  // The one-minute threshold exists so a phone is not buzzed about work you
468
471
  // watched finish. It has no business gating a run the phone itself asked
469
472
  // for: that answer was wanted whether it took ten seconds or ten minutes,
@@ -486,6 +489,10 @@ export async function executeAgentTask(task, dryRun, ctx) {
486
489
  }
487
490
  }
488
491
  const sharedFields = {
492
+ // `fromPhone` is read above, where the notice consumes it. Captured here
493
+ // too because the stats event is the only place it can answer anything
494
+ // later — see docs/ios-decision.md.
495
+ fromPhone: startedFromPhone,
489
496
  sessionId,
490
497
  sessionName: displayName,
491
498
  messageCount: app.getMessages().length,
@@ -23,6 +23,15 @@ export interface StatsPayload {
23
23
  projectId?: string;
24
24
  language?: string;
25
25
  isGit?: boolean;
26
+ /**
27
+ * Whether this run was started from a phone rather than at the terminal.
28
+ *
29
+ * Recorded to answer whether a Codeep iOS app is worth building with
30
+ * behaviour instead of opinion: "would you like an iOS app?" costs nothing
31
+ * to say yes to, while actually driving a run from a phone — which the
32
+ * Telegram inbox has allowed since 3.1.0 — is a thing somebody did.
33
+ */
34
+ fromPhone?: boolean;
26
35
  inputTokens?: number;
27
36
  outputTokens?: number;
28
37
  /** Anthropic prompt caching: tokens written to cache (billed ~1.25× input).
package/dist/version.d.ts CHANGED
@@ -1 +1 @@
1
- export declare const VERSION = "3.2.0";
1
+ export declare const VERSION = "3.2.1";
package/dist/version.js CHANGED
@@ -1,4 +1,4 @@
1
1
  // AUTO-GENERATED by scripts/gen-version.js — do not edit by hand.
2
2
  // Baked from package.json at build time so the bun-compiled binary reports
3
3
  // the right version (it has no package.json on disk to read at runtime).
4
- export const VERSION = '3.2.0';
4
+ export const VERSION = '3.2.1';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codeep",
3
- "version": "3.2.0",
3
+ "version": "3.2.1",
4
4
  "description": "AI-powered coding assistant built for the terminal. Multiple LLM providers, project-aware context, and a seamless development workflow.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",