@agimon-ai/po-ui 0.0.0-alpha.2 → 0.0.0-alpha.21

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 (92) hide show
  1. package/LICENSE +149 -21
  2. package/README.md +1 -1
  3. package/dist/apiContracts.cjs +1 -1
  4. package/dist/apiContracts.cjs.map +1 -1
  5. package/dist/apiContracts.d.mts +1 -1
  6. package/dist/apiContracts.mjs +1 -1
  7. package/dist/apiContracts.mjs.map +1 -1
  8. package/dist/config.d.mts +2 -2
  9. package/dist/config.mjs +1 -2
  10. package/dist/extensionName.cjs +66 -16
  11. package/dist/extensionName.cjs.map +1 -1
  12. package/dist/extensionName.d.mts +13 -1
  13. package/dist/extensionName.d.mts.map +1 -1
  14. package/dist/extensionName.mjs +64 -16
  15. package/dist/extensionName.mjs.map +1 -1
  16. package/dist/extensions/mcp-ui.mjs.map +1 -1
  17. package/dist/extensions/mcp.cjs +3 -3
  18. package/dist/extensions/mcp.cjs.map +1 -1
  19. package/dist/extensions/mcp.d.mts +1 -1
  20. package/dist/extensions/mcp.mjs +4 -4
  21. package/dist/extensions/mcp.mjs.map +1 -1
  22. package/dist/extensions/server.cjs +7 -7
  23. package/dist/extensions/server.cjs.map +1 -1
  24. package/dist/extensions/server.d.mts +2 -2
  25. package/dist/extensions/server.d.mts.map +1 -1
  26. package/dist/extensions/server.mjs +7 -7
  27. package/dist/extensions/server.mjs.map +1 -1
  28. package/dist/extensions/web.mjs +11 -11
  29. package/dist/extensions/web.mjs.map +1 -1
  30. package/dist/footer.d.mts +2 -2
  31. package/dist/footer.mjs +1 -2
  32. package/dist/{harnessMetadata-Dw9Rb1nW.cjs → harnessMetadata-B3mBGrS3.cjs} +4 -4
  33. package/dist/harnessMetadata-B3mBGrS3.cjs.map +1 -0
  34. package/dist/{harnessMetadata-CzsdGAxL.d.mts → harnessMetadata-BzMgOB0W.d.mts} +4 -4
  35. package/dist/harnessMetadata-BzMgOB0W.d.mts.map +1 -0
  36. package/dist/{harnessMetadata-DkMSJutN.mjs → harnessMetadata-Ccv_j7WP.mjs} +3 -3
  37. package/dist/harnessMetadata-Ccv_j7WP.mjs.map +1 -0
  38. package/dist/harnessMetadata.cjs +2 -2
  39. package/dist/harnessMetadata.d.mts +2 -2
  40. package/dist/harnessMetadata.mjs +1 -2
  41. package/dist/{index-Bx49wmE7.d.mts → index-2GW2dj0I.d.mts} +9 -9
  42. package/dist/{index-Bx49wmE7.d.mts.map → index-2GW2dj0I.d.mts.map} +1 -1
  43. package/dist/{index-Dpzvl-vg.d.mts → index-DFSkSBBh.d.mts} +19 -11
  44. package/dist/index-DFSkSBBh.d.mts.map +1 -0
  45. package/dist/index.cjs +6 -6
  46. package/dist/index.d.mts +8 -8
  47. package/dist/index.mjs +5 -5
  48. package/dist/leader.d.mts +2 -2
  49. package/dist/leaderRegistry.cjs +2 -2
  50. package/dist/leaderRegistry.cjs.map +1 -1
  51. package/dist/leaderRegistry.d.mts +15 -15
  52. package/dist/leaderRegistry.d.mts.map +1 -1
  53. package/dist/leaderRegistry.mjs +2 -2
  54. package/dist/leaderRegistry.mjs.map +1 -1
  55. package/dist/logSinkTelemetry.cjs +1 -1
  56. package/dist/logSinkTelemetry.d.mts +1 -1
  57. package/dist/logSinkTelemetry.mjs +1 -2
  58. package/dist/skills.cjs +8 -8
  59. package/dist/skills.d.mts +2 -2
  60. package/dist/skills.mjs +1 -2
  61. package/dist/{telemetry-DMR6cIT1.cjs → telemetry-EXlQc9s0.cjs} +8 -8
  62. package/dist/telemetry-EXlQc9s0.cjs.map +1 -0
  63. package/dist/{telemetry--EgKB9ei.mjs → telemetry-RiFqd0cg.mjs} +9 -9
  64. package/dist/telemetry-RiFqd0cg.mjs.map +1 -0
  65. package/dist/{theme-Byj_dBlT.mjs → theme-BX_hfErv.mjs} +60 -40
  66. package/dist/theme-BX_hfErv.mjs.map +1 -0
  67. package/dist/{theme-2wveit5V.cjs → theme-BfC_GGQ4.cjs} +66 -40
  68. package/dist/theme-BfC_GGQ4.cjs.map +1 -0
  69. package/dist/theme.cjs +2 -1
  70. package/dist/theme.d.mts +2 -2
  71. package/dist/theme.mjs +1 -2
  72. package/dist/toolInventory.mjs +1 -2
  73. package/dist/{uiState-G_Pso-5i.mjs → uiState-C7I5WcMl.mjs} +3 -3
  74. package/dist/uiState-C7I5WcMl.mjs.map +1 -0
  75. package/dist/{uiState-rUwgKslb.cjs → uiState-CCytmxyX.cjs} +4 -4
  76. package/dist/uiState-CCytmxyX.cjs.map +1 -0
  77. package/dist/{uiState-Binu4nUb.d.mts → uiState-DbjaVyxl.d.mts} +3 -3
  78. package/dist/{uiState-Binu4nUb.d.mts.map → uiState-DbjaVyxl.d.mts.map} +1 -1
  79. package/dist/uiState.cjs +2 -2
  80. package/dist/uiState.d.mts +2 -2
  81. package/dist/uiState.mjs +1 -2
  82. package/package.json +19 -19
  83. package/dist/harnessMetadata-CzsdGAxL.d.mts.map +0 -1
  84. package/dist/harnessMetadata-DkMSJutN.mjs.map +0 -1
  85. package/dist/harnessMetadata-Dw9Rb1nW.cjs.map +0 -1
  86. package/dist/index-Dpzvl-vg.d.mts.map +0 -1
  87. package/dist/telemetry--EgKB9ei.mjs.map +0 -1
  88. package/dist/telemetry-DMR6cIT1.cjs.map +0 -1
  89. package/dist/theme-2wveit5V.cjs.map +0 -1
  90. package/dist/theme-Byj_dBlT.mjs.map +0 -1
  91. package/dist/uiState-G_Pso-5i.mjs.map +0 -1
  92. package/dist/uiState-rUwgKslb.cjs.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"mcp.cjs","names":["createWriteTool","toDoomHeadlessToolResult","createFindTool","createLsTool","defineMcpTool","defineMcpTool","defineMcpTool","defineMcpPlugin","toolFind","toolLs","toolWrite"],"sources":["../../src/extensions/workspaces/sessions/(backend)/_lib/mcpFileTools.ts","../../src/extensions/workspaces/sessions/(backend)/tool/find.mcp.ts","../../src/extensions/workspaces/sessions/(backend)/tool/ls.mcp.ts","../../src/extensions/workspaces/sessions/(backend)/tool/write.mcp.ts","../../generated/mcp.ts"],"sourcesContent":["import { toDoomHeadlessToolResult, type DoomHeadlessTool } from '@agimon-ai/po-core/headless';\nimport type { DoomMcpPluginContext } from '@agimon-ai/po-core/mcpFacet';\nimport { createFindTool, createLsTool, createWriteTool } from '@earendil-works/pi-coding-agent';\n\n// Pi's `outputSchema` is a TypeBox schema, not an MCP output schema, so it stays off the MCP surface.\n\nexport function createMcpWriteTool(\n context: DoomMcpPluginContext,\n): DoomHeadlessTool<ReturnType<typeof createWriteTool>['parameters']> {\n const { outputSchema: _outputSchema, ...tool } = createWriteTool(context.execution.cwd);\n return {\n ...tool,\n description:\n \"Create or fully overwrite a file in the Po session's repository on the host machine, creating parent folders. Use this server's edit tool to change part of an existing file.\",\n executionMode: tool.executionMode === 'sequential' ? 'serial' : tool.executionMode,\n async execute(toolCallId, parameters, signal, onUpdate) {\n return toDoomHeadlessToolResult(\n await tool.execute(\n toolCallId,\n parameters,\n AbortSignal.any([context.signal, signal ?? context.signal]),\n onUpdate && ((partial) => onUpdate(toDoomHeadlessToolResult(partial))),\n ),\n );\n },\n };\n}\n\nexport function createMcpFindTool(\n context: DoomMcpPluginContext,\n): DoomHeadlessTool<ReturnType<typeof createFindTool>['parameters']> {\n const { outputSchema: _outputSchema, ...tool } = createFindTool(context.execution.cwd);\n return {\n ...tool,\n description:\n \"Find files by name or glob pattern in the Po session's repository on the host machine (locate paths). Respects .gitignore. Up to 1000 results by default, with output capped at 50KB.\",\n executionMode: tool.executionMode === 'sequential' ? 'serial' : tool.executionMode,\n async execute(toolCallId, parameters, signal, onUpdate) {\n return toDoomHeadlessToolResult(\n await tool.execute(\n toolCallId,\n parameters,\n AbortSignal.any([context.signal, signal ?? context.signal]),\n onUpdate && ((partial) => onUpdate(toDoomHeadlessToolResult(partial))),\n ),\n );\n },\n };\n}\n\nexport function createMcpLsTool(\n context: DoomMcpPluginContext,\n): DoomHeadlessTool<ReturnType<typeof createLsTool>['parameters']> {\n const { outputSchema: _outputSchema, ...tool } = createLsTool(context.execution.cwd);\n return {\n ...tool,\n description:\n \"List a directory in the Po session's repository on the host machine (folder contents). Sorted, directories end with '/', dotfiles included. Up to 500 entries by default, with output capped at 50KB.\",\n executionMode: tool.executionMode === 'sequential' ? 'serial' : tool.executionMode,\n async execute(toolCallId, parameters, signal, onUpdate) {\n return toDoomHeadlessToolResult(\n await tool.execute(\n toolCallId,\n parameters,\n AbortSignal.any([context.signal, signal ?? context.signal]),\n onUpdate && ((partial) => onUpdate(toDoomHeadlessToolResult(partial))),\n ),\n );\n },\n };\n}\n","import type { DoomHeadlessTool } from '@agimon-ai/po-core/headless';\nimport { defineMcpTool, type DoomMcpPluginContext } from '@agimon-ai/po-core/mcpFacet';\n\nimport { createMcpFindTool } from '../_lib/mcpFileTools';\n\nexport default defineMcpTool<DoomHeadlessTool['parameters'], DoomMcpPluginContext>(createMcpFindTool);\n","import type { DoomHeadlessTool } from '@agimon-ai/po-core/headless';\nimport { defineMcpTool, type DoomMcpPluginContext } from '@agimon-ai/po-core/mcpFacet';\n\nimport { createMcpLsTool } from '../_lib/mcpFileTools';\n\nexport default defineMcpTool<DoomHeadlessTool['parameters'], DoomMcpPluginContext>(createMcpLsTool);\n","import type { DoomHeadlessTool } from '@agimon-ai/po-core/headless';\nimport { defineMcpTool, type DoomMcpPluginContext } from '@agimon-ai/po-core/mcpFacet';\n\nimport { createMcpWriteTool } from '../_lib/mcpFileTools';\n\nexport default defineMcpTool<DoomHeadlessTool['parameters'], DoomMcpPluginContext>(createMcpWriteTool);\n","// Generated by @agimon-ai/po-build. Do not edit by hand.\nimport { defineMcpPlugin, type DoomMcpSessionPlugin } from '@agimon-ai/po-core/mcpFacet';\n\nimport toolFind from '../src/extensions/workspaces/sessions/(backend)/tool/find.mcp';\nimport toolLs from '../src/extensions/workspaces/sessions/(backend)/tool/ls.mcp';\nimport toolWrite from '../src/extensions/workspaces/sessions/(backend)/tool/write.mcp';\n\ntype Factory<T, C> = (context: C) => T;\nconst at = <T, C>(value: T | Factory<T, C>, context: C): T =>\n typeof value === 'function' ? (value as Factory<T, C>)(context) : value;\nconst via = <T>(identity: Record<string, unknown>, value: unknown): T =>\n (value === undefined ? undefined : { ...identity, ...(value as object) }) as T;\n\nconst withWidget = <T>(key: string, value: T): T => value === undefined ? value : ({\n ...value, _meta: { ...(value as { _meta?: object })._meta, [\"po/widget\"]: key },\n});\n\nexport const mcp = defineMcpPlugin({\n name: '@agimon-ai/po-ui',\n session: (context) => ({\n get tools(): DoomMcpSessionPlugin['tools'] { return [withWidget(\"@agimon-ai/po-ui/find\", via({ name: 'find' }, at(toolFind, context))), withWidget(\"@agimon-ai/po-ui/ls\", via({ name: 'ls' }, at(toolLs, context))), withWidget(\"@agimon-ai/po-ui/write\", via({ name: 'write' }, at(toolWrite, context)))]; },\n }) satisfies DoomMcpSessionPlugin,\n});\n\nexport default mcp;\n"],"mappings":";;;;;;;;AAMA,SAAgB,mBACd,SACoE;CACpE,MAAM,EAAE,cAAc,eAAe,GAAG,UAAA,GAASA,gCAAAA,gBAAAA,CAAgB,QAAQ,UAAU,GAAG;CACtF,OAAO;EACL,GAAG;EACH,aACE;EACF,eAAe,KAAK,kBAAkB,eAAe,WAAW,KAAK;EACrE,MAAM,QAAQ,YAAY,YAAY,QAAQ,UAAU;GACtD,QAAA,GAAOC,4BAAAA,yBAAAA,CACL,MAAM,KAAK,QACT,YACA,YACA,YAAY,IAAI,CAAC,QAAQ,QAAQ,UAAU,QAAQ,MAAM,CAAC,GAC1D,cAAc,YAAY,UAAA,GAASA,4BAAAA,yBAAAA,CAAyB,OAAO,CAAC,EACtE,CACF;EACF;CACF;AACF;AAEA,SAAgB,kBACd,SACmE;CACnE,MAAM,EAAE,cAAc,eAAe,GAAG,UAAA,GAASC,gCAAAA,eAAAA,CAAe,QAAQ,UAAU,GAAG;CACrF,OAAO;EACL,GAAG;EACH,aACE;EACF,eAAe,KAAK,kBAAkB,eAAe,WAAW,KAAK;EACrE,MAAM,QAAQ,YAAY,YAAY,QAAQ,UAAU;GACtD,QAAA,GAAOD,4BAAAA,yBAAAA,CACL,MAAM,KAAK,QACT,YACA,YACA,YAAY,IAAI,CAAC,QAAQ,QAAQ,UAAU,QAAQ,MAAM,CAAC,GAC1D,cAAc,YAAY,UAAA,GAASA,4BAAAA,yBAAAA,CAAyB,OAAO,CAAC,EACtE,CACF;EACF;CACF;AACF;AAEA,SAAgB,gBACd,SACiE;CACjE,MAAM,EAAE,cAAc,eAAe,GAAG,UAAA,GAASE,gCAAAA,aAAAA,CAAa,QAAQ,UAAU,GAAG;CACnF,OAAO;EACL,GAAG;EACH,aACE;EACF,eAAe,KAAK,kBAAkB,eAAe,WAAW,KAAK;EACrE,MAAM,QAAQ,YAAY,YAAY,QAAQ,UAAU;GACtD,QAAA,GAAOF,4BAAAA,yBAAAA,CACL,MAAM,KAAK,QACT,YACA,YACA,YAAY,IAAI,CAAC,QAAQ,QAAQ,UAAU,QAAQ,MAAM,CAAC,GAC1D,cAAc,YAAY,UAAA,GAASA,4BAAAA,yBAAAA,CAAyB,OAAO,CAAC,EACtE,CACF;EACF;CACF;AACF;;;ACjEA,IAAA,oBAAA,GAAeG,4BAAAA,cAAAA,CAAoE,iBAAiB;;;ACApG,IAAA,kBAAA,GAAeC,4BAAAA,cAAAA,CAAoE,eAAe;;;ACAlG,IAAA,qBAAA,GAAeC,4BAAAA,cAAAA,CAAoE,kBAAkB;;;ACGrG,MAAM,MAAY,OAA0B,YAC1C,OAAO,UAAU,aAAc,MAAwB,OAAO,IAAI;AACpE,MAAM,OAAU,UAAmC,UAChD,UAAU,KAAA,IAAY,KAAA,IAAY;CAAE,GAAG;CAAU,GAAI;AAAiB;AAEzE,MAAM,cAAiB,KAAa,UAAgB,UAAU,KAAA,IAAY,QAAS;CACjF,GAAG;CAAO,OAAO;EAAE,GAAI,MAA6B;GAAQ,cAAc;CAAI;AAChF;AAEA,MAAa,OAAA,GAAMC,4BAAAA,gBAAAA,CAAgB;CACjC,MAAM;CACN,UAAU,aAAa,EACrB,IAAI,QAAuC;EAAE,OAAO;GAAC,WAAW,yBAAyB,IAAI,EAAE,MAAM,OAAO,GAAG,GAAGC,kBAAU,OAAO,CAAC,CAAC;GAAG,WAAW,uBAAuB,IAAI,EAAE,MAAM,KAAK,GAAG,GAAGC,gBAAQ,OAAO,CAAC,CAAC;GAAG,WAAW,0BAA0B,IAAI,EAAE,MAAM,QAAQ,GAAG,GAAGC,mBAAW,OAAO,CAAC,CAAC;EAAC;CAAG,EAC9S;AACF,CAAC"}
