@primitive.ai/prim 0.1.0-alpha.91 → 0.1.0-alpha.93

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.
Files changed (40) hide show
  1. package/README.md +34 -2
  2. package/dist/{chunk-67VNLLBN.js → chunk-2GP5UFV7.js} +1 -0
  3. package/dist/{chunk-VW3FDYRT.js → chunk-36TWVNBE.js} +6 -6
  4. package/dist/{chunk-HU4PW6I6.js → chunk-C3VAA5CG.js} +1 -1
  5. package/dist/{chunk-FOLKHXLJ.js → chunk-DCJN6LZH.js} +37 -5
  6. package/dist/{chunk-M6RIJVRE.js → chunk-DSWT6BCC.js} +78 -4
  7. package/dist/{chunk-FBAYCS3X.js → chunk-DXJQR4QI.js} +150 -38
  8. package/dist/{chunk-PCVGBE5B.js → chunk-G2VMA2QO.js} +2 -1
  9. package/dist/{chunk-NAHHFSLH.js → chunk-ICM2XCXS.js} +2 -2
  10. package/dist/{chunk-OAAP2MY6.js → chunk-K7D2EYBS.js} +2 -2
  11. package/dist/{chunk-5AFRMOPX.js → chunk-OH3EZXYX.js} +1 -1
  12. package/dist/{chunk-KFXF2V5G.js → chunk-OTHKG76J.js} +1 -1
  13. package/dist/chunk-OYHYCK4K.js +13 -0
  14. package/dist/{chunk-FKXFUUWJ.js → chunk-TYAHC25F.js} +1 -1
  15. package/dist/{chunk-5GYQ4J3D.js → chunk-UKUAAAXE.js} +2 -2
  16. package/dist/{chunk-EWZMDD44.js → chunk-X64HTHUF.js} +22 -3
  17. package/dist/{chunk-WX52U7Z2.js → chunk-ZU563PQI.js} +58 -2
  18. package/dist/daemon/server.js +382 -124
  19. package/dist/hook-runtime/daemon/server.js +382 -124
  20. package/dist/hook-runtime/hooks/post-commit.js +57 -39
  21. package/dist/hook-runtime/hooks/post-rewrite.js +58 -40
  22. package/dist/hook-runtime/hooks/post-tool-use.js +111 -78
  23. package/dist/hook-runtime/hooks/pre-tool-use.js +48 -26
  24. package/dist/hook-runtime/hooks/prim-hook.js +157 -117
  25. package/dist/hook-runtime/hooks/session-end.js +1 -1
  26. package/dist/hook-runtime/hooks/session-start.js +38 -4
  27. package/dist/hook-runtime/index.js +1293 -526
  28. package/dist/hook-runtime/statusline-main.js +23 -1
  29. package/dist/hooks/post-commit.js +11 -8
  30. package/dist/hooks/post-rewrite.js +11 -8
  31. package/dist/hooks/post-tool-use.js +13 -15
  32. package/dist/hooks/pre-commit.js +4 -4
  33. package/dist/hooks/pre-tool-use.js +10 -12
  34. package/dist/hooks/prim-hook.js +17 -14
  35. package/dist/hooks/session-end.js +4 -4
  36. package/dist/hooks/session-start.js +12 -36
  37. package/dist/index.js +867 -291
  38. package/dist/statusline-main.js +23 -1
  39. package/package.json +1 -1
  40. package/dist/chunk-BTNNEH2W.js +0 -79
@@ -597,6 +597,27 @@ function decisionIngestionStatus(cwd) {
597
597
  return isRepoActiveForCapture(cwd) ? "enabled" : "disabled";
598
598
  }
599
599
 
