@mariozechner/pi-coding-agent 0.26.0 → 0.26.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.
Files changed (52) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/dist/cli/file-processor.d.ts.map +1 -1
  3. package/dist/cli/file-processor.js +1 -1
  4. package/dist/cli/file-processor.js.map +1 -1
  5. package/dist/core/sdk.d.ts +2 -2
  6. package/dist/core/sdk.d.ts.map +1 -1
  7. package/dist/core/sdk.js +7 -3
  8. package/dist/core/sdk.js.map +1 -1
  9. package/dist/core/tools/bash.d.ts +6 -1
  10. package/dist/core/tools/bash.d.ts.map +1 -1
  11. package/dist/core/tools/bash.js +149 -144
  12. package/dist/core/tools/bash.js.map +1 -1
  13. package/dist/core/tools/edit.d.ts +7 -1
  14. package/dist/core/tools/edit.d.ts.map +1 -1
  15. package/dist/core/tools/edit.js +105 -102
  16. package/dist/core/tools/edit.js.map +1 -1
  17. package/dist/core/tools/find.d.ts +7 -1
  18. package/dist/core/tools/find.d.ts.map +1 -1
  19. package/dist/core/tools/find.js +128 -124
  20. package/dist/core/tools/find.js.map +1 -1
  21. package/dist/core/tools/grep.d.ts +11 -1
  22. package/dist/core/tools/grep.d.ts.map +1 -1
  23. package/dist/core/tools/grep.js +198 -194
  24. package/dist/core/tools/grep.js.map +1 -1
  25. package/dist/core/tools/index.d.ts +19 -7
  26. package/dist/core/tools/index.d.ts.map +1 -1
  27. package/dist/core/tools/index.js +43 -17
  28. package/dist/core/tools/index.js.map +1 -1
  29. package/dist/core/tools/ls.d.ts +6 -1
  30. package/dist/core/tools/ls.d.ts.map +1 -1
  31. package/dist/core/tools/ls.js +90 -86
  32. package/dist/core/tools/ls.js.map +1 -1
  33. package/dist/core/tools/path-utils.d.ts +6 -1
  34. package/dist/core/tools/path-utils.d.ts.map +1 -1
  35. package/dist/core/tools/path-utils.js +17 -5
  36. package/dist/core/tools/path-utils.js.map +1 -1
  37. package/dist/core/tools/read.d.ts +7 -1
  38. package/dist/core/tools/read.d.ts.map +1 -1
  39. package/dist/core/tools/read.js +118 -115
  40. package/dist/core/tools/read.js.map +1 -1
  41. package/dist/core/tools/write.d.ts +6 -1
  42. package/dist/core/tools/write.d.ts.map +1 -1
  43. package/dist/core/tools/write.js +63 -59
  44. package/dist/core/tools/write.js.map +1 -1
  45. package/dist/index.d.ts +1 -1
  46. package/dist/index.d.ts.map +1 -1
  47. package/dist/index.js +4 -2
  48. package/dist/index.js.map +1 -1
  49. package/docs/sdk.md +47 -2
  50. package/examples/sdk/05-tools.ts +30 -4
  51. package/examples/sdk/12-full-control.ts +12 -4
  52. package/package.json +4 -4
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,0BAA0B;AAC1B,OAAO,EACN,YAAY,GAQZ,MAAM,yBAAyB,CAAC;AACjC,aAAa;AACb,OAAO,EAEN,sBAAsB,EACtB,OAAO,EACP,2BAA2B,EAC3B,cAAc,EACd,YAAY,EACZ,kBAAkB,EAClB,eAAe,EACf,qBAAqB,EACrB,aAAa,GACb,MAAM,sBAAsB,CAAC;AAc9B,OAAO,EAAE,0BAA0B,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AA2B3F,oCAAoC;AACpC,OAAO,EACN,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,iBAAiB,GACjB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,gCAAgC;AAChC,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC1F,OAAO,EACN,iBAAiB,EACjB,KAAK,EACL,MAAM,GAIN,MAAM,uBAAuB,CAAC;AAC/B,6BAA6B;AAC7B,OAAO,EAEN,iBAAiB;AAGjB,gBAAgB;AAChB,qBAAqB;AACrB,UAAU;AACV,kBAAkB;AAClB,UAAU;AACV,gBAAgB,EAChB,uBAAuB,EACvB,oBAAoB,EACpB,mBAAmB,EACnB,aAAa;AACb,YAAY;AACZ,cAAc,EACd,cAAc,EACd,qBAAqB,EAErB,SAAS,IAAI,wBAAwB,EACrC,YAAY;AACZ,QAAQ;AACR,aAAa,GACb,MAAM,eAAe,CAAC;AACvB,OAAO,EAEN,oBAAoB,EACpB,wBAAwB,EAExB,sBAAsB,EAEtB,mBAAmB,EAInB,cAAc,EAEd,cAAc,EACd,cAAc,GAEd,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAIN,eAAe,GAEf,MAAM,4BAA4B,CAAC;AACpC,SAAS;AACT,OAAO,EACN,qBAAqB,EAGrB,UAAU,EACV,iBAAiB,GAIjB,MAAM,kBAAkB,CAAC;AAC1B,QAAQ;AACR,OAAO,EAEN,QAAQ,EACR,WAAW,EACX,QAAQ,EAER,QAAQ,EAER,QAAQ,EAER,MAAM,EAEN,QAAQ,EAER,SAAS,GACT,MAAM,uBAAuB,CAAC;AAC/B,mBAAmB;AACnB,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,mCAAmC;AACnC,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC","sourcesContent":["// Core session management\nexport {\n\tAgentSession,\n\ttype AgentSessionConfig,\n\ttype AgentSessionEvent,\n\ttype AgentSessionEventListener,\n\ttype CompactionResult,\n\ttype ModelCycleResult,\n\ttype PromptOptions,\n\ttype SessionStats,\n} from \"./core/agent-session.js\";\n// Compaction\nexport {\n\ttype CutPointResult,\n\tcalculateContextTokens,\n\tcompact,\n\tDEFAULT_COMPACTION_SETTINGS,\n\testimateTokens,\n\tfindCutPoint,\n\tfindTurnStartIndex,\n\tgenerateSummary,\n\tgetLastAssistantUsage,\n\tshouldCompact,\n} from \"./core/compaction.js\";\n// Custom tools\nexport type {\n\tAgentToolUpdateCallback,\n\tCustomAgentTool,\n\tCustomToolFactory,\n\tCustomToolsLoadResult,\n\tExecResult,\n\tLoadedCustomTool,\n\tRenderResultOptions,\n\tSessionEvent as ToolSessionEvent,\n\tToolAPI,\n\tToolUIContext,\n} from \"./core/custom-tools/index.js\";\nexport { discoverAndLoadCustomTools, loadCustomTools } from \"./core/custom-tools/index.js\";\nexport type {\n\tAgentEndEvent,\n\tAgentStartEvent,\n\tBashToolResultEvent,\n\tBranchEvent,\n\tBranchEventResult,\n\tCustomToolResultEvent,\n\tEditToolResultEvent,\n\tFindToolResultEvent,\n\tGrepToolResultEvent,\n\tHookAPI,\n\tHookEvent,\n\tHookEventContext,\n\tHookFactory,\n\tHookUIContext,\n\tLsToolResultEvent,\n\tReadToolResultEvent,\n\tSessionEvent,\n\tToolCallEvent,\n\tToolCallEventResult,\n\tToolResultEvent,\n\tToolResultEventResult,\n\tTurnEndEvent,\n\tTurnStartEvent,\n\tWriteToolResultEvent,\n} from \"./core/hooks/index.js\";\n// Hook system types and type guards\nexport {\n\tisBashToolResult,\n\tisEditToolResult,\n\tisFindToolResult,\n\tisGrepToolResult,\n\tisLsToolResult,\n\tisReadToolResult,\n\tisWriteToolResult,\n} from \"./core/hooks/index.js\";\nexport { messageTransformer } from \"./core/messages.js\";\n// Model configuration and OAuth\nexport { findModel, getApiKeyForModel, getAvailableModels } from \"./core/model-config.js\";\nexport {\n\tgetOAuthProviders,\n\tlogin,\n\tlogout,\n\ttype OAuthAuthInfo,\n\ttype OAuthPrompt,\n\ttype OAuthProvider,\n} from \"./core/oauth/index.js\";\n// SDK for programmatic usage\nexport {\n\ttype BuildSystemPromptOptions,\n\tbuildSystemPrompt,\n\ttype CreateAgentSessionOptions,\n\ttype CreateAgentSessionResult,\n\t// Configuration\n\tconfigureOAuthStorage,\n\t// Factory\n\tcreateAgentSession,\n\t// Helpers\n\tdefaultGetApiKey,\n\tdiscoverAvailableModels,\n\tdiscoverContextFiles,\n\tdiscoverCustomTools,\n\tdiscoverHooks,\n\t// Discovery\n\tdiscoverModels,\n\tdiscoverSkills,\n\tdiscoverSlashCommands,\n\ttype FileSlashCommand,\n\tfindModel as findModelByProviderAndId,\n\tloadSettings,\n\t// Tools\n\treadOnlyTools,\n} from \"./core/sdk.js\";\nexport {\n\ttype CompactionEntry,\n\tcreateSummaryMessage,\n\tgetLatestCompactionEntry,\n\ttype LoadedSession,\n\tloadSessionFromEntries,\n\ttype ModelChangeEntry,\n\tparseSessionEntries,\n\ttype SessionEntry,\n\ttype SessionHeader,\n\ttype SessionInfo,\n\tSessionManager,\n\ttype SessionMessageEntry,\n\tSUMMARY_PREFIX,\n\tSUMMARY_SUFFIX,\n\ttype ThinkingLevelChangeEntry,\n} from \"./core/session-manager.js\";\nexport {\n\ttype CompactionSettings,\n\ttype RetrySettings,\n\ttype Settings,\n\tSettingsManager,\n\ttype SkillsSettings,\n} from \"./core/settings-manager.js\";\n// Skills\nexport {\n\tformatSkillsForPrompt,\n\ttype LoadSkillsFromDirOptions,\n\ttype LoadSkillsResult,\n\tloadSkills,\n\tloadSkillsFromDir,\n\ttype Skill,\n\ttype SkillFrontmatter,\n\ttype SkillWarning,\n} from \"./core/skills.js\";\n// Tools\nexport {\n\ttype BashToolDetails,\n\tbashTool,\n\tcodingTools,\n\teditTool,\n\ttype FindToolDetails,\n\tfindTool,\n\ttype GrepToolDetails,\n\tgrepTool,\n\ttype LsToolDetails,\n\tlsTool,\n\ttype ReadToolDetails,\n\treadTool,\n\ttype TruncationResult,\n\twriteTool,\n} from \"./core/tools/index.js\";\n// Main entry point\nexport { main } from \"./main.js\";\n// Theme utilities for custom tools\nexport { getMarkdownTheme } from \"./modes/interactive/theme/theme.js\";\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,0BAA0B;AAC1B,OAAO,EACN,YAAY,GAQZ,MAAM,yBAAyB,CAAC;AACjC,aAAa;AACb,OAAO,EAEN,sBAAsB,EACtB,OAAO,EACP,2BAA2B,EAC3B,cAAc,EACd,YAAY,EACZ,kBAAkB,EAClB,eAAe,EACf,qBAAqB,EACrB,aAAa,GACb,MAAM,sBAAsB,CAAC;AAc9B,OAAO,EAAE,0BAA0B,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AA2B3F,oCAAoC;AACpC,OAAO,EACN,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,gBAAgB,EAChB,iBAAiB,GACjB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AACxD,gCAAgC;AAChC,OAAO,EAAE,SAAS,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC1F,OAAO,EACN,iBAAiB,EACjB,KAAK,EACL,MAAM,GAIN,MAAM,uBAAuB,CAAC;AAC/B,6BAA6B;AAC7B,OAAO,EAEN,iBAAiB;AAGjB,gBAAgB;AAChB,qBAAqB;AACrB,UAAU;AACV,kBAAkB,EAClB,cAAc;AACd,kCAAkC;AAClC,iBAAiB,EACjB,cAAc,EACd,cAAc,EACd,cAAc,EACd,YAAY,EACZ,mBAAmB,EACnB,cAAc,EACd,eAAe;AACf,UAAU;AACV,gBAAgB,EAChB,uBAAuB,EACvB,oBAAoB,EACpB,mBAAmB,EACnB,aAAa;AACb,YAAY;AACZ,cAAc,EACd,cAAc,EACd,qBAAqB,EAErB,SAAS,IAAI,wBAAwB,EACrC,YAAY;AACZ,sCAAsC;AACtC,aAAa,GACb,MAAM,eAAe,CAAC;AACvB,OAAO,EAEN,oBAAoB,EACpB,wBAAwB,EAExB,sBAAsB,EAEtB,mBAAmB,EAInB,cAAc,EAEd,cAAc,EACd,cAAc,GAEd,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAIN,eAAe,GAEf,MAAM,4BAA4B,CAAC;AACpC,SAAS;AACT,OAAO,EACN,qBAAqB,EAGrB,UAAU,EACV,iBAAiB,GAIjB,MAAM,kBAAkB,CAAC;AAC1B,QAAQ;AACR,OAAO,EAEN,QAAQ,EACR,WAAW,EACX,QAAQ,EAER,QAAQ,EAER,QAAQ,EAER,MAAM,EAEN,QAAQ,EAER,SAAS,GACT,MAAM,uBAAuB,CAAC;AAC/B,mBAAmB;AACnB,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,mCAAmC;AACnC,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC","sourcesContent":["// Core session management\nexport {\n\tAgentSession,\n\ttype AgentSessionConfig,\n\ttype AgentSessionEvent,\n\ttype AgentSessionEventListener,\n\ttype CompactionResult,\n\ttype ModelCycleResult,\n\ttype PromptOptions,\n\ttype SessionStats,\n} from \"./core/agent-session.js\";\n// Compaction\nexport {\n\ttype CutPointResult,\n\tcalculateContextTokens,\n\tcompact,\n\tDEFAULT_COMPACTION_SETTINGS,\n\testimateTokens,\n\tfindCutPoint,\n\tfindTurnStartIndex,\n\tgenerateSummary,\n\tgetLastAssistantUsage,\n\tshouldCompact,\n} from \"./core/compaction.js\";\n// Custom tools\nexport type {\n\tAgentToolUpdateCallback,\n\tCustomAgentTool,\n\tCustomToolFactory,\n\tCustomToolsLoadResult,\n\tExecResult,\n\tLoadedCustomTool,\n\tRenderResultOptions,\n\tSessionEvent as ToolSessionEvent,\n\tToolAPI,\n\tToolUIContext,\n} from \"./core/custom-tools/index.js\";\nexport { discoverAndLoadCustomTools, loadCustomTools } from \"./core/custom-tools/index.js\";\nexport type {\n\tAgentEndEvent,\n\tAgentStartEvent,\n\tBashToolResultEvent,\n\tBranchEvent,\n\tBranchEventResult,\n\tCustomToolResultEvent,\n\tEditToolResultEvent,\n\tFindToolResultEvent,\n\tGrepToolResultEvent,\n\tHookAPI,\n\tHookEvent,\n\tHookEventContext,\n\tHookFactory,\n\tHookUIContext,\n\tLsToolResultEvent,\n\tReadToolResultEvent,\n\tSessionEvent,\n\tToolCallEvent,\n\tToolCallEventResult,\n\tToolResultEvent,\n\tToolResultEventResult,\n\tTurnEndEvent,\n\tTurnStartEvent,\n\tWriteToolResultEvent,\n} from \"./core/hooks/index.js\";\n// Hook system types and type guards\nexport {\n\tisBashToolResult,\n\tisEditToolResult,\n\tisFindToolResult,\n\tisGrepToolResult,\n\tisLsToolResult,\n\tisReadToolResult,\n\tisWriteToolResult,\n} from \"./core/hooks/index.js\";\nexport { messageTransformer } from \"./core/messages.js\";\n// Model configuration and OAuth\nexport { findModel, getApiKeyForModel, getAvailableModels } from \"./core/model-config.js\";\nexport {\n\tgetOAuthProviders,\n\tlogin,\n\tlogout,\n\ttype OAuthAuthInfo,\n\ttype OAuthPrompt,\n\ttype OAuthProvider,\n} from \"./core/oauth/index.js\";\n// SDK for programmatic usage\nexport {\n\ttype BuildSystemPromptOptions,\n\tbuildSystemPrompt,\n\ttype CreateAgentSessionOptions,\n\ttype CreateAgentSessionResult,\n\t// Configuration\n\tconfigureOAuthStorage,\n\t// Factory\n\tcreateAgentSession,\n\tcreateBashTool,\n\t// Tool factories (for custom cwd)\n\tcreateCodingTools,\n\tcreateEditTool,\n\tcreateFindTool,\n\tcreateGrepTool,\n\tcreateLsTool,\n\tcreateReadOnlyTools,\n\tcreateReadTool,\n\tcreateWriteTool,\n\t// Helpers\n\tdefaultGetApiKey,\n\tdiscoverAvailableModels,\n\tdiscoverContextFiles,\n\tdiscoverCustomTools,\n\tdiscoverHooks,\n\t// Discovery\n\tdiscoverModels,\n\tdiscoverSkills,\n\tdiscoverSlashCommands,\n\ttype FileSlashCommand,\n\tfindModel as findModelByProviderAndId,\n\tloadSettings,\n\t// Pre-built tools (use process.cwd())\n\treadOnlyTools,\n} from \"./core/sdk.js\";\nexport {\n\ttype CompactionEntry,\n\tcreateSummaryMessage,\n\tgetLatestCompactionEntry,\n\ttype LoadedSession,\n\tloadSessionFromEntries,\n\ttype ModelChangeEntry,\n\tparseSessionEntries,\n\ttype SessionEntry,\n\ttype SessionHeader,\n\ttype SessionInfo,\n\tSessionManager,\n\ttype SessionMessageEntry,\n\tSUMMARY_PREFIX,\n\tSUMMARY_SUFFIX,\n\ttype ThinkingLevelChangeEntry,\n} from \"./core/session-manager.js\";\nexport {\n\ttype CompactionSettings,\n\ttype RetrySettings,\n\ttype Settings,\n\tSettingsManager,\n\ttype SkillsSettings,\n} from \"./core/settings-manager.js\";\n// Skills\nexport {\n\tformatSkillsForPrompt,\n\ttype LoadSkillsFromDirOptions,\n\ttype LoadSkillsResult,\n\tloadSkills,\n\tloadSkillsFromDir,\n\ttype Skill,\n\ttype SkillFrontmatter,\n\ttype SkillWarning,\n} from \"./core/skills.js\";\n// Tools\nexport {\n\ttype BashToolDetails,\n\tbashTool,\n\tcodingTools,\n\teditTool,\n\ttype FindToolDetails,\n\tfindTool,\n\ttype GrepToolDetails,\n\tgrepTool,\n\ttype LsToolDetails,\n\tlsTool,\n\ttype ReadToolDetails,\n\treadTool,\n\ttype TruncationResult,\n\twriteTool,\n} from \"./core/tools/index.js\";\n// Main entry point\nexport { main } from \"./main.js\";\n// Theme utilities for custom tools\nexport { getMarkdownTheme } from \"./modes/interactive/theme/theme.js\";\n"]}
package/docs/sdk.md CHANGED
@@ -307,7 +307,7 @@ const { session } = await createAgentSession({
307
307
  ```typescript
308
308
  import {
309
309
  codingTools, // read, bash, edit, write (default)
310
- readOnlyTools, // read, bash
310
+ readOnlyTools, // read, grep, find, ls
311
311
  readTool, bashTool, editTool, writeTool,
312
312
  grepTool, findTool, lsTool,
313
313
  } from "@mariozechner/pi-coding-agent";
@@ -323,6 +323,45 @@ const { session } = await createAgentSession({
323
323
  });
324
324
  ```
325
325
 
326
+ #### Tools with Custom cwd
327
+
328
+ **Important:** The pre-built tool instances (`readTool`, `bashTool`, etc.) use `process.cwd()` for path resolution. When you specify a custom `cwd` AND provide explicit `tools`, you must use the tool factory functions to ensure paths resolve correctly:
329
+
330
+ ```typescript
331
+ import {
332
+ createCodingTools, // Creates [read, bash, edit, write] for specific cwd
333
+ createReadOnlyTools, // Creates [read, grep, find, ls] for specific cwd
334
+ createReadTool,
335
+ createBashTool,
336
+ createEditTool,
337
+ createWriteTool,
338
+ createGrepTool,
339
+ createFindTool,
340
+ createLsTool,
341
+ } from "@mariozechner/pi-coding-agent";
342
+
343
+ const cwd = "/path/to/project";
344
+
345
+ // Use factory for tool sets
346
+ const { session } = await createAgentSession({
347
+ cwd,
348
+ tools: createCodingTools(cwd), // Tools resolve paths relative to cwd
349
+ });
350
+
351
+ // Or pick specific tools
352
+ const { session } = await createAgentSession({
353
+ cwd,
354
+ tools: [createReadTool(cwd), createBashTool(cwd), createGrepTool(cwd)],
355
+ });
356
+ ```
357
+
358
+ **When you don't need factories:**
359
+ - If you omit `tools`, pi automatically creates them with the correct `cwd`
360
+ - If you use `process.cwd()` as your `cwd`, the pre-built instances work fine
361
+
362
+ **When you must use factories:**
363
+ - When you specify both `cwd` (different from `process.cwd()`) AND `tools`
364
+
326
365
  > See [examples/sdk/05-tools.ts](../examples/sdk/05-tools.ts)
327
366
 
328
367
  ### Custom Tools
@@ -788,12 +827,18 @@ buildSystemPrompt
788
827
  SessionManager
789
828
  SettingsManager
790
829
 
791
- // Built-in tools
830
+ // Built-in tools (use process.cwd())
792
831
  codingTools
793
832
  readOnlyTools
794
833
  readTool, bashTool, editTool, writeTool
795
834
  grepTool, findTool, lsTool
796
835
 
836
+ // Tool factories (for custom cwd)
837
+ createCodingTools
838
+ createReadOnlyTools
839
+ createReadTool, createBashTool, createEditTool, createWriteTool
840
+ createGrepTool, createFindTool, createLsTool
841
+
797
842
  // Types
798
843
  type CreateAgentSessionOptions
799
844
  type CreateAgentSessionResult
@@ -2,6 +2,10 @@
2
2
  * Tools Configuration
3
3
  *
4
4
  * Use built-in tool sets, individual tools, or add custom tools.
5
+ *
6
+ * IMPORTANT: When using a custom `cwd`, you must use the tool factory functions
7
+ * (createCodingTools, createReadOnlyTools, createReadTool, etc.) to ensure
8
+ * tools resolve paths relative to your cwd, not process.cwd().
5
9
  */
6
10
 
7
11
  import { Type } from "@sinclair/typebox";
@@ -9,28 +13,50 @@ import {
9
13
  createAgentSession,
10
14
  discoverCustomTools,
11
15
  SessionManager,
12
- codingTools, // read, bash, edit, write (default)
13
- readOnlyTools, // read, bash
16
+ codingTools, // read, bash, edit, write - uses process.cwd()
17
+ readOnlyTools, // read, grep, find, ls - uses process.cwd()
18
+ createCodingTools, // Factory: creates tools for specific cwd
19
+ createReadOnlyTools, // Factory: creates tools for specific cwd
20
+ createReadTool,
21
+ createBashTool,
22
+ createGrepTool,
14
23
  readTool,
15
24
  bashTool,
16
25
  grepTool,
17
26
  type CustomAgentTool,
18
27
  } from "../../src/index.js";
19
28
 
20
- // Read-only mode (no edit/write)
29
+ // Read-only mode (no edit/write) - uses process.cwd()
21
30
  const { session: readOnly } = await createAgentSession({
22
31
  tools: readOnlyTools,
23
32
  sessionManager: SessionManager.inMemory(),
24
33
  });
25
34
  console.log("Read-only session created");
26
35
 
27
- // Custom tool selection
36
+ // Custom tool selection - uses process.cwd()
28
37
  const { session: custom } = await createAgentSession({
29
38
  tools: [readTool, bashTool, grepTool],
30
39
  sessionManager: SessionManager.inMemory(),
31
40
  });
32
41
  console.log("Custom tools session created");
33
42
 
43
+ // With custom cwd - MUST use factory functions!
44
+ const customCwd = "/path/to/project";
45
+ const { session: customCwdSession } = await createAgentSession({
46
+ cwd: customCwd,
47
+ tools: createCodingTools(customCwd), // Tools resolve paths relative to customCwd
48
+ sessionManager: SessionManager.inMemory(),
49
+ });
50
+ console.log("Custom cwd session created");
51
+
52
+ // Or pick specific tools for custom cwd
53
+ const { session: specificTools } = await createAgentSession({
54
+ cwd: customCwd,
55
+ tools: [createReadTool(customCwd), createBashTool(customCwd), createGrepTool(customCwd)],
56
+ sessionManager: SessionManager.inMemory(),
57
+ });
58
+ console.log("Specific tools with custom cwd session created");
59
+
34
60
  // Inline custom tool (needs TypeBox schema)
35
61
  const weatherTool: CustomAgentTool = {
36
62
  name: "get_weather",
@@ -3,6 +3,10 @@
3
3
  *
4
4
  * Replace everything - no discovery, explicit configuration.
5
5
  * Still uses OAuth from ~/.pi/agent for convenience.
6
+ *
7
+ * IMPORTANT: When providing `tools` with a custom `cwd`, use the tool factory
8
+ * functions (createReadTool, createBashTool, etc.) to ensure tools resolve
9
+ * paths relative to your cwd.
6
10
  */
7
11
 
8
12
  import { Type } from "@sinclair/typebox";
@@ -13,8 +17,8 @@ import {
13
17
  findModel,
14
18
  SessionManager,
15
19
  SettingsManager,
16
- readTool,
17
- bashTool,
20
+ createReadTool,
21
+ createBashTool,
18
22
  type HookFactory,
19
23
  type CustomAgentTool,
20
24
  } from "../../src/index.js";
@@ -60,8 +64,11 @@ const settingsManager = SettingsManager.inMemory({
60
64
  retry: { enabled: true, maxRetries: 2 },
61
65
  });
62
66
 
67
+ // When using a custom cwd with explicit tools, use the factory functions
68
+ const cwd = process.cwd();
69
+
63
70
  const { session } = await createAgentSession({
64
- cwd: process.cwd(),
71
+ cwd,
65
72
  agentDir: "/tmp/my-agent",
66
73
 
67
74
  model,
@@ -71,7 +78,8 @@ const { session } = await createAgentSession({
71
78
  systemPrompt: `You are a minimal assistant.
72
79
  Available: read, bash, status. Be concise.`,
73
80
 
74
- tools: [readTool, bashTool],
81
+ // Use factory functions with the same cwd to ensure path resolution works correctly
82
+ tools: [createReadTool(cwd), createBashTool(cwd)],
75
83
  customTools: [{ tool: statusTool }],
76
84
  hooks: [{ factory: auditHook }],
77
85
  skills: [],
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mariozechner/pi-coding-agent",
3
- "version": "0.26.0",
3
+ "version": "0.26.1",
4
4
  "description": "Coding agent CLI with read, bash, edit, write tools and session management",
5
5
  "type": "module",
6
6
  "piConfig": {
@@ -39,9 +39,9 @@
39
39
  "prepublishOnly": "npm run clean && npm run build"
40
40
  },
41
41
  "dependencies": {
42
- "@mariozechner/pi-agent-core": "^0.26.0",
43
- "@mariozechner/pi-ai": "^0.26.0",
44
- "@mariozechner/pi-tui": "^0.26.0",
42
+ "@mariozechner/pi-agent-core": "^0.26.1",
43
+ "@mariozechner/pi-ai": "^0.26.1",
44
+ "@mariozechner/pi-tui": "^0.26.1",
45
45
  "chalk": "^5.5.0",
46
46
  "cli-highlight": "^2.1.11",
47
47
  "diff": "^8.0.2",