1
+ {"version":3,"file":"mcp.cjs","names":["createWriteTool","toPoHeadlessToolResult","createFindTool","createLsTool","defineMcpTool","defineMcpTool","defineMcpTool","defineMcpPlugin","toolFind","toolLs","toolWrite"],"sources":["../../src/extensions/workspaces/sessions/(backend)/_lib/mcpFileTools.ts","../../src/extensions/workspaces/sessions/(backend)/tool/find.mcp.ts","../../src/extensions/workspaces/sessions/(backend)/tool/ls.mcp.ts","../../src/extensions/workspaces/sessions/(backend)/tool/write.mcp.ts","../../generated/mcp.ts"],"sourcesContent":["import { toPoHeadlessToolResult, type PoHeadlessTool } from '@agimon-ai/po-core/headless';\nimport type { PoMcpPluginContext } from '@agimon-ai/po-core/mcpFacet';\nimport { createFindTool, createLsTool, createWriteTool } from '@earendil-works/pi-coding-agent';\n\n// Pi's `outputSchema` is a TypeBox schema, not an MCP output schema, so it stays off the MCP surface.\n\nexport function createMcpWriteTool(\n context: PoMcpPluginContext,\n): PoHeadlessTool<ReturnType<typeof createWriteTool>['parameters']> {\n const { outputSchema: _outputSchema, ...tool } = createWriteTool(context.execution.cwd);\n return {\n ...tool,\n description:\n \"Create or fully overwrite a file in the Po session's repository on the host machine, creating parent folders. Use this server's edit tool to change part of an existing file.\",\n executionMode: tool.executionMode === 'sequential' ? 'serial' : tool.executionMode,\n async execute(toolCallId, parameters, signal, onUpdate) {\n return toPoHeadlessToolResult(\n await tool.execute(\n toolCallId,\n parameters,\n AbortSignal.any([context.signal, signal ?? context.signal]),\n onUpdate && ((partial) => onUpdate(toPoHeadlessToolResult(partial))),\n ),\n );\n },\n };\n}\n\nexport function createMcpFindTool(\n context: PoMcpPluginContext,\n): PoHeadlessTool<ReturnType<typeof createFindTool>['parameters']> {\n const { outputSchema: _outputSchema, ...tool } = createFindTool(context.execution.cwd);\n return {\n ...tool,\n description:\n \"Find files by name or glob pattern in the Po session's repository on the host machine (locate paths). Respects .gitignore. Up to 1000 results by default, with output capped at 50KB.\",\n executionMode: tool.executionMode === 'sequential' ? 'serial' : tool.executionMode,\n async execute(toolCallId, parameters, signal, onUpdate) {\n return toPoHeadlessToolResult(\n await tool.execute(\n toolCallId,\n parameters,\n AbortSignal.any([context.signal, signal ?? context.signal]),\n onUpdate && ((partial) => onUpdate(toPoHeadlessToolResult(partial))),\n ),\n );\n },\n };\n}\n\nexport function createMcpLsTool(\n context: PoMcpPluginContext,\n): PoHeadlessTool<ReturnType<typeof createLsTool>['parameters']> {\n const { outputSchema: _outputSchema, ...tool } = createLsTool(context.execution.cwd);\n return {\n ...tool,\n description:\n \"List a directory in the Po session's repository on the host machine (folder contents). Sorted, directories end with '/', dotfiles included. Up to 500 entries by default, with output capped at 50KB.\",\n executionMode: tool.executionMode === 'sequential' ? 'serial' : tool.executionMode,\n async execute(toolCallId, parameters, signal, onUpdate) {\n return toPoHeadlessToolResult(\n await tool.execute(\n toolCallId,\n parameters,\n AbortSignal.any([context.signal, signal ?? context.signal]),\n onUpdate && ((partial) => onUpdate(toPoHeadlessToolResult(partial))),\n ),\n );\n },\n };\n}\n","import type { PoHeadlessTool } from '@agimon-ai/po-core/headless';\nimport { defineMcpTool, type PoMcpPluginContext } from '@agimon-ai/po-core/mcpFacet';\n\nimport { createMcpFindTool } from '../_lib/mcpFileTools';\n\nexport default defineMcpTool<PoHeadlessTool['parameters'], PoMcpPluginContext>(createMcpFindTool);\n","import type { PoHeadlessTool } from '@agimon-ai/po-core/headless';\nimport { defineMcpTool, type PoMcpPluginContext } from '@agimon-ai/po-core/mcpFacet';\n\nimport { createMcpLsTool } from '../_lib/mcpFileTools';\n\nexport default defineMcpTool<PoHeadlessTool['parameters'], PoMcpPluginContext>(createMcpLsTool);\n","import type { PoHeadlessTool } from '@agimon-ai/po-core/headless';\nimport { defineMcpTool, type PoMcpPluginContext } from '@agimon-ai/po-core/mcpFacet';\n\nimport { createMcpWriteTool } from '../_lib/mcpFileTools';\n\nexport default defineMcpTool<PoHeadlessTool['parameters'], PoMcpPluginContext>(createMcpWriteTool);\n","// Generated by @agimon-ai/po-build. Do not edit by hand.\nimport { defineMcpPlugin, type PoMcpSessionPlugin } from '@agimon-ai/po-core/mcpFacet';\n\nimport toolFind from '../src/extensions/workspaces/sessions/(backend)/tool/find.mcp';\nimport toolLs from '../src/extensions/workspaces/sessions/(backend)/tool/ls.mcp';\nimport toolWrite from '../src/extensions/workspaces/sessions/(backend)/tool/write.mcp';\n\ntype Factory<T, C> = (context: C) => T;\nconst at = <T, C>(value: T | Factory<T, C>, context: C): T =>\n typeof value === 'function' ? (value as Factory<T, C>)(context) : value;\nconst via = <T>(identity: Record<string, unknown>, value: unknown): T =>\n (value === undefined ? undefined : { ...identity, ...(value as object) }) as T;\n\nconst withWidget = <T>(key: string, value: T): T => value === undefined ? value : ({\n ...value, _meta: { ...(value as { _meta?: object })._meta, [\"po/widget\"]: key },\n});\n\nexport const mcp = defineMcpPlugin({\n name: '@agimon-ai/po-ui',\n session: (context) => ({\n get tools(): PoMcpSessionPlugin['tools'] { return [withWidget(\"@agimon-ai/po-ui/find\", via({ name: 'find' }, at(toolFind, context))), withWidget(\"@agimon-ai/po-ui/ls\", via({ name: 'ls' }, at(toolLs, context))), withWidget(\"@agimon-ai/po-ui/write\", via({ name: 'write' }, at(toolWrite, context)))]; },\n }) satisfies PoMcpSessionPlugin,\n});\n\nexport default mcp;\n"],"mappings":";;;;;;;;AAMA,SAAgB,mBACd,SACkE;CAClE,MAAM,EAAE,cAAc,eAAe,GAAG,UAAA,GAASA,gCAAAA,gBAAAA,CAAgB,QAAQ,UAAU,GAAG;CACtF,OAAO;EACL,GAAG;EACH,aACE;EACF,eAAe,KAAK,kBAAkB,eAAe,WAAW,KAAK;EACrE,MAAM,QAAQ,YAAY,YAAY,QAAQ,UAAU;GACtD,QAAA,GAAOC,4BAAAA,uBAAAA,CACL,MAAM,KAAK,QACT,YACA,YACA,YAAY,IAAI,CAAC,QAAQ,QAAQ,UAAU,QAAQ,MAAM,CAAC,GAC1D,cAAc,YAAY,UAAA,GAASA,4BAAAA,uBAAAA,CAAuB,OAAO,CAAC,EACpE,CACF;EACF;CACF;AACF;AAEA,SAAgB,kBACd,SACiE;CACjE,MAAM,EAAE,cAAc,eAAe,GAAG,UAAA,GAASC,gCAAAA,eAAAA,CAAe,QAAQ,UAAU,GAAG;CACrF,OAAO;EACL,GAAG;EACH,aACE;EACF,eAAe,KAAK,kBAAkB,eAAe,WAAW,KAAK;EACrE,MAAM,QAAQ,YAAY,YAAY,QAAQ,UAAU;GACtD,QAAA,GAAOD,4BAAAA,uBAAAA,CACL,MAAM,KAAK,QACT,YACA,YACA,YAAY,IAAI,CAAC,QAAQ,QAAQ,UAAU,QAAQ,MAAM,CAAC,GAC1D,cAAc,YAAY,UAAA,GAASA,4BAAAA,uBAAAA,CAAuB,OAAO,CAAC,EACpE,CACF;EACF;CACF;AACF;AAEA,SAAgB,gBACd,SAC+D;CAC/D,MAAM,EAAE,cAAc,eAAe,GAAG,UAAA,GAASE,gCAAAA,aAAAA,CAAa,QAAQ,UAAU,GAAG;CACnF,OAAO;EACL,GAAG;EACH,aACE;EACF,eAAe,KAAK,kBAAkB,eAAe,WAAW,KAAK;EACrE,MAAM,QAAQ,YAAY,YAAY,QAAQ,UAAU;GACtD,QAAA,GAAOF,4BAAAA,uBAAAA,CACL,MAAM,KAAK,QACT,YACA,YACA,YAAY,IAAI,CAAC,QAAQ,QAAQ,UAAU,QAAQ,MAAM,CAAC,GAC1D,cAAc,YAAY,UAAA,GAASA,4BAAAA,uBAAAA,CAAuB,OAAO,CAAC,EACpE,CACF;EACF;CACF;AACF;;;ACjEA,IAAA,oBAAA,GAAeG,4BAAAA,cAAAA,CAAgE,iBAAiB;;;ACAhG,IAAA,kBAAA,GAAeC,4BAAAA,cAAAA,CAAgE,eAAe;;;ACA9F,IAAA,qBAAA,GAAeC,4BAAAA,cAAAA,CAAgE,kBAAkB;;;ACGjG,MAAM,MAAY,OAA0B,YAC1C,OAAO,UAAU,aAAc,MAAwB,OAAO,IAAI;AACpE,MAAM,OAAU,UAAmC,UAChD,UAAU,KAAA,IAAY,KAAA,IAAY;CAAE,GAAG;CAAU,GAAI;AAAiB;AAEzE,MAAM,cAAiB,KAAa,UAAgB,UAAU,KAAA,IAAY,QAAS;CACjF,GAAG;CAAO,OAAO;EAAE,GAAI,MAA6B;GAAQ,cAAc;CAAI;AAChF;AAEA,MAAa,OAAA,GAAMC,4BAAAA,gBAAAA,CAAgB;CACjC,MAAM;CACN,UAAU,aAAa,EACrB,IAAI,QAAqC;EAAE,OAAO;GAAC,WAAW,yBAAyB,IAAI,EAAE,MAAM,OAAO,GAAG,GAAGC,kBAAU,OAAO,CAAC,CAAC;GAAG,WAAW,uBAAuB,IAAI,EAAE,MAAM,KAAK,GAAG,GAAGC,gBAAQ,OAAO,CAAC,CAAC;GAAG,WAAW,0BAA0B,IAAI,EAAE,MAAM,QAAQ,GAAG,GAAGC,mBAAW,OAAO,CAAC,CAAC;EAAC;CAAG,EAC5S;AACF,CAAC"}
@@ -1,5 +1,5 @@
1
1
  //#region generated/mcp.d.ts
2
- export declare const mcp: import("@agimon-ai/po-core/mcpFacet").DoomMcpPluginDefinition;
2
+ export declare const mcp: import("@agimon-ai/po-core/mcpFacet").PoMcpPluginDefinition;
3
3
  //#endregion
4
4
  export { mcp as default };
5
5
  //# sourceMappingURL=mcp.d.mts.map
@@ -1,5 +1,5 @@
1
1
  import { defineMcpPlugin, defineMcpTool } from "@agimon-ai/po-core/mcpFacet";
2
- import { toDoomHeadlessToolResult } from "@agimon-ai/po-core/headless";
2
+ import { toPoHeadlessToolResult } from "@agimon-ai/po-core/headless";
3
3
  import { createFindTool, createLsTool, createWriteTool } from "@earendil-works/pi-coding-agent";
4
4
  //#region src/extensions/workspaces/sessions/(backend)/_lib/mcpFileTools.ts
5
5
  function createMcpWriteTool(context) {
@@ -9,7 +9,7 @@ function createMcpWriteTool(context) {
9
9
  description: "Create or fully overwrite a file in the Po session's repository on the host machine, creating parent folders. Use this server's edit tool to change part of an existing file.",
10
10
  executionMode: tool.executionMode === "sequential" ? "serial" : tool.executionMode,
11
11
  async execute(toolCallId, parameters, signal, onUpdate) {
12
- return toDoomHeadlessToolResult(await tool.execute(toolCallId, parameters, AbortSignal.any([context.signal, signal ?? context.signal]), onUpdate && ((partial) => onUpdate(toDoomHeadlessToolResult(partial)))));
12
+ return toPoHeadlessToolResult(await tool.execute(toolCallId, parameters, AbortSignal.any([context.signal, signal ?? context.signal]), onUpdate && ((partial) => onUpdate(toPoHeadlessToolResult(partial)))));
13
13
  }
14
14
  };
15
15
  }
@@ -20,7 +20,7 @@ function createMcpFindTool(context) {
20
20
  description: "Find files by name or glob pattern in the Po session's repository on the host machine (locate paths). Respects .gitignore. Up to 1000 results by default, with output capped at 50KB.",
21
21
  executionMode: tool.executionMode === "sequential" ? "serial" : tool.executionMode,
22
22
  async execute(toolCallId, parameters, signal, onUpdate) {
23
- return toDoomHeadlessToolResult(await tool.execute(toolCallId, parameters, AbortSignal.any([context.signal, signal ?? context.signal]), onUpdate && ((partial) => onUpdate(toDoomHeadlessToolResult(partial)))));
23
+ return toPoHeadlessToolResult(await tool.execute(toolCallId, parameters, AbortSignal.any([context.signal, signal ?? context.signal]), onUpdate && ((partial) => onUpdate(toPoHeadlessToolResult(partial)))));
24
24
  }
25
25
  };
26
26
  }
@@ -31,7 +31,7 @@ function createMcpLsTool(context) {
31
31
  description: "List a directory in the Po session's repository on the host machine (folder contents). Sorted, directories end with '/', dotfiles included. Up to 500 entries by default, with output capped at 50KB.",
32
32
  executionMode: tool.executionMode === "sequential" ? "serial" : tool.executionMode,
33
33
  async execute(toolCallId, parameters, signal, onUpdate) {
34
- return toDoomHeadlessToolResult(await tool.execute(toolCallId, parameters, AbortSignal.any([context.signal, signal ?? context.signal]), onUpdate && ((partial) => onUpdate(toDoomHeadlessToolResult(partial)))));
34
+ return toPoHeadlessToolResult(await tool.execute(toolCallId, parameters, AbortSignal.any([context.signal, signal ?? context.signal]), onUpdate && ((partial) => onUpdate(toPoHeadlessToolResult(partial)))));
35
35
  }
36
36
  };
37
37
  }
