@primitive.ai/prim 0.1.0-alpha.92 → 0.1.0-alpha.94

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 (42) hide show
  1. package/README.md +84 -10
  2. package/SKILL.md +5 -2
  3. package/dist/{chunk-67VNLLBN.js → chunk-2GP5UFV7.js} +1 -0
  4. package/dist/{chunk-26P57LAR.js → chunk-AXQQMX2U.js} +203 -9
  5. package/dist/{chunk-M6RIJVRE.js → chunk-DSWT6BCC.js} +78 -4
  6. package/dist/{chunk-FBAYCS3X.js → chunk-DXJQR4QI.js} +150 -38
  7. package/dist/chunk-FXF4JWK2.js +162 -0
  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-5HRR4AOR.js → chunk-IMK4JKTA.js} +1 -1
  11. package/dist/{chunk-OAAP2MY6.js → chunk-K7D2EYBS.js} +2 -2
  12. package/dist/{chunk-ADUTW66W.js → chunk-O7YAW7G6.js} +6 -6
  13. package/dist/{chunk-5AFRMOPX.js → chunk-OH3EZXYX.js} +1 -1
  14. package/dist/{chunk-KFXF2V5G.js → chunk-OTHKG76J.js} +1 -1
  15. package/dist/chunk-OYHYCK4K.js +13 -0
  16. package/dist/{chunk-FKXFUUWJ.js → chunk-TYAHC25F.js} +1 -1
  17. package/dist/{chunk-5GYQ4J3D.js → chunk-UKUAAAXE.js} +2 -2
  18. package/dist/{chunk-LGGMJYY4.js → chunk-WUXFLE7X.js} +720 -369
  19. package/dist/{chunk-WX52U7Z2.js → chunk-ZU563PQI.js} +58 -2
  20. package/dist/daemon/server.js +372 -123
  21. package/dist/hook-runtime/daemon/server.js +372 -123
  22. package/dist/hook-runtime/hooks/post-commit.js +192 -58
  23. package/dist/hook-runtime/hooks/post-rewrite.js +58 -40
  24. package/dist/hook-runtime/hooks/post-tool-use.js +150 -67
  25. package/dist/hook-runtime/hooks/pre-tool-use.js +87 -15
  26. package/dist/hook-runtime/hooks/prim-hook.js +197 -107
  27. package/dist/hook-runtime/hooks/session-end.js +53 -5
  28. package/dist/hook-runtime/hooks/session-start.js +880 -280
  29. package/dist/hook-runtime/index.js +4008 -2438
  30. package/dist/hook-runtime/statusline-main.js +23 -1
  31. package/dist/hooks/post-commit.js +15 -8
  32. package/dist/hooks/post-rewrite.js +11 -8
  33. package/dist/hooks/post-tool-use.js +13 -15
  34. package/dist/hooks/pre-commit.js +4 -4
  35. package/dist/hooks/pre-tool-use.js +10 -12
  36. package/dist/hooks/prim-hook.js +17 -14
  37. package/dist/hooks/session-end.js +4 -4
  38. package/dist/hooks/session-start.js +35 -45
  39. package/dist/index.js +1401 -620
  40. package/dist/statusline-main.js +23 -1
  41. package/package.json +1 -1
  42. package/dist/chunk-BTNNEH2W.js +0 -79
@@ -426,6 +426,13 @@ function shellQuote(value) {
426
426
  }
427
427
  var STABLE_HOOK_ARGUMENTS_RE = /^[-A-Za-z0-9_ ]*$/u;
428
428
  var STABLE_HOOK_BIN_RE = /^[A-Za-z0-9][A-Za-z0-9-]*$/u;
