@sage-protocol/pi-adapter 0.3.11 → 0.4.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.
@@ -1 +1 @@
1
- {"version":3,"file":"sage-pi-adapter.d.ts","sourceRoot":"","sources":["../src/sage-pi-adapter.ts"],"names":[],"mappings":"AA8BA,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAOhD;AAED,MAAM,MAAM,UAAU,GACnB,SAAS,GACT,WAAW,GACX,QAAQ,GACR,SAAS,GACT,YAAY,GACZ,MAAM,GACN,QAAQ,GACR,KAAK,GACL,cAAc,GACd,UAAU,GACV,MAAM,GACN,KAAK,GACL,YAAY,GACZ,QAAQ,GACR,SAAS,GACT,MAAM,GACN,UAAU,CAAC;AAEd,MAAM,WAAW,UAAU;IAC1B,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACjD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,6GAA6G;IAC7G,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,0FAA0F;IAC1F,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,UAAU,EAAE,OAAO,CAAC;IACpB,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,GAAG,KAAK,OAAO,CAAC;IACnE,YAAY,CAAC,EAAE,CACd,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE;QAAE,QAAQ,EAAE,OAAO,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAE,EAClD,KAAK,EAAE,GAAG,EACV,OAAO,CAAC,EAAE,GAAG,KACT,OAAO,CAAC;IACb,OAAO,EAAE,CACR,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,MAAM,CAAC,EAAE,WAAW,EACpB,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,UAAU,KAAK,IAAI,EACvC,GAAG,CAAC,EAAE,OAAO,KACT,OAAO,CAAC,UAAU,CAAC,CAAC;CACzB;AAED,MAAM,WAAW,WAAW;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,MAAM,WAAW,YAAY;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,IAAI,KAAK,MAAM,IAAI,CAAC;IAC9D,eAAe,CAAC,EAAE,CACjB,OAAO,EAAE,WAAW,EACpB,WAAW,CAAC,EAAE,OAAO,KACjB,OAAO,CAAC,IAAI,CAAC,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,iBAAiB,CAAC;CAClC;AAED,MAAM,WAAW,mBAAmB;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,kBAAkB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CAClB;AAmBD,MAAM,WAAW,iBAAiB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,qBAAqB;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACnB;AASD,MAAM,MAAM,iBAAiB,GAAG,CAC/B,OAAO,EAAE,kBAAkB,KACvB,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAmChC,KAAK,gBAAgB,GAAG;IACvB,QAAQ,EAAE,OAAO,GAAG,OAAO,GAAG,MAAM,CAAC;IACrC,MAAM,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AA2bF,wBAAsB,wBAAwB,CAC7C,OAAO,EAAE,kBAAkB,GACzB,OAAO,CAAC,iBAAiB,CAAC,CA+E5B;AAunBD,qBAAa,aAAa;IAaxB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,GAAG;IACX,OAAO,CAAC,gBAAgB;IAfzB,OAAO,CAAC,IAAI,CAA+C;IAC3D,OAAO,CAAC,OAAO,CAAqC;IACpD,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,YAAY,CAA8B;IAClD,OAAO,CAAC,YAAY,CAAM;IAC1B,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,mBAAmB,CAAuB;IAClD,OAAO,CAAC,eAAe,CAAgB;gBAG9B,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EAAE,EACd,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAM,EAChC,gBAAgB,SAAS;IAGlC,OAAO,IAAI,OAAO;IAIlB,UAAU,IAAI,OAAO;IAIrB,iBAAiB,IAAI;QACpB,eAAe,EAAE,OAAO,CAAC;QACzB,QAAQ,EAAE,OAAO,CAAC;QAClB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;QAC/B,mBAAmB,EAAE,MAAM,GAAG,IAAI,CAAC;QACnC,kBAAkB,EAAE,MAAM,CAAC;QAC3B,kBAAkB,EAAE,MAAM,EAAE,CAAC;KAC7B;IAWK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAqBtB,WAAW,CAChB,SAAS,SAAyC,GAChD,OAAO,CAAC,OAAO,CAAC;IAgBb,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAWrB,SAAS,CACd,SAAS,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAOnD,QAAQ,CACb,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC3B,OAAO,CAAC,OAAO,CAAC;IAqBb,kBAAkB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAUnE,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IAU1E,OAAO,CAAC,sBAAsB;IAW9B,OAAO,CAAC,qBAAqB;YAgBf,gBAAgB;YAoBhB,UAAU;YAWV,KAAK;IAsDnB,OAAO,CAAC,OAAO;IAoCf,OAAO,CAAC,MAAM;IAMd,OAAO,CAAC,UAAU;IAwBlB,OAAO,CAAC,gBAAgB;IAQxB,OAAO,CAAC,YAAY;IAQpB,OAAO,CAAC,gBAAgB;CAKxB;AAED,qBAAa,eAAe;IAU1B,OAAO,CAAC,MAAM;IATf,OAAO,CAAC,aAAa,CAAoB;IACzC,OAAO,CAAC,mBAAmB,CAA6B;IACxD,OAAO,CAAC,oBAAoB,CAAsC;IAClE,OAAO,CAAC,gBAAgB,CAGpB;gBAGK,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,YAAY,EAAE,SAAS,GAAG,WAAW,CAAC,CAAC,GACpE,YAAY;IAKd,OAAO,CAAC,cAAc;IAItB,OAAO,CAAC,gBAAgB;IAIxB,OAAO,CAAC,cAAc;IAuBhB,iBAAiB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAmB5D;;;;;;OAMG;IACG,yBAAyB,IAAI,OAAO,CAAC,qBAAqB,CAAC;IA+E3D,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAgCjE,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBhE,eAAe,CACpB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,EAC1C,SAAS,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC;IAuBV,mBAAmB,CACxB,SAAS,EAAE,MAAM,EAAE,EACnB,SAAS,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,IAAI,CAAC;IAsBV,oBAAoB,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAgBvD,sBAAsB,CAC3B,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,EACvC,YAAY,CAAC,EAAE,MAAM,EACrB,SAAS,CAAC,EAAE,MAAM,EAClB,MAAM,CAAC,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC;IAuBV,WAAW,CAChB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,SAAS,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAwB7B,YAAY,CACjB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,UAAU,EAAE,OAAO,EACnB,SAAS,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;IAyBnC;;;;;;;;OAQG;IACG,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IA6BlE;;;;;;;OAOG;IACH,OAAO,CAAC,YAAY,CAGhB;IAEE,iBAAiB,CACtB,QAAQ,EAAE,MAAM,GACd,OAAO,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAkC3D,uEAAuE;IACvE,eAAe,CACd,QAAQ,EAAE,MAAM,GACd;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAKlD;;;OAGG;IACG,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;YAI7C,GAAG;CAyDjB;AAyBD,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,aAAa,GAAG,cAAc,CAgF7E;AAED,wBAAgB,qBAAqB,CACpC,SAAS,EAAE,aAAa,GACtB,cAAc,CA+EhB;AA+ED,wBAAgB,wBAAwB,CACvC,SAAS,EAAE,aAAa,GACtB,cAAc,CAyDhB;AAED,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,aAAa,GAAG,cAAc,CAyD5E;AAED,wBAAgB,wBAAwB,CACvC,SAAS,EAAE,aAAa,GACtB,cAAc,CA2EhB;AAED,wBAAgB,uBAAuB,CACtC,SAAS,EAAE,aAAa,GACtB,cAAc,CAuEhB;AAED,wBAAgB,wBAAwB,CACvC,SAAS,EAAE,aAAa,GACtB,cAAc,CAwEhB;AAED,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,aAAa,GAAG,cAAc,CAwG7E;AAED,MAAM,WAAW,oBAAoB;IACpC,MAAM,EAAE,YAAY,CAAC;IACrB,SAAS,EAAE,aAAa,CAAC;IACzB,WAAW,CAAC,EAAE,eAAe,CAAC;IAC9B,YAAY,CAAC,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;IACxC,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,mBAAmB;IACnC,WAAW,EAAE,eAAe,CAAC;IAC7B,YAAY,CAAC,EAAE,MAAM,MAAM,GAAG,SAAS,CAAC;CACxC;AAED,wBAAgB,yBAAyB,CACxC,KAAK,EAAE,cAAc,EAAE,EACvB,OAAO,EAAE,mBAAmB,GAC1B,cAAc,EAAE,CA8DlB;AA0BD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,oBAAoB,GAAG;IACpE,WAAW,EAAE,cAAc,EAAE,CAAC;IAC9B,oBAAoB,EAAE,CACrB,UAAU,EAAE,MAAM,EAClB,OAAO,CAAC,EAAE,YAAY,EACtB,SAAS,CAAC,EAAE,MAAM,KACd,OAAO,CAAC,IAAI,CAAC,CAAC;IACnB,oBAAoB,EAAE,MAAM,IAAI,CAAC;IACjC,kBAAkB,EAAE,MAAM,MAAM,CAAC;CACjC,CA0EA;AAED,wBAAsB,uBAAuB,CAC5C,MAAM,GAAE,YAAiB,GACvB,OAAO,CAAC;IACV,WAAW,EAAE,cAAc,EAAE,CAAC;IAC9B,SAAS,EAAE,aAAa,CAAC;IACzB,UAAU,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,MAAM,IAAI,CAAC;IAClD,qBAAqB,EAAE,CAAC,KAAK,EAAE,cAAc,EAAE,KAAK,cAAc,EAAE,CAAC;CACrE,CAAC,CAoID;;;;;;;;AAED,wBAME"}
1
+ {"version":3,"file":"sage-pi-adapter.d.ts","sourceRoot":"","sources":["../src/sage-pi-adapter.ts"],"names":[],"mappings":"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"}
@@ -437,6 +437,7 @@ function normalizeAction(aliasesByDomain, domain, action) {
437
437
  export async function defaultSageCommandRunner(request) {
438
438
  return new Promise((resolve, reject) => {
439
439
  const proc = spawn(request.command, request.args, {
440
+ cwd: request.cwd,
440
441
  env: { ...process.env, ...request.env },
441
442
  stdio: ["pipe", "pipe", "pipe"],
442
443
  });
@@ -622,22 +623,137 @@ function appendText(result, text) {
622
623
  existing.push({ type: "text", text });
623
624
  return { ...result, content: existing };
624
625
  }
625
- function createTextComponent(text) {
626
- for (const moduleName of ["@earendil-works/pi-tui", "@mariozechner/pi-tui"]) {
626
+ let hostPiTuiResolved = false;
627
+ let hostPiTui = null;
628
+ function loadHostPiTui() {
629
+ if (hostPiTuiResolved)
630
+ return hostPiTui;
631
+ hostPiTuiResolved = true;
632
+ const anchors = [];
633
+ const entry = typeof process !== "undefined" && Array.isArray(process.argv) ? process.argv[1] : undefined;
634
+ if (entry)
635
+ anchors.push(entry); // pi process entry — sibling pi-tui
636
+ anchors.push(import.meta.url); // adapter-local (usually fails, kept last)
637
+ for (const anchor of anchors) {
638
+ let req;
627
639
  try {
628
- const mod = require(moduleName);
629
- if (mod.Text)
630
- return new mod.Text(text, 0, 0);
640
+ req = createRequire(anchor);
631
641
  }
632
- catch (_error) {
633
- void _error;
642
+ catch {
643
+ continue;
644
+ }
645
+ for (const name of ["@earendil-works/pi-tui", "@mariozechner/pi-tui"]) {
646
+ try {
647
+ const mod = req(name);
648
+ if (mod && typeof mod.Text === "function") {
649
+ hostPiTui = mod;
650
+ return mod;
651
+ }
652
+ }
653
+ catch {
654
+ /* try next anchor/name */
655
+ }
656
+ }
657
+ }
658
+ hostPiTui = null;
659
+ return null;
660
+ }
661
+ /** Return terminal-visible width while ignoring ANSI SGR sequences. */
662
+ export function visibleWidthOf(line) {
663
+ const mod = loadHostPiTui();
664
+ if (mod?.visibleWidth) {
665
+ try {
666
+ return mod.visibleWidth(line);
667
+ }
668
+ catch {
669
+ /* fall through to the dependency-free counter */
634
670
  }
635
671
  }
672
+ // eslint-disable-next-line no-control-regex
673
+ return [...line.replace(/\x1b\[[0-9;]*m/g, "")].length;
674
+ }
675
+ /** Truncate one ANSI-styled line without counting styling bytes as columns. */
676
+ export function truncateLineToWidth(line, width) {
677
+ const cols = Number.isFinite(width) && width > 0 ? Math.floor(width) : 80;
678
+ if (visibleWidthOf(line) <= cols)
679
+ return line;
680
+ const mod = loadHostPiTui();
681
+ if (mod?.truncateToWidth) {
682
+ try {
683
+ return mod.truncateToWidth(line, cols);
684
+ }
685
+ catch {
686
+ /* fall through to the dependency-free truncator */
687
+ }
688
+ }
689
+ // Preserve SGR styling while counting only visible code points.
690
+ // eslint-disable-next-line no-control-regex
691
+ const tokens = line.match(/\x1b\[[0-9;]*m|./gu) ?? [];
692
+ let visible = 0;
693
+ let sawStyle = false;
694
+ let result = "";
695
+ for (const token of tokens) {
696
+ // eslint-disable-next-line no-control-regex
697
+ if (/^\x1b\[[0-9;]*m$/.test(token)) {
698
+ result += token;
699
+ sawStyle = true;
700
+ continue;
701
+ }
702
+ if (visible >= cols)
703
+ break;
704
+ result += token;
705
+ visible += 1;
706
+ }
707
+ if (sawStyle && !result.endsWith("\x1b[0m"))
708
+ result += "\x1b[0m";
709
+ return result;
710
+ }
711
+ /** Clamp a line so custom TUI/status rendering cannot exceed terminal width. */
712
+ export function clampLineToWidth(line, width) {
713
+ return truncateLineToWidth(line, width);
714
+ }
715
+ function createTextComponent(text) {
716
+ // Canonical path: return the host pi-tui's real Text component. It wraps via
717
+ // wrapTextWithAnsi and is always width-safe, preserving theme colors.
718
+ const mod = loadHostPiTui();
719
+ if (mod?.Text)
720
+ return new mod.Text(text, 0, 0);
721
+ // Safety net only if the host pi-tui genuinely cannot be resolved. The object
722
+ // MUST satisfy pi-tui's child contract — pi's Box.render calls
723
+ // `child.render(width)` and `child.invalidate()` — and every returned line
724
+ // MUST fit `width` (pi throws "Rendered line exceeds terminal width"
725
+ // otherwise). The `width` Box passes is already the content width, so wrap to
726
+ // the full value; strip ANSI so char length equals visible width.
636
727
  return {
637
728
  text,
638
729
  setText(next) {
639
730
  this.text = next;
640
731
  },
732
+ invalidate() {
733
+ /* no cached render state to clear */
734
+ },
735
+ render(width) {
736
+ const raw = String(this.text ?? "");
737
+ if (raw === "")
738
+ return [];
739
+ const cols = typeof width === "number" && Number.isFinite(width) && width > 0
740
+ ? Math.floor(width)
741
+ : 80;
742
+ // eslint-disable-next-line no-control-regex
743
+ const ansi = /\x1b\[[0-9;]*m/g;
744
+ const lines = [];
745
+ for (const para of raw.replace(/\t/g, " ").replace(ansi, "").split("\n")) {
746
+ if (para.length === 0) {
747
+ lines.push("");
748
+ }
749
+ else {
750
+ for (let i = 0; i < para.length; i += cols) {
751
+ lines.push(para.slice(i, i + cols));
752
+ }
753
+ }
754
+ }
755
+ return lines;
756
+ },
641
757
  };
642
758
  }
643
759
  /**
@@ -1022,6 +1138,140 @@ function looksUnknownToolError(error) {
1022
1138
  msg.includes("no such tool") ||
1023
1139
  msg.includes("does not exist"));
1024
1140
  }
1141
+ const FAILED_NATIVE_SKILL_LOAD_RESULT = {
1142
+ schema: "sage.native-skill-load-signal.v1",
1143
+ status: "failed",
1144
+ recorded: false,
1145
+ };
1146
+ const NATIVE_SKILL_LOAD_EVIDENCE_TIERS = new Set([
1147
+ "full_serve",
1148
+ "native_observed",
1149
+ ]);
1150
+ function parseJsonObject(stdout) {
1151
+ try {
1152
+ const parsed = JSON.parse(stdout.trim());
1153
+ return parsed && typeof parsed === "object" && !Array.isArray(parsed)
1154
+ ? parsed
1155
+ : null;
1156
+ }
1157
+ catch {
1158
+ return null;
1159
+ }
1160
+ }
1161
+ function parseNativeSkillLoadResult(stdout) {
1162
+ const parsed = parseJsonObject(stdout);
1163
+ if (!parsed ||
1164
+ parsed.schema !== "sage.native-skill-load-signal.v1") {
1165
+ return null;
1166
+ }
1167
+ if (parsed.status === "ignored" && parsed.recorded === false) {
1168
+ const result = {
1169
+ schema: "sage.native-skill-load-signal.v1",
1170
+ status: "ignored",
1171
+ recorded: false,
1172
+ };
1173
+ if (typeof parsed.reason === "string" && parsed.reason.trim()) {
1174
+ result.reason = parsed.reason;
1175
+ }
1176
+ return result;
1177
+ }
1178
+ if (parsed.status !== "recorded" ||
1179
+ parsed.recorded !== true ||
1180
+ typeof parsed.qualified_key !== "string" ||
1181
+ !parsed.qualified_key.trim() ||
1182
+ parsed.load_evidence_tier !== "native_observed" ||
1183
+ typeof parsed.loaded_at_ms !== "number" ||
1184
+ !Number.isSafeInteger(parsed.loaded_at_ms) ||
1185
+ parsed.loaded_at_ms < 0) {
1186
+ return null;
1187
+ }
1188
+ return {
1189
+ schema: "sage.native-skill-load-signal.v1",
1190
+ status: "recorded",
1191
+ recorded: true,
1192
+ qualified_key: parsed.qualified_key,
1193
+ load_evidence_tier: "native_observed",
1194
+ loaded_at_ms: parsed.loaded_at_ms,
1195
+ };
1196
+ }
1197
+ function normalizeNativeSkillName(value) {
1198
+ return value.trim().toLocaleLowerCase("en-US");
1199
+ }
1200
+ function dedupeNativeSkillNames(skillKeys) {
1201
+ const names = new Map();
1202
+ for (const raw of skillKeys) {
1203
+ const trimmed = raw.trim();
1204
+ if (!trimmed)
1205
+ continue;
1206
+ const normalized = normalizeNativeSkillName(trimmed);
1207
+ if (!names.has(normalized))
1208
+ names.set(normalized, trimmed);
1209
+ }
1210
+ return [...names.values()];
1211
+ }
1212
+ function parseNativeSkillUseResult(stdout, expectedCaptureId, expectedNames) {
1213
+ const parsed = parseJsonObject(stdout);
1214
+ if (!parsed ||
1215
+ parsed.schema !== "sage.native-skill-use.v1" ||
1216
+ parsed.status !== "recorded" ||
1217
+ parsed.capture_id !== expectedCaptureId ||
1218
+ !Array.isArray(parsed.uses) ||
1219
+ parsed.uses.length === 0) {
1220
+ return null;
1221
+ }
1222
+ const expected = new Set(expectedNames.map(normalizeNativeSkillName));
1223
+ if (expected.size === 0 || parsed.uses.length !== expected.size)
1224
+ return null;
1225
+ if (parsed.capture_linkage !== "explicit")
1226
+ return null;
1227
+ const returnedNames = new Set();
1228
+ const returnedQualifiedKeys = new Set();
1229
+ const uses = [];
1230
+ for (const entry of parsed.uses) {
1231
+ if (!entry || typeof entry !== "object" || Array.isArray(entry))
1232
+ return null;
1233
+ const record = entry;
1234
+ if (typeof record.requested_name !== "string" ||
1235
+ !record.requested_name.trim() ||
1236
+ typeof record.qualified_key !== "string" ||
1237
+ !record.qualified_key.trim() ||
1238
+ typeof record.load_evidence_tier !== "string" ||
1239
+ !NATIVE_SKILL_LOAD_EVIDENCE_TIERS.has(record.load_evidence_tier) ||
1240
+ typeof record.load_observed_at_ms !== "number" ||
1241
+ !Number.isSafeInteger(record.load_observed_at_ms) ||
1242
+ record.load_observed_at_ms < 0 ||
1243
+ typeof record.recorded !== "boolean") {
1244
+ return null;
1245
+ }
1246
+ const requestedName = record.requested_name.trim();
1247
+ const normalizedName = normalizeNativeSkillName(requestedName);
1248
+ const qualifiedKey = record.qualified_key.trim();
1249
+ const normalizedQualifiedKey = normalizeNativeSkillName(qualifiedKey);
1250
+ if (!expected.has(normalizedName) ||
1251
+ returnedNames.has(normalizedName) ||
1252
+ returnedQualifiedKeys.has(normalizedQualifiedKey)) {
1253
+ return null;
1254
+ }
1255
+ returnedNames.add(normalizedName);
1256
+ returnedQualifiedKeys.add(normalizedQualifiedKey);
1257
+ uses.push({
1258
+ requested_name: requestedName,
1259
+ qualified_key: qualifiedKey,
1260
+ load_evidence_tier: record.load_evidence_tier,
1261
+ load_observed_at_ms: record.load_observed_at_ms,
1262
+ recorded: record.recorded,
1263
+ });
1264
+ }
1265
+ if ([...expected].some((name) => !returnedNames.has(name)))
1266
+ return null;
1267
+ return {
1268
+ schema: "sage.native-skill-use.v1",
1269
+ status: "recorded",
1270
+ capture_id: expectedCaptureId,
1271
+ capture_linkage: "explicit",
1272
+ uses,
1273
+ };
1274
+ }
1025
1275
  function parseSecurityDecision(stdout) {
1026
1276
  const lines = stdout
1027
1277
  .split(/\r?\n/)
@@ -1340,6 +1590,7 @@ export class SageMcpBridge {
1340
1590
  export class SageHookRuntime {
1341
1591
  config;
1342
1592
  commandRunner;
1593
+ workingDirectory;
1343
1594
  sessionContextCache = new Map();
1344
1595
  skillVisibilityCache = null;
1345
1596
  softFailureState = new Map();
@@ -1347,6 +1598,10 @@ export class SageHookRuntime {
1347
1598
  this.config = config;
1348
1599
  this.commandRunner = config.commandRunner ?? defaultSageCommandRunner;
1349
1600
  }
1601
+ setWorkingDirectory(cwd) {
1602
+ this.workingDirectory =
1603
+ typeof cwd === "string" && cwd.trim() ? cwd.trim() : undefined;
1604
+ }
1350
1605
  getSoftTimeout(maxTimeoutMs) {
1351
1606
  return Math.max(250, Math.min(this.config.timeoutMs, maxTimeoutMs));
1352
1607
  }
@@ -1462,7 +1717,11 @@ export class SageHookRuntime {
1462
1717
  }
1463
1718
  return this.skillVisibilityCache ?? current;
1464
1719
  }
1465
- async suggestSkill(prompt, sessionId) {
1720
+ /**
1721
+ * @deprecated Low-level compatibility helper. The default Pi path uses
1722
+ * native skill discovery/loading and does not call this per prompt.
1723
+ */
1724
+ async suggestSkill(prompt, sessionId, model) {
1466
1725
  const trimmed = prompt.trim();
1467
1726
  if (!trimmed)
1468
1727
  return "";
@@ -1480,6 +1739,7 @@ export class SageHookRuntime {
1480
1739
  SAGE_PROMPT: trimmed,
1481
1740
  SAGE_SOURCE: this.config.source ?? "pi",
1482
1741
  SAGE_SESSION_ID: sessionId ?? "",
1742
+ SAGE_MODEL: model ?? "",
1483
1743
  }, JSON.stringify({ prompt: trimmed }), {
1484
1744
  failurePolicy: "warn",
1485
1745
  timeoutMs: this.getSoftTimeout(SAGE_HOOK_TIMEOUTS.suggest),
@@ -1488,11 +1748,11 @@ export class SageHookRuntime {
1488
1748
  }
1489
1749
  async capturePrompt(prompt, sessionId) {
1490
1750
  if (this.config.enableRlmFeedback === false)
1491
- return;
1751
+ return undefined;
1492
1752
  const trimmed = prompt.trim();
1493
1753
  if (!trimmed)
1494
- return;
1495
- await this.run(["capture", "hook", "prompt"], {
1754
+ return undefined;
1755
+ const result = await this.run(["capture", "hook", "prompt"], {
1496
1756
  PROMPT: trimmed,
1497
1757
  SAGE_PROMPT: trimmed,
1498
1758
  SAGE_SOURCE: this.config.source ?? "pi",
@@ -1501,34 +1761,153 @@ export class SageHookRuntime {
1501
1761
  failurePolicy: "silent",
1502
1762
  timeoutMs: this.getSoftTimeout(SAGE_HOOK_TIMEOUTS.capture),
1503
1763
  });
1764
+ const captureId = result?.stdout
1765
+ .trim()
1766
+ .match(/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/i)?.[0];
1767
+ return captureId;
1504
1768
  }
1505
- async captureResponse(response, usage, sessionId) {
1769
+ async captureResponse(response, usage, sessionId, captureId) {
1506
1770
  if (this.config.enableRlmFeedback === false)
1507
- return;
1771
+ return false;
1508
1772
  const trimmed = response.trim();
1509
1773
  if (!trimmed)
1510
- return;
1511
- await this.run(["capture", "hook", "response"], {
1774
+ return false;
1775
+ const args = ["capture", "hook", "response"];
1776
+ const exactCaptureId = captureId?.trim();
1777
+ if (exactCaptureId)
1778
+ args.push("--correlation-id", exactCaptureId);
1779
+ const result = await this.run(args, {
1512
1780
  SAGE_RESPONSE: trimmed,
1513
1781
  LAST_RESPONSE: trimmed,
1514
1782
  SAGE_SOURCE: this.config.source ?? "pi",
1515
1783
  SAGE_SESSION_ID: sessionId ?? "",
1784
+ SAGE_DEFER_SUGGESTION_FEEDBACK: "1",
1516
1785
  TOKENS_INPUT: usage.input ?? "",
1517
1786
  TOKENS_OUTPUT: usage.output ?? "",
1518
1787
  }, JSON.stringify({ response: trimmed }), {
1519
1788
  failurePolicy: "silent",
1520
1789
  timeoutMs: this.getSoftTimeout(SAGE_HOOK_TIMEOUTS.capture),
1521
1790
  });
1791
+ return result !== null;
1522
1792
  }
1523
- async recordSuggestionUse(skillKeys, sessionId) {
1793
+ async recordSuggestionUse(skillKeys, sessionId, correlationId) {
1524
1794
  if (this.config.enableRlmFeedback === false)
1525
- return;
1795
+ return false;
1526
1796
  const used = [
1527
1797
  ...new Set(skillKeys.map((key) => key.trim()).filter(Boolean)),
1528
1798
  ];
1529
1799
  if (used.length === 0)
1800
+ return false;
1801
+ const args = [
1802
+ "suggest",
1803
+ "feedback",
1804
+ "use",
1805
+ ...used.flatMap((key) => ["--used", key]),
1806
+ ];
1807
+ const correlation = correlationId?.trim();
1808
+ if (correlation)
1809
+ args.push("--correlation-id", correlation);
1810
+ const result = await this.run(args, {
1811
+ SAGE_SOURCE: this.config.source ?? "pi",
1812
+ SAGE_SESSION_ID: sessionId ?? "",
1813
+ }, undefined, {
1814
+ failurePolicy: "silent",
1815
+ timeoutMs: this.getSoftTimeout(SAGE_HOOK_TIMEOUTS.feedback),
1816
+ });
1817
+ return result !== null;
1818
+ }
1819
+ /**
1820
+ * Atomically record use of procedures that Pi loaded natively. This path
1821
+ * intentionally has no fallback to legacy suggestion feedback: the daemon
1822
+ * must authorize every returned qualified record from session-scoped load
1823
+ * evidence and link the complete batch to the exact capture.
1824
+ */
1825
+ async recordNativeSkillUse(skillKeys, sessionId, captureId) {
1826
+ if (this.config.enableRlmFeedback === false)
1827
+ return null;
1828
+ const used = dedupeNativeSkillNames(skillKeys);
1829
+ const session = sessionId?.trim();
1830
+ const capture = captureId?.trim();
1831
+ if (used.length === 0 || !session || !capture)
1832
+ return null;
1833
+ const source = this.config.source?.trim() || "pi";
1834
+ const result = await this.run([
1835
+ "suggest",
1836
+ "feedback",
1837
+ "native-use",
1838
+ ...used.flatMap((key) => ["--used", key]),
1839
+ "--capture-id",
1840
+ capture,
1841
+ "--source",
1842
+ source,
1843
+ "--session",
1844
+ session,
1845
+ "--format",
1846
+ "json",
1847
+ ], {
1848
+ SAGE_SOURCE: source,
1849
+ SAGE_SESSION_ID: session,
1850
+ }, undefined, {
1851
+ failurePolicy: "silent",
1852
+ timeoutMs: this.getSoftTimeout(SAGE_HOOK_TIMEOUTS.feedback),
1853
+ });
1854
+ return result
1855
+ ? parseNativeSkillUseResult(result.stdout, capture, used)
1856
+ : null;
1857
+ }
1858
+ /**
1859
+ * Record a daemon load receipt for a full skill procedure this session
1860
+ * loaded through Pi's native full SKILL.md read or sage_execute get. The
1861
+ * structured result only reports `recorded: true` after validating the
1862
+ * explicit CLI's versioned JSON receipt. Ignored and failed writes remain
1863
+ * non-recorded so callers can retry honestly.
1864
+ */
1865
+ async recordSkillLoadSignal(skillKey, sessionId, via = "slash") {
1866
+ if (this.config.enableRlmFeedback === false) {
1867
+ return { ...FAILED_NATIVE_SKILL_LOAD_RESULT };
1868
+ }
1869
+ const key = skillKey.trim();
1870
+ const session = sessionId?.trim();
1871
+ // A receipt is session-scoped evidence. Without the real Pi session id,
1872
+ // the CLI would fall back to ambient env (a foreign harness session) and
1873
+ // record evidence that verifies the WRONG scope — worse than nothing.
1874
+ if (!key || !session)
1875
+ return { ...FAILED_NATIVE_SKILL_LOAD_RESULT };
1876
+ const source = this.config.source?.trim() || "pi";
1877
+ const result = await this.run([
1878
+ "suggest",
1879
+ "load-signal",
1880
+ "--name",
1881
+ key,
1882
+ "--via",
1883
+ via,
1884
+ "--source",
1885
+ source,
1886
+ "--session",
1887
+ session,
1888
+ "--format",
1889
+ "json",
1890
+ ], {
1891
+ SAGE_SOURCE: source,
1892
+ SAGE_SESSION_ID: session,
1893
+ }, undefined, {
1894
+ failurePolicy: "silent",
1895
+ timeoutMs: this.getSoftTimeout(SAGE_HOOK_TIMEOUTS.feedback),
1896
+ });
1897
+ if (!result)
1898
+ return { ...FAILED_NATIVE_SKILL_LOAD_RESULT };
1899
+ return (parseNativeSkillLoadResult(result.stdout) ?? {
1900
+ ...FAILED_NATIVE_SKILL_LOAD_RESULT,
1901
+ });
1902
+ }
1903
+ async recordSuggestionSkip(sessionId, correlationId) {
1904
+ if (this.config.enableRlmFeedback === false)
1530
1905
  return;
1531
- await this.run(["suggest", "feedback", "use", ...used.flatMap((key) => ["--used", key])], {
1906
+ const args = ["suggest", "feedback", "skip"];
1907
+ const correlation = correlationId?.trim();
1908
+ if (correlation)
1909
+ args.push("--correlation-id", correlation);
1910
+ await this.run(args, {
1532
1911
  SAGE_SOURCE: this.config.source ?? "pi",
1533
1912
  SAGE_SESSION_ID: sessionId ?? "",
1534
1913
  }, undefined, {
@@ -1536,10 +1915,14 @@ export class SageHookRuntime {
1536
1915
  timeoutMs: this.getSoftTimeout(SAGE_HOOK_TIMEOUTS.feedback),
1537
1916
  });
1538
1917
  }
1539
- async recordSuggestionSkip(sessionId) {
1918
+ async recordSuggestionReject(sessionId, correlationId) {
1540
1919
  if (this.config.enableRlmFeedback === false)
1541
1920
  return;
1542
- await this.run(["suggest", "feedback", "skip"], {
1921
+ const args = ["suggest", "feedback", "reject"];
1922
+ const correlation = correlationId?.trim();
1923
+ if (correlation)
1924
+ args.push("--correlation-id", correlation);
1925
+ await this.run(args, {
1543
1926
  SAGE_SOURCE: this.config.source ?? "pi",
1544
1927
  SAGE_SESSION_ID: sessionId ?? "",
1545
1928
  }, undefined, {
@@ -1547,7 +1930,7 @@ export class SageHookRuntime {
1547
1930
  timeoutMs: this.getSoftTimeout(SAGE_HOOK_TIMEOUTS.feedback),
1548
1931
  });
1549
1932
  }
1550
- async recordExecutionOutcome(skillKey, status, queryPreview, sessionId, _model) {
1933
+ async recordExecutionOutcome(skillKey, status, queryPreview, sessionId, _model, correlationId, captureId) {
1551
1934
  if (this.config.enableRlmFeedback === false)
1552
1935
  return;
1553
1936
  const key = skillKey.trim();
@@ -1557,6 +1940,12 @@ export class SageHookRuntime {
1557
1940
  const preview = queryPreview?.trim();
1558
1941
  if (preview)
1559
1942
  args.push("--query-preview", preview.slice(0, 500));
1943
+ const correlation = correlationId?.trim();
1944
+ if (correlation)
1945
+ args.push("--correlation-id", correlation);
1946
+ const exactCaptureId = captureId?.trim();
1947
+ if (exactCaptureId)
1948
+ args.push("--capture-id", exactCaptureId);
1560
1949
  await this.run(args, {
1561
1950
  SAGE_SOURCE: this.config.source ?? "pi",
1562
1951
  SAGE_SESSION_ID: sessionId ?? "",
@@ -1692,11 +2081,15 @@ export class SageHookRuntime {
1692
2081
  if (this.config.sageProfile) {
1693
2082
  commandEnv.SAGE_PROFILE = this.config.sageProfile;
1694
2083
  }
2084
+ if (this.workingDirectory && !commandEnv.SAGE_WORKSPACE) {
2085
+ commandEnv.SAGE_WORKSPACE = this.workingDirectory;
2086
+ }
1695
2087
  const result = await this.commandRunner({
1696
2088
  command: this.config.sageBin,
1697
2089
  args,
1698
2090
  env: commandEnv,
1699
2091
  stdin,
2092
+ cwd: this.workingDirectory,
1700
2093
  timeoutMs: options.timeoutMs ?? this.config.timeoutMs,
1701
2094
  });
1702
2095
  if (result.timedOut || result.exitCode !== 0) {
@@ -2269,7 +2662,7 @@ async function injectHookMessage(session, customType, content, display = false)
2269
2662
  console.log(`\n[${customType}]\n${trimmed}\n`);
2270
2663
  }
2271
2664
  export function createSageExtensions(options) {
2272
- const { mcpBridge, debounceMs = 800 } = options;
2665
+ const { mcpBridge } = options;
2273
2666
  const hookRuntime = options.hookRuntime ??
2274
2667
  new SageHookRuntime({
2275
2668
  sageBin: options.config.sageBin ?? "sage",
@@ -2293,40 +2686,13 @@ export function createSageExtensions(options) {
2293
2686
  hookRuntime,
2294
2687
  getSessionId: options.getSessionId,
2295
2688
  });
2296
- let currentSuggestions = "";
2297
- let lastInjectionTimestamp = 0;
2298
- let lastSuggestionPrompt = "";
2299
2689
  return {
2300
2690
  customTools,
2301
- sageInjectSuggestion: async (userPrompt, session, sessionId) => {
2302
- const prompt = userPrompt.trim();
2303
- if (!prompt)
2304
- return;
2305
- const now = Date.now();
2306
- if (now - lastInjectionTimestamp < debounceMs)
2307
- return;
2308
- if (prompt === lastSuggestionPrompt)
2309
- return;
2310
- lastInjectionTimestamp = now;
2311
- lastSuggestionPrompt = prompt;
2312
- try {
2313
- const suggestions = await hookRuntime.suggestSkill(prompt, sessionId);
2314
- if (!suggestions.trim())
2315
- return;
2316
- currentSuggestions = suggestions;
2317
- if (session) {
2318
- await injectHookMessage(session, "sage-suggested-skills", suggestions, false);
2319
- }
2320
- }
2321
- catch (error) {
2322
- console.error("[sage-pi-adapter] suggestion hook failed:", error);
2323
- }
2324
- },
2325
- sageClearSuggestions: () => {
2326
- currentSuggestions = "";
2327
- lastSuggestionPrompt = "";
2328
- },
2329
- sageGetSuggestions: () => currentSuggestions,
2691
+ // Preserved for one compatibility release. Pi's native skill surface owns
2692
+ // discovery/loading now, so adapter-side prompt injection must stay inert.
2693
+ sageInjectSuggestion: async (_userPrompt, _session, _sessionId) => { },
2694
+ sageClearSuggestions: () => { },
2695
+ sageGetSuggestions: () => "",
2330
2696
  };
2331
2697
  }
2332
2698
  export async function createSageSessionConfig(config = {}) {
@@ -2405,7 +2771,6 @@ export async function createSageSessionConfig(config = {}) {
2405
2771
  .catch((error) => {
2406
2772
  console.error("[sage-pi-adapter] prompt capture failed:", error);
2407
2773
  });
2408
- void extension.sageInjectSuggestion(content, session, activeSessionId);
2409
2774
  return;
2410
2775
  }
2411
2776
  if (parsed.role === "assistant") {