@@ -1 +1 @@
1
- {"version":3,"file":"mcp.mjs","names":["toolFind","toolLs","toolWrite"],"sources":["../../src/extensions/workspaces/sessions/(backend)/_lib/mcpFileTools.ts","../../src/extensions/workspaces/sessions/(backend)/tool/find.mcp.ts","../../src/extensions/workspaces/sessions/(backend)/tool/ls.mcp.ts","../../src/extensions/workspaces/sessions/(backend)/tool/write.mcp.ts","../../generated/mcp.ts"],"sourcesContent":["import { toDoomHeadlessToolResult, type DoomHeadlessTool } from '@agimon-ai/po-core/headless';\nimport type { DoomMcpPluginContext } from '@agimon-ai/po-core/mcpFacet';\nimport { createFindTool, createLsTool, createWriteTool } from '@earendil-works/pi-coding-agent';\n\n// Pi's `outputSchema` is a TypeBox schema, not an MCP output schema, so it stays off the MCP surface.\n\nexport function createMcpWriteTool(\n context: DoomMcpPluginContext,\n): DoomHeadlessTool<ReturnType<typeof createWriteTool>['parameters']> {\n const { outputSchema: _outputSchema, ...tool } = createWriteTool(context.execution.cwd);\n return {\n ...tool,\n description:\n \"Create or fully overwrite a file in the Po session's repository on the host machine, creating parent folders. Use this server's edit tool to change part of an existing file.\",\n executionMode: tool.executionMode === 'sequential' ? 'serial' : tool.executionMode,\n async execute(toolCallId, parameters, signal, onUpdate) {\n return toDoomHeadlessToolResult(\n await tool.execute(\n toolCallId,\n parameters,\n AbortSignal.any([context.signal, signal ?? context.signal]),\n onUpdate && ((partial) => onUpdate(toDoomHeadlessToolResult(partial))),\n ),\n );\n },\n };\n}\n\nexport function createMcpFindTool(\n context: DoomMcpPluginContext,\n): DoomHeadlessTool<ReturnType<typeof createFindTool>['parameters']> {\n const { outputSchema: _outputSchema, ...tool } = createFindTool(context.execution.cwd);\n return {\n ...tool,\n description:\n \"Find files by name or glob pattern in the Po session's repository on the host machine (locate paths). Respects .gitignore. Up to 1000 results by default, with output capped at 50KB.\",\n executionMode: tool.executionMode === 'sequential' ? 'serial' : tool.executionMode,\n async execute(toolCallId, parameters, signal, onUpdate) {\n return toDoomHeadlessToolResult(\n await tool.execute(\n toolCallId,\n parameters,\n AbortSignal.any([context.signal, signal ?? context.signal]),\n onUpdate && ((partial) => onUpdate(toDoomHeadlessToolResult(partial))),\n ),\n );\n },\n };\n}\n\nexport function createMcpLsTool(\n context: DoomMcpPluginContext,\n): DoomHeadlessTool<ReturnType<typeof createLsTool>['parameters']> {\n const { outputSchema: _outputSchema, ...tool } = createLsTool(context.execution.cwd);\n return {\n ...tool,\n description:\n \"List a directory in the Po session's repository on the host machine (folder contents). Sorted, directories end with '/', dotfiles included. Up to 500 entries by default, with output capped at 50KB.\",\n executionMode: tool.executionMode === 'sequential' ? 'serial' : tool.executionMode,\n async execute(toolCallId, parameters, signal, onUpdate) {\n return toDoomHeadlessToolResult(\n await tool.execute(\n toolCallId,\n parameters,\n AbortSignal.any([context.signal, signal ?? context.signal]),\n onUpdate && ((partial) => onUpdate(toDoomHeadlessToolResult(partial))),\n ),\n );\n },\n };\n}\n","import type { DoomHeadlessTool } from '@agimon-ai/po-core/headless';\nimport { defineMcpTool, type DoomMcpPluginContext } from '@agimon-ai/po-core/mcpFacet';\n\nimport { createMcpFindTool } from '../_lib/mcpFileTools';\n\nexport default defineMcpTool<DoomHeadlessTool['parameters'], DoomMcpPluginContext>(createMcpFindTool);\n","import type { DoomHeadlessTool } from '@agimon-ai/po-core/headless';\nimport { defineMcpTool, type DoomMcpPluginContext } from '@agimon-ai/po-core/mcpFacet';\n\nimport { createMcpLsTool } from '../_lib/mcpFileTools';\n\nexport default defineMcpTool<DoomHeadlessTool['parameters'], DoomMcpPluginContext>(createMcpLsTool);\n","import type { DoomHeadlessTool } from '@agimon-ai/po-core/headless';\nimport { defineMcpTool, type DoomMcpPluginContext } from '@agimon-ai/po-core/mcpFacet';\n\nimport { createMcpWriteTool } from '../_lib/mcpFileTools';\n\nexport default defineMcpTool<DoomHeadlessTool['parameters'], DoomMcpPluginContext>(createMcpWriteTool);\n","// Generated by @agimon-ai/po-build. Do not edit by hand.\nimport { defineMcpPlugin, type DoomMcpSessionPlugin } from '@agimon-ai/po-core/mcpFacet';\n\nimport toolFind from '../src/extensions/workspaces/sessions/(backend)/tool/find.mcp';\nimport toolLs from '../src/extensions/workspaces/sessions/(backend)/tool/ls.mcp';\nimport toolWrite from '../src/extensions/workspaces/sessions/(backend)/tool/write.mcp';\n\ntype Factory<T, C> = (context: C) => T;\nconst at = <T, C>(value: T | Factory<T, C>, context: C): T =>\n typeof value === 'function' ? (value as Factory<T, C>)(context) : value;\nconst via = <T>(identity: Record<string, unknown>, value: unknown): T =>\n (value === undefined ? undefined : { ...identity, ...(value as object) }) as T;\n\nconst withWidget = <T>(key: string, value: T): T => value === undefined ? value : ({\n ...value, _meta: { ...(value as { _meta?: object })._meta, [\"po/widget\"]: key },\n});\n\nexport const mcp = defineMcpPlugin({\n name: '@agimon-ai/po-ui',\n session: (context) => ({\n get tools(): DoomMcpSessionPlugin['tools'] { return [withWidget(\"@agimon-ai/po-ui/find\", via({ name: 'find' }, at(toolFind, context))), withWidget(\"@agimon-ai/po-ui/ls\", via({ name: 'ls' }, at(toolLs, context))), withWidget(\"@agimon-ai/po-ui/write\", via({ name: 'write' }, at(toolWrite, context)))]; },\n }) satisfies DoomMcpSessionPlugin,\n});\n\nexport default mcp;\n"],"mappings":";;;;AAMA,SAAgB,mBACd,SACoE;CACpE,MAAM,EAAE,cAAc,eAAe,GAAG,SAAS,gBAAgB,QAAQ,UAAU,GAAG;CACtF,OAAO;EACL,GAAG;EACH,aACE;EACF,eAAe,KAAK,kBAAkB,eAAe,WAAW,KAAK;EACrE,MAAM,QAAQ,YAAY,YAAY,QAAQ,UAAU;GACtD,OAAO,yBACL,MAAM,KAAK,QACT,YACA,YACA,YAAY,IAAI,CAAC,QAAQ,QAAQ,UAAU,QAAQ,MAAM,CAAC,GAC1D,cAAc,YAAY,SAAS,yBAAyB,OAAO,CAAC,EACtE,CACF;EACF;CACF;AACF;AAEA,SAAgB,kBACd,SACmE;CACnE,MAAM,EAAE,cAAc,eAAe,GAAG,SAAS,eAAe,QAAQ,UAAU,GAAG;CACrF,OAAO;EACL,GAAG;EACH,aACE;EACF,eAAe,KAAK,kBAAkB,eAAe,WAAW,KAAK;EACrE,MAAM,QAAQ,YAAY,YAAY,QAAQ,UAAU;GACtD,OAAO,yBACL,MAAM,KAAK,QACT,YACA,YACA,YAAY,IAAI,CAAC,QAAQ,QAAQ,UAAU,QAAQ,MAAM,CAAC,GAC1D,cAAc,YAAY,SAAS,yBAAyB,OAAO,CAAC,EACtE,CACF;EACF;CACF;AACF;AAEA,SAAgB,gBACd,SACiE;CACjE,MAAM,EAAE,cAAc,eAAe,GAAG,SAAS,aAAa,QAAQ,UAAU,GAAG;CACnF,OAAO;EACL,GAAG;EACH,aACE;EACF,eAAe,KAAK,kBAAkB,eAAe,WAAW,KAAK;EACrE,MAAM,QAAQ,YAAY,YAAY,QAAQ,UAAU;GACtD,OAAO,yBACL,MAAM,KAAK,QACT,YACA,YACA,YAAY,IAAI,CAAC,QAAQ,QAAQ,UAAU,QAAQ,MAAM,CAAC,GAC1D,cAAc,YAAY,SAAS,yBAAyB,OAAO,CAAC,EACtE,CACF;EACF;CACF;AACF;;;ACjEA,IAAA,mBAAe,cAAoE,iBAAiB;;;ACApG,IAAA,iBAAe,cAAoE,eAAe;;;ACAlG,IAAA,oBAAe,cAAoE,kBAAkB;;;ACGrG,MAAM,MAAY,OAA0B,YAC1C,OAAO,UAAU,aAAc,MAAwB,OAAO,IAAI;AACpE,MAAM,OAAU,UAAmC,UAChD,UAAU,KAAA,IAAY,KAAA,IAAY;CAAE,GAAG;CAAU,GAAI;AAAiB;AAEzE,MAAM,cAAiB,KAAa,UAAgB,UAAU,KAAA,IAAY,QAAS;CACjF,GAAG;CAAO,OAAO;EAAE,GAAI,MAA6B;GAAQ,cAAc;CAAI;AAChF;AAEA,MAAa,MAAM,gBAAgB;CACjC,MAAM;CACN,UAAU,aAAa,EACrB,IAAI,QAAuC;EAAE,OAAO;GAAC,WAAW,yBAAyB,IAAI,EAAE,MAAM,OAAO,GAAG,GAAGA,kBAAU,OAAO,CAAC,CAAC;GAAG,WAAW,uBAAuB,IAAI,EAAE,MAAM,KAAK,GAAG,GAAGC,gBAAQ,OAAO,CAAC,CAAC;GAAG,WAAW,0BAA0B,IAAI,EAAE,MAAM,QAAQ,GAAG,GAAGC,mBAAW,OAAO,CAAC,CAAC;EAAC;CAAG,EAC9S;AACF,CAAC"}
1
+ {"version":3,"file":"mcp.mjs","names":["toolFind","toolLs","toolWrite"],"sources":["../../src/extensions/workspaces/sessions/(backend)/_lib/mcpFileTools.ts","../../src/extensions/workspaces/sessions/(backend)/tool/find.mcp.ts","../../src/extensions/workspaces/sessions/(backend)/tool/ls.mcp.ts","../../src/extensions/workspaces/sessions/(backend)/tool/write.mcp.ts","../../generated/mcp.ts"],"sourcesContent":["import { toPoHeadlessToolResult, type PoHeadlessTool } from '@agimon-ai/po-core/headless';\nimport type { PoMcpPluginContext } from '@agimon-ai/po-core/mcpFacet';\nimport { createFindTool, createLsTool, createWriteTool } from '@earendil-works/pi-coding-agent';\n\n// Pi's `outputSchema` is a TypeBox schema, not an MCP output schema, so it stays off the MCP surface.\n\nexport function createMcpWriteTool(\n context: PoMcpPluginContext,\n): PoHeadlessTool<ReturnType<typeof createWriteTool>['parameters']> {\n const { outputSchema: _outputSchema, ...tool } = createWriteTool(context.execution.cwd);\n return {\n ...tool,\n description:\n \"Create or fully overwrite a file in the Po session's repository on the host machine, creating parent folders. Use this server's edit tool to change part of an existing file.\",\n executionMode: tool.executionMode === 'sequential' ? 'serial' : tool.executionMode,\n async execute(toolCallId, parameters, signal, onUpdate) {\n return toPoHeadlessToolResult(\n await tool.execute(\n toolCallId,\n parameters,\n AbortSignal.any([context.signal, signal ?? context.signal]),\n onUpdate && ((partial) => onUpdate(toPoHeadlessToolResult(partial))),\n ),\n );\n },\n };\n}\n\nexport function createMcpFindTool(\n context: PoMcpPluginContext,\n): PoHeadlessTool<ReturnType<typeof createFindTool>['parameters']> {\n const { outputSchema: _outputSchema, ...tool } = createFindTool(context.execution.cwd);\n return {\n ...tool,\n description:\n \"Find files by name or glob pattern in the Po session's repository on the host machine (locate paths). Respects .gitignore. Up to 1000 results by default, with output capped at 50KB.\",\n executionMode: tool.executionMode === 'sequential' ? 'serial' : tool.executionMode,\n async execute(toolCallId, parameters, signal, onUpdate) {\n return toPoHeadlessToolResult(\n await tool.execute(\n toolCallId,\n parameters,\n AbortSignal.any([context.signal, signal ?? context.signal]),\n onUpdate && ((partial) => onUpdate(toPoHeadlessToolResult(partial))),\n ),\n );\n },\n };\n}\n\nexport function createMcpLsTool(\n context: PoMcpPluginContext,\n): PoHeadlessTool<ReturnType<typeof createLsTool>['parameters']> {\n const { outputSchema: _outputSchema, ...tool } = createLsTool(context.execution.cwd);\n return {\n ...tool,\n description:\n \"List a directory in the Po session's repository on the host machine (folder contents). Sorted, directories end with '/', dotfiles included. Up to 500 entries by default, with output capped at 50KB.\",\n executionMode: tool.executionMode === 'sequential' ? 'serial' : tool.executionMode,\n async execute(toolCallId, parameters, signal, onUpdate) {\n return toPoHeadlessToolResult(\n await tool.execute(\n toolCallId,\n parameters,\n AbortSignal.any([context.signal, signal ?? context.signal]),\n onUpdate && ((partial) => onUpdate(toPoHeadlessToolResult(partial))),\n ),\n );\n },\n };\n}\n","import type { PoHeadlessTool } from '@agimon-ai/po-core/headless';\nimport { defineMcpTool, type PoMcpPluginContext } from '@agimon-ai/po-core/mcpFacet';\n\nimport { createMcpFindTool } from '../_lib/mcpFileTools';\n\nexport default defineMcpTool<PoHeadlessTool['parameters'], PoMcpPluginContext>(createMcpFindTool);\n","import type { PoHeadlessTool } from '@agimon-ai/po-core/headless';\nimport { defineMcpTool, type PoMcpPluginContext } from '@agimon-ai/po-core/mcpFacet';\n\nimport { createMcpLsTool } from '../_lib/mcpFileTools';\n\nexport default defineMcpTool<PoHeadlessTool['parameters'], PoMcpPluginContext>(createMcpLsTool);\n","import type { PoHeadlessTool } from '@agimon-ai/po-core/headless';\nimport { defineMcpTool, type PoMcpPluginContext } from '@agimon-ai/po-core/mcpFacet';\n\nimport { createMcpWriteTool } from '../_lib/mcpFileTools';\n\nexport default defineMcpTool<PoHeadlessTool['parameters'], PoMcpPluginContext>(createMcpWriteTool);\n","// Generated by @agimon-ai/po-build. Do not edit by hand.\nimport { defineMcpPlugin, type PoMcpSessionPlugin } from '@agimon-ai/po-core/mcpFacet';\n\nimport toolFind from '../src/extensions/workspaces/sessions/(backend)/tool/find.mcp';\nimport toolLs from '../src/extensions/workspaces/sessions/(backend)/tool/ls.mcp';\nimport toolWrite from '../src/extensions/workspaces/sessions/(backend)/tool/write.mcp';\n\ntype Factory<T, C> = (context: C) => T;\nconst at = <T, C>(value: T | Factory<T, C>, context: C): T =>\n typeof value === 'function' ? (value as Factory<T, C>)(context) : value;\nconst via = <T>(identity: Record<string, unknown>, value: unknown): T =>\n (value === undefined ? undefined : { ...identity, ...(value as object) }) as T;\n\nconst withWidget = <T>(key: string, value: T): T => value === undefined ? value : ({\n ...value, _meta: { ...(value as { _meta?: object })._meta, [\"po/widget\"]: key },\n});\n\nexport const mcp = defineMcpPlugin({\n name: '@agimon-ai/po-ui',\n session: (context) => ({\n get tools(): PoMcpSessionPlugin['tools'] { return [withWidget(\"@agimon-ai/po-ui/find\", via({ name: 'find' }, at(toolFind, context))), withWidget(\"@agimon-ai/po-ui/ls\", via({ name: 'ls' }, at(toolLs, context))), withWidget(\"@agimon-ai/po-ui/write\", via({ name: 'write' }, at(toolWrite, context)))]; },\n }) satisfies PoMcpSessionPlugin,\n});\n\nexport default mcp;\n"],"mappings":";;;;AAMA,SAAgB,mBACd,SACkE;CAClE,MAAM,EAAE,cAAc,eAAe,GAAG,SAAS,gBAAgB,QAAQ,UAAU,GAAG;CACtF,OAAO;EACL,GAAG;EACH,aACE;EACF,eAAe,KAAK,kBAAkB,eAAe,WAAW,KAAK;EACrE,MAAM,QAAQ,YAAY,YAAY,QAAQ,UAAU;GACtD,OAAO,uBACL,MAAM,KAAK,QACT,YACA,YACA,YAAY,IAAI,CAAC,QAAQ,QAAQ,UAAU,QAAQ,MAAM,CAAC,GAC1D,cAAc,YAAY,SAAS,uBAAuB,OAAO,CAAC,EACpE,CACF;EACF;CACF;AACF;AAEA,SAAgB,kBACd,SACiE;CACjE,MAAM,EAAE,cAAc,eAAe,GAAG,SAAS,eAAe,QAAQ,UAAU,GAAG;CACrF,OAAO;EACL,GAAG;EACH,aACE;EACF,eAAe,KAAK,kBAAkB,eAAe,WAAW,KAAK;EACrE,MAAM,QAAQ,YAAY,YAAY,QAAQ,UAAU;GACtD,OAAO,uBACL,MAAM,KAAK,QACT,YACA,YACA,YAAY,IAAI,CAAC,QAAQ,QAAQ,UAAU,QAAQ,MAAM,CAAC,GAC1D,cAAc,YAAY,SAAS,uBAAuB,OAAO,CAAC,EACpE,CACF;EACF;CACF;AACF;AAEA,SAAgB,gBACd,SAC+D;CAC/D,MAAM,EAAE,cAAc,eAAe,GAAG,SAAS,aAAa,QAAQ,UAAU,GAAG;CACnF,OAAO;EACL,GAAG;EACH,aACE;EACF,eAAe,KAAK,kBAAkB,eAAe,WAAW,KAAK;EACrE,MAAM,QAAQ,YAAY,YAAY,QAAQ,UAAU;GACtD,OAAO,uBACL,MAAM,KAAK,QACT,YACA,YACA,YAAY,IAAI,CAAC,QAAQ,QAAQ,UAAU,QAAQ,MAAM,CAAC,GAC1D,cAAc,YAAY,SAAS,uBAAuB,OAAO,CAAC,EACpE,CACF;EACF;CACF;AACF;;;ACjEA,IAAA,mBAAe,cAAgE,iBAAiB;;;ACAhG,IAAA,iBAAe,cAAgE,eAAe;;;ACA9F,IAAA,oBAAe,cAAgE,kBAAkB;;;ACGjG,MAAM,MAAY,OAA0B,YAC1C,OAAO,UAAU,aAAc,MAAwB,OAAO,IAAI;AACpE,MAAM,OAAU,UAAmC,UAChD,UAAU,KAAA,IAAY,KAAA,IAAY;CAAE,GAAG;CAAU,GAAI;AAAiB;AAEzE,MAAM,cAAiB,KAAa,UAAgB,UAAU,KAAA,IAAY,QAAS;CACjF,GAAG;CAAO,OAAO;EAAE,GAAI,MAA6B;GAAQ,cAAc;CAAI;AAChF;AAEA,MAAa,MAAM,gBAAgB;CACjC,MAAM;CACN,UAAU,aAAa,EACrB,IAAI,QAAqC;EAAE,OAAO;GAAC,WAAW,yBAAyB,IAAI,EAAE,MAAM,OAAO,GAAG,GAAGA,kBAAU,OAAO,CAAC,CAAC;GAAG,WAAW,uBAAuB,IAAI,EAAE,MAAM,KAAK,GAAG,GAAGC,gBAAQ,OAAO,CAAC,CAAC;GAAG,WAAW,0BAA0B,IAAI,EAAE,MAAM,QAAQ,GAAG,GAAGC,mBAAW,OAAO,CAAC,CAAC;EAAC;CAAG,EAC5S;AACF,CAAC"}
@@ -2,7 +2,7 @@ Object.defineProperties(exports, {
2
2
  __esModule: { value: true },
3
3
  [Symbol.toStringTag]: { value: "Module" }
4
4
  });