429
+ var PRIM_CONFIG_SHELL_RESOLVER = [
430
+ 'prim_absolute() { case "$1" in [/]* ) ;; *) return 1 ;; esac; case "$1" in [[:space:]]*|*[[:space:]]|*[/][/]*|*[/].[/]*|*[/]..[/]*|*[/].|*[/]..|?*[/]) return 1 ;; esac; }; ',
431
+ 'prim_config=${PRIM_CONFIG_DIR:-}; if ! prim_absolute "$prim_config"; then prim_config=${XDG_CONFIG_HOME:-}; if prim_absolute "$prim_config"; then ',
432
+ 'case "$prim_config" in /) prim_config=/prim ;; *) prim_config="$prim_config/prim" ;; esac; ',
433
+ 'else prim_home=${HOME:-}; prim_absolute "$prim_home" || exit 78; case "$prim_home" in /) prim_config=/.config/prim ;; *) prim_config="$prim_home/.config/prim" ;; esac; ',
434
+ "fi; fi; "
435
+ ].join("");
429
436
  function stableHookCommand(bin, args = "") {
430
437
  if (!STABLE_HOOK_BIN_RE.test(bin) || !STABLE_HOOK_ARGUMENTS_RE.test(args)) {
431
438
  throw new Error("invalid stable hook command");
@@ -435,11 +442,7 @@ function stableHookCommand(bin, args = "") {
435
442
  // it as inert data during the rolling window so an older uninstall or
436
443
  // reinstall can remove the stable entry without invoking npm or PATH.
437
444
  `prim_legacy_reader='-p ${PKG_NAME}@stable prim-shim.sh ${bin} '; `,
438
- 'prim_absolute() { case "$1" in [/]* ) ;; *) return 1 ;; esac; case "$1" in [[:space:]]*|*[[:space:]]|*[/][/]*|*[/].[/]*|*[/]..[/]*|*[/].|*[/]..|?*[/]) return 1 ;; esac; }; ',
439
- 'prim_config=${PRIM_CONFIG_DIR:-}; if ! prim_absolute "$prim_config"; then prim_config=${XDG_CONFIG_HOME:-}; if prim_absolute "$prim_config"; then ',
440
- 'case "$prim_config" in /) prim_config=/prim ;; *) prim_config="$prim_config/prim" ;; esac; ',
441
- 'else prim_home=${HOME:-}; prim_absolute "$prim_home" || exit 78; case "$prim_home" in /) prim_config=/.config/prim ;; *) prim_config="$prim_home/.config/prim" ;; esac; ',
442
- "fi; fi; ",
445
+ PRIM_CONFIG_SHELL_RESOLVER,
443
446
  `case "$prim_config" in /) prim_launcher=/${STABLE_HOOK_LAUNCHER_NAME} ;; *) prim_launcher="$prim_config/${STABLE_HOOK_LAUNCHER_NAME}" ;; esac; `,
444
447
  'exec "$prim_launcher" "$@"'
445
448
  ].join("");
@@ -478,6 +481,51 @@ import { existsSync as existsSync2, mkdirSync as mkdirSync2, readFileSync as rea
478
481
  import { dirname as dirname3, join as join5 } from "path";
479
482
  var syncSleeper = new Int32Array(new SharedArrayBuffer(Int32Array.BYTES_PER_ELEMENT));
480
483
 
484
+ // src/lib/git-hook-contract.ts
485
+ var GIT_HOOK_ENTRYPOINT_CONTENT = `#!/bin/sh
486
+ # prim git hook entrypoint v1 \u2014 managed by prim; do not edit.
487
+ # Run by the "# >>> prim <hook> hook >>>" block in a Git hook file. Acts only
488
+ # where prim is active (git config prim.active true) and never fails the hook.
489
+ case "$0" in */*) prim_dir=\${0%/*} ;; *) exit 0 ;; esac
490
+ prim_launcher="$prim_dir/${STABLE_HOOK_LAUNCHER_NAME}"
491
+ [ -x "$prim_launcher" ] || exit 0
492
+ [ "$(git config --get prim.active 2>/dev/null)" = "true" ] || exit 0
493
+ prim_hook=\${1-}
494
+ if [ "$#" -gt 0 ]; then shift; fi
495
+ case "$prim_hook" in
496
+ pre-commit)
497
+ "$prim_launcher" prim-pre-commit "$@" || :
498
+ ;;
499
+ post-commit)
500
+ prim_sha=$(git rev-parse --verify HEAD 2>/dev/null) || exit 0
501
+ case "$prim_sha" in *[!0-9a-f]* | "") exit 0 ;; esac
502
+ case "\${#prim_sha}" in 40 | 64) ;; *) exit 0 ;; esac
503
+ prim_branch=$(git symbolic-ref --quiet --short HEAD 2>/dev/null) || prim_branch=
504
+ prim_observed=$(mktemp "\${TMPDIR:-/tmp}/prim-post-commit-observed.XXXXXXXX" 2>/dev/null) || prim_observed=
505
+ (
506
+ trap '' HUP
507
+ trap 'if [ -n "$prim_observed" ]; then rm -f "$prim_observed"; fi' 0
508
+ PRIM_COMMIT_SHA=$prim_sha PRIM_COMMIT_BRANCH=$prim_branch PRIM_COMMIT_OBSERVED_FILE=$prim_observed "$prim_launcher" prim-post-commit
509
+ ) </dev/null >/dev/null 2>&1 &
510
+ ;;
511
+ post-rewrite)
512
+ case "\${1-}" in amend | rebase) prim_source=$1 ;; *) exit 0 ;; esac
513
+ prim_pairs=$(mktemp "\${TMPDIR:-/tmp}/prim-post-rewrite-pairs.XXXXXXXX" 2>/dev/null) || exit 0
514
+ if ! chmod 600 "$prim_pairs" 2>/dev/null || ! cat >"$prim_pairs"; then
515
+ rm -f "$prim_pairs"
516
+ exit 0
517
+ fi
518
+ prim_branch=$(git symbolic-ref --quiet --short HEAD 2>/dev/null) || prim_branch=
519
+ (
520
+ trap '' HUP
521
+ trap 'rm -f "$prim_pairs"' 0
522
+ PRIM_REWRITE_SOURCE=$prim_source PRIM_REWRITE_BRANCH=$prim_branch PRIM_REWRITE_PAIRS_FILE=$prim_pairs "$prim_launcher" prim-post-rewrite
523
+ ) </dev/null >/dev/null 2>&1 &
524
+ ;;
525
+ esac
526
+ exit 0
527
+ `;
528
+
481
529
  // src/lib/hook-runtime.ts
482
530
  var RELEASE_PREFIX = "release-";
483
531
  var MAX_MANIFEST_BYTES = 64 * 1024;