pi2dsh 0.24.0 → 0.25.0

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 (47) hide show
  1. package/README.md +11 -3
  2. package/README.zh.md +10 -3
  3. package/dist/{analyzer-DqsrD1FG.mjs → analyzer-DbgL3neo.mjs} +2 -2
  4. package/dist/{analyzer-DqsrD1FG.mjs.map → analyzer-DbgL3neo.mjs.map} +1 -1
  5. package/dist/cli.mjs +3 -3
  6. package/dist/compat/pi-ai.d.mts +2 -2
  7. package/dist/compat/pi-ai.mjs +2 -2
  8. package/dist/compat/pi-coding-agent.d.mts +2 -2
  9. package/dist/compat/pi-coding-agent.mjs +2 -2
  10. package/dist/{compatibility-CZ0QpE76.mjs → compatibility-DS6POFZD.mjs} +28 -25
  11. package/dist/compatibility-DS6POFZD.mjs.map +1 -0
  12. package/dist/credentials-oauth.mjs +2 -2
  13. package/dist/{google-generative-ai-Dpb_X-Kt.mjs → google-generative-ai-DYSbNJT7.mjs} +2 -2
  14. package/dist/{google-generative-ai-Dpb_X-Kt.mjs.map → google-generative-ai-DYSbNJT7.mjs.map} +1 -1
  15. package/dist/{google-shared-CL1Za-ev.mjs → google-shared-LEpwok5n.mjs} +2 -2
  16. package/dist/{google-shared-CL1Za-ev.mjs.map → google-shared-LEpwok5n.mjs.map} +1 -1
  17. package/dist/{google-vertex-BXRKa49Y.mjs → google-vertex-BgGRE4WU.mjs} +2 -2
  18. package/dist/{google-vertex-BXRKa49Y.mjs.map → google-vertex-BgGRE4WU.mjs.map} +1 -1
  19. package/dist/host.mjs +2 -2
  20. package/dist/index.d.mts.map +1 -1
  21. package/dist/index.mjs +5 -5
  22. package/dist/{multipart-parser-CBAi6PxA.mjs → multipart-parser-BOEZ-KGK.mjs} +2 -2
  23. package/dist/{multipart-parser-CBAi6PxA.mjs.map → multipart-parser-BOEZ-KGK.mjs.map} +1 -1
  24. package/dist/{pi-ai-hGbYES_v.d.mts → pi-ai-BHgA3JWd.d.mts} +14 -6
  25. package/dist/{pi-ai-hGbYES_v.d.mts.map → pi-ai-BHgA3JWd.d.mts.map} +1 -1
  26. package/dist/{pi-ai-DQPHUR9S.mjs → pi-ai-Cy_BRMmd.mjs} +23 -6
  27. package/dist/pi-ai-Cy_BRMmd.mjs.map +1 -0
  28. package/dist/pi-cli-client.mjs +25 -0
  29. package/dist/{pi-coding-agent-Pvy0m9tS.d.mts → pi-coding-agent-Cas0oHSx.d.mts} +18 -3
  30. package/dist/{pi-coding-agent-Pvy0m9tS.d.mts.map → pi-coding-agent-Cas0oHSx.d.mts.map} +1 -1
  31. package/dist/{pi-coding-agent-CPXFo0UO.mjs → pi-coding-agent-lcNs9Wos.mjs} +0 -0
  32. package/dist/pi-coding-agent-lcNs9Wos.mjs.map +1 -0
  33. package/dist/{runtime-BiHMcD_8.mjs → runtime-B3N7s93Q.mjs} +868 -126
  34. package/dist/runtime-B3N7s93Q.mjs.map +1 -0
  35. package/dist/runtime.d.mts +34 -3
  36. package/dist/runtime.d.mts.map +1 -1
  37. package/dist/runtime.mjs +1 -1
  38. package/dist/{source-0sA5z08z.mjs → source-l77aIDwD.mjs} +76 -3
  39. package/dist/source-l77aIDwD.mjs.map +1 -0
  40. package/dist/{src-85HOaW5W.mjs → src-ChZlNrRV.mjs} +3 -3
  41. package/dist/{src-85HOaW5W.mjs.map → src-ChZlNrRV.mjs.map} +1 -1
  42. package/package.json +24 -14
  43. package/dist/compatibility-CZ0QpE76.mjs.map +0 -1
  44. package/dist/pi-ai-DQPHUR9S.mjs.map +0 -1
  45. package/dist/pi-coding-agent-CPXFo0UO.mjs.map +0 -1
  46. package/dist/runtime-BiHMcD_8.mjs.map +0 -1
  47. package/dist/source-0sA5z08z.mjs.map +0 -1
@@ -1,6 +1,6 @@
1
1
 
2
- import { at as AssistantMessageEventStream, d as __createPiAiRuntimeRegistry } from "./pi-ai-hGbYES_v.mjs";
3
- import { N as Theme, p as ExtensionRunner } from "./pi-coding-agent-Pvy0m9tS.mjs";
2
+ import { ct as AssistantMessageEventStream, f as __createPiAiRuntimeRegistry } from "./pi-ai-BHgA3JWd.mjs";
3
+ import { N as Theme, p as ExtensionRunner } from "./pi-coding-agent-Cas0oHSx.mjs";
4
4
  import { t as FileCredentialStore } from "./oauth-bridge-hOnT3acY.mjs";
5
5
  import { i as GeneratedRuntimeManifest } from "./types-B9VBF8le.mjs";
6
6
  import { EventEmitter } from "node:events";