5
- let _agimon_ai_po_core_serverFacet = require("@agimon-ai/po-core/serverFacet");
5
+ let _agimon_ai_po_core_serverPlugin = require("@agimon-ai/po-core/serverPlugin");
6
6
  let _agimon_ai_po_core_extensionFile = require("@agimon-ai/po-core/extensionFile");
7
7
  let _agimon_ai_po_core_headless = require("@agimon-ai/po-core/headless");
8
8
  let _earendil_works_pi_coding_agent = require("@earendil-works/pi-coding-agent");
@@ -65,7 +65,7 @@ function createServerWriteTool() {
65
65
  promptGuidelines,
66
66
  async execute(toolCallId, parameters, signal, onUpdate, execution) {
67
67
  const tool = (0, _earendil_works_pi_coding_agent.createWriteTool)(execution.cwd);
68
- return (0, _agimon_ai_po_core_headless.toDoomHeadlessToolResult)(await tool.execute(toolCallId, parameters, signal, onUpdate && ((partial) => onUpdate((0, _agimon_ai_po_core_headless.toDoomHeadlessToolResult)(partial)))));
68
+ return (0, _agimon_ai_po_core_headless.toPoHeadlessToolResult)(await tool.execute(toolCallId, parameters, signal, onUpdate && ((partial) => onUpdate((0, _agimon_ai_po_core_headless.toPoHeadlessToolResult)(partial)))));
69
69
  }
70
70
  };
71
71
  }
@@ -80,7 +80,7 @@ function createServerFindTool() {
80
80
  promptGuidelines,
81
81
  async execute(toolCallId, parameters, signal, onUpdate, execution) {
82
82
  const tool = (0, _earendil_works_pi_coding_agent.createFindTool)(execution.cwd);
83
- return (0, _agimon_ai_po_core_headless.toDoomHeadlessToolResult)(await tool.execute(toolCallId, parameters, signal, onUpdate && ((partial) => onUpdate((0, _agimon_ai_po_core_headless.toDoomHeadlessToolResult)(partial)))));
83
+ return (0, _agimon_ai_po_core_headless.toPoHeadlessToolResult)(await tool.execute(toolCallId, parameters, signal, onUpdate && ((partial) => onUpdate((0, _agimon_ai_po_core_headless.toPoHeadlessToolResult)(partial)))));
84
84
  }
85
85
  };
86
86
  }
@@ -95,7 +95,7 @@ function createServerLsTool() {
95
95
  promptGuidelines,
96
96
  async execute(toolCallId, parameters, signal, onUpdate, execution) {
97
97
  const tool = (0, _earendil_works_pi_coding_agent.createLsTool)(execution.cwd);
98
- return (0, _agimon_ai_po_core_headless.toDoomHeadlessToolResult)(await tool.execute(toolCallId, parameters, signal, onUpdate && ((partial) => onUpdate((0, _agimon_ai_po_core_headless.toDoomHeadlessToolResult)(partial)))));
98
+ return (0, _agimon_ai_po_core_headless.toPoHeadlessToolResult)(await tool.execute(toolCallId, parameters, signal, onUpdate && ((partial) => onUpdate((0, _agimon_ai_po_core_headless.toPoHeadlessToolResult)(partial)))));
99
99
  }
100
100
  };
101
101
  }
@@ -115,7 +115,7 @@ const via = (identity, value) => value === void 0 ? void 0 : {
115
115
  ...identity,
116
116
  ...value
117
117
  };
