@sage-protocol/pi-adapter 0.3.12 → 0.4.3

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;AAmLD;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAapE;AA+gBD,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
  });
@@ -657,26 +658,59 @@ function loadHostPiTui() {
657
658
  hostPiTui = null;
658
659
  return null;
659
660
  }
660
- /**
661
- * Clamp a single (possibly ANSI-styled) line to `width` visible columns so a
662
- * custom widget/status line can never trip pi's "Rendered line exceeds terminal
663
- * width" guard. Uses the host pi-tui truncateToWidth when resolvable (ANSI-aware,
664
- * preserves color); otherwise strips ANSI and hard-slices.
665
- */
666
- export function clampLineToWidth(line, width) {
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 */
670
+ }
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) {
667
677
  const cols = Number.isFinite(width) && width > 0 ? Math.floor(width) : 80;
678
+ if (visibleWidthOf(line) <= cols)
679
+ return line;
668
680
  const mod = loadHostPiTui();
669
681
  if (mod?.truncateToWidth) {
670
682
  try {
671
683
  return mod.truncateToWidth(line, cols);
672
684
  }
673
685
  catch {
674
- /* fall through to manual clamp */
686
+ /* fall through to the dependency-free truncator */
675
687
  }
676
688
  }
689
+ // Preserve SGR styling while counting only visible code points.
677
690
  // eslint-disable-next-line no-control-regex
678
- const plain = line.replace(/\x1b\[[0-9;]*m/g, "");
679
- return plain.length > cols ? plain.slice(0, cols) : plain;
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);
680
714
  }