600
+ // src/lib/delivery-backlog.ts
601
+ var MS_PER_SECOND = 1e3;
602
+ var MS_PER_MINUTE = 60 * MS_PER_SECOND;
603
+ var MS_PER_HOUR = 60 * MS_PER_MINUTE;
604
+ var MS_PER_DAY = 24 * MS_PER_HOUR;
605
+ function isNonNegativeInteger(value) {
606
+ return typeof value === "number" && Number.isInteger(value) && value >= 0;
607
+ }
608
+ function isPositiveInteger(value) {
609
+ return isNonNegativeInteger(value) && value > 0;
610
+ }
611
+ function deliveryBacklogState(ingestion) {
612
+ if (ingestion?.healthy !== false) return void 0;
613
+ const failures = ingestion.consecutiveFailures;
614
+ const failedWithoutProgress = failures !== 0 && !(isPositiveInteger(failures) && isPositiveInteger(ingestion.lastFailedDrainAcknowledgedCount));
615
+ if (failedWithoutProgress) return "failing";
616
+ const retained = ingestion.lastRetainedBucketCount;
617
+ if (!isNonNegativeInteger(retained)) return "failing";
618
+ return retained > 0 ? "retained" : "draining";
619
+ }
620
+
600
621
  // src/lib/presence.ts
601
622
  var DECISION_ORIGIN = "https://app.getprimitive.ai";
602
623
  function validDecisionUrl(value) {
@@ -671,7 +692,8 @@ function formatStatusline(version, snapshot, resolveIngestionStatus, options = {
671
692
  if (snapshot.ingestion?.healthy === false) {
672
693
  const pending = snapshot.ingestion.pendingCount;
673
694
  const qualifier = snapshot.ingestion.pendingSampled ? "at least " : "";
674
- return `primitive ${version} (daemon: degraded \xB7 delivery: stalled${typeof pending === "number" ? ` \xB7 ${qualifier}${String(pending)} pending` : ""}${repositorySuffix}${ingestionSuffix(ingestionStatus)})`;
695
+ const delivery = deliveryBacklogState(snapshot.ingestion) === "draining" && snapshot.heartbeat?.healthy === true ? "draining" : "stalled";
696
+ return `primitive ${version} (daemon: degraded \xB7 delivery: ${delivery}${typeof pending === "number" ? ` \xB7 ${qualifier}${String(pending)} pending` : ""}${repositorySuffix}${ingestionSuffix(ingestionStatus)})`;
675
697
  }
676
698
  if (snapshot.heartbeat?.healthy === false) {
677
699
  return `primitive ${version} (daemon: degraded \xB7 presence: unavailable${repositorySuffix}${ingestionSuffix(ingestionStatus)})`;
@@ -1,28 +1,30 @@
1
1
  #!/usr/bin/env node
2
+ import {
3
+ unattendedEnv
4
+ } from "../chunk-OYHYCK4K.js";
2
5
  import {
3
6
  commitAttributionFromEnvironment,
4
7
  toCommitMove
5
- } from "../chunk-NAHHFSLH.js";
8
+ } from "../chunk-ICM2XCXS.js";
6
9
  import {
7
10
  getOrCreateWorkspaceId
8
11
  } from "../chunk-EZXEWFDG.js";
9
12
  import {
10
13
  appendMove,
11
14
  resolveOrg
12
- } from "../chunk-FBAYCS3X.js";
13
- import "../chunk-OAAP2MY6.js";
14
- import "../chunk-BTNNEH2W.js";
15
+ } from "../chunk-DXJQR4QI.js";
16
+ import "../chunk-K7D2EYBS.js";
15
17
  import {
16
18
  cachedCollectScopeAdmits,
17
19
  isRepoActiveForCapture,
18
20
  repoSyncId
19
- } from "../chunk-M6RIJVRE.js";
20
- import "../chunk-PCVGBE5B.js";
21
+ } from "../chunk-DSWT6BCC.js";
22
+ import "../chunk-G2VMA2QO.js";
21
23
  import {
22
24
  githubRepositoryFullName,
23
25
  resolveRepositoryContext
24
26
  } from "../chunk-H4UNYFUC.js";
25
- import "../chunk-67VNLLBN.js";
27
+ import "../chunk-2GP5UFV7.js";
26
28
 
27
29
  // src/hooks/post-commit.ts
28
30
  import { execFileSync, spawn } from "child_process";
@@ -133,7 +135,8 @@ function spawnBackgroundFlush() {
133
135
  const entry = join(here, "..", "index.js");
134
136
  spawn(process.execPath, [entry, "moves", "flush"], {
135
137
  detached: true,
136
- stdio: "ignore"
138
+ stdio: "ignore",
139
+ env: unattendedEnv()
137
140
  }).unref();
138
141
  }
139
142
  function runPostCommit() {
@@ -1,28 +1,30 @@
1
1
  #!/usr/bin/env node
2
+ import {
3
+ unattendedEnv
4
+ } from "../chunk-OYHYCK4K.js";
2
5
  import {
3
6
  canonicalRewritePairs,
4
7
  toRewriteMove
5
- } from "../chunk-NAHHFSLH.js";
8
+ } from "../chunk-ICM2XCXS.js";
6
9
  import {
7
10
  getOrCreateWorkspaceId
8
11
  } from "../chunk-EZXEWFDG.js";
9
12
  import {
10
13
  appendMove,
11
14
  resolveOrg
12
- } from "../chunk-FBAYCS3X.js";
13
- import "../chunk-OAAP2MY6.js";
14
- import "../chunk-BTNNEH2W.js";
15
+ } from "../chunk-DXJQR4QI.js";
16
+ import "../chunk-K7D2EYBS.js";
15
17
  import {
16
18
  cachedCollectScopeAdmits,
17
19
  isRepoActiveForCapture,
18
20
  repoSyncId
19
- } from "../chunk-M6RIJVRE.js";
20
- import "../chunk-PCVGBE5B.js";
21
+ } from "../chunk-DSWT6BCC.js";
22
+ import "../chunk-G2VMA2QO.js";
21
23
  import {
22
24
  githubRepositoryFullName,
23
25
  resolveRepositoryContext
24
26
  } from "../chunk-H4UNYFUC.js";