118
- const facet = (0, _agimon_ai_po_core_serverFacet.defineServerPlugin)({
118
+ const serverPlugin = (0, _agimon_ai_po_core_serverPlugin.defineServerPlugin)({
119
119
  name: "@agimon-ai/po-ui",
120
120
  session: (context) => ({
121
121
  get commands() {
@@ -131,7 +131,7 @@ const facet = (0, _agimon_ai_po_core_serverFacet.defineServerPlugin)({
131
131
  })
132
132
  });
133
133
  //#endregion
134
- exports.default = facet;
135
- exports.facet = facet;
134
+ exports.default = serverPlugin;
135
+ exports.serverPlugin = serverPlugin;
136
136
 
137
137
  //# sourceMappingURL=server.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"server.cjs","names":["defineServerCommand","createWriteToolDefinition","createWriteTool","toDoomHeadlessToolResult","createFindToolDefinition","createFindTool","createLsToolDefinition","createLsTool","defineServerTool","defineServerTool","defineServerTool","defineServerPlugin","commandTools","toolFind","toolLs","toolWrite"],"sources":["../../src/constants/ui.ts","../../src/services/sessionToolInventory/index.ts","../../src/extensions/workspaces/sessions/(backend)/_lib/sessionInventory.ts","../../src/extensions/workspaces/sessions/(backend)/command/tools.server.ts","../../src/extensions/workspaces/sessions/(backend)/_lib/serverFileTools.ts","../../src/extensions/workspaces/sessions/(backend)/tool/find.server.ts","../../src/extensions/workspaces/sessions/(backend)/tool/ls.server.ts","../../src/extensions/workspaces/sessions/(backend)/tool/write.server.ts","../../generated/server.ts"],"sourcesContent":["export const LEADER_WIDGET_KEY = 'po-leader';\nexport const TUI_MODE = 'tui';\nexport const WIDGET_PLACEMENT = 'belowEditor';\nexport const WARNING_STYLE = 'warning';\nexport const THEME_ENVIRONMENT_KEY = 'PO_THEME';\nexport const HOTKEYS_COMMAND = 'hotkeys';\nexport const TOOLS_COMMAND = 'tools';\nexport const CONFIG_COMMAND = 'config';\nexport const SESSION_START_EVENT = 'session_start';\nexport const SESSION_MESSAGE_ENTRY = 'message';\nexport const INPUT_EVENT = 'input';\nexport const INTERACTIVE_INPUT_SOURCE = 'interactive';\nexport const TITLE_MESSAGE_MAX_LENGTH = 64;\nexport const TITLE_PREFIX = 'po';\nexport const BUILTIN_LEADER_COMMANDS: readonly string[] = [HOTKEYS_COMMAND];\nexport const PACKAGE_SOURCE = '@agimon-ai/po-ui';\n","export function toolNames(entries: readonly Record<string, unknown>[]): string[] {\n const names = new Set<string>();\n for (const entry of entries) {\n const message = entry.message;\n if (!message || typeof message !== 'object' || Array.isArray(message)) continue;\n const content = (message as { content?: unknown }).content;\n if (!Array.isArray(content)) continue;\n for (const block of content) {\n if (!block || typeof block !== 'object' || Array.isArray(block)) continue;\n const name = (block as { name?: unknown }).name;\n if (typeof name === 'string' && name) names.add(name);\n }\n }\n return [...names].sort();\n}\n","import type { DoomHeadlessCommand } from '@agimon-ai/po-core/headless';\nimport type { DoomServerSessionPlugin } from '@agimon-ai/po-core/serverFacet';\n\nimport { TOOLS_COMMAND } from '../../../../../constants/ui';\nimport { toolNames } from '../../../../../services/sessionToolInventory';\n\n/**\n * The TUI shell itself stays Pi-only. Inventory is the shared part and is exposed\n * from session data rather than silently installing a fake editor/widget host.\n *\n * Inventory is a command, never a context resource. It reports the tools observed\n * in the transcript, which is not the tool surface the current selection exposes:\n * as a prompt section it listed tools the session had since gated out, directly\n * contradicting the `Available tools:` block, and it grew for the whole session.\n */\nexport function createUiServerContributions(): DoomServerSessionPlugin {\n return {\n commands: [\n {\n name: TOOLS_COMMAND,\n description: 'Show tools observed in this headless session. TUI rendering remains unavailable.',\n async execute(_args, execution) {\n await execution.client.notify({\n title: 'Po tools',\n body:\n toolNames(await execution.session.entries({ type: 'message' })).join('\\n') ||\n '(no tool calls recorded in this session)',\n level: 'info',\n });\n },\n } satisfies DoomHeadlessCommand,\n ],\n };\n}\n","import { defineServerCommand } from '@agimon-ai/po-core/extensionFile';\n\nimport { createUiServerContributions } from '../_lib/sessionInventory';\n\nexport default defineServerCommand(createUiServerContributions().commands![0]!);\n","import { toDoomHeadlessToolResult, type DoomHeadlessTool } from '@agimon-ai/po-core/headless';\nimport {\n createWriteToolDefinition,\n createWriteTool,\n createFindToolDefinition,\n createFindTool,\n createLsToolDefinition,\n createLsTool,\n} from '@earendil-works/pi-coding-agent';\n\n// Preserve the SDK schemas and prompt guidance, but never import terminal renderers\n// into Po's native tool declarations. Execution resolves cwd for each call, including\n// a child session or a session whose working directory differs from process.cwd().\n\nexport function createServerWriteTool(): DoomHeadlessTool<ReturnType<typeof createWriteToolDefinition>['parameters']> {\n const { label, description, parameters, promptSnippet, promptGuidelines } = createWriteToolDefinition('.');\n return {\n name: 'write',\n label,\n description,\n parameters,\n promptSnippet,\n promptGuidelines,\n async execute(toolCallId, parameters, signal, onUpdate, execution) {\n const tool = createWriteTool(execution.cwd);\n return toDoomHeadlessToolResult(\n await tool.execute(\n toolCallId,\n parameters,\n signal,\n onUpdate && ((partial) => onUpdate(toDoomHeadlessToolResult(partial))),\n ),\n );\n },\n };\n}\n\nexport function createServerFindTool(): DoomHeadlessTool<ReturnType<typeof createFindToolDefinition>['parameters']> {\n const { label, description, parameters, promptSnippet, promptGuidelines } = createFindToolDefinition('.');\n return {\n name: 'find',\n label,\n description,\n parameters,\n promptSnippet,\n promptGuidelines,\n async execute(toolCallId, parameters, signal, onUpdate, execution) {\n const tool = createFindTool(execution.cwd);\n return toDoomHeadlessToolResult(\n await tool.execute(\n toolCallId,\n parameters,\n signal,\n onUpdate && ((partial) => onUpdate(toDoomHeadlessToolResult(partial))),\n ),\n );\n },\n };\n}\n\nexport function createServerLsTool(): DoomHeadlessTool<ReturnType<typeof createLsToolDefinition>['parameters']> {\n const { label, description, parameters, promptSnippet, promptGuidelines } = createLsToolDefinition('.');\n return {\n name: 'ls',\n label,\n description,\n parameters,\n promptSnippet,\n promptGuidelines,\n async execute(toolCallId, parameters, signal, onUpdate, execution) {\n const tool = createLsTool(execution.cwd);\n return toDoomHeadlessToolResult(\n await tool.execute(\n toolCallId,\n parameters,\n signal,\n onUpdate && ((partial) => onUpdate(toDoomHeadlessToolResult(partial))),\n ),\n );\n },\n };\n}\n","import { defineServerTool } from '@agimon-ai/po-core/extensionFile';\nimport type { DoomHeadlessTool } from '@agimon-ai/po-core/headless';\n\nimport { createServerFindTool } from '../_lib/serverFileTools';\n\nexport default defineServerTool<DoomHeadlessTool['parameters']>(createServerFindTool);\n","import { defineServerTool } from '@agimon-ai/po-core/extensionFile';\nimport type { DoomHeadlessTool } from '@agimon-ai/po-core/headless';\n\nimport { createServerLsTool } from '../_lib/serverFileTools';\n\nexport default defineServerTool<DoomHeadlessTool['parameters']>(createServerLsTool);\n","import { defineServerTool } from '@agimon-ai/po-core/extensionFile';\nimport type { DoomHeadlessTool } from '@agimon-ai/po-core/headless';\n\nimport { createServerWriteTool } from '../_lib/serverFileTools';\n\nexport default defineServerTool<DoomHeadlessTool['parameters']>(createServerWriteTool);\n","// Generated by @agimon-ai/po-build. Do not edit by hand.\nimport { defineServerPlugin, type DoomServerSessionPlugin } from '@agimon-ai/po-core/serverFacet';\n\nimport commandTools from '../src/extensions/workspaces/sessions/(backend)/command/tools.server';\nimport toolFind from '../src/extensions/workspaces/sessions/(backend)/tool/find.server';\nimport toolLs from '../src/extensions/workspaces/sessions/(backend)/tool/ls.server';\nimport toolWrite from '../src/extensions/workspaces/sessions/(backend)/tool/write.server';\n\ntype Factory<T, C> = (context: C) => T;\nconst at = <T, C>(value: T | Factory<T, C>, context: C): T =>\n typeof value === 'function' ? (value as Factory<T, C>)(context) : value;\nconst via = <T>(identity: Record<string, unknown>, value: unknown): T =>\n (value === undefined ? undefined : { ...identity, ...(value as object) }) as T;\n\nexport const facet = defineServerPlugin({\n name: '@agimon-ai/po-ui',\n session: (context) => ({\n get commands(): DoomServerSessionPlugin['commands'] { return [via({ name: 'tools' }, at(commandTools, context))]; },\n get tools(): DoomServerSessionPlugin['tools'] { return [via({ name: 'find' }, at(toolFind, context)), via({ name: 'ls' }, at(toolLs, context)), via({ name: 'write' }, at(toolWrite, context))]; },\n }),\n});\n\nexport default facet;\n"],"mappings":"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"}
1
+ {"version":3,"file":"server.cjs","names":["defineServerCommand","createWriteToolDefinition","createWriteTool","toPoHeadlessToolResult","createFindToolDefinition","createFindTool","createLsToolDefinition","createLsTool","defineServerTool","defineServerTool","defineServerTool","defineServerPlugin","commandTools","toolFind","toolLs","toolWrite"],"sources":["../../src/constants/ui.ts","../../src/services/sessionToolInventory/index.ts","../../src/extensions/workspaces/sessions/(backend)/_lib/sessionInventory.ts","../../src/extensions/workspaces/sessions/(backend)/command/tools.server.ts","../../src/extensions/workspaces/sessions/(backend)/_lib/serverFileTools.ts","../../src/extensions/workspaces/sessions/(backend)/tool/find.server.ts","../../src/extensions/workspaces/sessions/(backend)/tool/ls.server.ts","../../src/extensions/workspaces/sessions/(backend)/tool/write.server.ts","../../generated/server.ts"],"sourcesContent":["export const LEADER_WIDGET_KEY = 'po-leader';\nexport const TUI_MODE = 'tui';\nexport const WIDGET_PLACEMENT = 'belowEditor';\nexport const WARNING_STYLE = 'warning';\nexport const THEME_ENVIRONMENT_KEY = 'PO_THEME';\nexport const HOTKEYS_COMMAND = 'hotkeys';\nexport const TOOLS_COMMAND = 'tools';\nexport const CONFIG_COMMAND = 'config';\nexport const SESSION_START_EVENT = 'session_start';\nexport const SESSION_MESSAGE_ENTRY = 'message';\nexport const INPUT_EVENT = 'input';\nexport const INTERACTIVE_INPUT_SOURCE = 'interactive';\nexport const TITLE_MESSAGE_MAX_LENGTH = 64;\nexport const TITLE_PREFIX = 'po';\nexport const BUILTIN_LEADER_COMMANDS: readonly string[] = [HOTKEYS_COMMAND];\nexport const PACKAGE_SOURCE = '@agimon-ai/po-ui';\n","export function toolNames(entries: readonly Record<string, unknown>[]): string[] {\n const names = new Set<string>();\n for (const entry of entries) {\n const message = entry.message;\n if (!message || typeof message !== 'object' || Array.isArray(message)) continue;\n const content = (message as { content?: unknown }).content;\n if (!Array.isArray(content)) continue;\n for (const block of content) {\n if (!block || typeof block !== 'object' || Array.isArray(block)) continue;\n const name = (block as { name?: unknown }).name;\n if (typeof name === 'string' && name) names.add(name);\n }\n }\n return [...names].sort();\n}\n","import type { PoHeadlessCommand } from '@agimon-ai/po-core/headless';\nimport type { PoServerSessionPlugin } from '@agimon-ai/po-core/serverPlugin';\n\nimport { TOOLS_COMMAND } from '../../../../../constants/ui';\nimport { toolNames } from '../../../../../services/sessionToolInventory';\n\n/**\n * The TUI shell itself stays Pi-only. Inventory is the shared part and is exposed\n * from session data rather than silently installing a fake editor/widget host.\n *\n * Inventory is a command, never a context resource. It reports the tools observed\n * in the transcript, which is not the tool surface the current selection exposes:\n * as a prompt section it listed tools the session had since gated out, directly\n * contradicting the `Available tools:` block, and it grew for the whole session.\n */\nexport function createUiServerContributions(): PoServerSessionPlugin {\n return {\n commands: [\n {\n name: TOOLS_COMMAND,\n description: 'Show tools observed in this headless session. TUI rendering remains unavailable.',\n async execute(_args, execution) {\n await execution.client.notify({\n title: 'Po tools',\n body:\n toolNames(await execution.session.entries({ type: 'message' })).join('\\n') ||\n '(no tool calls recorded in this session)',\n level: 'info',\n });\n },\n } satisfies PoHeadlessCommand,\n ],\n };\n}\n","import { defineServerCommand } from '@agimon-ai/po-core/extensionFile';\n\nimport { createUiServerContributions } from '../_lib/sessionInventory';\n\nexport default defineServerCommand(createUiServerContributions().commands![0]!);\n","import { toPoHeadlessToolResult, type PoHeadlessTool } from '@agimon-ai/po-core/headless';\nimport {\n createWriteToolDefinition,\n createWriteTool,\n createFindToolDefinition,\n createFindTool,\n createLsToolDefinition,\n createLsTool,\n} from '@earendil-works/pi-coding-agent';\n\n// Preserve the SDK schemas and prompt guidance, but never import terminal renderers\n// into Po's native tool declarations. Execution resolves cwd for each call, including\n// a child session or a session whose working directory differs from process.cwd().\n\nexport function createServerWriteTool(): PoHeadlessTool<ReturnType<typeof createWriteToolDefinition>['parameters']> {\n const { label, description, parameters, promptSnippet, promptGuidelines } = createWriteToolDefinition('.');\n return {\n name: 'write',\n label,\n description,\n parameters,\n promptSnippet,\n promptGuidelines,\n async execute(toolCallId, parameters, signal, onUpdate, execution) {\n const tool = createWriteTool(execution.cwd);\n return toPoHeadlessToolResult(\n await tool.execute(\n toolCallId,\n parameters,\n signal,\n onUpdate && ((partial) => onUpdate(toPoHeadlessToolResult(partial))),\n ),\n );\n },\n };\n}\n\nexport function createServerFindTool(): PoHeadlessTool<ReturnType<typeof createFindToolDefinition>['parameters']> {\n const { label, description, parameters, promptSnippet, promptGuidelines } = createFindToolDefinition('.');\n return {\n name: 'find',\n label,\n description,\n parameters,\n promptSnippet,\n promptGuidelines,\n async execute(toolCallId, parameters, signal, onUpdate, execution) {\n const tool = createFindTool(execution.cwd);\n return toPoHeadlessToolResult(\n await tool.execute(\n toolCallId,\n parameters,\n signal,\n onUpdate && ((partial) => onUpdate(toPoHeadlessToolResult(partial))),\n ),\n );\n },\n };\n}\n\nexport function createServerLsTool(): PoHeadlessTool<ReturnType<typeof createLsToolDefinition>['parameters']> {\n const { label, description, parameters, promptSnippet, promptGuidelines } = createLsToolDefinition('.');\n return {\n name: 'ls',\n label,\n description,\n parameters,\n promptSnippet,\n promptGuidelines,\n async execute(toolCallId, parameters, signal, onUpdate, execution) {\n const tool = createLsTool(execution.cwd);\n return toPoHeadlessToolResult(\n await tool.execute(\n toolCallId,\n parameters,\n signal,\n onUpdate && ((partial) => onUpdate(toPoHeadlessToolResult(partial))),\n ),\n );\n },\n };\n}\n","import { defineServerTool } from '@agimon-ai/po-core/extensionFile';\nimport type { PoHeadlessTool } from '@agimon-ai/po-core/headless';\n\nimport { createServerFindTool } from '../_lib/serverFileTools';\n\nexport default defineServerTool<PoHeadlessTool['parameters']>(createServerFindTool);\n","import { defineServerTool } from '@agimon-ai/po-core/extensionFile';\nimport type { PoHeadlessTool } from '@agimon-ai/po-core/headless';\n\nimport { createServerLsTool } from '../_lib/serverFileTools';\n\nexport default defineServerTool<PoHeadlessTool['parameters']>(createServerLsTool);\n","import { defineServerTool } from '@agimon-ai/po-core/extensionFile';\nimport type { PoHeadlessTool } from '@agimon-ai/po-core/headless';\n\nimport { createServerWriteTool } from '../_lib/serverFileTools';\n\nexport default defineServerTool<PoHeadlessTool['parameters']>(createServerWriteTool);\n","// Generated by @agimon-ai/po-build. Do not edit by hand.\nimport { defineServerPlugin, type PoServerSessionPlugin } from '@agimon-ai/po-core/serverPlugin';\n\nimport commandTools from '../src/extensions/workspaces/sessions/(backend)/command/tools.server';\nimport toolFind from '../src/extensions/workspaces/sessions/(backend)/tool/find.server';\nimport toolLs from '../src/extensions/workspaces/sessions/(backend)/tool/ls.server';\nimport toolWrite from '../src/extensions/workspaces/sessions/(backend)/tool/write.server';\n\ntype Factory<T, C> = (context: C) => T;\nconst at = <T, C>(value: T | Factory<T, C>, context: C): T =>\n typeof value === 'function' ? (value as Factory<T, C>)(context) : value;\nconst via = <T>(identity: Record<string, unknown>, value: unknown): T =>\n (value === undefined ? undefined : { ...identity, ...(value as object) }) as T;\n\nexport const serverPlugin = defineServerPlugin({\n name: '@agimon-ai/po-ui',\n session: (context) => ({\n get commands(): PoServerSessionPlugin['commands'] { return [via({ name: 'tools' }, at(commandTools, context))]; },\n get tools(): PoServerSessionPlugin['tools'] { return [via({ name: 'find' }, at(toolFind, context)), via({ name: 'ls' }, at(toolLs, context)), via({ name: 'write' }, at(toolWrite, context))]; },\n }),\n});\n\nexport default serverPlugin;\n"],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  //#region generated/server.d.ts
2
- export declare const facet: import("@agimon-ai/po-core/serverFacet").DoomServerFacet;
2
+ export declare const serverPlugin: import("@agimon-ai/po-core/serverPlugin").PoServerPlugin;
3
3
  //#endregion
4
- export { facet as default };
4
+ export { serverPlugin as default };
5
5
  //# sourceMappingURL=server.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.mts","names":[],"sources":["../../generated/server.ts"],"mappings":";qBAca,gDAAK"}
1
+ {"version":3,"file":"server.d.mts","names":[],"sources":["../../generated/server.ts"],"mappings":";qBAca,wDAAY"}
@@ -1,6 +1,6 @@
1
- import { defineServerPlugin } from "@agimon-ai/po-core/serverFacet";
1
+ import { defineServerPlugin } from "@agimon-ai/po-core/serverPlugin";
2
2
  import { defineServerCommand, defineServerTool } from "@agimon-ai/po-core/extensionFile";
3
- import { toDoomHeadlessToolResult } from "@agimon-ai/po-core/headless";
3
+ import { toPoHeadlessToolResult } from "@agimon-ai/po-core/headless";
4
4
  import { createFindTool, createFindToolDefinition, createLsTool, createLsToolDefinition, createWriteTool, createWriteToolDefinition } from "@earendil-works/pi-coding-agent";
5
5
  //#region src/constants/ui.ts
6
6
  const TOOLS_COMMAND = "tools";
@@ -61,7 +61,7 @@ function createServerWriteTool() {
61
61
  promptGuidelines,
62
62
  async execute(toolCallId, parameters, signal, onUpdate, execution) {
63
63
  const tool = createWriteTool(execution.cwd);
64
- return toDoomHeadlessToolResult(await tool.execute(toolCallId, parameters, signal, onUpdate && ((partial) => onUpdate(toDoomHeadlessToolResult(partial)))));
64
+ return toPoHeadlessToolResult(await tool.execute(toolCallId, parameters, signal, onUpdate && ((partial) => onUpdate(toPoHeadlessToolResult(partial)))));
65
65
  }
66
66
  };
67
67
  }
@@ -76,7 +76,7 @@ function createServerFindTool() {
76
76
  promptGuidelines,
77
77
  async execute(toolCallId, parameters, signal, onUpdate, execution) {
78
78
  const tool = createFindTool(execution.cwd);
79
- return toDoomHeadlessToolResult(await tool.execute(toolCallId, parameters, signal, onUpdate && ((partial) => onUpdate(toDoomHeadlessToolResult(partial)))));
79
+ return toPoHeadlessToolResult(await tool.execute(toolCallId, parameters, signal, onUpdate && ((partial) => onUpdate(toPoHeadlessToolResult(partial)))));
80
80
  }
81
81
  };
82
82
  }
@@ -91,7 +91,7 @@ function createServerLsTool() {
91
91
  promptGuidelines,
92
92
  async execute(toolCallId, parameters, signal, onUpdate, execution) {
93
93
  const tool = createLsTool(execution.cwd);
94
- return toDoomHeadlessToolResult(await tool.execute(toolCallId, parameters, signal, onUpdate && ((partial) => onUpdate(toDoomHeadlessToolResult(partial)))));
94
+ return toPoHeadlessToolResult(await tool.execute(toolCallId, parameters, signal, onUpdate && ((partial) => onUpdate(toPoHeadlessToolResult(partial)))));
95
95
  }
96
96
  };
97
97
  }
@@ -111,7 +111,7 @@ const via = (identity, value) => value === void 0 ? void 0 : {
111
111
  ...identity,
112
112
  ...value
113
113
  };
114
- const facet = defineServerPlugin({
114
+ const serverPlugin = defineServerPlugin({
115
115
  name: "@agimon-ai/po-ui",
116
116
  session: (context) => ({
117
117
  get commands() {
@@ -127,6 +127,6 @@ const facet = defineServerPlugin({
127
127
  })
128
128
  });
129
129
  //#endregion
130
- export { facet as default, facet };
130
+ export { serverPlugin as default, serverPlugin };
131
131
 
132
132
  //# sourceMappingURL=server.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"server.mjs","names":["commandTools","toolFind","toolLs","toolWrite"],"sources":["../../src/constants/ui.ts","../../src/services/sessionToolInventory/index.ts","../../src/extensions/workspaces/sessions/(backend)/_lib/sessionInventory.ts","../../src/extensions/workspaces/sessions/(backend)/command/tools.server.ts","../../src/extensions/workspaces/sessions/(backend)/_lib/serverFileTools.ts","../../src/extensions/workspaces/sessions/(backend)/tool/find.server.ts","../../src/extensions/workspaces/sessions/(backend)/tool/ls.server.ts","../../src/extensions/workspaces/sessions/(backend)/tool/write.server.ts","../../generated/server.ts"],"sourcesContent":["export const LEADER_WIDGET_KEY = 'po-leader';\nexport const TUI_MODE = 'tui';\nexport const WIDGET_PLACEMENT = 'belowEditor';\nexport const WARNING_STYLE = 'warning';\nexport const THEME_ENVIRONMENT_KEY = 'PO_THEME';\nexport const HOTKEYS_COMMAND = 'hotkeys';\nexport const TOOLS_COMMAND = 'tools';\nexport const CONFIG_COMMAND = 'config';\nexport const SESSION_START_EVENT = 'session_start';\nexport const SESSION_MESSAGE_ENTRY = 'message';\nexport const INPUT_EVENT = 'input';\nexport const INTERACTIVE_INPUT_SOURCE = 'interactive';\nexport const TITLE_MESSAGE_MAX_LENGTH = 64;\nexport const TITLE_PREFIX = 'po';\nexport const BUILTIN_LEADER_COMMANDS: readonly string[] = [HOTKEYS_COMMAND];\nexport const PACKAGE_SOURCE = '@agimon-ai/po-ui';\n","export function toolNames(entries: readonly Record<string, unknown>[]): string[] {\n const names = new Set<string>();\n for (const entry of entries) {\n const message = entry.message;\n if (!message || typeof message !== 'object' || Array.isArray(message)) continue;\n const content = (message as { content?: unknown }).content;\n if (!Array.isArray(content)) continue;\n for (const block of content) {\n if (!block || typeof block !== 'object' || Array.isArray(block)) continue;\n const name = (block as { name?: unknown }).name;\n if (typeof name === 'string' && name) names.add(name);\n }\n }\n return [...names].sort();\n}\n","import type { DoomHeadlessCommand } from '@agimon-ai/po-core/headless';\nimport type { DoomServerSessionPlugin } from '@agimon-ai/po-core/serverFacet';\n\nimport { TOOLS_COMMAND } from '../../../../../constants/ui';\nimport { toolNames } from '../../../../../services/sessionToolInventory';\n\n/**\n * The TUI shell itself stays Pi-only. Inventory is the shared part and is exposed\n * from session data rather than silently installing a fake editor/widget host.\n *\n * Inventory is a command, never a context resource. It reports the tools observed\n * in the transcript, which is not the tool surface the current selection exposes:\n * as a prompt section it listed tools the session had since gated out, directly\n * contradicting the `Available tools:` block, and it grew for the whole session.\n */\nexport function createUiServerContributions(): DoomServerSessionPlugin {\n return {\n commands: [\n {\n name: TOOLS_COMMAND,\n description: 'Show tools observed in this headless session. TUI rendering remains unavailable.',\n async execute(_args, execution) {\n await execution.client.notify({\n title: 'Po tools',\n body:\n toolNames(await execution.session.entries({ type: 'message' })).join('\\n') ||\n '(no tool calls recorded in this session)',\n level: 'info',\n });\n },\n } satisfies DoomHeadlessCommand,\n ],\n };\n}\n","import { defineServerCommand } from '@agimon-ai/po-core/extensionFile';\n\nimport { createUiServerContributions } from '../_lib/sessionInventory';\n\nexport default defineServerCommand(createUiServerContributions().commands![0]!);\n","import { toDoomHeadlessToolResult, type DoomHeadlessTool } from '@agimon-ai/po-core/headless';\nimport {\n createWriteToolDefinition,\n createWriteTool,\n createFindToolDefinition,\n createFindTool,\n createLsToolDefinition,\n createLsTool,\n} from '@earendil-works/pi-coding-agent';\n\n// Preserve the SDK schemas and prompt guidance, but never import terminal renderers\n// into Po's native tool declarations. Execution resolves cwd for each call, including\n// a child session or a session whose working directory differs from process.cwd().\n\nexport function createServerWriteTool(): DoomHeadlessTool<ReturnType<typeof createWriteToolDefinition>['parameters']> {\n const { label, description, parameters, promptSnippet, promptGuidelines } = createWriteToolDefinition('.');\n return {\n name: 'write',\n label,\n description,\n parameters,\n promptSnippet,\n promptGuidelines,\n async execute(toolCallId, parameters, signal, onUpdate, execution) {\n const tool = createWriteTool(execution.cwd);\n return toDoomHeadlessToolResult(\n await tool.execute(\n toolCallId,\n parameters,\n signal,\n onUpdate && ((partial) => onUpdate(toDoomHeadlessToolResult(partial))),\n ),\n );\n },\n };\n}\n\nexport function createServerFindTool(): DoomHeadlessTool<ReturnType<typeof createFindToolDefinition>['parameters']> {\n const { label, description, parameters, promptSnippet, promptGuidelines } = createFindToolDefinition('.');\n return {\n name: 'find',\n label,\n description,\n parameters,\n promptSnippet,\n promptGuidelines,\n async execute(toolCallId, parameters, signal, onUpdate, execution) {\n const tool = createFindTool(execution.cwd);\n return toDoomHeadlessToolResult(\n await tool.execute(\n toolCallId,\n parameters,\n signal,\n onUpdate && ((partial) => onUpdate(toDoomHeadlessToolResult(partial))),\n ),\n );\n },\n };\n}\n\nexport function createServerLsTool(): DoomHeadlessTool<ReturnType<typeof createLsToolDefinition>['parameters']> {\n const { label, description, parameters, promptSnippet, promptGuidelines } = createLsToolDefinition('.');\n return {\n name: 'ls',\n label,\n description,\n parameters,\n promptSnippet,\n promptGuidelines,\n async execute(toolCallId, parameters, signal, onUpdate, execution) {\n const tool = createLsTool(execution.cwd);\n return toDoomHeadlessToolResult(\n await tool.execute(\n toolCallId,\n parameters,\n signal,\n onUpdate && ((partial) => onUpdate(toDoomHeadlessToolResult(partial))),\n ),\n );\n },\n };\n}\n","import { defineServerTool } from '@agimon-ai/po-core/extensionFile';\nimport type { DoomHeadlessTool } from '@agimon-ai/po-core/headless';\n\nimport { createServerFindTool } from '../_lib/serverFileTools';\n\nexport default defineServerTool<DoomHeadlessTool['parameters']>(createServerFindTool);\n","import { defineServerTool } from '@agimon-ai/po-core/extensionFile';\nimport type { DoomHeadlessTool } from '@agimon-ai/po-core/headless';\n\nimport { createServerLsTool } from '../_lib/serverFileTools';\n\nexport default defineServerTool<DoomHeadlessTool['parameters']>(createServerLsTool);\n","import { defineServerTool } from '@agimon-ai/po-core/extensionFile';\nimport type { DoomHeadlessTool } from '@agimon-ai/po-core/headless';\n\nimport { createServerWriteTool } from '../_lib/serverFileTools';\n\nexport default defineServerTool<DoomHeadlessTool['parameters']>(createServerWriteTool);\n","// Generated by @agimon-ai/po-build. Do not edit by hand.\nimport { defineServerPlugin, type DoomServerSessionPlugin } from '@agimon-ai/po-core/serverFacet';\n\nimport commandTools from '../src/extensions/workspaces/sessions/(backend)/command/tools.server';\nimport toolFind from '../src/extensions/workspaces/sessions/(backend)/tool/find.server';\nimport toolLs from '../src/extensions/workspaces/sessions/(backend)/tool/ls.server';\nimport toolWrite from '../src/extensions/workspaces/sessions/(backend)/tool/write.server';\n\ntype Factory<T, C> = (context: C) => T;\nconst at = <T, C>(value: T | Factory<T, C>, context: C): T =>\n typeof value === 'function' ? (value as Factory<T, C>)(context) : value;\nconst via = <T>(identity: Record<string, unknown>, value: unknown): T =>\n (value === undefined ? undefined : { ...identity, ...(value as object) }) as T;\n\nexport const facet = defineServerPlugin({\n name: '@agimon-ai/po-ui',\n session: (context) => ({\n get commands(): DoomServerSessionPlugin['commands'] { return [via({ name: 'tools' }, at(commandTools, context))]; },\n get tools(): DoomServerSessionPlugin['tools'] { return [via({ name: 'find' }, at(toolFind, context)), via({ name: 'ls' }, at(toolLs, context)), via({ name: 'write' }, at(toolWrite, context))]; },\n }),\n});\n\nexport default facet;\n"],"mappings":"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"}
1
+ {"version":3,"file":"server.mjs","names":["commandTools","toolFind","toolLs","toolWrite"],"sources":["../../src/constants/ui.ts","../../src/services/sessionToolInventory/index.ts","../../src/extensions/workspaces/sessions/(backend)/_lib/sessionInventory.ts","../../src/extensions/workspaces/sessions/(backend)/command/tools.server.ts","../../src/extensions/workspaces/sessions/(backend)/_lib/serverFileTools.ts","../../src/extensions/workspaces/sessions/(backend)/tool/find.server.ts","../../src/extensions/workspaces/sessions/(backend)/tool/ls.server.ts","../../src/extensions/workspaces/sessions/(backend)/tool/write.server.ts","../../generated/server.ts"],"sourcesContent":["export const LEADER_WIDGET_KEY = 'po-leader';\nexport const TUI_MODE = 'tui';\nexport const WIDGET_PLACEMENT = 'belowEditor';\nexport const WARNING_STYLE = 'warning';\nexport const THEME_ENVIRONMENT_KEY = 'PO_THEME';\nexport const HOTKEYS_COMMAND = 'hotkeys';\nexport const TOOLS_COMMAND = 'tools';\nexport const CONFIG_COMMAND = 'config';\nexport const SESSION_START_EVENT = 'session_start';\nexport const SESSION_MESSAGE_ENTRY = 'message';\nexport const INPUT_EVENT = 'input';\nexport const INTERACTIVE_INPUT_SOURCE = 'interactive';\nexport const TITLE_MESSAGE_MAX_LENGTH = 64;\nexport const TITLE_PREFIX = 'po';\nexport const BUILTIN_LEADER_COMMANDS: readonly string[] = [HOTKEYS_COMMAND];\nexport const PACKAGE_SOURCE = '@agimon-ai/po-ui';\n","export function toolNames(entries: readonly Record<string, unknown>[]): string[] {\n const names = new Set<string>();\n for (const entry of entries) {\n const message = entry.message;\n if (!message || typeof message !== 'object' || Array.isArray(message)) continue;\n const content = (message as { content?: unknown }).content;\n if (!Array.isArray(content)) continue;\n for (const block of content) {\n if (!block || typeof block !== 'object' || Array.isArray(block)) continue;\n const name = (block as { name?: unknown }).name;\n if (typeof name === 'string' && name) names.add(name);\n }\n }\n return [...names].sort();\n}\n","import type { PoHeadlessCommand } from '@agimon-ai/po-core/headless';\nimport type { PoServerSessionPlugin } from '@agimon-ai/po-core/serverPlugin';\n\nimport { TOOLS_COMMAND } from '../../../../../constants/ui';\nimport { toolNames } from '../../../../../services/sessionToolInventory';\n\n/**\n * The TUI shell itself stays Pi-only. Inventory is the shared part and is exposed\n * from session data rather than silently installing a fake editor/widget host.\n *\n * Inventory is a command, never a context resource. It reports the tools observed\n * in the transcript, which is not the tool surface the current selection exposes:\n * as a prompt section it listed tools the session had since gated out, directly\n * contradicting the `Available tools:` block, and it grew for the whole session.\n */\nexport function createUiServerContributions(): PoServerSessionPlugin {\n return {\n commands: [\n {\n name: TOOLS_COMMAND,\n description: 'Show tools observed in this headless session. TUI rendering remains unavailable.',\n async execute(_args, execution) {\n await execution.client.notify({\n title: 'Po tools',\n body:\n toolNames(await execution.session.entries({ type: 'message' })).join('\\n') ||\n '(no tool calls recorded in this session)',\n level: 'info',\n });\n },\n } satisfies PoHeadlessCommand,\n ],\n };\n}\n","import { defineServerCommand } from '@agimon-ai/po-core/extensionFile';\n\nimport { createUiServerContributions } from '../_lib/sessionInventory';\n\nexport default defineServerCommand(createUiServerContributions().commands![0]!);\n","import { toPoHeadlessToolResult, type PoHeadlessTool } from '@agimon-ai/po-core/headless';\nimport {\n createWriteToolDefinition,\n createWriteTool,\n createFindToolDefinition,\n createFindTool,\n createLsToolDefinition,\n createLsTool,\n} from '@earendil-works/pi-coding-agent';\n\n// Preserve the SDK schemas and prompt guidance, but never import terminal renderers\n// into Po's native tool declarations. Execution resolves cwd for each call, including\n// a child session or a session whose working directory differs from process.cwd().\n\nexport function createServerWriteTool(): PoHeadlessTool<ReturnType<typeof createWriteToolDefinition>['parameters']> {\n const { label, description, parameters, promptSnippet, promptGuidelines } = createWriteToolDefinition('.');\n return {\n name: 'write',\n label,\n description,\n parameters,\n promptSnippet,\n promptGuidelines,\n async execute(toolCallId, parameters, signal, onUpdate, execution) {\n const tool = createWriteTool(execution.cwd);\n return toPoHeadlessToolResult(\n await tool.execute(\n toolCallId,\n parameters,\n signal,\n onUpdate && ((partial) => onUpdate(toPoHeadlessToolResult(partial))),\n ),\n );\n },\n };\n}\n\nexport function createServerFindTool(): PoHeadlessTool<ReturnType<typeof createFindToolDefinition>['parameters']> {\n const { label, description, parameters, promptSnippet, promptGuidelines } = createFindToolDefinition('.');\n return {\n name: 'find',\n label,\n description,\n parameters,\n promptSnippet,\n promptGuidelines,\n async execute(toolCallId, parameters, signal, onUpdate, execution) {\n const tool = createFindTool(execution.cwd);\n return toPoHeadlessToolResult(\n await tool.execute(\n toolCallId,\n parameters,\n signal,\n onUpdate && ((partial) => onUpdate(toPoHeadlessToolResult(partial))),\n ),\n );\n },\n };\n}\n\nexport function createServerLsTool(): PoHeadlessTool<ReturnType<typeof createLsToolDefinition>['parameters']> {\n const { label, description, parameters, promptSnippet, promptGuidelines } = createLsToolDefinition('.');\n return {\n name: 'ls',\n label,\n description,\n parameters,\n promptSnippet,\n promptGuidelines,\n async execute(toolCallId, parameters, signal, onUpdate, execution) {\n const tool = createLsTool(execution.cwd);\n return toPoHeadlessToolResult(\n await tool.execute(\n toolCallId,\n parameters,\n signal,\n onUpdate && ((partial) => onUpdate(toPoHeadlessToolResult(partial))),\n ),\n );\n },\n };\n}\n","import { defineServerTool } from '@agimon-ai/po-core/extensionFile';\nimport type { PoHeadlessTool } from '@agimon-ai/po-core/headless';\n\nimport { createServerFindTool } from '../_lib/serverFileTools';\n\nexport default defineServerTool<PoHeadlessTool['parameters']>(createServerFindTool);\n","import { defineServerTool } from '@agimon-ai/po-core/extensionFile';\nimport type { PoHeadlessTool } from '@agimon-ai/po-core/headless';\n\nimport { createServerLsTool } from '../_lib/serverFileTools';\n\nexport default defineServerTool<PoHeadlessTool['parameters']>(createServerLsTool);\n","import { defineServerTool } from '@agimon-ai/po-core/extensionFile';\nimport type { PoHeadlessTool } from '@agimon-ai/po-core/headless';\n\nimport { createServerWriteTool } from '../_lib/serverFileTools';\n\nexport default defineServerTool<PoHeadlessTool['parameters']>(createServerWriteTool);\n","// Generated by @agimon-ai/po-build. Do not edit by hand.\nimport { defineServerPlugin, type PoServerSessionPlugin } from '@agimon-ai/po-core/serverPlugin';\n\nimport commandTools from '../src/extensions/workspaces/sessions/(backend)/command/tools.server';\nimport toolFind from '../src/extensions/workspaces/sessions/(backend)/tool/find.server';\nimport toolLs from '../src/extensions/workspaces/sessions/(backend)/tool/ls.server';\nimport toolWrite from '../src/extensions/workspaces/sessions/(backend)/tool/write.server';\n\ntype Factory<T, C> = (context: C) => T;\nconst at = <T, C>(value: T | Factory<T, C>, context: C): T =>\n typeof value === 'function' ? (value as Factory<T, C>)(context) : value;\nconst via = <T>(identity: Record<string, unknown>, value: unknown): T =>\n (value === undefined ? undefined : { ...identity, ...(value as object) }) as T;\n\nexport const serverPlugin = defineServerPlugin({\n name: '@agimon-ai/po-ui',\n session: (context) => ({\n get commands(): PoServerSessionPlugin['commands'] { return [via({ name: 'tools' }, at(commandTools, context))]; },\n get tools(): PoServerSessionPlugin['tools'] { return [via({ name: 'find' }, at(toolFind, context)), via({ name: 'ls' }, at(toolLs, context)), via({ name: 'write' }, at(toolWrite, context))]; },\n }),\n});\n\nexport default serverPlugin;\n"],"mappings":";;;;;AAMA,MAAa,gBAAgB;;;ACN7B,SAAgB,UAAU,SAAuD;CAC/E,MAAM,wBAAQ,IAAI,IAAY;CAC9B,KAAK,MAAM,SAAS,SAAS;EAC3B,MAAM,UAAU,MAAM;EACtB,IAAI,CAAC,WAAW,OAAO,YAAY,YAAY,MAAM,QAAQ,OAAO,GAAG;EACvE,MAAM,UAAW,QAAkC;EACnD,IAAI,CAAC,MAAM,QAAQ,OAAO,GAAG;EAC7B,KAAK,MAAM,SAAS,SAAS;GAC3B,IAAI,CAAC,SAAS,OAAO,UAAU,YAAY,MAAM,QAAQ,KAAK,GAAG;GACjE,MAAM,OAAQ,MAA6B;GAC3C,IAAI,OAAO,SAAS,YAAY,MAAM,MAAM,IAAI,IAAI;EACtD;CACF;CACA,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC,KAAK;AACzB;;;;;;;;;;;;ACCA,SAAgB,8BAAqD;CACnE,OAAO,EACL,UAAU,CACR;EACE,MAAM;EACN,aAAa;EACb,MAAM,QAAQ,OAAO,WAAW;GAC9B,MAAM,UAAU,OAAO,OAAO;IAC5B,OAAO;IACP,MACE,UAAU,MAAM,UAAU,QAAQ,QAAQ,EAAE,MAAM,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,KACzE;IACF,OAAO;GACT,CAAC;EACH;CACF,CACF,EACF;AACF;;;AC7BA,IAAA,uBAAe,oBAAoB,4BAA4B,CAAC,CAAC,SAAU,EAAG;;;ACU9E,SAAgB,wBAAoG;CAClH,MAAM,EAAE,OAAO,aAAa,YAAY,eAAe,qBAAqB,0BAA0B,GAAG;CACzG,OAAO;EACL,MAAM;EACN;EACA;EACA;EACA;EACA;EACA,MAAM,QAAQ,YAAY,YAAY,QAAQ,UAAU,WAAW;GACjE,MAAM,OAAO,gBAAgB,UAAU,GAAG;GAC1C,OAAO,uBACL,MAAM,KAAK,QACT,YACA,YACA,QACA,cAAc,YAAY,SAAS,uBAAuB,OAAO,CAAC,EACpE,CACF;EACF;CACF;AACF;AAEA,SAAgB,uBAAkG;CAChH,MAAM,EAAE,OAAO,aAAa,YAAY,eAAe,qBAAqB,yBAAyB,GAAG;CACxG,OAAO;EACL,MAAM;EACN;EACA;EACA;EACA;EACA;EACA,MAAM,QAAQ,YAAY,YAAY,QAAQ,UAAU,WAAW;GACjE,MAAM,OAAO,eAAe,UAAU,GAAG;GACzC,OAAO,uBACL,MAAM,KAAK,QACT,YACA,YACA,QACA,cAAc,YAAY,SAAS,uBAAuB,OAAO,CAAC,EACpE,CACF;EACF;CACF;AACF;AAEA,SAAgB,qBAA8F;CAC5G,MAAM,EAAE,OAAO,aAAa,YAAY,eAAe,qBAAqB,uBAAuB,GAAG;CACtG,OAAO;EACL,MAAM;EACN;EACA;EACA;EACA;EACA;EACA,MAAM,QAAQ,YAAY,YAAY,QAAQ,UAAU,WAAW;GACjE,MAAM,OAAO,aAAa,UAAU,GAAG;GACvC,OAAO,uBACL,MAAM,KAAK,QACT,YACA,YACA,QACA,cAAc,YAAY,SAAS,uBAAuB,OAAO,CAAC,EACpE,CACF;EACF;CACF;AACF;;;AC5EA,IAAA,sBAAe,iBAA+C,oBAAoB;;;ACAlF,IAAA,oBAAe,iBAA+C,kBAAkB;;;ACAhF,IAAA,uBAAe,iBAA+C,qBAAqB;;;ACInF,MAAM,MAAY,OAA0B,YAC1C,OAAO,UAAU,aAAc,MAAwB,OAAO,IAAI;AACpE,MAAM,OAAU,UAAmC,UAChD,UAAU,KAAA,IAAY,KAAA,IAAY;CAAE,GAAG;CAAU,GAAI;AAAiB;AAEzE,MAAa,eAAe,mBAAmB;CAC7C,MAAM;CACN,UAAU,aAAa;EACrB,IAAI,WAA8C;GAAE,OAAO,CAAC,IAAI,EAAE,MAAM,QAAQ,GAAG,GAAGA,sBAAc,OAAO,CAAC,CAAC;EAAG;EAChH,IAAI,QAAwC;GAAE,OAAO;IAAC,IAAI,EAAE,MAAM,OAAO,GAAG,GAAGC,qBAAU,OAAO,CAAC;IAAG,IAAI,EAAE,MAAM,KAAK,GAAG,GAAGC,mBAAQ,OAAO,CAAC;IAAG,IAAI,EAAE,MAAM,QAAQ,GAAG,GAAGC,sBAAW,OAAO,CAAC;GAAC;EAAG;CACjM;AACF,CAAC"}
@@ -103,7 +103,7 @@ function ListingBody({ tool, limitKey, limitUnit, expanded, props }) {
103
103
  tone: "error",
104
104
  children: "failed"
105
105
  }), /* @__PURE__ */ jsx("span", {
106
- className: "whitespace-pre-wrap break-words text-doom-red",
106
+ className: "whitespace-pre-wrap break-words text-po-red",
107
107
  children: resultText(result, output)
108
108
  })]
109
109
  });
@@ -121,7 +121,7 @@ function ListingBody({ tool, limitKey, limitUnit, expanded, props }) {
121
121
  className: "flex flex-col font-mono",
122
122
  children: [
123
123
  view.lines.map((line, index) => /* @__PURE__ */ jsx("span", {
124
- className: "whitespace-pre-wrap break-words text-doom-text",
124
+ className: "whitespace-pre-wrap break-words text-po-text",
125
125
  children: line
126
126
  }, `${String(index)}-${line}`)),
127
127
  view.hidden > 0 ? /* @__PURE__ */ jsxs(MessageItemStatus, {
@@ -129,7 +129,7 @@ function ListingBody({ tool, limitKey, limitUnit, expanded, props }) {
129
129
  children: [view.hidden, " more lines"]
130
130
  }) : null,
131
131
  view.truncated !== void 0 ? /* @__PURE__ */ jsx("span", {
132
- className: "text-doom-yellow",
132
+ className: "text-po-yellow",
133
133
  children: view.truncated
134
134
  }) : null
135
135
  ]
@@ -159,10 +159,10 @@ function FindToolMessage(props) {
159
159
  "data-testid": "tool-call-find",
160
160
  className: "flex min-w-0 flex-1 items-center gap-2",
161
161
  children: [/* @__PURE__ */ jsx("span", {
162
- className: "truncate text-doom-text",
162
+ className: "truncate text-po-text",
163
163
  children: view.primary
164
164
  }), view.details.length > 0 ? /* @__PURE__ */ jsxs("span", {
165
- className: "shrink-0 text-doom-faint",
165
+ className: "shrink-0 text-po-faint",
166
166
  children: ["· ", view.details.join(" · ")]
167
167
  }) : null]
168
168
  })
@@ -197,10 +197,10 @@ function LsToolMessage(props) {
197
197
  "data-testid": "tool-call-ls",
198
198
  className: "flex min-w-0 flex-1 items-center gap-2",
199
199
  children: [/* @__PURE__ */ jsx("span", {
200
- className: "truncate text-doom-text",
200
+ className: "truncate text-po-text",
201
201
  children: view.primary
202
202
  }), view.details.length > 0 ? /* @__PURE__ */ jsxs("span", {
203
- className: "shrink-0 text-doom-faint",
203
+ className: "shrink-0 text-po-faint",
204
204
  children: ["· ", view.details.join(" · ")]
205
205
  }) : null]
206
206
  })
@@ -230,13 +230,13 @@ function WritePreview({ view, path }) {
230
230
  return /* @__PURE__ */ jsx(Fragment, { children: view.preview.map((line, index) => /* @__PURE__ */ jsxs("span", {
231
231
  className: "flex gap-2",
232
232
  children: [/* @__PURE__ */ jsx("span", {
233
- className: "shrink-0 text-right text-doom-faint",
233
+ className: "shrink-0 text-right text-po-faint",
234
234
  style: { width: `${String(view.gutter)}ch` },
235
235
  children: line.number
236
236
  }), /* @__PURE__ */ jsx(SyntaxLine, {
237
237
  spans: spans?.[index],
238
238
  text: line.text,
239
- className: "min-w-0 whitespace-pre-wrap break-words text-doom-text"
239
+ className: "min-w-0 whitespace-pre-wrap break-words text-po-text"
240
240
  })]
241
241
  }, line.number)) });
242
242
  }
@@ -266,7 +266,7 @@ function WriteToolMessage({ args, result, output, running, isError, fileTabFor,
266
266
  path: view.path,
267
267
  ...tab === void 0 ? {} : { onOpen: () => openTransientTab(tab) }
268
268
  }), /* @__PURE__ */ jsxs("span", {
269
- className: "shrink-0 text-doom-faint",
269
+ className: "shrink-0 text-po-faint",
270
270
  children: ["· ", view.size]
271
271
  })]
272
272
  })
@@ -277,7 +277,7 @@ function WriteToolMessage({ args, result, output, running, isError, fileTabFor,
277
277
  tone: "error",
278
278
  children: "failed"
279
279
  }), /* @__PURE__ */ jsx("span", {
280
- className: "whitespace-pre-wrap break-words text-doom-red",
280
+ className: "whitespace-pre-wrap break-words text-po-red",
281
281
  children: resultText(result, output)
282
282
  })]