681
715
  function createTextComponent(text) {
682
716
  // Canonical path: return the host pi-tui's real Text component. It wraps via
@@ -1104,6 +1138,175 @@ function looksUnknownToolError(error) {
1104
1138
  msg.includes("no such tool") ||
1105
1139
  msg.includes("does not exist"));
1106
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
+ }
1275
+ function classifyNativeSkillUseFailure(failure) {
1276
+ if (failure?.timedOut) {
1277
+ return {
1278
+ code: "native_use_timeout",
1279
+ message: "Sage timed out while recording native guided use.",
1280
+ recovery: "Check `sage daemon status`, then retry the same declaration.",
1281
+ };
1282
+ }
1283
+ const parsed = failure ? parseJsonObject(failure.stdout) : null;
1284
+ const error = parsed?.error && typeof parsed.error === "object" && !Array.isArray(parsed.error)
1285
+ ? parsed.error
1286
+ : null;
1287
+ if (parsed?.schema === "sage.native-skill-use.v1" &&
1288
+ parsed.status === "unsupported" &&
1289
+ error?.code === "native_skill_use_unsupported") {
1290
+ return {
1291
+ code: "native_skill_use_unsupported",
1292
+ message: "The running Sage daemon does not advertise native_skill_use_v1.",
1293
+ recovery: "Update and restart `saged`, then retry the same declaration.",
1294
+ };
1295
+ }
1296
+ const detail = `${failure?.stderr ?? ""}\n${failure?.stdout ?? ""}`;
1297
+ if (/unrecognized subcommand\s+['"]native-use['"]/i.test(detail)) {
1298
+ return {
1299
+ code: "native_use_cli_unsupported",
1300
+ message: "The configured Sage CLI does not expose feedback native-use.",
1301
+ recovery: "Update the Sage CLI selected by `SAGE_BIN`, then retry. Restart `saged` only if the updated CLI reports a daemon capability mismatch.",
1302
+ };
1303
+ }
1304
+ return {
1305
+ code: "native_use_write_failed",
1306
+ message: "Sage did not persist the native guided-use batch.",
1307
+ recovery: "Check `sage daemon status` and daemon logs before retrying.",
1308
+ };
1309
+ }
1107
1310
  function parseSecurityDecision(stdout) {
1108
1311
  const lines = stdout
1109
1312
  .split(/\r?\n/)
@@ -1422,6 +1625,7 @@ export class SageMcpBridge {
1422
1625
  export class SageHookRuntime {
1423
1626
  config;
1424
1627
  commandRunner;
1628
+ workingDirectory;
1425
1629
  sessionContextCache = new Map();
1426
1630
  skillVisibilityCache = null;
1427
1631
  softFailureState = new Map();
@@ -1429,6 +1633,10 @@ export class SageHookRuntime {
1429
1633
  this.config = config;
1430
1634
  this.commandRunner = config.commandRunner ?? defaultSageCommandRunner;
1431
1635
  }
1636
+ setWorkingDirectory(cwd) {
1637
+ this.workingDirectory =
1638
+ typeof cwd === "string" && cwd.trim() ? cwd.trim() : undefined;
1639
+ }
1432
1640
  getSoftTimeout(maxTimeoutMs) {
1433
1641
  return Math.max(250, Math.min(this.config.timeoutMs, maxTimeoutMs));
1434
1642
  }
@@ -1544,7 +1752,11 @@ export class SageHookRuntime {
1544
1752
  }
1545
1753
  return this.skillVisibilityCache ?? current;
1546
1754
  }
1547
- async suggestSkill(prompt, sessionId) {
1755
+ /**
1756
+ * @deprecated Low-level compatibility helper. The default Pi path uses
1757
+ * native skill discovery/loading and does not call this per prompt.
1758
+ */
1759
+ async suggestSkill(prompt, sessionId, model) {
1548
1760
  const trimmed = prompt.trim();
1549
1761
  if (!trimmed)
1550
1762
  return "";
@@ -1562,6 +1774,7 @@ export class SageHookRuntime {
1562
1774
  SAGE_PROMPT: trimmed,
1563
1775
  SAGE_SOURCE: this.config.source ?? "pi",
1564
1776
  SAGE_SESSION_ID: sessionId ?? "",
1777
+ SAGE_MODEL: model ?? "",
1565
1778
  }, JSON.stringify({ prompt: trimmed }), {
1566
1779
  failurePolicy: "warn",
1567
1780
  timeoutMs: this.getSoftTimeout(SAGE_HOOK_TIMEOUTS.suggest),
@@ -1570,11 +1783,11 @@ export class SageHookRuntime {
1570
1783
  }
1571
1784
  async capturePrompt(prompt, sessionId) {
1572
1785
  if (this.config.enableRlmFeedback === false)
1573
- return;
1786
+ return undefined;
1574
1787
  const trimmed = prompt.trim();
1575
1788
  if (!trimmed)
1576
- return;
1577
- await this.run(["capture", "hook", "prompt"], {
1789
+ return undefined;
1790
+ const result = await this.run(["capture", "hook", "prompt"], {
1578
1791
  PROMPT: trimmed,
1579
1792
  SAGE_PROMPT: trimmed,
1580
1793
  SAGE_SOURCE: this.config.source ?? "pi",
@@ -1583,34 +1796,172 @@ export class SageHookRuntime {
1583
1796
  failurePolicy: "silent",
1584
1797
  timeoutMs: this.getSoftTimeout(SAGE_HOOK_TIMEOUTS.capture),
1585
1798
  });
1799
+ const captureId = result?.stdout
1800
+ .trim()
1801
+ .match(/[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}/i)?.[0];
1802
+ return captureId;
1586
1803
  }
1587
- async captureResponse(response, usage, sessionId) {
1804
+ async captureResponse(response, usage, sessionId, captureId) {
1588
1805
  if (this.config.enableRlmFeedback === false)
1589
- return;
1806
+ return false;
1590
1807
  const trimmed = response.trim();
1591
1808
  if (!trimmed)
1592
- return;
1593
- await this.run(["capture", "hook", "response"], {
1809
+ return false;
1810
+ const args = ["capture", "hook", "response"];
1811
+ const exactCaptureId = captureId?.trim();
1812
+ if (exactCaptureId)
1813
+ args.push("--correlation-id", exactCaptureId);
1814
+ const result = await this.run(args, {
1594
1815
  SAGE_RESPONSE: trimmed,
1595
1816
  LAST_RESPONSE: trimmed,
1596
1817
  SAGE_SOURCE: this.config.source ?? "pi",
1597
1818
  SAGE_SESSION_ID: sessionId ?? "",
1819
+ SAGE_DEFER_SUGGESTION_FEEDBACK: "1",
1598
1820
  TOKENS_INPUT: usage.input ?? "",
1599
1821
  TOKENS_OUTPUT: usage.output ?? "",
1600
1822
  }, JSON.stringify({ response: trimmed }), {
1601
1823
  failurePolicy: "silent",
1602
1824
  timeoutMs: this.getSoftTimeout(SAGE_HOOK_TIMEOUTS.capture),
1603
1825
  });
1826
+ return result !== null;
1604
1827
  }
1605
- async recordSuggestionUse(skillKeys, sessionId) {
1828
+ async recordSuggestionUse(skillKeys, sessionId, correlationId) {
1606
1829
  if (this.config.enableRlmFeedback === false)
1607
- return;
1830
+ return false;
1608
1831
  const used = [
1609
1832
  ...new Set(skillKeys.map((key) => key.trim()).filter(Boolean)),
1610
1833
  ];
1611
1834
  if (used.length === 0)
1835
+ return false;
1836
+ const args = [
1837
+ "suggest",
1838
+ "feedback",
1839
+ "use",
1840
+ ...used.flatMap((key) => ["--used", key]),
1841
+ ];
1842
+ const correlation = correlationId?.trim();
1843
+ if (correlation)
1844
+ args.push("--correlation-id", correlation);
1845
+ const result = await this.run(args, {
1846
+ SAGE_SOURCE: this.config.source ?? "pi",
1847
+ SAGE_SESSION_ID: sessionId ?? "",
1848
+ }, undefined, {
1849
+ failurePolicy: "silent",
1850
+ timeoutMs: this.getSoftTimeout(SAGE_HOOK_TIMEOUTS.feedback),
1851
+ });
1852
+ return result !== null;
1853
+ }
1854
+ /**
1855
+ * Atomically record use of procedures that Pi loaded natively. This path
1856
+ * intentionally has no fallback to legacy suggestion feedback: the daemon
1857
+ * must authorize every returned qualified record from session-scoped load
1858
+ * evidence and link the complete batch to the exact capture.
1859
+ */
1860
+ async recordNativeSkillUse(skillKeys, sessionId, captureId) {
1861
+ return (await this.recordNativeSkillUseAttempt(skillKeys, sessionId, captureId)).result;
1862
+ }
1863
+ async recordNativeSkillUseAttempt(skillKeys, sessionId, captureId) {
1864
+ if (this.config.enableRlmFeedback === false)
1865
+ return { result: null, failure: null };
1866
+ const used = dedupeNativeSkillNames(skillKeys);
1867
+ const session = sessionId?.trim();
1868
+ const capture = captureId?.trim();
1869
+ if (used.length === 0 || !session || !capture)
1870
+ return { result: null, failure: null };
1871
+ const source = this.config.source?.trim() || "pi";
1872
+ let commandFailure;
1873
+ const result = await this.run([
1874
+ "suggest",
1875
+ "feedback",
1876
+ "native-use",
1877
+ ...used.flatMap((key) => ["--used", key]),
1878
+ "--capture-id",
1879
+ capture,
1880
+ "--source",
1881
+ source,
1882
+ "--session",
1883
+ session,
1884
+ "--format",
1885
+ "json",
1886
+ ], {
1887
+ SAGE_SOURCE: source,
1888
+ SAGE_SESSION_ID: session,
1889
+ }, undefined, {
1890
+ failurePolicy: "silent",
1891
+ timeoutMs: this.getSoftTimeout(SAGE_HOOK_TIMEOUTS.feedback),
1892
+ onFailure: (failure) => {
1893
+ commandFailure = failure;
1894
+ },
1895
+ });
1896
+ if (!result) {
1897
+ return { result: null, failure: classifyNativeSkillUseFailure(commandFailure) };
1898
+ }
1899
+ const parsed = parseNativeSkillUseResult(result.stdout, capture, used);
1900
+ if (!parsed) {
1901
+ return {
1902
+ result: null,
1903
+ failure: {
1904
+ code: "native_use_write_failed",
1905
+ message: "Sage returned an invalid native-use response.",
1906
+ recovery: "Check `sage daemon status` and daemon logs before retrying.",
1907
+ },
1908
+ };
1909
+ }
1910
+ return { result: parsed, failure: null };
1911
+ }
1912
+ /**
1913
+ * Record a daemon load receipt for a full skill procedure this session
1914
+ * loaded through Pi's native full SKILL.md read or sage_execute get. The
1915
+ * structured result only reports `recorded: true` after validating the
1916
+ * explicit CLI's versioned JSON receipt. Ignored and failed writes remain
1917
+ * non-recorded so callers can retry honestly.
1918
+ */
1919
+ async recordSkillLoadSignal(skillKey, sessionId, via = "slash") {
1920
+ if (this.config.enableRlmFeedback === false) {
1921
+ return { ...FAILED_NATIVE_SKILL_LOAD_RESULT };
1922
+ }
1923
+ const key = skillKey.trim();
1924
+ const session = sessionId?.trim();
1925
+ // A receipt is session-scoped evidence. Without the real Pi session id,
1926
+ // the CLI would fall back to ambient env (a foreign harness session) and
1927
+ // record evidence that verifies the WRONG scope — worse than nothing.
1928
+ if (!key || !session)
1929
+ return { ...FAILED_NATIVE_SKILL_LOAD_RESULT };
1930
+ const source = this.config.source?.trim() || "pi";
1931
+ const result = await this.run([
1932
+ "suggest",
1933
+ "load-signal",
1934
+ "--name",
1935
+ key,
1936
+ "--via",
1937
+ via,
1938
+ "--source",
1939
+ source,
1940
+ "--session",
1941
+ session,
1942
+ "--format",
1943
+ "json",
1944
+ ], {
1945
+ SAGE_SOURCE: source,
1946
+ SAGE_SESSION_ID: session,
1947
+ }, undefined, {
1948
+ failurePolicy: "silent",
1949
+ timeoutMs: this.getSoftTimeout(SAGE_HOOK_TIMEOUTS.feedback),
1950
+ });
1951
+ if (!result)
1952
+ return { ...FAILED_NATIVE_SKILL_LOAD_RESULT };
1953
+ return (parseNativeSkillLoadResult(result.stdout) ?? {
1954
+ ...FAILED_NATIVE_SKILL_LOAD_RESULT,
1955
+ });
1956
+ }
1957
+ async recordSuggestionSkip(sessionId, correlationId) {
1958
+ if (this.config.enableRlmFeedback === false)
1612
1959
  return;
1613
- await this.run(["suggest", "feedback", "use", ...used.flatMap((key) => ["--used", key])], {
1960
+ const args = ["suggest", "feedback", "skip"];
1961
+ const correlation = correlationId?.trim();
1962
+ if (correlation)
1963
+ args.push("--correlation-id", correlation);
1964
+ await this.run(args, {
1614
1965
  SAGE_SOURCE: this.config.source ?? "pi",
1615
1966
  SAGE_SESSION_ID: sessionId ?? "",
1616
1967
  }, undefined, {
@@ -1618,10 +1969,14 @@ export class SageHookRuntime {
1618
1969
  timeoutMs: this.getSoftTimeout(SAGE_HOOK_TIMEOUTS.feedback),
1619
1970
  });
1620
1971
  }
1621
- async recordSuggestionSkip(sessionId) {
1972
+ async recordSuggestionReject(sessionId, correlationId) {
1622
1973
  if (this.config.enableRlmFeedback === false)
1623
1974
  return;
1624
- await this.run(["suggest", "feedback", "skip"], {
1975
+ const args = ["suggest", "feedback", "reject"];
1976
+ const correlation = correlationId?.trim();
1977
+ if (correlation)
1978
+ args.push("--correlation-id", correlation);
1979
+ await this.run(args, {
1625
1980
  SAGE_SOURCE: this.config.source ?? "pi",
1626
1981
  SAGE_SESSION_ID: sessionId ?? "",
1627
1982
  }, undefined, {
@@ -1629,7 +1984,7 @@ export class SageHookRuntime {
1629
1984
  timeoutMs: this.getSoftTimeout(SAGE_HOOK_TIMEOUTS.feedback),
1630
1985
  });
1631
1986
  }
1632
- async recordExecutionOutcome(skillKey, status, queryPreview, sessionId, _model) {
1987
+ async recordExecutionOutcome(skillKey, status, queryPreview, sessionId, _model, correlationId, captureId) {
1633
1988
  if (this.config.enableRlmFeedback === false)
1634
1989
  return;
1635
1990
  const key = skillKey.trim();
@@ -1639,6 +1994,12 @@ export class SageHookRuntime {
1639
1994
  const preview = queryPreview?.trim();
1640
1995
  if (preview)
1641
1996
  args.push("--query-preview", preview.slice(0, 500));
1997
+ const correlation = correlationId?.trim();
1998
+ if (correlation)
1999
+ args.push("--correlation-id", correlation);
2000
+ const exactCaptureId = captureId?.trim();
2001
+ if (exactCaptureId)
2002
+ args.push("--capture-id", exactCaptureId);
1642
2003
  await this.run(args, {
1643
2004
  SAGE_SOURCE: this.config.source ?? "pi",
1644
2005
  SAGE_SESSION_ID: sessionId ?? "",
@@ -1774,14 +2135,19 @@ export class SageHookRuntime {
1774
2135
  if (this.config.sageProfile) {
1775
2136
  commandEnv.SAGE_PROFILE = this.config.sageProfile;
1776
2137
  }
2138
+ if (this.workingDirectory && !commandEnv.SAGE_WORKSPACE) {
2139
+ commandEnv.SAGE_WORKSPACE = this.workingDirectory;
2140
+ }
1777
2141
  const result = await this.commandRunner({
1778
2142
  command: this.config.sageBin,
1779
2143
  args,
1780
2144
  env: commandEnv,
1781
2145
  stdin,
2146
+ cwd: this.workingDirectory,
1782
2147
  timeoutMs: options.timeoutMs ?? this.config.timeoutMs,
1783
2148
  });
1784
2149
  if (result.timedOut || result.exitCode !== 0) {
2150
+ options.onFailure?.(result);
1785
2151
  const detail = (result.stderr || result.stdout || "").trim();
1786
2152
  const message = result.timedOut
1787
2153
  ? `[sage-pi-adapter] Sage command timed out: ${commandText}`
@@ -1799,6 +2165,12 @@ export class SageHookRuntime {
1799
2165
  }
1800
2166
  catch (error) {
1801
2167
  const detail = error instanceof Error ? error.message : String(error);
2168
+ options.onFailure?.({
2169
+ exitCode: -1,
2170
+ stdout: "",
2171
+ stderr: detail,
2172
+ timedOut: false,
2173
+ });
1802
2174
  const message = `[sage-pi-adapter] Sage command error: ${commandText}${detail ? `\n${detail}` : ""}`;
1803
2175
  if (failurePolicy === "throw")
1804
2176
  throw new Error(message);
@@ -2351,7 +2723,7 @@ async function injectHookMessage(session, customType, content, display = false)
2351
2723
  console.log(`\n[${customType}]\n${trimmed}\n`);
2352
2724
  }
2353
2725
  export function createSageExtensions(options) {
2354
- const { mcpBridge, debounceMs = 800 } = options;
2726
+ const { mcpBridge } = options;
2355
2727
  const hookRuntime = options.hookRuntime ??
2356
2728
  new SageHookRuntime({
2357
2729
  sageBin: options.config.sageBin ?? "sage",
@@ -2375,40 +2747,13 @@ export function createSageExtensions(options) {
2375
2747
  hookRuntime,
2376
2748
  getSessionId: options.getSessionId,
2377
2749
  });
2378
- let currentSuggestions = "";
2379
- let lastInjectionTimestamp = 0;
2380
- let lastSuggestionPrompt = "";
2381
2750
  return {
2382
2751
  customTools,
2383
- sageInjectSuggestion: async (userPrompt, session, sessionId) => {
2384
- const prompt = userPrompt.trim();
2385
- if (!prompt)
2386
- return;
2387
- const now = Date.now();
2388
- if (now - lastInjectionTimestamp < debounceMs)
2389
- return;
2390
- if (prompt === lastSuggestionPrompt)
2391
- return;
2392
- lastInjectionTimestamp = now;
2393
- lastSuggestionPrompt = prompt;
2394
- try {
2395
- const suggestions = await hookRuntime.suggestSkill(prompt, sessionId);
2396
- if (!suggestions.trim())
2397
- return;
2398
- currentSuggestions = suggestions;
2399
- if (session) {
2400
- await injectHookMessage(session, "sage-suggested-skills", suggestions, false);
2401
- }
2402
- }
2403
- catch (error) {
2404
- console.error("[sage-pi-adapter] suggestion hook failed:", error);
2405
- }
2406
- },
2407
- sageClearSuggestions: () => {
2408
- currentSuggestions = "";
2409
- lastSuggestionPrompt = "";
2410
- },
2411
- sageGetSuggestions: () => currentSuggestions,
2752
+ // Preserved for one compatibility release. Pi's native skill surface owns
2753
+ // discovery/loading now, so adapter-side prompt injection must stay inert.
2754
+ sageInjectSuggestion: async (_userPrompt, _session, _sessionId) => { },
2755
+ sageClearSuggestions: () => { },
2756
+ sageGetSuggestions: () => "",
2412
2757
  };
2413
2758
  }
2414
2759
  export async function createSageSessionConfig(config = {}) {
@@ -2487,7 +2832,6 @@ export async function createSageSessionConfig(config = {}) {
2487
2832
  .catch((error) => {
2488
2833
  console.error("[sage-pi-adapter] prompt capture failed:", error);
2489
2834
  });
2490
- void extension.sageInjectSuggestion(content, session, activeSessionId);
2491
2835
  return;
2492
2836
  }
2493
2837
  if (parsed.role === "assistant") {