25
- import "../chunk-67VNLLBN.js";
27
+ import "../chunk-2GP5UFV7.js";
26
28
 
27
29
  // src/hooks/post-rewrite.ts
28
30
  import { execFileSync, spawn } from "child_process";
@@ -143,7 +145,8 @@ function spawnBackgroundFlush() {
143
145
  const entry = join(here, "..", "index.js");
144
146
  spawn(process.execPath, [entry, "moves", "flush"], {
145
147
  detached: true,
146
- stdio: "ignore"
148
+ stdio: "ignore",
149
+ env: unattendedEnv()
147
150
  }).unref();
148
151
  }
149
152
  function runPostRewrite() {
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  requireDurableIngestAcknowledgement
4
- } from "../chunk-FKXFUUWJ.js";
4
+ } from "../chunk-TYAHC25F.js";
5
5
  import {
6
6
  enrichHookPayloadWithFileRefs,
7
7
  preserveHookFileMetadata
@@ -10,49 +10,47 @@ import {
10
10
  postToolInvocationId,
11
11
  toMove,
12
12
  toolOutcomeFor
13
- } from "../chunk-NAHHFSLH.js";
13
+ } from "../chunk-ICM2XCXS.js";
14
14
  import {
15
15
  getOrCreateWorkspaceId
16
16
  } from "../chunk-EZXEWFDG.js";
17
17
  import {
18
18
  appendMove,
19
19
  resolveOrg
20
- } from "../chunk-FBAYCS3X.js";
20
+ } from "../chunk-DXJQR4QI.js";
21
21
  import "../chunk-ZB4F75SZ.js";