283
283
  }) : view.preview.length === 0 ? running ? /* @__PURE__ */ jsx(MessageItemBody, {
@@ -1 +1 @@
1
- {"version":3,"file":"web.mjs","names":["LIMIT_KEY","LIMIT_UNIT","toolFind","toolLs","toolWrite"],"sources":["../../src/extensions/workspaces/sessions/(frontend)/tool/_lib/builtinToolView.ts","../../src/extensions/workspaces/sessions/(frontend)/tool/_components/ListingBody.tsx","../../src/extensions/workspaces/sessions/(frontend)/tool/_components/FindToolMessage.tsx","../../src/extensions/workspaces/sessions/(frontend)/tool/find.web.tsx","../../src/extensions/workspaces/sessions/(frontend)/tool/_components/LsToolMessage.tsx","../../src/extensions/workspaces/sessions/(frontend)/tool/ls.web.tsx","../../src/extensions/workspaces/sessions/(frontend)/tool/_components/WriteToolMessage.tsx","../../src/extensions/workspaces/sessions/(frontend)/tool/write.web.tsx","../../generated/web.ts"],"sourcesContent":["import type { ToolResultView } from '@agimon-ai/po-core/web';\n\n/** The TUI's collapsed budgets: ten preview lines for a write, twenty for a listing. */\nexport const WRITE_COLLAPSED_LINES = 10;\nexport const LIST_COLLAPSED_LINES = 20;\n/** Pi's default output cap, the size its truncation warning names when details omit one. */\nconst DEFAULT_MAX_BYTES = 50 * 1024;\nconst KIBIBYTE = 1024;\n\nexport interface NumberedLine {\n readonly number: number;\n readonly text: string;\n}\n\nexport interface WriteCallView {\n readonly path: string;\n /** `N chars`, the size the TUI's call heading shows. */\n readonly size: string;\n readonly preview: readonly NumberedLine[];\n readonly hidden: number;\n /** Widest shown line number, in characters. */\n readonly gutter: number;\n}\n\nexport interface SearchCallView {\n readonly primary: string;\n readonly details: readonly string[];\n}\n\nexport interface ListResultView {\n readonly lines: readonly string[];\n readonly hidden: number;\n /** Pi's `[Truncated: ...]` warning, when the listing hit a limit. */\n readonly truncated: string | undefined;\n}\n\nfunction compactDetails(values: ReadonlyArray<string | undefined>): string[] {\n return values.filter((value): value is string => value !== undefined && value.length > 0);\n}\n\nfunction optionalCount(value: unknown, unit: string): string | undefined {\n return typeof value === 'number' && Number.isFinite(value) ? `${value} ${unit}` : undefined;\n}\n\nfunction pathOrDot(value: unknown): string {\n return typeof value === 'string' && value.length > 0 ? value : '.';\n}\n\n/** Pi's size formatter, so the web warning names the same figure the TUI does. */\nexport function formatSize(bytes: number): string {\n if (bytes < KIBIBYTE) return `${bytes}B`;\n if (bytes < KIBIBYTE * KIBIBYTE) return `${(bytes / KIBIBYTE).toFixed(1)}KB`;\n return `${(bytes / (KIBIBYTE * KIBIBYTE)).toFixed(1)}MB`;\n}\n\n/** What the write call shows: the path, the content size, and a numbered preview of the file. */\nexport function writeCallView(args: Readonly<Record<string, unknown>>, expanded: boolean): WriteCallView {\n const content = typeof args.content === 'string' ? args.content : '';\n const path = typeof args.path === 'string' ? args.path : '';\n const size = `${content.length.toLocaleString('en-US')} chars`;\n if (content.length === 0) return { path, size, preview: [], hidden: 0, gutter: 1 };\n const lines = content.replaceAll('\\t', ' ').replaceAll('\\r\\n', '\\n').split('\\n');\n while (lines.at(-1) === '') lines.pop();\n const visible = expanded ? lines : lines.slice(0, WRITE_COLLAPSED_LINES);\n const preview = visible.map((text, index) => ({ number: index + 1, text }));\n return { path, size, preview, hidden: lines.length - visible.length, gutter: String(visible.length).length };\n}\n\n/** `pattern · path · N results`, as the find call heading lists them. */\nexport function findCallView(args: Readonly<Record<string, unknown>>): SearchCallView {\n return {\n primary: typeof args.pattern === 'string' ? args.pattern : '',\n details: compactDetails([pathOrDot(args.path), optionalCount(args.limit, 'results')]),\n };\n}\n\n/** `path · N entries`, as the ls call heading lists them. */\nexport function lsCallView(args: Readonly<Record<string, unknown>>): SearchCallView {\n return { primary: pathOrDot(args.path), details: compactDetails([optionalCount(args.limit, 'entries')]) };\n}\n\n/** The result's text, from its blocks when the view exists and from the joined output otherwise. */\nexport function resultText(result: ToolResultView | null, output: string): string {\n if (result === null) return output;\n return result.content\n .flatMap((block) => {\n const record = typeof block === 'object' && block !== null ? (block as { type?: unknown; text?: unknown }) : {};\n return record.type === 'text' && typeof record.text === 'string' ? [record.text] : [];\n })\n .join('\\n');\n}\n\n/**\n * A find or ls listing the way Pi's own renderer shows it: the lines,\n * collapsed to twenty, and the limit warning its details carry. `limitKey`\n * names the per-tool counter (resultLimitReached, entryLimitReached).\n */\nexport function listResultView(\n result: ToolResultView | null,\n output: string,\n expanded: boolean,\n limitKey: string,\n limitUnit: string,\n): ListResultView {\n const text = resultText(result, output).trim();\n const all = text.length === 0 ? [] : text.split('\\n');\n const lines = expanded ? all : all.slice(0, LIST_COLLAPSED_LINES);\n const details =\n typeof result?.details === 'object' && result.details !== null ? (result.details as Record<string, unknown>) : {};\n const limit = details[limitKey];\n const truncation =\n typeof details.truncation === 'object' && details.truncation !== null\n ? (details.truncation as Record<string, unknown>)\n : undefined;\n const warnings: string[] = [];\n if (typeof limit === 'number' && limit > 0) warnings.push(`${limit} ${limitUnit} limit`);\n if (truncation?.truncated === true) {\n warnings.push(\n `${formatSize(typeof truncation.maxBytes === 'number' ? truncation.maxBytes : DEFAULT_MAX_BYTES)} limit`,\n );\n }\n return {\n lines,\n hidden: all.length - lines.length,\n truncated: warnings.length > 0 ? `[Truncated: ${warnings.join(', ')}]` : undefined,\n };\n}\n","import type { ToolMessageRenderProps } from '@agimon-ai/po-core/web';\nimport { MessageItemBody, MessageItemStatus } from '@agimon-ai/po-web-components';\n\nimport { listResultView, resultText } from '../_lib/builtinToolView';\n\n/**\n * The body shared by find and ls: Pi's listing lines, collapsed to twenty\n * until the item expands, with the limit warning its details carry.\n */\nexport function ListingBody({\n tool,\n limitKey,\n limitUnit,\n expanded,\n props,\n}: {\n tool: string;\n limitKey: string;\n limitUnit: string;\n expanded: boolean;\n props: ToolMessageRenderProps;\n}) {\n const { result, output, running, isError } = props;\n if (isError) {\n return (\n <MessageItemBody data-testid={`tool-result-${tool}`} className=\"flex flex-col\">\n <MessageItemStatus tone=\"error\">failed</MessageItemStatus>\n <span className=\"whitespace-pre-wrap break-words text-doom-red\">{resultText(result, output)}</span>\n </MessageItemBody>\n );\n }\n if (result === null) {\n return running ? (\n <MessageItemBody data-testid={`tool-result-${tool}`}>\n <MessageItemStatus tone=\"running\">running</MessageItemStatus>\n </MessageItemBody>\n ) : null;\n }\n const view = listResultView(result, output, expanded, limitKey, limitUnit);\n if (view.lines.length === 0 && view.truncated === undefined) return null;\n return (\n <MessageItemBody data-testid={`tool-result-${tool}`} className=\"flex flex-col font-mono\">\n {view.lines.map((line, index) => (\n <span key={`${String(index)}-${line}`} className=\"whitespace-pre-wrap break-words text-doom-text\">\n {line}\n </span>\n ))}\n {view.hidden > 0 ? <MessageItemStatus expands>{view.hidden} more lines</MessageItemStatus> : null}\n {view.truncated !== undefined ? <span className=\"text-doom-yellow\">{view.truncated}</span> : null}\n </MessageItemBody>\n );\n}\n\n/** Whether the listing hides lines while collapsed, so the item can offer its toggle. */\nexport function listingExpandable(props: ToolMessageRenderProps, limitKey: string, limitUnit: string): boolean {\n if (props.result === null || props.isError) return false;\n return listResultView(props.result, props.output, false, limitKey, limitUnit).hidden > 0;\n}\n","import type { ToolMessageRenderProps } from '@agimon-ai/po-core/web';\nimport { MessageItem, MessageItemHeader, toolTone } from '@agimon-ai/po-web-components';\n\nimport { findCallView } from '../_lib/builtinToolView';\nimport { ListingBody, listingExpandable } from './ListingBody';\n\nconst LIMIT_KEY = 'resultLimitReached';\nconst LIMIT_UNIT = 'results';\n\n/** The find tool's timeline item: `pattern · path · N results` over Pi's listing lines. */\nexport function FindToolMessage(props: ToolMessageRenderProps) {\n const view = findCallView(props.args);\n return (\n <MessageItem\n tone={toolTone({ running: props.running, isError: props.isError })}\n expandable={listingExpandable(props, LIMIT_KEY, LIMIT_UNIT)}\n >\n {({ expanded }) => (\n <>\n <MessageItemHeader title=\"find\">\n <span data-testid=\"tool-call-find\" className=\"flex min-w-0 flex-1 items-center gap-2\">\n <span className=\"truncate text-doom-text\">{view.primary}</span>\n {view.details.length > 0 ? (\n <span className=\"shrink-0 text-doom-faint\">· {view.details.join(' · ')}</span>\n ) : null}\n </span>\n </MessageItemHeader>\n <ListingBody tool=\"find\" limitKey={LIMIT_KEY} limitUnit={LIMIT_UNIT} expanded={expanded} props={props} />\n </>\n )}\n </MessageItem>\n );\n}\n","import { defineToolRenderer } from '@agimon-ai/po-core/web';\n\nimport { FindToolMessage } from './_components/FindToolMessage';\n\nexport default defineToolRenderer({ message: FindToolMessage });\n","import type { ToolMessageRenderProps } from '@agimon-ai/po-core/web';\nimport { MessageItem, MessageItemHeader, toolTone } from '@agimon-ai/po-web-components';\n\nimport { lsCallView } from '../_lib/builtinToolView';\nimport { ListingBody, listingExpandable } from './ListingBody';\n\nconst LIMIT_KEY = 'entryLimitReached';\nconst LIMIT_UNIT = 'entries';\n\n/** The ls tool's timeline item: `path · N entries` over Pi's listing lines. */\nexport function LsToolMessage(props: ToolMessageRenderProps) {\n const view = lsCallView(props.args);\n return (\n <MessageItem\n tone={toolTone({ running: props.running, isError: props.isError })}\n expandable={listingExpandable(props, LIMIT_KEY, LIMIT_UNIT)}\n >\n {({ expanded }) => (\n <>\n <MessageItemHeader title=\"ls\">\n <span data-testid=\"tool-call-ls\" className=\"flex min-w-0 flex-1 items-center gap-2\">\n <span className=\"truncate text-doom-text\">{view.primary}</span>\n {view.details.length > 0 ? (\n <span className=\"shrink-0 text-doom-faint\">· {view.details.join(' · ')}</span>\n ) : null}\n </span>\n </MessageItemHeader>\n <ListingBody tool=\"ls\" limitKey={LIMIT_KEY} limitUnit={LIMIT_UNIT} expanded={expanded} props={props} />\n </>\n )}\n </MessageItem>\n );\n}\n","import { defineToolRenderer } from '@agimon-ai/po-core/web';\n\nimport { LsToolMessage } from './_components/LsToolMessage';\n\nexport default defineToolRenderer({ message: LsToolMessage });\n","import type { ToolMessageRenderProps } from '@agimon-ai/po-core/web';\nimport {\n MessageItem,\n MessageItemBody,\n MessageItemHeader,\n MessageItemStatus,\n SyntaxLine,\n ToolPathLink,\n toolTone,\n useSyntaxLines,\n} from '@agimon-ai/po-web-components';\n\nimport { resultText, type WriteCallView, writeCallView } from '../_lib/builtinToolView';\n\n/**\n * The numbered preview, coloured as the file it is about to become.\n *\n * Its own component so the highlighting hook has somewhere to live: the body\n * around it is picked inside a render prop. The preview is a prefix of the\n * content, so it parses as the file it came from up to wherever it was cut.\n */\nfunction WritePreview({ view, path }: { view: WriteCallView; path: string }) {\n const spans = useSyntaxLines(view.preview.map((line) => line.text).join('\\n'), { path });\n return (\n <>\n {view.preview.map((line, index) => (\n <span key={line.number} className=\"flex gap-2\">\n <span className=\"shrink-0 text-right text-doom-faint\" style={{ width: `${String(view.gutter)}ch` }}>\n {line.number}\n </span>\n <SyntaxLine\n spans={spans?.[index]}\n text={line.text}\n className=\"min-w-0 whitespace-pre-wrap break-words text-doom-text\"\n />\n </span>\n ))}\n </>\n );\n}\n\n/**\n * The write tool's timeline item: `path · N chars` in the header. Pi's write\n * result is silent on success, so the body shows the numbered preview the\n * TUI folds into its call: ten lines, or all of them once the item expands.\n * A failure shows the tool's message in red instead.\n */\nexport function WriteToolMessage({\n args,\n result,\n output,\n running,\n isError,\n fileTabFor,\n openTransientTab,\n}: ToolMessageRenderProps) {\n const collapsed = writeCallView(args, false);\n // The header names a file the tool is writing, so the reader can open it\n // rather than hunt for it; nothing installed to show files leaves it as text.\n const tab = fileTabFor(collapsed.path);\n return (\n <MessageItem tone={toolTone({ running, isError })} expandable={collapsed.hidden > 0}>\n {({ expanded }) => {\n const view = expanded ? writeCallView(args, true) : collapsed;\n return (\n <>\n <MessageItemHeader title=\"write\">\n <span data-testid=\"tool-call-write\" className=\"flex min-w-0 flex-1 items-center gap-2\">\n <ToolPathLink\n path={view.path}\n {...(tab === undefined ? {} : { onOpen: () => openTransientTab(tab) })}\n />\n <span className=\"shrink-0 text-doom-faint\">· {view.size}</span>\n </span>\n </MessageItemHeader>\n {isError ? (\n <MessageItemBody data-testid=\"tool-result-write\" className=\"flex flex-col\">\n <MessageItemStatus tone=\"error\">failed</MessageItemStatus>\n <span className=\"whitespace-pre-wrap break-words text-doom-red\">{resultText(result, output)}</span>\n </MessageItemBody>\n ) : view.preview.length === 0 ? (\n running ? (\n <MessageItemBody data-testid=\"tool-result-write\">\n <MessageItemStatus tone=\"running\">running</MessageItemStatus>\n </MessageItemBody>\n ) : null\n ) : (\n <MessageItemBody data-testid=\"tool-result-write\" className=\"flex flex-col font-mono\">\n <WritePreview view={view} path={view.path} />\n {view.hidden > 0 ? <MessageItemStatus expands>{view.hidden} more lines</MessageItemStatus> : null}\n {running ? <MessageItemStatus tone=\"running\">running</MessageItemStatus> : null}\n </MessageItemBody>\n )}\n </>\n );\n }}\n </MessageItem>\n );\n}\n","import { defineToolRenderer } from '@agimon-ai/po-core/web';\n\nimport { WriteToolMessage } from './_components/WriteToolMessage';\n\nexport default defineToolRenderer({ message: WriteToolMessage });\n","// Generated by @agimon-ai/po-build. Do not edit by hand.\nimport { defineWebPlugin, type WebPluginContributions } from '@agimon-ai/po-core/web';\n\nimport toolFind from '../src/extensions/workspaces/sessions/(frontend)/tool/find.web';\nimport toolLs from '../src/extensions/workspaces/sessions/(frontend)/tool/ls.web';\nimport toolWrite from '../src/extensions/workspaces/sessions/(frontend)/tool/write.web';\n\nconst via = <T>(identity: Record<string, unknown>, value: unknown): T =>\n (value === undefined ? undefined : { ...identity, ...(value as object) }) as T;\n\nexport const webPlugin = defineWebPlugin({\n id: 'builtin-tools',\n session: {\n get toolRenderers(): WebPluginContributions['toolRenderers'] { return [via({ tools: ['find'] }, toolFind), via({ tools: ['ls'] }, toolLs), via({ tools: ['write'] }, toolWrite)]; },\n },\n});\n"],"mappings":"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"}
1
+ {"version":3,"file":"web.mjs","names":["LIMIT_KEY","LIMIT_UNIT","toolFind","toolLs","toolWrite"],"sources":["../../src/extensions/workspaces/sessions/(frontend)/tool/_lib/builtinToolView.ts","../../src/extensions/workspaces/sessions/(frontend)/tool/_components/ListingBody.tsx","../../src/extensions/workspaces/sessions/(frontend)/tool/_components/FindToolMessage.tsx","../../src/extensions/workspaces/sessions/(frontend)/tool/find.web.tsx","../../src/extensions/workspaces/sessions/(frontend)/tool/_components/LsToolMessage.tsx","../../src/extensions/workspaces/sessions/(frontend)/tool/ls.web.tsx","../../src/extensions/workspaces/sessions/(frontend)/tool/_components/WriteToolMessage.tsx","../../src/extensions/workspaces/sessions/(frontend)/tool/write.web.tsx","../../generated/web.ts"],"sourcesContent":["import type { ToolResultView } from '@agimon-ai/po-core/web';\n\n/** The TUI's collapsed budgets: ten preview lines for a write, twenty for a listing. */\nexport const WRITE_COLLAPSED_LINES = 10;\nexport const LIST_COLLAPSED_LINES = 20;\n/** Pi's default output cap, the size its truncation warning names when details omit one. */\nconst DEFAULT_MAX_BYTES = 50 * 1024;\nconst KIBIBYTE = 1024;\n\nexport interface NumberedLine {\n readonly number: number;\n readonly text: string;\n}\n\nexport interface WriteCallView {\n readonly path: string;\n /** `N chars`, the size the TUI's call heading shows. */\n readonly size: string;\n readonly preview: readonly NumberedLine[];\n readonly hidden: number;\n /** Widest shown line number, in characters. */\n readonly gutter: number;\n}\n\nexport interface SearchCallView {\n readonly primary: string;\n readonly details: readonly string[];\n}\n\nexport interface ListResultView {\n readonly lines: readonly string[];\n readonly hidden: number;\n /** Pi's `[Truncated: ...]` warning, when the listing hit a limit. */\n readonly truncated: string | undefined;\n}\n\nfunction compactDetails(values: ReadonlyArray<string | undefined>): string[] {\n return values.filter((value): value is string => value !== undefined && value.length > 0);\n}\n\nfunction optionalCount(value: unknown, unit: string): string | undefined {\n return typeof value === 'number' && Number.isFinite(value) ? `${value} ${unit}` : undefined;\n}\n\nfunction pathOrDot(value: unknown): string {\n return typeof value === 'string' && value.length > 0 ? value : '.';\n}\n\n/** Pi's size formatter, so the web warning names the same figure the TUI does. */\nexport function formatSize(bytes: number): string {\n if (bytes < KIBIBYTE) return `${bytes}B`;\n if (bytes < KIBIBYTE * KIBIBYTE) return `${(bytes / KIBIBYTE).toFixed(1)}KB`;\n return `${(bytes / (KIBIBYTE * KIBIBYTE)).toFixed(1)}MB`;\n}\n\n/** What the write call shows: the path, the content size, and a numbered preview of the file. */\nexport function writeCallView(args: Readonly<Record<string, unknown>>, expanded: boolean): WriteCallView {\n const content = typeof args.content === 'string' ? args.content : '';\n const path = typeof args.path === 'string' ? args.path : '';\n const size = `${content.length.toLocaleString('en-US')} chars`;\n if (content.length === 0) return { path, size, preview: [], hidden: 0, gutter: 1 };\n const lines = content.replaceAll('\\t', ' ').replaceAll('\\r\\n', '\\n').split('\\n');\n while (lines.at(-1) === '') lines.pop();\n const visible = expanded ? lines : lines.slice(0, WRITE_COLLAPSED_LINES);\n const preview = visible.map((text, index) => ({ number: index + 1, text }));\n return { path, size, preview, hidden: lines.length - visible.length, gutter: String(visible.length).length };\n}\n\n/** `pattern · path · N results`, as the find call heading lists them. */\nexport function findCallView(args: Readonly<Record<string, unknown>>): SearchCallView {\n return {\n primary: typeof args.pattern === 'string' ? args.pattern : '',\n details: compactDetails([pathOrDot(args.path), optionalCount(args.limit, 'results')]),\n };\n}\n\n/** `path · N entries`, as the ls call heading lists them. */\nexport function lsCallView(args: Readonly<Record<string, unknown>>): SearchCallView {\n return { primary: pathOrDot(args.path), details: compactDetails([optionalCount(args.limit, 'entries')]) };\n}\n\n/** The result's text, from its blocks when the view exists and from the joined output otherwise. */\nexport function resultText(result: ToolResultView | null, output: string): string {\n if (result === null) return output;\n return result.content\n .flatMap((block) => {\n const record = typeof block === 'object' && block !== null ? (block as { type?: unknown; text?: unknown }) : {};\n return record.type === 'text' && typeof record.text === 'string' ? [record.text] : [];\n })\n .join('\\n');\n}\n\n/**\n * A find or ls listing the way Pi's own renderer shows it: the lines,\n * collapsed to twenty, and the limit warning its details carry. `limitKey`\n * names the per-tool counter (resultLimitReached, entryLimitReached).\n */\nexport function listResultView(\n result: ToolResultView | null,\n output: string,\n expanded: boolean,\n limitKey: string,\n limitUnit: string,\n): ListResultView {\n const text = resultText(result, output).trim();\n const all = text.length === 0 ? [] : text.split('\\n');\n const lines = expanded ? all : all.slice(0, LIST_COLLAPSED_LINES);\n const details =\n typeof result?.details === 'object' && result.details !== null ? (result.details as Record<string, unknown>) : {};\n const limit = details[limitKey];\n const truncation =\n typeof details.truncation === 'object' && details.truncation !== null\n ? (details.truncation as Record<string, unknown>)\n : undefined;\n const warnings: string[] = [];\n if (typeof limit === 'number' && limit > 0) warnings.push(`${limit} ${limitUnit} limit`);\n if (truncation?.truncated === true) {\n warnings.push(\n `${formatSize(typeof truncation.maxBytes === 'number' ? truncation.maxBytes : DEFAULT_MAX_BYTES)} limit`,\n );\n }\n return {\n lines,\n hidden: all.length - lines.length,\n truncated: warnings.length > 0 ? `[Truncated: ${warnings.join(', ')}]` : undefined,\n };\n}\n","import type { ToolMessageRenderProps } from '@agimon-ai/po-core/web';\nimport { MessageItemBody, MessageItemStatus } from '@agimon-ai/po-web-components';\n\nimport { listResultView, resultText } from '../_lib/builtinToolView';\n\n/**\n * The body shared by find and ls: Pi's listing lines, collapsed to twenty\n * until the item expands, with the limit warning its details carry.\n */\nexport function ListingBody({\n tool,\n limitKey,\n limitUnit,\n expanded,\n props,\n}: {\n tool: string;\n limitKey: string;\n limitUnit: string;\n expanded: boolean;\n props: ToolMessageRenderProps;\n}) {\n const { result, output, running, isError } = props;\n if (isError) {\n return (\n <MessageItemBody data-testid={`tool-result-${tool}`} className=\"flex flex-col\">\n <MessageItemStatus tone=\"error\">failed</MessageItemStatus>\n <span className=\"whitespace-pre-wrap break-words text-po-red\">{resultText(result, output)}</span>\n </MessageItemBody>\n );\n }\n if (result === null) {\n return running ? (\n <MessageItemBody data-testid={`tool-result-${tool}`}>\n <MessageItemStatus tone=\"running\">running</MessageItemStatus>\n </MessageItemBody>\n ) : null;\n }\n const view = listResultView(result, output, expanded, limitKey, limitUnit);\n if (view.lines.length === 0 && view.truncated === undefined) return null;\n return (\n <MessageItemBody data-testid={`tool-result-${tool}`} className=\"flex flex-col font-mono\">\n {view.lines.map((line, index) => (\n <span key={`${String(index)}-${line}`} className=\"whitespace-pre-wrap break-words text-po-text\">\n {line}\n </span>\n ))}\n {view.hidden > 0 ? <MessageItemStatus expands>{view.hidden} more lines</MessageItemStatus> : null}\n {view.truncated !== undefined ? <span className=\"text-po-yellow\">{view.truncated}</span> : null}\n </MessageItemBody>\n );\n}\n\n/** Whether the listing hides lines while collapsed, so the item can offer its toggle. */\nexport function listingExpandable(props: ToolMessageRenderProps, limitKey: string, limitUnit: string): boolean {\n if (props.result === null || props.isError) return false;\n return listResultView(props.result, props.output, false, limitKey, limitUnit).hidden > 0;\n}\n","import type { ToolMessageRenderProps } from '@agimon-ai/po-core/web';\nimport { MessageItem, MessageItemHeader, toolTone } from '@agimon-ai/po-web-components';\n\nimport { findCallView } from '../_lib/builtinToolView';\nimport { ListingBody, listingExpandable } from './ListingBody';\n\nconst LIMIT_KEY = 'resultLimitReached';\nconst LIMIT_UNIT = 'results';\n\n/** The find tool's timeline item: `pattern · path · N results` over Pi's listing lines. */\nexport function FindToolMessage(props: ToolMessageRenderProps) {\n const view = findCallView(props.args);\n return (\n <MessageItem\n tone={toolTone({ running: props.running, isError: props.isError })}\n expandable={listingExpandable(props, LIMIT_KEY, LIMIT_UNIT)}\n >\n {({ expanded }) => (\n <>\n <MessageItemHeader title=\"find\">\n <span data-testid=\"tool-call-find\" className=\"flex min-w-0 flex-1 items-center gap-2\">\n <span className=\"truncate text-po-text\">{view.primary}</span>\n {view.details.length > 0 ? (\n <span className=\"shrink-0 text-po-faint\">· {view.details.join(' · ')}</span>\n ) : null}\n </span>\n </MessageItemHeader>\n <ListingBody tool=\"find\" limitKey={LIMIT_KEY} limitUnit={LIMIT_UNIT} expanded={expanded} props={props} />\n </>\n )}\n </MessageItem>\n );\n}\n","import { defineToolRenderer } from '@agimon-ai/po-core/web';\n\nimport { FindToolMessage } from './_components/FindToolMessage';\n\nexport default defineToolRenderer({ message: FindToolMessage });\n","import type { ToolMessageRenderProps } from '@agimon-ai/po-core/web';\nimport { MessageItem, MessageItemHeader, toolTone } from '@agimon-ai/po-web-components';\n\nimport { lsCallView } from '../_lib/builtinToolView';\nimport { ListingBody, listingExpandable } from './ListingBody';\n\nconst LIMIT_KEY = 'entryLimitReached';\nconst LIMIT_UNIT = 'entries';\n\n/** The ls tool's timeline item: `path · N entries` over Pi's listing lines. */\nexport function LsToolMessage(props: ToolMessageRenderProps) {\n const view = lsCallView(props.args);\n return (\n <MessageItem\n tone={toolTone({ running: props.running, isError: props.isError })}\n expandable={listingExpandable(props, LIMIT_KEY, LIMIT_UNIT)}\n >\n {({ expanded }) => (\n <>\n <MessageItemHeader title=\"ls\">\n <span data-testid=\"tool-call-ls\" className=\"flex min-w-0 flex-1 items-center gap-2\">\n <span className=\"truncate text-po-text\">{view.primary}</span>\n {view.details.length > 0 ? (\n <span className=\"shrink-0 text-po-faint\">· {view.details.join(' · ')}</span>\n ) : null}\n </span>\n </MessageItemHeader>\n <ListingBody tool=\"ls\" limitKey={LIMIT_KEY} limitUnit={LIMIT_UNIT} expanded={expanded} props={props} />\n </>\n )}\n </MessageItem>\n );\n}\n","import { defineToolRenderer } from '@agimon-ai/po-core/web';\n\nimport { LsToolMessage } from './_components/LsToolMessage';\n\nexport default defineToolRenderer({ message: LsToolMessage });\n","import type { ToolMessageRenderProps } from '@agimon-ai/po-core/web';\nimport {\n MessageItem,\n MessageItemBody,\n MessageItemHeader,\n MessageItemStatus,\n SyntaxLine,\n ToolPathLink,\n toolTone,\n useSyntaxLines,\n} from '@agimon-ai/po-web-components';\n\nimport { resultText, type WriteCallView, writeCallView } from '../_lib/builtinToolView';\n\n/**\n * The numbered preview, coloured as the file it is about to become.\n *\n * Its own component so the highlighting hook has somewhere to live: the body\n * around it is picked inside a render prop. The preview is a prefix of the\n * content, so it parses as the file it came from up to wherever it was cut.\n */\nfunction WritePreview({ view, path }: { view: WriteCallView; path: string }) {\n const spans = useSyntaxLines(view.preview.map((line) => line.text).join('\\n'), { path });\n return (\n <>\n {view.preview.map((line, index) => (\n <span key={line.number} className=\"flex gap-2\">\n <span className=\"shrink-0 text-right text-po-faint\" style={{ width: `${String(view.gutter)}ch` }}>\n {line.number}\n </span>\n <SyntaxLine\n spans={spans?.[index]}\n text={line.text}\n className=\"min-w-0 whitespace-pre-wrap break-words text-po-text\"\n />\n </span>\n ))}\n </>\n );\n}\n\n/**\n * The write tool's timeline item: `path · N chars` in the header. Pi's write\n * result is silent on success, so the body shows the numbered preview the\n * TUI folds into its call: ten lines, or all of them once the item expands.\n * A failure shows the tool's message in red instead.\n */\nexport function WriteToolMessage({\n args,\n result,\n output,\n running,\n isError,\n fileTabFor,\n openTransientTab,\n}: ToolMessageRenderProps) {\n const collapsed = writeCallView(args, false);\n // The header names a file the tool is writing, so the reader can open it\n // rather than hunt for it; nothing installed to show files leaves it as text.\n const tab = fileTabFor(collapsed.path);\n return (\n <MessageItem tone={toolTone({ running, isError })} expandable={collapsed.hidden > 0}>\n {({ expanded }) => {\n const view = expanded ? writeCallView(args, true) : collapsed;\n return (\n <>\n <MessageItemHeader title=\"write\">\n <span data-testid=\"tool-call-write\" className=\"flex min-w-0 flex-1 items-center gap-2\">\n <ToolPathLink\n path={view.path}\n {...(tab === undefined ? {} : { onOpen: () => openTransientTab(tab) })}\n />\n <span className=\"shrink-0 text-po-faint\">· {view.size}</span>\n </span>\n </MessageItemHeader>\n {isError ? (\n <MessageItemBody data-testid=\"tool-result-write\" className=\"flex flex-col\">\n <MessageItemStatus tone=\"error\">failed</MessageItemStatus>\n <span className=\"whitespace-pre-wrap break-words text-po-red\">{resultText(result, output)}</span>\n </MessageItemBody>\n ) : view.preview.length === 0 ? (\n running ? (\n <MessageItemBody data-testid=\"tool-result-write\">\n <MessageItemStatus tone=\"running\">running</MessageItemStatus>\n </MessageItemBody>\n ) : null\n ) : (\n <MessageItemBody data-testid=\"tool-result-write\" className=\"flex flex-col font-mono\">\n <WritePreview view={view} path={view.path} />\n {view.hidden > 0 ? <MessageItemStatus expands>{view.hidden} more lines</MessageItemStatus> : null}\n {running ? <MessageItemStatus tone=\"running\">running</MessageItemStatus> : null}\n </MessageItemBody>\n )}\n </>\n );\n }}\n </MessageItem>\n );\n}\n","import { defineToolRenderer } from '@agimon-ai/po-core/web';\n\nimport { WriteToolMessage } from './_components/WriteToolMessage';\n\nexport default defineToolRenderer({ message: WriteToolMessage });\n","// Generated by @agimon-ai/po-build. Do not edit by hand.\nimport { defineWebPlugin, type WebPluginContributions } from '@agimon-ai/po-core/web';\n\nimport toolFind from '../src/extensions/workspaces/sessions/(frontend)/tool/find.web';\nimport toolLs from '../src/extensions/workspaces/sessions/(frontend)/tool/ls.web';\nimport toolWrite from '../src/extensions/workspaces/sessions/(frontend)/tool/write.web';\n\nconst via = <T>(identity: Record<string, unknown>, value: unknown): T =>\n (value === undefined ? undefined : { ...identity, ...(value as object) }) as T;\n\nexport const webPlugin = defineWebPlugin({\n id: 'builtin-tools',\n session: {\n get toolRenderers(): WebPluginContributions['toolRenderers'] { return [via({ tools: ['find'] }, toolFind), via({ tools: ['ls'] }, toolLs), via({ tools: ['write'] }, toolWrite)]; },\n },\n});\n"],"mappings":"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"}
package/dist/footer.d.mts CHANGED
@@ -1,2 +1,2 @@
1
- import { DoomFooterContributionDefinition, DoomFooterContributionHandle, DoomFooterContributionValue, DoomFooterStatus, FooterStatusItem, FooterStatusItemSchema, FooterStatusPlacement, FooterStatusPlacementSchema, FooterTextColor, FooterTextColorSchema, FooterTextSegment, FooterTextSegmentSchema } from "@agimon-ai/po-core/footer";
2
- export { type DoomFooterContributionDefinition, type DoomFooterContributionHandle, type DoomFooterContributionValue, type DoomFooterStatus, type FooterStatusItem, FooterStatusItemSchema, type FooterStatusPlacement, FooterStatusPlacementSchema, type FooterTextColor, FooterTextColorSchema, type FooterTextSegment, FooterTextSegmentSchema };
1
+ import { FooterStatusItem, FooterStatusItemSchema, FooterStatusPlacement, FooterStatusPlacementSchema, FooterTextColor, FooterTextColorSchema, FooterTextSegment, FooterTextSegmentSchema, PoFooterContributionDefinition, PoFooterContributionHandle, PoFooterContributionValue, PoFooterStatus } from "@agimon-ai/po-core/footer";
2
+ export { type FooterStatusItem, FooterStatusItemSchema, type FooterStatusPlacement, FooterStatusPlacementSchema, type FooterTextColor, FooterTextColorSchema, type FooterTextSegment, FooterTextSegmentSchema, type PoFooterContributionDefinition, type PoFooterContributionHandle, type PoFooterContributionValue, type PoFooterStatus };