@@ -69,7 +69,8 @@ declare class CapabilityLedger {
69
69
  type UnknownRecord$4 = Record<string, unknown>;
70
70
  interface DshSessionLike {
71
71
  id: string;
72
- events: readonly UnknownRecord$4[] | (() => readonly UnknownRecord$4[]);
72
+ events?: readonly UnknownRecord$4[] | (() => readonly UnknownRecord$4[]);
73
+ snapshotEvents?(): readonly UnknownRecord$4[];
73
74
  append?(type: string, data: unknown, opts?: unknown): unknown;
74
75
  header?: UnknownRecord$4;
75
76
  }
@@ -80,9 +81,30 @@ interface PiProjectedEntry {
80
81
  timestamp: string;
81
82
  [key: string]: unknown;
82
83
  }
84
+ /** Only public persistence reads; never resume or load-with-recovery for indexing. */
85
+ interface SessionExportPersistence {
86
+ list(): Promise<readonly UnknownRecord$4[]>;
87
+ inspect?(id: string): Promise<{
88
+ meta: UnknownRecord$4;
89
+ events: readonly UnknownRecord$4[];
90
+ }>;
91
+ open?(id: string, access: 'read'): Promise<{
92
+ header: UnknownRecord$4;
93
+ read(): Promise<{
94
+ events: readonly UnknownRecord$4[];
95
+ }>;
96
+ close(): Promise<void>;
97
+ }>;
98
+ }
83
99
  declare class PiSessionBridge {
100
+ private readonly fileContent;
101
+ constructor(fileContent?: (ref: unknown) => unknown);
84
102
  private readonly records;
85
103
  private readonly loaded;
104
+ private readonly exportedSessions;
105
+ exportStoredSessions(persistence: SessionExportPersistence): Promise<void>;
106
+ /** Materialize the public Pi file contract from the native session, never vice versa. */
107
+ exportSessionFile(session: DshSessionLike, cwd: string): string;
86
108
  private sidecarPath;
87
109
  /**
88
110
  * The Pi-visible archive file for one DSH session — the established
@@ -167,6 +189,8 @@ interface SubagentHost {
167
189
  packageName?: string;
168
190
  /** The delegating parent Agent's own ctx (undefined outside an agent scope). */
169
191
  parentAgentContext(): unknown;
192
+ /** The live parent identity required by newer DSH agent ownership. */
193
+ parentAgent?(): UnknownRecord$3 | undefined;
170
194
  /**
171
195
  * Translate the child's Pi custom tools into DSH tool definitions and
172
196
  * register them THROUGH the unpublished child ctx, so they land in the
@@ -664,6 +688,7 @@ interface RuntimeState {
664
688
  toolRestrictions: WeakMap<object, () => void>;
665
689
  pendingActiveTools?: string[];
666
690
  commands: Map<string, PiCommand>;
691
+ nativeSkillCommands: UnknownRecord[];
667
692
  commandDisposers: Map<string, () => void>;
668
693
  /** DSH command name -> Pi command that currently owns that public name. */
669
694
  dshCommandOwners: Map<string, string>;
@@ -674,6 +699,8 @@ interface RuntimeState {
674
699
  hostAgent: UnknownRecord | undefined;
675
700
  /** Agents whose linear Pi session_shutdown has already been projected. */
676
701
  piShutdownAgents: WeakSet<object>;
702
+ shutdownTasks: WeakMap<object, Promise<void>>;
703
+ pendingShutdowns: Set<Promise<void>>;
677
704
  disposedAgents: WeakSet<object>;
678
705
  /** Durable sessions that have already received Pi's session_start event. */
679
706
  startedSessions: Set<string>;
@@ -687,6 +714,10 @@ interface RuntimeState {
687
714
  extensionsReady: boolean;
688
715
  /** Agent starts observed while extension entries are still loading. */
689
716
  pendingSessionStarts: Map<UnknownRecord, string>;
717
+ /** Skill roots already handed to DSH's skills service through resources_discover. */
718
+ discoveredSkillRoots: Set<string>;
719
+ /** Count of discovered-root provider mounts, for unique provider names. */
720
+ discoveredSkillProviders: number;
690
721
  currentSystemPrompt: string;
691
722
  messageSource: string;
692
723
  /** Pi's cross-extension bus: shared by every package instance of one agent
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.d.mts","names":[],"sources":["../src/capability.ts","../src/session-bridge.ts","../src/subagent-bridge.ts","../src/browser-surfaces.ts","../src/model-bridge.ts","../src/provider-adapter.ts","../src/tui-surfaces.ts","../src/runtime.ts"],"mappings":"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"}
1
+ {"version":3,"file":"runtime.d.mts","names":[],"sources":["../src/capability.ts","../src/session-bridge.ts","../src/subagent-bridge.ts","../src/browser-surfaces.ts","../src/model-bridge.ts","../src/provider-adapter.ts","../src/tui-surfaces.ts","../src/runtime.ts"],"mappings":";;;;;;;;;;KAkBY;UAEK;EACf,QAAQ;;EAER;;UAGe;;EAEf;;EAEA;;EAEA;;EAEA;;;;;;;cAgCW;mBAIkB;mBAHZ;mBACA;EAEY,YAAA,OAAO;;;;;EAMpC,eAAe,SAAS;;;;;;EAcxB,mBAAmB,SAAS;;;;;;;;EAa5B,uBAAuB,SAAS;;;;;EAYhC,eAAe,SAAS;EASxB,SAAS,sBAAsB;;EAO/B,YAAY,oBAAoB;UAQxB;UAQA;;;;KCnHL,kBAAgB;UAEX;EACR;EACA,kBAAkB,oCAAkC;EACpD,4BAA4B;EAC5B,QAAQ,cAAc,eAAe;EACrC,SAAS;;UAyEM;EACf;EACA;EACA;EACA;GACC;;;UAIc;EACf,QAAQ,iBAAiB;EACzB,SAAS,aAAa;IAAU,MAAM;IAAe,iBAAiB;;EACtE,MAAM,YAAY,iBAAiB;IACjC,QAAQ;IACR,QAAQ;MAAU,iBAAiB;;IACnC,SAAS;;;cA2BA;mBACkB;EAAA,YAAA,eAAc;mBAC1B;mBACA;mBACA;EAEX,qBAAqB,aAAa,2BAA2B;;EA+CnE,kBAAkB,SAAS,gBAAgB;UAsBnC;;;;;;;;;;;EAeR,eAAe,mBAAmB;;;;;;;;EAoBlC,uBAAuB;;;;;;;EAuBvB,eAAe;EAmBf,KAAK;UAsBG;EAYR,kBAAkB,mBAAmB,oBAAoB;;;;;;;;;EAiBzD,cAAc,oBAAoB;IAAQ;IAAY;IAAoB;IAAe;;EAWzF,oBAAoB,mBAAmB,iBAAiB;EAQxD,YAAY,mBAAmB,kBAAkB;EAOjD,QAAQ,mBAAmB;EAK3B,QAAQ;EASR,OAAO,oBAAoB;;;;;;;;;;;;;EAuB3B,YAAY,SAAS,iBAAiB;EAQtC,eAAe,SAAS,iBAAiB;;EA2FzC,uBAAuB,SAAS,gBAAgB,cAAc;;;;KCpgB3D,kBAAgB;KAChB,yBAAyB,OAAO;UAepB;EACf,QAAQ;EACR;EACA;;EAEA;EACA,eAAe,mBAAmB,QAAQ;EAC1C,QAAQ,OAAO,iBAAe,kBAAkB;EAChD,wBAAwB,OAAO,kBAAgB,QAAQ;EACvD;;EAEA;;EAEA;;EAEA,gBAAgB;;;;;;EAMhB,mBAAmB,mBAAmB;;;;;;EAMtC;IAA8B;IAAuB;;;;;;;;;EAQrD,mBAAmB,mBAAmB;;;;;EAKtC,oBAAoB;;;;;;;;;;EAUpB,sBAAsB,YAAY,iBAAe,kBAAkB,QAAQ;IAAQ;IAAc;;;;;;;;EAOjG,4BAA4B,oBAAoB;;EAEhD,qBAAqB;;;;;;EAMrB;IAAuB;IAAmB;;;;;;;EAM1C,iBAAiB,gBAAgB;;UAazB;EACR;EACA;;UAGQ;EACR,kBACE;IAAW;MAAY;MAAc;MAAY;;KACjD,QAAQ,4BACL,QAAQ,sCAAsC;;EAEnD,QAAQ;;cA+DG;;WACF,OAAO;WACP,UAAU;;;;;;WAMV,gBAAgB;EAkCvB,YAAA,MAAM,cACN;IAAU,OAAO;IAAe,WAAW;KAC3C,kBACA;;MAiFE,SAAS;;;;;;;EA0Bb,iBAAiB,SAAS;EAwH1B,UAAU,SAAS;EAKb,OAAO,eAAe;EAyDtB,MAAM,cAAc,kBAAkB,oBAAkB;EAIxD,SAAS,cAAc,kBAAkB,oBAAkB;EAcjE;EA0BA,eAAe;EAIf;EAIA,mBAAmB;EAiBnB;EAWA;;;EAOA,iBAAiB;EAIjB,qBAAqB;EAoCrB,uBAAuB,UAAU;IAAgB;IAAc;;EAIzD,eAAe,WAAU,kBAAqB;EAsB9C,WAAW;;;;;UCvnBF;;EAEf;;EAEA;;EAEA;;EAEA;EACA,UAAU;IAAQ;IAAc;;;UAGxB;EACR;EACA;EACA;EACA,SAAS;;;KAIC,mBAAmB,iBAAiB,iBAAiB;;;;;;;cAuBpD;;;EAEX;;EA6BA,kBAAkB;;EAKlB;;;;;;;EAUA,MAAM,yBAAyB,QAAQ;;;;;;;;;;;;EAuBvC,sBAAsB,mBAAmB,qBAAqB,QAAQ;;;;;;;;;EAoBtE,cAAc,mBAAmB,sBAAsB;;;;;;EAcvD,SAAS,0BAA0B;;;;;;;;;;EA+BnC,UAAU,mBAAmB,iCAAiC,aAAa;;;;;;;;;;;EAkB3E,UAAU,mBAAmB,iCAAiC,aAAa,kBAAkB;;;;;;;;;;;;EAkF7F,WACE,mBACA,iCACA,KAAK,YACL,gBACA;;;;;;;EAeF,kBAAkB,mBAAmB,iCAAiC;;;;;;;;;;;EAetE,aAAa,qBAAqB,QAAQ;;;;;;EAU1C,QAAQ,oBAAoB;;;;;;;;;;EAsB5B,aAAa,mBAAmB;;;;;;EAehC,aAAa,oBAAoB;;;;;;EASjC,YAAY,mBAAmB;;;;;;EAU/B,UAAU;;;;;;;EAUV,iBAAiB,qBAAqB,QAAQ;;;;;;;EAWxC,YAAY,iBAAiB,gBAAgB,QAAQ;;;;;;EAkB3D,SAAS,oBAAoB;;;;;;;KAsCnB;;UAKK;EACf;;EAEA,QAAQ,QAAQ,OAAO;;EAEvB,UAAU;;EAEV,SAAS;;EAET;;;UA4De;EACf;EACA;EACA;EACA;;;UAIe;EACf;EACA;;;UAIe;EACf;EACA;EACA;;;KAIU,oBAAoB,iBAAiB,kBAAkB,QAAQ;;KAG/D,eAAe,sBAAsB;;;KCljB5C,kBAAgB;UAEJ;EACf,iBAAiB;IAAQ;IAAY;;EACrC,WAAW,mBAAmB,QAAQ;EACtC,iBAAiB,kBAAkB,eAAe,SAAS,cAAc,QAAQ;EACjF,OAAO,SAAS,kBAAgB,cAAc;;;UAgB/B;EACf;EACA;EACA;EACA;EACA,OAAO;EACP;EACA;EACA;GACC;;;;;;;cAuCU;;EAMC,YAAA,KAAK;MAIb;EAIJ,OAAO;EAIP,KAAK,kBAAkB,kBAAkB;EAKzC,WAAW;;EA8CL,QAAQ,kBAAkB,kBAAkB,QAAQ;;UA8H3C;EACf,OAAO;EACP,SAAS;EACT,UAAU;;;;;;iBAOI,gBAAgB,KAAK,YAAY,SAAS,kBAAkB;;;;;;;;;;;;;UCkI3D;;;EAGf;;;;KCtaG,kBAAgB;UAEJ;EACf,OAAO;EACP;EACA,aAAa;EACb;;UAGe;EACf;;UAGe;EACf;EACA,iBAAiB,yBAAuB;;KAG9B,gBAAgB,MAC1B,KAAK,aACL,gBACA,sBACA,OAAO,QAAQ,eACZ,oBAAoB,QAAQ;;UA4ChB;WACN;WACA;;WAEA,gBAAgB;EACzB,UAAU,aAAa;EACvB,OAAO,GACL,SAAS,gBAAgB,IACzB,gBACA,sBACA,UAAU,kBACT,QAAQ;EACX;;;;KCnBG,gBAAgB;KAChB,aAAa,OAAO,eAAe,SAAS,4BAA4B;iBAUpE,iBAAiB,qBAAqB;UAIrC;EACR,SAAS;EACT,UAAU;EACV,SAAS;;EAET,aAAa;;;;;;;;;;;;EAYb;;UAGQ;EACR;EACA;EACA;EACA;;EAEA;;EAEA;EACA;EACA,oBAAoB;EACpB,QACE,oBACA,eACA,QAAQ,yBACR,YAAY,uCACZ,SAAS,gBACR;;UAGK;EACR;EACA;EACA;EACA,QAAQ,cAAc,SAAS,0BAA0B;;UAGjD;EACR;;EAEA,YAAY;;EAEZ;;EAEA,uBAAuB,SAAS,eAAe,OAAO;;EAEtD;EACA,UAAU,YAAY;EACtB,OAAO,YAAY;EAInB,QAAQ;EACR,eAAe;EACf,kBAAkB;EAClB;EACA,UAAU,YAAY;EACtB,qBAAqB;EAGrB,kBAAkB;;EAElB,kBAAkB;EAClB,OAAO;EACP;EACA,cAAc,IAAI;;EAElB,WAAW;;EAEX,kBAAkB;EAClB,eAAe,gBAAgB;EAC/B,kBAAkB,IAAI;EACtB,gBAAgB;;EAEhB,iBAAiB;;EAEjB,mBAAmB,YAAY;;EAE/B,0BAA0B;;EAE1B,uBAAuB,gBAAgB;;EAEvC;;EAEA,sBAAsB,IAAI;;EAE1B,sBAAsB;;EAEtB;EACA;EACA;;;;;EAKA,UAAU;;EAEV,cAAc;EACd,YAAY,kBAAkB;;EAE9B,WAAW;;EAEX,cAAc,kBAAkB;;EAEhC,wBAAwB;EACxB,QAAQ;EACR,OAAO;EAGP,WAAW,YAAY;EACvB,kBAAkB;EAClB,gBAAgB;EAChB;EACA,WAAW,YAAY;EAGvB;EACA;EACA,eAAe;EACf;EAEA,gBAAgB;IAAkB;IAAmB;;EACrD,gBAAgB;EAIhB,aAAa;EAGb,2BAA2B;;;;;;;;EAQ3B,YAAY;;;;;;;EAOZ,gBAAgB;IAAkB;IAAe;;;EAEjD,aAAa;;EAEb,gBAAgB,gBAAgB;;EAEhC,cAAc;;EAEd,mBAAmB,gBAAgB;EACnC;EAIA,cAAc;EAEd,gBAAgB;EAEhB,kBAAkB;EAElB,eAAe;EASf,iBAAiB;EAEjB,wBAAwB,YAAY;;EAEpC,qBAAqB;EAGrB,oBAAoB;EAEpB,QAAQ;EAIR,aAAa;;KAGV,iBACH,OAAO,eACP,SAAS,eACT,SAAS,8BACN,kBAAkB;KAElB,0BACH,SAAS,4BACN;EAAU;;iBAyDN,WAAW,mBAAmB;EAAQ;EAAc;;iBAcpD,oBAAoB,kBAAkB;iBAuH/B,oBAAoB;EAAoB,QAAQ;EAAe;;iBAsFtE,iBAAiB,SAAS;iBAe1B,eAAe,OAAO,cAAc,OAAO,gBAAgB;;;;;;;;;iBAoB3D,mBAAmB,SAAS;EAA8B;EAAmB;;;;;;;iBA0B7E,mBACP;EAAY;EAAmB;eAC/B;EAAW;EAAmB;eAC9B;EAAY;EAAmB;;EAC5B;EAAmB;;;;;;;;;;;;;;;;;iBAwiCf,iBAAiB,MAAM;;;;;;;;;;;;iBAgBjB,eAAe,KAAK,SAAS,kBAAkB,iBAAiB,QAAQ,MAAM;UA6vCnF;EACR,iBAAiB;EACjB,wBAAwB,YAAY;;EAEpC,0BAA0B,YAAY;;EAEtC,qBAAqB,YAAY,IAAI;;EAErC,wBAAwB,YAAY,IAAI;EACxC,oBAAoB;;;EAGpB,WAAW,YAAY;;;EAGvB,mBAAmB,YAAY;;;;;EAK/B,mBAAmB,YAAY,YAAY;;;EAG3C;;;EAGA,kBAAkB,gBAAgB;EAClC,eAAe;;EAEf,cAAc,gBAAgB;EAC9B,YAAY;;;EAGZ,wBAAwB;;;EAGxB,uBAAuB;EACvB,eAAe;EACf;EACA;EACA;EACA;EACA,aAAa;EACb,mBAAmB;EAKnB,kBAAkB,gBAAgB,kBAAkB;EAGpD,kBAAkB;EAClB;EASA,cAAc;EAId,eAAe;EAIf,kBAAkB;EAIlB,oBAAoB,gBAAgB,YAAY;;UAGxC;EACR;EACA,YAAY;;EAEZ,UAAU;;EAEV;;;;;;;;UASQ;EACR;EACA;EACA,SAAS;IAAQ;IAAiB;;EAClC;IAAa;IAAY;IAA0B;IAAe;IAAsB;;;EAExF,WAAW;EACX;IAAS;IAAa;;;;;;;;;UAWP;;EAEf,oBAAoB;;;;;;EAMpB,MAAM,YAAY,eAAe,kCAAkC,QAAQ;IAAQ;IAAc;;;iBAGnF,8BAA8B,KAAK,SAAS,SAAS;;iBAKrD,+BAA+B,KAAK,UAAU;;;;;;;;iBAWrD,8BACP,iBACA,SAAS;EACN;EAAiB,UAAU;IAAQ;IAAc;;;;;;;;;;;;;;;;;iBA2CtC,0BAA0B,UAAU,2BAA2B,QAAQ,gBAAgB;iBAQvF,sBAAsB,MAAM,2BAA2B,SAAS,gBAAgB;;KA2IpF,iCAAiC;;;;;;;;;;;;;;;;;;iBAmB7B,yBAAyB,KAAK,SAAS,QAAQ;;;;;;;iBA2KtD,qBAAqB,gBAAgB;;;;;;;;;;;iBAsB/B,qBAAqB,OAAO,eAAe;;;UAgSzC;EACf,MAAM,gBAAgB,uBAAuB,SAAS,cAAc;EACpE,OAAO,gBAAgB,oBAAoB,SAAS,cAAc;EAClE,OAAO;EACP,YAAY,gBAAgB,iBAAiB,SAAS,cAAc;;iBA6zC7D,eAAe;iBA+Bf,aAAa,cAAc;iBAwKd,eAAe,KAAK,SAAS,SAAS,iBAAiB;cA8tBhE"}
package/dist/runtime.mjs CHANGED
@@ -1,3 +1,3 @@
1
1
 
2
- import { a as overlayProviderConfig, c as runtimeInternals, i as normalizeToolSchema, n as getSharedChildExtensionCatalog, o as registerChildExtensionCatalog, r as mergeProviderRegistration, s as registerVisionCompanions, t as applyPiPackage } from "./runtime-BiHMcD_8.mjs";
2
+ import { a as overlayProviderConfig, c as runtimeInternals, i as normalizeToolSchema, n as getSharedChildExtensionCatalog, o as registerChildExtensionCatalog, r as mergeProviderRegistration, s as registerVisionCompanions, t as applyPiPackage } from "./runtime-B3N7s93Q.mjs";
3
3
  export { applyPiPackage, getSharedChildExtensionCatalog, mergeProviderRegistration, normalizeToolSchema, overlayProviderConfig, registerChildExtensionCatalog, registerVisionCompanions, runtimeInternals };
@@ -1,5 +1,5 @@
1
1
 
2
- import { access, mkdtemp, readFile, rm, stat } from "node:fs/promises";
2
+ import { access, mkdtemp, readFile, readdir, rm, stat } from "node:fs/promises";
3
3
  import { basename, dirname, isAbsolute, join, resolve } from "node:path";
4
4
  import { tmpdir } from "node:os";
5
5
  import { glob } from "tinyglobby";
@@ -71,6 +71,79 @@ async function patternsFor(rootDir, kind, configured) {
71
71
  }
72
72
  return output;
73
73
  }
74
+ async function resolveExtensionEntries(dir) {
75
+ const packageJsonPath = join(dir, "package.json");
76
+ if (await exists(packageJsonPath)) try {
77
+ const manifest = piManifest(JSON.parse(await readFile(packageJsonPath, "utf8")));
78
+ if (manifest?.extensions !== void 0 && manifest.extensions.length > 0) {
79
+ const entries = [];
80
+ for (const extPath of manifest.extensions) {
81
+ const resolved = resolve(dir, extPath);
82
+ if (await exists(resolved)) entries.push(resolved);
83
+ }
84
+ if (entries.length > 0) return entries;
85
+ }
86
+ } catch {}
87
+ for (const index of ["index.ts", "index.js"]) {
88
+ const candidate = join(dir, index);
89
+ if (await exists(candidate)) return [candidate];
90
+ }
91
+ return null;
92
+ }
93
+ async function collectAutoExtensionEntries(dir) {
94
+ if (!await exists(dir)) return [];
95
+ const rootEntries = await resolveExtensionEntries(dir);
96
+ if (rootEntries !== null) return rootEntries;
97
+ const entries = [];
98
+ for (const entry of await readdir(dir, { withFileTypes: true })) {
99
+ if (entry.name.startsWith(".") || entry.name === "node_modules") continue;
100
+ const fullPath = join(dir, entry.name);
101
+ let isDir = entry.isDirectory();
102
+ let isFile = entry.isFile();
103
+ if (entry.isSymbolicLink()) try {
104
+ const info = await stat(fullPath);
105
+ isDir = info.isDirectory();
106
+ isFile = info.isFile();
107
+ } catch {
108
+ continue;
109
+ }
110
+ if (isFile && (entry.name.endsWith(".ts") || entry.name.endsWith(".js"))) entries.push(fullPath);
111
+ else if (isDir) {
112
+ const resolved = await resolveExtensionEntries(fullPath);
113
+ if (resolved !== null) entries.push(...resolved);
114
+ }
115
+ }
116
+ return entries;
117
+ }
118
+ async function discoverExtensions(rootDir, configured) {
119
+ const entries = configured === void 0 ? ["extensions"] : configured;
120
+ const output = /* @__PURE__ */ new Set();
121
+ const globPatterns = [];
122
+ for (const raw of entries) {
123
+ const pattern = safePattern(raw);
124
+ if (pattern === void 0) continue;
125
+ if (pattern.startsWith("!") || /[*?[\]{}]/u.test(pattern)) {
126
+ globPatterns.push(pattern);
127
+ continue;
128
+ }
129
+ const absolute = resolve(rootDir, pattern);
130
+ try {
131
+ if ((await stat(absolute)).isDirectory()) for (const entry of await collectAutoExtensionEntries(absolute)) output.add(entry);
132
+ else output.add(absolute);
133
+ } catch {}
134
+ }
135
+ if (globPatterns.length > 0) {
136
+ const matches = await glob(globPatterns, {
137
+ cwd: rootDir,
138
+ absolute: true,
139
+ onlyFiles: true,
140
+ dot: false,
141
+ followSymbolicLinks: false
142
+ });
143
+ for (const match of matches) output.add(match);
144
+ }
145
+ return [...output].sort();
146
+ }
74
147
  async function discoverResources(rootDir, packageJson) {
75
148
  const manifest = piManifest(packageJson);
76
149
  const discover = async (kind) => {
@@ -84,7 +157,7 @@ async function discoverResources(rootDir, packageJson) {
84
157
  })).sort();
85
158
  };
86
159
  return {
87
- extensions: await discover("extensions"),
160
+ extensions: await discoverExtensions(rootDir, manifest?.extensions),
88
161
  skills: await discover("skills"),
89
162
  prompts: await discover("prompts"),
90
163
  themes: await discover("themes")
@@ -155,4 +228,4 @@ async function resolvePiPackage(source, cwd = process.cwd()) {
155
228
  //#endregion
156
229
  export { resolvePiPackage as t };
157
230
 
158
- //# sourceMappingURL=source-0sA5z08z.mjs.map
231
+ //# sourceMappingURL=source-l77aIDwD.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source-l77aIDwD.mjs","names":[],"sources":["../src/source.ts"],"sourcesContent":["import { access, mkdtemp, readdir, readFile, rm, stat } from 'node:fs/promises'\nimport { tmpdir } from 'node:os'\nimport { basename, dirname, isAbsolute, join, resolve } from 'node:path'\nimport { glob } from 'tinyglobby'\nimport type { ResolvedPiPackage, ResourceInventory } from './types.js'\n\ntype PiManifest = Partial<Record<'extensions' | 'skills' | 'prompts' | 'themes', string[]>>\n\nasync function exists(path: string): Promise<boolean> {\n try {\n await access(path)\n return true\n } catch {\n return false\n }\n}\n\nfunction stringArray(value: unknown): string[] | undefined {\n return Array.isArray(value) && value.every(item => typeof item === 'string') ? value : undefined\n}\n\nfunction piManifest(packageJson: Record<string, unknown>): PiManifest | undefined {\n const raw = packageJson.pi\n if (typeof raw !== 'object' || raw === null || Array.isArray(raw)) return undefined\n const record = raw as Record<string, unknown>\n const extensions = stringArray(record.extensions)\n const skills = stringArray(record.skills)\n const prompts = stringArray(record.prompts)\n const themes = stringArray(record.themes)\n return {\n ...(extensions !== undefined ? { extensions } : {}),\n ...(skills !== undefined ? { skills } : {}),\n ...(prompts !== undefined ? { prompts } : {}),\n ...(themes !== undefined ? { themes } : {}),\n }\n}\n\nconst DEFAULT_PATTERNS: Record<keyof ResourceInventory, string[]> = {\n extensions: ['extensions/**/*.{ts,tsx,js,jsx,mts,mjs,cts,cjs}'],\n skills: ['skills/**/*'],\n prompts: ['prompts/*.md'],\n themes: ['themes/*.json'],\n}\n\nconst FILE_PATTERNS: Record<keyof ResourceInventory, string> = {\n extensions: '**/*.{ts,tsx,js,jsx,mts,mjs,cts,cjs}',\n skills: '**/*',\n prompts: '**/*.md',\n themes: '**/*.json',\n}\n\n// Pi's own loader tolerates resource paths that do not resolve (existsSync\n// filtering); mirror that leniency for patterns escaping the package root:\n// skip the pattern with a warning instead of refusing the whole package.\n// Files outside the package are still never globbed or copied.\nfunction safePattern(pattern: string): string | undefined {\n const normalized = pattern.replaceAll('\\\\', '/')\n const positive = normalized.startsWith('!') ? normalized.slice(1) : normalized\n if (isAbsolute(positive) || positive.split('/').includes('..')) {\n console.warn(`pi2dsh: skipping resource pattern that escapes the package root (Pi itself would not resolve it either at install layout): ${JSON.stringify(pattern)}`)\n return undefined\n }\n return normalized\n}\n\nasync function patternsFor(\n rootDir: string,\n kind: keyof ResourceInventory,\n configured: string[] | undefined,\n): Promise<string[]> {\n if (configured === undefined) return DEFAULT_PATTERNS[kind]\n const output: string[] = []\n for (const raw of configured) {\n const pattern = safePattern(raw)\n if (pattern === undefined) continue\n if (pattern.startsWith('!')) {\n output.push(pattern)\n continue\n }\n const absolute = resolve(rootDir, pattern)\n try {\n const info = await stat(absolute)\n output.push(info.isDirectory() ? `${pattern.replace(/\\/$/u, '')}/${FILE_PATTERNS[kind]}` : pattern)\n } catch {\n output.push(pattern)\n }\n }\n return output\n}\n\n// Pi's extension discovery for a DIRECTORY entry (coding-agent\n// src/core/package-manager.ts resolveExtensionEntries/collectAutoExtensionEntries\n// @6f707eb36064e82af9c1320a7634f4dfad21049b; logic unchanged, minus the\n// .gitignore/.piignore filter): a directory that carries its own\n// package.json `pi.extensions` or an index.ts/index.js IS one entry set;\n// otherwise its direct *.ts/*.js files are entries and each subdirectory\n// contributes only through that same rule. No recursion beyond one level —\n// a package's `internal/` helpers (no index) are shared modules, not entries.\n// The old `dir/**/*.ts` glob loaded every helper as an extension and logged\n// \"has no default factory function\" for each (pi-code: 40 of 64 files).\nasync function resolveExtensionEntries(dir: string): Promise<string[] | null> {\n const packageJsonPath = join(dir, 'package.json')\n if (await exists(packageJsonPath)) {\n try {\n const manifest = piManifest(JSON.parse(await readFile(packageJsonPath, 'utf8')) as Record<string, unknown>)\n if (manifest?.extensions !== undefined && manifest.extensions.length > 0) {\n const entries: string[] = []\n for (const extPath of manifest.extensions) {\n const resolved = resolve(dir, extPath)\n if (await exists(resolved)) entries.push(resolved)\n }\n if (entries.length > 0) return entries\n }\n } catch {\n // An unreadable nested manifest falls through to the index rule, as Pi does.\n }\n }\n for (const index of ['index.ts', 'index.js']) {\n const candidate = join(dir, index)\n if (await exists(candidate)) return [candidate]\n }\n return null\n}\n\nasync function collectAutoExtensionEntries(dir: string): Promise<string[]> {\n if (!await exists(dir)) return []\n const rootEntries = await resolveExtensionEntries(dir)\n if (rootEntries !== null) return rootEntries\n const entries: string[] = []\n for (const entry of await readdir(dir, { withFileTypes: true })) {\n if (entry.name.startsWith('.') || entry.name === 'node_modules') continue\n const fullPath = join(dir, entry.name)\n let isDir = entry.isDirectory()\n let isFile = entry.isFile()\n if (entry.isSymbolicLink()) {\n try {\n const info = await stat(fullPath)\n isDir = info.isDirectory()\n isFile = info.isFile()\n } catch {\n continue\n }\n }\n if (isFile && (entry.name.endsWith('.ts') || entry.name.endsWith('.js'))) entries.push(fullPath)\n else if (isDir) {\n const resolved = await resolveExtensionEntries(fullPath)\n if (resolved !== null) entries.push(...resolved)\n }\n }\n return entries\n}\n\nasync function discoverExtensions(rootDir: string, configured: string[] | undefined): Promise<string[]> {\n // Pi: no manifest → the package's `extensions/` directory under the auto\n // rule; a manifest → each entry is a file (as is) or a directory (auto rule).\n // Patterns Pi would not understand (globs, negations) keep the glob path.\n const entries = configured === undefined ? ['extensions'] : configured\n const output = new Set<string>()\n const globPatterns: string[] = []\n for (const raw of entries) {\n const pattern = safePattern(raw)\n if (pattern === undefined) continue\n if (pattern.startsWith('!') || /[*?[\\]{}]/u.test(pattern)) {\n globPatterns.push(pattern)\n continue\n }\n const absolute = resolve(rootDir, pattern)\n try {\n const info = await stat(absolute)\n if (info.isDirectory()) for (const entry of await collectAutoExtensionEntries(absolute)) output.add(entry)\n else output.add(absolute)\n } catch {\n // Pi skips manifest entries that do not resolve.\n }\n }\n if (globPatterns.length > 0) {\n const matches = await glob(globPatterns, { cwd: rootDir, absolute: true, onlyFiles: true, dot: false, followSymbolicLinks: false })\n for (const match of matches) output.add(match)\n }\n return [...output].sort()\n}\n\nasync function discoverResources(rootDir: string, packageJson: Record<string, unknown>): Promise<ResourceInventory> {\n const manifest = piManifest(packageJson)\n const discover = async (kind: keyof ResourceInventory): Promise<string[]> => {\n const patterns = await patternsFor(rootDir, kind, manifest?.[kind])\n const matches = await glob(patterns, {\n cwd: rootDir,\n absolute: true,\n onlyFiles: true,\n dot: false,\n followSymbolicLinks: false,\n })\n return matches.sort()\n }\n return {\n extensions: await discoverExtensions(rootDir, manifest?.extensions),\n skills: await discover('skills'),\n prompts: await discover('prompts'),\n themes: await discover('themes'),\n }\n}\n\nfunction packageIdentity(packageJson: Record<string, unknown>, source: string, fallbackName: string) {\n return {\n name: typeof packageJson.name === 'string' ? packageJson.name : fallbackName,\n version: typeof packageJson.version === 'string' ? packageJson.version : '0.0.0-local',\n source,\n }\n}\n\nasync function readPackageJson(rootDir: string): Promise<Record<string, unknown>> {\n const text = await readFile(join(rootDir, 'package.json'), 'utf8')\n const parsed: unknown = JSON.parse(text)\n if (typeof parsed !== 'object' || parsed === null || Array.isArray(parsed)) {\n throw new Error('package.json must contain an object')\n }\n return parsed as Record<string, unknown>\n}\n\nexport async function resolvePiPackage(source: string, cwd = process.cwd()): Promise<ResolvedPiPackage> {\n const localCandidate = resolve(cwd, source.replace(/^file:/u, ''))\n const local = source.startsWith('.')\n || source.startsWith('/')\n || source.startsWith('file:')\n || await exists(localCandidate)\n let rootDir: string\n let temporary = false\n let packageJson: Record<string, unknown>\n\n if (local) {\n const requested = localCandidate\n const info = await stat(requested)\n if (info.isFile()) {\n rootDir = dirname(requested)\n const packagePath = join(rootDir, 'package.json')\n packageJson = await exists(packagePath)\n ? await readPackageJson(rootDir)\n : { name: basename(requested).replace(/\\.[^.]+$/u, ''), pi: { extensions: [basename(requested)] } }\n } else {\n rootDir = requested\n packageJson = await readPackageJson(rootDir)\n }\n } else {\n rootDir = await mkdtemp(join(tmpdir(), 'pi2dsh-source-'))\n temporary = true\n try {\n // Lazy: only npm-spec resolution needs the registry client. Host\n // bundles resolve installed directories and never load pacote.\n const { default: pacote } = await import('pacote')\n await pacote.extract(source, rootDir)\n packageJson = await readPackageJson(rootDir)\n } catch (error) {\n await rm(rootDir, { recursive: true, force: true })\n throw error\n }\n }\n\n const resources = await discoverResources(rootDir, packageJson)\n const identity = packageIdentity(packageJson, source, basename(rootDir))\n return {\n rootDir,\n temporary,\n identity,\n packageJson,\n resources,\n async dispose() {\n if (temporary) await rm(rootDir, { recursive: true, force: true })\n },\n }\n}\n"],"mappings":"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"}
@@ -3,13 +3,13 @@ import { i as __require, n as __esmMin, t as __commonJSMin } from "./rolldown-ru
3
3
  import { promises } from "node:fs";
4
4
  import "node:path";
5
5
  import { format } from "node:url";
6
+ import { isIP } from "node:net";
6
7
  import { deprecate, promisify, types } from "node:util";
7
8
  import Stream, { PassThrough, pipeline } from "node:stream";
8
9
  import http from "node:http";
9
10
  import https from "node:https";
10
11
  import zlib from "node:zlib";
11
12
  import { Buffer as Buffer$1 } from "node:buffer";
12
- import { isIP } from "node:net";
13
13
  //#region node_modules/.pnpm/data-uri-to-buffer@4.0.1/node_modules/data-uri-to-buffer/dist/index.js
14
14
  /**
15
15
  * Returns a `Buffer` instance from the given data URI `uri`.
@@ -4042,7 +4042,7 @@ var init_body = __esmMin((() => {
4042
4042
  for (const [name, value] of parameters) formData.append(name, value);
4043
4043
  return formData;
4044
4044
  }
4045
- const { toFormData } = await import("./multipart-parser-CBAi6PxA.mjs");
4045
+ const { toFormData } = await import("./multipart-parser-BOEZ-KGK.mjs");
4046
4046
  return toFormData(this.body, ct);
4047
4047
  }
4048
4048
  /**
@@ -5028,4 +5028,4 @@ __esmMin((() => {
5028
5028
  }))();
5029
5029
  export { init_file as a, fetch as default, File$1 as i, FormData as n, init_esm_min as r, init_from as t };
5030
5030
 
5031
- //# sourceMappingURL=src-85HOaW5W.mjs.map
5031
+ //# sourceMappingURL=src-ChZlNrRV.mjs.map