22
22
  import {
23
23
  appendCodexContext,
24
24
  prepareCodexContext
25
- } from "../chunk-VW3FDYRT.js";
26
- import "../chunk-WX52U7Z2.js";
25
+ } from "../chunk-36TWVNBE.js";
26
+ import "../chunk-ZU563PQI.js";
27
27
  import {
28
28
  scrubFromCwd
29
- } from "../chunk-OAAP2MY6.js";
29
+ } from "../chunk-K7D2EYBS.js";
30
30
  import {
31
31
  bold,
32
- color
33
- } from "../chunk-BTNNEH2W.js";
34
- import {
35
32
  cachedCollectScopeAdmits,
33
+ color,
36
34
  isRepoActiveForCapture,
37
35
  repoSyncId
38
- } from "../chunk-M6RIJVRE.js";
36
+ } from "../chunk-DSWT6BCC.js";
39
37
  import {
40
38
  getClient,
41
39
  terminalSafeLine
42
- } from "../chunk-PCVGBE5B.js";
40
+ } from "../chunk-G2VMA2QO.js";
43
41
  import {
44
42
  normalizeEnvelope,
45
43
  parseAgent,
46
44
  readHookStdin,
47
45
  shouldSuppressImportedCursorHandler
48
- } from "../chunk-HU4PW6I6.js";
49
- import "../chunk-EWZMDD44.js";
46
+ } from "../chunk-C3VAA5CG.js";
47
+ import "../chunk-X64HTHUF.js";
50
48
  import {
51
49
  currentBranch,
52
50
  resolveRepositoryContext
53
51
  } from "../chunk-H4UNYFUC.js";
54
- import "../chunk-KFXF2V5G.js";
55
- import "../chunk-67VNLLBN.js";
52
+ import "../chunk-OTHKG76J.js";
53
+ import "../chunk-2GP5UFV7.js";
56
54
 
57
55
  // src/hooks/post-tool-use.ts
58
56
  import { readFileSync } from "fs";
@@ -2,10 +2,10 @@
2
2
  import {
3
3
  checkAffectedDecisions,
4
4
  formatDecisionsWarning
5
- } from "../chunk-5GYQ4J3D.js";
6
- import "../chunk-PCVGBE5B.js";
7
- import "../chunk-KFXF2V5G.js";
8
- import "../chunk-67VNLLBN.js";
5
+ } from "../chunk-UKUAAAXE.js";
6
+ import "../chunk-G2VMA2QO.js";
7
+ import "../chunk-OTHKG76J.js";
8
+ import "../chunk-2GP5UFV7.js";
9
9
 
10
10
  // src/hooks/pre-commit.ts
11
11
  import { execSync } from "child_process";
@@ -17,40 +17,38 @@ import {
17
17
  appendCodexContext,
18
18
  hasVisibleCodexMessage,
19
19
  prepareCodexContext
20
- } from "../chunk-VW3FDYRT.js";
21
- import "../chunk-WX52U7Z2.js";
20
+ } from "../chunk-36TWVNBE.js";
21
+ import "../chunk-ZU563PQI.js";
22
22
  import {
23
23
  DEFAULT_RULES,
24
24
  scrub
25
- } from "../chunk-OAAP2MY6.js";
26
- import {
27
- boundedHealthError
28
- } from "../chunk-BTNNEH2W.js";
25
+ } from "../chunk-K7D2EYBS.js";
29
26
  import {
27
+ boundedHealthError,
30
28
  cachedCollectScopeAdmits,
31
29
  isRepoActive,
32
30
  repoSyncId
33
- } from "../chunk-M6RIJVRE.js";
31
+ } from "../chunk-DSWT6BCC.js";
34
32
  import {
35
33
  getClient
36
- } from "../chunk-PCVGBE5B.js";
34
+ } from "../chunk-G2VMA2QO.js";
37
35
  import {
38
36
  normalizeEnvelope,
39
37
  parseAgent,
40
38
  readHookStdin,
41
39
  shouldSuppressImportedCursorHandler
42
- } from "../chunk-HU4PW6I6.js";
40
+ } from "../chunk-C3VAA5CG.js";
43
41
  import {
44
42
  packageVersion
45
- } from "../chunk-EWZMDD44.js";
43
+ } from "../chunk-X64HTHUF.js";
46
44
  import {
47
45
  canonicalGitRoot,
48
46
  canonicalRepositoryPath,
49
47
  currentBranch,
50
48
  githubRepositoryFullName
51
49
  } from "../chunk-H4UNYFUC.js";
52
- import "../chunk-KFXF2V5G.js";
53
- import "../chunk-67VNLLBN.js";
50
+ import "../chunk-OTHKG76J.js";
51
+ import "../chunk-2GP5UFV7.js";
54
52
 
55
53
  // src/hooks/preflight-v3.ts
56
54
  import { Buffer } from "buffer";
@@ -8,7 +8,10 @@ import {
8
8
  acknowledgeDecisionFeedback,
9
9
  leaseDecisionFeedback,
10
10
  renderFeedback
11
- } from "../chunk-5AFRMOPX.js";
11
+ } from "../chunk-OH3EZXYX.js";
12
+ import {
13
+ unattendedEnv
14
+ } from "../chunk-OYHYCK4K.js";
12
15
  import {
13
16
  enrichHookPayloadWithFileRefs,
14
17
  preserveHookFileMetadata
@@ -17,43 +20,42 @@ import {
17
20
  postToolInvocationId,
18
21
  shouldFlushAfter,
19
22
  toMove
20
- } from "../chunk-NAHHFSLH.js";
23
+ } from "../chunk-ICM2XCXS.js";
21
24
  import {
22
25
  getOrCreateWorkspaceId
23
26
  } from "../chunk-EZXEWFDG.js";
24
27
  import {
25
28
  appendMove,
26
29
  resolveOrg
27
- } from "../chunk-FBAYCS3X.js";
30
+ } from "../chunk-DXJQR4QI.js";
28
31
  import "../chunk-ZB4F75SZ.js";
29
32
  import {
30
33
  prepareCodexContext
31
- } from "../chunk-VW3FDYRT.js";
32
- import "../chunk-WX52U7Z2.js";
34
+ } from "../chunk-36TWVNBE.js";
35
+ import "../chunk-ZU563PQI.js";
33
36
  import {
34
37
  scrubFromCwd,
35
38
  writeHookDebug
36
- } from "../chunk-OAAP2MY6.js";
37
- import "../chunk-BTNNEH2W.js";
39
+ } from "../chunk-K7D2EYBS.js";
38
40
  import {
39
41
  cachedCollectScopeAdmits,
40
42
  isRepoActiveForCapture,
41
43
  repoSyncId
42
- } from "../chunk-M6RIJVRE.js";
43
- import "../chunk-PCVGBE5B.js";
44
+ } from "../chunk-DSWT6BCC.js";
45
+ import "../chunk-G2VMA2QO.js";
44
46
  import {
45
47
  normalizeEnvelope,
46
48
  parseAgent,
47
49
  readHookStdin,
48
50
  shouldSuppressImportedCursorHandler
49
- } from "../chunk-HU4PW6I6.js";
50
- import "../chunk-EWZMDD44.js";
51
+ } from "../chunk-C3VAA5CG.js";
52
+ import "../chunk-X64HTHUF.js";
51
53
  import {
52
54
  currentBranch,
53
55
  resolveRepositoryContext
54
56
  } from "../chunk-H4UNYFUC.js";
55
- import "../chunk-KFXF2V5G.js";
56
- import "../chunk-67VNLLBN.js";
57
+ import "../chunk-OTHKG76J.js";
58
+ import "../chunk-2GP5UFV7.js";
57
59
 
58
60
  // src/hooks/prim-hook.ts
59
61
  import { spawn } from "child_process";
@@ -113,7 +115,8 @@ function spawnBackgroundFlush() {
113
115
  const entry = join(here, "..", "index.js");
114
116
  spawn(process.execPath, [entry, "moves", "flush"], {
115
117
  detached: true,
116
- stdio: "ignore"
118
+ stdio: "ignore",
119
+ env: unattendedEnv()
117
120
  }).unref();
118
121
  }
119
122
  async function main() {
@@ -4,13 +4,13 @@ import {
4
4
  parseAgent,
5
5
  readHookStdin,
6
6
  shouldSuppressImportedCursorHandler
7
- } from "../chunk-HU4PW6I6.js";
8
- import "../chunk-EWZMDD44.js";
7
+ } from "../chunk-C3VAA5CG.js";
8
+ import "../chunk-X64HTHUF.js";
9
9
  import "../chunk-H4UNYFUC.js";
10
10
  import {
11
11
  daemonRequest
12
- } from "../chunk-KFXF2V5G.js";
13
- import "../chunk-67VNLLBN.js";
12
+ } from "../chunk-OTHKG76J.js";
13
+ import "../chunk-2GP5UFV7.js";
14
14
 
15
15
  // src/hooks/session-end.ts
16
16
  var STDIN_TIMEOUT_MS = 1e3;
@@ -5,9 +5,10 @@ import {
5
5
  ensureEffectivePostRewriteHook,
6
6
  hasUsableCodexGuidance,
7
7
  hasUsableCursorSkill,
8
+ kickDaemonEnsure,
8
9
  refreshClaudePlugins,
9
10
  warmBinCache
10
- } from "../chunk-FOLKHXLJ.js";
11
+ } from "../chunk-DCJN6LZH.js";
11
12
  import {
12
13
  buildHookOutput,
13
14
  handoffHookOutput
@@ -17,64 +18,39 @@ import {
17
18
  acknowledgeDecisionFeedback,
18
19
  leaseDecisionFeedback,
19
20
  renderFeedback
20
- } from "../chunk-5AFRMOPX.js";
21
+ } from "../chunk-OH3EZXYX.js";
22
+ import "../chunk-OYHYCK4K.js";
21
23
  import {
22
24
  getOrCreateWorkspaceId
23
25
  } from "../chunk-EZXEWFDG.js";
24
26
  import {
25
27
  prepareCodexContext
26
- } from "../chunk-VW3FDYRT.js";
27
- import "../chunk-WX52U7Z2.js";
28
+ } from "../chunk-36TWVNBE.js";
29
+ import "../chunk-ZU563PQI.js";
28
30
  import {
29
31
  fetchAndCacheCollectScope,
30
32
  isRepoActiveForCapture,
31
33
  repoActiveFlag,
32
34
  setRepoActive
33
- } from "../chunk-M6RIJVRE.js";
35
+ } from "../chunk-DSWT6BCC.js";
34
36
  import {
35
37
  getSiteUrl,
36
38
  isSessionEnded
37
- } from "../chunk-PCVGBE5B.js";
39
+ } from "../chunk-G2VMA2QO.js";
38
40
  import {
39
41
  normalizeEnvelope,
40
42
  parseAgent,
41
43
  readHookStdin,
42
44
  shouldSuppressImportedCursorHandler
43
- } from "../chunk-HU4PW6I6.js";
44
- import {
45
- binFile
46
- } from "../chunk-EWZMDD44.js";
45
+ } from "../chunk-C3VAA5CG.js";
46
+ import "../chunk-X64HTHUF.js";
47
47
  import {
48
48
  gitToplevel
49
49
  } from "../chunk-H4UNYFUC.js";
50
50
  import {
51
51
  daemonRequest
52
- } from "../chunk-KFXF2V5G.js";
53
- import "../chunk-67VNLLBN.js";
54
-
55
- // src/daemon/self-heal.ts
56
- import { spawn } from "child_process";
57
- function kickDaemonEnsure(options = {}) {
58
- const primEntry = options.primEntry === void 0 ? binFile("prim") : options.primEntry;
59
- if (!primEntry) {
60
- return false;
61
- }
62
- try {
63
- const args = [primEntry, "daemon", "ensure"];
64
- if ((options.platform ?? process.platform) === "darwin") {
65
- args.push("--latest-bootstrap");
66
- }
67
- const child = (options.spawnProcess ?? spawn)(
68
- options.nodeEntry ?? process.execPath,
69
- args,
70
- { detached: true, stdio: "ignore" }
71
- );
72
- child.unref();
73
- return true;
74
- } catch {
75
- return false;
76
- }
77
- }
52
+ } from "../chunk-OTHKG76J.js";
53
+ import "../chunk-2GP5UFV7.js";
78
54
 
79
55
  // src/hooks/reauth-notice.ts
80
56
  var REAUTH_NOTICE = "[prim] authentication ended \u2014 run `prim auth login` to resume decision capture";